kiran-control-panel/0014-fix-shortcut-add-custom-app-icon-Error-prompt-for-mo.patch

483 lines
22 KiB
Diff
Raw Normal View History

From 55049f4ee286633b486936c7f4d19d3d426453a0 Mon Sep 17 00:00:00 2001
From: liuxinhao <liuxinhao@kylinsec.com.cn>
Date: Mon, 15 Jan 2024 16:31:01 +0800
Subject: [PATCH 14/17] fix(shortcut): add custom app icon,Error prompt for
modifying input shortcut keys
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 修改录入快捷键错误提示,新增自定义应用图标显示
Closes #25199,#25198
---
plugins/keybinding/shortcut.cpp | 79 ++++++++++++----
plugins/keybinding/shortcut.h | 10 +-
translations/kiran-control-panel.zh_CN.ts | 106 ++++++++++++----------
3 files changed, 127 insertions(+), 68 deletions(-)
diff --git a/plugins/keybinding/shortcut.cpp b/plugins/keybinding/shortcut.cpp
index bab4ad1..84c0cba 100644
--- a/plugins/keybinding/shortcut.cpp
+++ b/plugins/keybinding/shortcut.cpp
@@ -31,12 +31,15 @@
#include <QKeyEvent>
#include <QtConcurrentRun>
-Q_DECLARE_METATYPE(QList<ShortcutInfoPtr>)
+#define DEFAULT_APP_ICON "application-script-blank"
+#define APP_ICON_WIDTH 20
+Q_DECLARE_METATYPE(QList<ShortcutInfoPtr>)
using namespace Kiran;
-Shortcut::Shortcut(QWidget *parent) : QWidget(parent),
- ui(new Ui::Shortcut)
+Shortcut::Shortcut(QWidget *parent)
+ : QWidget(parent),
+ ui(new Ui::Shortcut)
{
ui->setupUi(this);
init();
@@ -100,16 +103,24 @@ void Shortcut::initUI()
}
QHBoxLayout *hLayoutCustomApp = new QHBoxLayout(ui->lineEdit_custom_app);
+ m_customAppIcon = new QLabel;
+ m_customAppIcon->setFixedSize(24, 24);
+ m_customAppIcon->setPixmap(QIcon::fromTheme(DEFAULT_APP_ICON).pixmap(20, 20));
+ hLayoutCustomApp->addWidget(m_customAppIcon, 0, Qt::AlignVCenter);
+
+ hLayoutCustomApp->addStretch();
+
m_btnCustomApp = new QToolButton;
m_btnCustomApp->setObjectName("btn_custom_app");
m_btnCustomApp->setAccessibleName("ButtonAddCustomApp");
m_btnCustomApp->setText(tr("Add"));
m_btnCustomApp->setFixedSize(56, 30);
m_btnCustomApp->setCursor(Qt::PointingHandCursor);
- hLayoutCustomApp->addStretch();
hLayoutCustomApp->addWidget(m_btnCustomApp);
- ui->lineEdit_custom_app->setTextMargins(0, 0, m_btnCustomApp->width(), 0);
+
+ ui->lineEdit_custom_app->setTextMargins(25, 0, m_btnCustomApp->width(), 0);
connect(m_btnCustomApp, &QToolButton::clicked, this, &Shortcut::openFileSys);
+ connect(ui->lineEdit_custom_app,&QLineEdit::textChanged,this,&Shortcut::handleCustomAppTextChanged);
QHBoxLayout *hLayoutModifyApp = new QHBoxLayout(ui->lineEdit_modify_app);
m_btnModifyApp = new QToolButton;
@@ -354,7 +365,7 @@ bool Shortcut::isValidKeycode(QList<int> keycodes)
return !pureModifier;
}
-bool Shortcut::getExecFromDesktop(QString fileName, QString &exec)
+bool Shortcut::extractDesktopInfo(const QString &fileName, QString &exec, QString &icon)
{
QSettings settings(fileName, QSettings::IniFormat);
QString str = settings.value("Desktop Entry/Exec").toString();
@@ -368,6 +379,10 @@ bool Shortcut::getExecFromDesktop(QString fileName, QString &exec)
str = str.replace("%u", "", Qt::CaseInsensitive);
exec = str;
+
+ str = settings.value("Desktop Entry/Icon").toString();
+ icon = str.isEmpty() ? DEFAULT_APP_ICON : str;
+
return true;
}
@@ -376,23 +391,38 @@ void Shortcut::openFileSys()
QToolButton *senderbtn = qobject_cast<QToolButton *>(sender());
QLineEdit *lineEdit = qobject_cast<QLineEdit *>(senderbtn->parent());
- QString fileName = QFileDialog::getOpenFileName(this, tr("Open File"), "/usr/share/applications");
+ QString fileName = QFileDialog::getOpenFileName(this,
+ tr("Open File"),
+ "/usr/share/applications",
+ tr("Desktop entries(*.desktop)"));
if (fileName.isNull())
return;
- QString exec = fileName;
- if (fileName.endsWith(".desktop"))
+ QString cmd;
+ QString icon = DEFAULT_APP_ICON;
+ if (!extractDesktopInfo(fileName, cmd, icon))
{
- QString tmp;
- if (!getExecFromDesktop(fileName, tmp))
- {
- KLOG_ERROR(qLcKeybinding) << "cant't get Exec key from " << fileName;
- return;
- }
- exec = tmp;
+ KLOG_ERROR(qLcKeybinding) << "cant't get Exec key from " << fileName;
+ KiranMessageBox::message(this, tr("Error"),
+ "Extracting the program to be executed from the application's desktop file failed",
+ KiranMessageBox::Ok);
+ return;
+ }
+
+ // 缓存该次添加的应用以及图标信息
+ // 后续启动命令修改的时候,应复位图标
+ m_lastIcon = icon;
+ m_lastIconExec = cmd;
+
+ QIcon appIcon = QIcon::fromTheme(icon);
+ if( appIcon.isNull() )
+ {
+ m_lastIcon = DEFAULT_APP_ICON;
+ appIcon = QIcon::fromTheme(DEFAULT_APP_ICON);
}
- lineEdit->setText(exec);
+ m_customAppIcon->setPixmap(appIcon.pixmap(QSize(APP_ICON_WIDTH,APP_ICON_WIDTH)));
+ lineEdit->setText(cmd);
}
void Shortcut::handleSearchTimerTimeout()
@@ -787,6 +817,16 @@ void Shortcut::handleResetClicked()
}
}
+void Shortcut::handleCustomAppTextChanged(const QString& text)
+{
+ // 直接编辑自定义应用输入框,修改命令
+ // 导致和desktop读取出来的不一致时清空图标
+ if( !text.isEmpty() && text != m_lastIconExec )
+ {
+ m_customAppIcon->setPixmap(QIcon::fromTheme(DEFAULT_APP_ICON).pixmap(20,20));
+ }
+}
+
void Shortcut::handleInputKeycode(QList<int> keycodes)
{
CustomLineEdit *senderLineEdit = qobject_cast<CustomLineEdit *>(sender());
@@ -803,8 +843,9 @@ void Shortcut::handleInputKeycode(QList<int> keycodes)
{
KiranMessageBox::message(nullptr,
tr("Failed"),
- QString(tr("Cannot use shortcut \"%1\", Because you cannot enter with this key."
- "Please try again using Ctrl, Alt, or Shift at the same time."))
+ QString(tr("Cannot use shortcut \"%1\","
+ "Please keep pressing the modifier keys such as Ctrl,"
+ "Alt, and Shift before pressing the last key of the shortcut key"))
.arg(keyStr),
KiranMessageBox::Ok);
return;
diff --git a/plugins/keybinding/shortcut.h b/plugins/keybinding/shortcut.h
index fc078fb..3504b1b 100644
--- a/plugins/keybinding/shortcut.h
+++ b/plugins/keybinding/shortcut.h
@@ -35,6 +35,8 @@ class ShortcutItem;
class KeyMap;
class CustomLineEdit;
class KeybindingBackEndProxy;
+class QLabel;
+
class Shortcut : public QWidget
{
Q_OBJECT
@@ -59,7 +61,7 @@ private:
ShortcutItem *createShortcutItem(QVBoxLayout *parent, ShortcutInfoPtr shortcutInfo, int type);
bool isConflict(QString &originName, QString newKeyCombination);
bool isValidKeycode(QList<int> keycodes);
- bool getExecFromDesktop(QString fileName, QString &exec);
+ bool extractDesktopInfo(const QString& fileName, QString &exec, QString &icon);
void updateShorcut(ShortcutInfoPtr newShortcut);
void insertShortcut(ShortcutInfoPtr shortcutInfo);
void clearFilterItems();
@@ -72,6 +74,7 @@ public slots:
void handledShortcutDeleted(QString result);
void handleShortcutChanged(QString result);
+ void handleCustomAppTextChanged(const QString& text);
void handleInputKeycode(QList<int> keycodes);
void handleItemDeleteClicked(QString uid);
@@ -96,8 +99,13 @@ private:
QList<ShortcutItem *> m_shortcutItem;
QList<ShortcutItem *> m_filterItem;
+ //记录上次通过应用打开的desktop文件记录的Exec和Icon
+ QString m_lastIconExec;
+ QString m_lastIcon;
+
QToolButton *m_btnModifyApp;
QToolButton *m_btnCustomApp;
+ QLabel *m_customAppIcon;
CustomLineEdit *m_lECustomKey;
CustomLineEdit *m_lEModifyKey;
diff --git a/translations/kiran-control-panel.zh_CN.ts b/translations/kiran-control-panel.zh_CN.ts
index 970c5a0..31fc01e 100644
--- a/translations/kiran-control-panel.zh_CN.ts
+++ b/translations/kiran-control-panel.zh_CN.ts
@@ -33,18 +33,18 @@
<name>AccountWidget</name>
<message>
<location filename="../plugins/account/account-widget.cpp" line="100"/>
- <location filename="../plugins/account/account-widget.cpp" line="420"/>
+ <location filename="../plugins/account/account-widget.cpp" line="418"/>
<source>disable</source>
<translation type="unfinished">禁用</translation>
</message>
<message>
<location filename="../plugins/account/account-widget.cpp" line="100"/>
- <location filename="../plugins/account/account-widget.cpp" line="420"/>
+ <location filename="../plugins/account/account-widget.cpp" line="418"/>
<source>enable</source>
<translation type="unfinished">启用</translation>
</message>
<message>
- <location filename="../plugins/account/account-widget.cpp" line="225"/>
+ <location filename="../plugins/account/account-widget.cpp" line="223"/>
<source>Create new user</source>
<translation type="unfinished">创建新用户</translation>
</message>
@@ -2983,22 +2983,22 @@
<translation>请用分号分隔多个DNS</translation>
</message>
<message>
- <location filename="../plugins/network/src/plugin/setting-widget/ipv6-widget.cpp" line="234"/>
+ <location filename="../plugins/network/src/plugin/setting-widget/ipv6-widget.cpp" line="236"/>
<source>Ipv6 DNS invalid</source>
<translation>无效的Ipv6 DNS</translation>
</message>
<message>
- <location filename="../plugins/network/src/plugin/setting-widget/ipv6-widget.cpp" line="250"/>
+ <location filename="../plugins/network/src/plugin/setting-widget/ipv6-widget.cpp" line="252"/>
<source>Ipv6 address can not be empty</source>
<translation>Ipv6地址不能为空</translation>
</message>
<message>
- <location filename="../plugins/network/src/plugin/setting-widget/ipv6-widget.cpp" line="261"/>
+ <location filename="../plugins/network/src/plugin/setting-widget/ipv6-widget.cpp" line="263"/>
<source>Ipv6 address invalid</source>
<translation>无效的Ipv6地址</translation>
</message>
<message>
- <location filename="../plugins/network/src/plugin/setting-widget/ipv6-widget.cpp" line="274"/>
+ <location filename="../plugins/network/src/plugin/setting-widget/ipv6-widget.cpp" line="276"/>
<source>Ipv6 Gateway invalid</source>
<translation>无效的Ipv6网关</translation>
</message>
@@ -4675,8 +4675,8 @@ This is line 50 of the test text</source>
</message>
<message>
<location filename="../plugins/keybinding/shortcut.ui" line="210"/>
- <location filename="../plugins/keybinding/shortcut.cpp" line="163"/>
- <location filename="../plugins/keybinding/shortcut.cpp" line="550"/>
+ <location filename="../plugins/keybinding/shortcut.cpp" line="174"/>
+ <location filename="../plugins/keybinding/shortcut.cpp" line="580"/>
<source>Edit</source>
<translation>编辑</translation>
</message>
@@ -4688,8 +4688,8 @@ This is line 50 of the test text</source>
<message>
<location filename="../plugins/keybinding/shortcut.ui" line="346"/>
<location filename="../plugins/keybinding/shortcut.ui" line="551"/>
- <location filename="../plugins/keybinding/shortcut.cpp" line="106"/>
- <location filename="../plugins/keybinding/shortcut.cpp" line="118"/>
+ <location filename="../plugins/keybinding/shortcut.cpp" line="116"/>
+ <location filename="../plugins/keybinding/shortcut.cpp" line="129"/>
<source>Add</source>
<translation>添加</translation>
</message>
@@ -4742,7 +4742,7 @@ This is line 50 of the test text</source>
<message>
<location filename="../plugins/keybinding/shortcut.ui" line="589"/>
<source>Cancel</source>
- <translation type="unfinished">取消</translation>
+ <translation>取消</translation>
</message>
<message>
<location filename="../plugins/keybinding/shortcut.ui" line="635"/>
@@ -4772,7 +4772,7 @@ This is line 50 of the test text</source>
<message>
<location filename="../plugins/keybinding/shortcut.ui" line="770"/>
<source>Save</source>
- <translation type="unfinished">保存</translation>
+ <translation>保存</translation>
</message>
<message>
<location filename="../plugins/keybinding/shortcut.ui" line="805"/>
@@ -4782,129 +4782,139 @@ This is line 50 of the test text</source>
<message>
<location filename="../plugins/keybinding/shortcut.ui" line="808"/>
<source>return</source>
- <translation type="unfinished">返回</translation>
+ <translation>返回</translation>
</message>
<message>
- <location filename="../plugins/keybinding/shortcut.cpp" line="87"/>
+ <location filename="../plugins/keybinding/shortcut.cpp" line="90"/>
<source>Please enter a search keyword...</source>
<translation>请输入搜索关键字...</translation>
</message>
<message>
- <location filename="../plugins/keybinding/shortcut.cpp" line="99"/>
+ <location filename="../plugins/keybinding/shortcut.cpp" line="102"/>
<source>Required</source>
<translation>必填</translation>
</message>
<message>
- <location filename="../plugins/keybinding/shortcut.cpp" line="127"/>
- <location filename="../plugins/keybinding/shortcut.cpp" line="134"/>
+ <location filename="../plugins/keybinding/shortcut.cpp" line="138"/>
+ <location filename="../plugins/keybinding/shortcut.cpp" line="145"/>
<source>Please press the new shortcut key</source>
<translation>请输入新快捷键</translation>
</message>
<message>
- <location filename="../plugins/keybinding/shortcut.cpp" line="161"/>
+ <location filename="../plugins/keybinding/shortcut.cpp" line="172"/>
<source>Finished</source>
<translation>完成</translation>
</message>
<message>
- <location filename="../plugins/keybinding/shortcut.cpp" line="215"/>
+ <location filename="../plugins/keybinding/shortcut.cpp" line="226"/>
<source>failed to load shortcut key data!</source>
<translation>加载快捷键数据失败!</translation>
</message>
<message>
- <location filename="../plugins/keybinding/shortcut.cpp" line="257"/>
+ <location filename="../plugins/keybinding/shortcut.cpp" line="268"/>
<source>List shortcut failed,error:%1</source>
<translation>列出快捷键失败,错误:%1</translation>
</message>
<message>
- <location filename="../plugins/keybinding/shortcut.cpp" line="300"/>
+ <location filename="../plugins/keybinding/shortcut.cpp" line="311"/>
+ <location filename="../plugins/keybinding/shortcut.cpp" line="406"/>
<source>Error</source>
<translation>错误</translation>
</message>
<message>
- <location filename="../plugins/keybinding/shortcut.cpp" line="301"/>
+ <location filename="../plugins/keybinding/shortcut.cpp" line="312"/>
<source>Get shortcut failed,error:</source>
<translation>获取快捷键失败,错误:</translation>
</message>
<message>
- <location filename="../plugins/keybinding/shortcut.cpp" line="379"/>
+ <location filename="../plugins/keybinding/shortcut.cpp" line="395"/>
<source>Open File</source>
<translation>打开文件</translation>
</message>
<message>
- <location filename="../plugins/keybinding/shortcut.cpp" line="603"/>
+ <location filename="../plugins/keybinding/shortcut.cpp" line="397"/>
+ <source>Desktop entries(*.desktop)</source>
+ <translation>桌面文件(*.desktop)</translation>
+ </message>
+ <message>
+ <location filename="../plugins/keybinding/shortcut.cpp" line="633"/>
<source>System</source>
<translation>系统</translation>
</message>
<message>
- <location filename="../plugins/keybinding/shortcut.cpp" line="605"/>
+ <location filename="../plugins/keybinding/shortcut.cpp" line="635"/>
<source>Sound</source>
<translation>声音</translation>
</message>
<message>
- <location filename="../plugins/keybinding/shortcut.cpp" line="655"/>
- <location filename="../plugins/keybinding/shortcut.cpp" line="705"/>
- <location filename="../plugins/keybinding/shortcut.cpp" line="726"/>
- <location filename="../plugins/keybinding/shortcut.cpp" line="761"/>
- <location filename="../plugins/keybinding/shortcut.cpp" line="782"/>
- <location filename="../plugins/keybinding/shortcut.cpp" line="805"/>
- <location filename="../plugins/keybinding/shortcut.cpp" line="825"/>
+ <location filename="../plugins/keybinding/shortcut.cpp" line="685"/>
+ <location filename="../plugins/keybinding/shortcut.cpp" line="735"/>
+ <location filename="../plugins/keybinding/shortcut.cpp" line="756"/>
+ <location filename="../plugins/keybinding/shortcut.cpp" line="791"/>
+ <location filename="../plugins/keybinding/shortcut.cpp" line="812"/>
+ <location filename="../plugins/keybinding/shortcut.cpp" line="845"/>
+ <location filename="../plugins/keybinding/shortcut.cpp" line="866"/>
<source>Failed</source>
<translation>失败</translation>
</message>
<message>
- <location filename="../plugins/keybinding/shortcut.cpp" line="656"/>
+ <location filename="../plugins/keybinding/shortcut.cpp" line="686"/>
<source>Delete shortcut failed,error:</source>
<translation>删除快捷键失败,错误:</translation>
</message>
<message>
- <location filename="../plugins/keybinding/shortcut.cpp" line="669"/>
- <location filename="../plugins/keybinding/shortcut.cpp" line="744"/>
+ <location filename="../plugins/keybinding/shortcut.cpp" line="699"/>
+ <location filename="../plugins/keybinding/shortcut.cpp" line="774"/>
<source>Warning</source>
- <translation type="unfinished">警告</translation>
+ <translation>警告</translation>
</message>
<message>
- <location filename="../plugins/keybinding/shortcut.cpp" line="670"/>
- <location filename="../plugins/keybinding/shortcut.cpp" line="745"/>
+ <location filename="../plugins/keybinding/shortcut.cpp" line="700"/>
+ <location filename="../plugins/keybinding/shortcut.cpp" line="775"/>
<source>Please complete the shortcut information!</source>
<translation>请完善快捷键信息!</translation>
</message>
<message>
- <location filename="../plugins/keybinding/shortcut.cpp" line="679"/>
+ <location filename="../plugins/keybinding/shortcut.cpp" line="709"/>
<source>Set shortcut</source>
<translation>设置快捷键</translation>
</message>
<message>
- <location filename="../plugins/keybinding/shortcut.cpp" line="680"/>
+ <location filename="../plugins/keybinding/shortcut.cpp" line="710"/>
<source>Are you sure you want to disable this shortcut?</source>
<translation>是否确定要禁用此快捷键?</translation>
</message>
<message>
- <location filename="../plugins/keybinding/shortcut.cpp" line="706"/>
+ <location filename="../plugins/keybinding/shortcut.cpp" line="736"/>
<source>Modify system shortcut failed,error:</source>
<translation>修改系统快捷键失败,错误:</translation>
</message>
<message>
- <location filename="../plugins/keybinding/shortcut.cpp" line="727"/>
+ <location filename="../plugins/keybinding/shortcut.cpp" line="757"/>
<source>Modify custom shortcut failed,error:</source>
<translation>修改自定义快捷键失败,错误:</translation>
</message>
<message>
- <location filename="../plugins/keybinding/shortcut.cpp" line="762"/>
+ <location filename="../plugins/keybinding/shortcut.cpp" line="792"/>
<source>Add custom shortcut failed,error:</source>
<translation>添加自定义快捷键失败,错误:</translation>
</message>
<message>
- <location filename="../plugins/keybinding/shortcut.cpp" line="783"/>
+ <location filename="../plugins/keybinding/shortcut.cpp" line="813"/>
<source>Reset shortcut failed,error:</source>
<translation>重置快捷键失败,错误:</translation>
</message>
<message>
- <location filename="../plugins/keybinding/shortcut.cpp" line="806"/>
+ <location filename="../plugins/keybinding/shortcut.cpp" line="846"/>
+ <source>Cannot use shortcut &quot;%1&quot;,Please keep pressing the modifier keys such as Ctrl,Alt, and Shift before pressing the last key of the shortcut key</source>
+ <translation>无法使用快捷键&quot;%1&quot;, 请保持按压Ctrl、Alt、Shift等修饰键后再按压快捷键的最后一个键</translation>
+ </message>
+ <message>
<source>Cannot use shortcut &quot;%1&quot;, Because you cannot enter with this key.Please try again using Ctrl, Alt, or Shift at the same time.</source>
- <translation>无法使用快捷键&quot;%1&quot;,因为使用此键将无法输入请同时使用CtrlAltShift再试一次。</translation>
+ <translation type="vanished">无法使用快捷键&quot;%1&quot;,因为使用此键将无法输入请同时使用CtrlAltShift再试一次。</translation>
</message>
<message>
- <location filename="../plugins/keybinding/shortcut.cpp" line="826"/>
+ <location filename="../plugins/keybinding/shortcut.cpp" line="867"/>
<source>Shortcut keys %1 are already used in %2,Please try again!</source>
<translation>快捷键%1已用于%2请再试一次</translation>
</message>
--
2.33.0