[M-git] Mahogany sources repository. branch master updated. v0.67-901-ge5264c5d

vadz via Mahogany-cvsupdates <[email protected]> Wed, 04 Jun 2025 18:35:36 +0000
Newsgroups gmane.mail.mahogany.cvs
Message-ID <[email protected]>
--===============3818554138828633431==
Content-Type: text/plain

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Mahogany sources repository.".

The branch, master has been updated
       via  e5264c5d909fb52fe265fb4642ecfcb233267e6b (commit)
       via  38f452c5f7482296b1af16242fb2a871deeb3df0 (commit)
       via  6ffae3ca046c853897242d02afab8bf2d6f98851 (commit)
       via  56cc8d56dd2de333f0fc5e38e0a0254aa49493ae (commit)
       via  1327cf57c4bd693c854d830079173c9a64ca0200 (commit)
       via  d0713693a6de6ff9d56712182258a2d2c158ba2d (commit)
       via  6c783323e7e9823bcee9909cddbffbdeec1baf78 (commit)
       via  04b63f3349595cc9b3f3fe5c5f08fc99e129287f (commit)
       via  f8a25b17f06ae0b3145946a61eeddc9c184bdd26 (commit)
       via  2137cd715ed4e7c747cb25f30c12df42fc24a984 (commit)
       via  8f0185169fe114c6dda5c74c459f0b9c03609348 (commit)
       via  eb6a9d4c79047bd3d8b9ca891914d3ece34cac2e (commit)
       via  bab7c12b3f1f411d4e26db0ee4f5346d05c02256 (commit)
       via  a4886096921d34d3a93463559717c08eda216c11 (commit)
       via  fa78ddb94c445ce090b224c8cb6e64a5bfb01ab8 (commit)
       via  121c0607024781524b50de7e001fde75e289b78c (commit)
       via  0937095bd52a5c28b1fda54045e5d479dce54243 (commit)
       via  4d806afeca9d336801540ebeca4577d7b2870d82 (commit)
       via  bc24424e8b9ef31448e6f2eceec7b9dabdf8f538 (commit)
       via  c70cd4b56792a1992243b3bbde2c2826ab71131b (commit)
       via  7bc745d7d7e03ba1d2ac828b5710be32c5da92d0 (commit)
       via  d2eb671ab10390fc61ef1ae1638e0c2e58164b5e (commit)
       via  df66576684d8e783289a7332e3eeb628876f015a (commit)
       via  63bc9837b98b901c26c1627f2fb1762897142b51 (commit)
      from  bcc0c9d101a040236ffe7d16c659956ebc0eb536 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit e5264c5d909fb52fe265fb4642ecfcb233267e6b
Author: Vadim Zeitlin <[email protected]>
Date:   Wed Jun 4 20:06:38 2025 +0200

    Redefine "or" and "not" before including c-client headers with MSVC
    
    MSVS 2022 is standards compliant now and handles these keywords by
    default, as it should.

diff --git a/include/Mcclient.h b/include/Mcclient.h
index eef08900..90fcd42c 100644
--- a/include/Mcclient.h
+++ b/include/Mcclient.h
@@ -10,6 +10,11 @@
 #ifndef   MCCLIENT_H
 #define   MCCLIENT_H
 
