diff -Nru ukui-control-center-4.10.0.0/debian/changelog ukui-control-center-4.10.0.0/debian/changelog
--- ukui-control-center-4.10.0.0/debian/changelog	2025-01-01 16:22:05.000000000 +0800
+++ ukui-control-center-4.10.0.0/debian/changelog	2025-02-07 16:32:50.000000000 +0800
@@ -1,3 +1,12 @@
+ukui-control-center (4.10.0.0-ok54) nile; urgency=medium
+
+  * BUG:#290697 【设置】【字体】字体选择可选字体与要求不一致
+  * 需求号: 无
+  * 其他改动说明:解决编译问题
+  * 其他改动影响域:无
+
+ -- susidian <susidian@kylinos.cn>  Fri, 07 Feb 2025 16:32:50 +0800
+
 ukui-control-center (4.10.0.0-ok53) nile; urgency=medium
 
   * BUG:#277741 【显示器】缩放率修改注销后未生效
@@ -1335,7 +1344,7 @@
   * 任务号:无
   * 其他改动:无
 
- -- zhoubin <zhoubin@kylin>  Thu, 20 Oct 2022 09:40:39 +0800
+ -- zhoubin <zhoubin@kylinos.cn>  Thu, 20 Oct 2022 09:40:39 +0800
 
 ukui-control-center (3.22.1.7) v101; urgency=medium
 
diff -Nru ukui-control-center-4.10.0.0/debian/libukcc3.postinst ukui-control-center-4.10.0.0/debian/libukcc3.postinst
--- ukui-control-center-4.10.0.0/debian/libukcc3.postinst	2025-01-01 16:22:05.000000000 +0800
+++ ukui-control-center-4.10.0.0/debian/libukcc3.postinst	2025-02-07 16:32:50.000000000 +0800
@@ -1,5 +1,14 @@
+#!/bin/bash
+
 is_hwe=$(cat /etc/kylin-build  | grep "V10-SP1-hwe")
 file_path="/usr/lib/x86_64-linux-gnu/libukcc.so.1.0.0.old"
 if [ -f /usr/sbin/kysec_get ] && [ -n "${is_hwe}" ] && [ -f $file_path ];then
  kysec_set -n exectl -v verified $file_path
 fi
+
+path="/usr/lib/`/usr/bin/dpkg-architecture -qDEB_TARGET_MULTIARCH`/libukcc.so.1.0.0"
+path1="/usr/lib/`/usr/bin/dpkg-architecture -qDEB_TARGET_MULTIARCH`/libukcc.so.1"
+path2="/usr/lib/`/usr/bin/dpkg-architecture -qDEB_TARGET_MULTIARCH`/libukcc.so.1.0"
+dpkg-divert --package libukcc3  --rename --remove "$path"".old"
+dpkg-divert --package libukcc3  --rename --remove "$path1"".old"
+dpkg-divert --package libukcc3  --rename --remove "$path2"".old"
diff -Nru ukui-control-center-4.10.0.0/debian/patches/0111-128-316417.patch ukui-control-center-4.10.0.0/debian/patches/0111-128-316417.patch
--- ukui-control-center-4.10.0.0/debian/patches/0111-128-316417.patch	1970-01-01 08:00:00.000000000 +0800
+++ ukui-control-center-4.10.0.0/debian/patches/0111-128-316417.patch	2025-02-07 16:32:50.000000000 +0800
@@ -0,0 +1,217 @@
+From: nil <zhoubin@kylinos.cn>
+Date: Fri, 3 Jan 2025 09:43:54 +0000
+Subject: =?utf-8?b?ITEyOCAzMTY0MTcg44CQ5Yy65Z+f6K+t6KiA44CR6L6T5YWl5rOV6K6+?=
+ =?utf-8?b?572u5omT5LiN5byAIE1lcmdlIHB1bGwgcmVxdWVzdCAhMTI4IGZyb20g6IuP5Zej?=
+ =?utf-8?b?5YW4L29wZW5reWxpbi9uaWxlLTExMDc=?=
+
+---
+ plugins/system/about/about.cpp                     |  4 ++
+ plugins/system/display/widget.cpp                  |  1 +
+ plugins/time-language/area/languageframe.cpp       | 50 ++++++++++++++++++++--
+ plugins/time-language/area/languageframe.h         | 21 +++++++++
+ registeredSession/plugins/about/aboutinterface.cpp | 12 ++++--
+ shell/mainwindow.cpp                               |  1 -
+ 6 files changed, 82 insertions(+), 7 deletions(-)
+
+diff --git a/plugins/system/about/about.cpp b/plugins/system/about/about.cpp
+index 6b8afd1..64cfa1f 100644
+--- a/plugins/system/about/about.cpp
++++ b/plugins/system/about/about.cpp
+@@ -45,6 +45,7 @@
+ #include <QSvgRenderer>
+ #include <QSqlQuery>
+ #include <QSqlRecord>
++#include <QElapsedTimer>
+ 
+ const QString kAboutFile = "/usr/share/applications/kylin-user-guide.desktop";
+ const QString kHPFile = "/usr/share/applications/hp-document.desktop";
+@@ -657,7 +658,10 @@ void About::securityControl()
+ 
+ void About::compareTime(QString date)
+ {
++    QElapsedTimer timer;
++    timer.start();
+     QString s1 = mAboutDBus->property("netDate").toString();
++    qDebug() << Q_FUNC_INFO << " ntpTime:" << s1 << timer.elapsed();
+     QStringList list_1;
+     QStringList list_2 = date.split("-");
+     int year;
+diff --git a/plugins/system/display/widget.cpp b/plugins/system/display/widget.cpp
+index 8b331ed..43275c3 100644
+--- a/plugins/system/display/widget.cpp
++++ b/plugins/system/display/widget.cpp
+@@ -1972,6 +1972,7 @@ void Widget::initConnection()
+     });
+ 
+     connect(mTemptWidget, &SliderWidget::valueChanged, this, [=]{
++        qDebug() << Q_FUNC_INFO << "susidian valueChanged" << mTemptWidget->value();
+         if (m_colorSettings) {
+             m_colorSettings->set(NIGHT_TEMPERATURE_KEY, mTemptWidget->value());
+         } else {
+diff --git a/plugins/time-language/area/languageframe.cpp b/plugins/time-language/area/languageframe.cpp
+index 8634356..843cd89 100644
+--- a/plugins/time-language/area/languageframe.cpp
++++ b/plugins/time-language/area/languageframe.cpp
+@@ -1,9 +1,29 @@
++/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
++ *
++ * Copyright (C) 2019 KylinSoft  Co., Ltd.
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
++ *
++ */
+ #include "languageframe.h"
+ #include <QHBoxLayout>
+ #include <QMenu>
+ #include <QProcess>
+ #include <QDebug>
+ #include <QTextCodec>
++#include <QFile>
+ #include "ukcccommon.h"
+ using namespace ukcc;
+ 
+@@ -72,6 +92,12 @@ QToolButton* LanguageFrame::createToolBtn()
+     menu->addAction(edit);
+     menu->addAction(del);
+ 
++    QString inputMethodSetCmd = getInputMethodSetCmd();
++    qDebug() << "input method seting cmd = " << inputMethodSetCmd;
++    if (inputMethodSetCmd.isEmpty()) {
++        edit->setVisible(false);
++    }
++
+     connect(menu, &QMenu::aboutToShow, [=](){
+         if (selectedIconLabel->isVisible()) {
+             del->setEnabled(false);
+@@ -86,9 +112,7 @@ QToolButton* LanguageFrame::createToolBtn()
+     });
+ 
+     connect(edit, &QAction::triggered, this, [=](){
+-        QProcess process;
+-        process.startDetached("fcitx5-config-qt");
+-
++        editInputMethodSlot();
+     });
+ 
+     btn->setIcon(QIcon::fromTheme("view-more-horizontal-symbolic"));
+@@ -96,6 +120,26 @@ QToolButton* LanguageFrame::createToolBtn()
+     return btn;
+ }
+ 
++void LanguageFrame::editInputMethodSlot() {
++    QString cmd = getInputMethodSetCmd();
++    QProcess process;
++    process.startDetached(cmd);
++}
++
++QString LanguageFrame::getInputMethodSetCmd() {
++    QFile inputSetCmd("/usr/bin/fcitx5-config-qt");
++    if (inputSetCmd.exists()) {
++        return "/usr/bin/fcitx5-config-qt";
++    }
++
++    QFile inputSetCmd1("/usr/bin/fcitx-config-gtk3");
++    if (inputSetCmd1.exists()) {
++        return "/usr/bin/fcitx-config-gtk3";
++    }
++
++    return "";
++}
++
+ QString LanguageFrame::getShowName()
+ {
+     return this->nameLabel->text();
+diff --git a/plugins/time-language/area/languageframe.h b/plugins/time-language/area/languageframe.h
+index ea7551d..a0a84b8 100644
+--- a/plugins/time-language/area/languageframe.h
++++ b/plugins/time-language/area/languageframe.h
+@@ -1,3 +1,22 @@
++/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
++ *
++ * Copyright (C) 2019 KylinSoft  Co., Ltd.
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
++ *
++ */
+ #ifndef LANGUAGEFRAME_H
+ #define LANGUAGEFRAME_H
+ 
+@@ -21,6 +40,8 @@ public:
+ 
+ private:
+     void mousePressEvent(QMouseEvent *e);
++    void editInputMethodSlot();
++    QString getInputMethodSetCmd();
+ 
+ private:
+     QLabel *nameLabel         = nullptr;
+diff --git a/registeredSession/plugins/about/aboutinterface.cpp b/registeredSession/plugins/about/aboutinterface.cpp
+index a7d9f52..9a24c5e 100644
+--- a/registeredSession/plugins/about/aboutinterface.cpp
++++ b/registeredSession/plugins/about/aboutinterface.cpp
+@@ -294,12 +294,18 @@ QString AboutInterface::getUpgradeDate()
+ 
+ QString AboutInterface::getNtpTime()
+ {
++    int count = 0;
+     for (QString host : mNtphostNameList) {
+         ipList.clear();
+         ntpGethostbyname(host.toLatin1().data());
+         for (QString ip : ipList) {
+-            char *host = ip.toLatin1().data();
+-            char *result = ntpdate(host);
++            ++count;
++            qDebug() << Q_FUNC_INFO << host << "---->" << ip << ":" << count;
++            if (count >= 5) {
++                return "";
++            }
++            char *mIp = ip.toLatin1().data();
++            char *result = ntpdate(mIp);
+             if (result != NULL) {
+                 return QString(result);
+             }
+@@ -401,7 +407,7 @@ char *AboutInterface::ntpdate(char *hostname)
+     // 设置超时
+     struct timeval timeout;
+     timeout.tv_sec = 0;
+-    timeout.tv_usec = 300000;//微秒
++    timeout.tv_usec = 280000;//微秒
+     if (setsockopt(s, SOL_SOCKET, SO_RCVTIMEO_NEW, &timeout, sizeof(timeout)) == -1) {
+         perror("setsockopt failed:");
+         return NULL;
+diff --git a/shell/mainwindow.cpp b/shell/mainwindow.cpp
+index 8579bc5..aeebab3 100644
+--- a/shell/mainwindow.cpp
++++ b/shell/mainwindow.cpp
+@@ -587,7 +587,6 @@ void MainWindow::initUkccAbout() {
+     connect(ukccExit, SIGNAL(triggered()), this, SLOT(close()));
+ 
+     connect(ukccAbout, &QAction::triggered, this, [=] {
+-        kdk::WindowManager::setSkipTaskBar(windowHandle(), true);
+         KAboutDialog *ukcc = new KAboutDialog(this);
+         ukcc->setAppIcon(QIcon::fromTheme("ukui-control-center"));
+         ukcc->setAppName(tr("Settings"));
diff -Nru ukui-control-center-4.10.0.0/debian/patches/0112-fix-theme.patch ukui-control-center-4.10.0.0/debian/patches/0112-fix-theme.patch
--- ukui-control-center-4.10.0.0/debian/patches/0112-fix-theme.patch	1970-01-01 08:00:00.000000000 +0800
+++ ukui-control-center-4.10.0.0/debian/patches/0112-fix-theme.patch	2025-02-07 16:32:50.000000000 +0800
@@ -0,0 +1,34 @@
+From: hesisheng <hesisheng@kylin.com>
+Date: Sat, 4 Jan 2025 12:25:35 +0800
+Subject: fix: theme
+MIME-Version: 1.0
+Content-Type: text/plain; charset="utf-8"
+Content-Transfer-Encoding: 8bit
+
+Description: 289673 拖动透明度滑动条不流畅,存在延迟
+
+Log: 289673 拖动透明度滑动条不流畅,存在延迟
+Signed-off-by: zhoubin <zhoubin@kylinos.cn>
+---
+ plugins/personalized/theme/theme.cpp | 7 +++++--
+ 1 file changed, 5 insertions(+), 2 deletions(-)
+
+diff --git a/plugins/personalized/theme/theme.cpp b/plugins/personalized/theme/theme.cpp
+index 7c2ecfe..6fa7023 100644
+--- a/plugins/personalized/theme/theme.cpp
++++ b/plugins/personalized/theme/theme.cpp
+@@ -748,9 +748,12 @@ void Theme::initConnection()
+ 
+     connect(mTranWidget->slider(), &KSlider::valueChanged, this, [=](int value) {
+         changeTranpancySlot(value);
+-        revokeGlobalThemeSlot("getTransparencyBlur", QString::number(value, 10));
++    });
++
++    connect(mTranWidget->slider(), &KSlider::sliderReleased, this, [=]() {
++        revokeGlobalThemeSlot("getTransparencyBlur", QString::number(mTranWidget->slider()->value(), 10));
+         revokeGlobalThemeSlot("getSupportTransparency", "true");
+-        UkccCommon::buriedSettings(name(), "set transparency", QString("select"), QString::number(value));
++        UkccCommon::buriedSettings(name(), "set transparency", QString("select"), QString::number(mTranWidget->slider()->value()));
+     });
+ 
+     connect(mCornerWidget, &ComboxWidget::currentIndexChanged, this, [=](int index) {
diff -Nru ukui-control-center-4.10.0.0/debian/patches/0113-fix-theme.patch ukui-control-center-4.10.0.0/debian/patches/0113-fix-theme.patch
--- ukui-control-center-4.10.0.0/debian/patches/0113-fix-theme.patch	1970-01-01 08:00:00.000000000 +0800
+++ ukui-control-center-4.10.0.0/debian/patches/0113-fix-theme.patch	2025-02-07 16:32:50.000000000 +0800
@@ -0,0 +1,33 @@
+From: zhoubin <zhoubin@kylinos.cn>
+Date: Sat, 4 Jan 2025 16:57:28 +0800
+Subject: fix: theme
+MIME-Version: 1.0
+Content-Type: text/plain; charset="utf-8"
+Content-Transfer-Encoding: 8bit
+
+    Description: 289673 拖动透明度滑动条不流畅,存在延迟
+
+    Log: 289673 拖动透明度滑动条不流畅,存在延迟
+---
+ plugins/personalized/theme/theme.cpp | 8 +++++---
+ 1 file changed, 5 insertions(+), 3 deletions(-)
+
+diff --git a/plugins/personalized/theme/theme.cpp b/plugins/personalized/theme/theme.cpp
+index 6fa7023..31dcc63 100644
+--- a/plugins/personalized/theme/theme.cpp
++++ b/plugins/personalized/theme/theme.cpp
+@@ -1363,9 +1363,11 @@ void Theme::changeEffectBtnSlot(bool checked)
+ 
+ void Theme::changeTranpancySlot(int value)
+ {
+-    personliseGsettings->set(PERSONALSIE_TRAN_KEY,(static_cast<int>(value) / 100.0));
+-    qtSettings->set(THEME_TRAN_KEY, value);
+-    qtSettings->set(PEONY_TRAN_KEY, value);
++    if (value % 5 == 0) {
++        personliseGsettings->set(PERSONALSIE_TRAN_KEY,(static_cast<int>(value) / 100.0));
++        qtSettings->set(THEME_TRAN_KEY, value);
++        qtSettings->set(PEONY_TRAN_KEY, value);
++    }
+ }
+ 
+ void Theme::changeTranpancySliderSlot(int value)
diff -Nru ukui-control-center-4.10.0.0/debian/patches/0114-127-bug.patch ukui-control-center-4.10.0.0/debian/patches/0114-127-bug.patch
--- ukui-control-center-4.10.0.0/debian/patches/0114-127-bug.patch	1970-01-01 08:00:00.000000000 +0800
+++ ukui-control-center-4.10.0.0/debian/patches/0114-127-bug.patch	2025-02-07 16:32:50.000000000 +0800
@@ -0,0 +1,161 @@
+From: nil <zhoubin@kylinos.cn>
+Date: Tue, 7 Jan 2025 03:05:40 +0000
+Subject: =?utf-8?b?ITEyNyDkv67lpI1idWcgTWVyZ2UgcHVsbCByZXF1ZXN0ICExMjcgZnJv?=
+ =?utf-8?b?bSDkvZXmgJ3og5wvbmlsZQ==?=
+
+---
+ plugins/account/userinfo/changeuserlogo.cpp     | 2 ++
+ plugins/account/userinfo/changeusernickname.cpp | 2 ++
+ plugins/account/userinfo/changeuserpwd.cpp      | 2 ++
+ plugins/account/userinfo/creategroupdialog.cpp  | 2 ++
+ plugins/account/userinfo/createusernew.cpp      | 2 ++
+ plugins/account/userinfo/userinfo.cpp           | 2 --
+ plugins/devices/keyboard/keyboardmain.cpp       | 2 +-
+ plugins/devices/keyboard/keyboardui.cpp         | 6 ++++++
+ plugins/devices/keyboard/keyboardui.h           | 3 ++-
+ 9 files changed, 19 insertions(+), 4 deletions(-)
+
+diff --git a/plugins/account/userinfo/changeuserlogo.cpp b/plugins/account/userinfo/changeuserlogo.cpp
+index 1982be1..85d09b5 100644
+--- a/plugins/account/userinfo/changeuserlogo.cpp
++++ b/plugins/account/userinfo/changeuserlogo.cpp
+@@ -157,9 +157,11 @@ void ChangeUserLogo::initUI()
+     culCancelBtn = new QPushButton;
+     culCancelBtn->setText(tr("Cancel"));
+     culCancelBtn->setFocusPolicy(Qt::NoFocus);
++    culCancelBtn->setProperty("useButtonPalette", true);
+     culConfirmBtn = new QPushButton;
+     culConfirmBtn->setText(tr("Confirm"));
+     culConfirmBtn->setFocusPolicy(Qt::NoFocus);
++    culConfirmBtn->setProperty("isImportant", true);
+ 
+     culBottomBtnsHorLayout = new QHBoxLayout;
+     culBottomBtnsHorLayout->setSpacing(16);
+diff --git a/plugins/account/userinfo/changeusernickname.cpp b/plugins/account/userinfo/changeusernickname.cpp
+index d7d401a..6e8a97d 100644
+--- a/plugins/account/userinfo/changeusernickname.cpp
++++ b/plugins/account/userinfo/changeusernickname.cpp
+@@ -111,9 +111,11 @@ void ChangeUserNickname::initUI(){
+     cancelBtn = new QPushButton();
+     cancelBtn->setMinimumWidth(96);
+     cancelBtn->setText(tr("Cancel"));
++    cancelBtn->setProperty("useButtonPalette", true);
+     confirmBtn = new QPushButton();
+     confirmBtn->setMinimumWidth(96);
+     confirmBtn->setText(tr("Confirm"));
++    confirmBtn->setProperty("isImportant", true);
+ 
+     bottomBtnsHorLayout = new QHBoxLayout;
+     bottomBtnsHorLayout->setSpacing(16);
+diff --git a/plugins/account/userinfo/changeuserpwd.cpp b/plugins/account/userinfo/changeuserpwd.cpp
+index 2c4b97b..f56662e 100644
+--- a/plugins/account/userinfo/changeuserpwd.cpp
++++ b/plugins/account/userinfo/changeuserpwd.cpp
+@@ -215,10 +215,12 @@ void ChangeUserPwd::initUI(){
+     cancelBtn->setMinimumWidth(96);
+     cancelBtn->setText(tr("Cancel"));
+     cancelBtn->setFocusPolicy(Qt::FocusPolicy::NoFocus);
++    cancelBtn->setProperty("useButtonPalette", true);
+     confirmBtn = new QPushButton();
+     confirmBtn->setMinimumWidth(96);
+     confirmBtn->setText(tr("Confirm"));
+     confirmBtn->setFocusPolicy(Qt::FocusPolicy::NoFocus);
++    confirmBtn->setProperty("isImportant", true);
+ 
+     bottomBtnsHorLayout = new QHBoxLayout;
+     bottomBtnsHorLayout->setSpacing(16);
+diff --git a/plugins/account/userinfo/creategroupdialog.cpp b/plugins/account/userinfo/creategroupdialog.cpp
+index bf896fd..6586c57 100644
+--- a/plugins/account/userinfo/creategroupdialog.cpp
++++ b/plugins/account/userinfo/creategroupdialog.cpp
+@@ -89,8 +89,10 @@ void CreateGroupDialog::initUI()
+     mCancelBtn = new QPushButton(tr("Cancel"), this);
+     mCancelBtn->setFixedSize(96, 36);
+     mCancelBtn->setFocusPolicy(Qt::FocusPolicy::NoFocus);
++    mCancelBtn->setProperty("useButtonPalette", true);
+     mConfirmBtn = new QPushButton(tr("Confirm"), this);
+     mConfirmBtn->setMinimumSize(96, 36);
++    mConfirmBtn->setProperty("isImportant", true);
+ 
+     mConfirmHLaout = new QHBoxLayout(this);
+     mConfirmHLaout->setContentsMargins(0,0,0,0);
+diff --git a/plugins/account/userinfo/createusernew.cpp b/plugins/account/userinfo/createusernew.cpp
+index 4df7fdd..dff09ca 100644
+--- a/plugins/account/userinfo/createusernew.cpp
++++ b/plugins/account/userinfo/createusernew.cpp
+@@ -274,9 +274,11 @@ void CreateUserNew::initUI(){
+     cancelBtn = new QPushButton;
+     cancelBtn->setFocusPolicy(Qt::FocusPolicy::NoFocus);
+     cancelBtn->setText(tr("Cancel"));
++    cancelBtn->setProperty("useButtonPalette", true);
+     confirmBtn = new QPushButton;
+     confirmBtn->setFocusPolicy(Qt::FocusPolicy::NoFocus);
+     confirmBtn->setText(tr("Confirm"));
++    confirmBtn->setProperty("isImportant", true);
+ 
+     bottomHorLayout = new QHBoxLayout;
+     bottomHorLayout->setSpacing(16);
+diff --git a/plugins/account/userinfo/userinfo.cpp b/plugins/account/userinfo/userinfo.cpp
+index b568abc..10ff4c3 100644
+--- a/plugins/account/userinfo/userinfo.cpp
++++ b/plugins/account/userinfo/userinfo.cpp
+@@ -524,8 +524,6 @@ void UserInfo::showCreateUserNewDialog(){
+     QMap<QString, UserInfomation>::iterator it = allUserInfoMap.begin();
+     for (; it != allUserInfoMap.end(); it++){
+         UserInfomation user = it.value();
+-
+-        usersStringList.append(user.username);
+         usersStringList.append(user.realname);
+     }
+ 
+diff --git a/plugins/devices/keyboard/keyboardmain.cpp b/plugins/devices/keyboard/keyboardmain.cpp
+index 08888f0..a3db782 100644
+--- a/plugins/devices/keyboard/keyboardmain.cpp
++++ b/plugins/devices/keyboard/keyboardmain.cpp
+@@ -185,7 +185,7 @@ void KeyboardMain::initInputMethodSet()
+ {
+     qDebug() << "input method seting cmd = " << getInputMethodSetCmd();
+     if (getInputMethodSetCmd().isEmpty()) {
+-        keyBoardWidget->inputMethodPushButton()->setVisible(false);
++        keyBoardWidget->setInputMethodVisible(false);
+     }
+ }
+ 
+diff --git a/plugins/devices/keyboard/keyboardui.cpp b/plugins/devices/keyboard/keyboardui.cpp
+index 81d80f2..b40def6 100644
+--- a/plugins/devices/keyboard/keyboardui.cpp
++++ b/plugins/devices/keyboard/keyboardui.cpp
+@@ -16,6 +16,12 @@ KeyboardUi::~KeyboardUi()
+ 
+ }
+ 
++void KeyboardUi::setInputMethodVisible(bool isVisible)
++{
++    mInputTitleLabel->setVisible(isVisible);
++    mInputMethodSetFrame->setVisible(isVisible);
++}
++
+ void KeyboardUi::initUI()
+ {
+     mKeyboardFrame = new SettingGroup(this);
+diff --git a/plugins/devices/keyboard/keyboardui.h b/plugins/devices/keyboard/keyboardui.h
+index fec0d13..a560105 100644
+--- a/plugins/devices/keyboard/keyboardui.h
++++ b/plugins/devices/keyboard/keyboardui.h
+@@ -90,6 +90,8 @@ public:
+         return mSoundEfectsFrame;
+     }
+ 
++    void setInputMethodVisible(bool isVisible);
++
+ private:
+     QVBoxLayout *mVlayout = nullptr;
+ 
+@@ -128,7 +130,6 @@ private:
+     void setTextSizeFrame();
+     void setAnimationFrame();
+     void setSoundEfectsFrame();
+-
+ };
+ 
+ #endif // KEYBOARDUI_H
diff -Nru ukui-control-center-4.10.0.0/debian/patches/0115-131-290807.patch ukui-control-center-4.10.0.0/debian/patches/0115-131-290807.patch
--- ukui-control-center-4.10.0.0/debian/patches/0115-131-290807.patch	1970-01-01 08:00:00.000000000 +0800
+++ ukui-control-center-4.10.0.0/debian/patches/0115-131-290807.patch	2025-02-07 16:32:50.000000000 +0800
@@ -0,0 +1,869 @@
+From: nil <zhoubin@kylinos.cn>
+Date: Tue, 7 Jan 2025 04:21:52 +0000
+Subject: =?utf-8?b?ITEzMSAyOTA4MDcg44CQ5pi+56S65Zmo44CR5o6l5YWl56ys5LqM5Liq?=
+ =?utf-8?b?5bGP5bmV77yM5o6n5Yi26Z2i5p2/6Zeq6YCAIE1lcmdlIHB1bGwgcmVxdWVzdCAh?=
+ =?utf-8?b?MTMxIGZyb20g6IuP5Zej5YW4L29wZW5reWxpbi9uaWxlLTExMDc=?=
+
+---
+ plugins/system/display/controlpanel.cpp            |   9 +-
+ plugins/system/display/controlpanel.h              |   1 +
+ registeredSession/area/areainterface.cpp           | 268 -------------------
+ registeredSession/area/areainterface.h             | 111 --------
+ registeredSession/main.cpp                         |   2 -
+ .../plugins/notice/noticeinterface.cpp             | 288 ---------------------
+ registeredSession/plugins/notice/noticeinterface.h |  78 ------
+ registeredSession/registeredSession.pro            |   2 -
+ 8 files changed, 9 insertions(+), 750 deletions(-)
+ delete mode 100644 registeredSession/area/areainterface.cpp
+ delete mode 100644 registeredSession/area/areainterface.h
+ delete mode 100644 registeredSession/plugins/notice/noticeinterface.cpp
+ delete mode 100644 registeredSession/plugins/notice/noticeinterface.h
+
+diff --git a/plugins/system/display/controlpanel.cpp b/plugins/system/display/controlpanel.cpp
+index f05af12..4b78408 100644
+--- a/plugins/system/display/controlpanel.cpp
++++ b/plugins/system/display/controlpanel.cpp
+@@ -41,7 +41,7 @@ void ControlPanel::setConfig(const KScreen::ConfigPtr &config)
+     mConfig = config;
+     connect(mConfig.data(), &KScreen::Config::outputAdded,
+             this, [=](const KScreen::OutputPtr &output) {
+-        addOutput(output, false);
++        addOutputSlot(output);
+     });
+     connect(mConfig.data(), &KScreen::Config::outputRemoved,
+             this, &ControlPanel::removeOutput);
+@@ -51,6 +51,13 @@ void ControlPanel::setConfig(const KScreen::ConfigPtr &config)
+     }
+ }
+ 
++void ControlPanel::addOutputSlot(const KScreen::OutputPtr &output) {
++    qDebug() << Q_FUNC_INFO << "wait 100ms for addOutput";
++    QTimer::singleShot(100, this, [=]() {
++        addOutput(output, false);
++    });
++}
++
+ void ControlPanel::addOutput(const KScreen::OutputPtr &output, bool connectChanged)
+ {
+     if (!connectChanged) {
+diff --git a/plugins/system/display/controlpanel.h b/plugins/system/display/controlpanel.h
+index 345c131..6386531 100644
+--- a/plugins/system/display/controlpanel.h
++++ b/plugins/system/display/controlpanel.h
+@@ -33,6 +33,7 @@ public:
+ 
+ private:
+     void isWayland();
++    void addOutputSlot(const KScreen::OutputPtr &output);
+ 
+ public Q_SLOTS:
+     void activateOutput(const KScreen::OutputPtr &output);
+diff --git a/registeredSession/area/areainterface.cpp b/registeredSession/area/areainterface.cpp
+deleted file mode 100644
+index 20518d2..0000000
+--- a/registeredSession/area/areainterface.cpp
++++ /dev/null
+@@ -1,268 +0,0 @@
+-#include "areainterface.h"
+-#include <unistd.h>
+-#include <QDBusConnection>
+-
+-AreaInterface::AreaInterface()
+-{
+-    ukccPanelGsettings = UniversalInterface::self()->ukccPanelGsettings();
+-    accountInterface   = UniversalInterface::self()->accountUserDbus();
+-    fcitxInterface     = UniversalInterface::self()->fcitxInputMethodDbus();
+-    styleGsettings     = UniversalInterface::self()->ukuiStyleGsettings();
+-    connect(ukccPanelGsettings, &QGSettings::changed, this, [=](QString key) {
+-        if (key == CALENDAR_KEY) {
+-            mCalendar.clear();
+-            getCalendar();
+-            Q_EMIT changed("calendar");
+-        } else if (key == FIRST_DAY_KEY) {
+-            mFirstDay.clear();
+-            getFirstDay();
+-            Q_EMIT changed("firstDay");
+-        } else if (key == DATE_FORMATE_KEY) {
+-            mDateFormat.clear();
+-            getDateFormat();
+-            Q_EMIT changed("dateFormat");
+-        } else if (key == TIME_FORMAT_KEY) {
+-            mTimeFormat.clear();
+-            getTimeFormat();
+-            Q_EMIT changed("timeFormat");
+-        } else if (key == SHOW_LANGUAGE_KEY) {
+-            mShowLanguageList.clear();
+-            getShowLanguageList();
+-            Q_EMIT changed("showLanguageList");
+-        }
+-    });
+-
+-    connect(styleGsettings, &QGSettings::changed, this, [=](QString key) {
+-        if (key == "iconThemeName") {
+-            Q_EMIT changed("iconThemeName");
+-        }
+-    });
+-}
+-
+-AreaInterface::~AreaInterface()
+-{
+-
+-}
+-
+-const QString AreaInterface::gsettingGet(const QString &key) const
+-{
+-    if (ukccPanelGsettings->keys().contains(key)) {
+-        return ukccPanelGsettings->get(key).toString();
+-    } else {
+-        return "";
+-    }
+-}
+-
+-void AreaInterface::gsettingSet(const QString &key, const QString &value)
+-{
+-    if (ukccPanelGsettings->keys().contains(key)) {
+-        ukccPanelGsettings->set(key, value);
+-    }
+-}
+-
+-const QStringList AreaInterface::getFormatCountryList()
+-{
+-    if (mFormatCountryList.isEmpty()) {
+-        mFormatCountryList.append(QString("en_US.UTF-8"));
+-        mFormatCountryList.append(QString("zh_CN.UTF-8"));
+-        mFormatCountryList.append(QString("bo_CN.UTF-8"));
+-    }
+-    return mFormatCountryList;
+-}
+-
+-const QStringList AreaInterface::getCalendarList()
+-{
+-    if (mCalendarList.isEmpty()) {
+-        mCalendarList.append(QString("solarlunar"));
+-        QString locale = QLocale::system().name();
+-        if ("zh_CN" == locale) {
+-            mCalendarList.append(QString("lunar"));
+-        }
+-    }
+-    return mCalendarList;
+-}
+-
+-const QStringList AreaInterface::getFirstDayList()
+-{
+-    if (mFirstDayList.isEmpty()) {
+-        mFirstDayList.append("monday");
+-        mFirstDayList.append("sunday");
+-    }
+-    return mFirstDayList;
+-}
+-
+-const QStringList AreaInterface::getDateFormatList()
+-{
+-    if (mDateFormatList.isEmpty()) {
+-        mDateFormatList.append("cn");
+-        mDateFormatList.append("en");
+-    }
+-    return mDateFormatList;
+-}
+-
+-const QStringList AreaInterface::getTimeFormatList()
+-{
+-    if (mtimeFormatList.isEmpty()) {
+-        mtimeFormatList.append("12");
+-        mtimeFormatList.append("24");
+-    }
+-    return mtimeFormatList;
+-}
+-
+-const QStringList AreaInterface::getShowLanguageList()
+-{
+-    if (mShowLanguageList.isEmpty()) {
+-        if (ukccPanelGsettings->keys().contains(SHOW_LANGUAGE_KEY)) {
+-            mShowLanguageList = ukccPanelGsettings->get(SHOW_LANGUAGE_KEY).toStringList();
+-        } else {
+-            qCritical() << "get SHOW_LANGUAGE_KEY error.";
+-        }
+-    }
+-    return mShowLanguageList;
+-}
+-
+-const QStringList AreaInterface::getLanguageList()
+-{
+-    if (mLanguageList.isEmpty()) {
+-        mLanguageList.append("zh_CN");
+-        mLanguageList.append("en");
+-        mLanguageList.append("bo_CN");
+-    }
+-    return mLanguageList;
+-}
+-
+-const QString AreaInterface::getFormatCountry()
+-{
+-    if (mFormatCountry.isEmpty()) {
+-        mFormatCountry = accountInterface->property("FormatsLocale").toString();
+-    }
+-    return mFormatCountry;
+-}
+-
+-const QString AreaInterface::getCalendar()
+-{
+-    if (mCalendar.isEmpty()) {
+-        mCalendar = gsettingGet(CALENDAR_KEY);
+-    }
+-    return mCalendar;
+-}
+-
+-const QString AreaInterface::getFirstDay()
+-{
+-    if (mFirstDay.isEmpty()) {
+-        mFirstDay = gsettingGet(FIRST_DAY_KEY);
+-    }
+-    return mFirstDay;
+-}
+-
+-const QString AreaInterface::getDateFormat()
+-{
+-    if (mDateFormat.isEmpty()) {
+-        mDateFormat = gsettingGet(DATE_FORMATE_KEY);
+-    }
+-    return mDateFormat;
+-}
+-
+-const QString AreaInterface::getTimeFormat()
+-{
+-    if (mTimeFormat.isEmpty()) {
+-        mTimeFormat = gsettingGet(TIME_FORMAT_KEY);
+-    }
+-    return mTimeFormat;
+-}
+-
+-const QString AreaInterface::getLanguage()
+-{
+-    mLanguage = accountInterface->property("Language").toString();
+-    return mLanguage;
+-}
+-
+-void AreaInterface::setFormatCountry(const QString &formatCountry)
+-{
+-    mFormatCountry = formatCountry;
+-    accountInterface->call("SetFormatsLocale", formatCountry);
+-    Q_EMIT changed("formatCountry");
+-}
+-
+-void AreaInterface::setCalendar(const QString &calendar)
+-{
+-    gsettingSet(CALENDAR_KEY, calendar);
+-}
+-
+-void AreaInterface::setFirstDay(const QString &firstDay)
+-{
+-    gsettingSet(FIRST_DAY_KEY, firstDay);
+-}
+-
+-void AreaInterface::setDateFormat(const QString &dateFormat)
+-{
+-    gsettingSet(DATE_FORMATE_KEY, dateFormat);
+-}
+-
+-void AreaInterface::setTimeFormat(const QString &timeFormat)
+-{
+-    gsettingSet(TIME_FORMAT_KEY, timeFormat);
+-}
+-
+-void AreaInterface::setShowLanguageList(const QStringList &languageList)
+-{
+-    if (ukccPanelGsettings->keys().contains(SHOW_LANGUAGE_KEY)) {
+-        ukccPanelGsettings->set(SHOW_LANGUAGE_KEY, languageList);
+-    } else {
+-        qCritical() << "set SHOW_LANGUAGE_KEY error:" << languageList;
+-    }
+-}
+-
+-void AreaInterface::setLanguage(const QString &languageCode)
+-{
+-    accountInterface->call("SetLanguage", languageCode);
+-    Q_EMIT changed("language");
+-}
+-
+-void AreaInterface::reloadInputMethodConfig()
+-{
+-    fcitxInterface->call("ReloadConfig");
+-}
+-
+-void AreaInterface::changeInputMethod(const QString &inputMethod, const bool &add)
+-{
+-    QString fileTextString;
+-    QFile configFile(FCITX_CONFIG_FILE);
+-    if (configFile.open(QIODevice::ReadWrite | QIODevice::Text)) {
+-        //把文件所有信息读出来
+-        QTextStream stream(&configFile);
+-        fileTextString = stream.readAll();
+-
+-        if (!fileTextString.contains(inputMethod)) {
+-            return ;
+-        }
+-        QString addString    = inputMethod  + ":True";
+-        QString removeString =  inputMethod + ":False";
+-        if (add) {
+-            fileTextString.replace(removeString, addString);
+-        } else {
+-            fileTextString.replace(addString, removeString);
+-        }
+-        stream << fileTextString;
+-        configFile.close();
+-        reloadInputMethodConfig();
+-    }
+-}
+-
+-bool AreaInterface::isAddedInputMethod(const QString &inputMethod)
+-{
+-    QString fileTextString;
+-    QFile mFile(FCITX_CONFIG_FILE);
+-    if (mFile.open(QIODevice::ReadOnly | QIODevice::Text)) {
+-        QTextStream stream(&mFile);
+-        fileTextString = stream.readAll();
+-        QString string = inputMethod  + ":True";
+-        if (fileTextString.contains(string)) {
+-           return true;
+-        } else {
+-            return false;
+-        }
+-    }
+-    qCritical()<<"open "<<FCITX_CONFIG_FILE<<" error.";
+-    return false;
+-}
+diff --git a/registeredSession/area/areainterface.h b/registeredSession/area/areainterface.h
+deleted file mode 100644
+index e586bea..0000000
+--- a/registeredSession/area/areainterface.h
++++ /dev/null
+@@ -1,111 +0,0 @@
+-#ifndef AREAINTERFACE_H
+-#define AREAINTERFACE_H
+-
+-#include <QObject>
+-#include <QtDBus>
+-#include "../universalinterface.h"
+-
+-class AreaInterface : public QObject
+-{
+-    Q_OBJECT
+-    Q_CLASSINFO("D-Bus Interface", "org.ukui.ukcc.session.Area")
+-    Q_PROPERTY(QStringList formatCountryList READ getFormatCountryList)
+-    Q_PROPERTY(QStringList calendarList READ getCalendarList)
+-    Q_PROPERTY(QStringList firstDayList READ getFirstDayList)
+-    Q_PROPERTY(QStringList dateFormatList READ getDateFormatList)
+-    Q_PROPERTY(QStringList timeFormatList READ getTimeFormatList)
+-    Q_PROPERTY(QStringList languageList READ getLanguageList)
+-    Q_PROPERTY(QStringList showLanguageList READ getShowLanguageList)
+-    Q_PROPERTY(QString formatCountry READ getFormatCountry)
+-    Q_PROPERTY(QString calendar READ getCalendar)
+-    Q_PROPERTY(QString firstDay READ getFirstDay)
+-    Q_PROPERTY(QString dateFormat READ getDateFormat)
+-    Q_PROPERTY(QString timeFormat READ getTimeFormat)
+-    Q_PROPERTY(QString language READ getLanguage)
+-
+-public:
+-     AreaInterface();
+-    ~AreaInterface();
+-
+-protected:
+-    // 对属性的访问函数
+-    const QStringList getFormatCountryList();
+-    const QStringList getCalendarList();
+-    const QStringList getFirstDayList();
+-    const QStringList getDateFormatList();
+-    const QStringList getTimeFormatList();
+-    const QStringList getLanguageList();
+-    const QStringList getShowLanguageList();
+-    const QString getFormatCountry();
+-    const QString getCalendar();
+-    const QString getFirstDay();
+-    const QString getDateFormat();
+-    const QString getTimeFormat();
+-    const QString getLanguage();
+-
+-public Q_SLOTS:
+-    /**
+-     * @brief 修改输入法
+-     *
+-     * @param inputMethodName 输入法名称
+-     * @param add 添加/移除
+-     */
+-    void changeInputMethod(const QString &inputMethod, const bool &add);
+-
+-    /**
+-     * @brief 查询输入法是否已经添加
+-     *
+-     * @param inputMethodName 输入法名称
+-     * @return bool 返回输入法是否已经添加
+-     */
+-    bool isAddedInputMethod(const QString &inputMethod);
+-
+-    // 对属性的设置函数
+-    void setFormatCountry(const QString &formatCountry);
+-    void setCalendar(const QString &calendar);
+-    void setFirstDay(const QString &firstDay);
+-    void setDateFormat(const QString &dateFormat);
+-    void setTimeFormat(const QString &timeFormat);
+-    void setShowLanguageList(const QStringList &languageList);
+-    void setLanguage(const QString &languageCode);
+-
+-Q_SIGNALS:
+-    void changed(QString keyName);
+-
+-private:
+-    void reloadInputMethodConfig();
+-
+-    // 设置和获取gsetting的string类型的键值
+-    const QString gsettingGet(const QString &key) const;
+-    void gsettingSet(const QString &key, const QString &value);
+-
+-private:
+-    const QString SHOW_LANGUAGE_KEY = QString("showlanguage");
+-    const QString FCITX_CONFIG_FILE = QDir::homePath() + "/.config/fcitx/profile";
+-    const QString CALENDAR_KEY      = QString("calendar");
+-    const QString FIRST_DAY_KEY     = QString("firstday");
+-    const QString DATE_FORMATE_KEY  = QString("date");
+-    const QString TIME_FORMAT_KEY   = QString("hoursystem");
+-
+-private:
+-    QGSettings     *ukccPanelGsettings = nullptr;
+-    QDBusInterface *accountInterface   = nullptr;
+-    QDBusInterface *fcitxInterface     = nullptr;
+-    QGSettings     *styleGsettings     = nullptr;
+-private:
+-    QStringList mFormatCountryList = {};
+-    QStringList mCalendarList      = {};
+-    QStringList mFirstDayList      = {};
+-    QStringList mDateFormatList    = {};
+-    QStringList mtimeFormatList    = {};
+-    QStringList mShowLanguageList  = {};
+-    QStringList mLanguageList      = {};
+-    QString     mLanguage          = "";
+-    QString     mFormatCountry     = "";
+-    QString     mCalendar          = "";
+-    QString     mFirstDay          = "";
+-    QString     mDateFormat        = "";
+-    QString     mTimeFormat        = "";
+-};
+-
+-#endif // AREAINTERFACE_H
+diff --git a/registeredSession/main.cpp b/registeredSession/main.cpp
+index e9a688c..b37e031 100644
+--- a/registeredSession/main.cpp
++++ b/registeredSession/main.cpp
+@@ -12,7 +12,6 @@
+ #include "plugins/area/areainterface.h"
+ #include "plugins/default/defaultinterface.h"
+ #include "plugins/autoboot/autostartinterface.h"
+-#include "plugins/notice/noticeinterface.h"
+ #include "plugins/about/aboutinterface.h"
+ #include "plugins/datetime/datetimeinterface.h"
+ #include "plugins/wallpaper/wallpaperinterface.h"
+@@ -61,7 +60,6 @@ int main(int argc, char *argv[])
+     plugins["/Mouse"] = new MouseInterface;
+     plugins["/Default"] = new DefaultInterface;
+     plugins["/Autoboot"] = new AutoStartInterface;
+-    plugins["/Notice"] = new NoticeInterface;
+     plugins["/About"] = new AboutInterface;
+     plugins["/Wallpaper"] = new WallpaperInterface;
+     plugins["/Screenlock"] = new ScreenlockInterface;
+diff --git a/registeredSession/plugins/notice/noticeinterface.cpp b/registeredSession/plugins/notice/noticeinterface.cpp
+deleted file mode 100644
+index d41e182..0000000
+--- a/registeredSession/plugins/notice/noticeinterface.cpp
++++ /dev/null
+@@ -1,288 +0,0 @@
+-#include "noticeinterface.h"
+-#include "../../universalinterface.h"
+-#include <QDebug>
+-#include <QStandardPaths>
+-#include <QSettings>
+-#include <KApplicationTrader>
+-#include <KService>
+-#include <KSharedConfig>
+-#include <KConfigGroup>
+-#include <QFileInfo>
+-
+-#define NOTICE_SCHEMA           "org.ukui.control-center.notice"
+-#define ENABLE_NOTICE_KEY       "enable-notice"
+-
+-#define NOTICE_ORIGIN_SCHEMA    "org.ukui.control-center.noticeorigin"
+-#define NOTICE_ORIGIN_PATH      "/org/ukui/control-center/noticeorigin/"
+-#define MAX_SHORTCUTS           1000
+-#define MESSAGES_KEY "messages"
+-#define VOICE_KEY  "voice"
+-#define SHOW_SCREENLOCK_KEY "show-on-screenlock"
+-#define SHOW_DETAIL_KEY "show-detail"
+-#define STYLE_KEY "notification-style"
+-
+-#define NOTIFICATION_DEMO_SCHEMA "org.ukui.notification.demo"
+-#define AUTOSTART_KEY "autostartdisturb"
+-#define PROJECTIONSCREEN_KEY "projectionscreendisturb"
+-#define FULLSCREEN_KEY "fullscreendisturb"
+-#define ALARMCLOCK_KEY "alarmclockdisturb"
+-#define TIMESTART_KEY "timestart"
+-#define TIMEEND_KEY "timeend"
+-
+-#define AUTOSTARTDIR      "/etc/xdg/autostart/"
+-
+-NoticeInterface::NoticeInterface()
+-{
+-    mUkccNoticeGsettings = UniversalInterface::self()->ukccNoticeGsettings();
+-    mUkuiNoticeGsettings = UniversalInterface::self()->ukuiNoticeGsettings();
+-    mStyleGsettings = UniversalInterface::self()->ukuiStyleGsettings();
+-
+-    mGsettingMap[ENABLE_NOTICE_KEY] = QString("enableNotice");
+-    mGsettingMap[SHOW_SCREENLOCK_KEY] = QString("showOnScreenlock");
+-    mGsettingMap[SHOW_DETAIL_KEY] = QString("showDetail");
+-    mGsettingMap[STYLE_KEY] = QString("notificationStyle");
+-
+-    mWhiteList.append("kylin-screenshot.desktop");
+-    mWhiteList.append("peony.desktop");
+-    mWhiteList.append("kylin-device-daemon.desktop");
+-    mWhiteList.append("ukui-power-manager.desktop");
+-    mWhiteList.append("kylin-system-update.desktop");
+-    mWhiteList.append("ukui-bluetooth.desktop");
+-
+-    if (mUkccNoticeGsettings)
+-        connect(mUkccNoticeGsettings, &QGSettings::changed, [=](const QString &key){
+-            emit changed(key);
+-        });
+-    if (mUkuiNoticeGsettings)
+-        connect(mUkuiNoticeGsettings, &QGSettings::changed, [=](const QString &key){
+-            emit changed(key);
+-        });
+-    if (mStyleGsettings)
+-        connect(mStyleGsettings, &QGSettings::changed, [=](const QString &key){
+-            emit changed(key);
+-        });
+-
+-
+-
+-}
+-
+-bool NoticeInterface::getAutostartDisturb()
+-{
+-    if (mUkuiNoticeGsettings->keys().contains(AUTOSTART_KEY)) {
+-        return mUkuiNoticeGsettings->get(AUTOSTART_KEY).toBool();
+-    } else {
+-        qCritical() << "ukuiNoticeGsettings not contains the key: " << AUTOSTART_KEY;
+-    }
+-    return false;
+-}
+-
+-bool NoticeInterface::getProjectionsScreenDisturb()
+-{
+-    if (mUkuiNoticeGsettings->keys().contains(PROJECTIONSCREEN_KEY)) {
+-        return mUkuiNoticeGsettings->get(PROJECTIONSCREEN_KEY).toBool();
+-    } else {
+-        qCritical() << "ukuiNoticeGsettings not contains the key: " << PROJECTIONSCREEN_KEY;
+-    }
+-    return false;
+-}
+-
+-bool NoticeInterface::getFullScreenDisturb()
+-{
+-    if (mUkuiNoticeGsettings->keys().contains(FULLSCREEN_KEY)) {
+-        return mUkuiNoticeGsettings->get(FULLSCREEN_KEY).toBool();
+-    } else {
+-        qCritical() << "ukuiNoticeGsettings not contains the key: " << FULLSCREEN_KEY;
+-    }
+-    return false;
+-}
+-
+-bool NoticeInterface::getAlarmClockDisturb()
+-{
+-    if (mUkuiNoticeGsettings->keys().contains(ALARMCLOCK_KEY)) {
+-        return mUkuiNoticeGsettings->get(ALARMCLOCK_KEY).toBool();
+-    } else {
+-        qCritical() << "ukuiNoticeGsettings not contains the key: " << ALARMCLOCK_KEY;
+-    }
+-    return false;
+-}
+-
+-QString NoticeInterface::getTimeStart()
+-{
+-    if (mUkuiNoticeGsettings->keys().contains(TIMESTART_KEY)) {
+-        return mUkuiNoticeGsettings->get(TIMESTART_KEY).toString();
+-    } else {
+-        qCritical() << "ukuiNoticeGsettings not contains the key: " << TIMESTART_KEY;
+-    }
+-    return QString();
+-}
+-
+-QString NoticeInterface::getTimeEnd()
+-{
+-    if (mUkuiNoticeGsettings->keys().contains(TIMEEND_KEY)) {
+-        return mUkuiNoticeGsettings->get(TIMEEND_KEY).toString();
+-    } else {
+-        qCritical() << "ukuiNoticeGsettings not contains the key: " << TIMEEND_KEY;
+-    }
+-    return QString();
+-}
+-
+-bool NoticeInterface::getNoticeEnable()
+-{
+-    if (mUkccNoticeGsettings->keys().contains(mGsettingMap[ENABLE_NOTICE_KEY])) {
+-        return mUkccNoticeGsettings->get(ENABLE_NOTICE_KEY).toBool();
+-    } else {
+-        qCritical() << "mUkccNoticeGsettings not contains the key: " << mUkccNoticeGsettings;
+-    }
+-    return false;
+-}
+-
+-QList <QVariant> NoticeInterface::getNoticeAppList()
+-{
+-    qDBusRegisterMetaType<NoticeApp>();
+-    QList <QVariant> list;
+-    for (QString desktopName : mWhiteList) {
+-        QFileInfo file(AUTOSTARTDIR + desktopName);
+-        if (file.exists()) {
+-            QString mainSection = QStringLiteral("Desktop Entry");
+-            KSharedConfig::Ptr sharedConfig = KSharedConfig::openConfig(AUTOSTARTDIR + desktopName, KConfig::NoGlobals);
+-            KConfigGroup cfg(sharedConfig, mainSection);
+-            QString name = cfg.readEntry("Name");
+-            QString icon = cfg.readEntry("Icon");
+-            QString fileName = desktopName.left(desktopName.indexOf(QLatin1Char('.')));
+-
+-            if (mApplist.contains(name))
+-                continue;
+-            mApplist.append(name);
+-            NoticeApp app;
+-            app.desktop = fileName;
+-            app.name = name;
+-            app.icon = icon;
+-            getAppInfo(app, fileName);
+-            list.append(QVariant::fromValue(app));
+-        }
+-    }
+-
+-    KApplicationTrader::query([=, &list](const KService::Ptr &service) {
+-        if (service->exec().isEmpty() || service->noDisplay())
+-            return false;
+-
+-        QString appname, desktopEntryName, icon;
+-        appname = service->name();
+-        desktopEntryName = service->desktopEntryName();
+-        icon = service->icon();
+-
+-        if (mApplist.contains(appname))
+-            return false;
+-
+-        mApplist.append(appname);
+-        NoticeApp app;
+-        app.desktop = desktopEntryName;
+-        app.name = appname;
+-        app.icon = icon;
+-        getAppInfo(app, desktopEntryName);
+-        list.append(QVariant::fromValue(app));
+-        return true;
+-    });
+-    mApplist.clear();
+-    return list;
+-}
+-
+-void NoticeInterface::getAppInfo(NoticeApp &app, const QString &desktop)
+-{
+-    const QByteArray id(NOTICE_ORIGIN_SCHEMA);
+-    QString path = QString("%1%2%3").arg(NOTICE_ORIGIN_PATH).arg(desktop).arg("/");
+-    QGSettings *settings = new QGSettings(id, path.toUtf8().data(), this);
+-
+-    app.status = settings->get(MESSAGES_KEY).toBool();
+-
+-    app.voice = settings->get(VOICE_KEY).toBool();
+-    app.detail = settings->get(SHOW_DETAIL_KEY).toBool();
+-    app.show = settings->get(SHOW_SCREENLOCK_KEY).toBool();
+-    QString style = settings->get(STYLE_KEY).toString();
+-    app.mode = 0;
+-    if (style == "mutative") {
+-        app.mode = 0;
+-    } else if (style == "always") {
+-        app.mode = 1;
+-    } else if (style == "none") {
+-        app.mode = 2;
+-    }
+-    mNoticeAppsMap[desktop] = settings;
+-}
+-
+-void NoticeInterface::setNoticeDisturb(const QString &key, bool value)
+-{
+-    if (mUkuiNoticeGsettings->keys().contains(key)) {
+-        return mUkuiNoticeGsettings->set(key, value);
+-    } else {
+-        qCritical() << "ukuiNoticeGsettings not contains the key: " << key;
+-    }
+-}
+-
+-void NoticeInterface::setNoticeDisturb(const QString &key, const QString &value)
+-{
+-    if (mUkuiNoticeGsettings->keys().contains(key)) {
+-        return mUkuiNoticeGsettings->set(key, value);
+-    } else {
+-        qCritical() << "ukuiNoticeGsettings not contains the key: " << key;
+-    }
+-}
+-
+-void NoticeInterface::setUkccNotice(const QString &key, bool value)
+-{
+-    if (mUkccNoticeGsettings->keys().contains(mGsettingMap[key]) || mUkccNoticeGsettings->keys().contains(key)) {
+-        return mUkccNoticeGsettings->set(key, value);
+-    } else {
+-        qCritical() << "mUkccNoticeGsettings not contains the key: " << key;
+-    }
+-}
+-
+-void NoticeInterface::setAppInfo(const QString &desktop, const QString &key, bool value)
+-{
+-    auto iter = mNoticeAppsMap.find(desktop);
+-    if (iter != mNoticeAppsMap.end()) {
+-        QGSettings *settings = iter.value();
+-        if (settings)
+-            settings->set(key, value);
+-    }
+-}
+-
+-void NoticeInterface::setAppInfo(const QString &desktop, const QString &key, const QString &value)
+-{
+-    auto iter = mNoticeAppsMap.find(desktop);
+-    if (iter != mNoticeAppsMap.end()) {
+-        QGSettings *settings = iter.value();
+-        if (settings)
+-            settings->set(key, value);
+-    }
+-}
+-
+-const QDBusArgument &operator<<(QDBusArgument &argument, const NoticeApp &app)
+-{
+-    argument.beginStructure();
+-    argument << app.desktop;
+-    argument << app.icon;
+-    argument << app.name;
+-    argument << app.status;
+-    argument << app.voice;
+-    argument << app.detail;
+-    argument << app.show;
+-    argument << app.mode;
+-    argument.endStructure();
+-    return argument;
+-}
+-
+-const QDBusArgument &operator>>(const QDBusArgument &argument, NoticeApp &app)
+-{
+-    argument.beginStructure();
+-    argument >> app.desktop;
+-    argument >> app.icon;
+-    argument >> app.name;
+-    argument >> app.status;
+-    argument >> app.voice;
+-    argument >> app.detail;
+-    argument >> app.show;
+-    argument >> app.mode;
+-    argument.endStructure();
+-    return argument;
+-}
+diff --git a/registeredSession/plugins/notice/noticeinterface.h b/registeredSession/plugins/notice/noticeinterface.h
+deleted file mode 100644
+index ee37bc8..0000000
+--- a/registeredSession/plugins/notice/noticeinterface.h
++++ /dev/null
+@@ -1,78 +0,0 @@
+-#ifndef NOTICEINTERFACE_H
+-#define NOTICEINTERFACE_H
+-
+-#include <QObject>
+-#include <QDBusArgument>
+-#include <QVariant>
+-#include <QDBusMetaType>
+-#include <QGSettings>
+-
+-struct NoticeApp
+-{
+-    QString desktop;
+-    QString name;
+-    QString icon;
+-    bool status;
+-    bool voice;
+-    bool detail;
+-    bool show;
+-    int mode;
+-};
+-const QDBusArgument &operator<<(QDBusArgument &argument, const NoticeApp &app);
+-const QDBusArgument &operator>>(const QDBusArgument &argument, NoticeApp &app);
+-Q_DECLARE_METATYPE(NoticeApp)
+-
+-
+-class NoticeInterface : public QObject
+-{
+-    Q_OBJECT
+-    Q_CLASSINFO("D-Bus Interface", "org.ukui.ukcc.session.Notice")
+-    Q_PROPERTY(bool isAutostartDisturb READ getAutostartDisturb)
+-    Q_PROPERTY(bool isProjectionScreenDisturb READ getProjectionsScreenDisturb)
+-    Q_PROPERTY(bool isFullScreenDisturb READ getFullScreenDisturb)
+-    Q_PROPERTY(bool isAlarmClockDisturb READ getAlarmClockDisturb)
+-    Q_PROPERTY(QString timeStart READ getTimeStart)
+-    Q_PROPERTY(QString timeEnd READ getTimeEnd)
+-    Q_PROPERTY(bool isEnable READ getNoticeEnable)
+-    Q_PROPERTY(QList <QVariant> noticeAppList READ getNoticeAppList)
+-//    Q_PROPERTY(int cursorSpeed READ getCursorSpeed)
+-public:
+-    NoticeInterface();
+-
+-protected:
+-    bool getAutostartDisturb();
+-    bool getProjectionsScreenDisturb();
+-    bool getFullScreenDisturb();
+-    bool getAlarmClockDisturb();
+-    QString getTimeStart();
+-    QString getTimeEnd();
+-
+-    bool getNoticeEnable();
+-    QList <QVariant> getNoticeAppList();
+-
+-private:
+-    void getAppInfo(NoticeApp &app,const QString &desktop);
+-
+-public Q_SLOTS:
+-    void setNoticeDisturb(const QString &key, bool value);
+-    void setNoticeDisturb(const QString &key, const QString &value);
+-    void setUkccNotice(const QString &key, bool value);
+-    void setAppInfo(const QString &desktop, const QString &key, bool value);
+-    void setAppInfo(const QString &desktop, const QString &key, const QString &value);
+-
+-private:
+-    QGSettings *mUkccNoticeGsettings = nullptr;
+-    QGSettings *mUkuiNoticeGsettings = nullptr;
+-    QGSettings *mStyleGsettings = nullptr;
+-
+-    QMap <QString, QString> mGsettingMap;
+-    QMap <QString, QGSettings *> mNoticeAppsMap;
+-
+-    QStringList mWhiteList;
+-    QStringList mApplist;
+-
+-Q_SIGNALS:
+-    void changed(const QString &key);
+-};
+-
+-#endif // NOTICEINTERFACE_H
+diff --git a/registeredSession/registeredSession.pro b/registeredSession/registeredSession.pro
+index 262acfe..ddb17e5 100644
+--- a/registeredSession/registeredSession.pro
++++ b/registeredSession/registeredSession.pro
+@@ -49,7 +49,6 @@ SOURCES += \
+         plugins/keyboard/keyboardinterface.cpp \
+         plugins/mouse/mouseinterface.cpp \
+         plugins/default/defaultinterface.cpp \
+-        plugins/notice/noticeinterface.cpp \
+         plugins/screenlock/screenlockinterface.cpp \
+         plugins/screensaver/screensaverinterface.cpp \
+         plugins/shortcut/getshortcutworker.cpp \
+@@ -76,7 +75,6 @@ HEADERS += \
+         plugins/keyboard/keyboardinterface.h \
+         plugins/mouse/mouseinterface.h \
+         plugins/default/defaultinterface.h \
+-        plugins/notice/noticeinterface.h \
+         plugins/screenlock/screenlockinterface.h \
+         plugins/screensaver/screensaverinterface.h \
+         plugins/shortcut/getshortcutworker.h \
Binary files /tmp/tmpuukvj6b3/a8BCnsgtJC/ukui-control-center-4.10.0.0/debian/patches/0116-chore-md.patch and /tmp/tmpuukvj6b3/xI_Y6PfPLJ/ukui-control-center-4.10.0.0/debian/patches/0116-chore-md.patch differ
diff -Nru ukui-control-center-4.10.0.0/debian/patches/0117-133-v11-2501.patch ukui-control-center-4.10.0.0/debian/patches/0117-133-v11-2501.patch
--- ukui-control-center-4.10.0.0/debian/patches/0117-133-v11-2501.patch	1970-01-01 08:00:00.000000000 +0800
+++ ukui-control-center-4.10.0.0/debian/patches/0117-133-v11-2501.patch	2025-02-07 16:32:50.000000000 +0800
@@ -0,0 +1,1042 @@
+From: nil <zhoubin@kylinos.cn>
+Date: Wed, 8 Jan 2025 07:48:16 +0000
+Subject: =?utf-8?b?ITEzMyDjgJB2MTEtMjUwMeOAkeWNleWFg+a1i+ivlSDmjqfliLbpnaI=?=
+ =?utf-8?b?5p2/IE1lcmdlIHB1bGwgcmVxdWVzdCAhMTMzIGZyb20g5L2V5oCd6IOcL25pbGU=?=
+
+---
+ registeredSession/json.cpp              | 732 --------------------------------
+ registeredSession/json.h                | 265 ------------
+ registeredSession/registeredSession.pro |   2 -
+ 3 files changed, 999 deletions(-)
+ delete mode 100644 registeredSession/json.cpp
+ delete mode 100644 registeredSession/json.h
+
+diff --git a/registeredSession/json.cpp b/registeredSession/json.cpp
+deleted file mode 100644
+index 6f3c0de..0000000
+--- a/registeredSession/json.cpp
++++ /dev/null
+@@ -1,732 +0,0 @@
+-/**
+- * QtJson - A simple class for parsing JSON data into a QVariant hierarchies and vice-versa.
+- * Copyright (C) 2011  Eeli Reilin
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License as published by
+- * the Free Software Foundation, either version 3 of the License, or
+- * (at your option) any later version.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- */
+-
+-/**
+- * \file json.cpp
+- */
+-
+-#include <QDateTime>
+-#include <QStringList>
+-#include "json.h"
+-
+-namespace QtJson {
+-    static QString dateFormat, dateTimeFormat;
+-    static bool prettySerialize = false;
+-
+-    static QString sanitizeString(QString str);
+-    static QByteArray join(const QList<QByteArray> &list, const QByteArray &sep);
+-    static QVariant parseValue(const QString &json, int &index, bool &success);
+-    static QVariant parseObject(const QString &json, int &index, bool &success);
+-    static QVariant parseArray(const QString &json, int &index, bool &success);
+-    static QVariant parseString(const QString &json, int &index, bool &success);
+-    static QVariant parseNumber(const QString &json, int &index);
+-    static int lastIndexOfNumber(const QString &json, int index);
+-    static void eatWhitespace(const QString &json, int &index);
+-    static int lookAhead(const QString &json, int index);
+-    static int nextToken(const QString &json, int &index);
+-
+-    template<typename T>
+-    QByteArray serializeMap(const T &map, bool &success, int _level = 0) {
+-        QByteArray newline;
+-        QByteArray tabs;
+-        QByteArray tabsFields;
+-        if (prettySerialize && !map.isEmpty()) {
+-            newline = "\n";
+-            for (int l=1; l<_level; l++) {
+-                tabs += "    ";
+-            }
+-            tabsFields = tabs + "    ";
+-        }
+-
+-        QByteArray str = "{" + newline;
+-        QList<QByteArray> pairs;
+-        for (typename T::const_iterator it = map.begin(), itend = map.end(); it != itend; ++it) {
+-            bool otherSuccess = true;
+-            QByteArray serializedValue = serialize(it.value(), otherSuccess, _level);
+-            if (serializedValue.isNull()) {
+-                success = false;
+-                break;
+-            }
+-            pairs << tabsFields + sanitizeString(it.key()).toUtf8() + ":" + (prettySerialize ? " " : "") + serializedValue;
+-        }
+-
+-        str += join(pairs, "," + newline) + newline;
+-        str += tabs + "}";
+-        return str;
+-    }
+-
+-    void insert(QVariant &v, const QString &key, const QVariant &value);
+-    void append(QVariant &v, const QVariant &value);
+-
+-    template<typename T>
+-    void cloneMap(QVariant &json, const T &map) {
+-    for (typename T::const_iterator it = map.begin(), itend = map.end(); it != itend; ++it) {
+-        insert(json, it.key(), (*it));
+-    }
+-    }
+-
+-    template<typename T>
+-    void cloneList(QVariant &json, const T &list) {
+-    for (typename T::const_iterator it = list.begin(), itend = list.end(); it != itend; ++it) {
+-        append(json, (*it));
+-    }
+-    }
+-
+-    /**
+-     * parse
+-     */
+-    QVariant parse(const QString &json) {
+-        bool success = true;
+-        return parse(json, success);
+-    }
+-
+-    /**
+-     * parse
+-     */
+-    QVariant parse(const QString &json, bool &success) {
+-        success = true;
+-
+-        // Return an empty QVariant if the JSON data is either null or empty
+-        if (!json.isNull() || !json.isEmpty()) {
+-            QString data = json;
+-            // We'll start from index 0
+-            int index = 0;
+-
+-            // Parse the first value
+-            QVariant value = parseValue(data, index, success);
+-
+-            // Return the parsed value
+-            return value;
+-        } else {
+-            // Return the empty QVariant
+-            return QVariant();
+-        }
+-    }
+-
+-    /**
+-     * clone
+-     */
+-    QVariant clone(const QVariant &data) {
+-    QVariant v;
+-
+-    if (data.type() == QVariant::Map) {
+-        cloneMap(v, data.toMap());
+-    } else if (data.type() == QVariant::Hash) {
+-        cloneMap(v, data.toHash());
+-    } else if (data.type() == QVariant::List) {
+-        cloneList(v, data.toList());
+-    } else if (data.type() == QVariant::StringList) {
+-        cloneList(v, data.toStringList());
+-    } else {
+-        v = QVariant(data);
+-    }
+-
+-    return v;
+-    }
+-
+-    /**
+-     * insert value (map case)
+-     */
+-    void insert(QVariant &v, const QString &key, const QVariant &value) {
+-    if (!v.canConvert<QVariantMap>()) v = QVariantMap();
+-    QVariantMap *p = (QVariantMap *)v.data();
+-    p->insert(key, clone(value));
+-    }
+-
+-    /**
+-     * append value (list case)
+-     */
+-    void append(QVariant &v, const QVariant &value) {
+-    if (!v.canConvert<QVariantList>()) v = QVariantList();
+-    QVariantList *p = (QVariantList *)v.data();
+-    p->append(value);
+-    }
+-
+-    QByteArray serialize(const QVariant &data) {
+-        bool success = true;
+-        return serialize(data, success);
+-    }
+-
+-    QByteArray serialize(const QVariant &data, bool &success, int _level /*= 0*/) {
+-        QByteArray newline;
+-        QByteArray tabs;
+-        QByteArray tabsFields;
+-        if (prettySerialize) {
+-            newline = "\n";
+-            for (int l=0; l<_level; l++) {
+-                tabs += "    ";
+-            }
+-            tabsFields = tabs + "    ";
+-        }
+-
+-        QByteArray str;
+-        success = true;
+-
+-        if (!data.isValid()) { // invalid or null?
+-            str = "null";
+-        } else if ((data.type() == QVariant::List) ||
+-                   (data.type() == QVariant::StringList)) { // variant is a list?
+-            QList<QByteArray> values;
+-            const QVariantList list = data.toList();
+-            Q_FOREACH(const QVariant& v, list) {
+-                bool otherSuccess = true;
+-                QByteArray serializedValue = serialize(v, otherSuccess, _level+1);
+-                if (serializedValue.isNull()) {
+-                    success = false;
+-                    break;
+-                }
+-                values << tabsFields + serializedValue;
+-            }
+-
+-            if (!values.isEmpty()) {
+-                str = "[" + newline + join( values, "," + newline ) + newline + tabs + "]";
+-            } else {
+-                str = "[]";
+-            }
+-        } else if (data.type() == QVariant::Hash) { // variant is a hash?
+-            str = serializeMap<>(data.toHash(), success, _level+1);
+-        } else if (data.type() == QVariant::Map) { // variant is a map?
+-            str = serializeMap<>(data.toMap(), success, _level+1);
+-        } else if ((data.type() == QVariant::String) ||
+-                   (data.type() == QVariant::ByteArray)) {// a string or a byte array?
+-            str = sanitizeString(data.toString()).toUtf8();
+-        } else if (data.type() == QVariant::Double) { // double?
+-            double value = data.toDouble(&success);
+-            if (success) {
+-                str = QByteArray::number(value, 'g');
+-                if (!str.contains(".") && ! str.contains("e")) {
+-                    str += ".0";
+-                }
+-            }
+-        } else if (data.type() == QVariant::Bool) { // boolean value?
+-            str = data.toBool() ? "true" : "false";
+-        } else if (data.type() == QVariant::ULongLong) { // large unsigned number?
+-            str = QByteArray::number(data.value<qulonglong>());
+-        } else if (data.canConvert<qlonglong>()) { // any signed number?
+-            str = QByteArray::number(data.value<qlonglong>());
+-        } else if (data.canConvert<long>()) { //TODO: this code is never executed because all smaller types can be converted to qlonglong
+-            str = QString::number(data.value<long>()).toUtf8();
+-        } else if (data.type() == QVariant::DateTime) { // datetime value?
+-            str = sanitizeString(dateTimeFormat.isEmpty()
+-                                 ? data.toDateTime().toString()
+-                                 : data.toDateTime().toString(dateTimeFormat)).toUtf8();
+-        } else if (data.type() == QVariant::Date) { // date value?
+-            str = sanitizeString(dateTimeFormat.isEmpty()
+-                                 ? data.toDate().toString()
+-                                 : data.toDate().toString(dateFormat)).toUtf8();
+-        } else if (data.canConvert<QString>()) { // can value be converted to string?
+-            // this will catch QUrl, ... (all other types which can be converted to string)
+-            str = sanitizeString(data.toString()).toUtf8();
+-        } else {
+-            success = false;
+-        }
+-
+-        if (success) {
+-            return str;
+-        }
+-        return QByteArray();
+-    }
+-
+-    QString serializeStr(const QVariant &data) {
+-        return QString::fromUtf8(serialize(data));
+-    }
+-
+-    QString serializeStr(const QVariant &data, bool &success) {
+-        return QString::fromUtf8(serialize(data, success));
+-    }
+-
+-
+-    /**
+-     * \enum JsonToken
+-     */
+-    enum JsonToken {
+-        JsonTokenNone = 0,
+-        JsonTokenCurlyOpen = 1,
+-        JsonTokenCurlyClose = 2,
+-        JsonTokenSquaredOpen = 3,
+-        JsonTokenSquaredClose = 4,
+-        JsonTokenColon = 5,
+-        JsonTokenComma = 6,
+-        JsonTokenString = 7,
+-        JsonTokenNumber = 8,
+-        JsonTokenTrue = 9,
+-        JsonTokenFalse = 10,
+-        JsonTokenNull = 11
+-    };
+-
+-    static QString sanitizeString(QString str) {
+-        str.replace(QLatin1String("\\"), QLatin1String("\\\\"));
+-        str.replace(QLatin1String("\""), QLatin1String("\\\""));
+-        str.replace(QLatin1String("\b"), QLatin1String("\\b"));
+-        str.replace(QLatin1String("\f"), QLatin1String("\\f"));
+-        str.replace(QLatin1String("\n"), QLatin1String("\\n"));
+-        str.replace(QLatin1String("\r"), QLatin1String("\\r"));
+-        str.replace(QLatin1String("\t"), QLatin1String("\\t"));
+-        return QString(QLatin1String("\"%1\"")).arg(str);
+-    }
+-
+-    static QByteArray join(const QList<QByteArray> &list, const QByteArray &sep) {
+-        QByteArray res;
+-        Q_FOREACH(const QByteArray &i, list) {
+-            if (!res.isEmpty()) {
+-                res += sep;
+-            }
+-            res += i;
+-        }
+-        return res;
+-    }
+-
+-    /**
+-     * parseValue
+-     */
+-    static QVariant parseValue(const QString &json, int &index, bool &success) {
+-        // Determine what kind of data we should parse by
+-        // checking out the upcoming token
+-        switch(lookAhead(json, index)) {
+-            case JsonTokenString:
+-                return parseString(json, index, success);
+-            case JsonTokenNumber:
+-                return parseNumber(json, index);
+-            case JsonTokenCurlyOpen:
+-                return parseObject(json, index, success);
+-            case JsonTokenSquaredOpen:
+-                return parseArray(json, index, success);
+-            case JsonTokenTrue:
+-                nextToken(json, index);
+-                return QVariant(true);
+-            case JsonTokenFalse:
+-                nextToken(json, index);
+-                return QVariant(false);
+-            case JsonTokenNull:
+-                nextToken(json, index);
+-                return QVariant();
+-            case JsonTokenNone:
+-                break;
+-        }
+-
+-        // If there were no tokens, flag the failure and return an empty QVariant
+-        success = false;
+-        return QVariant();
+-    }
+-
+-    /**
+-     * parseObject
+-     */
+-    static QVariant parseObject(const QString &json, int &index, bool &success) {
+-        QVariantMap map;
+-        int token;
+-
+-        // Get rid of the whitespace and increment index
+-        nextToken(json, index);
+-
+-        // Loop through all of the key/value pairs of the object
+-        bool done = false;
+-        while (!done) {
+-            // Get the upcoming token
+-            token = lookAhead(json, index);
+-
+-            if (token == JsonTokenNone) {
+-                success = false;
+-                return QVariantMap();
+-            } else if (token == JsonTokenComma) {
+-                nextToken(json, index);
+-            } else if (token == JsonTokenCurlyClose) {
+-                nextToken(json, index);
+-                return map;
+-            } else {
+-                // Parse the key/value pair's name
+-                QString name = parseString(json, index, success).toString();
+-
+-                if (!success) {
+-                    return QVariantMap();
+-                }
+-
+-                // Get the next token
+-                token = nextToken(json, index);
+-
+-                // If the next token is not a colon, flag the failure
+-                // return an empty QVariant
+-                if (token != JsonTokenColon) {
+-                    success = false;
+-                    return QVariant(QVariantMap());
+-                }
+-
+-                // Parse the key/value pair's value
+-                QVariant value = parseValue(json, index, success);
+-
+-                if (!success) {
+-                    return QVariantMap();
+-                }
+-
+-                // Assign the value to the key in the map
+-                map[name] = value;
+-            }
+-        }
+-
+-        // Return the map successfully
+-        return QVariant(map);
+-    }
+-
+-    /**
+-     * parseArray
+-     */
+-    static QVariant parseArray(const QString &json, int &index, bool &success) {
+-        QVariantList list;
+-
+-        nextToken(json, index);
+-
+-        bool done = false;
+-        while(!done) {
+-            int token = lookAhead(json, index);
+-
+-            if (token == JsonTokenNone) {
+-                success = false;
+-                return QVariantList();
+-            } else if (token == JsonTokenComma) {
+-                nextToken(json, index);
+-            } else if (token == JsonTokenSquaredClose) {
+-                nextToken(json, index);
+-                break;
+-            } else {
+-                QVariant value = parseValue(json, index, success);
+-                if (!success) {
+-                    return QVariantList();
+-                }
+-                list.push_back(value);
+-            }
+-        }
+-
+-        return QVariant(list);
+-    }
+-
+-    /**
+-     * parseString
+-     */
+-    static QVariant parseString(const QString &json, int &index, bool &success) {
+-        QString s;
+-        QChar c;
+-
+-        eatWhitespace(json, index);
+-
+-        c = json[index++];
+-
+-        bool complete = false;
+-        while(!complete) {
+-            if (index == json.size()) {
+-                break;
+-            }
+-
+-            c = json[index++];
+-
+-            if (c == '\"') {
+-                complete = true;
+-                break;
+-            } else if (c == '\\') {
+-                if (index == json.size()) {
+-                    break;
+-                }
+-
+-                c = json[index++];
+-
+-                if (c == '\"') {
+-                    s.append('\"');
+-                } else if (c == '\\') {
+-                    s.append('\\');
+-                } else if (c == '/') {
+-                    s.append('/');
+-                } else if (c == 'b') {
+-                    s.append('\b');
+-                } else if (c == 'f') {
+-                    s.append('\f');
+-                } else if (c == 'n') {
+-                    s.append('\n');
+-                } else if (c == 'r') {
+-                    s.append('\r');
+-                } else if (c == 't') {
+-                    s.append('\t');
+-                } else if (c == 'u') {
+-                    int remainingLength = json.size() - index;
+-                    if (remainingLength >= 4) {
+-                        QString unicodeStr = json.mid(index, 4);
+-
+-                        int symbol = unicodeStr.toInt(0, 16);
+-
+-                        s.append(QChar(symbol));
+-
+-                        index += 4;
+-                    } else {
+-                        break;
+-                    }
+-                }
+-            } else {
+-                s.append(c);
+-            }
+-        }
+-
+-        if (!complete) {
+-            success = false;
+-            return QVariant();
+-        }
+-
+-        return QVariant(s);
+-    }
+-
+-    /**
+-     * parseNumber
+-     */
+-    static QVariant parseNumber(const QString &json, int &index) {
+-        eatWhitespace(json, index);
+-
+-        int lastIndex = lastIndexOfNumber(json, index);
+-        int charLength = (lastIndex - index) + 1;
+-        QString numberStr;
+-
+-        numberStr = json.mid(index, charLength);
+-
+-        index = lastIndex + 1;
+-        bool ok;
+-
+-        if (numberStr.contains('.')) {
+-            return QVariant(numberStr.toDouble(NULL));
+-        } else if (numberStr.startsWith('-')) {
+-            int i = numberStr.toInt(&ok);
+-            if (!ok) {
+-                qlonglong ll = numberStr.toLongLong(&ok);
+-                return ok ? ll : QVariant(numberStr);
+-            }
+-            return i;
+-        } else {
+-            uint u = numberStr.toUInt(&ok);
+-            if (!ok) {
+-                qulonglong ull = numberStr.toULongLong(&ok);
+-                return ok ? ull : QVariant(numberStr);
+-            }
+-            return u;
+-        }
+-    }
+-
+-    /**
+-     * lastIndexOfNumber
+-     */
+-    static int lastIndexOfNumber(const QString &json, int index) {
+-        int lastIndex;
+-
+-        for(lastIndex = index; lastIndex < json.size(); lastIndex++) {
+-            if (QString("0123456789+-.eE").indexOf(json[lastIndex]) == -1) {
+-                break;
+-            }
+-        }
+-
+-        return lastIndex -1;
+-    }
+-
+-    /**
+-     * eatWhitespace
+-     */
+-    static void eatWhitespace(const QString &json, int &index) {
+-        for(; index < json.size(); index++) {
+-            if (QString(" \t\n\r").indexOf(json[index]) == -1) {
+-                break;
+-            }
+-        }
+-    }
+-
+-    /**
+-     * lookAhead
+-     */
+-    static int lookAhead(const QString &json, int index) {
+-        int saveIndex = index;
+-        return nextToken(json, saveIndex);
+-    }
+-
+-    /**
+-     * nextToken
+-     */
+-    static int nextToken(const QString &json, int &index) {
+-        eatWhitespace(json, index);
+-
+-        if (index == json.size()) {
+-            return JsonTokenNone;
+-        }
+-
+-        QChar c = json[index];
+-        index++;
+-        switch(c.toLatin1()) {
+-            case '{': return JsonTokenCurlyOpen;
+-            case '}': return JsonTokenCurlyClose;
+-            case '[': return JsonTokenSquaredOpen;
+-            case ']': return JsonTokenSquaredClose;
+-            case ',': return JsonTokenComma;
+-            case '"': return JsonTokenString;
+-            case '0': case '1': case '2': case '3': case '4':
+-            case '5': case '6': case '7': case '8': case '9':
+-            case '-': return JsonTokenNumber;
+-            case ':': return JsonTokenColon;
+-        }
+-        index--; // ^ WTF?
+-
+-        int remainingLength = json.size() - index;
+-
+-        // True
+-        if (remainingLength >= 4) {
+-            if (json[index] == 't' && json[index + 1] == 'r' &&
+-                json[index + 2] == 'u' && json[index + 3] == 'e') {
+-                index += 4;
+-                return JsonTokenTrue;
+-            }
+-        }
+-
+-        // False
+-        if (remainingLength >= 5) {
+-            if (json[index] == 'f' && json[index + 1] == 'a' &&
+-                json[index + 2] == 'l' && json[index + 3] == 's' &&
+-                json[index + 4] == 'e') {
+-                index += 5;
+-                return JsonTokenFalse;
+-            }
+-        }
+-
+-        // Null
+-        if (remainingLength >= 4) {
+-            if (json[index] == 'n' && json[index + 1] == 'u' &&
+-                json[index + 2] == 'l' && json[index + 3] == 'l') {
+-                index += 4;
+-                return JsonTokenNull;
+-            }
+-        }
+-
+-        return JsonTokenNone;
+-    }
+-
+-    void setDateTimeFormat(const QString &format) {
+-        dateTimeFormat = format;
+-    }
+-
+-    void setDateFormat(const QString &format) {
+-        dateFormat = format;
+-    }
+-
+-    QString getDateTimeFormat() {
+-        return dateTimeFormat;
+-    }
+-
+-    QString getDateFormat() {
+-        return dateFormat;
+-    }
+-
+-    void setPrettySerialize(bool enabled) {
+-        prettySerialize = enabled;
+-    }
+-
+-    bool isPrettySerialize() {
+-        return prettySerialize;
+-    }
+-
+-
+-
+-    QQueue<BuilderJsonObject *> BuilderJsonObject::created_list;
+-
+-    BuilderJsonObject::BuilderJsonObject() {
+-        // clean objects previous "created"
+-        while (!BuilderJsonObject::created_list.isEmpty()) {
+-            delete BuilderJsonObject::created_list.dequeue();
+-        }
+-    }
+-
+-    BuilderJsonObject::BuilderJsonObject(JsonObject &json) {
+-        BuilderJsonObject();
+-
+-        obj = json;
+-    }
+-
+-    BuilderJsonObject *BuilderJsonObject::set(const QString &key, const QVariant &value) {
+-        obj[key] = value;
+-
+-        return this;
+-    }
+-
+-    BuilderJsonObject *BuilderJsonObject::set(const QString &key, BuilderJsonObject *builder) {
+-        return set(key, builder->create());
+-    }
+-
+-    BuilderJsonObject *BuilderJsonObject::set(const QString &key, BuilderJsonArray *builder) {
+-        return set(key, builder->create());
+-    }
+-
+-    JsonObject BuilderJsonObject::create() {
+-        BuilderJsonObject::created_list.enqueue(this);
+-
+-        return obj;
+-    }
+-
+-
+-    QQueue<BuilderJsonArray *> BuilderJsonArray::created_list;
+-
+-    BuilderJsonArray::BuilderJsonArray() {
+-        // clean objects previous "created"
+-        while (!BuilderJsonArray::created_list.isEmpty()) {
+-            delete BuilderJsonArray::created_list.dequeue();
+-        }
+-    }
+-
+-    BuilderJsonArray::BuilderJsonArray(JsonArray &json) {
+-        BuilderJsonArray();
+-
+-        array = json;
+-    }
+-
+-    BuilderJsonArray *BuilderJsonArray::add(const QVariant &element) {
+-        array.append(element);
+-
+-        return this;
+-    }
+-
+-    BuilderJsonArray *BuilderJsonArray::add(BuilderJsonObject *builder) {
+-        return add(builder->create());
+-    }
+-
+-    BuilderJsonArray *BuilderJsonArray::add(BuilderJsonArray *builder) {
+-        return add(builder->create());
+-    }
+-
+-    JsonArray BuilderJsonArray::create() {
+-        BuilderJsonArray::created_list.enqueue(this);
+-
+-        return array;
+-    }
+-
+-
+-
+-
+-    BuilderJsonObject *objectBuilder() {
+-        return new BuilderJsonObject();
+-    }
+-
+-    BuilderJsonObject *objectBuilder(JsonObject &json) {
+-        return new BuilderJsonObject(json);
+-    }
+-
+-    BuilderJsonArray *arrayBuilder() {
+-        return new BuilderJsonArray();
+-    }
+-
+-    BuilderJsonArray *arrayBuilder(JsonArray &json) {
+-        return new BuilderJsonArray(json);
+-    }
+-
+-} //end namespace
+diff --git a/registeredSession/json.h b/registeredSession/json.h
+deleted file mode 100644
+index 74a2c40..0000000
+--- a/registeredSession/json.h
++++ /dev/null
+@@ -1,265 +0,0 @@
+-/**
+- * QtJson - A simple class for parsing JSON data into a QVariant hierarchies and vice-versa.
+- * Copyright (C) 2011  Eeli Reilin
+- *
+- * This program is free software: you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License as published by
+- * the Free Software Foundation, either version 3 of the License, or
+- * (at your option) any later version.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+- */
+-
+-/**
+- * \file json.h
+- */
+-
+-#ifndef JSON_H
+-#define JSON_H
+-
+-#include <QVariant>
+-#include <QString>
+-#include <QQueue>
+-
+-
+-/**
+- * \namespace QtJson
+- * \brief A JSON data parser
+- *
+- * Json parses a JSON data into a QVariant hierarchy.
+- */
+-namespace QtJson {
+-    typedef QVariantMap JsonObject;
+-    typedef QVariantList JsonArray;
+-
+-    /**
+-     * Clone a JSON object (makes a deep copy)
+-     *
+-     * \param data The JSON object
+-     */
+-    QVariant clone(const QVariant &data);
+-
+-    /**
+-     * Insert value to JSON object (QVariantMap)
+-     *
+-     * \param v The JSON object
+-     * \param key The key
+-     * \param value The value
+-     */
+-    void insert(QVariant &v, const QString &key, const QVariant &value);
+-
+-    /**
+-     * Append value to JSON array (QVariantList)
+-     *
+-     * \param v The JSON array
+-     * \param value The value
+-     */
+-    void append(QVariant &v, const QVariant &value);
+-
+-    /**
+-     * Parse a JSON string
+-     *
+-     * \param json The JSON data
+-     */
+-    QVariant parse(const QString &json);
+-
+-    /**
+-     * Parse a JSON string
+-     *
+-     * \param json The JSON data
+-     * \param success The success of the parsing
+-     */
+-    QVariant parse(const QString &json, bool &success);
+-
+-    /**
+-     * This method generates a textual JSON representation
+-     *
+-     * \param data The JSON data generated by the parser.
+-     *
+-     * \return QByteArray Textual JSON representation in UTF-8
+-     */
+-    QByteArray serialize(const QVariant &data);
+-
+-    /**
+-     * This method generates a textual JSON representation
+-     *
+-     * \param data The JSON data generated by the parser.
+-     * \param success The success of the serialization
+-     *
+-     * \return QByteArray Textual JSON representation in UTF-8
+-     */
+-    QByteArray serialize(const QVariant &data, bool &success, int _level = 0);
+-
+-    /**
+-     * This method generates a textual JSON representation
+-     *
+-     * \param data The JSON data generated by the parser.
+-     *
+-     * \return QString Textual JSON representation
+-     */
+-    QString serializeStr(const QVariant &data);
+-
+-    /**
+-     * This method generates a textual JSON representation
+-     *
+-     * \param data The JSON data generated by the parser.
+-     * \param success The success of the serialization
+-     *
+-     * \return QString Textual JSON representation
+-     */
+-    QString serializeStr(const QVariant &data, bool &success, int _level = 0);
+-
+-    /**
+-     * This method sets date(time) format to be used for QDateTime::toString
+-     * If QString is empty, Qt::TextDate is used.
+-     *
+-     * \param format The JSON data generated by the parser.
+-     */
+-    void setDateTimeFormat(const QString& format);
+-    void setDateFormat(const QString& format);
+-
+-    /**
+-     * This method gets date(time) format to be used for QDateTime::toString
+-     * If QString is empty, Qt::TextDate is used.
+-     */
+-    QString getDateTimeFormat();
+-    QString getDateFormat();
+-
+-    /**
+-     * @brief setPrettySerialize enable/disabled pretty-print when serialize() a json
+-     * @param enabled
+-     */
+-    void setPrettySerialize(bool enabled);
+-
+-    /**
+-     * @brief isPrettySerialize check if is enabled pretty-print when serialize() a json
+-     * @return
+-     */
+-    bool isPrettySerialize();
+-
+-
+-
+-
+-    /**
+-     * QVariant based Json object
+-     */
+-    class Object : public QVariant {
+-        template<typename T>
+-        Object& insertKey(Object* ptr, const QString& key) {
+-            T* p = (T*)ptr->data();
+-            if (!p->contains(key)) p->insert(key, QVariant());
+-            return *reinterpret_cast<Object*>(&p->operator[](key));
+-        }
+-        template<typename T>
+-        void removeKey(Object *ptr, const QString& key) {
+-            T* p = (T*)ptr->data();
+-            p->remove(key);
+-        }
+-    public:
+-        Object() : QVariant() {}
+-        Object(const Object& ref) : QVariant(ref) {}
+-
+-        Object& operator=(const QVariant& rhs) {
+-            /** It maybe more robust when running under Qt versions below 4.7 */
+-            QObject * obj = qvariant_cast<QObject *>(rhs);
+-            //  setValue(rhs);
+-            setValue(obj);
+-            return *this;
+-        }
+-        Object& operator[](const QString& key) {
+-            if (type() == QVariant::Map)
+-                return insertKey<QVariantMap>(this, key);
+-            else if (type() == QVariant::Hash)
+-                return insertKey<QVariantHash>(this, key);
+-
+-            setValue(QVariantMap());
+-
+-            return insertKey<QVariantMap>(this, key);
+-        }
+-        const Object& operator[](const QString& key) const {
+-            return const_cast<Object*>(this)->operator[](key);
+-        }
+-        void remove(const QString& key) {
+-            if (type() == QVariant::Map)
+-                removeKey<QVariantMap>(this, key);
+-            else if (type() == QVariant::Hash)
+-                removeKey<QVariantHash>(this, key);
+-        }
+-    };
+-
+-
+-    class BuilderJsonArray;
+-
+-    /**
+-     * @brief The BuilderJsonObject class
+-     */
+-    class BuilderJsonObject {
+-
+-        public:
+-            BuilderJsonObject();
+-            BuilderJsonObject(JsonObject &json);
+-
+-            BuilderJsonObject *set(const QString &key, const QVariant &value);
+-            BuilderJsonObject *set(const QString &key, BuilderJsonObject *builder);
+-            BuilderJsonObject *set(const QString &key, BuilderJsonArray *builder);
+-            JsonObject create();
+-
+-        private:
+-            static QQueue<BuilderJsonObject *> created_list;
+-
+-            JsonObject obj;
+-    };
+-
+-    /**
+-     * @brief The BuilderJsonArray class
+-     */
+-    class BuilderJsonArray {
+-
+-        public:
+-            BuilderJsonArray();
+-            BuilderJsonArray(JsonArray &json);
+-
+-            BuilderJsonArray *add(const QVariant &element);
+-            BuilderJsonArray *add(BuilderJsonObject *builder);
+-            BuilderJsonArray *add(BuilderJsonArray *builder);
+-            JsonArray create();
+-
+-        private:
+-            static QQueue<BuilderJsonArray *> created_list;
+-
+-            JsonArray array;
+-    };
+-
+-
+-    /**
+-     * @brief Create a BuilderJsonObject
+-     * @return
+-     */
+-    BuilderJsonObject *objectBuilder();
+-
+-    /**
+-     * @brief Create a BuilderJsonObject starting from copy of another json
+-     * @return
+-     */
+-    BuilderJsonObject *objectBuilder(JsonObject &json);
+-
+-    /**
+-     * @brief Create a BuilderJsonArray
+-     * @return
+-     */
+-    BuilderJsonArray *arrayBuilder();
+-
+-    /**
+-     * @brief Create a BuilderJsonArray starting from copy of another json
+-     * @return
+-     */
+-    BuilderJsonArray *arrayBuilder(JsonArray &json);
+-}
+-
+-#endif //JSON_H
+diff --git a/registeredSession/registeredSession.pro b/registeredSession/registeredSession.pro
+index ddb17e5..9189016 100644
+--- a/registeredSession/registeredSession.pro
++++ b/registeredSession/registeredSession.pro
+@@ -40,7 +40,6 @@ INSTALLS += inst1
+ #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
+ 
+ SOURCES += \
+-        json.cpp \
+         main.cpp \
+         plugins/about/aboutinterface.cpp \
+         plugins/area/areainterface.cpp \
+@@ -67,7 +66,6 @@ target.path = /usr/bin/
+ 
+ 
+ HEADERS += \
+-        json.h \
+         plugins/about/aboutinterface.h \
+         plugins/area/areainterface.h \
+         plugins/autoboot/autostartinterface.h \
diff -Nru ukui-control-center-4.10.0.0/debian/patches/0118-135-291185.patch ukui-control-center-4.10.0.0/debian/patches/0118-135-291185.patch
--- ukui-control-center-4.10.0.0/debian/patches/0118-135-291185.patch	1970-01-01 08:00:00.000000000 +0800
+++ ukui-control-center-4.10.0.0/debian/patches/0118-135-291185.patch	2025-02-07 16:32:50.000000000 +0800
@@ -0,0 +1,28 @@
+From: nil <zhoubin@kylinos.cn>
+Date: Wed, 8 Jan 2025 08:09:26 +0000
+Subject: =?utf-8?b?ITEzNSAyOTExODUg44CQ5pe26Ze05LiO5pel5pyf44CR5re75Yqg5paw?=
+ =?utf-8?b?5pe25Yy677yM5paw5pe25Yy65LiL6Z2i55qE5pe26Ze05pi+56S65byC5bi477yM?=
+ =?utf-8?b?5q+U5b2T5YmN5pe25Yy65pma55qE5pe26Ze05pi+56S65Li65q+U5LuK5aSp5pep?=
+ =?utf-8?b?55qE5pe26Ze0IE1lcmdlIHB1bGwgcmVxdWVzdCAhMTM1IGZyb20gbmlsL25pbGUt?=
+ =?utf-8?b?MDEwNw==?=
+
+---
+ plugins/time-language/datetime/timeBtn.cpp | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/plugins/time-language/datetime/timeBtn.cpp b/plugins/time-language/datetime/timeBtn.cpp
+index 4b27eaf..cdba347 100644
+--- a/plugins/time-language/datetime/timeBtn.cpp
++++ b/plugins/time-language/datetime/timeBtn.cpp
+@@ -103,9 +103,9 @@ void TimeBtn::updateTime(bool hour_24) {
+     QDateTime thisZoneTime;
+     const double timeDelta = (thisZone.offsetFromUtc(QDateTime::currentDateTime()) - currentZone.offsetFromUtc(QDateTime::currentDateTime())) / 3600.0;
+     QString dateLiteral;
+-    if (QDateTime::currentDateTime().toTimeZone(thisZone).time().hour() + timeDelta >= 24) {
++    if ((QDateTime::currentDateTime().time().hour() + timeDelta) >= 24) {
+         dateLiteral = tr("Tomorrow");
+-    } else if (QDateTime::currentDateTime().toTimeZone(thisZone).time().hour() + timeDelta < 0) {
++    } else if ((QDateTime::currentDateTime().time().hour() + timeDelta) < 0) {
+         dateLiteral = tr("Yesterday");
+     } else {
+         dateLiteral = tr("Today");
diff -Nru ukui-control-center-4.10.0.0/debian/patches/0119-139-bug.patch ukui-control-center-4.10.0.0/debian/patches/0119-139-bug.patch
--- ukui-control-center-4.10.0.0/debian/patches/0119-139-bug.patch	1970-01-01 08:00:00.000000000 +0800
+++ ukui-control-center-4.10.0.0/debian/patches/0119-139-bug.patch	2025-02-07 16:32:50.000000000 +0800
@@ -0,0 +1,107 @@
+From: nil <zhoubin@kylinos.cn>
+Date: Fri, 10 Jan 2025 08:53:16 +0000
+Subject: =?utf-8?b?ITEzOSDkv67lpI1idWcgTWVyZ2UgcHVsbCByZXF1ZXN0ICExMzkgZnJv?=
+ =?utf-8?b?bSDkvZXmgJ3og5wvbmlsZQ==?=
+
+---
+ plugins/account/userinfo/createusernew.cpp   |  2 +-
+ plugins/commoninfo/boot/grubverifydialog.cpp |  4 ++--
+ plugins/devices/keyboard/keyboardmain.cpp    |  2 ++
+ plugins/system/vino/vino.cpp                 | 20 +++++++++++++++++++-
+ plugins/system/vino/vino.h                   |  1 +
+ 5 files changed, 25 insertions(+), 4 deletions(-)
+
+diff --git a/plugins/account/userinfo/createusernew.cpp b/plugins/account/userinfo/createusernew.cpp
+index dff09ca..e892dec 100644
+--- a/plugins/account/userinfo/createusernew.cpp
++++ b/plugins/account/userinfo/createusernew.cpp
+@@ -206,7 +206,7 @@ void CreateUserNew::initUI(){
+     typeBtnGroup->addButton(adminRadioBtn, 1);
+     typeBtnGroup->addButton(standardRadioBtn, 0);
+ 
+-    adminRadioBtn->setChecked(true);
++    standardRadioBtn->setChecked(true);
+ 
+     //管理员RadioButton布局
+     admin1VerLayout = new QVBoxLayout;
+diff --git a/plugins/commoninfo/boot/grubverifydialog.cpp b/plugins/commoninfo/boot/grubverifydialog.cpp
+index 0b89e21..0569cd1 100644
+--- a/plugins/commoninfo/boot/grubverifydialog.cpp
++++ b/plugins/commoninfo/boot/grubverifydialog.cpp
+@@ -38,7 +38,7 @@ void GrubVerify::initUI()
+ 
+     //新密码
+     newPwdLabel = new QLabel();
+-    newPwdLabel->setFixedSize(100,24);
++    newPwdLabel->setFixedWidth(100);
+     setTextDynamicInPwd(newPwdLabel, tr("Pwd"));
+     newTipLabel = new QLabel();
+     QFont ft;
+@@ -81,7 +81,7 @@ void GrubVerify::initUI()
+ 
+     //确认密码
+     surePwdLabel = new QLabel();
+-    surePwdLabel->setFixedSize(100,24);
++    surePwdLabel->setFixedWidth(100);
+     setTextDynamicInPwd(surePwdLabel, tr("Sure Pwd"));
+ 
+     surePwdLineEdit = new QLineEdit();
+diff --git a/plugins/devices/keyboard/keyboardmain.cpp b/plugins/devices/keyboard/keyboardmain.cpp
+index a3db782..e561a03 100644
+--- a/plugins/devices/keyboard/keyboardmain.cpp
++++ b/plugins/devices/keyboard/keyboardmain.cpp
+@@ -132,6 +132,8 @@ void KeyboardMain::initKeyboardStatus()
+ 
+     initShowIconOnDesktop();
+ 
++    initInputMethodSet();
++
+     initShowIconOnTray();
+ 
+     initKeyboardSize();
+diff --git a/plugins/system/vino/vino.cpp b/plugins/system/vino/vino.cpp
+index 85c875f..74e23f4 100644
+--- a/plugins/system/vino/vino.cpp
++++ b/plugins/system/vino/vino.cpp
+@@ -73,7 +73,10 @@ bool Vino::isEnable() const
+     if (!UkccCommon::isWayland()) {
+         return !UkccCommon::isCommunity() && isExistVino();
+     } else {
+-        return true;
++        if (isExistKylinRemote()) {
++            return true;
++        }
++        return false;
+     }
+ }
+ 
+@@ -81,3 +84,18 @@ bool Vino::isExistVino() const
+ {
+     return QGSettings::isSchemaInstalled(QByteArray("org.gnome.Vino"));
+ }
++
++bool Vino::isExistKylinRemote() const
++{
++    QProcess *process = new QProcess;
++    process->start("dpkg -l | grep kylin-remote-desktop-daemon");
++    process->waitForFinished();
++
++    QByteArray ba = process->readAllStandardOutput();
++    delete process;
++    QString mOutput = QString(ba.data());
++    if (mOutput.contains("kylin-remote-desktop-daemon")) {
++        return true;
++    }
++    return false;
++}
+diff --git a/plugins/system/vino/vino.h b/plugins/system/vino/vino.h
+index 9ee60ef..8beaf41 100644
+--- a/plugins/system/vino/vino.h
++++ b/plugins/system/vino/vino.h
+@@ -54,5 +54,6 @@ private:
+ private:
+     bool isExistVino() const;
+ 
++    bool isExistKylinRemote() const;
+ };
+ #endif // VINO_H
Binary files /tmp/tmpuukvj6b3/a8BCnsgtJC/ukui-control-center-4.10.0.0/debian/patches/0120-140-fix-panel-bug-278913.patch and /tmp/tmpuukvj6b3/xI_Y6PfPLJ/ukui-control-center-4.10.0.0/debian/patches/0120-140-fix-panel-bug-278913.patch differ
diff -Nru ukui-control-center-4.10.0.0/debian/patches/0121-141-380937-2024-OEM-v11-2501.patch ukui-control-center-4.10.0.0/debian/patches/0121-141-380937-2024-OEM-v11-2501.patch
--- ukui-control-center-4.10.0.0/debian/patches/0121-141-380937-2024-OEM-v11-2501.patch	1970-01-01 08:00:00.000000000 +0800
+++ ukui-control-center-4.10.0.0/debian/patches/0121-141-380937-2024-OEM-v11-2501.patch	2025-02-07 16:32:50.000000000 +0800
@@ -0,0 +1,721 @@
+From: nil <zhoubin@kylinos.cn>
+Date: Wed, 15 Jan 2025 06:43:14 +0000
+Subject: =?utf-8?b?ITE0MSAzODA5Mzcg5a2QIOOAkDIwMjTjgJHln7rnoYDnu4Tku7bnu4Q=?=
+ =?utf-8?b?5ZGo5L6L5Lya5b6F5YqeJuW5s+aXtuS7u+WKoSZPRU3kuLTml7bku7vliqEgLyA=?=
+ =?utf-8?b?44CQdjExLTI1MDHjgJHljZXlhYPmtYvor5Ug5o6n5Yi26Z2i5p2/IOW8gOWPkSBN?=
+ =?utf-8?b?ZXJnZSBwdWxsIHJlcXVlc3QgITE0MSBmcm9tIOiLj+WXo+WFuC9vcGVua3lsaW4v?=
+ =?utf-8?b?bmlsZS0xMTA3?=
+
+---
+ registeredSession/main.cpp                         |   2 -
+ .../plugins/datetime/datetimeinterface.cpp         |   3 +-
+ .../plugins/datetime/datetimeinterface.h           |   2 +-
+ .../plugins/shortcut/shortcutinterface.cpp         |  13 +--
+ .../plugins/shortcut/shortcutinterface.h           |   2 +-
+ registeredSession/plugins/shortcut/type.cpp        |  51 --------
+ registeredSession/plugins/shortcut/type.h          |  10 --
+ registeredSession/plugins/vino/vinointerface.cpp   | 129 ---------------------
+ registeredSession/plugins/vino/vinointerface.h     |  56 ---------
+ .../plugins/wallpaper/wallpaperinterface.cpp       |   5 +-
+ registeredSession/plugins/wallpaper/xmlhandle.cpp  |  51 --------
+ registeredSession/plugins/wallpaper/xmlhandle.h    |   1 -
+ registeredSession/registeredSession.pro            |   3 -
+ tests/unit_test_datetime/unit_test_datetime.cpp    |  22 ++++
+ .../unit_test_screenlock/unit_test_screenlock.cpp  |  10 ++
+ tests/unit_test_shortcut/unit_test_shortcut.cpp    |  11 +-
+ tests/unit_test_shortcut/unit_test_shortcut.pro    |   4 -
+ tests/unit_test_wallpaper/unit_test_wallpaper.cpp  |  44 ++++++-
+ 18 files changed, 85 insertions(+), 334 deletions(-)
+ delete mode 100644 registeredSession/plugins/shortcut/type.cpp
+ delete mode 100644 registeredSession/plugins/vino/vinointerface.cpp
+ delete mode 100644 registeredSession/plugins/vino/vinointerface.h
+
+diff --git a/registeredSession/main.cpp b/registeredSession/main.cpp
+index b37e031..357580e 100644
+--- a/registeredSession/main.cpp
++++ b/registeredSession/main.cpp
+@@ -18,7 +18,6 @@
+ #include "plugins/screenlock/screenlockinterface.h"
+ #include "plugins/shortcut/shortcutinterface.h"
+ #include "plugins/screensaver/screensaverinterface.h"
+-#include "plugins/vino/vinointerface.h"
+ 
+ void registerPlugins(const QString &path, QObject *object, QDBusConnection &connection) {
+     if (!connection.registerObject(path, object, QDBusConnection::ExportAllSlots |
+@@ -65,7 +64,6 @@ int main(int argc, char *argv[])
+     plugins["/Screenlock"] = new ScreenlockInterface;
+     plugins["/Shortcut"] = new ShortcutInterface;
+     plugins["/Screensaver"] = new ScreensaverInterface;
+-    plugins["/Vino"] = new VinoInterface;
+ 
+     for (std::map<QString, QObject*>::value_type plugin : plugins)
+         registerPlugins(plugin.first, plugin.second, sessionBus);
+diff --git a/registeredSession/plugins/datetime/datetimeinterface.cpp b/registeredSession/plugins/datetime/datetimeinterface.cpp
+index 02ad875..51234cc 100644
+--- a/registeredSession/plugins/datetime/datetimeinterface.cpp
++++ b/registeredSession/plugins/datetime/datetimeinterface.cpp
+@@ -24,11 +24,12 @@ DatetimeInterface::~DatetimeInterface()
+ 
+ }
+ 
+-void DatetimeInterface::timezoneChanged(QString key)
++bool DatetimeInterface::timezoneChanged(QString key)
+ {
+     if (key == "timezone") {
+         Q_EMIT changed("timezone");
+     }
++    return true;
+ }
+ 
+ QStringList DatetimeInterface::getTimezone()
+diff --git a/registeredSession/plugins/datetime/datetimeinterface.h b/registeredSession/plugins/datetime/datetimeinterface.h
+index a98c0c3..78bc727 100644
+--- a/registeredSession/plugins/datetime/datetimeinterface.h
++++ b/registeredSession/plugins/datetime/datetimeinterface.h
+@@ -33,7 +33,7 @@ public Q_SLOTS:
+     QStringList timezoneName(QString timezone);
+ 
+ private Q_SLOTS:
+-    void timezoneChanged(QString key);
++    bool timezoneChanged(QString key);
+ 
+ private:
+     QDBusInterface *timeDateInterface = nullptr;
+diff --git a/registeredSession/plugins/shortcut/shortcutinterface.cpp b/registeredSession/plugins/shortcut/shortcutinterface.cpp
+index 8febb69..707fb04 100644
+--- a/registeredSession/plugins/shortcut/shortcutinterface.cpp
++++ b/registeredSession/plugins/shortcut/shortcutinterface.cpp
+@@ -3,16 +3,6 @@
+ 
+ ShortcutInterface::ShortcutInterface()
+ {
+-    qRegisterMetaType<QStringPair>("QStringPair");
+-    qDBusRegisterMetaType<QStringPair>();
+-    qRegisterMetaType<QStringPairList>("QStringPairList");
+-    qDBusRegisterMetaType<QStringPairList>();
+-
+-    qRegisterMetaType<KeyEntry>("KeyEntry");
+-    qDBusRegisterMetaType<KeyEntry>();
+-    qRegisterMetaType<KeyEntryList>("KeyEntryList");
+-    qDBusRegisterMetaType<KeyEntryList>();
+-
+     getShortcutThread();
+ }
+ 
+@@ -109,9 +99,10 @@ QList<QStringPair> ShortcutInterface::getCustomShortcut()
+     return customShortcutList;
+ }
+ 
+-void ShortcutInterface::updateShortcut()
++bool ShortcutInterface::updateShortcut()
+ {
+     getShortcutThread();
++    return true;
+ }
+ 
+ void ShortcutInterface::setSystemShortcut(const QString &key, const QString &value)
+diff --git a/registeredSession/plugins/shortcut/shortcutinterface.h b/registeredSession/plugins/shortcut/shortcutinterface.h
+index cb80cdc..2946ff8 100644
+--- a/registeredSession/plugins/shortcut/shortcutinterface.h
++++ b/registeredSession/plugins/shortcut/shortcutinterface.h
+@@ -24,7 +24,7 @@ public Q_SLOTS:
+     QList<KeyEntry>    getSystemShortcutEntry();
+     QList<KeyEntry>    getCustomShortcutEntry();
+ 
+-    void               updateShortcut();
++    bool               updateShortcut();
+     void               setSystemShortcut(const QString &key, const QString &value);
+ 
+ private:
+diff --git a/registeredSession/plugins/shortcut/type.cpp b/registeredSession/plugins/shortcut/type.cpp
+deleted file mode 100644
+index d05fb35..0000000
+--- a/registeredSession/plugins/shortcut/type.cpp
++++ /dev/null
+@@ -1,51 +0,0 @@
+-#include "type.h"
+-
+-const QDBusArgument &operator<<(QDBusArgument &argument, const QStringPair &string)
+-{
+-    argument.beginStructure();
+-    argument << string.name;
+-    argument << string.key;
+-    argument << string.mediakey;
+-    argument.endStructure();
+-    return argument;
+-}
+-
+-const QDBusArgument &operator>>(const QDBusArgument &argument, QStringPair &string)
+-{
+-    argument.beginStructure();
+-    argument >> string.name;
+-    argument >> string.key;
+-    argument >> string.mediakey;
+-    argument.endStructure();
+-    return argument;
+-}
+-
+-const QDBusArgument &operator<<(QDBusArgument &argument, const KeyEntry &key)
+-{
+-    argument.beginStructure();
+-    argument << key.gsSchema;
+-    argument << key.keyStr;
+-    argument << key.valueStr;
+-    argument << key.descStr;
+-    argument << key.gsPath;
+-    argument << key.nameStr;
+-    argument << key.bindingStr;
+-    argument << key.actionStr;
+-    argument.endStructure();
+-    return argument;
+-}
+-
+-const QDBusArgument &operator>>(const QDBusArgument &argument, KeyEntry &key)
+-{
+-    argument.beginStructure();
+-    argument >> key.gsSchema;
+-    argument >> key.keyStr;
+-    argument >> key.valueStr;
+-    argument >> key.descStr;
+-    argument >> key.gsPath;
+-    argument >> key.nameStr;
+-    argument >> key.bindingStr;
+-    argument >> key.actionStr;
+-    argument.endStructure();
+-    return argument;
+-}
+diff --git a/registeredSession/plugins/shortcut/type.h b/registeredSession/plugins/shortcut/type.h
+index 814668a..00aa7a3 100644
+--- a/registeredSession/plugins/shortcut/type.h
++++ b/registeredSession/plugins/shortcut/type.h
+@@ -1,9 +1,6 @@
+ #ifndef TYPE_H
+ #define TYPE_H
+ 
+-#include <QDBusArgument>
+-#include <QDBusMetaType>
+-
+ typedef struct _KeyEntry {
+     QString gsSchema;
+     QString keyStr;
+@@ -14,9 +11,6 @@ typedef struct _KeyEntry {
+     QString bindingStr;
+     QString actionStr;
+ }KeyEntry;
+-const QDBusArgument &operator<<(QDBusArgument &argument, const KeyEntry &key);
+-const QDBusArgument &operator>>(const QDBusArgument &argument, KeyEntry &key);
+-Q_DECLARE_METATYPE(KeyEntry)
+ 
+ typedef struct
+ {
+@@ -25,10 +19,6 @@ typedef struct
+     QString mediakey;
+ }QStringPair;
+ 
+-const QDBusArgument &operator<<(QDBusArgument &argument, const QStringPair &string);
+-const QDBusArgument &operator>>(const QDBusArgument &argument, QStringPair &string);
+-Q_DECLARE_METATYPE(QStringPair)
+-
+ typedef QList<KeyEntry> KeyEntryList;
+ typedef QList<QStringPair> QStringPairList;
+ 
+diff --git a/registeredSession/plugins/vino/vinointerface.cpp b/registeredSession/plugins/vino/vinointerface.cpp
+deleted file mode 100644
+index da94c11..0000000
+--- a/registeredSession/plugins/vino/vinointerface.cpp
++++ /dev/null
+@@ -1,129 +0,0 @@
+-#include "vinointerface.h"
+-#include <QDebug>
+-#include <QProcess>
+-
+-VinoInterface::VinoInterface()
+-{
+-    mVinoGsettings = UniversalInterface::self()->gnomeVinoGsettings();
+-    mUkuiVinoGsettings = UniversalInterface::self()->ukuiVinoGsettings();
+-
+-    mGsettingMap[kVinoViewOnlyKey] = QString("viewOnly");
+-    mGsettingMap[kVinoPromptKey] = QString("promptEnabled");
+-    mGsettingMap[kAuthenticationKey] = QString("authenticationMethods");
+-    mGsettingMap[kVncPwdKey] = QString("vncPassword");
+-    mGsettingMap[kVinoEnableKey] = QString("vinoEnabled");
+-    mGsettingMap[kXrdpEnableKey] = QString("xrdpEnabled");
+-    mGsettingMap[kEnableKey] = QString("enabled");
+-}
+-
+-bool VinoInterface::getViewOnly()
+-{
+-    if (mVinoGsettings->keys().contains("viewOnly")) {
+-        return mVinoGsettings->get(kVinoViewOnlyKey).toBool();
+-    } else {
+-        qCritical() << "mVinoGsettings not contains the key: " << kVinoViewOnlyKey;
+-    }
+-    return false;
+-}
+-
+-bool VinoInterface::getPromptEnabled()
+-{
+-    if (mVinoGsettings->keys().contains("promptEnabled")) {
+-        return mVinoGsettings->get(kVinoPromptKey).toBool();
+-    } else {
+-        qCritical() << "mVinoGsettings not contains the key: " << kVinoPromptKey;
+-    }
+-    return false;
+-}
+-
+-QString VinoInterface::getMethod()
+-{
+-    if (mVinoGsettings->keys().contains("authenticationMethods")) {
+-        return mVinoGsettings->get(kAuthenticationKey).toString();
+-    } else {
+-        qCritical() << "mVinoGsettings not contains the key: " << kAuthenticationKey;
+-    }
+-    return QString();
+-}
+-
+-QString VinoInterface::getPassword()
+-{
+-    if (mVinoGsettings->keys().contains("vncPassword")) {
+-        return mVinoGsettings->get(kVncPwdKey).toString();
+-    } else {
+-        qCritical() << "mVinoGsettings not contains the key: " << kVncPwdKey;
+-    }
+-    return QString();
+-}
+-
+-bool VinoInterface::getVinoServerStatus()
+-{
+-    QProcess process;
+-    process.start("systemctl", QStringList() << "--user" << "is-active" << "vino-server.service");
+-    process.waitForFinished();
+-    bool isActive = process.readAllStandardOutput().replace("\n", "") == "active";
+-    return isActive;
+-}
+-
+-bool VinoInterface::getVinoStatus()
+-{
+-    if (mUkuiVinoGsettings->keys().contains("vinoEnabled")) {
+-        return mUkuiVinoGsettings->get(kVinoEnableKey).toBool();
+-    } else {
+-        qCritical() << "mUkuiVinoGsettings not contains the key: " << kVinoEnableKey;
+-    }
+-    return false;
+-}
+-
+-bool VinoInterface::getXrdpStatus()
+-{
+-    if (mUkuiVinoGsettings->keys().contains("xrdpEnabled")) {
+-        return mUkuiVinoGsettings->get(kXrdpEnableKey).toBool();
+-    } else {
+-        qCritical() << "mUkuiVinoGsettings not contains the key: " << kXrdpEnableKey;
+-    }
+-    return false;
+-}
+-
+-bool VinoInterface::getEnableStatus()
+-{
+-    if (mUkuiVinoGsettings->keys().contains("enabled")) {
+-        return mUkuiVinoGsettings->get(kEnableKey).toBool();
+-    } else {
+-        qCritical() << "mUkuiVinoGsettings not contains the key: " << kEnableKey;
+-    }
+-    return false;
+-}
+-
+-void VinoInterface::setVinoKey(const QString &key, bool value)
+-{
+-    if (mVinoGsettings->keys().contains(mGsettingMap[key])) {
+-        return mVinoGsettings->set(key, value);
+-    } else {
+-        qCritical() << "mVinoGsettings not contains the key: " << key;
+-    }
+-
+-    if (mUkuiVinoGsettings->keys().contains(mGsettingMap[key])) {
+-        return mUkuiVinoGsettings->set(key, value);
+-    } else {
+-        qCritical() << "mUkuiVinoGsettings not contains the key: " << key;
+-    }
+-}
+-
+-void VinoInterface::setVinoKey(const QString &key, QString value)
+-{
+-    if (mVinoGsettings->keys().contains(mGsettingMap[key])) {
+-        return mVinoGsettings->set(key, value);
+-    } else {
+-        qCritical() << "ukuiNoticeGsettings not contains the key: " << key;
+-    }
+-}
+-
+-void VinoInterface::setVinoKey(const QString &key, QByteArray value)
+-{
+-    if (mVinoGsettings->keys().contains(mGsettingMap[key])) {
+-        return mVinoGsettings->set(key, value);
+-    } else {
+-        qCritical() << "ukuiNoticeGsettings not contains the key: " << key;
+-    }
+-}
+diff --git a/registeredSession/plugins/vino/vinointerface.h b/registeredSession/plugins/vino/vinointerface.h
+deleted file mode 100644
+index 2691edb..0000000
+--- a/registeredSession/plugins/vino/vinointerface.h
++++ /dev/null
+@@ -1,56 +0,0 @@
+-#ifndef VINOINTERFACE_H
+-#define VINOINTERFACE_H
+-
+-#include <QObject>
+-#include <QDBusArgument>
+-#include <QVariant>
+-#include <QDBusMetaType>
+-#include <QGSettings>
+-#include "../../universalinterface.h"
+-
+-class VinoInterface : public QObject
+-{
+-    Q_OBJECT
+-    Q_CLASSINFO("D-Bus Interface", "org.ukui.ukcc.session.Vino")
+-    Q_PROPERTY(bool isViewOnly READ getViewOnly)
+-    Q_PROPERTY(bool isPrompt READ getPromptEnabled)
+-    Q_PROPERTY(QString method READ getMethod)
+-    Q_PROPERTY(QString password READ getPassword)
+-    Q_PROPERTY(bool isActive READ getVinoServerStatus)
+-    Q_PROPERTY(bool isVino READ getVinoStatus)
+-    Q_PROPERTY(bool isXrdp READ getXrdpStatus)
+-    Q_PROPERTY(bool isEnable READ getEnableStatus)
+-
+-public:
+-    VinoInterface();
+-
+-protected:
+-    bool getViewOnly();
+-    bool getPromptEnabled();
+-    QString getMethod();
+-    QString getPassword();
+-    bool getVinoServerStatus();
+-    bool getVinoStatus();
+-    bool getXrdpStatus();
+-    bool getEnableStatus();
+-
+-public Q_SLOTS:
+-    void setVinoKey(const QString &key, bool value);
+-    void setVinoKey(const QString &key, QString value);
+-    void setVinoKey(const QString &key, QByteArray value);
+-
+-private:
+-    const QString kEnableKey =  "enabled";
+-    const QString kXrdpEnableKey = "xrdp-enabled";
+-    const QString kVinoEnableKey = "vino-enabled";
+-    const QString kVinoViewOnlyKey = "view-only";
+-    const QString kVinoPromptKey = "prompt-enabled";
+-    const QString kAuthenticationKey = "authentication-methods";
+-    const QString kVncPwdKey = "vnc-password";
+-
+-    QGSettings *mVinoGsettings     = nullptr;
+-    QGSettings *mUkuiVinoGsettings = nullptr;
+-    QMap <QString, QString> mGsettingMap;
+-};
+-
+-#endif // VINOINTERFACE_H
+diff --git a/registeredSession/plugins/wallpaper/wallpaperinterface.cpp b/registeredSession/plugins/wallpaper/wallpaperinterface.cpp
+index 1ca44fd..aaf3eba 100644
+--- a/registeredSession/plugins/wallpaper/wallpaperinterface.cpp
++++ b/registeredSession/plugins/wallpaper/wallpaperinterface.cpp
+@@ -3,12 +3,12 @@
+ WallpaperInterface::WallpaperInterface()
+ {
+     WorkerObject *workThread = new WorkerObject(this);
++    workThread->start();
+     connect(workThread, &WorkerObject::wallpaperReaded, this, [=](QStringList previewFiles, QStringList sourceFiles) {
+         previewWallpaperList = previewFiles;
+         sourceWallpaperList  = sourceFiles;
+     });
+-    workThread->start();
+-
++    connect(workThread, &QThread::finished, workThread, &QThread::deleteLater);
+     mWallpaperMode.clear();
+     QString filename = UniversalInterface::self()->mateBackgroundGsettings()->get("picture-filename").toString();
+     if (filename.isEmpty()) {
+@@ -54,6 +54,7 @@ WallpaperInterface::WallpaperInterface()
+             Q_EMIT changed("wallpaper");
+         }
+     });
++    workThread->wait();
+ }
+ 
+ WallpaperInterface::~WallpaperInterface()
+diff --git a/registeredSession/plugins/wallpaper/xmlhandle.cpp b/registeredSession/plugins/wallpaper/xmlhandle.cpp
+index 34ffea9..8654355 100644
+--- a/registeredSession/plugins/wallpaper/xmlhandle.cpp
++++ b/registeredSession/plugins/wallpaper/xmlhandle.cpp
+@@ -245,54 +245,3 @@ void XmlHandle::_xmlGenerate(){
+ 
+     file.close();
+ }
+-
+-void XmlHandle::xmlUpdate(QMap<QString, QMap<QString, QString> > wallpaperinfosMap){
+-    QFile file(localconf);
+-    if (!file.open(QFile::WriteOnly | QFile::Text)){
+-        qDebug() << "Error Open XML File When Update Local Xml: " << file.errorString();
+-        return;
+-    }
+-
+-    if (0 == wallpaperinfosMap.count()){
+-        qDebug() << "Error QMap Empty";
+-        return;
+-    }
+-
+-    QMap<QString, QString> currentheadMap;
+-    currentheadMap =  wallpaperinfosMap.find("head").value();
+-
+-    QXmlStreamWriter writer;
+-    writer.setDevice(&file);
+-    writer.setAutoFormatting(true); //自动格式化
+-//    writer.setCodec(headMap.find("encoding"));
+-    writer.writeStartDocument(QString(currentheadMap.find("version").value()), false);
+-
+-    //DTD
+-    writer.writeDTD(QString::fromLocal8Bit("<!DOCTYPE %1 SYSTEM \"%2\">").arg(currentheadMap.find("doctype").value()).arg(currentheadMap.find("system").value()));
+-
+-    //BODY
+-    writer.writeStartElement("wallpapers");
+-    QMap<QString, QMap<QString, QString> >::iterator its = wallpaperinfosMap.begin();
+-    for (; its != wallpaperinfosMap.end(); its++){
+-        if (QString(its.key()) == "head")
+-            continue;
+-
+-        QMap<QString, QString> sourceMap = (QMap<QString, QString>)its.value();
+-        QMap<QString, QString>::iterator it = sourceMap.begin();
+-
+-        writer.writeStartElement("wallpaper");
+-        writer.writeAttribute("deleted", QString(sourceMap.find("deleted").value()));
+-
+-        for(; it != sourceMap.end(); it++){
+-            if (it.key() == "deleted")
+-                continue;
+-            writer.writeTextElement(QString(it.key()), QString(it.value()));
+-        }
+-
+-        writer.writeEndElement();
+-    }
+-    writer.writeEndElement();
+-    writer.writeEndDocument();
+-
+-    file.close();
+-}
+diff --git a/registeredSession/plugins/wallpaper/xmlhandle.h b/registeredSession/plugins/wallpaper/xmlhandle.h
+index 97f4a76..77ac8cf 100644
+--- a/registeredSession/plugins/wallpaper/xmlhandle.h
++++ b/registeredSession/plugins/wallpaper/xmlhandle.h
+@@ -38,7 +38,6 @@ public:
+ public:
+     void init();
+     void xmlreader(QString filename);
+-    void xmlUpdate(QMap<QString, QMap<QString, QString>> wallpaperinfosMap);
+     QMap<QString, QMap<QString, QString> > requireXmlData();
+ 
+ public:
+diff --git a/registeredSession/registeredSession.pro b/registeredSession/registeredSession.pro
+index 9189016..b1420dd 100644
+--- a/registeredSession/registeredSession.pro
++++ b/registeredSession/registeredSession.pro
+@@ -52,8 +52,6 @@ SOURCES += \
+         plugins/screensaver/screensaverinterface.cpp \
+         plugins/shortcut/getshortcutworker.cpp \
+         plugins/shortcut/shortcutinterface.cpp \
+-        plugins/shortcut/type.cpp \
+-        plugins/vino/vinointerface.cpp \
+         plugins/wallpaper/wallpaperinterface.cpp \
+         plugins/wallpaper/workerobject.cpp \
+         plugins/wallpaper/xmlhandle.cpp \
+@@ -78,7 +76,6 @@ HEADERS += \
+         plugins/shortcut/getshortcutworker.h \
+         plugins/shortcut/shortcutinterface.h \
+         plugins/shortcut/type.h \
+-        plugins/vino/vinointerface.h \
+         plugins/wallpaper/wallpaperinterface.h \
+         plugins/wallpaper/workerobject.h \
+         plugins/wallpaper/xmlhandle.h \
+diff --git a/tests/unit_test_datetime/unit_test_datetime.cpp b/tests/unit_test_datetime/unit_test_datetime.cpp
+index 32ae84a..c326b3a 100644
+--- a/tests/unit_test_datetime/unit_test_datetime.cpp
++++ b/tests/unit_test_datetime/unit_test_datetime.cpp
+@@ -94,3 +94,25 @@ TEST_F(DatetimeInterfaceTest, getNtpServers)
+    QStringList ret = m_pDatetimeInterface->getNtpServers();
+    ASSERT_STREQ(ret.at(0).toStdString().c_str(), "pool.ntp.org");
+ }
++
++TEST_F(DatetimeInterfaceTest, timezoneChanged)
++{
++   bool ret = m_pDatetimeInterface->timezoneChanged("timezone");
++   ASSERT_EQ(ret, true);
++}
++
++TEST_F(DatetimeInterfaceTest, getTimeMode)
++{
++   QString ret = m_pDatetimeInterface->getTimeMode();
++   if (ret == "automatic") {
++   	ASSERT_STREQ(ret.toStdString().c_str(), "automatic");
++   } else {
++   	ASSERT_STREQ(ret.toStdString().c_str(), "manual");
++   }
++}
++
++TEST_F(DatetimeInterfaceTest, getNtpServer)
++{
++   QString ret = m_pDatetimeInterface->getNtpServer();
++   ASSERT_GE(ret.size(), 0);
++}
+diff --git a/tests/unit_test_screenlock/unit_test_screenlock.cpp b/tests/unit_test_screenlock/unit_test_screenlock.cpp
+index c2bcee4..58f9314 100644
+--- a/tests/unit_test_screenlock/unit_test_screenlock.cpp
++++ b/tests/unit_test_screenlock/unit_test_screenlock.cpp
+@@ -32,6 +32,10 @@ protected:
+ 
+     static void TearDownTestSuite()
+     {
++        if (m_pScreenlockInterface) {
++	    delete m_pScreenlockInterface;
++	    m_pScreenlockInterface = nullptr;
++	}
+     }
+ 
+     static ScreenlockInterface *m_pScreenlockInterface;
+@@ -80,3 +84,9 @@ TEST_F(ScreenlockInterfaceTest, getSourceWallpapers)
+     int size = m_pScreenlockInterface->getSourceWallpapers().size();
+     ASSERT_GE(size, 0);
+ }
++
++TEST_F(ScreenlockInterfaceTest, getWallpaper)
++{
++    int size = m_pScreenlockInterface->getWallpaper().size();
++    ASSERT_GE(size, 0);
++}
+diff --git a/tests/unit_test_shortcut/unit_test_shortcut.cpp b/tests/unit_test_shortcut/unit_test_shortcut.cpp
+index 4c38573..8315ff2 100644
+--- a/tests/unit_test_shortcut/unit_test_shortcut.cpp
++++ b/tests/unit_test_shortcut/unit_test_shortcut.cpp
+@@ -20,7 +20,6 @@
+ #include <gtest/gtest.h>
+ #include <gtest/gtest-death-test.h>
+ #include "../../registeredSession/plugins/shortcut/shortcutinterface.h"
+-#include "../../registeredSession/plugins/shortcut/type.h"
+ 
+ class ShortcutInterfaceTest : public testing::Test
+ {
+@@ -33,10 +32,6 @@ protected:
+ 
+     static void TearDownTestSuite()
+     {
+-        if (m_pShortcutInterface) {
+-            delete m_pShortcutInterface;
+-            m_pShortcutInterface = nullptr;
+-        }
+     }
+ 
+     static ShortcutInterface *m_pShortcutInterface;
+@@ -76,6 +71,12 @@ TEST_F(ShortcutInterfaceTest, getShowShortcutString)
+     ASSERT_GE(newShortKey.toStdString().c_str(), "Win+A");
+ }
+ 
++TEST_F(ShortcutInterfaceTest, updateShortcut)
++{
++    bool ret = m_pShortcutInterface->updateShortcut();
++    ASSERT_EQ(ret, true);
++}
++
+ TEST_F(ShortcutInterfaceTest, setSystemShortcut)
+ {
+     QGSettings generalShort("org.ukui.SettingsDaemon.plugins.media-keys");
+diff --git a/tests/unit_test_shortcut/unit_test_shortcut.pro b/tests/unit_test_shortcut/unit_test_shortcut.pro
+index 23bee08..7e0df90 100644
+--- a/tests/unit_test_shortcut/unit_test_shortcut.pro
++++ b/tests/unit_test_shortcut/unit_test_shortcut.pro
+@@ -38,13 +38,9 @@ INCLUDEPATH += $$PROJECT_ROOTDIR \
+ 
+ SOURCES += ../../registeredSession/plugins/shortcut/shortcutinterface.cpp \
+ 	   ../../registeredSession/plugins/shortcut/getshortcutworker.cpp \
+-	   ../../registeredSession/plugins/shortcut/type.cpp \
+-           ../../registeredSession/universalinterface.cpp \
+            unit_test_shortcut.cpp \
+            main.cpp
+ 
+ HEADERS += ../../registeredSession/plugins/shortcut/shortcutinterface.h \
+            ../../registeredSession/plugins/shortcut/getshortcutworker.h \
+            ../../registeredSession/plugins/shortcut/type.h \
+-           ../../registeredSession/universalinterface.h
+-
+diff --git a/tests/unit_test_wallpaper/unit_test_wallpaper.cpp b/tests/unit_test_wallpaper/unit_test_wallpaper.cpp
+index b450cd6..142e008 100644
+--- a/tests/unit_test_wallpaper/unit_test_wallpaper.cpp
++++ b/tests/unit_test_wallpaper/unit_test_wallpaper.cpp
+@@ -32,6 +32,10 @@ protected:
+ 
+     static void TearDownTestSuite()
+     {
++	if (m_pWallpaperInterface) {
++	     delete m_pWallpaperInterface;
++	     m_pWallpaperInterface = nullptr;
++	}
+     }
+ 
+     static WallpaperInterface* m_pWallpaperInterface;
+@@ -43,6 +47,7 @@ TEST_F(WallpaperInterfaceTest, getWallpaperMode)
+ {
+     QGSettings gset("org.mate.background");
+     QString oldValue = gset.get("picture-filename").toString();
++    m_pWallpaperInterface->getWallpaper();
+     std::string curValue = m_pWallpaperInterface->getWallpaperMode().toStdString();
+     if (oldValue.isEmpty()) {
+         ASSERT_STREQ(curValue.c_str(), "color");
+@@ -51,18 +56,45 @@ TEST_F(WallpaperInterfaceTest, getWallpaperMode)
+     }
+ }
+ 
+-TEST_F(WallpaperInterfaceTest, setWallpaper)
++TEST_F(WallpaperInterfaceTest, setWallpaperPicture)
+ {
+     QGSettings gset("org.mate.background");
+     QString oldValue = gset.get("picture-filename").toString();
++    QString mode = "picture";
++    QString colorData = "";
++    if (oldValue.isEmpty()) {
++	mode = "color";
++    	colorData = gset.get("primary-color").toString();
++    }
+     std::string wallpaperMode = m_pWallpaperInterface->getWallpaperMode().toStdString();
+-    if (!oldValue.isEmpty()) {
+-        m_pWallpaperInterface->setWallpaper("picture", "/usr/share/backgrounds/city.jpg");
+-        std::string newValue = gset.get("picture-filename").toString().toStdString();
+-        ASSERT_STREQ(newValue.c_str(), "/usr/share/backgrounds/city.jpg");
++    m_pWallpaperInterface->setWallpaper("picture", "/usr/share/backgrounds/city.jpg");
++    std::string newValue = gset.get("picture-filename").toString().toStdString();
++    ASSERT_STREQ(newValue.c_str(), "/usr/share/backgrounds/city.jpg");
++    if (mode == "color") {
++        m_pWallpaperInterface->setWallpaper("color", colorData.toStdString().c_str());
++    } else {
+         m_pWallpaperInterface->setWallpaper("picture", oldValue.toStdString().c_str());
++    }
++}
++
++TEST_F(WallpaperInterfaceTest, setWallpaperColor)
++{
++    QGSettings gset("org.mate.background");
++    QString oldValue = gset.get("picture-filename").toString();
++    QString mode = "picture";
++    QString colorData = "";
++    if (oldValue.isEmpty()) {
++	mode = "color";
++    	colorData = gset.get("primary-color").toString();
++    }
++    std::string wallpaperMode = m_pWallpaperInterface->getWallpaperMode().toStdString();
++    m_pWallpaperInterface->setWallpaper("color", "#2d7d9a");
++    std::string newValue = gset.get("primary-color").toString().toStdString();
++    ASSERT_STREQ(newValue.c_str(), "#2d7d9a");
++    if (mode == "color") {
++        m_pWallpaperInterface->setWallpaper("color", colorData.toStdString().c_str());
+     } else {
+-        ASSERT_STREQ(wallpaperMode.c_str(), "color");
++        m_pWallpaperInterface->setWallpaper("picture", oldValue.toStdString().c_str());
+     }
+ }
+ 
diff -Nru ukui-control-center-4.10.0.0/debian/patches/0122-142-vino.patch ukui-control-center-4.10.0.0/debian/patches/0122-142-vino.patch
--- ukui-control-center-4.10.0.0/debian/patches/0122-142-vino.patch	1970-01-01 08:00:00.000000000 +0800
+++ ukui-control-center-4.10.0.0/debian/patches/0122-142-vino.patch	2025-02-07 16:32:50.000000000 +0800
@@ -0,0 +1,251 @@
+From: nil <zhoubin@kylinos.cn>
+Date: Wed, 15 Jan 2025 09:11:00 +0000
+Subject: =?utf-8?b?ITE0MiDmm7TmlrB2aW5vIE1lcmdlIHB1bGwgcmVxdWVzdCAhMTQyIGZy?=
+ =?utf-8?b?b20g6IuP5Zej5YW4L29wZW5reWxpbi9uaWxlLTExMDc=?=
+
+---
+ registeredSession/main.cpp                       |   2 +
+ registeredSession/plugins/vino/vinointerface.cpp | 129 +++++++++++++++++++++++
+ registeredSession/plugins/vino/vinointerface.h   |  56 ++++++++++
+ registeredSession/registeredSession.pro          |   2 +
+ 4 files changed, 189 insertions(+)
+ create mode 100644 registeredSession/plugins/vino/vinointerface.cpp
+ create mode 100644 registeredSession/plugins/vino/vinointerface.h
+
+diff --git a/registeredSession/main.cpp b/registeredSession/main.cpp
+index 357580e..68f458a 100644
+--- a/registeredSession/main.cpp
++++ b/registeredSession/main.cpp
+@@ -9,6 +9,7 @@
+ 
+ #include "plugins/keyboard/keyboardinterface.h"
+ #include "plugins/mouse/mouseinterface.h"
++#include "plugins/vino/vinointerface.h"
+ #include "plugins/area/areainterface.h"
+ #include "plugins/default/defaultinterface.h"
+ #include "plugins/autoboot/autostartinterface.h"
+@@ -64,6 +65,7 @@ int main(int argc, char *argv[])
+     plugins["/Screenlock"] = new ScreenlockInterface;
+     plugins["/Shortcut"] = new ShortcutInterface;
+     plugins["/Screensaver"] = new ScreensaverInterface;
++    plugins["/Vino"] = new VinoInterface;
+ 
+     for (std::map<QString, QObject*>::value_type plugin : plugins)
+         registerPlugins(plugin.first, plugin.second, sessionBus);
+diff --git a/registeredSession/plugins/vino/vinointerface.cpp b/registeredSession/plugins/vino/vinointerface.cpp
+new file mode 100644
+index 0000000..da94c11
+--- /dev/null
++++ b/registeredSession/plugins/vino/vinointerface.cpp
+@@ -0,0 +1,129 @@
++#include "vinointerface.h"
++#include <QDebug>
++#include <QProcess>
++
++VinoInterface::VinoInterface()
++{
++    mVinoGsettings = UniversalInterface::self()->gnomeVinoGsettings();
++    mUkuiVinoGsettings = UniversalInterface::self()->ukuiVinoGsettings();
++
++    mGsettingMap[kVinoViewOnlyKey] = QString("viewOnly");
++    mGsettingMap[kVinoPromptKey] = QString("promptEnabled");
++    mGsettingMap[kAuthenticationKey] = QString("authenticationMethods");
++    mGsettingMap[kVncPwdKey] = QString("vncPassword");
++    mGsettingMap[kVinoEnableKey] = QString("vinoEnabled");
++    mGsettingMap[kXrdpEnableKey] = QString("xrdpEnabled");
++    mGsettingMap[kEnableKey] = QString("enabled");
++}
++
++bool VinoInterface::getViewOnly()
++{
++    if (mVinoGsettings->keys().contains("viewOnly")) {
++        return mVinoGsettings->get(kVinoViewOnlyKey).toBool();
++    } else {
++        qCritical() << "mVinoGsettings not contains the key: " << kVinoViewOnlyKey;
++    }
++    return false;
++}
++
++bool VinoInterface::getPromptEnabled()
++{
++    if (mVinoGsettings->keys().contains("promptEnabled")) {
++        return mVinoGsettings->get(kVinoPromptKey).toBool();
++    } else {
++        qCritical() << "mVinoGsettings not contains the key: " << kVinoPromptKey;
++    }
++    return false;
++}
++
++QString VinoInterface::getMethod()
++{
++    if (mVinoGsettings->keys().contains("authenticationMethods")) {
++        return mVinoGsettings->get(kAuthenticationKey).toString();
++    } else {
++        qCritical() << "mVinoGsettings not contains the key: " << kAuthenticationKey;
++    }
++    return QString();
++}
++
++QString VinoInterface::getPassword()
++{
++    if (mVinoGsettings->keys().contains("vncPassword")) {
++        return mVinoGsettings->get(kVncPwdKey).toString();
++    } else {
++        qCritical() << "mVinoGsettings not contains the key: " << kVncPwdKey;
++    }
++    return QString();
++}
++
++bool VinoInterface::getVinoServerStatus()
++{
++    QProcess process;
++    process.start("systemctl", QStringList() << "--user" << "is-active" << "vino-server.service");
++    process.waitForFinished();
++    bool isActive = process.readAllStandardOutput().replace("\n", "") == "active";
++    return isActive;
++}
++
++bool VinoInterface::getVinoStatus()
++{
++    if (mUkuiVinoGsettings->keys().contains("vinoEnabled")) {
++        return mUkuiVinoGsettings->get(kVinoEnableKey).toBool();
++    } else {
++        qCritical() << "mUkuiVinoGsettings not contains the key: " << kVinoEnableKey;
++    }
++    return false;
++}
++
++bool VinoInterface::getXrdpStatus()
++{
++    if (mUkuiVinoGsettings->keys().contains("xrdpEnabled")) {
++        return mUkuiVinoGsettings->get(kXrdpEnableKey).toBool();
++    } else {
++        qCritical() << "mUkuiVinoGsettings not contains the key: " << kXrdpEnableKey;
++    }
++    return false;
++}
++
++bool VinoInterface::getEnableStatus()
++{
++    if (mUkuiVinoGsettings->keys().contains("enabled")) {
++        return mUkuiVinoGsettings->get(kEnableKey).toBool();
++    } else {
++        qCritical() << "mUkuiVinoGsettings not contains the key: " << kEnableKey;
++    }
++    return false;
++}
++
++void VinoInterface::setVinoKey(const QString &key, bool value)
++{
++    if (mVinoGsettings->keys().contains(mGsettingMap[key])) {
++        return mVinoGsettings->set(key, value);
++    } else {
++        qCritical() << "mVinoGsettings not contains the key: " << key;
++    }
++
++    if (mUkuiVinoGsettings->keys().contains(mGsettingMap[key])) {
++        return mUkuiVinoGsettings->set(key, value);
++    } else {
++        qCritical() << "mUkuiVinoGsettings not contains the key: " << key;
++    }
++}
++
++void VinoInterface::setVinoKey(const QString &key, QString value)
++{
++    if (mVinoGsettings->keys().contains(mGsettingMap[key])) {
++        return mVinoGsettings->set(key, value);
++    } else {
++        qCritical() << "ukuiNoticeGsettings not contains the key: " << key;
++    }
++}
++
++void VinoInterface::setVinoKey(const QString &key, QByteArray value)
++{
++    if (mVinoGsettings->keys().contains(mGsettingMap[key])) {
++        return mVinoGsettings->set(key, value);
++    } else {
++        qCritical() << "ukuiNoticeGsettings not contains the key: " << key;
++    }
++}
+diff --git a/registeredSession/plugins/vino/vinointerface.h b/registeredSession/plugins/vino/vinointerface.h
+new file mode 100644
+index 0000000..2691edb
+--- /dev/null
++++ b/registeredSession/plugins/vino/vinointerface.h
+@@ -0,0 +1,56 @@
++#ifndef VINOINTERFACE_H
++#define VINOINTERFACE_H
++
++#include <QObject>
++#include <QDBusArgument>
++#include <QVariant>
++#include <QDBusMetaType>
++#include <QGSettings>
++#include "../../universalinterface.h"
++
++class VinoInterface : public QObject
++{
++    Q_OBJECT
++    Q_CLASSINFO("D-Bus Interface", "org.ukui.ukcc.session.Vino")
++    Q_PROPERTY(bool isViewOnly READ getViewOnly)
++    Q_PROPERTY(bool isPrompt READ getPromptEnabled)
++    Q_PROPERTY(QString method READ getMethod)
++    Q_PROPERTY(QString password READ getPassword)
++    Q_PROPERTY(bool isActive READ getVinoServerStatus)
++    Q_PROPERTY(bool isVino READ getVinoStatus)
++    Q_PROPERTY(bool isXrdp READ getXrdpStatus)
++    Q_PROPERTY(bool isEnable READ getEnableStatus)
++
++public:
++    VinoInterface();
++
++protected:
++    bool getViewOnly();
++    bool getPromptEnabled();
++    QString getMethod();
++    QString getPassword();
++    bool getVinoServerStatus();
++    bool getVinoStatus();
++    bool getXrdpStatus();
++    bool getEnableStatus();
++
++public Q_SLOTS:
++    void setVinoKey(const QString &key, bool value);
++    void setVinoKey(const QString &key, QString value);
++    void setVinoKey(const QString &key, QByteArray value);
++
++private:
++    const QString kEnableKey =  "enabled";
++    const QString kXrdpEnableKey = "xrdp-enabled";
++    const QString kVinoEnableKey = "vino-enabled";
++    const QString kVinoViewOnlyKey = "view-only";
++    const QString kVinoPromptKey = "prompt-enabled";
++    const QString kAuthenticationKey = "authentication-methods";
++    const QString kVncPwdKey = "vnc-password";
++
++    QGSettings *mVinoGsettings     = nullptr;
++    QGSettings *mUkuiVinoGsettings = nullptr;
++    QMap <QString, QString> mGsettingMap;
++};
++
++#endif // VINOINTERFACE_H
+diff --git a/registeredSession/registeredSession.pro b/registeredSession/registeredSession.pro
+index b1420dd..a2e7b05 100644
+--- a/registeredSession/registeredSession.pro
++++ b/registeredSession/registeredSession.pro
+@@ -53,6 +53,7 @@ SOURCES += \
+         plugins/shortcut/getshortcutworker.cpp \
+         plugins/shortcut/shortcutinterface.cpp \
+         plugins/wallpaper/wallpaperinterface.cpp \
++        plugins/vino/vinointerface.cpp \
+         plugins/wallpaper/workerobject.cpp \
+         plugins/wallpaper/xmlhandle.cpp \
+         ukccsessionserver.cpp \
+@@ -77,6 +78,7 @@ HEADERS += \
+         plugins/shortcut/shortcutinterface.h \
+         plugins/shortcut/type.h \
+         plugins/wallpaper/wallpaperinterface.h \
++        plugins/vino/vinointerface.h \
+         plugins/wallpaper/workerobject.h \
+         plugins/wallpaper/xmlhandle.h \
+         screenStruct.h \
diff -Nru ukui-control-center-4.10.0.0/debian/patches/0123-143-380927-v11-2501.patch ukui-control-center-4.10.0.0/debian/patches/0123-143-380927-v11-2501.patch
--- ukui-control-center-4.10.0.0/debian/patches/0123-143-380927-v11-2501.patch	1970-01-01 08:00:00.000000000 +0800
+++ ukui-control-center-4.10.0.0/debian/patches/0123-143-380927-v11-2501.patch	2025-02-07 16:32:50.000000000 +0800
@@ -0,0 +1,529 @@
+From: nil <zhoubin@kylinos.cn>
+Date: Mon, 20 Jan 2025 08:10:02 +0000
+Subject: =?utf-8?b?ITE0MyAzODA5MjfjgJB2MTEtMjUwMeOAkeWNleWFg+a1i+ivlSDmjqc=?=
+ =?utf-8?b?5Yi26Z2i5p2/IE1lcmdlIHB1bGwgcmVxdWVzdCAhMTQzIGZyb20g5L2V5oCd6IOc?=
+ =?utf-8?b?L25pbGU=?=
+
+---
+ plugins/devices/mouse/mouse.cpp                    |   4 +-
+ registeredSession/plugins/mouse/mouseinterface.cpp |   9 +
+ registeredSession/plugins/mouse/mouseinterface.h   |   2 +-
+ registeredSession/plugins/vino/vinointerface.cpp   |  22 +-
+ registeredSession/plugins/vino/vinointerface.h     |  15 +-
+ tests/tests.pro                                    |   1 +
+ tests/unit_test_vino/main.cpp                      |   8 +
+ tests/unit_test_vino/unit_test_vino.cpp            | 244 +++++++++++++++++++++
+ tests/unit_test_vino/unit_test_vino.pro            |  40 ++++
+ 9 files changed, 323 insertions(+), 22 deletions(-)
+ create mode 100644 tests/unit_test_vino/main.cpp
+ create mode 100644 tests/unit_test_vino/unit_test_vino.cpp
+ create mode 100644 tests/unit_test_vino/unit_test_vino.pro
+
+diff --git a/plugins/devices/mouse/mouse.cpp b/plugins/devices/mouse/mouse.cpp
+index 1983540..63811b3 100644
+--- a/plugins/devices/mouse/mouse.cpp
++++ b/plugins/devices/mouse/mouse.cpp
+@@ -320,10 +320,10 @@ void Mouse::blinkCursorOnTextSlot(bool checked)
+     mouseDbus->call("setCursorBlink", checked);
+ 
+     if (!checked) {
+-        mouseDbus->call("setCursorSpeed", 0);
++        mouseDbus->call("setStyleCursorSpeed", 0);
+     } else {
+         int mValue = mouseWidget->cursorSpeedWidget()->slider()->maximum() - mouseWidget->cursorSpeedWidget()->slider()->value() + mouseWidget->cursorSpeedWidget()->slider()->minimum();
+-        mouseDbus->call("setCursorSpeed", mValue);
++        mouseDbus->call("setStyleCursorSpeed", mValue);
+     }
+ 
+     UkccCommon::buriedSettings(name(), mouseWidget->cursorSpeedWidget()->objectName(), QString("settings"), checked ? "true":"false");
+diff --git a/registeredSession/plugins/mouse/mouseinterface.cpp b/registeredSession/plugins/mouse/mouseinterface.cpp
+index 78b3fda..dfd16d5 100644
+--- a/registeredSession/plugins/mouse/mouseinterface.cpp
++++ b/registeredSession/plugins/mouse/mouseinterface.cpp
+@@ -251,6 +251,15 @@ void MouseInterface::setCursorSpeed(const int value)
+     }
+ }
+ 
++void MouseInterface::setStyleCursorSpeed(const int value)
++{
++    if (ukuiStyleGsettings->keys().contains(CURSOR_BLINK_KEY)) {
++        ukuiStyleGsettings->set("cursor-blink-time", value);
++    } else {
++        qCritical() << "ukuiStyleGsettings not contains the key: " << CURSOR_BLINK_KEY;
++    }
++}
++
+ void MouseInterface::resetKey(QString key)
+ {
+     if (key == "wheelSpeed") {
+diff --git a/registeredSession/plugins/mouse/mouseinterface.h b/registeredSession/plugins/mouse/mouseinterface.h
+index 9007ca4..14b9ece 100644
+--- a/registeredSession/plugins/mouse/mouseinterface.h
++++ b/registeredSession/plugins/mouse/mouseinterface.h
+@@ -67,9 +67,9 @@ public Q_SLOTS:
+     void setPointerSize(const int value);
+     void setCursorBlink(const bool checked);
+     void setCursorSpeed(const int value);
++    void setStyleCursorSpeed(const int value);
+ 
+     void resetKey(QString key);
+-
+ Q_SIGNALS:
+     void changed(QString keyName);
+ 
+diff --git a/registeredSession/plugins/vino/vinointerface.cpp b/registeredSession/plugins/vino/vinointerface.cpp
+index da94c11..3aad696 100644
+--- a/registeredSession/plugins/vino/vinointerface.cpp
++++ b/registeredSession/plugins/vino/vinointerface.cpp
+@@ -18,7 +18,7 @@ VinoInterface::VinoInterface()
+ 
+ bool VinoInterface::getViewOnly()
+ {
+-    if (mVinoGsettings->keys().contains("viewOnly")) {
++    if (mVinoGsettings != nullptr && mVinoGsettings->keys().contains("viewOnly")) {
+         return mVinoGsettings->get(kVinoViewOnlyKey).toBool();
+     } else {
+         qCritical() << "mVinoGsettings not contains the key: " << kVinoViewOnlyKey;
+@@ -28,7 +28,7 @@ bool VinoInterface::getViewOnly()
+ 
+ bool VinoInterface::getPromptEnabled()
+ {
+-    if (mVinoGsettings->keys().contains("promptEnabled")) {
++    if (mVinoGsettings != nullptr && mVinoGsettings->keys().contains("promptEnabled")) {
+         return mVinoGsettings->get(kVinoPromptKey).toBool();
+     } else {
+         qCritical() << "mVinoGsettings not contains the key: " << kVinoPromptKey;
+@@ -38,7 +38,7 @@ bool VinoInterface::getPromptEnabled()
+ 
+ QString VinoInterface::getMethod()
+ {
+-    if (mVinoGsettings->keys().contains("authenticationMethods")) {
++    if (mVinoGsettings != nullptr && mVinoGsettings->keys().contains("authenticationMethods")) {
+         return mVinoGsettings->get(kAuthenticationKey).toString();
+     } else {
+         qCritical() << "mVinoGsettings not contains the key: " << kAuthenticationKey;
+@@ -48,7 +48,7 @@ QString VinoInterface::getMethod()
+ 
+ QString VinoInterface::getPassword()
+ {
+-    if (mVinoGsettings->keys().contains("vncPassword")) {
++    if (mVinoGsettings != nullptr && mVinoGsettings->keys().contains("vncPassword")) {
+         return mVinoGsettings->get(kVncPwdKey).toString();
+     } else {
+         qCritical() << "mVinoGsettings not contains the key: " << kVncPwdKey;
+@@ -67,7 +67,7 @@ bool VinoInterface::getVinoServerStatus()
+ 
+ bool VinoInterface::getVinoStatus()
+ {
+-    if (mUkuiVinoGsettings->keys().contains("vinoEnabled")) {
++    if (mVinoGsettings != nullptr && mUkuiVinoGsettings->keys().contains("vinoEnabled")) {
+         return mUkuiVinoGsettings->get(kVinoEnableKey).toBool();
+     } else {
+         qCritical() << "mUkuiVinoGsettings not contains the key: " << kVinoEnableKey;
+@@ -77,7 +77,7 @@ bool VinoInterface::getVinoStatus()
+ 
+ bool VinoInterface::getXrdpStatus()
+ {
+-    if (mUkuiVinoGsettings->keys().contains("xrdpEnabled")) {
++    if (mVinoGsettings != nullptr && mUkuiVinoGsettings->keys().contains("xrdpEnabled")) {
+         return mUkuiVinoGsettings->get(kXrdpEnableKey).toBool();
+     } else {
+         qCritical() << "mUkuiVinoGsettings not contains the key: " << kXrdpEnableKey;
+@@ -87,7 +87,7 @@ bool VinoInterface::getXrdpStatus()
+ 
+ bool VinoInterface::getEnableStatus()
+ {
+-    if (mUkuiVinoGsettings->keys().contains("enabled")) {
++    if (mVinoGsettings != nullptr && mUkuiVinoGsettings->keys().contains("enabled")) {
+         return mUkuiVinoGsettings->get(kEnableKey).toBool();
+     } else {
+         qCritical() << "mUkuiVinoGsettings not contains the key: " << kEnableKey;
+@@ -97,13 +97,13 @@ bool VinoInterface::getEnableStatus()
+ 
+ void VinoInterface::setVinoKey(const QString &key, bool value)
+ {
+-    if (mVinoGsettings->keys().contains(mGsettingMap[key])) {
++    if (mVinoGsettings != nullptr && mVinoGsettings->keys().contains(mGsettingMap[key])) {
+         return mVinoGsettings->set(key, value);
+     } else {
+         qCritical() << "mVinoGsettings not contains the key: " << key;
+     }
+ 
+-    if (mUkuiVinoGsettings->keys().contains(mGsettingMap[key])) {
++    if (mUkuiVinoGsettings != nullptr && mUkuiVinoGsettings->keys().contains(mGsettingMap[key])) {
+         return mUkuiVinoGsettings->set(key, value);
+     } else {
+         qCritical() << "mUkuiVinoGsettings not contains the key: " << key;
+@@ -112,7 +112,7 @@ void VinoInterface::setVinoKey(const QString &key, bool value)
+ 
+ void VinoInterface::setVinoKey(const QString &key, QString value)
+ {
+-    if (mVinoGsettings->keys().contains(mGsettingMap[key])) {
++    if (mVinoGsettings != nullptr && mVinoGsettings->keys().contains(mGsettingMap[key])) {
+         return mVinoGsettings->set(key, value);
+     } else {
+         qCritical() << "ukuiNoticeGsettings not contains the key: " << key;
+@@ -121,7 +121,7 @@ void VinoInterface::setVinoKey(const QString &key, QString value)
+ 
+ void VinoInterface::setVinoKey(const QString &key, QByteArray value)
+ {
+-    if (mVinoGsettings->keys().contains(mGsettingMap[key])) {
++    if (mVinoGsettings != nullptr && mVinoGsettings->keys().contains(mGsettingMap[key])) {
+         return mVinoGsettings->set(key, value);
+     } else {
+         qCritical() << "ukuiNoticeGsettings not contains the key: " << key;
+diff --git a/registeredSession/plugins/vino/vinointerface.h b/registeredSession/plugins/vino/vinointerface.h
+index 2691edb..83252b8 100644
+--- a/registeredSession/plugins/vino/vinointerface.h
++++ b/registeredSession/plugins/vino/vinointerface.h
+@@ -5,7 +5,6 @@
+ #include <QDBusArgument>
+ #include <QVariant>
+ #include <QDBusMetaType>
+-#include <QGSettings>
+ #include "../../universalinterface.h"
+ 
+ class VinoInterface : public QObject
+@@ -40,13 +39,13 @@ public Q_SLOTS:
+     void setVinoKey(const QString &key, QByteArray value);
+ 
+ private:
+-    const QString kEnableKey =  "enabled";
+-    const QString kXrdpEnableKey = "xrdp-enabled";
+-    const QString kVinoEnableKey = "vino-enabled";
+-    const QString kVinoViewOnlyKey = "view-only";
+-    const QString kVinoPromptKey = "prompt-enabled";
+-    const QString kAuthenticationKey = "authentication-methods";
+-    const QString kVncPwdKey = "vnc-password";
++    QString kEnableKey =  "enabled";
++    QString kXrdpEnableKey = "xrdp-enabled";
++    QString kVinoEnableKey = "vino-enabled";
++    QString kVinoViewOnlyKey = "view-only";
++    QString kVinoPromptKey = "prompt-enabled";
++    QString kAuthenticationKey = "authentication-methods";
++    QString kVncPwdKey = "vnc-password";
+ 
+     QGSettings *mVinoGsettings     = nullptr;
+     QGSettings *mUkuiVinoGsettings = nullptr;
+diff --git a/tests/tests.pro b/tests/tests.pro
+index 7f1158d..31ce3a6 100644
+--- a/tests/tests.pro
++++ b/tests/tests.pro
+@@ -11,6 +11,7 @@ SUBDIRS = unit_test_keyboard \
+           unit_test_screensaver \
+           unit_test_shortcut \
+           unit_test_wallpaper \
++          unit_test_vino \
+ 
+ 
+ # 打桩工具
+diff --git a/tests/unit_test_vino/main.cpp b/tests/unit_test_vino/main.cpp
+new file mode 100644
+index 0000000..9250f9b
+--- /dev/null
++++ b/tests/unit_test_vino/main.cpp
+@@ -0,0 +1,8 @@
++#include <gtest/gtest.h>
++
++int main(int argc, char **argv)
++{
++    testing::InitGoogleTest(&argc, argv);
++
++    return RUN_ALL_TESTS();
++}
+diff --git a/tests/unit_test_vino/unit_test_vino.cpp b/tests/unit_test_vino/unit_test_vino.cpp
+new file mode 100644
+index 0000000..320819c
+--- /dev/null
++++ b/tests/unit_test_vino/unit_test_vino.cpp
+@@ -0,0 +1,244 @@
++/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
++ *
++ * Copyright (C) 2024 KylinSoft  Co., Ltd.
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
++ *
++ */
++#include <gtest/gtest.h>
++#include <gtest/gtest-death-test.h>
++
++#include "../../registeredSession/plugins/vino/vinointerface.h"
++
++#include "stubext.h"
++using namespace stub_ext;
++
++class VinoInterfaceTest : public testing::Test
++{
++protected:
++    static void SetUpTestSuite()
++    {
++        m_pVinoDbus = new VinoInterface();
++    }
++
++    static void TearDownTestSuite()
++    {
++        delete m_pVinoDbus;
++        m_pVinoDbus = nullptr;
++    }
++
++    static VinoInterface *m_pVinoDbus;
++};
++
++VinoInterface *VinoInterfaceTest::m_pVinoDbus = nullptr;
++
++TEST_F(VinoInterfaceTest, viewOnly)
++{
++    // get current value
++    bool repeatKeyValue = m_pVinoDbus->getViewOnly();
++
++    // call setKeyRepeat function to set different value
++    m_pVinoDbus->setVinoKey(m_pVinoDbus->kVinoViewOnlyKey, !repeatKeyValue);
++
++    // test the current value and the value you have set
++    ASSERT_EQ(!repeatKeyValue, m_pVinoDbus->getViewOnly());
++
++    // restore the value before test
++    m_pVinoDbus->setVinoKey(m_pVinoDbus->kVinoViewOnlyKey, repeatKeyValue);
++}
++
++TEST_F(VinoInterfaceTest, noViewOnly)
++{
++    // get current value
++    QString originKey = m_pVinoDbus->kVinoViewOnlyKey;
++    m_pVinoDbus->kVinoViewOnlyKey = "";
++
++    bool repeatKeyValue = m_pVinoDbus->getViewOnly();
++
++    // call setKeyRepeat function to set different value
++    m_pVinoDbus->setVinoKey(m_pVinoDbus->kVinoViewOnlyKey, !repeatKeyValue);
++
++    // test the current value and the value you have set
++    ASSERT_EQ(!repeatKeyValue, m_pVinoDbus->getViewOnly());
++
++    // restore the value before test
++    m_pVinoDbus->kVinoViewOnlyKey = originKey;
++}
++
++TEST_F(VinoInterfaceTest, PromptEnabled)
++{
++    bool promptKeyValue = m_pVinoDbus->getPromptEnabled();
++
++    m_pVinoDbus->setVinoKey(m_pVinoDbus->kVinoPromptKey, !promptKeyValue);
++
++    ASSERT_EQ(promptKeyValue, m_pVinoDbus->getPromptEnabled());
++
++    m_pVinoDbus->setVinoKey(m_pVinoDbus->kVinoPromptKey, promptKeyValue);
++}
++
++TEST_F(VinoInterfaceTest, noPromptEnabled)
++{
++    // get current value
++    QString originKey = m_pVinoDbus->kVinoPromptKey;
++    m_pVinoDbus->kVinoPromptKey = "";
++
++    bool promptKeyValue = m_pVinoDbus->getPromptEnabled();
++
++    m_pVinoDbus->setVinoKey(m_pVinoDbus->kVinoPromptKey, !promptKeyValue);
++
++    ASSERT_EQ(promptKeyValue, m_pVinoDbus->getPromptEnabled());
++
++    // restore the value before test
++    m_pVinoDbus->kVinoPromptKey = originKey;
++}
++
++TEST_F(VinoInterfaceTest, Method)
++{
++    QString methodKeyValue = m_pVinoDbus->getMethod();
++
++    m_pVinoDbus->setVinoKey(m_pVinoDbus->kAuthenticationKey, methodKeyValue);
++
++    ASSERT_EQ(methodKeyValue, m_pVinoDbus->getMethod());
++
++    m_pVinoDbus->setVinoKey(m_pVinoDbus->kAuthenticationKey, methodKeyValue);
++}
++
++TEST_F(VinoInterfaceTest, noMethod)
++{
++    // get current value
++    QString originKey = m_pVinoDbus->kAuthenticationKey;
++    m_pVinoDbus->kAuthenticationKey = "";
++
++    QString methodKeyValue = m_pVinoDbus->getMethod();
++
++    m_pVinoDbus->setVinoKey(m_pVinoDbus->kAuthenticationKey, methodKeyValue);
++
++    ASSERT_EQ(methodKeyValue, m_pVinoDbus->getMethod());
++
++    // restore the value before test
++    m_pVinoDbus->kAuthenticationKey = originKey;
++}
++
++
++TEST_F(VinoInterfaceTest, Password)
++{
++    QString passwordKeyValue = m_pVinoDbus->getPassword();
++
++    m_pVinoDbus->setVinoKey(m_pVinoDbus->kVncPwdKey, passwordKeyValue);
++
++    ASSERT_EQ(passwordKeyValue, m_pVinoDbus->getPassword());
++
++    m_pVinoDbus->setVinoKey(m_pVinoDbus->kVncPwdKey, passwordKeyValue);
++}
++
++TEST_F(VinoInterfaceTest, noPassword)
++{
++    // get current value
++    QString originKey = m_pVinoDbus->kVncPwdKey;
++    m_pVinoDbus->kVncPwdKey = "";
++
++    QString passwordKeyValue = m_pVinoDbus->getPassword();
++
++    m_pVinoDbus->setVinoKey(m_pVinoDbus->kVncPwdKey, passwordKeyValue);
++
++    ASSERT_EQ(passwordKeyValue, m_pVinoDbus->getPassword());
++
++    // restore the value before test
++    m_pVinoDbus->kVncPwdKey = originKey;
++}
++
++TEST_F(VinoInterfaceTest, VinoServerStatus)
++{
++    bool currentValue = m_pVinoDbus->getVinoServerStatus();
++}
++
++TEST_F(VinoInterfaceTest, VinoStatus)
++{
++    bool currentValue = m_pVinoDbus->getVinoStatus();
++
++    m_pVinoDbus->setVinoKey(m_pVinoDbus->kVinoEnableKey, !currentValue);
++
++    ASSERT_EQ(!currentValue, m_pVinoDbus->getVinoStatus());
++
++    m_pVinoDbus->setVinoKey(m_pVinoDbus->kVinoEnableKey, currentValue);
++}
++
++TEST_F(VinoInterfaceTest, noVinoStatus)
++{
++    // get current value
++    QString originKey = m_pVinoDbus->kVinoEnableKey;
++    m_pVinoDbus->kVinoEnableKey = "";
++
++    bool currentValue = m_pVinoDbus->getVinoStatus();
++
++    m_pVinoDbus->setVinoKey(m_pVinoDbus->kVinoEnableKey, !currentValue);
++
++    ASSERT_EQ(!currentValue, m_pVinoDbus->getVinoStatus());
++
++    // restore the value before test
++    m_pVinoDbus->kVinoEnableKey = originKey;
++}
++
++TEST_F(VinoInterfaceTest, XrdpStatus)
++{
++    bool currentValue = m_pVinoDbus->getXrdpStatus();
++
++    m_pVinoDbus->setVinoKey(m_pVinoDbus->kXrdpEnableKey, !currentValue);
++
++    ASSERT_EQ(!currentValue, m_pVinoDbus->getXrdpStatus());
++
++    m_pVinoDbus->setVinoKey(m_pVinoDbus->kXrdpEnableKey, currentValue);
++}
++
++TEST_F(VinoInterfaceTest, noXrdpStatus)
++{
++    // get current value
++    QString originKey = m_pVinoDbus->kXrdpEnableKey;
++    m_pVinoDbus->kXrdpEnableKey = "";
++
++    int currentValue = m_pVinoDbus->getXrdpStatus();
++
++    m_pVinoDbus->setVinoKey(m_pVinoDbus->kXrdpEnableKey, currentValue);
++
++    // restore the value before test
++    m_pVinoDbus->kXrdpEnableKey = originKey;
++}
++
++TEST_F(VinoInterfaceTest, noEnableStatus)
++{
++    bool currentValue = m_pVinoDbus->getEnableStatus();
++
++    m_pVinoDbus->setVinoKey(m_pVinoDbus->kEnableKey, !currentValue);
++
++    ASSERT_EQ(currentValue, m_pVinoDbus->getEnableStatus());
++
++    m_pVinoDbus->setVinoKey(m_pVinoDbus->kEnableKey, currentValue);
++}
++
++TEST_F(VinoInterfaceTest, EnableStatus)
++{
++    // get current value
++    QString originKey = m_pVinoDbus->kEnableKey;
++    m_pVinoDbus->kEnableKey = "";
++
++    bool currentValue = m_pVinoDbus->getEnableStatus();
++
++    m_pVinoDbus->setVinoKey(m_pVinoDbus->kEnableKey, !currentValue);
++
++    ASSERT_EQ(currentValue, m_pVinoDbus->getEnableStatus());
++
++    // restore the value before test
++    m_pVinoDbus->kEnableKey = originKey;
++}
+diff --git a/tests/unit_test_vino/unit_test_vino.pro b/tests/unit_test_vino/unit_test_vino.pro
+new file mode 100644
+index 0000000..8147c7d
+--- /dev/null
++++ b/tests/unit_test_vino/unit_test_vino.pro
+@@ -0,0 +1,40 @@
++#-------------------------------------------------
++#
++# Project created by QtCreator 2019-08-22T11:12:59
++#
++#-------------------------------------------------
++QT += dbus
++QT -= gui
++#greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
++TEMPLATE = app
++
++TARGET = unit_test_vino
++target.source += $$TARGET
++target.path = ./
++
++#代码覆盖率工具gcov
++QMAKE_LFLAGS +=-fprofile-arcs -ftest-coverage
++QMAKE_CXXFLAGS += --coverage -fno-inline -fno-access-control
++
++LIBS          += -lgtest_main -lpthread
++LIBS          +=  -L$$[QT_INSTALL_LIBS] -lgsettings-qt  -lgtest -lgcov
++
++#OBJECTS_DIR = ./obj
++#MOC_DIR = ./moc
++
++#打桩工具
++TEST_UTILS_PATH = $$PWD/../kt-test-utils
++
++# Include directories
++INCLUDEPATH += $$PROJECT_ROOTDIR \
++               $$TEST_UTILS_PATH/cpp-stub \
++               $$TEST_UTILS_PATH/cpp-stub-ext \
++
++SOURCES += ../../registeredSession/plugins/vino/vinointerface.cpp \
++           ../../registeredSession/universalinterface.cpp \
++           unit_test_vino.cpp \
++           main.cpp
++
++HEADERS += ../../registeredSession/plugins/vino/vinointerface.h \
++           ../../registeredSession/universalinterface.h
++
diff -Nru ukui-control-center-4.10.0.0/debian/patches/0124-146-326999-core.patch ukui-control-center-4.10.0.0/debian/patches/0124-146-326999-core.patch
--- ukui-control-center-4.10.0.0/debian/patches/0124-146-326999-core.patch	1970-01-01 08:00:00.000000000 +0800
+++ ukui-control-center-4.10.0.0/debian/patches/0124-146-326999-core.patch	2025-02-07 16:32:50.000000000 +0800
@@ -0,0 +1,68 @@
+From: nil <zhoubin@kylinos.cn>
+Date: Mon, 20 Jan 2025 08:45:14 +0000
+Subject: =?utf-8?b?ITE0NiAzMjY5OTkg44CQ6K6+572u44CR57O757uf5a6J6KOF5oiQ5Yqf?=
+ =?utf-8?b?77yM56ys5LiA5qyh6L+b5YWl57O757uf77yM5pyq5pON5L2c5pe25by55Ye65byC?=
+ =?utf-8?b?5bi45oql6ZSZ77yM5a2Y5ZyoY29yZeaWh+S7tiBNZXJnZSBwdWxsIHJlcXVlc3Qg?=
+ =?utf-8?b?ITE0NiBmcm9tIOiLj+WXo+WFuC9vcGVua3lsaW4vbmlsZS0xMjEw?=
+
+---
+ plugins/personalized/wallpaper/wallpaper.cpp | 9 +++++----
+ plugins/personalized/wallpaper/wallpaper.h   | 4 +---
+ 2 files changed, 6 insertions(+), 7 deletions(-)
+
+diff --git a/plugins/personalized/wallpaper/wallpaper.cpp b/plugins/personalized/wallpaper/wallpaper.cpp
+index a07ddcf..7c7675f 100644
+--- a/plugins/personalized/wallpaper/wallpaper.cpp
++++ b/plugins/personalized/wallpaper/wallpaper.cpp
+@@ -48,9 +48,6 @@ Wallpaper::Wallpaper()
+     pluginName = tr("Background");
+     pluginType = PERSONALIZED;
+     picInfoList.clear();
+-    QtConcurrent::run([=]{
+-        preInitialize();
+-    });
+ }
+ 
+ Wallpaper::~Wallpaper()
+@@ -69,7 +66,7 @@ int Wallpaper::pluginTypes() {
+     return pluginType;
+ }
+ 
+-void Wallpaper::preInitialize() {
++void Wallpaper::loadPictureInfo() {
+     wallpaperInterface = new QDBusInterface("org.ukui.ukcc.session",
+                                            "/Wallpaper",
+                                            "org.ukui.ukcc.session.Wallpaper",
+@@ -115,6 +112,9 @@ void Wallpaper::preInitialize() {
+                 file.close();
+             }
+         }
++        if (qPixmap.isNull()) {
++            qDebug() << Q_FUNC_INFO << "filename" << filename << "to pixmap is null";
++        }
+         QPixmap pixmap = qPixmap.scaled(IMAGE_SIZE);
+ 
+         QFile wallpaperFile;
+@@ -181,6 +181,7 @@ void Wallpaper::dataChanged(const QString &key)
+ 
+ void Wallpaper::initContent()
+ {
++    loadPictureInfo();
+     initModes();
+     initTypes();
+     initMode();
+diff --git a/plugins/personalized/wallpaper/wallpaper.h b/plugins/personalized/wallpaper/wallpaper.h
+index c7e5fe7..042422e 100644
+--- a/plugins/personalized/wallpaper/wallpaper.h
++++ b/plugins/personalized/wallpaper/wallpaper.h
+@@ -65,9 +65,7 @@ public:
+     void initPictures();
+     void connectUiSignals();
+     void showLocalWpDialog();
+-
+-private:
+-    void preInitialize();
++    void loadPictureInfo();
+ 
+ private:
+     bool            mFirstLoad;
diff -Nru ukui-control-center-4.10.0.0/debian/patches/0125-145-update-display-log.patch ukui-control-center-4.10.0.0/debian/patches/0125-145-update-display-log.patch
--- ukui-control-center-4.10.0.0/debian/patches/0125-145-update-display-log.patch	1970-01-01 08:00:00.000000000 +0800
+++ ukui-control-center-4.10.0.0/debian/patches/0125-145-update-display-log.patch	2025-02-07 16:32:50.000000000 +0800
@@ -0,0 +1,15119 @@
+From: nil <zhoubin@kylinos.cn>
+Date: Mon, 20 Jan 2025 09:19:03 +0000
+Subject: =?utf-8?q?!145_update_display_log_Merge_pull_request_!145_from_?=
+ =?utf-8?q?=E8=8B=8F=E5=97=A3=E5=85=B8/openkylin/nile-1107?=
+
+---
+ plugins/application/autoboot/addautoboot.cpp       |  344 ---
+ plugins/application/autoboot/addautoboot.h         |   98 -
+ plugins/application/autoboot/autoboot.cpp          |    1 -
+ plugins/application/autoboot/autoboot.h            |    1 -
+ plugins/application/autoboot/autoboot.pro          |    2 -
+ plugins/application/autoboot/autobootui.cpp        |    3 +-
+ plugins/application/autoboot/autobootui.h          |    4 +-
+ plugins/application/defaultapp/defaultapp.h        |    2 -
+ plugins/application/defaultapp/defaultappui.cpp    |    3 +-
+ plugins/application/defaultapp/defaultappui.h      |    5 +-
+ plugins/devices/printer/printer.cpp                |    3 +-
+ plugins/devices/printer/printer.h                  |    8 +-
+ plugins/devices/printer/printer.pro                |    2 -
+ plugins/devices/printer/printerbtn.cpp             |    3 +-
+ plugins/devices/printer/printerbtn.h               |    4 +
+ plugins/devices/shortcut/addshortcutdialog.cpp     |    1 -
+ plugins/devices/shortcut/addshortcutdialog.h       |    2 +
+ plugins/devices/shortcut/addshortcutdialog.ui      |   16 +-
+ plugins/devices/shortcut/shortcut.pro              |    2 -
+ plugins/devices/shortcut/shortcut.ui               |  160 --
+ plugins/devices/shortcut/shortcutui.cpp            |   10 +-
+ plugins/devices/shortcut/shortcutui.h              |    9 +-
+ plugins/personalized/fonts/fonts.cpp               |    2 +-
+ plugins/personalized/fonts/fonts.h                 |    1 +
+ plugins/personalized/fonts/fonts.ui                |   17 +-
+ plugins/personalized/screenlock/screenlock.ui      |  275 ---
+ plugins/personalized/screenlock/screenlockui.cpp   |    6 +-
+ plugins/personalized/screenlock/screenlockui.h     |    8 +-
+ plugins/personalized/screensaver/screensaver.pro   |    1 -
+ plugins/personalized/screensaver/screensaver.ui    |  254 --
+ plugins/personalized/screensaver/screensaverui.cpp |   17 +-
+ plugins/personalized/screensaver/screensaverui.h   |    6 +-
+ plugins/personalized/theme/theme.cpp               |   24 +-
+ plugins/personalized/theme/theme.h                 |   17 +-
+ plugins/personalized/theme/theme.pro               |    1 -
+ plugins/personalized/theme/themewidget.cpp         |    4 +-
+ plugins/personalized/theme/themewidget.h           |    4 +-
+ plugins/personalized/wallpaper/colordialog.cpp     |    1 -
+ plugins/personalized/wallpaper/wallpaper.pro       |    2 -
+ plugins/personalized/wallpaper/wallpaper.ui        |  387 ----
+ plugins/personalized/wallpaper/wallpaperui.cpp     |    3 +-
+ plugins/personalized/wallpaper/wallpaperui.h       |    7 +-
+ plugins/plugins.pro                                |    4 -
+ plugins/system/about/about.cpp                     |    4 +-
+ plugins/system/about/about.h                       |    2 -
+ plugins/system/about/aboutui.cpp                   |   64 +-
+ plugins/system/about/aboutui.h                     |   59 +-
+ plugins/system/about/privacydialog.cpp             |    1 +
+ plugins/system/about/privacydialog.h               |    1 -
+ plugins/system/about/statusdialog.cpp              |   13 +-
+ plugins/system/about/statusdialog.h                |   15 +-
+ plugins/system/about/trialdialog.cpp               |    3 +-
+ plugins/system/about/trialdialog.h                 |    6 +-
+ plugins/system/display/brightnessFrame.cpp         |    2 +-
+ plugins/system/display/brightnessFrame.h           |    5 +-
+ plugins/system/display/display.pro                 |    9 +-
+ plugins/system/display/display.ui                  |    6 +-
+ .../system/display/displayperformancedialog.cpp    |  213 --
+ plugins/system/display/displayperformancedialog.h  |   58 -
+ plugins/system/display/displayperformancedialog.ui |  818 -------
+ plugins/system/display/widget.cpp                  |   18 +-
+ plugins/system/display/widget.h                    |   18 +-
+ plugins/system/display_hw/brightnessFrame.cpp      |   42 -
+ plugins/system/display_hw/brightnessFrame.h        |   26 -
+ plugins/system/display_hw/colorinfo.h              |   32 -
+ plugins/system/display_hw/controlpanel.cpp         |  175 --
+ plugins/system/display_hw/controlpanel.h           |   62 -
+ .../system/display_hw/declarative/qmloutput.cpp    |  606 -----
+ plugins/system/display_hw/declarative/qmloutput.h  |  217 --
+ .../display_hw/declarative/qmloutputcomponent.cpp  |   63 -
+ .../display_hw/declarative/qmloutputcomponent.h    |   43 -
+ .../system/display_hw/declarative/qmlscreen.cpp    |  708 ------
+ plugins/system/display_hw/declarative/qmlscreen.h  |  133 --
+ plugins/system/display_hw/display_hw.cpp           |  105 -
+ plugins/system/display_hw/display_hw.h             |   64 -
+ plugins/system/display_hw/display_hw.pro           |   70 -
+ plugins/system/display_hw/display_hw.ui            |  931 --------
+ .../system/display_hw/displayperformancedialog.cpp |  213 --
+ .../system/display_hw/displayperformancedialog.h   |   58 -
+ .../system/display_hw/displayperformancedialog.ui  |  813 -------
+ plugins/system/display_hw/outputconfig.cpp         |  439 ----
+ plugins/system/display_hw/outputconfig.h           |   88 -
+ plugins/system/display_hw/qml.qrc                  |    6 -
+ plugins/system/display_hw/qml/Output.qml           |  277 ---
+ plugins/system/display_hw/qml/main.qml             |   75 -
+ plugins/system/display_hw/resolutionslider.cpp     |  206 --
+ plugins/system/display_hw/resolutionslider.h       |   53 -
+ plugins/system/display_hw/scalesize.h              |   42 -
+ plugins/system/display_hw/screenConfig.h           |   35 -
+ plugins/system/display_hw/unifiedoutputconfig.cpp  |  489 ----
+ plugins/system/display_hw/unifiedoutputconfig.h    |   46 -
+ plugins/system/display_hw/utils.cpp                |   24 -
+ plugins/system/display_hw/utils.h                  |   36 -
+ plugins/system/display_hw/widget.cpp               | 2440 --------------------
+ plugins/system/display_hw/widget.h                 |  260 ---
+ plugins/system/notice/notice.h                     |    1 -
+ plugins/system/notice/noticeui.h                   |    1 -
+ plugins/system/power/power.h                       |    2 -
+ plugins/time-language/area/area.pro                |    1 -
+ plugins/time-language/area/area.ui                 |  184 --
+ plugins/time-language/area/areaui.cpp              |   11 +-
+ plugins/time-language/area/areaui.h                |   14 +-
+ plugins/time-language/datetime/changtime.cpp       |    1 -
+ plugins/time-language/datetime/changtime.ui        |  627 -----
+ plugins/time-language/datetime/datetime.pro        |    2 -
+ plugins/time-language/datetime/datetime.ui         |  342 ---
+ plugins/time-language/datetime/datetimeui.cpp      |   24 +-
+ plugins/time-language/datetime/datetimeui.h        |   25 +-
+ plugins/time-language/datetime/timeBtn.cpp         |    2 +-
+ plugins/time-language/datetime/timeBtn.h           |    6 +-
+ plugins/time-language/datetime/timelabel.cpp       |    2 +-
+ plugins/time-language/datetime/timelabel.h         |    6 +-
+ .../datetime/worldMap/timezonechooser.cpp          |    1 -
+ 113 files changed, 276 insertions(+), 12892 deletions(-)
+ delete mode 100644 plugins/application/autoboot/addautoboot.cpp
+ delete mode 100644 plugins/application/autoboot/addautoboot.h
+ delete mode 100644 plugins/devices/shortcut/shortcut.ui
+ delete mode 100644 plugins/personalized/screenlock/screenlock.ui
+ delete mode 100644 plugins/personalized/screensaver/screensaver.ui
+ delete mode 100644 plugins/personalized/wallpaper/wallpaper.ui
+ delete mode 100644 plugins/system/display/displayperformancedialog.cpp
+ delete mode 100644 plugins/system/display/displayperformancedialog.h
+ delete mode 100644 plugins/system/display/displayperformancedialog.ui
+ delete mode 100644 plugins/system/display_hw/brightnessFrame.cpp
+ delete mode 100644 plugins/system/display_hw/brightnessFrame.h
+ delete mode 100644 plugins/system/display_hw/colorinfo.h
+ delete mode 100644 plugins/system/display_hw/controlpanel.cpp
+ delete mode 100644 plugins/system/display_hw/controlpanel.h
+ delete mode 100644 plugins/system/display_hw/declarative/qmloutput.cpp
+ delete mode 100644 plugins/system/display_hw/declarative/qmloutput.h
+ delete mode 100644 plugins/system/display_hw/declarative/qmloutputcomponent.cpp
+ delete mode 100644 plugins/system/display_hw/declarative/qmloutputcomponent.h
+ delete mode 100644 plugins/system/display_hw/declarative/qmlscreen.cpp
+ delete mode 100644 plugins/system/display_hw/declarative/qmlscreen.h
+ delete mode 100644 plugins/system/display_hw/display_hw.cpp
+ delete mode 100644 plugins/system/display_hw/display_hw.h
+ delete mode 100644 plugins/system/display_hw/display_hw.pro
+ delete mode 100644 plugins/system/display_hw/display_hw.ui
+ delete mode 100644 plugins/system/display_hw/displayperformancedialog.cpp
+ delete mode 100644 plugins/system/display_hw/displayperformancedialog.h
+ delete mode 100644 plugins/system/display_hw/displayperformancedialog.ui
+ delete mode 100644 plugins/system/display_hw/outputconfig.cpp
+ delete mode 100644 plugins/system/display_hw/outputconfig.h
+ delete mode 100644 plugins/system/display_hw/qml.qrc
+ delete mode 100644 plugins/system/display_hw/qml/Output.qml
+ delete mode 100644 plugins/system/display_hw/qml/main.qml
+ delete mode 100644 plugins/system/display_hw/resolutionslider.cpp
+ delete mode 100644 plugins/system/display_hw/resolutionslider.h
+ delete mode 100644 plugins/system/display_hw/scalesize.h
+ delete mode 100644 plugins/system/display_hw/screenConfig.h
+ delete mode 100644 plugins/system/display_hw/unifiedoutputconfig.cpp
+ delete mode 100644 plugins/system/display_hw/unifiedoutputconfig.h
+ delete mode 100644 plugins/system/display_hw/utils.cpp
+ delete mode 100644 plugins/system/display_hw/utils.h
+ delete mode 100644 plugins/system/display_hw/widget.cpp
+ delete mode 100644 plugins/system/display_hw/widget.h
+ delete mode 100644 plugins/time-language/area/area.ui
+ delete mode 100644 plugins/time-language/datetime/changtime.ui
+ delete mode 100644 plugins/time-language/datetime/datetime.ui
+
+diff --git a/plugins/application/autoboot/addautoboot.cpp b/plugins/application/autoboot/addautoboot.cpp
+deleted file mode 100644
+index 2f6eda4..0000000
+--- a/plugins/application/autoboot/addautoboot.cpp
++++ /dev/null
+@@ -1,344 +0,0 @@
+-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
+- *
+- * Copyright (C) 2019 Tianjin KYLIN Information Technology Co., Ltd.
+- *
+- * This program is free software; you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License as published by
+- * the Free Software Foundation; either version 2 of the License, or
+- * (at your option) any later version.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program; if not, write to the Free Software
+- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+- *
+- */
+-#include "addautoboot.h"
+-#include "closebutton.h"
+-
+-#include <QDebug>
+-#include <QFileInfo>
+-#include <QSettings>
+-#include <QPushButton>
+-#include <QApplication>
+-
+-// #define DESKTOPPATH "/etc/xdg/autostart/"
+-#define DESKTOPPATH "/usr/share/applications/"
+-
+-extern void qt_blurImage(QImage &blurImage, qreal radius, bool quality, int transposed);
+-
+-AddAutoBoot::AddAutoBoot(QWidget *parent) :
+-    QDialog(parent)
+-{
+-    setWindowFlags(Qt::FramelessWindowHint | Qt::Tool);
+-    setAttribute(Qt::WA_TranslucentBackground);
+-
+-    initUi(this);
+-    initStyle();
+-    initConnection();
+-}
+-
+-void AddAutoBoot::resetBeforeClose()
+-{
+-    userEditNameFlag = false;
+-    userEditCommentFlag = false;
+-    mCertainBtn->setEnabled(false);
+-    mHintLabel->clear();
+-    mAppNameEdit->setToolTip("");
+-    mAppBewriteEdit->setToolTip("");
+-    mAppPathEdit->setToolTip("");
+-    mAppNameEdit->setText(QString());
+-    mAppBewriteEdit->setText(QString());
+-    mAppPathEdit->setText(QString());
+-    close();
+-}
+-
+-void AddAutoBoot::paintEvent(QPaintEvent *event)
+-{
+-    Q_UNUSED(event);
+-    QPainter p(this);
+-    p.setRenderHint(QPainter::Antialiasing);
+-    QPainterPath rectPath;
+-    rectPath.addRoundedRect(this->rect().adjusted(10, 10, -10, -10), 10, 10);
+-
+-    // 画一个黑底
+-    QPixmap pixmap(this->rect().size());
+-    pixmap.fill(Qt::transparent);
+-    QPainter pixmapPainter(&pixmap);
+-    pixmapPainter.setRenderHint(QPainter::Antialiasing);
+-    pixmapPainter.setPen(Qt::transparent);
+-    pixmapPainter.setBrush(Qt::black);
+-    pixmapPainter.setOpacity(0.65);
+-    pixmapPainter.drawPath(rectPath);
+-    pixmapPainter.end();
+-
+-    // 模糊这个黑底
+-    QImage img = pixmap.toImage();
+-    qt_blurImage(img, 10, false, false);
+-
+-    // 挖掉中心
+-    pixmap = QPixmap::fromImage(img);
+-    QPainter pixmapPainter2(&pixmap);
+-    pixmapPainter2.setRenderHint(QPainter::Antialiasing);
+-    pixmapPainter2.setCompositionMode(QPainter::CompositionMode_Clear);
+-    pixmapPainter2.setPen(Qt::transparent);
+-    pixmapPainter2.setBrush(Qt::transparent);
+-    pixmapPainter2.drawPath(rectPath);
+-
+-    // 绘制阴影
+-    p.drawPixmap(this->rect(), pixmap, pixmap.rect());
+-
+-    // 绘制一个背景
+-    p.save();
+-    p.fillPath(rectPath, palette().color(QPalette::Base));
+-    p.restore();
+-}
+-void AddAutoBoot::initUi(QDialog *AddAutoBoot)
+-{
+-     AddAutoBoot->resize(420, 308);
+-     QVBoxLayout *mverticalLayout = new QVBoxLayout(AddAutoBoot);
+-     mverticalLayout->setSpacing(16);
+-     mverticalLayout->setContentsMargins(32, 32, 32, 24);
+-
+-     mTitleLabel = new QLabel(AddAutoBoot);
+-
+-     mAppFrame = new QFrame(AddAutoBoot);
+-     mAppFrame->setFixedSize(356,160);
+-     mAppFrame->setFrameShape(QFrame::NoFrame);
+-     mAppFrame->setFrameShadow(QFrame::Raised);
+-
+-     QGridLayout *mAppLayout = new QGridLayout(mAppFrame);
+-     mAppLayout->setHorizontalSpacing(8);
+-     mAppLayout->setVerticalSpacing(4);
+-     mAppNameLabel = new FixLabel(mAppFrame);
+-     mAppPathLabel = new FixLabel(mAppFrame);
+-     mAppBewriteLabel = new FixLabel(mAppFrame);
+-     mAppNameEdit = new QLineEdit(mAppFrame);
+-     mAppPathEdit = new QLineEdit(mAppFrame);
+-     mAppBewriteEdit = new QLineEdit(mAppFrame);
+-     mOpenBtn = new QPushButton(mAppFrame);
+-     mHintLabel = new QLabel(mAppFrame);
+-
+-     mOpenBtn->setContentsMargins(8, 0, 8, 0);
+-     mAppLayout->addWidget(mAppNameLabel,0,0,1,2);
+-     mAppLayout->addWidget(mAppNameEdit,0,2,1,3);
+-     mAppLayout->addWidget(mAppPathLabel,1,0,1,2);
+-     mAppLayout->addWidget(mAppPathEdit,1,2,1,2);
+-     mAppLayout->addWidget(mOpenBtn,1,4,1,1);
+-     mAppLayout->addWidget(mAppBewriteLabel,2,0,1,2);
+-     mAppLayout->addWidget(mAppBewriteEdit,2,2,1,3);
+-     mAppLayout->addWidget(mHintLabel,3,2,1,3);
+-
+-     mBtnFrame = new QFrame(AddAutoBoot);
+-     mBtnFrame->setFixedSize(356,36);
+-     mBtnFrame->setFrameShape(QFrame::NoFrame);
+-
+-     QHBoxLayout *mBtnLayout = new QHBoxLayout(mBtnFrame);
+-     mBtnLayout->setContentsMargins(0,0,0,0);
+-     mBtnLayout->setSpacing(16);
+-     mCancelBtn = new QPushButton(mBtnFrame);
+-     mCancelBtn->setFixedSize(100,36);
+-     mCertainBtn = new QPushButton(mBtnFrame);
+-     mCertainBtn->setFixedSize(100,36);
+-
+-     mBtnLayout->addStretch();
+-     mBtnLayout->addWidget(mCancelBtn);
+-     mBtnLayout->addWidget(mCertainBtn);
+-
+-     mverticalLayout->addWidget(mTitleLabel);
+-     mverticalLayout->addWidget(mAppFrame);
+-     mverticalLayout->addSpacing(8);
+-     mverticalLayout->addWidget(mBtnFrame);
+-
+-     retranslateUi();
+-}
+-
+-void AddAutoBoot::initStyle()
+-{
+-    mTitleLabel->setStyleSheet("QLabel{color: palette(windowText);}");
+-
+-    selectFile = "";
+-
+-    mAppNameEdit->setPlaceholderText(tr("Name"));
+-    mAppPathEdit->setPlaceholderText(tr("Exec"));
+-    mAppBewriteEdit->setPlaceholderText(tr("Comment"));
+-
+-    mHintLabel->setAlignment(Qt::AlignLeft);
+-    mHintLabel->setStyleSheet("color:red;");
+-    mCertainBtn->setEnabled(false);
+-
+-}
+-
+-void AddAutoBoot::initConnection()
+-{
+-    connect(mOpenBtn, SIGNAL(clicked(bool)), this, SLOT(open_desktop_dir_slots()));
+-    connect(mCancelBtn, SIGNAL(clicked(bool)), this, SLOT(close()));
+-    connect(mAppPathEdit, SIGNAL(textEdited(QString)), this, SLOT(execLinEditSlot(QString)));
+-
+-    connect(mCancelBtn, &QPushButton::clicked, [=] {
+-        resetBeforeClose();
+-    });
+-    connect(mCertainBtn, &QPushButton::clicked, this, [=] {
+-        emit autoboot_adding_signals(selectFile, mAppNameEdit->text(), mDesktopExec,
+-                                     mAppBewriteEdit->text(), mDesktopIcon);
+-        resetBeforeClose();
+-    });
+-
+-    connect(mAppNameEdit, &QLineEdit::editingFinished, this, [=](){
+-        if (mAppNameEdit->text().isEmpty()) {
+-            userEditNameFlag = false;
+-        } else {        // 用户输入了程序名
+-            userEditNameFlag = true;
+-        }
+-    });
+-    connect(mAppBewriteEdit, &QLineEdit::editingFinished, this, [=](){
+-        if (mAppBewriteEdit->text().isEmpty()) {
+-            userEditCommentFlag = false;
+-        } else {        // 用户输入了描述
+-            userEditCommentFlag = true;
+-        }
+-    });
+-
+-    connect(mAppNameEdit, &QLineEdit::textChanged, this, [=](){
+-        mAppNameEdit->setToolTip(mAppNameEdit->text());
+-    });
+-    connect(mAppBewriteEdit, &QLineEdit::textChanged, this, [=](){
+-        mAppBewriteEdit->setToolTip(mAppBewriteEdit->text());
+-    });
+-    connect(mAppPathEdit, &QLineEdit::textChanged, this, [=](){
+-        mAppPathEdit->setToolTip(mAppPathEdit->text());
+-    });
+-}
+-
+-void AddAutoBoot::retranslateUi()
+-{
+-    mHintLabel->setText(QString());
+-    mTitleLabel->setText(QApplication::translate("AddAutoBoot", "Add autoboot program", nullptr));
+-    mAppNameLabel->setText(QApplication::translate("AddAutoBoot", "Name", nullptr));
+-    mAppPathLabel->setText(QApplication::translate("AddAutoBoot", "Exec", nullptr));
+-    mAppBewriteLabel->setText(QApplication::translate("AddAutoBoot", "Comment", nullptr));
+-    mOpenBtn->setText(QApplication::translate("AddAutoBoot", "Open", nullptr));
+-    mCancelBtn->setText(QApplication::translate("AddAutoBoot", "Cancel", nullptr));
+-    mCertainBtn->setText(QApplication::translate("AddAutoBoot", "Certain", nullptr));
+-}
+-
+-AddAutoBoot::~AddAutoBoot()
+-{
+-
+-}
+-
+-void AddAutoBoot::open_desktop_dir_slots()
+-{
+-    QString filters = tr("Desktop files(*.desktop)");
+-    QFileDialog fd(this);
+-    fd.setDirectory(DESKTOPPATH);
+-    fd.setAcceptMode(QFileDialog::AcceptOpen);
+-    fd.setViewMode(QFileDialog::List);
+-    fd.setNameFilter(filters);
+-    fd.setFileMode(QFileDialog::ExistingFile);
+-    fd.setWindowTitle(tr("select autoboot desktop"));
+-    fd.setLabelText(QFileDialog::Accept, tr("Select"));
+-    fd.setLabelText(QFileDialog::Reject, tr("Cancel"));
+-    if (fd.exec() != QDialog::Accepted)
+-        return;
+-
+-    QString selectedfile;
+-    selectedfile = fd.selectedFiles().first();
+-    selectFile = selectedfile;
+-
+-    QByteArray ba;
+-    ba = selectedfile.toUtf8();
+-
+-    // 解析desktop文件
+-    GKeyFile *keyfile;
+-    char *name, *comment,*mname;
+-    bool no_display;
+-
+-    keyfile = g_key_file_new();
+-    if (!g_key_file_load_from_file(keyfile, ba.data(), G_KEY_FILE_NONE, NULL)) {
+-        g_key_file_free(keyfile);
+-        return;
+-    }
+-    no_display = g_key_file_get_boolean(keyfile, G_KEY_FILE_DESKTOP_GROUP,
+-                                        G_KEY_FILE_DESKTOP_KEY_NO_DISPLAY, FALSE);
+-    name = g_key_file_get_string(keyfile, G_KEY_FILE_DESKTOP_GROUP,
+-                                        G_KEY_FILE_DESKTOP_KEY_NAME, NULL);
+-    mname = g_key_file_get_locale_string(keyfile, G_KEY_FILE_DESKTOP_GROUP,
+-                                        G_KEY_FILE_DESKTOP_KEY_NAME, NULL, NULL);
+-    comment = g_key_file_get_locale_string(keyfile, G_KEY_FILE_DESKTOP_GROUP,
+-                                           G_KEY_FILE_DESKTOP_KEY_COMMENT, NULL, NULL);
+-    mDesktopExec = g_key_file_get_string(keyfile, G_KEY_FILE_DESKTOP_GROUP,
+-                                         G_KEY_FILE_DESKTOP_KEY_EXEC, NULL);
+-    mDesktopIcon = g_key_file_get_string(keyfile, G_KEY_FILE_DESKTOP_GROUP,
+-                                         G_KEY_FILE_DESKTOP_KEY_ICON, NULL);
+-
+-    if (userEditNameFlag == false) {   // 用户输入了程序名,以用户输入为准,否则以自带的为准
+-        mAppNameEdit->setText(QString(mname));
+-    }
+-
+-    mAppPathEdit->setText(QString(selectedfile));
+-    if (userEditCommentFlag == false) {   // 用户输入了程序描述,以用户输入为准,否则以自带的为准
+-        mAppBewriteEdit->setText(QString(comment));
+-    }
+-
+-    emit mAppPathEdit->textEdited(QString(selectedfile));
+-
+-    if (no_display) {
+-        mHintLabel->setText(tr("desktop file not allowed add"));
+-        mHintLabel->setStyleSheet("color:red;");
+-        mCertainBtn->setEnabled(false);
+-    }
+-
+-    g_key_file_free(keyfile);
+-}
+-
+-void AddAutoBoot::execLinEditSlot(const QString &fileName)
+-{
+-    selectFile = fileName;
+-    QFileInfo fileInfo(fileName);
+-    if (fileInfo.isFile() && fileName.endsWith("desktop")) {
+-        mHintLabel->clear();
+-        mCertainBtn->setEnabled(true);
+-
+-        QByteArray ba;
+-        ba = fileName.toUtf8();
+-
+-        // 解析desktop文件
+-        GKeyFile *keyfile;
+-        char *name, *comment;
+-
+-        keyfile = g_key_file_new();
+-        if (!g_key_file_load_from_file(keyfile, ba.data(), G_KEY_FILE_NONE, NULL)) {
+-            g_key_file_free(keyfile);
+-            return;
+-        }
+-
+-        name = g_key_file_get_locale_string(keyfile, G_KEY_FILE_DESKTOP_GROUP,
+-                                            G_KEY_FILE_DESKTOP_KEY_NAME, NULL, NULL);
+-        mDesktopExec = g_key_file_get_string(keyfile, G_KEY_FILE_DESKTOP_GROUP,
+-                                             G_KEY_FILE_DESKTOP_KEY_EXEC, NULL);
+-        mDesktopIcon = g_key_file_get_string(keyfile, G_KEY_FILE_DESKTOP_GROUP,
+-                                             G_KEY_FILE_DESKTOP_KEY_ICON, NULL);
+-        comment = g_key_file_get_locale_string(keyfile, G_KEY_FILE_DESKTOP_GROUP,
+-                                               G_KEY_FILE_DESKTOP_KEY_COMMENT, NULL, NULL);
+-
+-        if (userEditNameFlag == false) {   // 用户输入了程序名,以用户输入为准,否则以自带的为准
+-            mAppNameEdit->setText(QString(name));
+-        }
+-
+-        mAppPathEdit->setText(fileName);
+-        if (userEditCommentFlag == false) {   // 用户输入了程序描述,以用户输入为准,否则以自带的为准
+-            mAppBewriteEdit->setText(QString(comment));
+-        }
+-
+-        g_key_file_free(keyfile);
+-    } else {
+-        mHintLabel->setText(tr("desktop file not exist"));
+-        mHintLabel->setStyleSheet("color:red;");
+-        mCertainBtn->setEnabled(false);
+-    }
+-}
+diff --git a/plugins/application/autoboot/addautoboot.h b/plugins/application/autoboot/addautoboot.h
+deleted file mode 100644
+index 220fd0a..0000000
+--- a/plugins/application/autoboot/addautoboot.h
++++ /dev/null
+@@ -1,98 +0,0 @@
+-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
+- *
+- * Copyright (C) 2019 Tianjin KYLIN Information Technology Co., Ltd.
+- *
+- * This program is free software; you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License as published by
+- * the Free Software Foundation; either version 2 of the License, or
+- * (at your option) any later version.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program; if not, write to the Free Software
+- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+- *
+- */
+-#ifndef ADDAUTOBOOT_H
+-#define ADDAUTOBOOT_H
+-
+-#include <QDialog>
+-#include <QFileDialog>
+-#include <QPainter>
+-#include <QPainterPath>
+-#include <QLineEdit>
+-#include <QLabel>
+-#include <QVBoxLayout>
+-#include "fixlabel.h"
+-/* qt会将glib里的signals成员识别为宏,所以取消该宏
+- * 后面如果用到signals时,使用Q_SIGNALS代替即可
+- **/
+-#ifdef signals
+-#undef signals
+-#endif
+-
+-#include <glib.h>
+-#include <glib/gstdio.h>
+-#include <gio/gio.h>
+-#include <gio/gdesktopappinfo.h>
+-
+-namespace Ui {
+-class AddAutoBoot;
+-}
+-
+-class AddAutoBoot : public QDialog
+-{
+-    Q_OBJECT
+-
+-public:
+-    explicit AddAutoBoot(QWidget *parent = 0);
+-    ~AddAutoBoot();
+-
+-    void resetBeforeClose();
+-
+-protected:
+-    void paintEvent(QPaintEvent *);
+-
+-private:
+-    QString selectFile;
+-    QString mDesktopExec;
+-    QString mDesktopIcon;
+-    bool userEditNameFlag    = false;
+-    bool userEditCommentFlag = false;
+-
+-    QFrame *mAppFrame;
+-    QFrame *mBtnFrame;
+-
+-    QLabel *mTitleLabel;
+-    FixLabel *mAppNameLabel;
+-    FixLabel *mAppPathLabel;
+-    FixLabel *mAppBewriteLabel;
+-    QLabel *mHintLabel;
+-
+-    QLineEdit *mAppNameEdit;
+-    QLineEdit *mAppPathEdit;
+-    QLineEdit *mAppBewriteEdit;
+-
+-    QPushButton *mOpenBtn;
+-    QPushButton *mCancelBtn;
+-    QPushButton *mCertainBtn;
+-
+-private:
+-    void initUi(QDialog *AddAutoBoot);
+-    void initStyle();
+-    void initConnection();
+-    void retranslateUi();
+-
+-private slots:
+-    void open_desktop_dir_slots();
+-    void execLinEditSlot(const QString &fileName);
+-
+-Q_SIGNALS:
+-    void autoboot_adding_signals(QString path, QString name, QString exec, QString comment, QString icon);
+-};
+-
+-#endif // ADDAUTOBOOT_H
+diff --git a/plugins/application/autoboot/autoboot.cpp b/plugins/application/autoboot/autoboot.cpp
+index 5e77fd8..7492a30 100644
+--- a/plugins/application/autoboot/autoboot.cpp
++++ b/plugins/application/autoboot/autoboot.cpp
+@@ -31,7 +31,6 @@
+ #include <QFileDialog>
+ #include <QMessageBox>
+ #include "rmenu.h"
+-#include "imageutil.h"
+ #include "mthread.h"
+ 
+ /* qt会将glib里的signals成员识别为宏,所以取消该宏
+diff --git a/plugins/application/autoboot/autoboot.h b/plugins/application/autoboot/autoboot.h
+index ff3b8f8..9cebdb2 100644
+--- a/plugins/application/autoboot/autoboot.h
++++ b/plugins/application/autoboot/autoboot.h
+@@ -26,7 +26,6 @@
+ #include "shell/interface.h"
+ #include "ukcccommon.h"
+ using namespace ukcc;
+-#include "titlelabel.h"
+ #include "hoverwidget.h"
+ #include "switchwidget.h"
+ #include "settinggroup.h"
+diff --git a/plugins/application/autoboot/autoboot.pro b/plugins/application/autoboot/autoboot.pro
+index 344233a..bbceb83 100644
+--- a/plugins/application/autoboot/autoboot.pro
++++ b/plugins/application/autoboot/autoboot.pro
+@@ -4,9 +4,7 @@
+ #
+ #-------------------------------------------------
+ include(../../../env.pri)
+-include($$PROJECT_ROOTDIR/libukcc/widgets/CloseButton/closebutton.pri)
+ include($$PROJECT_ROOTDIR/libukcc/widgets/Label/label.pri)
+-include($$PROJECT_ROOTDIR/libukcc/widgets/ImageUtil/imageutil.pri)
+ include($$PROJECT_ROOTDIR/libukcc/interface.pri)
+ include($$PROJECT_ROOTDIR/libukcc/widgets/AddBtn/addbtn.pri)
+ include($$PROJECT_ROOTDIR/libukcc/widgets/SettingWidget/settingwidget.pri)
+diff --git a/plugins/application/autoboot/autobootui.cpp b/plugins/application/autoboot/autobootui.cpp
+index efe6d30..08ccbf9 100644
+--- a/plugins/application/autoboot/autobootui.cpp
++++ b/plugins/application/autoboot/autobootui.cpp
+@@ -12,7 +12,8 @@ void AutoBootUi::initUi()
+     vLyt->setSpacing(8);
+     vLyt->setContentsMargins(0, 0, 0, 0);
+ 
+-    TitleLabel *mTitleLabel = new TitleLabel(this);
++    KLabel *mTitleLabel = new KLabel(this);
++    mTitleLabel->setContentsMargins(16, 0, 0, 0);
+     //~ contents_path /Autostart/Autostart Settings
+     mTitleLabel->setText(tr("Autostart Settings"));
+ 
+diff --git a/plugins/application/autoboot/autobootui.h b/plugins/application/autoboot/autobootui.h
+index 97c2eac..74e564e 100644
+--- a/plugins/application/autoboot/autobootui.h
++++ b/plugins/application/autoboot/autobootui.h
+@@ -4,12 +4,14 @@
+ #include <QObject>
+ #include <QWidget>
+ 
+-#include "titlelabel.h"
+ #include "hoverwidget.h"
+ #include "addbutton.h"
+ #include "switchwidget.h"
+ #include "settinggroup.h"
+ #include "ukccframe.h"
++#include <klabel.h>
++
++using namespace kdk;
+ 
+ class AutoBootUi : public QWidget
+ {
+diff --git a/plugins/application/defaultapp/defaultapp.h b/plugins/application/defaultapp/defaultapp.h
+index b3cd5d5..9ec0518 100644
+--- a/plugins/application/defaultapp/defaultapp.h
++++ b/plugins/application/defaultapp/defaultapp.h
+@@ -36,8 +36,6 @@
+ 
+ 
+ #include "shell/interface.h"
+-#include "fixlabel.h"
+-#include "titlelabel.h"
+ #include "mthread.h"
+ #include "comboxwidget.h"
+ #include "settinggroup.h"
+diff --git a/plugins/application/defaultapp/defaultappui.cpp b/plugins/application/defaultapp/defaultappui.cpp
+index 0592ab8..b60a52c 100644
+--- a/plugins/application/defaultapp/defaultappui.cpp
++++ b/plugins/application/defaultapp/defaultappui.cpp
+@@ -12,7 +12,8 @@ void DefaultAppUi::initUi()
+     vLyt->setSpacing(8);
+     vLyt->setContentsMargins(0, 0, 0, 0);
+ 
+-    TitleLabel *mTitleLabel = new TitleLabel(this);
++    KLabel *mTitleLabel = new KLabel(this);
++    mTitleLabel->setContentsMargins(16, 0, 0, 0);
+     //~ contents_path /Defaultapp/Select Default Application
+     mTitleLabel->setText(tr("DefaultAppWindow", "Select Default Application"));
+     SettingGroup *mDefaultFrame = new SettingGroup(this);
+diff --git a/plugins/application/defaultapp/defaultappui.h b/plugins/application/defaultapp/defaultappui.h
+index ae0b9af..c6de9fb 100644
+--- a/plugins/application/defaultapp/defaultappui.h
++++ b/plugins/application/defaultapp/defaultappui.h
+@@ -5,12 +5,13 @@
+ #include <QWidget>
+ 
+ #include "shell/interface.h"
+-#include "fixlabel.h"
+-#include "titlelabel.h"
+ #include "mthread.h"
+ #include "comboxwidget.h"
+ #include "settinggroup.h"
+ #include "pushbuttonwidget.h"
++#include <klabel.h>
++
++using namespace kdk;
+ 
+ class DefaultAppUi : public QWidget
+ {
+diff --git a/plugins/devices/printer/printer.cpp b/plugins/devices/printer/printer.cpp
+index c3d0868..f96af46 100644
+--- a/plugins/devices/printer/printer.cpp
++++ b/plugins/devices/printer/printer.cpp
+@@ -117,7 +117,8 @@ void Printer::initUi(QWidget *widget)
+     QVBoxLayout *verticaLyt = new QVBoxLayout(widget);
+     verticaLyt->setSpacing(8);
+     verticaLyt->setContentsMargins(0, 0, 0, 0);
+-    mPrinterLabel = new TitleLabel;
++    mPrinterLabel = new KLabel;
++    mPrinterLabel->setContentsMargins(16, 0, 0, 0);
+     mPrinterLabel->setText(tr("Printers"));
+ 
+     mPrinterWidget = new SettingGroup(widget);
+diff --git a/plugins/devices/printer/printer.h b/plugins/devices/printer/printer.h
+index a3a1707..b117ae1 100644
+--- a/plugins/devices/printer/printer.h
++++ b/plugins/devices/printer/printer.h
+@@ -28,15 +28,13 @@
+ 
+ #include "shell/interface.h"
+ #include "hoverwidget.h"
+-#include "imageutil.h"
+-#include "hoverbtn.h"
+-#include "titlelabel.h"
+-#include "fixlabel.h"
+ #include "settinggroup.h"
+ #include "ukccframe.h"
+ #include "printerbtn.h"
+ #include "addbutton.h"
++#include <klabel.h>
+ 
++using namespace kdk;
+ 
+ namespace Ui {
+ class Printer;
+@@ -74,7 +72,7 @@ private:
+     QWidget *pluginWidget;
+     SettingGroup *mPrinterWidget;
+     UkccFrame *mAddWidget;
+-    TitleLabel *mPrinterLabel;
++    KLabel *mPrinterLabel;
+     QStringList mPrinterList;
+     QVector <PrinterInfo> mPrinters;
+ 
+diff --git a/plugins/devices/printer/printer.pro b/plugins/devices/printer/printer.pro
+index f8b5e76..5673ac7 100644
+--- a/plugins/devices/printer/printer.pro
++++ b/plugins/devices/printer/printer.pro
+@@ -6,11 +6,9 @@
+ 
+ include(../../../env.pri)
+ 
+-include($$PROJECT_ROOTDIR/libukcc/widgets/ImageUtil/imageutil.pri)
+ include($$PROJECT_ROOTDIR/libukcc/widgets/Label/label.pri)
+ include($$PROJECT_ROOTDIR/libukcc/widgets/AddBtn/addbtn.pri)
+ include($$PROJECT_ROOTDIR/libukcc/widgets/HoverWidget/hoverwidget.pri)
+-include($$PROJECT_ROOTDIR/libukcc/widgets/HoverBtn/hoverbtn.pri)
+ include($$PROJECT_ROOTDIR/libukcc/widgets/SettingWidget/settingwidget.pri)
+ include($$PROJECT_ROOTDIR/libukcc/interface.pri)
+ 
+diff --git a/plugins/devices/printer/printerbtn.cpp b/plugins/devices/printer/printerbtn.cpp
+index 8eaba78..4c6dcf5 100644
+--- a/plugins/devices/printer/printerbtn.cpp
++++ b/plugins/devices/printer/printerbtn.cpp
+@@ -5,7 +5,6 @@
+ #include <QGSettings>
+ #include <QProcess>
+ 
+-#include "widgets/Label/fixlabel.h"
+ #define THEME_QT_SCHEMA  "org.ukui.style"
+ 
+ #define ICON_QT_KEY      "icon-theme-name"
+@@ -47,7 +46,7 @@ PrinterBtn::PrinterBtn(const PrinterInfo &printer, QWidget *parent):
+         }
+     });
+ 
+-    FixLabel *textLabel = new FixLabel(this);
++    KLabel *textLabel = new KLabel(this);
+     textLabel->setText(printerinfo.name);
+ 
+     mPrinterLyt->addWidget(iconLabel);
+diff --git a/plugins/devices/printer/printerbtn.h b/plugins/devices/printer/printerbtn.h
+index 1a68388..d895721 100644
+--- a/plugins/devices/printer/printerbtn.h
++++ b/plugins/devices/printer/printerbtn.h
+@@ -3,6 +3,10 @@
+ 
+ #include <QObject>
+ #include <QPushButton>
++#include <klabel.h>
++
++using namespace kdk;
++
+ struct PrinterInfo
+ {
+     QString name;
+diff --git a/plugins/devices/shortcut/addshortcutdialog.cpp b/plugins/devices/shortcut/addshortcutdialog.cpp
+index 9a47c7b..5b76588 100644
+--- a/plugins/devices/shortcut/addshortcutdialog.cpp
++++ b/plugins/devices/shortcut/addshortcutdialog.cpp
+@@ -20,7 +20,6 @@
+ 
+ #include "addshortcutdialog.h"
+ #include "ui_addshortcutdialog.h"
+-#include "closebutton.h"
+ #include "realizeshortcutwheel.h"
+ #include <QApplication>
+ #include <glib.h>
+diff --git a/plugins/devices/shortcut/addshortcutdialog.h b/plugins/devices/shortcut/addshortcutdialog.h
+index ebcc468..ec4f9a6 100644
+--- a/plugins/devices/shortcut/addshortcutdialog.h
++++ b/plugins/devices/shortcut/addshortcutdialog.h
+@@ -29,6 +29,8 @@
+ #include <QDebug>
+ #include "shortcutline.h"
+ #include <QLabel>
++#include <klabel.h>
++using namespace kdk;
+ 
+ namespace Ui {
+ class AddShortcutDialog;
+diff --git a/plugins/devices/shortcut/addshortcutdialog.ui b/plugins/devices/shortcut/addshortcutdialog.ui
+index fca9575..75f392f 100644
+--- a/plugins/devices/shortcut/addshortcutdialog.ui
++++ b/plugins/devices/shortcut/addshortcutdialog.ui
+@@ -71,7 +71,7 @@
+             <number>8</number>
+            </property>
+            <item>
+-            <widget class="FixLabel" name="label_3">
++            <widget class="KLabel" name="label_3">
+              <property name="sizePolicy">
+               <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+                <horstretch>0</horstretch>
+@@ -157,7 +157,7 @@
+             <number>8</number>
+            </property>
+            <item>
+-            <widget class="FixLabel" name="label_2">
++            <widget class="KLabel" name="label_2">
+              <property name="sizePolicy">
+               <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+                <horstretch>0</horstretch>
+@@ -237,7 +237,7 @@
+             <number>8</number>
+            </property>
+            <item>
+-            <widget class="FixLabel" name="label">
++            <widget class="KLabel" name="label">
+              <property name="minimumSize">
+               <size>
+                <width>48</width>
+@@ -376,16 +376,16 @@
+   </layout>
+  </widget>
+  <customwidgets>
+-  <customwidget>
+-   <class>FixLabel</class>
+-   <extends>QLabel</extends>
+-   <header location="global">fixlabel.h</header>
+-  </customwidget>
+   <customwidget>
+    <class>kdk::KPushButton</class>
+    <extends>QPushButton</extends>
+    <header>kysdk/applications/kpushbutton.h</header>
+   </customwidget>
++  <customwidget>
++   <class>KLabel</class>
++   <extends>QLabel</extends>
++   <header>klabel.h</header>
++  </customwidget>
+  </customwidgets>
+  <resources/>
+  <connections/>
+diff --git a/plugins/devices/shortcut/shortcut.pro b/plugins/devices/shortcut/shortcut.pro
+index ce5c719..1d03eec 100644
+--- a/plugins/devices/shortcut/shortcut.pro
++++ b/plugins/devices/shortcut/shortcut.pro
+@@ -1,10 +1,8 @@
+ include(../../../env.pri)
+ include($$PROJECT_ROOTDIR/libukcc/widgets/HoverWidget/hoverwidget.pri)
+-include($$PROJECT_ROOTDIR/libukcc/widgets/ImageUtil/imageutil.pri)
+ include($$PROJECT_ROOTDIR/libukcc/widgets/Label/label.pri)
+ include($$PROJECT_ROOTDIR/libukcc/widgets/AddBtn/addbtn.pri)
+ include($$PROJECT_ROOTDIR/libukcc/widgets/Frame/frame.pri)
+-include($$PROJECT_ROOTDIR/libukcc/widgets/CloseButton/closebutton.pri)
+ include($$PROJECT_ROOTDIR/libukcc/widgets/SettingWidget/settingwidget.pri)
+ include($$PROJECT_ROOTDIR/libukcc/interface.pri)
+ 
+diff --git a/plugins/devices/shortcut/shortcut.ui b/plugins/devices/shortcut/shortcut.ui
+deleted file mode 100644
+index 3ac2642..0000000
+--- a/plugins/devices/shortcut/shortcut.ui
++++ /dev/null
+@@ -1,160 +0,0 @@
+-<?xml version="1.0" encoding="UTF-8"?>
+-<ui version="4.0">
+- <class>Shortcut</class>
+- <widget class="QWidget" name="Shortcut">
+-  <property name="geometry">
+-   <rect>
+-    <x>0</x>
+-    <y>0</y>
+-    <width>683</width>
+-    <height>459</height>
+-   </rect>
+-  </property>
+-  <property name="minimumSize">
+-   <size>
+-    <width>550</width>
+-    <height>0</height>
+-   </size>
+-  </property>
+-  <property name="maximumSize">
+-   <size>
+-    <width>16777215</width>
+-    <height>16777215</height>
+-   </size>
+-  </property>
+-  <property name="windowTitle">
+-   <string notr="true">Shortcut</string>
+-  </property>
+-  <layout class="QVBoxLayout" name="verticalLayout_4">
+-   <property name="leftMargin">
+-    <number>0</number>
+-   </property>
+-   <property name="topMargin">
+-    <number>0</number>
+-   </property>
+-   <property name="rightMargin">
+-    <number>0</number>
+-   </property>
+-   <property name="bottomMargin">
+-    <number>0</number>
+-   </property>
+-   <item>
+-    <widget class="TitleLabel" name="systemLabel">
+-     <property name="sizePolicy">
+-      <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+-       <horstretch>0</horstretch>
+-       <verstretch>0</verstretch>
+-      </sizepolicy>
+-     </property>
+-     <property name="text">
+-      <string>System Shortcut</string>
+-     </property>
+-    </widget>
+-   </item>
+-   <item>
+-    <layout class="QVBoxLayout" name="systemLayout"/>
+-   </item>
+-   <item>
+-    <spacer name="verticalSpacer_2">
+-     <property name="orientation">
+-      <enum>Qt::Vertical</enum>
+-     </property>
+-     <property name="sizeType">
+-      <enum>QSizePolicy::Fixed</enum>
+-     </property>
+-     <property name="sizeHint" stdset="0">
+-      <size>
+-       <width>20</width>
+-       <height>24</height>
+-      </size>
+-     </property>
+-    </spacer>
+-   </item>
+-   <item>
+-    <widget class="TitleLabel" name="customLabel">
+-     <property name="sizePolicy">
+-      <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+-       <horstretch>0</horstretch>
+-       <verstretch>0</verstretch>
+-      </sizepolicy>
+-     </property>
+-     <property name="text">
+-      <string>Custom Shortcut</string>
+-     </property>
+-    </widget>
+-   </item>
+-   <item>
+-    <widget class="QFrame" name="verticalFrame">
+-     <property name="frameShape">
+-      <enum>QFrame::NoFrame</enum>
+-     </property>
+-     <property name="lineWidth">
+-      <number>0</number>
+-     </property>
+-     <layout class="QVBoxLayout" name="verticalLayout_5">
+-      <property name="spacing">
+-       <number>1</number>
+-      </property>
+-      <property name="leftMargin">
+-       <number>0</number>
+-      </property>
+-      <property name="topMargin">
+-       <number>0</number>
+-      </property>
+-      <property name="rightMargin">
+-       <number>0</number>
+-      </property>
+-      <property name="bottomMargin">
+-       <number>0</number>
+-      </property>
+-      <item>
+-       <layout class="QVBoxLayout" name="customLayout">
+-        <property name="spacing">
+-         <number>0</number>
+-        </property>
+-        <property name="bottomMargin">
+-         <number>0</number>
+-        </property>
+-       </layout>
+-      </item>
+-      <item>
+-       <layout class="QHBoxLayout" name="addLyt">
+-        <property name="spacing">
+-         <number>0</number>
+-        </property>
+-        <property name="leftMargin">
+-         <number>0</number>
+-        </property>
+-        <property name="rightMargin">
+-         <number>0</number>
+-        </property>
+-       </layout>
+-      </item>
+-     </layout>
+-    </widget>
+-   </item>
+-   <item>
+-    <spacer name="verticalSpacer">
+-     <property name="orientation">
+-      <enum>Qt::Vertical</enum>
+-     </property>
+-     <property name="sizeHint" stdset="0">
+-      <size>
+-       <width>20</width>
+-       <height>0</height>
+-      </size>
+-     </property>
+-    </spacer>
+-   </item>
+-  </layout>
+- </widget>
+- <customwidgets>
+-  <customwidget>
+-   <class>TitleLabel</class>
+-   <extends>QLabel</extends>
+-   <header location="global">titlelabel.h</header>
+-  </customwidget>
+- </customwidgets>
+- <resources/>
+- <connections/>
+-</ui>
+diff --git a/plugins/devices/shortcut/shortcutui.cpp b/plugins/devices/shortcut/shortcutui.cpp
+index a19127b..c0d00ee 100644
+--- a/plugins/devices/shortcut/shortcutui.cpp
++++ b/plugins/devices/shortcut/shortcutui.cpp
+@@ -27,7 +27,8 @@ void ShortcutUi::initUi()
+ 
+ void ShortcutUi::initSystem()
+ {
+-    systemTitle         = new TitleLabel(this);
++    systemTitle         = new KLabel(this);
++    systemTitle->setContentsMargins(16, 0, 0, 0);
+     systemShortcutGroup = new SettingGroup(this);
+     //~ contents_path /Shortcut/System Shortcut
+     systemTitle->setText(tr("System Shortcut"));
+@@ -38,12 +39,13 @@ void ShortcutUi::initSystem()
+ 
+ void ShortcutUi::initCustom()
+ {
+-    customTitle         = new TitleLabel(this);
++    customTitle         = new KLabel(this);
+     customShortcutGroup = new SettingGroup(this);
+     addButton           = new AddButton(this);
+     QHBoxLayout *layout = new QHBoxLayout(this);
+     //~ contents_path /Shortcut/Customize Shortcut
+     customTitle->setText(tr("Customize Shortcut"));
++    customTitle->setContentsMargins(16, 0, 0, 0);
+     customLayout->setSpacing(0);
+     customLayout->addWidget(customTitle);
+     customLayout->addSpacing(8);
+@@ -139,7 +141,7 @@ void ShortcutUi::addSystemShortcut(const QString &name, const QString &shortcut,
+ 
+     UkccFrame              *shortCutFrame         = new UkccFrame(this);
+ 
+-    FixLabel               *nameLabel             = new FixLabel(shortCutFrame);
++    KLabel                 *nameLabel             = new KLabel(shortCutFrame);
+     ClickFixLabel          *bingdingLabel         = new ClickFixLabel(shortCutFrame);
+     ClickFixLabel          *bingdingLabelTwice    = nullptr;
+ 
+@@ -151,7 +153,7 @@ void ShortcutUi::addSystemShortcut(const QString &name, const QString &shortcut,
+     QHBoxLayout            *lineEditLayoutTwice   = new QHBoxLayout;
+ 
+ #ifndef Nile
+-    FixLabel *bindingLabel = new FixLabel(shortCutFrame);
++    KLabel *bindingLabel = new KLabel(shortCutFrame);
+     bindingLabel->setText(getShowShortcutString(shortcut));
+     bindingLabel->setAlignment(Qt::AlignRight | Qt::AlignVCenter);
+ #endif
+diff --git a/plugins/devices/shortcut/shortcutui.h b/plugins/devices/shortcut/shortcutui.h
+index b2baadc..29369e3 100644
+--- a/plugins/devices/shortcut/shortcutui.h
++++ b/plugins/devices/shortcut/shortcutui.h
+@@ -3,8 +3,6 @@
+ 
+ #include "settinggroup.h"
+ #include "addbutton.h"
+-#include "fixlabel.h"
+-#include "titlelabel.h"
+ #include "doubleclicklineedit.h"
+ #include "clickfixlabel.h"
+ #include "addshortcutdialog.h"
+@@ -13,6 +11,9 @@
+ #include <QWidget>
+ #include <QMenu>
+ #include <QMessageBox>
++#include <klabel.h>
++
++using namespace kdk;
+ 
+ class ShortcutUi : public QWidget
+ {
+@@ -39,11 +40,11 @@ private:
+     QVBoxLayout *customLayout = nullptr;
+ 
+ private:
+-    TitleLabel   *systemTitle         = nullptr;
++    KLabel   *systemTitle         = nullptr;
+     SettingGroup *systemShortcutGroup = nullptr;
+ 
+ private:
+-    TitleLabel   *customTitle         = nullptr;
++    KLabel   *customTitle         = nullptr;
+     SettingGroup *customShortcutGroup = nullptr;
+     AddButton    *addButton           = nullptr;
+ 
+diff --git a/plugins/personalized/fonts/fonts.cpp b/plugins/personalized/fonts/fonts.cpp
+index cad1b68..a70b539 100644
+--- a/plugins/personalized/fonts/fonts.cpp
++++ b/plugins/personalized/fonts/fonts.cpp
+@@ -71,7 +71,7 @@ QWidget *Fonts::pluginUi() {
+         pluginWidget = new QWidget;
+         pluginWidget->setAttribute(Qt::WA_DeleteOnClose);
+         ui->setupUi(pluginWidget);
+-        ui->titleLabel->setContentsMargins(14, 0, 0, 0);
++        ui->titleLabel->setContentsMargins(16, 0, 0, 0);
+ 
+         initSearchText();
+ 
+diff --git a/plugins/personalized/fonts/fonts.h b/plugins/personalized/fonts/fonts.h
+index 8c6ce38..b7038f5 100644
+--- a/plugins/personalized/fonts/fonts.h
++++ b/plugins/personalized/fonts/fonts.h
+@@ -34,6 +34,7 @@
+ 
+ #include "shell/interface.h"
+ #include "ukcccommon.h"
++#include <klabel.h>
+ using namespace ukcc;
+ 
+ using namespace kdk;
+diff --git a/plugins/personalized/fonts/fonts.ui b/plugins/personalized/fonts/fonts.ui
+index fa3c661..f758ae1 100644
+--- a/plugins/personalized/fonts/fonts.ui
++++ b/plugins/personalized/fonts/fonts.ui
+@@ -39,7 +39,7 @@
+     <number>0</number>
+    </property>
+    <item>
+-    <widget class="TitleLabel" name="titleLabel">
++    <widget class="KLabel" name="titleLabel">
+      <property name="sizePolicy">
+       <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+        <horstretch>0</horstretch>
+@@ -123,7 +123,7 @@
+             <number>0</number>
+            </property>
+            <item>
+-            <widget class="FixLabel" name="fontSizeLabel">
++            <widget class="KLabel" name="fontSizeLabel">
+              <property name="sizePolicy">
+               <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+                <horstretch>0</horstretch>
+@@ -241,7 +241,7 @@
+             <number>0</number>
+            </property>
+            <item>
+-            <widget class="FixLabel" name="fontSelectLabel">
++            <widget class="KLabel" name="fontSelectLabel">
+              <property name="sizePolicy">
+               <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+                <horstretch>0</horstretch>
+@@ -347,7 +347,7 @@
+             <number>0</number>
+            </property>
+            <item>
+-            <widget class="FixLabel" name="monoSelectLabel">
++            <widget class="KLabel" name="monoSelectLabel">
+              <property name="sizePolicy">
+               <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+                <horstretch>0</horstretch>
+@@ -455,14 +455,9 @@
+  <layoutdefault spacing="6" margin="11"/>
+  <customwidgets>
+   <customwidget>
+-   <class>TitleLabel</class>
++   <class>KLabel</class>
+    <extends>QLabel</extends>
+-   <header location="global">titlelabel.h</header>
+-  </customwidget>
+-  <customwidget>
+-   <class>FixLabel</class>
+-   <extends>QLabel</extends>
+-   <header>fixlabel.h</header>
++   <header>klabel.h</header>
+   </customwidget>
+  </customwidgets>
+  <resources/>
+diff --git a/plugins/personalized/screenlock/screenlock.ui b/plugins/personalized/screenlock/screenlock.ui
+deleted file mode 100644
+index 9e77862..0000000
+--- a/plugins/personalized/screenlock/screenlock.ui
++++ /dev/null
+@@ -1,275 +0,0 @@
+-<?xml version="1.0" encoding="UTF-8"?>
+-<ui version="4.0">
+- <class>Screenlock</class>
+- <widget class="QWidget" name="Screenlock">
+-  <property name="geometry">
+-   <rect>
+-    <x>0</x>
+-    <y>0</y>
+-    <width>550</width>
+-    <height>700</height>
+-   </rect>
+-  </property>
+-  <property name="minimumSize">
+-   <size>
+-    <width>0</width>
+-    <height>0</height>
+-   </size>
+-  </property>
+-  <property name="maximumSize">
+-   <size>
+-    <width>16777215</width>
+-    <height>16777215</height>
+-   </size>
+-  </property>
+-  <property name="windowTitle">
+-   <string>Screenlock</string>
+-  </property>
+-  <layout class="QVBoxLayout" name="verticalLayout_2">
+-   <property name="spacing">
+-    <number>0</number>
+-   </property>
+-   <property name="leftMargin">
+-    <number>0</number>
+-   </property>
+-   <property name="topMargin">
+-    <number>0</number>
+-   </property>
+-   <property name="rightMargin">
+-    <number>0</number>
+-   </property>
+-   <property name="bottomMargin">
+-    <number>0</number>
+-   </property>
+-   <item>
+-    <widget class="QFrame" name="frame_1">
+-     <property name="minimumSize">
+-      <size>
+-       <width>550</width>
+-       <height>0</height>
+-      </size>
+-     </property>
+-     <property name="maximumSize">
+-      <size>
+-       <width>16777215</width>
+-       <height>16777215</height>
+-      </size>
+-     </property>
+-     <layout class="QVBoxLayout" name="verticalLayout">
+-      <property name="leftMargin">
+-       <number>0</number>
+-      </property>
+-      <property name="topMargin">
+-       <number>0</number>
+-      </property>
+-      <property name="rightMargin">
+-       <number>0</number>
+-      </property>
+-      <property name="bottomMargin">
+-       <number>0</number>
+-      </property>
+-      <item>
+-       <widget class="TitleLabel" name="titleLabel">
+-        <property name="sizePolicy">
+-         <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+-          <horstretch>0</horstretch>
+-          <verstretch>0</verstretch>
+-         </sizepolicy>
+-        </property>
+-        <property name="text">
+-         <string>Screenlock Interface</string>
+-        </property>
+-       </widget>
+-      </item>
+-      <item>
+-       <widget class="QFrame" name="previewFrame">
+-        <property name="frameShape">
+-         <enum>QFrame::Box</enum>
+-        </property>
+-        <layout class="QHBoxLayout" name="horizontalLayout">
+-         <property name="leftMargin">
+-          <number>16</number>
+-         </property>
+-         <property name="topMargin">
+-          <number>16</number>
+-         </property>
+-         <property name="rightMargin">
+-          <number>16</number>
+-         </property>
+-         <property name="bottomMargin">
+-          <number>16</number>
+-         </property>
+-         <item>
+-          <widget class="QLabel" name="previewLabel">
+-           <property name="sizePolicy">
+-            <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+-             <horstretch>0</horstretch>
+-             <verstretch>0</verstretch>
+-            </sizepolicy>
+-           </property>
+-           <property name="minimumSize">
+-            <size>
+-             <width>300</width>
+-             <height>180</height>
+-            </size>
+-           </property>
+-           <property name="maximumSize">
+-            <size>
+-             <width>300</width>
+-             <height>180</height>
+-            </size>
+-           </property>
+-           <property name="text">
+-            <string/>
+-           </property>
+-           <property name="scaledContents">
+-            <bool>true</bool>
+-           </property>
+-          </widget>
+-         </item>
+-         <item>
+-          <spacer name="horizontalSpacer_4">
+-           <property name="orientation">
+-            <enum>Qt::Horizontal</enum>
+-           </property>
+-           <property name="sizeHint" stdset="0">
+-            <size>
+-             <width>40</width>
+-             <height>20</height>
+-            </size>
+-           </property>
+-          </spacer>
+-         </item>
+-        </layout>
+-       </widget>
+-      </item>
+-      <item>
+-       <layout class="QVBoxLayout" name="centerLayout"/>
+-      </item>
+-      <item>
+-       <layout class="QHBoxLayout" name="horizontalLayout_2">
+-        <property name="spacing">
+-         <number>32</number>
+-        </property>
+-        <property name="leftMargin">
+-         <number>4</number>
+-        </property>
+-        <property name="topMargin">
+-         <number>8</number>
+-        </property>
+-        <property name="rightMargin">
+-         <number>4</number>
+-        </property>
+-        <item>
+-         <widget class="QPushButton" name="browserLocalwpBtn">
+-          <property name="minimumSize">
+-           <size>
+-            <width>110</width>
+-            <height>0</height>
+-           </size>
+-          </property>
+-          <property name="maximumSize">
+-           <size>
+-            <width>110</width>
+-            <height>16777215</height>
+-           </size>
+-          </property>
+-          <property name="text">
+-           <string>Browse</string>
+-          </property>
+-         </widget>
+-        </item>
+-        <item>
+-         <widget class="QPushButton" name="onlineBtn">
+-          <property name="text">
+-           <string>Online Picture</string>
+-          </property>
+-         </widget>
+-        </item>
+-        <item>
+-         <spacer name="horizontalSpacer">
+-          <property name="orientation">
+-           <enum>Qt::Horizontal</enum>
+-          </property>
+-          <property name="sizeHint" stdset="0">
+-           <size>
+-            <width>20</width>
+-            <height>20</height>
+-           </size>
+-          </property>
+-         </spacer>
+-        </item>
+-        <item>
+-         <widget class="QPushButton" name="resetBtn">
+-          <property name="minimumSize">
+-           <size>
+-            <width>120</width>
+-            <height>0</height>
+-           </size>
+-          </property>
+-          <property name="maximumSize">
+-           <size>
+-            <width>16777215</width>
+-            <height>16777215</height>
+-           </size>
+-          </property>
+-          <property name="text">
+-           <string>Reset To Default</string>
+-          </property>
+-         </widget>
+-        </item>
+-       </layout>
+-      </item>
+-     </layout>
+-    </widget>
+-   </item>
+-   <item>
+-    <layout class="QVBoxLayout" name="verticalLayout_4">
+-     <property name="topMargin">
+-      <number>24</number>
+-     </property>
+-     <property name="bottomMargin">
+-      <number>8</number>
+-     </property>
+-     <item>
+-      <widget class="TitleLabel" name="setLabel">
+-       <property name="text">
+-        <string>Related Settings</string>
+-       </property>
+-      </widget>
+-     </item>
+-    </layout>
+-   </item>
+-   <item>
+-    <layout class="QVBoxLayout" name="relatedLayout">
+-     <property name="spacing">
+-      <number>0</number>
+-     </property>
+-    </layout>
+-   </item>
+-   <item>
+-    <spacer name="verticalSpacer">
+-     <property name="orientation">
+-      <enum>Qt::Vertical</enum>
+-     </property>
+-     <property name="sizeHint" stdset="0">
+-      <size>
+-       <width>20</width>
+-       <height>0</height>
+-      </size>
+-     </property>
+-    </spacer>
+-   </item>
+-  </layout>
+- </widget>
+- <layoutdefault spacing="6" margin="11"/>
+- <customwidgets>
+-  <customwidget>
+-   <class>TitleLabel</class>
+-   <extends>QLabel</extends>
+-   <header location="global">titlelabel.h</header>
+-  </customwidget>
+- </customwidgets>
+- <resources/>
+- <connections/>
+-</ui>
+diff --git a/plugins/personalized/screenlock/screenlockui.cpp b/plugins/personalized/screenlock/screenlockui.cpp
+index bb525f4..8d868c8 100644
+--- a/plugins/personalized/screenlock/screenlockui.cpp
++++ b/plugins/personalized/screenlock/screenlockui.cpp
+@@ -32,7 +32,8 @@ void ScreenlockUi::initUi()
+ 
+ void ScreenlockUi::initScreenLock()
+ {
+-    wallpaperTitleLabel = new TitleLabel(this);
++    wallpaperTitleLabel = new KLabel(this);
++    wallpaperTitleLabel->setContentsMargins(16, 0, 0, 0);
+     previewFrame        = new UkccFrame(this);
+     previewLayout       = new QHBoxLayout(previewFrame);
+     previewLabel        = new QLabel(this);
+@@ -130,7 +131,8 @@ void ScreenlockUi::initScreenLock()
+ 
+ void ScreenlockUi::initRelateSet()
+ {
+-    relateTitleLabel  = new TitleLabel(this);
++    relateTitleLabel  = new KLabel(this);
++    relateTitleLabel->setContentsMargins(16, 0, 0, 0);
+     relatedGroup      = new SettingGroup(this);
+     //~ contents_path /Screenlock/Monitor Off
+     monitorWidget     = new PushButtonWidget(tr("Monitor Off"), relatedGroup);
+diff --git a/plugins/personalized/screenlock/screenlockui.h b/plugins/personalized/screenlock/screenlockui.h
+index a848d99..fb3ee13 100644
+--- a/plugins/personalized/screenlock/screenlockui.h
++++ b/plugins/personalized/screenlock/screenlockui.h
+@@ -1,7 +1,6 @@
+ #ifndef SCREENLOCKUI_H
+ #define SCREENLOCKUI_H
+ 
+-#include "titlelabel.h"
+ #include "settinggroup.h"
+ #include "flowlayout.h"
+ #include "switchwidget.h"
+@@ -11,6 +10,9 @@
+ #include "pictureunit.h"
+ #include <QHBoxLayout>
+ #include <QWidget>
++#include <klabel.h>
++
++using namespace kdk;
+ 
+ class ScreenlockUi : public QWidget
+ {
+@@ -50,7 +52,7 @@ private:
+     QVBoxLayout *relateLayout     = nullptr;
+ 
+ private:
+-    TitleLabel   *wallpaperTitleLabel = nullptr;
++    KLabel   *wallpaperTitleLabel = nullptr;
+     UkccFrame    *previewFrame        = nullptr;
+     QHBoxLayout  *previewLayout       = nullptr;
+     QLabel       *previewLabel        = nullptr;
+@@ -71,7 +73,7 @@ private:
+     QPushButton  *resetBtn            = nullptr;
+ 
+ private:
+-    TitleLabel       *relateTitleLabel  = nullptr;
++    KLabel       *relateTitleLabel  = nullptr;
+     SettingGroup     *relatedGroup      = nullptr;
+     PushButtonWidget *monitorWidget     = nullptr;
+     PushButtonWidget *screensaverWidget = nullptr;
+diff --git a/plugins/personalized/screensaver/screensaver.pro b/plugins/personalized/screensaver/screensaver.pro
+index 1e6ed21..856f330 100644
+--- a/plugins/personalized/screensaver/screensaver.pro
++++ b/plugins/personalized/screensaver/screensaver.pro
+@@ -8,7 +8,6 @@ include(../../../env.pri)
+ include($$PROJECT_ROOTDIR/libukcc/widgets/ComboBox/combobox.pri)
+ include($$PROJECT_ROOTDIR/libukcc/widgets/Label/label.pri)
+ include($$PROJECT_ROOTDIR/libukcc/widgets/Frame/frame.pri)
+-include($$PROJECT_ROOTDIR/libukcc/widgets/Uslider/uslider.pri)
+ include($$PROJECT_ROOTDIR/libukcc/widgets/SettingWidget/settingwidget.pri)
+ include($$PROJECT_ROOTDIR/libukcc/interface.pri)
+ 
+diff --git a/plugins/personalized/screensaver/screensaver.ui b/plugins/personalized/screensaver/screensaver.ui
+deleted file mode 100644
+index 9bbdfdf..0000000
+--- a/plugins/personalized/screensaver/screensaver.ui
++++ /dev/null
+@@ -1,254 +0,0 @@
+-<?xml version="1.0" encoding="UTF-8"?>
+-<ui version="4.0">
+- <class>Screensaver</class>
+- <widget class="QWidget" name="Screensaver">
+-  <property name="geometry">
+-   <rect>
+-    <x>0</x>
+-    <y>0</y>
+-    <width>684</width>
+-    <height>560</height>
+-   </rect>
+-  </property>
+-  <property name="minimumSize">
+-   <size>
+-    <width>0</width>
+-    <height>0</height>
+-   </size>
+-  </property>
+-  <property name="maximumSize">
+-   <size>
+-    <width>16777215</width>
+-    <height>16777215</height>
+-   </size>
+-  </property>
+-  <property name="sizeIncrement">
+-   <size>
+-    <width>0</width>
+-    <height>0</height>
+-   </size>
+-  </property>
+-  <property name="windowTitle">
+-   <string notr="true">Screensaver</string>
+-  </property>
+-  <layout class="QVBoxLayout" name="verticalLayout_2">
+-   <property name="spacing">
+-    <number>8</number>
+-   </property>
+-   <property name="leftMargin">
+-    <number>0</number>
+-   </property>
+-   <property name="topMargin">
+-    <number>0</number>
+-   </property>
+-   <property name="rightMargin">
+-    <number>0</number>
+-   </property>
+-   <property name="bottomMargin">
+-    <number>0</number>
+-   </property>
+-   <item>
+-    <widget class="TitleLabel" name="titleLabel">
+-     <property name="sizePolicy">
+-      <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+-       <horstretch>0</horstretch>
+-       <verstretch>0</verstretch>
+-      </sizepolicy>
+-     </property>
+-     <property name="text">
+-      <string>Screensaver</string>
+-     </property>
+-    </widget>
+-   </item>
+-   <item>
+-    <widget class="QFrame" name="viewFrame">
+-     <property name="frameShape">
+-      <enum>QFrame::Box</enum>
+-     </property>
+-     <layout class="QHBoxLayout" name="horizontalLayout">
+-      <property name="spacing">
+-       <number>0</number>
+-      </property>
+-      <property name="leftMargin">
+-       <number>16</number>
+-      </property>
+-      <property name="topMargin">
+-       <number>16</number>
+-      </property>
+-      <property name="rightMargin">
+-       <number>16</number>
+-      </property>
+-      <property name="bottomMargin">
+-       <number>16</number>
+-      </property>
+-      <item>
+-       <widget class="PreviewWidget" name="previewWidget" native="true">
+-        <property name="minimumSize">
+-         <size>
+-          <width>300</width>
+-          <height>180</height>
+-         </size>
+-        </property>
+-        <property name="maximumSize">
+-         <size>
+-          <width>300</width>
+-          <height>180</height>
+-         </size>
+-        </property>
+-       </widget>
+-      </item>
+-      <item>
+-       <spacer name="horizontalSpacer">
+-        <property name="orientation">
+-         <enum>Qt::Horizontal</enum>
+-        </property>
+-        <property name="sizeType">
+-         <enum>QSizePolicy::Expanding</enum>
+-        </property>
+-        <property name="sizeHint" stdset="0">
+-         <size>
+-          <width>40</width>
+-          <height>20</height>
+-         </size>
+-        </property>
+-       </spacer>
+-      </item>
+-     </layout>
+-    </widget>
+-   </item>
+-   <item>
+-    <layout class="QVBoxLayout" name="screensaverLayout"/>
+-   </item>
+-   <item>
+-    <widget class="QFrame" name="enableFrame">
+-     <property name="minimumSize">
+-      <size>
+-       <width>550</width>
+-       <height>50</height>
+-      </size>
+-     </property>
+-     <property name="maximumSize">
+-      <size>
+-       <width>960</width>
+-       <height>50</height>
+-      </size>
+-     </property>
+-     <property name="frameShape">
+-      <enum>QFrame::Box</enum>
+-     </property>
+-     <property name="lineWidth">
+-      <number>0</number>
+-     </property>
+-     <layout class="QHBoxLayout" name="horizontalLayout_3">
+-      <property name="spacing">
+-       <number>0</number>
+-      </property>
+-      <property name="leftMargin">
+-       <number>0</number>
+-      </property>
+-      <property name="topMargin">
+-       <number>0</number>
+-      </property>
+-      <property name="rightMargin">
+-       <number>0</number>
+-      </property>
+-      <property name="bottomMargin">
+-       <number>0</number>
+-      </property>
+-      <item>
+-       <layout class="QHBoxLayout" name="enableHorLayout">
+-        <property name="spacing">
+-         <number>0</number>
+-        </property>
+-        <property name="leftMargin">
+-         <number>16</number>
+-        </property>
+-        <property name="rightMargin">
+-         <number>16</number>
+-        </property>
+-        <item>
+-         <widget class="FixLabel" name="enableLabel">
+-          <property name="sizePolicy">
+-           <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+-            <horstretch>0</horstretch>
+-            <verstretch>0</verstretch>
+-           </sizepolicy>
+-          </property>
+-          <property name="minimumSize">
+-           <size>
+-            <width>196</width>
+-            <height>0</height>
+-           </size>
+-          </property>
+-          <property name="maximumSize">
+-           <size>
+-            <width>220</width>
+-            <height>16777215</height>
+-           </size>
+-          </property>
+-          <property name="text">
+-           <string>Lock screen when activating screensaver</string>
+-          </property>
+-         </widget>
+-        </item>
+-        <item>
+-         <widget class="QComboBox" name="comboBox">
+-          <property name="minimumSize">
+-           <size>
+-            <width>300</width>
+-            <height>0</height>
+-           </size>
+-          </property>
+-          <property name="maximumSize">
+-           <size>
+-            <width>16777215</width>
+-            <height>30</height>
+-           </size>
+-          </property>
+-          <property name="styleSheet">
+-           <string notr="true"/>
+-          </property>
+-         </widget>
+-        </item>
+-       </layout>
+-      </item>
+-     </layout>
+-    </widget>
+-   </item>
+-   <item>
+-    <spacer name="verticalSpacer">
+-     <property name="orientation">
+-      <enum>Qt::Vertical</enum>
+-     </property>
+-     <property name="sizeHint" stdset="0">
+-      <size>
+-       <width>20</width>
+-       <height>0</height>
+-      </size>
+-     </property>
+-    </spacer>
+-   </item>
+-  </layout>
+- </widget>
+- <layoutdefault spacing="6" margin="11"/>
+- <customwidgets>
+-  <customwidget>
+-   <class>TitleLabel</class>
+-   <extends>QLabel</extends>
+-   <header location="global">titlelabel.h</header>
+-  </customwidget>
+-  <customwidget>
+-   <class>FixLabel</class>
+-   <extends>QLabel</extends>
+-   <header>fixlabel.h</header>
+-  </customwidget>
+-  <customwidget>
+-   <class>PreviewWidget</class>
+-   <extends>QWidget</extends>
+-   <header>previewwidget.h</header>
+-   <container>1</container>
+-  </customwidget>
+- </customwidgets>
+- <resources/>
+- <connections/>
+-</ui>
+diff --git a/plugins/personalized/screensaver/screensaverui.cpp b/plugins/personalized/screensaver/screensaverui.cpp
+index 0c23bc1..f45526c 100644
+--- a/plugins/personalized/screensaver/screensaverui.cpp
++++ b/plugins/personalized/screensaver/screensaverui.cpp
+@@ -26,7 +26,8 @@ void ScreensaverUi::initUi()
+ 
+ void ScreensaverUi::initPreview()
+ {
+-    screensaverTitle = new TitleLabel(this);
++    screensaverTitle = new KLabel(this);
++    screensaverTitle->setContentsMargins(16, 0, 0, 0);
+     previewFrame     = new UkccFrame(this);
+     previewLayout    = new QHBoxLayout(previewFrame);
+     previewWidget    = new PreviewWidget(this);
+@@ -74,7 +75,7 @@ void ScreensaverUi::initSourceFrame()
+ {
+     UkccFrame   *screensaverSourceFrame = new UkccFrame(customizeGroup, UkccFrame::BorderRadiusStyle::Around, true);
+     QHBoxLayout *sourceLayout           = new QHBoxLayout(screensaverSourceFrame);
+-    FixLabel    *sourceLabel            = new FixLabel();
++    KLabel    *sourceLabel            = new KLabel();
+ 
+     sourcePathLine = new QLineEdit();
+     sourceButton   = new QPushButton();
+@@ -99,7 +100,7 @@ void ScreensaverUi::initSwitchModeFrame()
+ {
+     UkccFrame    *pictureSwitchFrame = new UkccFrame(customizeGroup, UkccFrame::BorderRadiusStyle::Around, true);
+     QHBoxLayout  *randomLayout       = new QHBoxLayout(pictureSwitchFrame);
+-    FixLabel     *randomLabel        = new FixLabel();
++    KLabel     *randomLabel        = new KLabel();
+     QRadioButton *radioOrder         = new QRadioButton();
+     QRadioButton *radioRand          = new QRadioButton();
+ 
+@@ -129,7 +130,7 @@ void ScreensaverUi::initSwitchTimeFrame()
+ {
+     UkccFrame   *timeSetFrame  = new UkccFrame(customizeGroup, UkccFrame::BorderRadiusStyle::Around, true);
+     QHBoxLayout *timeSetLayout = new QHBoxLayout();
+-    FixLabel    *timeSetLabel  = new FixLabel();
++    KLabel    *timeSetLabel  = new KLabel();
+ 
+     switchTimeComboBox = new QComboBox();
+ 
+@@ -149,7 +150,7 @@ void ScreensaverUi::initCustomTextFrame()
+ {
+     UkccFrame   *showTextFrame  = new UkccFrame(customizeGroup, UkccFrame::BorderRadiusStyle::Around, true);
+     QHBoxLayout *showTextLayout = new QHBoxLayout();
+-    FixLabel    *showLabel      = new FixLabel();
++    KLabel    *showLabel      = new KLabel();
+ 
+     textLineEdit = new QLineEdit(); //用户输入文字
+     showTextFrame->setLayout(showTextLayout);
+@@ -168,7 +169,7 @@ void ScreensaverUi::initTextPositionFrame()
+ {
+     UkccFrame    *showTextSetFrame = new UkccFrame(customizeGroup, UkccFrame::BorderRadiusStyle::Around, true);
+     QHBoxLayout  *textSetLayout    = new QHBoxLayout(showTextSetFrame);
+-    FixLabel     *textSetLabel     = new FixLabel();
++    KLabel     *textSetLabel     = new KLabel();
+     QRadioButton *radioRandom      = new QRadioButton(this);
+     QRadioButton *radioCenter      = new QRadioButton(this);
+ 
+@@ -198,7 +199,7 @@ void ScreensaverUi::initBreakTimeFrame()
+ {
+     UkccFrame   *showTimeFrame  = new UkccFrame(screensaverGroup, UkccFrame::BorderRadiusStyle::Around, true);
+     QHBoxLayout *showTimeLayout = new QHBoxLayout(showTimeFrame);
+-    FixLabel    *showTimeLabel  = new FixLabel();
++    KLabel    *showTimeLabel  = new KLabel();
+ 
+     showTimeLayout->setContentsMargins(16,0,16,0);
+     showTimeLayout->addWidget(showTimeLabel);
+@@ -219,7 +220,7 @@ void ScreensaverUi::initScreenlockFrame()
+ {
+     UkccFrame   *lockFrame  = new UkccFrame(screensaverGroup, UkccFrame::BorderRadiusStyle::Around, true);;
+     QHBoxLayout *lockLayout = new QHBoxLayout(lockFrame);
+-    FixLabel    *lockLabel  = new FixLabel();
++    KLabel    *lockLabel  = new KLabel();
+     //~ contents_path /Screensaver/Lock screen when screensaver boot
+     lockLabel->setText(tr("Lock screen when screensaver boot"));
+     lockLabel->setFixedWidth(400);
+diff --git a/plugins/personalized/screensaver/screensaverui.h b/plugins/personalized/screensaver/screensaverui.h
+index 5cf7461..fd36cf9 100644
+--- a/plugins/personalized/screensaver/screensaverui.h
++++ b/plugins/personalized/screensaver/screensaverui.h
+@@ -1,7 +1,6 @@
+ #ifndef SCREENSAVERUI_H
+ #define SCREENSAVERUI_H
+ 
+-#include "titlelabel.h"
+ #include "settinggroup.h"
+ #include "switchwidget.h"
+ #include "pushbuttonwidget.h"
+@@ -15,6 +14,9 @@
+ #include <QFileDialog>
+ #include <QButtonGroup>
+ #include <QFileSystemWatcher>
++#include <klabel.h>
++
++using namespace kdk;
+ 
+ class ScreensaverUi : public QWidget
+ {
+@@ -56,7 +58,7 @@ private:
+     QVBoxLayout *uiLayout         = nullptr;
+ 
+ private:
+-    TitleLabel    *screensaverTitle = nullptr;
++    KLabel    *screensaverTitle = nullptr;
+     UkccFrame     *previewFrame     = nullptr;
+     QHBoxLayout   *previewLayout    = nullptr;
+     PreviewWidget *previewWidget    = nullptr;
+diff --git a/plugins/personalized/theme/theme.cpp b/plugins/personalized/theme/theme.cpp
+index 31dcc63..8e65b3e 100644
+--- a/plugins/personalized/theme/theme.cpp
++++ b/plugins/personalized/theme/theme.cpp
+@@ -26,9 +26,6 @@
+ #include <QtDBus/QDBusConnection>
+ #include <QtConcurrent>
+ #include <QRadioButton>
+-
+-#include "iconlabel.h"
+-
+ #include "cursor/xcursortheme.h"
+ #include "../../../shell/customstyle.h"
+ #include "ukcccommon.h"
+@@ -179,7 +176,8 @@ void Theme::initThemeUi()
+     mThemeModeFrame->setFrameShape(QFrame::Shape::Box);
+ 
+     FlowLayout *hLyt = new FlowLayout(mThemeModeFrame, 20, 40, 24);
+-    mThemeModeLabel = new TitleLabel(mThemeModeFrame);
++    mThemeModeLabel = new KLabel(mThemeModeFrame);
++    mThemeModeLabel->setContentsMargins(16, 0, 0, 0);
+ 
+     mLightBtn = new ThemeButton(tr("Light"), QPixmap(QString("://img/plugins/theme/%1.png").arg("light")), mThemeModeFrame);
+     mLightBtn->setObjectName("lighttheme");
+@@ -210,7 +208,8 @@ void Theme::initThemeUi()
+     ui->thememodeLayout->addSpacing(8);
+     ui->thememodeLayout->addWidget(mThemeModeFrame);
+ 
+-    mEffectLabel = new TitleLabel(pluginWidget);
++    mEffectLabel = new KLabel(pluginWidget);
++    mEffectLabel->setContentsMargins(16, 0, 0, 0);
+     //~ contents_path /Theme/Effect setting
+     mEffectLabel->setText(tr("Effect setting"));
+ 
+@@ -355,7 +354,8 @@ void Theme::initIconTheme() {
+ 
+     FlowLayout *fLyt = new FlowLayout(mThemeIconFrame, 0, 40, 0);
+     fLyt->setContentsMargins(16, 16, 0, 4);
+-    mThemeIconLabel = new TitleLabel();
++    mThemeIconLabel = new KLabel();
++    mThemeIconLabel->setContentsMargins(16, 0, 0, 0);
+ 
+     // 构建图标主题Widget Group,方便更新选中/非选中状态
+     mThemeIconBtnGroup = new QButtonGroup;
+@@ -419,7 +419,8 @@ void Theme::initControlTheme()
+     mControlMap.insert("dustGold",     QColor(255, 217, 102));
+     mControlMap.insert("polarGreen",   QColor(82, 196, 41));
+ 
+-    mControlLabel = new TitleLabel();
++    mControlLabel = new KLabel();
++    mControlLabel->setContentsMargins(16, 0, 0, 0);
+     mControlLabel->setMaximumWidth(100);
+     //~ contents_path /Theme/Corlor
+     mControlLabel->setText(tr("Corlor"));
+@@ -477,7 +478,8 @@ void Theme::initCursorTheme(){
+     FlowLayout *fLyt = new FlowLayout(mThemeCursorFrame, 0, 40, 0);
+     fLyt->setContentsMargins(16, 16, 0, 4);
+ 
+-    mThemeCursorLabel = new TitleLabel(mThemeCursorFrame);
++    mThemeCursorLabel = new KLabel(mThemeCursorFrame);
++    mThemeCursorLabel->setContentsMargins(16, 0, 0, 0);
+ 
+     QStringList cursorThemes = getSystemCursorThemes();
+ 
+@@ -532,7 +534,8 @@ void Theme::initGlobalTheme()
+ 
+     mFLyt = new FlowLayout(mSwitchFrame, 0, 40, 0);
+     mFLyt->setContentsMargins(16, 16, 0, 4);
+-    mSwitchLabel = new TitleLabel();
++    mSwitchLabel = new KLabel();
++    mSwitchLabel->setContentsMargins(16, 0, 0, 0);
+     mSwitchLabel->setText(tr("Theme"));
+ 
+     ui->switchLyt->addWidget(mSwitchLabel);
+@@ -604,7 +607,8 @@ QList<GlobalTheme *> Theme::sortGlobalTheme(const QList<GlobalTheme *> &globalTh
+ 
+ void Theme::initJumpTheme()
+ {
+-    mJumpLabel  = new TitleLabel(pluginWidget);
++    mJumpLabel  = new KLabel(pluginWidget);
++    mJumpLabel->setContentsMargins(16, 0, 0, 0);
+ 
+     //~ contents_path /Theme/Other
+     mJumpLabel->setText(tr("Other"));
+diff --git a/plugins/personalized/theme/theme.h b/plugins/personalized/theme/theme.h
+index 9366e81..47cf994 100644
+--- a/plugins/personalized/theme/theme.h
++++ b/plugins/personalized/theme/theme.h
+@@ -38,8 +38,6 @@
+ #include <libkysettings.h>
+ #endif
+ 
+-#include "uslider.h"
+-#include "titlelabel.h"
+ #include "flowlayout.h"
+ #include "icontheme.h"
+ 
+@@ -56,6 +54,7 @@
+ #include "switchwidget.h"
+ #include "sliderwidget.h"
+ #include "comboxwidget.h"
++#include <klabel.h>
+ 
+ using namespace kdk;
+ 
+@@ -99,13 +98,13 @@ private:
+     WidgetGroup *cursorThemeWidgetGroup;
+     WidgetGroup *iconThemeWidgetGroup;
+ 
+-    TitleLabel *mSwitchLabel;
+-    TitleLabel *mControlLabel;
+-    TitleLabel *mJumpLabel;
+-    TitleLabel *mThemeModeLabel;
+-    TitleLabel *mThemeIconLabel;
+-    TitleLabel *mThemeCursorLabel         = nullptr;
+-    TitleLabel *mEffectLabel;
++    KLabel *mSwitchLabel;
++    KLabel *mControlLabel;
++    KLabel *mJumpLabel;
++    KLabel *mThemeModeLabel;
++    KLabel *mThemeIconLabel;
++    KLabel *mThemeCursorLabel         = nullptr;
++    KLabel *mEffectLabel;
+ 
+     ThemeButton *mCustomPicUnit           = nullptr;
+     ThemeButton *mPrePicUnit              = nullptr;
+diff --git a/plugins/personalized/theme/theme.pro b/plugins/personalized/theme/theme.pro
+index 7bc7af4..fef836a 100644
+--- a/plugins/personalized/theme/theme.pro
++++ b/plugins/personalized/theme/theme.pro
+@@ -6,7 +6,6 @@
+ include(../../../env.pri)
+ include($$PROJECT_ROOTDIR/libukcc/widgets/FlowLayout/flowlayout.pri)
+ include($$PROJECT_ROOTDIR/libukcc/widgets/Label/label.pri)
+-include($$PROJECT_ROOTDIR/libukcc/widgets/Uslider/uslider.pri)
+ include($$PROJECT_ROOTDIR/libukcc/interface.pri)
+ include($$PROJECT_ROOTDIR/libukcc/widgets/SettingWidget/settingwidget.pri)
+ 
+diff --git a/plugins/personalized/theme/themewidget.cpp b/plugins/personalized/theme/themewidget.cpp
+index 137a431..a95284b 100644
+--- a/plugins/personalized/theme/themewidget.cpp
++++ b/plugins/personalized/theme/themewidget.cpp
+@@ -65,7 +65,7 @@ ThemeWidget::ThemeWidget(QSize iSize, QString name, QStringList iStringList, QWi
+             selectedLabel->setPixmap(selectIcon.pixmap(selectIcon.actualSize(QSize(16, 16))));
+     });
+ 
+-    FixLabel * nameLabel = new FixLabel(this);
++    KLabel * nameLabel = new KLabel(this);
+     QSizePolicy nameSizePolicy = nameLabel->sizePolicy();
+     nameSizePolicy.setHorizontalPolicy(QSizePolicy::Fixed);
+     nameSizePolicy.setVerticalPolicy(QSizePolicy::Fixed);
+@@ -132,7 +132,7 @@ ThemeWidget::ThemeWidget(QSize iSize, QString name, const QList<QPixmap> &listMa
+             selectedLabel->setPixmap(selectIcon.pixmap(selectIcon.actualSize(QSize(16, 16))));
+     });
+ 
+-    FixLabel * nameLabel = new FixLabel(this);
++    KLabel * nameLabel = new KLabel(this);
+     QSizePolicy nameSizePolicy = nameLabel->sizePolicy();
+     nameSizePolicy.setHorizontalPolicy(QSizePolicy::Preferred);
+     nameSizePolicy.setVerticalPolicy(QSizePolicy::Fixed);
+diff --git a/plugins/personalized/theme/themewidget.h b/plugins/personalized/theme/themewidget.h
+index aa66bb2..008016b 100644
+--- a/plugins/personalized/theme/themewidget.h
++++ b/plugins/personalized/theme/themewidget.h
+@@ -27,7 +27,9 @@
+ #include <QRadioButton>
+ #include <QFrame>
+ #include <QGSettings>
+-#include "fixlabel.h"
++#include <klabel.h>
++
++using namespace kdk;
+ 
+ #define THEME_QT_SCHEMA  "org.ukui.style"
+ 
+diff --git a/plugins/personalized/wallpaper/colordialog.cpp b/plugins/personalized/wallpaper/colordialog.cpp
+index 5d305cc..492007b 100644
+--- a/plugins/personalized/wallpaper/colordialog.cpp
++++ b/plugins/personalized/wallpaper/colordialog.cpp
+@@ -21,7 +21,6 @@
+ #include "ui_colordialog.h"
+ #include "colorsquare.h"
+ #include "maskwidget.h"
+-#include "closebutton.h"
+ #include <QRegExp>
+ 
+ extern void qt_blurImage(QImage &blurImage, qreal radius, bool quality, int transposed);
+diff --git a/plugins/personalized/wallpaper/wallpaper.pro b/plugins/personalized/wallpaper/wallpaper.pro
+index 553a482..51f972a 100644
+--- a/plugins/personalized/wallpaper/wallpaper.pro
++++ b/plugins/personalized/wallpaper/wallpaper.pro
+@@ -7,9 +7,7 @@ include(../../../env.pri)
+ include($$PROJECT_ROOTDIR/libukcc/widgets/AddBtn/addbtn.pri)
+ include($$PROJECT_ROOTDIR/libukcc/widgets/Label/label.pri)
+ include($$PROJECT_ROOTDIR/libukcc/widgets/MaskWidget/maskwidget.pri)
+-include($$PROJECT_ROOTDIR/libukcc/widgets/CloseButton/closebutton.pri)
+ include($$PROJECT_ROOTDIR/libukcc/widgets/FlowLayout/flowlayout.pri)
+-include($$PROJECT_ROOTDIR/libukcc/widgets/ImageUtil/imageutil.pri)
+ include($$PROJECT_ROOTDIR/libukcc/widgets/HoverWidget/hoverwidget.pri)
+ include($$PROJECT_ROOTDIR/libukcc/widgets/SettingWidget/settingwidget.pri)
+ include($$PROJECT_ROOTDIR/libukcc/interface.pri)
+diff --git a/plugins/personalized/wallpaper/wallpaper.ui b/plugins/personalized/wallpaper/wallpaper.ui
+deleted file mode 100644
+index 6d5ef7f..0000000
+--- a/plugins/personalized/wallpaper/wallpaper.ui
++++ /dev/null
+@@ -1,387 +0,0 @@
+-<?xml version="1.0" encoding="UTF-8"?>
+-<ui version="4.0">
+- <class>Wallpaper</class>
+- <widget class="QWidget" name="Wallpaper">
+-  <property name="geometry">
+-   <rect>
+-    <x>0</x>
+-    <y>0</y>
+-    <width>846</width>
+-    <height>479</height>
+-   </rect>
+-  </property>
+-  <property name="sizePolicy">
+-   <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+-    <horstretch>0</horstretch>
+-    <verstretch>0</verstretch>
+-   </sizepolicy>
+-  </property>
+-  <property name="minimumSize">
+-   <size>
+-    <width>0</width>
+-    <height>0</height>
+-   </size>
+-  </property>
+-  <property name="maximumSize">
+-   <size>
+-    <width>16777215</width>
+-    <height>16777215</height>
+-   </size>
+-  </property>
+-  <property name="windowTitle">
+-   <string notr="true">Wallpaper</string>
+-  </property>
+-  <layout class="QVBoxLayout" name="verticalLayout_2">
+-   <property name="spacing">
+-    <number>0</number>
+-   </property>
+-   <property name="leftMargin">
+-    <number>0</number>
+-   </property>
+-   <property name="topMargin">
+-    <number>0</number>
+-   </property>
+-   <property name="rightMargin">
+-    <number>0</number>
+-   </property>
+-   <property name="bottomMargin">
+-    <number>0</number>
+-   </property>
+-   <item>
+-    <widget class="QWidget" name="wallpaperWidget" native="true">
+-     <property name="sizePolicy">
+-      <sizepolicy hsizetype="Preferred" vsizetype="Minimum">
+-       <horstretch>0</horstretch>
+-       <verstretch>0</verstretch>
+-      </sizepolicy>
+-     </property>
+-     <property name="minimumSize">
+-      <size>
+-       <width>550</width>
+-       <height>0</height>
+-      </size>
+-     </property>
+-     <property name="maximumSize">
+-      <size>
+-       <width>16777215</width>
+-       <height>16777215</height>
+-      </size>
+-     </property>
+-     <layout class="QVBoxLayout" name="verticalLayout_6">
+-      <property name="spacing">
+-       <number>0</number>
+-      </property>
+-      <property name="leftMargin">
+-       <number>0</number>
+-      </property>
+-      <property name="topMargin">
+-       <number>0</number>
+-      </property>
+-      <property name="rightMargin">
+-       <number>0</number>
+-      </property>
+-      <property name="bottomMargin">
+-       <number>0</number>
+-      </property>
+-      <item>
+-       <layout class="QVBoxLayout" name="verticalLayout_3">
+-        <property name="spacing">
+-         <number>8</number>
+-        </property>
+-        <property name="bottomMargin">
+-         <number>0</number>
+-        </property>
+-        <item>
+-         <widget class="TitleLabel" name="titleLabel">
+-          <property name="sizePolicy">
+-           <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+-            <horstretch>0</horstretch>
+-            <verstretch>0</verstretch>
+-           </sizepolicy>
+-          </property>
+-          <property name="text">
+-           <string>Desktop Background</string>
+-          </property>
+-         </widget>
+-        </item>
+-        <item>
+-         <widget class="QStackedWidget" name="previewStackedWidget">
+-          <property name="minimumSize">
+-           <size>
+-            <width>0</width>
+-            <height>212</height>
+-           </size>
+-          </property>
+-          <property name="maximumSize">
+-           <size>
+-            <width>16777215</width>
+-            <height>212</height>
+-           </size>
+-          </property>
+-          <property name="frameShape">
+-           <enum>QFrame::Box</enum>
+-          </property>
+-          <property name="currentIndex">
+-           <number>0</number>
+-          </property>
+-          <widget class="QWidget" name="pPicturePage">
+-           <layout class="QHBoxLayout" name="horizontalLayout_8">
+-            <property name="spacing">
+-             <number>0</number>
+-            </property>
+-            <property name="leftMargin">
+-             <number>0</number>
+-            </property>
+-            <property name="topMargin">
+-             <number>0</number>
+-            </property>
+-            <property name="rightMargin">
+-             <number>0</number>
+-            </property>
+-            <property name="bottomMargin">
+-             <number>0</number>
+-            </property>
+-            <item>
+-             <layout class="QHBoxLayout" name="horizontalLayout">
+-              <property name="leftMargin">
+-               <number>16</number>
+-              </property>
+-              <property name="topMargin">
+-               <number>16</number>
+-              </property>
+-              <property name="rightMargin">
+-               <number>16</number>
+-              </property>
+-              <property name="bottomMargin">
+-               <number>16</number>
+-              </property>
+-              <item>
+-               <widget class="PictureLabel" name="previewLabel">
+-                <property name="sizePolicy">
+-                 <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+-                  <horstretch>0</horstretch>
+-                  <verstretch>0</verstretch>
+-                 </sizepolicy>
+-                </property>
+-                <property name="minimumSize">
+-                 <size>
+-                  <width>300</width>
+-                  <height>180</height>
+-                 </size>
+-                </property>
+-                <property name="maximumSize">
+-                 <size>
+-                  <width>300</width>
+-                  <height>180</height>
+-                 </size>
+-                </property>
+-                <property name="text">
+-                 <string/>
+-                </property>
+-               </widget>
+-              </item>
+-              <item>
+-               <spacer name="horizontalSpacer">
+-                <property name="orientation">
+-                 <enum>Qt::Horizontal</enum>
+-                </property>
+-                <property name="sizeHint" stdset="0">
+-                 <size>
+-                  <width>40</width>
+-                  <height>20</height>
+-                 </size>
+-                </property>
+-               </spacer>
+-              </item>
+-             </layout>
+-            </item>
+-           </layout>
+-          </widget>
+-          <widget class="QWidget" name="pColorPage">
+-           <layout class="QHBoxLayout" name="horizontalLayout_10">
+-            <property name="spacing">
+-             <number>0</number>
+-            </property>
+-            <property name="leftMargin">
+-             <number>0</number>
+-            </property>
+-            <property name="topMargin">
+-             <number>0</number>
+-            </property>
+-            <property name="rightMargin">
+-             <number>0</number>
+-            </property>
+-            <property name="bottomMargin">
+-             <number>0</number>
+-            </property>
+-            <item>
+-             <layout class="QHBoxLayout" name="horizontalLayout_9">
+-              <property name="leftMargin">
+-               <number>16</number>
+-              </property>
+-              <property name="topMargin">
+-               <number>16</number>
+-              </property>
+-              <property name="rightMargin">
+-               <number>16</number>
+-              </property>
+-              <property name="bottomMargin">
+-               <number>16</number>
+-              </property>
+-              <item>
+-               <widget class="QWidget" name="previewWidget" native="true">
+-                <property name="minimumSize">
+-                 <size>
+-                  <width>300</width>
+-                  <height>0</height>
+-                 </size>
+-                </property>
+-                <property name="maximumSize">
+-                 <size>
+-                  <width>300</width>
+-                  <height>16777215</height>
+-                 </size>
+-                </property>
+-               </widget>
+-              </item>
+-              <item>
+-               <spacer name="horizontalSpacer_2">
+-                <property name="orientation">
+-                 <enum>Qt::Horizontal</enum>
+-                </property>
+-                <property name="sizeHint" stdset="0">
+-                 <size>
+-                  <width>40</width>
+-                  <height>20</height>
+-                 </size>
+-                </property>
+-               </spacer>
+-              </item>
+-             </layout>
+-            </item>
+-           </layout>
+-          </widget>
+-         </widget>
+-        </item>
+-        <item>
+-         <layout class="QVBoxLayout" name="centerLayout">
+-          <property name="spacing">
+-           <number>0</number>
+-          </property>
+-         </layout>
+-        </item>
+-       </layout>
+-      </item>
+-     </layout>
+-    </widget>
+-   </item>
+-   <item>
+-    <widget class="QWidget" name="bottomWidget" native="true">
+-     <layout class="QHBoxLayout" name="horizontalLayout_4">
+-      <property name="spacing">
+-       <number>32</number>
+-      </property>
+-      <property name="leftMargin">
+-       <number>4</number>
+-      </property>
+-      <property name="topMargin">
+-       <number>16</number>
+-      </property>
+-      <property name="rightMargin">
+-       <number>4</number>
+-      </property>
+-      <property name="bottomMargin">
+-       <number>0</number>
+-      </property>
+-      <item>
+-       <widget class="QPushButton" name="browserLocalwpBtn">
+-        <property name="minimumSize">
+-         <size>
+-          <width>110</width>
+-          <height>0</height>
+-         </size>
+-        </property>
+-        <property name="maximumSize">
+-         <size>
+-          <width>110</width>
+-          <height>16777215</height>
+-         </size>
+-        </property>
+-        <property name="text">
+-         <string>Browse</string>
+-        </property>
+-       </widget>
+-      </item>
+-      <item>
+-       <widget class="QPushButton" name="onlineBtn">
+-        <property name="text">
+-         <string>Online Picture</string>
+-        </property>
+-       </widget>
+-      </item>
+-      <item>
+-       <spacer name="horizontalSpacer_3">
+-        <property name="orientation">
+-         <enum>Qt::Horizontal</enum>
+-        </property>
+-        <property name="sizeHint" stdset="0">
+-         <size>
+-          <width>40</width>
+-          <height>20</height>
+-         </size>
+-        </property>
+-       </spacer>
+-      </item>
+-      <item>
+-       <widget class="QPushButton" name="resetBtn">
+-        <property name="minimumSize">
+-         <size>
+-          <width>120</width>
+-          <height>0</height>
+-         </size>
+-        </property>
+-        <property name="maximumSize">
+-         <size>
+-          <width>16777215</width>
+-          <height>16777215</height>
+-         </size>
+-        </property>
+-        <property name="text">
+-         <string>Reset To Default</string>
+-        </property>
+-       </widget>
+-      </item>
+-     </layout>
+-    </widget>
+-   </item>
+-   <item>
+-    <spacer name="verticalSpacer">
+-     <property name="orientation">
+-      <enum>Qt::Vertical</enum>
+-     </property>
+-     <property name="sizeHint" stdset="0">
+-      <size>
+-       <width>20</width>
+-       <height>0</height>
+-      </size>
+-     </property>
+-    </spacer>
+-   </item>
+-  </layout>
+- </widget>
+- <layoutdefault spacing="6" margin="11"/>
+- <customwidgets>
+-  <customwidget>
+-   <class>TitleLabel</class>
+-   <extends>QLabel</extends>
+-   <header location="global">titlelabel.h</header>
+-  </customwidget>
+-  <customwidget>
+-   <class>PictureLabel</class>
+-   <extends>QLabel</extends>
+-   <header>picturelabel.h</header>
+-  </customwidget>
+- </customwidgets>
+- <resources/>
+- <connections/>
+-</ui>
+diff --git a/plugins/personalized/wallpaper/wallpaperui.cpp b/plugins/personalized/wallpaper/wallpaperui.cpp
+index 6c3eb18..8a9a212 100644
+--- a/plugins/personalized/wallpaper/wallpaperui.cpp
++++ b/plugins/personalized/wallpaper/wallpaperui.cpp
+@@ -21,7 +21,8 @@ WallpaperUi::~WallpaperUi()
+ 
+ void WallpaperUi::createObject()
+ {
+-    wallpaperTitleLabel = new TitleLabel(this);
++    wallpaperTitleLabel = new KLabel(this);
++    wallpaperTitleLabel->setContentsMargins(16, 0, 0, 0);
+     previewLabel        = new PreviewLabel(this);
+     settingGroup        = new SettingGroup(this);
+     //~ contents_path /Wallpaper/Background
+diff --git a/plugins/personalized/wallpaper/wallpaperui.h b/plugins/personalized/wallpaper/wallpaperui.h
+index 13bf97c..3af4f4a 100644
+--- a/plugins/personalized/wallpaper/wallpaperui.h
++++ b/plugins/personalized/wallpaper/wallpaperui.h
+@@ -2,8 +2,6 @@
+ #define WALLPAPERUI_H
+ 
+ #include "previewlabel.h"
+-#include "titlelabel.h"
+-#include "fixlabel.h"
+ #include "settinggroup.h"
+ #include "ukccframe.h"
+ #include "addbutton.h"
+@@ -16,6 +14,9 @@
+ #include <QLineEdit>
+ #include <QRadioButton>
+ #include <QButtonGroup>
++#include <klabel.h>
++
++using namespace kdk;
+ 
+ class WallpaperUi : public QWidget
+ {
+@@ -48,7 +49,7 @@ private:
+     QVBoxLayout *uiLayout      = nullptr;
+ 
+ private:
+-    TitleLabel   *wallpaperTitleLabel = nullptr;
++    KLabel   *wallpaperTitleLabel = nullptr;
+     PreviewLabel *previewLabel        = nullptr;
+ 
+ private:
+diff --git a/plugins/plugins.pro b/plugins/plugins.pro
+index 1c4881d..5be6ac0 100644
+--- a/plugins/plugins.pro
++++ b/plugins/plugins.pro
+@@ -25,10 +25,6 @@ SUBDIRS += devices/shortcut \
+            security-updates/backup \
+ }
+ 
+-if(contains(DEFINES, PANGUW)){
+-SUBDIRS += system/display_hw \
+-}
+-
+ if(contains(DEFINES, MAVIS)){
+ SUBDIRS += system/display \
+            system/backup_intel \
+diff --git a/plugins/system/about/about.cpp b/plugins/system/about/about.cpp
+index 64cfa1f..05965c7 100644
+--- a/plugins/system/about/about.cpp
++++ b/plugins/system/about/about.cpp
+@@ -405,9 +405,9 @@ void About::setupDiskCompenet()
+             mAboutWidget->getDiskLabel()->hide();
+             mAboutWidget->getDiskContent()->hide();
+             QHBoxLayout * layout = new QHBoxLayout;
+-            QLabel *label = new FixLabel;
++            QLabel *label = new KLabel;
+             label->setText(tr("Disk") + QString::number(count + 1));
+-            QLabel *diskLabel = new FixLabel;
++            QLabel *diskLabel = new KLabel;
+             diskLabel->setText(iter.value().at(0) + "B (" + iter.value().at(1) + "B "+ tr("avaliable") +")");
+ 
+             layout->addWidget(label);
+diff --git a/plugins/system/about/about.h b/plugins/system/about/about.h
+index 7fbcd5b..82f5575 100644
+--- a/plugins/system/about/about.h
++++ b/plugins/system/about/about.h
+@@ -47,8 +47,6 @@ using namespace ukcc;
+ #include "statusdialog.h"
+ 
+ #include "shell/interface.h"
+-#include "titlelabel.h"
+-#include "fixlabel.h"
+ #include "lightlabel.h"
+ #include "kswitchbutton.h"
+ #include <kysdk/kysdk-system/libkysysinfo.h>
+diff --git a/plugins/system/about/aboutui.cpp b/plugins/system/about/aboutui.cpp
+index cb6f456..104950c 100644
+--- a/plugins/system/about/aboutui.cpp
++++ b/plugins/system/about/aboutui.cpp
+@@ -27,13 +27,16 @@ void AboutUi::initUi()
+     AboutLayout->setContentsMargins(0, 0, 0, 0);
+     AboutLayout->setSpacing(8);
+ 
+-    mTitleLabel = new TitleLabel(Aboutwidget);
++    mTitleLabel = new KLabel(Aboutwidget);
++    mTitleLabel->setContentsMargins(16, 0, 0, 0);
+     //~ contents_path /About/System Summary
+     mTitleLabel->setText(tr("System Summary"));
+-    mPriTitleLabel = new TitleLabel(Aboutwidget);
++    mPriTitleLabel = new KLabel(Aboutwidget);
++    mPriTitleLabel->setContentsMargins(16, 0, 0, 0);
+     //~ contents_path /About/Privacy and agreement
+     mPriTitleLabel->setText(tr("Privacy and agreement"));
+-    mHoldTitleLabel = new TitleLabel(Aboutwidget);
++    mHoldTitleLabel = new KLabel(Aboutwidget);
++    mHoldTitleLabel->setContentsMargins(16, 0, 0, 0);
+     mHoldTitleLabel->setText(tr("Support"));
+ 
+     mInformationFrame = new QFrame(Aboutwidget);
+@@ -44,38 +47,44 @@ void AboutUi::initUi()
+     mInformationLayout->setContentsMargins(space, space, space, space);
+ 
+     /* LOGO */
+-    mLogoLabel = new FixLabel(mInformationFrame);
++    mLogoLabel = new QLabel(mInformationFrame);
+     mLogoLabel->setFixedSize(130, 50);
+ 
+      /* 版本名称 */
+-    mVersionLabel_1 = new FixLabel(tr("Version"));
++    mVersionLabel_1 = new KLabel(this);
++    mVersionLabel_1->setText(tr("Version"));
+     mVersionLabel_2 = new LightLabel;
+     mVersionFrame = createFrame(mVersionLabel_1, mVersionLabel_2);
+ 
+      /* 版本号 */
+-    mVersionNumberLabel_1 = new FixLabel(tr("Version Number"));
++    mVersionNumberLabel_1 = new KLabel(this);
++    mVersionNumberLabel_1->setText(tr("Version Number"));
+     mVersionNumberLabel_2 = new LightLabel;
+     mVersionNumberFrame = createFrame(mVersionNumberLabel_1, mVersionNumberLabel_2);
+ 
+     /* 系统补丁版本号 */
+-    mPatchVersionLabel_1 = new FixLabel(tr("Patch Version"));
++    mPatchVersionLabel_1 = new KLabel(this);
++    mPatchVersionLabel_1->setText(tr("Patch Version"));
+     mPatchVersionLabel_2 = new LightLabel;
+     mPatchVersionFrame = createFrame(mPatchVersionLabel_1, mPatchVersionLabel_2);
+ 
+     /* 安装日期 */
+-    mInstallDateLabel_1 = new FixLabel(tr("Installed Date"));
++    mInstallDateLabel_1 = new KLabel(this);
++    mInstallDateLabel_1->setText(tr("Installed Date"));
+     mInstallDateLabel_2 = new LightLabel;
+     mInstallDateFrame = createFrame(mInstallDateLabel_1, mInstallDateLabel_2);
+ 
+     /* 系统更新时间 */
+-    mUpgradeDateLabel_1 = new FixLabel(tr("Upgrade Date"));
++    mUpgradeDateLabel_1 = new KLabel(this);
++    mUpgradeDateLabel_1->setText(tr("Upgrade Date"));
+     mUpgradeDateLabel_2 = new LightLabel;
+     mUpgradeDateFrame = createFrame(mUpgradeDateLabel_1, mUpgradeDateLabel_2);
+ 
+ 
+     /* 主机名 */
+     //~ contents_path /About/HostName
+-    mHostNameLabel_1 = new FixLabel(tr("HostName"));
++    mHostNameLabel_1 = new KLabel(this);
++    mHostNameLabel_1->setText(tr("HostName"));
+     mHostNameLabel_2 = new LightLabel;
+     mHostNameLabel_3 = new LightLabel;
+     mHostNameLabel_3->setFixedSize(16, 16);
+@@ -87,32 +96,38 @@ void AboutUi::initUi()
+     mHostNameFrame = createFrame(mHostNameLabel_1, mHostNameLabel_2, mHostNameLabel_3);
+ 
+     /* 内核 */
+-    mKernelLabel_1 = new FixLabel(tr("Kernel"));
++    mKernelLabel_1 = new KLabel(this);
++    mKernelLabel_1->setText(tr("Kernel"));
+     mKernelLabel_2 = new LightLabel;
+     mKernelFrame = createFrame(mKernelLabel_1, mKernelLabel_2);
+ 
+     /* CPU */
+-    mCpuLabel_1 = new FixLabel(tr("CPU"));
++    mCpuLabel_1 = new KLabel(this);
++    mCpuLabel_1->setText(tr("CPU"));
+     mCpuLabel_2 = new LightLabel;
+     mCpuFrame = createFrame(mCpuLabel_1, mCpuLabel_2);
+ 
+     /* 内存 */
+-    mMemoryLabel_1 = new FixLabel(tr("Memory"));
++    mMemoryLabel_1 = new KLabel(this);
++    mMemoryLabel_1->setText(tr("Memory"));
+     mMemoryLabel_2 = new LightLabel;
+     mMemoryFrame = createFrame(mMemoryLabel_1, mMemoryLabel_2);
+ 
+     /* 硬盘 */
+-    mDiskLabel_1 = new FixLabel(tr("Disk"));
++    mDiskLabel_1 = new KLabel(this);
++    mDiskLabel_1->setText(tr("Disk"));
+     mDiskLabel_2 = new LightLabel;
+     mDiskFrame = createFrame(mDiskLabel_1, mDiskLabel_2);
+ 
+     /* 桌面 */
+-    mDesktopLabel_1 = new FixLabel(tr("Desktop"));
++    mDesktopLabel_1 = new KLabel(this);
++    mDesktopLabel_1->setText(tr("Desktop"));
+     mDesktopLabel_2 = new LightLabel;
+     mDesktopFrame = createFrame(mDesktopLabel_1, mDesktopLabel_2);
+ 
+     /* 用户名 */
+-    mUsernameLabel_1 = new FixLabel(tr("User"));
++    mUsernameLabel_1 = new KLabel(this);
++    mUsernameLabel_1->setText(tr("User"));
+     mUsernameLabel_2 = new LightLabel;
+     mUsernameFrame = createFrame(mUsernameLabel_1, mUsernameLabel_2);
+ 
+@@ -120,7 +135,8 @@ void AboutUi::initUi()
+     mActivationFrame = initActiveUi();
+ 
+     /* 版权所有 */
+-    mTipLabel = new FixLabel(QString(tr("Copyright ©%1 %2. All rights reserved.").arg(mCopyRightYear).arg(mCopyRightName)), Aboutwidget);
++    mTipLabel = new KLabel(Aboutwidget);
++    mTipLabel->setText(QString(tr("Copyright ©%1 %2. All rights reserved.").arg(mCopyRightYear).arg(mCopyRightName)));
+     mTipLabel->setContentsMargins(16, 0, 0, 0);
+ 
+     /* 隐私和协议 */
+@@ -174,7 +190,7 @@ void AboutUi::initCopyRightName()
+     }
+ }
+ 
+-QFrame *AboutUi::createFrame(FixLabel *label_1, LightLabel *label_2, LightLabel *label_3)
++QFrame *AboutUi::createFrame(KLabel *label_1, LightLabel *label_2, LightLabel *label_3)
+ {
+     QFrame *frame = new QFrame;
+     frame->installEventFilter(this);
+@@ -227,7 +243,7 @@ QFrame *AboutUi::initHoldUi()
+ 
+     mHpLabel = new QLabel;
+     mEducateLabel = new QLabel;
+-    mEducateIconLabel = new FixLabel;
++    mEducateIconLabel = new KLabel;
+     mEducateIconLabel->setFixedSize(96,96);
+ 
+     mHpLabel->setWordWrap(true);
+@@ -301,10 +317,10 @@ QFrame *AboutUi::initActiveUi()
+     QGridLayout *mActivationLayout = new QGridLayout();
+     mActivationLayout->setVerticalSpacing(8);
+ 
+-    mStatusLabel_1 = new FixLabel;
++    mStatusLabel_1 = new KLabel;
+     mStatusLabel_1->setFixedSize(196, 30);
+     mStatusLabel_2 = new LightLabel;
+-    mSequenceLabel_1 = new FixLabel;
++    mSequenceLabel_1 = new KLabel;
+     mSequenceLabel_1->setFixedSize(196, 30);
+     mSequenceLabel_2 = new KBorderlessButton;
+     mSequenceLabel_2->setObjectName("sequence");
+@@ -336,7 +352,8 @@ QFrame *AboutUi::initPrivacyUi()
+     mPriBtn = new KSwitchButton(frame);
+     mPriBtn->setObjectName("privacysettings");
+     //~ contents_path /About/Send optional diagnostic data
+-    FixLabel *mPriLabel_1 = new FixLabel(tr("Send optional diagnostic data"));
++    KLabel *mPriLabel_1 = new KLabel(this);
++    mPriLabel_1->setText(tr("Send optional diagnostic data"));
+     LightLabel *mPriLabel_2 = new LightLabel(tr("By sending us diagnostic data, improve the system experience and solve your problems faster"));
+     QVBoxLayout *mverticalLayout_2 = new QVBoxLayout;
+     mverticalLayout_2->setSpacing(0);
+@@ -361,7 +378,8 @@ QFrame *AboutUi::initInfoBtnUi()
+     mBtnLyt->setContentsMargins(16, 0, 0, 0);
+     //~ contents_path /About/<<Protocol>>
+     mTrialBtn = new KBorderlessButton(tr("<<Protocol>>"));
+-    mAndLabel = new FixLabel(tr("and"));
++    mAndLabel = new KLabel(this);
++    mAndLabel->setText(tr("and"));
+     //~ contents_path /About/<<Privacy>>
+     mAgreeBtn = new KBorderlessButton(tr("<<Privacy>>"));
+     mTrialBtn->setStyleSheet("text-decoration:underline");
+diff --git a/plugins/system/about/aboutui.h b/plugins/system/about/aboutui.h
+index 504c133..bed61a9 100644
+--- a/plugins/system/about/aboutui.h
++++ b/plugins/system/about/aboutui.h
+@@ -11,12 +11,11 @@
+ #include "privacydialog.h"
+ #include "statusdialog.h"
+ #include "shell/interface.h"
+-#include "titlelabel.h"
+-#include "fixlabel.h"
+ #include "lightlabel.h"
+ #include "kswitchbutton.h"
+ #include <kysdk/kysdk-system/libkysysinfo.h>
+ #include <kborderlessbutton.h>
++#include <klabel.h>
+ 
+ using namespace ukcc;
+ using namespace kdk;
+@@ -63,9 +62,9 @@ public:
+     LightLabel *getUpgradeDate() {return mUpgradeDateLabel_2;}
+     LightLabel *getEditHost() {return mHostNameLabel_3;}
+ 
+-    FixLabel *getSequence() {return mSequenceLabel_1;}
++    KLabel *getSequence() {return mSequenceLabel_1;}
+     KBorderlessButton *getSequenceContent() {return mSequenceLabel_2;}
+-    FixLabel *getDiskLabel() {return mDiskLabel_1;}
++    KLabel *getDiskLabel() {return mDiskLabel_1;}
+ 
+     QFrame *getBuildFrame() {return mVersionNumberFrame;}
+     QFrame *getPatchFrame() {return mPatchVersionFrame;}
+@@ -79,7 +78,7 @@ public:
+ 
+ 
+ private:
+-    QFrame *createFrame(FixLabel *label_1, LightLabel *label_2, LightLabel *label_3 = nullptr);
++    QFrame *createFrame(KLabel *label_1, LightLabel *label_2, LightLabel *label_3 = nullptr);
+     void setShape(QFrame *frame, QFrame::Shape shape);
+     QPixmap loadSvg(const QString &path, int width, int height);
+ 
+@@ -87,9 +86,9 @@ private:
+     QFrame *mHoldWidget;
+     QWidget *mQrCodeWidget;
+ 
+-    TitleLabel *mTitleLabel;
+-    TitleLabel *mPriTitleLabel;
+-    TitleLabel *mHoldTitleLabel;
++    KLabel *mTitleLabel;
++    KLabel *mPriTitleLabel;
++    KLabel *mHoldTitleLabel;
+ 
+     QFrame *mInformationFrame;
+     QFrame *mActivationFrame;
+@@ -112,21 +111,21 @@ private:
+ 
+     QHBoxLayout *mDiskLayout;
+ 
+-    FixLabel *mLogoLabel;
+-    FixLabel *mVersionLabel_1;
+-    FixLabel *mVersionNumLabel_1;
+-    FixLabel *mVersionNumberLabel_1;
+-    FixLabel *mPatchVersionLabel_1;
+-    FixLabel *mInstallDateLabel_1;
+-    FixLabel *mUpgradeDateLabel_1;
+-    FixLabel *mInterVersionLabel_1;
+-    FixLabel *mHostNameLabel_1;
+-    FixLabel *mKernelLabel_1;
+-    FixLabel *mCpuLabel_1;
+-    FixLabel *mMemoryLabel_1;
+-    FixLabel *mDiskLabel_1;
+-    FixLabel *mDesktopLabel_1;
+-    FixLabel *mUsernameLabel_1;
++    QLabel *mLogoLabel;
++    KLabel *mVersionLabel_1;
++    KLabel *mVersionNumLabel_1;
++    KLabel *mVersionNumberLabel_1;
++    KLabel *mPatchVersionLabel_1;
++    KLabel *mInstallDateLabel_1;
++    KLabel *mUpgradeDateLabel_1;
++    KLabel *mInterVersionLabel_1;
++    KLabel *mHostNameLabel_1;
++    KLabel *mKernelLabel_1;
++    KLabel *mCpuLabel_1;
++    KLabel *mMemoryLabel_1;
++    KLabel *mDiskLabel_1;
++    KLabel *mDesktopLabel_1;
++    KLabel *mUsernameLabel_1;
+     LightLabel *mVersionLabel_2;
+     LightLabel *mVersionNumLabel_2;
+     LightLabel *mVersionNumberLabel_2;
+@@ -144,17 +143,17 @@ private:
+     LightLabel *mUsernameLabel_2;
+ 
+ 
+-    FixLabel *mStatusLabel_1;
++    KLabel *mStatusLabel_1;
+     LightLabel *mStatusLabel_2;
+-    FixLabel *mSequenceLabel_1;
++    KLabel *mSequenceLabel_1;
+     KBorderlessButton *mSequenceLabel_2;
+-    FixLabel *mTrialLabel;
+-    FixLabel *mAndLabel;
+-    FixLabel *mAgreeLabel;
++    KLabel *mTrialLabel;
++    KLabel *mAndLabel;
++    KLabel *mAgreeLabel;
+     QLabel *mHpLabel;
+-    FixLabel *mEducateIconLabel;
++    KLabel *mEducateIconLabel;
+     QLabel *mEducateLabel;
+-    FixLabel *mTipLabel;
++    KLabel *mTipLabel;
+ 
+     QPushButton *mActivationBtn;
+     QPushButton *mHpBtn;
+diff --git a/plugins/system/about/privacydialog.cpp b/plugins/system/about/privacydialog.cpp
+index 05e628d..3716733 100644
+--- a/plugins/system/about/privacydialog.cpp
++++ b/plugins/system/about/privacydialog.cpp
+@@ -3,6 +3,7 @@
+ #include <QDebug>
+ #include <QVBoxLayout>
+ #include <QHBoxLayout>
++#include <QLabel>
+ 
+ PrivacyDialog::PrivacyDialog(QWidget *parent) :
+     QDialog(parent)
+diff --git a/plugins/system/about/privacydialog.h b/plugins/system/about/privacydialog.h
+index 9fbc823..95f7d7d 100644
+--- a/plugins/system/about/privacydialog.h
++++ b/plugins/system/about/privacydialog.h
+@@ -8,7 +8,6 @@
+ #include <QString>
+ #include <QTextBrowser>
+ 
+-#include "titlelabel.h"
+ #include "ukcccommon.h"
+ 
+ using namespace ukcc;
+diff --git a/plugins/system/about/statusdialog.cpp b/plugins/system/about/statusdialog.cpp
+index 4060c82..1e4704f 100644
+--- a/plugins/system/about/statusdialog.cpp
++++ b/plugins/system/about/statusdialog.cpp
+@@ -33,7 +33,7 @@ void StatusDialog::initUI()
+     mVersionFrame->setFixedHeight(36);
+     mVersionFrame->setFrameShape(QFrame::NoFrame);
+     mVersionLabel_1 = new QLabel(mVersionFrame);
+-    mVersionLabel_2 = new FixLabel(mVersionFrame);
++    mVersionLabel_2 = new KLabel(mVersionFrame);
+     mVersionLabel_1->setFixedWidth(100);
+     mVersionLyt->addWidget(mVersionLabel_1);
+     mVersionLyt->addWidget(mVersionLabel_2);
+@@ -44,7 +44,7 @@ void StatusDialog::initUI()
+     mStatusLyt->setSpacing(16);
+     mStatusFrame->setFixedHeight(36);
+     mStatusFrame->setFrameShape(QFrame::NoFrame);
+-    mStatusLabel_1 = new FixLabel(mStatusFrame);
++    mStatusLabel_1 = new KLabel(mStatusFrame);
+     mStatusLabel_2 = new QLabel(mStatusFrame);
+     mStatusLabel_1->setFixedWidth(100);
+     mStatusLyt->addWidget(mStatusLabel_1);
+@@ -56,8 +56,9 @@ void StatusDialog::initUI()
+     mActivationLyt->setSpacing(16);
+     mActivationFrame->setFixedHeight(36);
+     mActivationFrame->setFrameShape(QFrame::NoFrame);
+-    mActivationCodeLabel_1 = new FixLabel(tr("Activation Code"), mActivationFrame);
+-    mActivationCodeLabel_2 = new FixLabel(mActivationFrame);
++    mActivationCodeLabel_1 = new KLabel(mActivationFrame);
++    mActivationCodeLabel_1->setText(tr("Activation Code"));
++    mActivationCodeLabel_2 = new KLabel(mActivationFrame);
+     mActivationCodeLabel_1->setFixedWidth(100);
+     mActivationLyt->addWidget(mActivationCodeLabel_1);
+     mActivationLyt->addWidget(mActivationCodeLabel_2);
+@@ -69,7 +70,7 @@ void StatusDialog::initUI()
+     mSerialFrame->setFixedHeight(36);
+     mSerialFrame->setFrameShape(QFrame::NoFrame);
+     mSerialLabel_1 = new QLabel(mSerialFrame);
+-    mSerialLabel_2 = new FixLabel(mSerialFrame);
++    mSerialLabel_2 = new KLabel(mSerialFrame);
+     mSerialLabel_1->setFixedWidth(100);
+     mSerialLyt->addWidget(mSerialLabel_1);
+     mSerialLyt->addWidget(mSerialLabel_2);
+@@ -80,7 +81,7 @@ void StatusDialog::initUI()
+     mTimeLyt->setSpacing(16);
+     mTimeFrame->setFixedHeight(36);
+     mTimeFrame->setFrameShape(QFrame::NoFrame);
+-    mTimeLabel_1 = new FixLabel(mTimeFrame);
++    mTimeLabel_1 = new KLabel(mTimeFrame);
+     mTimeLabel_2 = new QLabel(mTimeFrame);
+     mTimeLabel_1->setFixedWidth(100);
+     mTimeLyt->addWidget(mTimeLabel_1);
+diff --git a/plugins/system/about/statusdialog.h b/plugins/system/about/statusdialog.h
+index 5d8ec5d..351096d 100644
+--- a/plugins/system/about/statusdialog.h
++++ b/plugins/system/about/statusdialog.h
+@@ -5,8 +5,9 @@
+ #include <QDialog>
+ #include <QLabel>
+ #include <QPushButton>
++#include <klabel.h>
+ 
+-#include "fixlabel.h"
++using namespace kdk;
+ 
+ const QString vTen        = "v10";
+ const QString vTenEnhance = "v10.1";
+@@ -33,15 +34,15 @@ private:
+ public:
+     QLabel *mLogoLabel;
+     QLabel *mVersionLabel_1;
+-    FixLabel *mVersionLabel_2;
+-    FixLabel *mStatusLabel_1;
++    KLabel *mVersionLabel_2;
++    KLabel *mStatusLabel_1;
+     QLabel *mStatusLabel_2;
+     QLabel *mSerialLabel_1;
+-    FixLabel *mSerialLabel_2;
+-    FixLabel *mTimeLabel_1;
++    KLabel *mSerialLabel_2;
++    KLabel *mTimeLabel_1;
+     QLabel *mTimeLabel_2;
+-    FixLabel *mActivationCodeLabel_1;
+-    FixLabel *mActivationCodeLabel_2;
++    KLabel *mActivationCodeLabel_1;
++    KLabel *mActivationCodeLabel_2;
+     QPushButton *mExtentBtn;
+ 
+ private:
+diff --git a/plugins/system/about/trialdialog.cpp b/plugins/system/about/trialdialog.cpp
+index 709a297..545d9f4 100644
+--- a/plugins/system/about/trialdialog.cpp
++++ b/plugins/system/about/trialdialog.cpp
+@@ -29,7 +29,8 @@ void TrialDialog::initUi(QDialog *mTrialDialog)
+     QHBoxLayout *mTitleLayout = new QHBoxLayout;
+ 
+ 
+-    mTitleLabel = new TitleLabel(mTrialDialog);
++    mTitleLabel = new KLabel(mTrialDialog);
++    mTitleLabel->setContentsMargins(16, 0, 0, 0);
+     mTitleLabel->setFixedHeight(30);
+     mTitleLayout->addStretch();
+     mTitleLayout->addWidget(mTitleLabel);
+diff --git a/plugins/system/about/trialdialog.h b/plugins/system/about/trialdialog.h
+index e4462d5..7bd4fcc 100644
+--- a/plugins/system/about/trialdialog.h
++++ b/plugins/system/about/trialdialog.h
+@@ -3,7 +3,9 @@
+ 
+ #include <QDialog>
+ #include <QTextBrowser>
+-#include "titlelabel.h"
++#include <klabel.h>
++
++using namespace kdk;
+ 
+ class TrialDialog : public QDialog
+ {
+@@ -16,7 +18,7 @@ private:
+     void initUi(QDialog *mTrialDialog);
+ 
+ private:
+-    TitleLabel *mTitleLabel;
++    KLabel *mTitleLabel;
+ 
+     QLabel *mContentLabel_1;
+     QTextBrowser *mContentLabel_2;
+diff --git a/plugins/system/display/brightnessFrame.cpp b/plugins/system/display/brightnessFrame.cpp
+index 919914e..d563d34 100644
+--- a/plugins/system/display/brightnessFrame.cpp
++++ b/plugins/system/display/brightnessFrame.cpp
+@@ -65,7 +65,7 @@ BrightnessFrame::BrightnessFrame(const QString &name, const bool &isBattery, con
+     labelMsg->setDisabled(true);
+     labelMsg->setText(tr("Failed to get the brightness information of this monitor"));//未能获得该显示器的亮度信息
+ 
+-    labelName = new FixLabel(this);
++    labelName = new KLabel(this);
+     labelName->setFixedWidth(118);
+ 
+     slider = new KSlider(Qt::Horizontal, this);
+diff --git a/plugins/system/display/brightnessFrame.h b/plugins/system/display/brightnessFrame.h
+index 5fa8c27..e201750 100644
+--- a/plugins/system/display/brightnessFrame.h
++++ b/plugins/system/display/brightnessFrame.h
+@@ -24,7 +24,6 @@
+ #include <QLabel>
+ #include <QWidget>
+ #include <QLabel>
+-#include "uslider.h"
+ #include <QMutex>
+ #include <QFuture>
+ #include <QDBusInterface>
+@@ -33,12 +32,12 @@
+ #include <kslider.h>
+ #include <KF5/KScreen/kscreen/output.h>
+ #include <KF5/KScreen/kscreen/types.h>
+-#include "fixlabel.h"
+ #include "getBrightnessThread.h"
+ #include "ukccframe.h"
+ #include "lightlabel.h"
+ #include <kslider.h>
+ #include "ukcccommon.h"
++#include <klabel.h>
+ 
+ using namespace ukcc;
+ using namespace kdk;
+@@ -77,7 +76,7 @@ private:
+     void sliderValueChangeSlot(QString outputName);
+ 
+ private:
+-    FixLabel *labelName = nullptr;
++    KLabel *labelName = nullptr;
+     QLabel *labelValue = nullptr;
+     KSlider *slider = nullptr;
+     QString outputName;          //屏幕名
+diff --git a/plugins/system/display/display.pro b/plugins/system/display/display.pro
+index 7b02f0d..d29d6b5 100644
+--- a/plugins/system/display/display.pro
++++ b/plugins/system/display/display.pro
+@@ -5,8 +5,6 @@
+ #-------------------------------------------------
+ include(../../../env.pri)
+ include($$PROJECT_ROOTDIR/libukcc/widgets/Label/label.pri)
+-include($$PROJECT_ROOTDIR/libukcc/widgets/Uslider/uslider.pri)
+-include($$PROJECT_ROOTDIR/libukcc/widgets/CloseButton/closebutton.pri)
+ include($$PROJECT_ROOTDIR/libukcc/widgets/ComboBox/combobox.pri)
+ include($$PROJECT_ROOTDIR/libukcc/widgets/SettingWidget/settingwidget.pri)
+ include($$PROJECT_ROOTDIR/libukcc/interface.pri)
+@@ -43,8 +41,7 @@ SOURCES += \
+     splicedialog.cpp \
+     unifiedoutputconfig.cpp \
+     utils.cpp \
+-    widget.cpp \
+-    displayperformancedialog.cpp
++    widget.cpp
+ 
+ HEADERS += \
+     brightnessFrame.h \
+@@ -61,12 +58,10 @@ HEADERS += \
+     splicedialog.h \
+     unifiedoutputconfig.h \
+     utils.h \
+-    widget.h \
+-    displayperformancedialog.h
++    widget.h
+ 
+ FORMS += \
+     display.ui \
+-    displayperformancedialog.ui \
+     splicedialog.ui
+ 
+ #DISTFILES += \
+diff --git a/plugins/system/display/display.ui b/plugins/system/display/display.ui
+index 658c01f..51738bf 100644
+--- a/plugins/system/display/display.ui
++++ b/plugins/system/display/display.ui
+@@ -27,7 +27,7 @@
+     <number>0</number>
+    </property>
+    <item>
+-    <widget class="TitleLabel" name="titleLabel">
++    <widget class="KLabel" name="titleLabel">
+      <property name="text">
+       <string>Display</string>
+      </property>
+@@ -140,9 +140,9 @@
+    <header location="global">QtQuickWidgets/QQuickWidget</header>
+   </customwidget>
+   <customwidget>
+-   <class>TitleLabel</class>
++   <class>KLabel</class>
+    <extends>QLabel</extends>
+-   <header location="global">titlelabel.h</header>
++   <header>klabel.h</header>
+   </customwidget>
+  </customwidgets>
+  <resources/>
+diff --git a/plugins/system/display/displayperformancedialog.cpp b/plugins/system/display/displayperformancedialog.cpp
+deleted file mode 100644
+index b1bf29f..0000000
+--- a/plugins/system/display/displayperformancedialog.cpp
++++ /dev/null
+@@ -1,213 +0,0 @@
+-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
+- *
+- * Copyright (C) 2019 Tianjin KYLIN Information Technology Co., Ltd.
+- *
+- * This program is free software; you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License as published by
+- * the Free Software Foundation; either version 2 of the License, or
+- * (at your option) any later version.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program; if not, write to the Free Software
+- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+- *
+- */
+-#include "displayperformancedialog.h"
+-#include "ui_displayperformancedialog.h"
+-#include "closebutton.h"
+-
+-#include <QFile>
+-#include <QDBusReply>
+-#include <QDBusInterface>
+-#include <QPainter>
+-#include <QPainterPath>
+-#include <QProcess>
+-#include <QDebug>
+-
+-#define ADVANCED_SCHEMAS "org.ukui.session.required-components"
+-#define ADVANCED_KEY "windowmanager"
+-
+-#define WM_CHOOSER_CONF "/etc/kylin-wm-chooser/default.conf"
+-#define WM_CHOOSER_CONF_TMP "/tmp/default.conf"
+-
+-extern void qt_blurImage(QImage &blurImage, qreal radius, bool quality, int transposed);
+-
+-DisplayPerformanceDialog::DisplayPerformanceDialog(QWidget *parent) :
+-    QDialog(parent),
+-    ui(new Ui::DisplayPerformanceDialog)
+-{
+-    ui->setupUi(this);
+-
+-    setWindowFlags(Qt::FramelessWindowHint | Qt::Tool);
+-    setAttribute(Qt::WA_TranslucentBackground);
+-    setAttribute(Qt::WA_DeleteOnClose);
+-
+-    ui->titleLabel->setStyleSheet("QLabel{color: palette(windowText);}");
+-
+-    ui->label->setAlignment(Qt::AlignTop);
+-    ui->label_2->setAlignment(Qt::AlignTop);
+-    ui->label_3->setAlignment(Qt::AlignTop);
+-    ui->label_4->setAlignment(Qt::AlignTop);
+-    ui->label_5->setAlignment(Qt::AlignTop);
+-    ui->label_6->setAlignment(Qt::AlignTop);
+-
+-    ui->closeBtn->setIcon(QIcon("://img/titlebar/close.svg"));
+-
+-    const QByteArray id(ADVANCED_SCHEMAS);
+-    settings = new QGSettings(id);
+-
+-    confSettings = new QSettings(WM_CHOOSER_CONF, QSettings::NativeFormat);
+-
+-    setupComponent();
+-    setupConnect();
+-    initModeStatus();
+-    initThresholdStatus();
+-
+-}
+-
+-DisplayPerformanceDialog::~DisplayPerformanceDialog()
+-{
+-    delete ui;
+-    ui = nullptr;
+-    delete settings;
+-    settings = nullptr;
+-    delete confSettings;
+-    confSettings = nullptr;
+-}
+-
+-void DisplayPerformanceDialog::setupComponent(){
+-    ui->performanceRadioBtn->setProperty("wm", "mutter");
+-    ui->compatibleRadioBtn->setProperty("wm", "marco");
+-    ui->autoRadioBtn->setProperty("wm", "kylin-wm-chooser");
+-}
+-
+-void DisplayPerformanceDialog::setupConnect(){
+-    connect(ui->closeBtn, &CloseButton::clicked, [=]{
+-        close();
+-    });
+-
+-#if QT_VERSION <= QT_VERSION_CHECK(5, 12, 0)
+-    connect(ui->buttonGroup, static_cast<void (QButtonGroup::*)(QAbstractButton *)>(&QButtonGroup::buttonClicked), [=](QAbstractButton * button){
+-#else
+-    connect(ui->buttonGroup, QOverload<QAbstractButton *>::of(&QButtonGroup::buttonClicked), [=](QAbstractButton * button){
+-#endif
+-        QString mode = button->property("wm").toString();
+-        settings->set(ADVANCED_KEY, mode);
+-    });
+-
+-    connect(ui->autoRadioBtn, &QRadioButton::toggled, this, [=](bool checked){
+-        ui->lineEdit->setEnabled(checked);
+-        ui->applyBtn->setEnabled(checked);
+-        ui->resetBtn->setEnabled(checked);
+-    });
+-
+-    connect(ui->applyBtn, &QPushButton::clicked, this, [=]{
+-        changeConfValue();
+-    });
+-
+-    connect(ui->resetBtn, &QPushButton::clicked, this, [=]{
+-        ui->lineEdit->setText("256");
+-        changeConfValue();
+-    });
+-}
+-
+-void DisplayPerformanceDialog::initModeStatus(){
+-    QString mode = settings->get(ADVANCED_KEY).toString();
+-
+-    if (mode == ui->performanceRadioBtn->property("wm").toString()){
+-        ui->performanceRadioBtn->blockSignals(true);
+-        ui->performanceRadioBtn->setChecked(true);
+-        ui->performanceRadioBtn->blockSignals(false);
+-    } else if (mode == ui->compatibleRadioBtn->property("wm").toString()){
+-        ui->compatibleRadioBtn->blockSignals(true);
+-        ui->compatibleRadioBtn->setChecked(true);
+-        ui->compatibleRadioBtn->blockSignals(false);
+-    } else{
+-        ui->autoRadioBtn->blockSignals(true);
+-        ui->autoRadioBtn->setChecked(true);
+-        ui->autoRadioBtn->blockSignals(false);
+-    }
+-}
+-
+-void DisplayPerformanceDialog::initThresholdStatus(){
+-    confSettings->beginGroup("mutter");
+-    QString value = confSettings->value("threshold").toString();
+-    ui->lineEdit->blockSignals(true);
+-    ui->lineEdit->setText(value);
+-    ui->lineEdit->blockSignals(false);
+-    confSettings->endGroup();
+-}
+-
+-void DisplayPerformanceDialog::changeConfValue(){
+-    if (!QFile::copy(WM_CHOOSER_CONF, WM_CHOOSER_CONF_TMP))
+-        return;
+-
+-    QSettings * tempSettings = new QSettings(WM_CHOOSER_CONF_TMP, QSettings::NativeFormat);
+-    tempSettings->beginGroup("mutter");
+-    tempSettings->setValue("threshold", ui->lineEdit->text());
+-    tempSettings->endGroup();
+-
+-    delete tempSettings;
+-    tempSettings = nullptr;
+-
+-    //替换kylin-wm-chooser
+-    QDBusInterface * sysinterface = new QDBusInterface("com.control.center.qt.systemdbus",
+-                                     "/",
+-                                     "com.control.center.interface",
+-                                     QDBusConnection::systemBus());
+-
+-    if (!sysinterface->isValid()){
+-        qCritical() << "Create Client Interface Failed When Copy Face File: " << QDBusConnection::systemBus().lastError();
+-        return;
+-    }
+-
+-    QString cmd = QString("mv %1 %2").arg(WM_CHOOSER_CONF_TMP).arg(WM_CHOOSER_CONF);
+-
+-    QProcess::execute(cmd);
+-    delete sysinterface;
+-    sysinterface = nullptr;
+-}
+-
+-void DisplayPerformanceDialog::paintEvent(QPaintEvent *event){
+-    Q_UNUSED(event);
+-    QPainter p(this);
+-    p.setRenderHint(QPainter::Antialiasing);
+-    QPainterPath rectPath;
+-    rectPath.addRoundedRect(this->rect().adjusted(10, 10, -10, -10), 6, 6);
+-
+-    // 画一个黑底
+-    QPixmap pixmap(this->rect().size());
+-    pixmap.fill(Qt::transparent);
+-    QPainter pixmapPainter(&pixmap);
+-    pixmapPainter.setRenderHint(QPainter::Antialiasing);
+-    pixmapPainter.setPen(Qt::transparent);
+-    pixmapPainter.setBrush(Qt::black);
+-    pixmapPainter.setOpacity(0.65);
+-    pixmapPainter.drawPath(rectPath);
+-    pixmapPainter.end();
+-
+-    // 模糊这个黑底
+-    QImage img = pixmap.toImage();
+-    qt_blurImage(img, 10, false, false);
+-    // 挖掉中心
+-    pixmap = QPixmap::fromImage(img);
+-    QPainter pixmapPainter2(&pixmap);
+-    pixmapPainter2.setRenderHint(QPainter::Antialiasing);
+-    pixmapPainter2.setCompositionMode(QPainter::CompositionMode_Clear);
+-    pixmapPainter2.setPen(Qt::transparent);
+-    pixmapPainter2.setBrush(Qt::transparent);
+-    pixmapPainter2.drawPath(rectPath);
+-
+-    // 绘制阴影
+-    p.drawPixmap(this->rect(), pixmap, pixmap.rect());
+-    // 绘制一个背景
+-    p.save();
+-    p.fillPath(rectPath,palette().color(QPalette::Base));
+-
+-    p.restore();
+-}
+diff --git a/plugins/system/display/displayperformancedialog.h b/plugins/system/display/displayperformancedialog.h
+deleted file mode 100644
+index 4d03ccc..0000000
+--- a/plugins/system/display/displayperformancedialog.h
++++ /dev/null
+@@ -1,58 +0,0 @@
+-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
+- *
+- * Copyright (C) 2019 Tianjin KYLIN Information Technology Co., Ltd.
+- *
+- * This program is free software; you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License as published by
+- * the Free Software Foundation; either version 2 of the License, or
+- * (at your option) any later version.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program; if not, write to the Free Software
+- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+- *
+- */
+-#ifndef DISPLAYPERFORMANCEDIALOG_H
+-#define DISPLAYPERFORMANCEDIALOG_H
+-
+-#include <QDialog>
+-#include <QSettings>
+-#include <QGSettings>
+-
+-namespace Ui {
+-class DisplayPerformanceDialog;
+-}
+-
+-class DisplayPerformanceDialog : public QDialog
+-{
+-    Q_OBJECT
+-
+-public:
+-    explicit DisplayPerformanceDialog(QWidget *parent = 0);
+-    ~DisplayPerformanceDialog();
+-
+-public:
+-    void setupComponent();
+-    void setupConnect();
+-    void initModeStatus();
+-    void initThresholdStatus();
+-
+-    void changeConfValue();
+-
+-private:
+-    void paintEvent(QPaintEvent *event);
+-
+-private:
+-    Ui::DisplayPerformanceDialog *ui;
+-
+-private:
+-    QGSettings *settings;
+-    QSettings *confSettings;
+-};
+-
+-#endif // DISPLAYPERFORMANCEDIALOG_H
+diff --git a/plugins/system/display/displayperformancedialog.ui b/plugins/system/display/displayperformancedialog.ui
+deleted file mode 100644
+index a901710..0000000
+--- a/plugins/system/display/displayperformancedialog.ui
++++ /dev/null
+@@ -1,818 +0,0 @@
+-<?xml version="1.0" encoding="UTF-8"?>
+-<ui version="4.0">
+- <class>DisplayPerformanceDialog</class>
+- <widget class="QDialog" name="DisplayPerformanceDialog">
+-  <property name="geometry">
+-   <rect>
+-    <x>0</x>
+-    <y>0</y>
+-    <width>580</width>
+-    <height>646</height>
+-   </rect>
+-  </property>
+-  <property name="minimumSize">
+-   <size>
+-    <width>580</width>
+-    <height>646</height>
+-   </size>
+-  </property>
+-  <property name="maximumSize">
+-   <size>
+-    <width>580</width>
+-    <height>646</height>
+-   </size>
+-  </property>
+-  <property name="windowTitle">
+-   <string>Dialog</string>
+-  </property>
+-  <layout class="QVBoxLayout" name="verticalLayout_2">
+-   <property name="spacing">
+-    <number>0</number>
+-   </property>
+-   <property name="leftMargin">
+-    <number>0</number>
+-   </property>
+-   <property name="topMargin">
+-    <number>9</number>
+-   </property>
+-   <property name="rightMargin">
+-    <number>9</number>
+-   </property>
+-   <property name="bottomMargin">
+-    <number>9</number>
+-   </property>
+-   <item>
+-    <widget class="QFrame" name="frame">
+-     <property name="sizePolicy">
+-      <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+-       <horstretch>0</horstretch>
+-       <verstretch>0</verstretch>
+-      </sizepolicy>
+-     </property>
+-     <property name="frameShape">
+-      <enum>QFrame::NoFrame</enum>
+-     </property>
+-     <property name="frameShadow">
+-      <enum>QFrame::Raised</enum>
+-     </property>
+-     <layout class="QVBoxLayout" name="verticalLayout_3">
+-      <property name="spacing">
+-       <number>0</number>
+-      </property>
+-      <property name="leftMargin">
+-       <number>0</number>
+-      </property>
+-      <property name="topMargin">
+-       <number>0</number>
+-      </property>
+-      <property name="rightMargin">
+-       <number>0</number>
+-      </property>
+-      <property name="bottomMargin">
+-       <number>0</number>
+-      </property>
+-      <item>
+-       <layout class="QVBoxLayout" name="verticalLayout">
+-        <property name="spacing">
+-         <number>0</number>
+-        </property>
+-        <property name="sizeConstraint">
+-         <enum>QLayout::SetDefaultConstraint</enum>
+-        </property>
+-        <property name="topMargin">
+-         <number>0</number>
+-        </property>
+-        <property name="bottomMargin">
+-         <number>0</number>
+-        </property>
+-        <item>
+-         <widget class="QFrame" name="closeFrame">
+-          <property name="minimumSize">
+-           <size>
+-            <width>0</width>
+-            <height>36</height>
+-           </size>
+-          </property>
+-          <property name="maximumSize">
+-           <size>
+-            <width>16777215</width>
+-            <height>36</height>
+-           </size>
+-          </property>
+-          <property name="frameShape">
+-           <enum>QFrame::StyledPanel</enum>
+-          </property>
+-          <property name="frameShadow">
+-           <enum>QFrame::Raised</enum>
+-          </property>
+-          <layout class="QHBoxLayout" name="horizontalLayout_6">
+-           <property name="spacing">
+-            <number>0</number>
+-           </property>
+-           <property name="leftMargin">
+-            <number>0</number>
+-           </property>
+-           <property name="topMargin">
+-            <number>0</number>
+-           </property>
+-           <property name="rightMargin">
+-            <number>0</number>
+-           </property>
+-           <property name="bottomMargin">
+-            <number>0</number>
+-           </property>
+-           <item>
+-            <layout class="QHBoxLayout" name="horizontalLayout_2">
+-             <property name="spacing">
+-              <number>0</number>
+-             </property>
+-             <item>
+-              <spacer name="horizontalSpacer">
+-               <property name="orientation">
+-                <enum>Qt::Horizontal</enum>
+-               </property>
+-               <property name="sizeHint" stdset="0">
+-                <size>
+-                 <width>40</width>
+-                 <height>20</height>
+-                </size>
+-               </property>
+-              </spacer>
+-             </item>
+-             <item>
+-              <widget class="CloseButton" name="closeBtn">
+-               <property name="minimumSize">
+-                <size>
+-                 <width>32</width>
+-                 <height>32</height>
+-                </size>
+-               </property>
+-               <property name="maximumSize">
+-                <size>
+-                 <width>32</width>
+-                 <height>32</height>
+-                </size>
+-               </property>
+-               <property name="text">
+-                <string/>
+-               </property>
+-              </widget>
+-             </item>
+-            </layout>
+-           </item>
+-          </layout>
+-         </widget>
+-        </item>
+-        <item>
+-         <widget class="QWidget" name="widget" native="true">
+-          <property name="sizePolicy">
+-           <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+-            <horstretch>0</horstretch>
+-            <verstretch>0</verstretch>
+-           </sizepolicy>
+-          </property>
+-          <property name="minimumSize">
+-           <size>
+-            <width>0</width>
+-            <height>0</height>
+-           </size>
+-          </property>
+-          <property name="maximumSize">
+-           <size>
+-            <width>16777215</width>
+-            <height>16777215</height>
+-           </size>
+-          </property>
+-          <layout class="QVBoxLayout" name="verticalLayout_4">
+-           <property name="spacing">
+-            <number>8</number>
+-           </property>
+-           <property name="sizeConstraint">
+-            <enum>QLayout::SetDefaultConstraint</enum>
+-           </property>
+-           <property name="leftMargin">
+-            <number>32</number>
+-           </property>
+-           <property name="topMargin">
+-            <number>16</number>
+-           </property>
+-           <property name="rightMargin">
+-            <number>32</number>
+-           </property>
+-           <property name="bottomMargin">
+-            <number>32</number>
+-           </property>
+-           <item>
+-            <widget class="TitleLabel" name="titleLabel">
+-             <property name="sizePolicy">
+-              <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+-               <horstretch>0</horstretch>
+-               <verstretch>0</verstretch>
+-              </sizepolicy>
+-             </property>
+-             <property name="text">
+-              <string>Display Advanced Settings</string>
+-             </property>
+-            </widget>
+-           </item>
+-           <item>
+-            <widget class="QScrollArea" name="scrollArea">
+-             <property name="verticalScrollBarPolicy">
+-              <enum>Qt::ScrollBarAsNeeded</enum>
+-             </property>
+-             <property name="horizontalScrollBarPolicy">
+-              <enum>Qt::ScrollBarAlwaysOff</enum>
+-             </property>
+-             <property name="widgetResizable">
+-              <bool>true</bool>
+-             </property>
+-             <widget class="QWidget" name="scrollAreaWidgetContents">
+-              <property name="geometry">
+-               <rect>
+-                <x>0</x>
+-                <y>0</y>
+-                <width>489</width>
+-                <height>556</height>
+-               </rect>
+-              </property>
+-              <layout class="QVBoxLayout" name="verticalLayout_32">
+-               <item>
+-                <layout class="QVBoxLayout" name="verticalLayout_6">
+-                 <property name="spacing">
+-                  <number>2</number>
+-                 </property>
+-                 <item>
+-                  <widget class="QFrame" name="performanceFrame">
+-                   <property name="minimumSize">
+-                    <size>
+-                     <width>0</width>
+-                     <height>50</height>
+-                    </size>
+-                   </property>
+-                   <property name="maximumSize">
+-                    <size>
+-                     <width>16777215</width>
+-                     <height>50</height>
+-                    </size>
+-                   </property>
+-                   <property name="frameShape">
+-                    <enum>QFrame::Box</enum>
+-                   </property>
+-                   <property name="frameShadow">
+-                    <enum>QFrame::Plain</enum>
+-                   </property>
+-                   <layout class="QHBoxLayout" name="horizontalLayout_3">
+-                    <property name="spacing">
+-                     <number>0</number>
+-                    </property>
+-                    <property name="leftMargin">
+-                     <number>0</number>
+-                    </property>
+-                    <property name="topMargin">
+-                     <number>0</number>
+-                    </property>
+-                    <property name="rightMargin">
+-                     <number>0</number>
+-                    </property>
+-                    <property name="bottomMargin">
+-                     <number>0</number>
+-                    </property>
+-                    <item>
+-                     <layout class="QHBoxLayout" name="horizontalLayout">
+-                      <property name="spacing">
+-                       <number>0</number>
+-                      </property>
+-                      <property name="leftMargin">
+-                       <number>16</number>
+-                      </property>
+-                      <item>
+-                       <widget class="QRadioButton" name="performanceRadioBtn">
+-                        <property name="sizePolicy">
+-                         <sizepolicy hsizetype="Minimum" vsizetype="Preferred">
+-                          <horstretch>0</horstretch>
+-                          <verstretch>0</verstretch>
+-                         </sizepolicy>
+-                        </property>
+-                        <property name="text">
+-                         <string>Performance</string>
+-                        </property>
+-                        <attribute name="buttonGroup">
+-                         <string notr="true">buttonGroup</string>
+-                        </attribute>
+-                       </widget>
+-                      </item>
+-                      <item>
+-                       <spacer name="horizontalSpacer_2">
+-                        <property name="orientation">
+-                         <enum>Qt::Horizontal</enum>
+-                        </property>
+-                        <property name="sizeHint" stdset="0">
+-                         <size>
+-                          <width>40</width>
+-                          <height>20</height>
+-                         </size>
+-                        </property>
+-                       </spacer>
+-                      </item>
+-                     </layout>
+-                    </item>
+-                   </layout>
+-                  </widget>
+-                 </item>
+-                 <item>
+-                  <widget class="QFrame" name="performanceTipFrame">
+-                   <property name="sizePolicy">
+-                    <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+-                     <horstretch>0</horstretch>
+-                     <verstretch>0</verstretch>
+-                    </sizepolicy>
+-                   </property>
+-                   <property name="minimumSize">
+-                    <size>
+-                     <width>0</width>
+-                     <height>0</height>
+-                    </size>
+-                   </property>
+-                   <property name="maximumSize">
+-                    <size>
+-                     <width>16777215</width>
+-                     <height>16777215</height>
+-                    </size>
+-                   </property>
+-                   <property name="frameShape">
+-                    <enum>QFrame::Box</enum>
+-                   </property>
+-                   <property name="frameShadow">
+-                    <enum>QFrame::Plain</enum>
+-                   </property>
+-                   <layout class="QVBoxLayout" name="verticalLayout_11">
+-                    <property name="spacing">
+-                     <number>8</number>
+-                    </property>
+-                    <property name="leftMargin">
+-                     <number>16</number>
+-                    </property>
+-                    <property name="topMargin">
+-                     <number>0</number>
+-                    </property>
+-                    <property name="rightMargin">
+-                     <number>16</number>
+-                    </property>
+-                    <property name="bottomMargin">
+-                     <number>0</number>
+-                    </property>
+-                    <item>
+-                     <widget class="QLabel" name="label">
+-                      <property name="sizePolicy">
+-                       <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+-                        <horstretch>0</horstretch>
+-                        <verstretch>0</verstretch>
+-                       </sizepolicy>
+-                      </property>
+-                      <property name="autoFillBackground">
+-                       <bool>false</bool>
+-                      </property>
+-                      <property name="text">
+-                       <string>Applicable to machine with discrete graphics, which can accelerate the rendering of 3D graphics.</string>
+-                      </property>
+-                      <property name="wordWrap">
+-                       <bool>true</bool>
+-                      </property>
+-                     </widget>
+-                    </item>
+-                    <item>
+-                     <widget class="QLabel" name="label_2">
+-                      <property name="sizePolicy">
+-                       <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+-                        <horstretch>0</horstretch>
+-                        <verstretch>0</verstretch>
+-                       </sizepolicy>
+-                      </property>
+-                      <property name="text">
+-                       <string>(Note: not support connect graphical with xmanager on windows.)</string>
+-                      </property>
+-                      <property name="wordWrap">
+-                       <bool>true</bool>
+-                      </property>
+-                     </widget>
+-                    </item>
+-                   </layout>
+-                  </widget>
+-                 </item>
+-                </layout>
+-               </item>
+-               <item>
+-                <layout class="QVBoxLayout" name="verticalLayout_8">
+-                 <property name="spacing">
+-                  <number>2</number>
+-                 </property>
+-                 <item>
+-                  <widget class="QFrame" name="compatibleFrame">
+-                   <property name="minimumSize">
+-                    <size>
+-                     <width>0</width>
+-                     <height>50</height>
+-                    </size>
+-                   </property>
+-                   <property name="maximumSize">
+-                    <size>
+-                     <width>16777215</width>
+-                     <height>50</height>
+-                    </size>
+-                   </property>
+-                   <property name="frameShape">
+-                    <enum>QFrame::Box</enum>
+-                   </property>
+-                   <property name="frameShadow">
+-                    <enum>QFrame::Plain</enum>
+-                   </property>
+-                   <layout class="QHBoxLayout" name="horizontalLayout_5">
+-                    <property name="spacing">
+-                     <number>0</number>
+-                    </property>
+-                    <property name="leftMargin">
+-                     <number>0</number>
+-                    </property>
+-                    <property name="topMargin">
+-                     <number>0</number>
+-                    </property>
+-                    <property name="rightMargin">
+-                     <number>0</number>
+-                    </property>
+-                    <property name="bottomMargin">
+-                     <number>0</number>
+-                    </property>
+-                    <item>
+-                     <layout class="QHBoxLayout" name="horizontalLayout_4">
+-                      <property name="spacing">
+-                       <number>0</number>
+-                      </property>
+-                      <property name="leftMargin">
+-                       <number>16</number>
+-                      </property>
+-                      <item>
+-                       <widget class="QRadioButton" name="compatibleRadioBtn">
+-                        <property name="sizePolicy">
+-                         <sizepolicy hsizetype="Minimum" vsizetype="Preferred">
+-                          <horstretch>0</horstretch>
+-                          <verstretch>0</verstretch>
+-                         </sizepolicy>
+-                        </property>
+-                        <property name="text">
+-                         <string>Compatible</string>
+-                        </property>
+-                        <attribute name="buttonGroup">
+-                         <string notr="true">buttonGroup</string>
+-                        </attribute>
+-                       </widget>
+-                      </item>
+-                      <item>
+-                       <spacer name="horizontalSpacer_3">
+-                        <property name="orientation">
+-                         <enum>Qt::Horizontal</enum>
+-                        </property>
+-                        <property name="sizeHint" stdset="0">
+-                         <size>
+-                          <width>40</width>
+-                          <height>20</height>
+-                         </size>
+-                        </property>
+-                       </spacer>
+-                      </item>
+-                     </layout>
+-                    </item>
+-                   </layout>
+-                  </widget>
+-                 </item>
+-                 <item>
+-                  <widget class="QFrame" name="compatibleTipFrame">
+-                   <property name="sizePolicy">
+-                    <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+-                     <horstretch>0</horstretch>
+-                     <verstretch>0</verstretch>
+-                    </sizepolicy>
+-                   </property>
+-                   <property name="minimumSize">
+-                    <size>
+-                     <width>0</width>
+-                     <height>0</height>
+-                    </size>
+-                   </property>
+-                   <property name="maximumSize">
+-                    <size>
+-                     <width>16777215</width>
+-                     <height>16777215</height>
+-                    </size>
+-                   </property>
+-                   <property name="frameShape">
+-                    <enum>QFrame::Box</enum>
+-                   </property>
+-                   <property name="frameShadow">
+-                    <enum>QFrame::Plain</enum>
+-                   </property>
+-                   <layout class="QVBoxLayout" name="verticalLayout_12">
+-                    <property name="spacing">
+-                     <number>8</number>
+-                    </property>
+-                    <property name="leftMargin">
+-                     <number>16</number>
+-                    </property>
+-                    <property name="topMargin">
+-                     <number>0</number>
+-                    </property>
+-                    <property name="rightMargin">
+-                     <number>16</number>
+-                    </property>
+-                    <property name="bottomMargin">
+-                     <number>0</number>
+-                    </property>
+-                    <item>
+-                     <widget class="QLabel" name="label_3">
+-                      <property name="sizePolicy">
+-                       <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+-                        <horstretch>0</horstretch>
+-                        <verstretch>0</verstretch>
+-                       </sizepolicy>
+-                      </property>
+-                      <property name="text">
+-                       <string>Applicable to machine with integrated graphics,  there is no 3D graphics acceleration. </string>
+-                      </property>
+-                      <property name="wordWrap">
+-                       <bool>true</bool>
+-                      </property>
+-                     </widget>
+-                    </item>
+-                    <item>
+-                     <widget class="QLabel" name="label_4">
+-                      <property name="sizePolicy">
+-                       <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+-                        <horstretch>0</horstretch>
+-                        <verstretch>0</verstretch>
+-                       </sizepolicy>
+-                      </property>
+-                      <property name="text">
+-                       <string>(Note: need connect graphical with xmanager on windows, use this option.)</string>
+-                      </property>
+-                      <property name="wordWrap">
+-                       <bool>true</bool>
+-                      </property>
+-                     </widget>
+-                    </item>
+-                   </layout>
+-                  </widget>
+-                 </item>
+-                </layout>
+-               </item>
+-               <item>
+-                <layout class="QVBoxLayout" name="verticalLayout_9">
+-                 <property name="spacing">
+-                  <number>2</number>
+-                 </property>
+-                 <item>
+-                  <widget class="QFrame" name="automaticFrame">
+-                   <property name="minimumSize">
+-                    <size>
+-                     <width>0</width>
+-                     <height>50</height>
+-                    </size>
+-                   </property>
+-                   <property name="maximumSize">
+-                    <size>
+-                     <width>16777215</width>
+-                     <height>50</height>
+-                    </size>
+-                   </property>
+-                   <property name="frameShape">
+-                    <enum>QFrame::Box</enum>
+-                   </property>
+-                   <property name="frameShadow">
+-                    <enum>QFrame::Plain</enum>
+-                   </property>
+-                   <layout class="QHBoxLayout" name="horizontalLayout_8">
+-                    <property name="spacing">
+-                     <number>0</number>
+-                    </property>
+-                    <property name="leftMargin">
+-                     <number>0</number>
+-                    </property>
+-                    <property name="topMargin">
+-                     <number>0</number>
+-                    </property>
+-                    <property name="rightMargin">
+-                     <number>0</number>
+-                    </property>
+-                    <property name="bottomMargin">
+-                     <number>0</number>
+-                    </property>
+-                    <item>
+-                     <layout class="QHBoxLayout" name="horizontalLayout_7">
+-                      <property name="spacing">
+-                       <number>0</number>
+-                      </property>
+-                      <property name="leftMargin">
+-                       <number>16</number>
+-                      </property>
+-                      <item>
+-                       <widget class="QRadioButton" name="autoRadioBtn">
+-                        <property name="sizePolicy">
+-                         <sizepolicy hsizetype="Minimum" vsizetype="Preferred">
+-                          <horstretch>0</horstretch>
+-                          <verstretch>0</verstretch>
+-                         </sizepolicy>
+-                        </property>
+-                        <property name="text">
+-                         <string>Automatic</string>
+-                        </property>
+-                        <attribute name="buttonGroup">
+-                         <string notr="true">buttonGroup</string>
+-                        </attribute>
+-                       </widget>
+-                      </item>
+-                      <item>
+-                       <spacer name="horizontalSpacer_4">
+-                        <property name="orientation">
+-                         <enum>Qt::Horizontal</enum>
+-                        </property>
+-                        <property name="sizeHint" stdset="0">
+-                         <size>
+-                          <width>40</width>
+-                          <height>20</height>
+-                         </size>
+-                        </property>
+-                       </spacer>
+-                      </item>
+-                     </layout>
+-                    </item>
+-                   </layout>
+-                  </widget>
+-                 </item>
+-                 <item>
+-                  <widget class="QFrame" name="automaticTipFrame">
+-                   <property name="sizePolicy">
+-                    <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+-                     <horstretch>0</horstretch>
+-                     <verstretch>0</verstretch>
+-                    </sizepolicy>
+-                   </property>
+-                   <property name="minimumSize">
+-                    <size>
+-                     <width>0</width>
+-                     <height>0</height>
+-                    </size>
+-                   </property>
+-                   <property name="maximumSize">
+-                    <size>
+-                     <width>16777215</width>
+-                     <height>16777215</height>
+-                    </size>
+-                   </property>
+-                   <property name="frameShape">
+-                    <enum>QFrame::Box</enum>
+-                   </property>
+-                   <property name="frameShadow">
+-                    <enum>QFrame::Plain</enum>
+-                   </property>
+-                   <layout class="QVBoxLayout" name="verticalLayout_5">
+-                    <property name="spacing">
+-                     <number>8</number>
+-                    </property>
+-                    <property name="leftMargin">
+-                     <number>16</number>
+-                    </property>
+-                    <property name="topMargin">
+-                     <number>0</number>
+-                    </property>
+-                    <property name="rightMargin">
+-                     <number>16</number>
+-                    </property>
+-                    <property name="bottomMargin">
+-                     <number>0</number>
+-                    </property>
+-                    <item>
+-                     <widget class="QLabel" name="label_5">
+-                      <property name="sizePolicy">
+-                       <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+-                        <horstretch>0</horstretch>
+-                        <verstretch>0</verstretch>
+-                       </sizepolicy>
+-                      </property>
+-                      <property name="text">
+-                       <string>Auto select according to environment, delay the login time (about 0.5 sec).</string>
+-                      </property>
+-                      <property name="wordWrap">
+-                       <bool>true</bool>
+-                      </property>
+-                     </widget>
+-                    </item>
+-                    <item>
+-                     <layout class="QHBoxLayout" name="autoHorLayout">
+-                      <property name="spacing">
+-                       <number>16</number>
+-                      </property>
+-                      <item>
+-                       <widget class="QLabel" name="label_7">
+-                        <property name="sizePolicy">
+-                         <sizepolicy hsizetype="Fixed" vsizetype="Preferred">
+-                          <horstretch>0</horstretch>
+-                          <verstretch>0</verstretch>
+-                         </sizepolicy>
+-                        </property>
+-                        <property name="text">
+-                         <string>Threshold:</string>
+-                        </property>
+-                       </widget>
+-                      </item>
+-                      <item>
+-                       <widget class="QLineEdit" name="lineEdit">
+-                        <property name="sizePolicy">
+-                         <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
+-                          <horstretch>0</horstretch>
+-                          <verstretch>0</verstretch>
+-                         </sizepolicy>
+-                        </property>
+-                       </widget>
+-                      </item>
+-                      <item>
+-                       <widget class="QPushButton" name="applyBtn">
+-                        <property name="sizePolicy">
+-                         <sizepolicy hsizetype="Minimum" vsizetype="Preferred">
+-                          <horstretch>0</horstretch>
+-                          <verstretch>0</verstretch>
+-                         </sizepolicy>
+-                        </property>
+-                        <property name="text">
+-                         <string>Apply</string>
+-                        </property>
+-                       </widget>
+-                      </item>
+-                      <item>
+-                       <widget class="QPushButton" name="resetBtn">
+-                        <property name="sizePolicy">
+-                         <sizepolicy hsizetype="Minimum" vsizetype="Preferred">
+-                          <horstretch>0</horstretch>
+-                          <verstretch>0</verstretch>
+-                         </sizepolicy>
+-                        </property>
+-                        <property name="text">
+-                         <string>Reset</string>
+-                        </property>
+-                       </widget>
+-                      </item>
+-                     </layout>
+-                    </item>
+-                    <item>
+-                     <widget class="QLabel" name="label_6">
+-                      <property name="sizePolicy">
+-                       <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+-                        <horstretch>0</horstretch>
+-                        <verstretch>0</verstretch>
+-                       </sizepolicy>
+-                      </property>
+-                      <property name="text">
+-                       <string>(Note: select this option to use 3D graphics acceleration and xmanager.)</string>
+-                      </property>
+-                      <property name="wordWrap">
+-                       <bool>true</bool>
+-                      </property>
+-                     </widget>
+-                    </item>
+-                   </layout>
+-                  </widget>
+-                 </item>
+-                </layout>
+-               </item>
+-              </layout>
+-              <zorder></zorder>
+-              <zorder></zorder>
+-              <zorder></zorder>
+-             </widget>
+-            </widget>
+-           </item>
+-          </layout>
+-         </widget>
+-        </item>
+-       </layout>
+-      </item>
+-     </layout>
+-    </widget>
+-   </item>
+-  </layout>
+- </widget>
+- <customwidgets>
+-  <customwidget>
+-   <class>TitleLabel</class>
+-   <extends>QLabel</extends>
+-   <header location="global">titlelabel.h</header>
+-  </customwidget>
+-  <customwidget>
+-   <class>CloseButton</class>
+-   <extends>QPushButton</extends>
+-   <header location="global">closebutton.h</header>
+-  </customwidget>
+- </customwidgets>
+- <resources/>
+- <connections/>
+- <buttongroups>
+-  <buttongroup name="buttonGroup"/>
+- </buttongroups>
+-</ui>
+diff --git a/plugins/system/display/widget.cpp b/plugins/system/display/widget.cpp
+index 43275c3..05a296d 100644
+--- a/plugins/system/display/widget.cpp
++++ b/plugins/system/display/widget.cpp
+@@ -23,7 +23,6 @@
+ #include "declarative/qmlscreen.h"
+ #include "utils.h"
+ #include "ui_display.h"
+-#include "displayperformancedialog.h"
+ #include "colorinfo.h"
+ #include "scalesize.h"
+ #include "ukcccommon.h"
+@@ -133,6 +132,7 @@ Widget::Widget(QWidget *parent) :
+     qRegisterMetaType<QQuickView *>();
+ 
+     ui->setupUi(this);
++    ui->titleLabel->setContentsMargins(16, 0, 0, 0);
+     initUi();
+     initNightModeUi();
+     initAutoBrihgtUI();
+@@ -202,6 +202,7 @@ void Widget::setConfig(const KScreen::ConfigPtr &config)
+     mConfig = config;
+     mPrevConfig = config->clone();
+     if (mMultiScreenFrame) {
++        qDebug() << Q_FUNC_INFO << "connetedOutputs count" << mConfig->connectedOutputs().size();
+         mMultiScreenFrame->setVisible(mConfig->connectedOutputs().size() > 1);
+     }
+     updateMultiScreen();
+@@ -281,7 +282,8 @@ KScreen::ConfigPtr Widget::currentConfig() const
+ void Widget::initNightModeUi()
+ {
+     ui->verticalLayout->setSpacing(8);
+-    mNightModeLabel = new TitleLabel(this);
++    mNightModeLabel = new KLabel(this);
++    mNightModeLabel->setContentsMargins(16, 0, 0, 0);
+     //~ contents_path /Display/Night Mode
+     mNightModeLabel->setText(tr("Night Mode"));
+     mNightModeFrame = new SettingGroup(this);
+@@ -527,7 +529,7 @@ void Widget::slotUnifyOutputs()
+     if (!mIscloneMode) {
+ 
+         unifySetconfig = true;
+-
++        qDebug() << Q_FUNC_INFO << "is not clone Mode, setConfig";
+         setConfig(mPrevConfig);
+ 
+         monitorComboBox->setEnabled(isExtendMode);
+@@ -1053,6 +1055,7 @@ int Widget::updateScreenConfig()
+     auto *preOp = new KScreen::GetConfigOperation();
+     preOp->exec();
+     mPrevConfig = preOp->config()->clone();  //重新获取屏幕当前状态,通过mconfig未必能获取到正确的状态
++    qDebug() << Q_FUNC_INFO << "updateScreenConfig connectedOutput count" << mPrevConfig->connectedOutputs().size();
+     preOp->deleteLater();
+     return 0;
+ }
+@@ -1870,6 +1873,7 @@ void Widget::usdScreenModeChangedSlot(int status)
+         mIscloneMode = false;
+     }
+ 
++    qDebug() << Q_FUNC_INFO << "screenMode" << status << "mIscloneMode:" << mIscloneMode;
+     int time = 1500;
+     if (mIscloneMode) {
+         time = 0;
+@@ -1972,7 +1976,7 @@ void Widget::initConnection()
+     });
+ 
+     connect(mTemptWidget, &SliderWidget::valueChanged, this, [=]{
+-        qDebug() << Q_FUNC_INFO << "susidian valueChanged" << mTemptWidget->value();
++        qDebug() << Q_FUNC_INFO << "TemptWidget valueChanged" << mTemptWidget->value();
+         if (m_colorSettings) {
+             m_colorSettings->set(NIGHT_TEMPERATURE_KEY, mTemptWidget->value());
+         } else {
+@@ -2826,15 +2830,15 @@ void Widget::initUi()
+     spliceFrame       = new UkccFrame(modeGroup, UkccFrame::BorderRadiusStyle::Around, true);
+     configGroup       = new SettingGroup(this);
+     monitorFrame      = new UkccFrame(configGroup, UkccFrame::BorderRadiusStyle::Around, true);
+-    monitorLabel      = new FixLabel(monitorFrame);
++    monitorLabel      = new KLabel(monitorFrame);
+     monitorComboBox   = new QComboBox(monitorFrame);
+     monitorBtn        = new QPushButton(monitorFrame);
+     mControlPanel     = new ControlPanel(configGroup);
+     scaleFrame        = new UkccFrame(configGroup, UkccFrame::BorderRadiusStyle::Around, true);
+-    scaleLabel        = new FixLabel(scaleFrame);
++    scaleLabel        = new KLabel(scaleFrame);
+     scaleComboBox     = new QComboBox(scaleFrame);
+     openMonitorFrame  = new UkccFrame(configGroup, UkccFrame::BorderRadiusStyle::Around, true);
+-    openMonitorLabel  = new FixLabel(openMonitorFrame);
++    openMonitorLabel  = new KLabel(openMonitorFrame);
+     openMonitorButton = new KSwitchButton(openMonitorFrame);
+     //~ contents_path /Display/Auto Brightness
+     mAutoBrightFrame   = new SwitchWidget(tr("Auto Brightness"));
+diff --git a/plugins/system/display/widget.h b/plugins/system/display/widget.h
+index d43e1a1..738c743 100644
+--- a/plugins/system/display/widget.h
++++ b/plugins/system/display/widget.h
+@@ -48,16 +48,14 @@
+ #include "outputconfig.h"
+ #include "brightnessFrame.h"
+ #include "screenConfig.h"
+-#include "titlelabel.h"
+-#include "fixlabel.h"
+ #include "lightlabel.h"
+-#include "uslider.h"
+ #include "switchwidget.h"
+ #include "kswitchbutton.h"
+ #include "ukccframe.h"
+ #include "settinggroup.h"
+ #include "comboxwidget.h"
+ #include "sliderwidget.h"
++#include <klabel.h>
+ 
+ using namespace kdk;
+ 
+@@ -262,13 +260,13 @@ private:
+     KSwitchButton *mAutoBrightBtn = nullptr;
+     KSwitchButton *mBackBrightBtn = nullptr;
+ 
+-    TitleLabel *mNightModeLabel = nullptr;
++    KLabel *mNightModeLabel = nullptr;
+     QLabel *mOpenLabel          = nullptr;
+     QLabel *mTimeModeLabel      = nullptr;
+     QLabel *mCustomTimeLabel    = nullptr;
+-    FixLabel *mTemptLabel       = nullptr;
+-    FixLabel *mWarmLabel        = nullptr;
+-    FixLabel *mColdLabel        = nullptr;
++    KLabel *mTemptLabel       = nullptr;
++    KLabel *mWarmLabel        = nullptr;
++    KLabel *mColdLabel        = nullptr;
+     QLabel *mLabel_1            = nullptr;
+ 
+     QLabel *nightLabel          = nullptr;
+@@ -355,15 +353,15 @@ private:
+     UkccFrame     *spliceFrame       = nullptr;
+     SettingGroup  *configGroup       = nullptr;
+     UkccFrame     *monitorFrame      = nullptr;
+-    FixLabel      *monitorLabel      = nullptr;
++    KLabel      *monitorLabel      = nullptr;
+     QComboBox     *monitorComboBox   = nullptr;
+     QPushButton   *monitorBtn        = nullptr;
+     ControlPanel  *mControlPanel     = nullptr;
+     UkccFrame     *scaleFrame        = nullptr;
+-    FixLabel      *scaleLabel        = nullptr;
++    KLabel      *scaleLabel        = nullptr;
+     QComboBox     *scaleComboBox     = nullptr;
+     UkccFrame     *openMonitorFrame  = nullptr;
+-    FixLabel      *openMonitorLabel  = nullptr;
++    KLabel      *openMonitorLabel  = nullptr;
+     KSwitchButton *openMonitorButton = nullptr;
+     UkccFrame     *mbrightnessFrame  = nullptr;
+     QVBoxLayout   *mbrightnesslayout = nullptr;
+diff --git a/plugins/system/display_hw/brightnessFrame.cpp b/plugins/system/display_hw/brightnessFrame.cpp
+deleted file mode 100644
+index b5b5761..0000000
+--- a/plugins/system/display_hw/brightnessFrame.cpp
++++ /dev/null
+@@ -1,42 +0,0 @@
+-#include "brightnessFrame.h"
+-#include <QHBoxLayout>
+-
+-BrightnessFrame::BrightnessFrame(QWidget *parent) :
+-    QFrame(parent)
+-{
+-    this->setFixedHeight(50);
+-    this->setMinimumWidth(550);
+-    this->setFrameShape(QFrame::Shape::Box);
+-    QHBoxLayout *layout = new QHBoxLayout(this);
+-    layout->setSpacing(6);
+-    layout->setMargin(9);
+-
+-    labelName = new QLabel(this);
+-    labelName->setFixedWidth(118);
+-
+-    slider = new Uslider(Qt::Horizontal, this);
+-    slider->setRange(10, 100);
+-
+-    labelValue = new QLabel(this);
+-    labelValue->setAlignment(Qt::AlignRight);
+-
+-    layout->addWidget(labelName);
+-    layout->addWidget(slider);
+-    layout->addWidget(labelValue);
+-
+-}
+-
+-BrightnessFrame::~BrightnessFrame()
+-{
+-
+-}
+-
+-void BrightnessFrame::setTextLableName(QString text)
+-{
+-    this->labelName->setText(text);
+-}
+-
+-void BrightnessFrame::setTextLableValue(QString text)
+-{
+-    this->labelValue->setText(text + "%");
+-}
+diff --git a/plugins/system/display_hw/brightnessFrame.h b/plugins/system/display_hw/brightnessFrame.h
+deleted file mode 100644
+index 565d52e..0000000
+--- a/plugins/system/display_hw/brightnessFrame.h
++++ /dev/null
+@@ -1,26 +0,0 @@
+-#ifndef BRIGHTNESSFRAME_H
+-#define BRIGHTNESSFRAME_H
+-
+-#include <QFrame>
+-#include <QLabel>
+-#include <QWidget>
+-#include <QLabel>
+-#include "uslider.h"
+-
+-class BrightnessFrame : public QFrame
+-{
+-    Q_OBJECT
+-public:
+-    BrightnessFrame(QWidget *parent = nullptr);
+-    ~BrightnessFrame();
+-    void setTextLableName(QString text);
+-    void setTextLableValue(QString text);
+-    Uslider *slider = nullptr;
+-    QString outputName;
+-    bool    openFlag = true;
+-private:
+-    QLabel *labelName = nullptr;
+-    QLabel *labelValue = nullptr;
+-};
+-
+-#endif // BRIGHTNESSFRAME_H
+diff --git a/plugins/system/display_hw/colorinfo.h b/plugins/system/display_hw/colorinfo.h
+deleted file mode 100644
+index b8551f1..0000000
+--- a/plugins/system/display_hw/colorinfo.h
++++ /dev/null
+@@ -1,32 +0,0 @@
+-#ifndef COLORINFO_H
+-#define COLORINFO_H
+-
+-#include <QHash>
+-#include <QVariant>
+-#include <QString>
+-#include <QDBusArgument>
+-
+-struct ColorInfo {
+-    QString arg;
+-    QDBusVariant out;
+-};
+-
+-QDBusArgument &operator<<(QDBusArgument &argument, const ColorInfo &mystruct)
+-{
+-    argument.beginStructure();
+-    argument << mystruct.arg << mystruct.out;
+-    argument.endStructure();
+-    return argument;
+-}
+-
+-const QDBusArgument &operator>>(const QDBusArgument &argument, ColorInfo &mystruct)
+-{
+-    argument.beginStructure();
+-    argument >> mystruct.arg >> mystruct.out;
+-    argument.endStructure();
+-    return argument;
+-}
+-
+-Q_DECLARE_METATYPE(ColorInfo)
+-
+-#endif // COLORINFO_H
+diff --git a/plugins/system/display_hw/controlpanel.cpp b/plugins/system/display_hw/controlpanel.cpp
+deleted file mode 100644
+index 16c74b1..0000000
+--- a/plugins/system/display_hw/controlpanel.cpp
++++ /dev/null
+@@ -1,175 +0,0 @@
+-#include "controlpanel.h"
+-#include "outputconfig.h"
+-#include "unifiedoutputconfig.h"
+-#include "utils.h"
+-#include "scalesize.h"
+-
+-#include <QVBoxLayout>
+-#include <QDebug>
+-#include <QLabel>
+-#include <QDBusInterface>
+-#include <KF5/KScreen/kscreen/config.h>
+-
+-QSize mScaleSize = QSize();
+-
+-ControlPanel::ControlPanel(QWidget *parent) :
+-    QFrame(parent),
+-    mUnifiedOutputCfg(nullptr)
+-{
+-    setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
+-    mLayout = new QVBoxLayout(this);
+-    mLayout->setContentsMargins(0, 0, 0, 0);
+-
+-    isWayland();
+-}
+-
+-ControlPanel::~ControlPanel()
+-{
+-}
+-
+-void ControlPanel::setConfig(const KScreen::ConfigPtr &config)
+-{
+-    qDeleteAll(mOutputConfigs);
+-    mOutputConfigs.clear();
+-    delete mUnifiedOutputCfg;
+-    mUnifiedOutputCfg = nullptr;
+-
+-    if (mConfig) {
+-        mConfig->disconnect(this);
+-    }
+-
+-    mConfig = config;
+-    connect(mConfig.data(), &KScreen::Config::outputAdded,
+-            this, [=](const KScreen::OutputPtr &output){
+-        addOutput(output);
+-    });
+-    connect(mConfig.data(), &KScreen::Config::outputRemoved,
+-            this, &ControlPanel::removeOutput);
+-
+-    for (const KScreen::OutputPtr &output : mConfig->outputs()) {
+-        addOutput(output);
+-    }
+-}
+-
+-void ControlPanel::addOutput(const KScreen::OutputPtr &output)
+-{
+-    OutputConfig *outputCfg = new OutputConfig(this);
+-    outputCfg->setVisible(false);
+-    outputCfg->setShowScaleOption(mConfig->supportedFeatures().testFlag(KScreen::Config::Feature::PerOutputScaling));
+-
+-    outputCfg->setOutput(output);
+-    connect(outputCfg, &OutputConfig::changed,
+-            this, &ControlPanel::changed);
+-
+-    connect(outputCfg, &OutputConfig::scaleChanged,
+-            this, &ControlPanel::scaleChanged);
+-
+-    mLayout->addWidget(outputCfg);
+-
+-    mOutputConfigs << outputCfg;
+-
+-    if (mIsWayland) {
+-        activateOutput(mCurrentOutput);
+-    }
+-}
+-
+-void ControlPanel::removeOutput(int outputId)
+-{
+-    if (mUnifiedOutputCfg) {
+-        mUnifiedOutputCfg->setVisible(false);
+-        mIsCloneMode = false;
+-    }
+-
+-    for (OutputConfig *outputCfg : mOutputConfigs) {
+-        if (outputCfg->output()->id() == outputId) {
+-            mOutputConfigs.removeOne(outputCfg);
+-            delete outputCfg;
+-            outputCfg = nullptr;
+-        } else {
+-            outputCfg->setVisible(true);
+-        }
+-    }
+-}
+-
+-void ControlPanel::activateOutput(const KScreen::OutputPtr &output)
+-{
+-    // Ignore activateOutput when in unified mode
+-    if ((mUnifiedOutputCfg && mIsCloneMode) || output.isNull()) {
+-        return;
+-    }
+-
+-    mCurrentOutput = output;
+-
+-    Q_FOREACH (OutputConfig *cfg, mOutputConfigs) {
+-        cfg->setVisible(cfg->output()->id() == output->id());
+-    }
+-}
+-
+-void ControlPanel::activateOutputNoParam()
+-{
+-    // Ignore activateOutput when in unified mode
+-    if (mUnifiedOutputCfg) {
+-        return;
+-    }
+-
+-    Q_FOREACH (OutputConfig *cfg, mOutputConfigs) {
+-        cfg->setVisible(cfg->output()->id() == 66);
+-    }
+-}
+-
+-void ControlPanel::changescalemax(const KScreen::OutputPtr &output)
+-{
+-    QSize sizescale  = QSize();
+-    Q_FOREACH (const  KScreen::ModePtr &mode, output->modes()) {
+-        if (sizescale.width() <= mode->size().width()) {
+-            sizescale = mode->size();
+-        }
+-    }
+-    if (mScaleSize == QSize() || mScaleSize.width() > sizescale.width()) {
+-        mScaleSize = sizescale;
+-    }
+-}
+-
+-void ControlPanel::isWayland()
+-{
+-    QString sessionType = getenv("XDG_SESSION_TYPE");
+-
+-    if (!sessionType.compare(kSession, Qt::CaseSensitive)) {
+-        mIsWayland = true;
+-    } else {
+-        mIsWayland = false;
+-    }
+-}
+-
+-void ControlPanel::setUnifiedOutput(const KScreen::OutputPtr &output)
+-{
+-    Q_FOREACH (OutputConfig *config, mOutputConfigs) {
+-        if (!config->output()->isConnected()) {
+-            continue;
+-        }
+-
+-        // 隐藏下面控制
+-        config->setVisible(output == nullptr);
+-    }
+-
+-    if (output.isNull()) {
+-        mUnifiedOutputCfg->deleteLater();
+-        mUnifiedOutputCfg = nullptr;
+-    } else {
+-        mUnifiedOutputCfg = new UnifiedOutputConfig(mConfig, this);
+-        mUnifiedOutputCfg->setOutput(output);
+-        mUnifiedOutputCfg->setVisible(true);
+-        mIsCloneMode = true;
+-        mLayout->insertWidget(mLayout->count() - 2, mUnifiedOutputCfg);
+-        connect(mUnifiedOutputCfg, &UnifiedOutputConfig::changed,
+-                this, &ControlPanel::changed);
+-    }
+-}
+-
+-void ControlPanel::deleteUnifiedOutputCfg()
+-{
+-    if (mUnifiedOutputCfg) {
+-        delete mUnifiedOutputCfg;
+-        mUnifiedOutputCfg = nullptr;
+-    }
+-}
+diff --git a/plugins/system/display_hw/controlpanel.h b/plugins/system/display_hw/controlpanel.h
+deleted file mode 100644
+index b127567..0000000
+--- a/plugins/system/display_hw/controlpanel.h
++++ /dev/null
+@@ -1,62 +0,0 @@
+-#ifndef CONTROLPANEL_H
+-#define CONTROLPANEL_H
+-
+-#include <QFrame>
+-
+-#include <KF5/KScreen/kscreen/output.h>
+-
+-class QVBoxLayout;
+-class OutputConfig;
+-class UnifiedOutputConfig;
+-
+-class QLabel;
+-class QCheckBox;
+-class QSlider;
+-class QComboBox;
+-
+-const QString kSession = "wayland";
+-
+-class ControlPanel : public QFrame
+-{
+-    Q_OBJECT
+-
+-public:
+-    explicit ControlPanel(QWidget *parent = nullptr);
+-    ~ControlPanel() override;
+-
+-    void setConfig(const KScreen::ConfigPtr &config);
+-    void setUnifiedOutput(const KScreen::OutputPtr &output);
+-    void activateOutputNoParam();
+-    void changescalemax(const KScreen::OutputPtr &output);
+-    void deleteUnifiedOutputCfg();
+-
+-private:
+-    void isWayland();
+-
+-public Q_SLOTS:
+-    void activateOutput(const KScreen::OutputPtr &output);
+-
+-Q_SIGNALS:
+-    void changed();
+-    void scaleChanged(double scale);
+-
+-private Q_SLOTS:
+-    void addOutput(const KScreen::OutputPtr &output);
+-    void removeOutput(int outputId);
+-
+-public:
+-    QVBoxLayout *mLayout;
+-
+-private:
+-    KScreen::ConfigPtr mConfig;
+-    QList<OutputConfig *> mOutputConfigs;
+-
+-    UnifiedOutputConfig *mUnifiedOutputCfg;
+-
+-    KScreen::OutputPtr mCurrentOutput;
+-
+-    bool mIsWayland;
+-    bool mIsCloneMode = false;
+-};
+-
+-#endif // CONTROLPANEL_H
+diff --git a/plugins/system/display_hw/declarative/qmloutput.cpp b/plugins/system/display_hw/declarative/qmloutput.cpp
+deleted file mode 100644
+index 9c0f4a1..0000000
+--- a/plugins/system/display_hw/declarative/qmloutput.cpp
++++ /dev/null
+@@ -1,606 +0,0 @@
+-/*
+-    Copyright (C) 2012  Dan Vratil <dvratil@redhat.com>
+-
+-    This library is free software; you can redistribute it and/or
+-    modify it under the terms of the GNU Lesser General Public
+-    License as published by the Free Software Foundation; either
+-    version 2.1 of the License, or (at your option) any later version.
+-
+-    This library is distributed in the hope that it will be useful,
+-    but WITHOUT ANY WARRANTY; without even the implied warranty of
+-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+-    Lesser General Public License for more details.
+-
+-    You should have received a copy of the GNU Lesser General Public
+-    License along with this library; if not, write to the Free Software
+-    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+-*/
+-
+-#include "qmloutput.h"
+-#include "qmlscreen.h"
+-
+-#include <KF5/KScreen/kscreen/output.h>
+-#include <KF5/KScreen/kscreen/config.h>
+-
+-#include <QStandardItem>
+-#include <QStandardItemModel>
+-#include <qquickitem.h>
+-#include <QRect>
+-
+-const static int sMargin = 0;
+-const static int sSnapArea = 20;
+-const static int sSnapAlignArea = 6;
+-
+-Q_DECLARE_METATYPE(KScreen::ModePtr)
+-
+-bool operator>(const QSize &sizeA, const QSize &sizeB)
+-{
+-    return ((sizeA.width() > sizeB.width()) && (sizeA.height() > sizeB.height()));
+-}
+-
+-QMLOutput::QMLOutput(QQuickItem *parent):
+-    QQuickItem(parent),
+-    m_screen(nullptr),
+-    m_cloneOf(nullptr),
+-    m_leftDock(nullptr),
+-    m_topDock(nullptr),
+-    m_rightDock(nullptr),
+-    m_bottomDock(nullptr),
+-    pos_clicked(QPointF(0.0,0.0)),
+-    m_isCloneMode(false)
+-{
+-    connect(this, &QMLOutput::xChanged,
+-            this, static_cast<void(QMLOutput::*)()>(&QMLOutput::moved));
+-    connect(this, &QMLOutput::yChanged,
+-            this, static_cast<void(QMLOutput::*)()>(&QMLOutput::moved));
+-}
+-
+-KScreen::Output* QMLOutput::output() const
+-{
+-    return m_output.data();
+-}
+-
+-KScreen::OutputPtr QMLOutput::outputPtr() const
+-{
+-    return m_output;
+-}
+-
+-void QMLOutput::setOutputPtr(const KScreen::OutputPtr &output)
+-{
+-    Q_ASSERT(m_output.isNull());
+-
+-    m_output = output;
+-    Q_EMIT outputChanged();
+-
+-    connect(m_output.data(), &KScreen::Output::rotationChanged,
+-            this, &QMLOutput::updateRootProperties);
+-    connect(m_output.data(), &KScreen::Output::currentModeIdChanged,
+-            this, &QMLOutput::currentModeIdChanged);
+-}
+-
+-QMLScreen *QMLOutput::screen() const
+-{
+-    return m_screen;
+-}
+-
+-void QMLOutput::setScreen(QMLScreen *screen)
+-{
+-    Q_ASSERT(m_screen == nullptr);
+-
+-    m_screen = screen;
+-    Q_EMIT screenChanged();
+-}
+-
+-void QMLOutput::setLeftDockedTo(QMLOutput *output)
+-{
+-    if (m_leftDock == output) {
+-        return;
+-    }
+-
+-    m_leftDock = output;
+-    Q_EMIT leftDockedToChanged();
+-}
+-
+-QMLOutput *QMLOutput::leftDockedTo() const
+-{
+-    return m_leftDock;
+-}
+-
+-void QMLOutput::undockLeft()
+-{
+-    setLeftDockedTo(nullptr);
+-}
+-
+-void QMLOutput::setTopDockedTo(QMLOutput *output)
+-{
+-    if (m_topDock == output) {
+-        return;
+-    }
+-
+-    m_topDock = output;
+-    Q_EMIT topDockedToChanged();
+-}
+-
+-QMLOutput *QMLOutput::topDockedTo() const
+-{
+-    return m_topDock;
+-}
+-
+-void QMLOutput::undockTop()
+-{
+-    setTopDockedTo(nullptr);
+-}
+-
+-void QMLOutput::setRightDockedTo(QMLOutput *output)
+-{
+-    if (m_rightDock == output) {
+-        return;
+-    }
+-
+-    m_rightDock = output;
+-    Q_EMIT rightDockedToChanged();
+-}
+-
+-QMLOutput *QMLOutput::rightDockedTo() const
+-{
+-    return m_rightDock;
+-}
+-
+-void QMLOutput::undockRight()
+-{
+-    setRightDockedTo(nullptr);
+-}
+-
+-void QMLOutput::setBottomDockedTo(QMLOutput *output)
+-{
+-    if (m_bottomDock == output) {
+-        return;
+-    }
+-
+-    m_bottomDock = output;
+-    Q_EMIT bottomDockedToChanged();
+-}
+-
+-QMLOutput *QMLOutput::bottomDockedTo() const
+-{
+-    return m_bottomDock;
+-}
+-
+-void QMLOutput::undockBottom()
+-{
+-    setBottomDockedTo(nullptr);
+-}
+-
+-void QMLOutput::setCloneOf(QMLOutput* other)
+-{
+-    if (m_cloneOf == other) {
+-        return;
+-    }
+-
+-    m_cloneOf = other;
+-    Q_EMIT cloneOfChanged();
+-}
+-
+-QMLOutput* QMLOutput::cloneOf() const
+-{
+-    return m_cloneOf;
+-}
+-
+-int QMLOutput::currentOutputHeight() const
+-{
+-    if (!m_output) {
+-        return 0;
+-    }
+-
+-    KScreen::ModePtr mode = m_output->currentMode();
+-    if (!mode) {
+-        if (m_output->isConnected()) {
+-            mode = bestMode();
+-            if (!mode) {
+-                return 1000;
+-            }
+-            m_output->setCurrentModeId(mode->id());
+-        } else {
+-            return 1000;
+-        }
+-    }
+-    return mode->size().height() / m_output->scale();
+-}
+-
+-int QMLOutput::currentOutputWidth() const
+-{
+-    if (!m_output) {
+-        return 0;
+-    }
+-
+-    KScreen::ModePtr mode = m_output->currentMode();
+-    if (!mode) {
+-        if (m_output->isConnected()) {
+-            mode = bestMode();
+-            if (!mode) {
+-                return 1000;
+-            }
+-            m_output->setCurrentModeId(mode->id());
+-        } else {
+-            return 1000;
+-        }
+-    }
+-    return mode->size().width() / m_output->scale();
+-}
+-
+-void QMLOutput::currentModeIdChanged()
+-{
+-    if (!m_output) {
+-        return;
+-    }
+-
+-    if (isCloneMode()) {
+-        const float newWidth = currentOutputWidth() * m_screen->outputScale();
+-        setX((m_screen->width() - newWidth) / 2);
+-        const float newHeight = currentOutputHeight() * m_screen->outputScale();
+-        setY((m_screen->height() - newHeight) / 2);
+-    } else {
+-        if (m_rightDock) {
+-            QMLOutput *rightDock = m_rightDock;
+-            float newWidth = currentOutputWidth() * m_screen->outputScale();
+-            setX(rightDock->x() - newWidth);
+-            setRightDockedTo(rightDock);
+-        }
+-
+-        if (m_bottomDock) {
+-            QMLOutput *bottomDock = m_bottomDock;
+-            float newHeight = currentOutputHeight() * m_screen->outputScale();
+-            setY(bottomDock->y() - newHeight);
+-            setBottomDockedTo(bottomDock);
+-        }
+-    }
+-
+-    Q_EMIT currentOutputSizeChanged();
+-}
+-
+-
+-int QMLOutput::outputX() const
+-{
+-    return m_output->pos().x();
+-}
+-
+-void QMLOutput::setOutputX(int x)
+-{
+-    if (m_output->pos().rx() == x) {
+-        return;
+-    }
+-
+-    QPoint pos = m_output->pos();
+-    pos.setX(x);
+-    m_output->setPos(pos);
+-    Q_EMIT outputXChanged();
+-}
+-
+-int QMLOutput::outputY() const
+-{
+-    return m_output->pos().y();
+-}
+-
+-void QMLOutput::setOutputY(int y)
+-{
+-    if (m_output->pos().ry() == y) {
+-        return;
+-    }
+-
+-    QPoint pos = m_output->pos();
+-    pos.setY(y);
+-    m_output->setPos(pos);
+-    Q_EMIT outputYChanged();
+-}
+-
+-bool QMLOutput::isCloneMode() const
+-{
+-    return m_isCloneMode;
+-}
+-
+-void QMLOutput::setIsCloneMode(bool isCloneMode)
+-{
+-    if (m_isCloneMode == isCloneMode) {
+-        return;
+-    }
+-
+-    m_isCloneMode = isCloneMode;
+-    Q_EMIT isCloneModeChanged();
+-}
+-
+-void QMLOutput::dockToNeighbours()
+-{
+-    Q_FOREACH (QMLOutput *otherQmlOutput, m_screen->outputs()) {
+-        if (otherQmlOutput == this) {
+-            continue;
+-        }
+-
+-        if (!otherQmlOutput->output()->isConnected() || !otherQmlOutput->output()->isEnabled()) {
+-            continue;
+-        }
+-
+-        const QRect geom = m_output->geometry();
+-
+-        const QRect otherGeom = otherQmlOutput->output()->geometry();
+-
+-        //qDebug()<<"geom is ------>"<<geom<<" other:"<<otherGeom<<endl;
+-
+-        if (geom.left() - 1 == otherGeom.right()) {
+-            setLeftDockedTo(otherQmlOutput);
+-            continue;
+-        }
+-        if (geom.right() + 1 == otherGeom.left()) {
+-            setRightDockedTo(otherQmlOutput);
+-            continue;
+-        }
+-        if (geom.top() - 1 == otherGeom.bottom()) {
+-            setTopDockedTo(otherQmlOutput);
+-            continue;
+-        }
+-        if (geom.bottom() + 1 == otherGeom.top()) {
+-            setBottomDockedTo(otherQmlOutput);
+-            continue;
+-        }
+-    }
+-}
+-
+-int QMLOutput::enableCount() const
+-{
+-    return m_enableCount;
+-}
+-
+-void QMLOutput::setEnableCount(int count)
+-{
+-    Q_UNUSED(count);
+-    m_enableCount = count;
+-    Q_EMIT enableCountChanged();
+-}
+-
+-KScreen::ModePtr QMLOutput::bestMode() const
+-{
+-    if (!m_output) {
+-        return KScreen::ModePtr();
+-    }
+-
+-    KScreen::ModeList modes = m_output->modes();
+-    KScreen::ModePtr bestMode;
+-    Q_FOREACH (const KScreen::ModePtr &mode, modes) {
+-        if (!bestMode || (mode->size() > bestMode->size())) {
+-            bestMode = mode;
+-        }
+-    }
+-
+-    return bestMode;
+-}
+-
+-bool QMLOutput::collidesWithOutput(QObject *other)
+-{
+-    QQuickItem* otherItem = qobject_cast<QQuickItem*>(other);
+-    return boundingRect().intersects(otherItem->boundingRect());
+-}
+-
+-bool QMLOutput::maybeSnapTo(QMLOutput *other)
+-{
+-    qreal centerX = x() + (width() / 2.0);
+-    qreal centerY = y() + (height() / 2.0);
+-
+-    const qreal x2 = other->x();
+-    const qreal y2 = other->y();
+-    const qreal height2 = other->height();
+-    const qreal width2 = other->width();
+-    const qreal centerX2 = x2 + (width2 / 2.0);
+-    const qreal centerY2 = y2 + (height2 / 2.0);
+-
+-    /* left of other */
+-    if ((x() + width() > x2 - sSnapArea) && (x() + width() < x2 + sSnapArea) &&
+-        (y() + height() > y2) && (y() < y2 + height2))
+-    {
+-        setX(x2 - width() + sMargin);
+-        centerX = x() + (width() / 2.0);
+-        setRightDockedTo(other);
+-        other->setLeftDockedTo(this);
+-        //output.cloneOf = null;
+-
+-        /* output is snapped to other on left and their
+-         * upper sides are aligned */
+-        if ((y() < y2 + sSnapAlignArea) && (y() > y2 - sSnapAlignArea)) {
+-            setY(y2);
+-            return true;
+-        }
+-
+-        /* output is snapped to other on left and they
+-         * are centered */
+-        if ((centerY < centerY2 + sSnapAlignArea) && (centerY > centerY2 - sSnapAlignArea)) {
+-            setY(centerY2 - (height() / 2.0));
+-            return true;
+-        }
+-
+-        /* output is snapped to other on left and their
+-         * bottom sides are aligned */
+-        if ((y() + height() < y2 + height2 + sSnapAlignArea) &&
+-            (y() + height() > y2 + height2 - sSnapAlignArea))
+-        {
+-            setY(y2 + height2 - height());
+-            return true;
+-        }
+-
+-        return true;
+-    }
+-
+-    /* output is right of other */
+-    if ((x() > x2 + width2 - sSnapArea) && (x() < x2 + width2 + sSnapArea) &&
+-        (y() + height() > y2) && (y() < y2 + height2))
+-    {
+-        setX(x2 + width2 - sMargin);
+-        centerX = x() + (width() / 2.0);
+-        setLeftDockedTo(other);
+-        other->setRightDockedTo(this);
+-        //output.cloneOf = null;
+-
+-        /* output is snapped to other on right and their
+-         * upper sides are aligned */
+-        if ((y() < y2 + sSnapAlignArea) && (y() > y2 - sSnapAlignArea)) {
+-            setY(y2);
+-            return true;
+-        }
+-
+-        /* output is snapped to other on right and they
+-         * are centered */
+-        if ((centerY < centerY2 + sSnapAlignArea) && (centerY > centerY2 - sSnapAlignArea)) {
+-            setY(centerY2 - (height() / 2.0));
+-            return true;
+-        }
+-
+-        /* output is snapped to other on right and their
+-         * bottom sides are aligned */
+-        if ((y() + height() < y2 + height2 + sSnapAlignArea) &&
+-            (y() + height() > y2 + height2 - sSnapAlignArea))
+-        {
+-            setY(y2 + height2 - height());
+-            return true;
+-        }
+-
+-        return true;
+-    }
+-
+-    /* output is above other */
+-    if ((y() + height() > y2 - sSnapArea) && (y() + height() < y2 + sSnapArea) &&
+-        (x() + width() > x2) && (x() < x2 + width2))
+-    {
+-        setY(y2 - height() + sMargin);
+-        centerY = y() + (height() / 2.0);
+-        setBottomDockedTo(other);
+-        other->setTopDockedTo(this);
+-        //output.cloneOf = null;
+-
+-        /* output is snapped to other on top and their
+-         * left sides are aligned */
+-        if ((x() < x2 + sSnapAlignArea) && (x() > x2 - sSnapAlignArea)) {
+-            setX(x2);
+-            return true;
+-        }
+-
+-        /* output is snapped to other on top and they
+-         * are centered */
+-        if ((centerX < centerX2 + sSnapAlignArea) && (centerX > centerX2 - sSnapAlignArea)) {
+-            setX(centerX2 - (width() / 2.0));
+-            return true;
+-        }
+-
+-        /* output is snapped to other on top and their
+-         * right sides are aligned */
+-        if ((x() + width() < x2 + width2 + sSnapAlignArea) &&
+-            (x() + width() > x2 + width2 - sSnapAlignArea))
+-        {
+-            setX(x2 + width2 - width());
+-            return true;
+-        }
+-
+-        return true;
+-    }
+-
+-    /* output is below other */
+-    if ((y() > y2 + height2 - sSnapArea) && (y() < y2 + height2 + sSnapArea) &&
+-        (x() + width() > x2) && (x() < x2 + width2))
+-    {
+-        setY(y2 + height2 - sMargin);
+-        centerY = y() + (height() / 2.0);
+-        setTopDockedTo(other);
+-        other->setBottomDockedTo(this);
+-        //output.cloneOf = null;
+-
+-        /* output is snapped to other on bottom and their
+-         * left sides are aligned */
+-        if ((x() < x2 + sSnapAlignArea) && (x() > x2 - sSnapAlignArea)) {
+-            setX(x2);
+-            return true;
+-        }
+-
+-        /* output is snapped to other on bottom and they
+-         * are centered */
+-        if ((centerX < centerX2 + sSnapAlignArea) && (centerX > centerX2 - sSnapAlignArea)) {
+-            setX(centerX2 - (width() / 2.0));
+-            return true;
+-        }
+-
+-        /* output is snapped to other on bottom and their
+-         * right sides are aligned */
+-        if ((x() + width() < x2 + width2 + sSnapAlignArea) &&
+-            (x() + width() > x2 + width2 - sSnapAlignArea))
+-        {
+-            setX(x2 + width2 - width());
+-            return true;
+-        }
+-
+-        return true;
+-    }
+-    return false;
+-}
+-
+-void QMLOutput::moved()
+-{
+-    const QList<QQuickItem*> siblings = screen()->childItems();
+-
+-    // First, if we have moved, then unset the "cloneOf" flag
+-    setCloneOf(nullptr);
+-
+-    disconnect(this, &QMLOutput::xChanged, this, static_cast<void(QMLOutput::*)()>(&QMLOutput::moved));
+-    disconnect(this, &QMLOutput::yChanged, this, static_cast<void(QMLOutput::*)()>(&QMLOutput::moved));
+-    Q_FOREACH (QQuickItem *sibling, siblings) {
+-        QMLOutput *otherOutput = qobject_cast<QMLOutput*>(sibling);
+-        if (!otherOutput || otherOutput == this) {
+-            continue;
+-        }
+-
+-        if (!maybeSnapTo(otherOutput)) {
+-            if (m_leftDock == otherOutput) {
+-                m_leftDock->undockRight();
+-                undockLeft();
+-            }
+-            if (m_topDock == otherOutput) {
+-                m_topDock->undockBottom();
+-                undockTop();
+-            }
+-            if (m_rightDock == otherOutput) {
+-                m_rightDock->undockLeft();
+-                undockRight();
+-            }
+-            if (m_bottomDock == otherOutput) {
+-                m_bottomDock->undockTop();
+-                undockBottom();
+-            }
+-        }
+-    }
+-    connect(this, &QMLOutput::xChanged, this, static_cast<void(QMLOutput::*)()>(&QMLOutput::moved));
+-    connect(this, &QMLOutput::yChanged, this, static_cast<void(QMLOutput::*)()>(&QMLOutput::moved));
+-
+-    Q_EMIT moved(m_output->name());
+-}
+-
+-
+-/* Transformation of an item (rotation of the MouseArea) is only visual.
+- * The coordinates and dimensions are still the same (when you rotated
+- * 100x500 rectangle by 90 deg, it will still be 100x500, although
+- * visually it will be 500x100).
+- *
+- * This method calculates the real-visual coordinates and dimensions of
+- * the MouseArea and updates root item to match them. This makes snapping
+- * work correctly regardless off visual rotation of the output
+- */
+-
+-//旋转时计算坐标更改方向
+-void QMLOutput::updateRootProperties()
+-{
+-    const float transformedWidth = (m_output->isHorizontal() ? currentOutputWidth() : currentOutputHeight()) * m_screen->outputScale();
+-    const float transformedHeight = (m_output->isHorizontal() ? currentOutputHeight() : currentOutputWidth()) * m_screen->outputScale();
+-
+-    setSize(QSizeF(transformedWidth, transformedHeight));
+-}
+-
+-void QMLOutput::setPosClicked(QPointF pos) {
+-    this->pos_clicked = pos;
+-}
+-
+-QPointF QMLOutput::posClicked() {
+-    return this->pos_clicked;
+-}
+diff --git a/plugins/system/display_hw/declarative/qmloutput.h b/plugins/system/display_hw/declarative/qmloutput.h
+deleted file mode 100644
+index edd751d..0000000
+--- a/plugins/system/display_hw/declarative/qmloutput.h
++++ /dev/null
+@@ -1,217 +0,0 @@
+-/*
+-    Copyright (C) 2012  Dan Vratil <dvratil@redhat.com>
+-
+-    This library is free software; you can redistribute it and/or
+-    modify it under the terms of the GNU Lesser General Public
+-    License as published by the Free Software Foundation; either
+-    version 2.1 of the License, or (at your option) any later version.
+-
+-    This library is distributed in the hope that it will be useful,
+-    but WITHOUT ANY WARRANTY; without even the implied warranty of
+-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+-    Lesser General Public License for more details.
+-
+-    You should have received a copy of the GNU Lesser General Public
+-    License along with this library; if not, write to the Free Software
+-    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+-*/
+-
+-#ifndef QMLOUTPUT_H
+-#define QMLOUTPUT_H
+-
+-#include <QQuickItem>
+-#include <KF5/KScreen/kscreen/mode.h>
+-
+-class QStandardItemModel;
+-class QAbstractItemModel;
+-
+-class ModesProxyModel;
+-class QMLScreen;
+-
+-class QMLOutput : public QQuickItem
+-{
+-    Q_OBJECT
+-
+-    Q_PROPERTY(KScreen::Output *output
+-               READ output
+-               NOTIFY outputChanged)
+-
+-    Q_PROPERTY(KScreen::OutputPtr outputPtr
+-               READ outputPtr
+-               WRITE setOutputPtr
+-               NOTIFY outputChanged)
+-
+-    Q_PROPERTY(bool isCloneMode
+-               READ isCloneMode
+-               WRITE setIsCloneMode
+-               NOTIFY isCloneModeChanged)
+-
+-    Q_PROPERTY(int enableCount
+-               READ enableCount
+-               WRITE setEnableCount
+-               NOTIFY enableCountChanged)
+-
+-    Q_PROPERTY(QMLScreen* screen
+-               READ screen
+-               WRITE setScreen
+-               NOTIFY screenChanged)
+-
+-    Q_PROPERTY(QMLOutput* cloneOf
+-               READ cloneOf
+-               WRITE setCloneOf
+-               NOTIFY cloneOfChanged)
+-
+-    Q_PROPERTY(QMLOutput* leftDockedTo
+-               READ leftDockedTo
+-               WRITE setLeftDockedTo
+-               RESET undockLeft
+-               NOTIFY leftDockedToChanged)
+-
+-    Q_PROPERTY(QMLOutput* topDockedTo
+-               READ topDockedTo
+-               WRITE setTopDockedTo
+-               RESET undockTop
+-               NOTIFY topDockedToChanged)
+-
+-    Q_PROPERTY(QMLOutput* rightDockedTo
+-               READ rightDockedTo
+-               WRITE setRightDockedTo
+-               RESET undockRight
+-               NOTIFY rightDockedToChanged)
+-
+-    Q_PROPERTY(QMLOutput* bottomDockedTo
+-               READ bottomDockedTo
+-               WRITE setBottomDockedTo
+-               RESET undockBottom
+-               NOTIFY bottomDockedToChanged)
+-
+-    Q_PROPERTY(int currentOutputHeight
+-               READ currentOutputHeight
+-               NOTIFY currentOutputSizeChanged)
+-
+-    Q_PROPERTY(int currentOutputWidth
+-               READ currentOutputWidth
+-               NOTIFY currentOutputSizeChanged)
+-
+-    /* Workaround for possible QML bug when calling output.pos.y = VALUE works,
+-     * but output.pos.x = VALUE has no effect */
+-    Q_PROPERTY(int outputX
+-               READ outputX
+-               WRITE setOutputX
+-               NOTIFY outputXChanged)
+-
+-    Q_PROPERTY(int outputY
+-               READ outputY
+-               WRITE setOutputY
+-               NOTIFY outputYChanged)
+-
+-public:
+-    enum {        
+-        ModeRole = Qt::UserRole,
+-        ModeIdRole,
+-        SizeRole,
+-        RefreshRateRole
+-    };
+-
+-    explicit QMLOutput(QQuickItem *parent = nullptr);
+-
+-    KScreen::Output *output() const; // For QML
+-
+-    KScreen::OutputPtr outputPtr() const;
+-    void setOutputPtr(const KScreen::OutputPtr &output);
+-
+-    QMLScreen *screen() const;
+-    void setScreen(QMLScreen *screen);
+-
+-    QMLOutput *leftDockedTo() const;
+-    void setLeftDockedTo(QMLOutput *output);
+-    void undockLeft();
+-
+-    QMLOutput *topDockedTo() const;
+-    void setTopDockedTo(QMLOutput *output);
+-    void undockTop();
+-
+-    QMLOutput *rightDockedTo() const;
+-    void setRightDockedTo(QMLOutput *output);
+-    void undockRight();
+-
+-    QMLOutput *bottomDockedTo() const;
+-    void setBottomDockedTo(QMLOutput *output);
+-    void undockBottom();
+-
+-    Q_INVOKABLE bool collidesWithOutput(QObject *other);
+-    Q_INVOKABLE bool maybeSnapTo(QMLOutput *other);
+-
+-    void setCloneOf(QMLOutput *other);
+-    QMLOutput *cloneOf() const;
+-
+-    int currentOutputHeight() const;
+-    int currentOutputWidth() const;
+-
+-    int outputX() const;
+-    void setOutputX(int x);
+-
+-    int outputY() const;
+-    void setOutputY(int y);
+-
+-    void setIsCloneMode(bool isCloneMode);
+-    bool isCloneMode() const;
+-
+-    void dockToNeighbours();
+-
+-    int enableCount() const;
+-    void setEnableCount(int count = 0);
+-    void setPosClicked(QPointF pos);
+-    QPointF posClicked();
+-
+-public Q_SLOTS:
+-    void updateRootProperties();
+-
+-Q_SIGNALS:
+-    void changed();
+-
+-    void moved(const QString &self);
+-
+-    /* Property notifications */
+-    void outputChanged();
+-    void screenChanged();
+-    void cloneOfChanged();
+-    void currentOutputSizeChanged();
+-
+-    void leftDockedToChanged();
+-    void topDockedToChanged();
+-    void rightDockedToChanged();
+-    void bottomDockedToChanged();
+-
+-    void outputYChanged();
+-    void outputXChanged();
+-
+-    void isCloneModeChanged();
+-
+-    void enableCountChanged();
+-
+-private Q_SLOTS:
+-    void moved();
+-    void currentModeIdChanged();
+-
+-private:
+-    /**
+-     * Returns the biggest resolution available assuming it's the preferred one
+-     */
+-    KScreen::ModePtr bestMode() const;
+-
+-    KScreen::OutputPtr m_output;
+-    QMLScreen *m_screen;
+-
+-    QMLOutput *m_cloneOf;
+-    QMLOutput *m_leftDock;
+-    QMLOutput *m_topDock;
+-    QMLOutput *m_rightDock;
+-    QMLOutput *m_bottomDock;
+-    QPointF pos_clicked;
+-
+-    bool m_isCloneMode;
+-    int m_enableCount;
+-};
+-
+-#endif // QMLOUTPUT_H
+diff --git a/plugins/system/display_hw/declarative/qmloutputcomponent.cpp b/plugins/system/display_hw/declarative/qmloutputcomponent.cpp
+deleted file mode 100644
+index cdfe186..0000000
+--- a/plugins/system/display_hw/declarative/qmloutputcomponent.cpp
++++ /dev/null
+@@ -1,63 +0,0 @@
+-/*
+-    Copyright (C) 2012  Dan Vratil <dvratil@redhat.com>
+-
+-    This library is free software; you can redistribute it and/or
+-    modify it under the terms of the GNU Lesser General Public
+-    License as published by the Free Software Foundation; either
+-    version 2.1 of the License, or (at your option) any later version.
+-
+-    This library is distributed in the hope that it will be useful,
+-    but WITHOUT ANY WARRANTY; without even the implied warranty of
+-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+-    Lesser General Public License for more details.
+-
+-    You should have received a copy of the GNU Lesser General Public
+-    License along with this library; if not, write to the Free Software
+-    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+-*/
+-
+-#include "qmloutputcomponent.h"
+-#include "qmloutput.h"
+-#include "qmlscreen.h"
+-
+-#include <KF5/KScreen/kscreen/output.h>
+-
+-#include <QDir>
+-#include <QStandardPaths>
+-#include <QQmlEngine>
+-#include <QDebug>
+-#include <KF5/KScreen/kscreen/types.h>
+-
+-Q_DECLARE_METATYPE(KScreen::OutputPtr)
+-Q_DECLARE_METATYPE(QMLScreen*)
+-
+-QMLOutputComponent::QMLOutputComponent(QQmlEngine *engine, QMLScreen *parent):
+-    QQmlComponent(engine, parent),
+-    m_engine(engine)
+-{
+-    loadUrl(QUrl("qrc:/qml/Output.qml"));
+-}
+-
+-QMLOutputComponent::~QMLOutputComponent()
+-{
+-}
+-
+-QMLOutput* QMLOutputComponent::createForOutput(const KScreen::OutputPtr &output)
+-{
+-    QObject *instance = beginCreate(m_engine->rootContext());
+-    if (!instance) {
+-        qWarning() << errorString();
+-        return nullptr;
+-    }
+-
+-    bool success = instance->setProperty("outputPtr", QVariant::fromValue(qobject_cast<KScreen::OutputPtr>(output)));
+-
+-    Q_ASSERT(success);
+-    success = instance->setProperty("screen", QVariant::fromValue(qobject_cast<QMLScreen*>(parent())));
+-    Q_ASSERT(success);
+-    Q_UNUSED(success);
+-
+-    completeCreate();
+-
+-    return qobject_cast<QMLOutput*>(instance);
+-}
+diff --git a/plugins/system/display_hw/declarative/qmloutputcomponent.h b/plugins/system/display_hw/declarative/qmloutputcomponent.h
+deleted file mode 100644
+index cf38ab3..0000000
+--- a/plugins/system/display_hw/declarative/qmloutputcomponent.h
++++ /dev/null
+@@ -1,43 +0,0 @@
+-/*
+-    Copyright (C) 2012  Dan Vratil <dvratil@redhat.com>
+-
+-    This library is free software; you can redistribute it and/or
+-    modify it under the terms of the GNU Lesser General Public
+-    License as published by the Free Software Foundation; either
+-    version 2.1 of the License, or (at your option) any later version.
+-
+-    This library is distributed in the hope that it will be useful,
+-    but WITHOUT ANY WARRANTY; without even the implied warranty of
+-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+-    Lesser General Public License for more details.
+-
+-    You should have received a copy of the GNU Lesser General Public
+-    License along with this library; if not, write to the Free Software
+-    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+-*/
+-
+-#ifndef QMLOUTPUTCOMPONENT_H
+-#define QMLOUTPUTCOMPONENT_H
+-
+-#include <QQmlComponent>
+-
+-#include <KF5/KScreen/kscreen/output.h>
+-
+-class QMLScreen;
+-class QMLOutput;
+-
+-class QMLOutputComponent : public QQmlComponent
+-{
+-    Q_OBJECT
+-
+-public:
+-    explicit QMLOutputComponent(QQmlEngine *engine, QMLScreen *parent);
+-    ~QMLOutputComponent() override;
+-
+-    QMLOutput *createForOutput(const KScreen::OutputPtr &output);
+-
+-private:
+-    QQmlEngine *m_engine;
+-};
+-
+-#endif // QMLOUTPUTCOMPONENT_H
+diff --git a/plugins/system/display_hw/declarative/qmlscreen.cpp b/plugins/system/display_hw/declarative/qmlscreen.cpp
+deleted file mode 100644
+index ae469d9..0000000
+--- a/plugins/system/display_hw/declarative/qmlscreen.cpp
++++ /dev/null
+@@ -1,708 +0,0 @@
+-/*
+-    Copyright (C) 2012  Dan Vratil <dvratil@redhat.com>
+-
+-    This library is free software; you can redistribute it and/or
+-    modify it under the terms of the GNU Lesser General Public
+-    License as published by the Free Software Foundation; either
+-    version 2.1 of the License, or (at your option) any later version.
+-
+-    This library is distributed in the hope that it will be useful,
+-    but WITHOUT ANY WARRANTY; without even the implied warranty of
+-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+-    Lesser General Public License for more details.
+-
+-    You should have received a copy of the GNU Lesser General Public
+-    License along with this library; if not, write to the Free Software
+-    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+-*/
+-
+-#include "qmlscreen.h"
+-#include "qmloutputcomponent.h"
+-#include "qmloutput.h"
+-
+-#include "screenConfig.h"
+-
+-#include <KF5/KScreen/kscreen/output.h>
+-#include <KF5/KScreen/kscreen/config.h>
+-
+-#include <QDBusMessage>
+-#include <QDBusArgument>
+-#include <QDBusInterface>
+-
+-#include <QTimer>
+-#include <sys/socket.h>
+-
+-Q_DECLARE_METATYPE(KScreen::OutputPtr)
+-
+-static bool sizeLessThan(ScreenConfig posxA, ScreenConfig posxB)
+-{
+-    return posxA.screenPosX > posxB.screenPosY;
+-}
+-
+-static bool sizeLessThanQml(QPointF posxA, QPointF posxB)
+-{
+-    return posxA.x() > posxB.x();
+-}
+-
+-QMLScreen::QMLScreen(QQuickItem *parent) :
+-    QQuickItem(parent)
+-{
+-    connect(this, &QMLScreen::widthChanged, this, &QMLScreen::viewSizeChanged);
+-    connect(this, &QMLScreen::heightChanged, this, &QMLScreen::viewSizeChanged);
+-}
+-
+-QMLScreen::~QMLScreen()
+-{
+-    qDeleteAll(m_outputMap);
+-    m_outputMap.clear();
+-}
+-
+-KScreen::ConfigPtr QMLScreen::config() const
+-{
+-    return m_config;
+-}
+-
+-void QMLScreen::setConfig(const KScreen::ConfigPtr &config)
+-{
+-    qDeleteAll(m_outputMap);
+-    m_outputMap.clear();
+-    m_manuallyMovedOutputs.clear();
+-    m_bottommost = m_leftmost = m_rightmost = m_topmost = nullptr;
+-    m_connectedOutputsCount = 0;
+-    m_enabledOutputsCount = 0;
+-
+-    if (m_config) {
+-        m_config->disconnect(this);
+-    }
+-
+-    m_config = config;
+-    connect(m_config.data(), &KScreen::Config::outputAdded,
+-            this, [this](const KScreen::OutputPtr &output) {
+-            addOutput(output);
+-            m_manuallyMovedOutputs.clear();
+-            updateOutputsPlacement();
+-            enableChangedSlot();
+-    });
+-    connect(m_config.data(), &KScreen::Config::outputRemoved,
+-            this, &QMLScreen::removeOutput);
+-
+-    for (const KScreen::OutputPtr &output : m_config->outputs()) {
+-        addOutput(output);
+-    }
+-
+-    updateOutputsPlacement();
+-
+-    for (QMLOutput *qmlOutput : m_outputMap) {
+-        if (qmlOutput->output()->isConnected() && qmlOutput->output()->isEnabled()) {
+-            qmlOutput->dockToNeighbours();
+-        }
+-    }
+-}
+-
+-void QMLScreen::addOutput(const KScreen::OutputPtr &output)
+-{
+-    QMLOutputComponent comp(qmlEngine(this), this);
+-
+-    QMLOutput *qmloutput = comp.createForOutput(output);
+-    if (!qmloutput) {
+-        qWarning() << "Failed to create QMLOutput";
+-        return;
+-    }
+-
+-    m_outputMap.insert(output, qmloutput);
+-
+-    qmloutput->setParentItem(this);
+-    qmloutput->setZ(m_outputMap.count());
+-
+-    connect(output.data(), &KScreen::Output::isConnectedChanged,
+-            this, &QMLScreen::outputConnectedChanged);
+-    connect(output.data(), &KScreen::Output::isEnabledChanged,
+-            this, &QMLScreen::outputEnabledChanged);
+-    connect(output.data(), &KScreen::Output::posChanged,
+-            this, &QMLScreen::outputPositionChanged);
+-    connect(qmloutput, &QMLOutput::yChanged,
+-            [this, qmloutput]() {
+-        qmlOutputMoved(qmloutput);
+-    });
+-    connect(qmloutput, &QMLOutput::xChanged,
+-            [this, qmloutput]() {
+-        qmlOutputMoved(qmloutput);
+-    });
+-    // 在这里点击上面小屏幕
+-    connect(qmloutput, SIGNAL(clicked()),
+-            this, SLOT(setActiveOutput()));
+-
+-    connect(qmloutput, SIGNAL(mouseReleased(bool)),
+-            this, SLOT(setScreenPos(bool)));
+-
+-    connect(qmloutput, SIGNAL(rotationChanged(bool)),
+-            this, SLOT(setScreenPos(bool)));
+-
+-    connect(qmloutput, SIGNAL(widthChanged(bool)),
+-            this, SLOT(setScreenPos(bool)));
+-
+-    connect(qmloutput, SIGNAL(heightChanged(bool)),
+-            this, SLOT(setScreenPos(bool)));
+-
+-    // bug#65441
+-    // qmloutput->updateRootProperties();
+-}
+-
+-void QMLScreen::removeOutput(int outputId)
+-{
+-    for (const KScreen::OutputPtr &output : m_outputMap.keys()) {
+-        if (output->id() == outputId) {
+-            QMLOutput *qmlOutput = m_outputMap.take(output);
+-            qmlOutput->setParentItem(nullptr);
+-            qmlOutput->setParent(nullptr);
+-            // TODO:bug51346
+-            // qmlOutput->deleteLater();
+-            return;
+-        }
+-    }
+-    enableChangedSlot();
+-}
+-
+-int QMLScreen::connectedOutputsCount() const
+-{
+-    return m_connectedOutputsCount;
+-}
+-
+-int QMLScreen::enabledOutputsCount() const
+-{
+-    return m_enabledOutputsCount;
+-}
+-
+-QMLOutput *QMLScreen::primaryOutput() const
+-{
+-    Q_FOREACH (QMLOutput *qmlOutput, m_outputMap) {
+-        if (qmlOutput->output()->isPrimary()) {
+-            return qmlOutput;
+-        }
+-    }
+-
+-    return nullptr;
+-}
+-
+-QList<QMLOutput *> QMLScreen::outputs() const
+-{
+-    return m_outputMap.values();
+-}
+-
+-void QMLScreen::setActiveOutput(QMLOutput *output)
+-{
+-    output->setPosClicked(output->position());
+-    Q_FOREACH (QMLOutput *qmlOutput, m_outputMap) {
+-        if (qmlOutput->z() > output->z()) {
+-            qmlOutput->setZ(qmlOutput->z() - 1);
+-        }
+-    }
+-
+-    output->setZ(m_outputMap.count());
+-    // 中屏幕
+-    output->setFocus(true);
+-    Q_EMIT focusedOutputChanged(output);
+-}
+-
+-void QMLScreen::setScreenCenterPos()
+-{
+-    // 组成最大矩形四个边的位置,分别对应左上(1),右下(2)的xy坐标值
+-    qreal localX1 = -1, localX2 = -1, localY1 = -1, localY2 = -1;
+-    qreal mX1 = 0, mY1 = 0, mX2 = 0, mY2 = 0; // 矩形中点坐标
+-    qreal moveX = 0, moveY = 0;// 移动的值
+-    bool firstFlag = true;
+-    bool unifyFlag = false;
+-    Q_FOREACH (QMLOutput *qmlOutput, m_outputMap) {
+-        if (qmlOutput->output()->isConnected()) {
+-            if (qmlOutput->isCloneMode()) {
+-                localX1 = qmlOutput->x();
+-                localX2 = qmlOutput->x() + qmlOutput->width();
+-                localY1 = qmlOutput->y();
+-                localY2 = qmlOutput->y() + qmlOutput->height();
+-                unifyFlag = true;
+-                break;
+-            }
+-
+-            if (firstFlag == true || localX1 > qmlOutput->x()) {
+-                localX1 = qmlOutput->x();
+-            }
+-            if (firstFlag == true || localX2 < qmlOutput->x() + qmlOutput->width()) {
+-                localX2 = qmlOutput->x() + qmlOutput->width();
+-            }
+-            if (firstFlag == true || localY1 > qmlOutput->y()) {
+-                localY1 = qmlOutput->y();
+-            }
+-            if (firstFlag == true || localY2 < qmlOutput->y() + qmlOutput->height()) {
+-                localY2 = qmlOutput->y() + qmlOutput->height();
+-            }
+-            firstFlag = false;
+-        }
+-    }
+-
+-    mX1 = localX1 + (localX2-localX1)/2;
+-    mY1 = localY1 + (localY2-localY1)/2;
+-
+-    mX2 = (width() - (localX2 - localX1))/2 + (localX2-localX1)/2;
+-    mY2 = (height() - (localY2 - localY1))/2 + (localY2-localY1)/2;
+-
+-    moveX = mX2 - mX1;
+-    moveY = mY2 - mY1;
+-
+-    Q_FOREACH (QMLOutput *qmlOutput, m_outputMap) {
+-        if (false == unifyFlag) {
+-            qmlOutput->setX(qmlOutput->x() + moveX);
+-            qmlOutput->setY(qmlOutput->y() + moveY);
+-        } else {
+-            if (qmlOutput->isCloneMode()) {
+-                qmlOutput->blockSignals(true);
+-                qmlOutput->setX(qmlOutput->x() + moveX);
+-                qmlOutput->setY(qmlOutput->y() + moveY);
+-                qmlOutput->blockSignals(false);
+-                break;
+-            }
+-        }
+-    }
+-}
+-
+-void QMLScreen::setScreenPosCenter(QMLOutput *output, bool isReleased)
+-{
+-    if (output == nullptr) {
+-        return;
+-    }
+-    QPointF posBefore = output->posClicked();
+-    if ((output->outputPtr()->rotation() == KScreen::Output::Left || output->outputPtr()->rotation() == KScreen::Output::Right)
+-            && (output->width() > output->height())) {
+-        qreal fwidth = output->size().width();
+-        qreal fheight = output->size().height();
+-        output->setSize(QSizeF(fheight, fwidth));
+-    }
+-    // 镜像模式下跳过屏幕旋转处理
+-    if (this->primaryOutput() && isCloneMode()) {
+-        return;
+-    }
+-
+-    qreal x1 = 0, y1 = 0;
+-    qreal width1 = 0, height1 = 0;
+-    qreal x2 = 0, y2 = 0;
+-    qreal width2 = 0, height2 = 0;
+-
+-    x1 = output->x();
+-    y1 = output->y();
+-    width1 = output->width();
+-    height1 = output->height();
+-
+-    int connectedScreen = 0;
+-
+-    QMLOutput *other = NULL;
+-    Q_FOREACH (QMLOutput *qmlOutput, m_outputMap) {
+-        if (qmlOutput->output()->isConnected()) {
+-            connectedScreen++;
+-        }
+-        if (qmlOutput != output && qmlOutput->output()->isConnected()) {
+-            other = qmlOutput;
+-            x2 = other->x();
+-            y2 = other->y();
+-            if ((other->outputPtr()->rotation() == KScreen::Output::Left || other->outputPtr()->rotation() == KScreen::Output::Right) &&
+-                    (other->width() >  other->height())) {
+-                qreal swidth = qmlOutput->width();
+-                qreal sheigth = qmlOutput->height();
+-                qmlOutput->setSize(QSizeF(sheigth, swidth));
+-            }
+-            width2 = other->width();
+-            height2 = other->height();
+-        }
+-    }
+-
+-    // 坐标为负的情况,bug#76350
+-    if (x1 < 0 || y1 < 0 || x2 < 0 || y2 < 0) {
+-        return;
+-    }
+-
+-    if (connectedScreen < 2) {
+-        setScreenCenterPos();
+-        return;
+-    }
+-
+-    if (!((x1 + width1 == x2)
+-          || (y1 == y2 + height2)
+-          || (x1 == x2 + width2)
+-          || (y1 + height1 == y2))) {
+-        if (x1 + width1 < x2) {
+-            output->setX(x2 - width1);
+-            output->setY(y2);
+-        } else if (y1 > y2 + height2) {
+-            output->setX(x2);
+-            output->setY(y2 + height2);
+-        } else if (x1 > x2 + width2) {
+-            output->setX(x2 + width2);
+-            output->setY(y2);
+-        } else if (y1 + height1 < y2) {
+-            output->setX(x2);
+-            output->setY(y2 - height1);
+-        }
+-
+-
+-
+-        // 矩形是否相交
+-        if (!(x1 + width1 <= x2 || x2 + width2 <= x1
+-              || y1 >= y2 +height2 || y2 >= y1 + height1)
+-            && (x1 != x2 || y1 != y2) && other != NULL
+-            && other->output()->isConnected()) {
+-            if ((x1 + width1 > x2) && (x1 < x2)) {
+-                output->setX(x2 - width1);
+-            } else if ((x1 < x2 + width2) && (x1 + width1 > x2 + width2)) {
+-                output->setX(x2 + width2);
+-            } else if ((y1 + height() > y2) && (y1 < y2 + height2)) {
+-                output->setY(y2 - height1);
+-            } else if ((y1 < y2  + height2) && (y1 + height1 > y2 + height2)) {
+-                output->setY(y2 + height2);
+-            }
+-        }
+-    }
+-
+-    setScreenCenterPos();
+-    QPointF posAfter = output->position();
+-    if (isReleased && (posBefore != posAfter)) {
+-        Q_EMIT released();
+-    }
+-}
+-
+-void QMLScreen::setActiveOutputByCombox(int screenId)
+-{
+-    QHash<KScreen::OutputPtr, QMLOutput *>::const_iterator it = m_outputMap.constBegin();
+-    while (it != m_outputMap.constEnd()) {
+-        if (screenId == it.key()->id()) {
+-            setActiveOutput(it.value());
+-            return;
+-        }
+-        it++;
+-    }
+-}
+-
+-void QMLScreen::enableChangedSlot()
+-{
+-    int count = 0;
+-    for (KScreen::OutputPtr output : m_config->connectedOutputs()) {
+-        if (output->isEnabled()) {
+-            count++;
+-        }
+-    }
+-
+-    Q_FOREACH (QQuickItem *item, childItems()) {
+-        QMLOutput *qmlOutput = qobject_cast<QMLOutput *>(item);
+-        qmlOutput->setEnableCount(count);
+-    }
+-}
+-
+-QSize QMLScreen::maxScreenSize() const
+-{
+-    return m_config->screen()->maxSize();
+-}
+-
+-float QMLScreen::outputScale() const
+-{
+-    return m_outputScale;
+-}
+-
+-void QMLScreen::outputConnectedChanged()
+-{
+-    int connectedCount = 0;
+-
+-    Q_FOREACH (const KScreen::OutputPtr &output, m_outputMap.keys()) {
+-        if (output->isConnected()) {
+-            ++connectedCount;
+-        }
+-    }
+-
+-    if (connectedCount != m_connectedOutputsCount) {
+-        m_connectedOutputsCount = connectedCount;
+-        Q_EMIT connectedOutputsCountChanged();
+-        updateOutputsPlacement();
+-    }
+-}
+-
+-void QMLScreen::outputEnabledChanged()
+-{
+-    const KScreen::OutputPtr output(qobject_cast<KScreen::Output *>(sender()), [](void *){});
+-
+-    int enabledCount = 0;
+-
+-    Q_FOREACH (const KScreen::OutputPtr &output, m_outputMap.keys()) {
+-        if (output->isEnabled()) {
+-            ++enabledCount;
+-        }
+-    }
+-
+-    if (enabledCount == m_enabledOutputsCount) {
+-        m_enabledOutputsCount = enabledCount;
+-        Q_EMIT enabledOutputsCountChanged();
+-    }
+-}
+-
+-void QMLScreen::outputPositionChanged()
+-{
+-    /* TODO: Reposition the QMLOutputs */
+-}
+-
+-void QMLScreen::qmlOutputMoved(QMLOutput *qmlOutput)
+-{
+-    if (qmlOutput->isCloneMode()) {
+-        return;
+-    }
+-
+-    if (!m_manuallyMovedOutputs.contains(qmlOutput))
+-        m_manuallyMovedOutputs.append(qmlOutput);
+-
+-    updateCornerOutputs();
+-
+-    if (m_leftmost) {
+-        m_leftmost->setOutputX(0);
+-    }
+-    if (m_topmost) {
+-        m_topmost->setOutputY(0);
+-    }
+-
+-    if (qmlOutput == m_leftmost) {
+-        Q_FOREACH (QMLOutput *other, m_outputMap) {
+-            if (other == m_leftmost) {
+-                continue;
+-            }
+-
+-            if (!other->output()->isConnected() || !other->output()->isEnabled()) {
+-                continue;
+-            }
+-
+-            other->setOutputX(float(other->x() - m_leftmost->x()) / outputScale());
+-        }
+-    } else if (m_leftmost) {
+-        qmlOutput->setOutputX(float(qmlOutput->x() - m_leftmost->x()) / outputScale());
+-    }
+-
+-    if (qmlOutput == m_topmost) {
+-        Q_FOREACH (QMLOutput *other, m_outputMap) {
+-            if (other == m_topmost) {
+-                continue;
+-            }
+-
+-            if (!other->output()->isConnected() || !other->output()->isEnabled()) {
+-                continue;
+-            }
+-
+-            other->setOutputY(float(other->y() - m_topmost->y()) / outputScale());
+-        }
+-    } else if (m_topmost) {
+-        qmlOutput->setOutputY(float(qmlOutput->y() - m_topmost->y()) / outputScale());
+-    }
+-}
+-
+-void QMLScreen::viewSizeChanged()
+-{
+-    updateOutputsPlacement();
+-    setScreenCenterPos();
+-}
+-
+-void QMLScreen::updateCornerOutputs()
+-{
+-    m_leftmost = nullptr;
+-    m_topmost = nullptr;
+-    m_rightmost = nullptr;
+-    m_bottommost = nullptr;
+-
+-    Q_FOREACH (QMLOutput *output, m_outputMap) {
+-        if (!output->output()->isConnected() || !output->output()->isEnabled()) {
+-            continue;
+-        }
+-
+-        QMLOutput *other = m_leftmost;
+-        if (!other || output->x() < other->x()) {
+-            m_leftmost = output;
+-        }
+-
+-        if (!other || output->y() < other->y()) {
+-            m_topmost = output;
+-        }
+-
+-        if (!other || output->x() + output->width() > other->x() + other->width()) {
+-            m_rightmost = output;
+-        }
+-
+-        if (!other || output->y() + output->height() > other->y() + other->height()) {
+-            m_bottommost = output;
+-        }
+-    }
+-}
+-
+-void QMLScreen::setOutputScale(float scale)
+-{
+-    if (qFuzzyCompare(scale, m_outputScale))
+-        return;
+-    m_outputScale = scale;
+-    emit outputScaleChanged();
+-}
+-
+-bool QMLScreen::isCloneMode()
+-{
+-    KScreen::OutputPtr output = m_config->primaryOutput();
+-    if (m_config->connectedOutputs().count() >= 2) {
+-        foreach (KScreen::OutputPtr secOutput, m_config->connectedOutputs()) {
+-            if (secOutput->geometry() != output->geometry() || !secOutput->isEnabled()) {
+-                return false;
+-            }
+-        }
+-    } else {
+-        return false;
+-    }
+-    return true;
+-}
+-
+-// 画坐标
+-void QMLScreen::updateOutputsPlacement()
+-{
+-    if (width() <= 0)
+-        return;
+-
+-    QSizeF initialActiveScreenSize;
+-
+-    Q_FOREACH (QQuickItem *item, childItems()) {
+-        QMLOutput *qmlOutput = qobject_cast<QMLOutput *>(item);
+-        if (!qmlOutput->output()->isConnected() || !qmlOutput->output()->isEnabled()) {
+-            continue;
+-        }
+-
+-        if (qmlOutput->outputX() + qmlOutput->currentOutputWidth()
+-            > initialActiveScreenSize.width()) {
+-            initialActiveScreenSize.setWidth(qmlOutput->outputX()
+-                                             + qmlOutput->currentOutputWidth());
+-        }
+-        if (qmlOutput->outputY() + qmlOutput->currentOutputHeight()
+-            > initialActiveScreenSize.height()) {
+-            initialActiveScreenSize.setHeight(
+-                qmlOutput->outputY() + qmlOutput->currentOutputHeight());
+-        }
+-    }
+-
+-    auto initialScale = outputScale();
+-
+-    auto scale = initialScale;
+-    qreal lastX = -1.0;
+-    int enableCount;
+-    do {
+-        auto activeScreenSize = initialActiveScreenSize * scale;
+-
+-        const QPointF offset((width() - activeScreenSize.width()) / 2.0,
+-                             (height() - activeScreenSize.height()) / 2.0);
+-
+-        lastX = -1.0;
+-        qreal lastY = -1.0;
+-        enableCount = 0;
+-        Q_FOREACH (QQuickItem *item, childItems()) {
+-            QMLOutput *qmlOutput = qobject_cast<QMLOutput *>(item);
+-            if (m_config->connectedOutputs().count() >= 2 && qmlOutput->outputPtr()->isEnabled()) {
+-                enableCount++;
+-            }
+-            // 连接
+-            if ((!qmlOutput->output()->isConnected() || !qmlOutput->output()->isEnabled()
+-                    || m_manuallyMovedOutputs.contains(qmlOutput)) && !qmlOutput->isCloneMode()) {
+-                continue;
+-            }
+-
+-            qmlOutput->blockSignals(true);
+-            qmlOutput->setPosition(QPointF(offset.x() + (qmlOutput->outputX() * scale),
+-                                           offset.y() + (qmlOutput->outputY() * scale)));
+-            lastX = qMax(lastX,
+-                         qmlOutput->position().x() + qmlOutput->width() / initialScale * scale);
+-            lastY = qMax(lastY, qmlOutput->position().y());
+-            qmlOutput->blockSignals(false);
+-        }
+-
+-        Q_FOREACH (QQuickItem *item, childItems()) {
+-            QMLOutput *qmlOutput = qobject_cast<QMLOutput *>(item);
+-            if (qmlOutput->output()->isConnected() && !qmlOutput->output()->isEnabled()
+-                && !m_manuallyMovedOutputs.contains(qmlOutput)) {
+-                qmlOutput->blockSignals(true);
+-                qmlOutput->setPosition(QPointF(lastX, lastY));
+-                lastX += qmlOutput->width() / initialScale * scale;
+-                qmlOutput->blockSignals(false);
+-            }
+-        }
+-        // calculate the scale dynamically, so all screens fit to the dialog
+-        if (lastX > width()) {
+-            scale *= 0.8;
+-        }
+-    } while (lastX > width());
+-
+-    if (enableCount == 1) {
+-        setPosByConfig();
+-    }
+-
+-    // Use a timer to avoid binding loop on width()
+-    QTimer::singleShot(0, this, [scale, this] {
+-        setOutputScale(scale);
+-    });
+-}
+-
+-void QMLScreen::setPosByConfig()
+-{
+-    if (!m_config.isNull()) {
+-
+-        QDBusInterface mUkccInterface("org.ukui.ukcc.session",
+-                                       "/",
+-                                       "org.ukui.ukcc.session.interface",
+-                                       QDBusConnection::sessionBus());
+-
+-        QDBusMessage msg = mUkccInterface.call("getPreScreenCfg");
+-        if (msg.type() == QDBusMessage::ErrorMessage) {
+-            qWarning() << "get pre screen cfg failed";
+-        }
+-        QDBusArgument argument = msg.arguments().at(0).value<QDBusArgument>();
+-        QList<QVariant> infos;
+-        argument >> infos;
+-
+-        QList<QPointF> qmlScreens;
+-        QList<ScreenConfig> preScreenCfg;
+-
+-
+-        QList<QPoint> points;
+-        for (int i = 0; i < infos.size(); i++) {
+-            ScreenConfig cfg;
+-            infos.at(i).value<QDBusArgument>() >> cfg;
+-            preScreenCfg.append(cfg);
+-            // 坐标相同不做处理
+-            if (points.contains(QPoint(cfg.screenPosX, cfg.screenPosY))) {
+-                return;
+-            }
+-            points.append(QPoint(cfg.screenPosX, cfg.screenPosY));
+-        }
+-
+-        // 配置文件为空跳过处理
+-        if (preScreenCfg.isEmpty()) {
+-            return;
+-        }
+-
+-        std::sort(preScreenCfg.begin(), preScreenCfg.end(), sizeLessThan);
+-
+-        Q_FOREACH (QQuickItem *item, childItems()) {
+-            QMLOutput *qmlOutput = qobject_cast<QMLOutput *>(item);
+-            qmlScreens.append(qmlOutput->position());
+-        }
+-        std::sort(qmlScreens.begin(), qmlScreens.end(), sizeLessThanQml);
+-
+-        QMLOutput *adjustOutput;
+-        for (int i = 0; i < preScreenCfg.count(); i++) {
+-            for (int j = 0; j < childItems().count(); j++) {
+-                QMLOutput *qmlOutput = qobject_cast<QMLOutput *>(childItems().at(j));
+-                if (qmlOutput != nullptr) {
+-                    adjustOutput = qmlOutput;
+-                }
+-
+-                if (!qmlOutput->outputPtr()->name().compare(preScreenCfg.at(i).screenId)) {
+-                    qmlOutput->blockSignals(true);
+-                    qmlOutput->setPosition(qmlScreens.at(i));
+-                    qmlOutput->blockSignals(false);
+-                }
+-            }
+-        }
+-
+-        setScreenPosCenter(adjustOutput, false);
+-    }
+-}
+diff --git a/plugins/system/display_hw/declarative/qmlscreen.h b/plugins/system/display_hw/declarative/qmlscreen.h
+deleted file mode 100644
+index 66f4b7a..0000000
+--- a/plugins/system/display_hw/declarative/qmlscreen.h
++++ /dev/null
+@@ -1,133 +0,0 @@
+-/*
+-    Copyright (C) 2012  Dan Vratil <dvratil@redhat.com>
+-
+-    This library is free software; you can redistribute it and/or
+-    modify it under the terms of the GNU Lesser General Public
+-    License as published by the Free Software Foundation; either
+-    version 2.1 of the License, or (at your option) any later version.
+-
+-    This library is distributed in the hope that it will be useful,
+-    but WITHOUT ANY WARRANTY; without even the implied warranty of
+-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+-    Lesser General Public License for more details.
+-
+-    You should have received a copy of the GNU Lesser General Public
+-    License along with this library; if not, write to the Free Software
+-    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+-*/
+-
+-#ifndef QMLSCREEN_H
+-#define QMLSCREEN_H
+-
+-#include <QQuickItem>
+-
+-#include <KF5/KScreen/kscreen/output.h>
+-#include "qmloutput.h"
+-
+-class QQmlEngine;
+-
+-namespace KScreen {
+-class Output;
+-class Config;
+-}
+-
+-class QMLScreen : public QQuickItem
+-{
+-    Q_OBJECT
+-
+-    Q_PROPERTY(QSize maxScreenSize
+-               READ maxScreenSize
+-               CONSTANT)
+-
+-    Q_PROPERTY(int connectedOutputsCount
+-               READ connectedOutputsCount
+-               NOTIFY connectedOutputsCountChanged)
+-
+-    Q_PROPERTY(int enabledOutputsCount
+-               READ enabledOutputsCount
+-               NOTIFY enabledOutputsCountChanged)
+-
+-    Q_PROPERTY(float outputScale
+-               READ outputScale
+-               NOTIFY outputScaleChanged)
+-
+-public:
+-    explicit QMLScreen(QQuickItem *parent = nullptr);
+-    ~QMLScreen() override;
+-
+-    int connectedOutputsCount() const;
+-    int enabledOutputsCount() const;
+-
+-    QMLOutput *primaryOutput() const;
+-    QList<QMLOutput*> outputs() const;
+-
+-    QSize maxScreenSize() const;
+-
+-    float outputScale() const;
+-
+-    KScreen::ConfigPtr config() const;
+-    void setConfig(const KScreen::ConfigPtr &config);
+-
+-    void updateOutputsPlacement();
+-    void setPosByConfig();
+-
+-    void setActiveOutput(QMLOutput *output);
+-
+-    void setScreenPosCenter(QMLOutput *output, bool isReleased);
+-
+-    void setScreenCenterPos();
+-public Q_SLOTS:
+-    void setActiveOutput()
+-    {
+-        setActiveOutput(qobject_cast<QMLOutput *>(sender()));
+-    }
+-
+-    void setActiveOutputByCombox(int screenId);
+-    void setScreenPos(bool isReleased)
+-    {
+-        setScreenPosCenter(qobject_cast<QMLOutput*>(sender()), isReleased);
+-    }
+-
+-    // 是否禁用小屏幕拖动
+-    void enableChangedSlot();
+-
+-Q_SIGNALS:
+-    void connectedOutputsCountChanged();
+-    void enabledOutputsCountChanged();
+-
+-    void outputScaleChanged();
+-
+-    void focusedOutputChanged(QMLOutput *output);
+-    void released();
+-
+-private Q_SLOTS:
+-    void addOutput(const KScreen::OutputPtr &output);
+-    void removeOutput(int outputId);
+-
+-    void outputConnectedChanged();
+-    void outputEnabledChanged();
+-    void outputPositionChanged();
+-
+-    void viewSizeChanged();
+-
+-private:
+-    void qmlOutputMoved(QMLOutput *qmlOutput);
+-    void updateCornerOutputs();
+-    void setOutputScale(float scale);
+-    bool isCloneMode();
+-
+-    KScreen::ConfigPtr m_config;
+-    QHash<KScreen::OutputPtr, QMLOutput *> m_outputMap;
+-    QVector<QMLOutput*> m_manuallyMovedOutputs;
+-    int m_connectedOutputsCount = 0;
+-    int m_enabledOutputsCount = 0;
+-
+-    float m_outputScale = 1.0 / 14.0;// 缩放比例
+-
+-    QMLOutput *m_leftmost = nullptr;
+-    QMLOutput *m_topmost = nullptr;
+-    QMLOutput *m_rightmost = nullptr;
+-    QMLOutput *m_bottommost = nullptr;
+-};
+-
+-#endif // QMLSCREEN_H
+diff --git a/plugins/system/display_hw/display_hw.cpp b/plugins/system/display_hw/display_hw.cpp
+deleted file mode 100644
+index e11f9c0..0000000
+--- a/plugins/system/display_hw/display_hw.cpp
++++ /dev/null
+@@ -1,105 +0,0 @@
+-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
+- *
+- * Copyright (C) 2019 Tianjin KYLIN Information Technology Co., Ltd.
+- *
+- * This program is free software; you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License as published by
+- * the Free Software Foundation; either version 2 of the License, or
+- * (at your option) any later version.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program; if not, write to the Free Software
+- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+- *
+- */
+-#include <QtWidgets>
+-
+-#include "display_hw.h"
+-#include "ui_display_hw.h"
+-#include "ukcccommon.h"
+-using namespace ukcc;
+-
+-#include <KF5/KScreen/kscreen/getconfigoperation.h>
+-#include <KF5/KScreen/kscreen/output.h>
+-#include <QDebug>
+-#include <QDBusInterface>
+-#include <QDBusConnection>
+-
+-DisplaySet::DisplaySet() : mFirstLoad(true)
+-{
+-    pluginName = tr("Display");
+-    pluginType = SYSTEM;
+-}
+-
+-DisplaySet::~DisplaySet()
+-{
+-}
+-
+-QString DisplaySet::plugini18nName()
+-{
+-    return pluginName;
+-}
+-
+-int DisplaySet::pluginTypes()
+-{
+-    return pluginType;
+-}
+-
+-QWidget *DisplaySet::pluginUi()
+-{
+-    if (mFirstLoad) {
+-        requestBackend();
+-        mFirstLoad = false;
+-        pluginWidget = new Widget;
+-        pluginWidget->adjustSize();
+-        QObject::connect(new KScreen::GetConfigOperation(), &KScreen::GetConfigOperation::finished,
+-                         [&](KScreen::ConfigOperation *op) {
+-            pluginWidget->setConfig(qobject_cast<KScreen::GetConfigOperation *>(op)->config(), true);
+-        });
+-    }
+-    return pluginWidget;
+-}
+-
+-const QString DisplaySet::name() const
+-{
+-    return QStringLiteral("Display");
+-}
+-
+-bool DisplaySet::isShowOnHomePage() const
+-{
+-    return UkccCommon::isWayland();
+-}
+-
+-QIcon DisplaySet::icon() const
+-{
+-    return QIcon::fromTheme("system-computer-symbolic");
+-}
+-
+-bool DisplaySet::isEnable() const
+-{
+-    return UkccCommon::isWayland();
+-}
+-
+-void DisplaySet::requestBackend()
+-{
+-    QDBusInterface screenIft("org.kde.KScreen",
+-                             "/",
+-                             "org.kde.KScreen",
+-                             QDBusConnection::sessionBus());
+-    if (!screenIft.isValid()) {
+-        QProcess process;
+-        process.start("uname -m");
+-        process.waitForFinished();
+-        QString output = process.readAll();
+-        output = output.simplified();
+-
+-        QString command = "/usr/lib/" + output + "-linux-gnu"
+-                          +"/libexec/kf5/kscreen_backend_launcher";
+-        QProcess::startDetached(command);
+-    }
+-}
+diff --git a/plugins/system/display_hw/display_hw.h b/plugins/system/display_hw/display_hw.h
+deleted file mode 100644
+index 6ca40d4..0000000
+--- a/plugins/system/display_hw/display_hw.h
++++ /dev/null
+@@ -1,64 +0,0 @@
+-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
+- *
+- * Copyright (C) 2019 Tianjin KYLIN Information Technology Co., Ltd.
+- *
+- * This program is free software; you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License as published by
+- * the Free Software Foundation; either version 2 of the License, or
+- * (at your option) any later version.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program; if not, write to the Free Software
+- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+- *
+- */
+-#ifndef DISPLAYSET_H
+-#define DISPLAYSET_H
+-
+-#include <QObject>
+-#include <QtPlugin>
+-
+-#include <QGSettings>
+-
+-#include "shell/interface.h"
+-#include "widget.h"
+-
+-namespace Ui {
+-class DisplayWindow;
+-}
+-
+-class DisplaySet : public QObject, CommonInterface
+-{
+-    Q_OBJECT
+-    Q_PLUGIN_METADATA(IID "org.kycc.CommonInterface")
+-    Q_INTERFACES(CommonInterface)
+-
+-public:
+-    DisplaySet();
+-    ~DisplaySet();
+-
+-    QString plugini18nName()      Q_DECL_OVERRIDE;
+-    int pluginTypes()             Q_DECL_OVERRIDE;
+-    QWidget *pluginUi()           Q_DECL_OVERRIDE;
+-    const QString name() const    Q_DECL_OVERRIDE;
+-    bool isShowOnHomePage() const Q_DECL_OVERRIDE;
+-    QIcon icon() const            Q_DECL_OVERRIDE;
+-    bool isEnable() const         Q_DECL_OVERRIDE;
+-
+-private:
+-    void requestBackend();
+-private:
+-    Ui::DisplayWindow *ui;
+-    QString pluginName;
+-    int pluginType;
+-    Widget *pluginWidget;
+-
+-    bool mFirstLoad;
+-};
+-
+-#endif // DISPLAYSET_H
+diff --git a/plugins/system/display_hw/display_hw.pro b/plugins/system/display_hw/display_hw.pro
+deleted file mode 100644
+index b1f341d..0000000
+--- a/plugins/system/display_hw/display_hw.pro
++++ /dev/null
+@@ -1,70 +0,0 @@
+-#-------------------------------------------------
+-#
+-# Project created by QtCreator 2019-02-20T15:36:43
+-#
+-#-------------------------------------------------
+-include(../../../env.pri)
+-include($$PROJECT_ROOTDIR/libukcc/interface.pri)
+-include($$PROJECT_ROOTDIR/libukcc/widgets/Uslider/uslider.pri)
+-include($$PROJECT_ROOTDIR/libukcc/widgets/CloseButton/closebutton.pri)
+-include($$PROJECT_ROOTDIR/libukcc/widgets/ComboBox/combobox.pri)
+-
+-QT            += widgets core gui quickwidgets quick xml KScreen  dbus concurrent KConfigCore
+-TEMPLATE = lib
+-CONFIG        += c++11   link_pkgconfig plugin
+-
+-TARGET = $$qtLibraryTarget(display_hw)
+-DESTDIR = ../..
+-target.path = $${PLUGIN_INSTALL_DIRS}
+-INSTALLS += target
+-
+-INCLUDEPATH   +=  \
+-                 $$PROJECT_ROOTDIR \
+-
+-LIBS          += -L$$[QT_INSTALL_LIBS] -lgsettings-qt
+-
+-PKGCONFIG += gsettings-qt     \
+-             kysdk-qtwidgets
+-
+-QMAKE_CXXFLAGS *= -D_FORTIFY_SOURCE=2 -O2
+-
+-SOURCES += \
+-    brightnessFrame.cpp \
+-    declarative/qmloutput.cpp \
+-    declarative/qmloutputcomponent.cpp \
+-    declarative/qmlscreen.cpp \
+-    controlpanel.cpp \
+-    display_hw.cpp \
+-    outputconfig.cpp \
+-    resolutionslider.cpp \
+-    unifiedoutputconfig.cpp \
+-    utils.cpp \
+-    widget.cpp \
+-    displayperformancedialog.cpp
+-
+-HEADERS += \
+-    brightnessFrame.h \
+-    colorinfo.h \
+-    declarative/qmloutput.h \
+-    declarative/qmloutputcomponent.h \
+-    declarative/qmlscreen.h \
+-    controlpanel.h \
+-    display_hw.h \
+-    outputconfig.h \
+-    resolutionslider.h \
+-    scalesize.h \
+-    unifiedoutputconfig.h \
+-    utils.h \
+-    widget.h \
+-    displayperformancedialog.h
+-
+-FORMS += \
+-    display_hw.ui \
+-    displayperformancedialog.ui
+-
+-#DISTFILES += \
+-#    qml/main.qml \
+-#    qml/Output.qml
+-
+-RESOURCES += \
+-    qml.qrc
+diff --git a/plugins/system/display_hw/display_hw.ui b/plugins/system/display_hw/display_hw.ui
+deleted file mode 100644
+index 3d62dce..0000000
+--- a/plugins/system/display_hw/display_hw.ui
++++ /dev/null
+@@ -1,931 +0,0 @@
+-<?xml version="1.0" encoding="UTF-8"?>
+-<ui version="4.0">
+- <class>DisplayWindow</class>
+- <widget class="QWidget" name="DisplayWindow">
+-  <property name="geometry">
+-   <rect>
+-    <x>0</x>
+-    <y>0</y>
+-    <width>945</width>
+-    <height>1260</height>
+-   </rect>
+-  </property>
+-  <property name="windowTitle">
+-   <string>Form</string>
+-  </property>
+-  <layout class="QVBoxLayout" name="verticalLayout_5">
+-   <property name="leftMargin">
+-    <number>0</number>
+-   </property>
+-   <property name="topMargin">
+-    <number>0</number>
+-   </property>
+-   <property name="rightMargin">
+-    <number>0</number>
+-   </property>
+-   <property name="bottomMargin">
+-    <number>0</number>
+-   </property>
+-   <item>
+-    <widget class="TitleLabel" name="titleLabel">
+-     <property name="text">
+-      <string>Display</string>
+-     </property>
+-    </widget>
+-   </item>
+-   <item>
+-    <spacer name="verticalSpacer_2">
+-     <property name="orientation">
+-      <enum>Qt::Vertical</enum>
+-     </property>
+-     <property name="sizeType">
+-      <enum>QSizePolicy::Fixed</enum>
+-     </property>
+-     <property name="sizeHint" stdset="0">
+-      <size>
+-       <width>12</width>
+-       <height>12</height>
+-      </size>
+-     </property>
+-    </spacer>
+-   </item>
+-   <item>
+-    <widget class="QFrame" name="mainframe">
+-     <property name="minimumSize">
+-      <size>
+-       <width>550</width>
+-       <height>0</height>
+-      </size>
+-     </property>
+-     <property name="maximumSize">
+-      <size>
+-       <width>16777215</width>
+-       <height>16777215</height>
+-      </size>
+-     </property>
+-     <property name="frameShape">
+-      <enum>QFrame::Box</enum>
+-     </property>
+-     <layout class="QHBoxLayout" name="horizontalLayout_3">
+-      <property name="leftMargin">
+-       <number>0</number>
+-      </property>
+-      <property name="topMargin">
+-       <number>0</number>
+-      </property>
+-      <property name="rightMargin">
+-       <number>0</number>
+-      </property>
+-      <property name="bottomMargin">
+-       <number>0</number>
+-      </property>
+-      <item>
+-       <widget class="QQuickWidget" name="quickWidget">
+-        <property name="minimumSize">
+-         <size>
+-          <width>550</width>
+-          <height>300</height>
+-         </size>
+-        </property>
+-        <property name="maximumSize">
+-         <size>
+-          <width>16777215</width>
+-          <height>300</height>
+-         </size>
+-        </property>
+-       </widget>
+-      </item>
+-     </layout>
+-    </widget>
+-   </item>
+-   <item>
+-    <layout class="QVBoxLayout" name="verticalLayout_3">
+-     <property name="spacing">
+-      <number>2</number>
+-     </property>
+-     <item>
+-      <widget class="QFrame" name="screenframe">
+-       <property name="minimumSize">
+-        <size>
+-         <width>550</width>
+-         <height>50</height>
+-        </size>
+-       </property>
+-       <property name="maximumSize">
+-        <size>
+-         <width>16777215</width>
+-         <height>50</height>
+-        </size>
+-       </property>
+-       <property name="frameShape">
+-        <enum>QFrame::Box</enum>
+-       </property>
+-       <layout class="QHBoxLayout" name="horizontalLayout">
+-        <item>
+-         <widget class="QLabel" name="primaryLabel">
+-          <property name="minimumSize">
+-           <size>
+-            <width>118</width>
+-            <height>30</height>
+-           </size>
+-          </property>
+-          <property name="maximumSize">
+-           <size>
+-            <width>118</width>
+-            <height>30</height>
+-           </size>
+-          </property>
+-          <property name="text">
+-           <string>monitor</string>
+-          </property>
+-         </widget>
+-        </item>
+-        <item>
+-         <widget class="QComboBox" name="primaryCombo">
+-          <property name="minimumSize">
+-           <size>
+-            <width>200</width>
+-            <height>0</height>
+-           </size>
+-          </property>
+-          <property name="maximumSize">
+-           <size>
+-            <width>16777215</width>
+-            <height>30</height>
+-           </size>
+-          </property>
+-          <property name="styleSheet">
+-           <string notr="true"/>
+-          </property>
+-         </widget>
+-        </item>
+-        <item>
+-         <widget class="QPushButton" name="mainScreenButton">
+-          <property name="minimumSize">
+-           <size>
+-            <width>120</width>
+-            <height>30</height>
+-           </size>
+-          </property>
+-          <property name="maximumSize">
+-           <size>
+-            <width>150</width>
+-            <height>30</height>
+-           </size>
+-          </property>
+-          <property name="font">
+-           <font>
+-            <pointsize>11</pointsize>
+-           </font>
+-          </property>
+-          <property name="focusPolicy">
+-           <enum>Qt::NoFocus</enum>
+-          </property>
+-          <property name="text">
+-           <string>as main</string>
+-          </property>
+-         </widget>
+-        </item>
+-       </layout>
+-      </widget>
+-     </item>
+-     <item>
+-      <layout class="QVBoxLayout" name="controlPanelLayout">
+-       <property name="spacing">
+-        <number>1</number>
+-       </property>
+-       <property name="sizeConstraint">
+-        <enum>QLayout::SetNoConstraint</enum>
+-       </property>
+-      </layout>
+-     </item>
+-     <item>
+-      <widget class="QFrame" name="frame">
+-       <property name="minimumSize">
+-        <size>
+-         <width>550</width>
+-         <height>50</height>
+-        </size>
+-       </property>
+-       <property name="maximumSize">
+-        <size>
+-         <width>16777215</width>
+-         <height>50</height>
+-        </size>
+-       </property>
+-       <property name="frameShape">
+-        <enum>QFrame::Box</enum>
+-       </property>
+-       <property name="frameShadow">
+-        <enum>QFrame::Raised</enum>
+-       </property>
+-       <layout class="QHBoxLayout" name="horizontalLayout_4">
+-        <item>
+-         <widget class="QLabel" name="scaleLabel">
+-          <property name="minimumSize">
+-           <size>
+-            <width>118</width>
+-            <height>30</height>
+-           </size>
+-          </property>
+-          <property name="maximumSize">
+-           <size>
+-            <width>118</width>
+-            <height>30</height>
+-           </size>
+-          </property>
+-          <property name="text">
+-           <string>screen zoom</string>
+-          </property>
+-         </widget>
+-        </item>
+-        <item>
+-         <widget class="QComboBox" name="scaleCombo">
+-          <property name="maximumSize">
+-           <size>
+-            <width>16777215</width>
+-            <height>30</height>
+-           </size>
+-          </property>
+-         </widget>
+-        </item>
+-       </layout>
+-      </widget>
+-     </item>
+-     <item>
+-      <widget class="QFrame" name="showMonitorframe">
+-       <property name="enabled">
+-        <bool>true</bool>
+-       </property>
+-       <property name="sizePolicy">
+-        <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+-         <horstretch>0</horstretch>
+-         <verstretch>0</verstretch>
+-        </sizepolicy>
+-       </property>
+-       <property name="minimumSize">
+-        <size>
+-         <width>550</width>
+-         <height>50</height>
+-        </size>
+-       </property>
+-       <property name="maximumSize">
+-        <size>
+-         <width>16777215</width>
+-         <height>50</height>
+-        </size>
+-       </property>
+-       <property name="frameShape">
+-        <enum>QFrame::Box</enum>
+-       </property>
+-       <layout class="QHBoxLayout" name="horizontalLayout_2">
+-        <item>
+-         <layout class="QHBoxLayout" name="showScreenLayout">
+-          <item>
+-           <widget class="QLabel" name="label">
+-            <property name="minimumSize">
+-             <size>
+-              <width>118</width>
+-              <height>30</height>
+-             </size>
+-            </property>
+-            <property name="maximumSize">
+-             <size>
+-              <width>16777215</width>
+-              <height>30</height>
+-             </size>
+-            </property>
+-            <property name="text">
+-             <string>open monitor</string>
+-            </property>
+-           </widget>
+-          </item>
+-          <item>
+-           <spacer name="horizontalSpacer_6">
+-            <property name="orientation">
+-             <enum>Qt::Horizontal</enum>
+-            </property>
+-            <property name="sizeHint" stdset="0">
+-             <size>
+-              <width>78</width>
+-              <height>29</height>
+-             </size>
+-            </property>
+-           </spacer>
+-          </item>
+-         </layout>
+-        </item>
+-       </layout>
+-      </widget>
+-     </item>
+-     <item>
+-      <layout class="QHBoxLayout" name="advancedHorLayout">
+-       <property name="spacing">
+-        <number>0</number>
+-       </property>
+-       <property name="leftMargin">
+-        <number>9</number>
+-       </property>
+-       <property name="topMargin">
+-        <number>8</number>
+-       </property>
+-       <property name="rightMargin">
+-        <number>9</number>
+-       </property>
+-       <property name="bottomMargin">
+-        <number>32</number>
+-       </property>
+-       <item>
+-        <widget class="QPushButton" name="advancedBtn">
+-         <property name="minimumSize">
+-          <size>
+-           <width>120</width>
+-           <height>36</height>
+-          </size>
+-         </property>
+-         <property name="maximumSize">
+-          <size>
+-           <width>120</width>
+-           <height>36</height>
+-          </size>
+-         </property>
+-         <property name="text">
+-          <string>Advanced</string>
+-         </property>
+-        </widget>
+-       </item>
+-       <item>
+-        <spacer name="horizontalSpacer_8">
+-         <property name="orientation">
+-          <enum>Qt::Horizontal</enum>
+-         </property>
+-         <property name="sizeHint" stdset="0">
+-          <size>
+-           <width>40</width>
+-           <height>20</height>
+-          </size>
+-         </property>
+-        </spacer>
+-       </item>
+-      </layout>
+-     </item>
+-     <item>
+-      <widget class="QFrame" name="unionframe">
+-       <property name="minimumSize">
+-        <size>
+-         <width>550</width>
+-         <height>50</height>
+-        </size>
+-       </property>
+-       <property name="maximumSize">
+-        <size>
+-         <width>16777215</width>
+-         <height>50</height>
+-        </size>
+-       </property>
+-       <property name="frameShape">
+-        <enum>QFrame::Box</enum>
+-       </property>
+-       <layout class="QHBoxLayout" name="horizontalLayout_6">
+-        <item>
+-         <layout class="QHBoxLayout" name="unionLayout">
+-          <item>
+-           <widget class="QLabel" name="unifyLabel">
+-            <property name="text">
+-             <string>Mirror Display</string>
+-            </property>
+-           </widget>
+-          </item>
+-          <item>
+-           <spacer name="horizontalSpacer_3">
+-            <property name="orientation">
+-             <enum>Qt::Horizontal</enum>
+-            </property>
+-            <property name="sizeHint" stdset="0">
+-             <size>
+-              <width>98</width>
+-              <height>17</height>
+-             </size>
+-            </property>
+-           </spacer>
+-          </item>
+-         </layout>
+-        </item>
+-       </layout>
+-      </widget>
+-     </item>
+-    </layout>
+-   </item>
+-   <item>
+-    <widget class="QFrame" name="unifyBrightFrame">
+-     <property name="minimumSize">
+-      <size>
+-       <width>0</width>
+-       <height>106</height>
+-      </size>
+-     </property>
+-     <property name="frameShape">
+-      <enum>QFrame::NoFrame</enum>
+-     </property>
+-     <property name="frameShadow">
+-      <enum>QFrame::Raised</enum>
+-     </property>
+-     <layout class="QVBoxLayout" name="verticalLayout_4">
+-      <property name="spacing">
+-       <number>2</number>
+-      </property>
+-      <property name="leftMargin">
+-       <number>0</number>
+-      </property>
+-      <property name="topMargin">
+-       <number>0</number>
+-      </property>
+-      <property name="rightMargin">
+-       <number>0</number>
+-      </property>
+-      <property name="bottomMargin">
+-       <number>0</number>
+-      </property>
+-      <item>
+-       <layout class="QVBoxLayout" name="unifyBrightLayout">
+-        <property name="spacing">
+-         <number>2</number>
+-        </property>
+-       </layout>
+-      </item>
+-     </layout>
+-    </widget>
+-   </item>
+-   <item>
+-    <layout class="QVBoxLayout" name="verticalLayout">
+-     <property name="spacing">
+-      <number>2</number>
+-     </property>
+-     <item>
+-      <widget class="QFrame" name="nightframe">
+-       <property name="minimumSize">
+-        <size>
+-         <width>550</width>
+-         <height>50</height>
+-        </size>
+-       </property>
+-       <property name="maximumSize">
+-        <size>
+-         <width>16777215</width>
+-         <height>50</height>
+-        </size>
+-       </property>
+-       <property name="frameShape">
+-        <enum>QFrame::Box</enum>
+-       </property>
+-      </widget>
+-     </item>
+-     <item>
+-      <widget class="QFrame" name="themeFrame">
+-       <property name="minimumSize">
+-        <size>
+-         <width>550</width>
+-         <height>50</height>
+-        </size>
+-       </property>
+-       <property name="maximumSize">
+-        <size>
+-         <width>960</width>
+-         <height>50</height>
+-        </size>
+-       </property>
+-       <property name="frameShape">
+-        <enum>QFrame::Box</enum>
+-       </property>
+-      </widget>
+-     </item>
+-     <item>
+-      <widget class="QFrame" name="sunframe">
+-       <property name="minimumSize">
+-        <size>
+-         <width>550</width>
+-         <height>50</height>
+-        </size>
+-       </property>
+-       <property name="maximumSize">
+-        <size>
+-         <width>16777215</width>
+-         <height>50</height>
+-        </size>
+-       </property>
+-       <property name="frameShape">
+-        <enum>QFrame::Box</enum>
+-       </property>
+-       <layout class="QHBoxLayout" name="horizontalLayout_8">
+-        <item>
+-         <layout class="QHBoxLayout" name="horizontalLayout_9">
+-          <item>
+-           <widget class="QLabel" name="label_6">
+-            <property name="minimumSize">
+-             <size>
+-              <width>118</width>
+-              <height>30</height>
+-             </size>
+-            </property>
+-            <property name="maximumSize">
+-             <size>
+-              <width>16777215</width>
+-              <height>30</height>
+-             </size>
+-            </property>
+-            <property name="text">
+-             <string>follow the sunrise and sunset(17:55-05:04)</string>
+-            </property>
+-           </widget>
+-          </item>
+-          <item>
+-           <spacer name="horizontalSpacer">
+-            <property name="orientation">
+-             <enum>Qt::Horizontal</enum>
+-            </property>
+-            <property name="sizeHint" stdset="0">
+-             <size>
+-              <width>40</width>
+-              <height>20</height>
+-             </size>
+-            </property>
+-           </spacer>
+-          </item>
+-          <item>
+-           <widget class="QRadioButton" name="sunradioBtn">
+-            <property name="text">
+-             <string/>
+-            </property>
+-           </widget>
+-          </item>
+-         </layout>
+-        </item>
+-       </layout>
+-      </widget>
+-     </item>
+-     <item>
+-      <widget class="QFrame" name="customframe">
+-       <property name="minimumSize">
+-        <size>
+-         <width>550</width>
+-         <height>50</height>
+-        </size>
+-       </property>
+-       <property name="maximumSize">
+-        <size>
+-         <width>16777215</width>
+-         <height>50</height>
+-        </size>
+-       </property>
+-       <property name="frameShape">
+-        <enum>QFrame::Box</enum>
+-       </property>
+-       <layout class="QHBoxLayout" name="horizontalLayout_12">
+-        <item>
+-         <layout class="QHBoxLayout" name="horizontalLayout_13">
+-          <item>
+-           <widget class="QLabel" name="label_12">
+-            <property name="minimumSize">
+-             <size>
+-              <width>118</width>
+-              <height>30</height>
+-             </size>
+-            </property>
+-            <property name="maximumSize">
+-             <size>
+-              <width>16777215</width>
+-              <height>30</height>
+-             </size>
+-            </property>
+-            <property name="text">
+-             <string>custom time</string>
+-            </property>
+-           </widget>
+-          </item>
+-          <item>
+-           <spacer name="horizontalSpacer_2">
+-            <property name="orientation">
+-             <enum>Qt::Horizontal</enum>
+-            </property>
+-            <property name="sizeHint" stdset="0">
+-             <size>
+-              <width>40</width>
+-              <height>20</height>
+-             </size>
+-            </property>
+-           </spacer>
+-          </item>
+-          <item>
+-           <widget class="QRadioButton" name="customradioBtn">
+-            <property name="text">
+-             <string/>
+-            </property>
+-           </widget>
+-          </item>
+-         </layout>
+-        </item>
+-       </layout>
+-      </widget>
+-     </item>
+-     <item>
+-      <widget class="QFrame" name="opframe">
+-       <property name="minimumSize">
+-        <size>
+-         <width>550</width>
+-         <height>50</height>
+-        </size>
+-       </property>
+-       <property name="maximumSize">
+-        <size>
+-         <width>16777215</width>
+-         <height>50</height>
+-        </size>
+-       </property>
+-       <property name="frameShape">
+-        <enum>QFrame::Box</enum>
+-       </property>
+-       <layout class="QHBoxLayout" name="horizontalLayout_18">
+-        <item>
+-         <layout class="QHBoxLayout" name="horizontalLayout_19">
+-          <item>
+-           <widget class="QLabel" name="label_21">
+-            <property name="minimumSize">
+-             <size>
+-              <width>118</width>
+-              <height>30</height>
+-             </size>
+-            </property>
+-            <property name="maximumSize">
+-             <size>
+-              <width>16777215</width>
+-              <height>30</height>
+-             </size>
+-            </property>
+-            <property name="text">
+-             <string>opening time</string>
+-            </property>
+-           </widget>
+-          </item>
+-          <item>
+-           <spacer name="horizontalSpacer_5">
+-            <property name="orientation">
+-             <enum>Qt::Horizontal</enum>
+-            </property>
+-            <property name="sizeHint" stdset="0">
+-             <size>
+-              <width>40</width>
+-              <height>20</height>
+-             </size>
+-            </property>
+-           </spacer>
+-          </item>
+-          <item>
+-           <widget class="QComboBox" name="opHourCom">
+-            <property name="minimumSize">
+-             <size>
+-              <width>80</width>
+-              <height>32</height>
+-             </size>
+-            </property>
+-            <property name="maximumSize">
+-             <size>
+-              <width>80</width>
+-              <height>32</height>
+-             </size>
+-            </property>
+-            <property name="styleSheet">
+-             <string notr="true"/>
+-            </property>
+-           </widget>
+-          </item>
+-          <item>
+-           <widget class="QComboBox" name="opMinCom">
+-            <property name="minimumSize">
+-             <size>
+-              <width>80</width>
+-              <height>32</height>
+-             </size>
+-            </property>
+-            <property name="maximumSize">
+-             <size>
+-              <width>80</width>
+-              <height>32</height>
+-             </size>
+-            </property>
+-            <property name="styleSheet">
+-             <string notr="true"/>
+-            </property>
+-           </widget>
+-          </item>
+-         </layout>
+-        </item>
+-       </layout>
+-      </widget>
+-     </item>
+-     <item>
+-      <widget class="QFrame" name="clsframe">
+-       <property name="minimumSize">
+-        <size>
+-         <width>550</width>
+-         <height>50</height>
+-        </size>
+-       </property>
+-       <property name="maximumSize">
+-        <size>
+-         <width>16777215</width>
+-         <height>50</height>
+-        </size>
+-       </property>
+-       <property name="frameShape">
+-        <enum>QFrame::Box</enum>
+-       </property>
+-       <layout class="QHBoxLayout" name="horizontalLayout_10">
+-        <item>
+-         <layout class="QHBoxLayout" name="horizontalLayout_11">
+-          <item>
+-           <widget class="QLabel" name="label_10">
+-            <property name="text">
+-             <string>closing time</string>
+-            </property>
+-           </widget>
+-          </item>
+-          <item>
+-           <spacer name="horizontalSpacer_7">
+-            <property name="orientation">
+-             <enum>Qt::Horizontal</enum>
+-            </property>
+-            <property name="sizeHint" stdset="0">
+-             <size>
+-              <width>40</width>
+-              <height>20</height>
+-             </size>
+-            </property>
+-           </spacer>
+-          </item>
+-          <item>
+-           <widget class="QComboBox" name="clHourCom">
+-            <property name="minimumSize">
+-             <size>
+-              <width>80</width>
+-              <height>32</height>
+-             </size>
+-            </property>
+-            <property name="maximumSize">
+-             <size>
+-              <width>80</width>
+-              <height>32</height>
+-             </size>
+-            </property>
+-            <property name="styleSheet">
+-             <string notr="true"/>
+-            </property>
+-           </widget>
+-          </item>
+-          <item>
+-           <widget class="QComboBox" name="clMinCom">
+-            <property name="minimumSize">
+-             <size>
+-              <width>80</width>
+-              <height>32</height>
+-             </size>
+-            </property>
+-            <property name="maximumSize">
+-             <size>
+-              <width>80</width>
+-              <height>32</height>
+-             </size>
+-            </property>
+-            <property name="styleSheet">
+-             <string notr="true"/>
+-            </property>
+-           </widget>
+-          </item>
+-         </layout>
+-        </item>
+-       </layout>
+-      </widget>
+-     </item>
+-     <item>
+-      <widget class="QFrame" name="temptframe">
+-       <property name="minimumSize">
+-        <size>
+-         <width>550</width>
+-         <height>50</height>
+-        </size>
+-       </property>
+-       <property name="maximumSize">
+-        <size>
+-         <width>16777215</width>
+-         <height>50</height>
+-        </size>
+-       </property>
+-       <property name="frameShape">
+-        <enum>QFrame::Box</enum>
+-       </property>
+-       <layout class="QHBoxLayout" name="horizontalLayout_16">
+-        <item>
+-         <layout class="QHBoxLayout" name="horizontalLayout_17">
+-          <item>
+-           <widget class="QLabel" name="label_18">
+-            <property name="minimumSize">
+-             <size>
+-              <width>118</width>
+-              <height>30</height>
+-             </size>
+-            </property>
+-            <property name="maximumSize">
+-             <size>
+-              <width>16777215</width>
+-              <height>30</height>
+-             </size>
+-            </property>
+-            <property name="text">
+-             <string>color temperature</string>
+-            </property>
+-           </widget>
+-          </item>
+-          <item>
+-           <widget class="QLabel" name="label_19">
+-            <property name="text">
+-             <string>warm</string>
+-            </property>
+-           </widget>
+-          </item>
+-          <item>
+-           <widget class="Uslider" name="temptSlider">
+-            <property name="sizePolicy">
+-             <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
+-              <horstretch>0</horstretch>
+-              <verstretch>0</verstretch>
+-             </sizepolicy>
+-            </property>
+-            <property name="styleSheet">
+-             <string notr="true"/>
+-            </property>
+-            <property name="orientation">
+-             <enum>Qt::Horizontal</enum>
+-            </property>
+-           </widget>
+-          </item>
+-          <item>
+-           <widget class="QLabel" name="label_20">
+-            <property name="text">
+-             <string>cold</string>
+-            </property>
+-           </widget>
+-          </item>
+-         </layout>
+-        </item>
+-       </layout>
+-      </widget>
+-     </item>
+-    </layout>
+-   </item>
+-   <item>
+-    <layout class="QHBoxLayout" name="horizontalLayout_5">
+-     <property name="spacing">
+-      <number>6</number>
+-     </property>
+-     <property name="bottomMargin">
+-      <number>0</number>
+-     </property>
+-    </layout>
+-   </item>
+-   <item>
+-    <spacer name="verticalSpacer">
+-     <property name="orientation">
+-      <enum>Qt::Vertical</enum>
+-     </property>
+-     <property name="sizeHint" stdset="0">
+-      <size>
+-       <width>20</width>
+-       <height>40</height>
+-      </size>
+-     </property>
+-    </spacer>
+-   </item>
+-  </layout>
+-  <zorder>mainframe</zorder>
+-  <zorder>unifyBrightFrame</zorder>
+-  <zorder>titleLabel</zorder>
+- </widget>
+- <customwidgets>
+-  <customwidget>
+-   <class>QQuickWidget</class>
+-   <extends>QWidget</extends>
+-   <header location="global">QtQuickWidgets/QQuickWidget</header>
+-  </customwidget>
+-  <customwidget>
+-   <class>TitleLabel</class>
+-   <extends>QLabel</extends>
+-   <header location="global">titlelabel.h</header>
+-  </customwidget>
+-  <customwidget>
+-   <class>Uslider</class>
+-   <extends>QSlider</extends>
+-   <header>uslider.h</header>
+-  </customwidget>
+- </customwidgets>
+- <resources/>
+- <connections/>
+-</ui>
+diff --git a/plugins/system/display_hw/displayperformancedialog.cpp b/plugins/system/display_hw/displayperformancedialog.cpp
+deleted file mode 100644
+index bb31e33..0000000
+--- a/plugins/system/display_hw/displayperformancedialog.cpp
++++ /dev/null
+@@ -1,213 +0,0 @@
+-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
+- *
+- * Copyright (C) 2019 Tianjin KYLIN Information Technology Co., Ltd.
+- *
+- * This program is free software; you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License as published by
+- * the Free Software Foundation; either version 2 of the License, or
+- * (at your option) any later version.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program; if not, write to the Free Software
+- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+- *
+- */
+-#include "displayperformancedialog.h"
+-#include "ui_displayperformancedialog.h"
+-#include "closebutton.h"
+-
+-#include <QFile>
+-#include <QDBusReply>
+-#include <QDBusInterface>
+-#include <QPainter>
+-#include <QPainterPath>
+-#include <QProcess>
+-#include <QDebug>
+-
+-#define ADVANCED_SCHEMAS "org.ukui.session.required-components"
+-#define ADVANCED_KEY "windowmanager"
+-
+-#define WM_CHOOSER_CONF "/etc/kylin-wm-chooser/default.conf"
+-#define WM_CHOOSER_CONF_TMP "/tmp/default.conf"
+-
+-extern void qt_blurImage(QImage &blurImage, qreal radius, bool quality, int transposed);
+-
+-DisplayPerformanceDialog::DisplayPerformanceDialog(QWidget *parent) :
+-    QDialog(parent),
+-    ui(new Ui::DisplayPerformanceDialog)
+-{
+-    ui->setupUi(this);
+-
+-    setWindowFlags(Qt::FramelessWindowHint | Qt::Tool);
+-    setAttribute(Qt::WA_TranslucentBackground);
+-    setAttribute(Qt::WA_DeleteOnClose);
+-
+-    ui->titleLabel->setStyleSheet("QLabel{font-size: 18px; color: palette(windowText);}");
+-
+-    ui->label->setAlignment(Qt::AlignTop);
+-    ui->label_2->setAlignment(Qt::AlignTop);
+-    ui->label_3->setAlignment(Qt::AlignTop);
+-    ui->label_4->setAlignment(Qt::AlignTop);
+-    ui->label_5->setAlignment(Qt::AlignTop);
+-    ui->label_6->setAlignment(Qt::AlignTop);
+-
+-    ui->closeBtn->setIcon(QIcon("://img/titlebar/close.svg"));
+-
+-    const QByteArray id(ADVANCED_SCHEMAS);
+-    settings = new QGSettings(id);
+-
+-    confSettings = new QSettings(WM_CHOOSER_CONF, QSettings::NativeFormat);
+-
+-    setupComponent();
+-    setupConnect();
+-    initModeStatus();
+-    initThresholdStatus();
+-
+-}
+-
+-DisplayPerformanceDialog::~DisplayPerformanceDialog()
+-{
+-    delete ui;
+-    ui = nullptr;
+-    delete settings;
+-    settings = nullptr;
+-    delete confSettings;
+-    confSettings = nullptr;
+-}
+-
+-void DisplayPerformanceDialog::setupComponent(){
+-    ui->performanceRadioBtn->setProperty("wm", "mutter");
+-    ui->compatibleRadioBtn->setProperty("wm", "marco");
+-    ui->autoRadioBtn->setProperty("wm", "kylin-wm-chooser");
+-}
+-
+-void DisplayPerformanceDialog::setupConnect(){
+-    connect(ui->closeBtn, &CloseButton::clicked, [=]{
+-        close();
+-    });
+-
+-#if QT_VERSION <= QT_VERSION_CHECK(5, 12, 0)
+-    connect(ui->buttonGroup, static_cast<void (QButtonGroup::*)(QAbstractButton *)>(&QButtonGroup::buttonClicked), [=](QAbstractButton * button){
+-#else
+-    connect(ui->buttonGroup, QOverload<QAbstractButton *>::of(&QButtonGroup::buttonClicked), [=](QAbstractButton * button){
+-#endif
+-        QString mode = button->property("wm").toString();
+-        settings->set(ADVANCED_KEY, mode);
+-    });
+-
+-    connect(ui->autoRadioBtn, &QRadioButton::toggled, this, [=](bool checked){
+-        ui->lineEdit->setEnabled(checked);
+-        ui->applyBtn->setEnabled(checked);
+-        ui->resetBtn->setEnabled(checked);
+-    });
+-
+-    connect(ui->applyBtn, &QPushButton::clicked, this, [=]{
+-        changeConfValue();
+-    });
+-
+-    connect(ui->resetBtn, &QPushButton::clicked, this, [=]{
+-        ui->lineEdit->setText("256");
+-        changeConfValue();
+-    });
+-}
+-
+-void DisplayPerformanceDialog::initModeStatus(){
+-    QString mode = settings->get(ADVANCED_KEY).toString();
+-
+-    if (mode == ui->performanceRadioBtn->property("wm").toString()){
+-        ui->performanceRadioBtn->blockSignals(true);
+-        ui->performanceRadioBtn->setChecked(true);
+-        ui->performanceRadioBtn->blockSignals(false);
+-    } else if (mode == ui->compatibleRadioBtn->property("wm").toString()){
+-        ui->compatibleRadioBtn->blockSignals(true);
+-        ui->compatibleRadioBtn->setChecked(true);
+-        ui->compatibleRadioBtn->blockSignals(false);
+-    } else{
+-        ui->autoRadioBtn->blockSignals(true);
+-        ui->autoRadioBtn->setChecked(true);
+-        ui->autoRadioBtn->blockSignals(false);
+-    }
+-}
+-
+-void DisplayPerformanceDialog::initThresholdStatus(){
+-    confSettings->beginGroup("mutter");
+-    QString value = confSettings->value("threshold").toString();
+-    ui->lineEdit->blockSignals(true);
+-    ui->lineEdit->setText(value);
+-    ui->lineEdit->blockSignals(false);
+-    confSettings->endGroup();
+-}
+-
+-void DisplayPerformanceDialog::changeConfValue(){
+-    if (!QFile::copy(WM_CHOOSER_CONF, WM_CHOOSER_CONF_TMP))
+-        return;
+-
+-    QSettings * tempSettings = new QSettings(WM_CHOOSER_CONF_TMP, QSettings::NativeFormat);
+-    tempSettings->beginGroup("mutter");
+-    tempSettings->setValue("threshold", ui->lineEdit->text());
+-    tempSettings->endGroup();
+-
+-    delete tempSettings;
+-    tempSettings = nullptr;
+-
+-    //替换kylin-wm-chooser
+-    QDBusInterface * sysinterface = new QDBusInterface("com.control.center.qt.systemdbus",
+-                                     "/",
+-                                     "com.control.center.interface",
+-                                     QDBusConnection::systemBus());
+-
+-    if (!sysinterface->isValid()){
+-        qCritical() << "Create Client Interface Failed When Copy Face File: " << QDBusConnection::systemBus().lastError();
+-        return;
+-    }
+-
+-    QString cmd = QString("mv %1 %2").arg(WM_CHOOSER_CONF_TMP).arg(WM_CHOOSER_CONF);
+-
+-    QProcess::execute(cmd);
+-    delete sysinterface;
+-    sysinterface = nullptr;
+-}
+-
+-void DisplayPerformanceDialog::paintEvent(QPaintEvent *event){
+-    Q_UNUSED(event);
+-    QPainter p(this);
+-    p.setRenderHint(QPainter::Antialiasing);
+-    QPainterPath rectPath;
+-    rectPath.addRoundedRect(this->rect().adjusted(10, 10, -10, -10), 6, 6);
+-
+-    // 画一个黑底
+-    QPixmap pixmap(this->rect().size());
+-    pixmap.fill(Qt::transparent);
+-    QPainter pixmapPainter(&pixmap);
+-    pixmapPainter.setRenderHint(QPainter::Antialiasing);
+-    pixmapPainter.setPen(Qt::transparent);
+-    pixmapPainter.setBrush(Qt::black);
+-    pixmapPainter.setOpacity(0.65);
+-    pixmapPainter.drawPath(rectPath);
+-    pixmapPainter.end();
+-
+-    // 模糊这个黑底
+-    QImage img = pixmap.toImage();
+-    qt_blurImage(img, 10, false, false);
+-    // 挖掉中心
+-    pixmap = QPixmap::fromImage(img);
+-    QPainter pixmapPainter2(&pixmap);
+-    pixmapPainter2.setRenderHint(QPainter::Antialiasing);
+-    pixmapPainter2.setCompositionMode(QPainter::CompositionMode_Clear);
+-    pixmapPainter2.setPen(Qt::transparent);
+-    pixmapPainter2.setBrush(Qt::transparent);
+-    pixmapPainter2.drawPath(rectPath);
+-
+-    // 绘制阴影
+-    p.drawPixmap(this->rect(), pixmap, pixmap.rect());
+-    // 绘制一个背景
+-    p.save();
+-    p.fillPath(rectPath,palette().color(QPalette::Base));
+-
+-    p.restore();
+-}
+diff --git a/plugins/system/display_hw/displayperformancedialog.h b/plugins/system/display_hw/displayperformancedialog.h
+deleted file mode 100644
+index 4d03ccc..0000000
+--- a/plugins/system/display_hw/displayperformancedialog.h
++++ /dev/null
+@@ -1,58 +0,0 @@
+-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
+- *
+- * Copyright (C) 2019 Tianjin KYLIN Information Technology Co., Ltd.
+- *
+- * This program is free software; you can redistribute it and/or modify
+- * it under the terms of the GNU General Public License as published by
+- * the Free Software Foundation; either version 2 of the License, or
+- * (at your option) any later version.
+- *
+- * This program is distributed in the hope that it will be useful,
+- * but WITHOUT ANY WARRANTY; without even the implied warranty of
+- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+- * GNU General Public License for more details.
+- *
+- * You should have received a copy of the GNU General Public License
+- * along with this program; if not, write to the Free Software
+- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+- *
+- */
+-#ifndef DISPLAYPERFORMANCEDIALOG_H
+-#define DISPLAYPERFORMANCEDIALOG_H
+-
+-#include <QDialog>
+-#include <QSettings>
+-#include <QGSettings>
+-
+-namespace Ui {
+-class DisplayPerformanceDialog;
+-}
+-
+-class DisplayPerformanceDialog : public QDialog
+-{
+-    Q_OBJECT
+-
+-public:
+-    explicit DisplayPerformanceDialog(QWidget *parent = 0);
+-    ~DisplayPerformanceDialog();
+-
+-public:
+-    void setupComponent();
+-    void setupConnect();
+-    void initModeStatus();
+-    void initThresholdStatus();
+-
+-    void changeConfValue();
+-
+-private:
+-    void paintEvent(QPaintEvent *event);
+-
+-private:
+-    Ui::DisplayPerformanceDialog *ui;
+-
+-private:
+-    QGSettings *settings;
+-    QSettings *confSettings;
+-};
+-
+-#endif // DISPLAYPERFORMANCEDIALOG_H
+diff --git a/plugins/system/display_hw/displayperformancedialog.ui b/plugins/system/display_hw/displayperformancedialog.ui
+deleted file mode 100644
+index 5c587f0..0000000
+--- a/plugins/system/display_hw/displayperformancedialog.ui
++++ /dev/null
+@@ -1,813 +0,0 @@
+-<?xml version="1.0" encoding="UTF-8"?>
+-<ui version="4.0">
+- <class>DisplayPerformanceDialog</class>
+- <widget class="QDialog" name="DisplayPerformanceDialog">
+-  <property name="geometry">
+-   <rect>
+-    <x>0</x>
+-    <y>0</y>
+-    <width>580</width>
+-    <height>646</height>
+-   </rect>
+-  </property>
+-  <property name="minimumSize">
+-   <size>
+-    <width>580</width>
+-    <height>646</height>
+-   </size>
+-  </property>
+-  <property name="maximumSize">
+-   <size>
+-    <width>580</width>
+-    <height>646</height>
+-   </size>
+-  </property>
+-  <property name="windowTitle">
+-   <string>Dialog</string>
+-  </property>
+-  <layout class="QVBoxLayout" name="verticalLayout_2">
+-   <property name="spacing">
+-    <number>0</number>
+-   </property>
+-   <property name="leftMargin">
+-    <number>0</number>
+-   </property>
+-   <property name="topMargin">
+-    <number>9</number>
+-   </property>
+-   <property name="rightMargin">
+-    <number>9</number>
+-   </property>
+-   <property name="bottomMargin">
+-    <number>9</number>
+-   </property>
+-   <item>
+-    <widget class="QFrame" name="frame">
+-     <property name="sizePolicy">
+-      <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+-       <horstretch>0</horstretch>
+-       <verstretch>0</verstretch>
+-      </sizepolicy>
+-     </property>
+-     <property name="frameShape">
+-      <enum>QFrame::NoFrame</enum>
+-     </property>
+-     <property name="frameShadow">
+-      <enum>QFrame::Raised</enum>
+-     </property>
+-     <layout class="QVBoxLayout" name="verticalLayout_3">
+-      <property name="spacing">
+-       <number>0</number>
+-      </property>
+-      <property name="leftMargin">
+-       <number>0</number>
+-      </property>
+-      <property name="topMargin">
+-       <number>0</number>
+-      </property>
+-      <property name="rightMargin">
+-       <number>0</number>
+-      </property>
+-      <property name="bottomMargin">
+-       <number>0</number>
+-      </property>
+-      <item>
+-       <layout class="QVBoxLayout" name="verticalLayout">
+-        <property name="spacing">
+-         <number>0</number>
+-        </property>
+-        <property name="sizeConstraint">
+-         <enum>QLayout::SetDefaultConstraint</enum>
+-        </property>
+-        <property name="topMargin">
+-         <number>0</number>
+-        </property>
+-        <property name="bottomMargin">
+-         <number>0</number>
+-        </property>
+-        <item>
+-         <widget class="QFrame" name="closeFrame">
+-          <property name="minimumSize">
+-           <size>
+-            <width>0</width>
+-            <height>36</height>
+-           </size>
+-          </property>
+-          <property name="maximumSize">
+-           <size>
+-            <width>16777215</width>
+-            <height>36</height>
+-           </size>
+-          </property>
+-          <property name="frameShape">
+-           <enum>QFrame::StyledPanel</enum>
+-          </property>
+-          <property name="frameShadow">
+-           <enum>QFrame::Raised</enum>
+-          </property>
+-          <layout class="QHBoxLayout" name="horizontalLayout_6">
+-           <property name="spacing">
+-            <number>0</number>
+-           </property>
+-           <property name="leftMargin">
+-            <number>0</number>
+-           </property>
+-           <property name="topMargin">
+-            <number>0</number>
+-           </property>
+-           <property name="rightMargin">
+-            <number>0</number>
+-           </property>
+-           <property name="bottomMargin">
+-            <number>0</number>
+-           </property>
+-           <item>
+-            <layout class="QHBoxLayout" name="horizontalLayout_2">
+-             <property name="spacing">
+-              <number>0</number>
+-             </property>
+-             <item>
+-              <spacer name="horizontalSpacer">
+-               <property name="orientation">
+-                <enum>Qt::Horizontal</enum>
+-               </property>
+-               <property name="sizeHint" stdset="0">
+-                <size>
+-                 <width>40</width>
+-                 <height>20</height>
+-                </size>
+-               </property>
+-              </spacer>
+-             </item>
+-             <item>
+-              <widget class="CloseButton" name="closeBtn">
+-               <property name="minimumSize">
+-                <size>
+-                 <width>32</width>
+-                 <height>32</height>
+-                </size>
+-               </property>
+-               <property name="maximumSize">
+-                <size>
+-                 <width>32</width>
+-                 <height>32</height>
+-                </size>
+-               </property>
+-               <property name="text">
+-                <string/>
+-               </property>
+-              </widget>
+-             </item>
+-            </layout>
+-           </item>
+-          </layout>
+-         </widget>
+-        </item>
+-        <item>
+-         <widget class="QWidget" name="widget" native="true">
+-          <property name="sizePolicy">
+-           <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+-            <horstretch>0</horstretch>
+-            <verstretch>0</verstretch>
+-           </sizepolicy>
+-          </property>
+-          <property name="minimumSize">
+-           <size>
+-            <width>0</width>
+-            <height>0</height>
+-           </size>
+-          </property>
+-          <property name="maximumSize">
+-           <size>
+-            <width>16777215</width>
+-            <height>16777215</height>
+-           </size>
+-          </property>
+-          <layout class="QVBoxLayout" name="verticalLayout_4">
+-           <property name="spacing">
+-            <number>8</number>
+-           </property>
+-           <property name="sizeConstraint">
+-            <enum>QLayout::SetDefaultConstraint</enum>
+-           </property>
+-           <property name="leftMargin">
+-            <number>32</number>
+-           </property>
+-           <property name="topMargin">
+-            <number>16</number>
+-           </property>
+-           <property name="rightMargin">
+-            <number>32</number>
+-           </property>
+-           <property name="bottomMargin">
+-            <number>32</number>
+-           </property>
+-           <item>
+-            <widget class="QLabel" name="titleLabel">
+-             <property name="sizePolicy">
+-              <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+-               <horstretch>0</horstretch>
+-               <verstretch>0</verstretch>
+-              </sizepolicy>
+-             </property>
+-             <property name="text">
+-              <string>Display Advanced Settings</string>
+-             </property>
+-            </widget>
+-           </item>
+-           <item>
+-            <widget class="QScrollArea" name="scrollArea">
+-             <property name="verticalScrollBarPolicy">
+-              <enum>Qt::ScrollBarAsNeeded</enum>
+-             </property>
+-             <property name="horizontalScrollBarPolicy">
+-              <enum>Qt::ScrollBarAlwaysOff</enum>
+-             </property>
+-             <property name="widgetResizable">
+-              <bool>true</bool>
+-             </property>
+-             <widget class="QWidget" name="scrollAreaWidgetContents">
+-              <property name="geometry">
+-               <rect>
+-                <x>0</x>
+-                <y>0</y>
+-                <width>526</width>
+-                <height>564</height>
+-               </rect>
+-              </property>
+-              <layout class="QVBoxLayout" name="verticalLayout_32">
+-               <item>
+-                <layout class="QVBoxLayout" name="verticalLayout_6">
+-                 <property name="spacing">
+-                  <number>2</number>
+-                 </property>
+-                 <item>
+-                  <widget class="QFrame" name="performanceFrame">
+-                   <property name="minimumSize">
+-                    <size>
+-                     <width>0</width>
+-                     <height>50</height>
+-                    </size>
+-                   </property>
+-                   <property name="maximumSize">
+-                    <size>
+-                     <width>16777215</width>
+-                     <height>50</height>
+-                    </size>
+-                   </property>
+-                   <property name="frameShape">
+-                    <enum>QFrame::Box</enum>
+-                   </property>
+-                   <property name="frameShadow">
+-                    <enum>QFrame::Plain</enum>
+-                   </property>
+-                   <layout class="QHBoxLayout" name="horizontalLayout_3">
+-                    <property name="spacing">
+-                     <number>0</number>
+-                    </property>
+-                    <property name="leftMargin">
+-                     <number>0</number>
+-                    </property>
+-                    <property name="topMargin">
+-                     <number>0</number>
+-                    </property>
+-                    <property name="rightMargin">
+-                     <number>0</number>
+-                    </property>
+-                    <property name="bottomMargin">
+-                     <number>0</number>
+-                    </property>
+-                    <item>
+-                     <layout class="QHBoxLayout" name="horizontalLayout">
+-                      <property name="spacing">
+-                       <number>0</number>
+-                      </property>
+-                      <property name="leftMargin">
+-                       <number>16</number>
+-                      </property>
+-                      <item>
+-                       <widget class="QRadioButton" name="performanceRadioBtn">
+-                        <property name="sizePolicy">
+-                         <sizepolicy hsizetype="Minimum" vsizetype="Preferred">
+-                          <horstretch>0</horstretch>
+-                          <verstretch>0</verstretch>
+-                         </sizepolicy>
+-                        </property>
+-                        <property name="text">
+-                         <string>Performance</string>
+-                        </property>
+-                        <attribute name="buttonGroup">
+-                         <string notr="true">buttonGroup</string>
+-                        </attribute>
+-                       </widget>
+-                      </item>
+-                      <item>
+-                       <spacer name="horizontalSpacer_2">
+-                        <property name="orientation">
+-                         <enum>Qt::Horizontal</enum>
+-                        </property>
+-                        <property name="sizeHint" stdset="0">
+-                         <size>
+-                          <width>40</width>
+-                          <height>20</height>
+-                         </size>
+-                        </property>
+-                       </spacer>
+-                      </item>
+-                     </layout>
+-                    </item>
+-                   </layout>
+-                  </widget>
+-                 </item>
+-                 <item>
+-                  <widget class="QFrame" name="performanceTipFrame">
+-                   <property name="sizePolicy">
+-                    <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+-                     <horstretch>0</horstretch>
+-                     <verstretch>0</verstretch>
+-                    </sizepolicy>
+-                   </property>
+-                   <property name="minimumSize">
+-                    <size>
+-                     <width>0</width>
+-                     <height>0</height>
+-                    </size>
+-                   </property>
+-                   <property name="maximumSize">
+-                    <size>
+-                     <width>16777215</width>
+-                     <height>16777215</height>
+-                    </size>
+-                   </property>
+-                   <property name="frameShape">
+-                    <enum>QFrame::Box</enum>
+-                   </property>
+-                   <property name="frameShadow">
+-                    <enum>QFrame::Plain</enum>
+-                   </property>
+-                   <layout class="QVBoxLayout" name="verticalLayout_11">
+-                    <property name="spacing">
+-                     <number>8</number>
+-                    </property>
+-                    <property name="leftMargin">
+-                     <number>16</number>
+-                    </property>
+-                    <property name="topMargin">
+-                     <number>0</number>
+-                    </property>
+-                    <property name="rightMargin">
+-                     <number>16</number>
+-                    </property>
+-                    <property name="bottomMargin">
+-                     <number>0</number>
+-                    </property>
+-                    <item>
+-                     <widget class="QLabel" name="label">
+-                      <property name="sizePolicy">
+-                       <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+-                        <horstretch>0</horstretch>
+-                        <verstretch>0</verstretch>
+-                       </sizepolicy>
+-                      </property>
+-                      <property name="autoFillBackground">
+-                       <bool>false</bool>
+-                      </property>
+-                      <property name="text">
+-                       <string>Applicable to machine with discrete graphics, which can accelerate the rendering of 3D graphics.</string>
+-                      </property>
+-                      <property name="wordWrap">
+-                       <bool>true</bool>
+-                      </property>
+-                     </widget>
+-                    </item>
+-                    <item>
+-                     <widget class="QLabel" name="label_2">
+-                      <property name="sizePolicy">
+-                       <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+-                        <horstretch>0</horstretch>
+-                        <verstretch>0</verstretch>
+-                       </sizepolicy>
+-                      </property>
+-                      <property name="text">
+-                       <string>(Note: not support connect graphical with xmanager on windows.)</string>
+-                      </property>
+-                      <property name="wordWrap">
+-                       <bool>true</bool>
+-                      </property>
+-                     </widget>
+-                    </item>
+-                   </layout>
+-                  </widget>
+-                 </item>
+-                </layout>
+-               </item>
+-               <item>
+-                <layout class="QVBoxLayout" name="verticalLayout_8">
+-                 <property name="spacing">
+-                  <number>2</number>
+-                 </property>
+-                 <item>
+-                  <widget class="QFrame" name="compatibleFrame">
+-                   <property name="minimumSize">
+-                    <size>
+-                     <width>0</width>
+-                     <height>50</height>
+-                    </size>
+-                   </property>
+-                   <property name="maximumSize">
+-                    <size>
+-                     <width>16777215</width>
+-                     <height>50</height>
+-                    </size>
+-                   </property>
+-                   <property name="frameShape">
+-                    <enum>QFrame::Box</enum>
+-                   </property>
+-                   <property name="frameShadow">
+-                    <enum>QFrame::Plain</enum>
+-                   </property>
+-                   <layout class="QHBoxLayout" name="horizontalLayout_5">
+-                    <property name="spacing">
+-                     <number>0</number>
+-                    </property>
+-                    <property name="leftMargin">
+-                     <number>0</number>
+-                    </property>
+-                    <property name="topMargin">
+-                     <number>0</number>
+-                    </property>
+-                    <property name="rightMargin">
+-                     <number>0</number>
+-                    </property>
+-                    <property name="bottomMargin">
+-                     <number>0</number>
+-                    </property>
+-                    <item>
+-                     <layout class="QHBoxLayout" name="horizontalLayout_4">
+-                      <property name="spacing">
+-                       <number>0</number>
+-                      </property>
+-                      <property name="leftMargin">
+-                       <number>16</number>
+-                      </property>
+-                      <item>
+-                       <widget class="QRadioButton" name="compatibleRadioBtn">
+-                        <property name="sizePolicy">
+-                         <sizepolicy hsizetype="Minimum" vsizetype="Preferred">
+-                          <horstretch>0</horstretch>
+-                          <verstretch>0</verstretch>
+-                         </sizepolicy>
+-                        </property>
+-                        <property name="text">
+-                         <string>Compatible</string>
+-                        </property>
+-                        <attribute name="buttonGroup">
+-                         <string notr="true">buttonGroup</string>
+-                        </attribute>
+-                       </widget>
+-                      </item>
+-                      <item>
+-                       <spacer name="horizontalSpacer_3">
+-                        <property name="orientation">
+-                         <enum>Qt::Horizontal</enum>
+-                        </property>
+-                        <property name="sizeHint" stdset="0">
+-                         <size>
+-                          <width>40</width>
+-                          <height>20</height>
+-                         </size>
+-                        </property>
+-                       </spacer>
+-                      </item>
+-                     </layout>
+-                    </item>
+-                   </layout>
+-                  </widget>
+-                 </item>
+-                 <item>
+-                  <widget class="QFrame" name="compatibleTipFrame">
+-                   <property name="sizePolicy">
+-                    <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+-                     <horstretch>0</horstretch>
+-                     <verstretch>0</verstretch>
+-                    </sizepolicy>
+-                   </property>
+-                   <property name="minimumSize">
+-                    <size>
+-                     <width>0</width>
+-                     <height>0</height>
+-                    </size>
+-                   </property>
+-                   <property name="maximumSize">
+-                    <size>
+-                     <width>16777215</width>
+-                     <height>16777215</height>
+-                    </size>
+-                   </property>
+-                   <property name="frameShape">
+-                    <enum>QFrame::Box</enum>
+-                   </property>
+-                   <property name="frameShadow">
+-                    <enum>QFrame::Plain</enum>
+-                   </property>
+-                   <layout class="QVBoxLayout" name="verticalLayout_12">
+-                    <property name="spacing">
+-                     <number>8</number>
+-                    </property>
+-                    <property name="leftMargin">
+-                     <number>16</number>
+-                    </property>
+-                    <property name="topMargin">
+-                     <number>0</number>
+-                    </property>
+-                    <property name="rightMargin">
+-                     <number>16</number>
+-                    </property>
+-                    <property name="bottomMargin">
+-                     <number>0</number>
+-                    </property>
+-                    <item>
+-                     <widget class="QLabel" name="label_3">
+-                      <property name="sizePolicy">
+-                       <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+-                        <horstretch>0</horstretch>
+-                        <verstretch>0</verstretch>
+-                       </sizepolicy>
+-                      </property>
+-                      <property name="text">
+-                       <string>Applicable to machine with integrated graphics,  there is no 3D graphics acceleration. </string>
+-                      </property>
+-                      <property name="wordWrap">
+-                       <bool>true</bool>
+-                      </property>
+-                     </widget>
+-                    </item>
+-                    <item>
+-                     <widget class="QLabel" name="label_4">
+-                      <property name="sizePolicy">
+-                       <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+-                        <horstretch>0</horstretch>
+-                        <verstretch>0</verstretch>
+-                       </sizepolicy>
+-                      </property>
+-                      <property name="text">
+-                       <string>(Note: need connect graphical with xmanager on windows, use this option.)</string>
+-                      </property>
+-                      <property name="wordWrap">
+-                       <bool>true</bool>
+-                      </property>
+-                     </widget>
+-                    </item>
+-                   </layout>
+-                  </widget>
+-                 </item>
+-                </layout>
+-               </item>
+-               <item>
+-                <layout class="QVBoxLayout" name="verticalLayout_9">
+-                 <property name="spacing">
+-                  <number>2</number>
+-                 </property>
+-                 <item>
+-                  <widget class="QFrame" name="automaticFrame">
+-                   <property name="minimumSize">
+-                    <size>
+-                     <width>0</width>
+-                     <height>50</height>
+-                    </size>
+-                   </property>
+-                   <property name="maximumSize">
+-                    <size>
+-                     <width>16777215</width>
+-                     <height>50</height>
+-                    </size>
+-                   </property>
+-                   <property name="frameShape">
+-                    <enum>QFrame::Box</enum>
+-                   </property>
+-                   <property name="frameShadow">
+-                    <enum>QFrame::Plain</enum>
+-                   </property>
+-                   <layout class="QHBoxLayout" name="horizontalLayout_8">
+-                    <property name="spacing">
+-                     <number>0</number>
+-                    </property>
+-                    <property name="leftMargin">
+-                     <number>0</number>
+-                    </property>
+-                    <property name="topMargin">
+-                     <number>0</number>
+-                    </property>
+-                    <property name="rightMargin">
+-                     <number>0</number>
+-                    </property>
+-                    <property name="bottomMargin">
+-                     <number>0</number>
+-                    </property>
+-                    <item>
+-                     <layout class="QHBoxLayout" name="horizontalLayout_7">
+-                      <property name="spacing">
+-                       <number>0</number>
+-                      </property>
+-                      <property name="leftMargin">
+-                       <number>16</number>
+-                      </property>
+-                      <item>
+-                       <widget class="QRadioButton" name="autoRadioBtn">
+-                        <property name="sizePolicy">
+-                         <sizepolicy hsizetype="Minimum" vsizetype="Preferred">
+-                          <horstretch>0</horstretch>
+-                          <verstretch>0</verstretch>
+-                         </sizepolicy>
+-                        </property>
+-                        <property name="text">
+-                         <string>Automatic</string>
+-                        </property>
+-                        <attribute name="buttonGroup">
+-                         <string notr="true">buttonGroup</string>
+-                        </attribute>
+-                       </widget>
+-                      </item>
+-                      <item>
+-                       <spacer name="horizontalSpacer_4">
+-                        <property name="orientation">
+-                         <enum>Qt::Horizontal</enum>
+-                        </property>
+-                        <property name="sizeHint" stdset="0">
+-                         <size>
+-                          <width>40</width>
+-                          <height>20</height>
+-                         </size>
+-                        </property>
+-                       </spacer>
+-                      </item>
+-                     </layout>
+-                    </item>
+-                   </layout>
+-                  </widget>
+-                 </item>
+-                 <item>
+-                  <widget class="QFrame" name="automaticTipFrame">
+-                   <property name="sizePolicy">
+-                    <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+-                     <horstretch>0</horstretch>
+-                     <verstretch>0</verstretch>
+-                    </sizepolicy>
+-                   </property>
+-                   <property name="minimumSize">
+-                    <size>
+-                     <width>0</width>
+-                     <height>0</height>
+-                    </size>
+-                   </property>
+-                   <property name="maximumSize">
+-                    <size>
+-                     <width>16777215</width>
+-                     <height>16777215</height>
+-                    </size>
+-                   </property>
+-                   <property name="frameShape">
+-                    <enum>QFrame::Box</enum>
+-                   </property>
+-                   <property name="frameShadow">
+-                    <enum>QFrame::Plain</enum>
+-                   </property>
+-                   <layout class="QVBoxLayout" name="verticalLayout_5">
+-                    <property name="spacing">
+-                     <number>8</number>
+-                    </property>
+-                    <property name="leftMargin">
+-                     <number>16</number>
+-                    </property>
+-                    <property name="topMargin">
+-                     <number>0</number>
+-                    </property>
+-                    <property name="rightMargin">
+-                     <number>16</number>
+-                    </property>
+-                    <property name="bottomMargin">
+-                     <number>0</number>
+-                    </property>
+-                    <item>
+-                     <widget class="QLabel" name="label_5">
+-                      <property name="sizePolicy">
+-                       <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+-                        <horstretch>0</horstretch>
+-                        <verstretch>0</verstretch>
+-                       </sizepolicy>
+-                      </property>
+-                      <property name="text">
+-                       <string>Auto select according to environment, delay the login time (about 0.5 sec).</string>
+-                      </property>
+-                      <property name="wordWrap">
+-                       <bool>true</bool>
+-                      </property>
+-                     </widget>
+-                    </item>
+-                    <item>
+-                     <layout class="QHBoxLayout" name="autoHorLayout">
+-                      <property name="spacing">
+-                       <number>16</number>
+-                      </property>
+-                      <item>
+-                       <widget class="QLabel" name="label_7">
+-                        <property name="sizePolicy">
+-                         <sizepolicy hsizetype="Fixed" vsizetype="Preferred">
+-                          <horstretch>0</horstretch>
+-                          <verstretch>0</verstretch>
+-                         </sizepolicy>
+-                        </property>
+-                        <property name="text">
+-                         <string>Threshold:</string>
+-                        </property>
+-                       </widget>
+-                      </item>
+-                      <item>
+-                       <widget class="QLineEdit" name="lineEdit">
+-                        <property name="sizePolicy">
+-                         <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
+-                          <horstretch>0</horstretch>
+-                          <verstretch>0</verstretch>
+-                         </sizepolicy>
+-                        </property>
+-                       </widget>
+-                      </item>
+-                      <item>
+-                       <widget class="QPushButton" name="applyBtn">
+-                        <property name="sizePolicy">
+-                         <sizepolicy hsizetype="Minimum" vsizetype="Preferred">
+-                          <horstretch>0</horstretch>
+-                          <verstretch>0</verstretch>
+-                         </sizepolicy>
+-                        </property>
+-                        <property name="text">
+-                         <string>Apply</string>
+-                        </property>
+-                       </widget>
+-                      </item>
+-                      <item>
+-                       <widget class="QPushButton" name="resetBtn">
+-                        <property name="sizePolicy">
+-                         <sizepolicy hsizetype="Minimum" vsizetype="Preferred">
+-                          <horstretch>0</horstretch>
+-                          <verstretch>0</verstretch>
+-                         </sizepolicy>
+-                        </property>
+-                        <property name="text">
+-                         <string>Reset</string>
+-                        </property>
+-                       </widget>
+-                      </item>
+-                     </layout>
+-                    </item>
+-                    <item>
+-                     <widget class="QLabel" name="label_6">
+-                      <property name="sizePolicy">
+-                       <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+-                        <horstretch>0</horstretch>
+-                        <verstretch>0</verstretch>
+-                       </sizepolicy>
+-                      </property>
+-                      <property name="text">
+-                       <string>(Note: select this option to use 3D graphics acceleration and xmanager.)</string>
+-                      </property>
+-                      <property name="wordWrap">
+-                       <bool>true</bool>
+-                      </property>
+-                     </widget>
+-                    </item>
+-                   </layout>
+-                  </widget>
+-                 </item>
+-                </layout>
+-               </item>
+-              </layout>
+-              <zorder></zorder>
+-              <zorder></zorder>
+-              <zorder></zorder>
+-             </widget>
+-            </widget>
+-           </item>
+-          </layout>
+-         </widget>
+-        </item>
+-       </layout>
+-      </item>
+-     </layout>
+-    </widget>
+-   </item>
+-  </layout>
+- </widget>
+- <customwidgets>
+-  <customwidget>
+-   <class>CloseButton</class>
+-   <extends>QPushButton</extends>
+-   <header location="global">../../../libukcc/widgets/CloseButton/closebutton.h</header>
+-  </customwidget>
+- </customwidgets>
+- <resources/>
+- <connections/>
+- <buttongroups>
+-  <buttongroup name="buttonGroup"/>
+- </buttongroups>
+-</ui>
+diff --git a/plugins/system/display_hw/outputconfig.cpp b/plugins/system/display_hw/outputconfig.cpp
+deleted file mode 100644
+index 375e7a8..0000000
+--- a/plugins/system/display_hw/outputconfig.cpp
++++ /dev/null
+@@ -1,439 +0,0 @@
+-#include "outputconfig.h"
+-#include "resolutionslider.h"
+-#include "utils.h"
+-
+-#include <QStringBuilder>
+-#include <QFormLayout>
+-#include <QComboBox>
+-#include <QCheckBox>
+-#include <QHBoxLayout>
+-#include <QLabel>
+-#include <QPushButton>
+-#include <QGroupBox>
+-#include <QMessageBox>
+-
+-#include <QComboBox>
+-#include <QGSettings>
+-#include <QDBusInterface>
+-
+-#include <KF5/KScreen/kscreen/output.h>
+-#include <KF5/KScreen/kscreen/edid.h>
+-
+-#include "combobox.h"
+-
+-double mScreenScale = 1.0;
+-int changeItm = -1;
+-
+-OutputConfig::OutputConfig(QWidget *parent) :
+-    QWidget(parent),
+-    mOutput(nullptr)
+-{
+-    initDpiConnection();
+-}
+-
+-OutputConfig::OutputConfig(const KScreen::OutputPtr &output, QWidget *parent) :
+-    QWidget(parent)
+-{
+-    initDpiConnection();
+-    setOutput(output);
+-}
+-
+-OutputConfig::~OutputConfig()
+-{
+-}
+-
+-void OutputConfig::setTitle(const QString &title)
+-{
+-    mTitle->setText(title);
+-}
+-
+-void OutputConfig::initUi()
+-{
+-    connect(mOutput.data(), &KScreen::Output::isConnectedChanged,
+-            this, [=]() {
+-        if (!mOutput->isConnected()) {
+-            setVisible(false);
+-        }
+-    });
+-
+-    connect(mOutput.data(), &KScreen::Output::rotationChanged,
+-            this, [=]() {
+-        const int index = mRotation->findData(mOutput->rotation());
+-        mRotation->blockSignals(true);
+-        mRotation->setCurrentIndex(index);
+-        mRotation->blockSignals(false);
+-    });
+-
+-    connect(mOutput.data(), &KScreen::Output::currentModeIdChanged,
+-            this, [=]() {
+-        if (mOutput->currentMode()) {
+-            if (mRefreshRate) {
+-                mRefreshRate->blockSignals(true);
+-                slotResolutionChanged(mOutput->currentMode()->size(), false);
+-                mRefreshRate->blockSignals(false);
+-            }
+-        }
+-    });
+-
+-    connect(mOutput.data(), &KScreen::Output::isEnabledChanged, this, [=](){
+-       slotEnableWidget();
+-    });
+-
+-    setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
+-
+-    QVBoxLayout *vbox = new QVBoxLayout(this);
+-    vbox->setContentsMargins(0, 0, 0, 0);
+-    vbox->setSpacing(2);
+-
+-    // 分辨率下拉框
+-    mResolution = new ResolutionSlider(mOutput, this);
+-    mResolution->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
+-
+-    QLabel *resLabel = new QLabel(this);
+-    //~ contents_path /display/resolution
+-    resLabel->setText(tr("resolution"));
+-    resLabel->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
+-    resLabel->setFixedSize(118, 30);
+-
+-    QHBoxLayout *resLayout = new QHBoxLayout();
+-    resLayout->addWidget(resLabel);
+-    resLayout->addWidget(mResolution);
+-
+-    QFrame *resFrame = new QFrame(this);
+-    resFrame->setFrameShape(QFrame::Shape::Box);
+-    resFrame->setLayout(resLayout);
+-
+-    resFrame->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
+-    resFrame->setMinimumSize(552, 50);
+-    resFrame->setMaximumSize(16777215, 50);
+-
+-    vbox->addWidget(resFrame);
+-
+-    connect(mResolution, &ResolutionSlider::resolutionChanged,
+-            this, [=](QSize size){
+-                slotResolutionChanged(size, true);
+-            });
+-
+-    // 方向下拉框
+-    mRotation = new QComboBox(this);
+-    mRotation->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
+-
+-    QLabel *rotateLabel = new QLabel(this);
+-    // ~contents_path /display/orientation
+-    rotateLabel->setText(tr("orientation"));
+-    rotateLabel->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
+-    rotateLabel->setFixedSize(118, 30);
+-
+-    QHBoxLayout *rotateLayout = new QHBoxLayout();
+-    rotateLayout->addWidget(rotateLabel);
+-
+-    rotateLayout->addWidget(mRotation);
+-
+-    QFrame *rotateFrame = new QFrame(this);
+-    rotateFrame->setFrameShape(QFrame::Shape::Box);
+-    rotateFrame->setLayout(rotateLayout);
+-
+-    rotateFrame->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
+-    rotateFrame->setMinimumSize(550, 50);
+-    rotateFrame->setMaximumSize(16777215, 50);
+-
+-    mRotation->addItem(tr("arrow-up"), KScreen::Output::None);
+-    mRotation->addItem(tr("90° arrow-right"), KScreen::Output::Right);
+-    mRotation->addItem(tr("90° arrow-left"), KScreen::Output::Left);
+-    mRotation->addItem(tr("arrow-down"), KScreen::Output::Inverted);
+-    connect(mRotation, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged),
+-            this, &OutputConfig::slotRotationChanged);
+-    mRotation->setCurrentIndex(mRotation->findData(mOutput->rotation()));
+-
+-    vbox->addWidget(rotateFrame);
+-
+-    // 刷新率下拉框
+-    mRefreshRate = new QComboBox(this);
+-
+-    QLabel *freshLabel = new QLabel(this);
+-    // ~contents_path /display/frequency
+-    freshLabel->setText(tr("frequency"));
+-    freshLabel->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
+-    freshLabel->setFixedSize(118, 30);
+-
+-    QHBoxLayout *freshLayout = new QHBoxLayout();
+-    freshLayout->addWidget(freshLabel);
+-    freshLayout->addWidget(mRefreshRate);
+-
+-    QFrame *freshFrame = new QFrame(this);
+-    freshFrame->setFrameShape(QFrame::Shape::Box);
+-    freshFrame->setLayout(freshLayout);
+-
+-    freshFrame->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
+-    freshFrame->setMinimumSize(550, 50);
+-    freshFrame->setMaximumSize(16777215, 50);
+-
+-    vbox->addWidget(freshFrame);
+-
+-    slotResolutionChanged(mResolution->currentResolution(), true);
+-    connect(mRefreshRate, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged),
+-            this, &OutputConfig::slotRefreshRateChanged);
+-
+-    mScaleCombox = new QComboBox(this);
+-    mScaleCombox->setObjectName("scaleCombox");
+-
+-    double scale = getScreenScale();
+-
+-    mScaleCombox->setCurrentText(scaleToString(scale));
+-
+-    if (mScaleCombox->findData(scale) == -1) {
+-        mScaleCombox->addItem(scaleToString(scale), scale);
+-        mScaleCombox->setCurrentText(scaleToString(scale));
+-    }
+-
+-    QLabel *scaleLabel = new QLabel(this);
+-    //~ contents_path /display/screen zoom
+-    scaleLabel->setText(tr("screen zoom"));
+-    scaleLabel->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
+-    scaleLabel->setFixedSize(118, 30);
+-
+-    QHBoxLayout *scaleLayout = new QHBoxLayout();
+-    scaleLayout->addWidget(scaleLabel);
+-    scaleLayout->addWidget(mScaleCombox);
+-
+-    QFrame *scaleFrame = new QFrame(this);
+-    scaleFrame->setFrameShape(QFrame::Shape::Box);
+-    scaleFrame->setLayout(scaleLayout);
+-
+-    scaleFrame->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
+-    scaleFrame->setMinimumSize(550, 50);
+-    scaleFrame->setMaximumSize(16777215, 50);
+-    vbox->addWidget(scaleFrame);
+-    scaleFrame->hide();
+-
+-    slotEnableWidget();
+-}
+-
+-double OutputConfig::getScreenScale()
+-{
+-    double scale = 1.0;
+-    if (QGSettings::isSchemaInstalled(SCALE_SCHEMAS)) {
+-        if (mDpiSettings->keys().contains("scalingFactor")) {
+-            scale = mDpiSettings->get(SCALE_KEY).toDouble();
+-        }
+-    }
+-    return scale;
+-}
+-
+-void OutputConfig::initDpiConnection()
+-{
+-    QByteArray id(SCALE_SCHEMAS);
+-    if (QGSettings::isSchemaInstalled(SCALE_SCHEMAS)) {
+-        mDpiSettings = new QGSettings(id, QByteArray(), this);
+-        connect(mDpiSettings, &QGSettings::changed, this, [=](QString key) {
+-            slotDPIChanged(key);
+-        });
+-    }
+-}
+-
+-QString OutputConfig::scaleToString(double scale)
+-{
+-    return QString::number(scale * 100) + "%";
+-}
+-
+-KScreen::ModePtr OutputConfig::findBestMode(const QSize &size)
+-{
+-    KScreen::ModePtr m_mode;
+-    float refreshRate = 0;
+-    Q_FOREACH (const KScreen::ModePtr &mode, mOutput->modes()) {
+-        if (mode->size() == size && mode->refreshRate() > refreshRate) {
+-            refreshRate = mode->refreshRate();
+-            m_mode = mode;
+-        }
+-    }
+-    return m_mode;
+-}
+-
+-void OutputConfig::setOutput(const KScreen::OutputPtr &output)
+-{
+-    mOutput = output;
+-    initUi();
+-}
+-
+-KScreen::OutputPtr OutputConfig::output() const
+-{
+-    return mOutput;
+-}
+-
+-void OutputConfig::slotResolutionChanged(const QSize &size, bool emitFlag)
+-{
+-    // Ignore disconnected outputs
+-    if (!size.isValid()) {
+-        return;
+-    }
+-    bool mIsModeInit = false;
+-    QString modeID;
+-    KScreen::ModePtr selectMode;
+-    KScreen::ModePtr currentMode = mOutput->currentMode();
+-    QList<KScreen::ModePtr> modes;
+-    Q_FOREACH (const KScreen::ModePtr &mode, mOutput->modes()) {
+-        //初始化时,currentMode可能为空(比如刚插上屏幕)
+-        if (!currentMode || (currentMode && currentMode->size() == size)) {
+-            if (currentMode) {
+-                selectMode = currentMode;
+-            }
+-            mIsModeInit = true;
+-        }
+-        if (mode->size() == size) {
+-            if (!mIsModeInit || !currentMode) {
+-                selectMode = mode;
+-            }
+-            modes << mode;
+-        }
+-    }
+-    //非初始化,则设置选中(用户设置)的mode为该分辨率下刷新率最大的mode
+-    if (!mIsModeInit) {
+-        selectMode = findBestMode(selectMode->size());
+-    }
+-    modeID = selectMode->id();
+-    mRefreshRate->blockSignals(true);
+-    mRefreshRate->clear();
+-    mRefreshRate->blockSignals(false);
+-
+-    for (int i = 0, total = modes.count(); i < total; ++i) {
+-        const KScreen::ModePtr mode = modes.at(i);
+-        QString comText  = refreshRateToText(mode->refreshRate());
+-        int     comIndex = 0;
+-        bool alreadyExisted = false;
+-        for (int j = 0; j < mRefreshRate->count(); ++j) {
+-            if (comText == mRefreshRate->itemText(j)) {
+-                alreadyExisted = true;
+-                break;
+-            }
+-        }
+-
+-        if (alreadyExisted == false) {   //不添加已经存在的项
+-            if (mRefreshRate->count() > 0) {
+-                for (int r = 0; r < mRefreshRate->count(); ++r) {
+-                    if (comText.compare(mRefreshRate->itemText(r)) < 0) {
+-                        comIndex = r + 1;
+-                    } else {
+-                        break;
+-                    }
+-                }
+-            }
+-            mRefreshRate->blockSignals(true);
+-            mRefreshRate->insertItem(comIndex, comText, mode->id());
+-            mRefreshRate->blockSignals(false);
+-        }
+-
+-        //mode是选中的mode,则设置
+-        if (mode == selectMode && mRefreshRate->count() > 0) {
+-            mRefreshRate->blockSignals(true);
+-            mRefreshRate->setCurrentIndex(comIndex);
+-            mRefreshRate->blockSignals(false);
+-        }
+-    }
+-
+-    if (mRefreshRate->count() == 0) {
+-        mRefreshRate->blockSignals(true);
+-        mRefreshRate->addItem(tr("auto"), -1);
+-        mRefreshRate->blockSignals(false);
+-    } else {
+-        if (-1 == mRefreshRate->currentIndex()) {
+-            modeID = mRefreshRate->itemData(0).toString();
+-            // 避免选择50hz以下刷新率为空
+-            mRefreshRate->blockSignals(true);
+-            mRefreshRate->setCurrentIndex(0);
+-            mRefreshRate->blockSignals(false);
+-        }
+-    }
+-
+-    mOutput->setCurrentModeId(modeID);
+-
+-    if (!mIsModeInit) {
+-        if (emitFlag) {
+-            changeItm = RESOLUTION;
+-            Q_EMIT changed();
+-        }
+-    }
+-}
+-
+-void OutputConfig::slotRotationChanged(int index)
+-{
+-    KScreen::Output::Rotation rotation
+-        = static_cast<KScreen::Output::Rotation>(mRotation->itemData(index).toInt());
+-    mOutput->setRotation(rotation);
+-
+-    changeItm = ORIENTATION;
+-    Q_EMIT changed();
+-}
+-
+-void OutputConfig::slotRefreshRateChanged(int index)
+-{
+-    QString modeId;
+-    if (index < 0) {
+-        // Item 0 is "Auto" - "Auto" is equal to highest refresh rate (at least
+-        // that's how I understand it, and since the combobox is sorted in descending
+-        // order, we just pick the second item from top
+-        modeId = mRefreshRate->itemData(0).toString();
+-    } else {
+-        modeId = mRefreshRate->itemData(index).toString();
+-    }
+-    qDebug() << "modeId is:" << modeId << endl;
+-    mOutput->setCurrentModeId(modeId);
+-    changeItm = FREQUENCY;
+-    Q_EMIT changed();
+-}
+-
+-void OutputConfig::slotScaleChanged(int index)
+-{
+-    Q_EMIT scaleChanged(mScaleCombox->itemData(index).toDouble());
+-}
+-
+-void OutputConfig::slotDPIChanged(QString key)
+-{
+-    if (mScaleCombox == nullptr)
+-        return;
+-    if (!key.compare("scalingFactor", Qt::CaseSensitive)) {
+-        double scale = mDpiSettings->get(key).toDouble();
+-        if (mScaleCombox->findData(scale) == -1) {
+-            mScaleCombox->addItem(scaleToString(scale), scale);
+-        }
+-        mScaleCombox->blockSignals(true);
+-        mScaleCombox->setCurrentText(scaleToString(scale));
+-        mScaleCombox->blockSignals(false);
+-    }
+-}
+-
+-void OutputConfig::slotEnableWidget()
+-{
+-    if (mOutput.data()->isEnabled()) {
+-        mResolution->setEnabled(true);
+-        mRotation->setEnabled(true);
+-        mRefreshRate->setEnabled(true);
+-    } else {
+-        mResolution->setEnabled(false);
+-        mRotation->setEnabled(false);
+-        mRefreshRate->setEnabled(false);
+-    }
+-}
+-
+-void OutputConfig::setShowScaleOption(bool showScaleOption)
+-{
+-    mShowScaleOption = showScaleOption;
+-    if (mOutput) {
+-        initUi();
+-    }
+-}
+-
+-bool OutputConfig::showScaleOption() const
+-{
+-    return mShowScaleOption;
+-}
+-
+-// 拿取配置
+-void OutputConfig::initConfig(const KScreen::ConfigPtr &config)
+-{
+-    mConfig = config;
+-}
+-
+-QString OutputConfig::refreshRateToText(float refreshRate)
+-{
+-    return tr("%1 Hz").arg(QLocale().toString(refreshRate));
+-}
+diff --git a/plugins/system/display_hw/outputconfig.h b/plugins/system/display_hw/outputconfig.h
+deleted file mode 100644
+index 3a09a2c..0000000
+--- a/plugins/system/display_hw/outputconfig.h
++++ /dev/null
+@@ -1,88 +0,0 @@
+-#ifndef OUTPUTCONFIG_H
+-#define OUTPUTCONFIG_H
+-
+-#include <QGroupBox>
+-#include <QComboBox>
+-#include <QWidget>
+-
+-#include <KF5/KScreen/kscreen/output.h>
+-
+-#include <QGSettings>
+-
+-#include "scalesize.h"
+-
+-class QCheckBox;
+-class ResolutionSlider;
+-class QLabel;
+-class QStyledItemDelegate;
+-
+-namespace Ui {
+-class KScreenWidget;
+-}
+-
+-class OutputConfig : public QWidget
+-{
+-    Q_OBJECT
+-
+-public:
+-    explicit OutputConfig(QWidget *parent);
+-    explicit OutputConfig(const KScreen::OutputPtr &output, QWidget *parent = nullptr);
+-    ~OutputConfig() override;
+-
+-    virtual void setOutput(const KScreen::OutputPtr &output);
+-    KScreen::OutputPtr output() const;
+-
+-    void setTitle(const QString &title);
+-    void setShowScaleOption(bool showScaleOption);
+-    bool showScaleOption() const;
+-
+-    void initConfig(const KScreen::ConfigPtr &config);
+-    QString refreshRateToText(float refreshRate);
+-
+-protected Q_SLOTS:
+-    void slotResolutionChanged(const QSize &size, bool emitFlag);
+-    void slotRotationChanged(int index);
+-    void slotRefreshRateChanged(int index);
+-    void slotScaleChanged(int index);
+-    void slotDPIChanged(QString key);
+-    void slotEnableWidget();
+-
+-Q_SIGNALS:
+-    void changed();
+-    void scaleChanged(double scale);
+-
+-protected:
+-    virtual void initUi();
+-    double getScreenScale();
+-
+-private:
+-    void initDpiConnection();
+-    QString scaleToString(double scale);
+-    KScreen::ModePtr findBestMode(const QSize &size);
+-
+-protected:
+-    KScreen::OutputPtr mOutput;
+-    QLabel *mTitle = nullptr;
+-    QCheckBox *mEnabled = nullptr;
+-    ResolutionSlider *mResolution = nullptr;
+-
+-    QComboBox *mRotation = nullptr;
+-    QComboBox *mScale = nullptr;
+-    QComboBox *mRefreshRate = nullptr;
+-    QComboBox *mMonitor = nullptr;
+-    QComboBox *mScaleCombox = nullptr;
+-
+-    bool mShowScaleOption = false;
+-    bool mIsWayland = false;
+-    bool mIsFirstLoad = true;
+-
+-#if QT_VERSION <= QT_VERSION_CHECK(5, 12, 0)
+-    KScreen::ConfigPtr mConfig;
+-#else
+-    KScreen::ConfigPtr mConfig = nullptr;
+-#endif
+-
+-    QGSettings *mDpiSettings = nullptr;
+-};
+-
+-#endif // OUTPUTCONFIG_H
+diff --git a/plugins/system/display_hw/qml.qrc b/plugins/system/display_hw/qml.qrc
+deleted file mode 100644
+index 1ffe197..0000000
+--- a/plugins/system/display_hw/qml.qrc
++++ /dev/null
+@@ -1,6 +0,0 @@
+-<RCC>
+-    <qresource prefix="/">
+-        <file>qml/Output.qml</file>
+-        <file>qml/main.qml</file>
+-    </qresource>
+-</RCC>
+diff --git a/plugins/system/display_hw/qml/Output.qml b/plugins/system/display_hw/qml/Output.qml
+deleted file mode 100644
+index d6ae382..0000000
+--- a/plugins/system/display_hw/qml/Output.qml
++++ /dev/null
+@@ -1,277 +0,0 @@
+-/*
+-    Copyright (C) 2012  Dan Vratil <dvratil@redhat.com>
+-
+-    This library is free software; you can redistribute it and/or
+-    modify it under the terms of the GNU Lesser General Public
+-    License as published by the Free Software Foundation; either
+-    version 2.1 of the License, or (at your option) any later version.
+-
+-    This library is distributed in the hope that it will be useful,
+-    but WITHOUT ANY WARRANTY; without even the implied warranty of
+-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+-    Lesser General Public License for more details.
+-
+-    You should have received a copy of the GNU Lesser General Public
+-    License along with this library; if not, write to the Free Software
+-    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+-*/
+-
+-import QtQuick 2.1
+-import QtGraphicalEffects 1.0
+-import org.kde.kscreen 1.0
+-
+-QMLOutput {
+-
+-    id: root;
+-
+-    signal clicked();
+-    signal primaryTriggered(string self);
+-    signal enabledToggled(string self);
+-    signal mousePressed();
+-    signal mouseReleased(bool isReleased);
+-    signal positionChanged(bool isReleased);
+-    signal rotationChanged(bool isReleased);
+-    signal widthChanged(bool isReleased);
+-    signal heightChanged(bool isReleased);
+-
+-    property bool isDragged: monitorMouseArea.drag.active;
+-    property bool isDragEnabled: true;
+-    property bool isToggleButtonVisible: false;
+-    property bool hasMoved: false;
+-
+-    property var screenName:[
+-        "Unknown",
+-        "VGA",
+-        "DVI",
+-        "DVII",
+-        "DVIA",
+-        "DVID",
+-        "HDMI",
+-        "eDP",
+-        "TV",
+-        "TVComposite",
+-        "TVSVideo",
+-        "TVComponent",
+-        "TVSCART",
+-        "TVC4",
+-        "DP"
+-    ];
+-
+-    width: monitorMouseArea.width;
+-    height: monitorMouseArea.height;
+-
+-    visible: (opacity > 0);
+-    opacity: output.connected ? 1.0 : 0.0;
+-
+-    Component.onCompleted: {
+-        root.updateRootProperties();
+-    }
+-
+-    SystemPalette {
+-        id: palette;
+-    }
+-
+-    MouseArea {
+-        id: monitorMouseArea;
+-        width: root.currentOutputWidth * screen.outputScale;
+-        height: root.currentOutputHeight * screen.outputScale
+-        anchors.centerIn: parent;
+-        //是否激活时的透明度
+-        opacity: root.output.enabled ? 1.0 : 0.3;
+-        transformOrigin: Item.Center;
+-        rotation: {
+-            if (output.rotation === KScreenOutput.None) {
+-                return 0;
+-            } else if (output.rotation === KScreenOutput.Left) {
+-                return 270;
+-            } else if (output.rotation === KScreenOutput.Inverted) {
+-                return 180;
+-            } else {
+-                return 90;
+-            }
+-        }
+-
+-        hoverEnabled: true;
+-        preventStealing: true;
+-
+-        drag {
+-            target: root.isDragEnabled && !root.isCloneMode && (root.enableCount >= 2) ? root : null;
+-            axis: Drag.XandYAxis;
+-            minimumX: 0;
+-            maximumX: screen.maxScreenSize.width - root.width;
+-            minimumY: 0;
+-            maximumY: screen.maxScreenSize.height - root.height;
+-
+-            filterChildren: false;
+-        }
+-
+-        drag.onActiveChanged: {
+-            /* If the drag is shorter then the animation then make sure
+-             * we won't end up in an inconsistent state */
+-            if (dragActiveChangedAnimation.running) {
+-                dragActiveChangedAnimation.complete();
+-            }
+-
+-            dragActiveChangedAnimation.running = true;
+-        }
+-
+-        onPressed: root.clicked();
+-        onReleased: root.mouseReleased(true)
+-        onRotationChanged: root.rotationChanged(false);
+-        onWidthChanged: root.widthChanged(false);
+-        onHeightChanged: root.heightChanged(false);
+-
+-        /* FIXME: This could be in 'Behavior', but MouseArea had
+-         * some complaints...to tired to investigate */
+-        PropertyAnimation {
+-            id: dragActiveChangedAnimation;
+-
+-            target: monitor;
+-            property: "opacity";
+-            from: monitorMouseArea.drag.active ? 0.7 : 1.0
+-            to: monitorMouseArea.drag.active ? 1.0 : 0.7
+-            duration: 100;
+-            easing.type: "OutCubic";
+-        }
+-
+-        Behavior on opacity {
+-            PropertyAnimation {
+-                property: "opacity";
+-                easing.type: "OutCubic";
+-                duration: 250;
+-            }
+-        }
+-
+-        Behavior on rotation {
+-            RotationAnimation {
+-                easing.type: "OutCubic"
+-                duration: 250;
+-                direction: RotationAnimation.Shortest;
+-            }
+-        }
+-
+-        Behavior on width {
+-            PropertyAnimation {
+-                property: "width";
+-                easing.type: "OutCubic";
+-                duration: 150;
+-            }
+-        }
+-
+-        Behavior on height {
+-            PropertyAnimation {
+-                property: "height";
+-                easing.type: "OutCubic";
+-                duration: 150;
+-            }
+-        }
+-
+-        Rectangle {
+-            id: monitor;
+-            anchors.fill: parent;
+-            //圆角
+-            radius: 8;
+-            //是否点击到屏幕
+-            color: root.focus? "#3D6BE5" : "#AEACAD";
+-            smooth: true;
+-            clip: true;
+-
+-            border {
+-                color: root.focus ? "#3498DB" : "#AED6F1";
+-                width: 1;
+-
+-                Behavior on color {
+-                    PropertyAnimation {
+-                        duration: 150;
+-                    }
+-                }
+-            }
+-
+-            Rectangle {
+-                id: posLabel;
+-                y: 4;
+-                x: 4;
+-                width: childrenRect.width + 5;
+-                height: childrenRect.height + 2;
+-                radius: 8;
+-                opacity: root.output.enabled && monitorMouseArea.drag.active ? 1.0 : 0.0;
+-                visible: opacity != 0.0;
+-
+-                color: "#101010";
+-
+-                Text {
+-                    id: posLabelText;
+-                    text: root.outputX + "," + root.outputY;
+-                    color: "white";
+-                    y: 2;
+-                    x: 2;
+-                }
+-            }
+-
+-            Item {
+-                //文字位置
+-                y: ((parent.height - orientationPanel.height) / 2) - (implicitHeight / 2)
+-
+-                anchors {
+-                    left: parent.left;
+-                    right: parent.right;
+-                    leftMargin: 5;
+-                    rightMargin: 5;
+-                }
+-
+-                Text {
+-                    id: labelVendor;
+-                    text: if (root.isCloneMode) {
+-                            return ("Unity");
+-                          } else {
+-                            return screenName[root.output.type];
+-                          }
+-
+-                    anchors {
+-                        verticalCenter: parent.verticalCenter;
+-                        left: parent.left;
+-                        right: parent.right;
+-                    }
+-                    horizontalAlignment: Text.AlignHCenter;
+-                    color: "#FFFFFF";
+-                    font.pixelSize: 12;
+-                    elide: Text.ElideRight;
+-                }
+-            }
+-        }
+-        Item {
+-            id: orientationPanelContainer;
+-
+-            anchors.fill: monitor;
+-
+-            visible: false
+-
+-            Rectangle {
+-                id: orientationPanel;
+-                height: 10;
+-                //底部颜色
+-                color:  palette.highlight ;
+-                smooth: true;
+-
+-                Behavior on color {
+-                    PropertyAnimation {
+-                        duration: 150;
+-                    }
+-                }
+-            }
+-        }
+-
+-        OpacityMask {
+-            anchors.fill: orientationPanelContainer;
+-            source: orientationPanelContainer;
+-            maskSource: monitor;
+-        }
+-    }
+-
+-    Behavior on opacity {
+-        PropertyAnimation {
+-            duration: 200;
+-            easing.type: "OutCubic";
+-        }
+-    }
+-}
+diff --git a/plugins/system/display_hw/qml/main.qml b/plugins/system/display_hw/qml/main.qml
+deleted file mode 100644
+index 2c93116..0000000
+--- a/plugins/system/display_hw/qml/main.qml
++++ /dev/null
+@@ -1,75 +0,0 @@
+-/*
+-    Copyright (C) 2012  Dan Vratil <dvratil@redhat.com>
+-
+-    This library is free software; you can redistribute it and/or
+-    modify it under the terms of the GNU Lesser General Public
+-    License as published by the Free Software Foundation; either
+-    version 2.1 of the License, or (at your option) any later version.
+-
+-    This library is distributed in the hope that it will be useful,
+-    but WITHOUT ANY WARRANTY; without even the implied warranty of
+-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+-    Lesser General Public License for more details.
+-
+-    You should have received a copy of the GNU Lesser General Public
+-    License along with this library; if not, write to the Free Software
+-    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+-
+-*/
+-
+-import QtQuick 2.1
+-import QtQuick.Controls 1.1 as Controls
+-import org.kde.kscreen 1.0
+-
+-Item {
+-    id: root;
+-
+-    property variant virtualScreen: null;
+-
+-    objectName: "root";
+-    focus: true;
+-
+-    SystemPalette {
+-        id: palette;
+-    }
+-
+-    MouseArea {
+-        anchors.fill: parent;
+-        focus: true;
+-
+-        Rectangle {
+-            id: background;
+-
+-            anchors.fill: parent;
+-            focus: true;
+-
+-            color: "transparent";
+-
+-            FocusScope {
+-
+-                id: outputViewFocusScope;
+-
+-                anchors.fill: parent;
+-                focus: true;
+-
+-                QMLScreen {
+-                    id: outputView;
+-                    anchors.fill: parent;
+-                    clip: true;
+-                    objectName: "outputView";
+-                }
+-            }
+-
+-            Column {
+-                anchors {
+-                    left: parent.left;
+-                    bottom: parent.bottom;
+-                    margins: 5;
+-                }
+-                spacing: 5;
+-            }
+-        }
+-
+-    }
+-
+-}
+diff --git a/plugins/system/display_hw/resolutionslider.cpp b/plugins/system/display_hw/resolutionslider.cpp
+deleted file mode 100644
+index 1e93606..0000000
+--- a/plugins/system/display_hw/resolutionslider.cpp
++++ /dev/null
+@@ -1,206 +0,0 @@
+-#include "resolutionslider.h"
+-#include "utils.h"
+-
+-#include <QGridLayout>
+-#include <QLabel>
+-#include <QSlider>
+-#include <QComboBox>
+-#include <QFile>
+-#include <QStyledItemDelegate>
+-
+-#include <QDBusInterface>
+-
+-#include <KF5/KScreen/kscreen/output.h>
+-
+-static bool sizeLessThan(const QSize &sizeA, const QSize &sizeB)
+-{
+-    return sizeA.width() * sizeA.height() < sizeB.width() * sizeB.height();
+-}
+-
+-ResolutionSlider::ResolutionSlider(const KScreen::OutputPtr &output, QWidget *parent) :
+-    QWidget(parent),
+-    mOutput(output)
+-{
+-    QString sessionType = getenv("XDG_SESSION_TYPE");
+-    if (sessionType.compare("wayland", Qt::CaseSensitive)) {
+-       mExcludeModes.push_back(QSize(1152, 864));
+-    }
+-
+-    connect(output.data(), &KScreen::Output::currentModeIdChanged,
+-            this, &ResolutionSlider::slotOutputModeChanged);
+-    connect(output.data(), &KScreen::Output::modesChanged,
+-            this, &ResolutionSlider::init);
+-    init();
+-}
+-
+-ResolutionSlider::~ResolutionSlider()
+-{
+-}
+-
+-void ResolutionSlider::init()
+-{
+-    this->setMinimumSize(402, 30);
+-    this->setMaximumSize(1677215, 30);
+-    mModes.clear();
+-    Q_FOREACH (const KScreen::ModePtr &mode, mOutput->modes()) {
+-        if (mModes.contains(mode->size())
+-            || (mode->size().width() * mode->size().height()) < (1024 * 768)
+-            || mExcludeModes.contains(mode->size())) {
+-            continue;
+-        }
+-        mModes << mode->size();
+-    }
+-    std::sort(mModes.begin(), mModes.end(), sizeLessThan);
+-
+-    delete layout();
+-    delete mSmallestLabel;
+-    mSmallestLabel = nullptr;
+-    delete mBiggestLabel;
+-    mBiggestLabel = nullptr;
+-    delete mCurrentLabel;
+-    mCurrentLabel = nullptr;
+-    delete mSlider;
+-    mSlider = nullptr;
+-    delete mComboBox;
+-    mComboBox = nullptr;
+-
+-    QGridLayout *layout = new QGridLayout(this);
+-    int margin = layout->margin();
+-    // Avoid double margins
+-    layout->setContentsMargins(0, 0, 0, 0);
+-    if (!mModes.empty()) {
+-        std::reverse(mModes.begin(), mModes.end());
+-        mComboBox = new QComboBox(this);
+-        mComboBox->setMinimumSize(402, 30);
+-        mComboBox->setMaximumSize(1677215, 30);
+-
+-        int currentModeIndex = -1;
+-        int preferredModeIndex = -1;
+-        Q_FOREACH (const QSize &size, mModes) {
+-#ifdef __sw_64__
+-            if (size.width() < int(1920)) {
+-                continue;
+-            }
+-#endif
+-            mComboBox->addItem(Utils::sizeToString(size));
+-
+-            if (mOutput->currentMode() && (mOutput->currentMode()->size() == size)) {
+-                currentModeIndex = mComboBox->count() - 1;
+-            } else if (mOutput->preferredMode() && (mOutput->preferredMode()->size() == size)) {
+-                preferredModeIndex = mComboBox->count() - 1;
+-            }
+-        }
+-        if (currentModeIndex != -1) {
+-            mComboBox->setCurrentIndex(currentModeIndex);
+-        } else if (preferredModeIndex != -1) {
+-            mComboBox->setCurrentIndex(preferredModeIndex);
+-        }
+-
+-        layout->addWidget(mComboBox, 0, 0, 1, 1);
+-        connect(mComboBox, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged),
+-                this, &ResolutionSlider::slotValueChanged, Qt::UniqueConnection);
+-        // bug#75687触发两次应用信号
+-        // Q_EMIT resolutionChanged(mModes.at(mComboBox->currentIndex()));
+-    } else {
+-        mCurrentLabel = new QLabel(this);
+-        mCurrentLabel->setAlignment(Qt::AlignCenter);
+-        layout->addWidget(mCurrentLabel, 1, 0, 1, 3);
+-
+-        if (mModes.isEmpty()) {
+-            mCurrentLabel->setText(tr("No available resolutions"));
+-        } else if (mModes.count() == 1) {
+-            mCurrentLabel->setText(Utils::sizeToString(mModes.first()));
+-        } else {
+-            // No double margins left and right, but they are needed on top and bottom
+-            layout->setContentsMargins(0, margin, 0, margin);
+-            mSlider = new Uslider(Qt::Horizontal, this);
+-            mSlider->setTickInterval(1);
+-            mSlider->setTickPosition(QSlider::TicksBelow);
+-            mSlider->setSingleStep(1);
+-            mSlider->setPageStep(1);
+-            mSlider->setMinimum(0);
+-            mSlider->setMaximum(mModes.size() - 1);
+-            mSlider->setSingleStep(1);
+-            if (mOutput->currentMode()) {
+-                mSlider->setValue(mModes.indexOf(mOutput->currentMode()->size()));
+-            } else if (mOutput->preferredMode()) {
+-                mSlider->setValue(mModes.indexOf(mOutput->preferredMode()->size()));
+-            } else {
+-                mSlider->setValue(mSlider->maximum());
+-            }
+-            layout->addWidget(mSlider, 0, 1);
+-            connect(mSlider, &QSlider::valueChanged,
+-                    this, &ResolutionSlider::slotValueChanged);
+-
+-            mSmallestLabel = new QLabel(this);
+-            mSmallestLabel->setText(Utils::sizeToString(mModes.first()));
+-            layout->addWidget(mSmallestLabel, 0, 0);
+-            mBiggestLabel = new QLabel(this);
+-            mBiggestLabel->setText(Utils::sizeToString(mModes.last()));
+-            layout->addWidget(mBiggestLabel, 0, 2);
+-
+-            const auto size = mModes.at(mSlider->value());
+-            mCurrentLabel->setText(Utils::sizeToString(size));
+-            Q_EMIT resolutionChanged(size);
+-        }
+-    }
+-}
+-
+-QSize ResolutionSlider::currentResolution() const
+-{
+-    if (mModes.isEmpty()) {
+-        return QSize();
+-    }
+-
+-    if (mModes.size() < 2) {
+-        return mModes.first();
+-    }
+-
+-    if (mSlider) {
+-        return mModes.at(mSlider->value());
+-    } else {
+-        const int i = mComboBox->currentIndex();
+-        return i > -1 ? mModes.at(i) : QSize();
+-    }
+-}
+-
+-QSize ResolutionSlider::getMaxResolution() const
+-{
+-    if (mModes.isEmpty()) {
+-        return QSize();
+-    }
+-    return mModes.first();
+-}
+-
+-void ResolutionSlider::setResolution(const QSize &size)
+-{
+-    mComboBox->blockSignals(true);
+-    mComboBox->setCurrentIndex(mModes.indexOf(size));
+-    mComboBox->blockSignals(false);
+-}
+-
+-void ResolutionSlider::slotOutputModeChanged()
+-{
+-    if (!mOutput->currentMode()) {
+-        return;
+-    }
+-
+-    if (mSlider) {
+-        mSlider->blockSignals(true);
+-        mSlider->setValue(mModes.indexOf(mOutput->currentMode()->size()));
+-        mSlider->blockSignals(false);
+-    } else if (mComboBox) {
+-        mComboBox->blockSignals(true);
+-        mComboBox->setCurrentIndex(mModes.indexOf(mOutput->currentMode()->size()));
+-        mComboBox->blockSignals(false);
+-    }
+-}
+-
+-void ResolutionSlider::slotValueChanged(int value)
+-{
+-    const QSize &size = mModes.at(value);
+-    if (mCurrentLabel) {
+-        mCurrentLabel->setText(Utils::sizeToString(size));
+-    }
+-    Q_EMIT resolutionChanged(size);
+-}
+diff --git a/plugins/system/display_hw/resolutionslider.h b/plugins/system/display_hw/resolutionslider.h
+deleted file mode 100644
+index 9f870b7..0000000
+--- a/plugins/system/display_hw/resolutionslider.h
++++ /dev/null
+@@ -1,53 +0,0 @@
+-#ifndef RESOLUTIONSLIDER_H
+-#define RESOLUTIONSLIDER_H
+-
+-#include <QWidget>
+-#include <QSet>
+-
+-#include <KF5/KScreen/kscreen/output.h>
+-#include "uslider.h"
+-
+-class QSlider;
+-class QLabel;
+-class QComboBox;
+-class QStyledItemDelegate;
+-
+-class ResolutionSlider : public QWidget
+-{
+-    Q_OBJECT
+-
+-public:
+-    explicit ResolutionSlider(const KScreen::OutputPtr &output, QWidget *parent = nullptr);
+-    ~ResolutionSlider() override;
+-
+-    QSize currentResolution() const;
+-    QSize getMaxResolution() const;
+-
+-    void setResolution(const QSize &size);
+-
+-Q_SIGNALS:
+-    void resolutionChanged(const QSize &size, bool emitFlag = true);
+-
+-public Q_SLOTS:
+-    void slotValueChanged(int);
+-    void slotOutputModeChanged();
+-
+-private:
+-    void init();
+-
+-private:
+-    KScreen::OutputPtr mOutput;
+-
+-    QList<QSize> mModes;
+-    QList<QSize> mExcludeModes;
+-
+-    QLabel *mSmallestLabel = nullptr;
+-    QLabel *mBiggestLabel = nullptr;
+-    QLabel *mCurrentLabel = nullptr;
+-    Uslider *mSlider = nullptr;
+-    QComboBox *mComboBox = nullptr;
+-
+-    bool mIsWayland = false;
+-};
+-
+-#endif // RESOLUTIONSLIDER_H
+diff --git a/plugins/system/display_hw/scalesize.h b/plugins/system/display_hw/scalesize.h
+deleted file mode 100644
+index e75c410..0000000
+--- a/plugins/system/display_hw/scalesize.h
++++ /dev/null
+@@ -1,42 +0,0 @@
+-#ifndef SCALESIZE_H
+-#define SCALESIZE_H
+-
+-#include <QSize>
+-typedef enum{
+-    RESOLUTION,
+-    ORIENTATION,
+-    FREQUENCY
+-}CONFIG;
+-
+-#define SCALE_SCHEMAS "org.ukui.SettingsDaemon.plugins.xsettings"
+-#define SCALE_KEY     "scaling-factor"
+-
+-const QSize KRsolution(1920, 1080);
+-
+-const QVector<QSize> k125Scale{QSize(1280, 1024), QSize(1440, 900), QSize(1600, 900),
+-                               QSize(1680, 1050)};
+-
+-const QVector<QSize> k150Scale{ QSize(1920, 1080), QSize(1920, 1200),
+-                               QSize(1920, 1280), QSize(2048, 1080), QSize(2048, 1280),
+-                               QSize(2160, 1440), QSize(2560, 1440),QSize(3840, 2160)};
+-
+-const QVector<QSize> k175Scale{QSize(2048, 1080), QSize(2048, 1280), QSize(2160, 1440),
+-                               QSize(2560, 1440), QSize(3840, 2160)};
+-
+-const QVector<QSize> k200Scale{QSize(2048, 1080), QSize(2048, 1280), QSize(2160, 1440),
+-                               QSize(2560, 1440), QSize(3840, 2160)};
+-
+-const QVector<QSize> k250Scale{QSize(2560, 1440), QSize(3840, 2160)};
+-
+-const QVector<QSize> k275Scale{QSize(3840, 2160)};
+-
+-
+-extern QSize  mScaleSize;
+-
+-extern QSize mScaleSizeRes;
+-
+-extern double mScreenScale;
+-
+-extern int changeItm;
+-
+-#endif // SCALESIZE_H
+diff --git a/plugins/system/display_hw/screenConfig.h b/plugins/system/display_hw/screenConfig.h
+deleted file mode 100644
+index 82f0672..0000000
+--- a/plugins/system/display_hw/screenConfig.h
++++ /dev/null
+@@ -1,35 +0,0 @@
+-#ifndef SCREENCONFIG_H
+-#define SCREENCONFIG_H
+-
+-#include <QDBusArgument>
+-#include <QString>
+-
+-struct ScreenConfig
+-{
+-    QString screenId;
+-    QString screenModeId;
+-    int screenPosX;
+-    int screenPosY;
+-    bool primary;
+-
+-    friend QDBusArgument &operator<<(QDBusArgument &argument, const ScreenConfig &screenStruct)
+-    {
+-        argument.beginStructure();
+-        argument << screenStruct.screenId  << screenStruct.screenModeId << screenStruct.screenPosX
+-                 << screenStruct.screenPosY << screenStruct.primary;
+-        argument.endStructure();
+-        return argument;
+-    }
+-
+-    friend const QDBusArgument &operator>>(const QDBusArgument &argument, ScreenConfig &screenStruct)
+-    {
+-        argument.beginStructure();
+-        argument >> screenStruct.screenId >> screenStruct.screenModeId
+-                 >> screenStruct.screenPosX >> screenStruct.screenPosY >> screenStruct.primary;
+-        argument.endStructure();
+-        return argument;
+-    }
+-};
+-Q_DECLARE_METATYPE(ScreenConfig)
+-
+-#endif // SCREENCONFIG_H
+diff --git a/plugins/system/display_hw/unifiedoutputconfig.cpp b/plugins/system/display_hw/unifiedoutputconfig.cpp
+deleted file mode 100644
+index a8f8e3b..0000000
+--- a/plugins/system/display_hw/unifiedoutputconfig.cpp
++++ /dev/null
+@@ -1,489 +0,0 @@
+-#include "unifiedoutputconfig.h"
+-#include "resolutionslider.h"
+-#include "utils.h"
+-
+-#include <QComboBox>
+-#include <QIcon>
+-#include <QLabel>
+-#include <QGridLayout>
+-#include <QSpacerItem>
+-#include <QCheckBox>
+-#include <QGroupBox>
+-#include <QFormLayout>
+-#include <QStyledItemDelegate>
+-#include <QFile>
+-#include <QVector>
+-#include <QCryptographicHash>
+-
+-#include <KF5/KScreen/kscreen/output.h>
+-#include <KF5/KScreen/kscreen/config.h>
+-#include <KF5/KScreen/kscreen/getconfigoperation.h>
+-
+-#include <KF5/KConfigCore/KSharedConfig>
+-#include <KF5/KConfigCore/KConfigGroup>
+-
+-bool operator<(const QSize &s1, const QSize &s2)
+-{
+-    return s1.width() * s1.height() < s2.width() * s2.height();
+-}
+-
+-template<>
+-bool qMapLessThanKey(const QSize &s1, const QSize &s2)
+-{
+-    return s1 < s2;
+-}
+-
+-UnifiedOutputConfig::UnifiedOutputConfig(const KScreen::ConfigPtr &config, QWidget *parent) :
+-    OutputConfig(parent),
+-    mConfig(config)
+-{
+-
+-}
+-
+-UnifiedOutputConfig::~UnifiedOutputConfig()
+-{
+-}
+-
+-void UnifiedOutputConfig::setOutput(const KScreen::OutputPtr &output)
+-{
+-    mOutput = output;
+-
+-    mClones.clear();
+-    mClones.reserve(mOutput->clones().count());
+-    Q_FOREACH (int id, mOutput->clones()) {
+-        mClones << mConfig->output(id);
+-    }
+-    mClones << mOutput;
+-
+-    OutputConfig::setOutput(output);
+-}
+-
+-void UnifiedOutputConfig::initUi()
+-{
+-    QVBoxLayout *vbox = new QVBoxLayout(this);
+-    vbox->setContentsMargins(0, 0, 0, 0);
+-    setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
+-
+-    KScreen::OutputPtr fakeOutput = createFakeOutput();
+-    mResolution = new ResolutionSlider(fakeOutput, this);
+-
+-    mResolution->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
+-    mResolution->setMinimumSize(402, 30);
+-
+-    //监听,否则无法处理修改分辨率/刷新率未保存
+-    connect(mOutput.data(), &KScreen::Output::currentModeIdChanged,
+-            this, &UnifiedOutputConfig::slotRestoreResoltion);
+-
+-    connect(mOutput.data(), &KScreen::Output::rotationChanged,
+-            this, &UnifiedOutputConfig::slotRestoreRatation);
+-
+-    QLabel *resLabel = new QLabel(this);
+-    resLabel->setText(tr("resolution"));
+-    resLabel->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
+-    resLabel->setMinimumSize(118, 30);
+-    resLabel->setMaximumSize(118, 30);
+-
+-    QHBoxLayout *resLayout = new QHBoxLayout();
+-    resLayout->addWidget(resLabel);
+-    resLayout->addWidget(mResolution);
+-
+-    QFrame *resFrame = new QFrame(this);
+-    resFrame->setFrameShape(QFrame::Shape::Box);
+-    resFrame->setLayout(resLayout);
+-
+-    resFrame->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
+-    resFrame->setMinimumSize(552, 50);
+-    resFrame->setMaximumSize(16777215, 50);
+-
+-    vbox->addWidget(resFrame);
+-    connect(mResolution, &ResolutionSlider::resolutionChanged,
+-            this, [=](QSize size, bool emitFlag){
+-                slotResolutionChanged(size, emitFlag);
+-            });
+-
+-    // 方向下拉框
+-    mRotation = new QComboBox(this);
+-
+-    mRotation->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
+-    mRotation->setMinimumSize(402, 30);
+-    mRotation->setMaximumSize(16777215, 30);
+-
+-    QLabel *rotateLabel = new QLabel(this);
+-    rotateLabel->setText(tr("orientation"));
+-    rotateLabel->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
+-    rotateLabel->setMinimumSize(118, 30);
+-    rotateLabel->setMaximumSize(118, 30);
+-
+-    mRotation->addItem(tr("arrow-up"), KScreen::Output::None);
+-    mRotation->addItem(tr("90° arrow-right"), KScreen::Output::Right);
+-    mRotation->addItem(tr("90° arrow-left"), KScreen::Output::Left);
+-    mRotation->addItem(tr("arrow-down"), KScreen::Output::Inverted);
+-
+-    int index = mRotation->findData(mOutput->rotation());
+-    mRotation->setCurrentIndex(index);
+-
+-    connect(mRotation, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged),
+-            this, &UnifiedOutputConfig::slotRotationChangedDerived);
+-
+-    QHBoxLayout *roatateLayout = new QHBoxLayout();
+-    roatateLayout->addWidget(rotateLabel);
+-    roatateLayout->addWidget(mRotation);
+-
+-    QFrame *rotateFrame = new QFrame(this);
+-    rotateFrame->setFrameShape(QFrame::Shape::Box);
+-    rotateFrame->setLayout(roatateLayout);
+-
+-    rotateFrame->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
+-    rotateFrame->setMinimumSize(552, 50);
+-    rotateFrame->setMaximumSize(16777215, 50);
+-
+-    vbox->addWidget(rotateFrame);
+-
+-    // 统一输出刷新率下拉框
+-    mRefreshRate = new QComboBox(this);
+-    mRefreshRate->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
+-    mRefreshRate->setMinimumSize(402, 30);
+-    mRefreshRate->setMaximumSize(16777215, 30);
+-
+-    QLabel *freshLabel = new QLabel(this);
+-    freshLabel->setText(tr("frequency"));
+-    freshLabel->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
+-    freshLabel->setMinimumSize(118, 30);
+-    freshLabel->setMaximumSize(118, 30);
+-
+-    mRefreshRate->addItem(tr("auto"), -1);
+-
+-    QHBoxLayout *freshLayout = new QHBoxLayout();
+-    freshLayout->addWidget(freshLabel);
+-    freshLayout->addWidget(mRefreshRate);
+-
+-    QFrame *freshFrame = new QFrame(this);
+-    freshFrame->setFrameShape(QFrame::Shape::Box);
+-    freshFrame->setLayout(freshLayout);
+-
+-    vbox->addWidget(freshFrame);
+-
+-    freshFrame->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
+-    freshFrame->setMinimumSize(552, 50);
+-    freshFrame->setMaximumSize(16777215, 50);
+-
+-    slotResolutionChanged(mResolution->currentResolution(), false);
+-    connect(mRefreshRate, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged),
+-        this, &UnifiedOutputConfig::slotRefreshRateChanged);
+-    QObject::connect(new KScreen::GetConfigOperation(), &KScreen::GetConfigOperation::finished, this,
+-                         [&](KScreen::ConfigOperation *op) {
+-        KScreen::ConfigPtr sConfig = qobject_cast<KScreen::GetConfigOperation *>(op)->config();
+-        KScreen::OutputPtr sOutput = sConfig -> primaryOutput();
+-
+-        for (int i = 0; i < mRefreshRate->count(); ++i) {
+-            if (!sOutput.isNull() && !sOutput->currentMode().isNull() && mRefreshRate->itemText(i) == refreshRateToText(sOutput->currentMode()->refreshRate())) {
+-                mRefreshRate->setCurrentIndex(i);
+-            }
+-        }
+-    });
+-    initscale(vbox);
+-}
+-
+-void UnifiedOutputConfig::initscale(QVBoxLayout *vbox)
+-{
+-    QFrame *scaleFrame = new QFrame(this);
+-    vbox->addWidget(scaleFrame);
+-    scaleFrame->hide();
+-}
+-
+-void UnifiedOutputConfig::slotScaleChanged(int index)
+-{
+-    Q_EMIT scaleChanged(mScaleCombox->itemData(index).toDouble());
+-}
+-
+-KScreen::OutputPtr UnifiedOutputConfig::createFakeOutput()
+-{
+-    // Find set of common resolutions
+-    QMap<QSize, int> commonSizes;
+-    Q_FOREACH (const KScreen::OutputPtr &clone, mClones) {
+-        QList<QSize> processedSizes;
+-        Q_FOREACH (const KScreen::ModePtr &mode, clone->modes()) {
+-            // Make sure we don't count some modes multiple times because of different
+-            // refresh rates
+-            if (processedSizes.contains(mode->size())) {
+-                continue;
+-            }
+-
+-            processedSizes << mode->size();
+-
+-            if (commonSizes.contains(mode->size())) {
+-                commonSizes[mode->size()]++;
+-            } else {
+-                commonSizes.insert(mode->size(), 1);
+-            }
+-        }
+-    }
+-
+-    KScreen::OutputPtr fakeOutput(new KScreen::Output);
+-
+-    // This will give us list of resolution that are shared by all outputs
+-    QList<QSize> commonResults = commonSizes.keys(mClones.count());
+-    // If there are no common resolution, fallback to smallest preferred mode
+-    if (commonResults.isEmpty()) {
+-        QSize smallestMode;
+-        Q_FOREACH (const KScreen::OutputPtr &clone, mClones) {
+-            if (!smallestMode.isValid() || clone->preferredMode()->size() < smallestMode) {
+-                smallestMode = clone->preferredMode()->size();
+-            }
+-        }
+-        commonResults << smallestMode;
+-    }
+-    std::sort(commonResults.begin(), commonResults.end());
+-
+-    KScreen::ModeList modes;
+-    Q_FOREACH (const QSize &size, commonResults) {
+-        KScreen::ModePtr mode(new KScreen::Mode);
+-        mode->setSize(size);
+-        mode->setId(Utils::sizeToString(size));
+-        mode->setName(mode->id());
+-        modes.insert(mode->id(), mode);
+-    }
+-    fakeOutput->setModes(modes);
+-    if (!mOutput->currentModeId().isEmpty()) {
+-        fakeOutput->setCurrentModeId(Utils::sizeToString(mOutput->currentMode()->size()));
+-    } else {
+-        fakeOutput->setCurrentModeId(Utils::sizeToString(commonResults.last()));
+-    }
+-
+-    return fakeOutput;
+-}
+-
+-void UnifiedOutputConfig::slotResolutionChanged(const QSize &size, bool emitFlag = false)
+-{
+-    // Ignore disconnected outputs
+-    if (!size.isValid()) {
+-        return;
+-    }
+-    bool mIsModeInit = true;
+-    QVector<QString>Vrefresh;
+-    bool mIsCloneMode = isCloneMode();
+-    mRefreshRate->blockSignals(true);
+-    mRefreshRate->clear();
+-    mRefreshRate->blockSignals(false);
+-    Q_FOREACH (const KScreen::OutputPtr &clone, mClones) {
+-        const QString &id = findBestMode(clone, size, emitFlag);
+-        if (id.isEmpty() || id == "auto-fill") {
+-            // FIXME: Error?
+-            return;
+-        }
+-        //本来就是镜像模式且当前分辨率就是选中分辨率,就不需要重新设置显示参数
+-        //用于镜像模式下刚打开控制面板时的显示,否则显示的不是实际刷新率而是findBestMode
+-        if (!mIsCloneMode || size != clone->currentMode()->size()) {
+-            mIsModeInit = false;
+-            clone->blockSignals(true); //必须加blockSignals,否则在这里就会触发currentModeIdChanged的信号
+-            clone->setCurrentModeId(id);
+-            clone->setPos(QPoint(0, 0));
+-            clone->blockSignals(false);
+-        }
+-
+-        QList<KScreen::ModePtr> modes;
+-        Q_FOREACH (const KScreen::ModePtr &mode, clone->modes()) {
+-            if (mode->size() == size) {
+-                modes << mode;
+-            }
+-        }
+-
+-        QVector<QString>VrefreshTemp;
+-        for (int i = 0, total = modes.count(); i < total; ++i) {
+-           const KScreen::ModePtr mode = modes.at(i);
+-
+-           bool alreadyExisted = false; //判断该显示器的刷新率是否有重复的,确保同一刷新率在一个屏幕上只出现一次
+-           for (int j = 0; j < VrefreshTemp.size(); ++j) {
+-               if (refreshRateToText(mode->refreshRate()) == VrefreshTemp[j]) {
+-                   alreadyExisted = true;
+-                   break;
+-               }
+-           }
+-           if (alreadyExisted == false) {   //不添加重复的项
+-               VrefreshTemp.append(refreshRateToText(mode->refreshRate()));
+-           }
+-        }
+-
+-        for (int i = 0; i < VrefreshTemp.size(); ++i) {
+-            Vrefresh.append(VrefreshTemp[i]);
+-        }
+-    }
+-
+-    for (int i = 0; i < Vrefresh.size(); ++i) {
+-        if (Vrefresh.count(Vrefresh[i]) == mClones.size()) { //该刷新率出现次数等于屏幕数,即每个屏幕都有该刷新率
+-            bool existFlag = false;
+-            for (int j = 0; j < mRefreshRate->count(); ++j) {  //已经存在就不再添加
+-                if (Vrefresh[i] == mRefreshRate->itemText(j)) {
+-                    existFlag = true;
+-                    break;
+-                }
+-            }
+-            if (existFlag == false) {  //不存在添加到容器中
+-                mRefreshRate->blockSignals(true);
+-                mRefreshRate->addItem(Vrefresh[i]);
+-                mRefreshRate->blockSignals(false);
+-            }
+-        }
+-    }
+-
+-    if (mRefreshRate->count() > 1) {
+-        float currentRereshRate = mClones[0]->currentMode()->refreshRate();
+-        for (int i = 0; i < mRefreshRate->count(); i++) {
+-            if (refreshRateToText(currentRereshRate) == mRefreshRate->itemText(i)) {
+-                mRefreshRate->blockSignals(true);
+-                mRefreshRate->setCurrentIndex(i);
+-                mRefreshRate->blockSignals(false);
+-                break;
+-            }
+-        }
+-    }
+-
+-    if (mRefreshRate->count() == 0) {
+-        mRefreshRate->blockSignals(true);
+-        mRefreshRate->addItem(tr("auto"), -1);
+-        mRefreshRate->blockSignals(false);
+-    }
+-    if (emitFlag && !mIsModeInit){
+-        changeItm = RESOLUTION;
+-        Q_EMIT changed();
+-    }
+-}
+-
+-void UnifiedOutputConfig::slotRefreshRateChanged(int index)
+-{
+-    Q_FOREACH (const KScreen::OutputPtr &clone, mClones) {
+-        Q_FOREACH (const KScreen::ModePtr &mode, clone->modes()) {
+-            if (mode->size() == mResolution->currentResolution() && \
+-                    refreshRateToText(mode->refreshRate()) == mRefreshRate->itemText(index)) {
+-                clone->blockSignals(true);
+-                clone->setCurrentModeId(mode->id());
+-                clone->blockSignals(false);
+-            }
+-        }
+-    }
+-    changeItm = FREQUENCY;
+-    Q_EMIT changed();
+-}
+-
+-QString UnifiedOutputConfig::findBestMode(const KScreen::OutputPtr &output, const QSize &size, bool isUser)
+-{
+-    float refreshRate = 0;
+-    QString id = "auto-fill";
+-    Q_FOREACH (const KScreen::ModePtr &mode, output->modes()) {
+-        if (mode->size() == size && mode->refreshRate() > refreshRate) {
+-            refreshRate = mode->refreshRate();
+-            id = mode->id();
+-        }
+-    }
+-
+-    // 第一次开启镜像模式读取kwin配置
+-    if (!isUser) {
+-        QVector<KScreen::Output *> outputs;
+-        Q_FOREACH (const auto &output, mConfig->outputs()) {
+-            outputs << output.data();
+-        }
+-
+-        QCryptographicHash hash(QCryptographicHash::Md5);
+-        Q_FOREACH (const KScreen::Output *output, outputs) {
+-            hash.addData(output->uuid());
+-        }
+-        QByteArray groupUuid = QByteArray(1, '1').append(hash.result().toHex()).left(15);
+-        const auto config = KSharedConfig::openConfig(QLatin1String("ukui-kwinrc"));
+-        const auto outputGroup = config->group("DrmOutputs");
+-        const auto configGroup = outputGroup.group(groupUuid);
+-
+-        QSize outputSize;
+-        Q_FOREACH (const auto &aimOutput, outputs) {
+-            const auto outputConfig = configGroup.group(output->uuid());
+-            QString res = outputConfig.readEntry("Mode");
+-            // don't change mode if cannot found config
+-            if (outputConfig.hasKey("Mode")) {
+-                QStringList list = res.split(QLatin1String("_"));
+-                QStringList size = list[0].split(QLatin1String("x"));
+-                if (list.size() > 1 && size.size() > 1) {
+-                    outputSize = QSize(size[0].toInt(), size[1].toInt());
+-                    int refreshRate = list[1].toInt();
+-                    Q_FOREACH (const auto &m, output->modes()) {
+-                        if (m->size() == outputSize && m->refreshRate() * 1000 == refreshRate && output == aimOutput) {
+-                            id = m->id();
+-                        }
+-                    }
+-                }
+-            }
+-        }
+-        if (outputSize.isValid()) {
+-            mResolution->setResolution(outputSize);
+-            if (outputSize != size) {
+-                slotResolutionChanged(outputSize, false);  //重新填充刷新率
+-                id = "auto-fill";  //已经填充了刷新率
+-            }
+-        }
+-    }
+-    return id;
+-}
+-
+-// 统一输出方向信号改变
+-void UnifiedOutputConfig::slotRotationChangedDerived(int index)
+-{
+-    KScreen::Output::Rotation rotation = static_cast<KScreen::Output::Rotation>(mRotation->itemData(index).toInt());
+-    Q_FOREACH (const KScreen::OutputPtr &clone, mClones) {
+-        if (clone->isConnected() && clone->isEnabled()) {
+-            clone->setRotation(rotation);
+-            clone->setPos(QPoint(0, 0));
+-        }
+-    }
+-    changeItm = ORIENTATION;
+-    Q_EMIT changed();
+-}
+-
+-void UnifiedOutputConfig::slotRestoreResoltion()
+-{
+-    if (!mOutput->currentMode()) {
+-        return;
+-    }
+-    if (mResolution->currentResolution() != mOutput->currentMode()->size()) { //分辨率改变时,触发该信号重新加载刷新率,用于修改分辨率之后但未保存
+-        mResolution->setResolution(mOutput->currentMode()->size()); //这里面不会触发分辨率改变信号
+-        slotResolutionChanged(mOutput->currentMode()->size(), false);
+-    } else { //分辨率未修改,刷新率修改,用于修改刷新率之后但未保存
+-        for (int i = 0; i < mRefreshRate->count(); i++) {
+-           if (refreshRateToText(mOutput->currentMode()->refreshRate()) == mRefreshRate->itemText(i)\
+-                   || mRefreshRate->count() == 1) {
+-               mRefreshRate->blockSignals(true);
+-               mRefreshRate->setCurrentIndex(i);
+-               mRefreshRate->blockSignals(false);
+-               break;
+-           }
+-        }
+-    }
+-}
+-
+-void UnifiedOutputConfig::slotRestoreRatation()
+-{
+-    mRotation->blockSignals(true);
+-    mRotation->setCurrentIndex(mRotation->findData(mOutput->rotation()));
+-    mRotation->blockSignals(false);
+-}
+-
+-bool UnifiedOutputConfig::isCloneMode()
+-{
+-    /*
+-     *不能直接用isVisible判断是否为镜像模式
+-     *设置镜像模式时,visiable总是true,但此时还未设置currentMode
+-     *导致某些情况异常
+-     */
+-    //return this->isVisible();    //显示则表示是统一输出
+-    if (!mClones.isEmpty() && mClones[0] && mClones[0]->currentMode()) {
+-        QSize cloneSize(mClones[0]->currentMode()->size());
+-        QPoint clonePos(mClones[0]->pos());
+-        Q_FOREACH (const KScreen::OutputPtr &clone, mClones) {
+-            if (clone->currentMode() && (clone->currentMode()->size() != cloneSize || clone->pos() != clonePos)) {
+-                return false;
+-            }
+-        }
+-        return true;
+-    } else {
+-        return false;
+-    }
+-
+-}
+-
+diff --git a/plugins/system/display_hw/unifiedoutputconfig.h b/plugins/system/display_hw/unifiedoutputconfig.h
+deleted file mode 100644
+index 9260417..0000000
+--- a/plugins/system/display_hw/unifiedoutputconfig.h
++++ /dev/null
+@@ -1,46 +0,0 @@
+-#ifndef UNIFIEDOUTPUTCONFIG_H
+-#define UNIFIEDOUTPUTCONFIG_H
+-
+-#include "outputconfig.h"
+-#include <QVBoxLayout>
+-
+-namespace KScreen {
+-class Output;
+-class Config;
+-}
+-
+-class UnifiedOutputConfig : public OutputConfig
+-{
+-    Q_OBJECT
+-public:
+-    explicit UnifiedOutputConfig(const KScreen::ConfigPtr &config, QWidget *parent);
+-    ~UnifiedOutputConfig() override;
+-
+-    void setOutput(const KScreen::OutputPtr &output) override;
+-    bool isCloneMode();
+-private Q_SLOTS:
+-    void slotResolutionChanged(const QSize &size, bool emitFlag);
+-
+-    // 统一输出后调整屏幕方向统一代码
+-    void slotRotationChangedDerived(int index);
+-    void slotRestoreResoltion();
+-    void slotRestoreRatation();
+-    void slotRefreshRateChanged(int index);
+-    void slotScaleChanged(int index);
+-
+-Q_SIGNALS:
+-    void scaleChanged(double scale);
+-
+-private:
+-    void initUi() override;
+-    void initscale(QVBoxLayout *vbox);
+-    KScreen::OutputPtr createFakeOutput();
+-    QString findBestMode(const KScreen::OutputPtr &output, const QSize &size, bool isUser);
+-
+-private:
+-    KScreen::ConfigPtr mConfig;
+-    QList<KScreen::OutputPtr> mClones;
+-    QComboBox *mScaleCombox = nullptr;
+-};
+-
+-#endif // UNIFIEDOUTPUTCONFIG_H
+diff --git a/plugins/system/display_hw/utils.cpp b/plugins/system/display_hw/utils.cpp
+deleted file mode 100644
+index e075c90..0000000
+--- a/plugins/system/display_hw/utils.cpp
++++ /dev/null
+@@ -1,24 +0,0 @@
+-#include "utils.h"
+-
+-#include <KF5/KScreen/kscreen/output.h>
+-#include <KF5/KScreen/kscreen/edid.h>
+-
+-QString Utils::outputName(const KScreen::OutputPtr &output)
+-{
+-    return outputName(output.data());
+-}
+-
+-QString Utils::outputName(const KScreen::Output *output)
+-{
+-    if (output != nullptr) {
+-        return kOutput.at(output->type());
+-    }
+-
+-    return kOutput.at(0);
+-}
+-
+-QString Utils::sizeToString(const QSize &size)
+-{
+-    return QStringLiteral("%1x%2").arg(size.width()).arg(size.height());
+-}
+-
+diff --git a/plugins/system/display_hw/utils.h b/plugins/system/display_hw/utils.h
+deleted file mode 100644
+index d1a3be6..0000000
+--- a/plugins/system/display_hw/utils.h
++++ /dev/null
+@@ -1,36 +0,0 @@
+-#ifndef KSCREEN_KCM_UTILS_H
+-#define KSCREEN_KCM_UTILS_H
+-
+-#include <QString>
+-#include <QSize>
+-#include <QStringList>
+-
+-#include <KF5/KScreen/kscreen/types.h>
+-#include <KF5/KScreen/kscreen/output.h>
+-
+-const QStringList kOutput {
+-    "Unknown",
+-    "VGA",
+-    "DVI",
+-    "DVII",
+-    "DVIA",
+-    "DVID",
+-    "HDMI",
+-    "eDP",
+-    "TV",
+-    "TVComposite",
+-    "TVSVideo",
+-    "TVComponent",
+-    "TVSCART",
+-    "TVC4",
+-    "DP"
+-};
+-
+-namespace Utils {
+-QString outputName(const KScreen::Output *output);
+-QString outputName(const KScreen::OutputPtr &output);
+-
+-QString sizeToString(const QSize &size);
+-}
+-
+-#endif
+diff --git a/plugins/system/display_hw/widget.cpp b/plugins/system/display_hw/widget.cpp
+deleted file mode 100644
+index 22e014b..0000000
+--- a/plugins/system/display_hw/widget.cpp
++++ /dev/null
+@@ -1,2440 +0,0 @@
+-#include "widget.h"
+-#include "controlpanel.h"
+-#include "declarative/qmloutput.h"
+-#include "declarative/qmlscreen.h"
+-#include "utils.h"
+-#include "ui_display_hw.h"
+-#include "displayperformancedialog.h"
+-#include "colorinfo.h"
+-#include "ukcccommon.h"
+-using namespace ukcc;
+-#include "../../../shell/mainwindow.h"
+-
+-#include <QHBoxLayout>
+-#include <QTimer>
+-#include <QLabel>
+-#include <QVBoxLayout>
+-#include <QSplitter>
+-#include <QtGlobal>
+-#include <QQuickView>
+-#include <qquickitem.h>
+-#include <QDebug>
+-#include <QPushButton>
+-#include <QProcess>
+-#include <QtAlgorithms>
+-#include <QtXml>
+-#include <QDomDocument>
+-#include <QDir>
+-#include <QStandardPaths>
+-#include <QComboBox>
+-#include <QQuickWidget>
+-#include <QMessageBox>
+-#include <QDBusConnection>
+-#include <QJsonDocument>
+-#include <QtConcurrent>
+-#include <QDBusMetaType>
+-
+-#include <KF5/KScreen/kscreen/output.h>
+-#include <KF5/KScreen/kscreen/edid.h>
+-#include <KF5/KScreen/kscreen/mode.h>
+-#include <KF5/KScreen/kscreen/config.h>
+-#include <KF5/KScreen/kscreen/getconfigoperation.h>
+-#include <KF5/KScreen/kscreen/configmonitor.h>
+-#include <KF5/KScreen/kscreen/setconfigoperation.h>
+-#include <KF5/KScreen/kscreen/edid.h>
+-#include <KF5/KScreen/kscreen/types.h>
+-
+-#include <KF5/KConfigCore/KSharedConfig>
+-#include <KF5/KConfigCore/KConfigGroup>
+-
+-#ifdef signals
+-#undef signals
+-#endif
+-
+-#define QML_PATH "kcm_kscreen/qml/"
+-
+-#define UKUI_CONTORLCENTER_PANEL_SCHEMAS "org.ukui.control-center.panel.plugins"
+-#define THEME_NIGHT_KEY                  "themebynight"
+-
+-#define FONT_RENDERING_DPI               "org.ukui.SettingsDaemon.plugins.xsettings"
+-#define SCALE_KEY                        "scaling-factor"
+-
+-#define MOUSE_SIZE_SCHEMAS               "org.ukui.peripherals-mouse"
+-#define CURSOR_SIZE_KEY                  "cursor-size"
+-
+-#define POWER_SCHMES                     "org.ukui.power-manager"
+-#define POWER_KEY                        "brightness-ac"
+-
+-#define ADVANCED_SCHEMAS                 "org.ukui.session.required-components"
+-#define ADVANCED_KEY                     "windowmanager"
+-
+-const QString kCpu = "ZHAOXIN";
+-const QString kLoong = "Loongson";
+-const QString tempDayBrig = "6500";
+-
+-QSize mScaleSizeRes = QSize();
+-
+-Q_DECLARE_METATYPE(KScreen::OutputPtr)
+-
+-Widget::Widget(QWidget *parent) :
+-    QWidget(parent),
+-    ui(new Ui::DisplayWindow())
+-{
+-    qRegisterMetaType<QQuickView *>();
+-
+-    ui->setupUi(this);
+-    ui->quickWidget->setResizeMode(QQuickWidget::SizeRootObjectToView);
+-    ui->quickWidget->setContentsMargins(0, 0, 0, 9);
+-
+-    mCloseScreenButton = new KSwitchButton(this);
+-    ui->showScreenLayout->addWidget(mCloseScreenButton);
+-
+-    mUnifyButton = new KSwitchButton(this);
+-    ui->unionLayout->addWidget(mUnifyButton);
+-
+-    qDBusRegisterMetaType<ScreenConfig>();
+-
+-    setHideModuleInfo();
+-    initNightUI();
+-    isWayland();
+-
+-    QProcess *process = new QProcess;
+-    process->start("lsb_release -r");
+-    process->waitForFinished();
+-
+-    QByteArray ba = process->readAllStandardOutput();
+-    QString osReleaseCrude = QString(ba.data());
+-    QStringList res = osReleaseCrude.split(":");
+-    QString osRelease = res.length() >= 2 ? res.at(1) : "";
+-    osRelease = osRelease.simplified();
+-
+-    const QByteArray idd(ADVANCED_SCHEMAS);
+-    if (QGSettings::isSchemaInstalled(idd) && osRelease == "V10") {
+-        ui->advancedBtn->show();
+-        ui->advancedHorLayout->setContentsMargins(9, 8, 9, 32);
+-    } else {
+-        ui->advancedBtn->hide();
+-        ui->advancedHorLayout->setContentsMargins(9, 0, 9, 0);
+-    }
+-
+-    setTitleLabel();
+-    initGSettings();
+-    initTemptSlider();
+-    initUiComponent();
+-    initNightStatus();
+-
+-#if QT_VERSION <= QT_VERSION_CHECK(5, 12, 0)
+-    ui->nightframe->setVisible(false);
+-#else
+-    ui->nightframe->setVisible(this->mRedshiftIsValid);
+-#endif
+-
+-    mNightButton->setChecked(this->mIsNightMode);
+-    showNightWidget(mNightButton->isChecked());
+-
+-    initConnection();
+-    loadQml();
+-
+-    connect(ui->scaleCombo, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged),
+-            this, [=](int index){
+-        scaleChangedSlot(ui->scaleCombo->itemData(index).toDouble());
+-    });
+-}
+-
+-Widget::~Widget()
+-{
+-    exitFlag = true;
+-    clearOutputIdentifiers();
+-    delete ui;
+-    ui = nullptr;
+-}
+-
+-bool Widget::eventFilter(QObject *object, QEvent *event)
+-{
+-    if (event->type() == QEvent::Resize) {
+-        if (mOutputIdentifiers.contains(qobject_cast<QQuickView *>(object))) {
+-            QResizeEvent *e = static_cast<QResizeEvent *>(event);
+-            const QRect screenSize = object->property("screenSize").toRect();
+-            QRect geometry(QPoint(0, 0), e->size());
+-            geometry.moveCenter(screenSize.center());
+-            static_cast<QQuickView *>(object)->setGeometry(geometry);
+-            // Pass the event further
+-        }
+-    }
+-    return QObject::eventFilter(object, event);
+-}
+-
+-void Widget::setConfig(const KScreen::ConfigPtr &config, bool showBrightnessFrameFlag)
+-{
+-    if (mConfig) {
+-        KScreen::ConfigMonitor::instance()->removeConfig(mConfig);
+-        for (const KScreen::OutputPtr &output : mConfig->outputs()) {
+-            output->disconnect(this);
+-        }
+-        mConfig->disconnect(this);
+-    }
+-    mConfig = config;
+-    mPrevConfig = config->clone();
+-    mPreScreenConfig = config->clone();
+-    for (int i = 0; i < BrightnessFrameV.size(); i = 0) {
+-        BrightnessFrameV[BrightnessFrameV.size() - 1]->deleteLater();
+-        BrightnessFrameV[BrightnessFrameV.size() - 1] = nullptr;
+-        BrightnessFrameV.pop_back();
+-    }
+-
+-    changescale();
+-    KScreen::ConfigMonitor::instance()->addConfig(mConfig);
+-    resetPrimaryCombo();
+-    connect(mConfig.data(), &KScreen::Config::outputAdded,
+-            this, &Widget::outputAdded);
+-    connect(mConfig.data(), &KScreen::Config::outputRemoved,
+-            this, &Widget::outputRemoved);
+-    for (const KScreen::OutputPtr &output : mConfig->outputs()) {
+-        if (output->isConnected()) {
+-            connect(output.data(), &KScreen::Output::currentModeIdChanged,
+-                    this, [=]() {
+-                if (output->currentMode()) {
+-                    if (ui->scaleCombo) {
+-                        changescale();
+-                    }
+-                }
+-            });
+-        }
+-
+-    }
+-
+-    if (!mIsWayland) {
+-        connect(mConfig.data(), &KScreen::Config::primaryOutputChanged,
+-                this, &Widget::primaryOutputChanged);
+-    }
+-
+-    // 上面屏幕拿取配置
+-    mScreen->setConfig(mConfig);
+-    mControlPanel->setConfig(mConfig);
+-    mUnifyButton->setEnabled(mConfig->connectedOutputs().count() > 1);
+-    ui->unionframe->setVisible(mConfig->outputs().count() > 1);
+-
+-    for (const KScreen::OutputPtr &output : mConfig->outputs()) {
+-        outputAdded(output);
+-    }
+-
+-    // 择主屏幕输出
+-    QMLOutput *qmlOutput = mScreen->primaryOutput();
+-
+-    if (qmlOutput) {
+-        mScreen->setActiveOutput(qmlOutput);
+-    } else {
+-        if (!mScreen->outputs().isEmpty()) {
+-            mScreen->setActiveOutput(mScreen->outputs().at(0));
+-            // 择一个主屏幕,避免闪退现象
+-            primaryButtonEnable(true);
+-        }
+-    }
+-    slotOutputEnabledChanged();
+-
+-    if (mFirstLoad && isCloneMode()) {
+-        mUnifyButton->blockSignals(true);
+-        mUnifyButton->setChecked(true);
+-        mUnifyButton->blockSignals(false);
+-        slotUnifyOutputs();
+-    }
+-    mFirstLoad = false;
+-
+-    if (showBrightnessFrameFlag == true) {
+-        showBrightnessFrame();   //初始化的时候,显示
+-    }
+-
+-    enableChangedSlot();
+-}
+-
+-KScreen::ConfigPtr Widget::currentConfig() const
+-{
+-    return mConfig;
+-}
+-
+-void Widget::loadQml()
+-{
+-    qmlRegisterType<QMLOutput>("org.kde.kscreen", 1, 0, "QMLOutput");
+-    qmlRegisterType<QMLScreen>("org.kde.kscreen", 1, 0, "QMLScreen");
+-
+-    qmlRegisterType<KScreen::Output>("org.kde.kscreen", 1, 0, "KScreenOutput");
+-    qmlRegisterType<KScreen::Edid>("org.kde.kscreen", 1, 0, "KScreenEdid");
+-    qmlRegisterType<KScreen::Mode>("org.kde.kscreen", 1, 0, "KScreenMode");
+-
+-    ui->quickWidget->setSource(QUrl("qrc:/qml/main.qml"));
+-
+-    QQuickItem *rootObject = ui->quickWidget->rootObject();
+-    mScreen = rootObject->findChild<QMLScreen *>(QStringLiteral("outputView"));
+-
+-    connect(mScreen, &QMLScreen::released, this, [=] {
+-       delayApply();
+-    });
+-
+-    if (!mScreen) {
+-        return;
+-    }
+-    connect(mScreen, &QMLScreen::focusedOutputChanged,
+-            this, &Widget::slotFocusedOutputChanged);
+-}
+-
+-void Widget::resetPrimaryCombo()
+-{
+-    // Don't emit currentIndexChanged when resetting
+-    bool blocked = ui->primaryCombo->blockSignals(true);
+-    ui->primaryCombo->clear();
+-    ui->primaryCombo->blockSignals(blocked);
+-
+-    if (!mConfig) {
+-        return;
+-    }
+-
+-    for (auto &output: mConfig->outputs()) {
+-        addOutputToPrimaryCombo(output);
+-    }
+-}
+-
+-void Widget::addOutputToPrimaryCombo(const KScreen::OutputPtr &output)
+-{
+-    // 注释后让他显示全部屏幕下拉框
+-    if (!output->isConnected()) {
+-        return;
+-    }
+-
+-    ui->primaryCombo->addItem(Utils::outputName(output), output->id());
+-    if (output->isPrimary() && !mIsWayland) {
+-        Q_ASSERT(mConfig);
+-        int lastIndex = ui->primaryCombo->count() - 1;
+-        ui->primaryCombo->setCurrentIndex(lastIndex);
+-    }
+-}
+-
+-// 这里从屏幕点击来读取输出
+-void Widget::slotFocusedOutputChanged(QMLOutput *output)
+-{
+-    mControlPanel->activateOutput(output->outputPtr());
+-
+-    // 读取屏幕点击选择下拉框
+-    Q_ASSERT(mConfig);
+-    int index = output->outputPtr().isNull() ? 0 : ui->primaryCombo->findData(output->outputPtr()->id());
+-    if (index == -1 || index == ui->primaryCombo->currentIndex()) {
+-        return;
+-    }
+-    ui->primaryCombo->setCurrentIndex(index);
+-}
+-
+-void Widget::slotOutputEnabledChanged()
+-{
+-    // 点击禁用屏幕输出后的改变
+-    resetPrimaryCombo();
+-    setActiveScreen(mKDSCfg);
+-    int enabledOutputsCount = 0;
+-    Q_FOREACH (const KScreen::OutputPtr &output, mConfig->outputs()) {
+-        for (int i = 0; i < BrightnessFrameV.size(); ++i) {
+-                if (BrightnessFrameV[i]->outputName == Utils::outputName(output)){
+-                    if (!output->isEnabled())
+-                        BrightnessFrameV[i]->openFlag = false;
+-                    else
+-                        BrightnessFrameV[i]->openFlag = true;
+-            }
+-        }
+-        if (output->isEnabled()) {
+-            ++enabledOutputsCount;
+-        }
+-        if (enabledOutputsCount > 1) {
+-            break;
+-        }
+-    }
+-    mUnifyButton->setEnabled(screenEnableCount() > 1);
+-    ui->unionframe->setVisible(screenEnableCount() > 1);
+-    showBrightnessFrame(10);
+-}
+-
+-void Widget::slotOutputConnectedChanged()
+-{
+-    resetPrimaryCombo();
+-}
+-
+-// 更改方向,再更改分辨率重叠问题
+-void Widget::slotQmloutOutChanged()
+-{
+-    QMLOutput *output = mScreen->primaryOutput();
+-    if (output != nullptr && !output->outputPtr().isNull()) {
+-        mScreen->setScreenPosCenter(output, false);
+-    }
+-
+-}
+-
+-void Widget::slotUnifyOutputs()
+-{
+-    QMLOutput *base = mScreen->primaryOutput();
+-
+-    QList<int> clones;
+-
+-    if (!base) {
+-        for (QMLOutput *output: mScreen->outputs()) {
+-            if (output->output()->isConnected() && output->output()->isEnabled()) {
+-                base = output;
+-                break;
+-            }
+-        }
+-        if (!base) {
+-            // WTF?
+-            return;
+-        }
+-    }
+-
+-    // 取消统一输出
+-    if (!mUnifyButton->isChecked()) {
+-        KScreen::OutputList screens = mPrevConfig->connectedOutputs();
+-        if (mKDSCfg.isEmpty()) {
+-            if (!getPreScreenCfg().isEmpty()) {
+-                QList<ScreenConfig> preScreenCfg = getPreScreenCfg();
+-                int posX = preScreenCfg.at(0).screenPosX;
+-                bool isOverlap = false;
+-                for (int i = 1; i< preScreenCfg.count(); i++) {
+-                    if (posX == preScreenCfg.at(i).screenPosX) {
+-                        isOverlap = true;
+-                        setScreenKDS("expand");
+-                        break;
+-                    }
+-                }
+-                Q_FOREACH(ScreenConfig cfg, preScreenCfg) {
+-                    Q_FOREACH(KScreen::OutputPtr output, screens) {
+-                        if (!cfg.screenId.compare(output->name()) && !isOverlap) {
+-                            output->setCurrentModeId(cfg.screenModeId);
+-                            output->setPos(QPoint(cfg.screenPosX, cfg.screenPosY));
+-                        }
+-                    }
+-                }
+-            }
+-
+-            QPoint raw(0,0);
+-            int originCount = 0;
+-            Q_FOREACH(KScreen::OutputPtr output, screens) {
+-                if (output->pos() == raw) {
+-                    originCount++;
+-                }
+-                if (originCount >= 2) {
+-                    setScreenKDS("expand");
+-                }
+-            }
+-        }
+-
+-        setConfig(mPrevConfig);
+-
+-        ui->primaryCombo->setEnabled(true);
+-        mCloseScreenButton->setEnabled(true);
+-        ui->showMonitorframe->setVisible(true);
+-        ui->primaryCombo->setEnabled(true);
+-    } else if (mUnifyButton->isChecked()) {
+-        // Clone the current config, so that we can restore it in case user
+-        // breaks the cloning
+-        mPrevConfig = mConfig->clone();
+-
+-        if (!mFirstLoad && !mIsOutputAdd && mKDSCfg.isEmpty()) {
+-            setPreScreenCfg(mPrevConfig->connectedOutputs());
+-        }
+-
+-        for (QMLOutput *output: mScreen->outputs()) {
+-            if (output != mScreen->primaryOutput() && mScreen->primaryOutput()) {
+-                output->output()->setRotation(mScreen->primaryOutput()->output()->rotation());
+-            }
+-
+-            if (!output->output()->isConnected()) {
+-                continue;
+-            }
+-
+-            if (!output->output()->isEnabled()) {
+-                output->setVisible(false);
+-                continue;
+-            }
+-
+-            if (!base) {
+-                base = output;
+-            }
+-
+-            output->setOutputX(0);
+-            output->setOutputY(0);
+-            output->output()->setPos(QPoint(0, 0));
+-            output->output()->setClones(QList<int>());
+-
+-            if (base != output) {
+-                clones << output->output()->id();
+-                output->setCloneOf(base);
+-                output->setVisible(false);
+-            }
+-        }
+-
+-        base->output()->setClones(clones);
+-
+-        base->setIsCloneMode(true);
+-
+-        mScreen->updateOutputsPlacement();
+-
+-        // 关闭开关
+-        mCloseScreenButton->setEnabled(false);
+-        ui->showMonitorframe->setVisible(false);
+-        ui->primaryCombo->setEnabled(false);
+-        ui->mainScreenButton->setEnabled(false);
+-        mControlPanel->setUnifiedOutput(base->outputPtr());
+-    }
+-}
+-
+-// FIXME: Copy-pasted from KDED's Serializer::findOutput()
+-KScreen::OutputPtr Widget::findOutput(const KScreen::ConfigPtr &config, const QVariantMap &info)
+-{
+-    KScreen::OutputList outputs = config->outputs();
+-    Q_FOREACH (const KScreen::OutputPtr &output, outputs) {
+-        if (!output->isConnected()) {
+-            continue;
+-        }
+-
+-        const QString outputId
+-            = (output->edid()
+-               && output->edid()->isValid()) ? output->edid()->hash() : output->name();
+-        if (outputId != info[QStringLiteral("id")].toString()) {
+-            continue;
+-        }
+-
+-        QVariantMap posInfo = info[QStringLiteral("pos")].toMap();
+-        QPoint point(posInfo[QStringLiteral("x")].toInt(), posInfo[QStringLiteral("y")].toInt());
+-        output->setPos(point);
+-        output->setPrimary(info[QStringLiteral("primary")].toBool());
+-        output->setEnabled(info[QStringLiteral("enabled")].toBool());
+-        output->setRotation(static_cast<KScreen::Output::Rotation>(info[QStringLiteral("rotation")].
+-                                                                   toInt()));
+-
+-        QVariantMap modeInfo = info[QStringLiteral("mode")].toMap();
+-        QVariantMap modeSize = modeInfo[QStringLiteral("size")].toMap();
+-        QSize size(modeSize[QStringLiteral("width")].toInt(),
+-                   modeSize[QStringLiteral("height")].toInt());
+-
+-        const KScreen::ModeList modes = output->modes();
+-        Q_FOREACH (const KScreen::ModePtr &mode, modes) {
+-            if (mode->size() != size) {
+-                continue;
+-            }
+-            if (QString::number(mode->refreshRate())
+-                != modeInfo[QStringLiteral("refresh")].toString()) {
+-                continue;
+-            }
+-
+-            output->setCurrentModeId(mode->id());
+-            break;
+-        }
+-        return output;
+-    }
+-
+-    return KScreen::OutputPtr();
+-}
+-
+-void Widget::setHideModuleInfo()
+-{
+-    mCPU = getCpuInfo();
+-    if (!mCPU.startsWith(kCpu, Qt::CaseInsensitive)) {
+-        ui->quickWidget->setAttribute(Qt::WA_AlwaysStackOnTop);
+-        ui->quickWidget->setClearColor(Qt::transparent);
+-    }
+-}
+-
+-void Widget::setTitleLabel()
+-{
+-
+-    //~ contents_path /display/monitor
+-    ui->primaryLabel->setText(tr("monitor"));
+-
+-    //~ contents_path /display/screen zoom
+-    ui->scaleLabel->setText(tr("screen zoom"));
+-}
+-void Widget::writeScale(double scale)
+-{
+-    if (scale != scaleGSettings->get(SCALE_KEY).toDouble()) {
+-        mIsScaleChanged = true;
+-    }
+-
+-    if (mIsScaleChanged) {
+-        if (!mIsChange) {
+-            showZoomtips();
+-        } else {
+-            // 非主动切换缩放率,则不弹提示弹窗
+-            mIsChange = false;
+-        }
+-    } else {
+-        return;
+-    }
+-
+-    mIsScaleChanged = false;
+-    int cursize;
+-    QByteArray iid(MOUSE_SIZE_SCHEMAS);
+-    if (QGSettings::isSchemaInstalled(MOUSE_SIZE_SCHEMAS)) {
+-        QGSettings cursorSettings(iid);
+-
+-        if (1.0 == scale) {
+-            cursize = 24;
+-        } else if (2.0 == scale) {
+-            cursize = 48;
+-        } else if (3.0 == scale) {
+-            cursize = 96;
+-        } else {
+-            cursize = 24;
+-        }
+-
+-        QStringList keys = scaleGSettings->keys();
+-        if (keys.contains("scalingFactor")) {
+-
+-            scaleGSettings->set(SCALE_KEY, scale);
+-        }
+-        cursorSettings.set(CURSOR_SIZE_KEY, cursize);
+-        UkccCommon::setKwinMouseSize(cursize);
+-    }
+-}
+-
+-void Widget::initGSettings()
+-{
+-    QByteArray id(UKUI_CONTORLCENTER_PANEL_SCHEMAS);
+-    if (QGSettings::isSchemaInstalled(id)) {
+-        mGsettings = new QGSettings(id, QByteArray(), this);
+-        if (mGsettings->keys().contains(THEME_NIGHT_KEY)) {
+-            mThemeButton->setChecked(mGsettings->get(THEME_NIGHT_KEY).toBool());
+-        }
+-    } else {
+-        qDebug() << Q_FUNC_INFO << "org.ukui.control-center.panel.plugins not install";
+-        return;
+-    }
+-
+-    QByteArray powerId(POWER_SCHMES);
+-    if (QGSettings::isSchemaInstalled(powerId)) {
+-        mPowerGSettings = new QGSettings(powerId, QByteArray(), this);
+-        mPowerKeys = mPowerGSettings->keys();
+-        connect(mPowerGSettings, &QGSettings::changed, this, [=](QString key) {
+-            if ("brightnessAc" == key || "brightnessBat" == key) {
+-                int value = mPowerGSettings->get(key).toInt();
+-                if (mIsWayland && !mIsBattery) {
+-                    value = (value == 0 ? 0 : value / 10);
+-                }
+-
+-                for (int i = 0; i < BrightnessFrameV.size(); ++i) {
+-                    if (BrightnessFrameV[i]->outputName == "eDP") {
+-                       BrightnessFrameV[i]->slider->blockSignals(true);
+-                       BrightnessFrameV[i]->setTextLableValue(QString::number(value));
+-                       BrightnessFrameV[i]->slider->setValue(value);
+-                       BrightnessFrameV[i]->slider->blockSignals(false);
+-                    }
+-                }
+-            }
+-        });
+-    }
+-
+-    QByteArray scaleId(FONT_RENDERING_DPI);
+-    if (QGSettings::isSchemaInstalled(scaleId)) {
+-        scaleGSettings = new QGSettings(scaleId, QByteArray(), this);
+-    }
+-}
+-
+-void Widget::initNightUI()
+-{
+-    //~ contents_path /display/unify output
+-    ui->unifyLabel->setText(tr("Mirror Display"));
+-
+-    QHBoxLayout *nightLayout = new QHBoxLayout(ui->nightframe);
+-    //~ contents_path /display/night mode
+-    nightLabel = new QLabel(tr("night mode"), this);
+-    mNightButton = new KSwitchButton(this);
+-    nightLayout->addWidget(nightLabel);
+-    nightLayout->addStretch();
+-    nightLayout->addWidget(mNightButton);
+-
+-    QHBoxLayout *themeLayout = new QHBoxLayout(ui->themeFrame);
+-    mThemeButton = new KSwitchButton(this);
+-    themeLayout->addWidget(new QLabel(tr("Theme follow night mode")));
+-    themeLayout->addStretch();
+-    themeLayout->addWidget(mThemeButton);
+-}
+-
+-bool Widget::isRestoreConfig()
+-{
+-    int cnt = 30;
+-    int ret;
+-    MainWindow *mainWindow = static_cast<MainWindow*>(this->topLevelWidget());
+-    QMessageBox msg;
+-    QPushButton *saveBtn = msg.addButton(tr("Save"), QMessageBox::AcceptRole);
+-    QPushButton *canelBtn = msg.addButton(tr("Not Save"), QMessageBox::RejectRole);
+-    msg.setDefaultButton(saveBtn);
+-    saveBtn->setFocusPolicy(Qt::TabFocus);
+-    canelBtn->setFocusPolicy(Qt::TabFocus);
+-    connect(mainWindow, &MainWindow::posChanged, this, [=,&msg]() {
+-        QTimer::singleShot(8, this, [=,&msg]() { //窗管会移动窗口,等待8ms,确保在窗管移动之后再move,时间不能太长,否则会看到移动的路径
+-            QRect rect = this->topLevelWidget()->geometry();
+-            int msgX = 0, msgY = 0;
+-            msgX = rect.x() + rect.width()/2 - msg.width()/2;
+-            msgY = rect.y() + rect.height()/2 - (msg.height()+40)/2;
+-            msg.move(msgX, msgY);
+-        });
+-    });
+-
+-    if (mConfigChanged && !mIsUnifyChanged) {
+-        QString config_name;
+-        switch (changeItm) {
+-        case 0:
+-            config_name = tr("resolution");
+-            break;
+-        case 1:
+-            config_name = tr("orientation");
+-            break;
+-        case 2:
+-            config_name = tr("frequency");
+-            break;
+-        }
+-        msg.setIcon(QMessageBox::Warning);
+-        msg.setText(QString(tr("The screen %1 has been modified, whether to save it ? "
+-                       "<br/>"
+-                       "<font style= 'color:#626c6e'>the settings will be saved after 29 seconds</font>")).arg(config_name));
+-
+-        QTimer cntDown;
+-        QObject::connect(&cntDown, &QTimer::timeout, [&msg, &cnt, &cntDown, &ret ,&config_name]()->void {
+-            if (--cnt < 0) {
+-                cntDown.stop();
+-                msg.hide();
+-                msg.close();
+-            } else {
+-                msg.setText(QString(tr("The screen %1 has been modified, whether to save it ? "
+-                                       "<br/>"
+-                                       "<font style= 'color:#626c6e'>the settings will be saved after %2 seconds</font>")).arg(config_name).arg(cnt));
+-                msg.show();
+-            }
+-        });
+-        cntDown.start(1000);
+-        QTimer::singleShot(100, this, [=,&msg]() { //延时获取msg的size
+-            QRect rect = this->topLevelWidget()->geometry();
+-            int msgX = 0, msgY = 0;
+-            msgX = rect.x() + rect.width()/2 - msg.width()/2;
+-            msgY = rect.y() + rect.height()/2 - (msg.height()+40)/2;
+-            msg.move(msgX, msgY);
+-        });
+-        ret = msg.exec();
+-    }
+-    disconnect(mainWindow, &MainWindow::posChanged, 0, 0);
+-
+-    bool res = false;
+-    switch (ret) {
+-    case QMessageBox::AcceptRole:
+-        res = false;
+-        break;
+-    case QMessageBox::RejectRole:
+-        if (mIsSCaleRes) {
+-            QStringList keys = scaleGSettings->keys();
+-            if (keys.contains("scalingFactor")) {
+-                scaleGSettings->set(SCALE_KEY,scaleres);
+-            }
+-            mIsSCaleRes = false;
+-        }
+-        res = true;
+-        break;
+-    }
+-    return res;
+-}
+-
+-QString Widget::getCpuInfo()
+-{
+-    return Utils::getCpuInfo();
+-}
+-
+-bool Widget::isCloneMode()
+-{
+-    KScreen::OutputPtr output = mConfig->primaryOutput();
+-    if (mConfig->connectedOutputs().count() >= 2) {
+-        foreach (KScreen::OutputPtr secOutput, mConfig->connectedOutputs()) {
+-            if (secOutput->geometry() != output->geometry() || !secOutput->isEnabled()) {
+-                return false;
+-            }
+-        }
+-    } else {
+-        return false;
+-    }
+-    return true;
+-}
+-
+-bool Widget::isBacklight()
+-{
+-    QString cmd = "ukui-power-backlight-helper --get-max-brightness";
+-    QProcess process;
+-    process.start(cmd);
+-    process.waitForFinished();
+-    QString result = process.readAllStandardOutput().trimmed();
+-
+-    QString pattern("^[0-9]*$");
+-    QRegExp reg(pattern);
+-
+-    return reg.exactMatch(result);
+-}
+-
+-QString Widget::getMonitorType()
+-{
+-    QString monitor = ui->primaryCombo->currentText();
+-    QString type;
+-    if (monitor.contains("VGA", Qt::CaseInsensitive)) {
+-        type = "4";
+-    } else {
+-        type = "8";
+-    }
+-    return type;
+-}
+-
+-bool Widget::isLaptopScreen()
+-{
+-    const QString &monitor = ui->primaryCombo->currentText();
+-    if (monitor == "eDP") {
+-        return true;
+-    }
+-    return false;
+-}
+-
+-bool Widget::isVisibleBrightness()
+-{
+-    if ((mIsBattery && isLaptopScreen())
+-            || (mIsWayland && !mIsBattery)
+-            || (!mIsWayland && mIsBattery)) {
+-        return true;
+-    }
+-    return false;
+-}
+-
+-int Widget::getDDCBrighthess()
+-{
+-    QString type = getMonitorType();
+-    QDBusInterface ukccIfc("com.control.center.qt.systemdbus",
+-                           "/",
+-                           "com.control.center.interface",
+-                           QDBusConnection::systemBus());
+-
+-    QDBusReply<int> reply = ukccIfc.call("getDDCBrightness", type);
+-
+-    if (reply.isValid()) {
+-        return reply.value();
+-    }
+-    return 0;
+-}
+-
+-int Widget::getDDCBrighthess(QString name)
+-{
+-    QString type;
+-    int times = 100;
+-    if (name.contains("VGA", Qt::CaseInsensitive)) {
+-        type = "4";
+-    } else {
+-        type = "8";
+-    }
+-    QDBusInterface ukccIfc("com.control.center.qt.systemdbus",
+-                           "/",
+-                           "com.control.center.interface",
+-                           QDBusConnection::systemBus());
+-
+-    while (--times) {
+-        if (exitFlag == true)
+-            return -1;
+-        for (int i = 0; i < deleteFrameNameV.size(); ++i) {
+-            if (name == deleteFrameNameV[i]) {  //该屏幕已经被remove
+-                deleteFrameNameV.remove(i);
+-                return -1;
+-            }
+-        }
+-        QDBusReply<int> reply = ukccIfc.call("getDDCBrightness", type);
+-        if (reply.isValid() && reply.value() > 0) {
+-            return reply.value();
+-        }
+-        usleep(80000);
+-    }
+-    return 0;
+-}
+-
+-int Widget::getDDCBrighthess(QString edidHash, QString i2cBus) {
+-    int times = 600;
+-    QDBusInterface ukccIfc("com.control.center.qt.systemdbus",
+-                           "/",
+-                           "com.control.center.interface",
+-                           QDBusConnection::systemBus());
+-    QDBusReply<int> reply;
+-    while (times) {
+-        //防止调用terminate不会结束线程,锁屏在龙芯架构上出现过
+-        if (exitFlag) {
+-            return -1;
+-        }
+-        if (times %10 != 0) {
+-            times--;
+-            usleep(100000);
+-            continue;
+-        }
+-        if (i2cBus == "") {
+-            return -1;
+-        }
+-        reply = ukccIfc.call("getDisplayBrightness", edidHash, i2cBus);
+-        if (reply.isValid() && reply.value() >= 0 && reply.value() <= 100) {
+-           return reply.value();
+-        }
+-        times--;
+-        usleep(100000);
+-    }
+-    return -1;
+-}
+-
+-int Widget::getLaptopBrightness() const
+-{
+-    return mPowerGSettings->get(POWER_KEY).toInt();
+-}
+-
+-void Widget::showNightWidget(bool judge)
+-{
+-    if (judge) {
+-        ui->sunframe->setVisible(true);
+-        ui->customframe->setVisible(true);
+-        ui->temptframe->setVisible(true);
+-        ui->themeFrame->setVisible(false);
+-    } else {
+-        ui->sunframe->setVisible(false);
+-        ui->customframe->setVisible(false);
+-        ui->temptframe->setVisible(false);
+-        ui->themeFrame->setVisible(false);
+-    }
+-
+-    if (judge && ui->customradioBtn->isChecked()) {
+-        showCustomWiget(CUSTOM);
+-    } else {
+-        showCustomWiget(SUN);
+-    }
+-}
+-
+-void Widget::showCustomWiget(int index)
+-{
+-    if (SUN == index) {
+-        ui->opframe->setVisible(false);
+-        ui->clsframe->setVisible(false);
+-    } else if (CUSTOM == index) {
+-        ui->opframe->setVisible(true);
+-        ui->clsframe->setVisible(true);
+-    }
+-}
+-
+-void Widget::slotThemeChanged(bool judge)
+-{
+-    if (mGsettings->keys().contains(THEME_NIGHT_KEY)) {
+-        mGsettings->set(THEME_NIGHT_KEY, judge);
+-    }
+-}
+-
+-void Widget::clearOutputIdentifiers()
+-{
+-    mOutputTimer->stop();
+-    qDeleteAll(mOutputIdentifiers);
+-    mOutputIdentifiers.clear();
+-}
+-
+-void Widget::addBrightnessFrame(QString name, bool openFlag, const KScreen::OutputPtr &output, QString i2cBus)
+-{
+-    if (mIsBattery && name != "eDP")  //笔记本非内置
+-        return;
+-
+-    for (int i = 0; i < BrightnessFrameV.size(); ++i) {  //已经有了
+-        if (name == BrightnessFrameV[i]->outputName )
+-            return;
+-    }
+-    BrightnessFrame *frame = new BrightnessFrame;
+-    frame->openFlag = openFlag;
+-    frame->setTextLableValue("0"); //最低亮度10,获取前为0
+-    BrightnessFrameV.push_back(frame);
+-
+-    for (int i = 0; i < deleteFrameNameV.size(); ++i) {
+-        if (deleteFrameNameV[i] == name) {
+-            deleteFrameNameV.remove(i);
+-        }
+-    }
+-    if (mIsBattery && name == "eDP") {
+-        frame->outputName = name;
+-        int initValue = mPowerGSettings->get(POWER_KEY).toInt();
+-        frame->setTextLableValue(QString::number(initValue));
+-        frame->slider->setValue(initValue);
+-        ui->unifyBrightLayout->addWidget(frame);
+-        connect(frame->slider, &QSlider::valueChanged, this, [=](){
+-            qDebug()<<name<<"brightness"<<" is changed, value = "<<frame->slider->value();
+-            mPowerGSettings->set(POWER_KEY, frame->slider->value());
+-            frame->setTextLableValue(QString::number(mPowerGSettings->get(POWER_KEY).toInt()));
+-        });
+-    } else if(!mIsBattery && output) {
+-        frame->outputName = name;
+-        ui->unifyBrightLayout->addWidget(frame);
+-        frame->slider->setValue(10);
+-        if (output->supportBrightness()) {
+-            QtConcurrent::run([=]{
+-                int initValue = output->brightness();
+-                if (initValue == -1 || frame == nullptr)
+-                    return;
+-                frame->slider->setValue(initValue);
+-                frame->setTextLableValue(QString::number(initValue));
+-                connect(frame->slider, &QSlider::valueChanged, this, [=](){
+-                                    qDebug()<<name<<"brightness"<<" is changed, value = "<<frame->slider->value();
+-                                    frame->setTextLableValue(QString::number(frame->slider->value()));
+-                                    output->setBrightness(frame->slider->value());
+-                                    setKscreenConfig(this->currentConfig());
+-                                    Q_FOREACH (const KScreen::OutputPtr &pOutput, mPrevConfig->outputs()) {
+-                                        if (Utils::outputName(pOutput) == name) {
+-                                            pOutput->setBrightness(frame->slider->value());
+-                                        }
+-                                    }
+-                });
+-            });
+-        } else {
+-            frame->slider->setEnabled(false);
+-            //使用DDC
+-            QtConcurrent::run([=]{
+-                if (openFlag == false)
+-                    return;
+-
+-                int initValue = getDDCBrighthess("", i2cBus);
+-                if (initValue == -1 || frame == nullptr)
+-                    return;
+-
+-                frame->slider->setEnabled(true);
+-                frame->slider->setValue(initValue);
+-                frame->setTextLableValue(QString::number(initValue));
+-                connect(frame->slider, &QSlider::valueChanged, this, [=](){
+-                     qDebug()<<name<<"brightness"<<" is changed, value = "<<frame->slider->value();
+-                     frame->setTextLableValue(QString::number(frame->slider->value()));
+-                     setDDCBrightnessN(frame->slider->value(), "", i2cBus);
+-                });
+-            });
+-        }
+-    }
+-}
+-
+-void Widget::outputAdded(const KScreen::OutputPtr &output)
+-{
+-    getAllI2Cbus();
+-    mPreScreenConfig = mConfig->clone();
+-    QString name = Utils::outputName(output);
+-    QMap<QString, QString>::iterator it;
+-    QString outPutI2cBus = "";
+-    for (it = I2CbusMap.begin(); it != I2CbusMap.end(); it++) {
+-        if (name.contains(it.key(), Qt::CaseInsensitive)) {
+-            outPutI2cBus = it.value();
+-            break;
+-        }
+-    }
+-    addBrightnessFrame(name, output->isEnabled(), output, outPutI2cBus);
+-    // 刷新缩放选项,监听新增显示屏的mode变化
+-    changescale();
+-    if (output->isConnected()) {
+-        connect(output.data(), &KScreen::Output::currentModeIdChanged,
+-                this, [=]() {
+-            if (output->currentMode()) {
+-                if (ui->scaleCombo) {
+-                    ui->scaleCombo->blockSignals(true);
+-                    changescale();
+-                    ui->scaleCombo->blockSignals(false);
+-                }
+-            }
+-        });
+-    }
+-
+-    // 刷新缩放选项,监听新增显示屏的mode变化
+-    changescale();
+-    if (output->isConnected()) {
+-        connect(output.data(), &KScreen::Output::currentModeIdChanged,
+-                this, [=]() {
+-            if (output->currentMode()) {
+-                if (ui->scaleCombo) {
+-                    ui->scaleCombo->blockSignals(true);
+-                    changescale();
+-                    ui->scaleCombo->blockSignals(false);
+-                }
+-            }
+-        });
+-    }
+-
+-    connect(output.data(), &KScreen::Output::isConnectedChanged,
+-            this, &Widget::slotOutputConnectedChanged);
+-    connect(output.data(), &KScreen::Output::isEnabledChanged,
+-            this, &Widget::slotOutputEnabledChanged);
+-
+-    addOutputToPrimaryCombo(output);
+-
+-    // 检查统一输出-防止多显示屏幕
+-    if (mUnifyButton->isChecked()) {
+-        for (QMLOutput *qmlOutput: mScreen->outputs()) {
+-            if (!qmlOutput->output()->isConnected()) {
+-                continue;
+-            }
+-            if (!qmlOutput->isCloneMode()) {
+-                qmlOutput->blockSignals(true);
+-                qmlOutput->setVisible(false);
+-                qmlOutput->blockSignals(false);
+-            }
+-        }
+-    }
+-
+-    ui->unionframe->setVisible(screenEnableCount() > 1);
+-    mUnifyButton->setEnabled(screenEnableCount() > 1);
+-
+-    if (!mFirstLoad) {
+-        QTimer::singleShot(1500, this, [=] {
+-            mIsOutputAdd = true;
+-            mainScreenButtonSelect(ui->primaryCombo->currentIndex());
+-            mUnifyButton->setChecked(isCloneMode());
+-            mIsOutputAdd = false;
+-        });
+-    }
+-    showBrightnessFrame();
+-}
+-
+-void Widget::outputRemoved(int outputId)
+-{
+-    // 刷新缩放选项
+-    changescale();
+-
+-    KScreen::OutputPtr output = mConfig->output(outputId);
+-    if (!output.isNull()) {
+-        output->disconnect(this);
+-    }
+-
+-    const int index = ui->primaryCombo->findData(outputId);
+-    if (index == -1) {
+-        return;
+-    }
+-
+-    if (index == ui->primaryCombo->currentIndex()) {
+-        // We'll get the actual primary update signal eventually
+-        // Don't emit currentIndexChanged
+-        const bool blocked = ui->primaryCombo->blockSignals(true);
+-        ui->primaryCombo->setCurrentIndex(0);
+-        ui->primaryCombo->blockSignals(blocked);
+-    }
+-
+-    QString name = ui->primaryCombo->itemText(index);
+-    for (int i = 0; i < BrightnessFrameV.size(); ++i) {
+-        if (BrightnessFrameV[i]->outputName == name) {
+-            delete BrightnessFrameV[i];
+-            BrightnessFrameV[i] = nullptr;
+-            BrightnessFrameV.remove(i);
+-            bool existFlag = false;
+-            for (int i = 0; i < deleteFrameNameV.size(); ++i) {
+-                if (deleteFrameNameV[i] == name) {
+-                    existFlag = true;
+-                    break;
+-                }
+-            }
+-            if (existFlag == false)
+-                deleteFrameNameV.push_back(name);
+-        }
+-    }
+-    ui->primaryCombo->removeItem(index);
+-
+-    // 检查统一输出-防止移除后没有屏幕可显示
+-    if (mUnifyButton->isChecked()) {
+-        for (QMLOutput *qmlOutput: mScreen->outputs()) {
+-            if (!qmlOutput->output()->isConnected()) {
+-                continue;
+-            }
+-            qmlOutput->setIsCloneMode(false);
+-            qmlOutput->blockSignals(true);
+-            qmlOutput->setVisible(true);
+-            qmlOutput->blockSignals(false);
+-        }
+-    }
+-    ui->unionframe->setVisible(mConfig->connectedOutputs().count() > 1);
+-    mUnifyButton->blockSignals(true);
+-    mUnifyButton->setChecked(mConfig->connectedOutputs().count() > 1);
+-    mUnifyButton->blockSignals(false);
+-    mainScreenButtonSelect(ui->primaryCombo->currentIndex());
+-    // 在双屏下拔掉显示器,然后更改配置应用,恢复到原来配置崩溃
+-    mPreScreenConfig = mConfig->clone();
+-    showBrightnessFrame();
+-}
+-
+-void Widget::primaryOutputSelected(int index)
+-{
+-    if (!mConfig) {
+-        return;
+-    }
+-
+-    const KScreen::OutputPtr newPrimary = index == 0 ? KScreen::OutputPtr() : mConfig->output(ui->primaryCombo->itemData(index).toInt());
+-    if (newPrimary == mConfig->primaryOutput()) {
+-        return;
+-    }
+-
+-    mConfig->setPrimaryOutput(newPrimary);
+-}
+-
+-// 主输出
+-void Widget::primaryOutputChanged(const KScreen::OutputPtr &output)
+-{
+-    Q_ASSERT(mConfig);
+-    int index = output.isNull() ? 0 : ui->primaryCombo->findData(output->id());
+-    if (index == -1 || index == ui->primaryCombo->currentIndex()) {
+-        return;
+-    }
+-    ui->primaryCombo->setCurrentIndex(index);
+-}
+-
+-void Widget::slotIdentifyButtonClicked(bool checked)
+-{
+-    Q_UNUSED(checked);
+-    connect(new KScreen::GetConfigOperation(), &KScreen::GetConfigOperation::finished,
+-            this, &Widget::slotIdentifyOutputs);
+-}
+-
+-void Widget::slotIdentifyOutputs(KScreen::ConfigOperation *op)
+-{
+-    if (op->hasError()) {
+-        return;
+-    }
+-
+-    const KScreen::ConfigPtr config = qobject_cast<KScreen::GetConfigOperation *>(op)->config();
+-
+-    const QString qmlPath = QStandardPaths::locate(QStandardPaths::GenericDataLocation, QStringLiteral(QML_PATH "OutputIdentifier.qml"));
+-
+-    mOutputTimer->stop();
+-    clearOutputIdentifiers();
+-
+-    /* Obtain the current active configuration from KScreen */
+-    Q_FOREACH (const KScreen::OutputPtr &output, config->outputs()) {
+-        if (!output->isConnected() || !output->currentMode()) {
+-            continue;
+-        }
+-
+-        const KScreen::ModePtr mode = output->currentMode();
+-
+-        QQuickView *view = new QQuickView();
+-
+-        view->setFlags(Qt::X11BypassWindowManagerHint | Qt::FramelessWindowHint);
+-        view->setResizeMode(QQuickView::SizeViewToRootObject);
+-        view->setSource(QUrl::fromLocalFile(qmlPath));
+-        view->installEventFilter(this);
+-
+-        QQuickItem *rootObj = view->rootObject();
+-        if (!rootObj) {
+-            qWarning() << "Failed to obtain root item";
+-            continue;
+-        }
+-
+-        QSize deviceSize, logicalSize;
+-        if (output->isHorizontal()) {
+-            deviceSize = mode->size();
+-        } else {
+-            deviceSize = QSize(mode->size().height(), mode->size().width());
+-        }
+-
+-#if QT_VERSION <= QT_VERSION_CHECK(5, 12, 0)
+-#else
+-        if (config->supportedFeatures() & KScreen::Config::Feature::PerOutputScaling) {
+-            // no scale adjustment needed on Wayland
+-            logicalSize = deviceSize;
+-        } else {
+-            logicalSize = deviceSize / devicePixelRatioF();
+-        }
+-#endif
+-
+-        rootObj->setProperty("outputName", Utils::outputName(output));
+-        rootObj->setProperty("modeName", Utils::sizeToString(deviceSize));
+-
+-#if QT_VERSION <= QT_VERSION_CHECK(5, 12, 0)
+-        view->setProperty("screenSize", QRect(output->pos(), deviceSize));
+-#else
+-        view->setProperty("screenSize", QRect(output->pos(), logicalSize));
+-#endif
+-
+-        mOutputIdentifiers << view;
+-    }
+-
+-    for (QQuickView *view: mOutputIdentifiers) {
+-        view->show();
+-    }
+-
+-    mOutputTimer->start(2500);
+-}
+-
+-void Widget::isWayland()
+-{
+-    QString sessionType = getenv("XDG_SESSION_TYPE");
+-
+-    if (!sessionType.compare(kSession, Qt::CaseSensitive)) {
+-        mIsWayland = true;
+-    } else {
+-        mIsWayland = false;
+-    }
+-}
+-
+-
+-void Widget::setDDCBrightnessN(int value, QString screenName)
+-{
+-    QString type;
+-    if (screenName.contains("VGA", Qt::CaseInsensitive)) {
+-        type = "4";
+-    } else {
+-        type = "8";
+-    }
+-    QDBusInterface ukccIfc("com.control.center.qt.systemdbus",
+-                           "/",
+-                           "com.control.center.interface",
+-                           QDBusConnection::systemBus());
+-
+-
+-       if (mLock.tryLock()) {
+-            ukccIfc.call("setDDCBrightness", QString::number(value), type);
+-            mLock.unlock();
+-       }
+-}
+-
+-void Widget::setDDCBrightnessN(int value, QString edidHash, QString i2cBus)
+-{
+-    if (i2cBus == "")
+-        return;
+-
+-    QDBusInterface ukccIfc("com.control.center.qt.systemdbus",
+-                           "/",
+-                           "com.control.center.interface",
+-                           QDBusConnection::systemBus());
+-
+-
+-    if (mLock.tryLock()) {
+-        ukccIfc.call("setDisplayBrightness", QString::number(value), edidHash, i2cBus);
+-        mLock.unlock();
+-    }
+-
+-}
+-
+-void Widget::setScreenKDS(QString kdsConfig)
+-{
+-    KScreen::OutputList screens = mConfig->connectedOutputs();
+-    int firstScreenID = screens.begin().key();
+-    int endScreenID = screens.end().key();
+-    if (kdsConfig == "expand") {
+-        Q_FOREACH(KScreen::OutputPtr output, screens) {
+-            if (!output.isNull() && !mUnifyButton->isChecked()) {
+-                output->setEnabled(true);
+-                output->setCurrentModeId("0");
+-            }
+-        }
+-
+-        KScreen::OutputList screensPre = mPrevConfig->connectedOutputs();
+-
+-        KScreen::OutputPtr mainScreen = mPrevConfig->primaryOutput();
+-        if (!mainScreen.isNull()) {
+-            mainScreen->setPos(QPoint(0, 0));
+-        }
+-
+-        KScreen::OutputPtr preIt = mainScreen;
+-        QMap<int, KScreen::OutputPtr>::iterator nowIt = screensPre.begin();
+-
+-        while (nowIt != screensPre.end()) {
+-            if (nowIt.value() != mainScreen) {
+-                nowIt.value()->setPos(QPoint(preIt->pos().x() + preIt->size().width(), 0));
+-                KScreen::ModeList modes = preIt->modes();
+-                Q_FOREACH (const KScreen::ModePtr &mode, modes) {
+-                    if (preIt->currentModeId() == mode->id()) {
+-                        if (preIt->rotation() != KScreen::Output::Rotation::Left && preIt->rotation() != KScreen::Output::Rotation::Right) {
+-                            nowIt.value()->setPos(QPoint(preIt->pos().x() + mode->size().width(), 0));
+-                        } else {
+-                            nowIt.value()->setPos(QPoint(preIt->pos().x() + mode->size().height(), 0));
+-                        }
+-                    }
+-                }
+-                preIt = nowIt.value();
+-            }
+-            nowIt++;
+-        }
+-    } else if (kdsConfig == "first") {
+-        QMapIterator<int, KScreen::OutputPtr> firstIt(screens);
+-        while (firstIt.hasNext()) {
+-            firstIt.next();
+-            firstIt.value()->setEnabled(firstIt.key() == firstScreenID);
+-        }
+-    } else if (kdsConfig == "second") {
+-        QMapIterator<int, KScreen::OutputPtr> endIt(screens);
+-        while (endIt.hasNext()) {
+-            endIt.next();
+-            endIt.value()->setEnabled(endIt.key() == endScreenID);
+-        }
+-    } else {
+-        Q_FOREACH(KScreen::OutputPtr output, screens) {
+-            if (!output.isNull()) {
+-                output->setEnabled(true);
+-            }
+-        }
+-    }
+-    delayApply();
+-}
+-
+-void Widget::setActiveScreen(QString status)
+-{
+-    int activeScreenId = 1;
+-    int enableCount = 0;
+-    int connectCount = 0;
+-    Q_FOREACH(const KScreen::OutputPtr &output, mConfig->connectedOutputs()) {
+-        connectCount++;
+-        enableCount = (output->isEnabled() ? (++enableCount) : enableCount);
+-    }
+-
+-    if (status == "second") {
+-        activeScreenId = connectCount;
+-    }
+-
+-    for (int index = 0; index <= ui->primaryCombo->count(); index++) {
+-        KScreen::OutputPtr output = mConfig->output(ui->primaryCombo->itemData(index).toInt());
+-        if (status.isEmpty() && connectCount > enableCount && !output.isNull() && output->isEnabled()) {
+-            ui->primaryCombo->setCurrentIndex(index);
+-        }
+-
+-        if (!status.isEmpty() && !output.isNull() && activeScreenId == output->id()) {
+-            ui->primaryCombo->setCurrentIndex(index);
+-        }
+-    }
+-}
+-
+-QList<ScreenConfig> Widget::getPreScreenCfg()
+-{
+-    QDBusMessage msg = mUkccInterface.get()->call("getPreScreenCfg");
+-    if(msg.type() == QDBusMessage::ErrorMessage) {
+-        qWarning() << "get pre screen cfg failed";
+-    }
+-    QDBusArgument argument = msg.arguments().at(0).value<QDBusArgument>();
+-    QList<QVariant> infos;
+-    argument >> infos;
+-
+-    QList<ScreenConfig> preScreenCfg;
+-    for (int i = 0; i < infos.size(); i++){
+-        ScreenConfig cfg;
+-        infos.at(i).value<QDBusArgument>() >> cfg;
+-        preScreenCfg.append(cfg);
+-    }
+-
+-    return preScreenCfg;
+-}
+-
+-void Widget::setPreScreenCfg(KScreen::OutputList screens)
+-{
+-    QMap<int, KScreen::OutputPtr>::iterator nowIt = screens.begin();
+-
+-    QVariantList retlist;
+-    int enableCount = 0;
+-    while (nowIt != screens.end()) {
+-        ScreenConfig cfg;
+-        cfg.screenId = nowIt.value()->name();
+-        cfg.screenModeId = nowIt.value()->currentModeId();
+-        cfg.screenPosX = nowIt.value()->pos().x();
+-        cfg.screenPosY = nowIt.value()->pos().y();
+-        cfg.primary = nowIt.value()->isPrimary();
+-
+-        QVariant variant = QVariant::fromValue(cfg);
+-        retlist << variant;
+-        if (nowIt.value()->isEnabled()) {
+-            enableCount++;
+-        }
+-        nowIt++;
+-    }
+-    if (enableCount < 2) {
+-        return;
+-    }
+-
+-    mUkccInterface.get()->call("setPreScreenCfg", retlist);
+-
+-    QVariantList outputList;
+-    Q_FOREACH(QVariant variant, retlist) {
+-        ScreenConfig screenCfg = variant.value<ScreenConfig>();
+-        QVariantMap map;
+-        map["id"] = screenCfg.screenId;
+-        map["modeid"] = screenCfg.screenModeId;
+-        map["x"] = screenCfg.screenPosX;
+-        map["y"] = screenCfg.screenPosY;
+-        map["primary"] = screenCfg.primary;
+-        outputList << map;
+-    }
+-
+-    QString filePath = QDir::homePath() + "/.config/ukui/ukcc-screenPreCfg.json";
+-    QFile file(filePath);
+-    if (!file.open(QIODevice::WriteOnly)) {
+-        qWarning() << "Failed to open config file for writing! " << file.errorString();
+-
+-    }
+-    file.write(QJsonDocument::fromVariant(outputList).toJson());
+-}
+-
+-void Widget::setScreenIsApply(bool isApply)
+-{
+-    mIsScreenAdd = !isApply;
+-}
+-
+-int Widget::screenEnableCount()
+-{
+-    int enableCount = 0;
+-    Q_FOREACH(KScreen::OutputPtr output, mConfig->connectedOutputs()) {
+-        if (output->isEnabled()) {
+-            enableCount++;
+-        }
+-    }
+-    return enableCount;
+-}
+-
+-void Widget::setExtendPrimaryScreen()
+-{
+-    QVector<KScreen::Output *> outputs;
+-    Q_FOREACH (const auto &output, mConfig->outputs()) {
+-        outputs << output.data();
+-    }
+-
+-    QCryptographicHash hash(QCryptographicHash::Md5);
+-    Q_FOREACH (const KScreen::Output *output, outputs) {
+-        hash.addData(output->uuid());
+-    }
+-    QByteArray groupUuid = QByteArray(1, '0').append(hash.result().toHex()).left(15);
+-    const auto config = KSharedConfig::openConfig(QLatin1String("ukui-kwinrc"));
+-    const auto outputGroup = config->group("DrmOutputs");
+-    const auto configGroup = outputGroup.group(groupUuid);
+-
+-    Q_FOREACH (const auto &output, outputs) {
+-        const auto outputConfig = configGroup.group(output->uuid());
+-        bool primary = outputConfig.readEntry<bool>("Primary", false);
+-        if (primary) {
+-            output->setPrimary(true);
+-        }
+-    }
+-}
+-
+-void Widget::showZoomtips()
+-{
+-    int ret;
+-    QMessageBox msg(this->topLevelWidget());
+-    msg.setWindowTitle(tr("Hint"));
+-    msg.setIcon(QMessageBox::Warning);
+-    msg.setText(tr("The zoom has been modified, it will take effect after you log off"));
+-    msg.addButton(tr("Log out now"), QMessageBox::AcceptRole);
+-    msg.addButton(tr("Later"), QMessageBox::RejectRole);
+-
+-    ret = msg.exec();
+-
+-    switch (ret) {
+-    case QMessageBox::AcceptRole:
+-        system("ukui-session-tools --logout");
+-        break;
+-    case QMessageBox::RejectRole:
+-        break;
+-    }
+-}
+-
+-//通过win+p修改,不存在按钮影响亮度显示的情况,直接就应用了,此时每个屏幕的openFlag是没有修改的,需要单独处理(setScreenKDS)
+-void Widget::kdsScreenchangeSlot(QString status)
+-{
+-    qDebug() << Q_FUNC_INFO << "changed by kds";
+-    if (!status.compare(mPreKDSCfg)) {
+-        return;
+-    }
+-    if (!mUnifyButton->isChecked()) {
+-        setPreScreenCfg(mConfig->connectedOutputs());
+-    }
+-    //fix bug#107519,由于从镜像变为扩展之后,UnifiedOutputCfg监听到currentModeId改变从而修改了分辨率导致
+-    if (status != "copy") {
+-        mControlPanel->deleteUnifiedOutputCfg();
+-    }
+-    QTimer::singleShot(2500, this, [=] {
+-        bool isPreChecked = mUnifyButton->isChecked();
+-        bool isCheck = (status == "copy") ? true : false;
+-        mKDSCfg = status;
+-        mPreKDSCfg = status;
+-        mPrevConfig = mConfig->clone();
+-        if (mConfig->connectedOutputs().count() >= 2) {
+-            mUnifyButton->setChecked(isCheck);
+-        }
+-        bool afterChecked = mUnifyButton->isChecked();
+-
+-        Q_FOREACH(KScreen::OutputPtr output, mConfig->connectedOutputs()) {
+-            if (output.isNull())
+-                continue;
+-            for (int i = 0; i < BrightnessFrameV.size(); ++i) {
+-                if (BrightnessFrameV[i]->outputName == Utils::outputName(output)) {
+-                    BrightnessFrameV[i]->openFlag = output->isEnabled();
+-                }
+-            }
+-        }
+-        if (isCheck == true) {
+-            showBrightnessFrame(1);
+-        } else {
+-            showBrightnessFrame(2);
+-        }
+-        // 统一输出按钮状态未改变,清除标志位
+-        if (isPreChecked == afterChecked) {
+-            mKDSCfg.clear();
+-        }
+-        enableChangedSlot();
+-        mainScreenButtonSelect(ui->primaryCombo->currentIndex());
+-    });
+-}
+-
+-void Widget::delayApply()
+-{
+-    QTimer::singleShot(500, this, [=] {
+-        if (mKDSCfg.isEmpty() && !mIsScreenAdd) {
+-            slotQmloutOutChanged();
+-            save();
+-            enableChangedSlot();
+-        }
+-        mIsUnifyChanged = false;
+-        mKDSCfg.clear();
+-        mIsScreenAdd = false;
+-    });
+-}
+-
+-void Widget::enableChangedSlot()
+-{
+-    int count = 0;
+-    for (KScreen::OutputPtr output : mConfig->connectedOutputs()) {
+-        if (output->isEnabled()) {
+-            count++;
+-        }
+-    }
+-
+-    for (QMLOutput *output: mScreen->outputs()) {
+-        output->setEnableCount(count);
+-    }
+-}
+-
+-void Widget::setKscreenConfig(const KScreen::ConfigPtr &config)
+-{
+-    /* Store the current config, apply settings */
+-    auto *op = new KScreen::SetConfigOperation(config);
+-
+-    /* Block until the operation is completed, otherwise KCMShell will terminate
+-     * before we get to execute the Operation */
+-    op->exec();
+-    op->deleteLater();
+-    op = nullptr;
+-}
+-
+-void Widget::save()
+-{
+-    qDebug() << Q_FUNC_INFO << "apply config";
+-    if (!this) {
+-        return;
+-    }
+-
+-    const KScreen::ConfigPtr &config = this->currentConfig();
+-
+-    Q_FOREACH (const KScreen::OutputPtr &output, config->outputs()) {
+-        if (!output->isConnected())
+-            continue;
+-
+-        QMLOutput *base = mScreen->primaryOutput();
+-        if (!base) {
+-            for (QMLOutput *output: mScreen->outputs()) {
+-                if (output->output()->isConnected() && output->output()->isEnabled()) {
+-                    base = output;
+-                    break;
+-                }
+-            }
+-
+-            if (!base) {
+-                // WTF?
+-                return;
+-            }
+-        }
+-    }
+-
+-    if (((ui->opHourCom->currentIndex() < ui->clHourCom->currentIndex())
+-                || (ui->opHourCom->currentIndex() == ui->clHourCom->currentIndex()
+-                    && ui->opMinCom->currentIndex() <= ui->clMinCom->currentIndex()))
+-               && CUSTOM == singleButton->checkedId() && mNightButton->isChecked()) {
+-        QMessageBox::warning(this, tr("Warning"),
+-                             tr("Open time should be earlier than close time!"));
+-        mCloseScreenButton->setChecked(true);
+-        return;
+-    }
+-
+-    setNightMode(mNightButton->isChecked());
+-
+-    if (!KScreen::Config::canBeApplied(config)) {
+-        QMessageBox::information(this,
+-                                 tr("Warnning"),
+-                                 tr("Sorry, your configuration could not be applied.\nCommon reasons are that the overall screen size is too big, or you enabled more displays than supported by your GPU."));
+-        return;
+-    }
+-
+-    int enableScreenCount = 0;
+-    KScreen::OutputPtr enableOutput;
+-    for (const KScreen::OutputPtr &output : mConfig->outputs()) {
+-        if (output->isEnabled()) {
+-            enableOutput = output;
+-            enableScreenCount++;
+-        }
+-    }
+-    KScreen::ConfigPtr mPrevConfig = mPreScreenConfig->clone();
+-    if (enableScreenCount > 0) {
+-        auto *preOp = new KScreen::GetConfigOperation();
+-        preOp->exec();
+-        mPrevConfig = preOp->config()->clone();  //重新获取屏幕当前状态
+-        preOp->deleteLater();
+-    }
+-
+-    setKscreenConfig(config);
+-
+-    // The 1000ms is a bit "random" here, it's what works on the systems I've tested, but ultimately, this is a hack
+-    // due to the fact that we just can't be sure when xrandr is done changing things, 1000 doesn't seem to get in the way
+-    QTimer::singleShot(1000, this,
+-                       [=]() {
+-        if (mIsWayland) {
+-            QString hash = config->connectedOutputsHash();
+-            writeFile(mDir % hash);
+-        }
+-        mIsUnifyChanged = false;
+-        mConfigChanged = false;
+-        mainScreenButtonSelect(ui->primaryCombo->currentIndex());
+-    });
+-
+-    if (isRestoreConfig()) {
+-        auto *op = new KScreen::SetConfigOperation(mPrevConfig);
+-        op->exec();
+-        // 无法知道什么时候执行完操作
+-        QTimer::singleShot(1000, this, [=]() {
+-            writeFile(mDir % mPrevConfig->connectedOutputsHash());
+-        });
+-    } else {
+-        mPreKDSCfg.clear();  // 控制面板主动操作,清除win+p标志位
+-        mPreScreenConfig = mConfig->clone();
+-    }
+-
+-    if (enableScreenCount >= 2 && !mUnifyButton->isChecked()) {
+-        setPreScreenCfg(mConfig->connectedOutputs());
+-    }
+-
+-    setActiveScreen();
+-
+-    for (int i = 0; i < BrightnessFrameV.size(); ++i) {   //应用成功再更新屏幕是否开启的状态,判断亮度条是否打开
+-        for (KScreen::OutputPtr output : mConfig->outputs()) {
+-            if (BrightnessFrameV[i]->outputName == Utils::outputName(output)) {
+-                BrightnessFrameV[i]->openFlag = output->isEnabled();
+-            }
+-        }
+-    }
+-    int flag = mUnifyButton->isChecked() ? 1 : 2;
+-    showBrightnessFrame(flag);  //成功应用之后,重新显示亮度条,传入是否统一输出,1表示打开,2表示关闭
+-}
+-
+-QVariantMap metadata(const KScreen::OutputPtr &output)
+-{
+-    QVariantMap metadata;
+-    metadata[QStringLiteral("name")] = output->name();
+-    if (!output->edid() || !output->edid()->isValid()) {
+-        return metadata;
+-    }
+-
+-    metadata[QStringLiteral("fullname")] = output->edid()->deviceId();
+-    return metadata;
+-}
+-
+-QString Widget::globalFileName(const QString &hash)
+-{
+-    QString s_dirPath = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation)
+-                        %QStringLiteral("/kscreen/");
+-    QString dir = s_dirPath  % QStringLiteral("outputs/");
+-    if (!QDir().mkpath(dir)) {
+-        return QString();
+-    }
+-    return QString();
+-}
+-
+-QVariantMap Widget::getGlobalData(KScreen::OutputPtr output)
+-{
+-    QFile file(globalFileName(output->hashMd5()));
+-    if (!file.open(QIODevice::ReadOnly)) {
+-        qDebug() << "Failed to open file" << file.fileName();
+-        return QVariantMap();
+-    }
+-    QJsonDocument parser;
+-    return parser.fromJson(file.readAll()).toVariant().toMap();
+-}
+-
+-void Widget::writeGlobal(const KScreen::OutputPtr &output)
+-{
+-    // get old values and subsequently override
+-    QVariantMap info = getGlobalData(output);
+-    if (!writeGlobalPart(output, info, nullptr)) {
+-        return;
+-    }
+-    QFile file(globalFileName(output->hashMd5()));
+-    if (!file.open(QIODevice::WriteOnly)) {
+-        qWarning() << "Failed to open global output file for writing! " << file.errorString();
+-        return;
+-    }
+-
+-    file.write(QJsonDocument::fromVariant(info).toJson());
+-    return;
+-}
+-
+-bool Widget::writeGlobalPart(const KScreen::OutputPtr &output, QVariantMap &info,
+-                             const KScreen::OutputPtr &fallback)
+-{
+-    info[QStringLiteral("id")] = output->hash();
+-    info[QStringLiteral("metadata")] = metadata(output);
+-    info[QStringLiteral("rotation")] = output->rotation();
+-
+-    // Round scale to four digits
+-    info[QStringLiteral("scale")] = int(output->scale() * 10000 + 0.5) / 10000.;
+-
+-    QVariantMap modeInfo;
+-    float refreshRate = -1.;
+-    QSize modeSize;
+-    if (output->currentMode() && output->isEnabled()) {
+-        refreshRate = output->currentMode()->refreshRate();
+-        modeSize = output->currentMode()->size();
+-    } else if (fallback && fallback->currentMode()) {
+-        refreshRate = fallback->currentMode()->refreshRate();
+-        modeSize = fallback->currentMode()->size();
+-    }
+-
+-    if (refreshRate < 0 || !modeSize.isValid()) {
+-        return false;
+-    }
+-
+-    modeInfo[QStringLiteral("refresh")] = refreshRate;
+-
+-    QVariantMap modeSizeMap;
+-    modeSizeMap[QStringLiteral("width")] = modeSize.width();
+-    modeSizeMap[QStringLiteral("height")] = modeSize.height();
+-    modeInfo[QStringLiteral("size")] = modeSizeMap;
+-
+-    info[QStringLiteral("mode")] = modeInfo;
+-
+-    return true;
+-}
+-
+-bool Widget::writeFile(const QString &filePath)
+-{
+-    const KScreen::OutputList outputs = mConfig->outputs();
+-    const auto oldConfig = mPreScreenConfig;
+-    KScreen::OutputList oldOutputs;
+-    if (oldConfig) {
+-        oldOutputs = oldConfig->outputs();
+-    }
+-    QVariantList outputList;
+-    for (const KScreen::OutputPtr &output : outputs) {
+-        QVariantMap info;
+-        const auto oldOutputIt = std::find_if(oldOutputs.constBegin(), oldOutputs.constEnd(),
+-                                              [output](const KScreen::OutputPtr &out) {
+-            return out->hashMd5() == output->hashMd5();
+-        });
+-        const KScreen::OutputPtr oldOutput = oldOutputIt != oldOutputs.constEnd() ? *oldOutputIt
+-                                             : nullptr;
+-        if (!output->isConnected()) {
+-            continue;
+-        }
+-
+-        writeGlobalPart(output, info, oldOutput);
+-        info[QStringLiteral("primary")] = output->isPrimary();
+-        info[QStringLiteral("enabled")] = output->isEnabled();
+-
+-        auto setOutputConfigInfo = [&info](const KScreen::OutputPtr &out) {
+-                                       if (!out) {
+-                                           return;
+-                                       }
+-
+-                                       QVariantMap pos;
+-                                       pos[QStringLiteral("x")] = out->pos().x();
+-                                       pos[QStringLiteral("y")] = out->pos().y();
+-                                       info[QStringLiteral("pos")] = pos;
+-                                   };
+-        setOutputConfigInfo(output->isEnabled() ? output : oldOutput);
+-
+-        if (output->isEnabled()) {
+-            // try to update global output data
+-            writeGlobal(output);
+-        }
+-        outputList.append(info);
+-    }
+-
+-    QFile file(filePath);
+-    if (!file.open(QIODevice::WriteOnly)) {
+-        qWarning() << "Failed to open config file for writing! " << file.errorString();
+-        return false;
+-    }
+-    file.write(QJsonDocument::fromVariant(outputList).toJson());
+-    qDebug() << "Config saved on: " << file.fileName();
+-
+-    return true;
+-}
+-
+-void Widget::scaleChangedSlot(double scale)
+-{
+-    if (scaleGSettings->get(SCALE_KEY).toDouble() != scale) {
+-        mIsScaleChanged = true;
+-    } else {
+-        mIsScaleChanged = false;
+-    }
+-    writeScale(scale);
+-}
+-
+-void Widget::changedSlot()
+-{
+-    mConfigChanged = true;
+-}
+-
+-void Widget::propertiesChangedSlot(QString property, QMap<QString, QVariant> propertyMap,
+-                                   QStringList propertyList)
+-{
+-    Q_UNUSED(property);
+-    Q_UNUSED(propertyList);
+-    if (propertyMap.keys().contains("OnBattery")) {
+-        mOnBattery = propertyMap.value("OnBattery").toBool();
+-    }
+-}
+-
+-// 是否禁用主屏按钮
+-void Widget::mainScreenButtonSelect(int index)
+-{
+-    if (!mConfig || ui->primaryCombo->count() <= 0) {
+-        return;
+-    }
+-
+-    const KScreen::OutputPtr newPrimary = mConfig->output(ui->primaryCombo->itemData(index).toInt());
+-
+-    if (!newPrimary->isEnabled()) {
+-        ui->scaleCombo->setEnabled(false);
+-    } else {
+-        ui->scaleCombo->setEnabled(true);
+-    }
+-
+-    int connectCount = mConfig->connectedOutputs().count();
+-
+-    if (newPrimary == mConfig->primaryOutput() || mUnifyButton->isChecked() || (mConfig->connectedOutputs().count() == 1) || !newPrimary->isEnabled()) {
+-        ui->mainScreenButton->setEnabled(false);
+-    } else {
+-        ui->mainScreenButton->setEnabled(true);
+-    }
+-
+-    // 设置是否勾选
+-    mCloseScreenButton->setEnabled(true);
+-    ui->showMonitorframe->setVisible(connectCount > 1 && !mUnifyButton->isChecked());
+-
+-    // 初始化时不要发射信号
+-    mCloseScreenButton->blockSignals(true);
+-    mCloseScreenButton->setChecked(newPrimary->isEnabled());
+-    mCloseScreenButton->blockSignals(false);
+-    mControlPanel->activateOutput(newPrimary);
+-
+-    mScreen->setActiveOutputByCombox(newPrimary->id());
+-}
+-
+-// 设置主屏按钮
+-void Widget::primaryButtonEnable(bool status)
+-{
+-    Q_UNUSED(status);
+-    if (!mConfig) {
+-        return;
+-    }
+-    int index = ui->primaryCombo->currentIndex();
+-    ui->mainScreenButton->setEnabled(false);
+-    const KScreen::OutputPtr newPrimary = mConfig->output(ui->primaryCombo->itemData(index).toInt());
+-    mConfig->setPrimaryOutput(newPrimary);
+-}
+-
+-void Widget::checkOutputScreen(bool judge)
+-{
+-    const KScreen::ConfigPtr &config = this->currentConfig();
+-
+-    int enableOutputCount = 0;
+-    Q_FOREACH (const KScreen::OutputPtr &output, config->outputs()) {
+-        if (output->isEnabled()) {
+-            enableOutputCount++;
+-        }
+-    }
+-    if (enableOutputCount < 2 && !judge) {
+-        QMessageBox::warning(this, tr("Warning"), tr("please insure at least one output!"));
+-        mCloseScreenButton->blockSignals(true);
+-        mCloseScreenButton->setChecked(true);
+-        mCloseScreenButton->blockSignals(false);
+-        return;
+-    }
+-
+-    int index = ui->primaryCombo->currentIndex();
+-    KScreen::OutputPtr newPrimary = mConfig->output(ui->primaryCombo->itemData(index).toInt());
+-
+-    KScreen::OutputPtr mainScreen = mConfig->primaryOutput();
+-
+-    if (!mainScreen) {
+-        mConfig->setPrimaryOutput(newPrimary);
+-    }
+-    mainScreen = mConfig->primaryOutput();
+-
+-    if (!judge) {
+-        setPreScreenCfg(mConfig->connectedOutputs());
+-    } else {
+-        QList<ScreenConfig> preScreenCfg = getPreScreenCfg();
+-        KScreen::OutputList screens = mConfig->connectedOutputs();
+-
+-        if (!preScreenCfg.isEmpty()) {
+-            Q_FOREACH(ScreenConfig cfg, preScreenCfg) {
+-                Q_FOREACH(KScreen::OutputPtr output, screens) {
+-                    if (!cfg.screenId.compare(output->name())) {
+-                        output->setPos(QPoint(cfg.screenPosX, cfg.screenPosY));
+-                    }
+-                }
+-            }
+-        } else {
+-            KScreen::OutputPtr enableOutput;
+-            Q_FOREACH(KScreen::OutputPtr output, screens) {
+-                if (output->isEnabled()) {
+-                    enableOutput = output;
+-                    break;
+-                }
+-            }
+-            newPrimary->setEnabled(judge);
+-            newPrimary->setPos(QPoint(enableOutput->size().width(), 0));
+-        }
+-        setExtendPrimaryScreen();
+-    }
+-
+-    newPrimary->setEnabled(judge);
+-
+-
+-    ui->primaryCombo->blockSignals(true);
+-    ui->primaryCombo->setCurrentIndex(index);
+-    ui->primaryCombo->blockSignals(false);
+-    mainScreenButtonSelect(index);
+-}
+-
+-
+-void Widget::initConnection()
+-{
+-    connect(mNightButton, SIGNAL(checkedChanged(bool)), this, SLOT(showNightWidget(bool)));
+-    connect(mThemeButton, SIGNAL(checkedChanged(bool)), this, SLOT(slotThemeChanged(bool)));
+-    connect(singleButton, SIGNAL(buttonClicked(int)), this, SLOT(showCustomWiget(int)));
+-
+-    connect(ui->mainScreenButton, &QPushButton::clicked, this, [=](bool status) {
+-       primaryButtonEnable(status);
+-       delayApply();
+-    });
+-
+-    mControlPanel = new ControlPanel(this);
+-    connect(mControlPanel, &ControlPanel::changed, this, &Widget::changed);
+-    connect(this, &Widget::changed, this, &Widget::changedSlot);
+-    connect(mControlPanel, &ControlPanel::scaleChanged, this, &Widget::scaleChangedSlot);
+-
+-    connect(this, &Widget::changed, this, [=](){
+-        changedSlot();
+-        delayApply();
+-    });
+-
+-    ui->controlPanelLayout->addWidget(mControlPanel);
+-
+-    connect(mCloseScreenButton, &KSwitchButton::stateChanged, this, [this](bool checked){
+-        checkOutputScreen(checked);
+-        delayApply();
+-        changescale();
+-    });
+-
+-    connect(ui->advancedBtn, &QPushButton::clicked, this, [=] {
+-        DisplayPerformanceDialog *dialog = new DisplayPerformanceDialog;
+-        dialog->exec();
+-    });
+-
+-    connect(mUnifyButton, &KSwitchButton::stateChanged,
+-            [this] {
+-        mIsUnifyChanged = true;
+-        slotUnifyOutputs();
+-        setScreenIsApply(true);
+-        delayApply();
+-    });
+-
+-    QDBusConnection::sessionBus().connect(QString(),
+-                                          QString("/"),
+-                                          "org.ukui.ukcc.session.interface",
+-                                          "screenChanged",
+-                                          this,
+-                                          SLOT(kdsScreenchangeSlot(QString)));
+-
+-    QDBusConnection::sessionBus().connect(QString(),
+-                                          QString("/ColorCorrect"),
+-                                          "org.ukui.kwin.ColorCorrect",
+-                                          "nightColorConfigChanged",
+-                                          this,
+-                                          SLOT(nightChangedSlot(QHash<QString,QVariant>)));
+-
+-    mOutputTimer = new QTimer(this);
+-    connect(mOutputTimer, &QTimer::timeout,
+-            this, &Widget::clearOutputIdentifiers);
+-
+-    mApplyShortcut = new QShortcut(QKeySequence("Ctrl+A"), this);
+-    connect(mApplyShortcut, SIGNAL(activated()), this, SLOT(save()));
+-
+-    connect(ui->primaryCombo, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged),
+-            this, [=](int index) {
+-        mainScreenButtonSelect(index);
+-        showBrightnessFrame();  //当前屏幕框变化的时候,显示,此时不判断
+-
+-    });
+-}
+-
+-
+-void Widget::initTemptSlider()
+-{
+-    ui->temptSlider->setRange(1.1*1000, 6500);
+-    ui->temptSlider->setTracking(true);
+-
+-    for (int i = 0; i < 24; i++) {
+-        ui->opHourCom->addItem(QStringLiteral("%1").arg(i, 2, 10, QLatin1Char('0')));
+-        ui->clHourCom->addItem(QStringLiteral("%1").arg(i, 2, 10, QLatin1Char('0')));
+-    }
+-
+-    for (int i = 0; i < 60; i++) {
+-        ui->opMinCom->addItem(QStringLiteral("%1").arg(i, 2, 10, QLatin1Char('0')));
+-        ui->clMinCom->addItem(QStringLiteral("%1").arg(i, 2, 10, QLatin1Char('0')));
+-    }
+-}
+-
+-void Widget::setNightMode(const bool nightMode)
+-{
+-    QDBusInterface colorIft("org.ukui.KWin",
+-                            "/ColorCorrect",
+-                            "org.ukui.kwin.ColorCorrect",
+-                            QDBusConnection::sessionBus());
+-    if (!colorIft.isValid()) {
+-        qWarning() << "create org.ukui.kwin.ColorCorrect failed";
+-        return;
+-    }
+-
+-    if (!nightMode) {
+-        mNightConfig["Active"] = false;
+-    } else {
+-        mNightConfig["Active"] = true;
+-        mNightConfig["Mode"] = 2;
+-
+-        if (ui->sunradioBtn->isChecked()) {
+-            mNightConfig["EveningBeginFixed"] = "17:55:00";
+-            mNightConfig["MorningBeginFixed"] = "05:55:04";
+-        } else if (ui->customradioBtn->isChecked()) {
+-            mNightConfig["EveningBeginFixed"] = ui->opHourCom->currentText() + ":"
+-                                                + ui->opMinCom->currentText() + ":00";
+-            mNightConfig["MorningBeginFixed"] = ui->clHourCom->currentText() + ":"
+-                                                + ui->clMinCom->currentText() + ":00";
+-        }
+-        mNightConfig["NightTemperature"] = ui->temptSlider->value();
+-    }
+-
+-    colorIft.call("setNightColorConfig", mNightConfig);
+-}
+-
+-void Widget::initUiComponent()
+-{
+-    mDir = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation)
+-            %QStringLiteral("/kscreen/")
+-            %QStringLiteral("" /*"configs/"*/);
+-
+-    singleButton = new QButtonGroup();
+-    singleButton->addButton(ui->sunradioBtn);
+-    singleButton->addButton(ui->customradioBtn);
+-
+-    singleButton->setId(ui->sunradioBtn, SUN);
+-    singleButton->setId(ui->customradioBtn, CUSTOM);
+-
+-    MODE value = ui->customradioBtn->isChecked() == SUN ? SUN : CUSTOM;
+-    showNightWidget(mNightButton->isChecked());
+-    if (mNightButton->isChecked()) {
+-        showCustomWiget(value);
+-    }
+-
+-    QDBusInterface brightnessInterface("org.freedesktop.UPower",
+-                                       "/org/freedesktop/UPower/devices/DisplayDevice",
+-                                       "org.freedesktop.DBus.Properties",
+-                                       QDBusConnection::systemBus());
+-    if (!brightnessInterface.isValid()) {
+-        qDebug() << "Create UPower Interface Failed : " << QDBusConnection::systemBus().lastError();
+-        return;
+-    }
+-
+-    QDBusReply<QVariant> briginfo;
+-    briginfo = brightnessInterface.call("Get", "org.freedesktop.UPower.Device", "PowerSupply");
+-    mIsBattery = briginfo.value().toBool();
+-
+-    mUPowerInterface = QSharedPointer<QDBusInterface>(
+-        new QDBusInterface("org.freedesktop.UPower",
+-                           "/org/freedesktop/UPower",
+-                           "org.freedesktop.DBus.Properties",
+-                           QDBusConnection::systemBus()));
+-
+-    if (!mUPowerInterface.get()->isValid()) {
+-        qDebug() << "Create UPower Battery Interface Failed : " <<
+-            QDBusConnection::systemBus().lastError();
+-        return;
+-    }
+-
+-    QDBusReply<QVariant> batteryInfo;
+-    batteryInfo = mUPowerInterface.get()->call("Get", "org.freedesktop.UPower", "OnBattery");
+-    if (batteryInfo.isValid()) {
+-        mOnBattery = batteryInfo.value().toBool();
+-    }
+-
+-    mUPowerInterface.get()->connection().connect("org.freedesktop.UPower",
+-                                                 "/org/freedesktop/UPower",
+-                                                 "org.freedesktop.DBus.Properties",
+-                                                 "PropertiesChanged",
+-                                                 this,
+-                                                 SLOT(propertiesChangedSlot(QString,QMap<QString, QVariant>,
+-                                                                            QStringList)));
+-    mUkccInterface = QSharedPointer<QDBusInterface>(
+-                new QDBusInterface("org.ukui.ukcc.session",
+-                                   "/",
+-                                   "org.ukui.ukcc.session.interface",
+-                                   QDBusConnection::sessionBus()));
+-}
+-
+-void Widget::initNightStatus()
+-{
+-    QDBusInterface colorIft("org.ukui.KWin",
+-                            "/ColorCorrect",
+-                            "org.ukui.kwin.ColorCorrect",
+-                            QDBusConnection::sessionBus());
+-    if (colorIft.isValid() && UkccCommon::isExistEffect() && !mIsWayland) {
+-        this->mRedshiftIsValid = true;
+-    } else {
+-        qWarning() << "create org.ukui.kwin.ColorCorrect failed";
+-        return;
+-    }
+-
+-    QDBusMessage result = colorIft.call("nightColorInfo");
+-
+-    QList<QVariant> outArgs = result.arguments();
+-    QVariant first = outArgs.at(0);
+-    QDBusArgument dbvFirst = first.value<QDBusArgument>();
+-    QVariant vFirst = dbvFirst.asVariant();
+-    const QDBusArgument &dbusArgs = vFirst.value<QDBusArgument>();
+-
+-    QVector<ColorInfo> nightColor;
+-
+-    dbusArgs.beginArray();
+-    while (!dbusArgs.atEnd()) {
+-        ColorInfo color;
+-        dbusArgs >> color;
+-        nightColor.push_back(color);
+-    }
+-    dbusArgs.endArray();
+-
+-    for (ColorInfo it : nightColor) {
+-        mNightConfig.insert(it.arg, it.out.variant());
+-    }
+-
+-    this->mIsNightMode = mNightConfig["Active"].toBool();
+-    ui->temptSlider->setValue(mNightConfig["CurrentColorTemperature"].toInt());
+-    if (0 == mNightConfig["Mode"].toInt()) {
+-        ui->sunradioBtn->setChecked(true);
+-    } else if (2 == mNightConfig["Mode"].toInt()) {
+-        ui->customradioBtn->setChecked(true);
+-        QString openTime = mNightConfig["EveningBeginFixed"].toString();
+-        QString ophour = openTime.split(":").at(0);
+-        QString opmin = openTime.split(":").at(1);
+-
+-        ui->opHourCom->setCurrentIndex(ophour.toInt());
+-        ui->opMinCom->setCurrentIndex(opmin.toInt());
+-
+-        QString cltime = mNightConfig["MorningBeginFixed"].toString();
+-        QString clhour = cltime.split(":").at(0);
+-        QString clmin = cltime.split(":").at(1);
+-
+-        ui->clHourCom->setCurrentIndex(clhour.toInt());
+-        ui->clMinCom->setCurrentIndex(clmin.toInt());
+-    }
+-}
+-
+-void Widget::nightChangedSlot(QHash<QString, QVariant> nightArg)
+-{
+-    if (this->mRedshiftIsValid) {
+-        mNightButton->setChecked(nightArg["Active"].toBool());
+-    }
+-}
+-
+-
+-/* 总结: 亮度条怎么显示和实际的屏幕状态有关,与按钮选择状态关系不大:
+- * 实际为镜像模式,就显示所有屏幕的亮度(笔记本外显除外,笔记本外显任何情况均隐藏,这里未涉及)。
+- * 实际为扩展模式,就显示当前选中的屏幕亮度,如果当前选中复制模式,则亮度条隐藏不显示,应用之后再显示所有亮度条;
+- * 实际为单屏模式,即另一个屏幕关闭,则显示打开屏幕的亮度,关闭的显示器不显示亮度
+- *
+- *ps: by feng chao
+-*/
+-
+-void Widget::showBrightnessFrame(const int flag)
+-{
+-    QTimer::singleShot(0, this, [=]{
+-        int *pFlag = new int(flag);
+-        QObject::connect(new KScreen::GetConfigOperation(), &KScreen::GetConfigOperation::finished,
+-                         [&, pFlag](KScreen::ConfigOperation *op) {
+-            bool allShowFlag = true;
+-
+-            KScreen::ConfigPtr config = this->currentConfig();
+-
+-            KScreen::OutputPtr output = config->primaryOutput();
+-            if (mConfig->connectedOutputs().count() >= 2 && !output.isNull()) {
+-                foreach (KScreen::OutputPtr secOutput, config->connectedOutputs()) {
+-                    if (secOutput->geometry() != output->geometry() || !secOutput->isEnabled()) {
+-                        allShowFlag = false;
+-                    }
+-                    for (int i = 0; i < BrightnessFrameV.size(); ++i) { //检查其它显示屏是否实际打开,否则关闭,适用于显示器插拔
+-                            if (BrightnessFrameV[i]->outputName == Utils::outputName(secOutput)){
+-                                if (!secOutput->isEnabled())
+-                                    BrightnessFrameV[i]->openFlag = false;
+-                                else
+-                                    BrightnessFrameV[i]->openFlag = true;
+-                        }
+-                    }
+-                }
+-            } else {  //只有一个屏幕,把它亮度条打开,防止remove出问题
+-                allShowFlag = false;
+-                for (int i = 0; i < BrightnessFrameV.size(); ++i) {
+-                    if (BrightnessFrameV[i]->outputName == Utils::outputName(output)) {
+-                        BrightnessFrameV[i]->openFlag = true;
+-                    }
+-                }
+-            }
+-
+-            ui->unifyBrightFrame->setFixedHeight(0);
+-            if (*pFlag == 0 && allShowFlag == false && mUnifyButton->isChecked()) {  //选中了镜像模式,实际是扩展模式
+-
+-            } else if ((allShowFlag == true && *pFlag == 0) || *pFlag == 1) { //镜像模式/即将成为镜像模式
+-                ui->unifyBrightFrame->setFixedHeight(BrightnessFrameV.size() * (50 + 2 + 2));
+-                for (int i = 0; i < BrightnessFrameV.size(); ++i) {
+-                    BrightnessFrameV[i]->openFlag = true;
+-                    BrightnessFrameV[i]->setTextLableName(tr("Brightness") + QString("(") + BrightnessFrameV[i]->outputName + QString(")"));
+-                    BrightnessFrameV[i]->setVisible(true);
+-                }
+-            } else {
+-                for (int i = 0; i < BrightnessFrameV.size(); ++i) {
+-                    if (ui->primaryCombo->currentText() == BrightnessFrameV[i]->outputName && BrightnessFrameV[i]->openFlag) {
+-                        ui->unifyBrightFrame->setFixedHeight(52);
+-                        BrightnessFrameV[i]->setTextLableName(tr("Brightness"));
+-                        BrightnessFrameV[i]->setVisible(true);
+-                        //不能break,要把其他的frame隐藏
+-                    } else {
+-                        BrightnessFrameV[i]->setVisible(false);
+-                    }
+-                }
+-            }
+-            if (ui->unifyBrightFrame->height() > 0) {
+-                ui->unifyBrightFrame->setVisible(true);
+-            } else {
+-                ui->unifyBrightFrame->setVisible(false);
+-            }
+-            delete pFlag;
+-        });
+-    });
+-}
+-
+-void Widget::changescale()
+-{
+-    mScaleSizeRes = QSize();
+-    for (const KScreen::OutputPtr &output : mConfig->outputs()) {
+-        if (output->isEnabled()) {
+-            if (output->currentMode()) {
+-                if (mScaleSizeRes == QSize()) {
+-                    mScaleSizeRes = output->currentMode()->size();
+-                } else {
+-                    mScaleSizeRes = mScaleSizeRes.width() < output->currentMode()->size().width()?mScaleSizeRes:output->currentMode()->size();
+-                }
+-            } else {
+-                return;
+-            }
+-
+-        }
+-    }
+-    if (mScaleSizeRes != QSize(0,0)) {
+-        QSize scalesize = mScaleSizeRes;
+-        ui->scaleCombo->blockSignals(true);
+-        ui->scaleCombo->clear();
+-        ui->scaleCombo->addItem("100%", 1.0);
+-
+-        if (scalesize.width() > 1024 ) {
+-            ui->scaleCombo->addItem("125%", 1.25);
+-        }
+-        if (scalesize.width() == 1920 ) {
+-            ui->scaleCombo->addItem("150%", 1.5);
+-        }
+-        if (scalesize.width() > 1920) {
+-            ui->scaleCombo->addItem("150%", 1.5);
+-            ui->scaleCombo->addItem("175%", 1.75);
+-        }
+-        if (scalesize.width() >= 2160) {
+-            ui->scaleCombo->addItem("200%", 2.0);
+-        }
+-        if (scalesize.width() > 2560) {
+-            ui->scaleCombo->addItem("225%", 2.25);
+-        }
+-        if (scalesize.width() > 3072) {
+-            ui->scaleCombo->addItem("250%", 2.5);
+-        }
+-        if (scalesize.width() > 3840) {
+-            ui->scaleCombo->addItem("275%", 2.75);
+-        }
+-
+-        double scale;
+-        QStringList keys = scaleGSettings->keys();
+-        if (keys.contains("scalingFactor")) {
+-            scale = scaleGSettings->get(SCALE_KEY).toDouble();
+-        }
+-        if (ui->scaleCombo->findData(scale) == -1) {
+-            //记录分辨率切换时,新分辨率不存在的缩放率,在用户点击恢复设置时写入
+-            mIsSCaleRes = true;
+-            //记录是否因分辨率导致的缩放率变化
+-            mIsChange = true;
+-            scaleres = scale;
+-            scale = 1.0;
+-        }
+-        ui->scaleCombo->setCurrentText(QString::number(scale * 100) + "%");
+-        scaleChangedSlot(scale);
+-        ui->scaleCombo->blockSignals(false);
+-        mScaleSizeRes = QSize();
+-
+-    }
+-}
+-
+-void Widget::getAllI2Cbus()
+-{
+-    I2CbusMap.clear();
+-    QMap<QString, QString> msg;
+-    QString cmd = "find /sys/class/drm/card0-*/*/ -name '*i2c-[0-9]*'";
+-    QProcess process;
+-    process.start("bash", QStringList() <<"-c"<<cmd);
+-    process.waitForFinished();
+-    QString strResult = process.readAllStandardOutput();
+-    QStringList resultList = strResult.split("\n"); //所有结果
+-
+-    qDebug()<<"read i2c process result = "<<resultList;
+-    for (int i = 0; i < resultList.size(); i++) {
+-        QStringList i2cList = resultList.at(i).split("/"); //切割每一行结果
+-        if (i2cList.size() >= 5) {
+-            if (!msg.keys().contains(i2cList.at(4))) {
+-                //当不存在时就添加
+-                msg.insert(i2cList.at(4), resultList.at(i));
+-            } else {
+-                //已经存在,但是内容更少时也重新替换,drm中文件是嵌套的,可能存在包含关系,故做此处理
+-                if (msg[i2cList.at(4)].size() > resultList.at(i).size()) {
+-                    msg[i2cList.at(4)] = resultList.at(i);
+-                }
+-            }
+-        }
+-    }
+-    QMap<QString, QString>::const_iterator it;
+-    for (it = msg.constBegin(); it != msg.constEnd(); ++it) {
+-        qDebug()<<" ----------MAP-MSG--------- "<<it.key()<<" "<<it.value();
+-        //显示器名只取中间的(HDMI\VGA...),因为后面的内容kscreen和内核提供的不一定一致
+-        //因此当有多个HDMI接口时此方式并不适用
+-        QString name = it.key().split("-").at(1);
+-        QStringList i2cList = it.value().split("/");
+-        QString i2cStr = i2cList.at(i2cList.size() - 1);
+-        if (!i2cStr.contains("i2c-",Qt::CaseInsensitive)) {
+-            i2cStr = i2cList.at(i2cList.size() - 2);
+-        }
+-
+-        QString busNum = i2cStr.split("-").at(1);
+-        if (QString::number(busNum.toInt()) == busNum) {
+-            if (I2CbusMap.keys().contains(name)) {
+-                qDebug()<<"Unable to get the correct bus number from the kernel ... "<<name;
+-                I2CbusMap.clear(); //如果出现了一样的,表明有重复的接口,舍弃使用内核提供的bus号
+-                return;
+-            }
+-            qDebug()<<" i2c-name = "<<name<<" *** "<<"i2c-bus="<<busNum;
+-            I2CbusMap.insert(name, busNum);
+-        }
+-    }
+-    return;
+-}
+diff --git a/plugins/system/display_hw/widget.h b/plugins/system/display_hw/widget.h
+deleted file mode 100644
+index 77aad33..0000000
+--- a/plugins/system/display_hw/widget.h
++++ /dev/null
+@@ -1,260 +0,0 @@
+-#ifndef WIDGET_H
+-#define WIDGET_H
+-
+-#include <QMutex>
+-#include <QWidget>
+-#include <QVariantMap>
+-#include <QGSettings>
+-#include <QSettings>
+-#include <QButtonGroup>
+-#include <QDBusInterface>
+-#include <QDBusConnection>
+-#include <QDBusError>
+-#include <QDBusReply>
+-#include <QStringList>
+-#include <QSharedPointer>
+-#include <QHash>
+-#include <QVariant>
+-#include <QScreen>
+-#include <QMultiMap>
+-#include <QShortcut>
+-#include <QFuture>
+-
+-#include <KF5/KScreen/kscreen/config.h>
+-#include <unistd.h>
+-
+-#include "outputconfig.h"
+-#include "brightnessFrame.h"
+-#include "screenConfig.h"
+-#include "scalesize.h"
+-#include "kswitchbutton.h"
+-using namespace kdk;
+-
+-class QLabel;
+-class QMLOutput;
+-class QMLScreen;
+-class ControlPanel;
+-class PrimaryOutputCombo;
+-
+-class QPushButton;
+-class QComboBox;
+-
+-class QQuickView;
+-class QQuickWidget;
+-class QStyledItemDelegate;
+-
+-typedef enum {
+-    SUN,
+-    CUSTOM,
+-}MODE;
+-
+-namespace KScreen {
+-class ConfigOperation;
+-}
+-
+-namespace Ui {
+-class DisplayWindow;
+-}
+-
+-class Widget : public QWidget
+-{
+-    Q_OBJECT
+-
+-public:
+-    explicit Widget(QWidget *parent = nullptr);
+-    ~Widget() override;
+-
+-    void setConfig(const KScreen::ConfigPtr &config, bool showBrightnessFrameFlag = false);
+-    KScreen::ConfigPtr currentConfig() const;
+-
+-    void initConnection();
+-    QString getScreenName(QString name = "");
+-    void initTemptSlider();
+-
+-    bool writeFile(const QString &filePath);
+-    void writeGlobal(const KScreen::OutputPtr &output);
+-    bool writeGlobalPart(const KScreen::OutputPtr &output, QVariantMap &info,
+-                         const KScreen::OutputPtr &fallback);
+-    QString globalFileName(const QString &hash);
+-    QVariantMap getGlobalData(KScreen::OutputPtr output);
+-
+-    float converToScale(const int value);
+-    int scaleToSlider(const float value);
+-
+-    void initUiComponent();
+-    void addBrightnessFrame(QString name, bool openFlag, const KScreen::OutputPtr &output = nullptr, QString i2cBus = "");
+-    void showBrightnessFrame(const int flag = 0);
+-    void getAllI2Cbus();
+-
+-    void changescale();
+-    void setKscreenConfig(const KScreen::ConfigPtr &config);
+-protected:
+-    bool eventFilter(QObject *object, QEvent *event) override;
+-
+-Q_SIGNALS:
+-    void changed();
+-
+-    void nightModeChanged(const bool nightMode) const;
+-    void redShiftValidChanged(const bool isValid) const;
+-
+-private Q_SLOTS:
+-    void slotFocusedOutputChanged(QMLOutput *output);
+-
+-    void slotOutputEnabledChanged();
+-    void slotOutputConnectedChanged();
+-    void slotQmloutOutChanged();
+-
+-    void slotUnifyOutputs();
+-
+-    void slotIdentifyButtonClicked(bool checked = true);
+-    void slotIdentifyOutputs(KScreen::ConfigOperation *op);
+-    void clearOutputIdentifiers();
+-
+-    void outputAdded(const KScreen::OutputPtr &output);
+-    void outputRemoved(int outputId);
+-    void primaryOutputSelected(int index);
+-    void primaryOutputChanged(const KScreen::OutputPtr &output);
+-
+-    void showNightWidget(bool judge);
+-    void showCustomWiget(int index);
+-
+-    void slotThemeChanged(bool judge);
+-
+-    void primaryButtonEnable(bool);             // 按钮选择主屏确认按钮
+-    void mainScreenButtonSelect(int index);     // 是否禁用设置主屏按钮
+-    void checkOutputScreen(bool judge);         // 是否禁用屏幕
+-
+-    void setNightMode(const bool nightMode);    // 设置夜间模式
+-
+-    void initNightStatus();                     // 初始化夜间模式
+-    void nightChangedSlot(QHash<QString, QVariant> nightArg);
+-
+-    void isWayland();
+-
+-    void kdsScreenchangeSlot(QString status);
+-    void delayApply();
+-
+-    void enableChangedSlot();                  // 是否禁用小屏幕拖动
+-
+-public Q_SLOTS:
+-    void save();
+-    void scaleChangedSlot(double scale);
+-    void changedSlot();
+-    void propertiesChangedSlot(QString, QMap<QString, QVariant>, QStringList);
+-
+-private:
+-    void loadQml();
+-    void resetPrimaryCombo();
+-    void addOutputToPrimaryCombo(const KScreen::OutputPtr &output);
+-    KScreen::OutputPtr findOutput(const KScreen::ConfigPtr &config, const QVariantMap &info);
+-
+-    void setHideModuleInfo();
+-    void setTitleLabel();
+-    void writeScale(double scale);
+-    void initGSettings();
+-    void initNightUI();
+-
+-    bool isRestoreConfig();                       // 是否恢复应用之前的配置
+-    bool isCloneMode();
+-    bool isBacklight();
+-    bool isLaptopScreen();
+-    bool isVisibleBrightness();
+-
+-    QString getCpuInfo();
+-    QString getMonitorType();
+-
+-    int getDDCBrighthess();
+-    int getDDCBrighthess(QString name);
+-    int getDDCBrighthess(QString edidHash, QString i2cBus);
+-    int getLaptopBrightness() const;
+-
+-    void setDDCBrightnessN(int value, QString screenName);
+-    void setDDCBrightnessN(int value, QString edidHash, QString i2cBus);
+-    void setScreenKDS(QString kdsConfig);
+-    void setActiveScreen(QString status = "");
+-
+-    QList<ScreenConfig> getPreScreenCfg();
+-    void setPreScreenCfg(KScreen::OutputList screens);
+-
+-    void setScreenIsApply(bool isApply);
+-
+-    int screenEnableCount();
+-
+-    void setExtendPrimaryScreen();
+-
+-    void showZoomtips();
+-
+-private:
+-    Ui::DisplayWindow *ui;
+-    QMLScreen *mScreen = nullptr;
+-
+-    KScreen::ConfigPtr mConfig          = nullptr;
+-    KScreen::ConfigPtr mPrevConfig      = nullptr;
+-    KScreen::ConfigPtr mPreScreenConfig = nullptr;
+-
+-    ControlPanel *mControlPanel = nullptr;
+-
+-    OutputConfig *mOutputConfig = nullptr;        // 设置主显示器相关控件
+-
+-    QList<QQuickView *> mOutputIdentifiers;
+-    QTimer *mOutputTimer = nullptr;
+-
+-    QMutex      mLock;
+-
+-    QString     mCPU;
+-    QString     mDir;
+-    QStringList mPowerKeys;
+-    QString     mKDSCfg;
+-    QString     mPreKDSCfg;
+-
+-    KSwitchButton *mNightButton = nullptr;
+-    KSwitchButton *mCloseScreenButton = nullptr;
+-    KSwitchButton *mUnifyButton = nullptr;
+-    KSwitchButton *mThemeButton = nullptr;
+-
+-    QLabel *nightLabel = nullptr;
+-
+-    QGSettings *mGsettings = nullptr;
+-    QGSettings *scaleGSettings = nullptr;
+-    QGSettings *mPowerGSettings = nullptr;
+-
+-    QSettings *mQsettings = nullptr;
+-
+-    QButtonGroup *singleButton;
+-
+-    QSharedPointer<QDBusInterface> mUPowerInterface;
+-    QSharedPointer<QDBusInterface> mUkccInterface;
+-
+-    QHash<QString, QVariant> mNightConfig;
+-
+-    double scaleres = 1.0;
+-
+-    bool mIsNightMode     = false;
+-    bool mRedshiftIsValid = false;
+-    bool mIsScaleChanged  = false;
+-    bool mConfigChanged   = false;
+-    bool mOnBattery       = false;
+-    bool mIsUnifyChanged  = false;
+-    bool mFirstLoad       = true;
+-    bool mIsWayland       = false;
+-    bool mIsBattery       = false;
+-    bool mIsOutputAdd     = false;
+-    bool mIsScreenAdd     = false;
+-    bool mIsSCaleRes      = false;
+-    bool mIsChange = false;
+-
+-    QSize mScaleSizeRes = QSize();
+-
+-    bool threadRunExit = false;
+-    QFuture<void> threadRun;
+-
+-    QShortcut *mApplyShortcut;
+-    QVector<BrightnessFrame*> BrightnessFrameV;
+-    QVector<QString> deleteFrameNameV;  //用二级指针判断null出现问题,只想到这种方式排除段错误
+-    BrightnessFrame *currentBrightnessFrame;
+-    bool exitFlag = false;
+-    QMap<QString, QString> I2CbusMap;
+-
+-};
+-
+-#endif // WIDGET_H
+diff --git a/plugins/system/notice/notice.h b/plugins/system/notice/notice.h
+index 10e0db7..d3e48c4 100644
+--- a/plugins/system/notice/notice.h
++++ b/plugins/system/notice/notice.h
+@@ -31,7 +31,6 @@
+ #include <QComboBox>
+ 
+ #include <shell/interface.h>
+-#include "titlelabel.h"
+ #include "lightlabel.h"
+ #include "kswitchbutton.h"
+ #include "switchwidget.h"
+diff --git a/plugins/system/notice/noticeui.h b/plugins/system/notice/noticeui.h
+index 1d80044..bd460e9 100644
+--- a/plugins/system/notice/noticeui.h
++++ b/plugins/system/notice/noticeui.h
+@@ -6,7 +6,6 @@
+ #include <QComboBox>
+ 
+ #include <shell/interface.h>
+-#include "titlelabel.h"
+ #include "lightlabel.h"
+ #include "kswitchbutton.h"
+ #include "switchwidget.h"
+diff --git a/plugins/system/power/power.h b/plugins/system/power/power.h
+index 19baca7..20dc70b 100644
+--- a/plugins/system/power/power.h
++++ b/plugins/system/power/power.h
+@@ -30,9 +30,7 @@
+ #include <QButtonGroup>
+ 
+ #include "shell/interface.h"
+-#include "widgets/Label/titlelabel.h"
+ #include "widgets/ComboxFrame/comboxframe.h"
+-#include "widgets/Label/fixlabel.h"
+ #include <kysdk/kysdk-system/libkysysinfo.h>
+ #include "kswitchbutton.h"
+ using namespace kdk;
+diff --git a/plugins/time-language/area/area.pro b/plugins/time-language/area/area.pro
+index 5d3e1b5..680f604 100644
+--- a/plugins/time-language/area/area.pro
++++ b/plugins/time-language/area/area.pro
+@@ -6,7 +6,6 @@
+ include(../../../env.pri)
+ include($$PROJECT_ROOTDIR/libukcc/widgets/Label/label.pri)
+ include($$PROJECT_ROOTDIR/libukcc/widgets/AddBtn/addbtn.pri)
+-include($$PROJECT_ROOTDIR/libukcc/widgets/ImageUtil/imageutil.pri)
+ include($$PROJECT_ROOTDIR/libukcc/widgets/HoverWidget/hoverwidget.pri)
+ include($$PROJECT_ROOTDIR/libukcc/widgets/Frame/frame.pri)
+ include($$PROJECT_ROOTDIR/libukcc/widgets/SettingWidget/settingwidget.pri)
+diff --git a/plugins/time-language/area/area.ui b/plugins/time-language/area/area.ui
+deleted file mode 100644
+index 55e5dca..0000000
+--- a/plugins/time-language/area/area.ui
++++ /dev/null
+@@ -1,184 +0,0 @@
+-<?xml version="1.0" encoding="UTF-8"?>
+-<ui version="4.0">
+- <class>Area</class>
+- <widget class="QWidget" name="Area">
+-  <property name="geometry">
+-   <rect>
+-    <x>0</x>
+-    <y>0</y>
+-    <width>700</width>
+-    <height>551</height>
+-   </rect>
+-  </property>
+-  <property name="minimumSize">
+-   <size>
+-    <width>0</width>
+-    <height>0</height>
+-   </size>
+-  </property>
+-  <property name="maximumSize">
+-   <size>
+-    <width>16777215</width>
+-    <height>16777215</height>
+-   </size>
+-  </property>
+-  <property name="windowTitle">
+-   <string>Area</string>
+-  </property>
+-  <layout class="QVBoxLayout" name="verticalLayout_3">
+-   <property name="spacing">
+-    <number>8</number>
+-   </property>
+-   <property name="leftMargin">
+-    <number>0</number>
+-   </property>
+-   <property name="topMargin">
+-    <number>0</number>
+-   </property>
+-   <property name="rightMargin">
+-    <number>0</number>
+-   </property>
+-   <property name="bottomMargin">
+-    <number>0</number>
+-   </property>
+-   <item>
+-    <widget class="TitleLabel" name="titleLabel">
+-     <property name="minimumSize">
+-      <size>
+-       <width>0</width>
+-       <height>0</height>
+-      </size>
+-     </property>
+-     <property name="maximumSize">
+-      <size>
+-       <width>16777215</width>
+-       <height>16777215</height>
+-      </size>
+-     </property>
+-     <property name="text">
+-      <string>Language Format</string>
+-     </property>
+-    </widget>
+-   </item>
+-   <item>
+-    <layout class="QVBoxLayout" name="formatLayout"/>
+-   </item>
+-   <item>
+-    <layout class="QHBoxLayout" name="horizontalLayout_11">
+-     <property name="leftMargin">
+-      <number>0</number>
+-     </property>
+-     <property name="topMargin">
+-      <number>32</number>
+-     </property>
+-     <property name="bottomMargin">
+-      <number>0</number>
+-     </property>
+-     <item>
+-      <widget class="TitleLabel" name="title3Label">
+-       <property name="minimumSize">
+-        <size>
+-         <width>0</width>
+-         <height>0</height>
+-        </size>
+-       </property>
+-       <property name="maximumSize">
+-        <size>
+-         <width>16777215</width>
+-         <height>16777215</height>
+-        </size>
+-       </property>
+-       <property name="text">
+-        <string>System Language</string>
+-       </property>
+-      </widget>
+-     </item>
+-     <item>
+-      <spacer name="horizontalSpacer_10">
+-       <property name="orientation">
+-        <enum>Qt::Horizontal</enum>
+-       </property>
+-       <property name="sizeHint" stdset="0">
+-        <size>
+-         <width>40</width>
+-         <height>20</height>
+-        </size>
+-       </property>
+-      </spacer>
+-     </item>
+-    </layout>
+-   </item>
+-   <item>
+-    <widget class="LightLabel" name="summaryLabel">
+-     <property name="minimumSize">
+-      <size>
+-       <width>550</width>
+-       <height>0</height>
+-      </size>
+-     </property>
+-     <property name="maximumSize">
+-      <size>
+-       <width>960</width>
+-       <height>16777215</height>
+-      </size>
+-     </property>
+-     <property name="text">
+-      <string>TextLabel</string>
+-     </property>
+-    </widget>
+-   </item>
+-   <item>
+-    <layout class="QVBoxLayout" name="verticalLayout_4">
+-     <property name="spacing">
+-      <number>1</number>
+-     </property>
+-     <property name="topMargin">
+-      <number>0</number>
+-     </property>
+-     <item>
+-      <layout class="QVBoxLayout" name="languageLayout">
+-       <property name="spacing">
+-        <number>0</number>
+-       </property>
+-      </layout>
+-     </item>
+-     <item>
+-      <layout class="QVBoxLayout" name="addLayout">
+-       <property name="spacing">
+-        <number>0</number>
+-       </property>
+-      </layout>
+-     </item>
+-    </layout>
+-   </item>
+-   <item>
+-    <spacer name="verticalSpacer">
+-     <property name="orientation">
+-      <enum>Qt::Vertical</enum>
+-     </property>
+-     <property name="sizeHint" stdset="0">
+-      <size>
+-       <width>20</width>
+-       <height>0</height>
+-      </size>
+-     </property>
+-    </spacer>
+-   </item>
+-  </layout>
+- </widget>
+- <layoutdefault spacing="6" margin="11"/>
+- <customwidgets>
+-  <customwidget>
+-   <class>TitleLabel</class>
+-   <extends>QLabel</extends>
+-   <header location="global">titlelabel.h</header>
+-  </customwidget>
+-  <customwidget>
+-   <class>LightLabel</class>
+-   <extends>QLabel</extends>
+-   <header>lightlabel.h</header>
+-  </customwidget>
+- </customwidgets>
+- <resources/>
+- <connections/>
+-</ui>
+diff --git a/plugins/time-language/area/areaui.cpp b/plugins/time-language/area/areaui.cpp
+index 72cb73c..c767fea 100644
+--- a/plugins/time-language/area/areaui.cpp
++++ b/plugins/time-language/area/areaui.cpp
+@@ -32,7 +32,8 @@ void AreaUi::initUi()
+ 
+ void AreaUi::initLanguageFormat()
+ {
+-    formatTitleLabel = new TitleLabel(this);
++    formatTitleLabel = new KLabel(this);
++    formatTitleLabel->setContentsMargins(16, 0, 0, 0);
+     formatGroup      = new SettingGroup(this);
+     //~ contents_path /Area/Regional Format
+     countryWidget    = new ComboxWidget(tr("Regional Format"), formatGroup, UkccFrame::BorderRadiusStyle::Top);
+@@ -71,10 +72,11 @@ void AreaUi::initLanguageFormat()
+         QHBoxLayout* formatDateLayout = new QHBoxLayout();
+         formatDateLayout->setContentsMargins(16, 0, 16, 0);
+         //~ contents_path /Area/Language Format Example
+-        m_formatDateNameLabel = new FixLabel(tr("Language Format Example"), m_formatDateFrame);
++        m_formatDateNameLabel = new KLabel(m_formatDateFrame);
++        m_formatDateNameLabel->setText(tr("Language Format Example"));
+         m_formatDateNameLabel->setFixedSize(214, 59);
+ 
+-        m_formatDateValueLabel = new FixLabel(m_formatDateFrame);
++        m_formatDateValueLabel = new KLabel(m_formatDateFrame);
+ 
+         formatDateLayout->addWidget(m_formatDateNameLabel);
+         formatDateLayout->setSpacing(16);
+@@ -87,7 +89,8 @@ void AreaUi::initLanguageFormat()
+ 
+ void AreaUi::initSystemLanguage()
+ {
+-    languageTitleLable   = new TitleLabel(this);
++    languageTitleLable   = new KLabel(this);
++    languageTitleLable->setContentsMargins(16, 0, 0, 0);
+     languageGroup        = new SettingGroup(this);
+     addLanguageBtn       = new AddButton(this, UkccFrame::BorderRadiusStyle::Bottom);
+     addLanguageDialog    = new AddLanguageDialog(this);
+diff --git a/plugins/time-language/area/areaui.h b/plugins/time-language/area/areaui.h
+index 7774dda..bc5a805 100644
+--- a/plugins/time-language/area/areaui.h
++++ b/plugins/time-language/area/areaui.h
+@@ -4,14 +4,16 @@
+ #include "languageframe.h"
+ #include "addlanguagedialog.h"
+ #include "addinputmethoddialog.h"
+-#include "libukcc/widgets/Label/titlelabel.h"
+ #include "addbutton.h"
+ #include "settinggroup.h"
+ #include "comboxwidget.h"
+ #include <QWidget>
+ #include <QVBoxLayout>
+ #include "ukcccommon.h"
++#include <klabel.h>
++
+ using namespace ukcc;
++using namespace kdk;
+ 
+ class AreaUi : public QWidget
+ {
+@@ -119,7 +121,7 @@ public:
+         return m_formatDateFrame;
+     }
+ 
+-    inline FixLabel* formatDateValueLabel() {
++    inline KLabel* formatDateValueLabel() {
+         return m_formatDateValueLabel;
+     }
+ 
+@@ -137,7 +139,7 @@ private:
+     QVBoxLayout *LanguageLayout = nullptr;
+ 
+ private:
+-    TitleLabel   *formatTitleLabel = nullptr;
++    KLabel   *formatTitleLabel = nullptr;
+     SettingGroup *formatGroup      = nullptr;
+     ComboxWidget *countryWidget    = nullptr;
+     ComboxWidget *calendarWidget   = nullptr;
+@@ -147,14 +149,14 @@ private:
+     ComboxWidget *timeWidget       = nullptr;
+ 
+ private:
+-    TitleLabel           *languageTitleLable   = nullptr;
++    KLabel           *languageTitleLable   = nullptr;
+     AddButton            *addLanguageBtn       = nullptr;
+     SettingGroup         *languageGroup        = nullptr;
+     AddLanguageDialog    *addLanguageDialog    = nullptr;
+     AddInputMethodDialog *addInputMehtodDialog = nullptr;
+     UkccFrame* m_formatDateFrame = nullptr;
+-    FixLabel* m_formatDateNameLabel = nullptr;
+-    FixLabel* m_formatDateValueLabel = nullptr;
++    KLabel* m_formatDateNameLabel = nullptr;
++    KLabel* m_formatDateValueLabel = nullptr;
+ 
+ private:
+     QList<LanguageFrame*> languageFrameList = {};
+diff --git a/plugins/time-language/datetime/changtime.cpp b/plugins/time-language/datetime/changtime.cpp
+index 209b0ce..dbcc081 100644
+--- a/plugins/time-language/datetime/changtime.cpp
++++ b/plugins/time-language/datetime/changtime.cpp
+@@ -19,7 +19,6 @@
+  */
+ #include "changtime.h"
+ #include "ui_changtime.h"
+-#include "closebutton.h"
+ 
+ #include <QDebug>
+ #include <QStringList>
+diff --git a/plugins/time-language/datetime/changtime.ui b/plugins/time-language/datetime/changtime.ui
+deleted file mode 100644
+index 24ddd27..0000000
+--- a/plugins/time-language/datetime/changtime.ui
++++ /dev/null
+@@ -1,627 +0,0 @@
+-<?xml version="1.0" encoding="UTF-8"?>
+-<ui version="4.0">
+- <class>changtimedialog</class>
+- <widget class="QDialog" name="changtimedialog">
+-  <property name="geometry">
+-   <rect>
+-    <x>0</x>
+-    <y>0</y>
+-    <width>421</width>
+-    <height>425</height>
+-   </rect>
+-  </property>
+-  <property name="sizePolicy">
+-   <sizepolicy hsizetype="Minimum" vsizetype="Minimum">
+-    <horstretch>0</horstretch>
+-    <verstretch>0</verstretch>
+-   </sizepolicy>
+-  </property>
+-  <property name="minimumSize">
+-   <size>
+-    <width>421</width>
+-    <height>412</height>
+-   </size>
+-  </property>
+-  <property name="maximumSize">
+-   <size>
+-    <width>421</width>
+-    <height>425</height>
+-   </size>
+-  </property>
+-  <property name="windowTitle">
+-   <string>Dialog</string>
+-  </property>
+-  <layout class="QVBoxLayout" name="verticalLayout_4">
+-   <property name="spacing">
+-    <number>0</number>
+-   </property>
+-   <property name="leftMargin">
+-    <number>0</number>
+-   </property>
+-   <property name="topMargin">
+-    <number>0</number>
+-   </property>
+-   <property name="rightMargin">
+-    <number>0</number>
+-   </property>
+-   <property name="bottomMargin">
+-    <number>0</number>
+-   </property>
+-   <item>
+-    <widget class="QFrame" name="frame">
+-     <property name="sizePolicy">
+-      <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+-       <horstretch>0</horstretch>
+-       <verstretch>0</verstretch>
+-      </sizepolicy>
+-     </property>
+-     <property name="frameShape">
+-      <enum>QFrame::NoFrame</enum>
+-     </property>
+-     <property name="frameShadow">
+-      <enum>QFrame::Raised</enum>
+-     </property>
+-     <property name="midLineWidth">
+-      <number>0</number>
+-     </property>
+-     <layout class="QVBoxLayout" name="verticalLayout_3">
+-      <property name="leftMargin">
+-       <number>24</number>
+-      </property>
+-      <property name="topMargin">
+-       <number>16</number>
+-      </property>
+-      <property name="rightMargin">
+-       <number>9</number>
+-      </property>
+-      <property name="bottomMargin">
+-       <number>0</number>
+-      </property>
+-      <item>
+-       <layout class="QHBoxLayout" name="horizontalLayout_6">
+-        <property name="leftMargin">
+-         <number>20</number>
+-        </property>
+-        <property name="topMargin">
+-         <number>4</number>
+-        </property>
+-        <property name="rightMargin">
+-         <number>8</number>
+-        </property>
+-        <property name="bottomMargin">
+-         <number>4</number>
+-        </property>
+-        <item>
+-         <widget class="TitleLabel" name="titleLabel">
+-          <property name="sizePolicy">
+-           <sizepolicy hsizetype="Minimum" vsizetype="Minimum">
+-            <horstretch>0</horstretch>
+-            <verstretch>0</verstretch>
+-           </sizepolicy>
+-          </property>
+-          <property name="minimumSize">
+-           <size>
+-            <width>190</width>
+-            <height>30</height>
+-           </size>
+-          </property>
+-          <property name="maximumSize">
+-           <size>
+-            <width>190</width>
+-            <height>30</height>
+-           </size>
+-          </property>
+-          <property name="text">
+-           <string>current date</string>
+-          </property>
+-         </widget>
+-        </item>
+-        <item>
+-         <spacer name="horizontalSpacer_2">
+-          <property name="orientation">
+-           <enum>Qt::Horizontal</enum>
+-          </property>
+-          <property name="sizeHint" stdset="0">
+-           <size>
+-            <width>40</width>
+-            <height>20</height>
+-           </size>
+-          </property>
+-         </spacer>
+-        </item>
+-       </layout>
+-      </item>
+-      <item>
+-       <spacer name="verticalSpacer">
+-        <property name="orientation">
+-         <enum>Qt::Vertical</enum>
+-        </property>
+-        <property name="sizeHint" stdset="0">
+-         <size>
+-          <width>20</width>
+-          <height>41</height>
+-         </size>
+-        </property>
+-       </spacer>
+-      </item>
+-      <item>
+-       <layout class="QVBoxLayout" name="verticalLayout_2">
+-        <property name="spacing">
+-         <number>1</number>
+-        </property>
+-        <property name="leftMargin">
+-         <number>20</number>
+-        </property>
+-        <property name="rightMargin">
+-         <number>31</number>
+-        </property>
+-        <item>
+-         <widget class="QFrame" name="timeframe">
+-          <property name="minimumSize">
+-           <size>
+-            <width>336</width>
+-            <height>50</height>
+-           </size>
+-          </property>
+-          <property name="maximumSize">
+-           <size>
+-            <width>336</width>
+-            <height>50</height>
+-           </size>
+-          </property>
+-          <property name="frameShape">
+-           <enum>QFrame::Box</enum>
+-          </property>
+-          <layout class="QHBoxLayout" name="horizontalLayout_4">
+-           <property name="spacing">
+-            <number>0</number>
+-           </property>
+-           <item>
+-            <widget class="QLabel" name="timelabel">
+-             <property name="sizePolicy">
+-              <sizepolicy hsizetype="Minimum" vsizetype="Minimum">
+-               <horstretch>0</horstretch>
+-               <verstretch>0</verstretch>
+-              </sizepolicy>
+-             </property>
+-             <property name="minimumSize">
+-              <size>
+-               <width>0</width>
+-               <height>0</height>
+-              </size>
+-             </property>
+-             <property name="maximumSize">
+-              <size>
+-               <width>50</width>
+-               <height>16777215</height>
+-              </size>
+-             </property>
+-             <property name="text">
+-              <string>time</string>
+-             </property>
+-            </widget>
+-           </item>
+-           <item>
+-            <widget class="QComboBox" name="hourcomboBox">
+-             <property name="sizePolicy">
+-              <sizepolicy hsizetype="Minimum" vsizetype="Minimum">
+-               <horstretch>0</horstretch>
+-               <verstretch>0</verstretch>
+-              </sizepolicy>
+-             </property>
+-             <property name="minimumSize">
+-              <size>
+-               <width>83</width>
+-               <height>0</height>
+-              </size>
+-             </property>
+-             <property name="maximumSize">
+-              <size>
+-               <width>84</width>
+-               <height>16777215</height>
+-              </size>
+-             </property>
+-             <property name="styleSheet">
+-              <string notr="true"/>
+-             </property>
+-            </widget>
+-           </item>
+-           <item>
+-            <widget class="QComboBox" name="mincomboBox">
+-             <property name="sizePolicy">
+-              <sizepolicy hsizetype="Minimum" vsizetype="Minimum">
+-               <horstretch>0</horstretch>
+-               <verstretch>0</verstretch>
+-              </sizepolicy>
+-             </property>
+-             <property name="minimumSize">
+-              <size>
+-               <width>80</width>
+-               <height>0</height>
+-              </size>
+-             </property>
+-             <property name="maximumSize">
+-              <size>
+-               <width>84</width>
+-               <height>32</height>
+-              </size>
+-             </property>
+-            </widget>
+-           </item>
+-           <item>
+-            <widget class="QComboBox" name="seccomboBox">
+-             <property name="sizePolicy">
+-              <sizepolicy hsizetype="Minimum" vsizetype="Minimum">
+-               <horstretch>0</horstretch>
+-               <verstretch>0</verstretch>
+-              </sizepolicy>
+-             </property>
+-             <property name="minimumSize">
+-              <size>
+-               <width>80</width>
+-               <height>32</height>
+-              </size>
+-             </property>
+-             <property name="maximumSize">
+-              <size>
+-               <width>84</width>
+-               <height>32</height>
+-              </size>
+-             </property>
+-            </widget>
+-           </item>
+-          </layout>
+-         </widget>
+-        </item>
+-        <item>
+-         <widget class="QFrame" name="yearframe">
+-          <property name="sizePolicy">
+-           <sizepolicy hsizetype="Minimum" vsizetype="Minimum">
+-            <horstretch>0</horstretch>
+-            <verstretch>0</verstretch>
+-           </sizepolicy>
+-          </property>
+-          <property name="minimumSize">
+-           <size>
+-            <width>336</width>
+-            <height>50</height>
+-           </size>
+-          </property>
+-          <property name="maximumSize">
+-           <size>
+-            <width>336</width>
+-            <height>50</height>
+-           </size>
+-          </property>
+-          <property name="frameShape">
+-           <enum>QFrame::Box</enum>
+-          </property>
+-          <layout class="QHBoxLayout" name="horizontalLayout">
+-           <item>
+-            <widget class="QLabel" name="yearlabel">
+-             <property name="sizePolicy">
+-              <sizepolicy hsizetype="Minimum" vsizetype="Preferred">
+-               <horstretch>0</horstretch>
+-               <verstretch>0</verstretch>
+-              </sizepolicy>
+-             </property>
+-             <property name="minimumSize">
+-              <size>
+-               <width>0</width>
+-               <height>0</height>
+-              </size>
+-             </property>
+-             <property name="maximumSize">
+-              <size>
+-               <width>50</width>
+-               <height>16777215</height>
+-              </size>
+-             </property>
+-             <property name="text">
+-              <string>year</string>
+-             </property>
+-            </widget>
+-           </item>
+-           <item>
+-            <widget class="QComboBox" name="yearcomboBox">
+-             <property name="sizePolicy">
+-              <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
+-               <horstretch>0</horstretch>
+-               <verstretch>0</verstretch>
+-              </sizepolicy>
+-             </property>
+-             <property name="minimumSize">
+-              <size>
+-               <width>258</width>
+-               <height>32</height>
+-              </size>
+-             </property>
+-             <property name="maximumSize">
+-              <size>
+-               <width>257</width>
+-               <height>16777215</height>
+-              </size>
+-             </property>
+-             <property name="styleSheet">
+-              <string notr="true"/>
+-             </property>
+-            </widget>
+-           </item>
+-          </layout>
+-         </widget>
+-        </item>
+-        <item>
+-         <widget class="QFrame" name="monthframe">
+-          <property name="sizePolicy">
+-           <sizepolicy hsizetype="Minimum" vsizetype="Minimum">
+-            <horstretch>0</horstretch>
+-            <verstretch>0</verstretch>
+-           </sizepolicy>
+-          </property>
+-          <property name="minimumSize">
+-           <size>
+-            <width>336</width>
+-            <height>50</height>
+-           </size>
+-          </property>
+-          <property name="maximumSize">
+-           <size>
+-            <width>336</width>
+-            <height>50</height>
+-           </size>
+-          </property>
+-          <property name="frameShape">
+-           <enum>QFrame::Box</enum>
+-          </property>
+-          <layout class="QHBoxLayout" name="horizontalLayout_2">
+-           <item>
+-            <widget class="QLabel" name="monthlabel">
+-             <property name="sizePolicy">
+-              <sizepolicy hsizetype="Minimum" vsizetype="Preferred">
+-               <horstretch>0</horstretch>
+-               <verstretch>0</verstretch>
+-              </sizepolicy>
+-             </property>
+-             <property name="minimumSize">
+-              <size>
+-               <width>27</width>
+-               <height>0</height>
+-              </size>
+-             </property>
+-             <property name="maximumSize">
+-              <size>
+-               <width>50</width>
+-               <height>16777215</height>
+-              </size>
+-             </property>
+-             <property name="text">
+-              <string>month</string>
+-             </property>
+-            </widget>
+-           </item>
+-           <item>
+-            <widget class="QComboBox" name="monthcomboBox">
+-             <property name="sizePolicy">
+-              <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
+-               <horstretch>0</horstretch>
+-               <verstretch>0</verstretch>
+-              </sizepolicy>
+-             </property>
+-             <property name="minimumSize">
+-              <size>
+-               <width>258</width>
+-               <height>32</height>
+-              </size>
+-             </property>
+-             <property name="maximumSize">
+-              <size>
+-               <width>258</width>
+-               <height>16777215</height>
+-              </size>
+-             </property>
+-            </widget>
+-           </item>
+-          </layout>
+-         </widget>
+-        </item>
+-        <item>
+-         <widget class="QFrame" name="dayframe">
+-          <property name="sizePolicy">
+-           <sizepolicy hsizetype="Minimum" vsizetype="Minimum">
+-            <horstretch>0</horstretch>
+-            <verstretch>0</verstretch>
+-           </sizepolicy>
+-          </property>
+-          <property name="minimumSize">
+-           <size>
+-            <width>336</width>
+-            <height>50</height>
+-           </size>
+-          </property>
+-          <property name="maximumSize">
+-           <size>
+-            <width>336</width>
+-            <height>50</height>
+-           </size>
+-          </property>
+-          <property name="frameShape">
+-           <enum>QFrame::Box</enum>
+-          </property>
+-          <layout class="QHBoxLayout" name="horizontalLayout_3">
+-           <item>
+-            <widget class="QLabel" name="daylabel">
+-             <property name="sizePolicy">
+-              <sizepolicy hsizetype="Minimum" vsizetype="Preferred">
+-               <horstretch>0</horstretch>
+-               <verstretch>0</verstretch>
+-              </sizepolicy>
+-             </property>
+-             <property name="minimumSize">
+-              <size>
+-               <width>0</width>
+-               <height>0</height>
+-              </size>
+-             </property>
+-             <property name="maximumSize">
+-              <size>
+-               <width>50</width>
+-               <height>16777215</height>
+-              </size>
+-             </property>
+-             <property name="text">
+-              <string>day</string>
+-             </property>
+-            </widget>
+-           </item>
+-           <item>
+-            <widget class="QComboBox" name="daycomboBox">
+-             <property name="sizePolicy">
+-              <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
+-               <horstretch>0</horstretch>
+-               <verstretch>0</verstretch>
+-              </sizepolicy>
+-             </property>
+-             <property name="minimumSize">
+-              <size>
+-               <width>258</width>
+-               <height>32</height>
+-              </size>
+-             </property>
+-             <property name="maximumSize">
+-              <size>
+-               <width>258</width>
+-               <height>16777215</height>
+-              </size>
+-             </property>
+-            </widget>
+-           </item>
+-          </layout>
+-         </widget>
+-        </item>
+-       </layout>
+-      </item>
+-      <item>
+-       <spacer name="verticalSpacer_3">
+-        <property name="orientation">
+-         <enum>Qt::Vertical</enum>
+-        </property>
+-        <property name="sizeHint" stdset="0">
+-         <size>
+-          <width>17</width>
+-          <height>14</height>
+-         </size>
+-        </property>
+-       </spacer>
+-      </item>
+-      <item>
+-       <widget class="QWidget" name="widget" native="true">
+-        <property name="sizePolicy">
+-         <sizepolicy hsizetype="Minimum" vsizetype="Minimum">
+-          <horstretch>0</horstretch>
+-          <verstretch>0</verstretch>
+-         </sizepolicy>
+-        </property>
+-        <property name="minimumSize">
+-         <size>
+-          <width>345</width>
+-          <height>50</height>
+-         </size>
+-        </property>
+-        <property name="maximumSize">
+-         <size>
+-          <width>16777215</width>
+-          <height>50</height>
+-         </size>
+-        </property>
+-        <layout class="QHBoxLayout" name="horizontalLayout_5">
+-         <property name="rightMargin">
+-          <number>32</number>
+-         </property>
+-         <item>
+-          <spacer name="horizontalSpacer">
+-           <property name="orientation">
+-            <enum>Qt::Horizontal</enum>
+-           </property>
+-           <property name="sizeHint" stdset="0">
+-            <size>
+-             <width>40</width>
+-             <height>20</height>
+-            </size>
+-           </property>
+-          </spacer>
+-         </item>
+-         <item>
+-          <widget class="QPushButton" name="cancelButton">
+-           <property name="minimumSize">
+-            <size>
+-             <width>120</width>
+-             <height>36</height>
+-            </size>
+-           </property>
+-           <property name="maximumSize">
+-            <size>
+-             <width>120</width>
+-             <height>30</height>
+-            </size>
+-           </property>
+-           <property name="sizeIncrement">
+-            <size>
+-             <width>120</width>
+-             <height>30</height>
+-            </size>
+-           </property>
+-           <property name="text">
+-            <string>cancel</string>
+-           </property>
+-          </widget>
+-         </item>
+-         <item>
+-          <widget class="QPushButton" name="confirmButton">
+-           <property name="minimumSize">
+-            <size>
+-             <width>120</width>
+-             <height>36</height>
+-            </size>
+-           </property>
+-           <property name="maximumSize">
+-            <size>
+-             <width>120</width>
+-             <height>30</height>
+-            </size>
+-           </property>
+-           <property name="text">
+-            <string>confirm</string>
+-           </property>
+-          </widget>
+-         </item>
+-        </layout>
+-       </widget>
+-      </item>
+-      <item>
+-       <spacer name="verticalSpacer_2">
+-        <property name="orientation">
+-         <enum>Qt::Vertical</enum>
+-        </property>
+-        <property name="sizeHint" stdset="0">
+-         <size>
+-          <width>17</width>
+-          <height>20</height>
+-         </size>
+-        </property>
+-       </spacer>
+-      </item>
+-     </layout>
+-    </widget>
+-   </item>
+-  </layout>
+- </widget>
+- <customwidgets>
+-  <customwidget>
+-   <class>TitleLabel</class>
+-   <extends>QLabel</extends>
+-   <header location="global">titlelabel.h</header>
+-  </customwidget>
+- </customwidgets>
+- <resources/>
+- <connections/>
+-</ui>
+diff --git a/plugins/time-language/datetime/datetime.pro b/plugins/time-language/datetime/datetime.pro
+index 3cb2b3a..0931be9 100644
+--- a/plugins/time-language/datetime/datetime.pro
++++ b/plugins/time-language/datetime/datetime.pro
+@@ -13,10 +13,8 @@ CONFIG += plugin \
+ 
+ include(../../../env.pri)
+ include($$PROJECT_ROOTDIR/libukcc/widgets/FlowLayout/flowlayout.pri)
+-include($$PROJECT_ROOTDIR/libukcc/widgets/ImageUtil/imageutil.pri)
+ include($$PROJECT_ROOTDIR/libukcc/widgets/Label/label.pri)
+ include($$PROJECT_ROOTDIR/libukcc/widgets/AddBtn/addbtn.pri)
+-include($$PROJECT_ROOTDIR/libukcc/widgets/CloseButton/closebutton.pri)
+ include($$PROJECT_ROOTDIR/libukcc/widgets/HoverWidget/hoverwidget.pri)
+ include($$PROJECT_ROOTDIR/libukcc/widgets/Frame/frame.pri)
+ include($$PROJECT_ROOTDIR/libukcc/widgets/SettingWidget/settingwidget.pri)
+diff --git a/plugins/time-language/datetime/datetime.ui b/plugins/time-language/datetime/datetime.ui
+deleted file mode 100644
+index 859b056..0000000
+--- a/plugins/time-language/datetime/datetime.ui
++++ /dev/null
+@@ -1,342 +0,0 @@
+-<?xml version="1.0" encoding="UTF-8"?>
+-<ui version="4.0">
+- <class>DateTime</class>
+- <widget class="QWidget" name="DateTime">
+-  <property name="geometry">
+-   <rect>
+-    <x>0</x>
+-    <y>0</y>
+-    <width>684</width>
+-    <height>669</height>
+-   </rect>
+-  </property>
+-  <property name="minimumSize">
+-   <size>
+-    <width>0</width>
+-    <height>0</height>
+-   </size>
+-  </property>
+-  <property name="maximumSize">
+-   <size>
+-    <width>16777215</width>
+-    <height>16777215</height>
+-   </size>
+-  </property>
+-  <property name="windowTitle">
+-   <string>DateTime</string>
+-  </property>
+-  <layout class="QVBoxLayout" name="verticalLayout">
+-   <property name="spacing">
+-    <number>8</number>
+-   </property>
+-   <property name="leftMargin">
+-    <number>0</number>
+-   </property>
+-   <property name="topMargin">
+-    <number>0</number>
+-   </property>
+-   <property name="rightMargin">
+-    <number>0</number>
+-   </property>
+-   <property name="bottomMargin">
+-    <number>0</number>
+-   </property>
+-   <item>
+-    <widget class="TitleLabel" name="titleLabel">
+-     <property name="sizePolicy">
+-      <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+-       <horstretch>0</horstretch>
+-       <verstretch>0</verstretch>
+-      </sizepolicy>
+-     </property>
+-     <property name="minimumSize">
+-      <size>
+-       <width>0</width>
+-       <height>0</height>
+-      </size>
+-     </property>
+-     <property name="maximumSize">
+-      <size>
+-       <width>16777215</width>
+-       <height>16777215</height>
+-      </size>
+-     </property>
+-     <property name="text">
+-      <string>current date</string>
+-     </property>
+-    </widget>
+-   </item>
+-   <item>
+-    <layout class="QVBoxLayout" name="currentDateLayout">
+-     <property name="spacing">
+-      <number>0</number>
+-     </property>
+-    </layout>
+-   </item>
+-   <item>
+-    <spacer name="verticalSpacer">
+-     <property name="orientation">
+-      <enum>Qt::Vertical</enum>
+-     </property>
+-     <property name="sizeType">
+-      <enum>QSizePolicy::Fixed</enum>
+-     </property>
+-     <property name="sizeHint" stdset="0">
+-      <size>
+-       <width>20</width>
+-       <height>32</height>
+-      </size>
+-     </property>
+-    </spacer>
+-   </item>
+-   <item>
+-    <layout class="QVBoxLayout" name="timeLayout">
+-     <property name="spacing">
+-      <number>0</number>
+-     </property>
+-     <item>
+-      <widget class="QFrame" name="TilleFrame">
+-       <property name="minimumSize">
+-        <size>
+-         <width>552</width>
+-         <height>0</height>
+-        </size>
+-       </property>
+-       <property name="maximumSize">
+-        <size>
+-         <width>16777215</width>
+-         <height>16777215</height>
+-        </size>
+-       </property>
+-       <property name="frameShape">
+-        <enum>QFrame::NoFrame</enum>
+-       </property>
+-       <property name="frameShadow">
+-        <enum>QFrame::Plain</enum>
+-       </property>
+-       <property name="lineWidth">
+-        <number>1</number>
+-       </property>
+-       <layout class="QVBoxLayout" name="verticalLayout_4">
+-        <property name="leftMargin">
+-         <number>0</number>
+-        </property>
+-        <property name="topMargin">
+-         <number>0</number>
+-        </property>
+-        <property name="rightMargin">
+-         <number>0</number>
+-        </property>
+-        <property name="bottomMargin">
+-         <number>0</number>
+-        </property>
+-        <item>
+-         <layout class="QVBoxLayout" name="verticalLayout_3">
+-          <property name="spacing">
+-           <number>0</number>
+-          </property>
+-          <item>
+-           <widget class="TitleLabel" name="titleLabel_2">
+-            <property name="text">
+-             <string>titleLabel</string>
+-            </property>
+-           </widget>
+-          </item>
+-         </layout>
+-        </item>
+-       </layout>
+-      </widget>
+-     </item>
+-     <item>
+-      <spacer name="verticalSpacer_3">
+-       <property name="orientation">
+-        <enum>Qt::Vertical</enum>
+-       </property>
+-       <property name="sizeType">
+-        <enum>QSizePolicy::Fixed</enum>
+-       </property>
+-       <property name="sizeHint" stdset="0">
+-        <size>
+-         <width>20</width>
+-         <height>4</height>
+-        </size>
+-       </property>
+-      </spacer>
+-     </item>
+-     <item>
+-      <widget class="UkccFrame" name="frame_7">
+-       <property name="minimumSize">
+-        <size>
+-         <width>0</width>
+-         <height>0</height>
+-        </size>
+-       </property>
+-       <property name="frameShape">
+-        <enum>QFrame::NoFrame</enum>
+-       </property>
+-       <property name="frameShadow">
+-        <enum>QFrame::Raised</enum>
+-       </property>
+-       <property name="lineWidth">
+-        <number>0</number>
+-       </property>
+-       <layout class="QVBoxLayout" name="verticalLayout_11">
+-        <property name="spacing">
+-         <number>1</number>
+-        </property>
+-        <property name="leftMargin">
+-         <number>0</number>
+-        </property>
+-        <property name="topMargin">
+-         <number>0</number>
+-        </property>
+-        <property name="rightMargin">
+-         <number>0</number>
+-        </property>
+-        <property name="bottomMargin">
+-         <number>0</number>
+-        </property>
+-        <item>
+-         <widget class="SettingGroup" name="showFrame">
+-          <property name="minimumSize">
+-           <size>
+-            <width>552</width>
+-            <height>0</height>
+-           </size>
+-          </property>
+-          <property name="maximumSize">
+-           <size>
+-            <width>16777215</width>
+-            <height>16777215</height>
+-           </size>
+-          </property>
+-          <property name="frameShape">
+-           <enum>QFrame::NoFrame</enum>
+-          </property>
+-          <property name="frameShadow">
+-           <enum>QFrame::Plain</enum>
+-          </property>
+-          <property name="lineWidth">
+-           <number>0</number>
+-          </property>
+-          <layout class="QVBoxLayout" name="verticalLayout_7">
+-           <property name="spacing">
+-            <number>0</number>
+-           </property>
+-           <property name="leftMargin">
+-            <number>0</number>
+-           </property>
+-           <property name="topMargin">
+-            <number>0</number>
+-           </property>
+-           <property name="rightMargin">
+-            <number>0</number>
+-           </property>
+-           <property name="bottomMargin">
+-            <number>0</number>
+-           </property>
+-          </layout>
+-         </widget>
+-        </item>
+-        <item>
+-         <widget class="UkccFrame" name="addFrame">
+-          <property name="minimumSize">
+-           <size>
+-            <width>0</width>
+-            <height>0</height>
+-           </size>
+-          </property>
+-          <property name="maximumSize">
+-           <size>
+-            <width>16777215</width>
+-            <height>16777215</height>
+-           </size>
+-          </property>
+-          <property name="frameShape">
+-           <enum>QFrame::NoFrame</enum>
+-          </property>
+-          <property name="frameShadow">
+-           <enum>QFrame::Plain</enum>
+-          </property>
+-          <layout class="QHBoxLayout" name="horizontalLayout_2">
+-           <property name="spacing">
+-            <number>0</number>
+-           </property>
+-           <property name="leftMargin">
+-            <number>0</number>
+-           </property>
+-           <property name="topMargin">
+-            <number>0</number>
+-           </property>
+-           <property name="rightMargin">
+-            <number>0</number>
+-           </property>
+-           <property name="bottomMargin">
+-            <number>0</number>
+-           </property>
+-           <item>
+-            <layout class="QHBoxLayout" name="addLayout">
+-             <property name="spacing">
+-              <number>0</number>
+-             </property>
+-            </layout>
+-           </item>
+-          </layout>
+-         </widget>
+-        </item>
+-       </layout>
+-      </widget>
+-     </item>
+-    </layout>
+-   </item>
+-   <item>
+-    <widget class="QFrame" name="hourFrame">
+-     <property name="frameShape">
+-      <enum>QFrame::StyledPanel</enum>
+-     </property>
+-     <property name="frameShadow">
+-      <enum>QFrame::Raised</enum>
+-     </property>
+-    </widget>
+-   </item>
+-   <item>
+-    <spacer name="verticalSpacer_2">
+-     <property name="orientation">
+-      <enum>Qt::Vertical</enum>
+-     </property>
+-     <property name="sizeType">
+-      <enum>QSizePolicy::Expanding</enum>
+-     </property>
+-     <property name="sizeHint" stdset="0">
+-      <size>
+-       <width>20</width>
+-       <height>0</height>
+-      </size>
+-     </property>
+-    </spacer>
+-   </item>
+-  </layout>
+- </widget>
+- <layoutdefault spacing="6" margin="11"/>
+- <customwidgets>
+-  <customwidget>
+-   <class>TitleLabel</class>
+-   <extends>QLabel</extends>
+-   <header location="global">titlelabel.h</header>
+-  </customwidget>
+-  <customwidget>
+-   <class>UkccFrame</class>
+-   <extends>QFrame</extends>
+-   <header location="global">ukccframe.h</header>
+-   <container>1</container>
+-  </customwidget>
+-  <customwidget>
+-   <class>SettingGroup</class>
+-   <extends>QFrame</extends>
+-   <header location="global">settinggroup.h</header>
+-   <container>1</container>
+-  </customwidget>
+- </customwidgets>
+- <resources/>
+- <connections/>
+-</ui>
+diff --git a/plugins/time-language/datetime/datetimeui.cpp b/plugins/time-language/datetime/datetimeui.cpp
+index 6a86da9..14d7811 100644
+--- a/plugins/time-language/datetime/datetimeui.cpp
++++ b/plugins/time-language/datetime/datetimeui.cpp
+@@ -37,29 +37,31 @@ void DatetimeUi::initUi()
+ void DatetimeUi::initObject()
+ {
+     // 当前时间
+-    currentTitleLabel = new TitleLabel(this); // 标题
++    currentTitleLabel = new KLabel(this); // 标题
++    currentTitleLabel->setContentsMargins(16, 0, 0, 0);
+     clockWidget       = new ClockWidget(); // 时钟
+     timeLabel         = new TimeLabel(this); // 时间
+-    mDateLabel        = new FixLabel(this); // 日期
+-    changeTZbutton    = new FixButton(this); // 修改时区
+-    setTimeModeLabel  = new FixLabel(this);  // 设置时间
++    mDateLabel        = new KLabel(this); // 日期
++    changeTZbutton    = new KPushButton(this); // 修改时区
++    setTimeModeLabel  = new KLabel(this);  // 设置时间
+     manualRadioButton = new QRadioButton(this); // 手动设置时间
+     syncRadioButton   = new QRadioButton(this); // 自动同步时间
+-    syncResultLabel   = new FixLabel(); // 同步时间结果
+-    setDateLabel      = new FixLabel(this); // 手动设置日期
++    syncResultLabel   = new KLabel(); // 同步时间结果
++    setDateLabel      = new KLabel(this); // 手动设置日期
+     dategroupWidget   = new DategroupWidget(this);
+     timeBtnGroup      = new QButtonGroup(this);
+     //~ contents_path /Date/Sync Server
+     ntpSerWidget      = new ComboxWidget(tr("Sync Server"), this);
+-    setNtpLabel       = new FixLabel(this);
++    setNtpLabel       = new KLabel(this);
+     setNtpLineEdit    = new QLineEdit(this);
+-    setNtpButton      = new FixButton(this);
++    setNtpButton      = new KPushButton(this);
+ 
+     timeBtnGroup->addButton(manualRadioButton, 0);
+     timeBtnGroup->addButton(syncRadioButton, 1);
+     syncResultLabel->setStyleSheet("QLabel{color: #D9F82929;}");
+ 
+-    otherTimezoneTitleLabel = new TitleLabel(this);
++    otherTimezoneTitleLabel = new KLabel(this);
++    otherTimezoneTitleLabel->setContentsMargins(16, 0, 0, 0);
+     addTimezoneButton       = new AddButton(this, UkccFrame::BorderRadiusStyle::Around);
+ }
+ 
+@@ -214,7 +216,7 @@ void DatetimeUi::initSignals()
+             Q_EMIT timeModeChanged(toggledBtn, "automatic");
+         }
+     });
+-    connect(changeTZbutton, &FixButton::clicked, this, &DatetimeUi::timezoneButtonClicked);
++    connect(changeTZbutton, &KPushButton::clicked, this, &DatetimeUi::timezoneButtonClicked);
+     connect(ntpSerWidget->comboBox(), QOverload<const QString&>::of(&QComboBox::activated), this, [=](QString server){
+         if (ntpSerWidget->comboBox()->currentIndex() == 0) {
+             server = "default";
+@@ -225,7 +227,7 @@ void DatetimeUi::initSignals()
+             Q_EMIT ntpServerChanged(server);
+         }
+     });
+-    connect(setNtpButton, &FixButton::clicked, this, [=](){
++    connect(setNtpButton, &KPushButton::clicked, this, [=](){
+         Q_EMIT ntpServerChanged(setNtpLineEdit->text());
+     });
+     connect(addTimezoneButton, &AddButton::clicked, this, &DatetimeUi::addTimezoneButtonClicked);
+diff --git a/plugins/time-language/datetime/datetimeui.h b/plugins/time-language/datetime/datetimeui.h
+index c232da7..13141d4 100644
+--- a/plugins/time-language/datetime/datetimeui.h
++++ b/plugins/time-language/datetime/datetimeui.h
+@@ -1,17 +1,14 @@
+ #ifndef DATETIMEUI_H
+ #define DATETIMEUI_H
+ 
+-#include "titlelabel.h"
+ #include "timeBtn.h"
+ #include "timelabel.h"
+ #include "clockwidget.h"
+ #include "calendarwidget.h"
+ #include "dategroupwidget.h"
+ #include "dateedit.h"
+-#include "fixlabel.h"
+ #include "settinggroup.h"
+ #include "ukccframe.h"
+-#include "fixbutton.h"
+ #include "addbutton.h"
+ #include "comboxwidget.h"
+ #include <QWidget>
+@@ -19,6 +16,10 @@
+ #include <QLineEdit>
+ #include <QRadioButton>
+ #include <QButtonGroup>
++#include <kpushbutton.h>
++#include <klabel.h>
++
++using namespace kdk;
+ 
+ class DatetimeUi : public QWidget
+ {
+@@ -54,23 +55,23 @@ private:
+ 
+ private:
+     // 当前时间
+-    TitleLabel      *currentTitleLabel = nullptr;
++    KLabel          *currentTitleLabel = nullptr;
+     ClockWidget     *clockWidget       = nullptr;
+     TimeLabel       *timeLabel         = nullptr;
+-    FixLabel        *mDateLabel        = nullptr;
+-    FixButton       *changeTZbutton    = nullptr;
+-    FixLabel        *setTimeModeLabel  = nullptr;
++    KLabel        *mDateLabel        = nullptr;
++    KPushButton     *changeTZbutton    = nullptr;
++    KLabel        *setTimeModeLabel  = nullptr;
+     QRadioButton    *manualRadioButton = nullptr;
+     QRadioButton    *syncRadioButton   = nullptr;
+-    FixLabel        *syncResultLabel   = nullptr;
+-    FixLabel        *setDateLabel      = nullptr;
++    KLabel        *syncResultLabel   = nullptr;
++    KLabel        *setDateLabel      = nullptr;
+     DategroupWidget *dategroupWidget   = nullptr;
+     ComboxWidget    *ntpSerWidget      = nullptr;
+-    FixLabel        *setNtpLabel       = nullptr;
++    KLabel        *setNtpLabel       = nullptr;
+     QLineEdit       *setNtpLineEdit    = nullptr;
+-    FixButton       *setNtpButton      = nullptr;
++    KPushButton     *setNtpButton      = nullptr;
+     // 其他时区时间
+-    TitleLabel *otherTimezoneTitleLabel = nullptr;
++    KLabel *otherTimezoneTitleLabel = nullptr;
+     AddButton  *addTimezoneButton       = nullptr;
+ 
+ private:
+diff --git a/plugins/time-language/datetime/timeBtn.cpp b/plugins/time-language/datetime/timeBtn.cpp
+index cdba347..2314751 100644
+--- a/plugins/time-language/datetime/timeBtn.cpp
++++ b/plugins/time-language/datetime/timeBtn.cpp
+@@ -13,7 +13,7 @@ TimeBtn::TimeBtn(const QString &timezone, const QString &kyTimezone)
+     QHBoxLayout *timeShowLayout = new QHBoxLayout(this);
+     QWidget     *timeWid      = new QWidget(this);
+     QVBoxLayout *timeLayout   = new QVBoxLayout(timeWid);
+-    labelInfo    = new FixLabel(this);    //时间,和标题字号一致
++    labelInfo    = new KLabel(this);    //时间,和标题字号一致
+     labelTime    = new LightLabel(this);    //日期
+     deleteBtn    = new QPushButton(this);
+ 
+diff --git a/plugins/time-language/datetime/timeBtn.h b/plugins/time-language/datetime/timeBtn.h
+index ad4f499..affa3d1 100644
+--- a/plugins/time-language/datetime/timeBtn.h
++++ b/plugins/time-language/datetime/timeBtn.h
+@@ -1,13 +1,15 @@
+ #ifndef TIMEBTN_H
+ #define TIMEBTN_H
+ #include <QPushButton>
+-#include "fixlabel.h"
+ #include "lightlabel.h"
+ #include <QGSettings>
+ #include <QTimeZone>
+ #include <QLabel>
+ #include "ukccframe.h"
+ #include <QTimerEvent>
++#include <klabel.h>
++
++using namespace kdk;
+ 
+ class TimeBtn : public UkccFrame
+ {
+@@ -25,7 +27,7 @@ protected:
+ private:
+     QTimeZone thisZone;
+     int timerId = 0;
+-    FixLabel       *labelInfo     = nullptr;
++    KLabel       *labelInfo     = nullptr;
+     LightLabel     *labelTime     = nullptr;
+     QDBusInterface *areaInterface = nullptr;
+     QPushButton    *deleteBtn     = nullptr;
+diff --git a/plugins/time-language/datetime/timelabel.cpp b/plugins/time-language/datetime/timelabel.cpp
+index a7f2883..98915f8 100644
+--- a/plugins/time-language/datetime/timelabel.cpp
++++ b/plugins/time-language/datetime/timelabel.cpp
+@@ -4,7 +4,7 @@
+ #include <QDateTime>
+ 
+ TimeLabel::TimeLabel(QWidget *parent) :
+-    FixLabel(parent)
++    KLabel(parent)
+ {
+     QFont font = QApplication::font();
+     if (QLocale::system().amText() == "སྔ་དྲོ་") {
+diff --git a/plugins/time-language/datetime/timelabel.h b/plugins/time-language/datetime/timelabel.h
+index 746fe3c..70b4cb1 100644
+--- a/plugins/time-language/datetime/timelabel.h
++++ b/plugins/time-language/datetime/timelabel.h
+@@ -1,10 +1,12 @@
+ #ifndef TIMELABEL_H
+ #define TIMELABEL_H
+ 
+-#include "fixlabel.h"
+ #include <QDBusInterface>
++#include <klabel.h>
+ 
+-class TimeLabel : public FixLabel
++using namespace kdk;
++
++class TimeLabel : public KLabel
+ {
+     Q_OBJECT
+ 
+diff --git a/plugins/time-language/datetime/worldMap/timezonechooser.cpp b/plugins/time-language/datetime/worldMap/timezonechooser.cpp
+index 32c212b..b95da08 100644
+--- a/plugins/time-language/datetime/worldMap/timezonechooser.cpp
++++ b/plugins/time-language/datetime/worldMap/timezonechooser.cpp
+@@ -15,7 +15,6 @@
+ #include <QtCore/qmath.h>
+ #include <QDialog>
+ #include <QGSettings>
+-#include "imageutil.h"
+ 
+ const QString kcnBj = "北京";
+ const QString kenBj = "Asia/Beijing";
diff -Nru ukui-control-center-4.10.0.0/debian/patches/0126-152-sdk.patch ukui-control-center-4.10.0.0/debian/patches/0126-152-sdk.patch
--- ukui-control-center-4.10.0.0/debian/patches/0126-152-sdk.patch	1970-01-01 08:00:00.000000000 +0800
+++ ukui-control-center-4.10.0.0/debian/patches/0126-152-sdk.patch	2025-02-07 16:32:50.000000000 +0800
@@ -0,0 +1,197 @@
+From: =?utf-8?b?6IuP5Zej5YW4?= <susidian@kylinos.cn>
+Date: Wed, 22 Jan 2025 01:25:21 +0000
+Subject: =?utf-8?b?ITE1MiDpgILphY1zZGsgTWVyZ2UgcHVsbCByZXF1ZXN0ICExNTIgZnJv?=
+ =?utf-8?b?bSDkvZXmgJ3og5wvbmlsZQ==?=
+
+---
+ plugins/account/userinfo/creategroupdialog.cpp | 9 +++++----
+ plugins/account/userinfo/creategroupdialog.h   | 9 +++++----
+ plugins/account/userinfo/deleteuserexists.cpp  | 6 ++++--
+ plugins/account/userinfo/deleteuserexists.h    | 7 ++++---
+ plugins/account/userinfo/userinfo.cpp          | 1 -
+ plugins/account/userinfo/userinfo.pro          | 2 --
+ plugins/devices/keyboard/keyboard.pro          | 1 -
+ shell/mainwindow.cpp                           | 1 -
+ shell/shell.pro                                | 1 -
+ 9 files changed, 18 insertions(+), 19 deletions(-)
+
+diff --git a/plugins/account/userinfo/creategroupdialog.cpp b/plugins/account/userinfo/creategroupdialog.cpp
+index 6586c57..5c5728e 100644
+--- a/plugins/account/userinfo/creategroupdialog.cpp
++++ b/plugins/account/userinfo/creategroupdialog.cpp
+@@ -20,7 +20,6 @@
+ 
+ #include "creategroupdialog.h"
+ #include "userinfo.h"
+-#include "closebutton.h"
+ #include "changeusergroup.h"
+ 
+ #define GROUPNAME_LENGTH 32
+@@ -51,7 +50,8 @@ void CreateGroupDialog::initUI()
+     this->setFixedSize(480, 214);
+     setAttribute(Qt::WA_DeleteOnClose);
+ 
+-    mGroupNameLabel = new FixLabel(tr("Name"), this);
++    mGroupNameLabel = new KLabel(this);
++    mGroupNameLabel->setText(tr("Name"));
+     mGroupNameLabel->setFixedSize(62, 36);
+     mGroupNameEdit = new QLineEdit(this);
+     mGroupNameEdit->installEventFilter(this);
+@@ -63,7 +63,7 @@ void CreateGroupDialog::initUI()
+     mGroupNameHLayout->addWidget(mGroupNameLabel);
+     mGroupNameHLayout->addWidget(mGroupNameEdit);
+ 
+-    mGroupNameTipLabel = new FixLabel();
++    mGroupNameTipLabel = new KLabel(this);
+     mGroupNameTipLabel->setFixedWidth(370);
+     QFont ft;
+     ft.setPixelSize(14);
+@@ -75,7 +75,8 @@ void CreateGroupDialog::initUI()
+     mGroupNameTipHLayout->addStretch();
+     mGroupNameTipHLayout->addWidget(mGroupNameTipLabel);
+ 
+-    mGroupIdLabel = new FixLabel(tr("Id"), this);
++    mGroupIdLabel = new KLabel(this);
++    mGroupIdLabel->setText(tr("Id"));
+     mGroupIdLabel->setFixedSize(62, 36);
+     mGroupIdEdit = new QLineEdit(this);
+     mGroupIdEdit->setFixedSize(370, 36);
+diff --git a/plugins/account/userinfo/creategroupdialog.h b/plugins/account/userinfo/creategroupdialog.h
+index 0c0e6b8..90cbda8 100644
+--- a/plugins/account/userinfo/creategroupdialog.h
++++ b/plugins/account/userinfo/creategroupdialog.h
+@@ -34,7 +34,8 @@
+ #include <QLabel>
+ #include <QPushButton>
+ 
+-#include "widgets/Label/fixlabel.h"
++#include <kysdk/applications/klabel.h>
++using namespace kdk;
+ 
+ class changeUserGroup;
+ namespace Ui {
+@@ -64,8 +65,8 @@ private:
+     QFrame *mGroupIdFrame;
+     QFrame *mConfirmFrame;
+ 
+-    QLabel *mGroupNameLabel;
+-    QLabel *mGroupIdLabel;
++    KLabel *mGroupNameLabel;
++    KLabel *mGroupIdLabel;
+ 
+     QLineEdit *mGroupNameEdit;
+     QLineEdit *mGroupIdEdit;
+@@ -82,7 +83,7 @@ private:
+     bool _idHasModified;
+ 
+     QString oldGroupName;
+-    FixLabel *mGroupNameTipLabel;
++    KLabel *mGroupNameTipLabel;
+     QString mGroupNameTip;
+ 
+     void initUI();
+diff --git a/plugins/account/userinfo/deleteuserexists.cpp b/plugins/account/userinfo/deleteuserexists.cpp
+index a425bce..732090a 100644
+--- a/plugins/account/userinfo/deleteuserexists.cpp
++++ b/plugins/account/userinfo/deleteuserexists.cpp
+@@ -62,8 +62,10 @@ void DeleteUserExists::initUI()
+     removeBtnGroup->addButton(removeWholeRadioBtn, 1);
+     removeWholeRadioBtn->setChecked(true);
+ 
+-    removeButKeepFilesLabel = new FixLabel(tr("Keep desktop, files, favorites, music of the user"));
+-    removeWholeLabel = new FixLabel(tr("Delete whole data belong user"));
++    removeButKeepFilesLabel = new KLabel(this);
++    removeButKeepFilesLabel->setText(tr("Keep desktop, files, favorites, music of the user"));
++    removeWholeLabel = new KLabel(this);
++    removeWholeLabel->setText(tr("Delete whole data belong user"));
+ 
+     removeButKeepFilesHorLayout = new QHBoxLayout;
+     removeButKeepFilesHorLayout->setSpacing(9);
+diff --git a/plugins/account/userinfo/deleteuserexists.h b/plugins/account/userinfo/deleteuserexists.h
+index aeeb37e..bfde175 100644
+--- a/plugins/account/userinfo/deleteuserexists.h
++++ b/plugins/account/userinfo/deleteuserexists.h
+@@ -2,7 +2,8 @@
+ #define DELETEUSEREXISTS_H
+ 
+ #include <QDialog>
+-#include "fixlabel.h"
++#include <kysdk/applications/klabel.h>
++using namespace kdk;
+ 
+ class QHBoxLayout;
+ class QVBoxLayout;
+@@ -40,8 +41,8 @@ public:
+     QRadioButton * removeWholeRadioBtn;
+ 
+     QLabel *noteLabel;
+-    FixLabel *removeButKeepFilesLabel;
+-    FixLabel *removeWholeLabel;
++    KLabel *removeButKeepFilesLabel;
++    KLabel *removeWholeLabel;
+ 
+     QPushButton * cancelBtn;
+     QPushButton * confirmBtn;
+diff --git a/plugins/account/userinfo/userinfo.cpp b/plugins/account/userinfo/userinfo.cpp
+index 10ff4c3..c939fa9 100644
+--- a/plugins/account/userinfo/userinfo.cpp
++++ b/plugins/account/userinfo/userinfo.cpp
+@@ -49,7 +49,6 @@
+ 
+ #include "ukcccommon.h"
+ using namespace ukcc;
+-#include "imageutil.h"
+ 
+ /* qt会将glib里的signals成员识别为宏,所以取消该宏
+  * 后面如果用到signals时,使用Q_SIGNALS代替即可
+diff --git a/plugins/account/userinfo/userinfo.pro b/plugins/account/userinfo/userinfo.pro
+index 5ead1f4..1b1939f 100644
+--- a/plugins/account/userinfo/userinfo.pro
++++ b/plugins/account/userinfo/userinfo.pro
+@@ -5,10 +5,8 @@
+ #-------------------------------------------------
+ include(../../../env.pri)
+ include($$PROJECT_ROOTDIR/libukcc/widgets/FlowLayout/flowlayout.pri)
+-include($$PROJECT_ROOTDIR/libukcc/widgets/ImageUtil/imageutil.pri)
+ include($$PROJECT_ROOTDIR/libukcc/widgets/Label/label.pri)
+ include($$PROJECT_ROOTDIR/libukcc/widgets/AddBtn/addbtn.pri)
+-include($$PROJECT_ROOTDIR/libukcc/widgets/CloseButton/closebutton.pri)
+ include($$PROJECT_ROOTDIR/libukcc/widgets/SettingWidget/settingwidget.pri)
+ include($$PROJECT_ROOTDIR/libukcc/interface.pri)
+ 
+diff --git a/plugins/devices/keyboard/keyboard.pro b/plugins/devices/keyboard/keyboard.pro
+index aaaf50e..77015a8 100644
+--- a/plugins/devices/keyboard/keyboard.pro
++++ b/plugins/devices/keyboard/keyboard.pro
+@@ -6,7 +6,6 @@
+ 
+ include(../../../env.pri)
+ include($$PROJECT_ROOTDIR/libukcc/widgets/Label/label.pri)
+-include($$PROJECT_ROOTDIR/libukcc/widgets/CloseButton/closebutton.pri)
+ include($$PROJECT_ROOTDIR/libukcc/widgets/SettingWidget/settingwidget.pri)
+ include($$PROJECT_ROOTDIR/libukcc/interface.pri)
+ 
+diff --git a/shell/mainwindow.cpp b/shell/mainwindow.cpp
+index aeebab3..469a417 100644
+--- a/shell/mainwindow.cpp
++++ b/shell/mainwindow.cpp
+@@ -21,7 +21,6 @@
+ #include "ui_mainwindow.h"
+ #include "interface/ukcccommon.h"
+ using namespace ukcc;
+-#include "imageutil.h"
+ #include "ukccabout.h"
+ 
+ #include <QLabel>
+diff --git a/shell/shell.pro b/shell/shell.pro
+index 3ec42ad..fa1880d 100644
+--- a/shell/shell.pro
++++ b/shell/shell.pro
+@@ -19,7 +19,6 @@ DEFINES += QT_DEPRECATED_WARNINGS
+ include(../env.pri)
+ include($$PROJECT_ROOTDIR/libukcc/widgets/Label/label.pri)
+ include($$PROJECT_ROOTDIR/libukcc/widgets/FlowLayout/flowlayout.pri)
+-include($$PROJECT_ROOTDIR/libukcc/widgets/ImageUtil/imageutil.pri)
+ include($$PROJECT_ROOTDIR/libukcc/interface.pri)
+ 
+ DEFINES += PLUGIN_INSTALL_DIRS='\\"$${PLUGIN_INSTALL_DIRS}\\"'
diff -Nru ukui-control-center-4.10.0.0/debian/patches/0127-154-fix-ukui-control-center-update-agreement.patch ukui-control-center-4.10.0.0/debian/patches/0127-154-fix-ukui-control-center-update-agreement.patch
--- ukui-control-center-4.10.0.0/debian/patches/0127-154-fix-ukui-control-center-update-agreement.patch	1970-01-01 08:00:00.000000000 +0800
+++ ukui-control-center-4.10.0.0/debian/patches/0127-154-fix-ukui-control-center-update-agreement.patch	2025-02-07 16:32:50.000000000 +0800
@@ -0,0 +1,23 @@
+From: nil <zhoubin@kylinos.cn>
+Date: Fri, 7 Feb 2025 07:31:59 +0000
+Subject: =?utf-8?q?!154_fix=28ukui-control-center=29=3A_update_agreement_Me?=
+ =?utf-8?q?rge_pull_request_!154_from_=E8=8B=8F=E5=97=A3=E5=85=B8/nile-0122?=
+
+---
+ plugins/system/about/res/Ukcc-Agreement-zh_CN.txt | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/plugins/system/about/res/Ukcc-Agreement-zh_CN.txt b/plugins/system/about/res/Ukcc-Agreement-zh_CN.txt
+index c710b44..b388699 100644
+--- a/plugins/system/about/res/Ukcc-Agreement-zh_CN.txt
++++ b/plugins/system/about/res/Ukcc-Agreement-zh_CN.txt
+@@ -104,7 +104,8 @@
+         5)本产品的生物特征管理工具支持系统组件使用生物特征进行认证,包括指纹、指静脉、虹膜、声纹等。您录入的生物特征信息将储存在本地计算机,这部分信息我们仅接收验证结果,不会收集和上传。如您不需要使用生物特征进行系统认证,可以在生物特征管理工具中关闭该功能。
+         6)本产品提供录音功能,您在使用本产品录音软件中,我们仅会将您使用录音时的音频内容存储在本地计算机中,不会进行收集和上传。
+         7)本产品的服务与支持功能会收集由您提供给我们的日志、电子邮箱、电话、姓名等信息,便于提供技术服务,我们将妥善保管您的个人信息。
+-        8)本产品升级过程中,如需新增收集您的个人信息,我们将及时更新本部分内容。
++        8)为了确保您的账户安全和提供个性化的服务,本产品可能会收集您用于登录计算机系统的用户名和密码信息。这些信息将经过加密处理,并仅用于身份验证和账户管理目的。我们承诺不会以明文形式存储或传输您的密码,并采取严格的安全措施保护您的个人信息。
++        9)本产品升级过程中,如需新增收集您的个人信息,我们将及时更新本部分内容。
+         2.使用个人信息的情况
+         我们严格遵守法律法规的规定及与您的约定,将收集的信息用于以下用途。若我们超出以下用途,我们将再次向您进行说明,并征得您的同意。
+         1)涉及产品许可机制、软件商店使用、系统更新维护、生物识别、在线服务等需要;
diff -Nru ukui-control-center-4.10.0.0/debian/patches/0128-155-fix-font.patch ukui-control-center-4.10.0.0/debian/patches/0128-155-fix-font.patch
--- ukui-control-center-4.10.0.0/debian/patches/0128-155-fix-font.patch	1970-01-01 08:00:00.000000000 +0800
+++ ukui-control-center-4.10.0.0/debian/patches/0128-155-fix-font.patch	2025-02-07 16:32:50.000000000 +0800
@@ -0,0 +1,91 @@
+From: =?utf-8?b?6IuP5Zej5YW4?= <susidian@kylinos.cn>
+Date: Fri, 7 Feb 2025 08:47:59 +0000
+Subject: !155 fix: font Merge pull request !155 from nil/nile-25-0205
+
+---
+ data/org.ukui.control-center.gschema.xml |  2 +-
+ shell/searchwidget.cpp                   | 16 +---------------
+ shell/searchwidget.h                     |  2 --
+ 3 files changed, 2 insertions(+), 18 deletions(-)
+
+diff --git a/data/org.ukui.control-center.gschema.xml b/data/org.ukui.control-center.gschema.xml
+index 6bbcb0b..275b25a 100644
+--- a/data/org.ukui.control-center.gschema.xml
++++ b/data/org.ukui.control-center.gschema.xml
+@@ -1,7 +1,7 @@
+ <schemalist gettext-domain="ukui-control-center">
+   <schema id="org.ukui.control-center" path="/org/ukui/control-center/">
+     <key name="fonts-list" type="as">
+-      <default>['CESI仿宋-GB13000','CESI_FS_GB13000', 'CESI仿宋-GB18030','CESI_FS_GB18030', 'CESI仿宋-GB2312','CESI_FS_GB2312', 'CESI宋体-GB13000','CESI_SS_GB13000', 'CESI宋体-GB18030','CESI_SS_GB18030', 'CESI宋体-GB2312','CESI_SS_GB2312', 'CESI小标宋-GB13000','CESI_XBS_GB13000', 'CESI小标宋-GB18030','CESI_XBS_GB18030', 'CESI小标宋-GB2312','CESI_XBS_GB2312', 'CESI楷体-GB13000','CESI_KT_GB13000', 'CESI楷体-GB18030','CESI_KT_GB18030', 'CESI楷体-GB2312','CESI_KT_GB2312', 'CESI黑体-GB13000','CESI_HT_GB13000', 'CESI黑体-GB18030','CESI_HT_GB18030', 'CESI黑体-GB2312','CESI_HT_GB2312', '仿宋', '黑体', '楷体', '宋体', '华文彩云','STCaiyun', '华文仿宋','STFangsong', '华文琥珀','STHupo', '华文楷体','STKaiti', '华文隶书','STLiti', '华文宋体','STSong', '华文细黑','STXihei', '华文行楷','STXingkai', '华文新魏','STXinwei', 'Noto Sans CJK SC', 'Noto Sans CJK SC Black', 'Noto Sans Mono CJK SC', 'Noto Sans CJK SC DemiLight', 'Noto Sans CJK SC Light', 'Noto Sans CJK SC Medium', 'Noto Sans CJK SC', 'Noto Sans CJK SC Thin','Dotted Songti Square','WenQuanYi Bitmap Song','国标仿宋', '国标宋体-超大字符集', '国标仿宋-GB/T 2312', '国标黑体', '国标黑体-GB/T 2312', '国标楷体', '国标楷体-GB/T 2312', '国标宋体', '国标宋体-GB/T 2312', '国标小标宋', '国标小标宋-GB/T 2312']</default>
++      <default>['CESI仿宋-GB13000','CESI_FS_GB13000', 'CESI仿宋-GB18030','CESI_FS_GB18030', 'CESI仿宋-GB2312','CESI_FS_GB2312', 'CESI宋体-GB13000','CESI_SS_GB13000', 'CESI宋体-GB18030','CESI_SS_GB18030', 'CESI宋体-GB2312','CESI_SS_GB2312', 'CESI小标宋-GB13000','CESI_XBS_GB13000', 'CESI小标宋-GB18030','CESI_XBS_GB18030', 'CESI小标宋-GB2312','CESI_XBS_GB2312', 'CESI楷体-GB13000','CESI_KT_GB13000', 'CESI楷体-GB18030','CESI_KT_GB18030', 'CESI楷体-GB2312','CESI_KT_GB2312', 'CESI黑体-GB13000','CESI_HT_GB13000', 'CESI黑体-GB18030','CESI_HT_GB18030', 'CESI黑体-GB2312','CESI_HT_GB2312', '仿宋', '黑体', '楷体', '宋体', '华文仿宋','STFangsong', '华文楷体','STKaiti', '华文隶书','STLiti', '华文宋体','STSong', '华文细黑','STXihei', '华文行楷','STXingkai', '华文新魏','STXinwei', 'Noto Sans CJK SC', 'Noto Sans CJK SC Black', 'Noto Sans Mono CJK SC', 'Noto Sans CJK SC DemiLight', 'Noto Sans CJK SC Light', 'Noto Sans CJK SC Medium', 'Noto Sans CJK SC', 'Noto Sans CJK SC Thin','Dotted Songti Square','WenQuanYi Bitmap Song','国标仿宋','GB_FS_GB18030', '国标宋体-超大字符集','GB_SS_GB18030_ExtendedK', '国标仿宋-GB/T 2312','GB_FS_GBT2312', '国标黑体','GB_HT_GB18030', '国标黑体-GB/T 2312','GB_HT_GBT2312', '国标楷体', 'GB_KT_GB18030','国标楷体-GB/T 2312', 'GB_KT_GBT2312','国标宋体', 'GB_SS_GB18030','国标宋体-GB/T 2312','GB_SS_GBT2312', '国标小标宋','GB_XBS_GB18030','国标小标宋-GB/T 2312','GB_XBS_GBT2312']</default>
+       <summary>Control panel default font list</summary>
+       <description>Control panel default font list</description>
+     </key>
+diff --git a/shell/searchwidget.cpp b/shell/searchwidget.cpp
+index 06a7b2a..3be58d6 100644
+--- a/shell/searchwidget.cpp
++++ b/shell/searchwidget.cpp
+@@ -438,18 +438,6 @@ void SearchWidget::addShortcutSearch() {
+     clearSearchData();
+ }
+ 
+-void SearchWidget::removeRepeatItems()
+-{
+-    for (int index = 0 ; index < m_model->rowCount() ; index++) {
+-        QString text = m_model->item(index)->text();
+-        if (m_repeatlist.contains(text)) {
+-            m_model->removeRow(index);
+-            index--;
+-        }
+-        m_repeatlist.append(text);
+-    }
+-}
+-
+ void SearchWidget::appendShortcutSearch() {
+     typedef QList<QStringPair> QStringPairList;
+     QDBusReply<QStringPairList> systemEntryReply = m_shortcutInterface->call("getSystemShortcut");
+@@ -611,7 +599,7 @@ void SearchWidget::appendChineseData(SearchWidget::SearchBoxStruct data) {
+ 
+         for (auto datas : m_TxtList) {
+             for (int i = 0; i < datas.count(); i++) {
+-                if( data.translateContent == datas){
++                if (data.translateContent == datas){
+                     return;
+                 }
+             }
+@@ -736,7 +724,6 @@ void SearchWidget::setLanguage(QString type) {
+     loadxml();
+     //记录搜索项总数
+     count = m_model->rowCount();
+-    removeRepeatItems();
+ }
+ 
+ //save all modules moduleInteface name and actual moduleName
+@@ -751,7 +738,6 @@ void SearchWidget::addModulesName(QString moduleName, QString searchName, QStrin
+     if (!translation.isEmpty()) {
+         m_xmlFilePath.insert(translation);
+     }
+-
+ }
+ 
+ void SearchWidget::onCompleterActivated(QString value) {
+diff --git a/shell/searchwidget.h b/shell/searchwidget.h
+index 734665c..8752ab0 100644
+--- a/shell/searchwidget.h
++++ b/shell/searchwidget.h
+@@ -76,7 +76,6 @@ private:
+                           SearchBoxStruct *data = nullptr);
+     void appendShortcutSearch();
+     void addShortcutSearch();
+-    void removeRepeatItems();
+ 
+ private:
+     QStandardItemModel *m_model;
+@@ -96,7 +95,6 @@ private:
+     QList<QString> m_TxtList;
+ 
+     QStringList mExcludeList;
+-    QStringList m_repeatlist;
+     int count;
+     QVariantMap searchMap;
+     bool m_shortcutInterfaceValid = true;
diff -Nru ukui-control-center-4.10.0.0/debian/patches/0129-fix-ukui-control-center-fix-about-version.patch ukui-control-center-4.10.0.0/debian/patches/0129-fix-ukui-control-center-fix-about-version.patch
--- ukui-control-center-4.10.0.0/debian/patches/0129-fix-ukui-control-center-fix-about-version.patch	1970-01-01 08:00:00.000000000 +0800
+++ ukui-control-center-4.10.0.0/debian/patches/0129-fix-ukui-control-center-fix-about-version.patch	2025-02-07 16:32:50.000000000 +0800
@@ -0,0 +1,131 @@
+From: susidian <susidian@kylinos.cn>
+Date: Wed, 12 Feb 2025 11:42:25 +0800
+Subject: fix(ukui-control-center): fix about version
+MIME-Version: 1.0
+Content-Type: text/plain; charset="utf-8"
+Content-Transfer-Encoding: 8bit
+
+Description: 27530 【V11-General-RC3-Build03-2503在线升级V11-General-RC3-Build04-2503】【在线更新】关于界面无系统版本补丁号
+
+Log: 27530 【V11-General-RC3-Build03-2503在线升级V11-General-RC3-Build04-2503】【在线更新】关于界面无系统版本补丁号
+---
+ data/en_US/index.md                                |  6 +++---
+ libukcc/interface/ukcccommon.cpp                   |  6 +++++-
+ plugins/personalized/screenlock/screenlock.cpp     | 10 ----------
+ plugins/personalized/wallpaper/wallpaper.cpp       | 11 -----------
+ registeredSession/plugins/about/aboutinterface.cpp |  5 +++++
+ 5 files changed, 13 insertions(+), 25 deletions(-)
+
+diff --git a/data/en_US/index.md b/data/en_US/index.md
+index 7cf841b..1f1c43a 100644
+--- a/data/en_US/index.md
++++ b/data/en_US/index.md
+@@ -381,7 +381,7 @@ In Screenlock module, you can select the background image to display on the logi
+ 
+ As shown in Fig 22.
+ 
+-![Fig 21-3 Effect settings](image/19.png)
++![Fig 22-1 Screenlock](image/19.png)
+ 
+ 
+ 
+@@ -389,7 +389,7 @@ As shown in Fig 22.
+ 
+ In Screensaver module, you can set screen saver program, wait time, show rest time, lock screen when screensaver boot. The screen saver provides two options: UKUI and Customize.
+ 
+-![Fig 22 Screenlock-big](image/20.png)
++![Fig 22 Screensaver-big](image/20.png)
+ 
+ ### Fonts
+ 
+@@ -397,7 +397,7 @@ General settings for font, size, and monospace.
+ 
+ Click the "Restore Defaults" button to restore all font settings to the system defaults.
+ 
+-![Fig 23 Screensaver-big](image/21.png)
++![Fig 23 Fonts-big](image/21.png)
+ 
+ ### Panel
+ 
+diff --git a/libukcc/interface/ukcccommon.cpp b/libukcc/interface/ukcccommon.cpp
+index 9b25b89..0154dfb 100644
+--- a/libukcc/interface/ukcccommon.cpp
++++ b/libukcc/interface/ukcccommon.cpp
+@@ -72,6 +72,10 @@ QString UkccCommon::getCpuInfo() {
+         QStringList modelLineWayland = buffer.split('\n').filter(QRegularExpression("^Hardware"));
+         QStringList lines = buffer.split('\n');
+ 
++        if (modelLine.isEmpty()) {
++            modelLine = buffer.split('\n').filter(QRegularExpression("^Model Name"));
++            qDebug() << Q_FUNC_INFO << "model name is empty, get Model Name" << modelLine;
++        }
+         if (modelLine.isEmpty()) {
+             if (modelLineWayland.isEmpty()) {
+                 return "Unknown";
+@@ -85,7 +89,7 @@ QString UkccCommon::getCpuInfo() {
+         QString result;
+         result.append(modelLine.first().split(':').at(1));
+         result = result.trimmed();
+-
++        qDebug() << Q_FUNC_INFO << "getCpuInfo" << result;
+         return result;
+     }
+ 
+diff --git a/plugins/personalized/screenlock/screenlock.cpp b/plugins/personalized/screenlock/screenlock.cpp
+index 05f27a2..bf939ef 100644
+--- a/plugins/personalized/screenlock/screenlock.cpp
++++ b/plugins/personalized/screenlock/screenlock.cpp
+@@ -224,16 +224,6 @@ void Screenlock::showLocalWpDialog()
+     }
+     QString selectedfile;
+     selectedfile = fd.selectedFiles().first();
+-
+-    QStringList fileRes = selectedfile.split("/");
+-
+-    QProcess * process = new QProcess(this);
+-    QString program("cp");
+-    QStringList arguments;
+-    arguments << selectedfile ;
+-    arguments << "/tmp";
+-    process->start(program, arguments);
+-
+     screenlockInterface->call("setWallpaper", selectedfile);
+     UkccCommon::buriedSettings(name(), QString("browserLocalwpBtn"), QString("clicked"));
+ }
+diff --git a/plugins/personalized/wallpaper/wallpaper.cpp b/plugins/personalized/wallpaper/wallpaper.cpp
+index 7c7675f..473b111 100644
+--- a/plugins/personalized/wallpaper/wallpaper.cpp
++++ b/plugins/personalized/wallpaper/wallpaper.cpp
+@@ -328,16 +328,5 @@ void Wallpaper::showLocalWpDialog()
+     }
+     QString selectedfile;
+     selectedfile = fd.selectedFiles().first();
+-
+-    QStringList fileRes = selectedfile.split("/");
+-
+-    QProcess process;
+-    QString program("cp");
+-    QStringList arguments;
+-    arguments << selectedfile ;
+-    arguments << "/tmp";
+-    process.start(program, arguments);
+-    QString bgfile = "/tmp/" + fileRes.at(fileRes.length() - 1);
+-
+     wallpaperInterface->call("setWallpaper", "picture", selectedfile);
+ }
+diff --git a/registeredSession/plugins/about/aboutinterface.cpp b/registeredSession/plugins/about/aboutinterface.cpp
+index 9a24c5e..b2db84e 100644
+--- a/registeredSession/plugins/about/aboutinterface.cpp
++++ b/registeredSession/plugins/about/aboutinterface.cpp
+@@ -132,6 +132,11 @@ void AboutInterface::getBuildList() {
+ 
+ QStringList AboutInterface::getBuild()
+ {
++    mBuild.clear();
++    version_t ver= kdk_system_get_version_detaile();
++    mBuild.append(ver.os_version);
++    mBuild.append(ver.update_version);
++    qDebug() << Q_FUNC_INFO << "os_version" << ver.os_version << "update_version" << ver.update_version;
+     return mBuild;
+ }
+ 
diff -Nru ukui-control-center-4.10.0.0/debian/patches/series ukui-control-center-4.10.0.0/debian/patches/series
--- ukui-control-center-4.10.0.0/debian/patches/series	2025-01-01 16:22:05.000000000 +0800
+++ ukui-control-center-4.10.0.0/debian/patches/series	2025-02-07 16:32:50.000000000 +0800
@@ -108,3 +108,22 @@
 0108-124-bug.patch
 0109-125-277741.patch
 0110-chore-changelog.patch
+0111-128-316417.patch
+0112-fix-theme.patch
+0113-fix-theme.patch
+0114-127-bug.patch
+0115-131-290807.patch
+0116-chore-md.patch
+0117-133-v11-2501.patch
+0118-135-291185.patch
+0119-139-bug.patch
+0120-140-fix-panel-bug-278913.patch
+0121-141-380937-2024-OEM-v11-2501.patch
+0122-142-vino.patch
+0123-143-380927-v11-2501.patch
+0124-146-326999-core.patch
+0125-145-update-display-log.patch
+0126-152-sdk.patch
+0127-154-fix-ukui-control-center-update-agreement.patch
+0128-155-fix-font.patch
+0129-fix-ukui-control-center-fix-about-version.patch
diff -Nru ukui-control-center-4.10.0.0/debian/source/include-binaries ukui-control-center-4.10.0.0/debian/source/include-binaries
--- ukui-control-center-4.10.0.0/debian/source/include-binaries	2025-01-01 16:22:05.000000000 +0800
+++ ukui-control-center-4.10.0.0/debian/source/include-binaries	2025-02-07 16:32:50.000000000 +0800
@@ -22,3 +22,5 @@
 debian/patches/0095-102-bug.patch
 debian/patches/0103-118-291281.patch
 debian/patches/0106-122-md.patch
+debian/patches/0116-chore-md.patch
+debian/patches/0120-140-fix-panel-bug-278913.patch