summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--freefilesync/debian/changelog18
-rw-r--r--freefilesync/debian/freefilesync+devuan.dsc2
-rw-r--r--freefilesync/debian/patches/ffs_allow_parallel_ops.patch25
-rw-r--r--freefilesync/debian/patches/ffs_devuan.patch6
-rw-r--r--freefilesync/debian/patches/ffs_gcc.patch21
-rw-r--r--freefilesync/debian/patches/ffs_no_check_updates.patch52
-rw-r--r--freefilesync/debian/patches/ffs_traditional_view.patch308
-rw-r--r--freefilesync/debian/patches/revert_zenju_aggressive_upstreamisms.patch55
-rw-r--r--freefilesync/ffs_allow_parallel_ops.patch24
-rw-r--r--freefilesync/ffs_fedora.patch19
-rw-r--r--freefilesync/ffs_no_check_updates.patch60
-rw-r--r--freefilesync/ffs_traditional_view.patch235
-rw-r--r--freefilesync/freefilesync.spec8
-rw-r--r--freefilesync/revert_zenju_aggressive_upstreamisms.patch221
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_;
bgstack15