From bd524c337a59d070da621c5dbcd749d2b8354db7 Mon Sep 17 00:00:00 2001
From: liuxinhao <liuxinhao@kylinsec.com.cn>
Date: Mon, 22 Apr 2024 13:45:35 +0800
Subject: [PATCH] feat(greeter plugin): Adjusting the Greeter Control Center
 plugin to use a new version of the interface for keyword search
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

- 调整Greeter控制中心插件使用新版本接口并支持关键字搜索

Closes #35280
---
 data/kiran-cpanel-greeter.desktop.in          | 33 --------
 .../kiran-cpanel-greeter/CMakeLists.txt       |  8 +-
 ...cp-interface.cpp => greeter-interface.cpp} | 58 ++++++-------
 .../kiran-cpanel-greeter/greeter-interface.h  | 46 ++++++++++
 .../kiran-cpanel-greeter/greeter-subitem.cpp  | 84 +++++++++++++++++++
 .../kiran-cpanel-greeter/greeter-subitem.h    | 57 +++++++++++++
 .../kiran-cpanel-greeter/kcp-interface.h      | 50 -----------
 .../kiran-cpanel-greeter/setting-window.cpp   | 28 ++++++-
 .../kiran-cpanel-greeter/setting-window.h     |  3 +
 translations/kiran-cpanel-greeter.zh_CN.ts    | 68 +++++++--------
 10 files changed, 277 insertions(+), 158 deletions(-)
 delete mode 100644 data/kiran-cpanel-greeter.desktop.in
 rename src/lightdm-greeter/kiran-cpanel-greeter/{kcp-interface.cpp => greeter-interface.cpp} (59%)
 create mode 100644 src/lightdm-greeter/kiran-cpanel-greeter/greeter-interface.h
 create mode 100644 src/lightdm-greeter/kiran-cpanel-greeter/greeter-subitem.cpp
 create mode 100644 src/lightdm-greeter/kiran-cpanel-greeter/greeter-subitem.h
 delete mode 100644 src/lightdm-greeter/kiran-cpanel-greeter/kcp-interface.h

diff --git a/data/kiran-cpanel-greeter.desktop.in b/data/kiran-cpanel-greeter.desktop.in
deleted file mode 100644
index db1065d..0000000
--- a/data/kiran-cpanel-greeter.desktop.in
+++ /dev/null
@@ -1,33 +0,0 @@
-#!/usr/bin/env xdg-open
-[Desktop Entry]
-Encoding=UTF-8
-Name=Greeter Settings
-Name[zh_CN]=登录选项
-Comment=kiran greeter settings
-Comment=Kiran登录界面选项
-#通过启动器单独执行 <kiran-cpanel-launcher -cpanel-plugin 插件的desktop文件名>
-Exec=kiran-cpanel-launcher --cpanel-plugin=kiran-cpanel-greeter
-Icon=kcp-greeter
-Terminal=false
-Type=Application
-Categories=Lightdm;Greeter;Core;Settings;System;X-Common-Features;X-Common-Features;
-X-KIRAN-NoDisplay=true
-
-[Kiran Control Panel Plugin]
-#插件排序
-Weight=99
-#插件分类
-Category=login-settings
-#插件共享库位置，若以'/'开头则为绝对路径，也可支持通过共享库名去插件安装目录去查找
-Library=libkiran-cpanel-greeter.so
-SubItems=Greeter
-
-[Greeter]
-#插件子项名 该值提供给控制中心形成子项列表
-Name=Greeter Settings
-Name[zh_CN] = 登录选项
-#插件Icon
-Icon=kcp-greeter
-#插件关键字 该值提供给控制中心形成搜索列表
-Keywords[zh_CN]=登录选项
-Keywords = Greeter
\ No newline at end of file
diff --git a/src/lightdm-greeter/kiran-cpanel-greeter/CMakeLists.txt b/src/lightdm-greeter/kiran-cpanel-greeter/CMakeLists.txt
index e556b36..16cde77 100644
--- a/src/lightdm-greeter/kiran-cpanel-greeter/CMakeLists.txt
+++ b/src/lightdm-greeter/kiran-cpanel-greeter/CMakeLists.txt
@@ -10,8 +10,8 @@ pkg_get_variable(CPANEL_DESKTOP_DIR kiran-control-panel plugin_desktop_location)
 file(GLOB CPANEL_GREETER_SRC "../common/*.cpp" "../common/*.h" "./*.cpp" "./*.h" "./*.ui")
 set(CPANEL_GREETER_RESOURCE ${CMAKE_SOURCE_DIR}/resources/kcp-greeter-resources.qrc)
 file(GLOB CPANEL_GREETER_TRANSLATION ${CMAKE_SOURCE_DIR}/translations/kiran-cpanel-greeter.*.ts)
