diff options
Diffstat (limited to 'freefilesync')
-rw-r--r-- | freefilesync/debian/changelog | 32 | ||||
-rw-r--r-- | freefilesync/debian/freefilesync+devuan.dsc | 2 | ||||
-rw-r--r-- | freefilesync/debian/patches/ffs_devuan_gtk3.patch | 17 | ||||
-rw-r--r-- | freefilesync/debian/patches/ffs_no_check_updates.patch | 40 | ||||
-rw-r--r-- | freefilesync/debian/patches/ffs_traditional_view.patch | 275 | ||||
-rw-r--r-- | freefilesync/debian/patches/revert_zenju_aggressive_upstreamisms.patch | 222 | ||||
-rw-r--r-- | freefilesync/debian/patches/series | 1 |
7 files changed, 551 insertions, 38 deletions
diff --git a/freefilesync/debian/changelog b/freefilesync/debian/changelog index 4b1a593..fbdcbf7 100644 --- a/freefilesync/debian/changelog +++ b/freefilesync/debian/changelog @@ -1,3 +1,35 @@ +freefilesync (11.1-2+devuan) obs; urgency=low + + * add traditional option to main grid view + + -- Ben Stack <bgstack15@gmail.com> Sun, 06 Sep 2020 20:59:36 -0400 + +freefilesync (11.1-1+devuan) obs; urgency=low + + * [bgstack15] still has the broken file tree layout + * New file group layout on main grid (reloaded) + * Alternate colors for main grid folder groups + * Added file group context menu + * Quick selection of items in folder group + * Fixed FTP access errors with Explicit SSL/TLS + * Fixed Google Drive error when double quotes in file name + * Fixed RTL layout bug with number input control + * Fixed grid column default sizes + * Fixed grid rendering performance during mouse scrolling + * Update all config files transactionally + * Respect user-preferred number/time format (Linux) + * Fixed floating panels not being resizable (Linux) + * Instantly open selection context menu on right mouse button down + * Further improved high DPI support + * Updated deprecated system API calls (requires macOS 10.10 or later) + * Fixed crash when accessing Nexis storage (macOS) + * Avoid buffer flush when aborting native file output + * Clear preview after folder history selection + * Pre-allocate target file without setting size + * Unified system error message formatting + + -- Ben Stack <bgstack15@gmail.com> Tue, 01 Sep 2020 20:33:42 -0400 + freefilesync (11.0-1+devuan) obs; urgency=medium * Revised file layout on main grid diff --git a/freefilesync/debian/freefilesync+devuan.dsc b/freefilesync/debian/freefilesync+devuan.dsc index 32c4ba9..e6a707d 100644 --- a/freefilesync/debian/freefilesync+devuan.dsc +++ b/freefilesync/debian/freefilesync+devuan.dsc @@ -2,7 +2,7 @@ Format: 3.0 (quilt) Source: freefilesync Binary: freefilesync Architecture: any -Version: 11.0-1+devuan +Version: 11.1-2+devuan Maintainer: B Stack <bgstack15@gmail.com> Homepage: https://freefilesync.org/ Standards-Version: 4.1.4 diff --git a/freefilesync/debian/patches/ffs_devuan_gtk3.patch b/freefilesync/debian/patches/ffs_devuan_gtk3.patch index 16268d1..8a5e83e 100644 --- a/freefilesync/debian/patches/ffs_devuan_gtk3.patch +++ b/freefilesync/debian/patches/ffs_devuan_gtk3.patch @@ -1,8 +1,7 @@ Author: B Stack Source: Original research -Date: 2020-03-18 -Message: Main patch to compile on Devuan using GTK3. BROKEN for FreeFileSync 10.21! -This reintroduces the gtk-3 usage, because Debian/Devuan stopped packaging libwxgtk3.0-dev (which used gtk2) and only does libwxgtk3.0-gtk3-dev. However, by reintroducing the gtk3, it brings back the old gtk3 instability from my previous packaging effort: https://freefilesync.org/forum/viewtopic.php?t=4918. /mnt/public/packages/old/freefilesync/freefilesync-9.7-1.master.tgz. Upstream never replied, but did note in the source that gtk3 is inherently unstable. +Date: 2020-08-31 +Message: Main patch to compile on Devuan using GTK3. diff -x '*.swp' -x '.git*' -x '*.orig' -x '*.rej' -Naur 10.18-0/FreeFileSync/Source/Makefile 10.18-1/FreeFileSync/Source/Makefile --- 10.11-0/FreeFileSync/Source/Makefile 2019-04-12 08:05:57.000000000 -0400 +++ 10.18-1/FreeFileSync/Source/Makefile 2019-11-21 09:42:57.408243242 -0500 @@ -35,15 +34,3 @@ diff -x '*.rej' -x '*.orig' -x '*.git*' -Naur 10.24-0/FreeFileSync/Source/RealTi cppFiles= cppFiles+=application.cpp -diff -x '*.swp' -x '.git*' -x '*.orig' -x '*.rej' -Naur 10.18-0/wx+/dc.h 10.18-1/wx+/dc.h ---- 10.18-0/wx+/dc.h 2019-11-21 08:24:23.967769384 -0500 -+++ 10.18-1/wx+/dc.h 2019-11-21 09:42:12.779786504 -0500 -@@ -54,7 +54,7 @@ - #ifdef wxHAVE_DPI_INDEPENDENT_PIXELS //pulled from wx/window.h: https://github.com/wxWidgets/wxWidgets/blob/master/include/wx/window.h#L2029 - return d; //e.g. macOS, GTK3 - #else //https://github.com/wxWidgets/wxWidgets/blob/master/src/common/wincmn.cpp#L2865 -- static_assert(GTK_MAJOR_VERSION == 2); -+ static_assert(GTK_MAJOR_VERSION == 3); - //GTK2 doesn't properly support high DPI: https://freefilesync.org/forum/viewtopic.php?t=6114 - //=> requires general fix at wxWidgets-level - assert(wxTheApp); //only call after wxWidgets was initalized! diff --git a/freefilesync/debian/patches/ffs_no_check_updates.patch b/freefilesync/debian/patches/ffs_no_check_updates.patch index 62f4e7e..fcbeb97 100644 --- a/freefilesync/debian/patches/ffs_no_check_updates.patch +++ b/freefilesync/debian/patches/ffs_no_check_updates.patch @@ -1,7 +1,7 @@ -diff --exclude '*.orig' -Naur 10.14-0/FreeFileSync/Source/ui/main_dlg.cpp 10.14-1/FreeFileSync/Source/ui/main_dlg.cpp ---- 10.9-0/FreeFileSync/Source/ui/main_dlg.cpp 2019-02-10 22:01:42.029158919 -0500 -+++ 11.0-1/FreeFileSync/Source/ui/main_dlg.cpp 2020-07-22 11:49:13.747407290 -0400 -@@ -5538,7 +5538,7 @@ +diff -x '*.orig' -x '*.rej' -Naur 11.1-0/FreeFileSync/Source/ui/main_dlg.cpp 11.1-1/FreeFileSync/Source/ui/main_dlg.cpp +--- 11.1-0/FreeFileSync/Source/ui/main_dlg.cpp 2020-08-31 20:04:21.621863187 -0400 ++++ 11.1-1/FreeFileSync/Source/ui/main_dlg.cpp 2020-08-31 20:55:07.732089665 -0400 +@@ -5606,7 +5606,7 @@ globalCfg_.gui.lastUpdateCheck = 0; //reset to GlobalSettings.xml default value! m_menuItemCheckVersionAuto->Check(updateCheckActive(globalCfg_.gui.lastUpdateCheck)); @@ -10,7 +10,7 @@ diff --exclude '*.orig' -Naur 10.14-0/FreeFileSync/Source/ui/main_dlg.cpp 10.14- if (shouldRunAutomaticUpdateCheck(globalCfg_.gui.lastUpdateCheck)) { flashStatusInformation(_("Searching for program updates...")); -@@ -5546,6 +5546,7 @@ +@@ -5614,6 +5614,7 @@ automaticUpdateCheckEval(this, globalCfg_.gui.lastUpdateCheck, globalCfg_.gui.lastOnlineVersion, automaticUpdateCheckRunAsync(automaticUpdateCheckPrepare(*this).get()).get()); } @@ -18,16 +18,15 @@ diff --exclude '*.orig' -Naur 10.14-0/FreeFileSync/Source/ui/main_dlg.cpp 10.14- } -@@ -5553,7 +5554,7 @@ - { - //execute just once per startup! - Disconnect(wxEVT_IDLE, wxIdleEventHandler(MainDialog::OnRegularUpdateCheck), nullptr, this); -- +@@ -5623,6 +5624,7 @@ + [[maybe_unused]] bool ubOk = Unbind(wxEVT_IDLE, &MainDialog::onRegularUpdateCheck, this); + assert(ubOk); + + /* if (shouldRunAutomaticUpdateCheck(globalCfg_.gui.lastUpdateCheck)) { flashStatusInformation(_("Searching for program updates...")); -@@ -5567,6 +5568,7 @@ +@@ -5636,6 +5638,7 @@ resultAsync.get()); //run on main thread: }); } @@ -35,10 +34,10 @@ diff --exclude '*.orig' -Naur 10.14-0/FreeFileSync/Source/ui/main_dlg.cpp 10.14- } -diff --exclude '*.orig' -Naur 10.14-0/FreeFileSync/Source/ui/version_check.cpp 10.14-1/FreeFileSync/Source/ui/version_check.cpp ---- 10.9-0/FreeFileSync/Source/ui/version_check.cpp 2019-02-10 22:01:42.126160041 -0500 -+++ 11.0-1/FreeFileSync/Source/ui/version_check.cpp 2020-07-22 11:43:36.895201090 -0400 -@@ -69,6 +69,8 @@ +diff -x '*.orig' -x '*.rej' -Naur 11.1-0/FreeFileSync/Source/ui/version_check.cpp 11.1-1/FreeFileSync/Source/ui/version_check.cpp +--- 11.1-0/FreeFileSync/Source/ui/version_check.cpp 2020-08-31 20:04:21.573862614 -0400 ++++ 11.1-1/FreeFileSync/Source/ui/version_check.cpp 2020-08-31 20:48:08.102811585 -0400 +@@ -70,6 +70,8 @@ bool fff::shouldRunAutomaticUpdateCheck(time_t lastUpdateCheck) { @@ -47,7 +46,7 @@ diff --exclude '*.orig' -Naur 10.14-0/FreeFileSync/Source/ui/version_check.cpp 1 if (lastUpdateCheck == getVersionCheckInactiveId()) return false; -@@ -159,8 +161,7 @@ +@@ -155,8 +157,7 @@ { try { @@ -56,8 +55,8 @@ diff --exclude '*.orig' -Naur 10.14-0/FreeFileSync/Source/ui/version_check.cpp 1 + const std::string buf = ""; updateDetailsMsg = utfTo<std::wstring>(buf); } - catch (const zen::SysError& e) { throw FileError(_("Failed to retrieve update information."), e.toString()); } -@@ -189,8 +190,7 @@ + catch (const SysError& e) { throw FileError(_("Failed to retrieve update information."), e.toString()); } +@@ -185,8 +186,7 @@ std::string getOnlineVersion(const std::vector<std::pair<std::string, std::string>>& postParams) //throw SysError { @@ -67,7 +66,7 @@ diff --exclude '*.orig' -Naur 10.14-0/FreeFileSync/Source/ui/version_check.cpp 1 return trimCpy(response); } -@@ -237,13 +237,13 @@ +@@ -233,13 +233,13 @@ const std::string onlineVersion = getOnlineVersion(geHttpPostParameters(parent)); //throw SysError lastOnlineVersion = onlineVersion; @@ -83,6 +82,5 @@ diff --exclude '*.orig' -Naur 10.14-0/FreeFileSync/Source/ui/version_check.cpp 1 - setMainInstructions(_("FreeFileSync is up to date."))); + setMainInstructions(_("Use your package manager for any updates to FreeFileSync."))); } - catch (const zen::SysError& e) + catch (const SysError& e) { - diff --git a/freefilesync/debian/patches/ffs_traditional_view.patch b/freefilesync/debian/patches/ffs_traditional_view.patch new file mode 100644 index 0000000..e602033 --- /dev/null +++ b/freefilesync/debian/patches/ffs_traditional_view.patch @@ -0,0 +1,275 @@ +diff --git a/FreeFileSync/Source/ui/file_grid.cpp b/FreeFileSync/Source/ui/file_grid.cpp +index 4ee72b97..d9b9a4c7 100644 +--- a/FreeFileSync/Source/ui/file_grid.cpp ++++ b/FreeFileSync/Source/ui/file_grid.cpp +@@ -437,6 +437,7 @@ private: + case ItemPathFormat::relative: + return utfTo<std::wstring>(fsObj->getRelativePath<side>()); + case ItemPathFormat::full: ++ case ItemPathFormat::traditional: + return AFS::getDisplayPath(fsObj->getAbstractPath<side>()); + } + assert(false); +@@ -615,6 +616,16 @@ private: + else //=> BaseFolderPair + groupParentFolder = AFS::getDisplayPath(pdi.fsObj->base().getAbstractPath<side>()); + break; ++ case ItemPathFormat::traditional: ++ if (auto groupFolder = dynamic_cast<const FolderPair*>(pdi.folderGroupObj)) ++ { ++ groupName = utfTo<std::wstring>(groupFolder->template getItemName<side>()); ++ groupParentFolder = AFS::getDisplayPath(groupFolder->parent().template getAbstractPath<side>()) + \ ++ FILE_NAME_SEPARATOR + utfTo<std::wstring>(groupFolder->template getItemName<side>()); ++ } ++ else //=> BaseFolderPair ++ groupParentFolder = AFS::getDisplayPath(pdi.fsObj->base().getAbstractPath<side>()); ++ break; + } + //add slashes for better readability + assert(!contains(groupParentFolder, L'/') || !contains(groupParentFolder, L'\\')); +@@ -650,72 +661,84 @@ private: + int widthGroupName = groupName .empty() ? 0 : ((iconMgr ? iconSize + gridGap_ : 0) + getTextExtentBuffered(dc, groupName).x + (iconMgr ? gridGap_ : 0)); + int widthGroupItems = (iconMgr ? iconSize + gridGap_ : 0) + groupItemNamesWidth; + +- //not enough space? => collapse +- if (int excessWidth = gridGap_ + widthGroupParent + widthGroupName + widthGroupItems - maxWidth; +- excessWidth > 0) ++ switch (itemPathFormat_) + { +- if (multiItemGroup && !groupParentFolder.empty() && !groupName.empty()) +- { +- //1. render group components on two rows +- stackedGroupRender = true; +- +- if (!endsWith(groupParentFolder, L'/' ) && +- !endsWith(groupParentFolder, L'\\')) +- groupParentFolder += groupParentSep; +- groupParentFolder += ELLIPSIS; +- +- widthGroupParent = getTextExtentBuffered(dc, groupParentFolder).x + gridGap_; +- +- int widthGroupStack = std::max(widthGroupParent, widthGroupName); +- excessWidth = gridGap_ + widthGroupStack + widthGroupItems - maxWidth; +- +- if (excessWidth > 0) +- { +- //2. shrink group stack (group parent only) +- if (widthGroupParent > widthGroupName) +- { +- widthGroupStack = widthGroupParent = std::max(widthGroupParent - excessWidth, widthGroupName); +- excessWidth = gridGap_ + widthGroupStack + widthGroupItems - maxWidth; +- } +- if (excessWidth > 0) +- { +- //3. shrink item rendering +- widthGroupItems = std::max(widthGroupItems - excessWidth, (iconMgr ? iconSize + gridGap_ : 0) + ellipsisWidth); +- excessWidth = gridGap_ + widthGroupStack + widthGroupItems - maxWidth; +- +- if (excessWidth > 0) +- { +- //4. shrink group stack +- widthGroupStack = std::max(widthGroupStack - excessWidth, (iconMgr ? iconSize + gridGap_ : 0) + ellipsisWidth + (iconMgr ? gridGap_ : 0)); +- +- widthGroupParent = std::min(widthGroupParent, widthGroupStack); +- widthGroupName = std::min(widthGroupName, widthGroupStack); +- } +- } +- } +- } +- else //group details on single row +- { +- //1. shrink group parent +- if (!groupParentFolder.empty()) +- { +- widthGroupParent = std::max(widthGroupParent - excessWidth, ellipsisWidth + (iconMgr ? gridGap_ : 0)); +- excessWidth = gridGap_ + widthGroupParent + widthGroupName + widthGroupItems - maxWidth; +- } +- if (excessWidth > 0) +- { +- //2. shrink item rendering +- widthGroupItems = std::max(widthGroupItems - excessWidth, (iconMgr ? iconSize + gridGap_ : 0) + ellipsisWidth); +- excessWidth = gridGap_ + widthGroupParent + widthGroupName + widthGroupItems - maxWidth; +- +- if (excessWidth > 0) +- //3. shrink group name +- if (!groupName.empty()) +- widthGroupName = std::max(widthGroupName - excessWidth, (iconMgr ? iconSize + gridGap_ : 0) + ellipsisWidth + (iconMgr ? gridGap_ : 0)); +- } +- } ++ case ItemPathFormat::traditional: ++ //widthGroupName = 0; ++ widthGroupParent -= widthGroupName ; ++ break; ++ case ItemPathFormat::name: ++ case ItemPathFormat::relative: ++ case ItemPathFormat::full: ++ default: ++ // the insane logic of the new views ++ //not enough space? => collapse ++ if (int excessWidth = gridGap_ + widthGroupParent + widthGroupName + widthGroupItems - maxWidth; ++ excessWidth > 0) ++ { ++ if (multiItemGroup && !groupParentFolder.empty() && !groupName.empty()) ++ { ++ //1. render group components on two rows ++ stackedGroupRender = true; ++ ++ if (!endsWith(groupParentFolder, L'/' ) && ++ !endsWith(groupParentFolder, L'\\')) ++ groupParentFolder += groupParentSep; ++ groupParentFolder += ELLIPSIS; ++ ++ widthGroupParent = getTextExtentBuffered(dc, groupParentFolder).x + gridGap_; ++ ++ int widthGroupStack = std::max(widthGroupParent, widthGroupName); ++ excessWidth = gridGap_ + widthGroupStack + widthGroupItems - maxWidth; ++ ++ if (excessWidth > 0) ++ { ++ //2. shrink group stack (group parent only) ++ if (widthGroupParent > widthGroupName) ++ { ++ widthGroupStack = widthGroupParent = std::max(widthGroupParent - excessWidth, widthGroupName); ++ excessWidth = gridGap_ + widthGroupStack + widthGroupItems - maxWidth; ++ } ++ if (excessWidth > 0) ++ { ++ //3. shrink item rendering ++ widthGroupItems = std::max(widthGroupItems - excessWidth, (iconMgr ? iconSize + gridGap_ : 0) + ellipsisWidth); ++ excessWidth = gridGap_ + widthGroupStack + widthGroupItems - maxWidth; ++ ++ if (excessWidth > 0) ++ { ++ //4. shrink group stack ++ widthGroupStack = std::max(widthGroupStack - excessWidth, (iconMgr ? iconSize + gridGap_ : 0) + ellipsisWidth + (iconMgr ? gridGap_ : 0)); ++ ++ widthGroupParent = std::min(widthGroupParent, widthGroupStack); ++ widthGroupName = std::min(widthGroupName, widthGroupStack); ++ } ++ } ++ } ++ } ++ else //group details on single row ++ { ++ //1. shrink group parent ++ if (!groupParentFolder.empty()) ++ { ++ widthGroupParent = std::max(widthGroupParent - excessWidth, ellipsisWidth + (iconMgr ? gridGap_ : 0)); ++ excessWidth = gridGap_ + widthGroupParent + widthGroupName + widthGroupItems - maxWidth; ++ } ++ if (excessWidth > 0) ++ { ++ //2. shrink item rendering ++ widthGroupItems = std::max(widthGroupItems - excessWidth, (iconMgr ? iconSize + gridGap_ : 0) + ellipsisWidth); ++ excessWidth = gridGap_ + widthGroupParent + widthGroupName + widthGroupItems - maxWidth; ++ ++ if (excessWidth > 0) ++ //3. shrink group name ++ if (!groupName.empty()) ++ widthGroupName = std::max(widthGroupName - excessWidth, (iconMgr ? iconSize + gridGap_ : 0) + ellipsisWidth + (iconMgr ? gridGap_ : 0)); ++ } ++ } ++ } ++ break; + } +- + return + { + itemName, +@@ -786,6 +809,9 @@ private: + rectGroup = rectGroupParent = rectGroupName = rectTmp; + + rectGroupParent.width = widthGroupParent; ++ // re-add back the width of groupname so that the directory name is clickable ++ if (itemPathFormat_ == ItemPathFormat::traditional) ++ rectGroupParent.width += widthGroupName; + rectGroupName .width = widthGroupName; + + if (stackedGroupRender) +@@ -837,7 +863,7 @@ private: + dc.GradientFillLinear(rectNav, getColorSelectionGradientFrom(), backCol, wxEAST); + } + +- if (!groupName.empty() && row == groupBeginRow) ++ if (!(itemPathFormat_ == ItemPathFormat::traditional) && !groupName.empty() && row == groupBeginRow) + { + wxDCTextColourChanger textColorGroupName(dc); + if (static_cast<HoverAreaGroup>(rowHover) == HoverAreaGroup::groupName) +@@ -855,9 +881,9 @@ private: + drawCellText(dc, rectGroupName, groupName, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL, &getTextExtentBuffered(dc, groupName)); + } + +- if (!groupParentFolder.empty() && ++ if (itemPathFormat_ == ItemPathFormat::traditional || (!groupParentFolder.empty() && + ((stackedGroupRender && row == groupBeginRow + 1) || +- (!stackedGroupRender && row == groupBeginRow))) ++ (!stackedGroupRender && row == groupBeginRow)))) + { + drawCellText(dc, rectGroupParent, groupParentFolder, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL, &getTextExtentBuffered(dc, groupParentFolder)); + } +@@ -1020,6 +1046,8 @@ private: + return _("Relative path"); + case ItemPathFormat::full: + return _("Full path"); ++ case ItemPathFormat::traditional: ++ return _("Traditional"); + } + assert(false); + break; +diff --git a/FreeFileSync/Source/ui/file_grid_attr.h b/FreeFileSync/Source/ui/file_grid_attr.h +index 324619c1..7511a1ab 100644 +--- a/FreeFileSync/Source/ui/file_grid_attr.h ++++ b/FreeFileSync/Source/ui/file_grid_attr.h +@@ -79,6 +79,7 @@ enum class ItemPathFormat + name, + relative, + full, ++ traditional, + }; + + const ItemPathFormat defaultItemPathFormatLeftGrid = ItemPathFormat::relative; +diff --git a/FreeFileSync/Source/ui/main_dlg.cpp b/FreeFileSync/Source/ui/main_dlg.cpp +index 491b7321..2d5c20c3 100644 +--- a/FreeFileSync/Source/ui/main_dlg.cpp ++++ b/FreeFileSync/Source/ui/main_dlg.cpp +@@ -2716,6 +2716,7 @@ void MainDialog::onGridLabelContextRim(bool leftSide) + addFormatEntry(_("Item name" ), ItemPathFormat::name); + addFormatEntry(_("Relative path"), ItemPathFormat::relative); + addFormatEntry(_("Full path" ), ItemPathFormat::full); ++ addFormatEntry(_("Traditional" ), ItemPathFormat::traditional); + + //---------------------------------------------------------------------------------------------- + menu.addSeparator(); +diff -x .git -Naur 11.1-1/FreeFileSync/Source/config.cpp 11.1-2/FreeFileSync/Source/config.cpp +--- 11.1-1/FreeFileSync/Source/config.cpp 2020-09-01 19:07:43.715122167 -0400 ++++ 11.1-2/FreeFileSync/Source/config.cpp 2020-09-10 09:38:14.539542699 -0400 +@@ -528,6 +528,9 @@ + case ItemPathFormat::full: + output = "Full"; + break; ++ case ItemPathFormat::traditional: ++ output = "Traditional"; ++ break; + } + } + +@@ -541,6 +545,8 @@ + value = ItemPathFormat::relative; + else if (tmp == "Full") + value = ItemPathFormat::full; ++ else if (tmp == "Traditional") ++ value = ItemPathFormat::traditional; + else + return false; + return true; +diff -x .git -Naur 11.1-1/FreeFileSync/Source/ui/file_view.cpp 11.1-2/FreeFileSync/Source/ui/file_view.cpp +--- 11.1-1/FreeFileSync/Source/ui/file_view.cpp 2020-09-01 19:07:43.719122215 -0400 ++++ 11.1-2/FreeFileSync/Source/ui/file_view.cpp 2020-09-10 09:40:11.609044834 -0400 +@@ -798,6 +798,7 @@ + break; + + case ItemPathFormat::full: ++ case ItemPathFormat::traditional: + if ( ascending && onLeft) std::sort(sortedRef_.begin(), sortedRef_.end(), LessFullPath<true, LEFT_SIDE>(folderPairs_)); + else if ( ascending && !onLeft) std::sort(sortedRef_.begin(), sortedRef_.end(), LessFullPath<true, RIGHT_SIDE>(folderPairs_)); + else if (!ascending && onLeft) std::sort(sortedRef_.begin(), sortedRef_.end(), LessFullPath<false, LEFT_SIDE>(folderPairs_)); diff --git a/freefilesync/debian/patches/revert_zenju_aggressive_upstreamisms.patch b/freefilesync/debian/patches/revert_zenju_aggressive_upstreamisms.patch index 8ca60c2..12a1b43 100644 --- a/freefilesync/debian/patches/revert_zenju_aggressive_upstreamisms.patch +++ b/freefilesync/debian/patches/revert_zenju_aggressive_upstreamisms.patch @@ -77,7 +77,7 @@ diff -x '*.rej' -x '*.orig' -x '*.git*' -Naur 10.24-0/wx+/choice_enum.h 10.24-1/ - const int selectedPos = ctrl.GetSelection(); + const Enum currentValue = getEnumVal(mapping, ctrl); -- if (0 <= selectedPos && selectedPos < static_cast<int>(mapping.descrList.size())) +- if (0 <= selectedPos && selectedPos < std::ssize(mapping.descrList)) - { - if (const auto& [text, tooltip] = mapping.descrList[selectedPos].second; - !tooltip.empty()) @@ -92,3 +92,223 @@ diff -x '*.rej' -x '*.orig' -x '*.git*' -Naur 10.24-0/wx+/choice_enum.h 10.24-1/ } } + +Version: 11.1 +Message: this one is really just a fix of Zenju's sloppy Makefile. He'll figure it out on his own for v11.2. If I tell him now, he'll replace the source tarball for 11.1 which will mess up everyone's checksums. +diff -x '*.orig' -x '*.rej' -aur 11.1-1/FreeFileSync/Source/Makefile 11.1-2/FreeFileSync/Source/Makefile +--- 11.1-1/FreeFileSync/Source/Makefile 2020-09-01 20:07:26.751011466 -0400 ++++ 11.1-2/FreeFileSync/Source/Makefile 2020-09-01 20:17:31.030611773 -0400 +@@ -95,6 +95,7 @@ + cppFiles+=../../zen/shutdown.cpp + cppFiles+=../../zen/sys_error.cpp + cppFiles+=../../zen/sys_info.cpp ++cppFiles+=../../zen/sys_version.cpp + cppFiles+=../../zen/thread.cpp + cppFiles+=../../zen/zlib_wrap.cpp + cppFiles+=../../wx+/file_drop.cpp +Message: Now have to revert wxWidgets 3.1.4 upstreamisms +cd 11.1-0 ; git diff HEAD~1 -- $( grep -l -rIE 'wxASCII_STR' ) > ~/foo1 ; ( cd ../11.1-2 ; vi ~/foo1 $( grep -l -rIE 'wxASCII_STR' ) ; ) +cd 11.1-0 ; git diff HEAD~1 -- $( grep -l -rIE 'wxDD_SHOW_HIDDEN' ) > ~/foo1 ; ( cd ../11.1-2 ; vi ~/foo1 $( grep -l -rIE 'wxDD_SHOW_HIDDEN' ) ; ) +diff -x '*.orig' -x '*.rej' -aur 11.1-1/FreeFileSync/Source/RealTimeSync/folder_selector2.cpp 11.1-2/FreeFileSync/Source/RealTimeSync/folder_selector2.cpp +--- 11.1-1/FreeFileSync/Source/RealTimeSync/folder_selector2.cpp 2020-09-01 19:07:43.703122022 -0400 ++++ 11.1-2/FreeFileSync/Source/RealTimeSync/folder_selector2.cpp 2020-09-01 20:13:16.679447647 -0400 +@@ -145,7 +145,7 @@ + } + + Zstring newFolderPath; +- wxDirDialog dirPicker(parent_, _("Select a folder"), utfTo<wxString>(defaultFolderPath), wxDD_DEFAULT_STYLE | wxDD_SHOW_HIDDEN); ++ wxDirDialog dirPicker(parent_, _("Select a folder"), utfTo<wxString>(defaultFolderPath)); //put modal wxWidgets dialogs on stack: creating on freestore leads to memleak! + if (dirPicker.ShowModal() != wxID_OK) + return; + newFolderPath = utfTo<Zstring>(dirPicker.GetPath()); +diff -x '*.orig' -x '*.rej' -aur 11.1-1/FreeFileSync/Source/ui/command_box.h 11.1-2/FreeFileSync/Source/ui/command_box.h +--- 11.1-1/FreeFileSync/Source/ui/command_box.h 2020-09-01 19:07:43.719122215 -0400 ++++ 11.1-2/FreeFileSync/Source/ui/command_box.h 2020-09-01 20:09:56.840929352 -0400 +@@ -30,7 +30,7 @@ + const wxString choices[] = nullptr, + long style = 0, + const wxValidator& validator = wxDefaultValidator, +- const wxString& name = wxASCII_STR(wxComboBoxNameStr)); ++ const wxString& name = wxComboBoxNameStr); + + void setHistory(const std::vector<Zstring>& history, size_t historyMax) { history_ = history; historyMax_ = historyMax; } + std::vector<Zstring> getHistory() const { return history_; } +diff -x '*.orig' -x '*.rej' -aur 11.1-1/FreeFileSync/Source/ui/folder_history_box.h 11.1-2/FreeFileSync/Source/ui/folder_history_box.h +--- 11.1-1/FreeFileSync/Source/ui/folder_history_box.h 2020-09-01 19:07:43.719122215 -0400 ++++ 11.1-2/FreeFileSync/Source/ui/folder_history_box.h 2020-09-01 20:09:50.624849989 -0400 +@@ -68,7 +68,7 @@ + const wxString choices[] = nullptr, + long style = 0, + const wxValidator& validator = wxDefaultValidator, +- const wxString& name = wxASCII_STR(wxComboBoxNameStr)); ++ const wxString& name = wxComboBoxNameStr); + + void setHistory(std::shared_ptr<HistoryList> sharedHistory) { sharedHistory_ = std::move(sharedHistory); } + std::shared_ptr<HistoryList> getHistory() { return sharedHistory_; } +diff -x '*.orig' -x '*.rej' -aur 11.1-1/FreeFileSync/Source/ui/folder_selector.cpp 11.1-2/FreeFileSync/Source/ui/folder_selector.cpp +--- 11.1-1/FreeFileSync/Source/ui/folder_selector.cpp 2020-09-01 20:07:25.907000676 -0400 ++++ 11.1-2/FreeFileSync/Source/ui/folder_selector.cpp 2020-09-01 20:13:48.791852316 -0400 +@@ -227,9 +227,10 @@ + } + + Zstring shellItemPath; +- wxDirDialog dirPicker(parent_, _("Select a folder"), utfTo<wxString>(defaultFolderPath), wxDD_DEFAULT_STYLE | wxDD_SHOW_HIDDEN); +- //GTK2: "Show hidden" is also available as a context menu option in the folder picker! +- //It looks like wxDD_SHOW_HIDDEN only sets the default when opening for the first time!? ++ wxDirDialog dirPicker(parent_, _("Select a folder"), utfTo<wxString>(defaultFolderPath)); //put modal wxWidgets dialogs on stack: creating on freestore leads to memleak! ++ ++ //-> following doesn't seem to do anything at all! still "Show hidden" is available as a context menu option: ++ //::gtk_file_chooser_set_show_hidden(GTK_FILE_CHOOSER(dirPicker.m_widget), true /*show_hidden*/); + + if (dirPicker.ShowModal() != wxID_OK) + return; +diff -x '*.orig' -x '*.rej' -aur 11.1-1/wx+/bitmap_button.h 11.1-2/wx+/bitmap_button.h +--- 11.1-1/wx+/bitmap_button.h 2020-09-01 19:07:43.727122311 -0400 ++++ 11.1-2/wx+/bitmap_button.h 2020-09-01 20:10:31.385364671 -0400 +@@ -26,7 +26,7 @@ + const wxSize& size = wxDefaultSize, + long style = 0, + const wxValidator& validator = wxDefaultValidator, +- const wxString& name = wxASCII_STR(wxButtonNameStr)) : ++ const wxString& name = wxButtonNameStr) : + wxBitmapButton(parent, id, wxNullBitmap, pos, size, style, validator, name) + { + SetLabel(label); +diff -x '*.orig' -x '*.rej' -aur 11.1-1/wx+/dc.h 11.1-2/wx+/dc.h +--- 11.1-1/wx+/dc.h 2020-09-01 19:09:33.652448178 -0400 ++++ 11.1-2/wx+/dc.h 2020-09-01 20:08:43.183988180 -0400 +@@ -68,9 +68,6 @@ + inline + int fastFromDIP(int d) //like wxWindow::FromDIP (but tied to primary monitor and buffered) + { +-#ifndef wxHAVE_DPI_INDEPENDENT_PIXELS +-#error why is wxHAVE_DPI_INDEPENDENT_PIXELS not defined? +-#endif + //GTK2 doesn't properly support high DPI: https://freefilesync.org/forum/viewtopic.php?t=6114 + //=> requires general fix at wxWidgets-level + +diff -x '*.orig' -x '*.rej' -aur 11.1-1/wx+/graph.h 11.1-2/wx+/graph.h +--- 11.1-1/wx+/graph.h 2020-09-01 19:07:43.731122359 -0400 ++++ 11.1-2/wx+/graph.h 2020-09-01 20:10:36.541429649 -0400 +@@ -153,7 +153,7 @@ + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = wxTAB_TRAVERSAL | wxNO_BORDER, +- const wxString& name = wxASCII_STR(wxPanelNameStr)); ++ const wxString& name = wxPanelNameStr); + + class CurveAttributes + { +diff -x '*.orig' -x '*.rej' -aur 11.1-1/wx+/grid.cpp 11.1-2/wx+/grid.cpp +--- 11.1-1/wx+/grid.cpp 2020-09-01 20:07:24.418981662 -0400 ++++ 11.1-2/wx+/grid.cpp 2020-09-01 20:10:23.745268393 -0400 +@@ -268,7 +268,7 @@ + { + public: + SubWindow(Grid& parent) : +- wxWindow(&parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxWANTS_CHARS | wxBORDER_NONE, wxASCII_STR(wxPanelNameStr)), ++ wxWindow(&parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxWANTS_CHARS | wxBORDER_NONE, wxPanelNameStr), + parent_(parent) + { + Bind(wxEVT_PAINT, [this](wxPaintEvent& event) { onPaintEvent(event); }); +diff -x '*.orig' -x '*.rej' -aur 11.1-1/wx+/grid.h 11.1-2/wx+/grid.h +--- 11.1-1/wx+/grid.h 2020-09-01 19:07:43.731122359 -0400 ++++ 11.1-2/wx+/grid.h 2020-09-01 20:10:48.817584344 -0400 +@@ -149,7 +149,7 @@ + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = wxTAB_TRAVERSAL | wxNO_BORDER, +- const wxString& name = wxASCII_STR(wxPanelNameStr)); ++ const wxString& name = wxPanelNameStr); + + size_t getRowCount() const; + +diff -x '*.orig' -x '*.rej' -aur 11.1-1/wx+/toggle_button.h 11.1-2/wx+/toggle_button.h +--- 11.1-1/wx+/toggle_button.h 2020-09-01 19:07:43.731122359 -0400 ++++ 11.1-2/wx+/toggle_button.h 2020-09-01 20:10:44.629531569 -0400 +@@ -24,7 +24,7 @@ + const wxSize& size = wxDefaultSize, + long style = 0, + const wxValidator& validator = wxDefaultValidator, +- const wxString& name = wxASCII_STR(wxButtonNameStr)) : ++ const wxString& name = wxButtonNameStr) : + wxBitmapButton(parent, id, bitmap, pos, size, style, validator, name) {} + + //wxButton constructor +@@ -35,7 +35,7 @@ + const wxSize& size = wxDefaultSize, + long style = 0, + const wxValidator& validator = wxDefaultValidator, +- const wxString& name = wxASCII_STR(wxButtonNameStr)) : ++ const wxString& name = wxButtonNameStr) : + wxBitmapButton(parent, id, wxNullBitmap, pos, size, style, validator, name) + { + SetLabel(label); +Version: 11.1 +Message: Had to revert gui_status_handler.cpp and .h entirely to version 11.0 to avoid the wx 3.1.4-isms here. +diff --git a/FreeFileSync/Source/ui/gui_status_handler.cpp b/FreeFileSync/Source/ui/gui_status_handler.cpp +index 3cb6aaaa..9484af2c 100644 +--- a/FreeFileSync/Source/ui/gui_status_handler.cpp ++++ b/FreeFileSync/Source/ui/gui_status_handler.cpp +@@ -43,8 +43,8 @@ StatusHandlerTemporaryPanel::StatusHandlerTemporaryPanel(MainDialog& dlg, + mainDlg_.Update(); //don't wait until idle event! + + //register keys +- mainDlg_. Bind(wxEVT_CHAR_HOOK, &StatusHandlerTemporaryPanel::onLocalKeyEvent, this); +- mainDlg_.m_buttonCancel->Bind(wxEVT_COMMAND_BUTTON_CLICKED, &StatusHandlerTemporaryPanel::onAbortCompare, this); ++ mainDlg_.Connect(wxEVT_CHAR_HOOK, wxKeyEventHandler(StatusHandlerTemporaryPanel::OnKeyPressed), nullptr, this); ++ mainDlg_.m_buttonCancel->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(StatusHandlerTemporaryPanel::OnAbortCompare), nullptr, this); + } + + +@@ -128,9 +128,8 @@ StatusHandlerTemporaryPanel::~StatusHandlerTemporaryPanel() + mainDlg_.auiMgr_.Update(); + + //unregister keys +- [[maybe_unused]] bool ubOk1 = mainDlg_. Unbind(wxEVT_CHAR_HOOK, &StatusHandlerTemporaryPanel::onLocalKeyEvent, this); +- [[maybe_unused]] bool ubOk2 = mainDlg_.m_buttonCancel->Unbind(wxEVT_COMMAND_BUTTON_CLICKED, &StatusHandlerTemporaryPanel::onAbortCompare, this); +- assert(ubOk1 && ubOk2); ++ mainDlg_.Disconnect(wxEVT_CHAR_HOOK, wxKeyEventHandler(StatusHandlerTemporaryPanel::OnKeyPressed), nullptr, this); ++ mainDlg_.m_buttonCancel->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(StatusHandlerTemporaryPanel::OnAbortCompare), nullptr, this); + + mainDlg_.compareStatus_->teardown(); + +@@ -314,20 +313,20 @@ void StatusHandlerTemporaryPanel::forceUiUpdateNoThrow() + } + + +-void StatusHandlerTemporaryPanel::onLocalKeyEvent(wxKeyEvent& event) ++void StatusHandlerTemporaryPanel::OnKeyPressed(wxKeyEvent& event) + { + const int keyCode = event.GetKeyCode(); + if (keyCode == WXK_ESCAPE) + { + wxCommandEvent dummy; +- onAbortCompare(dummy); ++ OnAbortCompare(dummy); + } + + event.Skip(); + } + + +-void StatusHandlerTemporaryPanel::onAbortCompare(wxCommandEvent& event) ++void StatusHandlerTemporaryPanel::OnAbortCompare(wxCommandEvent& event) + { + userRequestAbort(); + } +diff --git a/FreeFileSync/Source/ui/gui_status_handler.h b/FreeFileSync/Source/ui/gui_status_handler.h +index e8ed01e4..2a9e00d2 100644 +--- a/FreeFileSync/Source/ui/gui_status_handler.h ++++ b/FreeFileSync/Source/ui/gui_status_handler.h +@@ -41,8 +41,8 @@ public: + Result reportResults(); //noexcept!! + + private: +- void onLocalKeyEvent(wxKeyEvent& event); +- void onAbortCompare(wxCommandEvent& event); //handle abort button click ++ void OnKeyPressed(wxKeyEvent& event); ++ void OnAbortCompare(wxCommandEvent& event); //handle abort button click + void showStatsPanel(); + + MainDialog& mainDlg_; diff --git a/freefilesync/debian/patches/series b/freefilesync/debian/patches/series index 7ce7a97..7896b6e 100644 --- a/freefilesync/debian/patches/series +++ b/freefilesync/debian/patches/series @@ -8,3 +8,4 @@ ffs_libssh2.patch ffs_curl.patch revert_zenju_aggressive_upstreamisms.patch ffs_gcc.patch +ffs_traditional_view.patch |