You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
110 lines
3.9 KiB
110 lines
3.9 KiB
2 years ago
|
From ccc2ede1557523ed396e488f705132f187ab750f Mon Sep 17 00:00:00 2001
|
||
|
From: tsujan <tsujan2000@gmail.com>
|
||
|
Date: Mon, 16 May 2022 19:05:49 +0430
|
||
|
Subject: [PATCH] Small enhancement to theme list in appearance config dialog
|
||
|
(#854)
|
||
|
|
||
|
* Small enhancement to theme list in appearance config dialog
|
||
|
|
||
|
Themes are always sorted alphabetically, user themes are distinguished, and theme folders can be opened by double clicking or by using context menus.
|
||
|
|
||
|
Closes https://github.com/lxqt/lxqt-config/issues/852
|
||
|
|
||
|
* Don't use `WhatsThisRole` for theme path
|
||
|
|
||
|
`WhatsThisRole` might be needed later for another purpose, and finding the theme path directly has no real cost.
|
||
|
---
|
||
|
lxqt-config-appearance/lxqtthemeconfig.cpp | 40 ++++++++++++++++++++++
|
||
|
lxqt-config-appearance/lxqtthemeconfig.h | 4 +++
|
||
|
2 files changed, 44 insertions(+)
|
||
|
|
||
|
diff --git a/lxqt-config-appearance/lxqtthemeconfig.cpp b/lxqt-config-appearance/lxqtthemeconfig.cpp
|
||
|
index 49b65e8b..8bc903f8 100644
|
||
|
--- a/lxqt-config-appearance/lxqtthemeconfig.cpp
|
||
|
+++ b/lxqt-config-appearance/lxqtthemeconfig.cpp
|
||
|
@@ -32,6 +32,11 @@
|
||
|
#include <QProcess>
|
||
|
#include <QItemDelegate>
|
||
|
#include <QPainter>
|
||
|
+#include <QMenu>
|
||
|
+#include <QDesktopServices>
|
||
|
+#include <QUrl>
|
||
|
+
|
||
|
+#include <XdgDirs>
|
||
|
|
||
|
/*!
|
||
|
* \brief Simple delegate to draw system background color below decoration/icon
|
||
|
@@ -84,6 +89,10 @@ LXQtThemeConfig::LXQtThemeConfig(LXQt::Settings *settings, QWidget *parent) :
|
||
|
{
|
||
|
QString themeName = theme.name();
|
||
|
themeName[0] = themeName[0].toTitleCase();
|
||
|
+ if (theme.path().contains(XdgDirs::dataHome(false) + QStringLiteral("/")))
|
||
|
+ {
|
||
|
+ themeName += QStringLiteral(" ") + tr("(User Theme)");
|
||
|
+ }
|
||
|
QTreeWidgetItem *item = new QTreeWidgetItem(QStringList(themeName));
|
||
|
if (!theme.previewImage().isEmpty())
|
||
|
{
|
||
|
@@ -93,11 +102,16 @@ LXQtThemeConfig::LXQtThemeConfig(LXQt::Settings *settings, QWidget *parent) :
|
||
|
item->setData(0, Qt::UserRole, theme.name());
|
||
|
ui->lxqtThemeList->addTopLevelItem(item);
|
||
|
}
|
||
|
+ ui->lxqtThemeList->sortItems(0, Qt::AscendingOrder);
|
||
|
+ ui->lxqtThemeList->setContextMenuPolicy(Qt::CustomContextMenu);
|
||
|
|
||
|
initControls();
|
||
|
|
||
|
connect(ui->lxqtThemeList, &QTreeWidget::currentItemChanged, this, &LXQtThemeConfig::settingsChanged);
|
||
|
connect(ui->wallpaperOverride, &QAbstractButton::clicked, this, &LXQtThemeConfig::settingsChanged);
|
||
|
+
|
||
|
+ connect(ui->lxqtThemeList, &QTreeWidget::itemDoubleClicked, this, &LXQtThemeConfig::doubleClicked);
|
||
|
+ connect(ui->lxqtThemeList, &QWidget::customContextMenuRequested, this, &LXQtThemeConfig::contextMenu);
|
||
|
}
|
||
|
|
||
|
|
||
|
@@ -145,3 +159,29 @@ void LXQtThemeConfig::applyLxqtTheme()
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
+
|
||
|
+void LXQtThemeConfig::doubleClicked(QTreeWidgetItem *item, int /*column*/)
|
||
|
+{
|
||
|
+ if (!item)
|
||
|
+ return;
|
||
|
+
|
||
|
+ LXQt::LXQtTheme theme{item->data(0, Qt::UserRole).toString()};
|
||
|
+ if (!theme.isValid())
|
||
|
+ return;
|
||
|
+
|
||
|
+ // first try "qtxdg-mat"; fall back to QDesktopServices if we are not inside an LXQt session
|
||
|
+ if (!QProcess::startDetached(QStringLiteral("qtxdg-mat"), QStringList() << QStringLiteral("open") << theme.path()))
|
||
|
+ {
|
||
|
+ QDesktopServices::openUrl(QUrl(theme.path()));
|
||
|
+ }
|
||
|
+}
|
||
|
+
|
||
|
+void LXQtThemeConfig::contextMenu(const QPoint& p)
|
||
|
+{
|
||
|
+ QMenu menu;
|
||
|
+ QAction *a = menu.addAction(tr("Open theme folder"));
|
||
|
+ connect(a, &QAction::triggered, [this, p] {
|
||
|
+ doubleClicked(ui->lxqtThemeList->itemAt(p), 0);
|
||
|
+ });
|
||
|
+ menu.exec(ui->lxqtThemeList->viewport()->mapToGlobal(p));
|
||
|
+}
|
||
|
diff --git a/lxqt-config-appearance/lxqtthemeconfig.h b/lxqt-config-appearance/lxqtthemeconfig.h
|
||
|
index 8846dbbe..1886738c 100644
|
||
|
--- a/lxqt-config-appearance/lxqtthemeconfig.h
|
||
|
+++ b/lxqt-config-appearance/lxqtthemeconfig.h
|
||
|
@@ -53,6 +53,10 @@ public slots:
|
||
|
signals:
|
||
|
void settingsChanged();
|
||
|
|
||
|
+private slots:
|
||
|
+ void doubleClicked(QTreeWidgetItem *item, int column);
|
||
|
+ void contextMenu(const QPoint& p);
|
||
|
+
|
||
|
private:
|
||
|
Ui::LXQtThemeConfig *ui;
|
||
|
LXQt::Settings *mSettings;
|