diff -Naur mahogany-0.67/acinclude.m4 mahogany-0.67.20060903/acinclude.m4 --- mahogany-0.67/acinclude.m4 2004-10-11 01:55:35.000000000 +0200 +++ mahogany-0.67.20060903/acinclude.m4 2006-09-02 22:32:06.000000000 +0200 @@ -1,4 +1,4 @@ -dnl $Id: acinclude.m4,v 1.9 2004/10/10 23:55:35 vadz Exp $ +dnl $Id: acinclude.m4,v 1.11 2006/08/25 15:38:28 vadz Exp $ dnl local macro definitions for M's configure.in dnl package,message,variable,default,helpmessage @@ -170,263 +170,19 @@ ] ) - -## libtool.m4 - Configure libtool for the target system. -*-Shell-script-*- -## Copyright (C) 1996-1998 Free Software Foundation, Inc. -## Gordon Matzigkeit , 1996 -## -## This program is free software; you can redistribute it and/or modify -## it under the terms of the GNU General Public License as published by -## the Free Software Foundation; either version 2 of the License, or -## (at your option) any later version. -## -## This program is distributed in the hope that it will be useful, but -## WITHOUT ANY WARRANTY; without even the implied warranty of -## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -## General Public License for more details. -## -## You should have received a copy of the GNU General Public License -## along with this program; if not, write to the Free Software -## Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -## -## As a special exception to the GNU General Public License, if you -## distribute this file as part of a program that contains a -## configuration script generated by Autoconf, you may include it under -## the same distribution terms that you use for the rest of that program. - -# serial 24 AM_PROG_LIBTOOL -AC_DEFUN([AM_PROG_LIBTOOL], -[AC_REQUIRE([AM_ENABLE_SHARED])dnl -AC_REQUIRE([AM_ENABLE_STATIC])dnl -AC_REQUIRE([AC_CANONICAL_HOST])dnl -AC_REQUIRE([AC_PROG_RANLIB])dnl -AC_REQUIRE([AC_PROG_CC])dnl -AC_REQUIRE([AM_PROG_LD])dnl -AC_REQUIRE([AM_PROG_NM])dnl -AC_REQUIRE([AC_PROG_LN_S])dnl +dnl M_GCC_OPTION(OPTION, ACTION-IF-SUPPORTED, ACTION-IF-NOT-SUPPORTED) dnl -# Always use our own libtool. -LIBTOOL='$(SHELL) $(top_builddir)/libtool' -AC_SUBST(LIBTOOL)dnl - -# Check for any special flags to pass to ltconfig. -libtool_flags= -test "$enable_shared" = no && libtool_flags="$libtool_flags --disable-shared" -test "$enable_static" = no && libtool_flags="$libtool_flags --disable-static" -test "$silent" = yes && libtool_flags="$libtool_flags --silent" -test "$ac_cv_prog_gcc" = yes && libtool_flags="$libtool_flags --with-gcc" -test "$ac_cv_prog_gnu_ld" = yes && libtool_flags="$libtool_flags --with-gnu-ld" - -# Some flags need to be propagated to the compiler or linker for good -# libtool support. -case "$host" in -*-*-irix6*) - # Find out which ABI we are using. - echo '[#]line __oline__ "configure"' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - case "`/usr/bin/file conftest.o`" in - *32-bit*) - LD="${LD-ld} -32" - ;; - *N32*) - LD="${LD-ld} -n32" - ;; - *64-bit*) - LD="${LD-ld} -64" - ;; - esac - fi - rm -rf conftest* - ;; - -*-*-sco3.2v5*) - # On SCO OpenServer 5, we need -belf to get full-featured binaries. - CFLAGS="$CFLAGS -belf" - ;; -esac - -# Actually configure libtool. ac_aux_dir is where install-sh is found. -CC="$CC" CFLAGS="$CFLAGS" CPPFLAGS="$CPPFLAGS" \ -LD="$LD" NM="$NM" RANLIB="$RANLIB" LN_S="$LN_S" \ -${CONFIG_SHELL-/bin/sh} $ac_aux_dir/ltconfig \ -$libtool_flags --no-verify $ac_aux_dir/ltmain.sh $host \ -|| AC_MSG_ERROR([libtool configure failed]) -]) - -# AM_ENABLE_SHARED - implement the --enable-shared flag -# Usage: AM_ENABLE_SHARED[(DEFAULT)] -# Where DEFAULT is either `yes' or `no'. If omitted, it defaults to -# `yes'. -AC_DEFUN([AM_ENABLE_SHARED], -[define([AM_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl -AC_ARG_ENABLE(shared, -changequote(<<, >>)dnl -<< --enable-shared build shared libraries [default=>>AM_ENABLE_SHARED_DEFAULT] -changequote([, ])dnl -[ --enable-shared=PKGS only build shared libraries if the current package - appears as an element in the PKGS list], -[p=${PACKAGE-default} -case "$enableval" in -yes) enable_shared=yes ;; -no) enable_shared=no ;; -*) - enable_shared=no - # Look at the argument we got. We use all the common list separators. - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:," - for pkg in $enableval; do - if test "X$pkg" = "X$p"; then - enable_shared=yes - fi - done - IFS="$ac_save_ifs" - ;; -esac], -enable_shared=AM_ENABLE_SHARED_DEFAULT)dnl -]) - -# AM_DISABLE_SHARED - set the default shared flag to --disable-shared -AC_DEFUN([AM_DISABLE_SHARED], -[AM_ENABLE_SHARED(no)]) - -# AM_DISABLE_STATIC - set the default static flag to --disable-static -AC_DEFUN([AM_DISABLE_STATIC], -[AM_ENABLE_STATIC(no)]) - -# AM_ENABLE_STATIC - implement the --enable-static flag -# Usage: AM_ENABLE_STATIC[(DEFAULT)] -# Where DEFAULT is either `yes' or `no'. If omitted, it defaults to -# `yes'. -AC_DEFUN([AM_ENABLE_STATIC], -[define([AM_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl -AC_ARG_ENABLE(static, -changequote(<<, >>)dnl -<< --enable-static build static libraries [default=>>AM_ENABLE_STATIC_DEFAULT] -changequote([, ])dnl -[ --enable-static=PKGS only build shared libraries if the current package - appears as an element in the PKGS list], -[p=${PACKAGE-default} -case "$enableval" in -yes) enable_static=yes ;; -no) enable_static=no ;; -*) - enable_static=no - # Look at the argument we got. We use all the common list separators. - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:," - for pkg in $enableval; do - if test "X$pkg" = "X$p"; then - enable_static=yes - fi - done - IFS="$ac_save_ifs" - ;; -esac], -enable_static=AM_ENABLE_STATIC_DEFAULT)dnl -]) - - -# AM_PROG_LD - find the path to the GNU or non-GNU linker -AC_DEFUN([AM_PROG_LD], -[AC_ARG_WITH(gnu-ld, -[ --with-gnu-ld assume the C compiler uses GNU ld [default=no]], -test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no) -AC_REQUIRE([AC_PROG_CC]) -ac_prog=ld -if test "$ac_cv_prog_gcc" = yes; then - # Check if gcc -print-prog-name=ld gives a path. - AC_MSG_CHECKING([for ld used by GCC]) - ac_prog=`($CC -print-prog-name=ld) 2>&5` - case "$ac_prog" in - # Accept absolute paths. - /* | [A-Za-z]:\\*) - test -z "$LD" && LD="$ac_prog" - ;; - "") - # If it fails, then pretend we aren't using GCC. - ac_prog=ld - ;; - *) - # If it is relative, then search for the first ld in PATH. - with_gnu_ld=unknown - ;; - esac -elif test "$with_gnu_ld" = yes; then - AC_MSG_CHECKING([for GNU ld]) -else - AC_MSG_CHECKING([for non-GNU ld]) -fi -AC_CACHE_VAL(ac_cv_path_LD, -[if test -z "$LD"; then - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" - for ac_dir in $PATH; do - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/$ac_prog"; then - ac_cv_path_LD="$ac_dir/$ac_prog" - # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some GNU ld's only accept -v. - # Break only if it was the GNU/non-GNU ld that we prefer. - if "$ac_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then - test "$with_gnu_ld" != no && break - else - test "$with_gnu_ld" != yes && break - fi - fi - done - IFS="$ac_save_ifs" -else - ac_cv_path_LD="$LD" # Let the user override the test with a path. -fi]) -LD="$ac_cv_path_LD" -if test -n "$LD"; then - AC_MSG_RESULT($LD) -else - AC_MSG_RESULT(no) -fi -test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH]) -AC_SUBST(LD) -AM_PROG_LD_GNU -]) - -AC_DEFUN([AM_PROG_LD_GNU], -[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], ac_cv_prog_gnu_ld, -[# I'd rather use --version here, but apparently some GNU ld's only accept -v. -if $LD -v 2>&1 &5; then - ac_cv_prog_gnu_ld=yes -else - ac_cv_prog_gnu_ld=no -fi]) -]) - -# AM_PROG_NM - find the path to a BSD-compatible name lister -AC_DEFUN([AM_PROG_NM], -[AC_MSG_CHECKING([for BSD-compatible nm]) -AC_CACHE_VAL(ac_cv_path_NM, -[case "$NM" in -/* | [A-Za-z]:\\*) - ac_cv_path_NM="$NM" # Let the user override the test with a path. - ;; -*) - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" - for ac_dir in /usr/ucb /usr/ccs/bin $PATH /bin; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/nm; then - # Check to see if the nm accepts a BSD-compat flag. - # Adding the `sed 1q' prevents false positives on HP-UX, which says: - # nm: unknown option "B" ignored - if ($ac_dir/nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then - ac_cv_path_NM="$ac_dir/nm -B" - elif ($ac_dir/nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then - ac_cv_path_NM="$ac_dir/nm -p" - else - ac_cv_path_NM="$ac_dir/nm" - fi - break - fi - done - IFS="$ac_save_ifs" - test -z "$ac_cv_path_NM" && ac_cv_path_NM=nm - ;; -esac]) -NM="$ac_cv_path_NM" -AC_MSG_RESULT([$NM]) -AC_SUBST(NM) +dnl Check if gcc supports the given option (fails if compiler is not gcc) +AC_DEFUN([M_GCC_OPTION], [ + AC_REQUIRE([AC_PROG_CC]) + if test "x$GCC" = "xyes"; then + echo 'void f(){}' >conftest.c + case "`$CC $1 -c conftest.c 2>&1`" in + '') ifelse([$2], , :, [$2]) ;; + *) ifelse([$3], , :, [$3]) ;; + esac + rm -f conftest.* + else + ifelse([$3], , :, [$3]) + fi ]) diff -Naur mahogany-0.67/configure mahogany-0.67.20060903/configure --- mahogany-0.67/configure 2006-07-31 01:31:56.000000000 +0200 +++ mahogany-0.67.20060903/configure 2006-09-02 22:32:13.000000000 +0200 @@ -16,7 +16,7 @@ ac_help="$ac_help --disable-optimize disable optimization (automatic if debugging)" ac_help="$ac_help - --with-wxdebug use debug wxWindows libraries" + --with-wxdebug use debug wxWidgets libraries" ac_help="$ac_help --with-dmalloc use dmalloc (http://dmalloc.com/) for debugging" ac_help="$ac_help @@ -568,7 +568,7 @@ fi -# From configure.in Id: configure.in,v 1.316 2006/05/03 20:16:04 vadz Exp +# From configure.in Id: configure.in,v 1.318 2006/08/25 15:39:12 vadz Exp rm -f conftestdata if ln -s X conftestdata 2>/dev/null @@ -2143,14 +2143,14 @@ if test -f /etc/redhat-release -a ! grep "7\.0" /etc/redhat-release then workarroundmsg=" It seems you are using Red Hat Linux 7.0. A workaround for your - problem is to use egcs to compile wxWindows and Mahogany: + problem is to use egcs to compile wxWidgets and Mahogany: - at your bash prompt type: export CC=egcs export CXX=egcs++ - - reconfigure and rebuild wxWindows and Mahogany + - reconfigure and rebuild wxWidgets and Mahogany (don't forget to remove the config.cache files located in the source code directories of - wxWindows and Mahogany before reconfiguring them." + wxWidgets and Mahogany before reconfiguring them." else workarroundmsg="" fi { echo "configure: error: Sorry, it seems that you have a buggy gcc version which is @@ -4481,13 +4481,13 @@ if test "$wxOK" != 1; then { echo "configure: error: - Mahogany requires wxWindows to be installed on your system + Mahogany requires wxWidgets to be installed on your system but wx-config script couldn't be found. Please check that wx-config is in PATH, the directory - where wxWindows libraries are installed (returned by + where wxWidgets libraries are installed (returned by 'wx-config --libs' command) is in LD_LIBRARY_PATH or - equivalent variable and wxWindows version is 2.5.2 or above. + equivalent variable and wxWidgets version is 2.5.2 or above. " 1>&2; exit 1; } fi @@ -4559,8 +4559,8 @@ fi case "$USE_THREADS" in 1) - echo $ac_n "checking if wxWindows was compiled with threads""... $ac_c" 1>&6 -echo "configure:4564: checking if wxWindows was compiled with threads" >&5 + echo $ac_n "checking if wxWidgets was compiled with threads""... $ac_c" 1>&6 +echo "configure:4564: checking if wxWidgets was compiled with threads" >&5 if eval "test \"`echo '$''{'m_cv_wx_threads'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -5324,8 +5324,30 @@ IMAP_CFLAGS="$CFLAGS" IMAP_CPPFLAGS="$IMAP_CPPFLAGS $CPPFLAGS" -if test "$GCC" = "yes"; then - IMAP_CPPFLAGS="$IMAP_CPPFLAGS -Wno-pointer-sign" +echo $ac_n "checking whether $CC accepts -Wno-pointer-sign""... $ac_c" 1>&6 +echo "configure:5329: checking whether $CC accepts -Wno-pointer-sign" >&5 +if eval "test \"`echo '$''{'m_cv_cc_no_warn_ptr_sign'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 +else + + + if test "x$GCC" = "xyes"; then + echo 'void f(){}' >conftest.c + case "`$CC -Wno-pointer-sign -c conftest.c 2>&1`" in + '') m_cv_cc_no_warn_ptr_sign="yes" ;; + *) m_cv_cc_no_warn_ptr_sign="no" ;; + esac + rm -f conftest.* + else + m_cv_cc_no_warn_ptr_sign="no" + fi + + +fi + +echo "$ac_t""$m_cv_cc_no_warn_ptr_sign" 1>&6 +if test $m_cv_cc_no_warn_ptr_sign = "yes"; then + IMAP_CPPFLAGS="$IMAP_CPPFLAGS -Wno-pointer-sign" fi @@ -5380,7 +5402,7 @@ if test "x$DEPFLAGS" != "x"; then if test "x$GXX" != "xyes"; then echo $ac_n "checking whether ${CXX} accepts ${DEPFLAGS}""... $ac_c" 1>&6 -echo "configure:5384: checking whether ${CXX} accepts ${DEPFLAGS}" >&5 +echo "configure:5406: checking whether ${CXX} accepts ${DEPFLAGS}" >&5 if eval "test \"`echo '$''{'m_cv_cxx_depflags'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -5403,7 +5425,7 @@ if test "x$DEPFLAGS" != "x"; then if test "x$GCC" != "xyes"; then echo $ac_n "checking whether ${CC} accepts ${DEPFLAGS}""... $ac_c" 1>&6 -echo "configure:5407: checking whether ${CC} accepts ${DEPFLAGS}" >&5 +echo "configure:5429: checking whether ${CC} accepts ${DEPFLAGS}" >&5 if eval "test \"`echo '$''{'m_cv_c_depflags'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -5958,7 +5980,7 @@ echo echo "Configured Mahogany ${M_VERSION_MAJOR}.${M_VERSION_MINOR}.${M_VERSION_RELEASE} for ${host}." echo "" -echo " wxWindows port used: ${WX_NAME} ${WX_VERSION}" +echo " wxWidgets port used: ${WX_NAME} ${WX_VERSION}" echo " Debug mode: ${debug_option}" echo " SSL support: ${ssl_option}" echo " Modules support: ${m_cv_USE_MODULES}" diff -Naur mahogany-0.67/configure.in mahogany-0.67.20060903/configure.in --- mahogany-0.67/configure.in 2006-07-31 02:32:44.000000000 +0200 +++ mahogany-0.67.20060903/configure.in 2006-09-02 22:32:46.000000000 +0200 @@ -1,7 +1,7 @@ dnl Process this file with autoconf to produce a configure script. AC_INIT(configure.in) -AC_REVISION([$Id: configure.in,v 1.317 2006/07/31 00:32:44 nerijus Exp $]) +AC_REVISION([$Id: configure.in,v 1.319 2006/08/31 23:58:25 vadz Exp $]) rm -f conftestdata if ln -s X conftestdata 2>/dev/null @@ -1293,9 +1293,15 @@ dnl imap IMAP_CFLAGS="$CFLAGS" IMAP_CPPFLAGS="$IMAP_CPPFLAGS $CPPFLAGS" -if test "$GCC" = "yes"; then - dnl there are too many warnings in c-client sources which its author - dnl refuses to fix, suppress them when using gcc +dnl there are too many warnings in c-client sources which its author +dnl refuses to fix, suppress them when using gcc4 +AC_CACHE_CHECK([whether $CC accepts -Wno-pointer-sign], + m_cv_cc_no_warn_ptr_sign, + [M_GCC_OPTION(-Wno-pointer-sign, + m_cv_cc_no_warn_ptr_sign="yes", + m_cv_cc_no_warn_ptr_sign="no")] +) +if test $m_cv_cc_no_warn_ptr_sign = "yes"; then IMAP_CPPFLAGS="$IMAP_CPPFLAGS -Wno-pointer-sign" fi AC_SUBST(IMAP_CPPFLAGS) diff -Naur mahogany-0.67/doc/release.txt mahogany-0.67.20060903/doc/release.txt --- mahogany-0.67/doc/release.txt 2006-08-06 22:40:43.000000000 +0200 +++ mahogany-0.67.20060903/doc/release.txt 2006-09-04 21:20:31.000000000 +0200 @@ -98,7 +98,6 @@ mahogany-announce@lists.sourceforge.net mahogany-users@lists.sourceforge.net -mahogany-developers@lists.sourceforge.net c-client@u.washington.edu wxwin-announce@lists.wxwindows.org @@ -118,7 +117,7 @@ Update the FM record -d) GNOME app map: http://www.gnome.org/softwaremap/projects/mahogany/ +d) GNOME app map: http://www.gnomefiles.org/app.php/Mahogany e) GNU Free Software Directory: http://www.gnu.org/directory/mahogany.html diff -Naur mahogany-0.67/include/gui/wxBrowseButton.h mahogany-0.67.20060903/include/gui/wxBrowseButton.h --- mahogany-0.67/include/gui/wxBrowseButton.h 2006-01-16 21:32:01.000000000 +0100 +++ mahogany-0.67.20060903/include/gui/wxBrowseButton.h 2006-09-02 21:50:01.000000000 +0200 @@ -6,7 +6,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 24.12.98 -// CVS-ID: $Id: wxBrowseButton.h,v 1.26 2006/01/16 20:32:01 nerijus Exp $ +// CVS-ID: $Id: wxBrowseButton.h,v 1.27 2006/08/31 23:18:29 vadz Exp $ // Copyright: (c) 1998 Vadim Zeitlin // Licence: M license /////////////////////////////////////////////////////////////////////////////// @@ -293,11 +293,6 @@ // show the font selection dialog virtual void DoBrowse(); - // convert between wxNativeFontInfo description and the string we show to - // the user in the text control - static String FontDescToUser(const String& desc); - static String FontDescFromUser(const String& desc); - private: DECLARE_NO_COPY_CLASS(wxFontBrowseButton) }; diff -Naur mahogany-0.67/include/guidef.h mahogany-0.67.20060903/include/guidef.h --- mahogany-0.67/include/guidef.h 2004-08-13 22:57:56.000000000 +0200 +++ mahogany-0.67.20060903/include/guidef.h 2006-09-02 21:52:17.000000000 +0200 @@ -1,14 +1,16 @@ -/*-*- c++ -*-******************************************************** - * guidef.h define the GUI implementation * - * * - * (C) 1997 by Karsten Ballüder (Ballueder@usa.net) * - * * - * $Id: guidef.h,v 1.25 2004/08/13 20:57:56 vadz Exp $ - * - *******************************************************************/ +/////////////////////////////////////////////////////////////////////////////// +// Project: M - cross platform e-mail GUI client +// File name: guidef.h +// Purpose: miscellaneous GUI helpers +// Author: Karsten Ballüder, Vadim Zeitlin +// Created: 1998 +// CVS-ID: $Id: guidef.h,v 1.26 2006/08/19 13:11:59 vadz Exp $ +// Copyright: (c) 1998-2006 Mahogany team +// Licence: M license +/////////////////////////////////////////////////////////////////////////////// -#ifndef GUIDEF_H -#define GUIDEF_H +#ifndef M_GUIDEF_H_ +#define M_GUIDEF_H_ #ifndef USE_PCH # include @@ -63,8 +65,6 @@ find a replacement encoding - if this succeeds, the text is translated into this encoding and the encoding parameter is modified in place. - Note that this function is implemented in wxMApp.cpp. - @param encoding the encoding to check, may be modified @param text the text we want to show in this encoding, may be translated @return true if this or equivalent encoding is available, false otherwise @@ -73,6 +73,24 @@ wxString *text = NULL, bool mayAskUser = false); +/** + Create a font from the given native font description or font family and + size. + + Notice that if neither of the parameters is specified (description is empty + and the other ones are -1), an invalid font is returned and the caller + should check for it and avoid using it in this case to avoid overriding the + default system font if the user didn't set any specific font to use. + + @param fontDesc opaque string returned by wxFont::GetNativeFontInfoDesc() + @param fontSize font size, -1 if not specified + @param fontFamily font family, wxFONTFAMILY_DEFAULT if not specified + @return font which may be invalid, to be checked by the caller + */ +extern wxFont +CreateFontFromDesc(const String& fontDesc, int fontSize, int fontFamily); + + // Prevent MEvent dispatch inside wxYield extern int g_busyCursorYield; @@ -86,4 +104,4 @@ ~MBusyCursor() { MEndBusyCursor(); } }; -#endif // GUIDEF_H +#endif // M_GUIDEF_H_ diff -Naur mahogany-0.67/include/Mdefaults.h mahogany-0.67.20060903/include/Mdefaults.h --- mahogany-0.67/include/Mdefaults.h 2005-05-15 23:16:50.000000000 +0200 +++ mahogany-0.67.20060903/include/Mdefaults.h 2006-09-02 21:54:59.000000000 +0200 @@ -5,7 +5,7 @@ // Author: Karsten Ballüder // Modified by: Vadim Zeitlin at 22.08.01 to use MOption class // Created: 1997 -// CVS-ID: $Id: Mdefaults.h,v 1.259 2005/05/15 21:16:50 vadz Exp $ +// CVS-ID: $Id: Mdefaults.h,v 1.260 2006/08/19 13:11:59 vadz Exp $ // Copyright: (c) 1997-2001 Mahogany team // Licence: M licence /////////////////////////////////////////////////////////////////////////////// @@ -15,14 +15,6 @@ class Profile; -// under Windows 12pt font looks too huge, letters are like in a book for -// children -#ifdef OS_WIN -# define DEFAULT_FONT_SIZE 10l -#else -# define DEFAULT_FONT_SIZE 12l -#endif - /** @name Levels of interaction, do something or not? NB: these values can't be changed as they are written to (and read from) diff -Naur mahogany-0.67/include/Moptions.h mahogany-0.67.20060903/include/Moptions.h --- mahogany-0.67/include/Moptions.h 2006-06-24 01:27:30.000000000 +0200 +++ mahogany-0.67.20060903/include/Moptions.h 2006-09-02 21:55:52.000000000 +0200 @@ -7,7 +7,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 23.08.01 -// CVS-ID: $Id: Moptions.h,v 1.105 2006/06/23 23:27:30 vadz Exp $ +// CVS-ID: $Id: Moptions.h,v 1.106 2006/08/19 13:11:59 vadz Exp $ // Copyright: (c) 2001 Vadim Zeitlin // Licence: M licence /////////////////////////////////////////////////////////////////////////////// @@ -1906,9 +1906,9 @@ /// message view title #define MP_MVIEW_TITLE_FMT_DEFVAL _("from $from about \"$subject\"") /// which font to use -#define MP_MVIEW_FONT_DEFVAL 6L +#define MP_MVIEW_FONT_DEFVAL 0L /// which font size -#define MP_MVIEW_FONT_SIZE_DEFVAL DEFAULT_FONT_SIZE +#define MP_MVIEW_FONT_SIZE_DEFVAL -1 /// the full font desc (replaces the 2 settings above) #define MP_MVIEW_FONT_DESC_DEFVAL wxEmptyString /// which foreground colour for the font @@ -1944,9 +1944,9 @@ /**@name Font settings for message view */ //@{ /// which font to use -#define MP_FVIEW_FONT_DEFVAL 4L +#define MP_FVIEW_FONT_DEFVAL 0L /// which font size -#define MP_FVIEW_FONT_SIZE_DEFVAL DEFAULT_FONT_SIZE +#define MP_FVIEW_FONT_SIZE_DEFVAL -1 /// the full font desc (replaces the 2 settings above) #define MP_FVIEW_FONT_DESC_DEFVAL wxEmptyString /// don't show full e-mail, only sender's name @@ -2007,9 +2007,9 @@ /**@name Font settings for compose view */ //@{ /// which font to use -#define MP_CVIEW_FONT_DEFVAL 6L +#define MP_CVIEW_FONT_DEFVAL 0L /// which font size -#define MP_CVIEW_FONT_SIZE_DEFVAL DEFAULT_FONT_SIZE +#define MP_CVIEW_FONT_SIZE_DEFVAL -1 /// the full font desc (replaces the 2 settings above) #define MP_CVIEW_FONT_DESC_DEFVAL wxEmptyString /// which foreground colour for the font diff -Naur mahogany-0.67/include/sysutil.h mahogany-0.67.20060903/include/sysutil.h --- mahogany-0.67/include/sysutil.h 2003-09-18 18:30:43.000000000 +0200 +++ mahogany-0.67.20060903/include/sysutil.h 2006-09-02 21:53:49.000000000 +0200 @@ -1,18 +1,17 @@ -/*-*- c++ -*-******************************************************** - * sysutil.h : utility functions for various OS functionality * - * * - * (C) 1999 by Karsten Ballüder (Ballueder@usa.net) * - * * - * $Id: sysutil.h,v 1.10 2003/09/18 16:30:43 robertvazan Exp $ - * - *******************************************************************/ +/////////////////////////////////////////////////////////////////////////////// +// Project: M - cross platform e-mail GUI client +// File name: include/sysutil.h +// Purpose: utility functions for various OS-level functionality +// Author: Karsten Ballüder, Vadim Zeitlin +// Created: 1999 +// CVS-ID: $Id: sysutil.h,v 1.11 2006/08/31 23:45:05 vadz Exp $ +// Copyright: (c) 1999 Karsten Ballüder +// (c) 2000-2006 Vadim Zeitlin +// Licence: M license +/////////////////////////////////////////////////////////////////////////////// - -#ifndef SYSUTIL_H -#define SYSUTIL_H - -#ifndef USE_PCH -#endif // USE_PCH +#ifndef M_SYSUTIL_H +#define M_SYSUTIL_H #include @@ -38,27 +37,50 @@ class MTempFileName { public: - // def ctor: creates the temp file and doesn't delete it unless told to do - // so (i.e. Ok() is called) - MTempFileName() : m_name (wxFileName::CreateTempFileName(_T("Mahogany"))) - { m_ok = false; } - - // ctor which takes a temp file name: still won't be deleted unless Ok() is - // called - MTempFileName(const String& name) : m_name(name) { m_ok = false; } + /** + Ctor creates a temporary file name and possibly associates it with the + specified file. + + If the temp file name is used for writing some data to it, the file + parameter must be specified as otherwise the operation wouldn't be atomic + and race conditions could occur. Do close the file before this object + goes out of scope in this case though as otherwise we could fail to + delete the temp file under Windows. + + @param file if non-NULL, the file to open (for writing) with the + temporary file name + */ + MTempFileName(wxFile *file = NULL) + : m_name(wxFileName::CreateTempFileName(_T("Mahogany"), file)) + { + m_keepFile = false; + } + + /** + Ctor from an existing temporary file name. - /// returns FALSE if temp file name couldn't be generated - bool IsOk() const { return !!m_name; } + The specified file will be deleted when this object is destroyed unless + Ok() is called. - /// get the name of the temp file + @param name of the existing temporary file + */ + MTempFileName(const String& name) : m_name(name) + { + m_keepFile = false; + } + + /// Returns false if temp file name couldn't be generated + bool IsOk() const { return !m_name.empty(); } + + /// Get the name of the temp file const String& GetName() const { return m_name; } - /// tells us not to delete the temp file - void Ok() { m_ok = true; } + /// Tells us not to delete the temp file + void Ok() { m_keepFile = true; } ~MTempFileName() { - if ( !m_ok && !m_name.empty() ) + if ( !m_keepFile && !m_name.empty() ) { if ( wxRemove(m_name) != 0 ) { @@ -69,9 +91,10 @@ private: String m_name; - bool m_ok; + bool m_keepFile; }; //@} -#endif + +#endif // M_SYSUTIL_H diff -Naur mahogany-0.67/src/adb/AdbFrame.cpp mahogany-0.67.20060903/src/adb/AdbFrame.cpp --- mahogany-0.67/src/adb/AdbFrame.cpp 2006-01-16 21:32:26.000000000 +0100 +++ mahogany-0.67.20060903/src/adb/AdbFrame.cpp 2006-09-02 21:57:54.000000000 +0200 @@ -5,7 +5,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 09.08.98 -// CVS-ID: $Id: AdbFrame.cpp,v 1.121 2006/01/16 20:32:26 nerijus Exp $ +// CVS-ID: $Id: AdbFrame.cpp,v 1.122 2006/08/25 16:06:53 vadz Exp $ // Copyright: (c) 1998 Vadim Zeitlin // Licence: M license /////////////////////////////////////////////////////////////////////////////// @@ -3166,7 +3166,7 @@ wxAdbTree::wxAdbTree(wxAdbEditFrame *frame, wxWindow *parent, long id) : wxTreeCtrl(parent, id, wxDefaultPosition, wxDefaultSize, - wxTR_HAS_BUTTONS | wxSUNKEN_BORDER) + wxTR_DEFAULT_STYLE | wxSUNKEN_BORDER) { m_frame = frame; m_menu = NULL; diff -Naur mahogany-0.67/src/classes/MessageView.cpp mahogany-0.67.20060903/src/classes/MessageView.cpp --- mahogany-0.67/src/classes/MessageView.cpp 2006-07-24 16:13:41.000000000 +0200 +++ mahogany-0.67.20060903/src/classes/MessageView.cpp 2006-09-02 21:59:25.000000000 +0200 @@ -8,7 +8,7 @@ // Author: Vadim Zeitlin (based on gui/MessageView.cpp by Karsten) // Modified by: // Created: 24.07.01 -// CVS-ID: $Id: MessageView.cpp,v 1.173 2006/07/24 14:13:41 vadz Exp $ +// CVS-ID: $Id: MessageView.cpp,v 1.175 2006/08/23 15:41:53 vadz Exp $ // Copyright: (c) 2001 Mahogany Team // Licence: Mahogany license /////////////////////////////////////////////////////////////////////////////// @@ -505,35 +505,16 @@ wxFont MessageView::AllProfileValues::GetFont(wxFontEncoding encoding) const { - wxFont font; + wxFont font(CreateFontFromDesc(fontDesc, fontSize, fontFamily)); - if ( !fontDesc.empty() ) + // assume that wxFONTENCODING_DEFAULT (US-ASCII) text can be shown in any + // encoding + if ( encoding != wxFONTENCODING_DEFAULT ) { - wxNativeFontInfo fontInfo; - if ( fontInfo.FromString(fontDesc) ) - { - font.SetNativeFontInfo(fontInfo); + if ( !font.Ok() ) + font = *wxNORMAL_FONT; - // assume that iso8859-1 text can be shown in any encoding - it's - // true for all normal fonts - if ( font.Ok() && - (encoding != wxFONTENCODING_DEFAULT) && - (encoding != wxFONTENCODING_ISO8859_1) ) - { - font.SetEncoding(encoding); - } - } - } - - if ( !font.Ok() ) - { - font = wxFont(fontSize, - fontFamily, - wxFONTSTYLE_NORMAL, - wxFONTWEIGHT_NORMAL, - FALSE, // not underlined - wxEmptyString, // no specific face name - encoding); + font.SetEncoding(encoding); } return font; diff -Naur mahogany-0.67/src/classes/MModule.cpp mahogany-0.67.20060903/src/classes/MModule.cpp --- mahogany-0.67/src/classes/MModule.cpp 2006-02-12 23:36:40.000000000 +0100 +++ mahogany-0.67.20060903/src/classes/MModule.cpp 2006-09-02 22:01:12.000000000 +0200 @@ -3,7 +3,7 @@ * * * (C) 1999 by Karsten Ballüder (karsten@phy.hw.ac.uk) * * * - * $Id: MModule.cpp,v 1.97 2006/02/12 22:36:40 vadz Exp $ + * $Id: MModule.cpp,v 1.98 2006/08/25 15:59:30 vadz Exp $ *******************************************************************/ /* @@ -158,8 +158,8 @@ wxDynamicLibrary *dll = module->GetDLL(); // call cleanup function, if any + if ( dll->HasSymbol(MMODULE_CLEANUP_FUNCTION) ) { - wxLogNull noLog; MModule_CleanUpFuncType funcCleanup = (MModule_CleanUpFuncType)dll->GetSymbol(MMODULE_CLEANUP_FUNCTION); if ( funcCleanup ) diff -Naur mahogany-0.67/src/gui/ClickURL.cpp mahogany-0.67.20060903/src/gui/ClickURL.cpp --- mahogany-0.67/src/gui/ClickURL.cpp 2006-06-27 01:24:41.000000000 +0200 +++ mahogany-0.67.20060903/src/gui/ClickURL.cpp 2006-09-02 22:03:53.000000000 +0200 @@ -6,7 +6,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 05.12.02 (extracted from MessageView.cpp and wxMessageView.cpp) -// CVS-ID: $Id: ClickURL.cpp,v 1.24 2006/06/26 23:24:41 vadz Exp $ +// CVS-ID: $Id: ClickURL.cpp,v 1.26 2006/08/31 17:59:27 nerijus Exp $ // Copyright: (c) 2001-2002 Mahogany Team // Licence: Mahogany license /////////////////////////////////////////////////////////////////////////////// @@ -48,6 +48,7 @@ #include "Collect.h" #include +#include #ifdef OS_UNIX #include @@ -260,9 +261,13 @@ } else { +#ifdef DEBUG_nerijus wxTheClipboard->UsePrimarySelection(); - wxTheClipboard->SetData(new - wxTextDataObject(m_clickableURL->GetUrl())); + wxTheClipboard->SetData(new wxTextDataObject(m_clickableURL->GetUrl())); +#endif + wxURLDataObject *dobj = new wxURLDataObject; + dobj->SetURL(m_clickableURL->GetUrl()); + wxTheClipboard->SetData(dobj); } } break; @@ -500,8 +505,7 @@ // either not netscape or ns isn't running or we have non-UNIX if(! bOk) { - command = browser; - command << _T(' ') << m_url; + String command = wxFileType::ExpandCommand(browser, m_url); wxString errmsg; errmsg.Printf(_("Couldn't launch browser: '%s' failed"), diff -Naur mahogany-0.67/src/gui/wxBrowseButton.cpp mahogany-0.67.20060903/src/gui/wxBrowseButton.cpp --- mahogany-0.67/src/gui/wxBrowseButton.cpp 2006-04-09 22:36:54.000000000 +0200 +++ mahogany-0.67.20060903/src/gui/wxBrowseButton.cpp 2006-09-02 22:04:10.000000000 +0200 @@ -6,7 +6,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 24.12.98 -// CVS-ID: $Id: wxBrowseButton.cpp,v 1.43 2006/04/09 20:36:54 vadz Exp $ +// CVS-ID: $Id: wxBrowseButton.cpp,v 1.44 2006/08/31 23:18:28 vadz Exp $ // Copyright: (c) 1998 Vadim Zeitlin /////////////////////////////////////////////////////////////////////////////// @@ -384,35 +384,6 @@ { } -// FIXME: these methods rely on internals of wxNativeFontInfo because they -// know that it prepends the format version number (currently 0) to -// the real font desc string - they shouldn't but we should add methods -// to wxNativeFontInfo to do this conversion instead! - -String wxFontBrowseButton::FontDescToUser(const String& desc) -{ - String user = desc; - if ( user.length() > 2 && user[0u] == '0' && user[1u] == ';' ) - { - user.erase(0, 2); - } - - return user; -} - -String wxFontBrowseButton::FontDescFromUser(const String& user) -{ - String desc; - if ( !user.empty() ) - { - desc = _T("0;"); - } - - desc += user; - - return desc; -} - void wxFontBrowseButton::DoBrowse() { wxFont font; @@ -420,7 +391,7 @@ wxString desc = GetText(); if ( !desc.empty() ) { - if ( fontInfo.FromString(FontDescFromUser(desc)) ) + if ( fontInfo.FromString(desc) ) { font.SetNativeFontInfo(fontInfo); } @@ -434,7 +405,7 @@ { font = dialog.GetFontData().GetChosenFont(); - SetText(FontDescToUser(font.GetNativeFontInfoDesc())); + SetText(font.GetNativeFontInfoDesc()); } } diff -Naur mahogany-0.67/src/gui/wxComposeView.cpp mahogany-0.67.20060903/src/gui/wxComposeView.cpp --- mahogany-0.67/src/gui/wxComposeView.cpp 2006-06-28 17:55:15.000000000 +0200 +++ mahogany-0.67.20060903/src/gui/wxComposeView.cpp 2006-09-02 22:06:03.000000000 +0200 @@ -5,7 +5,7 @@ // Author: Karsten Ballüder, Vadim Zeitlin // Modified by: // Created: 1998 -// CVS-ID: $Id: wxComposeView.cpp,v 1.413 2006/06/28 15:55:15 vadz Exp $ +// CVS-ID: $Id: wxComposeView.cpp,v 1.418 2006/08/25 13:25:48 vadz Exp $ // Copyright: (c) 1998-2001 Mahogany team // Licence: M license /////////////////////////////////////////////////////////////////////////////// @@ -924,25 +924,7 @@ wxFont ComposerOptions::GetFont() const { - wxFont font; - if ( !m_font.empty() ) - { - wxNativeFontInfo fontInfo; - if ( fontInfo.FromString(m_font) ) - { - font.SetNativeFontInfo(fontInfo); - } - } - - if ( !font.Ok() ) - { - font = wxFont(m_fontSize, - m_fontFamily, - wxFONTSTYLE_NORMAL, - wxFONTWEIGHT_NORMAL); - } - - return font; + return CreateFontFromDesc(m_font, m_fontSize, m_fontFamily); } // ---------------------------------------------------------------------------- @@ -2288,7 +2270,9 @@ { text->SetForegroundColour(m_options.m_fg); text->SetBackgroundColour(m_options.m_bg); - text->SetFont(m_options.GetFont()); + wxFont font(m_options.GetFont()); + if ( font.Ok() ) + text->SetFont(font); wxSizer *sizer = text->GetContainingSizer(); if ( sizer ) @@ -3764,8 +3748,8 @@ // we have a handy function in wxFileType which will replace // '%s' with the file name or add the file name at the end if // there is no '%s' - wxFileType::MessageParameters params(tmpFileName.GetName(), wxEmptyString); - String command = wxFileType::ExpandCommand(extEdit, params); + String + command = wxFileType::ExpandCommand(extEdit, tmpFileName.GetName()); // do start the external process m_procExtEdit = new wxProcess(this, HelperProcess_Editor); @@ -4074,12 +4058,10 @@ } else // non empty file { - wxChar *p = text.GetWriteBuf(lenFile + 1); - p[lenFile] = '\0'; - - ok = file.Read(p, lenFile) != wxInvalidOffset; + wxStringBuffer buf(text, lenFile + 1); + buf[lenFile] = '\0'; - text.UngetWriteBuf(); + ok = file.Read(buf, lenFile) != wxInvalidOffset; } } @@ -4095,11 +4077,37 @@ return true; } -/// inserts a text void wxComposeView::InsertText(const String &text) { - m_editor->InsertText(text, MessageEditor::Insert_Append); + // the text here may come from a file and so can be in an encoding different + // from the one we currently use, but we -- unfortunately -- have no way of + // knowing about it, except in the special case when we use UTF-8 and then + // we must check if text is a valid UTF-8 string as otherwise inserting it + // is going to fail + String textCopy; + if ( wxLocale::GetSystemEncoding() == wxFONTENCODING_UTF8 ) + { + if ( wxConvUTF8.MB2WC(NULL, text, 0) == (size_t)-1 ) + { + // not a valid UTF-8 string, must suppose it's in some other encoding + // and as we have no idea about what it is, choose latin1 as the most + // common (among Mahogany users, anyhow) + if ( m_encoding == wxFONTENCODING_SYSTEM ) + { + // change the encoding to latin1 if none explicitly specified + SetEncoding(wxFONTENCODING_ISO8859_1); + } + else // we already have an existing encoding + { + // transform the text from latin1 to the current encoding + textCopy = wxCSConv(m_encoding).cWC2MB(wxConvISO8859_1.cMB2WC(text)); + } + } + } + + m_editor->InsertText(textCopy.empty() ? text : textCopy, + MessageEditor::Insert_Append); } void diff -Naur mahogany-0.67/src/gui/wxFolderTree.cpp mahogany-0.67.20060903/src/gui/wxFolderTree.cpp --- mahogany-0.67/src/gui/wxFolderTree.cpp 2006-06-28 14:46:34.000000000 +0200 +++ mahogany-0.67.20060903/src/gui/wxFolderTree.cpp 2006-09-02 22:09:53.000000000 +0200 @@ -5,7 +5,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 03.10.98 -// CVS-ID: $Id: wxFolderTree.cpp,v 1.243 2006/06/28 12:46:34 vadz Exp $ +// CVS-ID: $Id: wxFolderTree.cpp,v 1.244 2006/08/19 14:22:53 vadz Exp $ // Copyright: (c) 1998 Vadim Zeitlin // Licence: M license /////////////////////////////////////////////////////////////////////////////// @@ -1754,7 +1754,7 @@ wxWindow *parent, wxWindowID id, const wxPoint& pos, const wxSize& size) : wxPTreeCtrl(_T("FolderTree"), parent, id, pos, size, - wxTR_HAS_BUTTONS | wxTR_EDIT_LABELS) + wxTR_DEFAULT_STYLE | wxTR_EDIT_LABELS) { // init member vars m_current = NULL; diff -Naur mahogany-0.67/src/gui/wxFolderView.cpp mahogany-0.67.20060903/src/gui/wxFolderView.cpp --- mahogany-0.67/src/gui/wxFolderView.cpp 2006-06-30 13:08:18.000000000 +0200 +++ mahogany-0.67.20060903/src/gui/wxFolderView.cpp 2006-09-02 22:08:08.000000000 +0200 @@ -5,7 +5,7 @@ // Author: Karsten Ballüder (Ballueder@gmx.net) // Modified by: VZ at 13.07.01: use virtual list control, update on demand // Created: 1997 -// CVS-ID: $Id: wxFolderView.cpp,v 1.679 2006/06/30 11:08:18 nerijus Exp $ +// CVS-ID: $Id: wxFolderView.cpp,v 1.683 2006/08/19 13:12:00 vadz Exp $ // Copyright: (c) 1997-2001 Mahogany team // Licence: M license /////////////////////////////////////////////////////////////////////////////// @@ -1608,24 +1608,12 @@ SetTextColour( fg ); SetBackgroundColour( bg ); - wxFont font; - if ( !fontDesc.empty() ) + wxFont font(CreateFontFromDesc(fontDesc, fontSize, fontFamily)); + if ( font.Ok() ) { - wxNativeFontInfo fontInfo; - if ( fontInfo.FromString(fontDesc) ) - { - font.SetNativeFontInfo(fontInfo); - } - } - - if ( !font.Ok() ) - { - font = wxFont(fontSize, fontFamily, - wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL); + SetFont(font); } - SetFont(font); - if ( memcmp(m_columns, columns, sizeof(m_columns)) != 0 ) { // the control must be recreated if the order of columns changed @@ -4626,26 +4614,20 @@ } break; - case WXK_UP: - case WXK_DOWN: - case WXK_HOME: - case WXK_END: - case WXK_RETURN: -#if !defined DEBUG_nerijus - case WXK_SPACE: -#endif - // let the control process these keys as they're used for navigation - event.Skip(); - return false; - default: // pressing any alphanumeric character in the list control starts // incremental search in it which is worse than useless in our case // because it's never going to find anything (the first column is - // always flags in this case and won't match...) and we just lost the + // always flags in this case and won't match...) and we just lose the // current selection, so prevent this from happening by *not* calling - // event.Skip() here - ; + // event.Skip() in this case + if ( key >= 0x7f || !isalnum(key) ) + { + // let the control process other keys (some are used for navigation + // in it) + event.Skip(); + return false; + } } if ( cmd ) diff -Naur mahogany-0.67/src/gui/wxIconManager.cpp mahogany-0.67.20060903/src/gui/wxIconManager.cpp --- mahogany-0.67/src/gui/wxIconManager.cpp 2006-01-16 21:32:27.000000000 +0100 +++ mahogany-0.67.20060903/src/gui/wxIconManager.cpp 2006-09-02 22:11:34.000000000 +0200 @@ -3,7 +3,7 @@ * * * (C) 1997-1999 by Karsten Ballüder (ballueder@gmx.net) * * * - * $Id: wxIconManager.cpp,v 1.110 2006/01/16 20:32:27 nerijus Exp $ + * $Id: wxIconManager.cpp,v 1.112 2006/08/25 16:23:13 vadz Exp $ *******************************************************************/ // ============================================================================ @@ -556,13 +556,15 @@ return icon; // next step: try to load the icon files .png,.xpm,.gif: - bool found = false; if(m_GlobalDir.Length()) { PathFinder pf(READ_APPCONFIG(MP_ICONPATH)); #ifdef M_TOP_SOURCEDIR + // look in the source directory to make it possible to use the program + // without installing it pf.AddPaths(String(M_TOP_SOURCEDIR) + _T("/src/icons")); + pf.AddPaths(String(M_TOP_SOURCEDIR) + _T("/res")); #endif // M_TOP_SOURCEDIR pf.AddPaths(m_GlobalDir, false); @@ -580,11 +582,16 @@ String name; for ( int ext = 0; wxIconManagerFileExtensions[ext]; ext++ ) { - // Use iconNameOrig to preserve captialisation: - name = iconNameOrig + wxIconManagerFileExtensions[ext]; - name = pf.FindFile(name, &found); + // use iconNameOrig here to preserve the original case + name = pf.FindFile(iconNameOrig + wxIconManagerFileExtensions[ext]); - if( found ) + // but if it's not found, also fall back to the usual lower case + if ( name.empty() ) + { + name = pf.FindFile(iconName + wxIconManagerFileExtensions[ext]); + } + + if ( !name.empty() ) { ms_IconPath = name.BeforeLast('/'); diff -Naur mahogany-0.67/src/gui/wxMApp.cpp mahogany-0.67.20060903/src/gui/wxMApp.cpp --- mahogany-0.67/src/gui/wxMApp.cpp 2006-04-19 02:55:04.000000000 +0200 +++ mahogany-0.67.20060903/src/gui/wxMApp.cpp 2006-09-02 22:42:46.000000000 +0200 @@ -6,7 +6,7 @@ // Author: Karsten Ballüder, Vadim Zeitlin // Modified by: // Created: 1997 -// CVS-ID: $Id: wxMApp.cpp,v 1.305 2006/04/19 00:55:04 vadz Exp $ +// CVS-ID: $Id: wxMApp.cpp,v 1.309 2006/09/02 12:41:30 vadz Exp $ // Copyright: (c) 1997-2002 M-Team // Licence: M license /////////////////////////////////////////////////////////////////////////////// @@ -913,8 +913,9 @@ bool wxMApp::OnInit() { - // we want our OnAbnormalTermination() be called if we crash -#if wxUSE_ON_FATAL_EXCEPTION + // we want our OnAbnormalTermination() be called if we crash but don't use + // it in debug builds as it interferes with the debugger +#if wxUSE_ON_FATAL_EXCEPTION && !defined(__WXDEBUG__) wxHandleFatalExceptions(); #endif @@ -1101,6 +1102,26 @@ } #endif // USE_I18N + // wxLocale::GetSystemEncoding() is broken in wx <= 2.6.3, it returns + // ISO-8859-1 for UTF-8 locale +#if defined(__WXGTK20__) && wxCHECK_VERSION(2, 6, 4) + // we need UTF-8 support to be able to work with messages in different + // encodings + if ( wxLocale::GetSystemEncoding() != wxFONTENCODING_UTF8 ) + { + // TODO: set encoding to UTF-8 (but keeping the current language) + // ourselves + wxLogWarning(_("Your current locale doesn't use UTF-8 encoding!\n" + "\n" + "This means that Mahogany will not be able to work " + "with texts in encodings other than the default one\n" + "which may result in messages not being displayed or " + "even sent correctly.\n" + "\n" + "Please change the system locale to UTF-8.")); + } +#endif // GTK+ 2.0 + wxInitAllImageHandlers(); wxFileSystem::AddHandler(new wxMemoryFSHandler); // wxFileSystem::AddHandler(new wxZipFSHandler); // for zipped docs @@ -2503,73 +2524,6 @@ return true; } -// ---------------------------------------------------------------------------- -// global functions implemented here -// ---------------------------------------------------------------------------- - -extern bool EnsureAvailableTextEncoding(wxFontEncoding *enc, - wxString *text, - bool mayAskUser) -{ - CHECK( enc, false, _T("CheckEncodingAvailability: NULL encoding") ); - - if ( !wxFontMapper::Get()->IsEncodingAvailable(*enc) ) - { - // try to find another encoding - wxFontEncoding encAlt; - if ( wxFontMapper::Get()-> - GetAltForEncoding(*enc, &encAlt, wxEmptyString, mayAskUser) ) - { - // translate the text (if any) to the equivalent encoding - if ( text && !text->empty() ) - { -#if wxUSE_WCHAR_T - // try converting via Unicode - wxCSConv a2w(*enc); - wxWCharBuffer wbuf(a2w.cMB2WC(text->c_str())); - if ( *wbuf ) - { - // special case of UTF-8 which is used all the time under wxGTK - if ( encAlt == wxFONTENCODING_UTF8 ) - { - *text = wxConvUTF8.cWC2MB(wbuf); - } - else // all the other encodings, use generic converter - { - wxCSConv w2a(encAlt); - *text = w2a.cWC2MB(wbuf); - } - - if ( !text->empty() ) - return true; - //else: fall back to wxEncodingConverter - } - //else: conversion to Unicode failed -#endif // wxUSE_WCHAR_T - - wxEncodingConverter conv; - if ( !conv.Init(*enc, encAlt) ) - { - // failed to convert the text - return false; - } - - *text = conv.Convert(*text); - } - //else: just return the encoding - - *enc = encAlt; - } - else // no equivalent encoding - { - return false; - } - } - - // we have either the requested encoding or an equivalent one - return true; -} - // ============================================================================ // IPC and multiple program instances handling // ============================================================================ diff -Naur mahogany-0.67/src/gui/wxMDialogs.cpp mahogany-0.67.20060903/src/gui/wxMDialogs.cpp --- mahogany-0.67/src/gui/wxMDialogs.cpp 2006-08-06 22:02:01.000000000 +0200 +++ mahogany-0.67.20060903/src/gui/wxMDialogs.cpp 2006-09-02 22:17:03.000000000 +0200 @@ -3,7 +3,7 @@ * * * (C) 1998-2000 by Karsten Ballüder (karsten@phy.hw.ac.uk) * * * - * $Id: wxMDialogs.cpp,v 1.433 2006/08/06 20:02:01 vadz Exp $ + * $Id: wxMDialogs.cpp,v 1.435 2006/08/25 16:22:46 vadz Exp $ *******************************************************************/ #ifdef __GNUG__ @@ -2163,8 +2163,10 @@ MH_DIALOG_LICENSE); wxHtmlWindow *license = new wxHtmlWindow(this); - wxBitmap bmp(mApplication->GetIconManager()-> GetBitmap(_T("Msplash"))); - const int w = bmp.Ok() ? bmp.GetWidth() : 400; + wxBitmap bmp(mApplication->GetIconManager()->GetBitmap(_T("Msplash"))); + int w = bmp.Ok() ? bmp.GetWidth() : 0; + if ( w < 400 ) + w = 400; wxMemoryFSHandler::AddFile(_T("splash.png"), bmp, wxBITMAP_TYPE_PNG); @@ -2740,7 +2742,7 @@ m_frame->CentreOnParent(); m_frame->Show(); - wxYield(); + m_frame->Update(); } void MProgressInfo::SetLabel(const wxString& label) diff -Naur mahogany-0.67/src/gui/wxMGuiUtils.cpp mahogany-0.67.20060903/src/gui/wxMGuiUtils.cpp --- mahogany-0.67/src/gui/wxMGuiUtils.cpp 1970-01-01 01:00:00.000000000 +0100 +++ mahogany-0.67.20060903/src/gui/wxMGuiUtils.cpp 2006-09-04 21:40:36.000000000 +0200 @@ -0,0 +1,129 @@ +/////////////////////////////////////////////////////////////////////////////// +// Project: M - cross platform e-mail GUI client +// File name: gui/wxMGuiUtils.cpp +// Purpose: miscellaneous GUI helpers +// Author: Vadim Zeitlin +// Created: 2006-08-19 +// CVS-ID: $Id: wxMGuiUtils.cpp,v 1.1 2006/08/19 13:12:00 vadz Exp $ +// Copyright: (c) 2006 Vadim Zeitlin +// Licence: M license +/////////////////////////////////////////////////////////////////////////////// + +// ============================================================================ +// declarations +// ============================================================================ + +// ---------------------------------------------------------------------------- +// headers +// ---------------------------------------------------------------------------- + +#include "Mpch.h" + +#ifndef USE_PCH +# include "Mcommon.h" +# include "guidef.h" + +# include +#endif // USE_PCH + +#include + +// ============================================================================ +// implementation +// ============================================================================ + +bool +EnsureAvailableTextEncoding(wxFontEncoding *enc, wxString *text, bool mayAskUser) +{ + CHECK( enc, false, _T("CheckEncodingAvailability: NULL encoding") ); + + if ( !wxFontMapper::Get()->IsEncodingAvailable(*enc) ) + { + // try to find another encoding + wxFontEncoding encAlt; + if ( wxFontMapper::Get()-> + GetAltForEncoding(*enc, &encAlt, wxEmptyString, mayAskUser) ) + { + // translate the text (if any) to the equivalent encoding + if ( text && !text->empty() ) + { +#if wxUSE_WCHAR_T + // try converting via Unicode + wxCSConv a2w(*enc); + wxWCharBuffer wbuf(a2w.cMB2WC(text->c_str())); + if ( *wbuf ) + { + // special case of UTF-8 which is used all the time under wxGTK + if ( encAlt == wxFONTENCODING_UTF8 ) + { + *text = wxConvUTF8.cWC2MB(wbuf); + } + else // all the other encodings, use generic converter + { + wxCSConv w2a(encAlt); + *text = w2a.cWC2MB(wbuf); + } + + if ( !text->empty() ) + return true; + //else: fall back to wxEncodingConverter + } + //else: conversion to Unicode failed +#endif // wxUSE_WCHAR_T + + wxEncodingConverter conv; + if ( !conv.Init(*enc, encAlt) ) + { + // failed to convert the text + return false; + } + + *text = conv.Convert(*text); + } + //else: just return the encoding + + *enc = encAlt; + } + else // no equivalent encoding + { + return false; + } + } + + // we have either the requested encoding or an equivalent one + return true; +} + +wxFont +CreateFontFromDesc(const String& fontDesc, int fontSize, int fontFamily) +{ + wxFont font; + + // use the native font description if we have it + if ( !fontDesc.empty() ) + { + wxNativeFontInfo fontInfo; + if ( fontInfo.FromString(fontDesc) ) + { + font.SetNativeFontInfo(fontInfo); + } + } + + // if we don't, or if creating font from it failed, create the font with the + // given size and family if we have [either of] them + if ( !font.Ok() && (fontSize != -1 || fontFamily != -1) ) + { + font = wxFont + ( + fontSize == -1 ? wxNORMAL_FONT->GetPointSize() + : fontSize, + fontFamily == wxFONTFAMILY_DEFAULT ? wxNORMAL_FONT->GetFamily() + : fontFamily, + wxFONTSTYLE_NORMAL, + wxFONTWEIGHT_NORMAL + ); + } + + return font; +} + diff -Naur mahogany-0.67/src/gui/wxMSplash.cpp mahogany-0.67.20060903/src/gui/wxMSplash.cpp --- mahogany-0.67/src/gui/wxMSplash.cpp 2006-06-04 21:24:54.000000000 +0200 +++ mahogany-0.67.20060903/src/gui/wxMSplash.cpp 2006-09-02 22:18:27.000000000 +0200 @@ -4,7 +4,7 @@ // Purpose: splash screen/about dialog implementation // Author: Vadim Zeitlin // Created: 2006-06-04 (extracted from wxMDialogs.cpp) -// CVS-ID: $Id: wxMSplash.cpp,v 1.2 2006/06/04 19:24:54 nerijus Exp $ +// CVS-ID: $Id: wxMSplash.cpp,v 1.6 2006/08/31 23:09:06 nerijus Exp $ // Copyright: (c) 1998-2006 Vadim Zeitlin // Licence: M license /////////////////////////////////////////////////////////////////////////////// @@ -174,7 +174,8 @@ wxStaticBitmap *top = new wxStaticBitmap(this, wxID_ANY, bmp, wxPoint(0, 0), sizeBmp); wxHtmlWindow *bottom = new wxHtmlWindow(this, wxID_ANY, - wxPoint(0, sizeBmp.y + 1), sizeBmp); + wxPoint(0, sizeBmp.y + 1), sizeBmp, + wxHW_DEFAULT_STYLE | wxHW_NO_SELECTION); ConnectMouseAndKeyEvents(top); ConnectMouseAndKeyEvents(bottom); @@ -219,6 +220,7 @@ wxString pageHtmlText; pageHtmlText << _T("" + "" "" "

") << _("Mahogany information") << _T("

") @@ -261,8 +263,8 @@ << "

" _T("

") << _("List of contributors:") << _T("

") "

" - "Karsten Ballüder, Vadim Zeitlin, Greg Noel,
" - "Nerijus Baliūnas, Xavier Nodet, Vaclav Slavik,
" + "Karsten Ball" "\xC3\xBC" "der, Vadim Zeitlin, Greg Noel,
" + "Nerijus Bali" "\xC5\xAB" "nas, Xavier Nodet, Vaclav Slavik,
" "Daniel Seifert, Michele Ravani, Michael A Chase,
" "Robert Vazan " << _("and many others") << "
" "
" diff -Naur mahogany-0.67/src/gui/wxOptionsDlg.cpp mahogany-0.67.20060903/src/gui/wxOptionsDlg.cpp --- mahogany-0.67/src/gui/wxOptionsDlg.cpp 2006-07-31 02:38:47.000000000 +0200 +++ mahogany-0.67.20060903/src/gui/wxOptionsDlg.cpp 2006-09-02 22:19:50.000000000 +0200 @@ -5,7 +5,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 20.08.98 -// CVS-ID: $Id: wxOptionsDlg.cpp,v 1.430 2006/07/31 00:38:47 vadz Exp $ +// CVS-ID: $Id: wxOptionsDlg.cpp,v 1.431 2006/08/31 23:18:28 vadz Exp $ // Copyright: (c) 1998 Vadim Zeitlin // Licence: M license /////////////////////////////////////////////////////////////////////////////// @@ -2818,9 +2818,6 @@ strValue = strutil_decrypt(strValue); case Field_Font: - strValue = wxFontBrowseButton::FontDescToUser(strValue); - // fall through - case Field_Dir: case Field_File: case Field_Folder: @@ -2987,8 +2984,6 @@ // post processing is needed for some fields if ( fieldType == Field_Passwd ) strValue = strutil_encrypt(strValue); - else if ( fieldType == Field_Font ) - strValue = wxFontBrowseButton::FontDescFromUser(strValue); else if ( fieldType == Field_Number ) { wxASSERT( m_aDefaults[n].IsNumeric() ); diff -Naur mahogany-0.67/src/gui/wxTemplateDialog.cpp mahogany-0.67.20060903/src/gui/wxTemplateDialog.cpp --- mahogany-0.67/src/gui/wxTemplateDialog.cpp 2006-01-16 21:32:28.000000000 +0100 +++ mahogany-0.67.20060903/src/gui/wxTemplateDialog.cpp 2006-09-02 22:22:22.000000000 +0200 @@ -6,7 +6,7 @@ // Author: Vadim Zeitlin // Modified by: VZ at 09.05.00 to allow editing all templates // Created: 16.07.99 -// CVS-ID: $Id: wxTemplateDialog.cpp,v 1.42 2006/01/16 20:32:28 nerijus Exp $ +// CVS-ID: $Id: wxTemplateDialog.cpp,v 1.43 2006/08/19 14:49:52 vadz Exp $ // Copyright: (c) 1999 Vadim Zeitlin // Licence: M license /////////////////////////////////////////////////////////////////////////////// @@ -527,10 +527,14 @@ listbox->Append(wxGetTranslation(gs_templateNames[n])); } + int wLbox = listbox->GetBestSize().x; + if ( wLbox > 3*wBtn ) + wLbox = 3*wBtn; + c = new wxLayoutConstraints; c->top.Below(msg, LAYOUT_Y_MARGIN); c->left.SameAs(box, wxLeft, 2*LAYOUT_X_MARGIN); - c->width.AsIs(); + c->width.Absolute(wLbox); c->height.Absolute(5*hBtn); listbox->SetConstraints(c); @@ -612,7 +616,7 @@ { m_kind = kind; - SetDefaultSize(6*wBtn, 10*hBtn); + SetDefaultSize(10*wBtn, 10*hBtn); } bool wxTemplatesDialogBase::TransferDataToWindow() @@ -755,11 +759,15 @@ // now lay them out // ---------------- + int wLbox = m_listbox->GetBestSize().x; + if ( wLbox > 3*wBtn ) + wLbox = 3*wBtn; + wxLayoutConstraints *c; c = new wxLayoutConstraints; c->left.SameAs(box, wxLeft, 2*LAYOUT_X_MARGIN); c->top.SameAs(box, wxTop, 4*LAYOUT_Y_MARGIN); - c->width.AsIs(); + c->width.Absolute(wLbox); c->bottom.SameAs(box, wxBottom, 2*LAYOUT_Y_MARGIN); m_listbox->SetConstraints(c); @@ -887,10 +895,14 @@ // constraints FillListBox(); + int wLbox = m_listbox->GetBestSize().x; + if ( wLbox > 3*wBtn ) + wLbox = 3*wBtn; + c = new wxLayoutConstraints; c->top.Below(combo, 2*LAYOUT_Y_MARGIN); c->left.SameAs(msg, wxLeft, 2*LAYOUT_X_MARGIN); - c->width.AsIs(); + c->width.Absolute(wLbox); c->bottom.SameAs(box, wxBottom, 2*LAYOUT_Y_MARGIN); m_listbox->SetConstraints(c); diff -Naur mahogany-0.67/src/gui/wxTextDialog.cpp mahogany-0.67.20060903/src/gui/wxTextDialog.cpp --- mahogany-0.67/src/gui/wxTextDialog.cpp 2006-01-16 21:32:28.000000000 +0100 +++ mahogany-0.67.20060903/src/gui/wxTextDialog.cpp 2006-09-02 22:23:44.000000000 +0200 @@ -5,7 +5,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 14.02.03 (extracted from src/gui/wxMDialogs.cpp) -// CVS-ID: $Id: wxTextDialog.cpp,v 1.10 2006/01/16 20:32:28 nerijus Exp $ +// CVS-ID: $Id: wxTextDialog.cpp,v 1.14 2006/08/24 17:58:37 vadz Exp $ // Copyright: (c) 2001-2003 Vadim Zeitlin // Licence: M licence /////////////////////////////////////////////////////////////////////////////// @@ -143,38 +143,29 @@ m_configPath = configPath; - // we may have or not the location in config where the dialogs position/size - // are stored - int x, y, w, h; - if ( m_configPath ) - { - wxMFrame::RestorePosition(configPath, &x, &y, &w, &h); - } - else - { - x = - y = -1; - w = 500; - h = 300; - } - - SetSize(x, y, w, h); - // create controls // --------------- m_text = new wxTextCtrl(this, -1, wxEmptyString, - wxPoint(0, 0), - wxSize(w, h), + wxDefaultPosition, + wxDefaultSize, wxTE_MULTILINE | wxTE_READONLY | wxTE_NOHIDESEL | wxTE_RICH2); - m_text->SetValue(text); - // use fixed-width font - m_text->SetFont(wxFont(12, wxFONTFAMILY_TELETYPE, - wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL)); + // use fixed-width font and latin1 encoding in which all text is valid: + // without encoding information (which wouldn't make sense anyhow as we can + // have multiple parts using different encodings) we must do this to at + // least show something to the user while using the default UTF-8 encoding + // of GTK+ 2 could result in nothing being shown at all + m_text->SetFont(wxFont(wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_TELETYPE, + wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL, + false /* not underlined */, wxEmptyString, + wxFONTENCODING_ISO8859_1)); + + // now that the encoding is set, we can show the text + m_text->SetValue(text); // in TAB order we want "Save" to get focus before "Close", so create // them in order @@ -196,20 +187,34 @@ sizerTop->Add(m_text, 1, wxEXPAND); sizerTop->Add(sizerBtns, 0, wxCENTRE | wxTOP | wxBOTTOM, LAYOUT_Y_MARGIN); - // set the sizer &c - // ---------------- - SetSizer(sizerTop); - SetAutoLayout(TRUE); - // FIXME: bug in wxMSW? without Layout() the buttons are not positioned - // correctly initially -#ifdef __WXMSW__ - Layout(); -#endif + // final initialization + // -------------------- m_text->SetFocus(); + // under wxGTK SetFocus() scrolls the control to the bottom for some reason + // while we always want to show the top of the message + m_text->SetInsertionPoint(0); + + // we may have or not the location in config where the dialogs position/size + // are stored + int x, y, w, h; + if ( m_configPath ) + { + wxMFrame::RestorePosition(configPath, &x, &y, &w, &h); + } + else + { + x = + y = -1; + w = 500; + h = 300; + } + + SetSize(x, y, w, h); + Show(TRUE); } diff -Naur mahogany-0.67/src/icons/adb_palmos.xpm mahogany-0.67.20060903/src/icons/adb_palmos.xpm --- mahogany-0.67/src/icons/adb_palmos.xpm 2003-11-08 14:04:26.000000000 +0100 +++ mahogany-0.67.20060903/src/icons/adb_palmos.xpm 2006-09-02 22:24:44.000000000 +0200 @@ -178,25 +178,20 @@ "/. c #a4a8a8", "(. c #a8b6ad", /* pixels */ -" ", -" ", -"g e.S._ J Y I ^ A.X.% ", -"j D H A r M 2 e -.=.@ ", -"5 $.V L i.6.j.g.D.*., ", -"z H.R.T.G.b.V.!.Q.p.4 ", -"b n.1.z.M.9.f.Z.B.l.7 ", -"t F.x.G U ] { r.g.y.9 ", -"< L.t.5.4.2.>.v.C.%.q ", -"a P.( :.} ) m.a.d.3.w ", -"p u.[ S B P / F ,.+.8 ", -"k ! ~ s.<.o.;. .8.O.3 ", -"d N...W./.^.~.(.' Q > ", -"y #.R U.I.E.K.Y.` T = ", -"1 | &.@.c.k.q.7.h.W # ", -"h v $ o X + . * n O ", -"i u 0.K Z N l w.E J.: ", -"c & - 0 x s f 6 ; m C ", -" ", -" ", -" ", +"g g e.e.S.S._ J Y I ^ A.X.X.% % ", +"j j D D H H A r M 2 e -.=.=.@ @ ", +"5 5 $.$.V V L i.6.j.g.D.*.*., , ", +"z z H.H.R.R.T.G.b.V.!.Q.p.p.4 4 ", +"b b n.n.1.1.z.M.9.f.Z.B.l.l.7 7 ", +"t t F.F.x.x.G U ] { r.g.y.y.9 9 ", +"< < L.L.t.t.5.4.2.>.v.C.%.%.q q ", +"a a P.P.( ( :.} ) m.a.d.3.3.w w ", +"p p u.u.[ [ S B P / F ,.+.+.8 8 ", +"k k ! ! ~ ~ s.<.o.;. .8.O.O.3 3 ", +"d d N.N.....W./.^.~.(.' Q Q > > ", +"y y #.#.R R U.I.E.K.Y.` T T = = ", +"1 1 | | &.&.@.c.k.q.7.h.W W # # ", +"h h v v $ $ o X + . * n n O O ", +"i i u u 0.0.K Z N l w.E J.J.: : ", +"c c & & - - 0 x s f 6 ; m m C C ", }; diff -Naur mahogany-0.67/src/mail/SendMessageCC.cpp mahogany-0.67.20060903/src/mail/SendMessageCC.cpp --- mahogany-0.67/src/mail/SendMessageCC.cpp 2006-06-24 01:27:31.000000000 +0200 +++ mahogany-0.67.20060903/src/mail/SendMessageCC.cpp 2006-09-02 22:25:53.000000000 +0200 @@ -5,7 +5,7 @@ // Author: Karsten Ballüder // Modified by: // Created: 1998 -// CVS-ID: $Id: SendMessageCC.cpp,v 1.233 2006/06/23 23:27:31 vadz Exp $ +// CVS-ID: $Id: SendMessageCC.cpp,v 1.234 2006/08/31 23:45:33 vadz Exp $ // Copyright: (C) 1999-2001 by M-Team // Licence: M license /////////////////////////////////////////////////////////////////////////////// @@ -43,6 +43,10 @@ #include "Message.h" #include "MFolder.h" +#ifdef OS_UNIX +# include "sysutil.h" +#endif // OS_UNIX + // has to be included before SendMessage.h, as it includes windows.h which // defines SendMessage under Windows #include // for GetEncodingName() @@ -1920,8 +1924,8 @@ // write to temp file: wxFile out; - const String filename = wxFileName::CreateTempFileName( - _T("Mtemp"), &out); + MTempFileName tmpFN(&out); + const String& filename = tmpFN.GetName(); bool success = false; if ( !filename.empty() ) @@ -1930,18 +1934,21 @@ out.Close(); if ( written == lfOnly.Length() ) { - String command; - command.Printf(_T("%s < '%s'; exec /bin/rm -f '%s'"), - m_SendmailCmd.c_str(), - filename.c_str(), filename.c_str()); - // HORRIBLE HACK: this should be `const char *' but wxExecute's - // prototype doesn't allow it... - wxChar *argv[4]; - argv[0] = (wxChar *)"/bin/sh"; - argv[1] = (wxChar *)"-c"; - argv[2] = (wxChar *)command.c_str(); - argv[3] = 0; // NULL - success = wxExecute(argv) != 0; + int rc = system(m_SendmailCmd + " < " + filename); + if ( WEXITSTATUS(rc) != 0 ) + { + ERRORMESSAGE((_("Failed to execute local MTA \"%s\""), + m_SendmailCmd.c_str())); + } + else + { + success = true; + } + } + else + { + ERRORMESSAGE((_("Failed to write to temporary file \"%s\""), + filename.c_str())); } } else @@ -1961,8 +1968,11 @@ } else { - ERRORMESSAGE((_("Failed to send message via '%s'"), - m_SendmailCmd.c_str())); + ERRORMESSAGE((_("Failed to send message via local MTA, maybe " + "it's not configured correctly?\n" + "\n" + "Please try using an SMTP server if you are not " + " sure."))); } return success; diff -Naur mahogany-0.67/src/modules/HtmlViewer.cpp mahogany-0.67.20060903/src/modules/HtmlViewer.cpp --- mahogany-0.67/src/modules/HtmlViewer.cpp 2006-06-27 02:35:07.000000000 +0200 +++ mahogany-0.67.20060903/src/modules/HtmlViewer.cpp 2006-09-02 22:27:16.000000000 +0200 @@ -6,7 +6,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 26.07.01 -// CVS-ID: $Id: HtmlViewer.cpp,v 1.77 2006/06/27 00:35:07 vadz Exp $ +// CVS-ID: $Id: HtmlViewer.cpp,v 1.78 2006/08/19 13:12:00 vadz Exp $ // Copyright: (c) 2001 Vadim Zeitlin // Licence: M license /////////////////////////////////////////////////////////////////////////////// @@ -140,8 +140,8 @@ // add "attr=#colour" attribute to m_htmlText if col is valid void AddColourAttr(const wxChar *attr, const wxColour& col); - // calculate font size - int CalculateFontSize(int diff); + // calculate HTML font size for the given font + int CalculateFontSize(const wxFont& font); // get the name of the virtual file for the n-th image we use wxString GetVirtualFileName(size_t n) const; @@ -844,12 +844,19 @@ } } -int HtmlViewer::CalculateFontSize(int diff) +int HtmlViewer::CalculateFontSize(const wxFont& font) { + if ( !font.Ok() ) + { + // use default size + return 0; + } + // map the point size into the HTML font size so that if the standard font // size is 12pt, 6pt is very small and 24pt is very big // // this is not very rigorous, of course... + int diff = font.GetPointSize() - wxNORMAL_FONT->GetPointSize(); if ( diff > 0 ) diff /= 4; else @@ -901,9 +908,8 @@ // close tag m_htmlText += _T(">"); - wxFont font = profileValues.GetFont(); - - int diff = CalculateFontSize(font.GetPointSize() - DEFAULT_FONT_SIZE); + wxFont font(profileValues.GetFont()); + int diff = CalculateFontSize(font); if ( diff ) { m_htmlText << _T(""); @@ -913,7 +919,7 @@ // map the font family into HTML font face name // // TODO: use - if ( font.IsFixedWidth() ) + if ( font.Ok() && font.IsFixedWidth() ) { m_htmlText << _T(""); m_htmlEnd.Prepend(_T("")); @@ -925,10 +931,7 @@ void HtmlViewer::ShowRawHeaders(const String& header) { - const ProfileValues& profileValues = GetOptions(); - wxFont font = profileValues.GetFont(); - - int diff = CalculateFontSize(font.GetPointSize() - DEFAULT_FONT_SIZE); + int diff = CalculateFontSize(GetOptions().GetFont()); m_htmlText << _T("

") << _T("")
               << MakeHtmlSafe(header) << _T("") << _T("
"); } diff -Naur mahogany-0.67/src/modules/spam/HeadersFilter.cpp mahogany-0.67.20060903/src/modules/spam/HeadersFilter.cpp --- mahogany-0.67/src/modules/spam/HeadersFilter.cpp 2006-06-25 16:36:07.000000000 +0200 +++ mahogany-0.67.20060903/src/modules/spam/HeadersFilter.cpp 2006-09-02 22:28:57.000000000 +0200 @@ -5,7 +5,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 2004-07-10 (mostly extracted from Filters.cpp) -// CVS-ID: $Id: HeadersFilter.cpp,v 1.15 2006/06/25 14:36:07 vadz Exp $ +// CVS-ID: $Id: HeadersFilter.cpp,v 1.16 2006/08/25 10:47:57 vadz Exp $ // Copyright: (c) 2004 Vadim Zeitlin // Licence: M licence /////////////////////////////////////////////////////////////////////////////// @@ -70,10 +70,10 @@ Spam_Test_HTML, Spam_Test_BadMIME, Spam_Test_ExeAttachment, - Spam_Test_WhiteList, #ifdef USE_RBL Spam_Test_RBL, #endif // USE_RBL + Spam_Test_WhiteList, Spam_Test_Max }; diff -Naur mahogany-0.67/src/modules/TextViewer.cpp mahogany-0.67.20060903/src/modules/TextViewer.cpp --- mahogany-0.67/src/modules/TextViewer.cpp 2006-01-16 21:32:28.000000000 +0100 +++ mahogany-0.67.20060903/src/modules/TextViewer.cpp 2006-09-02 22:30:10.000000000 +0200 @@ -5,7 +5,7 @@ // Author: Vadim Zeitlin // Modified by: // Created: 26.07.01 -// CVS-ID: $Id: TextViewer.cpp,v 1.67 2006/01/16 20:32:28 nerijus Exp $ +// CVS-ID: $Id: TextViewer.cpp,v 1.68 2006/08/19 13:12:00 vadz Exp $ // Copyright: (c) 2001 Vadim Zeitlin // Licence: M license /////////////////////////////////////////////////////////////////////////////// @@ -549,7 +549,9 @@ const ProfileValues& profileValues = GetOptions(); - m_window->SetFont(profileValues.GetFont()); + wxFont font(profileValues.GetFont()); + if ( font.Ok() ) + m_window->SetFont(font); m_window->SetForegroundColour(profileValues.FgCol); m_window->SetBackgroundColour(profileValues.BgCol); }