diff options
-rw-r--r-- | freefilesync/debian/_service | 2 | ||||
-rw-r--r-- | freefilesync/debian/changelog | 18 | ||||
-rw-r--r-- | freefilesync/debian/freefilesync+stackrpms.dsc | 2 | ||||
-rw-r--r-- | freefilesync/debian/patches/ffs_no_check_updates.patch | 89 | ||||
-rw-r--r-- | freefilesync/debian/patches/ffs_tooltips_no_taskbar.patch | 8 | ||||
-rw-r--r-- | freefilesync/debian/patches/ffs_traditional_view.patch | 97 | ||||
-rw-r--r-- | freefilesync/debian/patches/no-wx3.3.0.patch | 243 | ||||
-rw-r--r-- | freefilesync/debian/patches/series | 1 |
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 |