Compare commits

..

42 Commits

Author SHA1 Message Date
22450d34cc Update Standards-Version to 4.7.1, no changes needed. 2025-02-21 16:44:56 -06:00
f2ddcc5b52 No-change rebuild for lxqt-build-tools C++17 -> C++20. 2025-02-21 16:35:16 -06:00
d74fc4d211 Upload to Plucky 2024-11-15 15:34:45 -06:00
399d02e4bf Make Lintian happy 2024-11-05 15:52:46 -06:00
07aa29aec9 Update build dependencies. 2024-11-05 15:47:25 -06:00
e72435a954 New upstream release. 2024-11-05 14:54:02 -06:00
Aaron Rainbolt
7fa884cbf1 Release to Oracular. 2024-08-15 16:27:22 -05:00
Aaron Rainbolt
912ab3fe60 PPA upload 2024-06-26 13:11:12 -05:00
Aaron Rainbolt
829a1de024 Adjust build deps 2024-06-26 13:08:12 -05:00
Aaron Rainbolt
6cfade9fc8 Bump Standards-Version 2024-06-26 13:04:25 -05:00
Aaron Rainbolt
21c71bf398 Bump version for new upstream release 2024-06-26 13:01:53 -05:00
d26ace9d2d Updated copyright file. 2024-02-18 16:33:32 -06:00
c87edf96d5 Bump version for new upstream release 2024-02-18 16:31:49 -06:00
373a2574e3 Update the Lubuntu Manual patch to use the dedicated icon. 2023-12-01 15:02:47 -06:00
1dedbee57b Bump runtime dependency. 2023-11-13 15:51:41 -06:00
b4b645757a Upload to Noble 2023-11-12 21:28:10 -06:00
23547f8ba7 Install new SVG file. 2023-11-12 21:22:44 -06:00
e21dde4311 Update Lubuntu Manual patch. Needs testing. 2023-11-12 21:22:22 -06:00
733cda357d Bump build dependencies. 2023-11-12 19:29:11 -06:00
39655a4287 New upstream release. 2023-11-12 19:28:56 -06:00
9682163144 Upload to Mantic. 2023-08-11 09:52:20 -05:00
245a200721 Bump build dependencies. 2023-08-10 16:44:26 -05:00
c813d3f140 New upstream release. 2023-08-10 16:40:09 -05:00
Aaron Rainbolt
ab4baeb178 Fix the default tab for the Desktop Preferences window 2023-03-07 13:09:21 -06:00
Aaron Rainbolt
e08672cb49 Fix the Lubuntu Manual shortcut behavior 2023-03-02 18:44:02 -06:00
Aaron Rainbolt
637c32ce1b Fix the Lubuntu Manual checkbox behavior. 2023-03-02 17:46:49 -06:00
Aaron Rainbolt
59c245310b Put the Lubuntu Manual checkbox where it belongs. 2023-03-02 17:46:47 -06:00
Aaron Rainbolt
7d655d511a Removed trailing whitespace from changelog. 2023-01-27 16:57:06 -06:00
Aaron Rainbolt
fca5fc88e0 Added 'Rules-Requires-Root: no' to debian/control. 2023-01-27 16:56:24 -06:00
Aaron Rainbolt
c67aa0abdc Removed obsolete linker flag. 2023-01-27 16:55:21 -06:00
Aaron Rainbolt
bb6c0071df Bumped libfm-qt build dependency. 2023-01-27 16:03:36 -06:00
Aaron Rainbolt
cdfc1734c6 Bumped Standards-Version 2023-01-27 15:59:22 -06:00
Aaron Rainbolt
eff5a84fa6 Updated copyright file. 2023-01-27 15:58:21 -06:00
Aaron Rainbolt
11ffa3d90b Prepare for new upstream release. 2023-01-27 15:56:17 -06:00
e0bad6c9b1 Upload to Lunar. 2022-11-18 18:55:52 -06:00
34835eb271 Brief copyright update. 2022-11-18 18:55:16 -06:00
4446d0959d Remove reverse-applicable upstream patches. 2022-11-18 18:51:35 -06:00
9c9c87e096 Bump build dependencies in debian/control. 2022-11-18 18:48:57 -06:00
5c60472b2c Bump Standards-version to 4.6.1, no changes needed. 2022-11-18 18:47:58 -06:00
dfe3ac9066 Lubuntuify the package slightly, to make debhelper happy. 2022-11-18 18:47:52 -06:00
aa61af7064 Fix the watch file, for real this time. 2022-11-18 18:45:47 -06:00
c5995d1954 New upstream release. 2022-11-18 18:45:29 -06:00
14 changed files with 955 additions and 827 deletions

105
debian/changelog vendored
View File