+// MSVS 2022 requires this.
+#ifdef CC_MSC
+   #define M_LOGICAL_OP_NAMES
+#endif
+
 extern "C"
 {
 #  define private cc__private

commit 38f452c5f7482296b1af16242fb2a871deeb3df0
Author: Vadim Zeitlin <[email protected]>
Date:   Wed Jun 4 20:16:39 2025 +0200

    Update version in configure to 0.68
    
    This should have been only done 15 years ago, see ca24a138 (Change
    version to 0.68., 2010-07-08).

diff --git a/configure.ac b/configure.ac
index 3a8378aa..cf47dc0e 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,6 +1,6 @@
 dnl Process this file with autoconf to produce a configure script.
 
-AC_INIT(Mahogany, 0.67)
+AC_INIT(Mahogany, 0.68)
 
 rm -f conftestdata
 if ln -s X conftestdata 2>/dev/null

commit 6ffae3ca046c853897242d02afab8bf2d6f98851
Author: Vadim Zeitlin <[email protected]>
Date:   Wed Jun 4 20:04:04 2025 +0200

    Stop including iostream from Mconfig.h and don't use std namespace
    
    We don't need <iostream> and <fstream> everywhere, they're only used in
    a couple of files, and we definitely don't want to be using namespace
    std in global scope: this is not only bad practice, but breaks Windows
    compilation.
    
    Also drop support for compilers with only <iostream.h> and not
    <iostream> as this is obsolete for decades.

diff --git a/include/Mconfig.h b/include/Mconfig.h
index 290f5b27..041b9c82 100644
--- a/include/Mconfig.h
+++ b/include/Mconfig.h
@@ -169,19 +169,6 @@
 #   define    Str(str) str
 #endif
 
-// you can't mix iostream.h and iostream, the former doesn't compile
-// with "using namespace std", the latter doesn't compile with older
-// compilers.
-
-#if wxUSE_IOSTREAMH
-#  include <iostream.h>
-#  include <fstream.h>
-#else
-#  include <iostream>
-#  include <fstream>
-   using namespace std;
-#endif
-
 // set the proper STL class names
 #ifdef  CC_MSC
 # define  STL_LIST  std::list
diff --git a/include/strutil.h b/include/strutil.h
index d658e779..78a80020 100644
--- a/include/strutil.h
+++ b/include/strutil.h
@@ -11,6 +11,8 @@
 #ifndef STRUTIL_H
 #define STRUTIL_H
 
+#include <iostream>
+
 #include <time.h>          // for time_t
 
 #include "FolderType.h"    // for strutil_expandfoldername
@@ -37,7 +39,7 @@ inline bool strutil_isempty(const wxChar *s) { return s == NULL || *s == _T('\0'
     @param istr reference to an input stream
     @param str reference to the string to write to
 */
-void strutil_getstrline(istream &istr, String &str);
+void strutil_getstrline(std::istream &istr, String &str);
 
 /** Read a folded string into a string variable.
 
@@ -46,7 +48,7 @@ void strutil_getstrline(istream &istr, String &str);
     @param istr reference to an input stream
     @param str reference to the string to write to
 */
-void strutil_getfoldedline(istream &istr, String &str);
+void strutil_getfoldedline(std::istream &istr, String &str);
 
 /** Get the part of a string before the delimiter.
 
diff --git a/src/adb/ProvBbdb.cpp b/src/adb/ProvBbdb.cpp
index c27270cb..c0e5ba21 100644
--- a/src/adb/ProvBbdb.cpp
+++ b/src/adb/ProvBbdb.cpp
@@ -49,11 +49,7 @@
 #include <wx/file.h>
 #include <wx/filename.h>
 
-#if wxUSE_IOSTREAMH
-#  include <fstream.h>                  // for ifstream
-#else
-#  include <fstream>                    // for ifstream
-#endif
+#include <fstream>                    // for ifstream
 
 #include "strlist.h"
 
@@ -143,7 +139,7 @@ public:
    static StringListList ReadVector(String *string);
    static StringListListList ReadListOfVectors(String *string);
 
-   static void WriteString(ostream &out, String const &string);
+   static void WriteString(std::ostream &out, String const &string);
 
    static bool ReadNil(String *line);
    static bool ReadHeader(String *version, String *line);
@@ -412,7 +408,7 @@ BbdbEntry::ReadString(String * line, bool *success)
 }
 
 void
-BbdbEntry::WriteString(ostream &out, String const &string)
+BbdbEntry::WriteString(std::ostream &out, String const &string)
 {
    const wxChar *cptr;
 
@@ -676,12 +672,12 @@ BbdbEntryGroup::BbdbEntryGroup(BbdbEntryGroup *, const String& strName)
    BbdbEntry *e;
    wxString line, version;
    int ignored = 0, entries_read = 0;
-   ifstream file(strName.mb_str());
+   std::ifstream file(strName.mb_str());
    int length = 0;
 
-   file.seekg(0, ios::end);
+   file.seekg(0, std::ios::end);
    length = (int) (file.tellg() / 1024);
-   file.seekg(0, ios::beg);
+   file.seekg(0, std::ios::beg);
 
    // read the header info
    strutil_getstrline(file,line);
@@ -777,9 +773,9 @@ BbdbEntryGroup::~BbdbEntryGroup()
                                       length, NULL, wxPD_APP_MODAL);
 
          String str;
-         ofstream out(m_strName.mb_str());
+         std::ofstream out(m_strName.mb_str());
          size_t n,m;
-         out << ";;; file-version: 2" << endl;
+         out << ";;; file-version: 2" << std::endl;
          for(i = m_entries->begin(); i != m_entries->end(); i++)
          {
             e = *i;
@@ -852,7 +848,7 @@ BbdbEntryGroup::~BbdbEntryGroup()
                e->GetEMail(m, &str);
                out << '"' << str << "\" ";
             }
-            out << ") nil nil]" << endl;
+            out << ") nil nil]" << std::endl;
          }
          status_frame.Update(++count);
       }
@@ -1070,7 +1066,7 @@ BbdbDataProvider::TestBookAccess(const String& name, AdbTests test)
          // and Test_Create
          if(wxFileExists(name))
          {
-            ifstream file(name.mb_str());
+            std::ifstream file(name.mb_str());
             String line;
             strutil_getstrline(file, line);
             return BbdbEntry::ReadHeader(NULL, &line);
diff --git a/src/adb/ProvLine.cpp b/src/adb/ProvLine.cpp
index 1a613857..32e238fc 100644
--- a/src/adb/ProvLine.cpp
+++ b/src/adb/ProvLine.cpp
@@ -35,6 +35,8 @@
 #include "adb/AdbBook.h"
 #include "adb/AdbDataProvider.h"
 
+#include <fstream>
+
 // ----------------------------------------------------------------------------
 // private classes
 // ----------------------------------------------------------------------------
@@ -117,7 +119,7 @@ public:
    bool IsDirty() const;
    void ClearDirty();
 
-   bool ReadFromStream(istream &stream);
+   bool ReadFromStream(std::istream &stream);
    
 private:
    virtual ~LineBook();
@@ -152,7 +154,7 @@ private:
    bool m_dirty;
 };
 
-ostream& operator << (ostream& out, const LineEntryData& entry);
+std::ostream& operator << (std::ostream& out, const LineEntryData& entry);
 
 // our AdbEntryData implementation
 class LineEntry : public AdbEntry
@@ -249,10 +251,10 @@ LineBook::LineBook(const String& file)
    m_bad = false;
    m_dirty = false;
    
-   ifstream stream(m_file.fn_str());
+   std::ifstream stream(m_file.fn_str());
    if ( !stream.good() )
    {
-      ofstream create(m_file.fn_str(), ios::out|ios::ate);
+      std::ofstream create(m_file.fn_str(), std::ios::out|std::ios::ate);
       if ( !create.good() )
          goto FileError;
       create.close();
@@ -369,7 +371,7 @@ bool LineBook::Flush()
    {
       String commit = wxFileName::CreateTempFileName(wxEmptyString);
       
-      ofstream stream(commit.fn_str());
+      std::ofstream stream(commit.fn_str());
       if ( !stream.good() )
          goto FileError;
       
@@ -418,7 +420,7 @@ void LineBook::ClearDirty()
    }
 }
 
-bool LineBook::ReadFromStream(istream &stream)
+bool LineBook::ReadFromStream(std::istream &stream)
 {
    for(;;)
    {
@@ -525,7 +527,7 @@ int LineEntryData::Matches(const wxChar *what, int /*where*/, int how) const
    return addressCopy.Matches(whatCopy) ? AdbLookup_EMail : 0;
 }
 
-ostream& operator << (ostream& out, const LineEntryData& entry)
+std::ostream& operator << (std::ostream& out, const LineEntryData& entry)
 {
    String address;
    entry.GetField(AdbField_EMail, &address);
@@ -533,7 +535,7 @@ ostream& operator << (ostream& out, const LineEntryData& entry)
    String nonspace = LineEntry::StripSpace(address);
    
    if ( nonspace.size() > 0 )
-      out << nonspace << endl;
+      out << nonspace << std::endl;
    
    return out;
 }
diff --git a/src/gui/wxIconManager.cpp b/src/gui/wxIconManager.cpp
index f1ea6c05..48647859 100644
--- a/src/gui/wxIconManager.cpp
+++ b/src/gui/wxIconManager.cpp
@@ -34,6 +34,8 @@
 #include <wx/file.h>
 #include <wx/filename.h>
 
+#include <fstream>
+
 #ifdef USE_ICONS_FROM_RESOURCES
 #  define   unknown_xpm     "unknown"
 #  define   MFrame_xpm      "mframe"
@@ -306,7 +308,7 @@ wxIconManager::LoadXpm(String filename)
    ASSERT(cpptr);
    bool found_xpm = false;
 
-   ifstream in(filename.mb_str());
+   std::ifstream in(filename.mb_str());
    if(in)
    {
       String str;
diff --git a/src/mail/SendMessageCC.cpp b/src/mail/SendMessageCC.cpp
index 47adcdd4..4a10c2c2 100644
--- a/src/mail/SendMessageCC.cpp
+++ b/src/mail/SendMessageCC.cpp
@@ -67,6 +67,8 @@
 #include <wx/datetime.h>
 #include <wx/scopeguard.h>
 
+#include <fstream>
+
 extern bool InitSSL(); // from src/util/ssl.cpp
 
 class MOption;
@@ -2081,9 +2083,9 @@ SendMessageCC::WriteToFile(const String &filename, bool append)
 {
    // note that we have to repeat ios::out and binary below, otherwise gcc 3.0
    // refuses to compile it as it converts everything to int and then fails
-   ofstream ostr(filename.mb_str(),
-                 append ? ios::out | ios::binary
-                        : ios::out | ios::binary | ios::trunc);
+   std::ofstream ostr(filename.mb_str(),
+                      append ? std::ios::out | std::ios::binary
+                             : std::ios::out | std::ios::binary | std::ios::trunc);
 
    bool ok = !(!ostr || ostr.bad());
    if ( ok )
@@ -2137,7 +2139,7 @@ SendMessageCC::WriteToFolder(String const &name)
 // rfc822_output() callback for writing into a file
 static long write_stream_output(void *stream, char *string)
 {
-   ostream *o = (ostream *)stream;
+   std::ostream *o = (std::ostream *)stream;
    *o << static_cast<const char *>(wxString::From8BitData(string).ToUTF8());
    if ( o->fail() )
       return NIL;
diff --git a/src/util/strutil.cpp b/src/util/strutil.cpp
index 45fc4cc0..c6438dfd 100644
--- a/src/util/strutil.cpp
+++ b/src/util/strutil.cpp
@@ -77,7 +77,7 @@ static String strutil_decrypt_tf(const String& cleartext);
 // ============================================================================
 
 void
-strutil_getstrline(istream &istr, String &str)
+strutil_getstrline(std::istream &istr, String &str)
 {
    char ch;
    str = wxEmptyString;
@@ -91,7 +91,7 @@ strutil_getstrline(istream &istr, String &str)
 }
 
 void
-strutil_getfoldedline(istream &istr, String &str)
+strutil_getfoldedline(std::istream &istr, String &str)
 {
    char ch;
    str = wxEmptyString;

commit 56cc8d56dd2de333f0fc5e38e0a0254aa49493ae
Author: Vadim Zeitlin <[email protected]>
Date:   Wed Jun 4 20:32:02 2025 +0200

    Allow combining options types and flags together
    
    Fix another warning from C++20 compiler due to adding together bit masks
    defined in different enums.

diff --git a/src/gui/wxOptionsDlg.cpp b/src/gui/wxOptionsDlg.cpp
index 0ac02eee..e4f96635 100644
--- a/src/gui/wxOptionsDlg.cpp
+++ b/src/gui/wxOptionsDlg.cpp
@@ -83,6 +83,8 @@
    #include <wx/stopwatch.h>
 #endif
 
+wxALLOW_COMBINING_ENUMS(wxOptionsPage::FieldType, wxOptionsPage::FieldFlags)
+
 // ----------------------------------------------------------------------------
 // persistent msgboxes we use here
 // ----------------------------------------------------------------------------

commit 1327cf57c4bd693c854d830079173c9a64ca0200
Author: Vadim Zeitlin <[email protected]>
Date:   Wed Jun 4 20:03:40 2025 +0200

    Avoid harmless warnings about adding different enum elements
    
    Just cast enum to int to suppress warnings in C++20 build mode.

diff --git a/src/gui/wxFolderView.cpp b/src/gui/wxFolderView.cpp
index 5a12e225..25286053 100644
--- a/src/gui/wxFolderView.cpp
+++ b/src/gui/wxFolderView.cpp
@@ -1934,9 +1934,9 @@ void wxFolderListCtrl::OnColumnRightClick(wxListEvent& event)
    {
       String colName = GetColumnName(col).Lower();
 
-      menu.Append(WXMENU_FVIEW_SORT_BY_COL + col,
+      menu.Append(WXMENU_FVIEW_SORT_BY_COL + static_cast<int>(col),
                   wxString::Format(_("Sort by %s"), colName));
-      menu.Append(WXMENU_FVIEW_SORT_BY_COL_REV + col,
+      menu.Append(WXMENU_FVIEW_SORT_BY_COL_REV + static_cast<int>(col),
                   wxString::Format(_("Reverse sort by %s"), colName));
       menu.AppendSeparator();
    }
diff --git a/src/gui/wxMenuDefs.cpp b/src/gui/wxMenuDefs.cpp
index 6c13dbf9..cf212060 100644
--- a/src/gui/wxMenuDefs.cpp
+++ b/src/gui/wxMenuDefs.cpp
@@ -891,7 +891,7 @@ extern void CheckLanguageInMenu(wxWindow *win, wxFontEncoding encoding)
       case wxFONTENCODING_ISO8859_13:
       case wxFONTENCODING_ISO8859_14:
       case wxFONTENCODING_ISO8859_15:
-         id = WXMENU_LANG_ISO8859_1 + encoding - wxFONTENCODING_ISO8859_1;
+         id = static_cast<int>(WXMENU_LANG_ISO8859_1) + encoding - wxFONTENCODING_ISO8859_1;
          break;
 
       case wxFONTENCODING_CP1250:
@@ -902,7 +902,7 @@ extern void CheckLanguageInMenu(wxWindow *win, wxFontEncoding encoding)
       case wxFONTENCODING_CP1255:
       case wxFONTENCODING_CP1256:
       case wxFONTENCODING_CP1257:
-         id = WXMENU_LANG_CP1250 + encoding - wxFONTENCODING_CP1250;
+         id = static_cast<int>(WXMENU_LANG_CP1250) + encoding - wxFONTENCODING_CP1250;
          break;
 
       case wxFONTENCODING_KOI8:

commit d0713693a6de6ff9d56712182258a2d2c158ba2d
Author: Vadim Zeitlin <[email protected]>
Date:   Wed Jun 4 20:02:45 2025 +0200

    Fix ambiguous types in ternary operator
    
    Add explicit conversions to wxString to fix compilation with C++20
    compilers, including MSVS 2022 with /std:c++20.

diff --git a/src/gui/wxComposeView.cpp b/src/gui/wxComposeView.cpp
index 0d6840c3..09ebf505 100644
--- a/src/gui/wxComposeView.cpp
+++ b/src/gui/wxComposeView.cpp
@@ -3463,7 +3463,7 @@ void wxComposeView::SetEncodingToSameAs(const Message *msg)
 void wxComposeView::EnableEditing(bool enable)
 {
    // indicate the current state in the status bar
-   SetStatusText(enable ? "" : _("RO"), 1);
+   SetStatusText(enable ? wxString{} : _("RO"), 1);
 
    m_editor->Enable(enable);
 }
diff --git a/src/gui/wxFolderView.cpp b/src/gui/wxFolderView.cpp
index 7e0a59cf..5a12e225 100644
--- a/src/gui/wxFolderView.cpp
+++ b/src/gui/wxFolderView.cpp
@@ -2728,7 +2728,7 @@ void wxFolderListCtrl::SetSortOrder(Profile *profile,
 {
    wxLogStatus(GetFrame(this), _("Now sorting by %s%s"),
                GetColumnName(col).Lower(),
-               reverse ? _(" (reverse)") : "");
+               reverse ? _(" (reverse)") : wxString{});
 
    profile->writeEntry(MP_MSGS_SORTBY, sortOrder);
 
diff --git a/src/mail/MFui.cpp b/src/mail/MFui.cpp
index f1195130..09fbb3d8 100644
--- a/src/mail/MFui.cpp
+++ b/src/mail/MFui.cpp
@@ -80,7 +80,7 @@ SizeToString(unsigned long sizeBytes,
          break;
 
       case MessageSize_Bytes:
-         s.Printf(_("%lu%s"), sizeBytes, terse ? "" : _(" bytes"));
+         s.Printf(_("%lu%s"), sizeBytes, terse ? wxString{} : _(" bytes"));
          break;
 
       case MessageSize_KBytes:
diff --git a/src/mail/MailFolderCmn.cpp b/src/mail/MailFolderCmn.cpp
index f70c90a9..ccda227d 100644
--- a/src/mail/MailFolderCmn.cpp
+++ b/src/mail/MailFolderCmn.cpp
@@ -1887,7 +1887,7 @@ bool MailFolderCmn::ProcessNewMail(UIdArray& uidsNew,
    wxLogTrace(TRACE_MF_NEWMAIL, "MF(%s)::ProcessNewMail(%lu msgs) for %s",
               GetName(),
               (unsigned long)uidsNew.GetCount(),
-              folderDst ? folderDst->GetFullName() : "ourselves");
+              folderDst ? folderDst->GetFullName() : wxString("ourselves"));
 
    // use the settings for the folder where the new mail is!
    MFolder *folderWithNewMail;

commit 6c783323e7e9823bcee9909cddbffbdeec1baf78
Author: Vadim Zeitlin <[email protected]>
Date:   Wed Jun 4 19:35:26 2025 +0200

    Update MSVS projects to 2022 and enable 64-bit builds
    
    32-bit is obsolete in 2025.

diff --git a/M.vcxproj b/M.vcxproj
index 924b536a..7b8b248f 100644
--- a/M.vcxproj
+++ b/M.vcxproj
@@ -38,54 +38,54 @@
     <ProjectGuid>{1515C8EB-5C72-43DF-9D3A-0703F155F268}</ProjectGuid>

     <RootNamespace>M</RootNamespace>

     <Keyword>Win32Proj</Keyword>

-    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>

   </PropertyGroup>

   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />

   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">

     <ConfigurationType>Application</ConfigurationType>

-    <CharacterSet>MultiByte</CharacterSet>

-    <PlatformToolset>v142</PlatformToolset>

+    <CharacterSet>Unicode</CharacterSet>

+    <PlatformToolset>v143</PlatformToolset>

   </PropertyGroup>

   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug DLL|Win32'" Label="Configuration">

     <ConfigurationType>Application</ConfigurationType>

-    <CharacterSet>MultiByte</CharacterSet>

-    <PlatformToolset>v142</PlatformToolset>

+    <CharacterSet>Unicode</CharacterSet>

+    <PlatformToolset>v143</PlatformToolset>

   </PropertyGroup>

   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">

     <ConfigurationType>Application</ConfigurationType>

-    <CharacterSet>NotSet</CharacterSet>

-    <PlatformToolset>v142</PlatformToolset>

+    <CharacterSet>Unicode</CharacterSet>

+    <PlatformToolset>v143</PlatformToolset>

   </PropertyGroup>

   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release DLL|Win32'" Label="Configuration">

     <ConfigurationType>Application</ConfigurationType>

-    <CharacterSet>NotSet</CharacterSet>

-    <PlatformToolset>v142</PlatformToolset>

+    <CharacterSet>Unicode</CharacterSet>

+    <PlatformToolset>v143</PlatformToolset>

   </PropertyGroup>

   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">

     <ConfigurationType>Application</ConfigurationType>

-    <CharacterSet>MultiByte</CharacterSet>

-    <PlatformToolset>v142</PlatformToolset>

+    <CharacterSet>Unicode</CharacterSet>

+    <PlatformToolset>v143</PlatformToolset>

   </PropertyGroup>

   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug DLL|x64'" Label="Configuration">

     <ConfigurationType>Application</ConfigurationType>

-    <CharacterSet>MultiByte</CharacterSet>

-    <PlatformToolset>v142</PlatformToolset>

+    <CharacterSet>Unicode</CharacterSet>

+    <PlatformToolset>v143</PlatformToolset>

   </PropertyGroup>

   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">

     <ConfigurationType>Application</ConfigurationType>

-    <CharacterSet>NotSet</CharacterSet>

-    <PlatformToolset>v142</PlatformToolset>

+    <CharacterSet>Unicode</CharacterSet>

+    <PlatformToolset>v143</PlatformToolset>

   </PropertyGroup>

   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release DLL|x64'" Label="Configuration">

     <ConfigurationType>Application</ConfigurationType>

-    <CharacterSet>NotSet</CharacterSet>

-    <PlatformToolset>v142</PlatformToolset>

+    <CharacterSet>Unicode</CharacterSet>

+    <PlatformToolset>v143</PlatformToolset>

   </PropertyGroup>

   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />

   <ImportGroup Label="ExtensionSettings">

   </ImportGroup>

   <ImportGroup Label="PropertySheets">

     <Import Project="python.vsprops" Condition="Exists('python.vsprops')" />

+    <Import Project="$(WXWIN)\wxwidgets.props" />

   </ImportGroup>

   <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">

     <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />

@@ -230,7 +230,7 @@
       <AdditionalDependencies>imap.lib;compface.lib;dspam.lib;versit.lib;winmm.lib;comctl32.lib;rpcrt4.lib;ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>

       <ShowProgress>NotSet</ShowProgress>

       <OutputFile>$(OutDir)M.exe</OutputFile>

-      <AdditionalLibraryDirectories>$(OutDir);$(wxwin)\lib\vc_amd64_lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>

+      <AdditionalLibraryDirectories>$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>

       <GenerateDebugInformation>true</GenerateDebugInformation>

       <GenerateMapFile>true</GenerateMapFile>

       <SubSystem>Windows</SubSystem>

@@ -264,7 +264,7 @@
       <AdditionalDependencies>imap.lib;compface.lib;dspam.lib;versit.lib;winmm.lib;comctl32.lib;rpcrt4.lib;ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>

       <ShowProgress>NotSet</ShowProgress>

       <OutputFile>$(OutDir)M.exe</OutputFile>

-      <AdditionalLibraryDirectories>$(OutDir);$(wxwin)\lib\vc_amd64_lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>

+      <AdditionalLibraryDirectories>$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>

       <GenerateDebugInformation>true</GenerateDebugInformation>

       <GenerateMapFile>true</GenerateMapFile>

       <SubSystem>Windows</SubSystem>

@@ -361,7 +361,7 @@
     <Link>

       <AdditionalDependencies>imap.lib;compface.lib;dspam.lib;versit.lib;winmm.lib;comctl32.lib;rpcrt4.lib;ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>

       <OutputFile>$(OutDir)M.exe</OutputFile>

-      <AdditionalLibraryDirectories>$(OutDir);$(wxwin)\lib\vc_amd64_lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>

+      <AdditionalLibraryDirectories>$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>

       <GenerateDebugInformation>true</GenerateDebugInformation>

       <SubSystem>Windows</SubSystem>

       <StackReserveSize>10000000</StackReserveSize>

@@ -394,7 +394,7 @@
     <Link>

       <AdditionalDependencies>imap.lib;compface.lib;dspam.lib;versit.lib;winmm.lib;comctl32.lib;rpcrt4.lib;ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>

       <OutputFile>$(OutDir)M.exe</OutputFile>

-      <AdditionalLibraryDirectories>$(OutDir);$(wxwin)\lib\vc_amd64_lib;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>

+      <AdditionalLibraryDirectories>$(OutDir);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>

       <GenerateDebugInformation>true</GenerateDebugInformation>

       <SubSystem>Windows</SubSystem>

       <StackReserveSize>10000000</StackReserveSize>

@@ -629,8 +629,6 @@
       </PrecompiledHeader>

       <WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Level1</WarningLevel>

       <WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug DLL|Win32'">Level1</WarningLevel>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug DLL|x64'">true</ExcludedFromBuild>

       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">STATIC_LINKED;%(PreprocessorDefinitions)</PreprocessorDefinitions>

       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug DLL|x64'">STATIC_LINKED;%(PreprocessorDefinitions)</PreprocessorDefinitions>

       <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">

@@ -647,8 +645,6 @@
       </PrecompiledHeader>

       <WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Level1</WarningLevel>

       <WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release DLL|Win32'">Level1</WarningLevel>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release DLL|x64'">true</ExcludedFromBuild>

       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">STATIC_LINKED;%(PreprocessorDefinitions)</PreprocessorDefinitions>

       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release DLL|x64'">STATIC_LINKED;%(PreprocessorDefinitions)</PreprocessorDefinitions>

       <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">

@@ -667,8 +663,6 @@
       </PrecompiledHeader>

       <WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Level1</WarningLevel>

       <WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug DLL|Win32'">Level1</WarningLevel>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug DLL|x64'">true</ExcludedFromBuild>

       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">STATIC_LINKED;%(PreprocessorDefinitions)</PreprocessorDefinitions>

       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug DLL|x64'">STATIC_LINKED;%(PreprocessorDefinitions)</PreprocessorDefinitions>

       <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">

@@ -685,8 +679,6 @@
       </PrecompiledHeader>

       <WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Level1</WarningLevel>

       <WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release DLL|Win32'">Level1</WarningLevel>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release DLL|x64'">true</ExcludedFromBuild>

       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">STATIC_LINKED;%(PreprocessorDefinitions)</PreprocessorDefinitions>

       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release DLL|x64'">STATIC_LINKED;%(PreprocessorDefinitions)</PreprocessorDefinitions>

       <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">

@@ -705,8 +697,6 @@
       </PrecompiledHeader>

       <WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Level1</WarningLevel>

       <WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug DLL|Win32'">Level1</WarningLevel>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug DLL|x64'">true</ExcludedFromBuild>

       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">STATIC_LINKED;%(PreprocessorDefinitions)</PreprocessorDefinitions>

       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug DLL|x64'">STATIC_LINKED;%(PreprocessorDefinitions)</PreprocessorDefinitions>

       <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">

@@ -723,8 +713,6 @@
       </PrecompiledHeader>

       <WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Level1</WarningLevel>

       <WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release DLL|Win32'">Level1</WarningLevel>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release DLL|x64'">true</ExcludedFromBuild>

       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">STATIC_LINKED;%(PreprocessorDefinitions)</PreprocessorDefinitions>

       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release DLL|x64'">STATIC_LINKED;%(PreprocessorDefinitions)</PreprocessorDefinitions>

       <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">

@@ -743,8 +731,6 @@
       </PrecompiledHeader>

       <WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Level1</WarningLevel>

       <WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug DLL|Win32'">Level1</WarningLevel>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug DLL|x64'">true</ExcludedFromBuild>

       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">STATIC_LINKED;%(PreprocessorDefinitions)</PreprocessorDefinitions>

       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug DLL|x64'">STATIC_LINKED;%(PreprocessorDefinitions)</PreprocessorDefinitions>

       <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">

@@ -761,8 +747,6 @@
       </PrecompiledHeader>

       <WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Level1</WarningLevel>

       <WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release DLL|Win32'">Level1</WarningLevel>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release DLL|x64'">true</ExcludedFromBuild>

       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">STATIC_LINKED;%(PreprocessorDefinitions)</PreprocessorDefinitions>

       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release DLL|x64'">STATIC_LINKED;%(PreprocessorDefinitions)</PreprocessorDefinitions>

       <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">

@@ -781,8 +765,6 @@
       </PrecompiledHeader>

       <WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Level1</WarningLevel>

       <WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug DLL|Win32'">Level1</WarningLevel>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug DLL|x64'">true</ExcludedFromBuild>

       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">STATIC_LINKED;%(PreprocessorDefinitions)</PreprocessorDefinitions>

       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug DLL|x64'">STATIC_LINKED;%(PreprocessorDefinitions)</PreprocessorDefinitions>

       <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">

@@ -799,8 +781,6 @@
       </PrecompiledHeader>

       <WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Level1</WarningLevel>

       <WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release DLL|Win32'">Level1</WarningLevel>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release DLL|x64'">true</ExcludedFromBuild>

       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">STATIC_LINKED;%(PreprocessorDefinitions)</PreprocessorDefinitions>

       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release DLL|x64'">STATIC_LINKED;%(PreprocessorDefinitions)</PreprocessorDefinitions>

       <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">

@@ -819,8 +799,6 @@
       </PrecompiledHeader>

       <WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Level1</WarningLevel>

       <WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug DLL|Win32'">Level1</WarningLevel>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug DLL|x64'">true</ExcludedFromBuild>

       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">STATIC_LINKED;%(PreprocessorDefinitions)</PreprocessorDefinitions>

       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug DLL|x64'">STATIC_LINKED;%(PreprocessorDefinitions)</PreprocessorDefinitions>

       <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">

@@ -837,8 +815,6 @@
       </PrecompiledHeader>

       <WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Level1</WarningLevel>

       <WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release DLL|Win32'">Level1</WarningLevel>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release DLL|x64'">true</ExcludedFromBuild>

       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">STATIC_LINKED;%(PreprocessorDefinitions)</PreprocessorDefinitions>

       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release DLL|x64'">STATIC_LINKED;%(PreprocessorDefinitions)</PreprocessorDefinitions>

       <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">

@@ -857,8 +833,6 @@
       </PrecompiledHeader>

       <WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Level1</WarningLevel>

       <WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug DLL|Win32'">Level1</WarningLevel>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug DLL|x64'">true</ExcludedFromBuild>

       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">STATIC_LINKED;%(PreprocessorDefinitions)</PreprocessorDefinitions>

       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug DLL|x64'">STATIC_LINKED;%(PreprocessorDefinitions)</PreprocessorDefinitions>

       <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">

@@ -875,8 +849,6 @@
       </PrecompiledHeader>

       <WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Level1</WarningLevel>

       <WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release DLL|Win32'">Level1</WarningLevel>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release DLL|x64'">true</ExcludedFromBuild>

       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">STATIC_LINKED;%(PreprocessorDefinitions)</PreprocessorDefinitions>

       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release DLL|x64'">STATIC_LINKED;%(PreprocessorDefinitions)</PreprocessorDefinitions>

       <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">

@@ -895,8 +867,6 @@
       </PrecompiledHeader>

       <WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Level1</WarningLevel>

       <WarningLevel Condition="'$(Configuration)|$(Platform)'=='Debug DLL|Win32'">Level1</WarningLevel>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug DLL|x64'">true</ExcludedFromBuild>

       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">STATIC_LINKED;SWIG_GLOBAL;%(PreprocessorDefinitions)</PreprocessorDefinitions>

       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug DLL|x64'">STATIC_LINKED;SWIG_GLOBAL;%(PreprocessorDefinitions)</PreprocessorDefinitions>

       <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">

@@ -913,8 +883,6 @@
       </PrecompiledHeader>

       <WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Level1</WarningLevel>

       <WarningLevel Condition="'$(Configuration)|$(Platform)'=='Release DLL|Win32'">Level1</WarningLevel>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>

-      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release DLL|x64'">true</ExcludedFromBuild>

       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">STATIC_LINKED;SWIG_GLOBAL;%(PreprocessorDefinitions)</PreprocessorDefinitions>

       <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release DLL|x64'">STATIC_LINKED;SWIG_GLOBAL;%(PreprocessorDefinitions)</PreprocessorDefinitions>

       <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">

@@ -1535,4 +1503,4 @@
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />

   <ImportGroup Label="ExtensionTargets">

   </ImportGroup>

-</Project>

+</Project>
\ No newline at end of file
diff --git a/Mconfig.vcxproj b/Mconfig.vcxproj
index 28d65b7b..71426c9f 100644
--- a/Mconfig.vcxproj
+++ b/Mconfig.vcxproj
@@ -23,28 +23,27 @@
     <ProjectGuid>{86C1D2C7-C961-4017-88E8-63D0BCCBD0D5}</ProjectGuid>

     <RootNamespace>config</RootNamespace>

     <Keyword>MakeFileProj</Keyword>

-    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>

   </PropertyGroup>

   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />

   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">

     <ConfigurationType>Utility</ConfigurationType>

     <UseOfMfc>false</UseOfMfc>

-    <PlatformToolset>v142</PlatformToolset>

+    <PlatformToolset>v143</PlatformToolset>

   </PropertyGroup>

   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">

     <ConfigurationType>Utility</ConfigurationType>

     <UseOfMfc>false</UseOfMfc>

-    <PlatformToolset>v142</PlatformToolset>

+    <PlatformToolset>v143</PlatformToolset>

   </PropertyGroup>

   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">

     <ConfigurationType>Utility</ConfigurationType>

     <UseOfMfc>false</UseOfMfc>

-    <PlatformToolset>v142</PlatformToolset>

+    <PlatformToolset>v143</PlatformToolset>

   </PropertyGroup>

   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">

     <ConfigurationType>Utility</ConfigurationType>

     <UseOfMfc>false</UseOfMfc>

-    <PlatformToolset>v142</PlatformToolset>

+    <PlatformToolset>v143</PlatformToolset>

   </PropertyGroup>

   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />

   <ImportGroup Label="ExtensionSettings">

@@ -138,4 +137,4 @@
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />

   <ImportGroup Label="ExtensionTargets">

   </ImportGroup>

-</Project>
\ No newline at end of file
+</Project>

diff --git a/lib/compface/compface.vcxproj b/lib/compface/compface.vcxproj
index 8548a63b..8ec8a455 100644
--- a/lib/compface/compface.vcxproj
+++ b/lib/compface/compface.vcxproj
@@ -20,32 +20,31 @@
   </ItemGroup>

   <PropertyGroup Label="Globals">

     <ProjectGuid>{0E9F4403-1AA1-4824-A99F-041B1BF18D14}</ProjectGuid>

-    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>

   </PropertyGroup>

   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />

   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">

     <ConfigurationType>StaticLibrary</ConfigurationType>

     <UseOfMfc>false</UseOfMfc>

     <CharacterSet>MultiByte</CharacterSet>

-    <PlatformToolset>v142</PlatformToolset>

+    <PlatformToolset>v143</PlatformToolset>

   </PropertyGroup>

   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">

     <ConfigurationType>StaticLibrary</ConfigurationType>

     <UseOfMfc>false</UseOfMfc>

     <CharacterSet>MultiByte</CharacterSet>

-    <PlatformToolset>v142</PlatformToolset>

+    <PlatformToolset>v143</PlatformToolset>

   </PropertyGroup>

   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">

     <ConfigurationType>StaticLibrary</ConfigurationType>

     <UseOfMfc>false</UseOfMfc>

     <CharacterSet>MultiByte</CharacterSet>

-    <PlatformToolset>v142</PlatformToolset>

+    <PlatformToolset>v143</PlatformToolset>

   </PropertyGroup>

   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">

     <ConfigurationType>StaticLibrary</ConfigurationType>

     <UseOfMfc>false</UseOfMfc>

     <CharacterSet>MultiByte</CharacterSet>

-    <PlatformToolset>v142</PlatformToolset>

+    <PlatformToolset>v143</PlatformToolset>

   </PropertyGroup>

   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />

   <ImportGroup Label="ExtensionSettings">

@@ -249,4 +248,4 @@
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />

   <ImportGroup Label="ExtensionTargets">

   </ImportGroup>

-</Project>
\ No newline at end of file
+</Project>

diff --git a/lib/dspam/dspam.vcxproj b/lib/dspam/dspam.vcxproj
index 46710d74..9481fc91 100644
--- a/lib/dspam/dspam.vcxproj
+++ b/lib/dspam/dspam.vcxproj
@@ -21,32 +21,31 @@
   <PropertyGroup Label="Globals">

     <ProjectGuid>{62156246-DCEA-4713-95E0-C01F595F1A20}</ProjectGuid>

     <RootNamespace>dspam</RootNamespace>

-    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>

   </PropertyGroup>

   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />

   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">

     <ConfigurationType>StaticLibrary</ConfigurationType>

     <UseOfMfc>false</UseOfMfc>

     <CharacterSet>MultiByte</CharacterSet>

-    <PlatformToolset>v142</PlatformToolset>

+    <PlatformToolset>v143</PlatformToolset>

   </PropertyGroup>

   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">

     <ConfigurationType>StaticLibrary</ConfigurationType>

     <UseOfMfc>false</UseOfMfc>

     <CharacterSet>MultiByte</CharacterSet>

-    <PlatformToolset>v142</PlatformToolset>

+    <PlatformToolset>v143</PlatformToolset>

   </PropertyGroup>

   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">

     <ConfigurationType>StaticLibrary</ConfigurationType>

     <UseOfMfc>false</UseOfMfc>

     <CharacterSet>MultiByte</CharacterSet>

-    <PlatformToolset>v142</PlatformToolset>

+    <PlatformToolset>v143</PlatformToolset>

   </PropertyGroup>

   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">

     <ConfigurationType>StaticLibrary</ConfigurationType>

     <UseOfMfc>false</UseOfMfc>

     <CharacterSet>MultiByte</CharacterSet>

-    <PlatformToolset>v142</PlatformToolset>

+    <PlatformToolset>v143</PlatformToolset>

   </PropertyGroup>

   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />

   <ImportGroup Label="ExtensionSettings">

@@ -242,4 +241,4 @@
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />

   <ImportGroup Label="ExtensionTargets">

   </ImportGroup>

-</Project>
\ No newline at end of file
+</Project>

diff --git a/lib/imap/imap.vcxproj b/lib/imap/imap.vcxproj
index 93f00cb0..322faa78 100644
--- a/lib/imap/imap.vcxproj
+++ b/lib/imap/imap.vcxproj
@@ -21,32 +21,31 @@
   <PropertyGroup Label="Globals">

     <ProjectGuid>{457cfec8-5c3f-4c7e-98a6-b65e1de22682}</ProjectGuid>

     <RootNamespace>imap</RootNamespace>

-    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>

   </PropertyGroup>

   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />

   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">

     <ConfigurationType>StaticLibrary</ConfigurationType>

     <UseOfMfc>false</UseOfMfc>

     <CharacterSet>MultiByte</CharacterSet>

-    <PlatformToolset>v142</PlatformToolset>

+    <PlatformToolset>v143</PlatformToolset>

   </PropertyGroup>

   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">

     <ConfigurationType>StaticLibrary</ConfigurationType>

     <UseOfMfc>false</UseOfMfc>

     <CharacterSet>MultiByte</CharacterSet>

-    <PlatformToolset>v142</PlatformToolset>

+    <PlatformToolset>v143</PlatformToolset>

   </PropertyGroup>

   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">

     <ConfigurationType>StaticLibrary</ConfigurationType>

     <UseOfMfc>false</UseOfMfc>

     <CharacterSet>MultiByte</CharacterSet>

-    <PlatformToolset>v142</PlatformToolset>

+    <PlatformToolset>v143</PlatformToolset>

   </PropertyGroup>

   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">

     <ConfigurationType>StaticLibrary</ConfigurationType>

     <UseOfMfc>false</UseOfMfc>

     <CharacterSet>MultiByte</CharacterSet>

-    <PlatformToolset>v142</PlatformToolset>

+    <PlatformToolset>v143</PlatformToolset>

   </PropertyGroup>

   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />

   <ImportGroup Label="ExtensionSettings">

@@ -240,4 +239,4 @@
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />

   <ImportGroup Label="ExtensionTargets">

   </ImportGroup>

-</Project>
\ No newline at end of file
+</Project>

diff --git a/src/wx/vcard/versit.vcxproj b/src/wx/vcard/versit.vcxproj
index 26b25115..569101db 100644
--- a/src/wx/vcard/versit.vcxproj
+++ b/src/wx/vcard/versit.vcxproj
@@ -21,28 +21,27 @@
   <PropertyGroup Label="Globals">

     <ProjectGuid>{E46C11C7-5924-4F7C-B82E-5BEB8856A8BC}</ProjectGuid>

     <RootNamespace>versit</RootNamespace>

-    <WindowsTargetPlatformVersion>10.0.17134.0</WindowsTargetPlatformVersion>

   </PropertyGroup>

   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />

   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">

     <ConfigurationType>DynamicLibrary</ConfigurationType>

     <UseOfMfc>false</UseOfMfc>

-    <PlatformToolset>v142</PlatformToolset>

+    <PlatformToolset>v143</PlatformToolset>

   </PropertyGroup>

   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">

     <ConfigurationType>DynamicLibrary</ConfigurationType>

     <UseOfMfc>false</UseOfMfc>

-    <PlatformToolset>v142</PlatformToolset>

+    <PlatformToolset>v143</PlatformToolset>

   </PropertyGroup>

   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">

     <ConfigurationType>DynamicLibrary</ConfigurationType>

     <UseOfMfc>false</UseOfMfc>

-    <PlatformToolset>v142</PlatformToolset>

+    <PlatformToolset>v143</PlatformToolset>

   </PropertyGroup>

   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">

     <ConfigurationType>DynamicLibrary</ConfigurationType>

     <UseOfMfc>false</UseOfMfc>

-    <PlatformToolset>v142</PlatformToolset>

+    <PlatformToolset>v143</PlatformToolset>

   </PropertyGroup>

   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />

   <ImportGroup Label="ExtensionSettings">

@@ -271,4 +270,4 @@
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />

   <ImportGroup Label="ExtensionTargets">

   </ImportGroup>

-</Project>
\ No newline at end of file
+</Project>


commit 04b63f3349595cc9b3f3fe5c5f08fc99e129287f
Author: Vadim Zeitlin <[email protected]>
Date:   Wed Jun 4 19:46:59 2025 +0200

    Convert source files to UTF-8
    
    They were in Latin-1, with the only non-ASCII typically being "ü" in
    Karsten's name.
    
    This was mostly done by just running
    
            $ git ls-files include src | xargs recode latin1..utf8
    
    and then a couple of manual tweaks.

diff --git a/include/ASMailFolder.h b/include/ASMailFolder.h
index d1b759a3..84975dc0 100644
--- a/include/ASMailFolder.h
+++ b/include/ASMailFolder.h
@@ -2,14 +2,14 @@
  * ASMailFolder class: ABC defining the interface for asynchronous  *
  *                     mail folders                                 *
  *                                                                  *
- * (C) 1999-2000 by Karsten Ballüder ([email protected])             *
+ * (C) 1999-2000 by Karsten Ballüder ([email protected])             *
  *                                                                  *
  * $Id$
  *******************************************************************/
 
 /**
    @package Mailfolder access
-   @author  Karsten Ballüder
+   @author  Karsten Ballüder
 */
 #ifndef ASMAILFOLDER_H
 #define ASMAILFOLDER_H
diff --git a/include/FolderView.h b/include/FolderView.h
index 1d649122..7a957118 100644
--- a/include/FolderView.h
+++ b/include/FolderView.h
@@ -1,11 +1,11 @@
 ///////////////////////////////////////////////////////////////////////////////
 // Project:     M - cross platform e-mail GUI client
 // File name:   FolderView.h - interface of the folder view class
-// Author:      Karsten Ballüder
+// Author:      Karsten Ballüder
 // Modified by:
 // Created:     1997
 // CVS-ID:      $Id$
-// Copyright:   (C) 1997-2000 by Karsten Ballüder ([email protected])
+// Copyright:   (C) 1997-2000 by Karsten Ballüder ([email protected])
 // Licence:     M license
 ///////////////////////////////////////////////////////////////////////////////
 
diff --git a/include/HeaderInfo.h b/include/HeaderInfo.h
index df0cb120..e56f3bd5 100644
--- a/include/HeaderInfo.h
+++ b/include/HeaderInfo.h
@@ -4,11 +4,11 @@
 // Purpose:     HeaderInfo contains all envelope information for one message,
 //              HeaderInfoList knows how to retrieve HeaderInfos for the given
 //              folder
-// Author:      Karsten Ballüder
+// Author:      Karsten Ballüder
 // Modified by:
 // Created:     1998
 // CVS-ID:      $Id$
-// Copyright:   (C) 1998-2000 by Karsten Ballüder ([email protected])
+// Copyright:   (C) 1998-2000 by Karsten Ballüder ([email protected])
 // Licence:     M license
 ///////////////////////////////////////////////////////////////////////////////
 
diff --git a/include/HeaderInfoImpl.h b/include/HeaderInfoImpl.h
index 194bdf2a..75862f2c 100644
--- a/include/HeaderInfoImpl.h
+++ b/include/HeaderInfoImpl.h
@@ -2,11 +2,11 @@
 // Project:     M - cross platform e-mail GUI client
 // File name:   include/HeaderInfoImpl.h: HeaderInfoListImpl class
 // Purpose:     provide implementation of the ABC HeaderInfoList
-// Author:      Karsten Ballüder, Vadim Zeitlin
+// Author:      Karsten Ballüder, Vadim Zeitlin
 // Modified by:
 // Created:     1998
 // CVS-ID:      $Id$
-// Copyright:   (C) 1998-2000 by Karsten Ballüder ([email protected])
+// Copyright:   (C) 1998-2000 by Karsten Ballüder ([email protected])
 // Licence:     M license
 ///////////////////////////////////////////////////////////////////////////////
 
diff --git a/include/MApplication.h b/include/MApplication.h
index 592aa8e4..055758e1 100644
--- a/include/MApplication.h
+++ b/include/MApplication.h
@@ -1,7 +1,7 @@
 /*-*- c++ -*-********************************************************
  * MApplication class: all non GUI specific application stuff       *
  *                                                                  *
- * (C) 1997-2000 by Karsten Ballüder ([email protected])         *
+ * (C) 1997-2000 by Karsten Ballüder ([email protected])         *
  *                                                                  *
  * $Id$
  *******************************************************************/
diff --git a/include/MDialogs.h b/include/MDialogs.h
index a45d0a29..3292e9c7 100644
--- a/include/MDialogs.h
+++ b/include/MDialogs.h
@@ -1,7 +1,7 @@
 /*-*- c++ -*-********************************************************
  * MDialogs.h : GUI independent dialog boxes                        *
  *                                                                  *
- * (C) 1998 by Karsten Ballüder ([email protected])                 *
+ * (C) 1998 by Karsten Ballüder ([email protected])                 *
  *                                                                  *
  * $Id$
  *******************************************************************/
diff --git a/include/MFilter.h b/include/MFilter.h
index 246257ea..45e93c4e 100644
--- a/include/MFilter.h
+++ b/include/MFilter.h
@@ -1,7 +1,7 @@
 /*-*- c++ -*-********************************************************
  * MFilter - a class for managing filter config settings            *
  *                                                                  *
- * (C) 2000 by Karsten Ballüder ([email protected])                 *
+ * (C) 2000 by Karsten Ballüder ([email protected])                 *
  *                                                                  *
  * $Id$
  *******************************************************************/
diff --git a/include/MFrame.h b/include/MFrame.h
index 43c238b5..6275e232 100644
--- a/include/MFrame.h
+++ b/include/MFrame.h
@@ -1,7 +1,7 @@
 /*-*- c++ -*-********************************************************
  * MFrame.h : GUI independent frame/window representation           *
  *                                                                  *
- * (C) 1997, 1998 by Karsten Ballüder ([email protected])           *
+ * (C) 1997, 1998 by Karsten Ballüder ([email protected])           *
  *                                                                  *
  * $Id$
  *******************************************************************/
diff --git a/include/MGuiApp.h b/include/MGuiApp.h
index 8bf0e520..5cbdc0fe 100644
--- a/include/MGuiApp.h
+++ b/include/MGuiApp.h
@@ -1,7 +1,7 @@
 /*-*- c++ -*-********************************************************
  * MGuiApp class: all GUI specific application stuff, pure virtual  *
  *                                                                  *
- * (C) 1997 by Karsten Ballüder ([email protected])                 *
+ * (C) 1997 by Karsten Ballüder ([email protected])                 *
  *                                                                  *
  * $Id$
  *
diff --git a/include/MHelp.h b/include/MHelp.h
index 44adb879..c29d953f 100644
--- a/include/MHelp.h
+++ b/include/MHelp.h
@@ -1,7 +1,7 @@
 /*-*- c++ -*-********************************************************
  * MHelp.h : M's help system, based on numeric help topic ids       *
  *                                                                  *
- * (C) 1998 by Karsten Ballüder ([email protected])                 *
+ * (C) 1998 by Karsten Ballüder ([email protected])                 *
  *                                                                  *
  * $Id$
  *******************************************************************/
diff --git a/include/MLogFrame.h b/include/MLogFrame.h
index c332f749..60991bc2 100644
--- a/include/MLogFrame.h
+++ b/include/MLogFrame.h
@@ -1,7 +1,7 @@
 /*-*- c++ -*-********************************************************
  * MLogFrame.h : baseclass for window printing log output           *
  *                                                                  *
- * (C) 1998 by Karsten Ballüder ([email protected])                 *
+ * (C) 1998 by Karsten Ballüder ([email protected])                 *
  *                                                                  *
  * $Id$
  *******************************************************************/
diff --git a/include/MMainFrame.h b/include/MMainFrame.h
index d234f454..2525eb45 100644
--- a/include/MMainFrame.h
+++ b/include/MMainFrame.h
@@ -1,7 +1,7 @@
 /*-*- c++ -*-********************************************************
  * MMainFrame.h : application's main frame                          *
  *                                                                  *
- * (C) 1997-2000 by Karsten Ballüder ([email protected])            *
+ * (C) 1997-2000 by Karsten Ballüder ([email protected])            *
  *                                                                  *
  * $Id$
  *
diff --git a/include/MModule.h b/include/MModule.h
index a0c32d54..ec2c4236 100644
--- a/include/MModule.h
+++ b/include/MModule.h
@@ -1,7 +1,7 @@
 /*-*- c++ -*-********************************************************
  * MModule - a pluggable module architecture for Mahogany           *
  *                                                                  *
- * (C) 1999-2000 by Karsten Ballüder ([email protected])            *
+ * (C) 1999-2000 by Karsten Ballüder ([email protected])            *
  *                                                                  *
  * $Id$
  *******************************************************************/
diff --git a/include/MPython.h b/include/MPython.h
index 4adc2fe2..0e0f9e67 100644
--- a/include/MPython.h
+++ b/include/MPython.h
@@ -1,7 +1,7 @@
 /*-*- c++ -*-********************************************************
  * MPython.h - include file for M's python code                     *
  *                                                                  *
- * (C) 1997,1998 by Karsten Ballüder ([email protected])            *
+ * (C) 1997,1998 by Karsten Ballüder ([email protected])            *
  *                                                                  *
  * $Id$
  *
diff --git a/include/MScripts.h b/include/MScripts.h
index c2faf553..43d997d8 100644
--- a/include/MScripts.h
+++ b/include/MScripts.h
@@ -1,7 +1,7 @@
 /*-*- c++ -*-********************************************************
  * MScripts.h - Names of python scripts used by M                   *
  *                                                                  *
- * (C) 1998 by Karsten Ballüder ([email protected])                 *
+ * (C) 1998 by Karsten Ballüder ([email protected])                 *
  *                                                                  *
  * $Id$
 
diff --git a/include/MailFolder.h b/include/MailFolder.h
index 170aab11..adabbe4d 100644
--- a/include/MailFolder.h
+++ b/include/MailFolder.h
@@ -2,7 +2,7 @@
 // Project:     M - cross platform e-mail GUI client
 // File name:   MailFolder.h: MailFolder class declaration
 // Purpose:     MailFolder is the ABC defining the interface to mail folders
-// Author:      Karsten Ballüder
+// Author:      Karsten Ballüder
 // Modified by: Vadim Zeitlin at 24.01.01: complete rewrite of update logic
 // Created:     1997
 // CVS-ID:      $Id$
diff --git a/include/MailFolderCC.h b/include/MailFolderCC.h
index 6309da7f..373e44ac 100644
--- a/include/MailFolderCC.h
+++ b/include/MailFolderCC.h
@@ -2,11 +2,11 @@
 // Project:     Mahogany - cross platform e-mail GUI client
 // File name:   MailFolderCC.h: declaration of MailFolderCC class
 // Purpose:     handling of mail folders with c-client lib
-// Author:      Karsten Ballüder
+// Author:      Karsten Ballüder
 // Modified by:
 // Created:     1997
 // CVS-ID:      $Id$
-// Copyright:   (C) 1997-2001 by Karsten Ballüder ([email protected])
+// Copyright:   (C) 1997-2001 by Karsten Ballüder ([email protected])
 // Licence:     M license
 ///////////////////////////////////////////////////////////////////////////////
 
diff --git a/include/MailFolderCmn.h b/include/MailFolderCmn.h
index 0952bf80..66503b7e 100644
--- a/include/MailFolderCmn.h
+++ b/include/MailFolderCmn.h
@@ -4,11 +4,11 @@
 // Purpose:     MailFolderCmn is a normal base class implementing the methods
 //              of MailFolder ABC for which we can write a reasonable generic
 //              implementation
-// Author:      Karsten Ballüder, Vadim Zeitlin
+// Author:      Karsten Ballüder, Vadim Zeitlin
 // Modified by:
 // Created:     1998
 // CVS-ID:      $Id$
-// Copyright:   (C) 1998-2000 by Karsten Ballüder ([email protected])
+// Copyright:   (C) 1998-2000 by Karsten Ballüder ([email protected])
 // Licence:     M license
 ///////////////////////////////////////////////////////////////////////////////
 
diff --git a/include/Mcallbacks.h b/include/Mcallbacks.h
index d4a60edf..ba376a9b 100644
--- a/include/Mcallbacks.h
+++ b/include/Mcallbacks.h
@@ -2,7 +2,7 @@
  * Mcallbacks.h : define the names of all callback functions for    *
  *                use in profiles                                   *
  *                                                                  *
- * (C) 1998 by Karsten Ballüder ([email protected])                 *
+ * (C) 1998 by Karsten Ballüder ([email protected])                 *
  *                                                                  *
  * $Id$             *
  *
diff --git a/include/Mcclient.h b/include/Mcclient.h
index 8ea77ae6..eef08900 100644
--- a/include/Mcclient.h
+++ b/include/Mcclient.h
@@ -1,7 +1,7 @@
 /*-*- c++ -*-********************************************************
  * Mc-client.h - c-client header inclusion for Mahogany             *
  *                                                                  *
- * (C) 2000 by Karsten Ballüder ([email protected])                 *
+ * (C) 2000 by Karsten Ballüder ([email protected])                 *
  *                                                                  *
  * $Id$
  *                                                                  *
diff --git a/include/Mcommon.h b/include/Mcommon.h
index 7c1809b2..3c75bd4c 100644
--- a/include/Mcommon.h
+++ b/include/Mcommon.h
@@ -3,11 +3,11 @@
 // File name:   Mcommon.h - the common declarations included by everyone
 // Purpose:     contains debugging and logging macros, mainly, which everyone
 //              needs
-// Author:      Karsten Ballüder
+// Author:      Karsten Ballüder
 // Modified by:
 // Created:     11.07.99
 // CVS-ID:      $Id$
-// Copyright:   (c) 1998-2000 by Karsten Ballüder ([email protected])
+// Copyright:   (c) 1998-2000 by Karsten Ballüder ([email protected])
 // Licence:     M license
 ///////////////////////////////////////////////////////////////////////////////
 
diff --git a/include/Mconfig.h b/include/Mconfig.h
index 1b82a0ab..290f5b27 100644
--- a/include/Mconfig.h
+++ b/include/Mconfig.h
@@ -3,7 +3,7 @@
 // File name:   Mconfig.h: common compilation configuration settings
 // Purpose:     config.h is edited by the user, this one detects the rest
 //              automatically
-// Author:      Karsten Ballüder, Vadim Zeitlin
+// Author:      Karsten Ballüder, Vadim Zeitlin
 // Modified by:
 // Created:     1997
 // CVS-ID:      $Id$
diff --git a/include/Mdefaults.h b/include/Mdefaults.h
index 5999096f..dbd37019 100644
--- a/include/Mdefaults.h
+++ b/include/Mdefaults.h
@@ -2,7 +2,7 @@
 // Project:     M - cross platform e-mail GUI client
 // File name:   Mdefaults.h: Mahogany options and their default values
 // Purpose:     functions for reading the value of an option from Profile
-// Author:      Karsten Ballüder
+// Author:      Karsten Ballüder
 // Modified by: Vadim Zeitlin at 22.08.01 to use MOption class
 // Created:     1997
 // CVS-ID:      $Id$
diff --git a/include/Message.h b/include/Message.h
index e8caf87b..4f089d9f 100644
--- a/include/Message.h
+++ b/include/Message.h
@@ -2,11 +2,11 @@
 // Project:     M - cross platform e-mail GUI client
 // File name:   Message.h: declaration of the Message class interface
 // Purpose:     Message is an ABC for the classes representing a mail message
-// Author:      Karsten Ballüder
+// Author:      Karsten Ballüder
 // Modified by:
 // Created:     1997
 // CVS-ID:      $Id$
-// Copyright:   (c) 1997-2000 by Karsten Ballüder ([email protected])
+// Copyright:   (c) 1997-2000 by Karsten Ballüder ([email protected])
 // Licence:     M license
 ///////////////////////////////////////////////////////////////////////////////
 
diff --git a/include/MessageCC.h b/include/MessageCC.h
index 7d552324..6dc68f29 100644
--- a/include/MessageCC.h
+++ b/include/MessageCC.h
@@ -2,7 +2,7 @@
 // Project:     M - cross platform e-mail GUI client
 // File name:   MessageCC.h - declares MessageCC class
 // Purpose:     implementation of Message using c-client API
-// Author:      Karsten Ballüder ([email protected])
+// Author:      Karsten Ballüder ([email protected])
 // Modified by:
 // Created:     1997
 // CVS-ID:      $Id$
diff --git a/include/Mpch.h b/include/Mpch.h
index 468333d4..476b1fbe 100644
--- a/include/Mpch.h
+++ b/include/Mpch.h
@@ -1,7 +1,7 @@
 /*-*- c++ -*-********************************************************
  * Mpch.h - precompiled header support for M                        *
  *                                                                  *
- * (C) 1998 by Karsten Ballüder ([email protected])                 *
+ * (C) 1998 by Karsten Ballüder ([email protected])                 *
  *                                                                  *
  * $Id$
  *                                                                  *
diff --git a/include/Munix.h b/include/Munix.h
index 907bf1ce..8f1bb2be 100644
--- a/include/Munix.h
+++ b/include/Munix.h
@@ -1,7 +1,7 @@
 /*-*- c++ -*-********************************************************
  * Munix.h - unix specific configuration                            *
  *                                                                  *
- * (C) 1997 by Karsten Ballüder ([email protected])                 *
+ * (C) 1997 by Karsten Ballüder ([email protected])                 *
  *                                                                  *
  * $Id$
  *******************************************************************/
diff --git a/include/Mupgrade.h b/include/Mupgrade.h
index abfebd3f..cb6125ae 100644
--- a/include/Mupgrade.h
+++ b/include/Mupgrade.h
@@ -2,11 +2,11 @@
 // Project:     M
 // File name:   Mupgrade.h - config and upgrading functionality
 // Purpose:     
-// Author:      Karsten Ballüder
+// Author:      Karsten Ballüder
 // Modified by:
 // Created:     29.11.98
 // CVS-ID:      $Id$
-// Copyright:   (c) 1998 Karsten Ballüder <[email protected]>
+// Copyright:   (c) 1998 Karsten Ballüder <[email protected]>
 // Licence:     M license
 // //// //// //// //// //// //// //// //// //// //// //// //// //// //// //////
 
diff --git a/include/Mwin.h b/include/Mwin.h
index 3278ecf0..e5086f31 100644
--- a/include/Mwin.h
+++ b/include/Mwin.h
@@ -1,7 +1,7 @@
 /*-*- c++ -*-********************************************************
  * Mwin.h - Windows specific configuration                          *
  *                                                                  *
- * (C) 1998 by Karsten Ballüder ([email protected])                 *
+ * (C) 1998 by Karsten Ballüder ([email protected])                 *
  *                                                                  *
  * $Id$
  *******************************************************************/
diff --git a/include/PathFinder.h b/include/PathFinder.h
index c01c9396..78a36f26 100644
--- a/include/PathFinder.h
+++ b/include/PathFinder.h
@@ -1,7 +1,7 @@
 /*-*- c++ -*-********************************************************
  * PathFinder - a class for finding files or directories            *
  *                                                                  *
- * (C) 1997-1999 by Karsten Ballüder ([email protected])         *
+ * (C) 1997-1999 by Karsten Ballüder ([email protected])         *
  *                                                                  *
  * $Id$             *
  ********************************************************************/
diff --git a/include/Profile.h b/include/Profile.h
index 8849f71b..4c578abc 100644
--- a/include/Profile.h
+++ b/include/Profile.h
@@ -2,7 +2,7 @@
 // Project:     M - cross platform e-mail GUI client
 // File name:   Profile.h: Mahogany Profile class
 // Purpose:     Profiles are used for storing all program options and much more
-// Author:      Karsten Ballüder
+// Author:      Karsten Ballüder
 // Modified by:
 // Created:     1997
 // CVS-ID:      $Id$
diff --git a/include/PythonHelp.h b/include/PythonHelp.h
index 56836a23..e4155ead 100644
--- a/include/PythonHelp.h
+++ b/include/PythonHelp.h
@@ -2,7 +2,7 @@
 // Project:     M
 // File name:   PythonHelp.h - functions for working with Python
 // Purpose:     some simple high-level functions for calling Python code
-// Author:      Karsten Ballüder
+// Author:      Karsten Ballüder
 // Modified by:
 // Created:     1998
 // CVS-ID:      $Id$
diff --git a/include/SendMessageCC.h b/include/SendMessageCC.h
index 9b0dfdd0..519b6779 100644
--- a/include/SendMessageCC.h
+++ b/include/SendMessageCC.h
@@ -2,7 +2,7 @@
 // Project:     M - cross platform e-mail GUI client
 // File name:   SendMessageCC.h: declaration of SendMessageCC
 // Purpose:     sending/posting of mail messages with c-client lib
-// Author:      Karsten Ballüder
+// Author:      Karsten Ballüder
 // Modified by:
 // Created:     1998
 // CVS-ID:      $Id$
diff --git a/include/XFace.h b/include/XFace.h
index 31912df5..ecfeddac 100644
--- a/include/XFace.h
+++ b/include/XFace.h
@@ -1,7 +1,7 @@
 /*-*- c++ -*-********************************************************
  * XFace.h -  a class encapsulating XFace handling                  *
  *                                                                  *
- * (C) 1998 by Karsten Ballüder ([email protected])                 *
+ * (C) 1998 by Karsten Ballüder ([email protected])                 *
  *                                                                  *
  * $Id$                  *
  *******************************************************************/
diff --git a/include/config.h.in b/include/config.h.in
index 3d4b746d..73dd11d2 100644
--- a/include/config.h.in
+++ b/include/config.h.in
@@ -1,12 +1,12 @@
 /*-*- c++ -*-********************************************************
  * config.h.in: config.h template file for use with autoconf        *
  *                                                                  *
- * (C) 1998,1999 by Karsten Ballüder ([email protected])            *
+ * (C) 1998,1999 by Karsten Ballüder ([email protected])            *
  *                                                                  *
  * $Id$
  *******************************************************************/
 /// @package M
-/// @author Karsten Ballüder ([email protected])
+/// @author Karsten Ballüder ([email protected])
 /**@name config.h.in: Defines generated automatically from configure.in by autoheader.  */
 //@{
 #ifndef __cplusplus
diff --git a/include/gui/MWizard.h b/include/gui/MWizard.h
index b73c12e5..0b865f40 100644
--- a/include/gui/MWizard.h
+++ b/include/gui/MWizard.h
@@ -2,7 +2,7 @@
 // Project:     M
 // File name:   include/gui/MWizard.h
 // Purpose:     Declaration of MWizard class.
-// Author:      Karsten Ballüder ([email protected])
+// Author:      Karsten Ballüder ([email protected])
 // Created:     2010-05-18 (extracted from src/gui/wxWizards.cpp)
 // CVS-ID:      $Id$
 // Copyright:   (c) 2000-2010 M-Team
diff --git a/include/gui/wxComposeView.h b/include/gui/wxComposeView.h
index 83b6bc94..3ad3c9ca 100644
--- a/include/gui/wxComposeView.h
+++ b/include/gui/wxComposeView.h
@@ -2,7 +2,7 @@
 // Project:     M - cross platform e-mail GUI client
 // File name:   gui/wxComposeView.h - composer GUI frame class
 // Purpose:     wxComposeView declaration
-// Author:      Karsten Ballüder, Vadim Zeitlin
+// Author:      Karsten Ballüder, Vadim Zeitlin
 // Modified by:
 // Created:     1998
 // CVS-ID:      $Id$
diff --git a/include/gui/wxFolderView.h b/include/gui/wxFolderView.h
index 61f13790..e8a03079 100644
--- a/include/gui/wxFolderView.h
+++ b/include/gui/wxFolderView.h
@@ -2,7 +2,7 @@
 // Project:     Mahogany - cross platform e-mail GUI client
 // File name:   gui/wxFolderView.h - wxFolderView and related classes
 // Purpose:     wxFolderView is used to show to the user folder contents
-// Author:      Karsten Ballüder ([email protected])
+// Author:      Karsten Ballüder ([email protected])
 // Modified by:
 // Created:     1997
 // CVS-ID:      $Id$
diff --git a/include/gui/wxIconManager.h b/include/gui/wxIconManager.h
index 333cad15..2de8554a 100644
--- a/include/gui/wxIconManager.h
+++ b/include/gui/wxIconManager.h
@@ -1,7 +1,7 @@
 /*-*- c++ -*-********************************************************
  * wxIconManager - allocating and deallocating icons for drawing    *
  *                                                                  *
- * (C) 1997-1999 by Karsten Ballüder ([email protected])            *
+ * (C) 1997-1999 by Karsten Ballüder ([email protected])            *
  *                                                                  *
  * $Id$
  *******************************************************************/
diff --git a/include/gui/wxMApp.h b/include/gui/wxMApp.h
index 97e0cb44..0355ee6f 100644
--- a/include/gui/wxMApp.h
+++ b/include/gui/wxMApp.h
@@ -2,7 +2,7 @@
 // Project:     M - cross platform e-mail GUI client
 // File name:   gui/wxMApp.h - GUI-specific part of application logic
 // Purpose:     declares wxMApp class implementing MApplication ABC
-// Author:      Karsten Ballüder, Vadim Zeitlin
+// Author:      Karsten Ballüder, Vadim Zeitlin
 // Modified by:
 // Created:     1997
 // CVS-ID:      $Id$
diff --git a/include/gui/wxMDialogs.h b/include/gui/wxMDialogs.h
index 5a2e6fb7..5403a31f 100644
--- a/include/gui/wxMDialogs.h
+++ b/include/gui/wxMDialogs.h
@@ -1,7 +1,7 @@
 /*******************************************************************
  * wxMDialogs.h : wxWindows version of dialog boxes                 *
  *                                                                  *
- * (C) 1998-1999 by Karsten Ballüder ([email protected])            *
+ * (C) 1998-1999 by Karsten Ballüder ([email protected])            *
  *                                                                  *
  * $Id$
  *******************************************************************/
diff --git a/include/gui/wxMIds.h b/include/gui/wxMIds.h
index 2639a9cf..85174cf1 100644
--- a/include/gui/wxMIds.h
+++ b/include/gui/wxMIds.h
@@ -1,7 +1,7 @@
 /*-*- c++ -*-********************************************************
  * wxMIds.h : define numeric ids and menu names                     *
  *                                                                  *
- * (C) 1998 by Karsten Ballüder ([email protected])                 *
+ * (C) 1998 by Karsten Ballüder ([email protected])                 *
  *                                                                  *
  * $Id$
  *******************************************************************/
diff --git a/include/gui/wxMenuDefs.h b/include/gui/wxMenuDefs.h
index d1b99a61..3e80c639 100644
--- a/include/gui/wxMenuDefs.h
+++ b/include/gui/wxMenuDefs.h
@@ -4,7 +4,7 @@
 // Purpose:     the definitions of all menu (and toolbar, inspite the name)
 //              items are gathered here complemented with some convenience
 //              functions for menu/toolbar creation
-// Author:      Karsten Ballüder
+// Author:      Karsten Ballüder
 // Modified by: Vadim Zeitlin
 // Created:     09.08.98
 // CVS-ID:      $Id$
diff --git a/include/gui/wxMessageView.h b/include/gui/wxMessageView.h
index bd6d94c8..ae834749 100644
--- a/include/gui/wxMessageView.h
+++ b/include/gui/wxMessageView.h
@@ -3,7 +3,7 @@
 // File name:   wxMessageView.h: wxMessageView and wxMessageViewFrame
 // Purpose:     wxMessageView adds missing GUI bits and pieces to MessageView:
 //              it shows the popup menu when needed &c
-// Author:      Karsten Ballüder
+// Author:      Karsten Ballüder
 // Modified by:
 // Created:     1997
 // CVS-ID:      $Id$
diff --git a/include/gui/wxllist.h b/include/gui/wxllist.h
index 1fa97031..0439aaa4 100644
--- a/include/gui/wxllist.h
+++ b/include/gui/wxllist.h
@@ -1,7 +1,7 @@
 /*-*- c++ -*-********************************************************
  * wxLayoutList.h - a formatted text rendering engine for wxWindows *
  *                                                                  *
- * (C) 1999-2000 by Karsten Ballüder ([email protected])            *
+ * (C) 1999-2000 by Karsten Ballüder ([email protected])            *
  *                                                                  *
  * $Id$
  *******************************************************************/
diff --git a/include/gui/wxlparser.h b/include/gui/wxlparser.h
index 4269d71c..d5243a8e 100644
--- a/include/gui/wxlparser.h
+++ b/include/gui/wxlparser.h
@@ -1,7 +1,7 @@
 /*-*- c++ -*-********************************************************
  * wxlparser.h : parsers,  import/export for wxLayoutList           *
  *                                                                  *
- * (C) 1998 by Karsten Ballüder ([email protected])                 *
+ * (C) 1998 by Karsten Ballüder ([email protected])                 *
  *                                                                  *
  * $Id$
  *******************************************************************/
diff --git a/include/gui/wxlwindow.h b/include/gui/wxlwindow.h
index 6925b855..f7e230d4 100644
--- a/include/gui/wxlwindow.h
+++ b/include/gui/wxlwindow.h
@@ -1,7 +1,7 @@
 /*-*- c++ -*-********************************************************
  * wxLwindow.h : a scrolled Window for displaying/entering rich text*
  *                                                                  *
- * (C) 1998-2000 by Karsten Ballüder ([email protected])            *
+ * (C) 1998-2000 by Karsten Ballüder ([email protected])            *
  *                                                                  *
  * $Id$
  *******************************************************************/
diff --git a/include/guidef.h b/include/guidef.h
index 9e6fbaa0..2aa498d6 100644
--- a/include/guidef.h
+++ b/include/guidef.h
@@ -2,7 +2,7 @@
 // Project:     M - cross platform e-mail GUI client
 // File name:   guidef.h
 // Purpose:     miscellaneous GUI helpers
-// Author:      Karsten Ballüder, Vadim Zeitlin
+// Author:      Karsten Ballüder, Vadim Zeitlin
 // Created:     1998
 // CVS-ID:      $Id$
 // Copyright:   (c) 1998-2006 Mahogany team
diff --git a/include/kbList.h b/include/kbList.h
index a2111b3e..88b7b83a 100644
--- a/include/kbList.h
+++ b/include/kbList.h
@@ -1,7 +1,7 @@
 /*-*- c++ -*-********************************************************
  * kbList.h : a double linked list                                  *
  *                                                                  *
- * (C) 1998-2000 by Karsten Ballüder ([email protected])            *
+ * (C) 1998-2000 by Karsten Ballüder ([email protected])            *
  *                                                                  *
  * $Id$
  *
diff --git a/include/modules/Calendar.h b/include/modules/Calendar.h
index 4964a543..4a78f599 100644
--- a/include/modules/Calendar.h
+++ b/include/modules/Calendar.h
@@ -1,7 +1,7 @@
 /*-*- c++ -*- *******************************************************
  * Calendar - a Calendar module for Mahogany                        *
  *                                                                  *
- * (C) 2000 by Karsten Ballüder ([email protected])                 *
+ * (C) 2000 by Karsten Ballüder ([email protected])                 *
  *                                                                  *
  * $Id$
  *******************************************************************/
diff --git a/include/modules/Filters.h b/include/modules/Filters.h
index dbfa3dc7..9e993f58 100644
--- a/include/modules/Filters.h
+++ b/include/modules/Filters.h
@@ -1,7 +1,7 @@
 /*-*- c++ -*-********************************************************
  * Filters - a pluggable module for filtering messages              *
  *                                                                  *
- * (C) 1999-2000 by Karsten Ballüder ([email protected])            *
+ * (C) 1999-2000 by Karsten Ballüder ([email protected])            *
  *                                                                  *
  * $Id$
  *******************************************************************/
diff --git a/include/strutil.h b/include/strutil.h
index 91c905fe..d658e779 100644
--- a/include/strutil.h
+++ b/include/strutil.h
@@ -1,7 +1,7 @@
 /*-*- c++ -*-********************************************************
  * strutil.h : utility functions for string handling                *
  *                                                                  *
- * (C) 1998-2000 by Karsten Ballüder ([email protected])            *
+ * (C) 1998-2000 by Karsten Ballüder ([email protected])            *
  *                                                                  *
  * $Id$
  *
diff --git a/include/sysutil.h b/include/sysutil.h
index 6c5fe32d..4247f340 100644
--- a/include/sysutil.h
+++ b/include/sysutil.h
@@ -2,10 +2,10 @@
 // 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
+// Author:      Karsten Ballüder, Vadim Zeitlin
 // Created:     1999
 // CVS-ID:      $Id$
-// Copyright:   (c) 1999 Karsten Ballüder
+// Copyright:   (c) 1999 Karsten Ballüder
 //              (c) 2000-2006 Vadim Zeitlin <[email protected]>
 // Licence:     M license
 ///////////////////////////////////////////////////////////////////////////////
diff --git a/src/adb/ProvBbdb.cpp b/src/adb/ProvBbdb.cpp
index 8801de3d..c27270cb 100644
--- a/src/adb/ProvBbdb.cpp
+++ b/src/adb/ProvBbdb.cpp
@@ -2,11 +2,11 @@
 // Project:     M - cross platform e-mail GUI client
 // File name:   adb/ProvBbdb.cpp - AdbDataProvider interfacing to
 //              .bbdb from emacs
-// Author:      Karsten Ballüder
+// Author:      Karsten Ballüder
 // Modified by:
 // Created:     20 Jan 1999
 // CVS-ID:      $Id$
-// Copyright:   (c) 1999 Karsten Ballüder <[email protected]>
+// Copyright:   (c) 1999 Karsten Ballüder <[email protected]>
 // Licence:     M license
 ///////////////////////////////////////////////////////////////////////////////
 
diff --git a/src/classes/ConfigSourcesAll.cpp b/src/classes/ConfigSourcesAll.cpp
index 0fb4595b..e62a97e2 100644
--- a/src/classes/ConfigSourcesAll.cpp
+++ b/src/classes/ConfigSourcesAll.cpp
@@ -45,7 +45,7 @@ extern const MOption MP_CONFIG_SOURCE_TYPE;
 // ----------------------------------------------------------------------------
 
 /**
-   wxConfigMultiplexer is a wxConfig façade for AllConfigSources.
+   wxConfigMultiplexer is a wxConfig façade for AllConfigSources.
 
    wxConfigMultiplexer presents wxConfig interface for AllConfigSources
    functionality, i.e. it reads from all config sources and not just from the
diff --git a/src/classes/FolderMonitor.cpp b/src/classes/FolderMonitor.cpp
index 0e246ff2..af69ecda 100644
--- a/src/classes/FolderMonitor.cpp
+++ b/src/classes/FolderMonitor.cpp
@@ -6,7 +6,7 @@
 // Modified by:
 // Created:     13.11.01 (based on MailCollector.cpp)
 // CVS-ID:      $Id$
-// Copyright:   (c) 1999-2000 Karsten Ballüder ([email protected])
+// Copyright:   (c) 1999-2000 Karsten Ballüder ([email protected])
 //              (c) 2001      Vadim Zeitlin    <[email protected]>
 // Licence:     M license
 ///////////////////////////////////////////////////////////////////////////////
diff --git a/src/classes/IconList.cpp b/src/classes/IconList.cpp
index ceebe24e..f64917cf 100644
--- a/src/classes/IconList.cpp
+++ b/src/classes/IconList.cpp
@@ -1,7 +1,7 @@
 /*-*- c++ -*-********************************************************
  * PersistentList.cc - a persistent STL compatible list class       *
  *                                                                  *
- * (C) 1997 by Karsten Ballüder ([email protected])                 *
+ * (C) 1997 by Karsten Ballüder ([email protected])                 *
  *                                                                  *
  * $Id$                                                             *
  ********************************************************************
diff --git a/src/classes/MApplication.cpp b/src/classes/MApplication.cpp
index 7d5df15c..b9121f63 100644
--- a/src/classes/MApplication.cpp
+++ b/src/classes/MApplication.cpp
@@ -1,7 +1,7 @@
 /*-*- c++ -*-********************************************************
  * MAppBase class: all non GUI specific application stuff           *
  *                                                                  *
- * (C) 1997-2000 by Karsten Ballüder ([email protected])            *
+ * (C) 1997-2000 by Karsten Ballüder ([email protected])            *
  *                                                                  *
  * $Id$
  *                                                                  *
diff --git a/src/classes/MFilter.cpp b/src/classes/MFilter.cpp
index fb959d71..8887d9f9 100644
--- a/src/classes/MFilter.cpp
+++ b/src/classes/MFilter.cpp
@@ -3,7 +3,7 @@
 // File name:   classes/MFilter.cpp - implements MFilter and related classes
 // Purpose:     non GUI filter classes responsible for storing filters in
 //              profile
-// Author:      Karsten Ballüder, Vadim Zeitlin
+// Author:      Karsten Ballüder, Vadim Zeitlin
 // Modified by:
 // Created:     2000
 // CVS-ID:      $Id$
diff --git a/src/classes/MModule.cpp b/src/classes/MModule.cpp
index d99a81fe..8525ffb5 100644
--- a/src/classes/MModule.cpp
+++ b/src/classes/MModule.cpp
@@ -1,7 +1,7 @@
 /*-*- c++ -*-********************************************************
  * MModule - a pluggable module architecture for Mahogany           *
  *                                                                  *
- * (C) 1999 by Karsten Ballüder ([email protected])              *
+ * (C) 1999 by Karsten Ballüder ([email protected])              *
  *                                                                  *
  * $Id$
  *******************************************************************/
diff --git a/src/classes/PathFinder.cpp b/src/classes/PathFinder.cpp
index 60548b7e..4aebaf22 100644
--- a/src/classes/PathFinder.cpp
+++ b/src/classes/PathFinder.cpp
@@ -1,7 +1,7 @@
 /*-*- c++ -*-********************************************************
  * PathFinder - a class for finding files or directories            *
  *                                                                  *
- * (C) 1997-1999 by Karsten Ballüder ([email protected])         *
+ * (C) 1997-1999 by Karsten Ballüder ([email protected])         *
  *                                                                  *
  * $Id$
  *
diff --git a/src/classes/Profile.cpp b/src/classes/Profile.cpp
index 9d1c05f4..1cd26033 100644
--- a/src/classes/Profile.cpp
+++ b/src/classes/Profile.cpp
@@ -2,7 +2,7 @@
 // Project:     M - cross platform e-mail GUI client
 // File name:   Profile.cpp
 // Purpose:     implementation of Profile &c
-// Author:      Karsten Ballüder
+// Author:      Karsten Ballüder
 // Modified by: Vadim Zeitlin at 26.08.03 to use AllConfigSources
 // Created:     1998
 // CVS-ID:      $Id$
diff --git a/src/classes/XFace.cpp b/src/classes/XFace.cpp
index 0bd17835..1a8c5d2a 100644
--- a/src/classes/XFace.cpp
+++ b/src/classes/XFace.cpp
@@ -1,7 +1,7 @@
 /*-*- c++ -*-********************************************************
  * XFace.cc -  a class encapsulating XFace handling                 *
  *                                                                  *
- * (C) 1998-1999 by Karsten Ballüder ([email protected])            *
+ * (C) 1998-1999 by Karsten Ballüder ([email protected])            *
  *                                                                  *
  * $Id$
  *******************************************************************/
diff --git a/src/classes/kbList.cpp b/src/classes/kbList.cpp
index bd203747..9b4de6b1 100644
--- a/src/classes/kbList.cpp
+++ b/src/classes/kbList.cpp
@@ -1,7 +1,7 @@
 /*-*- c++ -*-********************************************************
  * kbList.cc : a double linked list                                 *
  *                                                                  *
- * (C) 1998-2000 by Karsten Ballüder ([email protected])            *
+ * (C) 1998-2000 by Karsten Ballüder ([email protected])            *
  *                                                                  *
  * $Id$
  *                                                                  *
diff --git a/src/gui/ImportFoldersWizard.cpp b/src/gui/ImportFoldersWizard.cpp
index 1a382732..45521efd 100644
--- a/src/gui/ImportFoldersWizard.cpp
+++ b/src/gui/ImportFoldersWizard.cpp
@@ -2,7 +2,7 @@
 // Project:     M
 // File name:   src/gui/ImportFoldersWizard.cpp
 // Purpose:     Implementation of the folder import wizard.
-// Author:      Karsten Ballüder ([email protected])
+// Author:      Karsten Ballüder ([email protected])
 // Created:     2010-05-18 (extracted from src/gui/wxWizards.cpp)
 // CVS-ID:      $Id$
 // Copyright:   (c) 2000-2010 M-Team
diff --git a/src/gui/wxComposeView.cpp b/src/gui/wxComposeView.cpp
index c33a08a1..0d6840c3 100644
--- a/src/gui/wxComposeView.cpp
+++ b/src/gui/wxComposeView.cpp
@@ -2,7 +2,7 @@
 // Project:     M - cross platform e-mail GUI client
 // File name:   gui/wxComposeView.cpp - composer GUI code
 // Purpose:     shows a frame containing the header controls and editor window
-// Author:      Karsten Ballüder, Vadim Zeitlin
+// Author:      Karsten Ballüder, Vadim Zeitlin
 // Modified by:
 // Created:     1998
 // CVS-ID:      $Id$
diff --git a/src/gui/wxFiltersDialog.cpp b/src/gui/wxFiltersDialog.cpp
index 4d8a7114..2fd72758 100644
--- a/src/gui/wxFiltersDialog.cpp
+++ b/src/gui/wxFiltersDialog.cpp
@@ -2,7 +2,7 @@
 // Project:     M - cross platform e-mail GUI client
 // File name:   gui/wxFiltersDialog.cpp - GUI for editing mail filters
 // Purpose:     implements all the dialogs for configuring filters
-// Author:      Karsten Ballüder, Vadim Zeitlin
+// Author:      Karsten Ballüder, Vadim Zeitlin
 // Modified by:
 // Created:     1999
 // CVS-ID:      $Id$
diff --git a/src/gui/wxFolderView.cpp b/src/gui/wxFolderView.cpp
index dc07c221..7e0a59cf 100644
--- a/src/gui/wxFolderView.cpp
+++ b/src/gui/wxFolderView.cpp
@@ -2,7 +2,7 @@
 // Project:     M - cross platform e-mail GUI client
 // File name:   gui/wxFolderView.cpp - window with folder view inside
 // Purpose:     wxFolderView is used to show to the user folder contents
-// Author:      Karsten Ballüder ([email protected])
+// Author:      Karsten Ballüder ([email protected])
 // Modified by: VZ at 13.07.01: use virtual list control, update on demand
 // Created:     1997
 // CVS-ID:      $Id$
diff --git a/src/gui/wxIconManager.cpp b/src/gui/wxIconManager.cpp
index c8b99462..f1ea6c05 100644
--- a/src/gui/wxIconManager.cpp
+++ b/src/gui/wxIconManager.cpp
@@ -1,7 +1,7 @@
 /*-*- c++ -*-********************************************************
  * wxIconManager - allocating and deallocating icons for drawing    *
  *                                                                  *
- * (C) 1997-1999 by Karsten Ballüder ([email protected])            *
+ * (C) 1997-1999 by Karsten Ballüder ([email protected])            *
  *                                                                  *
  * $Id$
  *******************************************************************/
diff --git a/src/gui/wxMApp.cpp b/src/gui/wxMApp.cpp
index 5d4ba6f0..9a79124e 100644
--- a/src/gui/wxMApp.cpp
+++ b/src/gui/wxMApp.cpp
@@ -3,7 +3,7 @@
 // File name:   gui/wxMApp.cpp - GUI-specific part of application logic
 // Purpose:     program application, startup, non-portable hooks to implement
 //              the functionality needed by MApplication, also log window impl
-// Author:      Karsten Ballüder, Vadim Zeitlin
+// Author:      Karsten Ballüder, Vadim Zeitlin
 // Modified by:
 // Created:     1997
 // CVS-ID:      $Id$
diff --git a/src/gui/wxMDialogs.cpp b/src/gui/wxMDialogs.cpp
index cbc37444..d69b0133 100644
--- a/src/gui/wxMDialogs.cpp
+++ b/src/gui/wxMDialogs.cpp
@@ -1,7 +1,7 @@
 /*-*- c++ -*-********************************************************
  * wxMDialogs.cpp : wxWindows version of dialog boxes               *
  *                                                                  *
- * (C) 1998-2000 by Karsten Ballüder ([email protected])         *
+ * (C) 1998-2000 by Karsten Ballüder ([email protected])         *
  *                                                                  *
  * $Id$
  *******************************************************************/
diff --git a/src/gui/wxMessageView.cpp b/src/gui/wxMessageView.cpp
index aa8472e1..8fe14f83 100644
--- a/src/gui/wxMessageView.cpp
+++ b/src/gui/wxMessageView.cpp
@@ -2,7 +2,7 @@
 // Project:     M - cross platform e-mail GUI client
 // File name:   gui/wxMessageView.cpp - message viewer window
 // Purpose:     implementation of msg viewer using wxWindows
-// Author:      Karsten Ballüder ([email protected])
+// Author:      Karsten Ballüder ([email protected])
 // Modified by:
 // Created:     1998
 // CVS-ID:      $Id$
diff --git a/src/gui/wxModulesDlg.cpp b/src/gui/wxModulesDlg.cpp
index 57d78145..e0b9ce21 100644
--- a/src/gui/wxModulesDlg.cpp
+++ b/src/gui/wxModulesDlg.cpp
@@ -2,7 +2,7 @@
 // Project:     M - cross platform e-mail GUI client
 // File name:   gui/wxModulesDlg.cpp
 // Purpose:     dialog to configure the modules [not] to load
-// Author:      Karsten Ballüder
+// Author:      Karsten Ballüder
 // Modified by: Vadim Zeitlin on 2004-07-11 to select modules not to be loaded
 // Created:     13.04.01 (extracted from src/gui/wxComposeView.cpp)
 // CVS-ID:      $Id$
diff --git a/src/gui/wxllist.cpp b/src/gui/wxllist.cpp
index 73fd1031..c0f2e80a 100644
--- a/src/gui/wxllist.cpp
+++ b/src/gui/wxllist.cpp
@@ -1,7 +1,7 @@
 /*-*- c++ -*-********************************************************
  * wxllist: wxLayoutList, a layout engine for text and graphics     *
  *                                                                  *
- * (C) 1998-2000 by Karsten Ballüder ([email protected])            *
+ * (C) 1998-2000 by Karsten Ballüder ([email protected])            *
  *                                                                  *
  * $Id$
  *******************************************************************/
diff --git a/src/gui/wxlparser.cpp b/src/gui/wxlparser.cpp
index 5ae900d5..4d3d06d2 100644
--- a/src/gui/wxlparser.cpp
+++ b/src/gui/wxlparser.cpp
@@ -1,7 +1,7 @@
 /*-*- c++ -*-********************************************************
  * wxlparser.cpp : parsers,  import/export for wxLayoutList           *
  *                                                                  *
- * (C) 1998,1999 by Karsten Ballüder ([email protected])            *
+ * (C) 1998,1999 by Karsten Ballüder ([email protected])            *
  *                                                                  *
  * $Id$
  *******************************************************************/
diff --git a/src/gui/wxlwindow.cpp b/src/gui/wxlwindow.cpp
index 3d23c80a..de9535f0 100644
--- a/src/gui/wxlwindow.cpp
+++ b/src/gui/wxlwindow.cpp
@@ -1,7 +1,7 @@
 /*-*- c++ -*-********************************************************
  * wxlwindow.cpp : a scrolled Window for displaying/entering rich text*
  *                                                                  *
- * (C) 1998-2000 by Karsten Ballüder ([email protected])            *
+ * (C) 1998-2000 by Karsten Ballüder ([email protected])            *
  *                                                                  *
  * $Id$
  *******************************************************************/
@@ -432,7 +432,7 @@ wxLayoutWindow::OnMouse(int eventId, wxMouseEvent& event)
          if ( m_Selecting )
          {
             // end selection at the cursor position corresponding to the
-            // current mouse position, but don´t move cursor there.
+            // current mouse position, but don't move cursor there.
             m_llist->EndSelection(cursorPos,m_ClickPosition);
             m_Selecting = false;
             // copy selected text to primary selection without
diff --git a/src/icons/Micon.jpg b/src/icons/Micon.jpg
index 3dc11e97..df02fee7 100644
Binary files a/src/icons/Micon.jpg and b/src/icons/Micon.jpg differ
diff --git a/src/icons/Msplash.xcf b/src/icons/Msplash.xcf
index 1481e305..26aabc01 100644
Binary files a/src/icons/Msplash.xcf and b/src/icons/Msplash.xcf differ
diff --git a/src/icons/m.jpg b/src/icons/m.jpg
index 90ec2e4d..8f66c410 100644
Binary files a/src/icons/m.jpg and b/src/icons/m.jpg differ
diff --git a/src/icons/mahogany.png b/src/icons/mahogany.png
index eff60a49..a9d37ba8 100644
Binary files a/src/icons/mahogany.png and b/src/icons/mahogany.png differ
diff --git a/src/icons/migrate.png b/src/icons/migrate.png
index 46d17d3e..5b0c9f22 100644
Binary files a/src/icons/migrate.png and b/src/icons/migrate.png differ
diff --git a/src/mail/ASMailFolder.cpp b/src/mail/ASMailFolder.cpp
index 163b241c..92ee2f19 100644
--- a/src/mail/ASMailFolder.cpp
+++ b/src/mail/ASMailFolder.cpp
@@ -1,7 +1,7 @@
 /*-*- c++ -*-********************************************************
  * ASMailFolder class: asynchronous handling of mail folders        *
  *                                                                  *
- * (C) 1999-2000 by Karsten Ballüder ([email protected])            *
+ * (C) 1999-2000 by Karsten Ballüder ([email protected])            *
  *                                                                  *
  * $Id$
  *******************************************************************/
diff --git a/src/mail/HeaderInfoImpl.cpp b/src/mail/HeaderInfoImpl.cpp
index f204137a..745c4e13 100644
--- a/src/mail/HeaderInfoImpl.cpp
+++ b/src/mail/HeaderInfoImpl.cpp
@@ -3,7 +3,7 @@
 // File name:   mail/HeaderInfoImpl.cpp - implements HeaderInfo(List) classes
 // Purpose:     implements HI in the simplest way: just store all data in
 //              memory
-// Author:      Vadim Zeitlin, Karsten Ballüder
+// Author:      Vadim Zeitlin, Karsten Ballüder
 // Modified by:
 // Created:     1997
 // CVS-ID:      $Id$
diff --git a/src/mail/MailFolder.cpp b/src/mail/MailFolder.cpp
index 4a597b6d..5e0f3f3f 100644
--- a/src/mail/MailFolder.cpp
+++ b/src/mail/MailFolder.cpp
@@ -3,11 +3,11 @@
 // File name:   mail/MailFolder.cpp: generic MailFolder methods which don't
 //              use cclient (i.e. don't really work with mail folders)
 // Purpose:     handling of mail folders with c-client lib
-// Author:      Karsten Ballüder, Vadim Zeitlin
+// Author:      Karsten Ballüder, Vadim Zeitlin
 // Modified by:
 // Created:     1997
 // CVS-ID:      $Id$
-// Copyright:   (C) 1997-2000 by Karsten Ballüder ([email protected])
+// Copyright:   (C) 1997-2000 by Karsten Ballüder ([email protected])
 // Licence:     M license
 ///////////////////////////////////////////////////////////////////////////////
 
diff --git a/src/mail/MailFolderCC.cpp b/src/mail/MailFolderCC.cpp
index 676a7a35..2a883e89 100644
--- a/src/mail/MailFolderCC.cpp
+++ b/src/mail/MailFolderCC.cpp
@@ -2,11 +2,11 @@
 // Project:     M - cross platform e-mail GUI client
 // File name:   mail/MailFolderCC.cpp: implements MailFolderCC class
 // Purpose:     handling of mail folders with c-client lib
-// Author:      Karsten Ballüder
+// Author:      Karsten Ballüder
 // Modified by: Vadim Zeitlin at 24.01.01: complete rewrite of update logic
 // Created:     1997
 // CVS-ID:      $Id$
-// Copyright:   (c) 1997-2000 Karsten Ballüder ([email protected])
+// Copyright:   (c) 1997-2000 Karsten Ballüder ([email protected])
 //              (c) 2000-2004 Vadim Zeitlin
 // Licence:     M license
 ///////////////////////////////////////////////////////////////////////////////
diff --git a/src/mail/MailFolderCmn.cpp b/src/mail/MailFolderCmn.cpp
index c8a78013..f70c90a9 100644
--- a/src/mail/MailFolderCmn.cpp
+++ b/src/mail/MailFolderCmn.cpp
@@ -5,7 +5,7 @@
 // Purpose:     functions common to all MailFolder implementations, in
 //              particular handling of folder closing (including keep alive
 //              logic) and the new mail processing (filtering, collecting, ...)
-// Author:      Karsten Ballüder
+// Author:      Karsten Ballüder
 // Modified by:
 // Created:     02.04.01 (extracted from mail/MailFolder.cpp)
 // CVS-ID:      $Id$
diff --git a/src/mail/Message.cpp b/src/mail/Message.cpp
index 7d68290a..c833b053 100644
--- a/src/mail/Message.cpp
+++ b/src/mail/Message.cpp
@@ -3,7 +3,7 @@
 // File name:   mail/Message.cpp: implements some static Message methods
 // Purpose:     Message is an ABC but it provides some utility functions which
 //              we implement here, the rest is in MessageCC
-// Author:      Karsten Ballüder
+// Author:      Karsten Ballüder
 // Modified by:
 // Created:     1998
 // CVS-ID:      $Id$
diff --git a/src/mail/MessageCC.cpp b/src/mail/MessageCC.cpp
index 9cf67a28..6e9ecc62 100644
--- a/src/mail/MessageCC.cpp
+++ b/src/mail/MessageCC.cpp
@@ -2,7 +2,7 @@
 // Project:     M - cross platform e-mail GUI client
 // File name:   mail/MessageCC.cpp - implements MessageCC class
 // Purpose:     implementation of a message structure using cclient API
-// Author:      Karsten Ballüder ([email protected])
+// Author:      Karsten Ballüder ([email protected])
 // Modified by:
 // Created:     1998
 // CVS-ID:      $Id$
diff --git a/src/mail/SendMessageCC.cpp b/src/mail/SendMessageCC.cpp
index 21ad69fd..47adcdd4 100644
--- a/src/mail/SendMessageCC.cpp
+++ b/src/mail/SendMessageCC.cpp
@@ -2,7 +2,7 @@
 // Project:     M - cross platform e-mail GUI client
 // File name:   mail/SendMessageCC.cpp: implementation of SendMessageCC
 // Purpose:     sending/posting of mail messages with c-client lib
-// Author:      Karsten Ballüder
+// Author:      Karsten Ballüder
 // Modified by:
 // Created:     1998
 // CVS-ID:      $Id$
diff --git a/src/modules/Calendar.cpp b/src/modules/Calendar.cpp
index 8da2bbb0..d1b7c81e 100644
--- a/src/modules/Calendar.cpp
+++ b/src/modules/Calendar.cpp
@@ -1,7 +1,7 @@
 /*-*- c++ -*-********************************************************
  * Calendar - a Calendar module for Mahogany                        *
  *                                                                  *
- * (C) 2000 by Karsten Ballüder ([email protected])                 *
+ * (C) 2000 by Karsten Ballüder ([email protected])                 *
  *                                                                  *
  * $Id$
  *******************************************************************/
@@ -1082,7 +1082,7 @@ MMODULE_BEGIN_IMPLEMENT(CalendarModule,
                         "1.00")
    MMODULE_PROP("description",
                 _("This module provides a calendar and scheduling plugin."))
-   MMODULE_PROP("author", "Karsten Ballüder <[email protected]>")
+   MMODULE_PROP("author", "Karsten Ballüder <[email protected]>")
 MMODULE_END_IMPLEMENT(CalendarModule)
 
 
diff --git a/src/modules/Filters.cpp b/src/modules/Filters.cpp
index dc19adb2..2e0ec850 100644
--- a/src/modules/Filters.cpp
+++ b/src/modules/Filters.cpp
@@ -1,7 +1,7 @@
 /*-*- c++ -*-********************************************************
  * Filters - Filtering code for Mahogany                            *
  *                                                                  *
- * (C) 1999-2000 by Karsten Ballüder ([email protected])            *
+ * (C) 1999-2000 by Karsten Ballüder ([email protected])            *
  *                                                                  *
  * $Id$
  *
diff --git a/src/modules/LayoutEditor.cpp b/src/modules/LayoutEditor.cpp
index d231ecf1..aabbda81 100644
--- a/src/modules/LayoutEditor.cpp
+++ b/src/modules/LayoutEditor.cpp
@@ -5,7 +5,7 @@
 //              using bits and pieces of the original Karsten's code but
 //              repackaged in a modular way and separated from the rest of
 //              wxComposeView logic
-// Author:      Vadim Zeitlin (based on code by Karsten Ballüder)
+// Author:      Vadim Zeitlin (based on code by Karsten Ballüder)
 // Modified by:
 // Created:     13.03.02
 // CVS-ID:      $Id$
diff --git a/src/modules/LayoutViewer.cpp b/src/modules/LayoutViewer.cpp
index eb1ae4d8..7b19f165 100644
--- a/src/modules/LayoutViewer.cpp
+++ b/src/modules/LayoutViewer.cpp
@@ -5,7 +5,7 @@
 //              using bits and pieces of the original Karsten's code but
 //              repackaged in a modular way and separated from the rest of
 //              defunct wxMessageView
-// Author:      Vadim Zeitlin (based on code by Karsten Ballüder)
+// Author:      Vadim Zeitlin (based on code by Karsten Ballüder)
 // Modified by:
 // Created:     24.07.01
 // CVS-ID:      $Id$
diff --git a/src/modules/Mdummy.cpp b/src/modules/Mdummy.cpp
index 5763aee6..0e229d5d 100644
--- a/src/modules/Mdummy.cpp
+++ b/src/modules/Mdummy.cpp
@@ -1,7 +1,7 @@
 /*-*- c++ -*-********************************************************
  * Mdummy - a dummy module for Mahogany                             *
  *                                                                  *
- * (C) 1999-2000 by Karsten Ballüder ([email protected])            *
+ * (C) 1999-2000 by Karsten Ballüder ([email protected])            *
  *                                                                  *
  * $Id$
  *******************************************************************/
diff --git a/src/modules/PalmOS.cpp b/src/modules/PalmOS.cpp
index 353eb176..3da45d1a 100644
--- a/src/modules/PalmOS.cpp
+++ b/src/modules/PalmOS.cpp
@@ -1,7 +1,7 @@
 /*-*- c++ -*-********************************************************
  * PalmOS -  PalmOS connectivity module for Mahogany                *
  *                                                                  *
- * (C) 1999-2000 by Karsten Ballüder ([email protected])           *
+ * (C) 1999-2000 by Karsten Ballüder ([email protected])           *
  *                  Daniel Seifert ([email protected])               *
  *                                                                  *
  * $Id$              *
@@ -618,7 +618,7 @@ MMODULE_BEGIN_IMPLEMENT(PalmOSModule,
                         "1.00")
    MMODULE_PROP("description",
                 _("This module provides PalmOS connectivity"))
-   MMODULE_PROP("author", "Karsten Ballüder <[email protected]>")
+   MMODULE_PROP("author", "Karsten Ballüder <[email protected]>")
 MMODULE_END_IMPLEMENT(PalmOSModule)
 
 
diff --git a/src/util/ssl.cpp b/src/util/ssl.cpp
index c2a3f2b8..174d6120 100644
--- a/src/util/ssl.cpp
+++ b/src/util/ssl.cpp
@@ -2,11 +2,11 @@
 // Project:     M - cross platform e-mail GUI client
 // File name:   util/ssl.cpp
 // Purpose:     SSL support functions
-// Author:      Karsten Ballüder
+// Author:      Karsten Ballüder
 // Modified by:
 // Created:     24.01.01 (extracted from MailFolderCC.cpp)
 // CVS-ID:      $Id$
-// Copyright:   (C) 1997-2000 by Karsten Ballüder ([email protected])
+// Copyright:   (C) 1997-2000 by Karsten Ballüder ([email protected])
 // Licence:     M license
 ///////////////////////////////////////////////////////////////////////////////
 
diff --git a/src/util/strutil.cpp b/src/util/strutil.cpp
index d017c823..45fc4cc0 100644
--- a/src/util/strutil.cpp
+++ b/src/util/strutil.cpp
@@ -1,7 +1,7 @@
 /*-*- c++ -*-********************************************************
  * strutil.cc : utility functions for string handling               *
  *                                                                  *
- * (C) 1998,1999 by Karsten Ballüder ([email protected])         *
+ * (C) 1998,1999 by Karsten Ballüder ([email protected])         *
  *                                                                  *
  * $Id$
  *                                                                  *
diff --git a/src/util/sysutil.cpp b/src/util/sysutil.cpp
index 5e5a29d2..612ced97 100644
--- a/src/util/sysutil.cpp
+++ b/src/util/sysutil.cpp
@@ -1,7 +1,7 @@
 /*-*- c++ -*-********************************************************
  * sysutil.cpp : utility functions for various OS functionality     *
  *                                                                  *
- * (C) 1999 by Karsten Ballüder ([email protected])                 *
+ * (C) 1999 by Karsten Ballüder ([email protected])                 *
  *                                                                  *
  * $Id$
  *                                                                  *

commit f8a25b17f06ae0b3145946a61eeddc9c184bdd26
Author: Vadim Zeitlin <[email protected]>
Date:   Wed Jun 4 19:07:13 2025 +0200

    Implement waiting for network after resume under Linux too
    
    Just use a TCP socket to try to connect to 1.1.1.1 with timeout.

diff --git a/src/gui/wxMainFrame.cpp b/src/gui/wxMainFrame.cpp
index d55f1434..7f8e1c77 100644
--- a/src/gui/wxMainFrame.cpp
+++ b/src/gui/wxMainFrame.cpp
@@ -109,24 +109,17 @@ extern int UpdateFoldersSubtree(const MFolder& folder, wxWindow *parent);
 
 #ifdef OS_WIN
 
-// For now this is only defined under Windows but maybe we can find some way to
-// do it elsewhere too later (but this would only be useful if/when wx
-// implements resume events generation for the other platforms).
-#define CAN_CHECK_NETWORK_STATE
-
 #include <wx/dynlib.h>
 
-// Check if we have network connection at all. This is a bit vague but seems to
-// do roughly what we need here, i.e. if this function returns false we have
-// really no chance of connecting to the remote servers while it might work if
-// it returns true.
-static bool IsNetworkAvailable()
+// Check until we think we have a working network, but not for longer than the
+// specified timeout.
+static bool WaitForNetwork(int timeoutInSec)
 {
    static wxDynamicLibrary s_dllWinINet("wininet", wxDL_QUIET);
    if ( !s_dllWinINet.IsLoaded() )
    {
-      // If we can't check for it, it's better to assume that it is available
-      // immediately than never returning true at all.
+      // If we can't check for it, we have no choice but to assume that it is
+      // available immediately.
       return true;
    }
 
@@ -139,11 +132,106 @@ static bool IsNetworkAvailable()
       return true;
    }
 
-   DWORD flags;
-   return (*s_pfnInternetGetConnectedState)(&flags, 0) == TRUE;
+   for ( int n = 0; n < timeoutInSec/2; n++ )
+   {
+      DWORD flags;
+      if ( (*s_pfnInternetGetConnectedState)(&flags, 0) == TRUE )
+      {
+         wxLogDebug("Network is available.");
+         return true;
+      }
+
+      wxLogDebug("Network is still not available, sleeping.");
+      wxMilliSleep(500);
+   }
+
+   return false;
 }
 
-#endif // OS_WIN
+#elif defined(OS_LINUX)
+
+// Use Linux-specific connection timeout support to quickly check if we can
+// connect to some well-known server.
+
+#include <stdint.h>
+#include <unistd.h>
+
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <netinet/tcp.h>
+
+static bool WaitForNetwork(int timeoutInSec)
+{
+   const int sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
+   if ( sock == -1 )
+   {
+      // This is really unexpected.
+      return false;
+   }
+
+   struct SocketCloser
+   {
+      explicit SocketCloser(int sock) : m_sock(sock) {}
+      ~SocketCloser() { close(m_sock); }
+
+      const int m_sock;
+   } closer{sock};
+
+   // Timeout must be expressed in ms.
+   const uint32_t timeout = 1000*timeoutInSec;
+   setsockopt(sock, IPPROTO_TCP, TCP_USER_TIMEOUT, &timeout, sizeof(timeout));
+
+   // Hardcode 1.1.1.1 as a well-known always online HTTP server.
+   sockaddr_in address;
+   address.sin_family = AF_INET;
+   address.sin_addr.s_addr = 0x01010101;
+   address.sin_port = htons(80);
+
+   const auto start = wxDateTime::UNow();
+   wxLogDebug("Start trying to connect to 1.1.1.1 at %s...",
+              start.Format("%H:%M:%S.%l"));
+
+   // Connect may fail immediately if the network is not up yet, so wait for
+   // half of the timeout before giving up on it.
+   const auto end = start + wxTimeSpan::Seconds(timeoutInSec/2);
+   for ( ;; )
+   {
+      if ( connect(sock, (sockaddr*)&address, sizeof(address)) == 0 )
+         break;
+
+      const auto now = wxDateTime::UNow();
+      if ( now > end )
+      {
+         // We waited long enough, give up.
+         wxLogDebug("Connection failed at %s: %s",
+                    now.Format("%H:%M:%S.%l"),
+                    wxSysErrorMsgStr());
+         return false;
+      }
+   }
+
+   if ( shutdown(sock, SHUT_RDWR) != 0 )
+   {
+      wxLogDebug("Connection succeeded but shutdown failed: %s",
+                 wxSysErrorMsgStr());
+      return false;
+   }
+
+   wxLogDebug("Connection and shutdown succeeded, network seems to be up at %s.",
+              wxDateTime::UNow().Format("%H:%M:%S.%l"));
+
+   return true;
+}
+
+#else // other/unsupported platforms
+
+static bool WaitForNetwork(int /* timeoutInSec */)
+{
+   // We don't know how to do this here, so just assume it's available.
+   return true;
+}
+
+#endif // platforms
 
 // ----------------------------------------------------------------------------
 // private classes
@@ -1318,37 +1406,25 @@ void wxMainFrame::OnPowerResume(wxPowerEvent& WXUNUSED(event))
                         numFolders),
                numFolders);
 
-#ifdef CAN_CHECK_NETWORK_STATE
    bool checkedNetwork = false;
-#endif // CAN_CHECK_NETWORK_STATE
    for ( MailFolders::iterator i = foldersToResume.begin();
          i != foldersToResume.end();
          ++i )
    {
       MailFolder* const mf = *i;
 
-#ifdef CAN_CHECK_NETWORK_STATE
       if ( !checkedNetwork && mf->NeedsNetwork() )
       {
          // We can get a resume event before the system got reconnected so stay
          // here for a few seconds to give it a chance to do it as otherwise
          // reopening the remote folders after resume would always fail.
-         const long resumeTimeout = READ_APPCONFIG(MP_WAIT_NETWORK_AFTER_RESUME);
-         for ( int n = 0; n < resumeTimeout/2; n++ )
+         if ( !WaitForNetwork(READ_APPCONFIG(MP_WAIT_NETWORK_AFTER_RESUME)) )
          {
-            if ( IsNetworkAvailable() )
-            {
-               wxLogDebug("Network is available.");
-               break;
-            }
-
-            wxLogDebug("Network is still not available, sleeping.");
-            wxMilliSleep(500);
+            wxLogStatus(_("Network seems to be unavailable after resume."));
          }
 
          checkedNetwork = true;
       }
-#endif // CAN_CHECK_NETWORK_STATE
 
       if ( !mf->Resume() )
       {

commit 2137cd715ed4e7c747cb25f30c12df42fc24a984
Author: Vadim Zeitlin <[email protected]>
Date:   Thu May 22 19:10:43 2025 +0200

    Improve error message for status update logic error
    
    Provide more information when it happens (as it currently does
    sometimes).

diff --git a/src/mail/MailFolderCmn.cpp b/src/mail/MailFolderCmn.cpp
index cc7005a6..c8a78013 100644
--- a/src/mail/MailFolderCmn.cpp
+++ b/src/mail/MailFolderCmn.cpp
@@ -2308,7 +2308,13 @@ MailFolderCmn::SendMsgStatusChangeEvent()
                }
                else
                {
-                  FAIL_MSG( "error in msg status change logic" );
+                  FAIL_MSG(wxString::Format(
+                     "Error in status update logic in %s: %s %s but there "
+                     "are no such messages in the old status",
+                     GetName(),
+                     name,
+                     isDeleted ? "message deleted" : "message lost status bit"
+                  ));
                }
             }
          };

commit 8f0185169fe114c6dda5c74c459f0b9c03609348
Author: Vadim Zeitlin <[email protected]>
Date:   Thu May 22 19:00:47 2025 +0200

    Replace UPDATE_NUM_OF() macro with a lambda function
    
    Make the code easier to read and debug.
    
    Still no real changes.

diff --git a/src/mail/MailFolderCmn.cpp b/src/mail/MailFolderCmn.cpp
index e38d0dde..cc7005a6 100644
--- a/src/mail/MailFolderCmn.cpp
+++ b/src/mail/MailFolderCmn.cpp
@@ -2285,36 +2285,39 @@ MailFolderCmn::SendMsgStatusChangeEvent()
          // (which is discussable at least for flagged and searched flags
          // although, OTOH, why flag a deleted message?)
 
-         #define UPDATE_NUM_OF(what)   \
-            if ( (!isDeleted && msgStatusNew.what) && \
-                 (wasDeleted || !msgStatusOld.what) ) \
-            { \
-               wxLogTrace(M_TRACE_MFSTATUS, "%s: " #what "++ (now %lu)", \
-                          GetName().c_str(), status.what + 1); \
-               status.what++; \
-            } \
-            else if ( (!wasDeleted && msgStatusOld.what) && \
-                      (isDeleted || !msgStatusNew.what) ) \
-            { \
-               if ( status.what > 0 ) \
-               { \
-                  wxLogTrace(M_TRACE_MFSTATUS, "%s: " #what "-- (now %lu)", \
-                             GetName().c_str(), status.what - 1); \
-                  status.what--; \
-               } \
-               else \
-               { \
-                  FAIL_MSG( _T("error in msg status change logic") ); \
-               } \
+         const auto updateNumOf = [&](unsigned long MailFolderStatus::*what,
+                                      const char *name)
+         {
+            if ( (!isDeleted && msgStatusNew.*what) &&
+                 (wasDeleted || !(msgStatusOld.*what)) )
+            {
+               (status.*what)++;
+
+               wxLogTrace(M_TRACE_MFSTATUS, "%s: %s++ (now %lu)",
+                          GetName(), name, status.*what);
             }
+            else if ( (!wasDeleted && msgStatusOld.*what) &&
+                      (isDeleted || !(msgStatusNew.*what)) )
+            {
+               if ( status.*what > 0 )
+               {
+                  (status.*what)--;
 
-         UPDATE_NUM_OF(recent);
-         UPDATE_NUM_OF(unread);
-         UPDATE_NUM_OF(newmsgs);
-         UPDATE_NUM_OF(flagged);
-         UPDATE_NUM_OF(searched);
+                  wxLogTrace(M_TRACE_MFSTATUS, "%s: %s-- (now %lu)",
+                             GetName(), name, status.*what);
+               }
+               else
+               {
+                  FAIL_MSG( "error in msg status change logic" );
+               }
+            }
+         };
 
-         #undef UPDATE_NUM_OF
+         updateNumOf(&MailFolderStatus::recent, "recent");
+         updateNumOf(&MailFolderStatus::unread, "unread");
+         updateNumOf(&MailFolderStatus::newmsgs, "newmsgs");
+         updateNumOf(&MailFolderStatus::flagged, "flagged");
+         updateNumOf(&MailFolderStatus::searched, "searched");
       }
 
       mfStatusCache->UpdateStatus(GetName(), status);

commit eb6a9d4c79047bd3d8b9ca891914d3ece34cac2e
Author: Vadim Zeitlin <[email protected]>
Date:   Thu May 22 18:59:51 2025 +0200

    Don't define separate MsgStatus, just use MailFolderStatus
    
    These structs were pretty similar and we can reuse the latter instead of
    defining the former just to use it as return value of AnalyzeStatus().

diff --git a/src/mail/MailFolderCmn.cpp b/src/mail/MailFolderCmn.cpp
index e025d101..e38d0dde 100644
--- a/src/mail/MailFolderCmn.cpp
+++ b/src/mail/MailFolderCmn.cpp
@@ -2211,22 +2211,13 @@ bool MailFolderCmn::CountAllMessages(MailFolderStatus *status) const
 // MailFolderCmn message status
 // ----------------------------------------------------------------------------
 
-// msg status info
-//
-// NB: name MessageStatus is already taken by MailFolder
-struct MsgStatus
-{
-   bool recent;
-   bool unread;
-   bool newmsgs;
-   bool flagged;
-   bool searched;
-};
-
 // is this message recent/new/unread/...?
-static MsgStatus AnalyzeStatus(int stat)
+//
+// The returned MailFolderStatus total field is unused and the other ones have
+// values of 0 or 1 only.
+static MailFolderStatus AnalyzeStatus(int stat)
 {
-   MsgStatus status;
+   MailFolderStatus status;
 
    // deal with recent and new (== recent and !seen)
    status.recent = (stat & MailFolder::MSG_STAT_RECENT) != 0;
@@ -2287,8 +2278,8 @@ MailFolderCmn::SendMsgStatusChangeEvent()
             n++;
          }
 
-         MsgStatus msgStatusOld = AnalyzeStatus(statusOld),
-                   msgStatusNew = AnalyzeStatus(statusNew);
+         const auto msgStatusOld = AnalyzeStatus(statusOld),
+                    msgStatusNew = AnalyzeStatus(statusNew);
 
          // we consider that a message has some flag only if it is not deleted
          // (which is discussable at least for flagged and searched flags

commit bab7c12b3f1f411d4e26db0ee4f5346d05c02256
Author: Vadim Zeitlin <[email protected]>
Date:   Thu May 22 18:59:07 2025 +0200

    Simplify MailFolderStatus fields initialization
    
    No real changes.

diff --git a/include/MFStatus.h b/include/MFStatus.h
index 585265f6..c199af3a 100644
--- a/include/MFStatus.h
+++ b/include/MFStatus.h
@@ -26,18 +26,13 @@ class MailFolder;
 
 struct MailFolderStatus
 {
-   MailFolderStatus() { Init(); }
-
-   void Init()
+   explicit MailFolderStatus(unsigned long total = UID_ILLEGAL) : total(total)
    {
-      total = UID_ILLEGAL;
-      newmsgs =
-      recent =
-      unread =
-      flagged =
-      searched = 0;
    }
 
+   MailFolderStatus(const MailFolderStatus& status) = default;
+   MailFolderStatus& operator=(const MailFolderStatus& status) = default;
+
    bool IsValid() const { return total != UID_ILLEGAL; }
 
    // do we have any "interesting" messages at all?
@@ -58,12 +53,12 @@ struct MailFolderStatus
    // note that unread is the total number of unread messages, i.e. it
    // includes some which are just unseen and the others which are new (i.e.
    // unseen and recent)
-   unsigned long total,
-                 newmsgs,
-                 recent,
-                 unread,
-                 flagged,
-                 searched;
+   unsigned long total = UID_ILLEGAL,
+                 newmsgs = 0,
+                 recent = 0,
+                 unread = 0,
+                 flagged = 0,
+                 searched = 0;
 };
 
 /**
diff --git a/src/mail/MFCache.cpp b/src/mail/MFCache.cpp
index 1dc0a256..57034ccb 100644
--- a/src/mail/MFCache.cpp
+++ b/src/mail/MFCache.cpp
@@ -266,8 +266,6 @@ bool MfStatusCache::DoLoad(const wxTextFile& file, int version)
    str.Alloc(1024);     // avoid extra memory allocations
    name.Alloc(1024);
 
-   MailFolderStatus status;
-
    size_t count = file.GetLineCount();
    for ( size_t n = 1; n < count; n++ )
    {
@@ -298,7 +296,7 @@ bool MfStatusCache::DoLoad(const wxTextFile& file, int version)
       name.Replace(CACHE_DELIMITER CACHE_DELIMITER, CACHE_DELIMITER);
 
       // get the rest
-      status.Init();
+      MailFolderStatus status;
       switch ( fmt )
       {
          case CacheFile_1_0:
diff --git a/src/mail/MailFolderCC.cpp b/src/mail/MailFolderCC.cpp
index 3e4185ef..676a7a35 100644
--- a/src/mail/MailFolderCC.cpp
+++ b/src/mail/MailFolderCC.cpp
@@ -3316,9 +3316,8 @@ bool MailFolderCC::DoCountMessages(MailFolderStatus *status) const
    wxLogTrace(TRACE_MF_CALLS, _T("MailFolderCC(%s)::DoCountMessages()"),
               GetName().c_str());
 
-   status->Init();
+   *status = MailFolderStatus(m_MailStream->nmsgs);
 
-   status->total = m_MailStream->nmsgs;
    status->recent = m_MailStream->recent;
 
    status->unread = CountUnseenMessages();
@@ -3327,11 +3326,7 @@ bool MailFolderCC::DoCountMessages(MailFolderStatus *status) const
    {
       status->newmsgs = CountNewMessages();
    }
-   else // no recent or no unseen
-   {
-      // hence no new
-      status->newmsgs = 0;
-   }
+   // else: no recent or no unseen, hence no new, leave it at 0
 
    // then get the number of flagged messages
    SEARCHPGM *pgm = mail_newsearchpgm();
diff --git a/src/mail/VFolder.cpp b/src/mail/VFolder.cpp
index f3104527..a5b6c0dd 100644
--- a/src/mail/VFolder.cpp
+++ b/src/mail/VFolder.cpp
@@ -504,8 +504,7 @@ unsigned long MailFolderVirt::CountDeletedMessages() const
 
 bool MailFolderVirt::DoCountMessages(MailFolderStatus *status) const
 {
-   status->Init();
-   status->total = GetMsgCount();
+   *status = MailFolderStatus(GetMsgCount());
 
    MsgCookie cookie;
    for ( Msg *msg = GetFirstMsg(cookie); msg; msg = GetNextMsg(cookie) )

commit a4886096921d34d3a93463559717c08eda216c11
Author: Vadim Zeitlin <[email protected]>
Date:   Fri May 16 14:34:31 2025 +0200

    Fix OS_LINUX definition
    
    Test for "__linux__", which is defined under Linux, and not "linux"
    which is not (at least any more).
    
    No real changes yet, as OS_LINUX hasn't been really used anywhere.

diff --git a/include/Mconfig.h b/include/Mconfig.h
index c8ea1380..1b82a0ab 100644
--- a/include/Mconfig.h
+++ b/include/Mconfig.h
@@ -50,7 +50,7 @@
 #  define  OS_UNIX    1
 #  define  OS_TYPE    "unix"
 #  undef   OS_SUBTYPE
-#  ifdef linux
+#  ifdef __linux__
 #     define   OS_LINUX
 #     define   OS_SUBTYPE   "linux-gnu"
 #  endif

commit fa78ddb94c445ce090b224c8cb6e64a5bfb01ab8
Author: Vadim Zeitlin <[email protected]>
Date:   Wed May 14 16:53:26 2025 +0200

    Make code initializing SendMessageCC headers safer
    
    Don't track the actual headers vector size in a separate variable, this
    was error-prone and did result in bugs if the value of any header was
    invalid because the final size wasn't set correctly then.
    
    Instead, just keep the size correct at all times by appending the
    elements to the vector instead of pre-resizing it first and then
    resizing it again at the end.

diff --git a/src/mail/SendMessageCC.cpp b/src/mail/SendMessageCC.cpp
index 4835759e..21ad69fd 100644
--- a/src/mail/SendMessageCC.cpp
+++ b/src/mail/SendMessageCC.cpp
@@ -1292,26 +1292,21 @@ SendMessageCC::Build(bool forStorage)
 
    // +4: 1 for X-Mailer, 1 for X-Face, 1 for reply to and 1 for the
    // last NULL entry
-   size_t n = m_extraHeaders.size() + 4;
-   m_headers.resize(n);
-
-   // the current header position in m_headers
-   int h = 0;
+   m_headers.reserve(m_extraHeaders.size() + 4);
+   m_headers.clear();
 
    bool replyToSet = false,
         xmailerSet = false;
 
    // add the additional header lines added by the user
-   for ( MessageHeaders::iterator i = m_extraHeaders.begin();
-         i != m_extraHeaders.end();
-         ++i )
+   for ( const auto& header : m_extraHeaders )
    {
-      const HeaderName name(i->m_name);
+      const HeaderName name(header.m_name);
       const wxString headerErr = name.IsValid();
       if ( !headerErr.empty() )
       {
          wxLogError(_("Custom header name \"%s\" is invalid: %s."),
-                    i->m_name, headerErr);
+                    header.m_name, headerErr);
          return false;
       }
 
@@ -1320,15 +1315,15 @@ SendMessageCC::Build(bool forStorage)
          // We shouldn't be getting such headers at all here, but if we somehow
          // do, ignore them.
          wxLogDebug("Ignoring the value of not user-settable header \"%s\"",
-                    i->m_name);
+                    header.m_name);
          continue;
       }
 
-      const std::string value(MIME::EncodeHeader(i->m_value));
+      const std::string value(MIME::EncodeHeader(header.m_value));
       if ( value.empty() )
       {
          wxLogError(_("Invalid value \"%s\" for the custom header \"%s\""),
-                    i->m_value.c_str(), i->m_name.c_str());
+                    header.m_value.c_str(), header.m_name.c_str());
 
          return false;
       }
@@ -1339,10 +1334,7 @@ SendMessageCC::Build(bool forStorage)
          xmailerSet = true;
 
 
-      m_headers[h].m_name = i->m_name;
-      m_headers[h].m_value = value;
-
-      h++;
+      m_headers.emplace_back(header.m_name, value);
    }
 
    // don't add any extra headers when cloning an existing message
@@ -1352,8 +1344,6 @@ SendMessageCC::Build(bool forStorage)
       // allow it -- why not?)
       if ( !xmailerSet )
       {
-         m_headers[h].m_name = "X-Mailer";
-
          // NB: do *not* translate these strings, this doesn't make much sense
          //     (the user doesn't usually see them) and, worse, we shouldn't
          //     include 8bit chars (which may - and do - occur in translations)
@@ -1365,7 +1355,7 @@ SendMessageCC::Build(bool forStorage)
 #else // Windows
          version << ", running under " << wxGetOsDescription();
 #endif // Unix/Windows
-         m_headers[h++].m_value = version;
+         m_headers.emplace_back("X-Mailer", version);
       }
 
       // set Reply-To if it hadn't been set by the user as a custom header
@@ -1374,10 +1364,7 @@ SendMessageCC::Build(bool forStorage)
          ASSERT_MSG( !HasHeaderEntry("Reply-To"), "logic error" );
 
          if ( !m_ReplyTo.empty() )
-         {
-            m_headers[h].m_name = "Reply-To";
-            m_headers[h++].m_value = m_ReplyTo;
-         }
+            m_headers.emplace_back("Reply-To", m_ReplyTo);
       }
 
 #ifdef HAVE_XFACES
@@ -1387,16 +1374,13 @@ SendMessageCC::Build(bool forStorage)
          XFace xface;
          if ( xface.CreateFromFile(m_XFaceFile) )
          {
-            m_headers[h].m_name = "X-Face";
-            m_headers[h++].m_value = xface.GetHeaderLine();
+            m_headers.emplace_back("X-Face", xface.GetHeaderLine());
          }
          //else: couldn't read X-Face from file (complain?)
       }
 #endif // HAVE_XFACES
    }
 
-   m_headers.resize(h);
-
 
    // after fully constructing everything check if we need to add a
    // cryptographic signature

commit 121c0607024781524b50de7e001fde75e289b78c
Author: Vadim Zeitlin <[email protected]>
Date:   Wed May 14 16:49:19 2025 +0200

    Don't save "Fcc:" header in draft messages if it's empty
    
    This prevents the message from being built later.

diff --git a/src/gui/wxComposeView.cpp b/src/gui/wxComposeView.cpp
index 736bd151..c33a08a1 100644
--- a/src/gui/wxComposeView.cpp
+++ b/src/gui/wxComposeView.cpp
@@ -5760,7 +5760,9 @@ SendMessage *wxComposeView::BuildDraftMessage(int flags) const
    msg->AddHeaderEntry(HEADER_GEOMETRY, value);
 
    // also save the Fcc header contents because it's not a "real" header
-   msg->AddHeaderEntry(_T("FCC"), GetRecipients(Recipient_Fcc));
+   const String& fcc = GetRecipients(Recipient_Fcc);
+   if ( !fcc.empty() )
+      msg->AddHeaderEntry(_T("FCC"), fcc);
 
    return msg.release();
 }

commit 0937095bd52a5c28b1fda54045e5d479dce54243
Author: Vadim Zeitlin <[email protected]>
Date:   Wed May 14 16:27:53 2025 +0200

    Replace C arrays used for headers with a vector
    
    No real changes, just simplify the code and make it safer by avoiding
    doing manual memory management.

diff --git a/include/SendMessageCC.h b/include/SendMessageCC.h
index 13149ef6..9b0dfdd0 100644
--- a/include/SendMessageCC.h
+++ b/include/SendMessageCC.h
@@ -29,6 +29,8 @@ class Profile;
 
 struct MessageHeader
 {
+   MessageHeader() = default;
+
    MessageHeader(const String& name, const String& value)
       : m_name(name), m_value(value)
    {
@@ -291,15 +293,12 @@ private:
    //@{
 
    /**
-     m_headerNames and m_headerValues are the "final" arrays of headers, i.e.
-     they are passed to c-client when we send the message while the extra
+     "Final" version of the headers.
+
+     They are passed to c-client when we send the message while the extra
      headers are used to construct them.
     */
-
-   /// names of header lines
-   const char **m_headerNames;
-   /// values of header lines
-   const char **m_headerValues;
+   MessageHeaders m_headers;
 
    /// extra headers to be added before sending
    MessageHeaders m_extraHeaders;
diff --git a/src/mail/SendMessageCC.cpp b/src/mail/SendMessageCC.cpp
index 121914b6..4835759e 100644
--- a/src/mail/SendMessageCC.cpp
+++ b/src/mail/SendMessageCC.cpp
@@ -193,17 +193,12 @@ public:
 
        Ctor will block if another Rfc822OutputRedirector is already in use.
 
-       @param extraHeadersNames NUL-terminated array of names of extra headers
-         to add to the normal output.
-       @param extraHeadersValues NUL-terminated array of values of extra
-         headers, must have the same number of elements as @a extraHeadersNames.
+       @param extraHeaders extra headers to add to the normal output.
        @param flags May include AddBcc flag to include BCC header in output, by
          default it is not included to avoid leaking information about BCC
          recipients.
     */
-   Rfc822OutputRedirector(const char **extraHeadersNames,
-                          const char **extraHeadersValues,
-                          int flags = 0);
+   Rfc822OutputRedirector(const MessageHeaders& extraHeaders, int flags = 0);
 
    /**
        Dtor restores the original c-client output function.
@@ -223,8 +218,7 @@ private:
    static bool ms_outputBcc;
 
    // the extra headers written by FullRfc822Output()
-   static const char **ms_HeaderNames;
-   static const char **ms_HeaderValues;
+   static MessageHeaders ms_Headers;
 
    // and a mutex to protect them
    static MTMutex ms_mutexExtraHeaders;
@@ -367,9 +361,6 @@ SendMessageCC::SendMessageCC(const Profile *profile,
    m_cloneOfExisting = false;
    m_sign = false;
 
-   m_headerNames =
-   m_headerValues = NULL;
-
    m_wasBuilt = false;
 
    m_Envelope = mail_newenvelope();
@@ -696,17 +687,6 @@ SendMessageCC::~SendMessageCC()
    mail_free_envelope(&m_Envelope);
    mail_free_body_part(&m_partTop);
 
-   if(m_headerNames)
-   {
-      for(int j = 0; m_headerNames[j] ; j++)
-      {
-         delete [] (char *)m_headerNames[j];
-         delete [] (char *)m_headerValues[j];
-      }
-      delete [] m_headerNames;
-      delete [] m_headerValues;
-   }
-
    const_cast<Profile *>(m_profile)->DecRef();
 }
 
@@ -935,7 +915,7 @@ SendMessageCC::SetAddresses(const String &to,
 {
    // If Build() has already been called, then it's too late to change
    // anything.
-   ASSERT(m_headerNames == NULL);
+   ASSERT(m_headers.empty());
 
    SetAddressField(&m_Envelope->to, to);
    SetAddressField(&m_Envelope->cc, cc);
@@ -949,7 +929,7 @@ SendMessageCC::SetNewsgroups(const String &groups)
 {
    // If Build() has already been called, then it's too late to change
    // anything.
-   ASSERT(m_headerNames == NULL);
+   ASSERT(m_headers.empty());
 
    // TODO-NEWS: we should support sending and posting the message, doing
    //            it separately if necessary
@@ -1313,10 +1293,9 @@ SendMessageCC::Build(bool forStorage)
    // +4: 1 for X-Mailer, 1 for X-Face, 1 for reply to and 1 for the
    // last NULL entry
    size_t n = m_extraHeaders.size() + 4;
-   m_headerNames = new const char*[n];
-   m_headerValues = new const char*[n];
+   m_headers.resize(n);
 
-   // the current header position in m_headerNames/Values
+   // the current header position in m_headers
    int h = 0;
 
    bool replyToSet = false,
@@ -1360,8 +1339,8 @@ SendMessageCC::Build(bool forStorage)
          xmailerSet = true;
 
 
-      m_headerNames[h] = strutil_strdup(i->m_name.c_str());
-      m_headerValues[h] = strutil_strdup(value.c_str());
+      m_headers[h].m_name = i->m_name;
+      m_headers[h].m_value = value;
 
       h++;
    }
@@ -1373,7 +1352,7 @@ SendMessageCC::Build(bool forStorage)
       // allow it -- why not?)
       if ( !xmailerSet )
       {
-         m_headerNames[h] = strutil_strdup("X-Mailer");
+         m_headers[h].m_name = "X-Mailer";
 
          // NB: do *not* translate these strings, this doesn't make much sense
          //     (the user doesn't usually see them) and, worse, we shouldn't
@@ -1386,7 +1365,7 @@ SendMessageCC::Build(bool forStorage)
 #else // Windows
          version << ", running under " << wxGetOsDescription();
 #endif // Unix/Windows
-         m_headerValues[h++] = strutil_strdup(version.ToAscii());
+         m_headers[h++].m_value = version;
       }
 
       // set Reply-To if it hadn't been set by the user as a custom header
@@ -1396,8 +1375,8 @@ SendMessageCC::Build(bool forStorage)
 
          if ( !m_ReplyTo.empty() )
          {
-            m_headerNames[h] = strutil_strdup("Reply-To");
-            m_headerValues[h++] = strutil_strdup(m_ReplyTo.ToAscii());
+            m_headers[h].m_name = "Reply-To";
+            m_headers[h++].m_value = m_ReplyTo;
          }
       }
 
@@ -1408,16 +1387,15 @@ SendMessageCC::Build(bool forStorage)
          XFace xface;
          if ( xface.CreateFromFile(m_XFaceFile) )
          {
-            m_headerNames[h] = strutil_strdup("X-Face");
-            m_headerValues[h++] = strutil_strdup(xface.GetHeaderLine().ToAscii());
+            m_headers[h].m_name = "X-Face";
+            m_headers[h++].m_value = xface.GetHeaderLine();
          }
          //else: couldn't read X-Face from file (complain?)
       }
 #endif // HAVE_XFACES
    }
 
-   m_headerNames[h] = NULL;
-   m_headerValues[h] = NULL;
+   m_headers.resize(h);
 
 
    // after fully constructing everything check if we need to add a
@@ -2008,7 +1986,7 @@ SendMessageCC::SendNow(String *errGeneral, String *errDetailed)
    bool success;
    if ( stream )
    {
-      Rfc822OutputRedirector redirect(m_headerNames, m_headerValues);
+      Rfc822OutputRedirector redirect(m_headers);
 
       switch ( m_Protocol )
       {
@@ -2089,8 +2067,7 @@ bool SendMessageCC::WriteMessage(soutr_t writer, void *where)
    char headers[16*1024];
 
    // install our output routine temporarily
-   Rfc822OutputRedirector redirect(m_headerNames, m_headerValues,
-                                   Rfc822OutputRedirector::AddBcc);
+   Rfc822OutputRedirector redirect(m_headers, Rfc822OutputRedirector::AddBcc);
 
    return rfc822_output(headers, m_Envelope, GetBody(),
                         writer, where, NIL) != NIL;
@@ -2199,20 +2176,17 @@ static long write_str_output(void *stream, char *string)
 
 bool Rfc822OutputRedirector::ms_outputBcc = false;
 
-const char **Rfc822OutputRedirector::ms_HeaderNames = NULL;
-const char **Rfc822OutputRedirector::ms_HeaderValues = NULL;
+MessageHeaders Rfc822OutputRedirector::ms_Headers;
 
 MTMutex Rfc822OutputRedirector::ms_mutexExtraHeaders;
 
-Rfc822OutputRedirector::Rfc822OutputRedirector(const char **extraHeadersNames,
-                                               const char **extraHeadersValues,
+Rfc822OutputRedirector::Rfc822OutputRedirector(const MessageHeaders& headers,
                                                int flags)
 {
    ms_mutexExtraHeaders.Lock();
 
    ms_outputBcc = (flags & AddBcc) != 0;
-   ms_HeaderNames = extraHeadersNames;
-   ms_HeaderValues = extraHeadersValues;
+   ms_Headers = headers;
 
    m_oldRfc822Output = mail_parameters(NULL, GET_RFC822OUTPUT, NULL);
    (void)mail_parameters(NULL, SET_RFC822OUTPUT, (void *)FullRfc822Output);
@@ -2222,9 +2196,7 @@ Rfc822OutputRedirector::~Rfc822OutputRedirector()
 {
    (void)mail_parameters(NULL, SET_RFC822OUTPUT, m_oldRfc822Output);
 
-   // Avoid leaving dangling pointers.
-   ms_HeaderNames = NULL;
-   ms_HeaderValues = NULL;
+   ms_Headers.clear();
 
    ms_mutexExtraHeaders.Unlock();
 }
@@ -2268,67 +2240,64 @@ long Rfc822OutputRedirector::FullRfc822Output(char *headers,
   }
 
   // and add all other additional custom headers at the end
-  if ( ms_HeaderNames )
+  for ( const auto& header : ms_Headers )
   {
-     for ( size_t n = 0; ms_HeaderNames[n]; n++ )
+     // We should wrap all headers, but this might break something, so wrap
+     // just the one which regularly gets too long to fit the maximum
+     // message line length (998 bytes).
+     constexpr const char* REFERENCES_HEADER = "References";
+
+     if ( header.m_name == REFERENCES_HEADER )
      {
-        // We should wrap all headers, but this might break something, so wrap
-        // just the one which regularly gets too long to fit the maximum
-        // message line length (998 bytes).
-        constexpr const char* REFERENCES_HEADER = "References";
+        // Note that we don't bother null-terminating headers while we're
+        // inside this block, we just do it once at the end. The pointer is
+        // just always positioned at the end of the string, as done here.
+        headers += strlen(headers);
 
-        if ( strcmp(ms_HeaderNames[n], REFERENCES_HEADER) == 0 )
+        auto output = [&headers](const char* s, size_t len = 0)
         {
-           // Note that we don't bother null-terminating headers while we're
-           // inside this block, we just do it once at the end. The pointer is
-           // just always positioned at the end of the string, as done here.
-           headers += strlen(headers);
+           if ( !len )
+              len = strlen(s);
+           memcpy(headers, s, len);
+           headers += len;
+        };
 
-           auto output = [&headers](const char* s, size_t len = 0)
-           {
-              if ( !len )
-                 len = strlen(s);
-              memcpy(headers, s, len);
-              headers += len;
-           };
-
-           output(REFERENCES_HEADER);
-           output(": ");
+        output(REFERENCES_HEADER);
+        output(": ");
 
-           const char* value = ms_HeaderValues[n];
-           for ( ;; )
+        const char* value = header.m_value.c_str();
+        for ( ;; )
+        {
+           auto space = strchr(value, ' ');
+           if ( !space )
            {
-              auto space = strchr(value, ' ');
-              if ( !space )
-              {
-                 // Output the rest of the header.
-                 output(value);
-                 output("\r\n");
-
-                 break;
-              }
-
-              // Output just the part until the next space and add a
-              // continuation line.
-              output(value, space - value);
-              output("\r\n    "); // Same indent as c-client RFC822BUFFER.
-
-              value = space;
-              while ( isspace(*value) )
-                 value++;
+              // Output the rest of the header.
+              output(value);
+              output("\r\n");
+
+              break;
            }
 
-           *headers = '\0';
+           // Output just the part until the next space and add a
+           // continuation line.
+           output(value, space - value);
+           output("\r\n    "); // Same indent as c-client RFC822BUFFER.
 
-           // Skip generic case below.
-           continue;
+           value = space;
+           while ( isspace(*value) )
+              value++;
         }
 
-        rfc822_header_line(&headers,
-                           const_cast<char *>(ms_HeaderNames[n]),
-                           env,
-                           const_cast<char *>(ms_HeaderValues[n]));
+        *headers = '\0';
+
+        // Skip generic case below.
+        continue;
      }
+
+     rfc822_header_line(&headers,
+                        const_cast<char *>(header.m_name.c_str()),
+                        env,
+                        const_cast<char *>(header.m_value.c_str()));
   }
 
   // terminate the headers part

commit 4d806afeca9d336801540ebeca4577d7b2870d82
Author: Vadim Zeitlin <[email protected]>
Date:   Wed May 14 16:27:04 2025 +0200

    Rename wxModulesDlg::Update() to avoid name clash
    
    Use more usual naming convention for this event handler and avoid
    clashing with the inherited virtual function of the same name which
    resulted in "hiding virtual function" warning from gcc.

diff --git a/src/gui/wxModulesDlg.cpp b/src/gui/wxModulesDlg.cpp
index 2ccd44d8..57d78145 100644
--- a/src/gui/wxModulesDlg.cpp
+++ b/src/gui/wxModulesDlg.cpp
@@ -61,7 +61,7 @@ public:
    virtual bool TransferDataToWindow();
    virtual bool TransferDataFromWindow();
 
-   void Update(wxCommandEvent & ev);
+   void OnListBox(wxCommandEvent & ev);
    bool InternalUpdate(size_t n);
 
    virtual ~wxModulesDialog();
@@ -76,7 +76,7 @@ protected:
 };
 
 BEGIN_EVENT_TABLE(wxModulesDialog, wxDialog)
-   EVT_LISTBOX(-1, wxModulesDialog::Update)
+   EVT_LISTBOX(-1, wxModulesDialog::OnListBox)
 END_EVENT_TABLE()
 
 // ============================================================================
@@ -142,7 +142,7 @@ wxModulesDialog::~wxModulesDialog()
 }
 
 void
-wxModulesDialog::Update(wxCommandEvent & ev)
+wxModulesDialog::OnListBox(wxCommandEvent & ev)
 {
    int n = ev.GetInt(); // which one was clicked
 

commit bc24424e8b9ef31448e6f2eceec7b9dabdf8f538
Author: Vadim Zeitlin <[email protected]>
Date:   Wed May 14 16:26:21 2025 +0200

    Inline AdbFrame::SetMinSize() to avoid name clash
    
    This function isn't really useful as it's pretty short and called from a
    single place only, so inline it into the caller and avoid a warning
    about hiding inherited virtual function with the same name.
    
    No real changes.

diff --git a/src/adb/AdbFrame.cpp b/src/adb/AdbFrame.cpp
index abd05c9c..4c453f69 100644
--- a/src/adb/AdbFrame.cpp
+++ b/src/adb/AdbFrame.cpp
@@ -786,11 +786,6 @@ private:
   // opposite order)
   void LayoutButtons(wxPanel *panel, size_t nButtons, wxButton *aButtons[]);
 
-  // calculate the (approx.) minimal dimensions of the frame (returns TRUE if
-  // done, may return FALSE if called too early, i.e. before the window is
-  // fully created)
-  bool SetMinSize();
-
   // expand the specified path returning the pointer to the last item
   // (or NULL if the path is invalid)
   AdbTreeElement *ExpandBranch(const wxString& strEntry);
@@ -1338,7 +1333,12 @@ wxAdbEditFrame::wxAdbEditFrame(wxFrame *parent)
   panel->SetAutoLayout(TRUE);
   SetAutoLayout(TRUE);
 
-  SetMinSize();
+  // all buttons have the same size and we use them as length unit
+  int widthBtn, heightBtn;
+  m_btnCancel->GetClientSize(&widthBtn, &heightBtn);
+
+  // FIXME the numbers are completely arbitrary
+  SetSizeHints(7*widthBtn, 22*heightBtn);
 
   // caption and icon
   // ----------------
@@ -2690,22 +2690,6 @@ bool wxAdbEditFrame::MoveSelection(const wxString& strEntry)
   return TRUE;
 }
 
-// calculate the minimal size of the frame and set it
-bool wxAdbEditFrame::SetMinSize()
-{
-  if ( !m_btnCancel )
-    return FALSE;
-
-  // all buttons have the same size and we use them as length unit
-  int widthBtn, heightBtn;
-  m_btnCancel->GetClientSize(&widthBtn, &heightBtn);
-
-  // FIXME the numbers are completely arbitrary
-  SetSizeHints(7*widthBtn, 22*heightBtn);
-
-  return TRUE;
-}
-
 bool wxAdbEditFrame::SaveExpandedBranches(AdbTreeNode *group)
 {
   if ( m_treeAdb->IsExpanded(group->GetId()) ) {

commit c70cd4b56792a1992243b3bbde2c2826ab71131b
Author: Vadim Zeitlin <[email protected]>
Date:   Wed May 14 16:22:04 2025 +0200

    Use std::string for MessageHeader name and value
    
    These strings only use ASCII, there is no need to use (wx)String for
    them.

diff --git a/include/SendMessageCC.h b/include/SendMessageCC.h
index 1998a3cd..13149ef6 100644
--- a/include/SendMessageCC.h
+++ b/include/SendMessageCC.h
@@ -34,8 +34,8 @@ struct MessageHeader
    {
    }
 
-   String m_name,
-          m_value;
+   std::string m_name,
+               m_value;
 };
 
 using MessageHeaders = std::vector<MessageHeader>;
diff --git a/src/mail/SendMessageCC.cpp b/src/mail/SendMessageCC.cpp
index af4dab48..121914b6 100644
--- a/src/mail/SendMessageCC.cpp
+++ b/src/mail/SendMessageCC.cpp
@@ -1360,9 +1360,7 @@ SendMessageCC::Build(bool forStorage)
          xmailerSet = true;
 
 
-      // Conversion to ASCII is safe because HeaderName::IsValid() would have
-      // returned false if we had any non-ASCII characters in the name.
-      m_headerNames[h] = strutil_strdup(i->m_name.ToAscii());
+      m_headerNames[h] = strutil_strdup(i->m_name.c_str());
       m_headerValues[h] = strutil_strdup(value.c_str());
 
       h++;

commit 7bc745d7d7e03ba1d2ac828b5710be32c5da92d0
Author: Vadim Zeitlin <[email protected]>
Date:   Wed May 14 16:07:12 2025 +0200

    Replace legacy list of MessageHeader with std::vector
    
    No real changes.

diff --git a/include/SendMessageCC.h b/include/SendMessageCC.h
index 0a9ebce5..1998a3cd 100644
--- a/include/SendMessageCC.h
+++ b/include/SendMessageCC.h
@@ -17,13 +17,14 @@
 #  include "Mcclient.h"
 #endif  //USE_PCH
 
-#include "lists.h"
 #include "SendMessage.h"
 
+#include <vector>
+
 class Profile;
 
 // ----------------------------------------------------------------------------
-// MessageHeadersList: the list of custom (or extra) headers
+// A single custom (or extra) header or a collection of them
 // ----------------------------------------------------------------------------
 
 struct MessageHeader
@@ -37,7 +38,7 @@ struct MessageHeader
           m_value;
 };
 
-M_LIST_OWN(MessageHeadersList, MessageHeader);
+using MessageHeaders = std::vector<MessageHeader>;
 
 // ----------------------------------------------------------------------------
 // SendMessageCC: allows to send/post messages using c-client
@@ -165,7 +166,8 @@ protected:
    void CheckAddressFieldForErrors(ADDRESS *adr);
 
    /// get the iterator pointing to the given header or m_extraHeaders.end()
-   MessageHeadersList::iterator FindHeaderEntry(const String& name) const;
+   MessageHeaders::iterator FindHeaderEntry(const String& name);
+   MessageHeaders::const_iterator FindHeaderEntry(const String& name) const;
 
    /**
       Return the password needed to login to the SMTP server.
@@ -300,7 +302,7 @@ private:
    const char **m_headerValues;
 
    /// extra headers to be added before sending
-   MessageHeadersList m_extraHeaders;
+   MessageHeaders m_extraHeaders;
 
    /**
       True if we're a copy of an existing message, false if this is a new
diff --git a/src/mail/SendMessageCC.cpp b/src/mail/SendMessageCC.cpp
index f915ffd3..af4dab48 100644
--- a/src/mail/SendMessageCC.cpp
+++ b/src/mail/SendMessageCC.cpp
@@ -661,7 +661,7 @@ SendMessageCC::InitFromMsg(const Message *message, const wxArrayInt *partsToOmit
          }
          else
          {
-            m_extraHeaders.push_back(new MessageHeader(name, value));
+            m_extraHeaders.emplace_back(name, value);
          }
       }
    }
@@ -1007,10 +1007,24 @@ SendMessageCC::SetFcc(const String& fcc)
 // methods to manage the extra headers
 // ----------------------------------------------------------------------------
 
-MessageHeadersList::iterator
+MessageHeaders::iterator
+SendMessageCC::FindHeaderEntry(const String& name)
+{
+   MessageHeaders::iterator i;
+
+   for ( i = m_extraHeaders.begin(); i != m_extraHeaders.end(); ++i )
+   {
+      if ( wxStricmp(i->m_name, name) == 0 )
+         break;
+   }
+
+   return i;
+}
+
+MessageHeaders::const_iterator
 SendMessageCC::FindHeaderEntry(const String& name) const
 {
-   MessageHeadersList::iterator i;
+   MessageHeaders::const_iterator i;
 
    for ( i = m_extraHeaders.begin(); i != m_extraHeaders.end(); ++i )
    {
@@ -1032,7 +1046,7 @@ SendMessageCC::GetHeaderEntry(const String& name) const
 {
    String value;
 
-   MessageHeadersList::iterator i = FindHeaderEntry(name);
+   MessageHeaders::const_iterator i = FindHeaderEntry(name);
    if ( i != m_extraHeaders.end() )
    {
       value = i->m_value;
@@ -1064,7 +1078,7 @@ SendMessageCC::AddHeaderEntry(const String& nameIn, const String& value)
    }
    else // all the other headers
    {
-      MessageHeadersList::iterator i = FindHeaderEntry(name);
+      MessageHeaders::iterator i = FindHeaderEntry(name);
       if ( i != m_extraHeaders.end() )
       {
          // update existing value
@@ -1072,7 +1086,7 @@ SendMessageCC::AddHeaderEntry(const String& nameIn, const String& value)
       }
       else // add a new header entry
       {
-         m_extraHeaders.push_back(new MessageHeader(nameIn, value));
+         m_extraHeaders.emplace_back(nameIn, value);
       }
    }
 }
@@ -1080,7 +1094,7 @@ SendMessageCC::AddHeaderEntry(const String& nameIn, const String& value)
 void
 SendMessageCC::RemoveHeaderEntry(const String& name)
 {
-   MessageHeadersList::iterator i = FindHeaderEntry(name);
+   MessageHeaders::iterator i = FindHeaderEntry(name);
    CHECK_RET( i != m_extraHeaders.end(), "RemoveHeaderEntry(): no such header" );
 
    (void)m_extraHeaders.erase(i);
@@ -1309,7 +1323,7 @@ SendMessageCC::Build(bool forStorage)
         xmailerSet = false;
 
    // add the additional header lines added by the user
-   for ( MessageHeadersList::iterator i = m_extraHeaders.begin();
+   for ( MessageHeaders::iterator i = m_extraHeaders.begin();
          i != m_extraHeaders.end();
          ++i )
    {

commit d2eb671ab10390fc61ef1ae1638e0c2e58164b5e
Author: Vadim Zeitlin <[email protected]>
Date:   Fri May 9 02:08:11 2025 +0200

    Don't do anything in autosave timer when in critical section
    
    This could result in fatal reentrancies.

diff --git a/src/gui/wxMApp.cpp b/src/gui/wxMApp.cpp
index 7e4cd68f..5d4ba6f0 100644
--- a/src/gui/wxMApp.cpp
+++ b/src/gui/wxMApp.cpp
@@ -225,6 +225,9 @@ public:
 
    virtual void Notify()
    {
+      if ( !mApplication->AllowBgProcessing() )
+         return;
+
       wxLogTrace(TRACE_TIMER, _T("Autosaving options and folder status."));
 
       (void)SaveAll();

commit df66576684d8e783289a7332e3eeb628876f015a
Author: Vadim Zeitlin <[email protected]>
Date:   Fri Apr 4 19:19:28 2025 +0200

    Fix warnings about hiding overloaded virtuals
    
    These warnings are given at least by gcc 14.
    
    Avoid them by simply bringing the hidden virtual functions into scope
    (this might not be the best solution, but it's the simplest one).

diff --git a/include/adb/AdbEntry.h b/include/adb/AdbEntry.h
index a967224f..ec5e014f 100644
--- a/include/adb/AdbEntry.h
+++ b/include/adb/AdbEntry.h
@@ -213,6 +213,8 @@ public:
     /// get the name of the group/group by name
   virtual AdbEntryGroup *GetGroup(const String& name) const = 0;
 
+  using AdbElement::GetGroup;
+
   // operations
     /// create entry/subgroup
   virtual AdbEntry *CreateEntry(const String& strName) = 0;
diff --git a/src/adb/ExportText.cpp b/src/adb/ExportText.cpp
index 0f5882be..a2766d9b 100644
--- a/src/adb/ExportText.cpp
+++ b/src/adb/ExportText.cpp
@@ -105,6 +105,8 @@ public:
    // current radio selection
    void Update(int selection);
 
+   using wxManuallyLaidOutDialog::Update;
+
 private:
    // the profile path for saving the last file used
    static const wxChar *ms_profilePathLastFile;
diff --git a/src/gui/wxFolderTree.cpp b/src/gui/wxFolderTree.cpp
index 7cd1ba61..7bbb4a72 100644
--- a/src/gui/wxFolderTree.cpp
+++ b/src/gui/wxFolderTree.cpp
@@ -436,6 +436,8 @@ protected:
 
    void DoPopupMenu(const wxPoint& pos);
 
+   using wxPTreeCtrl::DoPopupMenu;
+
    // are we editing an item in place?
    bool IsEditingInPlace() const;
 

commit 63bc9837b98b901c26c1627f2fb1762897142b51
Author: Vadim Zeitlin <[email protected]>
Date:   Fri Apr 4 19:17:04 2025 +0200

    Fix calling MIME::DecodeText() with wxFONTENCODING_DEFAULT
    
    This encoding is not accepted by this function, as it doesn't make sense
    for it, so avoid calling it with it and document this in its comment.

diff --git a/include/mail/MimeDecode.h b/include/mail/MimeDecode.h
index ce2a0fbc..b6684dec 100644
--- a/include/mail/MimeDecode.h
+++ b/include/mail/MimeDecode.h
@@ -87,6 +87,11 @@ String DecodeHeader(const String& in, wxFontEncoding *encoding = NULL);
    This method tries hard to return something useful and ignores invalid
    characters when decoding using UTF-8 instead of failing and returning an
    empty string, which is not useful.
+
+   @param p Pointer to the data to decode.
+   @param len Length of the data to decode.
+   @param enc Valid encoding, i.e. not wxFONTENCODING_SYSTEM or
+      wxFONTENCODING_DEFAULT.
  */
 String DecodeText(const char *p, size_t len, wxFontEncoding enc);
 
diff --git a/src/mail/MimeDecode.cpp b/src/mail/MimeDecode.cpp
index 93100d69..749882aa 100644
--- a/src/mail/MimeDecode.cpp
+++ b/src/mail/MimeDecode.cpp
@@ -121,6 +121,14 @@ MIME::Encoding MIME::GetEncodingForFontEncoding(wxFontEncoding enc)
 static
 String DecodeString(const std::string& s, wxFontEncoding enc)
 {
+   // We allow encoding to be wxFONTENCODING_DEFAULT here for convenience: this
+   // is what CharsetToEncoding() returns for "US-ASCII" and we're called with
+   // its result. But DecodeText() doesn't accept it, so use a compatible
+   // encoding (could also use wxFONTENCODING_ISO8859_1, but this is a better
+   // fallback in case the string contents is invalid, i.e. not just ASCII).
+   if ( enc == wxFONTENCODING_DEFAULT )
+      enc = wxFONTENCODING_UTF8;
+
    return MIME::DecodeText(s.data(), s.length(), enc);
 }
 

-----------------------------------------------------------------------

Summary of changes:
 M.vcxproj                        |  76 ++++---------
 Mconfig.vcxproj                  |  11 +-
 configure.ac                     |   2 +-
 include/ASMailFolder.h           |   4 +-
 include/FolderView.h             |   4 +-
 include/HeaderInfo.h             |   4 +-
 include/HeaderInfoImpl.h         |   4 +-
 include/MApplication.h           |   2 +-
 include/MDialogs.h               |   2 +-
 include/MFStatus.h               |  25 ++---
 include/MFilter.h                |   2 +-
 include/MFrame.h                 |   2 +-
 include/MGuiApp.h                |   2 +-
 include/MHelp.h                  |   2 +-
 include/MLogFrame.h              |   2 +-
 include/MMainFrame.h             |   2 +-
 include/MModule.h                |   2 +-
 include/MPython.h                |   2 +-
 include/MScripts.h               |   2 +-
 include/MailFolder.h             |   2 +-
 include/MailFolderCC.h           |   4 +-
 include/MailFolderCmn.h          |   4 +-
 include/Mcallbacks.h             |   2 +-
 include/Mcclient.h               |   7 +-
 include/Mcommon.h                |   4 +-
 include/Mconfig.h                |  17 +--
 include/Mdefaults.h              |   2 +-
 include/Message.h                |   4 +-
 include/MessageCC.h              |   2 +-
 include/Mpch.h                   |   2 +-
 include/Munix.h                  |   2 +-
 include/Mupgrade.h               |   4 +-
 include/Mwin.h                   |   2 +-
 include/PathFinder.h             |   2 +-
 include/Profile.h                |   2 +-
 include/PythonHelp.h             |   2 +-
 include/SendMessageCC.h          |  31 +++---
 include/XFace.h                  |   2 +-
 include/adb/AdbEntry.h           |   2 +
 include/config.h.in              |   4 +-
 include/gui/MWizard.h            |   2 +-
 include/gui/wxComposeView.h      |   2 +-
 include/gui/wxFolderView.h       |   2 +-
 include/gui/wxIconManager.h      |   2 +-
 include/gui/wxMApp.h             |   2 +-
 include/gui/wxMDialogs.h         |   2 +-
 include/gui/wxMIds.h             |   2 +-
 include/gui/wxMenuDefs.h         |   2 +-
 include/gui/wxMessageView.h      |   2 +-
 include/gui/wxllist.h            |   2 +-
 include/gui/wxlparser.h          |   2 +-
 include/gui/wxlwindow.h          |   2 +-
 include/guidef.h                 |   2 +-
 include/kbList.h                 |   2 +-
 include/mail/MimeDecode.h        |   5 +
 include/modules/Calendar.h       |   2 +-
 include/modules/Filters.h        |   2 +-
 include/strutil.h                |   8 +-
 include/sysutil.h                |   4 +-
 lib/compface/compface.vcxproj    |  11 +-
 lib/dspam/dspam.vcxproj          |  11 +-
 lib/imap/imap.vcxproj            |  11 +-
 src/adb/AdbFrame.cpp             |  28 ++---
 src/adb/ExportText.cpp           |   2 +
 src/adb/ProvBbdb.cpp             |  28 +++--
 src/adb/ProvLine.cpp             |  18 ++--
 src/classes/ConfigSourcesAll.cpp |   2 +-
 src/classes/FolderMonitor.cpp    |   2 +-
 src/classes/IconList.cpp         |   2 +-
 src/classes/MApplication.cpp     |   2 +-
 src/classes/MFilter.cpp          |   2 +-
 src/classes/MModule.cpp          |   2 +-
 src/classes/PathFinder.cpp       |   2 +-
 src/classes/Profile.cpp          |   2 +-
 src/classes/XFace.cpp            |   2 +-
 src/classes/kbList.cpp           |   2 +-
 src/gui/ImportFoldersWizard.cpp  |   2 +-
 src/gui/wxComposeView.cpp        |   8 +-
 src/gui/wxFiltersDialog.cpp      |   2 +-
 src/gui/wxFolderTree.cpp         |   2 +
 src/gui/wxFolderView.cpp         |   8 +-
 src/gui/wxIconManager.cpp        |   6 +-
 src/gui/wxMApp.cpp               |   5 +-
 src/gui/wxMDialogs.cpp           |   2 +-
 src/gui/wxMainFrame.cpp          | 134 ++++++++++++++++++-----
 src/gui/wxMenuDefs.cpp           |   4 +-
 src/gui/wxMessageView.cpp        |   2 +-
 src/gui/wxModulesDlg.cpp         |   8 +-
 src/gui/wxOptionsDlg.cpp         |   2 +
 src/gui/wxllist.cpp              |   2 +-
 src/gui/wxlparser.cpp            |   2 +-
 src/gui/wxlwindow.cpp            |   4 +-
 src/icons/Micon.jpg              | Bin 4377 -> 6448 bytes
 src/icons/Msplash.xcf            | Bin 779816 -> 1093822 bytes
 src/icons/m.jpg                  | Bin 274 -> 298 bytes
 src/icons/mahogany.png           | Bin 11300 -> 17009 bytes
 src/icons/migrate.png            | Bin 46461 -> 69523 bytes
 src/mail/ASMailFolder.cpp        |   2 +-
 src/mail/HeaderInfoImpl.cpp      |   2 +-
 src/mail/MFCache.cpp             |   4 +-
 src/mail/MFui.cpp                |   2 +-
 src/mail/MailFolder.cpp          |   4 +-
 src/mail/MailFolderCC.cpp        |  13 +--
 src/mail/MailFolderCmn.cpp       |  90 ++++++++--------
 src/mail/Message.cpp             |   2 +-
 src/mail/MessageCC.cpp           |   2 +-
 src/mail/MimeDecode.cpp          |   8 ++
 src/mail/SendMessageCC.cpp       | 225 +++++++++++++++++----------------------
 src/mail/VFolder.cpp             |   3 +-
 src/modules/Calendar.cpp         |   4 +-
 src/modules/Filters.cpp          |   2 +-
 src/modules/LayoutEditor.cpp     |   2 +-
 src/modules/LayoutViewer.cpp     |   2 +-
 src/modules/Mdummy.cpp           |   2 +-
 src/modules/PalmOS.cpp           |   4 +-
 src/util/ssl.cpp                 |   4 +-
 src/util/strutil.cpp             |   6 +-
 src/util/sysutil.cpp             |   2 +-
 src/wx/vcard/versit.vcxproj      |  11 +-
 119 files changed, 510 insertions(+), 512 deletions(-)


hooks/post-receive
-- 
Mahogany sources repository.


--===============3818554138828633431==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline


--===============3818554138828633431==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
Mahogany-cvsupdates mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mahogany-cvsupdates

--===============3818554138828633431==--