summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--freefilesync/debian/_service2
-rw-r--r--freefilesync/debian/changelog18
-rw-r--r--freefilesync/debian/freefilesync+stackrpms.dsc2
-rw-r--r--freefilesync/debian/patches/ffs_no_check_updates.patch89
-rw-r--r--freefilesync/debian/patches/ffs_tooltips_no_taskbar.patch8
-rw-r--r--freefilesync/debian/patches/ffs_traditional_view.patch97
-rw-r--r--freefilesync/debian/patches/no-wx3.3.0.patch243
-rw-r--r--freefilesync/debian/patches/series1
8 files changed, 353 insertions, 107 deletions
diff --git a/freefilesync/debian/_service b/freefilesync/debian/_service
index 1f8f514..cf49da8 100644
--- a/freefilesync/debian/_service
+++ b/freefilesync/debian/_service
@@ -14,7 +14,7 @@
<service name="tar_scm">
<param name="scm">git</param>
<param name="url">https://gitlab.com/opensource-tracking/FreeFileSync.git</param>
- <param name="revision">13.9</param>
+ <param name="revision">14.0</param>
<param name="version">_none_</param>
</service>
<service name="recompress">
diff --git a/freefilesync/debian/changelog b/freefilesync/debian/changelog
index 148ef03..26def9f 100644
--- a/freefilesync/debian/changelog
+++ b/freefilesync/debian/changelog
@@ -1,3 +1,21 @@
+freefilesync (14.0-100+stackrpms) obs; urgency=low
+
+ * Upstream updates
+
+ * Dark mode support (Windows 10 20H1, macOS 10.14 (Mojave), Linux)
+ * Fixed dock icon progress percentage divergence (macOS)
+ * Prevent "App Napp during comparison/synchronization (macOS)
+ * Enhance EINVAL error message for unsupported characters
+ * Support running with background priority (Linux)
+ * Fixed installer access denied when creating shell links (Windows)
+ * Improved size and date formatting for file listing (macOS)
+ * Improved context menu customization grid
+ * Reduced peak memory consumption by 12%
+ * Automatically set appropriate text color for config panel background
+ * Revived and updated Italian translation
+
+ -- B. Stack <bgstack15@gmail.com> Mon, 20 Jan 2024 17:41:23 -0500
+
freefilesync (13.9-100+stackrpms) obs; urgency=low
* Upstream updates
diff --git a/freefilesync/debian/freefilesync+stackrpms.dsc b/freefilesync/debian/freefilesync+stackrpms.dsc
index b76b364..9bd7aeb 100644
--- a/freefilesync/debian/freefilesync+stackrpms.dsc
+++ b/freefilesync/debian/freefilesync+stackrpms.dsc
@@ -2,7 +2,7 @@ Format: 3.0 (quilt)
Source: freefilesync
Binary: freefilesync
Architecture: any
-Version: 13.9-100+stackrpms
+Version: 14.0-100+stackrpms
Maintainer: B. Stack <bgstack15@gmail.com>
Homepage: https://freefilesync.org/
Standards-Version: 4.1.4
diff --git a/freefilesync/debian/patches/ffs_no_check_updates.patch b/freefilesync/debian/patches/ffs_no_check_updates.patch
index f312a97..12ab4be 100644
--- a/freefilesync/debian/patches/ffs_no_check_updates.patch
+++ b/freefilesync/debian/patches/ffs_no_check_updates.patch
@@ -16,53 +16,53 @@ Message: This is a major rewrite of the ffs_no_check_updates patch from before 1
+++ b/FreeFileSync/Source/ui/gui_generated.cpp
@@ -110,11 +110,6 @@ MainDialogGenerated::MainDialogGenerated
- m_menuHelp->AppendSeparator();
+ m_menuHelp->AppendSeparator();
-- m_menuItemCheckVersionNow = new wxMenuItem( m_menuHelp, wxID_ANY, wxString( _("&Check for updates now") ), wxEmptyString, wxITEM_NORMAL );
-- m_menuHelp->Append( m_menuItemCheckVersionNow );
+- m_menuItemCheckVersionNow = new wxMenuItem( m_menuHelp, wxID_ANY, wxString( _("&Check for updates now") ) , wxEmptyString, wxITEM_NORMAL );
+- m_menuHelp->Append( m_menuItemCheckVersionNow );
-
-- m_menuHelp->AppendSeparator();
+- m_menuHelp->AppendSeparator();
-
- m_menuItemAbout = new wxMenuItem( m_menuHelp, wxID_ABOUT, wxString( _("&About") ) + wxT('\t') + wxT("Shift+F1"), wxEmptyString, wxITEM_NORMAL );
- m_menuHelp->Append( m_menuItemAbout );
+ m_menuItemAbout = new wxMenuItem( m_menuHelp, wxID_ABOUT, wxString( _("&About") ) + wxT('\t') + wxT("Shift+F1"), wxEmptyString, wxITEM_NORMAL );
+ m_menuHelp->Append( m_menuItemAbout );
-@@ -1119,7 +1114,6 @@ MainDialogGenerated::MainDialogGenerated
- m_menuTools->Bind(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::onMenuExportFileList ), this, m_menuItemExportList->GetId());
- m_menuTools->Bind(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::onMenuResetLayout ), this, m_menuItemResetLayout->GetId());
- m_menuHelp->Bind(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::onShowHelp ), this, m_menuItemHelp->GetId());
-- m_menuHelp->Bind(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::onMenuCheckVersion ), this, m_menuItemCheckVersionNow->GetId());
- m_menuHelp->Bind(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::onMenuAbout ), this, m_menuItemAbout->GetId());
- m_buttonCompare->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::onCompare ), NULL, this );
- m_bpButtonCmpConfig->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::onCmpSettings ), NULL, this );
+@@ -1098,7 +1093,6 @@ MainDialogGenerated::MainDialogGenerated
+ m_menuTools->Bind(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::onMenuExportFileList ), this, m_menuItemExportList->GetId());
+ m_menuTools->Bind(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::onMenuResetLayout ), this, m_menuItemResetLayout->GetId());
+ m_menuHelp->Bind(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::onShowHelp ), this, m_menuItemHelp->GetId());
+- m_menuHelp->Bind(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::onMenuCheckVersion ), this, m_menuItemCheckVersionNow->GetId());
+ m_menuHelp->Bind(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler( MainDialogGenerated::onMenuAbout ), this, m_menuItemAbout->GetId());
+ m_buttonCompare->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::onCompare ), NULL, this );
+ m_bpButtonCmpConfig->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( MainDialogGenerated::onCmpSettings ), NULL, this );
--- a/FreeFileSync/Source/ui/gui_generated.h
+++ b/FreeFileSync/Source/ui/gui_generated.h
-@@ -96,7 +96,6 @@ protected:
- wxMenuItem* m_menuItemShowOverview;
- wxMenu* m_menuHelp;
- wxMenuItem* m_menuItemHelp;
-- wxMenuItem* m_menuItemCheckVersionNow;
- wxMenuItem* m_menuItemAbout;
- wxBoxSizer* bSizerPanelHolder;
- wxPanel* m_panelTopButtons;
-@@ -233,7 +232,6 @@ protected:
- virtual void onMenuExportFileList( wxCommandEvent& event ) { event.Skip(); }
- virtual void onMenuResetLayout( wxCommandEvent& event ) { event.Skip(); }
- virtual void onShowHelp( wxCommandEvent& event ) { event.Skip(); }
-- virtual void onMenuCheckVersion( wxCommandEvent& event ) { event.Skip(); }
- virtual void onMenuAbout( wxCommandEvent& event ) { event.Skip(); }
- virtual void onCompSettingsContextMouse( wxMouseEvent& event ) { event.Skip(); }
- virtual void onCompSettingsContext( wxCommandEvent& event ) { event.Skip(); }
+@@ -97,7 +97,6 @@ class MainDialogGenerated : public wxFra
+ wxMenuItem* m_menuItemShowOverview;
+ wxMenu* m_menuHelp;
+ wxMenuItem* m_menuItemHelp;
+- wxMenuItem* m_menuItemCheckVersionNow;
+ wxMenuItem* m_menuItemAbout;
+ wxBoxSizer* bSizerPanelHolder;
+ wxPanel* m_panelTopButtons;
+@@ -230,7 +229,6 @@ class MainDialogGenerated : public wxFra
+ virtual void onMenuExportFileList( wxCommandEvent& event ) { event.Skip(); }
+ virtual void onMenuResetLayout( wxCommandEvent& event ) { event.Skip(); }
+ virtual void onShowHelp( wxCommandEvent& event ) { event.Skip(); }
+- virtual void onMenuCheckVersion( wxCommandEvent& event ) { event.Skip(); }
+ virtual void onMenuAbout( wxCommandEvent& event ) { event.Skip(); }
+ virtual void onCompSettingsContextMouse( wxMouseEvent& event ) { event.Skip(); }
+ virtual void onCompSettingsContext( wxCommandEvent& event ) { event.Skip(); }
--- a/FreeFileSync/Source/ui/main_dlg.cpp
+++ b/FreeFileSync/Source/ui/main_dlg.cpp
-@@ -32,7 +32,6 @@
- #include <wx+/window_tools.h>
- #include <wx+/image_resources.h>
+@@ -33,7 +33,6 @@
#include "cfg_grid.h"
+ #include "folder_selector.h"
+ #include "tree_grid.h"
-#include "version_check.h"
#include "gui_status_handler.h"
#include "small_dlgs.h"
#include "rename_dlg.h"
-@@ -598,7 +597,7 @@ void MainDialog::create(const Zstring& g
+@@ -581,7 +580,7 @@ void MainDialog::create(const FfsGuiConf
//showAboutDialog(mainDlg); => dialog centered incorrectly (Centos)
//mainDlg->CallAfter([mainDlg] { showAboutDialog(mainDlg); }); => dialog centered incorrectly (Windows, Centos)
@@ -71,7 +71,7 @@ Message: This is a major rewrite of the ffs_no_check_updates patch from before 1
}
-@@ -991,7 +990,6 @@ imgFileManagerSmall_([]
+@@ -981,7 +980,6 @@ imgFileManagerSmall_([]
setImage(*m_menuItemHelp, loadImage("help", dipToScreen(getMenuIconDipSize())));
setImage(*m_menuItemAbout, loadImage("about", dipToScreen(getMenuIconDipSize())));
@@ -79,7 +79,7 @@ Message: This is a major rewrite of the ffs_no_check_updates patch from before 1
fixMenuIcons(*m_menuFile);
fixMenuIcons(*m_menuActions);
-@@ -1091,9 +1089,6 @@ imgFileManagerSmall_([]
+@@ -1081,9 +1079,6 @@ imgFileManagerSmall_([]
//mainly to update row label sizes...
updateGui();
@@ -89,7 +89,7 @@ Message: This is a major rewrite of the ffs_no_check_updates patch from before 1
//asynchronous call to wxWindow::Dimensions(): fix superfluous frame on right and bottom when FFS is started in fullscreen mode
Bind(wxEVT_IDLE, &MainDialog::onLayoutWindowAsync, this);
wxCommandEvent evtDummy; //call once before onLayoutWindowAsync()
-@@ -6335,57 +6330,6 @@ void MainDialog::onMenuExportFileList(wx
+@@ -6379,57 +6374,6 @@ void MainDialog::onMenuExportFileList(wx
}
}
@@ -149,7 +149,7 @@ Message: This is a major rewrite of the ffs_no_check_updates patch from before 1
//execute just once per startup!
--- a/FreeFileSync/Source/ui/main_dlg.h
+++ b/FreeFileSync/Source/ui/main_dlg.h
-@@ -271,7 +271,6 @@ private:
+@@ -263,7 +263,6 @@ private:
void onMenuExportFileList (wxCommandEvent& event) override;
void onMenuResetLayout (wxCommandEvent& event) override { resetLayout(); }
void onMenuFindItem (wxCommandEvent& event) override { showFindPanel(true /*show*/); } //CTRL + F
@@ -159,7 +159,7 @@ Message: This is a major rewrite of the ffs_no_check_updates patch from before 1
void onMenuQuit (wxCommandEvent& event) override { Close(); }
--- a/FreeFileSync/Source/ui/version_check.cpp
+++ b/FreeFileSync/Source/ui/version_check.cpp
-@@ -45,13 +45,6 @@ void openBrowserForDownload(wxWindow* pa
+@@ -46,13 +46,6 @@ void openBrowserForDownload(wxWindow* pa
}
@@ -173,7 +173,7 @@ Message: This is a major rewrite of the ffs_no_check_updates patch from before 1
namespace
{
std::wstring getIso639Language()
-@@ -140,8 +133,7 @@ void showUpdateAvailableDialog(wxWindow*
+@@ -141,8 +134,7 @@ void showUpdateAvailableDialog(wxWindow*
std::wstring updateDetailsMsg;
try
{
@@ -183,7 +183,7 @@ Message: This is a major rewrite of the ffs_no_check_updates patch from before 1
}
catch (const SysError& e) { updateDetailsMsg = _("Failed to retrieve update information.") + + L"\n\n" + e.toString(); }
-@@ -163,8 +155,8 @@ void showUpdateAvailableDialog(wxWindow*
+@@ -164,8 +156,8 @@ void showUpdateAvailableDialog(wxWindow*
std::string getOnlineVersion(const std::vector<std::pair<std::string, std::string>>& postParams) //throw SysError
{
@@ -194,7 +194,7 @@ Message: This is a major rewrite of the ffs_no_check_updates patch from before 1
if (response.empty() ||
!std::all_of(response.begin(), response.end(), [](const char c) { return isDigit(c) || c == FFS_VERSION_SEPARATOR; }) ||
-@@ -205,58 +197,6 @@ bool fff::haveNewerVersionOnline(const s
+@@ -206,61 +198,6 @@ bool fff::haveNewerVersionOnline(const s
}
@@ -208,10 +208,13 @@ Message: This is a major rewrite of the ffs_no_check_updates patch from before 1
- if (haveNewerVersionOnline(onlineVersion))
- showUpdateAvailableDialog(&parent, onlineVersion);
- else
+- {
+- std::wstring ffsVersionName = L"FreeFileSync " + utfTo<std::wstring>(ffsVersion);
- showNotificationDialog(&parent, DialogInfoType::info, PopupDialogCfg().
- setIcon(loadImage("update_check")).
- setTitle(_("Check for Software Updates")).
-- setMainInstructions(_("FreeFileSync is up-to-date.")));
+- setMainInstructions(replaceCpy(_("FreeFileSync is up-to-date."), L"FreeFileSync", ffsVersionName)));
+- }
- }
- catch (const SysError& e)
- {
diff --git a/freefilesync/debian/patches/ffs_tooltips_no_taskbar.patch b/freefilesync/debian/patches/ffs_tooltips_no_taskbar.patch
index 704d544..762598e 100644
--- a/freefilesync/debian/patches/ffs_tooltips_no_taskbar.patch
+++ b/freefilesync/debian/patches/ffs_tooltips_no_taskbar.patch
@@ -4,15 +4,15 @@ Author: bgstack15
Message: Suppress taskbar entry for tooltip "window". Upstream declined this patch (https://freefilesync.org/forum/viewtopic.php?t=9898) so it must continue here.
--- a/wx+/tooltip.cpp
+++ b/wx+/tooltip.cpp
-@@ -10,6 +10,7 @@
+@@ -9,6 +9,7 @@
+ #include <wx/stattext.h>
#include <wx/sizer.h>
- //#include <wx/statbmp.h>
#include <wx/settings.h>
+#include <wx/frame.h>
#include <wx/app.h>
- //#include "image_tools.h"
#include "bitmap_button.h"
-@@ -29,7 +30,7 @@ class Tooltip::TooltipDlgGenerated : pub
+ #include "dc.h"
+@@ -27,7 +28,7 @@ class Tooltip::TooltipDlgGenerated : pub
{
public:
TooltipDlgGenerated(wxWindow* parent) : //Suse Linux/X11: needs parent window, else there are z-order issues
diff --git a/freefilesync/debian/patches/ffs_traditional_view.patch b/freefilesync/debian/patches/ffs_traditional_view.patch
index 188a6a2..c18b860 100644
--- a/freefilesync/debian/patches/ffs_traditional_view.patch
+++ b/freefilesync/debian/patches/ffs_traditional_view.patch
@@ -8,24 +8,7 @@ Message:
"Wrap file grid folder paths instead of truncate" in the Latest Changes.
--- a/FreeFileSync/Source/ui/file_grid.cpp
+++ b/FreeFileSync/Source/ui/file_grid.cpp
-@@ -5,13 +5,13 @@
- // *****************************************************************************
-
- #include "file_grid.h"
--//#include <set>
-+#include <set>
- #include <wx/dc.h>
- #include <wx/settings.h>
- #include <wx/timer.h>
- #include <zen/i18n.h>
--//#include <zen/file_error.h>
--//#include <zen/format_unit.h>
-+#include <zen/file_error.h>
-+#include <zen/format_unit.h>
- #include <zen/scope_guard.h>
- #include <wx+/tooltip.h>
- #include <wx+/rtl.h>
-@@ -308,8 +308,7 @@ struct SharedComponents //...between left, center, and right grids
+@@ -295,8 +295,7 @@ struct SharedComponents //...between lef
NavigationMarker navMarker;
std::unique_ptr<GridEventManager> evtMgr;
GridViewType gridViewType = GridViewType::action;
@@ -35,12 +18,12 @@ Message:
};
//########################################################################################################
-@@ -352,57 +351,18 @@ public:
+@@ -339,57 +338,19 @@ public:
const FileSystemObject* getFsObject(size_t row) const { return getDataView().getFsObject(row); }
-- const wxSize& getTextExtentBuffered(wxDC& dc, const std::wstring_view& text)
-+ const wxSize& getTextExtentBuffered(wxDC& dc, const std::wstring& text)
+- const wxSize& getTextExtentBuffered(const wxReadOnlyDC& dc, const std::wstring_view& text)
++ const wxSize& getTextExtentBuffered(const wxDC& dc, const std::wstring& text)
{
auto& compExtentsBuf = sharedComp_.ref().compExtentsBuf_;
//- only used for parent path names and file names on view => should not grow "too big"
@@ -50,14 +33,14 @@ Message:
auto it = compExtentsBuf.find(text);
if (it == compExtentsBuf.end())
- it = compExtentsBuf.emplace(text, dc.GetTextExtent(copyStringTo<wxString>(text))).first;
-- //GetTextExtent() returns (0, 0) for empty string!
+ it = compExtentsBuf.emplace(text, dc.GetTextExtent(text)).first;
+ //GetTextExtent() returns (0, 0) for empty string!
return it->second;
}
- //- trim while leaving path components intact
- //- *always* returns at least one component, even if > maxWidth
-- size_t getPathTrimmedSize(wxDC& dc, const std::wstring_view& itemPath, int maxWidth)
+- size_t getPathTrimmedSize(const wxReadOnlyDC& dc, const std::wstring_view& itemPath, int maxWidth)
- {
- if (itemPath.size() <= 1)
- return itemPath.size();
@@ -92,10 +75,10 @@ Message:
- }
- }
-
- private:
- size_t getRowCount() const override { return getDataView().rowsOnView(); }
-
-@@ -527,8 +487,10 @@ private:
+ //improve readability (while lacking cell borders)
+ const wxColor& getDefaultBackgroundColorAlternating(bool wantStandardColor)
+ {
+@@ -523,8 +484,10 @@ private:
case ItemPathFormat::name:
return utfTo<std::wstring>(fsObj->getItemName<side>());
case ItemPathFormat::relative:
@@ -106,7 +89,7 @@ Message:
return AFS::getDisplayPath(fsObj->getAbstractPath<side>());
}
-@@ -588,11 +550,14 @@ private:
+@@ -584,11 +547,14 @@ private:
else
GridData::renderRowBackgound(dc, rect, row, true /*enabled*/, true /*selected*/, rowHover);
@@ -124,7 +107,7 @@ Message:
getColorGridLine() : getDefaultBackgroundColorAlternating(pdi.groupIdx % 2 != 0));
}
-@@ -614,18 +579,18 @@ private:
+@@ -610,18 +576,18 @@ private:
if (itemNamesWidth < 0)
{
itemNamesWidth = 0;
@@ -146,7 +129,7 @@ Message:
if (!itemWidths.empty())
{
-@@ -643,15 +608,17 @@ private:
+@@ -639,15 +605,17 @@ private:
}
@@ -163,12 +146,12 @@ Message:
int groupParentWidth;
int groupNameWidth;
};
-- GroupRowLayout getGroupRowLayout(wxDC& dc, size_t row, const FileView::PathDrawInfo& pdi, int maxWidth)
+- GroupRowLayout getGroupRowLayout(const wxReadOnlyDC& dc, size_t row, const FileView::PathDrawInfo& pdi, int maxWidth)
+ GroupRenderLayout getGroupRenderLayout(wxDC& dc, size_t row, const FileView::PathDrawInfo& pdi, int maxWidth)
{
assert(pdi.fsObj);
-@@ -659,15 +626,14 @@ private:
+@@ -655,15 +623,14 @@ private:
const int iconSize = getIconManager().getIconWxsize();
//--------------------------------------------------------------------
@@ -186,7 +169,7 @@ Message:
std::wstring itemName;
if (itemPathFormat_ == ItemPathFormat::name || //hack: show folder name in item colum since groupName/groupParentFolder are unused!
-@@ -699,140 +665,166 @@ private:
+@@ -695,140 +662,166 @@ private:
else //=> BaseFolderPair
groupParentFolder = AFS::getDisplayPath(pdi.fsObj->base().getAbstractPath<side>());
break;
@@ -443,7 +426,7 @@ Message:
void renderCell(wxDC& dc, const wxRect& rect, size_t row, ColumnType colType, bool enabled, bool selected, HoverArea rowHover) override
{
//-----------------------------------------------
-@@ -949,43 +941,62 @@ break2:
+@@ -945,43 +938,62 @@ break2:
};
//-------------------------------------------------------------------------
@@ -514,7 +497,7 @@ Message:
clearArea(dc, rectGroupBack, getDefaultBackgroundColorAlternating(pdi.groupIdx % 2 == 0));
//clearArea() is surprisingly expensive => call just once!
-@@ -993,31 +1004,22 @@ break2:
+@@ -989,31 +1001,22 @@ break2:
//accessibility: always set *both* foreground AND background colors!
}
@@ -554,7 +537,7 @@ Message:
{
wxRect rectGroupNameBack = rectGroupName;
-@@ -1062,7 +1064,7 @@ break2:
+@@ -1058,7 +1061,7 @@ break2:
if (!itemName.empty())
{
//draw group/items separation line
@@ -563,7 +546,7 @@ Message:
{
rectGroupItems.x += 2 * gapSize_;
rectGroupItems.width -= 2 * gapSize_;
-@@ -1165,15 +1167,18 @@ break2:
+@@ -1160,15 +1163,18 @@ break2:
if (const FileView::PathDrawInfo pdi = getDataView().getDrawInfo(row);
pdi.fsObj)
{
@@ -587,7 +570,7 @@ Message:
if (groupNameCellBeginX <= cellRelativePosX && cellRelativePosX < groupNameCellBeginX + groupNameWidth + 2 * gapSize_ /*include gap before vline*/)
return static_cast<HoverArea>(HoverAreaGroup::groupName);
-@@ -1196,13 +1201,22 @@ break2:
+@@ -1191,13 +1197,22 @@ break2:
/* ________________________ ___________________________________ _____________________________________________________
| (gap | group parent) | | (gap | icon | gap | group name) | | (2x gap | vline) | (gap | icon) | gap | item name |
------------------------ ----------------------------------- ----------------------------------------------------- */
@@ -614,27 +597,25 @@ Message:
const int fileIconWidth = getIconManager().getIconBuffer() ? gapSize_ + getIconManager().getIconWxsize() : 0;
const int ellipsisWidth = getTextExtentBuffered(dc, ELLIPSIS).x;
const int itemWidth = itemName.empty() ? 0 :
-@@ -1234,6 +1248,10 @@ break2:
- return _("Relative path");
- case ItemPathFormat::full:
- return _("Full path");
-+ case ItemPathFormat::traditional:
-+ return _("Traditional");
-+ case ItemPathFormat::tradrel:
-+ return _("Trad. relative");
+@@ -1228,6 +1243,8 @@ break2:
+ case ItemPathFormat::name: return _("Item name");
+ case ItemPathFormat::relative: return _("Relative path");
+ case ItemPathFormat::full: return _("Full path");
++ case ItemPathFormat::traditional: return _("Traditional");
++ case ItemPathFormat::tradrel: return _("Trad. relative");
}
assert(false);
break;
-@@ -1348,8 +1366,6 @@ break2:
- const int gapSize_ = dipToWxsize(FILE_GRID_GAP_SIZE_DIP);
- const int gapSizeWide_ = dipToWxsize(FILE_GRID_GAP_SIZE_WIDE_DIP);
+@@ -1344,8 +1361,6 @@ break2:
+ wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT),
+ wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW), 5 /*contrastRatioMin*/); //W3C recommends >= 4.5
- const int charHeight_ = refGrid().getMainWin().GetCharHeight();
-
+
ItemPathFormat itemPathFormat_ = ItemPathFormat::full;
- std::vector<unsigned char> failedLoads_; //effectively a vector<bool> of size "number of rows"
-@@ -1358,11 +1374,6 @@ break2:
+@@ -1355,11 +1370,6 @@ break2:
const std::wstring bslashBidi_ = (wxTheApp->GetLayoutDirection() == wxLayout_RightToLeft ? RTL_MARK : LTR_MARK) + std::wstring(L"\\");
//no need for LTR/RTL marks on both sides: text follows main direction if slash is between two strong characters with different directions
@@ -646,7 +627,7 @@ Message:
std::vector<int> groupItemNamesWidthBuf_; //buffer! groupItemNamesWidths essentially only depends on (groupIdx, side)
uint64_t viewUpdateIdLast_ = 0; //
};
-@@ -1498,6 +1509,7 @@ private:
+@@ -1495,6 +1505,7 @@ private:
GridData::renderRowBackgound(dc, rect, row, true /*enabled*/, true /*selected*/, rowHover);
//----------------------------------------------------------------------------------
@@ -654,7 +635,7 @@ Message:
const wxRect rectLine(rect.x, rect.y + rect.height - dipToWxsize(1), rect.width, dipToWxsize(1));
clearArea(dc, rectLine, row == pdi.groupLastRow - 1 /*last group item*/ ?
getColorGridLine() : getDefaultBackgroundColorAlternating(pdi.groupIdx % 2 != 0));
-@@ -1522,6 +1534,7 @@ private:
+@@ -1519,6 +1530,7 @@ private:
{
wxRect rectBack = rect;
if (row == pdi.groupLastRow - 1 /*last group item*/) //preserve the group separation line!
@@ -675,7 +656,7 @@ Message:
const ItemPathFormat defaultItemPathFormatLeftGrid = ItemPathFormat::relative;
--- a/FreeFileSync/Source/ui/main_dlg.cpp
+++ b/FreeFileSync/Source/ui/main_dlg.cpp
-@@ -3016,6 +3016,8 @@ void MainDialog::onGridLabelContextRim(G
+@@ -3034,6 +3034,8 @@ void MainDialog::onGridLabelContextRim(G
addFormatEntry(_("Item name" ), ItemPathFormat::name);
addFormatEntry(_("Relative path"), ItemPathFormat::relative);
addFormatEntry(_("Full path" ), ItemPathFormat::full);
@@ -686,7 +667,7 @@ Message:
auto setIconSize = [&](GridIconSize sz, bool showIcons)
--- a/FreeFileSync/Source/config.cpp
+++ b/FreeFileSync/Source/config.cpp
-@@ -476,6 +476,12 @@ void writeText(const ItemPathFormat& val
+@@ -506,6 +506,12 @@ void writeText(const ItemPathFormat& val
case ItemPathFormat::full:
output = "Full";
break;
@@ -699,7 +680,7 @@ Message:
}
}
-@@ -489,6 +495,10 @@ bool readText(const std::string& input,
+@@ -519,6 +525,10 @@ bool readText(const std::string& input,
value = ItemPathFormat::relative;
else if (tmp == "Full")
value = ItemPathFormat::full;
@@ -712,7 +693,7 @@ Message:
return true;
--- a/FreeFileSync/Source/ui/file_view.cpp
+++ b/FreeFileSync/Source/ui/file_view.cpp
-@@ -798,6 +798,7 @@ void FileView::sortView(ColumnTypeRim ty
+@@ -795,6 +795,7 @@ void FileView::sortView(ColumnTypeRim ty
break;
case ItemPathFormat::relative:
@@ -720,7 +701,7 @@ Message:
if ( ascending && onLeft) std::sort(sortedRef_.begin(), sortedRef_.end(), LessRelativeFolder<true, SelectSide::left >(folderPairs_));
else if ( ascending && !onLeft) std::sort(sortedRef_.begin(), sortedRef_.end(), LessRelativeFolder<true, SelectSide::right>(folderPairs_));
else if (!ascending && onLeft) std::sort(sortedRef_.begin(), sortedRef_.end(), LessRelativeFolder<false, SelectSide::left >(folderPairs_));
-@@ -805,6 +806,7 @@ void FileView::sortView(ColumnTypeRim ty
+@@ -802,6 +803,7 @@ void FileView::sortView(ColumnTypeRim ty
break;
case ItemPathFormat::full:
diff --git a/freefilesync/debian/patches/no-wx3.3.0.patch b/freefilesync/debian/patches/no-wx3.3.0.patch
new file mode 100644
index 0000000..b4770e5
--- /dev/null
+++ b/freefilesync/debian/patches/no-wx3.3.0.patch
@@ -0,0 +1,243 @@
+--- a/wx+/darkmode.h
++++ b/wx+/darkmode.h
+@@ -16,7 +16,8 @@ namespace zen
+ bool darkModeAvailable();
+
+ //support not only "dark mode" but dark themes in general
+-using ColorTheme = wxApp::Appearance; //why reinvent the wheel?
++enum Appearance { System, Light, Dark };
++using ColorTheme = Appearance; //why reinvent the wheel?
+
+ void colorThemeInit(wxApp& app, ColorTheme colTheme); //throw FileError
+ void colorThemeCleanup();
+--- a/FreeFileSync/Source/ui/cfg_grid.cpp
++++ b/FreeFileSync/Source/ui/cfg_grid.cpp
+@@ -531,7 +531,7 @@ private:
+ }
+ }
+
+- int getBestSize(const wxReadOnlyDC& dc, size_t row, ColumnType colType) override
++ int getBestSize(wxDC& dc, size_t row, ColumnType colType) override
+ {
+ // -> synchronize renderCell() <-> getBestSize()
+
+@@ -550,7 +550,7 @@ private:
+ return 0;
+ }
+
+- HoverArea getMouseHover(const wxReadOnlyDC& dc, size_t row, ColumnType colType, int cellRelativePosX, int cellWidth) override
++ HoverArea getMouseHover(wxDC& dc, size_t row, ColumnType colType, int cellRelativePosX, int cellWidth) override
+ {
+ if (const ConfigView::Details* item = cfgView_.getItem(row))
+ {
+--- a/FreeFileSync/Source/ui/file_grid.cpp
++++ b/FreeFileSync/Source/ui/file_grid.cpp
+@@ -559,7 +559,7 @@ private:
+ }
+
+
+- int getGroupItemNamesWidth(const wxReadOnlyDC& dc, const FileView::PathDrawInfo& pdi)
++ int getGroupItemNamesWidth(wxDC& dc, const FileView::PathDrawInfo& pdi)
+ {
+ //FileView::updateView() called? => invalidates group item render buffer
+ if (pdi.viewUpdateId != viewUpdateIdLast_)
+@@ -1157,7 +1157,7 @@ private:
+ }
+
+
+- HoverArea getMouseHover(const wxReadOnlyDC& dc, size_t row, ColumnType colType, int cellRelativePosX, int cellWidth) override
++ HoverArea getMouseHover(wxDC& dc, size_t row, ColumnType colType, int cellRelativePosX, int cellWidth) override
+ {
+ if (static_cast<ColumnTypeRim>(colType) == ColumnTypeRim::path)
+ if (const FileView::PathDrawInfo pdi = getDataView().getDrawInfo(row);
+@@ -1184,7 +1184,7 @@ private:
+ }
+
+
+- int getBestSize(const wxReadOnlyDC& dc, size_t row, ColumnType colType) override
++ int getBestSize(wxDC& dc, size_t row, ColumnType colType) override
+ {
+ if (static_cast<ColumnTypeRim>(colType) == ColumnTypeRim::path)
+ {
+@@ -1225,7 +1225,7 @@ private:
+ }
+ else
+ {
+- const wxReadOnlyDC& infoDc = dc;
++ const wxDC& infoDc = dc;
+ const std::wstring cellValue = getValue(row, colType);
+ return gapSize_ + infoDc.GetTextExtent(cellValue).GetWidth() + gapSize_;
+ }
+@@ -1625,7 +1625,7 @@ private:
+ }
+ }
+
+- HoverArea getMouseHover(const wxReadOnlyDC& dc, size_t row, ColumnType colType, int cellRelativePosX, int cellWidth) override
++ HoverArea getMouseHover(wxDC& dc, size_t row, ColumnType colType, int cellRelativePosX, int cellWidth) override
+ {
+ if (const FileSystemObject* const fsObj = getFsObject(row))
+ switch (static_cast<ColumnTypeCenter>(colType))
+--- a/FreeFileSync/Source/ui/log_panel.cpp
++++ b/FreeFileSync/Source/ui/log_panel.cpp
+@@ -245,7 +245,7 @@ public:
+ }
+ }
+
+- int getBestSize(const wxReadOnlyDC& dc, size_t row, ColumnType colType) override
++ int getBestSize(wxDC& dc, size_t row, ColumnType colType) override
+ {
+ // -> synchronize renderCell() <-> getBestSize()
+
+@@ -266,7 +266,7 @@ public:
+
+ static int getColumnTimeDefaultWidth(Grid& grid)
+ {
+- wxInfoDC dc(&grid.getMainWin());
++ wxClientDC dc(&grid.getMainWin());
+ dc.SetFont(grid.getMainWin().GetFont());
+ return 2 * getColumnGapLeft() + dc.GetTextExtent(utfTo<wxString>(formatTime(formatTimeTag))).GetWidth();
+ }
+--- a/FreeFileSync/Source/ui/rename_dlg.cpp
++++ b/FreeFileSync/Source/ui/rename_dlg.cpp
+@@ -155,7 +155,7 @@ public:
+ }
+ }
+
+- int getBestSize(const wxReadOnlyDC& dc, size_t row, ColumnType colType) override
++ int getBestSize(wxDC& dc, size_t row, ColumnType colType) override
+ {
+ // -> synchronize renderCell() <-> getBestSize()
+ return dc.GetTextExtent(getValue(row, colType)).GetWidth() + 2 * getColumnGapLeft() + dipToWxsize(1); //gap on left and right side + border
+--- a/FreeFileSync/Source/ui/tree_grid.cpp
++++ b/FreeFileSync/Source/ui/tree_grid.cpp
+@@ -932,7 +932,7 @@ private:
+ }
+ }
+
+- int getBestSize(const wxReadOnlyDC& dc, size_t row, ColumnType colType) override
++ int getBestSize(wxDC& dc, size_t row, ColumnType colType) override
+ {
+ // -> synchronize renderCell() <-> getBestSize() <-> getMouseHover()
+
+@@ -950,7 +950,7 @@ private:
+ 2 * gapSize_; //include gap from right!
+ }
+
+- HoverArea getMouseHover(const wxReadOnlyDC& dc, size_t row, ColumnType colType, int cellRelativePosX, int cellWidth) override
++ HoverArea getMouseHover(wxDC& dc, size_t row, ColumnType colType, int cellRelativePosX, int cellWidth) override
+ {
+ if (static_cast<ColumnTypeOverview>(colType) == ColumnTypeOverview::folder)
+ if (std::unique_ptr<TreeView::Node> node = getDataView().getLine(row))
+--- a/wx+/grid.cpp
++++ b/wx+/grid.cpp
+@@ -149,7 +149,7 @@ void GridData::renderCell(wxDC& dc, cons
+ }
+
+
+-int GridData::getBestSize(const wxReadOnlyDC& dc, size_t row, ColumnType colType)
++int GridData::getBestSize(const wxDC& dc, size_t row, ColumnType colType)
+ {
+ return dc.GetTextExtent(getValue(row, colType)).GetWidth() + 2 * getColumnGapLeft() + dipToWxsize(1); //gap on left and right side + border
+ }
+--- a/wx+/grid.h
++++ b/wx+/grid.h
+@@ -107,8 +107,8 @@ public:
+ virtual std::wstring getValue(size_t row, ColumnType colType) const = 0;
+ virtual void renderRowBackgound(wxDC& dc, const wxRect& rect, size_t row, bool enabled, bool selected, HoverArea rowHover); //default implementation
+ virtual void renderCell (wxDC& dc, const wxRect& rect, size_t row, ColumnType colType, bool enabled, bool selected, HoverArea rowHover);
+- virtual int getBestSize (const wxReadOnlyDC& dc, size_t row, ColumnType colType); //must correspond to renderCell()!
+- virtual HoverArea getMouseHover(const wxReadOnlyDC& dc, size_t row, ColumnType colType, int cellRelativePosX, int cellWidth) { return HoverArea::none; }
++ virtual int getBestSize (wxDC& dc, size_t row, ColumnType colType); //must correspond to renderCell()!
++ virtual HoverArea getMouseHover(wxDC& dc, size_t row, ColumnType colType, int cellRelativePosX, int cellWidth) { return HoverArea::none; }
+ virtual std::wstring getToolTip (size_t row, ColumnType colType, HoverArea rowHover) { return std::wstring(); }
+
+ //label area:
+--- a/FreeFileSync/Source/ui/gui_status_handler.cpp
++++ b/FreeFileSync/Source/ui/gui_status_handler.cpp
+@@ -70,27 +70,34 @@ void StatusHandlerTemporaryPanel::showSt
+ //case wxAUI_DOCK_CENTRE:
+ }
+
++ wxAuiPaneInfoArray& paneArray = mainDlg_.auiMgr_.GetAllPanes();
+ const bool statusRowTaken = [&]
+ {
+- for (wxAuiPaneInfo& paneInfo : mainDlg_.auiMgr_.GetAllPanes())
++ for (size_t i = 0; i < paneArray.size(); ++i)
++ {
++ const wxAuiPaneInfo& paneInfo = paneArray[i];
+ //doesn't matter if paneInfo.IsShown() or not! => move down in either case!
+ if (&paneInfo != &statusPanel &&
+ paneInfo.dock_layer == statusPanel.dock_layer &&
+ paneInfo.dock_direction == statusPanel.dock_direction &&
+ paneInfo.dock_row == statusPanel.dock_row)
+ return true;
++ }
+
+ return false;
+ }();
+
+ //move all rows that are in the way one step further
+ if (statusRowTaken)
+- for (wxAuiPaneInfo& paneInfo : mainDlg_.auiMgr_.GetAllPanes())
++ for (size_t i = 0; i < paneArray.size(); ++i)
++ {
++ wxAuiPaneInfo& paneInfo = paneArray[i];
+ if (&paneInfo != &statusPanel &&
+ paneInfo.dock_layer == statusPanel.dock_layer &&
+ paneInfo.dock_direction == statusPanel.dock_direction &&
+ paneInfo.dock_row >= statusPanel.dock_row)
+ ++paneInfo.dock_row;
++ }
+ //------------------------------------------------------------------
+
+ statusPanel.Show();
+--- a/FreeFileSync/Source/ui/main_dlg.cpp
++++ b/FreeFileSync/Source/ui/main_dlg.cpp
+@@ -1267,8 +1267,9 @@ void MainDialog::setGlobalCfgOnInit(cons
+
+ //work around wxAuiManager::LoadPerspective overwriting pane captions with old values (might be different language!)
+ std::vector<std::pair<wxAuiPaneInfo*, wxString>> paneCaptions;
+- for (wxAuiPaneInfo& paneInfo : auiMgr_.GetAllPanes())
+- paneCaptions.emplace_back(&paneInfo, paneInfo.caption);
++ wxAuiPaneInfoArray& paneArray = auiMgr_.GetAllPanes();
++ for (size_t i = 0; i < paneArray.size(); ++i)
++ paneCaptions.emplace_back(&paneArray[i], paneArray[i].caption);
+
+ //compare progress dialog minimum sizes are layout-dependent + can't be changed by user => don't load stale values from config
+ std::vector<std::tuple<wxAuiPaneInfo*, wxSize /*min size*/, wxSize /*best size*/>> paneConstraints;
+@@ -3137,7 +3138,14 @@ void MainDialog::onSetLayoutContext(wxMo
+
+ bool addedSeparator = false;
+
++#if wxCHECK_VERSION(3,3,0)
+ for (wxAuiPaneInfo& paneInfo : auiMgr_.GetAllPanes())
++#else
++ const wxAuiPaneInfoArray& paneArray = auiMgr_.GetAllPanes();
++ for (size_t i = 0; i < paneArray.size(); ++i)
++ {
++ wxAuiPaneInfo& paneInfo = paneArray[i];
++#endif
+ if (!paneInfo.IsShown() &&
+ paneInfo.window != compareStatus_->getAsWindow() &&
+ paneInfo.window != m_panelLog &&
+@@ -3155,6 +3163,9 @@ void MainDialog::onSetLayoutContext(wxMo
+ this->auiMgr_.Update();
+ });
+ }
++#if !wxCHECK_VERSION(3,3,0)
++ }
++#endif
+
+ menu.popup(*this);
+ }
+--- a/FreeFileSync/Source/ui/small_dlgs.cpp
++++ b/FreeFileSync/Source/ui/small_dlgs.cpp
+@@ -1519,7 +1519,7 @@ OptionsDlg::OptionsDlg(wxWindow* parent,
+
+ class : public wxGridColumnHeaderRendererDefault
+ {
+- void DrawHighlighted(const wxGrid& grid, wxDC& dc, wxRect& rect, int col, int flags) const override { DrawBorder(grid, dc, rect); }
++ void DrawHighlighted(const wxGrid& grid, wxDC& dc, wxRect& rect, int col, int flags) const { DrawBorder(grid, dc, rect); }
+ } colRenderNoHighlight_;
+ };
+ m_gridCustomCommand->GetTable()->SetAttrProvider(new wxGridCellAttrProviderNoColHighlight);
diff --git a/freefilesync/debian/patches/series b/freefilesync/debian/patches/series
index 4415360..f191540 100644
--- a/freefilesync/debian/patches/series
+++ b/freefilesync/debian/patches/series
@@ -14,3 +14,4 @@ disable_wxuse_Exceptions.patch
# makefile-improvements mostly combines wx-config-version, zlib-dep, pkg-config patches from bastif
makefile-improvements.patch
ffs_traditional_view.patch
+no-wx3.3.0.patch
bgstack15