@ -1,3 +1,107 @@
pcmanfm-qt (2.1.0-0ubuntu3) plucky; urgency=medium
* Update Standards-Version to 4.7.1, no changes needed.
-- Simon Quigley <tsimonq2@ubuntu.com> Fri, 21 Feb 2025 16:35:29 -0600
pcmanfm-qt (2.1.0-0ubuntu2) plucky; urgency=medium
* No-change rebuild for lxqt-build-tools C++17 -> C++20.
-- Simon Quigley <tsimonq2@ubuntu.com> Fri, 03 Jan 2025 04:00:52 -0600
pcmanfm-qt (2.1.0-0ubuntu1) plucky; urgency=medium
* New upstream release.
- Update build dependencies.
-- Simon Quigley <tsimonq2@ubuntu.com> Fri, 15 Nov 2024 15:33:33 -0600
pcmanfm-qt (2.0.0-0ubuntu1) oracular; urgency=medium
* New upstream release.
* Bump Standards-Version to 4.7.0, no changes necessary.
* Adjust build dependencies.
-- Aaron Rainbolt <arraybolt3@ubuntu.com> Thu, 15 Aug 2024 16:27:12 -0500
pcmanfm-qt (1.4.1-0ubuntu1) noble; urgency=medium
* New upstream release.
* Updated copyright file.
-- Aaron Rainbolt <arraybolt3@ubuntu.com> Sun, 18 Feb 2024 16:31:24 -0600
pcmanfm-qt (1.4.0-0ubuntu3) noble; urgency=medium
* Update the Lubuntu Manual patch to use the dedicated icon.
-- Simon Quigley <tsimonq2@ubuntu.com> Fri, 01 Dec 2023 14:54:31 -0600
pcmanfm-qt (1.4.0-0ubuntu2) noble; urgency=medium
* Bump runtime dependency.
-- Simon Quigley <tsimonq2@ubuntu.com> Mon, 13 Nov 2023 15:51:03 -0600
pcmanfm-qt (1.4.0-0ubuntu1) noble; urgency=medium
* New upstream release.
* Bump build dependencies.
* Update Lubuntu Manual patch. Needs testing.
* Install new SVG file.
-- Simon Quigley <tsimonq2@ubuntu.com> Sun, 12 Nov 2023 21:27:52 -0600
pcmanfm-qt (1.3.0-0ubuntu1) mantic; urgency=medium
* New upstream release.
* Bump build dependencies.
-- Simon Quigley <tsimonq2@ubuntu.com> Fri, 11 Aug 2023 09:52:17 -0500
pcmanfm-qt (1.2.1-0ubuntu3) lunar; urgency=medium
* Made the General tab in Desktop Preferences the default tab again.
-- Aaron Rainbolt <arraybolt3@ubuntu.com> Tue, 07 Mar 2023 12:35:39 -0600
pcmanfm-qt (1.2.1-0ubuntu2) lunar; urgency=medium
* Put the Lubuntu Manual checkbox where it belongs in the Desktop
Preferences window. (LP: #1998528)
* Make the Lubuntu Manual checkbox behave correctly (if the shortcut is
present, it should be checked, if the shortcut is missing, it should be
unchecked).
* Make the context menu of the Lubuntu Manual shortcut on the desktop behave
like the other special shortcuts (Home, Trash, Computer, Network).
-- Aaron Rainbolt <arraybolt3@ubuntu.com> Thu, 02 Mar 2023 17:41:45 -0600
pcmanfm-qt (1.2.1-0ubuntu1) lunar; urgency=medium
* New upstream release.
* Updated copyright file.
* Bumped Standards-Version to 4.6.2, no changes necessary.
* Bumped build dependency for libfm-qt.
* Removed obsolete '-Wl,--as-needed' linker flag.
* Added 'Rules-Requires-Root: no' to debian/control.
* Removed trailing whitespace from changelog.
-- Aaron Rainbolt <arraybolt3@ubuntu.com> Fri, 27 Jan 2023 15:55:12 -0600
pcmanfm-qt (1.2.0-0ubuntu1) lunar; urgency=medium
* New upstream release.
* Fix the watch file, for real this time.
* Lubuntuify the package slightly, to make debhelper happy.
* Bump Standards-version to 4.6.1, no changes needed.
* Bump build dependencies in debian/control.
* Remove reverse-applicable upstream patches.
* Brief copyright update.
-- Simon Quigley <tsimonq2@ubuntu.com> Fri, 18 Nov 2022 18:55:38 -0600
pcmanfm-qt (1.1.0-0ubuntu4) kinetic; urgency=medium pcmanfm-qt (1.1.0-0ubuntu4) kinetic; urgency=medium
* Backport some upstream patches: * Backport some upstream patches:
@ -540,4 +644,3 @@ pcmanfm-qt (0.9.0+20150816-1) unstable; urgency=medium
* Warpped lines in copyright. * Warpped lines in copyright.
-- Andrew Lee (李健秋) <ajqlee@debian.org> Mon, 17 Aug 2015 21:04:54 +0800 -- Andrew Lee (李健秋) <ajqlee@debian.org> Mon, 17 Aug 2015 21:04:54 +0800

56
debian/control vendored
View File

@ -1,6 +1,6 @@
Source: pcmanfm-qt Source: pcmanfm-qt
Maintainer: Lubuntu Developers <lubuntu-devel@lists.ubuntu.com> Maintainer: Lubuntu Developers <lubuntu-devel@lists.ubuntu.com>
XSBC-Original-Maintainer: LXQt Packaging Team <pkg-lxqt-devel@lists.alioth.debian.org> Original-Maintainer: LXQt Packaging Team <pkg-lxqt-devel@lists.alioth.debian.org>
Uploaders: Alf Gaida <agaida@siduction.org>, Uploaders: Alf Gaida <agaida@siduction.org>,
ChangZhuo Chen (陳昌倬) <czchen@debian.org>, ChangZhuo Chen (陳昌倬) <czchen@debian.org>,
Andrew Lee (李健秋) <ajqlee@debian.org>, Andrew Lee (李健秋) <ajqlee@debian.org>,
@ -9,26 +9,56 @@ Uploaders: Alf Gaida <agaida@siduction.org>,
Section: x11 Section: x11
Priority: optional Priority: optional
Build-Depends: debhelper-compat (= 13), Build-Depends: debhelper-compat (= 13),
layer-shell-qt,
libexif-dev, libexif-dev,
libfm-qt-dev (>= 1.1.0), libfm-qt6-dev (>= 2.1.0),
libkf5windowsystem-dev, libkf6windowsystem-dev,
liblayershellqtinterface-dev (>= 6.0.0),
libmenu-cache-dev, libmenu-cache-dev,
libqt5svg5-dev,
libqt5x11extras5-dev,
libx11-dev, libx11-dev,
lxqt-build-tools (>= 0.11.0) libxcb-composite0-dev,
Standards-Version: 4.5.1 libxcb-cursor-dev,
Vcs-Browser: https://phab.lubuntu.me/source/pcmanfm-qt/ libxcb-damage0-dev,
Vcs-Git: https://phab.lubuntu.me/source/pcmanfm-qt.git libxcb-dpms0-dev,
XS-Debian-Vcs-Browser: https://salsa.debian.org/lxqt-team/pcmanfm-qt libxcb-dri2-0-dev,
XS-Debian-Vcs-Git: https://salsa.debian.org/lxqt-team/pcmanfm-qt.git libxcb-dri3-dev,
libxcb-ewmh-dev,
libxcb-glx0-dev,
libxcb-icccm4-dev,
libxcb-keysyms1-dev,
libxcb-present-dev,
libxcb-record0-dev,
libxcb-render0-dev,
libxcb-res0-dev,
libxcb-screensaver0-dev,
libxcb-shape0-dev,
libxcb-shm0-dev,
libxcb-util-dev,
libxcb-xf86dri0-dev,
libxcb-xfixes0-dev,
libxcb-xinerama0-dev,
libxcb-xinput-dev,
libxcb-xkb-dev,
libxcb-xtest0-dev,
libxcb-xv0-dev,
libxcb-xvmc0-dev,
libxkbcommon-dev (>= 0.5.0),
lxqt-build-tools (>= 2.1.0),
qt6-svg-dev (>= 6.6.0),
qt6-wayland-dev (>= 6.6.0)
Standards-Version: 4.7.1
Vcs-Browser: https://git.lubuntu.me/Lubuntu/pcmanfm-qt-packaging
Vcs-Git: https://git.lubuntu.me/Lubuntu/pcmanfm-qt-packaging.git
Debian-Vcs-Browser: https://salsa.debian.org/lxqt-team/pcmanfm-qt
Debian-Vcs-Git: https://salsa.debian.org/lxqt-team/pcmanfm-qt.git
Homepage: https://github.com/lxqt/pcmanfm-qt Homepage: https://github.com/lxqt/pcmanfm-qt
Rules-Requires-Root: no
Package: pcmanfm-qt Package: pcmanfm-qt
Architecture: any Architecture: any
Depends: default-dbus-session-bus | dbus-session-bus | dbus-x11, Depends: default-dbus-session-bus | dbus-session-bus | dbus-x11,
desktop-file-utils, desktop-file-utils,
libfm-qt11 (>= 1.1.0), libfm-qt6-15,
lxqt-sudo, lxqt-sudo,
${misc:Depends}, ${misc:Depends},
${shlibs:Depends} ${shlibs:Depends}
@ -52,7 +82,7 @@ Package: pcmanfm-qt-l10n
Architecture: all Architecture: all
Multi-Arch: foreign Multi-Arch: foreign
Section: localization Section: localization
Depends: qttranslations5-l10n, ${misc:Depends} Depends: qt6-translations-l10n, ${misc:Depends}
Description: Language package for pcmanfm-qt Description: Language package for pcmanfm-qt
PCManFM-Qt is the Qt port of the LXDE file manager PCManFM. PCManFM-Qt is the Qt port of the LXDE file manager PCManFM.
. .

8
debian/copyright vendored
View File

@ -4,14 +4,18 @@ Source: https://github.com/lxqt/pcmanfm-qt
Files: * Files: *
Copyright: 2017, Pedram Pourang (Tsu Jan) <tsujan2000@gmail.com> Copyright: 2017, Pedram Pourang (Tsu Jan) <tsujan2000@gmail.com>
2013-2018 LXQt team 2013-2024 LXQt team
2009-2018 Hong Jen Yee (PCMan) <pcman.tw@gmail.com> 2009-2018 Hong Jen Yee (PCMan) <pcman.tw@gmail.com>
2012-2013 Andriy Grytsenko (LStranger) <andrej@rep.kiev.ua> 2012-2013 Andriy Grytsenko (LStranger) <andrej@rep.kiev.ua>
2014 Kuzma Shapran <kuzma.shapran@gmail.com> 2014 Kuzma Shapran <kuzma.shapran@gmail.com>
License: GPL-2.0+ License: GPL-2.0+
Files: icons/lubuntu-manual.svg
Copyright: 2010-2018 Rafael Laguna <rafaellaguna@gmail.com>
License: GPL-2.0+
Files: debian/* Files: debian/*
Copyright: 2021, Lubuntu Developers <lubuntu-devel@lists.ubuntu.com> Copyright: 2021-2025 Lubuntu Developers <lubuntu-devel@lists.ubuntu.com>
2014-2015 Wen Liao <wen.cf83@gmail.com> 2014-2015 Wen Liao <wen.cf83@gmail.com>
2014-2016 ChangZhuo Chen (陳昌倬) <czchen@debian.org> 2014-2016 ChangZhuo Chen (陳昌倬) <czchen@debian.org>
2013-2018 Alf Gaida <agaida@siduction.org> 2013-2018 Alf Gaida <agaida@siduction.org>

View File

@ -1,35 +1,19 @@
Description: Add a desktop shortcut for the Lubuntu Manual Description: Add a desktop shortcut for the Lubuntu Manual
Forwarded: eventually Forwarded: eventually
Author: Simon Quigley <tsimonq2@lubuntu.me> Author: Simon Quigley <tsimonq2@lubuntu.me>
Last-Update: 2022-06-16 Last-Update: 2023-12-01
--- ---
diff --git a/pcmanfm/desktop-preferences.ui b/pcmanfm/desktop-preferences.ui
index d73e731..459926a 100644
--- a/pcmanfm/desktop-preferences.ui
+++ b/pcmanfm/desktop-preferences.ui
@@ -573,6 +573,17 @@ are left clicked, even when it is not the default file manager.</string>
</property>
</widget>
</item>
+ <item>
+ <widget class="QCheckBox" name="lubuntuManualBox">
+ <property name="text">
+ <string>Lubuntu Manual</string>
+ </property>
+ <property name="icon">
+ <iconset theme="help-browser">
+ <normaloff>.</normaloff>.</iconset>
+ </property>
+ </widget>
+ </item>
</layout>
</widget>
</item>
diff --git a/pcmanfm/desktoppreferencesdialog.cpp b/pcmanfm/desktoppreferencesdialog.cpp
index 87fcfc2..a691d0c 100644
--- a/pcmanfm/desktoppreferencesdialog.cpp --- a/pcmanfm/desktoppreferencesdialog.cpp
+++ b/pcmanfm/desktoppreferencesdialog.cpp +++ b/pcmanfm/desktoppreferencesdialog.cpp
@@ -204,6 +204,9 @@ void DesktopPreferencesDialog::applySettings() @@ -120,6 +120,7 @@ DesktopPreferencesDialog::DesktopPrefere
ui.trashBox->setChecked(ds.contains(QLatin1String("Trash")));
ui.computerBox->setChecked(ds.contains(QLatin1String("Computer")));
ui.networkBox->setChecked(ds.contains(QLatin1String("Network")));
+ ui.lubuntuManualBox->setChecked(ds.contains(QLatin1String("Lubuntu Manual")));
connect(ui.buttonBox->button(QDialogButtonBox::Apply), &QPushButton::clicked,
this, &DesktopPreferencesDialog::onApplyClicked);
@@ -208,6 +209,9 @@ void DesktopPreferencesDialog::applySett
if(ui.networkBox->isChecked()) { if(ui.networkBox->isChecked()) {
ds << QLatin1String("Network"); ds << QLatin1String("Network");
} }
@ -39,11 +23,9 @@ index 87fcfc2..a691d0c 100644
settings.setDesktopShortcuts(ds); settings.setDesktopShortcuts(ds);
settings.setDesktopCellMargins(QSize(ui.hMargin->value(), ui.vMargin->value())); settings.setDesktopCellMargins(QSize(ui.hMargin->value(), ui.vMargin->value()));
diff --git a/pcmanfm/desktopwindow.cpp b/pcmanfm/desktopwindow.cpp
index 78e8d2f..3edb7f0 100644
--- a/pcmanfm/desktopwindow.cpp --- a/pcmanfm/desktopwindow.cpp
+++ b/pcmanfm/desktopwindow.cpp +++ b/pcmanfm/desktopwindow.cpp
@@ -276,6 +276,16 @@ void DesktopWindow::updateShortcutsFromSettings(Settings& settings) { @@ -280,6 +280,16 @@ void DesktopWindow::updateShortcutsFromS
paths.push_back(Fm::FilePath::fromLocalPath(network.toStdString().c_str())); paths.push_back(Fm::FilePath::fromLocalPath(network.toStdString().c_str()));
} }
} }
@ -60,15 +42,15 @@ index 78e8d2f..3edb7f0 100644
// WARNING: QFile::remove() is not compatible with libfm-qt and should not be used. // WARNING: QFile::remove() is not compatible with libfm-qt and should not be used.
if(!paths.empty()) { if(!paths.empty()) {
@@ -361,6 +371,20 @@ void DesktopWindow::createNetworkShortcut() { @@ -365,6 +375,20 @@ void DesktopWindow::createNetworkShortcu
g_key_file_free(kf); g_key_file_free(kf);
} }
+void DesktopWindow::createLubuntuManualShortcut() { +void DesktopWindow::createLubuntuManualShortcut() {
+ GKeyFile* kf = g_key_file_new(); + GKeyFile* kf = g_key_file_new();
+ g_key_file_set_string(kf, "Desktop Entry", "Type", "Application"); + g_key_file_set_string(kf, "Desktop Entry", "Type", "Application");
+ g_key_file_set_string(kf, "Desktop Entry", "Exec", "firefox manual.lubuntu.me"); + g_key_file_set_string(kf, "Desktop Entry", "Exec", "xdg-open https://manual.lubuntu.me");
+ g_key_file_set_string(kf, "Desktop Entry", "Icon", "help-browser"); + g_key_file_set_string(kf, "Desktop Entry", "Icon", "lubuntu-manual");
+ const QString name = tr("Lubuntu Manual"); + const QString name = tr("Lubuntu Manual");
+ g_key_file_set_string(kf, "Desktop Entry", "Name", name.toStdString().c_str()); + g_key_file_set_string(kf, "Desktop Entry", "Name", name.toStdString().c_str());
+ +
@ -81,21 +63,29 @@ index 78e8d2f..3edb7f0 100644
void DesktopWindow::createTrash() { void DesktopWindow::createTrash() {
if(trashMonitor_) { if(trashMonitor_) {
return; return;
@@ -1260,7 +1284,8 @@ void DesktopWindow::trustOurDesktopShortcut(std::shared_ptr<const Fm::FileInfo> @@ -1005,7 +1029,8 @@ void DesktopWindow::onFileClicked(int ty
if((fileName == QLatin1String("trash-can.desktop") && ds.contains(QLatin1String("Trash")))
|| (fileName == QLatin1String("user-home.desktop") && ds.contains(QLatin1String("Home")))
|| (fileName == QLatin1String("computer.desktop") && ds.contains(QLatin1String("Computer")))
- || (fileName == QLatin1String("network.desktop") && ds.contains(QLatin1String("Network")))) {
+ || (fileName == QLatin1String("network.desktop") && ds.contains(QLatin1String("Network")))
+ || (fileName == QLatin1String("lubuntu-manual.desktop") && ds.contains(QLatin1String("Lubuntu Manual")))) {
QMenu* menu = new QMenu(this);
// "Open" action for all
QAction* action = menu->addAction(tr("Open"));
@@ -1314,7 +1339,8 @@ void DesktopWindow::trustOurDesktopShort
const char* execStr = isHome ? homeExec.get() : const char* execStr = isHome ? homeExec.get() :
fileName == QLatin1String("trash-can.desktop") && ds.contains(QLatin1String("Trash")) ? "pcmanfm-qt trash:///" : fileName == QLatin1String("trash-can.desktop") && ds.contains(QLatin1String("Trash")) ? "pcmanfm-qt trash:///" :
fileName == QLatin1String("computer.desktop") && ds.contains(QLatin1String("Computer")) ? "pcmanfm-qt computer:///" : fileName == QLatin1String("computer.desktop") && ds.contains(QLatin1String("Computer")) ? "pcmanfm-qt computer:///" :
- fileName == QLatin1String("network.desktop") && ds.contains(QLatin1String("Network")) ? "pcmanfm-qt network:///" : nullptr; - fileName == QLatin1String("network.desktop") && ds.contains(QLatin1String("Network")) ? "pcmanfm-qt network:///" : nullptr;
+ fileName == QLatin1String("network.desktop") && ds.contains(QLatin1String("Network")) ? "pcmanfm-qt network:///" : + fileName == QLatin1String("network.desktop") && ds.contains(QLatin1String("Network")) ? "pcmanfm-qt network:///" :
+ fileName == QLatin1String("lubuntu-manual.desktop") && ds.contains(QLatin1String("Lubuntu Manual")) ? "firefox manual.lubuntu.me" : nullptr ; + fileName == QLatin1String("lubuntu-manual.desktop") && ds.contains(QLatin1String("Lubuntu Manual")) ? "xdg-open https://manual.lubuntu.me" : nullptr ;
if(execStr) { if(execStr) {
GKeyFile* kf = g_key_file_new(); GKeyFile* kf = g_key_file_new();
if(g_key_file_load_from_file(kf, file->path().toString().get(), G_KEY_FILE_NONE, nullptr)) { if(g_key_file_load_from_file(kf, file->path().toString().get(), G_KEY_FILE_NONE, nullptr)) {
diff --git a/pcmanfm/desktopwindow.h b/pcmanfm/desktopwindow.h
index 742d964..4a90cb4 100644
--- a/pcmanfm/desktopwindow.h --- a/pcmanfm/desktopwindow.h
+++ b/pcmanfm/desktopwindow.h +++ b/pcmanfm/desktopwindow.h
@@ -155,6 +155,7 @@ private: @@ -160,6 +160,7 @@ private:
void createHomeShortcut(); void createHomeShortcut();
void createComputerShortcut(); void createComputerShortcut();
void createNetworkShortcut(); void createNetworkShortcut();
@ -103,3 +93,709 @@ index 742d964..4a90cb4 100644
void createTrash(); void createTrash();
static void onTrashChanged(GFileMonitor* monitor, GFile* gf, GFile* other, GFileMonitorEvent evt, DesktopWindow* pThis); static void onTrashChanged(GFileMonitor* monitor, GFile* gf, GFile* other, GFileMonitorEvent evt, DesktopWindow* pThis);
--- a/pcmanfm/desktop-preferences.ui
+++ b/pcmanfm/desktop-preferences.ui
@@ -664,6 +664,17 @@ are left clicked, even when it is not th
</property>
</widget>
</item>
+ <item>
+ <widget class="QCheckBox" name="lubuntuManualBox">
+ <property name="text">
+ <string>Lubuntu Manual</string>
+ </property>
+ <property name="icon">
+ <iconset theme="lubuntu-manual">
+ <normaloff>.</normaloff>.</iconset>
+ </property>
+ </widget>
+ </item>
</layout>
</widget>
</item>
--- /dev/null
+++ b/icons/lubuntu-manual.svg
@@ -0,0 +1,683 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="192"
+ height="192"
+ id="svg4700"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ sodipodi:docname="manual192.svg"
+ inkscape:export-filename="/home/rafa/Documents/lubuntu/icons/lubuntu manual/manual192.png"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90">
+ <defs
+ id="defs4702">
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient4224">
+ <stop
+ style="stop-color:#5a0000;stop-opacity:1"
+ offset="0"
+ id="stop4226" />
+ <stop
+ style="stop-color:#ff0101;stop-opacity:1"
+ offset="1"
+ id="stop4228" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient4382">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0.50196081"
+ offset="0"
+ id="stop4384" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop4386" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient4326">
+ <stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop4328" />
+ <stop
+ style="stop-color:#000000;stop-opacity:0;"
+ offset="1"
+ id="stop4330" />
+ </linearGradient>
+ <inkscape:path-effect
+ effect="powerstroke"
+ id="path-effect4315"
+ is_visible="true"
+ offset_points="0,0"
+ sort_points="true"
+ interpolator_type="Linear"
+ interpolator_beta="0.2"
+ start_linecap_type="zerowidth"
+ linejoin_type="round"
+ miter_limit="4"
+ end_linecap_type="zerowidth"
+ cusp_linecap_type="round" />
+ <linearGradient
+ id="linearGradient4307">
+ <stop
+ style="stop-color:#90cfff;stop-opacity:1"
+ offset="0"
+ id="stop4309" />
+ <stop
+ style="stop-color:#27a8ff;stop-opacity:0"
+ offset="1"
+ id="stop4311" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4242">
+ <stop
+ id="stop4244"
+ offset="0"
+ style="stop-color:#2b8dd1;stop-opacity:1;" />
+ <stop
+ id="stop4246"
+ offset="1"
+ style="stop-color:#1a557e;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4456">
+ <stop
+ id="stop4458"
+ offset="0"
+ style="stop-color:#2b8dd1;stop-opacity:1;" />
+ <stop
+ id="stop4460"
+ offset="1"
+ style="stop-color:#1b5781;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4389">
+ <stop
+ id="stop4391"
+ offset="0"
+ style="stop-color:#1b557e;stop-opacity:1" />
+ <stop
+ id="stop4393"
+ offset="1"
+ style="stop-color:#1a5179;stop-opacity:1" />
+ </linearGradient>
+ <inkscape:path-effect
+ cusp_linecap_type="round"
+ end_linecap_type="zerowidth"
+ miter_limit="4"
+ linejoin_type="round"
+ start_linecap_type="zerowidth"
+ interpolator_beta="0.2"
+ interpolator_type="Linear"
+ sort_points="true"
+ offset_points="0,0"
+ is_visible="true"
+ id="path-effect4352"
+ effect="powerstroke" />
+ <inkscape:path-effect
+ effect="powerstroke"
+ id="path-effect4344"
+ is_visible="true"
+ offset_points="0,0"
+ sort_points="true"
+ interpolator_type="Linear"
+ interpolator_beta="0.2"
+ start_linecap_type="zerowidth"
+ linejoin_type="round"
+ miter_limit="4"
+ end_linecap_type="zerowidth"
+ cusp_linecap_type="round" />
+ <inkscape:path-effect
+ effect="spiro"
+ id="path-effect4329"
+ is_visible="true" />
+ <inkscape:path-effect
+ cusp_linecap_type="round"
+ end_linecap_type="zerowidth"
+ miter_limit="4"
+ linejoin_type="round"
+ start_linecap_type="zerowidth"
+ interpolator_beta="0.2"
+ interpolator_type="Linear"
+ sort_points="true"
+ offset_points="0,0"
+ is_visible="true"
+ id="path-effect4321"
+ effect="powerstroke" />
+ <inkscape:path-effect
+ effect="powerstroke"
+ id="path-effect4281"
+ is_visible="true"
+ offset_points="0,0"
+ sort_points="true"
+ interpolator_type="Linear"
+ interpolator_beta="0.2"
+ start_linecap_type="zerowidth"
+ linejoin_type="round"
+ miter_limit="4"
+ end_linecap_type="zerowidth"
+ cusp_linecap_type="round" />
+ <linearGradient
+ id="linearGradient3834">
+ <stop
+ style="stop-color:#2b8dd1;stop-opacity:1;"
+ offset="0"
+ id="stop3836" />
+ <stop
+ style="stop-color:#2578b2;stop-opacity:1;"
+ offset="1"
+ id="stop3838" />
+ </linearGradient>
+ <filter
+ id="filter3174"
+ style="color-interpolation-filters:sRGB">
+ <feGaussianBlur
+ stdDeviation="1.71"
+ id="feGaussianBlur3176" />
+ </filter>
+ <linearGradient
+ gradientTransform="scale(1.0058652,0.994169)"
+ gradientUnits="userSpaceOnUse"
+ id="ButtonShadow"
+ y2="7.0165396"
+ x2="45.447727"
+ y1="92.539597"
+ x1="45.447727">
+ <stop
+ offset="0"
+ style="stop-color:#000000;stop-opacity:1"
+ id="stop3750" />
+ <stop
+ offset="1"
+ style="stop-color:#000000;stop-opacity:0.58823532"
+ id="stop3752" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient5048-8-7">
+ <stop
+ offset="0"
+ style="stop-color:#000000;stop-opacity:0"
+ id="stop5050-4-2" />
+ <stop
+ offset="0.5"
+ style="stop-color:#000000;stop-opacity:1"
+ id="stop5056-7-4" />
+ <stop
+ offset="1"
+ style="stop-color:#000000;stop-opacity:0"
+ id="stop5052-0-1-7" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient5060-29-0">
+ <stop
+ offset="0"
+ style="stop-color:#000000;stop-opacity:1"
+ id="stop5062-9-7" />
+ <stop
+ offset="1"
+ style="stop-color:#000000;stop-opacity:0"
+ id="stop5064-08-2" />
+ </linearGradient>
+ <filter
+ id="filter3174-0"
+ style="color-interpolation-filters:sRGB">
+ <feGaussianBlur
+ stdDeviation="1.71"
+ id="feGaussianBlur3176-9" />
+ </filter>
+ <linearGradient
+ gradientTransform="scale(1.0058652,0.994169)"
+ gradientUnits="userSpaceOnUse"
+ id="ButtonShadow-3"
+ y2="7.0165396"
+ x2="45.447727"
+ y1="92.539597"
+ x1="45.447727">
+ <stop
+ offset="0"
+ style="stop-color:#000000;stop-opacity:1"
+ id="stop3750-8" />
+ <stop
+ offset="1"
+ style="stop-color:#000000;stop-opacity:0.58823532"
+ id="stop3752-1" />
+ </linearGradient>
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5060-29-0"
+ id="radialGradient4030"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.06214224,0,0,0.02900085,1.6365015,28.953157)"
+ cx="605.71429"
+ cy="486.64789"
+ fx="605.71429"
+ fy="486.64789"
+ r="117.14286" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5048-8-7"
+ id="linearGradient4032"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.06214224,0,0,0.02900085,1.6242719,28.953157)"
+ x1="302.85715"
+ y1="366.64789"
+ x2="302.85715"
+ y2="609.50507" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5060-29-0"
+ id="radialGradient4034"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-0.06214224,0,0,0.02900085,46.53201,28.953157)"
+ cx="605.71429"
+ cy="486.64789"
+ fx="605.71429"
+ fy="486.64789"
+ r="117.14286" />
+ <linearGradient
+ id="linearGradient3768"
+ inkscape:collect="always">
+ <stop
+ id="stop3770"
+ offset="0"
+ style="stop-color:#61bbff;stop-opacity:1" />
+ <stop
+ id="stop3772"
+ offset="1"
+ style="stop-color:#0091f3;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4242"
+ id="linearGradient3840"
+ x1="33.189663"
+ y1="1005.5547"
+ x2="33.189663"
+ y2="1051.2649"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(3.3666402,0,0,3.7220007,15.040259,-3882.4165)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3768"
+ id="linearGradient3465"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(3.356103,0,0,3.0865386,15.45353,-3243.4134)"
+ x1="15"
+ y1="1005.3622"
+ x2="15"
+ y2="1051.3622" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4389"
+ id="linearGradient3467"
+ gradientUnits="userSpaceOnUse"
+ x1="1.254336"
+ y1="1058.204"
+ x2="15.183573"
+ y2="1058.204"
+ gradientTransform="matrix(3.3666405,0,0,3.0865371,15.040261,-3243.786)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4307"
+ id="linearGradient3469"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(3.3157894,0,0,3.0340879,16.421055,-3189.475)"
+ x1="34.285713"
+ y1="1002.3465"
+ x2="21.42857"
+ y2="1031.8778" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3834"
+ id="linearGradient4317"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(3.3666405,0,0,3.0865371,15.040258,-3243.786)"
+ x1="33.189663"
+ y1="1005.5547"
+ x2="33.189663"
+ y2="1051.2649" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3768"
+ id="linearGradient4323"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-3.356103,0,0,3.0865386,174.39992,-3273.2809)"
+ x1="15"
+ y1="1005.3622"
+ x2="15"
+ y2="1051.3622" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4456"
+ id="linearGradient4325"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-3.3666405,0,0,3.0865371,174.81318,-3273.6535)"
+ x1="33.189663"
+ y1="1005.5547"
+ x2="33.540394"
+ y2="1060.9689" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3768"
+ id="linearGradient4297"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(3.3563192,0,0,3.086755,15.448336,-3243.636)"
+ x1="15"
+ y1="1005.3622"
+ x2="15"
+ y2="1051.3622" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4242"
+ id="linearGradient4299"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(3.3668574,0,0,3.0867535,15.035041,-3244.0086)"
+ x1="33.189663"
+ y1="1005.5547"
+ x2="33.189663"
+ y2="1051.2649" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4326"
+ id="linearGradient4332"
+ x1="40"
+ y1="43"
+ x2="42"
+ y2="43"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(4.2631576,0,0,4.2666859,-6.3157863,-156.80092)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4382"
+ id="linearGradient4388"
+ x1="15"
+ y1="37"
+ x2="15"
+ y2="4"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(4.2631576,0,0,4.2666859,-6.3157863,-156.80092)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4224"
+ id="linearGradient4230"
+ x1="34"
+ y1="40"
+ x2="34"
+ y2="43"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(4.2631576,0,0,4.2666859,-6.3157863,-156.80092)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4326"
+ id="linearGradient3453"
+ gradientUnits="userSpaceOnUse"
+ x1="40"
+ y1="43"
+ x2="42"
+ y2="43"
+ gradientTransform="matrix(4.2631576,0,0,4.2666859,-6.3157863,-156.80092)" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4326"
+ id="linearGradient3455"
+ gradientUnits="userSpaceOnUse"
+ x1="40"
+ y1="43"
+ x2="42"
+ y2="43"
+ gradientTransform="matrix(4.2631576,0,0,4.2666859,-6.3157863,-156.80092)" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="2"
+ inkscape:cx="148.16082"
+ inkscape:cy="73.78278"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ inkscape:grid-bbox="true"
+ inkscape:document-units="px"
+ inkscape:window-width="1301"
+ inkscape:window-height="744"
+ inkscape:window-x="65"
+ inkscape:window-y="24"
+ inkscape:window-maximized="1"
+ inkscape:snap-to-guides="false"
+ inkscape:snap-grids="true"
+ inkscape:snap-page="true"
+ inkscape:snap-center="false"
+ inkscape:snap-object-midpoints="false"
+ inkscape:snap-bbox="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:bbox-nodes="true"
+ inkscape:bbox-paths="true"
+ inkscape:snap-smooth-nodes="true"
+ inkscape:object-nodes="true"
+ inkscape:snap-intersection-paths="true"
+ inkscape:object-paths="true"
+ showguides="false"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-others="false"
+ inkscape:snap-global="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid1021" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata4705">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ transform="translate(0,144)">
+ <g
+ id="layer2"
+ style="display:none"
+ transform="translate(5.204491,-179.6879)">
+ <rect
+ width="86"
+ height="85"
+ rx="6"
+ ry="6"
+ x="5"
+ y="7"
+ id="rect3745"
+ style="opacity:0.9;fill:url(#ButtonShadow);fill-opacity:1;fill-rule:nonzero;stroke:none;filter:url(#filter3174)" />
+ </g>
+ <g
+ id="layer2-0"
+ style="display:none"
+ transform="matrix(1.9515901,0,0,1.9515901,-37.264816,-396.93714)">
+ <rect
+ width="86"
+ height="85"
+ rx="3.0744162"
+ ry="3.0744162"
+ x="5"
+ y="7"
+ id="rect3745-9"
+ style="opacity:0.9;fill:url(#ButtonShadow-3);fill-opacity:1;fill-rule:nonzero;stroke:none;filter:url(#filter3174-0)" />
+ </g>
+ <g
+ id="g1017-7"
+ transform="matrix(3.5621042,0,0,4.2405982,10.209386,-149.73618)">
+ <path
+ inkscape:connector-curvature="0"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.5;fill:url(#radialGradient4030);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:104.96237946;marker:none"
+ id="path5058-0-2"
+ d="m 39.087163,39.586499 c 0,0 0,7.042675 0,7.042675 3.200171,0.01326 7.736457,-1.577906 7.736455,-3.52179 0,-1.943885 -3.57115,-3.520884 -7.736455,-3.520885 z" />
+ <rect
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.5;fill:url(#linearGradient4032);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:104.96237946;marker:none"
+ id="rect4173-6-3"
+ y="39.58625"
+ x="9.0813398"
+ height="7.0430632"
+ width="30.005821" />
+ <path
+ inkscape:connector-curvature="0"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.5;fill:url(#radialGradient4034);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:104.96237946;marker:none"
+ id="path5018-7-4"
+ d="m 9.0813406,39.586499 c 0,0 0,7.042675 0,7.042675 -3.2001721,0.01326 -7.7364568,-1.577906 -7.7364568,-3.52179 0,-1.943885 3.57115,-3.520884 7.7364568,-3.520885 z" />
+ </g>
+ <g
+ id="g4574"
+ transform="matrix(6.8513602,0,0,6.831439,-103.74555,-218.3363)" />
+ <g
+ id="layer4"
+ transform="matrix(4.2631576,0,0,4.2666859,-239.91768,-919.20606)" />
+ <g
+ id="layer4-7"
+ transform="matrix(8.3199362,0,0,8.326822,-165.18157,-1850.407)" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient3840);stroke-width:4.26492119;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ id="rect2996"
+ width="157.73683"
+ height="174.93413"
+ x="17.13158"
+ y="-141.86752"
+ ry="17.066744"
+ rx="17.052629" />
+ <path
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient3453);stroke-width:4.21033764;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.50196078;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ d="m 174.86897,-16.000285 c 0,6.4000288 0,12.8000575 0,19.2000863 0,0 5e-4,4.2666859 -2.13083,8.5333717 -2.13133,4.266685 -6.39448,8.53337 -14.92179,8.533372 -41.21077,0 -82.421527,0 -123.632286,0 -8.659836,-4e-6 -12.92299,-4.266688 -15.021189,-8.533372 -2.0982,-4.2666858 -2.031442,-8.5333717 -2.031442,-8.5333717 2.16e-4,-6.4000288 4.32e-4,-12.8000575 6.48e-4,-19.2000863 -2.16e-4,6.4000288 -4.32e-4,12.8000575 -6.48e-4,19.2000863 0,0 -0.06676,4.2666859 2.031442,8.5333717 2.098199,4.266684 6.361353,8.533368 15.021176,8.533372 41.210772,0 82.421529,0 123.632289,0 8.52732,-2e-6 12.79047,-4.266687 14.9218,-8.533372 2.13133,-4.2666858 2.13083,-8.5333717 2.13083,-8.5333717 0,-6.4000288 0,-12.8000575 0,-19.2000863 z"
+ id="path4313"
+ inkscape:path-effect="#path-effect4315"
+ inkscape:original-d="m 174.86897,-16.000285 0,19.2000863 c 0,0 0.002,17.0667437 -17.05263,17.0667437 l -123.632276,0 c -17.319663,0 -17.052631,-17.0667437 -17.052631,-17.0667437 l 6.48e-4,-19.2000863"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccc" />
+ <path
+ sodipodi:nodetypes="cccccc"
+ inkscape:connector-curvature="0"
+ inkscape:original-d="m 174.86897,-24.533657 0,19.2000865 c 0,0 0.002,17.0667435 -17.05263,17.0667435 l -123.632276,0 c -17.319663,0 -17.052631,-17.0667435 -17.052631,-17.0667435 l 6.48e-4,-19.2000865"
+ inkscape:path-effect="#path-effect4352"
+ id="path4350"
+ d="m 174.86897,-24.533657 c 0,6.400029 0,12.800058 0,19.2000865 0,0 5e-4,4.2666859 -2.13083,8.5333717 -2.13133,4.2666849 -6.39448,8.5333698 -14.92179,8.5333718 -41.21077,0 -82.421527,0 -123.632286,0 -8.659836,-4e-6 -12.92299,-4.266688 -15.021189,-8.5333718 -2.0982,-4.2666858 -2.031442,-8.5333717 -2.031442,-8.5333717 2.16e-4,-6.4000285 4.32e-4,-12.8000575 6.48e-4,-19.2000865 -2.16e-4,6.400029 -4.32e-4,12.800058 -6.48e-4,19.2000865 0,0 -0.06676,4.2666859 2.031442,8.5333717 2.098199,4.2666838 6.361353,8.5333678 15.021176,8.5333718 41.210772,0 82.421529,0 123.632289,0 8.52732,-2e-6 12.79047,-4.2666869 14.9218,-8.5333718 2.13133,-4.2666858 2.13083,-8.5333717 2.13083,-8.5333717 0,-6.4000285 0,-12.8000575 0,-19.2000865 z"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient3455);stroke-width:4.21033764;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.50196078;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
+ <path
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient4332);stroke-width:4.21033764;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.50196078;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ d="m 174.87916,-7.4941734 c 0,7.11862847 0,14.2372569 0,21.3558854 0,0 -0.92095,3.734551 -3.51435,7.469102 -2.59339,3.734551 -6.85924,7.469101 -13.54902,7.469103 -41.32876,0.0091 -82.657509,0.0182 -123.986259,0.02731 -6.689792,-4e-6 -9.801202,-3.741355 -11.240167,-7.482707 -1.438966,-3.741353 -1.205484,-7.482706 -1.205484,-7.482706 2.1e-4,-7.1186284 4.2e-4,-14.2372568 6.3e-4,-21.3558852 -2.1e-4,7.1186284 -4.2e-4,14.2372568 -6.3e-4,21.3558852 0,0 -0.233482,3.741353 1.205484,7.482706 1.438965,3.741352 4.550375,7.482703 11.240157,7.482707 41.32876,-0.0091 82.657509,-0.0182 123.986259,-0.02731 6.68979,-2e-6 10.95564,-3.734552 13.54903,-7.469103 2.5934,-3.734551 3.51435,-7.469102 3.51435,-7.469102 0,-7.1186285 0,-14.23725693 0,-21.3558854 z"
+ id="path4342"
+ inkscape:path-effect="#path-effect4344"
+ inkscape:original-d="m 174.87916,-7.4941734 0,21.3558854 c 0,0 -3.6838,14.938205 -17.06338,14.938205 L 33.829531,28.827223 C 20.449953,28.827223 21.38388,13.86181 21.38388,13.86181 l 6.3e-4,-21.3558852"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccc" />
+ <rect
+ ry="17.066744"
+ y="-141.86752"
+ x="17.13158"
+ height="145.06732"
+ width="157.73683"
+ id="rect3449"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient4317);stroke-width:4.26492119;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ rx="17.052629" />
+ <rect
+ ry="17.024317"
+ y="-141.8726"
+ x="17.126493"
+ height="145.0775"
+ width="157.74701"
+ id="rect4295"
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient4297);fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient4299);stroke-width:4.25474834;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" />
+ <path
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:url(#linearGradient3465);fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient3467);stroke-width:4.26492119;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ d="m 85.342102,3.1998013 c -17.05263,0 -34.105261,0 -51.157891,0 0,0 -4.263158,-0.1005755 -8.526312,1.7158093 -4.263161,1.8163879 -8.526318,5.5497384 -8.526318,13.2175914 0,7.600326 4.263158,11.333677 8.526315,13.166945 4.263159,1.833268 8.526312,1.766456 8.526315,1.766456 -34.184211,0 -34.184211,0 51.157891,0 -17.05263,0 -34.105261,0 -51.157891,0 -3e-6,0 -4.263156,0.06681 -8.52631,-1.766453 -4.263162,-1.833271 -8.52632,-5.566622 -8.52632,-13.166948 0,-7.667853 4.263157,-11.4012035 8.526315,-13.2175903 4.263157,-1.8163859 8.526315,-1.7158104 8.526315,-1.7158104 17.05263,0 34.105261,0 51.157891,0 z"
+ id="path4279"
+ inkscape:original-d="m 85.342102,3.1998013 -51.157891,0 c 0,0 -17.05263,-0.4023059 -17.05263,14.9334007 0,15.200653 17.05263,14.933401 17.05263,14.933401 l 51.157891,0"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc"
+ inkscape:path-effect="#path-effect4281" />
+ <path
+ sodipodi:nodetypes="cccccc"
+ inkscape:connector-curvature="0"
+ inkscape:original-d="m 106.65789,-141.86752 51.15789,0 c 0,0 17.05263,-0.002 17.05263,17.06674 l 0,110.933838 c 0,17.3339957 -17.05263,17.0667433 -17.05263,17.0667433 L 87.458713,3.1991527"
+ id="path4319"
+ d="m 106.65789,-141.86752 c 17.05263,0 34.10526,0 51.15789,0 0,0 4.26316,-5e-4 8.52631,2.13259 4.26316,2.13309 8.52632,6.39978 8.52632,14.93414 0,36.977956 0,73.955902 0,110.933848 0,8.6670021 -4.26316,12.93368472 -8.52632,15.03362 -4.26315,2.0999364 -8.52631,2.0331233 -8.52631,2.0331233 -23.45236,-2.162e-4 -46.90471,-4.324e-4 -70.357067,-6.486e-4 23.452357,2.162e-4 46.904707,4.324e-4 70.357067,6.486e-4 0,0 4.26316,0.066813 8.52631,-2.0331233 4.26316,-2.09993528 8.52632,-6.3666179 8.52632,-15.033607 0,-36.977959 0,-73.955905 0,-110.933851 0,-8.53437 -4.26316,-12.80106 -8.52632,-14.93415 -4.26315,-2.13309 -8.52631,-2.13259 -8.52631,-2.13259 -17.05263,0 -34.10526,0 -51.15789,0 z"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:url(#linearGradient4323);fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient4325);stroke-width:4.26492119;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ inkscape:path-effect="#path-effect4321" />
+ <path
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#1c5a84;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ d="m 27.363159,3.1998013 -12.363157,-14.9334003 0,25.600115 12.363157,-10.6667147 z"
+ id="path4327"
+ inkscape:path-effect="#path-effect4329"
+ inkscape:original-d="m 27.363159,3.1998013 -12.363157,-14.9334003 0,25.600115 z"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccc" />
+ <path
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#1c5a84;fill-opacity:1;fill-rule:nonzero;stroke:#1b5882;stroke-width:4.26492119;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d="m 34.184211,-141.86752 12.789473,0 0,145.0673213 -12.789473,0 c -9.447157,0 -17.05263,-7.6117677 -17.05263,-17.0667433 l 0,-110.933838 c 0,-9.45497 7.605473,-17.06674 17.05263,-17.06674 z"
+ id="rect4333"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="sccssss" />
+ <rect
+ style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient3469);stroke-width:4.26492119;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ id="rect3451"
+ width="149.21051"
+ height="136.53395"
+ x="21.394737"
+ y="-137.60083"
+ ry="12.800057"
+ rx="14.921052" />
+ <rect
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:url(#linearGradient4388);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.50196078;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ id="rect4380"
+ width="4.2631574"
+ height="140.80063"
+ x="49.105263"
+ y="-139.73418" />
+ <path
+ sodipodi:nodetypes="cccccc"
+ inkscape:connector-curvature="0"
+ id="path4245"
+ d="m 125.8421,13.866516 25.57894,0 0,34.133487 -12.78947,-12.800058 -12.78947,12.800058 z"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#363636;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.50196078;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
+ <path
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:url(#linearGradient4230);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.50196078;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ d="m 125.8421,9.5998301 25.57894,0 0,34.1334869 L 138.63157,30.93326 125.8421,43.733317 Z"
+ id="rect3421"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccc" />
+ <path
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:0.50196078;fill-rule:evenodd;stroke:none;stroke-width:1.41732287;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ d="m 110.50011,-118 a 46.500106,46.14368 0 0 0 -46.500112,46.143686 46.500106,46.14368 0 0 0 0.08636,2.617885 46.500106,46.14368 0 0 1 46.413622,-44.366931 46.500106,46.14368 0 0 1 46.41362,43.525797 A 46.500106,46.14368 0 0 0 157,-71.856314 46.500106,46.14368 0 0 0 110.49988,-118 Z m 7.24835,23.749936 c -1.80279,-0.24566 -3.67059,0.02197 -5.3368,0.746737 -1.66616,0.725862 -3.12251,1.915797 -4.16043,3.398987 -1.03798,1.483146 -1.65253,3.252734 -1.75589,5.055547 -0.0558,0.972181 0.07,1.938034 0.30291,2.88398 0.27723,-1.261481 0.71089,-2.484245 1.45316,-3.544889 1.03792,-1.483191 2.49426,-2.673126 4.16043,-3.398989 1.6662,-0.725862 3.534,-0.992353 5.33679,-0.746737 2.52598,0.344102 4.89948,1.697605 6.4699,3.690792 l 25.17025,0 -22.08238,-3.012742 c -0.26483,-0.499143 -0.64223,-0.927489 -0.97738,-1.381894 l -2.11049,0 c -1.57042,-1.993188 -3.94392,-3.346648 -6.4699,-3.690792 z m -34.86645,7.132672 c -0.699184,2.0831 -0.853831,4.329155 -0.510305,6.497557 0.119128,-0.722654 0.284315,-1.434234 0.518985,-2.128674 l 27.87757,15.509992 -27.88625,-19.878875 z m 21.80558,1.313248 c -0.24313,1.277916 -0.29228,2.591299 -0.11248,3.87963 0.33569,2.407513 1.42959,4.700415 3.08792,6.488988 -0.86168,-1.590464 -1.27114,-3.415819 -1.16773,-5.218632 0.009,-0.175345 0.0841,-0.340584 0.10362,-0.515006 -0.95714,-1.389453 -1.60367,-2.979739 -1.91155,-4.63498 z m -29.49506,0.575083 c -0.162086,1.411205 -0.212129,2.839242 -0.03543,4.248733 0.42293,3.353505 1.851856,6.555919 4.013402,9.166949 -0.01329,-0.533157 -0.02214,-1.065084 0.02657,-1.596528 l 4.532387,1.261745 c -0.03543,-0.06899 -0.05226,-0.145024 -0.08636,-0.214459 -1.542653,-0.940672 -2.969586,-2.070488 -4.160431,-3.424696 -2.321552,-2.63999 -3.821911,-5.968927 -4.290189,-9.441613 z m 46.11089,9.544623 c -0.003,0.01758 -0.004,0.03515 -0.009,0.05142 -0.61837,3.860952 0.54219,7.763345 1.69534,11.501555 0.73055,2.368314 1.41658,4.798723 1.71258,7.244294 0.009,-0.04922 0.0266,-0.09624 0.0354,-0.145901 0.58156,-3.866577 -0.59409,-7.754776 -1.74721,-11.492986 -0.72159,-2.339264 -1.39801,-4.741592 -1.68666,-7.158467 z m -42.106123,6.669168 c -0.237372,2.754382 0.3069,5.572047 1.556913,8.042537 1.250055,2.470489 3.202351,4.586549 5.570359,6.042624 3.515187,2.161503 7.942971,2.799779 11.936401,1.733816 -4.00025,0.02637 -7.964672,-1.935881 -10.336267,-5.132759 -0.07927,-0.10679 -0.140385,-0.225444 -0.216115,-0.334871 -0.462167,-0.22149 -0.947273,-0.392441 -1.383931,-0.660954 -2.367963,-1.456075 -4.320259,-3.572135 -5.570315,-6.042625 -0.568896,-1.124324 -0.967113,-2.332761 -1.236903,-3.562029 l -0.320186,-0.0857 z m 6.314183,0.09448 c 0.166958,1.615337 0.670178,3.191604 1.435835,4.62641 l 21.943975,3.562073 -18.899325,-5.27875 c -1.456693,-0.701868 -2.782832,-1.661173 -3.909595,-2.815293 l -0.57089,-0.09448 z m 45.05564,14.102345 c -0.45194,2.690132 -1.61346,5.268685 -3.28685,7.441701 -2.25047,2.922389 -5.37727,5.129771 -8.79663,6.549019 -2.55347,1.059855 -5.28223,1.658887 -8.04407,1.836826 -2.5072,0.6236 -5.10296,0.848209 -7.68084,0.66091 l -3.390615,7.982462 0,3.235903 A 46.500106,46.14368 0 0 0 99.809201,-27 l 3.451149,-8.128363 c 5.04783,1.142386 10.44685,0.677873 15.22325,-1.30468 3.41936,-1.419248 6.54615,-3.62663 8.79663,-6.549019 2.25047,-2.92239 3.58941,-6.571652 3.49446,-10.248425 -0.0133,-0.539309 -0.13817,-1.057964 -0.20771,-1.587913 z"
+ id="path4301"
+ inkscape:connector-curvature="0" />
+ <path
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:0.51020406;fill-rule:evenodd;stroke:none;stroke-width:1.41732287;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ d="m 156.91333,-68 c -0.96122,23.352824 -21.44904,41.828094 -46.41342,41.854254 -3.60184,-0.01658 -7.18951,-0.423488 -10.690817,-1.21458 l -0.441085,0.987849 0,-1.09311 c -19.795942,-4.572965 -34.10029,-20.685325 -35.281476,-39.740875 -0.03986,0.558141 -0.06909,1.116947 -0.08636,1.676125 C 64.000172,-41.489195 84.818891,-22 110.50009,-22 136.18128,-22 157,-41.489195 157,-65.530337 156.996,-66.35418 156.969,-67.17769 156.9136,-68 Z"
+ id="path4320"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccscc" />
+ <path
+ id="path5170"
+ style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:0.16326533;fill-rule:evenodd;stroke:none;stroke-width:1.41732287;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ d="m 116.54149,-96.833799 c -1.98945,0.0088 -3.97672,0.48378 -5.72702,1.379709 -2.15419,1.102683 -3.94018,2.839363 -5.04652,4.906967 -1.1063,2.067649 -1.52799,4.457156 -1.19213,6.752812 0.33569,2.295657 1.42768,4.487165 3.086,6.192649 -0.86162,-1.516592 -1.26989,-3.260796 -1.16648,-4.979831 0.10318,-1.719081 0.71835,-3.407977 1.75628,-4.82227 1.03796,-1.414247 2.49567,-2.549359 4.16183,-3.241523 1.6662,-0.692165 3.53594,-0.939049 5.33872,-0.704836 2.52592,0.328239 4.89763,1.618408 6.46805,3.519032 l 25.16438,0 -22.07945,-2.879317 c -1.83679,-3.300396 -5.47113,-5.644407 -9.38912,-6.055192 -0.4565,-0.04796 -0.91548,-0.0704 -1.37454,-0.0682 z m -39.569522,4.06934 c -1.617356,3.023461 -2.257062,6.507336 -1.812523,9.869817 0.444584,3.36248 1.971597,6.590013 4.326219,9.143243 1.317719,1.428813 2.896059,2.634809 4.634801,3.576893 l -4.923676,-1.309924 c -0.237371,2.626361 0.308671,5.312208 1.558589,7.667925 1.250006,2.355716 3.200611,4.373776 5.568608,5.762195 3.515171,2.061093 7.941653,2.677268 11.935065,1.660824 -4.000276,0.02641 -7.964549,-1.852928 -10.336089,-4.901291 -1.338178,-1.720093 -2.179473,-3.78268 -2.409935,-5.907397 l 23.377543,3.617681 -18.900044,-5.028409 c -1.512045,-0.694716 -2.893668,-1.644764 -4.046644,-2.802316 -1.594238,-1.600588 -2.752441,-3.587056 -3.333424,-5.7167 -0.66517,-2.438481 -0.566546,-5.058548 0.279443,-7.446297 l 27.876339,14.787653 -33.79445,-22.973897 z m 45.460302,11.547669 c -0.55166,1.082663 -0.9354,2.24158 -1.13482,3.428612 -0.61836,3.681569 0.5387,7.400712 1.69185,10.965284 1.15311,3.564529 2.32854,7.273684 1.74698,10.960621 -0.43444,2.754664 -1.85513,5.333284 -3.84293,7.38738 -1.98781,2.054052 -4.52444,3.59766 -7.25005,4.649084 -4.49136,1.73272 -9.54258,2.139765 -14.278968,1.150821 l 0,12.256112 3.894828,-8.748477 c 5.04777,1.089353 10.45163,0.648692 15.22806,-1.241724 3.41934,-1.353307 6.53962,-3.460291 8.79008,-6.2469 2.25042,-2.786608 3.59382,-6.269252 3.49887,-9.775217 -0.11425,-4.213748 -2.21897,-8.118836 -4.25576,-11.867548 -2.03683,-3.748668 -4.10045,-7.68394 -4.12308,-11.899052 -0.002,-0.34012 0.009,-0.679845 0.0354,-1.018996 z m 34.56755,11.216788 A 46.499907,44.000001 0 0 1 110.49991,-26 46.499907,44.000001 0 0 1 63.999998,-70.000002 46.499907,44.000001 0 0 1 110.49991,-114 a 46.499907,44.000001 0 0 1 46.49991,43.999998 z"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>

View File

@ -1,215 +0,0 @@
From c84434e576ec37208237f143ad5ef8f37ce25a24 Mon Sep 17 00:00:00 2001
From: tsujan <tsujan2000@gmail.com>
Date: Fri, 3 Jun 2022 05:16:58 +0430
Subject: [PATCH] Consider device pixel ratio when drawing wallpaper (#1596)
Previously, wallpapers weren't sharp with scale factors > 1.
Also, an old problem is fixed in centering per-screen wallpapers with multi-screen setups. Previously, if the centered wallpaper was smaller than the screen size, the dektop background color would be removed from the screen part to its right and bottom.
Fixes https://github.com/lxqt/pcmanfm-qt/issues/1595
---
pcmanfm/desktopwindow.cpp | 93 ++++++++++++++++++++++++---------------
1 file changed, 58 insertions(+), 35 deletions(-)
diff --git a/pcmanfm/desktopwindow.cpp b/pcmanfm/desktopwindow.cpp
index b0734582..d69b660e 100644
--- a/pcmanfm/desktopwindow.cpp
+++ b/pcmanfm/desktopwindow.cpp
@@ -644,88 +644,107 @@ QImage DesktopWindow::loadWallpaperFile(QSize requiredSize) {
// really generate the background pixmap according to current settings and apply it.
void DesktopWindow::updateWallpaper() {
if(wallpaperMode_ != WallpaperNone) { // use wallpaper
+ auto screen = getDesktopScreen();
+ if(screen == nullptr) {
+ return;
+ }
QPixmap pixmap;
QImage image;
Settings& settings = static_cast<Application* >(qApp)->settings();
- auto screen = getDesktopScreen();
- bool perScreenWallpaper(screen != nullptr && screen->virtualSiblings().size() > 1 && settings.perScreenWallpaper());
+ const auto screens = screen->virtualSiblings();
+ bool perScreenWallpaper(screens.size() > 1 && settings.perScreenWallpaper());
+
+ // the pixmap's size should be calculated by considering
+ // the positions and device pixel ratios of all screens
+ QRect pixmapRect;
+ for(const auto& scr : screens) {
+ pixmapRect |= QRect(scr->geometry().topLeft(), scr->size() * scr->devicePixelRatio());
+ }
+ const QSize pixmapSize = pixmapRect.size();
+
+ // the pixmap's device pixel ratio
+ qreal DPRatio = windowHandle() ? windowHandle()->devicePixelRatio() : qApp->devicePixelRatio();
+
if(wallpaperMode_ == WallpaperTile) { // use the original size
image = getWallpaperImage();
if(!image.isNull()) {
// Note: We can't use the QPainter::drawTiledPixmap(), because it doesn't tile
// correctly for background pixmaps bigger than the current screen size.
- const QSize s = size();
- pixmap = QPixmap{s};
+ pixmap = QPixmap{pixmapSize};
QPainter painter{&pixmap};
- for (int x = 0; x < s.width(); x += image.width()) {
- for (int y = 0; y < s.height(); y += image.height()) {
+ for (int x = 0; x < pixmapSize.width(); x += image.width()) {
+ for (int y = 0; y < pixmapSize.height(); y += image.height()) {
painter.drawImage(x, y, image);
}
}
+ pixmap.setDevicePixelRatio(DPRatio);
}
}
else if(wallpaperMode_ == WallpaperStretch) {
if(perScreenWallpaper) {
- const QSize s = size();
- pixmap = QPixmap{s};
+ pixmap = QPixmap{pixmapSize};
QPainter painter{&pixmap};
pixmap.fill(bgColor_);
image = getWallpaperImage();
if(!image.isNull()) {
QImage scaled;
- const auto screens = screen->virtualSiblings();
for(const auto& scr : screens) {
- scaled = image.scaled(scr->size(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
+ scaled = image.scaled(scr->size() * scr->devicePixelRatio(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
painter.drawImage(scr->geometry().x(), scr->geometry().y(), scaled);
}
}
+ pixmap.setDevicePixelRatio(DPRatio);
}
else {
- image = loadWallpaperFile(size());
+ image = loadWallpaperFile(pixmapSize);
pixmap = QPixmap::fromImage(image);
+ pixmap.setDevicePixelRatio(DPRatio);
}
}
else { // WallpaperCenter || WallpaperFit
if(perScreenWallpaper) {
- const QSize s = size();
- pixmap = QPixmap{s};
+ pixmap = QPixmap{pixmapSize};
QPainter painter{&pixmap};
pixmap.fill(bgColor_);
image = getWallpaperImage();
if(!image.isNull()) {
QImage scaled;
int x, y;
- const auto screens = screen->virtualSiblings();
if(wallpaperMode_ == WallpaperCenter) {
for(const auto& scr : screens) {
+ const auto scrSize = scr->size() * scr->devicePixelRatio();
// get the gap between image and screen to avoid overlapping and displacement
- int x_gap = (image.width() - scr->geometry().width()) / 2;
- int y_gap = (image.height() - scr->geometry().height()) / 2;
- scaled = image.copy(qMax(x_gap, 0), qMax(y_gap, 0), scr->geometry().width(), scr->geometry().height());
+ int x_gap = (image.width() - scrSize.width()) / 2;
+ int y_gap = (image.height() - scrSize.height()) / 2;
+ scaled = image.copy(qMax(x_gap, 0), qMax(y_gap, 0), scrSize.width(), scrSize.height());
x = scr->geometry().x() + qMax(0, -x_gap);
- y = scr->geometry().y() + qMax(0, - y_gap);
+ y = scr->geometry().y() + qMax(0, -y_gap);
+ painter.save();
+ painter.setClipRect(QRect(x, y, image.width(), image.height()));
painter.drawImage(x, y, scaled);
+ painter.restore();
}
}
else if((wallpaperMode_ == WallpaperFit || wallpaperMode_ == WallpaperZoom)
&& image.width() > 0 && image.height() > 0) {
for(const auto& scr : screens) {
+ const auto scrSize = scr->size() * scr->devicePixelRatio();
// get the screen-to-image ratio to calculate the scale factors
- const qreal w_ratio = static_cast<qreal>(scr->geometry().width()) / image.width();
- const qreal h_ratio = static_cast<qreal>(scr->geometry().height()) / image.height();
+ const qreal w_ratio = static_cast<qreal>(scrSize.width()) / image.width();
+ const qreal h_ratio = static_cast<qreal>(scrSize.height()) / image.height();
if(w_ratio <= h_ratio) {
if(wallpaperMode_ == WallpaperFit) {
// fit horizontally
- scaled = image.scaledToWidth(scr->geometry().width(), Qt::SmoothTransformation);
+ scaled = image.scaledToWidth(scrSize.width(), Qt::SmoothTransformation);
x = scr->geometry().x();
- y = scr->geometry().y() + (scr->geometry().height() - scaled.height()) / 2;
+ y = scr->geometry().y() + (scrSize.height() - scaled.height()) / 2;
}
else { // zoom
// fit vertically
- scaled = image.scaledToHeight(scr->geometry().height(), Qt::SmoothTransformation);
+ scaled = image.scaledToHeight(scrSize.height(), Qt::SmoothTransformation);
// crop to avoid overlapping
- int x_gap = (scaled.width() - scr->geometry().width()) / 2;
- scaled = scaled.copy(x_gap, 0, scr->geometry().width(), scaled.height());
+ int x_gap = (scaled.width() - scrSize.width()) / 2;
+ scaled = scaled.copy(x_gap, 0, scrSize.width(), scaled.height());
x = scr->geometry().x();
y = scr->geometry().y();
}
@@ -733,16 +752,16 @@ void DesktopWindow::updateWallpaper() {
else { // w_ratio > h_ratio
if(wallpaperMode_ == WallpaperFit) {
// fit vertically
- scaled = image.scaledToHeight(scr->geometry().height(), Qt::SmoothTransformation);
- x = scr->geometry().x() + (scr->geometry().width() - scaled.width()) / 2;
+ scaled = image.scaledToHeight(scrSize.height(), Qt::SmoothTransformation);
+ x = scr->geometry().x() + (scrSize.width() - scaled.width()) / 2;
y = scr->geometry().y();
}
else { // zoom
// fit horizonatally
- scaled = image.scaledToWidth(scr->geometry().width(), Qt::SmoothTransformation);
+ scaled = image.scaledToWidth(scrSize.width(), Qt::SmoothTransformation);
// crop to avoid overlapping
- int y_gap = (scaled.height() - scr->geometry().height()) / 2;
- scaled = scaled.copy(0, y_gap, scaled.width(), scr->geometry().height());
+ int y_gap = (scaled.height() - scrSize.height()) / 2;
+ scaled = scaled.copy(0, y_gap, scaled.width(), scrSize.height());
x = scr->geometry().x();
y = scr->geometry().y();
}
@@ -751,6 +770,7 @@ void DesktopWindow::updateWallpaper() {
}
}
}
+ pixmap.setDevicePixelRatio(DPRatio);
}
else {
if(wallpaperMode_ == WallpaperCenter) {
@@ -770,17 +790,18 @@ void DesktopWindow::updateWallpaper() {
if(origSize.isValid()) {
QSize desiredSize = origSize;
Qt::AspectRatioMode mode = (wallpaperMode_ == WallpaperFit ? Qt::KeepAspectRatio : Qt::KeepAspectRatioByExpanding);
- desiredSize.scale(width(), height(), mode);
+ desiredSize.scale(pixmapSize, mode);
image = loadWallpaperFile(desiredSize); // load the scaled image
}
}
if(!image.isNull()) {
- pixmap = QPixmap(size());
+ pixmap = QPixmap{pixmapSize};
QPainter painter(&pixmap);
pixmap.fill(bgColor_);
- int x = (width() - image.width()) / 2;
- int y = (height() - image.height()) / 2;
+ int x = (pixmapSize.width() - image.width()) / 2;
+ int y = (pixmapSize.height() - image.height()) / 2;
painter.drawImage(x, y, image);
+ pixmap.setDevicePixelRatio(DPRatio);
}
}
}
@@ -1239,7 +1260,9 @@ void DesktopWindow::paintBackground(QPaintEvent* event) {
painter.fillRect(event->rect(), QBrush(bgColor_));
}
else {
- painter.drawPixmap(event->rect(), wallpaperPixmap_, event->rect());
+ QRectF r(QPointF(event->rect().topLeft()) * wallpaperPixmap_.devicePixelRatio(),
+ QSizeF(event->rect().size()) * wallpaperPixmap_.devicePixelRatio());
+ painter.drawPixmap(event->rect(), wallpaperPixmap_, r.toRect());
}
}

View File

@ -1,4 +1 @@
scaling-pr-1596.patch
add-manual.patch add-manual.patch
upstream-pr-1601.patch
upstream-pr-1606.patch

View File

@ -1,91 +0,0 @@
From f1438b2b3eec8a1c60532ae5d9fcd654138dc5e4 Mon Sep 17 00:00:00 2001
From: tsujan <tsujan2000@gmail.com>
Date: Tue, 21 Jun 2022 11:14:03 +0430
Subject: [PATCH] Prevent an empty desktop path (#1601)
Fall back to `$HOME/Desktop` if `~/.config/user-dirs.dirs` doesn't exist or doesn't contain a desktop path. But if `~/.config/user-dirs.dirs` contains an empty desktop path, accept it.
See https://github.com/lxqt/lxqt-session/issues/439 for the story.
---
pcmanfm/desktoppreferencesdialog.cpp | 1 -
pcmanfm/xdgdir.cpp | 34 ++++++++++++++++------------
2 files changed, 20 insertions(+), 15 deletions(-)
diff --git a/pcmanfm/desktoppreferencesdialog.cpp b/pcmanfm/desktoppreferencesdialog.cpp
index b25f6435..465095c6 100644
--- a/pcmanfm/desktoppreferencesdialog.cpp
+++ b/pcmanfm/desktoppreferencesdialog.cpp
@@ -27,7 +27,6 @@
#include <QFile>
#include <QDir>
#include <QSaveFile>
-#include <QRegExp>
#include <QDebug>
#include <QStandardPaths>
#include <libfm-qt/filedialog.h>
diff --git a/pcmanfm/xdgdir.cpp b/pcmanfm/xdgdir.cpp
index 9fd9a7b0..edc5a848 100644
--- a/pcmanfm/xdgdir.cpp
+++ b/pcmanfm/xdgdir.cpp
@@ -18,10 +18,13 @@
#include "xdgdir.h"
#include <QStandardPaths>
+#include <QRegularExpression>
#include <QFile>
#include <QDir>
#include <QSaveFile>
+static const QRegularExpression desktopRegex(QStringLiteral("XDG_DESKTOP_DIR=\"([^\n]*)\""));
+
QString XdgDir::readUserDirsFile() {
QFile file(QStandardPaths::writableLocation(QStandardPaths::ConfigLocation) + QStringLiteral("/user-dirs.dirs"));
if(file.open(QIODevice::ReadOnly | QIODevice::Text)) {
@@ -34,30 +37,33 @@ QString XdgDir::readUserDirsFile() {
QString XdgDir::readDesktopDir() {
QString str = readUserDirsFile();
- if(str.isEmpty())
- return QStandardPaths::writableLocation(QStandardPaths::HomeLocation) + QStringLiteral("/Desktop");
- QRegExp reg(QStringLiteral("XDG_DESKTOP_DIR=\"([^\n]*)\""));
- if(reg.lastIndexIn(str) != -1) {
- str = reg.cap(1);
- if(str.startsWith(QStringLiteral("$HOME")))
- str = QStandardPaths::writableLocation(QStandardPaths::HomeLocation) + str.mid(5);
- return str;
+ if(!str.isEmpty()) {
+ QRegularExpressionMatch match;
+ if(str.lastIndexOf(desktopRegex, -1, &match) != -1) {
+ str = match.captured(1);
+ if(str.startsWith(QStringLiteral("$HOME"))) {
+ str = QStandardPaths::writableLocation(QStandardPaths::HomeLocation) + str.mid(5);
+ }
+ return str;
+ }
}
- return QString();
+ return QStandardPaths::writableLocation(QStandardPaths::HomeLocation) + QStringLiteral("/Desktop");
}
void XdgDir::setDesktopDir(QString path) {
QString home = QStandardPaths::writableLocation(QStandardPaths::HomeLocation);
- if(path.startsWith(home))
+ if(path.startsWith(home)) {
path = QStringLiteral("$HOME") + path.mid(home.length());
+ }
QString str = readUserDirsFile();
- QRegExp reg(QStringLiteral("XDG_DESKTOP_DIR=\"([^\n]*)\""));
QString line = QStringLiteral("XDG_DESKTOP_DIR=\"") + path + QLatin1Char('\"');
- if(reg.indexIn(str) != -1)
- str.replace(reg, line);
+ if(str.contains(desktopRegex)) {
+ str.replace(desktopRegex, line);
+ }
else {
- if(!str.endsWith(QLatin1Char('\n')))
+ if(!str.endsWith(QLatin1Char('\n'))) {
str += QLatin1Char('\n');
+ }
str += line + QLatin1Char('\n');
}
QString dir = QStandardPaths::writableLocation(QStandardPaths::ConfigLocation);

View File

@ -1,411 +0,0 @@
From 1151f49984ebc102c5238a9ba1d2b1a6769a1457 Mon Sep 17 00:00:00 2001
From: tsujan <tsujan2000@gmail.com>
Date: Tue, 21 Jun 2022 13:27:25 +0430
Subject: [PATCH] Allow customizing workspace margins on desktop (#1606)
It's especially useful with panels/docks that don't reserve space but auto-hide on overlapping windows.
---
pcmanfm/desktop-preferences.ui | 153 +++++++++++++++++++++------
pcmanfm/desktoppreferencesdialog.cpp | 10 ++
pcmanfm/desktopwindow.cpp | 34 ++++--
pcmanfm/settings.cpp | 14 +++
pcmanfm/settings.h | 9 ++
5 files changed, 183 insertions(+), 37 deletions(-)
diff --git a/pcmanfm/desktop-preferences.ui b/pcmanfm/desktop-preferences.ui
index d73e7312..c23f7bdb 100644
--- a/pcmanfm/desktop-preferences.ui
+++ b/pcmanfm/desktop-preferences.ui
@@ -136,6 +136,16 @@
<string>Spacing</string>
</property>
<layout class="QGridLayout" name="gridLayout_3">
+ <property name="verticalSpacing">
+ <number>10</number>
+ </property>
+ <item row="0" column="4">
+ <widget class="QCheckBox" name="lockMargins">
+ <property name="text">
+ <string>Lock</string>
+ </property>
+ </widget>
+ </item>
<item row="0" column="0">
<widget class="QLabel" name="label_7">
<property name="text">
@@ -143,10 +153,24 @@
</property>
</widget>
</item>
- <item row="0" column="1">
- <widget class="QSpinBox" name="hMargin">
+ <item row="0" column="5">
+ <spacer name="horizontalSpacer">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>5</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item row="0" column="3">
+ <widget class="QSpinBox" name="vMargin">
<property name="toolTip">
- <string>3 px by default.</string>
+ <string>1 px by default.
+A space is also reserved for 3 lines of text.</string>
</property>
<property name="suffix">
<string> px</string>
@@ -155,22 +179,14 @@
<number>48</number>
</property>
<property name="value">
- <number>3</number>
- </property>
- </widget>
- </item>
- <item row="0" column="2">
- <widget class="QLabel" name="label_8">
- <property name="text">
- <string>x</string>
+ <number>1</number>
</property>
</widget>
</item>
- <item row="0" column="3">
- <widget class="QSpinBox" name="vMargin">
+ <item row="0" column="1">
+ <widget class="QSpinBox" name="hMargin">
<property name="toolTip">
- <string>1 px by default.
-A space is also reserved for 3 lines of text.</string>
+ <string>3 px by default.</string>
</property>
<property name="suffix">
<string> px</string>
@@ -179,29 +195,104 @@ A space is also reserved for 3 lines of text.</string>
<number>48</number>
</property>
<property name="value">
- <number>1</number>
+ <number>3</number>
</property>
</widget>
</item>
- <item row="0" column="4">
- <widget class="QCheckBox" name="lockMargins">
+ <item row="0" column="2">
+ <widget class="QLabel" name="label_8">
<property name="text">
- <string>Lock</string>
+ <string>x</string>
</property>
</widget>
</item>
- <item row="0" column="5">
- <spacer name="horizontalSpacer">
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>5</height>
- </size>
- </property>
- </spacer>
+ <item row="1" column="0" colspan="6" alignment="Qt::AlignLeft">
+ <widget class="QGroupBox" name="groupBox_7">
+ <layout class="QVBoxLayout" name="verticalLayout_6">
+ <property name="spacing">
+ <number>10</number>
+ </property>
+ <property name="leftMargin">
+ <number>5</number>
+ </property>
+ <property name="topMargin">
+ <number>5</number>
+ </property>
+ <property name="rightMargin">
+ <number>5</number>
+ </property>
+ <property name="bottomMargin">
+ <number>5</number>
+ </property>
+ <item alignment="Qt::AlignHCenter">
+ <widget class="QLabel" name="label_13">
+ <property name="text">
+ <string>Margins of work area:</string>
+ </property>
+ </widget>
+ </item>
+ <item alignment="Qt::AlignHCenter">
+ <widget class="QSpinBox" name="topMargin">
+ <property name="suffix">
+ <string> px</string>
+ </property>
+ <property name="maximum">
+ <number>200</number>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_2">
+ <item>
+ <widget class="QSpinBox" name="leftMargin">
+ <property name="suffix">
+ <string> px</string>
+ </property>
+ <property name="maximum">
+ <number>200</number>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer_4">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeType">
+ <enum>QSizePolicy::MinimumExpanding</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>5</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QSpinBox" name="rightMargin">
+ <property name="suffix">
+ <string> px</string>
+ </property>
+ <property name="maximum">
+ <number>200</number>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item alignment="Qt::AlignHCenter">
+ <widget class="QSpinBox" name="bottomMargin">
+ <property name="suffix">
+ <string> px</string>
+ </property>
+ <property name="maximum">
+ <number>200</number>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
</item>
</layout>
</widget>
diff --git a/pcmanfm/desktoppreferencesdialog.cpp b/pcmanfm/desktoppreferencesdialog.cpp
index 465095c6..04ac8bb8 100644
--- a/pcmanfm/desktoppreferencesdialog.cpp
+++ b/pcmanfm/desktoppreferencesdialog.cpp
@@ -128,6 +128,11 @@ DesktopPreferencesDialog::DesktopPreferencesDialog(QWidget* parent, Qt::WindowFl
ui.vMargin->setValue(settings.desktopCellMargins().height());
connect(ui.lockMargins, &QAbstractButton::clicked, this, &DesktopPreferencesDialog::lockMargins);
+ ui.leftMargin->setValue(settings.workAreaMargins().left());
+ ui.topMargin->setValue(settings.workAreaMargins().top());
+ ui.rightMargin->setValue(settings.workAreaMargins().right());
+ ui.bottomMargin->setValue(settings.workAreaMargins().bottom());
+
ui.defaultFileManager->setChecked(settings.openWithDefaultFileManager());
ui.allSticky->setChecked(settings.allSticky());
@@ -207,6 +212,11 @@ void DesktopPreferencesDialog::applySettings()
settings.setDesktopCellMargins(QSize(ui.hMargin->value(), ui.vMargin->value()));
+ settings.setWorkAreaMargins(QMargins(ui.leftMargin->value(),
+ ui.topMargin->value(),
+ ui.rightMargin->value(),
+ ui.bottomMargin->value()));
+
settings.setOpenWithDefaultFileManager(ui.defaultFileManager->isChecked());
settings.setAllSticky(ui.allSticky->isChecked());
diff --git a/pcmanfm/desktopwindow.cpp b/pcmanfm/desktopwindow.cpp
index d69b660e..b2870774 100644
--- a/pcmanfm/desktopwindow.cpp
+++ b/pcmanfm/desktopwindow.cpp
@@ -63,7 +63,6 @@
#include <xcb/xcb.h>
#include <X11/Xlib.h>
-#define WORK_AREA_MARGIN 12 // margin of the work area
#define MIN_SLIDE_INTERVAL 5*60000 // 5 min
#define MAX_SLIDE_INTERVAL (24*60+55)*60000 // 24 h and 55 min
@@ -1203,8 +1202,13 @@ void DesktopWindow::removeBottomGap() {
auto itemSize = delegate->itemSize();
//qDebug() << "delegate:" << delegate->itemSize();
QSize cellMargins = getMargins();
+ Settings& settings = static_cast<Application* >(qApp)->settings();
int workAreaHeight = screen->availableVirtualGeometry().height()
- - 2 * WORK_AREA_MARGIN;
+ - settings.workAreaMargins().top()
+ - settings.workAreaMargins().bottom();
+ if(workAreaHeight <= 0) {
+ return;
+ }
int cellHeight = itemSize.height() + listView_->spacing();
int iconNumber = workAreaHeight / cellHeight;
int bottomGap = workAreaHeight % cellHeight;
@@ -1219,7 +1223,6 @@ void DesktopWindow::removeBottomGap() {
qreal exactNumber = (static_cast<qreal>(cellHeight) - static_cast<qreal>(bottomGap))
/ (2 * static_cast<qreal>(iconNumber) + static_cast<qreal>(2));
int subtrahend = (int)exactNumber + ((int)exactNumber == exactNumber ? 0 : 1);
- Settings& settings = static_cast<Application*>(qApp)->settings();
int minCellHeight = settings.desktopCellMargins().height();
if(subtrahend > 0
&& cellMargins.height() - subtrahend >= minCellHeight) {
@@ -1301,11 +1304,18 @@ void DesktopWindow::trustOurDesktopShortcut(std::shared_ptr<const Fm::FileInfo>
QRect DesktopWindow::getWorkArea(QScreen* screen) const {
QRect workArea = screen->availableVirtualGeometry();
- workArea.adjust(WORK_AREA_MARGIN, WORK_AREA_MARGIN, -WORK_AREA_MARGIN, -WORK_AREA_MARGIN);
+ QMargins margins = static_cast<Application* >(qApp)->settings().workAreaMargins();
// switch between right and left with RTL to use the usual (LTR) calculations later
if(layoutDirection() == Qt::RightToLeft) {
+ int right = margins.right();
+ margins.setRight(margins.left());
+ margins.setLeft(right);
+ workArea = workArea.marginsRemoved(margins);
workArea.moveLeft(rect().right() - workArea.right());
}
+ else {
+ workArea = workArea.marginsRemoved(margins);
+ }
return workArea;
}
@@ -1709,6 +1719,9 @@ QModelIndex DesktopWindow::navigateWithKey(int key, Qt::KeyboardModifiers modifi
QRect workArea = getWorkArea(screen);
int columns = workArea.width() / (itemSize.width() + listView_->spacing());
int rows = workArea.height() / (itemSize.height() + listView_->spacing());
+ if(columns <= 0 || rows <= 0) {
+ break;
+ }
bool rtl(layoutDirection() == Qt::RightToLeft);
while(!index.isValid() && workArea.contains(pos)) {
switch(key) {
@@ -1971,7 +1984,7 @@ void DesktopWindow::childDropEvent(QDropEvent* e) {
// move selected items to the drop position, preserving their relative positions
QPoint dropPos = e->pos();
- if(curIndx.isValid()) {
+ if(curIndx.isValid() && !workArea.isEmpty()) {
QPoint curPoint = listView_->visualRect(curIndx).topLeft();
// first move the current item to the drop position
@@ -2050,7 +2063,8 @@ void DesktopWindow::childDropEvent(QDropEvent* e) {
}
// position dropped items successively, starting with the drop rectangle
- if(mimeData->hasUrls()
+ if(!workArea.isEmpty()
+ && mimeData->hasUrls()
&& (e->dropAction() == Qt::CopyAction
|| e->dropAction() == Qt::MoveAction
|| e->dropAction() == Qt::LinkAction)) {
@@ -2079,6 +2093,10 @@ void DesktopWindow::childDropEvent(QDropEvent* e) {
// until it reaches the last cell and then puts the remaining items in the opposite
// direction. In this way, it creates a natural DND, especially with multiple files.
bool DesktopWindow::stickToPosition(const std::string& file, QPoint& pos, const QRect& workArea, const QSize& grid, bool reachedLastCell) {
+ if(workArea.isEmpty()) {
+ return reachedLastCell;
+ }
+
// normalize the position, depending on the positioning direction
if(!reachedLastCell) { // default direction: top -> bottom, left -> right
@@ -2178,6 +2196,10 @@ void DesktopWindow::alignToGrid(QPoint& pos, const QPoint& topLeft, const QSize&
// the text or icon rectangle but we make an exception for Trash because we want
// to trash dropped items once the drop point is inside the Trash cell.
QModelIndex DesktopWindow::indexForPos(bool* isTrash, const QPoint& pos, const QRect& workArea, const QSize& grid) const {
+ if(workArea.isEmpty()) {
+ return QModelIndex();
+ }
+
// first normalize the position
QPoint p(pos);
diff --git a/pcmanfm/settings.cpp b/pcmanfm/settings.cpp
index c5ccc00f..b1397cab 100644
--- a/pcmanfm/settings.cpp
+++ b/pcmanfm/settings.cpp
@@ -134,6 +134,7 @@ Settings::Settings():
templateRunApp_(false),
folderViewCellMargins_(QSize(3, 3)),
desktopCellMargins_(QSize(3, 1)),
+ workAreaMargins_(QMargins(12, 12, 12, 12)),
openWithDefaultFileManager_(false),
allSticky_(false),
searchNameCaseInsensitive_(false),
@@ -269,6 +270,14 @@ bool Settings::loadFile(QString filePath) {
desktopCellMargins_ = (settings.value(QStringLiteral("DesktopCellMargins"), QSize(3, 1)).toSize()
.expandedTo(QSize(0, 0))).boundedTo(QSize(48, 48));
+ auto l = settings.value(QStringLiteral("WorkAreaMargins")).toList();
+ if(l.size() >= 4) {
+ workAreaMargins_.setLeft(qBound(0, l.at(0).toInt(), 200));
+ workAreaMargins_.setTop(qBound(0, l.at(1).toInt(), 200));
+ workAreaMargins_.setRight(qBound(0, l.at(2).toInt(), 200));
+ workAreaMargins_.setBottom(qBound(0, l.at(3).toInt(), 200));
+ }
+
openWithDefaultFileManager_ = settings.value(QStringLiteral("OpenWithDefaultFileManager"), false).toBool();
allSticky_ = settings.value(QStringLiteral("AllSticky"), false).toBool();
settings.endGroup();
@@ -416,6 +425,11 @@ bool Settings::saveFile(QString filePath) {
settings.setValue(QStringLiteral("SortFolderFirst"), desktopSortFolderFirst_);
settings.setValue(QStringLiteral("SortHiddenLast"), desktopSortHiddenLast_);
settings.setValue(QStringLiteral("DesktopCellMargins"), desktopCellMargins_);
+ QList<QVariant> l{workAreaMargins_.left(),
+ workAreaMargins_.top(),
+ workAreaMargins_.right(),
+ workAreaMargins_.bottom()};
+ settings.setValue(QStringLiteral("WorkAreaMargins"), l);
settings.setValue(QStringLiteral("OpenWithDefaultFileManager"), openWithDefaultFileManager_);
settings.setValue(QStringLiteral("AllSticky"), allSticky_);
settings.endGroup();
diff --git a/pcmanfm/settings.h b/pcmanfm/settings.h
index 63c92b71..e9641b18 100644
--- a/pcmanfm/settings.h
+++ b/pcmanfm/settings.h
@@ -788,6 +788,14 @@ class Settings : public QObject {
desktopCellMargins_ = size;
}
+ QMargins workAreaMargins() const {
+ return workAreaMargins_;
+ }
+
+ void setWorkAreaMargins(QMargins margins) {
+ workAreaMargins_ = margins;
+ }
+
bool openWithDefaultFileManager() const {
return openWithDefaultFileManager_;
}
@@ -1145,6 +1153,7 @@ class Settings : public QObject {
QSize folderViewCellMargins_;
QSize desktopCellMargins_;
+ QMargins workAreaMargins_;
bool openWithDefaultFileManager_;

View File

@ -1,6 +1,8 @@
etc/xdg/autostart/lxqt-desktop.desktop etc/xdg/autostart/lxqt-desktop.desktop
icons/lubuntu-manual.svg usr/share/icons/hicolor/scalable/apps/
usr/bin/pcmanfm-qt usr/bin/pcmanfm-qt
usr/share/applications/pcmanfm-qt-desktop-pref.desktop usr/share/applications/pcmanfm-qt-desktop-pref.desktop
usr/share/applications/pcmanfm-qt.desktop usr/share/applications/pcmanfm-qt.desktop
usr/share/icons/hicolor/scalable/apps/pcmanfm-qt.svg
usr/share/man/man1/pcmanfm-qt.1 usr/share/man/man1/pcmanfm-qt.1
usr/share/pcmanfm-qt/lxqt/settings.conf usr/share/pcmanfm-qt/lxqt/settings.conf

6
debian/pcmanfm-qt.lintian-overrides vendored Normal file
View File

@ -0,0 +1,6 @@
# This is expected
pcmanfm-qt: desktop-entry-lacks-keywords-entry [usr/share/applications/pcmanfm-qt-desktop-pref.desktop]
pcmanfm-qt: desktop-entry-lacks-keywords-entry [usr/share/applications/pcmanfm-qt.desktop]
# False positive
pcmanfm-qt: hardening-no-fortify-functions [usr/bin/pcmanfm-qt]

1
debian/rules vendored
View File

@ -2,7 +2,6 @@
# export DH_VERBOSE=1 # export DH_VERBOSE=1
export LC_ALL=C.UTF-8 export LC_ALL=C.UTF-8
export DEB_LDFLAGS_MAINT_APPEND = -Wl,--as-needed
export DEB_BUILD_MAINT_OPTIONS = hardening=+all export DEB_BUILD_MAINT_OPTIONS = hardening=+all
%: %:

6
debian/source/lintian-overrides vendored Normal file
View File

@ -0,0 +1,6 @@
# We add this via quilt patch
pcmanfm-qt source: superfluous-file-pattern icons/lubuntu-manual.svg [debian/copyright:*]
# These are expected
pcmanfm-qt source: very-long-line-length-in-source-file * > 512 [debian/patches/add-manual.patch:*]
pcmanfm-qt source: very-long-line-length-in-source-file * > 512 [*.ts:*]

View File

@ -1,52 +1,52 @@
-----BEGIN PGP PUBLIC KEY BLOCK----- -----BEGIN PGP PUBLIC KEY BLOCK-----
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
sw== sw==
=gSIv =gSIv
-----END PGP PUBLIC KEY BLOCK----- -----END PGP PUBLIC KEY BLOCK-----

6
debian/watch vendored
View File

@ -1,3 +1,5 @@
version=4 version=4
opts="pgpsigurlmangle=s/$/.asc/" \ opts="searchmode=plain, \
https://github.com/lxqt/pcmanfm-qt/releases .*/pcmanfm-qt-([\d\.]+).tar.xz pgpsigurlmangle=s/$/.asc/, \
uversionmangle=s/(\d+\.\d+\.\d+).*/$1/" \
https://api.github.com/repos/lxqt/@PACKAGE@/releases https:\/\/github.com\/lxqt\/@PACKAGE@\/releases\/download\/@ANY_VERSION@\/@PACKAGE@-@ANY_VERSION@.tar.xz