-qt5_create_translation(GREETER_SETTINS_QM_FILES 
-        ${CMAKE_CURRENT_SOURCE_DIR} 
+qt5_create_translation(GREETER_SETTINS_QM_FILES
+        ${CMAKE_CURRENT_SOURCE_DIR}
         ${CPANEL_GREETER_TRANSLATION}
         OPTIONS -I ${CMAKE_CURRENT_SOURCE_DIR} -I ${CMAKE_CURRENT_BINARY_DIR} )
 
@@ -45,10 +45,6 @@ target_link_libraries(${TARGET_NAME}
         ${KIRAN_STYLE_HELPER_LIBRARIES})
 
 # 安装
-#安装插件desktop文件
-configure_file(${CMAKE_SOURCE_DIR}/data/kiran-cpanel-greeter.desktop.in ${CMAKE_CURRENT_BINARY_DIR}/kiran-cpanel-greeter.desktop @ONLY)
-install(FILES ${CMAKE_CURRENT_BINARY_DIR}/kiran-cpanel-greeter.desktop DESTINATION ${CPANEL_DESKTOP_DIR}/)
-
 #安装插件
 install(TARGETS ${TARGET_NAME} DESTINATION ${CPANEL_PLUGIN_DIR}/)
 #翻译文件
diff --git a/src/lightdm-greeter/kiran-cpanel-greeter/kcp-interface.cpp b/src/lightdm-greeter/kiran-cpanel-greeter/greeter-interface.cpp
similarity index 59%
rename from src/lightdm-greeter/kiran-cpanel-greeter/kcp-interface.cpp
rename to src/lightdm-greeter/kiran-cpanel-greeter/greeter-interface.cpp
index 3d5691c..0b346bc 100644
--- a/src/lightdm-greeter/kiran-cpanel-greeter/kcp-interface.cpp
+++ b/src/lightdm-greeter/kiran-cpanel-greeter/greeter-interface.cpp
@@ -1,5 +1,5 @@
 /**
- * Copyright (c) 2020 ~ 2021 KylinSec Co., Ltd.
+ * Copyright (c) 2020 ~ 2024 KylinSec Co., Ltd.
  * kiran-session-guard is licensed under Mulan PSL v2.
  * You can use this software according to the terms and conditions of the Mulan PSL v2.
  * You may obtain a copy of Mulan PSL v2 at:
@@ -9,34 +9,35 @@
  * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
  * See the Mulan PSL v2 for more details.
  *
- * Author:     liuxinhao <liuxinhao@kylinos.com.cn>
+ * Author:     liuxinhao <liuxinhao@kylinsec.com.cn>
  */
+#include "greeter-interface.h"
+#include "greeter-subitem.h"
 
-#include "kcp-interface.h"
-#include "setting-window.h"
-
-#include <qt5-log-i.h>
-#include <QApplication>
+#include <QCoreApplication>
 #include <QTranslator>
-
-#define KCP_SUBITEM_GREETER_ID "Greeter"
+#include <QLocale>
+#include <qt5-log-i.h>
 
 namespace Kiran
 {
 namespace SessionGuard
 {
-namespace Greeter
-{
-KcpInterface::KcpInterface()
+GreeterInterface::GreeterInterface(QObject* parent)
+    :QObject()
 {
+
 }
 
-KcpInterface::~KcpInterface()
+GreeterInterface::~GreeterInterface()
 {
+
 }
 
-int KcpInterface::init()
+int GreeterInterface::init(KiranControlPanel::PanelInterface* interface)
 {
+    m_panelInterface = interface;
+
     if (m_translator != nullptr)
     {
         QCoreApplication::removeTranslator(m_translator);
@@ -51,7 +52,7 @@ int KcpInterface::init()
                             "/usr/share/lightdm-kiran-greeter/translations",
                             ".qm"))
     {
-        KLOG_ERROR() << "load translator failed!";
+        KLOG_ERROR() << "greeter plugin load translator failed!";
         m_translator->deleteLater();
         m_translator = nullptr;
     }
@@ -60,32 +61,23 @@ int KcpInterface::init()
         QCoreApplication::installTranslator(m_translator);
     }
 
+    m_subitem.reset(new GreeterSubItem(interface, this));
     return 0;
 }
 
-void KcpInterface::uninit()
+void GreeterInterface::uninit()
 {
-}
-QWidget* KcpInterface::getSubItemWidget(QString subItemName)
-{
-    QWidget* widget = nullptr;
-    if (subItemName == KCP_SUBITEM_GREETER_ID)
+    if (m_translator != nullptr)
     {
-        widget = new SettingWindow;
+        qApp->removeTranslator(m_translator);
+        m_translator->deleteLater();
+        m_translator = nullptr;
     }
-    m_currentWidget = widget;
-    return m_currentWidget;
 }
 
-bool KcpInterface::haveUnsavedOptions()
+QVector<KiranControlPanel::SubItemPtr> GreeterInterface::getSubItems()
 {
-    return false;
+    return {m_subitem};
+}
 }
-
-QStringList KcpInterface::visibleSubItems()
-{
-    return QStringList() << KCP_SUBITEM_GREETER_ID;
 }
-}  // namespace Greeter
-}  // namespace SessionGuard
-}  // namespace Kiran
\ No newline at end of file
diff --git a/src/lightdm-greeter/kiran-cpanel-greeter/greeter-interface.h b/src/lightdm-greeter/kiran-cpanel-greeter/greeter-interface.h
new file mode 100644
index 0000000..6cea16a
--- /dev/null
+++ b/src/lightdm-greeter/kiran-cpanel-greeter/greeter-interface.h
@@ -0,0 +1,46 @@
+/**
+ * Copyright (c) 2020 ~ 2024 KylinSec Co., Ltd.
+ * kiran-session-guard is licensed under Mulan PSL v2.
+ * You can use this software according to the terms and conditions of the Mulan PSL v2.
+ * You may obtain a copy of Mulan PSL v2 at:
+ *          http://license.coscl.org.cn/MulanPSL2
+ * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
+ * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
+ * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
+ * See the Mulan PSL v2 for more details.
+ *
+ * Author:     liuxinhao <liuxinhao@kylinsec.com.cn>
+ */
+#pragma once
+#include <QObject>
+#include <plugin-interface-v2.h>
+#include <panel-interface.h>
+
+class QTranslator;
+namespace Kiran
+{
+namespace SessionGuard
+{
+class GreeterInterface: public QObject,public KiranControlPanel::PluginInterfaceV2
+{
+    Q_OBJECT
+    Q_PLUGIN_METADATA(IID KiranControlPanel_PluginInterfaceV2_iid)
+    Q_INTERFACES(KiranControlPanel::PluginInterfaceV2)
+public:
+    GreeterInterface(QObject* parent = nullptr);
+    ~GreeterInterface();
+
+    virtual int init(KiranControlPanel::PanelInterface* interface) override;
+    virtual void uninit() override;
+
+    // 功能项数组，生存周期由插件维护
+    // 功能项发生变更时，应调用init时传入KcpInterface接口，通知主面板相关信息变更,及时加载新的功能项信息
+    virtual QVector<KiranControlPanel::SubItemPtr> getSubItems() override;
+
+private:
+    KiranControlPanel::PanelInterface* m_panelInterface = nullptr;
+    QTranslator* m_translator = nullptr;
+    KiranControlPanel::SubItemPtr m_subitem;
+};
+}
+}
\ No newline at end of file
diff --git a/src/lightdm-greeter/kiran-cpanel-greeter/greeter-subitem.cpp b/src/lightdm-greeter/kiran-cpanel-greeter/greeter-subitem.cpp
new file mode 100644
index 0000000..8b323e2
--- /dev/null
+++ b/src/lightdm-greeter/kiran-cpanel-greeter/greeter-subitem.cpp
@@ -0,0 +1,84 @@
+/**
+ * Copyright (c) 2020 ~ 2024 KylinSec Co., Ltd.
+ * kiran-session-guard is licensed under Mulan PSL v2.
+ * You can use this software according to the terms and conditions of the Mulan PSL v2.
+ * You may obtain a copy of Mulan PSL v2 at:
+ *          http://license.coscl.org.cn/MulanPSL2
+ * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
+ * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
+ * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
+ * See the Mulan PSL v2 for more details.
+ *
+ * Author:     liuxinhao <liuxinhao@kylinsec.com.cn>
+ */
+#include "greeter-subitem.h"
+#include "setting-window.h"
+
+using namespace Kiran::SessionGuard::Greeter;
+
+GreeterSubItem::GreeterSubItem(KiranControlPanel::PanelInterface* interface, QObject* parent)
+    : QObject(parent),
+      m_interface(interface)
+{
+}
+
+GreeterSubItem ::~GreeterSubItem()
+{
+}
+
+QString GreeterSubItem::getID()
+{
+    return "Greeter";
+}
+
+QString GreeterSubItem::getName()
+{
+    return tr("Greeter Settings");
+}
+
+QString GreeterSubItem::getCategory()
+{
+    return "login-settings";
+}
+
+QString GreeterSubItem::getDesc()
+{
+    return "";
+}
+
+QString GreeterSubItem::getIcon()
+{
+    return "kcp-greeter";
+}
+
+int GreeterSubItem::getWeight()
+{
+    return 999;
+}
+
+QVector<QPair<QString, QString>> GreeterSubItem::getSearchKeys()
+{
+    auto res = SettingWindow::getSearchKeys();
+    return res;
+}
+
+QWidget* GreeterSubItem::createWidget()
+{
+    m_subitemWidget = new SettingWindow();
+    m_subitemWidget->installEventFilter(this);
+    return m_subitemWidget;
+}
+
+bool GreeterSubItem::jumpToSearchEntry(const QString& key)
+{
+    if (!m_subitemWidget)
+        return false;
+
+    m_subitemWidget->jumpToSearchKey(key);
+    return true;
+}
+
+bool GreeterSubItem::haveUnSavedOptions()
+{
+    return false;
+}
\ No newline at end of file
diff --git a/src/lightdm-greeter/kiran-cpanel-greeter/greeter-subitem.h b/src/lightdm-greeter/kiran-cpanel-greeter/greeter-subitem.h
new file mode 100644
index 0000000..474392c
--- /dev/null
+++ b/src/lightdm-greeter/kiran-cpanel-greeter/greeter-subitem.h
@@ -0,0 +1,57 @@
+/**
+ * Copyright (c) 2020 ~ 2024 KylinSec Co., Ltd.
+ * kiran-session-guard is licensed under Mulan PSL v2.
+ * You can use this software according to the terms and conditions of the Mulan PSL v2.
+ * You may obtain a copy of Mulan PSL v2 at:
+ *          http://license.coscl.org.cn/MulanPSL2
+ * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
+ * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
+ * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
+ * See the Mulan PSL v2 for more details.
+ *
+ * Author:     liuxinhao <liuxinhao@kylinsec.com.cn>
+ */
+#pragma once
+#include <QDBusObjectPath>
+#include <QObject>
+#include <panel-interface.h>
+#include <plugin-subitem-interface.h>
+
+namespace Kiran
+{
+namespace SessionGuard
+{
+namespace Greeter
+{
+class SettingWindow;
+}
+}  // namespace SessionGuard
+}  // namespace Kiran
+
+class GreeterSubItem : public QObject,
+                       public KiranControlPanel::PluginSubitemInterface
+{
+    Q_OBJECT
+public:
+    GreeterSubItem(KiranControlPanel::PanelInterface* interface, QObject* parent = nullptr);
+    ~GreeterSubItem();
+
+    QString getID() override;
+    QString getName() override;
+    QString getCategory() override;
+    QString getDesc() override;
+    QString getIcon() override;
+    int getWeight() override;
+
+    // 获取自定义搜索关键词
+    //  QVector< 显示文本(已翻译)，搜索跳转标识ID >
+    QVector<QPair<QString, QString>> getSearchKeys() override;
+
+    QWidget* createWidget() override;
+    bool jumpToSearchEntry(const QString& key) override;
+    bool haveUnSavedOptions() override;
+
+private:
+    KiranControlPanel::PanelInterface* m_interface = nullptr;
+    Kiran::SessionGuard::Greeter::SettingWindow* m_subitemWidget = nullptr;
+};
diff --git a/src/lightdm-greeter/kiran-cpanel-greeter/kcp-interface.h b/src/lightdm-greeter/kiran-cpanel-greeter/kcp-interface.h
deleted file mode 100644
index 4759f99..0000000
--- a/src/lightdm-greeter/kiran-cpanel-greeter/kcp-interface.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/**
- * Copyright (c) 2020 ~ 2021 KylinSec Co., Ltd.
- * kiran-session-guard is licensed under Mulan PSL v2.
- * You can use this software according to the terms and conditions of the Mulan PSL v2.
- * You may obtain a copy of Mulan PSL v2 at:
- *          http://license.coscl.org.cn/MulanPSL2
- * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
- * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
- * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
- * See the Mulan PSL v2 for more details.
- *
- * Author:     liuxinhao <liuxinhao@kylinos.com.cn>
- */
-#pragma once
-#include <kcp-plugin-interface.h>
-
-
-QT_BEGIN_NAMESPACE
-class QTranslator;
-QT_END_NAMESPACE
-
-namespace Kiran
-{
-namespace SessionGuard
-{
-namespace Greeter
-{
-class KcpInterface : public QObject, public KcpPluginInterface
-{
-    Q_OBJECT
-    Q_PLUGIN_METADATA(IID KcpPluginInterface_iid)
-    Q_INTERFACES(KcpPluginInterface)
-public:
-    KcpInterface();
-    ~KcpInterface() override;
-
-    int init() override;
-    void uninit() override;
-
-    QWidget* getSubItemWidget(QString subItemName) override;
-    bool haveUnsavedOptions() override;
-    QStringList visibleSubItems() override;
-
-private:
-    QWidget* m_currentWidget = nullptr;
-    QTranslator* m_translator = nullptr;
-};
-}  // namespace Greeter
-}  // namespace SessionGuard
-}  // namespace Kiran
\ No newline at end of file
diff --git a/src/lightdm-greeter/kiran-cpanel-greeter/setting-window.cpp b/src/lightdm-greeter/kiran-cpanel-greeter/setting-window.cpp
index 45c9fb9..3712051 100644
--- a/src/lightdm-greeter/kiran-cpanel-greeter/setting-window.cpp
+++ b/src/lightdm-greeter/kiran-cpanel-greeter/setting-window.cpp
@@ -39,6 +39,9 @@
 
 #define BACKGROUND_SAVE_LOCATION "/usr/share/lightdm-kiran-greeter/background"
 
