diff options
Diffstat (limited to 'freefilesync')
-rw-r--r-- | freefilesync/debian/changelog | 18 | ||||
-rw-r--r-- | freefilesync/debian/freefilesync+devuan.dsc | 2 | ||||
-rw-r--r-- | freefilesync/debian/patches/ffs_allow_parallel_ops.patch | 25 | ||||
-rw-r--r-- | freefilesync/debian/patches/ffs_devuan.patch | 6 | ||||
-rw-r--r-- | freefilesync/debian/patches/ffs_gcc.patch | 21 | ||||
-rw-r--r-- | freefilesync/debian/patches/ffs_no_check_updates.patch | 52 | ||||
-rw-r--r-- | freefilesync/debian/patches/ffs_traditional_view.patch | 308 | ||||
-rw-r--r-- | freefilesync/debian/patches/revert_zenju_aggressive_upstreamisms.patch | 55 | ||||
-rw-r--r-- | freefilesync/ffs_allow_parallel_ops.patch | 24 | ||||
-rw-r--r-- | freefilesync/ffs_fedora.patch | 19 | ||||
-rw-r--r-- | freefilesync/ffs_no_check_updates.patch | 60 | ||||
-rw-r--r-- | freefilesync/ffs_traditional_view.patch | 235 | ||||
-rw-r--r-- | freefilesync/freefilesync.spec | 8 | ||||
-rw-r--r-- | freefilesync/revert_zenju_aggressive_upstreamisms.patch | 221 |
14 files changed, 712 insertions, 342 deletions
diff --git a/freefilesync/debian/changelog b/freefilesync/debian/changelog index fbdcbf7..301e624 100644 --- a/freefilesync/debian/changelog +++ b/freefilesync/debian/changelog @@ -1,3 +1,21 @@ +freefilesync (11.2-1+devuan) obs; urgency=low + + * Upstream updates + - Improved grid layout with file icons hidden + - Improved rendering of inactive and disabled grid items + - Remember last user-selected paths for file and folder pickers + - Fixed folder name hidden in "item name" view type + - Fixed determination of unsupported trash folder (Linux) + - Fixed copying broken symlinks (macOS) + - Fixed default action when pressing Enter in popup dialogs + - Fixed default popup dialog size (macOS) + - Use localized start of week for %WeekDay% (Linux, macOS) + - Swap sides using CTRL+W instead of F10 + - Show confirmation dialog before swapping sides + * [bgstack15] improve traditional view for current layout + + -- Ben Stack <bgstack15@gmail.com> Fri, 02 Oct 2020 20:15:18 -0400 + freefilesync (11.1-2+devuan) obs; urgency=low * add traditional option to main grid view diff --git a/freefilesync/debian/freefilesync+devuan.dsc b/freefilesync/debian/freefilesync+devuan.dsc index e6a707d..e5cae56 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.1-2+devuan +Version: 11.2-1+devuan Maintainer: B Stack <bgstack15@gmail.com> Homepage: https://freefilesync.org/ Standards-Version: 4.1.4 diff --git a/freefilesync/debian/patches/ffs_allow_parallel_ops.patch b/freefilesync/debian/patches/ffs_allow_parallel_ops.patch index 15bf3ab..040369f 100644 --- a/freefilesync/debian/patches/ffs_allow_parallel_ops.patch +++ b/freefilesync/debian/patches/ffs_allow_parallel_ops.patch @@ -1,20 +1,20 @@ This is still experimental. -diff -x '*.orig' -x '*.swp' -x '*.rej' -Naur 10.9-0/FreeFileSync/Source/ui/folder_selector.cpp 10.9-1/FreeFileSync/Source/ui/folder_selector.cpp ---- 10.9-0/FreeFileSync/Source/ui/folder_selector.cpp 2019-02-10 16:42:28.960039117 -0500 -+++ 10.9-1/FreeFileSync/Source/ui/folder_selector.cpp 2019-02-10 20:20:11.981339625 -0500 -@@ -231,7 +231,7 @@ - +diff -aur 11.2-0/FreeFileSync/Source/ui/folder_selector.cpp 11.2-1/FreeFileSync/Source/ui/folder_selector.cpp +--- 11.2-0/FreeFileSync/Source/ui/folder_selector.cpp 2020-10-02 14:39:05.297463367 -0400 ++++ 11.2-1/FreeFileSync/Source/ui/folder_selector.cpp 2020-10-02 15:01:06.505758389 -0400 +@@ -260,7 +260,7 @@ + std::optional<std::wstring> parallelOpsDisabledReason; - + - parallelOpsDisabledReason = _("Requires FreeFileSync Donation Edition"); + // parallelOpsDisabledReason = _("Requires FreeFileSync Donation Edition"); - - if (showCloudSetupDialog(parent_, folderPathPhrase, parallelOps, get(parallelOpsDisabledReason)) != ReturnSmallDlg::BUTTON_OKAY) + + if (showCloudSetupDialog(parent_, folderPathPhrase, sftpKeyFileLastSelected_, parallelOps, get(parallelOpsDisabledReason)) != ConfirmationButton::accept) return; -diff -Naur -x '*.orig' -x '*.rej' 10.9-0/FreeFileSync/Source/ui/sync_cfg.cpp 10.9-1/FreeFileSync/Source/ui/sync_cfg.cpp ---- 10.21-0/FreeFileSync/Source/ui/sync_cfg.cpp 2020-03-18 08:56:08.644066742 -0400 -+++ 10.21-1/FreeFileSync/Source/ui/sync_cfg.cpp 2020-03-18 09:13:30.459409986 -0400 -@@ -290,7 +290,7 @@ +diff -aur 11.2-0/FreeFileSync/Source/ui/sync_cfg.cpp 11.2-1/FreeFileSync/Source/ui/sync_cfg.cpp +--- 11.2-0/FreeFileSync/Source/ui/sync_cfg.cpp 2020-10-02 14:39:05.289463269 -0400 ++++ 11.2-1/FreeFileSync/Source/ui/sync_cfg.cpp 2020-10-02 15:01:06.509758438 -0400 +@@ -336,7 +336,7 @@ commandHistoryOut_(commandHistory), globalPairCfg_(globalPairCfg), localPairCfg_(localPairConfig), @@ -23,3 +23,4 @@ diff -Naur -x '*.orig' -x '*.rej' 10.9-0/FreeFileSync/Source/ui/sync_cfg.cpp 10. showMultipleCfgs_(showMultipleCfgs) { setStandardButtonLayout(*bSizerStdButtons, StdButtons().setAffirmative(m_buttonOkay).setCancel(m_buttonCancel)); + diff --git a/freefilesync/debian/patches/ffs_devuan.patch b/freefilesync/debian/patches/ffs_devuan.patch index 67846e1..5e5af0b 100644 --- a/freefilesync/debian/patches/ffs_devuan.patch +++ b/freefilesync/debian/patches/ffs_devuan.patch @@ -1,6 +1,6 @@ Author: B Stack Source: Original research -Last date modified: 2020-02-15 +Last date modified: 2020-10-02 Message: Main patch to compile on Devuan. diff -x '*.swp' -x '.git*' -x '*.orig' -x '*.rej' -Naur 10.18-0/FreeFileSync/Source/ffs_paths.cpp 10.18-1/FreeFileSync/Source/ffs_paths.cpp --- 10.13-0/FreeFileSync/Source/ffs_paths.cpp 2019-06-14 20:23:07.615661499 -0400 @@ -24,7 +24,7 @@ diff -x '*.rej' -x '*.orig' -x '*.git*' -Naur 10.24-0/FreeFileSync/Source/Makefi -cxxFlags = -std=c++2a -pipe -DWXINTL_NO_GETTEXT_MACRO -I../.. -I../../zenXml -include "zen/i18n.h" -include "zen/warn_static.h" \ +cxxFlags += -std=c++2a -pipe -DWXINTL_NO_GETTEXT_MACRO -I../.. -I../../zenXml -include "zen/i18n.h" -include "zen/warn_static.h" \ - -Wall -Wfatal-errors -Wmissing-include-dirs -Wswitch-enum -Wcast-align -Wshadow -Wnon-virtual-dtor \ + -Wall -Wfatal-errors -Wmissing-include-dirs -Wswitch-enum -Wcast-align -Wnon-virtual-dtor -Wno-unused-function -Wshadow -Wno-maybe-uninitialized \ -O3 -DNDEBUG `wx-config --cxxflags --debug=no` -pthread -linkFlags = -s -no-pie `wx-config --libs std, aui --debug=no` -pthread @@ -53,7 +53,7 @@ diff -x '*.rej' -x '*.orig' -x '*.git*' -Naur 10.24-0/FreeFileSync/Source/RealTi -cxxFlags = -std=c++2a -pipe -DWXINTL_NO_GETTEXT_MACRO -I../../.. -I../../../zenXml -include "zen/i18n.h" -include "zen/warn_static.h" \ +cxxFlags += -std=c++2a -pipe -DWXINTL_NO_GETTEXT_MACRO -I../../.. -I../../../zenXml -include "zen/i18n.h" -include "zen/warn_static.h" \ - -Wall -Wfatal-errors -Wmissing-include-dirs -Wswitch-enum -Wcast-align -Wshadow -Wnon-virtual-dtor \ + -Wall -Wfatal-errors -Wmissing-include-dirs -Wswitch-enum -Wcast-align -Wnon-virtual-dtor -Wno-unused-function -Wshadow -Wno-maybe-uninitialized \ -O3 -DNDEBUG `wx-config --cxxflags --debug=no` -pthread -linkFlags = -s -no-pie `wx-config --libs std, aui --debug=no` -pthread diff --git a/freefilesync/debian/patches/ffs_gcc.patch b/freefilesync/debian/patches/ffs_gcc.patch index ed007b5..1f34404 100644 --- a/freefilesync/debian/patches/ffs_gcc.patch +++ b/freefilesync/debian/patches/ffs_gcc.patch @@ -1,13 +1,13 @@ -diff -Naur 10.25-1/FreeFileSync/Source/Makefile 10.25-2/FreeFileSync/Source/Makefile ---- 10.25-1/FreeFileSync/Source/Makefile 2020-06-20 13:36:08.495867672 -0400 -+++ 10.25-2/FreeFileSync/Source/Makefile 2020-06-20 13:31:36.180419862 -0400 +diff -aur 11.2-1/FreeFileSync/Source/Makefile 11.2-2/FreeFileSync/Source/Makefile +--- 11.2-1/FreeFileSync/Source/Makefile 2020-10-02 14:59:35.816639878 -0400 ++++ 11.2-2/FreeFileSync/Source/Makefile 2020-10-02 14:59:54.220866929 -0400 @@ -1,4 +1,5 @@ exeName = FreeFileSync +CXX=g++-10 cxxFlags += -std=c++2a -pipe -DWXINTL_NO_GETTEXT_MACRO -I../.. -I../../zenXml -include "zen/i18n.h" -include "zen/warn_static.h" \ - -Wall -Wfatal-errors -Wmissing-include-dirs -Wswitch-enum -Wcast-align -Wshadow -Wnon-virtual-dtor \ -@@ -114,11 +115,11 @@ + -Wall -Wfatal-errors -Wmissing-include-dirs -Wswitch-enum -Wcast-align -Wnon-virtual-dtor -Wno-unused-function -Wshadow -Wno-maybe-uninitialized \ +@@ -115,11 +116,11 @@ ../Build/Bin/$(exeName): $(objFiles) mkdir -p $(dir $@) @@ -21,16 +21,16 @@ diff -Naur 10.25-1/FreeFileSync/Source/Makefile 10.25-2/FreeFileSync/Source/Make clean: rm -rf $(tmpPath) -diff -Naur 10.25-1/FreeFileSync/Source/RealTimeSync/Makefile 10.25-2/FreeFileSync/Source/RealTimeSync/Makefile ---- 10.25-1/FreeFileSync/Source/RealTimeSync/Makefile 2020-06-20 13:36:08.499867723 -0400 -+++ 10.25-2/FreeFileSync/Source/RealTimeSync/Makefile 2020-06-20 13:31:48.844580205 -0400 +diff -aur 11.2-1/FreeFileSync/Source/RealTimeSync/Makefile 11.2-2/FreeFileSync/Source/RealTimeSync/Makefile +--- 11.2-1/FreeFileSync/Source/RealTimeSync/Makefile 2020-10-02 14:59:35.820639928 -0400 ++++ 11.2-2/FreeFileSync/Source/RealTimeSync/Makefile 2020-10-02 14:59:54.220866929 -0400 @@ -1,4 +1,5 @@ exeName = RealTimeSync +CXX=g++-10 cxxFlags += -std=c++2a -pipe -DWXINTL_NO_GETTEXT_MACRO -I../../.. -I../../../zenXml -include "zen/i18n.h" -include "zen/warn_static.h" \ - -Wall -Wfatal-errors -Wmissing-include-dirs -Wswitch-enum -Wcast-align -Wshadow -Wnon-virtual-dtor \ -@@ -52,11 +53,11 @@ + -Wall -Wfatal-errors -Wmissing-include-dirs -Wswitch-enum -Wcast-align -Wnon-virtual-dtor -Wno-unused-function -Wshadow -Wno-maybe-uninitialized \ +@@ -54,11 +55,11 @@ ../../Build/Bin/$(exeName): $(objFiles) mkdir -p $(dir $@) @@ -44,3 +44,4 @@ diff -Naur 10.25-1/FreeFileSync/Source/RealTimeSync/Makefile 10.25-2/FreeFileSyn clean: rm -rf $(tmpPath) + diff --git a/freefilesync/debian/patches/ffs_no_check_updates.patch b/freefilesync/debian/patches/ffs_no_check_updates.patch index fcbeb97..4616461 100644 --- a/freefilesync/debian/patches/ffs_no_check_updates.patch +++ b/freefilesync/debian/patches/ffs_no_check_updates.patch @@ -1,7 +1,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 @@ +diff -aur 11.2-0/FreeFileSync/Source/ui/main_dlg.cpp 11.2-1/FreeFileSync/Source/ui/main_dlg.cpp +--- 11.2-0/FreeFileSync/Source/ui/main_dlg.cpp 2020-10-02 14:39:05.333463811 -0400 ++++ 11.2-1/FreeFileSync/Source/ui/main_dlg.cpp 2020-10-02 14:52:01.515034696 -0400 +@@ -5621,7 +5621,7 @@ globalCfg_.gui.lastUpdateCheck = 0; //reset to GlobalSettings.xml default value! m_menuItemCheckVersionAuto->Check(updateCheckActive(globalCfg_.gui.lastUpdateCheck)); @@ -10,7 +10,7 @@ diff -x '*.orig' -x '*.rej' -Naur 11.1-0/FreeFileSync/Source/ui/main_dlg.cpp 11. if (shouldRunAutomaticUpdateCheck(globalCfg_.gui.lastUpdateCheck)) { flashStatusInformation(_("Searching for program updates...")); -@@ -5614,6 +5614,7 @@ +@@ -5629,6 +5629,7 @@ automaticUpdateCheckEval(this, globalCfg_.gui.lastUpdateCheck, globalCfg_.gui.lastOnlineVersion, automaticUpdateCheckRunAsync(automaticUpdateCheckPrepare(*this).get()).get()); } @@ -18,25 +18,25 @@ diff -x '*.orig' -x '*.rej' -Naur 11.1-0/FreeFileSync/Source/ui/main_dlg.cpp 11. } -@@ -5623,6 +5624,7 @@ - [[maybe_unused]] bool ubOk = Unbind(wxEVT_IDLE, &MainDialog::onRegularUpdateCheck, this); - assert(ubOk); +@@ -5653,6 +5654,7 @@ + } + }; + /* if (shouldRunAutomaticUpdateCheck(globalCfg_.gui.lastUpdateCheck)) { flashStatusInformation(_("Searching for program updates...")); -@@ -5636,6 +5638,7 @@ - resultAsync.get()); //run on main thread: - }); +@@ -5669,6 +5671,7 @@ } -+ */ + else + showNewVersionReminder(); ++ */ } -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 +diff -aur 11.2-0/FreeFileSync/Source/ui/version_check.cpp 11.2-1/FreeFileSync/Source/ui/version_check.cpp +--- 11.2-0/FreeFileSync/Source/ui/version_check.cpp 2020-10-02 14:39:05.297463367 -0400 ++++ 11.2-1/FreeFileSync/Source/ui/version_check.cpp 2020-10-02 14:55:17.857457477 -0400 @@ -70,6 +70,8 @@ bool fff::shouldRunAutomaticUpdateCheck(time_t lastUpdateCheck) @@ -46,17 +46,17 @@ diff -x '*.orig' -x '*.rej' -Naur 11.1-0/FreeFileSync/Source/ui/version_check.cp if (lastUpdateCheck == getVersionCheckInactiveId()) return false; -@@ -155,8 +157,7 @@ +@@ -156,8 +158,7 @@ + std::wstring updateDetailsMsg; + try { - try - { -- const std::string buf = sendHttpGet(utfTo<Zstring>("https://api.freefilesync.org/latest_changes?" + xWwwFormUrlEncode({ { "since", ffsVersion } })), -- ffsUpdateCheckUserAgent, nullptr /*caCertFilePath*/, nullptr /*notifyUnbufferedIO*/).readAll(); //throw SysError -+ const std::string buf = ""; - updateDetailsMsg = utfTo<std::wstring>(buf); - } - catch (const SysError& e) { throw FileError(_("Failed to retrieve update information."), e.toString()); } -@@ -185,8 +186,7 @@ +- updateDetailsMsg = utfTo<std::wstring>(sendHttpGet(utfTo<Zstring>("https://api.freefilesync.org/latest_changes?" + xWwwFormUrlEncode({ { "since", ffsVersion } })), +- ffsUpdateCheckUserAgent, nullptr /*caCertFilePath*/, nullptr /*notifyUnbufferedIO*/).readAll()); //throw SysError ++ updateDetailsMsg = utfTo<std::wstring>(""); + } + catch (const SysError& e) { updateDetailsMsg = _("Failed to retrieve update information.") + + L"\n\n" + e.toString(); } + +@@ -178,8 +179,7 @@ std::string getOnlineVersion(const std::vector<std::pair<std::string, std::string>>& postParams) //throw SysError { @@ -66,7 +66,7 @@ diff -x '*.orig' -x '*.rej' -Naur 11.1-0/FreeFileSync/Source/ui/version_check.cp return trimCpy(response); } -@@ -233,13 +233,13 @@ +@@ -226,13 +226,13 @@ const std::string onlineVersion = getOnlineVersion(geHttpPostParameters(parent)); //throw SysError lastOnlineVersion = onlineVersion; diff --git a/freefilesync/debian/patches/ffs_traditional_view.patch b/freefilesync/debian/patches/ffs_traditional_view.patch index e602033..173842f 100644 --- a/freefilesync/debian/patches/ffs_traditional_view.patch +++ b/freefilesync/debian/patches/ffs_traditional_view.patch @@ -1,16 +1,28 @@ -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: +diff -x '.git*' -x '*.orig' -x '*.rej' -aur 11.2-1/FreeFileSync/Source/ui/file_grid.cpp 11.2-1-trad3/FreeFileSync/Source/ui/file_grid.cpp +--- 11.2-1/FreeFileSync/Source/ui/file_grid.cpp 2020-10-02 14:39:05.289463269 -0400 ++++ 11.2-1-trad3/FreeFileSync/Source/ui/file_grid.cpp 2020-10-02 20:48:25.047194116 -0400 +@@ -446,8 +446,10 @@ + case ItemPathFormat::name: + return utfTo<std::wstring>(fsObj->getItemName<side>()); case ItemPathFormat::relative: ++ case ItemPathFormat::tradrel: 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: +@@ -529,7 +531,8 @@ + //---------------------------------------------------------------------------------- + wxDCPenChanger dummy(dc, wxPen(row == pdi.groupLastRow - 1 /*last group item*/ ? + getColorGridLine() : getDefaultBackgroundColorAlternating(pdi.groupIdx % 2 != 0), fastFromDIP(1))); +- dc.DrawLine(rect.GetBottomLeft(), rect.GetBottomRight() + wxPoint(1, 0)); ++ if (itemPathFormat_ != ItemPathFormat::traditional && itemPathFormat_ != ItemPathFormat::tradrel) ++ dc.DrawLine(rect.GetBottomLeft(), rect.GetBottomRight() + wxPoint(1, 0)); + } + + +@@ -628,6 +631,24 @@ else //=> BaseFolderPair groupParentFolder = AFS::getDisplayPath(pdi.fsObj->base().getAbstractPath<side>()); break; @@ -24,248 +36,195 @@ index 4ee72b97..d9b9a4c7 100644 + else //=> BaseFolderPair + groupParentFolder = AFS::getDisplayPath(pdi.fsObj->base().getAbstractPath<side>()); + break; ++ case ItemPathFormat::tradrel: ++ if (pdi.folderGroupObj) ++ { ++ groupName = utfTo<std::wstring>(pdi.folderGroupObj ->template getItemName <side>()); ++ groupParentFolder = utfTo<std::wstring>(pdi.folderGroupObj->parent().template getRelativePath<side>()) + \ ++ utfTo<std::wstring>(pdi.folderGroupObj ->template getItemName<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) + //path components should follow the app layout direction and are NOT a single piece of text! +@@ -655,6 +676,31 @@ + int widthGroupName = groupName .empty() ? 0 : (iconSize + gridGap_ + getTextExtentBuffered(dc, groupName).x + 2 * gridGap_); + int widthGroupItems = widthGroupSep + (drawFileIcons ? iconSize + gridGap_ : 0) + groupItemNamesWidth; + ++ // start trad patch ++ ++ //add slashes for better readability ++ assert(!contains(groupParentFolder, L'/') || !contains(groupParentFolder, L'\\')); ++ const wchar_t groupParentSep = contains(groupParentFolder, L'/') ? L'/' : (contains(groupParentFolder, L'\\') ? L'\\' : FILE_NAME_SEPARATOR); ++ + 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 ; ++ case ItemPathFormat::tradrel: ++ widthGroupParent -= widthGroupName - getTextExtentBuffered(dc, utfTo<std::wstring>(FILE_NAME_SEPARATOR)).x; ++ ++ if (!endsWith(groupParentFolder, L'/' ) && //e.g. ftp://server/ ++ !endsWith(groupParentFolder, L'\\') && /*e.g. C:\ */ ++ groupParentFolder.size() > 0 ) ++ groupParentFolder += groupParentSep; + 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; ++ // the insane logic of the new views ++ // but preserve the original tabbing, to make the patch easier. ++ // but with the "add slashes" paragraph 1 moved to above this switch statement! + -+ 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; - } + //not enough space? => collapse + if (int excessWidth = gridGap_ + widthGroupParent + widthGroupName + widthGroupItems - maxWidth; + excessWidth > 0) +@@ -664,10 +710,6 @@ + //1. render group components on two rows + stackedGroupRender = true; + +- //add slashes for better readability +- assert(!contains(groupParentFolder, L'/') || !contains(groupParentFolder, L'\\')); +- const wchar_t groupParentSep = contains(groupParentFolder, L'/') ? L'/' : (contains(groupParentFolder, L'\\') ? L'\\' : FILE_NAME_SEPARATOR); - + if (!endsWith(groupParentFolder, L'/' ) && //e.g. ftp://server/ + !endsWith(groupParentFolder, L'\\')) /*e.g. C:\ */ + groupParentFolder += groupParentSep; +@@ -725,6 +767,11 @@ + } + } + ++ // end of original section, and back to the trad patch! ++ break; ++ } ++ // and end the addition for trad patch ++ return { itemName, -@@ -786,6 +809,9 @@ private: +@@ -793,6 +840,9 @@ 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) ++ if (itemPathFormat_ == ItemPathFormat::traditional || itemPathFormat_ == ItemPathFormat::tradrel) + rectGroupParent.width += widthGroupName; rectGroupName .width = widthGroupName; if (stackedGroupRender) -@@ -837,7 +863,7 @@ private: +@@ -829,7 +879,8 @@ + if (row == pdi.groupLastRow - 1 /*last group item*/) //restore the group separation line we just cleared + { + wxDCPenChanger dummy(dc, wxPen(getColorGridLine(), fastFromDIP(1))); +- dc.DrawLine(rectGroup.GetBottomLeft(), rectGroup.GetBottomRight() + wxPoint(1, 0)); ++ if (itemPathFormat_ != ItemPathFormat::traditional && itemPathFormat_ != ItemPathFormat::tradrel) ++ dc.DrawLine(rectGroup.GetBottomLeft(), rectGroup.GetBottomRight() + wxPoint(1, 0)); + } + } + +@@ -844,7 +895,7 @@ dc.GradientFillLinear(rectNav, getColorSelectionGradientFrom(), backCol, wxEAST); } -- if (!groupName.empty() && row == groupBeginRow) -+ if (!(itemPathFormat_ == ItemPathFormat::traditional) && !groupName.empty() && row == groupBeginRow) +- if (!groupName.empty() && row == groupFirstRow) ++ if (!(itemPathFormat_ == ItemPathFormat::traditional || itemPathFormat_ == ItemPathFormat::tradrel) && !groupName.empty() && row == groupFirstRow) { wxDCTextColourChanger textColorGroupName(dc); if (static_cast<HoverAreaGroup>(rowHover) == HoverAreaGroup::groupName) -@@ -855,9 +881,9 @@ private: +@@ -865,9 +916,9 @@ 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)))) ++ if (itemPathFormat_ == ItemPathFormat::traditional || itemPathFormat_ == ItemPathFormat::tradrel || (!groupParentFolder.empty() && + (( stackedGroupRender && row == groupFirstRow + 1) || +- (!stackedGroupRender && row == groupFirstRow))) ++ (!stackedGroupRender && row == groupFirstRow)))) { drawCellText(dc, rectGroupParent, groupParentFolder, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL, &getTextExtentBuffered(dc, groupParentFolder)); } -@@ -1020,6 +1046,8 @@ private: +@@ -876,7 +927,8 @@ + if (!groupParentFolder.empty() || !groupName.empty()) + { + wxDCPenChanger dummy(dc, wxPen(getColorGridLine(), fastFromDIP(1))); +- dc.DrawLine(rectGroupItems.GetTopLeft(), rectGroupItems.GetBottomLeft() + wxPoint(0, 1)); //draws half-open range! ++ if (itemPathFormat_ != ItemPathFormat::traditional && itemPathFormat_ != ItemPathFormat::tradrel) ++ dc.DrawLine(rectGroupItems.GetTopLeft(), rectGroupItems.GetBottomLeft() + wxPoint(0, 1)); //draws half-open range! + rectGroupItems.x += fastFromDIP(1) + gridGap_; + rectGroupItems.width -= fastFromDIP(1) + gridGap_; + } +@@ -1040,6 +1092,10 @@ return _("Relative path"); case ItemPathFormat::full: return _("Full path"); + case ItemPathFormat::traditional: + return _("Traditional"); ++ case ItemPathFormat::tradrel: ++ return _("Trad. relative"); } 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 +diff -x '.git*' -x '*.orig' -x '*.rej' -aur 11.2-1/FreeFileSync/Source/ui/file_grid_attr.h 11.2-1-trad3/FreeFileSync/Source/ui/file_grid_attr.h +--- 11.2-1/FreeFileSync/Source/ui/file_grid_attr.h 2020-10-02 14:39:05.313463564 -0400 ++++ 11.2-1-trad3/FreeFileSync/Source/ui/file_grid_attr.h 2020-10-02 20:21:48.863111642 -0400 +@@ -79,6 +79,8 @@ name, relative, full, + traditional, ++ tradrel, }; 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) +diff -x '.git*' -x '*.orig' -x '*.rej' -aur 11.2-1/FreeFileSync/Source/ui/main_dlg.cpp 11.2-1-trad3/FreeFileSync/Source/ui/main_dlg.cpp +--- 11.2-1/FreeFileSync/Source/ui/main_dlg.cpp 2020-10-02 20:49:11.487782099 -0400 ++++ 11.2-1-trad3/FreeFileSync/Source/ui/main_dlg.cpp 2020-10-02 20:22:02.191278722 -0400 +@@ -2710,6 +2710,8 @@ addFormatEntry(_("Item name" ), ItemPathFormat::name); addFormatEntry(_("Relative path"), ItemPathFormat::relative); addFormatEntry(_("Full path" ), ItemPathFormat::full); + addFormatEntry(_("Traditional" ), ItemPathFormat::traditional); ++ addFormatEntry(_("Trad. relative"),ItemPathFormat::tradrel); //---------------------------------------------------------------------------------------------- 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 @@ +diff -x '.git*' -x '*.orig' -x '*.rej' -aur 11.2-1/FreeFileSync/Source/config.cpp 11.2-1-trad3/FreeFileSync/Source/config.cpp +--- 11.2-1/FreeFileSync/Source/config.cpp 2020-10-02 14:39:05.233462578 -0400 ++++ 11.2-1-trad3/FreeFileSync/Source/config.cpp 2020-10-02 20:22:24.275555557 -0400 +@@ -528,6 +528,12 @@ case ItemPathFormat::full: output = "Full"; break; + case ItemPathFormat::traditional: + output = "Traditional"; + break; ++ case ItemPathFormat::tradrel: ++ output = "Trad. relative"; ++ break; } } -@@ -541,6 +545,8 @@ +@@ -541,6 +547,10 @@ value = ItemPathFormat::relative; else if (tmp == "Full") value = ItemPathFormat::full; + else if (tmp == "Traditional") + value = ItemPathFormat::traditional; ++ else if (tmp == "Trad. relative") ++ value = ItemPathFormat::tradrel; 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 @@ +diff -x '.git*' -x '*.orig' -x '*.rej' -aur 11.2-1/FreeFileSync/Source/ui/file_view.cpp 11.2-1-trad3/FreeFileSync/Source/ui/file_view.cpp +--- 11.2-1/FreeFileSync/Source/ui/file_view.cpp 2020-10-02 14:39:05.305463465 -0400 ++++ 11.2-1-trad3/FreeFileSync/Source/ui/file_view.cpp 2020-10-02 20:22:38.439733112 -0400 +@@ -798,11 +798,13 @@ + break; + + case ItemPathFormat::relative: ++ case ItemPathFormat::tradrel: + if ( ascending) std::sort(sortedRef_.begin(), sortedRef_.end(), LessRelativeFolder<true >(folderPairs_)); + else if (!ascending) std::sort(sortedRef_.begin(), sortedRef_.end(), LessRelativeFolder<false>(folderPairs_)); break; case ItemPathFormat::full: @@ -273,3 +232,4 @@ diff -x .git -Naur 11.1-1/FreeFileSync/Source/ui/file_view.cpp 11.1-2/FreeFileSy 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 12a1b43..1a468db 100644 --- a/freefilesync/debian/patches/revert_zenju_aggressive_upstreamisms.patch +++ b/freefilesync/debian/patches/revert_zenju_aggressive_upstreamisms.patch @@ -92,35 +92,21 @@ 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 @@ +diff -x '*.orig' -x '*.rej' -aur 11.2-0/FreeFileSync/Source/RealTimeSync/folder_selector2.cpp 11.2-1/FreeFileSync/Source/RealTimeSync/folder_selector2.cpp +--- 11.2-0/FreeFileSync/Source/RealTimeSync/folder_selector2.cpp 2020-10-02 14:39:05.273463072 -0400 ++++ 11.2-1/FreeFileSync/Source/RealTimeSync/folder_selector2.cpp 2020-10-02 15:06:56.670070620 -0400 +@@ -158,7 +158,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) +- wxDirDialog folderSelector(parent_, _("Select a folder"), utfTo<wxString>(defaultFolderPath), wxDD_DEFAULT_STYLE | wxDD_SHOW_HIDDEN); ++ wxDirDialog folderSelector(parent_, _("Select a folder"), utfTo<wxString>(defaultFolderPath)); + if (folderSelector.ShowModal() != wxID_OK) return; - newFolderPath = utfTo<Zstring>(dirPicker.GetPath()); + newFolderPath = utfTo<Zstring>(folderSelector.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 @@ -145,23 +131,18 @@ diff -x '*.orig' -x '*.rej' -aur 11.1-1/FreeFileSync/Source/ui/folder_history_bo 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 @@ - } +diff -x '*.orig' -x '*.rej' -aur 11.2-0/FreeFileSync/Source/ui/folder_selector.cpp 11.2-1/FreeFileSync/Source/ui/folder_selector.cpp +--- 11.2-0/FreeFileSync/Source/ui/folder_selector.cpp 2020-10-02 14:39:05.297463367 -0400 ++++ 11.2-1/FreeFileSync/Source/ui/folder_selector.cpp 2020-10-02 15:08:07.066935749 -0400 +@@ -232,7 +232,7 @@ 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; + //default size? Windows: not implemented, Linux(GTK2): not implemented, macOS: not implemented => wxWidgets, what is this shit!? +- wxDirDialog folderSelector(parent_, _("Select a folder"), utfTo<wxString>(defaultFolderNative), wxDD_DEFAULT_STYLE | wxDD_SHOW_HIDDEN); ++ wxDirDialog folderSelector(parent_, _("Select a folder"), utfTo<wxString>(defaultFolderNative)); + //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!? + if (folderSelector.ShowModal() != wxID_OK) 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 diff --git a/freefilesync/ffs_allow_parallel_ops.patch b/freefilesync/ffs_allow_parallel_ops.patch index d317bf0..040369f 100644 --- a/freefilesync/ffs_allow_parallel_ops.patch +++ b/freefilesync/ffs_allow_parallel_ops.patch @@ -1,20 +1,20 @@ This is still experimental. -diff -x '*.orig' -x '*.swp' -x '*.rej' -Naur 10.9-0/FreeFileSync/Source/ui/folder_selector.cpp 10.9-1/FreeFileSync/Source/ui/folder_selector.cpp ---- 10.9-0/FreeFileSync/Source/ui/folder_selector.cpp 2019-02-10 16:42:28.960039117 -0500 -+++ 10.9-1/FreeFileSync/Source/ui/folder_selector.cpp 2019-02-10 20:20:11.981339625 -0500 -@@ -231,7 +231,7 @@ - +diff -aur 11.2-0/FreeFileSync/Source/ui/folder_selector.cpp 11.2-1/FreeFileSync/Source/ui/folder_selector.cpp +--- 11.2-0/FreeFileSync/Source/ui/folder_selector.cpp 2020-10-02 14:39:05.297463367 -0400 ++++ 11.2-1/FreeFileSync/Source/ui/folder_selector.cpp 2020-10-02 15:01:06.505758389 -0400 +@@ -260,7 +260,7 @@ + std::optional<std::wstring> parallelOpsDisabledReason; - + - parallelOpsDisabledReason = _("Requires FreeFileSync Donation Edition"); + // parallelOpsDisabledReason = _("Requires FreeFileSync Donation Edition"); - - if (showCloudSetupDialog(parent_, folderPathPhrase, parallelOps, get(parallelOpsDisabledReason)) != ReturnSmallDlg::BUTTON_OKAY) + + if (showCloudSetupDialog(parent_, folderPathPhrase, sftpKeyFileLastSelected_, parallelOps, get(parallelOpsDisabledReason)) != ConfirmationButton::accept) return; -diff -Naur -x '*.orig' -x '*.rej' 10.9-0/FreeFileSync/Source/ui/sync_cfg.cpp 10.9-1/FreeFileSync/Source/ui/sync_cfg.cpp ---- 10.21-0/FreeFileSync/Source/ui/sync_cfg.cpp 2020-03-18 08:56:08.644066742 -0400 -+++ 10.21-1/FreeFileSync/Source/ui/sync_cfg.cpp 2020-03-18 09:13:30.459409986 -0400 -@@ -290,7 +290,7 @@ +diff -aur 11.2-0/FreeFileSync/Source/ui/sync_cfg.cpp 11.2-1/FreeFileSync/Source/ui/sync_cfg.cpp +--- 11.2-0/FreeFileSync/Source/ui/sync_cfg.cpp 2020-10-02 14:39:05.289463269 -0400 ++++ 11.2-1/FreeFileSync/Source/ui/sync_cfg.cpp 2020-10-02 15:01:06.509758438 -0400 +@@ -336,7 +336,7 @@ commandHistoryOut_(commandHistory), globalPairCfg_(globalPairCfg), localPairCfg_(localPairConfig), diff --git a/freefilesync/ffs_fedora.patch b/freefilesync/ffs_fedora.patch index f804660..5c5fda0 100644 --- a/freefilesync/ffs_fedora.patch +++ b/freefilesync/ffs_fedora.patch @@ -1,4 +1,5 @@ -ffs_fedora 2020-07-22 now uses gtk3 +Last modified date: 2020-10-03 +History: ffs_fedora 2020-07-22 now uses gtk3 diff -Naur 10.13-0/FreeFileSync/Source/ffs_paths.cpp 10.13-1/FreeFileSync/Source/ffs_paths.cpp --- 10.13-0/FreeFileSync/Source/ffs_paths.cpp 2019-06-14 20:23:07.615661499 -0400 +++ 10.13-1/FreeFileSync/Source/ffs_paths.cpp 2019-06-14 20:36:28.178274292 -0400 @@ -20,7 +21,7 @@ diff -x '*.orig' -x '*.git' -x '*.rej' -x '*.swp' -Naur 11.0-0/FreeFileSync/Sour +exeName = FreeFileSync cxxFlags = -std=c++2a -pipe -DWXINTL_NO_GETTEXT_MACRO -I../.. -I../../zenXml -include "zen/i18n.h" -include "zen/warn_static.h" \ - -Wall -Wfatal-errors -Wmissing-include-dirs -Wswitch-enum -Wcast-align -Wshadow -Wnon-virtual-dtor \ + -Wall -Wfatal-errors -Wmissing-include-dirs -Wswitch-enum -Wcast-align -Wnon-virtual-dtor -Wno-unused-function -Wshadow -Wno-maybe-uninitialized \ -O3 -DNDEBUG `wx-config --cxxflags --debug=no` -pthread -linkFlags = -s -no-pie `wx-config --libs std, aui --debug=no` -pthread @@ -49,7 +50,7 @@ diff -x '*.orig' -x '*.git' -x '*.rej' -x '*.swp' -Naur 11.0-0/FreeFileSync/Sour +exeName = RealTimeSync cxxFlags = -std=c++2a -pipe -DWXINTL_NO_GETTEXT_MACRO -I../../.. -I../../../zenXml -include "zen/i18n.h" -include "zen/warn_static.h" \ - -Wall -Wfatal-errors -Wmissing-include-dirs -Wswitch-enum -Wcast-align -Wshadow -Wnon-virtual-dtor \ + -Wall -Wfatal-errors -Wmissing-include-dirs -Wswitch-enum -Wcast-align -Wnon-virtual-dtor -Wno-unused-function -Wshadow -Wno-maybe-uninitialized \ -O3 -DNDEBUG `wx-config --cxxflags --debug=no` -pthread -linkFlags = -s -no-pie `wx-config --libs std, aui --debug=no` -pthread @@ -77,15 +78,3 @@ iff -x '*.swp' -x '.git*' -x '*.orig' -x '*.rej' -Naur 10.19-0/FreeFileSync/Sour build += SPACED_BULLET; build += utfTo<wxString>(formatTime(formatDateTag, getCompileTime())); -diff -x '*.orig' -x '*.git' -x '*.rej' -x '*.swp' -Naur 11.0-0/wx+/dc.h 11.0-1/wx+/dc.h ---- 11.0-0/wx+/dc.h 2020-07-22 11:36:55.000000000 -0400 -+++ 11.0-1/wx+/dc.h 2020-07-22 13:37:49.535137357 -0400 -@@ -55,7 +55,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/ffs_no_check_updates.patch b/freefilesync/ffs_no_check_updates.patch index 62f4e7e..4616461 100644 --- a/freefilesync/ffs_no_check_updates.patch +++ b/freefilesync/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 -aur 11.2-0/FreeFileSync/Source/ui/main_dlg.cpp 11.2-1/FreeFileSync/Source/ui/main_dlg.cpp +--- 11.2-0/FreeFileSync/Source/ui/main_dlg.cpp 2020-10-02 14:39:05.333463811 -0400 ++++ 11.2-1/FreeFileSync/Source/ui/main_dlg.cpp 2020-10-02 14:52:01.515034696 -0400 +@@ -5621,7 +5621,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 @@ +@@ -5629,6 +5629,7 @@ automaticUpdateCheckEval(this, globalCfg_.gui.lastUpdateCheck, globalCfg_.gui.lastOnlineVersion, automaticUpdateCheckRunAsync(automaticUpdateCheckPrepare(*this).get()).get()); } @@ -18,27 +18,26 @@ 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); -- +@@ -5653,6 +5654,7 @@ + } + }; + + /* if (shouldRunAutomaticUpdateCheck(globalCfg_.gui.lastUpdateCheck)) { flashStatusInformation(_("Searching for program updates...")); -@@ -5567,6 +5568,7 @@ - resultAsync.get()); //run on main thread: - }); +@@ -5669,6 +5671,7 @@ } -+ */ + else + showNewVersionReminder(); ++ */ } -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 -aur 11.2-0/FreeFileSync/Source/ui/version_check.cpp 11.2-1/FreeFileSync/Source/ui/version_check.cpp +--- 11.2-0/FreeFileSync/Source/ui/version_check.cpp 2020-10-02 14:39:05.297463367 -0400 ++++ 11.2-1/FreeFileSync/Source/ui/version_check.cpp 2020-10-02 14:55:17.857457477 -0400 +@@ -70,6 +70,8 @@ bool fff::shouldRunAutomaticUpdateCheck(time_t lastUpdateCheck) { @@ -47,17 +46,17 @@ diff --exclude '*.orig' -Naur 10.14-0/FreeFileSync/Source/ui/version_check.cpp 1 if (lastUpdateCheck == getVersionCheckInactiveId()) return false; -@@ -159,8 +161,7 @@ +@@ -156,8 +158,7 @@ + std::wstring updateDetailsMsg; + try { - try - { -- const std::string buf = sendHttpGet(utfTo<Zstring>("https://api.freefilesync.org/latest_changes?" + xWwwFormUrlEncode({ { "since", ffsVersion } })), -- ffsUpdateCheckUserAgent, nullptr /*caCertFilePath*/, nullptr /*notifyUnbufferedIO*/).readAll(); //throw SysError -+ 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 @@ +- updateDetailsMsg = utfTo<std::wstring>(sendHttpGet(utfTo<Zstring>("https://api.freefilesync.org/latest_changes?" + xWwwFormUrlEncode({ { "since", ffsVersion } })), +- ffsUpdateCheckUserAgent, nullptr /*caCertFilePath*/, nullptr /*notifyUnbufferedIO*/).readAll()); //throw SysError ++ updateDetailsMsg = utfTo<std::wstring>(""); + } + catch (const SysError& e) { updateDetailsMsg = _("Failed to retrieve update information.") + + L"\n\n" + e.toString(); } + +@@ -178,8 +179,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 @@ +@@ -226,13 +226,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/ffs_traditional_view.patch b/freefilesync/ffs_traditional_view.patch new file mode 100644 index 0000000..173842f --- /dev/null +++ b/freefilesync/ffs_traditional_view.patch @@ -0,0 +1,235 @@ +diff -x '.git*' -x '*.orig' -x '*.rej' -aur 11.2-1/FreeFileSync/Source/ui/file_grid.cpp 11.2-1-trad3/FreeFileSync/Source/ui/file_grid.cpp +--- 11.2-1/FreeFileSync/Source/ui/file_grid.cpp 2020-10-02 14:39:05.289463269 -0400 ++++ 11.2-1-trad3/FreeFileSync/Source/ui/file_grid.cpp 2020-10-02 20:48:25.047194116 -0400 +@@ -446,8 +446,10 @@ + case ItemPathFormat::name: + return utfTo<std::wstring>(fsObj->getItemName<side>()); + case ItemPathFormat::relative: ++ case ItemPathFormat::tradrel: + return utfTo<std::wstring>(fsObj->getRelativePath<side>()); + case ItemPathFormat::full: ++ case ItemPathFormat::traditional: + return AFS::getDisplayPath(fsObj->getAbstractPath<side>()); + } + assert(false); +@@ -529,7 +531,8 @@ + //---------------------------------------------------------------------------------- + wxDCPenChanger dummy(dc, wxPen(row == pdi.groupLastRow - 1 /*last group item*/ ? + getColorGridLine() : getDefaultBackgroundColorAlternating(pdi.groupIdx % 2 != 0), fastFromDIP(1))); +- dc.DrawLine(rect.GetBottomLeft(), rect.GetBottomRight() + wxPoint(1, 0)); ++ if (itemPathFormat_ != ItemPathFormat::traditional && itemPathFormat_ != ItemPathFormat::tradrel) ++ dc.DrawLine(rect.GetBottomLeft(), rect.GetBottomRight() + wxPoint(1, 0)); + } + + +@@ -628,6 +631,24 @@ + 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; ++ case ItemPathFormat::tradrel: ++ if (pdi.folderGroupObj) ++ { ++ groupName = utfTo<std::wstring>(pdi.folderGroupObj ->template getItemName <side>()); ++ groupParentFolder = utfTo<std::wstring>(pdi.folderGroupObj->parent().template getRelativePath<side>()) + \ ++ utfTo<std::wstring>(pdi.folderGroupObj ->template getItemName<side>()); ++ } ++ break; + } + + //path components should follow the app layout direction and are NOT a single piece of text! +@@ -655,6 +676,31 @@ + int widthGroupName = groupName .empty() ? 0 : (iconSize + gridGap_ + getTextExtentBuffered(dc, groupName).x + 2 * gridGap_); + int widthGroupItems = widthGroupSep + (drawFileIcons ? iconSize + gridGap_ : 0) + groupItemNamesWidth; + ++ // start trad patch ++ ++ //add slashes for better readability ++ assert(!contains(groupParentFolder, L'/') || !contains(groupParentFolder, L'\\')); ++ const wchar_t groupParentSep = contains(groupParentFolder, L'/') ? L'/' : (contains(groupParentFolder, L'\\') ? L'\\' : FILE_NAME_SEPARATOR); ++ ++ switch (itemPathFormat_) ++ { ++ case ItemPathFormat::traditional: ++ case ItemPathFormat::tradrel: ++ widthGroupParent -= widthGroupName - getTextExtentBuffered(dc, utfTo<std::wstring>(FILE_NAME_SEPARATOR)).x; ++ ++ if (!endsWith(groupParentFolder, L'/' ) && //e.g. ftp://server/ ++ !endsWith(groupParentFolder, L'\\') && /*e.g. C:\ */ ++ groupParentFolder.size() > 0 ) ++ groupParentFolder += groupParentSep; ++ break; ++ case ItemPathFormat::name: ++ case ItemPathFormat::relative: ++ case ItemPathFormat::full: ++ default: ++ // the insane logic of the new views ++ // but preserve the original tabbing, to make the patch easier. ++ // but with the "add slashes" paragraph 1 moved to above this switch statement! ++ + //not enough space? => collapse + if (int excessWidth = gridGap_ + widthGroupParent + widthGroupName + widthGroupItems - maxWidth; + excessWidth > 0) +@@ -664,10 +710,6 @@ + //1. render group components on two rows + stackedGroupRender = true; + +- //add slashes for better readability +- assert(!contains(groupParentFolder, L'/') || !contains(groupParentFolder, L'\\')); +- const wchar_t groupParentSep = contains(groupParentFolder, L'/') ? L'/' : (contains(groupParentFolder, L'\\') ? L'\\' : FILE_NAME_SEPARATOR); +- + if (!endsWith(groupParentFolder, L'/' ) && //e.g. ftp://server/ + !endsWith(groupParentFolder, L'\\')) /*e.g. C:\ */ + groupParentFolder += groupParentSep; +@@ -725,6 +767,11 @@ + } + } + ++ // end of original section, and back to the trad patch! ++ break; ++ } ++ // and end the addition for trad patch ++ + return + { + itemName, +@@ -793,6 +840,9 @@ + 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 || itemPathFormat_ == ItemPathFormat::tradrel) ++ rectGroupParent.width += widthGroupName; + rectGroupName .width = widthGroupName; + + if (stackedGroupRender) +@@ -829,7 +879,8 @@ + if (row == pdi.groupLastRow - 1 /*last group item*/) //restore the group separation line we just cleared + { + wxDCPenChanger dummy(dc, wxPen(getColorGridLine(), fastFromDIP(1))); +- dc.DrawLine(rectGroup.GetBottomLeft(), rectGroup.GetBottomRight() + wxPoint(1, 0)); ++ if (itemPathFormat_ != ItemPathFormat::traditional && itemPathFormat_ != ItemPathFormat::tradrel) ++ dc.DrawLine(rectGroup.GetBottomLeft(), rectGroup.GetBottomRight() + wxPoint(1, 0)); + } + } + +@@ -844,7 +895,7 @@ + dc.GradientFillLinear(rectNav, getColorSelectionGradientFrom(), backCol, wxEAST); + } + +- if (!groupName.empty() && row == groupFirstRow) ++ if (!(itemPathFormat_ == ItemPathFormat::traditional || itemPathFormat_ == ItemPathFormat::tradrel) && !groupName.empty() && row == groupFirstRow) + { + wxDCTextColourChanger textColorGroupName(dc); + if (static_cast<HoverAreaGroup>(rowHover) == HoverAreaGroup::groupName) +@@ -865,9 +916,9 @@ + drawCellText(dc, rectGroupName, groupName, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL, &getTextExtentBuffered(dc, groupName)); + } + +- if (!groupParentFolder.empty() && ++ if (itemPathFormat_ == ItemPathFormat::traditional || itemPathFormat_ == ItemPathFormat::tradrel || (!groupParentFolder.empty() && + (( stackedGroupRender && row == groupFirstRow + 1) || +- (!stackedGroupRender && row == groupFirstRow))) ++ (!stackedGroupRender && row == groupFirstRow)))) + { + drawCellText(dc, rectGroupParent, groupParentFolder, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL, &getTextExtentBuffered(dc, groupParentFolder)); + } +@@ -876,7 +927,8 @@ + if (!groupParentFolder.empty() || !groupName.empty()) + { + wxDCPenChanger dummy(dc, wxPen(getColorGridLine(), fastFromDIP(1))); +- dc.DrawLine(rectGroupItems.GetTopLeft(), rectGroupItems.GetBottomLeft() + wxPoint(0, 1)); //draws half-open range! ++ if (itemPathFormat_ != ItemPathFormat::traditional && itemPathFormat_ != ItemPathFormat::tradrel) ++ dc.DrawLine(rectGroupItems.GetTopLeft(), rectGroupItems.GetBottomLeft() + wxPoint(0, 1)); //draws half-open range! + rectGroupItems.x += fastFromDIP(1) + gridGap_; + rectGroupItems.width -= fastFromDIP(1) + gridGap_; + } +@@ -1040,6 +1092,10 @@ + return _("Relative path"); + case ItemPathFormat::full: + return _("Full path"); ++ case ItemPathFormat::traditional: ++ return _("Traditional"); ++ case ItemPathFormat::tradrel: ++ return _("Trad. relative"); + } + assert(false); + break; +diff -x '.git*' -x '*.orig' -x '*.rej' -aur 11.2-1/FreeFileSync/Source/ui/file_grid_attr.h 11.2-1-trad3/FreeFileSync/Source/ui/file_grid_attr.h +--- 11.2-1/FreeFileSync/Source/ui/file_grid_attr.h 2020-10-02 14:39:05.313463564 -0400 ++++ 11.2-1-trad3/FreeFileSync/Source/ui/file_grid_attr.h 2020-10-02 20:21:48.863111642 -0400 +@@ -79,6 +79,8 @@ + name, + relative, + full, ++ traditional, ++ tradrel, + }; + + const ItemPathFormat defaultItemPathFormatLeftGrid = ItemPathFormat::relative; +diff -x '.git*' -x '*.orig' -x '*.rej' -aur 11.2-1/FreeFileSync/Source/ui/main_dlg.cpp 11.2-1-trad3/FreeFileSync/Source/ui/main_dlg.cpp +--- 11.2-1/FreeFileSync/Source/ui/main_dlg.cpp 2020-10-02 20:49:11.487782099 -0400 ++++ 11.2-1-trad3/FreeFileSync/Source/ui/main_dlg.cpp 2020-10-02 20:22:02.191278722 -0400 +@@ -2710,6 +2710,8 @@ + addFormatEntry(_("Item name" ), ItemPathFormat::name); + addFormatEntry(_("Relative path"), ItemPathFormat::relative); + addFormatEntry(_("Full path" ), ItemPathFormat::full); ++ addFormatEntry(_("Traditional" ), ItemPathFormat::traditional); ++ addFormatEntry(_("Trad. relative"),ItemPathFormat::tradrel); + + //---------------------------------------------------------------------------------------------- + menu.addSeparator(); +diff -x '.git*' -x '*.orig' -x '*.rej' -aur 11.2-1/FreeFileSync/Source/config.cpp 11.2-1-trad3/FreeFileSync/Source/config.cpp +--- 11.2-1/FreeFileSync/Source/config.cpp 2020-10-02 14:39:05.233462578 -0400 ++++ 11.2-1-trad3/FreeFileSync/Source/config.cpp 2020-10-02 20:22:24.275555557 -0400 +@@ -528,6 +528,12 @@ + case ItemPathFormat::full: + output = "Full"; + break; ++ case ItemPathFormat::traditional: ++ output = "Traditional"; ++ break; ++ case ItemPathFormat::tradrel: ++ output = "Trad. relative"; ++ break; + } + } + +@@ -541,6 +547,10 @@ + value = ItemPathFormat::relative; + else if (tmp == "Full") + value = ItemPathFormat::full; ++ else if (tmp == "Traditional") ++ value = ItemPathFormat::traditional; ++ else if (tmp == "Trad. relative") ++ value = ItemPathFormat::tradrel; + else + return false; + return true; +diff -x '.git*' -x '*.orig' -x '*.rej' -aur 11.2-1/FreeFileSync/Source/ui/file_view.cpp 11.2-1-trad3/FreeFileSync/Source/ui/file_view.cpp +--- 11.2-1/FreeFileSync/Source/ui/file_view.cpp 2020-10-02 14:39:05.305463465 -0400 ++++ 11.2-1-trad3/FreeFileSync/Source/ui/file_view.cpp 2020-10-02 20:22:38.439733112 -0400 +@@ -798,11 +798,13 @@ + break; + + case ItemPathFormat::relative: ++ case ItemPathFormat::tradrel: + if ( ascending) std::sort(sortedRef_.begin(), sortedRef_.end(), LessRelativeFolder<true >(folderPairs_)); + else if (!ascending) std::sort(sortedRef_.begin(), sortedRef_.end(), LessRelativeFolder<false>(folderPairs_)); + 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/freefilesync.spec b/freefilesync/freefilesync.spec index 030b863..a40f6fe 100644 --- a/freefilesync/freefilesync.spec +++ b/freefilesync/freefilesync.spec @@ -19,7 +19,7 @@ %define libssh2_name libssh2-%{name} %endif Name: freefilesync -Version: 11.0 +Version: 11.2 Release: 1%{?dist} Summary: A file synchronization utility @@ -43,6 +43,7 @@ Patch7: ffs_curl.patch Patch8: ffs_bit.patch Patch9: ffs_no_eraseif.patch Patch10: revert_zenju_aggressive_upstreamisms.patch +Patch11: ffs_traditional_view.patch Packager: B Stack <bgstack15@gmail.com> BuildRequires: brotli-devel @@ -102,6 +103,7 @@ find . ! -type d \( -name '*.c' -o -name '*.cpp' -o -name '*.h' \) \ %patch9 -p1 %endif %patch10 -p1 +%patch11 -p1 # custom build parameters for packaging application in rpm # fedora provides build_cxxflags, which is really just optflags @@ -124,7 +126,6 @@ EOFSCL %endif %install -export TMPDIR=/tmp # necessary since 11.0 %if !%{dummy_package} # removed by upstream! #%%make_install -C %%{pkgname}/Source @@ -206,6 +207,9 @@ update-mime-database -n ${_datadir}/mime 1>/dev/null 2>&1 & : %ghost %config %attr(666, -, -) %{_datadir}/%{name}/GlobalSettings.xml %changelog +* Sat Oct 03 2020 B Stack <bgstack15@gmail.com> - 11.2-1 +- version bump + * Wed Jul 22 2020 B Stack <bgstack15@gmail.com> - 11.0-1 - version bump - use gtk3 diff --git a/freefilesync/revert_zenju_aggressive_upstreamisms.patch b/freefilesync/revert_zenju_aggressive_upstreamisms.patch index 522080d..1a468db 100644 --- a/freefilesync/revert_zenju_aggressive_upstreamisms.patch +++ b/freefilesync/revert_zenju_aggressive_upstreamisms.patch @@ -1,21 +1,3 @@ -Author: Ben Stack <bgstack15@gmail.com> -Date: 2020-06-21 16:45 -0400 -Message: Use the following command to get this old contents. Zenju must be using some newer definition of -std=c++2a than what Devuan Ceres provides as of 2020-05-17, and probably wxwidgets. This is the 10.23 code for these files. - - git checkout b4ecf755 wx+/choice_enum.h - -Unfortunately with the removal of the wxWidgets-gtk2 code from Debian, we are stuck using all available at approximately November 1, 2019 snapshot of Debian: https://snapshot.debian.org/archive/debian/20191101T211023Z/pool/main/w/wxwidgets3.0/ -libwxbase3.0-0v5_3.0.4+dfsg-14_amd64.deb -libwxbase3.0-0v5_3.0.4+dfsg-14_i386.deb -libwxbase3.0-dev_3.0.4+dfsg-14_amd64.deb -libwxbase3.0-dev_3.0.4+dfsg-14_i386.deb -libwxgtk3.0-0v5_3.0.4+dfsg-14_amd64.deb -libwxgtk3.0-0v5_3.0.4+dfsg-14_i386.deb -libwxgtk3.0-dev_3.0.4+dfsg-14_amd64.deb -libwxgtk3.0-dev_3.0.4+dfsg-14_i386.deb -wx3.0-headers_3.0.4+dfsg-14_all.deb -wx-common_3.0.4+dfsg-14_amd64.deb -wx-common_3.0.4+dfsg-14_i386.deb diff -x '*.rej' -x '*.orig' -x '*.git*' -Naur 10.24-0/wx+/choice_enum.h 10.24-1/wx+/choice_enum.h --- 10.24-0/wx+/choice_enum.h 2020-05-17 18:30:59.441499418 -0400 +++ 10.24-1/wx+/choice_enum.h 2020-05-17 18:53:59.893685507 -0400 @@ -95,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()) @@ -110,3 +92,204 @@ diff -x '*.rej' -x '*.orig' -x '*.git*' -Naur 10.24-0/wx+/choice_enum.h 10.24-1/ } } +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.2-0/FreeFileSync/Source/RealTimeSync/folder_selector2.cpp 11.2-1/FreeFileSync/Source/RealTimeSync/folder_selector2.cpp +--- 11.2-0/FreeFileSync/Source/RealTimeSync/folder_selector2.cpp 2020-10-02 14:39:05.273463072 -0400 ++++ 11.2-1/FreeFileSync/Source/RealTimeSync/folder_selector2.cpp 2020-10-02 15:06:56.670070620 -0400 +@@ -158,7 +158,7 @@ + } + + Zstring newFolderPath; +- wxDirDialog folderSelector(parent_, _("Select a folder"), utfTo<wxString>(defaultFolderPath), wxDD_DEFAULT_STYLE | wxDD_SHOW_HIDDEN); ++ wxDirDialog folderSelector(parent_, _("Select a folder"), utfTo<wxString>(defaultFolderPath)); + if (folderSelector.ShowModal() != wxID_OK) + return; + newFolderPath = utfTo<Zstring>(folderSelector.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.2-0/FreeFileSync/Source/ui/folder_selector.cpp 11.2-1/FreeFileSync/Source/ui/folder_selector.cpp +--- 11.2-0/FreeFileSync/Source/ui/folder_selector.cpp 2020-10-02 14:39:05.297463367 -0400 ++++ 11.2-1/FreeFileSync/Source/ui/folder_selector.cpp 2020-10-02 15:08:07.066935749 -0400 +@@ -232,7 +232,7 @@ + + Zstring shellItemPath; + //default size? Windows: not implemented, Linux(GTK2): not implemented, macOS: not implemented => wxWidgets, what is this shit!? +- wxDirDialog folderSelector(parent_, _("Select a folder"), utfTo<wxString>(defaultFolderNative), wxDD_DEFAULT_STYLE | wxDD_SHOW_HIDDEN); ++ wxDirDialog folderSelector(parent_, _("Select a folder"), utfTo<wxString>(defaultFolderNative)); + //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!? + if (folderSelector.ShowModal() != wxID_OK) +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_; |