+#define ITEM_GENERAL_SETTINGS    QT_TRANSLATE_NOOP("Kiran::SessionGuard::Greeter::SettingWindow","general settings")
+#define ITEM_AUTO_LOGIN_SETTINGS QT_TRANSLATE_NOOP("Kiran::SessionGuard::Greeter::SettingWindow","autologin")
+
 enum GreeterSettingsPageEnum
 {
     GreeterSettings_Appearance,
@@ -91,11 +94,11 @@ void SettingWindow::initUI()
     layoutSideWidget->addWidget(m_sidebarWidget);
 
     QListWidgetItem *item;
-    item = new QListWidgetItem(tr("general settings"), m_sidebarWidget);
+    item = new QListWidgetItem(tr(ITEM_GENERAL_SETTINGS), m_sidebarWidget);
     item->setIcon(QIcon(":/kcp-greeter/images/appearance_setting.png"));
     m_sidebarWidget->addItem(item);
 
-    item = new QListWidgetItem(tr("autologin"), m_sidebarWidget);
+    item = new QListWidgetItem(tr(ITEM_AUTO_LOGIN_SETTINGS), m_sidebarWidget);
     item->setIcon(QIcon(":/kcp-greeter/images/user_login_setting.png"));
     m_sidebarWidget->addItem(item);
 
@@ -703,6 +706,27 @@ QSize SettingWindow::sizeHint() const
     return {940, 653};
 }
 
+QVector<QPair<QString,QString>> SettingWindow::getSearchKeys()
+{
+    QVector<QPair<QString,QString>> searchEntries = {
+        {tr(ITEM_GENERAL_SETTINGS),tr(ITEM_GENERAL_SETTINGS)},
+        {tr(ITEM_AUTO_LOGIN_SETTINGS),tr(ITEM_AUTO_LOGIN_SETTINGS)}
+    };
+
+    return searchEntries;
+}
+
+void SettingWindow::jumpToSearchKey(const QString& subItem)
+{
+    auto resList = m_sidebarWidget->findItems(subItem,Qt::MatchFixedString);
+    if( resList.isEmpty() )
+    {
+        KLOG_ERROR() << "greeter plugin can't find SubItem:" << subItem;
+        return;
+    }
+    m_sidebarWidget->setCurrentItem(resList.at(0));
+}
+
 void SettingWindow::onLoginOptionsChanged()
 {
     auto changedSwitch = qobject_cast<KiranSwitchButton *>(sender());
diff --git a/src/lightdm-greeter/kiran-cpanel-greeter/setting-window.h b/src/lightdm-greeter/kiran-cpanel-greeter/setting-window.h
index 1c95a1c..4975275 100644
--- a/src/lightdm-greeter/kiran-cpanel-greeter/setting-window.h
+++ b/src/lightdm-greeter/kiran-cpanel-greeter/setting-window.h
@@ -99,6 +99,9 @@ public:
 
     QSize sizeHint() const override;
 
+    static QVector<QPair<QString,QString>> getSearchKeys();
+    void jumpToSearchKey(const QString& subItem);
+
 private:
     void initUI();
 
diff --git a/translations/kiran-cpanel-greeter.zh_CN.ts b/translations/kiran-cpanel-greeter.zh_CN.ts
index 5468e6f..d76b4b5 100644
--- a/translations/kiran-cpanel-greeter.zh_CN.ts
+++ b/translations/kiran-cpanel-greeter.zh_CN.ts
@@ -3,14 +3,6 @@
 <TS version="2.1" language="zh_CN">
 <context>
     <name>GreeterSettingWindow</name>
-    <message>
-        <source>autologin</source>
-        <translation type="vanished">自动登录</translation>
-    </message>
-    <message>
-        <source>general settings</source>
-        <translation type="vanished">登录选项</translation>
-    </message>
     <message>
         <source>auto login user(take effect after restart)</source>
         <translation type="vanished">自动登录用户(重启后生效)</translation>
@@ -86,113 +78,121 @@ Select discard to discard the modification and reload the new configuration</sou
         <translation type="vanished">保存成功</translation>
     </message>
 </context>
+<context>
+    <name>GreeterSubItem</name>
+    <message>
+        <location filename="../src/lightdm-greeter/kiran-cpanel-greeter/greeter-subitem.cpp" line="36"/>
+        <source>Greeter Settings</source>
+        <translation>登录选项</translation>
+    </message>
+</context>
 <context>
     <name>Kiran::SessionGuard::Greeter::SettingWindow</name>
     <message>
-        <location filename="../src/lightdm-greeter/kiran-cpanel-greeter/setting-window.cpp" line="94"/>
+        <location filename="../src/lightdm-greeter/kiran-cpanel-greeter/setting-window.cpp" line="42"/>
         <source>general settings</source>
         <translation>登录选项</translation>
     </message>
     <message>
-        <location filename="../src/lightdm-greeter/kiran-cpanel-greeter/setting-window.cpp" line="98"/>
+        <location filename="../src/lightdm-greeter/kiran-cpanel-greeter/setting-window.cpp" line="43"/>
         <source>autologin</source>
         <translation>自动登录</translation>
     </message>
     <message>
-        <location filename="../src/lightdm-greeter/kiran-cpanel-greeter/setting-window.cpp" line="165"/>
+        <location filename="../src/lightdm-greeter/kiran-cpanel-greeter/setting-window.cpp" line="168"/>
         <source>auto login user(take effect after restart)</source>
         <translation>自动登录用户(重启后生效)</translation>
     </message>
     <message>
-        <location filename="../src/lightdm-greeter/kiran-cpanel-greeter/setting-window.cpp" line="199"/>
+        <location filename="../src/lightdm-greeter/kiran-cpanel-greeter/setting-window.cpp" line="202"/>
         <source>auto login delay(seconds)(take effect after restart)</source>
         <translation>自动登录延时(秒)(重启后生效)</translation>
     </message>
     <message>
-        <location filename="../src/lightdm-greeter/kiran-cpanel-greeter/setting-window.cpp" line="235"/>
-        <location filename="../src/lightdm-greeter/kiran-cpanel-greeter/setting-window.cpp" line="399"/>
+        <location filename="../src/lightdm-greeter/kiran-cpanel-greeter/setting-window.cpp" line="238"/>
+        <location filename="../src/lightdm-greeter/kiran-cpanel-greeter/setting-window.cpp" line="402"/>
         <source>Save</source>
         <translation>保存</translation>
     </message>
     <message>
-        <location filename="../src/lightdm-greeter/kiran-cpanel-greeter/setting-window.cpp" line="249"/>
-        <location filename="../src/lightdm-greeter/kiran-cpanel-greeter/setting-window.cpp" line="413"/>
+        <location filename="../src/lightdm-greeter/kiran-cpanel-greeter/setting-window.cpp" line="252"/>
+        <location filename="../src/lightdm-greeter/kiran-cpanel-greeter/setting-window.cpp" line="416"/>
         <source>Reset</source>
         <translation>重置</translation>
     </message>
     <message>
-        <location filename="../src/lightdm-greeter/kiran-cpanel-greeter/setting-window.cpp" line="272"/>
+        <location filename="../src/lightdm-greeter/kiran-cpanel-greeter/setting-window.cpp" line="275"/>
         <source>login background setting</source>
         <translation>登录背景设置</translation>
     </message>
     <message>
-        <location filename="../src/lightdm-greeter/kiran-cpanel-greeter/setting-window.cpp" line="289"/>
+        <location filename="../src/lightdm-greeter/kiran-cpanel-greeter/setting-window.cpp" line="292"/>
         <source>Scale Mode</source>
         <translation>缩放模式</translation>
     </message>
     <message>
-        <location filename="../src/lightdm-greeter/kiran-cpanel-greeter/setting-window.cpp" line="300"/>
+        <location filename="../src/lightdm-greeter/kiran-cpanel-greeter/setting-window.cpp" line="303"/>
         <source>auto</source>
         <translation>自动</translation>
     </message>
     <message>
-        <location filename="../src/lightdm-greeter/kiran-cpanel-greeter/setting-window.cpp" line="301"/>
+        <location filename="../src/lightdm-greeter/kiran-cpanel-greeter/setting-window.cpp" line="304"/>
         <source>manual</source>
         <translation>手动</translation>
     </message>
     <message>
-        <location filename="../src/lightdm-greeter/kiran-cpanel-greeter/setting-window.cpp" line="302"/>
+        <location filename="../src/lightdm-greeter/kiran-cpanel-greeter/setting-window.cpp" line="305"/>
         <source>disable</source>
         <translation>禁用</translation>
     </message>
     <message>
-        <location filename="../src/lightdm-greeter/kiran-cpanel-greeter/setting-window.cpp" line="308"/>
+        <location filename="../src/lightdm-greeter/kiran-cpanel-greeter/setting-window.cpp" line="311"/>
         <source>Scale Factor</source>
         <translation>缩放比例</translation>
     </message>
     <message>
-        <location filename="../src/lightdm-greeter/kiran-cpanel-greeter/setting-window.cpp" line="333"/>
+        <location filename="../src/lightdm-greeter/kiran-cpanel-greeter/setting-window.cpp" line="336"/>
         <source>Enable manual input user login</source>
         <translation>允许手动输入用户名登录</translation>
     </message>
     <message>
-        <location filename="../src/lightdm-greeter/kiran-cpanel-greeter/setting-window.cpp" line="358"/>
+        <location filename="../src/lightdm-greeter/kiran-cpanel-greeter/setting-window.cpp" line="361"/>
         <source>Show User List</source>
         <translation>显示用户列表</translation>
     </message>
     <message>
-        <location filename="../src/lightdm-greeter/kiran-cpanel-greeter/setting-window.cpp" line="465"/>
-        <location filename="../src/lightdm-greeter/kiran-cpanel-greeter/setting-window.cpp" line="541"/>
+        <location filename="../src/lightdm-greeter/kiran-cpanel-greeter/setting-window.cpp" line="467"/>
+        <location filename="../src/lightdm-greeter/kiran-cpanel-greeter/setting-window.cpp" line="543"/>
         <source>Configuration changed</source>
         <translation>配置已改变</translation>
     </message>
     <message>
-        <location filename="../src/lightdm-greeter/kiran-cpanel-greeter/setting-window.cpp" line="466"/>
-        <location filename="../src/lightdm-greeter/kiran-cpanel-greeter/setting-window.cpp" line="542"/>
+        <location filename="../src/lightdm-greeter/kiran-cpanel-greeter/setting-window.cpp" line="468"/>
+        <location filename="../src/lightdm-greeter/kiran-cpanel-greeter/setting-window.cpp" line="544"/>
         <source>The external configuration file has changed
 If you choose to save, all external changes will be overwritten
 Select discard to discard the modification and reload the new configuration</source>
         <translation>配置文件已被修改，如果继续保存所有额外的修改将会被覆盖，选择丢弃将丢弃所有的修改并重新加载新的配置文件</translation>
     </message>
     <message>
-        <location filename="../src/lightdm-greeter/kiran-cpanel-greeter/setting-window.cpp" line="519"/>
-        <location filename="../src/lightdm-greeter/kiran-cpanel-greeter/setting-window.cpp" line="589"/>
+        <location filename="../src/lightdm-greeter/kiran-cpanel-greeter/setting-window.cpp" line="521"/>
+        <location filename="../src/lightdm-greeter/kiran-cpanel-greeter/setting-window.cpp" line="591"/>
         <source>Save failed, reload</source>
         <translation>保存失败，已重新加载</translation>
     </message>
     <message>
-        <location filename="../src/lightdm-greeter/kiran-cpanel-greeter/setting-window.cpp" line="523"/>
-        <location filename="../src/lightdm-greeter/kiran-cpanel-greeter/setting-window.cpp" line="599"/>
+        <location filename="../src/lightdm-greeter/kiran-cpanel-greeter/setting-window.cpp" line="525"/>
+        <location filename="../src/lightdm-greeter/kiran-cpanel-greeter/setting-window.cpp" line="601"/>
         <source>Saved successfully</source>
         <translation>保存成功</translation>
     </message>
     <message>
-        <location filename="../src/lightdm-greeter/kiran-cpanel-greeter/setting-window.cpp" line="593"/>
+        <location filename="../src/lightdm-greeter/kiran-cpanel-greeter/setting-window.cpp" line="595"/>
         <source>Save failed: %1</source>
         <translation>保存失败: %1</translation>
     </message>
     <message>
-        <location filename="../src/lightdm-greeter/kiran-cpanel-greeter/setting-window.cpp" line="718"/>
+        <location filename="../src/lightdm-greeter/kiran-cpanel-greeter/setting-window.cpp" line="730"/>
         <source>Please ensure that one of the two options is turned on!</source>
         <translation>请确保两个选项之一被打开!</translation>
     </message>
-- 
2.33.0

