diff -Nru libkysdk-applications-2.5.1.0/debian/changelog libkysdk-applications-2.5.2.0/debian/changelog
--- libkysdk-applications-2.5.1.0/debian/changelog	2024-07-31 11:09:38.000000000 +0800
+++ libkysdk-applications-2.5.2.0/debian/changelog	2025-03-17 13:09:05.000000000 +0800
@@ -1,3 +1,107 @@
+libkysdk-applications (2.5.2.0-0k3.0) huanghe; urgency=medium
+
+   * BUG号 : 无
+   * 需求号 : 无
+   * 其他改动 : 支持ukui-shell协议
+
+ -- Jie Liu <liujie01@kylinos.cn>  Mon, 17 Mar 2025 13:09:05 +0800
+
+libkysdk-applications (2.5.2.0-0k2.0) huanghe; urgency=medium
+
+   * BUG号 : 无
+   * 需求号 : #31773 【UKUI Framework】【Design Token】UKUI Design Token开发规范适配
+   * 其他改动 :  无
+
+ -- wangzhenyu <wangzhenyu@kylinos.cn>  Wed, 08 Jan 2025 16:47:41 +0800
+
+libkysdk-applications (2.5.2.0-0k1.1) huanghe; urgency=medium
+
+   * BUG号 : 无
+   * 需求号 : 无
+   * 其他改动 :  修正编译错误
+
+ -- wangzhenyu <wangzhenyu@kylinos.cn>  Thu, 05 Dec 2024 17:45:33 +0800
+
+libkysdk-applications (2.5.2.0-0k1.0) huanghe; urgency=medium
+
+   * BUG号 : 无
+   * 需求号 : #30832 子任务号 383489【2024】基础组件组周例会待办&平时任务&OEM临时任务 / 【KDragWidget控件开发】 
+   * 其他改动 :  修改协议名称
+
+ -- wangzhenyu <wangzhenyu@kylinos.cn>  Thu, 05 Dec 2024 17:12:28 +0800
+
+libkysdk-applications (2.5.2.0-0k0.5) huanghe; urgency=medium
+
+   * BUG号 : 无
+   * 需求号 : 无
+   * 其他改动 :  修改协议名称
+
+ -- sunzhen <sunzhen1@kylinos.cn>  Fri, 29 Nov 2024 14:39:50 +0800
+
+libkysdk-applications (2.5.2.0-0k0.4) huanghe; urgency=medium
+
+   * BUG号 : 无
+   * 需求号 : 无
+   * 其他改动 :  增加授权弹窗层级
+
+ -- sunzhen <sunzhen1@kylinos.cn>  Thu, 28 Nov 2024 17:30:08 +0800
+
+libkysdk-applications (2.5.2.0-0k0.3) huanghe; urgency=medium
+
+   * BUG号 : 无
+   * 需求号 : 无
+   * 其他改动 :  修正翻译问题 、更新symbols文件、更新man手册
+
+ -- wangzhenyu <wangzhenyu@kylinos.cn>  Thu, 14 Nov 2024 10:22:02 +0800
+
+libkysdk-applications (2.5.2.0-0k0.2) nile; urgency=medium
+
+   * BUG号 : 无
+   * 需求号 : 无
+   * 其他改动 :  修正编译错误
+
+ -- wangzhenyu <wangzhenyu@kylinos.cn>  Wed, 13 Nov 2024 15:11:12 +0800
+
+libkysdk-applications (2.5.2.0-0k0.1) nile; urgency=medium
+
+   * BUG号 : 无
+   * 需求号 : 无
+   * 其他改动 :  修正编译错误
+
+ -- wangzhenyu <wangzhenyu@kylinos.cn>  Wed, 30 Oct 2024 09:41:05 +0800
+
+libkysdk-applications (2.5.2.0-0k0.0) nile; urgency=medium
+
+   * BUG号 : 无
+   * 需求号 : #27393 #27397 #27389 #27385 #27398 #27388 #27394 #27395 #27387 #27396 #27390 #28406 #28400 #28402 #28395 #28410 #28409 #28408 #28407 #28405 #28404 #28401 #28396 #28394 #28390 #31208 #31204 #31203 #31202 #31201 #31200 #21341
+   * 其他改动 :  无
+
+ -- wangzhenyu <wangzhenyu@kylinos.cn>  Tue, 29 Oct 2024 15:56:08 +0800
+
+libkysdk-applications (2.5.1.0-0k8.0) nile; urgency=medium
+
+   * BUG号 : 无
+   * 需求号 : #28487 自研应用新增使用反馈入口,同时支持应用崩溃时自动弹窗提示反馈,提升用户反馈意愿
+   * 其他改动 :  无
+
+ -- wangzhenyu <wangzhenyu@kylinos.cn>  Mon, 21 Oct 2024 14:25:40 +0800
+
+libkysdk-applications (2.5.1.0-0k7.1) nile; urgency=medium
+
+   * BUG号 : 无
+   * 需求号 : 无
+   * 其他改动 :  增加自研协议的最低支持版本约束
+
+ -- sunzhen <sunzhen1@kylinos.cn>  Fri, 06 Sep 2024 16:17:16 +0800
+
+libkysdk-applications (2.5.1.0-0k7.0) nile; urgency=medium
+
+   * BUG号 : 无
+   * 需求号 : #27518 【好用工程】【任务号:199300】系统重置密码功能
+   * 其他改动 : 无
+
+ -- wangzhenyu <wangzhenyu@kylinos.cn>  Wed, 28 Aug 2024 15:47:45 +0800
+
 libkysdk-applications (2.5.1.0-0k6.8) nile; urgency=medium
 
    * BUG号 : 无
@@ -161,7 +265,7 @@
    * 需求号 : 无
    * 其他改动 : 增加设置窗口层级接口、独占键盘接口
 
- -- sunzhen <sunzhen1@kylinos.com>  Tue, 21 May 2024 08:33:54 +0500
+ -- sunzhen <sunzhen1@kylinos.cn>  Tue, 21 May 2024 08:33:54 +0500
 
 libkysdk-applications (2.5.1.0-0k0.3) nile; urgency=medium
 
@@ -169,7 +273,7 @@
    * 需求号 : 无
    * 其他改动 : add setStartupGeometry interface
 
- -- sunzhen <sunzhen1@kylinos.com>  Mon, 20 May 2024 06:58:26 +0500
+ -- sunzhen <sunzhen1@kylinos.cn>  Mon, 20 May 2024 06:58:26 +0500
 
 libkysdk-applications (2.5.1.0-0k0.2) nile; urgency=medium
 
@@ -177,7 +281,7 @@
    * 需求号 : 无
    * 其他改动 : 解决获取位置接口传入无效句柄时导致崩溃的问题
 
- -- sunzhen <sunzhen1@kylinos.com>  Fri, 17 May 2024 11:03:55 +0800
+ -- sunzhen <sunzhen1@kylinos.cn>  Fri, 17 May 2024 11:03:55 +0800
 
 libkysdk-applications (2.5.1.0-0k0.1) nile; urgency=medium
 
@@ -185,7 +289,7 @@
    * 需求号 : 无
    * 其他改动 : 增加ukui协议支持
 
- -- sunzhen <sunzhen1@kylinos.com>  Thu, 16 May 2024 09:59:04 +0800
+ -- sunzhen <sunzhen1@kylinos.cn>  Thu, 16 May 2024 09:59:04 +0800
 
 libkysdk-applications (2.4.1.0-0k0.1) nile; urgency=medium
 
@@ -193,7 +297,7 @@
    * 需求号 : 无
    * 其他改动 : 删除编译依赖,解决arm编译错误
 
- -- wangzhenyu <wangzhenyu@kylinos.com>  Wed, 24 Apr 2024 17:43:34 +0800
+ -- wangzhenyu <wangzhenyu@kylinos.cn>  Wed, 24 Apr 2024 17:43:34 +0800
 
 libkysdk-applications (2.4.1.0-0k0.0) nile; urgency=medium
 
@@ -202,7 +306,7 @@
 					#27385 【好用工程】【ai 攻关】SDK KSearchLineedit中增加智能语义按钮
    * 其他改动 : 无
 
- -- wangzhenyu <wangzhenyu@kylinos.com>  Wed, 27 Mar 2024 17:21:04 +0800
+ -- wangzhenyu <wangzhenyu@kylinos.cn>  Wed, 27 Mar 2024 17:21:04 +0800
 
 libkysdk-applications (2.3.2.0-0k0.8) nile; urgency=medium
 
@@ -210,7 +314,7 @@
    * 需求号 :  无
    * 其他改动 : 更新symbols文件
 
- -- wangzhenyu <wangzhenyu@kylinos.com>  Wed, 28 Feb 2024 11:14:35 +0800
+ -- wangzhenyu <wangzhenyu@kylinos.cn>  Wed, 28 Feb 2024 11:14:35 +0800
 
 libkysdk-applications (2.3.2.0-0k0.7) nile; urgency=medium
 
@@ -218,7 +322,7 @@
    * 需求号 :  无
    * 其他改动 : 修复编译错误
 
- -- wangzhenyu <wangzhenyu@kylinos.com>  Tue, 20 Feb 2024 14:31:12 +0800
+ -- wangzhenyu <wangzhenyu@kylinos.cn>  Tue, 20 Feb 2024 14:31:12 +0800
 
 libkysdk-applications (2.3.2.0-0k0.6) nile; urgency=medium
 
@@ -226,7 +330,7 @@
    * 需求号 :  无
    * 其他改动 : 修复启典主题控件ui问题,更新翻译文件字段
 
- -- wangzhenyu <wangzhenyu@kylinos.com>  Mon, 19 Feb 2024 14:51:37 +0800
+ -- wangzhenyu <wangzhenyu@kylinos.cn>  Mon, 19 Feb 2024 14:51:37 +0800
 
 libkysdk-applications (2.3.2.0-0k0.5) nile; urgency=medium
 
@@ -234,7 +338,7 @@
    * 需求号 :  无
    * 其他改动 : 无
 
- -- sunzhen <sunzhen1@kylinos.com>  Mon, 22 Jan 2024 16:21:23 +0800
+ -- sunzhen <sunzhen1@kylinos.cn>  Mon, 22 Jan 2024 16:21:23 +0800
 
 libkysdk-applications (2.3.2.0-0k0.4) nile; urgency=medium
 
@@ -242,13 +346,13 @@
    * 需求号 :  无
    * 其他改动 : 无
 
- -- liuxiangwei <liuxiangwei@kylinos.com>  Fri, 19 Jan 2024 15:04:26 +0800
+ -- liuxiangwei <liuxiangwei@kylinos.cn>  Fri, 19 Jan 2024 15:04:26 +0800
 
 libkysdk-applications (2.3.2.0-0k0.3) nile; urgency=medium
 
   * Format the control file and fix the wrong lib name.
 
- -- handsome_feng <jianfengli@ubuntukylin.com>  Wed, 10 Jan 2024 10:10:34 +0800
+ -- handsome_feng <jianfengli@ubuntukylin.cn>  Wed, 10 Jan 2024 10:10:34 +0800
 
 libkysdk-applications (2.3.2.0-0k0.2) nile; urgency=medium
 
@@ -418,7 +522,7 @@
 
   * rebuild without any changes.
 
- -- handsome_feng <jianfengli@ubuntukylin.com>  Mon, 12 Jun 2023 18:11:56 +0800
+ -- handsome_feng <jianfengli@ubuntukylin.cn>  Mon, 12 Jun 2023 18:11:56 +0800
 
 libkysdk-applications (2.0.2.1-0k0.7) yangtze; urgency=medium
 
diff -Nru libkysdk-applications-2.5.1.0/debian/libkysdk-kabase.symbols libkysdk-applications-2.5.2.0/debian/libkysdk-kabase.symbols
--- libkysdk-applications-2.5.1.0/debian/libkysdk-kabase.symbols	2024-07-31 11:09:38.000000000 +0800
+++ libkysdk-applications-2.5.2.0/debian/libkysdk-kabase.symbols	2025-03-17 13:09:05.000000000 +0800
@@ -1,4 +1,4 @@
-# SymbolsHelper-Confirmed: 2.3.1.0 amd64
+# SymbolsHelper-Confirmed: 2.5.2.0-0k0.2 amd64
 libkysdk-kabase.so.1 libkysdk-kabase #MINVER#
  _ZN11XAtomHelper11getInstanceEv@Base 1.2.0.3
  _ZN11XAtomHelper11qt_metacallEN11QMetaObject4CallEiPPv@Base 1.2.0.3
@@ -275,3 +275,4 @@
  _ZTVN3kdk6kabase9GsettingsE@Base 1.2.0.3
  _ZTVN3kdk6kabase9LoadMovieE@Base 1.2.0.3
  _ZTVN3kdk6kabase9SaveMovieE@Base 1.2.0.3
+ (optional=templinst)_ZZN9QtPrivate15ConnectionTypesINS_4ListIJRK7QStringEEELb1EE5typesEvE1t@Base 2.5.2.0-0k0.2
diff -Nru libkysdk-applications-2.5.1.0/debian/libkysdk-qtwidgets-dev.install libkysdk-applications-2.5.2.0/debian/libkysdk-qtwidgets-dev.install
--- libkysdk-applications-2.5.1.0/debian/libkysdk-qtwidgets-dev.install	2024-07-31 11:09:38.000000000 +0800
+++ libkysdk-applications-2.5.2.0/debian/libkysdk-qtwidgets-dev.install	2025-03-17 13:09:05.000000000 +0800
@@ -1,50 +1,79 @@
 development-files/kysdk-qtwidgets.pc usr/share/pkgconfig/
-usr/include/kysdk/applications/ktabbar.h
-usr/include/kysdk/applications/kslider.h
-usr/include/kysdk/applications/kwindowbuttonbar.h
-usr/include/kysdk/applications/kwidget.h
-usr/include/kysdk/applications/ksearchlineedit.h
-usr/include/kysdk/applications/kprogressbar.h
-usr/include/kysdk/applications/kpasswordedit.h
-usr/include/kysdk/applications/kmessagebox.h
-usr/include/kysdk/applications/klineframe.h
-usr/include/kysdk/applications/kcolorcombobox.h
-usr/include/kysdk/applications/kcolorbutton.h
-usr/include/kysdk/applications/kbuttonbox.h
+usr/include/kysdk/applications/gui_g.h
+usr/include/kysdk/applications/kaboutdialog.h
+usr/include/kysdk/applications/kaddfilebutton.h
+usr/include/kysdk/applications/karrowtabbar.h
 usr/include/kysdk/applications/kbackgroundgroup.h
-usr/include/kysdk/applications/xatom-helper.h
-usr/include/kysdk/applications/themeController.h
-usr/include/kysdk/applications/parmscontroller.h
-usr/include/kysdk/applications/kuninstalldialog.h
-usr/include/kysdk/applications/ktranslucentfloor.h
-usr/include/kysdk/applications/ktoolbutton.h
-usr/include/kysdk/applications/ktag.h
-usr/include/kysdk/applications/kswitchbutton.h
-usr/include/kysdk/applications/kshadowhelper.h
-usr/include/kysdk/applications/ksecuritylevelbar.h
-usr/include/kysdk/applications/kpushbutton.h
-usr/include/kysdk/applications/kprogressdialog.h
-usr/include/kysdk/applications/kprogresscircle.h
-usr/include/kysdk/applications/kpressbutton.h
-usr/include/kysdk/applications/kpixmapcontainer.h
-usr/include/kysdk/applications/knavigationbar.h
-usr/include/kysdk/applications/kmenubutton.h
-usr/include/kysdk/applications/klistwidget.h
+usr/include/kysdk/applications/kbadge.h
+usr/include/kysdk/applications/kballontip.h
+usr/include/kysdk/applications/kborderbutton.h
+usr/include/kysdk/applications/kborderlessbutton.h
+usr/include/kysdk/applications/kbreadcrumb.h
+usr/include/kysdk/applications/kbubblewidget.h
+usr/include/kysdk/applications/kbuttonbox.h
+usr/include/kysdk/applications/kclocktimer.h
+usr/include/kysdk/applications/kcolorbutton.h
+usr/include/kysdk/applications/kcolorcombobox.h
+usr/include/kysdk/applications/kcomboboxwidget.h
+usr/include/kysdk/applications/kcommentpanel.h
+usr/include/kysdk/applications/kcrumb.h
+usr/include/kysdk/applications/kcustomdateedit.h
+usr/include/kysdk/applications/kcustomtabbar.h
+usr/include/kysdk/applications/kdialog.h
+usr/include/kysdk/applications/kdirtabbar.h
+usr/include/kysdk/applications/kdragwidget.h
+usr/include/kysdk/applications/kfilewidget.h
+usr/include/kysdk/applications/kiconbar.h
+usr/include/kysdk/applications/kinputdialog.h
+usr/include/kysdk/applications/kintrowidget.h
+usr/include/kysdk/applications/kitemwidget.h
+usr/include/kysdk/applications/klabel.h
+usr/include/kysdk/applications/klineedit.h
+usr/include/kysdk/applications/klineframe.h
 usr/include/kysdk/applications/klistviewdelegate.h
 usr/include/kysdk/applications/klistview.h
-usr/include/kysdk/applications/kitemwidget.h
-usr/include/kysdk/applications/kinputdialog.h
-usr/include/kysdk/applications/kiconbar.h
-usr/include/kysdk/applications/kdragwidget.h
-usr/include/kysdk/applications/kdialog.h
-usr/include/kysdk/applications/kcommentpanel.h
-usr/include/kysdk/applications/kbubblewidget.h
-usr/include/kysdk/applications/kbreadcrumb.h
-usr/include/kysdk/applications/kborderlessbutton.h
-usr/include/kysdk/applications/kborderbutton.h
-usr/include/kysdk/applications/kballontip.h
-usr/include/kysdk/applications/kbadge.h
-usr/include/kysdk/applications/kaboutdialog.h
-usr/include/kysdk/applications/gui_g.h
+usr/include/kysdk/applications/klistwidget.h
+usr/include/kysdk/applications/kloopplaypage.h
+usr/include/kysdk/applications/klunarcalendarinfo.h
+usr/include/kysdk/applications/klunardateedit.h
+usr/include/kysdk/applications/kmenubutton.h
+usr/include/kysdk/applications/kmessagebox.h
+usr/include/kysdk/applications/kminicalendaritem.h
+usr/include/kysdk/applications/kminicalendarwidget.h
+usr/include/kysdk/applications/knativetabbar.h
+usr/include/kysdk/applications/knavigationbar.h
+usr/include/kysdk/applications/knavigationtrail.h
+usr/include/kysdk/applications/kpasswordedit.h
+usr/include/kysdk/applications/kpixmapcontainer.h
+usr/include/kysdk/applications/kpressbutton.h
+usr/include/kysdk/applications/kprogressbar.h
+usr/include/kysdk/applications/kprogresscircle.h
+usr/include/kysdk/applications/kprogressdialog.h
+usr/include/kysdk/applications/kprogresslabel.h
+usr/include/kysdk/applications/kpushbutton.h
+usr/include/kysdk/applications/ksearchlineedit.h
+usr/include/kysdk/applications/ksecuritylevelbar.h
+usr/include/kysdk/applications/ksecurityquestiondialog.h
+usr/include/kysdk/applications/kshadowhelper.h
+usr/include/kysdk/applications/kslider.h
+usr/include/kysdk/applications/kswitchbutton.h
+usr/include/kysdk/applications/ktabbar.h
+usr/include/kysdk/applications/ktableheaderview.h
+usr/include/kysdk/applications/ktablemodel.h
+usr/include/kysdk/applications/ktableview.h
+usr/include/kysdk/applications/ktag.h
+usr/include/kysdk/applications/ktextedit.h
+usr/include/kysdk/applications/ktexteditor.h
+usr/include/kysdk/applications/ktitlewindow.h
+usr/include/kysdk/applications/ktoolbutton.h
+usr/include/kysdk/applications/ktoolbar.h
+usr/include/kysdk/applications/ktranslucentfloor.h
+usr/include/kysdk/applications/kuninstalldialog.h
+usr/include/kysdk/applications/kwidget.h
+usr/include/kysdk/applications/kwindowbuttonbar.h
+usr/include/kysdk/applications/parmscontroller.h
+usr/include/kysdk/applications/themeController.h
+usr/include/kysdk/applications/xatom-helper.h
+usr/include/kysdk/applications/accessinfohelper.h
 
 usr/lib/*/libkysdk-qtwidgets.so
diff -Nru libkysdk-applications-2.5.1.0/debian/libkysdk-qtwidgets.symbols libkysdk-applications-2.5.2.0/debian/libkysdk-qtwidgets.symbols
--- libkysdk-applications-2.5.1.0/debian/libkysdk-qtwidgets.symbols	2024-07-31 11:09:38.000000000 +0800
+++ libkysdk-applications-2.5.2.0/debian/libkysdk-qtwidgets.symbols	2025-03-17 13:09:05.000000000 +0800
@@ -1,16 +1,90 @@
-# SymbolsHelper-Confirmed: 2.2.1.0 amd64
+# SymbolsHelper-Confirmed: 2.5.2.0-0k0.2 amd64
 libkysdk-qtwidgets.so.1 libkysdk-qtwidgets #MINVER#
  _Z22qInitResources_sdk_resv@Base 2.2.1.0
  _Z25qCleanupResources_sdk_resv@Base 2.2.1.0
+ _ZN13KCustomTabBar10paintEventEP11QPaintEvent@Base 2.5.2.0-0k0.2
+ _ZN13KCustomTabBar10setMovableEb@Base 2.5.2.0-0k0.2
+ _ZN13KCustomTabBar10setTabDataEiRK8QVariant@Base 2.5.2.0-0k0.2
+ _ZN13KCustomTabBar10setTabIconEiRK5QIcon@Base 2.5.2.0-0k0.2
+ _ZN13KCustomTabBar10setTabTextEiRK7QString@Base 2.5.2.0-0k0.2
+ _ZN13KCustomTabBar10tabRemovedEi@Base 2.5.2.0-0k0.2
+ _ZN13KCustomTabBar10timerEventEP11QTimerEvent@Base 2.5.2.0-0k0.2
+ _ZN13KCustomTabBar10wheelEventEP11QWheelEvent@Base 2.5.2.0-0k0.2
+ _ZN13KCustomTabBar11changeEventEP6QEvent@Base 2.5.2.0-0k0.2
+ _ZN13KCustomTabBar11leftBStatusEb@Base 2.5.2.0-0k0.2
+ _ZN13KCustomTabBar11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.5.2.0-0k0.2
+ _ZN13KCustomTabBar11qt_metacastEPKc@Base 2.5.2.0-0k0.2
+ _ZN13KCustomTabBar11resizeEventEP12QResizeEvent@Base 2.5.2.0-0k0.2
+ _ZN13KCustomTabBar11setAutoHideEb@Base 2.5.2.0-0k0.2
+ _ZN13KCustomTabBar11setDrawBaseEb@Base 2.5.2.0-0k0.2
+ _ZN13KCustomTabBar11setIconSizeERK5QSize@Base 2.5.2.0-0k0.2
+ _ZN13KCustomTabBar11tabInsertedEi@Base 2.5.2.0-0k0.2
+ _ZN13KCustomTabBar12rightBStatusEb@Base 2.5.2.0-0k0.2
+ _ZN13KCustomTabBar12setElideModeEN2Qt13TextElideModeE@Base 2.5.2.0-0k0.2
+ _ZN13KCustomTabBar12setExpandingEb@Base 2.5.2.0-0k0.2
+ _ZN13KCustomTabBar12setTabButtonEiNS_14ButtonPositionEP7QWidget@Base 2.5.2.0-0k0.2
+ _ZN13KCustomTabBar13keyPressEventEP9QKeyEvent@Base 2.5.2.0-0k0.2
+ _ZN13KCustomTabBar13setTabContentEiRK7QString@Base 2.5.2.0-0k0.2
+ _ZN13KCustomTabBar13setTabEnabledEib@Base 2.5.2.0-0k0.2
+ _ZN13KCustomTabBar13setTabToolTipEiRK7QString@Base 2.5.2.0-0k0.2
+ _ZN13KCustomTabBar13tabBarClickedEi@Base 2.5.2.0-0k0.2
+ _ZN13KCustomTabBar14currentChangedEi@Base 2.5.2.0-0k0.2
+ _ZN13KCustomTabBar14leftScrollTabsEv@Base 2.5.2.0-0k0.2
+ _ZN13KCustomTabBar14mouseMoveEventEP11QMouseEvent@Base 2.5.2.0-0k0.2
+ _ZN13KCustomTabBar15mousePressEventEP11QMouseEvent@Base 2.5.2.0-0k0.2
+ _ZN13KCustomTabBar15rightScrollTabsEv@Base 2.5.2.0-0k0.2
+ _ZN13KCustomTabBar15setCurrentIndexEi@Base 2.5.2.0-0k0.2
+ _ZN13KCustomTabBar15setDocumentModeEb@Base 2.5.2.0-0k0.2
+ _ZN13KCustomTabBar15setTabTextColorEiRK6QColor@Base 2.5.2.0-0k0.2
+ _ZN13KCustomTabBar15setTabWhatsThisEiRK7QString@Base 2.5.2.0-0k0.2
+ _ZN13KCustomTabBar15setTabsClosableEb@Base 2.5.2.0-0k0.2
+ _ZN13KCustomTabBar15tabLayoutChangeEv@Base 2.5.2.0-0k0.2
+ _ZN13KCustomTabBar16staticMetaObjectE@Base 2.5.2.0-0k0.2
+ _ZN13KCustomTabBar17mouseReleaseEventEP11QMouseEvent@Base 2.5.2.0-0k0.2
+ _ZN13KCustomTabBar17tabCloseRequestedEi@Base 2.5.2.0-0k0.2
+ _ZN13KCustomTabBar19tabBarDoubleClickedEi@Base 2.5.2.0-0k0.2
+ _ZN13KCustomTabBar20setAccessibleTabNameEiRK7QString@Base 2.5.2.0-0k0.2
+ _ZN13KCustomTabBar20setUsesScrollButtonsEb@Base 2.5.2.0-0k0.2
+ _ZN13KCustomTabBar22setChangeCurrentOnDragEb@Base 2.5.2.0-0k0.2
+ _ZN13KCustomTabBar28setSelectionBehaviorOnRemoveENS_17SelectionBehaviorE@Base 2.5.2.0-0k0.2
+ _ZN13KCustomTabBar5eventEP6QEvent@Base 2.5.2.0-0k0.2
+ _ZN13KCustomTabBar6addTabERK5QIconRK7QString@Base 2.5.2.0-0k0.2
+ _ZN13KCustomTabBar6addTabERK7QString@Base 2.5.2.0-0k0.2
+ _ZN13KCustomTabBar7moveTabEii@Base 2.5.2.0-0k0.2
+ _ZN13KCustomTabBar8closeTabEv@Base 2.5.2.0-0k0.2
+ _ZN13KCustomTabBar8setShapeENS_5ShapeE@Base 2.5.2.0-0k0.2
+ _ZN13KCustomTabBar8tabMovedEii@Base 2.5.2.0-0k0.2
+ _ZN13KCustomTabBar9hideEventEP10QHideEvent@Base 2.5.2.0-0k0.2
+ _ZN13KCustomTabBar9insertTabEiRK5QIconRK7QString@Base 2.5.2.0-0k0.2
+ _ZN13KCustomTabBar9insertTabEiRK7QString@Base 2.5.2.0-0k0.2
+ _ZN13KCustomTabBar9removeTabEi@Base 2.5.2.0-0k0.2
+ _ZN13KCustomTabBar9showEventEP10QShowEvent@Base 2.5.2.0-0k0.2
+ _ZN13KCustomTabBarC1EP7QWidget@Base 2.5.2.0-0k0.2
+ _ZN13KCustomTabBarC2EP7QWidget@Base 2.5.2.0-0k0.2
+ _ZN13KCustomTabBarD0Ev@Base 2.5.2.0-0k0.2
+ _ZN13KCustomTabBarD1Ev@Base 2.5.2.0-0k0.2
+ _ZN13KCustomTabBarD2Ev@Base 2.5.2.0-0k0.2
  (optional=templinst)_ZN15QtSharedPointer34ExternalRefCountWithContiguousDataI17KWindowShadowTileE7deleterEPNS_20ExternalRefCountDataE@Base 2.0.0.0
  (optional=templinst)_ZN15QtSharedPointer34ExternalRefCountWithContiguousDataI17KWindowShadowTileE9noDeleterEPNS_20ExternalRefCountDataE@Base 2.0.0.0
+ _ZN15ThemeController10systemLangEv@Base 2.5.2.0-0k0.2
  _ZN15ThemeController11widgetThemeEv@Base 1.2.0.3
+ _ZN15ThemeController12overlayIconsERK5QIconS2_iiii@Base 2.5.2.0-0k0.2
+ _ZN15ThemeController14highlightClickEb8QPalette@Base 2.5.2.0-0k0.2
+ _ZN15ThemeController14highlightHoverEb8QPalette@Base 2.5.2.0-0k0.2
  _ZN15ThemeController14initThemeStyleEv@Base 1.2.0.3
+ _ZN15ThemeController14overlayPixmapsERK7QPixmapS2_ii@Base 2.5.2.0-0k0.2
  _ZN15ThemeController14systemFontSizeEv@Base 1.2.0.3
+ _ZN15ThemeController15buttonDarkClickEb8QPalette@Base 2.5.2.0-0k0.2
+ _ZN15ThemeController15lanhuHSLToQtHslEiiii@Base 2.5.2.0-0k0.2
  _ZN15ThemeController17drawColoredPixmapERK7QPixmapRK6QColor@Base 1.2.0.3
+ _ZN15ThemeController17isPixmapPureColorERK7QPixmap@Base 2.5.2.0-0k0.2
  _ZN15ThemeController19getCurrentIconColorEv@Base 1.2.0.3
  _ZN15ThemeController21drawFashionBackgroundERK5QRectiiii@Base 2.0.0.0
  _ZN15ThemeController25drawSymbolicColoredPixmapERK7QPixmap@Base 1.2.0.3
+ _ZN15ThemeController7adjustAE6QColori@Base 2.5.2.0-0k0.2
+ _ZN15ThemeController7adjustHE6QColori@Base 2.5.2.0-0k0.2
+ _ZN15ThemeController7adjustLE6QColori@Base 2.5.2.0-0k0.2
+ _ZN15ThemeController7adjustSE6QColori@Base 2.5.2.0-0k0.2
  _ZN15ThemeController8mixColorERK6QColorS2_d@Base 1.2.0.3
  _ZN15ThemeController9iconThemeEv@Base 1.2.0.3
  _ZN15ThemeController9themeModeEv@Base 1.2.0.3
@@ -22,12 +96,26 @@
  (optional=templinst)_ZN17QtMetaTypePrivate23QMetaTypeFunctionHelperIP15QAbstractButtonLb1EE9ConstructEPvPKv@Base 2.0.2.1
  (optional=templinst)_ZN17QtMetaTypePrivate23QMetaTypeFunctionHelperIP7QWidgetLb1EE8DestructEPv@Base 2.0.2.1
  (optional=templinst)_ZN17QtMetaTypePrivate23QMetaTypeFunctionHelperIP7QWidgetLb1EE9ConstructEPvPKv@Base 2.0.2.1
+ _ZN20KCustomTabBarPrivate9qGeomCalcER7QVectorI19QCustomLayoutStructEiiiii@Base 2.5.2.0-0k0.2
+ _ZN3kdk10FileDialog11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.5.2.0-0k0.2
+ _ZN3kdk10FileDialog11qt_metacastEPKc@Base 2.5.2.0-0k0.2
+ _ZN3kdk10FileDialog16staticMetaObjectE@Base 2.5.2.0-0k0.2
+ _ZN3kdk10FileDialog8goAcceptEv@Base 2.5.2.0-0k0.2
+ _ZN3kdk10FileDialog9showEventEP10QShowEvent@Base 2.5.2.0-0k0.2
+ _ZN3kdk10FileDialogC1EP7QWidget@Base 2.5.2.0-0k0.2
+ _ZN3kdk10FileDialogC2EP7QWidget@Base 2.5.2.0-0k0.2
+ _ZN3kdk10FileDialogD0Ev@Base 2.5.2.0-0k0.2
+ _ZN3kdk10FileDialogD1Ev@Base 2.5.2.0-0k0.2
+ _ZN3kdk10FileDialogD2Ev@Base 2.5.2.0-0k0.2
+ _ZN3kdk10KBallonTip10hBoxLayoutEv@Base 2.5.2.0-0k0.2
  _ZN3kdk10KBallonTip10paintEventEP11QPaintEvent@Base 1.2.0.3
  _ZN3kdk10KBallonTip10setTipTimeEi@Base 1.2.0.3
  _ZN3kdk10KBallonTip10setTipTypeERKNS_7TipTypeE@Base 1.2.0.3
  _ZN3kdk10KBallonTip11qt_metacallEN11QMetaObject4CallEiPPv@Base 1.2.0.3
  _ZN3kdk10KBallonTip11qt_metacastEPKc@Base 1.2.0.3
+ _ZN3kdk10KBallonTip12variableIconEv@Base 2.5.2.0-0k0.2
  _ZN3kdk10KBallonTip15onTimeupDestroyEv@Base 1.2.0.3
+ _ZN3kdk10KBallonTip15setVariableIconE5QIcon@Base 2.5.2.0-0k0.2
  _ZN3kdk10KBallonTip16staticMetaObjectE@Base 1.2.0.3
  _ZN3kdk10KBallonTip18setContentsMarginsERK8QMargins@Base 1.2.0.3
  _ZN3kdk10KBallonTip18setContentsMarginsEiiii@Base 1.2.0.3
@@ -61,14 +149,44 @@
  _ZN3kdk10KButtonBox2idEPNS_11KPushButtonE@Base 2.0.2.1
  _ZN3kdk10KButtonBox5setIdEPNS_11KPushButtonEi@Base 2.0.2.1
  _ZN3kdk10KButtonBox6buttonEi@Base 2.0.2.1
+ _ZN3kdk10KButtonBox6shadowEv@Base 2.5.2.0-0k0.2
  _ZN3kdk10KButtonBox9addButtonEPNS_11KPushButtonEi@Base 2.0.2.1
  _ZN3kdk10KButtonBox9checkedIdEv@Base 2.0.2.1
  _ZN3kdk10KButtonBox9exclusiveEv@Base 2.0.2.1
+ _ZN3kdk10KButtonBox9setShadowEb@Base 2.5.2.0-0k0.2
  _ZN3kdk10KButtonBoxC1EP7QWidget@Base 2.0.2.1
  _ZN3kdk10KButtonBoxC2EP7QWidget@Base 2.0.2.1
  _ZN3kdk10KButtonBoxD0Ev@Base 2.0.2.1
  _ZN3kdk10KButtonBoxD1Ev@Base 2.0.2.1
  _ZN3kdk10KButtonBoxD2Ev@Base 2.0.2.1
+ _ZN3kdk10KDirTabBar10textLengthEv@Base 2.5.2.0-0k0.2
+ _ZN3kdk10KDirTabBar11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.5.2.0-0k0.2
+ _ZN3kdk10KDirTabBar11qt_metacastEPKc@Base 2.5.2.0-0k0.2
+ _ZN3kdk10KDirTabBar12visibleDepthEv@Base 2.5.2.0-0k0.2
+ _ZN3kdk10KDirTabBar13setTextLengthEi@Base 2.5.2.0-0k0.2
+ _ZN3kdk10KDirTabBar13tabBarClickedE7QString@Base 2.5.2.0-0k0.2
+ _ZN3kdk10KDirTabBar14setCurrentPathE7QString@Base 2.5.2.0-0k0.2
+ _ZN3kdk10KDirTabBar15setVisibleDepthEi@Base 2.5.2.0-0k0.2
+ _ZN3kdk10KDirTabBar16staticMetaObjectE@Base 2.5.2.0-0k0.2
+ _ZN3kdk10KDirTabBar4iconEi@Base 2.5.2.0-0k0.2
+ _ZN3kdk10KDirTabBar7buttonsEv@Base 2.5.2.0-0k0.2
+ _ZN3kdk10KDirTabBar7setIconEiRK5QIcon@Base 2.5.2.0-0k0.2
+ _ZN3kdk10KDirTabBarC1EP7QWidget@Base 2.5.2.0-0k0.2
+ _ZN3kdk10KDirTabBarC2EP7QWidget@Base 2.5.2.0-0k0.2
+ _ZN3kdk10KDirTabBarD0Ev@Base 2.5.2.0-0k0.2
+ _ZN3kdk10KDirTabBarD1Ev@Base 2.5.2.0-0k0.2
+ _ZN3kdk10KDirTabBarD2Ev@Base 2.5.2.0-0k0.2
+ _ZN3kdk10KTableView10headerViewEv@Base 2.5.2.0-0k0.2
+ _ZN3kdk10KTableView10selectListEv@Base 2.5.2.0-0k0.2
+ _ZN3kdk10KTableView11eventFilterEP7QObjectP6QEvent@Base 2.5.2.0-0k0.2
+ _ZN3kdk10KTableView11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.5.2.0-0k0.2
+ _ZN3kdk10KTableView11qt_metacastEPKc@Base 2.5.2.0-0k0.2
+ _ZN3kdk10KTableView14mouseMoveEventEP11QMouseEvent@Base 2.5.2.0-0k0.2
+ _ZN3kdk10KTableView16staticMetaObjectE@Base 2.5.2.0-0k0.2
+ _ZN3kdk10KTableView17hoverIndexChangedE11QModelIndex@Base 2.5.2.0-0k0.2
+ _ZN3kdk10KTableView18setHorizontalTitleE11QStringList@Base 2.5.2.0-0k0.2
+ _ZN3kdk10KTableViewC1EP7QWidget@Base 2.5.2.0-0k0.2
+ _ZN3kdk10KTableViewC2EP7QWidget@Base 2.5.2.0-0k0.2
  _ZN3kdk10StarWidget7doFreshEv@Base 1.2.0.3
  _ZN3kdk10StarWidget8setGradeENS_9StarLevelE@Base 1.2.0.3
  _ZN3kdk10StarWidgetC1EP7QWidget@Base 1.2.0.3
@@ -81,8 +199,53 @@
  _ZN3kdk11KBreadCrumb7setIconERK5QIcon@Base 1.2.0.3
  _ZN3kdk11KBreadCrumbC1EP7QWidget@Base 1.2.0.3
  _ZN3kdk11KBreadCrumbC2EP7QWidget@Base 1.2.0.3
+ _ZN3kdk11KClockTimer11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.5.2.0-0k0.2
+ _ZN3kdk11KClockTimer11qt_metacastEPKc@Base 2.5.2.0-0k0.2
+ _ZN3kdk11KClockTimer13stopStopwatchEv@Base 2.5.2.0-0k0.2
+ _ZN3kdk11KClockTimer14resetStopwatchEv@Base 2.5.2.0-0k0.2
+ _ZN3kdk11KClockTimer14startStopwatchEv@Base 2.5.2.0-0k0.2
+ _ZN3kdk11KClockTimer16staticMetaObjectE@Base 2.5.2.0-0k0.2
+ _ZN3kdk11KClockTimer4timeEv@Base 2.5.2.0-0k0.2
+ _ZN3kdk11KClockTimerC1EP7QWidget@Base 2.5.2.0-0k0.2
+ _ZN3kdk11KClockTimerC2EP7QWidget@Base 2.5.2.0-0k0.2
+ _ZN3kdk11KDragWidget10fileDialogEv@Base 2.5.2.0-0k0.2
+ _ZN3kdk11KDragWidget10iconButtonEv@Base 2.5.2.0-0k0.2
+ _ZN3kdk11KDragWidget10paintEventEP11QPaintEvent@Base 2.5.2.0-0k0.2
+ _ZN3kdk11KDragWidget11eventFilterEP7QObjectP6QEvent@Base 2.5.2.0-0k0.2
+ _ZN3kdk11KDragWidget11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.5.2.0-0k0.2
+ _ZN3kdk11KDragWidget11qt_metacastEPKc@Base 2.5.2.0-0k0.2
+ _ZN3kdk11KDragWidget13dragMoveEventEP14QDragMoveEvent@Base 2.5.2.0-0k0.2
+ _ZN3kdk11KDragWidget13keyPressEventEP9QKeyEvent@Base 2.5.2.0-0k0.2
+ _ZN3kdk11KDragWidget13setNameFilterERK7QString@Base 2.5.2.0-0k0.2
+ _ZN3kdk11KDragWidget14dragEnterEventEP15QDragEnterEvent@Base 2.5.2.0-0k0.2
+ _ZN3kdk11KDragWidget14dragLeaveEventEP15QDragLeaveEvent@Base 2.5.2.0-0k0.2
+ _ZN3kdk11KDragWidget14mouseMoveEventEP11QMouseEvent@Base 2.5.2.0-0k0.2
+ _ZN3kdk11KDragWidget14setNameFiltersERK11QStringList@Base 2.5.2.0-0k0.2
+ _ZN3kdk11KDragWidget15keyReleaseEventEP9QKeyEvent@Base 2.5.2.0-0k0.2
+ _ZN3kdk11KDragWidget15mousePressEventEP11QMouseEvent@Base 2.5.2.0-0k0.2
+ _ZN3kdk11KDragWidget16staticMetaObjectE@Base 2.5.2.0-0k0.2
+ _ZN3kdk11KDragWidget17mouseReleaseEventEP11QMouseEvent@Base 2.5.2.0-0k0.2
+ _ZN3kdk11KDragWidget7getPathE7QString@Base 2.5.2.0-0k0.2
+ _ZN3kdk11KDragWidget9dropEventEP10QDropEvent@Base 2.5.2.0-0k0.2
+ _ZN3kdk11KDragWidget9textLabelEv@Base 2.5.2.0-0k0.2
+ _ZN3kdk11KDragWidgetC1EP7QWidget@Base 2.5.2.0-0k0.2
+ _ZN3kdk11KDragWidgetC2EP7QWidget@Base 2.5.2.0-0k0.2
+ _ZN3kdk11KFileWidget10paintEventEP11QPaintEvent@Base 2.5.2.0-0k0.2
+ _ZN3kdk11KFileWidget10setSubTextE7QString@Base 2.5.2.0-0k0.2
+ _ZN3kdk11KFileWidget11eventFilterEP7QObjectP6QEvent@Base 2.5.2.0-0k0.2
+ _ZN3kdk11KFileWidget11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.5.2.0-0k0.2
+ _ZN3kdk11KFileWidget11qt_metacastEPKc@Base 2.5.2.0-0k0.2
+ _ZN3kdk11KFileWidget11setMainTextE7QString@Base 2.5.2.0-0k0.2
+ _ZN3kdk11KFileWidget15setBorderRadiusEi@Base 2.5.2.0-0k0.2
+ _ZN3kdk11KFileWidget15setBorderRadiusEiiii@Base 2.5.2.0-0k0.2
+ _ZN3kdk11KFileWidget16staticMetaObjectE@Base 2.5.2.0-0k0.2
+ _ZN3kdk11KFileWidget7clickedEv@Base 2.5.2.0-0k0.2
+ _ZN3kdk11KFileWidget7setIconE5QIcon@Base 2.5.2.0-0k0.2
+ _ZN3kdk11KFileWidgetC1EP7QWidget@Base 2.5.2.0-0k0.2
+ _ZN3kdk11KFileWidgetC2EP7QWidget@Base 2.5.2.0-0k0.2
  _ZN3kdk11KHLineFrame11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.2.1
  _ZN3kdk11KHLineFrame11qt_metacastEPKc@Base 2.0.2.1
+ _ZN3kdk11KHLineFrame16setFollowPaletteEb@Base 2.5.2.0-0k0.2
  _ZN3kdk11KHLineFrame16staticMetaObjectE@Base 2.0.2.1
  _ZN3kdk11KHLineFrameC1EP7QWidget@Base 2.0.2.1
  _ZN3kdk11KHLineFrameC2EP7QWidget@Base 2.0.2.1
@@ -116,6 +279,7 @@
  _ZN3kdk11KMenuButton11themeActionEv@Base 1.2.0.3
  _ZN3kdk11KMenuButton12assistActionEv@Base 1.2.0.3
  _ZN3kdk11KMenuButton13settingActionEv@Base 1.2.0.3
+ _ZN3kdk11KMenuButton14feedbackActionEv@Base 2.5.2.0-0k0.2
  _ZN3kdk11KMenuButton16staticMetaObjectE@Base 1.2.0.3
  _ZN3kdk11KMenuButton4menuEv@Base 1.2.0.3
  _ZN3kdk11KMenuButton9themeMenuEv@Base 1.2.0.3
@@ -167,29 +331,51 @@
  _ZN3kdk11KPushButton15isIconHighlightEv@Base 2.0.0.0
  _ZN3kdk11KPushButton15setBorderRadiusEi@Base 2.0.0.0
  _ZN3kdk11KPushButton15setBorderRadiusEiiii@Base 2.0.0.0
+ _ZN3kdk11KPushButton15setLoaingStatusEb@Base 2.5.2.0-0k0.2
  _ZN3kdk11KPushButton16setIconHighlightEb@Base 2.0.0.0
  _ZN3kdk11KPushButton16staticMetaObjectE@Base 2.0.0.0
  _ZN3kdk11KPushButton18setBackgroundColorE6QColor@Base 2.0.0.0
  _ZN3kdk11KPushButton26isBackgroundColorHighlightEv@Base 2.0.0.0
  _ZN3kdk11KPushButton27setBackgroundColorHighlightEb@Base 2.0.0.0
+ _ZN3kdk11KPushButton8setArrowEbNS0_14ArrowDirectionE@Base 2.5.2.0-0k0.2
  _ZN3kdk11KPushButton9IconColorEv@Base 2.0.0.0
+ _ZN3kdk11KPushButton9isLoadingEv@Base 2.5.2.0-0k0.2
  _ZN3kdk11KPushButtonC1EP7QWidget@Base 2.0.0.0
  _ZN3kdk11KPushButtonC2EP7QWidget@Base 2.0.0.0
  _ZN3kdk11KPushButtonD0Ev@Base 2.0.0.0
  _ZN3kdk11KPushButtonD1Ev@Base 2.0.0.0
  _ZN3kdk11KPushButtonD2Ev@Base 2.0.0.0
+ _ZN3kdk11KTableModel11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.5.2.0-0k0.2
+ _ZN3kdk11KTableModel11qt_metacastEPKc@Base 2.5.2.0-0k0.2
+ _ZN3kdk11KTableModel16staticMetaObjectE@Base 2.5.2.0-0k0.2
+ _ZN3kdk11KTableModelC1EP7QObject@Base 2.5.2.0-0k0.2
+ _ZN3kdk11KTableModelC2EP7QObject@Base 2.5.2.0-0k0.2
  _ZN3kdk11KTagPrivate11changeThemeEv@Base 1.2.0.3
  _ZN3kdk11KTagPrivate11qt_metacallEN11QMetaObject4CallEiPPv@Base 1.2.0.3
  _ZN3kdk11KTagPrivate11qt_metacastEPKc@Base 1.2.0.3
  _ZN3kdk11KTagPrivate16staticMetaObjectE@Base 1.2.0.3
+ _ZN3kdk11KTagPrivate20updateDeleteBtnColorEv@Base 2.5.2.0-0k0.2
  _ZN3kdk11KTagPrivateC1EPNS_4KTagE@Base 1.2.0.3
  _ZN3kdk11KTagPrivateC2EPNS_4KTagE@Base 1.2.0.3
+ _ZN3kdk11KTextEditor10paintEventEP11QPaintEvent@Base 2.5.2.0-0k0.2
+ _ZN3kdk11KTextEditor11eventFilterEP7QObjectP6QEvent@Base 2.5.2.0-0k0.2
+ _ZN3kdk11KTextEditor11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.5.2.0-0k0.2
+ _ZN3kdk11KTextEditor11qt_metacastEPKc@Base 2.5.2.0-0k0.2
+ _ZN3kdk11KTextEditor16staticMetaObjectE@Base 2.5.2.0-0k0.2
+ _ZN3kdk11KTextEditor8textEditEv@Base 2.5.2.0-0k0.2
+ _ZN3kdk11KTextEditorC1EP7QWidget@Base 2.5.2.0-0k0.2
+ _ZN3kdk11KTextEditorC2EP7QWidget@Base 2.5.2.0-0k0.2
  _ZN3kdk11KToolButton10paintEventEP11QPaintEvent@Base 1.2.0.3
  _ZN3kdk11KToolButton10setLoadingEb@Base 1.2.0.3
  _ZN3kdk11KToolButton11eventFilterEP7QObjectP6QEvent@Base 1.2.0.3
  _ZN3kdk11KToolButton11qt_metacallEN11QMetaObject4CallEiPPv@Base 1.2.0.3
  _ZN3kdk11KToolButton11qt_metacastEPKc@Base 1.2.0.3
+ _ZN3kdk11KToolButton12setIconColorEb6QColor@Base 2.5.2.0-0k0.2
+ _ZN3kdk11KToolButton14checkedChangedEb@Base 2.5.2.0-0k0.2
+ _ZN3kdk11KToolButton15setBorderRadiusEiiii@Base 2.5.2.0-0k0.2
  _ZN3kdk11KToolButton16staticMetaObjectE@Base 1.2.0.3
+ _ZN3kdk11KToolButton22backgroundColorEnabledEv@Base 2.5.2.0-0k0.2
+ _ZN3kdk11KToolButton25setBackgroundColorEnabledEb@Base 2.5.2.0-0k0.2
  _ZN3kdk11KToolButton4iconEv@Base 1.2.0.3
  _ZN3kdk11KToolButton4typeEv@Base 1.2.0.3
  _ZN3kdk11KToolButton7setIconERK5QIcon@Base 1.2.0.3
@@ -200,6 +386,7 @@
  _ZN3kdk11KToolButtonC2EP7QWidget@Base 1.2.0.3
  _ZN3kdk11KVLineFrame11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.2.1
  _ZN3kdk11KVLineFrame11qt_metacastEPKc@Base 2.0.2.1
+ _ZN3kdk11KVLineFrame16setFollowPaletteEb@Base 2.5.2.0-0k0.2
  _ZN3kdk11KVLineFrame16staticMetaObjectE@Base 2.0.2.1
  _ZN3kdk11KVLineFrameC1EP7QWidget@Base 2.0.2.1
  _ZN3kdk11KVLineFrameC2EP7QWidget@Base 2.0.2.1
@@ -225,6 +412,12 @@
  _ZN3kdk11XAtomHelper35isWindowMotifHintDecorateBorderOnlyERK12MotifWmHints@Base 1.2.0.3
  _ZN3kdk11XAtomHelperC1EP7QObject@Base 1.2.0.3
  _ZN3kdk11XAtomHelperC2EP7QObject@Base 1.2.0.3
+ _ZN3kdk12CustomButton10paintEventEP11QPaintEvent@Base 2.5.2.0-0k0.2
+ _ZN3kdk12CustomButton11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.5.2.0-0k0.2
+ _ZN3kdk12CustomButton11qt_metacastEPKc@Base 2.5.2.0-0k0.2
+ _ZN3kdk12CustomButton16staticMetaObjectE@Base 2.5.2.0-0k0.2
+ _ZN3kdk12CustomButtonC1EP7QWidget@Base 2.5.2.0-0k0.2
+ _ZN3kdk12CustomButtonC2EP7QWidget@Base 2.5.2.0-0k0.2
  _ZN3kdk12KAboutDialog10appSupportEv@Base 1.2.0.3
  _ZN3kdk12KAboutDialog10appVersionEv@Base 1.2.0.3
  _ZN3kdk12KAboutDialog10paintEventEP11QPaintEvent@Base 1.2.0.3
@@ -247,6 +440,14 @@
  _ZN3kdk12KAboutDialogD0Ev@Base 1.2.0.3
  _ZN3kdk12KAboutDialogD1Ev@Base 1.2.0.3
  _ZN3kdk12KAboutDialogD2Ev@Base 1.2.0.3
+ _ZN3kdk12KArrowTabBar10sizeChangeEv@Base 2.5.2.0-0k0.2
+ _ZN3kdk12KArrowTabBar11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.5.2.0-0k0.2
+ _ZN3kdk12KArrowTabBar11qt_metacastEPKc@Base 2.5.2.0-0k0.2
+ _ZN3kdk12KArrowTabBar11resizeEventEP12QResizeEvent@Base 2.5.2.0-0k0.2
+ _ZN3kdk12KArrowTabBar16staticMetaObjectE@Base 2.5.2.0-0k0.2
+ _ZN3kdk12KArrowTabBar6tabbarEv@Base 2.5.2.0-0k0.2
+ _ZN3kdk12KArrowTabBarC1EP7QWidget@Base 2.5.2.0-0k0.2
+ _ZN3kdk12KArrowTabBarC2EP7QWidget@Base 2.5.2.0-0k0.2
  _ZN3kdk12KColorButton10paintEventEP11QPaintEvent@Base 2.0.2.1
  _ZN3kdk12KColorButton11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.2.1
  _ZN3kdk12KColorButton11qt_metacastEPKc@Base 2.0.2.1
@@ -302,6 +503,22 @@
  _ZN3kdk12KInputDialogD0Ev@Base 1.2.0.3
  _ZN3kdk12KInputDialogD1Ev@Base 1.2.0.3
  _ZN3kdk12KInputDialogD2Ev@Base 1.2.0.3
+ _ZN3kdk12KIntroWidget10paintEventEP11QPaintEvent@Base 2.5.2.0-0k0.2
+ _ZN3kdk12KIntroWidget10rightClickE6QPoint@Base 2.5.2.0-0k0.2
+ _ZN3kdk12KIntroWidget11eventFilterEP7QObjectP6QEvent@Base 2.5.2.0-0k0.2
+ _ZN3kdk12KIntroWidget11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.5.2.0-0k0.2
+ _ZN3kdk12KIntroWidget11qt_metacastEPKc@Base 2.5.2.0-0k0.2
+ _ZN3kdk12KIntroWidget11setSubLabelE7QString@Base 2.5.2.0-0k0.2
+ _ZN3kdk12KIntroWidget11setViewTypeENS_8ViewTypeE@Base 2.5.2.0-0k0.2
+ _ZN3kdk12KIntroWidget12setMainLabelE7QString@Base 2.5.2.0-0k0.2
+ _ZN3kdk12KIntroWidget13setTitleColorE6QColor@Base 2.5.2.0-0k0.2
+ _ZN3kdk12KIntroWidget15mousePressEventEP11QMouseEvent@Base 2.5.2.0-0k0.2
+ _ZN3kdk12KIntroWidget15setBorderRadiusEi@Base 2.5.2.0-0k0.2
+ _ZN3kdk12KIntroWidget15setBorderRadiusEiiii@Base 2.5.2.0-0k0.2
+ _ZN3kdk12KIntroWidget16staticMetaObjectE@Base 2.5.2.0-0k0.2
+ _ZN3kdk12KIntroWidget17mouseReleaseEventEP11QMouseEvent@Base 2.5.2.0-0k0.2
+ _ZN3kdk12KIntroWidgetC1EP7QWidget@Base 2.5.2.0-0k0.2
+ _ZN3kdk12KIntroWidgetC2EP7QWidget@Base 2.5.2.0-0k0.2
  _ZN3kdk12KPressButton10buttonTypeEv@Base 2.0.0.0
  _ZN3kdk12KPressButton10paintEventEP11QPaintEvent@Base 2.0.0.0
  _ZN3kdk12KPressButton10setCheckedEb@Base 2.0.0.0
@@ -321,13 +538,43 @@
  _ZN3kdk12KProgressBar10paintEventEP11QPaintEvent@Base 1.2.0.3
  _ZN3kdk12KProgressBar11qt_metacallEN11QMetaObject4CallEiPPv@Base 1.2.0.3
  _ZN3kdk12KProgressBar11qt_metacastEPKc@Base 1.2.0.3
+ _ZN3kdk12KProgressBar12setAnimationEb@Base 2.5.2.0-0k0.2
  _ZN3kdk12KProgressBar12setBodyWidthEi@Base 2.0.2.1
+ _ZN3kdk12KProgressBar12setFillColorE6QColor@Base 2.5.2.0-0k0.2
+ _ZN3kdk12KProgressBar12setGradationEb@Base 2.5.2.0-0k0.2
  _ZN3kdk12KProgressBar14setOrientationEN2Qt11OrientationE@Base 1.2.0.3
  _ZN3kdk12KProgressBar16staticMetaObjectE@Base 1.2.0.3
+ _ZN3kdk12KProgressBar17setGradationColorE6QColorS1_@Base 2.5.2.0-0k0.2
+ _ZN3kdk12KProgressBar18setBackgroundColorE6QColor@Base 2.5.2.0-0k0.2
  _ZN3kdk12KProgressBar5stateEv@Base 1.2.0.3
  _ZN3kdk12KProgressBar8setStateENS_16ProgressBarStateE@Base 1.2.0.3
+ _ZN3kdk12KProgressBar9animationEv@Base 2.5.2.0-0k0.2
+ _ZN3kdk12KProgressBar9gradationEv@Base 2.5.2.0-0k0.2
  _ZN3kdk12KProgressBarC1EP7QWidget@Base 1.2.0.3
  _ZN3kdk12KProgressBarC2EP7QWidget@Base 1.2.0.3
+ _ZN3kdk12KTitleWindow10baseWidgetEv@Base 2.5.2.0-0k0.2
+ _ZN3kdk12KTitleWindow10menuButtonEv@Base 2.5.2.0-0k0.2
+ _ZN3kdk12KTitleWindow10paintEventEP11QPaintEvent@Base 2.5.2.0-0k0.2
+ _ZN3kdk12KTitleWindow11colorButtonEv@Base 2.5.2.0-0k0.2
+ _ZN3kdk12KTitleWindow11eventFilterEP7QObjectP6QEvent@Base 2.5.2.0-0k0.2
+ _ZN3kdk12KTitleWindow11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.5.2.0-0k0.2
+ _ZN3kdk12KTitleWindow11qt_metacastEPKc@Base 2.5.2.0-0k0.2
+ _ZN3kdk12KTitleWindow11resizeEventEP12QResizeEvent@Base 2.5.2.0-0k0.2
+ _ZN3kdk12KTitleWindow13setTitleColorE6QColor@Base 2.5.2.0-0k0.2
+ _ZN3kdk12KTitleWindow16staticMetaObjectE@Base 2.5.2.0-0k0.2
+ _ZN3kdk12KTitleWindow9addButtonEv@Base 2.5.2.0-0k0.2
+ _ZN3kdk12KTitleWindowC1EP7QWidget@Base 2.5.2.0-0k0.2
+ _ZN3kdk12KTitleWindowC2EP7QWidget@Base 2.5.2.0-0k0.2
+ _ZN3kdk13AddFileDialog11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.5.2.0-0k0.2
+ _ZN3kdk13AddFileDialog11qt_metacastEPKc@Base 2.5.2.0-0k0.2
+ _ZN3kdk13AddFileDialog16staticMetaObjectE@Base 2.5.2.0-0k0.2
+ _ZN3kdk13AddFileDialog8goAcceptEv@Base 2.5.2.0-0k0.2
+ _ZN3kdk13AddFileDialog9showEventEP10QShowEvent@Base 2.5.2.0-0k0.2
+ _ZN3kdk13AddFileDialogC1EP7QWidget@Base 2.5.2.0-0k0.2
+ _ZN3kdk13AddFileDialogC2EP7QWidget@Base 2.5.2.0-0k0.2
+ _ZN3kdk13AddFileDialogD0Ev@Base 2.5.2.0-0k0.2
+ _ZN3kdk13AddFileDialogD1Ev@Base 2.5.2.0-0k0.2
+ _ZN3kdk13AddFileDialogD2Ev@Base 2.5.2.0-0k0.2
  _ZN3kdk13KBadgePrivate11qt_metacallEN11QMetaObject4CallEiPPv@Base 1.2.0.3
  _ZN3kdk13KBadgePrivate11qt_metacastEPKc@Base 1.2.0.3
  _ZN3kdk13KBadgePrivate16staticMetaObjectE@Base 1.2.0.3
@@ -361,6 +608,7 @@
  _ZN3kdk13KBubbleWidget15setBorderRadiusEiiii@Base 2.0.0.0
  _ZN3kdk13KBubbleWidget15setTailPositionENS_13TailDirectionENS_12TailLocationE@Base 2.0.0.0
  _ZN3kdk13KBubbleWidget16staticMetaObjectE@Base 2.0.0.0
+ _ZN3kdk13KBubbleWidget22setHighlightBackgroundEb@Base 2.5.2.0-0k0.2
  _ZN3kdk13KBubbleWidget7opacityEv@Base 2.0.0.0
  _ZN3kdk13KBubbleWidget8tailSizeEv@Base 2.0.0.0
  _ZN3kdk13KBubbleWidgetC1EP7QWidget@Base 2.0.0.0
@@ -376,6 +624,44 @@
  _ZN3kdk13KCommentPanel8setGradeENS_9StarLevelE@Base 1.2.0.3
  _ZN3kdk13KCommentPanelC1EP7QWidget@Base 1.2.0.3
  _ZN3kdk13KCommentPanelC2EP7QWidget@Base 1.2.0.3
+ _ZN3kdk13KLabelPrivate11changeThemeEv@Base 2.5.2.0-0k0.2
+ _ZN3kdk13KLabelPrivate11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.5.2.0-0k0.2
+ _ZN3kdk13KLabelPrivate11qt_metacastEPKc@Base 2.5.2.0-0k0.2
+ _ZN3kdk13KLabelPrivate16staticMetaObjectE@Base 2.5.2.0-0k0.2
+ _ZN3kdk13KLabelPrivateC1EPNS_6KLabelE@Base 2.5.2.0-0k0.2
+ _ZN3kdk13KLabelPrivateC2EPNS_6KLabelE@Base 2.5.2.0-0k0.2
+ _ZN3kdk13KLoopPlayPage10paintEventEP11QPaintEvent@Base 2.5.2.0-0k0.2
+ _ZN3kdk13KLoopPlayPage10rightClickEv@Base 2.5.2.0-0k0.2
+ _ZN3kdk13KLoopPlayPage11centerClickEv@Base 2.5.2.0-0k0.2
+ _ZN3kdk13KLoopPlayPage11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.5.2.0-0k0.2
+ _ZN3kdk13KLoopPlayPage11qt_metacastEPKc@Base 2.5.2.0-0k0.2
+ _ZN3kdk13KLoopPlayPage11resizeEventEP12QResizeEvent@Base 2.5.2.0-0k0.2
+ _ZN3kdk13KLoopPlayPage11setLoopTimeEi@Base 2.5.2.0-0k0.2
+ _ZN3kdk13KLoopPlayPage12removeWidgetEP7QWidget@Base 2.5.2.0-0k0.2
+ _ZN3kdk13KLoopPlayPage13currentWidgetEv@Base 2.5.2.0-0k0.2
+ _ZN3kdk13KLoopPlayPage16setCurrentWidgetEi@Base 2.5.2.0-0k0.2
+ _ZN3kdk13KLoopPlayPage16setWidgetSpacingEi@Base 2.5.2.0-0k0.2
+ _ZN3kdk13KLoopPlayPage16staticMetaObjectE@Base 2.5.2.0-0k0.2
+ _ZN3kdk13KLoopPlayPage9addWidgetEP7QWidget@Base 2.5.2.0-0k0.2
+ _ZN3kdk13KLoopPlayPage9leftClickEv@Base 2.5.2.0-0k0.2
+ _ZN3kdk13KLoopPlayPage9showEventEP10QShowEvent@Base 2.5.2.0-0k0.2
+ _ZN3kdk13KLoopPlayPageC1EP7QWidget@Base 2.5.2.0-0k0.2
+ _ZN3kdk13KLoopPlayPageC2EP7QWidget@Base 2.5.2.0-0k0.2
+ _ZN3kdk13KNativeTabbar10paintEventEP11QPaintEvent@Base 2.5.2.0-0k0.2
+ _ZN3kdk13KNativeTabbar11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.5.2.0-0k0.2
+ _ZN3kdk13KNativeTabbar11qt_metacastEPKc@Base 2.5.2.0-0k0.2
+ _ZN3kdk13KNativeTabbar11rightlickedE6QPoint@Base 2.5.2.0-0k0.2
+ _ZN3kdk13KNativeTabbar12borderRadiusEv@Base 2.5.2.0-0k0.2
+ _ZN3kdk13KNativeTabbar14setTabbarStyleENS_18KNativeTabbarStyleE@Base 2.5.2.0-0k0.2
+ _ZN3kdk13KNativeTabbar15setBorderRadiusEi@Base 2.5.2.0-0k0.2
+ _ZN3kdk13KNativeTabbar16staticMetaObjectE@Base 2.5.2.0-0k0.2
+ _ZN3kdk13KNativeTabbar18setBackgroundColorERK6QColor@Base 2.5.2.0-0k0.2
+ _ZN3kdk13KNativeTabbar8barStyleEv@Base 2.5.2.0-0k0.2
+ _ZN3kdk13KNativeTabbarC1ENS_18KNativeTabbarStyleEP7QWidget@Base 2.5.2.0-0k0.2
+ _ZN3kdk13KNativeTabbarC2ENS_18KNativeTabbarStyleEP7QWidget@Base 2.5.2.0-0k0.2
+ _ZN3kdk13KNativeTabbarD0Ev@Base 2.5.2.0-0k0.2
+ _ZN3kdk13KNativeTabbarD1Ev@Base 2.5.2.0-0k0.2
+ _ZN3kdk13KNativeTabbarD2Ev@Base 2.5.2.0-0k0.2
  _ZN3kdk13KPasswordEdit10setEnabledEb@Base 1.2.0.3
  _ZN3kdk13KPasswordEdit10setLoadingEb@Base 1.2.0.3
  _ZN3kdk13KPasswordEdit11eventFilterEP7QObjectP6QEvent@Base 1.2.0.3
@@ -412,6 +698,20 @@
  _ZN3kdk13KSwitchButtonD0Ev@Base 1.2.0.3
  _ZN3kdk13KSwitchButtonD1Ev@Base 1.2.0.3
  _ZN3kdk13KSwitchButtonD2Ev@Base 1.2.0.3
+ _ZN3kdk14KAddFileButton10fileDialogEv@Base 2.5.2.0-0k0.2
+ _ZN3kdk14KAddFileButton10paintEventEP11QPaintEvent@Base 2.5.2.0-0k0.2
+ _ZN3kdk14KAddFileButton11eventFilterEP7QObjectP6QEvent@Base 2.5.2.0-0k0.2
+ _ZN3kdk14KAddFileButton11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.5.2.0-0k0.2
+ _ZN3kdk14KAddFileButton11qt_metacastEPKc@Base 2.5.2.0-0k0.2
+ _ZN3kdk14KAddFileButton13setNameFilterERK7QString@Base 2.5.2.0-0k0.2
+ _ZN3kdk14KAddFileButton14mouseMoveEventEP11QMouseEvent@Base 2.5.2.0-0k0.2
+ _ZN3kdk14KAddFileButton14setNameFiltersERK11QStringList@Base 2.5.2.0-0k0.2
+ _ZN3kdk14KAddFileButton15mousePressEventEP11QMouseEvent@Base 2.5.2.0-0k0.2
+ _ZN3kdk14KAddFileButton16staticMetaObjectE@Base 2.5.2.0-0k0.2
+ _ZN3kdk14KAddFileButton17mouseReleaseEventEP11QMouseEvent@Base 2.5.2.0-0k0.2
+ _ZN3kdk14KAddFileButton7setTextE7QString@Base 2.5.2.0-0k0.2
+ _ZN3kdk14KAddFileButtonC1EP7QWidget@Base 2.5.2.0-0k0.2
+ _ZN3kdk14KAddFileButtonC2EP7QWidget@Base 2.5.2.0-0k0.2
  _ZN3kdk14KColorComboBox10paintEventEP11QPaintEvent@Base 2.0.2.1
  _ZN3kdk14KColorComboBox11highlightedERK6QColor@Base 2.0.2.1
  _ZN3kdk14KColorComboBox11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.2.1
@@ -434,6 +734,18 @@
  _ZN3kdk14KDialogPrivate16staticMetaObjectE@Base 1.2.0.3
  _ZN3kdk14KDialogPrivateC1EPNS_7KDialogE@Base 1.2.0.3
  _ZN3kdk14KDialogPrivateC2EPNS_7KDialogE@Base 1.2.0.3
+ _ZN3kdk14KLunarDateEdit11dateChangedE5QDate@Base 2.5.2.0-0k0.2
+ _ZN3kdk14KLunarDateEdit11getDateEditEv@Base 2.5.2.0-0k0.2
+ _ZN3kdk14KLunarDateEdit11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.5.2.0-0k0.2
+ _ZN3kdk14KLunarDateEdit11qt_metacastEPKc@Base 2.5.2.0-0k0.2
+ _ZN3kdk14KLunarDateEdit11resizeEventEP12QResizeEvent@Base 2.5.2.0-0k0.2
+ _ZN3kdk14KLunarDateEdit11slotClickedEv@Base 2.5.2.0-0k0.2
+ _ZN3kdk14KLunarDateEdit12setShowLunarEb@Base 2.5.2.0-0k0.2
+ _ZN3kdk14KLunarDateEdit15slotDateChangedE5QDate@Base 2.5.2.0-0k0.2
+ _ZN3kdk14KLunarDateEdit16staticMetaObjectE@Base 2.5.2.0-0k0.2
+ _ZN3kdk14KLunarDateEdit18slotPaletteChangedEv@Base 2.5.2.0-0k0.2
+ _ZN3kdk14KLunarDateEditC1EP7QWidget@Base 2.5.2.0-0k0.2
+ _ZN3kdk14KLunarDateEditC2EP7QWidget@Base 2.5.2.0-0k0.2
  _ZN3kdk14KNavigationBar10addSubItemEP13QStandardItem@Base 1.2.0.3
  _ZN3kdk14KNavigationBar11qt_metacallEN11QMetaObject4CallEiPPv@Base 1.2.0.3
  _ZN3kdk14KNavigationBar11qt_metacastEPKc@Base 1.2.0.3
@@ -445,6 +757,19 @@
  _ZN3kdk14KNavigationBar8listviewEv@Base 1.2.0.3
  _ZN3kdk14KNavigationBarC1EP7QWidget@Base 1.2.0.3
  _ZN3kdk14KNavigationBarC2EP7QWidget@Base 1.2.0.3
+ _ZN3kdk14KProgressLabel11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.5.2.0-0k0.2
+ _ZN3kdk14KProgressLabel11qt_metacastEPKc@Base 2.5.2.0-0k0.2
+ _ZN3kdk14KProgressLabel12currentIndexEv@Base 2.5.2.0-0k0.2
+ _ZN3kdk14KProgressLabel13setCircleSizeE5QSize@Base 2.5.2.0-0k0.2
+ _ZN3kdk14KProgressLabel13setStringListE11QStringList@Base 2.5.2.0-0k0.2
+ _ZN3kdk14KProgressLabel13setStringListE11QStringListS1_@Base 2.5.2.0-0k0.2
+ _ZN3kdk14KProgressLabel15setCurrentIndexEi@Base 2.5.2.0-0k0.2
+ _ZN3kdk14KProgressLabel16staticMetaObjectE@Base 2.5.2.0-0k0.2
+ _ZN3kdk14KProgressLabelC1EP7QWidget@Base 2.5.2.0-0k0.2
+ _ZN3kdk14KProgressLabelC2EP7QWidget@Base 2.5.2.0-0k0.2
+ _ZN3kdk14KProgressLabelD0Ev@Base 2.5.2.0-0k0.2
+ _ZN3kdk14KProgressLabelD1Ev@Base 2.5.2.0-0k0.2
+ _ZN3kdk14KProgressLabelD2Ev@Base 2.5.2.0-0k0.2
  _ZN3kdk14KSliderPrivate10drawSliderEP8QPainter@Base 1.2.0.3
  _ZN3kdk14KSliderPrivate10locateNodeEv@Base 1.2.0.3
  _ZN3kdk14KSliderPrivate11changeThemeEv@Base 1.2.0.3
@@ -455,6 +780,7 @@
  _ZN3kdk14KSliderPrivate13coverLineRectEv@Base 1.2.0.3
  _ZN3kdk14KSliderPrivate13drawCoverLineEP8QPainter@Base 1.2.0.3
  _ZN3kdk14KSliderPrivate13drawCoverNodeEP8QPainter@Base 1.2.0.3
+ _ZN3kdk14KSliderPrivate14animationStartEv@Base 2.5.2.0-0k0.2
  _ZN3kdk14KSliderPrivate19updateValuePositionEv@Base 1.2.0.3
  _ZN3kdk14KSliderPrivateC1EPNS_7KSliderE@Base 1.2.0.3
  _ZN3kdk14KSliderPrivateC2EPNS_7KSliderE@Base 1.2.0.3
@@ -462,8 +788,10 @@
  _ZN3kdk14KSliderPrivateD1Ev@Base 1.2.0.3
  _ZN3kdk14KSliderPrivateD2Ev@Base 1.2.0.3
  _ZN3kdk14KTabBarPrivate11changeThemeEv@Base 1.2.0.3
+ _ZN3kdk14KTabBarPrivate11eventFilterEP7QObjectP6QEvent@Base 2.5.2.0-0k0.2
  _ZN3kdk14KTabBarPrivate11qt_metacallEN11QMetaObject4CallEiPPv@Base 1.2.0.3
  _ZN3kdk14KTabBarPrivate11qt_metacastEPKc@Base 1.2.0.3
+ _ZN3kdk14KTabBarPrivate13getIndexAtPosERK6QPoint@Base 2.5.2.0-0k0.2
  _ZN3kdk14KTabBarPrivate16staticMetaObjectE@Base 1.2.0.3
  _ZN3kdk14KWidgetPrivate11qt_metacallEN11QMetaObject4CallEiPPv@Base 1.2.0.3
  _ZN3kdk14KWidgetPrivate11qt_metacastEPKc@Base 1.2.0.3
@@ -473,7 +801,35 @@
  _ZN3kdk14KWidgetPrivate22adjustFlagsTitleStatusE6QFlagsIN2Qt10WindowTypeEE@Base 2.0.2.1
  _ZN3kdk14KWidgetPrivateC1EPNS_7KWidgetE@Base 1.2.0.3
  _ZN3kdk14KWidgetPrivateC2EPNS_7KWidgetE@Base 1.2.0.3
+ _ZN3kdk15KComboBoxWidget10enterEventEP6QEvent@Base 2.5.2.0-0k0.2
+ _ZN3kdk15KComboBoxWidget10leaveEventEP6QEvent@Base 2.5.2.0-0k0.2
+ _ZN3kdk15KComboBoxWidget10paintEventEP11QPaintEvent@Base 2.5.2.0-0k0.2
+ _ZN3kdk15KComboBoxWidget11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.5.2.0-0k0.2
+ _ZN3kdk15KComboBoxWidget11qt_metacastEPKc@Base 2.5.2.0-0k0.2
+ _ZN3kdk15KComboBoxWidget11setMainTextE7QString@Base 2.5.2.0-0k0.2
+ _ZN3kdk15KComboBoxWidget13getChosenListEv@Base 2.5.2.0-0k0.2
+ _ZN3kdk15KComboBoxWidget13setStringListE11QStringList@Base 2.5.2.0-0k0.2
+ _ZN3kdk15KComboBoxWidget15mousePressEventEP11QMouseEvent@Base 2.5.2.0-0k0.2
+ _ZN3kdk15KComboBoxWidget16staticMetaObjectE@Base 2.5.2.0-0k0.2
+ _ZN3kdk15KComboBoxWidget17mouseReleaseEventEP11QMouseEvent@Base 2.5.2.0-0k0.2
+ _ZN3kdk15KComboBoxWidget19comBoxWidgetClickedEv@Base 2.5.2.0-0k0.2
+ _ZN3kdk15KComboBoxWidget4menuEv@Base 2.5.2.0-0k0.2
+ _ZN3kdk15KComboBoxWidgetC1EP7QWidget@Base 2.5.2.0-0k0.2
+ _ZN3kdk15KComboBoxWidgetC2EP7QWidget@Base 2.5.2.0-0k0.2
+ _ZN3kdk15KCustomDateEdit10changeDateEv@Base 2.5.2.0-0k0.2
+ _ZN3kdk15KCustomDateEdit10paintEventEP11QPaintEvent@Base 2.5.2.0-0k0.2
+ _ZN3kdk15KCustomDateEdit11eventFilterEP7QObjectP6QEvent@Base 2.5.2.0-0k0.2
+ _ZN3kdk15KCustomDateEdit11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.5.2.0-0k0.2
+ _ZN3kdk15KCustomDateEdit11qt_metacastEPKc@Base 2.5.2.0-0k0.2
+ _ZN3kdk15KCustomDateEdit11updateStyleEb@Base 2.5.2.0-0k0.2
+ _ZN3kdk15KCustomDateEdit12setShowLunarEb@Base 2.5.2.0-0k0.2
+ _ZN3kdk15KCustomDateEdit12showCalendarEv@Base 2.5.2.0-0k0.2
+ _ZN3kdk15KCustomDateEdit15mousePressEventEP11QMouseEvent@Base 2.5.2.0-0k0.2
+ _ZN3kdk15KCustomDateEdit16staticMetaObjectE@Base 2.5.2.0-0k0.2
+ _ZN3kdk15KCustomDateEditC1EP7QWidget@Base 2.5.2.0-0k0.2
+ _ZN3kdk15KCustomDateEditC2EP7QWidget@Base 2.5.2.0-0k0.2
  _ZN3kdk15KIconBarPrivate11changeThemeEv@Base 1.2.0.3
+ _ZN3kdk15KIconBarPrivate11eventFilterEP7QObjectP6QEvent@Base 2.5.2.0-0k0.2
  _ZN3kdk15KIconBarPrivate11qt_metacallEN11QMetaObject4CallEiPPv@Base 1.2.0.3
  _ZN3kdk15KIconBarPrivate11qt_metacastEPKc@Base 1.2.0.3
  _ZN3kdk15KIconBarPrivate15changeIconStyleEv@Base 2.0.0.0
@@ -496,12 +852,14 @@
  _ZN3kdk15KProgressCircle8setValueEi@Base 1.2.0.3
  _ZN3kdk15KProgressCircleC1EP7QWidget@Base 1.2.0.3
  _ZN3kdk15KProgressCircleC2EP7QWidget@Base 1.2.0.3
+ _ZN3kdk15KProgressDialog10setBarTypeERKNS_7BarTypeE@Base 2.5.2.0-0k0.2
  _ZN3kdk15KProgressDialog10setMaximumEi@Base 1.2.0.3
  _ZN3kdk15KProgressDialog10setMinimumEi@Base 1.2.0.3
  _ZN3kdk15KProgressDialog11changeThemeEv@Base 1.2.0.3
  _ZN3kdk15KProgressDialog11progressBarEv@Base 1.2.0.3
  _ZN3kdk15KProgressDialog11qt_metacallEN11QMetaObject4CallEiPPv@Base 1.2.0.3
  _ZN3kdk15KProgressDialog11qt_metacastEPKc@Base 1.2.0.3
+ _ZN3kdk15KProgressDialog12removeButtonEP11QPushButton@Base 2.5.2.0-0k0.2
  _ZN3kdk15KProgressDialog12setAutoCloseEb@Base 1.2.0.3
  _ZN3kdk15KProgressDialog12setAutoResetEb@Base 1.2.0.3
  _ZN3kdk15KProgressDialog12setLabelTextERK7QString@Base 1.2.0.3
@@ -512,12 +870,16 @@
  _ZN3kdk15KProgressDialog19setCancelButtonTextERK7QString@Base 1.2.0.3
  _ZN3kdk15KProgressDialog5resetEv@Base 1.2.0.3
  _ZN3kdk15KProgressDialog6cancelEv@Base 1.2.0.3
+ _ZN3kdk15KProgressDialog6myTypeEv@Base 2.5.2.0-0k0.2
  _ZN3kdk15KProgressDialog6setBarEP12QProgressBar@Base 1.2.0.3
  _ZN3kdk15KProgressDialog8canceledEv@Base 1.2.0.3
  _ZN3kdk15KProgressDialog8setLabelEP6QLabel@Base 1.2.0.3
  _ZN3kdk15KProgressDialog8setRangeEii@Base 1.2.0.3
+ _ZN3kdk15KProgressDialog8setSpeedERKf@Base 2.5.2.0-0k0.2
  _ZN3kdk15KProgressDialog8setValueEi@Base 1.2.0.3
+ _ZN3kdk15KProgressDialog9addButtonEP11QPushButton@Base 2.5.2.0-0k0.2
  _ZN3kdk15KProgressDialog9setSuffixERK7QString@Base 1.2.0.3
+ _ZN3kdk15KProgressDialog9setSuffixERK7QStringS3_@Base 2.5.2.0-0k0.2
  _ZN3kdk15KProgressDialogC1EP7QWidget@Base 1.2.0.3
  _ZN3kdk15KProgressDialogC1ERK7QStringS3_iiP7QWidget@Base 1.2.0.3
  _ZN3kdk15KProgressDialogC2EP7QWidget@Base 1.2.0.3
@@ -525,6 +887,7 @@
  _ZN3kdk15KProgressDialogD0Ev@Base 1.2.0.3
  _ZN3kdk15KProgressDialogD1Ev@Base 1.2.0.3
  _ZN3kdk15KProgressDialogD2Ev@Base 1.2.0.3
+ _ZN3kdk15KSearchLineEdit10paintEventEP11QPaintEvent@Base 2.5.2.0-0k0.2
  _ZN3kdk15KSearchLineEdit10setEnabledEb@Base 1.2.0.3
  _ZN3kdk15KSearchLineEdit10setVisibleEb@Base 1.2.0.3
  _ZN3kdk15KSearchLineEdit11eventFilterEP7QObjectP6QEvent@Base 1.2.0.3
@@ -532,12 +895,16 @@
  _ZN3kdk15KSearchLineEdit11qt_metacastEPKc@Base 1.2.0.3
  _ZN3kdk15KSearchLineEdit11reloadStyleEv@Base 2.0.2.1
  _ZN3kdk15KSearchLineEdit11resizeEventEP12QResizeEvent@Base 1.2.0.3
+ _ZN3kdk15KSearchLineEdit12customButtonEv@Base 2.5.2.0-0k0.2
  _ZN3kdk15KSearchLineEdit12setAlignmentE6QFlagsIN2Qt13AlignmentFlagEE@Base 1.2.0.3
+ _ZN3kdk15KSearchLineEdit12setGradationEb@Base 2.5.2.0-0k0.2
  _ZN3kdk15KSearchLineEdit13isTranslucentEv@Base 2.0.0.0
  _ZN3kdk15KSearchLineEdit14setTranslucentEb@Base 2.0.0.0
  _ZN3kdk15KSearchLineEdit16staticMetaObjectE@Base 1.2.0.3
  _ZN3kdk15KSearchLineEdit18setPlaceholderTextERK7QString@Base 1.2.0.3
+ _ZN3kdk15KSearchLineEdit21isCustomButtonVisibleEv@Base 2.5.2.0-0k0.2
  _ZN3kdk15KSearchLineEdit21setClearButtonEnabledEb@Base 1.2.0.3
+ _ZN3kdk15KSearchLineEdit22setCustomButtonVisibleEb@Base 2.5.2.0-0k0.2
  _ZN3kdk15KSearchLineEdit23setPlaceholderAlignmentE6QFlagsIN2Qt13AlignmentFlagEE@Base 1.2.0.3
  _ZN3kdk15KSearchLineEdit5clearEv@Base 1.2.0.3
  _ZN3kdk15KSearchLineEdit9isEnabledEv@Base 1.2.0.3
@@ -546,6 +913,15 @@
  _ZN3kdk15KSearchLineEditD0Ev@Base 1.2.0.3
  _ZN3kdk15KSearchLineEditD1Ev@Base 1.2.0.3
  _ZN3kdk15KSearchLineEditD2Ev@Base 1.2.0.3
+ _ZN3kdk15KToolBarPrivate11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.5.2.0-0k0.2
+ _ZN3kdk15KToolBarPrivate11qt_metacastEPKc@Base 2.5.2.0-0k0.2
+ _ZN3kdk15KToolBarPrivate13getSelectListEPNS_11KToolButtonEb@Base 2.5.2.0-0k0.2
+ _ZN3kdk15KToolBarPrivate16staticMetaObjectE@Base 2.5.2.0-0k0.2
+ _ZN3kdk15KToolBarPrivate17clearButtonLayoutEv@Base 2.5.2.0-0k0.2
+ _ZN3kdk15KToolBarPrivate18updateButtonLayoutEv@Base 2.5.2.0-0k0.2
+ _ZN3kdk15KToolBarPrivate4initEv@Base 2.5.2.0-0k0.2
+ _ZN3kdk15KToolBarPrivateC1EPNS_8KToolBarE@Base 2.5.2.0-0k0.2
+ _ZN3kdk15KToolBarPrivateC2EPNS_8KToolBarE@Base 2.5.2.0-0k0.2
  _ZN3kdk15Parmscontroller11modeChangedEb@Base 2.0.2.1
  _ZN3kdk15Parmscontroller11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.2.1
  _ZN3kdk15Parmscontroller11qt_metacastEPKc@Base 2.0.2.1
@@ -583,6 +959,15 @@
  _ZN3kdk16KListViewPrivate16staticMetaObjectE@Base 1.2.0.3
  _ZN3kdk16KListViewPrivateC1EPNS_9KListViewE@Base 1.2.0.3
  _ZN3kdk16KListViewPrivateC2EPNS_9KListViewE@Base 1.2.0.3
+ _ZN3kdk16KNavigationTrail10sizeChangeEv@Base 2.5.2.0-0k0.2
+ _ZN3kdk16KNavigationTrail11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.5.2.0-0k0.2
+ _ZN3kdk16KNavigationTrail11qt_metacastEPKc@Base 2.5.2.0-0k0.2
+ _ZN3kdk16KNavigationTrail11resizeEventEP12QResizeEvent@Base 2.5.2.0-0k0.2
+ _ZN3kdk16KNavigationTrail11setPositionENS_14ButtonPositionE@Base 2.5.2.0-0k0.2
+ _ZN3kdk16KNavigationTrail16staticMetaObjectE@Base 2.5.2.0-0k0.2
+ _ZN3kdk16KNavigationTrail5crumbEv@Base 2.5.2.0-0k0.2
+ _ZN3kdk16KNavigationTrailC1EP7QWidget@Base 2.5.2.0-0k0.2
+ _ZN3kdk16KNavigationTrailC2EP7QWidget@Base 2.5.2.0-0k0.2
  _ZN3kdk16KPixmapContainer10clearValueEv@Base 1.2.0.3
  _ZN3kdk16KPixmapContainer10paintEventEP11QPaintEvent@Base 1.2.0.3
  _ZN3kdk16KPixmapContainer11qt_metacallEN11QMetaObject4CallEiPPv@Base 1.2.0.3
@@ -597,6 +982,25 @@
  _ZN3kdk16KPixmapContainer9setPixmapERK7QPixmap@Base 1.2.0.3
  _ZN3kdk16KPixmapContainerC1EP7QWidget@Base 1.2.0.3
  _ZN3kdk16KPixmapContainerC2EP7QWidget@Base 1.2.0.3
+ _ZN3kdk16KTableHeaderView11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.5.2.0-0k0.2
+ _ZN3kdk16KTableHeaderView11qt_metacastEPKc@Base 2.5.2.0-0k0.2
+ _ZN3kdk16KTableHeaderView13clickedHeaderEi@Base 2.5.2.0-0k0.2
+ _ZN3kdk16KTableHeaderView15mousePressEventEP11QMouseEvent@Base 2.5.2.0-0k0.2
+ _ZN3kdk16KTableHeaderView16checkStateChangeEi@Base 2.5.2.0-0k0.2
+ _ZN3kdk16KTableHeaderView16staticMetaObjectE@Base 2.5.2.0-0k0.2
+ _ZN3kdk16KTableHeaderView17mouseReleaseEventEP11QMouseEvent@Base 2.5.2.0-0k0.2
+ _ZN3kdk16KTableHeaderView20checkStateChangeSlotEi@Base 2.5.2.0-0k0.2
+ _ZN3kdk16KTableHeaderView5eventEP6QEvent@Base 2.5.2.0-0k0.2
+ _ZN3kdk16KTableHeaderView7setMenuEP5QMenui@Base 2.5.2.0-0k0.2
+ _ZN3kdk16KTableHeaderView8setTitleE11QStringList@Base 2.5.2.0-0k0.2
+ _ZN3kdk16KTableHeaderViewC1EN2Qt11OrientationEP7QWidget@Base 2.5.2.0-0k0.2
+ _ZN3kdk16KTableHeaderViewC2EN2Qt11OrientationEP7QWidget@Base 2.5.2.0-0k0.2
+ _ZN3kdk16KTextEditPrivate11changeThemeEv@Base 2.5.2.0-0k0.2
+ _ZN3kdk16KTextEditPrivate11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.5.2.0-0k0.2
+ _ZN3kdk16KTextEditPrivate11qt_metacastEPKc@Base 2.5.2.0-0k0.2
+ _ZN3kdk16KTextEditPrivate16staticMetaObjectE@Base 2.5.2.0-0k0.2
+ _ZN3kdk16KTextEditPrivateC1EPNS_9KTextEditE@Base 2.5.2.0-0k0.2
+ _ZN3kdk16KTextEditPrivateC2EPNS_9KTextEditE@Base 2.5.2.0-0k0.2
  _ZN3kdk16KUninstallDialog11changeThemeEv@Base 1.2.0.3
  _ZN3kdk16KUninstallDialog11qt_metacallEN11QMetaObject4CallEiPPv@Base 1.2.0.3
  _ZN3kdk16KUninstallDialog11qt_metacastEPKc@Base 1.2.0.3
@@ -656,6 +1060,7 @@
  _ZN3kdk17KBorderlessButtonD0Ev@Base 1.2.0.3
  _ZN3kdk17KBorderlessButtonD1Ev@Base 1.2.0.3
  _ZN3kdk17KBorderlessButtonD2Ev@Base 1.2.0.3
+ _ZN3kdk17KButtonBoxPrivate11changeThemeEv@Base 2.5.2.0-0k0.2
  _ZN3kdk17KButtonBoxPrivate11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.2.1
  _ZN3kdk17KButtonBoxPrivate11qt_metacastEPKc@Base 2.0.2.1
  _ZN3kdk17KButtonBoxPrivate16staticMetaObjectE@Base 2.0.2.1
@@ -663,6 +1068,15 @@
  _ZN3kdk17KButtonBoxPrivate18updateBorderRadiusEv@Base 2.0.2.1
  _ZN3kdk17KButtonBoxPrivateC1EPNS_10KButtonBoxE@Base 2.0.2.1
  _ZN3kdk17KButtonBoxPrivateC2EPNS_10KButtonBoxE@Base 2.0.2.1
+ _ZN3kdk17KDirTabBarPrivate11changeThemeEv@Base 2.5.2.0-0k0.2
+ _ZN3kdk17KDirTabBarPrivate11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.5.2.0-0k0.2
+ _ZN3kdk17KDirTabBarPrivate11qt_metacastEPKc@Base 2.5.2.0-0k0.2
+ _ZN3kdk17KDirTabBarPrivate12clearButtonsEv@Base 2.5.2.0-0k0.2
+ _ZN3kdk17KDirTabBarPrivate16staticMetaObjectE@Base 2.5.2.0-0k0.2
+ _ZN3kdk17KDirTabBarPrivate8doLayoutEv@Base 2.5.2.0-0k0.2
+ _ZN3kdk17KDirTabBarPrivate9addButtonERK7QStringS1_b@Base 2.5.2.0-0k0.2
+ _ZN3kdk17KDirTabBarPrivateC1EPNS_10KDirTabBarE@Base 2.5.2.0-0k0.2
+ _ZN3kdk17KDirTabBarPrivateC2EPNS_10KDirTabBarE@Base 2.5.2.0-0k0.2
  _ZN3kdk17KListViewDelegate11qt_metacallEN11QMetaObject4CallEiPPv@Base 1.2.0.3
  _ZN3kdk17KListViewDelegate11qt_metacastEPKc@Base 1.2.0.3
  _ZN3kdk17KListViewDelegate16staticMetaObjectE@Base 1.2.0.3
@@ -671,6 +1085,45 @@
  _ZN3kdk17KListViewDelegateD0Ev@Base 1.2.0.3
  _ZN3kdk17KListViewDelegateD1Ev@Base 1.2.0.3
  _ZN3kdk17KListViewDelegateD2Ev@Base 1.2.0.3
+ _ZN3kdk17KMiniCalendarItem10enterEventEP6QEvent@Base 2.5.2.0-0k0.2
+ _ZN3kdk17KMiniCalendarItem10leaveEventEP6QEvent@Base 2.5.2.0-0k0.2
+ _ZN3kdk17KMiniCalendarItem10paintEventEP11QPaintEvent@Base 2.5.2.0-0k0.2
+ _ZN3kdk17KMiniCalendarItem10setDayTypeERKNS0_7DayTypeE@Base 2.5.2.0-0k0.2
+ _ZN3kdk17KMiniCalendarItem11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.5.2.0-0k0.2
+ _ZN3kdk17KMiniCalendarItem11qt_metacastEPKc@Base 2.5.2.0-0k0.2
+ _ZN3kdk17KMiniCalendarItem12setShowLunarEb@Base 2.5.2.0-0k0.2
+ _ZN3kdk17KMiniCalendarItem12setWeekColorERK6QColor@Base 2.5.2.0-0k0.2
+ _ZN3kdk17KMiniCalendarItem13drawBgCurrentEP8QPainterRK6QColor@Base 2.5.2.0-0k0.2
+ _ZN3kdk17KMiniCalendarItem13setLunarColorERK6QColor@Base 2.5.2.0-0k0.2
+ _ZN3kdk17KMiniCalendarItem13setSelectTypeERKNS0_10SelectTypeE@Base 2.5.2.0-0k0.2
+ _ZN3kdk17KMiniCalendarItem13setSuperColorERK6QColor@Base 2.5.2.0-0k0.2
+ _ZN3kdk17KMiniCalendarItem14setBorderColorERK6QColor@Base 2.5.2.0-0k0.2
+ _ZN3kdk17KMiniCalendarItem15mousePressEventEP11QMouseEvent@Base 2.5.2.0-0k0.2
+ _ZN3kdk17KMiniCalendarItem15setEnableBorderEb@Base 2.5.2.0-0k0.2
+ _ZN3kdk17KMiniCalendarItem15setHoverBgColorERK6QColor@Base 2.5.2.0-0k0.2
+ _ZN3kdk17KMiniCalendarItem15setOtherBgColorERK6QColor@Base 2.5.2.0-0k0.2
+ _ZN3kdk17KMiniCalendarItem16setSelectBgColorERK6QColor@Base 2.5.2.0-0k0.2
+ _ZN3kdk17KMiniCalendarItem16staticMetaObjectE@Base 2.5.2.0-0k0.2
+ _ZN3kdk17KMiniCalendarItem17mouseReleaseEventEP11QMouseEvent@Base 2.5.2.0-0k0.2
+ _ZN3kdk17KMiniCalendarItem17setCurrentBgColorERK6QColor@Base 2.5.2.0-0k0.2
+ _ZN3kdk17KMiniCalendarItem17setHoverTextColorERK6QColor@Base 2.5.2.0-0k0.2
+ _ZN3kdk17KMiniCalendarItem17setOtherTextColorERK6QColor@Base 2.5.2.0-0k0.2
+ _ZN3kdk17KMiniCalendarItem18setHoverLunarColorERK6QColor@Base 2.5.2.0-0k0.2
+ _ZN3kdk17KMiniCalendarItem18setOtherLunarColorERK6QColor@Base 2.5.2.0-0k0.2
+ _ZN3kdk17KMiniCalendarItem18setSelectTextColorERK6QColor@Base 2.5.2.0-0k0.2
+ _ZN3kdk17KMiniCalendarItem19setCurrentTextColorERK6QColor@Base 2.5.2.0-0k0.2
+ _ZN3kdk17KMiniCalendarItem19setSelectLunarColorERK6QColor@Base 2.5.2.0-0k0.2
+ _ZN3kdk17KMiniCalendarItem20setCurrentLunarColorERK6QColor@Base 2.5.2.0-0k0.2
+ _ZN3kdk17KMiniCalendarItem6drawBgEP8QPainter@Base 2.5.2.0-0k0.2
+ _ZN3kdk17KMiniCalendarItem7clickedERK5QDateRKNS0_7DayTypeE@Base 2.5.2.0-0k0.2
+ _ZN3kdk17KMiniCalendarItem7drawDayEP8QPainter@Base 2.5.2.0-0k0.2
+ _ZN3kdk17KMiniCalendarItem7setDateERK5QDate@Base 2.5.2.0-0k0.2
+ _ZN3kdk17KMiniCalendarItem7setDateERK5QDateRK7QStringRKNS0_7DayTypeE@Base 2.5.2.0-0k0.2
+ _ZN3kdk17KMiniCalendarItem8setLunarERK7QString@Base 2.5.2.0-0k0.2
+ _ZN3kdk17KMiniCalendarItem9drawLunarEP8QPainter@Base 2.5.2.0-0k0.2
+ _ZN3kdk17KMiniCalendarItem9setSelectEb@Base 2.5.2.0-0k0.2
+ _ZN3kdk17KMiniCalendarItemC1EP7QWidget@Base 2.5.2.0-0k0.2
+ _ZN3kdk17KMiniCalendarItemC2EP7QWidget@Base 2.5.2.0-0k0.2
  _ZN3kdk17KSecurityLevelBar10paintEventEP11QPaintEvent@Base 1.2.0.3
  _ZN3kdk17KSecurityLevelBar11qt_metacallEN11QMetaObject4CallEiPPv@Base 1.2.0.3
  _ZN3kdk17KSecurityLevelBar11qt_metacastEPKc@Base 1.2.0.3
@@ -698,6 +1151,19 @@
  _ZN3kdk18KBreadCrumbPrivate16staticMetaObjectE@Base 1.2.0.3
  _ZN3kdk18KBreadCrumbPrivateC1EPNS_11KBreadCrumbE@Base 1.2.0.3
  _ZN3kdk18KBreadCrumbPrivateC2EPNS_11KBreadCrumbE@Base 1.2.0.3
+ _ZN3kdk18KDragWidgetPrivate11changeThemeEv@Base 2.5.2.0-0k0.2
+ _ZN3kdk18KDragWidgetPrivate11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.5.2.0-0k0.2
+ _ZN3kdk18KDragWidgetPrivate11qt_metacastEPKc@Base 2.5.2.0-0k0.2
+ _ZN3kdk18KDragWidgetPrivate16staticMetaObjectE@Base 2.5.2.0-0k0.2
+ _ZN3kdk18KDragWidgetPrivate8openFileEv@Base 2.5.2.0-0k0.2
+ _ZN3kdk18KDragWidgetPrivateC1EPNS_11KDragWidgetE@Base 2.5.2.0-0k0.2
+ _ZN3kdk18KDragWidgetPrivateC2EPNS_11KDragWidgetE@Base 2.5.2.0-0k0.2
+ _ZN3kdk18KFileWidgetPrivate11changeThemeEv@Base 2.5.2.0-0k0.2
+ _ZN3kdk18KFileWidgetPrivate11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.5.2.0-0k0.2
+ _ZN3kdk18KFileWidgetPrivate11qt_metacastEPKc@Base 2.5.2.0-0k0.2
+ _ZN3kdk18KFileWidgetPrivate16staticMetaObjectE@Base 2.5.2.0-0k0.2
+ _ZN3kdk18KFileWidgetPrivateC1EPNS_11KFileWidgetE@Base 2.5.2.0-0k0.2
+ _ZN3kdk18KFileWidgetPrivateC2EPNS_11KFileWidgetE@Base 2.5.2.0-0k0.2
  _ZN3kdk18KHLineFramePrivate11changeThemeEv@Base 2.0.2.1
  _ZN3kdk18KHLineFramePrivate11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.2.1
  _ZN3kdk18KHLineFramePrivate11qt_metacastEPKc@Base 2.0.2.1
@@ -715,8 +1181,30 @@
  _ZN3kdk18KListWidgetPrivate16staticMetaObjectE@Base 1.2.0.3
  _ZN3kdk18KListWidgetPrivateC1EPNS_11KListWidgetE@Base 1.2.0.3
  _ZN3kdk18KListWidgetPrivateC2EPNS_11KListWidgetE@Base 1.2.0.3
+ _ZN3kdk18KLunarCalendarInfo10getHolidayEii@Base 2.5.2.0-0k0.2
+ _ZN3kdk18KLunarCalendarInfo10isLoopYearEi@Base 2.5.2.0-0k0.2
+ _ZN3kdk18KLunarCalendarInfo11getLunarDayEiii@Base 2.5.2.0-0k0.2
+ _ZN3kdk18KLunarCalendarInfo11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.5.2.0-0k0.2
+ _ZN3kdk18KLunarCalendarInfo11qt_metacastEPKc@Base 2.5.2.0-0k0.2
+ _ZN3kdk18KLunarCalendarInfo12getLunarInfoEiiibbb@Base 2.5.2.0-0k0.2
+ _ZN3kdk18KLunarCalendarInfo12getLunarYearEi@Base 2.5.2.0-0k0.2
+ _ZN3kdk18KLunarCalendarInfo12getMonthDaysEii@Base 2.5.2.0-0k0.2
+ _ZN3kdk18KLunarCalendarInfo13getSolarTermsEiii@Base 2.5.2.0-0k0.2
+ _ZN3kdk18KLunarCalendarInfo16getLunarFestivalEii@Base 2.5.2.0-0k0.2
+ _ZN3kdk18KLunarCalendarInfo16getLunarMonthDayEiii@Base 2.5.2.0-0k0.2
+ _ZN3kdk18KLunarCalendarInfo16staticMetaObjectE@Base 2.5.2.0-0k0.2
+ _ZN3kdk18KLunarCalendarInfo17getFirstDayOfWeekEiib@Base 2.5.2.0-0k0.2
+ _ZN3kdk18KLunarCalendarInfo17getTotalMonthDaysEii@Base 2.5.2.0-0k0.2
+ _ZN3kdk18KLunarCalendarInfo20getLunarCalendarInfoEiiiR7QStringS2_S2_S2_S2_S2_@Base 2.5.2.0-0k0.2
+ _ZN3kdk18KLunarCalendarInfo20getLunarYearMonthDayEiii@Base 2.5.2.0-0k0.2
+ _ZN3kdk18KLunarCalendarInfo4selfE@Base 2.5.2.0-0k0.2
+ _ZN3kdk18KLunarCalendarInfo8InstanceEv@Base 2.5.2.0-0k0.2
+ _ZN3kdk18KLunarCalendarInfoC1EP7QObject@Base 2.5.2.0-0k0.2
+ _ZN3kdk18KLunarCalendarInfoC2EP7QObject@Base 2.5.2.0-0k0.2
+ _ZN3kdk18KMenuButtonPrivate11eventFilterEP7QObjectP6QEvent@Base 2.5.2.0-0k0.2
  _ZN3kdk18KMenuButtonPrivate11qt_metacallEN11QMetaObject4CallEiPPv@Base 1.2.0.3
  _ZN3kdk18KMenuButtonPrivate11qt_metacastEPKc@Base 1.2.0.3
+ _ZN3kdk18KMenuButtonPrivate12feedbackShowEv@Base 2.5.2.0-0k0.2
  _ZN3kdk18KMenuButtonPrivate16staticMetaObjectE@Base 1.2.0.3
  _ZN3kdk18KMenuButtonPrivateC1EPNS_11KMenuButtonE@Base 1.2.0.3
  _ZN3kdk18KMenuButtonPrivateC2EPNS_11KMenuButtonE@Base 1.2.0.3
@@ -736,9 +1224,23 @@
  _ZN3kdk18KMessageBoxPrivateC1EPNS_11KMessageBoxE@Base 2.0.2.1
  _ZN3kdk18KMessageBoxPrivateC2EPNS_11KMessageBoxE@Base 2.0.2.1
  _ZN3kdk18KPushButtonPrivate11changeThemeEv@Base 2.0.0.0
+ _ZN3kdk18KPushButtonPrivate11drawContentER8QPainterR18QStyleOptionButtonR6QColorR5QRectS8_S8_12QFontMetricsR7QPixmapSB_j6QPointiii@Base 2.5.2.0-0k0.2
  _ZN3kdk18KPushButtonPrivate11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.0.0
  _ZN3kdk18KPushButtonPrivate11qt_metacastEPKc@Base 2.0.0.0
+ _ZN3kdk18KPushButtonPrivate11updateColorER8QPainterR18QStyleOptionButtonR6QColorS6_S6_S6_S6_@Base 2.5.2.0-0k0.2
+ _ZN3kdk18KPushButtonPrivate12updatePixmapER7QPixmapS2_R18QStyleOptionButtonR6QColorS6_S6_N5QIcon4ModeENS7_5StateE@Base 2.5.2.0-0k0.2
+ _ZN3kdk18KPushButtonPrivate14drawBackgroundER8QPainterR18QStyleOptionButtonR6QColor@Base 2.5.2.0-0k0.2
+ _ZN3kdk18KPushButtonPrivate15updateGrayColorER8QPainterR18QStyleOptionButtonR6QColorS6_@Base 2.5.2.0-0k0.2
  _ZN3kdk18KPushButtonPrivate16staticMetaObjectE@Base 2.0.0.0
+ _ZN3kdk18KPushButtonPrivate20updateArrowDirectionER7QPixmap6QPointS3_S3_N5QIcon4ModeENS4_5StateE@Base 2.5.2.0-0k0.2
+ _ZN3kdk18KTextEditorPrivate11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.5.2.0-0k0.2
+ _ZN3kdk18KTextEditorPrivate11qt_metacastEPKc@Base 2.5.2.0-0k0.2
+ _ZN3kdk18KTextEditorPrivate16staticMetaObjectE@Base 2.5.2.0-0k0.2
+ _ZN3kdk18KTextEditorPrivateC1EPNS_11KTextEditorE@Base 2.5.2.0-0k0.2
+ _ZN3kdk18KTextEditorPrivateC2EPNS_11KTextEditorE@Base 2.5.2.0-0k0.2
+ _ZN3kdk18KTextEditorPrivateD0Ev@Base 2.5.2.0-0k0.2
+ _ZN3kdk18KTextEditorPrivateD1Ev@Base 2.5.2.0-0k0.2
+ _ZN3kdk18KTextEditorPrivateD2Ev@Base 2.5.2.0-0k0.2
  _ZN3kdk18KToolButtonPrivate11changeThemeEv@Base 1.2.0.3
  _ZN3kdk18KToolButtonPrivate11qt_metacallEN11QMetaObject4CallEiPPv@Base 1.2.0.3
  _ZN3kdk18KToolButtonPrivate11qt_metacastEPKc@Base 1.2.0.3
@@ -760,6 +1262,7 @@
  _ZN3kdk19KAboutDialogPrivate15getDefaultAppIdEPKc@Base 2.0.0.0
  _ZN3kdk19KAboutDialogPrivate16staticMetaObjectE@Base 1.2.0.3
  _ZN3kdk19KAboutDialogPrivate20updateAppVersionTextEv@Base 2.1.1.0
+ _ZN3kdk19KAboutDialogPrivate22ConvertFirstLetterCaseERK7QString@Base 2.5.2.0-0k0.2
  _ZN3kdk19KAboutDialogPrivateC1EPNS_12KAboutDialogE@Base 1.2.0.3
  _ZN3kdk19KAboutDialogPrivateC2EPNS_12KAboutDialogE@Base 1.2.0.3
  _ZN3kdk19KColorButtonPrivate11changeThemeEv@Base 2.0.2.1
@@ -789,6 +1292,50 @@
  _ZN3kdk19KInputDialogSpinBox11qt_metacastEPKc@Base 1.2.0.3
  _ZN3kdk19KInputDialogSpinBox11textChangedEi@Base 1.2.0.3
  _ZN3kdk19KInputDialogSpinBox16staticMetaObjectE@Base 1.2.0.3
+ _ZN3kdk19KMiniCalendarWidget10dayChangedERK5QDate@Base 2.5.2.0-0k0.2
+ _ZN3kdk19KMiniCalendarWidget10initWidgetEv@Base 2.5.2.0-0k0.2
+ _ZN3kdk19KMiniCalendarWidget10paintEventEP11QPaintEvent@Base 2.5.2.0-0k0.2
+ _ZN3kdk19KMiniCalendarWidget10wheelEventEP11QWheelEvent@Base 2.5.2.0-0k0.2
+ _ZN3kdk19KMiniCalendarWidget11dateChangedEiii@Base 2.5.2.0-0k0.2
+ _ZN3kdk19KMiniCalendarWidget11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.5.2.0-0k0.2
+ _ZN3kdk19KMiniCalendarWidget11qt_metacastEPKc@Base 2.5.2.0-0k0.2
+ _ZN3kdk19KMiniCalendarWidget11slotClickedERK5QDateRKNS_17KMiniCalendarItem7DayTypeE@Base 2.5.2.0-0k0.2
+ _ZN3kdk19KMiniCalendarWidget12setShowLunarEb@Base 2.5.2.0-0k0.2
+ _ZN3kdk19KMiniCalendarWidget12setWeekColorERK6QColor@Base 2.5.2.0-0k0.2
+ _ZN3kdk19KMiniCalendarWidget13setLunarColorERK6QColor@Base 2.5.2.0-0k0.2
+ _ZN3kdk19KMiniCalendarWidget13setSelectTypeERKNS0_10SelectTypeE@Base 2.5.2.0-0k0.2
+ _ZN3kdk19KMiniCalendarWidget13showNextMonthEv@Base 2.5.2.0-0k0.2
+ _ZN3kdk19KMiniCalendarWidget14setBorderColorERK6QColor@Base 2.5.2.0-0k0.2
+ _ZN3kdk19KMiniCalendarWidget14setWeekBgColorERK6QColor@Base 2.5.2.0-0k0.2
+ _ZN3kdk19KMiniCalendarWidget15setEnableBorderEb@Base 2.5.2.0-0k0.2
+ _ZN3kdk19KMiniCalendarWidget15setHoverBgColorERK6QColor@Base 2.5.2.0-0k0.2
+ _ZN3kdk19KMiniCalendarWidget15setOtherBgColorERK6QColor@Base 2.5.2.0-0k0.2
+ _ZN3kdk19KMiniCalendarWidget16selectionChangedEv@Base 2.5.2.0-0k0.2
+ _ZN3kdk19KMiniCalendarWidget16setCalendarStyleERKNS0_13CalendarStyleE@Base 2.5.2.0-0k0.2
+ _ZN3kdk19KMiniCalendarWidget16setSelectBgColorERK6QColor@Base 2.5.2.0-0k0.2
+ _ZN3kdk19KMiniCalendarWidget16setWeekTextColorERK6QColor@Base 2.5.2.0-0k0.2
+ _ZN3kdk19KMiniCalendarWidget16staticMetaObjectE@Base 2.5.2.0-0k0.2
+ _ZN3kdk19KMiniCalendarWidget17setCurrentBgColorERK6QColor@Base 2.5.2.0-0k0.2
+ _ZN3kdk19KMiniCalendarWidget17setHoverTextColorERK6QColor@Base 2.5.2.0-0k0.2
+ _ZN3kdk19KMiniCalendarWidget17setOtherTextColorERK6QColor@Base 2.5.2.0-0k0.2
+ _ZN3kdk19KMiniCalendarWidget17setWeekNameFormatERKNS0_14WeekNameFormatE@Base 2.5.2.0-0k0.2
+ _ZN3kdk19KMiniCalendarWidget17showPreviousMonthEv@Base 2.5.2.0-0k0.2
+ _ZN3kdk19KMiniCalendarWidget18setHoverLunarColorERK6QColor@Base 2.5.2.0-0k0.2
+ _ZN3kdk19KMiniCalendarWidget18setOtherLunarColorERK6QColor@Base 2.5.2.0-0k0.2
+ _ZN3kdk19KMiniCalendarWidget18setSelectTextColorERK6QColor@Base 2.5.2.0-0k0.2
+ _ZN3kdk19KMiniCalendarWidget19setCurrentTextColorERK6QColor@Base 2.5.2.0-0k0.2
+ _ZN3kdk19KMiniCalendarWidget19setSelectLunarColorERK6QColor@Base 2.5.2.0-0k0.2
+ _ZN3kdk19KMiniCalendarWidget20setCurrentLunarColorERK6QColor@Base 2.5.2.0-0k0.2
+ _ZN3kdk19KMiniCalendarWidget7clickedERK5QDate@Base 2.5.2.0-0k0.2
+ _ZN3kdk19KMiniCalendarWidget7setDateERK5QDate@Base 2.5.2.0-0k0.2
+ _ZN3kdk19KMiniCalendarWidget8initDateEv@Base 2.5.2.0-0k0.2
+ _ZN3kdk19KMiniCalendarWidget9initStyleEv@Base 2.5.2.0-0k0.2
+ _ZN3kdk19KMiniCalendarWidget9showTodayEv@Base 2.5.2.0-0k0.2
+ _ZN3kdk19KMiniCalendarWidgetC1EP7QWidget@Base 2.5.2.0-0k0.2
+ _ZN3kdk19KMiniCalendarWidgetC2EP7QWidget@Base 2.5.2.0-0k0.2
+ _ZN3kdk19KMiniCalendarWidgetD0Ev@Base 2.5.2.0-0k0.2
+ _ZN3kdk19KMiniCalendarWidgetD1Ev@Base 2.5.2.0-0k0.2
+ _ZN3kdk19KMiniCalendarWidgetD2Ev@Base 2.5.2.0-0k0.2
  _ZN3kdk19KPressButtonPrivate11changeThemeEv@Base 2.0.0.0
  _ZN3kdk19KPressButtonPrivate11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.0.0
  _ZN3kdk19KPressButtonPrivate11qt_metacastEPKc@Base 2.0.0.0
@@ -836,6 +1383,14 @@
  _ZN3kdk20KSwitchButtonPrivate11updateColorERK18QStyleOptionButton@Base 1.2.0.3
  _ZN3kdk20KSwitchButtonPrivate14drawBackgroundEP8QPainter@Base 1.2.0.3
  _ZN3kdk20KSwitchButtonPrivate16staticMetaObjectE@Base 1.2.0.3
+ _ZN3kdk21KAddFileButtonPrivate11changeThemeEv@Base 2.5.2.0-0k0.2
+ _ZN3kdk21KAddFileButtonPrivate11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.5.2.0-0k0.2
+ _ZN3kdk21KAddFileButtonPrivate11qt_metacastEPKc@Base 2.5.2.0-0k0.2
+ _ZN3kdk21KAddFileButtonPrivate11updateColorE18QStyleOptionButton8QPalette@Base 2.5.2.0-0k0.2
+ _ZN3kdk21KAddFileButtonPrivate16staticMetaObjectE@Base 2.5.2.0-0k0.2
+ _ZN3kdk21KAddFileButtonPrivate8openFileEv@Base 2.5.2.0-0k0.2
+ _ZN3kdk21KAddFileButtonPrivateC1EPNS_14KAddFileButtonE@Base 2.5.2.0-0k0.2
+ _ZN3kdk21KAddFileButtonPrivateC2EPNS_14KAddFileButtonE@Base 2.5.2.0-0k0.2
  _ZN3kdk21KColorComboBoxPrivate10updateListEv@Base 2.0.2.1
  _ZN3kdk21KColorComboBoxPrivate11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.2.1
  _ZN3kdk21KColorComboBoxPrivate11qt_metacastEPKc@Base 2.0.2.1
@@ -845,6 +1400,13 @@
  _ZN3kdk21KColorComboBoxPrivate23slotCurrentIndexChangedEi@Base 2.0.2.1
  _ZN3kdk21KColorComboBoxPrivateC1EPNS_14KColorComboBoxE@Base 2.0.2.1
  _ZN3kdk21KColorComboBoxPrivateC2EPNS_14KColorComboBoxE@Base 2.0.2.1
+ _ZN3kdk21KLunarDateEditPrivate11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.5.2.0-0k0.2
+ _ZN3kdk21KLunarDateEditPrivate11qt_metacastEPKc@Base 2.5.2.0-0k0.2
+ _ZN3kdk21KLunarDateEditPrivate16staticMetaObjectE@Base 2.5.2.0-0k0.2
+ _ZN3kdk21KLunarDateEditPrivate25drawSymbolicColoredPixmapERK7QPixmap@Base 2.5.2.0-0k0.2
+ _ZN3kdk21KLunarDateEditPrivate7loadSvgERK7QStringi@Base 2.5.2.0-0k0.2
+ _ZN3kdk21KLunarDateEditPrivateC1EPNS_14KLunarDateEditE@Base 2.5.2.0-0k0.2
+ _ZN3kdk21KLunarDateEditPrivateC2EPNS_14KLunarDateEditE@Base 2.5.2.0-0k0.2
  _ZN3kdk21KNavigationBarPrivate11changeThemeEv@Base 1.2.0.3
  _ZN3kdk21KNavigationBarPrivate11qt_metacallEN11QMetaObject4CallEiPPv@Base 1.2.0.3
  _ZN3kdk21KNavigationBarPrivate11qt_metacastEPKc@Base 1.2.0.3
@@ -856,6 +1418,14 @@
  _ZN3kdk22KColorComboBoxDelegate16staticMetaObjectE@Base 2.0.2.1
  _ZN3kdk22KColorComboBoxDelegateC1EP7QObjectPNS_14KColorComboBoxE@Base 2.0.2.1
  _ZN3kdk22KColorComboBoxDelegateC2EP7QObjectPNS_14KColorComboBoxE@Base 2.0.2.1
+ _ZN3kdk22KCustomDateEditPrivate11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.5.2.0-0k0.2
+ _ZN3kdk22KCustomDateEditPrivate11qt_metacastEPKc@Base 2.5.2.0-0k0.2
+ _ZN3kdk22KCustomDateEditPrivate14onDateSelectedERK5QDate@Base 2.5.2.0-0k0.2
+ _ZN3kdk22KCustomDateEditPrivate16staticMetaObjectE@Base 2.5.2.0-0k0.2
+ _ZN3kdk22KCustomDateEditPrivate25drawSymbolicColoredPixmapERK7QPixmap@Base 2.5.2.0-0k0.2
+ _ZN3kdk22KCustomDateEditPrivate7loadSvgERK7QStringi@Base 2.5.2.0-0k0.2
+ _ZN3kdk22KCustomDateEditPrivateC1EPNS_15KCustomDateEditE@Base 2.5.2.0-0k0.2
+ _ZN3kdk22KCustomDateEditPrivateC2EPNS_15KCustomDateEditE@Base 2.5.2.0-0k0.2
  _ZN3kdk22KProgressCirclePrivate11changeThemeEv@Base 1.2.0.3
  _ZN3kdk22KProgressCirclePrivate11qt_metacallEN11QMetaObject4CallEiPPv@Base 1.2.0.3
  _ZN3kdk22KProgressCirclePrivate11qt_metacastEPKc@Base 1.2.0.3
@@ -877,10 +1447,12 @@
  _ZN3kdk22KSearchLineEditPrivate11changeThemeEv@Base 1.2.0.3
  _ZN3kdk22KSearchLineEditPrivate11qt_metacallEN11QMetaObject4CallEiPPv@Base 1.2.0.3
  _ZN3kdk22KSearchLineEditPrivate11qt_metacastEPKc@Base 1.2.0.3
+ _ZN3kdk22KSearchLineEditPrivate12adjustLayoutEv@Base 2.5.2.0-0k0.2
  _ZN3kdk22KSearchLineEditPrivate16adjustHolderRectEv@Base 1.2.0.3
  _ZN3kdk22KSearchLineEditPrivate16staticMetaObjectE@Base 1.2.0.3
  _ZN3kdk22KSearchLineEditPrivate17doEditingFinishedEv@Base 1.2.0.3
  _ZN3kdk22KSearchLineEditPrivate19doAnimationFinishedEv@Base 1.2.0.3
+ _ZN3kdk22KSearchLineEditPrivate19sltUpdateCursorRectEv@Base 2.5.2.0-0k0.2
  _ZN3kdk22KSearchLineEditPrivate4initEv@Base 1.2.0.3
  _ZN3kdk22KSearchLineEditPrivateC1EPNS_15KSearchLineEditE@Base 1.2.0.3
  _ZN3kdk22KSearchLineEditPrivateC2EPNS_15KSearchLineEditE@Base 1.2.0.3
@@ -895,6 +1467,26 @@
  _ZN3kdk23KPixmapContainerPrivate16staticMetaObjectE@Base 1.2.0.3
  _ZN3kdk23KPixmapContainerPrivateC1EPNS_16KPixmapContainerE@Base 1.2.0.3
  _ZN3kdk23KPixmapContainerPrivateC2EPNS_16KPixmapContainerE@Base 1.2.0.3
+ _ZN3kdk23KSecurityQuestionDialog11answerLabelEi@Base 2.5.2.0-0k0.2
+ _ZN3kdk23KSecurityQuestionDialog11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.5.2.0-0k0.2
+ _ZN3kdk23KSecurityQuestionDialog11qt_metacastEPKc@Base 2.5.2.0-0k0.2
+ _ZN3kdk23KSecurityQuestionDialog12cancelButtonEv@Base 2.5.2.0-0k0.2
+ _ZN3kdk23KSecurityQuestionDialog12setTitleTextERK7QString@Base 2.5.2.0-0k0.2
+ _ZN3kdk23KSecurityQuestionDialog13confirmButtonEv@Base 2.5.2.0-0k0.2
+ _ZN3kdk23KSecurityQuestionDialog13keyPressEventEP9QKeyEvent@Base 2.5.2.0-0k0.2
+ _ZN3kdk23KSecurityQuestionDialog13questionLabelEi@Base 2.5.2.0-0k0.2
+ _ZN3kdk23KSecurityQuestionDialog14answerLineeditEi@Base 2.5.2.0-0k0.2
+ _ZN3kdk23KSecurityQuestionDialog14questionComboxEi@Base 2.5.2.0-0k0.2
+ _ZN3kdk23KSecurityQuestionDialog16staticMetaObjectE@Base 2.5.2.0-0k0.2
+ _ZN3kdk23KSecurityQuestionDialog17initQustionComboxERK11QStringList@Base 2.5.2.0-0k0.2
+ _ZN3kdk23KSecurityQuestionDialog23addSecurityQuestionItemEib@Base 2.5.2.0-0k0.2
+ _ZN3kdk23KSecurityQuestionDialog23addSecurityQuestionItemEibb@Base 2.5.2.0-0k0.2
+ _ZN3kdk23KSecurityQuestionDialog9tipsLabelEi@Base 2.5.2.0-0k0.2
+ _ZN3kdk23KSecurityQuestionDialogC1EP7QWidget@Base 2.5.2.0-0k0.2
+ _ZN3kdk23KSecurityQuestionDialogC2EP7QWidget@Base 2.5.2.0-0k0.2
+ _ZN3kdk23KSecurityQuestionDialogD0Ev@Base 2.5.2.0-0k0.2
+ _ZN3kdk23KSecurityQuestionDialogD1Ev@Base 2.5.2.0-0k0.2
+ _ZN3kdk23KSecurityQuestionDialogD2Ev@Base 2.5.2.0-0k0.2
  _ZN3kdk23KUninstallDialogPrivate11getIconPathE7QString@Base 1.2.0.3
  _ZN3kdk23KUninstallDialogPrivate11qt_metacallEN11QMetaObject4CallEiPPv@Base 1.2.0.3
  _ZN3kdk23KUninstallDialogPrivate11qt_metacastEPKc@Base 1.2.0.3
@@ -924,6 +1516,11 @@
  _ZN3kdk24KListViewDelegatePrivateD0Ev@Base 1.2.0.3
  _ZN3kdk24KListViewDelegatePrivateD1Ev@Base 1.2.0.3
  _ZN3kdk24KListViewDelegatePrivateD2Ev@Base 1.2.0.3
+ _ZN3kdk24KMiniCalendarItemPrivate11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.5.2.0-0k0.2
+ _ZN3kdk24KMiniCalendarItemPrivate11qt_metacastEPKc@Base 2.5.2.0-0k0.2
+ _ZN3kdk24KMiniCalendarItemPrivate16staticMetaObjectE@Base 2.5.2.0-0k0.2
+ _ZN3kdk24KMiniCalendarItemPrivateC1EPNS_17KMiniCalendarItemE@Base 2.5.2.0-0k0.2
+ _ZN3kdk24KMiniCalendarItemPrivateC2EPNS_17KMiniCalendarItemE@Base 2.5.2.0-0k0.2
  _ZN3kdk24KSecurityLevelBarPrivate11qt_metacallEN11QMetaObject4CallEiPPv@Base 1.2.0.3
  _ZN3kdk24KSecurityLevelBarPrivate11qt_metacastEPKc@Base 1.2.0.3
  _ZN3kdk24KSecurityLevelBarPrivate16staticMetaObjectE@Base 1.2.0.3
@@ -938,12 +1535,32 @@
  _ZN3kdk25KInputDialogDoubleSpinBox11qt_metacastEPKc@Base 1.2.0.3
  _ZN3kdk25KInputDialogDoubleSpinBox11textChangedEi@Base 1.2.0.3
  _ZN3kdk25KInputDialogDoubleSpinBox16staticMetaObjectE@Base 1.2.0.3
+ _ZN3kdk25KLunarCalendarInfoPrivate11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.5.2.0-0k0.2
+ _ZN3kdk25KLunarCalendarInfoPrivate11qt_metacastEPKc@Base 2.5.2.0-0k0.2
+ _ZN3kdk25KLunarCalendarInfoPrivate16staticMetaObjectE@Base 2.5.2.0-0k0.2
+ _ZN3kdk25KLunarCalendarInfoPrivateC1EPNS_18KLunarCalendarInfoE@Base 2.5.2.0-0k0.2
+ _ZN3kdk25KLunarCalendarInfoPrivateC2EPNS_18KLunarCalendarInfoE@Base 2.5.2.0-0k0.2
+ _ZN3kdk26KMiniCalendarWidgetPrivate11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.5.2.0-0k0.2
+ _ZN3kdk26KMiniCalendarWidgetPrivate11qt_metacastEPKc@Base 2.5.2.0-0k0.2
+ _ZN3kdk26KMiniCalendarWidgetPrivate16staticMetaObjectE@Base 2.5.2.0-0k0.2
+ _ZN3kdk26KMiniCalendarWidgetPrivateC1EPNS_19KMiniCalendarWidgetE@Base 2.5.2.0-0k0.2
+ _ZN3kdk26KMiniCalendarWidgetPrivateC2EPNS_19KMiniCalendarWidgetE@Base 2.5.2.0-0k0.2
+ _ZN3kdk30KSecurityQuestionDialogPrivate11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.5.2.0-0k0.2
+ _ZN3kdk30KSecurityQuestionDialogPrivate11qt_metacastEPKc@Base 2.5.2.0-0k0.2
+ _ZN3kdk30KSecurityQuestionDialogPrivate16setQustionComboxEv@Base 2.5.2.0-0k0.2
+ _ZN3kdk30KSecurityQuestionDialogPrivate16staticMetaObjectE@Base 2.5.2.0-0k0.2
+ _ZN3kdk30KSecurityQuestionDialogPrivate17refreshConfirmBtnEv@Base 2.5.2.0-0k0.2
+ _ZN3kdk30KSecurityQuestionDialogPrivateC1EPNS_23KSecurityQuestionDialogE@Base 2.5.2.0-0k0.2
+ _ZN3kdk30KSecurityQuestionDialogPrivateC2EPNS_23KSecurityQuestionDialogE@Base 2.5.2.0-0k0.2
  _ZN3kdk4KTag10paintEventEP11QPaintEvent@Base 1.2.0.3
  _ZN3kdk4KTag11qt_metacallEN11QMetaObject4CallEiPPv@Base 1.2.0.3
  _ZN3kdk4KTag11qt_metacastEPKc@Base 1.2.0.3
  _ZN3kdk4KTag11setClosableEb@Base 1.2.0.3
  _ZN3kdk4KTag11setTagStyleENS_8TagStyleE@Base 1.2.0.3
+ _ZN3kdk4KTag11translucentEv@Base 2.5.2.0-0k0.2
+ _ZN3kdk4KTag14setTranslucentEb@Base 2.5.2.0-0k0.2
  _ZN3kdk4KTag16staticMetaObjectE@Base 1.2.0.3
+ _ZN3kdk4KTag18setBackgroundColorE6QColor@Base 2.5.2.0-0k0.2
  _ZN3kdk4KTag4textEv@Base 1.2.0.3
  _ZN3kdk4KTag7setTextERK7QString@Base 1.2.0.3
  _ZN3kdk4KTag8closableEv@Base 1.2.0.3
@@ -964,6 +1581,41 @@
  _ZN3kdk6KBadge8setValueEi@Base 1.2.0.3
  _ZN3kdk6KBadgeC1EP7QWidget@Base 1.2.0.3
  _ZN3kdk6KBadgeC2EP7QWidget@Base 1.2.0.3
+ _ZN3kdk6KCrumb10leftScrollEv@Base 2.5.2.0-0k0.2
+ _ZN3kdk6KCrumb10paintEventEP11QPaintEvent@Base 2.5.2.0-0k0.2
+ _ZN3kdk6KCrumb11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.5.2.0-0k0.2
+ _ZN3kdk6KCrumb11qt_metacastEPKc@Base 2.5.2.0-0k0.2
+ _ZN3kdk6KCrumb11rightScrollEv@Base 2.5.2.0-0k0.2
+ _ZN3kdk6KCrumb16staticMetaObjectE@Base 2.5.2.0-0k0.2
+ _ZN3kdk6KCrumb6addTabERK5QIconRK7QString@Base 2.5.2.0-0k0.2
+ _ZN3kdk6KCrumb6addTabERK7QString@Base 2.5.2.0-0k0.2
+ _ZN3kdk6KCrumb7moveTabEii@Base 2.5.2.0-0k0.2
+ _ZN3kdk6KCrumb7setFlatEb@Base 2.5.2.0-0k0.2
+ _ZN3kdk6KCrumb7setIconERK5QIcon@Base 2.5.2.0-0k0.2
+ _ZN3kdk6KCrumb9insertTabEiRK5QIconRK7QString@Base 2.5.2.0-0k0.2
+ _ZN3kdk6KCrumb9insertTabEiRK7QString@Base 2.5.2.0-0k0.2
+ _ZN3kdk6KCrumb9removeTabEi@Base 2.5.2.0-0k0.2
+ _ZN3kdk6KCrumbC1EP7QWidget@Base 2.5.2.0-0k0.2
+ _ZN3kdk6KCrumbC2EP7QWidget@Base 2.5.2.0-0k0.2
+ _ZN3kdk6KLabel10paintEventEP11QPaintEvent@Base 2.5.2.0-0k0.2
+ _ZN3kdk6KLabel11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.5.2.0-0k0.2
+ _ZN3kdk6KLabel11qt_metacastEPKc@Base 2.5.2.0-0k0.2
+ _ZN3kdk6KLabel11resizeEventEP12QResizeEvent@Base 2.5.2.0-0k0.2
+ _ZN3kdk6KLabel11setWordWrapEb@Base 2.5.2.0-0k0.2
+ _ZN3kdk6KLabel12setFontColorE6QColor@Base 2.5.2.0-0k0.2
+ _ZN3kdk6KLabel12setLabelTypeENS_10KLabelTypeE@Base 2.5.2.0-0k0.2
+ _ZN3kdk6KLabel15setBorderRadiusEi@Base 2.5.2.0-0k0.2
+ _ZN3kdk6KLabel15setBorderRadiusEiiii@Base 2.5.2.0-0k0.2
+ _ZN3kdk6KLabel16staticMetaObjectE@Base 2.5.2.0-0k0.2
+ _ZN3kdk6KLabel17setDataHightColorEb@Base 2.5.2.0-0k0.2
+ _ZN3kdk6KLabel18setBackgroundColorEb6QColor@Base 2.5.2.0-0k0.2
+ _ZN3kdk6KLabel22setHighlightBackgroundEb@Base 2.5.2.0-0k0.2
+ _ZN3kdk6KLabel4textEv@Base 2.5.2.0-0k0.2
+ _ZN3kdk6KLabel7setTextERK7QString@Base 2.5.2.0-0k0.2
+ _ZN3kdk6KLabel8wordWrapEv@Base 2.5.2.0-0k0.2
+ _ZN3kdk6KLabel9setPixmapERK7QPixmap@Base 2.5.2.0-0k0.2
+ _ZN3kdk6KLabelC1EP7QWidget@Base 2.5.2.0-0k0.2
+ _ZN3kdk6KLabelC2EP7QWidget@Base 2.5.2.0-0k0.2
  _ZN3kdk7KDialog10mainLayoutEv@Base 2.0.0.0
  _ZN3kdk7KDialog10mainWidgetEv@Base 1.2.0.3
  _ZN3kdk7KDialog10menuButtonEv@Base 1.2.0.3
@@ -978,7 +1630,9 @@
  _ZN3kdk7KDialog13setWindowIconERK7QString@Base 1.2.0.3
  _ZN3kdk7KDialog14setWindowTitleERK7QString@Base 1.2.0.3
  _ZN3kdk7KDialog15changeIconStyleEv@Base 1.2.0.3
+ _ZN3kdk7KDialog15windowButtonBarEv@Base 2.5.2.0-0k0.2
  _ZN3kdk7KDialog16staticMetaObjectE@Base 1.2.0.3
+ _ZN3kdk7KDialog7iconBarEv@Base 2.5.2.0-0k0.2
  _ZN3kdk7KDialogC1EP7QWidget@Base 1.2.0.3
  _ZN3kdk7KDialogC2EP7QWidget@Base 1.2.0.3
  _ZN3kdk7KDialogD0Ev@Base 1.2.0.3
@@ -1010,6 +1664,7 @@
  _ZN3kdk7KTabBar10paintEventEP11QPaintEvent@Base 1.2.0.3
  _ZN3kdk7KTabBar11qt_metacallEN11QMetaObject4CallEiPPv@Base 1.2.0.3
  _ZN3kdk7KTabBar11qt_metacastEPKc@Base 1.2.0.3
+ _ZN3kdk7KTabBar11rightlickedE6QPoint@Base 2.5.2.0-0k0.2
  _ZN3kdk7KTabBar12borderRadiusEv@Base 1.2.0.3
  _ZN3kdk7KTabBar14setTabBarStyleENS_12KTabBarStyleE@Base 1.2.0.3
  _ZN3kdk7KTabBar15setBorderRadiusEi@Base 1.2.0.3
@@ -1079,21 +1734,69 @@
  _ZN3kdk8KIconBarD0Ev@Base 1.2.0.3
  _ZN3kdk8KIconBarD1Ev@Base 1.2.0.3
  _ZN3kdk8KIconBarD2Ev@Base 1.2.0.3
+ _ZN3kdk8KToolBar10buttonListEv@Base 2.5.2.0-0k0.2
+ _ZN3kdk8KToolBar10paintEventEP11QPaintEvent@Base 2.5.2.0-0k0.2
+ _ZN3kdk8KToolBar11isCheckableEv@Base 2.5.2.0-0k0.2
+ _ZN3kdk8KToolBar11orientationEv@Base 2.5.2.0-0k0.2
+ _ZN3kdk8KToolBar11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.5.2.0-0k0.2
+ _ZN3kdk8KToolBar11qt_metacastEPKc@Base 2.5.2.0-0k0.2
+ _ZN3kdk8KToolBar12borderRadiusEv@Base 2.5.2.0-0k0.2
+ _ZN3kdk8KToolBar12removeButtonE5QListIPNS_11KToolButtonEE@Base 2.5.2.0-0k0.2
+ _ZN3kdk8KToolBar12removeButtonEPNS_11KToolButtonE@Base 2.5.2.0-0k0.2
+ _ZN3kdk8KToolBar12removeButtonEi@Base 2.5.2.0-0k0.2
+ _ZN3kdk8KToolBar12setCheckableEb@Base 2.5.2.0-0k0.2
+ _ZN3kdk8KToolBar12setExclusiveEb@Base 2.5.2.0-0k0.2
+ _ZN3kdk8KToolBar13checkedButtonEv@Base 2.5.2.0-0k0.2
+ _ZN3kdk8KToolBar13isLineVisibleEv@Base 2.5.2.0-0k0.2
+ _ZN3kdk8KToolBar14setLineVisibleEb@Base 2.5.2.0-0k0.2
+ _ZN3kdk8KToolBar14setOrientationEN2Qt11OrientationE@Base 2.5.2.0-0k0.2
+ _ZN3kdk8KToolBar15setBorderRadiusEi@Base 2.5.2.0-0k0.2
+ _ZN3kdk8KToolBar16staticMetaObjectE@Base 2.5.2.0-0k0.2
+ _ZN3kdk8KToolBar22backgroundColorEnabledEv@Base 2.5.2.0-0k0.2
+ _ZN3kdk8KToolBar25setBackgroundColorEnabledEb@Base 2.5.2.0-0k0.2
+ _ZN3kdk8KToolBar9addButtonE5QIcon@Base 2.5.2.0-0k0.2
+ _ZN3kdk8KToolBar9addButtonE5QListI5QIconE@Base 2.5.2.0-0k0.2
+ _ZN3kdk8KToolBar9addButtonE5QListI7QStringE@Base 2.5.2.0-0k0.2
+ _ZN3kdk8KToolBar9addButtonE7QString@Base 2.5.2.0-0k0.2
+ _ZN3kdk8KToolBar9exclusiveEv@Base 2.5.2.0-0k0.2
+ _ZN3kdk8KToolBarC1EP7QWidget@Base 2.5.2.0-0k0.2
+ _ZN3kdk8KToolBarC2EP7QWidget@Base 2.5.2.0-0k0.2
  _ZN3kdk8ListView15mousePressEventEP11QMouseEvent@Base 2.0.0.0
  _ZN3kdk8ListViewC1EP7QWidget@Base 2.0.0.0
  _ZN3kdk8ListViewC2EP7QWidget@Base 2.0.0.0
+ _ZN3kdk9KLineEdit10pushbuttonEv@Base 2.5.2.0-0k0.2
+ _ZN3kdk9KLineEdit11eventFilterEP7QObjectP6QEvent@Base 2.5.2.0-0k0.2
+ _ZN3kdk9KLineEdit11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.5.2.0-0k0.2
+ _ZN3kdk9KLineEdit11qt_metacastEPKc@Base 2.5.2.0-0k0.2
+ _ZN3kdk9KLineEdit11resizeEventEP12QResizeEvent@Base 2.5.2.0-0k0.2
+ _ZN3kdk9KLineEdit16staticMetaObjectE@Base 2.5.2.0-0k0.2
+ _ZN3kdk9KLineEditC1EP7QWidget@Base 2.5.2.0-0k0.2
+ _ZN3kdk9KLineEditC2EP7QWidget@Base 2.5.2.0-0k0.2
  _ZN3kdk9KListView11qt_metacallEN11QMetaObject4CallEiPPv@Base 1.2.0.3
  _ZN3kdk9KListView11qt_metacastEPKc@Base 1.2.0.3
  _ZN3kdk9KListView15mousePressEventEP11QMouseEvent@Base 1.2.0.3
  _ZN3kdk9KListView16staticMetaObjectE@Base 1.2.0.3
  _ZN3kdk9KListViewC1EP7QWidget@Base 1.2.0.3
  _ZN3kdk9KListViewC2EP7QWidget@Base 1.2.0.3
+ _ZN3kdk9KTextEdit10paintEventEP11QPaintEvent@Base 2.5.2.0-0k0.2
+ _ZN3kdk9KTextEdit11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.5.2.0-0k0.2
+ _ZN3kdk9KTextEdit11qt_metacastEPKc@Base 2.5.2.0-0k0.2
+ _ZN3kdk9KTextEdit11setReadOnlyEb@Base 2.5.2.0-0k0.2
+ _ZN3kdk9KTextEdit12setLabelTextERK7QString@Base 2.5.2.0-0k0.2
+ _ZN3kdk9KTextEdit15setLabelVisibleEb@Base 2.5.2.0-0k0.2
+ _ZN3kdk9KTextEdit16staticMetaObjectE@Base 2.5.2.0-0k0.2
+ _ZN3kdk9KTextEdit9setPixmapERK7QPixmap@Base 2.5.2.0-0k0.2
+ _ZN3kdk9KTextEditC1EP7QWidget@Base 2.5.2.0-0k0.2
+ _ZN3kdk9KTextEditC2EP7QWidget@Base 2.5.2.0-0k0.2
  _ZN3kdk9LinkLabel11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.0.0.0
  _ZN3kdk9LinkLabel11qt_metacastEPKc@Base 2.0.0.0
  _ZN3kdk9LinkLabel15mousePressEventEP11QMouseEvent@Base 2.0.0.0
  _ZN3kdk9LinkLabel16staticMetaObjectE@Base 2.0.0.0
  _ZN3kdk9LinkLabelC1EP7QWidget@Base 2.0.0.0
  _ZN3kdk9LinkLabelC2EP7QWidget@Base 2.0.0.0
+ (optional=templinst)_ZN5QHashI7QString5QSizeE11deleteNode2EPN9QHashData4NodeE@Base 2.5.2.0-0k0.2
+ (optional=templinst)_ZN5QHashI7QString5QSizeE13duplicateNodeEPN9QHashData4NodeEPv@Base 2.5.2.0-0k0.2
+ (optional=templinst)_ZN9QtPrivate11QSlotObjectIM7QObjectFvvENS_4ListIJEEEvE4implEiPNS_15QSlotObjectBaseEPS1_PPvPb@Base 2.5.2.0-0k0.2
  (optional=templinst)_ZN9QtPrivate11QSlotObjectIM7QWidgetFbvENS_4ListIJEEEvE4implEiPNS_15QSlotObjectBaseEP7QObjectPPvPb@Base 1.2.0.3
  (optional=templinst)_ZN9QtPrivate11QSlotObjectIM7QWidgetFvvENS_4ListIJEEEvE4implEiPNS_15QSlotObjectBaseEP7QObjectPPvPb@Base 1.2.0.3
  (optional=templinst)_ZN9QtPrivate11QSlotObjectIMN3kdk12KInputDialogEFvvENS_4ListIJEEEvE4implEiPNS_15QSlotObjectBaseEP7QObjectPPvPb@Base 1.2.0.3
@@ -1101,6 +1804,7 @@
  (optional=templinst)_ZN9QtPrivate11QSlotObjectIMN3kdk14KTabBarPrivateEFvvENS_4ListIJEEEvE4implEiPNS_15QSlotObjectBaseEP7QObjectPPvPb@Base 1.2.0.3
  (optional=templinst)_ZN9QtPrivate11QSlotObjectIMN3kdk15KIconBarPrivateEFvvENS_4ListIJEEEvE4implEiPNS_15QSlotObjectBaseEP7QObjectPPvPb@Base 1.2.0.3
  (optional=templinst)_ZN9QtPrivate11QSlotObjectIMN3kdk15KProgressDialogEFvvENS_4ListIJEEEvE4implEiPNS_15QSlotObjectBaseEP7QObjectPPvPb@Base 1.2.0.3
+ (optional=templinst)_ZN9QtPrivate11QSlotObjectIMN3kdk17KDirTabBarPrivateEFvvENS_4ListIJEEEvE4implEiPNS_15QSlotObjectBaseEP7QObjectPPvPb@Base 2.5.2.0-0k0.2
  (optional=templinst)_ZN9QtPrivate11QSlotObjectIMN3kdk18KItemWidgetPrivateEFvvENS_4ListIJEEEvE4implEiPNS_15QSlotObjectBaseEP7QObjectPPvPb@Base 1.2.0.3
  (optional=templinst)_ZN9QtPrivate11QSlotObjectIMN3kdk18KPushButtonPrivateEFvvENS_4ListIJEEEvE4implEiPNS_15QSlotObjectBaseEP7QObjectPPvPb@Base 2.0.0.0
  (optional=templinst)_ZN9QtPrivate11QSlotObjectIMN3kdk18KToolButtonPrivateEFvvENS_4ListIJEEEvE4implEiPNS_15QSlotObjectBaseEP7QObjectPPvPb@Base 1.2.0.3
@@ -1108,16 +1812,58 @@
  (optional=templinst)_ZN9QtPrivate11QSlotObjectIMN3kdk20KCommentPanelPrivateEFvvENS_4ListIJEEEvE4implEiPNS_15QSlotObjectBaseEP7QObjectPPvPb@Base 1.2.0.3
  (optional=templinst)_ZN9QtPrivate11QSlotObjectIMN3kdk20KPasswordEditPrivateEFvvENS_4ListIJEEEvE4implEiPNS_15QSlotObjectBaseEP7QObjectPPvPb@Base 1.2.0.3
  (optional=templinst)_ZN9QtPrivate11QSlotObjectIMN3kdk20KSwitchButtonPrivateEFvvENS_4ListIJEEEvE4implEiPNS_15QSlotObjectBaseEP7QObjectPPvPb@Base 1.2.0.3
+ (optional=templinst)_ZN9QtPrivate11QSlotObjectIMN3kdk22KCustomDateEditPrivateEFvRK5QDateENS_4ListIJS5_EEEvE4implEiPNS_15QSlotObjectBaseEP7QObjectPPvPb@Base 2.5.2.0-0k0.2
  (optional=templinst)_ZN9QtPrivate11QSlotObjectIMN3kdk22KProgressCirclePrivateEFvvENS_4ListIJEEEvE4implEiPNS_15QSlotObjectBaseEP7QObjectPPvPb@Base 1.2.0.3
  (optional=templinst)_ZN9QtPrivate11QSlotObjectIMN3kdk22KSearchLineEditPrivateEFvvENS_4ListIJEEEvE4implEiPNS_15QSlotObjectBaseEP7QObjectPPvPb@Base 1.2.0.3
+ (optional=templinst)_ZN9QtPrivate11QSlotObjectIMN3kdk30KSecurityQuestionDialogPrivateEFvvENS_4ListIJEEEvE4implEiPNS_15QSlotObjectBaseEP7QObjectPPvPb@Base 2.5.2.0-0k0.2
  (optional=templinst)_ZN9QtPrivate11QSlotObjectIMN3kdk7KDialogEFvvENS_4ListIJEEEvE4implEiPNS_15QSlotObjectBaseEP7QObjectPPvPb@Base 1.2.0.3
+ (optional=templinst)_ZN9QtPrivate18QFunctorSlotObjectIZN3kdk14KTabBarPrivateC4EPNS1_7KTabBarEEUlvE0_Li0ENS_4ListIJEEEvE4implEiPNS_15QSlotObjectBaseEP7QObjectPPvPb@Base 2.5.2.0-0k0.2
+ (optional=templinst)_ZN9QtPrivate18QFunctorSlotObjectIZN3kdk14KTabBarPrivateC4EPNS1_7KTabBarEEUlvE_Li0ENS_4ListIJEEEvE4implEiPNS_15QSlotObjectBaseEP7QObjectPPvPb@Base 2.5.2.0-0k0.2
+ _ZNK13KCustomTabBar10metaObjectEv@Base 2.5.2.0-0k0.2
+ _ZNK13KCustomTabBar10tabToolTipEi@Base 2.5.2.0-0k0.2
+ _ZNK13KCustomTabBar11tabSizeHintEi@Base 2.5.2.0-0k0.2
+ _ZNK13KCustomTabBar12currentIndexEv@Base 2.5.2.0-0k0.2
+ _ZNK13KCustomTabBar12documentModeEv@Base 2.5.2.0-0k0.2
+ _ZNK13KCustomTabBar12isTabEnabledEi@Base 2.5.2.0-0k0.2
+ _ZNK13KCustomTabBar12tabTextColorEi@Base 2.5.2.0-0k0.2
+ _ZNK13KCustomTabBar12tabWhatsThisEi@Base 2.5.2.0-0k0.2
+ _ZNK13KCustomTabBar12tabsClosableEv@Base 2.5.2.0-0k0.2
+ _ZNK13KCustomTabBar15initStyleOptionEP15QStyleOptionTabi@Base 2.5.2.0-0k0.2
+ _ZNK13KCustomTabBar15minimumSizeHintEv@Base 2.5.2.0-0k0.2
+ _ZNK13KCustomTabBar17accessibleTabNameEi@Base 2.5.2.0-0k0.2
+ _ZNK13KCustomTabBar17usesScrollButtonsEv@Base 2.5.2.0-0k0.2
+ _ZNK13KCustomTabBar18minimumTabSizeHintEi@Base 2.5.2.0-0k0.2
+ _ZNK13KCustomTabBar19changeCurrentOnDragEv@Base 2.5.2.0-0k0.2
+ _ZNK13KCustomTabBar25selectionBehaviorOnRemoveEv@Base 2.5.2.0-0k0.2
+ _ZNK13KCustomTabBar5countEv@Base 2.5.2.0-0k0.2
+ _ZNK13KCustomTabBar5shapeEv@Base 2.5.2.0-0k0.2
+ _ZNK13KCustomTabBar5tabAtERK6QPoint@Base 2.5.2.0-0k0.2
+ _ZNK13KCustomTabBar7tabDataEi@Base 2.5.2.0-0k0.2
+ _ZNK13KCustomTabBar7tabIconEi@Base 2.5.2.0-0k0.2
+ _ZNK13KCustomTabBar7tabRectEi@Base 2.5.2.0-0k0.2
+ _ZNK13KCustomTabBar7tabTextEi@Base 2.5.2.0-0k0.2
+ _ZNK13KCustomTabBar8autoHideEv@Base 2.5.2.0-0k0.2
+ _ZNK13KCustomTabBar8drawBaseEv@Base 2.5.2.0-0k0.2
+ _ZNK13KCustomTabBar8iconSizeEv@Base 2.5.2.0-0k0.2
+ _ZNK13KCustomTabBar8sizeHintEv@Base 2.5.2.0-0k0.2
+ _ZNK13KCustomTabBar9elideModeEv@Base 2.5.2.0-0k0.2
+ _ZNK13KCustomTabBar9expandingEv@Base 2.5.2.0-0k0.2
+ _ZNK13KCustomTabBar9isMovableEv@Base 2.5.2.0-0k0.2
+ _ZNK13KCustomTabBar9tabButtonEiNS_14ButtonPositionE@Base 2.5.2.0-0k0.2
+ _ZNK3kdk10FileDialog10metaObjectEv@Base 2.5.2.0-0k0.2
  _ZNK3kdk10KBallonTip10metaObjectEv@Base 1.2.0.3
  _ZNK3kdk10KButtonBox10metaObjectEv@Base 2.0.2.1
+ _ZNK3kdk10KDirTabBar10metaObjectEv@Base 2.5.2.0-0k0.2
+ _ZNK3kdk10KDirTabBar11currentPathEv@Base 2.5.2.0-0k0.2
+ _ZNK3kdk10KTableView10metaObjectEv@Base 2.5.2.0-0k0.2
  _ZNK3kdk11KBreadCrumb10metaObjectEv@Base 1.2.0.3
  _ZNK3kdk11KBreadCrumb11tabSizeHintEi@Base 1.2.0.3
  _ZNK3kdk11KBreadCrumb4iconEv@Base 1.2.0.3
  _ZNK3kdk11KBreadCrumb6isFlatEv@Base 1.2.0.3
+ _ZNK3kdk11KClockTimer10metaObjectEv@Base 2.5.2.0-0k0.2
  _ZNK3kdk11KComboStyle16sizeFromContentsEN6QStyle12ContentsTypeEPK12QStyleOptionRK5QSizePK7QWidget@Base 2.0.2.1
+ _ZNK3kdk11KDragWidget10metaObjectEv@Base 2.5.2.0-0k0.2
+ _ZNK3kdk11KFileWidget10metaObjectEv@Base 2.5.2.0-0k0.2
  _ZNK3kdk11KHLineFrame10metaObjectEv@Base 2.0.2.1
  _ZNK3kdk11KItemWidget10metaObjectEv@Base 1.2.0.3
  _ZNK3kdk11KListWidget10metaObjectEv@Base 1.2.0.3
@@ -1137,13 +1883,19 @@
  _ZNK3kdk11KMessageBox7buttonsEv@Base 2.0.2.1
  _ZNK3kdk11KMessageBox8checkBoxEv@Base 2.0.2.1
  _ZNK3kdk11KPushButton10metaObjectEv@Base 2.0.0.0
+ _ZNK3kdk11KPushButton8hasArrowEv@Base 2.5.2.0-0k0.2
+ _ZNK3kdk11KTableModel10headerDataEiN2Qt11OrientationEi@Base 2.5.2.0-0k0.2
+ _ZNK3kdk11KTableModel10metaObjectEv@Base 2.5.2.0-0k0.2
  _ZNK3kdk11KTagPrivate10metaObjectEv@Base 1.2.0.3
+ _ZNK3kdk11KTextEditor10metaObjectEv@Base 2.5.2.0-0k0.2
  _ZNK3kdk11KToolButton10metaObjectEv@Base 1.2.0.3
  _ZNK3kdk11KToolButton8hasArrowEv@Base 1.2.0.3
  _ZNK3kdk11KToolButton8sizeHintEv@Base 1.2.0.3
  _ZNK3kdk11KVLineFrame10metaObjectEv@Base 2.0.2.1
  _ZNK3kdk11XAtomHelper10metaObjectEv@Base 1.2.0.3
+ _ZNK3kdk12CustomButton10metaObjectEv@Base 2.5.2.0-0k0.2
  _ZNK3kdk12KAboutDialog10metaObjectEv@Base 1.2.0.3
+ _ZNK3kdk12KArrowTabBar10metaObjectEv@Base 2.5.2.0-0k0.2
  _ZNK3kdk12KColorButton10metaObjectEv@Base 2.0.2.1
  _ZNK3kdk12KColorButton8sizeHintEv@Base 2.0.2.1
  _ZNK3kdk12KInputDialog10doubleStepEv@Base 1.2.0.3
@@ -1169,17 +1921,27 @@
  _ZNK3kdk12KInputDialog9inputModeEv@Base 1.2.0.3
  _ZNK3kdk12KInputDialog9labelTextEv@Base 1.2.0.3
  _ZNK3kdk12KInputDialog9textValueEv@Base 1.2.0.3
+ _ZNK3kdk12KIntroWidget10metaObjectEv@Base 2.5.2.0-0k0.2
+ _ZNK3kdk12KIntroWidget8sizeHintEv@Base 2.5.2.0-0k0.2
  _ZNK3kdk12KPressButton10metaObjectEv@Base 2.0.0.0
  _ZNK3kdk12KPressButton11isCheckableEv@Base 2.0.0.0
  _ZNK3kdk12KPressButton9isCheckedEv@Base 2.0.0.0
  _ZNK3kdk12KProgressBar10metaObjectEv@Base 1.2.0.3
  _ZNK3kdk12KProgressBar4textEv@Base 1.2.0.3
  _ZNK3kdk12KProgressBar8sizeHintEv@Base 1.2.0.3
+ _ZNK3kdk12KTitleWindow10metaObjectEv@Base 2.5.2.0-0k0.2
+ _ZNK3kdk13AddFileDialog10metaObjectEv@Base 2.5.2.0-0k0.2
  _ZNK3kdk13KBadgePrivate10metaObjectEv@Base 1.2.0.3
  _ZNK3kdk13KBorderButton10metaObjectEv@Base 1.2.0.3
  _ZNK3kdk13KBorderButton8sizeHintEv@Base 2.0.2.1
  _ZNK3kdk13KBubbleWidget10metaObjectEv@Base 2.0.0.0
  _ZNK3kdk13KCommentPanel10metaObjectEv@Base 1.2.0.3
+ _ZNK3kdk13KLabelPrivate10metaObjectEv@Base 2.5.2.0-0k0.2
+ _ZNK3kdk13KLoopPlayPage10metaObjectEv@Base 2.5.2.0-0k0.2
+ _ZNK3kdk13KNativeTabbar10metaObjectEv@Base 2.5.2.0-0k0.2
+ _ZNK3kdk13KNativeTabbar11tabSizeHintEi@Base 2.5.2.0-0k0.2
+ _ZNK3kdk13KNativeTabbar18minimumTabSizeHintEi@Base 2.5.2.0-0k0.2
+ _ZNK3kdk13KNativeTabbar8sizeHintEv@Base 2.5.2.0-0k0.2
  _ZNK3kdk13KPasswordEdit10metaObjectEv@Base 1.2.0.3
  _ZNK3kdk13KPasswordEdit20isClearButtonEnabledEv@Base 1.2.0.3
  _ZNK3kdk13KPasswordEdit8sizeHintEv@Base 2.0.2.1
@@ -1187,11 +1949,16 @@
  _ZNK3kdk13KSwitchButton11isCheckableEv@Base 1.2.0.3
  _ZNK3kdk13KSwitchButton8sizeHintEv@Base 1.2.0.3
  _ZNK3kdk13KSwitchButton9isCheckedEv@Base 1.2.0.3
+ _ZNK3kdk14KAddFileButton10metaObjectEv@Base 2.5.2.0-0k0.2
  _ZNK3kdk14KColorComboBox10metaObjectEv@Base 2.0.2.1
  _ZNK3kdk14KDialogPrivate10metaObjectEv@Base 1.2.0.3
+ _ZNK3kdk14KLunarDateEdit10metaObjectEv@Base 2.5.2.0-0k0.2
  _ZNK3kdk14KNavigationBar10metaObjectEv@Base 1.2.0.3
+ _ZNK3kdk14KProgressLabel10metaObjectEv@Base 2.5.2.0-0k0.2
  _ZNK3kdk14KTabBarPrivate10metaObjectEv@Base 1.2.0.3
  _ZNK3kdk14KWidgetPrivate10metaObjectEv@Base 1.2.0.3
+ _ZNK3kdk15KComboBoxWidget10metaObjectEv@Base 2.5.2.0-0k0.2
+ _ZNK3kdk15KCustomDateEdit10metaObjectEv@Base 2.5.2.0-0k0.2
  _ZNK3kdk15KIconBarPrivate10metaObjectEv@Base 1.2.0.3
  _ZNK3kdk15KProgressCircle10metaObjectEv@Base 1.2.0.3
  _ZNK3kdk15KProgressCircle13isTextVisibleEv@Base 1.2.0.3
@@ -1212,14 +1979,19 @@
  _ZNK3kdk15KSearchLineEdit20placeholderAlignmentEv@Base 1.2.0.3
  _ZNK3kdk15KSearchLineEdit8sizeHintEv@Base 2.0.2.1
  _ZNK3kdk15KSearchLineEdit9alignmentEv@Base 1.2.0.3
+ _ZNK3kdk15KToolBarPrivate10metaObjectEv@Base 2.5.2.0-0k0.2
  _ZNK3kdk15Parmscontroller10metaObjectEv@Base 2.0.2.1
  _ZNK3kdk16KBackgroundGroup10metaObjectEv@Base 2.0.2.1
  _ZNK3kdk16KBackgroundGroup14backgroundRoleEv@Base 2.0.2.1
  _ZNK3kdk16KListViewPrivate10metaObjectEv@Base 1.2.0.3
+ _ZNK3kdk16KNavigationTrail10metaObjectEv@Base 2.5.2.0-0k0.2
  _ZNK3kdk16KPixmapContainer10metaObjectEv@Base 1.2.0.3
  _ZNK3kdk16KPixmapContainer15isValueVisiableEv@Base 1.2.0.3
  _ZNK3kdk16KPixmapContainer5valueEv@Base 1.2.0.3
  _ZNK3kdk16KPixmapContainer6pixmapEv@Base 1.2.0.3
+ _ZNK3kdk16KTableHeaderView10metaObjectEv@Base 2.5.2.0-0k0.2
+ _ZNK3kdk16KTableHeaderView12paintSectionEP8QPainterRK5QRecti@Base 2.5.2.0-0k0.2
+ _ZNK3kdk16KTextEditPrivate10metaObjectEv@Base 2.5.2.0-0k0.2
  _ZNK3kdk16KUninstallDialog10metaObjectEv@Base 1.2.0.3
  _ZNK3kdk16KWindowButtonBar10metaObjectEv@Base 1.2.0.3
  _ZNK3kdk16KWindowButtonBar8sizeHintEv@Base 2.0.2.1
@@ -1229,19 +2001,50 @@
  _ZNK3kdk17KBorderlessButton10metaObjectEv@Base 1.2.0.3
  _ZNK3kdk17KBorderlessButton8sizeHintEv@Base 1.2.0.3
  _ZNK3kdk17KButtonBoxPrivate10metaObjectEv@Base 2.0.2.1
+ _ZNK3kdk17KDirTabBarPrivate10metaObjectEv@Base 2.5.2.0-0k0.2
  _ZNK3kdk17KListViewDelegate10metaObjectEv@Base 1.2.0.3
  _ZNK3kdk17KListViewDelegate5paintEP8QPainterRK20QStyleOptionViewItemRK11QModelIndex@Base 1.2.0.3
  _ZNK3kdk17KListViewDelegate8sizeHintERK20QStyleOptionViewItemRK11QModelIndex@Base 1.2.0.3
+ _ZNK3kdk17KMiniCalendarItem10getDayTypeEv@Base 2.5.2.0-0k0.2
+ _ZNK3kdk17KMiniCalendarItem10metaObjectEv@Base 2.5.2.0-0k0.2
+ _ZNK3kdk17KMiniCalendarItem12getShowLunarEv@Base 2.5.2.0-0k0.2
+ _ZNK3kdk17KMiniCalendarItem12getWeekColorEv@Base 2.5.2.0-0k0.2
+ _ZNK3kdk17KMiniCalendarItem13getLunarColorEv@Base 2.5.2.0-0k0.2
+ _ZNK3kdk17KMiniCalendarItem13getSelectTypeEv@Base 2.5.2.0-0k0.2
+ _ZNK3kdk17KMiniCalendarItem13getSuperColorEv@Base 2.5.2.0-0k0.2
+ _ZNK3kdk17KMiniCalendarItem14getBorderColorEv@Base 2.5.2.0-0k0.2
+ _ZNK3kdk17KMiniCalendarItem15getEnableBorderEv@Base 2.5.2.0-0k0.2
+ _ZNK3kdk17KMiniCalendarItem15getHoverBgColorEv@Base 2.5.2.0-0k0.2
+ _ZNK3kdk17KMiniCalendarItem15getOtherBgColorEv@Base 2.5.2.0-0k0.2
+ _ZNK3kdk17KMiniCalendarItem15minimumSizeHintEv@Base 2.5.2.0-0k0.2
+ _ZNK3kdk17KMiniCalendarItem16getSelectBgColorEv@Base 2.5.2.0-0k0.2
+ _ZNK3kdk17KMiniCalendarItem17getCurrentBgColorEv@Base 2.5.2.0-0k0.2
+ _ZNK3kdk17KMiniCalendarItem17getHoverTextColorEv@Base 2.5.2.0-0k0.2
+ _ZNK3kdk17KMiniCalendarItem17getOtherTextColorEv@Base 2.5.2.0-0k0.2
+ _ZNK3kdk17KMiniCalendarItem18getHoverLunarColorEv@Base 2.5.2.0-0k0.2
+ _ZNK3kdk17KMiniCalendarItem18getOtherLunarColorEv@Base 2.5.2.0-0k0.2
+ _ZNK3kdk17KMiniCalendarItem18getSelectTextColorEv@Base 2.5.2.0-0k0.2
+ _ZNK3kdk17KMiniCalendarItem19getCurrentTextColorEv@Base 2.5.2.0-0k0.2
+ _ZNK3kdk17KMiniCalendarItem19getSelectLunarColorEv@Base 2.5.2.0-0k0.2
+ _ZNK3kdk17KMiniCalendarItem20getCurrentLunarColorEv@Base 2.5.2.0-0k0.2
+ _ZNK3kdk17KMiniCalendarItem7getDateEv@Base 2.5.2.0-0k0.2
+ _ZNK3kdk17KMiniCalendarItem8getLunarEv@Base 2.5.2.0-0k0.2
+ _ZNK3kdk17KMiniCalendarItem8sizeHintEv@Base 2.5.2.0-0k0.2
+ _ZNK3kdk17KMiniCalendarItem9getSelectEv@Base 2.5.2.0-0k0.2
  _ZNK3kdk17KSecurityLevelBar10metaObjectEv@Base 1.2.0.3
  _ZNK3kdk17KTranslucentFloor10metaObjectEv@Base 2.0.0.0
  _ZNK3kdk18KBreadCrumbPrivate10metaObjectEv@Base 1.2.0.3
+ _ZNK3kdk18KDragWidgetPrivate10metaObjectEv@Base 2.5.2.0-0k0.2
+ _ZNK3kdk18KFileWidgetPrivate10metaObjectEv@Base 2.5.2.0-0k0.2
  _ZNK3kdk18KHLineFramePrivate10metaObjectEv@Base 2.0.2.1
  _ZNK3kdk18KItemWidgetPrivate10metaObjectEv@Base 1.2.0.3
  _ZNK3kdk18KListWidgetPrivate10metaObjectEv@Base 1.2.0.3
+ _ZNK3kdk18KLunarCalendarInfo10metaObjectEv@Base 2.5.2.0-0k0.2
  _ZNK3kdk18KMenuButtonPrivate10metaObjectEv@Base 1.2.0.3
  _ZNK3kdk18KMessageBoxPrivate10metaObjectEv@Base 2.0.2.1
  _ZNK3kdk18KMessageBoxPrivate19dialogCodeForButtonEP15QAbstractButton@Base 2.0.2.1
  _ZNK3kdk18KPushButtonPrivate10metaObjectEv@Base 2.0.0.0
+ _ZNK3kdk18KTextEditorPrivate10metaObjectEv@Base 2.5.2.0-0k0.2
  _ZNK3kdk18KToolButtonPrivate10metaObjectEv@Base 1.2.0.3
  _ZNK3kdk18KVLineFramePrivate10metaObjectEv@Base 2.0.2.1
  _ZNK3kdk19KAboutDialogPrivate10metaObjectEv@Base 1.2.0.3
@@ -1249,6 +2052,32 @@
  _ZNK3kdk19KInputDialogPrivate12listViewTextEv@Base 1.2.0.3
  _ZNK3kdk19KInputDialogSpinBox10metaObjectEv@Base 1.2.0.3
  _ZNK3kdk19KInputDialogSpinBox8sizeHintEv@Base 2.0.2.1
+ _ZNK3kdk19KMiniCalendarWidget10metaObjectEv@Base 2.5.2.0-0k0.2
+ _ZNK3kdk19KMiniCalendarWidget12getShowLunarEv@Base 2.5.2.0-0k0.2
+ _ZNK3kdk19KMiniCalendarWidget12getWeekColorEv@Base 2.5.2.0-0k0.2
+ _ZNK3kdk19KMiniCalendarWidget13getLunarColorEv@Base 2.5.2.0-0k0.2
+ _ZNK3kdk19KMiniCalendarWidget13getSelectTypeEv@Base 2.5.2.0-0k0.2
+ _ZNK3kdk19KMiniCalendarWidget14getBorderColorEv@Base 2.5.2.0-0k0.2
+ _ZNK3kdk19KMiniCalendarWidget14getWeekBgColorEv@Base 2.5.2.0-0k0.2
+ _ZNK3kdk19KMiniCalendarWidget15getEnableBorderEv@Base 2.5.2.0-0k0.2
+ _ZNK3kdk19KMiniCalendarWidget15getHoverBgColorEv@Base 2.5.2.0-0k0.2
+ _ZNK3kdk19KMiniCalendarWidget15getOtherBgColorEv@Base 2.5.2.0-0k0.2
+ _ZNK3kdk19KMiniCalendarWidget15minimumSizeHintEv@Base 2.5.2.0-0k0.2
+ _ZNK3kdk19KMiniCalendarWidget16getCalendarStyleEv@Base 2.5.2.0-0k0.2
+ _ZNK3kdk19KMiniCalendarWidget16getSelectBgColorEv@Base 2.5.2.0-0k0.2
+ _ZNK3kdk19KMiniCalendarWidget16getWeekTextColorEv@Base 2.5.2.0-0k0.2
+ _ZNK3kdk19KMiniCalendarWidget17getCurrentBgColorEv@Base 2.5.2.0-0k0.2
+ _ZNK3kdk19KMiniCalendarWidget17getHoverTextColorEv@Base 2.5.2.0-0k0.2
+ _ZNK3kdk19KMiniCalendarWidget17getOtherTextColorEv@Base 2.5.2.0-0k0.2
+ _ZNK3kdk19KMiniCalendarWidget17getWeekNameFormatEv@Base 2.5.2.0-0k0.2
+ _ZNK3kdk19KMiniCalendarWidget18getHoverLunarColorEv@Base 2.5.2.0-0k0.2
+ _ZNK3kdk19KMiniCalendarWidget18getOtherLunarColorEv@Base 2.5.2.0-0k0.2
+ _ZNK3kdk19KMiniCalendarWidget18getSelectTextColorEv@Base 2.5.2.0-0k0.2
+ _ZNK3kdk19KMiniCalendarWidget19getCurrentTextColorEv@Base 2.5.2.0-0k0.2
+ _ZNK3kdk19KMiniCalendarWidget19getSelectLunarColorEv@Base 2.5.2.0-0k0.2
+ _ZNK3kdk19KMiniCalendarWidget20getCurrentLunarColorEv@Base 2.5.2.0-0k0.2
+ _ZNK3kdk19KMiniCalendarWidget7getDateEv@Base 2.5.2.0-0k0.2
+ _ZNK3kdk19KMiniCalendarWidget8sizeHintEv@Base 2.5.2.0-0k0.2
  _ZNK3kdk19KPressButtonPrivate10metaObjectEv@Base 2.0.0.0
  _ZNK3kdk19KProgressBarPrivate10metaObjectEv@Base 1.2.0.3
  _ZNK3kdk20KBorderButtonPrivate10metaObjectEv@Base 1.2.0.3
@@ -1257,28 +2086,43 @@
  _ZNK3kdk20KInputDialogLineEdit8sizeHintEv@Base 2.0.2.1
  _ZNK3kdk20KPasswordEditPrivate10metaObjectEv@Base 1.2.0.3
  _ZNK3kdk20KSwitchButtonPrivate10metaObjectEv@Base 1.2.0.3
+ _ZNK3kdk21KAddFileButtonPrivate10metaObjectEv@Base 2.5.2.0-0k0.2
  _ZNK3kdk21KColorComboBoxPrivate10metaObjectEv@Base 2.0.2.1
+ _ZNK3kdk21KLunarDateEditPrivate10metaObjectEv@Base 2.5.2.0-0k0.2
  _ZNK3kdk21KNavigationBarPrivate10metaObjectEv@Base 1.2.0.3
  _ZNK3kdk22KColorComboBoxDelegate10metaObjectEv@Base 2.0.2.1
  _ZNK3kdk22KColorComboBoxDelegate5paintEP8QPainterRK20QStyleOptionViewItemRK11QModelIndex@Base 2.0.2.1
  _ZNK3kdk22KColorComboBoxDelegate8sizeHintERK20QStyleOptionViewItemRK11QModelIndex@Base 2.0.2.1
+ _ZNK3kdk22KCustomDateEditPrivate10metaObjectEv@Base 2.5.2.0-0k0.2
  _ZNK3kdk22KProgressCirclePrivate10metaObjectEv@Base 1.2.0.3
  _ZNK3kdk22KProgressDialogPrivate10metaObjectEv@Base 1.2.0.3
  _ZNK3kdk22KSearchLineEditPrivate10metaObjectEv@Base 1.2.0.3
  _ZNK3kdk23KBackgroundGroupPrivate10metaObjectEv@Base 2.0.2.1
  _ZNK3kdk23KPixmapContainerPrivate10metaObjectEv@Base 1.2.0.3
+ _ZNK3kdk23KSecurityQuestionDialog10metaObjectEv@Base 2.5.2.0-0k0.2
  _ZNK3kdk23KUninstallDialogPrivate10metaObjectEv@Base 1.2.0.3
  _ZNK3kdk23KWindowButtonBarPrivate10metaObjectEv@Base 1.2.0.3
  _ZNK3kdk24KBorderlessButtonPrivate10metaObjectEv@Base 1.2.0.3
  _ZNK3kdk24KListViewDelegatePrivate10metaObjectEv@Base 1.2.0.3
+ _ZNK3kdk24KMiniCalendarItemPrivate10metaObjectEv@Base 2.5.2.0-0k0.2
  _ZNK3kdk24KSecurityLevelBarPrivate10metaObjectEv@Base 1.2.0.3
  _ZNK3kdk24KTranslucentFloorPrivate10metaObjectEv@Base 2.0.0.0
  _ZNK3kdk25KInputDialogDoubleSpinBox10metaObjectEv@Base 1.2.0.3
  _ZNK3kdk25KInputDialogDoubleSpinBox8sizeHintEv@Base 2.0.2.1
+ _ZNK3kdk25KLunarCalendarInfoPrivate10metaObjectEv@Base 2.5.2.0-0k0.2
+ _ZNK3kdk26KMiniCalendarWidgetPrivate10metaObjectEv@Base 2.5.2.0-0k0.2
+ _ZNK3kdk30KSecurityQuestionDialogPrivate10metaObjectEv@Base 2.5.2.0-0k0.2
  _ZNK3kdk4KTag10metaObjectEv@Base 1.2.0.3
  _ZNK3kdk4KTag8sizeHintEv@Base 2.0.2.1
  _ZNK3kdk6KBadge10metaObjectEv@Base 1.2.0.3
  _ZNK3kdk6KBadge15isValueVisiableEv@Base 1.2.0.3
+ _ZNK3kdk6KCrumb10metaObjectEv@Base 2.5.2.0-0k0.2
+ _ZNK3kdk6KCrumb11tabSizeHintEi@Base 2.5.2.0-0k0.2
+ _ZNK3kdk6KCrumb4iconEv@Base 2.5.2.0-0k0.2
+ _ZNK3kdk6KCrumb6isFlatEv@Base 2.5.2.0-0k0.2
+ _ZNK3kdk6KLabel10metaObjectEv@Base 2.5.2.0-0k0.2
+ _ZNK3kdk6KLabel6pixmapEv@Base 2.5.2.0-0k0.2
+ _ZNK3kdk6KLabel8sizeHintEv@Base 2.5.2.0-0k0.2
  _ZNK3kdk7KDialog10metaObjectEv@Base 1.2.0.3
  _ZNK3kdk7KSlider10metaObjectEv@Base 1.2.0.3
  _ZNK3kdk7KSlider12tickIntervalEv@Base 1.2.0.3
@@ -1297,69 +2141,106 @@
  _ZNK3kdk8Delegate8sizeHintERK20QStyleOptionViewItemRK11QModelIndex@Base 1.2.0.3
  _ZNK3kdk8KIconBar10metaObjectEv@Base 1.2.0.3
  _ZNK3kdk8KIconBar8sizeHintEv@Base 2.0.2.1
+ _ZNK3kdk8KToolBar10metaObjectEv@Base 2.5.2.0-0k0.2
+ _ZNK3kdk9KLineEdit10metaObjectEv@Base 2.5.2.0-0k0.2
  _ZNK3kdk9KListView10metaObjectEv@Base 1.2.0.3
+ _ZNK3kdk9KTextEdit10metaObjectEv@Base 2.5.2.0-0k0.2
+ _ZNK3kdk9KTextEdit6pixmapEv@Base 2.5.2.0-0k0.2
  _ZNK3kdk9LinkLabel10metaObjectEv@Base 2.0.0.0
+ _ZTI13KCustomTabBar@Base 2.5.2.0-0k0.2
  _ZTI15ThemeController@Base 1.2.0.3
+ _ZTIN3kdk10FileDialogE@Base 2.5.2.0-0k0.2
  _ZTIN3kdk10KBallonTipE@Base 1.2.0.3
  _ZTIN3kdk10KButtonBoxE@Base 2.0.2.1
+ _ZTIN3kdk10KDirTabBarE@Base 2.5.2.0-0k0.2
+ _ZTIN3kdk10KTableViewE@Base 2.5.2.0-0k0.2
  _ZTIN3kdk11KBreadCrumbE@Base 1.2.0.3
+ _ZTIN3kdk11KClockTimerE@Base 2.5.2.0-0k0.2
  _ZTIN3kdk11KComboStyleE@Base 2.0.2.1
+ _ZTIN3kdk11KDragWidgetE@Base 2.5.2.0-0k0.2
+ _ZTIN3kdk11KFileWidgetE@Base 2.5.2.0-0k0.2
  _ZTIN3kdk11KHLineFrameE@Base 2.0.2.1
  _ZTIN3kdk11KItemWidgetE@Base 1.2.0.3
  _ZTIN3kdk11KListWidgetE@Base 1.2.0.3
  _ZTIN3kdk11KMenuButtonE@Base 1.2.0.3
  _ZTIN3kdk11KMessageBoxE@Base 2.0.2.1
  _ZTIN3kdk11KPushButtonE@Base 2.0.0.0
+ _ZTIN3kdk11KTableModelE@Base 2.5.2.0-0k0.2
  _ZTIN3kdk11KTagPrivateE@Base 1.2.0.3
+ _ZTIN3kdk11KTextEditorE@Base 2.5.2.0-0k0.2
  _ZTIN3kdk11KToolButtonE@Base 1.2.0.3
  _ZTIN3kdk11KVLineFrameE@Base 2.0.2.1
  _ZTIN3kdk11XAtomHelperE@Base 1.2.0.3
+ _ZTIN3kdk12CustomButtonE@Base 2.5.2.0-0k0.2
  _ZTIN3kdk12KAboutDialogE@Base 1.2.0.3
+ _ZTIN3kdk12KArrowTabBarE@Base 2.5.2.0-0k0.2
  _ZTIN3kdk12KColorButtonE@Base 2.0.2.1
  _ZTIN3kdk12KInputDialogE@Base 1.2.0.3
+ _ZTIN3kdk12KIntroWidgetE@Base 2.5.2.0-0k0.2
  _ZTIN3kdk12KPressButtonE@Base 2.0.0.0
  _ZTIN3kdk12KProgressBarE@Base 1.2.0.3
+ _ZTIN3kdk12KTitleWindowE@Base 2.5.2.0-0k0.2
+ _ZTIN3kdk13AddFileDialogE@Base 2.5.2.0-0k0.2
  _ZTIN3kdk13KBadgePrivateE@Base 1.2.0.3
  _ZTIN3kdk13KBorderButtonE@Base 1.2.0.3
  _ZTIN3kdk13KBubbleWidgetE@Base 2.0.0.0
  _ZTIN3kdk13KCommentPanelE@Base 1.2.0.3
+ _ZTIN3kdk13KLabelPrivateE@Base 2.5.2.0-0k0.2
+ _ZTIN3kdk13KLoopPlayPageE@Base 2.5.2.0-0k0.2
+ _ZTIN3kdk13KNativeTabbarE@Base 2.5.2.0-0k0.2
  _ZTIN3kdk13KPasswordEditE@Base 1.2.0.3
  _ZTIN3kdk13KSwitchButtonE@Base 1.2.0.3
+ _ZTIN3kdk14KAddFileButtonE@Base 2.5.2.0-0k0.2
  _ZTIN3kdk14KColorComboBoxE@Base 2.0.2.1
  _ZTIN3kdk14KDialogPrivateE@Base 1.2.0.3
+ _ZTIN3kdk14KLunarDateEditE@Base 2.5.2.0-0k0.2
  _ZTIN3kdk14KNavigationBarE@Base 1.2.0.3
+ _ZTIN3kdk14KProgressLabelE@Base 2.5.2.0-0k0.2
  _ZTIN3kdk14KSliderPrivateE@Base 1.2.0.3
  _ZTIN3kdk14KTabBarPrivateE@Base 1.2.0.3
  _ZTIN3kdk14KWidgetPrivateE@Base 1.2.0.3
+ _ZTIN3kdk15KComboBoxWidgetE@Base 2.5.2.0-0k0.2
+ _ZTIN3kdk15KCustomDateEditE@Base 2.5.2.0-0k0.2
  _ZTIN3kdk15KIconBarPrivateE@Base 1.2.0.3
  _ZTIN3kdk15KProgressCircleE@Base 1.2.0.3
  _ZTIN3kdk15KProgressDialogE@Base 1.2.0.3
  _ZTIN3kdk15KSearchLineEditE@Base 1.2.0.3
+ _ZTIN3kdk15KToolBarPrivateE@Base 2.5.2.0-0k0.2
  _ZTIN3kdk15ParmscontrollerE@Base 2.0.2.1
  _ZTIN3kdk16KBackgroundGroupE@Base 2.0.2.1
  _ZTIN3kdk16KListViewPrivateE@Base 1.2.0.3
+ _ZTIN3kdk16KNavigationTrailE@Base 2.5.2.0-0k0.2
  _ZTIN3kdk16KPixmapContainerE@Base 1.2.0.3
+ _ZTIN3kdk16KTableHeaderViewE@Base 2.5.2.0-0k0.2
+ _ZTIN3kdk16KTextEditPrivateE@Base 2.5.2.0-0k0.2
  _ZTIN3kdk16KUninstallDialogE@Base 1.2.0.3
  _ZTIN3kdk16KWindowButtonBarE@Base 1.2.0.3
  _ZTIN3kdk16ListViewDelegateE@Base 2.0.2.1
  _ZTIN3kdk17KBallonTipPrivateE@Base 1.2.0.3
  _ZTIN3kdk17KBorderlessButtonE@Base 1.2.0.3
  _ZTIN3kdk17KButtonBoxPrivateE@Base 2.0.2.1
+ _ZTIN3kdk17KDirTabBarPrivateE@Base 2.5.2.0-0k0.2
  _ZTIN3kdk17KListViewDelegateE@Base 1.2.0.3
+ _ZTIN3kdk17KMiniCalendarItemE@Base 2.5.2.0-0k0.2
  _ZTIN3kdk17KSecurityLevelBarE@Base 1.2.0.3
  _ZTIN3kdk17KTranslucentFloorE@Base 2.0.0.0
  _ZTIN3kdk18KBreadCrumbPrivateE@Base 1.2.0.3
+ _ZTIN3kdk18KDragWidgetPrivateE@Base 2.5.2.0-0k0.2
+ _ZTIN3kdk18KFileWidgetPrivateE@Base 2.5.2.0-0k0.2
  _ZTIN3kdk18KHLineFramePrivateE@Base 2.0.2.1
  _ZTIN3kdk18KItemWidgetPrivateE@Base 1.2.0.3
  _ZTIN3kdk18KListWidgetPrivateE@Base 1.2.0.3
+ _ZTIN3kdk18KLunarCalendarInfoE@Base 2.5.2.0-0k0.2
  _ZTIN3kdk18KMenuButtonPrivateE@Base 1.2.0.3
  _ZTIN3kdk18KMessageBoxPrivateE@Base 2.0.2.1
  _ZTIN3kdk18KPushButtonPrivateE@Base 2.0.0.0
+ _ZTIN3kdk18KTextEditorPrivateE@Base 2.5.2.0-0k0.2
  _ZTIN3kdk18KToolButtonPrivateE@Base 1.2.0.3
  _ZTIN3kdk18KVLineFramePrivateE@Base 2.0.2.1
  _ZTIN3kdk19KAboutDialogPrivateE@Base 1.2.0.3
  _ZTIN3kdk19KColorButtonPrivateE@Base 2.0.2.1
  _ZTIN3kdk19KInputDialogSpinBoxE@Base 1.2.0.3
+ _ZTIN3kdk19KMiniCalendarWidgetE@Base 2.5.2.0-0k0.2
  _ZTIN3kdk19KPressButtonPrivateE@Base 2.0.0.0
  _ZTIN3kdk19KProgressBarPrivateE@Base 1.2.0.3
  _ZTIN3kdk20KBorderButtonPrivateE@Base 1.2.0.3
@@ -1368,23 +2249,33 @@
  _ZTIN3kdk20KInputDialogLineEditE@Base 2.0.2.1
  _ZTIN3kdk20KPasswordEditPrivateE@Base 1.2.0.3
  _ZTIN3kdk20KSwitchButtonPrivateE@Base 1.2.0.3
+ _ZTIN3kdk21KAddFileButtonPrivateE@Base 2.5.2.0-0k0.2
  _ZTIN3kdk21KColorComboBoxPrivateE@Base 2.0.2.1
+ _ZTIN3kdk21KLunarDateEditPrivateE@Base 2.5.2.0-0k0.2
  _ZTIN3kdk21KNavigationBarPrivateE@Base 1.2.0.3
  _ZTIN3kdk22KColorComboBoxDelegateE@Base 2.0.2.1
+ _ZTIN3kdk22KCustomDateEditPrivateE@Base 2.5.2.0-0k0.2
  _ZTIN3kdk22KProgressCirclePrivateE@Base 1.2.0.3
  _ZTIN3kdk22KProgressDialogPrivateE@Base 1.2.0.3
  _ZTIN3kdk22KSearchLineEditPrivateE@Base 1.2.0.3
  _ZTIN3kdk23KBackgroundGroupPrivateE@Base 2.0.2.1
  _ZTIN3kdk23KPixmapContainerPrivateE@Base 1.2.0.3
+ _ZTIN3kdk23KSecurityQuestionDialogE@Base 2.5.2.0-0k0.2
  _ZTIN3kdk23KUninstallDialogPrivateE@Base 1.2.0.3
  _ZTIN3kdk23KWindowButtonBarPrivateE@Base 1.2.0.3
  _ZTIN3kdk24KBorderlessButtonPrivateE@Base 1.2.0.3
  _ZTIN3kdk24KListViewDelegatePrivateE@Base 1.2.0.3
+ _ZTIN3kdk24KMiniCalendarItemPrivateE@Base 2.5.2.0-0k0.2
  _ZTIN3kdk24KSecurityLevelBarPrivateE@Base 1.2.0.3
  _ZTIN3kdk24KTranslucentFloorPrivateE@Base 2.0.0.0
  _ZTIN3kdk25KInputDialogDoubleSpinBoxE@Base 1.2.0.3
+ _ZTIN3kdk25KLunarCalendarInfoPrivateE@Base 2.5.2.0-0k0.2
+ _ZTIN3kdk26KMiniCalendarWidgetPrivateE@Base 2.5.2.0-0k0.2
+ _ZTIN3kdk30KSecurityQuestionDialogPrivateE@Base 2.5.2.0-0k0.2
  _ZTIN3kdk4KTagE@Base 1.2.0.3
  _ZTIN3kdk6KBadgeE@Base 1.2.0.3
+ _ZTIN3kdk6KCrumbE@Base 2.5.2.0-0k0.2
+ _ZTIN3kdk6KLabelE@Base 2.5.2.0-0k0.2
  _ZTIN3kdk7KDialogE@Base 1.2.0.3
  _ZTIN3kdk7KSliderE@Base 1.2.0.3
  _ZTIN3kdk7KTabBarE@Base 1.2.0.3
@@ -1394,72 +2285,109 @@
  _ZTIN3kdk7effects20KShadowHelperPrivateE@Base 2.0.0.0
  _ZTIN3kdk8DelegateE@Base 1.2.0.3
  _ZTIN3kdk8KIconBarE@Base 1.2.0.3
+ _ZTIN3kdk8KToolBarE@Base 2.5.2.0-0k0.2
  _ZTIN3kdk8ListViewE@Base 2.0.0.0
+ _ZTIN3kdk9KLineEditE@Base 2.5.2.0-0k0.2
  _ZTIN3kdk9KListViewE@Base 1.2.0.3
+ _ZTIN3kdk9KTextEditE@Base 2.5.2.0-0k0.2
  _ZTIN3kdk9LinkLabelE@Base 2.0.0.0
+ _ZTS13KCustomTabBar@Base 2.5.2.0-0k0.2
  _ZTS15ThemeController@Base 1.2.0.3
+ _ZTSN3kdk10FileDialogE@Base 2.5.2.0-0k0.2
  _ZTSN3kdk10KBallonTipE@Base 1.2.0.3
  _ZTSN3kdk10KButtonBoxE@Base 2.0.2.1
+ _ZTSN3kdk10KDirTabBarE@Base 2.5.2.0-0k0.2
+ _ZTSN3kdk10KTableViewE@Base 2.5.2.0-0k0.2
  _ZTSN3kdk10StarWidgetE@Base 1.2.0.3
  _ZTSN3kdk11KBreadCrumbE@Base 1.2.0.3
+ _ZTSN3kdk11KClockTimerE@Base 2.5.2.0-0k0.2
  _ZTSN3kdk11KComboStyleE@Base 2.0.2.1
+ _ZTSN3kdk11KDragWidgetE@Base 2.5.2.0-0k0.2
+ _ZTSN3kdk11KFileWidgetE@Base 2.5.2.0-0k0.2
  _ZTSN3kdk11KHLineFrameE@Base 2.0.2.1
  _ZTSN3kdk11KItemWidgetE@Base 1.2.0.3
  _ZTSN3kdk11KListWidgetE@Base 1.2.0.3
  _ZTSN3kdk11KMenuButtonE@Base 1.2.0.3
  _ZTSN3kdk11KMessageBoxE@Base 2.0.2.1
  _ZTSN3kdk11KPushButtonE@Base 2.0.0.0
+ _ZTSN3kdk11KTableModelE@Base 2.5.2.0-0k0.2
  _ZTSN3kdk11KTagPrivateE@Base 1.2.0.3
+ _ZTSN3kdk11KTextEditorE@Base 2.5.2.0-0k0.2
  _ZTSN3kdk11KToolButtonE@Base 1.2.0.3
  _ZTSN3kdk11KVLineFrameE@Base 2.0.2.1
  _ZTSN3kdk11XAtomHelperE@Base 1.2.0.3
+ _ZTSN3kdk12CustomButtonE@Base 2.5.2.0-0k0.2
  _ZTSN3kdk12KAboutDialogE@Base 1.2.0.3
+ _ZTSN3kdk12KArrowTabBarE@Base 2.5.2.0-0k0.2
  _ZTSN3kdk12KColorButtonE@Base 2.0.2.1
  _ZTSN3kdk12KInputDialogE@Base 1.2.0.3
+ _ZTSN3kdk12KIntroWidgetE@Base 2.5.2.0-0k0.2
  _ZTSN3kdk12KPressButtonE@Base 2.0.0.0
  _ZTSN3kdk12KProgressBarE@Base 1.2.0.3
+ _ZTSN3kdk12KTitleWindowE@Base 2.5.2.0-0k0.2
+ _ZTSN3kdk13AddFileDialogE@Base 2.5.2.0-0k0.2
  _ZTSN3kdk13KBadgePrivateE@Base 1.2.0.3
  _ZTSN3kdk13KBorderButtonE@Base 1.2.0.3
  _ZTSN3kdk13KBubbleWidgetE@Base 2.0.0.0
  _ZTSN3kdk13KCommentPanelE@Base 1.2.0.3
+ _ZTSN3kdk13KLabelPrivateE@Base 2.5.2.0-0k0.2
+ _ZTSN3kdk13KLoopPlayPageE@Base 2.5.2.0-0k0.2
+ _ZTSN3kdk13KNativeTabbarE@Base 2.5.2.0-0k0.2
  _ZTSN3kdk13KPasswordEditE@Base 1.2.0.3
  _ZTSN3kdk13KSwitchButtonE@Base 1.2.0.3
+ _ZTSN3kdk14KAddFileButtonE@Base 2.5.2.0-0k0.2
  _ZTSN3kdk14KColorComboBoxE@Base 2.0.2.1
  _ZTSN3kdk14KDialogPrivateE@Base 1.2.0.3
+ _ZTSN3kdk14KLunarDateEditE@Base 2.5.2.0-0k0.2
  _ZTSN3kdk14KNavigationBarE@Base 1.2.0.3
+ _ZTSN3kdk14KProgressLabelE@Base 2.5.2.0-0k0.2
  _ZTSN3kdk14KSliderPrivateE@Base 1.2.0.3
  _ZTSN3kdk14KTabBarPrivateE@Base 1.2.0.3
  _ZTSN3kdk14KWidgetPrivateE@Base 1.2.0.3
+ _ZTSN3kdk15KComboBoxWidgetE@Base 2.5.2.0-0k0.2
+ _ZTSN3kdk15KCustomDateEditE@Base 2.5.2.0-0k0.2
  _ZTSN3kdk15KIconBarPrivateE@Base 1.2.0.3
  _ZTSN3kdk15KProgressCircleE@Base 1.2.0.3
  _ZTSN3kdk15KProgressDialogE@Base 1.2.0.3
  _ZTSN3kdk15KSearchLineEditE@Base 1.2.0.3
+ _ZTSN3kdk15KToolBarPrivateE@Base 2.5.2.0-0k0.2
  _ZTSN3kdk15ParmscontrollerE@Base 2.0.2.1
+ _ZTSN3kdk16CursorProxyStyleE@Base 2.5.2.0-0k0.2
  _ZTSN3kdk16KBackgroundGroupE@Base 2.0.2.1
  _ZTSN3kdk16KListViewPrivateE@Base 1.2.0.3
+ _ZTSN3kdk16KNavigationTrailE@Base 2.5.2.0-0k0.2
  _ZTSN3kdk16KPixmapContainerE@Base 1.2.0.3
+ _ZTSN3kdk16KTableHeaderViewE@Base 2.5.2.0-0k0.2
+ _ZTSN3kdk16KTextEditPrivateE@Base 2.5.2.0-0k0.2
  _ZTSN3kdk16KUninstallDialogE@Base 1.2.0.3
  _ZTSN3kdk16KWindowButtonBarE@Base 1.2.0.3
  _ZTSN3kdk16ListViewDelegateE@Base 2.0.2.1
  _ZTSN3kdk17KBallonTipPrivateE@Base 1.2.0.3
  _ZTSN3kdk17KBorderlessButtonE@Base 1.2.0.3
  _ZTSN3kdk17KButtonBoxPrivateE@Base 2.0.2.1
+ _ZTSN3kdk17KDirTabBarPrivateE@Base 2.5.2.0-0k0.2
  _ZTSN3kdk17KListViewDelegateE@Base 1.2.0.3
+ _ZTSN3kdk17KMiniCalendarItemE@Base 2.5.2.0-0k0.2
  _ZTSN3kdk17KSecurityLevelBarE@Base 1.2.0.3
  _ZTSN3kdk17KTranslucentFloorE@Base 2.0.0.0
  _ZTSN3kdk18KBreadCrumbPrivateE@Base 1.2.0.3
+ _ZTSN3kdk18KDragWidgetPrivateE@Base 2.5.2.0-0k0.2
+ _ZTSN3kdk18KFileWidgetPrivateE@Base 2.5.2.0-0k0.2
  _ZTSN3kdk18KHLineFramePrivateE@Base 2.0.2.1
  _ZTSN3kdk18KItemWidgetPrivateE@Base 1.2.0.3
  _ZTSN3kdk18KListWidgetPrivateE@Base 1.2.0.3
+ _ZTSN3kdk18KLunarCalendarInfoE@Base 2.5.2.0-0k0.2
  _ZTSN3kdk18KMenuButtonPrivateE@Base 1.2.0.3
  _ZTSN3kdk18KMessageBoxPrivateE@Base 2.0.2.1
  _ZTSN3kdk18KPushButtonPrivateE@Base 2.0.0.0
+ _ZTSN3kdk18KTextEditorPrivateE@Base 2.5.2.0-0k0.2
  _ZTSN3kdk18KToolButtonPrivateE@Base 1.2.0.3
  _ZTSN3kdk18KVLineFramePrivateE@Base 2.0.2.1
  _ZTSN3kdk19KAboutDialogPrivateE@Base 1.2.0.3
  _ZTSN3kdk19KColorButtonPrivateE@Base 2.0.2.1
  _ZTSN3kdk19KInputDialogPrivateE@Base 1.2.0.3
  _ZTSN3kdk19KInputDialogSpinBoxE@Base 1.2.0.3
+ _ZTSN3kdk19KMiniCalendarWidgetE@Base 2.5.2.0-0k0.2
  _ZTSN3kdk19KPressButtonPrivateE@Base 2.0.0.0
  _ZTSN3kdk19KProgressBarPrivateE@Base 1.2.0.3
  _ZTSN3kdk20KBorderButtonPrivateE@Base 1.2.0.3
@@ -1469,23 +2397,33 @@
  _ZTSN3kdk20KInputDialogListViewE@Base 1.2.0.3
  _ZTSN3kdk20KPasswordEditPrivateE@Base 1.2.0.3
  _ZTSN3kdk20KSwitchButtonPrivateE@Base 1.2.0.3
+ _ZTSN3kdk21KAddFileButtonPrivateE@Base 2.5.2.0-0k0.2
  _ZTSN3kdk21KColorComboBoxPrivateE@Base 2.0.2.1
+ _ZTSN3kdk21KLunarDateEditPrivateE@Base 2.5.2.0-0k0.2
  _ZTSN3kdk21KNavigationBarPrivateE@Base 1.2.0.3
  _ZTSN3kdk22KColorComboBoxDelegateE@Base 2.0.2.1
+ _ZTSN3kdk22KCustomDateEditPrivateE@Base 2.5.2.0-0k0.2
  _ZTSN3kdk22KProgressCirclePrivateE@Base 1.2.0.3
  _ZTSN3kdk22KProgressDialogPrivateE@Base 1.2.0.3
  _ZTSN3kdk22KSearchLineEditPrivateE@Base 1.2.0.3
  _ZTSN3kdk23KBackgroundGroupPrivateE@Base 2.0.2.1
  _ZTSN3kdk23KPixmapContainerPrivateE@Base 1.2.0.3
+ _ZTSN3kdk23KSecurityQuestionDialogE@Base 2.5.2.0-0k0.2
  _ZTSN3kdk23KUninstallDialogPrivateE@Base 1.2.0.3
  _ZTSN3kdk23KWindowButtonBarPrivateE@Base 1.2.0.3
  _ZTSN3kdk24KBorderlessButtonPrivateE@Base 1.2.0.3
  _ZTSN3kdk24KListViewDelegatePrivateE@Base 1.2.0.3
+ _ZTSN3kdk24KMiniCalendarItemPrivateE@Base 2.5.2.0-0k0.2
  _ZTSN3kdk24KSecurityLevelBarPrivateE@Base 1.2.0.3
  _ZTSN3kdk24KTranslucentFloorPrivateE@Base 2.0.0.0
  _ZTSN3kdk25KInputDialogDoubleSpinBoxE@Base 1.2.0.3
+ _ZTSN3kdk25KLunarCalendarInfoPrivateE@Base 2.5.2.0-0k0.2
+ _ZTSN3kdk26KMiniCalendarWidgetPrivateE@Base 2.5.2.0-0k0.2
+ _ZTSN3kdk30KSecurityQuestionDialogPrivateE@Base 2.5.2.0-0k0.2
  _ZTSN3kdk4KTagE@Base 1.2.0.3
  _ZTSN3kdk6KBadgeE@Base 1.2.0.3
+ _ZTSN3kdk6KCrumbE@Base 2.5.2.0-0k0.2
+ _ZTSN3kdk6KLabelE@Base 2.5.2.0-0k0.2
  _ZTSN3kdk7KDialogE@Base 1.2.0.3
  _ZTSN3kdk7KSliderE@Base 1.2.0.3
  _ZTSN3kdk7KTabBarE@Base 1.2.0.3
@@ -1495,69 +2433,105 @@
  _ZTSN3kdk7effects20KShadowHelperPrivateE@Base 2.0.0.0
  _ZTSN3kdk8DelegateE@Base 1.2.0.3
  _ZTSN3kdk8KIconBarE@Base 1.2.0.3
+ _ZTSN3kdk8KToolBarE@Base 2.5.2.0-0k0.2
  _ZTSN3kdk8ListViewE@Base 2.0.0.0
+ _ZTSN3kdk9KLineEditE@Base 2.5.2.0-0k0.2
  _ZTSN3kdk9KListViewE@Base 1.2.0.3
+ _ZTSN3kdk9KTextEditE@Base 2.5.2.0-0k0.2
  _ZTSN3kdk9LinkLabelE@Base 2.0.0.0
+ _ZTV13KCustomTabBar@Base 2.5.2.0-0k0.2
+ _ZTVN3kdk10FileDialogE@Base 2.5.2.0-0k0.2
  _ZTVN3kdk10KBallonTipE@Base 1.2.0.3
  _ZTVN3kdk10KButtonBoxE@Base 2.0.2.1
+ _ZTVN3kdk10KDirTabBarE@Base 2.5.2.0-0k0.2
+ _ZTVN3kdk10KTableViewE@Base 2.5.2.0-0k0.2
  _ZTVN3kdk11KBreadCrumbE@Base 1.2.0.3
+ _ZTVN3kdk11KClockTimerE@Base 2.5.2.0-0k0.2
  _ZTVN3kdk11KComboStyleE@Base 2.0.2.1
+ _ZTVN3kdk11KDragWidgetE@Base 2.5.2.0-0k0.2
+ _ZTVN3kdk11KFileWidgetE@Base 2.5.2.0-0k0.2
  _ZTVN3kdk11KHLineFrameE@Base 2.0.2.1
  _ZTVN3kdk11KItemWidgetE@Base 1.2.0.3
  _ZTVN3kdk11KListWidgetE@Base 1.2.0.3
  _ZTVN3kdk11KMenuButtonE@Base 1.2.0.3
  _ZTVN3kdk11KMessageBoxE@Base 2.0.2.1
  _ZTVN3kdk11KPushButtonE@Base 2.0.0.0
+ _ZTVN3kdk11KTableModelE@Base 2.5.2.0-0k0.2
  _ZTVN3kdk11KTagPrivateE@Base 1.2.0.3
+ _ZTVN3kdk11KTextEditorE@Base 2.5.2.0-0k0.2
  _ZTVN3kdk11KToolButtonE@Base 1.2.0.3
  _ZTVN3kdk11KVLineFrameE@Base 2.0.2.1
  _ZTVN3kdk11XAtomHelperE@Base 1.2.0.3
+ _ZTVN3kdk12CustomButtonE@Base 2.5.2.0-0k0.2
  _ZTVN3kdk12KAboutDialogE@Base 1.2.0.3
+ _ZTVN3kdk12KArrowTabBarE@Base 2.5.2.0-0k0.2
  _ZTVN3kdk12KColorButtonE@Base 2.0.2.1
  _ZTVN3kdk12KInputDialogE@Base 1.2.0.3
+ _ZTVN3kdk12KIntroWidgetE@Base 2.5.2.0-0k0.2
  _ZTVN3kdk12KPressButtonE@Base 2.0.0.0
  _ZTVN3kdk12KProgressBarE@Base 1.2.0.3
+ _ZTVN3kdk12KTitleWindowE@Base 2.5.2.0-0k0.2
+ _ZTVN3kdk13AddFileDialogE@Base 2.5.2.0-0k0.2
  _ZTVN3kdk13KBadgePrivateE@Base 1.2.0.3
  _ZTVN3kdk13KBorderButtonE@Base 1.2.0.3
  _ZTVN3kdk13KBubbleWidgetE@Base 2.0.0.0
  _ZTVN3kdk13KCommentPanelE@Base 1.2.0.3
+ _ZTVN3kdk13KLabelPrivateE@Base 2.5.2.0-0k0.2
+ _ZTVN3kdk13KLoopPlayPageE@Base 2.5.2.0-0k0.2
+ _ZTVN3kdk13KNativeTabbarE@Base 2.5.2.0-0k0.2
  _ZTVN3kdk13KPasswordEditE@Base 1.2.0.3
  _ZTVN3kdk13KSwitchButtonE@Base 1.2.0.3
+ _ZTVN3kdk14KAddFileButtonE@Base 2.5.2.0-0k0.2
  _ZTVN3kdk14KColorComboBoxE@Base 2.0.2.1
  _ZTVN3kdk14KDialogPrivateE@Base 1.2.0.3
+ _ZTVN3kdk14KLunarDateEditE@Base 2.5.2.0-0k0.2
  _ZTVN3kdk14KNavigationBarE@Base 1.2.0.3
+ _ZTVN3kdk14KProgressLabelE@Base 2.5.2.0-0k0.2
  _ZTVN3kdk14KSliderPrivateE@Base 1.2.0.3
  _ZTVN3kdk14KTabBarPrivateE@Base 1.2.0.3
  _ZTVN3kdk14KWidgetPrivateE@Base 1.2.0.3
+ _ZTVN3kdk15KComboBoxWidgetE@Base 2.5.2.0-0k0.2
+ _ZTVN3kdk15KCustomDateEditE@Base 2.5.2.0-0k0.2
  _ZTVN3kdk15KIconBarPrivateE@Base 1.2.0.3
  _ZTVN3kdk15KProgressCircleE@Base 1.2.0.3
  _ZTVN3kdk15KProgressDialogE@Base 1.2.0.3
  _ZTVN3kdk15KSearchLineEditE@Base 1.2.0.3
+ _ZTVN3kdk15KToolBarPrivateE@Base 2.5.2.0-0k0.2
  _ZTVN3kdk15ParmscontrollerE@Base 2.0.2.1
  _ZTVN3kdk16KBackgroundGroupE@Base 2.0.2.1
  _ZTVN3kdk16KListViewPrivateE@Base 1.2.0.3
+ _ZTVN3kdk16KNavigationTrailE@Base 2.5.2.0-0k0.2
  _ZTVN3kdk16KPixmapContainerE@Base 1.2.0.3
+ _ZTVN3kdk16KTableHeaderViewE@Base 2.5.2.0-0k0.2
+ _ZTVN3kdk16KTextEditPrivateE@Base 2.5.2.0-0k0.2
  _ZTVN3kdk16KUninstallDialogE@Base 1.2.0.3
  _ZTVN3kdk16KWindowButtonBarE@Base 1.2.0.3
  _ZTVN3kdk16ListViewDelegateE@Base 2.0.2.1
  _ZTVN3kdk17KBallonTipPrivateE@Base 1.2.0.3
  _ZTVN3kdk17KBorderlessButtonE@Base 1.2.0.3
  _ZTVN3kdk17KButtonBoxPrivateE@Base 2.0.2.1
+ _ZTVN3kdk17KDirTabBarPrivateE@Base 2.5.2.0-0k0.2
  _ZTVN3kdk17KListViewDelegateE@Base 1.2.0.3
+ _ZTVN3kdk17KMiniCalendarItemE@Base 2.5.2.0-0k0.2
  _ZTVN3kdk17KSecurityLevelBarE@Base 1.2.0.3
  _ZTVN3kdk17KTranslucentFloorE@Base 2.0.0.0
  _ZTVN3kdk18KBreadCrumbPrivateE@Base 1.2.0.3
+ _ZTVN3kdk18KDragWidgetPrivateE@Base 2.5.2.0-0k0.2
+ _ZTVN3kdk18KFileWidgetPrivateE@Base 2.5.2.0-0k0.2
  _ZTVN3kdk18KHLineFramePrivateE@Base 2.0.2.1
  _ZTVN3kdk18KItemWidgetPrivateE@Base 1.2.0.3
  _ZTVN3kdk18KListWidgetPrivateE@Base 1.2.0.3
+ _ZTVN3kdk18KLunarCalendarInfoE@Base 2.5.2.0-0k0.2
  _ZTVN3kdk18KMenuButtonPrivateE@Base 1.2.0.3
  _ZTVN3kdk18KMessageBoxPrivateE@Base 2.0.2.1
  _ZTVN3kdk18KPushButtonPrivateE@Base 2.0.0.0
+ _ZTVN3kdk18KTextEditorPrivateE@Base 2.5.2.0-0k0.2
  _ZTVN3kdk18KToolButtonPrivateE@Base 1.2.0.3
  _ZTVN3kdk18KVLineFramePrivateE@Base 2.0.2.1
  _ZTVN3kdk19KAboutDialogPrivateE@Base 1.2.0.3
  _ZTVN3kdk19KColorButtonPrivateE@Base 2.0.2.1
  _ZTVN3kdk19KInputDialogSpinBoxE@Base 1.2.0.3
+ _ZTVN3kdk19KMiniCalendarWidgetE@Base 2.5.2.0-0k0.2
  _ZTVN3kdk19KPressButtonPrivateE@Base 2.0.0.0
  _ZTVN3kdk19KProgressBarPrivateE@Base 1.2.0.3
  _ZTVN3kdk20KBorderButtonPrivateE@Base 1.2.0.3
@@ -1566,23 +2540,33 @@
  _ZTVN3kdk20KInputDialogLineEditE@Base 2.0.2.1
  _ZTVN3kdk20KPasswordEditPrivateE@Base 1.2.0.3
  _ZTVN3kdk20KSwitchButtonPrivateE@Base 1.2.0.3
+ _ZTVN3kdk21KAddFileButtonPrivateE@Base 2.5.2.0-0k0.2
  _ZTVN3kdk21KColorComboBoxPrivateE@Base 2.0.2.1
+ _ZTVN3kdk21KLunarDateEditPrivateE@Base 2.5.2.0-0k0.2
  _ZTVN3kdk21KNavigationBarPrivateE@Base 1.2.0.3
  _ZTVN3kdk22KColorComboBoxDelegateE@Base 2.0.2.1
+ _ZTVN3kdk22KCustomDateEditPrivateE@Base 2.5.2.0-0k0.2
  _ZTVN3kdk22KProgressCirclePrivateE@Base 1.2.0.3
  _ZTVN3kdk22KProgressDialogPrivateE@Base 1.2.0.3
  _ZTVN3kdk22KSearchLineEditPrivateE@Base 1.2.0.3
  _ZTVN3kdk23KBackgroundGroupPrivateE@Base 2.0.2.1
  _ZTVN3kdk23KPixmapContainerPrivateE@Base 1.2.0.3
+ _ZTVN3kdk23KSecurityQuestionDialogE@Base 2.5.2.0-0k0.2
  _ZTVN3kdk23KUninstallDialogPrivateE@Base 1.2.0.3
  _ZTVN3kdk23KWindowButtonBarPrivateE@Base 1.2.0.3
  _ZTVN3kdk24KBorderlessButtonPrivateE@Base 1.2.0.3
  _ZTVN3kdk24KListViewDelegatePrivateE@Base 1.2.0.3
+ _ZTVN3kdk24KMiniCalendarItemPrivateE@Base 2.5.2.0-0k0.2
  _ZTVN3kdk24KSecurityLevelBarPrivateE@Base 1.2.0.3
  _ZTVN3kdk24KTranslucentFloorPrivateE@Base 2.0.0.0
  _ZTVN3kdk25KInputDialogDoubleSpinBoxE@Base 1.2.0.3
+ _ZTVN3kdk25KLunarCalendarInfoPrivateE@Base 2.5.2.0-0k0.2
+ _ZTVN3kdk26KMiniCalendarWidgetPrivateE@Base 2.5.2.0-0k0.2
+ _ZTVN3kdk30KSecurityQuestionDialogPrivateE@Base 2.5.2.0-0k0.2
  _ZTVN3kdk4KTagE@Base 1.2.0.3
  _ZTVN3kdk6KBadgeE@Base 1.2.0.3
+ _ZTVN3kdk6KCrumbE@Base 2.5.2.0-0k0.2
+ _ZTVN3kdk6KLabelE@Base 2.5.2.0-0k0.2
  _ZTVN3kdk7KDialogE@Base 1.2.0.3
  _ZTVN3kdk7KSliderE@Base 1.2.0.3
  _ZTVN3kdk7KTabBarE@Base 1.2.0.3
@@ -1592,25 +2576,42 @@
  _ZTVN3kdk7effects20KShadowHelperPrivateE@Base 2.0.0.0
  _ZTVN3kdk8DelegateE@Base 1.2.0.3
  _ZTVN3kdk8KIconBarE@Base 1.2.0.3
+ _ZTVN3kdk8KToolBarE@Base 2.5.2.0-0k0.2
  _ZTVN3kdk8ListViewE@Base 2.0.0.0
+ _ZTVN3kdk9KLineEditE@Base 2.5.2.0-0k0.2
  _ZTVN3kdk9KListViewE@Base 1.2.0.3
+ _ZTVN3kdk9KTextEditE@Base 2.5.2.0-0k0.2
  _ZTVN3kdk9LinkLabelE@Base 2.0.0.0
  (optional=templinst)_ZZN18QMetaTypeIdQObjectIP15QAbstractButtonLi8EE14qt_metatype_idEvE11metatype_id@Base 2.0.2.1
  (optional=templinst)_ZZN18QMetaTypeIdQObjectIP7QWidgetLi8EE14qt_metatype_idEvE11metatype_id@Base 2.0.2.1
+ (optional=templinst)_ZZN9QtPrivate15ConnectionTypesINS_4ListIJP7QObjectEEELb1EE5typesEvE1t@Base 2.5.2.0-0k0.2
+ (optional=templinst)_ZZN9QtPrivate15ConnectionTypesINS_4ListIJRK7QStringEEELb1EE5typesEvE1t@Base 2.5.2.0-0k0.2
+ (optional=templinst)_ZZN9QtPrivate15ConnectionTypesINS_4ListIJRK8QVariantEEELb1EE5typesEvE1t@Base 2.5.2.0-0k0.2
+ (optional=templinst)_ZZN9QtPrivate15ConnectionTypesINS_4ListIJbEEELb1EE5typesEvE1t@Base 2.5.2.0-0k0.2
+ (optional=templinst)_ZZN9QtPrivate15ConnectionTypesINS_4ListIJiEEELb1EE5typesEvE1t@Base 2.5.2.0-0k0.2
  applist@Base 2.0.2.1
+ (c++)"non-virtual thunk to KCustomTabBar::~KCustomTabBar()@Base" 2.5.2.0-0k0.2
+ (c++)"non-virtual thunk to kdk::AddFileDialog::~AddFileDialog()@Base" 2.5.2.0-0k0.2
+ (c++)"non-virtual thunk to kdk::FileDialog::~FileDialog()@Base" 2.5.2.0-0k0.2
  (c++)"non-virtual thunk to kdk::KAboutDialog::changeTheme()@Base" 1.2.0.3
  (c++)"non-virtual thunk to kdk::KAboutDialog::~KAboutDialog()@Base" 1.2.0.3
+ (c++)"non-virtual thunk to kdk::KAddFileButtonPrivate::changeTheme()@Base" 2.5.2.0-0k0.2
  (c++)"non-virtual thunk to kdk::KBallonTipPrivate::changeTheme()@Base" 2.0.0.0
  (c++)"non-virtual thunk to kdk::KBorderButton::~KBorderButton()@Base" 1.2.0.3
  (c++)"non-virtual thunk to kdk::KBorderButtonPrivate::changeTheme()@Base" 1.2.0.3
  (c++)"non-virtual thunk to kdk::KBorderlessButton::~KBorderlessButton()@Base" 1.2.0.3
  (c++)"non-virtual thunk to kdk::KBorderlessButtonPrivate::changeTheme()@Base" 1.2.0.3
  (c++)"non-virtual thunk to kdk::KButtonBox::~KButtonBox()@Base" 2.0.2.1
+ (c++)"non-virtual thunk to kdk::KButtonBoxPrivate::changeTheme()@Base" 2.5.2.0-0k0.2
  (c++)"non-virtual thunk to kdk::KColorButtonPrivate::changeTheme()@Base" 2.0.2.1
  (c++)"non-virtual thunk to kdk::KCommentPanelPrivate::changeTheme()@Base" 1.2.0.3
  (c++)"non-virtual thunk to kdk::KDialog::changeIconStyle()@Base" 1.2.0.3
  (c++)"non-virtual thunk to kdk::KDialog::changeTheme()@Base" 1.2.0.3
  (c++)"non-virtual thunk to kdk::KDialog::~KDialog()@Base" 1.2.0.3
+ (c++)"non-virtual thunk to kdk::KDirTabBar::~KDirTabBar()@Base" 2.5.2.0-0k0.2
+ (c++)"non-virtual thunk to kdk::KDirTabBarPrivate::changeTheme()@Base" 2.5.2.0-0k0.2
+ (c++)"non-virtual thunk to kdk::KDragWidgetPrivate::changeTheme()@Base" 2.5.2.0-0k0.2
+ (c++)"non-virtual thunk to kdk::KFileWidgetPrivate::changeTheme()@Base" 2.5.2.0-0k0.2
  (c++)"non-virtual thunk to kdk::KHLineFrame::~KHLineFrame()@Base" 2.0.2.1
  (c++)"non-virtual thunk to kdk::KHLineFramePrivate::changeTheme()@Base" 2.0.2.1
  (c++)"non-virtual thunk to kdk::KIconBar::~KIconBar()@Base" 1.2.0.3
@@ -1619,26 +2620,32 @@
  (c++)"non-virtual thunk to kdk::KInputDialog::changeTheme()@Base" 1.2.0.3
  (c++)"non-virtual thunk to kdk::KInputDialog::~KInputDialog()@Base" 1.2.0.3
  (c++)"non-virtual thunk to kdk::KItemWidgetPrivate::changeTheme()@Base" 1.2.0.3
+ (c++)"non-virtual thunk to kdk::KLabelPrivate::changeTheme()@Base" 2.5.2.0-0k0.2
  (c++)"non-virtual thunk to kdk::KMenuButton::changeTheme()@Base" 1.2.0.3
  (c++)"non-virtual thunk to kdk::KMenuButton::~KMenuButton()@Base" 1.2.0.3
  (c++)"non-virtual thunk to kdk::KMessageBox::~KMessageBox()@Base" 2.0.2.1
  (c++)"non-virtual thunk to kdk::KMessageBoxPrivate::changeTheme()@Base" 2.0.2.1
+ (c++)"non-virtual thunk to kdk::KMiniCalendarWidget::~KMiniCalendarWidget()@Base" 2.5.2.0-0k0.2
+ (c++)"non-virtual thunk to kdk::KNativeTabbar::~KNativeTabbar()@Base" 2.5.2.0-0k0.2
  (c++)"non-virtual thunk to kdk::KPasswordEditPrivate::changeTheme()@Base" 1.2.0.3
  (c++)"non-virtual thunk to kdk::KPressButtonPrivate::changeTheme()@Base" 2.0.0.0
  (c++)"non-virtual thunk to kdk::KProgressBarPrivate::changeTheme()@Base" 1.2.0.3
  (c++)"non-virtual thunk to kdk::KProgressCirclePrivate::changeTheme()@Base" 1.2.0.3
  (c++)"non-virtual thunk to kdk::KProgressDialog::changeTheme()@Base" 1.2.0.3
  (c++)"non-virtual thunk to kdk::KProgressDialog::~KProgressDialog()@Base" 1.2.0.3
+ (c++)"non-virtual thunk to kdk::KProgressLabel::~KProgressLabel()@Base" 2.5.2.0-0k0.2
  (c++)"non-virtual thunk to kdk::KPushButton::~KPushButton()@Base" 2.0.0.0
  (c++)"non-virtual thunk to kdk::KPushButtonPrivate::changeTheme()@Base" 2.0.0.0
  (c++)"non-virtual thunk to kdk::KSearchLineEdit::~KSearchLineEdit()@Base" 1.2.0.3
  (c++)"non-virtual thunk to kdk::KSearchLineEditPrivate::changeTheme()@Base" 1.2.0.3
+ (c++)"non-virtual thunk to kdk::KSecurityQuestionDialog::~KSecurityQuestionDialog()@Base" 2.5.2.0-0k0.2
  (c++)"non-virtual thunk to kdk::KSliderPrivate::changeTheme()@Base" 1.2.0.3
  (c++)"non-virtual thunk to kdk::KSwitchButton::~KSwitchButton()@Base" 1.2.0.3
  (c++)"non-virtual thunk to kdk::KSwitchButtonPrivate::changeTheme()@Base" 1.2.0.3
  (c++)"non-virtual thunk to kdk::KTabBar::~KTabBar()@Base" 1.2.0.3
  (c++)"non-virtual thunk to kdk::KTabBarPrivate::changeTheme()@Base" 1.2.0.3
  (c++)"non-virtual thunk to kdk::KTagPrivate::changeTheme()@Base" 1.2.0.3
+ (c++)"non-virtual thunk to kdk::KTextEditPrivate::changeTheme()@Base" 2.5.2.0-0k0.2
  (c++)"non-virtual thunk to kdk::KToolButtonPrivate::changeTheme()@Base" 1.2.0.3
  (c++)"non-virtual thunk to kdk::KUninstallDialog::changeTheme()@Base" 1.2.0.3
  (c++)"non-virtual thunk to kdk::KUninstallDialog::~KUninstallDialog()@Base" 1.2.0.3
@@ -1648,4 +2655,4 @@
  (c++)"non-virtual thunk to kdk::KWidget::changeTheme()@Base" 1.2.0.3
  (c++)"non-virtual thunk to kdk::KWidget::~KWidget()@Base" 1.2.0.3
  (c++)"non-virtual thunk to kdk::KWindowButtonBar::~KWindowButtonBar()@Base" 1.2.0.3
- (c++)"non-virtual thunk to kdk::KWindowButtonBarPrivate::changeTheme()@Base" 1.2.0.3
\ No newline at end of file
+ (c++)"non-virtual thunk to kdk::KWindowButtonBarPrivate::changeTheme()@Base" 1.2.0.3
diff -Nru libkysdk-applications-2.5.1.0/debian/libkysdk-waylandhelper-dev.install libkysdk-applications-2.5.2.0/debian/libkysdk-waylandhelper-dev.install
--- libkysdk-applications-2.5.1.0/debian/libkysdk-waylandhelper-dev.install	2024-07-31 11:09:38.000000000 +0800
+++ libkysdk-applications-2.5.2.0/debian/libkysdk-waylandhelper-dev.install	2025-03-17 13:09:05.000000000 +0800
@@ -1,4 +1,5 @@
 development-files/kysdk-waylandhelper.pc usr/share/pkgconfig/
+development-files/kysdk-ukuiwindowhelper.pc usr/share/pkgconfig/
 usr/include/kysdk/applications/waylandhelper.h
 usr/include/kysdk/applications/kysdk-waylandhelper_global.h
 usr/include/kysdk/applications/ukuistylehelper/ukui-decoration-client.h
@@ -32,5 +33,7 @@
 usr/include/kysdk/applications/blurmanager/blurabstractinterface.h
 usr/include/kysdk/applications/blurmanager/blurwaylandinterface.h
 usr/include/kysdk/applications/blurmanager/blurxcbinterface.h
+usr/include/kysdk/applications/ukuiwindowhelper/ukuiwindowhelper.h
 
 usr/lib/*/libkysdk-waylandhelper.so
+usr/lib/*/libkysdk-ukuiwindowhelper.so
diff -Nru libkysdk-applications-2.5.1.0/debian/libkysdk-waylandhelper.install libkysdk-applications-2.5.2.0/debian/libkysdk-waylandhelper.install
--- libkysdk-applications-2.5.1.0/debian/libkysdk-waylandhelper.install	2024-07-31 11:09:38.000000000 +0800
+++ libkysdk-applications-2.5.2.0/debian/libkysdk-waylandhelper.install	2025-03-17 13:09:05.000000000 +0800
@@ -1 +1,2 @@
 usr/lib/*/libkysdk-waylandhelper.so.*
+usr/lib/*/libkysdk-ukuiwindowhelper.so.*
diff -Nru libkysdk-applications-2.5.1.0/debian/libkysdk-waylandhelper.symbols libkysdk-applications-2.5.2.0/debian/libkysdk-waylandhelper.symbols
--- libkysdk-applications-2.5.1.0/debian/libkysdk-waylandhelper.symbols	2024-07-31 11:09:38.000000000 +0800
+++ libkysdk-applications-2.5.2.0/debian/libkysdk-waylandhelper.symbols	2025-03-17 13:09:05.000000000 +0800
@@ -1,5 +1,138 @@
-# SymbolsHelper-Confirmed: 2.3.1.0 amd64
+# SymbolsHelper-Confirmed: 2.5.2.0-0k0.2 amd64
+libkysdk-ukuiwindowhelper.so.1 libkysdk-waylandhelper #MINVER#
+ _ZGVZN9QtPrivate14IsMetaTypePairI5QPairI7QRegioniELb1EE17registerConverterEiE1f@Base 2.5.2.0-0k2.0
+ _ZGVZN9QtPrivate14IsMetaTypePairI5QPairIiiELb1EE17registerConverterEiE1f@Base 2.5.2.0-0k2.0
+ _ZGVZN9QtPrivate14IsMetaTypePairI5QPairIjjELb1EE17registerConverterEiE1f@Base 2.5.2.0-0k2.0
+ _ZN16UkuiWindowHelper11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.5.2.0-0k2.0
+ _ZN16UkuiWindowHelper11qt_metacastEPKc@Base 2.5.2.0-0k2.0
+ _ZN16UkuiWindowHelper12grabKeyboardEP7QWidget@Base 2.5.2.0-0k2.0
+ _ZN16UkuiWindowHelper13setBlurEffectEP7QWidget7QRegionib@Base 2.5.2.0-0k2.0
+ _ZN16UkuiWindowHelper13setWindowIconEP7QWidgetRK7QString@Base 2.5.2.0-0k2.0
+ _ZN16UkuiWindowHelper13setWindowRoleEP7QWidgetNS_10WindowRoleE@Base 2.5.2.0-0k2.0
+ _ZN16UkuiWindowHelper14removeTitleBarEP7QWidget@Base 2.5.2.0-0k2.0
+ _ZN16UkuiWindowHelper14setSkipTaskBarEP7QWidgetb@Base 2.5.2.0-0k2.0
+ _ZN16UkuiWindowHelper14setSlideEffectEP7QWidgetNS_8PositionEib@Base 2.5.2.0-0k2.0
+ _ZN16UkuiWindowHelper14setWindowStateEP7QWidget6QFlagsINS_5StateEE@Base 2.5.2.0-0k2.0
+ _ZN16UkuiWindowHelper15openUnderCursorEP7QWidget6QPoint@Base 2.5.2.0-0k2.0
+ _ZN16UkuiWindowHelper15setSkipSwitcherEP7QWidgetb@Base 2.5.2.0-0k2.0
+ _ZN16UkuiWindowHelper16setPanelAutoHideEP7QWidgetb@Base 2.5.2.0-0k2.0
+ _ZN16UkuiWindowHelper16staticMetaObjectE@Base 2.5.2.0-0k2.0
+ _ZN16UkuiWindowHelper4selfEv@Base 2.5.2.0-0k2.0
+ _ZN16UkuiWindowHelper6s_selfE@Base 2.5.2.0-0k2.0
+ _ZN16UkuiWindowHelperC1EP7QObject@Base 2.5.2.0-0k2.0
+ _ZN16UkuiWindowHelperC2EP7QObject@Base 2.5.2.0-0k2.0
+ _ZN17QtMetaTypePrivate23QMetaTypeFunctionHelperI5QPairI7QRegioniELb1EE8DestructEPv@Base 2.5.2.0-0k2.0
+ _ZN17QtMetaTypePrivate23QMetaTypeFunctionHelperI5QPairI7QRegioniELb1EE9ConstructEPvPKv@Base 2.5.2.0-0k2.0
+ _ZN17QtMetaTypePrivate23QMetaTypeFunctionHelperI5QPairIiiELb1EE8DestructEPv@Base 2.5.2.0-0k2.0
+ _ZN17QtMetaTypePrivate23QMetaTypeFunctionHelperI5QPairIiiELb1EE9ConstructEPvPKv@Base 2.5.2.0-0k2.0
+ _ZN17QtMetaTypePrivate23QMetaTypeFunctionHelperI5QPairIjjELb1EE8DestructEPv@Base 2.5.2.0-0k2.0
+ _ZN17QtMetaTypePrivate23QMetaTypeFunctionHelperI5QPairIjjELb1EE9ConstructEPvPKv@Base 2.5.2.0-0k2.0
+ _ZN17QtMetaTypePrivate23QMetaTypeFunctionHelperINS_25QPairVariantInterfaceImplELb1EE8DestructEPv@Base 2.5.2.0-0k2.0
+ _ZN17QtMetaTypePrivate23QMetaTypeFunctionHelperINS_25QPairVariantInterfaceImplELb1EE9ConstructEPvPKv@Base 2.5.2.0-0k2.0
+ _ZN17QtMetaTypePrivate25QPairVariantInterfaceImpl12getFirstImplI5QPairI7QRegioniEEENS_11VariantDataEPKPKvij@Base 2.5.2.0-0k2.0
+ _ZN17QtMetaTypePrivate25QPairVariantInterfaceImpl12getFirstImplI5QPairIiiEEENS_11VariantDataEPKPKvij@Base 2.5.2.0-0k2.0
+ _ZN17QtMetaTypePrivate25QPairVariantInterfaceImpl12getFirstImplI5QPairIjjEEENS_11VariantDataEPKPKvij@Base 2.5.2.0-0k2.0
+ _ZN17QtMetaTypePrivate25QPairVariantInterfaceImpl13getSecondImplI5QPairI7QRegioniEEENS_11VariantDataEPKPKvij@Base 2.5.2.0-0k2.0
+ _ZN17QtMetaTypePrivate25QPairVariantInterfaceImpl13getSecondImplI5QPairIiiEEENS_11VariantDataEPKPKvij@Base 2.5.2.0-0k2.0
+ _ZN17QtMetaTypePrivate25QPairVariantInterfaceImpl13getSecondImplI5QPairIjjEEENS_11VariantDataEPKPKvij@Base 2.5.2.0-0k2.0
+ _ZN9QtPrivate16ConverterFunctorI5QPairI7QRegioniEN17QtMetaTypePrivate25QPairVariantInterfaceImplENS4_35QPairVariantInterfaceConvertFunctorIS3_EEE7convertEPKNS_25AbstractConverterFunctionEPKvPv@Base 2.5.2.0-0k2.0
+ _ZN9QtPrivate16ConverterFunctorI5QPairIiiEN17QtMetaTypePrivate25QPairVariantInterfaceImplENS3_35QPairVariantInterfaceConvertFunctorIS2_EEE7convertEPKNS_25AbstractConverterFunctionEPKvPv@Base 2.5.2.0-0k2.0
+ _ZN9QtPrivate16ConverterFunctorI5QPairIjjEN17QtMetaTypePrivate25QPairVariantInterfaceImplENS3_35QPairVariantInterfaceConvertFunctorIS2_EEE7convertEPKNS_25AbstractConverterFunctionEPKvPv@Base 2.5.2.0-0k2.0
+ _ZNK16UkuiWindowHelper10metaObjectEv@Base 2.5.2.0-0k2.0
+ _ZTI16UkuiWindowHelper@Base 2.5.2.0-0k2.0
+ _ZTS16UkuiWindowHelper@Base 2.5.2.0-0k2.0
+ _ZTV16UkuiWindowHelper@Base 2.5.2.0-0k2.0
+ _ZZN11QMetaTypeIdI5QPairI7QRegioniEE14qt_metatype_idEvE11metatype_id@Base 2.5.2.0-0k2.0
+ _ZZN11QMetaTypeIdI5QPairIiiEE14qt_metatype_idEvE11metatype_id@Base 2.5.2.0-0k2.0
+ _ZZN11QMetaTypeIdI5QPairIjjEE14qt_metatype_idEvE11metatype_id@Base 2.5.2.0-0k2.0
+ _ZZN11QMetaTypeIdIN17QtMetaTypePrivate25QPairVariantInterfaceImplEE14qt_metatype_idEvE11metatype_id@Base 2.5.2.0-0k2.0
+ _ZZN9QtPrivate14IsMetaTypePairI5QPairI7QRegioniELb1EE17registerConverterEiE1f@Base 2.5.2.0-0k2.0
+ _ZZN9QtPrivate14IsMetaTypePairI5QPairIiiELb1EE17registerConverterEiE1f@Base 2.5.2.0-0k2.0
+ _ZZN9QtPrivate14IsMetaTypePairI5QPairIjjELb1EE17registerConverterEiE1f@Base 2.5.2.0-0k2.0
 libkysdk-waylandhelper.so.1 libkysdk-waylandhelper #MINVER#
+ _Z13handle_globalPvP11wl_registryjPKcj@Base 2.5.2.0-0k0.2
+ _Z20handle_global_removePvP11wl_registryj@Base 2.5.2.0-0k0.2
+ _ZN10KylinAtoms4initEv@Base 2.5.2.0-0k0.2
+ _ZN10KylinAtomsC1EP16xcb_connection_t@Base 2.5.2.0-0k0.2
+ _ZN10KylinAtomsC2EP16xcb_connection_t@Base 2.5.2.0-0k0.2
+ _ZN10OutputInfo10outputNameEv@Base 2.5.2.0-0k0.2
+ _ZN10OutputInfo10usableAreaEv@Base 2.5.2.0-0k0.2
+ _ZN10OutputInfo11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.5.2.0-0k0.2
+ _ZN10OutputInfo11qt_metacastEPKc@Base 2.5.2.0-0k0.2
+ _ZN10OutputInfo13setOutputNameERK7QString@Base 2.5.2.0-0k0.2
+ _ZN10OutputInfo13setUsableAreaERK5QRect@Base 2.5.2.0-0k0.2
+ _ZN10OutputInfo16staticMetaObjectE@Base 2.5.2.0-0k0.2
+ _ZN10OutputInfoC1EP7QObject@Base 2.5.2.0-0k0.2
+ _ZN10OutputInfoC2EP7QObject@Base 2.5.2.0-0k0.2
+ _ZN10OutputInfoD0Ev@Base 2.5.2.0-0k0.2
+ _ZN10OutputInfoD1Ev@Base 2.5.2.0-0k0.2
+ _ZN10OutputInfoD2Ev@Base 2.5.2.0-0k0.2
+ _ZN10UkuiWindow11iconChangedEv@Base 2.5.2.0-0k0.2
+ _ZN10UkuiWindow11isHighlightEv@Base 2.5.2.0-0k0.2
+ _ZN10UkuiWindow11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.5.2.0-0k0.2
+ _ZN10UkuiWindow11qt_metacastEPKc@Base 2.5.2.0-0k0.2
+ _ZN10UkuiWindow11requestMoveEv@Base 2.5.2.0-0k0.2
+ _ZN10UkuiWindow12appIdChangedEv@Base 2.5.2.0-0k0.2
+ _ZN10UkuiWindow12requestCloseEv@Base 2.5.2.0-0k0.2
+ _ZN10UkuiWindow12setHighlightEv@Base 2.5.2.0-0k0.2
+ _ZN10UkuiWindow12titleChangedEv@Base 2.5.2.0-0k0.2
+ _ZN10UkuiWindow13activeChangedEv@Base 2.5.2.0-0k0.2
+ _ZN10UkuiWindow13requestResizeEv@Base 2.5.2.0-0k0.2
+ _ZN10UkuiWindow13shadedChangedEv@Base 2.5.2.0-0k0.2
+ _ZN10UkuiWindow14movableChangedEv@Base 2.5.2.0-0k0.2
+ _ZN10UkuiWindow15geometryChangedEv@Base 2.5.2.0-0k0.2
+ _ZN10UkuiWindow15modalityChangedEv@Base 2.5.2.0-0k0.2
+ _ZN10UkuiWindow15requestActivateEv@Base 2.5.2.0-0k0.2
+ _ZN10UkuiWindow15unsetHightlightEv@Base 2.5.2.0-0k0.2
+ _ZN10UkuiWindow16closeableChangedEv@Base 2.5.2.0-0k0.2
+ _ZN10UkuiWindow16keepAboveChangedEv@Base 2.5.2.0-0k0.2
+ _ZN10UkuiWindow16keepBelowChangedEv@Base 2.5.2.0-0k0.2
+ _ZN10UkuiWindow16maximizedChangedEv@Base 2.5.2.0-0k0.2
+ _ZN10UkuiWindow16minimizedChangedEv@Base 2.5.2.0-0k0.2
+ _ZN10UkuiWindow16resizableChangedEv@Base 2.5.2.0-0k0.2
+ _ZN10UkuiWindow16shadeableChangedEv@Base 2.5.2.0-0k0.2
+ _ZN10UkuiWindow16staticMetaObjectE@Base 2.5.2.0-0k0.2
+ _ZN10UkuiWindow16ukuiActivityLeftERK7QString@Base 2.5.2.0-0k0.2
+ _ZN10UkuiWindow17fullscreenChangedEv@Base 2.5.2.0-0k0.2
+ _ZN10UkuiWindow18acceptFocusChangedEv@Base 2.5.2.0-0k0.2
+ _ZN10UkuiWindow18setStartupGeometryEPN8KWayland6Client7SurfaceERK5QRect@Base 2.5.2.0-0k0.2
+ _ZN10UkuiWindow18skipTaskbarChangedEv@Base 2.5.2.0-0k0.2
+ _ZN10UkuiWindow19maximizeableChangedEv@Base 2.5.2.0-0k0.2
+ _ZN10UkuiWindow19minimizeableChangedEv@Base 2.5.2.0-0k0.2
+ _ZN10UkuiWindow19parentWindowChangedEv@Base 2.5.2.0-0k0.2
+ _ZN10UkuiWindow19requestToggleShadedEv@Base 2.5.2.0-0k0.2
+ _ZN10UkuiWindow19skipSwitcherChangedEv@Base 2.5.2.0-0k0.2
+ _ZN10UkuiWindow19ukuiActivityEnteredERK7QString@Base 2.5.2.0-0k0.2
+ _ZN10UkuiWindow20onAllDesktopsChangedEv@Base 2.5.2.0-0k0.2
+ _ZN10UkuiWindow20requestEnterActivityERK7QString@Base 2.5.2.0-0k0.2
+ _ZN10UkuiWindow20requestLeaveActivityERK7QString@Base 2.5.2.0-0k0.2
+ _ZN10UkuiWindow20setMinimizedGeometryEPN8KWayland6Client7SurfaceERK5QRect@Base 2.5.2.0-0k0.2
+ _ZN10UkuiWindow21fullscreenableChangedEv@Base 2.5.2.0-0k0.2
+ _ZN10UkuiWindow21requestVirtualDesktopEj@Base 2.5.2.0-0k0.2
+ _ZN10UkuiWindow21virtualDesktopChangedEv@Base 2.5.2.0-0k0.2
+ _ZN10UkuiWindow22applicationMenuChangedEv@Base 2.5.2.0-0k0.2
+ _ZN10UkuiWindow22requestDemandAttentionEv@Base 2.5.2.0-0k0.2
+ _ZN10UkuiWindow22requestToggleKeepAboveEv@Base 2.5.2.0-0k0.2
+ _ZN10UkuiWindow22requestToggleKeepBelowEv@Base 2.5.2.0-0k0.2
+ _ZN10UkuiWindow22requestToggleMaximizedEv@Base 2.5.2.0-0k0.2
+ _ZN10UkuiWindow22requestToggleMinimizedEv@Base 2.5.2.0-0k0.2
+ _ZN10UkuiWindow22ukuiVirtualDesktopLeftERK7QString@Base 2.5.2.0-0k0.2
+ _ZN10UkuiWindow22unsetMinimizedGeometryEPN8KWayland6Client7SurfaceE@Base 2.5.2.0-0k0.2
+ _ZN10UkuiWindow23demandsAttentionChangedEv@Base 2.5.2.0-0k0.2
+ _ZN10UkuiWindow25ukuiVirtualDesktopEnteredERK7QString@Base 2.5.2.0-0k0.2
+ _ZN10UkuiWindow26requestEnterVirtualDesktopERK7QString@Base 2.5.2.0-0k0.2
+ _ZN10UkuiWindow26requestLeaveVirtualDesktopERK7QString@Base 2.5.2.0-0k0.2
+ _ZN10UkuiWindow29requestEnterNewVirtualDesktopEv@Base 2.5.2.0-0k0.2
+ _ZN10UkuiWindow31virtualDesktopChangeableChangedEv@Base 2.5.2.0-0k0.2
+ _ZN10UkuiWindow7destroyEv@Base 2.5.2.0-0k0.2
+ _ZN10UkuiWindow7releaseEv@Base 2.5.2.0-0k0.2
+ _ZN10UkuiWindow8unmappedEv@Base 2.5.2.0-0k0.2
+ _ZN10UkuiWindowC1EP20UkuiWindowManagementP11ukui_windowjPKc@Base 2.5.2.0-0k0.2
+ _ZN10UkuiWindowC2EP20UkuiWindowManagementP11ukui_windowjPKc@Base 2.5.2.0-0k0.2
+ _ZN10UkuiWindowD0Ev@Base 2.5.2.0-0k0.2
+ _ZN10UkuiWindowD1Ev@Base 2.5.2.0-0k0.2
+ _ZN10UkuiWindowD2Ev@Base 2.5.2.0-0k0.2
+ _ZN10UkuiWindowcvP11ukui_windowEv@Base 2.5.2.0-0k0.2
  _ZN11XAtomHelper11getInstanceEv@Base 1.2.0.3
  _ZN11XAtomHelper11qt_metacallEN11QMetaObject4CallEiPPv@Base 1.2.0.3
  _ZN11XAtomHelper11qt_metacastEPKc@Base 1.2.0.3
@@ -19,6 +152,307 @@
  _ZN11XAtomHelper35isWindowMotifHintDecorateBorderOnlyERK12MotifWmHints@Base 1.2.0.3
  _ZN11XAtomHelperC1EP7QObject@Base 1.2.0.3
  _ZN11XAtomHelperC2EP7QObject@Base 1.2.0.3
+ _ZN12XcbInterface10windowTypeE8QVariant@Base 2.5.2.0-0k0.2
+ _ZN12XcbInterface11requestInfoE8QVariant@Base 2.5.2.0-0k0.2
+ _ZN12XcbInterface11setGeometryEP7QWindowRK5QRect@Base 2.5.2.0-0k0.2
+ _ZN12XcbInterface11skipTaskBarERK8QVariant@Base 2.5.2.0-0k0.2
+ _ZN12XcbInterface11windowLayerEP7QWindow@Base 2.5.2.0-0k0.2
+ _ZN12XcbInterface12activeWindowEv@Base 2.5.2.0-0k0.2
+ _ZN12XcbInterface12requestCloseE8QVariant@Base 2.5.2.0-0k0.2
+ _ZN12XcbInterface12skipSwitcherERK8QVariant@Base 2.5.2.0-0k0.2
+ _ZN12XcbInterface13isValidWindowE8QVariant@Base 2.5.2.0-0k0.2
+ _ZN12XcbInterface13isValidWindowERK11KWindowInfo@Base 2.5.2.0-0k0.2
+ _ZN12XcbInterface14setSkipTaskBarEP7QWindowb@Base 2.5.2.0-0k0.2
+ _ZN12XcbInterface14setWindowLayerEP7QWindowN3kdk11WindowLayerE@Base 2.5.2.0-0k0.2
+ _ZN12XcbInterface14windowGeometryERK8QVariant@Base 2.5.2.0-0k0.2
+ _ZN12XcbInterface14windowGroupForE8QVariant@Base 2.5.2.0-0k0.2
+ _ZN12XcbInterface15demandAttentionERK8QVariant@Base 2.5.2.0-0k0.2
+ _ZN12XcbInterface15requestActivateE8QVariant@Base 2.5.2.0-0k0.2
+ _ZN12XcbInterface15setSkipSwitcherEP7QWindowb@Base 2.5.2.0-0k0.2
+ _ZN12XcbInterface16getWindowIdByPidEj@Base 2.5.2.0-0k0.2
+ _ZN12XcbInterface16isShowingDesktopEv@Base 2.5.2.0-0k0.2
+ _ZN12XcbInterface16setOnAllDesktopsERK8QVariant@Base 2.5.2.0-0k0.2
+ _ZN12XcbInterface17setPanelTakefocusEP7QWindowb@Base 2.5.2.0-0k0.2
+ _ZN12XcbInterface18getWindowIdByTtileERK7QString@Base 2.5.2.0-0k0.2
+ _ZN12XcbInterface18hideCurrentDesktopEv@Base 2.5.2.0-0k0.2
+ _ZN12XcbInterface18showCurrentDesktopEv@Base 2.5.2.0-0k0.2
+ _ZN12XcbInterface18windowCanBeDraggedE8QVariant@Base 2.5.2.0-0k0.2
+ _ZN12XcbInterface18windowChangedProxyEy6QFlagsIN3NET8PropertyEES0_INS1_9Property2EE@Base 2.5.2.0-0k0.2
+ _ZN12XcbInterface20windowCanBeMaximizedE8QVariant@Base 2.5.2.0-0k0.2
+ _ZN12XcbInterface22requestToggleKeepAboveE8QVariant@Base 2.5.2.0-0k0.2
+ _ZN12XcbInterface22requestToggleMaximizedE8QVariant@Base 2.5.2.0-0k0.2
+ _ZN12XcbInterface22requestToggleMinimizedE8QVariant@Base 2.5.2.0-0k0.2
+ _ZN12XcbInterface3pidE8QVariant@Base 2.5.2.0-0k0.2
+ _ZN12XcbInterface7iconForE8QVariant@Base 2.5.2.0-0k0.2
+ _ZN12XcbInterface8titleForE8QVariant@Base 2.5.2.0-0k0.2
+ _ZN12XcbInterfaceC1EP7QObject@Base 2.5.2.0-0k0.2
+ _ZN12XcbInterfaceC2EP7QObject@Base 2.5.2.0-0k0.2
+ _ZN12XcbInterfaceD0Ev@Base 2.5.2.0-0k0.2
+ _ZN12XcbInterfaceD1Ev@Base 2.5.2.0-0k0.2
+ _ZN12XcbInterfaceD2Ev@Base 2.5.2.0-0k0.2
+ _ZN13XdgActivation10eventQueueEv@Base 2.5.2.0-0k0.2
+ _ZN13XdgActivation11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.5.2.0-0k0.2
+ _ZN13XdgActivation11qt_metacastEPKc@Base 2.5.2.0-0k0.2
+ _ZN13XdgActivation13setEventQueueEPN8KWayland6Client10EventQueueE@Base 2.5.2.0-0k0.2
+ _ZN13XdgActivation14activateWindowERK7QStringPN8KWayland6Client7SurfaceE@Base 2.5.2.0-0k0.2
+ _ZN13XdgActivation16staticMetaObjectE@Base 2.5.2.0-0k0.2
+ _ZN13XdgActivation21getXdgActivationTokenEv@Base 2.5.2.0-0k0.2
+ _ZN13XdgActivation25requestXdgActivationTokenEP7wl_seatPN8KWayland6Client7SurfaceEjRK7QString@Base 2.5.2.0-0k0.2
+ _ZN13XdgActivation5setupEP17xdg_activation_v1@Base 2.5.2.0-0k0.2
+ _ZN13XdgActivation7destroyEv@Base 2.5.2.0-0k0.2
+ _ZN13XdgActivation7releaseEv@Base 2.5.2.0-0k0.2
+ _ZN13XdgActivationC1EP7QObject@Base 2.5.2.0-0k0.2
+ _ZN13XdgActivationC2EP7QObject@Base 2.5.2.0-0k0.2
+ _ZN13XdgActivationD0Ev@Base 2.5.2.0-0k0.2
+ _ZN13XdgActivationD1Ev@Base 2.5.2.0-0k0.2
+ _ZN13XdgActivationD2Ev@Base 2.5.2.0-0k0.2
+ _ZN13XdgActivationcvP17xdg_activation_v1Ev@Base 2.5.2.0-0k0.2
+ _ZN15ExtIdleNotifier11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.5.2.0-0k0.2
+ _ZN15ExtIdleNotifier11qt_metacastEPKc@Base 2.5.2.0-0k0.2
+ _ZN15ExtIdleNotifier16staticMetaObjectE@Base 2.5.2.0-0k0.2
+ _ZN15ExtIdleNotifier26requestExtIdleNotificationEP7wl_seati@Base 2.5.2.0-0k0.2
+ _ZN15ExtIdleNotifier5setupEP20ext_idle_notifier_v1@Base 2.5.2.0-0k0.2
+ _ZN15ExtIdleNotifier7destroyEv@Base 2.5.2.0-0k0.2
+ _ZN15ExtIdleNotifier7releaseEv@Base 2.5.2.0-0k0.2
+ _ZN15ExtIdleNotifierC1EP7QObject@Base 2.5.2.0-0k0.2
+ _ZN15ExtIdleNotifierC2EP7QObject@Base 2.5.2.0-0k0.2
+ _ZN15ExtIdleNotifierD0Ev@Base 2.5.2.0-0k0.2
+ _ZN15ExtIdleNotifierD1Ev@Base 2.5.2.0-0k0.2
+ _ZN15ExtIdleNotifierD2Ev@Base 2.5.2.0-0k0.2
+ _ZN15ExtIdleNotifiercvP20ext_idle_notifier_v1Ev@Base 2.5.2.0-0k0.2
+ _ZN15UkuiBlurManager10createBlurEPN8KWayland6Client7SurfaceEP7QObject@Base 2.5.2.0-0k0.2
+ _ZN15UkuiBlurManager10eventQueueEv@Base 2.5.2.0-0k0.2
+ _ZN15UkuiBlurManager10removeBlurEPN8KWayland6Client7SurfaceE@Base 2.5.2.0-0k0.2
+ _ZN15UkuiBlurManager11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.5.2.0-0k0.2
+ _ZN15UkuiBlurManager11qt_metacastEPKc@Base 2.5.2.0-0k0.2
+ _ZN15UkuiBlurManager13setEventQueueEPN8KWayland6Client10EventQueueE@Base 2.5.2.0-0k0.2
+ _ZN15UkuiBlurManager16staticMetaObjectE@Base 2.5.2.0-0k0.2
+ _ZN15UkuiBlurManager5setupEP20ukui_blur_manager_v1@Base 2.5.2.0-0k0.2
+ _ZN15UkuiBlurManager7destroyEv@Base 2.5.2.0-0k0.2
+ _ZN15UkuiBlurManager7releaseEv@Base 2.5.2.0-0k0.2
+ _ZN15UkuiBlurManagerC1EP7QObject@Base 2.5.2.0-0k0.2
+ _ZN15UkuiBlurManagerC2EP7QObject@Base 2.5.2.0-0k0.2
+ _ZN15UkuiBlurManagerD0Ev@Base 2.5.2.0-0k0.2
+ _ZN15UkuiBlurManagerD1Ev@Base 2.5.2.0-0k0.2
+ _ZN15UkuiBlurManagerD2Ev@Base 2.5.2.0-0k0.2
+ _ZN15UkuiBlurManagercvP20ukui_blur_manager_v1Ev@Base 2.5.2.0-0k0.2
+ _ZN16BlurXcbInterface11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.5.2.0-0k0.2
+ _ZN16BlurXcbInterface11qt_metacastEPKc@Base 2.5.2.0-0k0.2
+ _ZN16BlurXcbInterface16staticMetaObjectE@Base 2.5.2.0-0k0.2
+ _ZN16BlurXcbInterface25setBlurBehindWithStrengthEP7QWindowbRK7QRegionj@Base 2.5.2.0-0k0.2
+ _ZN16BlurXcbInterfaceC1EP7QObject@Base 2.5.2.0-0k0.2
+ _ZN16BlurXcbInterfaceC2EP7QObject@Base 2.5.2.0-0k0.2
+ _ZN16UkuiShellManager11getInstanceEv@Base 2.5.2.0-0k0.2
+ _ZN16UkuiShellManager14ukuishellReadyEv@Base 2.5.2.0-0k0.2
+ _ZN16UkuiShellManager15removeHeaderBarEP7QWindow@Base 2.5.2.0-0k0.2
+ _ZN16UkuiShellManagerC1Ev@Base 2.5.2.0-0k0.2
+ _ZN16UkuiShellManagerC2Ev@Base 2.5.2.0-0k0.2
+ _ZN16UkuiShellSurface11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.5.2.0-0k0.2
+ _ZN16UkuiShellSurface11qt_metacastEPKc@Base 2.5.2.0-0k0.2
+ _ZN16UkuiShellSurface11setIconNameERK7QString@Base 2.5.2.0-0k0.2
+ _ZN16UkuiShellSurface11setPositionERK6QPoint@Base 2.5.2.0-0k0.2
+ _ZN16UkuiShellSurface14setSkipTaskbarEb@Base 2.5.2.0-0k0.2
+ _ZN16UkuiShellSurface15setGrabKeyboardEP7wl_seat@Base 2.5.2.0-0k0.2
+ _ZN16UkuiShellSurface15setSkipSwitcherEb@Base 2.5.2.0-0k0.2
+ _ZN16UkuiShellSurface16setPanelAutoHideEb@Base 2.5.2.0-0k0.2
+ _ZN16UkuiShellSurface16staticMetaObjectE@Base 2.5.2.0-0k0.2
+ _ZN16UkuiShellSurface18autoHidePanelShownEv@Base 2.5.2.0-0k0.2
+ _ZN16UkuiShellSurface18setOpenUnderCursorEii@Base 2.5.2.0-0k0.2
+ _ZN16UkuiShellSurface18setOpenUnderCursorEv@Base 2.5.2.0-0k0.2
+ _ZN16UkuiShellSurface18setPanelTakesFocusEb@Base 2.5.2.0-0k0.2
+ _ZN16UkuiShellSurface18setSurfacePropertyENS_15SurfacePropertyEj@Base 2.5.2.0-0k0.2
+ _ZN16UkuiShellSurface19autoHidePanelHiddenEv@Base 2.5.2.0-0k0.2
+ _ZN16UkuiShellSurface3getEPN8KWayland6Client7SurfaceE@Base 2.5.2.0-0k0.2
+ _ZN16UkuiShellSurface5setupEP12ukui_surface@Base 2.5.2.0-0k0.2
+ _ZN16UkuiShellSurface7destroyEv@Base 2.5.2.0-0k0.2
+ _ZN16UkuiShellSurface7releaseEv@Base 2.5.2.0-0k0.2
+ _ZN16UkuiShellSurface7setRoleENS_4RoleE@Base 2.5.2.0-0k0.2
+ _ZN16UkuiShellSurfaceC1EP7QObject@Base 2.5.2.0-0k0.2
+ _ZN16UkuiShellSurfaceC2EP7QObject@Base 2.5.2.0-0k0.2
+ _ZN16UkuiShellSurfaceD0Ev@Base 2.5.2.0-0k0.2
+ _ZN16UkuiShellSurfaceD1Ev@Base 2.5.2.0-0k0.2
+ _ZN16UkuiShellSurfaceD2Ev@Base 2.5.2.0-0k0.2
+ _ZN16UkuiShellSurfacecvP12ukui_surfaceEv@Base 2.5.2.0-0k0.2
+ _ZN17QtMetaTypePrivate23QMetaTypeFunctionHelperIP10OutputInfoLb1EE8DestructEPv@Base 2.5.2.0-0k0.2
+ _ZN17QtMetaTypePrivate23QMetaTypeFunctionHelperIP10OutputInfoLb1EE9ConstructEPvPKv@Base 2.5.2.0-0k0.2
+ _ZN17QtMetaTypePrivate23QMetaTypeFunctionHelperIP10UkuiWindowLb1EE8DestructEPv@Base 2.5.2.0-0k0.2
+ _ZN17QtMetaTypePrivate23QMetaTypeFunctionHelperIP10UkuiWindowLb1EE9ConstructEPvPKv@Base 2.5.2.0-0k0.2
+ _ZN18XdgActivationToken10set_app_idERK7QString@Base 2.5.2.0-0k0.2
+ _ZN18XdgActivationToken10set_serialEjP7wl_seat@Base 2.5.2.0-0k0.2
+ _ZN18XdgActivationToken11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.5.2.0-0k0.2
+ _ZN18XdgActivationToken11qt_metacastEPKc@Base 2.5.2.0-0k0.2
+ _ZN18XdgActivationToken11set_surfaceEPN8KWayland6Client7SurfaceE@Base 2.5.2.0-0k0.2
+ _ZN18XdgActivationToken16staticMetaObjectE@Base 2.5.2.0-0k0.2
+ _ZN18XdgActivationToken4doneERK7QString@Base 2.5.2.0-0k0.2
+ _ZN18XdgActivationToken5setupEP23xdg_activation_token_v1@Base 2.5.2.0-0k0.2
+ _ZN18XdgActivationToken6commitEv@Base 2.5.2.0-0k0.2
+ _ZN18XdgActivationToken7destroyEv@Base 2.5.2.0-0k0.2
+ _ZN18XdgActivationToken7releaseEv@Base 2.5.2.0-0k0.2
+ _ZN18XdgActivationTokenC1EP7QObject@Base 2.5.2.0-0k0.2
+ _ZN18XdgActivationTokenC2EP7QObject@Base 2.5.2.0-0k0.2
+ _ZN18XdgActivationTokenD0Ev@Base 2.5.2.0-0k0.2
+ _ZN18XdgActivationTokenD1Ev@Base 2.5.2.0-0k0.2
+ _ZN18XdgActivationTokenD2Ev@Base 2.5.2.0-0k0.2
+ _ZN18XdgActivationTokencvP23xdg_activation_token_v1Ev@Base 2.5.2.0-0k0.2
+ _ZN19ExtIdleNotification11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.5.2.0-0k0.2
+ _ZN19ExtIdleNotification11qt_metacastEPKc@Base 2.5.2.0-0k0.2
+ _ZN19ExtIdleNotification16staticMetaObjectE@Base 2.5.2.0-0k0.2
+ _ZN19ExtIdleNotification5idledEv@Base 2.5.2.0-0k0.2
+ _ZN19ExtIdleNotification5setupEP24ext_idle_notification_v1@Base 2.5.2.0-0k0.2
+ _ZN19ExtIdleNotification7destroyEv@Base 2.5.2.0-0k0.2
+ _ZN19ExtIdleNotification7releaseEv@Base 2.5.2.0-0k0.2
+ _ZN19ExtIdleNotification7resumedEv@Base 2.5.2.0-0k0.2
+ _ZN19ExtIdleNotificationC1EP7QObject@Base 2.5.2.0-0k0.2
+ _ZN19ExtIdleNotificationC2EP7QObject@Base 2.5.2.0-0k0.2
+ _ZN19ExtIdleNotificationD0Ev@Base 2.5.2.0-0k0.2
+ _ZN19ExtIdleNotificationD1Ev@Base 2.5.2.0-0k0.2
+ _ZN19ExtIdleNotificationD2Ev@Base 2.5.2.0-0k0.2
+ _ZN19ExtIdleNotificationcvP24ext_idle_notification_v1Ev@Base 2.5.2.0-0k0.2
+ _ZN19KdeWaylandInterface10addDesktopERK7QStringj@Base 2.5.2.0-0k0.2
+ _ZN19KdeWaylandInterface10windowTypeE8QVariant@Base 2.5.2.0-0k0.2
+ _ZN19KdeWaylandInterface11eventFilterEP7QObjectP6QEvent@Base 2.5.2.0-0k0.2
+ _ZN19KdeWaylandInterface11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.5.2.0-0k0.2
+ _ZN19KdeWaylandInterface11qt_metacastEPKc@Base 2.5.2.0-0k0.2
+ _ZN19KdeWaylandInterface11requestInfoE8QVariant@Base 2.5.2.0-0k0.2
+ _ZN19KdeWaylandInterface11setGeometryEP7QWindowRK5QRect@Base 2.5.2.0-0k0.2
+ _ZN19KdeWaylandInterface11skipTaskBarERK8QVariant@Base 2.5.2.0-0k0.2
+ _ZN19KdeWaylandInterface11trackWindowEPN8KWayland6Client12PlasmaWindowE@Base 2.5.2.0-0k0.2
+ _ZN19KdeWaylandInterface11windowLayerEP7QWindow@Base 2.5.2.0-0k0.2
+ _ZN19KdeWaylandInterface12activeWindowEv@Base 2.5.2.0-0k0.2
+ _ZN19KdeWaylandInterface12requestCloseE8QVariant@Base 2.5.2.0-0k0.2
+ _ZN19KdeWaylandInterface12skipSwitcherERK8QVariant@Base 2.5.2.0-0k0.2
+ _ZN19KdeWaylandInterface12updateWindowEv@Base 2.5.2.0-0k0.2
+ _ZN19KdeWaylandInterface13isPlasmaPanelEPKN8KWayland6Client12PlasmaWindowE@Base 2.5.2.0-0k0.2
+ _ZN19KdeWaylandInterface13isValidWindowEPKN8KWayland6Client12PlasmaWindowE@Base 2.5.2.0-0k0.2
+ _ZN19KdeWaylandInterface13untrackWindowEPN8KWayland6Client12PlasmaWindowE@Base 2.5.2.0-0k0.2
+ _ZN19KdeWaylandInterface14setSkipTaskBarEP7QWindowb@Base 2.5.2.0-0k0.2
+ _ZN19KdeWaylandInterface14setWindowLayerEP7QWindowN3kdk11WindowLayerE@Base 2.5.2.0-0k0.2
+ _ZN19KdeWaylandInterface14windowGeometryERK8QVariant@Base 2.5.2.0-0k0.2
+ _ZN19KdeWaylandInterface14windowGroupForE8QVariant@Base 2.5.2.0-0k0.2
+ _ZN19KdeWaylandInterface14windowUnmappedEv@Base 2.5.2.0-0k0.2
+ _ZN19KdeWaylandInterface15demandAttentionERK8QVariant@Base 2.5.2.0-0k0.2
+ _ZN19KdeWaylandInterface15initKdeProtocolEv@Base 2.5.2.0-0k0.2
+ _ZN19KdeWaylandInterface15isPlasmaDesktopEPKN8KWayland6Client12PlasmaWindowE@Base 2.5.2.0-0k0.2
+ _ZN19KdeWaylandInterface15requestActivateE8QVariant@Base 2.5.2.0-0k0.2
+ _ZN19KdeWaylandInterface15setSkipSwitcherEP7QWindowb@Base 2.5.2.0-0k0.2
+ _ZN19KdeWaylandInterface16isShowingDesktopEv@Base 2.5.2.0-0k0.2
+ _ZN19KdeWaylandInterface16setOnAllDesktopsERK8QVariant@Base 2.5.2.0-0k0.2
+ _ZN19KdeWaylandInterface16staticMetaObjectE@Base 2.5.2.0-0k0.2
+ _ZN19KdeWaylandInterface17setCurrentDesktopE7QString@Base 2.5.2.0-0k0.2
+ _ZN19KdeWaylandInterface17setPanelTakefocusEP7QWindowb@Base 2.5.2.0-0k0.2
+ _ZN19KdeWaylandInterface18hideCurrentDesktopEv@Base 2.5.2.0-0k0.2
+ _ZN19KdeWaylandInterface18showCurrentDesktopEv@Base 2.5.2.0-0k0.2
+ _ZN19KdeWaylandInterface18windowCanBeDraggedE8QVariant@Base 2.5.2.0-0k0.2
+ _ZN19KdeWaylandInterface18windowCreatedProxyEPN8KWayland6Client12PlasmaWindowE@Base 2.5.2.0-0k0.2
+ _ZN19KdeWaylandInterface20windowCanBeMaximizedE8QVariant@Base 2.5.2.0-0k0.2
+ _ZN19KdeWaylandInterface22requestToggleKeepAboveE8QVariant@Base 2.5.2.0-0k0.2
+ _ZN19KdeWaylandInterface22requestToggleMaximizedE8QVariant@Base 2.5.2.0-0k0.2
+ _ZN19KdeWaylandInterface22requestToggleMinimizedE8QVariant@Base 2.5.2.0-0k0.2
+ _ZN19KdeWaylandInterface3pidE8QVariant@Base 2.5.2.0-0k0.2
+ _ZN19KdeWaylandInterface7iconForE8QVariant@Base 2.5.2.0-0k0.2
+ _ZN19KdeWaylandInterface8titleForE8QVariant@Base 2.5.2.0-0k0.2
+ _ZN19KdeWaylandInterface9windowForE8QVariant@Base 2.5.2.0-0k0.2
+ _ZN19KdeWaylandInterfaceC1EP7QObject@Base 2.5.2.0-0k0.2
+ _ZN19KdeWaylandInterfaceC2EP7QObject@Base 2.5.2.0-0k0.2
+ _ZN19KdeWaylandInterfaceD0Ev@Base 2.5.2.0-0k0.2
+ _ZN19KdeWaylandInterfaceD1Ev@Base 2.5.2.0-0k0.2
+ _ZN19KdeWaylandInterfaceD2Ev@Base 2.5.2.0-0k0.2
+ _ZN20BlurWaylandInterface11eventFilterEP7QObjectP6QEvent@Base 2.5.2.0-0k0.2
+ _ZN20BlurWaylandInterface11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.5.2.0-0k0.2
+ _ZN20BlurWaylandInterface11qt_metacastEPKc@Base 2.5.2.0-0k0.2
+ _ZN20BlurWaylandInterface12handleGlobalEPvP11wl_registryjPKcj@Base 2.5.2.0-0k0.2
+ _ZN20BlurWaylandInterface16staticMetaObjectE@Base 2.5.2.0-0k0.2
+ _ZN20BlurWaylandInterface18s_registryListenerE@Base 2.5.2.0-0k0.2
+ _ZN20BlurWaylandInterface25setBlurBehindWithStrengthEP7QWindowbRK7QRegionj@Base 2.5.2.0-0k0.2
+ _ZN20BlurWaylandInterfaceC1EP7QObject@Base 2.5.2.0-0k0.2
+ _ZN20BlurWaylandInterfaceC2EP7QObject@Base 2.5.2.0-0k0.2
+ _ZN20UkuiWaylandInterface10windowTypeE8QVariant@Base 2.5.2.0-0k0.2
+ _ZN20UkuiWaylandInterface11eventFilterEP7QObjectP6QEvent@Base 2.5.2.0-0k0.2
+ _ZN20UkuiWaylandInterface11outputsInfoEv@Base 2.5.2.0-0k0.2
+ _ZN20UkuiWaylandInterface11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.5.2.0-0k0.2
+ _ZN20UkuiWaylandInterface11qt_metacastEPKc@Base 2.5.2.0-0k0.2
+ _ZN20UkuiWaylandInterface11requestInfoE8QVariant@Base 2.5.2.0-0k0.2
+ _ZN20UkuiWaylandInterface11setGeometryEP7QWindowRK5QRect@Base 2.5.2.0-0k0.2
+ _ZN20UkuiWaylandInterface11setIconNameEP7QWindowRK7QString@Base 2.5.2.0-0k0.2
+ _ZN20UkuiWaylandInterface11skipTaskBarERK8QVariant@Base 2.5.2.0-0k0.2
+ _ZN20UkuiWaylandInterface11windowLayerEP7QWindow@Base 2.5.2.0-0k0.2
+ _ZN20UkuiWaylandInterface12activeWindowEv@Base 2.5.2.0-0k0.2
+ _ZN20UkuiWaylandInterface12handleGlobalEPvP11wl_registryjPKcj@Base 2.5.2.0-0k0.2
+ _ZN20UkuiWaylandInterface12istHighlightERK8QVariant@Base 2.5.2.0-0k0.2
+ _ZN20UkuiWaylandInterface12requestCloseE8QVariant@Base 2.5.2.0-0k0.2
+ _ZN20UkuiWaylandInterface12setHighlightERK8QVariantb@Base 2.5.2.0-0k0.2
+ _ZN20UkuiWaylandInterface12skipSwitcherERK8QVariant@Base 2.5.2.0-0k0.2
+ _ZN20UkuiWaylandInterface14activateWindowEP7QWindowS1_@Base 2.5.2.0-0k0.2
+ _ZN20UkuiWaylandInterface14setSkipTaskBarEP7QWindowb@Base 2.5.2.0-0k0.2
+ _ZN20UkuiWaylandInterface14setWindowLayerEP7QWindowN3kdk11WindowLayerE@Base 2.5.2.0-0k0.2
+ _ZN20UkuiWaylandInterface14windowGeometryERK8QVariant@Base 2.5.2.0-0k0.2
+ _ZN20UkuiWaylandInterface14windowGroupForE8QVariant@Base 2.5.2.0-0k0.2
+ _ZN20UkuiWaylandInterface15currentSeatNameEv@Base 2.5.2.0-0k0.2
+ _ZN20UkuiWaylandInterface15demandAttentionERK8QVariant@Base 2.5.2.0-0k0.2
+ _ZN20UkuiWaylandInterface15removeHeaderBarEP7QWindow@Base 2.5.2.0-0k0.2
+ _ZN20UkuiWaylandInterface15requestActivateE8QVariant@Base 2.5.2.0-0k0.2
+ _ZN20UkuiWaylandInterface15setGrabKeyboardEP7QWindowb@Base 2.5.2.0-0k0.2
+ _ZN20UkuiWaylandInterface15setIdleIntervalEi@Base 2.5.2.0-0k0.2
+ _ZN20UkuiWaylandInterface15setSkipSwitcherEP7QWindowb@Base 2.5.2.0-0k0.2
+ _ZN20UkuiWaylandInterface15setWindowRadiusEP7QWindowi@Base 2.5.2.0-0k0.2
+ _ZN20UkuiWaylandInterface15trackUkuiWindowEP10UkuiWindow@Base 2.5.2.0-0k0.2
+ _ZN20UkuiWaylandInterface16getWindowIdByPidEj@Base 2.5.2.0-0k0.2
+ _ZN20UkuiWaylandInterface16isShowingDesktopEv@Base 2.5.2.0-0k0.2
+ _ZN20UkuiWaylandInterface16setOnAllDesktopsERK8QVariant@Base 2.5.2.0-0k0.2
+ _ZN20UkuiWaylandInterface16setPanelAutoHideEP7QWindowb@Base 2.5.2.0-0k0.2
+ _ZN20UkuiWaylandInterface16staticMetaObjectE@Base 2.5.2.0-0k0.2
+ _ZN20UkuiWaylandInterface17currentOutputNameEv@Base 2.5.2.0-0k0.2
+ _ZN20UkuiWaylandInterface17setPanelTakefocusEP7QWindowb@Base 2.5.2.0-0k0.2
+ _ZN20UkuiWaylandInterface17ukuiProtocolReadyEv@Base 2.5.2.0-0k0.2
+ _ZN20UkuiWaylandInterface17untrackUkuiWindowEP10UkuiWindow@Base 2.5.2.0-0k0.2
+ _ZN20UkuiWaylandInterface18getWindowIdByTtileERK7QString@Base 2.5.2.0-0k0.2
+ _ZN20UkuiWaylandInterface18handleGlobalRemoveEPvP11wl_registryj@Base 2.5.2.0-0k0.2
+ _ZN20UkuiWaylandInterface18hideCurrentDesktopEv@Base 2.5.2.0-0k0.2
+ _ZN20UkuiWaylandInterface18s_registryListenerE@Base 2.5.2.0-0k0.2
+ _ZN20UkuiWaylandInterface18setOpenUnderCursorEP7QWindow@Base 2.5.2.0-0k0.2
+ _ZN20UkuiWaylandInterface18setOpenUnderCursorEP7QWindowii@Base 2.5.2.0-0k0.2
+ _ZN20UkuiWaylandInterface18showCurrentDesktopEv@Base 2.5.2.0-0k0.2
+ _ZN20UkuiWaylandInterface18windowCanBeDraggedE8QVariant@Base 2.5.2.0-0k0.2
+ _ZN20UkuiWaylandInterface20windowCanBeMaximizedE8QVariant@Base 2.5.2.0-0k0.2
+ _ZN20UkuiWaylandInterface22requestToggleKeepAboveE8QVariant@Base 2.5.2.0-0k0.2
+ _ZN20UkuiWaylandInterface22requestToggleMaximizedE8QVariant@Base 2.5.2.0-0k0.2
+ _ZN20UkuiWaylandInterface22requestToggleMinimizedE8QVariant@Base 2.5.2.0-0k0.2
+ _ZN20UkuiWaylandInterface22ukuiWindowCreatedProxyEP10UkuiWindow@Base 2.5.2.0-0k0.2
+ _ZN20UkuiWaylandInterface3pidE8QVariant@Base 2.5.2.0-0k0.2
+ _ZN20UkuiWaylandInterface7iconForE8QVariant@Base 2.5.2.0-0k0.2
+ _ZN20UkuiWaylandInterface8registryEv@Base 2.5.2.0-0k0.2
+ _ZN20UkuiWaylandInterface8titleForE8QVariant@Base 2.5.2.0-0k0.2
+ _ZN20UkuiWaylandInterface9windowForE8QVariant@Base 2.5.2.0-0k0.2
+ _ZN20UkuiWaylandInterfaceC1EP7QObject@Base 2.5.2.0-0k0.2
+ _ZN20UkuiWaylandInterfaceC2EP7QObject@Base 2.5.2.0-0k0.2
+ _ZN20UkuiWaylandInterfaceD0Ev@Base 2.5.2.0-0k0.2
+ _ZN20UkuiWaylandInterfaceD1Ev@Base 2.5.2.0-0k0.2
+ _ZN20UkuiWaylandInterfaceD2Ev@Base 2.5.2.0-0k0.2
+ _ZN20UkuiWindowManagement10eventQueueEv@Base 2.5.2.0-0k0.2
+ _ZN20UkuiWindowManagement11hideDesktopEv@Base 2.5.2.0-0k0.2
+ _ZN20UkuiWindowManagement11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.5.2.0-0k0.2
+ _ZN20UkuiWindowManagement11qt_metacastEPKc@Base 2.5.2.0-0k0.2
+ _ZN20UkuiWindowManagement11showDesktopEv@Base 2.5.2.0-0k0.2
+ _ZN20UkuiWindowManagement13setEventQueueEPN8KWayland6Client10EventQueueE@Base 2.5.2.0-0k0.2
+ _ZN20UkuiWindowManagement13windowCreatedEP10UkuiWindow@Base 2.5.2.0-0k0.2
+ _ZN20UkuiWindowManagement16staticMetaObjectE@Base 2.5.2.0-0k0.2
+ _ZN20UkuiWindowManagement17setShowingDesktopEb@Base 2.5.2.0-0k0.2
+ _ZN20UkuiWindowManagement19activeWindowChangedEv@Base 2.5.2.0-0k0.2
+ _ZN20UkuiWindowManagement20stackingOrderChangedEv@Base 2.5.2.0-0k0.2
+ _ZN20UkuiWindowManagement21showingDesktopChangedEb@Base 2.5.2.0-0k0.2
+ _ZN20UkuiWindowManagement25stackingOrderUuidsChangedEv@Base 2.5.2.0-0k0.2
+ _ZN20UkuiWindowManagement26interfaceAboutToBeReleasedEv@Base 2.5.2.0-0k0.2
+ _ZN20UkuiWindowManagement27interfaceAboutToBeDestroyedEv@Base 2.5.2.0-0k0.2
+ _ZN20UkuiWindowManagement5setupEP22ukui_window_management@Base 2.5.2.0-0k0.2
+ _ZN20UkuiWindowManagement7destroyEv@Base 2.5.2.0-0k0.2
+ _ZN20UkuiWindowManagement7releaseEv@Base 2.5.2.0-0k0.2
+ _ZN20UkuiWindowManagement7removedEv@Base 2.5.2.0-0k0.2
+ _ZN20UkuiWindowManagementC1EP7QObject@Base 2.5.2.0-0k0.2
+ _ZN20UkuiWindowManagementC2EP7QObject@Base 2.5.2.0-0k0.2
+ _ZN20UkuiWindowManagementD0Ev@Base 2.5.2.0-0k0.2
+ _ZN20UkuiWindowManagementD1Ev@Base 2.5.2.0-0k0.2
+ _ZN20UkuiWindowManagementD2Ev@Base 2.5.2.0-0k0.2
+ _ZN20UkuiWindowManagementcvP22ukui_window_managementEv@Base 2.5.2.0-0k0.2
  _ZN21UKUIDecorationManager10moveWindowEP7QWindow@Base 1.2.0.3
  _ZN21UKUIDecorationManager11getInstanceEv@Base 1.2.0.3
  _ZN21UKUIDecorationManager15removeHeaderBarEP7QWindow@Base 1.2.0.3
@@ -32,6 +466,22 @@
  _ZN3kdk10WmRegisterD0Ev@Base 1.2.0.3
  _ZN3kdk10WmRegisterD1Ev@Base 1.2.0.3
  _ZN3kdk10WmRegisterD2Ev@Base 1.2.0.3
+ _ZN3kdk11BlurManager11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.5.2.0-0k0.2
+ _ZN3kdk11BlurManager11qt_metacastEPKc@Base 2.5.2.0-0k0.2
+ _ZN3kdk11BlurManager16staticMetaObjectE@Base 2.5.2.0-0k0.2
+ _ZN3kdk11BlurManager25setBlurBehindWithStrengthEP7QWindowbRK7QRegionj@Base 2.5.2.0-0k0.2
+ _ZN3kdk11BlurManager4selfEv@Base 2.5.2.0-0k0.2
+ _ZN3kdk11BlurManager9interfaceEv@Base 2.5.2.0-0k0.2
+ _ZN3kdk11BlurManagerC1EP7QObject@Base 2.5.2.0-0k0.2
+ _ZN3kdk11BlurManagerC2EP7QObject@Base 2.5.2.0-0k0.2
+ _ZN3kdk12IdleNotifier11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.5.2.0-0k0.2
+ _ZN3kdk12IdleNotifier11qt_metacastEPKc@Base 2.5.2.0-0k0.2
+ _ZN3kdk12IdleNotifier15setIdleIntervalEi@Base 2.5.2.0-0k0.2
+ _ZN3kdk12IdleNotifier16staticMetaObjectE@Base 2.5.2.0-0k0.2
+ _ZN3kdk12IdleNotifier5idledEv@Base 2.5.2.0-0k0.2
+ _ZN3kdk12IdleNotifier7resumedEv@Base 2.5.2.0-0k0.2
+ _ZN3kdk12IdleNotifierC1EP7QObject@Base 2.5.2.0-0k0.2
+ _ZN3kdk12IdleNotifierC2EP7QObject@Base 2.5.2.0-0k0.2
  _ZN3kdk13WaylandHelper15isWaylandClientEv@Base 1.2.0.3
  _ZN3kdk13WaylandHelper15isWaylandServerEv@Base 1.2.0.3
  _ZN3kdk13WaylandHelper4selfEv@Base 1.2.0.3
@@ -41,12 +491,17 @@
  _ZN3kdk13WindowManager11hideDesktopEv@Base 1.2.0.3
  _ZN3kdk13WindowManager11iconChangedERK8QVariant@Base 2.3.1.0
  _ZN3kdk13WindowManager11isOnDesktopERK8QVarianti@Base 2.1.1.0
+ _ZN3kdk13WindowManager11outputsInfoEv@Base 2.5.2.0-0k0.2
  _ZN3kdk13WindowManager11qt_metacallEN11QMetaObject4CallEiPPv@Base 1.2.0.3
  _ZN3kdk13WindowManager11qt_metacastEPKc@Base 1.2.0.3
  _ZN3kdk13WindowManager11setGeometryEP7QWindowRK5QRect@Base 1.2.0.3
+ _ZN3kdk13WindowManager11setIconNameEP7QWindowRK7QString@Base 2.5.2.0-0k0.2
  _ZN3kdk13WindowManager11showDesktopEv@Base 1.2.0.3
  _ZN3kdk13WindowManager11skipTaskBarERK8QVariant@Base 1.2.0.3
  _ZN3kdk13WindowManager11windowAddedERK8QVariant@Base 1.2.0.3
+ _ZN3kdk13WindowManager11windowLayerEP7QWindow@Base 2.5.2.0-0k0.2
+ _ZN3kdk13WindowManager12isHightlightERK8QVariant@Base 2.5.2.0-0k0.2
+ _ZN3kdk13WindowManager12setHighlightERK8QVariantb@Base 2.5.2.0-0k0.2
  _ZN3kdk13WindowManager12skipSwitcherERK8QVariant@Base 1.2.0.3
  _ZN3kdk13WindowManager12titleChangedERK8QVariant@Base 2.3.1.0
  _ZN3kdk13WindowManager13activeChangedERK8QVariant@Base 2.3.1.0
@@ -55,27 +510,41 @@
  _ZN3kdk13WindowManager13getwindowInfoERK8QVariant@Base 1.2.0.3
  _ZN3kdk13WindowManager13windowChangedERK8QVariant@Base 1.2.0.3
  _ZN3kdk13WindowManager13windowRemovedERK8QVariant@Base 1.2.0.3
+ _ZN3kdk13WindowManager14activateWindowEP7QWindowS2_@Base 2.5.2.0-0k0.2
  _ZN3kdk13WindowManager14activateWindowERK8QVariant@Base 1.2.0.3
  _ZN3kdk13WindowManager14currentDesktopEv@Base 1.2.0.3
+ _ZN3kdk13WindowManager14getProcessNameERK8QVariant@Base 2.5.2.0-0k0.2
  _ZN3kdk13WindowManager14getWindowGroupERK8QVariant@Base 1.2.0.3
  _ZN3kdk13WindowManager14getWindowTitleERK8QVariant@Base 1.2.0.3
  _ZN3kdk13WindowManager14maximizeWindowERK8QVariant@Base 1.2.0.3
  _ZN3kdk13WindowManager14minimizeWindowERK8QVariant@Base 1.2.0.3
  _ZN3kdk13WindowManager14setSkipTaskBarEP7QWindowb@Base 1.2.0.3
+ _ZN3kdk13WindowManager14setWindowLayerEP7QWindowNS_11WindowLayerE@Base 2.5.2.0-0k0.2
+ _ZN3kdk13WindowManager14windowGeometryERK8QVariant@Base 2.5.2.0-0k0.2
+ _ZN3kdk13WindowManager15currentSeatNameEv@Base 2.5.2.0-0k0.2
  _ZN3kdk13WindowManager15demandAttentionERK8QVariant@Base 2.3.1.0
  _ZN3kdk13WindowManager15geometryChangedERK8QVariant@Base 2.3.1.0
  _ZN3kdk13WindowManager15isOnAllDesktopsERK8QVariant@Base 2.0.0.0
  _ZN3kdk13WindowManager15keepWindowAboveERK8QVariant@Base 1.2.0.3
+ _ZN3kdk13WindowManager15setGrabKeyboardEP7QWindowb@Base 2.5.2.0-0k0.2
  _ZN3kdk13WindowManager15setSkipSwitcherEP7QWindowb@Base 1.2.0.3
+ _ZN3kdk13WindowManager15setWindowRadiusEP7QWindowi@Base 2.5.2.0-0k0.2
+ _ZN3kdk13WindowManager16getWindowIdByPidEj@Base 2.5.2.0-0k0.2
  _ZN3kdk13WindowManager16isShowingDesktopEv@Base 2.0.0.0
  _ZN3kdk13WindowManager16keepAboveChangedERK8QVariant@Base 2.3.1.0
  _ZN3kdk13WindowManager16maximizedChangedERK8QVariant@Base 2.3.1.0
  _ZN3kdk13WindowManager16minimizedChangedERK8QVariant@Base 2.3.1.0
  _ZN3kdk13WindowManager16setOnAllDesktopsERK8QVariant@Base 2.0.0.0
+ _ZN3kdk13WindowManager16setPanelAutoHideEP7QWindowb@Base 2.5.2.0-0k0.2
  _ZN3kdk13WindowManager16staticMetaObjectE@Base 1.2.0.3
+ _ZN3kdk13WindowManager17currentOutputNameEv@Base 2.5.2.0-0k0.2
  _ZN3kdk13WindowManager17fullscreenChangedERK8QVariant@Base 2.3.1.0
+ _ZN3kdk13WindowManager17outputInfoChangedEP10OutputInfo@Base 2.5.2.0-0k0.2
  _ZN3kdk13WindowManager17setPanelTakefocusEP7QWindowb@Base 2.3.1.0
+ _ZN3kdk13WindowManager18getWindowIdByTtileERK7QString@Base 2.5.2.0-0k0.2
  _ZN3kdk13WindowManager18isOnCurrentDesktopERK8QVariant@Base 2.1.1.0
+ _ZN3kdk13WindowManager18setOpenUnderCursorEP7QWindow@Base 2.5.2.0-0k0.2
+ _ZN3kdk13WindowManager18setOpenUnderCursorEP7QWindowii@Base 2.5.2.0-0k0.2
  _ZN3kdk13WindowManager18skipTaskbarChangedERK8QVariant@Base 2.3.1.0
  _ZN3kdk13WindowManager19activeWindowChangedERK8QVariant@Base 1.2.0.3
  _ZN3kdk13WindowManager19currentActiveWindowEv@Base 1.2.0.3
@@ -96,23 +565,43 @@
  _ZN3kdk15UkuiStyleHelperC2Ev@Base 1.2.0.3
  _ZN3kdk17AbstractInterface10isValidForERK8QVariant@Base 1.2.0.3
  _ZN3kdk17AbstractInterface11iconChangedE8QVariant@Base 2.3.1.0
+ _ZN3kdk17AbstractInterface11outputsInfoEv@Base 2.5.2.0-0k0.2
  _ZN3kdk17AbstractInterface11qt_metacallEN11QMetaObject4CallEiPPv@Base 1.2.0.3
  _ZN3kdk17AbstractInterface11qt_metacastEPKc@Base 1.2.0.3
+ _ZN3kdk17AbstractInterface11setIconNameEP7QWindowRK7QString@Base 2.5.2.0-0k0.2
  _ZN3kdk17AbstractInterface11windowAddedE8QVariant@Base 1.2.0.3
+ _ZN3kdk17AbstractInterface11windowLayerEP7QWindow@Base 2.5.2.0-0k0.2
+ _ZN3kdk17AbstractInterface12istHighlightERK8QVariant@Base 2.5.2.0-0k0.2
+ _ZN3kdk17AbstractInterface12setHighlightERK8QVariantb@Base 2.5.2.0-0k0.2
  _ZN3kdk17AbstractInterface12titleChangedE8QVariant@Base 2.3.1.0
  _ZN3kdk17AbstractInterface13activeChangedE8QVariant@Base 2.3.1.0
  _ZN3kdk17AbstractInterface13windowChangedE8QVariant@Base 1.2.0.3
  _ZN3kdk17AbstractInterface13windowRemovedE8QVariant@Base 1.2.0.3
+ _ZN3kdk17AbstractInterface14activateWindowEP7QWindowS2_@Base 2.5.2.0-0k0.2
  _ZN3kdk17AbstractInterface14currentDesktopEv@Base 1.2.0.3
+ _ZN3kdk17AbstractInterface14getProcessNameERK8QVariant@Base 2.5.2.0-0k0.2
+ _ZN3kdk17AbstractInterface14setWindowLayerEP7QWindowNS_11WindowLayerE@Base 2.5.2.0-0k0.2
+ _ZN3kdk17AbstractInterface14windowGeometryERK8QVariant@Base 2.5.2.0-0k0.2
  _ZN3kdk17AbstractInterface15currentActivityEv@Base 1.2.0.3
+ _ZN3kdk17AbstractInterface15currentSeatNameEv@Base 2.5.2.0-0k0.2
  _ZN3kdk17AbstractInterface15geometryChangedE8QVariant@Base 2.3.1.0
  _ZN3kdk17AbstractInterface15isPlasmaDesktopERK5QRect@Base 1.2.0.3
+ _ZN3kdk17AbstractInterface15setGrabKeyboardEP7QWindowb@Base 2.5.2.0-0k0.2
+ _ZN3kdk17AbstractInterface15setIdleIntervalEi@Base 2.5.2.0-0k0.2
+ _ZN3kdk17AbstractInterface15setWindowRadiusEP7QWindowi@Base 2.5.2.0-0k0.2
+ _ZN3kdk17AbstractInterface16getWindowIdByPidEj@Base 2.5.2.0-0k0.2
  _ZN3kdk17AbstractInterface16keepAboveChangedE8QVariant@Base 2.3.1.0
  _ZN3kdk17AbstractInterface16maximizedChangedE8QVariant@Base 2.3.1.0
  _ZN3kdk17AbstractInterface16minimizedChangedE8QVariant@Base 2.3.1.0
+ _ZN3kdk17AbstractInterface16setPanelAutoHideEP7QWindowb@Base 2.5.2.0-0k0.2
  _ZN3kdk17AbstractInterface16setPlasmaDesktopE8QVariant@Base 1.2.0.3
  _ZN3kdk17AbstractInterface16staticMetaObjectE@Base 1.2.0.3
+ _ZN3kdk17AbstractInterface17currentOutputNameEv@Base 2.5.2.0-0k0.2
  _ZN3kdk17AbstractInterface17fullscreenChangedE8QVariant@Base 2.3.1.0
+ _ZN3kdk17AbstractInterface17outputInfoChangedEP10OutputInfo@Base 2.5.2.0-0k0.2
+ _ZN3kdk17AbstractInterface18getWindowIdByTtileERK7QString@Base 2.5.2.0-0k0.2
+ _ZN3kdk17AbstractInterface18setOpenUnderCursorEP7QWindow@Base 2.5.2.0-0k0.2
+ _ZN3kdk17AbstractInterface18setOpenUnderCursorEP7QWindowii@Base 2.5.2.0-0k0.2
  _ZN3kdk17AbstractInterface18skipTaskbarChangedE8QVariant@Base 2.3.1.0
  _ZN3kdk17AbstractInterface19activeWindowChangedE8QVariant@Base 1.2.0.3
  _ZN3kdk17AbstractInterface19skipSwitcherChangedE8QVariant@Base 2.3.1.0
@@ -121,36 +610,226 @@
  _ZN3kdk17AbstractInterface23demandsAttentionChangedE8QVariant@Base 2.3.1.0
  _ZN3kdk17AbstractInterface23isShowingDesktopChangedEv@Base 2.0.0.0
  _ZN3kdk17AbstractInterface24inCurrentDesktopActivityERKNS_10WindowInfoE@Base 1.2.0.3
+ _ZN3kdk17AbstractInterface5idledEv@Base 2.5.2.0-0k0.2
+ _ZN3kdk17AbstractInterface7resumedEv@Base 2.5.2.0-0k0.2
  _ZN3kdk17AbstractInterface7windowsEv@Base 1.2.0.3
  _ZN3kdk17AbstractInterfaceC1EP7QObject@Base 1.2.0.3
  _ZN3kdk17AbstractInterfaceC2EP7QObject@Base 1.2.0.3
  _ZN3kdk17AbstractInterfaceD0Ev@Base 1.2.0.3
  _ZN3kdk17AbstractInterfaceD1Ev@Base 1.2.0.3
  _ZN3kdk17AbstractInterfaceD2Ev@Base 1.2.0.3
- (optional=templinst)_ZN9QtPrivate11QSlotObjectIMN3kdk13WindowManagerEFvRK8QVariantENS_4ListIJS3_EEEvE4implEiPNS_15QSlotObjectBaseEP7QObjectPPvPb@Base 1.2.0.3
- (optional=templinst)_ZN9QtPrivate11QSlotObjectIMN3kdk13WindowManagerEFvvENS_4ListIJEEEvE4implEiPNS_15QSlotObjectBaseEP7QObjectPPvPb@Base 1.2.0.3
- (optional=templinst)_ZN9QtPrivate11QSlotObjectIMN3kdk17AbstractInterfaceEFv8QVariantENS_4ListIJyEEEvE4implEiPNS_15QSlotObjectBaseEP7QObjectPPvPb@Base 1.2.0.3
- (optional=templinst)_ZN9QtPrivate11QSlotObjectIMN3kdk17AbstractInterfaceEFvvENS_4ListIJEEEvE4implEiPNS_15QSlotObjectBaseEP7QObjectPPvPb@Base 2.0.0.0
+ _ZN5QHashIP16xcb_connection_t18QSharedDataPointerI10KylinAtomsEE11deleteNode2EPN9QHashData4NodeE@Base 2.5.2.0-0k0.2
+ _ZN5QHashIP16xcb_connection_t18QSharedDataPointerI10KylinAtomsEE13duplicateNodeEPN9QHashData4NodeEPv@Base 2.5.2.0-0k0.2
+ _ZN8UkuiBlur11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.5.2.0-0k0.2
+ _ZN8UkuiBlur11qt_metacastEPKc@Base 2.5.2.0-0k0.2
+ _ZN8UkuiBlur11setStrengthEj@Base 2.5.2.0-0k0.2
+ _ZN8UkuiBlur16staticMetaObjectE@Base 2.5.2.0-0k0.2
+ _ZN8UkuiBlur5setupEP20ukui_blur_surface_v1@Base 2.5.2.0-0k0.2
+ _ZN8UkuiBlur7destroyEv@Base 2.5.2.0-0k0.2
+ _ZN8UkuiBlur7releaseEv@Base 2.5.2.0-0k0.2
+ _ZN8UkuiBlur9setRegionEPN8KWayland6Client6RegionE@Base 2.5.2.0-0k0.2
+ _ZN8UkuiBlurC1EP7QObject@Base 2.5.2.0-0k0.2
+ _ZN8UkuiBlurC2EP7QObject@Base 2.5.2.0-0k0.2
+ _ZN8UkuiBlurD0Ev@Base 2.5.2.0-0k0.2
+ _ZN8UkuiBlurD1Ev@Base 2.5.2.0-0k0.2
+ _ZN8UkuiBlurD2Ev@Base 2.5.2.0-0k0.2
+ _ZN8UkuiBlurcvP20ukui_blur_surface_v1Ev@Base 2.5.2.0-0k0.2
+ _ZN9KyWinInfo14setWindowLayerEN3kdk11WindowLayerE@Base 2.5.2.0-0k0.2
+ _ZN9QtPrivate11QSlotObjectIM12XcbInterfaceFvy6QFlagsIN3NET8PropertyEES2_INS3_9Property2EEENS_4ListIJyS5_S7_EEEvE4implEiPNS_15QSlotObjectBaseEP7QObjectPPvPb@Base 2.5.2.0-0k0.2
+ _ZN9QtPrivate11QSlotObjectIM16UkuiShellSurfaceFvvENS_4ListIJEEEvE4implEiPNS_15QSlotObjectBaseEP7QObjectPPvPb@Base 2.5.2.0-0k0.2
+ _ZN9QtPrivate11QSlotObjectIM19KdeWaylandInterfaceFvPN8KWayland6Client12PlasmaWindowEENS_4ListIJS5_EEEvE4implEiPNS_15QSlotObjectBaseEP7QObjectPPvPb@Base 2.5.2.0-0k0.2
+ _ZN9QtPrivate11QSlotObjectIM19KdeWaylandInterfaceFvvENS_4ListIJEEEvE4implEiPNS_15QSlotObjectBaseEP7QObjectPPvPb@Base 2.5.2.0-0k0.2
+ _ZN9QtPrivate11QSlotObjectIM20UkuiWaylandInterfaceFvP10UkuiWindowENS_4ListIJS3_EEEvE4implEiPNS_15QSlotObjectBaseEP7QObjectPPvPb@Base 2.5.2.0-0k0.2
+ _ZN9QtPrivate11QSlotObjectIMN3kdk12IdleNotifierEFvvENS_4ListIJEEEvE4implEiPNS_15QSlotObjectBaseEP7QObjectPPvPb@Base 2.5.2.0-0k0.2
+ _ZN9QtPrivate11QSlotObjectIMN3kdk13WindowManagerEFvP10OutputInfoENS_4ListIJS4_EEEvE4implEiPNS_15QSlotObjectBaseEP7QObjectPPvPb@Base 2.5.2.0-0k0.2
+ _ZN9QtPrivate11QSlotObjectIMN3kdk13WindowManagerEFvRK8QVariantENS_4ListIJS3_EEEvE4implEiPNS_15QSlotObjectBaseEP7QObjectPPvPb@Base 1.2.0.3
+ _ZN9QtPrivate11QSlotObjectIMN3kdk13WindowManagerEFvvENS_4ListIJEEEvE4implEiPNS_15QSlotObjectBaseEP7QObjectPPvPb@Base 1.2.0.3
+ _ZN9QtPrivate11QSlotObjectIMN3kdk17AbstractInterfaceEFv8QVariantENS_4ListIJyEEEvE4implEiPNS_15QSlotObjectBaseEP7QObjectPPvPb@Base 1.2.0.3
+ _ZN9QtPrivate11QSlotObjectIMN3kdk17AbstractInterfaceEFvvENS_4ListIJEEEvE4implEiPNS_15QSlotObjectBaseEP7QObjectPPvPb@Base 2.0.0.0
+ _ZN9UkuiShell10eventQueueEv@Base 2.5.2.0-0k0.2
+ _ZN9UkuiShell10outputNameEv@Base 2.5.2.0-0k0.2
+ _ZN9UkuiShell11qt_metacallEN11QMetaObject4CallEiPPv@Base 2.5.2.0-0k0.2
+ _ZN9UkuiShell11qt_metacastEPKc@Base 2.5.2.0-0k0.2
+ _ZN9UkuiShell13createSurfaceEP10wl_surfaceP7QObject@Base 2.5.2.0-0k0.2
+ _ZN9UkuiShell13createSurfaceEPN8KWayland6Client7SurfaceEP7QObject@Base 2.5.2.0-0k0.2
+ _ZN9UkuiShell13setEventQueueEPN8KWayland6Client10EventQueueE@Base 2.5.2.0-0k0.2
+ _ZN9UkuiShell16staticMetaObjectE@Base 2.5.2.0-0k0.2
+ _ZN9UkuiShell18currentOutputReadyEv@Base 2.5.2.0-0k0.2
+ _ZN9UkuiShell19updateCurrentOutputEv@Base 2.5.2.0-0k0.2
+ _ZN9UkuiShell20isCurrentOutputReadyEv@Base 2.5.2.0-0k0.2
+ _ZN9UkuiShell26interfaceAboutToBeReleasedEv@Base 2.5.2.0-0k0.2
+ _ZN9UkuiShell27interfaceAboutToBeDestroyedEv@Base 2.5.2.0-0k0.2
+ _ZN9UkuiShell5setupEP10ukui_shell@Base 2.5.2.0-0k0.2
+ _ZN9UkuiShell7destroyEv@Base 2.5.2.0-0k0.2
+ _ZN9UkuiShell7releaseEv@Base 2.5.2.0-0k0.2
+ _ZN9UkuiShell7removedEv@Base 2.5.2.0-0k0.2
+ _ZN9UkuiShell8seatNameEv@Base 2.5.2.0-0k0.2
+ _ZN9UkuiShellC1EP7QObject@Base 2.5.2.0-0k0.2
+ _ZN9UkuiShellC2EP7QObject@Base 2.5.2.0-0k0.2
+ _ZN9UkuiShellD0Ev@Base 2.5.2.0-0k0.2
+ _ZN9UkuiShellD1Ev@Base 2.5.2.0-0k0.2
+ _ZN9UkuiShellD2Ev@Base 2.5.2.0-0k0.2
+ _ZN9UkuiShellcvP10ukui_shellEv@Base 2.5.2.0-0k0.2
+ _ZNK10OutputInfo10metaObjectEv@Base 2.5.2.0-0k0.2
+ _ZNK10UkuiWindow10internalIdEv@Base 2.5.2.0-0k0.2
+ _ZNK10UkuiWindow10metaObjectEv@Base 2.5.2.0-0k0.2
+ _ZNK10UkuiWindow11isCloseableEv@Base 2.5.2.0-0k0.2
+ _ZNK10UkuiWindow11isKeepAboveEv@Base 2.5.2.0-0k0.2
+ _ZNK10UkuiWindow11isKeepBelowEv@Base 2.5.2.0-0k0.2
+ _ZNK10UkuiWindow11isMaximizedEv@Base 2.5.2.0-0k0.2
+ _ZNK10UkuiWindow11isMinimizedEv@Base 2.5.2.0-0k0.2
+ _ZNK10UkuiWindow11isResizableEv@Base 2.5.2.0-0k0.2
+ _ZNK10UkuiWindow11isShadeableEv@Base 2.5.2.0-0k0.2
+ _ZNK10UkuiWindow11skipTaskbarEv@Base 2.5.2.0-0k0.2
+ _ZNK10UkuiWindow12isFullscreenEv@Base 2.5.2.0-0k0.2
+ _ZNK10UkuiWindow12parentWindowEv@Base 2.5.2.0-0k0.2
+ _ZNK10UkuiWindow12sendToOutputEPN8KWayland6Client6OutputE@Base 2.5.2.0-0k0.2
+ _ZNK10UkuiWindow12skipSwitcherEv@Base 2.5.2.0-0k0.2
+ _ZNK10UkuiWindow14isMaximizeableEv@Base 2.5.2.0-0k0.2
+ _ZNK10UkuiWindow14isMinimizeableEv@Base 2.5.2.0-0k0.2
+ _ZNK10UkuiWindow14ukuiActivitiesEv@Base 2.5.2.0-0k0.2
+ _ZNK10UkuiWindow14virtualDesktopEv@Base 2.5.2.0-0k0.2
+ _ZNK10UkuiWindow15isOnAllDesktopsEv@Base 2.5.2.0-0k0.2
+ _ZNK10UkuiWindow16isFullscreenableEv@Base 2.5.2.0-0k0.2
+ _ZNK10UkuiWindow19ukuiVirtualDesktopsEv@Base 2.5.2.0-0k0.2
+ _ZNK10UkuiWindow20isDemandingAttentionEv@Base 2.5.2.0-0k0.2
+ _ZNK10UkuiWindow25applicationMenuObjectPathEv@Base 2.5.2.0-0k0.2
+ _ZNK10UkuiWindow26applicationMenuServiceNameEv@Base 2.5.2.0-0k0.2
+ _ZNK10UkuiWindow26isVirtualDesktopChangeableEv@Base 2.5.2.0-0k0.2
+ _ZNK10UkuiWindow3pidEv@Base 2.5.2.0-0k0.2
+ _ZNK10UkuiWindow4iconEv@Base 2.5.2.0-0k0.2
+ _ZNK10UkuiWindow4uuidEv@Base 2.5.2.0-0k0.2
+ _ZNK10UkuiWindow5appIdEv@Base 2.5.2.0-0k0.2
+ _ZNK10UkuiWindow5titleEv@Base 2.5.2.0-0k0.2
+ _ZNK10UkuiWindow7isValidEv@Base 2.5.2.0-0k0.2
+ _ZNK10UkuiWindow8geometryEv@Base 2.5.2.0-0k0.2
+ _ZNK10UkuiWindow8isActiveEv@Base 2.5.2.0-0k0.2
+ _ZNK10UkuiWindow8isShadedEv@Base 2.5.2.0-0k0.2
+ _ZNK10UkuiWindow9isMovableEv@Base 2.5.2.0-0k0.2
+ _ZNK10UkuiWindowcvP11ukui_windowEv@Base 2.5.2.0-0k0.2
  _ZNK11XAtomHelper10metaObjectEv@Base 1.2.0.3
+ _ZNK13XdgActivation10metaObjectEv@Base 2.5.2.0-0k0.2
+ _ZNK13XdgActivation7isValidEv@Base 2.5.2.0-0k0.2
+ _ZNK13XdgActivationcvP17xdg_activation_v1Ev@Base 2.5.2.0-0k0.2
+ _ZNK15ExtIdleNotifier10metaObjectEv@Base 2.5.2.0-0k0.2
+ _ZNK15ExtIdleNotifier7isValidEv@Base 2.5.2.0-0k0.2
+ _ZNK15ExtIdleNotifiercvP20ext_idle_notifier_v1Ev@Base 2.5.2.0-0k0.2
+ _ZNK15UkuiBlurManager10metaObjectEv@Base 2.5.2.0-0k0.2
+ _ZNK15UkuiBlurManager7isValidEv@Base 2.5.2.0-0k0.2
+ _ZNK15UkuiBlurManagercvP20ukui_blur_manager_v1Ev@Base 2.5.2.0-0k0.2
+ _ZNK16BlurXcbInterface10metaObjectEv@Base 2.5.2.0-0k0.2
+ _ZNK16UkuiShellSurface10metaObjectEv@Base 2.5.2.0-0k0.2
+ _ZNK16UkuiShellSurface15surfacePropertyEv@Base 2.5.2.0-0k0.2
+ _ZNK16UkuiShellSurface4roleEv@Base 2.5.2.0-0k0.2
+ _ZNK16UkuiShellSurface7isValidEv@Base 2.5.2.0-0k0.2
+ _ZNK16UkuiShellSurfacecvP12ukui_surfaceEv@Base 2.5.2.0-0k0.2
+ _ZNK18XdgActivationToken10metaObjectEv@Base 2.5.2.0-0k0.2
+ _ZNK18XdgActivationToken7isValidEv@Base 2.5.2.0-0k0.2
+ _ZNK18XdgActivationTokencvP23xdg_activation_token_v1Ev@Base 2.5.2.0-0k0.2
+ _ZNK19ExtIdleNotification10metaObjectEv@Base 2.5.2.0-0k0.2
+ _ZNK19ExtIdleNotification7isValidEv@Base 2.5.2.0-0k0.2
+ _ZNK19ExtIdleNotificationcvP24ext_idle_notification_v1Ev@Base 2.5.2.0-0k0.2
+ _ZNK19KdeWaylandInterface10metaObjectEv@Base 2.5.2.0-0k0.2
+ _ZNK20BlurWaylandInterface10metaObjectEv@Base 2.5.2.0-0k0.2
+ _ZNK20UkuiWaylandInterface10metaObjectEv@Base 2.5.2.0-0k0.2
+ _ZNK20UkuiWindowManagement10metaObjectEv@Base 2.5.2.0-0k0.2
+ _ZNK20UkuiWindowManagement12activeWindowEv@Base 2.5.2.0-0k0.2
+ _ZNK20UkuiWindowManagement13stackingOrderEv@Base 2.5.2.0-0k0.2
+ _ZNK20UkuiWindowManagement16isShowingDesktopEv@Base 2.5.2.0-0k0.2
+ _ZNK20UkuiWindowManagement18stackingOrderUuidsEv@Base 2.5.2.0-0k0.2
+ _ZNK20UkuiWindowManagement7isValidEv@Base 2.5.2.0-0k0.2
+ _ZNK20UkuiWindowManagement7windowsEv@Base 2.5.2.0-0k0.2
+ _ZNK20UkuiWindowManagementcvP22ukui_window_managementEv@Base 2.5.2.0-0k0.2
+ _ZNK3kdk11BlurManager10metaObjectEv@Base 2.5.2.0-0k0.2
+ _ZNK3kdk12IdleNotifier10metaObjectEv@Base 2.5.2.0-0k0.2
  _ZNK3kdk13WindowManager10metaObjectEv@Base 1.2.0.3
  _ZNK3kdk17AbstractInterface10metaObjectEv@Base 1.2.0.3
+ _ZNK8UkuiBlur10metaObjectEv@Base 2.5.2.0-0k0.2
+ _ZNK8UkuiBlur7isValidEv@Base 2.5.2.0-0k0.2
+ _ZNK8UkuiBlurcvP20ukui_blur_surface_v1Ev@Base 2.5.2.0-0k0.2
+ _ZNK9UkuiShell10metaObjectEv@Base 2.5.2.0-0k0.2
+ _ZNK9UkuiShell7isValidEv@Base 2.5.2.0-0k0.2
+ _ZNK9UkuiShellcvP10ukui_shellEv@Base 2.5.2.0-0k0.2
+ _ZTI10OutputInfo@Base 2.5.2.0-0k0.2
+ _ZTI10UkuiWindow@Base 2.5.2.0-0k0.2
  _ZTI11XAtomHelper@Base 1.2.0.3
+ _ZTI12XcbInterface@Base 2.5.2.0-0k0.2
+ _ZTI13XdgActivation@Base 2.5.2.0-0k0.2
+ _ZTI15ExtIdleNotifier@Base 2.5.2.0-0k0.2
+ _ZTI15UkuiBlurManager@Base 2.5.2.0-0k0.2
+ _ZTI16BlurXcbInterface@Base 2.5.2.0-0k0.2
+ _ZTI16QFutureInterfaceI5QIconE@Base 2.5.2.0-0k0.2
+ _ZTI16UkuiShellSurface@Base 2.5.2.0-0k0.2
+ _ZTI18XdgActivationToken@Base 2.5.2.0-0k0.2
+ _ZTI19ExtIdleNotification@Base 2.5.2.0-0k0.2
+ _ZTI19KdeWaylandInterface@Base 2.5.2.0-0k0.2
+ _ZTI20BlurWaylandInterface@Base 2.5.2.0-0k0.2
+ _ZTI20UkuiWaylandInterface@Base 2.5.2.0-0k0.2
+ _ZTI20UkuiWindowManagement@Base 2.5.2.0-0k0.2
+ _ZTI21BlurAbstractInterface@Base 2.5.2.0-0k0.2
+ _ZTI8UkuiBlur@Base 2.5.2.0-0k0.2
+ _ZTI9UkuiShell@Base 2.5.2.0-0k0.2
+ _ZTIN12QtConcurrent15RunFunctionTaskI5QIconEE@Base 2.5.2.0-0k0.2
+ _ZTIN12QtConcurrent19RunFunctionTaskBaseI5QIconEE@Base 2.5.2.0-0k0.2
  _ZTIN3kdk10WmRegisterE@Base 1.2.0.3
+ _ZTIN3kdk11BlurManagerE@Base 2.5.2.0-0k0.2
+ _ZTIN3kdk12IdleNotifierE@Base 2.5.2.0-0k0.2
  _ZTIN3kdk13WindowManagerE@Base 1.2.0.3
  _ZTIN3kdk15UkuiStyleHelperE@Base 1.2.0.3
  _ZTIN3kdk17AbstractInterfaceE@Base 1.2.0.3
+ _ZTS10OutputInfo@Base 2.5.2.0-0k0.2
+ _ZTS10UkuiWindow@Base 2.5.2.0-0k0.2
  _ZTS11XAtomHelper@Base 1.2.0.3
+ _ZTS12XcbInterface@Base 2.5.2.0-0k0.2
+ _ZTS13XdgActivation@Base 2.5.2.0-0k0.2
+ _ZTS14QFutureWatcherI5QIconE@Base 2.5.2.0-0k0.2
+ _ZTS15ExtIdleNotifier@Base 2.5.2.0-0k0.2
+ _ZTS15UkuiBlurManager@Base 2.5.2.0-0k0.2
+ _ZTS16BlurXcbInterface@Base 2.5.2.0-0k0.2
+ _ZTS16QFutureInterfaceI5QIconE@Base 2.5.2.0-0k0.2
+ _ZTS16UkuiShellSurface@Base 2.5.2.0-0k0.2
+ _ZTS18XdgActivationToken@Base 2.5.2.0-0k0.2
+ _ZTS19ExtIdleNotification@Base 2.5.2.0-0k0.2
+ _ZTS19KdeWaylandInterface@Base 2.5.2.0-0k0.2
+ _ZTS20BlurWaylandInterface@Base 2.5.2.0-0k0.2
+ _ZTS20UkuiWaylandInterface@Base 2.5.2.0-0k0.2
+ _ZTS20UkuiWindowManagement@Base 2.5.2.0-0k0.2
+ _ZTS21BlurAbstractInterface@Base 2.5.2.0-0k0.2
+ _ZTS8UkuiBlur@Base 2.5.2.0-0k0.2
+ _ZTS9UkuiShell@Base 2.5.2.0-0k0.2
+ _ZTSN12QtConcurrent15RunFunctionTaskI5QIconEE@Base 2.5.2.0-0k0.2
+ _ZTSN12QtConcurrent19RunFunctionTaskBaseI5QIconEE@Base 2.5.2.0-0k0.2
  _ZTSN3kdk10WmRegisterE@Base 1.2.0.3
+ _ZTSN3kdk11BlurManagerE@Base 2.5.2.0-0k0.2
+ _ZTSN3kdk12IdleNotifierE@Base 2.5.2.0-0k0.2
  _ZTSN3kdk13WaylandHelperE@Base 1.2.0.3
  _ZTSN3kdk13WindowManagerE@Base 1.2.0.3
  _ZTSN3kdk15UkuiStyleHelperE@Base 1.2.0.3
  _ZTSN3kdk17AbstractInterfaceE@Base 1.2.0.3
+ _ZTV10OutputInfo@Base 2.5.2.0-0k0.2
+ _ZTV10UkuiWindow@Base 2.5.2.0-0k0.2
  _ZTV11XAtomHelper@Base 1.2.0.3
+ _ZTV12XcbInterface@Base 2.5.2.0-0k0.2
+ _ZTV13XdgActivation@Base 2.5.2.0-0k0.2
+ _ZTV15ExtIdleNotifier@Base 2.5.2.0-0k0.2
+ _ZTV15UkuiBlurManager@Base 2.5.2.0-0k0.2
+ _ZTV16BlurXcbInterface@Base 2.5.2.0-0k0.2
+ _ZTV16UkuiShellSurface@Base 2.5.2.0-0k0.2
+ _ZTV18XdgActivationToken@Base 2.5.2.0-0k0.2
+ _ZTV19ExtIdleNotification@Base 2.5.2.0-0k0.2
+ _ZTV19KdeWaylandInterface@Base 2.5.2.0-0k0.2
+ _ZTV20BlurWaylandInterface@Base 2.5.2.0-0k0.2
+ _ZTV20UkuiWaylandInterface@Base 2.5.2.0-0k0.2
+ _ZTV20UkuiWindowManagement@Base 2.5.2.0-0k0.2
+ _ZTV8UkuiBlur@Base 2.5.2.0-0k0.2
+ _ZTV9UkuiShell@Base 2.5.2.0-0k0.2
  _ZTVN3kdk10WmRegisterE@Base 1.2.0.3
+ _ZTVN3kdk11BlurManagerE@Base 2.5.2.0-0k0.2
+ _ZTVN3kdk12IdleNotifierE@Base 2.5.2.0-0k0.2
  _ZTVN3kdk13WindowManagerE@Base 1.2.0.3
  _ZTVN3kdk15UkuiStyleHelperE@Base 1.2.0.3
  _ZTVN3kdk17AbstractInterfaceE@Base 1.2.0.3
- org_kde_plasma_activation_feedback_interface@Base 2.3.1.0
- org_kde_plasma_activation_interface@Base 2.3.1.0
- org_kde_plasma_window_interface@Base 2.3.1.0
- org_kde_plasma_window_management_interface@Base 2.3.1.0
+ _ZZN11QMetaTypeIdIP10UkuiWindowE14qt_metatype_idEvE11metatype_id@Base 2.5.2.0-0k0.2
+ _ZZN18QMetaTypeIdQObjectIP10OutputInfoLi8EE14qt_metatype_idEvE11metatype_id@Base 2.5.2.0-0k0.2
+ _ZZN9QtPrivate15ConnectionTypesINS_4ListIJRK7QStringEEELb1EE5typesEvE1t@Base 2.5.2.0-0k0.2
+ _ZZN9QtPrivate15ConnectionTypesINS_4ListIJbEEELb1EE5typesEvE1t@Base 2.5.2.0-0k0.2
diff -Nru libkysdk-applications-2.5.1.0/debian/patches/0001-update-changelog.patch libkysdk-applications-2.5.2.0/debian/patches/0001-update-changelog.patch
--- libkysdk-applications-2.5.1.0/debian/patches/0001-update-changelog.patch	2024-07-31 11:09:38.000000000 +0800
+++ libkysdk-applications-2.5.2.0/debian/patches/0001-update-changelog.patch	2025-03-17 13:09:05.000000000 +0800
@@ -1,18 +1,18 @@
-From: sunzhen <sunzhen1@kylinos.cn>
-Date: Thu, 16 May 2024 09:59:38 +0800
+From: =?utf-8?b?546L5oyv5a6H?= <wangzhenyu@kylinos.cn>
+Date: Tue, 29 Oct 2024 15:56:32 +0800
 Subject: update changelog
 
 ---
- .gitignore                                         |   3 +
- kysdk-qtwidgets/translations/gui_kk.ts             |  74 +--
- kysdk-qtwidgets/translations/gui_ky.ts             |  74 +--
- kysdk-qtwidgets/translations/gui_ug.ts             |  74 +--
- .../src/windowmanager/waylandinterface.cpp         | 685 ---------------------
- .../src/windowmanager/waylandinterface.h           | 109 ----
- 6 files changed, 114 insertions(+), 905 deletions(-)
+ .gitignore                              |  3 +++
+ kysdk-qtwidgets/src/kbreadcrumb.cpp     | 33 +++++++++++++++++++++++++--------
+ kysdk-qtwidgets/src/kpasswordedit.cpp   |  5 ++++-
+ kysdk-qtwidgets/src/kpressbutton.cpp    |  7 ++++++-
+ kysdk-qtwidgets/src/kpushbutton.cpp     |  2 ++
+ kysdk-qtwidgets/src/ksearchlineedit.cpp |  4 ++--
+ kysdk-qtwidgets/src/ktabbar.cpp         |  4 ++++
+ kysdk-qtwidgets/src/ktoolbutton.cpp     |  2 ++
+ 8 files changed, 48 insertions(+), 12 deletions(-)
  create mode 100644 .gitignore
- delete mode 100644 kysdk-waylandhelper/src/windowmanager/waylandinterface.cpp
- delete mode 100644 kysdk-waylandhelper/src/windowmanager/waylandinterface.h
 
 diff --git a/.gitignore b/.gitignore
 new file mode 100644
@@ -23,1637 +23,162 @@
 +build/
 +build-*/
 +*.user
-diff --git a/kysdk-qtwidgets/translations/gui_kk.ts b/kysdk-qtwidgets/translations/gui_kk.ts
-index 2196dba..27c9db9 100644
---- a/kysdk-qtwidgets/translations/gui_kk.ts
-+++ b/kysdk-qtwidgets/translations/gui_kk.ts
-@@ -6,25 +6,25 @@
-     <message>
-         <location filename="../src/kaboutdialog.cpp" line="122"/>
-         <source>Your system does not have any email application installed or the default mail application is not set up</source>
--        <translation>Жүйеңізде орнатылған электрондық пошта бағдарламалары жоқ немесе әдепкі пошта бағдарламасының жиынтығы жоқ</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <location filename="../src/kaboutdialog.cpp" line="123"/>
-         <source>Unable to open mail application</source>
--        <translation>Пошта қолданбасы ашылмады</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <location filename="../src/kaboutdialog.cpp" line="257"/>
-         <location filename="../src/kaboutdialog.cpp" line="271"/>
-         <source>Service &amp; Support: </source>
-         <translatorcomment>服务与支持团队:</translatorcomment>
--        <translation>Қызмет және қолдау: </translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <location filename="../src/kaboutdialog.cpp" line="263"/>
-         <location filename="../src/kaboutdialog.cpp" line="277"/>
-         <source>Privacy statement</source>
--        <translation>Құпиялылық туралы мәлімдеме</translation>
-+        <translation type="unfinished"></translation>
-     </message>
- </context>
- <context>
-@@ -32,12 +32,12 @@
-     <message>
-         <location filename="../src/kaboutdialog.cpp" line="381"/>
-         <source>version :</source>
--        <translation>нұсқасы:</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <location filename="../src/kaboutdialog.cpp" line="386"/>
-         <source>Version number not found</source>
--        <translation>Нұсқа нөмірі табылмады</translation>
-+        <translation type="unfinished"></translation>
-     </message>
- </context>
- <context>
-@@ -45,7 +45,7 @@
-     <message>
-         <location filename="../src/kdragwidget.cpp" line="102"/>
-         <source>Select or drag and drop the folder identification path</source>
--        <translation>Қалтаны сәйкестендіру жолын таңдау немесе апару және тастау</translation>
-+        <translation type="unfinished"></translation>
-     </message>
- </context>
- <context>
-@@ -53,7 +53,7 @@
-     <message>
-         <location filename="../src/kdragwidget.cpp" line="62"/>
-         <source>Please select file</source>
--        <translation>Файлды таңдауыңызды сұраймын</translation>
-+        <translation type="unfinished"></translation>
-     </message>
- </context>
- <context>
-@@ -61,7 +61,7 @@
-     <message>
-         <location filename="../src/kinputdialog.cpp" line="241"/>
-         <source>Enter a value:</source>
--        <translation>Мәнді енгізіңіз:</translation>
-+        <translation type="unfinished"></translation>
-     </message>
- </context>
- <context>
-@@ -69,12 +69,12 @@
-     <message>
-         <location filename="../src/kinputdialog.cpp" line="250"/>
-         <source>ok</source>
--        <translation>Жақсы</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <location filename="../src/kinputdialog.cpp" line="252"/>
-         <source>cancel</source>
--        <translation>Болдырмау</translation>
-+        <translation type="unfinished"></translation>
-     </message>
- </context>
- <context>
-@@ -82,48 +82,48 @@
-     <message>
-         <location filename="../src/kmenubutton.cpp" line="67"/>
-         <source>Options</source>
--        <translation>Параметрлер</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <location filename="../src/kmenubutton.cpp" line="68"/>
-         <source>Setting</source>
-         <translatorcomment>设置</translatorcomment>
--        <translation>Баптау</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <location filename="../src/kmenubutton.cpp" line="69"/>
-         <source>Theme</source>
--        <translation>Тақырып</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <location filename="../src/kmenubutton.cpp" line="70"/>
-         <source>Assist</source>
--        <translation>Көмек көрсету</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <location filename="../src/kmenubutton.cpp" line="71"/>
-         <source>About</source>
--        <translation>Шамамен</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <location filename="../src/kmenubutton.cpp" line="72"/>
-         <source>Quit</source>
--        <translation>Шығу</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <location filename="../src/kmenubutton.cpp" line="79"/>
-         <source>Auto</source>
--        <translation>Авто</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <location filename="../src/kmenubutton.cpp" line="81"/>
-         <source>Light</source>
--        <translation>Жарық</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <location filename="../src/kmenubutton.cpp" line="83"/>
-         <source>Dark</source>
--        <translation>Қараңғы</translation>
-+        <translation type="unfinished"></translation>
-     </message>
- </context>
- <context>
-@@ -131,7 +131,7 @@
-     <message>
-         <location filename="../src/kprogressdialog.cpp" line="70"/>
-         <source>cancel</source>
--        <translation>Болдырмау</translation>
-+        <translation type="unfinished"></translation>
-     </message>
- </context>
- <context>
-@@ -140,7 +140,7 @@
-         <location filename="../src/ksearchlineedit.cpp" line="627"/>
-         <location filename="../src/ksearchlineedit.cpp" line="815"/>
-         <source>Search</source>
--        <translation>Іздеу</translation>
-+        <translation type="unfinished"></translation>
-     </message>
- </context>
- <context>
-@@ -148,17 +148,17 @@
-     <message>
-         <location filename="../src/ksecuritylevelbar.cpp" line="62"/>
-         <source>Low</source>
--        <translation>Төмен</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <location filename="../src/ksecuritylevelbar.cpp" line="65"/>
-         <source>Medium</source>
--        <translation>Орташа</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <location filename="../src/ksecuritylevelbar.cpp" line="68"/>
-         <source>High</source>
--        <translation>Жоғары</translation>
-+        <translation type="unfinished"></translation>
-     </message>
- </context>
- <context>
-@@ -166,7 +166,7 @@
-     <message>
-         <location filename="../src/ksecuritylevelbar.cpp" line="179"/>
-         <source>Low</source>
--        <translation>Төмен</translation>
-+        <translation type="unfinished"></translation>
-     </message>
- </context>
- <context>
-@@ -176,17 +176,17 @@
-         <location filename="../src/kuninstalldialog.cpp" line="216"/>
-         <source>uninstall</source>
-         <translatorcomment>立即卸载</translatorcomment>
--        <translation>жою</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <location filename="../src/kuninstalldialog.cpp" line="185"/>
-         <source>deb name:</source>
--        <translation>деб атауы:</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <location filename="../src/kuninstalldialog.cpp" line="190"/>
-         <source>deb version:</source>
--        <translation>deb нұсқасы:</translation>
-+        <translation type="unfinished"></translation>
-     </message>
- </context>
- <context>
-@@ -194,12 +194,12 @@
-     <message>
-         <location filename="../src/kuninstalldialog.cpp" line="305"/>
-         <source>deb name:</source>
--        <translation>деб атауы:</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <location filename="../src/kuninstalldialog.cpp" line="309"/>
-         <source>deb version:</source>
--        <translation>deb нұсқасы:</translation>
-+        <translation type="unfinished"></translation>
-     </message>
- </context>
- <context>
-@@ -208,13 +208,13 @@
-         <location filename="../src/kwindowbuttonbar.cpp" line="156"/>
-         <location filename="../src/kwindowbuttonbar.cpp" line="178"/>
-         <source>Maximize</source>
--        <translation>Барынша көбейту</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <location filename="../src/kwindowbuttonbar.cpp" line="162"/>
-         <location filename="../src/kwindowbuttonbar.cpp" line="183"/>
-         <source>Restore</source>
--        <translation>Қалпына келтіру</translation>
-+        <translation type="unfinished"></translation>
-     </message>
- </context>
- <context>
-@@ -222,22 +222,22 @@
-     <message>
-         <location filename="../src/kwindowbuttonbar.cpp" line="271"/>
-         <source>Minimize</source>
--        <translation>Кішірейту</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <location filename="../src/kwindowbuttonbar.cpp" line="280"/>
-         <source>Close</source>
--        <translation>Жабу</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <location filename="../src/kwindowbuttonbar.cpp" line="341"/>
-         <source>Maximize</source>
--        <translation>Барынша көбейту</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <location filename="../src/kwindowbuttonbar.cpp" line="346"/>
-         <source>Restore</source>
--        <translation>Қалпына келтіру</translation>
-+        <translation type="unfinished"></translation>
-     </message>
- </context>
- </TS>
-diff --git a/kysdk-qtwidgets/translations/gui_ky.ts b/kysdk-qtwidgets/translations/gui_ky.ts
-index f0d7860..2f943a7 100644
---- a/kysdk-qtwidgets/translations/gui_ky.ts
-+++ b/kysdk-qtwidgets/translations/gui_ky.ts
-@@ -6,25 +6,25 @@
-     <message>
-         <location filename="../src/kaboutdialog.cpp" line="122"/>
-         <source>Your system does not have any email application installed or the default mail application is not set up</source>
--        <translation>Системаңызда орнотулган электрондук почта тиркемелери жок же дефолт почта тиркемеси орнотулган жок</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <location filename="../src/kaboutdialog.cpp" line="123"/>
-         <source>Unable to open mail application</source>
--        <translation>Почта арызын ачууга болбоду</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <location filename="../src/kaboutdialog.cpp" line="257"/>
-         <location filename="../src/kaboutdialog.cpp" line="271"/>
-         <source>Service &amp; Support: </source>
-         <translatorcomment>服务与支持团队:</translatorcomment>
--        <translation>Кызмат &amp;: </translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <location filename="../src/kaboutdialog.cpp" line="263"/>
-         <location filename="../src/kaboutdialog.cpp" line="277"/>
-         <source>Privacy statement</source>
--        <translation>Купуялуулук билдирүүсү</translation>
-+        <translation type="unfinished"></translation>
-     </message>
- </context>
- <context>
-@@ -32,12 +32,12 @@
-     <message>
-         <location filename="../src/kaboutdialog.cpp" line="381"/>
-         <source>version :</source>
--        <translation>нускасы :</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <location filename="../src/kaboutdialog.cpp" line="386"/>
-         <source>Version number not found</source>
--        <translation>Версиянын номери табылган жок</translation>
-+        <translation type="unfinished"></translation>
-     </message>
- </context>
- <context>
-@@ -45,7 +45,7 @@
-     <message>
-         <location filename="../src/kdragwidget.cpp" line="102"/>
-         <source>Select or drag and drop the folder identification path</source>
--        <translation>Папканы аныктоо жолун тандоо же сүйрөп чыгуу</translation>
-+        <translation type="unfinished"></translation>
-     </message>
- </context>
- <context>
-@@ -53,7 +53,7 @@
-     <message>
-         <location filename="../src/kdragwidget.cpp" line="62"/>
-         <source>Please select file</source>
--        <translation>Файлды тандаңыз</translation>
-+        <translation type="unfinished"></translation>
-     </message>
- </context>
- <context>
-@@ -61,7 +61,7 @@
-     <message>
-         <location filename="../src/kinputdialog.cpp" line="241"/>
-         <source>Enter a value:</source>
--        <translation>Бир наркты киргизүү:</translation>
-+        <translation type="unfinished"></translation>
-     </message>
- </context>
- <context>
-@@ -69,12 +69,12 @@
-     <message>
-         <location filename="../src/kinputdialog.cpp" line="250"/>
-         <source>ok</source>
--        <translation>Макул</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <location filename="../src/kinputdialog.cpp" line="252"/>
-         <source>cancel</source>
--        <translation>Жокко чыгаруу</translation>
-+        <translation type="unfinished"></translation>
-     </message>
- </context>
- <context>
-@@ -82,48 +82,48 @@
-     <message>
-         <location filename="../src/kmenubutton.cpp" line="67"/>
-         <source>Options</source>
--        <translation>Параметрлер</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <location filename="../src/kmenubutton.cpp" line="68"/>
-         <source>Setting</source>
-         <translatorcomment>设置</translatorcomment>
--        <translation>Орнотуу</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <location filename="../src/kmenubutton.cpp" line="69"/>
-         <source>Theme</source>
--        <translation>Тема</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <location filename="../src/kmenubutton.cpp" line="70"/>
-         <source>Assist</source>
--        <translation>Жардам</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <location filename="../src/kmenubutton.cpp" line="71"/>
-         <source>About</source>
--        <translation>Жөнүндө</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <location filename="../src/kmenubutton.cpp" line="72"/>
-         <source>Quit</source>
--        <translation>Чыгуу</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <location filename="../src/kmenubutton.cpp" line="79"/>
-         <source>Auto</source>
--        <translation>Авто</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <location filename="../src/kmenubutton.cpp" line="81"/>
-         <source>Light</source>
--        <translation>Жарык</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <location filename="../src/kmenubutton.cpp" line="83"/>
-         <source>Dark</source>
--        <translation>Караңгы</translation>
-+        <translation type="unfinished"></translation>
-     </message>
- </context>
- <context>
-@@ -131,7 +131,7 @@
-     <message>
-         <location filename="../src/kprogressdialog.cpp" line="70"/>
-         <source>cancel</source>
--        <translation>Жокко чыгаруу</translation>
-+        <translation type="unfinished"></translation>
-     </message>
- </context>
- <context>
-@@ -140,7 +140,7 @@
-         <location filename="../src/ksearchlineedit.cpp" line="627"/>
-         <location filename="../src/ksearchlineedit.cpp" line="815"/>
-         <source>Search</source>
--        <translation>Издөө</translation>
-+        <translation type="unfinished"></translation>
-     </message>
- </context>
- <context>
-@@ -148,17 +148,17 @@
-     <message>
-         <location filename="../src/ksecuritylevelbar.cpp" line="62"/>
-         <source>Low</source>
--        <translation>Төмөн</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <location filename="../src/ksecuritylevelbar.cpp" line="65"/>
-         <source>Medium</source>
--        <translation>Орто</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <location filename="../src/ksecuritylevelbar.cpp" line="68"/>
-         <source>High</source>
--        <translation>Жогорку</translation>
-+        <translation type="unfinished"></translation>
-     </message>
- </context>
- <context>
-@@ -166,7 +166,7 @@
-     <message>
-         <location filename="../src/ksecuritylevelbar.cpp" line="179"/>
-         <source>Low</source>
--        <translation>Төмөн</translation>
-+        <translation type="unfinished"></translation>
-     </message>
- </context>
- <context>
-@@ -176,17 +176,17 @@
-         <location filename="../src/kuninstalldialog.cpp" line="216"/>
-         <source>uninstall</source>
-         <translatorcomment>立即卸载</translatorcomment>
--        <translation>туруксуз</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <location filename="../src/kuninstalldialog.cpp" line="185"/>
-         <source>deb name:</source>
--        <translation>деб аты:</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <location filename="../src/kuninstalldialog.cpp" line="190"/>
-         <source>deb version:</source>
--        <translation>деб версиясы:</translation>
-+        <translation type="unfinished"></translation>
-     </message>
- </context>
- <context>
-@@ -194,12 +194,12 @@
-     <message>
-         <location filename="../src/kuninstalldialog.cpp" line="305"/>
-         <source>deb name:</source>
--        <translation>деб аты:</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <location filename="../src/kuninstalldialog.cpp" line="309"/>
-         <source>deb version:</source>
--        <translation>деб версиясы:</translation>
-+        <translation type="unfinished"></translation>
-     </message>
- </context>
- <context>
-@@ -208,13 +208,13 @@
-         <location filename="../src/kwindowbuttonbar.cpp" line="156"/>
-         <location filename="../src/kwindowbuttonbar.cpp" line="178"/>
-         <source>Maximize</source>
--        <translation>Максималдуу</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <location filename="../src/kwindowbuttonbar.cpp" line="162"/>
-         <location filename="../src/kwindowbuttonbar.cpp" line="183"/>
-         <source>Restore</source>
--        <translation>Калыбына келтирүү</translation>
-+        <translation type="unfinished"></translation>
-     </message>
- </context>
- <context>
-@@ -222,22 +222,22 @@
-     <message>
-         <location filename="../src/kwindowbuttonbar.cpp" line="271"/>
-         <source>Minimize</source>
--        <translation>Минималдуу</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <location filename="../src/kwindowbuttonbar.cpp" line="280"/>
-         <source>Close</source>
--        <translation>Жабуу</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <location filename="../src/kwindowbuttonbar.cpp" line="341"/>
-         <source>Maximize</source>
--        <translation>Максималдуу</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <location filename="../src/kwindowbuttonbar.cpp" line="346"/>
-         <source>Restore</source>
--        <translation>Калыбына келтирүү</translation>
-+        <translation type="unfinished"></translation>
-     </message>
- </context>
- </TS>
-diff --git a/kysdk-qtwidgets/translations/gui_ug.ts b/kysdk-qtwidgets/translations/gui_ug.ts
-index 5dae9ed..1778169 100644
---- a/kysdk-qtwidgets/translations/gui_ug.ts
-+++ b/kysdk-qtwidgets/translations/gui_ug.ts
-@@ -6,25 +6,25 @@
-     <message>
-         <location filename="../src/kaboutdialog.cpp" line="122"/>
-         <source>Your system does not have any email application installed or the default mail application is not set up</source>
--        <translation>سىزنىڭ سىستېمىڭىزغا ھېچقانداق ئېلخەت ئورنىتىلمىغان ياكى كۆڭۈلدىكىدەك پوچتا يوللانمىسىنىڭ قوللىنىلىشى ئورناتمىغان</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <location filename="../src/kaboutdialog.cpp" line="123"/>
-         <source>Unable to open mail application</source>
--        <translation>ئېلخەت ئىلتىماسىنى ئاچالمىدى</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <location filename="../src/kaboutdialog.cpp" line="257"/>
-         <location filename="../src/kaboutdialog.cpp" line="271"/>
-         <source>Service &amp; Support: </source>
-         <translatorcomment>服务与支持团队:</translatorcomment>
--        <translation>مۇلازىمەت &gt; قوللاش: </translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <location filename="../src/kaboutdialog.cpp" line="263"/>
-         <location filename="../src/kaboutdialog.cpp" line="277"/>
-         <source>Privacy statement</source>
--        <translation>مەخپىيەتلىك باياناتى</translation>
-+        <translation type="unfinished"></translation>
-     </message>
- </context>
- <context>
-@@ -32,12 +32,12 @@
-     <message>
-         <location filename="../src/kaboutdialog.cpp" line="381"/>
-         <source>version :</source>
--        <translation>نەشرى :</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <location filename="../src/kaboutdialog.cpp" line="386"/>
-         <source>Version number not found</source>
--        <translation>نەشر نومۇرى تېپىلمىدى</translation>
-+        <translation type="unfinished"></translation>
-     </message>
- </context>
- <context>
-@@ -45,7 +45,7 @@
-     <message>
-         <location filename="../src/kdragwidget.cpp" line="102"/>
-         <source>Select or drag and drop the folder identification path</source>
--        <translation>ھۆججەت قىسقۇچ بەلگىسى يولىنى تاللاش ياكى سۆرەپ قويۇش</translation>
-+        <translation type="unfinished"></translation>
-     </message>
- </context>
- <context>
-@@ -53,7 +53,7 @@
-     <message>
-         <location filename="../src/kdragwidget.cpp" line="62"/>
-         <source>Please select file</source>
--        <translation>ھۆججەت تاللاڭ</translation>
-+        <translation type="unfinished"></translation>
-     </message>
- </context>
- <context>
-@@ -61,7 +61,7 @@
-     <message>
-         <location filename="../src/kinputdialog.cpp" line="241"/>
-         <source>Enter a value:</source>
--        <translation>بىر قىممەت كىرگۈزۈڭ:</translation>
-+        <translation type="unfinished"></translation>
-     </message>
- </context>
- <context>
-@@ -69,12 +69,12 @@
-     <message>
-         <location filename="../src/kinputdialog.cpp" line="250"/>
-         <source>ok</source>
--        <translation>ماقۇل</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <location filename="../src/kinputdialog.cpp" line="252"/>
-         <source>cancel</source>
--        <translation>ئەمەلدىن قالدۇرۇش</translation>
-+        <translation type="unfinished"></translation>
-     </message>
- </context>
- <context>
-@@ -82,48 +82,48 @@
-     <message>
-         <location filename="../src/kmenubutton.cpp" line="67"/>
-         <source>Options</source>
--        <translation>تاللانمىلار</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <location filename="../src/kmenubutton.cpp" line="68"/>
-         <source>Setting</source>
-         <translatorcomment>设置</translatorcomment>
--        <translation>تەڭشەك</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <location filename="../src/kmenubutton.cpp" line="69"/>
-         <source>Theme</source>
--        <translation>ئۇسلۇب</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <location filename="../src/kmenubutton.cpp" line="70"/>
-         <source>Assist</source>
--        <translation>ياردەم</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <location filename="../src/kmenubutton.cpp" line="71"/>
-         <source>About</source>
--        <translation>ھەققىدە</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <location filename="../src/kmenubutton.cpp" line="72"/>
-         <source>Quit</source>
--        <translation>چېكىنىش</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <location filename="../src/kmenubutton.cpp" line="79"/>
-         <source>Auto</source>
--        <translation>ئاپتۇماتىك</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <location filename="../src/kmenubutton.cpp" line="81"/>
-         <source>Light</source>
--        <translation>نۇر</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <location filename="../src/kmenubutton.cpp" line="83"/>
-         <source>Dark</source>
--        <translation>قاراڭغۇلۇق</translation>
-+        <translation type="unfinished"></translation>
-     </message>
- </context>
- <context>
-@@ -131,7 +131,7 @@
-     <message>
-         <location filename="../src/kprogressdialog.cpp" line="70"/>
-         <source>cancel</source>
--        <translation>ئەمەلدىن قالدۇرۇش</translation>
-+        <translation type="unfinished"></translation>
-     </message>
- </context>
- <context>
-@@ -140,7 +140,7 @@
-         <location filename="../src/ksearchlineedit.cpp" line="627"/>
-         <location filename="../src/ksearchlineedit.cpp" line="815"/>
-         <source>Search</source>
--        <translation>ئىزدە</translation>
-+        <translation type="unfinished"></translation>
-     </message>
- </context>
- <context>
-@@ -148,17 +148,17 @@
-     <message>
-         <location filename="../src/ksecuritylevelbar.cpp" line="62"/>
-         <source>Low</source>
--        <translation>تۆۋەن</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <location filename="../src/ksecuritylevelbar.cpp" line="65"/>
-         <source>Medium</source>
--        <translation>ئوتتۇراھال</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <location filename="../src/ksecuritylevelbar.cpp" line="68"/>
-         <source>High</source>
--        <translation>يۇقىرى</translation>
-+        <translation type="unfinished"></translation>
-     </message>
- </context>
- <context>
-@@ -166,7 +166,7 @@
-     <message>
-         <location filename="../src/ksecuritylevelbar.cpp" line="179"/>
-         <source>Low</source>
--        <translation>تۆۋەن</translation>
-+        <translation type="unfinished"></translation>
-     </message>
- </context>
- <context>
-@@ -176,17 +176,17 @@
-         <location filename="../src/kuninstalldialog.cpp" line="216"/>
-         <source>uninstall</source>
-         <translatorcomment>立即卸载</translatorcomment>
--        <translation>Uninstall</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <location filename="../src/kuninstalldialog.cpp" line="185"/>
-         <source>deb name:</source>
--        <translation>deb نامى:</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <location filename="../src/kuninstalldialog.cpp" line="190"/>
-         <source>deb version:</source>
--        <translation>deb نۇسخىسى:</translation>
-+        <translation type="unfinished"></translation>
-     </message>
- </context>
- <context>
-@@ -194,12 +194,12 @@
-     <message>
-         <location filename="../src/kuninstalldialog.cpp" line="305"/>
-         <source>deb name:</source>
--        <translation>deb نامى:</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <location filename="../src/kuninstalldialog.cpp" line="309"/>
-         <source>deb version:</source>
--        <translation>deb نۇسخىسى:</translation>
-+        <translation type="unfinished"></translation>
-     </message>
- </context>
- <context>
-@@ -208,13 +208,13 @@
-         <location filename="../src/kwindowbuttonbar.cpp" line="156"/>
-         <location filename="../src/kwindowbuttonbar.cpp" line="178"/>
-         <source>Maximize</source>
--        <translation>ئەڭ چوڭ چەككە</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <location filename="../src/kwindowbuttonbar.cpp" line="162"/>
-         <location filename="../src/kwindowbuttonbar.cpp" line="183"/>
-         <source>Restore</source>
--        <translation>ئەسلىگە كەلتۈرۈش</translation>
-+        <translation type="unfinished"></translation>
-     </message>
- </context>
- <context>
-@@ -222,22 +222,22 @@
-     <message>
-         <location filename="../src/kwindowbuttonbar.cpp" line="271"/>
-         <source>Minimize</source>
--        <translation>كىچىكلىتىش</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <location filename="../src/kwindowbuttonbar.cpp" line="280"/>
-         <source>Close</source>
--        <translation>ياپ</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <location filename="../src/kwindowbuttonbar.cpp" line="341"/>
-         <source>Maximize</source>
--        <translation>ئەڭ چوڭ چەككە</translation>
-+        <translation type="unfinished"></translation>
-     </message>
-     <message>
-         <location filename="../src/kwindowbuttonbar.cpp" line="346"/>
-         <source>Restore</source>
--        <translation>ئەسلىگە كەلتۈرۈش</translation>
-+        <translation type="unfinished"></translation>
-     </message>
- </context>
- </TS>
-diff --git a/kysdk-waylandhelper/src/windowmanager/waylandinterface.cpp b/kysdk-waylandhelper/src/windowmanager/waylandinterface.cpp
-deleted file mode 100644
-index 8245f8d..0000000
---- a/kysdk-waylandhelper/src/windowmanager/waylandinterface.cpp
-+++ /dev/null
-@@ -1,685 +0,0 @@
--/*
-- * libkysdk-waylandhelper's Library
-- *
-- * Copyright (C) 2023, KylinSoft Co., Ltd.
-- *
-- * 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 3 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 General Public License
-- * along with this library.  If not, see <https://www.gnu.org/licenses/>.
-- *
-- * Authors: Zhen Sun <sunzhen1@kylinos.cn>
-- *
-- */
--
--#include "waylandinterface.h"
--
--#include <QApplication>
--#include <QDebug>
--#include <KWayland/Client/registry.h>
--#include <KWayland/Client/surface.h>
--#include <QWindow>
--#include <QEvent>
--#include "wayland-plasma-window-management-client-protocol.h"
--WaylandInterface::WaylandInterface(QObject *parent)
--    :AbstractInterface(parent)
--{
--   m_connection = KWayland::Client::ConnectionThread::fromApplication(qApp);
--        auto registry = new Registry(this);
--        registry->create(m_connection->display());
--
--
--        connect(registry, &KWayland::Client::Registry::plasmaShellAnnounced, this, [=](){
--            const auto interface = registry->interface(KWayland::Client::Registry::Interface::PlasmaShell);
--            if (interface.name != 0) {
--                m_plasmaShell = registry->createPlasmaShell(interface.name, interface.version, this);
--            }
--        });
--
--        connect(registry, &Registry::plasmaWindowManagementAnnounced, this, [=](){
--            const auto interface = registry->interface(Registry::Interface::PlasmaWindowManagement);
--            if (interface.name != 0) {
--                m_windowManager = registry->createPlasmaWindowManagement(interface.name, interface.version, this);
--            }
--            if(m_windowManager)
--            {
--                connect(m_windowManager, &PlasmaWindowManagement::showingDesktopChanged,this,&AbstractInterface::isShowingDesktopChanged);
--                connect(m_windowManager, &PlasmaWindowManagement::windowCreated, this, &WaylandInterface::windowCreatedProxy);
--                connect(m_windowManager, &PlasmaWindowManagement::activeWindowChanged, this, [&]() noexcept {
--                            auto w = m_windowManager->activeWindow();
--                            if(w)
--                            {
--                                emit activeWindowChanged(w ? w->internalId() : 0);
--                            }
--                }, Qt::QueuedConnection);
--                connect(m_windowManager, &PlasmaWindowManagement::windowCreated,this,
--                    [this](PlasmaWindow *window)
--                {
--                    if (!m_windows.contains(window->internalId())) {
--                        m_windows.insert(window->internalId(), this->requestInfo(window->internalId()));
--                    }
--                    emit windowAdded(window->internalId());
--                });
--            }
--        });
--
--        connect(registry, &KWayland::Client::Registry::plasmaVirtualDesktopManagementAnnounced,
--                             [this, registry] (quint32 name, quint32 version) {
--            m_virtualDesktopManagement = registry->createPlasmaVirtualDesktopManagement(name, version, this);
--            if(m_virtualDesktopManagement)
--            {
--                connect(m_virtualDesktopManagement, &KWayland::Client::PlasmaVirtualDesktopManagement::desktopCreated, this,
--                        [this](const QString &id, quint32 position) {
--                    addDesktop(id, position);
--                });
--
--                connect(m_virtualDesktopManagement, &KWayland::Client::PlasmaVirtualDesktopManagement::desktopRemoved, this,
--                        [this](const QString &id) {
--                    m_desktops.removeAll(id);
--
--                    if (m_currentDesktop == id) {
--                        setCurrentDesktop(QString());
--                    }
--                });
--            }
--        });
--        connect(registry, &KWayland::Client::Registry::shellAnnounced, this, [=](){
--            const auto interface = registry->interface(KWayland::Client::Registry::Interface::Shell);
--            if (interface.name != 0) {
--                m_shell = registry->createShell(interface.name, interface.version, this);
--            }
--        });
--        registry->setup();
--        m_connection->roundtrip();
--}
--
--WaylandInterface::~WaylandInterface()
--{
--}
--
--WindowInfo WaylandInterface::requestInfo(WindowId wid)
--{
--    WindowInfo windowInfo;
--
--    auto w = windowFor(wid);
--
--    if (w) {
--        if (isPlasmaDesktop(w)) {
--            windowInfo.setIsValid(true);
--            windowInfo.setIsPlasmaDesktop(true);
--            windowInfo.setWid(wid);
--            //! Window Abilities
--            windowInfo.setIsClosable(false);
--            windowInfo.setIsFullScreenable(false);
--            windowInfo.setIsGroupable(false);
--            windowInfo.setIsMaximizable(false);
--            windowInfo.setIsMinimizable(false);
--            windowInfo.setIsMovable(false);
--            windowInfo.setIsResizable(false);
--            windowInfo.setIsShadeable(false);
--            windowInfo.setIsVirtualDesktopsChangeable(false);
--            //! Window Abilities
--
--        } else if (isValidWindow(w)) {
--            windowInfo.setIsValid(true);
--            windowInfo.setWid(wid);
--            windowInfo.setIsActive(w->isActive());
--            windowInfo.setIsMinimized(w->isMinimized());
--            windowInfo.setIsMaxVert(w->isMaximized());
--            windowInfo.setIsMaxHoriz(w->isMaximized());
--            windowInfo.setIsFullscreen(w->isFullscreen());
--            windowInfo.setIsShaded(w->isShaded());
--            windowInfo.setIsOnAllDesktops(w->isOnAllDesktops());
--            windowInfo.setIsOnAllActivities(true);
--            windowInfo.setHasSkipTaskbar(w->skipTaskbar());
--            windowInfo.setHasSkipSwitcher(w->skipSwitcher());
--            windowInfo.setIsKeepAbove(w->isKeepAbove());
--            //! Window Abilities
--            windowInfo.setIsClosable(w->isCloseable());
--            windowInfo.setIsFullScreenable(w->isFullscreenable());
--            windowInfo.setIsMaximizable(w->isMaximizeable());
--            windowInfo.setIsMinimizable(w->isMinimizeable());
--            windowInfo.setIsMovable(w->isMovable());
--            windowInfo.setIsResizable(w->isResizable());
--            windowInfo.setIsShadeable(w->isShadeable());
--            windowInfo.setIsVirtualDesktopsChangeable(w->isVirtualDesktopChangeable());
--            //! Window Abilities
--            windowInfo.setDesktops(w->plasmaVirtualDesktops());
--        }
--    } else {
--        windowInfo.setIsValid(false);
--    }
--
--    return windowInfo;
--
--}
--
--void WaylandInterface::requestActivate(WindowId wid)
--{
--    auto w = windowFor(wid);
--
--    if (w) {
--        w->requestActivate();
--        m_connection->roundtrip();
--        emit windowChanged(w->internalId());
--    }
--}
--
--void WaylandInterface::requestClose(WindowId wid)
--{
--    auto w = windowFor(wid);
--
--    if (w) {
--        w->requestClose();
--        m_connection->roundtrip();
--    }
--}
--
--void WaylandInterface::requestToggleKeepAbove(WindowId wid)
--{
--    auto w = windowFor(wid);
--
--    if (w) {
--        w->requestToggleKeepAbove();
--        m_connection->roundtrip();
--        emit windowChanged(w->internalId());
--    }
--}
--
--void WaylandInterface::requestToggleMinimized(WindowId wid)
--{
--    auto w = windowFor(wid);
--
--    if (w) {
--        w->requestToggleMinimized();
--        m_connection->roundtrip();
--    }
--}
--
--void WaylandInterface::requestToggleMaximized(WindowId wid)
--{
--    auto w = windowFor(wid);
--
--    if (w) {
--        w->requestToggleMaximized();
--        m_connection->roundtrip();
--    }
--}
--
--QIcon WaylandInterface::iconFor(WindowId wid)
--{
--    auto window = windowFor(wid);
--
--    if (window) {
--        return window->icon();
--    }
--
--    return QIcon();
--}
--
--QString WaylandInterface::titleFor(WindowId wid)
--{
--    auto window = windowFor(wid);
--
--    if (window) {
--        return window->title();
--    }
--    return QString();
--}
--
--QString WaylandInterface::windowGroupFor(WindowId wid)
--{
--    auto window = windowFor(wid);
--    if (window)
--    {
--        m_connection->roundtrip();
--        return window->appId();
--    }
--    else
--        return QString();
--}
--
--quint32 WaylandInterface::pid(WindowId wid)
--{
--    quint32 pid = 0;
--    auto window = windowFor(wid);
--    if (window)
--    {
--        m_connection->roundtrip();
--        return window->pid();
--    }
--    else
--        return pid;
--}
--
--void WaylandInterface::showCurrentDesktop()
--{
--    if(m_windowManager)
--    {
--        m_windowManager->showDesktop();
--        m_connection->roundtrip();
--    }
--
--}
--
--void WaylandInterface::hideCurrentDesktop()
--{
--    if(m_windowManager)
--    {
--        m_windowManager->hideDesktop();
--        m_connection->roundtrip();
--    }
--}
--
--bool WaylandInterface::windowCanBeDragged(WindowId wid)
--{
--    auto w = windowFor(wid);
--
--    if (w && isValidWindow(w)) {
--        WindowInfo winfo = requestInfo(wid);
--        return (winfo.isValid()
--                && w->isMovable()
--                && !winfo.isMinimized()
--                && inCurrentDesktopActivity(winfo)
--                && !winfo.isPlasmaDesktop());
--    }
--
--    return false;
--}
--
--bool WaylandInterface::windowCanBeMaximized(WindowId wid)
--{
--    auto w = windowFor(wid);
--
--    if (w && isValidWindow(w)) {
--        WindowInfo winfo = requestInfo(wid);
--        return (winfo.isValid()
--                && w->isMaximizeable()
--                && !winfo.isMinimized()
--                && inCurrentDesktopActivity(winfo)
--                && !winfo.isPlasmaDesktop());
--    }
--
--    return false;
--}
--
--WindowId WaylandInterface::activeWindow()
--{
--    if (!m_windowManager) {
--        return 0;
--    }
--    m_connection->roundtrip();
--    auto wid = m_windowManager->activeWindow();
--    return wid ? QVariant(wid->internalId()) : 0;
--}
--
--void WaylandInterface::setGeometry(QWindow *window, const QRect &rect)
--{
--    if(!window)
--        return;
--    if (!m_plasmaShell)
--        return;
--
--    auto surface = KWayland::Client::Surface::fromWindow(window);
--    if (!surface)
--        return;
--    if(!m_surfaces.contains(window))
--    {
--        m_surfaces.insert(window,surface);
--    }
--
--    auto plasmaShellSurface = m_plasmaShell->createSurface(surface, window);
--    if (!plasmaShellSurface)
--        return;
--    if(!m_plasmaShellSurfaces.contains(window))
--    {
--        m_plasmaShellSurfaces.insert(window,plasmaShellSurface);
--    }
--    plasmaShellSurface->setPosition(rect.topLeft());
--    window->resize(rect.size());
--
--
--    window->installEventFilter(this);
--}
--
--void WaylandInterface::setSkipTaskBar(QWindow *window, bool skip)
--{
--    if(!window)
--        return;
--    if (!m_plasmaShell)
--        return;
--
--    auto surface = KWayland::Client::Surface::fromWindow(window);
--    if (!surface)
--        return;
--    if(!m_surfaces.contains(window))
--        m_surfaces.insert(window,surface);
--    auto plasmaShellSurface = m_plasmaShell->createSurface(surface, window);
--    if (!plasmaShellSurface)
--        return;
--    if(!m_plasmaShellSurfaces.contains(window))
--        m_plasmaShellSurfaces.insert(window,plasmaShellSurface);
--
--    plasmaShellSurface->setSkipTaskbar(skip);
--
--    window->installEventFilter(this);
--}
--
--void WaylandInterface::setSkipSwitcher(QWindow *window, bool skip)
--{
--    if(!window)
--        return;
--    if (!m_plasmaShell)
--        return;
--
--    auto surface = KWayland::Client::Surface::fromWindow(window);
--    if (!surface)
--        return;
--    if(!m_surfaces.contains(window))
--        m_surfaces.insert(window,surface);
--    auto plasmaShellSurface = m_plasmaShell->createSurface(surface, window);
--    if (!plasmaShellSurface)
--        return;
--    if(!m_plasmaShellSurfaces.contains(window))
--        m_plasmaShellSurfaces.insert(window,plasmaShellSurface);
--
--    plasmaShellSurface->setSkipSwitcher(skip);
--
--
--    window->installEventFilter(this);
--}
--
--bool WaylandInterface::skipTaskBar(const WindowId &wid)
--{
--    auto window = windowFor(wid);
--
--    return window ? window->skipTaskbar() : false;
--}
--
--bool WaylandInterface::skipSwitcher(const WindowId &wid)
--{
--    auto window = windowFor(wid);
--
--    return window ? window->skipSwitcher() : false;
--}
--
--bool WaylandInterface::isShowingDesktop()
--{
--    bool flag = false;
--    if(m_windowManager)
--    {
--        flag = m_windowManager->isShowingDesktop();
--        m_connection->roundtrip();
--    }
--    return flag;
--}
--
--void WaylandInterface::setOnAllDesktops(const WindowId &wid)
--{
--    auto w = windowFor(wid);
--
--    if (w && isValidWindow(w) && m_desktops.count() > 1) {
--        if (w->isOnAllDesktops()) {
--            w->requestEnterVirtualDesktop(m_currentDesktop);
--        } else {
--            const QStringList &now = w->plasmaVirtualDesktops();
--
--            foreach (const QString &desktop, now) {
--                w->requestLeaveVirtualDesktop(desktop);
--            }
--        }
--    }
--}
--
--void WaylandInterface::setPanelTakefocus(QWindow *window,bool flag)
--{
--    if(!window)
--        return;
--    if (!m_plasmaShell)
--        return;
--
--    auto surface = KWayland::Client::Surface::fromWindow(window);
--    if (!surface)
--        return;
--    if(!m_surfaces.contains(window))
--    {
--        m_surfaces.insert(window,surface);
--    }
--
--    auto plasmaShellSurface = m_plasmaShell->createSurface(surface, window);
--    if (!plasmaShellSurface)
--        return;
--    if(!m_plasmaShellSurfaces.contains(window))
--    {
--        m_plasmaShellSurfaces.insert(window,plasmaShellSurface);
--    }
--    plasmaShellSurface->setPanelTakesFocus(flag);
--    window->installEventFilter(this);
--}
--
--NET::WindowType WaylandInterface::windowType(WindowId wid)
--{
--    return NET::WindowType::Normal;
--}
--
--void WaylandInterface::demandAttention(const WindowId &wid)
--{
--    auto w = windowFor(wid);
--    if (w) {
--         org_kde_plasma_window_set_state(*w, ORG_KDE_PLASMA_WINDOW_MANAGEMENT_STATE_DEMANDS_ATTENTION, ORG_KDE_PLASMA_WINDOW_MANAGEMENT_STATE_DEMANDS_ATTENTION);
--        m_connection->roundtrip();
--    }
--}
--
--bool WaylandInterface::eventFilter(QObject *obj, QEvent *ev)
--{
--    auto window = qobject_cast<QWindow*>(obj);
--    if(window && ev->type() == QEvent::Hide)
--    {
--        if(m_plasmaShellSurfaces.contains(window))
--        {
--            auto plasmaShellSurface = m_plasmaShellSurfaces.value(window);
--            if(plasmaShellSurface)
--            {
--                plasmaShellSurface->release();
--                plasmaShellSurface->destroy();
--            }
--            m_plasmaShellSurfaces.remove(window);
--        }
--        if(m_surfaces.contains(window))
--        {
--            auto surface = m_surfaces.value(window);
--            if(surface)
--            {
--                surface->release();
--                surface->destroy();
--            }
--            m_surfaces.remove(window);
--        }
--
--    }
--    return QObject::eventFilter(obj,ev);
--}
--
--void WaylandInterface::updateWindow()
--{
--    PlasmaWindow* w = qobject_cast<PlasmaWindow*>(QObject::sender());
--    if(w && !isPlasmaPanel(w))
--    {
--        m_connection->roundtrip();
--        emit windowChanged(w->internalId());
--    }
--}
--
--void WaylandInterface::windowUnmapped()
--{
--    PlasmaWindow *pW = qobject_cast<PlasmaWindow*>(QObject::sender());
--
--    if (pW) {
--        untrackWindow(pW);
--        if (!m_windows.contains(pW->internalId())) {
--            m_windows.remove(pW->internalId());
--        }
--        emit windowRemoved(pW->internalId());
--    }
--}
--
--PlasmaWindow *WaylandInterface::windowFor(WindowId wid)
--{
--    auto it = std::find_if(m_windowManager->windows().constBegin(), m_windowManager->windows().constEnd(), [&wid](PlasmaWindow * w) noexcept {
--            return w->isValid() && w->internalId() == wid;
--});
--
--    if (it == m_windowManager->windows().constEnd()) {
--        return nullptr;
--    }
--
--    return *it;
--}
--
--bool WaylandInterface::isValidWindow(const PlasmaWindow *w)
--{
--    return w->isValid();
--}
--
--bool WaylandInterface::isPlasmaDesktop(const PlasmaWindow *w)
--{
--    if (!w || (w->appId() != QLatin1String("org.kde.plasmashell"))) {
--        return false;
--    }
--
--    return AbstractInterface::isPlasmaDesktop(w->geometry());
--}
--
--bool WaylandInterface::isPlasmaPanel(const PlasmaWindow *w)
--{
--    if(w && w->appId() == QLatin1String("ukui-panel"))
--        return true;
--    else
--        return false;
--}
--
--void WaylandInterface::windowCreatedProxy(PlasmaWindow *w)
--{
--    if (!isValidWindow(w)) {
--        return;
--    }
--
--    if ((w->appId() == QLatin1String("org.kde.plasmashell")) && isPlasmaPanel(w))
--    {
--        return;
--    }
--    else
--    {
--        trackWindow(w);
--    }
--}
--
--void WaylandInterface::trackWindow(PlasmaWindow *w)
--{
--    if(!w || isPlasmaPanel(w)){
--        return;
--    }
--    //兼容旧的windowchanged信号
--    connect(w, &PlasmaWindow::titleChanged, this, &WaylandInterface::updateWindow);
--    connect(w, &PlasmaWindow::fullscreenChanged, this, &WaylandInterface::updateWindow);
--    connect(w, &PlasmaWindow::geometryChanged, this, &WaylandInterface::updateWindow);
--    connect(w, &PlasmaWindow::maximizedChanged, this, &WaylandInterface::updateWindow);
--    connect(w, &PlasmaWindow::minimizedChanged, this, &WaylandInterface::updateWindow);
--    connect(w, &PlasmaWindow::shadedChanged, this, &WaylandInterface::updateWindow);
--    connect(w, &PlasmaWindow::skipTaskbarChanged, this, &WaylandInterface::updateWindow);
--    connect(w, &PlasmaWindow::onAllDesktopsChanged, this, &WaylandInterface::updateWindow);
--    connect(w, &PlasmaWindow::parentWindowChanged, this, &WaylandInterface::updateWindow);
--    connect(w, &PlasmaWindow::iconChanged, this, &WaylandInterface::updateWindow);
--    connect(w, &PlasmaWindow::plasmaVirtualDesktopEntered, this, &WaylandInterface::updateWindow);
--    connect(w, &PlasmaWindow::plasmaVirtualDesktopLeft, this, &WaylandInterface::updateWindow);
--    connect(w, &PlasmaWindow::unmapped, this, &WaylandInterface::windowUnmapped);
--
--    //按照具体事件新增信号,since2.3
--    connect(w, &PlasmaWindow::titleChanged, this, [=](){emit titleChanged(w->internalId());});
--    connect(w, &PlasmaWindow::fullscreenChanged, this, [=](){emit fullscreenChanged(w->internalId());});
--    connect(w, &PlasmaWindow::iconChanged, this, [=](){emit iconChanged(w->internalId());});
--    connect(w, &PlasmaWindow::activeChanged, this, [=](){emit activeChanged(w->internalId());});
--    connect(w, &PlasmaWindow::keepAboveChanged, this, [=](){emit keepAboveChanged(w->internalId());});
--    connect(w, &PlasmaWindow::minimizedChanged, this, [=](){emit minimizedChanged(w->internalId());});
--    connect(w, &PlasmaWindow::maximizedChanged, this, [=](){emit maximizedChanged(w->internalId());});
--    connect(w, &PlasmaWindow::onAllDesktopsChanged, this, [=](){emit onAllDesktopsChanged(w->internalId());});
--    connect(w, &PlasmaWindow::demandsAttentionChanged, this, [=](){emit demandsAttentionChanged(w->internalId());});
--    connect(w, &PlasmaWindow::skipTaskbarChanged, this, [=](){emit skipTaskbarChanged(w->internalId());});
--    connect(w, &PlasmaWindow::skipSwitcherChanged, this, [=](){emit skipSwitcherChanged(w->internalId());});
--    connect(w, &PlasmaWindow::geometryChanged, this, [=](){emit geometryChanged(w->internalId());});
--}
--
--void WaylandInterface::untrackWindow(PlasmaWindow *w)
--{
--    if (!w) {
--        return;
--    }
--
--    disconnect(w, &PlasmaWindow::activeChanged, this, &WaylandInterface::updateWindow);
--    disconnect(w, &PlasmaWindow::titleChanged, this, &WaylandInterface::updateWindow);
--    disconnect(w, &PlasmaWindow::fullscreenChanged, this, &WaylandInterface::updateWindow);
--    disconnect(w, &PlasmaWindow::geometryChanged, this, &WaylandInterface::updateWindow);
--    disconnect(w, &PlasmaWindow::maximizedChanged, this, &WaylandInterface::updateWindow);
--    disconnect(w, &PlasmaWindow::minimizedChanged, this, &WaylandInterface::updateWindow);
--    disconnect(w, &PlasmaWindow::shadedChanged, this, &WaylandInterface::updateWindow);
--    disconnect(w, &PlasmaWindow::skipTaskbarChanged, this, &WaylandInterface::updateWindow);
--    disconnect(w, &PlasmaWindow::onAllDesktopsChanged, this, &WaylandInterface::updateWindow);
--    disconnect(w, &PlasmaWindow::parentWindowChanged, this, &WaylandInterface::updateWindow);
--    disconnect(w, &PlasmaWindow::plasmaVirtualDesktopEntered, this, &WaylandInterface::updateWindow);
--    disconnect(w, &PlasmaWindow::plasmaVirtualDesktopLeft, this, &WaylandInterface::updateWindow);
--    disconnect(w, &PlasmaWindow::unmapped, this, &WaylandInterface::windowUnmapped);
--
--
--    disconnect(w, &PlasmaWindow::titleChanged, 0, 0);
--    disconnect(w, &PlasmaWindow::iconChanged, 0, 0);
--    disconnect(w, &PlasmaWindow::activeChanged, 0, 0);
--    disconnect(w, &PlasmaWindow::keepAboveChanged, 0, 0);
--    disconnect(w, &PlasmaWindow::keepBelowChanged, 0, 0);
--    disconnect(w, &PlasmaWindow::minimizedChanged, 0, 0);
--    disconnect(w, &PlasmaWindow::maximizedChanged, 0, 0);
--    disconnect(w, &PlasmaWindow::onAllDesktopsChanged, 0, 0);
--    disconnect(w, &PlasmaWindow::demandsAttentionChanged, 0, 0);
--    disconnect(w, &PlasmaWindow::skipTaskbarChanged,  0, 0);
--    disconnect(w, &PlasmaWindow::skipSwitcherChanged, 0, 0);
--    disconnect(w, &PlasmaWindow::geometryChanged, 0, 0);
--}
--
--void WaylandInterface::setCurrentDesktop(QString desktop)
--{
--    if (m_currentDesktop == desktop) {
--        return;
--    }
--
--    m_currentDesktop = desktop;
--    emit currentDesktopChanged();
--}
--
--void WaylandInterface::addDesktop(const QString &id, quint32 position)
--{
--    if (m_desktops.contains(id)) {
--        return;
--    }
--
--    m_desktops.append(id);
--
--    const KWayland::Client::PlasmaVirtualDesktop *desktop = m_virtualDesktopManagement->getVirtualDesktop(id);
--
--    QObject::connect(desktop, &KWayland::Client::PlasmaVirtualDesktop::activated, this,
--                     [desktop, this]() {
--        setCurrentDesktop(desktop->id());
--    }
--    );
--
--    if (desktop->isActive()) {
--        setCurrentDesktop(id);
--    }
--}
-diff --git a/kysdk-waylandhelper/src/windowmanager/waylandinterface.h b/kysdk-waylandhelper/src/windowmanager/waylandinterface.h
-deleted file mode 100644
-index 53ce491..0000000
---- a/kysdk-waylandhelper/src/windowmanager/waylandinterface.h
-+++ /dev/null
-@@ -1,109 +0,0 @@
--/*
-- * libkysdk-waylandhelper's Library
-- *
-- * Copyright (C) 2023, KylinSoft Co., Ltd.
-- *
-- * 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 3 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 General Public License
-- * along with this library.  If not, see <https://www.gnu.org/licenses/>.
-- *
-- * Authors: Zhen Sun <sunzhen1@kylinos.cn>
-- *
-- */
--
--#ifndef WAYLANDINTERFACE_H
--#define WAYLANDINTERFACE_H
--
--#include "abstractinterface.h"
--
--#include <KWayland/Server/plasmashell_interface.h>
--#include <KWayland/Client/plasmawindowmanagement.h>
--#include <KWayland/Client/plasmavirtualdesktop.h>
--#include <KWayland/Client/plasmashell.h>
--#include <KWayland/Client/shell.h>
--#include <KWayland/Client/connection_thread.h>
--#include <QMap>
--
--using namespace kdk;
--using namespace KWayland::Client;
--class Q_DECL_HIDDEN WaylandInterface:public AbstractInterface
--{
--public:
--    WaylandInterface(QObject* parent=nullptr);
--    ~WaylandInterface();
--    WindowInfo requestInfo(WindowId wid) override;
--
--    void requestActivate(WindowId wid)  override;
--    void requestClose(WindowId wid)  override;
--    void requestToggleKeepAbove(WindowId wid)  override;
--    void requestToggleMinimized(WindowId wid)  override;
--    void requestToggleMaximized(WindowId wid)  override;
--
--    QIcon iconFor(WindowId wid) override;
--    QString titleFor(WindowId wid) override;
--    QString windowGroupFor(WindowId wid) override;
--    quint32 pid(WindowId wid) override;
--
--    void showCurrentDesktop() override;
--    void hideCurrentDesktop() override;
--
--    bool windowCanBeDragged(WindowId wid) override;
--    bool windowCanBeMaximized(WindowId wid) override;
--
--    WindowId activeWindow() override;
--
--    void setGeometry(QWindow *window, const QRect &rect) override;
--
--    void setSkipTaskBar(QWindow* window,bool skip) override;
--    void setSkipSwitcher(QWindow* window,bool skip) override;
--
--    bool skipTaskBar(const WindowId &wid) override;
--    bool skipSwitcher(const WindowId &wid) override;
--
--    bool isShowingDesktop();
--    void setOnAllDesktops(const WindowId &wid);
--
--    NET::WindowType windowType(WindowId wid) override;
--    void setPanelTakefocus(QWindow *window, bool flag) override;
--    void demandAttention(const WindowId &wid) override;
--
--protected:
--    bool eventFilter(QObject *obj, QEvent *ev) override;
--
--private slots:
--    void updateWindow();
--    void windowUnmapped();
--
--private:
--    PlasmaWindow *windowFor(WindowId wid) ;
--    bool isValidWindow(const KWayland::Client::PlasmaWindow *w) ;
--    bool isPlasmaDesktop(const KWayland::Client::PlasmaWindow *w) ;
--    bool isPlasmaPanel(const KWayland::Client::PlasmaWindow *w) ;
--    void windowCreatedProxy(KWayland::Client::PlasmaWindow *w);
--    void trackWindow(KWayland::Client::PlasmaWindow *w);
--    void untrackWindow(KWayland::Client::PlasmaWindow *w);
--    void setCurrentDesktop(QString desktop);
--    void addDesktop(const QString &id, quint32 position);
--
--private:
--    ConnectionThread *m_connection=nullptr;
--    PlasmaShell *m_plasmaShell = nullptr;
--    Shell *m_shell = nullptr;
--    PlasmaWindowManagement *m_windowManager = nullptr;
--    PlasmaWindow *m_appWindow = nullptr;
--    PlasmaVirtualDesktopManagement *m_virtualDesktopManagement{nullptr};
--    QStringList m_desktops;
--    QMap<QWindow*,Surface*>m_surfaces;
--    QMap<QWindow*,PlasmaShellSurface*>m_plasmaShellSurfaces;
--};
--
--#endif // WAYLANDINTERFACE_H
+diff --git a/kysdk-qtwidgets/src/kbreadcrumb.cpp b/kysdk-qtwidgets/src/kbreadcrumb.cpp
+index 11fc89b..e31423f 100644
+--- a/kysdk-qtwidgets/src/kbreadcrumb.cpp
++++ b/kysdk-qtwidgets/src/kbreadcrumb.cpp
+@@ -133,17 +133,34 @@ void KBreadCrumb::paintEvent(QPaintEvent *event)
+             p.setPen(baseColor);
+         p.setBrush(Qt::NoBrush);
+ 
+-        if(i == 0 && !d->m_icon.isNull())
++        if(layoutDirection() == Qt::LeftToRight)
+         {
+-            p.drawPixmap(rc.left()+10,(rc.height()-24)/2,24,24,
+-                         d->m_icon.pixmap(24,24));
+-            p.drawText(rc.adjusted(30,0,-24,0),Qt::AlignCenter,tabText(i));
++            if(i == 0 && !d->m_icon.isNull())
++            {
++                p.drawPixmap(rc.left()+10,(rc.height()-24)/2,24,24,
++                             d->m_icon.pixmap(24,24));
++                p.drawText(rc.adjusted(30,0,-24,0),Qt::AlignCenter,tabText(i));
++            }
++            else
++                p.drawText(rc.adjusted(0,0,-24,0),Qt::AlignCenter,tabText(i));
++            if(i != count()-1)
++                p.drawPixmap(rc.right()-24,(rc.height()-16)/2,16,16,
++                             ThemeController::drawColoredPixmap(QIcon::fromTheme("ukui-end-symbolic").pixmap(16,16),baseColor));
+         }
+         else
+-            p.drawText(rc.adjusted(0,0,-24,0),Qt::AlignCenter,tabText(i));
+-        if(i != count()-1)
+-            p.drawPixmap(rc.right()-24,(rc.height()-16)/2,16,16,
+-                         ThemeController::drawColoredPixmap(QIcon::fromTheme("ukui-end-symbolic").pixmap(16,16),baseColor));
++        {
++            if(i == 0 && !d->m_icon.isNull())
++            {
++                p.drawPixmap(rc.right()-34,(rc.height()-24)/2,24,24,
++                             d->m_icon.pixmap(24,24));
++                p.drawText(rc.adjusted(24,0,-30,0),Qt::AlignCenter,tabText(i));
++            }
++            else
++                p.drawText(rc.adjusted(24,0,0,0),Qt::AlignCenter,tabText(i));
++            if(i != count()-1)
++                p.drawPixmap(rc.left()+8,(rc.height()-16)/2,16,16,
++                             ThemeController::drawColoredPixmap(QIcon::fromTheme("ukui-start-symbolic").pixmap(16,16),baseColor));
++        }
+     }
+ }
+ 
+diff --git a/kysdk-qtwidgets/src/kpasswordedit.cpp b/kysdk-qtwidgets/src/kpasswordedit.cpp
+index 2f28837..0611e32 100644
+--- a/kysdk-qtwidgets/src/kpasswordedit.cpp
++++ b/kysdk-qtwidgets/src/kpasswordedit.cpp
+@@ -234,7 +234,10 @@ void KPasswordEdit::setEnabled(bool flag)
+     if(!flag)
+     {
+         d->m_pClearBtn->hide();
+-        d->m_pLoadingBtn->hide();
++        if(!isLoading())
++        {
++            d->m_pLoadingBtn->hide();
++        }
+     }
+     QLineEdit::setEnabled(flag);
+     d->repaintIcon();
+diff --git a/kysdk-qtwidgets/src/kpressbutton.cpp b/kysdk-qtwidgets/src/kpressbutton.cpp
+index a900baf..23c054c 100755
+--- a/kysdk-qtwidgets/src/kpressbutton.cpp
++++ b/kysdk-qtwidgets/src/kpressbutton.cpp
+@@ -307,7 +307,11 @@ void KPressButton::paintEvent(QPaintEvent *event)
+     else // 关闭透明度
+     {
+         if(isChecked() /*&& !isLoading()*/)
++        {
+             d->m_pbkgColor = opt.palette.color(QPalette::Highlight);
++//            if(ThemeController::widgetTheme() == ClassicTheme)
++//                d->m_pbkgColor.setAlphaF(0.3);
++        }
+         else
+             d->m_pbkgColor = opt.palette.color(QPalette::Button);
+ 
+@@ -424,7 +428,7 @@ void KPressButton::paintEvent(QPaintEvent *event)
+             if(isChecked() )
+                 d->m_pbkgColor = opt.palette.color(QPalette::Highlight);
+             else
+-                 d->m_pbkgColor = opt.palette.color(QPalette::Button);
++                d->m_pbkgColor = opt.palette.color(QPalette::Button);
+         }
+     }
+ 
+@@ -436,6 +440,7 @@ void KPressButton::paintEvent(QPaintEvent *event)
+ 
+     QRect rect = this->rect();
+     QPainterPath path;
++
+     switch (d->m_pButtonType)
+     {
+     case NormalType:
+diff --git a/kysdk-qtwidgets/src/kpushbutton.cpp b/kysdk-qtwidgets/src/kpushbutton.cpp
+index f595aa2..7e70ed8 100755
+--- a/kysdk-qtwidgets/src/kpushbutton.cpp
++++ b/kysdk-qtwidgets/src/kpushbutton.cpp
+@@ -625,6 +625,8 @@ void KPushButtonPrivate::updateColor(QPainter &painter,QStyleOptionButton &optio
+                         }
+                     }
+                 }
++            }else{
++                backgroundColor = palette().color(QPalette::Button);
+             }
+             else
+             {
+diff --git a/kysdk-qtwidgets/src/ksearchlineedit.cpp b/kysdk-qtwidgets/src/ksearchlineedit.cpp
+index ef9db1d..124dbff 100644
+--- a/kysdk-qtwidgets/src/ksearchlineedit.cpp
++++ b/kysdk-qtwidgets/src/ksearchlineedit.cpp
+@@ -405,7 +405,7 @@ bool KSearchLineEdit::eventFilter(QObject *watched, QEvent *event)
+             {
+                 if(d->isTextEmpty)
+                 {
+-                    d->m_pTextLabel->setVisible(false);
++//                    d->m_pTextLabel->setVisible(false);
+                     d->isTextEmpty=false;
+                 }
+             }
+@@ -419,7 +419,7 @@ bool KSearchLineEdit::eventFilter(QObject *watched, QEvent *event)
+                     d->m_pAnimation->start();
+                     d->isTextEmpty = false;
+                 }
+-                d->m_pTextLabel->setVisible(false);
++//                d->m_pTextLabel->setVisible(false);
+             }
+             d->adjustLayout();
+             break ;
+diff --git a/kysdk-qtwidgets/src/ktabbar.cpp b/kysdk-qtwidgets/src/ktabbar.cpp
+index 1302235..da2299a 100644
+--- a/kysdk-qtwidgets/src/ktabbar.cpp
++++ b/kysdk-qtwidgets/src/ktabbar.cpp
+@@ -431,6 +431,10 @@ void KTabBar::paintEvent(QPaintEvent *event)
+                     p.drawRect(option.rect.x()+4,this->style()->visualPos(option.direction, option.rect, point).y(),pixmap.width(),pixmap.height());
+                     p.setBrush(Qt::NoBrush);
+ 
++                    p.setBrush(Qt::red);
++                    p.drawRect(option.rect.x()+4,this->style()->visualPos(option.direction, option.rect, point).y(),pixmap.width(),pixmap.height());
++                    p.setBrush(Qt::NoBrush);
++
+                     if(fm.width(tabText(i)) >= option.rect.width()-option.iconSize.width()-7)
+                         p.drawPixmap(option.rect.x()+4,this->style()->visualPos(option.direction, option.rect, point).y(), pixmap);
+                     else
+diff --git a/kysdk-qtwidgets/src/ktoolbutton.cpp b/kysdk-qtwidgets/src/ktoolbutton.cpp
+index 1a829df..ac6eb73 100755
+--- a/kysdk-qtwidgets/src/ktoolbutton.cpp
++++ b/kysdk-qtwidgets/src/ktoolbutton.cpp
+@@ -322,6 +322,8 @@ void KToolButton::paintEvent(QPaintEvent *event)
+     else
+         painter.setPen(Qt::NoPen);
+ 
++    pen.setWidth(2);
++
+     if(!isEnabled())
+         painter.setBrush(d->m_disableColor);
+     else if(QStyle::State_Sunken & option.state && !isLoading())
diff -Nru libkysdk-applications-2.5.1.0/debian/patches/0002-update-changelog.patch libkysdk-applications-2.5.2.0/debian/patches/0002-update-changelog.patch
--- libkysdk-applications-2.5.1.0/debian/patches/0002-update-changelog.patch	2024-07-31 11:09:38.000000000 +0800
+++ libkysdk-applications-2.5.2.0/debian/patches/0002-update-changelog.patch	2025-03-17 13:09:05.000000000 +0800
@@ -1,41 +1,41 @@
-From: sunzhen <sunzhen1@kylinos.cn>
-Date: Fri, 17 May 2024 11:05:00 +0800
+From: =?utf-8?b?546L5oyv5a6H?= <wangzhenyu@kylinos.cn>
+Date: Wed, 30 Oct 2024 09:41:31 +0800
 Subject: update changelog
 
 ---
- kysdk-waylandhelper/src/windowmanager/kdewaylandinterface.cpp  | 5 ++++-
- kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.cpp | 5 ++++-
- 2 files changed, 8 insertions(+), 2 deletions(-)
+ kysdk-qtwidgets/src/kpushbutton.cpp | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
 
-diff --git a/kysdk-waylandhelper/src/windowmanager/kdewaylandinterface.cpp b/kysdk-waylandhelper/src/windowmanager/kdewaylandinterface.cpp
-index b8e99cd..06d8e27 100644
---- a/kysdk-waylandhelper/src/windowmanager/kdewaylandinterface.cpp
-+++ b/kysdk-waylandhelper/src/windowmanager/kdewaylandinterface.cpp
-@@ -456,7 +456,10 @@ void KdeWaylandInterface::demandAttention(const WindowId &wid)
- QRect KdeWaylandInterface::windowGeometry(const WindowId &windowId)
- {
-     PlasmaWindow* w = windowFor(windowId);
--    return w->geometry();
-+    if(w)
-+        return w->geometry();
-+    else
-+        return QRect(0, 0, 0, 0);
- }
- 
- bool KdeWaylandInterface::eventFilter(QObject *obj, QEvent *ev)
-diff --git a/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.cpp b/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.cpp
-index 2a0a95f..f5cf102 100644
---- a/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.cpp
-+++ b/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.cpp
-@@ -369,7 +369,10 @@ void UkuiWaylandInterface::setIdleInterval(int msec)
- QRect UkuiWaylandInterface::windowGeometry(const WindowId &windowId)
- {
-     UkuiWindow* w = windowFor(windowId);
--    return w->geometry();
-+    if(w)
-+        return w->geometry();
-+    else
-+        return QRect(0, 0, 0, 0);
- }
- 
- void UkuiWaylandInterface::setPanelAutoHide(QWindow *window, bool autoHide)
+diff --git a/kysdk-qtwidgets/src/kpushbutton.cpp b/kysdk-qtwidgets/src/kpushbutton.cpp
+index 7e70ed8..5b539ec 100755
+--- a/kysdk-qtwidgets/src/kpushbutton.cpp
++++ b/kysdk-qtwidgets/src/kpushbutton.cpp
+@@ -595,7 +595,8 @@ void KPushButtonPrivate::updateColor(QPainter &painter,QStyleOptionButton &optio
+                 }
+                 else
+                 {
+-                    if(m_useCustomColor){
++                    if(m_useCustomColor)
++                    {
+                         if(option.state.testFlag(QStyle::State_MouseOver))      /*鼠标在按钮上(hover状态)*/
+                         {
+                             if(option.state.testFlag(QStyle::State_Sunken))     /*按钮被选中(clicked)*/
+@@ -609,7 +610,8 @@ void KPushButtonPrivate::updateColor(QPainter &painter,QStyleOptionButton &optio
+                     {
+                         backgroundColor = backgroundColor;
+                     }
+-                    else{
++                    else
++                    {
+                     /*按钮处于可用(Enabled)状态*/
+                         if(option.state.testFlag(QStyle::State_MouseOver))      /*鼠标在按钮上(hover状态)*/
+                         {
+@@ -625,8 +627,6 @@ void KPushButtonPrivate::updateColor(QPainter &painter,QStyleOptionButton &optio
+                         }
+                     }
+                 }
+-            }else{
+-                backgroundColor = palette().color(QPalette::Button);
+             }
+             else
+             {
diff -Nru libkysdk-applications-2.5.1.0/debian/patches/0003-update-changelog.patch libkysdk-applications-2.5.2.0/debian/patches/0003-update-changelog.patch
--- libkysdk-applications-2.5.1.0/debian/patches/0003-update-changelog.patch	2024-07-31 11:09:38.000000000 +0800
+++ libkysdk-applications-2.5.2.0/debian/patches/0003-update-changelog.patch	2025-03-17 13:09:05.000000000 +0800
@@ -1,47 +1,7703 @@
-From: sunzhen <sunzhen1@kylinos.cn>
-Date: Mon, 20 May 2024 06:55:50 +0500
+From: =?utf-8?b?546L5oyv5a6H?= <wangzhenyu@kylinos.cn>
+Date: Thu, 14 Nov 2024 10:22:46 +0800
 Subject: update changelog
 
 ---
- kysdk-waylandhelper/src/windowmanager/ukuiwindowmanagement.cpp | 5 +++++
- kysdk-waylandhelper/src/windowmanager/ukuiwindowmanagement.h   | 4 ++++
- 2 files changed, 9 insertions(+)
+ doxygen/man/man3/BarModule.3                   | 200 ++++++++-
+ doxygen/man/man3/BreadCrumb.3                  |   2 +-
+ doxygen/man/man3/CommentsPanel.3               |   2 +-
+ doxygen/man/man3/ContainerModules.3            |   2 +-
+ doxygen/man/man3/DialogBoxModule.3             |  30 +-
+ doxygen/man/man3/DragModule.3                  |   2 +-
+ doxygen/man/man3/FormModule.3                  |   9 +-
+ doxygen/man/man3/InputBoxModule.3              |  92 +++-
+ doxygen/man/man3/KCrumb.3                      |  21 +
+ doxygen/man/man3/KCustomDateEdit.3             |  21 +
+ doxygen/man/man3/KCustomTabBar.3               | 346 +++++++++++++++
+ doxygen/man/man3/KLunarCalendarInfo.3          |  21 +
+ doxygen/man/man3/KLunarDateEdit.3              |  21 +
+ doxygen/man/man3/KMiniCalendarItem.3           |  21 +
+ doxygen/man/man3/KMiniCalendarWidget.3         |  21 +
+ doxygen/man/man3/Label.3                       |  14 +
+ doxygen/man/man3/ListViewModule.3              |   2 +-
+ doxygen/man/man3/MessageAlertModule.3          |  64 ++-
+ doxygen/man/man3/ProgressModule.3              |  21 +
+ doxygen/man/man3/PushbuttonModule.3            |  57 ++-
+ doxygen/man/man3/SliderModule.3                |   2 +-
+ doxygen/man/man3/TagModule.3                   |   2 +-
+ doxygen/man/man3/UkuiStyleModule.3             |   2 +-
+ doxygen/man/man3/WindowManagerModule.3         |   2 +-
+ doxygen/man/man3/kdk_AccessInfoHelper.3        |  25 ++
+ doxygen/man/man3/kdk_KAboutDialog.3            |   2 +-
+ doxygen/man/man3/kdk_KAddFileButton.3          | 117 +++++
+ doxygen/man/man3/kdk_KArrowTabBar.3            |  55 +++
+ doxygen/man/man3/kdk_KBackgroundGroup.3        |   2 +-
+ doxygen/man/man3/kdk_KBadge.3                  |   2 +-
+ doxygen/man/man3/kdk_KBallonTip.3              |  14 +-
+ doxygen/man/man3/kdk_KBorderButton.3           |   2 +-
+ doxygen/man/man3/kdk_KBorderlessButton.3       |   2 +-
+ doxygen/man/man3/kdk_KBreadCrumb.3             |   2 +-
+ doxygen/man/man3/kdk_KBubbleWidget.3           |  22 +-
+ doxygen/man/man3/kdk_KButtonBox.3              |  42 +-
+ doxygen/man/man3/kdk_KClockTimer.3             |  54 +++
+ doxygen/man/man3/kdk_KColorButton.3            |   2 +-
+ doxygen/man/man3/kdk_KColorComboBox.3          |   2 +-
+ doxygen/man/man3/kdk_KComboBoxWidget.3         | 109 +++++
+ doxygen/man/man3/kdk_KCommentPanel.3           |   2 +-
+ doxygen/man/man3/kdk_KCrumb.3                  | 226 ++++++++++
+ doxygen/man/man3/kdk_KCustomDateEdit.3         |  77 ++++
+ doxygen/man/man3/kdk_KDialog.3                 |  10 +-
+ doxygen/man/man3/kdk_KDirTabBar.3              | 183 ++++++++
+ doxygen/man/man3/kdk_KDragWidget.3             |   2 +-
+ doxygen/man/man3/kdk_KFileWidget.3             | 136 ++++++
+ doxygen/man/man3/kdk_KHLineFrame.3             |  24 +-
+ doxygen/man/man3/kdk_KIconBar.3                |   2 +-
+ doxygen/man/man3/kdk_KInputDialog.3            |   2 +-
+ doxygen/man/man3/kdk_KIntroWidget.3            | 145 +++++++
+ doxygen/man/man3/kdk_KItemWidget.3             |   2 +-
+ doxygen/man/man3/kdk_KLabel.3                  | 263 ++++++++++++
+ doxygen/man/man3/kdk_KLineEdit.3               |  48 +++
+ doxygen/man/man3/kdk_KListView.3               |   2 +-
+ doxygen/man/man3/kdk_KListViewDelegate.3       |   2 +-
+ doxygen/man/man3/kdk_KListWidget.3             |   2 +-
+ doxygen/man/man3/kdk_KLoopPlayPage.3           | 154 +++++++
+ doxygen/man/man3/kdk_KLunarCalendarInfo.3      | 327 ++++++++++++++
+ doxygen/man/man3/kdk_KLunarDateEdit.3          |  67 +++
+ doxygen/man/man3/kdk_KMenuButton.3             |   6 +-
+ doxygen/man/man3/kdk_KMessageBox.3             |   2 +-
+ doxygen/man/man3/kdk_KMiniCalendarItem.3       | 571 +++++++++++++++++++++++++
+ doxygen/man/man3/kdk_KMiniCalendarWidget.3     | 562 ++++++++++++++++++++++++
+ doxygen/man/man3/kdk_KNativeTabbar.3           | 140 ++++++
+ doxygen/man/man3/kdk_KNavigationBar.3          |   2 +-
+ doxygen/man/man3/kdk_KNavigationTrail.3        |  68 +++
+ doxygen/man/man3/kdk_KPasswordEdit.3           |   2 +-
+ doxygen/man/man3/kdk_KPixmapContainer.3        |   2 +-
+ doxygen/man/man3/kdk_KPressButton.3            |   2 +-
+ doxygen/man/man3/kdk_KProgressBar.3            |  30 +-
+ doxygen/man/man3/kdk_KProgressCircle.3         |   2 +-
+ doxygen/man/man3/kdk_KProgressDialog.3         |  20 +-
+ doxygen/man/man3/kdk_KProgressLabel.3          | 100 +++++
+ doxygen/man/man3/kdk_KPushButton.3             |  55 ++-
+ doxygen/man/man3/kdk_KSearchLineEdit.3         |  21 +-
+ doxygen/man/man3/kdk_KSecurityLevelBar.3       |   2 +-
+ doxygen/man/man3/kdk_KSecurityQuestionDialog.3 | 241 +++++++++++
+ doxygen/man/man3/kdk_KSlider.3                 |   2 +-
+ doxygen/man/man3/kdk_KSwitchButton.3           |   2 +-
+ doxygen/man/man3/kdk_KTabBar.3                 |  10 +-
+ doxygen/man/man3/kdk_KTableHeaderView.3        | 104 +++++
+ doxygen/man/man3/kdk_KTableModel.3             |  28 ++
+ doxygen/man/man3/kdk_KTableView.3              |  85 ++++
+ doxygen/man/man3/kdk_KTag.3                    |  62 ++-
+ doxygen/man/man3/kdk_KTextEdit.3               | 120 ++++++
+ doxygen/man/man3/kdk_KTextEditor.3             |  34 ++
+ doxygen/man/man3/kdk_KTitleWindow.3            | 111 +++++
+ doxygen/man/man3/kdk_KToolBar.3                |  91 ++++
+ doxygen/man/man3/kdk_KToolButton.3             |  22 +-
+ doxygen/man/man3/kdk_KTranslucentFloor.3       |   2 +-
+ doxygen/man/man3/kdk_KUninstallDialog.3        |   2 +-
+ doxygen/man/man3/kdk_KVLineFrame.3             |  24 +-
+ doxygen/man/man3/kdk_KWidget.3                 |   2 +-
+ doxygen/man/man3/kdk_KWidgetUtils.3            |   2 +-
+ doxygen/man/man3/kdk_KWindowButtonBar.3        |   2 +-
+ doxygen/man/man3/kdk_Parmscontroller.3         |   2 +-
+ doxygen/man/man3/kdk_UkuiStyleHelper.3         |   2 +-
+ doxygen/man/man3/kdk_WindowManager.3           | 378 +++++++++++++++-
+ doxygen/man/man3/kdk_effects_KShadowHelper.3   |   2 +-
+ doxygen/man/man3/timerModule.3                 |  21 +
+ kysdk-qtwidgets/translations/gui_bo_CN.qm      | Bin 3886 -> 4665 bytes
+ kysdk-qtwidgets/translations/gui_de.qm         | Bin 3527 -> 4072 bytes
+ kysdk-qtwidgets/translations/gui_es.qm         | Bin 3563 -> 4114 bytes
+ kysdk-qtwidgets/translations/gui_fr.qm         | Bin 3625 -> 4194 bytes
+ kysdk-qtwidgets/translations/gui_kk.qm         | Bin 3441 -> 3812 bytes
+ kysdk-qtwidgets/translations/gui_ky.qm         | Bin 3367 -> 3938 bytes
+ kysdk-qtwidgets/translations/gui_mn.qm         | Bin 3845 -> 4621 bytes
+ kysdk-qtwidgets/translations/gui_ug.qm         | Bin 3453 -> 3980 bytes
+ kysdk-qtwidgets/translations/gui_zh_CN.qm      | Bin 2634 -> 3639 bytes
+ kysdk-qtwidgets/translations/gui_zh_HK.qm      | Bin 2636 -> 3637 bytes
+ 111 files changed, 5978 insertions(+), 67 deletions(-)
+ create mode 100644 doxygen/man/man3/KCrumb.3
+ create mode 100644 doxygen/man/man3/KCustomDateEdit.3
+ create mode 100644 doxygen/man/man3/KCustomTabBar.3
+ create mode 100644 doxygen/man/man3/KLunarCalendarInfo.3
+ create mode 100644 doxygen/man/man3/KLunarDateEdit.3
+ create mode 100644 doxygen/man/man3/KMiniCalendarItem.3
+ create mode 100644 doxygen/man/man3/KMiniCalendarWidget.3
+ create mode 100644 doxygen/man/man3/Label.3
+ create mode 100644 doxygen/man/man3/ProgressModule.3
+ create mode 100644 doxygen/man/man3/kdk_AccessInfoHelper.3
+ create mode 100644 doxygen/man/man3/kdk_KAddFileButton.3
+ create mode 100644 doxygen/man/man3/kdk_KArrowTabBar.3
+ create mode 100644 doxygen/man/man3/kdk_KClockTimer.3
+ create mode 100644 doxygen/man/man3/kdk_KComboBoxWidget.3
+ create mode 100644 doxygen/man/man3/kdk_KCrumb.3
+ create mode 100644 doxygen/man/man3/kdk_KCustomDateEdit.3
+ create mode 100644 doxygen/man/man3/kdk_KDirTabBar.3
+ create mode 100644 doxygen/man/man3/kdk_KFileWidget.3
+ create mode 100644 doxygen/man/man3/kdk_KIntroWidget.3
+ create mode 100644 doxygen/man/man3/kdk_KLabel.3
+ create mode 100644 doxygen/man/man3/kdk_KLineEdit.3
+ create mode 100644 doxygen/man/man3/kdk_KLoopPlayPage.3
+ create mode 100644 doxygen/man/man3/kdk_KLunarCalendarInfo.3
+ create mode 100644 doxygen/man/man3/kdk_KLunarDateEdit.3
+ create mode 100644 doxygen/man/man3/kdk_KMiniCalendarItem.3
+ create mode 100644 doxygen/man/man3/kdk_KMiniCalendarWidget.3
+ create mode 100644 doxygen/man/man3/kdk_KNativeTabbar.3
+ create mode 100644 doxygen/man/man3/kdk_KNavigationTrail.3
+ create mode 100644 doxygen/man/man3/kdk_KProgressLabel.3
+ create mode 100644 doxygen/man/man3/kdk_KSecurityQuestionDialog.3
+ create mode 100644 doxygen/man/man3/kdk_KTableHeaderView.3
+ create mode 100644 doxygen/man/man3/kdk_KTableModel.3
+ create mode 100644 doxygen/man/man3/kdk_KTableView.3
+ create mode 100644 doxygen/man/man3/kdk_KTextEdit.3
+ create mode 100644 doxygen/man/man3/kdk_KTextEditor.3
+ create mode 100644 doxygen/man/man3/kdk_KTitleWindow.3
+ create mode 100644 doxygen/man/man3/kdk_KToolBar.3
+ create mode 100644 doxygen/man/man3/timerModule.3
 
-diff --git a/kysdk-waylandhelper/src/windowmanager/ukuiwindowmanagement.cpp b/kysdk-waylandhelper/src/windowmanager/ukuiwindowmanagement.cpp
-index ee13b77..8d2179e 100644
---- a/kysdk-waylandhelper/src/windowmanager/ukuiwindowmanagement.cpp
-+++ b/kysdk-waylandhelper/src/windowmanager/ukuiwindowmanagement.cpp
-@@ -1093,6 +1093,11 @@ void UkuiWindow::requestToggleMaximized()
-     }
- }
+diff --git a/doxygen/man/man3/BarModule.3 b/doxygen/man/man3/BarModule.3
+index ff58200..262f19f 100644
+--- a/doxygen/man/man3/BarModule.3
++++ b/doxygen/man/man3/BarModule.3
+@@ -1,4 +1,4 @@
+-.TH "BarModule" 3 "Thu Oct 12 2023" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.TH "BarModule" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
+ .ad l
+ .nh
+ .SH NAME
+@@ -10,6 +10,10 @@ BarModule
  
-+void UkuiWindow::setStartupGeometry(Surface *surface, const QRect &geometry)
-+{
-+    ukui_window_set_startup_geometry(d->window, *surface, geometry.x(),geometry.y(),geometry.width(),geometry.height());
-+}
+ .in +1c
+ .ti -1c
++.RI "class \fBkdk::KArrowTabBar\fP"
++.br
++.RI "可显示箭头的tabbar "
++.ti -1c
+ .RI "class \fBkdk::KIconBar\fP"
+ .br
+ .RI "图标和标题组合控件 "
+@@ -54,6 +58,16 @@ BarModule
+ 
+ .in +1c
+ .ti -1c
++.RI "\fBkdk::KArrowTabBar::KArrowTabBar\fP (QWidget *parent=nullptr)"
++.br
++.ti -1c
++.RI "\fBKNativeTabbar\fP * \fBkdk::KArrowTabBar::tabbar\fP ()"
++.br
++.RI "获取knativetabbar "
++.ti -1c
++.RI "void \fBkdk::KArrowTabBar::resizeEvent\fP (QResizeEvent *event)"
++.br
++.ti -1c
+ .RI "\fBkdk::KIconBar::KIconBar\fP (QWidget *parent=nullptr)"
+ .br
+ .ti -1c
+@@ -189,6 +203,34 @@ BarModule
+ .br
+ .RI "设置进度条宽度 "
+ .ti -1c
++.RI "void \fBkdk::KProgressBar::setGradationColor\fP (QColor color1, QColor color2)"
++.br
++.RI "设置首尾位置的渐变颜色 "
++.ti -1c
++.RI "void \fBkdk::KProgressBar::setBackgroundColor\fP (QColor color)"
++.br
++.RI "设置背景色 "
++.ti -1c
++.RI "void \fBkdk::KProgressBar::setFillColor\fP (QColor color)"
++.br
++.RI "设置填充色 "
++.ti -1c
++.RI "void \fBkdk::KProgressBar::setGradation\fP (bool flag)"
++.br
++.RI "是否启用自定义渐变色 "
++.ti -1c
++.RI "bool \fBkdk::KProgressBar::gradation\fP ()"
++.br
++.RI "获取是否启用自定义渐变色 "
++.ti -1c
++.RI "void \fBkdk::KProgressBar::setAnimation\fP (bool flag)"
++.br
++.RI "是否启用动画 "
++.ti -1c
++.RI "bool \fBkdk::KProgressBar::animation\fP ()"
++.br
++.RI "获取是否启用动画 "
++.ti -1c
+ .RI "void \fBkdk::KProgressBar::paintEvent\fP (QPaintEvent *event) override"
+ .br
+ .ti -1c
+@@ -278,10 +320,18 @@ BarModule
+ 
+ .in +1c
+ .ti -1c
++.RI "void \fBkdk::KArrowTabBar::sizeChange\fP ()"
++.br
++.RI "点击会发出信号 "
++.ti -1c
+ .RI "void \fBkdk::KIconBar::doubleClick\fP ()"
+ .br
+ .RI "双击会发出双击信号,父widget可以绑定相应槽函数 "
+ .ti -1c
++.RI "void \fBkdk::KTabBar::rightlicked\fP (QPoint point)"
++.br
++.RI "鼠标右键信号 "
++.ti -1c
+ .RI "void \fBkdk::KWindowButtonBar::doubleClick\fP ()"
+ .br
+ .RI "双击会发出双击信号,父widget可以绑定相应槽函数 "
+@@ -289,6 +339,13 @@ BarModule
+ .SH "Detailed Description"
+ .PP 
+ 
++.PP
++\fBSince\fP
++.RS 4
++2\&.5 
++.RE
++.PP
++
+ .SH "Function Documentation"
+ .PP 
+ .SS "void kdk::KNavigationBar::addGroupItems (QList< QStandardItem * > items, const QString & tag)"
+@@ -337,6 +394,21 @@ BarModule
+ .RE
+ .PP
+ 
++.SS "bool kdk::KProgressBar::animation ()"
++
++.PP
++获取是否启用动画 
++.PP
++\fBSince\fP
++.RS 4
++2\&.5 
++.RE
++.PP
++\fBReturns\fP
++.RS 4
++.RE
++.PP
++
+ .SS "\fBKTabBarStyle\fP kdk::KTabBar::barStyle ()"
+ 
+ .PP
+@@ -407,6 +479,21 @@ BarModule
+ .RE
+ .PP
+ 
++.SS "bool kdk::KProgressBar::gradation ()"
++
++.PP
++获取是否启用自定义渐变色 
++.PP
++\fBSince\fP
++.RS 4
++2\&.5 
++.RE
++.PP
++\fBReturns\fP
++.RS 4
++.RE
++.PP
++
+ .SS "QLabel* kdk::KIconBar::iconLabel ()"
+ 
+ .PP
+@@ -495,6 +582,22 @@ BarModule
+ .RE
+ .PP
+ 
++.SS "void kdk::KProgressBar::setAnimation (bool flag)"
++
++.PP
++是否启用动画 
++.PP
++\fBSince\fP
++.RS 4
++2\&.5 
++.RE
++.PP
++\fBParameters\fP
++.RS 4
++\fIflag\fP 
++.RE
++.PP
++
+ .SS "void kdk::KTabBar::setBackgroundColor (const QColor & color)"
+ 
+ .PP
+@@ -511,6 +614,22 @@ BarModule
+ .RE
+ .PP
+ 
++.SS "void kdk::KProgressBar::setBackgroundColor (QColor color)"
++
++.PP
++设置背景色 
++.PP
++\fBSince\fP
++.RS 4
++2\&.5 
++.RE
++.PP
++\fBParameters\fP
++.RS 4
++\fIcolor\fP 
++.RE
++.PP
++
+ .SS "void kdk::KProgressBar::setBodyWidth (int width)"
+ 
+ .PP
+@@ -549,6 +668,22 @@ BarModule
+ .RE
+ .PP
+ 
++.SS "void kdk::KProgressBar::setFillColor (QColor color)"
++
++.PP
++设置填充色 
++.PP
++\fBSince\fP
++.RS 4
++2\&.5 
++.RE
++.PP
++\fBParameters\fP
++.RS 4
++\fIcolor\fP 
++.RE
++.PP
++
+ .SS "void kdk::KWindowButtonBar::setFollowMode (bool flag)"
+ 
+ .PP
+@@ -576,6 +711,40 @@ BarModule
+ .RE
+ .PP
+ 
++.SS "void kdk::KProgressBar::setGradation (bool flag)"
++
++.PP
++是否启用自定义渐变色 
++.PP
++\fBSince\fP
++.RS 4
++2\&.5 
++.RE
++.PP
++\fBParameters\fP
++.RS 4
++\fIflag\fP 
++.RE
++.PP
++
++.SS "void kdk::KProgressBar::setGradationColor (QColor color1, QColor color2)"
++
++.PP
++设置首尾位置的渐变颜色 
++.PP
++\fBSince\fP
++.RS 4
++2\&.5 
++.RE
++.PP
++\fBParameters\fP
++.RS 4
++\fIcolor1\fP 
++.br
++\fIcolor2\fP 
++.RE
++.PP
++
+ .SS "void kdk::KIconBar::setIcon (const QIcon & icon)"
+ 
+ .PP
+@@ -686,6 +855,17 @@ BarModule
+ .RE
+ .PP
+ 
++.SS "\fBKNativeTabbar\fP* kdk::KArrowTabBar::tabbar ()"
++
++.PP
++获取knativetabbar 
++.PP
++\fBReturns\fP
++.RS 4
++
++.RE
++.PP
++
+ .SS "QString kdk::KProgressBar::text () const\fC [override]\fP"
+ 
+ .PP
+@@ -697,6 +877,24 @@ BarModule
+ .RE
+ .PP
+ 
++.SH "Signals"
++.PP 
++.SS "void kdk::KTabBar::rightlicked (QPoint point)\fC [signal]\fP"
++
++.PP
++鼠标右键信号 
++.PP
++\fBParameters\fP
++.RS 4
++\fIpoint\fP 
++.RE
++.PP
++\fBSince\fP
++.RS 4
++2\&.4 
++.RE
++.PP
++
+ .SH "Author"
+ .PP 
+ Generated automatically by Doxygen for LIBKYSDK-APPLICATIONS from the source code\&.
+diff --git a/doxygen/man/man3/BreadCrumb.3 b/doxygen/man/man3/BreadCrumb.3
+index f8ddb09..2b88a15 100644
+--- a/doxygen/man/man3/BreadCrumb.3
++++ b/doxygen/man/man3/BreadCrumb.3
+@@ -1,4 +1,4 @@
+-.TH "BreadCrumb" 3 "Thu Oct 12 2023" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.TH "BreadCrumb" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
+ .ad l
+ .nh
+ .SH NAME
+diff --git a/doxygen/man/man3/CommentsPanel.3 b/doxygen/man/man3/CommentsPanel.3
+index c34b2df..5143697 100644
+--- a/doxygen/man/man3/CommentsPanel.3
++++ b/doxygen/man/man3/CommentsPanel.3
+@@ -1,4 +1,4 @@
+-.TH "CommentsPanel" 3 "Thu Oct 12 2023" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.TH "CommentsPanel" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
+ .ad l
+ .nh
+ .SH NAME
+diff --git a/doxygen/man/man3/ContainerModules.3 b/doxygen/man/man3/ContainerModules.3
+index 7ab8b3f..d2cdbfe 100644
+--- a/doxygen/man/man3/ContainerModules.3
++++ b/doxygen/man/man3/ContainerModules.3
+@@ -1,4 +1,4 @@
+-.TH "ContainerModules" 3 "Thu Oct 12 2023" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.TH "ContainerModules" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
+ .ad l
+ .nh
+ .SH NAME
+diff --git a/doxygen/man/man3/DialogBoxModule.3 b/doxygen/man/man3/DialogBoxModule.3
+index 154d655..82c0eba 100644
+--- a/doxygen/man/man3/DialogBoxModule.3
++++ b/doxygen/man/man3/DialogBoxModule.3
+@@ -1,4 +1,4 @@
+-.TH "DialogBoxModule" 3 "Thu Oct 12 2023" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.TH "DialogBoxModule" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
+ .ad l
+ .nh
+ .SH NAME
+@@ -39,6 +39,10 @@ DialogBoxModule
+ .ti -1c
+ .RI "enum \fBInputMode\fP { \fBTextInput\fP, \fBIntInput\fP, \fBDoubleInput\fP }"
+ .br
++.ti -1c
++.RI "enum \fBkdk::BarType\fP { \fBScrollBar\fP, \fBNothingBar\fP, \fBNormalBar\fP, \fBSpeedBar\fP }"
++.br
++.RI "支持三种样式 "
+ .in -1c
+ .SS "Functions"
+ 
+@@ -136,6 +140,12 @@ DialogBoxModule
+ .br
+ .RI "获取主内容区Widget "
+ .ti -1c
++.RI "\fBKWindowButtonBar\fP * \fBkdk::KDialog::windowButtonBar\fP ()"
++.br
++.ti -1c
++.RI "\fBKIconBar\fP * \fBkdk::KDialog::iconBar\fP ()"
++.br
++.ti -1c
+ .RI "bool \fBkdk::KDialog::eventFilter\fP (QObject *target, QEvent *event) override"
+ .br
+ .ti -1c
+@@ -383,6 +393,12 @@ DialogBoxModule
+ .br
+ .RI "设置detail的后缀 "
+ .ti -1c
++.RI "void \fBkdk::KProgressDialog::setSuffix\fP (const QString &numerator, const QString &denominator)"
++.br
++.ti -1c
++.RI "void \fBkdk::KProgressDialog::setSpeed\fP (const float &speed)"
++.br
++.ti -1c
+ .RI "void \fBkdk::KProgressDialog::setShowDetail\fP (bool flag)"
+ .br
+ .RI "设置是否显示详细信息 "
+@@ -423,6 +439,18 @@ DialogBoxModule
+ .br
+ .RI "获取进度条 "
+ .ti -1c
++.RI "void \fBkdk::KProgressDialog::setBarType\fP (const \fBBarType\fP &type)"
++.br
++.ti -1c
++.RI "void \fBkdk::KProgressDialog::addButton\fP (QPushButton *button)"
++.br
++.ti -1c
++.RI "void \fBkdk::KProgressDialog::removeButton\fP (QPushButton *button)"
++.br
++.ti -1c
++.RI "\fBBarType\fP \fBkdk::KProgressDialog::myType\fP ()"
++.br
++.ti -1c
+ .RI "void \fBkdk::KProgressDialog::changeTheme\fP ()"
+ .br
+ .ti -1c
+diff --git a/doxygen/man/man3/DragModule.3 b/doxygen/man/man3/DragModule.3
+index d6ad939..de4f9c9 100644
+--- a/doxygen/man/man3/DragModule.3
++++ b/doxygen/man/man3/DragModule.3
+@@ -1,4 +1,4 @@
+-.TH "DragModule" 3 "Thu Oct 12 2023" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.TH "DragModule" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
+ .ad l
+ .nh
+ .SH NAME
+diff --git a/doxygen/man/man3/FormModule.3 b/doxygen/man/man3/FormModule.3
+index 2e8d15f..b87e44c 100644
+--- a/doxygen/man/man3/FormModule.3
++++ b/doxygen/man/man3/FormModule.3
+@@ -1,4 +1,4 @@
+-.TH "FormModule" 3 "Thu Oct 12 2023" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.TH "FormModule" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
+ .ad l
+ .nh
+ .SH NAME
+@@ -81,6 +81,13 @@ FormModule
+ .SH "Detailed Description"
+ .PP 
+ 
++.PP
++\fBSince\fP
++.RS 4
++2\&.5 
++.RE
++.PP
++
+ .SH "Function Documentation"
+ .PP 
+ .SS "QWidget* kdk::KWidget::baseBar ()"
+diff --git a/doxygen/man/man3/InputBoxModule.3 b/doxygen/man/man3/InputBoxModule.3
+index 93b185e..e96cc2c 100644
+--- a/doxygen/man/man3/InputBoxModule.3
++++ b/doxygen/man/man3/InputBoxModule.3
+@@ -1,4 +1,4 @@
+-.TH "InputBoxModule" 3 "Thu Oct 12 2023" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.TH "InputBoxModule" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
+ .ad l
+ .nh
+ .SH NAME
+@@ -157,6 +157,22 @@ InputBoxModule
+ .br
+ .RI "重新加载style "
+ .ti -1c
++.RI "\fBKToolButton\fP * \fBkdk::KSearchLineEdit::customButton\fP ()"
++.br
++.RI "获取自定义按钮 "
++.ti -1c
++.RI "void \fBkdk::KSearchLineEdit::setGradation\fP (bool flag)"
++.br
++.RI "是否启用渐变色 "
++.ti -1c
++.RI "void \fBkdk::KSearchLineEdit::setCustomButtonVisible\fP (bool flag)"
++.br
++.RI "设置智能语义按钮是否可见 "
++.ti -1c
++.RI "bool \fBkdk::KSearchLineEdit::isCustomButtonVisible\fP ()"
++.br
++.RI "返回智能语义按钮是否可见 "
++.ti -1c
+ .RI "bool \fBkdk::KSearchLineEdit::eventFilter\fP (QObject *watched, QEvent *event)"
+ .br
+ .ti -1c
+@@ -166,6 +182,9 @@ InputBoxModule
+ .RI "void \fBkdk::KSearchLineEdit::setVisible\fP (bool visible)"
+ .br
+ .ti -1c
++.RI "void \fBkdk::KSearchLineEdit::paintEvent\fP (QPaintEvent *event)"
++.br
++.ti -1c
+ .RI "QSize \fBkdk::KSearchLineEdit::sizeHint\fP () const override"
+ .br
+ .in -1c
+@@ -179,6 +198,13 @@ InputBoxModule
+ .SH "Detailed Description"
+ .PP 
+ 
++.PP
++\fBSince\fP
++.RS 4
++2\&.5 
++.RE
++.PP
++
+ .SH "Function Documentation"
+ .PP 
+ .SS "Qt::Alignment kdk::KSearchLineEdit::alignment () const"
+@@ -208,6 +234,22 @@ InputBoxModule
+ .RE
+ .PP
+ 
++.SS "\fBKToolButton\fP* kdk::KSearchLineEdit::customButton ()"
++
++.PP
++获取自定义按钮 
++.PP
++\fBReturns\fP
++.RS 4
++
++.RE
++.PP
++\fBSince\fP
++.RS 4
++2\&.4 
++.RE
++.PP
++
+ .SS "bool kdk::KPasswordEdit::echoModeBtnVisible ()"
+ 
+ .PP
+@@ -246,6 +288,22 @@ InputBoxModule
+ .RE
+ .PP
+ 
++.SS "bool kdk::KSearchLineEdit::isCustomButtonVisible ()"
++
++.PP
++返回智能语义按钮是否可见 
++.PP
++\fBReturns\fP
++.RS 4
++bool 
++.RE
++.PP
++\fBSince\fP
++.RS 4
++2\&.4 
++.RE
++.PP
++
+ .SS "bool kdk::KSearchLineEdit::isEnabled ()"
+ 
+ .PP
+@@ -377,6 +435,22 @@ flag
+ .RE
+ .PP
+ 
++.SS "void kdk::KSearchLineEdit::setCustomButtonVisible (bool flag)"
++
++.PP
++设置智能语义按钮是否可见 
++.PP
++\fBParameters\fP
++.RS 4
++\fIflag\fP 
++.RE
++.PP
++\fBSince\fP
++.RS 4
++2\&.4 
++.RE
++.PP
++
+ .SS "void kdk::KPasswordEdit::setEchoMode (EchoMode mode)"
+ 
+ .PP
+@@ -415,6 +489,22 @@ setEchoMode
+ .RE
+ .PP
+ 
++.SS "void kdk::KSearchLineEdit::setGradation (bool flag)"
++
++.PP
++是否启用渐变色 
++.PP
++\fBParameters\fP
++.RS 4
++\fIflag\fP 
++.RE
++.PP
++\fBSince\fP
++.RS 4
++2\&.4 
++.RE
++.PP
++
+ .SS "void kdk::KPasswordEdit::setLoading (bool flag)"
+ 
+ .PP
+diff --git a/doxygen/man/man3/KCrumb.3 b/doxygen/man/man3/KCrumb.3
+new file mode 100644
+index 0000000..43a78ea
+--- /dev/null
++++ b/doxygen/man/man3/KCrumb.3
+@@ -0,0 +1,21 @@
++.TH "KCrumb" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.ad l
++.nh
++.SH NAME
++KCrumb
++.SH SYNOPSIS
++.br
++.PP
++.SH "Detailed Description"
++.PP 
++
++.PP
++\fBSince\fP
++.RS 4
++2\&.5 
++.RE
++.PP
++
++.SH "Author"
++.PP 
++Generated automatically by Doxygen for LIBKYSDK-APPLICATIONS from the source code\&.
+diff --git a/doxygen/man/man3/KCustomDateEdit.3 b/doxygen/man/man3/KCustomDateEdit.3
+new file mode 100644
+index 0000000..3b727c5
+--- /dev/null
++++ b/doxygen/man/man3/KCustomDateEdit.3
+@@ -0,0 +1,21 @@
++.TH "KCustomDateEdit" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.ad l
++.nh
++.SH NAME
++KCustomDateEdit
++.SH SYNOPSIS
++.br
++.PP
++.SH "Detailed Description"
++.PP 
++
++.PP
++\fBSince\fP
++.RS 4
++2\&.5 
++.RE
++.PP
++
++.SH "Author"
++.PP 
++Generated automatically by Doxygen for LIBKYSDK-APPLICATIONS from the source code\&.
+diff --git a/doxygen/man/man3/KCustomTabBar.3 b/doxygen/man/man3/KCustomTabBar.3
+new file mode 100644
+index 0000000..fca63da
+--- /dev/null
++++ b/doxygen/man/man3/KCustomTabBar.3
+@@ -0,0 +1,346 @@
++.TH "KCustomTabBar" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.ad l
++.nh
++.SH NAME
++KCustomTabBar
++.SH SYNOPSIS
++.br
++.PP
++.PP
++Inherits QWidget\&.
++.PP
++Inherited by \fBkdk::KCrumb\fP, and \fBkdk::KNativeTabbar\fP\&.
++.SS "Public Types"
++
++.in +1c
++.ti -1c
++.RI "enum \fBShape\fP { \fBRoundedNorth\fP, \fBRoundedSouth\fP, \fBRoundedWest\fP, \fBRoundedEast\fP, \fBTriangularNorth\fP, \fBTriangularSouth\fP, \fBTriangularWest\fP, \fBTriangularEast\fP }"
++.br
++.ti -1c
++.RI "enum \fBButtonPosition\fP { \fBLeftSide\fP, \fBRightSide\fP }"
++.br
++.ti -1c
++.RI "enum \fBSelectionBehavior\fP { \fBSelectLeftTab\fP, \fBSelectRightTab\fP, \fBSelectPreviousTab\fP }"
++.br
++.in -1c
++.SS "Public Slots"
++
++.in +1c
++.ti -1c
++.RI "void \fBsetCurrentIndex\fP (int index)"
++.br
++.ti -1c
++.RI "void \fBleftScrollTabs\fP ()"
++.br
++.ti -1c
++.RI "void \fBrightScrollTabs\fP ()"
++.br
++.ti -1c
++.RI "void \fBcloseTab\fP ()"
++.br
++.in -1c
++.SS "Signals"
++
++.in +1c
++.ti -1c
++.RI "void \fBcurrentChanged\fP (int index)"
++.br
++.ti -1c
++.RI "void \fBtabCloseRequested\fP (int index)"
++.br
++.ti -1c
++.RI "void \fBtabMoved\fP (int from, int to)"
++.br
++.ti -1c
++.RI "void \fBtabBarClicked\fP (int index)"
++.br
++.ti -1c
++.RI "void \fBtabBarDoubleClicked\fP (int index)"
++.br
++.ti -1c
++.RI "void \fBleftBStatus\fP (bool flag)"
++.br
++.ti -1c
++.RI "void \fBrightBStatus\fP (bool flag)"
++.br
++.in -1c
++.SS "Public Member Functions"
++
++.in +1c
++.ti -1c
++.RI "\fBKCustomTabBar\fP (QWidget *parent=nullptr)"
++.br
++.ti -1c
++.RI "Shape \fBshape\fP () const"
++.br
++.ti -1c
++.RI "void \fBsetShape\fP (Shape shape)"
++.br
++.ti -1c
++.RI "int \fBaddTab\fP (const QString &text)"
++.br
++.ti -1c
++.RI "int \fBaddTab\fP (const QIcon &icon, const QString &text)"
++.br
++.ti -1c
++.RI "int \fBinsertTab\fP (int index, const QString &text)"
++.br
++.ti -1c
++.RI "int \fBinsertTab\fP (int index, const QIcon &icon, const QString &text)"
++.br
++.ti -1c
++.RI "void \fBremoveTab\fP (int index)"
++.br
++.ti -1c
++.RI "void \fBmoveTab\fP (int from, int to)"
++.br
++.ti -1c
++.RI "bool \fBisTabEnabled\fP (int index) const"
++.br
++.ti -1c
++.RI "void \fBsetTabEnabled\fP (int index, bool)"
++.br
++.ti -1c
++.RI "QString \fBtabText\fP (int index) const"
++.br
++.ti -1c
++.RI "void \fBsetTabText\fP (int index, const QString &text)"
++.br
++.ti -1c
++.RI "void \fBsetTabContent\fP (int index, const QString &text)"
++.br
++.ti -1c
++.RI "QColor \fBtabTextColor\fP (int index) const"
++.br
++.ti -1c
++.RI "void \fBsetTabTextColor\fP (int index, const QColor &color)"
++.br
++.ti -1c
++.RI "QIcon \fBtabIcon\fP (int index) const"
++.br
++.ti -1c
++.RI "void \fBsetTabIcon\fP (int index, const QIcon &icon)"
++.br
++.ti -1c
++.RI "Qt::TextElideMode \fBelideMode\fP () const"
++.br
++.ti -1c
++.RI "void \fBsetElideMode\fP (Qt::TextElideMode)"
++.br
++.ti -1c
++.RI "void \fBsetTabToolTip\fP (int index, const QString &tip)"
++.br
++.ti -1c
++.RI "QString \fBtabToolTip\fP (int index) const"
++.br
++.ti -1c
++.RI "void \fBsetTabWhatsThis\fP (int index, const QString &text)"
++.br
++.ti -1c
++.RI "QString \fBtabWhatsThis\fP (int index) const"
++.br
++.ti -1c
++.RI "void \fBsetTabData\fP (int index, const QVariant &data)"
++.br
++.ti -1c
++.RI "QVariant \fBtabData\fP (int index) const"
++.br
++.ti -1c
++.RI "QRect \fBtabRect\fP (int index) const"
++.br
++.ti -1c
++.RI "int \fBtabAt\fP (const QPoint &pos) const"
++.br
++.ti -1c
++.RI "int \fBcurrentIndex\fP () const"
++.br
++.ti -1c
++.RI "int \fBcount\fP () const"
++.br
++.ti -1c
++.RI "QSize \fBsizeHint\fP () const override"
++.br
++.ti -1c
++.RI "QSize \fBminimumSizeHint\fP () const override"
++.br
++.ti -1c
++.RI "void \fBsetDrawBase\fP (bool drawTheBase)"
++.br
++.ti -1c
++.RI "bool \fBdrawBase\fP () const"
++.br
++.ti -1c
++.RI "QSize \fBiconSize\fP () const"
++.br
++.ti -1c
++.RI "void \fBsetIconSize\fP (const QSize &size)"
++.br
++.ti -1c
++.RI "bool \fBusesScrollButtons\fP () const"
++.br
++.ti -1c
++.RI "void \fBsetUsesScrollButtons\fP (bool useButtons)"
++.br
++.ti -1c
++.RI "bool \fBtabsClosable\fP () const"
++.br
++.ti -1c
++.RI "void \fBsetTabsClosable\fP (bool closable)"
++.br
++.ti -1c
++.RI "void \fBsetTabButton\fP (int index, ButtonPosition position, QWidget *widget)"
++.br
++.ti -1c
++.RI "QWidget * \fBtabButton\fP (int index, ButtonPosition position) const"
++.br
++.ti -1c
++.RI "SelectionBehavior \fBselectionBehaviorOnRemove\fP () const"
++.br
++.ti -1c
++.RI "void \fBsetSelectionBehaviorOnRemove\fP (SelectionBehavior behavior)"
++.br
++.ti -1c
++.RI "bool \fBexpanding\fP () const"
++.br
++.ti -1c
++.RI "void \fBsetExpanding\fP (bool enabled)"
++.br
++.ti -1c
++.RI "bool \fBisMovable\fP () const"
++.br
++.ti -1c
++.RI "void \fBsetMovable\fP (bool movable)"
++.br
++.ti -1c
++.RI "bool \fBdocumentMode\fP () const"
++.br
++.ti -1c
++.RI "void \fBsetDocumentMode\fP (bool set)"
++.br
++.ti -1c
++.RI "bool \fBautoHide\fP () const"
++.br
++.ti -1c
++.RI "void \fBsetAutoHide\fP (bool hide)"
++.br
++.ti -1c
++.RI "bool \fBchangeCurrentOnDrag\fP () const"
++.br
++.ti -1c
++.RI "void \fBsetChangeCurrentOnDrag\fP (bool change)"
++.br
++.ti -1c
++.RI "QString \fBaccessibleTabName\fP (int index) const"
++.br
++.ti -1c
++.RI "void \fBsetAccessibleTabName\fP (int index, const QString &name)"
++.br
++.in -1c
++.SS "Protected Member Functions"
++
++.in +1c
++.ti -1c
++.RI "virtual QSize \fBtabSizeHint\fP (int index) const"
++.br
++.ti -1c
++.RI "virtual QSize \fBminimumTabSizeHint\fP (int index) const"
++.br
++.ti -1c
++.RI "virtual void \fBtabInserted\fP (int index)"
++.br
++.ti -1c
++.RI "virtual void \fBtabRemoved\fP (int index)"
++.br
++.ti -1c
++.RI "virtual void \fBtabLayoutChange\fP ()"
++.br
++.ti -1c
++.RI "bool \fBevent\fP (QEvent *) override"
++.br
++.ti -1c
++.RI "void \fBresizeEvent\fP (QResizeEvent *) override"
++.br
++.ti -1c
++.RI "void \fBshowEvent\fP (QShowEvent *) override"
++.br
++.ti -1c
++.RI "void \fBhideEvent\fP (QHideEvent *) override"
++.br
++.ti -1c
++.RI "void \fBpaintEvent\fP (QPaintEvent *) override"
++.br
++.ti -1c
++.RI "void \fBmousePressEvent\fP (QMouseEvent *) override"
++.br
++.ti -1c
++.RI "void \fBmouseMoveEvent\fP (QMouseEvent *) override"
++.br
++.ti -1c
++.RI "void \fBmouseReleaseEvent\fP (QMouseEvent *) override"
++.br
++.ti -1c
++.RI "void \fBwheelEvent\fP (QWheelEvent *event) override"
++.br
++.ti -1c
++.RI "void \fBkeyPressEvent\fP (QKeyEvent *) override"
++.br
++.ti -1c
++.RI "void \fBchangeEvent\fP (QEvent *) override"
++.br
++.ti -1c
++.RI "void \fBtimerEvent\fP (QTimerEvent *event) override"
++.br
++.ti -1c
++.RI "void \fBinitStyleOption\fP (QStyleOptionTab *option, int tabIndex) const"
++.br
++.in -1c
++.SS "Properties"
++
++.in +1c
++.ti -1c
++.RI "Shape \fBshape\fP"
++.br
++.ti -1c
++.RI "int \fBcurrentIndex\fP"
++.br
++.ti -1c
++.RI "int \fBcount\fP"
++.br
++.ti -1c
++.RI "bool \fBdrawBase\fP"
++.br
++.ti -1c
++.RI "QSize \fBiconSize\fP"
++.br
++.ti -1c
++.RI "Qt::TextElideMode \fBelideMode\fP"
++.br
++.ti -1c
++.RI "bool \fBusesScrollButtons\fP"
++.br
++.ti -1c
++.RI "bool \fBtabsClosable\fP"
++.br
++.ti -1c
++.RI "SelectionBehavior \fBselectionBehaviorOnRemove\fP"
++.br
++.ti -1c
++.RI "bool \fBexpanding\fP"
++.br
++.ti -1c
++.RI "bool \fBmovable\fP"
++.br
++.ti -1c
++.RI "bool \fBdocumentMode\fP"
++.br
++.ti -1c
++.RI "bool \fBautoHide\fP"
++.br
++.ti -1c
++.RI "bool \fBchangeCurrentOnDrag\fP"
++.br
++.in -1c
++
++.SH "Author"
++.PP 
++Generated automatically by Doxygen for LIBKYSDK-APPLICATIONS from the source code\&.
+diff --git a/doxygen/man/man3/KLunarCalendarInfo.3 b/doxygen/man/man3/KLunarCalendarInfo.3
+new file mode 100644
+index 0000000..f867132
+--- /dev/null
++++ b/doxygen/man/man3/KLunarCalendarInfo.3
+@@ -0,0 +1,21 @@
++.TH "KLunarCalendarInfo" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.ad l
++.nh
++.SH NAME
++KLunarCalendarInfo
++.SH SYNOPSIS
++.br
++.PP
++.SH "Detailed Description"
++.PP 
++
++.PP
++\fBSince\fP
++.RS 4
++2\&.5 
++.RE
++.PP
++
++.SH "Author"
++.PP 
++Generated automatically by Doxygen for LIBKYSDK-APPLICATIONS from the source code\&.
+diff --git a/doxygen/man/man3/KLunarDateEdit.3 b/doxygen/man/man3/KLunarDateEdit.3
+new file mode 100644
+index 0000000..6c5ab49
+--- /dev/null
++++ b/doxygen/man/man3/KLunarDateEdit.3
+@@ -0,0 +1,21 @@
++.TH "KLunarDateEdit" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.ad l
++.nh
++.SH NAME
++KLunarDateEdit
++.SH SYNOPSIS
++.br
++.PP
++.SH "Detailed Description"
++.PP 
++
++.PP
++\fBSince\fP
++.RS 4
++2\&.5 
++.RE
++.PP
++
++.SH "Author"
++.PP 
++Generated automatically by Doxygen for LIBKYSDK-APPLICATIONS from the source code\&.
+diff --git a/doxygen/man/man3/KMiniCalendarItem.3 b/doxygen/man/man3/KMiniCalendarItem.3
+new file mode 100644
+index 0000000..dd49436
+--- /dev/null
++++ b/doxygen/man/man3/KMiniCalendarItem.3
+@@ -0,0 +1,21 @@
++.TH "KMiniCalendarItem" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.ad l
++.nh
++.SH NAME
++KMiniCalendarItem
++.SH SYNOPSIS
++.br
++.PP
++.SH "Detailed Description"
++.PP 
++
++.PP
++\fBSince\fP
++.RS 4
++2\&.5 
++.RE
++.PP
++
++.SH "Author"
++.PP 
++Generated automatically by Doxygen for LIBKYSDK-APPLICATIONS from the source code\&.
+diff --git a/doxygen/man/man3/KMiniCalendarWidget.3 b/doxygen/man/man3/KMiniCalendarWidget.3
+new file mode 100644
+index 0000000..080f309
+--- /dev/null
++++ b/doxygen/man/man3/KMiniCalendarWidget.3
+@@ -0,0 +1,21 @@
++.TH "KMiniCalendarWidget" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.ad l
++.nh
++.SH NAME
++KMiniCalendarWidget
++.SH SYNOPSIS
++.br
++.PP
++.SH "Detailed Description"
++.PP 
++
++.PP
++\fBSince\fP
++.RS 4
++2\&.5 
++.RE
++.PP
++
++.SH "Author"
++.PP 
++Generated automatically by Doxygen for LIBKYSDK-APPLICATIONS from the source code\&.
+diff --git a/doxygen/man/man3/Label.3 b/doxygen/man/man3/Label.3
+new file mode 100644
+index 0000000..0224187
+--- /dev/null
++++ b/doxygen/man/man3/Label.3
+@@ -0,0 +1,14 @@
++.TH "Label" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.ad l
++.nh
++.SH NAME
++Label
++.SH SYNOPSIS
++.br
++.PP
++.SH "Detailed Description"
++.PP 
++
++.SH "Author"
++.PP 
++Generated automatically by Doxygen for LIBKYSDK-APPLICATIONS from the source code\&.
+diff --git a/doxygen/man/man3/ListViewModule.3 b/doxygen/man/man3/ListViewModule.3
+index d19762c..326bfd4 100644
+--- a/doxygen/man/man3/ListViewModule.3
++++ b/doxygen/man/man3/ListViewModule.3
+@@ -1,4 +1,4 @@
+-.TH "ListViewModule" 3 "Thu Oct 12 2023" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.TH "ListViewModule" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
+ .ad l
+ .nh
+ .SH NAME
+diff --git a/doxygen/man/man3/MessageAlertModule.3 b/doxygen/man/man3/MessageAlertModule.3
+index 7af0f55..48f6bc9 100644
+--- a/doxygen/man/man3/MessageAlertModule.3
++++ b/doxygen/man/man3/MessageAlertModule.3
+@@ -1,4 +1,4 @@
+-.TH "MessageAlertModule" 3 "Thu Oct 12 2023" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.TH "MessageAlertModule" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
+ .ad l
+ .nh
+ .SH NAME
+@@ -26,7 +26,7 @@ MessageAlertModule
+ 
+ .in +1c
+ .ti -1c
+-.RI "enum \fBkdk::TipType\fP { \fBNothing\fP, \fBNormal\fP, \fBInfo\fP, \fBWarning\fP, \fBError\fP }"
++.RI "enum \fBkdk::TipType\fP { \fBNothing\fP, \fBNormal\fP, \fBInfo\fP, \fBWarning\fP, \fBError\fP, \fBVariable\fP }"
+ .br
+ .RI "支持五种样式 "
+ .ti -1c
+@@ -117,6 +117,18 @@ MessageAlertModule
+ .br
+ .RI "设置持续时间 "
+ .ti -1c
++.RI "QHBoxLayout * \fBkdk::KBallonTip::hBoxLayout\fP ()"
++.br
++.RI "获取kballontip的水平布局 "
++.ti -1c
++.RI "void \fBkdk::KBallonTip::setVariableIcon\fP (QIcon icon)"
++.br
++.RI "设置可变类型的icon "
++.ti -1c
++.RI "QPixmap \fBkdk::KBallonTip::variableIcon\fP ()"
++.br
++.RI "获取可变类型的icon "
++.ti -1c
+ .RI "void \fBkdk::KBallonTip::paintEvent\fP (QPaintEvent *event) override"
+ .br
+ .ti -1c
+@@ -161,6 +173,22 @@ MessageAlertModule
+ .RE
+ .PP
+ 
++.SS "QHBoxLayout* kdk::KBallonTip::hBoxLayout ()"
++
++.PP
++获取kballontip的水平布局 
++.PP
++\fBReturns\fP
++.RS 4
++
++.RE
++.PP
++\fBSince\fP
++.RS 4
++2\&.4 
++.RE
++.PP
++
+ .SS "\fBSecurityLevel\fP kdk::KSecurityLevelBar::securityLevel ()"
+ 
+ .PP
+@@ -288,6 +316,22 @@ MessageAlertModule
+ .RE
+ .PP
+ 
++.SS "void kdk::KBallonTip::setVariableIcon (QIcon icon)"
++
++.PP
++设置可变类型的icon 
++.PP
++\fBParameters\fP
++.RS 4
++\fIicon\fP 
++.RE
++.PP
++\fBSince\fP
++.RS 4
++2\&.5 
++.RE
++.PP
++
+ .SS "void kdk::KBallonTip::showInfo ()"
+ 
+ .PP
+@@ -332,6 +376,22 @@ text
+ .RE
+ .PP
+ 
++.SS "QPixmap kdk::KBallonTip::variableIcon ()"
 +
- void UkuiWindow::setMinimizedGeometry(Surface *panel, const QRect &geom)
- {
-     ukui_window_set_minimized_geometry(d->window, *panel, geom.x(), geom.y(), geom.width(), geom.height());
-diff --git a/kysdk-waylandhelper/src/windowmanager/ukuiwindowmanagement.h b/kysdk-waylandhelper/src/windowmanager/ukuiwindowmanagement.h
-index 587d446..23d3aad 100644
---- a/kysdk-waylandhelper/src/windowmanager/ukuiwindowmanagement.h
-+++ b/kysdk-waylandhelper/src/windowmanager/ukuiwindowmanagement.h
-@@ -188,6 +188,8 @@ public:
++.PP
++获取可变类型的icon 
++.PP
++\fBReturns\fP
++.RS 4
++
++.RE
++.PP
++\fBSince\fP
++.RS 4
++2\&.5 
++.RE
++.PP
++
+ .SH "Author"
+ .PP 
+ Generated automatically by Doxygen for LIBKYSDK-APPLICATIONS from the source code\&.
+diff --git a/doxygen/man/man3/ProgressModule.3 b/doxygen/man/man3/ProgressModule.3
+new file mode 100644
+index 0000000..afbddd2
+--- /dev/null
++++ b/doxygen/man/man3/ProgressModule.3
+@@ -0,0 +1,21 @@
++.TH "ProgressModule" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.ad l
++.nh
++.SH NAME
++ProgressModule
++.SH SYNOPSIS
++.br
++.PP
++.SH "Detailed Description"
++.PP 
++
++.PP
++\fBSince\fP
++.RS 4
++2\&.5 
++.RE
++.PP
++
++.SH "Author"
++.PP 
++Generated automatically by Doxygen for LIBKYSDK-APPLICATIONS from the source code\&.
+diff --git a/doxygen/man/man3/PushbuttonModule.3 b/doxygen/man/man3/PushbuttonModule.3
+index 575c381..c4f4d18 100644
+--- a/doxygen/man/man3/PushbuttonModule.3
++++ b/doxygen/man/man3/PushbuttonModule.3
+@@ -1,4 +1,4 @@
+-.TH "PushbuttonModule" 3 "Thu Oct 12 2023" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.TH "PushbuttonModule" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
+ .ad l
+ .nh
+ .SH NAME
+@@ -34,7 +34,7 @@ PushbuttonModule
+ 
+ .in +1c
+ .ti -1c
+-.RI "enum \fBkdk::KToolButtonType\fP { \fBFlat\fP, \fBSemiFlat\fP, \fBBackground\fP }"
++.RI "enum \fBkdk::KToolButtonType\fP { \fBFlat\fP, \fBSemiFlat\fP, \fBBackground\fP, \fBFrameless\fP }"
+ .br
+ .RI "支持三种样式,暂不支持文字显示 "
+ .in -1c
+@@ -119,6 +119,10 @@ PushbuttonModule
+ .br
+ .RI "获取关于Action "
+ .ti -1c
++.RI "QAction * \fBkdk::KMenuButton::feedbackAction\fP ()"
++.br
++.RI "获取意见反馈Action "
++.ti -1c
+ .RI "QAction * \fBkdk::KMenuButton::quitAction\fP ()"
+ .br
+ .RI "获取离开Action "
+@@ -215,6 +219,19 @@ PushbuttonModule
+ .br
+ .RI "返回是否显示箭头 "
+ .ti -1c
++.RI "void \fBkdk::KToolButton::setIconColor\fP (bool flag, QColor color)"
++.br
++.RI "设置图标颜色 "
++.ti -1c
++.RI "void \fBkdk::KToolButton::setBorderRadius\fP (int bottomLeft, int topLeft, int topRight, int bottomRight)"
++.br
++.ti -1c
++.RI "void \fBkdk::KToolButton::setBackgroundColorEnabled\fP (bool flag)"
++.br
++.ti -1c
++.RI "bool \fBkdk::KToolButton::backgroundColorEnabled\fP ()"
++.br
++.ti -1c
+ .RI "bool \fBkdk::KToolButton::eventFilter\fP (QObject *watched, QEvent *event)"
+ .br
+ .ti -1c
+@@ -231,6 +248,9 @@ PushbuttonModule
+ .RI "void \fBkdk::KSwitchButton::stateChanged\fP (bool)"
+ .br
+ .RI "当选中状态发生变化时,发出此信号 "
++.ti -1c
++.RI "void \fBkdk::KToolButton::checkedChanged\fP (bool checked)"
++.br
+ .in -1c
+ .SH "Detailed Description"
+ .PP 
+@@ -281,6 +301,21 @@ PushbuttonModule
+ .RE
+ .PP
+ 
++.SS "QAction* kdk::KMenuButton::feedbackAction ()"
++
++.PP
++获取意见反馈Action 
++.PP
++\fBSince\fP
++.RS 4
++2\&.4\&.1\&.0-0k1\&.0 
++.RE
++.PP
++\fBReturns\fP
++.RS 4
++.RE
++.PP
++
+ .SS "bool kdk::KToolButton::hasArrow () const"
+ 
+ .PP
+@@ -440,6 +475,24 @@ flag
+ .RE
+ .PP
  
-     void requestToggleMaximized();
++.SS "void kdk::KToolButton::setIconColor (bool flag, QColor color)"
++
++.PP
++设置图标颜色 
++.PP
++\fBParameters\fP
++.RS 4
++\fIflag\fP 
++.br
++\fIcolor\fP 
++.RE
++.PP
++\fBSince\fP
++.RS 4
++2\&.4 
++.RE
++.PP
++
+ .SS "void kdk::KToolButton::setLoading (bool flag)"
  
-+    void setStartupGeometry(Surface *surface, const QRect &geometry);
+ .PP
+diff --git a/doxygen/man/man3/SliderModule.3 b/doxygen/man/man3/SliderModule.3
+index 1bd69a1..0e37d4e 100644
+--- a/doxygen/man/man3/SliderModule.3
++++ b/doxygen/man/man3/SliderModule.3
+@@ -1,4 +1,4 @@
+-.TH "SliderModule" 3 "Thu Oct 12 2023" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.TH "SliderModule" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
+ .ad l
+ .nh
+ .SH NAME
+diff --git a/doxygen/man/man3/TagModule.3 b/doxygen/man/man3/TagModule.3
+index 0224b31..f77cfa2 100644
+--- a/doxygen/man/man3/TagModule.3
++++ b/doxygen/man/man3/TagModule.3
+@@ -1,4 +1,4 @@
+-.TH "TagModule" 3 "Thu Oct 12 2023" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.TH "TagModule" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
+ .ad l
+ .nh
+ .SH NAME
+diff --git a/doxygen/man/man3/UkuiStyleModule.3 b/doxygen/man/man3/UkuiStyleModule.3
+index fbf722a..f8ed40c 100644
+--- a/doxygen/man/man3/UkuiStyleModule.3
++++ b/doxygen/man/man3/UkuiStyleModule.3
+@@ -1,4 +1,4 @@
+-.TH "UkuiStyleModule" 3 "Thu Oct 12 2023" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.TH "UkuiStyleModule" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
+ .ad l
+ .nh
+ .SH NAME
+diff --git a/doxygen/man/man3/WindowManagerModule.3 b/doxygen/man/man3/WindowManagerModule.3
+index 76d8cf7..e2b3ff8 100644
+--- a/doxygen/man/man3/WindowManagerModule.3
++++ b/doxygen/man/man3/WindowManagerModule.3
+@@ -1,4 +1,4 @@
+-.TH "WindowManagerModule" 3 "Thu Oct 12 2023" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.TH "WindowManagerModule" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
+ .ad l
+ .nh
+ .SH NAME
+diff --git a/doxygen/man/man3/kdk_AccessInfoHelper.3 b/doxygen/man/man3/kdk_AccessInfoHelper.3
+new file mode 100644
+index 0000000..5fa77d2
+--- /dev/null
++++ b/doxygen/man/man3/kdk_AccessInfoHelper.3
+@@ -0,0 +1,25 @@
++.TH "kdk::AccessInfoHelper< T >" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.ad l
++.nh
++.SH NAME
++kdk::AccessInfoHelper< T >
++.SH SYNOPSIS
++.br
++.PP
++.SS "Public Member Functions"
++
++.in +1c
++.ti -1c
++.RI "\fBAccessInfoHelper\fP (T *widget)"
++.br
++.ti -1c
++.RI "void \fBsetObjectInfo\fP (const QString &widgetName, const QString &pluginName, const QString &extend=QString())"
++.br
++.ti -1c
++.RI "void \fBsetAllAttribute\fP (const QString &widgetName, const QString &pluginName=QString(), const QString &extend=QString(), const QString &description=QString())"
++.br
++.in -1c
++
++.SH "Author"
++.PP 
++Generated automatically by Doxygen for LIBKYSDK-APPLICATIONS from the source code\&.
+diff --git a/doxygen/man/man3/kdk_KAboutDialog.3 b/doxygen/man/man3/kdk_KAboutDialog.3
+index 5275be0..ceb5950 100644
+--- a/doxygen/man/man3/kdk_KAboutDialog.3
++++ b/doxygen/man/man3/kdk_KAboutDialog.3
+@@ -1,4 +1,4 @@
+-.TH "kdk::KAboutDialog" 3 "Thu Oct 12 2023" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.TH "kdk::KAboutDialog" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
+ .ad l
+ .nh
+ .SH NAME
+diff --git a/doxygen/man/man3/kdk_KAddFileButton.3 b/doxygen/man/man3/kdk_KAddFileButton.3
+new file mode 100644
+index 0000000..14f65ce
+--- /dev/null
++++ b/doxygen/man/man3/kdk_KAddFileButton.3
+@@ -0,0 +1,117 @@
++.TH "kdk::KAddFileButton" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.ad l
++.nh
++.SH NAME
++kdk::KAddFileButton \- 选择文件的按钮  
++
++.SH SYNOPSIS
++.br
++.PP
++.PP
++\fC#include <kaddfilebutton\&.h>\fP
++.PP
++Inherits QPushButton\&.
++.SS "Public Member Functions"
++
++.in +1c
++.ti -1c
++.RI "\fBKAddFileButton\fP (QWidget *parent=nullptr)"
++.br
++.ti -1c
++.RI "void \fBsetText\fP (QString str)"
++.br
++.RI "设置文本 "
++.ti -1c
++.RI "QFileDialog * \fBfileDialog\fP ()"
++.br
++.RI "获取filedialog "
++.ti -1c
++.RI "void \fBsetNameFilter\fP (const QString &filter)"
++.br
++.RI "将文件对话框中使用的过滤器设置为给定的过滤器。 "
++.ti -1c
++.RI "void \fBsetNameFilters\fP (const QStringList &filters)"
++.br
++.RI "设置文件对话框中使用的过滤器。 "
++.in -1c
++.SS "Protected Member Functions"
++
++.in +1c
++.ti -1c
++.RI "void \fBpaintEvent\fP (QPaintEvent *event)"
++.br
++.ti -1c
++.RI "bool \fBeventFilter\fP (QObject *watched, QEvent *event)"
++.br
++.ti -1c
++.RI "void \fBmouseMoveEvent\fP (QMouseEvent *event)"
++.br
++.ti -1c
++.RI "void \fBmousePressEvent\fP (QMouseEvent *event)"
++.br
++.ti -1c
++.RI "void \fBmouseReleaseEvent\fP (QMouseEvent *event)"
++.br
++.in -1c
++.SH "Detailed Description"
++.PP 
++选择文件的按钮 
++
++
++.PP
++\fBSince\fP
++.RS 4
++2\&.4 
++.RE
++.PP
++
++.SH "Member Function Documentation"
++.PP 
++.SS "QFileDialog* kdk::KAddFileButton::fileDialog ()"
++
++.PP
++获取filedialog 
++.PP
++\fBReturns\fP
++.RS 4
++QFileDialog 
++.RE
++.PP
++
++.SS "void kdk::KAddFileButton::setNameFilter (const QString & filter)"
++
++.PP
++将文件对话框中使用的过滤器设置为给定的过滤器。 
++.PP
++\fBParameters\fP
++.RS 4
++\fIfilter\fP 
++.RE
++.PP
++
++.SS "void kdk::KAddFileButton::setNameFilters (const QStringList & filters)"
 +
-     void setMinimizedGeometry(Surface *panel, const QRect &geom);
++.PP
++设置文件对话框中使用的过滤器。 
++.PP
++\fBParameters\fP
++.RS 4
++\fIfilters\fP 
++.RE
++.PP
++
++.SS "void kdk::KAddFileButton::setText (QString str)"
++
++.PP
++设置文本 
++.PP
++\fBParameters\fP
++.RS 4
++\fIstr\fP 
++.RE
++.PP
++
++
++.SH "Author"
++.PP 
++Generated automatically by Doxygen for LIBKYSDK-APPLICATIONS from the source code\&.
+diff --git a/doxygen/man/man3/kdk_KArrowTabBar.3 b/doxygen/man/man3/kdk_KArrowTabBar.3
+new file mode 100644
+index 0000000..b93294a
+--- /dev/null
++++ b/doxygen/man/man3/kdk_KArrowTabBar.3
+@@ -0,0 +1,55 @@
++.TH "kdk::KArrowTabBar" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.ad l
++.nh
++.SH NAME
++kdk::KArrowTabBar \- 可显示箭头的tabbar  
++
++.SH SYNOPSIS
++.br
++.PP
++.PP
++\fC#include <karrowtabbar\&.h>\fP
++.PP
++Inherits QWidget\&.
++.SS "Signals"
++
++.in +1c
++.ti -1c
++.RI "void \fBsizeChange\fP ()"
++.br
++.RI "点击会发出信号 "
++.in -1c
++.SS "Public Member Functions"
++
++.in +1c
++.ti -1c
++.RI "\fBKArrowTabBar\fP (QWidget *parent=nullptr)"
++.br
++.ti -1c
++.RI "\fBKNativeTabbar\fP * \fBtabbar\fP ()"
++.br
++.RI "获取knativetabbar "
++.in -1c
++.SS "Protected Member Functions"
++
++.in +1c
++.ti -1c
++.RI "void \fBresizeEvent\fP (QResizeEvent *event)"
++.br
++.in -1c
++.SH "Detailed Description"
++.PP 
++可显示箭头的tabbar 
++
++
++.PP
++\fBSince\fP
++.RS 4
++2\&.5 
++.RE
++.PP
++
++
++.SH "Author"
++.PP 
++Generated automatically by Doxygen for LIBKYSDK-APPLICATIONS from the source code\&.
+diff --git a/doxygen/man/man3/kdk_KBackgroundGroup.3 b/doxygen/man/man3/kdk_KBackgroundGroup.3
+index 195141e..0da11ce 100644
+--- a/doxygen/man/man3/kdk_KBackgroundGroup.3
++++ b/doxygen/man/man3/kdk_KBackgroundGroup.3
+@@ -1,4 +1,4 @@
+-.TH "kdk::KBackgroundGroup" 3 "Thu Oct 12 2023" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.TH "kdk::KBackgroundGroup" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
+ .ad l
+ .nh
+ .SH NAME
+diff --git a/doxygen/man/man3/kdk_KBadge.3 b/doxygen/man/man3/kdk_KBadge.3
+index 6ccc026..9465a55 100644
+--- a/doxygen/man/man3/kdk_KBadge.3
++++ b/doxygen/man/man3/kdk_KBadge.3
+@@ -1,4 +1,4 @@
+-.TH "kdk::KBadge" 3 "Thu Oct 12 2023" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.TH "kdk::KBadge" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
+ .ad l
+ .nh
+ .SH NAME
+diff --git a/doxygen/man/man3/kdk_KBallonTip.3 b/doxygen/man/man3/kdk_KBallonTip.3
+index 8c1808e..f5d8df1 100644
+--- a/doxygen/man/man3/kdk_KBallonTip.3
++++ b/doxygen/man/man3/kdk_KBallonTip.3
+@@ -1,4 +1,4 @@
+-.TH "kdk::KBallonTip" 3 "Thu Oct 12 2023" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.TH "kdk::KBallonTip" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
+ .ad l
+ .nh
+ .SH NAME
+@@ -52,6 +52,18 @@ Inherits QWidget\&.
+ .RI "void \fBsetTipTime\fP (int my_time)"
+ .br
+ .RI "设置持续时间 "
++.ti -1c
++.RI "QHBoxLayout * \fBhBoxLayout\fP ()"
++.br
++.RI "获取kballontip的水平布局 "
++.ti -1c
++.RI "void \fBsetVariableIcon\fP (QIcon icon)"
++.br
++.RI "设置可变类型的icon "
++.ti -1c
++.RI "QPixmap \fBvariableIcon\fP ()"
++.br
++.RI "获取可变类型的icon "
+ .in -1c
+ .SS "Protected Member Functions"
  
-     void unsetMinimizedGeometry(Surface *panel);
-@@ -222,6 +224,8 @@ public:
+diff --git a/doxygen/man/man3/kdk_KBorderButton.3 b/doxygen/man/man3/kdk_KBorderButton.3
+index 81bc688..601d082 100644
+--- a/doxygen/man/man3/kdk_KBorderButton.3
++++ b/doxygen/man/man3/kdk_KBorderButton.3
+@@ -1,4 +1,4 @@
+-.TH "kdk::KBorderButton" 3 "Thu Oct 12 2023" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.TH "kdk::KBorderButton" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
+ .ad l
+ .nh
+ .SH NAME
+diff --git a/doxygen/man/man3/kdk_KBorderlessButton.3 b/doxygen/man/man3/kdk_KBorderlessButton.3
+index 4c616b7..4ba3e7b 100644
+--- a/doxygen/man/man3/kdk_KBorderlessButton.3
++++ b/doxygen/man/man3/kdk_KBorderlessButton.3
+@@ -1,4 +1,4 @@
+-.TH "kdk::KBorderlessButton" 3 "Thu Oct 12 2023" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.TH "kdk::KBorderlessButton" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
+ .ad l
+ .nh
+ .SH NAME
+diff --git a/doxygen/man/man3/kdk_KBreadCrumb.3 b/doxygen/man/man3/kdk_KBreadCrumb.3
+index 3fb7b52..413fdbf 100644
+--- a/doxygen/man/man3/kdk_KBreadCrumb.3
++++ b/doxygen/man/man3/kdk_KBreadCrumb.3
+@@ -1,4 +1,4 @@
+-.TH "kdk::KBreadCrumb" 3 "Thu Oct 12 2023" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.TH "kdk::KBreadCrumb" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
+ .ad l
+ .nh
+ .SH NAME
+diff --git a/doxygen/man/man3/kdk_KBubbleWidget.3 b/doxygen/man/man3/kdk_KBubbleWidget.3
+index 1c177f4..a2201a7 100644
+--- a/doxygen/man/man3/kdk_KBubbleWidget.3
++++ b/doxygen/man/man3/kdk_KBubbleWidget.3
+@@ -1,4 +1,4 @@
+-.TH "kdk::KBubbleWidget" 3 "Thu Oct 12 2023" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.TH "kdk::KBubbleWidget" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
+ .ad l
+ .nh
+ .SH NAME
+@@ -61,6 +61,10 @@ Inherits QWidget\&.
+ .RI "qreal \fBopacity\fP ()"
+ .br
+ .RI "获取透明度 "
++.ti -1c
++.RI "void \fBsetHighlightBackground\fP (bool flag)"
++.br
++.RI "设置是否启用高亮背景色 "
+ .in -1c
+ .SS "Protected Member Functions"
  
-     void sendToOutput(Output *output) const;
+@@ -144,6 +148,22 @@ Inherits QWidget\&.
+ .RE
+ .PP
  
++.SS "void kdk::KBubbleWidget::setHighlightBackground (bool flag)"
 +
++.PP
++设置是否启用高亮背景色 
++.PP
++\fBParameters\fP
++.RS 4
++\fIflag\fP 
++.RE
++.PP
++\fBSince\fP
++.RS 4
++2\&.4 
++.RE
++.PP
 +
- Q_SIGNALS:
+ .SS "void kdk::KBubbleWidget::setOpacity (qreal opacity)"
  
-     void titleChanged();
+ .PP
+diff --git a/doxygen/man/man3/kdk_KButtonBox.3 b/doxygen/man/man3/kdk_KButtonBox.3
+index fd60f39..a4038e5 100644
+--- a/doxygen/man/man3/kdk_KButtonBox.3
++++ b/doxygen/man/man3/kdk_KButtonBox.3
+@@ -1,4 +1,4 @@
+-.TH "kdk::KButtonBox" 3 "Thu Oct 12 2023" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.TH "kdk::KButtonBox" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
+ .ad l
+ .nh
+ .SH NAME
+@@ -105,6 +105,14 @@ Inherits QWidget\&.
+ .RI "bool \fBisCheckable\fP ()"
+ .br
+ .RI "返回KButtonBox中的按钮是否可选中 "
++.ti -1c
++.RI "void \fBsetShadow\fP (bool flag)"
++.br
++.RI "设置是否启动阴影效果 "
++.ti -1c
++.RI "bool \fBshadow\fP ()"
++.br
++.RI "获取是否启用阴影效果 "
+ .in -1c
+ .SH "Detailed Description"
+ .PP 
+@@ -308,6 +316,38 @@ Inherits QWidget\&.
+ .RE
+ .PP
+ 
++.SS "void kdk::KButtonBox::setShadow (bool flag)"
++
++.PP
++设置是否启动阴影效果 
++.PP
++\fBParameters\fP
++.RS 4
++\fIflag\fP 
++.RE
++.PP
++\fBSince\fP
++.RS 4
++2\&.4 
++.RE
++.PP
++
++.SS "bool kdk::KButtonBox::shadow ()"
++
++.PP
++获取是否启用阴影效果 
++.PP
++\fBReturns\fP
++.RS 4
++bool 
++.RE
++.PP
++\fBSince\fP
++.RS 4
++2\&.4 
++.RE
++.PP
++
+ 
+ .SH "Author"
+ .PP 
+diff --git a/doxygen/man/man3/kdk_KClockTimer.3 b/doxygen/man/man3/kdk_KClockTimer.3
+new file mode 100644
+index 0000000..46b0610
+--- /dev/null
++++ b/doxygen/man/man3/kdk_KClockTimer.3
+@@ -0,0 +1,54 @@
++.TH "kdk::KClockTimer" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.ad l
++.nh
++.SH NAME
++kdk::KClockTimer
++.SH SYNOPSIS
++.br
++.PP
++.PP
++Inherits QWidget\&.
++.SS "Public Slots"
++
++.in +1c
++.ti -1c
++.RI "void \fBstartStopwatch\fP ()"
++.br
++.RI "开始计时信号 "
++.ti -1c
++.RI "void \fBstopStopwatch\fP ()"
++.br
++.RI "停止计时信号 "
++.ti -1c
++.RI "void \fBresetStopwatch\fP ()"
++.br
++.RI "复位信号 "
++.in -1c
++.SS "Public Member Functions"
++
++.in +1c
++.ti -1c
++.RI "\fBKClockTimer\fP (QWidget *parent=nullptr)"
++.br
++.ti -1c
++.RI "QString \fBtime\fP ()"
++.br
++.RI "获取当前时间 "
++.in -1c
++.SH "Member Function Documentation"
++.PP 
++.SS "QString kdk::KClockTimer::time ()"
++
++.PP
++获取当前时间 
++.PP
++\fBReturns\fP
++.RS 4
++
++.RE
++.PP
++
++
++.SH "Author"
++.PP 
++Generated automatically by Doxygen for LIBKYSDK-APPLICATIONS from the source code\&.
+diff --git a/doxygen/man/man3/kdk_KColorButton.3 b/doxygen/man/man3/kdk_KColorButton.3
+index 89b2735..39eb184 100644
+--- a/doxygen/man/man3/kdk_KColorButton.3
++++ b/doxygen/man/man3/kdk_KColorButton.3
+@@ -1,4 +1,4 @@
+-.TH "kdk::KColorButton" 3 "Thu Oct 12 2023" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.TH "kdk::KColorButton" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
+ .ad l
+ .nh
+ .SH NAME
+diff --git a/doxygen/man/man3/kdk_KColorComboBox.3 b/doxygen/man/man3/kdk_KColorComboBox.3
+index ed724cc..49d30ef 100644
+--- a/doxygen/man/man3/kdk_KColorComboBox.3
++++ b/doxygen/man/man3/kdk_KColorComboBox.3
+@@ -1,4 +1,4 @@
+-.TH "kdk::KColorComboBox" 3 "Thu Oct 12 2023" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.TH "kdk::KColorComboBox" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
+ .ad l
+ .nh
+ .SH NAME
+diff --git a/doxygen/man/man3/kdk_KComboBoxWidget.3 b/doxygen/man/man3/kdk_KComboBoxWidget.3
+new file mode 100644
+index 0000000..bf0b373
+--- /dev/null
++++ b/doxygen/man/man3/kdk_KComboBoxWidget.3
+@@ -0,0 +1,109 @@
++.TH "kdk::KComboBoxWidget" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.ad l
++.nh
++.SH NAME
++kdk::KComboBoxWidget
++.SH SYNOPSIS
++.br
++.PP
++.PP
++Inherits QWidget\&.
++.SS "Signals"
++
++.in +1c
++.ti -1c
++.RI "void \fBcomBoxWidgetClicked\fP ()"
++.br
++.in -1c
++.SS "Public Member Functions"
++
++.in +1c
++.ti -1c
++.RI "\fBKComboBoxWidget\fP (QWidget *parent=nullptr)"
++.br
++.ti -1c
++.RI "void \fBsetStringList\fP (QStringList list)"
++.br
++.RI "设置combobox的选项列表 "
++.ti -1c
++.RI "QStringList \fBgetChosenList\fP ()"
++.br
++.RI "获取选中的列表 "
++.ti -1c
++.RI "void \fBsetMainText\fP (QString text)"
++.br
++.RI "设置主文本 "
++.ti -1c
++.RI "QMenu * \fBmenu\fP ()"
++.br
++.RI "获取弹出菜单 "
++.in -1c
++.SS "Protected Member Functions"
++
++.in +1c
++.ti -1c
++.RI "void \fBmouseReleaseEvent\fP (QMouseEvent *event)"
++.br
++.ti -1c
++.RI "void \fBmousePressEvent\fP (QMouseEvent *event)"
++.br
++.ti -1c
++.RI "void \fBleaveEvent\fP (QEvent *e)"
++.br
++.ti -1c
++.RI "void \fBenterEvent\fP (QEvent *e)"
++.br
++.ti -1c
++.RI "void \fBpaintEvent\fP (QPaintEvent *event)"
++.br
++.in -1c
++.SH "Member Function Documentation"
++.PP 
++.SS "QStringList kdk::KComboBoxWidget::getChosenList ()"
++
++.PP
++获取选中的列表 
++.PP
++\fBReturns\fP
++.RS 4
++
++.RE
++.PP
++
++.SS "QMenu* kdk::KComboBoxWidget::menu ()"
++
++.PP
++获取弹出菜单 
++.PP
++\fBReturns\fP
++.RS 4
++
++.RE
++.PP
++
++.SS "void kdk::KComboBoxWidget::setMainText (QString text)"
++
++.PP
++设置主文本 
++.PP
++\fBParameters\fP
++.RS 4
++\fItext\fP 
++.RE
++.PP
++
++.SS "void kdk::KComboBoxWidget::setStringList (QStringList list)"
++
++.PP
++设置combobox的选项列表 
++.PP
++\fBParameters\fP
++.RS 4
++\fIlist\fP 
++.RE
++.PP
++
++
++.SH "Author"
++.PP 
++Generated automatically by Doxygen for LIBKYSDK-APPLICATIONS from the source code\&.
+diff --git a/doxygen/man/man3/kdk_KCommentPanel.3 b/doxygen/man/man3/kdk_KCommentPanel.3
+index 9f90157..bb0acd4 100644
+--- a/doxygen/man/man3/kdk_KCommentPanel.3
++++ b/doxygen/man/man3/kdk_KCommentPanel.3
+@@ -1,4 +1,4 @@
+-.TH "kdk::KCommentPanel" 3 "Thu Oct 12 2023" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.TH "kdk::KCommentPanel" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
+ .ad l
+ .nh
+ .SH NAME
+diff --git a/doxygen/man/man3/kdk_KCrumb.3 b/doxygen/man/man3/kdk_KCrumb.3
+new file mode 100644
+index 0000000..d9eebad
+--- /dev/null
++++ b/doxygen/man/man3/kdk_KCrumb.3
+@@ -0,0 +1,226 @@
++.TH "kdk::KCrumb" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.ad l
++.nh
++.SH NAME
++kdk::KCrumb \- 面包屑控件  
++
++.SH SYNOPSIS
++.br
++.PP
++.PP
++\fC#include <kcrumb\&.h>\fP
++.PP
++Inherits \fBKCustomTabBar\fP\&.
++.SS "Public Slots"
++
++.in +1c
++.ti -1c
++.RI "void \fBleftScroll\fP ()"
++.br
++.ti -1c
++.RI "void \fBrightScroll\fP ()"
++.br
++.in -1c
++.SS "Public Member Functions"
++
++.in +1c
++.ti -1c
++.RI "\fBKCrumb\fP (QWidget *parent=nullptr)"
++.br
++.ti -1c
++.RI "int \fBaddTab\fP (const QString &text)"
++.br
++.RI "添加tab "
++.ti -1c
++.RI "int \fBaddTab\fP (const QIcon &\fBicon\fP, const QString &text)"
++.br
++.RI "添加tab "
++.ti -1c
++.RI "int \fBinsertTab\fP (int index, const QString &text)"
++.br
++.RI "在index位置插入tab "
++.ti -1c
++.RI "int \fBinsertTab\fP (int index, const QIcon &\fBicon\fP, const QString &text)"
++.br
++.RI "在index位置插入tab "
++.ti -1c
++.RI "void \fBremoveTab\fP (int index)"
++.br
++.RI "删除index位置的tab "
++.ti -1c
++.RI "void \fBmoveTab\fP (int from, int to)"
++.br
++.RI "将from位置tab移至to位置 "
++.ti -1c
++.RI "void \fBsetIcon\fP (const QIcon &\fBicon\fP)"
++.br
++.RI "设置图标 "
++.ti -1c
++.RI "QIcon \fBicon\fP () const"
++.br
++.RI "获取图标 "
++.ti -1c
++.RI "bool \fBisFlat\fP () const"
++.br
++.RI "返回按钮边框是否凸起 "
++.ti -1c
++.RI "void \fBsetFlat\fP (bool flat)"
++.br
++.RI "设置按钮边框是否凸起 "
++.in -1c
++.SS "Protected Member Functions"
++
++.in +1c
++.ti -1c
++.RI "QSize \fBtabSizeHint\fP (int index) const"
++.br
++.ti -1c
++.RI "void \fBpaintEvent\fP (QPaintEvent *event)"
++.br
++.in -1c
++.SS "Additional Inherited Members"
++.SH "Detailed Description"
++.PP 
++面包屑控件 
++.SH "Member Function Documentation"
++.PP 
++.SS "int kdk::KCrumb::addTab (const QIcon & icon, const QString & text)"
++
++.PP
++添加tab 
++.PP
++\fBParameters\fP
++.RS 4
++\fIicon\fP 
++.br
++\fItext\fP 
++.RE
++.PP
++\fBReturns\fP
++.RS 4
++.RE
++.PP
++
++.SS "int kdk::KCrumb::addTab (const QString & text)"
++
++.PP
++添加tab 
++.PP
++\fBParameters\fP
++.RS 4
++\fItext\fP 
++.RE
++.PP
++\fBReturns\fP
++.RS 4
++.RE
++.PP
++
++.SS "QIcon kdk::KCrumb::icon () const"
++
++.PP
++获取图标 
++.PP
++\fBReturns\fP
++.RS 4
++
++.RE
++.PP
++
++.SS "int kdk::KCrumb::insertTab (int index, const QIcon & icon, const QString & text)"
++
++.PP
++在index位置插入tab 
++.PP
++\fBParameters\fP
++.RS 4
++\fIindex\fP 
++.br
++\fIicon\fP 
++.br
++\fItext\fP 
++.RE
++.PP
++\fBReturns\fP
++.RS 4
++.RE
++.PP
++
++.SS "int kdk::KCrumb::insertTab (int index, const QString & text)"
++
++.PP
++在index位置插入tab 
++.PP
++\fBParameters\fP
++.RS 4
++\fIindex\fP 
++.br
++\fItext\fP 
++.RE
++.PP
++\fBReturns\fP
++.RS 4
++.RE
++.PP
++
++.SS "bool kdk::KCrumb::isFlat () const"
++
++.PP
++返回按钮边框是否凸起 
++.PP
++\fBReturns\fP
++.RS 4
++
++.RE
++.PP
++
++.SS "void kdk::KCrumb::moveTab (int from, int to)"
++
++.PP
++将from位置tab移至to位置 
++.PP
++\fBParameters\fP
++.RS 4
++\fIfrom\fP 
++.br
++\fIto\fP 
++.RE
++.PP
++
++.SS "void kdk::KCrumb::removeTab (int index)"
++
++.PP
++删除index位置的tab 
++.PP
++\fBParameters\fP
++.RS 4
++\fIindex\fP 
++.RE
++.PP
++
++.SS "void kdk::KCrumb::setFlat (bool flat)"
++
++.PP
++设置按钮边框是否凸起 
++.PP
++\fBParameters\fP
++.RS 4
++\fIflat\fP 
++.RE
++.PP
++
++.SS "void kdk::KCrumb::setIcon (const QIcon & icon)"
++
++.PP
++设置图标 
++.PP
++\fBParameters\fP
++.RS 4
++\fIicon\fP 
++.RE
++.PP
++
++
++.SH "Author"
++.PP 
++Generated automatically by Doxygen for LIBKYSDK-APPLICATIONS from the source code\&.
+diff --git a/doxygen/man/man3/kdk_KCustomDateEdit.3 b/doxygen/man/man3/kdk_KCustomDateEdit.3
+new file mode 100644
+index 0000000..5b0a3f0
+--- /dev/null
++++ b/doxygen/man/man3/kdk_KCustomDateEdit.3
+@@ -0,0 +1,77 @@
++.TH "kdk::KCustomDateEdit" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.ad l
++.nh
++.SH NAME
++kdk::KCustomDateEdit
++.SH SYNOPSIS
++.br
++.PP
++.PP
++Inherits QDateTimeEdit\&.
++.SS "Signals"
++
++.in +1c
++.ti -1c
++.RI "void \fBchangeDate\fP ()"
++.br
++.in -1c
++.SS "Public Member Functions"
++
++.in +1c
++.ti -1c
++.RI "\fBKCustomDateEdit\fP (QWidget *parent=nullptr)"
++.br
++.ti -1c
++.RI "void \fBshowCalendar\fP ()"
++.br
++.RI "触发日历控件显示 "
++.ti -1c
++.RI "void \fBsetShowLunar\fP (bool showLunar)"
++.br
++.RI "是否显示农历 "
++.ti -1c
++.RI "void \fBupdateStyle\fP (bool isDark)"
++.br
++.RI "适应系统风格 "
++.in -1c
++.SS "Protected Member Functions"
++
++.in +1c
++.ti -1c
++.RI "void \fBmousePressEvent\fP (QMouseEvent *event) override"
++.br
++.ti -1c
++.RI "void \fBpaintEvent\fP (QPaintEvent *e) override"
++.br
++.ti -1c
++.RI "bool \fBeventFilter\fP (QObject *obj, QEvent *event) override"
++.br
++.in -1c
++.SH "Member Function Documentation"
++.PP 
++.SS "void kdk::KCustomDateEdit::setShowLunar (bool showLunar)"
++
++.PP
++是否显示农历 
++.PP
++\fBParameters\fP
++.RS 4
++\fIshowLunar\fP 
++.RE
++.PP
++
++.SS "void kdk::KCustomDateEdit::updateStyle (bool isDark)"
++
++.PP
++适应系统风格 
++.PP
++\fBParameters\fP
++.RS 4
++\fIisDark:是否深色模式\fP 
++.RE
++.PP
++
++
++.SH "Author"
++.PP 
++Generated automatically by Doxygen for LIBKYSDK-APPLICATIONS from the source code\&.
+diff --git a/doxygen/man/man3/kdk_KDialog.3 b/doxygen/man/man3/kdk_KDialog.3
+index db2446b..e6a841c 100644
+--- a/doxygen/man/man3/kdk_KDialog.3
++++ b/doxygen/man/man3/kdk_KDialog.3
+@@ -1,4 +1,4 @@
+-.TH "kdk::KDialog" 3 "Thu Oct 12 2023" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.TH "kdk::KDialog" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
+ .ad l
+ .nh
+ .SH NAME
+@@ -12,7 +12,7 @@ kdk::KDialog \- 继承自 QDialog,支持响应式主题背景切换和图标
+ .PP
+ Inherits QDialog, and ThemeController\&.
+ .PP
+-Inherited by \fBkdk::KAboutDialog\fP, \fBkdk::KInputDialog\fP, \fBkdk::KMessageBox\fP, \fBkdk::KProgressDialog\fP, and \fBkdk::KUninstallDialog\fP\&.
++Inherited by \fBkdk::KAboutDialog\fP, \fBkdk::KInputDialog\fP, \fBkdk::KMessageBox\fP, \fBkdk::KProgressDialog\fP, \fBkdk::KSecurityQuestionDialog\fP, and \fBkdk::KUninstallDialog\fP\&.
+ .SS "Public Member Functions"
+ 
+ .in +1c
+@@ -51,6 +51,12 @@ Inherited by \fBkdk::KAboutDialog\fP, \fBkdk::KInputDialog\fP, \fBkdk::KMessageB
+ .RI "QWidget * \fBmainWidget\fP ()"
+ .br
+ .RI "获取主内容区Widget "
++.ti -1c
++.RI "\fBKWindowButtonBar\fP * \fBwindowButtonBar\fP ()"
++.br
++.ti -1c
++.RI "\fBKIconBar\fP * \fBiconBar\fP ()"
++.br
+ .in -1c
+ .SS "Protected Member Functions"
+ 
+diff --git a/doxygen/man/man3/kdk_KDirTabBar.3 b/doxygen/man/man3/kdk_KDirTabBar.3
+new file mode 100644
+index 0000000..fbc4a35
+--- /dev/null
++++ b/doxygen/man/man3/kdk_KDirTabBar.3
+@@ -0,0 +1,183 @@
++.TH "kdk::KDirTabBar" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.ad l
++.nh
++.SH NAME
++kdk::KDirTabBar
++.SH SYNOPSIS
++.br
++.PP
++.PP
++Inherits QWidget\&.
++.SS "Signals"
++
++.in +1c
++.ti -1c
++.RI "void \fBtabBarClicked\fP (const QString uri)"
++.br
++.in -1c
++.SS "Public Member Functions"
++
++.in +1c
++.ti -1c
++.RI "\fBKDirTabBar\fP (QWidget *parent=nullptr)"
++.br
++.ti -1c
++.RI "void \fBsetCurrentPath\fP (const QString Dirpath)"
++.br
++.RI "设置目标路径 "
++.ti -1c
++.RI "QString \fBcurrentPath\fP () const"
++.br
++.RI "获取目标路径 "
++.ti -1c
++.RI "void \fBsetVisibleDepth\fP (const int depth)"
++.br
++.RI "设置tabbar显示个数 "
++.ti -1c
++.RI "int \fBvisibleDepth\fP ()"
++.br
++.RI "获取tabbar显示个数 "
++.ti -1c
++.RI "void \fBsetIcon\fP (int index, const QIcon &\fBicon\fP)"
++.br
++.RI "设置图标 "
++.ti -1c
++.RI "QIcon \fBicon\fP (int index)"
++.br
++.RI "获取图标 "
++.ti -1c
++.RI "void \fBsetRootPath\fP (const QString targetPath)"
++.br
++.RI "设置Root "
++.ti -1c
++.RI "QString \fBRootPath\fP ()"
++.br
++.RI "获取Root路径 "
++.ti -1c
++.RI "void \fBsetTextLength\fP (int length)"
++.br
++.RI "设置按钮显示字体长度 "
++.ti -1c
++.RI "int \fBtextLength\fP ()"
++.br
++.RI "返回字体显示长度 "
++.ti -1c
++.RI "QList< QToolButton * > \fBbuttons\fP ()"
++.br
++.in -1c
++.SH "Member Function Documentation"
++.PP 
++.SS "QString kdk::KDirTabBar::currentPath () const"
++
++.PP
++获取目标路径 
++.PP
++\fBReturns\fP
++.RS 4
++QString 
++.RE
++.PP
++
++.SS "QIcon kdk::KDirTabBar::icon (int index)"
++
++.PP
++获取图标 
++.PP
++\fBReturns\fP
++.RS 4
++QIcon 
++.RE
++.PP
++
++.SS "QString kdk::KDirTabBar::RootPath ()"
++
++.PP
++获取Root路径 
++.PP
++\fBReturns\fP
++.RS 4
++QString 
++.RE
++.PP
++
++.SS "void kdk::KDirTabBar::setCurrentPath (const QString Dirpath)"
++
++.PP
++设置目标路径 
++.PP
++\fBParameters\fP
++.RS 4
++\fIpath\fP 
++.RE
++.PP
++
++.SS "void kdk::KDirTabBar::setIcon (int index, const QIcon & icon)"
++
++.PP
++设置图标 
++.PP
++\fBParameters\fP
++.RS 4
++\fIicon\fP 
++.RE
++.PP
++
++.SS "void kdk::KDirTabBar::setRootPath (const QString targetPath)"
++
++.PP
++设置Root 
++.PP
++\fBParameters\fP
++.RS 4
++\fI\fP 
++.RE
++.PP
++
++.SS "void kdk::KDirTabBar::setTextLength (int length)"
++
++.PP
++设置按钮显示字体长度 
++.PP
++\fBParameters\fP
++.RS 4
++\fIint\fP 
++.RE
++.PP
++
++.SS "void kdk::KDirTabBar::setVisibleDepth (const int depth)"
++
++.PP
++设置tabbar显示个数 
++.PP
++\fBParameters\fP
++.RS 4
++\fIint\fP 
++.RE
++.PP
++
++.SS "int kdk::KDirTabBar::textLength ()"
++
++.PP
++返回字体显示长度 
++.PP
++\fBReturns\fP
++.RS 4
++int 
++.RE
++.PP
++
++.SS "int kdk::KDirTabBar::visibleDepth ()"
++
++.PP
++获取tabbar显示个数 
++.PP
++\fBReturns\fP
++.RS 4
++int 
++.RE
++.PP
++
++
++.SH "Author"
++.PP 
++Generated automatically by Doxygen for LIBKYSDK-APPLICATIONS from the source code\&.
+diff --git a/doxygen/man/man3/kdk_KDragWidget.3 b/doxygen/man/man3/kdk_KDragWidget.3
+index 800b1be..1e64331 100644
+--- a/doxygen/man/man3/kdk_KDragWidget.3
++++ b/doxygen/man/man3/kdk_KDragWidget.3
+@@ -1,4 +1,4 @@
+-.TH "kdk::KDragWidget" 3 "Thu Oct 12 2023" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.TH "kdk::KDragWidget" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
+ .ad l
+ .nh
+ .SH NAME
+diff --git a/doxygen/man/man3/kdk_KFileWidget.3 b/doxygen/man/man3/kdk_KFileWidget.3
+new file mode 100644
+index 0000000..545dd3a
+--- /dev/null
++++ b/doxygen/man/man3/kdk_KFileWidget.3
+@@ -0,0 +1,136 @@
++.TH "kdk::KFileWidget" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.ad l
++.nh
++.SH NAME
++kdk::KFileWidget \- The \fBKFileWidget\fP class\&.  
++
++.SH SYNOPSIS
++.br
++.PP
++.PP
++\fC#include <kfilewidget\&.h>\fP
++.PP
++Inherits QWidget\&.
++.SS "Signals"
++
++.in +1c
++.ti -1c
++.RI "void \fBclicked\fP ()"
++.br
++.in -1c
++.SS "Public Member Functions"
++
++.in +1c
++.ti -1c
++.RI "\fBKFileWidget\fP (QWidget *parent=nullptr)"
++.br
++.ti -1c
++.RI "void \fBsetMainText\fP (QString str)"
++.br
++.RI "设置主要文本 "
++.ti -1c
++.RI "void \fBsetSubText\fP (QString str)"
++.br
++.RI "设置次级文本 "
++.ti -1c
++.RI "void \fBsetIcon\fP (QIcon icon)"
++.br
++.RI "设置图片 "
++.ti -1c
++.RI "void \fBsetBorderRadius\fP (int radius)"
++.br
++.RI "设置圆角 "
++.ti -1c
++.RI "void \fBsetBorderRadius\fP (int bottomLeft, int topLeft, int topRight, int bottomRight)"
++.br
++.RI "设置圆角 "
++.in -1c
++.SS "Protected Member Functions"
++
++.in +1c
++.ti -1c
++.RI "void \fBpaintEvent\fP (QPaintEvent *event)"
++.br
++.ti -1c
++.RI "bool \fBeventFilter\fP (QObject *watched, QEvent *event)"
++.br
++.in -1c
++.SH "Detailed Description"
++.PP 
++The \fBKFileWidget\fP class\&. 
++
++
++.PP
++\fBSince\fP
++.RS 4
++2\&.4 
++.RE
++.PP
++
++.SH "Member Function Documentation"
++.PP 
++.SS "void kdk::KFileWidget::setBorderRadius (int bottomLeft, int topLeft, int topRight, int bottomRight)"
++
++.PP
++设置圆角 
++.PP
++\fBParameters\fP
++.RS 4
++\fIbottomLeft\fP 
++.br
++\fItopLeft\fP 
++.br
++\fItopRight\fP 
++.br
++\fIbottomRight\fP 
++.RE
++.PP
++
++.SS "void kdk::KFileWidget::setBorderRadius (int radius)"
++
++.PP
++设置圆角 
++.PP
++\fBParameters\fP
++.RS 4
++\fIradius\fP 
++.RE
++.PP
++
++.SS "void kdk::KFileWidget::setIcon (QIcon icon)"
++
++.PP
++设置图片 
++.PP
++\fBParameters\fP
++.RS 4
++\fIicon\fP 
++.RE
++.PP
++
++.SS "void kdk::KFileWidget::setMainText (QString str)"
++
++.PP
++设置主要文本 
++.PP
++\fBParameters\fP
++.RS 4
++\fIstr\fP 
++.RE
++.PP
++
++.SS "void kdk::KFileWidget::setSubText (QString str)"
++
++.PP
++设置次级文本 
++.PP
++\fBParameters\fP
++.RS 4
++\fIstr\fP 
++.RE
++.PP
++
++
++.SH "Author"
++.PP 
++Generated automatically by Doxygen for LIBKYSDK-APPLICATIONS from the source code\&.
+diff --git a/doxygen/man/man3/kdk_KHLineFrame.3 b/doxygen/man/man3/kdk_KHLineFrame.3
+index c272c55..dc56664 100644
+--- a/doxygen/man/man3/kdk_KHLineFrame.3
++++ b/doxygen/man/man3/kdk_KHLineFrame.3
+@@ -1,4 +1,4 @@
+-.TH "kdk::KHLineFrame" 3 "Thu Oct 12 2023" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.TH "kdk::KHLineFrame" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
+ .ad l
+ .nh
+ .SH NAME
+@@ -14,7 +14,29 @@ Inherits QFrame\&.
+ .ti -1c
+ .RI "\fBKHLineFrame\fP (QWidget *parent=nullptr)"
+ .br
++.ti -1c
++.RI "void \fBsetFollowPalette\fP (bool flag)"
++.br
++.RI "设置是否遵循默认色板 "
+ .in -1c
++.SH "Member Function Documentation"
++.PP 
++.SS "void kdk::KHLineFrame::setFollowPalette (bool flag)"
++
++.PP
++设置是否遵循默认色板 
++.PP
++\fBParameters\fP
++.RS 4
++\fIflag\fP 
++.RE
++.PP
++\fBSince\fP
++.RS 4
++2\&.4 
++.RE
++.PP
++
+ 
+ .SH "Author"
+ .PP 
+diff --git a/doxygen/man/man3/kdk_KIconBar.3 b/doxygen/man/man3/kdk_KIconBar.3
+index 5e1682b..ff0b517 100644
+--- a/doxygen/man/man3/kdk_KIconBar.3
++++ b/doxygen/man/man3/kdk_KIconBar.3
+@@ -1,4 +1,4 @@
+-.TH "kdk::KIconBar" 3 "Thu Oct 12 2023" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.TH "kdk::KIconBar" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
+ .ad l
+ .nh
+ .SH NAME
+diff --git a/doxygen/man/man3/kdk_KInputDialog.3 b/doxygen/man/man3/kdk_KInputDialog.3
+index 319d7b4..b2f8838 100644
+--- a/doxygen/man/man3/kdk_KInputDialog.3
++++ b/doxygen/man/man3/kdk_KInputDialog.3
+@@ -1,4 +1,4 @@
+-.TH "kdk::KInputDialog" 3 "Thu Oct 12 2023" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.TH "kdk::KInputDialog" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
+ .ad l
+ .nh
+ .SH NAME
+diff --git a/doxygen/man/man3/kdk_KIntroWidget.3 b/doxygen/man/man3/kdk_KIntroWidget.3
+new file mode 100644
+index 0000000..c1e76d7
+--- /dev/null
++++ b/doxygen/man/man3/kdk_KIntroWidget.3
+@@ -0,0 +1,145 @@
++.TH "kdk::KIntroWidget" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.ad l
++.nh
++.SH NAME
++kdk::KIntroWidget
++.SH SYNOPSIS
++.br
++.PP
++.PP
++Inherits QWidget\&.
++.SS "Signals"
++
++.in +1c
++.ti -1c
++.RI "void \fBrightClick\fP (QPoint point)"
++.br
++.in -1c
++.SS "Public Member Functions"
++
++.in +1c
++.ti -1c
++.RI "\fBKIntroWidget\fP (QWidget *parent=nullptr)"
++.br
++.ti -1c
++.RI "void \fBsetViewType\fP (ViewType type)"
++.br
++.RI "设置视图样式 "
++.ti -1c
++.RI "void \fBsetMainLabel\fP (QString str)"
++.br
++.RI "设置主文本 "
++.ti -1c
++.RI "void \fBsetSubLabel\fP (QString str)"
++.br
++.RI "设置次级文本 "
++.ti -1c
++.RI "void \fBsetBorderRadius\fP (int radius)"
++.br
++.RI "设置圆角 "
++.ti -1c
++.RI "void \fBsetBorderRadius\fP (int bottomLeft, int topLeft, int topRight, int bottomRight)"
++.br
++.RI "设置圆角 "
++.ti -1c
++.RI "void \fBsetTitleColor\fP (QColor color)"
++.br
++.RI "设置标题颜色 "
++.in -1c
++.SS "Protected Member Functions"
++
++.in +1c
++.ti -1c
++.RI "void \fBpaintEvent\fP (QPaintEvent *event)"
++.br
++.ti -1c
++.RI "bool \fBeventFilter\fP (QObject *watched, QEvent *event)"
++.br
++.ti -1c
++.RI "QSize \fBsizeHint\fP () const override"
++.br
++.ti -1c
++.RI "void \fBmousePressEvent\fP (QMouseEvent *event)"
++.br
++.ti -1c
++.RI "void \fBmouseReleaseEvent\fP (QMouseEvent *event)"
++.br
++.in -1c
++.SH "Member Function Documentation"
++.PP 
++.SS "void kdk::KIntroWidget::setBorderRadius (int bottomLeft, int topLeft, int topRight, int bottomRight)"
++
++.PP
++设置圆角 
++.PP
++\fBParameters\fP
++.RS 4
++\fIbottomLeft\fP 
++.br
++\fItopLeft\fP 
++.br
++\fItopRight\fP 
++.br
++\fIbottomRight\fP 
++.RE
++.PP
++
++.SS "void kdk::KIntroWidget::setBorderRadius (int radius)"
++
++.PP
++设置圆角 
++.PP
++\fBParameters\fP
++.RS 4
++\fIradius\fP 
++.RE
++.PP
++
++.SS "void kdk::KIntroWidget::setMainLabel (QString str)"
++
++.PP
++设置主文本 
++.PP
++\fBParameters\fP
++.RS 4
++\fIstr\fP 
++.RE
++.PP
++
++.SS "void kdk::KIntroWidget::setSubLabel (QString str)"
++
++.PP
++设置次级文本 
++.PP
++\fBParameters\fP
++.RS 4
++\fIstr\fP 
++.RE
++.PP
++
++.SS "void kdk::KIntroWidget::setTitleColor (QColor color)"
++
++.PP
++设置标题颜色 
++.PP
++\fBParameters\fP
++.RS 4
++\fIcolor\fP 
++.RE
++.PP
++
++.SS "void kdk::KIntroWidget::setViewType (ViewType type)"
++
++.PP
++设置视图样式 
++.PP
++\fBParameters\fP
++.RS 4
++\fItype\fP 
++.RE
++.PP
++
++
++.SH "Author"
++.PP 
++Generated automatically by Doxygen for LIBKYSDK-APPLICATIONS from the source code\&.
+diff --git a/doxygen/man/man3/kdk_KItemWidget.3 b/doxygen/man/man3/kdk_KItemWidget.3
+index 1cdad79..95f87ce 100644
+--- a/doxygen/man/man3/kdk_KItemWidget.3
++++ b/doxygen/man/man3/kdk_KItemWidget.3
+@@ -1,4 +1,4 @@
+-.TH "kdk::KItemWidget" 3 "Thu Oct 12 2023" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.TH "kdk::KItemWidget" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
+ .ad l
+ .nh
+ .SH NAME
+diff --git a/doxygen/man/man3/kdk_KLabel.3 b/doxygen/man/man3/kdk_KLabel.3
+new file mode 100644
+index 0000000..525db9c
+--- /dev/null
++++ b/doxygen/man/man3/kdk_KLabel.3
+@@ -0,0 +1,263 @@
++.TH "kdk::KLabel" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.ad l
++.nh
++.SH NAME
++kdk::KLabel \- 继承qlabel  
++
++.SH SYNOPSIS
++.br
++.PP
++.PP
++\fC#include <klabel\&.h>\fP
++.PP
++Inherits QLabel\&.
++.SS "Public Member Functions"
++
++.in +1c
++.ti -1c
++.RI "\fBKLabel\fP (QWidget *parent=nullptr)"
++.br
++.ti -1c
++.RI "void \fBsetLabelType\fP (KLabelType type=KLabelType::DataType)"
++.br
++.RI "设置label类型,NormalType和IconAndTextType "
++.ti -1c
++.RI "void \fBsetDataHightColor\fP (bool flag)"
++.br
++.RI "设置是否启用文本/图标高亮色 "
++.ti -1c
++.RI "void \fBsetPixmap\fP (const QPixmap &\fBpixmap\fP)"
++.br
++.RI "设置图标pixmap "
++.ti -1c
++.RI "const QPixmap * \fBpixmap\fP () const"
++.br
++.RI "获取图标 "
++.ti -1c
++.RI "void \fBsetText\fP (const QString &str)"
++.br
++.RI "设置文本 "
++.ti -1c
++.RI "QString \fBtext\fP ()"
++.br
++.RI "获取文本 "
++.ti -1c
++.RI "void \fBsetBackgroundColor\fP (bool flag, QColor color=Qt::white)"
++.br
++.RI "设置背景颜色 "
++.ti -1c
++.RI "void \fBsetHighlightBackground\fP (bool flag)"
++.br
++.RI "设置是否启用背景高亮色 "
++.ti -1c
++.RI "void \fBsetBorderRadius\fP (int bottomLeft, int topLeft, int topRight, int bottomRight)"
++.br
++.RI "设置圆角 "
++.ti -1c
++.RI "void \fBsetBorderRadius\fP (int radius)"
++.br
++.RI "设置圆角 "
++.ti -1c
++.RI "void \fBsetWordWrap\fP (bool flag)"
++.br
++.RI "设置是否启用换行 "
++.ti -1c
++.RI "bool \fBwordWrap\fP ()"
++.br
++.RI "获取是否启用换行 "
++.ti -1c
++.RI "void \fBsetFontColor\fP (QColor color)"
++.br
++.in -1c
++.SS "Protected Member Functions"
++
++.in +1c
++.ti -1c
++.RI "void \fBpaintEvent\fP (QPaintEvent *event)"
++.br
++.ti -1c
++.RI "QSize \fBsizeHint\fP () const"
++.br
++.ti -1c
++.RI "void \fBresizeEvent\fP (QResizeEvent *event)"
++.br
++.in -1c
++.SH "Detailed Description"
++.PP 
++继承qlabel 
++
++
++.PP
++\fBSince\fP
++.RS 4
++2\&.4 
++.RE
++.PP
++
++.SH "Member Function Documentation"
++.PP 
++.SS "const QPixmap* kdk::KLabel::pixmap () const"
++
++.PP
++获取图标 
++.PP
++\fBReturns\fP
++.RS 4
++
++.RE
++.PP
++
++.SS "void kdk::KLabel::setBackgroundColor (bool flag, QColor color = \fCQt::white\fP)"
++
++.PP
++设置背景颜色 
++.PP
++\fBParameters\fP
++.RS 4
++\fIflag\fP 
++.RE
++.PP
++
++.SS "void kdk::KLabel::setBorderRadius (int bottomLeft, int topLeft, int topRight, int bottomRight)"
++
++.PP
++设置圆角 
++.PP
++\fBParameters\fP
++.RS 4
++\fIbottomLeft\fP 
++.br
++\fItopLeft\fP 
++.br
++\fItopRight\fP 
++.br
++\fIbottomRight\fP 
++.RE
++.PP
++
++.SS "void kdk::KLabel::setBorderRadius (int radius)"
++
++.PP
++设置圆角 
++.PP
++\fBParameters\fP
++.RS 4
++\fIradius\fP 
++.RE
++.PP
++
++.SS "void kdk::KLabel::setDataHightColor (bool flag)"
++
++.PP
++设置是否启用文本/图标高亮色 
++.PP
++\fBParameters\fP
++.RS 4
++\fIflag\fP 
++.RE
++.PP
++
++.SS "void kdk::KLabel::setHighlightBackground (bool flag)"
++
++.PP
++设置是否启用背景高亮色 
++.PP
++\fBSince\fP
++.RS 4
++2\&.5 
++.RE
++.PP
++\fBParameters\fP
++.RS 4
++\fIflag\fP 
++.RE
++.PP
++
++.SS "void kdk::KLabel::setLabelType (KLabelType type = \fCKLabelType::DataType\fP)"
++
++.PP
++设置label类型,NormalType和IconAndTextType 
++.PP
++\fBParameters\fP
++.RS 4
++\fItype\fP 
++.RE
++.PP
++
++.SS "void kdk::KLabel::setPixmap (const QPixmap & pixmap)"
++
++.PP
++设置图标pixmap 
++.PP
++\fBParameters\fP
++.RS 4
++\fIpixmap\fP 
++.RE
++.PP
++
++.SS "void kdk::KLabel::setText (const QString & str)"
++
++.PP
++设置文本 
++.PP
++\fBSince\fP
++.RS 4
++2\&.5 
++.RE
++.PP
++\fBParameters\fP
++.RS 4
++\fIstr\fP 
++.RE
++.PP
++
++.SS "void kdk::KLabel::setWordWrap (bool flag)"
++
++.PP
++设置是否启用换行 
++.PP
++\fBSince\fP
++.RS 4
++2\&.5 
++.RE
++.PP
++\fBParameters\fP
++.RS 4
++\fIflag\fP 
++.RE
++.PP
++
++.SS "QString kdk::KLabel::text ()"
++
++.PP
++获取文本 
++.PP
++\fBSince\fP
++.RS 4
++2\&.5 
++.RE
++.PP
++\fBReturns\fP
++.RS 4
++.RE
++.PP
++
++.SS "bool kdk::KLabel::wordWrap ()"
++
++.PP
++获取是否启用换行 
++.PP
++\fBSince\fP
++.RS 4
++2\&.5 
++.RE
++.PP
++\fBReturns\fP
++.RS 4
++.RE
++.PP
++
++
++.SH "Author"
++.PP 
++Generated automatically by Doxygen for LIBKYSDK-APPLICATIONS from the source code\&.
+diff --git a/doxygen/man/man3/kdk_KLineEdit.3 b/doxygen/man/man3/kdk_KLineEdit.3
+new file mode 100644
+index 0000000..85c8b54
+--- /dev/null
++++ b/doxygen/man/man3/kdk_KLineEdit.3
+@@ -0,0 +1,48 @@
++.TH "kdk::KLineEdit" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.ad l
++.nh
++.SH NAME
++kdk::KLineEdit
++.SH SYNOPSIS
++.br
++.PP
++.PP
++Inherits QLineEdit\&.
++.SS "Public Member Functions"
++
++.in +1c
++.ti -1c
++.RI "\fBKLineEdit\fP (QWidget *parent=nullptr)"
++.br
++.ti -1c
++.RI "QPushButton * \fBpushbutton\fP ()"
++.br
++.RI "获取按钮 "
++.in -1c
++.SS "Protected Member Functions"
++
++.in +1c
++.ti -1c
++.RI "void \fBresizeEvent\fP (QResizeEvent *event)"
++.br
++.ti -1c
++.RI "bool \fBeventFilter\fP (QObject *watched, QEvent *event)"
++.br
++.in -1c
++.SH "Member Function Documentation"
++.PP 
++.SS "QPushButton* kdk::KLineEdit::pushbutton ()"
++
++.PP
++获取按钮 
++.PP
++\fBReturns\fP
++.RS 4
++
++.RE
++.PP
++
++
++.SH "Author"
++.PP 
++Generated automatically by Doxygen for LIBKYSDK-APPLICATIONS from the source code\&.
+diff --git a/doxygen/man/man3/kdk_KListView.3 b/doxygen/man/man3/kdk_KListView.3
+index 8c52975..60ca505 100644
+--- a/doxygen/man/man3/kdk_KListView.3
++++ b/doxygen/man/man3/kdk_KListView.3
+@@ -1,4 +1,4 @@
+-.TH "kdk::KListView" 3 "Thu Oct 12 2023" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.TH "kdk::KListView" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
+ .ad l
+ .nh
+ .SH NAME
+diff --git a/doxygen/man/man3/kdk_KListViewDelegate.3 b/doxygen/man/man3/kdk_KListViewDelegate.3
+index bcb0eec..14bf0c8 100644
+--- a/doxygen/man/man3/kdk_KListViewDelegate.3
++++ b/doxygen/man/man3/kdk_KListViewDelegate.3
+@@ -1,4 +1,4 @@
+-.TH "kdk::KListViewDelegate" 3 "Thu Oct 12 2023" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.TH "kdk::KListViewDelegate" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
+ .ad l
+ .nh
+ .SH NAME
+diff --git a/doxygen/man/man3/kdk_KListWidget.3 b/doxygen/man/man3/kdk_KListWidget.3
+index 5e5aeb4..5b928d9 100644
+--- a/doxygen/man/man3/kdk_KListWidget.3
++++ b/doxygen/man/man3/kdk_KListWidget.3
+@@ -1,4 +1,4 @@
+-.TH "kdk::KListWidget" 3 "Thu Oct 12 2023" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.TH "kdk::KListWidget" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
+ .ad l
+ .nh
+ .SH NAME
+diff --git a/doxygen/man/man3/kdk_KLoopPlayPage.3 b/doxygen/man/man3/kdk_KLoopPlayPage.3
+new file mode 100644
+index 0000000..e6bb6ae
+--- /dev/null
++++ b/doxygen/man/man3/kdk_KLoopPlayPage.3
+@@ -0,0 +1,154 @@
++.TH "kdk::KLoopPlayPage" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.ad l
++.nh
++.SH NAME
++kdk::KLoopPlayPage \- FormModule\&.  
++
++.SH SYNOPSIS
++.br
++.PP
++.PP
++\fC#include <kloopplaypage\&.h>\fP
++.PP
++Inherits QWidget\&.
++.SS "Signals"
++
++.in +1c
++.ti -1c
++.RI "void \fBleftClick\fP ()"
++.br
++.ti -1c
++.RI "void \fBcenterClick\fP ()"
++.br
++.ti -1c
++.RI "void \fBrightClick\fP ()"
++.br
++.in -1c
++.SS "Public Member Functions"
++
++.in +1c
++.ti -1c
++.RI "\fBKLoopPlayPage\fP (QWidget *parent=nullptr)"
++.br
++.ti -1c
++.RI "void \fBaddWidget\fP (QWidget *widget)"
++.br
++.RI "添加widget "
++.ti -1c
++.RI "void \fBremoveWidget\fP (QWidget *widget)"
++.br
++.RI "删除widget "
++.ti -1c
++.RI "void \fBsetCurrentWidget\fP (int i)"
++.br
++.RI "设置当前中心界面 "
++.ti -1c
++.RI "int \fBcurrentWidget\fP ()"
++.br
++.RI "获取当前中心界面index "
++.ti -1c
++.RI "void \fBsetWidgetSpacing\fP (int spacing)"
++.br
++.RI "设置窗体间距 "
++.ti -1c
++.RI "void \fBsetLoopTime\fP (int time)"
++.br
++.RI "设置轮播时长 "
++.in -1c
++.SS "Protected Member Functions"
++
++.in +1c
++.ti -1c
++.RI "void \fBresizeEvent\fP (QResizeEvent *event)"
++.br
++.ti -1c
++.RI "void \fBpaintEvent\fP (QPaintEvent *event)"
++.br
++.ti -1c
++.RI "void \fBshowEvent\fP (QShowEvent *event) override"
++.br
++.in -1c
++.SH "Detailed Description"
++.PP 
++FormModule\&. 
++
++
++.PP
++\fBSince\fP
++.RS 4
++2\&.5 
++.RE
++.PP
++
++.SH "Member Function Documentation"
++.PP 
++.SS "void kdk::KLoopPlayPage::addWidget (QWidget * widget)"
++
++.PP
++添加widget 
++.PP
++\fBParameters\fP
++.RS 4
++\fIwidget\fP 
++.RE
++.PP
++
++.SS "int kdk::KLoopPlayPage::currentWidget ()"
++
++.PP
++获取当前中心界面index 
++.PP
++\fBReturns\fP
++.RS 4
++
++.RE
++.PP
++
++.SS "void kdk::KLoopPlayPage::removeWidget (QWidget * widget)"
++
++.PP
++删除widget 
++.PP
++\fBParameters\fP
++.RS 4
++\fIwidget\fP 
++.RE
++.PP
++
++.SS "void kdk::KLoopPlayPage::setCurrentWidget (int i)"
++
++.PP
++设置当前中心界面 
++.PP
++\fBParameters\fP
++.RS 4
++\fIi\fP 
++.RE
++.PP
++
++.SS "void kdk::KLoopPlayPage::setLoopTime (int time)"
++
++.PP
++设置轮播时长 
++.PP
++\fBParameters\fP
++.RS 4
++\fItime\fP 
++.RE
++.PP
++
++.SS "void kdk::KLoopPlayPage::setWidgetSpacing (int spacing)"
++
++.PP
++设置窗体间距 
++.PP
++\fBParameters\fP
++.RS 4
++\fIspacing\fP 
++.RE
++.PP
++
++
++.SH "Author"
++.PP 
++Generated automatically by Doxygen for LIBKYSDK-APPLICATIONS from the source code\&.
+diff --git a/doxygen/man/man3/kdk_KLunarCalendarInfo.3 b/doxygen/man/man3/kdk_KLunarCalendarInfo.3
+new file mode 100644
+index 0000000..950ce23
+--- /dev/null
++++ b/doxygen/man/man3/kdk_KLunarCalendarInfo.3
+@@ -0,0 +1,327 @@
++.TH "kdk::KLunarCalendarInfo" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.ad l
++.nh
++.SH NAME
++kdk::KLunarCalendarInfo
++.SH SYNOPSIS
++.br
++.PP
++.PP
++Inherits QObject\&.
++.SS "Public Member Functions"
++
++.in +1c
++.ti -1c
++.RI "\fBKLunarCalendarInfo\fP (QObject *parent=0)"
++.br
++.ti -1c
++.RI "bool \fBisLoopYear\fP (int year)"
++.br
++.RI "计算是否闰年 "
++.ti -1c
++.RI "int \fBgetMonthDays\fP (int year, int month)"
++.br
++.RI "计算指定年月该月共多少天 "
++.ti -1c
++.RI "int \fBgetTotalMonthDays\fP (int year, int month)"
++.br
++.RI "计算指定年月对应到该月共多少天 "
++.ti -1c
++.RI "int \fBgetFirstDayOfWeek\fP (int year, int month, bool FirstDayisSun)"
++.br
++.RI "计算指定年月对应星期几 "
++.ti -1c
++.RI "QString \fBgetHoliday\fP (int month, int day)"
++.br
++.RI "计算国际节日 "
++.ti -1c
++.RI "QString \fBgetSolarTerms\fP (int year, int month, int day)"
++.br
++.RI "计算二十四节气 "
++.ti -1c
++.RI "QString \fBgetLunarFestival\fP (int month, int day)"
++.br
++.RI "计算农历节日(必须传入农历年份月份) "
++.ti -1c
++.RI "QString \fBgetLunarYear\fP (int year)"
++.br
++.RI "计算农历年 天干+地支+生肖 "
++.ti -1c
++.RI "void \fBgetLunarCalendarInfo\fP (int year, int month, int day, QString &strHoliday, QString &strSolarTerms, QString &strLunarFestival, QString &strLunarYear, QString &strLunarMonth, QString &strLunarDay)"
++.br
++.RI "计算指定年月日农历信息,包括公历节日和农历节日及二十四节气 "
++.ti -1c
++.RI "QString \fBgetLunarInfo\fP (int year, int month, int day, bool yearInfo, bool monthInfo, bool dayInfo)"
++.br
++.RI "获取指定年月日农历信息 "
++.ti -1c
++.RI "QString \fBgetLunarYearMonthDay\fP (int year, int month, int day)"
++.br
++.RI "获取农历年月日 "
++.ti -1c
++.RI "QString \fBgetLunarMonthDay\fP (int year, int month, int day)"
++.br
++.RI "获取农历月日 "
++.ti -1c
++.RI "QString \fBgetLunarDay\fP (int year, int month, int day)"
++.br
++.RI "获取农历日 "
++.in -1c
++.SS "Static Public Member Functions"
++
++.in +1c
++.ti -1c
++.RI "static \fBKLunarCalendarInfo\fP * \fBInstance\fP ()"
++.br
++.in -1c
++.SH "Member Function Documentation"
++.PP 
++.SS "int kdk::KLunarCalendarInfo::getFirstDayOfWeek (int year, int month, bool FirstDayisSun)"
++
++.PP
++计算指定年月对应星期几 
++.PP
++\fBParameters\fP
++.RS 4
++\fIyear\fP 
++.br
++\fImonth\fP 
++.br
++\fIFirstDayisSun:第一天是否以周日开始\fP 
++.RE
++.PP
++\fBReturns\fP
++.RS 4
++.RE
++.PP
++
++.SS "QString kdk::KLunarCalendarInfo::getHoliday (int month, int day)"
++
++.PP
++计算国际节日 
++.PP
++\fBParameters\fP
++.RS 4
++\fImonth\fP 
++.br
++\fIday\fP 
++.RE
++.PP
++\fBReturns\fP
++.RS 4
++.RE
++.PP
++
++.SS "void kdk::KLunarCalendarInfo::getLunarCalendarInfo (int year, int month, int day, QString & strHoliday, QString & strSolarTerms, QString & strLunarFestival, QString & strLunarYear, QString & strLunarMonth, QString & strLunarDay)"
++
++.PP
++计算指定年月日农历信息,包括公历节日和农历节日及二十四节气 
++.PP
++\fBParameters\fP
++.RS 4
++\fIyear\fP 
++.br
++\fImonth\fP 
++.br
++\fIday\fP 
++.br
++\fIstrHoliday\fP 
++.br
++\fIstrSolarTerms\fP 
++.br
++\fIstrLunarFestival\fP 
++.br
++\fIstrLunarYear\fP 
++.br
++\fIstrLunarMonth\fP 
++.br
++\fIstrLunarDay\fP 
++.RE
++.PP
++
++.SS "QString kdk::KLunarCalendarInfo::getLunarDay (int year, int month, int day)"
++
++.PP
++获取农历日 
++.PP
++\fBParameters\fP
++.RS 4
++\fIyear\fP 
++.br
++\fImonth\fP 
++.br
++\fIday\fP 
++.RE
++.PP
++\fBReturns\fP
++.RS 4
++.RE
++.PP
++
++.SS "QString kdk::KLunarCalendarInfo::getLunarFestival (int month, int day)"
++
++.PP
++计算农历节日(必须传入农历年份月份) 
++.PP
++\fBParameters\fP
++.RS 4
++\fImonth\fP 
++.br
++\fIday\fP 
++.RE
++.PP
++\fBReturns\fP
++.RS 4
++.RE
++.PP
++
++.SS "QString kdk::KLunarCalendarInfo::getLunarInfo (int year, int month, int day, bool yearInfo, bool monthInfo, bool dayInfo)"
++
++.PP
++获取指定年月日农历信息 
++.PP
++\fBParameters\fP
++.RS 4
++\fIyear\fP 
++.br
++\fImonth\fP 
++.br
++\fIday\fP 
++.br
++\fIyearInfo\fP 
++.br
++\fImonthInfo\fP 
++.br
++\fIdayInfo\fP 
++.RE
++.PP
++\fBReturns\fP
++.RS 4
++.RE
++.PP
++
++.SS "QString kdk::KLunarCalendarInfo::getLunarMonthDay (int year, int month, int day)"
++
++.PP
++获取农历月日 
++.PP
++\fBParameters\fP
++.RS 4
++\fIyear\fP 
++.br
++\fImonth\fP 
++.br
++\fIday\fP 
++.RE
++.PP
++\fBReturns\fP
++.RS 4
++.RE
++.PP
++
++.SS "QString kdk::KLunarCalendarInfo::getLunarYear (int year)"
++
++.PP
++计算农历年 天干+地支+生肖 
++.PP
++\fBParameters\fP
++.RS 4
++\fIyear\fP 
++.RE
++.PP
++\fBReturns\fP
++.RS 4
++.RE
++.PP
++
++.SS "QString kdk::KLunarCalendarInfo::getLunarYearMonthDay (int year, int month, int day)"
++
++.PP
++获取农历年月日 
++.PP
++\fBParameters\fP
++.RS 4
++\fIyear\fP 
++.br
++\fImonth\fP 
++.br
++\fIday\fP 
++.RE
++.PP
++\fBReturns\fP
++.RS 4
++.RE
++.PP
++
++.SS "int kdk::KLunarCalendarInfo::getMonthDays (int year, int month)"
++
++.PP
++计算指定年月该月共多少天 
++.PP
++\fBParameters\fP
++.RS 4
++\fIyear\fP 
++.br
++\fImonth\fP 
++.RE
++.PP
++\fBReturns\fP
++.RS 4
++.RE
++.PP
++
++.SS "QString kdk::KLunarCalendarInfo::getSolarTerms (int year, int month, int day)"
++
++.PP
++计算二十四节气 
++.PP
++\fBParameters\fP
++.RS 4
++\fIyear\fP 
++.br
++\fImonth\fP 
++.br
++\fIday\fP 
++.RE
++.PP
++\fBReturns\fP
++.RS 4
++.RE
++.PP
++
++.SS "int kdk::KLunarCalendarInfo::getTotalMonthDays (int year, int month)"
++
++.PP
++计算指定年月对应到该月共多少天 
++.PP
++\fBParameters\fP
++.RS 4
++\fIyear\fP 
++.br
++\fImonth\fP 
++.RE
++.PP
++\fBReturns\fP
++.RS 4
++.RE
++.PP
++
++.SS "bool kdk::KLunarCalendarInfo::isLoopYear (int year)"
++
++.PP
++计算是否闰年 
++.PP
++\fBParameters\fP
++.RS 4
++\fIyear\fP 
++.RE
++.PP
++\fBReturns\fP
++.RS 4
++.RE
++.PP
++
++
++.SH "Author"
++.PP 
++Generated automatically by Doxygen for LIBKYSDK-APPLICATIONS from the source code\&.
+diff --git a/doxygen/man/man3/kdk_KLunarDateEdit.3 b/doxygen/man/man3/kdk_KLunarDateEdit.3
+new file mode 100644
+index 0000000..8e0e5ad
+--- /dev/null
++++ b/doxygen/man/man3/kdk_KLunarDateEdit.3
+@@ -0,0 +1,67 @@
++.TH "kdk::KLunarDateEdit" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.ad l
++.nh
++.SH NAME
++kdk::KLunarDateEdit
++.SH SYNOPSIS
++.br
++.PP
++.PP
++Inherits QWidget\&.
++.SS "Signals"
++
++.in +1c
++.ti -1c
++.RI "void \fBdateChanged\fP (QDate)"
++.br
++.in -1c
++.SS "Public Member Functions"
++
++.in +1c
++.ti -1c
++.RI "\fBKLunarDateEdit\fP (QWidget *parent=nullptr)"
++.br
++.ti -1c
++.RI "void \fBsetShowLunar\fP (bool showLunar)"
++.br
++.RI "是否显示农历 "
++.ti -1c
++.RI "QDateTimeEdit * \fBgetDateEdit\fP ()"
++.br
++.RI "获取控件中的DateEdit控件 "
++.in -1c
++.SS "Protected Member Functions"
++
++.in +1c
++.ti -1c
++.RI "void \fBresizeEvent\fP (QResizeEvent *event)"
++.br
++.in -1c
++.SH "Member Function Documentation"
++.PP 
++.SS "QDateTimeEdit* kdk::KLunarDateEdit::getDateEdit ()"
++
++.PP
++获取控件中的DateEdit控件 
++.PP
++\fBReturns\fP
++.RS 4
++
++.RE
++.PP
++
++.SS "void kdk::KLunarDateEdit::setShowLunar (bool showLunar)"
++
++.PP
++是否显示农历 
++.PP
++\fBParameters\fP
++.RS 4
++\fIshowLunar:true显示,false不显示\fP 
++.RE
++.PP
++
++
++.SH "Author"
++.PP 
++Generated automatically by Doxygen for LIBKYSDK-APPLICATIONS from the source code\&.
+diff --git a/doxygen/man/man3/kdk_KMenuButton.3 b/doxygen/man/man3/kdk_KMenuButton.3
+index ceedd40..24a6d5f 100644
+--- a/doxygen/man/man3/kdk_KMenuButton.3
++++ b/doxygen/man/man3/kdk_KMenuButton.3
+@@ -1,4 +1,4 @@
+-.TH "kdk::KMenuButton" 3 "Thu Oct 12 2023" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.TH "kdk::KMenuButton" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
+ .ad l
+ .nh
+ .SH NAME
+@@ -42,6 +42,10 @@ Inherits QToolButton, and ThemeController\&.
+ .br
+ .RI "获取关于Action "
+ .ti -1c
++.RI "QAction * \fBfeedbackAction\fP ()"
++.br
++.RI "获取意见反馈Action "
++.ti -1c
+ .RI "QAction * \fBquitAction\fP ()"
+ .br
+ .RI "获取离开Action "
+diff --git a/doxygen/man/man3/kdk_KMessageBox.3 b/doxygen/man/man3/kdk_KMessageBox.3
+index b1b6263..16a4fa3 100644
+--- a/doxygen/man/man3/kdk_KMessageBox.3
++++ b/doxygen/man/man3/kdk_KMessageBox.3
+@@ -1,4 +1,4 @@
+-.TH "kdk::KMessageBox" 3 "Thu Oct 12 2023" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.TH "kdk::KMessageBox" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
+ .ad l
+ .nh
+ .SH NAME
+diff --git a/doxygen/man/man3/kdk_KMiniCalendarItem.3 b/doxygen/man/man3/kdk_KMiniCalendarItem.3
+new file mode 100644
+index 0000000..f1c0f7e
+--- /dev/null
++++ b/doxygen/man/man3/kdk_KMiniCalendarItem.3
+@@ -0,0 +1,571 @@
++.TH "kdk::KMiniCalendarItem" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.ad l
++.nh
++.SH NAME
++kdk::KMiniCalendarItem
++.SH SYNOPSIS
++.br
++.PP
++.PP
++Inherits QWidget\&.
++.SS "Public Types"
++
++.in +1c
++.ti -1c
++.RI "enum \fBDayType\fP { \fBDayType_MonthPre\fP = 0, \fBDayType_MonthNext\fP = 1, \fBDayType_MonthCurrent\fP = 2, \fBDayType_WeekEnd\fP = 3 }"
++.br
++.ti -1c
++.RI "enum \fBSelectType\fP { \fBSelectType_Rect\fP = 0, \fBSelectType_Circle\fP = 1, \fBSelectType_Triangle\fP = 2, \fBSelectType_Image\fP = 3 }"
++.br
++.in -1c
++.SS "Public Slots"
++
++.in +1c
++.ti -1c
++.RI "void \fBsetSelect\fP (bool select)"
++.br
++.ti -1c
++.RI "void \fBsetShowLunar\fP (bool showLunar)"
++.br
++.ti -1c
++.RI "void \fBsetSelectType\fP (const SelectType &selectType)"
++.br
++.ti -1c
++.RI "void \fBsetDate\fP (const QDate &date)"
++.br
++.ti -1c
++.RI "void \fBsetLunar\fP (const QString &lunar)"
++.br
++.ti -1c
++.RI "void \fBsetDayType\fP (const DayType &dayType)"
++.br
++.ti -1c
++.RI "void \fBsetDate\fP (const QDate &date, const QString &lunar, const DayType &dayType)"
++.br
++.ti -1c
++.RI "void \fBsetEnableBorder\fP (bool bVisible)"
++.br
++.ti -1c
++.RI "void \fBsetBorderColor\fP (const QColor &borderColor)"
++.br
++.ti -1c
++.RI "void \fBsetWeekColor\fP (const QColor &weekColor)"
++.br
++.ti -1c
++.RI "void \fBsetSuperColor\fP (const QColor &superColor)"
++.br
++.ti -1c
++.RI "void \fBsetLunarColor\fP (const QColor &lunarColor)"
++.br
++.ti -1c
++.RI "void \fBsetCurrentTextColor\fP (const QColor &currentTextColor)"
++.br
++.ti -1c
++.RI "void \fBsetOtherTextColor\fP (const QColor &otherTextColor)"
++.br
++.ti -1c
++.RI "void \fBsetSelectTextColor\fP (const QColor &selectTextColor)"
++.br
++.ti -1c
++.RI "void \fBsetHoverTextColor\fP (const QColor &hoverTextColor)"
++.br
++.ti -1c
++.RI "void \fBsetCurrentLunarColor\fP (const QColor &currentLunarColor)"
++.br
++.ti -1c
++.RI "void \fBsetOtherLunarColor\fP (const QColor &otherLunarColor)"
++.br
++.ti -1c
++.RI "void \fBsetSelectLunarColor\fP (const QColor &selectLunarColor)"
++.br
++.ti -1c
++.RI "void \fBsetHoverLunarColor\fP (const QColor &hoverLunarColor)"
++.br
++.ti -1c
++.RI "void \fBsetCurrentBgColor\fP (const QColor &currentBgColor)"
++.br
++.ti -1c
++.RI "void \fBsetOtherBgColor\fP (const QColor &otherBgColor)"
++.br
++.ti -1c
++.RI "void \fBsetSelectBgColor\fP (const QColor &selectBgColor)"
++.br
++.ti -1c
++.RI "void \fBsetHoverBgColor\fP (const QColor &hoverBgColor)"
++.br
++.in -1c
++.SS "Signals"
++
++.in +1c
++.ti -1c
++.RI "void \fBclicked\fP (const QDate &date, const KMiniCalendarItem::DayType &dayType)"
++.br
++.in -1c
++.SS "Public Member Functions"
++
++.in +1c
++.ti -1c
++.RI "\fBKMiniCalendarItem\fP (QWidget *parent=0)"
++.br
++.ti -1c
++.RI "bool \fBgetSelect\fP () const"
++.br
++.RI "获取是否选中 "
++.ti -1c
++.RI "bool \fBgetShowLunar\fP () const"
++.br
++.RI "获取是否显示农历 "
++.ti -1c
++.RI "bool \fBgetEnableBorder\fP () const"
++.br
++.RI "获取启用边界 "
++.ti -1c
++.RI "SelectType \fBgetSelectType\fP () const"
++.br
++.RI "获取选择类型 "
++.ti -1c
++.RI "QDate \fBgetDate\fP () const"
++.br
++.RI "获取当前日期 "
++.ti -1c
++.RI "QString \fBgetLunar\fP () const"
++.br
++.RI "获取农历信息 "
++.ti -1c
++.RI "DayType \fBgetDayType\fP () const"
++.br
++.RI "获取日期类型 "
++.ti -1c
++.RI "QColor \fBgetBorderColor\fP () const"
++.br
++.RI "获取边框颜色 "
++.ti -1c
++.RI "QColor \fBgetWeekColor\fP () const"
++.br
++.RI "获取周颜色 "
++.ti -1c
++.RI "QColor \fBgetSuperColor\fP () const"
++.br
++.RI "获取角标颜色 "
++.ti -1c
++.RI "QColor \fBgetLunarColor\fP () const"
++.br
++.RI "获取农历节日颜色 "
++.ti -1c
++.RI "QColor \fBgetCurrentTextColor\fP () const"
++.br
++.RI "获取当前月文字颜色 "
++.ti -1c
++.RI "QColor \fBgetOtherTextColor\fP () const"
++.br
++.RI "获取其他月文字颜色 "
++.ti -1c
++.RI "QColor \fBgetSelectTextColor\fP () const"
++.br
++.RI "获取选中日期文字颜色 "
++.ti -1c
++.RI "QColor \fBgetHoverTextColor\fP () const"
++.br
++.RI "获取悬停日期文字颜色 "
++.ti -1c
++.RI "QColor \fBgetCurrentLunarColor\fP () const"
++.br
++.RI "获取当前月农历文字颜色 "
++.ti -1c
++.RI "QColor \fBgetOtherLunarColor\fP () const"
++.br
++.RI "获取其他月农历文字颜色 "
++.ti -1c
++.RI "QColor \fBgetSelectLunarColor\fP () const"
++.br
++.RI "获取选中日期农历文字颜色 "
++.ti -1c
++.RI "QColor \fBgetHoverLunarColor\fP () const"
++.br
++.RI "获取悬停日期农历文字颜色 "
++.ti -1c
++.RI "QColor \fBgetCurrentBgColor\fP () const"
++.br
++.RI "获取当前月背景颜色 "
++.ti -1c
++.RI "QColor \fBgetOtherBgColor\fP () const"
++.br
++.RI "获取其他月背景颜色 "
++.ti -1c
++.RI "QColor \fBgetSelectBgColor\fP () const"
++.br
++.RI "获取选中日期背景颜色 "
++.ti -1c
++.RI "QColor \fBgetHoverBgColor\fP () const"
++.br
++.RI "获取悬停日期背景颜色 "
++.ti -1c
++.RI "QSize \fBsizeHint\fP () const"
++.br
++.ti -1c
++.RI "QSize \fBminimumSizeHint\fP () const"
++.br
++.in -1c
++.SS "Protected Member Functions"
++
++.in +1c
++.ti -1c
++.RI "void \fBenterEvent\fP (QEvent *)"
++.br
++.ti -1c
++.RI "void \fBleaveEvent\fP (QEvent *)"
++.br
++.ti -1c
++.RI "void \fBmousePressEvent\fP (QMouseEvent *)"
++.br
++.ti -1c
++.RI "void \fBmouseReleaseEvent\fP (QMouseEvent *)"
++.br
++.ti -1c
++.RI "void \fBpaintEvent\fP (QPaintEvent *)"
++.br
++.ti -1c
++.RI "void \fBdrawBg\fP (QPainter *painter)"
++.br
++.ti -1c
++.RI "void \fBdrawBgCurrent\fP (QPainter *painter, const QColor &color)"
++.br
++.ti -1c
++.RI "void \fBdrawDay\fP (QPainter *painter)"
++.br
++.ti -1c
++.RI "void \fBdrawLunar\fP (QPainter *painter)"
++.br
++.in -1c
++.SS "Properties"
++
++.in +1c
++.ti -1c
++.RI "bool \fBselect\fP"
++.br
++.ti -1c
++.RI "bool \fBshowLunar\fP"
++.br
++.ti -1c
++.RI "bool \fBenableBorder\fP"
++.br
++.ti -1c
++.RI "SelectType \fBselectType\fP"
++.br
++.ti -1c
++.RI "QDate \fBdate\fP"
++.br
++.ti -1c
++.RI "QString \fBlunar\fP"
++.br
++.ti -1c
++.RI "DayType \fBdayType\fP"
++.br
++.ti -1c
++.RI "QColor \fBborderColor\fP"
++.br
++.ti -1c
++.RI "QColor \fBweekColor\fP"
++.br
++.ti -1c
++.RI "QColor \fBsuperColor\fP"
++.br
++.ti -1c
++.RI "QColor \fBlunarColor\fP"
++.br
++.ti -1c
++.RI "QColor \fBcurrentTextColor\fP"
++.br
++.ti -1c
++.RI "QColor \fBotherTextColor\fP"
++.br
++.ti -1c
++.RI "QColor \fBselectTextColor\fP"
++.br
++.ti -1c
++.RI "QColor \fBhoverTextColor\fP"
++.br
++.ti -1c
++.RI "QColor \fBcurrentLunarColor\fP"
++.br
++.ti -1c
++.RI "QColor \fBotherLunarColor\fP"
++.br
++.ti -1c
++.RI "QColor \fBselectLunarColor\fP"
++.br
++.ti -1c
++.RI "QColor \fBhoverLunarColor\fP"
++.br
++.ti -1c
++.RI "QColor \fBcurrentBgColor\fP"
++.br
++.ti -1c
++.RI "QColor \fBotherBgColor\fP"
++.br
++.ti -1c
++.RI "QColor \fBselectBgColor\fP"
++.br
++.ti -1c
++.RI "QColor \fBhoverBgColor\fP"
++.br
++.in -1c
++.SH "Member Function Documentation"
++.PP 
++.SS "QColor kdk::KMiniCalendarItem::getBorderColor () const"
++
++.PP
++获取边框颜色 
++.PP
++\fBReturns\fP
++.RS 4
++
++.RE
++.PP
++
++.SS "QColor kdk::KMiniCalendarItem::getCurrentBgColor () const"
++
++.PP
++获取当前月背景颜色 
++.PP
++\fBReturns\fP
++.RS 4
++
++.RE
++.PP
++
++.SS "QColor kdk::KMiniCalendarItem::getCurrentLunarColor () const"
++
++.PP
++获取当前月农历文字颜色 
++.PP
++\fBReturns\fP
++.RS 4
++
++.RE
++.PP
++
++.SS "QColor kdk::KMiniCalendarItem::getCurrentTextColor () const"
++
++.PP
++获取当前月文字颜色 
++.PP
++\fBReturns\fP
++.RS 4
++
++.RE
++.PP
++
++.SS "QDate kdk::KMiniCalendarItem::getDate () const"
++
++.PP
++获取当前日期 
++.PP
++\fBReturns\fP
++.RS 4
++
++.RE
++.PP
++
++.SS "DayType kdk::KMiniCalendarItem::getDayType () const"
++
++.PP
++获取日期类型 
++.PP
++\fBReturns\fP
++.RS 4
++
++.RE
++.PP
++
++.SS "bool kdk::KMiniCalendarItem::getEnableBorder () const"
++
++.PP
++获取启用边界 
++.PP
++\fBReturns\fP
++.RS 4
++
++.RE
++.PP
++
++.SS "QColor kdk::KMiniCalendarItem::getHoverBgColor () const"
++
++.PP
++获取悬停日期背景颜色 
++.PP
++\fBReturns\fP
++.RS 4
++
++.RE
++.PP
++
++.SS "QColor kdk::KMiniCalendarItem::getHoverLunarColor () const"
++
++.PP
++获取悬停日期农历文字颜色 
++.PP
++\fBReturns\fP
++.RS 4
++
++.RE
++.PP
++
++.SS "QColor kdk::KMiniCalendarItem::getHoverTextColor () const"
++
++.PP
++获取悬停日期文字颜色 
++.PP
++\fBReturns\fP
++.RS 4
++
++.RE
++.PP
++
++.SS "QString kdk::KMiniCalendarItem::getLunar () const"
++
++.PP
++获取农历信息 
++.PP
++\fBReturns\fP
++.RS 4
++
++.RE
++.PP
++
++.SS "QColor kdk::KMiniCalendarItem::getLunarColor () const"
++
++.PP
++获取农历节日颜色 
++.PP
++\fBReturns\fP
++.RS 4
++
++.RE
++.PP
++
++.SS "QColor kdk::KMiniCalendarItem::getOtherBgColor () const"
++
++.PP
++获取其他月背景颜色 
++.PP
++\fBReturns\fP
++.RS 4
++
++.RE
++.PP
++
++.SS "QColor kdk::KMiniCalendarItem::getOtherLunarColor () const"
++
++.PP
++获取其他月农历文字颜色 
++.PP
++\fBReturns\fP
++.RS 4
++
++.RE
++.PP
++
++.SS "QColor kdk::KMiniCalendarItem::getOtherTextColor () const"
++
++.PP
++获取其他月文字颜色 
++.PP
++\fBReturns\fP
++.RS 4
++
++.RE
++.PP
++
++.SS "bool kdk::KMiniCalendarItem::getSelect () const"
++
++.PP
++获取是否选中 
++.PP
++\fBReturns\fP
++.RS 4
++
++.RE
++.PP
++
++.SS "QColor kdk::KMiniCalendarItem::getSelectBgColor () const"
++
++.PP
++获取选中日期背景颜色 
++.PP
++\fBReturns\fP
++.RS 4
++
++.RE
++.PP
++
++.SS "QColor kdk::KMiniCalendarItem::getSelectLunarColor () const"
++
++.PP
++获取选中日期农历文字颜色 
++.PP
++\fBReturns\fP
++.RS 4
++
++.RE
++.PP
++
++.SS "QColor kdk::KMiniCalendarItem::getSelectTextColor () const"
++
++.PP
++获取选中日期文字颜色 
++.PP
++\fBReturns\fP
++.RS 4
++
++.RE
++.PP
++
++.SS "SelectType kdk::KMiniCalendarItem::getSelectType () const"
++
++.PP
++获取选择类型 
++.PP
++\fBReturns\fP
++.RS 4
++
++.RE
++.PP
++
++.SS "bool kdk::KMiniCalendarItem::getShowLunar () const"
++
++.PP
++获取是否显示农历 
++.PP
++\fBReturns\fP
++.RS 4
++
++.RE
++.PP
++
++.SS "QColor kdk::KMiniCalendarItem::getSuperColor () const"
++
++.PP
++获取角标颜色 
++.PP
++\fBReturns\fP
++.RS 4
++
++.RE
++.PP
++
++.SS "QColor kdk::KMiniCalendarItem::getWeekColor () const"
++
++.PP
++获取周颜色 
++.PP
++\fBReturns\fP
++.RS 4
++
++.RE
++.PP
++
++
++.SH "Author"
++.PP 
++Generated automatically by Doxygen for LIBKYSDK-APPLICATIONS from the source code\&.
+diff --git a/doxygen/man/man3/kdk_KMiniCalendarWidget.3 b/doxygen/man/man3/kdk_KMiniCalendarWidget.3
+new file mode 100644
+index 0000000..2ec8f3b
+--- /dev/null
++++ b/doxygen/man/man3/kdk_KMiniCalendarWidget.3
+@@ -0,0 +1,562 @@
++.TH "kdk::KMiniCalendarWidget" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.ad l
++.nh
++.SH NAME
++kdk::KMiniCalendarWidget
++.SH SYNOPSIS
++.br
++.PP
++.PP
++Inherits QWidget\&.
++.SS "Public Types"
++
++.in +1c
++.ti -1c
++.RI "enum \fBCalendarStyle\fP { \fBCalendarStyle_Red\fP = 0 }"
++.br
++.ti -1c
++.RI "enum \fBWeekNameFormat\fP { \fBWeekNameFormat_Short\fP = 0, \fBWeekNameFormat_Normal\fP = 1, \fBWeekNameFormat_Long\fP = 2, \fBWeekNameFormat_En\fP = 3 }"
++.br
++.ti -1c
++.RI "enum \fBSelectType\fP { \fBSelectType_Rect\fP = 0, \fBSelectType_Circle\fP = 1, \fBSelectType_Triangle\fP = 2, \fBSelectType_Image\fP = 3 }"
++.br
++.in -1c
++.SS "Public Slots"
++
++.in +1c
++.ti -1c
++.RI "void \fBshowPreviousMonth\fP ()"
++.br
++.ti -1c
++.RI "void \fBshowNextMonth\fP ()"
++.br
++.ti -1c
++.RI "void \fBshowToday\fP ()"
++.br
++.ti -1c
++.RI "void \fBsetCalendarStyle\fP (const CalendarStyle &calendarStyle)"
++.br
++.ti -1c
++.RI "void \fBsetWeekNameFormat\fP (const WeekNameFormat &weekNameFormat)"
++.br
++.ti -1c
++.RI "void \fBsetDate\fP (const QDate &date)"
++.br
++.ti -1c
++.RI "void \fBsetWeekTextColor\fP (const QColor &weekTextColor)"
++.br
++.ti -1c
++.RI "void \fBsetWeekBgColor\fP (const QColor &weekBgColor)"
++.br
++.ti -1c
++.RI "void \fBsetShowLunar\fP (bool showLunar)"
++.br
++.ti -1c
++.RI "void \fBsetEnableBorder\fP (bool bVisible)"
++.br
++.ti -1c
++.RI "void \fBsetSelectType\fP (const SelectType &selectType)"
++.br
++.ti -1c
++.RI "void \fBsetBorderColor\fP (const QColor &borderColor)"
++.br
++.ti -1c
++.RI "void \fBsetWeekColor\fP (const QColor &weekColor)"
++.br
++.ti -1c
++.RI "void \fBsetLunarColor\fP (const QColor &lunarColor)"
++.br
++.ti -1c
++.RI "void \fBsetCurrentTextColor\fP (const QColor &currentTextColor)"
++.br
++.ti -1c
++.RI "void \fBsetOtherTextColor\fP (const QColor &otherTextColor)"
++.br
++.ti -1c
++.RI "void \fBsetSelectTextColor\fP (const QColor &selectTextColor)"
++.br
++.ti -1c
++.RI "void \fBsetHoverTextColor\fP (const QColor &hoverTextColor)"
++.br
++.ti -1c
++.RI "void \fBsetCurrentLunarColor\fP (const QColor &currentLunarColor)"
++.br
++.ti -1c
++.RI "void \fBsetOtherLunarColor\fP (const QColor &otherLunarColor)"
++.br
++.ti -1c
++.RI "void \fBsetSelectLunarColor\fP (const QColor &selectLunarColor)"
++.br
++.ti -1c
++.RI "void \fBsetHoverLunarColor\fP (const QColor &hoverLunarColor)"
++.br
++.ti -1c
++.RI "void \fBsetCurrentBgColor\fP (const QColor &currentBgColor)"
++.br
++.ti -1c
++.RI "void \fBsetOtherBgColor\fP (const QColor &otherBgColor)"
++.br
++.ti -1c
++.RI "void \fBsetSelectBgColor\fP (const QColor &selectBgColor)"
++.br
++.ti -1c
++.RI "void \fBsetHoverBgColor\fP (const QColor &hoverBgColor)"
++.br
++.in -1c
++.SS "Signals"
++
++.in +1c
++.ti -1c
++.RI "void \fBclicked\fP (const QDate &date)"
++.br
++.ti -1c
++.RI "void \fBselectionChanged\fP ()"
++.br
++.in -1c
++.SS "Public Member Functions"
++
++.in +1c
++.ti -1c
++.RI "\fBKMiniCalendarWidget\fP (QWidget *parent=0)"
++.br
++.ti -1c
++.RI "CalendarStyle \fBgetCalendarStyle\fP () const"
++.br
++.RI "获取整体样式 "
++.ti -1c
++.RI "WeekNameFormat \fBgetWeekNameFormat\fP () const"
++.br
++.RI "获取星期名称格式 "
++.ti -1c
++.RI "QDate \fBgetDate\fP () const"
++.br
++.RI "获取当前日期 "
++.ti -1c
++.RI "QColor \fBgetWeekTextColor\fP () const"
++.br
++.RI "获取星期文本颜色 "
++.ti -1c
++.RI "QColor \fBgetWeekBgColor\fP () const"
++.br
++.RI "获取周末名称背景色 "
++.ti -1c
++.RI "bool \fBgetShowLunar\fP () const"
++.br
++.RI "获取农历显示 "
++.ti -1c
++.RI "bool \fBgetEnableBorder\fP () const"
++.br
++.RI "获取启用边框 "
++.ti -1c
++.RI "SelectType \fBgetSelectType\fP () const"
++.br
++.RI "获取选择类型 "
++.ti -1c
++.RI "QColor \fBgetBorderColor\fP () const"
++.br
++.RI "获取边框颜色 "
++.ti -1c
++.RI "QColor \fBgetWeekColor\fP () const"
++.br
++.RI "获取周末颜色 "
++.ti -1c
++.RI "QColor \fBgetLunarColor\fP () const"
++.br
++.RI "获取农历节日颜色 "
++.ti -1c
++.RI "QColor \fBgetCurrentTextColor\fP () const"
++.br
++.RI "获取当前月文本颜色 "
++.ti -1c
++.RI "QColor \fBgetOtherTextColor\fP () const"
++.br
++.RI "获取其他月文本颜色 "
++.ti -1c
++.RI "QColor \fBgetSelectTextColor\fP () const"
++.br
++.RI "获取选中日期文本颜色 "
++.ti -1c
++.RI "QColor \fBgetHoverTextColor\fP () const"
++.br
++.RI "获取悬浮日期文本颜色 "
++.ti -1c
++.RI "QColor \fBgetCurrentLunarColor\fP () const"
++.br
++.RI "获取当前月农历文字颜色 "
++.ti -1c
++.RI "QColor \fBgetOtherLunarColor\fP () const"
++.br
++.RI "获取其他月农历文本颜色 "
++.ti -1c
++.RI "QColor \fBgetSelectLunarColor\fP () const"
++.br
++.RI "获取选中日期农历颜文本色 "
++.ti -1c
++.RI "QColor \fBgetHoverLunarColor\fP () const"
++.br
++.RI "获取悬浮日期农历文本颜色 "
++.ti -1c
++.RI "QColor \fBgetCurrentBgColor\fP () const"
++.br
++.RI "获取当前月背景色 "
++.ti -1c
++.RI "QColor \fBgetOtherBgColor\fP () const"
++.br
++.RI "获取其他月背景色 "
++.ti -1c
++.RI "QColor \fBgetSelectBgColor\fP () const"
++.br
++.RI "获取选择日期背景色 "
++.ti -1c
++.RI "QColor \fBgetHoverBgColor\fP () const"
++.br
++.RI "获取悬浮日期背景色 "
++.ti -1c
++.RI "QSize \fBsizeHint\fP () const"
++.br
++.ti -1c
++.RI "QSize \fBminimumSizeHint\fP () const"
++.br
++.in -1c
++.SS "Protected Member Functions"
++
++.in +1c
++.ti -1c
++.RI "void \fBwheelEvent\fP (QWheelEvent *event) override"
++.br
++.ti -1c
++.RI "void \fBpaintEvent\fP (QPaintEvent *event) override"
++.br
++.in -1c
++.SS "Properties"
++
++.in +1c
++.ti -1c
++.RI "CalendarStyle \fBcalendarStyle\fP"
++.br
++.ti -1c
++.RI "WeekNameFormat \fBweekNameFormat\fP"
++.br
++.ti -1c
++.RI "QDate \fBdate\fP"
++.br
++.ti -1c
++.RI "QColor \fBweekTextColor\fP"
++.br
++.ti -1c
++.RI "QColor \fBweekBgColor\fP"
++.br
++.ti -1c
++.RI "bool \fBshowLunar\fP"
++.br
++.ti -1c
++.RI "bool \fBenableBorder\fP"
++.br
++.ti -1c
++.RI "SelectType \fBselectType\fP"
++.br
++.ti -1c
++.RI "QColor \fBborderColor\fP"
++.br
++.ti -1c
++.RI "QColor \fBweekColor\fP"
++.br
++.ti -1c
++.RI "QColor \fBlunarColor\fP"
++.br
++.ti -1c
++.RI "QColor \fBcurrentTextColor\fP"
++.br
++.ti -1c
++.RI "QColor \fBotherTextColor\fP"
++.br
++.ti -1c
++.RI "QColor \fBselectTextColor\fP"
++.br
++.ti -1c
++.RI "QColor \fBhoverTextColor\fP"
++.br
++.ti -1c
++.RI "QColor \fBcurrentLunarColor\fP"
++.br
++.ti -1c
++.RI "QColor \fBotherLunarColor\fP"
++.br
++.ti -1c
++.RI "QColor \fBselectLunarColor\fP"
++.br
++.ti -1c
++.RI "QColor \fBhoverLunarColor\fP"
++.br
++.ti -1c
++.RI "QColor \fBcurrentBgColor\fP"
++.br
++.ti -1c
++.RI "QColor \fBotherBgColor\fP"
++.br
++.ti -1c
++.RI "QColor \fBselectBgColor\fP"
++.br
++.ti -1c
++.RI "QColor \fBhoverBgColor\fP"
++.br
++.in -1c
++.SH "Member Function Documentation"
++.PP 
++.SS "QColor kdk::KMiniCalendarWidget::getBorderColor () const"
++
++.PP
++获取边框颜色 
++.PP
++\fBReturns\fP
++.RS 4
++
++.RE
++.PP
++
++.SS "CalendarStyle kdk::KMiniCalendarWidget::getCalendarStyle () const"
++
++.PP
++获取整体样式 
++.PP
++\fBReturns\fP
++.RS 4
++
++.RE
++.PP
++
++.SS "QColor kdk::KMiniCalendarWidget::getCurrentBgColor () const"
++
++.PP
++获取当前月背景色 
++.PP
++\fBReturns\fP
++.RS 4
++
++.RE
++.PP
++
++.SS "QColor kdk::KMiniCalendarWidget::getCurrentLunarColor () const"
++
++.PP
++获取当前月农历文字颜色 
++.PP
++\fBReturns\fP
++.RS 4
++
++.RE
++.PP
++
++.SS "QColor kdk::KMiniCalendarWidget::getCurrentTextColor () const"
++
++.PP
++获取当前月文本颜色 
++.PP
++\fBReturns\fP
++.RS 4
++
++.RE
++.PP
++
++.SS "QDate kdk::KMiniCalendarWidget::getDate () const"
++
++.PP
++获取当前日期 
++.PP
++\fBReturns\fP
++.RS 4
++
++.RE
++.PP
++
++.SS "bool kdk::KMiniCalendarWidget::getEnableBorder () const"
++
++.PP
++获取启用边框 
++.PP
++\fBReturns\fP
++.RS 4
++
++.RE
++.PP
++
++.SS "QColor kdk::KMiniCalendarWidget::getHoverBgColor () const"
++
++.PP
++获取悬浮日期背景色 
++.PP
++\fBReturns\fP
++.RS 4
++
++.RE
++.PP
++
++.SS "QColor kdk::KMiniCalendarWidget::getHoverLunarColor () const"
++
++.PP
++获取悬浮日期农历文本颜色 
++.PP
++\fBReturns\fP
++.RS 4
++
++.RE
++.PP
++
++.SS "QColor kdk::KMiniCalendarWidget::getHoverTextColor () const"
++
++.PP
++获取悬浮日期文本颜色 
++.PP
++\fBReturns\fP
++.RS 4
++
++.RE
++.PP
++
++.SS "QColor kdk::KMiniCalendarWidget::getLunarColor () const"
++
++.PP
++获取农历节日颜色 
++.PP
++\fBReturns\fP
++.RS 4
++
++.RE
++.PP
++
++.SS "QColor kdk::KMiniCalendarWidget::getOtherBgColor () const"
++
++.PP
++获取其他月背景色 
++.PP
++\fBReturns\fP
++.RS 4
++
++.RE
++.PP
++
++.SS "QColor kdk::KMiniCalendarWidget::getOtherLunarColor () const"
++
++.PP
++获取其他月农历文本颜色 
++.PP
++\fBReturns\fP
++.RS 4
++
++.RE
++.PP
++
++.SS "QColor kdk::KMiniCalendarWidget::getOtherTextColor () const"
++
++.PP
++获取其他月文本颜色 
++.PP
++\fBReturns\fP
++.RS 4
++
++.RE
++.PP
++
++.SS "QColor kdk::KMiniCalendarWidget::getSelectBgColor () const"
++
++.PP
++获取选择日期背景色 
++.PP
++\fBReturns\fP
++.RS 4
++
++.RE
++.PP
++
++.SS "QColor kdk::KMiniCalendarWidget::getSelectLunarColor () const"
++
++.PP
++获取选中日期农历颜文本色 
++.PP
++\fBReturns\fP
++.RS 4
++
++.RE
++.PP
++
++.SS "QColor kdk::KMiniCalendarWidget::getSelectTextColor () const"
++
++.PP
++获取选中日期文本颜色 
++.PP
++\fBReturns\fP
++.RS 4
++
++.RE
++.PP
++
++.SS "SelectType kdk::KMiniCalendarWidget::getSelectType () const"
++
++.PP
++获取选择类型 
++.PP
++\fBReturns\fP
++.RS 4
++
++.RE
++.PP
++
++.SS "bool kdk::KMiniCalendarWidget::getShowLunar () const"
++
++.PP
++获取农历显示 
++.PP
++\fBReturns\fP
++.RS 4
++
++.RE
++.PP
++
++.SS "QColor kdk::KMiniCalendarWidget::getWeekBgColor () const"
++
++.PP
++获取周末名称背景色 
++.PP
++\fBReturns\fP
++.RS 4
++
++.RE
++.PP
++
++.SS "QColor kdk::KMiniCalendarWidget::getWeekColor () const"
++
++.PP
++获取周末颜色 
++.PP
++\fBReturns\fP
++.RS 4
++
++.RE
++.PP
++
++.SS "WeekNameFormat kdk::KMiniCalendarWidget::getWeekNameFormat () const"
++
++.PP
++获取星期名称格式 
++.PP
++\fBReturns\fP
++.RS 4
++
++.RE
++.PP
++
++.SS "QColor kdk::KMiniCalendarWidget::getWeekTextColor () const"
++
++.PP
++获取星期文本颜色 
++.PP
++\fBReturns\fP
++.RS 4
++
++.RE
++.PP
++
++
++.SH "Author"
++.PP 
++Generated automatically by Doxygen for LIBKYSDK-APPLICATIONS from the source code\&.
+diff --git a/doxygen/man/man3/kdk_KNativeTabbar.3 b/doxygen/man/man3/kdk_KNativeTabbar.3
+new file mode 100644
+index 0000000..d36d37e
+--- /dev/null
++++ b/doxygen/man/man3/kdk_KNativeTabbar.3
+@@ -0,0 +1,140 @@
++.TH "kdk::KNativeTabbar" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.ad l
++.nh
++.SH NAME
++kdk::KNativeTabbar \- 支持三种样式  
++
++.SH SYNOPSIS
++.br
++.PP
++.PP
++\fC#include <knativetabbar\&.h>\fP
++.PP
++Inherits \fBKCustomTabBar\fP\&.
++.SS "Signals"
++
++.in +1c
++.ti -1c
++.RI "void \fBrightlicked\fP (QPoint point)"
++.br
++.RI "鼠标右键信号 "
++.in -1c
++.SS "Public Member Functions"
++
++.in +1c
++.ti -1c
++.RI "\fBKNativeTabbar\fP (KNativeTabbarStyle \fBbarStyle\fP=SegmentLight, QWidget *parent=nullptr)"
++.br
++.ti -1c
++.RI "void \fBsetTabbarStyle\fP (KNativeTabbarStyle \fBbarStyle\fP)"
++.br
++.RI "设置TabBar样式 "
++.ti -1c
++.RI "KNativeTabbarStyle \fBbarStyle\fP ()"
++.br
++.RI "返回TabBar样式 "
++.ti -1c
++.RI "void \fBsetBorderRadius\fP (int radius)"
++.br
++.RI "设置圆角半径,只对SegmentDark,SegmentLight样式生效 "
++.ti -1c
++.RI "int \fBborderRadius\fP ()"
++.br
++.RI "获取圆角半径 "
++.ti -1c
++.RI "void \fBsetBackgroundColor\fP (const QColor &color)"
++.br
++.RI "设置背景色 "
++.in -1c
++.SS "Protected Member Functions"
++
++.in +1c
++.ti -1c
++.RI "QSize \fBsizeHint\fP () const"
++.br
++.ti -1c
++.RI "QSize \fBminimumTabSizeHint\fP (int index) const"
++.br
++.ti -1c
++.RI "QSize \fBtabSizeHint\fP (int index) const"
++.br
++.ti -1c
++.RI "void \fBpaintEvent\fP (QPaintEvent *event)"
++.br
++.in -1c
++.SS "Additional Inherited Members"
++.SH "Detailed Description"
++.PP 
++支持三种样式 
++.SH "Member Function Documentation"
++.PP 
++.SS "KNativeTabbarStyle kdk::KNativeTabbar::barStyle ()"
++
++.PP
++返回TabBar样式 
++.PP
++\fBReturns\fP
++.RS 4
++
++.RE
++.PP
++
++.SS "int kdk::KNativeTabbar::borderRadius ()"
++
++.PP
++获取圆角半径 
++.PP
++\fBReturns\fP
++.RS 4
++
++.RE
++.PP
++
++.SS "void kdk::KNativeTabbar::rightlicked (QPoint point)\fC [signal]\fP"
++
++.PP
++鼠标右键信号 
++.PP
++\fBParameters\fP
++.RS 4
++\fIpoint\fP 
++.RE
++.PP
++
++.SS "void kdk::KNativeTabbar::setBackgroundColor (const QColor & color)"
++
++.PP
++设置背景色 
++.PP
++\fBParameters\fP
++.RS 4
++\fIcolor\fP 
++.RE
++.PP
++
++.SS "void kdk::KNativeTabbar::setBorderRadius (int radius)"
++
++.PP
++设置圆角半径,只对SegmentDark,SegmentLight样式生效 
++.PP
++\fBParameters\fP
++.RS 4
++\fIradius\fP 
++.RE
++.PP
++
++.SS "void kdk::KNativeTabbar::setTabbarStyle (KNativeTabbarStyle barStyle)"
++
++.PP
++设置TabBar样式 
++.PP
++\fBParameters\fP
++.RS 4
++\fIbarStyle\fP 
++.RE
++.PP
++
++
++.SH "Author"
++.PP 
++Generated automatically by Doxygen for LIBKYSDK-APPLICATIONS from the source code\&.
+diff --git a/doxygen/man/man3/kdk_KNavigationBar.3 b/doxygen/man/man3/kdk_KNavigationBar.3
+index a7118a5..54185f7 100644
+--- a/doxygen/man/man3/kdk_KNavigationBar.3
++++ b/doxygen/man/man3/kdk_KNavigationBar.3
+@@ -1,4 +1,4 @@
+-.TH "kdk::KNavigationBar" 3 "Thu Oct 12 2023" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.TH "kdk::KNavigationBar" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
+ .ad l
+ .nh
+ .SH NAME
+diff --git a/doxygen/man/man3/kdk_KNavigationTrail.3 b/doxygen/man/man3/kdk_KNavigationTrail.3
+new file mode 100644
+index 0000000..c8a2e99
+--- /dev/null
++++ b/doxygen/man/man3/kdk_KNavigationTrail.3
+@@ -0,0 +1,68 @@
++.TH "kdk::KNavigationTrail" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.ad l
++.nh
++.SH NAME
++kdk::KNavigationTrail
++.SH SYNOPSIS
++.br
++.PP
++.PP
++Inherits QWidget\&.
++.SS "Signals"
++
++.in +1c
++.ti -1c
++.RI "void \fBsizeChange\fP ()"
++.br
++.RI "点击会发出信号 "
++.in -1c
++.SS "Public Member Functions"
++
++.in +1c
++.ti -1c
++.RI "\fBKNavigationTrail\fP (QWidget *parent=nullptr)"
++.br
++.ti -1c
++.RI "\fBKCrumb\fP * \fBcrumb\fP ()"
++.br
++.RI "获取kcrumb "
++.ti -1c
++.RI "void \fBsetPosition\fP (ButtonPosition type)"
++.br
++.RI "设置箭头位置 "
++.in -1c
++.SS "Protected Member Functions"
++
++.in +1c
++.ti -1c
++.RI "void \fBresizeEvent\fP (QResizeEvent *event)"
++.br
++.in -1c
++.SH "Member Function Documentation"
++.PP 
++.SS "\fBKCrumb\fP* kdk::KNavigationTrail::crumb ()"
++
++.PP
++获取kcrumb 
++.PP
++\fBReturns\fP
++.RS 4
++
++.RE
++.PP
++
++.SS "void kdk::KNavigationTrail::setPosition (ButtonPosition type)"
++
++.PP
++设置箭头位置 
++.PP
++\fBParameters\fP
++.RS 4
++\fItype\fP 
++.RE
++.PP
++
++
++.SH "Author"
++.PP 
++Generated automatically by Doxygen for LIBKYSDK-APPLICATIONS from the source code\&.
+diff --git a/doxygen/man/man3/kdk_KPasswordEdit.3 b/doxygen/man/man3/kdk_KPasswordEdit.3
+index de011ee..759c85b 100644
+--- a/doxygen/man/man3/kdk_KPasswordEdit.3
++++ b/doxygen/man/man3/kdk_KPasswordEdit.3
+@@ -1,4 +1,4 @@
+-.TH "kdk::KPasswordEdit" 3 "Thu Oct 12 2023" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.TH "kdk::KPasswordEdit" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
+ .ad l
+ .nh
+ .SH NAME
+diff --git a/doxygen/man/man3/kdk_KPixmapContainer.3 b/doxygen/man/man3/kdk_KPixmapContainer.3
+index 3d2e10c..c92389f 100644
+--- a/doxygen/man/man3/kdk_KPixmapContainer.3
++++ b/doxygen/man/man3/kdk_KPixmapContainer.3
+@@ -1,4 +1,4 @@
+-.TH "kdk::KPixmapContainer" 3 "Thu Oct 12 2023" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.TH "kdk::KPixmapContainer" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
+ .ad l
+ .nh
+ .SH NAME
+diff --git a/doxygen/man/man3/kdk_KPressButton.3 b/doxygen/man/man3/kdk_KPressButton.3
+index 8c0bb62..535e42b 100644
+--- a/doxygen/man/man3/kdk_KPressButton.3
++++ b/doxygen/man/man3/kdk_KPressButton.3
+@@ -1,4 +1,4 @@
+-.TH "kdk::KPressButton" 3 "Thu Oct 12 2023" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.TH "kdk::KPressButton" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
+ .ad l
+ .nh
+ .SH NAME
+diff --git a/doxygen/man/man3/kdk_KProgressBar.3 b/doxygen/man/man3/kdk_KProgressBar.3
+index 3d8061b..a7ddf0d 100644
+--- a/doxygen/man/man3/kdk_KProgressBar.3
++++ b/doxygen/man/man3/kdk_KProgressBar.3
+@@ -1,4 +1,4 @@
+-.TH "kdk::KProgressBar" 3 "Thu Oct 12 2023" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.TH "kdk::KProgressBar" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
+ .ad l
+ .nh
+ .SH NAME
+@@ -37,6 +37,34 @@ Inherits QProgressBar\&.
+ .RI "void \fBsetBodyWidth\fP (int width)"
+ .br
+ .RI "设置进度条宽度 "
++.ti -1c
++.RI "void \fBsetGradationColor\fP (QColor color1, QColor color2)"
++.br
++.RI "设置首尾位置的渐变颜色 "
++.ti -1c
++.RI "void \fBsetBackgroundColor\fP (QColor color)"
++.br
++.RI "设置背景色 "
++.ti -1c
++.RI "void \fBsetFillColor\fP (QColor color)"
++.br
++.RI "设置填充色 "
++.ti -1c
++.RI "void \fBsetGradation\fP (bool flag)"
++.br
++.RI "是否启用自定义渐变色 "
++.ti -1c
++.RI "bool \fBgradation\fP ()"
++.br
++.RI "获取是否启用自定义渐变色 "
++.ti -1c
++.RI "void \fBsetAnimation\fP (bool flag)"
++.br
++.RI "是否启用动画 "
++.ti -1c
++.RI "bool \fBanimation\fP ()"
++.br
++.RI "获取是否启用动画 "
+ .in -1c
+ .SS "Protected Member Functions"
+ 
+diff --git a/doxygen/man/man3/kdk_KProgressCircle.3 b/doxygen/man/man3/kdk_KProgressCircle.3
+index 259a46a..3088d58 100644
+--- a/doxygen/man/man3/kdk_KProgressCircle.3
++++ b/doxygen/man/man3/kdk_KProgressCircle.3
+@@ -1,4 +1,4 @@
+-.TH "kdk::KProgressCircle" 3 "Thu Oct 12 2023" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.TH "kdk::KProgressCircle" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
+ .ad l
+ .nh
+ .SH NAME
+diff --git a/doxygen/man/man3/kdk_KProgressDialog.3 b/doxygen/man/man3/kdk_KProgressDialog.3
+index adbf07b..9bc9d8d 100644
+--- a/doxygen/man/man3/kdk_KProgressDialog.3
++++ b/doxygen/man/man3/kdk_KProgressDialog.3
+@@ -1,4 +1,4 @@
+-.TH "kdk::KProgressDialog" 3 "Thu Oct 12 2023" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.TH "kdk::KProgressDialog" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
+ .ad l
+ .nh
+ .SH NAME
+@@ -84,6 +84,12 @@ Inherits \fBkdk::KDialog\fP\&.
+ .br
+ .RI "设置detail的后缀 "
+ .ti -1c
++.RI "void \fBsetSuffix\fP (const QString &numerator, const QString &denominator)"
++.br
++.ti -1c
++.RI "void \fBsetSpeed\fP (const float &speed)"
++.br
++.ti -1c
+ .RI "void \fBsetShowDetail\fP (bool flag)"
+ .br
+ .RI "设置是否显示详细信息 "
+@@ -123,6 +129,18 @@ Inherits \fBkdk::KDialog\fP\&.
+ .RI "QProgressBar * \fBprogressBar\fP ()"
+ .br
+ .RI "获取进度条 "
++.ti -1c
++.RI "void \fBsetBarType\fP (const \fBBarType\fP &type)"
++.br
++.ti -1c
++.RI "void \fBaddButton\fP (QPushButton *button)"
++.br
++.ti -1c
++.RI "void \fBremoveButton\fP (QPushButton *button)"
++.br
++.ti -1c
++.RI "\fBBarType\fP \fBmyType\fP ()"
++.br
+ .in -1c
+ .SS "Protected Member Functions"
+ 
+diff --git a/doxygen/man/man3/kdk_KProgressLabel.3 b/doxygen/man/man3/kdk_KProgressLabel.3
+new file mode 100644
+index 0000000..326c0e6
+--- /dev/null
++++ b/doxygen/man/man3/kdk_KProgressLabel.3
+@@ -0,0 +1,100 @@
++.TH "kdk::KProgressLabel" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.ad l
++.nh
++.SH NAME
++kdk::KProgressLabel
++.SH SYNOPSIS
++.br
++.PP
++.PP
++Inherits QWidget\&.
++.SS "Public Member Functions"
++
++.in +1c
++.ti -1c
++.RI "\fBKProgressLabel\fP (QWidget *parent=nullptr)"
++.br
++.ti -1c
++.RI "void \fBsetStringList\fP (QStringList list1, QStringList list2)"
++.br
++.RI "设置第二行文本和第一行文本 "
++.ti -1c
++.RI "void \fBsetStringList\fP (QStringList list1)"
++.br
++.RI "setStringList "
++.ti -1c
++.RI "void \fBsetCurrentIndex\fP (int index)"
++.br
++.RI "设置当前进度 "
++.ti -1c
++.RI "int \fBcurrentIndex\fP ()"
++.br
++.RI "获取当前进度 "
++.ti -1c
++.RI "void \fBsetCircleSize\fP (QSize size)"
++.br
++.RI "设置圆形label的大小 "
++.in -1c
++.SH "Member Function Documentation"
++.PP 
++.SS "int kdk::KProgressLabel::currentIndex ()"
++
++.PP
++获取当前进度 
++.PP
++\fBReturns\fP
++.RS 4
++
++.RE
++.PP
++
++.SS "void kdk::KProgressLabel::setCircleSize (QSize size)"
++
++.PP
++设置圆形label的大小 
++.PP
++\fBParameters\fP
++.RS 4
++\fIsize\fP 
++.RE
++.PP
++
++.SS "void kdk::KProgressLabel::setCurrentIndex (int index)"
++
++.PP
++设置当前进度 
++.PP
++\fBParameters\fP
++.RS 4
++\fIindex\fP 
++.RE
++.PP
++
++.SS "void kdk::KProgressLabel::setStringList (QStringList list1)"
++
++.PP
++setStringList 
++.PP
++\fBParameters\fP
++.RS 4
++\fIlist1\fP 
++.RE
++.PP
++
++.SS "void kdk::KProgressLabel::setStringList (QStringList list1, QStringList list2)"
++
++.PP
++设置第二行文本和第一行文本 
++.PP
++\fBParameters\fP
++.RS 4
++\fIlist1\fP 
++.br
++\fIlist2\fP 
++.RE
++.PP
++
++
++.SH "Author"
++.PP 
++Generated automatically by Doxygen for LIBKYSDK-APPLICATIONS from the source code\&.
+diff --git a/doxygen/man/man3/kdk_KPushButton.3 b/doxygen/man/man3/kdk_KPushButton.3
+index 9d95c29..0fbc57d 100644
+--- a/doxygen/man/man3/kdk_KPushButton.3
++++ b/doxygen/man/man3/kdk_KPushButton.3
+@@ -1,4 +1,4 @@
+-.TH "kdk::KPushButton" 3 "Thu Oct 12 2023" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.TH "kdk::KPushButton" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
+ .ad l
+ .nh
+ .SH NAME
+@@ -15,9 +15,12 @@ Inherits QPushButton\&.
+ 
+ .in +1c
+ .ti -1c
+-.RI "enum \fBButtonType\fP { \fBNormalType\fP, \fBCircleType\fP }"
++.RI "enum \fBButtonType\fP { \fBNormalType\fP, \fBCircleType\fP, \fBGrayType\fP, \fBShadowType\fP }"
+ .br
+ .RI "支持两种样式的按钮 "
++.ti -1c
++.RI "enum \fBArrowDirection\fP { \fBArrowTop\fP, \fBArrowBottom\fP, \fBArrowLeft\fP, \fBArrowRight\fP }"
++.br
+ .in -1c
+ .SS "Public Member Functions"
+ 
+@@ -85,6 +88,20 @@ Inherits QPushButton\&.
+ .RI "bool \fBisBackgroundColorHighlight\fP ()"
+ .br
+ .RI "判断按钮背景色是否跟随系统高亮色 "
++.ti -1c
++.RI "void \fBsetArrow\fP (bool flag, ArrowDirection arrowDirection=ArrowBottom)"
++.br
++.RI "设置是否显示箭头flag,设置箭头方向arrowDirection "
++.ti -1c
++.RI "bool \fBhasArrow\fP () const"
++.br
++.RI "返回是否显示箭头 "
++.ti -1c
++.RI "void \fBsetLoaingStatus\fP (bool flag)"
++.br
++.ti -1c
++.RI "bool \fBisLoading\fP ()"
++.br
+ .in -1c
+ .SS "Protected Member Functions"
+ 
+@@ -143,6 +160,22 @@ radius
+ .RE
+ .PP
+ 
++.SS "bool kdk::KPushButton::hasArrow () const"
++
++.PP
++返回是否显示箭头 
++.PP
++\fBReturns\fP
++.RS 4
++bool 
++.RE
++.PP
++\fBSince\fP
++.RS 4
++2\&.4 
++.RE
++.PP
++
+ .SS "QColor kdk::KPushButton::IconColor ()"
+ 
+ .PP
+@@ -187,6 +220,24 @@ radius
+ .RE
+ .PP
+ 
++.SS "void kdk::KPushButton::setArrow (bool flag, ArrowDirection arrowDirection = \fCArrowBottom\fP)"
++
++.PP
++设置是否显示箭头flag,设置箭头方向arrowDirection 
++.PP
++\fBParameters\fP
++.RS 4
++\fIflag\fP 
++.br
++\fIarrowDirection\fP 
++.RE
++.PP
++\fBSince\fP
++.RS 4
++2\&.4 
++.RE
++.PP
++
+ .SS "void kdk::KPushButton::setBackgroundColor (QColor color)"
+ 
+ .PP
+diff --git a/doxygen/man/man3/kdk_KSearchLineEdit.3 b/doxygen/man/man3/kdk_KSearchLineEdit.3
+index 2844c68..cc91fe2 100644
+--- a/doxygen/man/man3/kdk_KSearchLineEdit.3
++++ b/doxygen/man/man3/kdk_KSearchLineEdit.3
+@@ -1,4 +1,4 @@
+-.TH "kdk::KSearchLineEdit" 3 "Thu Oct 12 2023" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.TH "kdk::KSearchLineEdit" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
+ .ad l
+ .nh
+ .SH NAME
+@@ -76,6 +76,22 @@ Inherits QLineEdit\&.
+ .RI "void \fBreloadStyle\fP ()"
+ .br
+ .RI "重新加载style "
++.ti -1c
++.RI "\fBKToolButton\fP * \fBcustomButton\fP ()"
++.br
++.RI "获取自定义按钮 "
++.ti -1c
++.RI "void \fBsetGradation\fP (bool flag)"
++.br
++.RI "是否启用渐变色 "
++.ti -1c
++.RI "void \fBsetCustomButtonVisible\fP (bool flag)"
++.br
++.RI "设置智能语义按钮是否可见 "
++.ti -1c
++.RI "bool \fBisCustomButtonVisible\fP ()"
++.br
++.RI "返回智能语义按钮是否可见 "
+ .in -1c
+ .SS "Protected Member Functions"
+ 
+@@ -90,6 +106,9 @@ Inherits QLineEdit\&.
+ .RI "void \fBsetVisible\fP (bool visible)"
+ .br
+ .ti -1c
++.RI "void \fBpaintEvent\fP (QPaintEvent *event)"
++.br
++.ti -1c
+ .RI "QSize \fBsizeHint\fP () const override"
+ .br
+ .in -1c
+diff --git a/doxygen/man/man3/kdk_KSecurityLevelBar.3 b/doxygen/man/man3/kdk_KSecurityLevelBar.3
+index 3e15834..5f2d270 100644
+--- a/doxygen/man/man3/kdk_KSecurityLevelBar.3
++++ b/doxygen/man/man3/kdk_KSecurityLevelBar.3
+@@ -1,4 +1,4 @@
+-.TH "kdk::KSecurityLevelBar" 3 "Thu Oct 12 2023" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.TH "kdk::KSecurityLevelBar" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
+ .ad l
+ .nh
+ .SH NAME
+diff --git a/doxygen/man/man3/kdk_KSecurityQuestionDialog.3 b/doxygen/man/man3/kdk_KSecurityQuestionDialog.3
+new file mode 100644
+index 0000000..331ae10
+--- /dev/null
++++ b/doxygen/man/man3/kdk_KSecurityQuestionDialog.3
+@@ -0,0 +1,241 @@
++.TH "kdk::KSecurityQuestionDialog" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.ad l
++.nh
++.SH NAME
++kdk::KSecurityQuestionDialog \- 继承自 KDialog,  
++
++.SH SYNOPSIS
++.br
++.PP
++.PP
++\fC#include <ksecurityquestiondialog\&.h>\fP
++.PP
++Inherits \fBkdk::KDialog\fP\&.
++.SS "Public Member Functions"
++
++.in +1c
++.ti -1c
++.RI "\fBKSecurityQuestionDialog\fP (QWidget *parent=nullptr)"
++.br
++.ti -1c
++.RI "void \fBsetTitleText\fP (const QString &text)"
++.br
++.RI "设置对话框标题 "
++.ti -1c
++.RI "void \fBaddSecurityQuestionItem\fP (const int count, bool mutex)"
++.br
++.RI "添加安全问题控件 Label combox Label lineedit tipsLabel "
++.ti -1c
++.RI "void \fBaddSecurityQuestionItem\fP (const int count, bool mutex, bool isVerify)"
++.br
++.RI "添加安全问题控件 Label combox/lineedit Label lineedit tipsLabel "
++.ti -1c
++.RI "void \fBinitQustionCombox\fP (const QStringList &questionlist)"
++.br
++.RI "添加下拉框选项列表 "
++.ti -1c
++.RI "QLabel * \fBquestionLabel\fP (const int questionIndex)"
++.br
++.RI "获取下拉框左侧Label "
++.ti -1c
++.RI "QComboBox * \fBquestionCombox\fP (const int questionIndex)"
++.br
++.RI "获取combox "
++.ti -1c
++.RI "QLabel * \fBanswerLabel\fP (const int answerIndex)"
++.br
++.RI "获取lineedit左侧label "
++.ti -1c
++.RI "QLineEdit * \fBanswerLineedit\fP (const int answerIndex)"
++.br
++.RI "获取 lineedit "
++.ti -1c
++.RI "QLabel * \fBtipsLabel\fP (const int index)"
++.br
++.RI "获取提示 label "
++.ti -1c
++.RI "\fBKPushButton\fP * \fBcancelButton\fP ()"
++.br
++.RI "获取取消按钮 "
++.ti -1c
++.RI "\fBKPushButton\fP * \fBconfirmButton\fP ()"
++.br
++.RI "获取确认按钮 "
++.in -1c
++.SS "Protected Member Functions"
++
++.in +1c
++.ti -1c
++.RI "void \fBkeyPressEvent\fP (QKeyEvent *)"
++.br
++.in -1c
++.SH "Detailed Description"
++.PP 
++继承自 KDialog, 
++
++
++.PP
++\fBSince\fP
++.RS 4
++2\&.4 
++.RE
++.PP
++
++.SH "Member Function Documentation"
++.PP 
++.SS "void kdk::KSecurityQuestionDialog::addSecurityQuestionItem (const int count, bool mutex)"
++
++.PP
++添加安全问题控件 Label combox Label lineedit tipsLabel 
++.PP
++\fBParameters\fP
++.RS 4
++\fIcount\fP 控件个数 
++.br
++\fImutex\fP 是否开启下拉框互斥校验,若开启后,已被选择项,在其他下拉框中被置灰 
++.RE
++.PP
++
++.SS "void kdk::KSecurityQuestionDialog::addSecurityQuestionItem (const int count, bool mutex, bool isVerify)"
++
++.PP
++添加安全问题控件 Label combox/lineedit Label lineedit tipsLabel 
++.PP
++\fBParameters\fP
++.RS 4
++\fIcount\fP 控件个数 
++.br
++\fImutex\fP 是否开启下拉框互斥校验,若开启后,已被选择项,在其他下拉框中被置灰 
++.br
++\fIisVerify\fP 是否为校验窗口 
++.RE
++.PP
++
++.SS "QLabel* kdk::KSecurityQuestionDialog::answerLabel (const int answerIndex)"
++
++.PP
++获取lineedit左侧label 
++.PP
++\fBParameters\fP
++.RS 4
++\fIanswerIndex\fP item索引 [0,count) 
++.RE
++.PP
++\fBReturns\fP
++.RS 4
++QLabel lineedit左侧label,若未获取到,返回nullptr 
++.RE
++.PP
++
++.SS "QLineEdit* kdk::KSecurityQuestionDialog::answerLineedit (const int answerIndex)"
++
++.PP
++获取 lineedit 
++.PP
++\fBParameters\fP
++.RS 4
++\fIanswerIndex\fP item索引 [0,count) 
++.RE
++.PP
++\fBReturns\fP
++.RS 4
++QLineEdit lineedit,若未获取到,返回nullptr 
++.RE
++.PP
++
++.SS "\fBKPushButton\fP* kdk::KSecurityQuestionDialog::cancelButton ()"
++
++.PP
++获取取消按钮 
++.PP
++\fBReturns\fP
++.RS 4
++\fBKPushButton\fP 
++.RE
++.PP
++
++.SS "\fBKPushButton\fP* kdk::KSecurityQuestionDialog::confirmButton ()"
++
++.PP
++获取确认按钮 
++.PP
++\fBReturns\fP
++.RS 4
++\fBKPushButton\fP 
++.RE
++.PP
++
++.SS "void kdk::KSecurityQuestionDialog::initQustionCombox (const QStringList & questionlist)"
++
++.PP
++添加下拉框选项列表 
++.PP
++\fBParameters\fP
++.RS 4
++\fIquestionlist\fP 
++.RE
++.PP
++
++.SS "QComboBox* kdk::KSecurityQuestionDialog::questionCombox (const int questionIndex)"
++
++.PP
++获取combox 
++.PP
++\fBParameters\fP
++.RS 4
++\fIquestionIndex\fP item索引 [0,count) 
++.RE
++.PP
++\fBReturns\fP
++.RS 4
++QComboBox 下拉框,若未获取到,返回nullptr 
++.RE
++.PP
++
++.SS "QLabel* kdk::KSecurityQuestionDialog::questionLabel (const int questionIndex)"
++
++.PP
++获取下拉框左侧Label 
++.PP
++\fBParameters\fP
++.RS 4
++\fIquestionIndex\fP item索引 [0,count) 
++.RE
++.PP
++\fBReturns\fP
++.RS 4
++QLabel 下拉框左侧Label,若未获取到,返回nullptr 
++.RE
++.PP
++
++.SS "void kdk::KSecurityQuestionDialog::setTitleText (const QString & text)"
++
++.PP
++设置对话框标题 
++.PP
++\fBParameters\fP
++.RS 4
++\fItext\fP 标题 
++.RE
++.PP
++
++.SS "QLabel* kdk::KSecurityQuestionDialog::tipsLabel (const int index)"
++
++.PP
++获取提示 label 
++.PP
++\fBParameters\fP
++.RS 4
++\fIindex\fP item 索引 [0,count) 
++.RE
++.PP
++\fBReturns\fP
++.RS 4
++QLabel 提示label,若未获取到,返回nullptr 
++.RE
++.PP
++
++
++.SH "Author"
++.PP 
++Generated automatically by Doxygen for LIBKYSDK-APPLICATIONS from the source code\&.
+diff --git a/doxygen/man/man3/kdk_KSlider.3 b/doxygen/man/man3/kdk_KSlider.3
+index 7cdd773..d3fded7 100644
+--- a/doxygen/man/man3/kdk_KSlider.3
++++ b/doxygen/man/man3/kdk_KSlider.3
+@@ -1,4 +1,4 @@
+-.TH "kdk::KSlider" 3 "Thu Oct 12 2023" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.TH "kdk::KSlider" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
+ .ad l
+ .nh
+ .SH NAME
+diff --git a/doxygen/man/man3/kdk_KSwitchButton.3 b/doxygen/man/man3/kdk_KSwitchButton.3
+index 78b5fd8..5544207 100644
+--- a/doxygen/man/man3/kdk_KSwitchButton.3
++++ b/doxygen/man/man3/kdk_KSwitchButton.3
+@@ -1,4 +1,4 @@
+-.TH "kdk::KSwitchButton" 3 "Thu Oct 12 2023" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.TH "kdk::KSwitchButton" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
+ .ad l
+ .nh
+ .SH NAME
+diff --git a/doxygen/man/man3/kdk_KTabBar.3 b/doxygen/man/man3/kdk_KTabBar.3
+index 928af4b..ade9fdd 100644
+--- a/doxygen/man/man3/kdk_KTabBar.3
++++ b/doxygen/man/man3/kdk_KTabBar.3
+@@ -1,4 +1,4 @@
+-.TH "kdk::KTabBar" 3 "Thu Oct 12 2023" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.TH "kdk::KTabBar" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
+ .ad l
+ .nh
+ .SH NAME
+@@ -11,6 +11,14 @@ kdk::KTabBar \- 支持三种样式
+ \fC#include <ktabbar\&.h>\fP
+ .PP
+ Inherits QTabBar\&.
++.SS "Signals"
++
++.in +1c
++.ti -1c
++.RI "void \fBrightlicked\fP (QPoint point)"
++.br
++.RI "鼠标右键信号 "
++.in -1c
+ .SS "Public Member Functions"
+ 
+ .in +1c
+diff --git a/doxygen/man/man3/kdk_KTableHeaderView.3 b/doxygen/man/man3/kdk_KTableHeaderView.3
+new file mode 100644
+index 0000000..41b7fb6
+--- /dev/null
++++ b/doxygen/man/man3/kdk_KTableHeaderView.3
+@@ -0,0 +1,104 @@
++.TH "kdk::KTableHeaderView" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.ad l
++.nh
++.SH NAME
++kdk::KTableHeaderView
++.SH SYNOPSIS
++.br
++.PP
++.PP
++Inherits QHeaderView\&.
++.SS "Public Slots"
++
++.in +1c
++.ti -1c
++.RI "void \fBcheckStateChangeSlot\fP (int iState)"
++.br
++.in -1c
++.SS "Signals"
++
++.in +1c
++.ti -1c
++.RI "void \fBcheckStateChange\fP (int state)"
++.br
++.ti -1c
++.RI "void \fBclickedHeader\fP (int column)"
++.br
++.in -1c
++.SS "Public Member Functions"
++
++.in +1c
++.ti -1c
++.RI "\fBKTableHeaderView\fP (Qt::Orientation orientation, QWidget *parent=nullptr)"
++.br
++.RI "\fBKTableHeaderView\fP 构造函数 "
++.ti -1c
++.RI "void \fBsetTitle\fP (QStringList list)"
++.br
++.RI "设置水平标题 "
++.ti -1c
++.RI "void \fBsetMenu\fP (QMenu *menu, int column)"
++.br
++.RI "设置menu "
++.in -1c
++.SS "Protected Member Functions"
++
++.in +1c
++.ti -1c
++.RI "void \fBpaintSection\fP (QPainter *painter, const QRect &rect, int logicalIndex) const"
++.br
++.ti -1c
++.RI "void \fBmousePressEvent\fP (QMouseEvent *e)"
++.br
++.ti -1c
++.RI "void \fBmouseReleaseEvent\fP (QMouseEvent *e)"
++.br
++.ti -1c
++.RI "bool \fBevent\fP (QEvent *e)"
++.br
++.in -1c
++.SH "Constructor & Destructor Documentation"
++.PP 
++.SS "kdk::KTableHeaderView::KTableHeaderView (Qt::Orientation orientation, QWidget * parent = \fCnullptr\fP)"
++
++.PP
++\fBKTableHeaderView\fP 构造函数 
++.PP
++\fBParameters\fP
++.RS 4
++\fIorientation\fP 方向 
++.br
++\fIparent\fP 父类对象 
++.RE
++.PP
++
++.SH "Member Function Documentation"
++.PP 
++.SS "void kdk::KTableHeaderView::setMenu (QMenu * menu, int column)"
++
++.PP
++设置menu 
++.PP
++\fBParameters\fP
++.RS 4
++\fImenu\fP 
++.br
++\fIcolumn\fP 
++.RE
++.PP
++
++.SS "void kdk::KTableHeaderView::setTitle (QStringList list)"
++
++.PP
++设置水平标题 
++.PP
++\fBParameters\fP
++.RS 4
++\fIlist\fP 
++.RE
++.PP
++
++
++.SH "Author"
++.PP 
++Generated automatically by Doxygen for LIBKYSDK-APPLICATIONS from the source code\&.
+diff --git a/doxygen/man/man3/kdk_KTableModel.3 b/doxygen/man/man3/kdk_KTableModel.3
+new file mode 100644
+index 0000000..e3425d9
+--- /dev/null
++++ b/doxygen/man/man3/kdk_KTableModel.3
+@@ -0,0 +1,28 @@
++.TH "kdk::KTableModel" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.ad l
++.nh
++.SH NAME
++kdk::KTableModel
++.SH SYNOPSIS
++.br
++.PP
++.PP
++Inherits QStandardItemModel\&.
++.SS "Public Member Functions"
++
++.in +1c
++.ti -1c
++.RI "\fBKTableModel\fP (QObject *parent=nullptr)"
++.br
++.in -1c
++.SS "Protected Member Functions"
++
++.in +1c
++.ti -1c
++.RI "QVariant \fBheaderData\fP (int section, Qt::Orientation orientation, int role=Qt::DisplayRole) const override"
++.br
++.in -1c
++
++.SH "Author"
++.PP 
++Generated automatically by Doxygen for LIBKYSDK-APPLICATIONS from the source code\&.
+diff --git a/doxygen/man/man3/kdk_KTableView.3 b/doxygen/man/man3/kdk_KTableView.3
+new file mode 100644
+index 0000000..ca287c0
+--- /dev/null
++++ b/doxygen/man/man3/kdk_KTableView.3
+@@ -0,0 +1,85 @@
++.TH "kdk::KTableView" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.ad l
++.nh
++.SH NAME
++kdk::KTableView
++.SH SYNOPSIS
++.br
++.PP
++.PP
++Inherits QTableView\&.
++.SS "Signals"
++
++.in +1c
++.ti -1c
++.RI "void \fBhoverIndexChanged\fP (QModelIndex index)"
++.br
++.in -1c
++.SS "Public Member Functions"
++
++.in +1c
++.ti -1c
++.RI "\fBKTableView\fP (QWidget *parent=nullptr)"
++.br
++.ti -1c
++.RI "void \fBsetHorizontalTitle\fP (QStringList list)"
++.br
++.RI "设置水平标题 "
++.ti -1c
++.RI "\fBKTableHeaderView\fP * \fBheaderView\fP ()"
++.br
++.RI "返回水平标题栏 "
++.ti -1c
++.RI "QList< int > \fBselectList\fP ()"
++.br
++.RI "返回所有选中item的行索引 "
++.in -1c
++.SS "Protected Member Functions"
++
++.in +1c
++.ti -1c
++.RI "void \fBmouseMoveEvent\fP (QMouseEvent *event)"
++.br
++.ti -1c
++.RI "bool \fBeventFilter\fP (QObject *object, QEvent *event)"
++.br
++.in -1c
++.SH "Member Function Documentation"
++.PP 
++.SS "\fBKTableHeaderView\fP* kdk::KTableView::headerView ()"
++
++.PP
++返回水平标题栏 
++.PP
++\fBReturns\fP
++.RS 4
++
++.RE
++.PP
++
++.SS "QList<int> kdk::KTableView::selectList ()"
++
++.PP
++返回所有选中item的行索引 
++.PP
++\fBReturns\fP
++.RS 4
++
++.RE
++.PP
++
++.SS "void kdk::KTableView::setHorizontalTitle (QStringList list)"
++
++.PP
++设置水平标题 
++.PP
++\fBParameters\fP
++.RS 4
++\fIlist\fP 
++.RE
++.PP
++
++
++.SH "Author"
++.PP 
++Generated automatically by Doxygen for LIBKYSDK-APPLICATIONS from the source code\&.
+diff --git a/doxygen/man/man3/kdk_KTag.3 b/doxygen/man/man3/kdk_KTag.3
+index 1ebe5ff..9cc6e88 100644
+--- a/doxygen/man/man3/kdk_KTag.3
++++ b/doxygen/man/man3/kdk_KTag.3
+@@ -1,4 +1,4 @@
+-.TH "kdk::KTag" 3 "Thu Oct 12 2023" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.TH "kdk::KTag" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
+ .ad l
+ .nh
+ .SH NAME
+@@ -41,6 +41,18 @@ Inherits QPushButton\&.
+ .RI "TagStyle \fBtagStyle\fP ()"
+ .br
+ .RI "获取当前tag样式 "
++.ti -1c
++.RI "void \fBsetBackgroundColor\fP (QColor color)"
++.br
++.RI "设置背景颜色 "
++.ti -1c
++.RI "void \fBsetTranslucent\fP (bool flag)"
++.br
++.RI "设置半透明 "
++.ti -1c
++.RI "bool \fBtranslucent\fP ()"
++.br
++.RI "获取是否启用半透明 "
+ .in -1c
+ .SS "Protected Member Functions"
+ 
+@@ -68,6 +80,38 @@ bool
+ .RE
+ .PP
+ 
++.SS "void kdk::KTag::setBackgroundColor (QColor color)"
++
++.PP
++设置背景颜色 
++.PP
++\fBParameters\fP
++.RS 4
++\fIflag\fP 
++.RE
++.PP
++\fBSince\fP
++.RS 4
++2\&.4 
++.RE
++.PP
++
++.SS "void kdk::KTag::setTranslucent (bool flag)"
++
++.PP
++设置半透明 
++.PP
++\fBParameters\fP
++.RS 4
++\fIflag\fP 
++.RE
++.PP
++\fBSince\fP
++.RS 4
++2\&.4 
++.RE
++.PP
++
+ .SS "TagStyle kdk::KTag::tagStyle ()"
+ 
+ .PP
+@@ -90,6 +134,22 @@ QString
+ .RE
+ .PP
+ 
++.SS "bool kdk::KTag::translucent ()"
++
++.PP
++获取是否启用半透明 
++.PP
++\fBReturns\fP
++.RS 4
++bool 
++.RE
++.PP
++\fBSince\fP
++.RS 4
++2\&.4 
++.RE
++.PP
++
+ 
+ .SH "Author"
+ .PP 
+diff --git a/doxygen/man/man3/kdk_KTextEdit.3 b/doxygen/man/man3/kdk_KTextEdit.3
+new file mode 100644
+index 0000000..040812e
+--- /dev/null
++++ b/doxygen/man/man3/kdk_KTextEdit.3
+@@ -0,0 +1,120 @@
++.TH "kdk::KTextEdit" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.ad l
++.nh
++.SH NAME
++kdk::KTextEdit \- 继承QTextEdit  
++
++.SH SYNOPSIS
++.br
++.PP
++.PP
++\fC#include <ktextedit\&.h>\fP
++.PP
++Inherits QTextEdit\&.
++.SS "Public Member Functions"
++
++.in +1c
++.ti -1c
++.RI "\fBKTextEdit\fP (QWidget *parent=nullptr)"
++.br
++.ti -1c
++.RI "void \fBsetLabelVisible\fP (bool flag)"
++.br
++.RI "设置label是否可见 "
++.ti -1c
++.RI "void \fBsetPixmap\fP (const QPixmap &\fBpixmap\fP)"
++.br
++.RI "设置图标 "
++.ti -1c
++.RI "const QPixmap * \fBpixmap\fP () const"
++.br
++.RI "获取图标 "
++.ti -1c
++.RI "void \fBsetLabelText\fP (const QString &text)"
++.br
++.RI "设置label文本 "
++.ti -1c
++.RI "void \fBsetReadOnly\fP (bool ro)"
++.br
++.RI "设置是否可编辑状态 "
++.in -1c
++.SS "Protected Member Functions"
++
++.in +1c
++.ti -1c
++.RI "void \fBpaintEvent\fP (QPaintEvent *event)"
++.br
++.in -1c
++.SH "Detailed Description"
++.PP 
++继承QTextEdit 
++
++
++.PP
++\fBSince\fP
++.RS 4
++2\&.4 
++.RE
++.PP
++
++.SH "Member Function Documentation"
++.PP 
++.SS "const QPixmap* kdk::KTextEdit::pixmap () const"
++
++.PP
++获取图标 
++.PP
++\fBReturns\fP
++.RS 4
++
++.RE
++.PP
++
++.SS "void kdk::KTextEdit::setLabelText (const QString & text)"
++
++.PP
++设置label文本 
++.PP
++\fBParameters\fP
++.RS 4
++\fItext\fP 
++.RE
++.PP
++
++.SS "void kdk::KTextEdit::setLabelVisible (bool flag)"
++
++.PP
++设置label是否可见 
++.PP
++\fBParameters\fP
++.RS 4
++\fIflag\fP 
++.RE
++.PP
++
++.SS "void kdk::KTextEdit::setPixmap (const QPixmap & pixmap)"
++
++.PP
++设置图标 
++.PP
++\fBParameters\fP
++.RS 4
++\fIpixmap\fP 
++.RE
++.PP
++
++.SS "void kdk::KTextEdit::setReadOnly (bool ro)"
++
++.PP
++设置是否可编辑状态 
++.PP
++\fBParameters\fP
++.RS 4
++\fIro\fP 
++.RE
++.PP
++
++
++.SH "Author"
++.PP 
++Generated automatically by Doxygen for LIBKYSDK-APPLICATIONS from the source code\&.
+diff --git a/doxygen/man/man3/kdk_KTextEditor.3 b/doxygen/man/man3/kdk_KTextEditor.3
+new file mode 100644
+index 0000000..92d4a81
+--- /dev/null
++++ b/doxygen/man/man3/kdk_KTextEditor.3
+@@ -0,0 +1,34 @@
++.TH "kdk::KTextEditor" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.ad l
++.nh
++.SH NAME
++kdk::KTextEditor
++.SH SYNOPSIS
++.br
++.PP
++.PP
++Inherits QWidget\&.
++.SS "Public Member Functions"
++
++.in +1c
++.ti -1c
++.RI "\fBKTextEditor\fP (QWidget *parent=nullptr)"
++.br
++.ti -1c
++.RI "QTextEdit * \fBtextEdit\fP ()"
++.br
++.in -1c
++.SS "Protected Member Functions"
++
++.in +1c
++.ti -1c
++.RI "void \fBpaintEvent\fP (QPaintEvent *event)"
++.br
++.ti -1c
++.RI "bool \fBeventFilter\fP (QObject *watched, QEvent *event)"
++.br
++.in -1c
++
++.SH "Author"
++.PP 
++Generated automatically by Doxygen for LIBKYSDK-APPLICATIONS from the source code\&.
+diff --git a/doxygen/man/man3/kdk_KTitleWindow.3 b/doxygen/man/man3/kdk_KTitleWindow.3
+new file mode 100644
+index 0000000..3c43f96
+--- /dev/null
++++ b/doxygen/man/man3/kdk_KTitleWindow.3
+@@ -0,0 +1,111 @@
++.TH "kdk::KTitleWindow" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.ad l
++.nh
++.SH NAME
++kdk::KTitleWindow
++.SH SYNOPSIS
++.br
++.PP
++.PP
++Inherits QWidget\&.
++.SS "Public Member Functions"
++
++.in +1c
++.ti -1c
++.RI "\fBKTitleWindow\fP (QWidget *parent=nullptr)"
++.br
++.ti -1c
++.RI "\fBKPushButton\fP * \fBaddButton\fP ()"
++.br
++.RI "获取添加按钮 "
++.ti -1c
++.RI "QPushButton * \fBcolorButton\fP ()"
++.br
++.RI "获取颜色按钮 "
++.ti -1c
++.RI "QPushButton * \fBmenuButton\fP ()"
++.br
++.RI "获取menu按钮 "
++.ti -1c
++.RI "QWidget * \fBbaseWidget\fP ()"
++.br
++.RI "获取widget "
++.ti -1c
++.RI "void \fBsetTitleColor\fP (QColor color)"
++.br
++.RI "设置标题颜色 "
++.in -1c
++.SS "Protected Member Functions"
++
++.in +1c
++.ti -1c
++.RI "void \fBresizeEvent\fP (QResizeEvent *event)"
++.br
++.ti -1c
++.RI "void \fBpaintEvent\fP (QPaintEvent *event)"
++.br
++.ti -1c
++.RI "bool \fBeventFilter\fP (QObject *watched, QEvent *event)"
++.br
++.in -1c
++.SH "Member Function Documentation"
++.PP 
++.SS "\fBKPushButton\fP* kdk::KTitleWindow::addButton ()"
++
++.PP
++获取添加按钮 
++.PP
++\fBReturns\fP
++.RS 4
++
++.RE
++.PP
++
++.SS "QWidget* kdk::KTitleWindow::baseWidget ()"
++
++.PP
++获取widget 
++.PP
++\fBReturns\fP
++.RS 4
++
++.RE
++.PP
++
++.SS "QPushButton* kdk::KTitleWindow::colorButton ()"
++
++.PP
++获取颜色按钮 
++.PP
++\fBReturns\fP
++.RS 4
++
++.RE
++.PP
++
++.SS "QPushButton* kdk::KTitleWindow::menuButton ()"
++
++.PP
++获取menu按钮 
++.PP
++\fBReturns\fP
++.RS 4
++
++.RE
++.PP
++
++.SS "void kdk::KTitleWindow::setTitleColor (QColor color)"
++
++.PP
++设置标题颜色 
++.PP
++\fBParameters\fP
++.RS 4
++\fIcolor\fP 
++.RE
++.PP
++
++
++.SH "Author"
++.PP 
++Generated automatically by Doxygen for LIBKYSDK-APPLICATIONS from the source code\&.
+diff --git a/doxygen/man/man3/kdk_KToolBar.3 b/doxygen/man/man3/kdk_KToolBar.3
+new file mode 100644
+index 0000000..b21a7cc
+--- /dev/null
++++ b/doxygen/man/man3/kdk_KToolBar.3
+@@ -0,0 +1,91 @@
++.TH "kdk::KToolBar" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.ad l
++.nh
++.SH NAME
++kdk::KToolBar
++.SH SYNOPSIS
++.br
++.PP
++.PP
++Inherits QWidget\&.
++.SS "Public Member Functions"
++
++.in +1c
++.ti -1c
++.RI "\fBKToolBar\fP (QWidget *parent=nullptr)"
++.br
++.ti -1c
++.RI "Qt::Orientation \fBorientation\fP ()"
++.br
++.ti -1c
++.RI "void \fBsetOrientation\fP (Qt::Orientation orientation)"
++.br
++.ti -1c
++.RI "\fBKToolButton\fP * \fBaddButton\fP (QIcon icon)"
++.br
++.ti -1c
++.RI "\fBKToolButton\fP * \fBaddButton\fP (QString string)"
++.br
++.ti -1c
++.RI "QList< \fBKToolButton\fP * > \fBaddButton\fP (QList< QIcon > list)"
++.br
++.ti -1c
++.RI "QList< \fBKToolButton\fP * > \fBaddButton\fP (QList< QString > list)"
++.br
++.ti -1c
++.RI "QList< \fBKToolButton\fP * > \fBbuttonList\fP ()"
++.br
++.ti -1c
++.RI "void \fBremoveButton\fP (\fBKToolButton\fP *button)"
++.br
++.ti -1c
++.RI "void \fBremoveButton\fP (int id)"
++.br
++.ti -1c
++.RI "void \fBremoveButton\fP (QList< \fBKToolButton\fP * > list)"
++.br
++.ti -1c
++.RI "void \fBsetBorderRadius\fP (int radius)"
++.br
++.ti -1c
++.RI "int \fBborderRadius\fP ()"
++.br
++.ti -1c
++.RI "void \fBsetExclusive\fP (bool)"
++.br
++.ti -1c
++.RI "bool \fBexclusive\fP ()"
++.br
++.ti -1c
++.RI "void \fBsetCheckable\fP (bool flag)"
++.br
++.ti -1c
++.RI "bool \fBisCheckable\fP ()"
++.br
++.ti -1c
++.RI "QList< \fBKToolButton\fP * > \fBcheckedButton\fP ()"
++.br
++.ti -1c
++.RI "void \fBsetLineVisible\fP (bool flag)"
++.br
++.ti -1c
++.RI "bool \fBisLineVisible\fP ()"
++.br
++.ti -1c
++.RI "void \fBsetBackgroundColorEnabled\fP (bool flag)"
++.br
++.ti -1c
++.RI "bool \fBbackgroundColorEnabled\fP ()"
++.br
++.in -1c
++.SS "Protected Member Functions"
++
++.in +1c
++.ti -1c
++.RI "void \fBpaintEvent\fP (QPaintEvent *event)"
++.br
++.in -1c
++
++.SH "Author"
++.PP 
++Generated automatically by Doxygen for LIBKYSDK-APPLICATIONS from the source code\&.
+diff --git a/doxygen/man/man3/kdk_KToolButton.3 b/doxygen/man/man3/kdk_KToolButton.3
+index e6cb9b1..5a06f1c 100644
+--- a/doxygen/man/man3/kdk_KToolButton.3
++++ b/doxygen/man/man3/kdk_KToolButton.3
+@@ -1,4 +1,4 @@
+-.TH "kdk::KToolButton" 3 "Thu Oct 12 2023" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.TH "kdk::KToolButton" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
+ .ad l
+ .nh
+ .SH NAME
+@@ -11,6 +11,13 @@ kdk::KToolButton \- 提供了一个快速访问按钮,暂不支持显示文本
+ \fC#include <ktoolbutton\&.h>\fP
+ .PP
+ Inherits QToolButton\&.
++.SS "Signals"
++
++.in +1c
++.ti -1c
++.RI "void \fBcheckedChanged\fP (bool checked)"
++.br
++.in -1c
+ .SS "Public Member Functions"
+ 
+ .in +1c
+@@ -49,6 +56,19 @@ Inherits QToolButton\&.
+ .RI "bool \fBhasArrow\fP () const"
+ .br
+ .RI "返回是否显示箭头 "
++.ti -1c
++.RI "void \fBsetIconColor\fP (bool flag, QColor color)"
++.br
++.RI "设置图标颜色 "
++.ti -1c
++.RI "void \fBsetBorderRadius\fP (int bottomLeft, int topLeft, int topRight, int bottomRight)"
++.br
++.ti -1c
++.RI "void \fBsetBackgroundColorEnabled\fP (bool flag)"
++.br
++.ti -1c
++.RI "bool \fBbackgroundColorEnabled\fP ()"
++.br
+ .in -1c
+ .SS "Protected Member Functions"
+ 
+diff --git a/doxygen/man/man3/kdk_KTranslucentFloor.3 b/doxygen/man/man3/kdk_KTranslucentFloor.3
+index 3b1b778..f5ca06b 100644
+--- a/doxygen/man/man3/kdk_KTranslucentFloor.3
++++ b/doxygen/man/man3/kdk_KTranslucentFloor.3
+@@ -1,4 +1,4 @@
+-.TH "kdk::KTranslucentFloor" 3 "Thu Oct 12 2023" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.TH "kdk::KTranslucentFloor" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
+ .ad l
+ .nh
+ .SH NAME
+diff --git a/doxygen/man/man3/kdk_KUninstallDialog.3 b/doxygen/man/man3/kdk_KUninstallDialog.3
+index fc1afbb..71528f2 100644
+--- a/doxygen/man/man3/kdk_KUninstallDialog.3
++++ b/doxygen/man/man3/kdk_KUninstallDialog.3
+@@ -1,4 +1,4 @@
+-.TH "kdk::KUninstallDialog" 3 "Thu Oct 12 2023" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.TH "kdk::KUninstallDialog" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
+ .ad l
+ .nh
+ .SH NAME
+diff --git a/doxygen/man/man3/kdk_KVLineFrame.3 b/doxygen/man/man3/kdk_KVLineFrame.3
+index 6949547..ec09985 100644
+--- a/doxygen/man/man3/kdk_KVLineFrame.3
++++ b/doxygen/man/man3/kdk_KVLineFrame.3
+@@ -1,4 +1,4 @@
+-.TH "kdk::KVLineFrame" 3 "Thu Oct 12 2023" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.TH "kdk::KVLineFrame" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
+ .ad l
+ .nh
+ .SH NAME
+@@ -14,7 +14,29 @@ Inherits QFrame\&.
+ .ti -1c
+ .RI "\fBKVLineFrame\fP (QWidget *parent=nullptr)"
+ .br
++.ti -1c
++.RI "void \fBsetFollowPalette\fP (bool flag)"
++.br
++.RI "设置是否遵循默认色板 "
+ .in -1c
++.SH "Member Function Documentation"
++.PP 
++.SS "void kdk::KVLineFrame::setFollowPalette (bool flag)"
++
++.PP
++设置是否遵循默认色板 
++.PP
++\fBParameters\fP
++.RS 4
++\fIflag\fP 
++.RE
++.PP
++\fBSince\fP
++.RS 4
++2\&.4 
++.RE
++.PP
++
+ 
+ .SH "Author"
+ .PP 
+diff --git a/doxygen/man/man3/kdk_KWidget.3 b/doxygen/man/man3/kdk_KWidget.3
+index cd956d6..aa56f3c 100644
+--- a/doxygen/man/man3/kdk_KWidget.3
++++ b/doxygen/man/man3/kdk_KWidget.3
+@@ -1,4 +1,4 @@
+-.TH "kdk::KWidget" 3 "Thu Oct 12 2023" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.TH "kdk::KWidget" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
+ .ad l
+ .nh
+ .SH NAME
+diff --git a/doxygen/man/man3/kdk_KWidgetUtils.3 b/doxygen/man/man3/kdk_KWidgetUtils.3
+index bb475ae..2d98ab3 100644
+--- a/doxygen/man/man3/kdk_KWidgetUtils.3
++++ b/doxygen/man/man3/kdk_KWidgetUtils.3
+@@ -1,4 +1,4 @@
+-.TH "kdk::KWidgetUtils" 3 "Thu Oct 12 2023" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.TH "kdk::KWidgetUtils" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
+ .ad l
+ .nh
+ .SH NAME
+diff --git a/doxygen/man/man3/kdk_KWindowButtonBar.3 b/doxygen/man/man3/kdk_KWindowButtonBar.3
+index f45d706..ccd468f 100644
+--- a/doxygen/man/man3/kdk_KWindowButtonBar.3
++++ b/doxygen/man/man3/kdk_KWindowButtonBar.3
+@@ -1,4 +1,4 @@
+-.TH "kdk::KWindowButtonBar" 3 "Thu Oct 12 2023" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.TH "kdk::KWindowButtonBar" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
+ .ad l
+ .nh
+ .SH NAME
+diff --git a/doxygen/man/man3/kdk_Parmscontroller.3 b/doxygen/man/man3/kdk_Parmscontroller.3
+index 649f2ad..037a175 100644
+--- a/doxygen/man/man3/kdk_Parmscontroller.3
++++ b/doxygen/man/man3/kdk_Parmscontroller.3
+@@ -1,4 +1,4 @@
+-.TH "kdk::Parmscontroller" 3 "Thu Oct 12 2023" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.TH "kdk::Parmscontroller" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
+ .ad l
+ .nh
+ .SH NAME
+diff --git a/doxygen/man/man3/kdk_UkuiStyleHelper.3 b/doxygen/man/man3/kdk_UkuiStyleHelper.3
+index 4243258..be73632 100644
+--- a/doxygen/man/man3/kdk_UkuiStyleHelper.3
++++ b/doxygen/man/man3/kdk_UkuiStyleHelper.3
+@@ -1,4 +1,4 @@
+-.TH "kdk::UkuiStyleHelper" 3 "Thu Oct 12 2023" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.TH "kdk::UkuiStyleHelper" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
+ .ad l
+ .nh
+ .SH NAME
+diff --git a/doxygen/man/man3/kdk_WindowManager.3 b/doxygen/man/man3/kdk_WindowManager.3
+index d8eff04..83aca4c 100644
+--- a/doxygen/man/man3/kdk_WindowManager.3
++++ b/doxygen/man/man3/kdk_WindowManager.3
+@@ -1,4 +1,4 @@
+-.TH "kdk::WindowManager" 3 "Thu Oct 12 2023" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.TH "kdk::WindowManager" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
+ .ad l
+ .nh
+ .SH NAME
+@@ -86,6 +86,10 @@ Inherits QObject\&.
+ .RI "void \fBgeometryChanged\fP (const WindowId &wid)"
+ .br
+ .RI "窗口位置改变信号 "
++.ti -1c
++.RI "void \fBoutputInfoChanged\fP (OutputInfo *)"
++.br
++.RI "屏幕信息改变信号 "
+ .in -1c
+ .SS "Static Public Member Functions"
+ 
+@@ -210,6 +214,74 @@ Inherits QObject\&.
+ .RI "static QString \fBgetProcessName\fP (const WindowId &windowId)"
+ .br
+ .RI "获取窗口所属的进程名称 "
++.ti -1c
++.RI "static void \fBsetWindowRadius\fP (QWindow *window, int radius)"
++.br
++.RI "setWindowRadius "
++.ti -1c
++.RI "static void \fBactivateWindow\fP (QWindow *window1, QWindow *window2)"
++.br
++.RI "activateWindow "
++.ti -1c
++.RI "static QRect \fBwindowGeometry\fP (const WindowId &windowId)"
++.br
++.RI "windowGeometry "
++.ti -1c
++.RI "static void \fBsetPanelAutoHide\fP (QWindow *window, bool autoHide)"
++.br
++.RI "setPanelAutoHide "
++.ti -1c
++.RI "static void \fBsetGrabKeyboard\fP (QWindow *window, bool grabKeyboard)"
++.br
++.RI "setGrabKeyboard "
++.ti -1c
++.RI "static void \fBsetWindowLayer\fP (QWindow *window, WindowLayer layer)"
++.br
++.RI "setWindowLayer "
++.ti -1c
++.RI "static WindowLayer \fBwindowLayer\fP (QWindow *window)"
++.br
++.RI "windowLayer "
++.ti -1c
++.RI "static void \fBsetHighlight\fP (const WindowId &wid, bool highlight)"
++.br
++.RI "setHighlight "
++.ti -1c
++.RI "static bool \fBisHightlight\fP (const WindowId &wid)"
++.br
++.RI "isHightlight "
++.ti -1c
++.RI "static void \fBsetOpenUnderCursor\fP (QWindow *window)"
++.br
++.RI "setOpenUnderCursor "
++.ti -1c
++.RI "static void \fBsetOpenUnderCursor\fP (QWindow *window, int x, int y)"
++.br
++.RI "setOpenUnderCursor "
++.ti -1c
++.RI "static void \fBsetIconName\fP (QWindow *window, const QString &iconName)"
++.br
++.RI "setIconName "
++.ti -1c
++.RI "static QString \fBcurrentSeatName\fP ()"
++.br
++.RI "currentSeatName "
++.ti -1c
++.RI "static QString \fBcurrentOutputName\fP ()"
++.br
++.RI "currentOutputName "
++.ti -1c
++.RI "static QList< OutputInfo * > \fBoutputsInfo\fP ()"
++.br
++.RI "outputsInfo "
++.ti -1c
++.RI "static QList< WindowId > \fBgetWindowIdByPid\fP (quint32 pid)"
++.br
++.RI "getWindowIdByPid "
++.ti -1c
++.RI "static QList< WindowId > \fBgetWindowIdByTtile\fP (const QString &title)"
++.br
++.RI "getWindowIdByTtile "
+ .in -1c
+ .SH "Detailed Description"
+ .PP 
+@@ -236,6 +308,24 @@ Inherits QObject\&.
+ .RE
+ .PP
+ 
++.SS "static void kdk::WindowManager::activateWindow (QWindow * window1, QWindow * window2)\fC [static]\fP"
++
++.PP
++activateWindow 
++.PP
++\fBSince\fP
++.RS 4
++2\&.5 
++.RE
++.PP
++\fBParameters\fP
++.RS 4
++\fIwindow1\fP 
++.br
++\fIwindow2\fP 
++.RE
++.PP
++
+ .SS "void kdk::WindowManager::activeChanged (const WindowId & wid)\fC [signal]\fP"
+ 
+ .PP
+@@ -307,6 +397,36 @@ Inherits QObject\&.
+ .RE
+ .PP
+ 
++.SS "static QString kdk::WindowManager::currentOutputName ()\fC [static]\fP"
++
++.PP
++currentOutputName 
++.PP
++\fBSince\fP
++.RS 4
++2\&.5 
++.RE
++.PP
++\fBReturns\fP
++.RS 4
++.RE
++.PP
++
++.SS "static QString kdk::WindowManager::currentSeatName ()\fC [static]\fP"
++
++.PP
++currentSeatName 
++.PP
++\fBSince\fP
++.RS 4
++2\&.5 
++.RE
++.PP
++\fBReturns\fP
++.RS 4
++.RE
++.PP
++
+ .SS "static void kdk::WindowManager::demandAttention (const WindowId & wid)\fC [static]\fP"
+ 
+ .PP
+@@ -432,6 +552,36 @@ demandsAttention状态改变信号
+ .RE
+ .PP
+ 
++.SS "static QList<WindowId> kdk::WindowManager::getWindowIdByPid (quint32 pid)\fC [static]\fP"
++
++.PP
++getWindowIdByPid 
++.PP
++\fBSince\fP
++.RS 4
++2\&.5 
++.RE
++.PP
++\fBReturns\fP
++.RS 4
++.RE
++.PP
++
++.SS "static QList<WindowId> kdk::WindowManager::getWindowIdByTtile (const QString & title)\fC [static]\fP"
++
++.PP
++getWindowIdByTtile 
++.PP
++\fBSince\fP
++.RS 4
++2\&.5 
++.RE
++.PP
++\fBReturns\fP
++.RS 4
++.RE
++.PP
++
+ .SS "static WindowInfo kdk::WindowManager::getwindowInfo (const WindowId & windowId)\fC [static]\fP"
+ 
+ .PP
+@@ -493,6 +643,22 @@ demandsAttention状态改变信号
+ .RE
+ .PP
+ 
++.SS "static bool kdk::WindowManager::isHightlight (const WindowId & wid)\fC [static]\fP"
++
++.PP
++isHightlight 
++.PP
++\fBSince\fP
++.RS 4
++2\&.5 
++.RE
++.PP
++\fBParameters\fP
++.RS 4
++\fIwid\fP 
++.RE
++.PP
++
+ .SS "static bool kdk::WindowManager::isOnAllDesktops (const WindowId & windowId)\fC [static]\fP"
+ 
+ .PP
+@@ -667,6 +833,32 @@ onAllDesktopsChanged
+ .RE
+ .PP
+ 
++.SS "void kdk::WindowManager::outputInfoChanged (OutputInfo *)\fC [signal]\fP"
++
++.PP
++屏幕信息改变信号 
++.PP
++\fBSince\fP
++.RS 4
++2\&.5 
++.RE
++.PP
++
++.SS "static QList<OutputInfo*> kdk::WindowManager::outputsInfo ()\fC [static]\fP"
++
++.PP
++outputsInfo 
++.PP
++\fBSince\fP
++.RS 4
++2\&.5 
++.RE
++.PP
++\fBReturns\fP
++.RS 4
++.RE
++.PP
++
+ .SS "static \fBWindowManager\fP* kdk::WindowManager::self ()\fC [static]\fP"
+ 
+ .PP
+@@ -691,6 +883,60 @@ self
+ .RE
+ .PP
+ 
++.SS "static void kdk::WindowManager::setGrabKeyboard (QWindow * window, bool grabKeyboard)\fC [static]\fP"
++
++.PP
++setGrabKeyboard 
++.PP
++\fBSince\fP
++.RS 4
++2\&.5 
++.RE
++.PP
++\fBParameters\fP
++.RS 4
++\fIwindow\fP 
++.br
++\fIgrabKeyboard\fP 
++.RE
++.PP
++
++.SS "static void kdk::WindowManager::setHighlight (const WindowId & wid, bool highlight)\fC [static]\fP"
++
++.PP
++setHighlight 
++.PP
++\fBSince\fP
++.RS 4
++2\&.5 
++.RE
++.PP
++\fBParameters\fP
++.RS 4
++\fIwid\fP 
++.br
++\fIhighlight\fP 
++.RE
++.PP
++
++.SS "static void kdk::WindowManager::setIconName (QWindow * window, const QString & iconName)\fC [static]\fP"
++
++.PP
++setIconName 
++.PP
++\fBSince\fP
++.RS 4
++2\&.5 
++.RE
++.PP
++\fBParameters\fP
++.RS 4
++\fIwindow\fP 
++.br
++\fIiconName\fP 
++.RE
++.PP
++
+ .SS "static void kdk::WindowManager::setOnAllDesktops (const WindowId & windowId)\fC [static]\fP"
+ 
+ .PP
+@@ -707,6 +953,60 @@ self
+ .RE
+ .PP
+ 
++.SS "static void kdk::WindowManager::setOpenUnderCursor (QWindow * window)\fC [static]\fP"
++
++.PP
++setOpenUnderCursor 
++.PP
++\fBSince\fP
++.RS 4
++2\&.5 
++.RE
++.PP
++\fBParameters\fP
++.RS 4
++\fIwindow\fP 
++.RE
++.PP
++
++.SS "static void kdk::WindowManager::setOpenUnderCursor (QWindow * window, int x, int y)\fC [static]\fP"
++
++.PP
++setOpenUnderCursor 
++.PP
++\fBSince\fP
++.RS 4
++2\&.5 
++.RE
++.PP
++\fBParameters\fP
++.RS 4
++\fIwindow\fP 
++.br
++\fIx\fP 
++.br
++\fIy\fP 
++.RE
++.PP
++
++.SS "static void kdk::WindowManager::setPanelAutoHide (QWindow * window, bool autoHide)\fC [static]\fP"
++
++.PP
++setPanelAutoHide 
++.PP
++\fBSince\fP
++.RS 4
++2\&.5 
++.RE
++.PP
++\fBParameters\fP
++.RS 4
++\fIwindow\fP 
++.br
++\fIautoHide\fP 
++.RE
++.PP
++
+ .SS "static void kdk::WindowManager::setPanelTakefocus (QWindow * window, bool flag)\fC [static]\fP"
+ 
+ .PP
+@@ -761,6 +1061,42 @@ self
+ .RE
+ .PP
+ 
++.SS "static void kdk::WindowManager::setWindowLayer (QWindow * window, WindowLayer layer)\fC [static]\fP"
++
++.PP
++setWindowLayer 
++.PP
++\fBSince\fP
++.RS 4
++2\&.5 
++.RE
++.PP
++\fBParameters\fP
++.RS 4
++\fIwindow\fP 
++.br
++\fIlayer\fP 
++.RE
++.PP
++
++.SS "static void kdk::WindowManager::setWindowRadius (QWindow * window, int radius)\fC [static]\fP"
++
++.PP
++setWindowRadius 
++.PP
++\fBSince\fP
++.RS 4
++2\&.5 
++.RE
++.PP
++\fBParameters\fP
++.RS 4
++\fIwindow\fP 
++.br
++\fIradius\fP 
++.RE
++.PP
++
+ .SS "static bool kdk::WindowManager::skipSwitcher (const WindowId & windowId)\fC [static]\fP"
+ 
+ .PP
+@@ -871,6 +1207,46 @@ self
+ .RE
+ .PP
+ 
++.SS "static QRect kdk::WindowManager::windowGeometry (const WindowId & windowId)\fC [static]\fP"
++
++.PP
++windowGeometry 
++.PP
++\fBSince\fP
++.RS 4
++2\&.5 
++.RE
++.PP
++\fBParameters\fP
++.RS 4
++\fIwindowId\fP 
++.RE
++.PP
++\fBReturns\fP
++.RS 4
++.RE
++.PP
++
++.SS "static WindowLayer kdk::WindowManager::windowLayer (QWindow * window)\fC [static]\fP"
++
++.PP
++windowLayer 
++.PP
++\fBSince\fP
++.RS 4
++2\&.5 
++.RE
++.PP
++\fBParameters\fP
++.RS 4
++\fIwindow\fP 
++.RE
++.PP
++\fBReturns\fP
++.RS 4
++.RE
++.PP
++
+ .SS "void kdk::WindowManager::windowRemoved (const WindowId & windowId)\fC [signal]\fP"
+ 
+ .PP
+diff --git a/doxygen/man/man3/kdk_effects_KShadowHelper.3 b/doxygen/man/man3/kdk_effects_KShadowHelper.3
+index 7c2acd2..f2df94a 100644
+--- a/doxygen/man/man3/kdk_effects_KShadowHelper.3
++++ b/doxygen/man/man3/kdk_effects_KShadowHelper.3
+@@ -1,4 +1,4 @@
+-.TH "kdk::effects::KShadowHelper" 3 "Thu Oct 12 2023" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.TH "kdk::effects::KShadowHelper" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
+ .ad l
+ .nh
+ .SH NAME
+diff --git a/doxygen/man/man3/timerModule.3 b/doxygen/man/man3/timerModule.3
+new file mode 100644
+index 0000000..e24e767
+--- /dev/null
++++ b/doxygen/man/man3/timerModule.3
+@@ -0,0 +1,21 @@
++.TH "timerModule" 3 "Thu Nov 14 2024" "Version version:2.3" "LIBKYSDK-APPLICATIONS" \" -*- nroff -*-
++.ad l
++.nh
++.SH NAME
++timerModule
++.SH SYNOPSIS
++.br
++.PP
++.SH "Detailed Description"
++.PP 
++
++.PP
++\fBSince\fP
++.RS 4
++2\&.5 
++.RE
++.PP
++
++.SH "Author"
++.PP 
++Generated automatically by Doxygen for LIBKYSDK-APPLICATIONS from the source code\&.
+diff --git a/kysdk-qtwidgets/translations/gui_bo_CN.qm b/kysdk-qtwidgets/translations/gui_bo_CN.qm
+index 84db47c..a7fd02a 100644
+--- a/kysdk-qtwidgets/translations/gui_bo_CN.qm
++++ b/kysdk-qtwidgets/translations/gui_bo_CN.qm
+@@ -1,7 +1,7 @@
+-<�d��!�`���B��(��[�����Sg��	^��Sg��	������������������������	������G������J6�����PFE��
A�R�����Z�|��
+-��Z�5��@�Ɨh�����u���ilyz���t):��
+-0t):��:�����0;����	�������{��[�I���N�I���zm���lʶ���Cʶ���
��F5����F5���	�����c	�<���K	˰���
+-2����
+-�
+-2�����X�4����d����i��
����,0
+-BfDV`rBfcVf��Bf
� 0�������Privacy statement���kdk::KAboutDialog���8^Vf^tQDb��Vf��|bZ|BfT�������Service & Support: ���kdk::KAboutDialog���Pf��Bb�fIzbf��|QV�brXAU�zXrPtV
�������Unable to open mail application���kdk::KAboutDialog����A�zQbDBrXcBcB�|Bb�tcf��Bb�fBDbtD^rBf��rBf��|bV�fXzQT`XaDSf��Bb�fV@|cf��|QV�fXzQ

�������gYour system does not have any email application installed or the default mail application is not set up���kdk::KAboutDialog���<TbB^r`rhDB�Dfb�zQXV�tD
�������Version number not found���kdk::KAboutDialogPrivate���TbB^r
�������	version :���kdk::KAboutDialogPrivate����arBF`rb�BfXZS`B|QT`rPVfcX`QzXfT`XaDS`Q�tQBO|DV�fT
�������6Select or drag and drop the folder identification path���kdk::KDragWidget���,arBF`QzXfb|BfBSD
�������Please select file���kdk::KDragWidgetPrivate���DA�|Q@�rfB�Df@SD`GtBBSDb|Bf
�������Enter a value:���kdk::KInputDialog��� XzQTbV_|QB|f
�������cancel���kdk::KInputDialogPrivate���"QD|fftAfczST
�������ok���kdk::KInputDialogPrivate���Qz`rf�|b
�������About���kdk::KMenuButton���$b|BfbXV�zQQB|f
�������Assist���kdk::KMenuButton���,XcBBrb�zfft`V�DV�������Auto���kdk::KMenuButton���Z|fB^r_VT
�������Dark���kdk::KMenuButton���XQ|Bf�tBT|
�������Light���kdk::KMenuButton���`QzXfZS�������Options���kdk::KMenuButton���$U�rb`PzSV�QB|f
�������Quit���kdk::KMenuButton���.V@|Qf��rBVEfV�QB|f
�������Setting���kdk::KMenuButton���U�rZtc
�������Theme���kdk::KMenuButton��� XzQTbV_|QB|f
�������cancel���kdk::KProgressDialog��� `Z|c^rVV�zQT
�������Search���kdk::KSearchLineEditPrivate���XP|ST|
�������High���kdk::KSecurityLevelBar���QX`V
�������Low���kdk::KSecurityLevelBar���&@�tDB|`rBtD@�tD�������Medium���kdk::KSecurityLevelBar���QX`V
�������Low���kdk::KSecurityLevelBarPrivate���.`BSBYDczST`rXrD`Qr�������	deb name:���kdk::KUninstallDialog���TbB^r
�������deb version:���kdk::KUninstallDialog���2`U�cXbUVczSV�zQQB|f
�������	uninstall���kdk::KUninstallDialog���.`BSBYDczST`rXrD`Qr�������	deb name:���kdk::KUninstallDialogPrivate���TbB^r
�������deb version:���kdk::KUninstallDialogPrivate���$Fzd|fftf��tbV�������Maximize���kdk::KWindowButtonBar���$f�bBf|V�zQQB|f
�������Restore���kdk::KWindowButtonBar���f�|b��BT�������Close���kdk::KWindowButtonBarPrivate���$Fzd|fftf��tbV�������Maximize���kdk::KWindowButtonBarPrivate���FzfFtDES�������Minimize���kdk::KWindowButtonBarPrivate���$f�bBf|V�zQQB|f
�������Restore���kdk::KWindowButtonBarPrivate
+\ No newline at end of file
++<�d��!�`��ݧ���bo_CNB��h��[����Sg����Sg�����������������������0��z�����
++�����	I�������G����a�J6���Y�PFE���R������Z�|��
��Z�5��	��Ɨh�����u���klyz��E������St):���t):��
��I���A;����H�����
++y{��	�B�����I�����I���
++*m����m����ʶ���ʶ���Q�F5����F5���	����e	�<���M	˰��	�
++2����
R
++2����c��[��7�k������
4���X�4��d����i������*f�|b��BT`rbz`tXrB�������	Close Tab���CloseButton���4Ba|SU�|Bfftd|Bc�zBErB�������Scroll Left���
KCustomTabBar��� BafU�|BfftQ@��������Scroll Right���
KCustomTabBar���,0
++BfDV`rBfcVf��Bf
� 0�������Privacy statement���kdk::KAboutDialog���8^Vf^tQDb��Vf��|bZ|BfT�������Service & Support: ���kdk::KAboutDialog���Pf��Bb�fIzbf��|QV�brXAU�zXrPtV
�������Unable to open mail application���kdk::KAboutDialog����A�zQbDBrXcBcB�|Bb�tcf��Bb�fBDbtD^rBf��rBf��|bV�fXzQT`XaDSf��Bb�fV@|cf��|QV�fXzQ

�������gYour system does not have any email application installed or the default mail application is not set up���kdk::KAboutDialog���<TbB^r`rhDB�Dfb�zQXV�tD
�������Version number not found���kdk::KAboutDialogPrivate���TbB^r
�������	version :���kdk::KAboutDialogPrivate���,arBF`QzXfb|BfBSD
�������Please select file���kdk::KAddFileButtonPrivate����arBF`rb�BfXZS`B|QT`rPVfcX`QzXfT`XaDS`Q�tQBO|DV�fT
�������6Select or drag and drop the folder identification path���kdk::KDragWidget���,arBF`QzXfb|BfBSD
�������Please select file���kdk::KDragWidgetPrivate���DA�|Q@�rfB�Df@SD`GtBBSDb|Bf
�������Enter a value:���kdk::KInputDialog��� XzQTbV_|QB|f
�������cancel���kdk::KInputDialogPrivate���"QD|fftAfczST
�������ok���kdk::KInputDialogPrivate���Qz`rf�|b
�������About���kdk::KMenuButton���,XcBBrb�zfft`V�DV�������Auto���kdk::KMenuButton���Z|fB^r_VT
�������Dark���kdk::KMenuButton���c�|B`Q�zS�������Feedback���kdk::KMenuButton���$b|BfbXV�zQQB|f
�������Help���kdk::KMenuButton���XQ|Bf�tBT|
�������Light���kdk::KMenuButton���`QzXfZS�������Options���kdk::KMenuButton���$U�rb`PzSV�QB|f
�������Quit���kdk::KMenuButton���.V@|Qf��rBVEfV�QB|f
�������Setting���kdk::KMenuButton���U�rZtc
�������Theme���kdk::KMenuButton��� XzQTbV_|QB|f
�������cancel���kdk::KProgressDialog��� `Z|c^rVV�zQT
�������Search���kdk::KSearchLineEditPrivate���XP|ST|
�������High���kdk::KSecurityLevelBar���QX`V
�������Low���kdk::KSecurityLevelBar���&@�tDB|`rBtD@�tD�������Medium���kdk::KSecurityLevelBar���QX`V
�������Low���kdk::KSecurityLevelBarPrivate���(DzfTbQtf�|DQB|f
�������Required���kdk::KSecurityQuestionDialog���U�rb`PzS
�������Cancel���#kdk::KSecurityQuestionDialogPrivate���"IbZBfV�zQQB|f
�������Save���#kdk::KSecurityQuestionDialogPrivate���.`BSBYDczST`rXrD`Qr�������	deb name:���kdk::KUninstallDialog���TbB^r
�������deb version:���kdk::KUninstallDialog���2`U�cXbUVczSV�zQQB|f
�������	uninstall���kdk::KUninstallDialog���.`BSBYDczST`rXrD`Qr�������	deb name:���kdk::KUninstallDialogPrivate���TbB^r
�������deb version:���kdk::KUninstallDialogPrivate���$Fzd|fftf��tbV�������Maximize���kdk::KWindowButtonBar���$f�bBf|V�zQQB|f
�������Restore���kdk::KWindowButtonBar���f�|b��BT�������Close���kdk::KWindowButtonBarPrivate���$Fzd|fftf��tbV�������Maximize���kdk::KWindowButtonBarPrivate���FzfFtDES�������Minimize���kdk::KWindowButtonBarPrivate���$f�bBf|V�zQQB|f
�������Restore���kdk::KWindowButtonBarPrivate
+\ No newline at end of file
+diff --git a/kysdk-qtwidgets/translations/gui_de.qm b/kysdk-qtwidgets/translations/gui_de.qm
+index 995f437..41112ba 100644
+--- a/kysdk-qtwidgets/translations/gui_de.qm
++++ b/kysdk-qtwidgets/translations/gui_de.qm
+@@ -1,9 +1,9 @@
+-<�d��!�`���B��(��[�����Sg��n��Sg���������������-�����^�����7�����G������J6���D�PFE����R������Z�|��	��Z�5����Ɨh��k��u���Ylyz���t):��	*t):��
+-������;�����������{����I���H�I����m���fʶ���
+-�ʶ���&�F5��
+-��F5���	�����_	�<���%	˰��>
+-2����	o
+-2����
+-XX�4����d����i��~���(�D�a�t�e�n�s�c�h�u�t�z�e�r�k�l���r�u�n�g�������Privacy statement���kdk::KAboutDialog���&�S�e�r�v�i�c�e� �&� �S�u�p�p�o�r�t�:� �������Service & Support: ���kdk::KAboutDialog���V�E�-�M�a�i�l�-�A�n�w�e�n�d�u�n�g� �k�a�n�n� �n�i�c�h�t� �g�e���f�f�n�e�t� �w�e�r�d�e�n�������Unable to open mail application���kdk::KAboutDialog�����S�i�e� �h�a�b�e�n� �k�e�i�n�e� �E�-�M�a�i�l�-�A�p�p�s� �a�u�f� �I�h�r�e�m� �S�y�s�t�e�m� �i�n�s�t�a�l�l�i�e�r�t� �o�d�e�r� �k�e�i�n�e� �S�t�a�n�d�a�r�d�-�M�a�i�l�-�A�p�p� �f�e�s�t�g�e�l�e�g�t�������gYour system does not have any email application installed or the default mail application is not set up���kdk::KAboutDialog���:�V�e�r�s�i�o�n�s�n�u�m�m�e�r� �n�i�c�h�t� �g�e�f�u�n�d�e�n�������Version number not found���kdk::KAboutDialogPrivate����V�e�r�s�i�o�n�:�������	version :���kdk::KAboutDialogPrivate�����W���h�l�e�n� �S�i�e� �d�e�n� �O�r�d�n�e�r�i�d�e�n�t�i�f�i�k�a�t�i�o�n�s�p�f�a�d� �a�u�s� �o�d�e�r� �z�i�e�h�e�n� �S�i�e� �i�h�n� �p�e�r� �D�r�a�g� �&� �D�r�o�p�������6Select or drag and drop the folder identification path���kdk::KDragWidget���>�B�i�t�t�e� �w���h�l�e�n� �S�i�e� �e�i�n�e� �D�a�t�e�i� �a�u�s�������Please select file���kdk::KDragWidgetPrivate���2�G�e�b�e�n� �S�i�e� �e�i�n�e�n� �W�e�r�t� �e�i�n�:�������Enter a value:���kdk::KInputDialog����A�b�b�r�e�c�h�e�n�������cancel���kdk::KInputDialogPrivate����O�k�a�y�������ok���kdk::KInputDialogPrivate������b�e�r�������About���kdk::KMenuButton����H�e�l�f�e�n�������Assist���kdk::KMenuButton����A�u�t�o�������Auto���kdk::KMenuButton����D�u�n�k�e�l�������Dark���kdk::KMenuButton���
++<�d��!�`��ݧ���deB��X��[��U��Sg��	o��Sg��	��������������������0��a�����	8���������
++��G������J6���
.�PFE��
��R������Z�|����Z�5����Ɨh��3��u����lyz���t):��t):����I���
++|;����	�������{����B�����I����I����m����m���.ʶ����ʶ����F5����F5��
v	������	�<���n	˰��?
++2����Y
++2����B��[��$�
4��
+++X�4���Id����i��h��� �R�e�i�t�e�r� �s�c�h�l�i�e���e�n�������	Close Tab���CloseButton���(�D�a�t�e�n�s�c�h�u�t�z�e�r�k�l���r�u�n�g�������Privacy statement���kdk::KAboutDialog���&�S�e�r�v�i�c�e� �&� �S�u�p�p�o�r�t�:� �������Service & Support: ���kdk::KAboutDialog���V�E�-�M�a�i�l�-�A�n�w�e�n�d�u�n�g� �k�a�n�n� �n�i�c�h�t� �g�e���f�f�n�e�t� �w�e�r�d�e�n�������Unable to open mail application���kdk::KAboutDialog�����S�i�e� �h�a�b�e�n� �k�e�i�n�e� �E�-�M�a�i�l�-�A�p�p�s� �a�u�f� �I�h�r�e�m� �S�y�s�t�e�m� �i�n�s�t�a�l�l�i�e�r�t� �o�d�e�r� �k�e�i�n�e� �S�t�a�n�d�a�r�d�-�M�a�i�l�-�A�p�p� �f�e�s�t�g�e�l�e�g�t�������gYour system does not have any email application installed or the default mail application is not set up���kdk::KAboutDialog���:�V�e�r�s�i�o�n�s�n�u�m�m�e�r� �n�i�c�h�t� �g�e�f�u�n�d�e�n�������Version number not found���kdk::KAboutDialogPrivate����V�e�r�s�i�o�n�:�������	version :���kdk::KAboutDialogPrivate���>�B�i�t�t�e� �w���h�l�e�n� �S�i�e� �e�i�n�e� �D�a�t�e�i� �a�u�s�������Please select file���kdk::KAddFileButtonPrivate�����W���h�l�e�n� �S�i�e� �d�e�n� �O�r�d�n�e�r�i�d�e�n�t�i�f�i�k�a�t�i�o�n�s�p�f�a�d� �a�u�s� �o�d�e�r� �z�i�e�h�e�n� �S�i�e� �i�h�n� �p�e�r� �D�r�a�g� �&� �D�r�o�p�������6Select or drag and drop the folder identification path���kdk::KDragWidget���>�B�i�t�t�e� �w���h�l�e�n� �S�i�e� �e�i�n�e� �D�a�t�e�i� �a�u�s�������Please select file���kdk::KDragWidgetPrivate���2�G�e�b�e�n� �S�i�e� �e�i�n�e�n� �W�e�r�t� �e�i�n�:�������Enter a value:���kdk::KInputDialog����A�b�b�r�e�c�h�e�n�������cancel���kdk::KInputDialogPrivate����O�k�a�y�������ok���kdk::KInputDialogPrivate������b�e�r�������About���kdk::KMenuButton����A�u�t�o�������Auto���kdk::KMenuButton����D�u�n�k�e�l�������Dark���kdk::KMenuButton����F�e�e�d�b�a�c�k�������Feedback���kdk::KMenuButton���
++�H�i�l�f�e�������Help���kdk::KMenuButton���
+ �L�i�c�h�t�������Light���kdk::KMenuButton����O�p�t�i�o�n�e�n�������Options���kdk::KMenuButton����V�e�r�l�a�s�s�e�n�������Quit���kdk::KMenuButton����E�i�n�s�t�e�l�l�u�n�g�������Setting���kdk::KMenuButton���
+-�T�h�e�m�a�������Theme���kdk::KMenuButton����A�b�b�r�e�c�h�e�n�������cancel���kdk::KProgressDialog����S�u�c�h�e�n�������Search���kdk::KSearchLineEditPrivate����H�o�c�h�������High���kdk::KSecurityLevelBar����N�i�e�d�r�i�g�������Low���kdk::KSecurityLevelBar����M�i�t�t�e�l�������Medium���kdk::KSecurityLevelBar����N�i�e�d�r�i�g�������Low���kdk::KSecurityLevelBarPrivate����D�e�b� �N�a�m�e�:�������	deb name:���kdk::KUninstallDialog����D�e�b�-�V�e�r�s�i�o�n�:�������deb version:���kdk::KUninstallDialog����D�e�i�n�s�t�a�l�l�i�e�r�e�n�������	uninstall���kdk::KUninstallDialog����D�e�b� �N�a�m�e�:�������	deb name:���kdk::KUninstallDialogPrivate����D�e�b�-�V�e�r�s�i�o�n�:�������deb version:���kdk::KUninstallDialogPrivate����M�a�x�i�m�i�e�r�e�n�������Maximize���kdk::KWindowButtonBar��� �W�i�e�d�e�r�h�e�r�s�t�e�l�l�e�n�������Restore���kdk::KWindowButtonBar����S�c�h�l�i�e���e�n�������Close���kdk::KWindowButtonBarPrivate����M�a�x�i�m�i�e�r�e�n�������Maximize���kdk::KWindowButtonBarPrivate����M�i�n�i�m�i�e�r�e�n�������Minimize���kdk::KWindowButtonBarPrivate��� �W�i�e�d�e�r�h�e�r�s�t�e�l�l�e�n�������Restore���kdk::KWindowButtonBarPrivate����
+\ No newline at end of file
++�T�h�e�m�a�������Theme���kdk::KMenuButton����A�b�b�r�e�c�h�e�n�������cancel���kdk::KProgressDialog����S�u�c�h�e�n�������Search���kdk::KSearchLineEditPrivate����H�o�c�h�������High���kdk::KSecurityLevelBar����N�i�e�d�r�i�g�������Low���kdk::KSecurityLevelBar����M�i�t�t�e�l�������Medium���kdk::KSecurityLevelBar����N�i�e�d�r�i�g�������Low���kdk::KSecurityLevelBarPrivate����E�r�f�o�r�d�e�r�l�i�c�h�������Required���kdk::KSecurityQuestionDialog����A�b�b�r�e�c�h�e�n�������Cancel���#kdk::KSecurityQuestionDialogPrivate����R�e�t�t�e�n�������Save���#kdk::KSecurityQuestionDialogPrivate����D�e�b� �N�a�m�e�:�������	deb name:���kdk::KUninstallDialog����D�e�b�-�V�e�r�s�i�o�n�:�������deb version:���kdk::KUninstallDialog����D�e�i�n�s�t�a�l�l�i�e�r�e�n�������	uninstall���kdk::KUninstallDialog����D�e�b� �N�a�m�e�:�������	deb name:���kdk::KUninstallDialogPrivate����D�e�b�-�V�e�r�s�i�o�n�:�������deb version:���kdk::KUninstallDialogPrivate����M�a�x�i�m�i�e�r�e�n�������Maximize���kdk::KWindowButtonBar��� �W�i�e�d�e�r�h�e�r�s�t�e�l�l�e�n�������Restore���kdk::KWindowButtonBar����S�c�h�l�i�e���e�n�������Close���kdk::KWindowButtonBarPrivate����M�a�x�i�m�i�e�r�e�n�������Maximize���kdk::KWindowButtonBarPrivate����M�i�n�i�m�i�e�r�e�n�������Minimize���kdk::KWindowButtonBarPrivate��� �W�i�e�d�e�r�h�e�r�s�t�e�l�l�e�n�������Restore���kdk::KWindowButtonBarPrivate����
+\ No newline at end of file
+diff --git a/kysdk-qtwidgets/translations/gui_es.qm b/kysdk-qtwidgets/translations/gui_es.qm
+index 218e187..0f916db 100644
+--- a/kysdk-qtwidgets/translations/gui_es.qm
++++ b/kysdk-qtwidgets/translations/gui_es.qm
+@@ -1,8 +1,9 @@
+-<�d��!�`���B��(��[�����Sg�����Sg��	7�����������������������������i�G�����J6�����PFE��
�R������Z�|��
+-�Z�5����Ɨh�����u���alyz��4t):��	tt):��
+-T�����R;����������M{��-�I�����I���m����ʶ���=ʶ���X�F5��
+-��F5���	�����i	�<����	˰���
+-2����	�
+-2����
+-�X�4����d����i������2�D�e�c�l�a�r�a�c�i���n� �d�e� �p�r�i�v�a�c�i�d�a�d�������Privacy statement���kdk::KAboutDialog���(�S�e�r�v�i�c�i�o� �y� �s�o�p�o�r�t�e�:� �������Service & Support: ���kdk::KAboutDialog���R�N�o� �s�e� �p�u�e�d�e� �a�b�r�i�r� �l�a� �a�p�l�i�c�a�c�i���n� �d�e� �c�o�r�r�e�o�������Unable to open mail application���kdk::KAboutDialog���N�o� �t�i�e�n�e� �n�i�n�g�u�n�a� �a�p�l�i�c�a�c�i���n� �d�e� �c�o�r�r�e�o� �e�l�e�c�t�r���n�i�c�o� �i�n�s�t�a�l�a�d�a� �e�n� �e�l� �s�i�s�t�e�m�a� �o� �n�o� �t�i�e�n�e� �u�n�a� �a�p�l�i�c�a�c�i���n� �d�e� �c�o�r�r�e�o� �p�r�e�d�e�t�e�r�m�i�n�a�d�a� �c�o�n�f�i�g�u�r�a�d�a�������gYour system does not have any email application installed or the default mail application is not set up���kdk::KAboutDialog���F�N�o� �s�e� �e�n�c�o�n�t�r��� �e�l� �n���m�e�r�o� �d�e� �v�e�r�s�i���n�������Version number not found���kdk::KAboutDialogPrivate����V�e�r�s�i���n�:�������	version :���kdk::KAboutDialogPrivate�����S�e�l�e�c�c�i�o�n�e� �o� �a�r�r�a�s�t�r�e� �y� �s�u�e�l�t�e� �l�a� �r�u�t�a� �d�e� �i�d�e�n�t�i�f�i�c�a�c�i���n� �d�e� �l�a� �c�a�r�p�e�t�a�������6Select or drag and drop the folder identification path���kdk::KDragWidget���@�P�o�r� �f�a�v�o�r�,� �s�e�l�e�c�c�i�o�n�e� �u�n� �a�r�c�h�i�v�o�������Please select file���kdk::KDragWidgetPrivate���(�I�n�t�r�o�d�u�z�c�a� �u�n� �v�a�l�o�r�:�������Enter a value:���kdk::KInputDialog����C�a�n�c�e�l�a�r�������cancel���kdk::KInputDialogPrivate����D�e� �a�c�u�e�r�d�o�������ok���kdk::KInputDialogPrivate����A�c�e�r�c�a� �d�e�������About���kdk::KMenuButton����A�s�i�s�t�i�r�������Assist���kdk::KMenuButton����A�u�t�o�m���t�i�c�o�������Auto���kdk::KMenuButton����O�s�c�u�r�o�������Dark���kdk::KMenuButton����L�u�z�������Light���kdk::KMenuButton����O�p�c�i�o�n�e�s�������Options���kdk::KMenuButton����R�e�n�u�n�c�i�a�r�������Quit���kdk::KMenuButton����A�j�u�s�t�e�������Setting���kdk::KMenuButton����T�e�m�a�������Theme���kdk::KMenuButton����C�a�n�c�e�l�a�r�������cancel���kdk::KProgressDialog����B�u�s�c�a�r�������Search���kdk::KSearchLineEditPrivate����A�l�t�o�������High���kdk::KSecurityLevelBar����B�a�j�o�������Low���kdk::KSecurityLevelBar���
+-�M�e�d�i�o�������Medium���kdk::KSecurityLevelBar����B�a�j�o�������Low���kdk::KSecurityLevelBarPrivate����N�o�m�b�r�e� �d�e�b�:�������	deb name:���kdk::KUninstallDialog����V�e�r�s�i���n� �d�e�b�:�������deb version:���kdk::KUninstallDialog����d�e�s�i�n�s�t�a�l�a�r�������	uninstall���kdk::KUninstallDialog����N�o�m�b�r�e� �d�e�b�:�������	deb name:���kdk::KUninstallDialogPrivate����V�e�r�s�i���n� �d�e�b�:�������deb version:���kdk::KUninstallDialogPrivate����M�a�x�i�m�i�z�a�r�������Maximize���kdk::KWindowButtonBar����R�e�s�t�a�u�r�a�r�������Restore���kdk::KWindowButtonBar����C�e�r�r�a�r�������Close���kdk::KWindowButtonBarPrivate����M�a�x�i�m�i�z�a�r�������Maximize���kdk::KWindowButtonBarPrivate����M�i�n�i�m�i�z�a�r�������Minimize���kdk::KWindowButtonBarPrivate����R�e�s�t�a�u�r�a�r�������Restore���kdk::KWindowButtonBarPrivate����
+\ No newline at end of file
++<�d��!�`��ݧ���esB��X��[�����Sg��	���Sg��
++F���������������U��0��������	�����x������G������J6���
p�PFE��
��R�����Z�|����Z�5����Ɨh�����u����lyz���t):��dt):��D�I���
++�;����
++�����	\{��<�B�����I���V�I���	m���m���|ʶ���
-ʶ���H�F5����F5��
�	������	�<����	˰���
++2�����
++2�������[����
4��
++�X�4���Ed���Ci�������C�e�r�r�a�r� �p�e�s�t�a���a�������	Close Tab���CloseButton���2�D�e�c�l�a�r�a�c�i���n� �d�e� �p�r�i�v�a�c�i�d�a�d�������Privacy statement���kdk::KAboutDialog���(�S�e�r�v�i�c�i�o� �y� �s�o�p�o�r�t�e�:� �������Service & Support: ���kdk::KAboutDialog���R�N�o� �s�e� �p�u�e�d�e� �a�b�r�i�r� �l�a� �a�p�l�i�c�a�c�i���n� �d�e� �c�o�r�r�e�o�������Unable to open mail application���kdk::KAboutDialog���N�o� �t�i�e�n�e� �n�i�n�g�u�n�a� �a�p�l�i�c�a�c�i���n� �d�e� �c�o�r�r�e�o� �e�l�e�c�t�r���n�i�c�o� �i�n�s�t�a�l�a�d�a� �e�n� �e�l� �s�i�s�t�e�m�a� �o� �n�o� �t�i�e�n�e� �u�n�a� �a�p�l�i�c�a�c�i���n� �d�e� �c�o�r�r�e�o� �p�r�e�d�e�t�e�r�m�i�n�a�d�a� �c�o�n�f�i�g�u�r�a�d�a�������gYour system does not have any email application installed or the default mail application is not set up���kdk::KAboutDialog���F�N�o� �s�e� �e�n�c�o�n�t�r��� �e�l� �n���m�e�r�o� �d�e� �v�e�r�s�i���n�������Version number not found���kdk::KAboutDialogPrivate����V�e�r�s�i���n�:�������	version :���kdk::KAboutDialogPrivate���@�P�o�r� �f�a�v�o�r�,� �s�e�l�e�c�c�i�o�n�e� �u�n� �a�r�c�h�i�v�o�������Please select file���kdk::KAddFileButtonPrivate�����S�e�l�e�c�c�i�o�n�e� �o� �a�r�r�a�s�t�r�e� �y� �s�u�e�l�t�e� �l�a� �r�u�t�a� �d�e� �i�d�e�n�t�i�f�i�c�a�c�i���n� �d�e� �l�a� �c�a�r�p�e�t�a�������6Select or drag and drop the folder identification path���kdk::KDragWidget���@�P�o�r� �f�a�v�o�r�,� �s�e�l�e�c�c�i�o�n�e� �u�n� �a�r�c�h�i�v�o�������Please select file���kdk::KDragWidgetPrivate���(�I�n�t�r�o�d�u�z�c�a� �u�n� �v�a�l�o�r�:�������Enter a value:���kdk::KInputDialog����C�a�n�c�e�l�a�r�������cancel���kdk::KInputDialogPrivate����D�e� �a�c�u�e�r�d�o�������ok���kdk::KInputDialogPrivate����A�c�e�r�c�a� �d�e�������About���kdk::KMenuButton����A�u�t�o�m���t�i�c�o�������Auto���kdk::KMenuButton����O�s�c�u�r�o�������Dark���kdk::KMenuButton���"�R�e�t�r�o�a�l�i�m�e�n�t�a�c�i���n�������Feedback���kdk::KMenuButton���
++�A�y�u�d�a�������Help���kdk::KMenuButton����L�u�z�������Light���kdk::KMenuButton����O�p�c�i�o�n�e�s�������Options���kdk::KMenuButton����R�e�n�u�n�c�i�a�r�������Quit���kdk::KMenuButton����A�j�u�s�t�e�������Setting���kdk::KMenuButton����T�e�m�a�������Theme���kdk::KMenuButton����C�a�n�c�e�l�a�r�������cancel���kdk::KProgressDialog����B�u�s�c�a�r�������Search���kdk::KSearchLineEditPrivate����A�l�t�o�������High���kdk::KSecurityLevelBar����B�a�j�o�������Low���kdk::KSecurityLevelBar���
++�M�e�d�i�o�������Medium���kdk::KSecurityLevelBar����B�a�j�o�������Low���kdk::KSecurityLevelBarPrivate����O�b�l�i�g�a�t�o�r�i�o�������Required���kdk::KSecurityQuestionDialog����C�a�n�c�e�l�������Cancel���#kdk::KSecurityQuestionDialogPrivate����S�a�l�v�a�r�������Save���#kdk::KSecurityQuestionDialogPrivate����N�o�m�b�r�e� �d�e�b�:�������	deb name:���kdk::KUninstallDialog����V�e�r�s�i���n� �d�e�b�:�������deb version:���kdk::KUninstallDialog����d�e�s�i�n�s�t�a�l�a�r�������	uninstall���kdk::KUninstallDialog����N�o�m�b�r�e� �d�e�b�:�������	deb name:���kdk::KUninstallDialogPrivate����V�e�r�s�i���n� �d�e�b�:�������deb version:���kdk::KUninstallDialogPrivate����M�a�x�i�m�i�z�a�r�������Maximize���kdk::KWindowButtonBar����R�e�s�t�a�u�r�a�r�������Restore���kdk::KWindowButtonBar����C�e�r�r�a�r�������Close���kdk::KWindowButtonBarPrivate����M�a�x�i�m�i�z�a�r�������Maximize���kdk::KWindowButtonBarPrivate����M�i�n�i�m�i�z�a�r�������Minimize���kdk::KWindowButtonBarPrivate����R�e�s�t�a�u�r�a�r�������Restore���kdk::KWindowButtonBarPrivate����
+\ No newline at end of file
+diff --git a/kysdk-qtwidgets/translations/gui_fr.qm b/kysdk-qtwidgets/translations/gui_fr.qm
+index f05f9f4..241245e 100644
+--- a/kysdk-qtwidgets/translations/gui_fr.qm
++++ b/kysdk-qtwidgets/translations/gui_fr.qm
+@@ -1,8 +1,7 @@
+-<�d��!�`���B��(��[�����Sg�����Sg��	a�����������������������������q�G����,�J6�����PFE��K�R������Z�|��
+-=�Z�5����Ɨh�����u����lyz��Rt):��	�t):��
+-������d;����	�����]{��7�I�����I��� m����ʶ���{ʶ�����F5��7�F5���	�����s	�<����	˰���
+-2����	�
+-2����
+-�X�4����d���i������<�D���c�l�a�r�a�t�i�o�n� �d�e� �c�o�n�f�i�d�e�n�t�i�a�l�i�t���������Privacy statement���kdk::KAboutDialog���H�S�e�r�v�i�c�e� �a�p�r���s�-�v�e�n�t�e� �e�t� �a�s�s�i�s�t�a�n�c�e� �:� �������Service & Support: ���kdk::KAboutDialog���^�I�m�p�o�s�s�i�b�l�e� �d �o�u�v�r�i�r� �l �a�p�p�l�i�c�a�t�i�o�n� �d�e� �m�e�s�s�a�g�e�r�i�e�������Unable to open mail application���kdk::KAboutDialog�����A�u�c�u�n�e� �a�p�p�l�i�c�a�t�i�o�n� �d�e� �m�e�s�s�a�g�e�r�i�e� �n �e�s�t� �i�n�s�t�a�l�l���e� �s�u�r� �v�o�t�r�e� �s�y�s�t���m�e� �o�u� �v�o�u�s� �n �a�v�e�z� �p�a�s� �d �a�p�p�l�i�c�a�t�i�o�n� �d�e� �m�e�s�s�a�g�e�r�i�e� �p�a�r� �d���f�a�u�t�������gYour system does not have any email application installed or the default mail application is not set up���kdk::KAboutDialog���:�N�u�m���r�o� �d�e� �v�e�r�s�i�o�n� �i�n�t�r�o�u�v�a�b�l�e�������Version number not found���kdk::KAboutDialogPrivate����V�e�r�s�i�o�n�:�������	version :���kdk::KAboutDialogPrivate�����S���l�e�c�t�i�o�n�n�e�z� �o�u� �g�l�i�s�s�e�z�-�d���p�o�s�e�z� �l�e� �c�h�e�m�i�n� �d �i�d�e�n�t�i�f�i�c�a�t�i�o�n� �d�u� �d�o�s�s�i�e�r�������6Select or drag and drop the folder identification path���kdk::KDragWidget���N�S �i�l� �v�o�u�s� �p�l�a���t� �s���l�e�c�t�i�o�n�n�e�r� �u�n� �f�i�c�h�i�e�r�������Please select file���kdk::KDragWidgetPrivate���&�E�n�t�r�e�z� �u�n�e� �v�a�l�e�u�r� �:�������Enter a value:���kdk::KInputDialog����A�n�n�u�l�e�r�������cancel���kdk::KInputDialogPrivate����D �a�c�c�o�r�d�������ok���kdk::KInputDialogPrivate����E�n�v�i�r�o�n�������About���kdk::KMenuButton���
+-�A�i�d�e�r�������Assist���kdk::KMenuButton����A�u�t�o�������Auto���kdk::KMenuButton����S�o�m�b�r�e�������Dark���kdk::KMenuButton����L�u�m�i���r�e�������Light���kdk::KMenuButton����O�p�t�i�o�n�s�������Options���kdk::KMenuButton����D���m�i�s�s�i�o�n�n�e�r�������Quit���kdk::KMenuButton����R���g�l�a�g�e�������Setting���kdk::KMenuButton���
+-�T�h���m�e�������Theme���kdk::KMenuButton����A�n�n�u�l�e�r�������cancel���kdk::KProgressDialog����R�e�c�h�e�r�c�h�e�r�������Search���kdk::KSearchLineEditPrivate����H�a�u�t�������High���kdk::KSecurityLevelBar����B�a�s�������Low���kdk::KSecurityLevelBar����D�o�u�l�e�u�r� �m�o�y�e�n�n�e�������Medium���kdk::KSecurityLevelBar����B�a�s�������Low���kdk::KSecurityLevelBarPrivate����N�o�m� �d�e� �D�e�b� �:�������	deb name:���kdk::KUninstallDialog��� �V�e�r�s�i�o�n� �d�e� �D�e�b� �:�������deb version:���kdk::KUninstallDialog����D���s�i�n�s�t�a�l�l�e�r�������	uninstall���kdk::KUninstallDialog����N�o�m� �d�e� �D�e�b� �:�������	deb name:���kdk::KUninstallDialogPrivate��� �V�e�r�s�i�o�n� �d�e� �D�e�b� �:�������deb version:���kdk::KUninstallDialogPrivate����M�a�x�i�m�i�s�e�r�������Maximize���kdk::KWindowButtonBar����R�e�s�t�a�u�r�e�r�������Restore���kdk::KWindowButtonBar����F�e�r�m�e�r�������Close���kdk::KWindowButtonBarPrivate����M�a�x�i�m�i�s�e�r�������Maximize���kdk::KWindowButtonBarPrivate����M�i�n�i�m�i�s�e�r�������Minimize���kdk::KWindowButtonBarPrivate����R�e�s�t�a�u�r�e�r�������Restore���kdk::KWindowButtonBarPrivate����
+\ No newline at end of file
++<�d��!�`��ݧ���frB��X��[�����Sg��	���Sg��
++v�����;�����:�����k��0��������	�����������L�G�����J6���
��PFE��M�R�����Z�|��?�Z�5��	�Ɨh�����u����lyz��(t):���t):����I����;����
++'�����	r{��L�B�����I�����I���	5m���(m����ʶ���
}ʶ�����F5��
9�F5��	������	�<����	˰���
++2�����
++2�������[����
4��
++�X�4���Gd���ci�������F�e�r�m�e�r� �l�'�o�n�g�l�e�t�������	Close Tab���CloseButton���<�D���c�l�a�r�a�t�i�o�n� �d�e� �c�o�n�f�i�d�e�n�t�i�a�l�i�t���������Privacy statement���kdk::KAboutDialog���H�S�e�r�v�i�c�e� �a�p�r���s�-�v�e�n�t�e� �e�t� �a�s�s�i�s�t�a�n�c�e� �:� �������Service & Support: ���kdk::KAboutDialog���^�I�m�p�o�s�s�i�b�l�e� �d �o�u�v�r�i�r� �l �a�p�p�l�i�c�a�t�i�o�n� �d�e� �m�e�s�s�a�g�e�r�i�e�������Unable to open mail application���kdk::KAboutDialog�����A�u�c�u�n�e� �a�p�p�l�i�c�a�t�i�o�n� �d�e� �m�e�s�s�a�g�e�r�i�e� �n �e�s�t� �i�n�s�t�a�l�l���e� �s�u�r� �v�o�t�r�e� �s�y�s�t���m�e� �o�u� �v�o�u�s� �n �a�v�e�z� �p�a�s� �d �a�p�p�l�i�c�a�t�i�o�n� �d�e� �m�e�s�s�a�g�e�r�i�e� �p�a�r� �d���f�a�u�t�������gYour system does not have any email application installed or the default mail application is not set up���kdk::KAboutDialog���:�N�u�m���r�o� �d�e� �v�e�r�s�i�o�n� �i�n�t�r�o�u�v�a�b�l�e�������Version number not found���kdk::KAboutDialogPrivate����V�e�r�s�i�o�n�:�������	version :���kdk::KAboutDialogPrivate���N�S �i�l� �v�o�u�s� �p�l�a���t� �s���l�e�c�t�i�o�n�n�e�r� �u�n� �f�i�c�h�i�e�r�������Please select file���kdk::KAddFileButtonPrivate�����S���l�e�c�t�i�o�n�n�e�z� �o�u� �g�l�i�s�s�e�z�-�d���p�o�s�e�z� �l�e� �c�h�e�m�i�n� �d �i�d�e�n�t�i�f�i�c�a�t�i�o�n� �d�u� �d�o�s�s�i�e�r�������6Select or drag and drop the folder identification path���kdk::KDragWidget���N�S �i�l� �v�o�u�s� �p�l�a���t� �s���l�e�c�t�i�o�n�n�e�r� �u�n� �f�i�c�h�i�e�r�������Please select file���kdk::KDragWidgetPrivate���&�E�n�t�r�e�z� �u�n�e� �v�a�l�e�u�r� �:�������Enter a value:���kdk::KInputDialog����A�n�n�u�l�e�r�������cancel���kdk::KInputDialogPrivate����D �a�c�c�o�r�d�������ok���kdk::KInputDialogPrivate����E�n�v�i�r�o�n�������About���kdk::KMenuButton����A�u�t�o�������Auto���kdk::KMenuButton����S�o�m�b�r�e�������Dark���kdk::KMenuButton����R���t�r�o�a�c�t�i�o�n�������Feedback���kdk::KMenuButton����A�i�d�e�������Help���kdk::KMenuButton����L�u�m�i���r�e�������Light���kdk::KMenuButton����O�p�t�i�o�n�s�������Options���kdk::KMenuButton����D���m�i�s�s�i�o�n�n�e�r�������Quit���kdk::KMenuButton����R���g�l�a�g�e�������Setting���kdk::KMenuButton���
++�T�h���m�e�������Theme���kdk::KMenuButton����A�n�n�u�l�e�r�������cancel���kdk::KProgressDialog����R�e�c�h�e�r�c�h�e�r�������Search���kdk::KSearchLineEditPrivate����H�a�u�t�������High���kdk::KSecurityLevelBar����B�a�s�������Low���kdk::KSecurityLevelBar����D�o�u�l�e�u�r� �m�o�y�e�n�n�e�������Medium���kdk::KSecurityLevelBar����B�a�s�������Low���kdk::KSecurityLevelBarPrivate����O�b�l�i�g�a�t�o�i�r�e�������Required���kdk::KSecurityQuestionDialog����A�n�n�u�l�e�r�������Cancel���#kdk::KSecurityQuestionDialogPrivate����S�a�u�v�e�g�a�r�d�e�r�������Save���#kdk::KSecurityQuestionDialogPrivate����N�o�m� �d�e� �D�e�b� �:�������	deb name:���kdk::KUninstallDialog��� �V�e�r�s�i�o�n� �d�e� �D�e�b� �:�������deb version:���kdk::KUninstallDialog����D���s�i�n�s�t�a�l�l�e�r�������	uninstall���kdk::KUninstallDialog����N�o�m� �d�e� �D�e�b� �:�������	deb name:���kdk::KUninstallDialogPrivate��� �V�e�r�s�i�o�n� �d�e� �D�e�b� �:�������deb version:���kdk::KUninstallDialogPrivate����M�a�x�i�m�i�s�e�r�������Maximize���kdk::KWindowButtonBar����R�e�s�t�a�u�r�e�r�������Restore���kdk::KWindowButtonBar����F�e�r�m�e�r�������Close���kdk::KWindowButtonBarPrivate����M�a�x�i�m�i�s�e�r�������Maximize���kdk::KWindowButtonBarPrivate����M�i�n�i�m�i�s�e�r�������Minimize���kdk::KWindowButtonBarPrivate����R�e�s�t�a�u�r�e�r�������Restore���kdk::KWindowButtonBarPrivate����
+\ No newline at end of file
+diff --git a/kysdk-qtwidgets/translations/gui_kk.qm b/kysdk-qtwidgets/translations/gui_kk.qm
+index 24172c5..289e98d 100644
+--- a/kysdk-qtwidgets/translations/gui_kk.qm
++++ b/kysdk-qtwidgets/translations/gui_kk.qm
+@@ -1,11 +1,13 @@
+-<�d��!�`���B��(��[��=��Sg��.��Sg���������������������$������������G����v�J6���
+-��PFE����R����[�Z�|��	w�Z�5��:�Ɨh��]��u���Elyz���t):���t):��	�������;����f������{����I�����I���rm���.ʶ���
+-�ʶ�����F5��
+-S�F5��0	�����m	�<���	˰��
+-2����	)
+-2����	�X�4����d����i��(���6��?8O;K;K�� BC@0;K� <�;V<45<5�������Privacy statement���kdk::KAboutDialog���(�K7<5B� 6�=5� �>;40C�:� �������Service & Support: ���kdk::KAboutDialog���2>HB0� �>;40=10AK� 0HK;<04K�������Unable to open mail application���kdk::KAboutDialog�����95�V745� >@=0BK;�0=� M;5:B@>=4K�� ?>HB0� 10�40@;0<0;0@K� 6>�� =5<5A5� �45?:V� ?>HB0� 10�40@;0<0AK=K�� 68K=BK�K� 6>��������gYour system does not have any email application installed or the default mail application is not set up���kdk::KAboutDialog���,�A�0� =�<V@V� B01K;<04K�������Version number not found���kdk::KAboutDialogPrivate���=�A�0AK�:�������	version :���kdk::KAboutDialogPrivate���v�0;B0=K� A�9:5AB5=4V@C� 6>;K=� B0�40C� =5<5A5� 0?0@C� 6�=5� B0AB0C�������6Select or drag and drop the folder identification path���kdk::KDragWidget���8$09;4K� B0�40CK�K74K� A�@09<K=�������Please select file���kdk::KDragWidgetPrivate��� �=4V� 5=3V7V�V7�:�������Enter a value:���kdk::KInputDialog���>;4K@<0C�������cancel���kdk::KInputDialogPrivate���
+-0�AK�������ok���kdk::KInputDialogPrivate���(0<0<5=�������About���kdk::KMenuButton����<5:� :�@A5BC�������Assist���kdk::KMenuButton���2B>�������Auto���kdk::KMenuButton����0@0��K�������Dark���kdk::KMenuButton���
+-0@K��������Light���kdk::KMenuButton���0@0<5B@;5@�������Options���kdk::KMenuButton���(K�C�������Quit���kdk::KMenuButton���0?B0C�������Setting���kdk::KMenuButton���"0�K@K?�������Theme���kdk::KMenuButton���>;4K@<0C�������cancel���kdk::KProgressDialog���
+-745C�������Search���kdk::KSearchLineEditPrivate���>�0@K�������High���kdk::KSecurityLevelBar���
+-"�<5=�������Low���kdk::KSecurityLevelBar���@B0H0�������Medium���kdk::KSecurityLevelBar���
+-"�<5=�������Low���kdk::KSecurityLevelBarPrivate���451� 0B0CK�:�������	deb name:���kdk::KUninstallDialog����d�e�b� =�A�0AK�:�������deb version:���kdk::KUninstallDialog���6>N�������	uninstall���kdk::KUninstallDialog���451� 0B0CK�:�������	deb name:���kdk::KUninstallDialogPrivate����d�e�b� =�A�0AK�:�������deb version:���kdk::KUninstallDialogPrivate���0@K=H0� :�159BC�������Maximize���kdk::KWindowButtonBar����0;?K=0� :5;BV@C�������Restore���kdk::KWindowButtonBar���01C�������Close���kdk::KWindowButtonBarPrivate���0@K=H0� :�159BC�������Maximize���kdk::KWindowButtonBarPrivate���VHV@59BC�������Minimize���kdk::KWindowButtonBarPrivate����0;?K=0� :5;BV@C�������Restore���kdk::KWindowButtonBarPrivate����
+\ No newline at end of file
++<�d��!�`��ݧ���kkB��`��[��-��Sg��q��Sg�����������������������0��i�����4���������	��G����t�J6��� �PFE����R������Z�|��
++��Z�5����Ɨh��glyz���������=t):��
++t):��
++��I���	h;�����������{����B�����I�����I����m���m���6ʶ����ʶ�����F5����F5��`	����3	�<����	˰��O
++2����
++Q
++2����:��[��"�k������
4��	!X�4����d���9i��
\���(�*C�4� J'~�������	Close Tab���CloseButton���3HD9'� 3IJ1ID�������Scroll Left���
KCustomTabBar���H�9'� 3JI1ID��������Scroll Right���
KCustomTabBar���4B�~J'DI9IF� 3'B*'�� E'DIE�*I�������Privacy statement���kdk::KAboutDialog���&BI2IE�*� �'� BHD/'��:� �������Service & Support: ���kdk::KAboutDialog���b~H�*'� ,HD/'F('3I� � H1*'3FI�� '4�&',1I*I44IF� (HDE'/I�������Unable to open mail application���kdk::KAboutDialog���N(�14'B� C�D�*IF� F�3.'� F�EI1/I� *'(''DE'/x�������Version number not found���kdk::KAboutDialogPrivate���
++F�3.'�������	version :���kdk::KAboutDialogPrivate���-�,'**I� *'D/'�������Please select file���kdk::KAddFileButtonPrivate���t-�,'*� BI3�'3~'(IFI�� CH13�*~�� ,HDIF� *'D/'� J'CJ� 3�J1�~� C�DI��������6Select or drag and drop the folder identification path���kdk::KDragWidget���-�,'**I� *'D/'�������Please select file���kdk::KDragWidgetPrivate���*(x1� E'FIF� CI1�I2I�I2�:�������Enter a value:���kdk::KInputDialog���(H3� �*��������cancel���kdk::KInputDialogPrivate���*�1'B*'F/I1��������ok���kdk::KInputDialogPrivate���,HFxF/��������About���kdk::KMenuButton���'�*HE'*IC�������Auto���kdk::KMenuButton���B'FIB� 1���������Dark���kdk::KMenuButton���,'�'~� B'J*'1��������Feedback���kdk::KMenuButton���,'1/�E�������Help���kdk::KMenuButton���'D3I1��� 1���������Light���kdk::KMenuButton���*'D/'F('�������Options���kdk::KMenuButton���4��IF��������Quit���kdk::KMenuButton���
++*��4��������Setting���kdk::KMenuButton���3DH(�������Theme���kdk::KMenuButton���(H3� �*��������cancel���kdk::KProgressDialog���
++x2/���������Search���kdk::KSearchLineEditPrivate���,H9'19I�������High���kdk::KSecurityLevelBar���
++*HE�F�������Low���kdk::KSecurityLevelBar���H1*'�������Medium���kdk::KSecurityLevelBar���
++*HE�F�������Low���kdk::KSecurityLevelBarPrivate���t3H23I2�������Required���kdk::KSecurityQuestionDialog���C�4IF�F� B'D/I1��������Cancel���#kdk::KSecurityQuestionDialogPrivate���3'B*'��������Save���#kdk::KSecurityQuestionDialogPrivate���(�D'B� EI�:�������	deb name:���kdk::KUninstallDialog���('3IDIEI�:�������deb version:���kdk::KUninstallDialog���"/�1��� ,�I~� ,I(�1��������	uninstall���kdk::KUninstallDialog���(�D'B� EI�:�������	deb name:���kdk::KUninstallDialogPrivate���('3IDIEI�:�������deb version:���kdk::KUninstallDialogPrivate����DC�J*��������Maximize���kdk::KWindowButtonBar���&B'D~IF'� C�D*I1ID��F�������Restore���kdk::KWindowButtonBar���
++*'B'��������Close���kdk::KWindowButtonBarPrivate����DC�J*��������Maximize���kdk::KWindowButtonBarPrivate������ C4C�F�� (�JF��������Minimize���kdk::KWindowButtonBarPrivate���&B'D~IF'� C�D*I1ID��F�������Restore���kdk::KWindowButtonBarPrivate����
+\ No newline at end of file
+diff --git a/kysdk-qtwidgets/translations/gui_ky.qm b/kysdk-qtwidgets/translations/gui_ky.qm
+index 140b59a..d646be7 100644
+--- a/kysdk-qtwidgets/translations/gui_ky.qm
++++ b/kysdk-qtwidgets/translations/gui_ky.qm
+@@ -1,14 +1,12 @@
+-<�d��!�`���B��(��[�����Sg�����Sg��W�������������������������������G����4�J6���
+-��PFE��7�R�����Z�|��	)�Z�5����Ɨh��C��u���+lyz��Rt):���t):��	l�����l;���������i{��?�I�����I��� m����ʶ���
+-Uʶ�����F5��
+-
�F5��
+-�	�����c	�<����	˰���
+-2�����
+-2����	�X�4����d���|i������,C?CO;CC;C:� 18;48@��A��������Privacy statement���kdk::KAboutDialog���K7<0B� �&�:� �������Service & Support: ���kdk::KAboutDialog���6>GB0� 0@K7K=� 0GCC30� 1>;1>4C�������Unable to open mail application���kdk::KAboutDialog����!8AB5<0�K740� >@=>BC;30=� M;5:B@>=4C:� ?>GB0� B8@:5<5;5@8� 6>:� 65� 45D>;B� ?>GB0� B8@:5<5A8� >@=>BC;30=� 6>:�������gYour system does not have any email application installed or the default mail application is not set up���kdk::KAboutDialog���:5@A8O=K=� =><5@8� B01K;30=� 6>:�������Version number not found���kdk::KAboutDialogPrivate���=CA:0AK� �:�������	version :���kdk::KAboutDialogPrivate���X0?:0=K� 0=K:B>>� 6>;C=� B0=4>>� 65� A�9@�?� GK3CC�������6Select or drag and drop the folder identification path���kdk::KDragWidget���$09;4K� B0=40�K7�������Please select file���kdk::KDragWidgetPrivate���(8@� =0@:BK� :8@387���:�������Enter a value:���kdk::KInputDialog���>::>� GK30@CC�������cancel���kdk::KInputDialogPrivate���
+-0:C;�������ok���kdk::KInputDialogPrivate����=�=4��������About���kdk::KMenuButton���0@40<�������Assist���kdk::KMenuButton���2B>�������Auto���kdk::KMenuButton���0@0�3K�������Dark���kdk::KMenuButton���
+-0@K:�������Light���kdk::KMenuButton���0@0<5B@;5@�������Options���kdk::KMenuButton���
+-'K3CC�������Quit���kdk::KMenuButton���@=>BCC�������Setting���kdk::KMenuButton���"5<0�������Theme���kdk::KMenuButton���>::>� GK30@CC�������cancel���kdk::KProgressDialog���
+-74���������Search���kdk::KSearchLineEditPrivate���>3>@:C�������High���kdk::KSecurityLevelBar���
+-"�<�=�������Low���kdk::KSecurityLevelBar���@B>�������Medium���kdk::KSecurityLevelBar���
+-"�<�=�������Low���kdk::KSecurityLevelBarPrivate���451� 0BK�:�������	deb name:���kdk::KUninstallDialog���451� 25@A8OAK�:�������deb version:���kdk::KUninstallDialog���BC@C:AC7�������	uninstall���kdk::KUninstallDialog���451� 0BK�:�������	deb name:���kdk::KUninstallDialogPrivate���451� 25@A8OAK�:�������deb version:���kdk::KUninstallDialogPrivate���0:A8<0;4CC�������Maximize���kdk::KWindowButtonBar���"0;K1K=0� :5;B8@���������Restore���kdk::KWindowButtonBar���
+-01CC�������Close���kdk::KWindowButtonBarPrivate���0:A8<0;4CC�������Maximize���kdk::KWindowButtonBarPrivate���8=8<0;4CC�������Minimize���kdk::KWindowButtonBarPrivate���"0;K1K=0� :5;B8@���������Restore���kdk::KWindowButtonBarPrivate����
+\ No newline at end of file
++<�d��!�`��ݧ���kyB��`��[��o��Sg�����Sg��	N�������������������0�������������T�����
++0�G������J6�����PFE��
'�R������Z�|��
�Z�5����Ɨh��{lyz���������=t):��
++xt):��b�I���	�;����	�����^{���B�����I����I���m��� m���Tʶ���Gʶ���
��F5���F5���	����3	�<����	˰���
++2����
++�
++2�������[��\�k������
4��	�X�4����d���Ki��
����(�*C��� J'~�������	Close Tab���CloseButton���3HD9H� 3IJ1ID�������Scroll Left���
KCustomTabBar���"H�� ,'B'� � *'J9ID���������Scroll Right���
KCustomTabBar���*3I1IF� 3'B*HH� ('J'F'*I�������Privacy statement���kdk::KAboutDialog���B*�JD��� ,'F'� BHD/H4� � /�E� (�1I4� �:� �������Service & Support: ���kdk::KAboutDialog���X~H�*H� ,HD/HFEH3�� � � *�1EIF'D/I� '�B'DI� (HD(H/��������Unable to open mail application���kdk::KAboutDialog���P4'J� � ��D�*�19'F� � F�3B'� FHE�1�F� *'('D('/I�������Version number not found���kdk::KAboutDialogPrivate���
++F�3B'�������	version :���kdk::KAboutDialogPrivate����,�*�F� *'F/'��������Please select file���kdk::KAddFileButtonPrivate���~�,�*� � BI3BI�*IF� ,HD,H1�B� � ,HD�F� *'F/'�� C�1�F�4*�1�� 3�J1�~� C�DI��������6Select or drag and drop the folder identification path���kdk::KDragWidget����,�*�F� *'F/'��������Please select file���kdk::KDragWidgetPrivate���2(I1� � F'1B*��F�� � CI1�I2I��:�������Enter a value:���kdk::KInputDialog���*(�C�1� � ,'3HH� '*B'1���������cancel���kdk::KInputDialogPrivate���(�CI*���������ok���kdk::KInputDialogPrivate���,�F�F/��������About���kdk::KMenuButton���'~*HE'*IC�������Auto���kdk::KMenuButton���B'FIB� � *�3�������Dark���kdk::KMenuButton���IFC'3� C�*I1I4�������Feedback���kdk::KMenuButton���,�1DIC�������Help���kdk::KMenuButton���C���1*� � *�3�������Light���kdk::KMenuButton���*'F/'DE'�������Options���kdk::KMenuButton���,'FI4� � B'J*I4�������Quit���kdk::KMenuButton���*��4�C�������Setting���kdk::KMenuButton���
++�3D�~�������Theme���kdk::KMenuButton���*(�C�1� � ,'3HH� '*B'1���������cancel���kdk::KProgressDialog���
++I2/���������Search���kdk::KSearchLineEditPrivate���,H9H1��������High���kdk::KSecurityLevelBar���
++*�E�F�������Low���kdk::KSecurityLevelBar���H1*H3��������Medium���kdk::KSecurityLevelBar���
++*�E�F�������Low���kdk::KSecurityLevelBarPrivate���
++2'1ID�������Required���kdk::KSecurityQuestionDialog���"'19'/'F� � B'D*I1I4�������Cancel���#kdk::KSecurityQuestionDialogPrivate���3'B*HH�������Save���#kdk::KSecurityQuestionDialogPrivate���*'�IB� F''EI� �:�������	deb name:���kdk::KUninstallDialog���('3E'3I� �:�������deb version:���kdk::KUninstallDialog���"/'1HH� � ,��~� ,I(�1�������	uninstall���kdk::KUninstallDialog���*'�IB� F''EI� �:�������	deb name:���kdk::KUninstallDialogPrivate���('3E'3I� �:�������deb version:���kdk::KUninstallDialogPrivate����H�HJ*�4�������Maximize���kdk::KWindowButtonBar���"'D9'�IF'� C�D*I1���������Restore���kdk::KWindowButtonBar���(�CI*I4�������Close���kdk::KWindowButtonBarPrivate����H�HJ*�4�������Maximize���kdk::KWindowButtonBarPrivate��� ��� CI�IC� � � '('DI�������Minimize���kdk::KWindowButtonBarPrivate���"'D9'�IF'� C�D*I1���������Restore���kdk::KWindowButtonBarPrivate����
+\ No newline at end of file
+diff --git a/kysdk-qtwidgets/translations/gui_mn.qm b/kysdk-qtwidgets/translations/gui_mn.qm
+index e16ca90..032e18d 100644
+--- a/kysdk-qtwidgets/translations/gui_mn.qm
++++ b/kysdk-qtwidgets/translations/gui_mn.qm
+@@ -1,10 +1,11 @@
+-<�d��!�`���B��(��[��	��Sg��	z��Sg��	������������������������	A������G����H�J6���h�PFE��
�R����]�Z�|��
+-��Z�5����Ɨh����u����lyz��Rt):��
+-0t):�� �����|;����	�������{����I�����I����m����ʶ���ʶ���
d�F5����F5���	�����k	�<����	˰��>
+-2����
+-�
+-2����vX�4����d���i��
����40
+-("-$4 � 6"(� "/!7,!6"/!/2!0�������Privacy statement���kdk::KAboutDialog���:&"/!4"/!,&� * � 3!.5",&� *&/,&.��������Service & Support: ���kdk::KAboutDialog���n0"$3 (� $� 5&"/� &(� 5#4"(� !7&,!� 6"� (!-!-!5&� 3!6"/,&� &-!"� �������Unable to open mail application���kdk::KAboutDialog����2 (� $� 0"02'.� 3&� 6 . 7� 4$� !/':27#(� 0"$3 (� $� 5&"/� "� ,!7!-/!,&� *$6$� 3$*� 3$-$"� 2 (",$� 0"$3 (� $� 5&"/� &(� ,!7!-/!/2!� ,"-0!(� &-!"� �������gYour system does not have any email application installed or the default mail application is not set up���kdk::KAboutDialog���b5#,"4 )-$"� ,!*/!/� &(� (#.'7� "� !7"5&� #/#-0 (� &-!"� �������Version number not found���kdk::KAboutDialogPrivate���,!*/!/�������	version :���kdk::KAboutDialogPrivate���x*"4"-� . 2'7"6 /� $(� , *$3 7� "� 0#)-#,$� *$6$� 2 /*",$� ,!7!-2!6�������6Select or drag and drop the folder identification path���kdk::KDragWidget���@*"4"-� . 2'7"6 /� "� 0#)-#- 7 "� �������Please select file���kdk::KDragWidgetPrivate���>2$- � ,!.5"-3!/� "� $7$-$/$- 7 "��������Enter a value:���kdk::KInputDialog���&,!"0,!,&�������cancel���kdk::KInputDialogPrivate���* 3$/ ,$�������ok���kdk::KInputDialogPrivate���
+-2$, "�������About���kdk::KMenuButton���3$0 / ,$�������Assist���kdk::KMenuButton���&-$$/� 0!3&*� "� 3 - ,$�������Auto���kdk::KMenuButton���.,&(� &)-!� 2 "� -$$/� 0!3&*�������Dark���kdk::KMenuButton���6,&6&,!(� &)-!� 2 "� -$$/� 0!3&*�������Light���kdk::KMenuButton���0#)-#/2 � �������Options���kdk::KMenuButton���*$4 5$� - 7,$�������Quit���kdk::KMenuButton���3$,"7 -$/,$�������Setting���kdk::KMenuButton���-$$/� 0!3&*�������Theme���kdk::KMenuButton���&,!"0,!,&�������cancel���kdk::KProgressDialog���, "/3 �������Search���kdk::KSearchLineEditPrivate���
++<�d��!�`��ݧ���mnB��h��[�����Sg��B��Sg��������������������J��0��������	����	��������G������J6���)�PFE����R����	%�Z�|��
��Z�5��
++H�Ɨh�����u����lyz���������_t):���t):��
��I���O;����|�����
++�{��	��B�����I���C�I���
++�m����m���Sʶ����ʶ���%�F5����F5��k	����i	�<����	˰��
++
++2����
B
++2����7��[����k������
4���X�4����d���i��}���61$0"- � 5"(� ("-$7� "� , - ,$�������	Close Tab���CloseButton��� 5!-&(0"� &),&7",&�������Scroll Left���
KCustomTabBar���$* 7 -$(0"� &),&7",&�������Scroll Right���
KCustomTabBar���40
++("-$4 � 6"(� "/!7,!6"/!/2!0�������Privacy statement���kdk::KAboutDialog���:&"/!4"/!,&� * � 3!.5",&� *&/,&.��������Service & Support: ���kdk::KAboutDialog���n0"$3 (� $� 5&"/� &(� 5#4"(� !7&,!� 6"� (!-!-!5&� 3!6"/,&� &-!"� �������Unable to open mail application���kdk::KAboutDialog����2 (� $� 0"02'.� 3&� 6 . 7� 4$� !/':27#(� 0"$3 (� $� 5&"/� "� ,!7!-/!,&� *$6$� 3$*� 3$-$"� 2 (",$� 0"$3 (� $� 5&"/� &(� ,!7!-/!/2!� ,"-0!(� &-!"� �������gYour system does not have any email application installed or the default mail application is not set up���kdk::KAboutDialog���b5#,"4 )-$"� ,!*/!/� &(� (#.'7� "� !7"5&� #/#-0 (� &-!"� �������Version number not found���kdk::KAboutDialogPrivate���,!*/!/�������	version :���kdk::KAboutDialogPrivate���@*"4"-� . 2'7"6 /� "� 0#)-#- 7 "� �������Please select file���kdk::KAddFileButtonPrivate���x*"4"-� . 2'7"6 /� $(� , *$3 7� "� 0#)-#,$� *$6$� 2 /*",$� ,!7!-2!6�������6Select or drag and drop the folder identification path���kdk::KDragWidget���@*"4"-� . 2'7"6 /� "� 0#)-#- 7 "� �������Please select file���kdk::KDragWidgetPrivate���>2$- � ,!.5"-3!/� "� $7$-$/$- 7 "��������Enter a value:���kdk::KInputDialog���&,!"0,!,&�������cancel���kdk::KInputDialogPrivate���* 3$/ ,$�������ok���kdk::KInputDialogPrivate���
++2$, "�������About���kdk::KMenuButton���&-$$/� 0!3&*� "� 3 - ,$�������Auto���kdk::KMenuButton���.,&(� &)-!� 2 "� -$$/� 0!3&*�������Dark���kdk::KMenuButton���, 7"-$� 2$0, /� �������Feedback���kdk::KMenuButton���, *0$7,$�������Help���kdk::KMenuButton���6,&6&,!(� &)-!� 2 "� -$$/� 0!3&*�������Light���kdk::KMenuButton���0#)-#/2 � �������Options���kdk::KMenuButton���*$4 5$� - 7,$�������Quit���kdk::KMenuButton���3$,"7 -$/,$�������Setting���kdk::KMenuButton���-$$/� 0!3&*�������Theme���kdk::KMenuButton���&,!"0,!,&�������cancel���kdk::KProgressDialog���, "/3 �������Search���kdk::KSearchLineEditPrivate���
+ &(3&7�������High���kdk::KSecurityLevelBar���3$$7 �������Low���kdk::KSecurityLevelBar���
+-3$.3 �������Medium���kdk::KSecurityLevelBar���3$$7 �������Low���kdk::KSecurityLevelBarPrivate���* -3 ,$� (!7!� ��������	deb name:���kdk::KUninstallDialog���,!*/!/��������deb version:���kdk::KUninstallDialog���(2!7!� 3 7$"� * -$/- ,$�������	uninstall���kdk::KUninstallDialog���* -3 ,$� (!7!��������	deb name:���kdk::KUninstallDialogPrivate���,!*/!/��������deb version:���kdk::KUninstallDialogPrivate���$, .$-� $(� 6!,!4"/!/�������Maximize���kdk::KWindowButtonBar��� $-� "6 (� *$4 - ,$�������Restore���kdk::KWindowButtonBar���, - ,$�������Close���kdk::KWindowButtonBarPrivate���$, .$-� $(� 6!,!4"/!/�������Maximize���kdk::KWindowButtonBarPrivate���$, .$-� $(� * - 4"/ /�������Minimize���kdk::KWindowButtonBarPrivate��� $-� "6 (� *$4 - ,$�������Restore���kdk::KWindowButtonBarPrivate����
+\ No newline at end of file
++3$.3 �������Medium���kdk::KSecurityLevelBar���3$$7 �������Low���kdk::KSecurityLevelBarPrivate���!7,!*0"� 3 -/ ,$�������Required���kdk::KSecurityQuestionDialog���&,!"0-!,&�������Cancel���#kdk::KSecurityQuestionDialogPrivate���, 3 - / ,$�������Save���#kdk::KSecurityQuestionDialogPrivate���* -3 ,$� (!7!� ��������	deb name:���kdk::KUninstallDialog���,!*/!/��������deb version:���kdk::KUninstallDialog���(2!7!� 3 7$"� * -$/- ,$�������	uninstall���kdk::KUninstallDialog���* -3 ,$� (!7!��������	deb name:���kdk::KUninstallDialogPrivate���,!*/!/��������deb version:���kdk::KUninstallDialogPrivate���$, .$-� $(� 6!,!4"/!/�������Maximize���kdk::KWindowButtonBar��� $-� "6 (� *$4 - ,$�������Restore���kdk::KWindowButtonBar���, - ,$�������Close���kdk::KWindowButtonBarPrivate���$, .$-� $(� 6!,!4"/!/�������Maximize���kdk::KWindowButtonBarPrivate���$, .$-� $(� * - 4"/ /�������Minimize���kdk::KWindowButtonBarPrivate��� $-� "6 (� *$4 - ,$�������Restore���kdk::KWindowButtonBarPrivate����
+\ No newline at end of file
+diff --git a/kysdk-qtwidgets/translations/gui_ug.qm b/kysdk-qtwidgets/translations/gui_ug.qm
+index 356d945..c28310f 100644
+--- a/kysdk-qtwidgets/translations/gui_ug.qm
++++ b/kysdk-qtwidgets/translations/gui_ug.qm
+@@ -1,10 +1,13 @@
+-<�d��!�`���B��(��[��)��Sg��.��Sg���������������������������������G����b�J6�����PFE����R����K�Z�|��	}�Z�5��,�Ɨh��]��u���=lyz��xt):���t):��	�������;����f������{��{�I�����I���bm��� ʶ���
+-�ʶ�����F5��
+-c�F5��<	�����_	�<���	˰���
+-2����	/
++<�d��!�`��ݧ���ugB��`��[��a��Sg�����Sg��	l�����������������5��0�������������l�����
++N�G������J6�����PFE��
A�R������Z�|���Z�5����Ɨh��}lyz���������=t):��
++�t):��l�I���	�;����	-�����x{��(�B�����I����I���'m���m���Lʶ���Iʶ���
��F5����F5���	����=	�<����	˰���
+ 2����
+-X�4����d����i��4���(E�.~IJ�*DIC� ('J'F'*I�������Privacy statement���kdk::KAboutDialog���(E�D'2IE�*� �>� BHDD'4�:� �������Service & Support: ���kdk::KAboutDialog���8&�D.�*� &ID*IE'3IFI� &'�'DEI/I�������Unable to open mail application���kdk::KAboutDialog����3I2FI�� 3I3*�EI�I2:'� ���B'F/'B� &�D.�*� &H1FI*IDEI:'F� J'CI� C���D/ICI/�C� ~H�*'� JHDD'FEI3IFI�� BHDDIFIDI4I� &H1F'*EI:'F�������gYour system does not have any email application installed or the default mail application is not set up���kdk::KAboutDialog���*F�41� FHE�1I� *�~IDEI/I�������Version number not found���kdk::KAboutDialogPrivate���F�41I� �:�������	version :���kdk::KAboutDialogPrivate���h��,,�*� BI3B��� (�D�I3I� JHDIFI� *'DD'4� J'CI� 3�1�~� BHJ�4�������6Select or drag and drop the folder identification path���kdk::KDragWidget�����,,�*� *'DD'��������Please select file���kdk::KDragWidgetPrivate���((I1� BIEE�*� CI1��2���:�������Enter a value:���kdk::KInputDialog���"&�E�D/IF� B'D/�1�4�������cancel���kdk::KInputDialogPrivate���
+-E'B�D�������ok���kdk::KInputDialogPrivate�����BBI/��������About���kdk::KMenuButton���J'1/�E�������Assist���kdk::KMenuButton���&'~*�E'*IC�������Auto���kdk::KMenuButton���B'1'�:�D�B�������Dark���kdk::KMenuButton���F�1�������Light���kdk::KMenuButton���*'DD'FEID'1�������Options���kdk::KMenuButton�����CIFI4�������Quit���kdk::KMenuButton���*��4�C�������Setting���kdk::KMenuButton���&�3D�(�������Theme���kdk::KMenuButton���"&�E�D/IF� B'D/�1�4�������cancel���kdk::KProgressDialog���
+-&I2/��������Search���kdk::KSearchLineEditPrivate���J�BI1I�������High���kdk::KSecurityLevelBar���
+-*���F�������Low���kdk::KSecurityLevelBar���&H**�1'�'D�������Medium���kdk::KSecurityLevelBar���
+-*���F�������Low���kdk::KSecurityLevelBarPrivate����d�e�b� F'EI�:�������	deb name:���kdk::KUninstallDialog����d�e�b� F�3.I3I�:�������deb version:���kdk::KUninstallDialog����U�n�i�n�s�t�a�l�l�������	uninstall���kdk::KUninstallDialog����d�e�b� F'EI�:�������	deb name:���kdk::KUninstallDialogPrivate����d�e�b� F�3.I3I�:�������deb version:���kdk::KUninstallDialogPrivate���&��� �H�� ��CC��������Maximize���kdk::KWindowButtonBar��� &�3DI��� C�D*�1�4�������Restore���kdk::KWindowButtonBar���J'~�������Close���kdk::KWindowButtonBarPrivate���&��� �H�� ��CC��������Maximize���kdk::KWindowButtonBarPrivate���CI�ICDI*I4�������Minimize���kdk::KWindowButtonBarPrivate��� &�3DI��� C�D*�1�4�������Restore���kdk::KWindowButtonBarPrivate����
+\ No newline at end of file
++�
++2�������[��p�k������
4��	�X�4����d���Mi�����(�*C��� J'~�������	Close Tab���CloseButton���3HD:'� 3IJ1ID�������Scroll Left���
KCustomTabBar���&H�:'� 3IJ1IDI4�������Scroll Right���
KCustomTabBar���:E�.~IJ�*DICFI� 3'BD'4� ('J'F'*I�������Privacy statement���kdk::KAboutDialog���8E�D'2IE�*� ��� BHDD'4� &�*1I*I� �������Service & Support: ���kdk::KAboutDialog���Z&�D.�*� .�1I/'1D'1� *�1EIF'DIFI� &'�BIDI� (HDEI/I�������Unable to open mail application���kdk::KAboutDialog���LE'3� C�DI/I:'F� F�3.'� FHE�1IFI� *'~'DEI/I�������Version number not found���kdk::KAboutDialogPrivate���
++F�3.'�������	version :���kdk::KAboutDialogPrivate�����,,�*FI� *'DD'��������Please select file���kdk::KAddFileButtonPrivate���t��,,�*� BI3B��FI�� C�13�*E�� JHDIFI� *'DD'�� J'CI� 3�1�~� &�CIDI��������6Select or drag and drop the folder identification path���kdk::KDragWidget�����,,�*FI� *'DD'��������Please select file���kdk::KDragWidgetPrivate���03'FDIB� BIEE�*FI� CI1��2���������Enter a value:���kdk::KInputDialog���"&�E�D/IF� B'D/�1�4�������cancel���kdk::KInputDialogPrivate���,�2ED�4*�1�4�������ok���kdk::KInputDialogPrivate���&'D'BI/'1D'1�������About���kdk::KMenuButton���"3I3*�EI:'� &��I4I4�������Auto���kdk::KMenuButton���B�FIB� 1���������Dark���kdk::KMenuButton���&IFC'3� B'J*�1�4�������Feedback���kdk::KMenuButton���J'1/�E�������Help���kdk::KMenuButton���3�3� 1���������Light���kdk::KMenuButton���C�~FI� *'DD'4�������Options���kdk::KMenuButton�����CIFI4�������Quit���kdk::KMenuButton���(�D�ID�4�������Setting���kdk::KMenuButton���3I1*BI� C�1�F�4I�������Theme���kdk::KMenuButton���"&�E�D/IF� B'D/�1�4�������cancel���kdk::KProgressDialog���&I2/�4�������Search���kdk::KSearchLineEditPrivate���J�BI1I�������High���kdk::KSecurityLevelBar���
++*���F�������Low���kdk::KSecurityLevelBar���&H**�1'�������Medium���kdk::KSecurityLevelBar���
++*���F�������Low���kdk::KSecurityLevelBarPrivate���
++2�1�1�������Required���kdk::KSecurityQuestionDialog���"&�E�D/IF� B'D/�1�4�������Cancel���#kdk::KSecurityQuestionDialogPrivate���3'BD'4�������Save���#kdk::KSecurityQuestionDialogPrivate���
++F'EI�:�������	deb name:���kdk::KUninstallDialog���F�3.I3I�:�������deb version:���kdk::KUninstallDialog��� /�1�'D� J�J���*I4�������	uninstall���kdk::KUninstallDialog���
++F'EI�:�������	deb name:���kdk::KUninstallDialogPrivate���F�3.I3I�:�������deb version:���kdk::KUninstallDialogPrivate���&��� �H�� �'D�*�������Maximize���kdk::KWindowButtonBar��� &�3DI��� B'J*�1�4�������Restore���kdk::KWindowButtonBar���
++&�*I4�������Close���kdk::KWindowButtonBarPrivate���.&��� �H�� �'D�*C�� &�CIDI4�������Maximize���kdk::KWindowButtonBarPrivate���2&��� CI�IC� �'D�*C�� &�CIDI4�������Minimize���kdk::KWindowButtonBarPrivate��� &�3DI��� B'J*�1�4�������Restore���kdk::KWindowButtonBarPrivate����
+\ No newline at end of file
+diff --git a/kysdk-qtwidgets/translations/gui_zh_CN.qm b/kysdk-qtwidgets/translations/gui_zh_CN.qm
+index e728ae5..71a2db8 100644
+--- a/kysdk-qtwidgets/translations/gui_zh_CN.qm
++++ b/kysdk-qtwidgets/translations/gui_zh_CN.qm
+@@ -1,6 +1,11 @@
+-<�d��!�`���B��(��[��e��Sg�����Sg��=������������������&������������G������J6����PFE����R����S�Z�|����Z�5���Ɨh��3��u�����lyz���t):��tt):��$������;����
+-�����o{����I���.�I���<m����ʶ����ʶ�����F5����F5��N	�����C	�<����	˰���
+-2�����
+-2����dX�4����d����i��	���0
+-��y�X�f0�������Privacy statement���kdk::KAboutDialog���g
R�Ne/cV���������Service & Support: ���kdk::KAboutDialog���e�l�bS_���N�[�b7z��������Unable to open mail application���kdk::KAboutDialog���2`�v�|�~�g*[���N�OUu5[P��N�^�u(bg*��n�؋���N�^�u(�������gYour system does not have any email application installed or the default mail application is not set up���kdk::KAboutDialog���g*b~R0[�^�rHg,S��������Version number not found���kdk::KAboutDialogPrivate���rHg,��������	version :���kdk::KAboutDialogPrivate����	b�bb�e>e�N�Y9h�ƍ�_��������6Select or drag and drop the folder identification path���kdk::KDragWidget���
+-���	b�e�N��������Please select file���kdk::KDragWidgetPrivate�������QeepP<��������Enter a value:���kdk::KInputDialog���S�m��������cancel���kdk::KInputDialogPrivate���xn���������ok���kdk::KInputDialogPrivate���QsN��������About���kdk::KMenuButton���^.R��������Assist���kdk::KMenuButton����ߖ�|�~��������Auto���kdk::KMenuButton���m�r�������Dark���kdk::KMenuButton���mE�r�������Light���kdk::KMenuButton����	�y�������Options���kdk::KMenuButton�����Q��������Quit���kdk::KMenuButton�����n�������Setting���kdk::KMenuButton���Y���������Theme���kdk::KMenuButton���S�m��������cancel���kdk::KProgressDialog���d}"�������Search���kdk::KSearchLineEditPrivate������������High���kdk::KSecurityLevelBar���ON�������Low���kdk::KSecurityLevelBar���N-�������Medium���kdk::KSecurityLevelBar���ON�������Low���kdk::KSecurityLevelBarPrivate���ST
��������	deb name:���kdk::KUninstallDialog���rHg,��������deb version:���kdk::KUninstallDialog���z�SsSx�}�������	uninstall���kdk::KUninstallDialog���ST
��������	deb name:���kdk::KUninstallDialogPrivate���rHg,��������deb version:���kdk::KUninstallDialogPrivate���g�Y'S�������Maximize���kdk::KWindowButtonBar�����S��������Restore���kdk::KWindowButtonBar���Qs���������Close���kdk::KWindowButtonBarPrivate���g�Y'S�������Maximize���kdk::KWindowButtonBarPrivate���g�\S�������Minimize���kdk::KWindowButtonBarPrivate�����S��������Restore���kdk::KWindowButtonBarPrivate
+\ No newline at end of file
++<�d��!�`��ݧ���zh_CNB�����[��N��Sg�����Sg��Y�����*��������������0��B������������������G������J6�����PFE���R����o�Z�|��
++l�Z�5��*�Ɨh����u����lyz��������������3t):��	�t):��
++��������I���X;����&������{����B�����I����I���Xm����m�����"��ʶ���bʶ���O�F5��*�F5���	������	�<����	˰���
++2����
++0
++2����
++��z>��	+��[��
�k����h�
4���X�4����d���@i������
++Qs��	�ySa�������	Close Tab���CloseButton���T]�n�R��������Scroll Left���
KCustomTabBar���TS�n�R��������Scroll Right���
KCustomTabBar���0
++��y�X�f0�������Privacy statement���kdk::KAboutDialog���g
R�Ne/cV���������Service & Support: ���kdk::KAboutDialog���e�l�bS_���N�[�b7z��������Unable to open mail application���kdk::KAboutDialog���2`�v�|�~�g*[���N�OUu5[P��N�^�u(bg*��n�؋���N�^�u(�������gYour system does not have any email application installed or the default mail application is not set up���kdk::KAboutDialog���g*b~R0[�^�rHg,S��������Version number not found���kdk::KAboutDialogPrivate���rHg,��������	version :���kdk::KAboutDialogPrivate���
++���	b�e�N��������Please select file���kdk::KAddFileButtonPrivate����	b�bb�e>e�N�Y9h�ƍ�_��������6Select or drag and drop the folder identification path���kdk::KDragWidget���
++���	b�e�N��������Please select file���kdk::KDragWidgetPrivate�������QeepP<��������Enter a value:���kdk::KInputDialog���S�m��������cancel���kdk::KInputDialogPrivate���xn���������ok���kdk::KInputDialogPrivate���QsN��������About���kdk::KMenuButton����ߖ�|�~��������Auto���kdk::KMenuButton���m�r�������Dark���kdk::KMenuButton���a��S͙��������Feedback���kdk::KMenuButton���^.R��������Help���kdk::KMenuButton���mE�r�������Light���kdk::KMenuButton����	�y�������Options���kdk::KMenuButton�����Q��������Quit���kdk::KMenuButton�����n�������Setting���kdk::KMenuButton���Y���������Theme���kdk::KMenuButton���S�m��������cancel���kdk::KProgressDialog���d}"�������Search���kdk::KSearchLineEditPrivate������������High���kdk::KSecurityLevelBar���ON�������Low���kdk::KSecurityLevelBar���N-�������Medium���kdk::KSecurityLevelBar���ON�������Low���kdk::KSecurityLevelBarPrivate���{ThH�������Answer���kdk::KSecurityQuestionDialog���_�Xk�������Required���kdk::KSecurityQuestionDialog���[�Qh��%�1�������Security question%1���kdk::KSecurityQuestionDialog���S�m��������Cancel���#kdk::KSecurityQuestionDialogPrivate���O�[X�������Save���#kdk::KSecurityQuestionDialogPrivate���[�Qh��������Security Question���#kdk::KSecurityQuestionDialogPrivate���@��n[�Qh�S�N�^.R�O`W(_؋�[�xe���n[�x���xnO�N�[���OO{ThH0�������TSetting security questions to reset password when forget it, please remember answer.���#kdk::KSecurityQuestionDialogPrivate���ST
��������	deb name:���kdk::KUninstallDialog���rHg,��������deb version:���kdk::KUninstallDialog���z�SsSx�}�������	uninstall���kdk::KUninstallDialog���ST
��������	deb name:���kdk::KUninstallDialogPrivate���rHg,��������deb version:���kdk::KUninstallDialogPrivate���g�Y'S�������Maximize���kdk::KWindowButtonBar�����S��������Restore���kdk::KWindowButtonBar���Qs���������Close���kdk::KWindowButtonBarPrivate���g�Y'S�������Maximize���kdk::KWindowButtonBarPrivate���g�\S�������Minimize���kdk::KWindowButtonBarPrivate�����S��������Restore���kdk::KWindowButtonBarPrivate
+\ No newline at end of file
+diff --git a/kysdk-qtwidgets/translations/gui_zh_HK.qm b/kysdk-qtwidgets/translations/gui_zh_HK.qm
+index 108bb9f..dff2fa5 100644
+--- a/kysdk-qtwidgets/translations/gui_zh_HK.qm
++++ b/kysdk-qtwidgets/translations/gui_zh_HK.qm
+@@ -1,6 +1,10 @@
+-<�d��!�`���B��(��[��g��Sg�����Sg��?������������������(������������G������J6����PFE����R����U�Z�|����Z�5���Ɨh��5��u�����lyz���t):��vt):��&������;���������q{����I���0�I���>m����ʶ����ʶ�����F5����F5��P	�����C	�<����	˰���
+-2�����
+-2����fX�4����d����i��	
+-���0
+-��y��rf0�������Privacy statement���kdk::KAboutDialog���g
Rقe/cW���� �������Service & Support: ���kdk::KAboutDialog���q!l�bS����N�u(b6z��������Unable to open mail application���kdk::KAboutDialog���2`�v�|�}qg*[���N�OU��[P��N�a�u(bg*�-n��-��N�a�u(�������gYour system does not have any email application installed or the default mail application is not set up���kdk::KAboutDialog���g*b~R0\
a�rHg,�_�������Version number not found���kdk::KAboutDialogPrivate���rHg,��������	version :���kdk::KAboutDialogPrivate����xd�bb�e>��e�Y>�XR%��_��������6Select or drag and drop the folder identification path���kdk::KDragWidget���
+-�ːxd�j�hH�������Please select file���kdk::KDragWidgetPrivate����ˏ8QeexP<��������Enter a value:���kdk::KInputDialog���S�m��������cancel���kdk::KInputDialogPrivate���x����������ok���kdk::KInputDialogPrivate�����e��������About���kdk::KMenuButton�����f�������Assist���kdk::KMenuButton����ߖ�|�}q�������Auto���kdk::KMenuButton���m�r�������Dark���kdk::KMenuButton���m��r�������Light���kdk::KMenuButton����x��������Options���kdk::KMenuButton�����Q��������Quit���kdk::KMenuButton����-n�������Setting���kdk::KMenuButton���Y���������Theme���kdk::KMenuButton���S�m��������cancel���kdk::KProgressDialog���d}"�������Search���kdk::KSearchLineEditPrivate������������High���kdk::KSecurityLevelBar���ON�������Low���kdk::KSecurityLevelBar���N-�������Medium���kdk::KSecurityLevelBar���ON�������Low���kdk::KSecurityLevelBarPrivate���ST
��������	deb name:���kdk::KUninstallDialog���rHg,��������deb version:���kdk::KUninstallDialog���z�SsSx�	�������	uninstall���kdk::KUninstallDialog���ST
��������	deb name:���kdk::KUninstallDialogPrivate���rHg,��������deb version:���kdk::KUninstallDialogPrivate���g�Y'S�������Maximize���kdk::KWindowButtonBar�����S��������Restore���kdk::KWindowButtonBar����ܕ��������Close���kdk::KWindowButtonBarPrivate���g�Y'S�������Maximize���kdk::KWindowButtonBarPrivate���g�\S�������Minimize���kdk::KWindowButtonBarPrivate�����S��������Restore���kdk::KWindowButtonBarPrivate
+\ No newline at end of file
++<�d��!�`��ݧ���zh_HKB�����[��N��Sg�����Sg��W�����*��������������0��@������������������G������J6�����PFE���R����m�Z�|��
++j�Z�5��(�Ɨh����u����lyz��������������1t):��	�t):��
++��������I���V;����$������{����B�����I����I���Vm����m�����"��ʶ���`ʶ���M�F5��(�F5���	������	�<����	˰���
++2����
++.
++2����
++��z>��	)��[��
�k����f�
4���X�4����d���@i�������ܕ�R��������	Close Tab���CloseButton���T]�n�R��������Scroll Left���
KCustomTabBar���TS�n�R��������Scroll Right���
KCustomTabBar���0
++��y��rf0�������Privacy statement���kdk::KAboutDialog���g
Rقe/cW���� �������Service & Support: ���kdk::KAboutDialog���q!l�bS����N�u(b6z��������Unable to open mail application���kdk::KAboutDialog���2`�v�|�}qg*[���N�OU��[P��N�a�u(bg*�-n��-��N�a�u(�������gYour system does not have any email application installed or the default mail application is not set up���kdk::KAboutDialog���g*b~R0\
a�rHg,�_�������Version number not found���kdk::KAboutDialogPrivate���rHg,��������	version :���kdk::KAboutDialogPrivate���
++�ːxd�j�hH�������Please select file���kdk::KAddFileButtonPrivate����xd�bb�e>��e�Y>�XR%��_��������6Select or drag and drop the folder identification path���kdk::KDragWidget���
++�ːxd�j�hH�������Please select file���kdk::KDragWidgetPrivate����ˏ8QeexP<��������Enter a value:���kdk::KInputDialog���S�m��������cancel���kdk::KInputDialogPrivate���x����������ok���kdk::KInputDialogPrivate�����e��������About���kdk::KMenuButton����ߖ�|�}q�������Auto���kdk::KMenuButton���m�r�������Dark���kdk::KMenuButton���S�S͙K�������Feedback���kdk::KMenuButton���^kR��������Help���kdk::KMenuButton���m��r�������Light���kdk::KMenuButton����x��������Options���kdk::KMenuButton�����Q��������Quit���kdk::KMenuButton����-n�������Setting���kdk::KMenuButton���Y���������Theme���kdk::KMenuButton���S�m��������cancel���kdk::KProgressDialog���d}"�������Search���kdk::KSearchLineEditPrivate������������High���kdk::KSecurityLevelBar���ON�������Low���kdk::KSecurityLevelBar���N-�������Medium���kdk::KSecurityLevelBar���ON�������Low���kdk::KSecurityLevelBarPrivate���{ThH�������Answer���kdk::KSecurityQuestionDialog�����lB�������Required���kdk::KSecurityQuestionDialog���[�QhUO�L�%�1�������Security question%1���kdk::KSecurityQuestionDialog���S�m��������Cancel���#kdk::KSecurityQuestionDialogPrivate���O�[X�������Save���#kdk::KSecurityQuestionDialogPrivate���[�QhUO�L�������Security Question���#kdk::KSecurityQuestionDialogPrivate���@�-n[�QhUO�LS�N�^kR�O`Q�_؊[�x�fB��n[�x����x�O�N�[��OO{ThH0�������TSetting security questions to reset password when forget it, please remember answer.���#kdk::KSecurityQuestionDialogPrivate���ST
��������	deb name:���kdk::KUninstallDialog���rHg,��������deb version:���kdk::KUninstallDialog���z�SsSx�	�������	uninstall���kdk::KUninstallDialog���ST
��������	deb name:���kdk::KUninstallDialogPrivate���rHg,��������deb version:���kdk::KUninstallDialogPrivate���g�Y'S�������Maximize���kdk::KWindowButtonBar�����S��������Restore���kdk::KWindowButtonBar����ܕ��������Close���kdk::KWindowButtonBarPrivate���g�Y'S�������Maximize���kdk::KWindowButtonBarPrivate���g�\S�������Minimize���kdk::KWindowButtonBarPrivate�����S��������Restore���kdk::KWindowButtonBarPrivate
+\ No newline at end of file
diff -Nru libkysdk-applications-2.5.1.0/debian/patches/0004-Translated-using-Weblate-Uyghur.patch libkysdk-applications-2.5.2.0/debian/patches/0004-Translated-using-Weblate-Uyghur.patch
--- libkysdk-applications-2.5.1.0/debian/patches/0004-Translated-using-Weblate-Uyghur.patch	2024-07-31 11:09:38.000000000 +0800
+++ libkysdk-applications-2.5.2.0/debian/patches/0004-Translated-using-Weblate-Uyghur.patch	1970-01-01 08:00:00.000000000 +0800
@@ -1,231 +0,0 @@
-From: KevinDuan <duankaiwen@kylinos.com>
-Date: Tue, 21 May 2024 02:46:49 +0000
-Subject: Translated using Weblate (Uyghur)
-
-Currently translated at 78.3% (29 of 37 strings)
-
-Translation: openkylin-nile-new/libkysdk-applications
-Translate-URL: http://weblate.openkylin.top/projects/openkylin-nile-new/libkysdk-applications/ug/
----
- kysdk-qtwidgets/translations/gui_ug.ts | 58 +++++++++++++++++-----------------
- 1 file changed, 29 insertions(+), 29 deletions(-)
-
-diff --git a/kysdk-qtwidgets/translations/gui_ug.ts b/kysdk-qtwidgets/translations/gui_ug.ts
-index 1778169..5aff81b 100644
---- a/kysdk-qtwidgets/translations/gui_ug.ts
-+++ b/kysdk-qtwidgets/translations/gui_ug.ts
-@@ -18,7 +18,7 @@
-         <location filename="../src/kaboutdialog.cpp" line="271"/>
-         <source>Service &amp; Support: </source>
-         <translatorcomment>服务与支持团队:</translatorcomment>
--        <translation type="unfinished"></translation>
-+        <translation>مۇلازىمەت ۋە قوللىغان كوللېكتىپ </translation>
-     </message>
-     <message>
-         <location filename="../src/kaboutdialog.cpp" line="263"/>
-@@ -61,7 +61,7 @@
-     <message>
-         <location filename="../src/kinputdialog.cpp" line="241"/>
-         <source>Enter a value:</source>
--        <translation type="unfinished"></translation>
-+        <translation>بىر قىممەتنى كىرگۈزۈڭ:</translation>
-     </message>
- </context>
- <context>
-@@ -69,12 +69,12 @@
-     <message>
-         <location filename="../src/kinputdialog.cpp" line="250"/>
-         <source>ok</source>
--        <translation type="unfinished"></translation>
-+        <translation>جەزملەشتۈرۈش</translation>
-     </message>
-     <message>
-         <location filename="../src/kinputdialog.cpp" line="252"/>
-         <source>cancel</source>
--        <translation type="unfinished"></translation>
-+        <translation>بىكار قىلىش</translation>
-     </message>
- </context>
- <context>
-@@ -82,48 +82,48 @@
-     <message>
-         <location filename="../src/kmenubutton.cpp" line="67"/>
-         <source>Options</source>
--        <translation type="unfinished"></translation>
-+        <translation>تاللانمىلار</translation>
-     </message>
-     <message>
-         <location filename="../src/kmenubutton.cpp" line="68"/>
-         <source>Setting</source>
-         <translatorcomment>设置</translatorcomment>
--        <translation type="unfinished"></translation>
-+        <translation>تەڭشەك</translation>
-     </message>
-     <message>
-         <location filename="../src/kmenubutton.cpp" line="69"/>
-         <source>Theme</source>
--        <translation type="unfinished"></translation>
-+        <translation>ئۇسلۇب</translation>
-     </message>
-     <message>
-         <location filename="../src/kmenubutton.cpp" line="70"/>
-         <source>Assist</source>
--        <translation type="unfinished"></translation>
-+        <translation>ياردەم</translation>
-     </message>
-     <message>
-         <location filename="../src/kmenubutton.cpp" line="71"/>
-         <source>About</source>
--        <translation type="unfinished"></translation>
-+        <translation>ھەققىدە</translation>
-     </message>
-     <message>
-         <location filename="../src/kmenubutton.cpp" line="72"/>
-         <source>Quit</source>
--        <translation type="unfinished"></translation>
-+        <translation>چېكىنىش</translation>
-     </message>
-     <message>
-         <location filename="../src/kmenubutton.cpp" line="79"/>
-         <source>Auto</source>
--        <translation type="unfinished"></translation>
-+        <translation>ئاپتۇماتىك</translation>
-     </message>
-     <message>
-         <location filename="../src/kmenubutton.cpp" line="81"/>
-         <source>Light</source>
--        <translation type="unfinished"></translation>
-+        <translation>سۇس</translation>
-     </message>
-     <message>
-         <location filename="../src/kmenubutton.cpp" line="83"/>
-         <source>Dark</source>
--        <translation type="unfinished"></translation>
-+        <translation>قېنىق</translation>
-     </message>
- </context>
- <context>
-@@ -131,7 +131,7 @@
-     <message>
-         <location filename="../src/kprogressdialog.cpp" line="70"/>
-         <source>cancel</source>
--        <translation type="unfinished"></translation>
-+        <translation>بىكار قىلىش</translation>
-     </message>
- </context>
- <context>
-@@ -140,7 +140,7 @@
-         <location filename="../src/ksearchlineedit.cpp" line="627"/>
-         <location filename="../src/ksearchlineedit.cpp" line="815"/>
-         <source>Search</source>
--        <translation type="unfinished"></translation>
-+        <translation>ئىزدە</translation>
-     </message>
- </context>
- <context>
-@@ -148,7 +148,7 @@
-     <message>
-         <location filename="../src/ksecuritylevelbar.cpp" line="62"/>
-         <source>Low</source>
--        <translation type="unfinished"></translation>
-+        <translation>تۆۋەن</translation>
-     </message>
-     <message>
-         <location filename="../src/ksecuritylevelbar.cpp" line="65"/>
-@@ -158,7 +158,7 @@
-     <message>
-         <location filename="../src/ksecuritylevelbar.cpp" line="68"/>
-         <source>High</source>
--        <translation type="unfinished"></translation>
-+        <translation>يۇقىرى</translation>
-     </message>
- </context>
- <context>
-@@ -166,7 +166,7 @@
-     <message>
-         <location filename="../src/ksecuritylevelbar.cpp" line="179"/>
-         <source>Low</source>
--        <translation type="unfinished"></translation>
-+        <translation>تۆۋەن</translation>
-     </message>
- </context>
- <context>
-@@ -176,17 +176,17 @@
-         <location filename="../src/kuninstalldialog.cpp" line="216"/>
-         <source>uninstall</source>
-         <translatorcomment>立即卸载</translatorcomment>
--        <translation type="unfinished"></translation>
-+        <translation>ئۆچۈرۈش</translation>
-     </message>
-     <message>
-         <location filename="../src/kuninstalldialog.cpp" line="185"/>
-         <source>deb name:</source>
--        <translation type="unfinished"></translation>
-+        <translation>بولاق نامى:</translation>
-     </message>
-     <message>
-         <location filename="../src/kuninstalldialog.cpp" line="190"/>
-         <source>deb version:</source>
--        <translation type="unfinished"></translation>
-+        <translation>نەشرى:</translation>
-     </message>
- </context>
- <context>
-@@ -194,12 +194,12 @@
-     <message>
-         <location filename="../src/kuninstalldialog.cpp" line="305"/>
-         <source>deb name:</source>
--        <translation type="unfinished"></translation>
-+        <translation>بولاق نامى:</translation>
-     </message>
-     <message>
-         <location filename="../src/kuninstalldialog.cpp" line="309"/>
-         <source>deb version:</source>
--        <translation type="unfinished"></translation>
-+        <translation>نەشرى:</translation>
-     </message>
- </context>
- <context>
-@@ -208,13 +208,13 @@
-         <location filename="../src/kwindowbuttonbar.cpp" line="156"/>
-         <location filename="../src/kwindowbuttonbar.cpp" line="178"/>
-         <source>Maximize</source>
--        <translation type="unfinished"></translation>
-+        <translation>چوڭايتىش</translation>
-     </message>
-     <message>
-         <location filename="../src/kwindowbuttonbar.cpp" line="162"/>
-         <location filename="../src/kwindowbuttonbar.cpp" line="183"/>
-         <source>Restore</source>
--        <translation type="unfinished"></translation>
-+        <translation>ئەسلىگە كەلتۈرۈش</translation>
-     </message>
- </context>
- <context>
-@@ -222,22 +222,22 @@
-     <message>
-         <location filename="../src/kwindowbuttonbar.cpp" line="271"/>
-         <source>Minimize</source>
--        <translation type="unfinished"></translation>
-+        <translation>كىچىكلىتىش</translation>
-     </message>
-     <message>
-         <location filename="../src/kwindowbuttonbar.cpp" line="280"/>
-         <source>Close</source>
--        <translation type="unfinished"></translation>
-+        <translation>تاقاش</translation>
-     </message>
-     <message>
-         <location filename="../src/kwindowbuttonbar.cpp" line="341"/>
-         <source>Maximize</source>
--        <translation type="unfinished"></translation>
-+        <translation>چوڭايتىش</translation>
-     </message>
-     <message>
-         <location filename="../src/kwindowbuttonbar.cpp" line="346"/>
-         <source>Restore</source>
--        <translation type="unfinished"></translation>
-+        <translation>ئەسلىگە كەلتۈرۈش</translation>
-     </message>
- </context>
- </TS>
diff -Nru libkysdk-applications-2.5.1.0/debian/patches/0004-update-changelog.patch libkysdk-applications-2.5.2.0/debian/patches/0004-update-changelog.patch
--- libkysdk-applications-2.5.1.0/debian/patches/0004-update-changelog.patch	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/debian/patches/0004-update-changelog.patch	2025-03-17 13:09:05.000000000 +0800
@@ -0,0 +1,76 @@
+From: sunzhen <sunzhen1@kylinos.cn>
+Date: Thu, 28 Nov 2024 17:30:33 +0800
+Subject: update changelog
+
+---
+ kysdk-waylandhelper/src/windowmanager/abstractinterface.h      | 3 ++-
+ kysdk-waylandhelper/src/windowmanager/ukuishell.cpp            | 3 +++
+ kysdk-waylandhelper/src/windowmanager/ukuishell.h              | 3 ++-
+ kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.cpp | 5 ++++-
+ 4 files changed, 11 insertions(+), 3 deletions(-)
+
+diff --git a/kysdk-waylandhelper/src/windowmanager/abstractinterface.h b/kysdk-waylandhelper/src/windowmanager/abstractinterface.h
+index 1f5b540..d812e8b 100644
+--- a/kysdk-waylandhelper/src/windowmanager/abstractinterface.h
++++ b/kysdk-waylandhelper/src/windowmanager/abstractinterface.h
+@@ -50,7 +50,8 @@ enum class WindowLayer {
+     InputPanel,
+     Logout,
+     ScreenLockNotification,
+-    Switcher
++    Switcher,
++    Authentication
+ };
+ 
+ class AbstractInterface:public QObject
+diff --git a/kysdk-waylandhelper/src/windowmanager/ukuishell.cpp b/kysdk-waylandhelper/src/windowmanager/ukuishell.cpp
+index c1e5d3a..a6e954e 100644
+--- a/kysdk-waylandhelper/src/windowmanager/ukuishell.cpp
++++ b/kysdk-waylandhelper/src/windowmanager/ukuishell.cpp
+@@ -300,6 +300,9 @@ void UkuiShellSurface::setRole(UkuiShellSurface::Role role)
+     case  Role::Switcher:
+         wlRole = UKUI_SURFACE_ROLE_SWITCHER;
+         break;
++    case  Role::Authentication:
++        wlRole = UKUI_SURFACE_ROLE_AUTHENTICATION;
++        break;
+     default:
+         Q_UNREACHABLE();
+         break;
+diff --git a/kysdk-waylandhelper/src/windowmanager/ukuishell.h b/kysdk-waylandhelper/src/windowmanager/ukuishell.h
+index 8322c1c..392ecfd 100644
+--- a/kysdk-waylandhelper/src/windowmanager/ukuishell.h
++++ b/kysdk-waylandhelper/src/windowmanager/ukuishell.h
+@@ -103,7 +103,8 @@ public:
+         InputPanel,
+         Logout,
+         ScreenLockNotification,
+-        Switcher
++        Switcher,
++        Authentication,
+     };
+ 
+     enum class SurfaceProperty {
+diff --git a/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.cpp b/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.cpp
+index 6bb0bce..aa86345 100644
+--- a/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.cpp
++++ b/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.cpp
+@@ -8,7 +8,7 @@
+ #include "wayland-ext-idle-notify-v1-client-protocol.h"
+ 
+ static const u_int32_t ukui_window_management_surpported_version = 1;
+-static const u_int32_t ukui_shell_surpported_version = 1;
++static const u_int32_t ukui_shell_surpported_version = 2;
+ static const u_int32_t wayland_xdg_activation_surpported_version = 1;
+ static const u_int32_t wayland_ext_idle_notify_surpported_version = 1;
+ 
+@@ -482,6 +482,9 @@ void UkuiWaylandInterface::setWindowLayer(QWindow *window, WindowLayer layer)
+         case WindowLayer::Switcher:
+             ukuiShellSurface->setRole(UkuiShellSurface::Role::Switcher);
+             break;
++        case WindowLayer::Authentication:
++            ukuiShellSurface->setRole(UkuiShellSurface::Role::Authentication);
++            break;
+         default:
+         {
+             qWarning()<<"It is not a surpported window layer by ukui protocols! id:" << (int)layer;
diff -Nru libkysdk-applications-2.5.1.0/debian/patches/0005-update-changelog.patch libkysdk-applications-2.5.2.0/debian/patches/0005-update-changelog.patch
--- libkysdk-applications-2.5.1.0/debian/patches/0005-update-changelog.patch	2024-07-31 11:09:38.000000000 +0800
+++ libkysdk-applications-2.5.2.0/debian/patches/0005-update-changelog.patch	2025-03-17 13:09:05.000000000 +0800
@@ -1,910 +1,23 @@
 From: sunzhen <sunzhen1@kylinos.cn>
-Date: Tue, 21 May 2024 08:34:22 +0500
+Date: Fri, 29 Nov 2024 14:40:19 +0800
 Subject: update changelog
 
 ---
- .../src/windowmanager/abstractinterface.cpp        |  20 +++
- .../src/windowmanager/abstractinterface.h          |  21 +++
- .../src/windowmanager/kdewaylandinterface.cpp      | 160 ++++++++++++++++++
- .../src/windowmanager/kdewaylandinterface.h        |   3 +
- .../src/windowmanager/ukuishell.cpp                |   8 +
- kysdk-waylandhelper/src/windowmanager/ukuishell.h  |   6 +-
- .../src/windowmanager/ukuiwaylandinterface.cpp     | 181 +++++++++++++++++++++
- .../src/windowmanager/ukuiwaylandinterface.h       |   6 +-
- .../src/windowmanager/windowmanager.cpp            |  24 +++
- .../src/windowmanager/windowmanager.h              |  32 +++-
- .../src/windowmanager/xcbinterface.cpp             | 166 +++++++++++++++++++
- .../src/windowmanager/xcbinterface.h               |   9 +-
- .../test/testWindowManager/widget.cpp              |  14 +-
- .../test/testWindowManager/widget.h                |   2 +
- 14 files changed, 642 insertions(+), 10 deletions(-)
+ kysdk-waylandhelper/kysdk-waylandhelper.pro | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
-diff --git a/kysdk-waylandhelper/src/windowmanager/abstractinterface.cpp b/kysdk-waylandhelper/src/windowmanager/abstractinterface.cpp
-index dcf7b56..4799ed2 100644
---- a/kysdk-waylandhelper/src/windowmanager/abstractinterface.cpp
-+++ b/kysdk-waylandhelper/src/windowmanager/abstractinterface.cpp
-@@ -148,3 +148,23 @@ void AbstractInterface::setPanelAutoHide(QWindow *window, bool autoHide)
-     Q_UNUSED(autoHide)
-     return;
- }
-+
-+void AbstractInterface::setGrabKeyboard(QWindow *window, bool grabKeyboard)
-+{
-+    Q_UNUSED(window)
-+    Q_UNUSED(grabKeyboard)
-+    return;
-+}
-+
-+void AbstractInterface::setWindowLayer(QWindow *window, WindowLayer layer)
-+{
-+    Q_UNUSED(window)
-+    Q_UNUSED(layer)
-+    return;
-+}
-+
-+WindowLayer AbstractInterface::windowLayer(QWindow *window)
-+{
-+    Q_UNUSED(window)
-+    return WindowLayer::Normal;
-+}
-diff --git a/kysdk-waylandhelper/src/windowmanager/abstractinterface.h b/kysdk-waylandhelper/src/windowmanager/abstractinterface.h
-index eface2f..d805ab8 100644
---- a/kysdk-waylandhelper/src/windowmanager/abstractinterface.h
-+++ b/kysdk-waylandhelper/src/windowmanager/abstractinterface.h
-@@ -34,6 +34,24 @@ namespace kdk
- using WindowId = QVariant;
- class KWindows;
+diff --git a/kysdk-waylandhelper/kysdk-waylandhelper.pro b/kysdk-waylandhelper/kysdk-waylandhelper.pro
+index 06b5959..b1b4573 100644
+--- a/kysdk-waylandhelper/kysdk-waylandhelper.pro
++++ b/kysdk-waylandhelper/kysdk-waylandhelper.pro
+@@ -30,8 +30,8 @@ system(wayland-scanner private-code /usr/share/wayland-protocols/staging/xdg-act
+ system(wayland-scanner client-header /usr/share/wayland-protocols/staging/ext-idle-notify/ext-idle-notify-v1.xml src/windowmanager/wayland-ext-idle-notify-v1-client-protocol.h)
+ system(wayland-scanner private-code /usr/share/wayland-protocols/staging/ext-idle-notify/ext-idle-notify-v1.xml src/windowmanager/wayland-ext-idle-notify-v1-protocol.c)
+ 
+-system(wayland-scanner client-header /usr/share/kylin-wayland-protocols/ukui-blur.xml src/blurmanager/ukui-blur-manager-client-protocol.h)
+-system(wayland-scanner private-code /usr/share/kylin-wayland-protocols/ukui-blur.xml src/blurmanager/ukui-blur-manager-core-protocol.c)
++system(wayland-scanner client-header /usr/share/kylin-wayland-protocols/ukui-blur-v1.xml src/blurmanager/ukui-blur-manager-client-protocol.h)
++system(wayland-scanner private-code /usr/share/kylin-wayland-protocols/ukui-blur-v1.xml src/blurmanager/ukui-blur-manager-core-protocol.c)
  
-+enum class WindowLayer {
-+    Normal,
-+    Desktop,
-+    Panel,
-+    OnScreenDisplay,
-+    Notification,
-+    ToolTip,
-+    CriticalNotification,
-+    AppletPop,
-+    ScreenLock,
-+    Watermark,
-+    SystemWindow,
-+    InputPanel,
-+    Logout,
-+    ScreenLockNotification,
-+    Switcher
-+};
-+
- class AbstractInterface:public QObject
- {
-     Q_OBJECT
-@@ -91,6 +109,9 @@ public:
-     virtual void setIdleInterval(int msec);
-     virtual QRect windowGeometry(const WindowId& windowId);
-     virtual void setPanelAutoHide(QWindow *window, bool autoHide);
-+    virtual void setGrabKeyboard(QWindow *window, bool grabKeyboard);
-+    virtual void setWindowLayer(QWindow *window, WindowLayer layer);
-+    virtual WindowLayer windowLayer(QWindow *window);
- 
- Q_SIGNALS:
-     void activeWindowChanged(WindowId wid);
-diff --git a/kysdk-waylandhelper/src/windowmanager/kdewaylandinterface.cpp b/kysdk-waylandhelper/src/windowmanager/kdewaylandinterface.cpp
-index 06d8e27..c0a96d3 100644
---- a/kysdk-waylandhelper/src/windowmanager/kdewaylandinterface.cpp
-+++ b/kysdk-waylandhelper/src/windowmanager/kdewaylandinterface.cpp
-@@ -1,6 +1,7 @@
- #include "kdewaylandinterface.h"
- #include "wayland-plasma-window-management-client-protocol.h"
- #include <QApplication>
-+#include <QDebug>
- 
- KdeWaylandInterface::KdeWaylandInterface(QObject *parent)
-     : AbstractInterface(parent)
-@@ -462,6 +463,165 @@ QRect KdeWaylandInterface::windowGeometry(const WindowId &windowId)
-         return QRect(0, 0, 0, 0);
- }
- 
-+void KdeWaylandInterface::setWindowLayer(QWindow *window, WindowLayer layer)
-+{
-+    if(!window)
-+        return;
-+    if (!m_plasmaShell)
-+        return;
-+
-+    auto surface = KWayland::Client::Surface::fromWindow(window);
-+    if (!surface)
-+        return;
-+    if(!m_surfaces.contains(window))
-+    {
-+        m_surfaces.insert(window,surface);
-+    }
-+
-+    auto plasmaShellSurface = m_plasmaShell->createSurface(surface, window);
-+    if (!plasmaShellSurface)
-+        return;
-+    if(!m_plasmaShellSurfaces.contains(window))
-+    {
-+        m_plasmaShellSurfaces.insert(window,plasmaShellSurface);
-+    }
-+    window->installEventFilter(this);
-+
-+    switch(layer)
-+    {
-+        case WindowLayer::Desktop:
-+            plasmaShellSurface->setRole(PlasmaShellSurface::Role::Desktop);
-+            break;
-+        case WindowLayer::Panel:
-+            plasmaShellSurface->setRole(PlasmaShellSurface::Role::Panel);
-+            break;
-+        case WindowLayer::OnScreenDisplay:
-+            plasmaShellSurface->setRole(PlasmaShellSurface::Role::OnScreenDisplay);
-+            break;
-+        case WindowLayer::Notification:
-+            plasmaShellSurface->setRole(PlasmaShellSurface::Role::Notification);
-+            break;
-+        case WindowLayer::ToolTip:
-+            plasmaShellSurface->setRole(PlasmaShellSurface::Role::ToolTip);
-+            break;
-+        case WindowLayer::CriticalNotification:
-+            plasmaShellSurface->setRole(PlasmaShellSurface::Role::CriticalNotification);
-+            break;
-+        case WindowLayer::AppletPop:
-+        {
-+            plasmaShellSurface->setRole(PlasmaShellSurface::Role::ToolTip);
-+            qWarning()<<"plasmashellsurface does not surport AppletPop layer, replaced by Tooltip";
-+            break;
-+        }
-+
-+        case WindowLayer::ScreenLock:
-+            plasmaShellSurface->setRole(PlasmaShellSurface::Role::ScreenLock);
-+            break;
-+        case WindowLayer::Watermark:
-+            plasmaShellSurface->setRole(PlasmaShellSurface::Role::Watermark);
-+            break;
-+        case WindowLayer::SystemWindow:
-+            plasmaShellSurface->setRole(PlasmaShellSurface::Role::SystemWindow);
-+            break;
-+        case WindowLayer::InputPanel:
-+            plasmaShellSurface->setRole(PlasmaShellSurface::Role::InputPanel);
-+            break;
-+        case WindowLayer::Logout:
-+            plasmaShellSurface->setRole(PlasmaShellSurface::Role::Logout);
-+            break;
-+        case WindowLayer::ScreenLockNotification:
-+            plasmaShellSurface->setRole(PlasmaShellSurface::Role::ScreenLockNotification);
-+            break;
-+        case WindowLayer::Switcher:
-+        {
-+            plasmaShellSurface->setRole(PlasmaShellSurface::Role::Panel);
-+            qWarning()<<"plasmashellsurface does not surport Switcher layer, replaced by Panel";
-+            break;
-+        }
-+
-+        default:
-+        {
-+            qWarning()<<"It is not a surported window layer by kde protocols! id:" << (int)layer;
-+            plasmaShellSurface->setRole(PlasmaShellSurface::Role::Normal);
-+            break;
-+        }
-+    }
-+
-+}
-+
-+WindowLayer KdeWaylandInterface::windowLayer(QWindow *window)
-+{
-+    if(!window)
-+        return WindowLayer::Normal;
-+    if (!m_plasmaShell)
-+        return WindowLayer::Normal;
-+
-+    auto surface = KWayland::Client::Surface::fromWindow(window);
-+    if (!surface)
-+        return WindowLayer::Normal;
-+    if(!m_surfaces.contains(window))
-+    {
-+        m_surfaces.insert(window,surface);
-+    }
-+
-+    auto plasmaShellSurface = m_plasmaShell->createSurface(surface, window);
-+    if (!plasmaShellSurface)
-+        return WindowLayer::Normal;
-+    if(!m_plasmaShellSurfaces.contains(window))
-+    {
-+        m_plasmaShellSurfaces.insert(window,plasmaShellSurface);
-+    }
-+    window->installEventFilter(this);
-+
-+    WindowLayer layer; //not surport applet and switcher layer
-+    switch(plasmaShellSurface->role())
-+    {
-+        case PlasmaShellSurface::Role::Normal:
-+            layer = WindowLayer::Normal;
-+            break;
-+        case PlasmaShellSurface::Role::Desktop:
-+            layer = WindowLayer::Desktop;
-+            break;
-+        case PlasmaShellSurface::Role::Panel:
-+            layer = WindowLayer::Panel;
-+            break;
-+        case PlasmaShellSurface::Role::OnScreenDisplay:
-+            layer = WindowLayer::OnScreenDisplay;
-+            break;
-+        case PlasmaShellSurface::Role::Notification:
-+            layer = WindowLayer::Notification;
-+            break;
-+        case PlasmaShellSurface::Role::ToolTip:
-+            layer = WindowLayer::ToolTip;
-+            break;
-+        case PlasmaShellSurface::Role::CriticalNotification:
-+            layer = WindowLayer::CriticalNotification;
-+            break;
-+        case PlasmaShellSurface::Role::ScreenLock:
-+            layer = WindowLayer::ScreenLock;
-+            break;
-+        case PlasmaShellSurface::Role::Watermark:
-+            layer = WindowLayer::Watermark;
-+            break;
-+        case PlasmaShellSurface::Role::SystemWindow:
-+            layer = WindowLayer::SystemWindow;
-+            break;
-+        case PlasmaShellSurface::Role::InputPanel:
-+            layer = WindowLayer::InputPanel;
-+            break;
-+        case PlasmaShellSurface::Role::Logout:
-+            layer = WindowLayer::Logout;
-+            break;
-+        case PlasmaShellSurface::Role::ScreenLockNotification:
-+            layer = WindowLayer::ScreenLockNotification;
-+            break;
-+        default:
-+            layer = WindowLayer::Normal;
-+            break;
-+    }
-+    return layer;
-+}
-+
- bool KdeWaylandInterface::eventFilter(QObject *obj, QEvent *ev)
- {
-     auto window = qobject_cast<QWindow*>(obj);
-diff --git a/kysdk-waylandhelper/src/windowmanager/kdewaylandinterface.h b/kysdk-waylandhelper/src/windowmanager/kdewaylandinterface.h
-index b0665ff..28ef388 100644
---- a/kysdk-waylandhelper/src/windowmanager/kdewaylandinterface.h
-+++ b/kysdk-waylandhelper/src/windowmanager/kdewaylandinterface.h
-@@ -80,6 +80,9 @@ public:
-     void demandAttention(const WindowId &wid)override;
-     QRect windowGeometry(const WindowId& windowId) override;
- 
-+    void setWindowLayer(QWindow *window, WindowLayer layer) override;
-+    WindowLayer windowLayer(QWindow *window) override;
-+
- 
- protected:
-     bool eventFilter(QObject *obj, QEvent *ev) override;
-diff --git a/kysdk-waylandhelper/src/windowmanager/ukuishell.cpp b/kysdk-waylandhelper/src/windowmanager/ukuishell.cpp
-index 76935a1..b3d9692 100644
---- a/kysdk-waylandhelper/src/windowmanager/ukuishell.cpp
-+++ b/kysdk-waylandhelper/src/windowmanager/ukuishell.cpp
-@@ -252,6 +252,9 @@ void UkuiShellSurface::setRole(UkuiShellSurface::Role role)
-     case  Role::ScreenLockNotification:
-         wlRole = UKUI_SURFACE_ROLE_SCREENLOCKNOTIFICATION;
-         break;
-+    case  Role::Switcher:
-+        wlRole = UKUI_SURFACE_ROLE_SWITCHER;
-+        break;
-     default:
-         Q_UNREACHABLE();
-         break;
-@@ -328,3 +331,8 @@ void UkuiShellSurface::setPanelAutoHide(bool autoHide)
-     ukui_surface_set_panel_auto_hide(d->surface, autoHide);
- }
- 
-+void UkuiShellSurface::setGrabKeyboard(wl_seat *seat)
-+{
-+    ukui_surface_grab_keyboard(d->surface, seat);
-+}
-+
-diff --git a/kysdk-waylandhelper/src/windowmanager/ukuishell.h b/kysdk-waylandhelper/src/windowmanager/ukuishell.h
-index eb91c8d..ad5bdfb 100644
---- a/kysdk-waylandhelper/src/windowmanager/ukuishell.h
-+++ b/kysdk-waylandhelper/src/windowmanager/ukuishell.h
-@@ -11,6 +11,7 @@
- 
- struct wl_surface;
- struct ukui_surface;
-+struct wl_seat;
- 
- class UkuiShellSurface;
- 
-@@ -93,7 +94,8 @@ public:
-         SystemWindow,
-         InputPanel,
-         Logout,
--        ScreenLockNotification
-+        ScreenLockNotification,
-+        Switcher
-     };
- 
-     enum class SurfaceProperty {
-@@ -126,6 +128,8 @@ public:
- 
-     void setPanelAutoHide(bool autoHide);
- 
-+    void setGrabKeyboard(wl_seat* seat);
-+
- 
- Q_SIGNALS:
- 
-diff --git a/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.cpp b/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.cpp
-index f5cf102..ce45a12 100644
---- a/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.cpp
-+++ b/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.cpp
-@@ -403,6 +403,187 @@ void UkuiWaylandInterface::setPanelAutoHide(QWindow *window, bool autoHide)
-     window->installEventFilter(this);
- }
- 
-+void UkuiWaylandInterface::setGrabKeyboard(QWindow *window, bool autoHide)
-+{
-+    Q_UNUSED(autoHide)
-+    if(!window)
-+        return;
-+    if (!m_ukuiShell)
-+        return;
-+
-+    auto surface = KWayland::Client::Surface::fromWindow(window);
-+    if (!surface)
-+        return;
-+    if(!m_surfaces.contains(window))
-+    {
-+        m_surfaces.insert(window,surface);
-+    }
-+
-+    auto ukuiShellSurface = m_ukuiShell->createSurface(surface, window);
-+    if (!ukuiShellSurface)
-+        return;
-+    if(!m_ukuiShellSurfaces.contains(window))
-+    {
-+        m_ukuiShellSurfaces.insert(window,ukuiShellSurface);
-+    }
-+    ukuiShellSurface->setGrabKeyboard(m_seat);
-+    window->installEventFilter(this);
-+}
-+
-+void UkuiWaylandInterface::setWindowLayer(QWindow *window, WindowLayer layer)
-+{
-+    if(!window)
-+        return;
-+    if (!m_ukuiShell)
-+        return;
-+
-+    auto surface = KWayland::Client::Surface::fromWindow(window);
-+    if (!surface)
-+        return;
-+    if(!m_surfaces.contains(window))
-+    {
-+        m_surfaces.insert(window,surface);
-+    }
-+
-+    auto ukuiShellSurface = m_ukuiShell->createSurface(surface, window);
-+    if (!ukuiShellSurface)
-+        return;
-+    if(!m_ukuiShellSurfaces.contains(window))
-+    {
-+        m_ukuiShellSurfaces.insert(window,ukuiShellSurface);
-+    }
-+    switch(layer)
-+    {
-+        case WindowLayer::Desktop:
-+            ukuiShellSurface->setRole(UkuiShellSurface::Role::Desktop);
-+            break;
-+        case WindowLayer::Panel:
-+            ukuiShellSurface->setRole(UkuiShellSurface::Role::Panel);
-+            break;
-+        case WindowLayer::OnScreenDisplay:
-+            ukuiShellSurface->setRole(UkuiShellSurface::Role::OnScreenDisplay);
-+            break;
-+        case WindowLayer::Notification:
-+            ukuiShellSurface->setRole(UkuiShellSurface::Role::Notification);
-+            break;
-+        case WindowLayer::ToolTip:
-+            ukuiShellSurface->setRole(UkuiShellSurface::Role::ToolTip);
-+            break;
-+        case WindowLayer::CriticalNotification:
-+            ukuiShellSurface->setRole(UkuiShellSurface::Role::CriticalNotification);
-+            break;
-+        case WindowLayer::AppletPop:
-+            ukuiShellSurface->setRole(UkuiShellSurface::Role::AppletPop);
-+            break;
-+        case WindowLayer::ScreenLock:
-+            ukuiShellSurface->setRole(UkuiShellSurface::Role::ScreenLock);
-+            break;
-+        case WindowLayer::Watermark:
-+            ukuiShellSurface->setRole(UkuiShellSurface::Role::Watermark);
-+            break;
-+        case WindowLayer::SystemWindow:
-+            ukuiShellSurface->setRole(UkuiShellSurface::Role::SystemWindow);
-+            break;
-+        case WindowLayer::InputPanel:
-+            ukuiShellSurface->setRole(UkuiShellSurface::Role::InputPanel);
-+            break;
-+        case WindowLayer::Logout:
-+            ukuiShellSurface->setRole(UkuiShellSurface::Role::Logout);
-+            break;
-+        case WindowLayer::ScreenLockNotification:
-+            ukuiShellSurface->setRole(UkuiShellSurface::Role::ScreenLockNotification);
-+            break;
-+        case WindowLayer::Switcher:
-+            ukuiShellSurface->setRole(UkuiShellSurface::Role::Switcher);
-+            break;
-+        default:
-+        {
-+            qWarning()<<"It is not a surported window layer by ukui protocols! id:" << (int)layer;
-+            ukuiShellSurface->setRole(UkuiShellSurface::Role::Normal);
-+            break;
-+        }
-+    }
-+    window->installEventFilter(this);
-+}
-+
-+WindowLayer UkuiWaylandInterface::windowLayer(QWindow *window)
-+{
-+    if(!window)
-+        return WindowLayer::Normal;
-+    if (!m_ukuiShell)
-+        return WindowLayer::Normal;;
-+
-+    auto surface = KWayland::Client::Surface::fromWindow(window);
-+    if (!surface)
-+        return WindowLayer::Normal;;
-+    if(!m_surfaces.contains(window))
-+    {
-+        m_surfaces.insert(window,surface);
-+    }
-+
-+    auto ukuiShellSurface = m_ukuiShell->createSurface(surface, window);
-+    if (!ukuiShellSurface)
-+        return WindowLayer::Normal;;
-+    if(!m_ukuiShellSurfaces.contains(window))
-+    {
-+        m_ukuiShellSurfaces.insert(window,ukuiShellSurface);
-+    }
-+    window->installEventFilter(this);
-+
-+    WindowLayer layer;
-+    switch(ukuiShellSurface->role())
-+    {
-+        case UkuiShellSurface::Role::Normal:
-+            layer = WindowLayer::Normal;
-+            break;
-+        case UkuiShellSurface::Role::Desktop:
-+            layer = WindowLayer::Desktop;
-+            break;
-+        case UkuiShellSurface::Role::Panel:
-+            layer = WindowLayer::Panel;
-+            break;
-+        case UkuiShellSurface::Role::OnScreenDisplay:
-+            layer = WindowLayer::OnScreenDisplay;
-+            break;
-+        case UkuiShellSurface::Role::Notification:
-+            layer = WindowLayer::Notification;
-+            break;
-+        case UkuiShellSurface::Role::ToolTip:
-+            layer = WindowLayer::ToolTip;
-+            break;
-+        case UkuiShellSurface::Role::CriticalNotification:
-+            layer = WindowLayer::CriticalNotification;
-+            break;
-+        case UkuiShellSurface::Role::AppletPop:
-+            layer = WindowLayer::AppletPop;
-+            break;
-+        case UkuiShellSurface::Role::ScreenLock:
-+            layer = WindowLayer::ScreenLock;
-+            break;
-+        case UkuiShellSurface::Role::Watermark:
-+            layer = WindowLayer::Watermark;
-+            break;
-+        case UkuiShellSurface::Role::SystemWindow:
-+            layer = WindowLayer::SystemWindow;
-+            break;
-+        case UkuiShellSurface::Role::InputPanel:
-+            layer = WindowLayer::InputPanel;
-+            break;
-+        case UkuiShellSurface::Role::Logout:
-+            layer = WindowLayer::Logout;
-+            break;
-+        case UkuiShellSurface::Role::ScreenLockNotification:
-+            layer = WindowLayer::ScreenLockNotification;
-+            break;
-+        case UkuiShellSurface::Role::Switcher:
-+            layer = WindowLayer::Switcher;
-+            break;
-+        default:
-+            layer = WindowLayer::Normal;
-+            break;
-+    }
-+    return layer;
-+}
- 
- void UkuiWaylandInterface::setGeometry(QWindow *window, const QRect &rect)
- {
-diff --git a/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.h b/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.h
-index 4d25dd9..ca9eddd 100644
---- a/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.h
-+++ b/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.h
-@@ -70,7 +70,7 @@ public:
-     bool skipTaskBar(const WindowId &wid)override;
-     bool skipSwitcher(const WindowId &wid)override;
- 
--    bool isShowingDesktop();
-+    bool isShowingDesktop() override;
-     void setOnAllDesktops(const WindowId &wid)override;
- 
-     NET::WindowType windowType(WindowId wid)override;
-@@ -90,6 +90,10 @@ public:
-     void setIdleInterval(int msec) override;
-     QRect windowGeometry(const WindowId& windowId) override;
-     void setPanelAutoHide(QWindow *window, bool autoHide) override;
-+    void setGrabKeyboard(QWindow *window, bool autoHide) override;
-+
-+    void setWindowLayer(QWindow *window, WindowLayer layer) override;
-+    WindowLayer windowLayer(QWindow *window) override;
- 
- protected:
-     bool eventFilter(QObject *obj, QEvent *ev) override;
-diff --git a/kysdk-waylandhelper/src/windowmanager/windowmanager.cpp b/kysdk-waylandhelper/src/windowmanager/windowmanager.cpp
-index a8af381..d25194a 100644
---- a/kysdk-waylandhelper/src/windowmanager/windowmanager.cpp
-+++ b/kysdk-waylandhelper/src/windowmanager/windowmanager.cpp
-@@ -322,3 +322,27 @@ void WindowManager::setPanelAutoHide(QWindow *window, bool autoHide)
-         return ;
-     return m_wm->winInterface()->setPanelAutoHide(window, autoHide);
- }
-+
-+void WindowManager::setGrabKeyboard(QWindow *window, bool grabKeyboard)
-+{
-+    self();
-+    if(!m_wm)
-+        return ;
-+    return m_wm->winInterface()->setGrabKeyboard(window, grabKeyboard);
-+}
-+
-+void WindowManager::setWindowLayer(QWindow *window, WindowLayer layer)
-+{
-+    self();
-+    if(!m_wm)
-+        return ;
-+    return m_wm->winInterface()->setWindowLayer(window, layer);
-+}
-+
-+WindowLayer WindowManager::windowLayer(QWindow *window)
-+{
-+    self();
-+    if(!m_wm)
-+        return WindowLayer::Normal;
-+    return m_wm->winInterface()->windowLayer(window);
-+}
-diff --git a/kysdk-waylandhelper/src/windowmanager/windowmanager.h b/kysdk-waylandhelper/src/windowmanager/windowmanager.h
-index f165931..d5f6a2d 100644
---- a/kysdk-waylandhelper/src/windowmanager/windowmanager.h
-+++ b/kysdk-waylandhelper/src/windowmanager/windowmanager.h
-@@ -258,7 +258,7 @@ public:
- 
-     /**
-      * @brief setWindowRadius
--     * @since 2.4
-+     * @since 2.5
-      * @param window
-      * @param radius
-      */
-@@ -266,7 +266,7 @@ public:
- 
-     /**
-      * @brief activateWindow
--     * @since 2.4
-+     * @since 2.5
-      * @param window1
-      * @param window2
-      */
-@@ -274,7 +274,7 @@ public:
- 
-     /**
-      * @brief windowGeometry
--     * @since 2.4
-+     * @since 2.5
-      * @param windowId
-      * @return
-      */
-@@ -282,12 +282,36 @@ public:
- 
-     /**
-      * @brief setPanelAutoHide
--     * @since 2.4
-+     * @since 2.5
-      * @param window
-      * @param autoHide
-      */
-     static void setPanelAutoHide(QWindow *window,bool autoHide);
- 
-+    /**
-+     * @brief setGrabKeyboard
-+     * @since 2.5
-+     * @param window
-+     * @param grabKeyboard
-+     */
-+    static void setGrabKeyboard(QWindow *window, bool grabKeyboard);
-+
-+    /**
-+     * @brief setWindowLayer
-+     * @since 2.5
-+     * @param window
-+     * @param layer
-+     */
-+    static void setWindowLayer(QWindow *window, WindowLayer layer);
-+
-+    /**
-+     * @brief windowLayer
-+     * @since 2.5
-+     * @param window
-+     * @return
-+     */
-+    static WindowLayer windowLayer(QWindow *window);
-+
- Q_SIGNALS:
-      /**
-       * @brief 窗口添加信号
-diff --git a/kysdk-waylandhelper/src/windowmanager/xcbinterface.cpp b/kysdk-waylandhelper/src/windowmanager/xcbinterface.cpp
-index 0c28164..8399a49 100644
---- a/kysdk-waylandhelper/src/windowmanager/xcbinterface.cpp
-+++ b/kysdk-waylandhelper/src/windowmanager/xcbinterface.cpp
-@@ -387,6 +387,172 @@ QRect XcbInterface::windowGeometry(const WindowId &windowId)
-         return QRect();
- }
- 
-+void XcbInterface::setWindowLayer(QWindow *window, WindowLayer layer)
-+{
-+    if(!window)
-+        return;
-+    NET::WindowType type;
-+
-+    switch(layer)
-+    {
-+        case WindowLayer::Desktop:
-+            type = NET::Desktop;
-+            break;
-+        case WindowLayer::Panel:
-+            type = NET::Dock;
-+            break;
-+        case WindowLayer::OnScreenDisplay:
-+            type = NET::OnScreenDisplay;
-+            break;
-+        case WindowLayer::Notification:
-+            type = NET::Notification;
-+            break;
-+        case WindowLayer::ToolTip:
-+            type = NET::Tooltip;
-+            break;
-+        case WindowLayer::CriticalNotification:
-+            type = NET::CriticalNotification;
-+            break;
-+        case WindowLayer::AppletPop:
-+            type = NET::AppletPopup;
-+            break;
-+        case WindowLayer::ScreenLock:
-+            type = NET::ScreenLock;
-+            break;
-+        case WindowLayer::Watermark:
-+            type = NET::Watermark;
-+            break;
-+        case WindowLayer::SystemWindow:
-+            type = NET::SystemWindow;
-+            break;
-+        case WindowLayer::InputPanel:
-+            type = NET::InputPanel;
-+            break;
-+        case WindowLayer::Logout:
-+            type = NET::Logout;
-+            break;
-+        case WindowLayer::ScreenLockNotification:
-+            type = NET::ScreenLockNotification;
-+            break;
-+        case WindowLayer::Switcher:
-+            type = NET::Dock;
-+            break;
-+        default:
-+        {
-+            qWarning()<<"It is not a surported window layer by xcb protocols! id:" << (int)layer;
-+            type = NET::Normal;
-+            break;
-+        }
-+    }
-+    KWindowSystem::setType(window->winId(), type);
-+}
-+
-+WindowLayer XcbInterface::windowLayer(QWindow *window)
-+{
-+    if(!window)
-+        return WindowLayer::Normal;
-+
-+    WindowLayer layer;
-+    KWindowInfo info(window->winId(), NET::WMWindowType|NET::WMState,NET::WM2TransientFor);
-+    switch (info.windowType(NET::AllTypesMask))
-+    {
-+        case NET::Normal:
-+            layer = WindowLayer::Normal;
-+            break;
-+        case NET::Desktop:
-+            layer = WindowLayer::Desktop;
-+            break;
-+        case NET::Dock:
-+        {
-+            layer = WindowLayer::Panel;
-+            qWarning()<<"NET::Dock replaced by WindowLayer::Panel";
-+            break;
-+        }
-+        case NET::Toolbar:
-+        {
-+            layer = WindowLayer::Normal;
-+            qWarning()<<"NET::Toolbar replaced by WindowLayer::Normal";
-+            break;
-+        }
-+        case NET::Menu:
-+        {
-+            layer = WindowLayer::AppletPop;
-+            qWarning()<<"NET::Menu replaced by WindowLayer::AppletPop";
-+            break;
-+        }
-+        case NET::Dialog:
-+            layer = WindowLayer::Normal;
-+            qWarning()<<"NET::Dialog replaced by WindowLayer::Normal";
-+            break;
-+        case NET::Override:
-+            layer = WindowLayer::Normal;
-+            qWarning()<<"NET::Override replaced by WindowLayer::Normal";
-+            break;
-+        case NET::Utility:
-+            layer = WindowLayer::Normal;
-+            qWarning()<<"NET::Utility replaced by WindowLayer::Normal";
-+            break;
-+        case NET::Splash:
-+            layer = WindowLayer::Normal;
-+            qWarning()<<"NET::Splash replaced by WindowLayer::Normal";
-+            break;
-+        case NET::DropdownMenu:
-+            layer = WindowLayer::AppletPop;
-+            qWarning()<<"NET::DropdownMenu replaced by WindowLayer::AppletPop";
-+            break;
-+        case NET::PopupMenu:
-+            layer = WindowLayer::AppletPop;
-+            qWarning()<<"NET::PopupMenu replaced by WindowLayer::AppletPop";
-+            break;
-+        case NET::Tooltip:
-+            layer = WindowLayer::ToolTip;
-+            break;
-+        case NET::Notification:
-+            layer = WindowLayer::Notification;
-+            break;
-+        case NET::ComboBox:
-+            layer = WindowLayer::Normal;
-+            qWarning()<<"NET::Dialog replaced by WindowLayer::Normal";
-+            break;
-+        case NET::DNDIcon:
-+            layer = WindowLayer::Normal;
-+            qWarning()<<"NET::DNDIcon replaced by WindowLayer::Normal";
-+            break;
-+        case NET::OnScreenDisplay:
-+            layer = WindowLayer::OnScreenDisplay;
-+            break;
-+        case NET::CriticalNotification:
-+            layer = WindowLayer::CriticalNotification;
-+            break;
-+        case NET::SystemWindow:
-+            layer = WindowLayer::SystemWindow;
-+            break;
-+        case NET::InputPanel:
-+            layer = WindowLayer::InputPanel;
-+            break;
-+        case NET::Logout:
-+            layer = WindowLayer::Logout;
-+            break;
-+        case NET::ScreenLock:
-+            layer = WindowLayer::ScreenLock;
-+            break;
-+        case NET::ScreenLockNotification:
-+            layer = WindowLayer::ScreenLockNotification;
-+            break;
-+        case NET::Watermark:
-+            layer = WindowLayer::Watermark;
-+            break;
-+        case NET::AppletPopup:
-+            layer = WindowLayer::AppletPop;
-+            break;
-+        default:
-+            layer = WindowLayer::Normal;
-+            break;
-+
-+    }
-+    return layer;
-+}
-+
- bool XcbInterface::isValidWindow(WindowId wid)
- {
-     if (this->isValidFor(wid)) {
-diff --git a/kysdk-waylandhelper/src/windowmanager/xcbinterface.h b/kysdk-waylandhelper/src/windowmanager/xcbinterface.h
-index f5f927c..1430217 100644
---- a/kysdk-waylandhelper/src/windowmanager/xcbinterface.h
-+++ b/kysdk-waylandhelper/src/windowmanager/xcbinterface.h
-@@ -37,7 +37,7 @@ public:
-     WindowInfo requestInfo(WindowId wid) override;
- 
-     void requestActivate(WindowId wid)  override;
--    void requestClose(WindowId wid) ;
-+    void requestClose(WindowId wid) override;
-     void requestToggleKeepAbove(WindowId wid)  override;
-     void requestToggleMinimized(WindowId wid)  override;
-     void requestToggleMaximized(WindowId wid)  override;
-@@ -63,14 +63,17 @@ public:
-     bool skipTaskBar(const WindowId &wid) override;
-     bool skipSwitcher(const WindowId &wid) override;
- 
--    bool isShowingDesktop();
--    void setOnAllDesktops(const WindowId &wid);
-+    bool isShowingDesktop() override;
-+    void setOnAllDesktops(const WindowId &wid) override;
- 
-     NET::WindowType windowType(WindowId wid) override;
-     void setPanelTakefocus(QWindow *window, bool flag) override;
-     void demandAttention(const WindowId &wid) override;
-     QRect windowGeometry(const WindowId& windowId) override;
- 
-+    void setWindowLayer(QWindow *window, WindowLayer layer) override;
-+    WindowLayer windowLayer(QWindow *window) override;
-+
- private:
-     bool isValidWindow(WindowId wid) ;
-     bool isValidWindow(const KWindowInfo &winfo) ;
-diff --git a/kysdk-waylandhelper/test/testWindowManager/widget.cpp b/kysdk-waylandhelper/test/testWindowManager/widget.cpp
-index 213a66a..f69f856 100644
---- a/kysdk-waylandhelper/test/testWindowManager/widget.cpp
-+++ b/kysdk-waylandhelper/test/testWindowManager/widget.cpp
-@@ -250,12 +250,17 @@ void Widget::initUI()
-     vLayout2->addLayout(hLayout9);
-     box4->setLayout(vLayout2);
- 
--    QGroupBox *box5 = new QGroupBox("2.4需求接口",this);
-+    QGroupBox *box5 = new QGroupBox("2.5需求接口",this);
-     m_getGeometryBtn = new QPushButton("getGeometry",this);
-+    m_setGrabKeyboardBtn = new QPushButton("setGrabKeyboard" ,this);
-+    m_setSwitcherLayer = new QPushButton("setSwitcherLayer" ,this);
-     QHBoxLayout* layout10 = new QHBoxLayout();
-     layout10->addWidget(m_getGeometryBtn);
-+    layout10->addWidget(m_setGrabKeyboardBtn);
-+    layout10->addWidget(m_setSwitcherLayer);
-     box5->setLayout(layout10);
- 
-+
-     mainLayout->addWidget(m_label);
-     mainLayout->addLayout(hLayout1);
-     mainLayout->addWidget(label);
-@@ -277,6 +282,13 @@ void Widget::initUI()
- 
- void Widget::initConnection()
- {   
-+    connect(m_setSwitcherLayer,&::QPushButton::clicked, this, [=](){
-+        WindowManager::setWindowLayer(m_subWidget->windowHandle(), WindowLayer::Switcher);
-+    });
-+
-+    connect(m_setGrabKeyboardBtn,&::QPushButton::clicked, this, [=](){
-+        WindowManager::setGrabKeyboard(m_subWidget->windowHandle(),true);
-+    });
- 
-     connect(m_getGeometryBtn,&QPushButton::clicked,this,[=](){
-         qDebug()<<WindowManager::windowGeometry(m_lastestWindowId);
-diff --git a/kysdk-waylandhelper/test/testWindowManager/widget.h b/kysdk-waylandhelper/test/testWindowManager/widget.h
-index 87563b6..8d783f7 100644
---- a/kysdk-waylandhelper/test/testWindowManager/widget.h
-+++ b/kysdk-waylandhelper/test/testWindowManager/widget.h
-@@ -84,5 +84,7 @@ private:
-     QPushButton* m_fullscreenBtn;
-     QPushButton* m_processName;
-     QPushButton* m_getGeometryBtn;
-+    QPushButton* m_setGrabKeyboardBtn;
-+    QPushButton* m_setSwitcherLayer;
- };
- #endif // WIDGET_H
+ SOURCES += \
+     src/ukuistylehelper/ukui-decoration-core.c \
diff -Nru libkysdk-applications-2.5.1.0/debian/patches/0006-Translated-using-Weblate-Uyghur.patch libkysdk-applications-2.5.2.0/debian/patches/0006-Translated-using-Weblate-Uyghur.patch
--- libkysdk-applications-2.5.1.0/debian/patches/0006-Translated-using-Weblate-Uyghur.patch	2024-07-31 11:09:38.000000000 +0800
+++ libkysdk-applications-2.5.2.0/debian/patches/0006-Translated-using-Weblate-Uyghur.patch	1970-01-01 08:00:00.000000000 +0800
@@ -1,103 +0,0 @@
-From: KevinDuan <duankaiwen@kylinos.com>
-Date: Fri, 24 May 2024 06:47:16 +0000
-Subject: Translated using Weblate (Uyghur)
-
-Currently translated at 81.0% (30 of 37 strings)
-
-Translation: openkylin-nile-new/libkysdk-applications
-Translate-URL: http://weblate.openkylin.top/projects/openkylin-nile-new/libkysdk-applications/ug/
----
- kysdk-qtwidgets/translations/gui_ug.ts | 20 ++++++++++----------
- 1 file changed, 10 insertions(+), 10 deletions(-)
-
-diff --git a/kysdk-qtwidgets/translations/gui_ug.ts b/kysdk-qtwidgets/translations/gui_ug.ts
-index 5aff81b..c2f1f9d 100644
---- a/kysdk-qtwidgets/translations/gui_ug.ts
-+++ b/kysdk-qtwidgets/translations/gui_ug.ts
-@@ -18,7 +18,7 @@
-         <location filename="../src/kaboutdialog.cpp" line="271"/>
-         <source>Service &amp; Support: </source>
-         <translatorcomment>服务与支持团队:</translatorcomment>
--        <translation>مۇلازىمەت ۋە قوللىغان كوللېكتىپ </translation>
-+        <translation>مۇلازىمەت &gt; قوللاش: </translation>
-     </message>
-     <message>
-         <location filename="../src/kaboutdialog.cpp" line="263"/>
-@@ -82,7 +82,7 @@
-     <message>
-         <location filename="../src/kmenubutton.cpp" line="67"/>
-         <source>Options</source>
--        <translation>تاللانمىلار</translation>
-+        <translation>تاللانما</translation>
-     </message>
-     <message>
-         <location filename="../src/kmenubutton.cpp" line="68"/>
-@@ -93,7 +93,7 @@
-     <message>
-         <location filename="../src/kmenubutton.cpp" line="69"/>
-         <source>Theme</source>
--        <translation>ئۇسلۇب</translation>
-+        <translation>Theme</translation>
-     </message>
-     <message>
-         <location filename="../src/kmenubutton.cpp" line="70"/>
-@@ -118,12 +118,12 @@
-     <message>
-         <location filename="../src/kmenubutton.cpp" line="81"/>
-         <source>Light</source>
--        <translation>سۇس</translation>
-+        <translation>سۇس رەڭ</translation>
-     </message>
-     <message>
-         <location filename="../src/kmenubutton.cpp" line="83"/>
-         <source>Dark</source>
--        <translation>قېنىق</translation>
-+        <translation>قېنىق رەڭ</translation>
-     </message>
- </context>
- <context>
-@@ -140,7 +140,7 @@
-         <location filename="../src/ksearchlineedit.cpp" line="627"/>
-         <location filename="../src/ksearchlineedit.cpp" line="815"/>
-         <source>Search</source>
--        <translation>ئىزدە</translation>
-+        <translation>ئىزدىمەكچى بولغان مەزمۇننى كىرگۈزۈڭ</translation>
-     </message>
- </context>
- <context>
-@@ -153,7 +153,7 @@
-     <message>
-         <location filename="../src/ksecuritylevelbar.cpp" line="65"/>
-         <source>Medium</source>
--        <translation type="unfinished"></translation>
-+        <translation>ئوتتۇرا</translation>
-     </message>
-     <message>
-         <location filename="../src/ksecuritylevelbar.cpp" line="68"/>
-@@ -208,7 +208,7 @@
-         <location filename="../src/kwindowbuttonbar.cpp" line="156"/>
-         <location filename="../src/kwindowbuttonbar.cpp" line="178"/>
-         <source>Maximize</source>
--        <translation>چوڭايتىش</translation>
-+        <translation>ئەڭ چوڭ ھالەت</translation>
-     </message>
-     <message>
-         <location filename="../src/kwindowbuttonbar.cpp" line="162"/>
-@@ -222,7 +222,7 @@
-     <message>
-         <location filename="../src/kwindowbuttonbar.cpp" line="271"/>
-         <source>Minimize</source>
--        <translation>كىچىكلىتىش</translation>
-+        <translation>ئەڭ كىچىك ھالەت</translation>
-     </message>
-     <message>
-         <location filename="../src/kwindowbuttonbar.cpp" line="280"/>
-@@ -232,7 +232,7 @@
-     <message>
-         <location filename="../src/kwindowbuttonbar.cpp" line="341"/>
-         <source>Maximize</source>
--        <translation>چوڭايتىش</translation>
-+        <translation>ئەڭ چوڭ ھالەت</translation>
-     </message>
-     <message>
-         <location filename="../src/kwindowbuttonbar.cpp" line="346"/>
diff -Nru libkysdk-applications-2.5.1.0/debian/patches/0006-update-changelog.patch libkysdk-applications-2.5.2.0/debian/patches/0006-update-changelog.patch
--- libkysdk-applications-2.5.1.0/debian/patches/0006-update-changelog.patch	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/debian/patches/0006-update-changelog.patch	2025-03-17 13:09:05.000000000 +0800
@@ -0,0 +1,291 @@
+From: =?utf-8?b?546L5oyv5a6H?= <wangzhenyu@kylinos.cn>
+Date: Thu, 5 Dec 2024 17:16:53 +0800
+Subject: update changelog
+
+---
+ kysdk-qtwidgets/src/kdragwidget.cpp | 169 +++++++++++++++++++++++++++++++-----
+ 1 file changed, 148 insertions(+), 21 deletions(-)
+
+diff --git a/kysdk-qtwidgets/src/kdragwidget.cpp b/kysdk-qtwidgets/src/kdragwidget.cpp
+index c27ddeb..994290c 100644
+--- a/kysdk-qtwidgets/src/kdragwidget.cpp
++++ b/kysdk-qtwidgets/src/kdragwidget.cpp
+@@ -44,7 +44,9 @@ private:
+     KPushButton* m_pIconButton;
+     QLabel* m_pTextLabel;
+     FileDialog *m_FileDialog;
+-    QStringList urlList;
++    QStringList m_NameFilterList;
++    QStringList m_pStringList;
++    bool m_cursorFlag;
+ };
+ 
+ KDragWidgetPrivate::KDragWidgetPrivate(KDragWidget* parent)
+@@ -54,6 +56,7 @@ KDragWidgetPrivate::KDragWidgetPrivate(KDragWidget* parent)
+     Q_Q(KDragWidget);
+     m_FileDialog = new FileDialog(q);
+     m_FileDialog->setDirectory(QStandardPaths::writableLocation(QStandardPaths::HomeLocation));
++    m_cursorFlag = false;
+ }
+ 
+ void KDragWidgetPrivate::openFile()
+@@ -61,12 +64,35 @@ void KDragWidgetPrivate::openFile()
+     Q_Q(KDragWidget);
+ 
+     m_FileDialog->setWindowTitle(tr("Please select file"));
++    m_pStringList.clear();
+ 
+-
+-    if (m_FileDialog->exec() == QDialog::Accepted) {
++    if (m_FileDialog->exec() == QDialog::Accepted)
++    {
+         QStringList selectFiles = m_FileDialog->selectedFiles();
+-        for (const QString& fileName : selectFiles) {
+-            if (!fileName.isEmpty())
++        if(selectFiles.count() > 1)
++        {
++            for (const QString& fileName : selectFiles)
++            {
++                QFileInfo fileinfo(fileName);
++
++                if(m_FileDialog->nameFilters().count() == 1 && m_FileDialog->nameFilters().first().contains("(*)"))
++                {
++                    m_pStringList.append(fileName);
++                }
++                else
++                {
++                    if(fileinfo.isFile()&&!fileName.isEmpty())
++                        m_pStringList.append(fileName);
++                }
++            }
++            if(m_pStringList.count() > 0)
++                Q_EMIT q->getPathList(m_pStringList);
++        }
++        else
++        {
++            QString fileName = selectFiles.first();
++            QFileInfo fileinfo(fileName);
++            if(fileinfo.isFile()&&!fileName.isEmpty())
+                 Q_EMIT q->getPath(fileName);
+         }
+     }
+@@ -89,7 +115,6 @@ KDragWidget::KDragWidget(QWidget *parent)
+ {
+     Q_D(KDragWidget);
+     setAcceptDrops(true);//设置接受拖拽
+-
+     QVBoxLayout* mainLayout= new QVBoxLayout(this);
+     QHBoxLayout* hLayout= new QHBoxLayout();
+     QHBoxLayout* hLayout1= new QHBoxLayout();
+@@ -171,23 +196,28 @@ void KDragWidget::setNameFilters(const QStringList &filters)
+ 
+     for(int i = 0 ; i < filters.size();i++)
+     {
+-        if(!d->urlList.contains(filters.at(i)))
+-            d->urlList.append(filters.at(i));
++        if(!d->m_NameFilterList.contains(filters.at(i)))
++        {
++            d->m_NameFilterList.append(filters.at(i));
++        }
+     }
+ }
+ 
+ void KDragWidget::mouseMoveEvent(QMouseEvent *event)
+ {
+-   return QWidget::mouseMoveEvent(event);
++    Q_D(KDragWidget);
++    return QWidget::mouseMoveEvent(event);
+ }
+ 
+ void KDragWidget::mousePressEvent(QMouseEvent *event)
+ {
++    Q_D(KDragWidget);
+     return QWidget::mousePressEvent(event);
+ }
+ 
+ void KDragWidget::mouseReleaseEvent(QMouseEvent *event)
+ {
++    Q_D(KDragWidget);
+     return QWidget::mouseReleaseEvent(event);
+ }
+ 
+@@ -242,6 +272,11 @@ bool KDragWidget::eventFilter(QObject *watched, QEvent *event)
+         {
+             d->m_pIconButton->setAttribute(Qt::WA_UnderMouse, false);
+             d->lineColor = palette().placeholderText().color();
++            if(d->m_cursorFlag)
++            {
++                d->m_cursorFlag = false;
++                setCursor(Qt::ArrowCursor);
++            }
+             update();
+             break;
+         }
+@@ -249,6 +284,11 @@ bool KDragWidget::eventFilter(QObject *watched, QEvent *event)
+         {
+             d->m_pIconButton->setAttribute(Qt::WA_UnderMouse, true);
+             d->lineColor = palette().toolTipText().color();
++            if(d->m_cursorFlag)
++            {
++                d->m_cursorFlag = false;
++                setCursor(Qt::ArrowCursor);
++            }
+             update();
+             break;
+         }
+@@ -303,9 +343,51 @@ bool KDragWidget::eventFilter(QObject *watched, QEvent *event)
+ 
+ void KDragWidget::dragEnterEvent(QDragEnterEvent* event)
+ {
++    Q_D(KDragWidget);
++
+     if(event->mimeData()->hasUrls())
+     {
+-        event->acceptProposedAction();
++        QList<QUrl> urls = event->mimeData()->urls();
++        for(int i = 0;i<urls.count() ;i++ )
++        {
++            QString filePath = urls.at(i).toLocalFile();
++            if (!filePath.isEmpty())
++            {
++                QFileInfo fileInfo(filePath);//filePath 路径
++                QString suffix = fileInfo.suffix();//suffix 后缀
++                QStringList nameFilters = d->m_FileDialog->nameFilters();
++
++                for(QString str : nameFilters)
++                {
++                    if(!str.contains("(*)"))
++                    {
++                        if(!fileInfo.isDir())
++                        {
++                            if((!suffix.isEmpty() && !str.contains(suffix, Qt::CaseInsensitive)) )
++                            {
++                                d->m_cursorFlag = true;
++                                break;
++                            }
++                        }
++                        else
++                        {
++                            d->m_cursorFlag = true;
++                            break;
++                        }
++                    }
++                }
++            }
++        }
++        if (d->m_cursorFlag)
++        {
++            setCursor(Qt::ForbiddenCursor);
++            event->setDropAction(Qt::IgnoreAction);
++        }
++        else
++        {
++            setCursor(Qt::ArrowCursor);
++            event->acceptProposedAction();
++        }
+     }
+     else
+     {
+@@ -315,11 +397,13 @@ void KDragWidget::dragEnterEvent(QDragEnterEvent* event)
+ 
+ void KDragWidget::dragLeaveEvent(QDragLeaveEvent *event)
+ {
++    Q_D(KDragWidget);
+     return QWidget::dragLeaveEvent(event);
+ }
+ 
+ void KDragWidget::dragMoveEvent(QDragMoveEvent *event)
+ {
++    Q_D(KDragWidget);
+     return QWidget::dragMoveEvent(event);
+ }
+ 
+@@ -331,34 +415,77 @@ void KDragWidget::dropEvent(QDropEvent* event)
+     if(mimeData->hasUrls())
+     {
+         QList<QUrl>urlList = mimeData->urls();
+-        for(int i=0; i<urlList.size(); i++) //选中的文件
++        if(urlList.size() > 1)
+         {
+-            QString fileName = urlList.at(i).toLocalFile();
+-//            if(!fileName.isEmpty()) //
+-//            {
+-                if(fileName.lastIndexOf(".") == -1) //文件夹可正常选中
+-                    Q_EMIT getPath(fileName);
++            d->m_pStringList.clear();
++            for(int i=0; i<urlList.size(); i++) //选中的文件
++            {
++                QString fileName = urlList.at(i).toLocalFile();
++
++                QFileInfo fileinfo(fileName);
++                if(d->m_FileDialog->nameFilters().count() == 1 && d->m_FileDialog->nameFilters().first().contains("(*)"))
++                {
++                    d->m_pStringList.append(fileName);
++                }
+                 else
++                {
++                    if(fileinfo.isFile())
++                    {
++                        QString endStr = fileName.mid(fileName.lastIndexOf("."),fileName.size()-fileName.lastIndexOf("."));
++                        if(d->m_NameFilterList.isEmpty()) //若无过滤则正常选中
++                            d->m_pStringList.append(fileName);
++                        else
++                        {
++                            for(int temp = 0 ;temp <d->m_NameFilterList.size();temp++)  //遍历是否符合筛选条件
++                            {
++                                QString curString = d->m_NameFilterList.at(temp);
++                                if(curString.contains(endStr))
++                                {
++                                    d->m_pStringList.append(fileName);
++                                }
++                            }
++                        }
++                    }
++                }
++            }
++            Q_EMIT getPathList(d->m_pStringList);
++        }
++        else
++        {
++            QString fileName = urlList.first().toLocalFile();
++            QFileInfo fileinfo(fileName);
++            if(d->m_FileDialog->nameFilters().count() == 1 && d->m_FileDialog->nameFilters().first().contains("(*)"))
++            {
++                Q_EMIT getPath(fileName);
++            }
++            else
++            {
++                if(fileinfo.isFile())
+                 {
+                     QString endStr = fileName.mid(fileName.lastIndexOf("."),fileName.size()-fileName.lastIndexOf("."));
+-                    if(d->urlList.isEmpty()) //若无过滤则正常选中
++                    if(d->m_NameFilterList.isEmpty()) //若无过滤则正常选中
+                         Q_EMIT getPath(fileName);
+                     else
+                     {
+-                        for(int temp = 0 ;temp <d->urlList.size();temp++)  //遍历是否符合筛选条件
++                        for(int temp = 0 ;temp <d->m_NameFilterList.size();temp++)  //遍历是否符合筛选条件
+                         {
+-                            QString curString = d->urlList.at(temp);
++                            QString curString = d->m_NameFilterList.at(temp);
+                             if(curString.contains(endStr))
+                             {
+                                 Q_EMIT getPath(fileName);
+-                                return ;
+                             }
+                         }
+                     }
+                 }
+-//            }
++            }
+         }
+     }
++    if(d->m_cursorFlag)
++    {
++        d->m_cursorFlag = false;
++        setCursor(Qt::ArrowCursor);
++        event->ignore();
++    }
+ }
+ 
+ FileDialog::FileDialog(QWidget *parent) :
diff -Nru libkysdk-applications-2.5.1.0/debian/patches/0007-.patch libkysdk-applications-2.5.2.0/debian/patches/0007-.patch
--- libkysdk-applications-2.5.1.0/debian/patches/0007-.patch	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/debian/patches/0007-.patch	2025-03-17 13:09:05.000000000 +0800
@@ -0,0 +1,25 @@
+From: =?utf-8?b?546L5oyv5a6H?= <wangzhenyu@kylinos.cn>
+Date: Thu, 5 Dec 2024 17:39:00 +0800
+Subject: =?utf-8?b?5L+u5q2j57yW6K+R6ZSZ6K+v?=
+
+---
+ kysdk-qtwidgets/src/kdragwidget.h | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+diff --git a/kysdk-qtwidgets/src/kdragwidget.h b/kysdk-qtwidgets/src/kdragwidget.h
+index 5a3e4ac..a41b871 100644
+--- a/kysdk-qtwidgets/src/kdragwidget.h
++++ b/kysdk-qtwidgets/src/kdragwidget.h
+@@ -72,6 +72,12 @@ protected:
+ Q_SIGNALS:
+     void getPath(QString);
+ 
++    /**
++     * @brief 获取列表信号
++     * @since 2.5.1.2-0k1.0
++     */
++    void getPathList(QStringList);
++
+ private:
+     Q_DECLARE_PRIVATE(KDragWidget)
+     KDragWidgetPrivate* const d_ptr;
diff -Nru libkysdk-applications-2.5.1.0/debian/patches/0007-Translated-using-Weblate-Uyghur.patch libkysdk-applications-2.5.2.0/debian/patches/0007-Translated-using-Weblate-Uyghur.patch
--- libkysdk-applications-2.5.1.0/debian/patches/0007-Translated-using-Weblate-Uyghur.patch	2024-07-31 11:09:38.000000000 +0800
+++ libkysdk-applications-2.5.2.0/debian/patches/0007-Translated-using-Weblate-Uyghur.patch	1970-01-01 08:00:00.000000000 +0800
@@ -1,176 +0,0 @@
-From: KevinDuan <duankaiwen@kylinos.com>
-Date: Tue, 28 May 2024 06:40:21 +0000
-Subject: Translated using Weblate (Uyghur)
-
-Currently translated at 97.2% (36 of 37 strings)
-
-Translation: openkylin-nile-new/libkysdk-applications
-Translate-URL: http://weblate.openkylin.top/projects/openkylin-nile-new/libkysdk-applications/ug/
----
- kysdk-qtwidgets/translations/gui_ug.ts | 40 +++++++++++++++++-----------------
- 1 file changed, 20 insertions(+), 20 deletions(-)
-
-diff --git a/kysdk-qtwidgets/translations/gui_ug.ts b/kysdk-qtwidgets/translations/gui_ug.ts
-index c2f1f9d..f8a1ea8 100644
---- a/kysdk-qtwidgets/translations/gui_ug.ts
-+++ b/kysdk-qtwidgets/translations/gui_ug.ts
-@@ -11,20 +11,20 @@
-     <message>
-         <location filename="../src/kaboutdialog.cpp" line="123"/>
-         <source>Unable to open mail application</source>
--        <translation type="unfinished"></translation>
-+        <translation>پوچتا يوللانمىسى ئابونت ئاچالمايدۇ</translation>
-     </message>
-     <message>
-         <location filename="../src/kaboutdialog.cpp" line="257"/>
-         <location filename="../src/kaboutdialog.cpp" line="271"/>
-         <source>Service &amp; Support: </source>
-         <translatorcomment>服务与支持团队:</translatorcomment>
--        <translation>مۇلازىمەت &gt; قوللاش: </translation>
-+        <translation>مۇلازىمەت ۋە قوللاش كوللېكتىپى : </translation>
-     </message>
-     <message>
-         <location filename="../src/kaboutdialog.cpp" line="263"/>
-         <location filename="../src/kaboutdialog.cpp" line="277"/>
-         <source>Privacy statement</source>
--        <translation type="unfinished"></translation>
-+        <translation>«مەخپىي كېلىشىم»</translation>
-     </message>
- </context>
- <context>
-@@ -32,12 +32,12 @@
-     <message>
-         <location filename="../src/kaboutdialog.cpp" line="381"/>
-         <source>version :</source>
--        <translation type="unfinished"></translation>
-+        <translation>نەشىرى:</translation>
-     </message>
-     <message>
-         <location filename="../src/kaboutdialog.cpp" line="386"/>
-         <source>Version number not found</source>
--        <translation type="unfinished"></translation>
-+        <translation>ماس نۇسخا نومۇرى تېپىلمىدى</translation>
-     </message>
- </context>
- <context>
-@@ -45,7 +45,7 @@
-     <message>
-         <location filename="../src/kdragwidget.cpp" line="102"/>
-         <source>Select or drag and drop the folder identification path</source>
--        <translation type="unfinished"></translation>
-+        <translation>ھۆججەت قىسقۇچ بەلگىسى تاللاش ياكى سۆرەپ قويۇش يولى</translation>
-     </message>
- </context>
- <context>
-@@ -53,7 +53,7 @@
-     <message>
-         <location filename="../src/kdragwidget.cpp" line="62"/>
-         <source>Please select file</source>
--        <translation type="unfinished"></translation>
-+        <translation>ھۆججەت تاللاش</translation>
-     </message>
- </context>
- <context>
-@@ -61,7 +61,7 @@
-     <message>
-         <location filename="../src/kinputdialog.cpp" line="241"/>
-         <source>Enter a value:</source>
--        <translation>بىر قىممەتنى كىرگۈزۈڭ:</translation>
-+        <translation>سانلىق قىممەتنى تاللاڭ:</translation>
-     </message>
- </context>
- <context>
-@@ -82,18 +82,18 @@
-     <message>
-         <location filename="../src/kmenubutton.cpp" line="67"/>
-         <source>Options</source>
--        <translation>تاللانما</translation>
-+        <translation>تاللاش</translation>
-     </message>
-     <message>
-         <location filename="../src/kmenubutton.cpp" line="68"/>
-         <source>Setting</source>
-         <translatorcomment>设置</translatorcomment>
--        <translation>تەڭشەك</translation>
-+        <translation>تەڭشەش</translation>
-     </message>
-     <message>
-         <location filename="../src/kmenubutton.cpp" line="69"/>
-         <source>Theme</source>
--        <translation>Theme</translation>
-+        <translation>سىرتقى كۆرۈنۈش</translation>
-     </message>
-     <message>
-         <location filename="../src/kmenubutton.cpp" line="70"/>
-@@ -113,7 +113,7 @@
-     <message>
-         <location filename="../src/kmenubutton.cpp" line="79"/>
-         <source>Auto</source>
--        <translation>ئاپتۇماتىك</translation>
-+        <translation>سېستىمىغا ئەگىشىش</translation>
-     </message>
-     <message>
-         <location filename="../src/kmenubutton.cpp" line="81"/>
-@@ -158,7 +158,7 @@
-     <message>
-         <location filename="../src/ksecuritylevelbar.cpp" line="68"/>
-         <source>High</source>
--        <translation>يۇقىرى</translation>
-+        <translation>ئېگىز</translation>
-     </message>
- </context>
- <context>
-@@ -176,17 +176,17 @@
-         <location filename="../src/kuninstalldialog.cpp" line="216"/>
-         <source>uninstall</source>
-         <translatorcomment>立即卸载</translatorcomment>
--        <translation>ئۆچۈرۈش</translation>
-+        <translation>دەرھال يۇيۇش</translation>
-     </message>
-     <message>
-         <location filename="../src/kuninstalldialog.cpp" line="185"/>
-         <source>deb name:</source>
--        <translation>بولاق نامى:</translation>
-+        <translation>بوغچا نامى:</translation>
-     </message>
-     <message>
-         <location filename="../src/kuninstalldialog.cpp" line="190"/>
-         <source>deb version:</source>
--        <translation>نەشرى:</translation>
-+        <translation>نەشىرى:</translation>
-     </message>
- </context>
- <context>
-@@ -194,12 +194,12 @@
-     <message>
-         <location filename="../src/kuninstalldialog.cpp" line="305"/>
-         <source>deb name:</source>
--        <translation>بولاق نامى:</translation>
-+        <translation>بوغچا نامى:</translation>
-     </message>
-     <message>
-         <location filename="../src/kuninstalldialog.cpp" line="309"/>
-         <source>deb version:</source>
--        <translation>نەشرى:</translation>
-+        <translation>نەشىرى:</translation>
-     </message>
- </context>
- <context>
-@@ -214,7 +214,7 @@
-         <location filename="../src/kwindowbuttonbar.cpp" line="162"/>
-         <location filename="../src/kwindowbuttonbar.cpp" line="183"/>
-         <source>Restore</source>
--        <translation>ئەسلىگە كەلتۈرۈش</translation>
-+        <translation>ئەسلىگە قايتۇرۇش</translation>
-     </message>
- </context>
- <context>
-@@ -237,7 +237,7 @@
-     <message>
-         <location filename="../src/kwindowbuttonbar.cpp" line="346"/>
-         <source>Restore</source>
--        <translation>ئەسلىگە كەلتۈرۈش</translation>
-+        <translation>ئەسلىگە قايتۇرۇش</translation>
-     </message>
- </context>
- </TS>
diff -Nru libkysdk-applications-2.5.1.0/debian/patches/0008-DT.patch libkysdk-applications-2.5.2.0/debian/patches/0008-DT.patch
--- libkysdk-applications-2.5.1.0/debian/patches/0008-DT.patch	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/debian/patches/0008-DT.patch	2025-03-17 13:09:05.000000000 +0800
@@ -0,0 +1,4800 @@
+From: =?utf-8?b?546L5oyv5a6H?= <wangzhenyu@kylinos.cn>
+Date: Wed, 8 Jan 2025 15:39:46 +0800
+Subject: =?utf-8?b?6YCC6YWNRFQ=?=
+
+---
+ kysdk-qtwidgets/src/kaboutdialog.cpp               |  45 +++-
+ kysdk-qtwidgets/src/kaddfilebutton.cpp             |  17 +-
+ kysdk-qtwidgets/src/kbackgroundgroup.cpp           |  12 +-
+ kysdk-qtwidgets/src/kbadge.cpp                     |   8 +-
+ kysdk-qtwidgets/src/kballontip.cpp                 |  20 +-
+ kysdk-qtwidgets/src/kborderbutton.cpp              |  38 +--
+ kysdk-qtwidgets/src/kborderlessbutton.cpp          |  16 +-
+ kysdk-qtwidgets/src/kbreadcrumb.cpp                |   3 +-
+ kysdk-qtwidgets/src/kbubblewidget.cpp              |  23 +-
+ kysdk-qtwidgets/src/kbuttonbox.cpp                 |   4 +-
+ kysdk-qtwidgets/src/kclocktimer.cpp                |   4 +-
+ kysdk-qtwidgets/src/kcolorbutton.cpp               |  16 +-
+ kysdk-qtwidgets/src/kcolorcombobox.cpp             |  10 +-
+ kysdk-qtwidgets/src/kcomboboxwidget.cpp            |  35 ++-
+ kysdk-qtwidgets/src/kcommentpanel.cpp              |   6 +-
+ kysdk-qtwidgets/src/kcrumb.cpp                     |  16 +-
+ kysdk-qtwidgets/src/kcustomdateedit.cpp            |  16 +-
+ kysdk-qtwidgets/src/kdialog.cpp                    |   2 +-
+ kysdk-qtwidgets/src/kdirtabbar.cpp                 |  10 +-
+ kysdk-qtwidgets/src/kdragwidget.cpp                |  26 +-
+ kysdk-qtwidgets/src/kdragwidget.h                  |   4 +-
+ kysdk-qtwidgets/src/kfilewidget.cpp                |  46 +++-
+ kysdk-qtwidgets/src/kintrowidget.cpp               |  41 +++-
+ kysdk-qtwidgets/src/klabel.cpp                     |  59 +++--
+ kysdk-qtwidgets/src/klineedit.cpp                  |  11 +-
+ kysdk-qtwidgets/src/klistviewdelegate.cpp          |  22 +-
+ kysdk-qtwidgets/src/kminicalendarwidget.cpp        |   6 +-
+ kysdk-qtwidgets/src/knativetabbar.cpp              |  45 ++--
+ kysdk-qtwidgets/src/knavigationbar.cpp             |  41 +++-
+ kysdk-qtwidgets/src/kpasswordedit.cpp              |  23 +-
+ kysdk-qtwidgets/src/kpixmapcontainer.cpp           |   4 +-
+ kysdk-qtwidgets/src/kpressbutton.cpp               |  81 +++++--
+ kysdk-qtwidgets/src/kprogressbar.cpp               | 103 ++++++--
+ kysdk-qtwidgets/src/kprogresscircle.cpp            |  39 ++-
+ kysdk-qtwidgets/src/kprogresslabel.cpp             |  19 +-
+ kysdk-qtwidgets/src/kpushbutton.cpp                | 122 +++++++---
+ kysdk-qtwidgets/src/ksearchlineedit.cpp            |  79 +++++--
+ kysdk-qtwidgets/src/ksecuritylevelbar.cpp          |  12 +-
+ kysdk-qtwidgets/src/ksecurityquestiondialog.cpp    |   3 +-
+ kysdk-qtwidgets/src/kslider.cpp                    |  60 +++--
+ kysdk-qtwidgets/src/kswitchbutton.cpp              |  94 ++++++--
+ kysdk-qtwidgets/src/ktabbar.cpp                    |  50 ++--
+ kysdk-qtwidgets/src/ktableview.cpp                 |   5 +-
+ kysdk-qtwidgets/src/ktag.cpp                       |  75 ++++--
+ kysdk-qtwidgets/src/ktextedit.cpp                  |   3 +-
+ kysdk-qtwidgets/src/ktexteditor.cpp                |  24 +-
+ kysdk-qtwidgets/src/ktitlewindow.cpp               |  11 +-
+ kysdk-qtwidgets/src/ktoolbar.cpp                   |   7 +-
+ kysdk-qtwidgets/src/ktoolbutton.cpp                | 113 ++++++---
+ kysdk-qtwidgets/src/ktranslucentfloor.cpp          |   8 +-
+ kysdk-qtwidgets/src/themeController.cpp            | 262 +++++++++++++++++----
+ kysdk-qtwidgets/src/themeController.h              |  10 +-
+ kysdk-qtwidgets/test/testIcon/main.cpp             |  11 +
+ kysdk-qtwidgets/test/testIcon/testIcon.pro         |  24 ++
+ kysdk-qtwidgets/test/testIcon/widget.cpp           |  27 +++
+ kysdk-qtwidgets/test/testIcon/widget.h             |  14 ++
+ kysdk-qtwidgets/test/testLunarDateEdit/main.cpp    |  11 +
+ .../test/testLunarDateEdit/testLunarDateEdit.pro   |  31 +++
+ kysdk-qtwidgets/test/testLunarDateEdit/widget.cpp  |  37 +++
+ kysdk-qtwidgets/test/testLunarDateEdit/widget.h    |  25 ++
+ kysdk-qtwidgets/test/testdirtabbar/main.cpp        |  11 +
+ .../test/testdirtabbar/testdirtabbar.pro           |  24 ++
+ kysdk-qtwidgets/test/testdirtabbar/widget.cpp      |  65 +++++
+ kysdk-qtwidgets/test/testdirtabbar/widget.h        |  20 ++
+ kysdk-qtwidgets/test/testtableview/main.cpp        |  11 +
+ .../test/testtableview/testtableview.pro           |  31 +++
+ kysdk-qtwidgets/test/testtableview/widget.cpp      |  84 +++++++
+ kysdk-qtwidgets/test/testtableview/widget.h        |  14 ++
+ 68 files changed, 1735 insertions(+), 514 deletions(-)
+ create mode 100644 kysdk-qtwidgets/test/testIcon/main.cpp
+ create mode 100644 kysdk-qtwidgets/test/testIcon/testIcon.pro
+ create mode 100644 kysdk-qtwidgets/test/testIcon/widget.cpp
+ create mode 100644 kysdk-qtwidgets/test/testIcon/widget.h
+ create mode 100644 kysdk-qtwidgets/test/testLunarDateEdit/main.cpp
+ create mode 100644 kysdk-qtwidgets/test/testLunarDateEdit/testLunarDateEdit.pro
+ create mode 100644 kysdk-qtwidgets/test/testLunarDateEdit/widget.cpp
+ create mode 100644 kysdk-qtwidgets/test/testLunarDateEdit/widget.h
+ create mode 100644 kysdk-qtwidgets/test/testdirtabbar/main.cpp
+ create mode 100644 kysdk-qtwidgets/test/testdirtabbar/testdirtabbar.pro
+ create mode 100644 kysdk-qtwidgets/test/testdirtabbar/widget.cpp
+ create mode 100644 kysdk-qtwidgets/test/testdirtabbar/widget.h
+ create mode 100644 kysdk-qtwidgets/test/testtableview/main.cpp
+ create mode 100644 kysdk-qtwidgets/test/testtableview/testtableview.pro
+ create mode 100644 kysdk-qtwidgets/test/testtableview/widget.cpp
+ create mode 100644 kysdk-qtwidgets/test/testtableview/widget.h
+
+diff --git a/kysdk-qtwidgets/src/kaboutdialog.cpp b/kysdk-qtwidgets/src/kaboutdialog.cpp
+index 45697c8..e993aea 100644
+--- a/kysdk-qtwidgets/src/kaboutdialog.cpp
++++ b/kysdk-qtwidgets/src/kaboutdialog.cpp
+@@ -243,36 +243,57 @@ void KAboutDialog::changeTheme()
+         QPixmap pix(icon.pixmap(QSize(96,96)));
+         d->m_pAppIconLabel->setPixmap(pix);
+     }
++    QPalette palette = qApp->palette();
+     QFont font;
+     font.setPixelSize(ThemeController::systemFontSize() * 1.7);
+     font.setWeight(QFont::Medium);
++    QColor fontColor = ThemeController::getCustomColorFromDT("kfont-primary");
++    if(fontColor.isValid())
++    {
++        palette.setColor(QPalette::Text,fontColor);
++        palette.setColor(QPalette::WindowText,fontColor);
++        d->m_pAppNameLabel->setPalette(palette);
++    }
+     d->m_pAppNameLabel->setFont(font);
+-    QPalette palette = qApp->palette();
++
+     if(ThemeController::themeMode() == LightTheme)
+     {
+-       palette.setColor(QPalette::Text,QColor("#595959"));
+-       palette.setColor(QPalette::WindowText,QColor("#595959"));
+-       palette.setColor(QPalette::Base,QColor(0,0,0,0));
+-       d->m_pAppSupportLabel->setPalette(palette);
+-       d->m_pAppVersionLabel->setPalette(palette);
+-       d->m_pAppSupportLabel->setText(tr("Service & Support: ") +
++        QColor textColor = ThemeController::getCustomColorFromDT("kfont-secondary");
++        if(!textColor.isValid())
++            textColor = QColor("#595959");
++        palette.setColor(QPalette::Text,textColor);
++        palette.setColor(QPalette::WindowText,textColor);
++        palette.setColor(QPalette::Base,QColor(0,0,0,0));
++        d->m_pAppSupportLabel->setPalette(palette);
++        d->m_pAppVersionLabel->setPalette(palette);
++        d->m_pAppSupportLabel->setText(tr("Service & Support: ") +
+                                               "<a href=\"mailto://support@kylinos.cn\""
+                                               "style=\"color:#595959\">"
+                                               "support@kylinos.cn</a>");
+-       palette.setColor(QPalette::WindowText,QColor("#307FF5"));
+-       d->m_pAppPrivacyLabel->setPalette(palette);
+-       d->m_pAppPrivacyLabel->setText(tr("Privacy statement"));
++        QColor privacyColor = ThemeController::getPaletteColorFromDT("highlight");
++        if(!privacyColor.isValid())
++            privacyColor = QColor("#307FF5");
++        palette.setColor(QPalette::WindowText,privacyColor);
++        d->m_pAppPrivacyLabel->setPalette(palette);
++        d->m_pAppPrivacyLabel->setText(tr("Privacy statement"));
+     }
+     else
+     {
+-        palette.setColor(QPalette::ButtonText,QColor("#D9D9D9"));
+-        palette.setColor(QPalette::WindowText,QColor("#D9D9D9"));
++        QColor textColor = ThemeController::getCustomColorFromDT("kfont-secondary");
++        if(!textColor.isValid())
++            textColor = QColor("#D9D9D9");
++        palette.setColor(QPalette::ButtonText,textColor);
++        palette.setColor(QPalette::WindowText,textColor);
+         d->m_pAppSupportLabel->setPalette(palette);
+         d->m_pAppVersionLabel->setPalette(palette);
+         d->m_pAppSupportLabel->setText(tr("Service & Support: ") +
+                                              "<a href=\"mailto://support@kylinos.cn\""
+                                              "style=\"color:#D9D9D9\">"
+                                              "support@kylinos.cn</a>");
++
++        QColor privacyColor = ThemeController::getPaletteColorFromDT("highlight)");
++        if(!privacyColor.isValid())
++            privacyColor = QColor("#307FF5");
+         palette.setColor(QPalette::WindowText,QColor("#307FF5"));
+         d->m_pAppPrivacyLabel->setPalette(palette);
+         d->m_pAppPrivacyLabel->setText(tr("Privacy statement"));
+diff --git a/kysdk-qtwidgets/src/kaddfilebutton.cpp b/kysdk-qtwidgets/src/kaddfilebutton.cpp
+index be86c28..25b2478 100644
+--- a/kysdk-qtwidgets/src/kaddfilebutton.cpp
++++ b/kysdk-qtwidgets/src/kaddfilebutton.cpp
+@@ -92,19 +92,22 @@ void KAddFileButton::paintEvent(QPaintEvent *event)
+ 
+     QPainter painter(this);
+     painter.save();
+-    painter.setBrush(palette().base().color());
++    painter.setBrush(ThemeController::getPaletteColorFromDT("base"));
+     painter.setPen(Qt::NoPen);
+     painter.drawRoundedRect(rect(),0,0);
+     painter.restore();
+     QPen pen=painter.pen();
+     pen.setStyle(Qt::DashLine);
+-    pen.setColor(palette().color(QPalette::Highlight));
++    pen.setColor(ThemeController::getPaletteColorFromDT("highlight"));
+     painter.save();
+     painter.setRenderHint(QPainter::Antialiasing);
+     painter.setPen(pen);
+     painter.setBrush(d->m_bkgColor);
+-    painter.drawRoundedRect(d->m_rect,6,6);
+-    painter.setPen(palette().highlight().color());
++    int radius = ThemeController::getRadiusFromDT("kradius-normal");
++    if(radius == -1)
++        radius = 6;
++    painter.drawRoundedRect(d->m_rect,radius,radius);
++    painter.setPen(ThemeController::getPaletteColorFromDT("highlight"));
+     painter.drawLine(QPoint(d->m_rect.center().x()-10,d->m_rect.center().y()+1),QPoint(d->m_rect.center().x()+10,d->m_rect.center().y()+1));
+     painter.drawLine(QPoint(d->m_rect.center().x()+1,d->m_rect.center().y()-10),QPoint(d->m_rect.center().x()+1,d->m_rect.center().y()+10));
+     painter.restore();
+@@ -112,7 +115,7 @@ void KAddFileButton::paintEvent(QPaintEvent *event)
+     painter.save();
+     QFontMetrics fm = painter.fontMetrics();
+     int width = fm.width(d->m_text);
+-    painter.setPen(palette().highlight().color());
++    painter.setPen(ThemeController::getPaletteColorFromDT("highlight"));
+     d->m_textRect = QRect(QPoint(rect().center().x()-width/2,d->m_rect.bottom()+8),QSize(width,fm.height()));
+     painter.drawText(d->m_textRect,d->m_text);
+     painter.restore();
+@@ -189,8 +192,8 @@ KAddFileButtonPrivate::KAddFileButtonPrivate(KAddFileButton *parent)
+ void KAddFileButtonPrivate::updateColor(QStyleOptionButton option,QPalette palette)
+ {
+     Q_Q(KAddFileButton);
+-    m_bkgColor = palette.base().color();
+-    QColor hightColor=palette.highlight().color();
++    m_bkgColor = ThemeController::getPaletteColorFromDT("base");
++    QColor hightColor = ThemeController::getPaletteColorFromDT("highlight");
+     if(option.state.testFlag(QStyle::State_MouseOver))
+     {
+         m_bkgColor = hightColor;
+diff --git a/kysdk-qtwidgets/src/kbackgroundgroup.cpp b/kysdk-qtwidgets/src/kbackgroundgroup.cpp
+index 54a6c5d..080ae5e 100644
+--- a/kysdk-qtwidgets/src/kbackgroundgroup.cpp
++++ b/kysdk-qtwidgets/src/kbackgroundgroup.cpp
+@@ -60,9 +60,14 @@ KBackgroundGroup::KBackgroundGroup(QWidget *parent)
+     :QFrame(parent)
+     ,d_ptr(new KBackgroundGroupPrivate(this))
+ {
++    Q_D(KBackgroundGroup);
+     setFrameShape(QFrame::Box);
+     setFrameShadow(QFrame::Plain);
+     setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Fixed);
++    connect(d->m_gsetting,&QGSettings::changed,this,[=]{
++        d->initThemeStyle();
++        d->m_backgroundColor = palette().color(d->m_brushColorRole);
++    });
+ }
+ 
+ void KBackgroundGroup::addWidget(QWidget *widget)
+@@ -170,6 +175,7 @@ void KBackgroundGroup::setBackgroundRole(QPalette::ColorRole role)
+ {
+     Q_D(KBackgroundGroup);
+     d->m_brushColorRole = role;
++    d->m_backgroundColor = palette().color(role);
+ }
+ 
+ QPalette::ColorRole KBackgroundGroup::backgroundRole() const
+@@ -387,7 +393,6 @@ bool KBackgroundGroup::eventFilter(QObject *watched, QEvent *event)
+ KBackgroundGroupPrivate::KBackgroundGroupPrivate(KBackgroundGroup *parent)
+     :q_ptr(parent)
+     ,m_widgetPosition(KBackgroundGroupPrivate::Beginning),m_rectLocal(0)
+-    ,m_radius(12)
+     ,m_brushColorRole(QPalette::Base)
+     ,m_backgroundColor(parent->palette().color(m_brushColorRole))
+ {
+@@ -397,6 +402,11 @@ KBackgroundGroupPrivate::KBackgroundGroupPrivate(KBackgroundGroup *parent)
+     m_pmainWidgetLayout->setSpacing(0);
+     m_pmainWidgetLayout->setMargin(0);
+ 
++    int radius = ThemeController::getRadiusFromDT("kradius-window");
++    if(radius == -1)
++        m_radius = 12;
++    else
++        m_radius = radius;
+ //    q->setFocus(Qt::MouseFocusReason);
+     connect(m_gsetting,&QGSettings::changed,this,[=](){
+         initThemeStyle();
+diff --git a/kysdk-qtwidgets/src/kbadge.cpp b/kysdk-qtwidgets/src/kbadge.cpp
+index 7c1d3df..e0f95cc 100644
+--- a/kysdk-qtwidgets/src/kbadge.cpp
++++ b/kysdk-qtwidgets/src/kbadge.cpp
+@@ -52,7 +52,7 @@ KBadgePrivate::KBadgePrivate(KBadge *parent)
+ {
+     Q_Q(KBadge);
+     m_value = -1;
+-    m_color = q->palette().color(QPalette::Highlight);
++    m_color = ThemeController::getPaletteColorFromDT("highlight");
+     m_fontSize = 14;
+     m_isShowValue = true;
+     m_useCustomColor=false;
+@@ -148,11 +148,11 @@ void KBadge::paintEvent(QPaintEvent *event)
+     if(d->m_useCustomColor)
+         painter.setBrush(d->m_color);
+     else
+-        painter.setBrush(palette().color(QPalette::Highlight));
++        painter.setBrush(ThemeController::getPaletteColorFromDT("highlight"));
+     QRect tmpRect(rect().center().x()-width/2,rect().center().y()-height/2,width,height);
+     painter.drawRoundedRect(tmpRect,height/2,height/2);
+     //文字颜色固定
+-    painter.setPen(QWidget::palette().color(QPalette::Light));
++    painter.setPen(ThemeController::getPaletteColorFromDT("light"));
+     if(d->m_value >= 1 && d->m_value<1000 && d->m_isShowValue)
+     {
+         QFont font(QApplication::font());
+@@ -163,7 +163,7 @@ void KBadge::paintEvent(QPaintEvent *event)
+ 
+     if(d->m_value >= 1000 && d->m_value < INTMAX_MAX && d->m_isShowValue)
+     {
+-        painter.setBrush(QWidget::palette().color(QPalette::Light));
++        painter.setBrush(ThemeController::getPaletteColorFromDT("light"));
+         QPointF pointf(rect().center().x(),rect().center().y());
+         painter.drawEllipse(pointf,qreal(1.5),qreal(1.5));
+         QPointF leff(pointf.x()-10,pointf.y());
+diff --git a/kysdk-qtwidgets/src/kballontip.cpp b/kysdk-qtwidgets/src/kballontip.cpp
+index eac25c8..aa1d9cf 100644
+--- a/kysdk-qtwidgets/src/kballontip.cpp
++++ b/kysdk-qtwidgets/src/kballontip.cpp
+@@ -83,7 +83,7 @@ KBallonTip::KBallonTip(QWidget *parent)
+     d->m_pShadow_effect = new QGraphicsDropShadowEffect(this);
+     d->m_pShadow_effect->setOffset(0, 0);
+     //阴影颜色
+-    d->m_pShadow_effect->setColor(this->palette().color(QPalette::Disabled,QPalette::Text));
++    d->m_pShadow_effect->setColor(ThemeController::getPaletteColorFromDT("text",QPalette::Disabled));
+     //阴影半径
+     if(ThemeController::themeMode() == LightTheme)
+         d->m_pShadow_effect->setBlurRadius(15);
+@@ -221,15 +221,16 @@ void KBallonTip::paintEvent(QPaintEvent *event)
+     // bug 173714 173165
+     adjustSize();
+ 
+-    d->m_pShadow_effect->setColor(this->palette().color(QPalette::Disabled,QPalette::Text));
++    d->m_pShadow_effect->setColor(ThemeController::getPaletteColorFromDT("text",QPalette::Disabled));
+     QPainter painter(this);
+     painter.setRenderHint(QPainter::Antialiasing);  // 反锯齿;
+-    auto color = ThemeController::mixColor(this->palette().color(QPalette::Mid),QColor(100,100,100),0.5);
++    QColor mixColor = ThemeController::getPaletteColorFromDT("mid");
++    auto color = ThemeController::mixColor(mixColor,QColor(100,100,100),0.5);
+     QPen pen;
+     pen.setColor(color);
+     pen.setWidthF(0.2);
+     painter.setPen(pen);
+-    painter.setBrush(this->palette().color(QPalette::Window));
++    painter.setBrush(ThemeController::getPaletteColorFromDT("window"));
+     QRect rect = this->rect();
+     if(ThemeController::widgetTheme() == ClassicTheme)
+     {
+@@ -241,7 +242,7 @@ void KBallonTip::paintEvent(QPaintEvent *event)
+         switch (tipType())
+         {
+         case TipType::Nothing:
+-            painter.setBrush(this->palette().color(QPalette::Window));
++            painter.setBrush(ThemeController::getPaletteColorFromDT("window"));
+             break;
+         case TipType::Normal:
+             painter.setBrush(ThemeController::lanhuHSLToQtHsl(98, 65, 78));
+@@ -270,8 +271,11 @@ void KBallonTip::paintEvent(QPaintEvent *event)
+     {
+         if(!mask().isNull())
+             clearMask();
+-        painter.setBrush(this->palette().color(QPalette::Window));
+-        painter.drawRoundedRect(rect.adjusted(8,8,-8,-8), 6, 6);
++        painter.setBrush(ThemeController::getPaletteColorFromDT("window"));
++        int radius = ThemeController::getRadiusFromDT("kradius-normal");
++        if(radius == -1)
++            radius = 6;
++        painter.drawRoundedRect(rect.adjusted(8,8,-8,-8), radius, radius);
+     }
+     if(ThemeController::isPixmapPureColor(d->m_variablePixmap))
+     {
+@@ -349,7 +353,7 @@ void KBallonTipPrivate::changeTheme()
+     {
+         m_pShadow_effect->setOffset(0, 0);
+         //阴影颜色
+-        m_pShadow_effect->setColor(q->palette().color(QPalette::Disabled,QPalette::Text));
++        m_pShadow_effect->setColor(ThemeController::getPaletteColorFromDT("text",QPalette::Disabled));
+         //阴影半径
+         if(ThemeController::themeMode() == LightTheme)
+         {
+diff --git a/kysdk-qtwidgets/src/kborderbutton.cpp b/kysdk-qtwidgets/src/kborderbutton.cpp
+index dd23992..b0f088e 100644
+--- a/kysdk-qtwidgets/src/kborderbutton.cpp
++++ b/kysdk-qtwidgets/src/kborderbutton.cpp
+@@ -35,10 +35,7 @@ class KBorderButtonPrivate:public QObject,public ThemeController
+     Q_DECLARE_PUBLIC(KBorderButton)
+     Q_OBJECT
+ public:
+-    KBorderButtonPrivate(KBorderButton*parent):q_ptr(parent)
+-    ,m_hoverd(false)
+-      ,m_radius(6)
+-    {setParent(parent);}
++    KBorderButtonPrivate(KBorderButton*parent);
+ protected:
+     void changeTheme();
+ private:
+@@ -81,12 +78,12 @@ void KBorderButton::paintEvent(QPaintEvent *event)
+     QColor borderColor;
+     QColor fontColor;
+     int borderWidth = 1 ;
+-    QColor mix = option.palette.brightText().color();
+-    QColor highlight = option.palette.highlight().color();
++    QColor mix = ThemeController::getPaletteColorFromDT("brighttext");
++    QColor highlight = ThemeController::getPaletteColorFromDT("highlight");
+     if(!option.state.testFlag(QStyle::State_Enabled))
+     {
+-        borderColor = option.palette.color(QPalette::Disabled,QPalette::Button);
+-        fontColor = option.palette.color(QPalette::Disabled,QPalette::HighlightedText);
++        borderColor = ThemeController::getPaletteColorFromDT("button",QPalette::Disabled);
++        fontColor = ThemeController::getPaletteColorFromDT("highlightedtext",QPalette::Disabled);
+     }
+     else if(option.state.testFlag(QStyle::State_MouseOver))
+     {
+@@ -173,8 +170,7 @@ void KBorderButton::paintEvent(QPaintEvent *event)
+                 borderColor = ThemeController::adjustS(borderColor,-24);
+                 borderColor = ThemeController::adjustL(borderColor,-24);
+ 
+-                fontColor = option.palette.color(QPalette::ButtonText);;
+-
++                fontColor = ThemeController::getPaletteColorFromDT("buttontext");
+             }
+             else
+             {
+@@ -183,14 +179,13 @@ void KBorderButton::paintEvent(QPaintEvent *event)
+                 borderColor = ThemeController::adjustS(borderColor,0);
+                 borderColor = ThemeController::adjustL(borderColor,26);
+ 
+-                fontColor = option.palette.color(QPalette::ButtonText);;
+-
++                fontColor = ThemeController::getPaletteColorFromDT("buttontext");
+             }
+         }
+         else
+         {
+-		borderWidth = 2;
+-            fontColor = option.palette.buttonText().color();
++            borderWidth = 2;
++            fontColor = ThemeController::getPaletteColorFromDT("buttontext");
+             borderColor = ThemeController::mixColor(highlight,mix,0.2);
+         }
+     }
+@@ -198,7 +193,7 @@ void KBorderButton::paintEvent(QPaintEvent *event)
+     {
+         if(ThemeController::widgetTheme() == ClassicTheme)
+         {
+-            fontColor = option.palette.buttonText().color();
++            fontColor = ThemeController::getPaletteColorFromDT("buttontext");
+             if(ThemeController::themeMode() == LightTheme )
+                 borderColor = ThemeController::lanhuHSLToQtHsl(0, 0, 73);
+             else
+@@ -206,8 +201,8 @@ void KBorderButton::paintEvent(QPaintEvent *event)
+         }
+         else
+         {
+-            fontColor = option.palette.buttonText().color();
+-            borderColor = option.palette.button().color();
++            fontColor = ThemeController::getPaletteColorFromDT("buttontext");
++            borderColor = ThemeController::getPaletteColorFromDT("button");
+         }
+     }
+     p.setBrush(Qt::NoBrush);
+@@ -300,6 +295,15 @@ void KBorderButton::setIcon(const QIcon &icon)
+     QPushButton::setIcon(icon);
+ }
+ 
++KBorderButtonPrivate::KBorderButtonPrivate(KBorderButton *parent):q_ptr(parent)
++  ,m_hoverd(false)
++{
++    setParent(parent);
++    m_radius = ThemeController::getRadiusFromDT("kradius-normal");
++    if(m_radius == -1)
++        m_radius = 6;
++}
++
+ void KBorderButtonPrivate::changeTheme()
+ {
+     Q_Q(KBorderButton);
+diff --git a/kysdk-qtwidgets/src/kborderlessbutton.cpp b/kysdk-qtwidgets/src/kborderlessbutton.cpp
+index 9c87bca..e2056a6 100644
+--- a/kysdk-qtwidgets/src/kborderlessbutton.cpp
++++ b/kysdk-qtwidgets/src/kborderlessbutton.cpp
+@@ -95,12 +95,12 @@ void KBorderlessButton::paintEvent(QPaintEvent *event)
+     QPainter p(this);
+     QColor borderColor;
+     QColor fontColor;
+-    QColor highlight = option.palette.highlight().color();
+-    QColor mix = option.palette.brightText().color();
++    QColor highlight = ThemeController::getPaletteColorFromDT("highlight");
++    QColor mix = ThemeController::getPaletteColorFromDT("brighttext");
+     if(!option.state.testFlag(QStyle::State_Enabled))
+     {
+-        borderColor = option.palette.color(QPalette::Disabled,QPalette::Button);
+-        fontColor = option.palette.color(QPalette::Disabled,QPalette::HighlightedText);
++        borderColor = ThemeController::getPaletteColorFromDT("button",QPalette::Disabled);
++       fontColor = ThemeController::getPaletteColorFromDT("highlightedtext",QPalette::Disabled);
+     }
+     else if(ThemeController::themeMode() == ThemeFlag::LightTheme){
+ 
+@@ -141,8 +141,8 @@ void KBorderlessButton::paintEvent(QPaintEvent *event)
+         else
+         {
+             if(!this->icon().isNull()){
+-                fontColor = option.palette.buttonText().color();
+-                borderColor = option.palette.button().color();
++                fontColor = ThemeController::getPaletteColorFromDT("buttontext");
++                borderColor = ThemeController::getPaletteColorFromDT("button");
+             }
+             else {
+                 borderColor = highlight;
+@@ -189,8 +189,8 @@ void KBorderlessButton::paintEvent(QPaintEvent *event)
+         else
+         {
+             if(!this->icon().isNull()){
+-                fontColor = option.palette.buttonText().color();
+-                borderColor = option.palette.button().color();
++                fontColor = ThemeController::getPaletteColorFromDT("buttontext");
++                borderColor = ThemeController::getPaletteColorFromDT("button");
+             }
+             else {
+                 borderColor = highlight;
+diff --git a/kysdk-qtwidgets/src/kbreadcrumb.cpp b/kysdk-qtwidgets/src/kbreadcrumb.cpp
+index e31423f..c703b6e 100644
+--- a/kysdk-qtwidgets/src/kbreadcrumb.cpp
++++ b/kysdk-qtwidgets/src/kbreadcrumb.cpp
+@@ -94,7 +94,8 @@ QSize KBreadCrumb::tabSizeHint(int index) const
+ void KBreadCrumb::paintEvent(QPaintEvent *event)
+ {
+     Q_D(const KBreadCrumb);
+-    QColor highLightColor = palette().color(QPalette::Highlight);
++//    QColor highLightColor = palette().color(QPalette::Highlight);
++    QColor highLightColor = ThemeController::getPaletteColorFromDT("highlight");
+     QColor baseColor;
+     QColor focusColor;
+     if(ThemeController::themeMode() == ThemeFlag::DarkTheme)
+diff --git a/kysdk-qtwidgets/src/kbubblewidget.cpp b/kysdk-qtwidgets/src/kbubblewidget.cpp
+index ece78ac..20d5a4c 100644
+--- a/kysdk-qtwidgets/src/kbubblewidget.cpp
++++ b/kysdk-qtwidgets/src/kbubblewidget.cpp
+@@ -273,19 +273,15 @@ void KBubbleWidget ::paintEvent(QPaintEvent *)
+     painter.translate(0.5,0.5);
+     painter.setPen(pen);
+     if(d->m_isHighlightBackground)
+-        painter.setBrush(this->palette().color(QPalette::Highlight));
++        painter.setBrush(ThemeController::getPaletteColorFromDT("highlight"));
+     else
+-        painter.setBrush(this->palette().color(QPalette::Base));
++        painter.setBrush(ThemeController::getPaletteColorFromDT("base"));
+     painter.drawPath(path);
+ 
+ }
+ 
+ KBubbleWidgetPrivate::KBubbleWidgetPrivate(KBubbleWidget *parent)
+     :q_ptr(parent),
+-      m_bottomLeftRadius(8),
+-      m_topLeftRadius(8),
+-      m_bottomRightRadius(8),
+-      m_topRightRadius(8),
+       m_tailHeight(8),
+       m_tailWidth(16),
+       m_enableBlur(false),
+@@ -294,6 +290,21 @@ KBubbleWidgetPrivate::KBubbleWidgetPrivate(KBubbleWidget *parent)
+       m_tailLocation(TailLocation::LeftLocation),
+       m_tailDirection(TailDirection::BottomDirection)
+ {
++    int radius = ThemeController::getRadiusFromDT("kradius-menu");
++    if(radius == -1)
++    {
++        m_bottomLeftRadius = 8;
++        m_topLeftRadius = 8;
++        m_bottomRightRadius = 8;
++        m_topRightRadius = 8;
++    }
++    else
++    {
++        m_bottomLeftRadius = radius;
++        m_topLeftRadius = radius;
++        m_bottomRightRadius = radius;
++        m_topRightRadius = radius;
++    }
+ }
+ }
+ #include "kbubblewidget.moc"
+diff --git a/kysdk-qtwidgets/src/kbuttonbox.cpp b/kysdk-qtwidgets/src/kbuttonbox.cpp
+index 7b59ec5..2570a6a 100644
+--- a/kysdk-qtwidgets/src/kbuttonbox.cpp
++++ b/kysdk-qtwidgets/src/kbuttonbox.cpp
+@@ -70,7 +70,9 @@ KButtonBoxPrivate::KButtonBoxPrivate(KButtonBox *parent)
+     m_layout->setSizeConstraint(QLayout::SetFixedSize);
+     m_layout->setMargin(0);
+     m_layout->setSpacing(0);
+-    m_radius = 6;
++    m_radius = ThemeController::getRadiusFromDT("kradius-normal");
++    if(m_radius == -1)
++        m_radius = 6;
+     m_isCheckable = false;
+     m_shadowFlag = false;
+     m_pShadow_effect = new QGraphicsDropShadowEffect();
+diff --git a/kysdk-qtwidgets/src/kclocktimer.cpp b/kysdk-qtwidgets/src/kclocktimer.cpp
+index 519e199..32d1646 100644
+--- a/kysdk-qtwidgets/src/kclocktimer.cpp
++++ b/kysdk-qtwidgets/src/kclocktimer.cpp
+@@ -121,7 +121,7 @@ KClockTimerPrivate::KClockTimerPrivate(KClockTimer *parent)
+     m_pTimer->setInterval(10);
+ 
+     QPalette mainPalette;
+-    mainPalette.setColor(QPalette::WindowText,q->palette().brightText().color());
++    mainPalette.setColor(QPalette::WindowText,ThemeController::getPaletteColorFromDT("brighttext"));
+     m_pMainLabel->setPalette(mainPalette);
+ 
+     QFont f = q->font();
+@@ -132,7 +132,7 @@ KClockTimerPrivate::KClockTimerPrivate(KClockTimer *parent)
+         f.setPointSize(f.pointSize() + 15);
+         m_pMainLabel->setFont(f);
+         QPalette mainPalette;
+-        mainPalette.setColor(QPalette::WindowText,q->palette().brightText().color());
++        mainPalette.setColor(QPalette::WindowText,ThemeController::getPaletteColorFromDT("brighttext"));
+         m_pMainLabel->setPalette(mainPalette);
+     });
+     connect(m_pTimer, &QTimer::timeout, this,[=]{
+diff --git a/kysdk-qtwidgets/src/kcolorbutton.cpp b/kysdk-qtwidgets/src/kcolorbutton.cpp
+index 1a22ae2..8de9251 100644
+--- a/kysdk-qtwidgets/src/kcolorbutton.cpp
++++ b/kysdk-qtwidgets/src/kcolorbutton.cpp
+@@ -100,7 +100,7 @@ void KColorButton::paintEvent(QPaintEvent *)
+     if(!option.state.testFlag(QStyle::State_Enabled))
+     {
+         painter.save();
+-        painter.setBrush(option.palette.color(QPalette::Disabled,QPalette::ButtonText));
++        painter.setBrush(ThemeController::getPaletteColorFromDT("buttontext",QPalette::Disabled));
+         painter.drawRoundedRect(rect,d->m_radius,d->m_radius);
+         painter.restore();
+     }
+@@ -113,7 +113,7 @@ void KColorButton::paintEvent(QPaintEvent *)
+         }
+         else
+         {
+-            painter.setBrush(palette().highlight().color());
++            painter.setBrush(ThemeController::getPaletteColorFromDT("highlight"));
+         }
+         if(isChecked() || option.state.testFlag(QStyle::State_MouseOver))
+         {
+@@ -139,7 +139,7 @@ void KColorButton::paintEvent(QPaintEvent *)
+         }
+         else
+         {
+-            painter.setBrush(palette().highlight().color());
++            painter.setBrush(ThemeController::getPaletteColorFromDT("highlight"));
+         }
+ 
+         painter.drawEllipse(rect);
+@@ -163,7 +163,7 @@ void KColorButton::paintEvent(QPaintEvent *)
+         }
+         else
+         {
+-            painter.setBrush(palette().highlight().color());
++            painter.setBrush(ThemeController::getPaletteColorFromDT("highlight"));
+         }
+         if(isChecked())
+         {
+@@ -198,9 +198,13 @@ KColorButtonPrivate::KColorButtonPrivate(KColorButton *parent)
+ {
+     Q_Q(KColorButton);
+     m_backgroundFlag = false;
+-    m_radius =6;
++    m_radius = ThemeController::getRadiusFromDT("kradius-normal");
++    if(m_radius == -1)
++    {
++        m_radius = 6;
++    }
+     m_buttonType = KColorButton::RoundedRect;
+-    m_backgroundColor = q->palette().highlight().color();
++    m_backgroundColor = ThemeController::getPaletteColorFromDT("highlight");
+     connect(m_gsetting,&QGSettings::changed,this,[=](){
+         changeTheme();
+         q->update();
+diff --git a/kysdk-qtwidgets/src/kcolorcombobox.cpp b/kysdk-qtwidgets/src/kcolorcombobox.cpp
+index ff26ed5..30e2c46 100644
+--- a/kysdk-qtwidgets/src/kcolorcombobox.cpp
++++ b/kysdk-qtwidgets/src/kcolorcombobox.cpp
+@@ -34,7 +34,6 @@
+ 
+ namespace kdk {
+ 
+-const static int defaultBorderRadius = 4;
+ const static QSize defaultPopupItemSize(20,20);
+ static QSize g_size;
+ 
+@@ -193,10 +192,12 @@ void KColorComboBox::resizeEvent(QResizeEvent *event)
+ KColorComboBoxPrivate::KColorComboBoxPrivate(KColorComboBox *parent)
+     :q_ptr(parent),
+       m_comboType(KColorComboBox::Circle),
+-      m_borderRadius(defaultBorderRadius),
+       m_popupItemSize(defaultPopupItemSize)
+ {
+     setParent(parent);
++    m_borderRadius = ThemeController::getRadiusFromDT("kradius-min");
++    if(m_borderRadius == -1)
++        m_borderRadius = 4;
+ }
+ 
+ void KColorComboBoxPrivate::updateList()
+@@ -294,7 +295,10 @@ void KColorComboBoxDelegate::paint(QPainter *painter, const QStyleOptionViewItem
+                 painter->setPen(Qt::NoPen);
+             }
+             painter->setBrush(color);
+-            painter->drawRoundedRect(paintRect,defaultBorderRadius,defaultBorderRadius);
++            int radius = ThemeController::getRadiusFromDT("kradius-min");
++            if(radius == -1)
++                radius = 4;
++            painter->drawRoundedRect(paintRect,radius,radius);
+             painter->restore();
+         }
+         break;
+diff --git a/kysdk-qtwidgets/src/kcomboboxwidget.cpp b/kysdk-qtwidgets/src/kcomboboxwidget.cpp
+index 9357130..23b7d5a 100644
+--- a/kysdk-qtwidgets/src/kcomboboxwidget.cpp
++++ b/kysdk-qtwidgets/src/kcomboboxwidget.cpp
+@@ -181,21 +181,26 @@ void KComboBoxWidget::paintEvent(QPaintEvent *event)
+ 
+     if(!opt.state.testFlag(QStyle::State_Enabled))
+     {
+-        p.setBrush(opt.palette.color(QPalette::Disabled,QPalette::Button));
++        p.setBrush(ThemeController::getPaletteColorFromDT("button",QPalette::Disabled));
+     }
+     else
+     {
+ 
+-        if (d->m_mouseEnter) {
+-            p.setBrush(opt.palette.color(QPalette::Midlight));
+-        } else {
+-            p.setBrush(opt.palette.color(QPalette::Button));
++        if (d->m_mouseEnter)
++        {
++            p.setBrush(ThemeController::getPaletteColorFromDT("midlight"));
++        } else
++        {
++            p.setBrush(ThemeController::getPaletteColorFromDT("button"));
+         }
+     }
+ 
+     p.setOpacity(1);
+     p.setPen(Qt::NoPen);
+-    p.drawRoundedRect(opt.rect, 6, 6);
++    int radius = ThemeController::getRadiusFromDT("kradius-normal");
++    if(radius == -1)
++        radius = 6;
++    p.drawRoundedRect(opt.rect, radius, radius);
+     p.setRenderHint(QPainter::Antialiasing); //反锯齿
+     setProperty("blurRegion", QRegion(path.toFillPolygon().toPolygon()));
+ }
+@@ -297,9 +302,13 @@ void ProxyStyle::drawComplexControl(QStyle::ComplexControl control, const QStyle
+                 painter->setRenderHint(QPainter::Antialiasing, true);
+                 painter->setPen(Qt::NoPen);
+                 QStyleOption opt;
+-                QColor color = opt.palette.color(QPalette::Highlight);
++//                QColor color = opt.palette.color(QPalette::Highlight);
++                QColor color = ThemeController::getPaletteColorFromDT("highlight");
+                 painter->setBrush(color);
+-                painter->drawRoundedRect(option->rect, 6, 6);
++                int radius = ThemeController::getRadiusFromDT("kradius-normal");
++                if(radius == -1)
++                    radius = 6;
++                painter->drawRoundedRect(option->rect, radius, radius);
+                 painter->restore();
+                 return;
+             }
+@@ -341,11 +350,14 @@ MenuItem::MenuItem(QString week, int id, QWidget *parent)
+     m_pMenuIconLabel->setVisible(false);
+ 
+     connect(m_gsetting, &QGSettings::changed, this, [=](const QString & key) {
+-            if (ThemeController::themeMode() == DarkTheme) {
++            if (ThemeController::themeMode() == DarkTheme)
++            {
+                 QPalette palette;
+                 palette.setColor(QPalette::Active, QPalette::ButtonText,Qt::white);
+                 m_pTextLabel->setPalette(palette);
+-            } else {
++            }
++            else
++            {
+                 QPalette palette;
+                 palette.setColor(QPalette::Active, QPalette::ButtonText,Qt::black);
+                 m_pTextLabel->setPalette(palette);
+@@ -383,7 +395,8 @@ void MenuItem::enterEvent(QEvent *e)
+ 
+ void MenuItem::leaveEvent(QEvent *e)
+ {
+-    if (ThemeController::themeMode() == LightTheme) {
++    if (ThemeController::themeMode() == LightTheme)
++    {
+         QPalette palette;
+         palette.setColor(QPalette::Active, QPalette::ButtonText,Qt::black);
+         m_pTextLabel->setPalette(palette);
+diff --git a/kysdk-qtwidgets/src/kcommentpanel.cpp b/kysdk-qtwidgets/src/kcommentpanel.cpp
+index 0a25d76..3dc448d 100644
+--- a/kysdk-qtwidgets/src/kcommentpanel.cpp
++++ b/kysdk-qtwidgets/src/kcommentpanel.cpp
+@@ -195,7 +195,11 @@ void KCommentPanel::paintEvent(QPaintEvent *event)
+ 
+     QRect rect = this->rect(); rect.setWidth(rect.width() );
+     rect.setHeight(rect.height());
+-    painter.drawRoundedRect(rect, 6, 6);
++
++    int radius = ThemeController::getRadiusFromDT("kradius-normal");
++    if(radius == -1)
++        radius = 6;
++    painter.drawRoundedRect(rect, radius, radius);
+ }
+ 
+ KCommentPanelPrivate::KCommentPanelPrivate(KCommentPanel *parent)
+diff --git a/kysdk-qtwidgets/src/kcrumb.cpp b/kysdk-qtwidgets/src/kcrumb.cpp
+index 4c43f2f..ba606b8 100644
+--- a/kysdk-qtwidgets/src/kcrumb.cpp
++++ b/kysdk-qtwidgets/src/kcrumb.cpp
+@@ -55,6 +55,7 @@ class Q_DECL_HIDDEN KCrumbPrivate : public QObject,public ThemeController
+ public:
+     KCrumbPrivate(KCrumb*parent);
+ 
++    void changeTheme();
+ private:
+     KCrumb* q_ptr;
+     QIcon m_icon;
+@@ -66,8 +67,14 @@ KCrumb::KCrumb(QWidget *parent)
+     :KCustomTabBar(parent),
+       d_ptr(new KCrumbPrivate(this))
+ {
++    Q_D(KCrumb);
+     CrumbStyle *style = new CrumbStyle();
+     setStyle(style);
++
++    connect(d->m_gsetting,&QGSettings::changed,this,[=]{
++        d->changeTheme();
++        update();
++    });
+ }
+ 
+ int KCrumb::addTab(const QString &text)
+@@ -174,7 +181,7 @@ void KCrumb::paintEvent(QPaintEvent *event)
+     p.setRenderHint(QPainter::SmoothPixmapTransform);
+     QFontMetrics fm = p.fontMetrics();
+ 
+-    QColor highLightColor = palette().color(QPalette::Highlight);
++    QColor highLightColor = ThemeController::getPaletteColorFromDT("highlight");
+     QColor baseColor;
+     QColor focusColor;
+     if(ThemeController::themeMode() == ThemeFlag::DarkTheme)
+@@ -183,7 +190,7 @@ void KCrumb::paintEvent(QPaintEvent *event)
+             baseColor = "#D9D9D9";
+         else
+             baseColor = "#47474A";
+-        focusColor = "#D9D9D9";
++        focusColor =Qt::red;// "#D9D9D9";
+     }
+     else
+     {
+@@ -294,6 +301,11 @@ KCrumbPrivate::KCrumbPrivate(KCrumb *parent)
+ {
+ }
+ 
++void KCrumbPrivate::changeTheme()
++{
++    initThemeStyle();
++}
++
+ CrumbStyle::CrumbStyle(QStyle *style)
+ {
+ 
+diff --git a/kysdk-qtwidgets/src/kcustomdateedit.cpp b/kysdk-qtwidgets/src/kcustomdateedit.cpp
+index 592112e..f025e79 100644
+--- a/kysdk-qtwidgets/src/kcustomdateedit.cpp
++++ b/kysdk-qtwidgets/src/kcustomdateedit.cpp
+@@ -8,6 +8,7 @@
+ #include <QApplication>
+ #include <QSvgRenderer>
+ #include <QRandomGenerator>
++#include "themeController.h"
+ 
+ namespace kdk
+ {
+@@ -86,7 +87,7 @@ QPixmap KCustomDateEditPrivate::drawSymbolicColoredPixmap(const QPixmap &source)
+ 
+             if (color.alpha() > 0)
+             {
+-                QColor colorSet = q->palette().color(QPalette::ButtonText);
++                QColor colorSet = ThemeController::getPaletteColorFromDT("buttontext");
+                 color.setRed(colorSet.red());
+                 color.setGreen(colorSet.green());
+                 color.setBlue(colorSet.blue());
+@@ -199,10 +200,13 @@ void KCustomDateEdit::paintEvent(QPaintEvent *e)
+     Q_UNUSED(e);
+     QPainter painter(this);
+     painter.setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform);  // 反锯齿;
+-    QBrush brush = QBrush(palette().color(QPalette::Button));
++    QBrush brush = QBrush(ThemeController::getPaletteColorFromDT("button"));
+     painter.setPen(Qt::NoPen);
+     painter.setBrush(brush);
+-    painter.drawRoundedRect(this->rect(), 6, 6);
++    int radius = ThemeController::getRadiusFromDT("kradius-normal");
++    if(radius == -1)
++        radius = 6;
++    painter.drawRoundedRect(this->rect(), radius, radius);
+     QPixmap pix = d->loadSvg("/usr/share/kylin-user-guide/data/ukui-down-symbolic.svg", 64);
+     QRect rect = QRect(113, 10, 15, 15);
+     painter.drawPixmap(rect, pix);
+@@ -222,14 +226,14 @@ void KCustomDateEdit::paintEvent(QPaintEvent *e)
+         painter.setPen(pen);
+         painter.setBrush(Qt::NoBrush);
+         painter.translate(1, 1);
+-        painter.drawRoundedRect(rectBoxt.adjusted(0, 0, -2, -2), 6, 6);
++        painter.drawRoundedRect(rectBoxt.adjusted(0, 0, -2, -2), radius, radius);
+     }
+     else if (d->hoverFlag == true)
+     {
+-        painter.setPen(palette().color(QPalette::Active, QPalette::Highlight));
++        painter.setPen(ThemeController::getPaletteColorFromDT("highlight",QPalette::Disabled));
+         painter.setBrush(Qt::NoBrush);
+         painter.translate(0.5, 0.5);
+-        painter.drawRoundedRect(rectBoxt.adjusted(0, 0, -1, -1), 6, 6);
++        painter.drawRoundedRect(rectBoxt.adjusted(0, 0, -1, -1), radius, radius);
+     }
+ }
+ 
+diff --git a/kysdk-qtwidgets/src/kdialog.cpp b/kysdk-qtwidgets/src/kdialog.cpp
+index 7b80a6e..b19e0bd 100644
+--- a/kysdk-qtwidgets/src/kdialog.cpp
++++ b/kysdk-qtwidgets/src/kdialog.cpp
+@@ -249,7 +249,7 @@ void KDialog::changeTheme()
+     Q_D(KDialog);
+     initThemeStyle();
+     QPalette p = this->palette();
+-    QColor color = p.color(QPalette::Base);
++    QColor color = ThemeController::getPaletteColorFromDT("base");
+     p.setColor(QPalette::Window,color);
+     this->setPalette(p);
+     if(!d->m_IconName.isEmpty())
+diff --git a/kysdk-qtwidgets/src/kdirtabbar.cpp b/kysdk-qtwidgets/src/kdirtabbar.cpp
+index e83eb00..bbc72e4 100755
+--- a/kysdk-qtwidgets/src/kdirtabbar.cpp
++++ b/kysdk-qtwidgets/src/kdirtabbar.cpp
+@@ -373,8 +373,10 @@ void CustomButton::paintEvent(QPaintEvent *event)
+     initStyleOption(&option);
+ //QToolButton::paintEvent(event);
+ 
+-    qreal ra = 6;
+-    QColor textColor = palette().color(QPalette::Text);
++    int ra = ThemeController::getRadiusFromDT("kradius-normal");
++    if(ra == -1)
++        ra = 6;
++    QColor textColor = ThemeController::getPaletteColorFromDT("text");
+     QColor backgroundColor;
+     QPen pen;
+     QPainter painter(this);
+@@ -383,7 +385,7 @@ void CustomButton::paintEvent(QPaintEvent *event)
+     if(ThemeController::themeMode() == LightTheme){ //浅色模式
+         if(!option.state.testFlag(QStyle::State_Enabled))
+         {
+-            textColor = palette().color(QPalette::Disabled,QPalette::Text);
++            textColor = ThemeController::getPaletteColorFromDT("text",QPalette::Disabled);
+         }
+         else{
+             //三态
+@@ -411,7 +413,7 @@ void CustomButton::paintEvent(QPaintEvent *event)
+     {
+         if(!option.state.testFlag(QStyle::State_Enabled))
+         {
+-            textColor = palette().color(QPalette::Disabled,QPalette::Text);
++            textColor = ThemeController::getPaletteColorFromDT("text",QPalette::Disabled);
+         }
+         else{
+             //三态
+diff --git a/kysdk-qtwidgets/src/kdragwidget.cpp b/kysdk-qtwidgets/src/kdragwidget.cpp
+index 994290c..62ab9dc 100644
+--- a/kysdk-qtwidgets/src/kdragwidget.cpp
++++ b/kysdk-qtwidgets/src/kdragwidget.cpp
+@@ -54,6 +54,8 @@ KDragWidgetPrivate::KDragWidgetPrivate(KDragWidget* parent)
+     ,mainState(Qt::DashLine)
+ {
+     Q_Q(KDragWidget);
++    m_pIconButton = new KPushButton();
++    m_pTextLabel = new QLabel();
+     m_FileDialog = new FileDialog(q);
+     m_FileDialog->setDirectory(QStandardPaths::writableLocation(QStandardPaths::HomeLocation));
+     m_cursorFlag = false;
+@@ -118,13 +120,13 @@ KDragWidget::KDragWidget(QWidget *parent)
+     QVBoxLayout* mainLayout= new QVBoxLayout(this);
+     QHBoxLayout* hLayout= new QHBoxLayout();
+     QHBoxLayout* hLayout1= new QHBoxLayout();
+-    d->m_pIconButton = new KPushButton();
++//    d->m_pIconButton = new KPushButton();
+     d->m_pIconButton->setFixedSize(54,54);
+     d->m_pIconButton->setTranslucent(true);
+     d->m_pIconButton->setButtonType(KPushButton::CircleType);
+     d->m_pIconButton->setIcon(QIcon::fromTheme("list-add.symbolic"));
+ 
+-    d->m_pTextLabel = new QLabel();
++//    d->m_pTextLabel = new QLabel();
+     d->m_pTextLabel->setText(tr("Select or drag and drop the folder identification path"));
+     hLayout->setContentsMargins(0,0,0,0);
+     hLayout->addStretch();
+@@ -242,7 +244,10 @@ void KDragWidget::paintEvent(QPaintEvent *event)
+     pen.setWidth(1);
+     painter.setPen(pen);
+     painter.setBrush(Qt::NoBrush);
+-    painter.drawRoundedRect(rect().adjusted(1,1,-1,-1),6,6);
++    int radius = ThemeController::getRadiusFromDT("kradius-normal");
++    if(radius == -1 )
++        radius = 6;
++    painter.drawRoundedRect(rect().adjusted(1,1,-1,-1),radius,radius);
+ }
+ 
+ bool KDragWidget::eventFilter(QObject *watched, QEvent *event)
+@@ -255,7 +260,7 @@ bool KDragWidget::eventFilter(QObject *watched, QEvent *event)
+         case QEvent::MouseButtonPress:
+         {
+             d->m_pIconButton->setAttribute(Qt::WA_UnderMouse, true);
+-            d->lineColor = palette().toolTipText().color();
++            d->lineColor = ThemeController::getPaletteColorFromDT("tooltiptext");
+             d->openFile();
+ 
+             update();
+@@ -264,14 +269,14 @@ bool KDragWidget::eventFilter(QObject *watched, QEvent *event)
+         case QEvent::MouseButtonRelease:
+         {
+             d->m_pIconButton->setAttribute(Qt::WA_UnderMouse, true);
+-            d->lineColor = palette().toolTipText().color();
++            d->lineColor = ThemeController::getPaletteColorFromDT("tooltiptext");
+             update();
+             break;
+         }
+         case QEvent::Leave:
+         {
+             d->m_pIconButton->setAttribute(Qt::WA_UnderMouse, false);
+-            d->lineColor = palette().placeholderText().color();
++            d->lineColor = ThemeController::getPaletteColorFromDT("placeholdertext");
+             if(d->m_cursorFlag)
+             {
+                 d->m_cursorFlag = false;
+@@ -283,7 +288,8 @@ bool KDragWidget::eventFilter(QObject *watched, QEvent *event)
+         case QEvent::Enter:
+         {
+             d->m_pIconButton->setAttribute(Qt::WA_UnderMouse, true);
+-            d->lineColor = palette().toolTipText().color();
++//            d->lineColor = palette().toolTipText().color();
++            d->lineColor = ThemeController::getPaletteColorFromDT("tooltiptext");
+             if(d->m_cursorFlag)
+             {
+                 d->m_cursorFlag = false;
+@@ -295,14 +301,16 @@ bool KDragWidget::eventFilter(QObject *watched, QEvent *event)
+         case QEvent::DragEnter:
+         {
+             d->m_pIconButton->setAttribute(Qt::WA_UnderMouse, true);
+-            d->lineColor = palette().highlight().color();
++//            d->lineColor = palette().highlight().color();
++            d->lineColor = ThemeController::getPaletteColorFromDT("highlight");
+             update();
+             break;
+         }
+         case QEvent::DragLeave:
+         {
+             d->m_pIconButton->setAttribute(Qt::WA_UnderMouse, false);
+-            d->lineColor = palette().placeholderText().color();
++//            d->lineColor = palette().placeholderText().color();
++            d->lineColor = ThemeController::getPaletteColorFromDT("placeholdertext");
+             update();
+             break;
+         }
+diff --git a/kysdk-qtwidgets/src/kdragwidget.h b/kysdk-qtwidgets/src/kdragwidget.h
+index a41b871..c2f0d7f 100644
+--- a/kysdk-qtwidgets/src/kdragwidget.h
++++ b/kysdk-qtwidgets/src/kdragwidget.h
+@@ -73,8 +73,8 @@ Q_SIGNALS:
+     void getPath(QString);
+ 
+     /**
+-     * @brief 获取列表信号
+-     * @since 2.5.1.2-0k1.0
++     * @brief 获取文件路径列表
++     * @since 2.5.2.0-0k0.4
+      */
+     void getPathList(QStringList);
+ 
+diff --git a/kysdk-qtwidgets/src/kfilewidget.cpp b/kysdk-qtwidgets/src/kfilewidget.cpp
+index 3c67bee..b2d2ce8 100644
+--- a/kysdk-qtwidgets/src/kfilewidget.cpp
++++ b/kysdk-qtwidgets/src/kfilewidget.cpp
+@@ -120,7 +120,8 @@ void KFileWidget::paintEvent(QPaintEvent *event)
+     painter.setRenderHint(QPainter::Antialiasing);
+     painter.setRenderHint(QPainter::SmoothPixmapTransform);
+     painter.setRenderHint(QPainter::HighQualityAntialiasing);
+-    painter.setBrush(palette().window().color());
++//    painter.setBrush(palette().window().color());
++    painter.setBrush(ThemeController::getPaletteColorFromDT("window"));
+     if(ThemeController::themeMode() == LightTheme)
+     {
+         QColor color(38,38,38);
+@@ -149,8 +150,10 @@ void KFileWidget::paintEvent(QPaintEvent *event)
+ 
+     if(!isEnabled())
+     {
+-        d->m_buttonBkgColor = palette().color(QPalette::Disabled,QPalette::Button);
+-        d->m_iconColor = palette().color(QPalette::Disabled,QPalette::HighlightedText);
++//        d->m_buttonBkgColor = palette().color(QPalette::Disabled,QPalette::Button);
++        d->m_buttonBkgColor = ThemeController::getPaletteColorFromDT("button",QPalette::Disabled);
++//        d->m_iconColor = palette().color(QPalette::Disabled,QPalette::HighlightedText);
++        d->m_iconColor = ThemeController::getPaletteColorFromDT("highlightedtext");
+     }
+     painter.drawPath(path);
+     painter.setBrush(d->m_buttonBkgColor);
+@@ -187,7 +190,8 @@ bool KFileWidget::eventFilter(QObject *watched, QEvent *event)
+             else
+             {
+                 d->m_iconColor = QColor(255,255,255);
+-                d->m_buttonBkgColor = palette().window().color();
++//                d->m_buttonBkgColor = palette().window().color();
++                d->m_buttonBkgColor = ThemeController::getPaletteColorFromDT("window");
+             }
+         }
+         update();
+@@ -210,7 +214,8 @@ bool KFileWidget::eventFilter(QObject *watched, QEvent *event)
+             else
+             {
+                 d->m_iconColor = QColor(255,255,255);
+-                d->m_buttonBkgColor = palette().window().color();
++//                d->m_buttonBkgColor = palette().window().color();
++                d->m_buttonBkgColor = ThemeController::getPaletteColorFromDT("window");
+             }
+         }
+ 
+@@ -236,7 +241,8 @@ bool KFileWidget::eventFilter(QObject *watched, QEvent *event)
+             else
+             {
+                 d->m_iconColor = QColor(255,255,255);
+-                d->m_buttonBkgColor = palette().window().color();
++//                d->m_buttonBkgColor = palette().window().color();
++                d->m_buttonBkgColor = ThemeController::getPaletteColorFromDT("window");
+             }
+         }
+         update();
+@@ -252,7 +258,8 @@ bool KFileWidget::eventFilter(QObject *watched, QEvent *event)
+         else
+         {
+             d->m_iconColor = QColor(255,255,255);
+-            d->m_buttonBkgColor = palette().window().color();
++//            d->m_buttonBkgColor = palette().window().color();
++            d->m_buttonBkgColor = ThemeController::getPaletteColorFromDT("window");
+         }
+         update();
+         break;
+@@ -267,10 +274,21 @@ KFileWidgetPrivate::KFileWidgetPrivate(KFileWidget *parent)
+     :q_ptr(parent)
+ {
+     Q_Q(KFileWidget);
+-    m_bottomRightRadius = 6;
+-    m_topLeftRadius = 6;
+-    m_bottomLeftRadius = 6;
+-    m_topRightRadius = 6;
++    int radius = ThemeController::getRadiusFromDT("kradius-normal");
++    if(radius == -1 )
++    {
++        m_bottomRightRadius = 6;
++        m_topLeftRadius = 6;
++        m_bottomLeftRadius = 6;
++        m_topRightRadius = 6;
++    }
++    else
++    {
++        m_bottomRightRadius = radius;
++        m_topLeftRadius = radius;
++        m_bottomLeftRadius = radius;
++        m_topRightRadius = radius;
++    }
+     m_pMainLabel = new QLabel();
+     m_pSubLabel = new QLabel();
+ 
+@@ -303,7 +321,8 @@ void KFileWidgetPrivate::changeTheme()
+     initThemeStyle();
+ 
+     QPalette subPalette = q->palette();
+-    QColor color = subPalette.color(QPalette::Disabled,QPalette::WindowText);
++//    QColor color = subPalette.color(QPalette::Disabled,QPalette::WindowText);
++    QColor color = ThemeController::getPaletteColorFromDT("windowtext",QPalette::Disabled);
+     subPalette.setColor(QPalette::Text,color);
+     m_pSubLabel->setPalette(subPalette);
+ 
+@@ -315,7 +334,8 @@ void KFileWidgetPrivate::changeTheme()
+     else
+     {
+         m_iconColor = QColor(255,255,255);
+-        m_buttonBkgColor = q->palette().window().color();
++//        m_buttonBkgColor = q->palette().window().color();
++        m_buttonBkgColor = ThemeController::getPaletteColorFromDT("window");
+     }
+ }
+ 
+diff --git a/kysdk-qtwidgets/src/kintrowidget.cpp b/kysdk-qtwidgets/src/kintrowidget.cpp
+index 296d148..2e4dcba 100644
+--- a/kysdk-qtwidgets/src/kintrowidget.cpp
++++ b/kysdk-qtwidgets/src/kintrowidget.cpp
+@@ -61,10 +61,6 @@ private:
+ KIntroWidgetPrivate::KIntroWidgetPrivate(KIntroWidget *parent)
+     :q_ptr(parent)
+     ,m_viewType(ListView)
+-    ,m_bottomLeftRadius(6)
+-    ,m_bottomRightRadius(6)
+-    ,m_topLeftRadius(6)
+-    ,m_topRightRadius(6)
+ {
+     Q_Q(KIntroWidget);
+     m_pMainLabel = new KLabel();
+@@ -75,15 +71,34 @@ KIntroWidgetPrivate::KIntroWidgetPrivate(KIntroWidget *parent)
+     QPalette palette;
+     palette.setColor(QPalette::WindowText,QColor(140, 140, 140));
+     m_pSubLabel->setPalette(palette);
+-    m_titleColor = q->palette().highlight().color();
++//    m_titleColor = q->palette().highlight().color();
++    m_titleColor = ThemeController::getPaletteColorFromDT("highlight");
++
++    int radius = ThemeController::getRadiusFromDT("kradius-normal");
++    if(radius == -1 )
++    {
++        m_bottomLeftRadius = 6;
++        m_bottomRightRadius = 6;
++        m_topLeftRadius = 6;
++        m_topRightRadius = 6;
++    }
++    else
++    {
++        m_bottomLeftRadius = radius;
++        m_bottomRightRadius = radius;
++        m_topLeftRadius = radius;
++        m_topRightRadius = radius;
++    }
+ }
+ 
+ void KIntroWidgetPrivate::changeTheme()
+ {
+     Q_Q(KIntroWidget);
+     initThemeStyle();
+-    m_bkgColor = q->palette().toolTipBase().color();
+-    m_borderColor = q->palette().toolTipBase().color();
++//    m_bkgColor = q->palette().toolTipBase().color();
++    m_bkgColor = ThemeController::getPaletteColorFromDT("tooltipbase");
++//    m_borderColor = q->palette().toolTipBase().color();
++    m_borderColor = ThemeController::getPaletteColorFromDT("tooltipbase");
+     m_borderColor.setAlphaF(0.08);
+     if(ThemeController::themeMode() == LightTheme)
+         m_mixColor = Qt::black;
+@@ -246,19 +261,23 @@ bool KIntroWidget::eventFilter(QObject *watched, QEvent *event)
+ 
+         switch (event->type()) {
+         case QEvent::Enter:
+-            d->m_bkgColor = ThemeController::mixColor(palette().toolTipBase().color(),d->m_mixColor,0.05);
++//            d->m_bkgColor = ThemeController::mixColor(palette().toolTipBase().color(),d->m_mixColor,0.05);
++            d->m_bkgColor = ThemeController::mixColor(ThemeController::getPaletteColorFromDT("tooltipbase"),d->m_mixColor,0.05);
+             update();
+             break;
+         case QEvent::Leave:
+-            d->m_bkgColor = palette().toolTipBase().color();
++//            d->m_bkgColor = palette().toolTipBase().color();
++            d->m_bkgColor = ThemeController::getPaletteColorFromDT("tooltipbase");
+             update();
+             break;
+         case QEvent::MouseButtonPress:
+-            d->m_bkgColor = ThemeController::mixColor(palette().toolTipBase().color(),d->m_mixColor,0.1);
++//            d->m_bkgColor = ThemeController::mixColor(palette().toolTipBase().color(),d->m_mixColor,0.1);
++            d->m_bkgColor = ThemeController::mixColor(ThemeController::getPaletteColorFromDT("tooltipbase"),d->m_mixColor,0.1);
+             update();
+             break;
+         case QEvent::MouseButtonRelease:
+-            d->m_bkgColor = ThemeController::mixColor(palette().toolTipBase().color(),d->m_mixColor,0.05);
++//            d->m_bkgColor = ThemeController::mixColor(palette().toolTipBase().color(),d->m_mixColor,0.05);
++            d->m_bkgColor = ThemeController::mixColor(ThemeController::getPaletteColorFromDT("tooltipbase"),d->m_mixColor,0.05);
+             update();
+             break;
+         default:
+diff --git a/kysdk-qtwidgets/src/klabel.cpp b/kysdk-qtwidgets/src/klabel.cpp
+index 150690a..a85ca1a 100644
+--- a/kysdk-qtwidgets/src/klabel.cpp
++++ b/kysdk-qtwidgets/src/klabel.cpp
+@@ -197,7 +197,8 @@ void KLabel::paintEvent(QPaintEvent *event)
+ 
+     switch (d->m_labelType) {
+     case DataType:
+-        bkgColor = palette().highlight().color();
++//        bkgColor = palette().highlight().color();
++        bkgColor = ThemeController::getPaletteColorFromDT("highlight");
+         bkgColor.setAlphaF(0.15);
+         if(d->m_isBackgroundFlag)
+         {
+@@ -215,7 +216,8 @@ void KLabel::paintEvent(QPaintEvent *event)
+         if(d->m_isBackgroundFlag)
+             painter.setBrush(d->m_backgroundColor);
+         else if(d->m_isHighlightBackgroundFlag)
+-            painter.setBrush(palette().highlight().color());
++//            painter.setBrush(palette().highlight().color());
++            painter.setBrush(ThemeController::getPaletteColorFromDT("highlight"));
+         else
+             painter.setBrush(Qt::NoBrush);
+         painter.setPen(Qt::NoPen);
+@@ -225,9 +227,11 @@ void KLabel::paintEvent(QPaintEvent *event)
+         if(d->m_isBackgroundFlag)
+             painter.setBrush(d->m_backgroundColor);
+         else if(d->m_isHighlightBackgroundFlag)
+-                painter.setBrush(palette().highlight().color());
++//                painter.setBrush(palette().highlight().color());
++            painter.setBrush(ThemeController::getPaletteColorFromDT("highlight"));
+         else
+-            painter.setBrush(palette().button().color());
++//            painter.setBrush(palette().button().color());
++            painter.setBrush(ThemeController::getPaletteColorFromDT("button"));
+         painter.setPen(Qt::NoPen);
+         painter.drawEllipse(rect());
+         break;
+@@ -311,11 +315,13 @@ void KLabel::paintEvent(QPaintEvent *event)
+ 
+         if(d->m_dataHightColorFlag)
+         {
+-            d->m_pixmap = ThemeController::drawColoredPixmap(d->m_pixmap,palette().highlight().color());
++//            d->m_pixmap = ThemeController::drawColoredPixmap(d->m_pixmap,palette().highlight().color());
++            d->m_pixmap = ThemeController::drawColoredPixmap(d->m_pixmap,ThemeController::getPaletteColorFromDT("highlight"));
+             if(d->m_isFontColor)
+                 painter.setPen(d->m_fontColor);
+             else
+-                painter.setPen(palette().highlight().color());
++//                painter.setPen(palette().highlight().color());
++                painter.setPen(ThemeController::getPaletteColorFromDT("highlight"));
+         }
+         else if(d->m_isBackgroundFlag || d->m_isHighlightBackgroundFlag)
+         {
+@@ -323,20 +329,23 @@ void KLabel::paintEvent(QPaintEvent *event)
+             if(d->m_isFontColor)
+                 painter.setPen(d->m_fontColor);
+             else
+-                painter.setPen(palette().windowText().color());
++//                painter.setPen(palette().windowText().color());
++                painter.setPen(ThemeController::getPaletteColorFromDT("windowtext"));
+         }
+         else
+         {
+             if(d->m_isFontColor)
+                 painter.setPen(d->m_fontColor);
+             else
+-                painter.setPen(palette().windowText().color());
++//                painter.setPen(palette().windowText().color());
++                painter.setPen(ThemeController::getPaletteColorFromDT("windowtext"));
+             if(ThemeController::isPixmapPureColor(d->m_pixmap))
+             {
+                 if(ThemeController::themeMode() == DarkTheme)
+                     d->m_pixmap = ThemeController::drawColoredPixmap(d->m_pixmap,Qt::white);
+                 else
+-                    d->m_pixmap = ThemeController::drawColoredPixmap(d->m_pixmap,palette().windowText().color());
++//                    d->m_pixmap = ThemeController::drawColoredPixmap(d->m_pixmap,palette().windowText().color());
++                    d->m_pixmap = ThemeController::drawColoredPixmap(d->m_pixmap,ThemeController::getPaletteColorFromDT("windowtext"));
+             }
+         }
+ 
+@@ -391,13 +400,15 @@ void KLabel::paintEvent(QPaintEvent *event)
+                     widthUsed += charWidth;
+                 }
+                 if(d->m_dataHightColorFlag)
+-                    painter.setPen(palette().highlight().color());
++//                    painter.setPen(palette().highlight().color());
++                    painter.setPen(ThemeController::getPaletteColorFromDT("highlight"));
+                 else
+                 {
+                     if(d->m_isFontColor)
+                         painter.setPen(d->m_fontColor);
+                     else
+-                        painter.setPen(palette().windowText().color());
++//                        painter.setPen(palette().windowText().color());
++                        painter.setPen(ThemeController::getPaletteColorFromDT("windowtext"));
+                 }
+                 painter.drawText(xPos,yPos,line);
+                 yPos += lineHeight;
+@@ -406,13 +417,15 @@ void KLabel::paintEvent(QPaintEvent *event)
+             {
+                 line = fontMetrics().elidedText(str,Qt::ElideRight,rect().width());
+                 if(d->m_dataHightColorFlag)
+-                    painter.setPen(palette().highlight().color());
++//                    painter.setPen(palette().highlight().color());
++                    painter.setPen(ThemeController::getPaletteColorFromDT("highlight"));
+                 else
+                 {
+                     if(d->m_isFontColor)
+                         painter.setPen(d->m_fontColor);
+                     else
+-                        painter.setPen(palette().windowText().color());
++//                        painter.setPen(palette().windowText().color());
++                        painter.setPen(ThemeController::getPaletteColorFromDT("windowtext"));
+                 }
+                 painter.drawText(xPos,yPos,line);
+                 break;
+@@ -439,10 +452,6 @@ KLabelPrivate::KLabelPrivate(KLabel *parent)
+     :q_ptr(parent),
+     m_isBackgroundFlag(false),
+     m_dataHightColorFlag(false),
+-    m_bottomRightRadius(6),
+-    m_topLeftRadius(6),
+-    m_bottomLeftRadius(6),
+-    m_topRightRadius(6),
+     diffPointSize(0),
+     m_isHighlightBackgroundFlag(false),
+     m_wordWrap(false),
+@@ -450,6 +459,22 @@ KLabelPrivate::KLabelPrivate(KLabel *parent)
+ {
+     Q_Q(KLabel);
+     m_labelType = NormalType;
++    int radius = ThemeController::getRadiusFromDT("kradius-normal");
++    if(radius == -1 )
++    {
++        m_bottomLeftRadius = 6;
++        m_bottomRightRadius = 6;
++        m_topLeftRadius = 6;
++        m_topRightRadius = 6;
++    }
++    else
++    {
++        m_bottomLeftRadius = radius;
++        m_bottomRightRadius = radius;
++        m_topLeftRadius = radius;
++        m_topRightRadius = radius;
++    }
++
+ //    m_pixmap = new QPixmap();
+ }
+ 
+diff --git a/kysdk-qtwidgets/src/klineedit.cpp b/kysdk-qtwidgets/src/klineedit.cpp
+index 806d62e..f5aac76 100644
+--- a/kysdk-qtwidgets/src/klineedit.cpp
++++ b/kysdk-qtwidgets/src/klineedit.cpp
+@@ -204,7 +204,8 @@ void PushButton::paintEvent(QPaintEvent *event)
+         if(m_mouseEnter || m_pressEnter)
+         {
+             pixmap = ThemeController::drawSymbolicColoredPixmap(pixmap);
+-            p.setBrush(palette().highlight().color());
++//            p.setBrush(palette().highlight().color());
++            p.setBrush(ThemeController::getPaletteColorFromDT("highlight"));
+         }
+         else
+             p.setBrush(Qt::NoBrush);
+@@ -222,9 +223,13 @@ void PushButton::paintEvent(QPaintEvent *event)
+             p.setBrush(QColor(184, 184, 184));
+         }
+         else
+-            p.setBrush(palette().button().color());
++//            p.setBrush(palette().button().color());
++            p.setBrush(ThemeController::getPaletteColorFromDT("button"));
+     }
+-    p.drawRoundedRect(rect(),6,6);
++    int radius = ThemeController::getRadiusFromDT("kradius-normal");
++    if(radius == -1)
++        radius = 6;
++    p.drawRoundedRect(rect(),radius,radius);
+ 
+     QRect iconRect((rect().width()-iconSize().width())/2,(rect().height()-iconSize().height())/2,iconSize().width(),iconSize().height());
+     p.drawPixmap(iconRect,pixmap);
+diff --git a/kysdk-qtwidgets/src/klistviewdelegate.cpp b/kysdk-qtwidgets/src/klistviewdelegate.cpp
+index 19ecd84..179e880 100644
+--- a/kysdk-qtwidgets/src/klistviewdelegate.cpp
++++ b/kysdk-qtwidgets/src/klistviewdelegate.cpp
+@@ -101,7 +101,9 @@ void KListViewDelegate::paint(QPainter *painter, const QStyleOptionViewItem &opt
+             rect.setWidth(option.rect.width());
+             rect.setHeight(option.rect.height());
+             //QPainterPath画圆角矩形
+-            const qreal radius = 4;
++            qreal radius = ThemeController::getRadiusFromDT("kradius-min");
++            if(radius == -1)
++                radius = 4;
+             QPainterPath path;
+             path.moveTo(rect.topRight() - QPointF(radius, 0));
+             path.lineTo(rect.topLeft() + QPointF(radius, 0));
+@@ -131,12 +133,14 @@ void KListViewDelegate::paint(QPainter *painter, const QStyleOptionViewItem &opt
+                 {
+                     if(ThemeController::themeMode() == ThemeFlag::DarkTheme)
+                            {
+-                                color = option.palette.windowText().color();
++//                                color = option.palette.windowText().color();
++                                color = ThemeController::getPaletteColorFromDT("windowtext");
+                                 color.setAlphaF(0.25);
+                            }
+                            else
+                            {
+-                                color = option.palette.highlight().color().lighter(120);
++//                                color = option.palette.highlight().color().lighter(120);
++                                color = ThemeController::getPaletteColorFromDT("highlight");
+                                 color.setAlphaF(0.5);
+                            }
+                     painter->setPen(QPen(Qt::NoPen));
+@@ -145,7 +149,8 @@ void KListViewDelegate::paint(QPainter *painter, const QStyleOptionViewItem &opt
+                 }
+                 else if (option.state.testFlag(QStyle::State_Selected))
+                     {
+-                        color = option.palette.highlight().color();
++//                        color = option.palette.highlight().color();
++                        color = ThemeController::getPaletteColorFromDT("highlight");
+                         painter->setPen(QPen(Qt::NoPen));
+                         painter->setBrush(color);
+                         painter->drawPath(path);
+@@ -199,12 +204,14 @@ void KListViewDelegate::paint(QPainter *painter, const QStyleOptionViewItem &opt
+                 {
+                     if(ThemeController::themeMode()==ThemeFlag::DarkTheme)
+                            {
+-                                color = option.palette.windowText().color();
++//                                color = option.palette.windowText().color();
++                                color = ThemeController::getPaletteColorFromDT("windowtext");
+                                 color.setAlphaF(0.25);
+                            }
+                            else
+                            {
+-                                color = option.palette.highlight().color().lighter(120);
++//                                color = option.palette.highlight().color().lighter(120);
++                                color = ThemeController::getPaletteColorFromDT("highlight");
+                                 color.setAlphaF(0.5);
+                            }
+                     painter->setPen(QPen(Qt::NoPen));
+@@ -213,7 +220,8 @@ void KListViewDelegate::paint(QPainter *painter, const QStyleOptionViewItem &opt
+                 }
+                 else if (option.state.testFlag(QStyle::State_Selected))
+                     {
+-                        color = option.palette.highlight().color();
++//                        color = option.palette.highlight().color();
++                        color = ThemeController::getPaletteColorFromDT("highlight");
+                         painter->setPen(QPen(Qt::NoPen));
+                         painter->setBrush(color);
+                         painter->drawPath(path);
+diff --git a/kysdk-qtwidgets/src/kminicalendarwidget.cpp b/kysdk-qtwidgets/src/kminicalendarwidget.cpp
+index bbe2cee..a74e4ca 100644
+--- a/kysdk-qtwidgets/src/kminicalendarwidget.cpp
++++ b/kysdk-qtwidgets/src/kminicalendarwidget.cpp
+@@ -8,6 +8,7 @@
+ #include <QPainterPath>
+ #include "kpushbutton.h"
+ #include "kborderlessbutton.h"
++#include "themeController.h"
+ 
+ namespace kdk
+ {
+@@ -942,7 +943,10 @@ void KMiniCalendarWidget::paintEvent(QPaintEvent *event)
+ 
+     // 圆角矩形的尺寸和圆角大小
+     QRect rect(0, 0, width(), height());
+-    int radius = 12;
++//    int radius = 12;
++    int radius = ThemeController::getRadiusFromDT("kradius-window");
++    if(radius == -1)
++        radius =12;
+ 
+     // 使用QPainterPath来绘制圆角矩形
+     QPainterPath path;
+diff --git a/kysdk-qtwidgets/src/knativetabbar.cpp b/kysdk-qtwidgets/src/knativetabbar.cpp
+index dba4b5a..1d9f0d3 100644
+--- a/kysdk-qtwidgets/src/knativetabbar.cpp
++++ b/kysdk-qtwidgets/src/knativetabbar.cpp
+@@ -60,6 +60,10 @@ public:
+         connect(m_animation, &QVariantAnimation::finished, this, [=](){
+             m_animationStarted = false;
+         });
++
++        m_borderRadius = ThemeController::getRadiusFromDT("kradius-normal");
++        if(m_borderRadius == -1)
++            m_borderRadius = 6;
+     }
+     void changeTheme();
+     int getIndexAtPos(const QPoint &p);
+@@ -70,7 +74,7 @@ protected:
+ private:
+     KNativeTabbar *q_ptr;
+     KNativeTabbarStyle m_KNativeTabbarStyle;
+-    int m_borderRadius = 6;
++    int m_borderRadius;
+     int m_horizontalMargin = 1;
+     int m_topMargin = 0;
+     QColor m_bkgrdColor;
+@@ -186,12 +190,15 @@ void KNativeTabbar::paintEvent(QPaintEvent *event)
+         {
+         case SegmentDark:
+         {
+-            mix = option.palette.brightText().color();
+-            fontColor = option.palette.buttonText().color();
++//            mix = option.palette.brightText().color();
++            mix = ThemeController::getPaletteColorFromDT("brighttext");
++//            fontColor = option.palette.buttonText().color();
++            fontColor = ThemeController::getPaletteColorFromDT("buttontext");
+             QColor bkgrdColor = d->m_bkgrdColor;
+             if(option.state.testFlag(QStyle::State_Selected))
+             {
+-                bkgrdColor = option.palette.highlight().color();
++//                bkgrdColor = option.palette.highlight().color();
++                bkgrdColor = ThemeController::getPaletteColorFromDT("highlight");
+                 fontColor = QColor("#FFFFFF");
+             }
+             else if(option.state.testFlag(QStyle::State_MouseOver))
+@@ -463,12 +470,15 @@ void KNativeTabbar::paintEvent(QPaintEvent *event)
+         }
+         case SegmentLight:
+         {
+-            mix = option.palette.brightText().color();
+-            fontColor = option.palette.buttonText().color();
++//            mix = option.palette.brightText().color();
++            mix = ThemeController::getPaletteColorFromDT("brighttext");
++//            fontColor = option.palette.buttonText().color();
++            fontColor = ThemeController::getPaletteColorFromDT("buttontext");
+             QColor bkgrdColor = d->m_bkgrdColor;
+             if(option.state.testFlag(QStyle::State_Selected))
+             {
+-                bkgrdColor = option.palette.highlight().color();
++//                bkgrdColor = option.palette.highlight().color();
++                bkgrdColor = ThemeController::getPaletteColorFromDT("highlight");
+                 fontColor = QColor("#FFFFFF");
+             }
+             else if(option.state.testFlag(QStyle::State_MouseOver))
+@@ -556,13 +566,17 @@ void KNativeTabbar::paintEvent(QPaintEvent *event)
+         }
+         case Sliding:
+         {
+-            mix = option.palette.brightText().color();
+-            fontColor = option.palette.buttonText().color();
++//            mix = option.palette.brightText().color();
++            mix = ThemeController::getPaletteColorFromDT("brighttext");
++//            fontColor = option.palette.buttonText().color();
++            fontColor = ThemeController::getPaletteColorFromDT("buttontext");
+             QColor bkgrdColor = d->m_bkgrdColor;
+             if(option.state.testFlag(QStyle::State_Selected))
+             {
+-                bkgrdColor = option.palette.highlight().color();
+-                fontColor = option.palette.highlight().color();
++//                bkgrdColor = option.palette.highlight().color();
++                bkgrdColor = ThemeController::getPaletteColorFromDT("highlight");
++//                fontColor = option.palette.highlight().color();
++                fontColor = ThemeController::getPaletteColorFromDT("highlight");
+             }
+             else if(option.state.testFlag(QStyle::State_MouseOver))
+             {
+@@ -586,7 +600,8 @@ void KNativeTabbar::paintEvent(QPaintEvent *event)
+                 p.save();
+                 QPen pen;
+                 pen.setWidth(2);
+-                pen.setColor(option.palette.highlight().color());
++//                pen.setColor(option.palette.highlight().color());
++                pen.setColor(ThemeController::getPaletteColorFromDT("highlight"));
+                 p.setPen(pen);
+                 p.drawLine(QPoint(left_border, rect.height()-1),QPoint(left_border + d->m_nextTabWidth, rect.height()-1));
+                 p.restore();
+@@ -690,7 +705,8 @@ void KNativeTabbarPrivate::changeTheme()
+         if(m_useCustomColor)
+             return;
+         else
+-            m_bkgrdColor = q->palette().button().color();
++//            m_bkgrdColor = q->palette().button().color();
++            m_bkgrdColor = ThemeController::getPaletteColorFromDT("button");
+         break;
+     }
+     case SegmentLight:
+@@ -705,7 +721,8 @@ void KNativeTabbarPrivate::changeTheme()
+         if(m_useCustomColor)
+             return;
+         else
+-            m_bkgrdColor = q->palette().button().color();
++//            m_bkgrdColor = q->palette().button().color();
++            m_bkgrdColor = ThemeController::getPaletteColorFromDT("button");
+         break;
+     default:
+         break;
+diff --git a/kysdk-qtwidgets/src/knavigationbar.cpp b/kysdk-qtwidgets/src/knavigationbar.cpp
+index 5cec46c..210c4b6 100644
+--- a/kysdk-qtwidgets/src/knavigationbar.cpp
++++ b/kysdk-qtwidgets/src/knavigationbar.cpp
+@@ -209,7 +209,9 @@ void Delegate::paint(QPainter *painter, const QStyleOptionViewItem &option, cons
+     rect.setHeight(option.rect.height()-Parmscontroller::parm(Parmscontroller::Parm::PM_NavigationBatInterval));
+ 
+     //QPainterPath画圆角矩形
+-    const qreal radius = 6; //圆角半径6px
++    qreal radius = ThemeController::getRadiusFromDT("kradius-normal"); //圆角半径6px
++    if(radius == -1);
++        radius = 6;
+     QPainterPath path;
+     QPalette palette = option.palette;
+     if(ThemeController::widgetTheme() == ClassicTheme)
+@@ -280,7 +282,7 @@ void Delegate::paint(QPainter *painter, const QStyleOptionViewItem &option, cons
+                 }
+                 else
+                 {
+-                    color = option.palette.highlight().color();
++                    color = ThemeController::getPaletteColorFromDT("highlight");
+                     if(ThemeController::themeMode() == LightTheme)
+                     {
+                         m_linearGradient.setColorAt(0,color);
+@@ -326,30 +328,42 @@ void Delegate::paint(QPainter *painter, const QStyleOptionViewItem &option, cons
+                 {
+                     if(ThemeController::themeMode() == LightTheme)
+                     {
+-                        color = option.palette.windowText().color();
++                        color = ThemeController::getPaletteColorFromDT("windowtext");
+                         color.setAlphaF(0.05);
+ 
+                         QColor m_color("#E6E6E6");
+-                        QColor startColor = mixColor(m_color,QColor(Qt::black),0.05);
+-                        QColor endLightColor = mixColor(m_color,QColor(Qt::black),0.2);
++                        QColor startColor;
++                        QColor endLightColor;
++
++                        ThemeController::getGradientFromDT("kcomponent-hover",startColor,endLightColor);
++                        if(!startColor.isValid())
++                            startColor = mixColor(m_color,QColor(Qt::black),0.05);
++                        if(!endLightColor.isValid())
++                            endLightColor = mixColor(m_color,QColor(Qt::black),0.2);
++
+                         m_linearGradient.setColorAt(0,startColor);
+                         m_linearGradient.setColorAt(1,endLightColor);
+                     }
+                     else
+                     {
+-                        color = option.palette.windowText().color();
++                        color = ThemeController::getPaletteColorFromDT("windowtext");
+                         color.setAlphaF(0.05);
+ 
+                         QColor color("#373737");
+-                        QColor startColor = mixColor(color,QColor(Qt::white),0.2);
+-                        QColor endLightColor = mixColor(color,QColor(Qt::white),0.05);
++                        QColor startColor;
++                        QColor endLightColor;
++
++                        if(!startColor.isValid())
++                            startColor = mixColor(color,QColor(Qt::white),0.2);
++                        if(!endLightColor.isValid())
++                            endLightColor = mixColor(color,QColor(Qt::white),0.05);
+                         m_linearGradient.setColorAt(0,startColor);
+                         m_linearGradient.setColorAt(1,endLightColor);
+                     }
+                 }
+                 else
+                 {
+-                    color = option.palette.windowText().color();
++                    color = ThemeController::getPaletteColorFromDT("windowtext");
+                     color.setAlphaF(0.05);
+                 }
+             }
+@@ -408,12 +422,13 @@ void Delegate::paint(QPainter *painter, const QStyleOptionViewItem &option, cons
+         if(ThemeController::widgetTheme() == ClassicTheme)
+         {
+             if((m_listView->currentIndex() == index)||(option.state & QStyle::State_Selected))
+-                painter->setPen(option.palette.text().color());
++                painter->setPen(ThemeController::getPaletteColorFromDT("text"));
++
+         }
+         else
+         {
+             if((m_listView->currentIndex() == index)||(option.state & QStyle::State_Selected))
+-                painter->setPen(option.palette.highlightedText().color());
++                painter->setPen(ThemeController::getPaletteColorFromDT("highlightedtext"));
+         }
+         QFont font;
+         font.setPointSize(ThemeController::systemFontSize());
+@@ -459,12 +474,12 @@ void Delegate::paint(QPainter *painter, const QStyleOptionViewItem &option, cons
+         if(ThemeController::widgetTheme() == ClassicTheme)
+         {
+             if(/*(option.state & QStyle::State_HasFocus) &&*/ (option.state & QStyle::State_Selected))
+-                painter->setPen(option.palette.text().color());
++                painter->setPen(ThemeController::getPaletteColorFromDT("text"));
+         }
+         else
+         {
+             if(/*(option.state & QStyle::State_HasFocus) &&*/ (option.state & QStyle::State_Selected))
+-                painter->setPen(option.palette.highlightedText().color());
++                painter->setPen(ThemeController::getPaletteColorFromDT("highlightedtext"));
+         }
+         QFont font;
+         font.setPointSize(ThemeController::systemFontSize());
+diff --git a/kysdk-qtwidgets/src/kpasswordedit.cpp b/kysdk-qtwidgets/src/kpasswordedit.cpp
+index 0611e32..de31758 100644
+--- a/kysdk-qtwidgets/src/kpasswordedit.cpp
++++ b/kysdk-qtwidgets/src/kpasswordedit.cpp
+@@ -123,7 +123,7 @@ void KPasswordEdit::setState(LoginState state)
+         if(ThemeController::widgetTheme() == FashionTheme)
+             palette.setBrush(QPalette::Highlight,QColor("#3769DD"));
+         else
+-            palette.setBrush(QPalette::Highlight,QGuiApplication::palette().color(QPalette::Highlight));
++            palette.setBrush(QPalette::Highlight,ThemeController::getPaletteColorFromDT("highlight"));
+         setPalette(palette);
+         break;
+     case LoginSuccess:
+@@ -395,26 +395,32 @@ void KPasswordEditPrivate::repaintIcon()
+     Q_Q(KPasswordEdit);
+     if(ThemeController::themeMode() == LightTheme)
+     {
+-        m_pClearBtn->setIcon(drawColoredPixmap(QIcon::fromTheme("application-exit-symbolic").pixmap(16,16),q->palette().buttonText().color()));
++//        m_pClearBtn->setIcon(drawColoredPixmap(QIcon::fromTheme("application-exit-symbolic").pixmap(16,16),q->palette().buttonText().color()));
++        m_pClearBtn->setIcon(drawColoredPixmap(QIcon::fromTheme("application-exit-symbolic").pixmap(16,16),ThemeController::getPaletteColorFromDT("buttontext")));
+         if(q->echoMode() == QLineEdit::Password)
+-            m_pEchoModeBtn->setIcon(drawColoredPixmap(QIcon::fromTheme("ukui-eye-hidden-symbolic").pixmap(16,16),q->palette().buttonText().color()));
++//            m_pEchoModeBtn->setIcon(drawColoredPixmap(QIcon::fromTheme("ukui-eye-hidden-symbolic").pixmap(16,16),q->palette().buttonText().color()));
++            m_pEchoModeBtn->setIcon(drawColoredPixmap(QIcon::fromTheme("ukui-eye-hidden-symbolic").pixmap(16,16),ThemeController::getPaletteColorFromDT("buttontext")));
+         else
+-            m_pEchoModeBtn->setIcon(drawColoredPixmap(QIcon::fromTheme("ukui-eye-display-symbolic").pixmap(16,16),q->palette().buttonText().color()));
++//            m_pEchoModeBtn->setIcon(drawColoredPixmap(QIcon::fromTheme("ukui-eye-display-symbolic").pixmap(16,16),q->palette().buttonText().color()));
++            m_pEchoModeBtn->setIcon(drawColoredPixmap(QIcon::fromTheme("ukui-eye-display-symbolic").pixmap(16,16),ThemeController::getPaletteColorFromDT("buttontext")));
+     }
+     else
+     {
+-        m_pClearBtn->setIcon(drawColoredPixmap(QIcon::fromTheme("application-exit-symbolic").pixmap(16,16),q->palette().buttonText().color()));
++//        m_pClearBtn->setIcon(drawColoredPixmap(QIcon::fromTheme("application-exit-symbolic").pixmap(16,16),q->palette().buttonText().color()));
++        m_pClearBtn->setIcon(drawColoredPixmap(QIcon::fromTheme("application-exit-symbolic").pixmap(16,16),ThemeController::getPaletteColorFromDT("buttontext")));
+         if(q->echoMode() == QLineEdit::Password)
+         {
+             if(q->isEnabled())
+-                m_pEchoModeBtn->setIcon(drawColoredPixmap(QIcon::fromTheme("ukui-eye-hidden-symbolic").pixmap(16,16),q->palette().buttonText().color()));
++//                m_pEchoModeBtn->setIcon(drawColoredPixmap(QIcon::fromTheme("ukui-eye-hidden-symbolic").pixmap(16,16),q->palette().buttonText().color()));
++                m_pEchoModeBtn->setIcon(drawColoredPixmap(QIcon::fromTheme("ukui-eye-hidden-symbolic").pixmap(16,16),ThemeController::getPaletteColorFromDT("buttontext")));
+             else
+                 m_pEchoModeBtn->setIcon(drawColoredPixmap(QIcon::fromTheme("ukui-eye-hidden-symbolic").pixmap(16,16),QColor(50,50,50)));
+         }
+         else
+         {
+             if(q->isEnabled())
+-                m_pEchoModeBtn->setIcon(drawColoredPixmap(QIcon::fromTheme("ukui-eye-display-symbolic").pixmap(16,16),q->palette().buttonText().color()));
++//                m_pEchoModeBtn->setIcon(drawColoredPixmap(QIcon::fromTheme("ukui-eye-display-symbolic").pixmap(16,16),q->palette().buttonText().color()));
++                m_pEchoModeBtn->setIcon(drawColoredPixmap(QIcon::fromTheme("ukui-eye-display-symbolic").pixmap(16,16),ThemeController::getPaletteColorFromDT("buttontext")));
+             else
+                 m_pEchoModeBtn->setIcon(drawColoredPixmap(QIcon::fromTheme("ukui-eye-display-symbolic").pixmap(16,16),QColor(50,50,50)));
+         }
+@@ -431,7 +437,8 @@ void KPasswordEditPrivate::changeTheme()
+     QPalette palette = q->palette();
+     if(q->hasFocus())
+     {
+-        QColor color = q->palette().color(QPalette::Base);
++//        QColor color = q->palette().color(QPalette::Base);
++        QColor color = ThemeController::getPaletteColorFromDT("base");
+         palette.setBrush(QPalette::Button,color);
+         if(ThemeController::themeMode() == LightTheme)
+             palette.setBrush(QPalette::Text, QColor(38,38,38));
+diff --git a/kysdk-qtwidgets/src/kpixmapcontainer.cpp b/kysdk-qtwidgets/src/kpixmapcontainer.cpp
+index cada6a2..86fa656 100644
+--- a/kysdk-qtwidgets/src/kpixmapcontainer.cpp
++++ b/kysdk-qtwidgets/src/kpixmapcontainer.cpp
+@@ -26,6 +26,7 @@
+ #include <QPainter>
+ #include <QApplication>
+ #include <QDebug>
++#include "themeController.h"
+ 
+ const static int margin = 10;
+ namespace kdk
+@@ -164,7 +165,8 @@ void KPixmapContainer::paintEvent(QPaintEvent *event)
+     painter.setRenderHint(QPainter::Antialiasing);
+     painter.setPen(Qt::NoPen);
+ 
+-    d->m_color = palette().color(QPalette::Highlight);
++//    d->m_color = palette().color(QPalette::Highlight);
++    d->m_color = ThemeController::getPaletteColorFromDT("highlight");
+ 
+     painter.setBrush(d->m_color);
+     painter.drawPixmap(margin,margin,d->m_pixmap.width(),d->m_pixmap.height(),d->m_pixmap);
+diff --git a/kysdk-qtwidgets/src/kpressbutton.cpp b/kysdk-qtwidgets/src/kpressbutton.cpp
+index 23c054c..f6ec5ec 100755
+--- a/kysdk-qtwidgets/src/kpressbutton.cpp
++++ b/kysdk-qtwidgets/src/kpressbutton.cpp
+@@ -84,10 +84,21 @@ KPressButton::KPressButton(QWidget *parent)
+      d_ptr(new KPressButtonPrivate(this))
+ {
+     Q_D(KPressButton);
+-    d->m_pTopLeftRadius = 6;
+-    d->m_pTopRightRadius = 6;
+-    d->m_pBottomLeftRadius = 6;
+-    d->m_pBottomRightRadius = 6;
++    int radius = ThemeController::getRadiusFromDT("kradius-normal");
++    if(radius == -1)
++    {
++        d->m_pTopLeftRadius = 6;
++        d->m_pTopRightRadius = 6;
++        d->m_pBottomLeftRadius = 6;
++        d->m_pBottomRightRadius = 6;
++    }
++    else
++    {
++        d->m_pTopLeftRadius = radius;
++        d->m_pTopRightRadius = radius;
++        d->m_pBottomLeftRadius = radius;
++        d->m_pBottomRightRadius = radius;
++    }
+     d->m_pButtonType = KPressButton::NormalType;
+     d->m_pCheackable = false;
+     d->m_pTranslucent = false;
+@@ -210,10 +221,12 @@ void KPressButton::paintEvent(QPaintEvent *event)
+         if(ThemeController::themeMode() == LightTheme) // 开启透明度 浅色模式
+         {
+             if(isChecked() /*&& !isLoading()*/)
+-                d->m_pbkgColor = opt.palette.color(QPalette::Highlight);
++//                d->m_pbkgColor = opt.palette.color(QPalette::Highlight);
++                d->m_pbkgColor = ThemeController::getPaletteColorFromDT("highlight");
+             else
+             {
+-                d->m_pbkgColor = opt.palette.color(QPalette::BrightText);
++//                d->m_pbkgColor = opt.palette.color(QPalette::BrightText);
++                d->m_pbkgColor = ThemeController::getPaletteColorFromDT("brighttext");
+                 d->m_pbkgColor.setAlphaF(0.10);
+             }
+ 
+@@ -223,23 +236,25 @@ void KPressButton::paintEvent(QPaintEvent *event)
+                 {
+                     if(opt.state & QStyle::State_Sunken)
+                     {
+-                        d->m_pbkgColor = ThemeController::mixColor(d->m_pbkgColor,opt.palette.brightText().color(),0.2);   //点击变深
++                        d->m_pbkgColor = ThemeController::mixColor(d->m_pbkgColor,/*opt.palette.brightText().color()*/ThemeController::getPaletteColorFromDT("brighttext"),0.2);   //点击变深
+                     }
+                     else
+                     {
+-                        d->m_pbkgColor = ThemeController::mixColor(d->m_pbkgColor,opt.palette.brightText().color(),0.05);  //悬浮变浅
++                        d->m_pbkgColor = ThemeController::mixColor(d->m_pbkgColor,/*opt.palette.brightText().color()*/ThemeController::getPaletteColorFromDT("brighttext"),0.05);  //悬浮变浅
+                     }
+                 }
+                 else
+                 {
+                     if(opt.state & QStyle::State_Sunken)
+                     {
+-                        d->m_pbkgColor = opt.palette.brightText().color();   //点击变深
++//                        d->m_pbkgColor = opt.palette.brightText().color();   //点击变深
++                        d->m_pbkgColor = ThemeController::getPaletteColorFromDT("brighttext");
+                         d->m_pbkgColor.setAlphaF(0.21);
+                     }
+                     else
+                     {
+-                        d->m_pbkgColor = opt.palette.brightText().color();  //悬浮变浅
++//                        d->m_pbkgColor = opt.palette.brightText().color();  //悬浮变浅
++                        d->m_pbkgColor = ThemeController::getPaletteColorFromDT("brighttext");
+                         d->m_pbkgColor.setAlphaF(0.16);
+                     }
+                 }
+@@ -247,10 +262,12 @@ void KPressButton::paintEvent(QPaintEvent *event)
+             else if(opt.state.testFlag(QStyle::State_Selected) )
+             {
+                 if(isChecked() )
+-                    d->m_pbkgColor = opt.palette.color(QPalette::Highlight);
++//                    d->m_pbkgColor = opt.palette.color(QPalette::Highlight);
++                    d->m_pbkgColor = ThemeController::getPaletteColorFromDT("highlight");
+                 else
+                 {
+-                    d->m_pbkgColor = opt.palette.color(QPalette::BrightText);
++//                    d->m_pbkgColor = opt.palette.color(QPalette::BrightText);
++                    d->m_pbkgColor = ThemeController::getPaletteColorFromDT("brighttext");
+                     d->m_pbkgColor.setAlphaF(0.10);
+                 }
+             }
+@@ -258,10 +275,12 @@ void KPressButton::paintEvent(QPaintEvent *event)
+         else  //开启透明度 深色模式
+         {
+             if(isChecked() /*&& !isLoading()*/)
+-                d->m_pbkgColor = opt.palette.color(QPalette::Highlight);
++//                d->m_pbkgColor = opt.palette.color(QPalette::Highlight);
++                d->m_pbkgColor = ThemeController::getPaletteColorFromDT("highlight");
+             else
+             {
+-                d->m_pbkgColor = opt.palette.color(QPalette::BrightText);
++//                d->m_pbkgColor = opt.palette.color(QPalette::BrightText);
++                d->m_pbkgColor = ThemeController::getPaletteColorFromDT("brighttext");
+                 d->m_pbkgColor.setAlphaF(0.10);
+             }
+ 
+@@ -271,23 +290,27 @@ void KPressButton::paintEvent(QPaintEvent *event)
+                 {
+                     if(opt.state & QStyle::State_Sunken)
+                     {
+-                        d->m_pbkgColor = ThemeController::mixColor(d->m_pbkgColor,opt.palette.brightText().color(),0.2);   //点击变深
++//                        d->m_pbkgColor = ThemeController::mixColor(d->m_pbkgColor,opt.palette.brightText().color(),0.2);   //点击变深
++                        d->m_pbkgColor = ThemeController::mixColor(d->m_pbkgColor,ThemeController::getPaletteColorFromDT("brighttext"),0.2);
+                     }
+                     else
+                     {
+-                        d->m_pbkgColor = ThemeController::mixColor(d->m_pbkgColor,opt.palette.brightText().color(),0.05);  //悬浮变浅
++//                        d->m_pbkgColor = ThemeController::mixColor(d->m_pbkgColor,opt.palette.brightText().color(),0.05);  //悬浮变浅
++                        d->m_pbkgColor = ThemeController::mixColor(d->m_pbkgColor,ThemeController::getPaletteColorFromDT("brighttext"),0.05);
+                     }
+                 }
+                 else
+                 {
+                     if(opt.state & QStyle::State_Sunken)
+                     {
+-                        d->m_pbkgColor = opt.palette.brightText().color();   //点击变深
++//                        d->m_pbkgColor = opt.palette.brightText().color();   //点击变深
++                        d->m_pbkgColor = ThemeController::getPaletteColorFromDT("brighttext");
+                         d->m_pbkgColor.setAlphaF(0.3);
+                     }
+                     else
+                     {
+-                        d->m_pbkgColor = opt.palette.brightText().color();  //悬浮变浅
++//                        d->m_pbkgColor = opt.palette.brightText().color();  //悬浮变浅
++                        d->m_pbkgColor = ThemeController::getPaletteColorFromDT("brighttext");
+                         d->m_pbkgColor.setAlphaF(0.2);
+                     }
+                 }
+@@ -295,10 +318,12 @@ void KPressButton::paintEvent(QPaintEvent *event)
+             else if(opt.state.testFlag(QStyle::State_Selected) )
+             {
+                 if(isChecked() )
+-                    d->m_pbkgColor = opt.palette.color(QPalette::Highlight);
++//                    d->m_pbkgColor = opt.palette.color(QPalette::Highlight);
++                    d->m_pbkgColor = ThemeController::getPaletteColorFromDT("highlight");
+                 else
+                 {
+-                    d->m_pbkgColor = opt.palette.color(QPalette::BrightText);
++//                    d->m_pbkgColor = opt.palette.color(QPalette::BrightText);
++                    d->m_pbkgColor = ThemeController::getPaletteColorFromDT("brighttext");
+                     d->m_pbkgColor.setAlphaF(0.10);
+                 }
+             }
+@@ -308,12 +333,12 @@ void KPressButton::paintEvent(QPaintEvent *event)
+     {
+         if(isChecked() /*&& !isLoading()*/)
+         {
+-            d->m_pbkgColor = opt.palette.color(QPalette::Highlight);
++            d->m_pbkgColor = ThemeController::getPaletteColorFromDT("highlight");
+ //            if(ThemeController::widgetTheme() == ClassicTheme)
+ //                d->m_pbkgColor.setAlphaF(0.3);
+         }
+         else
+-            d->m_pbkgColor = opt.palette.color(QPalette::Button);
++            d->m_pbkgColor = ThemeController::getPaletteColorFromDT("button");
+ 
+         if(ThemeController::widgetTheme() == ClassicTheme )
+         {
+@@ -386,7 +411,8 @@ void KPressButton::paintEvent(QPaintEvent *event)
+             }
+             else
+             {
+-                d->m_pbkgColor = ThemeController::mixColor(d->m_pbkgColor,opt.palette.brightText().color(),0.05);  //悬浮变浅
++//                d->m_pbkgColor = ThemeController::mixColor(d->m_pbkgColor,opt.palette.brightText().color(),0.05);  //悬浮变浅
++                d->m_pbkgColor = ThemeController::mixColor(d->m_pbkgColor , ThemeController::getPaletteColorFromDT("brighttext"),0.05);
+             }
+             if(opt.state & QStyle::State_Sunken)
+             {
+@@ -419,16 +445,19 @@ void KPressButton::paintEvent(QPaintEvent *event)
+                 }
+                 else
+                 {
+-                    d->m_pbkgColor = ThemeController::mixColor(d->m_pbkgColor,opt.palette.brightText().color(),0.2);   //点击变深
++//                    d->m_pbkgColor = ThemeController::mixColor(d->m_pbkgColor,opt.palette.brightText().color(),0.2);   //点击变深
++                    d->m_pbkgColor = ThemeController::mixColor(d->m_pbkgColor,ThemeController::getPaletteColorFromDT("brighttext"),0.2);
+                 }
+             }
+         }
+         else if(opt.state.testFlag(QStyle::State_Selected) )
+         {
+             if(isChecked() )
+-                d->m_pbkgColor = opt.palette.color(QPalette::Highlight);
++//                d->m_pbkgColor = opt.palette.color(QPalette::Highlight);
++                d->m_pbkgColor = ThemeController::getPaletteColorFromDT("highlight");
+             else
+-                d->m_pbkgColor = opt.palette.color(QPalette::Button);
++//                d->m_pbkgColor = opt.palette.color(QPalette::Button);
++                d->m_pbkgColor = ThemeController::getPaletteColorFromDT("button");
+         }
+     }
+ 
+diff --git a/kysdk-qtwidgets/src/kprogressbar.cpp b/kysdk-qtwidgets/src/kprogressbar.cpp
+index 7cd70e3..98b38ab 100644
+--- a/kysdk-qtwidgets/src/kprogressbar.cpp
++++ b/kysdk-qtwidgets/src/kprogressbar.cpp
+@@ -136,6 +136,11 @@ void KProgressBar::paintEvent(QPaintEvent *event)
+     }
+     painter.setRenderHint(QPainter::Antialiasing);
+     painter.setPen(Qt::NoPen);
++
++    int radius = ThemeController::getRadiusFromDT("kradius-normal");
++    if(radius == -1)
++        radius = 6;
++
+     if(this->orientation() == Qt::Horizontal)
+     {
+         if(ThemeController::widgetTheme() == ClassicTheme)
+@@ -163,19 +168,26 @@ void KProgressBar::paintEvent(QPaintEvent *event)
+                 else
+                     painter.setBrush(QColor(55,55,59));
+   	    }
+-            painter.drawRoundedRect(d->m_rect,6,6);
++            painter.drawRoundedRect(d->m_rect,radius,radius);
+         }
+ //        QLinearGradient linear(this->rect().topLeft(), this->rect().bottomRight());
+         QLinearGradient linear(d->m_contentRect.left(),0,d->m_contentRect.right(),0);
+         d->m_linearGradient = QLinearGradient(d->m_contentRect.topLeft(),d->m_contentRect.bottomRight());
+-        QColor color = palette().color(QPalette::Highlight);
++//        QColor color = palette().color(QPalette::Highlight);
++        QColor color = ThemeController::getPaletteColorFromDT("highlight");
+         switch (d->m_state)
+         {
+         case NormalProgress:
+             if(ThemeController::widgetTheme() == FashionTheme)
+             {
+-                QColor startColor = ThemeController::mixColor(color,Qt::white,0.2);
+-                QColor endColor = ThemeController::mixColor(color,Qt::white,0.05);
++                QColor startColor;
++                QColor endColor;
++                ThemeController::getGradientFromDT("kbrand-hover",startColor,endColor);
++                if(!startColor.isValid())
++                    startColor = ThemeController::mixColor(color,Qt::white,0.2);
++                if(!endColor.isValid())
++                    endColor = ThemeController::mixColor(color,Qt::white,0.05);
++
+                 linear.setColorAt(0, startColor);
+                 linear.setColorAt(1, endColor);
+             }
+@@ -224,10 +236,11 @@ void KProgressBar::paintEvent(QPaintEvent *event)
+             if(ThemeController::widgetTheme() == ClassicTheme)
+                 painter.drawRoundedRect(d->m_contentRect,0,0);
+             else
+-                painter.drawRoundedRect(d->m_contentRect,6,6);
++                painter.drawRoundedRect(d->m_contentRect,radius,radius);
+             if(isTextVisible())
+             {
+-                painter.setPen(QWidget::palette().color(QPalette::Text));
++//                painter.setPen(QWidget::palette().color(QPalette::Text));
++                painter.setPen(ThemeController::getPaletteColorFromDT("text"));
+                 painter.drawText(d->m_textRect,Qt::AlignCenter,text());
+             }
+             break;
+@@ -248,7 +261,7 @@ void KProgressBar::paintEvent(QPaintEvent *event)
+             if(ThemeController::widgetTheme() == ClassicTheme)
+                 painter.drawRoundedRect(d->m_contentRect,0,0);
+             else
+-                painter.drawRoundedRect(d->m_contentRect,6,6);
++                painter.drawRoundedRect(d->m_contentRect,radius,radius);
+             if(isTextVisible())
+             {
+                 QPixmap pixmap = QIcon::fromTheme("dialog-error").pixmap(16,16);
+@@ -264,13 +277,29 @@ void KProgressBar::paintEvent(QPaintEvent *event)
+             {
+                if(ThemeController::themeMode() == LightTheme)
+                {
+-                   linear.setColorAt(0, QColor("#8DF063"));
+-                   linear.setColorAt(1, QColor("#4ED42D"));
++                   QColor startColor;
++                   QColor endColor;
++                   ThemeController::getGradientFromDT("ksuccess-hover",startColor,endColor);
++                   if(!startColor.isValid())
++                       startColor = QColor("#8DF063");
++                   if(!endColor.isValid())
++                       endColor = QColor("#4ED42D");
++
++                   linear.setColorAt(0, startColor);
++                   linear.setColorAt(1, endColor);
+                }
+                else
+                {
+-                   linear.setColorAt(0, QColor("#75D14D"));
+-                   linear.setColorAt(1, QColor("#52C429"));
++                   QColor startColor;
++                   QColor endColor;
++                   ThemeController::getGradientFromDT("ksuccess-hover",startColor,endColor);
++                   if(!startColor.isValid())
++                       startColor = QColor("#75D14D");
++                   if(!endColor.isValid())
++                       endColor = QColor("#52C429");
++
++                   linear.setColorAt(0, startColor);
++                   linear.setColorAt(1, endColor);
+                }
+             }
+             else if(ThemeController::widgetTheme() == ClassicTheme)
+@@ -288,7 +317,7 @@ void KProgressBar::paintEvent(QPaintEvent *event)
+             if(ThemeController::widgetTheme() == ClassicTheme)
+                 painter.drawRoundedRect(d->m_contentRect,0,0);
+             else
+-                painter.drawRoundedRect(d->m_contentRect,6,6);
++                painter.drawRoundedRect(d->m_contentRect,radius,radius);
+             if(isTextVisible())
+             {
+                 QPixmap pixmap = QIcon::fromTheme("ukui-dialog-success").pixmap(16,16);
+@@ -329,19 +358,28 @@ void KProgressBar::paintEvent(QPaintEvent *event)
+                 else
+                     painter.setBrush(QColor(55,55,59));
+             }
+-            painter.drawRoundedRect(d->m_rect,6,6);
++            painter.drawRoundedRect(d->m_rect,radius,radius);
+         }
+         QLinearGradient linear(0,d->m_contentRect.top(),0, d->m_contentRect.bottom());
+ 
+         d->m_linearGradient = QLinearGradient(d->m_contentRect.topLeft(),d->m_contentRect.bottomRight());
+-        QColor color = palette().color(QPalette::Highlight);
++//        QColor color = palette().color(QPalette::Highlight);
++        QColor color = ThemeController::getPaletteColorFromDT("highlight");
+         switch (d->m_state)
+         {
+         case NormalProgress:
+             if(ThemeController::widgetTheme() == FashionTheme)
+             {
+-                QColor startColor = ThemeController::mixColor(color,Qt::white,0.2);
+-                QColor endColor = ThemeController::mixColor(color,Qt::white,0.05);
++                QColor startColor;
++                QColor endColor;
++                ThemeController::getGradientFromDT("kbrand-hover",startColor,endColor);
++                if(!startColor.isValid())
++                    startColor = ThemeController::mixColor(color,Qt::white,0.2);
++                if(!endColor.isValid())
++                    endColor = ThemeController::mixColor(color,Qt::white,0.05);
++
++//                QColor startColor = ThemeController::mixColor(color,Qt::white,0.2);
++//                QColor endColor = ThemeController::mixColor(color,Qt::white,0.05);
+                 linear.setColorAt(0, startColor);
+                 linear.setColorAt(1, endColor);
+             }
+@@ -390,10 +428,11 @@ void KProgressBar::paintEvent(QPaintEvent *event)
+             if(ThemeController::widgetTheme() == ClassicTheme)
+                 painter.drawRoundedRect(d->m_contentRect,0,0);
+             else
+-                painter.drawRoundedRect(d->m_contentRect,6,6);
++                painter.drawRoundedRect(d->m_contentRect,radius,radius);
+             if(isTextVisible())
+             {
+-                painter.setPen(QWidget::palette().color(QPalette::Text));
++//                painter.setPen(QWidget::palette().color(QPalette::Text));
++                painter.setPen(ThemeController::getPaletteColorFromDT("text"));
+                 painter.drawText(d->m_textRect,Qt::AlignCenter,text());
+             }
+             break;
+@@ -414,7 +453,7 @@ void KProgressBar::paintEvent(QPaintEvent *event)
+             if(ThemeController::widgetTheme() == ClassicTheme)
+                 painter.drawRoundedRect(d->m_contentRect,0,0);
+             else
+-                painter.drawRoundedRect(d->m_contentRect,6,6);
++                painter.drawRoundedRect(d->m_contentRect,radius,radius);
+             if(isTextVisible())
+             {
+                 QPixmap pixmap = QIcon::fromTheme("dialog-error").pixmap(16,16);
+@@ -430,13 +469,29 @@ void KProgressBar::paintEvent(QPaintEvent *event)
+             {
+                if(ThemeController::themeMode() == LightTheme)
+                {
+-                   linear.setColorAt(0, QColor("#8DF063"));
+-                   linear.setColorAt(1, QColor("#4ED42D"));
++                   QColor startColor;
++                   QColor endColor;
++                   ThemeController::getGradientFromDT("ksuccess-hover",startColor,endColor);
++                   if(!startColor.isValid())
++                       startColor = QColor("#8DF063");
++                   if(!endColor.isValid())
++                       endColor = QColor("#4ED42D");
++
++                   linear.setColorAt(0, startColor);
++                   linear.setColorAt(1, endColor);
+                }
+                else
+                {
+-                   linear.setColorAt(0, QColor("#75D14D"));
+-                   linear.setColorAt(1, QColor("#52C429"));
++                   QColor startColor;
++                   QColor endColor;
++                   ThemeController::getGradientFromDT("ksuccess-hover",startColor,endColor);
++                   if(!startColor.isValid())
++                       startColor = QColor("#75D14D");
++                   if(!endColor.isValid())
++                       endColor = QColor("#52C429");
++
++                   linear.setColorAt(0, startColor);
++                   linear.setColorAt(1, endColor);
+                }
+             }
+             else if(ThemeController::widgetTheme() == ClassicTheme)
+@@ -454,7 +509,7 @@ void KProgressBar::paintEvent(QPaintEvent *event)
+             if(ThemeController::widgetTheme() == ClassicTheme)
+                 painter.drawRoundedRect(d->m_contentRect,0,0);
+             else
+-                painter.drawRoundedRect(d->m_contentRect,6,6);
++                painter.drawRoundedRect(d->m_contentRect,radius,radius);
+             if(isTextVisible())
+             {
+                 QPixmap pixmap = QIcon::fromTheme("ukui-dialog-success").pixmap(16,16);
+diff --git a/kysdk-qtwidgets/src/kprogresscircle.cpp b/kysdk-qtwidgets/src/kprogresscircle.cpp
+index 3fda39c..beb75ed 100644
+--- a/kysdk-qtwidgets/src/kprogresscircle.cpp
++++ b/kysdk-qtwidgets/src/kprogresscircle.cpp
+@@ -324,7 +324,8 @@ void KProgressCirclePrivate::dawColoredCircle(QPainter *painter)
+     int angleSpan = m_value*360/m_maximum;
+ 
+     if(m_state == ProgressBarState::NormalProgress){
+-        m_color = q->palette().color(QPalette::Highlight);
++//        m_color = q->palette().color(QPalette::Highlight);
++        m_color = ThemeController::getPaletteColorFromDT("highlight");
+     }
+ 
+     if(m_isTextVisiable)
+@@ -387,12 +388,24 @@ void KProgressCirclePrivate::drawText(QPainter *painter)
+             if(ThemeController::widgetTheme() == FashionTheme)
+             {
+                 if(ThemeController::themeMode() == LightTheme)
+-                    green = QColor("#65E944");
++                {
++                    green = ThemeController::getCustomColorFromDT("ksuccess-normal");
++                    if(!green.isValid())
++                        green = QColor("#65E944");
++                }
+                 else
+-                    green = QColor("#52C429");
++                {
++                    green = ThemeController::getCustomColorFromDT("ksuccess-normal");
++                    if(!green.isValid())
++                        green = QColor("#52C429");
++                }
+             }
+             else
+-                 green = QColor("#52C429");
++            {
++                green = ThemeController::getCustomColorFromDT("ksuccess-normal");
++                if(!green.isValid())
++                    green = QColor("#52C429");
++            }
+             QPixmap pixmap = ThemeController::drawColoredPixmap(QIcon::fromTheme("object-select-symbolic").pixmap(m_pixWidth,m_pixWidth),green);
+             painter->setRenderHint(QPainter::Antialiasing);
+             painter->drawPixmap(pixRect,pixmap);
+@@ -404,12 +417,24 @@ void KProgressCirclePrivate::drawText(QPainter *painter)
+             if(ThemeController::widgetTheme() == FashionTheme)
+             {
+                 if(ThemeController::themeMode() == LightTheme)
+-                    red = QColor("#EC334C");
++                {
++                    red = ThemeController::getCustomColorFromDT("kerror-normal");
++                    if(!red.isValid())
++                        red = QColor("#EC334C");
++                }
+                 else
+-                    red = QColor("#FF4D4F");
++                {
++                    red = ThemeController::getCustomColorFromDT("kerror-normal");
++                    if(!red.isValid())
++                        red = QColor("#FF4D4F");
++                }
+             }
+             else
+-                red = QColor("#FF4D4F");
++            {
++                red = ThemeController::getCustomColorFromDT("kerror-normal");
++                if(!red.isValid())
++                    red = QColor("#FF4D4F");
++            }
+             QPixmap pixmap = ThemeController::drawColoredPixmap(QIcon::fromTheme("window-close-symbolic").pixmap(20,20),red);
+             painter->setRenderHint(QPainter::Antialiasing);
+             painter->drawPixmap(pixRect,pixmap);
+diff --git a/kysdk-qtwidgets/src/kprogresslabel.cpp b/kysdk-qtwidgets/src/kprogresslabel.cpp
+index ab3cebb..8908152 100644
+--- a/kysdk-qtwidgets/src/kprogresslabel.cpp
++++ b/kysdk-qtwidgets/src/kprogresslabel.cpp
+@@ -362,11 +362,11 @@ void LineLabel::paintEvent(QPaintEvent *event)
+     painter.save();
+     if (!colorFlag)
+     {
+-        m_backgroundColor = palette().midlight().color();
++        m_backgroundColor = ThemeController::getPaletteColorFromDT("midlight");
+     }
+     else
+     {
+-        m_backgroundColor = palette().highlight().color();
++        m_backgroundColor = ThemeController::getPaletteColorFromDT("highlight");
+     }
+     QPen pen = painter.pen();
+     pen.setColor(m_backgroundColor);
+@@ -417,13 +417,15 @@ void CircleLable::paintEvent(QPaintEvent *event)
+     // 深浅主题切换
+     if (!colorFlag && !isSucceed)
+     {
+-        m_backgroundColor = palette().midlight().color();
++//        m_backgroundColor = palette().midlight().color();
++        m_backgroundColor = ThemeController::getPaletteColorFromDT("midlight");
+         m_textColor= QColor(255,255,255);
+         painter.setBrush(QBrush(m_backgroundColor));
+     }
+     else if(isSucceed || colorFlag)
+     {
+-        painter.setBrush(QBrush(this->palette().highlight().color()));
++//        painter.setBrush(QBrush(this->palette().highlight().color()));
++        painter.setBrush(ThemeController::getPaletteColorFromDT("highlight"));
+     }
+ 
+     painter.setPen(Qt::NoPen);
+@@ -461,7 +463,8 @@ void TextLabel::setTextHighlight(bool flag)
+     if (flag)
+     {
+         QPalette palette = this->palette();
+-        palette.setColor(QPalette::WindowText, palette.highlight().color());
++//        palette.setColor(QPalette::WindowText, palette.highlight().color());
++        palette.setColor(QPalette::WindowText,ThemeController::getPaletteColorFromDT("highlight"));
+         this->setPalette(palette);
+     }
+     else
+@@ -481,7 +484,8 @@ void TextLabel::paintEvent(QPaintEvent *e)
+     if(!isPalette)
+     {
+         QPalette palette = this->palette();
+-        QColor textColor = this->palette().brightText().color();
++//        QColor textColor = this->palette().brightText().color();
++        QColor textColor = ThemeController::getPaletteColorFromDT("brighttext");
+         textColor.setAlphaF(0.35);
+         palette.setColor(QPalette::WindowText,textColor);
+         this->setPalette(palette);
+@@ -489,7 +493,8 @@ void TextLabel::paintEvent(QPaintEvent *e)
+     else
+     {
+         QPalette palette = this->palette();
+-        palette.setColor(QPalette::WindowText, palette.highlight().color());
++//        palette.setColor(QPalette::WindowText, palette.highlight().color());
++        palette.setColor(QPalette::WindowText,ThemeController::getPaletteColorFromDT("highlight"));
+         this->setPalette(palette);
+     }
+     QLabel::paintEvent(e);
+diff --git a/kysdk-qtwidgets/src/kpushbutton.cpp b/kysdk-qtwidgets/src/kpushbutton.cpp
+index 5b539ec..38c73a9 100755
+--- a/kysdk-qtwidgets/src/kpushbutton.cpp
++++ b/kysdk-qtwidgets/src/kpushbutton.cpp
+@@ -84,19 +84,33 @@ private:
+ KPushButton::KPushButton(QWidget *parent):QPushButton(parent),d_ptr(new KPushButtonPrivate(this))
+ {
+     Q_D(KPushButton);
+-    d->m_radius = 6;
+-    d->m_bottomLeft = 6;
+-    d->m_topLeft = 6;
+-    d->m_topRight = 6;
+-    d->m_bottomRight = 6;
++    int radius = ThemeController::getRadiusFromDT("kradius-normal");
++    if(radius == -1)
++    {
++        d->m_radius = 6;
++        d->m_bottomLeft = 6;
++        d->m_topLeft = 6;
++        d->m_topRight = 6;
++        d->m_bottomRight = 6;
++    }
++    else
++    {
++        d->m_radius = radius;
++        d->m_bottomLeft = radius;
++        d->m_topLeft = radius;
++        d->m_topRight = radius;
++        d->m_bottomRight = radius;
++    }
+     d->m_flashState = 0;
+-    d->m_backgroundColor = palette().color(QPalette::Button);
++//    d->m_backgroundColor = palette().color(QPalette::Button);
++    d->m_backgroundColor = ThemeController::getPaletteColorFromDT("button");
+     d->m_useCustomColor = false;
+     d->m_hasOneParam = true;
+     d->m_buttonType = NormalType;
+     d->m_isTranslucent = false;
+     d->m_isIconHighlight = false;
+-    d->m_iconColor = palette().color(QPalette::ButtonText);
++//    d->m_iconColor = palette().color(QPalette::ButtonText);
++    d->m_iconColor = ThemeController::getPaletteColorFromDT("buttontext");
+     d->m_useCustomIconColor = false;
+     d->m_isBackgroundColorHighlight = false;
+     d->m_isTranslucentFlag = false;
+@@ -304,9 +318,12 @@ void KPushButton::paintEvent(QPaintEvent *event)
+     painter.setRenderHint(QPainter::TextAntialiasing);
+     painter.setRenderHint(QPainter::SmoothPixmapTransform);
+ 
+-    QColor fontColor = option.palette.color(QPalette::Active,QPalette::BrightText);
+-    QColor mix = option.palette.brightText().color();
+-    QColor highlight = option.palette.highlight().color();
++//    QColor fontColor = option.palette.color(QPalette::Active,QPalette::BrightText);
++    QColor fontColor = ThemeController::getPaletteColorFromDT("brighttext",QPalette::Disabled);
++//    QColor mix = option.palette.brightText().color();
++    QColor mix = ThemeController::getPaletteColorFromDT("brighttext");
++//    QColor highlight = option.palette.highlight().color();
++    QColor highlight = ThemeController::getPaletteColorFromDT("highlight");
+     QColor backgroundColor;
+ 
+     if(ThemeController::widgetTheme() == ClassicTheme )
+@@ -479,21 +496,25 @@ void KPushButtonPrivate::updateColor(QPainter &painter,QStyleOptionButton &optio
+             }else if(m_isBackgroundColorHighlight){
+                 backgroundColor = highlight;
+             }else if(m_buttonType == KPushButton::ShadowType){
+-                backgroundColor = option.palette.base().color();
++//                backgroundColor = option.palette.base().color();
++                backgroundColor = ThemeController::getPaletteColorFromDT("base");
+             }
+             else{
+-                backgroundColor = option.palette.brightText().color();
++//                backgroundColor = option.palette.brightText().color();
++                backgroundColor = ThemeController::getPaletteColorFromDT("brighttext");
+             }
+ 
+              if(!option.state.testFlag(QStyle::State_Enabled))
+              {
+                  if(ThemeController::themeMode() == LightTheme){
+-                     fontColor = option.palette.color(QPalette::Disabled,QPalette::ButtonText);
++//                     fontColor = option.palette.color(QPalette::Disabled,QPalette::ButtonText);
++                     fontColor = ThemeController::getPaletteColorFromDT("buttontext");
+                      backgroundColor.setAlphaF(0.05);
+                  }
+                  else
+                  {
+-                     fontColor = option.palette.color(QPalette::Disabled,QPalette::ButtonText);
++//                     fontColor = option.palette.color(QPalette::Disabled,QPalette::ButtonText);
++                     fontColor = ThemeController::getPaletteColorFromDT("buttontext");
+                      backgroundColor.setAlphaF(0.1);
+                  }
+              }
+@@ -503,7 +524,8 @@ void KPushButtonPrivate::updateColor(QPainter &painter,QStyleOptionButton &optio
+                 {
+                     if(m_buttonType == KPushButton::ShadowType)
+                     {
+-                        backgroundColor = option.palette.highlight().color();
++//                        backgroundColor = option.palette.highlight().color();
++                        backgroundColor = ThemeController::getPaletteColorFromDT("highlight");
+                     }
+                     if(option.state.testFlag(QStyle::State_Sunken))     /*按钮被选中(clicked)*/
+                     {
+@@ -585,13 +607,15 @@ void KPushButtonPrivate::updateColor(QPainter &painter,QStyleOptionButton &optio
+                         }
+                     }
+                 }else{
+-                    backgroundColor = q->palette().color(QPalette::Button);
++//                    backgroundColor = q->palette().color(QPalette::Button);
++                    backgroundColor = ThemeController::getPaletteColorFromDT("button");
+                 }
+ 
+                 /*按钮处于不可用(Disabled)状态*/
+                 if(!option.state.testFlag(QStyle::State_Enabled))
+                 {
+-                    fontColor = option.palette.color(QPalette::Disabled,QPalette::ButtonText);
++//                    fontColor = option.palette.color(QPalette::Disabled,QPalette::ButtonText);
++                    fontColor = ThemeController::getPaletteColorFromDT("buttontext");
+                 }
+                 else
+                 {
+@@ -603,7 +627,8 @@ void KPushButtonPrivate::updateColor(QPainter &painter,QStyleOptionButton &optio
+                                 backgroundColor = ThemeController::mixColor(backgroundColor,mix,0.2);
+                             else
+                                 backgroundColor = ThemeController::mixColor(backgroundColor,mix,0.05);
+-                            fontColor = option.palette.color(QPalette::HighlightedText);
++//                            fontColor = option.palette.color(QPalette::HighlightedText);
++                            fontColor = ThemeController::getPaletteColorFromDT("highlightedtext");
+                         }
+                     }
+                     else if( m_isBackgroundColorHighlight)
+@@ -619,11 +644,13 @@ void KPushButtonPrivate::updateColor(QPainter &painter,QStyleOptionButton &optio
+                                 backgroundColor = ThemeController::mixColor(highlight,mix,0.2);
+                             else
+                                 backgroundColor = ThemeController::mixColor(highlight,mix,0.05);
+-                            fontColor = option.palette.color(QPalette::HighlightedText);
++//                            fontColor = option.palette.color(QPalette::HighlightedText);
++                            fontColor = ThemeController::getPaletteColorFromDT("highlightedtext");
+                         }
+                         else
+                         {
+-                            backgroundColor = q->palette().color(QPalette::Button);
++//                            backgroundColor = q->palette().color(QPalette::Button);
++                            backgroundColor = ThemeController::getPaletteColorFromDT("button");
+                         }
+                     }
+                 }
+@@ -636,13 +663,15 @@ void KPushButtonPrivate::updateColor(QPainter &painter,QStyleOptionButton &optio
+                 }else if(m_isBackgroundColorHighlight){
+                     backgroundColor = highlight;
+                 }else{
+-                    backgroundColor = q->palette().color(QPalette::Button);
++//                    backgroundColor = q->palette().color(QPalette::Button);
++                    backgroundColor = ThemeController::getPaletteColorFromDT("button");
+                 }
+ 
+                 /*按钮处于不可用(Disabled)状态*/
+                 if(!option.state.testFlag(QStyle::State_Enabled))
+                 {
+-                    fontColor = option.palette.color(QPalette::Disabled,QPalette::ButtonText);
++//                    fontColor = option.palette.color(QPalette::Disabled,QPalette::ButtonText);
++                    fontColor = ThemeController::getPaletteColorFromDT("buttontext");
+                 }
+                 else
+                 {
+@@ -654,12 +683,14 @@ void KPushButtonPrivate::updateColor(QPainter &painter,QStyleOptionButton &optio
+                                 backgroundColor = ThemeController::mixColor(backgroundColor,mix,0.2);
+                             else
+                                 backgroundColor = ThemeController::mixColor(backgroundColor,mix,0.05);
+-                            fontColor = option.palette.color(QPalette::HighlightedText);
++//                            fontColor = option.palette.color(QPalette::HighlightedText);
++                            fontColor = ThemeController::getPaletteColorFromDT("highlightedtext");
+                         }
+                         else
+                         {
+                             if(m_isBackgroundColorHighlight)
+-                                fontColor = option.palette.color(QPalette::HighlightedText);
++//                                fontColor = option.palette.color(QPalette::HighlightedText);
++                                fontColor = ThemeController::getPaletteColorFromDT("highlightedtext");
+                         }
+                     }
+                     else
+@@ -671,11 +702,13 @@ void KPushButtonPrivate::updateColor(QPainter &painter,QStyleOptionButton &optio
+                                 backgroundColor = ThemeController::mixColor(highlight,mix,0.2);
+                             else
+                                 backgroundColor = ThemeController::mixColor(highlight,mix,0.05);
+-                            fontColor = option.palette.color(QPalette::HighlightedText);
++//                            fontColor = option.palette.color(QPalette::HighlightedText);
++                            fontColor = ThemeController::getPaletteColorFromDT("highlightedtext");
+                         }
+                         else
+                         {
+-                            backgroundColor = q->palette().color(QPalette::Button);
++//                            backgroundColor = q->palette().color(QPalette::Button);
++                            backgroundColor = ThemeController::getPaletteColorFromDT("button");
+                         }
+                     }
+                 }
+@@ -753,8 +786,8 @@ void KPushButtonPrivate::drawBackground(QPainter &painter, QStyleOptionButton &o
+         {
+             QPen pen;
+             pen.setWidth(2);
+-//                pen.setColor(qApp->property("kBrandFocus").value<QColor>());
+-            pen.setColor(q->palette().highlight().color());
++//            pen.setColor(q->palette().highlight().color());
++            pen.setColor(ThemeController::getPaletteColorFromDT("highlight"));
+             painter.setPen(pen);
+         }
+         else
+@@ -917,8 +950,10 @@ void KPushButtonPrivate::updatePixmap(QPixmap &arrowPixmap,QPixmap &pixmap, QSty
+     }
+     else
+     {
+-        arrowPixmap = ThemeController::drawColoredPixmap(arrowPixmap,q->palette().color(QPalette::Disabled,QPalette::ButtonText));
+-        pixmap = ThemeController::drawColoredPixmap(pixmap,q->palette().color(QPalette::Disabled,QPalette::ButtonText));
++//        arrowPixmap = ThemeController::drawColoredPixmap(arrowPixmap,q->palette().color(QPalette::Disabled,QPalette::ButtonText));
++        arrowPixmap = ThemeController::drawColoredPixmap(arrowPixmap,ThemeController::getPaletteColorFromDT("buttontext",QPalette::Disabled));
++//        pixmap = ThemeController::drawColoredPixmap(pixmap,q->palette().color(QPalette::Disabled,QPalette::ButtonText));
++        pixmap = ThemeController::drawColoredPixmap(pixmap,ThemeController::getPaletteColorFromDT("buttontext",QPalette::Disabled));
+     }
+ }
+ 
+@@ -927,11 +962,13 @@ void KPushButtonPrivate::updateGrayColor(QPainter &painter, QStyleOptionButton &
+     Q_Q(KPushButton);
+     if(!m_isTranslucent)
+     {
+-        pixmapColor = q->palette().text().color();
++//        pixmapColor = q->palette().text().color();
++        pixmapColor = ThemeController::getPaletteColorFromDT("text");
+         if(!q->isEnabled())
+         {
+             backgroundColor = qApp->property("kComponentDisable").value<QColor>();
+-            pixmapColor = q->palette().color(QPalette::Disabled,QPalette::Text);
++//            pixmapColor = q->palette().color(QPalette::Disabled,QPalette::Text);
++            pixmapColor = ThemeController::getPaletteColorFromDT("text",QPalette::Disabled);
+             painter.setPen(Qt::NoPen);
+         }
+         else
+@@ -963,17 +1000,21 @@ void KPushButtonPrivate::updateGrayColor(QPainter &painter, QStyleOptionButton &
+     }
+     else
+     {
+-        pixmapColor = q->palette().text().color();
++//        pixmapColor = q->palette().text().color();
++        pixmapColor = ThemeController::getPaletteColorFromDT("text");
+         if(!q->isEnabled())
+         {
+-            backgroundColor = backgroundColor = qApp->property("kComponentAlphaDisable").value<QColor>();
+-            pixmapColor = q->palette().color(QPalette::Disabled,QPalette::Text);
++//            backgroundColor = backgroundColor = qApp->property("kComponentAlphaDisable").value<QColor>();
++            backgroundColor = ThemeController::getCustomColorFromDT("kComponentAlphaDisable");
++//            pixmapColor = q->palette().color(QPalette::Disabled,QPalette::Text);
++            pixmapColor = ThemeController::getPaletteColorFromDT("text",QPalette::Disabled);
+         }
+         else
+         {
+             if(q->isLoading())
+             {
+-                backgroundColor = qApp->property("kComponentAlphaNormal").value<QColor>();
++//                backgroundColor = qApp->property("kComponentAlphaNormal").value<QColor>();
++                backgroundColor = ThemeController::getCustomColorFromDT("kComponentAlphaNormal");
+                 painter.setPen(Qt::NoPen);
+             }
+             else
+@@ -982,16 +1023,19 @@ void KPushButtonPrivate::updateGrayColor(QPainter &painter, QStyleOptionButton &
+                 {
+                     if(option.state.testFlag(QStyle::State_Sunken))
+                     {
+-                        backgroundColor = qApp->property("kComponentAlphaClick").value<QColor>();
++//                        backgroundColor = qApp->property("kComponentAlphaClick").value<QColor>();
++                        backgroundColor = ThemeController::getCustomColorFromDT("kComponentAlphaClick");
+                     }
+                     else
+                     {
+-                        backgroundColor = qApp->property("kComponentAlphaHover").value<QColor>();
++//                        backgroundColor = qApp->property("kComponentAlphaHover").value<QColor>();
++                        backgroundColor = ThemeController::getCustomColorFromDT("kComponentAlphaHover");
+                     }
+                 }
+                 else
+                 {
+-                    backgroundColor = qApp->property("kComponentAlphaNormal").value<QColor>();
++//                    backgroundColor = qApp->property("kComponentAlphaNormal").value<QColor>();
++                    backgroundColor = ThemeController::getCustomColorFromDT("kComponentAlphaNormal");
+                 }
+             }
+         }
+diff --git a/kysdk-qtwidgets/src/ksearchlineedit.cpp b/kysdk-qtwidgets/src/ksearchlineedit.cpp
+index 124dbff..5a09ff8 100644
+--- a/kysdk-qtwidgets/src/ksearchlineedit.cpp
++++ b/kysdk-qtwidgets/src/ksearchlineedit.cpp
+@@ -601,7 +601,8 @@ void KSearchLineEdit::paintEvent(QPaintEvent *event)
+     if (this->hasFocus() && d->m_showCursor)
+     {
+         QRect rect = this->cursorRect();
+-        painter.fillRect(QRect(rect.center().x()+2, rect.y()+2, 1, rect.height()-4),palette().windowText().color());
++//        painter.fillRect(QRect(rect.center().x()+2, rect.y()+2, 1, rect.height()-4),palette().windowText().color());
++        painter.fillRect(QRect(rect.center().x() + 2 ,rect.y() + 2 , 1 ,rect.height() - 4) ,ThemeController::getPaletteColorFromDT("windowtext"));
+     }
+ 
+     QPen pen = painter.pen();
+@@ -617,29 +618,37 @@ void KSearchLineEdit::paintEvent(QPaintEvent *event)
+             d->m_linearGradient.setColorAt(0.7,QColor(78, 117, 255));
+             d->m_linearGradient.setColorAt(1,QColor(0, 54, 245));
+             pen.setBrush(d->m_linearGradient);
+-            d->m_pCustomButton->setIconColor(true,palette().highlight().color());
++//            d->m_pCustomButton->setIconColor(true,palette().highlight().color());
++            d->m_pCustomButton->setIconColor(true,ThemeController::getPaletteColorFromDT("highlight"));
+             if(d->m_isClearHover  && hasFocus())
+-                d->m_pClearButton->setIconColor(true,palette().windowText().color());
++//                d->m_pClearButton->setIconColor(true,palette().windowText().color());
++                d->m_pClearButton->setIconColor(true,ThemeController::getPaletteColorFromDT("windowtext"));
+             else
+-                d->m_pClearButton->setIconColor(true,palette().mid().color());
++//                d->m_pClearButton->setIconColor(true,palette().mid().color());
++                d->m_pClearButton->setIconColor(true,ThemeController::getPaletteColorFromDT("mid"));
+         }
+         else
+         {
+             if(d->m_isCustomButtonHover && hasFocus())
+-                d->m_pCustomButton->setIconColor(true,palette().windowText().color());
++//                d->m_pCustomButton->setIconColor(true,palette().windowText().color());
++                d->m_pCustomButton->setIconColor(true,ThemeController::getPaletteColorFromDT("windowtext"));
+             else
+-                d->m_pCustomButton->setIconColor(true,palette().mid().color());
++//                d->m_pCustomButton->setIconColor(true,palette().mid().color());
++                d->m_pCustomButton->setIconColor(true,ThemeController::getPaletteColorFromDT("mid"));
+             if(d->m_isClearHover  && hasFocus())
+-                d->m_pClearButton->setIconColor(true,palette().windowText().color());
++//                d->m_pClearButton->setIconColor(true,palette().windowText().color());
++                d->m_pClearButton->setIconColor(true,ThemeController::getPaletteColorFromDT("windowtext"));
+             else
+-                d->m_pClearButton->setIconColor(true,palette().mid().color());
++//                d->m_pClearButton->setIconColor(true,palette().mid().color());
++                d->m_pClearButton->setIconColor(true,ThemeController::getPaletteColorFromDT("mid"));
+ 
+-            pen.setBrush(palette().highlight().color());
++            pen.setBrush(ThemeController::getPaletteColorFromDT("highlight"));
+         }
+     }
+     else
+     {
+-        pen.setBrush(palette().color(QPalette::Disabled,QPalette::Button));
++//        pen.setBrush(palette().color(QPalette::Disabled,QPalette::Button));
++        pen.setBrush(ThemeController::getPaletteColorFromDT("button",QPalette::Disabled));
+         d->m_pClearButton->setEnabled(false);
+         d->m_pCustomButton->setEnabled(false);
+     }
+@@ -647,7 +656,10 @@ void KSearchLineEdit::paintEvent(QPaintEvent *event)
+         painter.setPen(Qt::NoPen);
+     else
+         painter.setPen(pen);
+-    painter.drawRoundedRect(rect().adjusted(1,4,-1,-4),6,6);
++    int radius = ThemeController::getRadiusFromDT("kradius-normal");
++    if(radius == -1)
++        radius = 6;
++    painter.drawRoundedRect(rect().adjusted(1,4,-1,-4),radius,radius);
+ }
+ 
+ QSize KSearchLineEdit::sizeHint() const
+@@ -749,16 +761,19 @@ void KSearchLineEditPrivate::changeTheme()
+     if(!q->isEnabled())
+     {
+         QPalette palette = q->palette();
+-        palette.setColor(QPalette::Text,q->palette().color(QPalette::Disabled,QPalette::ButtonText));
++//        palette.setColor(QPalette::Text,q->palette().color(QPalette::Disabled,QPalette::ButtonText));
++        palette.setColor(QPalette::Text,ThemeController::getPaletteColorFromDT("buttontext",QPalette::Disabled));
+         m_pTextLabel->setPalette(palette);
+     }
+     else
+     {
+         QPalette palette = q->palette();
+         #if (QT_VERSION >= QT_VERSION_CHECK(5, 12, 0))
+-            palette.setColor(QPalette::Text,q->palette().color(QPalette::PlaceholderText));
++//            palette.setColor(QPalette::Text,q->palette().color(QPalette::PlaceholderText));
++            palette.setColor(QPalette::Text,ThemeController::getPaletteColorFromDT("placeholdertext"));
+         #else if (QT_VERSION >= QT_VERSION_CHECK(5, 6, 0))
+-            palette.setColor(QPalette::Text,q->palette().color(QPalette::Shadow));
++//            palette.setColor(QPalette::Text,q->palette().color(QPalette::Shadow));
++            palette.setColor(QPalette::Text,ThemeController::getPaletteColorFromDT("shadow"));
+         #endif
+ 
+         m_pTextLabel->setPalette(palette);
+@@ -899,7 +914,7 @@ void ListViewDelegate::paint(QPainter *painter, const QStyleOptionViewItem &opti
+     rect.setWidth(option.rect.width());
+     rect.setHeight(option.rect.height());
+ 
+-    qreal radius = 6;
++    qreal radius;
+     if(ThemeController::widgetTheme() == ClassicTheme)
+     {
+         if(painter->pen().width() == 1)
+@@ -907,7 +922,11 @@ void ListViewDelegate::paint(QPainter *painter, const QStyleOptionViewItem &opti
+         radius = 0;
+     }
+     else
+-        radius = 6;
++    {
++        radius = ThemeController::getRadiusFromDT("kradius-normal");
++        if(radius == -1)
++            radius = 6;
++    }
+     QPainterPath path;
+     path.moveTo(rect.topRight() - QPointF(radius, 0));
+     path.lineTo(rect.topLeft() + QPointF(radius, 0));
+@@ -921,7 +940,8 @@ void ListViewDelegate::paint(QPainter *painter, const QStyleOptionViewItem &opti
+ 
+     painter->setRenderHint(QPainter::Antialiasing);
+     QColor color = Qt::transparent;
+-    QColor fontColor = qApp->palette().color(QPalette::ButtonText);
++//    QColor fontColor = qApp->palette().color(QPalette::ButtonText);
++    QColor fontColor = ThemeController::getPaletteColorFromDT("buttontext");
+ 
+     if(ThemeController::themeMode() == ThemeFlag::LightTheme){
+         if(!(option.state & QStyle::State_Enabled))
+@@ -940,7 +960,8 @@ void ListViewDelegate::paint(QPainter *painter, const QStyleOptionViewItem &opti
+                         color = ThemeController::adjustL(color,-40);
+                     }
+                     else
+-                        color = option.palette.highlight().color();
++//                        color = option.palette.highlight().color();
++                        color = ThemeController::getPaletteColorFromDT("highlight");
+                     fontColor = QColor(255,255,255);
+                 }
+                 else if((option.state & QStyle::State_MouseOver))
+@@ -953,11 +974,13 @@ void ListViewDelegate::paint(QPainter *painter, const QStyleOptionViewItem &opti
+                         color = ThemeController::adjustL(color,-45);
+                     }
+                     else
+-                        color = option.palette.highlight().color();
++//                        color = option.palette.highlight().color();
++                        color = ThemeController::getPaletteColorFromDT("highlight");
+                     fontColor = QColor(255,255,255);
+                 }
+                 else {
+-                    color = option.palette.windowText().color();
++//                    color = option.palette.windowText().color();
++                    color = ThemeController::getPaletteColorFromDT("windowtext");
+                     color.setAlphaF(0.05);
+                 }
+                 painter->save();
+@@ -985,7 +1008,8 @@ void ListViewDelegate::paint(QPainter *painter, const QStyleOptionViewItem &opti
+                     color = ThemeController::adjustL(color,35);
+                 }
+                 else
+-                    color = option.palette.highlight().color();
++//                    color = option.palette.highlight().color();
++                    color = ThemeController::getPaletteColorFromDT("highlight");
+                 fontColor = QColor(255,255,255);
+             }
+             else if((option.state & QStyle::State_MouseOver))
+@@ -998,11 +1022,13 @@ void ListViewDelegate::paint(QPainter *painter, const QStyleOptionViewItem &opti
+                     color = ThemeController::adjustL(color,-35);
+                 }
+                 else
+-                    color = option.palette.highlight().color();
++//                    color = option.palette.highlight().color();
++                    color = ThemeController::getPaletteColorFromDT("highlight");
+                 fontColor = QColor(255,255,255);
+             }
+             else {
+-                color = option.palette.windowText().color();
++//                color = option.palette.windowText().color();
++                color = ThemeController::getPaletteColorFromDT("windowtext");
+                 color.setAlphaF(0.15);
+             }
+             painter->save();
+@@ -1069,7 +1095,12 @@ void MyStyle::drawControl(QStyle::ControlElement element, const QStyleOption *op
+         if(ThemeController::widgetTheme() == ClassicTheme)
+             painter->drawRoundedRect(option->rect,0,0);
+         else
+-            painter->drawRoundedRect(option->rect,8,8);
++        {
++            int radius = ThemeController::getRadiusFromDT("kradius-menu");
++            if(radius == -1)
++                radius = 8;
++            painter->drawRoundedRect(option->rect,radius,radius);
++        }
+         break;
+     }
+     default:
+diff --git a/kysdk-qtwidgets/src/ksecuritylevelbar.cpp b/kysdk-qtwidgets/src/ksecuritylevelbar.cpp
+index d1170a8..69e3663 100644
+--- a/kysdk-qtwidgets/src/ksecuritylevelbar.cpp
++++ b/kysdk-qtwidgets/src/ksecuritylevelbar.cpp
+@@ -104,7 +104,8 @@ void KSecurityLevelBar::paintEvent(QPaintEvent *event)
+             painter.setBrush(QColor(243,34,45));
+             painter.drawRoundedRect(currentPos,(rect().height()-rectHeight)/2,rectWitdth,rectHeight,0,0);
+             currentPos = currentPos + d->m_space + rectWitdth;
+-            painter.setBrush(this->palette().color(QPalette::Button));
++//            painter.setBrush(this->palette().color(QPalette::Button));
++            painter.setBrush(ThemeController::getPaletteColorFromDT("button"));
+             painter.drawRoundedRect(currentPos,(rect().height()-rectHeight)/2,rectWitdth,rectHeight,0,0);
+             currentPos = currentPos + d->m_space + rectWitdth;
+             painter.drawRoundedRect(currentPos,(rect().height()-rectHeight)/2,rectWitdth,rectHeight,0,0);
+@@ -115,7 +116,8 @@ void KSecurityLevelBar::paintEvent(QPaintEvent *event)
+             currentPos = currentPos + d->m_space + rectWitdth;
+             painter.drawRoundedRect(currentPos,(rect().height()-rectHeight)/2,rectWitdth,rectHeight,0,0);
+             currentPos = currentPos + d->m_space + rectWitdth;
+-            painter.setBrush(this->palette().color(QPalette::Midlight));
++//            painter.setBrush(this->palette().color(QPalette::Midlight));
++            painter.setBrush(ThemeController::getPaletteColorFromDT("midlight"));
+             painter.drawRoundedRect(currentPos,(rect().height()-rectHeight)/2,rectWitdth,rectHeight,0,0);
+             break;
+         case High:
+@@ -138,7 +140,8 @@ void KSecurityLevelBar::paintEvent(QPaintEvent *event)
+             painter.setBrush(QColor(243,34,45));
+             painter.drawRoundedRect(currentPos,(rect().height()-rectHeight)/2,rectWitdth,rectHeight,rectHeight,rectHeight);
+             currentPos = currentPos + d->m_space + rectWitdth;
+-            painter.setBrush(this->palette().color(QPalette::Button));
++//            painter.setBrush(this->palette().color(QPalette::Button));
++            painter.setBrush(ThemeController::getPaletteColorFromDT("button"));
+             painter.drawRoundedRect(currentPos,(rect().height()-rectHeight)/2,rectWitdth,rectHeight,rectHeight,rectHeight);
+             currentPos = currentPos + d->m_space + rectWitdth;
+             painter.drawRoundedRect(currentPos,(rect().height()-rectHeight)/2,rectWitdth,rectHeight,rectHeight,rectHeight);
+@@ -149,7 +152,8 @@ void KSecurityLevelBar::paintEvent(QPaintEvent *event)
+             currentPos = currentPos + d->m_space + rectWitdth;
+             painter.drawRoundedRect(currentPos,(rect().height()-rectHeight)/2,rectWitdth,rectHeight,rectHeight,rectHeight);
+             currentPos = currentPos + d->m_space + rectWitdth;
+-            painter.setBrush(this->palette().color(QPalette::Button));
++//            painter.setBrush(this->palette().color(QPalette::Button));
++            painter.setBrush(ThemeController::getPaletteColorFromDT("button"));
+             painter.drawRoundedRect(currentPos,(rect().height()-rectHeight)/2,rectWitdth,rectHeight,rectHeight,rectHeight);
+             break;
+         case High:
+diff --git a/kysdk-qtwidgets/src/ksecurityquestiondialog.cpp b/kysdk-qtwidgets/src/ksecurityquestiondialog.cpp
+index a7f28f3..aea5216 100644
+--- a/kysdk-qtwidgets/src/ksecurityquestiondialog.cpp
++++ b/kysdk-qtwidgets/src/ksecurityquestiondialog.cpp
+@@ -130,7 +130,8 @@ void KSecurityQuestionDialog::addSecurityQuestionItem(const int count, bool mute
+             d->m_questionLineeditList.append(questionLineedit);
+             questionLineedit->setEnabled(false);
+             QPalette palette = questionLineedit->palette();
+-            QColor color = palette.color(QPalette::Active, QPalette::Text);
++//            QColor color = palette.color(QPalette::Active, QPalette::Text);
++            QColor color = ThemeController::getPaletteColorFromDT("text",QPalette::Active);
+             palette.setColor(QPalette::Disabled, QPalette::Text, color);
+             questionLineedit->setPalette(palette);
+             questionHlayout->addWidget(questionLineedit);
+diff --git a/kysdk-qtwidgets/src/kslider.cpp b/kysdk-qtwidgets/src/kslider.cpp
+index a8313eb..e5fb2d3 100644
+--- a/kysdk-qtwidgets/src/kslider.cpp
++++ b/kysdk-qtwidgets/src/kslider.cpp
+@@ -154,7 +154,8 @@ void KSliderPrivate::drawCoverNode(QPainter*painter)
+     Q_Q(KSlider);
+     painter->setRenderHint(QPainter::Antialiasing);
+     painter->setPen(Qt::NoPen);
+-    painter->setBrush(q->palette().color(QPalette::Highlight));
++//    painter->setBrush(q->palette().color(QPalette::Highlight));
++    painter->setBrush(ThemeController::getPaletteColorFromDT("highlight"));
+     int side = 0;
+     if( ThemeController::widgetTheme() == ClassicTheme )
+     {
+@@ -203,7 +204,8 @@ void KSliderPrivate::drawCoverNode(QPainter*painter)
+     else
+     {
+         painter->setPen(Qt::NoPen);
+-        painter->setBrush(q->palette().color(QPalette::Highlight));
++//        painter->setBrush(q->palette().color(QPalette::Highlight));
++        painter->setBrush(ThemeController::getPaletteColorFromDT("highlight"));
+         if(q->orientation() == Qt::Horizontal)
+         {
+             for(auto point : m_nodes)
+@@ -257,7 +259,8 @@ void KSliderPrivate::drawSlider(QPainter*painter)
+         painter->setRenderHint(QPainter::HighQualityAntialiasing,true);
+         painter->setRenderHint(QPainter::SmoothPixmapTransform,true);
+         painter->setRenderHint(QPainter::Antialiasing,true);
+-        painter->setPen(q->palette().highlight().color());
++//        painter->setPen(q->palette().highlight().color());
++        painter->setPen(ThemeController::getPaletteColorFromDT("highlight"));
+         double handle_radius =4;
+         QPainterPath path;
+         QPoint point;
+@@ -660,16 +663,20 @@ void KSliderPrivate::updateValue()
+ void KSliderPrivate::updateColor(QPalette palette)
+ {
+     Q_Q(KSlider);
+-    QColor highlightColor = palette.color(QPalette::Highlight);
+-    QColor mix=q->palette().color(QPalette::BrightText);
++//    QColor highlightColor = palette.color(QPalette::Highlight);
++    QColor highlightColor = ThemeController::getPaletteColorFromDT("highlight");
++//    QColor mix=q->palette().color(QPalette::BrightText);
++    QColor mix = ThemeController::getPaletteColorFromDT("brighttext");
+ 
+     if(m_isTranslucent)
+     {
+-        m_baseColor = palette.color(QPalette::BrightText);
++//        m_baseColor = palette.color(QPalette::BrightText);
++        m_baseColor = ThemeController::getPaletteColorFromDT("brighttext");
+         m_baseColor.setAlphaF(0.1);
+     }
+     else
+-        m_baseColor = palette.color(QPalette::Button);
++//        m_baseColor = palette.color(QPalette::Button);
++        m_baseColor = ThemeController::getPaletteColorFromDT("button");
+ 
+     if(ThemeController::widgetTheme() == ClassicTheme)
+     {
+@@ -681,7 +688,8 @@ void KSliderPrivate::updateColor(QPalette palette)
+                 m_startColor = ThemeController::lanhuHSLToQtHsl(0,0,98);
+                 return;
+             }
+-            m_coverColor = palette.highlight().color();
++//            m_coverColor = palette.highlight().color();
++            m_coverColor = ThemeController::getPaletteColorFromDT("highlight");
+             if(m_isPressed)
+             {
+                 m_startColor = ThemeController::highlightClick(false,palette);
+@@ -703,7 +711,8 @@ void KSliderPrivate::updateColor(QPalette palette)
+                 m_startColor = ThemeController::lanhuHSLToQtHsl(0, 0, 35);
+                 return;
+             }
+-            m_coverColor = palette.highlight().color();
++//            m_coverColor = palette.highlight().color();
++            m_coverColor = ThemeController::getPaletteColorFromDT("highlight");
+             if(m_isPressed)
+             {
+                 m_startColor = ThemeController::highlightClick(true,palette);
+@@ -722,8 +731,10 @@ void KSliderPrivate::updateColor(QPalette palette)
+     {
+         if(!q->isEnabled())
+         {
+-            m_coverColor = palette.color(QPalette::Disabled,QPalette::ButtonText);
+-            m_startColor = palette.color(QPalette::Disabled,QPalette::ButtonText);
++//            m_coverColor = palette.color(QPalette::Disabled,QPalette::ButtonText);
++            m_coverColor = ThemeController::getPaletteColorFromDT("buttontext");
++//            m_startColor = palette.color(QPalette::Disabled,QPalette::ButtonText);
++            m_startColor = ThemeController::getPaletteColorFromDT("buttontext");
+             return;
+         }
+         if(ThemeController::themeMode() == LightTheme)
+@@ -742,11 +753,16 @@ void KSliderPrivate::updateColor(QPalette palette)
+     //            m_coverColor = highlightColor.darker(120);//取消lineRect三态
+                 if(ThemeController::widgetTheme() == FashionTheme)
+                 {
+-                    m_startColor = ThemeController::mixColor(highlightColor,whiteColor,0.2);
+-                    m_endColor = ThemeController::mixColor(highlightColor,darkColor,0.05);
++                    QColor startColor;
++                    QColor endColor;
+ 
+-                    m_linearGradient.setColorAt(0,m_startColor);
+-                    m_linearGradient.setColorAt(1,m_endColor);
++                    ThemeController::getGradientFromDT("kbrand-hover",startColor,endColor);
++                    if(!startColor.isValid())
++                        startColor = ThemeController::mixColor(highlightColor,whiteColor,0.2);
++                    if(!endColor.isValid())
++                        endColor = ThemeController::mixColor(highlightColor,darkColor,0.05);
++                    m_linearGradient.setColorAt(0,startColor);
++                    m_linearGradient.setColorAt(1,endColor);
+                 }
+                 else
+                     m_startColor = highlightColor.darker(105);
+@@ -773,11 +789,17 @@ void KSliderPrivate::updateColor(QPalette palette)
+     //            m_coverColor = highlightColor.lighter(120);//取消lineRect三态
+                 if(ThemeController::widgetTheme() == FashionTheme)
+                 {
+-                     m_startColor = ThemeController::mixColor(highlightColor,whiteColor,0.2);
+-                     m_endColor = highlightColor;
++                    QColor startColor;
++                    QColor endColor;
+ 
+-                     m_linearGradient.setColorAt(0,m_startColor);
+-                     m_linearGradient.setColorAt(1,m_endColor);
++                    ThemeController::getGradientFromDT("kbrand-hover",startColor,endColor);
++                    if(!startColor.isValid())
++                        startColor = ThemeController::mixColor(highlightColor,whiteColor,0.2);
++                    if(!endColor.isValid())
++                        endColor = highlightColor;
++
++                     m_linearGradient.setColorAt(0,startColor);
++                     m_linearGradient.setColorAt(1,endColor);
+                 }
+                 else
+                     m_startColor = highlightColor.lighter(105);
+diff --git a/kysdk-qtwidgets/src/kswitchbutton.cpp b/kysdk-qtwidgets/src/kswitchbutton.cpp
+index de900d0..b58e26c 100644
+--- a/kysdk-qtwidgets/src/kswitchbutton.cpp
++++ b/kysdk-qtwidgets/src/kswitchbutton.cpp
+@@ -204,13 +204,15 @@ void KSwitchButtonPrivate::updateColor(const QStyleOptionButton& opt)
+     if(m_isTranslucent && !q->isChecked())//半透明效果
+     {
+         m_sliderColor = QColor("#FFFFFF");
+-        m_bkgStartColor = opt.palette.color(QPalette::BrightText);
++//        m_bkgStartColor = opt.palette.color(QPalette::BrightText);
++        m_bkgStartColor = ThemeController::getPaletteColorFromDT("brighttext");
+ 
+         if(ThemeController::themeMode() == LightTheme) //浅色模式
+         {
+             if(!opt.state.testFlag(QStyle::State_Enabled)) //disable
+             {
+-                m_sliderColor = opt.palette.color(QPalette::BrightText);
++//                m_sliderColor = opt.palette.color(QPalette::BrightText);
++                m_sliderColor = ThemeController::getPaletteColorFromDT("brighttext");
+                 m_sliderColor.setAlphaF(0.16);
+                 m_bkgStartColor.setAlphaF(0.1);
+                 return;
+@@ -234,7 +236,8 @@ void KSwitchButtonPrivate::updateColor(const QStyleOptionButton& opt)
+         {
+             if(!opt.state.testFlag(QStyle::State_Enabled)) //disable
+             {
+-                m_sliderColor = opt.palette.color(QPalette::BrightText);
++//                m_sliderColor = opt.palette.color(QPalette::BrightText);
++                m_sliderColor = ThemeController::getPaletteColorFromDT("bighttext");
+                 m_sliderColor.setAlphaF(0.2);
+                 m_bkgStartColor.setAlphaF(0.1);
+                 return;
+@@ -259,14 +262,18 @@ void KSwitchButtonPrivate::updateColor(const QStyleOptionButton& opt)
+     {
+         if(!opt.state.testFlag(QStyle::State_Enabled))
+         {
+-            m_sliderColor = opt.palette.color(QPalette::Disabled,QPalette::ButtonText);
+-            m_bkgStartColor = opt.palette.color(QPalette::Disabled,QPalette::Button);
++//            m_sliderColor = opt.palette.color(QPalette::Disabled,QPalette::ButtonText);
++            m_sliderColor = ThemeController::getPaletteColorFromDT("buttontext",QPalette::Disabled);
++//            m_bkgStartColor = opt.palette.color(QPalette::Disabled,QPalette::Button);
++            m_bkgStartColor = ThemeController::getPaletteColorFromDT("button",QPalette::Disabled);
+             return;
+         }
+-        QColor mix = opt.palette.brightText().color();
++//        QColor mix = opt.palette.brightText().color();
++        QColor mix = ThemeController::getPaletteColorFromDT("brighttext");
+         m_sliderColor = QColor("#FFFFFF");
+         if(q->isChecked())
+-            m_bkgStartColor = opt.palette.highlight().color();
++//            m_bkgStartColor = opt.palette.highlight().color();
++            m_bkgStartColor = ThemeController::getPaletteColorFromDT("highlight");
+         else
+         {
+             if(ThemeController::widgetTheme() == ClassicTheme)
+@@ -281,7 +288,8 @@ void KSwitchButtonPrivate::updateColor(const QStyleOptionButton& opt)
+                 }
+             }
+             else
+-                m_bkgStartColor = opt.palette.button().color();
++//                m_bkgStartColor = opt.palette.button().color();
++                m_bkgStartColor = ThemeController::getPaletteColorFromDT("button");
+         }
+ 
+         if(opt.state.testFlag(QStyle::State_MouseOver))
+@@ -317,24 +325,43 @@ void KSwitchButtonPrivate::updateColor(const QStyleOptionButton& opt)
+                     {
+                         if(q->isChecked())//开启
+                         {
+-                            QColor startColor = opt.palette.color(QPalette::Highlight);
++//                            QColor startColor = opt.palette.color(QPalette::Highlight);
++                            QColor startColor = ThemeController::getPaletteColorFromDT("highlight");
+                             QColor startLightColor("#E6E6E6");
+                             QColor endLightColor("#000000");
+-                            m_bkgStartColor = ThemeController::mixColor(startColor,startLightColor,0.2);
+-                            m_bkgEndColor  = ThemeController::mixColor(startColor,endLightColor,0.05);
+ 
+-                            m_linearGradient.setColorAt(0,m_bkgStartColor);
+-                            m_linearGradient.setColorAt(1,m_bkgEndColor);
++//                            m_linearGradient.setColorAt(0,m_bkgStartColor);
++//                            m_linearGradient.setColorAt(1,m_bkgEndColor);
++
++                            QColor startcolor;
++                            QColor endcolor;
++                            ThemeController::getGradientFromDT("kbrand-hover",startcolor,endcolor);
++                            if(!startColor.isValid())
++                                startColor = ThemeController::mixColor(startColor,startLightColor,0.2);
++                            if(!endcolor.isValid())
++                                endcolor = ThemeController::mixColor(startColor,endLightColor,0.05);
++
++                            m_linearGradient.setColorAt(0,startColor);
++                            m_linearGradient.setColorAt(1,endcolor);
+                         }
+                         else //关闭
+                         {
+                             QColor startColor("#E6E6E6");
+                             QColor startLightColor("#000000 ");
+-                            m_bkgStartColor = ThemeController::mixColor(startColor,startLightColor,0.05);
+-                            m_bkgEndColor  = ThemeController::mixColor(startColor,startLightColor,0.2);
+ 
+-                            m_linearGradient.setColorAt(0,m_bkgStartColor);
+-                            m_linearGradient.setColorAt(1,m_bkgEndColor);
++//                            m_linearGradient.setColorAt(0,m_bkgStartColor);
++//                            m_linearGradient.setColorAt(1,m_bkgEndColor);
++
++                            QColor startcolor;
++                            QColor endcolor;
++                            ThemeController::getGradientFromDT("kcomponent-hover",startcolor,endcolor);
++                            if(!startColor.isValid())
++                                startColor = ThemeController::mixColor(startColor,startLightColor,0.05);
++                            if(!endcolor.isValid())
++                                endcolor = ThemeController::mixColor(startColor,startLightColor,0.2);
++
++                            m_linearGradient.setColorAt(0,startColor);
++                            m_linearGradient.setColorAt(1,endcolor);
+                         }
+ 
+                     }
+@@ -364,10 +391,19 @@ void KSwitchButtonPrivate::updateColor(const QStyleOptionButton& opt)
+                     {
+                         if(q->isChecked())//开启
+                         {
+-                            QColor startColor = opt.palette.color(QPalette::Highlight);
++//                            QColor startColor = opt.palette.color(QPalette::Highlight);
++                            QColor startColor = ThemeController::getPaletteColorFromDT("highlight");
+                             QColor startDarkColor("#FFFFFF");
+-                            m_bkgStartColor = ThemeController::mixColor(startColor,startDarkColor,0.2);
+-                            m_bkgEndColor  = startColor;
++//                            m_bkgStartColor =
++//                            m_bkgEndColor  = ;
++
++                            QColor startcolor;
++                            QColor endcolor;
++                            ThemeController::getGradientFromDT("kcomponent-hover",startcolor,endcolor);
++                            if(!startColor.isValid())
++                                startColor = ThemeController::mixColor(startColor,startDarkColor,0.2);
++                            if(!endcolor.isValid())
++                                endcolor = startColor;
+ 
+                             m_linearGradient.setColorAt(0,m_bkgStartColor);
+                             m_linearGradient.setColorAt(1,m_bkgEndColor);
+@@ -376,11 +412,19 @@ void KSwitchButtonPrivate::updateColor(const QStyleOptionButton& opt)
+                         {
+                             QColor startColor("#373737");
+                             QColor startDarkColor("#FFFFFF");
+-                            m_bkgStartColor = ThemeController::mixColor(startColor,startDarkColor,0.2);
+-                            m_bkgEndColor  = ThemeController::mixColor(startColor,startDarkColor,0.05);
+-
+-                            m_linearGradient.setColorAt(0,m_bkgStartColor);
+-                            m_linearGradient.setColorAt(1,m_bkgEndColor);
++//                            m_bkgStartColor = ThemeController::mixColor(startColor,startDarkColor,0.2);
++//                            m_bkgEndColor  = ThemeController::mixColor(startColor,startDarkColor,0.05);
++
++//                            m_linearGradient.setColorAt(0,m_bkgStartColor);
++//                            m_linearGradient.setColorAt(1,m_bkgEndColor);
++
++                            QColor startcolor;
++                            QColor endcolor;
++                            ThemeController::getGradientFromDT("kbrand-hover",startcolor,endcolor);
++                            if(!startColor.isValid())
++                                startColor = ThemeController::mixColor(startColor,startDarkColor,0.2);
++                            if(!endcolor.isValid())
++                                endcolor = ThemeController::mixColor(startColor,startDarkColor,0.05);
+                         }
+ 
+                     }
+diff --git a/kysdk-qtwidgets/src/ktabbar.cpp b/kysdk-qtwidgets/src/ktabbar.cpp
+index da2299a..5fe1eec 100644
+--- a/kysdk-qtwidgets/src/ktabbar.cpp
++++ b/kysdk-qtwidgets/src/ktabbar.cpp
+@@ -70,7 +70,7 @@ protected:
+ private:
+     KTabBar *q_ptr;
+     KTabBarStyle m_kTabBarStyle;
+-    int m_borderRadius = 6;
++    int m_borderRadius;
+     int m_horizontalMargin = 1;
+     int m_topMargin = 0;
+     QColor m_bkgrdColor;
+@@ -85,7 +85,9 @@ KTabBar::KTabBar(KTabBarStyle barStyle,QWidget* parent):
+     d_ptr(new KTabBarPrivate(this))
+ {
+     Q_D(KTabBar);
+-    d->m_borderRadius = 6;
++    d->m_borderRadius = ThemeController::getRadiusFromDT("kradius-normal");
++    if(d->m_borderRadius == -1)
++        d->m_borderRadius = 6;
+     d->m_kTabBarStyle = barStyle;
+     d->m_useCustomColor = false;
+ 
+@@ -192,8 +194,10 @@ void KTabBar::paintEvent(QPaintEvent *event)
+         {
+         case SegmentDark:
+         {
+-            mix = option.palette.brightText().color();
+-            fontColor = option.palette.buttonText().color();
++//            mix = option.palette.brightText().color();
++            mix = ThemeController::getPaletteColorFromDT("brighttext");
++//            fontColor = option.palette.buttonText().color();
++            fontColor = ThemeController::getPaletteColorFromDT("buttontext");
+             QColor bkgrdColor = d->m_bkgrdColor;
+             if(ThemeController::widgetTheme() == ClassicTheme)
+             {
+@@ -258,7 +262,8 @@ void KTabBar::paintEvent(QPaintEvent *event)
+             {
+                 if(option.state.testFlag(QStyle::State_Selected))
+                 {
+-                    bkgrdColor = option.palette.highlight().color();
++//                    bkgrdColor = option.palette.highlight().color();
++                    bkgrdColor = ThemeController::getPaletteColorFromDT("highlight");
+                     fontColor = QColor("#FFFFFF");
+                 }
+                 else if(option.state.testFlag(QStyle::State_MouseOver))
+@@ -612,8 +617,10 @@ void KTabBar::paintEvent(QPaintEvent *event)
+         }
+         case SegmentLight:
+         {
+-            mix = option.palette.brightText().color();
+-            fontColor = option.palette.buttonText().color();
++//            mix = option.palette.brightText().color();
++            mix = ThemeController::getPaletteColorFromDT("brighttext");
++//            fontColor = option.palette.buttonText().color();
++            fontColor = ThemeController::getPaletteColorFromDT("buttontext");
+             QColor bkgrdColor = d->m_bkgrdColor;
+             if(ThemeController::widgetTheme() == ClassicTheme)
+             {
+@@ -678,12 +685,16 @@ void KTabBar::paintEvent(QPaintEvent *event)
+             {
+                 if(option.state.testFlag(QStyle::State_Selected))
+                 {
+-                    bkgrdColor = option.palette.highlight().color();
++//                    bkgrdColor = option.palette.highlight().color();
++                    bkgrdColor = ThemeController::getPaletteColorFromDT("highlight");
+                     fontColor = QColor("#FFFFFF");
+                 }
+                 else if(option.state.testFlag(QStyle::State_MouseOver))
+                 {
+-                     bkgrdColor = ThemeController::mixColor(bkgrdColor,mix,0.05);
++                    if(ThemeController::themeMode() == LightTheme)
++                        bkgrdColor = ThemeController::mixColor(bkgrdColor,mix,0.05);
++                    else
++                        bkgrdColor = ThemeController::mixColor(bkgrdColor,mix,0.10);
+                 }
+             }
+             p.save();
+@@ -778,8 +789,10 @@ void KTabBar::paintEvent(QPaintEvent *event)
+         }
+         case Sliding:
+         {
+-            mix = option.palette.brightText().color();
+-            fontColor = option.palette.buttonText().color();
++//            mix = option.palette.brightText().color();
++            mix = ThemeController::getPaletteColorFromDT("brighttext");
++//            fontColor = option.palette.buttonText().color();
++            fontColor = ThemeController::getPaletteColorFromDT("buttontext");
+             QColor bkgrdColor = d->m_bkgrdColor;
+             if(ThemeController::widgetTheme() == ClassicTheme)
+             {
+@@ -826,8 +839,10 @@ void KTabBar::paintEvent(QPaintEvent *event)
+             {
+                 if(option.state.testFlag(QStyle::State_Selected))
+                 {
+-                    bkgrdColor = option.palette.highlight().color();
+-                    fontColor = option.palette.highlight().color();
++//                    bkgrdColor = option.palette.highlight().color();
++                    bkgrdColor = ThemeController::getPaletteColorFromDT("highlight");
++//                    fontColor = option.palette.highlight().color();
++                    fontColor = ThemeController::getPaletteColorFromDT("highlight");
+                 }
+                 else if(option.state.testFlag(QStyle::State_MouseOver))
+                 {
+@@ -852,7 +867,8 @@ void KTabBar::paintEvent(QPaintEvent *event)
+                 p.save();
+                 QPen pen;
+                 pen.setWidth(2);
+-                pen.setColor(option.palette.highlight().color());
++//                pen.setColor(option.palette.highlight().color());
++                pen.setColor(ThemeController::getPaletteColorFromDT("highlight"));
+                 p.setPen(pen);
+                 p.drawLine(QPoint(left_border, rect.height()-1),QPoint(left_border + d->m_nextTabWidth, rect.height()-1));
+                 p.restore();
+@@ -961,7 +977,8 @@ void KTabBarPrivate::changeTheme()
+         if(m_useCustomColor)
+             return;
+         else
+-            m_bkgrdColor = q->palette().button().color();
++//            m_bkgrdColor = q->palette().button().color();
++            m_bkgrdColor = ThemeController::getPaletteColorFromDT("button");
+         break;
+     }
+     case SegmentLight:
+@@ -976,7 +993,8 @@ void KTabBarPrivate::changeTheme()
+         if(m_useCustomColor)
+             return;
+         else
+-            m_bkgrdColor = q->palette().button().color();
++//            m_bkgrdColor = q->palette().button().color();
++            m_bkgrdColor = ThemeController::getPaletteColorFromDT("button");
+         break;
+     default:
+         break;
+diff --git a/kysdk-qtwidgets/src/ktableview.cpp b/kysdk-qtwidgets/src/ktableview.cpp
+index 8e2d98e..638465d 100644
+--- a/kysdk-qtwidgets/src/ktableview.cpp
++++ b/kysdk-qtwidgets/src/ktableview.cpp
+@@ -247,7 +247,7 @@ void TableDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option,
+     else
+     {
+         if(option.state.testFlag(QStyle::State_Selected))
+-            painter->fillRect(option.rect,pale.highlight().color());
++            painter->fillRect(option.rect,/*pale.highlight().color()*/ThemeController::getPaletteColorFromDT("highlight"));
+         else
+         {
+             painter->fillRect(option.rect,bkgColor);
+@@ -256,7 +256,8 @@ void TableDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option,
+         painter->drawRect(option.rect);
+     }
+ 
+-    painter->setPen(pale.windowText().color());
++//    painter->setPen(pale.windowText().color());
++    painter->setPen(ThemeController::getPaletteColorFromDT("windowtext"));
+     if(index.column() == 0)
+     {
+         QRect rect = option.rect;
+diff --git a/kysdk-qtwidgets/src/ktag.cpp b/kysdk-qtwidgets/src/ktag.cpp
+index 08e5e8a..5976483 100644
+--- a/kysdk-qtwidgets/src/ktag.cpp
++++ b/kysdk-qtwidgets/src/ktag.cpp
+@@ -137,23 +137,29 @@ void KTag::paintEvent(QPaintEvent *event)
+     QStyleOptionButton option;
+     initStyleOption(&option);
+     QColor bkgColor;
+-    QColor highColor = palette().highlight().color();
++//    QColor highColor = palette().highlight().color();
++    QColor highColor = ThemeController::getPaletteColorFromDT("highlight");
+     QColor iconColor;
+     QColor fontColor;
+     QRect iconRect;
+     QRect textRect;
+     if(!option.state.testFlag(QStyle::State_Enabled))
+     {
+-        bkgColor = palette().color(QPalette::Disabled,QPalette::Button);
+-        iconColor = palette().color(QPalette::Disabled,QPalette::HighlightedText);
+-        fontColor = palette().color(QPalette::Disabled,QPalette::HighlightedText);
++//        bkgColor = palette().color(QPalette::Disabled,QPalette::Button);
++        bkgColor = ThemeController::getPaletteColorFromDT("button",QPalette::Disabled);
++//        iconColor = palette().color(QPalette::Disabled,QPalette::HighlightedText);
++        iconColor = ThemeController::getPaletteColorFromDT("highlightedtext");
++//        fontColor = palette().color(QPalette::Disabled,QPalette::HighlightedText);
++        fontColor = ThemeController::getPaletteColorFromDT("highlightedtext");
+     }
+     else
+     {
+         if(d->m_isTranslucent || d->m_isBackgroundFlag)
+         {
+-            iconColor = palette().highlight().color();
+-            fontColor = palette().highlight().color();
++//            iconColor = palette().highlight().color();
++            iconColor = ThemeController::getPaletteColorFromDT("highlight");
++//            fontColor = palette().highlight().color();
++            fontColor = ThemeController::getPaletteColorFromDT("highlight");
+         }
+         else
+         {
+@@ -171,14 +177,16 @@ void KTag::paintEvent(QPaintEvent *event)
+                     if(d->m_isTranslucent)
+                         bkgColor.setAlphaF(0.45);
+                     else
+-                        bkgColor = ThemeController::mixColor(bkgColor,option.palette.brightText().color(),0.2);
++//                        bkgColor = ThemeController::mixColor(bkgColor,option.palette.brightText().color(),0.2);
++                        bkgColor = ThemeController::mixColor(bkgColor,ThemeController::getPaletteColorFromDT("brighttext"),0.2);
+                 }
+                 else
+                 {
+                     if(d->m_isTranslucent)
+                         bkgColor.setAlphaF(0.3);
+                     else
+-                        bkgColor = ThemeController::mixColor(bkgColor,option.palette.brightText().color(),0.05);
++//                        bkgColor = ThemeController::mixColor(bkgColor,option.palette.brightText().color(),0.05);
++                        bkgColor = ThemeController::mixColor(bkgColor,ThemeController::getPaletteColorFromDT("brighttext"),0.05);
+                 }
+             }
+             else
+@@ -265,7 +273,8 @@ void KTag::paintEvent(QPaintEvent *event)
+     {
+         d->m_pDeleteBtn->hide();
+     }
+-    QColor color = palette().color(QPalette::Highlight);
++//    QColor color = palette().color(QPalette::Highlight);
++    QColor color = ThemeController::getPaletteColorFromDT("highlight");
+     switch (d->m_style)
+     {
+     case HighlightTag:
+@@ -283,7 +292,10 @@ void KTag::paintEvent(QPaintEvent *event)
+         {
+             painter.setBrush(color);
+             painter.setPen(Qt::PenStyle::NoPen);
+-            painter.drawRoundedRect(this->rect(),6,6);
++            int radius = ThemeController::getRadiusFromDT("kradius-normal");
++            if(radius == -1)
++                radius = 6;
++            painter.drawRoundedRect(this->rect(),radius,radius);
+             painter.setPen(QColor("#FFFFFF"));
+             painter.drawText(rect,Qt::AlignCenter,d->m_text);
+         }
+@@ -292,9 +304,16 @@ void KTag::paintEvent(QPaintEvent *event)
+         painter.setBrush(QColor(Qt::transparent));
+         painter.setPen(color);
+         if(ThemeController::widgetTheme() == ClassicTheme)
++        {
+             painter.drawRoundedRect(this->rect(),0,0);
++        }
+         else
+-            painter.drawRoundedRect(this->rect(),6,6);
++        {
++            int radius = ThemeController::getRadiusFromDT("kradius-normal");
++            if(radius == -1)
++                radius = 6;
++            painter.drawRoundedRect(this->rect(),radius,radius);
++        }
+         painter.drawText(rect,Qt::AlignCenter,d->m_text);
+         break;
+     case BaseBoderTag:
+@@ -304,9 +323,16 @@ void KTag::paintEvent(QPaintEvent *event)
+             painter.setBrush(backColor);
+             painter.setPen(color);
+             if(ThemeController::widgetTheme() == ClassicTheme)
++            {
+                 painter.drawRoundedRect(this->rect(),0,0);
++            }
+             else
+-                painter.drawRoundedRect(this->rect(),6,6);
++            {
++                int radius = ThemeController::getRadiusFromDT("kradius-normal");
++                if(radius == -1)
++                    radius = 6;
++                painter.drawRoundedRect(this->rect(),radius,radius);
++            }
+             painter.drawText(rect,Qt::AlignCenter,d->m_text);
+             break;
+         }
+@@ -322,9 +348,14 @@ void KTag::paintEvent(QPaintEvent *event)
+         else
+         {
+             painter.setPen(Qt::PenStyle::NoPen);
+-            painter.setBrush(this->palette().color(QPalette::Disabled,QPalette::Highlight));
+-            painter.drawRoundedRect(this->rect(),6,6);
+-            painter.setPen(this->palette().color(QPalette::Text));
++//            painter.setBrush(this->palette().color(QPalette::Disabled,QPalette::Highlight));
++            painter.setBrush(ThemeController::getPaletteColorFromDT("highlight"));
++            int radius = ThemeController::getRadiusFromDT("kradius-normal");
++            if(radius == -1)
++                radius = 6;
++            painter.drawRoundedRect(this->rect(),radius,radius);
++//            painter.setPen(this->palette().color(QPalette::Text));
++            painter.setPen(ThemeController::getPaletteColorFromDT("text"));
+             painter.drawText(rect,Qt::AlignCenter,d->m_text);
+         }
+         break;
+@@ -333,7 +364,10 @@ void KTag::paintEvent(QPaintEvent *event)
+         QPixmap pixmap = option.icon.pixmap(option.iconSize);
+         painter.setPen(Qt::NoPen);
+         painter.setBrush(bkgColor);
+-        painter.drawRoundedRect(this->rect(),6,6);
++        int radius = ThemeController::getRadiusFromDT("kradius-normal");
++        if(radius == -1)
++            radius = 6;
++        painter.drawRoundedRect(this->rect(),radius,radius);
+         painter.drawPixmap(iconRect,ThemeController::drawColoredPixmap(pixmap,iconColor));
+         painter.setPen(fontColor);
+         if(fontMetrics().width(d->m_text) > textRect.width())
+@@ -410,13 +444,16 @@ void KTagPrivate::updateDeleteBtnColor()
+         m_pDeleteBtn->setIcon(drawColoredPixmap(icon.pixmap(size),QColor("#FFFFFF")));
+         break;
+     case BoderTag:
+-        m_pDeleteBtn->setIcon(drawColoredPixmap(icon.pixmap(size),palette.color(QPalette::Text)));
++//        m_pDeleteBtn->setIcon(drawColoredPixmap(icon.pixmap(size),palette.color(QPalette::Text)));
++        m_pDeleteBtn->setIcon(drawColoredPixmap(icon.pixmap(size),ThemeController::getPaletteColorFromDT("text")));
+         break;
+     case BaseBoderTag:
+-        m_pDeleteBtn->setIcon(drawColoredPixmap(icon.pixmap(size),palette.color(QPalette::Text)));
++//        m_pDeleteBtn->setIcon(drawColoredPixmap(icon.pixmap(size),palette.color(QPalette::Text)));
++        m_pDeleteBtn->setIcon(drawColoredPixmap(icon.pixmap(size),ThemeController::getPaletteColorFromDT("text")));
+         break;
+     case GrayTag:
+-        m_pDeleteBtn->setIcon(drawColoredPixmap(icon.pixmap(size),palette.color(QPalette::Text)));
++//        m_pDeleteBtn->setIcon(drawColoredPixmap(icon.pixmap(size),palette.color(QPalette::Text)));
++        m_pDeleteBtn->setIcon(drawColoredPixmap(icon.pixmap(size),ThemeController::getPaletteColorFromDT("text")));
+         break;
+     case IconTag:
+         if(m_isTranslucent || m_isBackgroundFlag)
+diff --git a/kysdk-qtwidgets/src/ktextedit.cpp b/kysdk-qtwidgets/src/ktextedit.cpp
+index 2290d37..83bf078 100644
+--- a/kysdk-qtwidgets/src/ktextedit.cpp
++++ b/kysdk-qtwidgets/src/ktextedit.cpp
+@@ -91,7 +91,8 @@ void KTextEdit::setReadOnly(bool ro)
+     if(isReadOnly())
+     {
+         QPalette pale = palette();
+-        pale.setColor(QPalette::Base,pale.highlight().color());
++//        pale.setColor(QPalette::Base,pale.highlight().color());
++        pale.setColor(QPalette::Base,ThemeController::getPaletteColorFromDT("highlight"));
+         pale.setColor(QPalette::Text,Qt::white);
+         setPalette(pale);
+         d->m_pLabel->setBackgroundColor(true,Qt::white);
+diff --git a/kysdk-qtwidgets/src/ktexteditor.cpp b/kysdk-qtwidgets/src/ktexteditor.cpp
+index 9dfdcd3..101d743 100644
+--- a/kysdk-qtwidgets/src/ktexteditor.cpp
++++ b/kysdk-qtwidgets/src/ktexteditor.cpp
+@@ -49,24 +49,30 @@ void KTextEditor::paintEvent(QPaintEvent *event)
+     Q_D(KTextEditor);
+     QPainter painter(this);
+     painter.setRenderHint(QPainter::Antialiasing);
+-    painter.fillRect(this->rect(), palette().window().color());
++//    painter.fillRect(this->rect(), palette().window().color());
++    painter.fillRect(this->rect(),ThemeController::getPaletteColorFromDT("window"));
+     QPen pen;
+     pen.setWidth(2);
+-    qDebug()<< d->m_pTextEdit->hasFocus()<<d->m_pScrollArea->hasFocus() << hasFocus() <<d->m_focus;
+     if(d->m_focus)
+     {
+-        pen.setColor(palette().highlight().color());
++//        pen.setColor(palette().highlight().color());
++        pen.setColor(ThemeController::getPaletteColorFromDT("highlight"));
+         painter.setPen(pen);
+     }
+     else
+     {
+-        pen.setColor(palette().placeholderText().color());
++//        pen.setColor(palette().placeholderText().color());
++        pen.setColor(ThemeController::getPaletteColorFromDT("placeholdertext"));
+         painter.setPen(pen);
+     }
+ 
+-    painter.setBrush(palette().base().color());
++//    painter.setBrush(palette().base().color());
++    painter.setBrush(ThemeController::getPaletteColorFromDT("base"));
+     QRect rect = this->rect().adjusted(1, 1, -1, -1);
+-    painter.drawRoundedRect(rect, 8, 8);
++    int radius = ThemeController::getRadiusFromDT("kradius-menu");
++    if(radius == -1)
++        radius = 8;
++    painter.drawRoundedRect(rect, radius, radius);
+ }
+ 
+ bool KTextEditor::eventFilter(QObject *watched, QEvent *event)
+@@ -76,14 +82,11 @@ bool KTextEditor::eventFilter(QObject *watched, QEvent *event)
+     {
+         switch (event->type())
+         {
+-        qDebug()<<event->type();
+         case QEvent::FocusIn:
+-            qDebug()<<"focus in";
+             d->m_focus = true;
+             update();
+             break;
+         case QEvent::FocusOut:
+-            qDebug()<<"focus out";
+             d->m_focus = false;
+             update();
+             break;
+@@ -96,14 +99,11 @@ bool KTextEditor::eventFilter(QObject *watched, QEvent *event)
+     {
+         switch (event->type())
+         {
+-        qDebug()<<event->type();
+         case QEvent::FocusIn:
+-            qDebug()<<"focus in";
+             d->m_focus = true;
+             update();
+             break;
+         case QEvent::FocusOut:
+-            qDebug()<<"focus out";
+             d->m_focus = false;
+             update();
+             break;
+diff --git a/kysdk-qtwidgets/src/ktitlewindow.cpp b/kysdk-qtwidgets/src/ktitlewindow.cpp
+index e035d69..ca7bd6d 100644
+--- a/kysdk-qtwidgets/src/ktitlewindow.cpp
++++ b/kysdk-qtwidgets/src/ktitlewindow.cpp
+@@ -123,8 +123,12 @@ void KTitleWindow::paintEvent(QPaintEvent *event)
+     painter.setRenderHint(QPainter::TextAntialiasing);
+     painter.setRenderHint(QPainter::SmoothPixmapTransform);
+     painter.setPen(Qt::NoPen);
+-    painter.setBrush(palette().base().color());
+-    painter.drawRoundedRect(this->rect(),12,12);
++//    painter.setBrush(palette().base().color());
++    painter.setBrush(ThemeController::getPaletteColorFromDT("base"));
++    int radius = ThemeController::getRadiusFromDT("kradius-window");
++    if(radius == -1)
++        radius = 12;
++    painter.drawRoundedRect(this->rect(),radius,radius);
+ 
+     d->m_pAddBtn->setIconColor(d->m_titleColor);
+     d->m_pColorBtn->setIcon(ThemeController::drawColoredPixmap(d->m_pColorBtn->icon().pixmap(24,24),Qt::white));
+@@ -192,7 +196,8 @@ KTitleWindowPrivate::KTitleWindowPrivate(KTitleWindow *parent)
+     :q_ptr(parent)
+ {
+     Q_Q(KTitleWindow);
+-    m_titleColor = q->palette().highlight().color();
++//    m_titleColor = q->palette().highlight().color();
++    m_titleColor = ThemeController::getPaletteColorFromDT("highlight");
+     m_pTitleWidget = new QWidget(q);
+     m_pTitleWidget->setAttribute(Qt::WA_TranslucentBackground,true);
+     m_pTitleWidget->setContentsMargins(0,0,0,0);
+diff --git a/kysdk-qtwidgets/src/ktoolbar.cpp b/kysdk-qtwidgets/src/ktoolbar.cpp
+index 32056d7..f77cc4c 100644
+--- a/kysdk-qtwidgets/src/ktoolbar.cpp
++++ b/kysdk-qtwidgets/src/ktoolbar.cpp
+@@ -259,7 +259,8 @@ void KToolBar::paintEvent(QPaintEvent *event)
+     QPainter painter(this);
+     painter.setRenderHint(QPainter::Antialiasing);
+     if(d->m_isBkgColorEnable)
+-        painter.setBrush(palette().button().color());
++//        painter.setBrush(palette().button().color());
++        painter.setBrush(ThemeController::getPaletteColorFromDT("button"));
+     else
+         painter.setBrush(Qt::transparent);
+     painter.setPen(Qt::NoPen);
+@@ -281,7 +282,9 @@ void KToolBarPrivate::init()
+     m_pLayout->setMargin(0);
+     m_pLayout->setSpacing(0);
+     m_pLayout->setDirection(QBoxLayout::LeftToRight);
+-    m_radius = 6;
++    m_radius = ThemeController::getRadiusFromDT("kradius-normal");
++    if(m_radius == -1)
++        m_radius = 6;
+     m_exclusive = false;
+     m_isCheckable = false;
+     m_isLineVisible = false;
+diff --git a/kysdk-qtwidgets/src/ktoolbutton.cpp b/kysdk-qtwidgets/src/ktoolbutton.cpp
+index ac6eb73..0d42f34 100755
+--- a/kysdk-qtwidgets/src/ktoolbutton.cpp
++++ b/kysdk-qtwidgets/src/ktoolbutton.cpp
+@@ -82,10 +82,21 @@ KToolButton::KToolButton(QWidget *parent)
+     d->m_pTimer->setInterval(100);
+     d->m_flashState = 0;
+     d->m_isLoading = false;
+-    d->m_bottomLeftRadius = 6;
+-    d->m_topLeftRadius = 6;
+-    d->m_topRightRadius = 6;
+-    d->m_bottomRightRadius = 6;
++    int radius = ThemeController::getRadiusFromDT("kradius-normal");
++    if(radius == -1)
++    {
++        d->m_bottomLeftRadius = 6;
++        d->m_topLeftRadius = 6;
++        d->m_topRightRadius = 6;
++        d->m_bottomRightRadius = 6;
++    }
++    else
++    {
++        d->m_bottomLeftRadius = radius;
++        d->m_topLeftRadius = radius;
++        d->m_topRightRadius = radius;
++        d->m_bottomRightRadius = radius;
++    }
+     d->m_isBkgColorEnable = false;
+     setType(Flat);
+     installEventFilter(this);
+@@ -193,7 +204,8 @@ bool KToolButton::backgroundColorEnabled()
+ bool KToolButton::eventFilter(QObject *watched, QEvent *event)
+ {
+     Q_D(KToolButton);
+-    QColor highlightColor = this->palette().color(QPalette::Highlight);
++//    QColor highlightColor = this->palette().color(QPalette::Highlight);
++    QColor highlightColor = ThemeController::getPaletteColorFromDT("highlight");
+     if(watched == this)
+     {
+         //根据不同状态重绘icon颜色
+@@ -314,7 +326,8 @@ void KToolButton::paintEvent(QPaintEvent *event)
+     d->m_arrowPixmap = QIcon::fromTheme("ukui-down-symbolic").pixmap(option.iconSize);
+ 
+     QPen pen;
+-    QColor color = palette().color(QPalette::Highlight);
++//    QColor color = palette().color(QPalette::Highlight);
++    QColor color = ThemeController::getPaletteColorFromDT("highlight");
+     pen.setColor(color);
+     pen.setWidth(2);
+     if( ( (QStyle::State_HasFocus & option.state) && isEnabled() && !isLoading() &&(this->focusPolicy() != Qt::FocusPolicy::NoFocus) )&& d->m_type != Frameless)
+@@ -436,7 +449,8 @@ void KToolButton::paintEvent(QPaintEvent *event)
+                     color = ThemeController::lanhuHSLToQtHsl(0,0,85);
+                     pen.setColor(color);
+                     painter.setPen(pen);
+-                    painter.setBrush(palette().color(QPalette::Inactive,QPalette::Button));
++//                    painter.setBrush(palette().color(QPalette::Inactive,QPalette::Button));
++                    painter.setBrush(ThemeController::getPaletteColorFromDT("button",QPalette::Inactive));
+                 }
+             }
+             else
+@@ -444,7 +458,8 @@ void KToolButton::paintEvent(QPaintEvent *event)
+                 color = ThemeController::lanhuHSLToQtHsl(0,0,85);
+                 pen.setColor(color);
+                 painter.setPen(pen);
+-                painter.setBrush(palette().color(QPalette::Inactive,QPalette::Button));
++//                painter.setBrush(palette().color(QPalette::Inactive,QPalette::Button));
++                painter.setBrush(ThemeController::getPaletteColorFromDT("button",QPalette::Inactive));
+             }
+         }
+         default:
+@@ -486,7 +501,8 @@ void KToolButton::paintEvent(QPaintEvent *event)
+         if(isEnabled())
+             pixmap = ThemeController::drawColoredPixmap(pixmap,d->m_iconColor);
+         else
+-            pixmap = ThemeController::drawColoredPixmap(pixmap,palette().color(QPalette::Disabled,QPalette::HighlightedText));
++//            pixmap = ThemeController::drawColoredPixmap(pixmap,palette().color(QPalette::Disabled,QPalette::HighlightedText));
++            pixmap = ThemeController::drawColoredPixmap(pixmap,ThemeController::getPaletteColorFromDT("highlightedtext",QPalette::Disabled));
+     }
+ 
+     if(!hasArrow())
+@@ -549,14 +565,17 @@ void KToolButtonPrivate::changePalette()
+             m_clickColor = Qt::transparent;
+             m_focusColor = Qt::transparent;
+             m_hoverColor = Qt::transparent;
+-            m_disableColor = q->palette().color(QPalette::Disabled,QPalette::Button);
++//            m_disableColor = q->palette().color(QPalette::Disabled,QPalette::Button);
++            m_disableColor = ThemeController::getPaletteColorFromDT("button",QPalette::Disabled);
+         }
+         break;
+     }
+     case SemiFlat:
+     {
+-        QColor baseColor = q->palette().button().color();
+-        QColor mix = q->palette().brightText().color();
++//        QColor baseColor = q->palette().button().color();
++        QColor baseColor = ThemeController::getPaletteColorFromDT("button");
++//        QColor mix = q->palette().brightText().color();
++        QColor mix = ThemeController::getPaletteColorFromDT("brighttext");
+         m_bkgColor = Qt::transparent;
+         m_clickColor = mixColor(baseColor,mix,0.2);
+         if(ThemeController::widgetTheme() == ClassicTheme)
+@@ -592,16 +611,33 @@ void KToolButtonPrivate::changePalette()
+                 if(ThemeController::themeMode() == LightTheme)
+                 {
+                     QColor color("#E6E6E6");
+-                    QColor startColor = mixColor(color,QColor(Qt::black),0.05);//("#FFD9D9D9");
+-                    QColor endColor = mixColor(color,QColor(Qt::black),0.2);//("#FFBFBFBF");
++
++//                    m_pLinearGradient.setColorAt(0,startColor);
++//                    m_pLinearGradient.setColorAt(1,endColor);
++
++                    QColor startColor;
++                    QColor endColor;
++                    ThemeController::getGradientFromDT("kcomponent-hover",startColor,endColor);
++                    if(!startColor.isValid())
++                        startColor = mixColor(color,QColor(Qt::black),0.05);//("#FFD9D9D9");
++                    if(!endColor.isValid())
++                        endColor = mixColor(color,QColor(Qt::black),0.2);//("#FFBFBFBF");
++
+                     m_pLinearGradient.setColorAt(0,startColor);
+                     m_pLinearGradient.setColorAt(1,endColor);
+                 }
+                 else
+                 {
+                     QColor color("#373737");
+-                    QColor startColor = mixColor(color,QColor(Qt::white),0.2);//("#FF5F5F5F");
+-                    QColor endColor = mixColor(color,QColor(Qt::white),0.05);//("#FF414141");
++                    QColor startColor;
++                    QColor endColor;
++
++                    ThemeController::getGradientFromDT("kcomponent-hover",startColor,endColor);
++                    if(!startColor.isValid())
++                        startColor =  mixColor(color,QColor(Qt::white),0.2);//("#FF5F5F5F");
++                    if(!endColor.isValid())
++                        endColor = mixColor(color,QColor(Qt::white),0.05);//("#FF414141");
++
+                     m_pLinearGradient.setColorAt(0,startColor);
+                     m_pLinearGradient.setColorAt(1,endColor);
+                 }
+@@ -615,8 +651,10 @@ void KToolButtonPrivate::changePalette()
+     }
+     case Background:
+     {
+-        QColor baseColor = q->palette().button().color();
+-        QColor mix = q->palette().brightText().color();
++//        QColor baseColor = q->palette().button().color();
++        QColor baseColor = ThemeController::getPaletteColorFromDT("button");
++//        QColor mix = q->palette().brightText().color();
++        QColor mix = ThemeController::getPaletteColorFromDT("brighttext");
+         m_bkgColor = baseColor;
+         m_clickColor = mixColor(baseColor,mix,0.2);
+         m_focusColor = baseColor;
+@@ -648,35 +686,53 @@ void KToolButtonPrivate::changePalette()
+             }
+         }
+         else if(ThemeController::widgetTheme()==FashionTheme)
+-            {
++        {
+             if(ThemeController::themeMode() == LightTheme)
+             {
+                 QColor color("#E6E6E6");
+-                QColor startColor = mixColor(color,QColor(Qt::black),0.05);//("#FFD9D9D9");
+-                QColor endColor = mixColor(color,QColor(Qt::black),0.2);//("#FFBFBFBF");
++
++                QColor startColor;
++                QColor endColor;
++                ThemeController::getGradientFromDT("kcomponent-hover",startColor,endColor);
++                if(!startColor.isValid())
++                    startColor = mixColor(color,QColor(Qt::black),0.05);//("#FFD9D9D9");
++                if(!endColor.isValid())
++                    endColor = mixColor(color,QColor(Qt::black),0.2);//("#FFBFBFBF");
++
+                 m_pLinearGradient.setColorAt(0,startColor);
+                 m_pLinearGradient.setColorAt(1,endColor);
+             }
+             else
+             {
+                 QColor color("#373737");
+-                QColor startColor = mixColor(color,QColor(Qt::white),0.2);//("#FF5F5F5F");
+-                QColor endColor = mixColor(color,QColor(Qt::white),0.05);//("#FF414141");
++
++
++                QColor startColor;
++                QColor endColor;
++                ThemeController::getGradientFromDT("kcomponent-hover",startColor,endColor);
++                if(!startColor.isValid())
++                    startColor = mixColor(color,QColor(Qt::white),0.2);//("#FF5F5F5F");
++                if(!endColor.isValid())
++                    endColor = mixColor(color,QColor(Qt::white),0.05);//("#FF414141");
++
+                 m_pLinearGradient.setColorAt(0,startColor);
+                 m_pLinearGradient.setColorAt(1,endColor);
+             }
+-            }
++        }
+         else
+             {
+                 m_hoverColor = mixColor(baseColor,mix,0.05);
+             }
+-        m_disableColor = q->palette().color(QPalette::Disabled,QPalette::Button);
++//        m_disableColor = q->palette().color(QPalette::Disabled,QPalette::Button);
++        m_disableColor = ThemeController::getPaletteColorFromDT("button",QPalette::Disabled);
+         break;
+     }
+     case Frameless:
+     {
+-        QColor baseColor = q->palette().button().color();
+-        QColor mix = q->palette().brightText().color();
++//        QColor baseColor = q->palette().button().color();
++        QColor baseColor = ThemeController::getPaletteColorFromDT("button");
++//        QColor mix = q->palette().brightText().color();
++        QColor mix = ThemeController::getPaletteColorFromDT("brighttext");
+         if(m_isBkgColorEnable)
+             m_bkgColor = baseColor;
+         else
+@@ -706,7 +762,8 @@ void KToolButtonPrivate::changePalette()
+             {
+                 m_hoverColor = mixColor(baseColor,mix,0.05);
+             }
+-        m_disableColor = q->palette().color(QPalette::Disabled,QPalette::Button);
++//        m_disableColor = q->palette().color(QPalette::Disabled,QPalette::Button);
++        m_disableColor = ThemeController::getPaletteColorFromDT("button",QPalette::Disabled);
+         break;
+     }
+     default:
+diff --git a/kysdk-qtwidgets/src/ktranslucentfloor.cpp b/kysdk-qtwidgets/src/ktranslucentfloor.cpp
+index 515f46c..3f866a2 100644
+--- a/kysdk-qtwidgets/src/ktranslucentfloor.cpp
++++ b/kysdk-qtwidgets/src/ktranslucentfloor.cpp
+@@ -28,6 +28,7 @@
+ #include <QRegion>
+ #include <kwindoweffects.h>
+ #include <QPainterPath>
++#include "themeController.h"
+ 
+ namespace kdk {
+ 
+@@ -136,18 +137,21 @@ void KTranslucentFloor::paintEvent(QPaintEvent *event)
+         painter.setOpacity(1);
+     }
+     painter.setPen(Qt::NoPen);
+-    painter.setBrush(this->palette().color(this->backgroundRole()));
++//    painter.setBrush(this->palette().color(this->backgroundRole()));
++    painter.setBrush(ThemeController::getPaletteColorFromDT("window"));
+     painter.drawPath(path);
+ 
+ }
+ 
+ KTranslucentFloorPrivate::KTranslucentFloorPrivate(KTranslucentFloor *parent)
+     :q_ptr(parent),
+-     m_radius(12),
+      m_shadowFlag(true),
+      m_enableBlur(true),
+      m_opacity(0.5)
+ {
++    m_radius = ThemeController::getRadiusFromDT("kradius-window");
++    if(m_radius == -1)
++        m_radius = 12;
+ }
+ }
+ 
+diff --git a/kysdk-qtwidgets/src/themeController.cpp b/kysdk-qtwidgets/src/themeController.cpp
+index 4bd0782..10d81ac 100644
+--- a/kysdk-qtwidgets/src/themeController.cpp
++++ b/kysdk-qtwidgets/src/themeController.cpp
+@@ -29,6 +29,9 @@
+ #include <QStringList>
+ #include <QApplication>
+ #include <QtMath>
++#include <QDBusConnection>
++#include <QDBusMessage>
++#include <QDBusReply>
+ 
+ #define ColorDifference 10
+ 
+@@ -53,6 +56,93 @@ QStringList applist{
+     "mktip",
+     "kylin-video"
+ };
++static inline QString getUppercaseLetters(QString str)
++{
++    if (str.isEmpty()) {
++        return str;
++    }
++
++    QString firstStr = str.left(1).toUpper();
++    QString remainingStr = str.mid(1);
++
++    return firstStr + remainingStr;
++}
++
++static inline QString getDTColorGroup(QPalette::ColorGroup colorGroup)
++{
++//    QPalette::ColorGroup colorGroup;
++    QString str;
++    if(colorGroup == QPalette::Active)
++        str = "active";
++    else if(colorGroup == QPalette::Inactive)
++        str = "inactive";
++    else if(colorGroup == QPalette::Disabled)
++        str = "disable";
++    else if(colorGroup == QPalette::NColorGroups)
++        str = "ncolorgroups";
++    else if(colorGroup == QPalette::Current)
++        str = "current";
++    else if(colorGroup == QPalette::All)
++        str = "all";
++    else if(colorGroup == QPalette::Normal)
++        str = "normal";
++    return str;
++}
++
++static inline QPalette::ColorRole getColorRole(QString str)
++{
++    QPalette::ColorRole colorRole;
++    if(str == "windowtext")
++        colorRole = QPalette::WindowText;
++    else if(str == "button")
++        colorRole = QPalette::Button;
++    else if(str == "light")
++        colorRole = QPalette::Light;
++    else if(str == "midlight")
++        colorRole = QPalette::Midlight;
++    else if(str == "dark")
++        colorRole = QPalette::Dark;
++    else if(str == "mid")
++        colorRole = QPalette::Mid;
++    else if(str == "text")
++        colorRole = QPalette::Text;
++    else if(str == "brighttext")
++        colorRole = QPalette::BrightText;
++    else if(str == "buttontext")
++        colorRole = QPalette::ButtonText;
++    else if(str == "base")
++        colorRole = QPalette::Base;
++    else if(str == "window")
++        colorRole = QPalette::Window;
++    else if(str == "shadow")
++        colorRole = QPalette::Shadow;
++    else if(str == "highlight")
++        colorRole = QPalette::Highlight;
++    else if(str == "highlightedtext")
++        colorRole = QPalette::HighlightedText;
++    else if(str == "link")
++        colorRole = QPalette::Link;
++    else if(str == "linkvisited")
++        colorRole = QPalette::LinkVisited;
++    else if(str == "alternatebase")
++        colorRole = QPalette::AlternateBase;
++    else if(str == "norole")
++        colorRole = QPalette::NoRole;
++    else if(str == "tooltipbase")
++        colorRole = QPalette::ToolTipBase;
++    else if(str == "tooltiptext")
++        colorRole = QPalette::ToolTipText;
++    else if(str == "placeholdertext")
++        colorRole = QPalette::PlaceholderText;
++    else if(str == "ncolorroles")
++        colorRole = QPalette::NColorRoles;
++    else if(str == "foreground")
++        colorRole = QPalette::Foreground;
++    else if(str == "background")
++        colorRole = QPalette::Background;
++
++    return colorRole;
++}
+ 
+ static inline qreal mixQreal(qreal a, qreal b, qreal bias)
+ {
+@@ -484,57 +574,6 @@ QColor ThemeController::buttonDarkClick(bool isDark, QPalette p)
+     return QColor();
+ }
+ 
+-//void ThemeController::normalButtonColor(bool isDark, QPalette p, QPen &defaultPen, QBrush &defaultBrush, QPen &hoverPen, QBrush &hoverBrush, QPen &clickPen, QBrush &clickBrush, QPen &disablePen, QBrush &disableBrush)
+-//{
+-//    //default
+-//    if(isDark){
+-//        defaultPen = QPen(QBrush(adjustColor(p.color(QPalette::Active, QPalette::Button), 0, 0, 8)),
+-//                          1, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin);
+-//    }
+-//    else
+-//        defaultPen = QPen(QBrush(adjustColor(p.color(QPalette::Active, QPalette::Button), 0, 0, -25)),
+-//                          1, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin);
+-
+-//    defaultBrush = p.brush(QPalette::Active, QPalette::Button);
+-
+-//    //hover
+-//    if (isDark) {
+-//        //hightlight->210,72%,71% 210,67%,56%
+-//        hoverPen = QPen(QBrush(adjustColor(p.color(QPalette::Active, QPalette::Highlight), 0, -5, -15)),
+-//                        1, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin);
+-//    } else {
+-//        //hightlight->209,87%,57% 213,73%,72%
+-//        hoverPen = QPen(QBrush(adjustColor(p.color(QPalette::Active, QPalette::Highlight), 4, -14, 15)),
+-//                        1, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin);
+-//    }
+-//    hoverBrush = QBrush(highlightHover(isDark, p));
+-
+-
+-//    //click
+-//    if (isDark) {
+-//        //hightlight->210,72%,71%
+-//        clickPen = QPen(p.brush(QPalette::Active, QPalette::Highlight),
+-//                        1, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin);
+-//    } else {
+-//        //hightlight->209,87%,57% 214,66%,60%
+-//        clickPen = QPen(QBrush(adjustColor(p.color(QPalette::Active, QPalette::Highlight), 5, -21, 3)),
+-//                        1, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin);
+-//    }
+-//    clickBrush = QBrush(highlightClick(isDark, p));
+-
+-//    //disable
+-//    if (isDark) {
+-//        disablePen = QPen(QBrush(adjustL(p.color(QPalette::Disabled, QPalette::Button), 18)),
+-//                          1, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin);
+-//        disableBrush = p.brush(QPalette::Disabled, QPalette::Button);
+-
+-//    } else {
+-//        disablePen = QPen(p.brush(QPalette::Disabled, QPalette::Button),
+-//                          1, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin);
+-//        disableBrush = p.brush(QPalette::Inactive, QPalette::Button);
+-//    }
+-//}
+-
+ bool ThemeController::systemLang()
+ {
+     QString systemLang = QLocale::system().name();
+@@ -544,6 +583,127 @@ bool ThemeController::systemLang()
+         return false;
+ }
+ 
++QColor ThemeController::getPaletteColorFromDT(QString dtString,QPalette::ColorGroup group)
++{
++    QColor color;
++    QPalette::ColorGroup colorGroup ;
++    if(group == QPalette::NColorGroups)
++        colorGroup = qApp->palette().currentColorGroup();
++    else
++        colorGroup =  group;
++    QString str = dtString + "-" + getDTColorGroup(colorGroup);
++    char* m_char = str.toLocal8Bit().data();
++    if (qApp->property(m_char).isValid() && qApp->property(m_char).canConvert<QColor>())
++    {
++        color =  qApp->property(m_char).value<QColor>();
++    }
++    if(!color.isValid())
++    {
++        QPalette::ColorRole colorRole = getColorRole(dtString);
++        color = qApp->palette().color(colorGroup,colorRole);
++    }
++    return color;
++}
++
++QColor ThemeController::getCustomColorFromDT(QString dtString)
++{
++    QColor color;
++    char* m_char = dtString.toLocal8Bit().data();
++    if (qApp->property(m_char).isValid() && qApp->property(m_char).canConvert<QColor>())
++    {
++        color =  qApp->property(m_char).value<QColor>();
++    }
++    return color;
++}
++
++QString ThemeController::getFontStylesFromDT(QString dtString)
++{
++    char* m_char = dtString.toLocal8Bit().data();
++    if (qApp->property(m_char).isValid() && qApp->property(m_char).canConvert<QColor>())
++    {
++        return  qApp->property(m_char).value<QString>();
++    }
++    return QString();
++}
++
++int ThemeController::getRadiusFromDT(QString dtString)
++{
++    char* m_char = dtString.toLocal8Bit().data();
++    if (qApp->property(m_char).isValid() && qApp->property(m_char).canConvert<QColor>())
++    {
++        return  qApp->property(m_char).value<int>();
++    }
++    return -1;
++}
++
++int ThemeController::getLineOrMarginFromDT(QString dtString)
++{
++    char* m_char = dtString.toLocal8Bit().data();
++    if (qApp->property(m_char).isValid() && qApp->property(m_char).canConvert<QColor>())
++    {
++        return  qApp->property(m_char).value<int>();
++    }
++    return -1;
++}
++
++void ThemeController::getGradientFromDT(QString key, QColor &startColor, QColor &endColor)
++{
++    int type;
++    QVariantMap option;
++
++    QDBusConnection bus = QDBusConnection::sessionBus();
++    QDBusMessage message = QDBusMessage::createMethodCall(
++        "com.kylin.themeConfig",
++        "/com/kylin/ThemeConfig",
++        "com.kylin.ThemeConfig.DTParameters",
++        "GetDTThemeConfig"
++    );
++
++    //可以调整dt key值调试
++//    QString key = QString("kfont-strong");
++    QVariantList arguments;
++    arguments.append(key);
++    message.setArguments(arguments);
++
++    QDBusReply<QVariantMap> reply = bus.call(message);
++
++    if (!reply.isValid()) {
++        qDebug() << "complex type failed!";
++    } else {
++        option = reply.value();
++
++        if (option.contains("type")) {
++            type = option.value("type").toUInt();
++        }
++
++        if (type == 3 && option.contains(QStringLiteral("start_color")) &&
++                option.contains(QStringLiteral("end_color"))) {
++
++            QByteArray startvalue = option.value(QStringLiteral("start_color")).toByteArray();
++            uint8_t c[4];
++            c[0] = startvalue[0];
++            c[1] = startvalue[1];
++            c[2] = startvalue[2];
++            c[3] = startvalue[3];
++            startColor.setRed(c[0]);
++            startColor.setGreen(c[1]);
++            startColor.setBlue(c[2]);
++            startColor.setAlpha(c[3]);
++
++            QByteArray endvalue = option.value(QStringLiteral("end_color")).toByteArray();
++            c[0] = endvalue[0];
++            c[1] = endvalue[1];
++            c[2] = endvalue[2];
++            c[3] = endvalue[3];
++            endColor.setRed(c[0]);
++            endColor.setGreen(c[1]);
++            endColor.setBlue(c[2]);
++            endColor.setAlpha(c[3]);
++        }
++    }
++
++}
++
+ ThemeController::ThemeController()
+     :m_gsetting(nullptr)
+ {
+diff --git a/kysdk-qtwidgets/src/themeController.h b/kysdk-qtwidgets/src/themeController.h
+index 40ece65..f4f7601 100644
+--- a/kysdk-qtwidgets/src/themeController.h
++++ b/kysdk-qtwidgets/src/themeController.h
+@@ -71,10 +71,16 @@ public:
+     static QColor highlightClick(bool isDark, QPalette p) ;
+     static QColor highlightHover(bool isDark, QPalette p) ;
+     static QColor buttonDarkClick(bool isDark, QPalette p) ;
+-//    static void normalButtonColor(bool isDark, QPalette p, QPen &defaultPen, QBrush &defaultBrush,  QPen &hoverPen, QBrush &hoverBrush,
+-//                            QPen &clickPen, QBrush &clickBrush,  QPen &disablePen, QBrush &disableBrush);
+     static bool systemLang();
+ 
++    static QColor getPaletteColorFromDT(QString dtString,QPalette::ColorGroup group = QPalette::Normal);
++    static QColor getCustomColorFromDT(QString dtString);
++    static QString getFontStylesFromDT(QString dtString);
++    static int getRadiusFromDT(QString dtString);
++    static int getLineOrMarginFromDT(QString dtString);
++
++    static void getGradientFromDT(QString key ,QColor &startColor,QColor &endColor);
++
+     ThemeController();
+     ~ThemeController();
+ 
+diff --git a/kysdk-qtwidgets/test/testIcon/main.cpp b/kysdk-qtwidgets/test/testIcon/main.cpp
+new file mode 100644
+index 0000000..b0a4ec2
+--- /dev/null
++++ b/kysdk-qtwidgets/test/testIcon/main.cpp
+@@ -0,0 +1,11 @@
++#include "widget.h"
++
++#include <QApplication>
++
++int main(int argc, char *argv[])
++{
++    QApplication a(argc, argv);
++    Widget w;
++    w.show();
++    return a.exec();
++}
+diff --git a/kysdk-qtwidgets/test/testIcon/testIcon.pro b/kysdk-qtwidgets/test/testIcon/testIcon.pro
+new file mode 100644
+index 0000000..e4ad9d9
+--- /dev/null
++++ b/kysdk-qtwidgets/test/testIcon/testIcon.pro
+@@ -0,0 +1,24 @@
++QT       += core gui
++
++greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
++
++CONFIG += c++11
++
++CONFIG += link_pkgconfig
++PKGCONFIG += kysdk-qtwidgets
++
++# You can make your code fail to compile if it uses deprecated APIs.
++# In order to do so, uncomment the following line.
++#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
++
++SOURCES += \
++    main.cpp \
++    widget.cpp
++
++HEADERS += \
++    widget.h
++
++# Default rules for deployment.
++qnx: target.path = /tmp/$${TARGET}/bin
++else: unix:!android: target.path = /opt/$${TARGET}/bin
++!isEmpty(target.path): INSTALLS += target
+diff --git a/kysdk-qtwidgets/test/testIcon/widget.cpp b/kysdk-qtwidgets/test/testIcon/widget.cpp
+new file mode 100644
+index 0000000..a3d35c0
+--- /dev/null
++++ b/kysdk-qtwidgets/test/testIcon/widget.cpp
+@@ -0,0 +1,27 @@
++#include "widget.h"
++#include "themeController.h"
++#include "kwidget.h"
++#include <QHBoxLayout>
++#include <QPushButton>
++#include <QLabel>
++
++//using namespace kdk;
++
++Widget::Widget(QWidget *parent)
++    : QWidget(parent)
++{
++    QHBoxLayout* layout = new QHBoxLayout(this);
++    QPushButton* btn = new QPushButton();
++    QIcon icon1 = QIcon::fromTheme("kylin-music");
++    QIcon icon2 = QIcon::fromTheme("kylin-video");
++    btn->setIcon(ThemeController::overlayIcons(icon1,icon2,16,16,8,8));
++    QLabel* label = new QLabel();
++    label->setPixmap(ThemeController::overlayPixmaps(icon2.pixmap(24,24),icon1.pixmap(16,16),8,8));
++    layout->addWidget(btn);
++    layout->addWidget(label);
++}
++
++Widget::~Widget()
++{
++}
++
+diff --git a/kysdk-qtwidgets/test/testIcon/widget.h b/kysdk-qtwidgets/test/testIcon/widget.h
+new file mode 100644
+index 0000000..47b6270
+--- /dev/null
++++ b/kysdk-qtwidgets/test/testIcon/widget.h
+@@ -0,0 +1,14 @@
++#ifndef WIDGET_H
++#define WIDGET_H
++
++#include <QWidget>
++
++class Widget : public QWidget
++{
++    Q_OBJECT
++
++public:
++    Widget(QWidget *parent = nullptr);
++    ~Widget();
++};
++#endif // WIDGET_H
+diff --git a/kysdk-qtwidgets/test/testLunarDateEdit/main.cpp b/kysdk-qtwidgets/test/testLunarDateEdit/main.cpp
+new file mode 100644
+index 0000000..b0a4ec2
+--- /dev/null
++++ b/kysdk-qtwidgets/test/testLunarDateEdit/main.cpp
+@@ -0,0 +1,11 @@
++#include "widget.h"
++
++#include <QApplication>
++
++int main(int argc, char *argv[])
++{
++    QApplication a(argc, argv);
++    Widget w;
++    w.show();
++    return a.exec();
++}
+diff --git a/kysdk-qtwidgets/test/testLunarDateEdit/testLunarDateEdit.pro b/kysdk-qtwidgets/test/testLunarDateEdit/testLunarDateEdit.pro
+new file mode 100644
+index 0000000..026ec1f
+--- /dev/null
++++ b/kysdk-qtwidgets/test/testLunarDateEdit/testLunarDateEdit.pro
+@@ -0,0 +1,31 @@
++QT       += core gui
++
++greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
++
++CONFIG += c++11
++
++CONFIG += link_pkgconfig
++PKGCONFIG += kysdk-widgetutils kysdk-qtwidgets
++
++# The following define makes your compiler emit warnings if you use
++# any Qt feature that has been marked deprecated (the exact warnings
++# depend on your compiler). Please consult the documentation of the
++# deprecated API in order to know how to port your code away from it.
++DEFINES += QT_DEPRECATED_WARNINGS
++
++# You can also make your code fail to compile if it uses deprecated APIs.
++# In order to do so, uncomment the following line.
++# You can also select to disable deprecated APIs only up to a certain version of Qt.
++#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
++
++SOURCES += \
++    main.cpp \
++    widget.cpp
++
++HEADERS += \
++    widget.h
++
++# Default rules for deployment.
++qnx: target.path = /tmp/$${TARGET}/bin
++else: unix:!android: target.path = /opt/$${TARGET}/bin
++!isEmpty(target.path): INSTALLS += target
+diff --git a/kysdk-qtwidgets/test/testLunarDateEdit/widget.cpp b/kysdk-qtwidgets/test/testLunarDateEdit/widget.cpp
+new file mode 100644
+index 0000000..943ee0b
+--- /dev/null
++++ b/kysdk-qtwidgets/test/testLunarDateEdit/widget.cpp
+@@ -0,0 +1,37 @@
++#include "widget.h"
++#include "klunardateedit.h"
++#include <QVBoxLayout>
++
++Widget::Widget(QWidget *parent) : QWidget(parent)
++{
++    this->setFixedSize(300,150);
++    QVBoxLayout *layout = new QVBoxLayout(this);
++
++    m_pLunarCheckBox = new QCheckBox(this);
++    m_pLunarCheckBox->setObjectName(QString::fromUtf8("checkBox"));
++    m_pLunarCheckBox->setGeometry(QRect(120, 80, 82, 21));
++    m_pLunarCheckBox->setChecked(false);
++    m_pLunarCheckBox->setText("Lunar");
++
++    m_pLunarDateEdit = new KLunarDateEdit(this);
++    m_pLunarDateEdit->setFixedSize(140, 36);
++
++    layout->addWidget(m_pLunarCheckBox);
++    layout->addWidget(m_pLunarDateEdit);
++
++    //用法,拿到DateEdit指针,然后像正常DateEdit控件一样用,农历会跟随刷新
++    m_pLunarDateEdit->getDateEdit()->setDate(QDate::currentDate());
++
++    QMetaObject::connectSlotsByName(this);
++}
++
++Widget::~Widget()
++{
++
++}
++
++void Widget::on_checkBox_clicked(bool checked)
++{
++    m_pLunarDateEdit->setShowLunar(checked);
++}
++
+diff --git a/kysdk-qtwidgets/test/testLunarDateEdit/widget.h b/kysdk-qtwidgets/test/testLunarDateEdit/widget.h
+new file mode 100644
+index 0000000..48dcccd
+--- /dev/null
++++ b/kysdk-qtwidgets/test/testLunarDateEdit/widget.h
+@@ -0,0 +1,25 @@
++#ifndef WIDGET_H
++#define WIDGET_H
++
++#include <QWidget>
++#include <QCheckBox>
++#include "klunardateedit.h"
++
++using namespace kdk;
++
++class Widget : public QWidget
++{
++    Q_OBJECT
++public:
++    Widget(QWidget *parent = nullptr);
++    ~Widget();
++
++private slots:
++    void on_checkBox_clicked(bool checked);
++
++private:
++    QCheckBox* m_pLunarCheckBox;
++    KLunarDateEdit* m_pLunarDateEdit;
++};
++
++#endif // WIDGET_H
+diff --git a/kysdk-qtwidgets/test/testdirtabbar/main.cpp b/kysdk-qtwidgets/test/testdirtabbar/main.cpp
+new file mode 100644
+index 0000000..b0a4ec2
+--- /dev/null
++++ b/kysdk-qtwidgets/test/testdirtabbar/main.cpp
+@@ -0,0 +1,11 @@
++#include "widget.h"
++
++#include <QApplication>
++
++int main(int argc, char *argv[])
++{
++    QApplication a(argc, argv);
++    Widget w;
++    w.show();
++    return a.exec();
++}
+diff --git a/kysdk-qtwidgets/test/testdirtabbar/testdirtabbar.pro b/kysdk-qtwidgets/test/testdirtabbar/testdirtabbar.pro
+new file mode 100644
+index 0000000..e4ad9d9
+--- /dev/null
++++ b/kysdk-qtwidgets/test/testdirtabbar/testdirtabbar.pro
+@@ -0,0 +1,24 @@
++QT       += core gui
++
++greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
++
++CONFIG += c++11
++
++CONFIG += link_pkgconfig
++PKGCONFIG += kysdk-qtwidgets
++
++# You can make your code fail to compile if it uses deprecated APIs.
++# In order to do so, uncomment the following line.
++#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
++
++SOURCES += \
++    main.cpp \
++    widget.cpp
++
++HEADERS += \
++    widget.h
++
++# Default rules for deployment.
++qnx: target.path = /tmp/$${TARGET}/bin
++else: unix:!android: target.path = /opt/$${TARGET}/bin
++!isEmpty(target.path): INSTALLS += target
+diff --git a/kysdk-qtwidgets/test/testdirtabbar/widget.cpp b/kysdk-qtwidgets/test/testdirtabbar/widget.cpp
+new file mode 100644
+index 0000000..06b3db9
+--- /dev/null
++++ b/kysdk-qtwidgets/test/testdirtabbar/widget.cpp
+@@ -0,0 +1,65 @@
++#include "widget.h"
++#include "kdirtabbar.h"
++#include <QFileInfo>
++#include <QDebug>
++#include <QWidget>
++#include <QDateTime>
++#include <QPushButton>
++#include <QDirIterator>
++#include <QToolButton>
++#include <QBoxLayout>
++#include <QTextEdit>
++#include <QPoint>
++#include <QStyle>
++#include <QFileDialog>
++#include <QStyleOptionButton>
++#include <QPainter>
++#include <QStandardPaths>
++#include <QLabel>
++
++using namespace  kdk;
++
++Widget::Widget(QWidget *parent)
++    : QWidget(parent)
++{
++    KDirTabBar * bar = new KDirTabBar(this);
++    QVBoxLayout* myLayout = new QVBoxLayout();
++    QFileDialog* fileDialog = new QFileDialog(this);;
++    QPushButton* button1 = new QPushButton("open files",this);
++    QLabel* label = new QLabel();
++    QString path =  QDir::currentPath();
++    QFileInfo fileInfo(path);
++    QList<QToolButton* > btns;
++    KDirTabBar* bar2 = new KDirTabBar(this);
++
++    bar->setCurrentPath(fileInfo.absoluteFilePath());
++    label->setText(bar->currentPath());
++    btns=bar->buttons();
++    btns[btns.count()-1]->setIcon(QIcon());//设置按钮的图标
++    btns[btns.count()-2]->setEnabled(false);//设置按钮是否可用
++    bar->setIcon(btns.count()-2,QIcon::fromTheme("folder-pictures"));//设置按钮的图标
++
++    connect(bar,&KDirTabBar::tabBarClicked,[=](){
++        label->setText(bar->currentPath());
++    });
++    connect(button1,&QPushButton::clicked,[=]{
++        fileDialog->setDirectory(QStandardPaths::writableLocation(QStandardPaths::HomeLocation));
++        fileDialog->setFileMode(QFileDialog::ExistingFiles);
++        bar2->setCurrentPath(fileDialog->getExistingDirectory());
++    });
++
++    setLayout(myLayout);
++    myLayout->addWidget(bar);
++    myLayout->addStretch();
++    myLayout->addWidget(label);
++    myLayout->addStretch();
++    myLayout->addWidget(button1);
++    myLayout->addStretch();
++    myLayout->addWidget(bar2);
++    myLayout->addStretch();
++}
++
++Widget::~Widget()
++{
++}
++
+diff --git a/kysdk-qtwidgets/test/testdirtabbar/widget.h b/kysdk-qtwidgets/test/testdirtabbar/widget.h
+new file mode 100644
+index 0000000..170c38d
+--- /dev/null
++++ b/kysdk-qtwidgets/test/testdirtabbar/widget.h
+@@ -0,0 +1,20 @@
++#ifndef WIDGET_H
++#define WIDGET_H
++
++#include <QWidget>
++#include "widget.h"
++#include "kdirtabbar.h"
++
++class Widget : public QWidget
++{
++    Q_OBJECT
++
++public:
++    Widget(QWidget *parent = nullptr);
++    ~Widget();
++
++
++    void getchildFolds(const QString& foldPath, QStringList& folds, QStringList& foldsName);
++
++};
++#endif // WIDGET_H
+diff --git a/kysdk-qtwidgets/test/testtableview/main.cpp b/kysdk-qtwidgets/test/testtableview/main.cpp
+new file mode 100644
+index 0000000..b0a4ec2
+--- /dev/null
++++ b/kysdk-qtwidgets/test/testtableview/main.cpp
+@@ -0,0 +1,11 @@
++#include "widget.h"
++
++#include <QApplication>
++
++int main(int argc, char *argv[])
++{
++    QApplication a(argc, argv);
++    Widget w;
++    w.show();
++    return a.exec();
++}
+diff --git a/kysdk-qtwidgets/test/testtableview/testtableview.pro b/kysdk-qtwidgets/test/testtableview/testtableview.pro
+new file mode 100644
+index 0000000..026ec1f
+--- /dev/null
++++ b/kysdk-qtwidgets/test/testtableview/testtableview.pro
+@@ -0,0 +1,31 @@
++QT       += core gui
++
++greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
++
++CONFIG += c++11
++
++CONFIG += link_pkgconfig
++PKGCONFIG += kysdk-widgetutils kysdk-qtwidgets
++
++# The following define makes your compiler emit warnings if you use
++# any Qt feature that has been marked deprecated (the exact warnings
++# depend on your compiler). Please consult the documentation of the
++# deprecated API in order to know how to port your code away from it.
++DEFINES += QT_DEPRECATED_WARNINGS
++
++# You can also make your code fail to compile if it uses deprecated APIs.
++# In order to do so, uncomment the following line.
++# You can also select to disable deprecated APIs only up to a certain version of Qt.
++#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
++
++SOURCES += \
++    main.cpp \
++    widget.cpp
++
++HEADERS += \
++    widget.h
++
++# Default rules for deployment.
++qnx: target.path = /tmp/$${TARGET}/bin
++else: unix:!android: target.path = /opt/$${TARGET}/bin
++!isEmpty(target.path): INSTALLS += target
+diff --git a/kysdk-qtwidgets/test/testtableview/widget.cpp b/kysdk-qtwidgets/test/testtableview/widget.cpp
+new file mode 100644
+index 0000000..f9bb97f
+--- /dev/null
++++ b/kysdk-qtwidgets/test/testtableview/widget.cpp
+@@ -0,0 +1,84 @@
++#include "widget.h"
++#include "ktableheaderview.h"
++#include "ktablemodel.h"
++#include "ktableview.h"
++#include <QMenu>
++#include <QDebug>
++#include <QPushButton>
++
++using namespace kdk;
++Widget::Widget(QWidget *parent)
++    : QWidget(parent)
++{
++    KTableModel* model = new KTableModel();
++    KTableView *tableview = new KTableView(this);
++//    tableview->setShowGrid(false);
++    tableview->verticalHeader()->setVisible(false);
++
++
++    QStringList head_list;
++    head_list << "文件项" << "格式" << "时间" << "大小";
++    tableview->setHorizontalTitle(head_list);
++
++    for(int i=0 ;i < 5 ; i++)
++    {
++        QList<QStandardItem*> add_items;
++        for (int index = 0; index < head_list.count(); ++index)
++        {
++            add_items << new QStandardItem(QString::number(i+index));
++
++        }
++        model->appendRow(add_items);
++    }
++
++    tableview->setModel(model);
++
++    tableview->setFixedSize(600,500);
++
++    tableview->setContextMenuPolicy(Qt::CustomContextMenu);//必须设置
++    QMenu * tableviewMenu = new QMenu(tableview);
++    QAction* Action1 = new QAction("tableview 1",tableview);
++    QAction* Action2 = new QAction("tableview 2",tableview);
++    tableviewMenu->addAction(Action1);
++    tableviewMenu->addAction(Action2);
++
++    QMenu * headmenu1 = new QMenu(tableview);
++    QAction* Action3 = new QAction("headmenu1 1",tableview);
++    QAction* Action4 = new QAction("headmenu1 2",tableview);
++    headmenu1->addAction(Action3);
++    headmenu1->addAction(Action4);
++
++    QMenu * headmenu2 = new QMenu(tableview);
++    QAction* Action5 = new QAction("headmenu2 1",tableview);
++    QAction* Action6 = new QAction("headmenu2 2",tableview);
++    headmenu2->addAction(Action5);
++    headmenu2->addAction(Action6);
++
++QModelIndexList list=tableview->selectionModel()->selectedIndexes();
++    connect(tableview,&KTableView::customContextMenuRequested,this,[=]{
++        tableviewMenu->exec(QCursor::pos());
++
++        for(int i =0 ; i<list.count();i++)
++            qDebug()<<list.at(i).data().toString();
++    });
++    tableview->headerView()->setMenu(headmenu1,1);
++    tableview->headerView()->setMenu(headmenu2,2);
++
++//    for(int i = 0;i < tableview->model()->rowCount();i++)
++//        qDebug()<< model->data(model->index(i,1)).toString();
++
++    QPushButton* btn = new QPushButton(this);
++    btn->move(0,300);
++    btn->setText("获取选中行的索引");
++    connect(btn,&QPushButton::clicked,this,[=]{
++        QList<int> list1=tableview->selectList();
++        qDebug()<<"list1"<<list1.count();
++        for(int i=0 ; i < list1.count(); i++)
++            qDebug()<<list1.at(i);
++    });
++}
++
++Widget::~Widget()
++{
++}
++
+diff --git a/kysdk-qtwidgets/test/testtableview/widget.h b/kysdk-qtwidgets/test/testtableview/widget.h
+new file mode 100644
+index 0000000..47b6270
+--- /dev/null
++++ b/kysdk-qtwidgets/test/testtableview/widget.h
+@@ -0,0 +1,14 @@
++#ifndef WIDGET_H
++#define WIDGET_H
++
++#include <QWidget>
++
++class Widget : public QWidget
++{
++    Q_OBJECT
++
++public:
++    Widget(QWidget *parent = nullptr);
++    ~Widget();
++};
++#endif // WIDGET_H
diff -Nru libkysdk-applications-2.5.1.0/debian/patches/0008-adapt-to-new-version-of-KF5.patch libkysdk-applications-2.5.2.0/debian/patches/0008-adapt-to-new-version-of-KF5.patch
--- libkysdk-applications-2.5.1.0/debian/patches/0008-adapt-to-new-version-of-KF5.patch	2024-07-31 11:09:38.000000000 +0800
+++ libkysdk-applications-2.5.2.0/debian/patches/0008-adapt-to-new-version-of-KF5.patch	1970-01-01 08:00:00.000000000 +0800
@@ -1,1576 +0,0 @@
-From: sunzhen <sunzhen1@kylinos.cn>
-Date: Wed, 29 May 2024 14:10:03 +0800
-Subject: adapt to new version of KF5
-
----
- kysdk-waylandhelper/kysdk-waylandhelper.pro        |  33 ++-
- .../src/blurmanager/blurabstractinterface.h        |  15 ++
- .../src/blurmanager/blurmanager.cpp                |  44 ++++
- kysdk-waylandhelper/src/blurmanager/blurmanager.h  |  30 +++
- .../src/blurmanager/blurwaylandinterface.cpp       | 134 +++++++++++
- .../src/blurmanager/blurwaylandinterface.h         |  47 ++++
- .../src/blurmanager/blurxcbinterface.cpp           |  45 ++++
- .../src/blurmanager/blurxcbinterface.h             |  16 ++
- kysdk-waylandhelper/src/blurmanager/ukuiblur.cpp   | 157 ++++++++++++
- kysdk-waylandhelper/src/blurmanager/ukuiblur.h     |  78 ++++++
- .../src/windowmanager/kdewaylandinterface.cpp      |  53 +++--
- kysdk-waylandhelper/src/windowmanager/kyatoms_p.h  | 180 ++++++++++++++
- ...land-plasma-window-management-client-protocol.h |  17 +-
- .../wayland-plasma-window-management-protocol.c    |   9 +-
- .../src/windowmanager/xcbinterface.cpp             | 262 +++++++++++++++------
- .../test/testBlurManager/.gitignore                |  73 ++++++
- kysdk-waylandhelper/test/testBlurManager/main.cpp  |  11 +
- .../test/testBlurManager/testBlurManager.pro       |  24 ++
- .../test/testBlurManager/widget.cpp                |  32 +++
- kysdk-waylandhelper/test/testBlurManager/widget.h  |  19 ++
- 20 files changed, 1170 insertions(+), 109 deletions(-)
- create mode 100644 kysdk-waylandhelper/src/blurmanager/blurabstractinterface.h
- create mode 100644 kysdk-waylandhelper/src/blurmanager/blurmanager.cpp
- create mode 100644 kysdk-waylandhelper/src/blurmanager/blurmanager.h
- create mode 100644 kysdk-waylandhelper/src/blurmanager/blurwaylandinterface.cpp
- create mode 100644 kysdk-waylandhelper/src/blurmanager/blurwaylandinterface.h
- create mode 100644 kysdk-waylandhelper/src/blurmanager/blurxcbinterface.cpp
- create mode 100644 kysdk-waylandhelper/src/blurmanager/blurxcbinterface.h
- create mode 100644 kysdk-waylandhelper/src/blurmanager/ukuiblur.cpp
- create mode 100644 kysdk-waylandhelper/src/blurmanager/ukuiblur.h
- create mode 100644 kysdk-waylandhelper/src/windowmanager/kyatoms_p.h
- create mode 100644 kysdk-waylandhelper/test/testBlurManager/.gitignore
- create mode 100644 kysdk-waylandhelper/test/testBlurManager/main.cpp
- create mode 100644 kysdk-waylandhelper/test/testBlurManager/testBlurManager.pro
- create mode 100644 kysdk-waylandhelper/test/testBlurManager/widget.cpp
- create mode 100644 kysdk-waylandhelper/test/testBlurManager/widget.h
-
-diff --git a/kysdk-waylandhelper/kysdk-waylandhelper.pro b/kysdk-waylandhelper/kysdk-waylandhelper.pro
-index 44bb32e..c3de989 100644
---- a/kysdk-waylandhelper/kysdk-waylandhelper.pro
-+++ b/kysdk-waylandhelper/kysdk-waylandhelper.pro
-@@ -30,6 +30,8 @@ system(wayland-scanner private-code /usr/share/wayland-protocols/staging/xdg-act
- system(wayland-scanner client-header /usr/share/wayland-protocols/staging/ext-idle-notify/ext-idle-notify-v1.xml src/windowmanager/wayland-ext-idle-notify-v1-client-protocol.h)
- system(wayland-scanner private-code /usr/share/wayland-protocols/staging/ext-idle-notify/ext-idle-notify-v1.xml src/windowmanager/wayland-ext-idle-notify-v1-protocol.c)
- 
-+system(wayland-scanner client-header /usr/share/kylin-wayland-protocols/ukui-blur-manager.xml src/blurmanager/ukui-blur-manager-client-protocol.h)
-+system(wayland-scanner private-code /usr/share/kylin-wayland-protocols/ukui-blur-manager.xml src/blurmanager/ukui-blur-manager-core-protocol.c)
- 
- SOURCES += \
-     src/ukuistylehelper/ukui-decoration-core.c \
-@@ -53,7 +55,13 @@ SOURCES += \
-     src/windowmanager/ukui-window-management-core-protocol.c\
-     src/windowmanager/ukui-shell-core-protocol.c \
-     src/windowmanager/wayland-xdg-activation-v1-protocol.c \
--    src/windowmanager/wayland-ext-idle-notify-v1-protocol.c
-+    src/windowmanager/wayland-ext-idle-notify-v1-protocol.c \
-+    src/blurmanager/ukuiblur.cpp \
-+    src/blurmanager/blurmanager.cpp \
-+    src/blurmanager/ukui-blur-manager-core-protocol.c \
-+    src/blurmanager/blurwaylandinterface.cpp \
-+    src/blurmanager/blurxcbinterface.cpp
-+
- 
- HEADERS += \
-     src/ukuistylehelper/ukui-decoration-client.h \
-@@ -79,7 +87,14 @@ HEADERS += \
-     src/windowmanager/wayland-plasma-window-management-client-protocol.h \
-     src/windowmanager/ukui-window-management-client-protocol.h \
-     src/windowmanager/wayland-xdg-activation-v1-client-protocol.h \
--    src/windowmanager/wayland-ext-idle-notify-v1-client-protocol.h
-+    src/windowmanager/wayland-ext-idle-notify-v1-client-protocol.h \
-+    src/windowmanager/kyatoms_p.h \
-+    src/blurmanager/ukuiblur.h \
-+    src/blurmanager/blurmanager.h \
-+    src/blurmanager/ukui-blur-manager-client-protocol.h\
-+    src/blurmanager/blurabstractinterface.h \
-+    src/blurmanager/blurwaylandinterface.h \
-+    src/blurmanager/blurxcbinterface.h
- 
- # Default rules for deployment.
- headers.files = src/kysdk-waylandhelper_global.h \
-@@ -103,7 +118,8 @@ wm_headers.files = src/windowmanager/abstractinterface.h \
-     src/windowmanager/wayland-plasma-window-management-client-protocol.h \
-     src/windowmanager/ukui-window-management-client-protocol.h \
-     src/windowmanager/wayland-xdg-activation-v1-client-protocol.h \
--    src/windowmanager/wayland-ext-idle-notify-v1-client-protocol.h
-+    src/windowmanager/wayland-ext-idle-notify-v1-client-protocol.h \
-+    src/windowmanager/kyatoms_p.h
-                     
- wm_headers.path = /usr/include/kysdk/applications/windowmanager/
- 
-@@ -116,5 +132,14 @@ sty_headers.files = src/ukuistylehelper/ukui-decoration-client.h \
- 
- sty_headers.path = /usr/include/kysdk/applications/ukuistylehelper/
- 
-+blur_headers.files = src/blurmanager/ukuiblur.h \
-+                    src/blurmanager/blurmanager.h \
-+                    src/blurmanager/ukui-blur-manager-client-protocol.h\
-+                    src/blurmanager/blurabstractinterface.h \
-+                    src/blurmanager/blurwaylandinterface.h \
-+                    src/blurmanager/blurxcbinterface.h
-+
-+blur_headers.path = /usr/include/kysdk/applications/blurmanager/
-+
- target.path = $$[QT_INSTALL_LIBS]
--INSTALLS += target headers wm_headers sty_headers
-+INSTALLS += target headers wm_headers sty_headers blur_headers
-diff --git a/kysdk-waylandhelper/src/blurmanager/blurabstractinterface.h b/kysdk-waylandhelper/src/blurmanager/blurabstractinterface.h
-new file mode 100644
-index 0000000..6155b91
---- /dev/null
-+++ b/kysdk-waylandhelper/src/blurmanager/blurabstractinterface.h
-@@ -0,0 +1,15 @@
-+#ifndef BLURABSTRACTINTERFACE_H
-+#define BLURABSTRACTINTERFACE_H
-+
-+#include <QWindow>
-+#include <QRegion>
-+
-+class BlurAbstractInterface:public QObject
-+{
-+public:
-+    BlurAbstractInterface(QObject* parent=nullptr)
-+        :QObject(parent){}
-+    virtual bool setBlurBehindWithStrength(QWindow *window, bool enable = true, const QRegion &region = QRegion(), uint32_t strength = -1)  = 0;
-+};
-+
-+#endif // BLURABSTRACTINTERFACE_H
-diff --git a/kysdk-waylandhelper/src/blurmanager/blurmanager.cpp b/kysdk-waylandhelper/src/blurmanager/blurmanager.cpp
-new file mode 100644
-index 0000000..0529e9b
---- /dev/null
-+++ b/kysdk-waylandhelper/src/blurmanager/blurmanager.cpp
-@@ -0,0 +1,44 @@
-+#include "blurmanager.h"
-+#include "ukui-blur-manager-client-protocol.h"
-+
-+#include <QWindow>
-+#include <QRegion>
-+#include <QGuiApplication>
-+
-+#include "blurxcbinterface.h"
-+#include "blurwaylandinterface.h"
-+
-+namespace kdk
-+{
-+
-+static BlurManager* g_blurmanager = nullptr;
-+
-+BlurManager::BlurManager(QObject *parent)
-+    :QObject(parent)
-+{
-+    QString platform = QGuiApplication::platformName();
-+    if(platform.startsWith(QLatin1String("wayland"),Qt::CaseInsensitive))
-+         m_blurInterface = new BlurWaylandInterface(this);
-+    else
-+        m_blurInterface = new BlurXcbInterface(this);
-+}
-+
-+BlurAbstractInterface *BlurManager::interface()
-+{
-+    return m_blurInterface;
-+}
-+
-+BlurManager *BlurManager::self()
-+{
-+    if(g_blurmanager)
-+        return g_blurmanager;
-+    g_blurmanager = new BlurManager();
-+    return g_blurmanager;
-+}
-+
-+bool BlurManager::setBlurBehindWithStrength(QWindow *window, bool enable, const QRegion &region, uint32_t strength)
-+{
-+    return self()->interface()->setBlurBehindWithStrength(window, enable, region, strength);
-+}
-+
-+}
-diff --git a/kysdk-waylandhelper/src/blurmanager/blurmanager.h b/kysdk-waylandhelper/src/blurmanager/blurmanager.h
-new file mode 100644
-index 0000000..deeee43
---- /dev/null
-+++ b/kysdk-waylandhelper/src/blurmanager/blurmanager.h
-@@ -0,0 +1,30 @@
-+#ifndef BLURMANAGER_H
-+#define BLURMANAGER_H
-+
-+#include <QObject>
-+#include <QWindow>
-+#include <QRegion>
-+
-+#include "blurabstractinterface.h"
-+
-+namespace kdk
-+{
-+class BlurManagerPrivate;
-+
-+class Q_DECL_EXPORT BlurManager : public QObject
-+{
-+    Q_OBJECT
-+public:
-+    static BlurManager*self();
-+    static bool setBlurBehindWithStrength(QWindow *window, bool enable = true, const QRegion &region = QRegion(), uint32_t strength = -1);
-+
-+
-+private:
-+    BlurManager(QObject *parent = nullptr);
-+    BlurAbstractInterface *interface();
-+    BlurAbstractInterface *m_blurInterface = nullptr;
-+};
-+
-+}
-+
-+#endif // BLURMANAGER_H
-diff --git a/kysdk-waylandhelper/src/blurmanager/blurwaylandinterface.cpp b/kysdk-waylandhelper/src/blurmanager/blurwaylandinterface.cpp
-new file mode 100644
-index 0000000..48fd09d
---- /dev/null
-+++ b/kysdk-waylandhelper/src/blurmanager/blurwaylandinterface.cpp
-@@ -0,0 +1,134 @@
-+#include "blurwaylandinterface.h"
-+
-+
-+static void handle_global(void *data,struct wl_registry *wl_registry,uint32_t name, const char *interface,  uint32_t version)
-+{
-+    auto blurInterface = reinterpret_cast<BlurWaylandInterface *>(data);
-+    blurInterface->handleGlobal(data,wl_registry,name,interface,version);
-+}
-+static void handle_global_remove(void *data, struct wl_registry *wl_registry, uint32_t name)
-+{
-+}
-+
-+BlurWaylandInterface::BlurWaylandInterface(QObject *parent)
-+    : BlurAbstractInterface(parent)
-+{
-+    m_connection = KWayland::Client::ConnectionThread::fromApplication(qApp);
-+    m_registry = new Registry(this);
-+    m_registry->create(m_connection->display());
-+
-+    connect(m_registry, &KWayland::Client::Registry::compositorAnnounced, this, [=](){
-+        const auto interface = m_registry->interface(KWayland::Client::Registry::Interface::Compositor);
-+        if (interface.name != 0) {
-+            m_compositor = m_registry->createCompositor(interface.name, interface.version, this);
-+        }
-+    });
-+    struct wl_registry_listener registry_listener = {
-+        .global = handle_global,
-+        .global_remove = handle_global_remove
-+    };
-+    wl_registry* registry = *m_registry;
-+    wl_registry_add_listener(registry, &registry_listener, this);
-+
-+    m_registry->setup();
-+    m_connection->roundtrip();
-+}
-+
-+void BlurWaylandInterface::handleGlobal(void *data, wl_registry *registry, uint32_t name, const char *interface, uint32_t version)
-+{
-+    if (strcmp(interface, ukui_blur_manager_interface.name) == 0)
-+    {
-+        ukui_blur_manager *blur_manager_handle =  (ukui_blur_manager *) wl_registry_bind(registry, name, &ukui_blur_manager_interface, version);
-+        if(blur_manager_handle)
-+        {
-+            m_blur_manager = new UkuiBlurManager(this);
-+            m_blur_manager->setup(blur_manager_handle);
-+        }
-+    }
-+}
-+
-+bool BlurWaylandInterface::eventFilter(QObject *obj, QEvent *ev)
-+{
-+    auto window = qobject_cast<QWindow*>(obj);
-+    if(window && ev->type() == QEvent::Hide)
-+    {
-+        if(m_surfaces.contains(window))
-+        {
-+            auto surface = m_surfaces.value(window);
-+            if(surface)
-+            {
-+                surface->release();
-+                surface->destroy();
-+            }
-+            m_surfaces.remove(window);
-+        }
-+        if(m_regions.contains(window))
-+        {
-+            auto region = m_regions.value(window);
-+            if(region)
-+            {
-+                region->release();
-+                region->destroy();
-+            }
-+            m_regions.remove(window);
-+        }
-+        if(m_blurs.contains(window))
-+        {
-+            auto blur_handle = m_blurs.value(window);
-+            if(blur_handle)
-+            {
-+                blur_handle->release();
-+                blur_handle->destroy();
-+            }
-+            m_blurs.remove(window);
-+        }
-+    }
-+    return QObject::eventFilter(obj,ev);
-+}
-+
-+bool BlurWaylandInterface::setBlurBehindWithStrength(QWindow *window, bool enable, const QRegion &region, uint32_t strength)
-+{
-+    if(!window || !m_blur_manager || !m_compositor)
-+        return false;
-+
-+    auto surface = KWayland::Client::Surface::fromWindow(window);
-+    if (!surface)
-+        return false;
-+    if(!m_surfaces.contains(window))
-+    {
-+        m_surfaces.insert(window,surface);
-+    }
-+    if(enable)
-+    {
-+        UkuiBlur * blurHandle = m_blur_manager->createBlur(surface, this);
-+        if(!blurHandle)
-+            return false;
-+        if(!m_blurs.contains(window))
-+        {
-+            m_blurs.insert(window,blurHandle);
-+        }
-+        Region* region_hanlde = m_compositor->createRegion(this);
-+        if(!region_hanlde)
-+            return false;
-+        if(!m_regions.contains(window))
-+        {
-+            m_regions.insert(window,region_hanlde);
-+        }
-+        for(const QRect &rect : region)
-+        {
-+            region_hanlde->add(rect);
-+        }
-+        blurHandle->setRegion(region_hanlde);
-+        blurHandle->setStrength(strength);
-+        blurHandle->commit();
-+        window->installEventFilter(this);
-+        return true;
-+    }
-+    else
-+    {
-+        m_blur_manager->removeBlur(surface);
-+        window->removeEventFilter(this);
-+        return true;
-+    }
-+
-+}
-diff --git a/kysdk-waylandhelper/src/blurmanager/blurwaylandinterface.h b/kysdk-waylandhelper/src/blurmanager/blurwaylandinterface.h
-new file mode 100644
-index 0000000..2444c97
---- /dev/null
-+++ b/kysdk-waylandhelper/src/blurmanager/blurwaylandinterface.h
-@@ -0,0 +1,47 @@
-+#ifndef BLURWAYLANDINTERFACE_H
-+#define BLURWAYLANDINTERFACE_H
-+
-+#include <QObject>
-+#include <QRegion>
-+#include <KWayland/Client/surface.h>
-+#include <KWayland/Client/registry.h>
-+#include <KWayland/Client/event_queue.h>
-+#include <KWayland/Client/output.h>
-+#include <KWayland/Client/connection_thread.h>
-+#include <KWayland/Client/compositor.h>
-+#include <QApplication>
-+#include "ukuiblur.h"
-+#include "blurabstractinterface.h"
-+
-+using namespace KWayland::Client;
-+
-+class BlurWaylandInterfacePrivate;
-+
-+class BlurWaylandInterface : public BlurAbstractInterface
-+{
-+    Q_OBJECT
-+
-+public:
-+    explicit BlurWaylandInterface(QObject *parent = nullptr);
-+
-+    bool setBlurBehindWithStrength(QWindow *window, bool enable = true, const QRegion &region = QRegion(), uint32_t strength = -1) override;
-+
-+    void handleGlobal(void *data, struct wl_registry *registry,
-+                              uint32_t name, const char *interface, uint32_t version);
-+
-+protected:
-+    bool eventFilter(QObject *obj, QEvent *ev) override;
-+
-+private:
-+    BlurWaylandInterface* q_ptr;
-+    ConnectionThread *m_connection = nullptr;
-+    Compositor* m_compositor = nullptr;
-+    Registry* m_registry = nullptr;
-+    UkuiBlur* m_blur = nullptr;
-+    UkuiBlurManager* m_blur_manager = nullptr;
-+    QMap<QWindow*,Surface*>m_surfaces;
-+    QMap<QWindow*,Region*>m_regions;
-+    QMap<QWindow*,UkuiBlur*>m_blurs;
-+};
-+
-+#endif // BLURWAYLANDINTERFACE_H
-diff --git a/kysdk-waylandhelper/src/blurmanager/blurxcbinterface.cpp b/kysdk-waylandhelper/src/blurmanager/blurxcbinterface.cpp
-new file mode 100644
-index 0000000..6bd2034
---- /dev/null
-+++ b/kysdk-waylandhelper/src/blurmanager/blurxcbinterface.cpp
-@@ -0,0 +1,45 @@
-+#include "blurxcbinterface.h"
-+#include <QX11Info>
-+#include <QApplication>
-+
-+BlurXcbInterface::BlurXcbInterface(QObject *parent)
-+    : BlurAbstractInterface(parent)
-+{
-+
-+}
-+
-+bool BlurXcbInterface::setBlurBehindWithStrength(QWindow *window, bool enable, const QRegion &region, uint32_t strength)
-+{
-+    xcb_connection_t *c = QX11Info::connection();
-+    if (!c) {
-+        return false;
-+    }
-+    const QByteArray effectName = QByteArrayLiteral("_KDE_NET_WM_BLUR_BEHIND_REGION");
-+    xcb_intern_atom_cookie_t atomCookie = xcb_intern_atom_unchecked(c, false, effectName.length(), effectName.constData());
-+    QScopedPointer<xcb_intern_atom_reply_t, QScopedPointerPodDeleter> atom(xcb_intern_atom_reply(c, atomCookie, nullptr));
-+    if (!atom)
-+    {
-+        return false;
-+    }
-+
-+    if (enable)
-+    {
-+        QVector<uint32_t> data;
-+        data.reserve(region.rectCount() * 4 + 1);
-+        for (const QRect &r : region)
-+        {
-+            auto dpr = qApp->devicePixelRatio();
-+            data << r.x() * dpr << r.y() * dpr << r.width() * dpr << r.height() * dpr;
-+        }
-+        data << strength;
-+
-+        xcb_change_property(c, XCB_PROP_MODE_REPLACE, window->winId(), atom->atom, XCB_ATOM_CARDINAL, 32, data.size(), data.constData());
-+        return true;
-+    }
-+    else
-+    {
-+        xcb_delete_property(c, window->winId(), atom->atom);
-+        xcb_flush(c);
-+        return true;
-+    }
-+}
-diff --git a/kysdk-waylandhelper/src/blurmanager/blurxcbinterface.h b/kysdk-waylandhelper/src/blurmanager/blurxcbinterface.h
-new file mode 100644
-index 0000000..2b5401e
---- /dev/null
-+++ b/kysdk-waylandhelper/src/blurmanager/blurxcbinterface.h
-@@ -0,0 +1,16 @@
-+#ifndef BLURXCBINTERFACE_H
-+#define BLURXCBINTERFACE_H
-+
-+#include <QObject>
-+#include "blurabstractinterface.h"
-+
-+class BlurXcbInterface : public BlurAbstractInterface
-+{
-+    Q_OBJECT
-+public:
-+    explicit BlurXcbInterface(QObject *parent = nullptr);
-+
-+    bool setBlurBehindWithStrength(QWindow *window, bool enable = true, const QRegion &region = QRegion(), uint32_t strength = -1) override;
-+};
-+
-+#endif // BLURXCBINTERFACE_H
-diff --git a/kysdk-waylandhelper/src/blurmanager/ukuiblur.cpp b/kysdk-waylandhelper/src/blurmanager/ukuiblur.cpp
-new file mode 100644
-index 0000000..ee39d70
---- /dev/null
-+++ b/kysdk-waylandhelper/src/blurmanager/ukuiblur.cpp
-@@ -0,0 +1,157 @@
-+#include "ukuiblur.h"
-+#include "../windowmanager/ukuiwaylandpointer.h"
-+
-+class Q_DECL_HIDDEN UkuiBlur::Private
-+{
-+public:
-+    UkuiWaylandPointer<ukui_blur, ukui_blur_destroy> blur;
-+};
-+
-+class Q_DECL_HIDDEN UkuiBlurManager::Private
-+{
-+public:
-+    Private(UkuiBlurManager *q);
-+
-+    UkuiWaylandPointer<ukui_blur_manager, ukui_blur_manager_destroy> blurManager;
-+    EventQueue *queue = nullptr;
-+
-+private:
-+    UkuiBlurManager* q;
-+};
-+
-+UkuiBlur::UkuiBlur(QObject *parent)
-+    : QObject(parent),
-+      d(new Private)
-+{
-+
-+}
-+
-+UkuiBlur::~UkuiBlur()
-+{
-+    release();
-+}
-+
-+bool UkuiBlur::isValid() const
-+{
-+    return d->blur.isValid();
-+}
-+
-+void UkuiBlur::release()
-+{
-+    d->blur.release();
-+}
-+
-+void UkuiBlur::destroy()
-+{
-+    d->blur.destroy();
-+}
-+
-+void UkuiBlur::setup(ukui_blur *blur)
-+{
-+    Q_ASSERT(blur);
-+    Q_ASSERT(!d->blur);
-+    d->blur.setup(blur);
-+}
-+
-+void UkuiBlur::commit()
-+{
-+    ukui_blur_commit(d->blur);
-+}
-+
-+void UkuiBlur::setRegion(Region *region)
-+{
-+    ukui_blur_set_region(d->blur, *region);
-+}
-+
-+void UkuiBlur::setStrength(uint32_t strength)
-+{
-+    ukui_blur_set_strength(d->blur, strength);
-+}
-+
-+UkuiBlur::operator ukui_blur *()
-+{
-+    return d->blur;
-+}
-+
-+UkuiBlur::operator ukui_blur *() const
-+{
-+    return d->blur;
-+}
-+
-+UkuiBlurManager::UkuiBlurManager(QObject *parent)
-+    : QObject(parent),
-+      d(new Private(this))
-+{
-+
-+}
-+
-+UkuiBlurManager::~UkuiBlurManager()
-+{
-+    release();
-+}
-+
-+bool UkuiBlurManager::isValid() const
-+{
-+    if(!d->blurManager)
-+        return false;
-+    return d->blurManager.isValid();
-+}
-+
-+void UkuiBlurManager::release()
-+{
-+    d->blurManager.release();
-+}
-+
-+void UkuiBlurManager::destroy()
-+{
-+    d->blurManager.destroy();
-+}
-+
-+void UkuiBlurManager::setup(ukui_blur_manager *blur_manager)
-+{
-+    d->blurManager.setup(blur_manager);
-+}
-+
-+void UkuiBlurManager::setEventQueue(EventQueue *queue)
-+{
-+    d->queue = queue;
-+}
-+
-+EventQueue *UkuiBlurManager::eventQueue()
-+{
-+    return d->queue;
-+}
-+
-+UkuiBlur *UkuiBlurManager::createBlur(Surface *surface, QObject *parent)
-+{
-+    if(!isValid())
-+        return nullptr;
-+    UkuiBlur *s = new UkuiBlur(parent);
-+    auto w = ukui_blur_manager_create(d->blurManager, *surface);
-+    if (d->queue) {
-+        d->queue->addProxy(w);
-+    }
-+    s->setup(w);
-+    return s;
-+}
-+
-+void UkuiBlurManager::removeBlur(Surface *surface)
-+{
-+    Q_ASSERT(isValid());
-+    ukui_blur_manager_unset(d->blurManager, *surface);
-+}
-+
-+UkuiBlurManager::operator ukui_blur_manager *()
-+{
-+    return d->blurManager;
-+}
-+
-+UkuiBlurManager::operator ukui_blur_manager *() const
-+{
-+    return d->blurManager;
-+}
-+
-+UkuiBlurManager::Private::Private(UkuiBlurManager *q)
-+    :q(q)
-+{
-+}
-diff --git a/kysdk-waylandhelper/src/blurmanager/ukuiblur.h b/kysdk-waylandhelper/src/blurmanager/ukuiblur.h
-new file mode 100644
-index 0000000..fbc1114
---- /dev/null
-+++ b/kysdk-waylandhelper/src/blurmanager/ukuiblur.h
-@@ -0,0 +1,78 @@
-+#ifndef UKUIBLUR_H
-+#define UKUIBLUR_H
-+
-+#include <QObject>
-+#include <KWayland/Client/region.h>
-+#include <KWayland/Client/event_queue.h>
-+#include <KWayland/Client/surface.h>
-+#include "ukui-blur-manager-client-protocol.h"
-+
-+struct ukui_blur;
-+struct ukui_blur_manager;
-+using namespace KWayland::Client;
-+
-+class UkuiBlur : public QObject
-+{
-+    Q_OBJECT
-+public:
-+    explicit UkuiBlur(QObject *parent = nullptr);
-+    ~UkuiBlur();
-+
-+    bool isValid() const;
-+
-+    void release();
-+
-+    void destroy();
-+
-+    void setup(ukui_blur *blur);
-+
-+    void commit();
-+
-+    void setRegion(Region *region);
-+
-+    void setStrength(uint32_t strength);
-+
-+
-+    operator ukui_blur *();
-+    operator ukui_blur *() const;
-+
-+private:
-+    class Private;
-+    QScopedPointer<Private> d;
-+
-+};
-+
-+class UkuiBlurManager : public QObject
-+{
-+    Q_OBJECT
-+public:
-+    explicit UkuiBlurManager(QObject *parent = nullptr);
-+    ~UkuiBlurManager();
-+
-+    bool isValid() const;
-+
-+    void release();
-+
-+    void destroy();
-+
-+    void setup(ukui_blur_manager *blur_manager);
-+
-+    void setEventQueue(EventQueue *queue);
-+
-+    EventQueue *eventQueue();
-+
-+    UkuiBlur *createBlur(Surface *surface, QObject *parent = nullptr);
-+
-+    void removeBlur(Surface *surface);
-+
-+    operator ukui_blur_manager *();
-+
-+    operator ukui_blur_manager *() const;
-+
-+private:
-+    class Private;
-+    QScopedPointer<Private> d;
-+
-+};
-+
-+#endif // UKUIBLUR_H
-diff --git a/kysdk-waylandhelper/src/windowmanager/kdewaylandinterface.cpp b/kysdk-waylandhelper/src/windowmanager/kdewaylandinterface.cpp
-index c0a96d3..3e92ffa 100644
---- a/kysdk-waylandhelper/src/windowmanager/kdewaylandinterface.cpp
-+++ b/kysdk-waylandhelper/src/windowmanager/kdewaylandinterface.cpp
-@@ -489,6 +489,9 @@ void KdeWaylandInterface::setWindowLayer(QWindow *window, WindowLayer layer)
- 
-     switch(layer)
-     {
-+        case WindowLayer::Normal:
-+            plasmaShellSurface->setRole(PlasmaShellSurface::Role::Normal);
-+            break;
-         case WindowLayer::Desktop:
-             plasmaShellSurface->setRole(PlasmaShellSurface::Role::Desktop);
-             break;
-@@ -513,32 +516,48 @@ void KdeWaylandInterface::setWindowLayer(QWindow *window, WindowLayer layer)
-             qWarning()<<"plasmashellsurface does not surport AppletPop layer, replaced by Tooltip";
-             break;
-         }
--
-         case WindowLayer::ScreenLock:
--            plasmaShellSurface->setRole(PlasmaShellSurface::Role::ScreenLock);
-+        {
-+            plasmaShellSurface->setRole(PlasmaShellSurface::Role::Normal);
-+            qWarning()<<"plasmashellsurface does not surport ScreenLock layer, replaced by Normal";
-             break;
-+        }
-         case WindowLayer::Watermark:
--            plasmaShellSurface->setRole(PlasmaShellSurface::Role::Watermark);
-+        {
-+            plasmaShellSurface->setRole(PlasmaShellSurface::Role::Normal);
-+            qWarning()<<"plasmashellsurface does not surport Watermark layer, replaced by Normal";
-             break;
-+        }
-         case WindowLayer::SystemWindow:
--            plasmaShellSurface->setRole(PlasmaShellSurface::Role::SystemWindow);
-+        {
-+            plasmaShellSurface->setRole(PlasmaShellSurface::Role::Normal);
-+            qWarning()<<"plasmashellsurface does not surport SystemWindow layer, replaced by Normal";
-             break;
-+        }
-         case WindowLayer::InputPanel:
--            plasmaShellSurface->setRole(PlasmaShellSurface::Role::InputPanel);
-+        {
-+            plasmaShellSurface->setRole(PlasmaShellSurface::Role::Normal);
-+            qWarning()<<"plasmashellsurface does not surport InputPanel layer, replaced by Normal";
-             break;
-+        }
-         case WindowLayer::Logout:
--            plasmaShellSurface->setRole(PlasmaShellSurface::Role::Logout);
-+        {
-+            plasmaShellSurface->setRole(PlasmaShellSurface::Role::Normal);
-+            qWarning()<<"plasmashellsurface does not surport Logout layer, replaced by Normal";
-             break;
-+        }
-         case WindowLayer::ScreenLockNotification:
--            plasmaShellSurface->setRole(PlasmaShellSurface::Role::ScreenLockNotification);
-+        {
-+            plasmaShellSurface->setRole(PlasmaShellSurface::Role::Normal);
-+            qWarning()<<"plasmashellsurface does not surport ScreenLockNotification layer, replaced by Normal";
-             break;
-+        }
-         case WindowLayer::Switcher:
-         {
-             plasmaShellSurface->setRole(PlasmaShellSurface::Role::Panel);
-             qWarning()<<"plasmashellsurface does not surport Switcher layer, replaced by Panel";
-             break;
-         }
--
-         default:
-         {
-             qWarning()<<"It is not a surported window layer by kde protocols! id:" << (int)layer;
-@@ -597,24 +616,6 @@ WindowLayer KdeWaylandInterface::windowLayer(QWindow *window)
-         case PlasmaShellSurface::Role::CriticalNotification:
-             layer = WindowLayer::CriticalNotification;
-             break;
--        case PlasmaShellSurface::Role::ScreenLock:
--            layer = WindowLayer::ScreenLock;
--            break;
--        case PlasmaShellSurface::Role::Watermark:
--            layer = WindowLayer::Watermark;
--            break;
--        case PlasmaShellSurface::Role::SystemWindow:
--            layer = WindowLayer::SystemWindow;
--            break;
--        case PlasmaShellSurface::Role::InputPanel:
--            layer = WindowLayer::InputPanel;
--            break;
--        case PlasmaShellSurface::Role::Logout:
--            layer = WindowLayer::Logout;
--            break;
--        case PlasmaShellSurface::Role::ScreenLockNotification:
--            layer = WindowLayer::ScreenLockNotification;
--            break;
-         default:
-             layer = WindowLayer::Normal;
-             break;
-diff --git a/kysdk-waylandhelper/src/windowmanager/kyatoms_p.h b/kysdk-waylandhelper/src/windowmanager/kyatoms_p.h
-new file mode 100644
-index 0000000..0445006
---- /dev/null
-+++ b/kysdk-waylandhelper/src/windowmanager/kyatoms_p.h
-@@ -0,0 +1,180 @@
-+
-+#if (!defined ATOMS_H) || (defined ENUM_CREATE_CHAR_ARRAY)
-+
-+#undef ENUM_BEGIN
-+#undef ENUM
-+#undef ENUM_END
-+#undef ENUM_COUNT
-+
-+// the following macros are set in a way so that
-+// the code below will either construct an enum for "<typ>"
-+// or a const *char array "<typ>Strings" containing all enum
-+// symbols as strings, depending on whether ENUM_CREATE_CHAR_ARRAY is
-+// defined
-+// The enum gets one extra item "<typ>Count", describing also the
-+// length of the array
-+
-+// The header is safe for re-inclusion unless you define ENUM_CREATE_CHAR_ARRAY
-+// which is therefore undefined after usage
-+
-+// => You *must* "#define ENUM_CREATE_CHAR_ARRAY 1" *every* time you want to create
-+// a string array!
-+
-+// clang-format off
-+
-+#ifndef ENUM_CREATE_CHAR_ARRAY
-+#define ATOMS_H
-+#define ENUM_BEGIN(typ) enum typ {
-+#define ENUM(nam) nam
-+#define ENUM_COUNT(typ) , typ##Count
-+#else
-+#define ENUM_BEGIN(typ) const char * typ##Strings [] = {
-+#define ENUM(nam) #nam
-+#define ENUM_COUNT(typ)
-+#undef ENUM_CREATE_CHAR_ARRAY
-+#endif
-+
-+#define ENUM_END(typ) };
-+
-+ENUM_BEGIN(KyAtom)
-+    ENUM(UTF8_STRING),
-+
-+    // root window properties
-+    ENUM(_NET_SUPPORTED),
-+    ENUM(_NET_SUPPORTING_WM_CHECK),
-+    ENUM(_NET_CLIENT_LIST),
-+    ENUM(_NET_CLIENT_LIST_STACKING),
-+    ENUM(_NET_NUMBER_OF_DESKTOPS),
-+    ENUM(_NET_DESKTOP_GEOMETRY),
-+    ENUM(_NET_DESKTOP_VIEWPORT),
-+    ENUM(_NET_CURRENT_DESKTOP),
-+    ENUM(_NET_DESKTOP_NAMES),
-+    ENUM(_NET_ACTIVE_WINDOW),
-+    ENUM(_NET_WORKAREA),
-+    ENUM(_NET_VIRTUAL_ROOTS),
-+    ENUM(_NET_DESKTOP_LAYOUT),
-+    ENUM(_NET_SHOWING_DESKTOP),
-+
-+    // root window messages
-+    ENUM(_NET_CLOSE_WINDOW),
-+    ENUM(_NET_RESTACK_WINDOW),
-+    ENUM(_NET_WM_MOVERESIZE),
-+    ENUM(_NET_MOVERESIZE_WINDOW),
-+
-+    // application window properties
-+    ENUM(_NET_WM_NAME),
-+    ENUM(_NET_WM_VISIBLE_NAME),
-+    ENUM(_NET_WM_ICON_NAME),
-+    ENUM(_NET_WM_VISIBLE_ICON_NAME),
-+    ENUM(_NET_WM_DESKTOP),
-+    ENUM(_NET_WM_WINDOW_TYPE),
-+    ENUM(_NET_WM_STATE),
-+    ENUM(_NET_WM_STRUT),
-+    ENUM(_NET_WM_STRUT_PARTIAL),
-+    ENUM(_NET_WM_ICON_GEOMETRY),
-+    ENUM(_NET_WM_ICON),
-+    ENUM(_NET_WM_PID),
-+    ENUM(_NET_WM_USER_TIME),
-+    ENUM(_NET_WM_HANDLED_ICONS),
-+    ENUM(_NET_STARTUP_ID),
-+    ENUM(_NET_WM_ALLOWED_ACTIONS),
-+    ENUM(WM_WINDOW_ROLE),
-+    ENUM(_NET_FRAME_EXTENTS),
-+    ENUM(_NET_WM_WINDOW_OPACITY),
-+    ENUM(_NET_WM_FULLSCREEN_MONITORS),
-+    ENUM(_NET_WM_OPAQUE_REGION),
-+    ENUM(_KDE_NET_WM_DESKTOP_FILE),
-+    // used to determine whether application window is managed or not
-+    ENUM(WM_STATE),
-+
-+    // application window types
-+    ENUM(_NET_WM_WINDOW_TYPE_NORMAL),
-+    ENUM(_NET_WM_WINDOW_TYPE_DESKTOP),
-+    ENUM(_NET_WM_WINDOW_TYPE_DOCK),
-+    ENUM(_NET_WM_WINDOW_TYPE_TOOLBAR),
-+    ENUM(_NET_WM_WINDOW_TYPE_MENU),
-+    ENUM(_NET_WM_WINDOW_TYPE_DIALOG),
-+    ENUM(_NET_WM_WINDOW_TYPE_UTILITY),
-+    ENUM(_NET_WM_WINDOW_TYPE_SPLASH),
-+    ENUM(_NET_WM_WINDOW_TYPE_DROPDOWN_MENU),
-+    ENUM(_NET_WM_WINDOW_TYPE_POPUP_MENU),
-+    ENUM(_NET_WM_WINDOW_TYPE_TOOLTIP),
-+    ENUM(_NET_WM_WINDOW_TYPE_NOTIFICATION),
-+    ENUM(_NET_WM_WINDOW_TYPE_COMBO),
-+    ENUM(_NET_WM_WINDOW_TYPE_DND),
-+
-+    // application window state
-+    ENUM(_NET_WM_STATE_MODAL),
-+    ENUM(_NET_WM_STATE_STICKY),
-+    ENUM(_NET_WM_STATE_MAXIMIZED_VERT),
-+    ENUM(_NET_WM_STATE_MAXIMIZED_HORZ),
-+    ENUM(_NET_WM_STATE_SHADED),
-+    ENUM(_NET_WM_STATE_SKIP_TASKBAR),
-+    ENUM(_NET_WM_STATE_SKIP_PAGER),
-+    ENUM(_NET_WM_STATE_HIDDEN),
-+    ENUM(_NET_WM_STATE_FULLSCREEN),
-+    ENUM(_NET_WM_STATE_ABOVE),
-+    ENUM(_NET_WM_STATE_BELOW),
-+    ENUM(_NET_WM_STATE_DEMANDS_ATTENTION),
-+    ENUM(_NET_WM_STATE_FOCUSED),
-+    // KDE-specific atom
-+    ENUM(_KDE_NET_WM_STATE_SKIP_SWITCHER),
-+
-+    // allowed actions
-+    ENUM(_NET_WM_ACTION_MOVE),
-+    ENUM(_NET_WM_ACTION_RESIZE),
-+    ENUM(_NET_WM_ACTION_MINIMIZE),
-+    ENUM(_NET_WM_ACTION_SHADE),
-+    ENUM(_NET_WM_ACTION_STICK),
-+    ENUM(_NET_WM_ACTION_MAXIMIZE_VERT),
-+    ENUM(_NET_WM_ACTION_MAXIMIZE_HORZ),
-+    ENUM(_NET_WM_ACTION_FULLSCREEN),
-+    ENUM(_NET_WM_ACTION_CHANGE_DESKTOP),
-+    ENUM(_NET_WM_ACTION_CLOSE),
-+
-+    // KDE extensions
-+    ENUM(_KDE_NET_WM_FRAME_STRUT),
-+    ENUM(_KDE_NET_WM_WINDOW_TYPE_OVERRIDE),
-+    ENUM(_KDE_NET_WM_WINDOW_TYPE_TOPMENU),
-+    ENUM(_KDE_NET_WM_WINDOW_TYPE_ON_SCREEN_DISPLAY),
-+    ENUM(_KDE_NET_WM_WINDOW_TYPE_CRITICAL_NOTIFICATION),
-+    ENUM(_KDE_NET_WM_WINDOW_TYPE_APPLET_POPUP),
-+    ENUM(_KDE_NET_WM_TEMPORARY_RULES),
-+    ENUM(_NET_WM_FRAME_OVERLAP),
-+    ENUM(_KDE_NET_WM_APPMENU_SERVICE_NAME),
-+    ENUM(_KDE_NET_WM_APPMENU_OBJECT_PATH),
-+
-+    // UKUI extensions
-+    ENUM(_UKUI_NET_WM_WINDOW_TYPE_SYSTEMWINDOW),
-+    ENUM(_UKUI_NET_WM_WINDOW_TYPE_INPUTPANEL),
-+    ENUM(_UKUI_NET_WM_WINDOW_TYPE_LOGOUT),
-+    ENUM(_UKUI_NET_WM_WINDOW_TYPE_SCREENLOCK),
-+    ENUM(_UKUI_NET_WM_WINDOW_TYPE_SCREENLOCKNOTIFICATION),
-+    ENUM(_UKUI_NET_WM_WINDOW_TYPE_WATERMARK),
-+
-+    // deprecated and naming convention violation
-+    ENUM(_NET_WM_STATE_STAYS_ON_TOP),
-+
-+    // GTK extensions
-+    ENUM(_GTK_FRAME_EXTENTS),
-+    ENUM(_GTK_APPLICATION_ID),
-+    ENUM(_GTK_SHOW_WINDOW_MENU),
-+
-+    // application protocols
-+    ENUM(WM_PROTOCOLS),
-+    ENUM(WM_TAKE_FOCUS),
-+    ENUM(WM_DELETE_WINDOW),
-+    ENUM(_NET_WM_PING),
-+    ENUM(_NET_WM_SYNC_REQUEST),
-+    ENUM(_NET_WM_CONTEXT_HELP),
-+
-+    // ability flags
-+    ENUM(_NET_WM_FULL_PLACEMENT),
-+    ENUM(_NET_WM_BYPASS_COMPOSITOR),
-+    ENUM(_KDE_NET_WM_ACTIVITIES),
-+    ENUM(_KDE_NET_WM_BLOCK_COMPOSITING),
-+    ENUM(_KDE_NET_WM_SHADOW)
-+    ENUM_COUNT(KyAtom)
-+ENUM_END(KyAtom)
-+
-+#endif // ATOMS_H
-diff --git a/kysdk-waylandhelper/src/windowmanager/wayland-plasma-window-management-client-protocol.h b/kysdk-waylandhelper/src/windowmanager/wayland-plasma-window-management-client-protocol.h
-index f40123c..acc5d4e 100644
---- a/kysdk-waylandhelper/src/windowmanager/wayland-plasma-window-management-client-protocol.h
-+++ b/kysdk-waylandhelper/src/windowmanager/wayland-plasma-window-management-client-protocol.h
-@@ -1,4 +1,4 @@
--/* Generated by wayland-scanner 1.20.0 */
-+/* Generated by wayland-scanner 1.22.0 */
- 
- #ifndef PLASMA_WINDOW_MANAGEMENT_CLIENT_PROTOCOL_H
- #define PLASMA_WINDOW_MANAGEMENT_CLIENT_PROTOCOL_H
-@@ -572,6 +572,17 @@ struct org_kde_plasma_window_listener {
- 	void (*activity_left)(void *data,
- 			      struct org_kde_plasma_window *org_kde_plasma_window,
- 			      const char *id);
-+	/**
-+	 * X11 resource name has changed
-+	 *
-+	 * This event will be sent when the X11 resource name of the
-+	 * window has changed. This is only set for XWayland windows.
-+	 * @param resource_name resource name
-+	 * @since 16
-+	 */
-+	void (*resource_name_changed)(void *data,
-+				      struct org_kde_plasma_window *org_kde_plasma_window,
-+				      const char *resource_name);
- };
- 
- /**
-@@ -665,6 +676,10 @@ org_kde_plasma_window_add_listener(struct org_kde_plasma_window *org_kde_plasma_
-  * @ingroup iface_org_kde_plasma_window
-  */
- #define ORG_KDE_PLASMA_WINDOW_ACTIVITY_LEFT_SINCE_VERSION 14
-+/**
-+ * @ingroup iface_org_kde_plasma_window
-+ */
-+#define ORG_KDE_PLASMA_WINDOW_RESOURCE_NAME_CHANGED_SINCE_VERSION 16
- 
- /**
-  * @ingroup iface_org_kde_plasma_window
-diff --git a/kysdk-waylandhelper/src/windowmanager/wayland-plasma-window-management-protocol.c b/kysdk-waylandhelper/src/windowmanager/wayland-plasma-window-management-protocol.c
-index 4c65dba..2d693a6 100644
---- a/kysdk-waylandhelper/src/windowmanager/wayland-plasma-window-management-protocol.c
-+++ b/kysdk-waylandhelper/src/windowmanager/wayland-plasma-window-management-protocol.c
-@@ -1,4 +1,4 @@
--/* Generated by wayland-scanner 1.20.0 */
-+/* Generated by wayland-scanner 1.22.0 */
- 
- /*
-  * SPDX-FileCopyrightText: 2013-2014 Pier Luigi Fiorini
-@@ -50,7 +50,7 @@ static const struct wl_message org_kde_plasma_window_management_events[] = {
- };
- 
- WL_EXPORT const struct wl_interface org_kde_plasma_window_management_interface = {
--	"org_kde_plasma_window_management", 15,
-+	"org_kde_plasma_window_management", 16,
- 	3, org_kde_plasma_window_management_requests,
- 	5, org_kde_plasma_window_management_events,
- };
-@@ -90,12 +90,13 @@ static const struct wl_message org_kde_plasma_window_events[] = {
- 	{ "application_menu", "10ss", plasma_window_management_types + 0 },
- 	{ "activity_entered", "14s", plasma_window_management_types + 0 },
- 	{ "activity_left", "14s", plasma_window_management_types + 0 },
-+	{ "resource_name_changed", "16s", plasma_window_management_types + 0 },
- };
- 
- WL_EXPORT const struct wl_interface org_kde_plasma_window_interface = {
--	"org_kde_plasma_window", 15,
-+	"org_kde_plasma_window", 16,
- 	15, org_kde_plasma_window_requests,
--	16, org_kde_plasma_window_events,
-+	17, org_kde_plasma_window_events,
- };
- 
- static const struct wl_message org_kde_plasma_activation_feedback_requests[] = {
-diff --git a/kysdk-waylandhelper/src/windowmanager/xcbinterface.cpp b/kysdk-waylandhelper/src/windowmanager/xcbinterface.cpp
-index 8399a49..678e536 100644
---- a/kysdk-waylandhelper/src/windowmanager/xcbinterface.cpp
-+++ b/kysdk-waylandhelper/src/windowmanager/xcbinterface.cpp
-@@ -21,7 +21,8 @@
-  */
- 
- #include "xcbinterface.h"
--
-+#include "kwindowinfo.h"
-+#include "kyatoms_p.h"
- #include <QRect>
- #include <QIcon>
- #include <QWidget>
-@@ -30,8 +31,168 @@
- #include <KWindowInfo>
- #include <kiconloader.h>
- #include <QWindow>
--#include "kwindowinfo.h"
- #include <QDebug>
-+#include <QSharedData>
-+
-+class KylinAtoms : public QSharedData
-+{
-+public:
-+    explicit KylinAtoms(xcb_connection_t *c);
-+
-+    xcb_atom_t atom(KyAtom atom) const
-+    {
-+        return m_atoms[atom];
-+    }
-+    xcb_connection_t *m_connection;
-+private:
-+    void init();
-+    xcb_atom_t m_atoms[KyAtomCount];
-+
-+};
-+
-+typedef QHash<xcb_connection_t *, QSharedDataPointer<KylinAtoms>> AtomHash;
-+Q_GLOBAL_STATIC(AtomHash, s_gAtomsHash)
-+
-+static QSharedDataPointer<KylinAtoms> atomsForConnection(xcb_connection_t *c)
-+{
-+    auto it = s_gAtomsHash->constFind(c);
-+    if (it == s_gAtomsHash->constEnd()) {
-+        QSharedDataPointer<KylinAtoms> atom(new KylinAtoms(c));
-+        s_gAtomsHash->insert(c, atom);
-+        return atom;
-+    }
-+    return it.value();
-+}
-+
-+class KyWinInfo
-+{
-+public:
-+    explicit KyWinInfo(xcb_connection_t *c,xcb_window_t w)
-+    {
-+        atoms = atomsForConnection(c);
-+        connection = c;
-+        window = w;
-+    }
-+    xcb_atom_t atom(KyAtom atom) const
-+    {
-+        return atoms->atom(atom);
-+    }
-+    void setWindowLayer(WindowLayer layer);
-+    QSharedDataPointer<KylinAtoms> atoms;
-+    xcb_connection_t *connection;
-+    xcb_window_t window;
-+};
-+
-+
-+
-+void KyWinInfo::setWindowLayer(WindowLayer layer)
-+{
-+
-+    int len;
-+    uint32_t data[2];
-+
-+    switch (layer)
-+    {
-+    case WindowLayer::Panel:
-+        data[0] = this->atom(_NET_WM_WINDOW_TYPE_DOCK);
-+        data[1] = XCB_NONE;
-+        len = 1;
-+        break;
-+
-+    case WindowLayer::Desktop:
-+        data[0] = this->atom(_NET_WM_WINDOW_TYPE_DESKTOP);
-+        data[1] = XCB_NONE;
-+        len = 1;
-+        break;
-+
-+    case WindowLayer::ToolTip:
-+        data[0] = this->atom(_NET_WM_WINDOW_TYPE_TOOLTIP);
-+        data[1] = XCB_NONE;
-+        len = 1;
-+        break;
-+
-+    case WindowLayer::Notification:
-+        data[0] = this->atom(_NET_WM_WINDOW_TYPE_NOTIFICATION);
-+        data[1] = this->atom(_NET_WM_WINDOW_TYPE_UTILITY); // fallback (utility seems to be the best)
-+        len = 1;
-+        break;
-+
-+    case WindowLayer::OnScreenDisplay:
-+        data[0] = this->atom(_KDE_NET_WM_WINDOW_TYPE_ON_SCREEN_DISPLAY);
-+        data[1] = this->atom(_NET_WM_WINDOW_TYPE_NOTIFICATION);
-+        len = 2;
-+        break;
-+
-+    case WindowLayer::CriticalNotification:
-+        data[0] = this->atom(_KDE_NET_WM_WINDOW_TYPE_CRITICAL_NOTIFICATION);
-+        data[1] = this->atom(_NET_WM_WINDOW_TYPE_NOTIFICATION);
-+        len = 2;
-+        break;
-+
-+    case WindowLayer::AppletPop:
-+        data[0] = this->atom(_KDE_NET_WM_WINDOW_TYPE_APPLET_POPUP);
-+        data[1] = XCB_NONE;
-+        len = 1;
-+        break;
-+
-+    // UKUI extensions
-+    case WindowLayer::SystemWindow:
-+        data[0] = this->atom(_UKUI_NET_WM_WINDOW_TYPE_SYSTEMWINDOW);
-+        data[1] = XCB_NONE;
-+        len = 1;
-+        break;
-+
-+    case WindowLayer::InputPanel:
-+        data[0] = this->atom(_UKUI_NET_WM_WINDOW_TYPE_INPUTPANEL);
-+        data[1] = XCB_NONE;
-+        len = 1;
-+        break;
-+
-+    case WindowLayer::Logout:
-+        data[0] = this->atom(_UKUI_NET_WM_WINDOW_TYPE_LOGOUT);
-+        data[1] = XCB_NONE;
-+        len = 1;
-+        break;
-+
-+    case WindowLayer::ScreenLock:
-+        data[0] = this->atom(_UKUI_NET_WM_WINDOW_TYPE_SCREENLOCK);
-+        data[1] = XCB_NONE;
-+        len = 1;
-+        break;
-+
-+    case WindowLayer::ScreenLockNotification:
-+        data[0] = this->atom(_UKUI_NET_WM_WINDOW_TYPE_SCREENLOCKNOTIFICATION);
-+        data[1] = XCB_NONE;
-+        len = 1;
-+        break;
-+
-+    case WindowLayer::Watermark:
-+        data[0] = this->atom(_UKUI_NET_WM_WINDOW_TYPE_WATERMARK);
-+        data[1] = XCB_NONE;
-+        len = 1;
-+        break;
-+
-+    default:
-+    case WindowLayer::Normal:
-+        data[0] = this->atom(_NET_WM_WINDOW_TYPE_NORMAL);
-+        data[1] = XCB_NONE;
-+        len = 1;
-+        break;
-+    }
-+
-+    xcb_change_property(this->connection, XCB_PROP_MODE_REPLACE, this->window, atom(_NET_WM_WINDOW_TYPE), XCB_ATOM_ATOM, 32, len, (const void *)&data);
-+}
-+
-+KylinAtoms::KylinAtoms(xcb_connection_t *c)
-+    : QSharedData()
-+    , m_connection(c)
-+{
-+    for (int i = 0; i < KyAtomCount; ++i) {
-+        m_atoms[i] = XCB_ATOM_NONE;
-+    }
-+    init();
-+}
-+
- XcbInterface::XcbInterface(QObject *parent)
-     :AbstractInterface(parent)
- {
-@@ -391,60 +552,8 @@ void XcbInterface::setWindowLayer(QWindow *window, WindowLayer layer)
- {
-     if(!window)
-         return;
--    NET::WindowType type;
--
--    switch(layer)
--    {
--        case WindowLayer::Desktop:
--            type = NET::Desktop;
--            break;
--        case WindowLayer::Panel:
--            type = NET::Dock;
--            break;
--        case WindowLayer::OnScreenDisplay:
--            type = NET::OnScreenDisplay;
--            break;
--        case WindowLayer::Notification:
--            type = NET::Notification;
--            break;
--        case WindowLayer::ToolTip:
--            type = NET::Tooltip;
--            break;
--        case WindowLayer::CriticalNotification:
--            type = NET::CriticalNotification;
--            break;
--        case WindowLayer::AppletPop:
--            type = NET::AppletPopup;
--            break;
--        case WindowLayer::ScreenLock:
--            type = NET::ScreenLock;
--            break;
--        case WindowLayer::Watermark:
--            type = NET::Watermark;
--            break;
--        case WindowLayer::SystemWindow:
--            type = NET::SystemWindow;
--            break;
--        case WindowLayer::InputPanel:
--            type = NET::InputPanel;
--            break;
--        case WindowLayer::Logout:
--            type = NET::Logout;
--            break;
--        case WindowLayer::ScreenLockNotification:
--            type = NET::ScreenLockNotification;
--            break;
--        case WindowLayer::Switcher:
--            type = NET::Dock;
--            break;
--        default:
--        {
--            qWarning()<<"It is not a surported window layer by xcb protocols! id:" << (int)layer;
--            type = NET::Normal;
--            break;
--        }
--    }
--    KWindowSystem::setType(window->winId(), type);
-+    KyWinInfo info(QX11Info::connection(), window->winId());
-+    info.setWindowLayer(layer);
- }
- 
- WindowLayer XcbInterface::windowLayer(QWindow *window)
-@@ -524,24 +633,6 @@ WindowLayer XcbInterface::windowLayer(QWindow *window)
-         case NET::CriticalNotification:
-             layer = WindowLayer::CriticalNotification;
-             break;
--        case NET::SystemWindow:
--            layer = WindowLayer::SystemWindow;
--            break;
--        case NET::InputPanel:
--            layer = WindowLayer::InputPanel;
--            break;
--        case NET::Logout:
--            layer = WindowLayer::Logout;
--            break;
--        case NET::ScreenLock:
--            layer = WindowLayer::ScreenLock;
--            break;
--        case NET::ScreenLockNotification:
--            layer = WindowLayer::ScreenLockNotification;
--            break;
--        case NET::Watermark:
--            layer = WindowLayer::Watermark;
--            break;
-         case NET::AppletPopup:
-             layer = WindowLayer::AppletPop;
-             break;
-@@ -645,3 +736,26 @@ void XcbInterface::windowChangedProxy(WId wid, NET::Properties prop1, NET::Prope
-     if(prop1.testFlag(NET::WMDesktop) && info.onAllDesktops())
-         emit onAllDesktopsChanged(wid);
- }
-+
-+
-+void KylinAtoms::init()
-+{
-+#define ENUM_CREATE_CHAR_ARRAY 1
-+#include "kyatoms_p.h" // creates const char* array "KyAtomStrings"
-+    // Send the intern atom requests
-+    xcb_intern_atom_cookie_t cookies[KyAtomCount];
-+    for (int i = 0; i < KyAtomCount; ++i) {
-+        cookies[i] = xcb_intern_atom(m_connection, false, strlen(KyAtomStrings[i]), KyAtomStrings[i]);
-+    }
-+
-+    // Get the replies
-+    for (int i = 0; i < KyAtomCount; ++i) {
-+        xcb_intern_atom_reply_t *reply = xcb_intern_atom_reply(m_connection, cookies[i], nullptr);
-+        if (!reply) {
-+            continue;
-+        }
-+
-+        m_atoms[i] = reply->atom;
-+        free(reply);
-+    }
-+}
-diff --git a/kysdk-waylandhelper/test/testBlurManager/.gitignore b/kysdk-waylandhelper/test/testBlurManager/.gitignore
-new file mode 100644
-index 0000000..fab7372
---- /dev/null
-+++ b/kysdk-waylandhelper/test/testBlurManager/.gitignore
-@@ -0,0 +1,73 @@
-+# This file is used to ignore files which are generated
-+# ----------------------------------------------------------------------------
-+
-+*~
-+*.autosave
-+*.a
-+*.core
-+*.moc
-+*.o
-+*.obj
-+*.orig
-+*.rej
-+*.so
-+*.so.*
-+*_pch.h.cpp
-+*_resource.rc
-+*.qm
-+.#*
-+*.*#
-+core
-+!core/
-+tags
-+.DS_Store
-+.directory
-+*.debug
-+Makefile*
-+*.prl
-+*.app
-+moc_*.cpp
-+ui_*.h
-+qrc_*.cpp
-+Thumbs.db
-+*.res
-+*.rc
-+/.qmake.cache
-+/.qmake.stash
-+
-+# qtcreator generated files
-+*.pro.user*
-+
-+# xemacs temporary files
-+*.flc
-+
-+# Vim temporary files
-+.*.swp
-+
-+# Visual Studio generated files
-+*.ib_pdb_index
-+*.idb
-+*.ilk
-+*.pdb
-+*.sln
-+*.suo
-+*.vcproj
-+*vcproj.*.*.user
-+*.ncb
-+*.sdf
-+*.opensdf
-+*.vcxproj
-+*vcxproj.*
-+
-+# MinGW generated files
-+*.Debug
-+*.Release
-+
-+# Python byte code
-+*.pyc
-+
-+# Binaries
-+# --------
-+*.dll
-+*.exe
-+
-diff --git a/kysdk-waylandhelper/test/testBlurManager/main.cpp b/kysdk-waylandhelper/test/testBlurManager/main.cpp
-new file mode 100644
-index 0000000..b0a4ec2
---- /dev/null
-+++ b/kysdk-waylandhelper/test/testBlurManager/main.cpp
-@@ -0,0 +1,11 @@
-+#include "widget.h"
-+
-+#include <QApplication>
-+
-+int main(int argc, char *argv[])
-+{
-+    QApplication a(argc, argv);
-+    Widget w;
-+    w.show();
-+    return a.exec();
-+}
-diff --git a/kysdk-waylandhelper/test/testBlurManager/testBlurManager.pro b/kysdk-waylandhelper/test/testBlurManager/testBlurManager.pro
-new file mode 100644
-index 0000000..ea5b244
---- /dev/null
-+++ b/kysdk-waylandhelper/test/testBlurManager/testBlurManager.pro
-@@ -0,0 +1,24 @@
-+QT       += core gui KWindowSystem
-+
-+greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
-+
-+CONFIG += c++11 link_pkgconfig
-+#PKGCONFIG += kysdk-waylandhelper
-+INCLUDEPATH += /home/kylin/openkylin/libkysdk-applications/kysdk-waylandhelper/src/
-+LIBS+= -L/home/kylin/openkylin/libkysdk-applications/build-kysdk-waylandhelper-unknown-Debug -lkysdk-waylandhelper
-+
-+# You can make your code fail to compile if it uses deprecated APIs.
-+# In order to do so, uncomment the following line.
-+#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
-+
-+SOURCES += \
-+    main.cpp \
-+    widget.cpp
-+
-+HEADERS += \
-+    widget.h
-+
-+# Default rules for deployment.
-+qnx: target.path = /tmp/$${TARGET}/bin
-+else: unix:!android: target.path = /opt/$${TARGET}/bin
-+!isEmpty(target.path): INSTALLS += target
-diff --git a/kysdk-waylandhelper/test/testBlurManager/widget.cpp b/kysdk-waylandhelper/test/testBlurManager/widget.cpp
-new file mode 100644
-index 0000000..528371b
---- /dev/null
-+++ b/kysdk-waylandhelper/test/testBlurManager/widget.cpp
-@@ -0,0 +1,32 @@
-+#include "widget.h"
-+
-+#include "widget.h"
-+#include <ukuistylehelper/ukuistylehelper.h>
-+#include <windowmanager/windowmanager.h>
-+#include <blurmanager/blurmanager.h>
-+#include <KWindowEffects>
-+Widget::Widget(QWidget *parent)
-+    : QWidget(parent)
-+{
-+    m_btn = new QPushButton("switch",this);
-+    m_btn->setCheckable(true);
-+    m_btn->move(100,100);
-+    m_testWidget = new QWidget();
-+
-+    connect(m_btn,&QPushButton::clicked,this,[=](bool checked)
-+    {
-+        if(checked)
-+        {
-+            m_testWidget->setAttribute(Qt::WA_TranslucentBackground);
-+            m_testWidget->show();
-+            kdk::BlurManager::setBlurBehindWithStrength(m_testWidget->windowHandle(),true, QRegion(m_testWidget->rect()),400);
-+        }
-+        else
-+            m_testWidget->hide();
-+
-+    });
-+}
-+
-+Widget::~Widget()
-+{
-+}
-diff --git a/kysdk-waylandhelper/test/testBlurManager/widget.h b/kysdk-waylandhelper/test/testBlurManager/widget.h
-new file mode 100644
-index 0000000..8cdb61f
---- /dev/null
-+++ b/kysdk-waylandhelper/test/testBlurManager/widget.h
-@@ -0,0 +1,19 @@
-+#ifndef WIDGET_H
-+#define WIDGET_H
-+
-+#include <QWidget>
-+#include <QPushButton>
-+
-+class Widget : public QWidget
-+{
-+    Q_OBJECT
-+
-+public:
-+    Widget(QWidget *parent = nullptr);
-+    ~Widget();
-+
-+private:
-+    QPushButton*m_btn;
-+    QWidget *m_testWidget;
-+};
-+#endif // WIDGET_H
diff -Nru libkysdk-applications-2.5.1.0/debian/patches/0009-41.patch libkysdk-applications-2.5.2.0/debian/patches/0009-41.patch
--- libkysdk-applications-2.5.1.0/debian/patches/0009-41.patch	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/debian/patches/0009-41.patch	2025-03-17 13:09:05.000000000 +0800
@@ -0,0 +1,58442 @@
+From: "Mr.Sun" <sunzhen1@kylinos.cn>
+Date: Fri, 14 Mar 2025 06:05:14 +0000
+Subject: =?utf-8?b?ITQxIOS7o+eggeagvOW8j+WMluWkhOeQhiBNZXJnZSBwdWxsIHJlcXVl?=
+ =?utf-8?b?c3QgITQxIGZyb20g5YiY5p2wL3dvcmsvdWt1aV9zaGVsbF92MQ==?=
+
+---
+ .clang-format                                      |   86 ++
+ .gitignore                                         |    7 +
+ kysdk-alm/src/singleapplication/localpeer.cpp      |    8 +-
+ kysdk-alm/src/singleapplication/localpeer.h        |    2 +-
+ kysdk-alm/src/singleapplication/lockedfile.cpp     |    6 +-
+ kysdk-alm/src/singleapplication/lockedfile.h       |    4 +-
+ .../src/singleapplication/lockedfile_unix.cpp      |    6 +-
+ .../src/singleapplication/singleapplication.cpp    |   21 +-
+ kysdk-alm/test/testsingleapplication/main.cpp      |    2 +-
+ kysdk-appconf2/src/kconf2.cpp                      |  123 +--
+ kysdk-appconf2/src/kconf2.h                        |    8 +-
+ kysdk-appconf2/test/testkconf2/widget.cpp          |   96 +-
+ kysdk-appconf2/test/testkconf2/widget.h            |   24 +-
+ kysdk-application.pro                              |   17 +-
+ kysdk-kabase/kabase/buried_point.cpp               |   14 +-
+ kysdk-kabase/kabase/gsettings.cpp                  |    1 -
+ kysdk-kabase/kabase/image/converter.cpp            |   10 +-
+ kysdk-kabase/kabase/image/image.cpp                |    4 +-
+ kysdk-kabase/kabase/image/image_load.cpp           |   15 +-
+ kysdk-kabase/kabase/image/image_save.cpp           |   17 +-
+ kysdk-kabase/kabase/image/utils.cpp                |    6 +-
+ .../image_conver/image_conver.cpp                  |    9 +-
+ .../kylin_image_codec/image_load/image_load.cpp    |   44 +-
+ .../kylin_image_codec/image_load/loadmovie.cpp     |    4 +-
+ .../kylin_image_codec/image_save/image_save.cpp    |   12 +-
+ .../kylin_image_codec/image_save/savemovie.cpp     |   23 +-
+ .../kabase/kylin_image_codec/kylinimagecodec.cpp   |    4 +-
+ .../kabase/kylin_system/session_management.cpp     |    6 +-
+ .../kabase/kylin_system/system_information.cpp     |   10 +-
+ .../kabase/kylin_system/theme_management.cpp       |   10 +-
+ kysdk-kabase/kabase/kylin_system/user_manual.cpp   |    2 +-
+ kysdk-kabase/kabase/kylin_system/xatom_helper.cpp  |   21 +-
+ kysdk-kabase/kabase/log.cpp                        |    8 +-
+ .../kabase/single_application/local_peer.cpp       |    9 +-
+ .../kabase/single_application/locked_file.cpp      |    6 +-
+ .../kabase/single_application/locked_file_unix.cpp |    6 +-
+ .../single_application/single_application.cpp      |   20 +-
+ .../application_access_test/application_a/main.cpp |    2 +-
+ .../application_access_test/application_b/main.cpp |    2 +-
+ kysdk-kabase/test/gsettings_test.cpp               |    6 +-
+ kysdk-kabase/test/image_test.cpp                   |    8 +-
+ kysdk-kabase/test/main.cpp                         |   40 +-
+ kysdk-kabase/test/widget_test.cpp                  |    6 +-
+ kysdk-qtwidgets/src/accessinfohelper.h             |   75 +-
+ kysdk-qtwidgets/src/gui_g.h                        |    4 +-
+ kysdk-qtwidgets/src/kaboutdialog.cpp               |  205 ++--
+ kysdk-qtwidgets/src/kaboutdialog.h                 |   38 +-
+ kysdk-qtwidgets/src/kaddfilebutton.cpp             |   82 +-
+ kysdk-qtwidgets/src/kaddfilebutton.h               |   15 +-
+ kysdk-qtwidgets/src/karrowtabbar.cpp               |   70 +-
+ kysdk-qtwidgets/src/karrowtabbar.h                 |   14 +-
+ kysdk-qtwidgets/src/kbackgroundgroup.cpp           |  302 +++---
+ kysdk-qtwidgets/src/kbackgroundgroup.h             |   21 +-
+ kysdk-qtwidgets/src/kbadge.cpp                     |   71 +-
+ kysdk-qtwidgets/src/kbadge.h                       |   20 +-
+ kysdk-qtwidgets/src/kballontip.cpp                 |  172 ++-
+ kysdk-qtwidgets/src/kballontip.h                   |   37 +-
+ kysdk-qtwidgets/src/kborderbutton.cpp              |  232 ++--
+ kysdk-qtwidgets/src/kborderbutton.h                |   25 +-
+ kysdk-qtwidgets/src/kborderlessbutton.cpp          |  212 ++--
+ kysdk-qtwidgets/src/kborderlessbutton.h            |   21 +-
+ kysdk-qtwidgets/src/kbreadcrumb.cpp                |   97 +-
+ kysdk-qtwidgets/src/kbreadcrumb.h                  |   10 +-
+ kysdk-qtwidgets/src/kbubblewidget.cpp              |  178 ++--
+ kysdk-qtwidgets/src/kbubblewidget.h                |   46 +-
+ kysdk-qtwidgets/src/kbuttonbox.cpp                 |  132 +--
+ kysdk-qtwidgets/src/kbuttonbox.h                   |   14 +-
+ kysdk-qtwidgets/src/kclocktimer.cpp                |   67 +-
+ kysdk-qtwidgets/src/kclocktimer.h                  |   10 +-
+ kysdk-qtwidgets/src/kcolorbutton.cpp               |  115 +-
+ kysdk-qtwidgets/src/kcolorbutton.h                 |   15 +-
+ kysdk-qtwidgets/src/kcolorcombobox.cpp             |  127 ++-
+ kysdk-qtwidgets/src/kcolorcombobox.h               |   28 +-
+ kysdk-qtwidgets/src/kcomboboxwidget.cpp            |  138 ++-
+ kysdk-qtwidgets/src/kcomboboxwidget.h              |    8 +-
+ kysdk-qtwidgets/src/kcommentpanel.cpp              |  155 ++-
+ kysdk-qtwidgets/src/kcommentpanel.h                |   17 +-
+ kysdk-qtwidgets/src/kcrumb.cpp                     |  184 ++--
+ kysdk-qtwidgets/src/kcrumb.h                       |   14 +-
+ kysdk-qtwidgets/src/kcustomdateedit.cpp            |   90 +-
+ kysdk-qtwidgets/src/kcustomdateedit.h              |    4 +-
+ kysdk-qtwidgets/src/kcustomtabbar.cpp              |  763 ++++++-------
+ kysdk-qtwidgets/src/kcustomtabbar.h                |   50 +-
+ kysdk-qtwidgets/src/kdialog.cpp                    |  149 ++-
+ kysdk-qtwidgets/src/kdialog.h                      |   43 +-
+ kysdk-qtwidgets/src/kdirtabbar.cpp                 |  285 +++--
+ kysdk-qtwidgets/src/kdirtabbar.h                   |   32 +-
+ kysdk-qtwidgets/src/kdragwidget.cpp                |  290 ++---
+ kysdk-qtwidgets/src/kdragwidget.h                  |   15 +-
+ kysdk-qtwidgets/src/kfilewidget.cpp                |  229 ++--
+ kysdk-qtwidgets/src/kfilewidget.h                  |   13 +-
+ kysdk-qtwidgets/src/kiconbar.cpp                   |   89 +-
+ kysdk-qtwidgets/src/kiconbar.h                     |   31 +-
+ kysdk-qtwidgets/src/kinputdialog.cpp               |  188 ++--
+ kysdk-qtwidgets/src/kinputdialog.h                 |   37 +-
+ kysdk-qtwidgets/src/kintrowidget.cpp               |  167 ++-
+ kysdk-qtwidgets/src/kintrowidget.h                 |   13 +-
+ kysdk-qtwidgets/src/kitemwidget.cpp                |  104 +-
+ kysdk-qtwidgets/src/kitemwidget.h                  |   37 +-
+ kysdk-qtwidgets/src/klabel.cpp                     |  289 +++--
+ kysdk-qtwidgets/src/klabel.h                       |   20 +-
+ kysdk-qtwidgets/src/klineedit.cpp                  |   90 +-
+ kysdk-qtwidgets/src/klineedit.h                    |    8 +-
+ kysdk-qtwidgets/src/klineframe.cpp                 |  112 +-
+ kysdk-qtwidgets/src/klineframe.h                   |   15 +-
+ kysdk-qtwidgets/src/klistview.cpp                  |   27 +-
+ kysdk-qtwidgets/src/klistview.h                    |   14 +-
+ kysdk-qtwidgets/src/klistviewdelegate.cpp          |  256 ++---
+ kysdk-qtwidgets/src/klistviewdelegate.h            |   22 +-
+ kysdk-qtwidgets/src/klistwidget.cpp                |   59 +-
+ kysdk-qtwidgets/src/klistwidget.h                  |   22 +-
+ kysdk-qtwidgets/src/kloopplaypage.cpp              |  154 ++-
+ kysdk-qtwidgets/src/kloopplaypage.h                |   13 +-
+ kysdk-qtwidgets/src/klunarcalendarinfo.cpp         |  534 +++++-----
+ kysdk-qtwidgets/src/klunarcalendarinfo.h           |    2 +-
+ kysdk-qtwidgets/src/klunardateedit.cpp             |   87 +-
+ kysdk-qtwidgets/src/klunardateedit.h               |    8 +-
+ kysdk-qtwidgets/src/kmenubutton.cpp                |   87 +-
+ kysdk-qtwidgets/src/kmenubutton.h                  |   42 +-
+ kysdk-qtwidgets/src/kmessagebox.cpp                |  256 ++---
+ kysdk-qtwidgets/src/kmessagebox.h                  |  108 +-
+ kysdk-qtwidgets/src/kminicalendaritem.cpp          |  257 +++--
+ kysdk-qtwidgets/src/kminicalendaritem.h            |  125 ++-
+ kysdk-qtwidgets/src/kminicalendarwidget.cpp        |  385 +++----
+ kysdk-qtwidgets/src/kminicalendarwidget.h          |  135 ++-
+ kysdk-qtwidgets/src/knativetabbar.cpp              |  481 ++++-----
+ kysdk-qtwidgets/src/knativetabbar.h                |   32 +-
+ kysdk-qtwidgets/src/knavigationbar.cpp             |  535 +++++-----
+ kysdk-qtwidgets/src/knavigationbar.h               |   36 +-
+ kysdk-qtwidgets/src/knavigationtrail.cpp           |   59 +-
+ kysdk-qtwidgets/src/knavigationtrail.h             |   11 +-
+ kysdk-qtwidgets/src/kpasswordedit.cpp              |  279 +++--
+ kysdk-qtwidgets/src/kpasswordedit.h                |   36 +-
+ kysdk-qtwidgets/src/kpixmapcontainer.cpp           |   81 +-
+ kysdk-qtwidgets/src/kpixmapcontainer.h             |   25 +-
+ kysdk-qtwidgets/src/kpressbutton.cpp               |  441 ++++----
+ kysdk-qtwidgets/src/kpressbutton.h                 |   16 +-
+ kysdk-qtwidgets/src/kprogressbar.cpp               |  667 +++++-------
+ kysdk-qtwidgets/src/kprogressbar.h                 |   23 +-
+ kysdk-qtwidgets/src/kprogresscircle.cpp            |  247 ++---
+ kysdk-qtwidgets/src/kprogresscircle.h              |    5 +-
+ kysdk-qtwidgets/src/kprogressdialog.cpp            |  475 ++++-----
+ kysdk-qtwidgets/src/kprogressdialog.h              |   54 +-
+ kysdk-qtwidgets/src/kprogresslabel.cpp             |  213 ++--
+ kysdk-qtwidgets/src/kprogresslabel.h               |   13 +-
+ kysdk-qtwidgets/src/kpushbutton.cpp                | 1126 ++++++++------------
+ kysdk-qtwidgets/src/kpushbutton.h                  |   25 +-
+ kysdk-qtwidgets/src/ksearchlineedit.cpp            |  765 ++++++-------
+ kysdk-qtwidgets/src/ksearchlineedit.h              |   28 +-
+ kysdk-qtwidgets/src/ksecuritylevelbar.cpp          |  111 +-
+ kysdk-qtwidgets/src/ksecuritylevelbar.h            |   19 +-
+ kysdk-qtwidgets/src/ksecurityquestiondialog.cpp    |   36 +-
+ kysdk-qtwidgets/src/ksecurityquestiondialog.h      |   20 +-
+ kysdk-qtwidgets/src/kshadowhelper.cpp              |   75 +-
+ kysdk-qtwidgets/src/kshadowhelper.h                |   15 +-
+ kysdk-qtwidgets/src/kslider.cpp                    |  974 +++++++----------
+ kysdk-qtwidgets/src/kslider.h                      |   34 +-
+ kysdk-qtwidgets/src/kswitchbutton.cpp              |  512 ++++-----
+ kysdk-qtwidgets/src/kswitchbutton.h                |   32 +-
+ kysdk-qtwidgets/src/ktabbar.cpp                    |  849 +++++++--------
+ kysdk-qtwidgets/src/ktabbar.h                      |   30 +-
+ kysdk-qtwidgets/src/ktableheaderview.cpp           |  148 ++-
+ kysdk-qtwidgets/src/ktableheaderview.h             |   11 +-
+ kysdk-qtwidgets/src/ktablemodel.cpp                |   25 +-
+ kysdk-qtwidgets/src/ktablemodel.h                  |    3 +-
+ kysdk-qtwidgets/src/ktableview.cpp                 |  189 ++--
+ kysdk-qtwidgets/src/ktableview.h                   |   12 +-
+ kysdk-qtwidgets/src/ktag.cpp                       |  321 +++---
+ kysdk-qtwidgets/src/ktag.h                         |   11 +-
+ kysdk-qtwidgets/src/ktextedit.cpp                  |   69 +-
+ kysdk-qtwidgets/src/ktextedit.h                    |   16 +-
+ kysdk-qtwidgets/src/ktexteditor.cpp                |   63 +-
+ kysdk-qtwidgets/src/ktexteditor.h                  |   21 +-
+ kysdk-qtwidgets/src/ktitlewindow.cpp               |  127 ++-
+ kysdk-qtwidgets/src/ktitlewindow.h                 |    9 +-
+ kysdk-qtwidgets/src/ktoolbar.cpp                   |  196 ++--
+ kysdk-qtwidgets/src/ktoolbar.h                     |   29 +-
+ kysdk-qtwidgets/src/ktoolbutton.cpp                |  704 ++++++------
+ kysdk-qtwidgets/src/ktoolbutton.h                  |   33 +-
+ kysdk-qtwidgets/src/ktranslucentfloor.cpp          |   59 +-
+ kysdk-qtwidgets/src/ktranslucentfloor.h            |    7 +-
+ kysdk-qtwidgets/src/kuninstalldialog.cpp           |  151 ++-
+ kysdk-qtwidgets/src/kuninstalldialog.h             |   38 +-
+ kysdk-qtwidgets/src/kwidget.cpp                    |  249 ++---
+ kysdk-qtwidgets/src/kwidget.h                      |   47 +-
+ kysdk-qtwidgets/src/kwindowbuttonbar.cpp           |  214 ++--
+ kysdk-qtwidgets/src/kwindowbuttonbar.h             |   50 +-
+ kysdk-qtwidgets/src/parmscontroller.cpp            |   57 +-
+ kysdk-qtwidgets/src/parmscontroller.h              |   57 +-
+ kysdk-qtwidgets/src/themeController.cpp            |  493 ++++-----
+ kysdk-qtwidgets/src/themeController.h              |   47 +-
+ kysdk-qtwidgets/src/xatom-helper.cpp               |   21 +-
+ kysdk-qtwidgets/src/xatom-helper.h                 |   51 +-
+ kysdk-qtwidgets/test/testAddFileButton/widget.cpp  |   26 +-
+ kysdk-qtwidgets/test/testDialog/main.cpp           |   16 +-
+ kysdk-qtwidgets/test/testDialog/widget.cpp         |   51 +-
+ kysdk-qtwidgets/test/testDialog/widget.h           |    2 +-
+ kysdk-qtwidgets/test/testFileWidget/widget.cpp     |   29 +-
+ kysdk-qtwidgets/test/testFileWidget/widget.h       |    3 +-
+ kysdk-qtwidgets/test/testIcon/widget.cpp           |   17 +-
+ kysdk-qtwidgets/test/testKBubbleWidget/widget.cpp  |   42 +-
+ kysdk-qtwidgets/test/testKButtonBox/widget.cpp     |   41 +-
+ kysdk-qtwidgets/test/testKDragWidget/main.cpp      |    2 +-
+ kysdk-qtwidgets/test/testKDragWidget/widget.cpp    |   37 +-
+ kysdk-qtwidgets/test/testKLabel/widget.cpp         |   42 +-
+ kysdk-qtwidgets/test/testKMessageBox/main.cpp      |   14 +-
+ kysdk-qtwidgets/test/testKMessageBox/widget.cpp    |   17 +-
+ kysdk-qtwidgets/test/testKPushButton/main.cpp      |   22 +-
+ kysdk-qtwidgets/test/testKPushButton/widget.cpp    |   44 +-
+ kysdk-qtwidgets/test/testKPushButton/widget.h      |    3 +-
+ kysdk-qtwidgets/test/testKTextedit/widget.cpp      |   87 +-
+ .../test/testKTranslucentFloor/main.cpp            |   16 +-
+ .../test/testKTranslucentFloor/widget.cpp          |   39 +-
+ .../test/testKTranslucentFloor/widget.h            |    2 +-
+ kysdk-qtwidgets/test/testListView/main.cpp         |   16 +-
+ kysdk-qtwidgets/test/testListView/widget.cpp       |   79 +-
+ kysdk-qtwidgets/test/testListView/widget.h         |    2 +-
+ kysdk-qtwidgets/test/testListWidget/main.cpp       |   16 +-
+ kysdk-qtwidgets/test/testListWidget/widget.cpp     |   17 +-
+ kysdk-qtwidgets/test/testListWidget/widget.h       |   14 +-
+ kysdk-qtwidgets/test/testLunarDateEdit/widget.cpp  |    9 +-
+ kysdk-qtwidgets/test/testLunarDateEdit/widget.h    |    8 +-
+ kysdk-qtwidgets/test/testProgressCircle/main.cpp   |   14 +-
+ kysdk-qtwidgets/test/testProgressCircle/widget.cpp |   33 +-
+ kysdk-qtwidgets/test/testProgressCircle/widget.h   |    2 +-
+ kysdk-qtwidgets/test/testPushbutton/main.cpp       |   14 +-
+ kysdk-qtwidgets/test/testPushbutton/widget.cpp     |   39 +-
+ kysdk-qtwidgets/test/testPushbutton/widget.h       |   14 +-
+ kysdk-qtwidgets/test/testSwitchButton/main.cpp     |   14 +-
+ kysdk-qtwidgets/test/testSwitchButton/widget.cpp   |   60 +-
+ kysdk-qtwidgets/test/testSwitchButton/widget.h     |   22 +-
+ kysdk-qtwidgets/test/testTag/main.cpp              |   14 +-
+ kysdk-qtwidgets/test/testTag/widget.cpp            |   35 +-
+ kysdk-qtwidgets/test/testTranslucent/main.cpp      |    8 +-
+ kysdk-qtwidgets/test/testTranslucent/widget.cpp    |  105 +-
+ .../test/testWidget/build/moc_predefs.h            |   14 +-
+ .../test/testWidget/build/moc_testwidget.cpp       |   59 +-
+ kysdk-qtwidgets/test/testWidget/main.cpp           |   24 +-
+ kysdk-qtwidgets/test/testWidget/testwidget.cpp     |  195 ++--
+ kysdk-qtwidgets/test/testWidget/testwidget.h       |    6 +-
+ kysdk-qtwidgets/test/testarrowtabbar/widget.cpp    |   29 +-
+ kysdk-qtwidgets/test/testbadge/main.cpp            |   16 +-
+ kysdk-qtwidgets/test/testbadge/widget.cpp          |   37 +-
+ kysdk-qtwidgets/test/testbadge/widget.h            |    4 +-
+ kysdk-qtwidgets/test/testballontip/main.cpp        |   16 +-
+ kysdk-qtwidgets/test/testballontip/widget.cpp      |   55 +-
+ kysdk-qtwidgets/test/testballontip/widget.h        |   26 +-
+ kysdk-qtwidgets/test/testbreadcrumb/main.cpp       |   16 +-
+ kysdk-qtwidgets/test/testbreadcrumb/widget.cpp     |   23 +-
+ kysdk-qtwidgets/test/testbreadcrumb/widget.h       |    6 +-
+ kysdk-qtwidgets/test/testclocktimer/widget.cpp     |   33 +-
+ kysdk-qtwidgets/test/testcolorbutton/widget.cpp    |   56 +-
+ kysdk-qtwidgets/test/testcomboboxwidget/widget.cpp |   15 +-
+ kysdk-qtwidgets/test/testcrumb/main.cpp            |    9 +-
+ kysdk-qtwidgets/test/testcrumb/widget.cpp          |  121 ++-
+ kysdk-qtwidgets/test/testdirtabbar/widget.cpp      |   54 +-
+ kysdk-qtwidgets/test/testdirtabbar/widget.h        |    8 +-
+ kysdk-qtwidgets/test/testinputdialog/main.cpp      |   16 +-
+ kysdk-qtwidgets/test/testinputdialog/widget.cpp    |   33 +-
+ kysdk-qtwidgets/test/testinputdialog/widget.h      |    2 +-
+ kysdk-qtwidgets/test/testintrowidget/widget.cpp    |   22 +-
+ kysdk-qtwidgets/test/testkbackground/widget.cpp    |   86 +-
+ kysdk-qtwidgets/test/testkbackground/widget.h      |    2 +-
+ kysdk-qtwidgets/test/testkcolorcombobox/widget.cpp |   57 +-
+ kysdk-qtwidgets/test/testkpressbutton/main.cpp     |   16 +-
+ kysdk-qtwidgets/test/testkpressbutton/widget.cpp   |   39 +-
+ kysdk-qtwidgets/test/testkpressbutton/widget.h     |    2 +-
+ kysdk-qtwidgets/test/testlineedit/widget.cpp       |   12 +-
+ kysdk-qtwidgets/test/testloopplaypage/widget.cpp   |   47 +-
+ kysdk-qtwidgets/test/testnativetabbar/widget.cpp   |   65 +-
+ kysdk-qtwidgets/test/testnavigationbar/main.cpp    |   14 +-
+ kysdk-qtwidgets/test/testnavigationbar/widget.cpp  |   41 +-
+ kysdk-qtwidgets/test/testnavigationbar/widget.h    |    9 +-
+ .../test/testnavigationtrail/widget.cpp            |   15 +-
+ kysdk-qtwidgets/test/testpasswordedit/main.cpp     |   14 +-
+ kysdk-qtwidgets/test/testpasswordedit/widget.cpp   |   63 +-
+ kysdk-qtwidgets/test/testpasswordedit/widget.h     |    8 +-
+ kysdk-qtwidgets/test/testprogressbar/main.cpp      |   12 +-
+ kysdk-qtwidgets/test/testprogressbar/widget.cpp    |   44 +-
+ kysdk-qtwidgets/test/testprogressbar/widget.h      |   14 +-
+ kysdk-qtwidgets/test/testprogressdialog/main.cpp   |   14 +-
+ kysdk-qtwidgets/test/testprogressdialog/widget.cpp |   28 +-
+ kysdk-qtwidgets/test/testprogressdialog/widget.h   |    2 +-
+ kysdk-qtwidgets/test/testprogresslabel/widget.cpp  |   23 +-
+ kysdk-qtwidgets/test/testsearchlinedit/main.cpp    |   14 +-
+ kysdk-qtwidgets/test/testsearchlinedit/widget.cpp  |   40 +-
+ kysdk-qtwidgets/test/testsearchlinedit/widget.h    |   10 +-
+ kysdk-qtwidgets/test/testsecuritylevelbar/main.cpp |   14 +-
+ .../test/testsecuritylevelbar/widget.cpp           |   21 +-
+ kysdk-qtwidgets/test/testsecuritylevelbar/widget.h |   10 +-
+ .../test/testsecurityquestiondialog/dialog.cpp     |    9 +-
+ .../test/testsecurityquestiondialog/dialog.h       |    2 +-
+ .../test/testsecurityquestiondialog/main.cpp       |    5 +-
+ kysdk-qtwidgets/test/testselector/widget.cpp       |   16 +-
+ kysdk-qtwidgets/test/testslider/main.cpp           |   14 +-
+ kysdk-qtwidgets/test/testslider/widget.cpp         |   98 +-
+ kysdk-qtwidgets/test/testslider/widget.h           |   14 +-
+ kysdk-qtwidgets/test/testtabbar/main.cpp           |   14 +-
+ kysdk-qtwidgets/test/testtabbar/widget.cpp         |   51 +-
+ kysdk-qtwidgets/test/testtableview/widget.cpp      |   76 +-
+ kysdk-qtwidgets/test/testtitlewindow/main.cpp      |    2 +-
+ kysdk-qtwidgets/test/testtitlewindow/widget.cpp    |    7 +-
+ kysdk-qtwidgets/test/testtoolbutton/main.cpp       |   14 +-
+ kysdk-qtwidgets/test/testtoolbutton/widget.cpp     |   43 +-
+ kysdk-qtwidgets/test/testtoolbutton/widget.h       |    2 +-
+ kysdk-ukenv/src/currency.h                         |   36 +-
+ kysdk-ukenv/src/gsettingmonitor.cpp                |    2 +-
+ kysdk-ukenv/src/gsettingmonitor.h                  |    4 +-
+ kysdk-ukenv/src/usermanual.cpp                     |    2 +-
+ kysdk-waylandhelper/kysdk-waylandhelper.pro        |   64 +-
+ .../protocols/ext-idle-notify-v1.xml               |  102 ++
+ .../protocols/plasma-window-management.xml         |  417 ++++++++
+ kysdk-waylandhelper/protocols/ukui-blur-v1.xml     |   93 ++
+ kysdk-waylandhelper/protocols/ukui-shell.xml       |  235 ++++
+ .../protocols/ukui-window-management.xml           |  423 ++++++++
+ .../protocols/xdg-activation-v1.xml                |  200 ++++
+ .../src/blurmanager/blurabstractinterface.h        |   12 +-
+ .../src/blurmanager/blurmanager.cpp                |   16 +-
+ kysdk-waylandhelper/src/blurmanager/blurmanager.h  |    5 +-
+ .../src/blurmanager/blurwaylandinterface.cpp       |   84 +-
+ .../src/blurmanager/blurwaylandinterface.h         |   34 +-
+ .../src/blurmanager/blurxcbinterface.cpp           |   16 +-
+ .../src/blurmanager/blurxcbinterface.h             |    2 +-
+ kysdk-waylandhelper/src/blurmanager/ukuiblur.cpp   |   22 +-
+ kysdk-waylandhelper/src/blurmanager/ukuiblur.h     |    9 +-
+ .../src/kysdk-waylandhelper_global.h               |    4 +-
+ .../src/ukuistylehelper/ukui-decoration-client.h   |   29 +-
+ .../ukuistylehelper/ukui-decoration-manager.cpp    |   22 +-
+ .../src/ukuistylehelper/ukui-shell-manager.cpp     |   12 +-
+ .../src/ukuistylehelper/ukui-shell-manager.h       |    1 -
+ .../src/ukuistylehelper/ukuistylehelper.cpp        |   45 +-
+ .../src/ukuistylehelper/ukuistylehelper.h          |    9 +-
+ .../src/ukuistylehelper/xatom-helper.cpp           |   21 +-
+ .../src/ukuistylehelper/xatom-helper.h             |   49 +-
+ kysdk-waylandhelper/src/waylandhelper.cpp          |   23 +-
+ kysdk-waylandhelper/src/waylandhelper.h            |    5 +-
+ .../src/windowmanager/abstractinterface.cpp        |   24 +-
+ .../src/windowmanager/abstractinterface.h          |   69 +-
+ .../src/windowmanager/extidlenotifier.cpp          |   32 +-
+ .../src/windowmanager/extidlenotifier.h            |    8 +-
+ .../src/windowmanager/idlenotifier.cpp             |    9 +-
+ .../src/windowmanager/idlenotifier.h               |    9 +-
+ .../src/windowmanager/kdewaylandinterface.cpp      |  444 ++++----
+ .../src/windowmanager/kdewaylandinterface.h        |   82 +-
+ kysdk-waylandhelper/src/windowmanager/netwm.h      |   29 +-
+ .../src/windowmanager/outputinfo.cpp               |   11 +-
+ kysdk-waylandhelper/src/windowmanager/outputinfo.h |    7 +-
+ .../src/windowmanager/ukuishell.cpp                |   39 +-
+ kysdk-waylandhelper/src/windowmanager/ukuishell.h  |   21 +-
+ .../src/windowmanager/ukuiwaylandinterface.cpp     |  629 +++++------
+ .../src/windowmanager/ukuiwaylandinterface.h       |   80 +-
+ .../src/windowmanager/ukuiwindowmanagement.cpp     |   72 +-
+ .../src/windowmanager/ukuiwindowmanagement.h       |   17 +-
+ ...land-plasma-window-management-client-protocol.h | 1118 -------------------
+ .../wayland-plasma-window-management-protocol.c    |  130 ---
+ kysdk-waylandhelper/src/windowmanager/windowinfo.h |   80 +-
+ .../src/windowmanager/windowmanager.cpp            |  180 ++--
+ .../src/windowmanager/windowmanager.h              |  347 +++---
+ .../src/windowmanager/wmregister.cpp               |   37 +-
+ kysdk-waylandhelper/src/windowmanager/wmregister.h |   11 +-
+ .../src/windowmanager/xcbinterface.cpp             |  343 +++---
+ .../src/windowmanager/xcbinterface.h               |   26 +-
+ .../src/windowmanager/xdgactivation.cpp            |   26 +-
+ .../src/windowmanager/xdgactivation.h              |   12 +-
+ .../test/testBlurManager/widget.cpp                |   20 +-
+ kysdk-waylandhelper/test/testBlurManager/widget.h  |    4 +-
+ kysdk-waylandhelper/test/testWindowInfo/widget.cpp |   56 +-
+ kysdk-waylandhelper/test/testWindowInfo/widget.h   |   14 +-
+ .../test/testWindowManager/main.cpp                |    2 +-
+ .../test/testWindowManager/widget.cpp              |  625 ++++++-----
+ .../test/testWindowManager/widget.h                |  102 +-
+ .../test/testidlenotifier/widget.cpp               |    9 +-
+ kysdk-waylandhelper/test/testidlenotifier/widget.h |    2 +-
+ .../test/testukuistylehelper/widget.cpp            |   19 +-
+ .../test/testukuistylehelper/widget.h              |    4 +-
+ .../test/testxdgactivation/main.cpp                |   11 +-
+ .../test/testxdgactivation/widget.cpp              |    1 -
+ kysdk-widgetutils/src/kwidgetutils.cpp             |   33 +-
+ kysdk-widgetutils/src/kwidgetutils.h               |    1 -
+ kysdk-widgetutils/src/kysdk-widgetutils_global.h   |    4 +-
+ .../moc_predefs.h                                  |   14 +-
+ kysdk-widgetutils/test/testWidgetutils/main.cpp    |    4 +-
+ kysdk-widgetutils/test/testWidgetutils/widget.cpp  |    1 -
+ pre-commit                                         |   14 +
+ 384 files changed, 14565 insertions(+), 16720 deletions(-)
+ create mode 100644 .clang-format
+ mode change 100755 => 100644 kysdk-appconf2/src/kconf2.cpp
+ mode change 100755 => 100644 kysdk-appconf2/src/kconf2.h
+ mode change 100755 => 100644 kysdk-appconf2/test/testkconf2/widget.cpp
+ mode change 100755 => 100644 kysdk-appconf2/test/testkconf2/widget.h
+ mode change 100755 => 100644 kysdk-qtwidgets/src/kdirtabbar.cpp
+ mode change 100755 => 100644 kysdk-qtwidgets/src/kdirtabbar.h
+ mode change 100755 => 100644 kysdk-qtwidgets/src/kmessagebox.cpp
+ mode change 100755 => 100644 kysdk-qtwidgets/src/kpressbutton.cpp
+ mode change 100755 => 100644 kysdk-qtwidgets/src/kpressbutton.h
+ mode change 100755 => 100644 kysdk-qtwidgets/src/kpushbutton.cpp
+ mode change 100755 => 100644 kysdk-qtwidgets/src/ktoolbutton.cpp
+ create mode 100644 kysdk-waylandhelper/protocols/ext-idle-notify-v1.xml
+ create mode 100644 kysdk-waylandhelper/protocols/plasma-window-management.xml
+ create mode 100644 kysdk-waylandhelper/protocols/ukui-blur-v1.xml
+ create mode 100644 kysdk-waylandhelper/protocols/ukui-shell.xml
+ create mode 100644 kysdk-waylandhelper/protocols/ukui-window-management.xml
+ create mode 100644 kysdk-waylandhelper/protocols/xdg-activation-v1.xml
+ delete mode 100644 kysdk-waylandhelper/src/windowmanager/wayland-plasma-window-management-client-protocol.h
+ delete mode 100644 kysdk-waylandhelper/src/windowmanager/wayland-plasma-window-management-protocol.c
+ create mode 100644 pre-commit
+
+diff --git a/.clang-format b/.clang-format
+new file mode 100644
+index 0000000..977a49e
+--- /dev/null
++++ b/.clang-format
+@@ -0,0 +1,86 @@
++---
++---
++# SPDX-FileCopyrightText: 2019 Christoph Cullmann <cullmann@kde.org>
++# SPDX-FileCopyrightText: 2019 Gernot Gebhard <gebhard@absint.com>
++#
++# SPDX-License-Identifier: MIT
++
++---
++Language: JavaScript
++DisableFormat: true
++---
++
++# Style for C++
++Language: Cpp
++Standard: c++20
++
++# base is WebKit coding style: https://webkit.org/code-style-guidelines/
++# below are only things set that diverge from this style!
++BasedOnStyle: WebKit
++
++# 4 spaces indent
++TabWidth: 4
++
++# No line limit
++ColumnLimit: 0
++
++# sort includes inside line separated groups
++SortIncludes: true
++
++# Braces are usually attached, but not after functions or class declarations.
++BreakBeforeBraces: Custom
++BraceWrapping:
++  AfterClass: true
++  AfterControlStatement: false
++  AfterEnum: false
++  AfterFunction: true
++  AfterNamespace: true
++  AfterObjCDeclaration: false
++  AfterStruct: true
++  AfterUnion: false
++  BeforeCatch: false
++  BeforeElse: false
++  IndentBraces: false
++
++# CrlInstruction *a;
++PointerAlignment: Right
++
++# horizontally aligns arguments after an open bracket.
++AlignAfterOpenBracket: Align
++
++# don't move all parameters to new line
++AllowAllParametersOfDeclarationOnNextLine: false
++
++# no single line functions
++AllowShortFunctionsOnASingleLine: None
++
++# In case we have an if statement with multiple lines the operator should be at the beginning of the line
++# but we do not want to break assignments
++BreakBeforeBinaryOperators: NonAssignment
++
++# format C++11 braced lists like function calls
++Cpp11BracedListStyle: true
++
++# do not put a space before C++11 braced lists
++SpaceBeforeCpp11BracedList: false
++
++# no namespace indentation to keep indent level low
++NamespaceIndentation: None
++
++# we use template< without space.
++SpaceAfterTemplateKeyword: false
++
++# Always break after template declaration
++AlwaysBreakTemplateDeclarations: true
++
++# macros for which the opening brace stays attached.
++ForEachMacros: [ foreach, Q_FOREACH, BOOST_FOREACH, forever, Q_FOREVER, QBENCHMARK, QBENCHMARK_ONCE , wl_resource_for_each, wl_resource_for_each_safe ]
++
++# keep lambda formatting multi-line if not empty
++AllowShortLambdasOnASingleLine: Empty
++
++# We do not want clang-format to put all arguments on a new line
++AllowAllArgumentsOnNextLine: false
++
++# Indent lambdas to the start of the line, not to the start of the lambda
++LambdaBodyIndentation: OuterScope
+diff --git a/.gitignore b/.gitignore
+index 1d2115d..6e6d196 100644
+--- a/.gitignore
++++ b/.gitignore
+@@ -1,3 +1,10 @@
+ build/
+ build-*/
+ *.user
++
++# wayland-scanner generated files 
++*-protocol.h
++*-protocol.c
++
++# .vscode settings files
++.vscode/
+diff --git a/kysdk-alm/src/singleapplication/localpeer.cpp b/kysdk-alm/src/singleapplication/localpeer.cpp
+index fcd669d..d518327 100644
+--- a/kysdk-alm/src/singleapplication/localpeer.cpp
++++ b/kysdk-alm/src/singleapplication/localpeer.cpp
+@@ -72,7 +72,9 @@ namespace QtLP_Private
+ 
+ const char *QtLocalPeer::ack = "ack";
+ 
+-QtLocalPeer::QtLocalPeer(QObject *parent, const QString &appId) : QObject(parent), id(appId)
++QtLocalPeer::QtLocalPeer(QObject *parent, const QString &appId)
++    : QObject(parent)
++    , id(appId)
+ {
+     QString prefix = id;
+     if (id.isEmpty()) {
+@@ -133,7 +135,6 @@ bool QtLocalPeer::isClient()
+     return false;
+ }
+ 
+-
+ bool QtLocalPeer::sendMessage(const QString &message, int timeout)
+ {
+     if (!isClient())
+@@ -170,7 +171,6 @@ bool QtLocalPeer::sendMessage(const QString &message, int timeout)
+     return res;
+ }
+ 
+-
+ void QtLocalPeer::receiveConnection()
+ {
+     QLocalSocket *socket = server->nextPendingConnection();
+@@ -210,7 +210,7 @@ void QtLocalPeer::receiveConnection()
+     socket->waitForBytesWritten(1000);
+     socket->waitForDisconnected(1000); // make sure client reads ack
+     delete socket;
+-    Q_EMIT messageReceived(message); //### (might take a long time to return)
++    Q_EMIT messageReceived(message); // ### (might take a long time to return)
+ }
+ 
+ } // namespace kdk
+diff --git a/kysdk-alm/src/singleapplication/localpeer.h b/kysdk-alm/src/singleapplication/localpeer.h
+index ebca4c0..f28940b 100644
+--- a/kysdk-alm/src/singleapplication/localpeer.h
++++ b/kysdk-alm/src/singleapplication/localpeer.h
+@@ -41,9 +41,9 @@
+ #ifndef KYSDK_ALM_SINGLEAPPLICATION_LOCALPEER_H_
+ #define KYSDK_ALM_SINGLEAPPLICATION_LOCALPEER_H_
+ 
++#include <QDir>
+ #include <QLocalServer>
+ #include <QLocalSocket>
+-#include <QDir>
+ 
+ #include "lockedfile.h"
+ 
+diff --git a/kysdk-alm/src/singleapplication/lockedfile.cpp b/kysdk-alm/src/singleapplication/lockedfile.cpp
+index 41413fc..230f262 100644
+--- a/kysdk-alm/src/singleapplication/lockedfile.cpp
++++ b/kysdk-alm/src/singleapplication/lockedfile.cpp
+@@ -81,7 +81,8 @@
+     \sa QFile::QFile()
+ */
+ 
+-QtLockedFile::QtLockedFile() : QFile()
++QtLockedFile::QtLockedFile()
++    : QFile()
+ {
+ #ifdef Q_OS_WIN
+     wmutex = 0;
+@@ -97,7 +98,8 @@ QtLockedFile::QtLockedFile() : QFile()
+ 
+     \sa QFile::QFile()
+ */
+-QtLockedFile::QtLockedFile(const QString &name) : QFile(name)
++QtLockedFile::QtLockedFile(const QString &name)
++    : QFile(name)
+ {
+ #ifdef Q_OS_WIN
+     wmutex = 0;
+diff --git a/kysdk-alm/src/singleapplication/lockedfile.h b/kysdk-alm/src/singleapplication/lockedfile.h
+index 25dff7a..5298fea 100644
+--- a/kysdk-alm/src/singleapplication/lockedfile.h
++++ b/kysdk-alm/src/singleapplication/lockedfile.h
+@@ -71,7 +71,9 @@ namespace QtLP_Private
+ class QT_QTLOCKEDFILE_EXPORT QtLockedFile : public QFile
+ {
+ public:
+-    enum LockMode { NoLock = 0, ReadLock, WriteLock };
++    enum LockMode { NoLock = 0,
++                    ReadLock,
++                    WriteLock };
+ 
+     QtLockedFile();
+     QtLockedFile(const QString &name);
+diff --git a/kysdk-alm/src/singleapplication/lockedfile_unix.cpp b/kysdk-alm/src/singleapplication/lockedfile_unix.cpp
+index b8fc61e..e890345 100644
+--- a/kysdk-alm/src/singleapplication/lockedfile_unix.cpp
++++ b/kysdk-alm/src/singleapplication/lockedfile_unix.cpp
+@@ -38,10 +38,10 @@
+ **
+ ****************************************************************************/
+ 
+-#include <string.h>
+ #include <errno.h>
+-#include <unistd.h>
+ #include <fcntl.h>
++#include <string.h>
++#include <unistd.h>
+ 
+ #include "lockedfile.h"
+ 
+@@ -75,12 +75,10 @@ bool QtLockedFile::lock(LockMode mode, bool block)
+         return false;
+     }
+ 
+-
+     m_lock_mode = mode;
+     return true;
+ }
+ 
+-
+ bool QtLockedFile::unlock()
+ {
+     if (!isOpen()) {
+diff --git a/kysdk-alm/src/singleapplication/singleapplication.cpp b/kysdk-alm/src/singleapplication/singleapplication.cpp
+index 0b8e2bc..6a84753 100644
+--- a/kysdk-alm/src/singleapplication/singleapplication.cpp
++++ b/kysdk-alm/src/singleapplication/singleapplication.cpp
+@@ -41,8 +41,8 @@
+ #include <QWidget>
+ #include <kwindowsystem.h>
+ 
+-#include "singleapplication.h"
+ #include "localpeer.h"
++#include "singleapplication.h"
+ 
+ /*!
+     \class QtSingleApplication qtsingleapplication.h
+@@ -142,7 +142,6 @@ void QtSingleApplication::sysInit(const QString &appId)
+     connect(peer, SIGNAL(messageReceived(const QString &)), SIGNAL(messageReceived(const QString &)));
+ }
+ 
+-
+ /*!
+     Creates a QtSingleApplication object. The application identifier
+     will be QCoreApplication::applicationFilePath(). \a argc, \a
+@@ -153,19 +152,20 @@ void QtSingleApplication::sysInit(const QString &appId)
+     QtSingleCoreApplication instead.
+ */
+ 
+-QtSingleApplication::QtSingleApplication(int &argc, char **argv, bool GUIenabled) : QApplication(argc, argv, GUIenabled)
++QtSingleApplication::QtSingleApplication(int &argc, char **argv, bool GUIenabled)
++    : QApplication(argc, argv, GUIenabled)
+ {
+     sysInit();
+ }
+ 
+-
+ /*!
+     Creates a QtSingleApplication object with the application
+     identifier \a appId. \a argc and \a argv are passed on to the
+     QAppliation constructor.
+ */
+ 
+-QtSingleApplication::QtSingleApplication(const QString &appId, int &argc, char **argv) : QApplication(argc, argv)
++QtSingleApplication::QtSingleApplication(const QString &appId, int &argc, char **argv)
++    : QApplication(argc, argv)
+ {
+     sysInit(appId);
+ }
+@@ -177,12 +177,12 @@ QtSingleApplication::QtSingleApplication(const QString &appId, int &argc, char *
+     will be QCoreApplication::applicationFilePath(). \a argc, \a
+     argv, and \a type are passed on to the QAppliation constructor.
+ */
+-QtSingleApplication::QtSingleApplication(int &argc, char **argv, Type type) : QApplication(argc, argv, type)
++QtSingleApplication::QtSingleApplication(int &argc, char **argv, Type type)
++    : QApplication(argc, argv, type)
+ {
+     sysInit();
+ }
+ 
+-
+ #if defined(Q_WS_X11)
+ /*!
+   Special constructor for X11, ref. the documentation of
+@@ -225,7 +225,6 @@ QtSingleApplication::QtSingleApplication(Display *dpy, const QString &appId, int
+ #endif // Q_WS_X11
+ #endif // QT_VERSION < 0x050000
+ 
+-
+ /*!
+     Returns true if another instance of this application is running;
+     otherwise false.
+@@ -242,7 +241,6 @@ bool QtSingleApplication::isRunning()
+     return peer->isClient();
+ }
+ 
+-
+ /*!
+     Tries to send the text \a message to the currently running
+     instance. The QtSingleApplication object in the running instance
+@@ -261,7 +259,6 @@ bool QtSingleApplication::sendMessage(const QString &message, int timeout)
+     return peer->sendMessage(message, timeout);
+ }
+ 
+-
+ /*!
+     Returns the application identifier. Two processes with the same
+     identifier will be regarded as instances of the same application.
+@@ -271,7 +268,6 @@ QString QtSingleApplication::id() const
+     return peer->applicationId();
+ }
+ 
+-
+ /*!
+   Sets the activation window of this application to \a aw. The
+   activation window is the widget that will be activated by
+@@ -293,7 +289,6 @@ void QtSingleApplication::setActivationWindow(QWidget *aw, bool activateOnMessag
+         disconnect(peer, SIGNAL(messageReceived(const QString &)), this, SLOT(activateWindow()));
+ }
+ 
+-
+ /*!
+     Returns the applications activation window if one has been set by
+     calling setActivationWindow(), otherwise returns 0.
+@@ -305,7 +300,6 @@ QWidget *QtSingleApplication::activationWindow() const
+     return actWin;
+ }
+ 
+-
+ /*!
+   De-minimizes, raises, and activates this application's activation window.
+   This function does nothing if no activation window has been set.
+@@ -342,7 +336,6 @@ void QtSingleApplication::activateWindow()
+     \sa sendMessage(), setActivationWindow(), activateWindow()
+ */
+ 
+-
+ /*!
+     \fn void QtSingleApplication::initialize(bool dummy = true)
+ 
+diff --git a/kysdk-alm/test/testsingleapplication/main.cpp b/kysdk-alm/test/testsingleapplication/main.cpp
+index 3221003..ce212bc 100644
+--- a/kysdk-alm/test/testsingleapplication/main.cpp
++++ b/kysdk-alm/test/testsingleapplication/main.cpp
+@@ -1,5 +1,5 @@
+ /*
+- * 
++ *
+  *
+  * Copyright (C) 2023, KylinSoft Co., Ltd.
+  *
+diff --git a/kysdk-appconf2/src/kconf2.cpp b/kysdk-appconf2/src/kconf2.cpp
+old mode 100755
+new mode 100644
+index 4d1ae39..e41e934
+--- a/kysdk-appconf2/src/kconf2.cpp
++++ b/kysdk-appconf2/src/kconf2.cpp
+@@ -1,29 +1,30 @@
+ #include "kconf2.h"
+ #include <QDebug>
+-#include <string>
+ #include <iostream>
++#include <string>
+ 
+-namespace kdk {
++namespace kdk
++{
+ 
+ enum KCONF2TYPE {
+-    KCONF2_TYPE_BOOLEAN       = 'b',
+-    KCONF2_TYPE_BYTE          = 'y',
+-    KCONF2_TYPE_INT16         = 'n',
+-    KCONF2_TYPE_UINT16        = 'q',
+-    KCONF2_TYPE_INT32         = 'i',
+-    KCONF2_TYPE_UINT32        = 'u',
+-    KCONF2_TYPE_INT64         = 'x',
+-    KCONF2_TYPE_UINT64        = 't',
+-    KCONF2_TYPE_HANDLE        = 'h',
+-    KCONF2_TYPE_DOUBLE        = 'd',
+-    KCONF2_TYPE_STRING        = 's',
+-    KCONF2_TYPE_OBJECT_PATH   = 'o',
+-    KCONF2_TYPE_SIGNATURE     = 'g',
+-    KCONF2_TYPE_VARIANT       = 'v',
+-    KCONF2_TYPE_MAYBE         = 'm',
+-    KCONF2_TYPE_ARRAY         = 'a',
+-    KCONF2_TYPE_TUPLE         = '(',
+-    KCONF2_TYPE_DICT_ENTRY    = '{'
++    KCONF2_TYPE_BOOLEAN = 'b',
++    KCONF2_TYPE_BYTE = 'y',
++    KCONF2_TYPE_INT16 = 'n',
++    KCONF2_TYPE_UINT16 = 'q',
++    KCONF2_TYPE_INT32 = 'i',
++    KCONF2_TYPE_UINT32 = 'u',
++    KCONF2_TYPE_INT64 = 'x',
++    KCONF2_TYPE_UINT64 = 't',
++    KCONF2_TYPE_HANDLE = 'h',
++    KCONF2_TYPE_DOUBLE = 'd',
++    KCONF2_TYPE_STRING = 's',
++    KCONF2_TYPE_OBJECT_PATH = 'o',
++    KCONF2_TYPE_SIGNATURE = 'g',
++    KCONF2_TYPE_VARIANT = 'v',
++    KCONF2_TYPE_MAYBE = 'm',
++    KCONF2_TYPE_ARRAY = 'a',
++    KCONF2_TYPE_TUPLE = '(',
++    KCONF2_TYPE_DICT_ENTRY = '{'
+ };
+ 
+ class KConf2Private : public QObject
+@@ -32,11 +33,12 @@ class KConf2Private : public QObject
+     Q_DECLARE_PUBLIC(KConf2)
+ 
+ public:
+-    KConf2Private(KConf2* parent);
++    KConf2Private(KConf2 *parent);
+     QVariant typesToQvariant(const char *key, const char *value) const;
++
+ private:
+     KConf2 *q_ptr;
+-    KSettings* m_pGsettings = nullptr;
++    KSettings *m_pGsettings = nullptr;
+     long signal_handler_id;
+ };
+ 
+@@ -75,13 +77,13 @@ static void settingChanged(KSettings *ukuistyle_settings, const char *key, void
+ }
+ 
+ KConf2::KConf2(const QByteArray &schema_id)
+-    :d_ptr(new KConf2Private(this))
++    : d_ptr(new KConf2Private(this))
+ {
+     Q_D(KConf2);
+     if (!d->m_pGsettings)
+         d->m_pGsettings = kdk_conf2_new(schema_id, NULL);
+ 
+-    d->signal_handler_id = kdk_conf2_connect_signal(d->m_pGsettings, "changed",(KCallBack)settingChanged, this);
++    d->signal_handler_id = kdk_conf2_connect_signal(d->m_pGsettings, "changed", (KCallBack)settingChanged, this);
+ }
+ 
+ KConf2::~KConf2()
+@@ -96,14 +98,11 @@ QVariant KConf2::get(const QString &key) const
+ 
+     char *value = kdk_conf2_get_value(d->m_pGsettings, key.toUtf8().data());
+ 
+-    if(value == NULL )
+-    {
+-        qWarning()<<"There is no value for key";
++    if (value == NULL) {
++        qWarning() << "There is no value for key";
+         free(value);
+         return QVariant();
+-    }
+-    else
+-    {
++    } else {
+         QVariant qvalue = d->typesToQvariant(key.toUtf8().data(), value);
+         free(value);
+         return qvalue;
+@@ -166,13 +165,10 @@ QStringList KConf2::schemas(const QString &app, const QString &version) const
+     Q_D(const KConf2);
+     QStringList list;
+ 
+-    char **schemas = kdk_conf2_list_schemas(app.toUtf8().data(),version.toUtf8().data());
+-    if(schemas == NULL)
+-    {
+-        qWarning()<<"The obtained list schemas is empty";
+-    }
+-    else
+-    {
++    char **schemas = kdk_conf2_list_schemas(app.toUtf8().data(), version.toUtf8().data());
++    if (schemas == NULL) {
++        qWarning() << "The obtained list schemas is empty";
++    } else {
+         for (int i = 0; schemas[i]; i++)
+             list.append(qtifyName(schemas[i]));
+ 
+@@ -270,7 +266,7 @@ QStringList KConf2::children() const
+ }
+ 
+ KConf2Private::KConf2Private(KConf2 *parent)
+-    :q_ptr(parent)
++    : q_ptr(parent)
+ {
+     setParent(parent);
+ }
+@@ -279,42 +275,41 @@ QVariant KConf2Private::typesToQvariant(const char *key, const char *value) cons
+ {
+     Q_Q(const KConf2);
+     char *type = kdk_conf2_get_type(m_pGsettings, key);
+-        switch (*type)
+-        {
+-        case KCONF2_TYPE_BOOLEAN:
+-            return QVariant(value);
++    switch (*type) {
++    case KCONF2_TYPE_BOOLEAN:
++        return QVariant(value);
+ 
+-        case KCONF2_TYPE_BYTE:
+-            return QVariant(QString(value));
++    case KCONF2_TYPE_BYTE:
++        return QVariant(QString(value));
+ 
+-        case KCONF2_TYPE_INT16:
+-            return QVariant(QString(value).toShort());
++    case KCONF2_TYPE_INT16:
++        return QVariant(QString(value).toShort());
+ 
+-        case KCONF2_TYPE_UINT16:
+-            return QVariant(QString(value).toUShort());
++    case KCONF2_TYPE_UINT16:
++        return QVariant(QString(value).toUShort());
+ 
+-        case KCONF2_TYPE_INT32:
+-            return QVariant(QString(value).toInt());
++    case KCONF2_TYPE_INT32:
++        return QVariant(QString(value).toInt());
+ 
+-        case KCONF2_TYPE_UINT32:
+-            return QVariant(QString(value).toUInt());
++    case KCONF2_TYPE_UINT32:
++        return QVariant(QString(value).toUInt());
+ 
+-        case KCONF2_TYPE_INT64:
+-            return QVariant(QString(value).toLongLong());
++    case KCONF2_TYPE_INT64:
++        return QVariant(QString(value).toLongLong());
+ 
+-        case KCONF2_TYPE_UINT64:
+-            return QVariant(QString(value).toULongLong());
++    case KCONF2_TYPE_UINT64:
++        return QVariant(QString(value).toULongLong());
+ 
+-        case KCONF2_TYPE_DOUBLE:
+-            return QVariant(QString(value).toDouble());
++    case KCONF2_TYPE_DOUBLE:
++        return QVariant(QString(value).toDouble());
+ 
+-        case KCONF2_TYPE_STRING:
+-            return QVariant(QString(value));
++    case KCONF2_TYPE_STRING:
++        return QVariant(QString(value));
+ 
+-        case KCONF2_TYPE_ARRAY:
+-        default:
+-            return QVariant();
+-        }
++    case KCONF2_TYPE_ARRAY:
++    default:
++        return QVariant();
++    }
+ }
+ 
+ }
+diff --git a/kysdk-appconf2/src/kconf2.h b/kysdk-appconf2/src/kconf2.h
+old mode 100755
+new mode 100644
+index cd9d2a2..b9235e8
+--- a/kysdk-appconf2/src/kconf2.h
++++ b/kysdk-appconf2/src/kconf2.h
+@@ -1,10 +1,11 @@
+ #ifndef KCONF2_H
+ #define KCONF2_H
+ 
+-#include <libkysettings.h>
+ #include <QObject>
+ #include <QVariant>
+-namespace kdk {
++#include <libkysettings.h>
++namespace kdk
++{
+ 
+ class KConf2Private;
+ 
+@@ -12,7 +13,6 @@ class KConf2 : public QObject
+ {
+     Q_OBJECT
+ public:
+-
+     KConf2(const QByteArray &schema_id);
+ 
+     ~KConf2();
+@@ -54,7 +54,7 @@ Q_SIGNALS:
+ 
+ private:
+     Q_DECLARE_PRIVATE(KConf2)
+-    KConf2Private* const d_ptr;
++    KConf2Private *const d_ptr;
+ };
+ 
+ }
+diff --git a/kysdk-appconf2/test/testkconf2/widget.cpp b/kysdk-appconf2/test/testkconf2/widget.cpp
+old mode 100755
+new mode 100644
+index db1c273..26171c8
+--- a/kysdk-appconf2/test/testkconf2/widget.cpp
++++ b/kysdk-appconf2/test/testkconf2/widget.cpp
+@@ -1,12 +1,12 @@
+ #include "widget.h"
+-#include <QPushButton>
+-#include <QObject>
+-#include <QLabel>
+-#include <QHBoxLayout>
++#include "kconf2.h"
+ #include <QDebug>
+-#include <QProgressBar>
++#include <QHBoxLayout>
++#include <QLabel>
+ #include <QLineEdit>
+-#include "kconf2.h"
++#include <QObject>
++#include <QProgressBar>
++#include <QPushButton>
+ using namespace kdk;
+ 
+ Widget::Widget(QWidget *parent)
+@@ -16,24 +16,23 @@ Widget::Widget(QWidget *parent)
+     if (KConf2::isSettingsAvailable("control-center.apt.proxy")) {
+         KConf2 *settings = new KConf2("control-center.apt.proxy");
+         connect(settings, &KConf2::changed, this, [=](const QString &key) {
+-            qDebug()<<"恭喜你,gsetting切换成功了,变化的key是"<<key<<"style-name is"<<settings->get("style-name").toString();
++            qDebug() << "恭喜你,gsetting切换成功了,变化的key是" << key << "style-name is" << settings->get("style-name").toString();
+         });
+     }
+ 
+-    QVBoxLayout* layout = new QVBoxLayout(this);
+-    QPushButton* btn1 = new QPushButton("get value");
+-    QPushButton* btn2 = new QPushButton("set enabled");
+-    QPushButton* btn3 = new QPushButton("get keys");
+-    QPushButton* btn4 = new QPushButton("schemas");
+-    QPushButton* btn5 = new QPushButton("getDescrition");
+-    QPushButton* btn6 = new QPushButton("get summary");
+-    QPushButton* btn7 = new QPushButton("get type");
+-    QPushButton* btn8 = new QPushButton("is Writable");
+-    QPushButton* btn9 = new QPushButton("get id ");
+-    QPushButton* btn10 = new QPushButton("get version ");
+-    QPushButton* btn11 = new QPushButton("get child ");
+-    QPushButton* btn12 = new QPushButton("children ");
+-
++    QVBoxLayout *layout = new QVBoxLayout(this);
++    QPushButton *btn1 = new QPushButton("get value");
++    QPushButton *btn2 = new QPushButton("set enabled");
++    QPushButton *btn3 = new QPushButton("get keys");
++    QPushButton *btn4 = new QPushButton("schemas");
++    QPushButton *btn5 = new QPushButton("getDescrition");
++    QPushButton *btn6 = new QPushButton("get summary");
++    QPushButton *btn7 = new QPushButton("get type");
++    QPushButton *btn8 = new QPushButton("is Writable");
++    QPushButton *btn9 = new QPushButton("get id ");
++    QPushButton *btn10 = new QPushButton("get version ");
++    QPushButton *btn11 = new QPushButton("get child ");
++    QPushButton *btn12 = new QPushButton("children ");
+ 
+     layout->addWidget(btn1);
+     layout->addWidget(btn2);
+@@ -48,54 +47,53 @@ Widget::Widget(QWidget *parent)
+     layout->addWidget(btn11);
+     layout->addWidget(btn12);
+ 
+-    connect(btn1,&QPushButton::clicked,this,[=]{
++    connect(btn1, &QPushButton::clicked, this, [=] {
+         onPushbutton_1Clicked();
+     });
+ 
+-    connect(btn2,&QPushButton::clicked,this,[=]{
++    connect(btn2, &QPushButton::clicked, this, [=] {
+         onPushbutton_2Clicked();
+     });
+ 
+-    connect(btn3,&QPushButton::clicked,this,[=]{
++    connect(btn3, &QPushButton::clicked, this, [=] {
+         onPushbutton_3Clicked();
+     });
+ 
+-    connect(btn4,&QPushButton::clicked,this,[=]{
++    connect(btn4, &QPushButton::clicked, this, [=] {
+         onPushbutton_4Clicked();
+     });
+ 
+-    connect(btn5,&QPushButton::clicked,this,[=]{
++    connect(btn5, &QPushButton::clicked, this, [=] {
+         onPushbutton_5Clicked();
+     });
+ 
+-    connect(btn6,&QPushButton::clicked,this,[=]{
++    connect(btn6, &QPushButton::clicked, this, [=] {
+         onPushbutton_6Clicked();
+     });
+ 
+-    connect(btn7,&QPushButton::clicked,this,[=]{
++    connect(btn7, &QPushButton::clicked, this, [=] {
+         onPushbutton_7Clicked();
+     });
+ 
+-    connect(btn8,&QPushButton::clicked,this,[=]{
++    connect(btn8, &QPushButton::clicked, this, [=] {
+         onPushbutton_8Clicked();
+     });
+ 
+-    connect(btn9,&QPushButton::clicked,this,[=]{
++    connect(btn9, &QPushButton::clicked, this, [=] {
+         onPushbutton_9Clicked();
+     });
+ 
+-    connect(btn10,&QPushButton::clicked,this,[=]{
++    connect(btn10, &QPushButton::clicked, this, [=] {
+         onPushbutton_10Clicked();
+     });
+ 
+-    connect(btn11,&QPushButton::clicked,this,[=]{
++    connect(btn11, &QPushButton::clicked, this, [=] {
+         onPushbutton_11Clicked();
+     });
+ 
+-    connect(btn12,&QPushButton::clicked,this,[=]{
++    connect(btn12, &QPushButton::clicked, this, [=] {
+         onPushbutton_12Clicked();
+     });
+-
+ }
+ 
+ Widget::~Widget()
+@@ -107,7 +105,7 @@ void Widget::onPushbutton_1Clicked()
+     if (KConf2::isSettingsAvailable("control-center.apt.proxy")) {
+         KConf2 *settings = new KConf2("control-center.apt.proxy");
+         auto stylename = settings->get("port").toString();
+-        qDebug()<<"stylename ="<<stylename;
++        qDebug() << "stylename =" << stylename;
+     }
+ }
+ 
+@@ -116,11 +114,11 @@ void Widget::onPushbutton_2Clicked()
+ 
+     if (KConf2::isSettingsAvailable("control-center.apt.proxy")) {
+         KConf2 *settings = new KConf2("control-center.apt.proxy");
+-        if(settings->get("enabled").toBool())
++        if (settings->get("enabled").toBool())
+             settings->set("enabled", "false");
+         else
+             settings->set("enabled", "true");
+-        qDebug()<<"success"<<settings->get("enabled").toString();
++        qDebug() << "success" << settings->get("enabled").toString();
+     }
+ }
+ 
+@@ -129,7 +127,7 @@ void Widget::onPushbutton_3Clicked()
+     if (KConf2::isSettingsAvailable("control-center.apt.proxy")) {
+         KConf2 *settings = new KConf2("control-center.apt.proxy");
+         auto list = settings->keys();
+-        qDebug()<<"keys list is"<<list;
++        qDebug() << "keys list is" << list;
+     }
+ }
+ 
+@@ -137,8 +135,8 @@ void Widget::onPushbutton_4Clicked()
+ {
+     if (KConf2::isSettingsAvailable("control-center")) {
+         KConf2 *settings = new KConf2("control-center");
+-        auto list = settings->schemas("control-center1","3.20.1.31-0k2.20");
+-        qDebug()<<"schemas list is"<<list;
++        auto list = settings->schemas("control-center1", "3.20.1.31-0k2.20");
++        qDebug() << "schemas list is" << list;
+     }
+ }
+ 
+@@ -148,7 +146,7 @@ void Widget::onPushbutton_5Clicked()
+         KConf2 *settings = new KConf2("control-center.apt.proxy");
+         QString str("enabled");
+         QString str1 = settings->getDescrition(str);
+-        qDebug()<<"getDescrition is"<<str1;
++        qDebug() << "getDescrition is" << str1;
+     }
+ }
+ 
+@@ -158,7 +156,7 @@ void Widget::onPushbutton_6Clicked()
+         KConf2 *settings = new KConf2("control-center.apt.proxy");
+         QString str("enabled");
+         QString str1 = settings->getSummary(str);
+-        qDebug()<<"getSummary is"<<str1;
++        qDebug() << "getSummary is" << str1;
+     }
+ }
+ 
+@@ -168,7 +166,7 @@ void Widget::onPushbutton_7Clicked()
+         KConf2 *settings = new KConf2("control-center.apt.proxy");
+         QString str("enabled");
+         QString str1 = settings->getType(str);
+-        qDebug()<<"getType is"<<str1;
++        qDebug() << "getType is" << str1;
+     }
+ }
+ 
+@@ -178,7 +176,7 @@ void Widget::onPushbutton_8Clicked()
+         KConf2 *settings = new KConf2("control-center.apt.proxy");
+         QString str("enabled");
+         settings->isWritable(str);
+-        qDebug()<<"isWritable "<<settings->isWritable(str);
++        qDebug() << "isWritable " << settings->isWritable(str);
+     }
+ }
+ 
+@@ -186,7 +184,7 @@ void Widget::onPushbutton_9Clicked()
+ {
+     if (KConf2::isSettingsAvailable("control-center.apt.proxy")) {
+         KConf2 *settings = new KConf2("control-center.apt.proxy");
+-        qDebug()<<"getId is"<<settings->getId();
++        qDebug() << "getId is" << settings->getId();
+     }
+ }
+ 
+@@ -194,7 +192,7 @@ void Widget::onPushbutton_10Clicked()
+ {
+     if (KConf2::isSettingsAvailable("control-center.apt.proxy")) {
+         KConf2 *settings = new KConf2("control-center.apt.proxy");
+-        qDebug()<<"getVersion is"<<settings->getVersion();
++        qDebug() << "getVersion is" << settings->getVersion();
+     }
+ }
+ 
+@@ -203,8 +201,8 @@ void Widget::onPushbutton_11Clicked()
+     if (KConf2::isSettingsAvailable("control-center")) {
+         KConf2 *settings = new KConf2("control-center");
+         QString str("apt");
+-        KSettings* gsetting = settings->getChild(str);
+-        qDebug()<<"getChild is"<<gsetting;
++        KSettings *gsetting = settings->getChild(str);
++        qDebug() << "getChild is" << gsetting;
+     }
+ }
+ 
+@@ -213,6 +211,6 @@ void Widget::onPushbutton_12Clicked()
+     if (KConf2::isSettingsAvailable("control-center")) {
+         KConf2 *settings = new KConf2("control-center");
+         auto list = settings->children();
+-        qDebug()<<"children list is"<<list;
++        qDebug() << "children list is" << list;
+     }
+ }
+diff --git a/kysdk-appconf2/test/testkconf2/widget.h b/kysdk-appconf2/test/testkconf2/widget.h
+old mode 100755
+new mode 100644
+index 3dad6ea..bc7538f
+--- a/kysdk-appconf2/test/testkconf2/widget.h
++++ b/kysdk-appconf2/test/testkconf2/widget.h
+@@ -1,28 +1,28 @@
+ #ifndef WIDGET_H
+ #define WIDGET_H
+ 
+-#include <QWidget>
+-#include <QPushButton>
+-#include <QToolButton>
+ #include <QCheckBox>
++#include <QColor>
++#include <QComboBox>
++#include <QCompleter>
++#include <QHeaderView>
++#include <QLabel>
+ #include <QLineEdit>
+-#include <QSpinBox>
+ #include <QListWidget>
++#include <QMenu>
++#include <QPalette>
+ #include <QProgressBar>
++#include <QPushButton>
+ #include <QRadioButton>
+ #include <QScrollBar>
+-#include <QComboBox>
+ #include <QSlider>
++#include <QSpinBox>
+ #include <QTableWidget>
+ #include <QTableWidgetItem>
++#include <QToolButton>
+ #include <QTreeWidget>
+ #include <QTreeWidgetItem>
+-#include <QMenu>
+-#include <QPalette>
+-#include <QColor>
+-#include <QHeaderView>
+-#include <QCompleter>
+-#include <QLabel>
++#include <QWidget>
+ 
+ class Widget : public QWidget
+ {
+@@ -32,7 +32,6 @@ public:
+     Widget(QWidget *parent = nullptr);
+     ~Widget();
+ 
+-
+ private slots:
+     void onPushbutton_1Clicked();
+     void onPushbutton_2Clicked();
+@@ -46,6 +45,5 @@ private slots:
+     void onPushbutton_10Clicked();
+     void onPushbutton_11Clicked();
+     void onPushbutton_12Clicked();
+-
+ };
+ #endif // WIDGET_H
+diff --git a/kysdk-application.pro b/kysdk-application.pro
+index 034b27f..e87ce96 100644
+--- a/kysdk-application.pro
++++ b/kysdk-application.pro
+@@ -11,8 +11,15 @@ SUBDIRS = \
+     kysdk-alm \
+     kysdk-ukenv
+ 
+-
+-
+-
+-
+-
++debug {
++    clang_format = $$system(which clang-format)
++    isEmpty(clang_format) {
++        error("clang-format not found! It is required to format code.")
++    } else {
++        git_hook_path = $$PWD/.git/hooks/pre-commit
++        !exists($$git_hook_path) {
++            system(cp $$PWD/pre-commit $$git_hook_path)
++            system(chmod +x $$git_hook_path)
++        }
++    }
++}
+diff --git a/kysdk-kabase/kabase/buried_point.cpp b/kysdk-kabase/kabase/buried_point.cpp
+index 3de121b..2fd1878 100644
+--- a/kysdk-kabase/kabase/buried_point.cpp
++++ b/kysdk-kabase/kabase/buried_point.cpp
+@@ -1,19 +1,19 @@
+-#include <sstream>
+ #include <iostream>
++#include <sstream>
+ 
+-#include <openssl/rsa.h>
+-#include <openssl/pem.h>
+-#include <openssl/err.h>
+ #include <openssl/bio.h>
++#include <openssl/err.h>
+ #include <openssl/evp.h>
++#include <openssl/pem.h>
++#include <openssl/rsa.h>
+ 
+ #include <QFile>
+ #include <QSettings>
+-#include <QtDBus/QtDBus>
+-#include <QtDBus/QDBusVariant>
+ #include <QtDBus/QDBusConnection>
+-#include <QtDBus/QDBusInterface>
+ #include <QtDBus/QDBusError>
++#include <QtDBus/QDBusInterface>
++#include <QtDBus/QDBusVariant>
++#include <QtDBus/QtDBus>
+ 
+ #include "buried_point.hpp"
+ #include "log.hpp"
+diff --git a/kysdk-kabase/kabase/gsettings.cpp b/kysdk-kabase/kabase/gsettings.cpp
+index 328ef8a..dd7b607 100644
+--- a/kysdk-kabase/kabase/gsettings.cpp
++++ b/kysdk-kabase/kabase/gsettings.cpp
+@@ -289,6 +289,5 @@ void Gsettings::slotControlCenterPersonaliseChange(QString key)
+     return;
+ }
+ 
+-
+ } /* namespace kabase */
+ } /* namespace kdk */
+diff --git a/kysdk-kabase/kabase/image/converter.cpp b/kysdk-kabase/kabase/image/converter.cpp
+index 2448233..d7c3fb1 100644
+--- a/kysdk-kabase/kabase/image/converter.cpp
++++ b/kysdk-kabase/kabase/image/converter.cpp
+@@ -20,17 +20,21 @@
+  *
+  */
+ 
+-#include "log.hpp"
+ #include "image/converter.hpp"
++#include "log.hpp"
+ 
+ namespace kdk
+ {
+ namespace kabase
+ {
+ 
+-Converter::Converter() {}
++Converter::Converter()
++{
++}
+ 
+-Converter::~Converter() {}
++Converter::~Converter()
++{
++}
+ 
+ cv::Mat Converter::fibitmapToMat(FIBITMAP *fibitMap)
+ {
+diff --git a/kysdk-kabase/kabase/image/image.cpp b/kysdk-kabase/kabase/image/image.cpp
+index f35dd49..defca27 100644
+--- a/kysdk-kabase/kabase/image/image.cpp
++++ b/kysdk-kabase/kabase/image/image.cpp
+@@ -27,9 +27,9 @@ namespace kdk
+ namespace kabase
+ {
+ 
+-Image::Image() {};
++Image::Image(){};
+ 
+-Image::~Image() {};
++Image::~Image(){};
+ 
+ } /* namespace kabase */
+ } /* namespace kdk */
+diff --git a/kysdk-kabase/kabase/image/image_load.cpp b/kysdk-kabase/kabase/image/image_load.cpp
+index 8cdd9b5..39093bd 100644
+--- a/kysdk-kabase/kabase/image/image_load.cpp
++++ b/kysdk-kabase/kabase/image/image_load.cpp
+@@ -23,15 +23,15 @@
+ #include <gif_lib.h>
+ #include <stb/stb_image.h>
+ 
+-#include <QSvgRenderer>
+-#include <QPixmap>
+-#include <QPainter>
+ #include <QDebug>
+ #include <QMovie>
++#include <QPainter>
++#include <QPixmap>
++#include <QSvgRenderer>
+ 
+-#include "log.hpp"
+-#include "image_load.hpp"
+ #include "image/converter.hpp"
++#include "image_load.hpp"
++#include "log.hpp"
+ 
+ namespace kdk
+ {
+@@ -43,7 +43,9 @@ ImageLoad::ImageLoad()
+     initLoadFormat();
+ }
+ 
+-ImageLoad::~ImageLoad() {}
++ImageLoad::~ImageLoad()
++{
++}
+ 
+ void ImageLoad::initLoadFormat(void)
+ {
+@@ -75,7 +77,6 @@ image::ImageResult ImageLoad::load(QString path)
+     image::ImageFormat imageFormat = Utils::getImageFormat(path);
+     info << "kabase : load image format is : " << imageFormat;
+ 
+-
+     if (!m_allLoadFormat.contains(imageFormat)) {
+         error << "kabase : image format not support load!";
+         return ret;
+diff --git a/kysdk-kabase/kabase/image/image_save.cpp b/kysdk-kabase/kabase/image/image_save.cpp
+index 388b3d0..692fb81 100644
+--- a/kysdk-kabase/kabase/image/image_save.cpp
++++ b/kysdk-kabase/kabase/image/image_save.cpp
+@@ -22,16 +22,16 @@
+ 
+ #include <stb/stb_image_write.h>
+ 
+-#include <QPixmap>
+-#include <QPainter>
+-#include <QSvgGenerator>
+-#include <QFileInfo>
+ #include <QDir>
++#include <QFileInfo>
++#include <QPainter>
++#include <QPixmap>
+ #include <QProcess>
++#include <QSvgGenerator>
+ 
+-#include "log.hpp"
+-#include "image/image_save.hpp"
+ #include "image/converter.hpp"
++#include "image/image_save.hpp"
++#include "log.hpp"
+ 
+ namespace kdk
+ {
+@@ -43,7 +43,9 @@ ImageSave::ImageSave()
+     initSaveFormat();
+ }
+ 
+-ImageSave::~ImageSave() {}
++ImageSave::~ImageSave()
++{
++}
+ 
+ void ImageSave::initSaveFormat(void)
+ {
+@@ -169,7 +171,6 @@ bool ImageSave::saveDynamicImage(QString path, image::ImageResult imageResult, i
+     return true;
+ }
+ 
+-
+ bool ImageSave::imageSaveFromQt(QString path, cv::Mat mat, image::ImageFormat format)
+ {
+     info << "kabase : save static image from Qt ...";
+diff --git a/kysdk-kabase/kabase/image/utils.cpp b/kysdk-kabase/kabase/image/utils.cpp
+index 609bbd7..0e071e3 100644
+--- a/kysdk-kabase/kabase/image/utils.cpp
++++ b/kysdk-kabase/kabase/image/utils.cpp
+@@ -20,13 +20,13 @@
+  *
+  */
+ 
+-#include <QFileInfo>
+-#include <QFile>
+ #include <QByteArray>
++#include <QFile>
++#include <QFileInfo>
+ #include <QProcess>
+ 
+-#include "log.hpp"
+ #include "image/utils.hpp"
++#include "log.hpp"
+ 
+ namespace kdk
+ {
+diff --git a/kysdk-kabase/kabase/kylin_image_codec/image_conver/image_conver.cpp b/kysdk-kabase/kabase/kylin_image_codec/image_conver/image_conver.cpp
+index 3b92e73..c4da1cc 100644
+--- a/kysdk-kabase/kabase/kylin_image_codec/image_conver/image_conver.cpp
++++ b/kysdk-kabase/kabase/kylin_image_codec/image_conver/image_conver.cpp
+@@ -161,20 +161,19 @@ bool KylinImageCodec::mat2fibitmap(Mat mat, FREE_IMAGE_FORMAT fi_format, QString
+ 
+ FLAG:
+     if (dst == NULL) {
+-        //转换失败
++        // 转换失败
+         return NULL;
+     }
+ 
+-
+     /* 拷贝内存数据 */
+     for (int ih = 0; ih < height; ih++) {
+         BYTE *ptr2Line = FreeImage_GetScanLine(dst, (height - 1) - ih);
+         memcpy(ptr2Line, mat.ptr(ih), srcRowBytes);
+     }
+ 
+-    //转换成功
++    // 转换成功
+     if (FreeImage_Save(fi_format, dst, filename.toLocal8Bit().data(), 0)) {
+-        //保存成功
++        // 保存成功
+         return true;
+     } else {
+         /* 保存失败时 , 申请其他格式的内存再次进行保存 */
+@@ -325,7 +324,7 @@ FLAG:
+         }
+ 
+         if (mat.type() == 0) {
+-            //保存图像失败,mat格式为0时保存
++            // 保存图像失败,mat格式为0时保存
+             switch (flag_0) {
+             case 0: {
+                 dst = FreeImage_AllocateT(FIT_BITMAP, width, height, 8);
+diff --git a/kysdk-kabase/kabase/kylin_image_codec/image_load/image_load.cpp b/kysdk-kabase/kabase/kylin_image_codec/image_load/image_load.cpp
+index d10ee16..99e6430 100644
+--- a/kysdk-kabase/kabase/kylin_image_codec/image_load/image_load.cpp
++++ b/kysdk-kabase/kabase/kylin_image_codec/image_load/image_load.cpp
+@@ -35,7 +35,7 @@ MatResult KylinImageCodec::loadImageToMat(QString path)
+ MatResult KylinImageCodec::loadThumbnailToMat(QString path, ImreadModes modes, QSize size)
+ {
+     MatResult mr;
+-    //获取文件信息
++    // 获取文件信息
+     QFileInfo info(path);
+     // svg、gif等opencv不支持的格式
+     QString suffix = info.suffix().toLower();
+@@ -66,7 +66,7 @@ MatResult KylinImageCodec::loadThumbnailToMat(QString path, ImreadModes modes, Q
+     }
+     mr.info = info;
+     Mat mat = mr.mat;
+-    //判断图像是否有效
++    // 判断图像是否有效
+     if (!mat.data) {
+         mr.openSuccess = false;
+     }
+@@ -121,11 +121,10 @@ MatResult KylinImageCodec::loadImageToMat(QString path, ImreadModes modes, QStri
+         mat = loadFreeimageFormat(path.toLocal8Bit().data());
+     }
+ 
+-
+-    //其他情况下尝试正常读取图像
++    // 其他情况下尝试正常读取图像
+     if (!mat.data) {
+         mat = imread(path.toLocal8Bit().data(), modes);
+-        //加载三通道bmp格式图片时,某些图有可能会按照4通道去加载,导致图片完全透明
++        // 加载三通道bmp格式图片时,某些图有可能会按照4通道去加载,导致图片完全透明
+         if (modes == IMREAD_UNCHANGED && suffix == "bmp") {
+             if (mat.channels() == 4) {
+                 mat = imread(path.toLocal8Bit().data(), IMREAD_ANYCOLOR);
+@@ -135,7 +134,7 @@ MatResult KylinImageCodec::loadImageToMat(QString path, ImreadModes modes, QStri
+                 mat = imread(path.toLocal8Bit().data(), IMREAD_COLOR);
+             }
+         }
+-        //通用加载方法的缩略图尺寸优化
++        // 通用加载方法的缩略图尺寸优化
+         if (mat.cols < size.width() && mat.rows < size.height() && modes == IMREAD_REDUCED_COLOR_8) {
+             mat = imread(path.toLocal8Bit().data());
+         }
+@@ -148,7 +147,7 @@ MatResult KylinImageCodec::loadMovieToMat(QString path, ImreadModes modes, QStri
+ {
+     MatResult mr;
+     Mat mat;
+-    //如果是缩略图节则省资源
++    // 如果是缩略图节则省资源
+     if (modes == IMREAD_REDUCED_COLOR_8) {
+         QImage img(path, "apng");
+         mat = Mat(img.height(), img.width(), CV_8UC4, const_cast<uchar *>(img.bits()),
+@@ -165,26 +164,26 @@ MatResult KylinImageCodec::loadMovieToMat(QString path, ImreadModes modes, QStri
+               static_cast<size_t>(image.bytesPerLine()))
+               .clone();
+     mr.mat = mat;
+-    //如果大于一帧
++    // 如果大于一帧
+     if (tmpMovie->frameCount() > 1) {
+         mr.matList = new QList<Mat>;
+-        //获取帧率
++        // 获取帧率
+         mr.fps = getDelay(path, suffix);
+-        //获取第二帧
++        // 获取第二帧
+         tmpMovie->jumpToFrame(1);
+         image = tmpMovie->currentImage();
+         Mat secondMat = Mat(image.height(), image.width(), CV_8UC4, const_cast<uchar *>(image.bits()),
+                             static_cast<size_t>(image.bytesPerLine()))
+                             .clone();
+-        //存放前两帧
++        // 存放前两帧
+         mr.matList->append(mat);
+         mr.matList->append(secondMat);
+-        //从第三帧开始,在线程中加载
++        // 从第三帧开始,在线程中加载
+         LoadMovie *loadMovie = new LoadMovie(mr.matList, tmpMovie);
+         connect(loadMovie, &LoadMovie::loadMovieFinish, getSignalObj(), &KylinImageCodecSignals::loadMovieFinish);
+         loadMovie->start();
+     }
+-    //临界值为2时,在线程中回收
++    // 临界值为2时,在线程中回收
+     if (tmpMovie->frameCount() < 2) {
+         tmpMovie->deleteLater();
+         Q_EMIT getSignalObj()->loadMovieFinish(path);
+@@ -198,8 +197,8 @@ int KylinImageCodec::gifDelay(const QString &path)
+     int j = 0;
+     int frameDelay = 0;
+     SavedImage *
+-        frame; //这个是系统中保存gif的扩展块的信息,不太了解gif的文件结构的可以看一下:http://blog.csdn.net/wzy198852/article/details/17266507
+-    ExtensionBlock *ext = nullptr; //这个保存gif延时代码块的结构体
++        frame; // 这个是系统中保存gif的扩展块的信息,不太了解gif的文件结构的可以看一下:http://blog.csdn.net/wzy198852/article/details/17266507
++    ExtensionBlock *ext = nullptr; // 这个保存gif延时代码块的结构体
+ 
+     int err = 0;
+     GifFileType *gifFileType = DGifOpenFileName(path.toLocal8Bit().data(), &err);
+@@ -208,16 +207,16 @@ int KylinImageCodec::gifDelay(const QString &path)
+         return 0;
+     }
+     DGifSlurp(gifFileType);
+-    frame = &gifFileType->SavedImages[0]; //拿到第一个图片相关信息
++    frame = &gifFileType->SavedImages[0]; // 拿到第一个图片相关信息
+     for (j = 0; j < frame->ExtensionBlockCount; j++) {
+-        //找到含有延迟时间的代码块
++        // 找到含有延迟时间的代码块
+         if (frame->ExtensionBlocks[j].Function == GRAPHICS_EXT_FUNC_CODE) {
+             ext = &(frame->ExtensionBlocks[j]);
+         }
+-        //拿到延迟时间
++        // 拿到延迟时间
+         if (ext) {
+-            //延迟时间1-->10ms
+-            frameDelay = 10 * (ext->Bytes[2] << 8 | ext->Bytes[1]); //拿到延迟时间
++            // 延迟时间1-->10ms
++            frameDelay = 10 * (ext->Bytes[2] << 8 | ext->Bytes[1]); // 拿到延迟时间
+             break;
+         }
+     }
+@@ -241,8 +240,8 @@ int KylinImageCodec::getDelay(const QString &path, const QString &suffix)
+         return fps;
+     }
+ 
+-    //以上都没获取到fps的保底机制
+-    // QMovie没有现成的方法,为求稳定,每次打开新动图的时候循环5次取最大值,此处待优化
++    // 以上都没获取到fps的保底机制
++    //  QMovie没有现成的方法,为求稳定,每次打开新动图的时候循环5次取最大值,此处待优化
+     QMovie tmpMovie(path);
+     if (fps == 0) {
+         for (int i = 0; i < 5; i++) {
+@@ -397,7 +396,6 @@ FREE_IMAGE_FORMAT KylinImageCodec::get_real_format(const QString &path)
+     /* 根据后缀获取对应的格式 */
+     format = static_cast<FREE_IMAGE_FORMAT>(m_formats[file_suffix_upper]);
+ 
+-
+     return format >= 0 ? format : FIF_UNKNOWN;
+ }
+ 
+diff --git a/kysdk-kabase/kabase/kylin_image_codec/image_load/loadmovie.cpp b/kysdk-kabase/kabase/kylin_image_codec/image_load/loadmovie.cpp
+index 8e92a1d..60b71ee 100644
+--- a/kysdk-kabase/kabase/kylin_image_codec/image_load/loadmovie.cpp
++++ b/kysdk-kabase/kabase/kylin_image_codec/image_load/loadmovie.cpp
+@@ -31,7 +31,7 @@ LoadMovie::LoadMovie(QList<Mat> *list, QMovie *movie)
+ {
+     m_list = list;
+     m_movie = movie;
+-    //结束回收资源
++    // 结束回收资源
+     connect(this, &LoadMovie::finished, m_movie, &QMovie::deleteLater);
+     connect(this, &LoadMovie::finished, this, &LoadMovie::deleteLater);
+ }
+@@ -44,7 +44,7 @@ void LoadMovie::run()
+         Mat mat = Mat(image.height(), image.width(), CV_8UC4, const_cast<uchar *>(image.bits()),
+                       static_cast<size_t>(image.bytesPerLine()))
+                       .clone();
+-        //如果切换了图片,结束加载
++        // 如果切换了图片,结束加载
+         if (m_list->isEmpty()) {
+             return;
+         }
+diff --git a/kysdk-kabase/kabase/kylin_image_codec/image_save/image_save.cpp b/kysdk-kabase/kabase/kylin_image_codec/image_save/image_save.cpp
+index a199c00..4af4534 100644
+--- a/kysdk-kabase/kabase/kylin_image_codec/image_save/image_save.cpp
++++ b/kysdk-kabase/kabase/kylin_image_codec/image_save/image_save.cpp
+@@ -42,17 +42,17 @@ bool KylinImageCodec::saveImage(QList<Mat> *list, const int &fps, const QString
+ QString KylinImageCodec::saveWay(const QString &savepath, bool replace)
+ {
+     QFileInfo tmpFileInfo(savepath);
+-    //覆盖保存
++    // 覆盖保存
+     if (replace) {
+         return savepath;
+     }
+ 
+-    //备份保存
++    // 备份保存
+     QString tmpPath = savepath;
+     int num = 1;
+     while (QFileInfo::exists(tmpPath)) {
+         tmpPath = tmpFileInfo.absolutePath() + "/" + tmpFileInfo.completeBaseName() + "(" + QString::number(num) + ")"
+-                  + "." + tmpFileInfo.completeSuffix();
++            + "." + tmpFileInfo.completeSuffix();
+         num++;
+     }
+     return tmpPath;
+@@ -95,7 +95,7 @@ bool KylinImageCodec::save(const Mat &mat, const QString &savepath, const QStrin
+     //        stbi_write_hdr(savepath.toLocal8Bit().data(),tmpMat.cols,tmpMat.rows,3,img_pt);
+     //        return true;
+     //    }
+-    //单帧gif的场景
++    // 单帧gif的场景
+     if (type == "gif") {
+         QList<Mat> *list = new QList<Mat>;
+         list->append(mat);
+@@ -109,7 +109,7 @@ bool KylinImageCodec::save(const Mat &mat, const QString &savepath, const QStrin
+         QPixmap pix = converFormat(mat);
+         return pix.save(savepath);
+     }
+-    //如果是freeimage库的图片
++    // 如果是freeimage库的图片
+     if (m_freeimageSupportFormats.contains(type)) {
+         if (type == "xpm" || type == "xbm" || type == "wbmp") {
+             QPixmap pix = converFormat(mat);
+@@ -120,7 +120,7 @@ bool KylinImageCodec::save(const Mat &mat, const QString &savepath, const QStrin
+         return saveFreeImage(savepath, mat, fif);
+     }
+ 
+-    //非特殊情况
++    // 非特殊情况
+     return imwrite(savepath.toStdString(), mat);
+ }
+ 
+diff --git a/kysdk-kabase/kabase/kylin_image_codec/image_save/savemovie.cpp b/kysdk-kabase/kabase/kylin_image_codec/image_save/savemovie.cpp
+index cc0746e..62122d1 100644
+--- a/kysdk-kabase/kabase/kylin_image_codec/image_save/savemovie.cpp
++++ b/kysdk-kabase/kabase/kylin_image_codec/image_save/savemovie.cpp
+@@ -27,12 +27,12 @@ namespace kdk
+ namespace kabase
+ {
+ 
+-//临时文件路径
++// 临时文件路径
+ const QString SaveMovie::TEMP_PATH = SaveMovie::creatTempPath();
+ 
+ SaveMovie::SaveMovie(QList<Mat> *list, const int &fps, const QString &savepath, QStringList *savelist)
+ {
+-    //结束回收资源
++    // 结束回收资源
+     connect(this, &SaveMovie::finished, this, &SaveMovie::deleteLater);
+     m_fps = fps;
+     m_savepath = savepath;
+@@ -66,26 +66,26 @@ void SaveMovie::run()
+     QString suffix = info.suffix().toLower();
+     QString tmpDir = TEMP_PATH + name + "/";
+     QString ster = "\"";
+-    //新建目录
++    // 新建目录
+     QDir dir;
+     dir.mkdir(tmpDir);
+     int num = 0;
+-    //存储所有帧
++    // 存储所有帧
+     for (Mat &mat : *m_list) {
+         num++;
+         QString str = tmpDir + QString::number(num) + ".png";
+         imwrite(str.toStdString(), mat);
+     }
+-    //析构临时队列
++    // 析构临时队列
+     m_list->clear();
+-    //构造命令
++    // 构造命令
+     QString tmpFilePath = tmpDir + tmpName + "." + "apng";
+     QString cmd = "apngasm ";
+     cmd += ster + tmpFilePath + ster;
+     cmd += " " + ster + tmpDir + "*.png\" ";
+     cmd += QString::number(m_fps);
+     cmd += " 1000 -z0";
+-    //执行命令
++    // 执行命令
+     m_process->start(cmd);
+     m_process->waitForStarted();
+     m_process->waitForFinished();
+@@ -93,7 +93,7 @@ void SaveMovie::run()
+         qDebug() << "动图保存失败";
+         return saveFinish();
+     }
+-    //转码
++    // 转码
+     if (suffix == "gif") {
+         QString cmd2 = "apng2gif ";
+         cmd2 += " " + ster + tmpFilePath + ster;
+@@ -107,14 +107,14 @@ void SaveMovie::run()
+             return saveFinish();
+         }
+     }
+-    //移动回原目录
++    // 移动回原目录
+     QString cmd3 = "mv ";
+     cmd3 += ster + tmpFilePath + ster;
+     cmd3 += " " + ster + m_savepath + ster;
+     m_process->start(cmd3);
+     m_process->waitForStarted();
+     m_process->waitForFinished();
+-    //删除临时文件
++    // 删除临时文件
+     QString deleteTmpImages = "rm -rf " + ster + tmpDir + ster;
+     m_process->start(deleteTmpImages);
+     m_process->waitForStarted();
+@@ -138,7 +138,8 @@ void SaveMovie::processLog()
+     if (error == "") {
+         return;
+     }
+-    qDebug() << "--------process error--------\n" << error << "\n-----------------------------";
++    qDebug() << "--------process error--------\n"
++             << error << "\n-----------------------------";
+ }
+ 
+ } // namespace kabase
+diff --git a/kysdk-kabase/kabase/kylin_image_codec/kylinimagecodec.cpp b/kysdk-kabase/kabase/kylin_image_codec/kylinimagecodec.cpp
+index 3e5a9f9..950ac30 100644
+--- a/kysdk-kabase/kabase/kylin_image_codec/kylinimagecodec.cpp
++++ b/kysdk-kabase/kabase/kylin_image_codec/kylinimagecodec.cpp
+@@ -56,8 +56,8 @@ const QString KylinImageCodec::m_supportFrmatsClassify = "(*.jpg *.jpe *.jpeg);;
+                                                          "(*.jp2 *.j2k *.jng);;(*.wbmp);;"
+                                                          "(*.xbm *.xpm)";
+ const QStringList KylinImageCodec::m_supportFormats = KylinImageCodec::m_opencvSupportFormats
+-                                                      + KylinImageCodec::m_freeimageSupportFormats
+-                                                      + KylinImageCodec::m_otherSupportFormats;
++    + KylinImageCodec::m_freeimageSupportFormats
++    + KylinImageCodec::m_otherSupportFormats;
+ 
+ QHash<QString, int> KylinImageCodec::m_formats = KylinImageCodec::creatFormats();
+ QHash<QString, int> KylinImageCodec::creatFormats()
+diff --git a/kysdk-kabase/kabase/kylin_system/session_management.cpp b/kysdk-kabase/kabase/kylin_system/session_management.cpp
+index a9d04c7..2002955 100644
+--- a/kysdk-kabase/kabase/kylin_system/session_management.cpp
++++ b/kysdk-kabase/kabase/kylin_system/session_management.cpp
+@@ -20,13 +20,13 @@
+  *
+  */
+ 
+-#include <QVariant>
+ #include <QDebug>
+ #include <QList>
++#include <QVariant>
+ 
+-#include "log.hpp"
+-#include "kylin_system/session_management.hpp"
+ #include "dbus.hpp"
++#include "kylin_system/session_management.hpp"
++#include "log.hpp"
+ 
+ namespace kdk
+ {
+diff --git a/kysdk-kabase/kabase/kylin_system/system_information.cpp b/kysdk-kabase/kabase/kylin_system/system_information.cpp
+index 929cee9..82f6538 100644
+--- a/kysdk-kabase/kabase/kylin_system/system_information.cpp
++++ b/kysdk-kabase/kabase/kylin_system/system_information.cpp
+@@ -32,8 +32,8 @@ namespace kabase
+ {
+ namespace
+ {
+-    constexpr char osReleasePath[] = "/etc/os-release";
+-    constexpr char osProjectCodeField[] = "PROJECT_CODENAME";
++constexpr char osReleasePath[] = "/etc/os-release";
++constexpr char osProjectCodeField[] = "PROJECT_CODENAME";
+ }
+ 
+ SystemInformation::SystemInformation() = default;
+@@ -93,8 +93,8 @@ QString SystemInformation::getProjectCodeName(void)
+     }
+ 
+     char buf[512];
+-    memset(buf , '\0' , sizeof(buf));
+-    while(file.readLine(buf , sizeof(buf)) != -1) {
++    memset(buf, '\0', sizeof(buf));
++    while (file.readLine(buf, sizeof(buf)) != -1) {
+         QString line = QString(buf).trimmed();
+         if (line.contains(osProjectCodeField)) {
+             QStringList lineList = line.split(QChar('='));
+@@ -103,7 +103,7 @@ QString SystemInformation::getProjectCodeName(void)
+                 return lineList.at(1);
+             }
+         }
+-        memset(buf , '\0' , sizeof(buf));
++        memset(buf, '\0', sizeof(buf));
+     }
+ 
+     return "";
+diff --git a/kysdk-kabase/kabase/kylin_system/theme_management.cpp b/kysdk-kabase/kabase/kylin_system/theme_management.cpp
+index d41ef7f..267e2ac 100644
+--- a/kysdk-kabase/kabase/kylin_system/theme_management.cpp
++++ b/kysdk-kabase/kabase/kylin_system/theme_management.cpp
+@@ -20,12 +20,12 @@
+  *
+  */
+ 
+-#include <QVariant>
+-#include <QPalette>
+ #include <QColor>
++#include <QPalette>
++#include <QVariant>
+ 
+-#include "theme_management.hpp"
+ #include "log.hpp"
++#include "theme_management.hpp"
+ 
+ namespace kdk
+ {
+@@ -47,10 +47,10 @@ bool ThemeManagement::setProperty(QObject *object, Property property)
+     switch (property) {
+     case Property::MinButton || Property::MaxButton:
+         return object->setProperty("isWindowButton", QVariant(0x1))
+-               && object->setProperty("useIconHighlightEffect", QVariant(0x2));
++            && object->setProperty("useIconHighlightEffect", QVariant(0x2));
+     case Property::CloseButton:
+         return object->setProperty("isWindowButton", QVariant(0x2))
+-               && object->setProperty("useIconHighlightEffect", QVariant(0x8));
++            && object->setProperty("useIconHighlightEffect", QVariant(0x8));
+     case Property::ButtonThreeStateGrey:
+         return object->setProperty("useButtonPalette", QVariant(true));
+     case Property::ButtonThreeStateBlue:
+diff --git a/kysdk-kabase/kabase/kylin_system/user_manual.cpp b/kysdk-kabase/kabase/kylin_system/user_manual.cpp
+index 91c821e..fec16de 100644
+--- a/kysdk-kabase/kabase/kylin_system/user_manual.cpp
++++ b/kysdk-kabase/kabase/kylin_system/user_manual.cpp
+@@ -24,9 +24,9 @@
+ 
+ #include <QDBusMessage>
+ 
++#include "dbus.hpp"
+ #include "log.hpp"
+ #include "user_manual.hpp"
+-#include "dbus.hpp"
+ 
+ namespace kdk
+ {
+diff --git a/kysdk-kabase/kabase/kylin_system/xatom_helper.cpp b/kysdk-kabase/kabase/kylin_system/xatom_helper.cpp
+index 2087aa4..0bdade1 100644
+--- a/kysdk-kabase/kabase/kylin_system/xatom_helper.cpp
++++ b/kysdk-kabase/kabase/kylin_system/xatom_helper.cpp
+@@ -25,10 +25,10 @@
+ 
+ #include <QX11Info>
+ 
++#include <NETWM>
+ #include <X11/X.h>
+ #include <X11/Xatom.h>
+ #include <X11/Xlib.h>
+-#include <NETWM>
+ 
+ static XAtomHelper *global_instance = nullptr;
+ 
+@@ -117,9 +117,9 @@ UnityCorners XAtomHelper::getWindowBorderRadius(int winId)
+         if (type == XA_CARDINAL) {
+             if (nitems == 4) {
+                 corners.topLeft = static_cast<ulong>(data[0]);
+-                corners.topRight = static_cast<ulong>(data[1*sizeof (ulong)]);
+-                corners.bottomLeft = static_cast<ulong>(data[2*sizeof (ulong)]);
+-                corners.bottomRight = static_cast<ulong>(data[3*sizeof (ulong)]);
++                corners.topRight = static_cast<ulong>(data[1 * sizeof(ulong)]);
++                corners.bottomLeft = static_cast<ulong>(data[2 * sizeof(ulong)]);
++                corners.bottomRight = static_cast<ulong>(data[3 * sizeof(ulong)]);
+             }
+             XFree(data);
+         }
+@@ -136,7 +136,7 @@ void XAtomHelper::setWindowBorderRadius(int winId, const UnityCorners &data)
+     ulong corners[4] = {data.topLeft, data.topRight, data.bottomLeft, data.bottomRight};
+ 
+     XChangeProperty(QX11Info::display(), winId, m_unityBorderRadiusAtom, XA_CARDINAL,
+-                    32, XCB_PROP_MODE_REPLACE, (const unsigned char *) &corners, sizeof (corners)/sizeof (corners[0]));
++                    32, XCB_PROP_MODE_REPLACE, (const unsigned char *)&corners, sizeof(corners) / sizeof(corners[0]));
+ }
+ 
+ void XAtomHelper::setWindowBorderRadius(int winId, int topLeft, int topRight, int bottomLeft, int bottomRight)
+@@ -147,7 +147,7 @@ void XAtomHelper::setWindowBorderRadius(int winId, int topLeft, int topRight, in
+     ulong corners[4] = {(ulong)topLeft, (ulong)topRight, (ulong)bottomLeft, (ulong)bottomRight};
+ 
+     XChangeProperty(QX11Info::display(), winId, m_unityBorderRadiusAtom, XA_CARDINAL,
+-                    32, XCB_PROP_MODE_REPLACE, (const unsigned char *) &corners, sizeof (corners)/sizeof (corners[0]));
++                    32, XCB_PROP_MODE_REPLACE, (const unsigned char *)&corners, sizeof(corners) / sizeof(corners[0]));
+ }
+ 
+ void XAtomHelper::setUKUIDecoraiontHint(int winId, bool set)
+@@ -155,7 +155,7 @@ void XAtomHelper::setUKUIDecoraiontHint(int winId, bool set)
+     if (m_ukuiDecorationAtion == None)
+         return;
+ 
+-    XChangeProperty(QX11Info::display(), winId, m_ukuiDecorationAtion, m_ukuiDecorationAtion, 32, XCB_PROP_MODE_REPLACE, (const unsigned char *) &set, 1);
++    XChangeProperty(QX11Info::display(), winId, m_ukuiDecorationAtion, m_ukuiDecorationAtion, 32, XCB_PROP_MODE_REPLACE, (const unsigned char *)&set, 1);
+ }
+ 
+ void XAtomHelper::setWindowMotifHint(int winId, const MotifWmHints &hints)
+@@ -164,7 +164,7 @@ void XAtomHelper::setWindowMotifHint(int winId, const MotifWmHints &hints)
+         return;
+ 
+     XChangeProperty(QX11Info::display(), winId, m_motifWMHintsAtom, m_motifWMHintsAtom,
+-                    32, XCB_PROP_MODE_REPLACE, (const unsigned char *)&hints, sizeof (MotifWmHints)/ sizeof (ulong));
++                    32, XCB_PROP_MODE_REPLACE, (const unsigned char *)&hints, sizeof(MotifWmHints) / sizeof(ulong));
+ }
+ 
+ MotifWmHints XAtomHelper::getWindowMotifHint(int winId)
+@@ -181,7 +181,7 @@ MotifWmHints XAtomHelper::getWindowMotifHint(int winId)
+     ulong bytes_after;
+ 
+     XGetWindowProperty(QX11Info::display(), winId, m_motifWMHintsAtom,
+-                       0, sizeof (MotifWmHints)/sizeof (long), false, AnyPropertyType, &type,
++                       0, sizeof(MotifWmHints) / sizeof(long), false, AnyPropertyType, &type,
+                        &format, &nitems, &bytes_after, &data);
+ 
+     if (type == None) {
+@@ -193,7 +193,8 @@ MotifWmHints XAtomHelper::getWindowMotifHint(int winId)
+     return hints;
+ }
+ 
+-XAtomHelper::XAtomHelper(QObject *parent) : QObject(parent)
++XAtomHelper::XAtomHelper(QObject *parent)
++    : QObject(parent)
+ {
+     if (!QX11Info::isPlatformX11())
+         return;
+diff --git a/kysdk-kabase/kabase/log.cpp b/kysdk-kabase/kabase/log.cpp
+index df5db23..17446ce 100644
+--- a/kysdk-kabase/kabase/log.cpp
++++ b/kysdk-kabase/kabase/log.cpp
+@@ -31,14 +31,18 @@ namespace kdk
+ namespace kabase
+ {
+ 
+-Log::Log() {}
++Log::Log()
++{
++}
+ 
+ Log::Log(LogLevel logLevel)
+ {
+     this->m_logLevel = logLevel;
+ }
+ 
+-Log::~Log() {}
++Log::~Log()
++{
++}
+ 
+ const Log &Log::operator<<(int value) const
+ {
+diff --git a/kysdk-kabase/kabase/single_application/local_peer.cpp b/kysdk-kabase/kabase/single_application/local_peer.cpp
+index b7ef307..b5c0e93 100644
+--- a/kysdk-kabase/kabase/single_application/local_peer.cpp
++++ b/kysdk-kabase/kabase/single_application/local_peer.cpp
+@@ -38,7 +38,6 @@
+ **
+ ****************************************************************************/
+ 
+-
+ #include "local_peer.hpp"
+ #include <QCoreApplication>
+ #include <QDataStream>
+@@ -74,7 +73,9 @@ namespace QtLP_Private
+ 
+ const char *QtLocalPeer::ack = "ack";
+ 
+-QtLocalPeer::QtLocalPeer(QObject *parent, const QString &appId) : QObject(parent), id(appId)
++QtLocalPeer::QtLocalPeer(QObject *parent, const QString &appId)
++    : QObject(parent)
++    , id(appId)
+ {
+     QString prefix = id;
+     if (id.isEmpty()) {
+@@ -135,7 +136,6 @@ bool QtLocalPeer::isClient()
+     return false;
+ }
+ 
+-
+ bool QtLocalPeer::sendMessage(const QString &message, int timeout)
+ {
+     if (!isClient())
+@@ -172,7 +172,6 @@ bool QtLocalPeer::sendMessage(const QString &message, int timeout)
+     return res;
+ }
+ 
+-
+ void QtLocalPeer::receiveConnection()
+ {
+     QLocalSocket *socket = server->nextPendingConnection();
+@@ -212,7 +211,7 @@ void QtLocalPeer::receiveConnection()
+     socket->waitForBytesWritten(1000);
+     socket->waitForDisconnected(1000); // make sure client reads ack
+     delete socket;
+-    Q_EMIT messageReceived(message); //### (might take a long time to return)
++    Q_EMIT messageReceived(message); // ### (might take a long time to return)
+ }
+ 
+ } // namespace kabase
+diff --git a/kysdk-kabase/kabase/single_application/locked_file.cpp b/kysdk-kabase/kabase/single_application/locked_file.cpp
+index d66fd93..f5b5465 100644
+--- a/kysdk-kabase/kabase/single_application/locked_file.cpp
++++ b/kysdk-kabase/kabase/single_application/locked_file.cpp
+@@ -81,7 +81,8 @@
+     \sa QFile::QFile()
+ */
+ 
+-QtLockedFile::QtLockedFile() : QFile()
++QtLockedFile::QtLockedFile()
++    : QFile()
+ {
+ #ifdef Q_OS_WIN
+     wmutex = 0;
+@@ -97,7 +98,8 @@ QtLockedFile::QtLockedFile() : QFile()
+ 
+     \sa QFile::QFile()
+ */
+-QtLockedFile::QtLockedFile(const QString &name) : QFile(name)
++QtLockedFile::QtLockedFile(const QString &name)
++    : QFile(name)
+ {
+ #ifdef Q_OS_WIN
+     wmutex = 0;
+diff --git a/kysdk-kabase/kabase/single_application/locked_file_unix.cpp b/kysdk-kabase/kabase/single_application/locked_file_unix.cpp
+index 74ab991..ae94d63 100644
+--- a/kysdk-kabase/kabase/single_application/locked_file_unix.cpp
++++ b/kysdk-kabase/kabase/single_application/locked_file_unix.cpp
+@@ -38,10 +38,10 @@
+ **
+ ****************************************************************************/
+ 
+-#include <string.h>
+ #include <errno.h>
+-#include <unistd.h>
+ #include <fcntl.h>
++#include <string.h>
++#include <unistd.h>
+ 
+ #include "locked_file.hpp"
+ 
+@@ -75,12 +75,10 @@ bool QtLockedFile::lock(LockMode mode, bool block)
+         return false;
+     }
+ 
+-
+     m_lock_mode = mode;
+     return true;
+ }
+ 
+-
+ bool QtLockedFile::unlock()
+ {
+     if (!isOpen()) {
+diff --git a/kysdk-kabase/kabase/single_application/single_application.cpp b/kysdk-kabase/kabase/single_application/single_application.cpp
+index c1af8af..d27cf6a 100644
+--- a/kysdk-kabase/kabase/single_application/single_application.cpp
++++ b/kysdk-kabase/kabase/single_application/single_application.cpp
+@@ -38,7 +38,6 @@
+ **
+ ****************************************************************************/
+ 
+-
+ #include "single_application.hpp"
+ #include "local_peer.hpp"
+ 
+@@ -145,7 +144,6 @@ void QtSingleApplication::sysInit(const QString &appId)
+     connect(peer, SIGNAL(messageReceived(const QString &)), SIGNAL(messageReceived(const QString &)));
+ }
+ 
+-
+ /*!
+     Creates a QtSingleApplication object. The application identifier
+     will be QCoreApplication::applicationFilePath(). \a argc, \a
+@@ -156,19 +154,20 @@ void QtSingleApplication::sysInit(const QString &appId)
+     QtSingleCoreApplication instead.
+ */
+ 
+-QtSingleApplication::QtSingleApplication(int &argc, char **argv, bool GUIenabled) : QApplication(argc, argv, GUIenabled)
++QtSingleApplication::QtSingleApplication(int &argc, char **argv, bool GUIenabled)
++    : QApplication(argc, argv, GUIenabled)
+ {
+     sysInit();
+ }
+ 
+-
+ /*!
+     Creates a QtSingleApplication object with the application
+     identifier \a appId. \a argc and \a argv are passed on to the
+     QAppliation constructor.
+ */
+ 
+-QtSingleApplication::QtSingleApplication(const QString &appId, int &argc, char **argv) : QApplication(argc, argv)
++QtSingleApplication::QtSingleApplication(const QString &appId, int &argc, char **argv)
++    : QApplication(argc, argv)
+ {
+     sysInit(appId);
+ }
+@@ -180,12 +179,12 @@ QtSingleApplication::QtSingleApplication(const QString &appId, int &argc, char *
+     will be QCoreApplication::applicationFilePath(). \a argc, \a
+     argv, and \a type are passed on to the QAppliation constructor.
+ */
+-QtSingleApplication::QtSingleApplication(int &argc, char **argv, Type type) : QApplication(argc, argv, type)
++QtSingleApplication::QtSingleApplication(int &argc, char **argv, Type type)
++    : QApplication(argc, argv, type)
+ {
+     sysInit();
+ }
+ 
+-
+ #if defined(Q_WS_X11)
+ /*!
+   Special constructor for X11, ref. the documentation of
+@@ -228,7 +227,6 @@ QtSingleApplication::QtSingleApplication(Display *dpy, const QString &appId, int
+ #endif // Q_WS_X11
+ #endif // QT_VERSION < 0x050000
+ 
+-
+ /*!
+     Returns true if another instance of this application is running;
+     otherwise false.
+@@ -245,7 +243,6 @@ bool QtSingleApplication::isRunning()
+     return peer->isClient();
+ }
+ 
+-
+ /*!
+     Tries to send the text \a message to the currently running
+     instance. The QtSingleApplication object in the running instance
+@@ -264,7 +261,6 @@ bool QtSingleApplication::sendMessage(const QString &message, int timeout)
+     return peer->sendMessage(message, timeout);
+ }
+ 
+-
+ /*!
+     Returns the application identifier. Two processes with the same
+     identifier will be regarded as instances of the same application.
+@@ -274,7 +270,6 @@ QString QtSingleApplication::id() const
+     return peer->applicationId();
+ }
+ 
+-
+ /*!
+   Sets the activation window of this application to \a aw. The
+   activation window is the widget that will be activated by
+@@ -296,7 +291,6 @@ void QtSingleApplication::setActivationWindow(QWidget *aw, bool activateOnMessag
+         disconnect(peer, SIGNAL(messageReceived(const QString &)), this, SLOT(activateWindow()));
+ }
+ 
+-
+ /*!
+     Returns the applications activation window if one has been set by
+     calling setActivationWindow(), otherwise returns 0.
+@@ -308,7 +302,6 @@ QWidget *QtSingleApplication::activationWindow() const
+     return actWin;
+ }
+ 
+-
+ /*!
+   De-minimizes, raises, and activates this application's activation window.
+   This function does nothing if no activation window has been set.
+@@ -343,7 +336,6 @@ void QtSingleApplication::activateWindow()
+     \sa sendMessage(), setActivationWindow(), activateWindow()
+ */
+ 
+-
+ /*!
+     \fn void QtSingleApplication::initialize(bool dummy = true)
+ 
+diff --git a/kysdk-kabase/test/application_access_test/application_a/main.cpp b/kysdk-kabase/test/application_access_test/application_a/main.cpp
+index 0bd5de1..45a20b8 100644
+--- a/kysdk-kabase/test/application_access_test/application_a/main.cpp
++++ b/kysdk-kabase/test/application_access_test/application_a/main.cpp
+@@ -21,9 +21,9 @@
+  */
+ 
+ #include <QCoreApplication>
++#include <QDebug>
+ #include <QList>
+ #include <QVariant>
+-#include <QDebug>
+ 
+ #include "../../../kabase/application_access.hpp"
+ 
+diff --git a/kysdk-kabase/test/application_access_test/application_b/main.cpp b/kysdk-kabase/test/application_access_test/application_b/main.cpp
+index 7f2d31d..1f9776c 100644
+--- a/kysdk-kabase/test/application_access_test/application_b/main.cpp
++++ b/kysdk-kabase/test/application_access_test/application_b/main.cpp
+@@ -21,9 +21,9 @@
+  */
+ 
+ #include <QCoreApplication>
++#include <QDebug>
+ #include <QList>
+ #include <QVariant>
+-#include <QDebug>
+ 
+ #include "../../../kabase/application_access.hpp"
+ 
+diff --git a/kysdk-kabase/test/gsettings_test.cpp b/kysdk-kabase/test/gsettings_test.cpp
+index 1ddb2df..3dcb617 100644
+--- a/kysdk-kabase/test/gsettings_test.cpp
++++ b/kysdk-kabase/test/gsettings_test.cpp
+@@ -20,8 +20,8 @@
+  *
+  */
+ 
+-#include <QString>
+ #include <QDebug>
++#include <QString>
+ 
+ #include "gsettings.hpp"
+ #include "gsettings_test.hpp"
+@@ -33,7 +33,9 @@ GsettingTest::GsettingTest()
+     this->signalGsettingsTest();
+ }
+ 
+-GsettingTest::~GsettingTest() {}
++GsettingTest::~GsettingTest()
++{
++}
+ 
+ void GsettingTest::systemGsettingsTest(void)
+ {
+diff --git a/kysdk-kabase/test/image_test.cpp b/kysdk-kabase/test/image_test.cpp
+index 1947c4f..c84f8bf 100644
+--- a/kysdk-kabase/test/image_test.cpp
++++ b/kysdk-kabase/test/image_test.cpp
+@@ -20,11 +20,11 @@
+  *
+  */
+ 
+-#include <QDir>
+ #include <QDebug>
++#include <QDir>
+ 
+-#include "kylinimagecodec.hpp"
+ #include "image_test.hpp"
++#include "kylinimagecodec.hpp"
+ 
+ ImageTest::ImageTest()
+ {
+@@ -34,7 +34,9 @@ ImageTest::ImageTest()
+     connect(m_nextImageLabel, &QPushButton::clicked, this, &ImageTest::showImage);
+ }
+ 
+-ImageTest::~ImageTest() {}
++ImageTest::~ImageTest()
++{
++}
+ 
+ QPixmap ImageTest::loadImage(QString path)
+ {
+diff --git a/kysdk-kabase/test/main.cpp b/kysdk-kabase/test/main.cpp
+index 396de83..6f772fa 100644
+--- a/kysdk-kabase/test/main.cpp
++++ b/kysdk-kabase/test/main.cpp
+@@ -27,19 +27,19 @@
+ #include <QJsonObject>
+ #include <QJsonValue>
+ 
+-#include "single_application.hpp"
+-#include "currency.hpp"
+ #include "buried_point.hpp"
++#include "currency.hpp"
++#include "dbus.hpp"
+ #include "log.hpp"
+ #include "session_management.hpp"
+-#include "dbus.hpp"
++#include "single_application.hpp"
+ #include "system_information.hpp"
+ #include "user_manual.hpp"
+ 
+-#include "widget_test.hpp"
+-#include "gsettings_test.hpp"
+ #include "dbus_test.hpp"
++#include "gsettings_test.hpp"
+ #include "image_test.hpp"
++#include "widget_test.hpp"
+ 
+ /* 埋点接口测试 */
+ void buriedPointTest(void)
+@@ -146,10 +146,10 @@ void inhibitLockScreenTest(void)
+ /* 用户手册测试 */
+ void userManualTest(void)
+ {
+-    //kdk::kabase::UserManualManagement userManualTest;
+-    //if (!userManualTest.callUserManual(kdk::kabase::AppName::KylinIpmsg)) {
+-    //    qCritical() << "user manual call fail!";
+-    //}
++    // kdk::kabase::UserManualManagement userManualTest;
++    // if (!userManualTest.callUserManual(kdk::kabase::AppName::KylinIpmsg)) {
++    //     qCritical() << "user manual call fail!";
++    // }
+ 
+     kdk::kabase::UserManualManagement userManualTest;
+     if (!userManualTest.callUserManual("kylin-calculator")) {
+@@ -199,19 +199,19 @@ int main(int argc, char *argv[])
+     // kdk::kabase::WindowManagement::setScalingProperties();
+ 
+     /* 应用单例测试 */
+-    //kdk::kabase::QtSingleApplication app(argc, argv);
++    // kdk::kabase::QtSingleApplication app(argc, argv);
+ 
+-    //if (app.isRunning()) {
+-    //    qDebug() << "is running";
+-    //    app.sendMessage("running , 4000");
+-    //    return 0;
+-    //}
++    // if (app.isRunning()) {
++    //     qDebug() << "is running";
++    //     app.sendMessage("running , 4000");
++    //     return 0;
++    // }
+ 
+-    //QWidget widget;
+-    //app.setActivationWindow(&widget);
+-    //widget.show();
++    // QWidget widget;
++    // app.setActivationWindow(&widget);
++    // widget.show();
+ 
+-    //return app.exec();
++    // return app.exec();
+ 
+     QApplication app(argc, argv);
+ 
+@@ -239,7 +239,7 @@ int main(int argc, char *argv[])
+     // inhibitLockScreenTest();
+ 
+     /* 用户手册测试 */
+-    //userManualTest();
++    // userManualTest();
+ 
+     /* D-Bus 测试 */
+     // dbusTest();
+diff --git a/kysdk-kabase/test/widget_test.cpp b/kysdk-kabase/test/widget_test.cpp
+index 641e1d1..5dbe1c6 100644
+--- a/kysdk-kabase/test/widget_test.cpp
++++ b/kysdk-kabase/test/widget_test.cpp
+@@ -22,9 +22,9 @@
+ 
+ #include <QDebug>
+ 
+-#include "window_management.hpp"
+ #include "theme_management.hpp"
+ #include "widget_test.hpp"
++#include "window_management.hpp"
+ 
+ Widget::Widget()
+ {
+@@ -35,4 +35,6 @@ Widget::Widget()
+     kdk::kabase::ThemeManagement::setProperty(this, kdk::kabase::ThemeManagement::Property::ButtonThreeStateBlue);
+ }
+ 
+-Widget::~Widget() {}
++Widget::~Widget()
++{
++}
+diff --git a/kysdk-qtwidgets/src/accessinfohelper.h b/kysdk-qtwidgets/src/accessinfohelper.h
+index 89e4e18..f11eed3 100644
+--- a/kysdk-qtwidgets/src/accessinfohelper.h
++++ b/kysdk-qtwidgets/src/accessinfohelper.h
+@@ -1,103 +1,98 @@
+ #ifndef ACCESSIBLEFORMAT_H
+ #define ACCESSIBLEFORMAT_H
+ 
+-#include <QWidget>
+-#include <QString>
++#include <QApplication>
+ #include <QFileInfo>
++#include <QString>
++#include <QWidget>
+ #include <type_traits>
+-#include <QApplication>
+ 
+-namespace kdk {
++namespace kdk
++{
+ 
+-template <typename T>
+-QString combineAccessibleName(T* obj, QString widgetName, const QString& pluginName, const QString& extend = QString())
++template<typename T>
++QString combineAccessibleName(T *obj, QString widgetName, const QString &pluginName, const QString &extend = QString())
+ {
+-    if(!obj)
++    if (!obj)
+         return QString();
+-    if(!std::is_base_of<QObject, T>::value)
++    if (!std::is_base_of<QObject, T>::value)
+         return QString();
+     QFileInfo cmdInfo(QApplication::arguments().at(0));
+     QString accessibleName = cmdInfo.fileName();
+     accessibleName += "_";
+-    if(!pluginName.isEmpty())
+-    {
++    if (!pluginName.isEmpty()) {
+         accessibleName += pluginName;
+         accessibleName += "_";
+     }
+     accessibleName += obj->metaObject()->className();
+     accessibleName += "_";
+     accessibleName += widgetName.remove(QRegExp("[&*]"));
+-    if(!extend.isEmpty())
+-    {
++    if (!extend.isEmpty()) {
+         accessibleName += "_";
+         accessibleName += extend;
+     }
+     return accessibleName;
+ }
+ 
+-template <typename T>
+-QString combineAccessibleDescription(T* obj, const QString& widgetName)
++template<typename T>
++QString combineAccessibleDescription(T *obj, const QString &widgetName)
+ {
+-    if(!obj)
++    if (!obj)
+         return QString();
+-    if(!std::is_base_of<QObject, T>::value)
++    if (!std::is_base_of<QObject, T>::value)
+         return QString();
+     QFileInfo cmdInfo(QApplication::arguments().at(0));
+     return QString("[%1] is [%2] type in process:[%3]")
+-            .arg(widgetName)
+-            .arg(obj->metaObject()->className())
+-            .arg(cmdInfo.fileName());
++        .arg(widgetName)
++        .arg(obj->metaObject()->className())
++        .arg(cmdInfo.fileName());
+ }
+ 
+-template <typename T>
++template<typename T>
+ class AccessInfoHelper
+ {
+ public:
+-    AccessInfoHelper(T* widget)
+-        :m_widget(widget){}
++    AccessInfoHelper(T *widget)
++        : m_widget(widget)
++    {
++    }
+ 
+-    void setObjectInfo(const QString& widgetName, const QString& pluginName, const QString& extend = QString())
++    void setObjectInfo(const QString &widgetName, const QString &pluginName, const QString &extend = QString())
+     {
+-        if(m_widget->objectName().isEmpty())
+-            m_widget->setObjectName(combineAccessibleName<T>(m_widget, widgetName,pluginName, extend));
++        if (m_widget->objectName().isEmpty())
++            m_widget->setObjectName(combineAccessibleName<T>(m_widget, widgetName, pluginName, extend));
+     }
+ 
+-    void setAllAttribute(const QString& widgetName, const QString& pluginName = QString(), const QString& extend = QString(),const QString& description = QString())
++    void setAllAttribute(const QString &widgetName, const QString &pluginName = QString(), const QString &extend = QString(), const QString &description = QString())
+     {
+-        if(!m_widget)
++        if (!m_widget)
+             return;
+         setObjectInfo(widgetName, pluginName, extend);
+-        if(std::is_base_of<QWidget, T>::value)
+-        {
+-            m_widget->setAccessibleName(combineAccessibleName<T>(m_widget, widgetName,pluginName, extend));
+-            if(!description.isEmpty())
+-            {
++        if (std::is_base_of<QWidget, T>::value) {
++            m_widget->setAccessibleName(combineAccessibleName<T>(m_widget, widgetName, pluginName, extend));
++            if (!description.isEmpty()) {
+                 m_widget->setAccessibleDescription(description);
+-            }
+-            else
+-            {
++            } else {
+                 m_widget->setAccessibleDescription(combineAccessibleDescription<T>(m_widget, widgetName));
+             }
+         }
+     }
+ 
+-
+ private:
+-    T* m_widget;
++    T *m_widget;
+ };
+ 
+ template<typename T>
+-AccessInfoHelper<T> getHandle(T* widget)
++AccessInfoHelper<T> getHandle(T *widget)
+ {
+     return AccessInfoHelper<T>(widget);
+ }
+ 
+-#define KDK_ALL_INFO_FORMAT(widget, description) getHandle(widget).setAllAttribute(#widget,"", "", description)
++#define KDK_ALL_INFO_FORMAT(widget, description) getHandle(widget).setAllAttribute(#widget, "", "", description)
+ #define KDK_EXTEND_ALL_INFO_FORMAT(widget, pluginName, extend, description) getHandle(widget).setAllAttribute(#widget, pluginName, extend, description)
+ 
+ #define KDK_OBJ_INFO_FORMAT(obj) getHandle(obj).setObjectInfo(#obj, "")
+ #define KDK_EXTEND_OBJ_INFO_FORMAT(obj, pluginName, extend) getHandle(obj).setObjectInfo(#obj, pluginName, extend)
+ 
+-
+ }
+ #endif // ACCESSIBLEFORMAT_H
+diff --git a/kysdk-qtwidgets/src/gui_g.h b/kysdk-qtwidgets/src/gui_g.h
+index ad02cf6..10c4920 100644
+--- a/kysdk-qtwidgets/src/gui_g.h
++++ b/kysdk-qtwidgets/src/gui_g.h
+@@ -26,9 +26,9 @@
+ #include <QtCore/qglobal.h>
+ 
+ #if defined(GUI_LIBRARY)
+-#  define GUI_EXPORT Q_DECL_EXPORT
++#define GUI_EXPORT Q_DECL_EXPORT
+ #else
+-#  define GUI_EXPORT Q_DECL_IMPORT
++#define GUI_EXPORT Q_DECL_IMPORT
+ #endif
+ 
+ #endif // KYSDKTEST_GLOBAL_H
+diff --git a/kysdk-qtwidgets/src/kaboutdialog.cpp b/kysdk-qtwidgets/src/kaboutdialog.cpp
+index e993aea..1dc5692 100644
+--- a/kysdk-qtwidgets/src/kaboutdialog.cpp
++++ b/kysdk-qtwidgets/src/kaboutdialog.cpp
+@@ -20,25 +20,25 @@
+  *
+  */
+ 
++#include "kaboutdialog.h"
++#include <QApplication>
+ #include <QBoxLayout>
+-#include <QPixmap>
+-#include <QIcon>
+-#include <QLabel>
+-#include <QTextEdit>
+-#include <QStyleOption>
+-#include <QPainter>
+-#include <QTextDocument>
+ #include <QDesktopServices>
++#include <QDir>
+ #include <QGuiApplication>
++#include <QIcon>
++#include <QLabel>
++#include <QLibraryInfo>
++#include <QMessageBox>
+ #include <QMouseEvent>
++#include <QPainter>
++#include <QPixmap>
+ #include <QProcess>
+-#include <QDir>
+ #include <QSettings>
+-#include <QMessageBox>
+-#include <QLibraryInfo>
++#include <QStyleOption>
++#include <QTextDocument>
++#include <QTextEdit>
+ #include <QTranslator>
+-#include <QApplication>
+-#include "kaboutdialog.h"
+ 
+ namespace kdk
+ {
+@@ -46,29 +46,29 @@ namespace kdk
+ #define LOCAL_CONFIG_DIR "/.config/"
+ #define SYSTEM_CONFIG_DIR "/usr/share/applications/"
+ 
+-class LinkLabel :public QLabel
++class LinkLabel : public QLabel
+ {
+     Q_OBJECT
+ 
+ public:
+-    LinkLabel(QWidget *parent=nullptr);
++    LinkLabel(QWidget *parent = nullptr);
+ 
+ protected:
+     void mousePressEvent(QMouseEvent *event);
+-
+ };
+-class KAboutDialogPrivate:public QObject
++class KAboutDialogPrivate : public QObject
+ {
+     Q_OBJECT
+     Q_DECLARE_PUBLIC(KAboutDialog)
+ 
+ public:
+-    KAboutDialogPrivate(KAboutDialog*parent);
++    KAboutDialogPrivate(KAboutDialog *parent);
+     void adjustMiniMode();
+     QString getDefaultAppId(const char *contentType);
+     bool isOpenKylin();
+     void updateAppVersionText();
+     QString ConvertFirstLetterCase(const QString &input);
++
+ private:
+     KAboutDialog *q_ptr;
+     QLabel *m_pAppIconLabel;
+@@ -81,24 +81,24 @@ private:
+     bool m_appVersionFlag;
+ };
+ 
+-KAboutDialog::KAboutDialog(QWidget*parent,const QIcon& appIcon,const QString& appName,const QString& appVersion,const QString& appInfo)
+-    :KDialog(parent),
+-      d_ptr(new KAboutDialogPrivate(this))
++KAboutDialog::KAboutDialog(QWidget *parent, const QIcon &appIcon, const QString &appName, const QString &appVersion, const QString &appInfo)
++    : KDialog(parent)
++    , d_ptr(new KAboutDialogPrivate(this))
+ {
+     Q_D(KAboutDialog);
+-    setProperty("isAboutDialog",true);
++    setProperty("isAboutDialog", true);
+     mainLayout()->setSizeConstraint(QLayout::SizeConstraint::SetFixedSize);
+     d->m_iconName = appIcon.name();
+     d->m_pAppIconLabel = new QLabel(this);
+-    QPixmap pix(appIcon.pixmap(QSize(96,96)));
++    QPixmap pix(appIcon.pixmap(QSize(96, 96)));
+     d->m_pAppIconLabel->setPixmap(pix);
+     d->m_pAppIconLabel->setAlignment(Qt::AlignCenter);
+     d->m_pAppNameLabel = new QLabel(this);
+     d->m_pAppNameLabel->setText(d->ConvertFirstLetterCase(appName));
+     d->m_pAppNameLabel->setAlignment(Qt::AlignCenter);
+ 
+-    if(!(appVersion=="") && (!(appVersion.isNull())) )
+-        d->m_appVersionFlag =false;
++    if (!(appVersion == "") && (!(appVersion.isNull())))
++        d->m_appVersionFlag = false;
+     d->m_pAppVersionLabel = new QLabel(this);
+     d->m_pAppVersionLabel->setText(appVersion);
+     d->m_pAppVersionLabel->setAlignment(Qt::AlignCenter);
+@@ -113,53 +113,51 @@ KAboutDialog::KAboutDialog(QWidget*parent,const QIcon& appIcon,const QString& ap
+ 
+     d->adjustMiniMode();
+ 
+-    connect(d->m_pAppSupportLabel,&QLabel::linkActivated,this,[=](const QString url){
++    connect(d->m_pAppSupportLabel, &QLabel::linkActivated, this, [=](const QString url) {
+         QString appid = d->getDefaultAppId(MAILTYPE);
+-        if(appid.isEmpty())
+-        {
++        if (appid.isEmpty()) {
+             QMessageBox msg(this);
+             msg.setIcon(QMessageBox::Icon::Information);
+-            msg.setIconPixmap(QIcon::fromTheme("dialog-info").pixmap(24,24));
++            msg.setIconPixmap(QIcon::fromTheme("dialog-info").pixmap(24, 24));
+             msg.setInformativeText(tr("Your system does not have any email application installed or the default mail application is not set up"));
+             msg.setText(tr("Unable to open mail application"));
+             msg.exec();
+-        }
+-        else
++        } else
+             QDesktopServices::openUrl(QUrl(url));
+     });
+     changeTheme();
+-    connect(m_gsetting,&QGSettings::changed,this,[=](){changeTheme();});
++    connect(m_gsetting, &QGSettings::changed, this, [=]() {
++        changeTheme();
++    });
+ 
+     QString qtTransPath = QLibraryInfo::location(QLibraryInfo::TranslationsPath);
+ 
+     QTranslator *trans_qt = new QTranslator(this);
+     if (trans_qt->load(QLocale(), "qt", "_", qtTransPath))
+-       qApp->installTranslator(trans_qt);
++        qApp->installTranslator(trans_qt);
+ 
+     QTranslator *trans = new QTranslator(this);
+-    if(trans->load(QString(":/translations/gui_%1.qm").arg(QLocale::system().name())))
++    if (trans->load(QString(":/translations/gui_%1.qm").arg(QLocale::system().name())))
+         qApp->installTranslator(trans);
+-    if(d->isOpenKylin())
++    if (d->isOpenKylin())
+         d->m_pAppSupportLabel->hide();
+ }
+ 
+ KAboutDialog::~KAboutDialog()
+ {
+-
+ }
+ 
+-void KAboutDialog::setAppIcon(const QIcon& icon)
++void KAboutDialog::setAppIcon(const QIcon &icon)
+ {
+     Q_D(KAboutDialog);
+     d->m_iconName = icon.name();
+-    QPixmap pix(icon.pixmap(QSize(96,96)));
++    QPixmap pix(icon.pixmap(QSize(96, 96)));
+     d->m_pAppIconLabel->setPixmap(pix);
+     d->m_pAppIconLabel->setAlignment(Qt::AlignCenter);
+     update();
+ }
+ 
+-
+-void KAboutDialog::setAppName(const QString& appName)
++void KAboutDialog::setAppName(const QString &appName)
+ {
+     Q_D(KAboutDialog);
+     d->m_pAppNameLabel->setText(d->ConvertFirstLetterCase(appName));
+@@ -172,11 +170,10 @@ QString KAboutDialog::appName()
+     return d->m_pAppNameLabel->text();
+ }
+ 
+-void KAboutDialog::setAppVersion(const QString& appVersion)
++void KAboutDialog::setAppVersion(const QString &appVersion)
+ {
+     Q_D(KAboutDialog);
+-    if(!appVersion.isNull())
+-    {
++    if (!appVersion.isNull()) {
+         d->m_appVersionFlag = false;
+         d->m_pAppVersionLabel->setText(appVersion);
+         update();
+@@ -189,7 +186,7 @@ QString KAboutDialog::appVersion()
+     return d->m_pAppVersionLabel->text();
+ }
+ 
+-void KAboutDialog::setBodyText(const QString& bodyText)
++void KAboutDialog::setBodyText(const QString &bodyText)
+ {
+     Q_D(KAboutDialog);
+     d->m_bodyText = bodyText;
+@@ -201,7 +198,7 @@ QString KAboutDialog::bodyText()
+     return d->m_bodyText;
+ }
+ 
+-void KAboutDialog::setAppSupport(const QString& appSupport)
++void KAboutDialog::setAppSupport(const QString &appSupport)
+ {
+     Q_D(KAboutDialog);
+     d->m_pAppSupportLabel->setText(appSupport);
+@@ -217,7 +214,7 @@ QString KAboutDialog::appSupport()
+ void KAboutDialog::setBodyTextVisiable(bool flag)
+ {
+     Q_D(KAboutDialog);
+-    //do nothing
++    // do nothing
+ }
+ 
+ void KAboutDialog::setAppPrivacyLabelVisible(bool flag)
+@@ -238,9 +235,8 @@ void KAboutDialog::changeTheme()
+     KDialog::changeTheme();
+ 
+     auto icon = QIcon::fromTheme(d->m_iconName);
+-    if(!icon.isNull())
+-    {
+-        QPixmap pix(icon.pixmap(QSize(96,96)));
++    if (!icon.isNull()) {
++        QPixmap pix(icon.pixmap(QSize(96, 96)));
+         d->m_pAppIconLabel->setPixmap(pix);
+     }
+     QPalette palette = qApp->palette();
+@@ -248,53 +244,47 @@ void KAboutDialog::changeTheme()
+     font.setPixelSize(ThemeController::systemFontSize() * 1.7);
+     font.setWeight(QFont::Medium);
+     QColor fontColor = ThemeController::getCustomColorFromDT("kfont-primary");
+-    if(fontColor.isValid())
+-    {
+-        palette.setColor(QPalette::Text,fontColor);
+-        palette.setColor(QPalette::WindowText,fontColor);
++    if (fontColor.isValid()) {
++        palette.setColor(QPalette::Text, fontColor);
++        palette.setColor(QPalette::WindowText, fontColor);
+         d->m_pAppNameLabel->setPalette(palette);
+     }
+     d->m_pAppNameLabel->setFont(font);
+ 
+-    if(ThemeController::themeMode() == LightTheme)
+-    {
++    if (ThemeController::themeMode() == LightTheme) {
+         QColor textColor = ThemeController::getCustomColorFromDT("kfont-secondary");
+-        if(!textColor.isValid())
++        if (!textColor.isValid())
+             textColor = QColor("#595959");
+-        palette.setColor(QPalette::Text,textColor);
+-        palette.setColor(QPalette::WindowText,textColor);
+-        palette.setColor(QPalette::Base,QColor(0,0,0,0));
++        palette.setColor(QPalette::Text, textColor);
++        palette.setColor(QPalette::WindowText, textColor);
++        palette.setColor(QPalette::Base, QColor(0, 0, 0, 0));
+         d->m_pAppSupportLabel->setPalette(palette);
+         d->m_pAppVersionLabel->setPalette(palette);
+-        d->m_pAppSupportLabel->setText(tr("Service & Support: ") +
+-                                              "<a href=\"mailto://support@kylinos.cn\""
+-                                              "style=\"color:#595959\">"
+-                                              "support@kylinos.cn</a>");
++        d->m_pAppSupportLabel->setText(tr("Service & Support: ") + "<a href=\"mailto://support@kylinos.cn\""
++                                                                   "style=\"color:#595959\">"
++                                                                   "support@kylinos.cn</a>");
+         QColor privacyColor = ThemeController::getPaletteColorFromDT("highlight");
+-        if(!privacyColor.isValid())
++        if (!privacyColor.isValid())
+             privacyColor = QColor("#307FF5");
+-        palette.setColor(QPalette::WindowText,privacyColor);
++        palette.setColor(QPalette::WindowText, privacyColor);
+         d->m_pAppPrivacyLabel->setPalette(palette);
+         d->m_pAppPrivacyLabel->setText(tr("Privacy statement"));
+-    }
+-    else
+-    {
++    } else {
+         QColor textColor = ThemeController::getCustomColorFromDT("kfont-secondary");
+-        if(!textColor.isValid())
++        if (!textColor.isValid())
+             textColor = QColor("#D9D9D9");
+-        palette.setColor(QPalette::ButtonText,textColor);
+-        palette.setColor(QPalette::WindowText,textColor);
++        palette.setColor(QPalette::ButtonText, textColor);
++        palette.setColor(QPalette::WindowText, textColor);
+         d->m_pAppSupportLabel->setPalette(palette);
+         d->m_pAppVersionLabel->setPalette(palette);
+-        d->m_pAppSupportLabel->setText(tr("Service & Support: ") +
+-                                             "<a href=\"mailto://support@kylinos.cn\""
+-                                             "style=\"color:#D9D9D9\">"
+-                                             "support@kylinos.cn</a>");
++        d->m_pAppSupportLabel->setText(tr("Service & Support: ") + "<a href=\"mailto://support@kylinos.cn\""
++                                                                   "style=\"color:#D9D9D9\">"
++                                                                   "support@kylinos.cn</a>");
+ 
+         QColor privacyColor = ThemeController::getPaletteColorFromDT("highlight)");
+-        if(!privacyColor.isValid())
++        if (!privacyColor.isValid())
+             privacyColor = QColor("#307FF5");
+-        palette.setColor(QPalette::WindowText,QColor("#307FF5"));
++        palette.setColor(QPalette::WindowText, QColor("#307FF5"));
+         d->m_pAppPrivacyLabel->setPalette(palette);
+         d->m_pAppPrivacyLabel->setText(tr("Privacy statement"));
+     }
+@@ -304,7 +294,7 @@ void KAboutDialog::paintEvent(QPaintEvent *paintEvent)
+ {
+     Q_D(KAboutDialog);
+ 
+-    if(d->m_appVersionFlag)
++    if (d->m_appVersionFlag)
+         d->updateAppVersionText();
+     QStyleOption opt;
+     opt.init(this);
+@@ -313,7 +303,8 @@ void KAboutDialog::paintEvent(QPaintEvent *paintEvent)
+ }
+ 
+ KAboutDialogPrivate::KAboutDialogPrivate(KAboutDialog *parent)
+-    :q_ptr(parent),m_appVersionFlag(true)
++    : q_ptr(parent)
++    , m_appVersionFlag(true)
+ {
+     setParent(parent);
+ }
+@@ -321,7 +312,7 @@ KAboutDialogPrivate::KAboutDialogPrivate(KAboutDialog *parent)
+ void KAboutDialogPrivate::adjustMiniMode()
+ {
+     Q_Q(KAboutDialog);
+-    if(q->mainWidget()->layout())
++    if (q->mainWidget()->layout())
+         delete q->mainWidget()->layout();
+     m_pAppSupportLabel->setAlignment(Qt::AlignCenter);
+     QVBoxLayout *vBoxLayout = new QVBoxLayout();
+@@ -336,7 +327,7 @@ void KAboutDialogPrivate::adjustMiniMode()
+     vBoxLayout->addWidget(m_pAppSupportLabel);
+     vBoxLayout->addSpacing(16);
+     vBoxLayout->addWidget(m_pAppPrivacyLabel);
+-    vBoxLayout->setContentsMargins(25,0,25,0);
++    vBoxLayout->setContentsMargins(25, 0, 25, 0);
+     vBoxLayout->addSpacing(35);
+     q->mainWidget()->setLayout(vBoxLayout);
+ }
+@@ -346,11 +337,11 @@ QString KAboutDialogPrivate::getDefaultAppId(const char *contentType)
+     QString localfile = QDir::homePath() + LOCAL_CONFIG_DIR + "mimeapps.list";
+     QString systemfile = SYSTEM_CONFIG_DIR + QString("ukui-mimeapps.list");
+     if (QFile(localfile).exists()) {
+-        QSettings* mimeappFile = new QSettings(localfile, QSettings::IniFormat);
++        QSettings *mimeappFile = new QSettings(localfile, QSettings::IniFormat);
+         mimeappFile->setIniCodec("utf-8");
+         QString str = mimeappFile->value(QString("Default Applications/%1").arg(contentType)).toString();
+         if (!str.isEmpty()) {
+-            if (QFile(SYSTEM_CONFIG_DIR +str).exists()) {
++            if (QFile(SYSTEM_CONFIG_DIR + str).exists()) {
+                 return str;
+             } else {
+                 return QString("");
+@@ -360,11 +351,11 @@ QString KAboutDialogPrivate::getDefaultAppId(const char *contentType)
+         mimeappFile = nullptr;
+     }
+     if (QFile(systemfile).exists()) {
+-        QSettings* mimeappFile = new QSettings(systemfile, QSettings::IniFormat);
++        QSettings *mimeappFile = new QSettings(systemfile, QSettings::IniFormat);
+         mimeappFile->setIniCodec("utf-8");
+         QString str = mimeappFile->value(QString("Default Applications/%1").arg(contentType)).toString();
+         if (!str.isEmpty()) {
+-            if (QFile(SYSTEM_CONFIG_DIR +str).exists()) {
++            if (QFile(SYSTEM_CONFIG_DIR + str).exists()) {
+                 return str;
+             } else {
+                 return QString("");
+@@ -393,24 +384,20 @@ void KAboutDialogPrivate::updateAppVersionText()
+ {
+     Q_Q(KAboutDialog);
+     QProcess process;
+-    if( QCoreApplication::applicationFilePath().contains(QApplication::applicationName()))
+-    {
++    if (QCoreApplication::applicationFilePath().contains(QApplication::applicationName())) {
+         QStringList list;
+-        QString str("dpkg -l | grep "+QApplication::applicationName() +" | awk '{print $3}'");
+-        list<<"-c"<<str;
+-        process.start("/bin/bash",list);
++        QString str("dpkg -l | grep " + QApplication::applicationName() + " | awk '{print $3}'");
++        list << "-c" << str;
++        process.start("/bin/bash", list);
+         process.waitForFinished();
+         QString result(tr("version :"));
+         QString string;
+-        string=process.readAllStandardOutput().data();
+-        if(string =="" || string.isNull())
+-        {
+-            result +=QString(tr("Version number not found"));
+-        }
+-        else
+-        {
++        string = process.readAllStandardOutput().data();
++        if (string == "" || string.isNull()) {
++            result += QString(tr("Version number not found"));
++        } else {
+             result += string;
+-            result.remove("\n"); //去掉 \n 字符
++            result.remove("\n"); // 去掉 \n 字符
+         }
+         m_pAppVersionLabel->setText(result);
+     }
+@@ -420,20 +407,15 @@ void KAboutDialogPrivate::updateAppVersionText()
+ QString KAboutDialogPrivate::ConvertFirstLetterCase(const QString &input)
+ {
+     QStringList words;
+-    if(input.contains('-'))
+-    {
++    if (input.contains('-')) {
+         words = input.split('-', QString::SkipEmptyParts);
+-        for (int i = 0; i < words.size(); ++i)
+-        {
++        for (int i = 0; i < words.size(); ++i) {
+             QString &word = words[i];
+             word[0] = word[0].toUpper(); // 将每个单词的首字母转换为大写
+         }
+-    }
+-    else
+-    {
++    } else {
+         words = input.split(' ', QString::SkipEmptyParts);
+-        for (int i = 0; i < words.size(); ++i)
+-        {
++        for (int i = 0; i < words.size(); ++i) {
+             QString &word = words[i];
+             word[0] = word[0].toUpper(); // 将每个单词的首字母转换为大写
+         }
+@@ -442,19 +424,18 @@ QString KAboutDialogPrivate::ConvertFirstLetterCase(const QString &input)
+ }
+ 
+ LinkLabel::LinkLabel(QWidget *parent)
+-    :QLabel(parent)
++    : QLabel(parent)
+ {
+-
+ }
+ 
+ void LinkLabel::mousePressEvent(QMouseEvent *event)
+ {
+-    if(event->button() == Qt::LeftButton)
+-    {
++    if (event->button() == Qt::LeftButton) {
+         QProcess *process = new QProcess(this);
+         QStringList l;
+-        l <<"-A"<<"kylin-os";
+-        process->start("kylin-user-guide",l);
++        l << "-A"
++          << "kylin-os";
++        process->start("kylin-user-guide", l);
+     }
+     QLabel::mousePressEvent(event);
+ }
+diff --git a/kysdk-qtwidgets/src/kaboutdialog.h b/kysdk-qtwidgets/src/kaboutdialog.h
+index f55bd89..9ed9f97 100644
+--- a/kysdk-qtwidgets/src/kaboutdialog.h
++++ b/kysdk-qtwidgets/src/kaboutdialog.h
+@@ -23,42 +23,42 @@
+ #ifndef KABOUTDIALOG_H
+ #define KABOUTDIALOG_H
+ 
+-#include <QDialog>
+-#include <QString>
+-#include <QIcon>
+ #include "gui_g.h"
+-#include "themeController.h"
+ #include "kdialog.h"
++#include "themeController.h"
++#include <QDialog>
++#include <QIcon>
++#include <QString>
+ 
+ namespace kdk
+ {
+ /** @defgroup DialogBoxModule
+-  * @{
+-  */
++ * @{
++ */
+ class KAboutDialogPrivate;
+ 
+ /**
+  * @brief 关于对话框,支持两种样式,一种是无特定说明的,另一种是有特定说明的。
+  */
+-class GUI_EXPORT KAboutDialog:public KDialog
++class GUI_EXPORT KAboutDialog : public KDialog
+ {
+     Q_OBJECT
+ 
+ public:
+-    KAboutDialog(QWidget*parent = nullptr,const QIcon& appIcon = QIcon(),const QString& appName = "",const QString& appVersion = "",const QString& appInfo = "");
++    KAboutDialog(QWidget *parent = nullptr, const QIcon &appIcon = QIcon(), const QString &appName = "", const QString &appVersion = "", const QString &appInfo = "");
+     ~KAboutDialog();
+ 
+     /**
+      * @brief 设置应用程序图标
+      * @param icon
+      */
+-    void setAppIcon(const QIcon& icon);
++    void setAppIcon(const QIcon &icon);
+ 
+     /**
+      * @brief 设置应用程序名称
+      * @param appName
+      */
+-    void setAppName(const QString& appName);
++    void setAppName(const QString &appName);
+ 
+     /**
+      * @brief 获取应用程序名称
+@@ -70,7 +70,7 @@ public:
+      * @brief 设置应用程序版本号
+      * @param appVersion
+      */
+-    void setAppVersion(const QString& appVersion);
++    void setAppVersion(const QString &appVersion);
+ 
+     /**
+      * @brief 获取应用程序版本号
+@@ -82,7 +82,7 @@ public:
+      * @brief 设置具体的说明内容
+      * @param bodyText
+      */
+-    void setBodyText(const QString& bodyText);
++    void setBodyText(const QString &bodyText);
+ 
+     /**
+      * @brief 获取具体的说明内容
+@@ -94,7 +94,7 @@ public:
+      * @brief 设置服务与支持邮箱,有默认缺省
+      * @param appSupport
+      */
+-    void setAppSupport(const QString& appSupport);
++    void setAppSupport(const QString &appSupport);
+ 
+     /**
+      * @brief 获取服务与支持邮箱
+@@ -124,16 +124,16 @@ public:
+ 
+ protected:
+     void changeTheme() override;
+-    void paintEvent(QPaintEvent*paintEvent) override;
++    void paintEvent(QPaintEvent *paintEvent) override;
+ 
+ private:
+     Q_DECLARE_PRIVATE(KAboutDialog)
+-    KAboutDialogPrivate* const d_ptr;
++    KAboutDialogPrivate *const d_ptr;
+ };
+ }
+ /**
+-  * @example testDialog/widget.h
+-  * @example testDialog/widget.cpp
+-  * @}
+-  */
++ * @example testDialog/widget.h
++ * @example testDialog/widget.cpp
++ * @}
++ */
+ #endif
+diff --git a/kysdk-qtwidgets/src/kaddfilebutton.cpp b/kysdk-qtwidgets/src/kaddfilebutton.cpp
+index 25b2478..33a1723 100644
+--- a/kysdk-qtwidgets/src/kaddfilebutton.cpp
++++ b/kysdk-qtwidgets/src/kaddfilebutton.cpp
+@@ -22,15 +22,16 @@
+ 
+ #include "kaddfilebutton.h"
+ #include "themeController.h"
+-#include <QPainter>
+-#include <QStyleOptionButton>
+ #include <QDebug>
++#include <QEvent>
+ #include <QFileDialog>
+-#include <QStandardPaths>
++#include <QPainter>
+ #include <QPainterPath>
+-#include <QEvent>
++#include <QStandardPaths>
++#include <QStyleOptionButton>
+ 
+-namespace kdk {
++namespace kdk
++{
+ 
+ #define BLANK_SPACE 20
+ 
+@@ -38,24 +39,24 @@ class AddFileDialog : public QFileDialog
+ {
+     Q_OBJECT
+ public:
+-    AddFileDialog(QWidget* parent = nullptr);
++    AddFileDialog(QWidget *parent = nullptr);
+     virtual ~AddFileDialog();
+ 
+ public slots:
+     void goAccept();
+ 
+ protected:
+-    void showEvent(QShowEvent* event) override;
++    void showEvent(QShowEvent *event) override;
+ };
+ 
+-class KAddFileButtonPrivate:public QObject,public ThemeController
++class KAddFileButtonPrivate : public QObject, public ThemeController
+ {
+     Q_DECLARE_PUBLIC(KAddFileButton)
+     Q_OBJECT
+ public:
+-    KAddFileButtonPrivate(KAddFileButton*parent);
++    KAddFileButtonPrivate(KAddFileButton *parent);
+ 
+-    void updateColor(QStyleOptionButton option,QPalette palette);
++    void updateColor(QStyleOptionButton option, QPalette palette);
+     void openFile();
+ 
+ protected:
+@@ -70,13 +71,13 @@ private:
+     AddFileDialog *m_FileDialog;
+ };
+ 
+-KAddFileButton::KAddFileButton(QWidget *parent):
+-    QPushButton(parent),
+-    d_ptr(new KAddFileButtonPrivate(this))
++KAddFileButton::KAddFileButton(QWidget *parent)
++    : QPushButton(parent)
++    , d_ptr(new KAddFileButtonPrivate(this))
+ {
+     Q_D(KAddFileButton);
+-    setFixedSize(104,110);
+-    connect(this,&KAddFileButton::clicked,this,[=]{
++    setFixedSize(104, 110);
++    connect(this, &KAddFileButton::clicked, this, [=] {
+         d->openFile();
+     });
+ }
+@@ -86,17 +87,17 @@ void KAddFileButton::paintEvent(QPaintEvent *event)
+     Q_D(KAddFileButton);
+     QStyleOptionButton option;
+     initStyleOption(&option);
+-    d->updateColor(option,palette());
++    d->updateColor(option, palette());
+ 
+-    d->m_rect = QRect(QPoint(20,8),QSize(64,64));
++    d->m_rect = QRect(QPoint(20, 8), QSize(64, 64));
+ 
+     QPainter painter(this);
+     painter.save();
+     painter.setBrush(ThemeController::getPaletteColorFromDT("base"));
+     painter.setPen(Qt::NoPen);
+-    painter.drawRoundedRect(rect(),0,0);
++    painter.drawRoundedRect(rect(), 0, 0);
+     painter.restore();
+-    QPen pen=painter.pen();
++    QPen pen = painter.pen();
+     pen.setStyle(Qt::DashLine);
+     pen.setColor(ThemeController::getPaletteColorFromDT("highlight"));
+     painter.save();
+@@ -104,27 +105,26 @@ void KAddFileButton::paintEvent(QPaintEvent *event)
+     painter.setPen(pen);
+     painter.setBrush(d->m_bkgColor);
+     int radius = ThemeController::getRadiusFromDT("kradius-normal");
+-    if(radius == -1)
++    if (radius == -1)
+         radius = 6;
+-    painter.drawRoundedRect(d->m_rect,radius,radius);
++    painter.drawRoundedRect(d->m_rect, radius, radius);
+     painter.setPen(ThemeController::getPaletteColorFromDT("highlight"));
+-    painter.drawLine(QPoint(d->m_rect.center().x()-10,d->m_rect.center().y()+1),QPoint(d->m_rect.center().x()+10,d->m_rect.center().y()+1));
+-    painter.drawLine(QPoint(d->m_rect.center().x()+1,d->m_rect.center().y()-10),QPoint(d->m_rect.center().x()+1,d->m_rect.center().y()+10));
++    painter.drawLine(QPoint(d->m_rect.center().x() - 10, d->m_rect.center().y() + 1), QPoint(d->m_rect.center().x() + 10, d->m_rect.center().y() + 1));
++    painter.drawLine(QPoint(d->m_rect.center().x() + 1, d->m_rect.center().y() - 10), QPoint(d->m_rect.center().x() + 1, d->m_rect.center().y() + 10));
+     painter.restore();
+ 
+     painter.save();
+     QFontMetrics fm = painter.fontMetrics();
+     int width = fm.width(d->m_text);
+     painter.setPen(ThemeController::getPaletteColorFromDT("highlight"));
+-    d->m_textRect = QRect(QPoint(rect().center().x()-width/2,d->m_rect.bottom()+8),QSize(width,fm.height()));
+-    painter.drawText(d->m_textRect,d->m_text);
++    d->m_textRect = QRect(QPoint(rect().center().x() - width / 2, d->m_rect.bottom() + 8), QSize(width, fm.height()));
++    painter.drawText(d->m_textRect, d->m_text);
+     painter.restore();
+-
+ }
+ 
+ bool KAddFileButton::eventFilter(QObject *watched, QEvent *event)
+ {
+-    return QPushButton::eventFilter(watched,event);
++    return QPushButton::eventFilter(watched, event);
+ }
+ 
+ void KAddFileButton::mouseMoveEvent(QMouseEvent *event)
+@@ -151,7 +151,7 @@ void KAddFileButton::setText(QString str)
+ QFileDialog *KAddFileButton::fileDialog()
+ {
+     Q_D(KAddFileButton);
+-    return dynamic_cast<QFileDialog*>(d->m_FileDialog);
++    return dynamic_cast<QFileDialog *>(d->m_FileDialog);
+ }
+ 
+ void KAddFileButton::setNameFilter(const QString &filter)
+@@ -159,13 +159,11 @@ void KAddFileButton::setNameFilter(const QString &filter)
+     Q_D(KAddFileButton);
+     QString f(filter);
+     if (f.isEmpty())
+-        return ;
++        return;
+     QString sep(QLatin1String(";;"));
+     int i = f.indexOf(sep, 0);
+-    if (i == -1)
+-    {
+-        if (f.indexOf(QLatin1Char('\n'), 0) != -1)
+-        {
++    if (i == -1) {
++        if (f.indexOf(QLatin1Char('\n'), 0) != -1) {
+             sep = QLatin1Char('\n');
+             i = f.indexOf(sep, 0);
+         }
+@@ -180,8 +178,8 @@ void KAddFileButton::setNameFilters(const QStringList &filters)
+ }
+ 
+ KAddFileButtonPrivate::KAddFileButtonPrivate(KAddFileButton *parent)
+-    :q_ptr(parent)
+-    ,m_text("添加文件")
++    : q_ptr(parent)
++    , m_text("添加文件")
+ {
+     Q_Q(KAddFileButton);
+     m_FileDialog = new AddFileDialog(q);
+@@ -189,15 +187,14 @@ KAddFileButtonPrivate::KAddFileButtonPrivate(KAddFileButton *parent)
+     m_FileDialog->setFileMode(QFileDialog::ExistingFiles);
+ }
+ 
+-void KAddFileButtonPrivate::updateColor(QStyleOptionButton option,QPalette palette)
++void KAddFileButtonPrivate::updateColor(QStyleOptionButton option, QPalette palette)
+ {
+     Q_Q(KAddFileButton);
+     m_bkgColor = ThemeController::getPaletteColorFromDT("base");
+     QColor hightColor = ThemeController::getPaletteColorFromDT("highlight");
+-    if(option.state.testFlag(QStyle::State_MouseOver))
+-    {
++    if (option.state.testFlag(QStyle::State_MouseOver)) {
+         m_bkgColor = hightColor;
+-        if(option.state.testFlag(QStyle::State_Sunken))
++        if (option.state.testFlag(QStyle::State_Sunken))
+             m_bkgColor.setAlphaF(0.4);
+         else
+             m_bkgColor.setAlphaF(0.3);
+@@ -225,7 +222,6 @@ AddFileDialog::AddFileDialog(QWidget *parent)
+ 
+ AddFileDialog::~AddFileDialog()
+ {
+-
+ }
+ 
+ void AddFileDialog::goAccept()
+@@ -236,11 +232,11 @@ void AddFileDialog::goAccept()
+ void AddFileDialog::showEvent(QShowEvent *event)
+ {
+     if (this->isVisible()) {
+-        for (QWidget* widget : this->findChildren<QWidget*>()) {
++        for (QWidget *widget : this->findChildren<QWidget *>()) {
+             if (widget->objectName() == "acceptButton") {
+-                QPushButton * btn = qobject_cast<QPushButton*>(widget);
++                QPushButton *btn = qobject_cast<QPushButton *>(widget);
+                 disconnect(btn, &QPushButton::clicked, 0, 0);
+-                connect(btn, &QPushButton::clicked, [=](bool checked){
++                connect(btn, &QPushButton::clicked, [=](bool checked) {
+                     Q_UNUSED(checked)
+                     this->goAccept();
+                 });
+diff --git a/kysdk-qtwidgets/src/kaddfilebutton.h b/kysdk-qtwidgets/src/kaddfilebutton.h
+index 55ecd45..fb68890 100644
+--- a/kysdk-qtwidgets/src/kaddfilebutton.h
++++ b/kysdk-qtwidgets/src/kaddfilebutton.h
+@@ -23,14 +23,15 @@
+ #ifndef KADDFILEBUTTON_H
+ #define KADDFILEBUTTON_H
+ 
+-#include <QPushButton>
+-#include <QFileDialog>
+ #include "gui_g.h"
++#include <QFileDialog>
++#include <QPushButton>
+ 
+-namespace kdk {
++namespace kdk
++{
+ 
+ /** @defgroup PushbuttonModule
+-  */
++ */
+ 
+ class KAddFileButtonPrivate;
+ 
+@@ -38,11 +39,11 @@ class KAddFileButtonPrivate;
+  * @brief 选择文件的按钮
+  * @since 2.4
+  */
+-class GUI_EXPORT KAddFileButton :public QPushButton
++class GUI_EXPORT KAddFileButton : public QPushButton
+ {
+     Q_OBJECT
+ public:
+-    KAddFileButton(QWidget* parent=nullptr);
++    KAddFileButton(QWidget *parent = nullptr);
+ 
+     /**
+      * @brief 设置文本
+@@ -76,7 +77,7 @@ protected:
+     void mouseReleaseEvent(QMouseEvent *event);
+ 
+ private:
+-    KAddFileButtonPrivate* const d_ptr;
++    KAddFileButtonPrivate *const d_ptr;
+     Q_DECLARE_PRIVATE(KAddFileButton)
+ };
+ 
+diff --git a/kysdk-qtwidgets/src/karrowtabbar.cpp b/kysdk-qtwidgets/src/karrowtabbar.cpp
+index 4a4020b..d3580bf 100644
+--- a/kysdk-qtwidgets/src/karrowtabbar.cpp
++++ b/kysdk-qtwidgets/src/karrowtabbar.cpp
+@@ -21,14 +21,15 @@
+  */
+ 
+ #include "karrowtabbar.h"
+-#include "themeController.h"
+ #include "kborderlessbutton.h"
+ #include "knativetabbar.h"
++#include "themeController.h"
+ #include <QBoxLayout>
+-#include <QProxyStyle>
+ #include <QDebug>
++#include <QProxyStyle>
+ 
+-namespace kdk {
++namespace kdk
++{
+ class Q_DECL_HIDDEN ArrowTabBarStyle : public QProxyStyle
+ {
+     Q_OBJECT
+@@ -39,7 +40,7 @@ public:
+     QRect subElementRect(QStyle::SubElement element, const QStyleOption *option, const QWidget *widget) const override;
+ };
+ 
+-class Q_DECL_HIDDEN KArrowTabBarPrivate:public QObject,public ThemeController
++class Q_DECL_HIDDEN KArrowTabBarPrivate : public QObject, public ThemeController
+ {
+     Q_OBJECT
+     Q_DECLARE_PUBLIC(KArrowTabBar)
+@@ -52,7 +53,7 @@ public:
+     void updateBtnVisible();
+ 
+ private:
+-    KArrowTabBar* q_ptr;
++    KArrowTabBar *q_ptr;
+     KBorderlessButton *m_pLeftButton;
+     KBorderlessButton *m_pRightButton;
+     KNativeTabbar *m_pTabBar;
+@@ -60,11 +61,11 @@ private:
+ };
+ 
+ KArrowTabBar::KArrowTabBar(QWidget *parent)
+-    :QWidget(parent)
+-    ,d_ptr(new KArrowTabBarPrivate(this))
++    : QWidget(parent)
++    , d_ptr(new KArrowTabBarPrivate(this))
+ {
+     Q_D(KArrowTabBar);
+-    connect(this,&KArrowTabBar::sizeChange,this,[=]{
++    connect(this, &KArrowTabBar::sizeChange, this, [=] {
+         d->updateBtnVisible();
+     });
+ }
+@@ -83,7 +84,7 @@ void KArrowTabBar::resizeEvent(QResizeEvent *event)
+ }
+ 
+ KArrowTabBarPrivate::KArrowTabBarPrivate(KArrowTabBar *parent)
+-    :q_ptr(parent)
++    : q_ptr(parent)
+ {
+     Q_Q(KArrowTabBar);
+     m_pHLayout = new QHBoxLayout(q);
+@@ -99,21 +100,20 @@ KArrowTabBarPrivate::KArrowTabBarPrivate(KArrowTabBar *parent)
+     m_pHLayout->addWidget(m_pTabBar);
+     m_pHLayout->addWidget(m_pRightButton);
+ 
+-    connect(m_pTabBar,&KNativeTabbar::currentChanged, this, [=](int index){
++    connect(m_pTabBar, &KNativeTabbar::currentChanged, this, [=](int index) {
+         currentChangeUpdateBtnStatus(index);
+     });
+ 
+-    connect(m_pLeftButton,&KBorderlessButton::clicked,this,[=]{
++    connect(m_pLeftButton, &KBorderlessButton::clicked, this, [=] {
+         m_pTabBar->leftScrollTabs();
+-
+     });
+-    connect(m_pRightButton,&KBorderlessButton::clicked,this,[=]{
++    connect(m_pRightButton, &KBorderlessButton::clicked, this, [=] {
+         m_pTabBar->rightScrollTabs();
+     });
+-    connect(m_pTabBar,&KNativeTabbar::leftBStatus,q,[=](bool flag){
++    connect(m_pTabBar, &KNativeTabbar::leftBStatus, q, [=](bool flag) {
+         m_pLeftButton->setEnabled(flag);
+     });
+-    connect(m_pTabBar,&KNativeTabbar::rightBStatus,q,[=](bool flag){
++    connect(m_pTabBar, &KNativeTabbar::rightBStatus, q, [=](bool flag) {
+         m_pRightButton->setEnabled(flag);
+     });
+ }
+@@ -121,23 +121,18 @@ KArrowTabBarPrivate::KArrowTabBarPrivate(KArrowTabBar *parent)
+ void KArrowTabBarPrivate::currentChangeUpdateBtnStatus(int index)
+ {
+     Q_Q(KArrowTabBar);
+-    if(index == 0)
+-    {
++    if (index == 0) {
+         m_pLeftButton->setEnabled(false);
+-        if(!m_pRightButton->isEnabled())
++        if (!m_pRightButton->isEnabled())
+             m_pRightButton->setEnabled(true);
+-    }
+-    else if(index == m_pTabBar->count() - 1)
+-    {
++    } else if (index == m_pTabBar->count() - 1) {
+         m_pRightButton->setEnabled(false);
+-        if(!m_pLeftButton->isEnabled())
++        if (!m_pLeftButton->isEnabled())
+             m_pLeftButton->setEnabled(true);
+-    }
+-    else
+-    {
+-        if(!m_pLeftButton->isEnabled())
++    } else {
++        if (!m_pLeftButton->isEnabled())
+             m_pLeftButton->setEnabled(true);
+-        if(!m_pRightButton->isEnabled())
++        if (!m_pRightButton->isEnabled())
+             m_pRightButton->setEnabled(true);
+     }
+ }
+@@ -145,24 +140,18 @@ void KArrowTabBarPrivate::currentChangeUpdateBtnStatus(int index)
+ void KArrowTabBarPrivate::updateBtnVisible()
+ {
+     Q_Q(KArrowTabBar);
+-    int wid =0 ;
+-    for(int i = 0;i < q->tabbar()->count();i++)
+-        wid +=q->tabbar()->tabRect(i).width();
+-    if(q->rect().width() < wid)
+-    {
+-        if(m_pTabBar->usesScrollButtons())
+-        {
++    int wid = 0;
++    for (int i = 0; i < q->tabbar()->count(); i++)
++        wid += q->tabbar()->tabRect(i).width();
++    if (q->rect().width() < wid) {
++        if (m_pTabBar->usesScrollButtons()) {
+             m_pLeftButton->setVisible(true);
+             m_pRightButton->setVisible(true);
+-        }
+-        else
+-        {
++        } else {
+             m_pLeftButton->setVisible(false);
+             m_pRightButton->setVisible(false);
+         }
+-    }
+-    else
+-    {
++    } else {
+         m_pLeftButton->setVisible(false);
+         m_pRightButton->setVisible(false);
+     }
+@@ -170,7 +159,6 @@ void KArrowTabBarPrivate::updateBtnVisible()
+ 
+ ArrowTabBarStyle::ArrowTabBarStyle(QStyle *style)
+ {
+-
+ }
+ 
+ QRect ArrowTabBarStyle::subElementRect(QStyle::SubElement element, const QStyleOption *option, const QWidget *widget) const
+diff --git a/kysdk-qtwidgets/src/karrowtabbar.h b/kysdk-qtwidgets/src/karrowtabbar.h
+index 032678c..d0b4a37 100644
+--- a/kysdk-qtwidgets/src/karrowtabbar.h
++++ b/kysdk-qtwidgets/src/karrowtabbar.h
+@@ -23,14 +23,15 @@
+ #ifndef KARROWTABBAR_H
+ #define KARROWTABBAR_H
+ 
+-#include <QWidget>
+ #include "knativetabbar.h"
++#include <QWidget>
+ 
+-namespace kdk {
++namespace kdk
++{
+ 
+ /** @defgroup BarModule
+-  * @{
+-  */
++ * @{
++ */
+ 
+ class KArrowTabBarPrivate;
+ 
+@@ -50,7 +51,6 @@ public:
+      */
+     KNativeTabbar *tabbar();
+ 
+-
+ Q_SIGNALS:
+     /**
+      * @brief 点击会发出信号
+@@ -62,11 +62,9 @@ protected:
+ 
+ private:
+     Q_DECLARE_PRIVATE(KArrowTabBar)
+-    KArrowTabBarPrivate*const d_ptr;
++    KArrowTabBarPrivate *const d_ptr;
+ };
+ 
+ }
+ 
+-
+-
+ #endif // KArrowTabBar_H
+diff --git a/kysdk-qtwidgets/src/kbackgroundgroup.cpp b/kysdk-qtwidgets/src/kbackgroundgroup.cpp
+index 080ae5e..18df20a 100644
+--- a/kysdk-qtwidgets/src/kbackgroundgroup.cpp
++++ b/kysdk-qtwidgets/src/kbackgroundgroup.cpp
+@@ -21,33 +21,34 @@
+  */
+ 
+ #include "kbackgroundgroup.h"
+-#include "themeController.h"
+-#include <QVBoxLayout>
+ #include "klineframe.h"
++#include "themeController.h"
++#include <QEvent>
+ #include <QPainter>
+ #include <QPainterPath>
+-#include <QEvent>
++#include <QVBoxLayout>
+ 
+-namespace kdk {
++namespace kdk
++{
+ 
+-class KBackgroundGroupPrivate : public QObject ,public ThemeController
++class KBackgroundGroupPrivate : public QObject, public ThemeController
+ {
+     Q_OBJECT
+     Q_DECLARE_PUBLIC(KBackgroundGroup)
+ public:
+-    enum WidgetPosition
+-    {
++    enum WidgetPosition {
+         Beginning,
+         Middle,
+         End
+     };
+-    KBackgroundGroupPrivate(KBackgroundGroup* parent);
++    KBackgroundGroupPrivate(KBackgroundGroup *parent);
+     void updateLayout();
++
+ private:
+-    KBackgroundGroup* q_ptr;
+-    QVBoxLayout* m_pmainWidgetLayout;
+-    QList<QWidget*> m_pwidgetList;
+-    QList<QWidget*> m_pwidgetStateList;
++    KBackgroundGroup *q_ptr;
++    QVBoxLayout *m_pmainWidgetLayout;
++    QList<QWidget *> m_pwidgetList;
++    QList<QWidget *> m_pwidgetStateList;
+     QPalette::ColorRole m_brushColorRole;
+     QColor m_backgroundColor;
+     WidgetPosition m_widgetPosition;
+@@ -57,14 +58,14 @@ private:
+ };
+ 
+ KBackgroundGroup::KBackgroundGroup(QWidget *parent)
+-    :QFrame(parent)
+-    ,d_ptr(new KBackgroundGroupPrivate(this))
++    : QFrame(parent)
++    , d_ptr(new KBackgroundGroupPrivate(this))
+ {
+     Q_D(KBackgroundGroup);
+     setFrameShape(QFrame::Box);
+     setFrameShadow(QFrame::Plain);
+-    setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Fixed);
+-    connect(d->m_gsetting,&QGSettings::changed,this,[=]{
++    setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
++    connect(d->m_gsetting, &QGSettings::changed, this, [=] {
+         d->initThemeStyle();
+         d->m_backgroundColor = palette().color(d->m_brushColorRole);
+     });
+@@ -73,9 +74,9 @@ KBackgroundGroup::KBackgroundGroup(QWidget *parent)
+ void KBackgroundGroup::addWidget(QWidget *widget)
+ {
+     Q_D(KBackgroundGroup);
+-    if(widget->maximumHeight() != widget->minimumHeight())
++    if (widget->maximumHeight() != widget->minimumHeight())
+         widget->setFixedHeight(60);
+-    if(!d->m_pwidgetList.contains(widget))
++    if (!d->m_pwidgetList.contains(widget))
+         d->m_pwidgetList.append(widget);
+     else
+         return;
+@@ -85,15 +86,14 @@ void KBackgroundGroup::addWidget(QWidget *widget)
+ void KBackgroundGroup::addWidgetList(QList<QWidget *> list)
+ {
+     Q_D(KBackgroundGroup);
+-    for (int i = 0;  i < list.count();i++)
+-    {
++    for (int i = 0; i < list.count(); i++) {
+         auto widget = list.at(i);
+-        if(widget->maximumHeight() != widget->minimumHeight())
++        if (widget->maximumHeight() != widget->minimumHeight())
+             widget->setFixedHeight(60);
+-        if(!d->m_pwidgetList.contains(list.at(i)))
++        if (!d->m_pwidgetList.contains(list.at(i)))
+             d->m_pwidgetList.append(list.at(i));
+         else
+-            continue ;
++            continue;
+     }
+     d->updateLayout();
+ }
+@@ -101,7 +101,7 @@ void KBackgroundGroup::addWidgetList(QList<QWidget *> list)
+ void KBackgroundGroup::removeWidgetAt(int i)
+ {
+     Q_D(KBackgroundGroup);
+-    if(d->m_pwidgetList.contains(d->m_pwidgetList.at(i)))
++    if (d->m_pwidgetList.contains(d->m_pwidgetList.at(i)))
+         d->m_pwidgetList.removeAt(i);
+     else
+         return;
+@@ -111,22 +111,21 @@ void KBackgroundGroup::removeWidgetAt(int i)
+ void KBackgroundGroup::removeWidget(QWidget *widget)
+ {
+     Q_D(KBackgroundGroup);
+-    if(d->m_pwidgetList.contains(widget))
++    if (d->m_pwidgetList.contains(widget))
+         d->m_pwidgetList.removeOne(widget);
+     else
+-        return ;
++        return;
+     d->updateLayout();
+ }
+ 
+ void KBackgroundGroup::removeWidgetList(QList<QWidget *> list)
+ {
+     Q_D(KBackgroundGroup);
+-    for (int i = 0;  i < list.count();i++)
+-    {
+-        if(d->m_pwidgetList.contains(list.at(i)))
++    for (int i = 0; i < list.count(); i++) {
++        if (d->m_pwidgetList.contains(list.at(i)))
+             d->m_pwidgetList.removeOne(list.at(i));
+         else
+-            continue ;
++            continue;
+     }
+     d->updateLayout();
+ }
+@@ -134,27 +133,26 @@ void KBackgroundGroup::removeWidgetList(QList<QWidget *> list)
+ void KBackgroundGroup::insertWidgetAt(int index, QWidget *widget)
+ {
+     Q_D(KBackgroundGroup);
+-    if(widget->maximumHeight() != widget->minimumHeight())
++    if (widget->maximumHeight() != widget->minimumHeight())
+         widget->setFixedHeight(60);
+-    if(!d->m_pwidgetList.contains(widget))
+-        d->m_pwidgetList.insert(index,widget);
++    if (!d->m_pwidgetList.contains(widget))
++        d->m_pwidgetList.insert(index, widget);
+     else
+-        return ;
++        return;
+     d->updateLayout();
+ }
+ 
+ void KBackgroundGroup::insertWidgetList(int index, QList<QWidget *> list)
+ {
+     Q_D(KBackgroundGroup);
+-    for (int i = 0;  i < list.count();i++)
+-    {
++    for (int i = 0; i < list.count(); i++) {
+         auto widget = list.at(i);
+-        if(widget->maximumHeight() != widget->minimumHeight())
++        if (widget->maximumHeight() != widget->minimumHeight())
+             widget->setFixedHeight(60);
+-        if(!d->m_pwidgetList.contains(list.at(i)))
+-            d->m_pwidgetList.insert(index++,list.at(i));
++        if (!d->m_pwidgetList.contains(list.at(i)))
++            d->m_pwidgetList.insert(index++, list.at(i));
+         else
+-            continue ;
++            continue;
+     }
+     d->updateLayout();
+ }
+@@ -181,20 +179,17 @@ void KBackgroundGroup::setBackgroundRole(QPalette::ColorRole role)
+ QPalette::ColorRole KBackgroundGroup::backgroundRole() const
+ {
+     Q_D(const KBackgroundGroup);
+-    return d->m_brushColorRole ;
++    return d->m_brushColorRole;
+ }
+ 
+ void KBackgroundGroup::setStateEnable(QWidget *widget, bool flag)
+ {
+     Q_D(KBackgroundGroup);
+-    if(!d->m_pwidgetStateList.contains(widget) && flag)
+-    {
++    if (!d->m_pwidgetStateList.contains(widget) && flag) {
+         d->m_pwidgetStateList.append(widget);
+         widget->installEventFilter(this);
+         widget->setAttribute(Qt::WA_TranslucentBackground);
+-    }
+-    else if(d->m_pwidgetStateList.contains(widget) && !flag)
+-    {
++    } else if (d->m_pwidgetStateList.contains(widget) && !flag) {
+         d->m_pwidgetStateList.removeOne(widget);
+     }
+ }
+@@ -208,8 +203,8 @@ QList<QWidget *> KBackgroundGroup::widgetList()
+ void KBackgroundGroup::paintEvent(QPaintEvent *event)
+ {
+     Q_D(KBackgroundGroup);
+-    //绘制backgroundgroup
+-    QRect rect =this->rect();
++    // 绘制backgroundgroup
++    QRect rect = this->rect();
+ 
+     QPainter painter(this);
+     painter.setRenderHint(QPainter::Antialiasing);
+@@ -217,69 +212,62 @@ void KBackgroundGroup::paintEvent(QPaintEvent *event)
+     painter.setBrush(palette().color(d->m_brushColorRole));
+ 
+     QPainterPath path;
+-    path.moveTo(rect.topLeft() + QPointF(d->m_radius , 0));
+-    path.quadTo(rect.topLeft() , rect.topLeft() + QPointF(0,d->m_radius));
++    path.moveTo(rect.topLeft() + QPointF(d->m_radius, 0));
++    path.quadTo(rect.topLeft(), rect.topLeft() + QPointF(0, d->m_radius));
+     path.lineTo(rect.bottomLeft() - QPointF(0, d->m_radius));
+-    path.quadTo(rect.bottomLeft() , rect.bottomLeft() + QPointF(d->m_radius,0));
+-    path.lineTo(rect.bottomRight() - QPointF(d->m_radius,0));
+-    path.quadTo(rect.bottomRight() , rect.bottomRight() - QPointF(0,d->m_radius));
+-    path.lineTo(rect.topRight() + QPointF(0,d->m_radius));
+-    path.quadTo(rect.topRight() , rect.topRight() - QPointF(d->m_radius,0));
+-    path.lineTo(rect.topLeft() + QPointF(d->m_radius , 0));
++    path.quadTo(rect.bottomLeft(), rect.bottomLeft() + QPointF(d->m_radius, 0));
++    path.lineTo(rect.bottomRight() - QPointF(d->m_radius, 0));
++    path.quadTo(rect.bottomRight(), rect.bottomRight() - QPointF(0, d->m_radius));
++    path.lineTo(rect.topRight() + QPointF(0, d->m_radius));
++    path.quadTo(rect.topRight(), rect.topRight() - QPointF(d->m_radius, 0));
++    path.lineTo(rect.topLeft() + QPointF(d->m_radius, 0));
+     painter.drawPath(path);
+ 
+-    //三态事件响应颜色
++    // 三态事件响应颜色
+     painter.save();
+     painter.setBrush(d->m_backgroundColor);
+     painter.setRenderHint(QPainter::Antialiasing);
+     painter.setPen(Qt::transparent);
+ 
+-    //确定三态区域
+-    int index,offset=0;
+-    if(d->m_pwidgetStateList.count() > 0)
+-    {
+-        for(index =0;index<d->m_pwidgetList.count();index++)
+-        {
++    // 确定三态区域
++    int index, offset = 0;
++    if (d->m_pwidgetStateList.count() > 0) {
++        for (index = 0; index < d->m_pwidgetList.count(); index++) {
+             auto widget = d->m_pwidgetList.at(index);
+-            if( widget != d->m_pwidgetStateList.at(d->m_rectLocal))
+-                offset = /*offset +*/ d->m_pwidgetList.at(index)->height()*( d->m_pwidgetList.indexOf(d->m_pwidgetStateList.at(d->m_rectLocal)));
++            if (widget != d->m_pwidgetStateList.at(d->m_rectLocal))
++                offset = /*offset +*/ d->m_pwidgetList.at(index)->height() * (d->m_pwidgetList.indexOf(d->m_pwidgetStateList.at(d->m_rectLocal)));
+             else
+                 break;
+-
+         }
+-        d->m_rect = d->m_rect.translated(0,offset+d->m_pwidgetList.indexOf(d->m_pwidgetStateList.at(d->m_rectLocal))*1);
+-        d->m_rect = d->m_rect.adjusted(0,0,2,2);
++        d->m_rect = d->m_rect.translated(0, offset + d->m_pwidgetList.indexOf(d->m_pwidgetStateList.at(d->m_rectLocal)) * 1);
++        d->m_rect = d->m_rect.adjusted(0, 0, 2, 2);
+     }
+ 
+-    //三态区域颜色调整
++    // 三态区域颜色调整
+     QPainterPath path1;
+-    if(d->m_pwidgetList.count() == 1 && d->m_pwidgetStateList.count() == 1)
+-    {
+-         painter.drawRoundedRect(d->m_rect,d->m_radius,d->m_radius);
+-    }
+-    else if(d->m_pwidgetList.count() > 1 && d->m_pwidgetStateList.count() > 1)
+-    {
+-        switch (d->m_widgetPosition)
+-        {
++    if (d->m_pwidgetList.count() == 1 && d->m_pwidgetStateList.count() == 1) {
++        painter.drawRoundedRect(d->m_rect, d->m_radius, d->m_radius);
++    } else if (d->m_pwidgetList.count() > 1 && d->m_pwidgetStateList.count() > 1) {
++        switch (d->m_widgetPosition) {
+         case KBackgroundGroupPrivate::Beginning:
+-            path1.moveTo(d->m_rect.topLeft() + QPointF(0,d->m_radius));
++            path1.moveTo(d->m_rect.topLeft() + QPointF(0, d->m_radius));
+             path1.lineTo(d->m_rect.bottomLeft());
+             path1.lineTo(d->m_rect.bottomRight());
+-            path1.lineTo(d->m_rect.topRight() + QPointF(0,d->m_radius));
+-            path1.quadTo(d->m_rect.topRight() , d->m_rect.topRight() - QPointF(d->m_radius,0));
+-            path1.lineTo(d->m_rect.topLeft() + QPointF(d->m_radius,0));
+-            path1.quadTo(d->m_rect.topLeft() , d->m_rect.topLeft() + QPointF(0,d->m_radius));
++            path1.lineTo(d->m_rect.topRight() + QPointF(0, d->m_radius));
++            path1.quadTo(d->m_rect.topRight(), d->m_rect.topRight() - QPointF(d->m_radius, 0));
++            path1.lineTo(d->m_rect.topLeft() + QPointF(d->m_radius, 0));
++            path1.quadTo(d->m_rect.topLeft(), d->m_rect.topLeft() + QPointF(0, d->m_radius));
+             painter.drawPath(path1);
+             break;
+         case KBackgroundGroupPrivate::Middle:
+-            painter.drawRoundedRect(d->m_rect,0,0);
++            painter.drawRoundedRect(d->m_rect, 0, 0);
+             break;
+         case KBackgroundGroupPrivate::End:
+             path1.moveTo(d->m_rect.topLeft());
+-            path1.lineTo(d->m_rect.bottomLeft() - QPointF(0,d->m_radius));
+-            path1.quadTo(d->m_rect.bottomLeft() , d->m_rect.bottomLeft() + QPointF(d->m_radius,0));
+-            path1.lineTo(d->m_rect.bottomRight() - QPointF(d->m_radius,0));
+-            path1.quadTo(d->m_rect.bottomRight() , d->m_rect.bottomRight() - QPointF(0,d->m_radius));
++            path1.lineTo(d->m_rect.bottomLeft() - QPointF(0, d->m_radius));
++            path1.quadTo(d->m_rect.bottomLeft(), d->m_rect.bottomLeft() + QPointF(d->m_radius, 0));
++            path1.lineTo(d->m_rect.bottomRight() - QPointF(d->m_radius, 0));
++            path1.quadTo(d->m_rect.bottomRight(), d->m_rect.bottomRight() - QPointF(0, d->m_radius));
+             path1.lineTo(d->m_rect.topRight());
+             path1.lineTo(d->m_rect.topLeft());
+             painter.drawPath(path1);
+@@ -294,90 +282,78 @@ void KBackgroundGroup::paintEvent(QPaintEvent *event)
+ bool KBackgroundGroup::eventFilter(QObject *watched, QEvent *event)
+ {
+     Q_D(KBackgroundGroup);
+-    auto widget = static_cast<QWidget*>(watched);
++    auto widget = static_cast<QWidget *>(watched);
+ 
+-    if(d->m_pwidgetStateList.contains(widget))
+-    {
+-        //事件过滤器判断事件设置颜色
++    if (d->m_pwidgetStateList.contains(widget)) {
++        // 事件过滤器判断事件设置颜色
+         QColor color = palette().color(d->m_brushColorRole);
+-        switch (event->type())
+-        {
++        switch (event->type()) {
+         case QEvent::Enter:
+             d->m_rect = widget->rect();
+-            if(ThemeController::themeMode() == LightTheme)
+-            {
+-//                color = palette().button().color();
+-                d->m_backgroundColor = ThemeController::mixColor(color,Qt::black,0.05);
++            if (ThemeController::themeMode() == LightTheme) {
++                //                color = palette().button().color();
++                d->m_backgroundColor = ThemeController::mixColor(color, Qt::black, 0.05);
++            } else {
++                //                color = palette().base().color();
++                d->m_backgroundColor = ThemeController::mixColor(color, Qt::white, 0.2);
+             }
+-            else
+-            {
+-//                color = palette().base().color();
+-                d->m_backgroundColor = ThemeController::mixColor(color,Qt::white,0.2);
+-            }
+-            if(d->m_pwidgetList.at(0) == widget)
++            if (d->m_pwidgetList.at(0) == widget)
+                 d->m_widgetPosition = KBackgroundGroupPrivate::Beginning;
+-            else if(d->m_pwidgetList.at(d->m_pwidgetList.count()-1) == widget)
++            else if (d->m_pwidgetList.at(d->m_pwidgetList.count() - 1) == widget)
+                 d->m_widgetPosition = KBackgroundGroupPrivate::End;
+             else
+                 d->m_widgetPosition = KBackgroundGroupPrivate::Middle;
+-            d->m_rectLocal =d->m_pwidgetStateList.indexOf(widget);
++            d->m_rectLocal = d->m_pwidgetStateList.indexOf(widget);
+             update();
+             break;
+         case QEvent::MouseButtonPress:
+             d->m_rect = widget->rect();
+-            if(ThemeController::themeMode() == LightTheme)
+-            {
+-//                color = palette().button().color();
+-                d->m_backgroundColor = ThemeController::mixColor(color,Qt::black,0.2);
+-            }
+-            else
+-            {
+-//                color = palette().base().color();
+-                d->m_backgroundColor = ThemeController::mixColor(color,Qt::white,0.05);
++            if (ThemeController::themeMode() == LightTheme) {
++                //                color = palette().button().color();
++                d->m_backgroundColor = ThemeController::mixColor(color, Qt::black, 0.2);
++            } else {
++                //                color = palette().base().color();
++                d->m_backgroundColor = ThemeController::mixColor(color, Qt::white, 0.05);
+             }
+-            if(d->m_pwidgetList.at(0) == widget)
++            if (d->m_pwidgetList.at(0) == widget)
+                 d->m_widgetPosition = KBackgroundGroupPrivate::Beginning;
+-            else if(d->m_pwidgetList.at(d->m_pwidgetList.count()-1) == widget)
++            else if (d->m_pwidgetList.at(d->m_pwidgetList.count() - 1) == widget)
+                 d->m_widgetPosition = KBackgroundGroupPrivate::End;
+             else
+                 d->m_widgetPosition = KBackgroundGroupPrivate::Middle;
+-            d->m_rectLocal =d->m_pwidgetStateList.indexOf(widget);
++            d->m_rectLocal = d->m_pwidgetStateList.indexOf(widget);
+             update();
+             break;
+-        case QEvent::MouseButtonRelease:
+-        {
++        case QEvent::MouseButtonRelease: {
+             d->m_rect = widget->rect();
+-            if(ThemeController::themeMode() == LightTheme)
+-            {
+-//                color = palette().button().color();
+-                d->m_backgroundColor = ThemeController::mixColor(color,Qt::black,0.05);
+-            }
+-            else
+-            {
+-//                color = palette().base().color();
+-                d->m_backgroundColor = ThemeController::mixColor(color,Qt::white,0.2);
++            if (ThemeController::themeMode() == LightTheme) {
++                //                color = palette().button().color();
++                d->m_backgroundColor = ThemeController::mixColor(color, Qt::black, 0.05);
++            } else {
++                //                color = palette().base().color();
++                d->m_backgroundColor = ThemeController::mixColor(color, Qt::white, 0.2);
+             }
+-            if(d->m_pwidgetList.at(0) == widget)
++            if (d->m_pwidgetList.at(0) == widget)
+                 d->m_widgetPosition = KBackgroundGroupPrivate::Beginning;
+-            else if(d->m_pwidgetList.at(d->m_pwidgetList.count()-1) == widget)
++            else if (d->m_pwidgetList.at(d->m_pwidgetList.count() - 1) == widget)
+                 d->m_widgetPosition = KBackgroundGroupPrivate::End;
+             else
+                 d->m_widgetPosition = KBackgroundGroupPrivate::Middle;
+             Q_EMIT clicked(widget);
+-            d->m_rectLocal =d->m_pwidgetStateList.indexOf(widget);
++            d->m_rectLocal = d->m_pwidgetStateList.indexOf(widget);
+             update();
+             break;
+         }
+         case QEvent::Leave:
+             d->m_rect = widget->rect();
+             d->m_backgroundColor = palette().color(d->m_brushColorRole);
+-            if(d->m_pwidgetList.at(0) == widget)
++            if (d->m_pwidgetList.at(0) == widget)
+                 d->m_widgetPosition = KBackgroundGroupPrivate::Beginning;
+-            else if(d->m_pwidgetList.at(d->m_pwidgetList.count()-1) == widget)
++            else if (d->m_pwidgetList.at(d->m_pwidgetList.count() - 1) == widget)
+                 d->m_widgetPosition = KBackgroundGroupPrivate::End;
+             else
+                 d->m_widgetPosition = KBackgroundGroupPrivate::Middle;
+-            d->m_rectLocal =d->m_pwidgetStateList.indexOf(widget);
++            d->m_rectLocal = d->m_pwidgetStateList.indexOf(widget);
+             update();
+             break;
+         case QEvent::Paint:
+@@ -387,28 +363,29 @@ bool KBackgroundGroup::eventFilter(QObject *watched, QEvent *event)
+             break;
+         }
+     }
+-    return QObject::eventFilter(watched,event);
++    return QObject::eventFilter(watched, event);
+ }
+ 
+ KBackgroundGroupPrivate::KBackgroundGroupPrivate(KBackgroundGroup *parent)
+-    :q_ptr(parent)
+-    ,m_widgetPosition(KBackgroundGroupPrivate::Beginning),m_rectLocal(0)
+-    ,m_brushColorRole(QPalette::Base)
+-    ,m_backgroundColor(parent->palette().color(m_brushColorRole))
++    : q_ptr(parent)
++    , m_widgetPosition(KBackgroundGroupPrivate::Beginning)
++    , m_rectLocal(0)
++    , m_brushColorRole(QPalette::Base)
++    , m_backgroundColor(parent->palette().color(m_brushColorRole))
+ {
+     Q_Q(KBackgroundGroup);
+     m_pmainWidgetLayout = new QVBoxLayout(q);
+-    m_pmainWidgetLayout->setContentsMargins(0,0,0,0);
++    m_pmainWidgetLayout->setContentsMargins(0, 0, 0, 0);
+     m_pmainWidgetLayout->setSpacing(0);
+     m_pmainWidgetLayout->setMargin(0);
+ 
+     int radius = ThemeController::getRadiusFromDT("kradius-window");
+-    if(radius == -1)
++    if (radius == -1)
+         m_radius = 12;
+     else
+         m_radius = radius;
+-//    q->setFocus(Qt::MouseFocusReason);
+-    connect(m_gsetting,&QGSettings::changed,this,[=](){
++    //    q->setFocus(Qt::MouseFocusReason);
++    connect(m_gsetting, &QGSettings::changed, this, [=]() {
+         initThemeStyle();
+     });
+ }
+@@ -416,40 +393,33 @@ KBackgroundGroupPrivate::KBackgroundGroupPrivate(KBackgroundGroup *parent)
+ void KBackgroundGroupPrivate::updateLayout()
+ {
+     Q_Q(KBackgroundGroup);
+-    //清空
++    // 清空
+     QLayoutItem *child;
+-    while ((child = m_pmainWidgetLayout->takeAt(0)) != 0)
+-    {
+-        //删除Stretch(弹簧)等布局
+-        if (child->spacerItem())
+-        {
++    while ((child = m_pmainWidgetLayout->takeAt(0)) != 0) {
++        // 删除Stretch(弹簧)等布局
++        if (child->spacerItem()) {
+             m_pmainWidgetLayout->removeItem(child);
+             continue;
+         }
+-        //删除布局
++        // 删除布局
+         m_pmainWidgetLayout->removeWidget(child->widget());
+         child->widget()->setParent(nullptr);
+         delete child;
+-        child =nullptr;
++        child = nullptr;
+     }
+ 
+-    //添加布局
+-    if(m_pwidgetList.count() < 1)
++    // 添加布局
++    if (m_pwidgetList.count() < 1)
+         return;
+-    else if(m_pwidgetList.count() == 1)
+-    {
++    else if (m_pwidgetList.count() == 1) {
+         m_pmainWidgetLayout->addWidget(m_pwidgetList.at(0));
+-    }
+-    else
+-    {
+-        for (int i = 0; i < m_pwidgetList.count(); ++i)
+-        {
+-              m_pmainWidgetLayout->addWidget(m_pwidgetList.at(i));
+-              if(i  != m_pwidgetList.count()-1)
+-              {
+-                  KHLineFrame* frame = new KHLineFrame();
+-                  m_pmainWidgetLayout->addWidget(frame);
+-              }
++    } else {
++        for (int i = 0; i < m_pwidgetList.count(); ++i) {
++            m_pmainWidgetLayout->addWidget(m_pwidgetList.at(i));
++            if (i != m_pwidgetList.count() - 1) {
++                KHLineFrame *frame = new KHLineFrame();
++                m_pmainWidgetLayout->addWidget(frame);
++            }
+         }
+     }
+ }
+diff --git a/kysdk-qtwidgets/src/kbackgroundgroup.h b/kysdk-qtwidgets/src/kbackgroundgroup.h
+index 250c0d2..a4a5f79 100644
+--- a/kysdk-qtwidgets/src/kbackgroundgroup.h
++++ b/kysdk-qtwidgets/src/kbackgroundgroup.h
+@@ -26,7 +26,8 @@
+ #include "gui_g.h"
+ #include <QFrame>
+ #include <QWidget>
+-namespace kdk {
++namespace kdk
++{
+ 
+ /**
+  * @defgroup ContainerModules
+@@ -43,19 +44,19 @@ class GUI_EXPORT KBackgroundGroup : public QFrame
+     Q_OBJECT
+ 
+ public:
+-    KBackgroundGroup(QWidget* parent = nullptr);
++    KBackgroundGroup(QWidget *parent = nullptr);
+ 
+     /**
+      * @brief 添加一个widget控件
+      * @param widget
+      */
+-    void addWidget(QWidget* widget);
++    void addWidget(QWidget *widget);
+ 
+     /**
+      * @brief 添加一个widget list
+      * @param list
+      */
+-    void addWidgetList(QList<QWidget*> list);
++    void addWidgetList(QList<QWidget *> list);
+ 
+     /**
+      * @brief 删除一个指定index的widget
+@@ -67,13 +68,13 @@ public:
+      * @brief 删除一个widget
+      * @param widget
+      */
+-    void removeWidget(QWidget* widget);
++    void removeWidget(QWidget *widget);
+ 
+     /**
+      * @brief 删除一个widget list
+      * @param list
+      */
+-    void removeWidgetList(QList<QWidget*> list);
++    void removeWidgetList(QList<QWidget *> list);
+ 
+     /**
+      * @brief 指定位置插入一个widget
+@@ -87,7 +88,7 @@ public:
+      * @param index
+      * @param list
+      */
+-    void insertWidgetList(int index, QList<QWidget*> list);
++    void insertWidgetList(int index, QList<QWidget *> list);
+ 
+     /**
+      * @brief 设置KBackgroundGroup的圆角
+@@ -118,7 +119,7 @@ public:
+      * @param flag
+      * @param widget
+      */
+-    void setStateEnable(QWidget* widget,bool flag);
++    void setStateEnable(QWidget *widget, bool flag);
+ 
+     /**
+      * @brief 返回widget列表
+@@ -130,7 +131,7 @@ Q_SIGNALS:
+     /**
+      * @brief 点击会发出信号
+      */
+-    void clicked(QWidget*);
++    void clicked(QWidget *);
+ 
+ protected:
+     void paintEvent(QPaintEvent *event);
+@@ -138,7 +139,7 @@ protected:
+ 
+ private:
+     Q_DECLARE_PRIVATE(KBackgroundGroup)
+-    KBackgroundGroupPrivate* const d_ptr;
++    KBackgroundGroupPrivate *const d_ptr;
+ };
+ 
+ }
+diff --git a/kysdk-qtwidgets/src/kbadge.cpp b/kysdk-qtwidgets/src/kbadge.cpp
+index e0f95cc..2178a5b 100644
+--- a/kysdk-qtwidgets/src/kbadge.cpp
++++ b/kysdk-qtwidgets/src/kbadge.cpp
+@@ -22,24 +22,24 @@
+ 
+ #include "kbadge.h"
+ #include "themeController.h"
+-#include <QPainter>
+-#include <QRect>
++#include <QApplication>
+ #include <QFont>
+ #include <QFontMetrics>
+-#include <QApplication>
++#include <QPainter>
++#include <QRect>
+ 
+ namespace kdk
+ {
+-class KBadgePrivate:public QObject,public ThemeController
++class KBadgePrivate : public QObject, public ThemeController
+ {
+     Q_OBJECT
+     Q_DECLARE_PUBLIC(KBadge)
+ 
+ public:
+-    KBadgePrivate(KBadge* parent);
++    KBadgePrivate(KBadge *parent);
+ 
+ private:
+-    KBadge* q_ptr;
++    KBadge *q_ptr;
+     QColor m_color;
+     int m_value;
+     int m_fontSize;
+@@ -48,24 +48,23 @@ private:
+ };
+ 
+ KBadgePrivate::KBadgePrivate(KBadge *parent)
+-    :q_ptr(parent)
++    : q_ptr(parent)
+ {
+     Q_Q(KBadge);
+     m_value = -1;
+     m_color = ThemeController::getPaletteColorFromDT("highlight");
+     m_fontSize = 14;
+     m_isShowValue = true;
+-    m_useCustomColor=false;
++    m_useCustomColor = false;
+     setParent(parent);
+ }
+ 
+ KBadge::KBadge(QWidget *parent)
+-    :QWidget(parent),
+-      d_ptr(new KBadgePrivate(this))
++    : QWidget(parent)
++    , d_ptr(new KBadgePrivate(this))
+ {
+     Q_D(KBadge);
+-    setMinimumSize(40,30);
+-
++    setMinimumSize(40, 30);
+ }
+ 
+ void KBadge::setValue(int value)
+@@ -101,7 +100,7 @@ QColor KBadge::color()
+ void KBadge::setColor(const QColor &color)
+ {
+     Q_D(KBadge);
+-    d->m_useCustomColor=true;
++    d->m_useCustomColor = true;
+     d->m_color = color;
+ }
+ 
+@@ -114,7 +113,7 @@ int KBadge::fontSize()
+ void KBadge::setFontSize(int size)
+ {
+     Q_D(KBadge);
+-    if(size<1 ||size >100)
++    if (size < 1 || size > 100)
+         return;
+     d->m_fontSize = size;
+ }
+@@ -127,49 +126,42 @@ void KBadge::paintEvent(QPaintEvent *event)
+     QFontMetrics fm(font);
+     int height = fm.height();
+     int width;
+-    if(d->m_value <1 ||!d->m_isShowValue)
+-    {
++    if (d->m_value < 1 || !d->m_isShowValue) {
+         width = 10;
+         height = 10;
+-    }
+-    else if(d->m_value >= 1 && d->m_value < 1000)
+-    {
++    } else if (d->m_value >= 1 && d->m_value < 1000) {
+         width = fm.width(QString::number(d->m_value)) + 10;
+-        width = width > height ? width:height;
+-    }
+-    else
+-    {
++        width = width > height ? width : height;
++    } else {
+         width = fm.width(QString::number(999)) + 10;
+-        width = width > height ? width:height;
++        width = width > height ? width : height;
+     }
+     QPainter painter(this);
+     painter.setRenderHint(QPainter::Antialiasing);
+     painter.setPen(Qt::NoPen);
+-    if(d->m_useCustomColor)
++    if (d->m_useCustomColor)
+         painter.setBrush(d->m_color);
+     else
+         painter.setBrush(ThemeController::getPaletteColorFromDT("highlight"));
+-    QRect tmpRect(rect().center().x()-width/2,rect().center().y()-height/2,width,height);
+-    painter.drawRoundedRect(tmpRect,height/2,height/2);
+-    //文字颜色固定
++    QRect tmpRect(rect().center().x() - width / 2, rect().center().y() - height / 2, width, height);
++    painter.drawRoundedRect(tmpRect, height / 2, height / 2);
++    // 文字颜色固定
+     painter.setPen(ThemeController::getPaletteColorFromDT("light"));
+-    if(d->m_value >= 1 && d->m_value<1000 && d->m_isShowValue)
+-    {
++    if (d->m_value >= 1 && d->m_value < 1000 && d->m_isShowValue) {
+         QFont font(QApplication::font());
+         font.setPixelSize(d->m_fontSize);
+         painter.setFont(font);
+-        painter.drawText(tmpRect,Qt::AlignCenter,QString::number(d->m_value));
++        painter.drawText(tmpRect, Qt::AlignCenter, QString::number(d->m_value));
+     }
+ 
+-    if(d->m_value >= 1000 && d->m_value < INTMAX_MAX && d->m_isShowValue)
+-    {
++    if (d->m_value >= 1000 && d->m_value < INTMAX_MAX && d->m_isShowValue) {
+         painter.setBrush(ThemeController::getPaletteColorFromDT("light"));
+-        QPointF pointf(rect().center().x(),rect().center().y());
+-        painter.drawEllipse(pointf,qreal(1.5),qreal(1.5));
+-        QPointF leff(pointf.x()-10,pointf.y());
+-        QPointF rightf(pointf.x()+10,pointf.y());
+-        painter.drawEllipse(leff,qreal(1.5),qreal(1.5));
+-        painter.drawEllipse(rightf,qreal(1.5),qreal(1.5));
++        QPointF pointf(rect().center().x(), rect().center().y());
++        painter.drawEllipse(pointf, qreal(1.5), qreal(1.5));
++        QPointF leff(pointf.x() - 10, pointf.y());
++        QPointF rightf(pointf.x() + 10, pointf.y());
++        painter.drawEllipse(leff, qreal(1.5), qreal(1.5));
++        painter.drawEllipse(rightf, qreal(1.5), qreal(1.5));
+     }
+ }
+ 
+@@ -182,4 +174,3 @@ void KBadge::resizeEvent(QResizeEvent *event)
+ }
+ #include "kbadge.moc"
+ #include "moc_kbadge.cpp"
+-
+diff --git a/kysdk-qtwidgets/src/kbadge.h b/kysdk-qtwidgets/src/kbadge.h
+index a91447f..c19f355 100644
+--- a/kysdk-qtwidgets/src/kbadge.h
++++ b/kysdk-qtwidgets/src/kbadge.h
+@@ -24,9 +24,9 @@
+ #define KBADGE_H
+ 
+ #include "gui_g.h"
+-#include <QWidget>
+-#include <QPixmap>
+ #include <QColor>
++#include <QPixmap>
++#include <QWidget>
+ 
+ namespace kdk
+ {
+@@ -39,12 +39,12 @@ class KBadgePrivate;
+ /**
+  * @brief 消息提醒气泡
+  */
+-class GUI_EXPORT KBadge:public QWidget
++class GUI_EXPORT KBadge : public QWidget
+ {
+     Q_OBJECT
+ 
+ public:
+-    KBadge(QWidget*parent);
++    KBadge(QWidget *parent);
+ 
+     /**
+      * @brief 返回值
+@@ -79,7 +79,7 @@ public:
+      * @brief 设置背景色
+      * @param color
+      */
+-    void setColor(const QColor& color);
++    void setColor(const QColor &color);
+ 
+     /**
+      * @brief 获取字体大小
+@@ -99,13 +99,13 @@ protected:
+ 
+ private:
+     Q_DECLARE_PRIVATE(KBadge)
+-    KBadgePrivate*const d_ptr;
++    KBadgePrivate *const d_ptr;
+ };
+ }
+ /**
+-  * @example testbadge/widget.h
+-  * @example testbadge/widget.cpp
+-  * @}
+-  */
++ * @example testbadge/widget.h
++ * @example testbadge/widget.cpp
++ * @}
++ */
+ 
+ #endif // KBADGE_H
+diff --git a/kysdk-qtwidgets/src/kballontip.cpp b/kysdk-qtwidgets/src/kballontip.cpp
+index aa1d9cf..92743a1 100644
+--- a/kysdk-qtwidgets/src/kballontip.cpp
++++ b/kysdk-qtwidgets/src/kballontip.cpp
+@@ -20,54 +20,54 @@
+  *
+  */
+ 
+-#include <QLabel>
++#include "kballontip.h"
++#include "themeController.h"
+ #include <QBoxLayout>
+ #include <QColor>
+-#include <QPalette>
++#include <QDebug>
++#include <QGraphicsDropShadowEffect>
++#include <QHBoxLayout>
+ #include <QIcon>
++#include <QLabel>
+ #include <QPainter>
++#include <QPainterPath>
++#include <QPalette>
+ #include <QStyle>
+ #include <QStyleOption>
+-#include <QGraphicsDropShadowEffect>
+-#include "kballontip.h"
+ #include <QTimer>
+-#include <QHBoxLayout>
+-#include "themeController.h"
+ #include <kwindoweffects.h>
+-#include <QPainterPath>
+-#include <QDebug>
+ namespace kdk
+ {
+-class KBallonTipPrivate:public QObject,public ThemeController
++class KBallonTipPrivate : public QObject, public ThemeController
+ {
+     Q_DECLARE_PUBLIC(KBallonTip)
+     Q_OBJECT
+ 
+ public:
+-    KBallonTipPrivate(KBallonTip*parent);
++    KBallonTipPrivate(KBallonTip *parent);
+     void adjustStyle();
+ 
+ protected:
+     void changeTheme();
+ 
+ private:
+-    KBallonTip* q_ptr;
+-    QLabel* m_pContentLabel;
+-    QLabel* m_pIconLabel;
++    KBallonTip *q_ptr;
++    QLabel *m_pContentLabel;
++    QLabel *m_pIconLabel;
+     TipType m_type;
+     QIcon m_icon;
+     QPixmap m_variablePixmap;
+     QPixmap m_pixmap;
+     QColor m_color;
+-    QHBoxLayout* m_pLayout;
+-    QVBoxLayout* m_pVLayout;
++    QHBoxLayout *m_pLayout;
++    QVBoxLayout *m_pVLayout;
+     int m_time;
+     QGraphicsDropShadowEffect *m_pShadow_effect;
+ };
+ 
+ KBallonTip::KBallonTip(QWidget *parent)
+-    : QWidget(parent),
+-      d_ptr(new KBallonTipPrivate(this))
++    : QWidget(parent)
++    , d_ptr(new KBallonTipPrivate(this))
+ {
+     Q_D(KBallonTip);
+     setAttribute(Qt::WA_TranslucentBackground);
+@@ -76,25 +76,25 @@ KBallonTip::KBallonTip(QWidget *parent)
+     d->m_pVLayout = new QVBoxLayout(this);
+     d->m_pLayout = new QHBoxLayout(this);
+     d->m_pLayout->setSpacing(12);
+-    this->setContentsMargins(24,18,24,18);
++    this->setContentsMargins(24, 18, 24, 18);
+     d->m_pContentLabel = new QLabel(this);
+-//    d->m_pContentLabel->setWordWrap(true);
+-    //设置具体阴影
++    //    d->m_pContentLabel->setWordWrap(true);
++    // 设置具体阴影
+     d->m_pShadow_effect = new QGraphicsDropShadowEffect(this);
+     d->m_pShadow_effect->setOffset(0, 0);
+-    //阴影颜色
+-    d->m_pShadow_effect->setColor(ThemeController::getPaletteColorFromDT("text",QPalette::Disabled));
+-    //阴影半径
+-    if(ThemeController::themeMode() == LightTheme)
++    // 阴影颜色
++    d->m_pShadow_effect->setColor(ThemeController::getPaletteColorFromDT("text", QPalette::Disabled));
++    // 阴影半径
++    if (ThemeController::themeMode() == LightTheme)
+         d->m_pShadow_effect->setBlurRadius(15);
+     else
+         d->m_pShadow_effect->setBlurRadius(0);
+     this->setGraphicsEffect(d->m_pShadow_effect);
+ 
+     d->m_pIconLabel = new QLabel(this);
+-    QVBoxLayout*vLayout = new QVBoxLayout;
++    QVBoxLayout *vLayout = new QVBoxLayout;
+     vLayout->addWidget(d->m_pIconLabel);
+-//    vLayout->addStretch();
++    //    vLayout->addStretch();
+     d->m_pLayout->addLayout(vLayout);
+     d->m_pLayout->addWidget(d->m_pContentLabel);
+     d->m_pLayout->setAlignment(Qt::AlignVCenter);
+@@ -105,27 +105,27 @@ KBallonTip::KBallonTip(QWidget *parent)
+ 
+     d->adjustStyle();
+     d->m_pVLayout->setSizeConstraint(QLayout::SizeConstraint::SetFixedSize);
+-    if(ThemeController::systemFontSize() > 11)
+-        vLayout->setContentsMargins(0,(ThemeController::systemFontSize()-11),0,0);
++    if (ThemeController::systemFontSize() > 11)
++        vLayout->setContentsMargins(0, (ThemeController::systemFontSize() - 11), 0, 0);
+     else
+-        vLayout->setContentsMargins(0,0,0,0);
+-    connect(d->m_gsetting,&QGSettings::changed,this,[=](){
+-        if(ThemeController::themeMode() == LightTheme)
++        vLayout->setContentsMargins(0, 0, 0, 0);
++    connect(d->m_gsetting, &QGSettings::changed, this, [=]() {
++        if (ThemeController::themeMode() == LightTheme)
+             d->m_pShadow_effect->setBlurRadius(15);
+         else
+             d->m_pShadow_effect->setBlurRadius(0);
+     });
+-    connect(d->m_gsetting,&QGSettings::changed,this,[=](const QString &key){
+-        if(key.contains("systemFontSize"))
+-            if(ThemeController::systemFontSize() > 11)
+-                vLayout->setContentsMargins(0,(ThemeController::systemFontSize()-11),0,0);
++    connect(d->m_gsetting, &QGSettings::changed, this, [=](const QString &key) {
++        if (key.contains("systemFontSize"))
++            if (ThemeController::systemFontSize() > 11)
++                vLayout->setContentsMargins(0, (ThemeController::systemFontSize() - 11), 0, 0);
+             else
+-                vLayout->setContentsMargins(0,0,0,0);
++                vLayout->setContentsMargins(0, 0, 0, 0);
+     });
+ }
+ 
+ KBallonTip::KBallonTip(const QString &content, const TipType &type, QWidget *parent)
+-    :KBallonTip(parent)
++    : KBallonTip(parent)
+ {
+     Q_D(KBallonTip);
+     d->m_pContentLabel->setText(content);
+@@ -139,14 +139,13 @@ void KBallonTip::showInfo()
+     Q_D(KBallonTip);
+ 
+     show();
+-    QTimer* timer = new QTimer(this);
++    QTimer *timer = new QTimer(this);
+     timer->start(d->m_time);
+     timer->setSingleShot(true);
+     connect(timer, SIGNAL(timeout()), this, SLOT(onTimeupDestroy()));
+-
+ }
+ 
+-void KBallonTip::setTipType(const TipType& type)
++void KBallonTip::setTipType(const TipType &type)
+ {
+     Q_D(KBallonTip);
+     d->m_type = type;
+@@ -174,7 +173,7 @@ QString KBallonTip::text()
+ void KBallonTip::setContentsMargins(int left, int top, int right, int bottom)
+ {
+     Q_D(KBallonTip);
+-    d->m_pLayout->setContentsMargins(left,top,right,bottom);
++    d->m_pLayout->setContentsMargins(left, top, right, bottom);
+     repaint();
+ }
+ 
+@@ -188,7 +187,7 @@ void KBallonTip::setContentsMargins(const QMargins &margins)
+ void KBallonTip::setTipTime(int my_time)
+ {
+     Q_D(KBallonTip);
+-    d->m_time=my_time;
++    d->m_time = my_time;
+ }
+ 
+ QHBoxLayout *KBallonTip::hBoxLayout()
+@@ -200,7 +199,7 @@ QHBoxLayout *KBallonTip::hBoxLayout()
+ void KBallonTip::setVariableIcon(QIcon icon)
+ {
+     Q_D(KBallonTip);
+-    d->m_variablePixmap = icon.pixmap(22,22);
++    d->m_variablePixmap = icon.pixmap(22, 22);
+     update();
+ }
+ 
+@@ -221,26 +220,24 @@ void KBallonTip::paintEvent(QPaintEvent *event)
+     // bug 173714 173165
+     adjustSize();
+ 
+-    d->m_pShadow_effect->setColor(ThemeController::getPaletteColorFromDT("text",QPalette::Disabled));
++    d->m_pShadow_effect->setColor(ThemeController::getPaletteColorFromDT("text", QPalette::Disabled));
+     QPainter painter(this);
+-    painter.setRenderHint(QPainter::Antialiasing);  // 反锯齿;
++    painter.setRenderHint(QPainter::Antialiasing); // 反锯齿;
+     QColor mixColor = ThemeController::getPaletteColorFromDT("mid");
+-    auto color = ThemeController::mixColor(mixColor,QColor(100,100,100),0.5);
++    auto color = ThemeController::mixColor(mixColor, QColor(100, 100, 100), 0.5);
+     QPen pen;
+     pen.setColor(color);
+     pen.setWidthF(0.2);
+     painter.setPen(pen);
+     painter.setBrush(ThemeController::getPaletteColorFromDT("window"));
+     QRect rect = this->rect();
+-    if(ThemeController::widgetTheme() == ClassicTheme)
+-    {
++    if (ThemeController::widgetTheme() == ClassicTheme) {
+         QPainterPath path;
+-        path.addRect(rect.adjusted(8,8,-8,-8));
++        path.addRect(rect.adjusted(8, 8, -8, -8));
+         QRegion region(path.toFillPolygon().toPolygon());
+-        KWindowEffects::enableBlurBehind(this->winId(),true,region);
++        KWindowEffects::enableBlurBehind(this->winId(), true, region);
+         this->setMask(region);
+-        switch (tipType())
+-        {
++        switch (tipType()) {
+         case TipType::Nothing:
+             painter.setBrush(ThemeController::getPaletteColorFromDT("window"));
+             break;
+@@ -263,68 +260,66 @@ void KBallonTip::paintEvent(QPaintEvent *event)
+         default:
+             break;
+         }
+-        if(painter.pen().width() == 1)
+-            painter.translate(0.5,0.5);
+-        painter.drawRect(rect.adjusted(8,8,-8,-8));
+-    }
+-    else
+-    {
+-        if(!mask().isNull())
++        if (painter.pen().width() == 1)
++            painter.translate(0.5, 0.5);
++        painter.drawRect(rect.adjusted(8, 8, -8, -8));
++    } else {
++        if (!mask().isNull())
+             clearMask();
+         painter.setBrush(ThemeController::getPaletteColorFromDT("window"));
+         int radius = ThemeController::getRadiusFromDT("kradius-normal");
+-        if(radius == -1)
++        if (radius == -1)
+             radius = 6;
+-        painter.drawRoundedRect(rect.adjusted(8,8,-8,-8), radius, radius);
++        painter.drawRoundedRect(rect.adjusted(8, 8, -8, -8), radius, radius);
+     }
+-    if(ThemeController::isPixmapPureColor(d->m_variablePixmap))
+-    {
+-        if(ThemeController::themeMode() == LightTheme)
++    if (ThemeController::isPixmapPureColor(d->m_variablePixmap)) {
++        if (ThemeController::themeMode() == LightTheme)
+             d->m_pixmap = d->m_variablePixmap;
+         else
+-            d->m_pixmap = ThemeController::drawColoredPixmap(d->m_variablePixmap,Qt::white);
++            d->m_pixmap = ThemeController::drawColoredPixmap(d->m_variablePixmap, Qt::white);
+     }
+     d->adjustStyle();
+ }
+ 
+ KBallonTipPrivate::KBallonTipPrivate(KBallonTip *parent)
+-    :q_ptr(parent)
++    : q_ptr(parent)
+ {
+     Q_Q(KBallonTip);
+     m_time = 1000;
+     setParent(parent);
+-    connect(m_gsetting,&QGSettings::changed,this,[=](){changeTheme();});
++    connect(m_gsetting, &QGSettings::changed, this, [=]() {
++        changeTheme();
++    });
+ }
+ 
+ void KBallonTipPrivate::adjustStyle()
+ {
+     Q_Q(KBallonTip);
+-    switch (m_type)
+-    {
++    switch (m_type) {
+     case TipType::Nothing:
+         m_icon = QIcon();
+-        m_pIconLabel->setPixmap(m_icon.pixmap(22,22));
++        m_pIconLabel->setPixmap(m_icon.pixmap(22, 22));
+         m_pIconLabel->hide();
+         break;
+     case TipType::Normal:
+-//        m_icon = QIcon::fromTheme("ukui-dialog-success");
+-         m_icon = QIcon::fromTheme("ukui-dialog-success", QIcon::fromTheme("emblem-default"));
+-         m_pIconLabel->setPixmap(m_icon.pixmap(22,22));
++        //        m_icon = QIcon::fromTheme("ukui-dialog-success");
++        m_icon = QIcon::fromTheme("ukui-dialog-success", QIcon::fromTheme("emblem-default"));
++        m_pIconLabel->setPixmap(m_icon.pixmap(22, 22));
+         m_pIconLabel->show();
+         break;
+     case TipType::Info:;
+         m_icon = QIcon::fromTheme("dialog-info");
+-        m_pIconLabel->setPixmap(m_icon.pixmap(22,22));
++        m_pIconLabel->setPixmap(m_icon.pixmap(22, 22));
+         m_pIconLabel->show();
+         break;
+     case TipType::Warning:
+         m_icon = QIcon::fromTheme("dialog-warning");
+-        m_pIconLabel->setPixmap(m_icon.pixmap(22,22));
++        m_pIconLabel->setPixmap(m_icon.pixmap(22, 22));
+         m_pIconLabel->show();
+         break;
+     case TipType::Error:
+         m_icon = QIcon::fromTheme("dialog-error");
+-        m_pIconLabel->setPixmap(m_icon.pixmap(22,22));
++        m_pIconLabel->setPixmap(m_icon.pixmap(22, 22));
+         m_pIconLabel->show();
+         break;
+     case TipType::Variable:
+@@ -334,32 +329,27 @@ void KBallonTipPrivate::adjustStyle()
+     default:
+         break;
+     }
+-    m_pIconLabel->setFixedSize(22,22);
+-//    m_pContentLabel->setAlignment(Qt::AlignLeft);
++    m_pIconLabel->setFixedSize(22, 22);
++    //    m_pContentLabel->setAlignment(Qt::AlignLeft);
+ }
+ 
+ void KBallonTipPrivate::changeTheme()
+ {
+     Q_Q(KBallonTip);
+-    if(ThemeController::widgetTheme() == ClassicTheme)
+-    {
++    if (ThemeController::widgetTheme() == ClassicTheme) {
+         m_pShadow_effect->setOffset(0, 0);
+-        //阴影半径
++        // 阴影半径
+         m_pShadow_effect->setColor(Qt::red);
+         m_pShadow_effect->setBlurRadius(0);
+         q->setGraphicsEffect(m_pShadow_effect);
+-    }
+-    else
+-    {
++    } else {
+         m_pShadow_effect->setOffset(0, 0);
+-        //阴影颜色
+-        m_pShadow_effect->setColor(ThemeController::getPaletteColorFromDT("text",QPalette::Disabled));
+-        //阴影半径
+-        if(ThemeController::themeMode() == LightTheme)
+-        {
++        // 阴影颜色
++        m_pShadow_effect->setColor(ThemeController::getPaletteColorFromDT("text", QPalette::Disabled));
++        // 阴影半径
++        if (ThemeController::themeMode() == LightTheme) {
+             m_pShadow_effect->setBlurRadius(15);
+-        }
+-        else
++        } else
+             m_pShadow_effect->setBlurRadius(0);
+         q->setGraphicsEffect(m_pShadow_effect);
+     }
+diff --git a/kysdk-qtwidgets/src/kballontip.h b/kysdk-qtwidgets/src/kballontip.h
+index db73a61..6518011 100644
+--- a/kysdk-qtwidgets/src/kballontip.h
++++ b/kysdk-qtwidgets/src/kballontip.h
+@@ -23,21 +23,20 @@
+ #ifndef KBALLONTIP_H
+ #define KBALLONTIP_H
+ 
+-#include <QWidget>
+-#include <QHBoxLayout>
+ #include "gui_g.h"
++#include <QHBoxLayout>
++#include <QWidget>
+ 
+-namespace  kdk
++namespace kdk
+ {
+ /** @defgroup MessageAlertModule
+-  * @{
+-  */
++ * @{
++ */
+ 
+ /**
+  * @brief 支持五种样式
+  */
+-enum TipType
+-{
++enum TipType {
+     Nothing,
+     Normal,
+     Info,
+@@ -56,7 +55,7 @@ class GUI_EXPORT KBallonTip : public QWidget
+ 
+ public:
+     explicit KBallonTip(QWidget *parent = nullptr);
+-    explicit KBallonTip(const QString& content,const TipType& type,QWidget *parent = nullptr);
++    explicit KBallonTip(const QString &content, const TipType &type, QWidget *parent = nullptr);
+ 
+     /**
+      * @brief 显示时间完毕后消失
+@@ -67,7 +66,7 @@ public:
+      * @brief 设置类型
+      * @param type
+      */
+-    void setTipType(const TipType& type);
++    void setTipType(const TipType &type);
+ 
+     /**
+      * @brief 返回类型
+@@ -79,7 +78,7 @@ public:
+      * @brief 设置文本内容
+      * @param text
+      */
+-    void setText(const QString& text);
++    void setText(const QString &text);
+ 
+     /**
+      * @brief text
+@@ -103,9 +102,9 @@ public:
+     void setContentsMargins(const QMargins &margins);
+ 
+     /**
+-      * @brief 设置持续时间
+-      * @since 1.2
+-      */
++     * @brief 设置持续时间
++     * @since 1.2
++     */
+     void setTipTime(int my_time);
+ 
+     /**
+@@ -133,16 +132,16 @@ private Q_SLOTS:
+     void onTimeupDestroy();
+ 
+ protected:
+-    void paintEvent(QPaintEvent* event) override;
++    void paintEvent(QPaintEvent *event) override;
+ 
+ private:
+     Q_DECLARE_PRIVATE(KBallonTip)
+-    KBallonTipPrivate* const d_ptr;
++    KBallonTipPrivate *const d_ptr;
+ };
+ }
+ /**
+-  * @example testballontip/widget.h
+-  * @example testballontip/widget.cpp
+-  * @}
+-  */
++ * @example testballontip/widget.h
++ * @example testballontip/widget.cpp
++ * @}
++ */
+ #endif // KBALLONTIP_H
+diff --git a/kysdk-qtwidgets/src/kborderbutton.cpp b/kysdk-qtwidgets/src/kborderbutton.cpp
+index b0f088e..796b492 100644
+--- a/kysdk-qtwidgets/src/kborderbutton.cpp
++++ b/kysdk-qtwidgets/src/kborderbutton.cpp
+@@ -21,34 +21,36 @@
+  */
+ 
+ #include "kborderbutton.h"
++#include "parmscontroller.h"
+ #include "themeController.h"
+-#include <QStyleOptionButton>
+-#include <QPainter>
+ #include <QDebug>
+ #include <QIcon>
+-#include "parmscontroller.h"
++#include <QPainter>
++#include <QStyleOptionButton>
+ 
+ namespace kdk
+ {
+-class KBorderButtonPrivate:public QObject,public ThemeController
++class KBorderButtonPrivate : public QObject, public ThemeController
+ {
+     Q_DECLARE_PUBLIC(KBorderButton)
+     Q_OBJECT
+ public:
+-    KBorderButtonPrivate(KBorderButton*parent);
++    KBorderButtonPrivate(KBorderButton *parent);
++
+ protected:
+     void changeTheme();
++
+ private:
+-    KBorderButton* q_ptr;
++    KBorderButton *q_ptr;
+     bool m_hoverd;
+     int m_radius;
+ };
+-KBorderButton::KBorderButton(QWidget* parent)
+-    :QPushButton(parent)
+-    ,d_ptr(new KBorderButtonPrivate(this))
++KBorderButton::KBorderButton(QWidget *parent)
++    : QPushButton(parent)
++    , d_ptr(new KBorderButtonPrivate(this))
+ {
+     Q_D(KBorderButton);
+-    connect(Parmscontroller::self(),&Parmscontroller::modeChanged,this,[=](){
++    connect(Parmscontroller::self(), &Parmscontroller::modeChanged, this, [=]() {
+         updateGeometry();
+     });
+ }
+@@ -66,7 +68,7 @@ QSize KBorderButton::sizeHint() const
+ bool KBorderButton::eventFilter(QObject *watched, QEvent *event)
+ {
+     Q_D(KBorderButton);
+-    return QPushButton::eventFilter(watched,event);
++    return QPushButton::eventFilter(watched, event);
+ }
+ 
+ void KBorderButton::paintEvent(QPaintEvent *event)
+@@ -77,130 +79,99 @@ void KBorderButton::paintEvent(QPaintEvent *event)
+     QPainter p(this);
+     QColor borderColor;
+     QColor fontColor;
+-    int borderWidth = 1 ;
++    int borderWidth = 1;
+     QColor mix = ThemeController::getPaletteColorFromDT("brighttext");
+     QColor highlight = ThemeController::getPaletteColorFromDT("highlight");
+-    if(!option.state.testFlag(QStyle::State_Enabled))
+-    {
+-        borderColor = ThemeController::getPaletteColorFromDT("button",QPalette::Disabled);
+-        fontColor = ThemeController::getPaletteColorFromDT("highlightedtext",QPalette::Disabled);
+-    }
+-    else if(option.state.testFlag(QStyle::State_MouseOver))
+-    {
++    if (!option.state.testFlag(QStyle::State_Enabled)) {
++        borderColor = ThemeController::getPaletteColorFromDT("button", QPalette::Disabled);
++        fontColor = ThemeController::getPaletteColorFromDT("highlightedtext", QPalette::Disabled);
++    } else if (option.state.testFlag(QStyle::State_MouseOver)) {
+ 
+-        if(option.state.testFlag(QStyle::State_Sunken))
+-        {
+-            if(ThemeController::widgetTheme() == ClassicTheme)
+-            {
+-                if(ThemeController::themeMode() == LightTheme)
+-                {
+-                    borderColor =ThemeController::highlightClick(false,palette());
+-                    fontColor =ThemeController::highlightClick(false,palette());
++        if (option.state.testFlag(QStyle::State_Sunken)) {
++            if (ThemeController::widgetTheme() == ClassicTheme) {
++                if (ThemeController::themeMode() == LightTheme) {
++                    borderColor = ThemeController::highlightClick(false, palette());
++                    fontColor = ThemeController::highlightClick(false, palette());
+ 
+-                    borderColor = ThemeController::adjustH(borderColor,-2);
+-                    borderColor = ThemeController::adjustS(borderColor,-27);
+-                    borderColor = ThemeController::adjustL(borderColor,-19);
+-                    fontColor = ThemeController::adjustH(fontColor,4);
+-                    fontColor = ThemeController::adjustS(fontColor,-30);
+-                    fontColor = ThemeController::adjustL(fontColor,-40);
+-                }
+-                else
+-                {
+-                    borderColor =ThemeController::highlightClick(true,palette());
+-                    fontColor =ThemeController::highlightClick(true,palette());
++                    borderColor = ThemeController::adjustH(borderColor, -2);
++                    borderColor = ThemeController::adjustS(borderColor, -27);
++                    borderColor = ThemeController::adjustL(borderColor, -19);
++                    fontColor = ThemeController::adjustH(fontColor, 4);
++                    fontColor = ThemeController::adjustS(fontColor, -30);
++                    fontColor = ThemeController::adjustL(fontColor, -40);
++                } else {
++                    borderColor = ThemeController::highlightClick(true, palette());
++                    fontColor = ThemeController::highlightClick(true, palette());
+ 
+-                    borderColor = ThemeController::adjustH(borderColor,5);
+-                    borderColor = ThemeController::adjustS(borderColor,0);
+-                    borderColor = ThemeController::adjustL(borderColor,26);
+-                    fontColor = ThemeController::adjustH(fontColor,5);
+-                    fontColor = ThemeController::adjustS(fontColor,0);
+-                    fontColor = ThemeController::adjustL(fontColor,26);
++                    borderColor = ThemeController::adjustH(borderColor, 5);
++                    borderColor = ThemeController::adjustS(borderColor, 0);
++                    borderColor = ThemeController::adjustL(borderColor, 26);
++                    fontColor = ThemeController::adjustH(fontColor, 5);
++                    fontColor = ThemeController::adjustS(fontColor, 0);
++                    fontColor = ThemeController::adjustL(fontColor, 26);
+                 }
++            } else {
++                borderColor = ThemeController::mixColor(highlight, mix, 0.2);
++                fontColor = ThemeController::mixColor(highlight, mix, 0.2);
+             }
+-            else
+-            {
+-                borderColor = ThemeController::mixColor(highlight,mix,0.2);
+-                fontColor = ThemeController::mixColor(highlight,mix,0.2);
+-            }
+-        }
+-        else
+-        {
+-            if(ThemeController::widgetTheme() == ClassicTheme)
+-            {
+-                if(ThemeController::themeMode() == LightTheme)
+-                {
+-                    borderColor =ThemeController::highlightHover(false,palette());
+-                    fontColor =ThemeController::highlightHover(false,palette());
++        } else {
++            if (ThemeController::widgetTheme() == ClassicTheme) {
++                if (ThemeController::themeMode() == LightTheme) {
++                    borderColor = ThemeController::highlightHover(false, palette());
++                    fontColor = ThemeController::highlightHover(false, palette());
+ 
+-                    borderColor = ThemeController::adjustH(borderColor,-2);
+-                    borderColor = ThemeController::adjustS(borderColor,-24);
+-                    borderColor = ThemeController::adjustL(borderColor,-24);
+-                    fontColor = ThemeController::adjustH(fontColor,-8);
+-                    fontColor = ThemeController::adjustS(fontColor,-1);
+-                    fontColor = ThemeController::adjustL(fontColor,-34);
+-                }
+-                else
+-                {
+-                    borderColor =ThemeController::highlightHover(true,palette());
+-                    fontColor =ThemeController::highlightHover(true,palette());
++                    borderColor = ThemeController::adjustH(borderColor, -2);
++                    borderColor = ThemeController::adjustS(borderColor, -24);
++                    borderColor = ThemeController::adjustL(borderColor, -24);
++                    fontColor = ThemeController::adjustH(fontColor, -8);
++                    fontColor = ThemeController::adjustS(fontColor, -1);
++                    fontColor = ThemeController::adjustL(fontColor, -34);
++                } else {
++                    borderColor = ThemeController::highlightHover(true, palette());
++                    fontColor = ThemeController::highlightHover(true, palette());
+ 
+-                    borderColor = ThemeController::adjustH(borderColor,-6);
+-                    borderColor = ThemeController::adjustS(borderColor,27);
+-                    borderColor = ThemeController::adjustL(borderColor,43);
+-                    fontColor = ThemeController::adjustH(fontColor,-6);
+-                    fontColor = ThemeController::adjustS(fontColor,27);
+-                    fontColor = ThemeController::adjustL(fontColor,43);
++                    borderColor = ThemeController::adjustH(borderColor, -6);
++                    borderColor = ThemeController::adjustS(borderColor, 27);
++                    borderColor = ThemeController::adjustL(borderColor, 43);
++                    fontColor = ThemeController::adjustH(fontColor, -6);
++                    fontColor = ThemeController::adjustS(fontColor, 27);
++                    fontColor = ThemeController::adjustL(fontColor, 43);
+                 }
+-            }
+-            else
+-            {
+-                borderColor = ThemeController::mixColor(highlight,mix,0.05);
+-                fontColor = ThemeController::mixColor(highlight,mix,0.05);
++            } else {
++                borderColor = ThemeController::mixColor(highlight, mix, 0.05);
++                fontColor = ThemeController::mixColor(highlight, mix, 0.05);
+             }
+         }
+-    }
+-    else if(option.state.testFlag(QStyle::State_HasFocus))
+-    {
+-        if(ThemeController::widgetTheme() == ClassicTheme)
+-        {
+-            if(ThemeController::themeMode() == LightTheme)
+-            {
+-                borderColor = ThemeController::highlightClick(false,palette());
+-                borderColor = ThemeController::adjustH(borderColor,-2);
+-                borderColor = ThemeController::adjustS(borderColor,-24);
+-                borderColor = ThemeController::adjustL(borderColor,-24);
++    } else if (option.state.testFlag(QStyle::State_HasFocus)) {
++        if (ThemeController::widgetTheme() == ClassicTheme) {
++            if (ThemeController::themeMode() == LightTheme) {
++                borderColor = ThemeController::highlightClick(false, palette());
++                borderColor = ThemeController::adjustH(borderColor, -2);
++                borderColor = ThemeController::adjustS(borderColor, -24);
++                borderColor = ThemeController::adjustL(borderColor, -24);
+ 
+                 fontColor = ThemeController::getPaletteColorFromDT("buttontext");
+-            }
+-            else
+-            {
+-                borderColor = ThemeController::highlightClick(true,palette());
+-                borderColor = ThemeController::adjustH(borderColor,5);
+-                borderColor = ThemeController::adjustS(borderColor,0);
+-                borderColor = ThemeController::adjustL(borderColor,26);
++            } else {
++                borderColor = ThemeController::highlightClick(true, palette());
++                borderColor = ThemeController::adjustH(borderColor, 5);
++                borderColor = ThemeController::adjustS(borderColor, 0);
++                borderColor = ThemeController::adjustL(borderColor, 26);
+ 
+                 fontColor = ThemeController::getPaletteColorFromDT("buttontext");
+             }
+-        }
+-        else
+-        {
++        } else {
+             borderWidth = 2;
+             fontColor = ThemeController::getPaletteColorFromDT("buttontext");
+-            borderColor = ThemeController::mixColor(highlight,mix,0.2);
++            borderColor = ThemeController::mixColor(highlight, mix, 0.2);
+         }
+-    }
+-    else
+-    {
+-        if(ThemeController::widgetTheme() == ClassicTheme)
+-        {
++    } else {
++        if (ThemeController::widgetTheme() == ClassicTheme) {
+             fontColor = ThemeController::getPaletteColorFromDT("buttontext");
+-            if(ThemeController::themeMode() == LightTheme )
++            if (ThemeController::themeMode() == LightTheme)
+                 borderColor = ThemeController::lanhuHSLToQtHsl(0, 0, 73);
+             else
+                 borderColor = ThemeController::lanhuHSLToQtHsl(0, 0, 25);
+-        }
+-        else
+-        {
++        } else {
+             fontColor = ThemeController::getPaletteColorFromDT("buttontext");
+             borderColor = ThemeController::getPaletteColorFromDT("button");
+         }
+@@ -218,14 +189,12 @@ void KBorderButton::paintEvent(QPaintEvent *event)
+     pen.setWidth(borderWidth);
+     pen.setColor(borderColor);
+     p.setPen(pen);
+-    if(ThemeController::widgetTheme() == ClassicTheme)
+-    {
+-        if(p.pen().width() == 1)
+-            p.translate(0.5,0.5);
+-        p.drawRoundedRect(option.rect.adjusted(1,1,-1,-1),0,0);
+-    }
+-    else
+-        p.drawRoundedRect(option.rect.adjusted(1,1,-1,-1),d->m_radius,d->m_radius);
++    if (ThemeController::widgetTheme() == ClassicTheme) {
++        if (p.pen().width() == 1)
++            p.translate(0.5, 0.5);
++        p.drawRoundedRect(option.rect.adjusted(1, 1, -1, -1), 0, 0);
++    } else
++        p.drawRoundedRect(option.rect.adjusted(1, 1, -1, -1), d->m_radius, d->m_radius);
+     p.restore();
+     pen.setWidth(1);
+     pen.setColor(fontColor);
+@@ -234,10 +203,10 @@ void KBorderButton::paintEvent(QPaintEvent *event)
+     QRect ir = option.rect;
+     uint tf = Qt::AlignVCenter;
+     if (!option.icon.isNull()) {
+-        //Center both icon and text
++        // Center both icon and text
+ 
+         QIcon::Mode mode = option.state & QStyle::State_Enabled ? QIcon::Normal
+-                                                         : QIcon::Disabled;
++                                                                : QIcon::Disabled;
+         if (mode == QIcon::Normal && option.state & QStyle::State_HasFocus)
+             mode = QIcon::Active;
+         QIcon::State state = QIcon::Off;
+@@ -245,7 +214,7 @@ void KBorderButton::paintEvent(QPaintEvent *event)
+             state = QIcon::On;
+ 
+         QPixmap pixmap = option.icon.pixmap(option.iconSize, mode, state);
+-        pixmap = ThemeController::drawColoredPixmap(this->icon().pixmap(iconSize()),fontColor);
++        pixmap = ThemeController::drawColoredPixmap(this->icon().pixmap(iconSize()), fontColor);
+         int w = pixmap.width() / pixmap.devicePixelRatio();
+         int h = pixmap.height() / pixmap.devicePixelRatio();
+ 
+@@ -270,20 +239,20 @@ void KBorderButton::paintEvent(QPaintEvent *event)
+         // left-align text if there is
+         if (!option.text.isEmpty())
+             tf |= Qt::AlignLeft;
+-    }
+-    else
+-    {
++    } else {
+         tf |= Qt::AlignHCenter;
+     }
+-    p.drawText(ir,tf,option.text);
++    p.drawText(ir, tf, option.text);
+ }
+ 
+-KBorderButton::KBorderButton(const QString &text, QWidget *parent ):KBorderButton(parent)
++KBorderButton::KBorderButton(const QString &text, QWidget *parent)
++    : KBorderButton(parent)
+ {
+     setText(text);
+ }
+ 
+-KBorderButton::KBorderButton(const QIcon &icon, const QString &text, QWidget *parent):KBorderButton(parent)
++KBorderButton::KBorderButton(const QIcon &icon, const QString &text, QWidget *parent)
++    : KBorderButton(parent)
+ {
+     setIcon(icon);
+     setText(text);
+@@ -295,12 +264,13 @@ void KBorderButton::setIcon(const QIcon &icon)
+     QPushButton::setIcon(icon);
+ }
+ 
+-KBorderButtonPrivate::KBorderButtonPrivate(KBorderButton *parent):q_ptr(parent)
+-  ,m_hoverd(false)
++KBorderButtonPrivate::KBorderButtonPrivate(KBorderButton *parent)
++    : q_ptr(parent)
++    , m_hoverd(false)
+ {
+     setParent(parent);
+     m_radius = ThemeController::getRadiusFromDT("kradius-normal");
+-    if(m_radius == -1)
++    if (m_radius == -1)
+         m_radius = 6;
+ }
+ 
+diff --git a/kysdk-qtwidgets/src/kborderbutton.h b/kysdk-qtwidgets/src/kborderbutton.h
+index 878b379..7bcf5e7 100644
+--- a/kysdk-qtwidgets/src/kborderbutton.h
++++ b/kysdk-qtwidgets/src/kborderbutton.h
+@@ -24,28 +24,28 @@
+ #define KBORDERBUTTON_H
+ 
+ #include "gui_g.h"
+-#include <QWidget>
+-#include <QPushButton>
+-#include <QIcon>
+ #include <QEvent>
++#include <QIcon>
++#include <QPushButton>
++#include <QWidget>
+ 
+ namespace kdk
+ {
+ 
+ /** @defgroup PushbuttonModule
+-  * @{
+-  */
++ * @{
++ */
+ 
+ class KBorderButtonPrivate;
+ 
+ /**
+  * @brief 带边框的按钮
+  */
+-class GUI_EXPORT KBorderButton:public QPushButton
++class GUI_EXPORT KBorderButton : public QPushButton
+ {
+     Q_OBJECT
+ public:
+-    KBorderButton(QWidget* parent = nullptr);
++    KBorderButton(QWidget *parent = nullptr);
+     KBorderButton(const QString &text, QWidget *parent = nullptr);
+     KBorderButton(const QIcon &icon, const QString &text, QWidget *parent = nullptr);
+     KBorderButton(const QIcon &icon, QWidget *parent = nullptr);
+@@ -64,13 +64,12 @@ protected:
+ 
+ private:
+     Q_DECLARE_PRIVATE(KBorderButton)
+-    KBorderButtonPrivate * const d_ptr;
++    KBorderButtonPrivate *const d_ptr;
+ };
+ }
+ /**
+-  * @example testPushbutton/widget.h
+-  * @example testPushbutton/widget.cpp
+-  * @}
+-  */
++ * @example testPushbutton/widget.h
++ * @example testPushbutton/widget.cpp
++ * @}
++ */
+ #endif
+-
+diff --git a/kysdk-qtwidgets/src/kborderlessbutton.cpp b/kysdk-qtwidgets/src/kborderlessbutton.cpp
+index e2056a6..558c1ae 100644
+--- a/kysdk-qtwidgets/src/kborderlessbutton.cpp
++++ b/kysdk-qtwidgets/src/kborderlessbutton.cpp
+@@ -22,50 +22,55 @@
+ 
+ #include "kborderlessbutton.h"
+ #include "themeController.h"
+-#include <QStyleOptionButton>
+ #include <QPainter>
++#include <QStyleOptionButton>
+ 
+ namespace kdk
+ {
+-class KBorderlessButtonPrivate:public QObject,public ThemeController
++class KBorderlessButtonPrivate : public QObject, public ThemeController
+ {
+     Q_DECLARE_PUBLIC(KBorderlessButton)
+     Q_OBJECT
+ public:
+-    KBorderlessButtonPrivate(KBorderlessButton*parent):
+-    q_ptr(parent),m_hoverd(false)
++    KBorderlessButtonPrivate(KBorderlessButton *parent)
++        : q_ptr(parent)
++        , m_hoverd(false)
+     {
+         setParent(parent);
+     }
+ 
+ protected:
+     void changeTheme();
++
+ private:
+     KBorderlessButton *q_ptr;
+     bool m_hoverd;
+ };
+ 
+-KBorderlessButton::KBorderlessButton(QWidget* parent):
+-    QPushButton(parent)
+-    ,d_ptr(new KBorderlessButtonPrivate(this))
++KBorderlessButton::KBorderlessButton(QWidget *parent)
++    : QPushButton(parent)
++    , d_ptr(new KBorderlessButtonPrivate(this))
+ {
+     Q_D(KBorderlessButton);
+-    setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed);
++    setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
+     setFocusPolicy(Qt::NoFocus);
+ }
+ 
+-KBorderlessButton::KBorderlessButton(const QString &text, QWidget *parent):KBorderlessButton(parent)
++KBorderlessButton::KBorderlessButton(const QString &text, QWidget *parent)
++    : KBorderlessButton(parent)
+ {
+     setText(text);
+ }
+ 
+-KBorderlessButton::KBorderlessButton(const QIcon &icon, const QString &text, QWidget *parent):KBorderlessButton(parent)
++KBorderlessButton::KBorderlessButton(const QIcon &icon, const QString &text, QWidget *parent)
++    : KBorderlessButton(parent)
+ {
+     setIcon(icon);
+     setText(text);
+ }
+ 
+-KBorderlessButton::KBorderlessButton(const QIcon &icon, QWidget *parent):KBorderlessButton(parent)
++KBorderlessButton::KBorderlessButton(const QIcon &icon, QWidget *parent)
++    : KBorderlessButton(parent)
+ {
+     setIcon(icon);
+ }
+@@ -84,7 +89,7 @@ void KBorderlessButton::setIcon(const QIcon &icon)
+ bool KBorderlessButton::eventFilter(QObject *watched, QEvent *event)
+ {
+     Q_D(KBorderlessButton);
+-    return QPushButton::eventFilter(watched,event);
++    return QPushButton::eventFilter(watched, event);
+ }
+ 
+ void KBorderlessButton::paintEvent(QPaintEvent *event)
+@@ -97,102 +102,73 @@ void KBorderlessButton::paintEvent(QPaintEvent *event)
+     QColor fontColor;
+     QColor highlight = ThemeController::getPaletteColorFromDT("highlight");
+     QColor mix = ThemeController::getPaletteColorFromDT("brighttext");
+-    if(!option.state.testFlag(QStyle::State_Enabled))
+-    {
+-        borderColor = ThemeController::getPaletteColorFromDT("button",QPalette::Disabled);
+-       fontColor = ThemeController::getPaletteColorFromDT("highlightedtext",QPalette::Disabled);
+-    }
+-    else if(ThemeController::themeMode() == ThemeFlag::LightTheme){
++    if (!option.state.testFlag(QStyle::State_Enabled)) {
++        borderColor = ThemeController::getPaletteColorFromDT("button", QPalette::Disabled);
++        fontColor = ThemeController::getPaletteColorFromDT("highlightedtext", QPalette::Disabled);
++    } else if (ThemeController::themeMode() == ThemeFlag::LightTheme) {
+ 
+-        if(option.state.testFlag(QStyle::State_MouseOver))
+-        {
+-            if(option.state.testFlag(QStyle::State_Sunken))
+-            {
+-                if(ThemeController::widgetTheme() == ClassicTheme)
+-                {
+-                    fontColor =ThemeController::highlightClick(false,palette());
++        if (option.state.testFlag(QStyle::State_MouseOver)) {
++            if (option.state.testFlag(QStyle::State_Sunken)) {
++                if (ThemeController::widgetTheme() == ClassicTheme) {
++                    fontColor = ThemeController::highlightClick(false, palette());
+ 
+-                    fontColor = ThemeController::adjustH(fontColor,2);
+-                    fontColor = ThemeController::adjustS(fontColor,-30);
+-                    fontColor = ThemeController::adjustL(fontColor,-40);
++                    fontColor = ThemeController::adjustH(fontColor, 2);
++                    fontColor = ThemeController::adjustS(fontColor, -30);
++                    fontColor = ThemeController::adjustL(fontColor, -40);
++                } else {
++                    borderColor = ThemeController::mixColor(highlight, mix, 0.2);
++                    fontColor = ThemeController::mixColor(highlight, mix, 0.2);
+                 }
+-                else
+-                {
+-                    borderColor = ThemeController::mixColor(highlight,mix,0.2);
+-                    fontColor = ThemeController::mixColor(highlight,mix,0.2);
++            } else {
++                if (ThemeController::widgetTheme() == ClassicTheme) {
++                    fontColor = ThemeController::highlightHover(false, palette());
++                    fontColor = ThemeController::adjustH(fontColor, -3);
++                    fontColor = ThemeController::adjustS(fontColor, -2);
++                    fontColor = ThemeController::adjustL(fontColor, -36);
++                } else {
++                    borderColor = ThemeController::mixColor(highlight, mix, 0.1);
++                    fontColor = ThemeController::mixColor(highlight, mix, 0.1);
+                 }
+             }
+-            else
+-            {
+-                if(ThemeController::widgetTheme() == ClassicTheme)
+-                {
+-                    fontColor =ThemeController::highlightHover(false,palette());
+-                    fontColor = ThemeController::adjustH(fontColor,-3);
+-                    fontColor = ThemeController::adjustS(fontColor,-2);
+-                    fontColor = ThemeController::adjustL(fontColor,-36);
+-                }
+-                else
+-                {
+-                    borderColor = ThemeController::mixColor(highlight,mix,0.1);
+-                    fontColor = ThemeController::mixColor(highlight,mix,0.1);
+-                }
+-            }
+-        }
+-        else
+-        {
+-            if(!this->icon().isNull()){
++        } else {
++            if (!this->icon().isNull()) {
+                 fontColor = ThemeController::getPaletteColorFromDT("buttontext");
+                 borderColor = ThemeController::getPaletteColorFromDT("button");
+-            }
+-            else {
++            } else {
+                 borderColor = highlight;
+                 fontColor = highlight;
+             }
+         }
+-    }
+-    else{
+-        if(option.state.testFlag(QStyle::State_MouseOver))
+-        {
+-            if(option.state.testFlag(QStyle::State_Sunken))
+-            {
+-                if(ThemeController::widgetTheme() == ClassicTheme)
+-                {
+-                    fontColor =ThemeController::highlightClick(true,palette());
++    } else {
++        if (option.state.testFlag(QStyle::State_MouseOver)) {
++            if (option.state.testFlag(QStyle::State_Sunken)) {
++                if (ThemeController::widgetTheme() == ClassicTheme) {
++                    fontColor = ThemeController::highlightClick(true, palette());
+ 
+-                    fontColor = ThemeController::adjustH(fontColor,5);
+-                    fontColor = ThemeController::adjustS(fontColor,-0);
+-                    fontColor = ThemeController::adjustL(fontColor,26);
+-                }
+-                else
+-                {
+-                    borderColor = ThemeController::mixColor(highlight,mix,0.05);
+-                    fontColor = ThemeController::mixColor(highlight,mix,0.05);
++                    fontColor = ThemeController::adjustH(fontColor, 5);
++                    fontColor = ThemeController::adjustS(fontColor, -0);
++                    fontColor = ThemeController::adjustL(fontColor, 26);
++                } else {
++                    borderColor = ThemeController::mixColor(highlight, mix, 0.05);
++                    fontColor = ThemeController::mixColor(highlight, mix, 0.05);
+                 }
+-            }
+-            else
+-            {
+-                if(ThemeController::widgetTheme() == ClassicTheme)
+-                {
+-                    fontColor =ThemeController::highlightHover(true,palette());
++            } else {
++                if (ThemeController::widgetTheme() == ClassicTheme) {
++                    fontColor = ThemeController::highlightHover(true, palette());
+ 
+-                    fontColor = ThemeController::adjustH(fontColor,-6);
+-                    fontColor = ThemeController::adjustS(fontColor,27);
+-                    fontColor = ThemeController::adjustL(fontColor,42);
+-                }
+-                else
+-                {
+-                    borderColor = ThemeController::mixColor(highlight,mix,0.2);
+-                    fontColor = ThemeController::mixColor(highlight,mix,0.2);
++                    fontColor = ThemeController::adjustH(fontColor, -6);
++                    fontColor = ThemeController::adjustS(fontColor, 27);
++                    fontColor = ThemeController::adjustL(fontColor, 42);
++                } else {
++                    borderColor = ThemeController::mixColor(highlight, mix, 0.2);
++                    fontColor = ThemeController::mixColor(highlight, mix, 0.2);
+                 }
+             }
+-        }
+-        else
+-        {
+-            if(!this->icon().isNull()){
++        } else {
++            if (!this->icon().isNull()) {
+                 fontColor = ThemeController::getPaletteColorFromDT("buttontext");
+                 borderColor = ThemeController::getPaletteColorFromDT("button");
+-            }
+-            else {
++            } else {
+                 borderColor = highlight;
+                 fontColor = highlight;
+             }
+@@ -211,12 +187,12 @@ void KBorderlessButton::paintEvent(QPaintEvent *event)
+     p.setPen(pen);
+     QPoint point;
+     // bug 170516 修正1px
+-    QRect ir = option.rect.adjusted(0,0,-1,0);
++    QRect ir = option.rect.adjusted(0, 0, -1, 0);
+     uint tf = Qt::AlignVCenter;
+     if (!option.icon.isNull()) {
+-        //Center both icon and text
++        // Center both icon and text
+         QIcon::Mode mode = option.state & QStyle::State_Enabled ? QIcon::Normal
+-                                                         : QIcon::Disabled;
++                                                                : QIcon::Disabled;
+ 
+         if (mode == QIcon::Normal && option.state & QStyle::State_HasFocus)
+             mode = QIcon::Active;
+@@ -225,7 +201,7 @@ void KBorderlessButton::paintEvent(QPaintEvent *event)
+             state = QIcon::On;
+ 
+         QPixmap pixmap = option.icon.pixmap(option.iconSize, mode, state);
+-        pixmap = ThemeController::drawColoredPixmap(this->icon().pixmap(iconSize()),fontColor);
++        pixmap = ThemeController::drawColoredPixmap(this->icon().pixmap(iconSize()), fontColor);
+         int w = pixmap.width() / pixmap.devicePixelRatio();
+         int h = pixmap.height() / pixmap.devicePixelRatio();
+ 
+@@ -240,7 +216,6 @@ void KBorderlessButton::paintEvent(QPaintEvent *event)
+         if (option.direction == Qt::RightToLeft)
+             point.rx() += w;
+ 
+-
+         if (option.direction == Qt::RightToLeft)
+             ir.translate(-point.x() - 2, 0);
+         else
+@@ -248,49 +223,42 @@ void KBorderlessButton::paintEvent(QPaintEvent *event)
+         // left-align text if there is
+         if (!option.text.isEmpty())
+             tf |= Qt::AlignLeft;
+-        QFontMetrics fm=option.fontMetrics;
++        QFontMetrics fm = option.fontMetrics;
+         int width = option.iconSize.width();
+         int height = option.iconSize.height();
+-        if(fm.width(option.text) > option.rect.width()-width-4)
+-        {
+-            QRect rect(option.rect.x(),(option.rect.height()-height)/2,width,height);
+-            p.drawPixmap(rect,pixmap);
+-            QRect rect1(width+4,0,option.rect.width()-width-4,option.rect.height());
+-            QString elidedText1 = fm.elidedText(option.text,Qt::ElideRight,option.rect.width()-width-4);
+-            p.drawText(rect1,tf,elidedText1);
+-            if(toolTip().isNull())
++        if (fm.width(option.text) > option.rect.width() - width - 4) {
++            QRect rect(option.rect.x(), (option.rect.height() - height) / 2, width, height);
++            p.drawPixmap(rect, pixmap);
++            QRect rect1(width + 4, 0, option.rect.width() - width - 4, option.rect.height());
++            QString elidedText1 = fm.elidedText(option.text, Qt::ElideRight, option.rect.width() - width - 4);
++            p.drawText(rect1, tf, elidedText1);
++            if (toolTip().isNull())
+                 setToolTip(option.text);
+-        }
+-        else
+-        {
++        } else {
+             p.drawPixmap(this->style()->visualPos(option.direction, option.rect, point), pixmap);
+-            p.drawText(ir,tf,option.text);
++            p.drawText(ir, tf, option.text);
+         }
+-    }
+-    else
+-    {
++    } else {
+         tf |= Qt::AlignHCenter;
+-        QFontMetrics fm=option.fontMetrics;
+-        QString elidedText = fm.elidedText(option.text,Qt::ElideRight,option.rect.width());
+-        p.drawText(option.rect,tf,elidedText);
+-        if(fm.width(option.text) > option.rect.width())
++        QFontMetrics fm = option.fontMetrics;
++        QString elidedText = fm.elidedText(option.text, Qt::ElideRight, option.rect.width());
++        p.drawText(option.rect, tf, elidedText);
++        if (fm.width(option.text) > option.rect.width())
+             setToolTip(option.text);
+     }
+-
+ }
+ 
+ QSize KBorderlessButton::sizeHint() const
+ {
+     QFontMetrics fm(this->font());
+     QSize size;
+-    if(this->icon().isNull())
++    if (this->icon().isNull())
+         size = QSize(fm.width(this->text()) + 2, fm.height());
+ 
+-    else
+-    {
+-        int height = std::max(fm.height(),this->iconSize().height());
+-        int width  = fm.width(this->text()) + this->iconSize().width() + 4;
+-        size = QSize(width,height);
++    else {
++        int height = std::max(fm.height(), this->iconSize().height());
++        int width = fm.width(this->text()) + this->iconSize().width() + 4;
++        size = QSize(width, height);
+     }
+     return size;
+ }
+diff --git a/kysdk-qtwidgets/src/kborderlessbutton.h b/kysdk-qtwidgets/src/kborderlessbutton.h
+index 550f02e..21fe9b3 100644
+--- a/kysdk-qtwidgets/src/kborderlessbutton.h
++++ b/kysdk-qtwidgets/src/kborderlessbutton.h
+@@ -24,29 +24,29 @@
+ #define KBORDERLESSBUTTON_H
+ 
+ #include "gui_g.h"
++#include <QEvent>
+ #include <QIcon>
+ #include <QPushButton>
+ #include <QWidget>
+-#include <QEvent>
+ 
+ namespace kdk
+ {
+ 
+ /** @defgroup PushbuttonModule
+-  * @{
+-  */
++ * @{
++ */
+ 
+ class KBorderlessButtonPrivate;
+ 
+ /**
+  * @brief 无边框按钮
+  */
+-class GUI_EXPORT KBorderlessButton:public QPushButton
++class GUI_EXPORT KBorderlessButton : public QPushButton
+ {
+     Q_OBJECT
+ 
+ public:
+-    KBorderlessButton(QWidget* parent = nullptr);
++    KBorderlessButton(QWidget *parent = nullptr);
+     KBorderlessButton(const QString &text, QWidget *parent = nullptr);
+     KBorderlessButton(const QIcon &icon, const QString &text, QWidget *parent = nullptr);
+     KBorderlessButton(const QIcon &icon, QWidget *parent = nullptr);
+@@ -64,15 +64,14 @@ protected:
+     QSize sizeHint() const;
+ 
+ private:
+-    KBorderlessButtonPrivate* const d_ptr;
++    KBorderlessButtonPrivate *const d_ptr;
+     Q_DECLARE_PRIVATE(KBorderlessButton)
+     Q_PRIVATE_SLOT(d_ptr, void changeTheme())
+ };
+ }
+ /**
+-  * @example testPushbutton/widget.h
+-  * @example testPushbutton/widget.cpp
+-  * @}
+-  */
++ * @example testPushbutton/widget.h
++ * @example testPushbutton/widget.cpp
++ * @}
++ */
+ #endif
+-
+diff --git a/kysdk-qtwidgets/src/kbreadcrumb.cpp b/kysdk-qtwidgets/src/kbreadcrumb.cpp
+index c703b6e..8244812 100644
+--- a/kysdk-qtwidgets/src/kbreadcrumb.cpp
++++ b/kysdk-qtwidgets/src/kbreadcrumb.cpp
+@@ -21,35 +21,34 @@
+  */
+ 
+ #include "kbreadcrumb.h"
++#include "themeController.h"
++#include <QApplication>
++#include <QDebug>
++#include <QFontMetrics>
+ #include <QPainter>
+ #include <QStyle>
+ #include <QStyleOptionTab>
+-#include <QFontMetrics>
+-#include <QApplication>
+-#include <QDebug>
+-#include "themeController.h"
+ 
+ namespace kdk
+ {
+-class KBreadCrumbPrivate:public QObject,public ThemeController
++class KBreadCrumbPrivate : public QObject, public ThemeController
+ {
+     Q_OBJECT
+     Q_DECLARE_PUBLIC(KBreadCrumb)
+ 
+ public:
+-    KBreadCrumbPrivate(KBreadCrumb*parent);
++    KBreadCrumbPrivate(KBreadCrumb *parent);
+ 
+ private:
+-    KBreadCrumb* q_ptr;
++    KBreadCrumb *q_ptr;
+     QIcon m_icon;
+     bool m_isFlat;
+ };
+ 
+ KBreadCrumb::KBreadCrumb(QWidget *parent)
+-    :QTabBar(parent),
+-      d_ptr(new KBreadCrumbPrivate(this))
++    : QTabBar(parent)
++    , d_ptr(new KBreadCrumbPrivate(this))
+ {
+-
+ }
+ 
+ void KBreadCrumb::setIcon(const QIcon &icon)
+@@ -85,30 +84,27 @@ QSize KBreadCrumb::tabSizeHint(int index) const
+     QFont font(QApplication::font());
+     QFontMetrics fm(font);
+     int width = fm.width(tabText(index));
+-    size.setWidth(width+40);
+-    if(index == 0 && !d->m_icon.isNull())
+-        size.setWidth(size.width()+50);
++    size.setWidth(width + 40);
++    if (index == 0 && !d->m_icon.isNull())
++        size.setWidth(size.width() + 50);
+     return size;
+ }
+ 
+ void KBreadCrumb::paintEvent(QPaintEvent *event)
+ {
+     Q_D(const KBreadCrumb);
+-//    QColor highLightColor = palette().color(QPalette::Highlight);
++    //    QColor highLightColor = palette().color(QPalette::Highlight);
+     QColor highLightColor = ThemeController::getPaletteColorFromDT("highlight");
+     QColor baseColor;
+     QColor focusColor;
+-    if(ThemeController::themeMode() == ThemeFlag::DarkTheme)
+-    {
+-        if(d->m_isFlat)
++    if (ThemeController::themeMode() == ThemeFlag::DarkTheme) {
++        if (d->m_isFlat)
+             baseColor = "#D9D9D9";
+         else
+             baseColor = "#47474A";
+         focusColor = "#D9D9D9";
+-    }
+-    else
+-    {
+-        if(d->m_isFlat)
++    } else {
++        if (d->m_isFlat)
+             baseColor = "#262626";
+         else
+             baseColor = "#B3B3B3";
+@@ -119,56 +115,47 @@ void KBreadCrumb::paintEvent(QPaintEvent *event)
+     p.setRenderHint(QPainter::HighQualityAntialiasing);
+     p.setRenderHint(QPainter::TextAntialiasing);
+     p.setRenderHint(QPainter::SmoothPixmapTransform);
+-    for(int i = 0 ; i < count(); i++)
+-    {
++    for (int i = 0; i < count(); i++) {
+         QRect rc = tabRect(i);
+         QStyleOptionTab option;
+         initStyleOption(&option, i);
+         p.setPen(Qt::NoPen);
+         p.drawRect(rc);
+-        if(QStyle::State_MouseOver & option.state)
++        if (QStyle::State_MouseOver & option.state)
+             p.setPen(highLightColor);
+-        else if(QStyle::State_Selected & option.state)
++        else if (QStyle::State_Selected & option.state)
+             p.setPen(focusColor);
+         else
+             p.setPen(baseColor);
+         p.setBrush(Qt::NoBrush);
+ 
+-        if(layoutDirection() == Qt::LeftToRight)
+-        {
+-            if(i == 0 && !d->m_icon.isNull())
+-            {
+-                p.drawPixmap(rc.left()+10,(rc.height()-24)/2,24,24,
+-                             d->m_icon.pixmap(24,24));
+-                p.drawText(rc.adjusted(30,0,-24,0),Qt::AlignCenter,tabText(i));
+-            }
+-            else
+-                p.drawText(rc.adjusted(0,0,-24,0),Qt::AlignCenter,tabText(i));
+-            if(i != count()-1)
+-                p.drawPixmap(rc.right()-24,(rc.height()-16)/2,16,16,
+-                             ThemeController::drawColoredPixmap(QIcon::fromTheme("ukui-end-symbolic").pixmap(16,16),baseColor));
+-        }
+-        else
+-        {
+-            if(i == 0 && !d->m_icon.isNull())
+-            {
+-                p.drawPixmap(rc.right()-34,(rc.height()-24)/2,24,24,
+-                             d->m_icon.pixmap(24,24));
+-                p.drawText(rc.adjusted(24,0,-30,0),Qt::AlignCenter,tabText(i));
+-            }
+-            else
+-                p.drawText(rc.adjusted(24,0,0,0),Qt::AlignCenter,tabText(i));
+-            if(i != count()-1)
+-                p.drawPixmap(rc.left()+8,(rc.height()-16)/2,16,16,
+-                             ThemeController::drawColoredPixmap(QIcon::fromTheme("ukui-start-symbolic").pixmap(16,16),baseColor));
++        if (layoutDirection() == Qt::LeftToRight) {
++            if (i == 0 && !d->m_icon.isNull()) {
++                p.drawPixmap(rc.left() + 10, (rc.height() - 24) / 2, 24, 24,
++                             d->m_icon.pixmap(24, 24));
++                p.drawText(rc.adjusted(30, 0, -24, 0), Qt::AlignCenter, tabText(i));
++            } else
++                p.drawText(rc.adjusted(0, 0, -24, 0), Qt::AlignCenter, tabText(i));
++            if (i != count() - 1)
++                p.drawPixmap(rc.right() - 24, (rc.height() - 16) / 2, 16, 16,
++                             ThemeController::drawColoredPixmap(QIcon::fromTheme("ukui-end-symbolic").pixmap(16, 16), baseColor));
++        } else {
++            if (i == 0 && !d->m_icon.isNull()) {
++                p.drawPixmap(rc.right() - 34, (rc.height() - 24) / 2, 24, 24,
++                             d->m_icon.pixmap(24, 24));
++                p.drawText(rc.adjusted(24, 0, -30, 0), Qt::AlignCenter, tabText(i));
++            } else
++                p.drawText(rc.adjusted(24, 0, 0, 0), Qt::AlignCenter, tabText(i));
++            if (i != count() - 1)
++                p.drawPixmap(rc.left() + 8, (rc.height() - 16) / 2, 16, 16,
++                             ThemeController::drawColoredPixmap(QIcon::fromTheme("ukui-start-symbolic").pixmap(16, 16), baseColor));
+         }
+     }
+ }
+ 
+-
+ KBreadCrumbPrivate::KBreadCrumbPrivate(KBreadCrumb *parent)
+-    :q_ptr(parent),
+-      m_isFlat(true)
++    : q_ptr(parent)
++    , m_isFlat(true)
+ {
+ }
+ 
+diff --git a/kysdk-qtwidgets/src/kbreadcrumb.h b/kysdk-qtwidgets/src/kbreadcrumb.h
+index 3ef62c7..cc17e5b 100644
+--- a/kysdk-qtwidgets/src/kbreadcrumb.h
++++ b/kysdk-qtwidgets/src/kbreadcrumb.h
+@@ -35,8 +35,7 @@ class KBreadCrumbPrivate;
+ /**
+  * @brief KBreadCrumbType,包括两种类型。
+  */
+-enum KBreadCrumbType
+-{
++enum KBreadCrumbType {
+     FlatBreadCrumb,
+     CubeBreadCrumb
+ };
+@@ -67,13 +66,13 @@ public:
+      * @brief 返回按钮边框是否凸起
+      * @return
+      */
+-    bool  isFlat() const;
++    bool isFlat() const;
+ 
+     /**
+      * @brief 设置按钮边框是否凸起
+      * @param flat
+      */
+-    void  setFlat(bool flat);
++    void setFlat(bool flat);
+ 
+ protected:
+     QSize tabSizeHint(int index) const;
+@@ -81,9 +80,8 @@ protected:
+ 
+ private:
+     Q_DECLARE_PRIVATE(KBreadCrumb)
+-    KBreadCrumbPrivate*const d_ptr;
++    KBreadCrumbPrivate *const d_ptr;
+ };
+ }
+ 
+-
+ #endif // KBREADCRUMB_H
+diff --git a/kysdk-qtwidgets/src/kbubblewidget.cpp b/kysdk-qtwidgets/src/kbubblewidget.cpp
+index 20d5a4c..ceec152 100644
+--- a/kysdk-qtwidgets/src/kbubblewidget.cpp
++++ b/kysdk-qtwidgets/src/kbubblewidget.cpp
+@@ -21,22 +21,23 @@
+  */
+ 
+ #include "kbubblewidget.h"
++#include "themeController.h"
++#include <KWindowEffects>
+ #include <QHBoxLayout>
+ #include <QPainter>
+-#include <QRegion>
+-#include <KWindowEffects>
+-#include "themeController.h"
+ #include <QPainterPath>
++#include <QRegion>
+ 
+-namespace kdk {
++namespace kdk
++{
+ 
+-class KBubbleWidgetPrivate:public QObject,public ThemeController
++class KBubbleWidgetPrivate : public QObject, public ThemeController
+ {
+     Q_OBJECT
+     Q_DECLARE_PUBLIC(KBubbleWidget)
+ 
+ public:
+-    KBubbleWidgetPrivate(KBubbleWidget*parent);
++    KBubbleWidgetPrivate(KBubbleWidget *parent);
+ 
+ private:
+     KBubbleWidget *q_ptr;
+@@ -54,14 +55,13 @@ private:
+     bool m_enableBlur;
+     bool m_isHighlightBackground;
+     qreal m_opacity;
+-
+ };
+ 
+ void KBubbleWidget::setTailPosition(TailDirection dirType, TailLocation locType)
+ {
+     Q_D(KBubbleWidget);
+     d->m_tailDirection = dirType;
+-    d->m_tailLocation  = locType;
++    d->m_tailLocation = locType;
+     this->update();
+ }
+ 
+@@ -77,7 +77,7 @@ TailLocation KBubbleWidget::tailLocation()
+     return d->m_tailLocation;
+ }
+ 
+-void KBubbleWidget::setBorderRadius(int bottomLeft,int topLeft,int topRight,int bottomRight)
++void KBubbleWidget::setBorderRadius(int bottomLeft, int topLeft, int topRight, int bottomRight)
+ {
+     Q_D(KBubbleWidget);
+     d->m_bottomRightRadius = bottomRight;
+@@ -110,7 +110,7 @@ bool KBubbleWidget::enableBlur()
+ void KBubbleWidget::setOpacity(qreal opacity)
+ {
+     Q_D(KBubbleWidget);
+-    if(opacity < 0 || opacity > 1)
++    if (opacity < 0 || opacity > 1)
+         return;
+     d->m_opacity = opacity;
+ }
+@@ -129,11 +129,11 @@ void KBubbleWidget::setHighlightBackground(bool flag)
+ }
+ 
+ KBubbleWidget::KBubbleWidget(QWidget *parent)
+-    :QWidget(parent),
+-      d_ptr(new KBubbleWidgetPrivate(this))
++    : QWidget(parent)
++    , d_ptr(new KBubbleWidgetPrivate(this))
+ {
+     Q_D(KBubbleWidget);
+-//    setContentsMargins(24,24,24,24);
++    //    setContentsMargins(24,24,24,24);
+     setWindowFlags(Qt::FramelessWindowHint);
+     setAttribute(Qt::WA_TranslucentBackground);
+ }
+@@ -161,145 +161,134 @@ void KBubbleWidget ::paintEvent(QPaintEvent *)
+     QPolygon trianglePolygon;
+     QPainterPath path;
+     QRect targetRect = this->rect();
+-    switch (d->m_tailDirection)
+-    {
++    switch (d->m_tailDirection) {
+     case TopDirection:
+-        targetRect = targetRect.adjusted(0,d->m_tailHeight,0,0);
++        targetRect = targetRect.adjusted(0, d->m_tailHeight, 0, 0);
+ 
+-        if(d->m_tailLocation == LeftLocation)
++        if (d->m_tailLocation == LeftLocation)
+             d->m_startX = 18;
+-        else if(d->m_tailLocation == MiddleLocation)
+-            d->m_startX = (targetRect.width()-d->m_tailWidth*2)/2;
+-        else if(d->m_tailLocation == RightLocation)
+-            d->m_startX = targetRect.width()- d->m_tailHeight*2-d->m_tailWidth-19;
++        else if (d->m_tailLocation == MiddleLocation)
++            d->m_startX = (targetRect.width() - d->m_tailWidth * 2) / 2;
++        else if (d->m_tailLocation == RightLocation)
++            d->m_startX = targetRect.width() - d->m_tailHeight * 2 - d->m_tailWidth - 19;
+         d->m_startY = 0;
+         trianglePolygon << QPoint(d->m_startX + d->m_tailHeight, d->m_tailHeight);
+         trianglePolygon << QPoint(d->m_startX + d->m_tailWidth / 2 + d->m_tailHeight, 0);
+         trianglePolygon << QPoint(d->m_startX + d->m_tailWidth + d->m_tailHeight, d->m_tailHeight);
+-        setContentsMargins(24,24+d->m_tailHeight,24,24);
++        setContentsMargins(24, 24 + d->m_tailHeight, 24, 24);
+         break;
+ 
+     case LeftDirection:
+-        targetRect = targetRect.adjusted(d->m_tailHeight,0,0,0);
+-
+-        if(d->m_tailLocation == LeftLocation)
+-            d->m_startY = d->m_tailHeight +18;
+-        else if(d->m_tailLocation == MiddleLocation)
+-            d->m_startY = targetRect.height()/2-d->m_tailWidth/2;
+-        else if(d->m_tailLocation == RightLocation)
+-             d->m_startY = d->m_tailHeight + static_cast<int>((targetRect.height()-d->m_tailHeight*2 - d->m_tailWidth))-19;
++        targetRect = targetRect.adjusted(d->m_tailHeight, 0, 0, 0);
++
++        if (d->m_tailLocation == LeftLocation)
++            d->m_startY = d->m_tailHeight + 18;
++        else if (d->m_tailLocation == MiddleLocation)
++            d->m_startY = targetRect.height() / 2 - d->m_tailWidth / 2;
++        else if (d->m_tailLocation == RightLocation)
++            d->m_startY = d->m_tailHeight + static_cast<int>((targetRect.height() - d->m_tailHeight * 2 - d->m_tailWidth)) - 19;
+         d->m_startX = 0;
+         trianglePolygon << QPoint(d->m_startX + d->m_tailHeight, d->m_startY);
+-        trianglePolygon << QPoint(d->m_startX , d->m_startY + d->m_tailWidth/2);
+-        trianglePolygon << QPoint(d->m_startX + d->m_tailHeight , d->m_startY + d->m_tailWidth);
+-        setContentsMargins(24+d->m_tailHeight,24,24,24);
++        trianglePolygon << QPoint(d->m_startX, d->m_startY + d->m_tailWidth / 2);
++        trianglePolygon << QPoint(d->m_startX + d->m_tailHeight, d->m_startY + d->m_tailWidth);
++        setContentsMargins(24 + d->m_tailHeight, 24, 24, 24);
+         break;
+ 
+     case RightDirection:
+-        targetRect = targetRect.adjusted(0,0,-d->m_tailHeight,0);
+-
+-        if(d->m_tailLocation == LeftLocation)
+-            d->m_startY = d->m_tailHeight +18;
+-        else if(d->m_tailLocation == MiddleLocation)
+-            d->m_startY = targetRect.height()/2-d->m_tailWidth/2;
+-        else if(d->m_tailLocation == RightLocation)
+-             d->m_startY = d->m_tailHeight + static_cast<int>((targetRect.height()-d->m_tailHeight*2 - d->m_tailWidth))-19;
++        targetRect = targetRect.adjusted(0, 0, -d->m_tailHeight, 0);
++
++        if (d->m_tailLocation == LeftLocation)
++            d->m_startY = d->m_tailHeight + 18;
++        else if (d->m_tailLocation == MiddleLocation)
++            d->m_startY = targetRect.height() / 2 - d->m_tailWidth / 2;
++        else if (d->m_tailLocation == RightLocation)
++            d->m_startY = d->m_tailHeight + static_cast<int>((targetRect.height() - d->m_tailHeight * 2 - d->m_tailWidth)) - 19;
+         d->m_startX = targetRect.width();
+         trianglePolygon << QPoint(d->m_startX - 1, d->m_startY);
+-        trianglePolygon << QPoint(d->m_startX + d->m_tailHeight - 1, d->m_startY + d->m_tailWidth/2);
+-        trianglePolygon << QPoint(d->m_startX - 1 , d->m_startY + d->m_tailWidth);
+-        setContentsMargins(24,24,24+d->m_tailHeight,24);
++        trianglePolygon << QPoint(d->m_startX + d->m_tailHeight - 1, d->m_startY + d->m_tailWidth / 2);
++        trianglePolygon << QPoint(d->m_startX - 1, d->m_startY + d->m_tailWidth);
++        setContentsMargins(24, 24, 24 + d->m_tailHeight, 24);
+         break;
+     case BottomDirection:
+-        targetRect = targetRect.adjusted(0,0,0,-d->m_tailHeight);
++        targetRect = targetRect.adjusted(0, 0, 0, -d->m_tailHeight);
+ 
+-        if(d->m_tailLocation == LeftLocation)
++        if (d->m_tailLocation == LeftLocation)
+             d->m_startX = 18;
+-        else if(d->m_tailLocation == MiddleLocation)
+-            d->m_startX = (this->rect().width()-d->m_tailWidth*2)/2;
+-        else if(d->m_tailLocation == RightLocation)
+-            d->m_startX = this->rect().width()- d->m_tailHeight*2-d->m_tailWidth-19;
++        else if (d->m_tailLocation == MiddleLocation)
++            d->m_startX = (this->rect().width() - d->m_tailWidth * 2) / 2;
++        else if (d->m_tailLocation == RightLocation)
++            d->m_startX = this->rect().width() - d->m_tailHeight * 2 - d->m_tailWidth - 19;
+         d->m_startY = this->rect().height();
+-        trianglePolygon << QPoint(d->m_startX + d->m_tailHeight, d->m_startY - d->m_tailHeight-1);
+-        trianglePolygon << QPoint(d->m_startX + d->m_tailWidth / 2 + d->m_tailHeight, d->m_startY-1);
+-        trianglePolygon << QPoint(d->m_startX + d->m_tailWidth + d->m_tailHeight,d->m_startY - d->m_tailHeight-1);
+-        setContentsMargins(24,24,24,24+d->m_tailHeight);
++        trianglePolygon << QPoint(d->m_startX + d->m_tailHeight, d->m_startY - d->m_tailHeight - 1);
++        trianglePolygon << QPoint(d->m_startX + d->m_tailWidth / 2 + d->m_tailHeight, d->m_startY - 1);
++        trianglePolygon << QPoint(d->m_startX + d->m_tailWidth + d->m_tailHeight, d->m_startY - d->m_tailHeight - 1);
++        setContentsMargins(24, 24, 24, 24 + d->m_tailHeight);
+         break;
+     case None:
+         break;
+     }
+ 
+-    if(ThemeController::widgetTheme() == ClassicTheme)
+-    {
+-        path.addRect(targetRect.adjusted(0,0,-1,-1));
+-    }
+-    else
+-    {
+-        path.moveTo(targetRect.topRight() - QPoint(d->m_topRightRadius , 0) ); //右上
+-        path.lineTo(targetRect.topLeft() + QPointF(d->m_topLeftRadius , 0)); //上方线
+-        path.quadTo(targetRect.topLeft(), targetRect.topLeft() + QPointF(0 , d->m_topLeftRadius)); //圆角
+-        path.lineTo(targetRect.bottomLeft() +  QPointF(0,- d->m_bottomLeftRadius)); //左方线
+-        path.quadTo(targetRect.bottomLeft(), targetRect.bottomLeft() + QPointF(d->m_bottomLeftRadius , 0));//圆角
+-        path.lineTo(targetRect.bottomRight() - QPointF(d->m_bottomRightRadius , 0));//下方线
+-        path.quadTo(targetRect.bottomRight(), targetRect.bottomRight() + QPointF(0, - d->m_bottomRightRadius));//圆角
+-        path.lineTo(targetRect.topRight() + QPointF(0, d->m_topRightRadius));//右方线
+-        path.quadTo(targetRect.topRight() , targetRect.topRight() - QPointF(d->m_topRightRadius, 0)); // 圆角
++    if (ThemeController::widgetTheme() == ClassicTheme) {
++        path.addRect(targetRect.adjusted(0, 0, -1, -1));
++    } else {
++        path.moveTo(targetRect.topRight() - QPoint(d->m_topRightRadius, 0)); // 右上
++        path.lineTo(targetRect.topLeft() + QPointF(d->m_topLeftRadius, 0)); // 上方线
++        path.quadTo(targetRect.topLeft(), targetRect.topLeft() + QPointF(0, d->m_topLeftRadius)); // 圆角
++        path.lineTo(targetRect.bottomLeft() + QPointF(0, -d->m_bottomLeftRadius)); // 左方线
++        path.quadTo(targetRect.bottomLeft(), targetRect.bottomLeft() + QPointF(d->m_bottomLeftRadius, 0)); // 圆角
++        path.lineTo(targetRect.bottomRight() - QPointF(d->m_bottomRightRadius, 0)); // 下方线
++        path.quadTo(targetRect.bottomRight(), targetRect.bottomRight() + QPointF(0, -d->m_bottomRightRadius)); // 圆角
++        path.lineTo(targetRect.topRight() + QPointF(0, d->m_topRightRadius)); // 右方线
++        path.quadTo(targetRect.topRight(), targetRect.topRight() - QPointF(d->m_topRightRadius, 0)); // 圆角
+     }
+ 
+     path.addPolygon(trianglePolygon);
+-    path = path.simplified();//合并subpath,取消交集部分的线
++    path = path.simplified(); // 合并subpath,取消交集部分的线
+ 
+     QPainter painter(this);
+     painter.setRenderHints(QPainter::Antialiasing);
+     painter.setRenderHints(QPainter::HighQualityAntialiasing);
+ 
+-    if(d->m_enableBlur &&  !d->m_isHighlightBackground)
+-    {
+-        //开启毛玻璃时
++    if (d->m_enableBlur && !d->m_isHighlightBackground) {
++        // 开启毛玻璃时
+         QRegion region(path.toFillPolygon().toPolygon());
+-        KWindowEffects::enableBlurBehind(this->winId(),true,region);
++        KWindowEffects::enableBlurBehind(this->winId(), true, region);
+         this->setMask(rect());
+         painter.setOpacity(d->m_opacity);
+-    }
+-    else
+-    {
+-        //未开启毛玻璃时
++    } else {
++        // 未开启毛玻璃时
+         painter.setOpacity(1);
+     }
+     QPen pen;
+     pen.setJoinStyle(Qt::RoundJoin);
+     pen.setWidthF(1);
+     pen.setColor(Qt::gray);
+-    painter.translate(0.5,0.5);
++    painter.translate(0.5, 0.5);
+     painter.setPen(pen);
+-    if(d->m_isHighlightBackground)
++    if (d->m_isHighlightBackground)
+         painter.setBrush(ThemeController::getPaletteColorFromDT("highlight"));
+     else
+         painter.setBrush(ThemeController::getPaletteColorFromDT("base"));
+     painter.drawPath(path);
+-
+ }
+ 
+ KBubbleWidgetPrivate::KBubbleWidgetPrivate(KBubbleWidget *parent)
+-    :q_ptr(parent),
+-      m_tailHeight(8),
+-      m_tailWidth(16),
+-      m_enableBlur(false),
+-      m_opacity(0.5),
+-      m_isHighlightBackground(false),
+-      m_tailLocation(TailLocation::LeftLocation),
+-      m_tailDirection(TailDirection::BottomDirection)
++    : q_ptr(parent)
++    , m_tailHeight(8)
++    , m_tailWidth(16)
++    , m_enableBlur(false)
++    , m_opacity(0.5)
++    , m_isHighlightBackground(false)
++    , m_tailLocation(TailLocation::LeftLocation)
++    , m_tailDirection(TailDirection::BottomDirection)
+ {
+     int radius = ThemeController::getRadiusFromDT("kradius-menu");
+-    if(radius == -1)
+-    {
++    if (radius == -1) {
+         m_bottomLeftRadius = 8;
+         m_topLeftRadius = 8;
+         m_bottomRightRadius = 8;
+         m_topRightRadius = 8;
+-    }
+-    else
+-    {
++    } else {
+         m_bottomLeftRadius = radius;
+         m_topLeftRadius = radius;
+         m_bottomRightRadius = radius;
+@@ -309,4 +298,3 @@ KBubbleWidgetPrivate::KBubbleWidgetPrivate(KBubbleWidget *parent)
+ }
+ #include "kbubblewidget.moc"
+ #include "moc_kbubblewidget.cpp"
+-
+diff --git a/kysdk-qtwidgets/src/kbubblewidget.h b/kysdk-qtwidgets/src/kbubblewidget.h
+index 4c9b27e..71c0330 100644
+--- a/kysdk-qtwidgets/src/kbubblewidget.h
++++ b/kysdk-qtwidgets/src/kbubblewidget.h
+@@ -23,32 +23,30 @@
+ #ifndef KBubbleWidget_H
+ #define KBubbleWidget_H
+ 
+-
+-#include <QWidget>
+ #include <QBoxLayout>
++#include <QWidget>
+ 
+-namespace kdk {
++namespace kdk
++{
+ /**
+  * @brief 指定气泡尾部显示的方向
+  */
+-enum TailDirection
+-    {
+-        TopDirection,
+-        LeftDirection,
+-        BottomDirection,
+-        RightDirection,
+-        None
+-    };
++enum TailDirection {
++    TopDirection,
++    LeftDirection,
++    BottomDirection,
++    RightDirection,
++    None
++};
+ 
+ /**
+  * @brief 指定气泡尾部的显示位置
+  */
+-enum TailLocation
+-    {
+-        LeftLocation,
+-        MiddleLocation,
+-        RightLocation
+-    };
++enum TailLocation {
++    LeftLocation,
++    MiddleLocation,
++    RightLocation
++};
+ 
+ /**
+  * @defgroup FormModule
+@@ -56,23 +54,22 @@ enum TailLocation
+ 
+ class KBubbleWidgetPrivate;
+ 
+-
+ /**
+  * @brief 提供了一个带三角形窗体。
+  * @since 2.0
+  */
+-class KBubbleWidget  : public QWidget
++class KBubbleWidget : public QWidget
+ {
+     Q_OBJECT
+ 
+ public:
+-    KBubbleWidget (QWidget *parent = nullptr);
++    KBubbleWidget(QWidget *parent = nullptr);
+ 
+     /**
+      * @brief 设置气泡尾部尺寸
+      * @param size
+      */
+-    void setTailSize(const QSize& size);
++    void setTailSize(const QSize &size);
+ 
+     /**
+      * @brief 获取气泡尾部尺寸
+@@ -85,7 +82,7 @@ public:
+      * @param dirType
+      * @param locType
+      */
+-    void setTailPosition(TailDirection dirType, TailLocation locType=MiddleLocation);
++    void setTailPosition(TailDirection dirType, TailLocation locType = MiddleLocation);
+ 
+     /**
+      * @brief 获取气泡尾部显示方向
+@@ -106,7 +103,7 @@ public:
+      * @param topRight
+      * @param bottomRight
+      */
+-    void setBorderRadius(int bottomLeft,int topLeft,int topRight,int bottomRight);
++    void setBorderRadius(int bottomLeft, int topLeft, int topRight, int bottomRight);
+ 
+     /**
+      * @brief 设置窗体圆角半径
+@@ -145,13 +142,12 @@ public:
+      */
+     void setHighlightBackground(bool flag);
+ 
+-
+ protected:
+     void paintEvent(QPaintEvent *);
+ 
+ private:
+     Q_DECLARE_PRIVATE(KBubbleWidget)
+-    KBubbleWidgetPrivate* const d_ptr;
++    KBubbleWidgetPrivate *const d_ptr;
+ };
+ 
+ }
+diff --git a/kysdk-qtwidgets/src/kbuttonbox.cpp b/kysdk-qtwidgets/src/kbuttonbox.cpp
+index 2570a6a..b037943 100644
+--- a/kysdk-qtwidgets/src/kbuttonbox.cpp
++++ b/kysdk-qtwidgets/src/kbuttonbox.cpp
+@@ -21,27 +21,29 @@
+  */
+ 
+ #include "kbuttonbox.h"
+-#include <QButtonGroup>
++#include "themeController.h"
+ #include <QBoxLayout>
++#include <QButtonGroup>
++#include <QColor>
++#include <QGraphicsDropShadowEffect>
+ #include <QPainter>
+ #include <QStyleOptionButton>
+-#include <QColor>
+ #include <QStylePainter>
+-#include <QGraphicsDropShadowEffect>
+-#include "themeController.h"
+ 
+-namespace kdk {
+-class KButtonBoxPrivate : public QObject ,public ThemeController
++namespace kdk
++{
++class KButtonBoxPrivate : public QObject, public ThemeController
+ {
+     Q_OBJECT
+     Q_DECLARE_PUBLIC(KButtonBox)
+ public:
+-    KButtonBoxPrivate(KButtonBox* parent);
++    KButtonBoxPrivate(KButtonBox *parent);
+     void updateBorderRadius();
+     void updateButtonList();
+ 
+ protected:
+     void changeTheme();
++
+ private:
+     KButtonBox *q_ptr;
+     QButtonGroup *m_buttonGroup;
+@@ -54,15 +56,15 @@ private:
+ };
+ 
+ KButtonBoxPrivate::KButtonBoxPrivate(KButtonBox *parent)
+-    :q_ptr(parent)
++    : q_ptr(parent)
+ {
+     Q_Q(KButtonBox);
+     m_buttonGroup = new QButtonGroup(q);
+-    q->connect(m_buttonGroup, SIGNAL(buttonClicked(QAbstractButton*)), q, SIGNAL(buttonClicked(QAbstractButton*)));
+-    q->connect(m_buttonGroup, SIGNAL(buttonPressed(QAbstractButton*)), q, SIGNAL(buttonPressed(QAbstractButton*)));
+-    q->connect(m_buttonGroup, SIGNAL(buttonReleased(QAbstractButton*)), q, SIGNAL(buttonReleased(QAbstractButton*)));
+-    q->connect(m_buttonGroup, SIGNAL(buttonToggled(QAbstractButton*, bool)), q, SIGNAL(buttonToggled(QAbstractButton*, bool)));
+-    q->connect(m_gsetting,&QGSettings::changed,this,[=]{
++    q->connect(m_buttonGroup, SIGNAL(buttonClicked(QAbstractButton *)), q, SIGNAL(buttonClicked(QAbstractButton *)));
++    q->connect(m_buttonGroup, SIGNAL(buttonPressed(QAbstractButton *)), q, SIGNAL(buttonPressed(QAbstractButton *)));
++    q->connect(m_buttonGroup, SIGNAL(buttonReleased(QAbstractButton *)), q, SIGNAL(buttonReleased(QAbstractButton *)));
++    q->connect(m_buttonGroup, SIGNAL(buttonToggled(QAbstractButton *, bool)), q, SIGNAL(buttonToggled(QAbstractButton *, bool)));
++    q->connect(m_gsetting, &QGSettings::changed, this, [=] {
+         changeTheme();
+     });
+ 
+@@ -71,7 +73,7 @@ KButtonBoxPrivate::KButtonBoxPrivate(KButtonBox *parent)
+     m_layout->setMargin(0);
+     m_layout->setSpacing(0);
+     m_radius = ThemeController::getRadiusFromDT("kradius-normal");
+-    if(m_radius == -1)
++    if (m_radius == -1)
+         m_radius = 6;
+     m_isCheckable = false;
+     m_shadowFlag = false;
+@@ -84,18 +86,15 @@ void KButtonBoxPrivate::updateBorderRadius()
+     QList<KPushButton *> buttonList = q->buttonList();
+     switch (q->orientation()) {
+     case Qt::Horizontal: {
+-        for(int i = 0 ; i < buttonList.count(); i++)
+-        {
++        for (int i = 0; i < buttonList.count(); i++) {
+             KPushButton *button = buttonList.at(i);
+-            if(i == 0){
++            if (i == 0) {
+                 Q_ASSERT(button);
+-                button->setBorderRadius(m_radius,m_radius,0,0);
+-            }
+-            else if(i == buttonList.count()-1){
++                button->setBorderRadius(m_radius, m_radius, 0, 0);
++            } else if (i == buttonList.count() - 1) {
+                 Q_ASSERT(button);
+-                button->setBorderRadius(0,0,m_radius,m_radius);
+-            }
+-            else {
++                button->setBorderRadius(0, 0, m_radius, m_radius);
++            } else {
+                 Q_ASSERT(button);
+                 button->setBorderRadius(0);
+             }
+@@ -103,18 +102,15 @@ void KButtonBoxPrivate::updateBorderRadius()
+         break;
+     }
+     case Qt::Vertical: {
+-        for(int i = 0 ; i < buttonList.count(); i++)
+-        {
++        for (int i = 0; i < buttonList.count(); i++) {
+             KPushButton *button = buttonList.at(i);
+-            if(i == 0){
++            if (i == 0) {
+                 Q_ASSERT(button);
+-                button->setBorderRadius(0,m_radius,m_radius,0);
+-            }
+-            else if(i == buttonList.count()-1){
++                button->setBorderRadius(0, m_radius, m_radius, 0);
++            } else if (i == buttonList.count() - 1) {
+                 Q_ASSERT(button);
+-                button->setBorderRadius(m_radius,0,0,m_radius);
+-            }
+-            else {
++                button->setBorderRadius(m_radius, 0, 0, m_radius);
++            } else {
+                 Q_ASSERT(button);
+                 button->setBorderRadius(0);
+             }
+@@ -132,23 +128,22 @@ void KButtonBoxPrivate::updateButtonList()
+     Q_Q(KButtonBox);
+ 
+     QColor shadowColor;
+-    if(ThemeController::themeMode() == LightTheme)
+-        shadowColor = QColor(0,0,0);
++    if (ThemeController::themeMode() == LightTheme)
++        shadowColor = QColor(0, 0, 0);
+     else
+-        shadowColor = QColor(255,255,255);
++        shadowColor = QColor(255, 255, 255);
+     shadowColor.setAlphaF(0.1);
+     for (QAbstractButton *button : m_buttonGroup->buttons()) {
+-            m_buttonGroup->removeButton(button);
+-            m_layout->removeWidget(button);
++        m_buttonGroup->removeButton(button);
++        m_layout->removeWidget(button);
+     }
+     for (int i = 0; i < m_buttonList.count(); ++i) {
+         KPushButton *button = m_buttonList.at(i);
+         button->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Expanding);
+-        m_layout->insertWidget(i,button);
+-        m_buttonGroup->addButton(button,i);
++        m_layout->insertWidget(i, button);
++        m_buttonGroup->addButton(button, i);
+         button->setCheckable(m_isCheckable);
+-        if(m_shadowFlag)
+-        {
++        if (m_shadowFlag) {
+             m_pShadow_effect->setOffset(0, 2);
+             m_pShadow_effect->setColor(shadowColor);
+             m_pShadow_effect->setBlurRadius(4);
+@@ -163,51 +158,43 @@ void KButtonBoxPrivate::changeTheme()
+     Q_Q(KButtonBox);
+     initThemeStyle();
+ 
+-    if(ThemeController::themeMode() == LightTheme)
+-    {
++    if (ThemeController::themeMode() == LightTheme) {
+         QColor shadowColor(0, 0, 0);
+         shadowColor.setAlphaF(0.1);
+-        if(m_shadowFlag)
+-        {
++        if (m_shadowFlag) {
+             m_pShadow_effect->setOffset(0, 2);
+             m_pShadow_effect->setColor(shadowColor);
+             m_pShadow_effect->setBlurRadius(4);
+             q->setGraphicsEffect(m_pShadow_effect);
+         }
+-    }
+-    else
+-    {
++    } else {
+         QColor shadowColor(255, 255, 255);
+         shadowColor.setAlphaF(0.1);
+-        if(m_shadowFlag)
+-        {
++        if (m_shadowFlag) {
+             m_pShadow_effect->setOffset(0, 2);
+             m_pShadow_effect->setColor(shadowColor);
+             m_pShadow_effect->setBlurRadius(4);
+             q->setGraphicsEffect(m_pShadow_effect);
+         }
+     }
+-
+ }
+ 
+ KButtonBox::KButtonBox(QWidget *parent)
+-    :QWidget(parent)
+-    ,d_ptr(new KButtonBoxPrivate(this))
++    : QWidget(parent)
++    , d_ptr(new KButtonBoxPrivate(this))
+ {
+     Q_D(KButtonBox);
+ }
+ 
+ KButtonBox::~KButtonBox()
+ {
+-
+ }
+ 
+ Qt::Orientation KButtonBox::orientation()
+ {
+     Q_D(KButtonBox);
+     QBoxLayout::Direction layoutDirection = d->m_layout->direction();
+-    if(layoutDirection == QBoxLayout::LeftToRight || layoutDirection == QBoxLayout::RightToLeft)
+-    {
++    if (layoutDirection == QBoxLayout::LeftToRight || layoutDirection == QBoxLayout::RightToLeft) {
+         return Qt::Horizontal;
+     }
+     return Qt::Vertical;
+@@ -216,8 +203,7 @@ Qt::Orientation KButtonBox::orientation()
+ void KButtonBox::setOrientation(Qt::Orientation orientation)
+ {
+     Q_D(KButtonBox);
+-    if(orientation == Qt::Vertical)
+-    {
++    if (orientation == Qt::Vertical) {
+         d->m_layout->setDirection(QBoxLayout::TopToBottom);
+         d->updateBorderRadius();
+         return;
+@@ -226,17 +212,16 @@ void KButtonBox::setOrientation(Qt::Orientation orientation)
+     d->updateBorderRadius();
+ }
+ 
+-void KButtonBox::addButton(KPushButton *button ,int i)
++void KButtonBox::addButton(KPushButton *button, int i)
+ {
+     Q_D(KButtonBox);
+-    if(i < -1)
++    if (i < -1)
+         return;
+ 
+-    if(i == -1 || i >= d->m_buttonList.count()){
++    if (i == -1 || i >= d->m_buttonList.count()) {
+         d->m_buttonList.append(button);
+-    }
+-    else{
+-        d->m_buttonList.insert(i,button);
++    } else {
++        d->m_buttonList.insert(i, button);
+     }
+ 
+     button->show();
+@@ -247,7 +232,7 @@ void KButtonBox::addButton(KPushButton *button ,int i)
+ void KButtonBox::removeButton(KPushButton *button)
+ {
+     Q_D(KButtonBox);
+-    if(d->m_buttonList.contains(button)){
++    if (d->m_buttonList.contains(button)) {
+         d->m_buttonList.removeAll(button);
+         button->hide();
+     }
+@@ -257,10 +242,10 @@ void KButtonBox::removeButton(KPushButton *button)
+ void KButtonBox::removeButton(int i)
+ {
+     Q_D(KButtonBox);
+-    if(i < 0 || i >= d->m_buttonList.count())
++    if (i < 0 || i >= d->m_buttonList.count())
+         return;
+     auto button = d->m_buttonList.at(i);
+-    if(button)
++    if (button)
+         button->hide();
+     d->m_buttonList.removeAt(i);
+     setButtonList(d->m_buttonList);
+@@ -295,7 +280,7 @@ int KButtonBox::borderRadius()
+ void KButtonBox::setId(KPushButton *button, int id)
+ {
+     Q_D(KButtonBox);
+-    d->m_buttonGroup->setId(button,id);
++    d->m_buttonGroup->setId(button, id);
+ }
+ 
+ int KButtonBox::id(KPushButton *button)
+@@ -307,14 +292,14 @@ int KButtonBox::id(KPushButton *button)
+ KPushButton *KButtonBox::checkedButton()
+ {
+     Q_D(KButtonBox);
+-    KPushButton * button = dynamic_cast<KPushButton*>(d->m_buttonGroup->checkedButton());
++    KPushButton *button = dynamic_cast<KPushButton *>(d->m_buttonGroup->checkedButton());
+     return button;
+ }
+ 
+ KPushButton *KButtonBox::button(int id)
+ {
+     Q_D(KButtonBox);
+-    KPushButton * button = dynamic_cast<KPushButton*>(d->m_buttonGroup->button(id));
++    KPushButton *button = dynamic_cast<KPushButton *>(d->m_buttonGroup->button(id));
+     return button;
+ }
+ 
+@@ -360,12 +345,9 @@ void KButtonBox::setShadow(bool flag)
+     QColor shadowColor(0, 0, 0);
+     shadowColor.setAlphaF(0.1);
+     d->m_shadowFlag = flag;
+-    if(flag)
+-    {
++    if (flag) {
+         d->updateButtonList();
+-    }
+-    else
+-    {
++    } else {
+         for (int i = 0; i < d->m_buttonList.count(); ++i) {
+             KPushButton *button = d->m_buttonList.at(i);
+             d->m_pShadow_effect->setOffset(0, 2);
+diff --git a/kysdk-qtwidgets/src/kbuttonbox.h b/kysdk-qtwidgets/src/kbuttonbox.h
+index a89281c..d0b50dd 100644
+--- a/kysdk-qtwidgets/src/kbuttonbox.h
++++ b/kysdk-qtwidgets/src/kbuttonbox.h
+@@ -25,11 +25,11 @@
+ 
+ #include "gui_g.h"
+ #include "kpushbutton.h"
+-#include <QWidget>
+ #include <QAbstractButton>
++#include <QWidget>
+ 
+-
+-namespace kdk {
++namespace kdk
++{
+ 
+ /**
+  *  @defgroup ContainerModules
+@@ -64,7 +64,7 @@ public:
+      * @brief 添加按钮
+      * @param button
+      */
+-    void addButton(KPushButton *button,int i = -1);
++    void addButton(KPushButton *button, int i = -1);
+ 
+     /**
+      * @brief 删除按钮
+@@ -83,7 +83,7 @@ public:
+      * @param list
+      * @param checkable
+      */
+-    void setButtonList(const QList<KPushButton*> &list);
++    void setButtonList(const QList<KPushButton *> &list);
+ 
+     /**
+      * @brief 获取KButtonBox中的按钮列表
+@@ -121,7 +121,7 @@ public:
+      * @brief 返回已选中的按钮
+      * @return
+      */
+-    KPushButton * checkedButton();
++    KPushButton *checkedButton();
+ 
+     /**
+      * @brief 通过按钮id获取按钮
+@@ -180,7 +180,7 @@ Q_SIGNALS:
+ 
+ private:
+     Q_DECLARE_PRIVATE(KButtonBox)
+-    KButtonBoxPrivate* const d_ptr;
++    KButtonBoxPrivate *const d_ptr;
+ };
+ 
+ }
+diff --git a/kysdk-qtwidgets/src/kclocktimer.cpp b/kysdk-qtwidgets/src/kclocktimer.cpp
+index 32d1646..4eb4b59 100644
+--- a/kysdk-qtwidgets/src/kclocktimer.cpp
++++ b/kysdk-qtwidgets/src/kclocktimer.cpp
+@@ -22,15 +22,16 @@
+ 
+ #include "kclocktimer.h"
+ #include "themeController.h"
+-#include <QLabel>
+ #include <QBoxLayout>
+-#include <QTimer>
+-#include <QStringList>
+ #include <QDebug>
++#include <QLabel>
++#include <QStringList>
++#include <QTimer>
+ 
+-namespace kdk {
++namespace kdk
++{
+ 
+-class  Q_DECL_HIDDEN KClockTimerPrivate : public QObject , public ThemeController
++class Q_DECL_HIDDEN KClockTimerPrivate : public QObject, public ThemeController
+ {
+     Q_OBJECT
+     Q_DECLARE_PUBLIC(KClockTimer)
+@@ -50,8 +51,8 @@ private:
+ };
+ 
+ KClockTimer::KClockTimer(QWidget *parent)
+-    :QWidget(parent)
+-    ,d_ptr(new KClockTimerPrivate(this))
++    : QWidget(parent)
++    , d_ptr(new KClockTimerPrivate(this))
+ {
+     Q_D(KClockTimer);
+ }
+@@ -93,24 +94,24 @@ void KClockTimer::resetStopwatch()
+ }
+ 
+ KClockTimerPrivate::KClockTimerPrivate(KClockTimer *parent)
+-    :q_ptr(parent)
+-    ,isRunning(false)
++    : q_ptr(parent)
++    , isRunning(false)
+ {
+     Q_Q(KClockTimer);
+     m_vLayout = new QVBoxLayout(q);
+ 
+     m_pMainLabel = new QLabel();
+-    m_pMainLabel->setFixedSize(210,70);
++    m_pMainLabel->setFixedSize(210, 70);
+     m_pMainLabel->setAlignment(Qt::AlignHCenter);
+     m_pMainLabel->setText("00:00.00");
+ 
+     m_pSubLabel = new QLabel();
+-    m_pSubLabel->setFixedSize(210,41);
++    m_pSubLabel->setFixedSize(210, 41);
+     m_pSubLabel->setAlignment(Qt::AlignHCenter);
+     m_pSubLabel->setText("00:00.00");
+ 
+     QPalette pale;
+-    pale.setColor(QPalette::WindowText,Qt::gray);
++    pale.setColor(QPalette::WindowText, Qt::gray);
+     m_pSubLabel->setPalette(pale);
+     m_vLayout->setSpacing(0);
+     m_vLayout->addWidget(m_pMainLabel);
+@@ -121,25 +122,23 @@ KClockTimerPrivate::KClockTimerPrivate(KClockTimer *parent)
+     m_pTimer->setInterval(10);
+ 
+     QPalette mainPalette;
+-    mainPalette.setColor(QPalette::WindowText,ThemeController::getPaletteColorFromDT("brighttext"));
++    mainPalette.setColor(QPalette::WindowText, ThemeController::getPaletteColorFromDT("brighttext"));
+     m_pMainLabel->setPalette(mainPalette);
+ 
+     QFont f = q->font();
+     f.setPointSize(f.pointSize() + 15);
+     m_pMainLabel->setFont(f);
+-    connect(m_gsetting,&QGSettings::changed,q,[=]{
++    connect(m_gsetting, &QGSettings::changed, q, [=] {
+         QFont f = q->font();
+         f.setPointSize(f.pointSize() + 15);
+         m_pMainLabel->setFont(f);
+         QPalette mainPalette;
+-        mainPalette.setColor(QPalette::WindowText,ThemeController::getPaletteColorFromDT("brighttext"));
++        mainPalette.setColor(QPalette::WindowText, ThemeController::getPaletteColorFromDT("brighttext"));
+         m_pMainLabel->setPalette(mainPalette);
+     });
+-    connect(m_pTimer, &QTimer::timeout, this,[=]{
++    connect(m_pTimer, &QTimer::timeout, this, [=] {
+         updateTime();
+     });
+-
+-
+ }
+ 
+ void KClockTimerPrivate::updateTime()
+@@ -147,22 +146,22 @@ void KClockTimerPrivate::updateTime()
+     Q_Q(KClockTimer);
+     m_runningTime += 10; // 增加10毫秒
+ 
+-   int minutes = m_runningTime / (1000 * 60);
+-   int seconds = (m_runningTime / 1000) % 60;
+-   int milliseconds = m_runningTime % 1000;
+-
+-   // 取毫秒的前两位
+-   milliseconds = milliseconds / 10;
+-
+-   // 使用QString的arg方法格式化输出
+-   m_pMainLabel->setText(QString("%1:%2.%3")
+-                       .arg(minutes, 2, 10, QChar('0'))
+-                       .arg(seconds, 2, 10, QChar('0'))
+-                       .arg(milliseconds, 2, 10, QChar('0')));
+-   m_pSubLabel->setText(QString("%1:%2.%3")
+-                       .arg(minutes, 2, 10, QChar('0'))
+-                       .arg(seconds, 2, 10, QChar('0'))
+-                        .arg(milliseconds, 2, 10, QChar('0')));
++    int minutes = m_runningTime / (1000 * 60);
++    int seconds = (m_runningTime / 1000) % 60;
++    int milliseconds = m_runningTime % 1000;
++
++    // 取毫秒的前两位
++    milliseconds = milliseconds / 10;
++
++    // 使用QString的arg方法格式化输出
++    m_pMainLabel->setText(QString("%1:%2.%3")
++                              .arg(minutes, 2, 10, QChar('0'))
++                              .arg(seconds, 2, 10, QChar('0'))
++                              .arg(milliseconds, 2, 10, QChar('0')));
++    m_pSubLabel->setText(QString("%1:%2.%3")
++                             .arg(minutes, 2, 10, QChar('0'))
++                             .arg(seconds, 2, 10, QChar('0'))
++                             .arg(milliseconds, 2, 10, QChar('0')));
+ }
+ 
+ }
+diff --git a/kysdk-qtwidgets/src/kclocktimer.h b/kysdk-qtwidgets/src/kclocktimer.h
+index 6033c06..b479006 100644
+--- a/kysdk-qtwidgets/src/kclocktimer.h
++++ b/kysdk-qtwidgets/src/kclocktimer.h
+@@ -26,7 +26,8 @@
+ #include "gui_g.h"
+ #include <QWidget>
+ 
+-namespace kdk {
++namespace kdk
++{
+ 
+ class KClockTimerPrivate;
+ 
+@@ -34,11 +35,11 @@ class KClockTimerPrivate;
+  * @defgroup timerModule
+  * @since 2.5
+  */
+-class GUI_EXPORT KClockTimer :public QWidget
++class GUI_EXPORT KClockTimer : public QWidget
+ {
+     Q_OBJECT
+ public:
+-    KClockTimer(QWidget * parent = nullptr);
++    KClockTimer(QWidget *parent = nullptr);
+ 
+     /**
+      * @brief 获取当前时间
+@@ -63,9 +64,8 @@ public slots:
+     void resetStopwatch();
+ 
+ private:
+-    KClockTimerPrivate* const d_ptr;
++    KClockTimerPrivate *const d_ptr;
+     Q_DECLARE_PRIVATE(KClockTimer)
+-
+ };
+ 
+ }
+diff --git a/kysdk-qtwidgets/src/kcolorbutton.cpp b/kysdk-qtwidgets/src/kcolorbutton.cpp
+index 8de9251..db8a7c9 100644
+--- a/kysdk-qtwidgets/src/kcolorbutton.cpp
++++ b/kysdk-qtwidgets/src/kcolorbutton.cpp
+@@ -21,28 +21,29 @@
+  */
+ 
+ #include "kcolorbutton.h"
+-#include <QPainter>
+-#include <QStyleOptionButton>
+ #include "themeController.h"
+ #include <QDebug>
++#include <QPainter>
++#include <QStyleOptionButton>
+ 
+-namespace kdk {
++namespace kdk
++{
+ 
+ static const int circleButtonSize = 20;
+ static const int normalButtonSize = 24;
+ 
+-class KColorButtonPrivate : public QObject,public ThemeController
++class KColorButtonPrivate : public QObject, public ThemeController
+ {
+     Q_OBJECT
+     Q_DECLARE_PUBLIC(KColorButton)
+ public:
+-    KColorButtonPrivate(KColorButton* parent);
++    KColorButtonPrivate(KColorButton *parent);
+ 
+ protected:
+     void changeTheme();
+ 
+ private:
+-    KColorButton* const q_ptr;
++    KColorButton *const q_ptr;
+     bool m_backgroundFlag;
+     QColor m_backgroundColor;
+     int m_radius;
+@@ -50,8 +51,8 @@ private:
+ };
+ 
+ KColorButton::KColorButton(QWidget *parent)
+-    :QPushButton(parent)
+-    ,d_ptr(new KColorButtonPrivate(this))
++    : QPushButton(parent)
++    , d_ptr(new KColorButtonPrivate(this))
+ {
+     Q_D(KColorButton);
+     setCheckable(true);
+@@ -97,88 +98,66 @@ void KColorButton::paintEvent(QPaintEvent *)
+     painter.setRenderHint(QPainter::SmoothPixmapTransform);
+     painter.setPen(Qt::NoPen);
+ 
+-    if(!option.state.testFlag(QStyle::State_Enabled))
+-    {
++    if (!option.state.testFlag(QStyle::State_Enabled)) {
+         painter.save();
+-        painter.setBrush(ThemeController::getPaletteColorFromDT("buttontext",QPalette::Disabled));
+-        painter.drawRoundedRect(rect,d->m_radius,d->m_radius);
++        painter.setBrush(ThemeController::getPaletteColorFromDT("buttontext", QPalette::Disabled));
++        painter.drawRoundedRect(rect, d->m_radius, d->m_radius);
+         painter.restore();
+-    }
+-    else if(d->m_buttonType == RoundedRect)
+-    {
++    } else if (d->m_buttonType == RoundedRect) {
+         painter.save();
+-        if(d->m_backgroundFlag)
+-        {
++        if (d->m_backgroundFlag) {
+             painter.setBrush(d->m_backgroundColor);
+-        }
+-        else
+-        {
++        } else {
+             painter.setBrush(ThemeController::getPaletteColorFromDT("highlight"));
+         }
+-        if(isChecked() || option.state.testFlag(QStyle::State_MouseOver))
+-        {
++        if (isChecked() || option.state.testFlag(QStyle::State_MouseOver)) {
+             painter.save();
+             painter.setBrush(Qt::white);
+-            painter.drawRoundedRect(rect,d->m_radius,d->m_radius);//绘制边框
+-            rect = rect.adjusted(2,2,-2,-2);
++            painter.drawRoundedRect(rect, d->m_radius, d->m_radius); // 绘制边框
++            rect = rect.adjusted(2, 2, -2, -2);
+             painter.restore();
+ 
+-            painter.drawRoundedRect(rect,d->m_radius/2,d->m_radius/2);
+-        }
+-        else
+-            painter.drawRoundedRect(rect,d->m_radius,d->m_radius);
++            painter.drawRoundedRect(rect, d->m_radius / 2, d->m_radius / 2);
++        } else
++            painter.drawRoundedRect(rect, d->m_radius, d->m_radius);
+         painter.restore();
+-    }
+-    else if(d->m_buttonType == Circle)
+-    {
++    } else if (d->m_buttonType == Circle) {
+         painter.save();
+-        QRect rect = option.rect.adjusted(1,1,0,0);
+-        if(d->m_backgroundFlag)
+-        {
++        QRect rect = option.rect.adjusted(1, 1, 0, 0);
++        if (d->m_backgroundFlag) {
+             painter.setBrush(d->m_backgroundColor);
+-        }
+-        else
+-        {
++        } else {
+             painter.setBrush(ThemeController::getPaletteColorFromDT("highlight"));
+         }
+ 
+         painter.drawEllipse(rect);
+ 
+-        QRect rect1 = rect.adjusted(rect.width()/4,rect.height()/4,-rect.width()/4,-rect.height()/4);
+-        if(option.state.testFlag(QStyle::State_MouseOver) || isChecked())
+-        {
++        QRect rect1 = rect.adjusted(rect.width() / 4, rect.height() / 4, -rect.width() / 4, -rect.height() / 4);
++        if (option.state.testFlag(QStyle::State_MouseOver) || isChecked()) {
+             painter.save();
+             painter.setBrush(Qt::white);
+             painter.drawEllipse(rect1);
+             painter.restore();
+         }
+         painter.restore();
+-    }
+-    else
+-    {
++    } else {
+         painter.save();
+-        if(d->m_backgroundFlag)
+-        {
++        if (d->m_backgroundFlag) {
+             painter.setBrush(d->m_backgroundColor);
+-        }
+-        else
+-        {
++        } else {
+             painter.setBrush(ThemeController::getPaletteColorFromDT("highlight"));
+         }
+-        if(isChecked())
+-        {
++        if (isChecked()) {
+             QPointF points[3] = {
+-                        QPointF(rect.x() + rect.width() * 2 / 11, rect.y() + rect.height() * 6 / 11),
+-                        QPointF(rect.x() + rect.width() * 5 / 11, rect.y() + rect.height() * 8 / 11),
+-                        QPointF(rect.x() + rect.width() * 9 / 11, rect.y() + rect.height() * 4 / 11),
+-                    };
+-        painter.drawRoundedRect(rect,d->m_radius,d->m_radius);
+-        painter.setPen(QPen(Qt::white,2));
+-        painter.drawPolyline(points, 3);
+-        }
+-        else
+-        {
+-            painter.drawRoundedRect(rect,d->m_radius,d->m_radius);
++                QPointF(rect.x() + rect.width() * 2 / 11, rect.y() + rect.height() * 6 / 11),
++                QPointF(rect.x() + rect.width() * 5 / 11, rect.y() + rect.height() * 8 / 11),
++                QPointF(rect.x() + rect.width() * 9 / 11, rect.y() + rect.height() * 4 / 11),
++            };
++            painter.drawRoundedRect(rect, d->m_radius, d->m_radius);
++            painter.setPen(QPen(Qt::white, 2));
++            painter.drawPolyline(points, 3);
++        } else {
++            painter.drawRoundedRect(rect, d->m_radius, d->m_radius);
+         }
+         painter.restore();
+     }
+@@ -187,25 +166,24 @@ void KColorButton::paintEvent(QPaintEvent *)
+ QSize KColorButton::sizeHint() const
+ {
+     Q_D(const KColorButton);
+-    if(d->m_buttonType == Circle)
+-        return QSize(circleButtonSize,circleButtonSize);
++    if (d->m_buttonType == Circle)
++        return QSize(circleButtonSize, circleButtonSize);
+     else
+-        return QSize(normalButtonSize,normalButtonSize);
++        return QSize(normalButtonSize, normalButtonSize);
+ }
+ 
+ KColorButtonPrivate::KColorButtonPrivate(KColorButton *parent)
+-    :q_ptr(parent)
++    : q_ptr(parent)
+ {
+     Q_Q(KColorButton);
+     m_backgroundFlag = false;
+     m_radius = ThemeController::getRadiusFromDT("kradius-normal");
+-    if(m_radius == -1)
+-    {
++    if (m_radius == -1) {
+         m_radius = 6;
+     }
+     m_buttonType = KColorButton::RoundedRect;
+     m_backgroundColor = ThemeController::getPaletteColorFromDT("highlight");
+-    connect(m_gsetting,&QGSettings::changed,this,[=](){
++    connect(m_gsetting, &QGSettings::changed, this, [=]() {
+         changeTheme();
+         q->update();
+     });
+@@ -217,7 +195,6 @@ void KColorButtonPrivate::changeTheme()
+     initThemeStyle();
+ }
+ 
+-
+ }
+ 
+ #include "kcolorbutton.moc"
+diff --git a/kysdk-qtwidgets/src/kcolorbutton.h b/kysdk-qtwidgets/src/kcolorbutton.h
+index 311b726..461123b 100644
+--- a/kysdk-qtwidgets/src/kcolorbutton.h
++++ b/kysdk-qtwidgets/src/kcolorbutton.h
+@@ -23,35 +23,34 @@
+ #ifndef KCOLORBUTTON_H
+ #define KCOLORBUTTON_H
+ 
+-#include <QPushButton>
+ #include "gui_g.h"
++#include <QPushButton>
+ 
+-namespace kdk {
++namespace kdk
++{
+ /**
+  *  @defgroup PushbuttonModule
+  */
+ class KColorButtonPrivate;
+ 
+-
+ /**
+  * @brief 提供用于设置颜色和样式的按钮,以适用于不同的场景。
+  * @since 2.0
+  */
+-class GUI_EXPORT KColorButton :public QPushButton
++class GUI_EXPORT KColorButton : public QPushButton
+ {
+     Q_OBJECT
+ public:
+-
+     /**
+      * @brief KColorButton提供三种不同的样式
+      */
+-    enum ButtonType{
++    enum ButtonType {
+         Circle,
+         RoundedRect,
+         CheckedRect
+     };
+ 
+-    KColorButton(QWidget* parent = nullptr);
++    KColorButton(QWidget *parent = nullptr);
+ 
+     /**
+      * @brief 设置colorButton背景色
+@@ -95,7 +94,7 @@ protected:
+ 
+ private:
+     Q_DECLARE_PRIVATE(KColorButton)
+-    KColorButtonPrivate* const d_ptr;
++    KColorButtonPrivate *const d_ptr;
+ };
+ 
+ }
+diff --git a/kysdk-qtwidgets/src/kcolorcombobox.cpp b/kysdk-qtwidgets/src/kcolorcombobox.cpp
+index 30e2c46..8fa4735 100644
+--- a/kysdk-qtwidgets/src/kcolorcombobox.cpp
++++ b/kysdk-qtwidgets/src/kcolorcombobox.cpp
+@@ -22,35 +22,39 @@
+ 
+ #include "kcolorcombobox.h"
+ #include "themeController.h"
+-#include <qstylepainter.h>
+-#include <QStyledItemDelegate>
+-#include <QVariant>
+ #include <QAbstractItemView>
+ #include <QCompleter>
++#include <QDebug>
+ #include <QListView>
+ #include <QProxyStyle>
+-#include <QDebug>
+ #include <QResizeEvent>
++#include <QStyledItemDelegate>
++#include <QVariant>
++#include <qstylepainter.h>
+ 
+-namespace kdk {
++namespace kdk
++{
+ 
+-const static QSize defaultPopupItemSize(20,20);
++const static QSize defaultPopupItemSize(20, 20);
+ static QSize g_size;
+ 
+-class KComboStyle:public QProxyStyle
++class KComboStyle : public QProxyStyle
+ {
+ public:
+-    KComboStyle(){}
+-    ~KComboStyle(){}
+-
+-QSize sizeFromContents(QStyle::ContentsType type,
+-                       const QStyleOption *option,
+-                       const QSize &contentsSize,
+-                       const QWidget *widget = nullptr) const override;
++    KComboStyle()
++    {
++    }
++    ~KComboStyle()
++    {
++    }
+ 
++    QSize sizeFromContents(QStyle::ContentsType type,
++                           const QStyleOption *option,
++                           const QSize &contentsSize,
++                           const QWidget *widget = nullptr) const override;
+ };
+ 
+-class KColorComboBoxDelegate:public QStyledItemDelegate
++class KColorComboBoxDelegate : public QStyledItemDelegate
+ {
+     Q_OBJECT
+ 
+@@ -59,32 +63,32 @@ public:
+         ColorRole = Qt::UserRole + 1
+     };
+ 
+-    KColorComboBoxDelegate(QObject *parent = nullptr,KColorComboBox* combo = nullptr);
++    KColorComboBoxDelegate(QObject *parent = nullptr, KColorComboBox *combo = nullptr);
+     void paint(QPainter *painter,
+                const QStyleOptionViewItem &option, const QModelIndex &index) const override;
+     QSize sizeHint(const QStyleOptionViewItem &option,
+                    const QModelIndex &index) const override;
+ 
+ private:
+-    KColorComboBox* m_combo;
++    KColorComboBox *m_combo;
+ };
+ 
+-class KColorComboBoxPrivate:public QObject,public ThemeController
++class KColorComboBoxPrivate : public QObject, public ThemeController
+ {
+     Q_OBJECT
+     Q_DECLARE_PUBLIC(KColorComboBox)
+ 
+ public:
+-    KColorComboBoxPrivate(KColorComboBox*parent);
++    KColorComboBoxPrivate(KColorComboBox *parent);
+     void updateList();
+ 
+ public Q_SLOTS:
+-    void  slotActivated(int);
+-    void  slotHighlighted(int);
+-    void  slotCurrentIndexChanged(int);
++    void slotActivated(int);
++    void slotHighlighted(int);
++    void slotCurrentIndexChanged(int);
+ 
+ private:
+-    KColorComboBox* q_ptr;
++    KColorComboBox *q_ptr;
+     KColorComboBox::ComboType m_comboType;
+     QList<QColor> m_colorList;
+     int m_borderRadius;
+@@ -93,17 +97,17 @@ private:
+ };
+ 
+ KColorComboBox::KColorComboBox(QWidget *parent)
+-    : QComboBox(parent),
+-      d_ptr(new KColorComboBoxPrivate(this))
++    : QComboBox(parent)
++    , d_ptr(new KColorComboBoxPrivate(this))
+ {
+     Q_D(KColorComboBox);
+-    setItemDelegate(new KColorComboBoxDelegate(this,this));
+-    KComboStyle*style  = new KComboStyle();
++    setItemDelegate(new KColorComboBoxDelegate(this, this));
++    KComboStyle *style = new KComboStyle();
+     setStyle(style);
+     view()->setFixedWidth(d->m_popupItemSize.width());
+     connect(this, SIGNAL(activated(int)), d, SLOT(slotActivated(int)));
+-    connect(this, SIGNAL(highlighted(int)),d, SLOT(slotHighlighted(int)));
+-    connect(this, SIGNAL(currentIndexChanged(int)),d, SLOT(slotCurrentIndexChanged(int)));
++    connect(this, SIGNAL(highlighted(int)), d, SLOT(slotHighlighted(int)));
++    connect(this, SIGNAL(currentIndexChanged(int)), d, SLOT(slotCurrentIndexChanged(int)));
+ }
+ 
+ void KColorComboBox::setColorList(const QList<QColor> &list)
+@@ -124,7 +128,7 @@ void KColorComboBox::addColor(const QColor &color)
+     Q_D(KColorComboBox);
+     d->m_colorList.append(color);
+     addItem(QString());
+-    setItemData(d->m_colorList.count()-1 , d->m_colorList.back(), KColorComboBoxDelegate::ColorRole);
++    setItemData(d->m_colorList.count() - 1, d->m_colorList.back(), KColorComboBoxDelegate::ColorRole);
+     update();
+ }
+ 
+@@ -145,7 +149,7 @@ void KColorComboBox::setPopupItemSize(const QSize &size)
+ {
+     Q_D(KColorComboBox);
+ 
+-    //d->m_popupItemSize = size;
++    // d->m_popupItemSize = size;
+     d->m_popupItemSize = size.expandedTo(this->size());
+     g_size = d->m_popupItemSize;
+     view()->setFixedWidth(d->m_popupItemSize.width());
+@@ -171,14 +175,11 @@ void KColorComboBox::paintEvent(QPaintEvent *event)
+     QRect frame = this->rect();
+     painter.setRenderHint(QPainter::Antialiasing);
+     painter.setPen(Qt::transparent);
+-    if(d->m_currentColor.isValid())
++    if (d->m_currentColor.isValid())
+         painter.setBrush(d->m_currentColor);
+-    if(d->m_comboType == KColorComboBox::Circle)
+-    {
++    if (d->m_comboType == KColorComboBox::Circle) {
+         painter.drawEllipse(frame.adjusted(1, 1, -1, -1));
+-    }
+-    else
+-    {
++    } else {
+         painter.drawRoundedRect(frame.adjusted(1, 1, -1, -1), d->m_borderRadius, d->m_borderRadius);
+     }
+ }
+@@ -190,13 +191,13 @@ void KColorComboBox::resizeEvent(QResizeEvent *event)
+ }
+ 
+ KColorComboBoxPrivate::KColorComboBoxPrivate(KColorComboBox *parent)
+-    :q_ptr(parent),
+-      m_comboType(KColorComboBox::Circle),
+-      m_popupItemSize(defaultPopupItemSize)
++    : q_ptr(parent)
++    , m_comboType(KColorComboBox::Circle)
++    , m_popupItemSize(defaultPopupItemSize)
+ {
+     setParent(parent);
+     m_borderRadius = ThemeController::getRadiusFromDT("kradius-min");
+-    if(m_borderRadius == -1)
++    if (m_borderRadius == -1)
+         m_borderRadius = 4;
+ }
+ 
+@@ -206,9 +207,9 @@ void KColorComboBoxPrivate::updateList()
+     while (q->count()) {
+         q->removeItem(0);
+     }
+-    for (int i = 0 ; i < m_colorList.count(); ++i) {
++    for (int i = 0; i < m_colorList.count(); ++i) {
+         q->addItem(QString());
+-        q->setItemData(i , m_colorList[i], KColorComboBoxDelegate::ColorRole);
++        q->setItemData(i, m_colorList[i], KColorComboBoxDelegate::ColorRole);
+     }
+     q->update();
+ }
+@@ -240,9 +241,9 @@ void KColorComboBoxPrivate::slotCurrentIndexChanged(int index)
+     Q_EMIT q->currentColorChanged(m_currentColor);
+ }
+ 
+-KColorComboBoxDelegate::KColorComboBoxDelegate(QObject *parent,KColorComboBox*combo)
+-    :QStyledItemDelegate(parent),
+-      m_combo(combo)
++KColorComboBoxDelegate::KColorComboBoxDelegate(QObject *parent, KColorComboBox *combo)
++    : QStyledItemDelegate(parent)
++    , m_combo(combo)
+ {
+ }
+ 
+@@ -250,13 +251,11 @@ void KColorComboBoxDelegate::paint(QPainter *painter, const QStyleOptionViewItem
+ {
+     auto variant = index.data(ItemRoles::ColorRole);
+     auto color = variant.value<QColor>();
+-    auto paintRect = option.rect.adjusted(5,5,-5,-5);
++    auto paintRect = option.rect.adjusted(5, 5, -5, -5);
+ 
+     switch (m_combo->comboType()) {
+-    case KColorComboBox::Circle:
+-    {
+-        if(color.isValid())
+-        {
++    case KColorComboBox::Circle: {
++        if (color.isValid()) {
+             painter->save();
+             painter->setRenderHint(QPainter::Antialiasing);
+             painter->setPen(Qt::NoPen);
+@@ -264,41 +263,35 @@ void KColorComboBoxDelegate::paint(QPainter *painter, const QStyleOptionViewItem
+             painter->drawEllipse(paintRect);
+             painter->restore();
+         }
+-        if(option.state & (QStyle::State_MouseOver | QStyle::State_Selected))
+-        {
++        if (option.state & (QStyle::State_MouseOver | QStyle::State_Selected)) {
+             painter->save();
+             painter->setRenderHint(QPainter::Antialiasing);
+             painter->setPen(Qt::NoPen);
+             painter->setBrush(Qt::white);
+-            QRect subRect(paintRect.top(),paintRect.left(),paintRect.width()/2,paintRect.height()/2);
++            QRect subRect(paintRect.top(), paintRect.left(), paintRect.width() / 2, paintRect.height() / 2);
+             subRect.moveCenter(paintRect.center());
+             painter->drawEllipse(subRect);
+             painter->restore();
+         }
+         break;
+     }
+-    case KColorComboBox::RoundedRect:
+-    {
+-        if(color.isValid())
+-        {
++    case KColorComboBox::RoundedRect: {
++        if (color.isValid()) {
+             painter->save();
+             painter->setRenderHint(QPainter::Antialiasing);
+-            if(option.state & (QStyle::State_MouseOver | QStyle::State_Selected))
+-            {
++            if (option.state & (QStyle::State_MouseOver | QStyle::State_Selected)) {
+                 QPen pen;
+                 pen.setWidth(2);
+                 pen.setBrush(Qt::white);
+                 painter->setPen(pen);
+-            }
+-            else
+-            {
++            } else {
+                 painter->setPen(Qt::NoPen);
+             }
+             painter->setBrush(color);
+             int radius = ThemeController::getRadiusFromDT("kradius-min");
+-            if(radius == -1)
++            if (radius == -1)
+                 radius = 4;
+-            painter->drawRoundedRect(paintRect,radius,radius);
++            painter->drawRoundedRect(paintRect, radius, radius);
+             painter->restore();
+         }
+         break;
+@@ -315,10 +308,10 @@ QSize KColorComboBoxDelegate::sizeHint(const QStyleOptionViewItem &option, const
+ 
+ QSize KComboStyle::sizeFromContents(QStyle::ContentsType type, const QStyleOption *option, const QSize &contentsSize, const QWidget *widget) const
+ {
+-    if(type == QStyle::CT_ComboBox)
++    if (type == QStyle::CT_ComboBox)
+         return g_size;
+ 
+-    return QProxyStyle::sizeFromContents(type,option,contentsSize,widget);
++    return QProxyStyle::sizeFromContents(type, option, contentsSize, widget);
+ }
+ 
+ }
+diff --git a/kysdk-qtwidgets/src/kcolorcombobox.h b/kysdk-qtwidgets/src/kcolorcombobox.h
+index 19af442..e34de1f 100644
+--- a/kysdk-qtwidgets/src/kcolorcombobox.h
++++ b/kysdk-qtwidgets/src/kcolorcombobox.h
+@@ -23,12 +23,13 @@
+ #ifndef KCOLORCOMBOBOX_H
+ #define KCOLORCOMBOBOX_H
+ 
++#include "gui_g.h"
++#include <QColor>
+ #include <QComboBox>
+ #include <QList>
+-#include <QColor>
+-#include "gui_g.h"
+ 
+-namespace kdk {
++namespace kdk
++{
+ 
+ /**
+  *  @defgroup ContainerModules
+@@ -44,12 +45,10 @@ class GUI_EXPORT KColorComboBox : public QComboBox
+     Q_OBJECT
+ 
+ public:
+-
+     /**
+      * @brief 指定显示样式,圆形或者圆角矩形
+      */
+-    enum ComboType
+-    {
++    enum ComboType {
+         Circle,
+         RoundedRect
+     };
+@@ -60,7 +59,7 @@ public:
+      * @brief 以列表形式添加颜色选项
+      * @param list
+      */
+-    void setColorList(const QList<QColor>& list);
++    void setColorList(const QList<QColor> &list);
+ 
+     /**
+      * @brief 获取颜色列表
+@@ -72,13 +71,13 @@ public:
+      * @brief 添加颜色选项
+      * @param color
+      */
+-    void addColor(const QColor& color);
++    void addColor(const QColor &color);
+ 
+     /**
+      * @brief 设置显示样式
+      * @param type
+      */
+-    void setComboType(const ComboType& type);
++    void setComboType(const ComboType &type);
+ 
+     /**
+      * @brief 获取显示样式
+@@ -90,7 +89,7 @@ public:
+      * @brief 设置item尺寸
+      * @param size
+      */
+-    void setPopupItemSize(const QSize&size);
++    void setPopupItemSize(const QSize &size);
+ 
+     /**
+      * @brief 返回item尺寸
+@@ -98,12 +97,11 @@ public:
+      */
+     QSize popupItemSzie();
+ 
+-
+ Q_SIGNALS:
+ 
+-    void activated(const QColor& color);
+-    void currentColorChanged(const QColor& color);
+-    void highlighted(const QColor& color);
++    void activated(const QColor &color);
++    void currentColorChanged(const QColor &color);
++    void highlighted(const QColor &color);
+ 
+ protected:
+     void paintEvent(QPaintEvent *event) override;
+@@ -111,7 +109,7 @@ protected:
+ 
+ private:
+     Q_DECLARE_PRIVATE(KColorComboBox)
+-    KColorComboBoxPrivate*const d_ptr;
++    KColorComboBoxPrivate *const d_ptr;
+ };
+ }
+ #endif // KCOLORCOMBOBOX_H
+diff --git a/kysdk-qtwidgets/src/kcomboboxwidget.cpp b/kysdk-qtwidgets/src/kcomboboxwidget.cpp
+index 23b7d5a..9c15519 100644
+--- a/kysdk-qtwidgets/src/kcomboboxwidget.cpp
++++ b/kysdk-qtwidgets/src/kcomboboxwidget.cpp
+@@ -21,34 +21,37 @@
+  */
+ 
+ #include "kcomboboxwidget.h"
++#include "klabel.h"
++#include "ktoolbutton.h"
+ #include "themeController.h"
++#include <QApplication>
++#include <QDebug>
++#include <QEvent>
+ #include <QHBoxLayout>
+-#include <QStyleOption>
++#include <QList>
++#include <QMenu>
++#include <QMouseEvent>
+ #include <QPainter>
+-#include <QDebug>
++#include <QPainterPath>
+ #include <QProxyStyle>
++#include <QStyleOption>
+ #include <QToolButton>
+-#include <QMenu>
+ #include <QWidgetAction>
+-#include <QMouseEvent>
+-#include <QEvent>
+-#include <QApplication>
+-#include <QList>
+-#include <QPainterPath>
+-#include "klabel.h"
+-#include "ktoolbutton.h"
+ 
+-namespace kdk {
++namespace kdk
++{
+ 
+ class Q_DECL_HIDDEN ProxyStyle : public QProxyStyle
+ {
+     Q_OBJECT
+ public:
+-    ProxyStyle(QWidget *parent = nullptr) {}
++    ProxyStyle(QWidget *parent = nullptr)
++    {
++    }
+     void drawComplexControl(ComplexControl control, const QStyleOptionComplex *option, QPainter *painter, const QWidget *widget = nullptr) const override;
+ };
+ 
+-class Q_DECL_HIDDEN MenuItem : public QToolButton ,public ThemeController
++class Q_DECL_HIDDEN MenuItem : public QToolButton, public ThemeController
+ {
+     Q_OBJECT
+ public:
+@@ -66,14 +69,14 @@ Q_SIGNALS:
+     void hideLabelIcon(int id);
+ 
+ private:
+-    QLabel       *m_pTextLabel;
+-    QLabel       *m_pMenuIconLabel;
+-    QHBoxLayout  *m_pHLayout;
+-    int           m_id = 0;
++    QLabel *m_pTextLabel;
++    QLabel *m_pMenuIconLabel;
++    QHBoxLayout *m_pHLayout;
++    int m_id = 0;
+     ProxyStyle *m_proxyStyle = nullptr;
+ };
+ 
+-class Q_DECL_HIDDEN KComboBoxWidgetPrivate : public QObject ,public ThemeController
++class Q_DECL_HIDDEN KComboBoxWidgetPrivate : public QObject, public ThemeController
+ {
+     Q_OBJECT
+     Q_DECLARE_PUBLIC(KComboBoxWidget)
+@@ -85,37 +88,35 @@ public:
+ 
+ private:
+     KComboBoxWidget *q_ptr;
+-    QLabel      *m_pMainLabel;
+-    KLabel      *m_pSubLabel;
+-    QLabel      *m_pIconLabel;
++    QLabel *m_pMainLabel;
++    KLabel *m_pSubLabel;
++    QLabel *m_pIconLabel;
+     QHBoxLayout *m_pHLayout;
+-    bool        m_mouseEnter = false;
++    bool m_mouseEnter = false;
+     QStringList m_stringList;
+     QStringList m_chosenList;
+     QMenu *m_pMenu;
+ };
+ 
+ KComboBoxWidget::KComboBoxWidget(QWidget *parent)
+-    :QWidget(parent)
+-    ,d_ptr(new KComboBoxWidgetPrivate(this))
++    : QWidget(parent)
++    , d_ptr(new KComboBoxWidgetPrivate(this))
+ {
+-
+ }
+ 
+ void KComboBoxWidget::setStringList(QStringList list)
+ {
+     Q_D(KComboBoxWidget);
+     d->m_stringList = list;
+-    for(int i = 0 ;i < list.count() ; i++)
+-    {
++    for (int i = 0; i < list.count(); i++) {
+         MenuItem *item = new MenuItem(list[i], i, this);
+-        connect(item, &MenuItem::showLabelIcon, this, [=](int index){
+-            if(!d->m_chosenList.contains(d->m_stringList.at(index)))
++        connect(item, &MenuItem::showLabelIcon, this, [=](int index) {
++            if (!d->m_chosenList.contains(d->m_stringList.at(index)))
+                 d->m_chosenList.append(d->m_stringList.at(index));
+             d->setChosenString();
+         });
+-        connect(item, &MenuItem::hideLabelIcon, this, [=](int index){
+-            if(d->m_chosenList.contains(d->m_stringList.at(index)))
++        connect(item, &MenuItem::hideLabelIcon, this, [=](int index) {
++            if (d->m_chosenList.contains(d->m_stringList.at(index)))
+                 d->m_chosenList.removeOne(d->m_stringList.at(index));
+             d->setChosenString();
+         });
+@@ -177,20 +178,15 @@ void KComboBoxWidget::paintEvent(QPaintEvent *event)
+     opt.init(this);
+     QPainter p(this);
+     QPainterPath path;
+-    opt.rect.adjust(0,0,0,0);
++    opt.rect.adjust(0, 0, 0, 0);
+ 
+-    if(!opt.state.testFlag(QStyle::State_Enabled))
+-    {
+-        p.setBrush(ThemeController::getPaletteColorFromDT("button",QPalette::Disabled));
+-    }
+-    else
+-    {
++    if (!opt.state.testFlag(QStyle::State_Enabled)) {
++        p.setBrush(ThemeController::getPaletteColorFromDT("button", QPalette::Disabled));
++    } else {
+ 
+-        if (d->m_mouseEnter)
+-        {
++        if (d->m_mouseEnter) {
+             p.setBrush(ThemeController::getPaletteColorFromDT("midlight"));
+-        } else
+-        {
++        } else {
+             p.setBrush(ThemeController::getPaletteColorFromDT("button"));
+         }
+     }
+@@ -198,15 +194,15 @@ void KComboBoxWidget::paintEvent(QPaintEvent *event)
+     p.setOpacity(1);
+     p.setPen(Qt::NoPen);
+     int radius = ThemeController::getRadiusFromDT("kradius-normal");
+-    if(radius == -1)
++    if (radius == -1)
+         radius = 6;
+     p.drawRoundedRect(opt.rect, radius, radius);
+-    p.setRenderHint(QPainter::Antialiasing); //反锯齿
++    p.setRenderHint(QPainter::Antialiasing); // 反锯齿
+     setProperty("blurRegion", QRegion(path.toFillPolygon().toPolygon()));
+ }
+ 
+ KComboBoxWidgetPrivate::KComboBoxWidgetPrivate(KComboBoxWidget *parent)
+-    :q_ptr(parent)
++    : q_ptr(parent)
+ {
+     Q_Q(KComboBoxWidget);
+     initLayout();
+@@ -244,7 +240,7 @@ void KComboBoxWidgetPrivate::initLayout()
+ 
+     q->setLayout(m_pHLayout);
+ 
+-    connect(q,&KComboBoxWidget::comBoxWidgetClicked,q,[=]{
++    connect(q, &KComboBoxWidget::comBoxWidgetClicked, q, [=] {
+         if (!m_pMenu->isVisible()) {
+             m_pMenu->exec(q->mapToGlobal(QPoint(0, q->rect().height())));
+         } else {
+@@ -256,12 +252,11 @@ void KComboBoxWidgetPrivate::initLayout()
+ void KComboBoxWidgetPrivate::setChosenString()
+ {
+     Q_Q(KComboBoxWidget);
+-    QStringList list = reorderListBasedOnSelection(m_stringList,m_chosenList);
++    QStringList list = reorderListBasedOnSelection(m_stringList, m_chosenList);
+     QString text;
+-    for(int i = 0 ; i<list.count(); i++)
+-    {
++    for (int i = 0; i < list.count(); i++) {
+         text.append(list.at(i));
+-        if( i < list.count() - 1)
++        if (i < list.count() - 1)
+             text.append(" ");
+     }
+ 
+@@ -293,8 +288,7 @@ QStringList KComboBoxWidgetPrivate::reorderListBasedOnSelection(const QStringLis
+ void ProxyStyle::drawComplexControl(QStyle::ComplexControl control, const QStyleOptionComplex *option, QPainter *painter, const QWidget *widget) const
+ {
+     switch (control) {
+-    case CC_ToolButton:
+-    {
++    case CC_ToolButton: {
+         if (const QStyleOptionComplex *f = qstyleoption_cast<const QStyleOptionComplex *>(option)) {
+             const bool hover = f->state & State_MouseOver;
+             if (hover) {
+@@ -302,11 +296,11 @@ void ProxyStyle::drawComplexControl(QStyle::ComplexControl control, const QStyle
+                 painter->setRenderHint(QPainter::Antialiasing, true);
+                 painter->setPen(Qt::NoPen);
+                 QStyleOption opt;
+-//                QColor color = opt.palette.color(QPalette::Highlight);
++                //                QColor color = opt.palette.color(QPalette::Highlight);
+                 QColor color = ThemeController::getPaletteColorFromDT("highlight");
+                 painter->setBrush(color);
+                 int radius = ThemeController::getRadiusFromDT("kradius-normal");
+-                if(radius == -1)
++                if (radius == -1)
+                     radius = 6;
+                 painter->drawRoundedRect(option->rect, radius, radius);
+                 painter->restore();
+@@ -321,14 +315,14 @@ void ProxyStyle::drawComplexControl(QStyle::ComplexControl control, const QStyle
+ }
+ 
+ MenuItem::MenuItem(QString week, int id, QWidget *parent)
+-    :QToolButton(parent)
+-    ,m_id(id)
++    : QToolButton(parent)
++    , m_id(id)
+ {
+     m_proxyStyle = new ProxyStyle(this);
+     this->setStyle(m_proxyStyle);
+     m_pTextLabel = new QLabel();
+     m_pTextLabel->setText(week);
+-    this->setAutoRaise(true); //设置默认状态背景透明
++    this->setAutoRaise(true); // 设置默认状态背景透明
+ 
+     m_pMenuIconLabel = new QLabel();
+ 
+@@ -349,19 +343,16 @@ MenuItem::MenuItem(QString week, int id, QWidget *parent)
+     m_pMenuIconLabel->setSizePolicy(policy);
+     m_pMenuIconLabel->setVisible(false);
+ 
+-    connect(m_gsetting, &QGSettings::changed, this, [=](const QString & key) {
+-            if (ThemeController::themeMode() == DarkTheme)
+-            {
+-                QPalette palette;
+-                palette.setColor(QPalette::Active, QPalette::ButtonText,Qt::white);
+-                m_pTextLabel->setPalette(palette);
+-            }
+-            else
+-            {
+-                QPalette palette;
+-                palette.setColor(QPalette::Active, QPalette::ButtonText,Qt::black);
+-                m_pTextLabel->setPalette(palette);
+-            }
++    connect(m_gsetting, &QGSettings::changed, this, [=](const QString &key) {
++        if (ThemeController::themeMode() == DarkTheme) {
++            QPalette palette;
++            palette.setColor(QPalette::Active, QPalette::ButtonText, Qt::white);
++            m_pTextLabel->setPalette(palette);
++        } else {
++            QPalette palette;
++            palette.setColor(QPalette::Active, QPalette::ButtonText, Qt::black);
++            m_pTextLabel->setPalette(palette);
++        }
+     });
+ }
+ 
+@@ -389,16 +380,15 @@ void MenuItem::enterEvent(QEvent *e)
+     QApplication::postEvent(m_pMenuIconLabel, new QEvent(QEvent::Enter));
+ 
+     QPalette palette;
+-    palette.setColor(QPalette::Active, QPalette::ButtonText,Qt::white);
++    palette.setColor(QPalette::Active, QPalette::ButtonText, Qt::white);
+     m_pTextLabel->setPalette(palette);
+ }
+ 
+ void MenuItem::leaveEvent(QEvent *e)
+ {
+-    if (ThemeController::themeMode() == LightTheme)
+-    {
++    if (ThemeController::themeMode() == LightTheme) {
+         QPalette palette;
+-        palette.setColor(QPalette::Active, QPalette::ButtonText,Qt::black);
++        palette.setColor(QPalette::Active, QPalette::ButtonText, Qt::black);
+         m_pTextLabel->setPalette(palette);
+     }
+     QApplication::postEvent(m_pMenuIconLabel, new QEvent(QEvent::Leave));
+diff --git a/kysdk-qtwidgets/src/kcomboboxwidget.h b/kysdk-qtwidgets/src/kcomboboxwidget.h
+index d5acd24..64b961d 100644
+--- a/kysdk-qtwidgets/src/kcomboboxwidget.h
++++ b/kysdk-qtwidgets/src/kcomboboxwidget.h
+@@ -24,11 +24,12 @@
+ #define KCOMBOBOXWIDGET_H
+ 
+ #include "gui_g.h"
+-#include <QWidget>
+ #include <QLabel>
+ #include <QToolButton>
++#include <QWidget>
+ 
+-namespace kdk {
++namespace kdk
++{
+ 
+ /**
+  * @brief 可选择多个或者单个选项
+@@ -64,6 +65,7 @@ public:
+      * @return
+      */
+     QMenu *menu();
++
+ protected:
+     void mouseReleaseEvent(QMouseEvent *event);
+     void mousePressEvent(QMouseEvent *event);
+@@ -74,7 +76,7 @@ signals:
+     void comBoxWidgetClicked();
+ 
+ private:
+-    KComboBoxWidgetPrivate* const d_ptr;
++    KComboBoxWidgetPrivate *const d_ptr;
+     Q_DECLARE_PRIVATE(KComboBoxWidget)
+ };
+ }
+diff --git a/kysdk-qtwidgets/src/kcommentpanel.cpp b/kysdk-qtwidgets/src/kcommentpanel.cpp
+index 3dc448d..0843c69 100644
+--- a/kysdk-qtwidgets/src/kcommentpanel.cpp
++++ b/kysdk-qtwidgets/src/kcommentpanel.cpp
+@@ -23,17 +23,18 @@
+ #include "kcommentpanel.h"
+ #include "themeController.h"
+ #include <QBoxLayout>
+-#include <QLabel>
+ #include <QIcon>
++#include <QLabel>
+ #include <QPainter>
+ 
+ namespace kdk
+ {
+-class StarWidget: public QWidget
++class StarWidget : public QWidget
+ {
+ public:
+-    StarWidget(QWidget*parent);
++    StarWidget(QWidget *parent);
+     void setGrade(StarLevel level);
++
+ private:
+     void doFresh();
+     StarLevel m_starLevel;
+@@ -45,12 +46,12 @@ private:
+ };
+ 
+ StarWidget::StarWidget(QWidget *parent)
+-    :QWidget(parent),
+-      m_starLevel(LevelZero)
++    : QWidget(parent)
++    , m_starLevel(LevelZero)
+ {
+-    setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed);
++    setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
+     QHBoxLayout *hLayout = new QHBoxLayout(this);
+-    hLayout->setContentsMargins(0,0,0,0);
++    hLayout->setContentsMargins(0, 0, 0, 0);
+     hLayout->setSpacing(2);
+     m_plbl1 = new QLabel(this);
+     m_plbl2 = new QLabel(this);
+@@ -62,11 +63,11 @@ StarWidget::StarWidget(QWidget *parent)
+     m_plbl3->setAlignment(Qt::AlignTop);
+     m_plbl4->setAlignment(Qt::AlignTop);
+     m_plbl5->setAlignment(Qt::AlignTop);
+-    m_plbl1->setFixedSize(14,14);
+-    m_plbl2->setFixedSize(14,14);
+-    m_plbl3->setFixedSize(14,14);
+-    m_plbl4->setFixedSize(14,14);
+-    m_plbl5->setFixedSize(14,14);
++    m_plbl1->setFixedSize(14, 14);
++    m_plbl2->setFixedSize(14, 14);
++    m_plbl3->setFixedSize(14, 14);
++    m_plbl4->setFixedSize(14, 14);
++    m_plbl5->setFixedSize(14, 14);
+     hLayout->addWidget(m_plbl1);
+     hLayout->addWidget(m_plbl2);
+     hLayout->addWidget(m_plbl3);
+@@ -76,8 +77,7 @@ StarWidget::StarWidget(QWidget *parent)
+ 
+ void StarWidget::setGrade(StarLevel level)
+ {
+-    if(level != m_starLevel)
+-    {
++    if (level != m_starLevel) {
+         m_starLevel = level;
+         doFresh();
+     }
+@@ -85,79 +85,76 @@ void StarWidget::setGrade(StarLevel level)
+ 
+ void StarWidget::doFresh()
+ {
+-    switch(m_starLevel)
+-    {
++    switch (m_starLevel) {
+     case LevelZero:
+         break;
+     case LevelOne:
+-        m_plbl1->setPixmap(QIcon::fromTheme("ukui-starred-on-symbolic").pixmap(12,12));
+-        m_plbl2->setPixmap(QIcon::fromTheme("ukui-starred-symbolic").pixmap(12,12));
+-        m_plbl3->setPixmap(QIcon::fromTheme("ukui-starred-symbolic").pixmap(12,12));
+-        m_plbl4->setPixmap(QIcon::fromTheme("ukui-starred-symbolic").pixmap(12,12));
+-        m_plbl5->setPixmap(QIcon::fromTheme("ukui-starred-symbolic").pixmap(12,12));
++        m_plbl1->setPixmap(QIcon::fromTheme("ukui-starred-on-symbolic").pixmap(12, 12));
++        m_plbl2->setPixmap(QIcon::fromTheme("ukui-starred-symbolic").pixmap(12, 12));
++        m_plbl3->setPixmap(QIcon::fromTheme("ukui-starred-symbolic").pixmap(12, 12));
++        m_plbl4->setPixmap(QIcon::fromTheme("ukui-starred-symbolic").pixmap(12, 12));
++        m_plbl5->setPixmap(QIcon::fromTheme("ukui-starred-symbolic").pixmap(12, 12));
+         break;
+     case LevelTwo:
+-        m_plbl1->setPixmap(QIcon::fromTheme("ukui-starred-on-symbolic").pixmap(12,12));
+-        m_plbl2->setPixmap(QIcon::fromTheme("ukui-starred-on-symbolic").pixmap(12,12));
+-        m_plbl3->setPixmap(QIcon::fromTheme("ukui-starred-symbolic").pixmap(12,12));
+-        m_plbl4->setPixmap(QIcon::fromTheme("ukui-starred-symbolic").pixmap(12,12));
+-        m_plbl5->setPixmap(QIcon::fromTheme("ukui-starred-symbolic").pixmap(12,12));
++        m_plbl1->setPixmap(QIcon::fromTheme("ukui-starred-on-symbolic").pixmap(12, 12));
++        m_plbl2->setPixmap(QIcon::fromTheme("ukui-starred-on-symbolic").pixmap(12, 12));
++        m_plbl3->setPixmap(QIcon::fromTheme("ukui-starred-symbolic").pixmap(12, 12));
++        m_plbl4->setPixmap(QIcon::fromTheme("ukui-starred-symbolic").pixmap(12, 12));
++        m_plbl5->setPixmap(QIcon::fromTheme("ukui-starred-symbolic").pixmap(12, 12));
+         break;
+     case LevelThree:
+-        m_plbl1->setPixmap(QIcon::fromTheme("ukui-starred-on-symbolic").pixmap(12,12));
+-        m_plbl2->setPixmap(QIcon::fromTheme("ukui-starred-on-symbolic").pixmap(12,12));
+-        m_plbl3->setPixmap(QIcon::fromTheme("ukui-starred-on-symbolic").pixmap(12,12));
+-        m_plbl4->setPixmap(QIcon::fromTheme("ukui-starred-symbolic").pixmap(12,12));
+-        m_plbl5->setPixmap(QIcon::fromTheme("ukui-starred-symbolic").pixmap(12,12));
++        m_plbl1->setPixmap(QIcon::fromTheme("ukui-starred-on-symbolic").pixmap(12, 12));
++        m_plbl2->setPixmap(QIcon::fromTheme("ukui-starred-on-symbolic").pixmap(12, 12));
++        m_plbl3->setPixmap(QIcon::fromTheme("ukui-starred-on-symbolic").pixmap(12, 12));
++        m_plbl4->setPixmap(QIcon::fromTheme("ukui-starred-symbolic").pixmap(12, 12));
++        m_plbl5->setPixmap(QIcon::fromTheme("ukui-starred-symbolic").pixmap(12, 12));
+         break;
+     case LevelFour:
+-        m_plbl1->setPixmap(QIcon::fromTheme("ukui-starred-on-symbolic").pixmap(12,12));
+-        m_plbl2->setPixmap(QIcon::fromTheme("ukui-starred-on-symbolic").pixmap(12,12));
+-        m_plbl3->setPixmap(QIcon::fromTheme("ukui-starred-on-symbolic").pixmap(12,12));
+-        m_plbl4->setPixmap(QIcon::fromTheme("ukui-starred-on-symbolic").pixmap(12,12));
+-        m_plbl5->setPixmap(QIcon::fromTheme("ukui-starred-symbolic").pixmap(12,12));
++        m_plbl1->setPixmap(QIcon::fromTheme("ukui-starred-on-symbolic").pixmap(12, 12));
++        m_plbl2->setPixmap(QIcon::fromTheme("ukui-starred-on-symbolic").pixmap(12, 12));
++        m_plbl3->setPixmap(QIcon::fromTheme("ukui-starred-on-symbolic").pixmap(12, 12));
++        m_plbl4->setPixmap(QIcon::fromTheme("ukui-starred-on-symbolic").pixmap(12, 12));
++        m_plbl5->setPixmap(QIcon::fromTheme("ukui-starred-symbolic").pixmap(12, 12));
+         break;
+     case LevelFive:
+-        m_plbl1->setPixmap(QIcon::fromTheme("ukui-starred-on-symbolic").pixmap(12,12));
+-        m_plbl2->setPixmap(QIcon::fromTheme("ukui-starred-on-symbolic").pixmap(12,12));
+-        m_plbl3->setPixmap(QIcon::fromTheme("ukui-starred-on-symbolic").pixmap(12,12));
+-        m_plbl4->setPixmap(QIcon::fromTheme("ukui-starred-on-symbolic").pixmap(12,12));
+-        m_plbl5->setPixmap(QIcon::fromTheme("ukui-starred-on-symbolic").pixmap(12,12));
++        m_plbl1->setPixmap(QIcon::fromTheme("ukui-starred-on-symbolic").pixmap(12, 12));
++        m_plbl2->setPixmap(QIcon::fromTheme("ukui-starred-on-symbolic").pixmap(12, 12));
++        m_plbl3->setPixmap(QIcon::fromTheme("ukui-starred-on-symbolic").pixmap(12, 12));
++        m_plbl4->setPixmap(QIcon::fromTheme("ukui-starred-on-symbolic").pixmap(12, 12));
++        m_plbl5->setPixmap(QIcon::fromTheme("ukui-starred-on-symbolic").pixmap(12, 12));
+         break;
+     }
+-
+ }
+ 
+-class KCommentPanelPrivate :public QObject,public ThemeController
++class KCommentPanelPrivate : public QObject, public ThemeController
+ {
+-     Q_DECLARE_PUBLIC(KCommentPanel)
++    Q_DECLARE_PUBLIC(KCommentPanel)
+     Q_OBJECT
+ 
+ public:
+-    KCommentPanelPrivate(KCommentPanel*parent);
++    KCommentPanelPrivate(KCommentPanel *parent);
+     void changeTheme();
+ 
+ private:
+-    QLabel* m_pContentLabel;
+-    QLabel* m_pPicLabel;
+-    QLabel* m_pTimeLabel;
+-    QLabel* m_pNameLabel;
+-    StarWidget* m_pStarWidget;
++    QLabel *m_pContentLabel;
++    QLabel *m_pPicLabel;
++    QLabel *m_pTimeLabel;
++    QLabel *m_pNameLabel;
++    StarWidget *m_pStarWidget;
+     QColor m_color;
+-    KCommentPanel* q_ptr;
++    KCommentPanel *q_ptr;
+ };
+ 
+-KCommentPanel::KCommentPanel(QWidget *parent) :
+-    QWidget(parent),
+-    d_ptr(new KCommentPanelPrivate(this))
++KCommentPanel::KCommentPanel(QWidget *parent)
++    : QWidget(parent)
++    , d_ptr(new KCommentPanelPrivate(this))
+ {
+-
+ }
+ 
+ void KCommentPanel::setIcon(const QIcon &icon)
+ {
+     Q_D(KCommentPanel);
+-    d->m_pPicLabel->setPixmap(icon.pixmap(50,50));
++    d->m_pPicLabel->setPixmap(icon.pixmap(50, 50));
+ }
+ 
+ void KCommentPanel::setTime(const QString &str)
+@@ -189,49 +186,50 @@ void KCommentPanel::paintEvent(QPaintEvent *event)
+     Q_D(KCommentPanel);
+ 
+     QPainter painter(this);
+-    painter.setRenderHint(QPainter::Antialiasing);  // 反锯齿;
++    painter.setRenderHint(QPainter::Antialiasing); // 反锯齿;
+     painter.setPen(Qt::NoPen);
+     painter.setBrush(d->m_color);
+ 
+-    QRect rect = this->rect(); rect.setWidth(rect.width() );
++    QRect rect = this->rect();
++    rect.setWidth(rect.width());
+     rect.setHeight(rect.height());
+ 
+     int radius = ThemeController::getRadiusFromDT("kradius-normal");
+-    if(radius == -1)
++    if (radius == -1)
+         radius = 6;
+     painter.drawRoundedRect(rect, radius, radius);
+ }
+ 
+ KCommentPanelPrivate::KCommentPanelPrivate(KCommentPanel *parent)
+-    :q_ptr(parent)
++    : q_ptr(parent)
+ {
+     Q_Q(KCommentPanel);
+-    QVBoxLayout* mainLayout = new QVBoxLayout(q);
+-    mainLayout->setContentsMargins(16,16,16,16);
+-    QHBoxLayout* controlLayout = new QHBoxLayout;
++    QVBoxLayout *mainLayout = new QVBoxLayout(q);
++    mainLayout->setContentsMargins(16, 16, 16, 16);
++    QHBoxLayout *controlLayout = new QHBoxLayout;
+     m_pPicLabel = new QLabel(q);
+-    m_pPicLabel->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed);
+-    m_pPicLabel->setFixedSize(50,50);
++    m_pPicLabel->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
++    m_pPicLabel->setFixedSize(50, 50);
+     controlLayout->addWidget(m_pPicLabel);
+ 
+-    QVBoxLayout* vLayout = new QVBoxLayout;
++    QVBoxLayout *vLayout = new QVBoxLayout;
+     vLayout->setSpacing(1);
+-    vLayout->setContentsMargins(0,0,0,0);
++    vLayout->setContentsMargins(0, 0, 0, 0);
+     controlLayout->addLayout(vLayout);
+ 
+-    QHBoxLayout*hLayout = new QHBoxLayout;
+-    hLayout->setContentsMargins(0,0,0,0);
++    QHBoxLayout *hLayout = new QHBoxLayout;
++    hLayout->setContentsMargins(0, 0, 0, 0);
+     m_pNameLabel = new QLabel(q);
+     m_pNameLabel->setAlignment(Qt::AlignBottom);
+-    m_pNameLabel->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed);
++    m_pNameLabel->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
+     m_pTimeLabel = new QLabel(q);
+-    m_pTimeLabel->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed);
++    m_pTimeLabel->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
+     hLayout->addWidget(m_pNameLabel);
+     hLayout->addStretch();
+     hLayout->addWidget(m_pTimeLabel);
+     vLayout->addLayout(hLayout);
+     hLayout = new QHBoxLayout;
+-    hLayout->setContentsMargins(0,0,0,0);
++    hLayout->setContentsMargins(0, 0, 0, 0);
+     m_pStarWidget = new StarWidget(q);
+     hLayout->addWidget(m_pStarWidget);
+     hLayout->addStretch();
+@@ -239,29 +237,25 @@ KCommentPanelPrivate::KCommentPanelPrivate(KCommentPanel *parent)
+     m_pContentLabel = new QLabel(q);
+     m_pContentLabel->setWordWrap(true);
+     m_pContentLabel->setAlignment(Qt::AlignTop);
+-    m_pContentLabel->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed);
++    m_pContentLabel->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
+     mainLayout->addLayout(controlLayout);
+     mainLayout->addWidget(m_pContentLabel);
+     mainLayout->addStretch();
+     changeTheme();
+ 
+-    connect(m_gsetting,&QGSettings::changed,this,&KCommentPanelPrivate::changeTheme);
+-
++    connect(m_gsetting, &QGSettings::changed, this, &KCommentPanelPrivate::changeTheme);
+ }
+ 
+ void KCommentPanelPrivate::changeTheme()
+ {
+     Q_Q(KCommentPanel);
+     initThemeStyle();
+-    if (ThemeController::themeMode() == LightTheme)
+-    {
++    if (ThemeController::themeMode() == LightTheme) {
+         m_pTimeLabel->setStyleSheet("font-size:14px;color:#8C8C8C;");
+         m_pNameLabel->setStyleSheet("font-size:16px;font-weight:500;color:#262626;");
+         m_color = QColor("#F5F5F5");
+         m_pContentLabel->setStyleSheet("color:#595959");
+-    }
+-    else
+-    {
++    } else {
+         m_pTimeLabel->setStyleSheet("font-size:14px;color:#737373;");
+         m_pNameLabel->setStyleSheet("font-size:16px;font-weight:500;color:#FFFFFF;");
+         m_color = QColor("#232426");
+@@ -272,4 +266,3 @@ void KCommentPanelPrivate::changeTheme()
+ }
+ #include "kcommentpanel.moc"
+ #include "moc_kcommentpanel.cpp"
+-
+diff --git a/kysdk-qtwidgets/src/kcommentpanel.h b/kysdk-qtwidgets/src/kcommentpanel.h
+index 0317626..bb08ed4 100644
+--- a/kysdk-qtwidgets/src/kcommentpanel.h
++++ b/kysdk-qtwidgets/src/kcommentpanel.h
+@@ -23,8 +23,8 @@
+ #ifndef KCOMMENTPANEL_H
+ #define KCOMMENTPANEL_H
+ 
+-#include <QWidget>
+ #include "gui_g.h"
++#include <QWidget>
+ 
+ namespace kdk
+ {
+@@ -37,8 +37,7 @@ class KCommentPanelPrivate;
+ /**
+  * @brief 提供六种评论等级
+  */
+-enum StarLevel
+-{
++enum StarLevel {
+     LevelZero = 0,
+     LevelOne,
+     LevelTwo,
+@@ -60,22 +59,22 @@ public:
+     /**
+      * @brief 设置评论用户头像
+      */
+-    void setIcon(const QIcon&);
++    void setIcon(const QIcon &);
+ 
+     /**
+      * @brief 设置评论时间
+      */
+-    void setTime(const QString&);
++    void setTime(const QString &);
+ 
+     /**
+      * @brief 设置评论用户昵称
+      */
+-    void setName(const QString&);
++    void setName(const QString &);
+ 
+     /**
+      * @brief 设置评论文本
+      */
+-    void setText(const QString&);
++    void setText(const QString &);
+ 
+     /**
+      * @brief 设置等级
+@@ -84,11 +83,11 @@ public:
+     void setGrade(StarLevel level);
+ 
+ protected:
+-    void paintEvent(QPaintEvent* event) override;
++    void paintEvent(QPaintEvent *event) override;
+ 
+ private:
+     Q_DECLARE_PRIVATE(KCommentPanel)
+-    KCommentPanelPrivate * const d_ptr;
++    KCommentPanelPrivate *const d_ptr;
+ };
+ }
+ 
+diff --git a/kysdk-qtwidgets/src/kcrumb.cpp b/kysdk-qtwidgets/src/kcrumb.cpp
+index ba606b8..5e2697f 100644
+--- a/kysdk-qtwidgets/src/kcrumb.cpp
++++ b/kysdk-qtwidgets/src/kcrumb.cpp
+@@ -21,16 +21,16 @@
+  */
+ 
+ #include "kcrumb.h"
+-#include <QPainter>
+-#include <QStyle>
+-#include <QStyleOptionTab>
+-#include <QFontMetrics>
++#include "kborderlessbutton.h"
++#include "kcustomtabbar.h"
++#include "themeController.h"
+ #include <QApplication>
+ #include <QDebug>
++#include <QFontMetrics>
++#include <QPainter>
+ #include <QProxyStyle>
+-#include "themeController.h"
+-#include "kcustomtabbar.h"
+-#include "kborderlessbutton.h"
++#include <QStyle>
++#include <QStyleOptionTab>
+ 
+ namespace kdk
+ {
+@@ -47,31 +47,32 @@ public:
+     QRect subElementRect(QStyle::SubElement element, const QStyleOption *option, const QWidget *widget) const override;
+ };
+ 
+-class Q_DECL_HIDDEN KCrumbPrivate : public QObject,public ThemeController
++class Q_DECL_HIDDEN KCrumbPrivate : public QObject, public ThemeController
+ {
+     Q_OBJECT
+     Q_DECLARE_PUBLIC(KCrumb)
+ 
+ public:
+-    KCrumbPrivate(KCrumb*parent);
++    KCrumbPrivate(KCrumb *parent);
+ 
+     void changeTheme();
++
+ private:
+-    KCrumb* q_ptr;
++    KCrumb *q_ptr;
+     QIcon m_icon;
+     bool m_isFlat;
+     QStringList m_stringList;
+ };
+ 
+ KCrumb::KCrumb(QWidget *parent)
+-    :KCustomTabBar(parent),
+-      d_ptr(new KCrumbPrivate(this))
++    : KCustomTabBar(parent)
++    , d_ptr(new KCrumbPrivate(this))
+ {
+     Q_D(KCrumb);
+     CrumbStyle *style = new CrumbStyle();
+     setStyle(style);
+ 
+-    connect(d->m_gsetting,&QGSettings::changed,this,[=]{
++    connect(d->m_gsetting, &QGSettings::changed, this, [=] {
+         d->changeTheme();
+         update();
+     });
+@@ -88,21 +89,21 @@ int KCrumb::addTab(const QIcon &icon, const QString &text)
+ {
+     Q_D(KCrumb);
+     d->m_stringList.append(text);
+-    return KCustomTabBar::addTab(icon,text);
++    return KCustomTabBar::addTab(icon, text);
+ }
+ 
+ int KCrumb::insertTab(int index, const QString &text)
+ {
+     Q_D(KCrumb);
+-    d->m_stringList.insert(index,text);
+-    return KCustomTabBar::insertTab(index,text);
++    d->m_stringList.insert(index, text);
++    return KCustomTabBar::insertTab(index, text);
+ }
+ 
+ int KCrumb::insertTab(int index, const QIcon &icon, const QString &text)
+ {
+     Q_D(KCrumb);
+-    d->m_stringList.insert(index,text);
+-    return insertTab(index,icon,text);
++    d->m_stringList.insert(index, text);
++    return insertTab(index, icon, text);
+ }
+ 
+ void KCrumb::removeTab(int index)
+@@ -115,8 +116,8 @@ void KCrumb::removeTab(int index)
+ void KCrumb::moveTab(int from, int to)
+ {
+     Q_D(KCrumb);
+-    d->m_stringList.move(from,to);
+-    KCustomTabBar::moveTab(from,to);
++    d->m_stringList.move(from, to);
++    KCustomTabBar::moveTab(from, to);
+ }
+ 
+ void KCrumb::setIcon(const QIcon &icon)
+@@ -165,9 +166,9 @@ QSize KCrumb::tabSizeHint(int index) const
+ 
+     QFontMetrics fm(font);
+     int width = fm.width(tabText(index));
+-    size.setWidth(width+40);
+-    if(index == 0 && !d->m_icon.isNull())
+-        size.setWidth(size.width()+50);
++    size.setWidth(width + 40);
++    if (index == 0 && !d->m_icon.isNull())
++        size.setWidth(size.width() + 50);
+     return size;
+ }
+ 
+@@ -184,120 +185,98 @@ void KCrumb::paintEvent(QPaintEvent *event)
+     QColor highLightColor = ThemeController::getPaletteColorFromDT("highlight");
+     QColor baseColor;
+     QColor focusColor;
+-    if(ThemeController::themeMode() == ThemeFlag::DarkTheme)
+-    {
+-        if(d->m_isFlat)
++    if (ThemeController::themeMode() == ThemeFlag::DarkTheme) {
++        if (d->m_isFlat)
+             baseColor = "#D9D9D9";
+         else
+             baseColor = "#47474A";
+-        focusColor =Qt::red;// "#D9D9D9";
+-    }
+-    else
+-    {
+-        if(d->m_isFlat)
++        focusColor = Qt::red; // "#D9D9D9";
++    } else {
++        if (d->m_isFlat)
+             baseColor = "#262626";
+         else
+             baseColor = "#B3B3B3";
+         focusColor = "#262626";
+     }
+ 
+-    int width=0;
+-    for(int i = 0 ; i < count(); i++)
+-    {
+-        width += fm.width(d->m_stringList.at(i))+40 ; 
++    int width = 0;
++    for (int i = 0; i < count(); i++) {
++        width += fm.width(d->m_stringList.at(i)) + 40;
+     }
+-    if(!d->m_icon.isNull())
+-        width+=50;
+-    int useWidth = fm.width(d->m_stringList.at(count()-1)) + 40;
++    if (!d->m_icon.isNull())
++        width += 50;
++    int useWidth = fm.width(d->m_stringList.at(count() - 1)) + 40;
+ 
+-    for(int i = 0 ; i < count(); i++)
+-    {
++    for (int i = 0; i < count(); i++) {
+         QRect rc = tabRect(i);
+         QStyleOptionTab option;
+         initStyleOption(&option, i);
+         p.setPen(Qt::NoPen);
+         p.drawRect(rc);
+-        if(QStyle::State_MouseOver & option.state)
++        if (QStyle::State_MouseOver & option.state)
+             p.setPen(highLightColor);
+-        else if(QStyle::State_Selected & option.state)
++        else if (QStyle::State_Selected & option.state)
+             p.setPen(focusColor);
+         else
+             p.setPen(baseColor);
+         p.setBrush(Qt::NoBrush);
+ 
+-        if(rect().width() >= width ) 
+-        {
+-            if(i == 0 && !d->m_icon.isNull())
+-            {
+-                p.drawPixmap(rc.left()+10,(rc.height()-24)/2,24,24,
+-                             d->m_icon.pixmap(24,24));
+-                p.drawText(rc.adjusted(30,0,-24,0),Qt::AlignCenter,d->m_stringList.at(i));
+-            }
+-            else
+-                p.drawText(rc.adjusted(0,0,-24,0),Qt::AlignCenter,d->m_stringList.at(i));
+-            if(i != count()-1)
+-                p.drawPixmap(rc.right()-24,(rc.height()-16)/2,16,16,
+-                             ThemeController::drawColoredPixmap(QIcon::fromTheme("ukui-end-symbolic").pixmap(16,16),baseColor));
+-        }
+-        else
+-        {
+-            if(i == 0 )
+-            {
+-                if(!d->m_icon.isNull())
+-                {
+-                    p.drawPixmap(rc.left()+10,(rc.height()-24)/2,24,24,
+-                                 d->m_icon.pixmap(24,24));
+-                    p.drawText(rc.adjusted(30,0,-24,0),Qt::AlignCenter,d->m_stringList.at(i));
+-                    useWidth +=fm.width(d->m_stringList.at(0)) + 90; ;
+-                }
+-                else
+-                {
+-                    p.drawText(rc.adjusted(0,0,-24,0),Qt::AlignCenter,d->m_stringList.at(i));
+-                    useWidth +=fm.width(d->m_stringList.at(0)) + 40;
++        if (rect().width() >= width) {
++            if (i == 0 && !d->m_icon.isNull()) {
++                p.drawPixmap(rc.left() + 10, (rc.height() - 24) / 2, 24, 24,
++                             d->m_icon.pixmap(24, 24));
++                p.drawText(rc.adjusted(30, 0, -24, 0), Qt::AlignCenter, d->m_stringList.at(i));
++            } else
++                p.drawText(rc.adjusted(0, 0, -24, 0), Qt::AlignCenter, d->m_stringList.at(i));
++            if (i != count() - 1)
++                p.drawPixmap(rc.right() - 24, (rc.height() - 16) / 2, 16, 16,
++                             ThemeController::drawColoredPixmap(QIcon::fromTheme("ukui-end-symbolic").pixmap(16, 16), baseColor));
++        } else {
++            if (i == 0) {
++                if (!d->m_icon.isNull()) {
++                    p.drawPixmap(rc.left() + 10, (rc.height() - 24) / 2, 24, 24,
++                                 d->m_icon.pixmap(24, 24));
++                    p.drawText(rc.adjusted(30, 0, -24, 0), Qt::AlignCenter, d->m_stringList.at(i));
++                    useWidth += fm.width(d->m_stringList.at(0)) + 90;
++                    ;
++                } else {
++                    p.drawText(rc.adjusted(0, 0, -24, 0), Qt::AlignCenter, d->m_stringList.at(i));
++                    useWidth += fm.width(d->m_stringList.at(0)) + 40;
+                 }
+-            }
+-            else if(i == count() - 1)
+-            {
+-                p.drawText(rc.adjusted(0,0,-24,0),Qt::AlignCenter,d->m_stringList.at(i));
+-            }
+-            else
+-            {
+-                int usableWidth = 0; 
+-                for(int j = i ;j < count()-1 ; j++) 
+-                {
++            } else if (i == count() - 1) {
++                p.drawText(rc.adjusted(0, 0, -24, 0), Qt::AlignCenter, d->m_stringList.at(i));
++            } else {
++                int usableWidth = 0;
++                for (int j = i; j < count() - 1; j++) {
+                     usableWidth += fm.width(d->m_stringList.at(j)) + 40;
+                 }
+ 
+-                if( (rect().width() - useWidth) <= usableWidth ) 
+-                {
+-                    setTabContent(i,"...");
+-                    setTabToolTip(i,d->m_stringList.at(i));
+-                    p.drawText(rc.adjusted(0,0,-24,0),Qt::AlignCenter,"...");
+-                    useWidth +=fm.width("...") + 40;
+-                }
+-                else //如果可用长度 大于 需用长度 则正常显示
++                if ((rect().width() - useWidth) <= usableWidth) {
++                    setTabContent(i, "...");
++                    setTabToolTip(i, d->m_stringList.at(i));
++                    p.drawText(rc.adjusted(0, 0, -24, 0), Qt::AlignCenter, "...");
++                    useWidth += fm.width("...") + 40;
++                } else // 如果可用长度 大于 需用长度 则正常显示
+                 {
+ 
+-                    setTabContent(i,d->m_stringList.at(i));
+-                    p.drawText(rc.adjusted(0,0,-24,0),Qt::AlignCenter,d->m_stringList.at(i));
+-                    useWidth +=fm.width(d->m_stringList.at(i)) + 40;
+-                    if(!tabToolTip(i).isEmpty())
+-                        setTabToolTip(i,"");
++                    setTabContent(i, d->m_stringList.at(i));
++                    p.drawText(rc.adjusted(0, 0, -24, 0), Qt::AlignCenter, d->m_stringList.at(i));
++                    useWidth += fm.width(d->m_stringList.at(i)) + 40;
++                    if (!tabToolTip(i).isEmpty())
++                        setTabToolTip(i, "");
+                 }
+             }
+-            if(i != count()-1)
+-            {
+-                p.drawPixmap(rc.right()-24,(rc.height()-16)/2,16,16,
+-                             ThemeController::drawColoredPixmap(QIcon::fromTheme("ukui-end-symbolic").pixmap(16,16),baseColor));
+-
++            if (i != count() - 1) {
++                p.drawPixmap(rc.right() - 24, (rc.height() - 16) / 2, 16, 16,
++                             ThemeController::drawColoredPixmap(QIcon::fromTheme("ukui-end-symbolic").pixmap(16, 16), baseColor));
+             }
+         }
+     }
+ }
+ 
+ KCrumbPrivate::KCrumbPrivate(KCrumb *parent)
+-    :q_ptr(parent),
+-      m_isFlat(true)
++    : q_ptr(parent)
++    , m_isFlat(true)
+ {
+ }
+ 
+@@ -308,7 +287,6 @@ void KCrumbPrivate::changeTheme()
+ 
+ CrumbStyle::CrumbStyle(QStyle *style)
+ {
+-
+ }
+ 
+ QRect CrumbStyle::subElementRect(QStyle::SubElement element, const QStyleOption *option, const QWidget *widget) const
+@@ -323,7 +301,7 @@ QRect CrumbStyle::subElementRect(QStyle::SubElement element, const QStyleOption
+     default:
+         break;
+     }
+-    return QProxyStyle::subElementRect(element,option,widget);
++    return QProxyStyle::subElementRect(element, option, widget);
+ }
+ 
+ }
+diff --git a/kysdk-qtwidgets/src/kcrumb.h b/kysdk-qtwidgets/src/kcrumb.h
+index 2fad4c4..8746b40 100644
+--- a/kysdk-qtwidgets/src/kcrumb.h
++++ b/kysdk-qtwidgets/src/kcrumb.h
+@@ -23,8 +23,8 @@
+ #ifndef KCRUMB_H
+ #define KCRUMB_H
+ 
+-#include <QTabBar>
+ #include "kcustomtabbar.h"
++#include <QTabBar>
+ 
+ namespace kdk
+ {
+@@ -37,8 +37,7 @@ class KCrumbPrivate;
+ /**
+  * @brief KCrumbType,包括两种类型。
+  */
+-enum KCrumbType
+-{
++enum KCrumbType {
+     FlatBreadCrumb,
+     CubeBreadCrumb
+ };
+@@ -83,7 +82,7 @@ public:
+      * @param text
+      * @return
+      */
+-    int insertTab(int index, const QIcon&icon, const QString &text);
++    int insertTab(int index, const QIcon &icon, const QString &text);
+ 
+     /**
+      * @brief 删除index位置的tab
+@@ -114,13 +113,13 @@ public:
+      * @brief 返回按钮边框是否凸起
+      * @return
+      */
+-    bool  isFlat() const;
++    bool isFlat() const;
+ 
+     /**
+      * @brief 设置按钮边框是否凸起
+      * @param flat
+      */
+-    void  setFlat(bool flat);
++    void setFlat(bool flat);
+ 
+ public slots:
+     void leftScroll();
+@@ -132,9 +131,8 @@ protected:
+ 
+ private:
+     Q_DECLARE_PRIVATE(KCrumb)
+-    KCrumbPrivate*const d_ptr;
++    KCrumbPrivate *const d_ptr;
+ };
+ }
+ 
+-
+ #endif // KCRUMB_H
+diff --git a/kysdk-qtwidgets/src/kcustomdateedit.cpp b/kysdk-qtwidgets/src/kcustomdateedit.cpp
+index f025e79..884f407 100644
+--- a/kysdk-qtwidgets/src/kcustomdateedit.cpp
++++ b/kysdk-qtwidgets/src/kcustomdateedit.cpp
+@@ -1,14 +1,13 @@
+ #include "kcustomdateedit.h"
++#include "themeController.h"
+ #include <QApplication>
+-#include <QStyleOptionComboBox>
+-#include <QPainter>
+-#include <QStyle>
+ #include <QBrush>
++#include <QPainter>
++#include <QRandomGenerator>
+ #include <QRect>
+-#include <QApplication>
++#include <QStyle>
++#include <QStyleOptionComboBox>
+ #include <QSvgRenderer>
+-#include <QRandomGenerator>
+-#include "themeController.h"
+ 
+ namespace kdk
+ {
+@@ -17,7 +16,7 @@ class KCustomDateEditPrivate : public QObject
+     Q_DECLARE_PUBLIC(KCustomDateEdit)
+     Q_OBJECT
+ public:
+-    KCustomDateEditPrivate(KCustomDateEdit* parent);
++    KCustomDateEditPrivate(KCustomDateEdit *parent);
+ 
+ private slots:
+     void onDateSelected(const QDate &date);
+@@ -25,13 +24,14 @@ private slots:
+     QPixmap drawSymbolicColoredPixmap(const QPixmap &source);
+ 
+ private:
+-    KCustomDateEdit* q_ptr;
++    KCustomDateEdit *q_ptr;
+     KMiniCalendarWidget *m_pCalendar;
+     bool hoverFlag = false;
+     bool focusFlag = false;
+ };
+ 
+-KCustomDateEditPrivate::KCustomDateEditPrivate(KCustomDateEdit *parent) : q_ptr(parent)
++KCustomDateEditPrivate::KCustomDateEditPrivate(KCustomDateEdit *parent)
++    : q_ptr(parent)
+ {
+     Q_Q(KCustomDateEdit);
+     m_pCalendar = new KMiniCalendarWidget(q);
+@@ -52,12 +52,9 @@ QPixmap KCustomDateEditPrivate::loadSvg(const QString &path, int size)
+     int origSize = size;
+     const auto ratio = qApp->devicePixelRatio();
+ 
+-    if ( 2 == ratio)
+-    {
++    if (2 == ratio) {
+         size += origSize;
+-    }
+-    else if (3 == ratio)
+-    {
++    } else if (3 == ratio) {
+         size += origSize;
+     }
+ 
+@@ -79,14 +76,11 @@ QPixmap KCustomDateEditPrivate::drawSymbolicColoredPixmap(const QPixmap &source)
+     Q_Q(KCustomDateEdit);
+     QImage img = source.toImage();
+ 
+-    for (int x = 0; x < img.width(); x++)
+-    {
+-        for (int y = 0; y < img.height(); y++)
+-        {
++    for (int x = 0; x < img.width(); x++) {
++        for (int y = 0; y < img.height(); y++) {
+             QColor color = img.pixelColor(x, y);
+ 
+-            if (color.alpha() > 0)
+-            {
++            if (color.alpha() > 0) {
+                 QColor colorSet = ThemeController::getPaletteColorFromDT("buttontext");
+                 color.setRed(colorSet.red());
+                 color.setGreen(colorSet.green());
+@@ -99,7 +93,9 @@ QPixmap KCustomDateEditPrivate::drawSymbolicColoredPixmap(const QPixmap &source)
+     return QPixmap::fromImage(img);
+ }
+ 
+-KCustomDateEdit::KCustomDateEdit(QWidget *parent) : QDateTimeEdit(parent), d_ptr(new KCustomDateEditPrivate(this))
++KCustomDateEdit::KCustomDateEdit(QWidget *parent)
++    : QDateTimeEdit(parent)
++    , d_ptr(new KCustomDateEditPrivate(this))
+ {
+     Q_D(KCustomDateEdit);
+     this->installEventFilter(this);
+@@ -129,11 +125,10 @@ void KCustomDateEdit::updateStyle(bool isDark)
+ {
+     Q_D(KCustomDateEdit);
+ 
+-    if(d->m_pCalendar == nullptr)
++    if (d->m_pCalendar == nullptr)
+         return;
+ 
+-    if(isDark)
+-    {
++    if (isDark) {
+         d->m_pCalendar->setWeekBgColor(QColor(29, 29, 29));
+         d->m_pCalendar->setWeekTextColor(QColor(255, 255, 255));
+         d->m_pCalendar->setBorderColor(QColor(180, 180, 180));
+@@ -151,9 +146,7 @@ void KCustomDateEdit::updateStyle(bool isDark)
+         d->m_pCalendar->setOtherBgColor(QColor(29, 29, 29));
+         d->m_pCalendar->setSelectBgColor(QColor(55, 144, 250));
+         d->m_pCalendar->setHoverBgColor(QColor(180, 180, 180));
+-    }
+-    else
+-    {
++    } else {
+         d->m_pCalendar->setWeekBgColor(QColor(255, 255, 255));
+         d->m_pCalendar->setWeekTextColor(QColor(0, 0, 0));
+         d->m_pCalendar->setBorderColor(QColor(180, 180, 180));
+@@ -182,14 +175,11 @@ void KCustomDateEdit::mousePressEvent(QMouseEvent *event)
+     QRect arrowRect = style()->subControlRect(QStyle::CC_ComboBox, &opt, QStyle::SC_ComboBoxArrow, this);
+     QPoint point = event->pos();
+ 
+-    if (arrowRect.contains(event->pos()))
+-    {
++    if (arrowRect.contains(event->pos())) {
+         d->m_pCalendar->setDate(this->date());
+         d->m_pCalendar->move(mapToGlobal(QPoint(0, height())));
+         d->m_pCalendar->show();
+-    }
+-    else
+-    {
++    } else {
+         QDateTimeEdit::mousePressEvent(event);
+     }
+ }
+@@ -199,12 +189,12 @@ void KCustomDateEdit::paintEvent(QPaintEvent *e)
+     Q_D(KCustomDateEdit);
+     Q_UNUSED(e);
+     QPainter painter(this);
+-    painter.setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform);  // 反锯齿;
++    painter.setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform); // 反锯齿;
+     QBrush brush = QBrush(ThemeController::getPaletteColorFromDT("button"));
+     painter.setPen(Qt::NoPen);
+     painter.setBrush(brush);
+     int radius = ThemeController::getRadiusFromDT("kradius-normal");
+-    if(radius == -1)
++    if (radius == -1)
+         radius = 6;
+     painter.drawRoundedRect(this->rect(), radius, radius);
+     QPixmap pix = d->loadSvg("/usr/share/kylin-user-guide/data/ukui-down-symbolic.svg", 64);
+@@ -212,25 +202,21 @@ void KCustomDateEdit::paintEvent(QPaintEvent *e)
+     painter.drawPixmap(rect, pix);
+ 
+     QRect rectBoxt = this->rect();
+-    painter.setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform);  // 反锯齿;
++    painter.setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform); // 反锯齿;
+ 
+-    if (d->m_pCalendar && d->m_pCalendar->isVisible())
+-    {
++    if (d->m_pCalendar && d->m_pCalendar->isVisible()) {
+         d->focusFlag = true;
+     }
+ 
+-    if (d->focusFlag == true)
+-    {
++    if (d->focusFlag == true) {
+         QPen pen(palette().brush(QPalette::Active, QPalette::Highlight), 2);
+         pen.setJoinStyle(Qt::RoundJoin);
+         painter.setPen(pen);
+         painter.setBrush(Qt::NoBrush);
+         painter.translate(1, 1);
+         painter.drawRoundedRect(rectBoxt.adjusted(0, 0, -2, -2), radius, radius);
+-    }
+-    else if (d->hoverFlag == true)
+-    {
+-        painter.setPen(ThemeController::getPaletteColorFromDT("highlight",QPalette::Disabled));
++    } else if (d->hoverFlag == true) {
++        painter.setPen(ThemeController::getPaletteColorFromDT("highlight", QPalette::Disabled));
+         painter.setBrush(Qt::NoBrush);
+         painter.translate(0.5, 0.5);
+         painter.drawRoundedRect(rectBoxt.adjusted(0, 0, -1, -1), radius, radius);
+@@ -241,29 +227,21 @@ bool KCustomDateEdit::eventFilter(QObject *obj, QEvent *event)
+ {
+     Q_D(KCustomDateEdit);
+ 
+-    if (QEvent::HoverEnter == event->type())
+-    {
++    if (QEvent::HoverEnter == event->type()) {
+         d->hoverFlag = true;
+         repaint();
+-    }
+-    else if (QEvent::HoverLeave == event->type())
+-    {
++    } else if (QEvent::HoverLeave == event->type()) {
+         d->hoverFlag = false;
+         repaint();
+-    }
+-    else if (QEvent::FocusIn == event->type())
+-    {
++    } else if (QEvent::FocusIn == event->type()) {
+         d->focusFlag = true;
+         repaint();
+-    }
+-    else if (QEvent::FocusOut == event->type())
+-    {
++    } else if (QEvent::FocusOut == event->type()) {
+         d->focusFlag = false;
+         d->hoverFlag = false;
+         repaint();
+ 
+-        if (this->date() != QDateTime::currentDateTime().date() && !d->m_pCalendar->isVisible())
+-        {
++        if (this->date() != QDateTime::currentDateTime().date() && !d->m_pCalendar->isVisible()) {
+             Q_EMIT changeDate();
+         }
+     }
+diff --git a/kysdk-qtwidgets/src/kcustomdateedit.h b/kysdk-qtwidgets/src/kcustomdateedit.h
+index f24b0cd..54e861e 100644
+--- a/kysdk-qtwidgets/src/kcustomdateedit.h
++++ b/kysdk-qtwidgets/src/kcustomdateedit.h
+@@ -2,9 +2,9 @@
+ #define KCUSTOMDATEEDIT_H
+ 
+ #include "gui_g.h"
++#include "kminicalendarwidget.h"
+ #include <QDateTimeEdit>
+ #include <QMouseEvent>
+-#include "kminicalendarwidget.h"
+ 
+ namespace kdk
+ {
+@@ -48,7 +48,7 @@ protected:
+ 
+ private:
+     Q_DECLARE_PRIVATE(KCustomDateEdit)
+-    KCustomDateEditPrivate* const d_ptr;
++    KCustomDateEditPrivate *const d_ptr;
+ };
+ }
+ 
+diff --git a/kysdk-qtwidgets/src/kcustomtabbar.cpp b/kysdk-qtwidgets/src/kcustomtabbar.cpp
+index 694ab84..2439eb3 100644
+--- a/kysdk-qtwidgets/src/kcustomtabbar.cpp
++++ b/kysdk-qtwidgets/src/kcustomtabbar.cpp
+@@ -20,26 +20,27 @@
+  *
+  */
+ 
+-//#include "gui_g.h"
++// #include "gui_g.h"
+ 
+-//#include <QtWidgets/private/qtwidgetsglobal_p.h>
++// #include <QtWidgets/private/qtwidgetsglobal_p.h>
+ #include "kcustomtabbar.h"
+-//#include "private/qwidget_p.h"
++// #include "private/qwidget_p.h"
+ 
++#include <QDebug>
+ #include <QIcon>
+ #include <QToolButton>
+-#include <QDebug>
+-//#if QT_CONFIG(animation)
++// #if QT_CONFIG(animation)
+ #include <QVariantAnimation>
+-//#endif
++// #endif
+ 
+ #include <QStyleOption>
+ 
+-//#include "private/qlayoutengine_p.h"
+-//#if QT_CONFIG(itemviews)
+-//#include "qabstractitemdelegate.h"
+-//#endif
++// #include "private/qlayoutengine_p.h"
++// #if QT_CONFIG(itemviews)
++// #include "qabstractitemdelegate.h"
++// #endif
+ 
++#include <QAbstractButton>
+ #include <QApplication>
+ #include <QBitmap>
+ #include <QCursor>
+@@ -47,41 +48,45 @@
+ #include <QPainter>
+ #include <QStyle>
+ #include <QStylePainter>
+-#include <QAbstractButton>
+-//#include <QCustomLayoutStruct>
++// #include <QCustomLayoutStruct>
+ #include <QAbstractItemDelegate>
+ 
+-//#if QT_CONFIG(tabwidget)
++// #if QT_CONFIG(tabwidget)
+ #include <QTabWidget>
+-//#endif
++// #endif
+ #include <QToolTip>
+-//#if QT_CONFIG(whatsthis)
++// #if QT_CONFIG(whatsthis)
+ #include <QWhatsThis>
+-//#endif
+-//#ifndef QT_NO_ACCESSIBILITY
++// #endif
++// #ifndef QT_NO_ACCESSIBILITY
+ #include <QAccessible>
+-//#endif
+-//#ifdef Q_OS_OSX
+-//#include <qpa/qplatformnativeinterface.h>
+-//#endif
++// #endif
++// #ifdef Q_OS_OSX
++// #include <qpa/qplatformnativeinterface.h>
++// #endif
+ #include <QDebug>
+-//#include "qdebug.h"
+-//#include "private/KCustomTabBar_p.h"
++// #include "qdebug.h"
++// #include "private/KCustomTabBar_p.h"
+ 
+-//#if 0 // Used to be included in Qt4 for Q_WS_MAC
+-//#include <private/qt_mac_p.h>
+-//#include <private/qt_cocoa_helpers_mac_p.h>
+-//#endif
++// #if 0 // Used to be included in Qt4 for Q_WS_MAC
++// #include <private/qt_mac_p.h>
++// #include <private/qt_cocoa_helpers_mac_p.h>
++// #endif
+ 
+ #define ANIMATION_DURATION 250
+ typedef qint64 Fixed64;
+-static inline Fixed64 toFixed(int i) { return (Fixed64)i * 256; }
+-static inline int fRound(Fixed64 i) {
++static inline Fixed64 toFixed(int i)
++{
++    return (Fixed64)i * 256;
++}
++static inline int fRound(Fixed64 i)
++{
+     return (i % 256 < 128) ? i / 256 : 1 + i / 256;
+ }
+ struct QCustomLayoutStruct
+ {
+-    inline void init(int stretchFactor = 0, int minSize = 0) {
++    inline void init(int stretchFactor = 0, int minSize = 0)
++    {
+         stretch = stretchFactor;
+         minimumSize = sizeHint = minSize;
+         maximumSize = QLAYOUTSIZE_MAX;
+@@ -90,10 +95,12 @@ struct QCustomLayoutStruct
+         spacing = 0;
+     }
+ 
+-    int smartSizeHint() {
++    int smartSizeHint()
++    {
+         return (stretch > 0) ? minimumSize : sizeHint;
+     }
+-    int effectiveSpacer(int uniformSpacer) const {
++    int effectiveSpacer(int uniformSpacer) const
++    {
+         Q_ASSERT(uniformSpacer >= 0 || spacing >= 0);
+         return (uniformSpacer >= 0) ? uniformSpacer : spacing;
+     }
+@@ -134,7 +141,7 @@ class Q_DECL_HIDDEN KCustomTabBarPrivate
+ public:
+     KCustomTabBarPrivate(KCustomTabBar *parent);
+     Q_WIDGETS_EXPORT void qGeomCalc(QVector<QCustomLayoutStruct> &chain, int start, int count,
+-                                int pos, int space, int spacer = -1);
++                                    int pos, int space, int spacer = -1);
+ 
+     int currentIndex;
+     int pressedIndex;
+@@ -143,15 +150,26 @@ public:
+     bool drawBase;
+     int scrollOffset;
+ 
+-    struct Tab {
++    struct Tab
++    {
+         inline Tab(const QIcon &ico, const QString &txt)
+-            : enabled(true) , shortcutId(0), text(txt), icon(ico),
+-            leftWidget(0), rightWidget(0), lastTab(-1), dragOffset(0)
++            : enabled(true)
++            , shortcutId(0)
++            , text(txt)
++            , icon(ico)
++            , leftWidget(0)
++            , rightWidget(0)
++            , lastTab(-1)
++            , dragOffset(0)
+ #if QT_CONFIG(animation)
+             , animation(0)
+ #endif // animation
+-        {}
+-        bool operator==(const Tab &other) const { return &other == this; }
++        {
++        }
++        bool operator==(const Tab &other) const
++        {
++            return &other == this;
++        }
+         bool enabled;
+         int shortcutId;
+         QString text;
+@@ -177,21 +195,31 @@ public:
+ #endif
+ 
+ #if QT_CONFIG(animation)
+-        ~Tab() { delete animation; }
+-        struct TabBarAnimation : public QVariantAnimation {
+-            TabBarAnimation(Tab *t, KCustomTabBarPrivate *_priv) : tab(t), priv(_priv)
+-            { setEasingCurve(QEasingCurve::InOutQuad); }
++        ~Tab()
++        {
++            delete animation;
++        }
++        struct TabBarAnimation : public QVariantAnimation
++        {
++            TabBarAnimation(Tab *t, KCustomTabBarPrivate *_priv)
++                : tab(t)
++                , priv(_priv)
++            {
++                setEasingCurve(QEasingCurve::InOutQuad);
++            }
+ 
+             void updateCurrentValue(const QVariant &current) override;
+ 
+             void updateState(State newState, State) override;
++
+         private:
+-            //these are needed for the callbacks
++            // these are needed for the callbacks
+             Tab *tab;
+             KCustomTabBarPrivate *priv;
+         } *animation;
+ 
+-        void startAnimation(KCustomTabBarPrivate *priv, int duration) {
++        void startAnimation(KCustomTabBarPrivate *priv, int duration)
++        {
+             if (!priv->isAnimated()) {
+                 priv->moveTabFinished(priv->tabList.indexOf(*this));
+                 return;
+@@ -205,7 +233,10 @@ public:
+         }
+ #else
+         void startAnimation(KCustomTabBarPrivate *priv, int duration)
+-        { Q_UNUSED(duration); priv->moveTabFinished(priv->tabList.indexOf(*this)); }
++        {
++            Q_UNUSED(duration);
++            priv->moveTabFinished(priv->tabList.indexOf(*this));
++        }
+ #endif // animation
+     };
+     QList<Tab> tabList;
+@@ -220,12 +251,19 @@ public:
+ 
+     int indexAtPos(const QPoint &p) const;
+ 
+-    inline bool isAnimated() const { Q_Q(const KCustomTabBar); return q->style()->styleHint(QStyle::SH_Widget_Animation_Duration, 0, q) > 0; }
+-    inline bool validIndex(int index) const { return index >= 0 && index < tabList.count(); }
++    inline bool isAnimated() const
++    {
++        Q_Q(const KCustomTabBar);
++        return q->style()->styleHint(QStyle::SH_Widget_Animation_Duration, 0, q) > 0;
++    }
++    inline bool validIndex(int index) const
++    {
++        return index >= 0 && index < tabList.count();
++    }
+     void setCurrentNextEnabledIndex(int offset);
+ 
+-    QToolButton* rightB; // right or bottom
+-    QToolButton* leftB; // left or top
++    QToolButton *rightB; // right or bottom
++    QToolButton *leftB; // left or top
+ 
+     void moveTab(int index, int offset);
+     void moveTabFinished(int index);
+@@ -284,7 +322,7 @@ public:
+             switch (tabOverlap.shape) {
+             case KCustomTabBar::RoundedNorth:
+             case KCustomTabBar::TriangularNorth:
+-                rect.setRect(0, size.height()-overlap, size.width(), overlap);
++                rect.setRect(0, size.height() - overlap, size.width(), overlap);
+                 break;
+             case KCustomTabBar::RoundedSouth:
+             case KCustomTabBar::TriangularSouth:
+@@ -307,10 +345,10 @@ public:
+ 
+ private:
+     KCustomTabBar *const q_ptr;
+-
+ };
+ 
+-namespace {
++namespace
++{
+ class Q_DECL_HIDDEN CloseButton : public QAbstractButton
+ {
+     Q_OBJECT
+@@ -347,9 +385,9 @@ void KCustomMovableTabWidget::paintEvent(QPaintEvent *e)
+ inline static bool verticalTabs(KCustomTabBar::Shape shape)
+ {
+     return shape == KCustomTabBar::RoundedWest
+-           || shape == KCustomTabBar::RoundedEast
+-           || shape == KCustomTabBar::TriangularWest
+-           || shape == KCustomTabBar::TriangularEast;
++        || shape == KCustomTabBar::RoundedEast
++        || shape == KCustomTabBar::TriangularWest
++        || shape == KCustomTabBar::TriangularEast;
+ }
+ 
+ void KCustomTabBarPrivate::updateMacBorderMetrics()
+@@ -365,7 +403,7 @@ void KCustomTabBarPrivate::updateMacBorderMetrics()
+     // Calculate geometry
+     int upper, lower;
+     if (documentMode) {
+-        QPoint windowPos = q->mapTo(q->window(), QPoint(0,0));
++        QPoint windowPos = q->mapTo(q->window(), QPoint(0, 0));
+         upper = windowPos.y();
+         int tabStripHeight = q->tabSizeHint(0).height();
+         int pixelTweak = -3;
+@@ -433,7 +471,7 @@ void KCustomTabBarPrivate::initBasicStyleOption(QStyleOptionTab *option, int tab
+     if (tab.textColor.isValid())
+         option->palette.setColor(q->foregroundRole(), tab.textColor);
+     option->icon = tab.icon;
+-    option->iconSize = q->iconSize();  // Will get the default value then.
++    option->iconSize = q->iconSize(); // Will get the default value then.
+ 
+     option->leftButtonSize = tab.leftWidget ? tab.leftWidget->size() : QSize();
+     option->rightButtonSize = tab.rightWidget ? tab.rightWidget->size() : QSize();
+@@ -485,7 +523,7 @@ void KCustomTabBar::initStyleOption(QStyleOptionTab *option, int tabIndex) const
+     QRect textRect = style()->subElementRect(QStyle::SE_TabBarTabText, option, this);
+ 
+     option->text = fontMetrics().elidedText(option->text, d->elideMode, textRect.width(),
+-                        Qt::TextShowMnemonic);
++                                            Qt::TextShowMnemonic);
+ }
+ 
+ void KCustomTabBarPrivate::init()
+@@ -493,15 +531,15 @@ void KCustomTabBarPrivate::init()
+     Q_Q(KCustomTabBar);
+     leftB = new QToolButton(q);
+     leftB->setAutoRepeat(true);
+-//    QObject::connect(leftB, SIGNAL(clicked()), q, SLOT(scrollTabs()));
+-    QObject::connect(leftB,&QToolButton::clicked,q,[=]{
++    //    QObject::connect(leftB, SIGNAL(clicked()), q, SLOT(scrollTabs()));
++    QObject::connect(leftB, &QToolButton::clicked, q, [=] {
+         q->leftScrollTabs();
+     });
+     leftB->hide();
+     rightB = new QToolButton(q);
+     rightB->setAutoRepeat(true);
+-//    QObject::connect(rightB, SIGNAL(clicked()), q, SLOT(scrollTabs()));
+-    QObject::connect(rightB,&QToolButton::clicked,q,[=]{
++    //    QObject::connect(rightB, SIGNAL(clicked()), q, SLOT(scrollTabs()));
++    QObject::connect(rightB, &QToolButton::clicked, q, [=] {
+         q->rightScrollTabs();
+     });
+     rightB->hide();
+@@ -525,12 +563,12 @@ void KCustomTabBarPrivate::init()
+ 
+ KCustomTabBarPrivate::Tab *KCustomTabBarPrivate::at(int index)
+ {
+-    return validIndex(index)?&tabList[index]:0;
++    return validIndex(index) ? &tabList[index] : 0;
+ }
+ 
+ const KCustomTabBarPrivate::Tab *KCustomTabBarPrivate::at(int index) const
+ {
+-    return validIndex(index)?&tabList[index]:0;
++    return validIndex(index) ? &tabList[index] : 0;
+ }
+ 
+ int KCustomTabBarPrivate::indexAtPos(const QPoint &p) const
+@@ -562,8 +600,8 @@ void KCustomTabBarPrivate::layoutTabs()
+     // depending on tabAlignment and expanding.
+     tabChain[tabChainIndex].init();
+     tabChain[tabChainIndex].expansive = (!expanding)
+-                                        && (tabAlignment != Qt::AlignLeft)
+-                                        && (tabAlignment != Qt::AlignJustify);
++        && (tabAlignment != Qt::AlignLeft)
++        && (tabAlignment != Qt::AlignJustify);
+     tabChain[tabChainIndex].empty = true;
+     ++tabChainIndex;
+ 
+@@ -630,8 +668,8 @@ void KCustomTabBarPrivate::layoutTabs()
+     // Mirror our front item.
+     tabChain[tabChainIndex].init();
+     tabChain[tabChainIndex].expansive = (!expanding)
+-                                        && (tabAlignment != Qt::AlignRight)
+-                                        && (tabAlignment != Qt::AlignJustify);
++        && (tabAlignment != Qt::AlignRight)
++        && (tabAlignment != Qt::AlignJustify);
+     tabChain[tabChainIndex].empty = true;
+     Q_ASSERT(tabChainIndex == tabChain.count() - 1); // add an assert just to make sure.
+ 
+@@ -902,7 +940,7 @@ void KCustomTabBar::closeTab()
+         emit tabCloseRequested(tabToClose);
+ }
+ 
+-//void KCustomTabBar::scrollTabs()
++// void KCustomTabBar::scrollTabs()
+ //{
+ 
+ //    if (sender1 == d->leftB) {
+@@ -915,7 +953,7 @@ void KCustomTabBar::closeTab()
+ void KCustomTabBar::leftScrollTabs()
+ {
+     Q_D(KCustomTabBar);
+-//    const QObject *sender1 = sender();
++    //    const QObject *sender1 = sender();
+ 
+     const bool horizontal = !verticalTabs(d->shape);
+     const QRect scrollRect = d->normalizedScrollRect();
+@@ -928,14 +966,13 @@ void KCustomTabBar::leftScrollTabs()
+             return;
+         }
+     }
+-
+ }
+ 
+ void KCustomTabBar::rightScrollTabs()
+ {
+     Q_D(KCustomTabBar);
+ 
+-//    const QObject *sender1 = sender();
++    //    const QObject *sender1 = sender();
+     const bool horizontal = !verticalTabs(d->shape);
+     const QRect scrollRect = d->normalizedScrollRect();
+     int i = -1;
+@@ -976,15 +1013,14 @@ void KCustomTabBarPrivate::refresh()
+ /*!
+     Creates a new tab bar with the given \a parent.
+ */
+-KCustomTabBar::KCustomTabBar(QWidget* parent)
+-    :QWidget(parent)
+-    ,d_ptr(new KCustomTabBarPrivate(this))
++KCustomTabBar::KCustomTabBar(QWidget *parent)
++    : QWidget(parent)
++    , d_ptr(new KCustomTabBarPrivate(this))
+ {
+     Q_D(KCustomTabBar);
+     d->init();
+ }
+ 
+-
+ /*!
+     Destroys the tab bar.
+ */
+@@ -999,7 +1035,6 @@ KCustomTabBar::~KCustomTabBar()
+     Possible values for this property are described by the Shape enum.
+ */
+ 
+-
+ KCustomTabBar::Shape KCustomTabBar::shape() const
+ {
+     Q_D(const KCustomTabBar);
+@@ -1055,7 +1090,7 @@ int KCustomTabBar::addTab(const QString &text)
+     Adds a new tab with icon \a icon and text \a
+     text. Returns the new tab's index.
+ */
+-int KCustomTabBar::addTab(const QIcon& icon, const QString &text)
++int KCustomTabBar::addTab(const QIcon &icon, const QString &text)
+ {
+     return insertTab(-1, icon, text);
+ }
+@@ -1082,7 +1117,7 @@ int KCustomTabBar::insertTab(int index, const QString &text)
+     Inserting a new tab at an index less than or equal to the current index
+     will increment the current index, but keep the current tab.
+ */
+-int KCustomTabBar::insertTab(int index, const QIcon& icon, const QString &text)
++int KCustomTabBar::insertTab(int index, const QIcon &icon, const QString &text)
+ {
+     Q_D(KCustomTabBar);
+     if (!d->validIndex(index)) {
+@@ -1105,8 +1140,8 @@ int KCustomTabBar::insertTab(int index, const QIcon& icon, const QString &text)
+         initStyleOption(&opt, index);
+         ButtonPosition closeSide = (ButtonPosition)style()->styleHint(QStyle::SH_TabBar_CloseButtonPosition, 0, this);
+         QAbstractButton *closeButton = new CloseButton(this);
+-//        connect(closeButton, SIGNAL(clicked()), this, SLOT(_q_closeTab()));
+-        connect(closeButton,&QAbstractButton::clicked,this,[=]{
++        //        connect(closeButton, SIGNAL(clicked()), this, SLOT(_q_closeTab()));
++        connect(closeButton, &QAbstractButton::clicked, this, [=] {
+             closeTab();
+         });
+         setTabButton(index, closeSide, closeButton);
+@@ -1123,7 +1158,6 @@ int KCustomTabBar::insertTab(int index, const QIcon& icon, const QString &text)
+     return index;
+ }
+ 
+-
+ /*!
+     Removes the tab at position \a index.
+ 
+@@ -1164,7 +1198,7 @@ void KCustomTabBar::removeTab(int index)
+             // around.
+             d->currentIndex = -1;
+             if (d->tabList.size() > 0) {
+-                switch(d->selectionBehaviorOnRemove) {
++                switch (d->selectionBehaviorOnRemove) {
+                 case SelectPreviousTab:
+                     if (newIndex > index)
+                         newIndex--;
+@@ -1214,7 +1248,6 @@ void KCustomTabBar::removeTab(int index)
+     }
+ }
+ 
+-
+ /*!
+     Returns \c true if the tab at position \a index is enabled; otherwise
+     returns \c false.
+@@ -1241,13 +1274,12 @@ void KCustomTabBar::setTabEnabled(int index, bool enabled)
+ #endif
+         update();
+         if (!enabled && index == d->currentIndex)
+-            setCurrentIndex(d->validIndex(index+1)?index+1:0);
++            setCurrentIndex(d->validIndex(index + 1) ? index + 1 : 0);
+         else if (enabled && !d->validIndex(d->currentIndex))
+             setCurrentIndex(index);
+     }
+ }
+ 
+-
+ /*!
+     Returns the text of the tab at position \a index, or an empty
+     string if \a index is out of range.
+@@ -1337,7 +1369,7 @@ QIcon KCustomTabBar::tabIcon(int index) const
+ /*!
+     Sets the icon of the tab at position \a index to \a icon.
+ */
+-void KCustomTabBar::setTabIcon(int index, const QIcon & icon)
++void KCustomTabBar::setTabIcon(int index, const QIcon &icon)
+ {
+     Q_D(KCustomTabBar);
+     if (KCustomTabBarPrivate::Tab *tab = d->at(index)) {
+@@ -1354,7 +1386,7 @@ void KCustomTabBar::setTabIcon(int index, const QIcon & icon)
+ /*!
+     Sets the tool tip of the tab at position \a index to \a tip.
+ */
+-void KCustomTabBar::setTabToolTip(int index, const QString & tip)
++void KCustomTabBar::setTabToolTip(int index, const QString &tip)
+ {
+     Q_D(KCustomTabBar);
+     if (KCustomTabBarPrivate::Tab *tab = d->at(index))
+@@ -1407,7 +1439,7 @@ QString KCustomTabBar::tabWhatsThis(int index) const
+ /*!
+     Sets the data of the tab at position \a index to \a data.
+ */
+-void KCustomTabBar::setTabData(int index, const QVariant & data)
++void KCustomTabBar::setTabData(int index, const QVariant &data)
+ {
+     Q_D(KCustomTabBar);
+     if (KCustomTabBarPrivate::Tab *tab = d->at(index))
+@@ -1435,7 +1467,7 @@ QRect KCustomTabBar::tabRect(int index) const
+     Q_D(const KCustomTabBar);
+     if (const KCustomTabBarPrivate::Tab *tab = d->at(index)) {
+         if (d->layoutDirty)
+-            const_cast<KCustomTabBarPrivate*>(d)->layoutTabs();
++            const_cast<KCustomTabBarPrivate *>(d)->layoutTabs();
+         QRect r = tab->rect;
+         if (verticalTabs(d->shape))
+             r.translate(0, -d->scrollOffset);
+@@ -1485,7 +1517,6 @@ int KCustomTabBar::currentIndex() const
+     return -1;
+ }
+ 
+-
+ void KCustomTabBar::setCurrentIndex(int index)
+ {
+     Q_D(KCustomTabBar);
+@@ -1534,7 +1565,6 @@ QSize KCustomTabBar::iconSize() const
+         return d->iconSize;
+     int iconExtent = style()->pixelMetric(QStyle::PM_TabBarIconSize, 0, this);
+     return QSize(iconExtent, iconExtent);
+-
+ }
+ 
+ void KCustomTabBar::setIconSize(const QSize &size)
+@@ -1557,14 +1587,13 @@ int KCustomTabBar::count() const
+     return d->tabList.count();
+ }
+ 
+-
+ /*!\reimp
+  */
+ QSize KCustomTabBar::sizeHint() const
+ {
+     Q_D(const KCustomTabBar);
+     if (d->layoutDirty)
+-        const_cast<KCustomTabBarPrivate*>(d)->layoutTabs();
++        const_cast<KCustomTabBarPrivate *>(d)->layoutTabs();
+     QRect r;
+     for (int i = 0; i < d->tabList.count(); ++i)
+         r = r.united(d->tabList.at(i).maxRect);
+@@ -1578,7 +1607,7 @@ QSize KCustomTabBar::minimumSizeHint() const
+ {
+     Q_D(const KCustomTabBar);
+     if (d->layoutDirty)
+-        const_cast<KCustomTabBarPrivate*>(d)->layoutTabs();
++        const_cast<KCustomTabBarPrivate *>(d)->layoutTabs();
+     if (!d->useScrollButtons) {
+         QRect r;
+         for (int i = 0; i < d->tabList.count(); ++i)
+@@ -1624,7 +1653,7 @@ static QString computeElidedText(Qt::TextElideMode mode, const QString &text)
+ QSize KCustomTabBar::minimumTabSizeHint(int index) const
+ {
+     Q_D(const KCustomTabBar);
+-    KCustomTabBarPrivate::Tab &tab = const_cast<KCustomTabBarPrivate::Tab&>(d->tabList[index]);
++    KCustomTabBarPrivate::Tab &tab = const_cast<KCustomTabBarPrivate::Tab &>(d->tabList[index]);
+     QString oldText = tab.text;
+     tab.text = computeElidedText(d->elideMode, oldText);
+     QSize size = tabSizeHint(index);
+@@ -1637,7 +1666,7 @@ QSize KCustomTabBar::minimumTabSizeHint(int index) const
+ */
+ QSize KCustomTabBar::tabSizeHint(int index) const
+ {
+-    //Note: this must match with the computations in QCommonStylePrivate::tabLayout
++    // Note: this must match with the computations in QCommonStylePrivate::tabLayout
+     Q_D(const KCustomTabBar);
+     if (const KCustomTabBarPrivate::Tab *tab = d->at(index)) {
+         QStyleOptionTab opt;
+@@ -1669,15 +1698,15 @@ QSize KCustomTabBar::tabSizeHint(int index) const
+ 
+         QHash<QString, QSize>::iterator it = d->textSizes.find(tab->text);
+         if (it == d->textSizes.end())
+-           it = d->textSizes.insert(tab->text, fm.size(Qt::TextShowMnemonic, tab->text));
++            it = d->textSizes.insert(tab->text, fm.size(Qt::TextShowMnemonic, tab->text));
+         const int textWidth = it.value().width();
+         QSize csz;
+         if (verticalTabs(d->shape)) {
+-            csz = QSize( qMax(maxWidgetWidth, qMax(fm.height(), iconSize.height())) + vframe,
+-                         textWidth + iconSize.width() + hframe + widgetHeight + padding);
++            csz = QSize(qMax(maxWidgetWidth, qMax(fm.height(), iconSize.height())) + vframe,
++                        textWidth + iconSize.width() + hframe + widgetHeight + padding);
+         } else {
+             csz = QSize(textWidth + iconSize.width() + hframe + widgetWidth + padding,
+-                  qMax(maxWidgetHeight, qMax(fm.height(), iconSize.height())) + vframe);
++                        qMax(maxWidgetHeight, qMax(fm.height(), iconSize.height())) + vframe);
+         }
+ 
+         QSize retSize = style()->sizeFromContents(QStyle::CT_TabBarTab, &opt, csz, this);
+@@ -1717,7 +1746,6 @@ void KCustomTabBar::tabLayoutChange()
+ {
+ }
+ 
+-
+ /*!\reimp
+  */
+ void KCustomTabBar::showEvent(QShowEvent *)
+@@ -1775,23 +1803,23 @@ bool KCustomTabBar::event(QEvent *event)
+         return true;
+ #ifndef QT_NO_TOOLTIP
+     } else if (event->type() == QEvent::ToolTip) {
+-        if (const KCustomTabBarPrivate::Tab *tab = d->at(tabAt(static_cast<QHelpEvent*>(event)->pos()))) {
++        if (const KCustomTabBarPrivate::Tab *tab = d->at(tabAt(static_cast<QHelpEvent *>(event)->pos()))) {
+             if (!tab->toolTip.isEmpty()) {
+-                QToolTip::showText(static_cast<QHelpEvent*>(event)->globalPos(), tab->toolTip, this);
++                QToolTip::showText(static_cast<QHelpEvent *>(event)->globalPos(), tab->toolTip, this);
+                 return true;
+             }
+         }
+ #endif // QT_NO_TOOLTIP
+ #if QT_CONFIG(whatsthis)
+     } else if (event->type() == QEvent::QueryWhatsThis) {
+-        const KCustomTabBarPrivate::Tab *tab = d->at(d->indexAtPos(static_cast<QHelpEvent*>(event)->pos()));
++        const KCustomTabBarPrivate::Tab *tab = d->at(d->indexAtPos(static_cast<QHelpEvent *>(event)->pos()));
+         if (!tab || tab->whatsThis.isEmpty())
+             event->ignore();
+         return true;
+     } else if (event->type() == QEvent::WhatsThis) {
+-        if (const KCustomTabBarPrivate::Tab *tab = d->at(d->indexAtPos(static_cast<QHelpEvent*>(event)->pos()))) {
++        if (const KCustomTabBarPrivate::Tab *tab = d->at(d->indexAtPos(static_cast<QHelpEvent *>(event)->pos()))) {
+             if (!tab->whatsThis.isEmpty()) {
+-                QWhatsThis::showText(static_cast<QHelpEvent*>(event)->globalPos(),
++                QWhatsThis::showText(static_cast<QHelpEvent *>(event)->globalPos(),
+                                      tab->whatsThis, this);
+                 return true;
+             }
+@@ -1811,7 +1839,7 @@ bool KCustomTabBar::event(QEvent *event)
+     } else if (event->type() == QEvent::MouseButtonDblClick) { // ### fixme Qt 6: move to mouseDoubleClickEvent(), here for BC reasons.
+         const QPoint pos = static_cast<const QMouseEvent *>(event)->pos();
+         const bool isEventInCornerButtons = (!d->leftB->isHidden() && d->leftB->geometry().contains(pos))
+-                                            || (!d->rightB->isHidden() && d->rightB->geometry().contains(pos));
++            || (!d->rightB->isHidden() && d->rightB->geometry().contains(pos));
+         if (!isEventInCornerButtons)
+             emit tabBarDoubleClicked(tabAt(pos));
+     } else if (event->type() == QEvent::Move) {
+@@ -1874,7 +1902,7 @@ void KCustomTabBar::paintEvent(QPaintEvent *)
+     const QRect scrollRect = d->normalizedScrollRect();
+ 
+     for (int i = 0; i < d->tabList.count(); ++i)
+-         optTabBase.tabBarRect |= tabRect(i);
++        optTabBase.tabBarRect |= tabRect(i);
+ 
+     optTabBase.selectedTabRect = tabRect(selected);
+ 
+@@ -1959,283 +1987,299 @@ void KCustomTabBar::paintEvent(QPaintEvent *)
+     Given that index at position from moved to position to where return where index goes.
+  */
+ KCustomTabBarPrivate::KCustomTabBarPrivate(KCustomTabBar *parent)
+-    :q_ptr(parent),currentIndex(-1), pressedIndex(-1), shape(KCustomTabBar::RoundedNorth), layoutDirty(false),
+-    drawBase(true), scrollOffset(0), hoverIndex(-1), elideModeSetByUser(false), useScrollButtonsSetByUser(false), expanding(true), closeButtonOnTabs(false),
+-    selectionBehaviorOnRemove(KCustomTabBar::SelectRightTab), paintWithOffsets(true), movable(false),
+-    dragInProgress(false), documentMode(false), autoHide(false), changeCurrentOnDrag(false),
+-    switchTabCurrentIndex(-1), switchTabTimerId(0), movingTab(0)
++    : q_ptr(parent)
++    , currentIndex(-1)
++    , pressedIndex(-1)
++    , shape(KCustomTabBar::RoundedNorth)
++    , layoutDirty(false)
++    , drawBase(true)
++    , scrollOffset(0)
++    , hoverIndex(-1)
++    , elideModeSetByUser(false)
++    , useScrollButtonsSetByUser(false)
++    , expanding(true)
++    , closeButtonOnTabs(false)
++    , selectionBehaviorOnRemove(KCustomTabBar::SelectRightTab)
++    , paintWithOffsets(true)
++    , movable(false)
++    , dragInProgress(false)
++    , documentMode(false)
++    , autoHide(false)
++    , changeCurrentOnDrag(false)
++    , switchTabCurrentIndex(-1)
++    , switchTabTimerId(0)
++    , movingTab(0)
+ {
+-
+ }
+ 
+ void KCustomTabBarPrivate::qGeomCalc(QVector<QCustomLayoutStruct> &chain, int start, int count, int pos, int space, int spacer)
+ {
+     int cHint = 0;
+-        int cMin = 0;
+-        int cMax = 0;
+-        int sumStretch = 0;
+-        int sumSpacing = 0;
+-        int expandingCount = 0;
++    int cMin = 0;
++    int cMax = 0;
++    int sumStretch = 0;
++    int sumSpacing = 0;
++    int expandingCount = 0;
++
++    bool allEmptyNonstretch = true;
++    int pendingSpacing = -1;
++    int spacerCount = 0;
++    int i;
+ 
+-        bool allEmptyNonstretch = true;
+-        int pendingSpacing = -1;
+-        int spacerCount = 0;
+-        int i;
++    for (i = start; i < start + count; i++) {
++        QCustomLayoutStruct *data = &chain[i];
+ 
+-        for (i = start; i < start + count; i++) {
+-            QCustomLayoutStruct *data = &chain[i];
+-
+-            data->done = false;
+-            cHint += data->smartSizeHint();
+-            cMin += data->minimumSize;
+-            cMax += data->maximumSize;
+-            sumStretch += data->stretch;
+-            if (!data->empty) {
+-                /*
+-                    Using pendingSpacing, we ensure that the spacing for the last
+-                    (non-empty) item is ignored.
+-                */
+-                if (pendingSpacing >= 0) {
+-                    sumSpacing += pendingSpacing;
+-                    ++spacerCount;
+-                }
+-                pendingSpacing = data->effectiveSpacer(spacer);
++        data->done = false;
++        cHint += data->smartSizeHint();
++        cMin += data->minimumSize;
++        cMax += data->maximumSize;
++        sumStretch += data->stretch;
++        if (!data->empty) {
++            /*
++                Using pendingSpacing, we ensure that the spacing for the last
++                (non-empty) item is ignored.
++            */
++            if (pendingSpacing >= 0) {
++                sumSpacing += pendingSpacing;
++                ++spacerCount;
+             }
+-            if (data->expansive)
+-                expandingCount++;
+-            allEmptyNonstretch = allEmptyNonstretch && data->empty && !data->expansive && data->stretch <= 0;
++            pendingSpacing = data->effectiveSpacer(spacer);
+         }
++        if (data->expansive)
++            expandingCount++;
++        allEmptyNonstretch = allEmptyNonstretch && data->empty && !data->expansive && data->stretch <= 0;
++    }
+ 
+-        int extraspace = 0;
++    int extraspace = 0;
+ 
+-        if (space < cMin + sumSpacing) {
+-            /*
+-              Less space than minimumSize; take from the biggest first
+-            */
++    if (space < cMin + sumSpacing) {
++        /*
++          Less space than minimumSize; take from the biggest first
++        */
+ 
+-            int minSize = cMin + sumSpacing;
++        int minSize = cMin + sumSpacing;
+ 
+-            // shrink the spacers proportionally
+-            if (spacer >= 0) {
+-                spacer = minSize > 0 ? spacer * space / minSize : 0;
+-                sumSpacing = spacer * spacerCount;
+-            }
++        // shrink the spacers proportionally
++        if (spacer >= 0) {
++            spacer = minSize > 0 ? spacer * space / minSize : 0;
++            sumSpacing = spacer * spacerCount;
++        }
+ 
+-            QVarLengthArray<int, 32> minimumSizes;
+-            minimumSizes.reserve(count);
++        QVarLengthArray<int, 32> minimumSizes;
++        minimumSizes.reserve(count);
+ 
+-            for (i = start; i < start + count; i++)
+-                minimumSizes << chain.at(i).minimumSize;
++        for (i = start; i < start + count; i++)
++            minimumSizes << chain.at(i).minimumSize;
+ 
+-            std::sort(minimumSizes.begin(), minimumSizes.end());
++        std::sort(minimumSizes.begin(), minimumSizes.end());
+ 
+-            int space_left = space - sumSpacing;
++        int space_left = space - sumSpacing;
+ 
+-            int sum = 0;
+-            int idx = 0;
+-            int space_used=0;
+-            int current = 0;
+-            while (idx < count && space_used < space_left) {
+-                current = minimumSizes.at(idx);
+-                space_used = sum + current * (count - idx);
+-                sum += current;
+-                ++idx;
+-            }
+-            --idx;
+-            int deficit = space_used - space_left;
++        int sum = 0;
++        int idx = 0;
++        int space_used = 0;
++        int current = 0;
++        while (idx < count && space_used < space_left) {
++            current = minimumSizes.at(idx);
++            space_used = sum + current * (count - idx);
++            sum += current;
++            ++idx;
++        }
++        --idx;
++        int deficit = space_used - space_left;
+ 
+-            int items = count - idx;
+-            /*
+-             * If we truncate all items to "current", we would get "deficit" too many pixels. Therefore, we have to remove
+-             * deficit/items from each item bigger than maxval. The actual value to remove is deficitPerItem + remainder/items
+-             * "rest" is the accumulated error from using integer arithmetic.
+-            */
+-            int deficitPerItem = deficit/items;
+-            int remainder = deficit % items;
+-            int maxval = current - deficitPerItem;
++        int items = count - idx;
++        /*
++         * If we truncate all items to "current", we would get "deficit" too many pixels. Therefore, we have to remove
++         * deficit/items from each item bigger than maxval. The actual value to remove is deficitPerItem + remainder/items
++         * "rest" is the accumulated error from using integer arithmetic.
++         */
++        int deficitPerItem = deficit / items;
++        int remainder = deficit % items;
++        int maxval = current - deficitPerItem;
++
++        int rest = 0;
++        for (i = start; i < start + count; i++) {
++            int maxv = maxval;
++            rest += remainder;
++            if (rest >= items) {
++                maxv--;
++                rest -= items;
++            }
++            QCustomLayoutStruct *data = &chain[i];
++            data->size = qMin(data->minimumSize, maxv);
++            data->done = true;
++        }
++    } else if (space < cHint + sumSpacing) {
++        /*
++          Less space than smartSizeHint(), but more than minimumSize.
++          Currently take space equally from each, as in Qt 2.x.
++          Commented-out lines will give more space to stretchier
++          items.
++        */
++        int n = count;
++        int space_left = space - sumSpacing;
++        int overdraft = cHint - space_left;
+ 
+-            int rest = 0;
+-            for (i = start; i < start + count; i++) {
+-                int maxv = maxval;
+-                rest += remainder;
+-                if (rest >= items) {
+-                    maxv--;
+-                    rest-=items;
+-                }
+-                QCustomLayoutStruct *data = &chain[i];
+-                data->size = qMin(data->minimumSize, maxv);
++        // first give to the fixed ones:
++        for (i = start; i < start + count; i++) {
++            QCustomLayoutStruct *data = &chain[i];
++            if (!data->done
++                && data->minimumSize >= data->smartSizeHint()) {
++                data->size = data->smartSizeHint();
+                 data->done = true;
++                space_left -= data->smartSizeHint();
++                // sumStretch -= data->stretch;
++                n--;
+             }
+-        } else if (space < cHint + sumSpacing) {
+-            /*
+-              Less space than smartSizeHint(), but more than minimumSize.
+-              Currently take space equally from each, as in Qt 2.x.
+-              Commented-out lines will give more space to stretchier
+-              items.
+-            */
+-            int n = count;
+-            int space_left = space - sumSpacing;
+-            int overdraft = cHint - space_left;
++        }
++        bool finished = n == 0;
++        while (!finished) {
++            finished = true;
++            Fixed64 fp_over = toFixed(overdraft);
++            Fixed64 fp_w = 0;
+ 
+-            // first give to the fixed ones:
+             for (i = start; i < start + count; i++) {
+                 QCustomLayoutStruct *data = &chain[i];
+-                if (!data->done
+-                     && data->minimumSize >= data->smartSizeHint()) {
+-                    data->size = data->smartSizeHint();
++                if (data->done)
++                    continue;
++                // if (sumStretch <= 0)
++                fp_w += fp_over / n;
++                // else
++                //    fp_w += (fp_over * data->stretch) / sumStretch;
++                int w = fRound(fp_w);
++                data->size = data->smartSizeHint() - w;
++                fp_w -= toFixed(w); // give the difference to the next
++                if (data->size < data->minimumSize) {
+                     data->done = true;
+-                    space_left -= data->smartSizeHint();
++                    data->size = data->minimumSize;
++                    finished = false;
++                    overdraft -= data->smartSizeHint() - data->minimumSize;
+                     // sumStretch -= data->stretch;
+                     n--;
++                    break;
+                 }
+             }
+-            bool finished = n == 0;
+-            while (!finished) {
+-                finished = true;
+-                Fixed64 fp_over = toFixed(overdraft);
+-                Fixed64 fp_w = 0;
+-
+-                for (i = start; i < start+count; i++) {
+-                    QCustomLayoutStruct *data = &chain[i];
+-                    if (data->done)
+-                        continue;
+-                    // if (sumStretch <= 0)
+-                    fp_w += fp_over / n;
+-                    // else
+-                    //    fp_w += (fp_over * data->stretch) / sumStretch;
+-                    int w = fRound(fp_w);
+-                    data->size = data->smartSizeHint() - w;
+-                    fp_w -= toFixed(w); // give the difference to the next
+-                    if (data->size < data->minimumSize) {
+-                        data->done = true;
+-                        data->size = data->minimumSize;
+-                        finished = false;
+-                        overdraft -= data->smartSizeHint() - data->minimumSize;
+-                        // sumStretch -= data->stretch;
+-                        n--;
+-                        break;
+-                    }
+-                }
++        }
++    } else { // extra space
++        int n = count;
++        int space_left = space - sumSpacing;
++        // first give to the fixed ones, and handle non-expansiveness
++        for (i = start; i < start + count; i++) {
++            QCustomLayoutStruct *data = &chain[i];
++            if (!data->done
++                && (data->maximumSize <= data->smartSizeHint()
++                    || (!allEmptyNonstretch && data->empty && !data->expansive && data->stretch == 0))) {
++                data->size = data->smartSizeHint();
++                data->done = true;
++                space_left -= data->size;
++                sumStretch -= data->stretch;
++                if (data->expansive)
++                    expandingCount--;
++                n--;
+             }
+-        } else { // extra space
+-            int n = count;
+-            int space_left = space - sumSpacing;
+-            // first give to the fixed ones, and handle non-expansiveness
++        }
++        extraspace = space_left;
++
++        /*
++          Do a trial distribution and calculate how much it is off.
++          If there are more deficit pixels than surplus pixels, give
++          the minimum size items what they need, and repeat.
++          Otherwise give to the maximum size items, and repeat.
++
++          Paul Olav Tvete has a wonderful mathematical proof of the
++          correctness of this principle, but unfortunately this
++          comment is too small to contain it.
++        */
++        int surplus, deficit;
++        do {
++            surplus = deficit = 0;
++            Fixed64 fp_space = toFixed(space_left);
++            Fixed64 fp_w = 0;
+             for (i = start; i < start + count; i++) {
+                 QCustomLayoutStruct *data = &chain[i];
+-                if (!data->done
+-                    && (data->maximumSize <= data->smartSizeHint()
+-                        || (!allEmptyNonstretch && data->empty &&
+-                            !data->expansive && data->stretch == 0))) {
+-                    data->size = data->smartSizeHint();
+-                    data->done = true;
+-                    space_left -= data->size;
+-                    sumStretch -= data->stretch;
+-                     if (data->expansive)
+-                         expandingCount--;
+-                    n--;
++                if (data->done)
++                    continue;
++                extraspace = 0;
++                if (sumStretch > 0) {
++                    fp_w += (fp_space * data->stretch) / sumStretch;
++                } else if (expandingCount > 0) {
++                    fp_w += (fp_space * (data->expansive ? 1 : 0)) / expandingCount;
++                } else {
++                    fp_w += fp_space * 1 / n;
++                }
++                int w = fRound(fp_w);
++                data->size = w;
++                fp_w -= toFixed(w); // give the difference to the next
++                if (w < data->smartSizeHint()) {
++                    deficit += data->smartSizeHint() - w;
++                } else if (w > data->maximumSize) {
++                    surplus += w - data->maximumSize;
+                 }
+             }
+-            extraspace = space_left;
+-
+-            /*
+-              Do a trial distribution and calculate how much it is off.
+-              If there are more deficit pixels than surplus pixels, give
+-              the minimum size items what they need, and repeat.
+-              Otherwise give to the maximum size items, and repeat.
+-
+-              Paul Olav Tvete has a wonderful mathematical proof of the
+-              correctness of this principle, but unfortunately this
+-              comment is too small to contain it.
+-            */
+-            int surplus, deficit;
+-            do {
+-                surplus = deficit = 0;
+-                Fixed64 fp_space = toFixed(space_left);
+-                Fixed64 fp_w = 0;
++            if (deficit > 0 && surplus <= deficit) {
++                // give to the ones that have too little
+                 for (i = start; i < start + count; i++) {
+                     QCustomLayoutStruct *data = &chain[i];
+-                    if (data->done)
+-                        continue;
+-                    extraspace = 0;
+-                    if (sumStretch > 0) {
+-                        fp_w += (fp_space * data->stretch) / sumStretch;
+-                    } else if (expandingCount > 0) {
+-                        fp_w += (fp_space * (data->expansive ? 1 : 0)) / expandingCount;
+-                    } else {
+-                        fp_w += fp_space * 1 / n;
+-                    }
+-                    int w = fRound(fp_w);
+-                    data->size = w;
+-                    fp_w -= toFixed(w); // give the difference to the next
+-                    if (w < data->smartSizeHint()) {
+-                        deficit +=  data->smartSizeHint() - w;
+-                    } else if (w > data->maximumSize) {
+-                        surplus += w - data->maximumSize;
+-                    }
+-                }
+-                if (deficit > 0 && surplus <= deficit) {
+-                    // give to the ones that have too little
+-                    for (i = start; i < start+count; i++) {
+-                        QCustomLayoutStruct *data = &chain[i];
+-                        if (!data->done && data->size < data->smartSizeHint()) {
+-                            data->size = data->smartSizeHint();
+-                            data->done = true;
+-                            space_left -= data->smartSizeHint();
+-                            sumStretch -= data->stretch;
+-                            if (data->expansive)
+-                                expandingCount--;
+-                            n--;
+-                        }
++                    if (!data->done && data->size < data->smartSizeHint()) {
++                        data->size = data->smartSizeHint();
++                        data->done = true;
++                        space_left -= data->smartSizeHint();
++                        sumStretch -= data->stretch;
++                        if (data->expansive)
++                            expandingCount--;
++                        n--;
+                     }
+                 }
+-                if (surplus > 0 && surplus >= deficit) {
+-                    // take from the ones that have too much
+-                    for (i = start; i < start + count; i++) {
+-                        QCustomLayoutStruct *data = &chain[i];
+-                        if (!data->done && data->size > data->maximumSize) {
+-                            data->size = data->maximumSize;
+-                            data->done = true;
+-                            space_left -= data->maximumSize;
+-                            sumStretch -= data->stretch;
+-                            if (data->expansive)
+-                                expandingCount--;
+-                            n--;
+-                        }
++            }
++            if (surplus > 0 && surplus >= deficit) {
++                // take from the ones that have too much
++                for (i = start; i < start + count; i++) {
++                    QCustomLayoutStruct *data = &chain[i];
++                    if (!data->done && data->size > data->maximumSize) {
++                        data->size = data->maximumSize;
++                        data->done = true;
++                        space_left -= data->maximumSize;
++                        sumStretch -= data->stretch;
++                        if (data->expansive)
++                            expandingCount--;
++                        n--;
+                     }
+                 }
+-            } while (n > 0 && surplus != deficit);
+-            if (n == 0)
+-                extraspace = space_left;
+-        }
+-
+-        /*
+-          As a last resort, we distribute the unwanted space equally
+-          among the spacers (counting the start and end of the chain). We
+-          could, but don't, attempt a sub-pixel allocation of the extra
+-          space.
+-        */
+-        int extra = extraspace / (spacerCount + 2);
+-        int p = pos + extra;
+-        for (i = start; i < start+count; i++) {
+-            QCustomLayoutStruct *data = &chain[i];
+-            data->pos = p;
+-            p += data->size;
+-            if (!data->empty)
+-                p += data->effectiveSpacer(spacer) + extra;
+-        }
++            }
++        } while (n > 0 && surplus != deficit);
++        if (n == 0)
++            extraspace = space_left;
++    }
+ 
+-    #ifdef QLAYOUT_EXTRA_DEBUG
+-        qDebug() << "qGeomCalc" << "start" << start <<  "count" << count <<  "pos" << pos
+-                 <<  "space" << space <<  "spacer" << spacer;
+-        for (i = start; i < start + count; ++i) {
+-            qDebug() << i << ':' << chain[i].minimumSize << chain[i].smartSizeHint()
+-                     << chain[i].maximumSize << "stretch" << chain[i].stretch
+-                     << "empty" << chain[i].empty << "expansive" << chain[i].expansive
+-                     << "spacing" << chain[i].spacing;
+-            qDebug() << "result pos" << chain[i].pos << "size" << chain[i].size;
+-        }
+-    #endif
++    /*
++      As a last resort, we distribute the unwanted space equally
++      among the spacers (counting the start and end of the chain). We
++      could, but don't, attempt a sub-pixel allocation of the extra
++      space.
++    */
++    int extra = extraspace / (spacerCount + 2);
++    int p = pos + extra;
++    for (i = start; i < start + count; i++) {
++        QCustomLayoutStruct *data = &chain[i];
++        data->pos = p;
++        p += data->size;
++        if (!data->empty)
++            p += data->effectiveSpacer(spacer) + extra;
++    }
++
++#ifdef QLAYOUT_EXTRA_DEBUG
++    qDebug() << "qGeomCalc"
++             << "start" << start << "count" << count << "pos" << pos
++             << "space" << space << "spacer" << spacer;
++    for (i = start; i < start + count; ++i) {
++        qDebug() << i << ':' << chain[i].minimumSize << chain[i].smartSizeHint()
++                 << chain[i].maximumSize << "stretch" << chain[i].stretch
++                 << "empty" << chain[i].empty << "expansive" << chain[i].expansive
++                 << "spacing" << chain[i].spacing;
++        qDebug() << "result pos" << chain[i].pos << "size" << chain[i].size;
++    }
++#endif
+ }
+ 
+ int KCustomTabBarPrivate::calculateNewPosition(int from, int to, int index) const
+@@ -2269,7 +2313,7 @@ void KCustomTabBar::moveTab(int from, int to)
+     if (d->pressedIndex != -1) {
+         // Record the position of the pressed tab before reordering the tabs.
+         oldPressedPosition = vertical ? d->tabList[d->pressedIndex].rect.y()
+-                             : d->tabList[d->pressedIndex].rect.x();
++                                      : d->tabList[d->pressedIndex].rect.x();
+     }
+ 
+     // Update the locations of the tabs first
+@@ -2341,8 +2385,8 @@ void KCustomTabBarPrivate::slide(int from, int to)
+ {
+     Q_Q(KCustomTabBar);
+     if (from == to
+-            || !validIndex(from)
+-            || !validIndex(to))
++        || !validIndex(from)
++        || !validIndex(to))
+         return;
+     bool vertical = verticalTabs(shape);
+     int preLocation = vertical ? q->tabRect(from).y() : q->tabRect(from).x();
+@@ -2365,14 +2409,14 @@ void KCustomTabBarPrivate::moveTab(int index, int offset)
+ }
+ 
+ /*!\reimp
+-*/
++ */
+ void KCustomTabBar::mousePressEvent(QMouseEvent *event)
+ {
+     Q_D(KCustomTabBar);
+ 
+     const QPoint pos = event->pos();
+     const bool isEventInCornerButtons = (!d->leftB->isHidden() && d->leftB->geometry().contains(pos))
+-                                     || (!d->rightB->isHidden() && d->rightB->geometry().contains(pos));
++        || (!d->rightB->isHidden() && d->rightB->geometry().contains(pos));
+     if (!isEventInCornerButtons) {
+         const int index = d->indexAtPos(pos);
+         emit tabBarClicked(index);
+@@ -2481,7 +2525,7 @@ void KCustomTabBarPrivate::setupMovableTab()
+     if (!movingTab)
+         movingTab = new KCustomMovableTabWidget(q);
+ 
+-    int taboverlap = q->style()->pixelMetric(QStyle::PM_TabBarTabOverlap, 0 ,q);
++    int taboverlap = q->style()->pixelMetric(QStyle::PM_TabBarTabOverlap, 0, q);
+     QRect grabRect = q->tabRect(pressedIndex);
+     if (verticalTabs(shape))
+         grabRect.adjust(0, -taboverlap, 0, taboverlap);
+@@ -2526,14 +2570,14 @@ void KCustomTabBarPrivate::moveTabFinished(int index)
+     bool cleanup = (pressedIndex == index) || (pressedIndex == -1) || !validIndex(index);
+     bool allAnimationsFinished = true;
+ #if QT_CONFIG(animation)
+-    for(int i = 0; allAnimationsFinished && i < tabList.count(); ++i) {
++    for (int i = 0; allAnimationsFinished && i < tabList.count(); ++i) {
+         const Tab &t = tabList.at(i);
+         if (t.animation && t.animation->state() == QAbstractAnimation::Running)
+             allAnimationsFinished = false;
+     }
+ #endif // animation
+     if (allAnimationsFinished && cleanup) {
+-        if(movingTab)
++        if (movingTab)
+             movingTab->setVisible(false); // We might not get a mouse release
+         for (int i = 0; i < tabList.count(); ++i) {
+             tabList[i].dragOffset = 0;
+@@ -2553,7 +2597,7 @@ void KCustomTabBarPrivate::moveTabFinished(int index)
+ }
+ 
+ /*!\reimp
+-*/
++ */
+ void KCustomTabBar::mouseReleaseEvent(QMouseEvent *event)
+ {
+     Q_D(KCustomTabBar);
+@@ -2567,7 +2611,7 @@ void KCustomTabBar::mouseReleaseEvent(QMouseEvent *event)
+             ? tabRect(d->pressedIndex).height()
+             : tabRect(d->pressedIndex).width();
+         int duration = qMin(ANIMATION_DURATION,
+-                (qAbs(length) * ANIMATION_DURATION) / width);
++                            (qAbs(length) * ANIMATION_DURATION) / width);
+         d->tabList[d->pressedIndex].startAnimation(d, duration);
+         d->dragInProgress = false;
+         d->movingTab->setVisible(false);
+@@ -2580,7 +2624,7 @@ void KCustomTabBar::mouseReleaseEvent(QMouseEvent *event)
+     optTabBase.initFrom(this);
+     optTabBase.documentMode = d->documentMode;
+     const bool selectOnRelease =
+-            (style()->styleHint(QStyle::SH_TabBar_SelectMouseType, &optTabBase, this) == QEvent::MouseButtonRelease);
++        (style()->styleHint(QStyle::SH_TabBar_SelectMouseType, &optTabBase, this) == QEvent::MouseButtonRelease);
+     if (selectOnRelease)
+         setCurrentIndex(i);
+     if (!selectOnRelease || !d->validIndex(i) || d->currentIndex == i)
+@@ -2766,8 +2810,8 @@ void KCustomTabBar::setTabsClosable(bool closable)
+                 continue;
+             newButtons = true;
+             QAbstractButton *closeButton = new CloseButton(this);
+-//            connect(closeButton, SIGNAL(clicked()), this, SLOT(_q_closeTab()));
+-            connect(closeButton,&QAbstractButton::clicked,this,[=]{
++            //            connect(closeButton, SIGNAL(clicked()), this, SLOT(_q_closeTab()));
++            connect(closeButton, &QAbstractButton::clicked, this, [=] {
+                 closeTab();
+             });
+             setTabButton(i, closeSide, closeButton);
+@@ -2816,7 +2860,6 @@ void KCustomTabBar::setTabsClosable(bool closable)
+     \sa removeTab()
+ */
+ 
+-
+ KCustomTabBar::SelectionBehavior KCustomTabBar::selectionBehaviorOnRemove() const
+ {
+     Q_D(const KCustomTabBar);
+@@ -2876,7 +2919,6 @@ void KCustomTabBar::setMovable(bool movable)
+     d->movable = movable;
+ }
+ 
+-
+ /*!
+     \property KCustomTabBar::documentMode
+     \brief Whether or not the tab bar is rendered in a mode suitable for the main window.
+@@ -3109,11 +3151,12 @@ void KCustomTabBarPrivate::Tab::TabBarAnimation::updateCurrentValue(const QVaria
+ 
+ void KCustomTabBarPrivate::Tab::TabBarAnimation::updateState(QAbstractAnimation::State newState, QAbstractAnimation::State)
+ {
+-    if (newState == Stopped) priv->moveTabFinished(priv->tabList.indexOf(*tab));
++    if (newState == Stopped)
++        priv->moveTabFinished(priv->tabList.indexOf(*tab));
+ }
+ #endif
+ 
+ QT_END_NAMESPACE
+ 
+-#include "moc_kcustomtabbar.cpp"
+ #include "kcustomtabbar.moc"
++#include "moc_kcustomtabbar.cpp"
+diff --git a/kysdk-qtwidgets/src/kcustomtabbar.h b/kysdk-qtwidgets/src/kcustomtabbar.h
+index b4d2a64..ee1fb88 100644
+--- a/kysdk-qtwidgets/src/kcustomtabbar.h
++++ b/kysdk-qtwidgets/src/kcustomtabbar.h
+@@ -22,16 +22,16 @@
+ #ifndef KCUSTOMBAR_H
+ #define KCUSTOMBAR_H
+ 
+-#include <QtWidgets/qtwidgetsglobal.h>
+-#include <QtWidgets/qwidget.h>
+-#include <QTabBar>
+-#include <QLayoutItem>
+ #include <QIcon>
++#include <QLayoutItem>
+ #include <QStyleOptionTab>
++#include <QTabBar>
++#include <QtWidgets/qtwidgetsglobal.h>
++#include <QtWidgets/qwidget.h>
+ 
+ class KCustomTabBarPrivate;
+ 
+-class KCustomTabBar: public QWidget
++class KCustomTabBar : public QWidget
+ {
+     Q_OBJECT
+ 
+@@ -54,8 +54,14 @@ public:
+     explicit KCustomTabBar(QWidget *parent = nullptr);
+     ~KCustomTabBar();
+ 
+-    enum Shape { RoundedNorth, RoundedSouth, RoundedWest, RoundedEast,
+-                 TriangularNorth, TriangularSouth, TriangularWest, TriangularEast
++    enum Shape { RoundedNorth,
++                 RoundedSouth,
++                 RoundedWest,
++                 RoundedEast,
++                 TriangularNorth,
++                 TriangularSouth,
++                 TriangularWest,
++                 TriangularEast
+     };
+     Q_ENUM(Shape)
+ 
+@@ -77,7 +83,7 @@ public:
+     int addTab(const QIcon &icon, const QString &text);
+ 
+     int insertTab(int index, const QString &text);
+-    int insertTab(int index, const QIcon&icon, const QString &text);
++    int insertTab(int index, const QIcon &icon, const QString &text);
+ 
+     void removeTab(int index);
+     void moveTab(int from, int to);
+@@ -99,15 +105,15 @@ public:
+     Qt::TextElideMode elideMode() const;
+     void setElideMode(Qt::TextElideMode);
+ 
+-//#ifndef QT_NO_TOOLTIP
++    // #ifndef QT_NO_TOOLTIP
+     void setTabToolTip(int index, const QString &tip);
+     QString tabToolTip(int index) const;
+-//#endif
++    // #endif
+ 
+-//#if QT_CONFIG(whatsthis)
++    // #if QT_CONFIG(whatsthis)
+     void setTabWhatsThis(int index, const QString &text);
+     QString tabWhatsThis(int index) const;
+-//#endif
++    // #endif
+ 
+     void setTabData(int index, const QVariant &data);
+     QVariant tabData(int index) const;
+@@ -154,14 +160,14 @@ public:
+     bool changeCurrentOnDrag() const;
+     void setChangeCurrentOnDrag(bool change);
+ 
+-//#ifndef QT_NO_ACCESSIBILITY
++    // #ifndef QT_NO_ACCESSIBILITY
+     QString accessibleTabName(int index) const;
+     void setAccessibleTabName(int index, const QString &name);
+-//#endif
++    // #endif
+ 
+ public Q_SLOTS:
+     void setCurrentIndex(int index);
+-//    void scrollTabs();
++    //    void scrollTabs();
+     void leftScrollTabs();
+     void rightScrollTabs();
+     void closeTab();
+@@ -187,22 +193,22 @@ protected:
+     void showEvent(QShowEvent *) override;
+     void hideEvent(QHideEvent *) override;
+     void paintEvent(QPaintEvent *) override;
+-    void mousePressEvent (QMouseEvent *) override;
+-    void mouseMoveEvent (QMouseEvent *) override;
+-    void mouseReleaseEvent (QMouseEvent *) override;
++    void mousePressEvent(QMouseEvent *) override;
++    void mouseMoveEvent(QMouseEvent *) override;
++    void mouseReleaseEvent(QMouseEvent *) override;
+     void wheelEvent(QWheelEvent *event) override;
+     void keyPressEvent(QKeyEvent *) override;
+     void changeEvent(QEvent *) override;
+     void timerEvent(QTimerEvent *event) override;
+     void initStyleOption(QStyleOptionTab *option, int tabIndex) const;
+ 
+-//#ifndef QT_NO_ACCESSIBILITY
+-//    friend class QAccessibleTabBar;
+-//#endif
++    // #ifndef QT_NO_ACCESSIBILITY
++    //     friend class QAccessibleTabBar;
++    // #endif
+ private:
+     Q_DISABLE_COPY(KCustomTabBar)
+     Q_DECLARE_PRIVATE(KCustomTabBar)
+-    KCustomTabBarPrivate* const d_ptr;
++    KCustomTabBarPrivate *const d_ptr;
+ };
+ 
+ #endif // QTABBAR_H
+diff --git a/kysdk-qtwidgets/src/kdialog.cpp b/kysdk-qtwidgets/src/kdialog.cpp
+index b19e0bd..1dd4876 100644
+--- a/kysdk-qtwidgets/src/kdialog.cpp
++++ b/kysdk-qtwidgets/src/kdialog.cpp
+@@ -21,88 +21,86 @@
+  */
+ 
+ #include "kdialog.h"
+-#include <QBoxLayout>
+-#include <QApplication>
+-#include "xatom-helper.h"
+ #include "parmscontroller.h"
++#include "xatom-helper.h"
++#include <QApplication>
++#include <QBoxLayout>
+ #include <QDesktopWidget>
+ 
+ #include "ukuistylehelper/ukui-decoration-manager.h"
+ #include "ukuistylehelper/ukui-shell-manager.h"
+ namespace kdk
+ {
+-class KDialogPrivate:public QObject
++class KDialogPrivate : public QObject
+ {
+     Q_OBJECT
+     Q_DECLARE_PUBLIC(KDialog)
+ public:
+-    KDialogPrivate(KDialog*parent);
++    KDialogPrivate(KDialog *parent);
++
+ private:
+     KDialog *q_ptr;
+     KIconBar *m_pIconBar;
+-    KWindowButtonBar* m_pWindowButtonBar;
+-    QHBoxLayout* m_pTitleLayout;
+-    QVBoxLayout* m_pMainLayout;
+-    QWidget* m_pMainWidget;
++    KWindowButtonBar *m_pWindowButtonBar;
++    QHBoxLayout *m_pTitleLayout;
++    QVBoxLayout *m_pMainLayout;
++    QWidget *m_pMainWidget;
+     QString m_IconName;
+ };
+ 
+ KDialog::KDialog(QWidget *parent)
+-    :QDialog(parent),
+-     d_ptr(new KDialogPrivate(this))
++    : QDialog(parent)
++    , d_ptr(new KDialogPrivate(this))
+ {
+     Q_D(KDialog);
+     setFocusPolicy(Qt::ClickFocus);
+     setObjectName("Kdialog");
+ 
+     QString platform = QGuiApplication::platformName();
+-    if(platform.startsWith(QLatin1String("xcb"),Qt::CaseInsensitive))
+-    {
++    if (platform.startsWith(QLatin1String("xcb"), Qt::CaseInsensitive)) {
+         MotifWmHints hints;
+-        hints.flags = MWM_HINTS_FUNCTIONS|MWM_HINTS_DECORATIONS;
++        hints.flags = MWM_HINTS_FUNCTIONS | MWM_HINTS_DECORATIONS;
+         hints.functions = MWM_FUNC_ALL;
+         hints.decorations = MWM_DECOR_BORDER;
+         XAtomHelper::getInstance()->setWindowMotifHint(this->winId(), hints);
+     }
+ 
+-    connect(d->m_pWindowButtonBar->minimumButton(),&QPushButton::clicked,this,&KDialog::showMinimized);
+-    connect(d->m_pWindowButtonBar->maximumButton(),&QPushButton::clicked,this,[=]()
+-        {
+-            if(this->isMaximized())
+-                showNormal();
+-            else
+-                showMaximized();
+-        });
+-    connect(d->m_pWindowButtonBar->closeButton(),&QPushButton::clicked,this,&KDialog::close);
+-    connect(d->m_pWindowButtonBar,&KWindowButtonBar::doubleClick,this,[=]()
+-        {
+-            if(this->isMaximized())
+-                showNormal();
+-            else
+-                showMaximized();
+-        });
+-    connect(d->m_pIconBar,&KIconBar::doubleClick,this,[=]()
+-        {
+-            if(this->isMaximized())
+-                showNormal();
+-            else
+-                showMaximized();
+-        });
++    connect(d->m_pWindowButtonBar->minimumButton(), &QPushButton::clicked, this, &KDialog::showMinimized);
++    connect(d->m_pWindowButtonBar->maximumButton(), &QPushButton::clicked, this, [=]() {
++        if (this->isMaximized())
++            showNormal();
++        else
++            showMaximized();
++    });
++    connect(d->m_pWindowButtonBar->closeButton(), &QPushButton::clicked, this, &KDialog::close);
++    connect(d->m_pWindowButtonBar, &KWindowButtonBar::doubleClick, this, [=]() {
++        if (this->isMaximized())
++            showNormal();
++        else
++            showMaximized();
++    });
++    connect(d->m_pIconBar, &KIconBar::doubleClick, this, [=]() {
++        if (this->isMaximized())
++            showNormal();
++        else
++            showMaximized();
++    });
+ 
+     changeIconStyle();
+-    connect(m_gsetting,&QGSettings::changed,this,[=](){changeIconStyle();});
++    connect(m_gsetting, &QGSettings::changed, this, [=]() {
++        changeIconStyle();
++    });
+     changeTheme();
+-    connect(m_gsetting,&QGSettings::changed,this,&KDialog::changeTheme);
+-    connect(Parmscontroller::self(),&Parmscontroller::modeChanged,this,[=](){
++    connect(m_gsetting, &QGSettings::changed, this, &KDialog::changeTheme);
++    connect(Parmscontroller::self(), &Parmscontroller::modeChanged, this, [=]() {
+         updateGeometry();
+     });
+     installEventFilter(this);
+-    resize(600,480);
++    resize(600, 480);
+ }
+ 
+ KDialog::~KDialog()
+ {
+-
+ }
+ 
+ void KDialog::setWindowIcon(const QIcon &icon)
+@@ -125,8 +123,7 @@ void KDialog::setWindowTitle(const QString &title)
+ {
+     Q_D(KDialog);
+     QVariant value = this->property("isAboutDialog");
+-    if(value.isNull() || !value.toBool())
+-    {
++    if (value.isNull() || !value.toBool()) {
+         d->m_pIconBar->setWidgetName(title);
+     }
+     QDialog::setWindowTitle(title);
+@@ -156,11 +153,10 @@ KMenuButton *KDialog::menuButton()
+     return d->m_pWindowButtonBar->menuButton();
+ }
+ 
+-
+ QWidget *KDialog::mainWidget()
+ {
+     Q_D(KDialog);
+-    if(d->m_pMainWidget)
++    if (d->m_pMainWidget)
+         return d->m_pMainWidget;
+ }
+ 
+@@ -179,28 +175,25 @@ KIconBar *KDialog::iconBar()
+ bool KDialog::eventFilter(QObject *target, QEvent *event)
+ {
+     Q_D(KDialog);
+-    if(target == this && (event->type() == QEvent::WindowStateChange || event->type() == QEvent::Show))
+-    {
+-        if(event->type() == QEvent::Show)
+-        {
++    if (target == this && (event->type() == QEvent::WindowStateChange || event->type() == QEvent::Show)) {
++        if (event->type() == QEvent::Show) {
+             MotifWmHints hints;
+-            hints.flags = MWM_HINTS_FUNCTIONS|MWM_HINTS_DECORATIONS;
++            hints.flags = MWM_HINTS_FUNCTIONS | MWM_HINTS_DECORATIONS;
+             hints.functions = MWM_FUNC_ALL;
+             hints.decorations = MWM_DECOR_BORDER;
+             XAtomHelper::getInstance()->setWindowMotifHint(this->winId(), hints);
+ 
+-            QWidget *parentWindow = qobject_cast<QWidget*>(this->parent());
++            QWidget *parentWindow = qobject_cast<QWidget *>(this->parent());
+ 
+-            while(parentWindow && parentWindow->parent())
+-                parentWindow = qobject_cast<QWidget*>(parentWindow->parent());
++            while (parentWindow && parentWindow->parent())
++                parentWindow = qobject_cast<QWidget *>(parentWindow->parent());
+ 
+-            if(parentWindow && parentWindow->isActiveWindow()){
++            if (parentWindow && parentWindow->isActiveWindow()) {
+                 const QPoint parentWindowCenter = parentWindow->geometry().center();
+                 const QPoint dialogCenter = this->geometry().center();
+                 const QPoint moveOffset = parentWindowCenter - dialogCenter;
+                 move(pos() + moveOffset);
+-            }
+-            else{
++            } else {
+                 QDesktopWidget desktop;
+                 int screenWidth = desktop.screen()->width();
+                 int screenHeight = desktop.screen()->height();
+@@ -211,32 +204,28 @@ bool KDialog::eventFilter(QObject *target, QEvent *event)
+                 this->move(messageBox_X, messageBox_Y);
+             }
+         }
+-        if(this->isMaximized())
++        if (this->isMaximized())
+             d->m_pWindowButtonBar->setMaximumButtonState(MaximumButtonState::Restore);
+         else
+             d->m_pWindowButtonBar->setMaximumButtonState(MaximumButtonState::Maximum);
+     }
+-    if(target == this && (event->type() == QEvent::WindowActivate|| event->type() == QEvent::WindowDeactivate))
+-    {
++    if (target == this && (event->type() == QEvent::WindowActivate || event->type() == QEvent::WindowDeactivate)) {
+         changeTheme();
+     }
+     QString platform = QGuiApplication::platformName();
+-    if(platform.startsWith(QLatin1String("wayland"),Qt::CaseInsensitive))
+-    {
+-        if((event->type() == QEvent::PlatformSurface || event->type() == QEvent::Show || event->type() == QEvent::UpdateRequest || event->type() == QEvent::ChildAdded || event->type() == QEvent::ChildPolished))
+-        {
+-            #ifdef USE_UKUI_PROTOCOL
+-            if(UkuiShellManager::getInstance()->ukuishellReady())
++    if (platform.startsWith(QLatin1String("wayland"), Qt::CaseInsensitive)) {
++        if ((event->type() == QEvent::PlatformSurface || event->type() == QEvent::Show || event->type() == QEvent::UpdateRequest || event->type() == QEvent::ChildAdded || event->type() == QEvent::ChildPolished)) {
++#ifdef USE_UKUI_PROTOCOL
++            if (UkuiShellManager::getInstance()->ukuishellReady())
+                 UkuiShellManager::getInstance()->removeHeaderBar(this->windowHandle());
+             else
+                 UKUIDecorationManager::getInstance()->removeHeaderBar(this->windowHandle());
+-            #else
+-                UKUIDecorationManager::getInstance()->removeHeaderBar(this->windowHandle());
+-            #endif
++#else
++            UKUIDecorationManager::getInstance()->removeHeaderBar(this->windowHandle());
++#endif
+         }
+     }
+-    if(target == this && (event->type() == QEvent::Close || event->type() == QEvent::Hide))
+-    {
++    if (target == this && (event->type() == QEvent::Close || event->type() == QEvent::Hide)) {
+         d->m_pWindowButtonBar->closeButton()->setAttribute(Qt::WA_UnderMouse, false);
+         QHoverEvent hoverEvent(QEvent::HoverLeave, QPoint(10, 10), QPoint(0, 0));
+         QCoreApplication::sendEvent(d->m_pWindowButtonBar->closeButton(), &hoverEvent);
+@@ -250,9 +239,9 @@ void KDialog::changeTheme()
+     initThemeStyle();
+     QPalette p = this->palette();
+     QColor color = ThemeController::getPaletteColorFromDT("base");
+-    p.setColor(QPalette::Window,color);
++    p.setColor(QPalette::Window, color);
+     this->setPalette(p);
+-    if(!d->m_IconName.isEmpty())
++    if (!d->m_IconName.isEmpty())
+         this->setWindowIcon(d->m_IconName);
+ }
+ 
+@@ -270,12 +259,12 @@ QBoxLayout *KDialog::mainLayout()
+ }
+ 
+ KDialogPrivate::KDialogPrivate(KDialog *parent)
+-    :q_ptr(parent)
++    : q_ptr(parent)
+ {
+     Q_Q(KDialog);
+     m_pMainLayout = new QVBoxLayout(q);
+     m_pTitleLayout = new QHBoxLayout();
+-    m_pTitleLayout->setContentsMargins(0,0,0,0);
++    m_pTitleLayout->setContentsMargins(0, 0, 0, 0);
+     m_pTitleLayout->setSpacing(0);
+     m_pTitleLayout = new QHBoxLayout;
+     m_pIconBar = new KIconBar(q);
+@@ -285,17 +274,17 @@ KDialogPrivate::KDialogPrivate(KDialog *parent)
+ 
+     m_pMainWidget = new QWidget(q);
+     m_pMainLayout->setSpacing(0);
+-    m_pMainLayout->setContentsMargins(0,0,0,0);
+-    m_pMainLayout->addLayout(m_pTitleLayout,Qt::AlignTop);
++    m_pMainLayout->setContentsMargins(0, 0, 0, 0);
++    m_pMainLayout->addLayout(m_pTitleLayout, Qt::AlignTop);
+     m_pMainLayout->addWidget(m_pMainWidget);
+ 
+-    //暂时先默认只显示关闭按钮
++    // 暂时先默认只显示关闭按钮
+     m_pWindowButtonBar->maximumButton()->hide();
+     m_pWindowButtonBar->menuButton()->hide();
+     m_pWindowButtonBar->minimumButton()->hide();
+ 
+-    connect(m_pWindowButtonBar->minimumButton(),&QPushButton::clicked,q,&KDialog::showMinimized);
+-    connect(m_pWindowButtonBar->closeButton(),&QPushButton::clicked,q,&KDialog::close);
++    connect(m_pWindowButtonBar->minimumButton(), &QPushButton::clicked, q, &KDialog::showMinimized);
++    connect(m_pWindowButtonBar->closeButton(), &QPushButton::clicked, q, &KDialog::close);
+     setParent(parent);
+ }
+ }
+diff --git a/kysdk-qtwidgets/src/kdialog.h b/kysdk-qtwidgets/src/kdialog.h
+index 08efc05..6cb5d19 100644
+--- a/kysdk-qtwidgets/src/kdialog.h
++++ b/kysdk-qtwidgets/src/kdialog.h
+@@ -23,32 +23,31 @@
+ #ifndef KDIALOG_H
+ #define KDIALOG_H
+ 
+-#include <QDialog>
+-#include <QPushButton>
+-#include <QBoxLayout>
+ #include "gui_g.h"
+ #include "kiconbar.h"
+ #include "kwindowbuttonbar.h"
+ #include "themeController.h"
+-
++#include <QBoxLayout>
++#include <QDialog>
++#include <QPushButton>
+ 
+ namespace kdk
+ {
+ 
+ /** @defgroup DialogBoxModule
+-  * @{
+-  */
++ * @{
++ */
+ 
+ class KDialogPrivate;
+ /**
+  * @brief 继承自 QDialog,支持响应式主题背景切换和图标主题切换、 标题颜色响应窗口激活状态
+  */
+-class GUI_EXPORT KDialog: public QDialog,public ThemeController
++class GUI_EXPORT KDialog : public QDialog, public ThemeController
+ {
+     Q_OBJECT
+ 
+ public:
+-    explicit KDialog(QWidget* parent=nullptr);
++    explicit KDialog(QWidget *parent = nullptr);
+     ~KDialog();
+ 
+     /**
+@@ -61,7 +60,7 @@ public:
+      * @brief 设置对话框图标
+      * @param iconName
+      */
+-    void setWindowIcon(const QString& iconName);
++    void setWindowIcon(const QString &iconName);
+ 
+     /**
+      * @brief 设置对话框标题名称
+@@ -73,51 +72,51 @@ public:
+      * @brief 获取最大化按钮
+      * @return
+      */
+-    QPushButton* maximumButton();
++    QPushButton *maximumButton();
+ 
+     /**
+      * @brief 获取最小化按钮
+      * @return
+      */
+-    QPushButton* minimumButton();
++    QPushButton *minimumButton();
+ 
+     /**
+      * @brief 获取关闭按钮
+      * @return
+      */
+-    QPushButton* closeButton();
++    QPushButton *closeButton();
+ 
+     /**
+      * @brief 获取下拉菜单按钮
+      * @return
+      */
+-    KMenuButton* menuButton();
++    KMenuButton *menuButton();
+ 
+     /**
+      * @brief 获取主内容区Widget
+      * @return
+      */
+-    QWidget* mainWidget();
++    QWidget *mainWidget();
+ 
+-    KWindowButtonBar* windowButtonBar();
++    KWindowButtonBar *windowButtonBar();
+ 
+-    KIconBar* iconBar();
++    KIconBar *iconBar();
+ 
+ protected:
+     bool eventFilter(QObject *target, QEvent *event) override;
+     void changeTheme();
+     void changeIconStyle();
+-    QBoxLayout* mainLayout();
++    QBoxLayout *mainLayout();
+ 
+ private:
+     Q_DECLARE_PRIVATE(KDialog)
+-    KDialogPrivate* const d_ptr;
++    KDialogPrivate *const d_ptr;
+ };
+ }
+ /**
+-  * @example testDialog/widget.h
+-  * @example testDialog/widget.cpp
+-  * @}
+-  */
++ * @example testDialog/widget.h
++ * @example testDialog/widget.cpp
++ * @}
++ */
+ 
+ #endif // KDIALOG_H
+diff --git a/kysdk-qtwidgets/src/kdirtabbar.cpp b/kysdk-qtwidgets/src/kdirtabbar.cpp
+old mode 100755
+new mode 100644
+index bbc72e4..8bdf71a
+--- a/kysdk-qtwidgets/src/kdirtabbar.cpp
++++ b/kysdk-qtwidgets/src/kdirtabbar.cpp
+@@ -1,21 +1,20 @@
+ #include "kdirtabbar.h"
+-#include <QList>
+-#include <QToolButton>
+-#include <QFileInfo>
++#include "themeController.h"
+ #include <QBoxLayout>
+-#include <QStringList>
+-#include <QDirIterator>
+-#include <QMenu>
+ #include <QDebug>
+-#include <QStyle>
+-#include <QStyleOptionToolButton>
++#include <QDirIterator>
++#include <QFileInfo>
+ #include <QFontMetrics>
+-#include <QSpacerItem>
++#include <QList>
++#include <QMenu>
+ #include <QPainter>
++#include <QSpacerItem>
++#include <QString>
++#include <QStringList>
+ #include <QStyle>
++#include <QStyleOptionToolButton>
+ #include <QStylePainter>
+-#include <QString>
+-#include "themeController.h"
++#include <QToolButton>
+ 
+ namespace kdk
+ {
+@@ -24,10 +23,10 @@ class CustomButton : public QToolButton
+ {
+     Q_OBJECT
+ public:
+-    CustomButton(QWidget* parent = nullptr);
++    CustomButton(QWidget *parent = nullptr);
+     QIcon setIconColor(QIcon icon, QColor color)
+     {
+-        QPixmap pixmap = icon.pixmap(QSize(16,16));
++        QPixmap pixmap = icon.pixmap(QSize(16, 16));
+         QPainter painter(&pixmap);
+         painter.setCompositionMode(QPainter::CompositionMode_SourceIn);
+         painter.fillRect(pixmap.rect(), color);
+@@ -36,118 +35,108 @@ public:
+     }
+ 
+ protected:
+-    void paintEvent(QPaintEvent * event);
++    void paintEvent(QPaintEvent *event);
+ };
+ 
+-class KDirTabBarPrivate:public QObject,public ThemeController
++class KDirTabBarPrivate : public QObject, public ThemeController
+ {
+     Q_OBJECT
+     Q_DECLARE_PUBLIC(KDirTabBar)
+ 
+ public:
+-    KDirTabBarPrivate(KDirTabBar*parent);
++    KDirTabBarPrivate(KDirTabBar *parent);
+ 
+     void clearButtons();
+-    void addButton(const QString &uri,QString buttonName, bool setMenu = true);
++    void addButton(const QString &uri, QString buttonName, bool setMenu = true);
+ 
+     void doLayout();
+ 
+     void changeTheme();
+ 
+ private:
+-    KDirTabBar* q_ptr;
++    KDirTabBar *q_ptr;
+     int m_visibleDepth;
+     int m_textLength;
+     QString m_currentPath;
+     QString m_rootPath;
+     QHBoxLayout *buttonLayout;
+     QHBoxLayout *m_layout;
+-//    QSpacerItem *spacer;
+-
+-    QList<QToolButton*> m_buttonList;
+-    QList<QFileInfo*> m_button_info;
++    //    QSpacerItem *spacer;
+ 
++    QList<QToolButton *> m_buttonList;
++    QList<QFileInfo *> m_button_info;
+ };
+ 
+-
+ KDirTabBar::KDirTabBar(QWidget *parent)
+-    : QWidget(parent),
+-      d_ptr(new KDirTabBarPrivate(this))
++    : QWidget(parent)
++    , d_ptr(new KDirTabBarPrivate(this))
+ {
+     Q_D(KDirTabBar);
+     d->m_visibleDepth = 5;
+     d->m_textLength = 5;
+-//    d->spacer = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
++    //    d->spacer = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
+ 
+     d->buttonLayout = new QHBoxLayout;
+-    d->buttonLayout->setContentsMargins(0,0,0,0);
++    d->buttonLayout->setContentsMargins(0, 0, 0, 0);
+     d->buttonLayout->setSpacing(0);
+     d->buttonLayout->setMargin(0);
+-    d->m_layout =new QHBoxLayout(this);
+-    d->m_layout->setContentsMargins(0,0,0,0);
++    d->m_layout = new QHBoxLayout(this);
++    d->m_layout->setContentsMargins(0, 0, 0, 0);
+     d->m_layout->setSpacing(0);
+     d->m_layout->setMargin(0);
+     d->m_layout->addLayout(d->buttonLayout);
+-//    d->m_layout->addItem(d->spacer);
++    //    d->m_layout->addItem(d->spacer);
+     d->m_layout->addStretch();
+     setLayout(d->m_layout);
+-//    setFocusPolicy(Qt::ClickFocus);
++    //    setFocusPolicy(Qt::ClickFocus);
+     setObjectName("KDirTabBar");
+ 
+-    connect(d->m_gsetting,&QGSettings::changed, d,&KDirTabBarPrivate::changeTheme);
++    connect(d->m_gsetting, &QGSettings::changed, d, &KDirTabBarPrivate::changeTheme);
+ }
+ 
+ KDirTabBar::~KDirTabBar()
+ {
+-
+ }
+ void KDirTabBar::setCurrentPath(const QString Dirpath)
+ {
+     Q_D(KDirTabBar);
+-    QList<QFileInfo*> lastInfo;
+-    for(auto info:d->m_button_info)
+-    {
+-        QFileInfo * fileinfo =new QFileInfo();
++    QList<QFileInfo *> lastInfo;
++    for (auto info : d->m_button_info) {
++        QFileInfo *fileinfo = new QFileInfo();
+         fileinfo = info;
+         lastInfo.append(fileinfo);
+     }
+ 
+-    d->m_currentPath=Dirpath;
++    d->m_currentPath = Dirpath;
+     d->m_button_info.clear();
+     auto tmpUri = Dirpath;
+-    QFileInfo* file =new QFileInfo(tmpUri) ;
++    QFileInfo *file = new QFileInfo(tmpUri);
+     while (tmpUri != "/" && tmpUri != "") {
+         d->m_button_info.prepend(file);
+-        tmpUri=file->absolutePath();
+-        file=new QFileInfo(tmpUri);
++        tmpUri = file->absolutePath();
++        file = new QFileInfo(tmpUri);
+     }
+-    if(lastInfo.isEmpty())
+-    {
+-    d->clearButtons();
+-        for(auto info : d->m_button_info)
+-        {
+-            d->addButton(info->absoluteFilePath(), info->fileName(),true);
++    if (lastInfo.isEmpty()) {
++        d->clearButtons();
++        for (auto info : d->m_button_info) {
++            d->addButton(info->absoluteFilePath(), info->fileName(), true);
+         }
+-    }
+-    else
+-    {
+-        while(d->m_button_info.size() < d->m_buttonList.size())//新的比旧的列表短时,去掉多余的Qlist项
++    } else {
++        while (d->m_button_info.size() < d->m_buttonList.size()) // 新的比旧的列表短时,去掉多余的Qlist项
+         {
+             d->m_buttonList.last()->deleteLater();
+             d->m_buttonList.removeLast();
+         }
+-        for(int i=d->m_buttonList.size()-1 ;i>=0;i--)
+-        {
+-            if(lastInfo[i]->absoluteFilePath() != d->m_button_info[i]->absoluteFilePath())//对比新旧列表中的每一项,如果不相同则remove按钮列表中的元素
++        for (int i = d->m_buttonList.size() - 1; i >= 0; i--) {
++            if (lastInfo[i]->absoluteFilePath() != d->m_button_info[i]->absoluteFilePath()) // 对比新旧列表中的每一项,如果不相同则remove按钮列表中的元素
+             {
+                 d->m_buttonList[i]->hide();
+                 d->m_buttonList[i]->deleteLater();
+                 d->m_buttonList.removeAt(i);
+             }
+         }
+-        for(int i=d->m_buttonList.size();i<d->m_button_info.size();i++)
+-        {
+-            d->addButton(d->m_button_info[i]->absoluteFilePath(), d->m_button_info[i]->fileName(),true);
++        for (int i = d->m_buttonList.size(); i < d->m_button_info.size(); i++) {
++            d->addButton(d->m_button_info[i]->absoluteFilePath(), d->m_button_info[i]->fileName(), true);
+         }
+     }
+ 
+@@ -157,7 +146,7 @@ void KDirTabBar::setCurrentPath(const QString Dirpath)
+     }
+     lastInfo.clear();
+ 
+-    d->doLayout(); //布局,最大显示个数
++    d->doLayout(); // 布局,最大显示个数
+ }
+ 
+ QString KDirTabBar::currentPath() const
+@@ -170,7 +159,7 @@ void KDirTabBar::setVisibleDepth(const int depth)
+ {
+     Q_D(KDirTabBar);
+     d->m_visibleDepth = depth;
+-    //dolayout
++    // dolayout
+ }
+ 
+ int KDirTabBar::visibleDepth()
+@@ -179,12 +168,11 @@ int KDirTabBar::visibleDepth()
+     return d->m_visibleDepth;
+ }
+ 
+-void KDirTabBar::setIcon(int index,const QIcon &icon)
++void KDirTabBar::setIcon(int index, const QIcon &icon)
+ {
+     Q_D(KDirTabBar);
+-    if(index<d->m_buttonList.size())
+-    {
+-        d->m_buttonList[index-1]->setIcon(icon);
++    if (index < d->m_buttonList.size()) {
++        d->m_buttonList[index - 1]->setIcon(icon);
+         d->doLayout();
+     }
+ }
+@@ -192,7 +180,7 @@ void KDirTabBar::setIcon(int index,const QIcon &icon)
+ QIcon KDirTabBar::icon(int index)
+ {
+     Q_D(KDirTabBar);
+-    return d->m_buttonList[index-1]->icon();
++    return d->m_buttonList[index - 1]->icon();
+ }
+ 
+ void KDirTabBar::setTextLength(int length)
+@@ -207,21 +195,20 @@ int KDirTabBar::textLength()
+     return d->m_textLength;
+ }
+ 
+-
+ QList<QToolButton *> KDirTabBar::buttons()
+ {
+     Q_D(KDirTabBar);
+     return d->m_buttonList;
+ }
+ 
+-
+-//void KDirTabBar::mousePressEvent(QMouseEvent *event)
++// void KDirTabBar::mousePressEvent(QMouseEvent *event)
+ //{
+-//    QWidget::mousePressEvent(event);
++//     QWidget::mousePressEvent(event);
+ 
+ //}
+ 
+-void KDirTabBarPrivate::addButton(const QString &uri, QString buttonName, bool setMenu){
++void KDirTabBarPrivate::addButton(const QString &uri, QString buttonName, bool setMenu)
++{
+     Q_Q(KDirTabBar);
+     CustomButton *button = new CustomButton(q);
+     QString displayName = buttonName;
+@@ -232,24 +219,21 @@ void KDirTabBarPrivate::addButton(const QString &uri, QString buttonName, bool s
+     button->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
+     button->setPopupMode(CustomButton::MenuButtonPopup);
+ 
+-    m_buttonList.append(static_cast<CustomButton*>(button));
++    m_buttonList.append(static_cast<CustomButton *>(button));
+ 
+     buttonLayout->addWidget(button);
+     button->setIcon(QIcon::fromTheme("folder"));
+     QFontMetrics ftm(q->font());
+ 
+-    if (displayName.length() > m_textLength)
+-    {
+-        int  charWidth = ftm.averageCharWidth();
++    if (displayName.length() > m_textLength) {
++        int charWidth = ftm.averageCharWidth();
+         displayName = ftm.elidedText(displayName, Qt::ElideRight, m_textLength * charWidth);
+     }
+ 
+-
+     button->setText(displayName);
+ 
+-    if (buttonName != displayName)
+-    {
+-       button->setToolTip(buttonName);
++    if (buttonName != displayName) {
++        button->setToolTip(buttonName);
+     }
+ 
+     connect(button, &CustomButton::clicked, [=]() {
+@@ -257,14 +241,13 @@ void KDirTabBarPrivate::addButton(const QString &uri, QString buttonName, bool s
+         emit q->tabBarClicked(uri);
+     });
+ 
+-    if (setMenu){
+-        QList<QFileInfo > uris;
++    if (setMenu) {
++        QList<QFileInfo> uris;
+         QDirIterator it(uri, QDir::Dirs | QDir::NoDotAndDotDot);
+         while (it.hasNext()) {
+             it.next();
+             QFileInfo fileInfo = it.fileInfo();
+-            if(fileInfo.isDir())
+-            {
++            if (fileInfo.isDir()) {
+                 uris << fileInfo;
+             }
+         }
+@@ -273,47 +256,47 @@ void KDirTabBarPrivate::addButton(const QString &uri, QString buttonName, bool s
+         connect(button, &CustomButton::destroyed, menu, &QMenu::deleteLater);
+         const int WIDTH_EXTEND = 5;
+ 
+-        connect(menu, &QMenu::aboutToShow, this, [=](){
++        connect(menu, &QMenu::aboutToShow, this, [=]() {
+             menu->setMinimumWidth(button->width() + WIDTH_EXTEND);
+         });
+-        connect(menu, &QMenu::aboutToHide, this, [=](){
++        connect(menu, &QMenu::aboutToHide, this, [=]() {
+         });
+ 
+         if (uris.isEmpty())
+             button->setPopupMode(CustomButton::InstantPopup);
+-        else{
++        else {
+             QList<QAction *> actions;
+             for (auto uri : uris) {
+                 QIcon icon;
+ 
+-                if(uri.baseName() == "图片")
++                if (uri.baseName() == "图片")
+                     icon = QIcon::fromTheme("folder-pictures");
+-                else if(uri.baseName() == "下载")
++                else if (uri.baseName() == "下载")
+                     icon = QIcon::fromTheme("folder-download");
+-                else if(uri.baseName() == "公共的")
++                else if (uri.baseName() == "公共的")
+                     icon = QIcon::fromTheme("folder-publicshare");
+-                else if(uri.baseName() == "文档")
++                else if (uri.baseName() == "文档")
+                     icon = QIcon::fromTheme("folder-documents");
+-                else if(uri.baseName() == "桌面")
++                else if (uri.baseName() == "桌面")
+                     icon = QIcon::fromTheme("user-desktop");
+-                else if(uri.baseName() == "模板")
++                else if (uri.baseName() == "模板")
+                     icon = QIcon::fromTheme("folder-templates");
+-                else if(uri.baseName() == "视频")
++                else if (uri.baseName() == "视频")
+                     icon = QIcon::fromTheme("folder-videos");
+-                else if(uri.baseName() == "音乐")
++                else if (uri.baseName() == "音乐")
+                     icon = QIcon::fromTheme("folder-music");
+                 else
+                     icon = QIcon::fromTheme("folder");
+ 
+                 QAction *action = new QAction(icon, uri.fileName(), this);
+-                actions<<action;
++                actions << action;
+                 connect(action, &QAction::triggered, [=]() {
+                     q->setCurrentPath(uri.absoluteFilePath());
+                     emit q->tabBarClicked(uri.absoluteFilePath());
+                 });
+             }
+             menu->addActions(actions);
+-            if(menu)
++            if (menu)
+                 button->setMenu(menu);
+         }
+     }
+@@ -323,20 +306,17 @@ void KDirTabBarPrivate::doLayout()
+ {
+     Q_Q(KDirTabBar);
+     int counter = 0;
+-    if(m_buttonList.size() > m_visibleDepth)
+-    {
++    if (m_buttonList.size() > m_visibleDepth) {
+         counter = m_buttonList.size() - m_visibleDepth;
+     }
+-    for(int i=0 ; i<m_buttonList.size() ; i++)
+-    {
++    for (int i = 0; i < m_buttonList.size(); i++) {
+         m_buttonList[i]->setVisible(false);
+     }
+-    for(counter; counter<m_buttonList.size() ;counter++)
+-    {
++    for (counter; counter < m_buttonList.size(); counter++) {
+         m_buttonList[counter]->setVisible(true);
+         m_buttonList[counter]->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
+         m_buttonList[counter]->adjustSize();
+-//        buttonLayout->addWidget(m_buttonList[counter]);
++        //        buttonLayout->addWidget(m_buttonList[counter]);
+     }
+ }
+ 
+@@ -356,25 +336,23 @@ void KDirTabBarPrivate::clearButtons()
+     m_buttonList.clear();
+ }
+ 
+-KDirTabBarPrivate::KDirTabBarPrivate(KDirTabBar*parent)
+-    :q_ptr(parent)
++KDirTabBarPrivate::KDirTabBarPrivate(KDirTabBar *parent)
++    : q_ptr(parent)
+ {
+-
+ }
+ 
+ CustomButton::CustomButton(QWidget *parent)
+ {
+-
+ }
+ 
+ void CustomButton::paintEvent(QPaintEvent *event)
+ {
+     QStyleOptionToolButton option;
+     initStyleOption(&option);
+-//QToolButton::paintEvent(event);
++    // QToolButton::paintEvent(event);
+ 
+     int ra = ThemeController::getRadiusFromDT("kradius-normal");
+-    if(ra == -1)
++    if (ra == -1)
+         ra = 6;
+     QColor textColor = ThemeController::getPaletteColorFromDT("text");
+     QColor backgroundColor;
+@@ -382,95 +360,78 @@ void CustomButton::paintEvent(QPaintEvent *event)
+     QPainter painter(this);
+     painter.setRenderHint(QPainter::Antialiasing);
+ 
+-    if(ThemeController::themeMode() == LightTheme){ //浅色模式
+-        if(!option.state.testFlag(QStyle::State_Enabled))
+-        {
+-            textColor = ThemeController::getPaletteColorFromDT("text",QPalette::Disabled);
+-        }
+-        else{
+-            //三态
+-            if(option.state.testFlag(QStyle::State_Sunken))
+-            {
+-                backgroundColor =QColor("#B9B9B9");
+-                //绘制背景颜色
++    if (ThemeController::themeMode() == LightTheme) { // 浅色模式
++        if (!option.state.testFlag(QStyle::State_Enabled)) {
++            textColor = ThemeController::getPaletteColorFromDT("text", QPalette::Disabled);
++        } else {
++            // 三态
++            if (option.state.testFlag(QStyle::State_Sunken)) {
++                backgroundColor = QColor("#B9B9B9");
++                // 绘制背景颜色
+                 painter.setBrush(backgroundColor);
+                 pen = QPen(backgroundColor);
+                 painter.setPen(pen);
+-                painter.drawRoundedRect(rect(),ra,ra);
+-            }
+-            else if (option.state.testFlag(QStyle::State_MouseOver))
+-            {
++                painter.drawRoundedRect(rect(), ra, ra);
++            } else if (option.state.testFlag(QStyle::State_MouseOver)) {
+                 backgroundColor = QColor("#DCDCDC");
+-                //绘制背景颜色
++                // 绘制背景颜色
+                 painter.setBrush(backgroundColor);
+                 pen = QPen(backgroundColor);
+                 painter.setPen(pen);
+-                painter.drawRoundedRect(rect(),ra,ra);
++                painter.drawRoundedRect(rect(), ra, ra);
+             }
+         }
+-    }
+-    else
+-    {
+-        if(!option.state.testFlag(QStyle::State_Enabled))
+-        {
+-            textColor = ThemeController::getPaletteColorFromDT("text",QPalette::Disabled);
+-        }
+-        else{
+-            //三态
+-            if(option.state.testFlag(QStyle::State_Sunken))
+-            {
+-                backgroundColor =QColor("#737373");
+-                //绘制背景颜色
++    } else {
++        if (!option.state.testFlag(QStyle::State_Enabled)) {
++            textColor = ThemeController::getPaletteColorFromDT("text", QPalette::Disabled);
++        } else {
++            // 三态
++            if (option.state.testFlag(QStyle::State_Sunken)) {
++                backgroundColor = QColor("#737373");
++                // 绘制背景颜色
+                 painter.setBrush(backgroundColor);
+                 pen = QPen(backgroundColor);
+                 painter.setPen(pen);
+-                painter.drawRoundedRect(rect(),ra,ra);
+-            }
+-            else if (option.state.testFlag(QStyle::State_MouseOver))
+-            {
++                painter.drawRoundedRect(rect(), ra, ra);
++            } else if (option.state.testFlag(QStyle::State_MouseOver)) {
+                 backgroundColor = QColor("#545454");
+-                //绘制背景颜色
++                // 绘制背景颜色
+                 painter.setBrush(backgroundColor);
+                 pen = QPen(backgroundColor);
+                 painter.setPen(pen);
+-                painter.drawRoundedRect(rect(),ra,ra);
++                painter.drawRoundedRect(rect(), ra, ra);
+             }
+         }
+     }
+ 
+     painter.end();
+ 
+-    //绘制图标、文本、箭头
++    // 绘制图标、文本、箭头
+     QPainter p(this);
+     QRect textRect;
+     uint tf = Qt::AlignVCenter;
+ 
+-    textRect = QRect(32 ,0 , option.rect.width()-64 , option.rect.height());
++    textRect = QRect(32, 0, option.rect.width() - 64, option.rect.height());
+ 
+-    if (menu() && menu()->isVisible())
+-    {
+-        p.drawPixmap(this->width()-24,(this->height()-16)/2,16,16,
+-                     ThemeController::drawColoredPixmap(QIcon::fromTheme("ukui-down-symbolic").pixmap(16,16),textColor));
+-    }
+-    else if ( menu() && !menu()->isVisible() )
+-    {
+-        p.drawPixmap(this->width()-24,(this->height()-16)/2,16,16,
+-                     setIconColor(QIcon::fromTheme("ukui-end-symbolic"),textColor).pixmap(16.16));
+-    }
+-    else
+-        textRect = QRect(32 ,0 , option.rect.width()-32 , option.rect.height());
++    if (menu() && menu()->isVisible()) {
++        p.drawPixmap(this->width() - 24, (this->height() - 16) / 2, 16, 16,
++                     ThemeController::drawColoredPixmap(QIcon::fromTheme("ukui-down-symbolic").pixmap(16, 16), textColor));
++    } else if (menu() && !menu()->isVisible()) {
++        p.drawPixmap(this->width() - 24, (this->height() - 16) / 2, 16, 16,
++                     setIconColor(QIcon::fromTheme("ukui-end-symbolic"), textColor).pixmap(16.16));
++    } else
++        textRect = QRect(32, 0, option.rect.width() - 32, option.rect.height());
+ 
+     if (!icon().isNull())
+-        p.drawPixmap(8,(option.rect.height()-16)/2,16,16,icon().pixmap(16,16));
++        p.drawPixmap(8, (option.rect.height() - 16) / 2, 16, 16, icon().pixmap(16, 16));
+     else
+-        textRect = QRect( 8, 0, option.rect.width()-32, option.rect.height());
++        textRect = QRect(8, 0, option.rect.width() - 32, option.rect.height());
+ 
+-    pen=QPen(textColor);
++    pen = QPen(textColor);
+     p.setPen(pen);
+-    p.drawText(textRect,tf,this->text());
++    p.drawText(textRect, tf, this->text());
+ 
+     p.end();
+-
+ }
+ 
+ }
+diff --git a/kysdk-qtwidgets/src/kdirtabbar.h b/kysdk-qtwidgets/src/kdirtabbar.h
+old mode 100755
+new mode 100644
+index ffc5c10..8e607f1
+--- a/kysdk-qtwidgets/src/kdirtabbar.h
++++ b/kysdk-qtwidgets/src/kdirtabbar.h
+@@ -1,8 +1,8 @@
+ #ifndef KDIRTABBAR_H
+ #define KDIRTABBAR_H
+ 
+-#include <QWidget>
+ #include <QToolButton>
++#include <QWidget>
+ 
+ namespace kdk
+ {
+@@ -38,13 +38,13 @@ public:
+      * @brief 获取tabbar显示个数
+      * @return int
+      */
+-    int visibleDepth() ;
++    int visibleDepth();
+ 
+     /**
+      * @brief 设置图标
+      * @param icon
+      */
+-    void setIcon(int index,const QIcon &icon);
++    void setIcon(int index, const QIcon &icon);
+ 
+     /**
+      * @brief 获取图标
+@@ -64,33 +64,31 @@ public:
+      */
+     QString RootPath();
+ 
+-   /**
+-    * @brief 设置按钮显示字体长度
+-    * @param int
+-    */
++    /**
++     * @brief 设置按钮显示字体长度
++     * @param int
++     */
+     void setTextLength(int length);
+ 
+-   /**
+-    * @brief 返回字体显示长度
+-    * @return int
+-    */
++    /**
++     * @brief 返回字体显示长度
++     * @return int
++     */
+     int textLength();
+ 
+     QList<QToolButton *> buttons();
+-//    QToolButton * buttonAt(int index);
+-
++    //    QToolButton * buttonAt(int index);
+ 
+ signals:
+     void tabBarClicked(const QString uri);
+ 
+ protected:
+-//    void paintEvent(QPaintEvent *event);//有图标和无图标,三态
+-//    void mousePressEvent(QMouseEvent *e) override;
++    //    void paintEvent(QPaintEvent *event);//有图标和无图标,三态
++    //    void mousePressEvent(QMouseEvent *e) override;
+ 
+ private:
+     Q_DECLARE_PRIVATE(KDirTabBar);
+-    KDirTabBarPrivate*const d_ptr;
+-
++    KDirTabBarPrivate *const d_ptr;
+ };
+ 
+ }
+diff --git a/kysdk-qtwidgets/src/kdragwidget.cpp b/kysdk-qtwidgets/src/kdragwidget.cpp
+index 62ab9dc..d750a01 100644
+--- a/kysdk-qtwidgets/src/kdragwidget.cpp
++++ b/kysdk-qtwidgets/src/kdragwidget.cpp
+@@ -1,57 +1,58 @@
+ #include "kdragwidget.h"
+-#include <QStyleOptionFrame>
+-#include <QPainterPath>
++#include "themeController.h"
+ #include <QBoxLayout>
++#include <QCoreApplication>
++#include <QDebug>
++#include <QDesktopWidget>
+ #include <QMimeData>
+ #include <QPainter>
+-#include <QDebug>
+-#include <QCoreApplication>
++#include <QPainterPath>
+ #include <QStandardPaths>
+-#include <QDesktopWidget>
+-#include "themeController.h"
++#include <QStyleOptionFrame>
+ 
+-namespace kdk {
++namespace kdk
++{
+ 
+ class FileDialog : public QFileDialog
+ {
+     Q_OBJECT
+ public:
+-    FileDialog(QWidget* parent = nullptr);
++    FileDialog(QWidget *parent = nullptr);
+     virtual ~FileDialog();
+ 
+ public slots:
+     void goAccept();
+ 
+ protected:
+-    void showEvent(QShowEvent* event) override;
++    void showEvent(QShowEvent *event) override;
+ };
+ 
+-class KDragWidgetPrivate : public QObject ,public ThemeController
++class KDragWidgetPrivate : public QObject, public ThemeController
+ {
+     Q_OBJECT
+     Q_DECLARE_PUBLIC(KDragWidget)
+ public:
+-    KDragWidgetPrivate(KDragWidget* parent);
++    KDragWidgetPrivate(KDragWidget *parent);
+     void openFile();
+ 
+ protected:
+     void changeTheme();
+ 
+ private:
+-    KDragWidget* q_ptr;
++    KDragWidget *q_ptr;
+     QColor lineColor;
+     Qt::PenStyle mainState;
+-    KPushButton* m_pIconButton;
+-    QLabel* m_pTextLabel;
++    KPushButton *m_pIconButton;
++    QLabel *m_pTextLabel;
+     FileDialog *m_FileDialog;
+     QStringList m_NameFilterList;
+     QStringList m_pStringList;
+     bool m_cursorFlag;
+ };
+ 
+-KDragWidgetPrivate::KDragWidgetPrivate(KDragWidget* parent)
+-    :q_ptr(parent)
+-    ,mainState(Qt::DashLine)
++KDragWidgetPrivate::KDragWidgetPrivate(KDragWidget *parent)
++    : q_ptr(parent)
++    , mainState(Qt::DashLine)
+ {
+     Q_Q(KDragWidget);
+     m_pIconButton = new KPushButton();
+@@ -68,33 +69,25 @@ void KDragWidgetPrivate::openFile()
+     m_FileDialog->setWindowTitle(tr("Please select file"));
+     m_pStringList.clear();
+ 
+-    if (m_FileDialog->exec() == QDialog::Accepted)
+-    {
++    if (m_FileDialog->exec() == QDialog::Accepted) {
+         QStringList selectFiles = m_FileDialog->selectedFiles();
+-        if(selectFiles.count() > 1)
+-        {
+-            for (const QString& fileName : selectFiles)
+-            {
++        if (selectFiles.count() > 1) {
++            for (const QString &fileName : selectFiles) {
+                 QFileInfo fileinfo(fileName);
+ 
+-                if(m_FileDialog->nameFilters().count() == 1 && m_FileDialog->nameFilters().first().contains("(*)"))
+-                {
++                if (m_FileDialog->nameFilters().count() == 1 && m_FileDialog->nameFilters().first().contains("(*)")) {
+                     m_pStringList.append(fileName);
+-                }
+-                else
+-                {
+-                    if(fileinfo.isFile()&&!fileName.isEmpty())
++                } else {
++                    if (fileinfo.isFile() && !fileName.isEmpty())
+                         m_pStringList.append(fileName);
+                 }
+             }
+-            if(m_pStringList.count() > 0)
++            if (m_pStringList.count() > 0)
+                 Q_EMIT q->getPathList(m_pStringList);
+-        }
+-        else
+-        {
++        } else {
+             QString fileName = selectFiles.first();
+             QFileInfo fileinfo(fileName);
+-            if(fileinfo.isFile()&&!fileName.isEmpty())
++            if (fileinfo.isFile() && !fileName.isEmpty())
+                 Q_EMIT q->getPath(fileName);
+         }
+     }
+@@ -105,35 +98,35 @@ void KDragWidgetPrivate::changeTheme()
+     Q_Q(KDragWidget);
+     initThemeStyle();
+ 
+-    if(ThemeController::themeMode() == LightTheme)
++    if (ThemeController::themeMode() == LightTheme)
+         lineColor = QColor(218, 218, 218);
+     else
+         lineColor = QColor(95, 95, 98);
+ }
+ 
+ KDragWidget::KDragWidget(QWidget *parent)
+-    :QWidget(parent),
+-      d_ptr(new KDragWidgetPrivate(this))
++    : QWidget(parent)
++    , d_ptr(new KDragWidgetPrivate(this))
+ {
+     Q_D(KDragWidget);
+-    setAcceptDrops(true);//设置接受拖拽
+-    QVBoxLayout* mainLayout= new QVBoxLayout(this);
+-    QHBoxLayout* hLayout= new QHBoxLayout();
+-    QHBoxLayout* hLayout1= new QHBoxLayout();
+-//    d->m_pIconButton = new KPushButton();
+-    d->m_pIconButton->setFixedSize(54,54);
++    setAcceptDrops(true); // 设置接受拖拽
++    QVBoxLayout *mainLayout = new QVBoxLayout(this);
++    QHBoxLayout *hLayout = new QHBoxLayout();
++    QHBoxLayout *hLayout1 = new QHBoxLayout();
++    //    d->m_pIconButton = new KPushButton();
++    d->m_pIconButton->setFixedSize(54, 54);
+     d->m_pIconButton->setTranslucent(true);
+     d->m_pIconButton->setButtonType(KPushButton::CircleType);
+     d->m_pIconButton->setIcon(QIcon::fromTheme("list-add.symbolic"));
+ 
+-//    d->m_pTextLabel = new QLabel();
++    //    d->m_pTextLabel = new QLabel();
+     d->m_pTextLabel->setText(tr("Select or drag and drop the folder identification path"));
+-    hLayout->setContentsMargins(0,0,0,0);
++    hLayout->setContentsMargins(0, 0, 0, 0);
+     hLayout->addStretch();
+     hLayout->addWidget(d->m_pIconButton);
+     hLayout->addStretch();
+ 
+-    hLayout1->setContentsMargins(0,0,0,0);
++    hLayout1->setContentsMargins(0, 0, 0, 0);
+     hLayout1->addStretch();
+     hLayout1->addWidget(d->m_pTextLabel);
+     hLayout1->addStretch();
+@@ -147,8 +140,12 @@ KDragWidget::KDragWidget(QWidget *parent)
+ 
+     d->changeTheme();
+ 
+-    connect(d->m_pIconButton,&KPushButton::clicked,this,[=](){d->openFile();});
+-    connect(d->m_gsetting,&QGSettings::changed,this,[=](){d->changeTheme();});
++    connect(d->m_pIconButton, &KPushButton::clicked, this, [=]() {
++        d->openFile();
++    });
++    connect(d->m_gsetting, &QGSettings::changed, this, [=]() {
++        d->changeTheme();
++    });
+ 
+     installEventFilter(this);
+     d->m_FileDialog->installEventFilter(this);
+@@ -169,7 +166,7 @@ QLabel *KDragWidget::textLabel()
+ QFileDialog *KDragWidget::fileDialog()
+ {
+     Q_D(KDragWidget);
+-    return dynamic_cast<QFileDialog*>(d->m_FileDialog);
++    return dynamic_cast<QFileDialog *>(d->m_FileDialog);
+ }
+ 
+ void KDragWidget::setNameFilter(const QString &filter)
+@@ -177,13 +174,11 @@ void KDragWidget::setNameFilter(const QString &filter)
+     Q_D(KDragWidget);
+     QString f(filter);
+     if (f.isEmpty())
+-        return ;
++        return;
+     QString sep(QLatin1String(";;"));
+     int i = f.indexOf(sep, 0);
+-    if (i == -1)
+-    {
+-        if (f.indexOf(QLatin1Char('\n'), 0) != -1)
+-        {
++    if (i == -1) {
++        if (f.indexOf(QLatin1Char('\n'), 0) != -1) {
+             sep = QLatin1Char('\n');
+             i = f.indexOf(sep, 0);
+         }
+@@ -196,10 +191,8 @@ void KDragWidget::setNameFilters(const QStringList &filters)
+     Q_D(KDragWidget);
+     d->m_FileDialog->setNameFilters(filters);
+ 
+-    for(int i = 0 ; i < filters.size();i++)
+-    {
+-        if(!d->m_NameFilterList.contains(filters.at(i)))
+-        {
++    for (int i = 0; i < filters.size(); i++) {
++        if (!d->m_NameFilterList.contains(filters.at(i))) {
+             d->m_NameFilterList.append(filters.at(i));
+         }
+     }
+@@ -245,20 +238,17 @@ void KDragWidget::paintEvent(QPaintEvent *event)
+     painter.setPen(pen);
+     painter.setBrush(Qt::NoBrush);
+     int radius = ThemeController::getRadiusFromDT("kradius-normal");
+-    if(radius == -1 )
++    if (radius == -1)
+         radius = 6;
+-    painter.drawRoundedRect(rect().adjusted(1,1,-1,-1),radius,radius);
++    painter.drawRoundedRect(rect().adjusted(1, 1, -1, -1), radius, radius);
+ }
+ 
+ bool KDragWidget::eventFilter(QObject *watched, QEvent *event)
+ {
+     Q_D(KDragWidget);
+-    if(watched == this)
+-    {
+-        switch (event->type())
+-        {
+-        case QEvent::MouseButtonPress:
+-        {
++    if (watched == this) {
++        switch (event->type()) {
++        case QEvent::MouseButtonPress: {
+             d->m_pIconButton->setAttribute(Qt::WA_UnderMouse, true);
+             d->lineColor = ThemeController::getPaletteColorFromDT("tooltiptext");
+             d->openFile();
+@@ -266,50 +256,43 @@ bool KDragWidget::eventFilter(QObject *watched, QEvent *event)
+             update();
+             break;
+         }
+-        case QEvent::MouseButtonRelease:
+-        {
++        case QEvent::MouseButtonRelease: {
+             d->m_pIconButton->setAttribute(Qt::WA_UnderMouse, true);
+             d->lineColor = ThemeController::getPaletteColorFromDT("tooltiptext");
+             update();
+             break;
+         }
+-        case QEvent::Leave:
+-        {
++        case QEvent::Leave: {
+             d->m_pIconButton->setAttribute(Qt::WA_UnderMouse, false);
+             d->lineColor = ThemeController::getPaletteColorFromDT("placeholdertext");
+-            if(d->m_cursorFlag)
+-            {
++            if (d->m_cursorFlag) {
+                 d->m_cursorFlag = false;
+                 setCursor(Qt::ArrowCursor);
+             }
+             update();
+             break;
+         }
+-        case QEvent::Enter:
+-        {
++        case QEvent::Enter: {
+             d->m_pIconButton->setAttribute(Qt::WA_UnderMouse, true);
+-//            d->lineColor = palette().toolTipText().color();
++            //            d->lineColor = palette().toolTipText().color();
+             d->lineColor = ThemeController::getPaletteColorFromDT("tooltiptext");
+-            if(d->m_cursorFlag)
+-            {
++            if (d->m_cursorFlag) {
+                 d->m_cursorFlag = false;
+                 setCursor(Qt::ArrowCursor);
+             }
+             update();
+             break;
+         }
+-        case QEvent::DragEnter:
+-        {
++        case QEvent::DragEnter: {
+             d->m_pIconButton->setAttribute(Qt::WA_UnderMouse, true);
+-//            d->lineColor = palette().highlight().color();
++            //            d->lineColor = palette().highlight().color();
+             d->lineColor = ThemeController::getPaletteColorFromDT("highlight");
+             update();
+             break;
+         }
+-        case QEvent::DragLeave:
+-        {
++        case QEvent::DragLeave: {
+             d->m_pIconButton->setAttribute(Qt::WA_UnderMouse, false);
+-//            d->lineColor = palette().placeholderText().color();
++            //            d->lineColor = palette().placeholderText().color();
+             d->lineColor = ThemeController::getPaletteColorFromDT("placeholdertext");
+             update();
+             break;
+@@ -319,23 +302,18 @@ bool KDragWidget::eventFilter(QObject *watched, QEvent *event)
+         }
+     }
+ 
+-    if(watched == d->m_FileDialog)
+-    {
++    if (watched == d->m_FileDialog) {
+ 
+-        if(event->type() == QEvent::Show)
+-        {
+-            QWidget *parentWindow = qobject_cast<QWidget*>(this->parent());
++        if (event->type() == QEvent::Show) {
++            QWidget *parentWindow = qobject_cast<QWidget *>(this->parent());
+ 
+-            while(parentWindow && parentWindow->parent())
+-                parentWindow = qobject_cast<QWidget*>(parentWindow->parent());
++            while (parentWindow && parentWindow->parent())
++                parentWindow = qobject_cast<QWidget *>(parentWindow->parent());
+ 
+-            if(parentWindow && parentWindow->isActiveWindow())
+-            {
++            if (parentWindow && parentWindow->isActiveWindow()) {
+                 const QPoint parentWindowCenter = parentWindow->geometry().center();
+-                d->m_FileDialog->move(parentWindowCenter.x() - d->m_FileDialog->width()/2 , parentWindowCenter.y() - d->m_FileDialog->height()/2 + 40);
+-            }
+-            else
+-            {
++                d->m_FileDialog->move(parentWindowCenter.x() - d->m_FileDialog->width() / 2, parentWindowCenter.y() - d->m_FileDialog->height() / 2 + 40);
++            } else {
+                 QDesktopWidget desktop;
+                 int screenWidth = desktop.screen()->width();
+                 int screenHeight = desktop.screen()->height();
+@@ -346,39 +324,30 @@ bool KDragWidget::eventFilter(QObject *watched, QEvent *event)
+             }
+         }
+     }
+-    return QWidget::eventFilter(watched,event);
++    return QWidget::eventFilter(watched, event);
+ }
+ 
+-void KDragWidget::dragEnterEvent(QDragEnterEvent* event)
++void KDragWidget::dragEnterEvent(QDragEnterEvent *event)
+ {
+     Q_D(KDragWidget);
+ 
+-    if(event->mimeData()->hasUrls())
+-    {
++    if (event->mimeData()->hasUrls()) {
+         QList<QUrl> urls = event->mimeData()->urls();
+-        for(int i = 0;i<urls.count() ;i++ )
+-        {
++        for (int i = 0; i < urls.count(); i++) {
+             QString filePath = urls.at(i).toLocalFile();
+-            if (!filePath.isEmpty())
+-            {
+-                QFileInfo fileInfo(filePath);//filePath 路径
+-                QString suffix = fileInfo.suffix();//suffix 后缀
++            if (!filePath.isEmpty()) {
++                QFileInfo fileInfo(filePath); // filePath 路径
++                QString suffix = fileInfo.suffix(); // suffix 后缀
+                 QStringList nameFilters = d->m_FileDialog->nameFilters();
+ 
+-                for(QString str : nameFilters)
+-                {
+-                    if(!str.contains("(*)"))
+-                    {
+-                        if(!fileInfo.isDir())
+-                        {
+-                            if((!suffix.isEmpty() && !str.contains(suffix, Qt::CaseInsensitive)) )
+-                            {
++                for (QString str : nameFilters) {
++                    if (!str.contains("(*)")) {
++                        if (!fileInfo.isDir()) {
++                            if ((!suffix.isEmpty() && !str.contains(suffix, Qt::CaseInsensitive))) {
+                                 d->m_cursorFlag = true;
+                                 break;
+                             }
+-                        }
+-                        else
+-                        {
++                        } else {
+                             d->m_cursorFlag = true;
+                             break;
+                         }
+@@ -386,19 +355,14 @@ void KDragWidget::dragEnterEvent(QDragEnterEvent* event)
+                 }
+             }
+         }
+-        if (d->m_cursorFlag)
+-        {
++        if (d->m_cursorFlag) {
+             setCursor(Qt::ForbiddenCursor);
+             event->setDropAction(Qt::IgnoreAction);
+-        }
+-        else
+-        {
++        } else {
+             setCursor(Qt::ArrowCursor);
+             event->acceptProposedAction();
+         }
+-    }
+-    else
+-    {
++    } else {
+         event->ignore();
+     }
+ }
+@@ -415,40 +379,32 @@ void KDragWidget::dragMoveEvent(QDragMoveEvent *event)
+     return QWidget::dragMoveEvent(event);
+ }
+ 
+-void KDragWidget::dropEvent(QDropEvent* event)
++void KDragWidget::dropEvent(QDropEvent *event)
+ {
+     Q_D(KDragWidget);
+ 
+-    const QMimeData* mimeData = event->mimeData();
+-    if(mimeData->hasUrls())
+-    {
+-        QList<QUrl>urlList = mimeData->urls();
+-        if(urlList.size() > 1)
+-        {
++    const QMimeData *mimeData = event->mimeData();
++    if (mimeData->hasUrls()) {
++        QList<QUrl> urlList = mimeData->urls();
++        if (urlList.size() > 1) {
+             d->m_pStringList.clear();
+-            for(int i=0; i<urlList.size(); i++) //选中的文件
++            for (int i = 0; i < urlList.size(); i++) // 选中的文件
+             {
+                 QString fileName = urlList.at(i).toLocalFile();
+ 
+                 QFileInfo fileinfo(fileName);
+-                if(d->m_FileDialog->nameFilters().count() == 1 && d->m_FileDialog->nameFilters().first().contains("(*)"))
+-                {
++                if (d->m_FileDialog->nameFilters().count() == 1 && d->m_FileDialog->nameFilters().first().contains("(*)")) {
+                     d->m_pStringList.append(fileName);
+-                }
+-                else
+-                {
+-                    if(fileinfo.isFile())
+-                    {
+-                        QString endStr = fileName.mid(fileName.lastIndexOf("."),fileName.size()-fileName.lastIndexOf("."));
+-                        if(d->m_NameFilterList.isEmpty()) //若无过滤则正常选中
++                } else {
++                    if (fileinfo.isFile()) {
++                        QString endStr = fileName.mid(fileName.lastIndexOf("."), fileName.size() - fileName.lastIndexOf("."));
++                        if (d->m_NameFilterList.isEmpty()) // 若无过滤则正常选中
+                             d->m_pStringList.append(fileName);
+-                        else
+-                        {
+-                            for(int temp = 0 ;temp <d->m_NameFilterList.size();temp++)  //遍历是否符合筛选条件
++                        else {
++                            for (int temp = 0; temp < d->m_NameFilterList.size(); temp++) // 遍历是否符合筛选条件
+                             {
+                                 QString curString = d->m_NameFilterList.at(temp);
+-                                if(curString.contains(endStr))
+-                                {
++                                if (curString.contains(endStr)) {
+                                     d->m_pStringList.append(fileName);
+                                 }
+                             }
+@@ -457,29 +413,21 @@ void KDragWidget::dropEvent(QDropEvent* event)
+                 }
+             }
+             Q_EMIT getPathList(d->m_pStringList);
+-        }
+-        else
+-        {
++        } else {
+             QString fileName = urlList.first().toLocalFile();
+             QFileInfo fileinfo(fileName);
+-            if(d->m_FileDialog->nameFilters().count() == 1 && d->m_FileDialog->nameFilters().first().contains("(*)"))
+-            {
++            if (d->m_FileDialog->nameFilters().count() == 1 && d->m_FileDialog->nameFilters().first().contains("(*)")) {
+                 Q_EMIT getPath(fileName);
+-            }
+-            else
+-            {
+-                if(fileinfo.isFile())
+-                {
+-                    QString endStr = fileName.mid(fileName.lastIndexOf("."),fileName.size()-fileName.lastIndexOf("."));
+-                    if(d->m_NameFilterList.isEmpty()) //若无过滤则正常选中
++            } else {
++                if (fileinfo.isFile()) {
++                    QString endStr = fileName.mid(fileName.lastIndexOf("."), fileName.size() - fileName.lastIndexOf("."));
++                    if (d->m_NameFilterList.isEmpty()) // 若无过滤则正常选中
+                         Q_EMIT getPath(fileName);
+-                    else
+-                    {
+-                        for(int temp = 0 ;temp <d->m_NameFilterList.size();temp++)  //遍历是否符合筛选条件
++                    else {
++                        for (int temp = 0; temp < d->m_NameFilterList.size(); temp++) // 遍历是否符合筛选条件
+                         {
+                             QString curString = d->m_NameFilterList.at(temp);
+-                            if(curString.contains(endStr))
+-                            {
++                            if (curString.contains(endStr)) {
+                                 Q_EMIT getPath(fileName);
+                             }
+                         }
+@@ -488,23 +436,21 @@ void KDragWidget::dropEvent(QDropEvent* event)
+             }
+         }
+     }
+-    if(d->m_cursorFlag)
+-    {
++    if (d->m_cursorFlag) {
+         d->m_cursorFlag = false;
+         setCursor(Qt::ArrowCursor);
+         event->ignore();
+     }
+ }
+ 
+-FileDialog::FileDialog(QWidget *parent) :
+-    QFileDialog(parent)
++FileDialog::FileDialog(QWidget *parent)
++    : QFileDialog(parent)
+ {
+     this->setFileMode(QFileDialog::ExistingFiles);
+ }
+ 
+ FileDialog::~FileDialog()
+ {
+-
+ }
+ 
+ void FileDialog::goAccept()
+@@ -517,11 +463,11 @@ void FileDialog::showEvent(QShowEvent *event)
+     Q_UNUSED(event)
+ 
+     if (this->isVisible()) {
+-        for (QWidget* widget : this->findChildren<QWidget*>()) {
++        for (QWidget *widget : this->findChildren<QWidget *>()) {
+             if (widget->objectName() == "acceptButton") {
+-                QPushButton * btn = qobject_cast<QPushButton*>(widget);
++                QPushButton *btn = qobject_cast<QPushButton *>(widget);
+                 disconnect(btn, &QPushButton::clicked, 0, 0);
+-                connect(btn, &QPushButton::clicked, [=](bool checked){
++                connect(btn, &QPushButton::clicked, [=](bool checked) {
+                     Q_UNUSED(checked)
+                     this->goAccept();
+                 });
+diff --git a/kysdk-qtwidgets/src/kdragwidget.h b/kysdk-qtwidgets/src/kdragwidget.h
+index c2f0d7f..9aee8a7 100644
+--- a/kysdk-qtwidgets/src/kdragwidget.h
++++ b/kysdk-qtwidgets/src/kdragwidget.h
+@@ -3,12 +3,13 @@
+ 
+ #include "gui_g.h"
+ #include "kpushbutton.h"
+-#include <QLabel>
+ #include <QDragEnterEvent>
+ #include <QDropEvent>
+ #include <QFileDialog>
++#include <QLabel>
+ 
+-namespace kdk {
++namespace kdk
++{
+ 
+ /**
+  * @defgroup DragModule
+@@ -19,12 +20,12 @@ class KDragWidgetPrivate;
+  * @brief 拖动文件或文件夹,可识别并获取文件或文件夹路径
+  * @since 2.3
+  */
+-class GUI_EXPORT KDragWidget :public QWidget
++class GUI_EXPORT KDragWidget : public QWidget
+ {
+     Q_OBJECT
+ 
+ public:
+-    KDragWidget(QWidget*parent=nullptr);
++    KDragWidget(QWidget *parent = nullptr);
+ 
+     /**
+      * @brief iconButton
+@@ -64,10 +65,10 @@ protected:
+     void keyReleaseEvent(QKeyEvent *event);
+     void paintEvent(QPaintEvent *event);
+     bool eventFilter(QObject *watched, QEvent *event);
+-    void dragEnterEvent(QDragEnterEvent* event);
++    void dragEnterEvent(QDragEnterEvent *event);
+     void dragLeaveEvent(QDragLeaveEvent *event);
+     void dragMoveEvent(QDragMoveEvent *event);
+-    void dropEvent(QDropEvent* event);
++    void dropEvent(QDropEvent *event);
+ 
+ Q_SIGNALS:
+     void getPath(QString);
+@@ -80,7 +81,7 @@ Q_SIGNALS:
+ 
+ private:
+     Q_DECLARE_PRIVATE(KDragWidget)
+-    KDragWidgetPrivate* const d_ptr;
++    KDragWidgetPrivate *const d_ptr;
+ };
+ 
+ }
+diff --git a/kysdk-qtwidgets/src/kfilewidget.cpp b/kysdk-qtwidgets/src/kfilewidget.cpp
+index b2d2ce8..747e31d 100644
+--- a/kysdk-qtwidgets/src/kfilewidget.cpp
++++ b/kysdk-qtwidgets/src/kfilewidget.cpp
+@@ -22,30 +22,31 @@
+ 
+ #include "kfilewidget.h"
+ #include "themeController.h"
+-#include <QEvent>
+-#include <QPainter>
+ #include <QDebug>
+-#include <QIcon>
+-#include <QPaintEvent>
++#include <QEvent>
+ #include <QFontMetrics>
+ #include <QHBoxLayout>
+-#include <QVBoxLayout>
++#include <QIcon>
+ #include <QLabel>
++#include <QPaintEvent>
++#include <QPainter>
+ #include <QPainterPath>
++#include <QVBoxLayout>
+ 
+-namespace kdk {
++namespace kdk
++{
+ 
+-class KFileWidgetPrivate:public QObject,public ThemeController
++class KFileWidgetPrivate : public QObject, public ThemeController
+ {
+     Q_OBJECT
+     Q_DECLARE_PUBLIC(KFileWidget)
+ public:
+-    KFileWidgetPrivate(KFileWidget*parent);
++    KFileWidgetPrivate(KFileWidget *parent);
+ 
+ protected:
+     void changeTheme();
+-private:
+ 
++private:
+     KFileWidget *q_ptr;
+     QHBoxLayout *m_pHLayout;
+     QVBoxLayout *m_pVLayout;
+@@ -61,10 +62,9 @@ private:
+     int m_topRightRadius;
+ };
+ 
+-
+-KFileWidget::KFileWidget(QWidget *parent):
+-    QWidget(parent),
+-    d_ptr(new KFileWidgetPrivate(this))
++KFileWidget::KFileWidget(QWidget *parent)
++    : QWidget(parent)
++    , d_ptr(new KFileWidgetPrivate(this))
+ {
+     Q_D(KFileWidget);
+     installEventFilter(this);
+@@ -88,8 +88,8 @@ void KFileWidget::setSubText(QString str)
+ void KFileWidget::setIcon(QIcon icon)
+ {
+     Q_D(KFileWidget);
+-    d->m_pIconLabel->setFixedSize(32,32);
+-    d->m_pIconLabel->setPixmap(icon.pixmap(32,32));
++    d->m_pIconLabel->setFixedSize(32, 32);
++    d->m_pIconLabel->setPixmap(icon.pixmap(32, 32));
+ }
+ 
+ void KFileWidget::setBorderRadius(int radius)
+@@ -113,108 +113,89 @@ void KFileWidget::setBorderRadius(int bottomLeft, int topLeft, int topRight, int
+ void KFileWidget::paintEvent(QPaintEvent *event)
+ {
+     Q_D(KFileWidget);
+-    if(d->m_pSubLabel->text().isNull())
++    if (d->m_pSubLabel->text().isNull())
+         d->m_pSubLabel->setVisible(false);
+-    d->m_buttonRect = QRect(rect().width()-17,0,16,16);
++    d->m_buttonRect = QRect(rect().width() - 17, 0, 16, 16);
+     QPainter painter(this);
+     painter.setRenderHint(QPainter::Antialiasing);
+     painter.setRenderHint(QPainter::SmoothPixmapTransform);
+     painter.setRenderHint(QPainter::HighQualityAntialiasing);
+-//    painter.setBrush(palette().window().color());
++    //    painter.setBrush(palette().window().color());
+     painter.setBrush(ThemeController::getPaletteColorFromDT("window"));
+-    if(ThemeController::themeMode() == LightTheme)
+-    {
+-        QColor color(38,38,38);
++    if (ThemeController::themeMode() == LightTheme) {
++        QColor color(38, 38, 38);
+         color.setAlphaF(0.15);
+         painter.setPen(color);
+-    }
+-    else
+-    {
++    } else {
+         QColor color(255, 255, 255);
+         color.setAlphaF(0.15);
+         painter.setPen(color);
+     }
+ 
+     QPainterPath path;
+-    QRect rectPath = rect().adjusted(0,2,-2,0);
++    QRect rectPath = rect().adjusted(0, 2, -2, 0);
+ 
+-    path.moveTo(rectPath.topRight() - QPoint(d->m_topRightRadius , 0) ); //右上
+-    path.lineTo(rectPath.topLeft() + QPointF(d->m_topLeftRadius , 0)); //上方线
+-    path.quadTo(rectPath.topLeft(), rectPath.topLeft() + QPointF(0 , d->m_topLeftRadius)); //圆角
+-    path.lineTo(rectPath.bottomLeft() +  QPointF(0,- d->m_bottomLeftRadius)); //左方线
+-    path.quadTo(rectPath.bottomLeft(), rectPath.bottomLeft() + QPointF(d->m_bottomLeftRadius , 0));//圆角
+-    path.lineTo(rectPath.bottomRight() - QPointF(d->m_bottomRightRadius , 0));//下方线
+-    path.quadTo(rectPath.bottomRight(), rectPath.bottomRight() + QPointF(0, - d->m_bottomRightRadius));//圆角
+-    path.lineTo(rectPath.topRight() + QPointF(0, d->m_topRightRadius));//右方线
+-    path.quadTo(rectPath.topRight() , rectPath.topRight() - QPointF(d->m_topRightRadius, 0)); // 圆角
++    path.moveTo(rectPath.topRight() - QPoint(d->m_topRightRadius, 0)); // 右上
++    path.lineTo(rectPath.topLeft() + QPointF(d->m_topLeftRadius, 0)); // 上方线
++    path.quadTo(rectPath.topLeft(), rectPath.topLeft() + QPointF(0, d->m_topLeftRadius)); // 圆角
++    path.lineTo(rectPath.bottomLeft() + QPointF(0, -d->m_bottomLeftRadius)); // 左方线
++    path.quadTo(rectPath.bottomLeft(), rectPath.bottomLeft() + QPointF(d->m_bottomLeftRadius, 0)); // 圆角
++    path.lineTo(rectPath.bottomRight() - QPointF(d->m_bottomRightRadius, 0)); // 下方线
++    path.quadTo(rectPath.bottomRight(), rectPath.bottomRight() + QPointF(0, -d->m_bottomRightRadius)); // 圆角
++    path.lineTo(rectPath.topRight() + QPointF(0, d->m_topRightRadius)); // 右方线
++    path.quadTo(rectPath.topRight(), rectPath.topRight() - QPointF(d->m_topRightRadius, 0)); // 圆角
+ 
+-    if(!isEnabled())
+-    {
+-//        d->m_buttonBkgColor = palette().color(QPalette::Disabled,QPalette::Button);
+-        d->m_buttonBkgColor = ThemeController::getPaletteColorFromDT("button",QPalette::Disabled);
+-//        d->m_iconColor = palette().color(QPalette::Disabled,QPalette::HighlightedText);
++    if (!isEnabled()) {
++        //        d->m_buttonBkgColor = palette().color(QPalette::Disabled,QPalette::Button);
++        d->m_buttonBkgColor = ThemeController::getPaletteColorFromDT("button", QPalette::Disabled);
++        //        d->m_iconColor = palette().color(QPalette::Disabled,QPalette::HighlightedText);
+         d->m_iconColor = ThemeController::getPaletteColorFromDT("highlightedtext");
+     }
+     painter.drawPath(path);
+     painter.setBrush(d->m_buttonBkgColor);
+     painter.drawEllipse(d->m_buttonRect);
+ 
+-    d->m_pHLayout->setContentsMargins(8,8,d->m_buttonRect.width(),8);
++    d->m_pHLayout->setContentsMargins(8, 8, d->m_buttonRect.width(), 8);
+     QIcon icon(QIcon::fromTheme("application-exit-symbolic"));
+-    QPixmap pixmap =icon.pixmap(d->m_buttonRect.size());
+-    painter.drawPixmap(d->m_buttonRect,ThemeController::drawColoredPixmap(pixmap,d->m_iconColor));
++    QPixmap pixmap = icon.pixmap(d->m_buttonRect.size());
++    painter.drawPixmap(d->m_buttonRect, ThemeController::drawColoredPixmap(pixmap, d->m_iconColor));
+ }
+ 
+ bool KFileWidget::eventFilter(QObject *watched, QEvent *event)
+ {
+     Q_D(KFileWidget);
+ 
+-    QMouseEvent* mouseEvent = static_cast<QMouseEvent*>(event);
+-    switch (event->type())
+-    {
++    QMouseEvent *mouseEvent = static_cast<QMouseEvent *>(event);
++    switch (event->type()) {
+     case QEvent::Enter:
+-    case QEvent::MouseMove:
+-    {
+-        if(d->m_buttonRect.contains(mouseEvent->pos()))
+-        {
+-            d->m_iconColor = QColor(255,255,255);
++    case QEvent::MouseMove: {
++        if (d->m_buttonRect.contains(mouseEvent->pos())) {
++            d->m_iconColor = QColor(255, 255, 255);
+             d->m_buttonBkgColor = QColor(243, 34, 45);
+-        }
+-        else
+-        {
+-            if(ThemeController::themeMode() == LightTheme)
+-            {
+-                d->m_iconColor = QColor(38,38,38);
+-                d->m_buttonBkgColor = QColor(255,255,255);
+-            }
+-            else
+-            {
+-                d->m_iconColor = QColor(255,255,255);
+-//                d->m_buttonBkgColor = palette().window().color();
++        } else {
++            if (ThemeController::themeMode() == LightTheme) {
++                d->m_iconColor = QColor(38, 38, 38);
++                d->m_buttonBkgColor = QColor(255, 255, 255);
++            } else {
++                d->m_iconColor = QColor(255, 255, 255);
++                //                d->m_buttonBkgColor = palette().window().color();
+                 d->m_buttonBkgColor = ThemeController::getPaletteColorFromDT("window");
+             }
+         }
+         update();
+         break;
+     }
+-    case QEvent::MouseButtonPress:
+-    {
+-        if(d->m_buttonRect.contains(mouseEvent->pos()))
+-        {
+-            d->m_iconColor = QColor(255,255,255);
++    case QEvent::MouseButtonPress: {
++        if (d->m_buttonRect.contains(mouseEvent->pos())) {
++            d->m_iconColor = QColor(255, 255, 255);
+             d->m_buttonBkgColor = QColor(204, 18, 34);
+-        }
+-        else
+-        {
+-            if(ThemeController::themeMode() == LightTheme)
+-            {
+-                d->m_iconColor = QColor(38,38,38);
+-                d->m_buttonBkgColor = QColor(255,255,255);
+-            }
+-            else
+-            {
+-                d->m_iconColor = QColor(255,255,255);
+-//                d->m_buttonBkgColor = palette().window().color();
++        } else {
++            if (ThemeController::themeMode() == LightTheme) {
++                d->m_iconColor = QColor(38, 38, 38);
++                d->m_buttonBkgColor = QColor(255, 255, 255);
++            } else {
++                d->m_iconColor = QColor(255, 255, 255);
++                //                d->m_buttonBkgColor = palette().window().color();
+                 d->m_buttonBkgColor = ThemeController::getPaletteColorFromDT("window");
+             }
+         }
+@@ -222,43 +203,32 @@ bool KFileWidget::eventFilter(QObject *watched, QEvent *event)
+         update();
+         break;
+     }
+-    case QEvent::MouseButtonRelease:
+-    {
+-        if(d->m_buttonRect.contains(mouseEvent->pos()))
+-        {
+-            d->m_iconColor = QColor(255,255,255);
++    case QEvent::MouseButtonRelease: {
++        if (d->m_buttonRect.contains(mouseEvent->pos())) {
++            d->m_iconColor = QColor(255, 255, 255);
+             d->m_buttonBkgColor = QColor(243, 34, 45);
+-            if(isEnabled())
++            if (isEnabled())
+                 emit clicked();
+-        }
+-        else
+-        {
+-            if(ThemeController::themeMode() == LightTheme)
+-            {
+-                d->m_iconColor = QColor(38,38,38);
+-                d->m_buttonBkgColor = QColor(255,255,255);
+-            }
+-            else
+-            {
+-                d->m_iconColor = QColor(255,255,255);
+-//                d->m_buttonBkgColor = palette().window().color();
++        } else {
++            if (ThemeController::themeMode() == LightTheme) {
++                d->m_iconColor = QColor(38, 38, 38);
++                d->m_buttonBkgColor = QColor(255, 255, 255);
++            } else {
++                d->m_iconColor = QColor(255, 255, 255);
++                //                d->m_buttonBkgColor = palette().window().color();
+                 d->m_buttonBkgColor = ThemeController::getPaletteColorFromDT("window");
+             }
+         }
+         update();
+         break;
+     }
+-    case QEvent::Leave:
+-    {
+-        if(ThemeController::themeMode() == LightTheme)
+-        {
+-            d->m_iconColor = QColor(38,38,38);
+-            d->m_buttonBkgColor = QColor(255,255,255);
+-        }
+-        else
+-        {
+-            d->m_iconColor = QColor(255,255,255);
+-//            d->m_buttonBkgColor = palette().window().color();
++    case QEvent::Leave: {
++        if (ThemeController::themeMode() == LightTheme) {
++            d->m_iconColor = QColor(38, 38, 38);
++            d->m_buttonBkgColor = QColor(255, 255, 255);
++        } else {
++            d->m_iconColor = QColor(255, 255, 255);
++            //            d->m_buttonBkgColor = palette().window().color();
+             d->m_buttonBkgColor = ThemeController::getPaletteColorFromDT("window");
+         }
+         update();
+@@ -267,23 +237,20 @@ bool KFileWidget::eventFilter(QObject *watched, QEvent *event)
+     default:
+         break;
+     }
+-    return QWidget::eventFilter(watched,event);
++    return QWidget::eventFilter(watched, event);
+ }
+ 
+ KFileWidgetPrivate::KFileWidgetPrivate(KFileWidget *parent)
+-    :q_ptr(parent)
++    : q_ptr(parent)
+ {
+     Q_Q(KFileWidget);
+     int radius = ThemeController::getRadiusFromDT("kradius-normal");
+-    if(radius == -1 )
+-    {
++    if (radius == -1) {
+         m_bottomRightRadius = 6;
+         m_topLeftRadius = 6;
+         m_bottomLeftRadius = 6;
+         m_topRightRadius = 6;
+-    }
+-    else
+-    {
++    } else {
+         m_bottomRightRadius = radius;
+         m_topLeftRadius = radius;
+         m_bottomLeftRadius = radius;
+@@ -298,20 +265,22 @@ KFileWidgetPrivate::KFileWidgetPrivate(KFileWidget *parent)
+     m_pVLayout->addWidget(m_pMainLabel);
+     m_pVLayout->addWidget(m_pSubLabel);
+     m_pVLayout->addStretch();
+-    m_pVLayout->setContentsMargins(0,0,0,0);
++    m_pVLayout->setContentsMargins(0, 0, 0, 0);
+ 
+     m_pIconLabel = new QLabel();
+     m_pHLayout = new QHBoxLayout(q);
+ 
+-    m_pHLayout->setContentsMargins(0,0,0,0);
++    m_pHLayout->setContentsMargins(0, 0, 0, 0);
+     m_pHLayout->setSpacing(0);
+     m_pHLayout->addWidget(m_pIconLabel);
+     m_pHLayout->addSpacing(8);
+     m_pHLayout->addLayout(m_pVLayout);
+-    q->setContentsMargins(0,0,0,0);
++    q->setContentsMargins(0, 0, 0, 0);
+ 
+     changeTheme();
+-    connect(m_gsetting,&QGSettings::changed,this,[=](){changeTheme();});
++    connect(m_gsetting, &QGSettings::changed, this, [=]() {
++        changeTheme();
++    });
+     setParent(parent);
+ }
+ 
+@@ -321,25 +290,21 @@ void KFileWidgetPrivate::changeTheme()
+     initThemeStyle();
+ 
+     QPalette subPalette = q->palette();
+-//    QColor color = subPalette.color(QPalette::Disabled,QPalette::WindowText);
+-    QColor color = ThemeController::getPaletteColorFromDT("windowtext",QPalette::Disabled);
+-    subPalette.setColor(QPalette::Text,color);
++    //    QColor color = subPalette.color(QPalette::Disabled,QPalette::WindowText);
++    QColor color = ThemeController::getPaletteColorFromDT("windowtext", QPalette::Disabled);
++    subPalette.setColor(QPalette::Text, color);
+     m_pSubLabel->setPalette(subPalette);
+ 
+-    if(ThemeController::themeMode() == LightTheme)
+-    {
+-        m_iconColor = QColor(38,38,38);
+-        m_buttonBkgColor = QColor(255,255,255);
+-    }
+-    else
+-    {
+-        m_iconColor = QColor(255,255,255);
+-//        m_buttonBkgColor = q->palette().window().color();
++    if (ThemeController::themeMode() == LightTheme) {
++        m_iconColor = QColor(38, 38, 38);
++        m_buttonBkgColor = QColor(255, 255, 255);
++    } else {
++        m_iconColor = QColor(255, 255, 255);
++        //        m_buttonBkgColor = q->palette().window().color();
+         m_buttonBkgColor = ThemeController::getPaletteColorFromDT("window");
+     }
+ }
+ 
+-
+ }
+ 
+ #include "kfilewidget.moc"
+diff --git a/kysdk-qtwidgets/src/kfilewidget.h b/kysdk-qtwidgets/src/kfilewidget.h
+index e2ffda2..ad916f0 100644
+--- a/kysdk-qtwidgets/src/kfilewidget.h
++++ b/kysdk-qtwidgets/src/kfilewidget.h
+@@ -23,13 +23,14 @@
+ #ifndef KFILEWIDGET_H
+ #define KFILEWIDGET_H
+ 
+-#include <QWidget>
+ #include "gui_g.h"
++#include <QWidget>
+ 
+-namespace kdk {
++namespace kdk
++{
+ 
+ /** @defgroup
+-  */
++ */
+ 
+ class KFileWidgetPrivate;
+ 
+@@ -74,18 +75,18 @@ public:
+      * @param topRight
+      * @param bottomRight
+      */
+-    void setBorderRadius(int bottomLeft,int topLeft,int topRight,int bottomRight);
++    void setBorderRadius(int bottomLeft, int topLeft, int topRight, int bottomRight);
+ 
+ Q_SIGNALS:
+     void clicked();
+ 
+ protected:
+-    void paintEvent(QPaintEvent* event);
++    void paintEvent(QPaintEvent *event);
+     bool eventFilter(QObject *watched, QEvent *event);
+ 
+ private:
+     Q_DECLARE_PRIVATE(KFileWidget)
+-    KFileWidgetPrivate* const d_ptr;
++    KFileWidgetPrivate *const d_ptr;
+ };
+ 
+ }
+diff --git a/kysdk-qtwidgets/src/kiconbar.cpp b/kysdk-qtwidgets/src/kiconbar.cpp
+index 5e21362..718415b 100644
+--- a/kysdk-qtwidgets/src/kiconbar.cpp
++++ b/kysdk-qtwidgets/src/kiconbar.cpp
+@@ -20,23 +20,23 @@
+  *
+  */
+ 
+-#include <QHBoxLayout>
+-#include <QMouseEvent>
+-#include <QApplication>
+ #include "kiconbar.h"
+-#include "themeController.h"
+ #include "parmscontroller.h"
++#include "themeController.h"
++#include <QApplication>
+ #include <QDebug>
++#include <QHBoxLayout>
++#include <QMouseEvent>
+ 
+ namespace kdk
+ {
+-class KIconBarPrivate:public QObject,public ThemeController
++class KIconBarPrivate : public QObject, public ThemeController
+ {
+     Q_OBJECT
+     Q_DECLARE_PUBLIC(KIconBar)
+ 
+ public:
+-    KIconBarPrivate(KIconBar*parent);
++    KIconBarPrivate(KIconBar *parent);
+     void elideWidgetName();
+ 
+ protected:
+@@ -45,7 +45,7 @@ protected:
+     bool eventFilter(QObject *watched, QEvent *event);
+ 
+ private:
+-    KIconBar* q_ptr;
++    KIconBar *q_ptr;
+     QLabel *m_pIconLabel;
+     QLabel *m_pNameLabel;
+     QHBoxLayout *m_pMainLayout;
+@@ -54,24 +54,22 @@ private:
+     QColor inactiveColor;
+ };
+ 
+-KIconBar::KIconBar(QWidget*parent)
+-    :QFrame(parent),
+-      d_ptr(new KIconBarPrivate(this))
++KIconBar::KIconBar(QWidget *parent)
++    : QFrame(parent)
++    , d_ptr(new KIconBarPrivate(this))
+ {
+     Q_D(KIconBar);
+     setObjectName("IconBar");
+     setFixedHeight(Parmscontroller::parm(Parmscontroller::Parm::PM_IconbarHeight));
+-    connect(Parmscontroller::self(),&Parmscontroller::modeChanged,this,[=](){
++    connect(Parmscontroller::self(), &Parmscontroller::modeChanged, this, [=]() {
+         setFixedHeight(Parmscontroller::parm(Parmscontroller::Parm::PM_IconbarHeight));
+-        d->m_pIconLabel->setPixmap(QIcon::fromTheme(d->m_IconName).pixmap(
+-                            QSize(Parmscontroller::parm(Parmscontroller::Parm::PM_IconBarIconSize),
+-                                  Parmscontroller::parm(Parmscontroller::Parm::PM_IconBarIconSize))));
++        d->m_pIconLabel->setPixmap(QIcon::fromTheme(d->m_IconName).pixmap(QSize(Parmscontroller::parm(Parmscontroller::Parm::PM_IconBarIconSize), Parmscontroller::parm(Parmscontroller::Parm::PM_IconBarIconSize))));
+         updateGeometry();
+     });
+ }
+ 
+ KIconBar::KIconBar(const QString &iconName, const QString &text, QWidget *parent)
+-    :KIconBar(parent)
++    : KIconBar(parent)
+ {
+     setIcon(iconName);
+     setWidgetName(text);
+@@ -79,40 +77,39 @@ KIconBar::KIconBar(const QString &iconName, const QString &text, QWidget *parent
+ 
+ KIconBar::~KIconBar()
+ {
+-
+ }
+ 
+ void KIconBar::setIcon(const QString &iconName)
+ {
+     Q_D(KIconBar);
+ 
+-    if(iconName.isEmpty())
++    if (iconName.isEmpty())
+         return;
+-    if(!d->m_pIconLabel)
++    if (!d->m_pIconLabel)
+         return;
+     d->m_IconName = iconName;
+-    d->m_pIconLabel->setPixmap(QIcon::fromTheme(iconName).pixmap(QSize(Parmscontroller::parm(Parmscontroller::Parm::PM_IconBarIconSize),Parmscontroller::parm(Parmscontroller::Parm::PM_IconBarIconSize))));
+-    setWindowIcon(QIcon::fromTheme(iconName).pixmap(QSize(Parmscontroller::parm(Parmscontroller::Parm::PM_IconBarIconSize),Parmscontroller::parm(Parmscontroller::Parm::PM_IconBarIconSize))));
++    d->m_pIconLabel->setPixmap(QIcon::fromTheme(iconName).pixmap(QSize(Parmscontroller::parm(Parmscontroller::Parm::PM_IconBarIconSize), Parmscontroller::parm(Parmscontroller::Parm::PM_IconBarIconSize))));
++    setWindowIcon(QIcon::fromTheme(iconName).pixmap(QSize(Parmscontroller::parm(Parmscontroller::Parm::PM_IconBarIconSize), Parmscontroller::parm(Parmscontroller::Parm::PM_IconBarIconSize))));
+ }
+ 
+ void KIconBar::setIcon(const QIcon &icon)
+ {
+     Q_D(KIconBar);
+ 
+-    if(!d->m_pIconLabel)
++    if (!d->m_pIconLabel)
+         return;
+-    d->m_pIconLabel->setPixmap(icon.pixmap(QSize(Parmscontroller::parm(Parmscontroller::Parm::PM_IconBarIconSize),Parmscontroller::parm(Parmscontroller::Parm::PM_IconBarIconSize))));
++    d->m_pIconLabel->setPixmap(icon.pixmap(QSize(Parmscontroller::parm(Parmscontroller::Parm::PM_IconBarIconSize), Parmscontroller::parm(Parmscontroller::Parm::PM_IconBarIconSize))));
+     d->m_IconName = icon.name();
+-    setWindowIcon(icon.pixmap(QSize(Parmscontroller::parm(Parmscontroller::Parm::PM_IconBarIconSize),Parmscontroller::parm(Parmscontroller::Parm::PM_IconBarIconSize))));
++    setWindowIcon(icon.pixmap(QSize(Parmscontroller::parm(Parmscontroller::Parm::PM_IconBarIconSize), Parmscontroller::parm(Parmscontroller::Parm::PM_IconBarIconSize))));
+ }
+ 
+ void KIconBar::setWidgetName(const QString &widgetName)
+ {
+     Q_D(KIconBar);
+ 
+-    if(widgetName.isEmpty())
++    if (widgetName.isEmpty())
+         return;
+-    if(!d->m_pNameLabel)
++    if (!d->m_pNameLabel)
+         return;
+     d->m_widgetName = widgetName;
+     d->elideWidgetName();
+@@ -139,7 +136,7 @@ QLabel *KIconBar::iconLabel()
+ void KIconBar::mouseDoubleClickEvent(QMouseEvent *event)
+ {
+     Q_D(KIconBar);
+-    if(event->button() == Qt::LeftButton)
++    if (event->button() == Qt::LeftButton)
+         Q_EMIT doubleClick();
+ }
+ 
+@@ -151,20 +148,20 @@ void KIconBar::resizeEvent(QResizeEvent *event)
+ }
+ 
+ KIconBarPrivate::KIconBarPrivate(KIconBar *parent)
+-    :q_ptr(parent)
++    : q_ptr(parent)
+ {
+     Q_Q(KIconBar);
+     setParent(parent);
+     parent->installEventFilter(this);
+-    q->setContentsMargins(0,0,0,0);
++    q->setContentsMargins(0, 0, 0, 0);
+     m_pMainLayout = new QHBoxLayout(q);
+     m_pIconLabel = new QLabel(q);
+     m_pIconLabel->setScaledContents(true);
+-    m_pIconLabel->setFixedSize(24,24);
++    m_pIconLabel->setFixedSize(24, 24);
+     m_pNameLabel = new QLabel(q);
+ 
+-    QHBoxLayout* iconLayout=new QHBoxLayout();
+-    iconLayout->setContentsMargins(0,8,0,8);
++    QHBoxLayout *iconLayout = new QHBoxLayout();
++    iconLayout->setContentsMargins(0, 8, 0, 8);
+     iconLayout->addWidget(m_pIconLabel);
+ 
+     m_pMainLayout->setSpacing(0);
+@@ -172,17 +169,17 @@ KIconBarPrivate::KIconBarPrivate(KIconBar *parent)
+     m_pMainLayout->addLayout(iconLayout);
+     m_pMainLayout->addSpacing(4);
+     m_pMainLayout->addWidget(m_pNameLabel);
+-    m_pMainLayout->setContentsMargins(0,0,0,0);
++    m_pMainLayout->setContentsMargins(0, 0, 0, 0);
+     m_pMainLayout->addStretch();
+ 
+     changeIconStyle();
+-    connect(m_gsetting,&QGSettings::changed,this,&KIconBarPrivate::changeIconStyle);
++    connect(m_gsetting, &QGSettings::changed, this, &KIconBarPrivate::changeIconStyle);
+ 
+     changeTheme();
+-    connect(m_gsetting,&QGSettings::changed,this,&KIconBarPrivate::changeTheme);
++    connect(m_gsetting, &QGSettings::changed, this, &KIconBarPrivate::changeTheme);
+ 
+-    connect(m_gsetting,&QGSettings::changed,this,[=](const QString &key){
+-        if(key.contains("systemFontSize"))
++    connect(m_gsetting, &QGSettings::changed, this, [=](const QString &key) {
++        if (key.contains("systemFontSize"))
+             elideWidgetName();
+     });
+ }
+@@ -193,10 +190,10 @@ void KIconBarPrivate::elideWidgetName()
+ 
+     QFontMetrics fm = QApplication::fontMetrics();
+     // bug 175664 修正1px
+-    auto visualWidth = q->width()-m_pNameLabel->geometry().left()-1;
+-    QString elidedText = fm.elidedText(m_widgetName,Qt::TextElideMode::ElideRight, visualWidth);
++    auto visualWidth = q->width() - m_pNameLabel->geometry().left() - 1;
++    QString elidedText = fm.elidedText(m_widgetName, Qt::TextElideMode::ElideRight, visualWidth);
+     m_pNameLabel->setText(elidedText);
+-    if(fm.width(m_widgetName) >= visualWidth)
++    if (fm.width(m_widgetName) >= visualWidth)
+         m_pNameLabel->setToolTip(m_widgetName);
+     else
+         m_pNameLabel->setToolTip("");
+@@ -206,10 +203,10 @@ void KIconBarPrivate::changeTheme()
+ {
+     Q_Q(KIconBar);
+     initThemeStyle();
+-    if(ThemeController::themeMode() == DarkTheme)
+-        inactiveColor = QColor(255,255,255);
++    if (ThemeController::themeMode() == DarkTheme)
++        inactiveColor = QColor(255, 255, 255);
+     else
+-        inactiveColor = QColor(0,0,0);
++        inactiveColor = QColor(0, 0, 0);
+     inactiveColor.setAlphaF(0.3);
+     QPalette palette = q->palette();
+     palette.setBrush(QPalette::Inactive, QPalette::WindowText, inactiveColor);
+@@ -226,18 +223,16 @@ void KIconBarPrivate::changeIconStyle()
+ bool KIconBarPrivate::eventFilter(QObject *watched, QEvent *event)
+ {
+     Q_Q(KIconBar);
+-    //窗口停用,变为不活动的窗口
+-    if(QEvent::WindowDeactivate == event->type())
+-    {
++    // 窗口停用,变为不活动的窗口
++    if (QEvent::WindowDeactivate == event->type()) {
+         inactiveColor.setAlphaF(0.3);
+         QPalette palette = q->palette();
+         palette.setBrush(QPalette::Inactive, QPalette::WindowText, inactiveColor);
+         m_pNameLabel->setPalette(palette);
+     }
+-    return QObject::eventFilter(watched,event);
++    return QObject::eventFilter(watched, event);
+ }
+ 
+ }
+ #include "kiconbar.moc"
+ #include "moc_kiconbar.cpp"
+-
+diff --git a/kysdk-qtwidgets/src/kiconbar.h b/kysdk-qtwidgets/src/kiconbar.h
+index eb34ffa..5faadb0 100644
+--- a/kysdk-qtwidgets/src/kiconbar.h
++++ b/kysdk-qtwidgets/src/kiconbar.h
+@@ -33,51 +33,51 @@ namespace kdk
+ {
+ 
+ /** @defgroup BarModule
+-  * @{
+-  */
++ * @{
++ */
+ 
+ class KIconBarPrivate;
+ 
+ /**
+  * @brief 图标和标题组合控件
+  */
+-class GUI_EXPORT KIconBar:public QFrame
++class GUI_EXPORT KIconBar : public QFrame
+ {
+     Q_OBJECT
+ public:
+-    KIconBar(QWidget* parent = nullptr);
+-    KIconBar(const QString& iconName,const QString& text,QWidget* parent = nullptr);
++    KIconBar(QWidget *parent = nullptr);
++    KIconBar(const QString &iconName, const QString &text, QWidget *parent = nullptr);
+     ~KIconBar();
+ 
+     /**
+      * @brief 设置图标
+      * @param iconName
+      */
+-    void setIcon(const QString& iconName);
++    void setIcon(const QString &iconName);
+ 
+     /**
+      * @brief 设置图标
+      * @param icon
+      */
+-    void setIcon(const QIcon& icon);
++    void setIcon(const QIcon &icon);
+ 
+     /**
+      * @brief 设置标题
+      * @param widgetName
+      */
+-    void setWidgetName(const QString& widgetName);
++    void setWidgetName(const QString &widgetName);
+ 
+     /**
+      * @brief 获取标题label
+      * @return
+      */
+-    QLabel* nameLabel();
++    QLabel *nameLabel();
+ 
+     /**
+      * @brief 获取图标label
+      * @return
+      */
+-    QLabel* iconLabel();
++    QLabel *iconLabel();
+ 
+ Q_SIGNALS:
+     /**
+@@ -92,13 +92,12 @@ protected:
+ 
+ private:
+     Q_DECLARE_PRIVATE(KIconBar)
+-    KIconBarPrivate*const d_ptr;
+-
++    KIconBarPrivate *const d_ptr;
+ };
+ }
+ /**
+-  * @example testWidget/testwidget.h
+-  * @example testWidget/testwidget.cpp
+-  * @}
+-  */
++ * @example testWidget/testwidget.h
++ * @example testWidget/testwidget.cpp
++ * @}
++ */
+ #endif // KICONBAR_H
+diff --git a/kysdk-qtwidgets/src/kinputdialog.cpp b/kysdk-qtwidgets/src/kinputdialog.cpp
+index fc7939d..78c1f98 100644
+--- a/kysdk-qtwidgets/src/kinputdialog.cpp
++++ b/kysdk-qtwidgets/src/kinputdialog.cpp
+@@ -23,21 +23,20 @@
+ #include <QLabel>
+ #include <QLineEdit>
+ #include <QPushButton>
+-#include <QLineEdit>
+ #include <QWidget>
+ 
+-#include <QPlainTextEdit>
+-#include <QDoubleSpinBox>
++#include "kinputdialog.h"
++#include "qevent.h"
++#include "qvalidator.h"
+ #include <QComboBox>
++#include <QDoubleSpinBox>
+ #include <QListView>
++#include <QObject>
++#include <QPlainTextEdit>
+ #include <QPointer>
+ #include <QVBoxLayout>
+-#include <QObject>
+-#include "qvalidator.h"
+-#include "qevent.h"
+-#include "kinputdialog.h"
+ 
+-namespace  kdk
++namespace kdk
+ {
+ enum CandidateSignal {
+     TextValueSelectedSignal,
+@@ -50,9 +49,12 @@ enum CandidateSignal {
+ static const char *candidateSignal(int which)
+ {
+     switch (CandidateSignal(which)) {
+-    case TextValueSelectedSignal:   return SIGNAL(textValueSelected(QString));
+-    case IntValueSelectedSignal:    return SIGNAL(intValueSelected(int));
+-    case DoubleValueSelectedSignal: return SIGNAL(doubleValueSelected(double));
++    case TextValueSelectedSignal:
++        return SIGNAL(textValueSelected(QString));
++    case IntValueSelectedSignal:
++        return SIGNAL(intValueSelected(int));
++    case DoubleValueSelectedSignal:
++        return SIGNAL(doubleValueSelected(double));
+ 
+     case NumCandidateSignals:
+         break;
+@@ -80,22 +82,27 @@ class KInputDialogSpinBox : public QSpinBox
+ 
+ public:
+     KInputDialogSpinBox(QWidget *parent)
+-        : QSpinBox(parent) {
++        : QSpinBox(parent)
++    {
+         connect(lineEdit(), SIGNAL(textChanged(QString)), this, SLOT(notifyTextChanged()));
+         connect(this, SIGNAL(editingFinished()), this, SLOT(notifyTextChanged()));
+     }
+ 
+ protected:
+-  QSize sizeHint() const;
++    QSize sizeHint() const;
+ 
+ Q_SIGNALS:
+     void textChanged(int);
+ 
+ private Q_SLOTS:
+-    void notifyTextChanged() { Q_EMIT textChanged(hasAcceptableInput()?1:0); }
++    void notifyTextChanged()
++    {
++        Q_EMIT textChanged(hasAcceptableInput() ? 1 : 0);
++    }
+ 
+ private:
+-    void keyPressEvent(QKeyEvent *event) override {
++    void keyPressEvent(QKeyEvent *event) override
++    {
+         if ((event->key() == Qt::Key_Return || event->key() == Qt::Key_Enter) && !hasAcceptableInput()) {
+ #ifndef QT_NO_PROPERTIES
+             setProperty("value", property("value"));
+@@ -106,7 +113,8 @@ private:
+         notifyTextChanged();
+     }
+ 
+-    void mousePressEvent(QMouseEvent *event) override {
++    void mousePressEvent(QMouseEvent *event) override
++    {
+         QSpinBox::mousePressEvent(event);
+         notifyTextChanged();
+     }
+@@ -118,22 +126,27 @@ class KInputDialogDoubleSpinBox : public QDoubleSpinBox
+ 
+ public:
+     KInputDialogDoubleSpinBox(QWidget *parent = nullptr)
+-        : QDoubleSpinBox(parent) {
++        : QDoubleSpinBox(parent)
++    {
+         connect(lineEdit(), SIGNAL(textChanged(QString)), this, SLOT(notifyTextChanged()));
+         connect(this, SIGNAL(editingFinished()), this, SLOT(notifyTextChanged()));
+     }
+ 
+ protected:
+-  QSize sizeHint() const;
++    QSize sizeHint() const;
+ 
+ Q_SIGNALS:
+     void textChanged(int);
+ 
+ private Q_SLOTS:
+-    void notifyTextChanged() { Q_EMIT textChanged(hasAcceptableInput()?1:0); }
++    void notifyTextChanged()
++    {
++        Q_EMIT textChanged(hasAcceptableInput() ? 1 : 0);
++    }
+ 
+ private:
+-    void keyPressEvent(QKeyEvent *event) override {
++    void keyPressEvent(QKeyEvent *event) override
++    {
+         if ((event->key() == Qt::Key_Return || event->key() == Qt::Key_Enter) && !hasAcceptableInput()) {
+ #ifndef QT_NO_PROPERTIES
+             setProperty("value", property("value"));
+@@ -144,25 +157,32 @@ private:
+         notifyTextChanged();
+     }
+ 
+-    void mousePressEvent(QMouseEvent *event) override {
++    void mousePressEvent(QMouseEvent *event) override
++    {
+         QDoubleSpinBox::mousePressEvent(event);
+         notifyTextChanged();
+     }
+ };
+ 
+-class  KInputDialogLineEdit :public QLineEdit
++class KInputDialogLineEdit : public QLineEdit
+ {
+-  public:
+-    KInputDialogLineEdit(QWidget *parent = nullptr) : QLineEdit(parent){}
++public:
++    KInputDialogLineEdit(QWidget *parent = nullptr)
++        : QLineEdit(parent)
++    {
++    }
++
+ protected:
+     QSize sizeHint() const;
+ };
+ 
+-
+ class KInputDialogListView : public QListView
+ {
+ public:
+-    KInputDialogListView(QWidget *parent = nullptr) : QListView(parent) {}
++    KInputDialogListView(QWidget *parent = nullptr)
++        : QListView(parent)
++    {
++    }
+     QVariant inputMethodQuery(Qt::InputMethodQuery query) const override
+     {
+         if (query == Qt::ImEnabled)
+@@ -176,7 +196,7 @@ class KInputDialogPrivate : public QObject
+     Q_DECLARE_PUBLIC(KInputDialog)
+ 
+ public:
+-    KInputDialogPrivate(KInputDialog*parent);
++    KInputDialogPrivate(KInputDialog *parent);
+ 
+     void ensureLayout();
+     void ensureLineEdit();
+@@ -191,8 +211,14 @@ public:
+     void setComboBoxText(const QString &text);
+     void setListViewText(const QString &text);
+     QString listViewText() const;
+-    void ensureLayout() const { const_cast<KInputDialogPrivate *>(this)->ensureLayout(); }
+-    bool useComboBoxOrListView() const { return comboBox && comboBox->count() > 0; }
++    void ensureLayout() const
++    {
++        const_cast<KInputDialogPrivate *>(this)->ensureLayout();
++    }
++    bool useComboBoxOrListView() const
++    {
++        return comboBox && comboBox->count() > 0;
++    }
+     void _q_textChanged(const QString &text);
+     void _q_plainTextEditTextChanged();
+     void _q_currentRowChanged(const QModelIndex &newIndex, const QModelIndex &oldIndex);
+@@ -214,17 +240,27 @@ public:
+     QByteArray memberToDisconnectOnClose;
+ 
+ private:
+-    KInputDialog* q_ptr;
++    KInputDialog *q_ptr;
+ };
+ 
+-KInputDialogPrivate::KInputDialogPrivate(KInputDialog*parent)
+-    : q_ptr(parent),label(nullptr), okButton(nullptr),cancelButton(nullptr), lineEdit(nullptr), plainTextEdit(nullptr), intSpinBox(nullptr), doubleSpinBox(nullptr),
+-      comboBox(nullptr), listView(nullptr), inputWidget(nullptr), mainLayout(nullptr)
++KInputDialogPrivate::KInputDialogPrivate(KInputDialog *parent)
++    : q_ptr(parent)
++    , label(nullptr)
++    , okButton(nullptr)
++    , cancelButton(nullptr)
++    , lineEdit(nullptr)
++    , plainTextEdit(nullptr)
++    , intSpinBox(nullptr)
++    , doubleSpinBox(nullptr)
++    , comboBox(nullptr)
++    , listView(nullptr)
++    , inputWidget(nullptr)
++    , mainLayout(nullptr)
+ {
+     Q_Q(KInputDialog);
+     q->setMinimumHeight(198);
+     q->setMinimumWidth(336);
+-    connect(q->m_gsetting,&QGSettings::changed,q,&KInputDialog::changeTheme);
++    connect(q->m_gsetting, &QGSettings::changed, q, &KInputDialog::changeTheme);
+ }
+ 
+ void KInputDialogPrivate::ensureLayout()
+@@ -247,11 +283,11 @@ void KInputDialogPrivate::ensureLayout()
+     label->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed);
+     label->setWordWrap(true);
+     QHBoxLayout *hLayout = new QHBoxLayout();
+-    okButton = new QPushButton(tr("ok"),q);
+-    okButton->setFixedSize(96,36);
+-    cancelButton = new QPushButton(tr("cancel"),q);
+-    cancelButton->setFixedSize(96,36);
+-    hLayout->setContentsMargins(0,0,0,0);
++    okButton = new QPushButton(tr("ok"), q);
++    okButton->setFixedSize(96, 36);
++    cancelButton = new QPushButton(tr("cancel"), q);
++    cancelButton->setFixedSize(96, 36);
++    hLayout->setContentsMargins(0, 0, 0, 0);
+     hLayout->setSpacing(0);
+     hLayout->addStretch();
+     hLayout->addWidget(cancelButton);
+@@ -262,18 +298,17 @@ void KInputDialogPrivate::ensureLayout()
+ 
+     mainLayout = new QVBoxLayout();
+     mainLayout->setSpacing(0);
+-    mainLayout->setContentsMargins(24,0,24,24);
++    mainLayout->setContentsMargins(24, 0, 24, 24);
+     mainLayout->addWidget(label);
+     mainLayout->addSpacing(8);
+     mainLayout->addWidget(inputWidget);
+     mainLayout->addSpacing(32);
+-    //mainLayout->addStretch();
++    // mainLayout->addStretch();
+     mainLayout->addLayout(hLayout);
+     q->mainWidget()->setLayout(mainLayout);
+     q->changeTheme();
+     ensureEnabledConnection(qobject_cast<QAbstractSpinBox *>(inputWidget));
+     inputWidget->show();
+-
+ }
+ 
+ void KInputDialogPrivate::ensureLineEdit()
+@@ -325,8 +360,8 @@ void KInputDialogPrivate::ensureListView()
+         listView->setModel(comboBox->model());
+         listView->setCurrentIndex(QModelIndex());
+         QObject::connect(listView->selectionModel(),
+-                         SIGNAL(currentRowChanged(QModelIndex,QModelIndex)),
+-                         q, SLOT(_q_currentRowChanged(QModelIndex,QModelIndex)));
++                         SIGNAL(currentRowChanged(QModelIndex, QModelIndex)),
++                         q, SLOT(_q_currentRowChanged(QModelIndex, QModelIndex)));
+     }
+ }
+ 
+@@ -442,8 +477,7 @@ void KInputDialogPrivate::setListViewText(const QString &text)
+     int row = comboBox->findText(text);
+     if (row != -1) {
+         QModelIndex index(comboBox->model()->index(row, 0));
+-        listView->selectionModel()->setCurrentIndex(index, QItemSelectionModel::Clear
+-                                                         | QItemSelectionModel::SelectCurrent);
++        listView->selectionModel()->setCurrentIndex(index, QItemSelectionModel::Clear | QItemSelectionModel::SelectCurrent);
+     }
+ }
+ 
+@@ -483,18 +517,16 @@ void KInputDialogPrivate::_q_currentRowChanged(const QModelIndex &newIndex,
+     okButton->setEnabled(true);
+ }
+ 
+-
+ KInputDialog::KInputDialog(QWidget *parent)
+-    : KDialog(parent),d_ptr(new KInputDialogPrivate(this))
++    : KDialog(parent)
++    , d_ptr(new KInputDialogPrivate(this))
+ {
+ }
+ 
+-
+ KInputDialog::~KInputDialog()
+ {
+ }
+ 
+-
+ void KInputDialog::setInputMode(InputMode mode)
+ {
+     Q_D(KInputDialog);
+@@ -540,7 +572,6 @@ KInputDialog::InputMode KInputDialog::inputMode() const
+     return TextInput;
+ }
+ 
+-
+ void KInputDialog::setLabelText(const QString &text)
+ {
+     Q_D(KInputDialog);
+@@ -565,14 +596,12 @@ void KInputDialog::setOption(InputDialogOption option, bool on)
+         setOptions(d->opts ^ option);
+ }
+ 
+-
+ bool KInputDialog::testOption(InputDialogOption option) const
+ {
+     Q_D(const KInputDialog);
+     return (d->opts & option) != 0;
+ }
+ 
+-
+ void KInputDialog::setOptions(InputDialogOptions options)
+ {
+     Q_D(KInputDialog);
+@@ -584,8 +613,7 @@ void KInputDialog::setOptions(InputDialogOptions options)
+     d->opts = options;
+     d->ensureLayout();
+ 
+-    if (changed & NoButtons)
+-    {
++    if (changed & NoButtons) {
+         d->okButton->setVisible(!(options & NoButtons));
+         d->cancelButton->setVisible(!(options & NoButtons));
+     }
+@@ -601,7 +629,6 @@ KInputDialog::InputDialogOptions KInputDialog::options() const
+     return d->opts;
+ }
+ 
+-
+ void KInputDialog::setTextValue(const QString &text)
+ {
+     Q_D(KInputDialog);
+@@ -624,7 +651,6 @@ QString KInputDialog::textValue() const
+     return d->textValue;
+ }
+ 
+-
+ void KInputDialog::setTextEchoMode(QLineEdit::EchoMode mode)
+ {
+     Q_D(KInputDialog);
+@@ -642,7 +668,6 @@ QLineEdit::EchoMode KInputDialog::textEchoMode() const
+     }
+ }
+ 
+-
+ void KInputDialog::setComboBoxEditable(bool editable)
+ {
+     Q_D(KInputDialog);
+@@ -662,7 +687,6 @@ bool KInputDialog::isComboBoxEditable() const
+     }
+ }
+ 
+-
+ void KInputDialog::setComboBoxItems(const QStringList &items)
+ {
+     Q_D(KInputDialog);
+@@ -691,7 +715,6 @@ QStringList KInputDialog::comboBoxItems() const
+     return result;
+ }
+ 
+-
+ void KInputDialog::setIntValue(int value)
+ {
+     Q_D(KInputDialog);
+@@ -709,7 +732,6 @@ int KInputDialog::intValue() const
+     }
+ }
+ 
+-
+ void KInputDialog::setIntMinimum(int min)
+ {
+     Q_D(KInputDialog);
+@@ -727,7 +749,6 @@ int KInputDialog::intMinimum() const
+     }
+ }
+ 
+-
+ void KInputDialog::setIntMaximum(int max)
+ {
+     Q_D(KInputDialog);
+@@ -745,7 +766,6 @@ int KInputDialog::intMaximum() const
+     }
+ }
+ 
+-
+ void KInputDialog::setIntRange(int min, int max)
+ {
+     Q_D(KInputDialog);
+@@ -753,7 +773,6 @@ void KInputDialog::setIntRange(int min, int max)
+     d->intSpinBox->setRange(min, max);
+ }
+ 
+-
+ void KInputDialog::setIntStep(int step)
+ {
+     Q_D(KInputDialog);
+@@ -771,7 +790,6 @@ int KInputDialog::intStep() const
+     }
+ }
+ 
+-
+ void KInputDialog::setDoubleValue(double value)
+ {
+     Q_D(KInputDialog);
+@@ -789,7 +807,6 @@ double KInputDialog::doubleValue() const
+     }
+ }
+ 
+-
+ void KInputDialog::setDoubleMinimum(double min)
+ {
+     Q_D(KInputDialog);
+@@ -807,7 +824,6 @@ double KInputDialog::doubleMinimum() const
+     }
+ }
+ 
+-
+ void KInputDialog::setDoubleMaximum(double max)
+ {
+     Q_D(KInputDialog);
+@@ -825,7 +841,6 @@ double KInputDialog::doubleMaximum() const
+     }
+ }
+ 
+-
+ void KInputDialog::setDoubleRange(double min, double max)
+ {
+     Q_D(KInputDialog);
+@@ -833,7 +848,6 @@ void KInputDialog::setDoubleRange(double min, double max)
+     d->doubleSpinBox->setRange(min, max);
+ }
+ 
+-
+ void KInputDialog::setDoubleDecimals(int decimals)
+ {
+     Q_D(KInputDialog);
+@@ -851,7 +865,6 @@ int KInputDialog::doubleDecimals() const
+     }
+ }
+ 
+-
+ void KInputDialog::setOkButtonText(const QString &text)
+ {
+     Q_D(const KInputDialog);
+@@ -889,7 +902,6 @@ void KInputDialog::open(QObject *receiver, const char *member)
+     QDialog::open();
+ }
+ 
+-
+ QSize KInputDialog::minimumSizeHint() const
+ {
+     Q_D(const KInputDialog);
+@@ -926,7 +938,7 @@ void KInputDialog::setVisible(bool visible)
+ QString KInputDialog::placeholderText() const
+ {
+     Q_D(const KInputDialog);
+-    if(d->lineEdit)
++    if (d->lineEdit)
+         return d->lineEdit->placeholderText();
+     else
+         return QString();
+@@ -935,11 +947,10 @@ QString KInputDialog::placeholderText() const
+ void KInputDialog::setPlaceholderText(const QString &str)
+ {
+     Q_D(const KInputDialog);
+-    if(d->lineEdit)
++    if (d->lineEdit)
+         d->lineEdit->setPlaceholderText(str);
+ }
+ 
+-
+ void KInputDialog::done(int result)
+ {
+     Q_D(KInputDialog);
+@@ -970,16 +981,15 @@ void KInputDialog::changeTheme()
+ {
+     Q_D(KInputDialog);
+     KDialog::changeTheme();
+-    if(d->okButton)
+-        d->okButton->setProperty("isImportant",true);
++    if (d->okButton)
++        d->okButton->setProperty("isImportant", true);
+ }
+ 
+-
+-QString KInputDialog::getText(QWidget *parent,const QString &label,
++QString KInputDialog::getText(QWidget *parent, const QString &label,
+                               QLineEdit::EchoMode mode, const QString &text, bool *ok,
+                               Qt::WindowFlags flags, Qt::InputMethodHints inputMethodHints)
+ {
+-    KInputDialog* dialog = new KInputDialog(parent);
++    KInputDialog *dialog = new KInputDialog(parent);
+     dialog->setLabelText(label);
+     dialog->setTextValue(text);
+     dialog->setTextEchoMode(mode);
+@@ -995,13 +1005,11 @@ QString KInputDialog::getText(QWidget *parent,const QString &label,
+     }
+ }
+ 
+-
+-
+-QString KInputDialog::getMultiLineText(QWidget *parent,const QString &label,
++QString KInputDialog::getMultiLineText(QWidget *parent, const QString &label,
+                                        const QString &text, bool *ok, Qt::WindowFlags flags,
+                                        Qt::InputMethodHints inputMethodHints)
+ {
+-    KInputDialog* dialog = new KInputDialog(parent);
++    KInputDialog *dialog = new KInputDialog(parent);
+     dialog->setOptions(KInputDialog::UsePlainTextEditForTextInput);
+     dialog->setLabelText(label);
+     dialog->setTextValue(text);
+@@ -1017,11 +1025,10 @@ QString KInputDialog::getMultiLineText(QWidget *parent,const QString &label,
+     }
+ }
+ 
+-
+-int KInputDialog::getInt(QWidget *parent,const QString &label, int value,
++int KInputDialog::getInt(QWidget *parent, const QString &label, int value,
+                          int min, int max, int step, bool *ok, Qt::WindowFlags flags)
+ {
+-    KInputDialog* dialog = new KInputDialog(parent);
++    KInputDialog *dialog = new KInputDialog(parent);
+     dialog->setLabelText(label);
+     dialog->setIntRange(min, max);
+     dialog->setIntValue(value);
+@@ -1037,9 +1044,9 @@ int KInputDialog::getInt(QWidget *parent,const QString &label, int value,
+     }
+ }
+ 
+-double KInputDialog::getDouble(QWidget *parent,const QString &label, double value, double minValue, double maxValue, int decimals, bool *ok, Qt::WindowFlags flags)
++double KInputDialog::getDouble(QWidget *parent, const QString &label, double value, double minValue, double maxValue, int decimals, bool *ok, Qt::WindowFlags flags)
+ {
+-    KInputDialog* dialog = new KInputDialog(parent);
++    KInputDialog *dialog = new KInputDialog(parent);
+     dialog->setLabelText(label);
+     dialog->setDoubleDecimals(decimals);
+     dialog->setDoubleRange(minValue, maxValue);
+@@ -1055,13 +1062,13 @@ double KInputDialog::getDouble(QWidget *parent,const QString &label, double valu
+     }
+ }
+ 
+-QString KInputDialog::getItem(QWidget *parent,const QString &label,
++QString KInputDialog::getItem(QWidget *parent, const QString &label,
+                               const QStringList &items, int current, bool editable, bool *ok,
+                               Qt::WindowFlags flags, Qt::InputMethodHints inputMethodHints)
+ {
+     QString text(items.value(current));
+ 
+-    KInputDialog* dialog = new KInputDialog(parent);
++    KInputDialog *dialog = new KInputDialog(parent);
+     dialog->setLabelText(label);
+     dialog->setComboBoxItems(items);
+     dialog->setTextValue(text);
+@@ -1120,6 +1127,5 @@ QSize KInputDialogDoubleSpinBox::sizeHint() const
+ 
+ }
+ 
+-
+ #include "kinputdialog.moc"
+ #include "moc_kinputdialog.cpp"
+diff --git a/kysdk-qtwidgets/src/kinputdialog.h b/kysdk-qtwidgets/src/kinputdialog.h
+index 595e905..d2fc1f6 100644
+--- a/kysdk-qtwidgets/src/kinputdialog.h
++++ b/kysdk-qtwidgets/src/kinputdialog.h
+@@ -25,15 +25,15 @@
+ 
+ #include <QLineEdit>
+ 
+-#include <QtWidgets/qtwidgetsglobal.h>
+ #include "kdialog.h"
++#include <QtWidgets/qtwidgetsglobal.h>
+ 
+ namespace kdk
+ {
+ 
+ /** @defgroup DialogBoxModule
+-  * @{
+-  */
++ * @{
++ */
+ 
+ class KInputDialogPrivate;
+ 
+@@ -65,8 +65,8 @@ class GUI_EXPORT KInputDialog : public KDialog
+ 
+ public:
+     enum InputDialogOption {
+-        NoButtons                    = 0x00000001,
+-        UseListViewForComboBoxItems  = 0x00000002,
++        NoButtons = 0x00000001,
++        UseListViewForComboBoxItems = 0x00000002,
+         UsePlainTextEditForTextInput = 0x00000004
+     };
+ 
+@@ -336,7 +336,7 @@ public:
+      * @return
+      * @since 1.2
+      */
+-    QString	placeholderText() const;
++    QString placeholderText() const;
+ 
+     /**
+      * @brief 设置背景提示文本
+@@ -355,7 +355,7 @@ public:
+      * @param inputMethodHints
+      * @return
+      */
+-    static QString getText(QWidget *parent,const QString &label,
++    static QString getText(QWidget *parent, const QString &label,
+                            QLineEdit::EchoMode echo = QLineEdit::Normal,
+                            const QString &text = QString(), bool *ok = nullptr,
+                            Qt::WindowFlags flags = Qt::WindowFlags(),
+@@ -371,7 +371,7 @@ public:
+      * @param inputMethodHints
+      * @return
+      */
+-    static QString getMultiLineText(QWidget *parent,const QString &label,
++    static QString getMultiLineText(QWidget *parent, const QString &label,
+                                     const QString &text = QString(), bool *ok = nullptr,
+                                     Qt::WindowFlags flags = Qt::WindowFlags(),
+                                     Qt::InputMethodHints inputMethodHints = Qt::ImhNone);
+@@ -388,7 +388,7 @@ public:
+      * @param inputMethodHints
+      * @return
+      */
+-    static QString getItem(QWidget *parent,const QString &label,
++    static QString getItem(QWidget *parent, const QString &label,
+                            const QStringList &items, int current = 0, bool editable = true,
+                            bool *ok = nullptr, Qt::WindowFlags flags = Qt::WindowFlags(),
+                            Qt::InputMethodHints inputMethodHints = Qt::ImhNone);
+@@ -405,7 +405,7 @@ public:
+      * @param flags
+      * @return
+      */
+-    static int getInt(QWidget *parent,const QString &label, int value = 0,
++    static int getInt(QWidget *parent, const QString &label, int value = 0,
+                       int minValue = -2147483647, int maxValue = 2147483647,
+                       int step = 1, bool *ok = nullptr, Qt::WindowFlags flags = Qt::WindowFlags());
+ 
+@@ -421,12 +421,11 @@ public:
+      * @param flags
+      * @return
+      */
+-    static double getDouble(QWidget *parent,const QString &label,
++    static double getDouble(QWidget *parent, const QString &label,
+                             double value = 0, double minValue = -2147483647,
+                             double maxValue = 2147483647, int decimals = 1, bool *ok = nullptr,
+                             Qt::WindowFlags flags = Qt::WindowFlags());
+ 
+-
+     /**
+      * @brief 设置doubel类型步长
+      * @param step
+@@ -454,19 +453,19 @@ protected:
+     void changeTheme();
+ 
+ private:
+-    KInputDialogPrivate* const d_ptr;
++    KInputDialogPrivate *const d_ptr;
+     Q_DISABLE_COPY(KInputDialog)
+     Q_DECLARE_PRIVATE(KInputDialog)
+-    Q_PRIVATE_SLOT(d_ptr, void _q_textChanged(const QString&))
++    Q_PRIVATE_SLOT(d_ptr, void _q_textChanged(const QString &))
+     Q_PRIVATE_SLOT(d_ptr, void _q_plainTextEditTextChanged())
+-    Q_PRIVATE_SLOT(d_ptr, void _q_currentRowChanged(const QModelIndex&, const QModelIndex&))
++    Q_PRIVATE_SLOT(d_ptr, void _q_currentRowChanged(const QModelIndex &, const QModelIndex &))
+ };
+ 
+ Q_DECLARE_OPERATORS_FOR_FLAGS(KInputDialog::InputDialogOptions)
+ }
+ /**
+-  * @example testinputdialog/widget.h
+-  * @example testinputdialog/widget.cpp
+-  * @}
+-  */
++ * @example testinputdialog/widget.h
++ * @example testinputdialog/widget.cpp
++ * @}
++ */
+ #endif // KINPUTDIALOG_H
+diff --git a/kysdk-qtwidgets/src/kintrowidget.cpp b/kysdk-qtwidgets/src/kintrowidget.cpp
+index 2e4dcba..2b4d670 100644
+--- a/kysdk-qtwidgets/src/kintrowidget.cpp
++++ b/kysdk-qtwidgets/src/kintrowidget.cpp
+@@ -21,19 +21,20 @@
+  */
+ 
+ #include "kintrowidget.h"
++#include "klabel.h"
+ #include "themeController.h"
+-#include <QPainter>
+-#include <QPainterPath>
+ #include <QBoxLayout>
+-#include <QEvent>
+ #include <QDebug>
++#include <QEvent>
+ #include <QLabel>
+ #include <QMouseEvent>
+-#include "klabel.h"
++#include <QPainter>
++#include <QPainterPath>
+ 
+-namespace kdk {
++namespace kdk
++{
+ 
+-class Q_DECL_HIDDEN KIntroWidgetPrivate : public QObject , public ThemeController
++class Q_DECL_HIDDEN KIntroWidgetPrivate : public QObject, public ThemeController
+ {
+     Q_OBJECT
+     Q_DECLARE_PUBLIC(KIntroWidget)
+@@ -59,8 +60,8 @@ private:
+ };
+ 
+ KIntroWidgetPrivate::KIntroWidgetPrivate(KIntroWidget *parent)
+-    :q_ptr(parent)
+-    ,m_viewType(ListView)
++    : q_ptr(parent)
++    , m_viewType(ListView)
+ {
+     Q_Q(KIntroWidget);
+     m_pMainLabel = new KLabel();
+@@ -69,21 +70,18 @@ KIntroWidgetPrivate::KIntroWidgetPrivate(KIntroWidget *parent)
+     m_pMainLabel->setFont(font);
+     m_pSubLabel = new KLabel();
+     QPalette palette;
+-    palette.setColor(QPalette::WindowText,QColor(140, 140, 140));
++    palette.setColor(QPalette::WindowText, QColor(140, 140, 140));
+     m_pSubLabel->setPalette(palette);
+-//    m_titleColor = q->palette().highlight().color();
++    //    m_titleColor = q->palette().highlight().color();
+     m_titleColor = ThemeController::getPaletteColorFromDT("highlight");
+ 
+     int radius = ThemeController::getRadiusFromDT("kradius-normal");
+-    if(radius == -1 )
+-    {
++    if (radius == -1) {
+         m_bottomLeftRadius = 6;
+         m_bottomRightRadius = 6;
+         m_topLeftRadius = 6;
+         m_topRightRadius = 6;
+-    }
+-    else
+-    {
++    } else {
+         m_bottomLeftRadius = radius;
+         m_bottomRightRadius = radius;
+         m_topLeftRadius = radius;
+@@ -95,12 +93,12 @@ void KIntroWidgetPrivate::changeTheme()
+ {
+     Q_Q(KIntroWidget);
+     initThemeStyle();
+-//    m_bkgColor = q->palette().toolTipBase().color();
++    //    m_bkgColor = q->palette().toolTipBase().color();
+     m_bkgColor = ThemeController::getPaletteColorFromDT("tooltipbase");
+-//    m_borderColor = q->palette().toolTipBase().color();
++    //    m_borderColor = q->palette().toolTipBase().color();
+     m_borderColor = ThemeController::getPaletteColorFromDT("tooltipbase");
+     m_borderColor.setAlphaF(0.08);
+-    if(ThemeController::themeMode() == LightTheme)
++    if (ThemeController::themeMode() == LightTheme)
+         m_mixColor = Qt::black;
+     else
+         m_mixColor = Qt::white;
+@@ -108,22 +106,22 @@ void KIntroWidgetPrivate::changeTheme()
+ }
+ 
+ KIntroWidget::KIntroWidget(QWidget *parent)
+-    :QWidget(parent)
+-    ,d_ptr(new KIntroWidgetPrivate(this))
++    : QWidget(parent)
++    , d_ptr(new KIntroWidgetPrivate(this))
+ {
+     Q_D(KIntroWidget);
+-    setContentsMargins(22,4,16,4);
++    setContentsMargins(22, 4, 16, 4);
+     QVBoxLayout *vlayout = new QVBoxLayout(this);
+     vlayout->setSpacing(0);
+     vlayout->addWidget(d->m_pMainLabel);
+-//    vlayout->addSpacing(4);
++    //    vlayout->addSpacing(4);
+     vlayout->addWidget(d->m_pSubLabel);
+     installEventFilter(this);
+-//    setFixedSize(rect().width(),74);
++    //    setFixedSize(rect().width(),74);
+     d->m_pMainLabel->setAlignment(Qt::AlignLeft);
+     d->m_pSubLabel->setAlignment(Qt::AlignLeft);
+     d->changeTheme();
+-    connect(d->m_gsetting,&QGSettings::changed,this,[=]{
++    connect(d->m_gsetting, &QGSettings::changed, this, [=] {
+         d->changeTheme();
+     });
+ }
+@@ -132,10 +130,10 @@ void KIntroWidget::setViewType(ViewType type)
+ {
+     Q_D(KIntroWidget);
+     d->m_viewType = type;
+-//    if(d->m_viewType == ListView)
+-//        setFixedSize(rect().width(),74);
+-//    else
+-//        setFixedSize(218,200);
++    //    if(d->m_viewType == ListView)
++    //        setFixedSize(rect().width(),74);
++    //    else
++    //        setFixedSize(218,200);
+ }
+ 
+ void KIntroWidget::setMainLabel(QString str)
+@@ -186,59 +184,55 @@ void KIntroWidget::paintEvent(QPaintEvent *event)
+     QPainterPath path1;
+     QPainterPath path2;
+     QRect drawRect = this->rect();
+-    path.moveTo(drawRect.topLeft() + QPoint(d->m_topLeftRadius , 0));
+-    path.lineTo(drawRect.topRight() - QPoint(d->m_topRightRadius , 0));
+-    path.quadTo(drawRect.topRight() , drawRect.topRight() + QPoint(0 , d->m_topRightRadius));
+-    path.lineTo(drawRect.bottomRight() - QPoint(0 , d->m_bottomRightRadius ));
+-    path.quadTo(drawRect.bottomRight() , drawRect.bottomRight() - QPoint(d->m_bottomRightRadius , 0));
+-    path.lineTo(drawRect.bottomLeft() + QPoint(d->m_bottomLeftRadius , 0));
+-    path.quadTo(drawRect.bottomLeft() , drawRect.bottomLeft() - QPoint(0 , d->m_bottomLeftRadius));
+-    path.lineTo(drawRect.topLeft() + QPoint(0 , d->m_topLeftRadius));
+-    path.quadTo(drawRect.topLeft() , drawRect.topLeft() + QPoint(d->m_topLeftRadius , 0));
++    path.moveTo(drawRect.topLeft() + QPoint(d->m_topLeftRadius, 0));
++    path.lineTo(drawRect.topRight() - QPoint(d->m_topRightRadius, 0));
++    path.quadTo(drawRect.topRight(), drawRect.topRight() + QPoint(0, d->m_topRightRadius));
++    path.lineTo(drawRect.bottomRight() - QPoint(0, d->m_bottomRightRadius));
++    path.quadTo(drawRect.bottomRight(), drawRect.bottomRight() - QPoint(d->m_bottomRightRadius, 0));
++    path.lineTo(drawRect.bottomLeft() + QPoint(d->m_bottomLeftRadius, 0));
++    path.quadTo(drawRect.bottomLeft(), drawRect.bottomLeft() - QPoint(0, d->m_bottomLeftRadius));
++    path.lineTo(drawRect.topLeft() + QPoint(0, d->m_topLeftRadius));
++    path.quadTo(drawRect.topLeft(), drawRect.topLeft() + QPoint(d->m_topLeftRadius, 0));
+ 
+     switch (d->m_viewType) {
+-    case ViewType::IconView:
+-        {
+-//            d->m_pMainLabel->setAlignment(Qt::AlignCenter);
+-//            d->m_pSubLabel->setAlignment(Qt::AlignCenter);
+-            d->m_pMainLabel->setWordWrap(true);
+-            d->m_pSubLabel->setWordWrap(true);
+-            path1.moveTo(drawRect.topLeft() + QPoint(d->m_topLeftRadius , 0));
+-            path1.lineTo(drawRect.topRight() - QPoint(d->m_topRightRadius , 0));
+-            path1.quadTo(drawRect.topRight() , drawRect.topRight() + QPoint(0 , d->m_topRightRadius));
+-            path1.lineTo(drawRect.topLeft() + QPoint(0 , d->m_topLeftRadius));
+-            path1.quadTo(drawRect.topLeft() , drawRect.topLeft() + QPoint(d->m_topLeftRadius , 0));
++    case ViewType::IconView: {
++        //            d->m_pMainLabel->setAlignment(Qt::AlignCenter);
++        //            d->m_pSubLabel->setAlignment(Qt::AlignCenter);
++        d->m_pMainLabel->setWordWrap(true);
++        d->m_pSubLabel->setWordWrap(true);
++        path1.moveTo(drawRect.topLeft() + QPoint(d->m_topLeftRadius, 0));
++        path1.lineTo(drawRect.topRight() - QPoint(d->m_topRightRadius, 0));
++        path1.quadTo(drawRect.topRight(), drawRect.topRight() + QPoint(0, d->m_topRightRadius));
++        path1.lineTo(drawRect.topLeft() + QPoint(0, d->m_topLeftRadius));
++        path1.quadTo(drawRect.topLeft(), drawRect.topLeft() + QPoint(d->m_topLeftRadius, 0));
+ 
+-            path2.moveTo(drawRect.topLeft() + QPoint(0 , d->m_topLeftRadius));
+-            path2.lineTo(drawRect.bottomLeft() - QPoint(0 , d->m_bottomLeftRadius));
+-            path2.quadTo(drawRect.bottomLeft() , drawRect.bottomLeft() + QPoint(d->m_bottomLeftRadius , 0));
+-            path2.lineTo(drawRect.bottomRight() - QPoint(d->m_bottomRightRadius , 0));
+-            path2.quadTo(drawRect.bottomRight() , drawRect.bottomRight() - QPoint(0 , d->m_bottomRightRadius));
+-            path2.lineTo(drawRect.topRight() + QPoint(0 , d->m_topRightRadius));
+-            path2.lineTo(drawRect.topLeft() + QPoint(0 , d->m_topLeftRadius));
+-        }
+-        break;
+-    case ViewType::ListView:
+-        {
++        path2.moveTo(drawRect.topLeft() + QPoint(0, d->m_topLeftRadius));
++        path2.lineTo(drawRect.bottomLeft() - QPoint(0, d->m_bottomLeftRadius));
++        path2.quadTo(drawRect.bottomLeft(), drawRect.bottomLeft() + QPoint(d->m_bottomLeftRadius, 0));
++        path2.lineTo(drawRect.bottomRight() - QPoint(d->m_bottomRightRadius, 0));
++        path2.quadTo(drawRect.bottomRight(), drawRect.bottomRight() - QPoint(0, d->m_bottomRightRadius));
++        path2.lineTo(drawRect.topRight() + QPoint(0, d->m_topRightRadius));
++        path2.lineTo(drawRect.topLeft() + QPoint(0, d->m_topLeftRadius));
++    } break;
++    case ViewType::ListView: {
+ 
+-            d->m_pMainLabel->setWordWrap(false);
+-            d->m_pSubLabel->setWordWrap(false);
+-            path1.moveTo(drawRect.topLeft() + QPoint(d->m_topLeftRadius , 0));
+-            path1.lineTo(drawRect.bottomLeft() + QPoint(d->m_bottomLeftRadius , 0));
+-            path1.quadTo(drawRect.bottomLeft() , drawRect.bottomLeft() - QPoint(0 , d->m_bottomLeftRadius));
+-            path1.lineTo(drawRect.topLeft() + QPoint(0 , d->m_topLeftRadius ));
+-            path1.quadTo(drawRect.topLeft(), drawRect.topLeft() + QPoint(d->m_topLeftRadius , 0));
++        d->m_pMainLabel->setWordWrap(false);
++        d->m_pSubLabel->setWordWrap(false);
++        path1.moveTo(drawRect.topLeft() + QPoint(d->m_topLeftRadius, 0));
++        path1.lineTo(drawRect.bottomLeft() + QPoint(d->m_bottomLeftRadius, 0));
++        path1.quadTo(drawRect.bottomLeft(), drawRect.bottomLeft() - QPoint(0, d->m_bottomLeftRadius));
++        path1.lineTo(drawRect.topLeft() + QPoint(0, d->m_topLeftRadius));
++        path1.quadTo(drawRect.topLeft(), drawRect.topLeft() + QPoint(d->m_topLeftRadius, 0));
+ 
+-            path2.moveTo(drawRect.topLeft() + QPoint(d->m_topLeftRadius , 0));
+-            path2.lineTo(drawRect.topRight() - QPoint(d->m_topLeftRadius , 0));
+-            path2.quadTo(drawRect.topRight() , drawRect.topRight() + QPoint(0 , d->m_topRightRadius));
+-            path2.lineTo(drawRect.bottomRight() - QPoint(0 , d->m_bottomRightRadius));
+-            path2.quadTo(drawRect.bottomRight() , drawRect.bottomRight() - QPoint(d->m_bottomRightRadius , 0));
+-            path2.lineTo(drawRect.bottomLeft() + QPoint(d->m_bottomLeftRadius , 0));
+-            path2.lineTo(drawRect.topLeft() + QPoint(d->m_topLeftRadius , 0));
++        path2.moveTo(drawRect.topLeft() + QPoint(d->m_topLeftRadius, 0));
++        path2.lineTo(drawRect.topRight() - QPoint(d->m_topLeftRadius, 0));
++        path2.quadTo(drawRect.topRight(), drawRect.topRight() + QPoint(0, d->m_topRightRadius));
++        path2.lineTo(drawRect.bottomRight() - QPoint(0, d->m_bottomRightRadius));
++        path2.quadTo(drawRect.bottomRight(), drawRect.bottomRight() - QPoint(d->m_bottomRightRadius, 0));
++        path2.lineTo(drawRect.bottomLeft() + QPoint(d->m_bottomLeftRadius, 0));
++        path2.lineTo(drawRect.topLeft() + QPoint(d->m_topLeftRadius, 0));
+ 
+-        }
+-        break;
++    } break;
+     default:
+         break;
+     }
+@@ -250,41 +244,39 @@ void KIntroWidget::paintEvent(QPaintEvent *event)
+     painter.drawPath(path1);
+     painter.setBrush(d->m_bkgColor);
+     painter.drawPath(path2);
+-
+ }
+ 
+ bool KIntroWidget::eventFilter(QObject *watched, QEvent *event)
+ {
+     Q_D(KIntroWidget);
+-    if(watched == this)
+-    {
++    if (watched == this) {
+ 
+         switch (event->type()) {
+         case QEvent::Enter:
+-//            d->m_bkgColor = ThemeController::mixColor(palette().toolTipBase().color(),d->m_mixColor,0.05);
+-            d->m_bkgColor = ThemeController::mixColor(ThemeController::getPaletteColorFromDT("tooltipbase"),d->m_mixColor,0.05);
++            //            d->m_bkgColor = ThemeController::mixColor(palette().toolTipBase().color(),d->m_mixColor,0.05);
++            d->m_bkgColor = ThemeController::mixColor(ThemeController::getPaletteColorFromDT("tooltipbase"), d->m_mixColor, 0.05);
+             update();
+             break;
+         case QEvent::Leave:
+-//            d->m_bkgColor = palette().toolTipBase().color();
++            //            d->m_bkgColor = palette().toolTipBase().color();
+             d->m_bkgColor = ThemeController::getPaletteColorFromDT("tooltipbase");
+             update();
+             break;
+         case QEvent::MouseButtonPress:
+-//            d->m_bkgColor = ThemeController::mixColor(palette().toolTipBase().color(),d->m_mixColor,0.1);
+-            d->m_bkgColor = ThemeController::mixColor(ThemeController::getPaletteColorFromDT("tooltipbase"),d->m_mixColor,0.1);
++            //            d->m_bkgColor = ThemeController::mixColor(palette().toolTipBase().color(),d->m_mixColor,0.1);
++            d->m_bkgColor = ThemeController::mixColor(ThemeController::getPaletteColorFromDT("tooltipbase"), d->m_mixColor, 0.1);
+             update();
+             break;
+         case QEvent::MouseButtonRelease:
+-//            d->m_bkgColor = ThemeController::mixColor(palette().toolTipBase().color(),d->m_mixColor,0.05);
+-            d->m_bkgColor = ThemeController::mixColor(ThemeController::getPaletteColorFromDT("tooltipbase"),d->m_mixColor,0.05);
++            //            d->m_bkgColor = ThemeController::mixColor(palette().toolTipBase().color(),d->m_mixColor,0.05);
++            d->m_bkgColor = ThemeController::mixColor(ThemeController::getPaletteColorFromDT("tooltipbase"), d->m_mixColor, 0.05);
+             update();
+             break;
+         default:
+             break;
+         }
+     }
+-    return QWidget::eventFilter(watched,event);
++    return QWidget::eventFilter(watched, event);
+ }
+ 
+ QSize KIntroWidget::sizeHint() const
+@@ -296,8 +288,7 @@ QSize KIntroWidget::sizeHint() const
+ void KIntroWidget::mousePressEvent(QMouseEvent *event)
+ {
+     Q_D(KIntroWidget);
+-    if(event->button() == Qt::MouseButton::RightButton)
+-    {
++    if (event->button() == Qt::MouseButton::RightButton) {
+         emit rightClick(event->globalPos());
+     }
+     return QWidget::mousePressEvent(event);
+diff --git a/kysdk-qtwidgets/src/kintrowidget.h b/kysdk-qtwidgets/src/kintrowidget.h
+index a954593..08a8b53 100644
+--- a/kysdk-qtwidgets/src/kintrowidget.h
++++ b/kysdk-qtwidgets/src/kintrowidget.h
+@@ -26,9 +26,10 @@
+ #include "gui_g.h"
+ #include <QWidget>
+ 
+-namespace kdk {
++namespace kdk
++{
+ 
+-enum ViewType{
++enum ViewType {
+     IconView,
+     ListView
+ };
+@@ -39,11 +40,11 @@ enum ViewType{
+  */
+ class KIntroWidgetPrivate;
+ 
+-class GUI_EXPORT KIntroWidget :public QWidget
++class GUI_EXPORT KIntroWidget : public QWidget
+ {
+     Q_OBJECT
+ public:
+-    KIntroWidget(QWidget *parent =nullptr);
++    KIntroWidget(QWidget *parent = nullptr);
+ 
+     /**
+      * @brief 设置视图样式
+@@ -76,7 +77,7 @@ public:
+      * @param topRight
+      * @param bottomRight
+      */
+-    void setBorderRadius(int bottomLeft,int topLeft,int topRight,int bottomRight);
++    void setBorderRadius(int bottomLeft, int topLeft, int topRight, int bottomRight);
+ 
+     /**
+      * @brief 设置标题颜色
+@@ -88,7 +89,7 @@ Q_SIGNALS:
+     void rightClick(QPoint point);
+ 
+ protected:
+-    void paintEvent(QPaintEvent* event);
++    void paintEvent(QPaintEvent *event);
+     bool eventFilter(QObject *watched, QEvent *event);
+     QSize sizeHint() const override;
+     void mousePressEvent(QMouseEvent *event);
+diff --git a/kysdk-qtwidgets/src/kitemwidget.cpp b/kysdk-qtwidgets/src/kitemwidget.cpp
+index 1c50a93..1b64c33 100644
+--- a/kysdk-qtwidgets/src/kitemwidget.cpp
++++ b/kysdk-qtwidgets/src/kitemwidget.cpp
+@@ -22,27 +22,26 @@
+ 
+ #include "kitemwidget.h"
+ #include "klistwidget.h"
+-#include <QListWidgetItem>
+ #include <QDebug>
++#include <QListWidgetItem>
+ #include <QPainter>
+ 
+-namespace  kdk
++namespace kdk
+ {
+ 
+-
+-class KItemWidgetPrivate : public QObject,public ThemeController
++class KItemWidgetPrivate : public QObject, public ThemeController
+ {
+     Q_OBJECT
+     Q_DECLARE_PUBLIC(KItemWidget)
+ 
+ public:
+-    KItemWidgetPrivate(KItemWidget* parent);
+-
++    KItemWidgetPrivate(KItemWidget *parent);
+ 
+ protected:
+     void changeTheme();
++
+ private:
+-    KItemWidget* q_ptr;
++    KItemWidget *q_ptr;
+     QIcon m_icon;
+     QString m_maintext;
+     QString m_sectext;
+@@ -50,47 +49,41 @@ private:
+     QPixmap pixmap;
+     int x;
+     int y;
+-    KItemWidget* m_ltem;
++    KItemWidget *m_ltem;
+     bool flag = false;
+-
+ };
+ 
+-KItemWidgetPrivate::KItemWidgetPrivate (KItemWidget* parent):q_ptr(parent)
++KItemWidgetPrivate::KItemWidgetPrivate(KItemWidget *parent)
++    : q_ptr(parent)
+ {
+     Q_Q(KItemWidget);
+-   setParent(parent);
+-    m_iconsize=QSize(35,35);
++    setParent(parent);
++    m_iconsize = QSize(35, 35);
+     x = m_iconsize.width();
+     y = m_iconsize.height();
+     changeTheme();
+ 
+-    connect(m_gsetting,&QGSettings::changed,this,&KItemWidgetPrivate::changeTheme);
+-
++    connect(m_gsetting, &QGSettings::changed, this, &KItemWidgetPrivate::changeTheme);
+ }
+ 
+-
+-
+ void KItemWidgetPrivate::changeTheme()
+ {
+     Q_Q(KItemWidget);
+     initThemeStyle();
+-
+ }
+ 
+-
+-
+-KItemWidget::KItemWidget(const QIcon &Myicon, QString MmainText, QString MsecText, QWidget *parent):QWidget(parent),d_ptr(new KItemWidgetPrivate(this))
++KItemWidget::KItemWidget(const QIcon &Myicon, QString MmainText, QString MsecText, QWidget *parent)
++    : QWidget(parent)
++    , d_ptr(new KItemWidgetPrivate(this))
+ {
+     Q_D(KItemWidget);
+-    setMinimumSize(800,800);
++    setMinimumSize(800, 800);
+ 
+-    d->pixmap=Myicon.pixmap(QSize(d->m_iconsize));
++    d->pixmap = Myicon.pixmap(QSize(d->m_iconsize));
+ 
++    d->m_maintext = MmainText;
+ 
+-
+-    d->m_maintext=MmainText;
+-
+-    d->m_sectext=MsecText;
++    d->m_sectext = MsecText;
+ }
+ 
+ void KItemWidget::SetInverse()
+@@ -107,68 +100,51 @@ void KItemWidget::CancelInverse()
+     update();
+ }
+ 
+-
+ void KItemWidget::SetIconSize(QSize size)
+ {
+     Q_D(KItemWidget);
+-    d->m_iconsize=size; 
++    d->m_iconsize = size;
+     d->x = d->m_iconsize.width();
+     d->y = d->m_iconsize.height();
+     update();
+ }
+ 
+-
+ void KItemWidget::paintEvent(QPaintEvent *event)
+ {
+-    Q_D(KItemWidget);    
+-
+-
++    Q_D(KItemWidget);
+ 
+     QPainter painter(this);
+ 
+-    painter.drawPixmap(8,10,d->x,d->y,d->pixmap); //画图片
+-
++    painter.drawPixmap(8, 10, d->x, d->y, d->pixmap); // 画图片
+ 
+-
+-    QFont font=painter.font();
+-    font.setPointSize(10);//设置字体
++    QFont font = painter.font();
++    font.setPointSize(10); // 设置字体
+     painter.setFont(font);
+-    if(ThemeController::themeMode()==LightTheme) //判断主题
++    if (ThemeController::themeMode() == LightTheme) // 判断主题
+     {
+-        if(d->flag)
+-        {
+-            painter.setPen(QColor(255,255,255)); //白色
+-            painter.drawText(QRect(52,10,1000,16),d->m_maintext);//画文本
+-        }
+-        else
+-        {
+-            painter.setPen(QColor(54,54,54));//黑色
+-            painter.drawText(QRect(52,10,1000,16),d->m_maintext);//画文本
++        if (d->flag) {
++            painter.setPen(QColor(255, 255, 255)); // 白色
++            painter.drawText(QRect(52, 10, 1000, 16), d->m_maintext); // 画文本
++        } else {
++            painter.setPen(QColor(54, 54, 54)); // 黑色
++            painter.drawText(QRect(52, 10, 1000, 16), d->m_maintext); // 画文本
+         }
+-        painter.setPen(QColor(150,150,150));//褐色
+-        painter.drawText(QRect(52,28,1000,16),d->m_sectext);
++        painter.setPen(QColor(150, 150, 150)); // 褐色
++        painter.drawText(QRect(52, 28, 1000, 16), d->m_sectext);
++    } else if (ThemeController::themeMode() == DarkTheme) {
++        painter.setPen(QColor(255, 255, 255)); // 白色
++        painter.drawText(QRect(52, 10, 1000, 16), d->m_maintext); // 画文本
++
++        painter.setPen(QColor(150, 150, 150)); // 褐色
++        painter.drawText(QRect(52, 28, 1000, 16), d->m_sectext);
+     }
+-    else if(ThemeController::themeMode() == DarkTheme)
+-    {
+-        painter.setPen(QColor(255,255,255)); //白色
+-        painter.drawText(QRect(52,10,1000,16),d->m_maintext);//画文本
+-
+-        painter.setPen(QColor(150,150,150));//褐色
+-        painter.drawText(QRect(52,28,1000,16),d->m_sectext);
+-    }
+-
+ 
+     painter.setRenderHint(QPainter::Antialiasing);
+     /* 尽可能消除文本锯齿边缘 */
+     painter.setRenderHint(QPainter::TextAntialiasing);
+ 
+-    this->setContentsMargins(8,10,10,5);//边距
+-
+-
++    this->setContentsMargins(8, 10, 10, 5); // 边距
+ }
+-
+-
+-
+ }
+ #include "kitemwidget.moc"
+ #include "moc_kitemwidget.cpp"
+diff --git a/kysdk-qtwidgets/src/kitemwidget.h b/kysdk-qtwidgets/src/kitemwidget.h
+index 7e0521b..e32c59d 100644
+--- a/kysdk-qtwidgets/src/kitemwidget.h
++++ b/kysdk-qtwidgets/src/kitemwidget.h
+@@ -23,59 +23,56 @@
+ #ifndef KITEMWIDGET_H
+ #define KITEMWIDGET_H
+ 
+-#include <QWidget>
+-#include <QIcon>
+-#include <QPainter>
+-#include <QString>
+-#include <QSize>
+-#include <QPixmap>
++#include "gui_g.h"
++#include "themeController.h"
+ #include <QFont>
+ #include <QHBoxLayout>
+-#include <QVBoxLayout>
++#include <QIcon>
+ #include <QListWidget>
+ #include <QListWidgetItem>
+-#include "gui_g.h"
+-#include "themeController.h"
++#include <QPainter>
++#include <QPixmap>
++#include <QSize>
++#include <QString>
++#include <QVBoxLayout>
++#include <QWidget>
+ 
+ namespace kdk
+- {
+-
++{
+ 
+ class KItemWidgetPrivate;
+ 
+-class GUI_EXPORT KItemWidget :public QWidget
++class GUI_EXPORT KItemWidget : public QWidget
+ {
+     Q_OBJECT
+ public:
+-
+     /*
+      * Myicon 需要显示的图片
+      * MmainText 需要写入的miantext
+      * MsecText  需要写入的sectext
+-    */
+-    KItemWidget(const QIcon &Myicon,QString MmainText,QString MsecText,QWidget *parent);
++     */
++    KItemWidget(const QIcon &Myicon, QString MmainText, QString MsecText, QWidget *parent);
+     /*
+      * 设置反白效果
+-    */
++     */
+     void SetInverse();
+ 
+     /*
+      * 取消反白效果
+-    */
++     */
+     void CancelInverse();
+     /*
+      * 设置图片大小
+-    */
++     */
+     void SetIconSize(QSize size);
+ 
+-
+ protected:
+     void paintEvent(QPaintEvent *event);
+     /*void mousePressEvent(QMouseEvent *event);*/
+ 
+ private:
+     Q_DECLARE_PRIVATE(KItemWidget);
+-    KItemWidgetPrivate* const d_ptr;
++    KItemWidgetPrivate *const d_ptr;
+ };
+ 
+ }
+diff --git a/kysdk-qtwidgets/src/klabel.cpp b/kysdk-qtwidgets/src/klabel.cpp
+index a85ca1a..488d3f7 100644
+--- a/kysdk-qtwidgets/src/klabel.cpp
++++ b/kysdk-qtwidgets/src/klabel.cpp
+@@ -22,24 +22,26 @@
+ 
+ #include "klabel.h"
+ #include "themeController.h"
++#include <QApplication>
++#include <QDebug>
+ #include <QPainter>
+-#include <QRect>
+ #include <QPainterPath>
+-#include <QDebug>
+-#include <QApplication>
++#include <QRect>
+ 
+-namespace kdk {
++namespace kdk
++{
+ 
+ static const int spacing = 4;
+-class KLabelPrivate :public QObject, public ThemeController
++class KLabelPrivate : public QObject, public ThemeController
+ {
+     Q_OBJECT
+     Q_DECLARE_PUBLIC(KLabel)
+ public:
+-    KLabelPrivate(KLabel*parent);
++    KLabelPrivate(KLabel *parent);
+ 
+ protected:
+     void changeTheme();
++
+ private:
+     KLabel *q_ptr;
+     KLabelType m_labelType;
+@@ -59,16 +61,16 @@ private:
+     QColor m_fontColor;
+ };
+ 
+-KLabel::KLabel(QWidget *parent):
+-    QLabel(parent),
+-    d_ptr(new KLabelPrivate(this))
++KLabel::KLabel(QWidget *parent)
++    : QLabel(parent)
++    , d_ptr(new KLabelPrivate(this))
+ {
+     Q_D(KLabel);
+     int pointSize = QApplication::font().pointSize();
+-    connect(d->m_gsetting,&QGSettings::changed,this,[=]{
++    connect(d->m_gsetting, &QGSettings::changed, this, [=] {
+         d->changeTheme();
+         int now = this->font().pointSize();
+-        if(d->diffPointSize == 0)
++        if (d->diffPointSize == 0)
+             d->diffPointSize = now - pointSize;
+         QFont font = this->font();
+         font.setPointSize(d->diffPointSize + QApplication::font().pointSize());
+@@ -85,7 +87,7 @@ void KLabel::setLabelType(KLabelType type)
+ void KLabel::setDataHightColor(bool flag)
+ {
+     Q_D(KLabel);
+-    d->m_dataHightColorFlag =flag;
++    d->m_dataHightColorFlag = flag;
+ }
+ 
+ void KLabel::setPixmap(const QPixmap &pixmap)
+@@ -115,7 +117,7 @@ QString KLabel::text()
+ void KLabel::setBackgroundColor(bool flag, QColor color)
+ {
+     Q_D(KLabel);
+-    if(d->m_isHighlightBackgroundFlag)
++    if (d->m_isHighlightBackgroundFlag)
+         d->m_isHighlightBackgroundFlag = false;
+     d->m_isBackgroundFlag = flag;
+     d->m_backgroundColor = color;
+@@ -125,7 +127,7 @@ void KLabel::setBackgroundColor(bool flag, QColor color)
+ void KLabel::setHighlightBackground(bool flag)
+ {
+     Q_D(KLabel);
+-    if(d->m_isBackgroundFlag)
++    if (d->m_isBackgroundFlag)
+         d->m_isBackgroundFlag = false;
+     d->m_isHighlightBackgroundFlag = flag;
+     update();
+@@ -152,13 +154,13 @@ void KLabel::setBorderRadius(int radius)
+ void KLabel::setWordWrap(bool flag)
+ {
+     Q_D(KLabel);
+-    d->m_wordWrap =flag;
++    d->m_wordWrap = flag;
+ }
+ 
+ bool KLabel::wordWrap()
+ {
+     Q_D(KLabel);
+-    return d->m_wordWrap ;
++    return d->m_wordWrap;
+ }
+ 
+ void KLabel::setFontColor(QColor color)
+@@ -176,47 +178,44 @@ void KLabel::paintEvent(QPaintEvent *event)
+     painter.setRenderHint(QPainter::Antialiasing);
+     painter.setRenderHint(QPainter::HighQualityAntialiasing);
+     QColor bkgColor;
+-    QRect drawRect =rect();
++    QRect drawRect = rect();
+     QRect iconRect;
+     QRect textRect;
+ 
+     painter.setPen(Qt::NoPen);
+     QString str = text();
+ 
+-    //绘制背景
++    // 绘制背景
+     QPainterPath path;
+-    path.moveTo(drawRect.topRight() - QPoint(d->m_topRightRadius , 0) ); //右上
+-    path.lineTo(drawRect.topLeft() + QPointF(d->m_topLeftRadius , 0)); //上方线
+-    path.quadTo(drawRect.topLeft(), drawRect.topLeft() + QPointF(0 , d->m_topLeftRadius)); //圆角
+-    path.lineTo(drawRect.bottomLeft() +  QPointF(0,- d->m_bottomLeftRadius)); //左方线
+-    path.quadTo(drawRect.bottomLeft(), drawRect.bottomLeft() + QPointF(d->m_bottomLeftRadius , 0));//圆角
+-    path.lineTo(drawRect.bottomRight() - QPointF(d->m_bottomRightRadius , 0));//下方线
+-    path.quadTo(drawRect.bottomRight(), drawRect.bottomRight() + QPointF(0, - d->m_bottomRightRadius));//圆角
+-    path.lineTo(drawRect.topRight() + QPointF(0, d->m_topRightRadius));//右方线
+-    path.quadTo(drawRect.topRight() , drawRect.topRight() - QPointF(d->m_topRightRadius, 0)); // 圆角
++    path.moveTo(drawRect.topRight() - QPoint(d->m_topRightRadius, 0)); // 右上
++    path.lineTo(drawRect.topLeft() + QPointF(d->m_topLeftRadius, 0)); // 上方线
++    path.quadTo(drawRect.topLeft(), drawRect.topLeft() + QPointF(0, d->m_topLeftRadius)); // 圆角
++    path.lineTo(drawRect.bottomLeft() + QPointF(0, -d->m_bottomLeftRadius)); // 左方线
++    path.quadTo(drawRect.bottomLeft(), drawRect.bottomLeft() + QPointF(d->m_bottomLeftRadius, 0)); // 圆角
++    path.lineTo(drawRect.bottomRight() - QPointF(d->m_bottomRightRadius, 0)); // 下方线
++    path.quadTo(drawRect.bottomRight(), drawRect.bottomRight() + QPointF(0, -d->m_bottomRightRadius)); // 圆角
++    path.lineTo(drawRect.topRight() + QPointF(0, d->m_topRightRadius)); // 右方线
++    path.quadTo(drawRect.topRight(), drawRect.topRight() - QPointF(d->m_topRightRadius, 0)); // 圆角
+ 
+     switch (d->m_labelType) {
+     case DataType:
+-//        bkgColor = palette().highlight().color();
++        //        bkgColor = palette().highlight().color();
+         bkgColor = ThemeController::getPaletteColorFromDT("highlight");
+         bkgColor.setAlphaF(0.15);
+-        if(d->m_isBackgroundFlag)
+-        {
++        if (d->m_isBackgroundFlag) {
+             painter.setBrush(d->m_backgroundColor);
+             painter.setPen(Qt::NoPen);
+-        }
+-        else
+-        {
++        } else {
+             painter.setBrush(bkgColor);
+             painter.setPen(Qt::NoPen);
+         }
+         painter.drawPath(path);
+         break;
+     case NormalType:
+-        if(d->m_isBackgroundFlag)
++        if (d->m_isBackgroundFlag)
+             painter.setBrush(d->m_backgroundColor);
+-        else if(d->m_isHighlightBackgroundFlag)
+-//            painter.setBrush(palette().highlight().color());
++        else if (d->m_isHighlightBackgroundFlag)
++            //            painter.setBrush(palette().highlight().color());
+             painter.setBrush(ThemeController::getPaletteColorFromDT("highlight"));
+         else
+             painter.setBrush(Qt::NoBrush);
+@@ -224,13 +223,13 @@ void KLabel::paintEvent(QPaintEvent *event)
+         painter.drawPath(path);
+         break;
+     case CircleType:
+-        if(d->m_isBackgroundFlag)
++        if (d->m_isBackgroundFlag)
+             painter.setBrush(d->m_backgroundColor);
+-        else if(d->m_isHighlightBackgroundFlag)
+-//                painter.setBrush(palette().highlight().color());
++        else if (d->m_isHighlightBackgroundFlag)
++            //                painter.setBrush(palette().highlight().color());
+             painter.setBrush(ThemeController::getPaletteColorFromDT("highlight"));
+         else
+-//            painter.setBrush(palette().button().color());
++            //            painter.setBrush(palette().button().color());
+             painter.setBrush(ThemeController::getPaletteColorFromDT("button"));
+         painter.setPen(Qt::NoPen);
+         painter.drawEllipse(rect());
+@@ -239,195 +238,161 @@ void KLabel::paintEvent(QPaintEvent *event)
+         break;
+     }
+ 
+-    //绘制图标和文字
+-    if(!wordWrap())
+-    {
+-        int drawLength ;
+-        if(!text().isEmpty() && !d->m_pixmap.isNull())
+-            drawLength = d->m_pixmap.width() + spacing +fontMetrics().width(text());
+-        else if(!text().isEmpty() && d->m_pixmap.isNull())
++    // 绘制图标和文字
++    if (!wordWrap()) {
++        int drawLength;
++        if (!text().isEmpty() && !d->m_pixmap.isNull())
++            drawLength = d->m_pixmap.width() + spacing + fontMetrics().width(text());
++        else if (!text().isEmpty() && d->m_pixmap.isNull())
+             drawLength = fontMetrics().width(text());
+-        else if(text().isEmpty() && !d->m_pixmap.isNull())
++        else if (text().isEmpty() && !d->m_pixmap.isNull())
+             drawLength = d->m_pixmap.width();
+ 
+-        if(!text().isEmpty() && !d->m_pixmap.isNull())
+-        {
++        if (!text().isEmpty() && !d->m_pixmap.isNull()) {
+ 
+-            int drawLength = d->m_pixmap.width() + spacing +fontMetrics().width(text());
+-            if(drawRect.width() > drawLength )
+-            {
+-                iconRect = QRect(/*drawRect.center().x() - drawLength/2*/drawRect.x(),
+-                                 drawRect.center().y() - d->m_pixmap.height()/2,
++            int drawLength = d->m_pixmap.width() + spacing + fontMetrics().width(text());
++            if (drawRect.width() > drawLength) {
++                iconRect = QRect(/*drawRect.center().x() - drawLength/2*/ drawRect.x(),
++                                 drawRect.center().y() - d->m_pixmap.height() / 2,
+                                  d->m_pixmap.width(),
+                                  d->m_pixmap.height());
+                 textRect = QRect(iconRect.right() + spacing,
+-                                 drawRect.center().y() - fontMetrics().height()/2,
++                                 drawRect.center().y() - fontMetrics().height() / 2,
+                                  fontMetrics().width(text()) + 1,
+                                  fontMetrics().height());
+                 setToolTip("");
+ 
+-            }
+-            else
+-            {
+-                iconRect = QRect(/*drawRect.x()*/drawRect.x(),
+-                                 drawRect.center().y() - d->m_pixmap.height()/2,
++            } else {
++                iconRect = QRect(/*drawRect.x()*/ drawRect.x(),
++                                 drawRect.center().y() - d->m_pixmap.height() / 2,
+                                  d->m_pixmap.width(),
+                                  d->m_pixmap.height());
+                 textRect = QRect(iconRect.right() + spacing,
+-                                 drawRect.center().y() - fontMetrics().height()/2,
++                                 drawRect.center().y() - fontMetrics().height() / 2,
+                                  drawRect.width() - spacing - iconRect.width(),
+                                  fontMetrics().height());
+                 setToolTip(str);
+-                str = fontMetrics().elidedText(str,Qt::ElideRight,textRect.width());
++                str = fontMetrics().elidedText(str, Qt::ElideRight, textRect.width());
+             }
+-        }
+-        else
+-        {
+-            if(text().isEmpty())
+-            {
++        } else {
++            if (text().isEmpty()) {
+                 iconRect = QRect(drawRect.x(),
+-                                 drawRect.center().y() - d->m_pixmap.height()/2,
++                                 drawRect.center().y() - d->m_pixmap.height() / 2,
+                                  d->m_pixmap.width(),
+                                  d->m_pixmap.height());
+-            }
+-            else
+-            {
+-                int drawLength =fontMetrics().width(text());
+-                if(drawRect.width() > drawLength )
+-                {
+-                    textRect = QRect(/*drawRect.center().x() - drawLength/2*/drawRect.x(),
+-                                     drawRect.center().y() - fontMetrics().height()/2,
++            } else {
++                int drawLength = fontMetrics().width(text());
++                if (drawRect.width() > drawLength) {
++                    textRect = QRect(/*drawRect.center().x() - drawLength/2*/ drawRect.x(),
++                                     drawRect.center().y() - fontMetrics().height() / 2,
+                                      fontMetrics().width(text()) + 2,
+                                      fontMetrics().height());
+                     setToolTip("");
+-                }
+-                else
+-                {
++                } else {
+                     textRect = QRect(drawRect.x(),
+-                                     drawRect.center().y() - fontMetrics().height()/2,
++                                     drawRect.center().y() - fontMetrics().height() / 2,
+                                      drawRect.width(),
+                                      fontMetrics().height());
+                     setToolTip(str);
+-                    str = fontMetrics().elidedText(str,Qt::ElideRight,textRect.width());
++                    str = fontMetrics().elidedText(str, Qt::ElideRight, textRect.width());
+                 }
+             }
+         }
+ 
+-        if(d->m_dataHightColorFlag)
+-        {
+-//            d->m_pixmap = ThemeController::drawColoredPixmap(d->m_pixmap,palette().highlight().color());
+-            d->m_pixmap = ThemeController::drawColoredPixmap(d->m_pixmap,ThemeController::getPaletteColorFromDT("highlight"));
+-            if(d->m_isFontColor)
++        if (d->m_dataHightColorFlag) {
++            //            d->m_pixmap = ThemeController::drawColoredPixmap(d->m_pixmap,palette().highlight().color());
++            d->m_pixmap = ThemeController::drawColoredPixmap(d->m_pixmap, ThemeController::getPaletteColorFromDT("highlight"));
++            if (d->m_isFontColor)
+                 painter.setPen(d->m_fontColor);
+             else
+-//                painter.setPen(palette().highlight().color());
++                //                painter.setPen(palette().highlight().color());
+                 painter.setPen(ThemeController::getPaletteColorFromDT("highlight"));
+-        }
+-        else if(d->m_isBackgroundFlag || d->m_isHighlightBackgroundFlag)
+-        {
++        } else if (d->m_isBackgroundFlag || d->m_isHighlightBackgroundFlag) {
+             d->m_pixmap = ThemeController::drawSymbolicColoredPixmap(d->m_pixmap);
+-            if(d->m_isFontColor)
++            if (d->m_isFontColor)
+                 painter.setPen(d->m_fontColor);
+             else
+-//                painter.setPen(palette().windowText().color());
++                //                painter.setPen(palette().windowText().color());
+                 painter.setPen(ThemeController::getPaletteColorFromDT("windowtext"));
+-        }
+-        else
+-        {
+-            if(d->m_isFontColor)
++        } else {
++            if (d->m_isFontColor)
+                 painter.setPen(d->m_fontColor);
+             else
+-//                painter.setPen(palette().windowText().color());
++                //                painter.setPen(palette().windowText().color());
+                 painter.setPen(ThemeController::getPaletteColorFromDT("windowtext"));
+-            if(ThemeController::isPixmapPureColor(d->m_pixmap))
+-            {
+-                if(ThemeController::themeMode() == DarkTheme)
+-                    d->m_pixmap = ThemeController::drawColoredPixmap(d->m_pixmap,Qt::white);
++            if (ThemeController::isPixmapPureColor(d->m_pixmap)) {
++                if (ThemeController::themeMode() == DarkTheme)
++                    d->m_pixmap = ThemeController::drawColoredPixmap(d->m_pixmap, Qt::white);
+                 else
+-//                    d->m_pixmap = ThemeController::drawColoredPixmap(d->m_pixmap,palette().windowText().color());
+-                    d->m_pixmap = ThemeController::drawColoredPixmap(d->m_pixmap,ThemeController::getPaletteColorFromDT("windowtext"));
++                    //                    d->m_pixmap = ThemeController::drawColoredPixmap(d->m_pixmap,palette().windowText().color());
++                    d->m_pixmap = ThemeController::drawColoredPixmap(d->m_pixmap, ThemeController::getPaletteColorFromDT("windowtext"));
+             }
+         }
+ 
+-        if(alignment() == Qt::AlignCenter)
+-        {
+-            if(!text().isEmpty() && !d->m_pixmap.isNull())
+-            {
+-                iconRect.moveLeft(drawRect.center().x() - drawLength/2);
+-                textRect.moveLeft(iconRect.right()  + spacing);
+-            }
+-            else
+-            {
+-                if(text().isEmpty())
+-                    iconRect.moveLeft(drawRect.center().x() - drawLength/2);
++        if (alignment() == Qt::AlignCenter) {
++            if (!text().isEmpty() && !d->m_pixmap.isNull()) {
++                iconRect.moveLeft(drawRect.center().x() - drawLength / 2);
++                textRect.moveLeft(iconRect.right() + spacing);
++            } else {
++                if (text().isEmpty())
++                    iconRect.moveLeft(drawRect.center().x() - drawLength / 2);
+                 else
+-                    textRect.moveLeft(drawRect.center().x() - drawLength/2);
++                    textRect.moveLeft(drawRect.center().x() - drawLength / 2);
+             }
+         }
+-        painter.drawText(textRect,str);
+-        painter.drawPixmap(iconRect,d->m_pixmap);
+-    }
+-    else
+-    {
+-//        QString text = this->text();
++        painter.drawText(textRect, str);
++        painter.drawPixmap(iconRect, d->m_pixmap);
++    } else {
++        //        QString text = this->text();
+         QFontMetrics metrics(this->font());
+ 
+         int lineHeight = metrics.height();
+         int xPos = drawRect.left(); // 起始x位置
+         int yPos = lineHeight; // 起始y位置
+-        while (!str.isEmpty())
+-        {
++        while (!str.isEmpty()) {
+             QString line;
+             int widthUsed = 0;
+-            if(rect().height() > (yPos + lineHeight))
+-            {
++            if (rect().height() > (yPos + lineHeight)) {
+                 QChar ch;
+-                for (int i = 0; i < str.length(); ++i)
+-                {
++                for (int i = 0; i < str.length(); ++i) {
+                     ch = str[i];
+                     int charWidth = metrics.horizontalAdvance(ch);
+-                    if(ch == '\n')
+-                    {
++                    if (ch == '\n') {
+                         str.remove(ch);
+                         break;
+                     }
+-                    if (widthUsed + charWidth > this->width() )
+-                    {
++                    if (widthUsed + charWidth > this->width()) {
+                         break; // 当前行已满,开始新行
+                     }
+ 
+                     line += ch;
+                     widthUsed += charWidth;
+                 }
+-                if(d->m_dataHightColorFlag)
+-//                    painter.setPen(palette().highlight().color());
++                if (d->m_dataHightColorFlag)
++                    //                    painter.setPen(palette().highlight().color());
+                     painter.setPen(ThemeController::getPaletteColorFromDT("highlight"));
+-                else
+-                {
+-                    if(d->m_isFontColor)
++                else {
++                    if (d->m_isFontColor)
+                         painter.setPen(d->m_fontColor);
+                     else
+-//                        painter.setPen(palette().windowText().color());
++                        //                        painter.setPen(palette().windowText().color());
+                         painter.setPen(ThemeController::getPaletteColorFromDT("windowtext"));
+                 }
+-                painter.drawText(xPos,yPos,line);
++                painter.drawText(xPos, yPos, line);
+                 yPos += lineHeight;
+-            }
+-            else
+-            {
+-                line = fontMetrics().elidedText(str,Qt::ElideRight,rect().width());
+-                if(d->m_dataHightColorFlag)
+-//                    painter.setPen(palette().highlight().color());
++            } else {
++                line = fontMetrics().elidedText(str, Qt::ElideRight, rect().width());
++                if (d->m_dataHightColorFlag)
++                    //                    painter.setPen(palette().highlight().color());
+                     painter.setPen(ThemeController::getPaletteColorFromDT("highlight"));
+-                else
+-                {
+-                    if(d->m_isFontColor)
++                else {
++                    if (d->m_isFontColor)
+                         painter.setPen(d->m_fontColor);
+                     else
+-//                        painter.setPen(palette().windowText().color());
++                        //                        painter.setPen(palette().windowText().color());
+                         painter.setPen(ThemeController::getPaletteColorFromDT("windowtext"));
+                 }
+-                painter.drawText(xPos,yPos,line);
++                painter.drawText(xPos, yPos, line);
+                 break;
+             }
+             // 准备下一行
+@@ -449,33 +414,30 @@ QSize KLabel::sizeHint() const
+ }
+ 
+ KLabelPrivate::KLabelPrivate(KLabel *parent)
+-    :q_ptr(parent),
+-    m_isBackgroundFlag(false),
+-    m_dataHightColorFlag(false),
+-    diffPointSize(0),
+-    m_isHighlightBackgroundFlag(false),
+-    m_wordWrap(false),
+-    m_isFontColor(false)
++    : q_ptr(parent)
++    , m_isBackgroundFlag(false)
++    , m_dataHightColorFlag(false)
++    , diffPointSize(0)
++    , m_isHighlightBackgroundFlag(false)
++    , m_wordWrap(false)
++    , m_isFontColor(false)
+ {
+     Q_Q(KLabel);
+     m_labelType = NormalType;
+     int radius = ThemeController::getRadiusFromDT("kradius-normal");
+-    if(radius == -1 )
+-    {
++    if (radius == -1) {
+         m_bottomLeftRadius = 6;
+         m_bottomRightRadius = 6;
+         m_topLeftRadius = 6;
+         m_topRightRadius = 6;
+-    }
+-    else
+-    {
++    } else {
+         m_bottomLeftRadius = radius;
+         m_bottomRightRadius = radius;
+         m_topLeftRadius = radius;
+         m_topRightRadius = radius;
+     }
+ 
+-//    m_pixmap = new QPixmap();
++    //    m_pixmap = new QPixmap();
+ }
+ 
+ void KLabelPrivate::changeTheme()
+@@ -487,6 +449,5 @@ void KLabelPrivate::changeTheme()
+ 
+ }
+ 
+-
+ #include "klabel.moc"
+ #include "moc_klabel.cpp"
+diff --git a/kysdk-qtwidgets/src/klabel.h b/kysdk-qtwidgets/src/klabel.h
+index b9d7e66..3c7d977 100644
+--- a/kysdk-qtwidgets/src/klabel.h
++++ b/kysdk-qtwidgets/src/klabel.h
+@@ -23,16 +23,17 @@
+ #ifndef KLABEL_H
+ #define KLABEL_H
+ 
+-#include <QLabel>
+ #include "gui_g.h"
++#include <QLabel>
+ 
+-namespace kdk {
++namespace kdk
++{
+ 
+ /**
+  * @defgroup Label Module
+  */
+ 
+-enum KLabelType{
++enum KLabelType {
+     NormalType,
+     DataType,
+     CircleType
+@@ -44,7 +45,7 @@ class KLabelPrivate;
+  * @brief 继承qlabel
+  * @since 2.4
+  */
+-class GUI_EXPORT KLabel :public QLabel
++class GUI_EXPORT KLabel : public QLabel
+ {
+     Q_OBJECT
+ public:
+@@ -72,7 +73,7 @@ public:
+      * @brief 获取图标
+      * @return
+      */
+-    const QPixmap *	pixmap() const;
++    const QPixmap *pixmap() const;
+ 
+     /**
+      * @brief 设置文本
+@@ -92,7 +93,7 @@ public:
+      * @brief 设置背景颜色
+      * @param flag
+      */
+-    void setBackgroundColor(bool flag ,QColor color = Qt::white );
++    void setBackgroundColor(bool flag, QColor color = Qt::white);
+ 
+     /**
+      * @brief 设置是否启用背景高亮色
+@@ -108,7 +109,7 @@ public:
+      * @param topRight
+      * @param bottomRight
+      */
+-    void setBorderRadius(int bottomLeft,int topLeft,int topRight,int bottomRight);
++    void setBorderRadius(int bottomLeft, int topLeft, int topRight, int bottomRight);
+ 
+     /**
+      * @brief 设置圆角
+@@ -133,14 +134,13 @@ public:
+     void setFontColor(QColor color);
+ 
+ protected:
+-    void paintEvent(QPaintEvent* event);
++    void paintEvent(QPaintEvent *event);
+     QSize sizeHint() const;
+     void resizeEvent(QResizeEvent *event);
+ 
+ private:
+     Q_DECLARE_PRIVATE(KLabel)
+-    KLabelPrivate* const d_ptr;
+-
++    KLabelPrivate *const d_ptr;
+ };
+ 
+ }
+diff --git a/kysdk-qtwidgets/src/klineedit.cpp b/kysdk-qtwidgets/src/klineedit.cpp
+index f5aac76..04540f0 100644
+--- a/kysdk-qtwidgets/src/klineedit.cpp
++++ b/kysdk-qtwidgets/src/klineedit.cpp
+@@ -23,21 +23,23 @@
+ #include "klineedit.h"
+ #include "themeController.h"
+ #include <QBoxLayout>
+-#include <QPainter>
+-#include <QStyleOptionButton>
+-#include <QEvent>
+ #include <QDebug>
++#include <QEvent>
+ #include <QMouseEvent>
++#include <QPainter>
++#include <QStyleOptionButton>
+ 
+-namespace kdk {
++namespace kdk
++{
+ 
+-class Q_DECL_HIDDEN PushButton : public QPushButton , public ThemeController
++class Q_DECL_HIDDEN PushButton : public QPushButton, public ThemeController
+ {
+     Q_OBJECT
+ public:
+     PushButton(QWidget *parent = nullptr);
+ 
+     void setFocusStyle(bool flag);
++
+ protected:
+     void paintEvent(QPaintEvent *event);
+     void mouseReleaseEvent(QMouseEvent *event);
+@@ -51,7 +53,7 @@ private:
+     bool m_foucusStyle;
+ };
+ 
+-class Q_DECL_HIDDEN KLineEditPrivate : public QObject ,public ThemeController
++class Q_DECL_HIDDEN KLineEditPrivate : public QObject, public ThemeController
+ {
+     Q_OBJECT
+     Q_DECLARE_PUBLIC(KLineEdit)
+@@ -69,13 +71,13 @@ private:
+ };
+ 
+ KLineEdit::KLineEdit(QWidget *parent)
+-    :QLineEdit(parent)
+-    ,d_ptr(new KLineEditPrivate(this))
++    : QLineEdit(parent)
++    , d_ptr(new KLineEditPrivate(this))
+ {
+     installEventFilter(this);
+     setFocusPolicy(Qt::StrongFocus);
+     clearFocus();
+-    connect(this,&KLineEdit::returnPressed,this,&KLineEdit::clearFocus);
++    connect(this, &KLineEdit::returnPressed, this, &KLineEdit::clearFocus);
+ }
+ 
+ QPushButton *KLineEdit::pushbutton()
+@@ -94,8 +96,7 @@ void KLineEdit::resizeEvent(QResizeEvent *event)
+ bool KLineEdit::eventFilter(QObject *watched, QEvent *event)
+ {
+     Q_D(KLineEdit);
+-    if(watched == this)
+-    {
++    if (watched == this) {
+         switch (event->type()) {
+         case QEvent::FocusIn:
+             d->m_pPushButton->setFocusStyle(true);
+@@ -107,7 +108,7 @@ bool KLineEdit::eventFilter(QObject *watched, QEvent *event)
+             break;
+         }
+     }
+-    return QLineEdit::eventFilter(watched,event);
++    return QLineEdit::eventFilter(watched, event);
+ }
+ 
+ void PushButton::mouseReleaseEvent(QMouseEvent *event)
+@@ -137,16 +138,16 @@ void PushButton::enterEvent(QEvent *e)
+ }
+ 
+ KLineEditPrivate::KLineEditPrivate(KLineEdit *parent)
+-    :q_ptr(parent)
++    : q_ptr(parent)
+ {
+     Q_Q(KLineEdit);
+     m_pPushButton = new PushButton();
+-    m_pPushButton->setFixedSize(24,24);
++    m_pPushButton->setFixedSize(24, 24);
+     m_pWidget = new QWidget(q);
+     QHBoxLayout *hlayout = new QHBoxLayout(m_pWidget);
+-    hlayout->setContentsMargins(0,0,0,0);
++    hlayout->setContentsMargins(0, 0, 0, 0);
+     hlayout->addWidget(m_pPushButton);
+-    connect(m_gsetting,&QGSettings::changed,this,[=]{
++    connect(m_gsetting, &QGSettings::changed, this, [=] {
+         changeTheme();
+     });
+ }
+@@ -156,11 +157,11 @@ void KLineEditPrivate::adjustLayout()
+     Q_Q(KLineEdit);
+     int spacing = 5;
+     int width = spacing;
+-    if(!m_pPushButton->isHidden())
+-        width +=(spacing + m_pPushButton->width());
+-    m_pWidget->setFixedSize(width,q->cursorRect().height());
+-    m_pWidget->move(q->width()-m_pWidget->width(),(q->rect().height()-m_pWidget->height())/2);
+-    q->setTextMargins(0,0,m_pWidget->width(),0);
++    if (!m_pPushButton->isHidden())
++        width += (spacing + m_pPushButton->width());
++    m_pWidget->setFixedSize(width, q->cursorRect().height());
++    m_pWidget->move(q->width() - m_pWidget->width(), (q->rect().height() - m_pWidget->height()) / 2);
++    q->setTextMargins(0, 0, m_pWidget->width(), 0);
+ }
+ 
+ void KLineEditPrivate::changeTheme()
+@@ -170,7 +171,7 @@ void KLineEditPrivate::changeTheme()
+ 
+ PushButton::PushButton(QWidget *parent)
+ {
+-//    connect(m_ge)
++    //    connect(m_ge)
+     m_pressEnter = false;
+     m_mouseEnter = false;
+     m_foucusStyle = false;
+@@ -178,11 +179,11 @@ PushButton::PushButton(QWidget *parent)
+ 
+ void PushButton::setFocusStyle(bool flag)
+ {
+-    m_foucusStyle =flag;
+-    if(flag)
++    m_foucusStyle = flag;
++    if (flag)
+         setFocusPolicy(Qt::NoFocus);
+     else
+-        setFocusPolicy(Qt:: StrongFocus);
++        setFocusPolicy(Qt::StrongFocus);
+ }
+ 
+ void PushButton::paintEvent(QPaintEvent *event)
+@@ -197,42 +198,33 @@ void PushButton::paintEvent(QPaintEvent *event)
+     p.setPen(Qt::NoPen);
+     QPixmap pixmap = icon().pixmap(iconSize());
+ 
+-    if(m_foucusStyle)
+-    {
+-        if(ThemeController::themeMode() == DarkTheme)
++    if (m_foucusStyle) {
++        if (ThemeController::themeMode() == DarkTheme)
+             pixmap = ThemeController::drawSymbolicColoredPixmap(pixmap);
+-        if(m_mouseEnter || m_pressEnter)
+-        {
++        if (m_mouseEnter || m_pressEnter) {
+             pixmap = ThemeController::drawSymbolicColoredPixmap(pixmap);
+-//            p.setBrush(palette().highlight().color());
++            //            p.setBrush(palette().highlight().color());
+             p.setBrush(ThemeController::getPaletteColorFromDT("highlight"));
+-        }
+-        else
++        } else
+             p.setBrush(Qt::NoBrush);
+-    }
+-    else
+-    {
+-        if(ThemeController::themeMode() == DarkTheme)
++    } else {
++        if (ThemeController::themeMode() == DarkTheme)
+             pixmap = ThemeController::drawSymbolicColoredPixmap(pixmap);
+-        if(m_mouseEnter)
+-        {
++        if (m_mouseEnter) {
+             p.setBrush(QColor(218, 218, 218));
+-        }
+-        else if(m_pressEnter)
+-        {
++        } else if (m_pressEnter) {
+             p.setBrush(QColor(184, 184, 184));
+-        }
+-        else
+-//            p.setBrush(palette().button().color());
++        } else
++            //            p.setBrush(palette().button().color());
+             p.setBrush(ThemeController::getPaletteColorFromDT("button"));
+     }
+     int radius = ThemeController::getRadiusFromDT("kradius-normal");
+-    if(radius == -1)
++    if (radius == -1)
+         radius = 6;
+-    p.drawRoundedRect(rect(),radius,radius);
++    p.drawRoundedRect(rect(), radius, radius);
+ 
+-    QRect iconRect((rect().width()-iconSize().width())/2,(rect().height()-iconSize().height())/2,iconSize().width(),iconSize().height());
+-    p.drawPixmap(iconRect,pixmap);
++    QRect iconRect((rect().width() - iconSize().width()) / 2, (rect().height() - iconSize().height()) / 2, iconSize().width(), iconSize().height());
++    p.drawPixmap(iconRect, pixmap);
+ }
+ 
+ }
+diff --git a/kysdk-qtwidgets/src/klineedit.h b/kysdk-qtwidgets/src/klineedit.h
+index c049755..197b4c8 100644
+--- a/kysdk-qtwidgets/src/klineedit.h
++++ b/kysdk-qtwidgets/src/klineedit.h
+@@ -23,11 +23,12 @@
+ #ifndef KLINEEDIT_H
+ #define KLINEEDIT_H
+ 
++#include "gui_g.h"
+ #include <QLineEdit>
+ #include <QPushButton>
+-#include "gui_g.h"
+ 
+-namespace kdk {
++namespace kdk
++{
+ 
+ class KLineEditPrivate;
+ 
+@@ -46,11 +47,12 @@ public:
+      * @brief 获取按钮
+      * @return
+      */
+-    QPushButton* pushbutton();
++    QPushButton *pushbutton();
+ 
+ protected:
+     void resizeEvent(QResizeEvent *event);
+     bool eventFilter(QObject *watched, QEvent *event);
++
+ private:
+     Q_DECLARE_PRIVATE(KLineEdit)
+     KLineEditPrivate *const d_ptr;
+diff --git a/kysdk-qtwidgets/src/klineframe.cpp b/kysdk-qtwidgets/src/klineframe.cpp
+index c644b3c..c0cb76f 100644
+--- a/kysdk-qtwidgets/src/klineframe.cpp
++++ b/kysdk-qtwidgets/src/klineframe.cpp
+@@ -25,46 +25,49 @@
+ #include <QApplication>
+ #include <QDebug>
+ 
+-namespace kdk {
+-class KHLineFramePrivate:public QObject,public ThemeController
++namespace kdk
++{
++class KHLineFramePrivate : public QObject, public ThemeController
+ {
+     Q_OBJECT
+     Q_DECLARE_PUBLIC(KHLineFrame)
+ 
+ public:
+-    KHLineFramePrivate(KHLineFrame* parent);
++    KHLineFramePrivate(KHLineFrame *parent);
+ 
+     void changeTheme();
++
+ private:
+-    KHLineFrame* q_ptr;
++    KHLineFrame *q_ptr;
+     bool m_isFollowPalette;
+ };
+ 
+-class KVLineFramePrivate:public QObject,public ThemeController
++class KVLineFramePrivate : public QObject, public ThemeController
+ {
+     Q_OBJECT
+     Q_DECLARE_PUBLIC(KVLineFrame)
+ 
+ public:
+-    KVLineFramePrivate(KVLineFrame* parent);
++    KVLineFramePrivate(KVLineFrame *parent);
+ 
+     void changeTheme();
++
+ private:
+-    KVLineFrame* q_ptr;
++    KVLineFrame *q_ptr;
+     bool m_isFollowPalette;
+ };
+ 
+ KHLineFrame::KHLineFrame(QWidget *parent)
+-    :QFrame(parent)
+-  ,d_ptr(new KHLineFramePrivate(this))
++    : QFrame(parent)
++    , d_ptr(new KHLineFramePrivate(this))
+ {
+-    setContentsMargins(0,10,0,10);
++    setContentsMargins(0, 10, 0, 10);
+     this->setFrameShape(QFrame::Shape::HLine);
+     setLineWidth(1);
+-    QPalette palette =qApp->palette();
+-    QColor color(ThemeController::mixColor(Qt::gray,Qt::white,0.1));
++    QPalette palette = qApp->palette();
++    QColor color(ThemeController::mixColor(Qt::gray, Qt::white, 0.1));
+     color.setAlphaF(0.2);
+-    palette.setColor(QPalette::Window,color);
++    palette.setColor(QPalette::Window, color);
+     setPalette(palette);
+     setFixedHeight(1);
+     setAutoFillBackground(true);
+@@ -72,7 +75,6 @@ KHLineFrame::KHLineFrame(QWidget *parent)
+ 
+ KHLineFrame::~KHLineFrame()
+ {
+-
+ }
+ 
+ void KHLineFrame::setFollowPalette(bool flag)
+@@ -82,11 +84,11 @@ void KHLineFrame::setFollowPalette(bool flag)
+ }
+ 
+ KHLineFramePrivate::KHLineFramePrivate(KHLineFrame *parent)
+-    :q_ptr(parent)
++    : q_ptr(parent)
+ {
+     Q_Q(KHLineFrame);
+     m_isFollowPalette = true;
+-    connect(m_gsetting,&QGSettings::changed,this,[=](){
++    connect(m_gsetting, &QGSettings::changed, this, [=]() {
+         changeTheme();
+     });
+ }
+@@ -94,38 +96,34 @@ KHLineFramePrivate::KHLineFramePrivate(KHLineFrame *parent)
+ void KHLineFramePrivate::changeTheme()
+ {
+     Q_Q(KHLineFrame);
+-    if(m_isFollowPalette)
+-    {
+-        if(ThemeController::themeMode() == LightTheme)
+-        {
+-            QPalette palette =qApp->palette();
+-             QColor color(ThemeController::mixColor(Qt::gray,Qt::white,0.1));
+-             color.setAlphaF(0.2);
+-             palette.setColor(QPalette::Window,color);
+-             q->setPalette(palette);
+-        }
+-        else
+-        {
+-            QPalette palette =qApp->palette();
+-             QColor color(ThemeController::mixColor(Qt::gray,Qt::white,0.1));
+-             color.setAlphaF(0.3);
+-             palette.setColor(QPalette::Window,color);
+-             q->setPalette(palette);
++    if (m_isFollowPalette) {
++        if (ThemeController::themeMode() == LightTheme) {
++            QPalette palette = qApp->palette();
++            QColor color(ThemeController::mixColor(Qt::gray, Qt::white, 0.1));
++            color.setAlphaF(0.2);
++            palette.setColor(QPalette::Window, color);
++            q->setPalette(palette);
++        } else {
++            QPalette palette = qApp->palette();
++            QColor color(ThemeController::mixColor(Qt::gray, Qt::white, 0.1));
++            color.setAlphaF(0.3);
++            palette.setColor(QPalette::Window, color);
++            q->setPalette(palette);
+         }
+     }
+ }
+ 
+ KVLineFrame::KVLineFrame(QWidget *parent)
+-    :QFrame(parent)
+-    ,d_ptr(new KVLineFramePrivate(this))
++    : QFrame(parent)
++    , d_ptr(new KVLineFramePrivate(this))
+ {
+-    setContentsMargins(10,0,10,0);
++    setContentsMargins(10, 0, 10, 0);
+     setLineWidth(1);
+     this->setFrameShape(QFrame::Shape::VLine);
+-    QPalette palette =qApp->palette();
+-    QColor color(ThemeController::mixColor(Qt::gray,Qt::white,0.1));
++    QPalette palette = qApp->palette();
++    QColor color(ThemeController::mixColor(Qt::gray, Qt::white, 0.1));
+     color.setAlphaF(0.2);
+-    palette.setColor(QPalette::Window,color);
++    palette.setColor(QPalette::Window, color);
+     setPalette(palette);
+     setFixedWidth(1);
+     setAutoFillBackground(true);
+@@ -133,7 +131,6 @@ KVLineFrame::KVLineFrame(QWidget *parent)
+ 
+ KVLineFrame::~KVLineFrame()
+ {
+-
+ }
+ 
+ void KVLineFrame::setFollowPalette(bool flag)
+@@ -143,11 +140,11 @@ void KVLineFrame::setFollowPalette(bool flag)
+ }
+ 
+ KVLineFramePrivate::KVLineFramePrivate(KVLineFrame *parent)
+-    :q_ptr(parent)
++    : q_ptr(parent)
+ {
+     Q_Q(KVLineFrame);
+     m_isFollowPalette = true;
+-    connect(m_gsetting,&QGSettings::changed,this,[=](){
++    connect(m_gsetting, &QGSettings::changed, this, [=]() {
+         changeTheme();
+     });
+ }
+@@ -155,29 +152,24 @@ KVLineFramePrivate::KVLineFramePrivate(KVLineFrame *parent)
+ void KVLineFramePrivate::changeTheme()
+ {
+     Q_Q(KVLineFrame);
+-    if(m_isFollowPalette)
+-    {
+-        if(ThemeController::themeMode() == LightTheme)
+-        {
+-            QPalette palette =qApp->palette();
+-             QColor color(ThemeController::mixColor(Qt::gray,Qt::white,0.1));
+-             color.setAlphaF(0.2);
+-             palette.setColor(QPalette::Window,color);
+-             q->setPalette(palette);
+-        }
+-        else
+-        {
+-            QPalette palette =qApp->palette();
+-             QColor color(ThemeController::mixColor(Qt::gray,Qt::white,0.1));
+-             color.setAlphaF(0.3);
+-             palette.setColor(QPalette::Window,color);
+-             q->setPalette(palette);
++    if (m_isFollowPalette) {
++        if (ThemeController::themeMode() == LightTheme) {
++            QPalette palette = qApp->palette();
++            QColor color(ThemeController::mixColor(Qt::gray, Qt::white, 0.1));
++            color.setAlphaF(0.2);
++            palette.setColor(QPalette::Window, color);
++            q->setPalette(palette);
++        } else {
++            QPalette palette = qApp->palette();
++            QColor color(ThemeController::mixColor(Qt::gray, Qt::white, 0.1));
++            color.setAlphaF(0.3);
++            palette.setColor(QPalette::Window, color);
++            q->setPalette(palette);
+         }
+     }
+ }
+ 
+ }
+ 
+-
+ #include "klineframe.moc"
+ #include "moc_klineframe.cpp"
+diff --git a/kysdk-qtwidgets/src/klineframe.h b/kysdk-qtwidgets/src/klineframe.h
+index cff6be8..66d9bbe 100644
+--- a/kysdk-qtwidgets/src/klineframe.h
++++ b/kysdk-qtwidgets/src/klineframe.h
+@@ -23,9 +23,10 @@
+ #ifndef KLINEFRAME_H
+ #define KLINEFRAME_H
+ 
+-#include <QFrame>
+ #include "gui_g.h"
+-namespace kdk {
++#include <QFrame>
++namespace kdk
++{
+ 
+ class KHLineFramePrivate;
+ class KVLineFramePrivate;
+@@ -34,7 +35,7 @@ class GUI_EXPORT KHLineFrame : public QFrame
+ {
+     Q_OBJECT
+ public:
+-    KHLineFrame(QWidget* parent = nullptr);
++    KHLineFrame(QWidget *parent = nullptr);
+     ~KHLineFrame();
+ 
+     /**
+@@ -43,16 +44,17 @@ public:
+      * @since 2.4
+      */
+     void setFollowPalette(bool flag);
++
+ private:
+     Q_DECLARE_PRIVATE(KHLineFrame)
+-    KHLineFramePrivate* const d_ptr;
++    KHLineFramePrivate *const d_ptr;
+ };
+ 
+ class GUI_EXPORT KVLineFrame : public QFrame
+ {
+     Q_OBJECT
+ public:
+-    KVLineFrame(QWidget* parent = nullptr);
++    KVLineFrame(QWidget *parent = nullptr);
+     ~KVLineFrame();
+     /**
+      * @brief 设置是否遵循默认色板
+@@ -60,9 +62,10 @@ public:
+      * @since 2.4
+      */
+     void setFollowPalette(bool flag);
++
+ private:
+     Q_DECLARE_PRIVATE(KVLineFrame)
+-    KVLineFramePrivate* const d_ptr;
++    KVLineFramePrivate *const d_ptr;
+ };
+ 
+ }
+diff --git a/kysdk-qtwidgets/src/klistview.cpp b/kysdk-qtwidgets/src/klistview.cpp
+index 7e42eda..9f93305 100644
+--- a/kysdk-qtwidgets/src/klistview.cpp
++++ b/kysdk-qtwidgets/src/klistview.cpp
+@@ -22,31 +22,30 @@
+ 
+ #include "klistview.h"
+ #include <QDebug>
+-namespace kdk {
++namespace kdk
++{
+ 
+-class KListViewPrivate :public QObject
++class KListViewPrivate : public QObject
+ {
+     Q_OBJECT
+     Q_DECLARE_PUBLIC(KListView)
+ public:
+-    KListViewPrivate(KListView* parent);
++    KListViewPrivate(KListView *parent);
+ 
+ private:
+-    KListView* q_ptr;
++    KListView *q_ptr;
+ };
+ 
+-
+ KListViewPrivate::KListViewPrivate(KListView *parent)
+-    :q_ptr(parent)
++    : q_ptr(parent)
+ {
+     Q_Q(KListView);
+     setParent(parent);
+ }
+ 
+-
+ KListView::KListView(QWidget *parent)
+-    :QListView(parent)
+-    ,d_ptr(new KListViewPrivate(this))
++    : QListView(parent)
++    , d_ptr(new KListViewPrivate(this))
+ {
+     Q_D(KListView);
+ }
+@@ -54,11 +53,10 @@ KListView::KListView(QWidget *parent)
+ void KListView::mousePressEvent(QMouseEvent *event)
+ {
+     Q_D(KListView);
+-    QPoint p = event->pos(); //获取点击坐标
+-    QModelIndex index = indexAt(p); //点击位置是否为空
+-    if(!index.isValid())
+-    {
+-        setCurrentIndex(QModelIndex());     //实现点空白处取消选择
++    QPoint p = event->pos(); // 获取点击坐标
++    QModelIndex index = indexAt(p); // 点击位置是否为空
++    if (!index.isValid()) {
++        setCurrentIndex(QModelIndex()); // 实现点空白处取消选择
+     }
+     QListView::mousePressEvent(event);
+ }
+@@ -67,4 +65,3 @@ void KListView::mousePressEvent(QMouseEvent *event)
+ 
+ #include "klistview.moc"
+ #include "moc_klistview.cpp"
+-
+diff --git a/kysdk-qtwidgets/src/klistview.h b/kysdk-qtwidgets/src/klistview.h
+index 2a94a4c..3f4fa0d 100644
+--- a/kysdk-qtwidgets/src/klistview.h
++++ b/kysdk-qtwidgets/src/klistview.h
+@@ -26,7 +26,8 @@
+ #include <QListView>
+ #include <QMouseEvent>
+ 
+-namespace kdk {
++namespace kdk
++{
+ 
+ /**
+  * @defgroup ListViewModule
+@@ -36,17 +37,18 @@ class KListViewPrivate;
+ /**
+  * @brief 配合KListviewdelegate可以提供一个图片两行文字的显示效果,若只有一行文字,则对于 icon 居中显示 。
+  */
+-class KListView :public QListView
++class KListView : public QListView
+ {
+     Q_OBJECT
+ public:
+-    KListView(QWidget*parent);
++    KListView(QWidget *parent);
++
+ protected:
+-    void mousePressEvent ( QMouseEvent * event ) ;
++    void mousePressEvent(QMouseEvent *event);
++
+ private:
+     Q_DECLARE_PRIVATE(KListView);
+-    KListViewPrivate* const d_ptr;
+-
++    KListViewPrivate *const d_ptr;
+ };
+ }
+ #endif // KLISTVIEW_H
+diff --git a/kysdk-qtwidgets/src/klistviewdelegate.cpp b/kysdk-qtwidgets/src/klistviewdelegate.cpp
+index 179e880..e3ce25b 100644
+--- a/kysdk-qtwidgets/src/klistviewdelegate.cpp
++++ b/kysdk-qtwidgets/src/klistviewdelegate.cpp
+@@ -21,54 +21,55 @@
+  */
+ 
+ #include "klistviewdelegate.h"
+-#include <QString>
+-#include <QPainter>
+-#include <QFont>
++#include "themeController.h"
++#include <QAbstractTextDocumentLayout>
+ #include <QApplication>
++#include <QCoreApplication>
++#include <QDebug>
++#include <QFont>
+ #include <QFontMetrics>
++#include <QHBoxLayout>
+ #include <QLabel>
+-#include <QDebug>
+-#include <QTextDocument>
+-#include <QAbstractTextDocumentLayout>
+-#include <QStandardItemModel>
+-#include "themeController.h"
+-#include <QCoreApplication>
+ #include <QListView>
+-#include <QHBoxLayout>
++#include <QPainter>
+ #include <QPainterPath>
++#include <QStandardItemModel>
++#include <QString>
++#include <QTextDocument>
+ 
+ namespace kdk
+ {
+ 
+-class KListViewDelegatePrivate : public QObject,public ThemeController
++class KListViewDelegatePrivate : public QObject, public ThemeController
+ {
+     Q_OBJECT
+     Q_DECLARE_PUBLIC(KListViewDelegate)
+ public:
+-    KListViewDelegatePrivate(KListViewDelegate* parent);
++    KListViewDelegatePrivate(KListViewDelegate *parent);
+     ~KListViewDelegatePrivate();
+ 
+ private:
+-    KListViewDelegate* q_ptr;
+-    QAbstractItemView* m_listView;
+-
++    KListViewDelegate *q_ptr;
++    QAbstractItemView *m_listView;
+ };
+ 
+ KListViewDelegatePrivate::KListViewDelegatePrivate(KListViewDelegate *parent)
+-    :q_ptr(parent)
++    : q_ptr(parent)
+ {
+     Q_Q(KListViewDelegate);
+     initThemeStyle();
+-    connect(m_gsetting,&QGSettings::changed,this,[=](){initThemeStyle();});
++    connect(m_gsetting, &QGSettings::changed, this, [=]() {
++        initThemeStyle();
++    });
+ }
+ 
+ KListViewDelegatePrivate::~KListViewDelegatePrivate()
+ {
+ }
+ 
+-KListViewDelegate::KListViewDelegate(QAbstractItemView*parent)
+-    :QStyledItemDelegate(parent)
+-    ,d_ptr(new KListViewDelegatePrivate(this))
++KListViewDelegate::KListViewDelegate(QAbstractItemView *parent)
++    : QStyledItemDelegate(parent)
++    , d_ptr(new KListViewDelegatePrivate(this))
+ {
+     Q_D(KListViewDelegate);
+     d->m_listView = parent;
+@@ -76,7 +77,6 @@ KListViewDelegate::KListViewDelegate(QAbstractItemView*parent)
+ 
+ KListViewDelegate::~KListViewDelegate()
+ {
+-
+ }
+ 
+ void KListViewDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
+@@ -88,21 +88,19 @@ void KListViewDelegate::paint(QPainter *painter, const QStyleOptionViewItem &opt
+     QFontMetrics fm(font);
+     int height = fm.height();
+ 
+-    if (index.isValid())
+-    {
+-        QListView* view = dynamic_cast<QListView*>(d->m_listView);
+-        if(!view)
++    if (index.isValid()) {
++        QListView *view = dynamic_cast<QListView *>(d->m_listView);
++        if (!view)
+             return;
+-        if(view->viewMode() == QListView::ListMode)
+-        {
++        if (view->viewMode() == QListView::ListMode) {
+             QRectF rect;
+             rect.setX(option.rect.x());
+             rect.setY(option.rect.y());
+             rect.setWidth(option.rect.width());
+             rect.setHeight(option.rect.height());
+-            //QPainterPath画圆角矩形
++            // QPainterPath画圆角矩形
+             qreal radius = ThemeController::getRadiusFromDT("kradius-min");
+-            if(radius == -1)
++            if (radius == -1)
+                 radius = 4;
+             QPainterPath path;
+             path.moveTo(rect.topRight() - QPointF(radius, 0));
+@@ -115,174 +113,142 @@ void KListViewDelegate::paint(QPainter *painter, const QStyleOptionViewItem &opt
+             path.lineTo(rect.topRight() + QPointF(0, radius));
+             path.quadTo(rect.topRight(), rect.topRight() + QPointF(-radius, -0));
+ 
+-            QString mainText = index.data(Qt::DisplayRole).toString();//获取主文本和副文本
++            QString mainText = index.data(Qt::DisplayRole).toString(); // 获取主文本和副文本
+             QString subText = index.data(Qt::UserRole).toString();
+ 
+-            if(subText.isNull())
+-            {
+-                auto *model =dynamic_cast<QStandardItemModel*>(const_cast<QAbstractItemModel*>(index.model()));//获取图标
++            if (subText.isNull()) {
++                auto *model = dynamic_cast<QStandardItemModel *>(const_cast<QAbstractItemModel *>(index.model())); // 获取图标
+                 QIcon icon = model->item(index.row())->icon();
+-                QRect iconRect = QRect(rect.left()+8,rect.top()+10,d->m_listView->iconSize().width()+(height-23)*2,d->m_listView->iconSize().height()+(height-23)*2);// 绘制图标的位置
+-                QRect MainText = QRect(iconRect.right()+8,rect.top()+10+iconRect.height()/2-height/2,rect.width(),height); // 绘制文本的位置
++                QRect iconRect = QRect(rect.left() + 8, rect.top() + 10, d->m_listView->iconSize().width() + (height - 23) * 2, d->m_listView->iconSize().height() + (height - 23) * 2); // 绘制图标的位置
++                QRect MainText = QRect(iconRect.right() + 8, rect.top() + 10 + iconRect.height() / 2 - height / 2, rect.width(), height); // 绘制文本的位置
+ 
+                 painter->save();
+ 
+-                //item可选中 (单选)
++                // item可选中 (单选)
+                 QColor color;
+-                if (option.state.testFlag(QStyle::State_MouseOver)&&!(option.state.testFlag(QStyle::State_Selected)))
+-                {
+-                    if(ThemeController::themeMode() == ThemeFlag::DarkTheme)
+-                           {
+-//                                color = option.palette.windowText().color();
+-                                color = ThemeController::getPaletteColorFromDT("windowtext");
+-                                color.setAlphaF(0.25);
+-                           }
+-                           else
+-                           {
+-//                                color = option.palette.highlight().color().lighter(120);
+-                                color = ThemeController::getPaletteColorFromDT("highlight");
+-                                color.setAlphaF(0.5);
+-                           }
++                if (option.state.testFlag(QStyle::State_MouseOver) && !(option.state.testFlag(QStyle::State_Selected))) {
++                    if (ThemeController::themeMode() == ThemeFlag::DarkTheme) {
++                        //                                color = option.palette.windowText().color();
++                        color = ThemeController::getPaletteColorFromDT("windowtext");
++                        color.setAlphaF(0.25);
++                    } else {
++                        //                                color = option.palette.highlight().color().lighter(120);
++                        color = ThemeController::getPaletteColorFromDT("highlight");
++                        color.setAlphaF(0.5);
++                    }
++                    painter->setPen(QPen(Qt::NoPen));
++                    painter->setBrush(color);
++                    painter->drawPath(path);
++                } else if (option.state.testFlag(QStyle::State_Selected)) {
++                    //                        color = option.palette.highlight().color();
++                    color = ThemeController::getPaletteColorFromDT("highlight");
+                     painter->setPen(QPen(Qt::NoPen));
+                     painter->setBrush(color);
+                     painter->drawPath(path);
+                 }
+-                else if (option.state.testFlag(QStyle::State_Selected))
+-                    {
+-//                        color = option.palette.highlight().color();
+-                        color = ThemeController::getPaletteColorFromDT("highlight");
+-                        painter->setPen(QPen(Qt::NoPen));
+-                        painter->setBrush(color);
+-                        painter->drawPath(path);
+-                    }
+ 
+-                //icon.paint(painter,iconRect);
+-                QPixmap pixmap=icon.pixmap(d->m_listView->iconSize().width()+(height-23)*2,d->m_listView->iconSize().width()+(height-23)*2);
+-                painter->drawPixmap(iconRect,pixmap);
++                // icon.paint(painter,iconRect);
++                QPixmap pixmap = icon.pixmap(d->m_listView->iconSize().width() + (height - 23) * 2, d->m_listView->iconSize().width() + (height - 23) * 2);
++                painter->drawPixmap(iconRect, pixmap);
+ 
++                // 点击反白效果,画icon和text
+ 
+-                //点击反白效果,画icon和text
++                if (ThemeController::themeMode() == ThemeFlag::LightTheme) {
++                    if (option.state.testFlag(QStyle::State_Selected)) {
++                        painter->setPen(QColor(230, 230, 230));
++                        painter->drawText(MainText, mainText);
+ 
+-                if(ThemeController::themeMode() == ThemeFlag::LightTheme)
+-                {
+-                    if(option.state.testFlag(QStyle::State_Selected))
+-                    {
+-                        painter->setPen(QColor(230,230,230));
+-                        painter->drawText(MainText,mainText);
++                    } else {
+ 
++                        painter->setPen(QColor(38, 38, 38));
++                        painter->drawText(MainText, mainText);
+                     }
+-                    else
+-                    {
++                } else {
+ 
+-                        painter->setPen(QColor(38,38,38));
+-                        painter->drawText(MainText,mainText);
+-                    }
+-                }
+-                else
+-                {
+-
+-                    painter->setPen(QColor(230,230,230));
+-                    painter->drawText(MainText,mainText);
++                    painter->setPen(QColor(230, 230, 230));
++                    painter->drawText(MainText, mainText);
+                 }
+                 painter->restore();
+ 
+-
+-            }
+-            else
+-            {
+-                auto *model =dynamic_cast<QStandardItemModel*>(const_cast<QAbstractItemModel*>(index.model()));//获取图标
++            } else {
++                auto *model = dynamic_cast<QStandardItemModel *>(const_cast<QAbstractItemModel *>(index.model())); // 获取图标
+                 QIcon icon = model->item(index.row())->icon();
+-                QRect iconRect = QRect(rect.left()+8,rect.top()+10,d->m_listView->iconSize().width()+(height-23)*2,d->m_listView->iconSize().height()+(height-23)*2);// 绘制图标的位置
+-                QRect MainText = QRect(iconRect.right()+8,rect.top()+5,rect.width(),height); // 绘制两个文本的位置
+-                QRect SubText = QRect(iconRect.right()+8,rect.bottom()-5-height,rect.width(),height);
++                QRect iconRect = QRect(rect.left() + 8, rect.top() + 10, d->m_listView->iconSize().width() + (height - 23) * 2, d->m_listView->iconSize().height() + (height - 23) * 2); // 绘制图标的位置
++                QRect MainText = QRect(iconRect.right() + 8, rect.top() + 5, rect.width(), height); // 绘制两个文本的位置
++                QRect SubText = QRect(iconRect.right() + 8, rect.bottom() - 5 - height, rect.width(), height);
+ 
+                 painter->save();
+ 
+-                //item可选中 (单选)
++                // item可选中 (单选)
+                 QColor color;
+-                if (option.state.testFlag(QStyle::State_MouseOver)&&!(option.state.testFlag(QStyle::State_Selected)))
+-                {
+-                    if(ThemeController::themeMode()==ThemeFlag::DarkTheme)
+-                           {
+-//                                color = option.palette.windowText().color();
+-                                color = ThemeController::getPaletteColorFromDT("windowtext");
+-                                color.setAlphaF(0.25);
+-                           }
+-                           else
+-                           {
+-//                                color = option.palette.highlight().color().lighter(120);
+-                                color = ThemeController::getPaletteColorFromDT("highlight");
+-                                color.setAlphaF(0.5);
+-                           }
++                if (option.state.testFlag(QStyle::State_MouseOver) && !(option.state.testFlag(QStyle::State_Selected))) {
++                    if (ThemeController::themeMode() == ThemeFlag::DarkTheme) {
++                        //                                color = option.palette.windowText().color();
++                        color = ThemeController::getPaletteColorFromDT("windowtext");
++                        color.setAlphaF(0.25);
++                    } else {
++                        //                                color = option.palette.highlight().color().lighter(120);
++                        color = ThemeController::getPaletteColorFromDT("highlight");
++                        color.setAlphaF(0.5);
++                    }
++                    painter->setPen(QPen(Qt::NoPen));
++                    painter->setBrush(color);
++                    painter->drawPath(path);
++                } else if (option.state.testFlag(QStyle::State_Selected)) {
++                    //                        color = option.palette.highlight().color();
++                    color = ThemeController::getPaletteColorFromDT("highlight");
+                     painter->setPen(QPen(Qt::NoPen));
+                     painter->setBrush(color);
+                     painter->drawPath(path);
+                 }
+-                else if (option.state.testFlag(QStyle::State_Selected))
+-                    {
+-//                        color = option.palette.highlight().color();
+-                        color = ThemeController::getPaletteColorFromDT("highlight");
+-                        painter->setPen(QPen(Qt::NoPen));
+-                        painter->setBrush(color);
+-                        painter->drawPath(path);
+-                    }
+ 
+-                //icon.paint(painter,iconRect);
+-                QPixmap pixmap=icon.pixmap(QSize(d->m_listView->iconSize().width()+(height-23)*2,d->m_listView->iconSize().height()+(height-23)*2));
+-                painter->drawPixmap(iconRect,pixmap);
++                // icon.paint(painter,iconRect);
++                QPixmap pixmap = icon.pixmap(QSize(d->m_listView->iconSize().width() + (height - 23) * 2, d->m_listView->iconSize().height() + (height - 23) * 2));
++                painter->drawPixmap(iconRect, pixmap);
+ 
+-                //点击反白效果,画icon和text
+-                if(ThemeController::themeMode() == ThemeFlag::LightTheme)
+-                {
+-                    if(option.state.testFlag(QStyle::State_Selected))
+-                    {
+-                        painter->setPen(QColor(230,230,230));
+-                        painter->drawText(MainText,mainText);
++                // 点击反白效果,画icon和text
++                if (ThemeController::themeMode() == ThemeFlag::LightTheme) {
++                    if (option.state.testFlag(QStyle::State_Selected)) {
++                        painter->setPen(QColor(230, 230, 230));
++                        painter->drawText(MainText, mainText);
+ 
+-                        painter->setPen(QColor(169,169,169));
+-                        painter->drawText(SubText,subText);
+-                    }
+-                    else
+-                    {
+-                        painter->setPen(QColor(38,38,38));
+-                        painter->drawText(MainText,mainText);
++                        painter->setPen(QColor(169, 169, 169));
++                        painter->drawText(SubText, subText);
++                    } else {
++                        painter->setPen(QColor(38, 38, 38));
++                        painter->drawText(MainText, mainText);
+ 
+-                        painter->setPen(QColor(169,169,169));
+-                        painter->drawText(SubText,subText);
++                        painter->setPen(QColor(169, 169, 169));
++                        painter->drawText(SubText, subText);
+                     }
+-                }
+-                else
+-                {
+-                    painter->setPen(QColor(230,230,230));
+-                    painter->drawText(MainText,mainText);
++                } else {
++                    painter->setPen(QColor(230, 230, 230));
++                    painter->drawText(MainText, mainText);
+ 
+-                    painter->setPen(QColor(169,169,169));
+-                    painter->drawText(SubText,subText);
++                    painter->setPen(QColor(169, 169, 169));
++                    painter->drawText(SubText, subText);
+                 }
+                 painter->restore();
+             }
+-        }
+-        else if(view->viewMode() == QListView::IconMode)
+-        {
+-            QStyleOptionViewItem  styleOptionViewItem( option ); //定义
+-            initStyleOption( &styleOptionViewItem, index);  //初始化
++        } else if (view->viewMode() == QListView::IconMode) {
++            QStyleOptionViewItem styleOptionViewItem(option); // 定义
++            initStyleOption(&styleOptionViewItem, index); // 初始化
+             QStyle *pStyle = styleOptionViewItem.widget->style();
+-            pStyle->drawControl(QStyle::CE_ItemViewItem, &styleOptionViewItem, painter,  styleOptionViewItem.widget);
++            pStyle->drawControl(QStyle::CE_ItemViewItem, &styleOptionViewItem, painter, styleOptionViewItem.widget);
+         }
+     }
+-
+ }
+ 
+ QSize KListViewDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const
+ {
+     Q_D(const KListViewDelegate);
+ 
+-    QFont font; //获取系统字体大小
++    QFont font; // 获取系统字体大小
+     font = QApplication::font();
+     QFontMetrics fm(font);
+     int height = fm.height();
+ 
+-    return QSize(option.rect.width(),height*2 + 6);
++    return QSize(option.rect.width(), height * 2 + 6);
+ }
+ 
+ }
+diff --git a/kysdk-qtwidgets/src/klistviewdelegate.h b/kysdk-qtwidgets/src/klistviewdelegate.h
+index fff4aa2..e039bec 100644
+--- a/kysdk-qtwidgets/src/klistviewdelegate.h
++++ b/kysdk-qtwidgets/src/klistviewdelegate.h
+@@ -23,13 +23,14 @@
+ #ifndef KLISTVIEWDELEGATE_H
+ #define KLISTVIEWDELEGATE_H
+ 
+-#include <QStyledItemDelegate>
+-#include <QStyleOptionViewItem>
+-#include <QPixmap>
+ #include "themeController.h"
+ #include <QAbstractItemView>
++#include <QPixmap>
++#include <QStyleOptionViewItem>
++#include <QStyledItemDelegate>
+ 
+-namespace kdk {
++namespace kdk
++{
+ 
+ /**
+  * @defgroup ListViewModule
+@@ -40,19 +41,20 @@ class KListViewDelegatePrivate;
+ /**
+  * @brief 配合KListview可以提供一个图片两行文字的显示效果,若只有一行文字,则对于 icon 居中显示 。
+  */
+-class KListViewDelegate :public QStyledItemDelegate,public ThemeController
++class KListViewDelegate : public QStyledItemDelegate, public ThemeController
+ {
+     Q_OBJECT
+ public:
+-    KListViewDelegate(QAbstractItemView*parent);
++    KListViewDelegate(QAbstractItemView *parent);
+     ~KListViewDelegate();
+ 
+ protected:
+-     void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override;//重写绘制事件
+-     virtual QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const;
++    void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override; // 重写绘制事件
++    virtual QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const;
++
+ private:
+-     Q_DECLARE_PRIVATE(KListViewDelegate);
+-     KListViewDelegatePrivate* const d_ptr;
++    Q_DECLARE_PRIVATE(KListViewDelegate);
++    KListViewDelegatePrivate *const d_ptr;
+ };
+ }
+ #endif // KLISTVIEWDELEGATE_H
+diff --git a/kysdk-qtwidgets/src/klistwidget.cpp b/kysdk-qtwidgets/src/klistwidget.cpp
+index b1e6828..e100647 100644
+--- a/kysdk-qtwidgets/src/klistwidget.cpp
++++ b/kysdk-qtwidgets/src/klistwidget.cpp
+@@ -30,65 +30,54 @@ class KListWidgetPrivate : public QObject
+     Q_OBJECT
+     Q_DECLARE_PUBLIC(KListWidget)
+ public:
+-    KListWidgetPrivate(KListWidget* parent);
+-private:
+-    KListWidget* q_ptr;
+-    QListWidgetItem* item;
+-    QListWidgetItem * m_item;
++    KListWidgetPrivate(KListWidget *parent);
+ 
++private:
++    KListWidget *q_ptr;
++    QListWidgetItem *item;
++    QListWidgetItem *m_item;
+ };
+ 
+-KListWidgetPrivate::KListWidgetPrivate(KListWidget* parent):q_ptr(parent)
++KListWidgetPrivate::KListWidgetPrivate(KListWidget *parent)
++    : q_ptr(parent)
+ {
+     Q_Q(KListWidget);
+     setParent(parent);
+ }
+-KListWidget::KListWidget(QWidget* parent):d_ptr(new KListWidgetPrivate(this))
++KListWidget::KListWidget(QWidget *parent)
++    : d_ptr(new KListWidgetPrivate(this))
+ {
+     Q_D(KListWidget);
+ }
+ void KListWidget::AddItemWidget(KItemWidget *m_itemwidget)
+ {
+     Q_D(KListWidget);
+-    if(!m_itemwidget)
+-        return ;
++    if (!m_itemwidget)
++        return;
+     d->item = new QListWidgetItem(this);
+-    d->item->setSizeHint(QSize(this->width(),54));
++    d->item->setSizeHint(QSize(this->width(), 54));
+ 
++    this->setItemWidget(d->item, m_itemwidget);
+ 
+-    this->setItemWidget(d->item,m_itemwidget);
+-
+-    //建立连接
+-    connect(this,&KListWidget::itemClicked,this,[=](QListWidgetItem *current){
+-        KItemWidget* curWidget = dynamic_cast<KItemWidget*>(this->itemWidget(current));
+-        if(curWidget)
++    // 建立连接
++    connect(this, &KListWidget::itemClicked, this, [=](QListWidgetItem *current) {
++        KItemWidget *curWidget = dynamic_cast<KItemWidget *>(this->itemWidget(current));
++        if (curWidget)
+             curWidget->SetInverse();
+     });
+-    connect(this,&KListWidget::currentItemChanged,this,[=](QListWidgetItem *current, QListWidgetItem *previous){
+-        KItemWidget* curWidget = dynamic_cast<KItemWidget*>(this->itemWidget(current));
+-        KItemWidget* preWidget = dynamic_cast<KItemWidget*>(this->itemWidget(previous));
+-        if(curWidget&&!preWidget)
+-        {           
++    connect(this, &KListWidget::currentItemChanged, this, [=](QListWidgetItem *current, QListWidgetItem *previous) {
++        KItemWidget *curWidget = dynamic_cast<KItemWidget *>(this->itemWidget(current));
++        KItemWidget *preWidget = dynamic_cast<KItemWidget *>(this->itemWidget(previous));
++        if (curWidget && !preWidget) {
+             curWidget->CancelInverse();
++        } else if (curWidget) {
++            curWidget->SetInverse();
+         }
+-        else if(curWidget)
+-        {
+-             curWidget->SetInverse();
+-        }
+-        if(preWidget)
+-        {
++        if (preWidget) {
+             preWidget->CancelInverse();
+         }
+     });
+ }
+-
+-
+-
+-
+-
+-
+-
+-
+ }
+ #include "klistwidget.moc"
+ #include "moc_klistwidget.cpp"
+diff --git a/kysdk-qtwidgets/src/klistwidget.h b/kysdk-qtwidgets/src/klistwidget.h
+index e65dc61..bede6ea 100644
+--- a/kysdk-qtwidgets/src/klistwidget.h
++++ b/kysdk-qtwidgets/src/klistwidget.h
+@@ -23,37 +23,35 @@
+ #ifndef KLISTWIDGET_H
+ #define KLISTWIDGET_H
+ 
+-#include <QWidget>
++#include "gui_g.h"
+ #include "kitemwidget.h"
+ #include "themeController.h"
+-#include "gui_g.h"
+-namespace  kdk 
++#include <QWidget>
++namespace kdk
+ {
+ 
+-
+ class KListWidgetPrivate;
+ /*
+  *  一个可以显示两行文本的listwidget
+  */
+ class GUI_EXPORT KListWidget : public QListWidget
+ {
+-     Q_OBJECT
++    Q_OBJECT
+ public:
+-    KListWidget(QWidget* parent);
++    KListWidget(QWidget *parent);
+     /*
+      * 将Itemwidget插入到listwidget
+      * m_itemwidget需要插入的Itemwidget
+-    */
+-    void AddItemWidget(KItemWidget* m_itemwidget);
+-
+-    //void mousePressEvent(QMouseEvent *event);
++     */
++    void AddItemWidget(KItemWidget *m_itemwidget);
+ 
+-    //void itemClicked(QListWidgetItem * item);
++    // void mousePressEvent(QMouseEvent *event);
+ 
++    // void itemClicked(QListWidgetItem * item);
+ 
+ private:
+     Q_DECLARE_PRIVATE(KListWidget);
+-    KListWidgetPrivate* const d_ptr;
++    KListWidgetPrivate *const d_ptr;
+ };
+ }
+ #endif // KLISTWIDGET_H
+diff --git a/kysdk-qtwidgets/src/kloopplaypage.cpp b/kysdk-qtwidgets/src/kloopplaypage.cpp
+index dd97ef4..e121542 100644
+--- a/kysdk-qtwidgets/src/kloopplaypage.cpp
++++ b/kysdk-qtwidgets/src/kloopplaypage.cpp
+@@ -22,22 +22,23 @@
+ 
+ #include "kloopplaypage.h"
+ #include "themeController.h"
+-#include <QMouseEvent>
+-#include <QStackedLayout>
+ #include <QBoxLayout>
++#include <QDebug>
++#include <QMouseEvent>
+ #include <QPainter>
+-#include <QTimer>
+ #include <QScrollArea>
+ #include <QScrollBar>
+-#include <QDebug>
++#include <QStackedLayout>
++#include <QTimer>
+ 
+-namespace kdk {
++namespace kdk
++{
+ 
+ class Q_DECL_HIDDEN CircleButton : public QPushButton
+ {
+     Q_OBJECT
+ public:
+-    enum ButtonType{
++    enum ButtonType {
+         CircleType,
+         NormalType
+     };
+@@ -47,7 +48,7 @@ public:
+     void setButtonType(ButtonType type);
+ 
+ protected:
+-    void paintEvent(QPaintEvent* event);
++    void paintEvent(QPaintEvent *event);
+ 
+ private:
+     ButtonType m_type;
+@@ -64,10 +65,10 @@ Q_SIGNALS:
+ 
+ protected:
+     void mousePressEvent(QMouseEvent *event);
+-    void paintEvent(QPaintEvent * event);
++    void paintEvent(QPaintEvent *event);
+ };
+ 
+-class Q_DECL_HIDDEN KLoopPlayPagePrivate : public QObject,public ThemeController
++class Q_DECL_HIDDEN KLoopPlayPagePrivate : public QObject, public ThemeController
+ {
+     Q_OBJECT
+     Q_DECLARE_PUBLIC(KLoopPlayPage)
+@@ -77,6 +78,7 @@ public:
+     void updateWidget(int i);
+     void updateButton();
+     void updateShowPosition();
++
+ private:
+     KLoopPlayPage *q_ptr;
+     Widget *m_pWidget1;
+@@ -86,21 +88,21 @@ private:
+     QHBoxLayout *m_pWidgetLayout;
+     QHBoxLayout *m_pButtonLayout;
+     QVBoxLayout *m_pLayout;
+-    QList<QWidget*> m_WidgetList;
+-    CircleButton * m_pCircleButton;
+-    QList<CircleButton*> m_ButtonList;
+-    QScrollArea * m_pScrollArea;
++    QList<QWidget *> m_WidgetList;
++    CircleButton *m_pCircleButton;
++    QList<CircleButton *> m_ButtonList;
++    QScrollArea *m_pScrollArea;
+     int m_index;
+     int m_spacing;
+     int m_timer;
+-    QTimer* m_pTimer;
++    QTimer *m_pTimer;
+ };
+ 
+ KLoopPlayPagePrivate::KLoopPlayPagePrivate(KLoopPlayPage *parent)
+-    :q_ptr(parent)
+-    ,m_index(0)
+-    ,m_spacing(24)
+-    ,m_timer(3000)
++    : q_ptr(parent)
++    , m_index(0)
++    , m_spacing(24)
++    , m_timer(3000)
+ {
+     Q_Q(KLoopPlayPage);
+ 
+@@ -108,7 +110,7 @@ KLoopPlayPagePrivate::KLoopPlayPagePrivate(KLoopPlayPage *parent)
+     m_pLayout->setSpacing(16);
+ 
+     m_pScrollWidget = new QWidget();
+-    m_pScrollWidget->setContentsMargins(0,0,0,0);
++    m_pScrollWidget->setContentsMargins(0, 0, 0, 0);
+ 
+     m_pScrollArea = new QScrollArea(q);
+     m_pScrollArea->setFrameStyle(QFrame::NoFrame);
+@@ -128,47 +130,40 @@ KLoopPlayPagePrivate::KLoopPlayPagePrivate(KLoopPlayPage *parent)
+ 
+     m_pTimer = new QTimer(q);
+     m_pTimer->start(m_timer);
+-    connect(m_pTimer, &QTimer::timeout, this, [=]{
+-        q->setCurrentWidget(q->currentWidget()+1);
++    connect(m_pTimer, &QTimer::timeout, this, [=] {
++        q->setCurrentWidget(q->currentWidget() + 1);
+     });
+ }
+ 
+ void KLoopPlayPagePrivate::updateWidget(int i)
+ {
+     Q_Q(KLoopPlayPage);
+-    if(m_WidgetList.count() < 3 )
++    if (m_WidgetList.count() < 3)
+         return;
+ 
+     QLayoutItem *child;
+-    while ((child = m_pWidgetLayout->takeAt(0)) != 0)
+-    {
+-        //删除Stretch(弹簧)等布局
+-        if (child->spacerItem())
+-        {
++    while ((child = m_pWidgetLayout->takeAt(0)) != 0) {
++        // 删除Stretch(弹簧)等布局
++        if (child->spacerItem()) {
+             m_pWidgetLayout->removeItem(child);
+             continue;
+         }
+-        //删除布局
++        // 删除布局
+         m_pWidgetLayout->removeWidget(child->widget());
+         child->widget()->setParent(nullptr);
+         delete child;
+-        child =nullptr;
++        child = nullptr;
+     }
+ 
+     int prev;
+     int next;
+-    if(i == 0)
+-    {
+-        prev = m_WidgetList.count()-1;
++    if (i == 0) {
++        prev = m_WidgetList.count() - 1;
+         next = i + 1;
+-    }
+-    else if(i == m_WidgetList.count()-1)
+-    {
++    } else if (i == m_WidgetList.count() - 1) {
+         prev = i - 1;
+         next = 0;
+-    }
+-    else
+-    {
++    } else {
+         prev = i - 1;
+         next = i + 1;
+     }
+@@ -182,37 +177,37 @@ void KLoopPlayPagePrivate::updateWidget(int i)
+     m_pWidgetLayout->addWidget(m_pWidget2);
+     m_pWidgetLayout->addSpacing(m_spacing);
+     m_pWidgetLayout->addWidget(m_pWidget3);
+-    m_pWidgetLayout->setContentsMargins(8,8,8,18);
++    m_pWidgetLayout->setContentsMargins(8, 8, 8, 18);
+ 
+-    QHBoxLayout *w1layout= new QHBoxLayout(m_pWidget1);
+-    w1layout->setContentsMargins(0,0,0,0);
++    QHBoxLayout *w1layout = new QHBoxLayout(m_pWidget1);
++    w1layout->setContentsMargins(0, 0, 0, 0);
+     w1layout->setSpacing(0);
+     w1layout->addWidget(m_WidgetList.at(prev));
+ 
+-    QHBoxLayout *w2layout= new QHBoxLayout(m_pWidget2);
+-    w2layout->setContentsMargins(0,0,0,0);
++    QHBoxLayout *w2layout = new QHBoxLayout(m_pWidget2);
++    w2layout->setContentsMargins(0, 0, 0, 0);
+     w2layout->setSpacing(0);
+     w2layout->addWidget(m_WidgetList.at(i));
+ 
+-    QHBoxLayout *w3layout= new QHBoxLayout(m_pWidget3);
+-    w3layout->setContentsMargins(0,0,0,0);
++    QHBoxLayout *w3layout = new QHBoxLayout(m_pWidget3);
++    w3layout->setContentsMargins(0, 0, 0, 0);
+     w3layout->setSpacing(0);
+     w3layout->addWidget(m_WidgetList.at(next));
+ 
+     updateShowPosition();
+ 
+-    connect(m_pWidget1,&Widget::leftClick,q,[=]{
++    connect(m_pWidget1, &Widget::leftClick, q, [=] {
+         q->setCurrentWidget(prev);
+         m_pTimer->start(m_timer);
+-       emit q->leftClick();
++        emit q->leftClick();
+     });
+-    connect(m_pWidget2,&Widget::leftClick,q,[=]{
+-       emit q->centerClick();
++    connect(m_pWidget2, &Widget::leftClick, q, [=] {
++        emit q->centerClick();
+     });
+-    connect(m_pWidget3,&Widget::leftClick,q,[=]{
+-       q->setCurrentWidget(next);
+-       m_pTimer->start(m_timer);
+-       emit q->rightClick();
++    connect(m_pWidget3, &Widget::leftClick, q, [=] {
++        q->setCurrentWidget(next);
++        m_pTimer->start(m_timer);
++        emit q->rightClick();
+     });
+     updateButton();
+ }
+@@ -222,41 +217,35 @@ void KLoopPlayPagePrivate::updateButton()
+     Q_Q(KLoopPlayPage);
+     m_ButtonList.clear();
+     QLayoutItem *child;
+-    while ((child = m_pButtonLayout->takeAt(0)) != 0)
+-    {
+-        //删除Stretch(弹簧)等布局
+-        if (child->spacerItem())
+-        {
++    while ((child = m_pButtonLayout->takeAt(0)) != 0) {
++        // 删除Stretch(弹簧)等布局
++        if (child->spacerItem()) {
+             m_pButtonLayout->removeItem(child);
+             continue;
+         }
+-        //删除布局
++        // 删除布局
+         m_pButtonLayout->removeWidget(child->widget());
+         child->widget()->setParent(nullptr);
+         delete child;
+-        child =nullptr;
++        child = nullptr;
+     }
+     m_pButtonLayout->addStretch();
+     m_pButtonLayout->setSpacing(8);
+-    for(int i = 0;i<m_WidgetList.count();i++)
+-    {
++    for (int i = 0; i < m_WidgetList.count(); i++) {
+         CircleButton *circleButton = new CircleButton();
+         m_ButtonList.append(circleButton);
+         m_pCircleButton = new CircleButton();
+-        if(i == q->currentWidget())
+-        {
+-            m_pCircleButton->setFixedSize(12,6);
++        if (i == q->currentWidget()) {
++            m_pCircleButton->setFixedSize(12, 6);
+             m_pCircleButton->setButtonType(CircleButton::NormalType);
+-        }
+-        else
+-        {
+-            m_pCircleButton->setFixedSize(6,6);
++        } else {
++            m_pCircleButton->setFixedSize(6, 6);
+             m_pCircleButton->setButtonType(CircleButton::CircleType);
+         }
+         m_pButtonLayout->addWidget(m_pCircleButton);
+-        connect(m_pCircleButton,&CircleButton::clicked,this,[=]{
+-           q->setCurrentWidget(i);
+-           m_pTimer->start(m_timer);
++        connect(m_pCircleButton, &CircleButton::clicked, this, [=] {
++            q->setCurrentWidget(i);
++            m_pTimer->start(m_timer);
+         });
+     }
+     m_pButtonLayout->addStretch();
+@@ -273,17 +262,16 @@ void KLoopPlayPagePrivate::updateShowPosition()
+ }
+ 
+ KLoopPlayPage::KLoopPlayPage(QWidget *parent)
+-    :QWidget(parent)
+-    ,d_ptr(new KLoopPlayPagePrivate(this))
++    : QWidget(parent)
++    , d_ptr(new KLoopPlayPagePrivate(this))
+ {
+     Q_D(KLoopPlayPage);
+-
+ }
+ 
+ void KLoopPlayPage::addWidget(QWidget *widget)
+ {
+     Q_D(KLoopPlayPage);
+-    if(!d->m_WidgetList.contains(widget))
++    if (!d->m_WidgetList.contains(widget))
+         d->m_WidgetList.append(widget);
+     d->updateWidget(d->m_index);
+ }
+@@ -291,7 +279,7 @@ void KLoopPlayPage::addWidget(QWidget *widget)
+ void KLoopPlayPage::removeWidget(QWidget *widget)
+ {
+     Q_D(KLoopPlayPage);
+-    if(d->m_WidgetList.contains(widget))
++    if (d->m_WidgetList.contains(widget))
+         d->m_WidgetList.removeOne(widget);
+     d->updateWidget(d->m_index);
+ }
+@@ -299,10 +287,10 @@ void KLoopPlayPage::removeWidget(QWidget *widget)
+ void KLoopPlayPage::setCurrentWidget(int index)
+ {
+     Q_D(KLoopPlayPage);
+-    if(index >= d->m_WidgetList.count())
++    if (index >= d->m_WidgetList.count())
+         d->m_index = 0;
+-    else if(index < 0)
+-        d->m_index = d->m_WidgetList.count()-1;
++    else if (index < 0)
++        d->m_index = d->m_WidgetList.count() - 1;
+     else
+         d->m_index = index;
+     d->updateWidget(d->m_index);
+@@ -348,13 +336,11 @@ void KLoopPlayPage::showEvent(QShowEvent *event)
+ 
+ Widget::Widget(QWidget *parent)
+ {
+-
+ }
+ 
+ void Widget::mousePressEvent(QMouseEvent *event)
+ {
+-    if(event->button() == Qt::MouseButton::LeftButton)
+-    {
++    if (event->button() == Qt::MouseButton::LeftButton) {
+         emit leftClick();
+     }
+     return QWidget::mousePressEvent(event);
+@@ -396,7 +382,7 @@ void CircleButton::paintEvent(QPaintEvent *event)
+         painter.drawEllipse(rect());
+         break;
+     case ButtonType::NormalType:
+-        painter.drawRoundedRect(rect(),3,3);
++        painter.drawRoundedRect(rect(), 3, 3);
+         break;
+     default:
+         break;
+diff --git a/kysdk-qtwidgets/src/kloopplaypage.h b/kysdk-qtwidgets/src/kloopplaypage.h
+index 43bf97c..8b7b52f 100644
+--- a/kysdk-qtwidgets/src/kloopplaypage.h
++++ b/kysdk-qtwidgets/src/kloopplaypage.h
+@@ -23,10 +23,11 @@
+ #ifndef KLOOPPLAYPAGE_H
+ #define KLOOPPLAYPAGE_H
+ 
+-#include <QWidget>
+ #include "gui_g.h"
++#include <QWidget>
+ 
+-namespace kdk {
++namespace kdk
++{
+ 
+ class KLoopPlayPagePrivate;
+ 
+@@ -35,11 +36,11 @@ class KLoopPlayPagePrivate;
+  * @since 2.5
+  */
+ 
+-class GUI_EXPORT KLoopPlayPage :public QWidget
++class GUI_EXPORT KLoopPlayPage : public QWidget
+ {
+     Q_OBJECT
+ public:
+-    KLoopPlayPage(QWidget* parent = nullptr);
++    KLoopPlayPage(QWidget *parent = nullptr);
+ 
+     /**
+      * @brief 添加widget
+@@ -63,7 +64,7 @@ public:
+      * @brief 获取当前中心界面index
+      * @return
+      */
+-    int  currentWidget();
++    int currentWidget();
+ 
+     /**
+      * @brief 设置窗体间距
+@@ -84,7 +85,7 @@ Q_SIGNALS:
+ 
+ protected:
+     void resizeEvent(QResizeEvent *event);
+-    void paintEvent(QPaintEvent* event);
++    void paintEvent(QPaintEvent *event);
+     void showEvent(QShowEvent *event) override;
+ 
+ private:
+diff --git a/kysdk-qtwidgets/src/klunarcalendarinfo.cpp b/kysdk-qtwidgets/src/klunarcalendarinfo.cpp
+index 0b15f3d..bb5dd7f 100644
+--- a/kysdk-qtwidgets/src/klunarcalendarinfo.cpp
++++ b/kysdk-qtwidgets/src/klunarcalendarinfo.cpp
+@@ -1,9 +1,9 @@
+ #pragma execution_character_set("utf-8")
+-#include <QTimer>
+-#include <QSettings>
+-#include <QToolButton>
+ #include "klunarcalendarinfo.h"
+ #include "qmutex.h"
++#include <QSettings>
++#include <QTimer>
++#include <QToolButton>
+ #define year_2099
+ 
+ namespace kdk
+@@ -14,71 +14,72 @@ class KLunarCalendarInfoPrivate : public QObject
+     Q_DECLARE_PUBLIC(KLunarCalendarInfo)
+     Q_OBJECT
+ public:
+-    KLunarCalendarInfoPrivate(KLunarCalendarInfo* parent);
++    KLunarCalendarInfoPrivate(KLunarCalendarInfo *parent);
+ 
+ private:
+-    KLunarCalendarInfo* q_ptr;
+-    QList<int> lunarCalendarTable;      //农历年表
+-    QList<int> springFestival;          //春节公历日期
+-    QList<int> lunarData;               //农历每月数据
+-    QList<int> chineseTwentyFourData;   //农历二十四节气数据
+-    QList<int> monthAdd;                //公历每月前面的天数
+-
+-    QList<QString> listDayName;         //农历日期名称集合
+-    QList<QString> listMonthName;       //农历月份名称集合
+-    QList<QString> listSolarTerm;       //二十四节气名称集合
+-
+-    QList<QString> listTianGan;         //天干名称集合
+-    QList<QString> listDiZhi;           //地支名称集合
+-    QList<QString> listShuXiang;        //属相名称集合
++    KLunarCalendarInfo *q_ptr;
++    QList<int> lunarCalendarTable; // 农历年表
++    QList<int> springFestival; // 春节公历日期
++    QList<int> lunarData; // 农历每月数据
++    QList<int> chineseTwentyFourData; // 农历二十四节气数据
++    QList<int> monthAdd; // 公历每月前面的天数
++
++    QList<QString> listDayName; // 农历日期名称集合
++    QList<QString> listMonthName; // 农历月份名称集合
++    QList<QString> listSolarTerm; // 二十四节气名称集合
++
++    QList<QString> listTianGan; // 天干名称集合
++    QList<QString> listDiZhi; // 地支名称集合
++    QList<QString> listShuXiang; // 属相名称集合
+ };
+ 
+-KLunarCalendarInfoPrivate::KLunarCalendarInfoPrivate(KLunarCalendarInfo *parent) : q_ptr(parent)
++KLunarCalendarInfoPrivate::KLunarCalendarInfoPrivate(KLunarCalendarInfo *parent)
++    : q_ptr(parent)
+ {
+     Q_Q(KLunarCalendarInfo);
+-    //农历查表
+-    lunarCalendarTable << 0x04AE53 << 0x0A5748 << 0x5526BD << 0x0D2650 << 0x0D9544 << 0x46AAB9 << 0x056A4D << 0x09AD42 << 0x24AEB6 << 0x04AE4A; //1901-1910
+-    lunarCalendarTable << 0x6A4DBE << 0x0A4D52 << 0x0D2546 << 0x5D52BA << 0x0B544E << 0x0D6A43 << 0x296D37 << 0x095B4B << 0x749BC1 << 0x049754; //1911-1920
+-    lunarCalendarTable << 0x0A4B48 << 0x5B25BC << 0x06A550 << 0x06D445 << 0x4ADAB8 << 0x02B64D << 0x095742 << 0x2497B7 << 0x04974A << 0x664B3E; //1921-1930
+-    lunarCalendarTable << 0x0D4A51 << 0x0EA546 << 0x56D4BA << 0x05AD4E << 0x02B644 << 0x393738 << 0x092E4B << 0x7C96BF << 0x0C9553 << 0x0D4A48; //1931-1940
+-    lunarCalendarTable << 0x6DA53B << 0x0B554F << 0x056A45 << 0x4AADB9 << 0x025D4D << 0x092D42 << 0x2C95B6 << 0x0A954A << 0x7B4ABD << 0x06CA51; //1941-1950
+-    lunarCalendarTable << 0x0B5546 << 0x555ABB << 0x04DA4E << 0x0A5B43 << 0x352BB8 << 0x052B4C << 0x8A953F << 0x0E9552 << 0x06AA48 << 0x6AD53C; //1951-1960
+-    lunarCalendarTable << 0x0AB54F << 0x04B645 << 0x4A5739 << 0x0A574D << 0x052642 << 0x3E9335 << 0x0D9549 << 0x75AABE << 0x056A51 << 0x096D46; //1961-1970
+-    lunarCalendarTable << 0x54AEBB << 0x04AD4F << 0x0A4D43 << 0x4D26B7 << 0x0D254B << 0x8D52BF << 0x0B5452 << 0x0B6A47 << 0x696D3C << 0x095B50; //1971-1980
+-    lunarCalendarTable << 0x049B45 << 0x4A4BB9 << 0x0A4B4D << 0xAB25C2 << 0x06A554 << 0x06D449 << 0x6ADA3D << 0x0AB651 << 0x093746 << 0x5497BB; //1981-1990
+-    lunarCalendarTable << 0x04974F << 0x064B44 << 0x36A537 << 0x0EA54A << 0x86B2BF << 0x05AC53 << 0x0AB647 << 0x5936BC << 0x092E50 << 0x0C9645; //1991-2000
+-    lunarCalendarTable << 0x4D4AB8 << 0x0D4A4C << 0x0DA541 << 0x25AAB6 << 0x056A49 << 0x7AADBD << 0x025D52 << 0x092D47 << 0x5C95BA << 0x0A954E; //2001-2010
+-    lunarCalendarTable << 0x0B4A43 << 0x4B5537 << 0x0AD54A << 0x955ABF << 0x04BA53 << 0x0A5B48 << 0x652BBC << 0x052B50 << 0x0A9345 << 0x474AB9; //2011-2020
+-    lunarCalendarTable << 0x06AA4C << 0x0AD541 << 0x24DAB6 << 0x04B64A << 0x69573D << 0x0A4E51 << 0x0D2646 << 0x5E933A << 0x0D534D << 0x05AA43; //2021-2030
+-    lunarCalendarTable << 0x36B537 << 0x096D4B << 0xB4AEBF << 0x04AD53 << 0x0A4D48 << 0x6D25BC << 0x0D254F << 0x0D5244 << 0x5DAA38 << 0x0B5A4C; //2031-2040
+-    lunarCalendarTable << 0x056D41 << 0x24ADB6 << 0x049B4A << 0x7A4BBE << 0x0A4B51 << 0x0AA546 << 0x5B52BA << 0x06D24E << 0x0ADA42 << 0x355B37; //2041-2050
+-    lunarCalendarTable << 0x09374B << 0x8497C1 << 0x049753 << 0x064B48 << 0x66A53C << 0x0EA54F << 0x06B244 << 0x4AB638 << 0x0AAE4C << 0x092E42; //2051-2060
+-    lunarCalendarTable << 0x3C9735 << 0x0C9649 << 0x7D4ABD << 0x0D4A51 << 0x0DA545 << 0x55AABA << 0x056A4E << 0x0A6D43 << 0x452EB7 << 0x052D4B; //2061-2070
+-    lunarCalendarTable << 0x8A95BF << 0x0A9553 << 0x0B4A47 << 0x6B553B << 0x0AD54F << 0x055A45 << 0x4A5D38 << 0x0A5B4C << 0x052B42 << 0x3A93B6; //2071-2080
+-    lunarCalendarTable << 0x069349 << 0x7729BD << 0x06AA51 << 0x0AD546 << 0x54DABA << 0x04B64E << 0x0A5743 << 0x452738 << 0x0D264A << 0x8E933E; //2081-2090
+-    lunarCalendarTable << 0x0D5252 << 0x0DAA47 << 0x66B53B << 0x056D4F << 0x04AE45 << 0x4A4EB9 << 0x0A4D4C << 0x0D1541 << 0x2D92B5;             //2091-2099
+-
+-    //每年春节对应的公历日期
+-    springFestival << 130 << 217 << 206;                                                                // 1968 1969 1970
+-    springFestival << 127 << 215 << 203 << 123 << 211 << 131 << 218 << 207 << 128 << 216;               // 1971--1980
+-    springFestival << 205 << 125 << 213 << 202 << 220 << 209 << 219 << 217 << 206 << 127;               // 1981--1990
+-    springFestival << 215 << 204 << 123 << 210 << 131 << 219 << 207 << 128 << 216 << 205;               // 1991--2000
+-    springFestival << 124 << 212 << 201 << 122 << 209 << 129 << 218 << 207 << 126 << 214;               // 2001--2010
+-    springFestival << 203 << 123 << 210 << 131 << 219 << 208 << 128 << 216 << 205 << 125;               // 2011--2020
+-    springFestival << 212 << 201 << 122 << 210 << 129 << 217 << 206 << 126 << 213 << 203;               // 2021--2030
+-    springFestival << 123 << 211 << 131 << 219 << 208 << 128 << 215 << 204 << 124 << 212;               // 2031--2040
+-
+-    //16--18位表示闰几月 0--12位表示农历每月的数据 高位表示1月 低位表示12月(农历闰月就会多一个月)
+-    lunarData << 461653 << 1386 << 2413;                                                                // 1968 1969 1970
+-    lunarData << 330077 << 1197 << 2637 << 268877 << 3365 << 531109 << 2900 << 2922 << 398042 << 2395;  // 1971--1980
+-    lunarData << 1179 << 267415 << 2635 << 661067 << 1701 << 1748 << 398772 << 2742 << 2391 << 330031;  // 1981--1990
+-    lunarData << 1175 << 1611 << 200010 << 3749 << 527717 << 1452 << 2742 << 332397 << 2350 << 3222;    // 1991--2000
+-    lunarData << 268949 << 3402 << 3493 << 133973 << 1386 << 464219 << 605 << 2349 << 334123 << 2709;   // 2001--2010
+-    lunarData << 2890 << 267946 << 2773 << 592565 << 1210 << 2651 << 395863 << 1323 << 2707 << 265877;  // 2011--2020
+-    lunarData << 1706 << 2773 << 133557 << 1206 << 398510 << 2638 << 3366 << 335142 << 3411 << 1450;    // 2021--2030
+-    lunarData << 200042 << 2413 << 723293 << 1197 << 2637 << 399947 << 3365 << 3410 << 334676 << 2906;  // 2031--2040
+-
+-    //二十四节气表
++    // 农历查表
++    lunarCalendarTable << 0x04AE53 << 0x0A5748 << 0x5526BD << 0x0D2650 << 0x0D9544 << 0x46AAB9 << 0x056A4D << 0x09AD42 << 0x24AEB6 << 0x04AE4A; // 1901-1910
++    lunarCalendarTable << 0x6A4DBE << 0x0A4D52 << 0x0D2546 << 0x5D52BA << 0x0B544E << 0x0D6A43 << 0x296D37 << 0x095B4B << 0x749BC1 << 0x049754; // 1911-1920
++    lunarCalendarTable << 0x0A4B48 << 0x5B25BC << 0x06A550 << 0x06D445 << 0x4ADAB8 << 0x02B64D << 0x095742 << 0x2497B7 << 0x04974A << 0x664B3E; // 1921-1930
++    lunarCalendarTable << 0x0D4A51 << 0x0EA546 << 0x56D4BA << 0x05AD4E << 0x02B644 << 0x393738 << 0x092E4B << 0x7C96BF << 0x0C9553 << 0x0D4A48; // 1931-1940
++    lunarCalendarTable << 0x6DA53B << 0x0B554F << 0x056A45 << 0x4AADB9 << 0x025D4D << 0x092D42 << 0x2C95B6 << 0x0A954A << 0x7B4ABD << 0x06CA51; // 1941-1950
++    lunarCalendarTable << 0x0B5546 << 0x555ABB << 0x04DA4E << 0x0A5B43 << 0x352BB8 << 0x052B4C << 0x8A953F << 0x0E9552 << 0x06AA48 << 0x6AD53C; // 1951-1960
++    lunarCalendarTable << 0x0AB54F << 0x04B645 << 0x4A5739 << 0x0A574D << 0x052642 << 0x3E9335 << 0x0D9549 << 0x75AABE << 0x056A51 << 0x096D46; // 1961-1970
++    lunarCalendarTable << 0x54AEBB << 0x04AD4F << 0x0A4D43 << 0x4D26B7 << 0x0D254B << 0x8D52BF << 0x0B5452 << 0x0B6A47 << 0x696D3C << 0x095B50; // 1971-1980
++    lunarCalendarTable << 0x049B45 << 0x4A4BB9 << 0x0A4B4D << 0xAB25C2 << 0x06A554 << 0x06D449 << 0x6ADA3D << 0x0AB651 << 0x093746 << 0x5497BB; // 1981-1990
++    lunarCalendarTable << 0x04974F << 0x064B44 << 0x36A537 << 0x0EA54A << 0x86B2BF << 0x05AC53 << 0x0AB647 << 0x5936BC << 0x092E50 << 0x0C9645; // 1991-2000
++    lunarCalendarTable << 0x4D4AB8 << 0x0D4A4C << 0x0DA541 << 0x25AAB6 << 0x056A49 << 0x7AADBD << 0x025D52 << 0x092D47 << 0x5C95BA << 0x0A954E; // 2001-2010
++    lunarCalendarTable << 0x0B4A43 << 0x4B5537 << 0x0AD54A << 0x955ABF << 0x04BA53 << 0x0A5B48 << 0x652BBC << 0x052B50 << 0x0A9345 << 0x474AB9; // 2011-2020
++    lunarCalendarTable << 0x06AA4C << 0x0AD541 << 0x24DAB6 << 0x04B64A << 0x69573D << 0x0A4E51 << 0x0D2646 << 0x5E933A << 0x0D534D << 0x05AA43; // 2021-2030
++    lunarCalendarTable << 0x36B537 << 0x096D4B << 0xB4AEBF << 0x04AD53 << 0x0A4D48 << 0x6D25BC << 0x0D254F << 0x0D5244 << 0x5DAA38 << 0x0B5A4C; // 2031-2040
++    lunarCalendarTable << 0x056D41 << 0x24ADB6 << 0x049B4A << 0x7A4BBE << 0x0A4B51 << 0x0AA546 << 0x5B52BA << 0x06D24E << 0x0ADA42 << 0x355B37; // 2041-2050
++    lunarCalendarTable << 0x09374B << 0x8497C1 << 0x049753 << 0x064B48 << 0x66A53C << 0x0EA54F << 0x06B244 << 0x4AB638 << 0x0AAE4C << 0x092E42; // 2051-2060
++    lunarCalendarTable << 0x3C9735 << 0x0C9649 << 0x7D4ABD << 0x0D4A51 << 0x0DA545 << 0x55AABA << 0x056A4E << 0x0A6D43 << 0x452EB7 << 0x052D4B; // 2061-2070
++    lunarCalendarTable << 0x8A95BF << 0x0A9553 << 0x0B4A47 << 0x6B553B << 0x0AD54F << 0x055A45 << 0x4A5D38 << 0x0A5B4C << 0x052B42 << 0x3A93B6; // 2071-2080
++    lunarCalendarTable << 0x069349 << 0x7729BD << 0x06AA51 << 0x0AD546 << 0x54DABA << 0x04B64E << 0x0A5743 << 0x452738 << 0x0D264A << 0x8E933E; // 2081-2090
++    lunarCalendarTable << 0x0D5252 << 0x0DAA47 << 0x66B53B << 0x056D4F << 0x04AE45 << 0x4A4EB9 << 0x0A4D4C << 0x0D1541 << 0x2D92B5; // 2091-2099
++
++    // 每年春节对应的公历日期
++    springFestival << 130 << 217 << 206; // 1968 1969 1970
++    springFestival << 127 << 215 << 203 << 123 << 211 << 131 << 218 << 207 << 128 << 216; // 1971--1980
++    springFestival << 205 << 125 << 213 << 202 << 220 << 209 << 219 << 217 << 206 << 127; // 1981--1990
++    springFestival << 215 << 204 << 123 << 210 << 131 << 219 << 207 << 128 << 216 << 205; // 1991--2000
++    springFestival << 124 << 212 << 201 << 122 << 209 << 129 << 218 << 207 << 126 << 214; // 2001--2010
++    springFestival << 203 << 123 << 210 << 131 << 219 << 208 << 128 << 216 << 205 << 125; // 2011--2020
++    springFestival << 212 << 201 << 122 << 210 << 129 << 217 << 206 << 126 << 213 << 203; // 2021--2030
++    springFestival << 123 << 211 << 131 << 219 << 208 << 128 << 215 << 204 << 124 << 212; // 2031--2040
++
++    // 16--18位表示闰几月 0--12位表示农历每月的数据 高位表示1月 低位表示12月(农历闰月就会多一个月)
++    lunarData << 461653 << 1386 << 2413; // 1968 1969 1970
++    lunarData << 330077 << 1197 << 2637 << 268877 << 3365 << 531109 << 2900 << 2922 << 398042 << 2395; // 1971--1980
++    lunarData << 1179 << 267415 << 2635 << 661067 << 1701 << 1748 << 398772 << 2742 << 2391 << 330031; // 1981--1990
++    lunarData << 1175 << 1611 << 200010 << 3749 << 527717 << 1452 << 2742 << 332397 << 2350 << 3222; // 1991--2000
++    lunarData << 268949 << 3402 << 3493 << 133973 << 1386 << 464219 << 605 << 2349 << 334123 << 2709; // 2001--2010
++    lunarData << 2890 << 267946 << 2773 << 592565 << 1210 << 2651 << 395863 << 1323 << 2707 << 265877; // 2011--2020
++    lunarData << 1706 << 2773 << 133557 << 1206 << 398510 << 2638 << 3366 << 335142 << 3411 << 1450; // 2021--2030
++    lunarData << 200042 << 2413 << 723293 << 1197 << 2637 << 399947 << 3365 << 3410 << 334676 << 2906; // 2031--2040
++
++    // 二十四节气表
+     chineseTwentyFourData << 0x95 << 0xB4 << 0x96 << 0xA5 << 0x96 << 0x97 << 0x88 << 0x78 << 0x78 << 0x69 << 0x78 << 0x87; // 1970
+     chineseTwentyFourData << 0x96 << 0xB4 << 0x96 << 0xA6 << 0x97 << 0x97 << 0x78 << 0x79 << 0x79 << 0x69 << 0x78 << 0x77; // 1971
+     chineseTwentyFourData << 0x96 << 0xA4 << 0xA5 << 0xA5 << 0xA6 << 0xA6 << 0x88 << 0x88 << 0x88 << 0x78 << 0x87 << 0x87; // 1972
+@@ -210,41 +211,131 @@ KLunarCalendarInfoPrivate::KLunarCalendarInfoPrivate(KLunarCalendarInfo *parent)
+     chineseTwentyFourData << 0xA4 << 0xC3 << 0xA5 << 0xB4 << 0xA5 << 0xA6 << 0x97 << 0x87 << 0x87 << 0x78 << 0x87 << 0x96; // 2098
+     chineseTwentyFourData << 0xA5 << 0xC3 << 0xA5 << 0xB5 << 0xA6 << 0xA6 << 0x87 << 0x88 << 0x88 << 0x78 << 0x87 << 0x86; // 2099
+ 
+-    //公历每月前面的天数
++    // 公历每月前面的天数
+     monthAdd << 0 << 31 << 59 << 90 << 120 << 151 << 181 << 212 << 243 << 273 << 304 << 334;
+ 
+-    //农历日期名称
+-    listDayName << "*" << "初一" << "初二" << "初三" << "初四" << "初五" << "初六" << "初七" << "初八" << "初九" << "初十"
+-                << "十一" << "十二" << "十三" << "十四" << "十五" << "十六" << "十七" << "十八" << "十九" << "二十"
+-                << "廿一" << "廿二" << "廿三" << "廿四" << "廿五" << "廿六" << "廿七" << "廿八" << "廿九" << "三十";
+-
+-    //农历月份名称
+-    listMonthName << "*" << "正月" << "二月" << "三月" << "四月" << "五月" << "六月" << "七月" << "八月" << "九月" << "十月" << "冬月" << "腊月";
+-
+-    //二十四节气名称
+-    listSolarTerm << "小寒" << "大寒" << "立春" << "雨水" << "惊蛰" << "春分" << "清明" << "谷雨"
+-                  << "立夏" << "小满" << "芒种" << "夏至" << "小暑" << "大暑" << "立秋" << "处暑"
+-                  << "白露" << "秋分" << "寒露" << "霜降" << "立冬" << "小雪" << "大雪" << "冬至";
+-
+-    //天干
+-    listTianGan << "甲" << "乙" << "丙" << "丁" << "戊" << "己" << "庚" << "辛" << "壬" << "癸";
+-
+-    //地支
+-    listDiZhi << "子" << "丑" << "寅" << "卯" << "辰" << "巳" << "午" << "未" << "申" << "酉" << "戌" << "亥";
+-
+-    //属相
+-    listShuXiang << "鼠" << "牛" << "虎" << "兔" << "龙" << "蛇" << "马" << "羊" << "猴" << "鸡" << "狗" << "猪";
++    // 农历日期名称
++    listDayName << "*"
++                << "初一"
++                << "初二"
++                << "初三"
++                << "初四"
++                << "初五"
++                << "初六"
++                << "初七"
++                << "初八"
++                << "初九"
++                << "初十"
++                << "十一"
++                << "十二"
++                << "十三"
++                << "十四"
++                << "十五"
++                << "十六"
++                << "十七"
++                << "十八"
++                << "十九"
++                << "二十"
++                << "廿一"
++                << "廿二"
++                << "廿三"
++                << "廿四"
++                << "廿五"
++                << "廿六"
++                << "廿七"
++                << "廿八"
++                << "廿九"
++                << "三十";
++
++    // 农历月份名称
++    listMonthName << "*"
++                  << "正月"
++                  << "二月"
++                  << "三月"
++                  << "四月"
++                  << "五月"
++                  << "六月"
++                  << "七月"
++                  << "八月"
++                  << "九月"
++                  << "十月"
++                  << "冬月"
++                  << "腊月";
++
++    // 二十四节气名称
++    listSolarTerm << "小寒"
++                  << "大寒"
++                  << "立春"
++                  << "雨水"
++                  << "惊蛰"
++                  << "春分"
++                  << "清明"
++                  << "谷雨"
++                  << "立夏"
++                  << "小满"
++                  << "芒种"
++                  << "夏至"
++                  << "小暑"
++                  << "大暑"
++                  << "立秋"
++                  << "处暑"
++                  << "白露"
++                  << "秋分"
++                  << "寒露"
++                  << "霜降"
++                  << "立冬"
++                  << "小雪"
++                  << "大雪"
++                  << "冬至";
++
++    // 天干
++    listTianGan << "甲"
++                << "乙"
++                << "丙"
++                << "丁"
++                << "戊"
++                << "己"
++                << "庚"
++                << "辛"
++                << "壬"
++                << "癸";
++
++    // 地支
++    listDiZhi << "子"
++              << "丑"
++              << "寅"
++              << "卯"
++              << "辰"
++              << "巳"
++              << "午"
++              << "未"
++              << "申"
++              << "酉"
++              << "戌"
++              << "亥";
++
++    // 属相
++    listShuXiang << "鼠"
++                 << "牛"
++                 << "虎"
++                 << "兔"
++                 << "龙"
++                 << "蛇"
++                 << "马"
++                 << "羊"
++                 << "猴"
++                 << "鸡"
++                 << "狗"
++                 << "猪";
+ }
+ 
+ KLunarCalendarInfo *KLunarCalendarInfo::Instance()
+ {
+-    if(self.isNull())
+-    {
++    if (self.isNull()) {
+         static QMutex mutex;
+         QMutexLocker locker(&mutex);
+ 
+-        if(self.isNull())
+-        {
++        if (self.isNull()) {
+             self.reset(new KLunarCalendarInfo);
+         }
+     }
+@@ -252,27 +343,28 @@ KLunarCalendarInfo *KLunarCalendarInfo::Instance()
+     return self.data();
+ }
+ 
+-KLunarCalendarInfo::KLunarCalendarInfo(QObject *parent) : QObject(parent), d_ptr(new KLunarCalendarInfoPrivate(this))
++KLunarCalendarInfo::KLunarCalendarInfo(QObject *parent)
++    : QObject(parent)
++    , d_ptr(new KLunarCalendarInfoPrivate(this))
+ {
+     Q_D(KLunarCalendarInfo);
+ }
+ 
+-//计算是否闰年
++// 计算是否闰年
+ bool KLunarCalendarInfo::isLoopYear(int year)
+ {
+     Q_D(KLunarCalendarInfo);
+     return (((0 == (year % 4)) && (0 != (year % 100))) || (0 == (year % 400)));
+ }
+ 
+-//计算指定年月该月共多少天
++// 计算指定年月该月共多少天
+ int KLunarCalendarInfo::getMonthDays(int year, int month)
+ {
+     Q_D(KLunarCalendarInfo);
+     int countDay = 0;
+     int loopDay = isLoopYear(year) ? 1 : 0;
+ 
+-    switch (month)
+-    {
++    switch (month) {
+     case 1:
+         countDay = 31;
+         break;
+@@ -329,15 +421,14 @@ int KLunarCalendarInfo::getMonthDays(int year, int month)
+     return countDay;
+ }
+ 
+-//计算指定年月对应到该月共多少天
++// 计算指定年月对应到该月共多少天
+ int KLunarCalendarInfo::getTotalMonthDays(int year, int month)
+ {
+     Q_D(KLunarCalendarInfo);
+     int countDay = 0;
+     int loopDay = isLoopYear(year) ? 1 : 0;
+ 
+-    switch (month)
+-    {
++    switch (month) {
+     case 1:
+         countDay = 0;
+         break;
+@@ -394,7 +485,7 @@ int KLunarCalendarInfo::getTotalMonthDays(int year, int month)
+     return countDay;
+ }
+ 
+-//计算指定年月对应星期几
++// 计算指定年月对应星期几
+ int KLunarCalendarInfo::getFirstDayOfWeek(int year, int month, bool FirstDayisSun)
+ {
+     Q_D(KLunarCalendarInfo);
+@@ -409,15 +500,14 @@ int KLunarCalendarInfo::getFirstDayOfWeek(int year, int month, bool FirstDayisSu
+     return week;
+ }
+ 
+-//计算国际节日
++// 计算国际节日
+ QString KLunarCalendarInfo::getHoliday(int month, int day)
+ {
+     Q_D(KLunarCalendarInfo);
+     int temp = (month << 8) | day;
+     QString strHoliday;
+ 
+-    switch (temp)
+-    {
++    switch (temp) {
+     case 0x0101:
+         strHoliday = "元旦";
+         break;
+@@ -501,7 +591,7 @@ QString KLunarCalendarInfo::getHoliday(int month, int day)
+     return strHoliday;
+ }
+ 
+-//计算二十四节气
++// 计算二十四节气
+ QString KLunarCalendarInfo::getSolarTerms(int year, int month, int day)
+ {
+     Q_D(KLunarCalendarInfo);
+@@ -509,21 +599,16 @@ QString KLunarCalendarInfo::getSolarTerms(int year, int month, int day)
+     int dayTemp = 0;
+     int index = (year - 1970) * 12 + month - 1;
+ 
+-    if (day < 15)
+-    {
++    if (day < 15) {
+         dayTemp = 15 - day;
+ 
+-        if ((d->chineseTwentyFourData.at(index) >> 4) == dayTemp)
+-        {
++        if ((d->chineseTwentyFourData.at(index) >> 4) == dayTemp) {
+             strSolarTerms = d->listSolarTerm.at(2 * (month - 1));
+         }
+-    }
+-    else if (day > 15)
+-    {
++    } else if (day > 15) {
+         dayTemp = day - 15;
+ 
+-        if ((d->chineseTwentyFourData.at(index) & 0x0f) == dayTemp)
+-        {
++        if ((d->chineseTwentyFourData.at(index) & 0x0f) == dayTemp) {
+             strSolarTerms = d->listSolarTerm.at(2 * (month - 1) + 1);
+         }
+     }
+@@ -531,15 +616,14 @@ QString KLunarCalendarInfo::getSolarTerms(int year, int month, int day)
+     return strSolarTerms;
+ }
+ 
+-//计算农历节日(必须传入农历年份月份)
++// 计算农历节日(必须传入农历年份月份)
+ QString KLunarCalendarInfo::getLunarFestival(int month, int day)
+ {
+     Q_D(KLunarCalendarInfo);
+     int temp = (month << 8) | day;
+     QString strFestival;
+ 
+-    switch (temp)
+-    {
++    switch (temp) {
+     case 0x0201:
+         strFestival = "二月";
+         break;
+@@ -627,14 +711,13 @@ QString KLunarCalendarInfo::getLunarFestival(int month, int day)
+     return strFestival;
+ }
+ 
+-//计算农历年 天干+地支+生肖
++// 计算农历年 天干+地支+生肖
+ QString KLunarCalendarInfo::getLunarYear(int year)
+ {
+     Q_D(KLunarCalendarInfo);
+     QString strYear;
+ 
+-    if (year > 1924)
+-    {
++    if (year > 1924) {
+         int temp = year - 1924;
+         strYear.append(d->listTianGan.at(temp % 10));
+         strYear.append(d->listDiZhi.at(temp % 12));
+@@ -647,17 +730,16 @@ QString KLunarCalendarInfo::getLunarYear(int year)
+ }
+ 
+ void KLunarCalendarInfo::getLunarCalendarInfo(int year, int month, int day,
+-        QString &strHoliday,
+-        QString &strSolarTerms,
+-        QString &strLunarFestival,
+-        QString &strLunarYear,
+-        QString &strLunarMonth,
+-        QString &strLunarDay)
++                                              QString &strHoliday,
++                                              QString &strSolarTerms,
++                                              QString &strLunarFestival,
++                                              QString &strLunarYear,
++                                              QString &strLunarMonth,
++                                              QString &strLunarDay)
+ {
+ 
+     Q_D(KLunarCalendarInfo);
+-    if( year < 1901 || year > 2099 || month < 1 || month > 12 || day < 1 || day > 31)
+-    {
++    if (year < 1901 || year > 2099 || month < 1 || month > 12 || day < 1 || day > 31) {
+         return;
+     }
+ 
+@@ -665,90 +747,70 @@ void KLunarCalendarInfo::getLunarCalendarInfo(int year, int month, int day,
+     strSolarTerms = getSolarTerms(year, month, day);
+ 
+ #ifndef year_2099
+-    //现在计算农历:获得当年春节的公历日期(比如:2015年春节日期为(2月19日))
+-    //以此为分界点,2.19前面的农历是2014年农历(用2014年农历数据来计算)
+-    //2.19以及之后的日期,农历为2015年农历(用2015年农历数据来计算)
++    // 现在计算农历:获得当年春节的公历日期(比如:2015年春节日期为(2月19日))
++    // 以此为分界点,2.19前面的农历是2014年农历(用2014年农历数据来计算)
++    // 2.19以及之后的日期,农历为2015年农历(用2015年农历数据来计算)
+     int temp, tempYear, tempMonth, isEnd, k, n;
+     tempMonth = year - 1968;
+     int springFestivalMonth = d->springFestival.at(tempMonth) / 100;
+     int springFestivalDaty = d->springFestival.at(tempMonth) % 100;
+ 
+-    if (month < springFestivalMonth)
+-    {
++    if (month < springFestivalMonth) {
+         tempMonth--;
+         tempYear = 365 * 1 + day + d->monthAdd.at(month - 1) - 31 * ((d->springFestival.at(tempMonth) / 100) - 1) - d->springFestival.at(tempMonth) % 100 + 1;
+ 
+-        if ((!(year % 4)) && (month > 2))
+-        {
++        if ((!(year % 4)) && (month > 2)) {
+             tempYear = tempYear + 1;
+         }
+ 
+-        if ((!((year - 1) % 4)))
+-        {
++        if ((!((year - 1) % 4))) {
+             tempYear = tempYear + 1;
+         }
+-    }
+-    else if (month == springFestivalMonth)
+-    {
+-        if (day < springFestivalDaty)
+-        {
++    } else if (month == springFestivalMonth) {
++        if (day < springFestivalDaty) {
+             tempMonth--;
+             tempYear = 365 * 1 + day + d->monthAdd.at(month - 1) - 31 * ((d->springFestival.at(tempMonth) / 100) - 1) - d->springFestival.at(tempMonth) % 100 + 1;
+ 
+-            if ((!(year % 4)) && (month > 2))
+-            {
++            if ((!(year % 4)) && (month > 2)) {
+                 tempYear = tempYear + 1;
+             }
+ 
+-            if ((!((year - 1) % 4)))
+-            {
++            if ((!((year - 1) % 4))) {
+                 tempYear = tempYear + 1;
+             }
+-        }
+-        else
+-        {
++        } else {
+             tempYear = day + d->monthAdd.at(month - 1) - 31 * ((d->springFestival.at(tempMonth) / 100) - 1) - d->springFestival.at(tempMonth) % 100 + 1;
+ 
+-            if ((!(year % 4)) && (month > 2))
+-            {
++            if ((!(year % 4)) && (month > 2)) {
+                 tempYear = tempYear + 1;
+             }
+         }
+-    }
+-    else
+-    {
++    } else {
+         tempYear = day + d->monthAdd.at(month - 1) - 31 * ((d->springFestival.at(tempMonth) / 100) - 1) - d->springFestival.at(tempMonth) % 100 + 1;
+ 
+-        if ((!(year % 4)) && (month > 2))
+-        {
++        if ((!(year % 4)) && (month > 2)) {
+             tempYear = tempYear + 1;
+         }
+     }
+ 
+-    //计算农历天干地支月日
++    // 计算农历天干地支月日
+     isEnd = 0;
+ 
+-    while (isEnd != 1)
+-    {
+-        if (d->lunarData.at(tempMonth) < 4095)
+-        {
++    while (isEnd != 1) {
++        if (d->lunarData.at(tempMonth) < 4095) {
+             k = 11;
+-        }
+-        else
+-        {
++        } else {
+             k = 12;
+         }
+ 
+         n = k;
+ 
+-        while (n >= 0)
+-        {
++        while (n >= 0) {
+             temp = d->lunarData.at(tempMonth);
+             temp = temp >> n;
+             temp = temp % 2;
+ 
+-            if (tempYear <= (29 + temp))
+-            {
++            if (tempYear <= (29 + temp)) {
+                 isEnd = 1;
+                 break;
+             }
+@@ -757,169 +819,131 @@ void KLunarCalendarInfo::getLunarCalendarInfo(int year, int month, int day,
+             n = n - 1;
+         }
+ 
+-        if (isEnd)
+-        {
++        if (isEnd) {
+             break;
+         }
+ 
+         tempMonth = tempMonth + 1;
+     }
+ 
+-    //农历的年月日
++    // 农历的年月日
+     year = 1969 + tempMonth - 1;
+     month = k - n + 1;
+     day = tempYear;
+ 
+-    if (k == 12)
+-    {
+-        if (month == (d->lunarData.at(tempMonth) / 65536) + 1)
+-        {
++    if (k == 12) {
++        if (month == (d->lunarData.at(tempMonth) / 65536) + 1) {
+             month = 1 - month;
+-        }
+-        else if (month > (d->lunarData.at(tempMonth) / 65536) + 1)
+-        {
++        } else if (month > (d->lunarData.at(tempMonth) / 65536) + 1) {
+             month = month - 1;
+         }
+     }
+ 
+     strLunarYear = getLunarYear(year);
+ 
+-    if (month < 1 && (1 == day))
+-    {
++    if (month < 1 && (1 == day)) {
+         month = month * -1;
+         strLunarMonth = "闰" + d->listMonthName.at(month);
+-    }
+-    else
+-    {
++    } else {
+         strLunarMonth = d->listMonthName.at(month);
+     }
+ 
+     strLunarDay = d->listDayName.at(day);
+     strLunarFestival = getLunarFestival(month, day);
+ #else
+-    //记录春节离当年元旦的天数
++    // 记录春节离当年元旦的天数
+     int springOffset = 0;
+-    //记录阳历日离当年元旦的天数
++    // 记录阳历日离当年元旦的天数
+     int newYearOffset = 0;
+-    //记录大小月的天数 29或30
++    // 记录大小月的天数 29或30
+     int monthCount = 0;
+ 
+-    if(((d->lunarCalendarTable.at(year - 1901) & 0x0060) >> 5) == 1)
+-    {
++    if (((d->lunarCalendarTable.at(year - 1901) & 0x0060) >> 5) == 1) {
+         springOffset = (d->lunarCalendarTable.at(year - 1901) & 0x001F) - 1;
+-    }
+-    else
+-    {
++    } else {
+         springOffset = (d->lunarCalendarTable.at(year - 1901) & 0x001F) - 1 + 31;
+     }
+ 
+-    //如果是不闰年且不是2月份 +1
++    // 如果是不闰年且不是2月份 +1
+     newYearOffset = d->monthAdd.at(month - 1) + day - 1;
+ 
+-    if((!(year % 4)) && (month > 2))
+-    {
++    if ((!(year % 4)) && (month > 2)) {
+         newYearOffset++;
+     }
+ 
+-    //记录从哪个月开始来计算
++    // 记录从哪个月开始来计算
+     int index = 0;
+-    //用来对闰月的特殊处理
++    // 用来对闰月的特殊处理
+     int flag = 0;
+ 
+-    //判断阳历日在春节前还是春节后,计算农历的月/日
+-    if (newYearOffset >= springOffset)
+-    {
++    // 判断阳历日在春节前还是春节后,计算农历的月/日
++    if (newYearOffset >= springOffset) {
+         newYearOffset -= springOffset;
+         month = 1;
+         index = 1;
+         flag = 0;
+ 
+-        if((d->lunarCalendarTable.at(year - 1901) & (0x80000 >> (index - 1))) == 0)
+-        {
++        if ((d->lunarCalendarTable.at(year - 1901) & (0x80000 >> (index - 1))) == 0) {
+             monthCount = 29;
+-        }
+-        else
+-        {
++        } else {
+             monthCount = 30;
+         }
+ 
+-        while (newYearOffset >= monthCount)
+-        {
++        while (newYearOffset >= monthCount) {
+             newYearOffset -= monthCount;
+             index++;
+ 
+-            if (month == ((d->lunarCalendarTable.at(year - 1901) & 0xF00000) >> 20) )
+-            {
++            if (month == ((d->lunarCalendarTable.at(year - 1901) & 0xF00000) >> 20)) {
+                 flag = ~flag;
+ 
+-                if (flag == 0)
+-                {
++                if (flag == 0) {
+                     month++;
+                 }
+-            }
+-            else
+-            {
++            } else {
+                 month++;
+             }
+ 
+-            if ((d->lunarCalendarTable.at(year - 1901) & (0x80000 >> (index - 1))) == 0)
+-            {
++            if ((d->lunarCalendarTable.at(year - 1901) & (0x80000 >> (index - 1))) == 0) {
+                 monthCount = 29;
+-            }
+-            else
+-            {
++            } else {
+                 monthCount = 30;
+             }
+         }
+ 
+         day = newYearOffset + 1;
+-    }
+-    else
+-    {
++    } else {
+         springOffset -= newYearOffset;
+         year--;
+         month = 12;
+         flag = 0;
+ 
+-        if (((d->lunarCalendarTable.at(year - 1901) & 0xF00000) >> 20) == 0)
+-        {
++        if (((d->lunarCalendarTable.at(year - 1901) & 0xF00000) >> 20) == 0) {
+             index = 12;
+-        }
+-        else
+-        {
++        } else {
+             index = 13;
+         }
+ 
+-        if ((d->lunarCalendarTable.at(year - 1901) & (0x80000 >> (index - 1))) == 0)
+-        {
++        if ((d->lunarCalendarTable.at(year - 1901) & (0x80000 >> (index - 1))) == 0) {
+             monthCount = 29;
+-        }
+-        else
+-        {
++        } else {
+             monthCount = 30;
+         }
+ 
+-        while (springOffset > monthCount)
+-        {
++        while (springOffset > monthCount) {
+             springOffset -= monthCount;
+             index--;
+ 
+-            if(flag == 0)
+-            {
++            if (flag == 0) {
+                 month--;
+             }
+ 
+-            if(month == ((d->lunarCalendarTable.at(year - 1901) & 0xF00000) >> 20))
+-            {
++            if (month == ((d->lunarCalendarTable.at(year - 1901) & 0xF00000) >> 20)) {
+                 flag = ~flag;
+             }
+ 
+-            if ((d->lunarCalendarTable.at(year - 1901) & (0x80000 >> (index - 1))) == 0)
+-            {
++            if ((d->lunarCalendarTable.at(year - 1901) & (0x80000 >> (index - 1))) == 0) {
+                 monthCount = 29;
+-            }
+-            else
+-            {
++            } else {
+                 monthCount = 30;
+             }
+         }
+@@ -927,23 +951,20 @@ void KLunarCalendarInfo::getLunarCalendarInfo(int year, int month, int day,
+         day = monthCount - springOffset + 1;
+     }
+ 
+-    //计算农历的索引配置
++    // 计算农历的索引配置
+     int temp = 0;
+     temp |= day;
+     temp |= (month << 6);
+ 
+-    //转换农历的年月
++    // 转换农历的年月
+     month = (temp & 0x3C0) >> 6;
+     day = temp & 0x3F;
+ 
+     strLunarYear = getLunarYear(year);
+ 
+-    if ((month == ((d->lunarCalendarTable.at(year - 1901) & 0xF00000) >> 20)) && (1 == day))
+-    {
++    if ((month == ((d->lunarCalendarTable.at(year - 1901) & 0xF00000) >> 20)) && (1 == day)) {
+         strLunarMonth = "闰" + d->listMonthName.at(month);
+-    }
+-    else
+-    {
++    } else {
+         strLunarMonth = d->listMonthName.at(month);
+     }
+ 
+@@ -958,27 +979,22 @@ QString KLunarCalendarInfo::getLunarInfo(int year, int month, int day, bool year
+     QString strHoliday, strSolarTerms, strLunarFestival, strLunarYear, strLunarMonth, strLunarDay;
+ 
+     KLunarCalendarInfo::Instance()->getLunarCalendarInfo(year, month, day,
+-            strHoliday, strSolarTerms, strLunarFestival,
+-            strLunarYear, strLunarMonth, strLunarDay);
++                                                         strHoliday, strSolarTerms, strLunarFestival,
++                                                         strLunarYear, strLunarMonth, strLunarDay);
+ 
+-    //农历节日优先,其次农历节气,然后公历节日,最后才是农历月份名称
+-    if (!strLunarFestival.isEmpty())
+-    {
++    // 农历节日优先,其次农历节气,然后公历节日,最后才是农历月份名称
++    if (!strLunarFestival.isEmpty()) {
+         strLunarDay = strLunarFestival;
+-    }
+-    else if (!strSolarTerms.isEmpty())
+-    {
++    } else if (!strSolarTerms.isEmpty()) {
+         strLunarDay = strSolarTerms;
+-    }
+-    else if (!strHoliday.isEmpty())
+-    {
++    } else if (!strHoliday.isEmpty()) {
+         strLunarDay = strHoliday;
+     }
+ 
+     QString info = QString("%1%2%3")
+-                   .arg(yearInfo ? strLunarYear + "年" : "")
+-                   .arg(monthInfo ? strLunarMonth : "")
+-                   .arg(dayInfo ? strLunarDay : "");
++                       .arg(yearInfo ? strLunarYear + "年" : "")
++                       .arg(monthInfo ? strLunarMonth : "")
++                       .arg(dayInfo ? strLunarDay : "");
+ 
+     return info;
+ }
+diff --git a/kysdk-qtwidgets/src/klunarcalendarinfo.h b/kysdk-qtwidgets/src/klunarcalendarinfo.h
+index 4ba7957..e6af279 100644
+--- a/kysdk-qtwidgets/src/klunarcalendarinfo.h
++++ b/kysdk-qtwidgets/src/klunarcalendarinfo.h
+@@ -145,7 +145,7 @@ public:
+ 
+ private:
+     Q_DECLARE_PRIVATE(KLunarCalendarInfo)
+-    KLunarCalendarInfoPrivate* const d_ptr;
++    KLunarCalendarInfoPrivate *const d_ptr;
+     static QScopedPointer<KLunarCalendarInfo> self;
+ };
+ }
+diff --git a/kysdk-qtwidgets/src/klunardateedit.cpp b/kysdk-qtwidgets/src/klunardateedit.cpp
+index 683bf49..7b806e4 100644
+--- a/kysdk-qtwidgets/src/klunardateedit.cpp
++++ b/kysdk-qtwidgets/src/klunardateedit.cpp
+@@ -1,14 +1,14 @@
+ #include "klunardateedit.h"
+ #include "kcustomdateedit.h"
+-#include <QVBoxLayout>
+-#include <QHBoxLayout>
+ #include <QApplication>
+-#include <QSvgRenderer>
+-#include <QPainter>
++#include <QDateTimeEdit>
+ #include <QGSettings>
++#include <QHBoxLayout>
+ #include <QLabel>
++#include <QPainter>
+ #include <QPushButton>
+-#include <QDateTimeEdit>
++#include <QSvgRenderer>
++#include <QVBoxLayout>
+ #define THEME_SCHAME "org.ukui.style"
+ #define COLOR_THEME "styleName"
+ 
+@@ -19,14 +19,14 @@ class KLunarDateEditPrivate : public QObject
+     Q_OBJECT
+     Q_DECLARE_PUBLIC(KLunarDateEdit)
+ public:
+-    KLunarDateEditPrivate(KLunarDateEdit* parent);
++    KLunarDateEditPrivate(KLunarDateEdit *parent);
+ 
+ private:
+     QPixmap loadSvg(const QString &path, int size);
+     QPixmap drawSymbolicColoredPixmap(const QPixmap &source);
+ 
+ private:
+-    KLunarDateEdit* q_ptr;
++    KLunarDateEdit *q_ptr;
+ 
+     QGSettings *colorGsettings;
+     KCustomDateEdit *dateEdit;
+@@ -35,7 +35,8 @@ private:
+     QPushButton *popButton;
+ };
+ 
+-KLunarDateEditPrivate::KLunarDateEditPrivate(KLunarDateEdit* parent) : q_ptr(parent)
++KLunarDateEditPrivate::KLunarDateEditPrivate(KLunarDateEdit *parent)
++    : q_ptr(parent)
+ {
+     Q_Q(KLunarDateEdit);
+     dateEdit = new KCustomDateEdit(q);
+@@ -48,7 +49,7 @@ KLunarDateEditPrivate::KLunarDateEditPrivate(KLunarDateEdit* parent) : q_ptr(par
+     sizePolicy.setHeightForWidth(dateEdit->sizePolicy().hasHeightForWidth());
+     dateEdit->setSizePolicy(sizePolicy);
+ 
+-    //lunarDateEdit
++    // lunarDateEdit
+     m_pLunarWidget = new QWidget(q);
+     m_pLunarWidget->setObjectName(QString::fromUtf8("LunarWidget"));
+     QHBoxLayout *horizontalLayout = new QHBoxLayout(m_pLunarWidget);
+@@ -65,8 +66,8 @@ KLunarDateEditPrivate::KLunarDateEditPrivate(KLunarDateEdit* parent) : q_ptr(par
+     popButton->setSizePolicy(sizePolicy);
+     popButton->setFixedWidth(38);
+     popButton->setStyleSheet(QString::fromUtf8("QPushButton{background-color: rgba(255, 255, 255, 0);border: none;}"
+-                                "QPushButton:hover { background-color: rgba(255, 255, 255, 0); }"
+-                                "QPushButton:pressed { background-color: rgba(255, 255, 255, 0);}"));
++                                               "QPushButton:hover { background-color: rgba(255, 255, 255, 0); }"
++                                               "QPushButton:pressed { background-color: rgba(255, 255, 255, 0);}"));
+     popButton->setFlat(true);
+     connect(popButton, SIGNAL(clicked()), q, SLOT(slotClicked()));
+     horizontalLayout->addWidget(lunarLabel);
+@@ -80,13 +81,10 @@ KLunarDateEditPrivate::KLunarDateEditPrivate(KLunarDateEdit* parent) : q_ptr(par
+ 
+     const QByteArray id(THEME_SCHAME);
+ 
+-    if (QGSettings::isSchemaInstalled(id))
+-    {
++    if (QGSettings::isSchemaInstalled(id)) {
+         colorGsettings = new QGSettings(id, QByteArray(), q);
+-        connect(colorGsettings, &QGSettings::changed, this, [ = ](QString key)
+-        {
+-            if ("themeColor" == key || "styleName" == key)
+-            {
++        connect(colorGsettings, &QGSettings::changed, this, [=](QString key) {
++            if ("themeColor" == key || "styleName" == key) {
+                 q->slotPaletteChanged();
+             }
+         });
+@@ -99,12 +97,9 @@ QPixmap KLunarDateEditPrivate::loadSvg(const QString &path, int size)
+     int origSize = size;
+     const auto ratio = qApp->devicePixelRatio();
+ 
+-    if ( 2 == ratio)
+-    {
++    if (2 == ratio) {
+         size += origSize;
+-    }
+-    else if (3 == ratio)
+-    {
++    } else if (3 == ratio) {
+         size += origSize;
+     }
+ 
+@@ -126,14 +121,11 @@ QPixmap KLunarDateEditPrivate::drawSymbolicColoredPixmap(const QPixmap &source)
+     Q_Q(KLunarDateEdit);
+     QImage img = source.toImage();
+ 
+-    for (int x = 0; x < img.width(); x++)
+-    {
+-        for (int y = 0; y < img.height(); y++)
+-        {
++    for (int x = 0; x < img.width(); x++) {
++        for (int y = 0; y < img.height(); y++) {
+             QColor color = img.pixelColor(x, y);
+ 
+-            if (color.alpha() > 0)
+-            {
++            if (color.alpha() > 0) {
+                 QColor colorSet = q->palette().color(popButton->palette().ButtonText);
+                 color.setRed(colorSet.red());
+                 color.setGreen(colorSet.green());
+@@ -146,7 +138,9 @@ QPixmap KLunarDateEditPrivate::drawSymbolicColoredPixmap(const QPixmap &source)
+     return QPixmap::fromImage(img);
+ }
+ 
+-KLunarDateEdit::KLunarDateEdit(QWidget *parent) : QWidget{parent}, d_ptr(new KLunarDateEditPrivate(this))
++KLunarDateEdit::KLunarDateEdit(QWidget *parent)
++    : QWidget{parent}
++    , d_ptr(new KLunarDateEditPrivate(this))
+ {
+     Q_D(KLunarDateEdit);
+     slotPaletteChanged();
+@@ -164,7 +158,7 @@ void KLunarDateEdit::slotPaletteChanged()
+ {
+     Q_D(KLunarDateEdit);
+ 
+-    if(d->popButton == nullptr || d->lunarLabel == nullptr || d->m_pLunarWidget == nullptr)
++    if (d->popButton == nullptr || d->lunarLabel == nullptr || d->m_pLunarWidget == nullptr)
+         return;
+ 
+     QPalette pal = qApp->palette();
+@@ -174,22 +168,18 @@ void KLunarDateEdit::slotPaletteChanged()
+     d->lunarLabel->setPalette(pal);
+     d->popButton->setPalette(pal);
+ 
+-    QGSettings * styleGsettings = nullptr;
++    QGSettings *styleGsettings = nullptr;
+     const QByteArray style_id(THEME_SCHAME);
+ 
+-    if (QGSettings::isSchemaInstalled(style_id))
+-    {
++    if (QGSettings::isSchemaInstalled(style_id)) {
+         styleGsettings = new QGSettings(style_id);
+         QString currentTheme = styleGsettings->get(COLOR_THEME).toString();
+ 
+-        if(currentTheme == "ukui-default" || currentTheme == "ukui-light" )
+-        {
++        if (currentTheme == "ukui-default" || currentTheme == "ukui-light") {
+             d->dateEdit->updateStyle(false);
+             d->m_pLunarWidget->setStyleSheet(QString("QWidget#LunarWidget{background-color: rgb(233,233,233); border:none;border-radius:5px;}"));
+             d->lunarLabel->setStyleSheet(QString("color:rgb(0,0,0);"));
+-        }
+-        else if(currentTheme == "ukui-dark")
+-        {
++        } else if (currentTheme == "ukui-dark") {
+             d->dateEdit->updateStyle(true);
+             d->m_pLunarWidget->setStyleSheet(QString("QWidget#LunarWidget{background-color: rgb(55,55,59); border:none;border-radius:5px;}"));
+             d->lunarLabel->setStyleSheet(QString("color:rgb(233,233,233);"));
+@@ -202,8 +192,7 @@ void KLunarDateEdit::slotPaletteChanged()
+     d->popButton->setIcon(icon);
+     d->popButton->setIconSize(QSize(15, 15));
+ 
+-    if(styleGsettings != nullptr)
+-    {
++    if (styleGsettings != nullptr) {
+         delete styleGsettings;
+         styleGsettings = nullptr;
+     }
+@@ -212,7 +201,7 @@ void KLunarDateEdit::slotPaletteChanged()
+ QDateTimeEdit *KLunarDateEdit::getDateEdit()
+ {
+     Q_D(KLunarDateEdit);
+-    return static_cast<QDateTimeEdit*>(d->dateEdit);
++    return static_cast<QDateTimeEdit *>(d->dateEdit);
+ }
+ 
+ void KLunarDateEdit::resizeEvent(QResizeEvent *event)
+@@ -233,14 +222,14 @@ void KLunarDateEdit::slotDateChanged(QDate date)
+     QString strLunarDay;
+ 
+     KLunarCalendarInfo::Instance()->getLunarCalendarInfo(date.year(),
+-            date.month(),
+-            date.day(),
+-            strHoliday,
+-            strSolarTerms,
+-            strLunarFestival,
+-            strLunarYear,
+-            strLunarMonth,
+-            strLunarDay);
++                                                         date.month(),
++                                                         date.day(),
++                                                         strHoliday,
++                                                         strSolarTerms,
++                                                         strLunarFestival,
++                                                         strLunarYear,
++                                                         strLunarMonth,
++                                                         strLunarDay);
+ 
+     QString labBottomarg = strLunarMonth + strLunarDay;
+     d->lunarLabel->setText(labBottomarg);
+diff --git a/kysdk-qtwidgets/src/klunardateedit.h b/kysdk-qtwidgets/src/klunardateedit.h
+index 6a5f1f0..f729592 100644
+--- a/kysdk-qtwidgets/src/klunardateedit.h
++++ b/kysdk-qtwidgets/src/klunardateedit.h
+@@ -2,9 +2,9 @@
+ #define KLUNARDATEEDIT_H
+ 
+ #include "gui_g.h"
++#include <QDateEdit>
+ #include <QObject>
+ #include <QWidget>
+-#include <QDateEdit>
+ 
+ namespace kdk
+ {
+@@ -31,10 +31,10 @@ public:
+      * @brief 获取控件中的DateEdit控件
+      * @return
+      */
+-    QDateTimeEdit* getDateEdit();
++    QDateTimeEdit *getDateEdit();
+ 
+ protected:
+-    void resizeEvent(QResizeEvent* event);
++    void resizeEvent(QResizeEvent *event);
+ 
+ signals:
+     void dateChanged(QDate);
+@@ -46,7 +46,7 @@ private slots:
+ 
+ private:
+     Q_DECLARE_PRIVATE(KLunarDateEdit)
+-    KLunarDateEditPrivate* const d_ptr;
++    KLunarDateEditPrivate *const d_ptr;
+ };
+ }
+ 
+diff --git a/kysdk-qtwidgets/src/kmenubutton.cpp b/kysdk-qtwidgets/src/kmenubutton.cpp
+index fb7b0d2..f3a457e 100644
+--- a/kysdk-qtwidgets/src/kmenubutton.cpp
++++ b/kysdk-qtwidgets/src/kmenubutton.cpp
+@@ -21,31 +21,31 @@
+  */
+ 
+ #include "kmenubutton.h"
++#include "parmscontroller.h"
+ #include <QAction>
+-#include <QPainter>
+-#include <QFile>
+-#include <QProcess>
+ #include <QApplication>
+-#include "parmscontroller.h"
+ #include <QDebug>
++#include <QFile>
++#include <QPainter>
++#include <QProcess>
+ 
+ namespace kdk
+ {
+ 
+-class KMenuButtonPrivate:public QObject
++class KMenuButtonPrivate : public QObject
+ {
+     Q_DECLARE_PUBLIC(KMenuButton)
+     Q_OBJECT
+ 
+ public:
+-    KMenuButtonPrivate(KMenuButton*parent);
++    KMenuButtonPrivate(KMenuButton *parent);
+     void feedbackShow();
+ 
+ protected:
+     bool eventFilter(QObject *watched, QEvent *event);
+ 
+ private:
+-    KMenuButton* q_ptr;
++    KMenuButton *q_ptr;
+     QMenu *m_pMenu;
+     QAction *m_pSettingAction;
+     QAction *m_pThemeAction;
+@@ -61,40 +61,40 @@ private:
+ };
+ 
+ KMenuButton::KMenuButton(QWidget *parent)
+-    :QToolButton(parent),
+-      d_ptr(new KMenuButtonPrivate(this))
++    : QToolButton(parent)
++    , d_ptr(new KMenuButtonPrivate(this))
+ {
+     Q_D(KMenuButton);
+ 
+-    //setArrowType(Qt::NoArrow);
+-    d->m_pMenu =new QMenu(this);
++    // setArrowType(Qt::NoArrow);
++    d->m_pMenu = new QMenu(this);
+     setMenu(d->m_pMenu);
+     setToolTip(tr("Options"));
+-    d->m_pSettingAction = new QAction(tr("Setting"),d->m_pMenu);
+-    d->m_pThemeAction = new QAction(tr("Theme"),d->m_pMenu);
+-    d->m_pAssistAction = new QAction(tr("Help"),d->m_pMenu);
+-    d->m_pAboutAction = new QAction(tr("About"),d->m_pMenu);
+-    d->m_pFeedbackAction = new QAction(tr("Feedback"),d->m_pMenu);
+-    d->m_pQuitAction = new QAction(tr("Quit"),d->m_pMenu);
+-    QList<QAction*> actionList;
+-    actionList<<d->m_pSettingAction<<d->m_pThemeAction<<d->m_pAssistAction<<d->m_pAboutAction<<d->m_pFeedbackAction<<d->m_pQuitAction;
++    d->m_pSettingAction = new QAction(tr("Setting"), d->m_pMenu);
++    d->m_pThemeAction = new QAction(tr("Theme"), d->m_pMenu);
++    d->m_pAssistAction = new QAction(tr("Help"), d->m_pMenu);
++    d->m_pAboutAction = new QAction(tr("About"), d->m_pMenu);
++    d->m_pFeedbackAction = new QAction(tr("Feedback"), d->m_pMenu);
++    d->m_pQuitAction = new QAction(tr("Quit"), d->m_pMenu);
++    QList<QAction *> actionList;
++    actionList << d->m_pSettingAction << d->m_pThemeAction << d->m_pAssistAction << d->m_pAboutAction << d->m_pFeedbackAction << d->m_pQuitAction;
+     d->m_pMenu->addActions(actionList);
+     setPopupMode(QToolButton::InstantPopup);
+ 
+     d->m_pThemeMenu = new QMenu(this);
+-    d->m_pAutoAction = new QAction(tr("Auto"),d->m_pThemeMenu);
++    d->m_pAutoAction = new QAction(tr("Auto"), d->m_pThemeMenu);
+     d->m_pAutoAction->setCheckable(true);
+-    d->m_pLightAction = new QAction(tr("Light"),d->m_pThemeMenu);
++    d->m_pLightAction = new QAction(tr("Light"), d->m_pThemeMenu);
+     d->m_pLightAction->setCheckable(true);
+-    d->m_pDarkAction = new QAction(tr("Dark"),d->m_pThemeMenu);
++    d->m_pDarkAction = new QAction(tr("Dark"), d->m_pThemeMenu);
+     d->m_pDarkAction->setCheckable(true);
+-    QActionGroup * group = new QActionGroup(this);
++    QActionGroup *group = new QActionGroup(this);
+     group->addAction(d->m_pAutoAction);
+     group->addAction(d->m_pLightAction);
+     group->addAction(d->m_pDarkAction);
+ 
+-    QList<QAction*> list;
+-    list<<d->m_pAutoAction<<d->m_pLightAction<<d->m_pDarkAction;
++    QList<QAction *> list;
++    list << d->m_pAutoAction << d->m_pLightAction << d->m_pDarkAction;
+     d->m_pThemeMenu->addActions(list);
+     d->m_pThemeAction->setMenu(d->m_pThemeMenu);
+ 
+@@ -103,27 +103,28 @@ KMenuButton::KMenuButton(QWidget *parent)
+     setProperty("useIconHighlightEffect", 0x2);
+     setAutoRaise(true);
+     changeTheme();
+-    connect(m_gsetting,&QGSettings::changed,this,[=](){changeTheme();});
+-    connect(Parmscontroller::self(),&Parmscontroller::modeChanged,this,[=](){
++    connect(m_gsetting, &QGSettings::changed, this, [=]() {
++        changeTheme();
++    });
++    connect(Parmscontroller::self(), &Parmscontroller::modeChanged, this, [=]() {
+         updateGeometry();
+         update();
+     });
+ 
+     QString directoryPath = "/opt/kylin-os-manager/tools/service-support-mini";
+     QFile file(directoryPath);
+-    if(file.exists())
++    if (file.exists())
+         feedbackAction()->setVisible(true);
+     else
+         feedbackAction()->setVisible(false);
+ 
+-    connect(feedbackAction(),&QAction::triggered,this,[=]{
++    connect(feedbackAction(), &QAction::triggered, this, [=] {
+         d->feedbackShow();
+     });
+ }
+ 
+ KMenuButton::~KMenuButton()
+ {
+-
+ }
+ 
+ QMenu *KMenuButton::menu()
+@@ -211,7 +212,7 @@ QSize KMenuButton::sizeHint() const
+ }
+ 
+ KMenuButtonPrivate::KMenuButtonPrivate(KMenuButton *parent)
+-    :q_ptr(parent)
++    : q_ptr(parent)
+ {
+     setParent(parent);
+     parent->installEventFilter(this);
+@@ -222,25 +223,23 @@ void KMenuButtonPrivate::feedbackShow()
+     Q_Q(KMenuButton);
+     QString directoryPath = "/opt/kylin-os-manager/tools/service-support-mini";
+     QFile file(directoryPath);
+-    if(file.exists())
+-    {
++    if (file.exists()) {
+         QStringList arguments;
+         QString processName;
+         QString fileName = QString("/proc/%1/cmdline").arg(QApplication::applicationPid());
+         QFile file(fileName);
+-        if (file.open(QIODevice::ReadOnly))
+-        {
++        if (file.open(QIODevice::ReadOnly)) {
+             QByteArray data = file.readAll();
+             int pos = data.indexOf('\0');
+-            if (pos != -1)
+-            {
++            if (pos != -1) {
+                 QStringList list = QString::fromUtf8(data.left(pos)).trimmed().split("/");
+                 processName = list.last();
+             }
+             file.close();
+         }
+ 
+-        arguments << "-mode=1" <<"-exe=" + processName;
++        arguments << "-mode=1"
++                  << "-exe=" + processName;
+ 
+         m_feedbackProcess.startDetached(directoryPath, arguments);
+         m_feedbackProcess.waitForFinished();
+@@ -252,17 +251,15 @@ bool KMenuButtonPrivate::eventFilter(QObject *watched, QEvent *event)
+     Q_Q(KMenuButton);
+     QIcon menuIcon = QIcon::fromTheme("open-menu-symbolic");
+ 
+-    if(QEvent::WindowDeactivate == event->type())
+-    {
+-        QColor color = QColor(179,179,179);
+-        menuIcon = ThemeController::drawColoredPixmap(menuIcon.pixmap(QSize(Parmscontroller::parm(Parmscontroller::Parm::PM_WindowButtonBarSize),Parmscontroller::parm(Parmscontroller::Parm::PM_WindowButtonBarSize))),color);
++    if (QEvent::WindowDeactivate == event->type()) {
++        QColor color = QColor(179, 179, 179);
++        menuIcon = ThemeController::drawColoredPixmap(menuIcon.pixmap(QSize(Parmscontroller::parm(Parmscontroller::Parm::PM_WindowButtonBarSize), Parmscontroller::parm(Parmscontroller::Parm::PM_WindowButtonBarSize))), color);
+         q->setIcon(menuIcon);
+     }
+-    if(QEvent::WindowActivate == event->type())
+-    {
++    if (QEvent::WindowActivate == event->type()) {
+         q->setIcon(QIcon::fromTheme("open-menu-symbolic"));
+     }
+-    return QObject::eventFilter(watched,event);
++    return QObject::eventFilter(watched, event);
+ }
+ 
+ }
+diff --git a/kysdk-qtwidgets/src/kmenubutton.h b/kysdk-qtwidgets/src/kmenubutton.h
+index 26aa752..4fd4320 100644
+--- a/kysdk-qtwidgets/src/kmenubutton.h
++++ b/kysdk-qtwidgets/src/kmenubutton.h
+@@ -25,9 +25,9 @@
+ 
+ #include "gui_g.h"
+ #include "themeController.h"
+-#include <QPushButton>
+-#include <QMenu>
+ #include <QAction>
++#include <QMenu>
++#include <QPushButton>
+ #include <QToolButton>
+ 
+ namespace kdk
+@@ -43,92 +43,92 @@ class KMenuButtonPrivate;
+ /**
+  * @brief 下拉菜单按钮
+  */
+-class GUI_EXPORT KMenuButton:public QToolButton,public ThemeController
++class GUI_EXPORT KMenuButton : public QToolButton, public ThemeController
+ {
+     Q_OBJECT
+ public:
+-    KMenuButton(QWidget*parent=nullptr);
++    KMenuButton(QWidget *parent = nullptr);
+     ~KMenuButton();
+ 
+     /**
+      * @brief 获取主菜单
+      * @return
+      */
+-    QMenu* menu();
++    QMenu *menu();
+ 
+     /**
+      * @brief 获取主题菜单
+      * @return
+      */
+-    QMenu* themeMenu();
++    QMenu *themeMenu();
+ 
+     /**
+      * @brief 获取设置action
+      * @return
+      */
+-    QAction* settingAction();
++    QAction *settingAction();
+ 
+     /**
+      * @brief 获取主题Action
+      * @return
+      */
+-    QAction* themeAction();
++    QAction *themeAction();
+ 
+     /**
+      * @brief 获取帮助Action
+      * @return
+      */
+-    QAction* assistAction();
++    QAction *assistAction();
+ 
+     /**
+      * @brief 获取关于Action
+      * @return
+      */
+-    QAction* aboutAction();
++    QAction *aboutAction();
+ 
+     /**
+      * @brief 获取意见反馈Action
+      * @since 2.4.1.0-0k1.0
+      * @return
+      */
+-    QAction* feedbackAction();
++    QAction *feedbackAction();
+     /**
+      * @brief 获取离开Action
+      * @return
+      */
+-    QAction* quitAction();
++    QAction *quitAction();
+ 
+     /**
+      * @brief 获取跟随主题Action
+      * @return
+      */
+-    QAction* autoAction();
++    QAction *autoAction();
+ 
+     /**
+      * @brief 获取浅色主题Action
+      * @return
+      */
+-    QAction* lightAction();
++    QAction *lightAction();
+ 
+     /**
+      * @brief 获取深色Action
+      * @return
+      */
+-    QAction* darkAction();
++    QAction *darkAction();
+ 
+ protected:
+     void changeTheme() override;
+-    void paintEvent(QPaintEvent*painteEvent);
++    void paintEvent(QPaintEvent *painteEvent);
+     QSize sizeHint() const override;
+ 
+ private:
+     Q_DECLARE_PRIVATE(KMenuButton)
+-    KMenuButtonPrivate* const d_ptr;
++    KMenuButtonPrivate *const d_ptr;
+ };
+ }
+ /**
+-  * @example testWidget/testwidget.h
+-  * @example testWidget/testwidget.cpp
+-  * @}
+-  */
++ * @example testWidget/testwidget.h
++ * @example testWidget/testwidget.cpp
++ * @}
++ */
+ #endif // KMENUBUTTON_H
+diff --git a/kysdk-qtwidgets/src/kmessagebox.cpp b/kysdk-qtwidgets/src/kmessagebox.cpp
+old mode 100755
+new mode 100644
+index 95cdcca..28bad11
+--- a/kysdk-qtwidgets/src/kmessagebox.cpp
++++ b/kysdk-qtwidgets/src/kmessagebox.cpp
+@@ -22,36 +22,44 @@
+ 
+ #include "kmessagebox.h"
+ 
+-#include <QLabel>
++#include "themeController.h"
++#include <QApplication>
++#include <QCheckBox>
++#include <QDesktopWidget>
+ #include <QDialogButtonBox>
+-#include <QTextDocument>
+-#include <QStyle>
++#include <QLabel>
+ #include <QMessageBox>
+-#include <QApplication>
+-#include <QStyleOption>
+ #include <QPainter>
+ #include <QScreen>
++#include <QStyle>
++#include <QStyleOption>
++#include <QTextDocument>
+ #include <QVBoxLayout>
+-#include <QCheckBox>
+-#include <QApplication>
+-#include <QDesktopWidget>
+-#include "themeController.h"
+ 
+-namespace kdk {
++namespace kdk
++{
+ 
+-enum Button { Old_Ok = 1, Old_Cancel = 2, Old_Yes = 3, Old_No = 4, Old_Abort = 5, Old_Retry = 6,
+-              Old_Ignore = 7, Old_YesAll = 8, Old_NoAll = 9, Old_ButtonMask = 0xFF,
++enum Button { Old_Ok = 1,
++              Old_Cancel = 2,
++              Old_Yes = 3,
++              Old_No = 4,
++              Old_Abort = 5,
++              Old_Retry = 6,
++              Old_Ignore = 7,
++              Old_YesAll = 8,
++              Old_NoAll = 9,
++              Old_ButtonMask = 0xFF,
+               NewButtonMask = 0xFFFFFC00 };
+ 
+-static QString iconName="";
++static QString iconName = "";
+ 
+-class KMessageBoxPrivate: public QObject, public ThemeController
++class KMessageBoxPrivate : public QObject, public ThemeController
+ {
+     Q_OBJECT
+     Q_DECLARE_PUBLIC(KMessageBox)
+ 
+ public:
+-    KMessageBoxPrivate(KMessageBox*parent);
++    KMessageBoxPrivate(KMessageBox *parent);
+ 
+     void init(const QString &title = QString(), const QString &text = QString());
+     static QPixmap standardIcon(KMessageBox::Icon icon, KMessageBox *mb);
+@@ -86,13 +94,15 @@ private:
+ };
+ 
+ KMessageBox::KMessageBox(QWidget *parent)
+-    : KDialog(parent),
+-      d_ptr(new KMessageBoxPrivate(this))
++    : KDialog(parent)
++    , d_ptr(new KMessageBoxPrivate(this))
+ {
+     Q_D(KMessageBox);
+     d->init();
+     d->changeTheme();
+-    connect(d->m_gsetting,&QGSettings::changed,this,[=](){d->changeTheme();});
++    connect(d->m_gsetting, &QGSettings::changed, this, [=]() {
++        d->changeTheme();
++    });
+ }
+ 
+ KMessageBox::~KMessageBox()
+@@ -103,7 +113,7 @@ void KMessageBox::setCustomIcon(const QIcon &icon)
+ {
+     Q_D(KMessageBox);
+     d->m_iconName = icon.name();
+-    this->setIconPixmap(icon.pixmap(24,24));
++    this->setIconPixmap(icon.pixmap(24, 24));
+ }
+ 
+ void KMessageBox::addButton(QAbstractButton *button, ButtonRole role)
+@@ -203,7 +213,7 @@ void KMessageBox::setText(const QString &text)
+     Q_D(KMessageBox);
+     d->label->setText(text);
+     d->label->setWordWrap(d->label->textFormat() == Qt::RichText
+-        || (d->label->textFormat() == Qt::AutoText && Qt::mightBeRichText(text)));
++                          || (d->label->textFormat() == Qt::AutoText && Qt::mightBeRichText(text)));
+     d->updateSize();
+ }
+ 
+@@ -234,7 +244,7 @@ void KMessageBox::setInformativeText(const QString &text)
+         }
+         d->informativeLabel->setText(text);
+     }
+-        d->setupLayout();
++    d->setupLayout();
+ }
+ 
+ KMessageBox::Icon KMessageBox::icon() const
+@@ -246,7 +256,7 @@ KMessageBox::Icon KMessageBox::icon() const
+ void KMessageBox::setIcon(Icon icon)
+ {
+     Q_D(KMessageBox);
+-    setIconPixmap(KMessageBoxPrivate::standardIcon((KMessageBox::Icon)icon,this));
++    setIconPixmap(KMessageBoxPrivate::standardIcon((KMessageBox::Icon)icon, this));
+     d->icon = icon;
+ }
+ 
+@@ -279,7 +289,7 @@ void KMessageBox::setStandardButtons(KMessageBox::StandardButtons buttons)
+ 
+     QList<QAbstractButton *> buttonList = d->buttonBox->buttons();
+     if (!buttonList.contains(d->defaultButton))
+-       d->defaultButton = 0;
++        d->defaultButton = 0;
+     d->autoAddOkButton = false;
+ }
+ 
+@@ -298,12 +308,12 @@ QPushButton *KMessageBox::defaultButton() const
+ void KMessageBox::setDefaultButton(QPushButton *button)
+ {
+     Q_D(KMessageBox);
+-    if (!d->buttonBox->buttons().contains(button)){
++    if (!d->buttonBox->buttons().contains(button)) {
+         return;
+     }
+ 
+     d->defaultButton = button;
+-    button->setProperty("isImportant",true);
++    button->setProperty("isImportant", true);
+     button->setDefault(true);
+     button->setFocus();
+ }
+@@ -334,7 +344,7 @@ KMessageBox::StandardButton KMessageBox::information(QWidget *parent, const QStr
+     msgBox.setStandardButtons(buttons);
+     msgBox.setDefaultButton(defaultButton);
+     msgBox.setParent(parent);
+-    QDialogButtonBox *buttonBox = msgBox.findChild<QDialogButtonBox*>();
++    QDialogButtonBox *buttonBox = msgBox.findChild<QDialogButtonBox *>();
+     Q_ASSERT(buttonBox != 0);
+ 
+     if (msgBox.exec() == -1)
+@@ -344,114 +354,117 @@ KMessageBox::StandardButton KMessageBox::information(QWidget *parent, const QStr
+ 
+ KMessageBox::StandardButton KMessageBox::question(QWidget *parent, const QString &title, const QString &text, StandardButtons buttons, KMessageBox::StandardButton defaultButton)
+ {
+-        KMessageBox msgBox(parent);
+-        msgBox.setIcon(KMessageBox::Icon::Question);
+-        msgBox.setWindowTitle(title);
+-        msgBox.setText(text);
+-        msgBox.setStandardButtons(buttons);
+-        msgBox.setDefaultButton(defaultButton);
+-        msgBox.setParent(parent);
+-        QDialogButtonBox *buttonBox = msgBox.findChild<QDialogButtonBox*>();
+-        Q_ASSERT(buttonBox != 0);
++    KMessageBox msgBox(parent);
++    msgBox.setIcon(KMessageBox::Icon::Question);
++    msgBox.setWindowTitle(title);
++    msgBox.setText(text);
++    msgBox.setStandardButtons(buttons);
++    msgBox.setDefaultButton(defaultButton);
++    msgBox.setParent(parent);
++    QDialogButtonBox *buttonBox = msgBox.findChild<QDialogButtonBox *>();
++    Q_ASSERT(buttonBox != 0);
+ 
+-        if (msgBox.exec() == -1)
+-            return KMessageBox::Cancel;
+-        return msgBox.standardButton(msgBox.clickedButton());
++    if (msgBox.exec() == -1)
++        return KMessageBox::Cancel;
++    return msgBox.standardButton(msgBox.clickedButton());
+ }
+ 
+ KMessageBox::StandardButton KMessageBox::warning(QWidget *parent, const QString &title, const QString &text, StandardButtons buttons, KMessageBox::StandardButton defaultButton)
+ {
+-        KMessageBox msgBox(parent);
+-        msgBox.setIcon(KMessageBox::Icon::Warning);
+-        msgBox.setWindowTitle(title);
+-        msgBox.setText(text);
+-        msgBox.setStandardButtons(buttons);
+-        msgBox.setDefaultButton(defaultButton);
+-        msgBox.setParent(parent);
+-        QDialogButtonBox *buttonBox = msgBox.findChild<QDialogButtonBox*>();
+-        Q_ASSERT(buttonBox != 0);
++    KMessageBox msgBox(parent);
++    msgBox.setIcon(KMessageBox::Icon::Warning);
++    msgBox.setWindowTitle(title);
++    msgBox.setText(text);
++    msgBox.setStandardButtons(buttons);
++    msgBox.setDefaultButton(defaultButton);
++    msgBox.setParent(parent);
++    QDialogButtonBox *buttonBox = msgBox.findChild<QDialogButtonBox *>();
++    Q_ASSERT(buttonBox != 0);
+ 
+-        if (msgBox.exec() == -1)
+-            return KMessageBox::Cancel;
+-        return msgBox.standardButton(msgBox.clickedButton());
++    if (msgBox.exec() == -1)
++        return KMessageBox::Cancel;
++    return msgBox.standardButton(msgBox.clickedButton());
+ }
+ 
+ KMessageBox::StandardButton KMessageBox::critical(QWidget *parent, const QString &title, const QString &text, StandardButtons buttons, KMessageBox::StandardButton defaultButton)
+ {
+-        KMessageBox msgBox(parent);
+-        msgBox.setIcon(KMessageBox::Icon::Critical);
+-        msgBox.setWindowTitle(title);
+-        msgBox.setText(text);
+-        msgBox.setStandardButtons(buttons);
+-        msgBox.setDefaultButton(defaultButton);
+-        msgBox.setParent(parent);
+-        QDialogButtonBox *buttonBox = msgBox.findChild<QDialogButtonBox*>();
+-        Q_ASSERT(buttonBox != 0);
++    KMessageBox msgBox(parent);
++    msgBox.setIcon(KMessageBox::Icon::Critical);
++    msgBox.setWindowTitle(title);
++    msgBox.setText(text);
++    msgBox.setStandardButtons(buttons);
++    msgBox.setDefaultButton(defaultButton);
++    msgBox.setParent(parent);
++    QDialogButtonBox *buttonBox = msgBox.findChild<QDialogButtonBox *>();
++    Q_ASSERT(buttonBox != 0);
+ 
+-        if (msgBox.exec() == -1)
+-            return KMessageBox::Cancel;
+-        return msgBox.standardButton(msgBox.clickedButton());
++    if (msgBox.exec() == -1)
++        return KMessageBox::Cancel;
++    return msgBox.standardButton(msgBox.clickedButton());
+ }
+ 
+ KMessageBox::StandardButton KMessageBox::success(QWidget *parent, const QString &title, const QString &text, StandardButtons buttons, KMessageBox::StandardButton defaultButton)
+ {
+-        KMessageBox msgBox(parent);
+-        msgBox.setCustomIcon(QIcon::fromTheme("ukui-dialog-success"));
+-        msgBox.setWindowTitle(title);
+-        msgBox.setText(text);
+-        msgBox.setStandardButtons(buttons);
+-        msgBox.setDefaultButton(defaultButton);
+-        msgBox.setParent(parent);
+-        QDialogButtonBox *buttonBox = msgBox.findChild<QDialogButtonBox*>();
+-        Q_ASSERT(buttonBox != 0);
++    KMessageBox msgBox(parent);
++    msgBox.setCustomIcon(QIcon::fromTheme("ukui-dialog-success"));
++    msgBox.setWindowTitle(title);
++    msgBox.setText(text);
++    msgBox.setStandardButtons(buttons);
++    msgBox.setDefaultButton(defaultButton);
++    msgBox.setParent(parent);
++    QDialogButtonBox *buttonBox = msgBox.findChild<QDialogButtonBox *>();
++    Q_ASSERT(buttonBox != 0);
+ 
+-        if (msgBox.exec() == -1)
+-            return KMessageBox::Cancel;
+-        return msgBox.standardButton(msgBox.clickedButton());
++    if (msgBox.exec() == -1)
++        return KMessageBox::Cancel;
++    return msgBox.standardButton(msgBox.clickedButton());
+ }
+ 
+ bool KMessageBox::event(QEvent *e)
+ {
+     Q_D(KMessageBox);
+-    bool result =KDialog::event(e);
++    bool result = KDialog::event(e);
+     switch (e->type()) {
+-        case QEvent::LayoutRequest:
+-            d->updateSize();
+-            break;
+-        case QEvent::FontChange:
+-            d->updateSize();
+-            break;
+-        case QEvent::Show:
+-        {
+-            d->updateSize();
+-            QWidget *parentWindow = qobject_cast<QWidget*>(this->parent());
+-
+-            if(parentWindow && parentWindow->isActiveWindow()){
+-                const QPoint parentWindowCenter = parentWindow->geometry().center();
+-                const QPoint messageBoxCenter = this->geometry().center();
+-                const QPoint moveOffset = parentWindowCenter - messageBoxCenter;
+-                move(pos() + moveOffset);
+-            }
+-            else{
+-                QDesktopWidget desktop;
+-                int screenWidth = desktop.screen()->width();
+-                int screenHeight = desktop.screen()->height();
+-
+-                int messageBox_X = (screenWidth - this->width()) / 2;
+-                int messageBox_Y = (screenHeight - this->height()) / 2;
+-
+-                this->move(messageBox_X, messageBox_Y);
+-            }
+-            break;
++    case QEvent::LayoutRequest:
++        d->updateSize();
++        break;
++    case QEvent::FontChange:
++        d->updateSize();
++        break;
++    case QEvent::Show: {
++        d->updateSize();
++        QWidget *parentWindow = qobject_cast<QWidget *>(this->parent());
++
++        if (parentWindow && parentWindow->isActiveWindow()) {
++            const QPoint parentWindowCenter = parentWindow->geometry().center();
++            const QPoint messageBoxCenter = this->geometry().center();
++            const QPoint moveOffset = parentWindowCenter - messageBoxCenter;
++            move(pos() + moveOffset);
++        } else {
++            QDesktopWidget desktop;
++            int screenWidth = desktop.screen()->width();
++            int screenHeight = desktop.screen()->height();
++
++            int messageBox_X = (screenWidth - this->width()) / 2;
++            int messageBox_Y = (screenHeight - this->height()) / 2;
++
++            this->move(messageBox_X, messageBox_Y);
+         }
+-        default:
+-            break;
++        break;
++    }
++    default:
++        break;
+     }
+     return result;
+ }
+ 
+-KMessageBoxPrivate::KMessageBoxPrivate(KMessageBox *parent):q_ptr(parent), informativeLabel(0),
+-    checkbox(0), compatMode(false), clickedButton(0), defaultButton(0)
++KMessageBoxPrivate::KMessageBoxPrivate(KMessageBox *parent)
++    : q_ptr(parent)
++    , informativeLabel(0)
++    , checkbox(0)
++    , compatMode(false)
++    , clickedButton(0)
++    , defaultButton(0)
+ 
+ {
+     Q_Q(KMessageBox);
+@@ -474,8 +487,8 @@ void KMessageBoxPrivate::init(const QString &title, const QString &text)
+     buttonBox = new QDialogButtonBox;
+     buttonBox->setObjectName(QLatin1String("qt_kmsgbox_buttonbox"));
+     buttonBox->setCenterButtons(q->style()->styleHint(QStyle::SH_MessageBox_CenterButtons, nullptr, q));
+-    QObject::connect(buttonBox, SIGNAL(clicked(QAbstractButton*)),
+-                     this, SLOT(_q_buttonClicked(QAbstractButton*)));
++    QObject::connect(buttonBox, SIGNAL(clicked(QAbstractButton *)),
++                     this, SLOT(_q_buttonClicked(QAbstractButton *)));
+     setupLayout();
+     if (!title.isEmpty() || !text.isEmpty()) {
+         q->setWindowTitle(title);
+@@ -527,18 +540,18 @@ QPixmap KMessageBoxPrivate::standardIcon(KMessageBox::Icon icon, KMessageBox *mb
+ void KMessageBoxPrivate::setupLayout()
+ {
+     Q_Q(KMessageBox);
+-    if(q->mainWidget()->layout())
++    if (q->mainWidget()->layout())
+         delete q->mainWidget()->layout();
+ 
+     QGridLayout *grid = new QGridLayout;
+     QHBoxLayout *buttonLayout = new QHBoxLayout;
+-    buttonLayout->setContentsMargins(0,0,0,0);
++    buttonLayout->setContentsMargins(0, 0, 0, 0);
+     grid->setHorizontalSpacing(8);
+-    if(informativeLabel)
++    if (informativeLabel)
+         grid->setVerticalSpacing(8);
+     else
+         grid->setVerticalSpacing(0);
+-    grid->setContentsMargins(0,0,0,0);
++    grid->setContentsMargins(0, 0, 0, 0);
+ 
+     bool hasIcon = iconLabel->pixmap() && !iconLabel->pixmap()->isNull();
+     if (hasIcon)
+@@ -552,12 +565,12 @@ void KMessageBoxPrivate::setupLayout()
+     grid->setSizeConstraint(QLayout::SetNoConstraint);
+ 
+     QVBoxLayout *layout = new QVBoxLayout;
+-    layout->setContentsMargins(24,0,24,24);
++    layout->setContentsMargins(24, 0, 24, 24);
+ 
+     buttonLayout->setSizeConstraint(QLayout::SetNoConstraint);
+-    if(checkbox)
++    if (checkbox)
+         buttonLayout->addWidget(checkbox, 0, Qt::AlignLeft | Qt::AlignVCenter);
+-    buttonLayout->addWidget(buttonBox,0, Qt::AlignRight | Qt::AlignVCenter);
++    buttonLayout->addWidget(buttonBox, 0, Qt::AlignRight | Qt::AlignVCenter);
+ 
+     layout->setSpacing(0);
+     layout->addLayout(grid);
+@@ -572,7 +585,7 @@ void KMessageBoxPrivate::updateSize()
+ {
+     Q_Q(KMessageBox);
+ 
+-    if(!q->isVisible())
++    if (!q->isVisible())
+         return;
+ 
+     while (buttonBox->layout()->count() < buttonBox->buttons().count() + 1) {
+@@ -603,8 +616,7 @@ void KMessageBoxPrivate::updateSize()
+ 
+     q->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
+     size.setWidth(qMax(qMin(maxSize.width(), q->sizeHint().width()), minSize.width()));
+-    size.setHeight(qMax(qMin(maxSize.height(), q->layout()->hasHeightForWidth() ? q->layout()->totalHeightForWidth(size.width())
+-                                                                                : q->layout()->totalMinimumSize().height()), minSize.height()));
++    size.setHeight(qMax(qMin(maxSize.height(), q->layout()->hasHeightForWidth() ? q->layout()->totalHeightForWidth(size.width()) : q->layout()->totalMinimumSize().height()), minSize.height()));
+     q->setFixedSize(size);
+ 
+     QCoreApplication::removePostedEvents(q, QEvent::LayoutRequest);
+@@ -763,11 +775,11 @@ QAbstractButton *KMessageBoxPrivate::findButton(int button0, int button1, int bu
+ void KMessageBoxPrivate::changeTheme()
+ {
+     Q_Q(KMessageBox);
+-    if(iconName != "")
++    if (iconName != "")
+         m_iconName = iconName;
+-    q->setIconPixmap(QIcon::fromTheme(m_iconName).pixmap(24,24));
++    q->setIconPixmap(QIcon::fromTheme(m_iconName).pixmap(24, 24));
+ }
+ }
+ 
+-#include "moc_kmessagebox.cpp"
+ #include "kmessagebox.moc"
++#include "moc_kmessagebox.cpp"
+diff --git a/kysdk-qtwidgets/src/kmessagebox.h b/kysdk-qtwidgets/src/kmessagebox.h
+index be81d81..a4b5902 100644
+--- a/kysdk-qtwidgets/src/kmessagebox.h
++++ b/kysdk-qtwidgets/src/kmessagebox.h
+@@ -23,13 +23,14 @@
+ #ifndef KMESSAGEBOX_H
+ #define KMESSAGEBOX_H
+ 
+-#include <QDialog>
+-#include <QAbstractButton>
+ #include "gui_g.h"
+ #include "kdialog.h"
++#include <QAbstractButton>
+ #include <QCheckBox>
++#include <QDialog>
+ 
+-namespace kdk {
++namespace kdk
++{
+ 
+ /**
+  *   @defgroup DialogBoxModule
+@@ -80,36 +81,36 @@ public:
+      */
+     enum StandardButton {
+         // keep this in sync with QDialogButtonBox::StandardButton and QPlatformDialogHelper::StandardButton
+-        NoButton           = 0x00000000,
+-        Ok                 = 0x00000400,
+-        Save               = 0x00000800,
+-        SaveAll            = 0x00001000,
+-        Open               = 0x00002000,
+-        Yes                = 0x00004000,
+-        YesToAll           = 0x00008000,
+-        No                 = 0x00010000,
+-        NoToAll            = 0x00020000,
+-        Abort              = 0x00040000,
+-        Retry              = 0x00080000,
+-        Ignore             = 0x00100000,
+-        Close              = 0x00200000,
+-        Cancel             = 0x00400000,
+-        Discard            = 0x00800000,
+-        Help               = 0x01000000,
+-        Apply              = 0x02000000,
+-        Reset              = 0x04000000,
+-        RestoreDefaults    = 0x08000000,
+-
+-        FirstButton        = Ok,                // internal
+-        LastButton         = RestoreDefaults,   // internal
+-
+-        YesAll             = YesToAll,          // obsolete
+-        NoAll              = NoToAll,           // obsolete
+-
+-        Default            = 0x00000100,        // obsolete
+-        Escape             = 0x00000200,        // obsolete
+-        FlagMask           = 0x00000300,        // obsolete
+-        ButtonMask         = ~FlagMask          // obsolete
++        NoButton = 0x00000000,
++        Ok = 0x00000400,
++        Save = 0x00000800,
++        SaveAll = 0x00001000,
++        Open = 0x00002000,
++        Yes = 0x00004000,
++        YesToAll = 0x00008000,
++        No = 0x00010000,
++        NoToAll = 0x00020000,
++        Abort = 0x00040000,
++        Retry = 0x00080000,
++        Ignore = 0x00100000,
++        Close = 0x00200000,
++        Cancel = 0x00400000,
++        Discard = 0x00800000,
++        Help = 0x01000000,
++        Apply = 0x02000000,
++        Reset = 0x04000000,
++        RestoreDefaults = 0x08000000,
++
++        FirstButton = Ok, // internal
++        LastButton = RestoreDefaults, // internal
++
++        YesAll = YesToAll, // obsolete
++        NoAll = NoToAll, // obsolete
++
++        Default = 0x00000100, // obsolete
++        Escape = 0x00000200, // obsolete
++        FlagMask = 0x00000300, // obsolete
++        ButtonMask = ~FlagMask // obsolete
+     };
+     typedef StandardButton Button;
+ 
+@@ -123,7 +124,7 @@ public:
+      * @brief 自定义KMessageBox的提示图标
+      * @param icon
+      */
+-    void setCustomIcon(const QIcon&icon);
++    void setCustomIcon(const QIcon &icon);
+ 
+     /**
+      * @brief 添加一个自定义按钮
+@@ -138,14 +139,14 @@ public:
+      * @param role
+      * @return
+      */
+-    QPushButton* addButton(const QString &text, ButtonRole role);
++    QPushButton *addButton(const QString &text, ButtonRole role);
+ 
+     /**
+      * @brief 添加一个标准按钮并且返回这个按钮
+      * @param button
+      * @return
+      */
+-    QPushButton* addButton(StandardButton button);
++    QPushButton *addButton(StandardButton button);
+ 
+     /**
+      * @brief 移除一个按钮
+@@ -158,13 +159,13 @@ public:
+      * @param which
+      * @return
+      */
+-    QAbstractButton* button (StandardButton which) const;
++    QAbstractButton *button(StandardButton which) const;
+ 
+     /**
+      * @brief 返回已添加到消息框中的所有按钮的列表
+      * @return
+      */
+-    QList<QAbstractButton*> buttons() const;
++    QList<QAbstractButton *> buttons() const;
+ 
+     /**
+      * @brief 返回指定按钮的按钮角色,如果按钮为0或尚未添加到消息框中,此函数将返回InvalidRole
+@@ -177,7 +178,7 @@ public:
+      * @brief 返回KMessageBox中显示的复选框
+      * @return
+      */
+-    QCheckBox* checkBox() const;
++    QCheckBox *checkBox() const;
+ 
+     /**
+      * @brief 设置KMessageBox显示的复选框,未设置则为0
+@@ -195,7 +196,7 @@ public:
+      * @brief 设置KMessageBox的文本
+      * @param text
+      */
+-    void setText (const QString& text);
++    void setText(const QString &text);
+ 
+     /**
+      * @brief 获取KMessageBox信息性文本的描述
+@@ -256,7 +257,7 @@ public:
+      * @brief 返回KMessageBox的默认按钮
+      * @return
+      */
+-    QPushButton* defaultButton() const;
++    QPushButton *defaultButton() const;
+ 
+     /**
+      * @brief 设置KMessageBox的默认按钮
+@@ -274,7 +275,7 @@ public:
+      * @brief 返回被点击的按钮
+      * @return
+      */
+-    QAbstractButton* clickedButton() const;
++    QAbstractButton *clickedButton() const;
+ 
+     /**
+      * @brief 返回用于标准图标的pixmap。
+@@ -293,8 +294,8 @@ public:
+      * @return
+      */
+     static StandardButton information(QWidget *parent, const QString &title,
+-         const QString &text, StandardButtons buttons = Ok,
+-         StandardButton defaultButton = NoButton);
++                                      const QString &text, StandardButtons buttons = Ok,
++                                      StandardButton defaultButton = NoButton);
+ 
+     /**
+      * @brief 打开一个带有给定标题和文本的问题消息框
+@@ -306,8 +307,8 @@ public:
+      * @return
+      */
+     static StandardButton question(QWidget *parent, const QString &title,
+-         const QString &text, StandardButtons buttons = StandardButtons(Yes | No),
+-         StandardButton defaultButton = NoButton);
++                                   const QString &text, StandardButtons buttons = StandardButtons(Yes | No),
++                                   StandardButton defaultButton = NoButton);
+     /**
+      * @brief 打开一个带有给定标题和文本的警告消息框
+      * @param parent
+@@ -318,8 +319,8 @@ public:
+      * @return
+      */
+     static StandardButton warning(QWidget *parent, const QString &title,
+-         const QString &text, StandardButtons buttons = Ok,
+-         StandardButton defaultButton = NoButton);
++                                  const QString &text, StandardButtons buttons = Ok,
++                                  StandardButton defaultButton = NoButton);
+     /**
+      * @brief 用给定的标题和文本打开一个关键信息框
+      * @param parent
+@@ -330,8 +331,8 @@ public:
+      * @return
+      */
+     static StandardButton critical(QWidget *parent, const QString &title,
+-         const QString &text, StandardButtons buttons = Ok,
+-         StandardButton defaultButton = NoButton);
++                                   const QString &text, StandardButtons buttons = Ok,
++                                   StandardButton defaultButton = NoButton);
+     /**
+      * @brief 用给定的标题和文本打开一个成功消息框
+      * @param parent
+@@ -342,9 +343,8 @@ public:
+      * @return
+      */
+     static StandardButton success(QWidget *parent, const QString &title,
+-         const QString &text, StandardButtons buttons = Ok,
+-         StandardButton defaultButton = NoButton);
+-
++                                  const QString &text, StandardButtons buttons = Ok,
++                                  StandardButton defaultButton = NoButton);
+ 
+ Q_SIGNALS:
+     void buttonClicked(QAbstractButton *button);
+@@ -354,7 +354,7 @@ protected:
+ 
+ private:
+     Q_DECLARE_PRIVATE(KMessageBox)
+-    KMessageBoxPrivate* const d_ptr;
++    KMessageBoxPrivate *const d_ptr;
+ };
+ 
+ }
+diff --git a/kysdk-qtwidgets/src/kminicalendaritem.cpp b/kysdk-qtwidgets/src/kminicalendaritem.cpp
+index c10e239..6eb4e33 100644
+--- a/kysdk-qtwidgets/src/kminicalendaritem.cpp
++++ b/kysdk-qtwidgets/src/kminicalendaritem.cpp
+@@ -1,10 +1,10 @@
+ #pragma execution_character_set("utf-8")
+ 
+ #include "kminicalendaritem.h"
+-#include "qpainter.h"
+-#include "qevent.h"
+ #include "qdatetime.h"
+ #include "qdebug.h"
++#include "qevent.h"
++#include "qpainter.h"
+ 
+ namespace kdk
+ {
+@@ -13,44 +13,45 @@ class KMiniCalendarItemPrivate : public QObject
+     Q_OBJECT
+     Q_DECLARE_PUBLIC(KMiniCalendarItem)
+ public:
+-    KMiniCalendarItemPrivate(KMiniCalendarItem* parent);
++    KMiniCalendarItemPrivate(KMiniCalendarItem *parent);
+ 
+ private:
+-    KMiniCalendarItem* q_ptr;
+-    KMiniCalendarItem::SelectType selectType;          //选中模式
+-    KMiniCalendarItem::DayType dayType;                //当前日类型
+-    bool hover;                     //鼠标是否悬停
+-    bool pressed;                   //鼠标是否按下
+-
+-    bool select;                    //是否选中
+-    bool showLunar;                 //显示农历
+-    bool enableBorder;              //显示边框
+-
+-    QDate date;                     //当前日期
+-    QString lunar;                  //农历信息
+-
+-    QColor borderColor;             //边框颜色
+-    QColor weekColor;               //周末颜色
+-    QColor superColor;              //角标颜色
+-    QColor lunarColor;              //农历节日颜色
+-
+-    QColor currentTextColor;        //当前月文字颜色
+-    QColor otherTextColor;          //其他月文字颜色
+-    QColor selectTextColor;         //选中日期文字颜色
+-    QColor hoverTextColor;          //悬停日期文字颜色
+-
+-    QColor currentLunarColor;       //当前月农历文字颜色
+-    QColor otherLunarColor;         //其他月农历文字颜色
+-    QColor selectLunarColor;        //选中日期农历文字颜色
+-    QColor hoverLunarColor;         //悬停日期农历文字颜色
+-
+-    QColor currentBgColor;          //当前月背景颜色
+-    QColor otherBgColor;            //其他月背景颜色
+-    QColor selectBgColor;           //选中日期背景颜色
+-    QColor hoverBgColor;            //悬停日期背景颜色
++    KMiniCalendarItem *q_ptr;
++    KMiniCalendarItem::SelectType selectType; // 选中模式
++    KMiniCalendarItem::DayType dayType; // 当前日类型
++    bool hover; // 鼠标是否悬停
++    bool pressed; // 鼠标是否按下
++
++    bool select; // 是否选中
++    bool showLunar; // 显示农历
++    bool enableBorder; // 显示边框
++
++    QDate date; // 当前日期
++    QString lunar; // 农历信息
++
++    QColor borderColor; // 边框颜色
++    QColor weekColor; // 周末颜色
++    QColor superColor; // 角标颜色
++    QColor lunarColor; // 农历节日颜色
++
++    QColor currentTextColor; // 当前月文字颜色
++    QColor otherTextColor; // 其他月文字颜色
++    QColor selectTextColor; // 选中日期文字颜色
++    QColor hoverTextColor; // 悬停日期文字颜色
++
++    QColor currentLunarColor; // 当前月农历文字颜色
++    QColor otherLunarColor; // 其他月农历文字颜色
++    QColor selectLunarColor; // 选中日期农历文字颜色
++    QColor hoverLunarColor; // 悬停日期农历文字颜色
++
++    QColor currentBgColor; // 当前月背景颜色
++    QColor otherBgColor; // 其他月背景颜色
++    QColor selectBgColor; // 选中日期背景颜色
++    QColor hoverBgColor; // 悬停日期背景颜色
+ };
+ 
+-KMiniCalendarItemPrivate::KMiniCalendarItemPrivate(KMiniCalendarItem* parent) : q_ptr(parent)
++KMiniCalendarItemPrivate::KMiniCalendarItemPrivate(KMiniCalendarItem *parent)
++    : q_ptr(parent)
+ {
+     Q_Q(KMiniCalendarItem);
+     hover = false;
+@@ -86,7 +87,9 @@ KMiniCalendarItemPrivate::KMiniCalendarItemPrivate(KMiniCalendarItem* parent) :
+     hoverBgColor = QColor(204, 183, 180);
+ }
+ 
+-KMiniCalendarItem::KMiniCalendarItem(QWidget *parent) : QWidget(parent), d_ptr(new KMiniCalendarItemPrivate(this))
++KMiniCalendarItem::KMiniCalendarItem(QWidget *parent)
++    : QWidget(parent)
++    , d_ptr(new KMiniCalendarItemPrivate(this))
+ {
+     Q_D(KMiniCalendarItem);
+ }
+@@ -124,27 +127,24 @@ void KMiniCalendarItem::mouseReleaseEvent(QMouseEvent *)
+ void KMiniCalendarItem::paintEvent(QPaintEvent *)
+ {
+     Q_D(KMiniCalendarItem);
+-    //绘制准备工作,启用反锯齿
++    // 绘制准备工作,启用反锯齿
+     QPainter painter(this);
+     painter.setRenderHints(QPainter::Antialiasing | QPainter::TextAntialiasing);
+ 
+-    //绘制背景和边框
++    // 绘制背景和边框
+     drawBg(&painter);
+ 
+-    //优先绘制选中状态,其次绘制悬停状态
+-    if (d->select)
+-    {
++    // 优先绘制选中状态,其次绘制悬停状态
++    if (d->select) {
+         drawBgCurrent(&painter, d->selectBgColor);
+-    }
+-    else if (d->hover)
+-    {
++    } else if (d->hover) {
+         drawBgCurrent(&painter, d->hoverBgColor);
+     }
+ 
+-    //绘制日期
++    // 绘制日期
+     drawDay(&painter);
+ 
+-    //绘制农历信息
++    // 绘制农历信息
+     drawLunar(&painter);
+ }
+ 
+@@ -153,15 +153,14 @@ void KMiniCalendarItem::drawBg(QPainter *painter)
+     Q_D(KMiniCalendarItem);
+     painter->save();
+ 
+-    //根据当前类型选择对应的颜色
++    // 根据当前类型选择对应的颜色
+     QColor bgColor = d->currentBgColor;
+ 
+-    if (d->dayType == DayType_MonthPre || d->dayType == DayType_MonthNext)
+-    {
++    if (d->dayType == DayType_MonthPre || d->dayType == DayType_MonthNext) {
+         bgColor = d->otherBgColor;
+     }
+ 
+-    if(getEnableBorder())
++    if (getEnableBorder())
+         painter->setPen(d->borderColor);
+     else
+         painter->setPen(bgColor);
+@@ -184,18 +183,13 @@ void KMiniCalendarItem::drawBgCurrent(QPainter *painter, const QColor &color)
+     painter->setPen(Qt::NoPen);
+     painter->setBrush(color);
+ 
+-    //根据设定绘制背景样式
+-    if (d->selectType == SelectType_Rect)
+-    {
++    // 根据设定绘制背景样式
++    if (d->selectType == SelectType_Rect) {
+         painter->drawRect(rect());
+-    }
+-    else if (d->selectType == SelectType_Circle)
+-    {
++    } else if (d->selectType == SelectType_Circle) {
+         int radius = side / 2;
+         painter->drawEllipse(QPointF(width / 2, height / 2), radius, radius);
+-    }
+-    else if (d->selectType == SelectType_Triangle)
+-    {
++    } else if (d->selectType == SelectType_Triangle) {
+         int radius = side / 3;
+         QPolygon pts;
+         pts.setPoints(3, 1, 1, radius, 1, 1, radius);
+@@ -216,40 +210,31 @@ void KMiniCalendarItem::drawDay(QPainter *painter)
+ 
+     painter->save();
+ 
+-    //根据当前类型选择对应的颜色
++    // 根据当前类型选择对应的颜色
+     QColor color = d->currentTextColor;
+ 
+-    if (d->dayType == DayType_MonthPre || d->dayType == DayType_MonthNext)
+-    {
++    if (d->dayType == DayType_MonthPre || d->dayType == DayType_MonthNext) {
+         color = d->otherTextColor;
+-    }
+-    else if (d->dayType == DayType_WeekEnd)
+-    {
++    } else if (d->dayType == DayType_WeekEnd) {
+         color = d->weekColor;
+     }
+ 
+-    if (d->select)
+-    {
++    if (d->select) {
+         color = d->selectTextColor;
+-    }
+-    else if (d->hover)
+-    {
++    } else if (d->hover) {
+         color = d->hoverTextColor;
+     }
+ 
+     painter->setPen(color);
+ 
+-    if (d->showLunar)
+-    {
++    if (d->showLunar) {
+         QFont font;
+         font.setPixelSize(side / 2.7);
+         painter->setFont(font);
+ 
+         QRect dayRect = QRect(0, 0, width, height / 1.5);
+         painter->drawText(dayRect, Qt::AlignHCenter | Qt::AlignBottom, QString::number(d->date.day()));
+-    }
+-    else
+-    {
++    } else {
+         QFont font;
+         font.setPixelSize(side / 2);
+         painter->setFont(font);
+@@ -265,8 +250,7 @@ void KMiniCalendarItem::drawLunar(QPainter *painter)
+ {
+     Q_D(KMiniCalendarItem);
+ 
+-    if (!d->showLunar)
+-    {
++    if (!d->showLunar) {
+         return;
+     }
+ 
+@@ -277,24 +261,48 @@ void KMiniCalendarItem::drawLunar(QPainter *painter)
+     painter->save();
+ 
+     QStringList listDayName;
+-    listDayName << "*" << "初一" << "初二" << "初三" << "初四" << "初五" << "初六" << "初七" << "初八" << "初九" << "初十"
+-                << "十一" << "十二" << "十三" << "十四" << "十五" << "十六" << "十七" << "十八" << "十九" << "二十"
+-                << "廿一" << "廿二" << "廿三" << "廿四" << "廿五" << "廿六" << "廿七" << "廿八" << "廿九" << "三十";
+-
+-    //根据当前类型选择对应的颜色
++    listDayName << "*"
++                << "初一"
++                << "初二"
++                << "初三"
++                << "初四"
++                << "初五"
++                << "初六"
++                << "初七"
++                << "初八"
++                << "初九"
++                << "初十"
++                << "十一"
++                << "十二"
++                << "十三"
++                << "十四"
++                << "十五"
++                << "十六"
++                << "十七"
++                << "十八"
++                << "十九"
++                << "二十"
++                << "廿一"
++                << "廿二"
++                << "廿三"
++                << "廿四"
++                << "廿五"
++                << "廿六"
++                << "廿七"
++                << "廿八"
++                << "廿九"
++                << "三十";
++
++    // 根据当前类型选择对应的颜色
+     QColor color = d->currentLunarColor;
+ 
+-    if (d->dayType == DayType_MonthPre || d->dayType == DayType_MonthNext)
+-    {
++    if (d->dayType == DayType_MonthPre || d->dayType == DayType_MonthNext) {
+         color = d->otherLunarColor;
+     }
+ 
+-    if (d->select)
+-    {
++    if (d->select) {
+         color = d->selectTextColor;
+-    }
+-    else if (d->hover)
+-    {
++    } else if (d->hover) {
+         color = d->hoverTextColor;
+     }
+ 
+@@ -465,8 +473,7 @@ void KMiniCalendarItem::setSelect(bool select)
+ {
+     Q_D(KMiniCalendarItem);
+ 
+-    if (d->select != select)
+-    {
++    if (d->select != select) {
+         d->select = select;
+         update();
+     }
+@@ -476,8 +483,7 @@ void KMiniCalendarItem::setShowLunar(bool showLunar)
+ {
+     Q_D(KMiniCalendarItem);
+ 
+-    if (d->showLunar != showLunar)
+-    {
++    if (d->showLunar != showLunar) {
+         d->showLunar = showLunar;
+         update();
+     }
+@@ -487,8 +493,7 @@ void KMiniCalendarItem::setSelectType(const KMiniCalendarItem::SelectType &selec
+ {
+     Q_D(KMiniCalendarItem);
+ 
+-    if(d->selectType != selectType)
+-    {
++    if (d->selectType != selectType) {
+         d->selectType = selectType;
+         update();
+     }
+@@ -498,8 +503,7 @@ void KMiniCalendarItem::setDate(const QDate &date)
+ {
+     Q_D(KMiniCalendarItem);
+ 
+-    if (d->date != date)
+-    {
++    if (d->date != date) {
+         d->date = date;
+         update();
+     }
+@@ -509,8 +513,7 @@ void KMiniCalendarItem::setLunar(const QString &lunar)
+ {
+     Q_D(KMiniCalendarItem);
+ 
+-    if (d->lunar != lunar)
+-    {
++    if (d->lunar != lunar) {
+         d->lunar = lunar;
+         update();
+     }
+@@ -520,8 +523,7 @@ void KMiniCalendarItem::setDayType(const DayType &dayType)
+ {
+     Q_D(KMiniCalendarItem);
+ 
+-    if (d->dayType != dayType)
+-    {
++    if (d->dayType != dayType) {
+         d->dayType = dayType;
+         update();
+     }
+@@ -540,8 +542,7 @@ void KMiniCalendarItem::setEnableBorder(bool bVisible)
+ {
+     Q_D(KMiniCalendarItem);
+ 
+-    if (d->enableBorder != bVisible)
+-    {
++    if (d->enableBorder != bVisible) {
+         d->enableBorder = bVisible;
+         update();
+     }
+@@ -551,8 +552,7 @@ void KMiniCalendarItem::setBorderColor(const QColor &borderColor)
+ {
+     Q_D(KMiniCalendarItem);
+ 
+-    if (d->borderColor != borderColor)
+-    {
++    if (d->borderColor != borderColor) {
+         d->borderColor = borderColor;
+         update();
+     }
+@@ -562,8 +562,7 @@ void KMiniCalendarItem::setWeekColor(const QColor &weekColor)
+ {
+     Q_D(KMiniCalendarItem);
+ 
+-    if (d->weekColor != weekColor)
+-    {
++    if (d->weekColor != weekColor) {
+         d->weekColor = weekColor;
+         update();
+     }
+@@ -573,8 +572,7 @@ void KMiniCalendarItem::setSuperColor(const QColor &superColor)
+ {
+     Q_D(KMiniCalendarItem);
+ 
+-    if (d->superColor != superColor)
+-    {
++    if (d->superColor != superColor) {
+         d->superColor = superColor;
+         update();
+     }
+@@ -584,8 +582,7 @@ void KMiniCalendarItem::setLunarColor(const QColor &lunarColor)
+ {
+     Q_D(KMiniCalendarItem);
+ 
+-    if (d->lunarColor != lunarColor)
+-    {
++    if (d->lunarColor != lunarColor) {
+         d->lunarColor = lunarColor;
+         update();
+     }
+@@ -595,8 +592,7 @@ void KMiniCalendarItem::setCurrentTextColor(const QColor &currentTextColor)
+ {
+     Q_D(KMiniCalendarItem);
+ 
+-    if (d->currentTextColor != currentTextColor)
+-    {
++    if (d->currentTextColor != currentTextColor) {
+         d->currentTextColor = currentTextColor;
+         update();
+     }
+@@ -606,8 +602,7 @@ void KMiniCalendarItem::setOtherTextColor(const QColor &otherTextColor)
+ {
+     Q_D(KMiniCalendarItem);
+ 
+-    if (d->otherTextColor != otherTextColor)
+-    {
++    if (d->otherTextColor != otherTextColor) {
+         d->otherTextColor = otherTextColor;
+         update();
+     }
+@@ -617,8 +612,7 @@ void KMiniCalendarItem::setSelectTextColor(const QColor &selectTextColor)
+ {
+     Q_D(KMiniCalendarItem);
+ 
+-    if (d->selectTextColor != selectTextColor)
+-    {
++    if (d->selectTextColor != selectTextColor) {
+         d->selectTextColor = selectTextColor;
+         update();
+     }
+@@ -628,8 +622,7 @@ void KMiniCalendarItem::setHoverTextColor(const QColor &hoverTextColor)
+ {
+     Q_D(KMiniCalendarItem);
+ 
+-    if (d->hoverTextColor != hoverTextColor)
+-    {
++    if (d->hoverTextColor != hoverTextColor) {
+         d->hoverTextColor = hoverTextColor;
+         update();
+     }
+@@ -639,8 +632,7 @@ void KMiniCalendarItem::setCurrentLunarColor(const QColor &currentLunarColor)
+ {
+     Q_D(KMiniCalendarItem);
+ 
+-    if (d->currentLunarColor != currentLunarColor)
+-    {
++    if (d->currentLunarColor != currentLunarColor) {
+         d->currentLunarColor = currentLunarColor;
+         update();
+     }
+@@ -650,8 +642,7 @@ void KMiniCalendarItem::setOtherLunarColor(const QColor &otherLunarColor)
+ {
+     Q_D(KMiniCalendarItem);
+ 
+-    if (d->otherLunarColor != otherLunarColor)
+-    {
++    if (d->otherLunarColor != otherLunarColor) {
+         d->otherLunarColor = otherLunarColor;
+         update();
+     }
+@@ -661,8 +652,7 @@ void KMiniCalendarItem::setSelectLunarColor(const QColor &selectLunarColor)
+ {
+     Q_D(KMiniCalendarItem);
+ 
+-    if (d->selectLunarColor != selectLunarColor)
+-    {
++    if (d->selectLunarColor != selectLunarColor) {
+         d->selectLunarColor = selectLunarColor;
+         update();
+     }
+@@ -672,8 +662,7 @@ void KMiniCalendarItem::setHoverLunarColor(const QColor &hoverLunarColor)
+ {
+     Q_D(KMiniCalendarItem);
+ 
+-    if (d->hoverLunarColor != hoverLunarColor)
+-    {
++    if (d->hoverLunarColor != hoverLunarColor) {
+         d->hoverLunarColor = hoverLunarColor;
+         update();
+     }
+@@ -683,8 +672,7 @@ void KMiniCalendarItem::setCurrentBgColor(const QColor &currentBgColor)
+ {
+     Q_D(KMiniCalendarItem);
+ 
+-    if (d->currentBgColor != currentBgColor)
+-    {
++    if (d->currentBgColor != currentBgColor) {
+         d->currentBgColor = currentBgColor;
+         update();
+     }
+@@ -694,8 +682,7 @@ void KMiniCalendarItem::setOtherBgColor(const QColor &otherBgColor)
+ {
+     Q_D(KMiniCalendarItem);
+ 
+-    if (d->otherBgColor != otherBgColor)
+-    {
++    if (d->otherBgColor != otherBgColor) {
+         d->otherBgColor = otherBgColor;
+         update();
+     }
+@@ -705,8 +692,7 @@ void KMiniCalendarItem::setSelectBgColor(const QColor &selectBgColor)
+ {
+     Q_D(KMiniCalendarItem);
+ 
+-    if (d->selectBgColor != selectBgColor)
+-    {
++    if (d->selectBgColor != selectBgColor) {
+         d->selectBgColor = selectBgColor;
+         update();
+     }
+@@ -716,8 +702,7 @@ void KMiniCalendarItem::setHoverBgColor(const QColor &hoverBgColor)
+ {
+     Q_D(KMiniCalendarItem);
+ 
+-    if (d->hoverBgColor != hoverBgColor)
+-    {
++    if (d->hoverBgColor != hoverBgColor) {
+         d->hoverBgColor = hoverBgColor;
+         update();
+     }
+diff --git a/kysdk-qtwidgets/src/kminicalendaritem.h b/kysdk-qtwidgets/src/kminicalendaritem.h
+index 2fc8034..d29fefc 100644
+--- a/kysdk-qtwidgets/src/kminicalendaritem.h
++++ b/kysdk-qtwidgets/src/kminicalendaritem.h
+@@ -2,8 +2,8 @@
+ #define KMINICALENDARITEM_H
+ 
+ #include "gui_g.h"
+-#include <QWidget>
+ #include <QDate>
++#include <QWidget>
+ 
+ namespace kdk
+ {
+@@ -13,7 +13,6 @@ namespace kdk
+  *  @since 2.5
+  */
+ 
+-
+ class KMiniCalendarItemPrivate;
+ class GUI_EXPORT KMiniCalendarItem : public QWidget
+ {
+@@ -51,20 +50,18 @@ class GUI_EXPORT KMiniCalendarItem : public QWidget
+     Q_PROPERTY(QColor hoverBgColor READ getHoverBgColor WRITE setHoverBgColor)
+ 
+ public:
+-    enum DayType
+-    {
+-        DayType_MonthPre = 0,       // 上月剩余天数
+-        DayType_MonthNext = 1,      // 下个月的天数
+-        DayType_MonthCurrent = 2,   // 当月天数
+-        DayType_WeekEnd = 3         // 周末
++    enum DayType {
++        DayType_MonthPre = 0, // 上月剩余天数
++        DayType_MonthNext = 1, // 下个月的天数
++        DayType_MonthCurrent = 2, // 当月天数
++        DayType_WeekEnd = 3 // 周末
+     };
+ 
+-    enum SelectType
+-    {
+-        SelectType_Rect = 0,        //矩形背景
+-        SelectType_Circle = 1,      //圆形背景
+-        SelectType_Triangle = 2,    //带三角标
+-        SelectType_Image = 3        //图片背景
++    enum SelectType {
++        SelectType_Rect = 0, // 矩形背景
++        SelectType_Circle = 1, // 圆形背景
++        SelectType_Triangle = 2, // 带三角标
++        SelectType_Image = 3 // 图片背景
+     };
+ 
+     explicit KMiniCalendarItem(QWidget *parent = 0);
+@@ -85,195 +82,195 @@ public:
+      * @brief 获取是否选中
+      * @return
+      */
+-    bool getSelect()                const;
++    bool getSelect() const;
+ 
+     /**
+      * @brief 获取是否显示农历
+      * @return
+      */
+-    bool getShowLunar()             const;
++    bool getShowLunar() const;
+ 
+     /**
+      * @brief 获取启用边界
+      * @return
+      */
+-    bool getEnableBorder()          const;
++    bool getEnableBorder() const;
+ 
+     /**
+      * @brief 获取选择类型
+      * @return
+      */
+-    SelectType getSelectType()      const;
++    SelectType getSelectType() const;
+ 
+     /**
+      * @brief 获取当前日期
+      * @return
+      */
+-    QDate getDate()                 const;
++    QDate getDate() const;
+ 
+     /**
+      * @brief 获取农历信息
+      * @return
+      */
+-    QString getLunar()              const;
++    QString getLunar() const;
+ 
+     /**
+      * @brief 获取日期类型
+      * @return
+      */
+-    DayType getDayType()            const;
++    DayType getDayType() const;
+ 
+     /**
+      * @brief 获取边框颜色
+      * @return
+      */
+-    QColor getBorderColor()         const;
++    QColor getBorderColor() const;
+ 
+     /**
+      * @brief 获取周颜色
+      * @return
+      */
+-    QColor getWeekColor()           const;
++    QColor getWeekColor() const;
+ 
+     /**
+      * @brief 获取角标颜色
+      * @return
+      */
+-    QColor getSuperColor()          const;
++    QColor getSuperColor() const;
+ 
+     /**
+      * @brief 获取农历节日颜色
+      * @return
+      */
+-    QColor getLunarColor()          const;
++    QColor getLunarColor() const;
+ 
+     /**
+      * @brief 获取当前月文字颜色
+      * @return
+      */
+-    QColor getCurrentTextColor()    const;
++    QColor getCurrentTextColor() const;
+ 
+     /**
+      * @brief 获取其他月文字颜色
+      * @return
+      */
+-    QColor getOtherTextColor()      const;
++    QColor getOtherTextColor() const;
+ 
+     /**
+      * @brief 获取选中日期文字颜色
+      * @return
+      */
+-    QColor getSelectTextColor()     const;
++    QColor getSelectTextColor() const;
+ 
+     /**
+      * @brief 获取悬停日期文字颜色
+      * @return
+      */
+-    QColor getHoverTextColor()      const;
++    QColor getHoverTextColor() const;
+ 
+     /**
+      * @brief 获取当前月农历文字颜色
+      * @return
+      */
+-    QColor getCurrentLunarColor()   const;
++    QColor getCurrentLunarColor() const;
+ 
+     /**
+      * @brief 获取其他月农历文字颜色
+      * @return
+      */
+-    QColor getOtherLunarColor()     const;
++    QColor getOtherLunarColor() const;
+ 
+     /**
+      * @brief 获取选中日期农历文字颜色
+      * @return
+      */
+-    QColor getSelectLunarColor()    const;
++    QColor getSelectLunarColor() const;
+ 
+     /**
+      * @brief 获取悬停日期农历文字颜色
+      * @return
+      */
+-    QColor getHoverLunarColor()     const;
++    QColor getHoverLunarColor() const;
+ 
+     /**
+      * @brief 获取当前月背景颜色
+      * @return
+      */
+-    QColor getCurrentBgColor()      const;
++    QColor getCurrentBgColor() const;
+ 
+     /**
+      * @brief 获取其他月背景颜色
+      * @return
+      */
+-    QColor getOtherBgColor()        const;
++    QColor getOtherBgColor() const;
+ 
+     /**
+      * @brief 获取选中日期背景颜色
+      * @return
+      */
+-    QColor getSelectBgColor()       const;
++    QColor getSelectBgColor() const;
+ 
+     /**
+      * @brief 获取悬停日期背景颜色
+      * @return
+      */
+-    QColor getHoverBgColor()        const;
++    QColor getHoverBgColor() const;
+ 
+-    QSize sizeHint()                const;
+-    QSize minimumSizeHint()         const;
++    QSize sizeHint() const;
++    QSize minimumSizeHint() const;
+ 
+ public Q_SLOTS:
+-    //设置是否选中
++    // 设置是否选中
+     void setSelect(bool select);
+-    //设置是否显示农历信息
++    // 设置是否显示农历信息
+     void setShowLunar(bool showLunar);
+-    //设置选中背景样式
++    // 设置选中背景样式
+     void setSelectType(const SelectType &selectType);
+ 
+-    //设置日期
++    // 设置日期
+     void setDate(const QDate &date);
+-    //设置农历
++    // 设置农历
+     void setLunar(const QString &lunar);
+-    //设置类型
++    // 设置类型
+     void setDayType(const DayType &dayType);
+-    //设置日期/农历/类型
++    // 设置日期/农历/类型
+     void setDate(const QDate &date, const QString &lunar, const DayType &dayType);
+-    //是否显示边框
++    // 是否显示边框
+     void setEnableBorder(bool bVisible);
+-    //设置边框颜色
++    // 设置边框颜色
+     void setBorderColor(const QColor &borderColor);
+-    //设置周末颜色
++    // 设置周末颜色
+     void setWeekColor(const QColor &weekColor);
+-    //设置角标颜色
++    // 设置角标颜色
+     void setSuperColor(const QColor &superColor);
+-    //设置农历节日颜色
++    // 设置农历节日颜色
+     void setLunarColor(const QColor &lunarColor);
+ 
+-    //设置当前月文字颜色
++    // 设置当前月文字颜色
+     void setCurrentTextColor(const QColor &currentTextColor);
+-    //设置其他月文字颜色
++    // 设置其他月文字颜色
+     void setOtherTextColor(const QColor &otherTextColor);
+-    //设置选中日期文字颜色
++    // 设置选中日期文字颜色
+     void setSelectTextColor(const QColor &selectTextColor);
+-    //设置悬停日期文字颜色
++    // 设置悬停日期文字颜色
+     void setHoverTextColor(const QColor &hoverTextColor);
+ 
+-    //设置当前月农历文字颜色
++    // 设置当前月农历文字颜色
+     void setCurrentLunarColor(const QColor &currentLunarColor);
+-    //设置其他月农历文字颜色
++    // 设置其他月农历文字颜色
+     void setOtherLunarColor(const QColor &otherLunarColor);
+-    //设置选中日期农历文字颜色
++    // 设置选中日期农历文字颜色
+     void setSelectLunarColor(const QColor &selectLunarColor);
+-    //设置悬停日期农历文字颜色
++    // 设置悬停日期农历文字颜色
+     void setHoverLunarColor(const QColor &hoverLunarColor);
+ 
+-    //设置当前月背景颜色
++    // 设置当前月背景颜色
+     void setCurrentBgColor(const QColor &currentBgColor);
+-    //设置其他月背景颜色
++    // 设置其他月背景颜色
+     void setOtherBgColor(const QColor &otherBgColor);
+-    //设置选中日期背景颜色
++    // 设置选中日期背景颜色
+     void setSelectBgColor(const QColor &selectBgColor);
+-    //设置悬停日期背景颜色
++    // 设置悬停日期背景颜色
+     void setHoverBgColor(const QColor &hoverBgColor);
+ 
+ signals:
+@@ -281,7 +278,7 @@ signals:
+ 
+ private:
+     Q_DECLARE_PRIVATE(KMiniCalendarItem)
+-    KMiniCalendarItemPrivate* const d_ptr;
++    KMiniCalendarItemPrivate *const d_ptr;
+ };
+ }
+ 
+diff --git a/kysdk-qtwidgets/src/kminicalendarwidget.cpp b/kysdk-qtwidgets/src/kminicalendarwidget.cpp
+index a74e4ca..f328a9b 100644
+--- a/kysdk-qtwidgets/src/kminicalendarwidget.cpp
++++ b/kysdk-qtwidgets/src/kminicalendarwidget.cpp
+@@ -1,14 +1,14 @@
+ #pragma execution_character_set("utf-8")
+ 
+ #include "kminicalendarwidget.h"
+-#include "qfontdatabase.h"
++#include "kborderlessbutton.h"
++#include "kpushbutton.h"
+ #include "qdatetime.h"
++#include "qfontdatabase.h"
+ #include "qlayout.h"
++#include "themeController.h"
+ #include <QPainter>
+ #include <QPainterPath>
+-#include "kpushbutton.h"
+-#include "kborderlessbutton.h"
+-#include "themeController.h"
+ 
+ namespace kdk
+ {
+@@ -17,47 +17,48 @@ class KMiniCalendarWidgetPrivate : public QObject
+     Q_DECLARE_PUBLIC(KMiniCalendarWidget)
+     Q_OBJECT
+ public:
+-    KMiniCalendarWidgetPrivate(KMiniCalendarWidget* parent);
++    KMiniCalendarWidgetPrivate(KMiniCalendarWidget *parent);
+ 
+ private:
+-    KMiniCalendarWidget* q_ptr;
+-    KMiniCalendarWidget::CalendarStyle calendarStyle;        //整体样式
+-    KMiniCalendarWidget::WeekNameFormat weekNameFormat;      //星期名称格式
+-    KMiniCalendarWidget::SelectType selectType;              //选中模式
+-    bool btnClick;                      //按钮单击,避开下拉选择重复触发
+-    QLabel *labelYearMonth;             //年月
+-    QList<QLabel *> labWeeks;           //顶部星期名称
+-    QList<KMiniCalendarItem *> dayItems;//日期元素
+-
+-    QDate date;                         //当前日期
+-
+-    QColor weekTextColor;               //星期名称文字颜色
+-    QColor weekBgColor;                 //星期名称背景色
+-
+-    bool showLunar;                     //显示农历
+-    bool enableBorder;                  //显示边框
+-
+-    QColor borderColor;                 //边框颜色
+-    QColor weekColor;                   //周末颜色
+-    QColor lunarColor;                  //农历节日颜色
+-
+-    QColor currentTextColor;            //当前月文字颜色
+-    QColor otherTextColor;              //其他月文字颜色
+-    QColor selectTextColor;             //选中日期文字颜色
+-    QColor hoverTextColor;              //悬停日期文字颜色
+-
+-    QColor currentLunarColor;           //当前月农历文字颜色
+-    QColor otherLunarColor;             //其他月农历文字颜色
+-    QColor selectLunarColor;            //选中日期农历文字颜色
+-    QColor hoverLunarColor;             //悬停日期农历文字颜色
+-
+-    QColor currentBgColor;              //当前月背景颜色
+-    QColor otherBgColor;                //其他月背景颜色
+-    QColor selectBgColor;               //选中日期背景颜色
+-    QColor hoverBgColor;                //悬停日期背景颜色
++    KMiniCalendarWidget *q_ptr;
++    KMiniCalendarWidget::CalendarStyle calendarStyle; // 整体样式
++    KMiniCalendarWidget::WeekNameFormat weekNameFormat; // 星期名称格式
++    KMiniCalendarWidget::SelectType selectType; // 选中模式
++    bool btnClick; // 按钮单击,避开下拉选择重复触发
++    QLabel *labelYearMonth; // 年月
++    QList<QLabel *> labWeeks; // 顶部星期名称
++    QList<KMiniCalendarItem *> dayItems; // 日期元素
++
++    QDate date; // 当前日期
++
++    QColor weekTextColor; // 星期名称文字颜色
++    QColor weekBgColor; // 星期名称背景色
++
++    bool showLunar; // 显示农历
++    bool enableBorder; // 显示边框
++
++    QColor borderColor; // 边框颜色
++    QColor weekColor; // 周末颜色
++    QColor lunarColor; // 农历节日颜色
++
++    QColor currentTextColor; // 当前月文字颜色
++    QColor otherTextColor; // 其他月文字颜色
++    QColor selectTextColor; // 选中日期文字颜色
++    QColor hoverTextColor; // 悬停日期文字颜色
++
++    QColor currentLunarColor; // 当前月农历文字颜色
++    QColor otherLunarColor; // 其他月农历文字颜色
++    QColor selectLunarColor; // 选中日期农历文字颜色
++    QColor hoverLunarColor; // 悬停日期农历文字颜色
++
++    QColor currentBgColor; // 当前月背景颜色
++    QColor otherBgColor; // 其他月背景颜色
++    QColor selectBgColor; // 选中日期背景颜色
++    QColor hoverBgColor; // 悬停日期背景颜色
+ };
+ 
+-KMiniCalendarWidgetPrivate::KMiniCalendarWidgetPrivate(KMiniCalendarWidget* parent) : q_ptr(parent)
++KMiniCalendarWidgetPrivate::KMiniCalendarWidgetPrivate(KMiniCalendarWidget *parent)
++    : q_ptr(parent)
+ {
+     Q_Q(KMiniCalendarWidget);
+     btnClick = false;
+@@ -93,7 +94,9 @@ KMiniCalendarWidgetPrivate::KMiniCalendarWidgetPrivate(KMiniCalendarWidget* pare
+     hoverBgColor = QColor(180, 180, 180);
+ }
+ 
+-KMiniCalendarWidget::KMiniCalendarWidget(QWidget *parent) : QWidget(parent), d_ptr(new KMiniCalendarWidgetPrivate(this))
++KMiniCalendarWidget::KMiniCalendarWidget(QWidget *parent)
++    : QWidget(parent)
++    , d_ptr(new KMiniCalendarWidgetPrivate(this))
+ {
+     Q_D(KMiniCalendarWidget);
+     setWindowFlags(Qt::Popup | Qt::FramelessWindowHint);
+@@ -113,19 +116,19 @@ void KMiniCalendarWidget::initWidget()
+     Q_D(KMiniCalendarWidget);
+     this->setObjectName("miniCalendarWidget");
+ 
+-    //顶部widget
++    // 顶部widget
+     QWidget *widgetTop = new QWidget();
+     widgetTop->setObjectName("widgetTop");
+     widgetTop->setMinimumHeight(36);
+ 
+-    //上个月按钮
++    // 上个月按钮
+     kdk::KBorderlessButton *btnPrevMonth = new kdk::KBorderlessButton();
+     btnPrevMonth->setObjectName("btnPrevMonth");
+     btnPrevMonth->setFixedSize(45, 36);
+     btnPrevMonth->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Expanding);
+     btnPrevMonth->setIcon(QIcon::fromTheme("ukui-start-symbolic"));
+ 
+-    //下个月按钮
++    // 下个月按钮
+     kdk::KBorderlessButton *btnNextMonth = new kdk::KBorderlessButton();
+     btnNextMonth->setObjectName("btnNextMonth");
+     btnNextMonth->setFixedSize(45, 36);
+@@ -140,25 +143,24 @@ void KMiniCalendarWidget::initWidget()
+     labelFont.setPixelSize(14);
+     d->labelYearMonth->setFont(labelFont);
+ 
+-    //顶部横向布局
++    // 顶部横向布局
+     QHBoxLayout *layoutTop = new QHBoxLayout(widgetTop);
+     layoutTop->setContentsMargins(0, 0, 0, 0);
+     layoutTop->addWidget(btnPrevMonth);
+     layoutTop->addWidget(d->labelYearMonth);
+     layoutTop->addWidget(btnNextMonth);
+ 
+-    //星期widget
++    // 星期widget
+     QWidget *widgetWeek = new QWidget();
+     widgetWeek->setObjectName("widgetWeek");
+     widgetWeek->setMinimumHeight(30);
+ 
+-    //星期布局
++    // 星期布局
+     QHBoxLayout *layoutWeek = new QHBoxLayout(widgetWeek);
+     layoutWeek->setMargin(0);
+     layoutWeek->setSpacing(0);
+ 
+-    for (int i = 0; i < 7; i++)
+-    {
++    for (int i = 0; i < 7; i++) {
+         QLabel *lab = new QLabel;
+         lab->setAlignment(Qt::AlignCenter);
+         layoutWeek->addWidget(lab);
+@@ -167,27 +169,26 @@ void KMiniCalendarWidget::initWidget()
+ 
+     setWeekNameFormat(WeekNameFormat_Long);
+ 
+-    //日期标签widget
++    // 日期标签widget
+     QWidget *widgetBody = new QWidget();
+     widgetBody->setObjectName("widgetBody");
+ 
+-    //日期标签布局
++    // 日期标签布局
+     QGridLayout *layoutBody = new QGridLayout(widgetBody);
+     layoutBody->setMargin(0);
+     layoutBody->setHorizontalSpacing(0);
+     layoutBody->setVerticalSpacing(0);
+ 
+-    //逐个添加日标签
+-    for (int i = 0; i < 42; i++)
+-    {
++    // 逐个添加日标签
++    for (int i = 0; i < 42; i++) {
+         KMiniCalendarItem *lab = new KMiniCalendarItem();
+         lab->setObjectName("KMiniCalendarItem");
+-        connect(lab, SIGNAL(clicked(QDate,KMiniCalendarItem::DayType)), this, SLOT(slotClicked(QDate,KMiniCalendarItem::DayType)));
++        connect(lab, SIGNAL(clicked(QDate, KMiniCalendarItem::DayType)), this, SLOT(slotClicked(QDate, KMiniCalendarItem::DayType)));
+         layoutBody->addWidget(lab, i / 7, i % 7);
+         d->dayItems.append(lab);
+     }
+ 
+-    //主布局
++    // 主布局
+     QVBoxLayout *verLayoutCalendar = new QVBoxLayout(this);
+     verLayoutCalendar->setContentsMargins(15, 10, 15, 15);
+     verLayoutCalendar->setSpacing(0);
+@@ -195,7 +196,7 @@ void KMiniCalendarWidget::initWidget()
+     verLayoutCalendar->addWidget(widgetWeek);
+     verLayoutCalendar->addWidget(widgetBody, 1);
+ 
+-    //绑定按钮和下拉框信号
++    // 绑定按钮和下拉框信号
+     connect(btnPrevMonth, SIGNAL(clicked(bool)), this, SLOT(showPreviousMonth()));
+     connect(btnNextMonth, SIGNAL(clicked(bool)), this, SLOT(showNextMonth()));
+ }
+@@ -203,30 +204,25 @@ void KMiniCalendarWidget::initWidget()
+ void KMiniCalendarWidget::initStyle()
+ {
+     Q_D(KMiniCalendarWidget);
+-    //设置样式
++    // 设置样式
+     QStringList qss;
+-    //星期名称样式
++    // 星期名称样式
+     qss.append(QString("QLabel{background:%1;color:%2;}").arg(d->weekBgColor.name()).arg(d->weekTextColor.name()));
+-    //边框
++    // 边框
+     qss.append("QWidget#widgetBody{border:0px;}");
+ 
+-    //顶部下拉框
++    // 顶部下拉框
+     qss.append(QString("QToolButton{padding:0px;background:none;border:none;border-radius:5px;}"));
+-    //qss.append(QString("QToolButton:hover{background:rgb(180,180,180);color:#FFFFFF;}"));
++    // qss.append(QString("QToolButton:hover{background:rgb(180,180,180);color:#FFFFFF;}"));
+ 
+-    //自定义日控件颜色
++    // 自定义日控件颜色
+     QString strSelectType;
+ 
+-    if (d->selectType == SelectType_Rect)
+-    {
++    if (d->selectType == SelectType_Rect) {
+         strSelectType = "SelectType_Rect";
+-    }
+-    else if (d->selectType == SelectType_Circle)
+-    {
++    } else if (d->selectType == SelectType_Circle) {
+         strSelectType = "SelectType_Circle";
+-    }
+-    else if (d->selectType == SelectType_Triangle)
+-    {
++    } else if (d->selectType == SelectType_Triangle) {
+         strSelectType = "SelectType_Triangle";
+     }
+ 
+@@ -248,8 +244,7 @@ void KMiniCalendarWidget::initStyle()
+     qss.append(QString("KMiniCalendarItem{qproperty-selectBgColor:%1;}").arg(d->selectBgColor.name()));
+     qss.append(QString("KMiniCalendarItem{qproperty-hoverBgColor:%1;}").arg(d->hoverBgColor.name()));
+ 
+-    for(KMiniCalendarItem * dayItem : d->dayItems)
+-    {
++    for (KMiniCalendarItem *dayItem : d->dayItems) {
+         dayItem->setShowLunar(d->showLunar);
+         dayItem->setSelectType(static_cast<kdk::KMiniCalendarItem::SelectType>(d->selectType));
+         dayItem->setBorderColor(d->borderColor.name());
+@@ -272,56 +267,51 @@ void KMiniCalendarWidget::initStyle()
+     this->setStyleSheet(qss.join(""));
+ }
+ 
+-//初始化日期面板
++// 初始化日期面板
+ void KMiniCalendarWidget::initDate()
+ {
+     Q_D(KMiniCalendarWidget);
+     int year = d->date.year();
+     int month = d->date.month();
+ 
+-    //设置为今天,设置变量防止重复触发
++    // 设置为今天,设置变量防止重复触发
+     d->btnClick = true;
+     d->labelYearMonth->setText(QString("%1年%2月").arg(year).arg(month));
+     d->btnClick = false;
+ 
+-    //首先判断当前月的第一天是星期几
++    // 首先判断当前月的第一天是星期几
+     int week = KLunarCalendarInfo::Instance()->getFirstDayOfWeek(year, month, false);
+-    //当前月天数
++    // 当前月天数
+     int countDay = KLunarCalendarInfo::Instance()->getMonthDays(year, month);
+-    //上月天数
++    // 上月天数
+     int countDayPre = KLunarCalendarInfo::Instance()->getMonthDays(1 == month ? year - 1 : year, 1 == month ? 12 : month - 1);
+ 
+-    //如果上月天数上月刚好一周则另外处理
++    // 如果上月天数上月刚好一周则另外处理
+     int startPre, endPre, startNext, endNext, index, tempYear, tempMonth, tempDay;
+ 
+-    if (0 == week)
+-    {
++    if (0 == week) {
+         startPre = 0;
+         endPre = 7;
+         startNext = 0;
+         endNext = 42 - (countDay + 7);
+-    }
+-    else
+-    {
++    } else {
+         startPre = 0;
+         endPre = week;
+         startNext = week + countDay;
+         endNext = 42;
+     }
+ 
+-    //纠正1月份前面部分偏差,1月份前面部分是上一年12月份
++    // 纠正1月份前面部分偏差,1月份前面部分是上一年12月份
+     tempYear = year;
+     tempMonth = month - 1;
+ 
+-    if (tempMonth < 1)
+-    {
++    if (tempMonth < 1) {
+         tempYear--;
+         tempMonth = 12;
+     }
+ 
+-    //显示上月天数
+-    for (int i = startPre; i < endPre; i++)
+-    {
++    // 显示上月天数
++    for (int i = startPre; i < endPre; i++) {
+         index = i;
+         tempDay = countDayPre - endPre + i + 1;
+ 
+@@ -330,19 +320,17 @@ void KMiniCalendarWidget::initDate()
+         d->dayItems.at(index)->setDate(date, lunar, KMiniCalendarItem::DayType_MonthPre);
+     }
+ 
+-    //纠正12月份后面部分偏差,12月份后面部分是下一年1月份
++    // 纠正12月份后面部分偏差,12月份后面部分是下一年1月份
+     tempYear = year;
+     tempMonth = month + 1;
+ 
+-    if (tempMonth > 12)
+-    {
++    if (tempMonth > 12) {
+         tempYear++;
+         tempMonth = 1;
+     }
+ 
+-    //显示下月天数
+-    for (int i = startNext; i < endNext; i++)
+-    {
++    // 显示下月天数
++    for (int i = startNext; i < endNext; i++) {
+         index = 42 - endNext + i;
+         tempDay = i - startNext + 1;
+ 
+@@ -351,25 +339,21 @@ void KMiniCalendarWidget::initDate()
+         d->dayItems.at(index)->setDate(date, lunar, KMiniCalendarItem::DayType_MonthNext);
+     }
+ 
+-    //重新置为当前年月
++    // 重新置为当前年月
+     tempYear = year;
+     tempMonth = month;
+ 
+-    //显示当前月
+-    for (int i = week; i < (countDay + week); i++)
+-    {
++    // 显示当前月
++    for (int i = week; i < (countDay + week); i++) {
+         index = (0 == week ? (i + 7) : i);
+         tempDay = i - week + 1;
+ 
+         QDate date(tempYear, tempMonth, tempDay);
+         QString lunar = KLunarCalendarInfo::Instance()->getLunarDay(tempYear, tempMonth, tempDay);
+ 
+-        if (0 == (i % 7) || 6 == (i % 7))
+-        {
++        if (0 == (i % 7) || 6 == (i % 7)) {
+             d->dayItems.at(index)->setDate(date, lunar, KMiniCalendarItem::DayType_WeekEnd);
+-        }
+-        else
+-        {
++        } else {
+             d->dayItems.at(index)->setDate(date, lunar, KMiniCalendarItem::DayType_MonthCurrent);
+         }
+     }
+@@ -382,18 +366,13 @@ void KMiniCalendarWidget::slotClicked(const QDate &date, const KMiniCalendarItem
+     Q_D(KMiniCalendarWidget);
+     d->date = date;
+ 
+-    if (KMiniCalendarItem::DayType_MonthPre == dayType)
+-    {
++    if (KMiniCalendarItem::DayType_MonthPre == dayType) {
+         d->date = date.addMonths(1);
+         showPreviousMonth();
+-    }
+-    else if (KMiniCalendarItem::DayType_MonthNext == dayType)
+-    {
++    } else if (KMiniCalendarItem::DayType_MonthNext == dayType) {
+         d->date = date.addMonths(-1);
+         showNextMonth();
+-    }
+-    else
+-    {
++    } else {
+         dayChanged(d->date);
+     }
+ 
+@@ -403,37 +382,35 @@ void KMiniCalendarWidget::slotClicked(const QDate &date, const KMiniCalendarItem
+ void KMiniCalendarWidget::dayChanged(const QDate &date)
+ {
+     Q_D(KMiniCalendarWidget);
+-    //计算星期几,当前天对应标签索引=日期+星期几-1
++    // 计算星期几,当前天对应标签索引=日期+星期几-1
+     int year = date.year();
+     int month = date.month();
+     int day = date.day();
+     int week = KLunarCalendarInfo::Instance()->getFirstDayOfWeek(year, month, false);
+-    //qDebug() << QString("%1-%2-%3").arg(year).arg(month).arg(day);
++    // qDebug() << QString("%1-%2-%3").arg(year).arg(month).arg(day);
+ 
+-    //选中当前日期,其他日期恢复,这里还有优化空间,比方说类似单选框机制
+-    for (int i = 0; i < 42; i++)
+-    {
+-        //当月第一天是星期天要另外计算
++    // 选中当前日期,其他日期恢复,这里还有优化空间,比方说类似单选框机制
++    for (int i = 0; i < 42; i++) {
++        // 当月第一天是星期天要另外计算
+         int index = day + week - 1;
+ 
+-        if (week == 0)
+-        {
++        if (week == 0) {
+             index = day + 6;
+         }
+ 
+         d->dayItems.at(i)->setSelect(i == index);
+     }
+ 
+-    //发送日期单击信号
++    // 发送日期单击信号
+     emit clicked(date);
+-    //发送日期更新信号
++    // 发送日期更新信号
+     emit selectionChanged();
+ }
+ 
+ void KMiniCalendarWidget::dateChanged(int year, int month, int day)
+ {
+     Q_D(KMiniCalendarWidget);
+-    //如果原有天大于28则设置为1,防止出错
++    // 如果原有天大于28则设置为1,防止出错
+     d->date.setDate(year, month, day > 28 ? 1 : day);
+     initDate();
+ }
+@@ -588,7 +565,7 @@ QSize KMiniCalendarWidget::minimumSizeHint() const
+     return QSize(200, 150);
+ }
+ 
+-//显示上月日期
++// 显示上月日期
+ void KMiniCalendarWidget::showPreviousMonth()
+ {
+     Q_D(KMiniCalendarWidget);
+@@ -596,15 +573,13 @@ void KMiniCalendarWidget::showPreviousMonth()
+     int month = d->date.month();
+     int day = d->date.day();
+ 
+-    if (year <= 1901 && month == 1)
+-    {
++    if (year <= 1901 && month == 1) {
+         return;
+     }
+ 
+     month--;
+ 
+-    if (month < 1)
+-    {
++    if (month < 1) {
+         month = 12;
+         year--;
+     }
+@@ -612,7 +587,7 @@ void KMiniCalendarWidget::showPreviousMonth()
+     dateChanged(year, month, day);
+ }
+ 
+-//显示下月日期
++// 显示下月日期
+ void KMiniCalendarWidget::showNextMonth()
+ {
+     Q_D(KMiniCalendarWidget);
+@@ -620,15 +595,13 @@ void KMiniCalendarWidget::showNextMonth()
+     int month = d->date.month();
+     int day = d->date.day();
+ 
+-    if (year >= 2099 && month == 12)
+-    {
++    if (year >= 2099 && month == 12) {
+         return;
+     }
+ 
+     month++;
+ 
+-    if (month > 12)
+-    {
++    if (month > 12) {
+         month = 1;
+         year++;
+     }
+@@ -636,7 +609,7 @@ void KMiniCalendarWidget::showNextMonth()
+     dateChanged(year, month, day);
+ }
+ 
+-//转到今天
++// 转到今天
+ void KMiniCalendarWidget::showToday()
+ {
+     Q_D(KMiniCalendarWidget);
+@@ -649,8 +622,7 @@ void KMiniCalendarWidget::setCalendarStyle(const KMiniCalendarWidget::CalendarSt
+ {
+     Q_D(KMiniCalendarWidget);
+ 
+-    if (d->calendarStyle != calendarStyle)
+-    {
++    if (d->calendarStyle != calendarStyle) {
+         d->calendarStyle = calendarStyle;
+     }
+ }
+@@ -659,32 +631,47 @@ void KMiniCalendarWidget::setWeekNameFormat(const KMiniCalendarWidget::WeekNameF
+ {
+     Q_D(KMiniCalendarWidget);
+ 
+-    if (d->weekNameFormat != weekNameFormat)
+-    {
++    if (d->weekNameFormat != weekNameFormat) {
+         d->weekNameFormat = weekNameFormat;
+ 
+         QStringList listWeek;
+ 
+-        if (weekNameFormat == WeekNameFormat_Short)
+-        {
+-            listWeek << "一" << "二" << "三" << "四" << "五" << "六" << "日" ;
+-        }
+-        else if (weekNameFormat == WeekNameFormat_Normal)
+-        {
+-            listWeek << "周一" << "周二" << "周三" << "周四" << "周五" << "周六" << "周日";
+-        }
+-        else if (weekNameFormat == WeekNameFormat_Long)
+-        {
+-            listWeek << "星期一" << "星期二" << "星期三" << "星期四" << "星期五" << "星期六" << "星期天";
+-        }
+-        else if (weekNameFormat == WeekNameFormat_En)
+-        {
+-            listWeek << "Mon" << "Tue" << "Wed" << "Thu" << "Fri" << "Sat" << "Sun";
++        if (weekNameFormat == WeekNameFormat_Short) {
++            listWeek << "一"
++                     << "二"
++                     << "三"
++                     << "四"
++                     << "五"
++                     << "六"
++                     << "日";
++        } else if (weekNameFormat == WeekNameFormat_Normal) {
++            listWeek << "周一"
++                     << "周二"
++                     << "周三"
++                     << "周四"
++                     << "周五"
++                     << "周六"
++                     << "周日";
++        } else if (weekNameFormat == WeekNameFormat_Long) {
++            listWeek << "星期一"
++                     << "星期二"
++                     << "星期三"
++                     << "星期四"
++                     << "星期五"
++                     << "星期六"
++                     << "星期天";
++        } else if (weekNameFormat == WeekNameFormat_En) {
++            listWeek << "Mon"
++                     << "Tue"
++                     << "Wed"
++                     << "Thu"
++                     << "Fri"
++                     << "Sat"
++                     << "Sun";
+         }
+ 
+-        //逐个添加日期文字
+-        for (int i = 0; i < 7; i++)
+-        {
++        // 逐个添加日期文字
++        for (int i = 0; i < 7; i++) {
+             d->labWeeks.at(i)->setText(listWeek.at(i));
+         }
+     }
+@@ -694,8 +681,7 @@ void KMiniCalendarWidget::setDate(const QDate &date)
+ {
+     Q_D(KMiniCalendarWidget);
+ 
+-    if (d->date != date)
+-    {
++    if (d->date != date) {
+         d->date = date;
+         initDate();
+     }
+@@ -705,8 +691,7 @@ void KMiniCalendarWidget::setWeekTextColor(const QColor &weekTextColor)
+ {
+     Q_D(KMiniCalendarWidget);
+ 
+-    if (d->weekTextColor != weekTextColor)
+-    {
++    if (d->weekTextColor != weekTextColor) {
+         d->weekTextColor = weekTextColor;
+         initStyle();
+     }
+@@ -716,8 +701,7 @@ void KMiniCalendarWidget::setWeekBgColor(const QColor &weekBgColor)
+ {
+     Q_D(KMiniCalendarWidget);
+ 
+-    if (d->weekBgColor != weekBgColor)
+-    {
++    if (d->weekBgColor != weekBgColor) {
+         d->weekBgColor = weekBgColor;
+         initStyle();
+     }
+@@ -727,8 +711,7 @@ void KMiniCalendarWidget::setShowLunar(bool showLunar)
+ {
+     Q_D(KMiniCalendarWidget);
+ 
+-    if(d->showLunar != showLunar)
+-    {
++    if (d->showLunar != showLunar) {
+         d->showLunar = showLunar;
+         initStyle();
+     }
+@@ -738,8 +721,7 @@ void KMiniCalendarWidget::setEnableBorder(bool bVisible)
+ {
+     Q_D(KMiniCalendarWidget);
+ 
+-    if (d->enableBorder != bVisible)
+-    {
++    if (d->enableBorder != bVisible) {
+         d->enableBorder = bVisible;
+         update();
+     }
+@@ -749,8 +731,7 @@ void KMiniCalendarWidget::setSelectType(const KMiniCalendarWidget::SelectType &s
+ {
+     Q_D(KMiniCalendarWidget);
+ 
+-    if (d->selectType != selectType)
+-    {
++    if (d->selectType != selectType) {
+         d->selectType = selectType;
+         initStyle();
+     }
+@@ -760,8 +741,7 @@ void KMiniCalendarWidget::setBorderColor(const QColor &borderColor)
+ {
+     Q_D(KMiniCalendarWidget);
+ 
+-    if (d->borderColor != borderColor)
+-    {
++    if (d->borderColor != borderColor) {
+         d->borderColor = borderColor;
+         initStyle();
+     }
+@@ -771,8 +751,7 @@ void KMiniCalendarWidget::setWeekColor(const QColor &weekColor)
+ {
+     Q_D(KMiniCalendarWidget);
+ 
+-    if (d->weekColor != weekColor)
+-    {
++    if (d->weekColor != weekColor) {
+         d->weekColor = weekColor;
+         initStyle();
+     }
+@@ -782,8 +761,7 @@ void KMiniCalendarWidget::setLunarColor(const QColor &lunarColor)
+ {
+     Q_D(KMiniCalendarWidget);
+ 
+-    if (d->lunarColor != lunarColor)
+-    {
++    if (d->lunarColor != lunarColor) {
+         d->lunarColor = lunarColor;
+         initStyle();
+     }
+@@ -793,8 +771,7 @@ void KMiniCalendarWidget::setCurrentTextColor(const QColor &currentTextColor)
+ {
+     Q_D(KMiniCalendarWidget);
+ 
+-    if (d->currentTextColor != currentTextColor)
+-    {
++    if (d->currentTextColor != currentTextColor) {
+         d->currentTextColor = currentTextColor;
+         initStyle();
+     }
+@@ -804,8 +781,7 @@ void KMiniCalendarWidget::setOtherTextColor(const QColor &otherTextColor)
+ {
+     Q_D(KMiniCalendarWidget);
+ 
+-    if (d->otherTextColor != otherTextColor)
+-    {
++    if (d->otherTextColor != otherTextColor) {
+         d->otherTextColor = otherTextColor;
+         initStyle();
+     }
+@@ -815,8 +791,7 @@ void KMiniCalendarWidget::setSelectTextColor(const QColor &selectTextColor)
+ {
+     Q_D(KMiniCalendarWidget);
+ 
+-    if (d->selectTextColor != selectTextColor)
+-    {
++    if (d->selectTextColor != selectTextColor) {
+         d->selectTextColor = selectTextColor;
+         initStyle();
+     }
+@@ -826,8 +801,7 @@ void KMiniCalendarWidget::setHoverTextColor(const QColor &hoverTextColor)
+ {
+     Q_D(KMiniCalendarWidget);
+ 
+-    if (d->hoverTextColor != hoverTextColor)
+-    {
++    if (d->hoverTextColor != hoverTextColor) {
+         d->hoverTextColor = hoverTextColor;
+         initStyle();
+     }
+@@ -837,8 +811,7 @@ void KMiniCalendarWidget::setCurrentLunarColor(const QColor &currentLunarColor)
+ {
+     Q_D(KMiniCalendarWidget);
+ 
+-    if (d->currentLunarColor != currentLunarColor)
+-    {
++    if (d->currentLunarColor != currentLunarColor) {
+         d->currentLunarColor = currentLunarColor;
+         initStyle();
+     }
+@@ -848,8 +821,7 @@ void KMiniCalendarWidget::setOtherLunarColor(const QColor &otherLunarColor)
+ {
+     Q_D(KMiniCalendarWidget);
+ 
+-    if (d->otherLunarColor != otherLunarColor)
+-    {
++    if (d->otherLunarColor != otherLunarColor) {
+         d->otherLunarColor = otherLunarColor;
+         initStyle();
+     }
+@@ -859,8 +831,7 @@ void KMiniCalendarWidget::setSelectLunarColor(const QColor &selectLunarColor)
+ {
+     Q_D(KMiniCalendarWidget);
+ 
+-    if (d->selectLunarColor != selectLunarColor)
+-    {
++    if (d->selectLunarColor != selectLunarColor) {
+         d->selectLunarColor = selectLunarColor;
+         initStyle();
+     }
+@@ -870,8 +841,7 @@ void KMiniCalendarWidget::setHoverLunarColor(const QColor &hoverLunarColor)
+ {
+     Q_D(KMiniCalendarWidget);
+ 
+-    if (d->hoverLunarColor != hoverLunarColor)
+-    {
++    if (d->hoverLunarColor != hoverLunarColor) {
+         d->hoverLunarColor = hoverLunarColor;
+         initStyle();
+     }
+@@ -881,8 +851,7 @@ void KMiniCalendarWidget::setCurrentBgColor(const QColor &currentBgColor)
+ {
+     Q_D(KMiniCalendarWidget);
+ 
+-    if (d->currentBgColor != currentBgColor)
+-    {
++    if (d->currentBgColor != currentBgColor) {
+         d->currentBgColor = currentBgColor;
+         initStyle();
+     }
+@@ -892,8 +861,7 @@ void KMiniCalendarWidget::setOtherBgColor(const QColor &otherBgColor)
+ {
+     Q_D(KMiniCalendarWidget);
+ 
+-    if (d->otherBgColor != otherBgColor)
+-    {
++    if (d->otherBgColor != otherBgColor) {
+         d->otherBgColor = otherBgColor;
+         initStyle();
+     }
+@@ -903,8 +871,7 @@ void KMiniCalendarWidget::setSelectBgColor(const QColor &selectBgColor)
+ {
+     Q_D(KMiniCalendarWidget);
+ 
+-    if (d->selectBgColor != selectBgColor)
+-    {
++    if (d->selectBgColor != selectBgColor) {
+         d->selectBgColor = selectBgColor;
+         initStyle();
+     }
+@@ -914,8 +881,7 @@ void KMiniCalendarWidget::setHoverBgColor(const QColor &hoverBgColor)
+ {
+     Q_D(KMiniCalendarWidget);
+ 
+-    if (d->hoverBgColor != hoverBgColor)
+-    {
++    if (d->hoverBgColor != hoverBgColor) {
+         d->hoverBgColor = hoverBgColor;
+         initStyle();
+     }
+@@ -925,12 +891,9 @@ void KMiniCalendarWidget::wheelEvent(QWheelEvent *event)
+ {
+     Q_D(KMiniCalendarWidget);
+ 
+-    if (event->angleDelta().ry() > 100)
+-    {
++    if (event->angleDelta().ry() > 100) {
+         showPreviousMonth();
+-    }
+-    else if (event->angleDelta().ry() < -100)
+-    {
++    } else if (event->angleDelta().ry() < -100) {
+         showNextMonth();
+     }
+ }
+@@ -939,24 +902,24 @@ void KMiniCalendarWidget::paintEvent(QPaintEvent *event)
+ {
+     Q_D(KMiniCalendarWidget);
+     QPainter painter(this);
+-    painter.setRenderHint(QPainter::Antialiasing, true);  // 开启抗锯齿
++    painter.setRenderHint(QPainter::Antialiasing, true); // 开启抗锯齿
+ 
+     // 圆角矩形的尺寸和圆角大小
+     QRect rect(0, 0, width(), height());
+-//    int radius = 12;
++    //    int radius = 12;
+     int radius = ThemeController::getRadiusFromDT("kradius-window");
+-    if(radius == -1)
+-        radius =12;
++    if (radius == -1)
++        radius = 12;
+ 
+     // 使用QPainterPath来绘制圆角矩形
+     QPainterPath path;
+     path.addRoundedRect(rect, radius, radius);
+ 
+     // 设置画刷
+-    painter.setBrush(QBrush(d->weekBgColor));  // 设置背景色
++    painter.setBrush(QBrush(d->weekBgColor)); // 设置背景色
+     // 设置画笔颜色为灰色
+     QPen pen(QColor(233, 233, 233), 1); // 创建一个灰色、宽度为1的画笔
+-    painter.setPen(pen);   // 将画笔应用于QPainter
++    painter.setPen(pen); // 将画笔应用于QPainter
+ 
+     // 绘制圆角矩形(这将包括边框和背景)
+     painter.drawPath(path);
+diff --git a/kysdk-qtwidgets/src/kminicalendarwidget.h b/kysdk-qtwidgets/src/kminicalendarwidget.h
+index 2ce9cc0..f1f5746 100644
+--- a/kysdk-qtwidgets/src/kminicalendarwidget.h
++++ b/kysdk-qtwidgets/src/kminicalendarwidget.h
+@@ -2,14 +2,14 @@
+ #define KMINICALENDARWIDGET_H
+ 
+ #include "gui_g.h"
+-#include <QWidget>
++#include "klunarcalendarinfo.h"
++#include "kminicalendaritem.h"
++#include <QComboBox>
+ #include <QDate>
+-#include <QWheelEvent>
+ #include <QLabel>
+ #include <QToolButton>
+-#include <QComboBox>
+-#include "kminicalendaritem.h"
+-#include "klunarcalendarinfo.h"
++#include <QWheelEvent>
++#include <QWidget>
+ 
+ namespace kdk
+ {
+@@ -58,25 +58,22 @@ class GUI_EXPORT KMiniCalendarWidget : public QWidget
+     Q_PROPERTY(QColor hoverBgColor READ getHoverBgColor WRITE setHoverBgColor)
+ 
+ public:
+-    enum CalendarStyle
+-    {
++    enum CalendarStyle {
+         CalendarStyle_Red = 0
+     };
+ 
+-    enum WeekNameFormat
+-    {
+-        WeekNameFormat_Short = 0,   //短名称模式
+-        WeekNameFormat_Normal = 1,  //普通名称模式
+-        WeekNameFormat_Long = 2,    //长名称模式
+-        WeekNameFormat_En = 3       //英文模式
++    enum WeekNameFormat {
++        WeekNameFormat_Short = 0, // 短名称模式
++        WeekNameFormat_Normal = 1, // 普通名称模式
++        WeekNameFormat_Long = 2, // 长名称模式
++        WeekNameFormat_En = 3 // 英文模式
+     };
+ 
+-    enum SelectType
+-    {
+-        SelectType_Rect = 0,        //矩形背景
+-        SelectType_Circle = 1,      //圆形背景
+-        SelectType_Triangle = 2,    //带三角标
+-        SelectType_Image = 3        //图片背景
++    enum SelectType {
++        SelectType_Rect = 0, // 矩形背景
++        SelectType_Circle = 1, // 圆形背景
++        SelectType_Triangle = 2, // 带三角标
++        SelectType_Image = 3 // 图片背景
+     };
+ 
+     explicit KMiniCalendarWidget(QWidget *parent = 0);
+@@ -87,201 +84,201 @@ public:
+      * @brief 获取整体样式
+      * @return
+      */
+-    CalendarStyle getCalendarStyle()    const;
++    CalendarStyle getCalendarStyle() const;
+ 
+     /**
+      * @brief 获取星期名称格式
+      * @return
+      */
+-    WeekNameFormat getWeekNameFormat()  const;
++    WeekNameFormat getWeekNameFormat() const;
+ 
+     /**
+      * @brief 获取当前日期
+      * @return
+      */
+-    QDate getDate()                     const;
++    QDate getDate() const;
+ 
+     /**
+      * @brief 获取星期文本颜色
+      * @return
+      */
+-    QColor getWeekTextColor()           const;
++    QColor getWeekTextColor() const;
+ 
+     /**
+      * @brief 获取周末名称背景色
+      * @return
+      */
+-    QColor getWeekBgColor()             const;
++    QColor getWeekBgColor() const;
+ 
+     /**
+      * @brief 获取农历显示
+      * @return
+      */
+-    bool getShowLunar()                 const;
++    bool getShowLunar() const;
+ 
+     /**
+      * @brief 获取启用边框
+      * @return
+      */
+-    bool getEnableBorder()              const;
++    bool getEnableBorder() const;
+ 
+     /**
+      * @brief 获取选择类型
+      * @return
+      */
+-    SelectType getSelectType()          const;
++    SelectType getSelectType() const;
+ 
+     /**
+      * @brief 获取边框颜色
+      * @return
+      */
+-    QColor getBorderColor()             const;
++    QColor getBorderColor() const;
+ 
+     /**
+      * @brief 获取周末颜色
+      * @return
+      */
+-    QColor getWeekColor()               const;
++    QColor getWeekColor() const;
+ 
+     /**
+      * @brief 获取农历节日颜色
+      * @return
+      */
+-    QColor getLunarColor()              const;
++    QColor getLunarColor() const;
+ 
+     /**
+      * @brief 获取当前月文本颜色
+      * @return
+      */
+-    QColor getCurrentTextColor()        const;
++    QColor getCurrentTextColor() const;
+ 
+     /**
+      * @brief 获取其他月文本颜色
+      * @return
+      */
+-    QColor getOtherTextColor()          const;
++    QColor getOtherTextColor() const;
+ 
+     /**
+      * @brief 获取选中日期文本颜色
+      * @return
+      */
+-    QColor getSelectTextColor()         const;
++    QColor getSelectTextColor() const;
+ 
+     /**
+      * @brief 获取悬浮日期文本颜色
+      * @return
+      */
+-    QColor getHoverTextColor()          const;
++    QColor getHoverTextColor() const;
+ 
+     /**
+      * @brief 获取当前月农历文字颜色
+      * @return
+      */
+-    QColor getCurrentLunarColor()       const;
++    QColor getCurrentLunarColor() const;
+ 
+     /**
+      * @brief 获取其他月农历文本颜色
+      * @return
+      */
+-    QColor getOtherLunarColor()         const;
++    QColor getOtherLunarColor() const;
+ 
+     /**
+      * @brief 获取选中日期农历颜文本色
+      * @return
+      */
+-    QColor getSelectLunarColor()        const;
++    QColor getSelectLunarColor() const;
+ 
+     /**
+      * @brief 获取悬浮日期农历文本颜色
+      * @return
+      */
+-    QColor getHoverLunarColor()         const;
++    QColor getHoverLunarColor() const;
+ 
+     /**
+      * @brief 获取当前月背景色
+      * @return
+      */
+-    QColor getCurrentBgColor()          const;
++    QColor getCurrentBgColor() const;
+ 
+     /**
+      * @brief 获取其他月背景色
+      * @return
+      */
+-    QColor getOtherBgColor()            const;
++    QColor getOtherBgColor() const;
+ 
+     /**
+      * @brief 获取选择日期背景色
+      * @return
+      */
+-    QColor getSelectBgColor()           const;
++    QColor getSelectBgColor() const;
+ 
+     /**
+      * @brief 获取悬浮日期背景色
+      * @return
+      */
+-    QColor getHoverBgColor()            const;
++    QColor getHoverBgColor() const;
+ 
+-    QSize sizeHint()                    const;
+-    QSize minimumSizeHint()             const;
++    QSize sizeHint() const;
++    QSize minimumSizeHint() const;
+ 
+ public Q_SLOTS:
+-    //上一月,下一月
++    // 上一月,下一月
+     void showPreviousMonth();
+     void showNextMonth();
+ 
+-    //转到今天
++    // 转到今天
+     void showToday();
+ 
+-    //设置整体样式
++    // 设置整体样式
+     void setCalendarStyle(const CalendarStyle &calendarStyle);
+-    //设置星期名称格式
++    // 设置星期名称格式
+     void setWeekNameFormat(const WeekNameFormat &weekNameFormat);
+ 
+-    //设置日期
++    // 设置日期
+     void setDate(const QDate &date);
+-    //设置顶部星期名称文字颜色+背景色
++    // 设置顶部星期名称文字颜色+背景色
+     void setWeekTextColor(const QColor &weekTextColor);
+     void setWeekBgColor(const QColor &weekBgColor);
+ 
+-    //设置是否显示农历信息
++    // 设置是否显示农历信息
+     void setShowLunar(bool showLunar);
+-    //是否显示边框
++    // 是否显示边框
+     void setEnableBorder(bool bVisible);
+-    //设置选中背景样式
++    // 设置选中背景样式
+     void setSelectType(const SelectType &selectType);
+ 
+-    //设置边框颜色
++    // 设置边框颜色
+     void setBorderColor(const QColor &borderColor);
+-    //设置周末颜色
++    // 设置周末颜色
+     void setWeekColor(const QColor &weekColor);
+-    //设置农历节日颜色
++    // 设置农历节日颜色
+     void setLunarColor(const QColor &lunarColor);
+ 
+-    //设置当前月文字颜色
++    // 设置当前月文字颜色
+     void setCurrentTextColor(const QColor &currentTextColor);
+-    //设置其他月文字颜色
++    // 设置其他月文字颜色
+     void setOtherTextColor(const QColor &otherTextColor);
+-    //设置选中日期文字颜色
++    // 设置选中日期文字颜色
+     void setSelectTextColor(const QColor &selectTextColor);
+-    //设置悬停日期文字颜色
++    // 设置悬停日期文字颜色
+     void setHoverTextColor(const QColor &hoverTextColor);
+ 
+-    //设置当前月农历文字颜色
++    // 设置当前月农历文字颜色
+     void setCurrentLunarColor(const QColor &currentLunarColor);
+-    //设置其他月农历文字颜色
++    // 设置其他月农历文字颜色
+     void setOtherLunarColor(const QColor &otherLunarColor);
+-    //设置选中日期农历文字颜色
++    // 设置选中日期农历文字颜色
+     void setSelectLunarColor(const QColor &selectLunarColor);
+-    //设置悬停日期农历文字颜色
++    // 设置悬停日期农历文字颜色
+     void setHoverLunarColor(const QColor &hoverLunarColor);
+ 
+-    //设置当前月背景颜色
++    // 设置当前月背景颜色
+     void setCurrentBgColor(const QColor &currentBgColor);
+-    //设置其他月背景颜色
++    // 设置其他月背景颜色
+     void setOtherBgColor(const QColor &otherBgColor);
+-    //设置选中日期背景颜色
++    // 设置选中日期背景颜色
+     void setSelectBgColor(const QColor &selectBgColor);
+-    //设置悬停日期背景颜色
++    // 设置悬停日期背景颜色
+     void setHoverBgColor(const QColor &hoverBgColor);
+ 
+ protected:
+@@ -302,7 +299,7 @@ private slots:
+ 
+ private:
+     Q_DECLARE_PRIVATE(KMiniCalendarWidget)
+-    KMiniCalendarWidgetPrivate* const d_ptr;
++    KMiniCalendarWidgetPrivate *const d_ptr;
+ };
+ }
+ 
+diff --git a/kysdk-qtwidgets/src/knativetabbar.cpp b/kysdk-qtwidgets/src/knativetabbar.cpp
+index 1d9f0d3..4b7b7c7 100644
+--- a/kysdk-qtwidgets/src/knativetabbar.cpp
++++ b/kysdk-qtwidgets/src/knativetabbar.cpp
+@@ -21,48 +21,47 @@
+  */
+ 
+ #include "knativetabbar.h"
++#include "parmscontroller.h"
+ #include "themeController.h"
+-#include <QStyleOptionTab>
++#include <QApplication>
++#include <QDebug>
++#include <QEvent>
++#include <QFontMetrics>
++#include <QMouseEvent>
+ #include <QPainter>
+ #include <QPainterPath>
++#include <QStyleOptionTab>
+ #include <QStylePainter>
+-#include <QPainterPath>
+-#include <QFontMetrics>
+-#include <QDebug>
+-#include <QEvent>
+-#include <QApplication>
+ #include <QVariantAnimation>
+-#include <QMouseEvent>
+-#include "parmscontroller.h"
+ 
+ namespace kdk
+ {
+-class Q_DECL_HIDDEN KNativeTabbarPrivate:public QObject,public ThemeController
++class Q_DECL_HIDDEN KNativeTabbarPrivate : public QObject, public ThemeController
+ {
+     Q_OBJECT
+     Q_DECLARE_PUBLIC(KNativeTabbar)
+ 
+ public:
+-    KNativeTabbarPrivate(KNativeTabbar*parent)
+-        :q_ptr(parent),
+-          m_animation(new QVariantAnimation(this)),
+-          m_nextTabWidth(0),
+-          m_animationStarted(false)
++    KNativeTabbarPrivate(KNativeTabbar *parent)
++        : q_ptr(parent)
++        , m_animation(new QVariantAnimation(this))
++        , m_nextTabWidth(0)
++        , m_animationStarted(false)
+     {
+         Q_Q(KNativeTabbar);
+         setParent(parent);
+         parent->installEventFilter(this);
+         m_animation->setDuration(300);
+         m_animation->setEasingCurve(QEasingCurve::InOutQuad);
+-        connect(m_animation, &QVariantAnimation::valueChanged, q, [=](){
++        connect(m_animation, &QVariantAnimation::valueChanged, q, [=]() {
+             q->update();
+         });
+-        connect(m_animation, &QVariantAnimation::finished, this, [=](){
++        connect(m_animation, &QVariantAnimation::finished, this, [=]() {
+             m_animationStarted = false;
+         });
+ 
+         m_borderRadius = ThemeController::getRadiusFromDT("kradius-normal");
+-        if(m_borderRadius == -1)
++        if (m_borderRadius == -1)
+             m_borderRadius = 6;
+     }
+     void changeTheme();
+@@ -84,26 +83,25 @@ private:
+     bool m_animationStarted;
+ };
+ 
+-KNativeTabbar::KNativeTabbar(KNativeTabbarStyle barStyle,QWidget* parent):
+-    KCustomTabBar(parent),
+-    d_ptr(new KNativeTabbarPrivate(this))
++KNativeTabbar::KNativeTabbar(KNativeTabbarStyle barStyle, QWidget *parent)
++    : KCustomTabBar(parent)
++    , d_ptr(new KNativeTabbarPrivate(this))
+ {
+     Q_D(KNativeTabbar);
+     d->m_borderRadius = 6;
+     d->m_KNativeTabbarStyle = barStyle;
+     d->m_useCustomColor = false;
+ 
+-    //this->setObjectName("KNativeTabbar");
++    // this->setObjectName("KNativeTabbar");
+     d->changeTheme();
+-    connect(d->m_gsetting,&QGSettings::changed, d,&KNativeTabbarPrivate::changeTheme);
+-    connect(Parmscontroller::self(),&Parmscontroller::modeChanged,this,[=](bool flag){
++    connect(d->m_gsetting, &QGSettings::changed, d, &KNativeTabbarPrivate::changeTheme);
++    connect(Parmscontroller::self(), &Parmscontroller::modeChanged, this, [=](bool flag) {
+         updateGeometry();
+     });
+ }
+ 
+ KNativeTabbar::~KNativeTabbar()
+ {
+-
+ }
+ 
+ void KNativeTabbar::setTabbarStyle(KNativeTabbarStyle barStyle)
+@@ -121,7 +119,7 @@ KNativeTabbarStyle KNativeTabbar::barStyle()
+ void KNativeTabbar::setBorderRadius(int radius)
+ {
+     Q_D(KNativeTabbar);
+-    if(radius < 0 || radius > 20)
++    if (radius < 0 || radius > 20)
+         return;
+     d->m_borderRadius = radius;
+     update();
+@@ -130,7 +128,7 @@ void KNativeTabbar::setBorderRadius(int radius)
+ int KNativeTabbar::borderRadius()
+ {
+     Q_D(KNativeTabbar);
+-    if(d->m_KNativeTabbarStyle == Sliding)
++    if (d->m_KNativeTabbarStyle == Sliding)
+         return 0;
+     else
+         return d->m_borderRadius;
+@@ -153,15 +151,15 @@ QSize KNativeTabbar::sizeHint() const
+ QSize KNativeTabbar::minimumTabSizeHint(int index) const
+ {
+     Q_UNUSED(index)
+-    QSize size(100,Parmscontroller::parm(Parmscontroller::Parm::PM_PushButtonHeight));
++    QSize size(100, Parmscontroller::parm(Parmscontroller::Parm::PM_PushButtonHeight));
+     return size;
+ }
+ 
+ QSize KNativeTabbar::tabSizeHint(int index) const
+ {
+     Q_UNUSED(index)
+-    //判断外部是否设置了固定宽度或者固定高度,如果设置,走默认的tabSizeHint
+-    if((this->maximumHeight() == this->minimumHeight()) ||this->maximumWidth()==this->minimumWidth())
++    // 判断外部是否设置了固定宽度或者固定高度,如果设置,走默认的tabSizeHint
++    if ((this->maximumHeight() == this->minimumHeight()) || this->maximumWidth() == this->minimumWidth())
+         return KCustomTabBar::tabSizeHint(index);
+     auto size = KCustomTabBar::tabSizeHint(index);
+     size.setHeight(Parmscontroller::parm(Parmscontroller::Parm::PM_TabBarHeight));
+@@ -180,38 +178,31 @@ void KNativeTabbar::paintEvent(QPaintEvent *event)
+     QColor fontColor;
+     QColor mix;
+     QFontMetrics fm = p.fontMetrics();
+-    for (int i = 0; i < count(); ++i)
+-    {
++    for (int i = 0; i < count(); ++i) {
+         QStyleOptionTab option;
+         initStyleOption(&option, i);
+-        QRect rect = option.rect.adjusted(d->m_horizontalMargin,0,0,-d->m_topMargin);
++        QRect rect = option.rect.adjusted(d->m_horizontalMargin, 0, 0, -d->m_topMargin);
+         rect.setHeight(Parmscontroller::parm(Parmscontroller::Parm::PM_PushButtonHeight));
+-        switch (d->m_KNativeTabbarStyle)
+-        {
+-        case SegmentDark:
+-        {
+-//            mix = option.palette.brightText().color();
++        switch (d->m_KNativeTabbarStyle) {
++        case SegmentDark: {
++            //            mix = option.palette.brightText().color();
+             mix = ThemeController::getPaletteColorFromDT("brighttext");
+-//            fontColor = option.palette.buttonText().color();
++            //            fontColor = option.palette.buttonText().color();
+             fontColor = ThemeController::getPaletteColorFromDT("buttontext");
+             QColor bkgrdColor = d->m_bkgrdColor;
+-            if(option.state.testFlag(QStyle::State_Selected))
+-            {
+-//                bkgrdColor = option.palette.highlight().color();
++            if (option.state.testFlag(QStyle::State_Selected)) {
++                //                bkgrdColor = option.palette.highlight().color();
+                 bkgrdColor = ThemeController::getPaletteColorFromDT("highlight");
+                 fontColor = QColor("#FFFFFF");
++            } else if (option.state.testFlag(QStyle::State_MouseOver)) {
++                bkgrdColor = ThemeController::mixColor(bkgrdColor, mix, 0.05);
+             }
+-            else if(option.state.testFlag(QStyle::State_MouseOver))
+-            {
+-                 bkgrdColor = ThemeController::mixColor(bkgrdColor,mix,0.05);
+-            }
+-            if(option.position == QStyleOptionTab::Middle)
+-            {
++            if (option.position == QStyleOptionTab::Middle) {
+                 p.save();
+                 p.setBrush(bkgrdColor);
+                 p.setPen(Qt::NoPen);
+-                //利用quadto绘制圆角矩形会出现一个像素的偏差,修正一下QRect底部高度
+-                p.drawRect(rect.adjusted(0,0,0,-1));
++                // 利用quadto绘制圆角矩形会出现一个像素的偏差,修正一下QRect底部高度
++                p.drawRect(rect.adjusted(0, 0, 0, -1));
+                 p.restore();
+                 p.setBrush(Qt::NoBrush);
+                 p.setPen(fontColor);
+@@ -219,7 +210,7 @@ void KNativeTabbar::paintEvent(QPaintEvent *event)
+                 uint tf = Qt::AlignVCenter;
+                 if (!option.icon.isNull()) {
+                     QIcon::Mode mode = option.state & QStyle::State_Enabled ? QIcon::Normal
+-                                                                     : QIcon::Disabled;
++                                                                            : QIcon::Disabled;
+                     if (mode == QIcon::Normal && option.state & QStyle::State_HasFocus)
+                         mode = QIcon::Active;
+                     QIcon::State state = QIcon::Off;
+@@ -242,57 +233,46 @@ void KNativeTabbar::paintEvent(QPaintEvent *event)
+                     if (option.direction == Qt::RightToLeft)
+                         point.rx() += w;
+ 
+-                    if(fm.width(tabText(i)) >= option.rect.width()-option.iconSize.width()-7)
+-                        p.drawPixmap(option.rect.x()+4,this->style()->visualPos(option.direction, option.rect, point).y(), pixmap);
++                    if (fm.width(tabText(i)) >= option.rect.width() - option.iconSize.width() - 7)
++                        p.drawPixmap(option.rect.x() + 4, this->style()->visualPos(option.direction, option.rect, point).y(), pixmap);
+                     else
+                         p.drawPixmap(this->style()->visualPos(option.direction, option.rect, point), pixmap);
+ 
+-                    if (!tabText(i).isEmpty()){
+-                        int subH = std::max(option.iconSize.height(),option.fontMetrics.height());
++                    if (!tabText(i).isEmpty()) {
++                        int subH = std::max(option.iconSize.height(), option.fontMetrics.height());
+                         int icon_Y = (rect.height() - subH) / 2;
+                         int text_X = point.x() + option.iconSize.width() + 4;
+                         int text_Y = icon_Y;
+ 
+                         QRect textRect;
+-                        if(fm.width(tabText(i)) >= option.rect.width()-option.iconSize.width()-7)
+-                        {
+-                            textRect = QRect(option.rect.x()+option.iconSize.width()+8, text_Y, option.rect.width()-option.iconSize.width()-7, option.fontMetrics.height());
+-                            setTabToolTip(i,tabText(i));
+-                            QString elidedText = fm.elidedText(tabText(i),Qt::ElideRight,option.rect.width()-option.iconSize.width()-7);
+-                            p.drawText(textRect,tf,elidedText);
+-                        }
+-                        else
+-                        {
+-                            textRect=QRect(text_X, text_Y, option.fontMetrics.width(tabText(i)), option.fontMetrics.height());
+-                            setTabToolTip(i,"");
+-                            p.drawText(textRect,tf,tabText(i));
++                        if (fm.width(tabText(i)) >= option.rect.width() - option.iconSize.width() - 7) {
++                            textRect = QRect(option.rect.x() + option.iconSize.width() + 8, text_Y, option.rect.width() - option.iconSize.width() - 7, option.fontMetrics.height());
++                            setTabToolTip(i, tabText(i));
++                            QString elidedText = fm.elidedText(tabText(i), Qt::ElideRight, option.rect.width() - option.iconSize.width() - 7);
++                            p.drawText(textRect, tf, elidedText);
++                        } else {
++                            textRect = QRect(text_X, text_Y, option.fontMetrics.width(tabText(i)), option.fontMetrics.height());
++                            setTabToolTip(i, "");
++                            p.drawText(textRect, tf, tabText(i));
+                         }
+                     }
+-                }
+-                else
+-                {
++                } else {
+                     tf |= Qt::AlignHCenter;
+-                    if(fm.width(tabText(i)) >= option.rect.width())
+-                    {
+-                        QString elidedText = fm.elidedText(tabText(i),Qt::ElideRight,option.rect.width());
+-                        p.drawText(rect,tf,elidedText);
+-                        setTabToolTip(i,tabText(i));
+-                    }
+-                    else
+-                    {
+-                        setTabToolTip(i,"");
+-                        p.drawText(rect,tf,tabText(i));
++                    if (fm.width(tabText(i)) >= option.rect.width()) {
++                        QString elidedText = fm.elidedText(tabText(i), Qt::ElideRight, option.rect.width());
++                        p.drawText(rect, tf, elidedText);
++                        setTabToolTip(i, tabText(i));
++                    } else {
++                        setTabToolTip(i, "");
++                        p.drawText(rect, tf, tabText(i));
+                     }
+-
+                 }
+-            }
+-            else if(option.position == QStyleOptionTab::Beginning)
+-            {
++            } else if (option.position == QStyleOptionTab::Beginning) {
+                 p.save();
+                 p.setBrush(bkgrdColor);
+                 p.setPen(Qt::NoPen);
+                 QPainterPath path;
+-                auto tempRect = rect.adjusted(0,0,1,0);
++                auto tempRect = rect.adjusted(0, 0, 1, 0);
+                 path.moveTo(tempRect.topLeft() + QPointF(0, d->m_borderRadius));
+                 path.lineTo(tempRect.bottomLeft() - QPointF(0, d->m_borderRadius));
+                 path.quadTo(tempRect.bottomLeft(), tempRect.bottomLeft() + QPointF(d->m_borderRadius, 0));
+@@ -308,7 +288,7 @@ void KNativeTabbar::paintEvent(QPaintEvent *event)
+                 uint tf = Qt::AlignVCenter;
+                 if (!option.icon.isNull()) {
+                     QIcon::Mode mode = option.state & QStyle::State_Enabled ? QIcon::Normal
+-                                                                     : QIcon::Disabled;
++                                                                            : QIcon::Disabled;
+                     if (mode == QIcon::Normal && option.state & QStyle::State_HasFocus)
+                         mode = QIcon::Active;
+                     QIcon::State state = QIcon::Off;
+@@ -331,8 +311,8 @@ void KNativeTabbar::paintEvent(QPaintEvent *event)
+                     if (option.direction == Qt::RightToLeft)
+                         point.rx() += w;
+ 
+-                    if(fm.width(tabText(i)) >= option.rect.width()-option.iconSize.width()-7)
+-                        p.drawPixmap(option.rect.x()+4,this->style()->visualPos(option.direction, option.rect, point).y(), pixmap);
++                    if (fm.width(tabText(i)) >= option.rect.width() - option.iconSize.width() - 7)
++                        p.drawPixmap(option.rect.x() + 4, this->style()->visualPos(option.direction, option.rect, point).y(), pixmap);
+                     else
+                         p.drawPixmap(this->style()->visualPos(option.direction, option.rect, point), pixmap);
+ 
+@@ -341,56 +321,46 @@ void KNativeTabbar::paintEvent(QPaintEvent *event)
+                     else
+                         rect.translate(point.x() + w + 4, 0);
+ 
+-                    if (!tabText(i).isEmpty()){
+-                         tf |= Qt::AlignLeft;
+-                         int subH = std::max(option.iconSize.height(),option.fontMetrics.height());
+-                         int icon_Y = (rect.height() - subH) / 2;
+-                         int text_X = point.x() + option.iconSize.width() + 4;
+-                         int text_Y = icon_Y;
+-                         QRect textRect;
+-                         if(fm.width(tabText(i)) >= option.rect.width()-option.iconSize.width()-7)
+-                         {
+-                             textRect = QRect(option.rect.x()+option.iconSize.width()+8, text_Y, option.rect.width()-option.iconSize.width()-8, option.fontMetrics.height());
+-                             setTabToolTip(i,tabText(i));
+-                             QString elidedText = fm.elidedText(tabText(i),Qt::ElideRight,option.rect.width()-option.iconSize.width()-8);
+-                             p.drawText(textRect,tf,elidedText);
+-                         }
+-                         else
+-                         {
+-                             textRect=QRect(text_X, text_Y, option.fontMetrics.width(tabText(i)), option.fontMetrics.height());
+-                             setTabToolTip(i,"");
+-                             p.drawText(textRect,tf,tabText(i));
+-                         }
+-                     }
+-                }
+-                else
+-                {
+-                    tf |= Qt::AlignHCenter;
+-                    if(fm.width(tabText(i)) >= option.rect.width())
+-                    {
+-                        QString elidedText = fm.elidedText(tabText(i),Qt::ElideRight,option.rect.width());
+-                        p.drawText(rect,tf,elidedText);
+-                        setTabToolTip(i,tabText(i));
++                    if (!tabText(i).isEmpty()) {
++                        tf |= Qt::AlignLeft;
++                        int subH = std::max(option.iconSize.height(), option.fontMetrics.height());
++                        int icon_Y = (rect.height() - subH) / 2;
++                        int text_X = point.x() + option.iconSize.width() + 4;
++                        int text_Y = icon_Y;
++                        QRect textRect;
++                        if (fm.width(tabText(i)) >= option.rect.width() - option.iconSize.width() - 7) {
++                            textRect = QRect(option.rect.x() + option.iconSize.width() + 8, text_Y, option.rect.width() - option.iconSize.width() - 8, option.fontMetrics.height());
++                            setTabToolTip(i, tabText(i));
++                            QString elidedText = fm.elidedText(tabText(i), Qt::ElideRight, option.rect.width() - option.iconSize.width() - 8);
++                            p.drawText(textRect, tf, elidedText);
++                        } else {
++                            textRect = QRect(text_X, text_Y, option.fontMetrics.width(tabText(i)), option.fontMetrics.height());
++                            setTabToolTip(i, "");
++                            p.drawText(textRect, tf, tabText(i));
++                        }
+                     }
+-                    else
+-                    {
+-                        p.drawText(rect,tf,tabText(i));
+-                        setTabToolTip(i,"");
++                } else {
++                    tf |= Qt::AlignHCenter;
++                    if (fm.width(tabText(i)) >= option.rect.width()) {
++                        QString elidedText = fm.elidedText(tabText(i), Qt::ElideRight, option.rect.width());
++                        p.drawText(rect, tf, elidedText);
++                        setTabToolTip(i, tabText(i));
++                    } else {
++                        p.drawText(rect, tf, tabText(i));
++                        setTabToolTip(i, "");
+                     }
+                 }
+-            }
+-            else
+-            {
++            } else {
+                 p.save();
+                 p.setBrush(bkgrdColor);
+                 p.setPen(Qt::NoPen);
+                 QPainterPath path;
+                 path.moveTo(rect.topLeft());
+                 path.lineTo(rect.bottomLeft());
+-                path.lineTo(rect.bottomRight() - QPointF(d->m_borderRadius,0));
++                path.lineTo(rect.bottomRight() - QPointF(d->m_borderRadius, 0));
+                 path.quadTo(rect.bottomRight(), rect.bottomRight() - QPointF(0, d->m_borderRadius));
+                 path.lineTo(rect.topRight() + QPointF(0, d->m_borderRadius));
+-                path.quadTo(rect.topRight(), rect.topRight() - QPointF(d->m_borderRadius,0));
++                path.quadTo(rect.topRight(), rect.topRight() - QPointF(d->m_borderRadius, 0));
+                 path.lineTo(rect.topLeft());
+                 p.drawPath(path);
+                 p.restore();
+@@ -401,7 +371,7 @@ void KNativeTabbar::paintEvent(QPaintEvent *event)
+                 if (!option.icon.isNull()) {
+ 
+                     QIcon::Mode mode = option.state & QStyle::State_Enabled ? QIcon::Normal
+-                                                                     : QIcon::Disabled;
++                                                                            : QIcon::Disabled;
+                     if (mode == QIcon::Normal && option.state & QStyle::State_HasFocus)
+                         mode = QIcon::Active;
+                     QIcon::State state = QIcon::Off;
+@@ -424,81 +394,69 @@ void KNativeTabbar::paintEvent(QPaintEvent *event)
+                     if (option.direction == Qt::RightToLeft)
+                         point.rx() += w;
+ 
+-                    if(fm.width(tabText(i)) >= option.rect.width()-option.iconSize.width()-7)
+-                        p.drawPixmap(option.rect.x()+4,this->style()->visualPos(option.direction, option.rect, point).y(), pixmap);
++                    if (fm.width(tabText(i)) >= option.rect.width() - option.iconSize.width() - 7)
++                        p.drawPixmap(option.rect.x() + 4, this->style()->visualPos(option.direction, option.rect, point).y(), pixmap);
+                     else
+                         p.drawPixmap(this->style()->visualPos(option.direction, option.rect, point), pixmap);
+ 
+-                    if (!tabText(i).isEmpty()){
+-                        int subH = std::max(option.iconSize.height(),option.fontMetrics.height());
++                    if (!tabText(i).isEmpty()) {
++                        int subH = std::max(option.iconSize.height(), option.fontMetrics.height());
+                         int icon_Y = (rect.height() - subH) / 2;
+                         int text_X = point.x() + option.iconSize.width() + 4;
+                         int text_Y = icon_Y;
+                         QRect textRect;
+-                        if(fm.width(tabText(i)) >= option.rect.width()-option.iconSize.width()-7)
+-                        {
+-                            textRect = QRect(option.rect.x()+option.iconSize.width()+8, text_Y, option.rect.width()-option.iconSize.width()-8, option.fontMetrics.height());
+-                            setTabToolTip(i,tabText(i));
+-                            QString elidedText = fm.elidedText(tabText(i),Qt::ElideRight,option.rect.width()-option.iconSize.width()-8);
+-                            p.drawText(textRect,elidedText);
+-                        }
+-                        else
+-                        {
+-                            textRect=QRect(text_X, text_Y, option.fontMetrics.width(tabText(i)), option.fontMetrics.height());
+-                            setTabToolTip(i,"");
+-                            p.drawText(textRect,tabText(i));
++                        if (fm.width(tabText(i)) >= option.rect.width() - option.iconSize.width() - 7) {
++                            textRect = QRect(option.rect.x() + option.iconSize.width() + 8, text_Y, option.rect.width() - option.iconSize.width() - 8, option.fontMetrics.height());
++                            setTabToolTip(i, tabText(i));
++                            QString elidedText = fm.elidedText(tabText(i), Qt::ElideRight, option.rect.width() - option.iconSize.width() - 8);
++                            p.drawText(textRect, elidedText);
++                        } else {
++                            textRect = QRect(text_X, text_Y, option.fontMetrics.width(tabText(i)), option.fontMetrics.height());
++                            setTabToolTip(i, "");
++                            p.drawText(textRect, tabText(i));
+                         }
+                     }
+-                }
+-                else
+-                {
++                } else {
+                     tf |= Qt::AlignHCenter;
+-                    if(fm.width(tabText(i)) >= option.rect.width())
+-                    {
+-                        QString elidedText = fm.elidedText(tabText(i),Qt::ElideRight,option.rect.width());
+-                        p.drawText(rect,tf,elidedText);
+-                        setTabToolTip(i,tabText(i));
+-                    }
+-                    else
+-                    {
+-                        p.drawText(rect,tf,tabText(i));
+-                        setTabToolTip(i,"");
++                    if (fm.width(tabText(i)) >= option.rect.width()) {
++                        QString elidedText = fm.elidedText(tabText(i), Qt::ElideRight, option.rect.width());
++                        p.drawText(rect, tf, elidedText);
++                        setTabToolTip(i, tabText(i));
++                    } else {
++                        p.drawText(rect, tf, tabText(i));
++                        setTabToolTip(i, "");
+                     }
+                 }
+             }
+             break;
+         }
+-        case SegmentLight:
+-        {
+-//            mix = option.palette.brightText().color();
++        case SegmentLight: {
++            //            mix = option.palette.brightText().color();
+             mix = ThemeController::getPaletteColorFromDT("brighttext");
+-//            fontColor = option.palette.buttonText().color();
++            //            fontColor = option.palette.buttonText().color();
+             fontColor = ThemeController::getPaletteColorFromDT("buttontext");
+             QColor bkgrdColor = d->m_bkgrdColor;
+-            if(option.state.testFlag(QStyle::State_Selected))
+-            {
+-//                bkgrdColor = option.palette.highlight().color();
++            if (option.state.testFlag(QStyle::State_Selected)) {
++                //                bkgrdColor = option.palette.highlight().color();
+                 bkgrdColor = ThemeController::getPaletteColorFromDT("highlight");
+                 fontColor = QColor("#FFFFFF");
+-            }
+-            else if(option.state.testFlag(QStyle::State_MouseOver))
+-            {
+-                 bkgrdColor = ThemeController::mixColor(bkgrdColor,mix,0.05);
++            } else if (option.state.testFlag(QStyle::State_MouseOver)) {
++                bkgrdColor = ThemeController::mixColor(bkgrdColor, mix, 0.05);
+             }
+             p.save();
+             p.setBrush(bkgrdColor);
+             p.setPen(Qt::NoPen);
+-            p.drawRoundedRect(/*option.rect.adjusted*/rect.adjusted(d->m_horizontalMargin,0,0,-d->m_topMargin),
+-                              d->m_borderRadius,d->m_borderRadius);
++            p.drawRoundedRect(/*option.rect.adjusted*/ rect.adjusted(d->m_horizontalMargin, 0, 0, -d->m_topMargin),
++                              d->m_borderRadius, d->m_borderRadius);
+             p.restore();
+             p.setBrush(Qt::NoBrush);
+             p.setPen(fontColor);
+-            /*QRect*/  rect = /*option.*/rect.adjusted(d->m_horizontalMargin,0,0,-d->m_topMargin);
++            /*QRect*/ rect = /*option.*/ rect.adjusted(d->m_horizontalMargin, 0, 0, -d->m_topMargin);
+             QPoint point;
+             uint tf = Qt::AlignVCenter;
+             if (!option.icon.isNull()) {
+                 QIcon::Mode mode = option.state & QStyle::State_Enabled ? QIcon::Normal
+-                                                                 : QIcon::Disabled;
++                                                                        : QIcon::Disabled;
+                 if (mode == QIcon::Normal && option.state & QStyle::State_HasFocus)
+                     mode = QIcon::Active;
+                 QIcon::State state = QIcon::Off;
+@@ -521,110 +479,94 @@ void KNativeTabbar::paintEvent(QPaintEvent *event)
+                 if (option.direction == Qt::RightToLeft)
+                     point.rx() += w;
+ 
+-                if(fm.width(tabText(i)) >= option.rect.width()-option.iconSize.width()-7)
+-                    p.drawPixmap(option.rect.x()+4,this->style()->visualPos(option.direction, option.rect, point).y(), pixmap);
++                if (fm.width(tabText(i)) >= option.rect.width() - option.iconSize.width() - 7)
++                    p.drawPixmap(option.rect.x() + 4, this->style()->visualPos(option.direction, option.rect, point).y(), pixmap);
+                 else
+                     p.drawPixmap(this->style()->visualPos(option.direction, option.rect, point), pixmap);
+ 
+-                if (!tabText(i).isEmpty()){
+-                    int subH = std::max(option.iconSize.height(),option.fontMetrics.height());
++                if (!tabText(i).isEmpty()) {
++                    int subH = std::max(option.iconSize.height(), option.fontMetrics.height());
+                     int icon_Y = (rect.height() - subH) / 2;
+                     int text_X = point.x() + option.iconSize.width() + 4;
+                     int text_Y = icon_Y;
+                     QRect textRect;
+-                    if(fm.width(tabText(i)) >= option.rect.width()-option.iconSize.width()-7)
+-                    {
+-                        textRect = QRect(option.rect.x()+option.iconSize.width()+8, text_Y, option.rect.width()-option.iconSize.width()-8, option.fontMetrics.height());
+-                        setTabToolTip(i,tabText(i));
+-                        QString elidedText = fm.elidedText(tabText(i),Qt::ElideRight,option.rect.width()-option.iconSize.width()-8);
+-                        p.drawText(textRect,elidedText);
+-                    }
+-                    else
+-                    {
+-                        textRect=QRect(text_X, text_Y, option.fontMetrics.width(tabText(i)), option.fontMetrics.height());
+-                        setTabToolTip(i,"");
+-                        p.drawText(textRect,tabText(i));
++                    if (fm.width(tabText(i)) >= option.rect.width() - option.iconSize.width() - 7) {
++                        textRect = QRect(option.rect.x() + option.iconSize.width() + 8, text_Y, option.rect.width() - option.iconSize.width() - 8, option.fontMetrics.height());
++                        setTabToolTip(i, tabText(i));
++                        QString elidedText = fm.elidedText(tabText(i), Qt::ElideRight, option.rect.width() - option.iconSize.width() - 8);
++                        p.drawText(textRect, elidedText);
++                    } else {
++                        textRect = QRect(text_X, text_Y, option.fontMetrics.width(tabText(i)), option.fontMetrics.height());
++                        setTabToolTip(i, "");
++                        p.drawText(textRect, tabText(i));
+                     }
+                 }
+-            }
+-            else
+-            {
++            } else {
+                 tf |= Qt::AlignHCenter;
+-                if(fm.width(tabText(i)) >= option.rect.width())
+-                {
+-                    QString elidedText = fm.elidedText(tabText(i),Qt::ElideRight,option.rect.width());
+-                    p.drawText(rect,tf,elidedText);
+-                    setTabToolTip(i,tabText(i));
+-                }
+-                else
+-                {
+-                    p.drawText(rect,tf,tabText(i));
+-                    setTabToolTip(i,"");
++                if (fm.width(tabText(i)) >= option.rect.width()) {
++                    QString elidedText = fm.elidedText(tabText(i), Qt::ElideRight, option.rect.width());
++                    p.drawText(rect, tf, elidedText);
++                    setTabToolTip(i, tabText(i));
++                } else {
++                    p.drawText(rect, tf, tabText(i));
++                    setTabToolTip(i, "");
+                 }
+             }
+             break;
+         }
+-        case Sliding:
+-        {
+-//            mix = option.palette.brightText().color();
++        case Sliding: {
++            //            mix = option.palette.brightText().color();
+             mix = ThemeController::getPaletteColorFromDT("brighttext");
+-//            fontColor = option.palette.buttonText().color();
++            //            fontColor = option.palette.buttonText().color();
+             fontColor = ThemeController::getPaletteColorFromDT("buttontext");
+             QColor bkgrdColor = d->m_bkgrdColor;
+-            if(option.state.testFlag(QStyle::State_Selected))
+-            {
+-//                bkgrdColor = option.palette.highlight().color();
++            if (option.state.testFlag(QStyle::State_Selected)) {
++                //                bkgrdColor = option.palette.highlight().color();
+                 bkgrdColor = ThemeController::getPaletteColorFromDT("highlight");
+-//                fontColor = option.palette.highlight().color();
++                //                fontColor = option.palette.highlight().color();
+                 fontColor = ThemeController::getPaletteColorFromDT("highlight");
+-            }
+-            else if(option.state.testFlag(QStyle::State_MouseOver))
+-            {
+-                 bkgrdColor = ThemeController::mixColor(bkgrdColor,mix,0.05);
++            } else if (option.state.testFlag(QStyle::State_MouseOver)) {
++                bkgrdColor = ThemeController::mixColor(bkgrdColor, mix, 0.05);
+             }
+             p.save();
+             QPen pen;
+-            if(i != currentIndex())
++            if (i != currentIndex())
+                 pen.setColor(bkgrdColor);
+             else
+                 pen.setColor(d->m_bkgrdColor);
+             pen.setWidth(2);
+             p.setPen(pen);
+-            /*QRect*/  rect = /*option.*/rect.adjusted(d->m_horizontalMargin,0,0,-5);
+-            p.drawLine(rect.bottomLeft(),rect.bottomRight());
++            /*QRect*/ rect = /*option.*/ rect.adjusted(d->m_horizontalMargin, 0, 0, -5);
++            p.drawLine(rect.bottomLeft(), rect.bottomRight());
+             p.restore();
+ 
+-            if(d->m_animationStarted)
+-            {
++            if (d->m_animationStarted) {
+                 int left_border = d->m_animation->currentValue().toInt();
+                 p.save();
+                 QPen pen;
+                 pen.setWidth(2);
+-//                pen.setColor(option.palette.highlight().color());
++                //                pen.setColor(option.palette.highlight().color());
+                 pen.setColor(ThemeController::getPaletteColorFromDT("highlight"));
+                 p.setPen(pen);
+-                p.drawLine(QPoint(left_border, rect.height()-1),QPoint(left_border + d->m_nextTabWidth, rect.height()-1));
++                p.drawLine(QPoint(left_border, rect.height() - 1), QPoint(left_border + d->m_nextTabWidth, rect.height() - 1));
+                 p.restore();
+-            }
+-            else
+-            {
++            } else {
+                 p.save();
+                 QPen pen;
+                 pen.setColor(bkgrdColor);
+                 pen.setWidth(2);
+                 p.setPen(pen);
+-                p.drawLine(rect.bottomLeft(),rect.bottomRight());
++                p.drawLine(rect.bottomLeft(), rect.bottomRight());
+                 p.restore();
+             }
+ 
+-
+             p.setBrush(Qt::NoBrush);
+             p.setPen(fontColor);
+             QPoint point;
+             uint tf = Qt::AlignVCenter;
+             if (!option.icon.isNull()) {
+                 QIcon::Mode mode = option.state & QStyle::State_Enabled ? QIcon::Normal
+-                                                                 : QIcon::Disabled;
++                                                                        : QIcon::Disabled;
+                 if (mode == QIcon::Normal && option.state & QStyle::State_HasFocus)
+                     mode = QIcon::Active;
+                 QIcon::State state = QIcon::Off;
+@@ -647,45 +589,37 @@ void KNativeTabbar::paintEvent(QPaintEvent *event)
+                 if (option.direction == Qt::RightToLeft)
+                     point.rx() += w;
+ 
+-                if(fm.width(tabText(i)) >= option.rect.width()-option.iconSize.width()-7)
+-                     p.drawPixmap(option.rect.x()+4,this->style()->visualPos(option.direction, option.rect, point).y(), pixmap);
++                if (fm.width(tabText(i)) >= option.rect.width() - option.iconSize.width() - 7)
++                    p.drawPixmap(option.rect.x() + 4, this->style()->visualPos(option.direction, option.rect, point).y(), pixmap);
+                 else
+                     p.drawPixmap(this->style()->visualPos(option.direction, option.rect, point), pixmap);
+ 
+-                if (!tabText(i).isEmpty()){
+-                    int subH = std::max(option.iconSize.height(),option.fontMetrics.height());
++                if (!tabText(i).isEmpty()) {
++                    int subH = std::max(option.iconSize.height(), option.fontMetrics.height());
+                     int icon_Y = (rect.height() - subH) / 2;
+                     int text_X = point.x() + option.iconSize.width() + 4;
+                     int text_Y = icon_Y;
+                     QRect textRect;
+-                    if(fm.width(tabText(i)) >= option.rect.width()-option.iconSize.width()-7)
+-                    {
+-                        textRect = QRect(option.rect.x()+option.iconSize.width()+8, text_Y, option.rect.width()-option.iconSize.width()-8, option.fontMetrics.height());
+-                        setTabToolTip(i,tabText(i));
+-                        QString elidedText = fm.elidedText(tabText(i),Qt::ElideRight,option.rect.width()-option.iconSize.width()-8);
+-                        p.drawText(textRect,elidedText);
+-                    }
+-                    else
+-                    {
+-                        textRect=QRect(text_X, text_Y, option.fontMetrics.width(tabText(i)), option.fontMetrics.height());
+-                        setTabToolTip(i,"");
+-                        p.drawText(textRect,tabText(i));
++                    if (fm.width(tabText(i)) >= option.rect.width() - option.iconSize.width() - 7) {
++                        textRect = QRect(option.rect.x() + option.iconSize.width() + 8, text_Y, option.rect.width() - option.iconSize.width() - 8, option.fontMetrics.height());
++                        setTabToolTip(i, tabText(i));
++                        QString elidedText = fm.elidedText(tabText(i), Qt::ElideRight, option.rect.width() - option.iconSize.width() - 8);
++                        p.drawText(textRect, elidedText);
++                    } else {
++                        textRect = QRect(text_X, text_Y, option.fontMetrics.width(tabText(i)), option.fontMetrics.height());
++                        setTabToolTip(i, "");
++                        p.drawText(textRect, tabText(i));
+                     }
+                 }
+-            }
+-            else
+-            {
++            } else {
+                 tf |= Qt::AlignHCenter;
+-                if(fm.width(tabText(i)) >= option.rect.width())
+-                {
+-                    QString elidedText = fm.elidedText(tabText(i),Qt::ElideRight,option.rect.width());
+-                    p.drawText(rect,tf,elidedText);
+-                    setTabToolTip(i,tabText(i));
+-                }
+-                else
+-                {
+-                    p.drawText(rect,tf,tabText(i));
+-                    setTabToolTip(i,"");
++                if (fm.width(tabText(i)) >= option.rect.width()) {
++                    QString elidedText = fm.elidedText(tabText(i), Qt::ElideRight, option.rect.width());
++                    p.drawText(rect, tf, elidedText);
++                    setTabToolTip(i, tabText(i));
++                } else {
++                    p.drawText(rect, tf, tabText(i));
++                    setTabToolTip(i, "");
+                 }
+             }
+             break;
+@@ -700,33 +634,31 @@ void KNativeTabbarPrivate::changeTheme()
+ {
+     Q_Q(KNativeTabbar);
+     switch (m_KNativeTabbarStyle) {
+-    case SegmentDark:
+-    {
+-        if(m_useCustomColor)
++    case SegmentDark: {
++        if (m_useCustomColor)
+             return;
+         else
+-//            m_bkgrdColor = q->palette().button().color();
++            //            m_bkgrdColor = q->palette().button().color();
+             m_bkgrdColor = ThemeController::getPaletteColorFromDT("button");
+         break;
+     }
+-    case SegmentLight:
+-    {
+-        if(m_useCustomColor)
+-           return;
++    case SegmentLight: {
++        if (m_useCustomColor)
++            return;
+         else
+-            m_bkgrdColor = QColor(0,0,0,0);
++            m_bkgrdColor = QColor(0, 0, 0, 0);
+         break;
+     }
+     case Sliding:
+-        if(m_useCustomColor)
++        if (m_useCustomColor)
+             return;
+         else
+-//            m_bkgrdColor = q->palette().button().color();
++            //            m_bkgrdColor = q->palette().button().color();
+             m_bkgrdColor = ThemeController::getPaletteColorFromDT("button");
+         break;
+     default:
+         break;
+-    } ;
++    };
+     q->update();
+ }
+ 
+@@ -744,17 +676,13 @@ int KNativeTabbarPrivate::getIndexAtPos(const QPoint &p)
+ bool KNativeTabbarPrivate::eventFilter(QObject *watched, QEvent *event)
+ {
+     Q_Q(KNativeTabbar);
+-    if(event->type() == QEvent::MouseButtonPress)
+-    {
+-        if(q->isEnabled())
+-        {
+-            QMouseEvent *mouseEvent = dynamic_cast<QMouseEvent*>(event);
+-            if(mouseEvent && mouseEvent->button() == Qt::MouseButton::LeftButton)
+-            {
++    if (event->type() == QEvent::MouseButtonPress) {
++        if (q->isEnabled()) {
++            QMouseEvent *mouseEvent = dynamic_cast<QMouseEvent *>(event);
++            if (mouseEvent && mouseEvent->button() == Qt::MouseButton::LeftButton) {
+                 int nextIndex = getIndexAtPos(mouseEvent->pos());
+                 int currentIndex = q->currentIndex();
+-                if(nextIndex != currentIndex)
+-                {
++                if (nextIndex != currentIndex) {
+                     int cur_left_border = q->tabRect(currentIndex).left();
+                     int next_left_border = q->tabRect(nextIndex).left();
+                     m_nextTabWidth = q->tabRect(nextIndex).width();
+@@ -764,8 +692,7 @@ bool KNativeTabbarPrivate::eventFilter(QObject *watched, QEvent *event)
+                     m_animationStarted = true;
+                 }
+             }
+-            if(mouseEvent && mouseEvent->button() == Qt::MouseButton::RightButton)
+-            {
++            if (mouseEvent && mouseEvent->button() == Qt::MouseButton::RightButton) {
+                 emit q->rightlicked(mouseEvent->globalPos());
+             }
+         }
+diff --git a/kysdk-qtwidgets/src/knativetabbar.h b/kysdk-qtwidgets/src/knativetabbar.h
+index ccfbd18..14f7f46 100644
+--- a/kysdk-qtwidgets/src/knativetabbar.h
++++ b/kysdk-qtwidgets/src/knativetabbar.h
+@@ -24,22 +24,21 @@
+ #define KNAVETABBAR_H
+ 
+ #include "gui_g.h"
+-#include <QTabBar>
+-#include <QIcon>
+ #include "kcustomtabbar.h"
++#include <QIcon>
++#include <QTabBar>
+ 
+ namespace kdk
+ {
+ 
+ /** @defgroup BarModule
+-  * @since 2.5
+-  */
++ * @since 2.5
++ */
+ 
+ /**
+  * @brief 支持三种样式
+  */
+-enum KNativeTabbarStyle
+-{
++enum KNativeTabbarStyle {
+     SegmentDark,
+     SegmentLight,
+     Sliding
+@@ -50,12 +49,12 @@ class KNativeTabbarPrivate;
+ /**
+  * @brief 支持三种样式
+  */
+-class GUI_EXPORT KNativeTabbar: public KCustomTabBar
++class GUI_EXPORT KNativeTabbar : public KCustomTabBar
+ {
+     Q_OBJECT
+ 
+ public:
+-    KNativeTabbar(KNativeTabbarStyle barStyle = SegmentLight,QWidget* parent = nullptr);
++    KNativeTabbar(KNativeTabbarStyle barStyle = SegmentLight, QWidget *parent = nullptr);
+     ~KNativeTabbar();
+ 
+     /**
+@@ -86,27 +85,28 @@ public:
+      * @brief 设置背景色
+      * @param color
+      */
+-    void setBackgroundColor(const QColor& color);
++    void setBackgroundColor(const QColor &color);
+ Q_SIGNALS:
+     /**
+      * @brief 鼠标右键信号
+      * @param point
+      */
+     void rightlicked(QPoint point);
++
+ protected:
+     QSize sizeHint() const;
+     QSize minimumTabSizeHint(int index) const;
+-     QSize tabSizeHint(int index) const;
++    QSize tabSizeHint(int index) const;
+     void paintEvent(QPaintEvent *event);
+ 
+ private:
+     Q_DECLARE_PRIVATE(KNativeTabbar)
+-    KNativeTabbarPrivate*const d_ptr;
++    KNativeTabbarPrivate *const d_ptr;
+ };
+ }
+ /**
+-  * @example testtabbar/widget.h
+-  * @example testtabbar/widget.cpp
+-  * @}
+-  */
+-#endif //KNAVETABBAR_H
++ * @example testtabbar/widget.h
++ * @example testtabbar/widget.cpp
++ * @}
++ */
++#endif // KNAVETABBAR_H
+diff --git a/kysdk-qtwidgets/src/knavigationbar.cpp b/kysdk-qtwidgets/src/knavigationbar.cpp
+index 210c4b6..c60206e 100644
+--- a/kysdk-qtwidgets/src/knavigationbar.cpp
++++ b/kysdk-qtwidgets/src/knavigationbar.cpp
+@@ -21,38 +21,37 @@
+  */
+ 
+ #include "knavigationbar.h"
+-#include <QListView>
+-#include <QStyledItemDelegate>
+-#include <QStandardItemModel>
+-#include <QVBoxLayout>
++#include "parmscontroller.h"
++#include "themeController.h"
+ #include <QCoreApplication>
+-#include <QScrollBar>
++#include <QDebug>
+ #include <QGSettings>
++#include <QLinearGradient>
++#include <QListView>
++#include <QModelIndex>
+ #include <QPainter>
+ #include <QPainterPath>
++#include <QScrollBar>
++#include <QStandardItemModel>
+ #include <QStyleOptionViewItem>
+-#include <QModelIndex>
+-#include <QLinearGradient>
+-#include <QDebug>
++#include <QStyledItemDelegate>
+ #include <QToolTip>
++#include <QVBoxLayout>
+ #include <QtMath>
+-#include "themeController.h"
+-#include "parmscontroller.h"
+ 
+ namespace kdk
+ {
+ 
+-enum ItemType
+-{
++enum ItemType {
+     StandardItem = 0,
+     SubItem,
+     TagItem
+ };
+ 
+-class Delegate:public QStyledItemDelegate,public ThemeController
++class Delegate : public QStyledItemDelegate, public ThemeController
+ {
+ public:
+-    Delegate(QObject*parent,QListView*view);
++    Delegate(QObject *parent, QListView *view);
+ 
+ protected:
+     void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override;
+@@ -65,63 +64,65 @@ private:
+ class ListView : public QListView
+ {
+ public:
+-    ListView(QWidget*parent);
++    ListView(QWidget *parent);
+ 
+ protected:
+-    void mousePressEvent(QMouseEvent* event);
++    void mousePressEvent(QMouseEvent *event);
+ };
+ 
+-class KNavigationBarPrivate:public QObject
++class KNavigationBarPrivate : public QObject
+ {
+     Q_OBJECT
+     Q_DECLARE_PUBLIC(KNavigationBar)
+ 
+ public:
+-    KNavigationBarPrivate(KNavigationBar*parent);
++    KNavigationBarPrivate(KNavigationBar *parent);
+     void changeTheme();
++
+ private:
+-    KNavigationBar* q_ptr;
+-    ListView* m_pView;
+-    QStandardItemModel* m_pModel;
+-    Delegate* m_pDelegate;
++    KNavigationBar *q_ptr;
++    ListView *m_pView;
++    QStandardItemModel *m_pModel;
++    Delegate *m_pDelegate;
+ };
+ 
+-
+-KNavigationBar::KNavigationBar(QWidget* parent)
+-    :QScrollArea(parent),
+-      d_ptr(new KNavigationBarPrivate(this))
++KNavigationBar::KNavigationBar(QWidget *parent)
++    : QScrollArea(parent)
++    , d_ptr(new KNavigationBarPrivate(this))
+ {
+     Q_D(KNavigationBar);
+-    setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Expanding);
+-    d->m_pView = new ListView (this);
++    setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding);
++    d->m_pView = new ListView(this);
+     d->m_pView->setResizeMode(QListView::Adjust);
+     d->m_pModel = new QStandardItemModel(d->m_pView);
+     d->m_pView->setModel(d->m_pModel);
+-    QVBoxLayout* vLayout = new QVBoxLayout(this);
++    QVBoxLayout *vLayout = new QVBoxLayout(this);
+     vLayout->setSizeConstraint(QLayout::SizeConstraint::SetMaximumSize);
+-    vLayout->setContentsMargins(0,0,0,0);
++    vLayout->setContentsMargins(0, 0, 0, 0);
+     vLayout->setSpacing(0);
+     vLayout->addWidget(d->m_pView);
+     d->m_pView->setFocus();
+     QPalette p = this->palette();
+-    QColor color(0,0,0,0);
+-    p.setColor(QPalette::Base,color);
++    QColor color(0, 0, 0, 0);
++    p.setColor(QPalette::Base, color);
+     d->m_pView->setPalette(p);
+     this->setPalette(p);
+     d->m_pView->setFrameStyle(0);
+-    d->m_pDelegate = new Delegate(this,d->m_pView);
++    d->m_pDelegate = new Delegate(this, d->m_pView);
+     d->m_pView->setItemDelegate(d->m_pDelegate);
+     d->m_pView->setEditTriggers(QAbstractItemView::NoEditTriggers);
+     this->setFrameStyle(0);
+     this->setBackgroundRole(QPalette::Base);
+     this->setAutoFillBackground(true);
+     d->changeTheme();
+-    connect(d->m_pDelegate->m_gsetting,&QGSettings::changed,this,[=](){d->changeTheme();});
+-    connect(Parmscontroller::self(),&Parmscontroller::modeChanged,this,[=](){
+-//        if(Parmscontroller::isTabletMode()) //解决导航栏滑动条切换主题为白条
+-//         d->m_pView->setStyleSheet("QListView item {height : 48}");
+-//        else
+-//         d->m_pView->setStyleSheet("QListView item {height : 36}");
++    connect(d->m_pDelegate->m_gsetting, &QGSettings::changed, this, [=]() {
++        d->changeTheme();
++    });
++    connect(Parmscontroller::self(), &Parmscontroller::modeChanged, this, [=]() {
++        //        if(Parmscontroller::isTabletMode()) //解决导航栏滑动条切换主题为白条
++        //         d->m_pView->setStyleSheet("QListView item {height : 48}");
++        //        else
++        //         d->m_pView->setStyleSheet("QListView item {height : 36}");
+         updateGeometry();
+     });
+ }
+@@ -129,32 +130,30 @@ KNavigationBar::KNavigationBar(QWidget* parent)
+ void KNavigationBar::addItem(QStandardItem *item)
+ {
+     Q_D(KNavigationBar);
+-    item->setData(ItemType::StandardItem,Qt::UserRole);
++    item->setData(ItemType::StandardItem, Qt::UserRole);
+     d->m_pModel->appendRow(item);
+ }
+ 
+ void KNavigationBar::addSubItem(QStandardItem *subItem)
+ {
+     Q_D(KNavigationBar);
+-    subItem->setData(ItemType::SubItem,Qt::UserRole);
+-    QPixmap pix(24,24);
++    subItem->setData(ItemType::SubItem, Qt::UserRole);
++    QPixmap pix(24, 24);
+     pix.fill(Qt::transparent);
+     QIcon icon(pix);
+     subItem->setIcon(icon);
+     d->m_pModel->appendRow(subItem);
+ }
+ 
+-
+ void KNavigationBar::addGroupItems(QList<QStandardItem *> items, const QString &tag)
+ {
+     Q_D(KNavigationBar);
+     QStandardItem *item = new QStandardItem(tag);
+     item->setEnabled(false);
+-    item->setData(ItemType::TagItem,Qt::UserRole);
++    item->setData(ItemType::TagItem, Qt::UserRole);
+     d->m_pModel->appendRow(item);
+-    for (auto item : items)
+-    {
+-        item->setData(ItemType::StandardItem,Qt::UserRole);
++    for (auto item : items) {
++        item->setData(ItemType::StandardItem, Qt::UserRole);
+         d->m_pModel->appendRow(item);
+     }
+ }
+@@ -164,7 +163,7 @@ void KNavigationBar::addTag(const QString &tag)
+     Q_D(KNavigationBar);
+     QStandardItem *item = new QStandardItem(tag);
+     item->setEnabled(false);
+-    item->setData(ItemType::TagItem,Qt::UserRole);
++    item->setData(ItemType::TagItem, Qt::UserRole);
+     d->m_pModel->appendRow(item);
+ }
+ 
+@@ -181,7 +180,7 @@ QListView *KNavigationBar::listview()
+ }
+ 
+ KNavigationBarPrivate::KNavigationBarPrivate(KNavigationBar *parent)
+-    :q_ptr(parent)
++    : q_ptr(parent)
+ {
+     setParent(parent);
+ }
+@@ -193,8 +192,8 @@ void KNavigationBarPrivate::changeTheme()
+ }
+ 
+ Delegate::Delegate(QObject *parent, QListView *view)
+-    :QStyledItemDelegate(parent),
+-      m_listView(view)
++    : QStyledItemDelegate(parent)
++    , m_listView(view)
+ {
+ }
+ 
+@@ -203,28 +202,26 @@ void Delegate::paint(QPainter *painter, const QStyleOptionViewItem &option, cons
+     QLinearGradient m_linearGradient;
+     QRectF rect;
+     rect.setX(option.rect.x());
+-    rect.setY(option.rect.y()+1);
++    rect.setY(option.rect.y() + 1);
+     rect.setWidth(option.rect.width());
+-//    rect.setHeight(option.rect.height()-2);
+-    rect.setHeight(option.rect.height()-Parmscontroller::parm(Parmscontroller::Parm::PM_NavigationBatInterval));
+-
+-    //QPainterPath画圆角矩形
+-    qreal radius = ThemeController::getRadiusFromDT("kradius-normal"); //圆角半径6px
+-    if(radius == -1);
+-        radius = 6;
++    //    rect.setHeight(option.rect.height()-2);
++    rect.setHeight(option.rect.height() - Parmscontroller::parm(Parmscontroller::Parm::PM_NavigationBatInterval));
++
++    // QPainterPath画圆角矩形
++    qreal radius = ThemeController::getRadiusFromDT("kradius-normal"); // 圆角半径6px
++    if (radius == -1)
++        ;
++    radius = 6;
+     QPainterPath path;
+     QPalette palette = option.palette;
+-    if(ThemeController::widgetTheme() == ClassicTheme)
+-    {
+-         rect = rect.adjusted(1,0,-1,0);
+-         path.moveTo(rect.topRight());
+-         path.lineTo(rect.bottomRight());
+-         path.lineTo(rect.bottomLeft());
+-         path.lineTo(rect.topLeft());
+-         path.lineTo(rect.topRight());
+-    }
+-    else
+-    {
++    if (ThemeController::widgetTheme() == ClassicTheme) {
++        rect = rect.adjusted(1, 0, -1, 0);
++        path.moveTo(rect.topRight());
++        path.lineTo(rect.bottomRight());
++        path.lineTo(rect.bottomLeft());
++        path.lineTo(rect.topLeft());
++        path.lineTo(rect.topRight());
++    } else {
+         path.moveTo(rect.topRight() - QPointF(radius, 0));
+         path.lineTo(rect.topLeft() + QPointF(radius, 0));
+         path.quadTo(rect.topLeft(), rect.topLeft() + QPointF(0, radius));
+@@ -235,289 +232,252 @@ void Delegate::paint(QPainter *painter, const QStyleOptionViewItem &option, cons
+         path.lineTo(rect.topRight() + QPointF(0, radius));
+         path.quadTo(rect.topRight(), rect.topRight() + QPointF(-radius, -0));
+     }
+-    int flag = index.model()->data(index,Qt::UserRole).toInt();
++    int flag = index.model()->data(index, Qt::UserRole).toInt();
+     painter->setRenderHint(QPainter::Antialiasing);
+     painter->setRenderHint(QPainter::HighQualityAntialiasing);
+     painter->setRenderHint(QPainter::TextAntialiasing);
+     painter->setRenderHint(QPainter::SmoothPixmapTransform);
+     QColor color;
+     QColor borColor;
+-    m_linearGradient = QLinearGradient(rect.width()/2,rect.y(),rect.width()/2,rect.height()+rect.y());
+-    if(!(option.state & QStyle::State_Enabled))
+-    {
+-        color=QColor("#FFB3B3B3");
++    m_linearGradient = QLinearGradient(rect.width() / 2, rect.y(), rect.width() / 2, rect.height() + rect.y());
++    if (!(option.state & QStyle::State_Enabled)) {
++        color = QColor("#FFB3B3B3");
+         borColor = QColor(0, 0, 73);
+-    }
+-    else if(((m_listView->currentIndex() == index) ||(option.state & QStyle::State_Selected)|| (option.state & QStyle::State_MouseOver))
+-            && flag != 2)
+-        {
+-            if((m_listView->currentIndex() == index) ||(option.state & QStyle::State_Selected))
+-            {
+-                if(ThemeController::widgetTheme() == ClassicTheme)
+-                {
+-                    if(ThemeController::themeMode() == LightTheme)
+-                    {
+-                        color = ThemeController::highlightClick(false,palette);
+-                        color = ThemeController::adjustH(color,-3);
+-                        color = ThemeController::adjustS(color,-3);
+-                        color = ThemeController::adjustL(color,-2);
+-
+-                        borColor = ThemeController::highlightClick(false,palette);
+-                        borColor = ThemeController::adjustH(borColor,0);
+-                        borColor = ThemeController::adjustS(borColor,-34);
+-                        borColor = ThemeController::adjustL(borColor,-30);
+-                    }
+-                    else
+-                    {
+-                        color=ThemeController::highlightClick(true,palette);
+-                        color = ThemeController::adjustH(color,-2);
+-                        color = ThemeController::adjustS(color,-23);
+-                        color = ThemeController::adjustL(color,11);
+-
+-                        borColor = ThemeController::highlightClick(true,palette);
+-                        borColor = ThemeController::adjustH(borColor,-2);
+-                        borColor = ThemeController::adjustS(borColor,2);
+-                        borColor = ThemeController::adjustL(borColor,46);
+-                    }
++    } else if (((m_listView->currentIndex() == index) || (option.state & QStyle::State_Selected) || (option.state & QStyle::State_MouseOver))
++               && flag != 2) {
++        if ((m_listView->currentIndex() == index) || (option.state & QStyle::State_Selected)) {
++            if (ThemeController::widgetTheme() == ClassicTheme) {
++                if (ThemeController::themeMode() == LightTheme) {
++                    color = ThemeController::highlightClick(false, palette);
++                    color = ThemeController::adjustH(color, -3);
++                    color = ThemeController::adjustS(color, -3);
++                    color = ThemeController::adjustL(color, -2);
++
++                    borColor = ThemeController::highlightClick(false, palette);
++                    borColor = ThemeController::adjustH(borColor, 0);
++                    borColor = ThemeController::adjustS(borColor, -34);
++                    borColor = ThemeController::adjustL(borColor, -30);
++                } else {
++                    color = ThemeController::highlightClick(true, palette);
++                    color = ThemeController::adjustH(color, -2);
++                    color = ThemeController::adjustS(color, -23);
++                    color = ThemeController::adjustL(color, 11);
++
++                    borColor = ThemeController::highlightClick(true, palette);
++                    borColor = ThemeController::adjustH(borColor, -2);
++                    borColor = ThemeController::adjustS(borColor, 2);
++                    borColor = ThemeController::adjustL(borColor, 46);
+                 }
+-                else
+-                {
+-                    color = ThemeController::getPaletteColorFromDT("highlight");
+-                    if(ThemeController::themeMode() == LightTheme)
+-                    {
+-                        m_linearGradient.setColorAt(0,color);
+-                        m_linearGradient.setColorAt(1,color);
+-                    }
+-                    else
+-                    {
+-                        m_linearGradient.setColorAt(0,color);
+-                        m_linearGradient.setColorAt(1,color);
+-                    }
++            } else {
++                color = ThemeController::getPaletteColorFromDT("highlight");
++                if (ThemeController::themeMode() == LightTheme) {
++                    m_linearGradient.setColorAt(0, color);
++                    m_linearGradient.setColorAt(1, color);
++                } else {
++                    m_linearGradient.setColorAt(0, color);
++                    m_linearGradient.setColorAt(1, color);
+                 }
+             }
+-            else {
+-                //hover时
+-                if(ThemeController::widgetTheme() == ClassicTheme)
+-                {
+-                    if(ThemeController::themeMode() == LightTheme)
+-                    {
+-                        color = ThemeController::highlightHover(false,palette);
+-                        color = ThemeController::adjustH(color,-3);
+-                        color = ThemeController::adjustS(color,-8);
+-                        color = ThemeController::adjustL(color,-3);
+-
+-                        borColor = ThemeController::highlightHover(false,palette);
+-                        borColor = ThemeController::adjustH(borColor,-3);
+-                        borColor = ThemeController::adjustS(borColor,-24);
+-                        borColor = ThemeController::adjustL(borColor,-24);
+-                    }
+-                    else
+-                    {
+-                        color=ThemeController::highlightHover(true,palette);
+-                        color = ThemeController::adjustH(color,-2);
+-                        color = ThemeController::adjustS(color,-23);
+-                        color = ThemeController::adjustL(color,11);
+-
+-                        borColor = ThemeController::highlightHover(true,palette);
+-                        borColor = ThemeController::adjustH(borColor,-2);
+-                        borColor = ThemeController::adjustS(borColor,-2);
+-                        borColor = ThemeController::adjustL(borColor,36);
+-                    }
++        } else {
++            // hover时
++            if (ThemeController::widgetTheme() == ClassicTheme) {
++                if (ThemeController::themeMode() == LightTheme) {
++                    color = ThemeController::highlightHover(false, palette);
++                    color = ThemeController::adjustH(color, -3);
++                    color = ThemeController::adjustS(color, -8);
++                    color = ThemeController::adjustL(color, -3);
++
++                    borColor = ThemeController::highlightHover(false, palette);
++                    borColor = ThemeController::adjustH(borColor, -3);
++                    borColor = ThemeController::adjustS(borColor, -24);
++                    borColor = ThemeController::adjustL(borColor, -24);
++                } else {
++                    color = ThemeController::highlightHover(true, palette);
++                    color = ThemeController::adjustH(color, -2);
++                    color = ThemeController::adjustS(color, -23);
++                    color = ThemeController::adjustL(color, 11);
++
++                    borColor = ThemeController::highlightHover(true, palette);
++                    borColor = ThemeController::adjustH(borColor, -2);
++                    borColor = ThemeController::adjustS(borColor, -2);
++                    borColor = ThemeController::adjustL(borColor, 36);
+                 }
+-                else if(ThemeController::widgetTheme() == FashionTheme)
+-                {
+-                    if(ThemeController::themeMode() == LightTheme)
+-                    {
+-                        color = ThemeController::getPaletteColorFromDT("windowtext");
+-                        color.setAlphaF(0.05);
+-
+-                        QColor m_color("#E6E6E6");
+-                        QColor startColor;
+-                        QColor endLightColor;
+-
+-                        ThemeController::getGradientFromDT("kcomponent-hover",startColor,endLightColor);
+-                        if(!startColor.isValid())
+-                            startColor = mixColor(m_color,QColor(Qt::black),0.05);
+-                        if(!endLightColor.isValid())
+-                            endLightColor = mixColor(m_color,QColor(Qt::black),0.2);
+-
+-                        m_linearGradient.setColorAt(0,startColor);
+-                        m_linearGradient.setColorAt(1,endLightColor);
+-                    }
+-                    else
+-                    {
+-                        color = ThemeController::getPaletteColorFromDT("windowtext");
+-                        color.setAlphaF(0.05);
+-
+-                        QColor color("#373737");
+-                        QColor startColor;
+-                        QColor endLightColor;
+-
+-                        if(!startColor.isValid())
+-                            startColor = mixColor(color,QColor(Qt::white),0.2);
+-                        if(!endLightColor.isValid())
+-                            endLightColor = mixColor(color,QColor(Qt::white),0.05);
+-                        m_linearGradient.setColorAt(0,startColor);
+-                        m_linearGradient.setColorAt(1,endLightColor);
+-                    }
+-                }
+-                else
+-                {
++            } else if (ThemeController::widgetTheme() == FashionTheme) {
++                if (ThemeController::themeMode() == LightTheme) {
++                    color = ThemeController::getPaletteColorFromDT("windowtext");
++                    color.setAlphaF(0.05);
++
++                    QColor m_color("#E6E6E6");
++                    QColor startColor;
++                    QColor endLightColor;
++
++                    ThemeController::getGradientFromDT("kcomponent-hover", startColor, endLightColor);
++                    if (!startColor.isValid())
++                        startColor = mixColor(m_color, QColor(Qt::black), 0.05);
++                    if (!endLightColor.isValid())
++                        endLightColor = mixColor(m_color, QColor(Qt::black), 0.2);
++
++                    m_linearGradient.setColorAt(0, startColor);
++                    m_linearGradient.setColorAt(1, endLightColor);
++                } else {
+                     color = ThemeController::getPaletteColorFromDT("windowtext");
+                     color.setAlphaF(0.05);
++
++                    QColor color("#373737");
++                    QColor startColor;
++                    QColor endLightColor;
++
++                    if (!startColor.isValid())
++                        startColor = mixColor(color, QColor(Qt::white), 0.2);
++                    if (!endLightColor.isValid())
++                        endLightColor = mixColor(color, QColor(Qt::white), 0.05);
++                    m_linearGradient.setColorAt(0, startColor);
++                    m_linearGradient.setColorAt(1, endLightColor);
+                 }
++            } else {
++                color = ThemeController::getPaletteColorFromDT("windowtext");
++                color.setAlphaF(0.05);
+             }
+-            painter->save();
+-            if(ThemeController::widgetTheme() == ClassicTheme)
+-            {
+-                painter->setPen(borColor);
+-            }
+-            else
+-            {
+-                painter->setPen(QPen(Qt::NoPen));
+-            }
+-            if(ThemeController::widgetTheme() == FashionTheme )
+-            {
+-                painter->setBrush(m_linearGradient);
+-            }
+-            else
+-            {
+-                painter->setBrush(color);
+-            }
+-            if(painter->pen().width() == 1)
+-                painter->translate(0.5,0.5);
+-            painter->drawPath(path);
+-            painter->restore();
+         }
++        painter->save();
++        if (ThemeController::widgetTheme() == ClassicTheme) {
++            painter->setPen(borColor);
++        } else {
++            painter->setPen(QPen(Qt::NoPen));
++        }
++        if (ThemeController::widgetTheme() == FashionTheme) {
++            painter->setBrush(m_linearGradient);
++        } else {
++            painter->setBrush(color);
++        }
++        if (painter->pen().width() == 1)
++            painter->translate(0.5, 0.5);
++        painter->drawPath(path);
++        painter->restore();
++    }
+ 
+     switch (flag) {
+-    case 0://standardItem
++    case 0: // standardItem
+     {
+         QRect iconRect;
+-        if(ThemeController::systemLang())
+-            iconRect = QRect(rect.right()-32,rect.y()+(rect.height()-16)/2,16,16); //图片大小16*16 左边距16
++        if (ThemeController::systemLang())
++            iconRect = QRect(rect.right() - 32, rect.y() + (rect.height() - 16) / 2, 16, 16); // 图片大小16*16 左边距16
+         else
+-            iconRect = QRect(rect.x()+16,rect.y()+(rect.height()-16)/2,16,16);
+-        auto *model =dynamic_cast<QStandardItemModel*>(const_cast<QAbstractItemModel*>(index.model()));
++            iconRect = QRect(rect.x() + 16, rect.y() + (rect.height() - 16) / 2, 16, 16);
++        auto *model = dynamic_cast<QStandardItemModel *>(const_cast<QAbstractItemModel *>(index.model()));
+         auto icon = model->item(index.row())->icon();
+ 
+-        if(ThemeController::isPixmapPureColor(icon.pixmap(16,16)))
+-        {
+-            if(ThemeController::themeMode() == DarkTheme)
+-                  icon = ThemeController::drawSymbolicColoredPixmap(icon.pixmap(16,16));
+-            if((m_listView->currentIndex() == index)|| (option.state & QStyle::State_Selected))
+-                if(ThemeController::widgetTheme() != ClassicTheme)
+-                    icon = ThemeController::drawColoredPixmap(icon.pixmap(16,16),QColor(255,255,255));
+-            if(!(option.state & QStyle::State_Enabled))
+-                icon = ThemeController::drawColoredPixmap(icon.pixmap(16,16),QColor("#FF979797"));
++        if (ThemeController::isPixmapPureColor(icon.pixmap(16, 16))) {
++            if (ThemeController::themeMode() == DarkTheme)
++                icon = ThemeController::drawSymbolicColoredPixmap(icon.pixmap(16, 16));
++            if ((m_listView->currentIndex() == index) || (option.state & QStyle::State_Selected))
++                if (ThemeController::widgetTheme() != ClassicTheme)
++                    icon = ThemeController::drawColoredPixmap(icon.pixmap(16, 16), QColor(255, 255, 255));
++            if (!(option.state & QStyle::State_Enabled))
++                icon = ThemeController::drawColoredPixmap(icon.pixmap(16, 16), QColor("#FF979797"));
+         }
+-        icon.paint(painter,iconRect);
++        icon.paint(painter, iconRect);
+         QFontMetrics fm = painter->fontMetrics();
+-        QString elidedText = fm.elidedText(index.model()->data(index,Qt::DisplayRole).toString(),Qt::ElideRight,rect.width()-56); //左边距+图片宽度+文本图片间距+右边距
++        QString elidedText = fm.elidedText(index.model()->data(index, Qt::DisplayRole).toString(), Qt::ElideRight, rect.width() - 56); // 左边距+图片宽度+文本图片间距+右边距
+ 
+         QString mainText = index.data(Qt::DisplayRole).toString();
+-        if(fm.width(mainText) > rect.width()-56)
++        if (fm.width(mainText) > rect.width() - 56)
+             model->item(index.row())->setToolTip(mainText);
+         painter->save();
+-        if(ThemeController::widgetTheme() == ClassicTheme)
+-        {
+-            if((m_listView->currentIndex() == index)||(option.state & QStyle::State_Selected))
++        if (ThemeController::widgetTheme() == ClassicTheme) {
++            if ((m_listView->currentIndex() == index) || (option.state & QStyle::State_Selected))
+                 painter->setPen(ThemeController::getPaletteColorFromDT("text"));
+ 
+-        }
+-        else
+-        {
+-            if((m_listView->currentIndex() == index)||(option.state & QStyle::State_Selected))
++        } else {
++            if ((m_listView->currentIndex() == index) || (option.state & QStyle::State_Selected))
+                 painter->setPen(ThemeController::getPaletteColorFromDT("highlightedtext"));
+         }
+         QFont font;
+         font.setPointSize(ThemeController::systemFontSize());
+-        if(!(option.state & QStyle::State_Enabled))
+-        {
++        if (!(option.state & QStyle::State_Enabled)) {
+             painter->setPen(color);
+         }
+         painter->setFont(font);
+-        if(!icon.isNull()){
+-            if(ThemeController::systemLang())
+-            {
+-
+-                painter->drawText(QRect(rect.left() + 16,rect.y(),
+-                                    rect.width()-56,rect.height()),Qt::AlignVCenter,elidedText); //文本 图片间距8px
+-            }
+-            else
+-                painter->drawText(QRect(iconRect.right()+8,rect.y(),
+-                                    rect.width()-56,rect.height()),Qt::AlignVCenter,elidedText);
+-        }
+-        else {
+-            if(ThemeController::systemLang())
+-                painter->drawText(QRect(rect.x() + 16,rect.y(),
+-                                    rect.width() - 56,rect.height()),Qt::AlignVCenter,elidedText);
++        if (!icon.isNull()) {
++            if (ThemeController::systemLang()) {
++
++                painter->drawText(QRect(rect.left() + 16, rect.y(),
++                                        rect.width() - 56, rect.height()),
++                                  Qt::AlignVCenter, elidedText); // 文本 图片间距8px
++            } else
++                painter->drawText(QRect(iconRect.right() + 8, rect.y(),
++                                        rect.width() - 56, rect.height()),
++                                  Qt::AlignVCenter, elidedText);
++        } else {
++            if (ThemeController::systemLang())
++                painter->drawText(QRect(rect.x() + 16, rect.y(),
++                                        rect.width() - 56, rect.height()),
++                                  Qt::AlignVCenter, elidedText);
+             else
+-                painter->drawText(QRect(rect.x()+16,rect.y(),
+-                                    rect.width()-56,rect.height()),Qt::AlignVCenter,elidedText);
++                painter->drawText(QRect(rect.x() + 16, rect.y(),
++                                        rect.width() - 56, rect.height()),
++                                  Qt::AlignVCenter, elidedText);
+         }
+         painter->restore();
+         break;
+     }
+-    case 1://subItem
++    case 1: // subItem
+     {
+-        QRect iconRect=QRect(rect.x()+16,rect.y()+(rect.height()-16)/2,16,16); //图片大小16*16 左边距16
+-        auto *model =dynamic_cast<QStandardItemModel*>(const_cast<QAbstractItemModel*>(index.model()));
++        QRect iconRect = QRect(rect.x() + 16, rect.y() + (rect.height() - 16) / 2, 16, 16); // 图片大小16*16 左边距16
++        auto *model = dynamic_cast<QStandardItemModel *>(const_cast<QAbstractItemModel *>(index.model()));
+ 
+         QFontMetrics fm = painter->fontMetrics();
+-        QString elidedText = fm.elidedText(index.model()->data(index,Qt::DisplayRole).toString(),Qt::ElideRight,rect.width()-56); //左边距+图片宽度+文本图片间距+右边距
++        QString elidedText = fm.elidedText(index.model()->data(index, Qt::DisplayRole).toString(), Qt::ElideRight, rect.width() - 56); // 左边距+图片宽度+文本图片间距+右边距
+ 
+         QString mainText = index.data(Qt::DisplayRole).toString();
+-        if(fm.width(mainText) > rect.width()-56)
++        if (fm.width(mainText) > rect.width() - 56)
+             model->item(index.row())->setToolTip(mainText);
+         painter->save();
+-        if(ThemeController::widgetTheme() == ClassicTheme)
+-        {
+-            if(/*(option.state & QStyle::State_HasFocus) &&*/ (option.state & QStyle::State_Selected))
++        if (ThemeController::widgetTheme() == ClassicTheme) {
++            if (/*(option.state & QStyle::State_HasFocus) &&*/ (option.state & QStyle::State_Selected))
+                 painter->setPen(ThemeController::getPaletteColorFromDT("text"));
+-        }
+-        else
+-        {
+-            if(/*(option.state & QStyle::State_HasFocus) &&*/ (option.state & QStyle::State_Selected))
++        } else {
++            if (/*(option.state & QStyle::State_HasFocus) &&*/ (option.state & QStyle::State_Selected))
+                 painter->setPen(ThemeController::getPaletteColorFromDT("highlightedtext"));
+         }
+         QFont font;
+         font.setPointSize(ThemeController::systemFontSize());
+-        if(!(option.state & QStyle::State_Enabled))
+-        {
++        if (!(option.state & QStyle::State_Enabled)) {
+             painter->setPen(color);
+         }
+         painter->setFont(font);
+-        if(ThemeController::systemLang())
+-            painter->drawText(QRect(rect.x() + 16,rect.y(),
+-                                rect.width() - 56,rect.height()),Qt::AlignVCenter,elidedText); //文本 图片间距8px
++        if (ThemeController::systemLang())
++            painter->drawText(QRect(rect.x() + 16, rect.y(),
++                                    rect.width() - 56, rect.height()),
++                              Qt::AlignVCenter, elidedText); // 文本 图片间距8px
+         else
+-            painter->drawText(QRect(iconRect.right()+8,rect.y(),
+-                                    rect.width()-56,rect.height()),Qt::AlignVCenter,elidedText);
++            painter->drawText(QRect(iconRect.right() + 8, rect.y(),
++                                    rect.width() - 56, rect.height()),
++                              Qt::AlignVCenter, elidedText);
+         painter->restore();
+         break;
+     }
+-    case 2://tagItem
++    case 2: // tagItem
+     {
+         painter->save();
+-        auto *model =dynamic_cast<QStandardItemModel*>(const_cast<QAbstractItemModel*>(index.model()));
++        auto *model = dynamic_cast<QStandardItemModel *>(const_cast<QAbstractItemModel *>(index.model()));
+         QFontMetrics fm = painter->fontMetrics();
+-        QString elidedText = fm.elidedText(index.model()->data(index,Qt::DisplayRole).toString(),Qt::ElideRight,rect.width()-56); //左边距+图片宽度+文本图片间距+右边距
++        QString elidedText = fm.elidedText(index.model()->data(index, Qt::DisplayRole).toString(), Qt::ElideRight, rect.width() - 56); // 左边距+图片宽度+文本图片间距+右边距
+ 
+         QString mainText = index.data(Qt::DisplayRole).toString();
+-        if(fm.width(mainText) > rect.width()-56)
++        if (fm.width(mainText) > rect.width() - 56)
+             model->item(index.row())->setToolTip(mainText);
+-        if(ThemeController::themeMode() == ThemeFlag::DarkTheme)
+-            painter->setPen(QColor(115,115,115));
++        if (ThemeController::themeMode() == ThemeFlag::DarkTheme)
++            painter->setPen(QColor(115, 115, 115));
+         else
+-            painter->setPen(QColor(140,140,140));
++            painter->setPen(QColor(140, 140, 140));
+ 
+         QRect textRect = option.rect;
+-        textRect = textRect.adjusted(16,12,0,0);
++        textRect = textRect.adjusted(16, 12, 0, 0);
+         QFont font;
+         font.setPointSize(ThemeController::systemFontSize());
+         painter->setFont(font);
+-        painter->drawText(textRect,Qt::AlignVCenter,elidedText);
++        painter->drawText(textRect, Qt::AlignVCenter, elidedText);
+         painter->restore();
+         break;
+     }
+@@ -528,14 +488,14 @@ void Delegate::paint(QPainter *painter, const QStyleOptionViewItem &option, cons
+ 
+ QSize Delegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const
+ {
+-    int flag = index.model()->data(index,Qt::UserRole).toInt();
++    int flag = index.model()->data(index, Qt::UserRole).toInt();
+     QSize size;
+     switch (flag) {
+-    case 2://tagItem
+-        size.setHeight(Parmscontroller::parm(Parmscontroller::Parm::PM_NavigationBatHeight)+12);
++    case 2: // tagItem
++        size.setHeight(Parmscontroller::parm(Parmscontroller::Parm::PM_NavigationBatHeight) + 12);
+         break;
+     default:
+-        size.setHeight(Parmscontroller::parm(Parmscontroller::Parm::PM_NavigationBatHeight)+Parmscontroller::parm(Parmscontroller::Parm::PM_NavigationBatInterval));
++        size.setHeight(Parmscontroller::parm(Parmscontroller::Parm::PM_NavigationBatHeight) + Parmscontroller::parm(Parmscontroller::Parm::PM_NavigationBatInterval));
+         break;
+     }
+     size.setWidth(option.rect.width());
+@@ -543,16 +503,15 @@ QSize Delegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &
+ }
+ 
+ ListView::ListView(QWidget *parent)
+-    :QListView(parent)
++    : QListView(parent)
+ {
+-
+ }
+ 
+ void ListView::mousePressEvent(QMouseEvent *event)
+ {
+-    if(event->button() & Qt::RightButton)
+-        return ;
+-    else if(event->button() & Qt::LeftButton)
++    if (event->button() & Qt::RightButton)
++        return;
++    else if (event->button() & Qt::LeftButton)
+         QListView::mousePressEvent(event);
+ }
+ 
+diff --git a/kysdk-qtwidgets/src/knavigationbar.h b/kysdk-qtwidgets/src/knavigationbar.h
+index b4def53..4ca7f7a 100644
+--- a/kysdk-qtwidgets/src/knavigationbar.h
++++ b/kysdk-qtwidgets/src/knavigationbar.h
+@@ -24,19 +24,19 @@
+ #define KNAVIGATIONBAR_H
+ 
+ #include "gui_g.h"
++#include <QListView>
++#include <QModelIndex>
++#include <QMouseEvent>
+ #include <QScrollArea>
+ #include <QStandardItem>
+-#include <QModelIndex>
+ #include <QStandardItemModel>
+-#include <QListView>
+-#include <QMouseEvent>
+ 
+ namespace kdk
+ {
+ 
+ /** @defgroup BarModule
+-  * @{
+-  */
++ * @{
++ */
+ 
+ class KNavigationBarPrivate;
+ class ListView;
+@@ -44,59 +44,59 @@ class ListView;
+ /**
+  * @brief 导航栏控件
+  */
+-class GUI_EXPORT KNavigationBar:public QScrollArea
++class GUI_EXPORT KNavigationBar : public QScrollArea
+ {
+     Q_OBJECT
+ 
+ public:
+-    KNavigationBar(QWidget*parent);
++    KNavigationBar(QWidget *parent);
+ 
+     /**
+      * @brief 增加常规Item
+      * @param item
+      */
+-    void addItem(QStandardItem*item);
++    void addItem(QStandardItem *item);
+ 
+     /**
+      * @brief 增加次级Item
+      * @param subItem
+      */
+-    void addSubItem(QStandardItem*subItem);
++    void addSubItem(QStandardItem *subItem);
+ 
+     /**
+      * @brief 成组增加Item,在导航栏中会显示tag
+      * @param items
+      * @param tag
+      */
+-    void addGroupItems(QList<QStandardItem*>items,const QString& tag);
++    void addGroupItems(QList<QStandardItem *> items, const QString &tag);
+ 
+     /**
+      * @brief 添加tag
+      * @param tag
+      */
+-    void addTag(const QString& tag);
++    void addTag(const QString &tag);
+ 
+     /**
+      * @brief 获取model
+      * @return
+      */
+-    QStandardItemModel* model();
++    QStandardItemModel *model();
+ 
+     /**
+      * @brief 获取view
+      * @return
+      */
+-    QListView* listview();
++    QListView *listview();
+ 
+ private:
+     Q_DECLARE_PRIVATE(KNavigationBar)
+-    KNavigationBarPrivate*const d_ptr;
++    KNavigationBarPrivate *const d_ptr;
+ };
+ 
+ }
+ /**
+-  * @example testnavigationbar/widget.h
+-  * @example testnavigationbar/widget.cpp
+-  * @}
+-  */
++ * @example testnavigationbar/widget.h
++ * @example testnavigationbar/widget.cpp
++ * @}
++ */
+ #endif // KNAVIGATIONBAR_H
+diff --git a/kysdk-qtwidgets/src/knavigationtrail.cpp b/kysdk-qtwidgets/src/knavigationtrail.cpp
+index 1e50a55..72fc813 100644
+--- a/kysdk-qtwidgets/src/knavigationtrail.cpp
++++ b/kysdk-qtwidgets/src/knavigationtrail.cpp
+@@ -21,15 +21,16 @@
+  */
+ 
+ #include "knavigationtrail.h"
+-#include "themeController.h"
+ #include "kborderlessbutton.h"
+ #include "kcrumb.h"
++#include "themeController.h"
+ #include <QBoxLayout>
+ #include <QDebug>
+ 
+-namespace kdk {
++namespace kdk
++{
+ 
+-class Q_DECL_HIDDEN KNavigationTrailPrivate:public QObject,public ThemeController
++class Q_DECL_HIDDEN KNavigationTrailPrivate : public QObject, public ThemeController
+ {
+     Q_OBJECT
+     Q_DECLARE_PUBLIC(KNavigationTrail)
+@@ -40,7 +41,7 @@ public:
+     void updateLayout();
+ 
+ private:
+-    KNavigationTrail* q_ptr;
++    KNavigationTrail *q_ptr;
+     KBorderlessButton *m_pLeftButton;
+     KBorderlessButton *m_pRightButton;
+     KCrumb *m_pCrumb;
+@@ -49,11 +50,10 @@ private:
+ };
+ 
+ KNavigationTrail::KNavigationTrail(QWidget *parent)
+-    :QWidget(parent)
+-    ,d_ptr(new KNavigationTrailPrivate(this))
++    : QWidget(parent)
++    , d_ptr(new KNavigationTrailPrivate(this))
+ {
+     Q_D(KNavigationTrail);
+-
+ }
+ 
+ KCrumb *KNavigationTrail::crumb()
+@@ -69,7 +69,6 @@ void KNavigationTrail::setPosition(ButtonPosition type)
+     d->updateLayout();
+ }
+ 
+-
+ void KNavigationTrail::resizeEvent(QResizeEvent *event)
+ {
+     Q_D(KNavigationTrail);
+@@ -78,7 +77,7 @@ void KNavigationTrail::resizeEvent(QResizeEvent *event)
+ }
+ 
+ KNavigationTrailPrivate::KNavigationTrailPrivate(KNavigationTrail *parent)
+-    :q_ptr(parent)
++    : q_ptr(parent)
+ {
+     Q_Q(KNavigationTrail);
+     m_position = ButtonPosition::LeftOrRight;
+@@ -93,35 +92,29 @@ KNavigationTrailPrivate::KNavigationTrailPrivate(KNavigationTrail *parent)
+     m_pHLayout->addWidget(m_pRightButton);
+     m_pHLayout->addWidget(m_pCrumb);
+ 
+-    connect(m_pCrumb,&KCrumb::currentChanged, this, [=](int index){
+-        if(index == 0)
+-        {
++    connect(m_pCrumb, &KCrumb::currentChanged, this, [=](int index) {
++        if (index == 0) {
+             m_pLeftButton->setEnabled(false);
+-            if(!m_pRightButton->isEnabled())
++            if (!m_pRightButton->isEnabled())
+                 m_pRightButton->setEnabled(true);
+-        }
+-        else if(index == m_pCrumb->count() - 1)
+-        {
++        } else if (index == m_pCrumb->count() - 1) {
+             m_pRightButton->setEnabled(false);
+-            if(!m_pLeftButton->isEnabled())
++            if (!m_pLeftButton->isEnabled())
+                 m_pLeftButton->setEnabled(true);
+-        }
+-        else
+-        {
+-            if(!m_pLeftButton->isEnabled())
++        } else {
++            if (!m_pLeftButton->isEnabled())
+                 m_pLeftButton->setEnabled(true);
+-            if(!m_pRightButton->isEnabled())
++            if (!m_pRightButton->isEnabled())
+                 m_pRightButton->setEnabled(true);
+         }
+     });
+ 
+-    connect(m_pLeftButton,&KBorderlessButton::clicked,this,[=]{
+-//        m_pCrumb->leftScroll();
++    connect(m_pLeftButton, &KBorderlessButton::clicked, this, [=] {
++        //        m_pCrumb->leftScroll();
+         m_pCrumb->setCurrentIndex(m_pCrumb->currentIndex() - 1);
+-
+     });
+-    connect(m_pRightButton,&KBorderlessButton::clicked,this,[=]{
+-//        m_pCrumb->rightScroll();
++    connect(m_pRightButton, &KBorderlessButton::clicked, this, [=] {
++        //        m_pCrumb->rightScroll();
+         m_pCrumb->setCurrentIndex(m_pCrumb->currentIndex() + 1);
+     });
+ }
+@@ -130,19 +123,17 @@ void KNavigationTrailPrivate::updateLayout()
+ {
+     Q_Q(KNavigationTrail);
+     QLayoutItem *child;
+-    while ((child = m_pHLayout->takeAt(0)) != 0)
+-    {
+-        //删除Stretch(弹簧)等布局
+-        if (child->spacerItem())
+-        {
++    while ((child = m_pHLayout->takeAt(0)) != 0) {
++        // 删除Stretch(弹簧)等布局
++        if (child->spacerItem()) {
+             m_pHLayout->removeItem(child);
+             continue;
+         }
+-        //删除布局
++        // 删除布局
+         m_pHLayout->removeWidget(child->widget());
+         child->widget()->setParent(nullptr);
+         delete child;
+-        child =nullptr;
++        child = nullptr;
+     }
+ 
+     switch (m_position) {
+diff --git a/kysdk-qtwidgets/src/knavigationtrail.h b/kysdk-qtwidgets/src/knavigationtrail.h
+index e72508a..ab242c7 100644
+--- a/kysdk-qtwidgets/src/knavigationtrail.h
++++ b/kysdk-qtwidgets/src/knavigationtrail.h
+@@ -23,11 +23,11 @@
+ #ifndef KNAVIGATIONTRAIL_H
+ #define KNAVIGATIONTRAIL_H
+ 
+-#include <QWidget>
+ #include "kcrumb.h"
++#include <QWidget>
+ 
+-namespace kdk {
+-
++namespace kdk
++{
+ 
+ enum ButtonPosition {
+     LeftPosition,
+@@ -59,7 +59,6 @@ public:
+      */
+     void setPosition(ButtonPosition type);
+ 
+-
+ Q_SIGNALS:
+     /**
+      * @brief 点击会发出信号
+@@ -71,11 +70,9 @@ protected:
+ 
+ private:
+     Q_DECLARE_PRIVATE(KNavigationTrail)
+-    KNavigationTrailPrivate*const d_ptr;
++    KNavigationTrailPrivate *const d_ptr;
+ };
+ 
+ }
+ 
+-
+-
+ #endif // KNAVIGATIONTRAIL_H
+diff --git a/kysdk-qtwidgets/src/kpasswordedit.cpp b/kysdk-qtwidgets/src/kpasswordedit.cpp
+index de31758..ffd9c0a 100644
+--- a/kysdk-qtwidgets/src/kpasswordedit.cpp
++++ b/kysdk-qtwidgets/src/kpasswordedit.cpp
+@@ -21,28 +21,28 @@
+  */
+ 
+ #include "kpasswordedit.h"
++#include "ktoolbutton.h"
++#include "parmscontroller.h"
++#include "themeController.h"
+ #include <QAction>
+-#include <QPalette>
+-#include <QToolButton>
+-#include <QHBoxLayout>
+-#include <QPushButton>
+ #include <QDebug>
+-#include <QTimer>
+ #include <QEvent>
+ #include <QGuiApplication>
+-#include "ktoolbutton.h"
+-#include "themeController.h"
+-#include "parmscontroller.h"
++#include <QHBoxLayout>
++#include <QPalette>
++#include <QPushButton>
++#include <QTimer>
++#include <QToolButton>
+ 
+ namespace kdk
+ {
+ 
+-class KPasswordEditPrivate:public QObject,public ThemeController
++class KPasswordEditPrivate : public QObject, public ThemeController
+ {
+     Q_OBJECT
+     Q_DECLARE_PUBLIC(KPasswordEdit)
+ public:
+-    KPasswordEditPrivate(KPasswordEdit*parent);
++    KPasswordEditPrivate(KPasswordEdit *parent);
+     void adjustLayout();
+     void repaintIcon();
+ 
+@@ -50,13 +50,13 @@ protected:
+     void changeTheme();
+ 
+ private:
+-    KPasswordEdit* q_ptr;
+-    KToolButton* m_pEchoModeBtn;
++    KPasswordEdit *q_ptr;
++    KToolButton *m_pEchoModeBtn;
+     LoginState m_state;
+-    KToolButton* m_pLoadingBtn;
+-    KToolButton* m_pClearBtn;
+-    QWidget* m_pWidget;
+-    QHBoxLayout* m_pWidgetLayout;
++    KToolButton *m_pLoadingBtn;
++    KToolButton *m_pClearBtn;
++    QWidget *m_pWidget;
++    QHBoxLayout *m_pWidgetLayout;
+     QTimer *m_pTimer;
+     bool m_isLoading;
+     bool m_hasFocus;
+@@ -64,43 +64,42 @@ private:
+     int m_flashState;
+ };
+ 
+-KPasswordEdit::KPasswordEdit(QWidget*parent)
+-    :QLineEdit(parent),
+-     d_ptr(new KPasswordEditPrivate(this))
++KPasswordEdit::KPasswordEdit(QWidget *parent)
++    : QLineEdit(parent)
++    , d_ptr(new KPasswordEditPrivate(this))
+ {
+     Q_D(KPasswordEdit);
+     d->m_pEchoModeBtn->setType(KToolButtonType::Flat);
+     d->m_pClearBtn->setType(KToolButtonType::Flat);
+     d->m_pLoadingBtn->setType(KToolButtonType::Flat);
+-    connect(d->m_pEchoModeBtn,&QToolButton::clicked,this,[=](){
+-        if(echoMode() == QLineEdit::Password)
++    connect(d->m_pEchoModeBtn, &QToolButton::clicked, this, [=]() {
++        if (echoMode() == QLineEdit::Password)
+             setEchoMode(QLineEdit::Normal);
+         else
+             setEchoMode(QLineEdit::Password);
+         d->repaintIcon();
+     });
+-    connect(this,&QLineEdit::textChanged,this,[=](){
+-        if(!text().isEmpty()&&d->m_pClearBtn->isEnabled() &&hasFocus())
+-        {
+-                d->m_pClearBtn->show();
+-                d->adjustLayout();
+-        }
+-        else
+-        {
++    connect(this, &QLineEdit::textChanged, this, [=]() {
++        if (!text().isEmpty() && d->m_pClearBtn->isEnabled() && hasFocus()) {
++            d->m_pClearBtn->show();
++            d->adjustLayout();
++        } else {
+             d->m_pClearBtn->hide();
+             d->adjustLayout();
+         }
+     });
+-    connect(d->m_pClearBtn,&QPushButton::clicked,this,[=](){this->clear();});
+-    connect(d->m_pTimer,&QTimer::timeout,this,[=](){
+-        if(d->m_flashState < 7)
++    connect(d->m_pClearBtn, &QPushButton::clicked, this, [=]() {
++        this->clear();
++    });
++    connect(d->m_pTimer, &QTimer::timeout, this, [=]() {
++        if (d->m_flashState < 7)
+             d->m_flashState++;
+         else
+             d->m_flashState = 0;
+         d->m_pLoadingBtn->setIcon(QIcon::fromTheme(QString("ukui-loading-%1.symbolic").arg(d->m_flashState)));
+     });
+-    connect(d->m_gsetting,&QGSettings::changed,d,&KPasswordEditPrivate::changeTheme);
+-    connect(Parmscontroller::self(),&Parmscontroller::modeChanged,this,[=](){
++    connect(d->m_gsetting, &QGSettings::changed, d, &KPasswordEditPrivate::changeTheme);
++    connect(Parmscontroller::self(), &Parmscontroller::modeChanged, this, [=]() {
+         updateGeometry();
+     });
+     d->repaintIcon();
+@@ -117,31 +116,30 @@ void KPasswordEdit::setState(LoginState state)
+     d->m_state = state;
+ 
+     auto palette = this->palette();
+-    switch (d->m_state)
+-    {
++    switch (d->m_state) {
+     case Ordinary:
+-        if(ThemeController::widgetTheme() == FashionTheme)
+-            palette.setBrush(QPalette::Highlight,QColor("#3769DD"));
++        if (ThemeController::widgetTheme() == FashionTheme)
++            palette.setBrush(QPalette::Highlight, QColor("#3769DD"));
+         else
+-            palette.setBrush(QPalette::Highlight,ThemeController::getPaletteColorFromDT("highlight"));
++            palette.setBrush(QPalette::Highlight, ThemeController::getPaletteColorFromDT("highlight"));
+         setPalette(palette);
+         break;
+     case LoginSuccess:
+-        if(ThemeController::widgetTheme() == FashionTheme)
+-            palette.setBrush(QPalette::Highlight,QColor("#3ECF20"));
+-        else if(ThemeController::widgetTheme() == ClassicTheme)
+-            palette.setBrush(QPalette::Highlight,ThemeController::lanhuHSLToQtHsl(152, 86, 43));
++        if (ThemeController::widgetTheme() == FashionTheme)
++            palette.setBrush(QPalette::Highlight, QColor("#3ECF20"));
++        else if (ThemeController::widgetTheme() == ClassicTheme)
++            palette.setBrush(QPalette::Highlight, ThemeController::lanhuHSLToQtHsl(152, 86, 43));
+         else
+-            palette.setBrush(QPalette::Highlight,QColor(15,206,117));
++            palette.setBrush(QPalette::Highlight, QColor(15, 206, 117));
+         setPalette(palette);
+         break;
+     case LoginFailed:
+-        if(ThemeController::widgetTheme() == FashionTheme)
+-            palette.setBrush(QPalette::Highlight,QColor("#D2293F"));
+-        else if(ThemeController::widgetTheme() == ClassicTheme)
+-            palette.setBrush(QPalette::Highlight,ThemeController::lanhuHSLToQtHsl(357, 90, 54));
++        if (ThemeController::widgetTheme() == FashionTheme)
++            palette.setBrush(QPalette::Highlight, QColor("#D2293F"));
++        else if (ThemeController::widgetTheme() == ClassicTheme)
++            palette.setBrush(QPalette::Highlight, ThemeController::lanhuHSLToQtHsl(357, 90, 54));
+         else
+-            palette.setBrush(QPalette::Highlight,QColor(243,34,45));
++            palette.setBrush(QPalette::Highlight, QColor(243, 34, 45));
+         setPalette(palette);
+         break;
+     default:
+@@ -159,14 +157,11 @@ void KPasswordEdit::setLoading(bool flag)
+ {
+     Q_D(KPasswordEdit);
+     d->m_isLoading = flag;
+-    if(flag)
+-    {
++    if (flag) {
+         d->m_pLoadingBtn->show();
+         d->m_pTimer->start();
+         QLineEdit::setEnabled(false);
+-    }
+-    else
+-    {
++    } else {
+         d->m_pLoadingBtn->hide();
+         d->m_pTimer->stop();
+         QLineEdit::setEnabled(true);
+@@ -182,7 +177,7 @@ bool KPasswordEdit::isLoading()
+ 
+ QString KPasswordEdit::placeholderText()
+ {
+-   return QLineEdit::placeholderText();
++    return QLineEdit::placeholderText();
+ }
+ 
+ void KPasswordEdit::setPlaceholderText(QString &text)
+@@ -231,11 +226,9 @@ bool KPasswordEdit::clearBtnVisible()
+ void KPasswordEdit::setEnabled(bool flag)
+ {
+     Q_D(KPasswordEdit);
+-    if(!flag)
+-    {
++    if (!flag) {
+         d->m_pClearBtn->hide();
+-        if(!isLoading())
+-        {
++        if (!isLoading()) {
+             d->m_pLoadingBtn->hide();
+         }
+     }
+@@ -253,7 +246,7 @@ void KPasswordEdit::setEchoMode(QLineEdit::EchoMode mode)
+ void KPasswordEdit::setUseCustomPalette(bool flag)
+ {
+     Q_D(KPasswordEdit);
+-    d->m_useCustomPalette =flag;
++    d->m_useCustomPalette = flag;
+ }
+ 
+ void KPasswordEdit::resizeEvent(QResizeEvent *event)
+@@ -267,30 +260,26 @@ void KPasswordEdit::resizeEvent(QResizeEvent *event)
+ bool KPasswordEdit::eventFilter(QObject *watched, QEvent *event)
+ {
+     Q_D(KPasswordEdit);
+-    if(watched == this)
+-    {
+-        if(event->type() == QEvent::FocusIn)
+-        {
++    if (watched == this) {
++        if (event->type() == QEvent::FocusIn) {
+             d->m_hasFocus = true;
+-            if(this->text().isEmpty())
++            if (this->text().isEmpty())
+                 d->m_pClearBtn->hide();
+-            else
+-            {
+-                if(d->m_pClearBtn->isEnabled())
++            else {
++                if (d->m_pClearBtn->isEnabled())
+                     d->m_pClearBtn->show();
+             }
+             d->adjustLayout();
+             d->changeTheme();
+         }
+-        if(event->type() == QEvent::FocusOut)
+-        {
++        if (event->type() == QEvent::FocusOut) {
+             d->m_hasFocus = false;
+             d->m_pClearBtn->hide();
+             d->adjustLayout();
+             d->changeTheme();
+         }
+     }
+-    return QLineEdit::eventFilter(watched,event);
++    return QLineEdit::eventFilter(watched, event);
+ }
+ 
+ QSize KPasswordEdit::sizeHint() const
+@@ -301,7 +290,8 @@ QSize KPasswordEdit::sizeHint() const
+ }
+ 
+ KPasswordEditPrivate::KPasswordEditPrivate(KPasswordEdit *parent)
+-    :q_ptr(parent),m_useCustomPalette(false)
++    : q_ptr(parent)
++    , m_useCustomPalette(false)
+ {
+     Q_Q(KPasswordEdit);
+     m_flashState = 0;
+@@ -325,8 +315,8 @@ KPasswordEditPrivate::KPasswordEditPrivate(KPasswordEdit *parent)
+     m_pEchoModeBtn->setAutoFillBackground(true);
+     m_pEchoModeBtn->setPalette(btnPalette);
+     m_pEchoModeBtn->setType(KToolButtonType::Background);
+-    m_pEchoModeBtn->setIconSize(QSize(16,16));
+-    m_pEchoModeBtn->setFixedSize(QSize(16,16));
++    m_pEchoModeBtn->setIconSize(QSize(16, 16));
++    m_pEchoModeBtn->setFixedSize(QSize(16, 16));
+     m_pEchoModeBtn->setFocusPolicy(Qt::NoFocus);
+     m_pEchoModeBtn->setCursor(Qt::ArrowCursor);
+     m_pEchoModeBtn->setIcon(QIcon::fromTheme("ukui-eye-hidden-symbolic"));
+@@ -334,8 +324,8 @@ KPasswordEditPrivate::KPasswordEditPrivate(KPasswordEdit *parent)
+     m_pLoadingBtn->setAutoFillBackground(true);
+     m_pLoadingBtn->setPalette(btnPalette);
+     m_pLoadingBtn->setType(KToolButtonType::Background);
+-    m_pLoadingBtn->setIconSize(QSize(16,16));
+-    m_pLoadingBtn->setFixedSize(QSize(16,16));
++    m_pLoadingBtn->setIconSize(QSize(16, 16));
++    m_pLoadingBtn->setFixedSize(QSize(16, 16));
+     m_pLoadingBtn->setFocusPolicy(Qt::NoFocus);
+     m_pLoadingBtn->setCursor(Qt::ArrowCursor);
+     m_pLoadingBtn->setIcon(QIcon::fromTheme("ukui-loading-0"));
+@@ -344,17 +334,17 @@ KPasswordEditPrivate::KPasswordEditPrivate(KPasswordEdit *parent)
+     m_pClearBtn->setAutoFillBackground(true);
+     m_pClearBtn->setPalette(btnPalette);
+     m_pClearBtn->setType(KToolButtonType::Background);
+-    m_pClearBtn->setIconSize(QSize(16,16));
+-    m_pClearBtn->setFixedSize(QSize(16,16));
++    m_pClearBtn->setIconSize(QSize(16, 16));
++    m_pClearBtn->setFixedSize(QSize(16, 16));
+     m_pClearBtn->setFocusPolicy(Qt::NoFocus);
+     m_pClearBtn->setCursor(Qt::ArrowCursor);
+     m_pClearBtn->setIcon(QIcon::fromTheme("application-exit-symbolic"));
+     m_pClearBtn->setVisible(false);
+     m_pWidget = new QWidget(q);
+     m_pWidgetLayout = new QHBoxLayout(m_pWidget);
+-    m_pWidgetLayout->setContentsMargins(0,0,0,0);
++    m_pWidgetLayout->setContentsMargins(0, 0, 0, 0);
+     m_pWidgetLayout->setSpacing(5);
+-    if(ThemeController::systemLang())
++    if (ThemeController::systemLang())
+         m_pWidget->setLayoutDirection(Qt::RightToLeft);
+     else
+         m_pWidget->setLayoutDirection(Qt::LeftToRight);
+@@ -362,7 +352,7 @@ KPasswordEditPrivate::KPasswordEditPrivate(KPasswordEdit *parent)
+     m_pWidgetLayout->addWidget(m_pClearBtn);
+     m_pWidgetLayout->addWidget(m_pEchoModeBtn);
+     m_pWidgetLayout->addSpacing(5);
+-    m_pWidget->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed);
++    m_pWidget->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
+     setParent(parent);
+ }
+ 
+@@ -371,58 +361,49 @@ void KPasswordEditPrivate::adjustLayout()
+     Q_Q(KPasswordEdit);
+     int spacing = 5;
+     int width = spacing;
+-    if(!m_pEchoModeBtn->isHidden())
+-        width +=(spacing + m_pEchoModeBtn->iconSize().width());
+-    if(!m_pClearBtn->isHidden())
+-        width +=(spacing + m_pClearBtn->iconSize().width());
+-    if(!m_pLoadingBtn->isHidden())
+-        width +=(spacing + m_pLoadingBtn->iconSize().width());
+-    m_pWidget->setFixedSize(width,q->height());
+-    if(ThemeController::systemLang())
+-    {
+-        m_pWidget->move(spacing,0);
+-        q->setTextMargins(m_pWidget->width(),0,0,0);
+-    }
+-    else
+-    {
+-        m_pWidget->move(q->width()-m_pWidget->width(),0);
+-        q->setTextMargins(0,0,m_pWidget->width(),0);
++    if (!m_pEchoModeBtn->isHidden())
++        width += (spacing + m_pEchoModeBtn->iconSize().width());
++    if (!m_pClearBtn->isHidden())
++        width += (spacing + m_pClearBtn->iconSize().width());
++    if (!m_pLoadingBtn->isHidden())
++        width += (spacing + m_pLoadingBtn->iconSize().width());
++    m_pWidget->setFixedSize(width, q->height());
++    if (ThemeController::systemLang()) {
++        m_pWidget->move(spacing, 0);
++        q->setTextMargins(m_pWidget->width(), 0, 0, 0);
++    } else {
++        m_pWidget->move(q->width() - m_pWidget->width(), 0);
++        q->setTextMargins(0, 0, m_pWidget->width(), 0);
+     }
+ }
+ 
+ void KPasswordEditPrivate::repaintIcon()
+ {
+     Q_Q(KPasswordEdit);
+-    if(ThemeController::themeMode() == LightTheme)
+-    {
+-//        m_pClearBtn->setIcon(drawColoredPixmap(QIcon::fromTheme("application-exit-symbolic").pixmap(16,16),q->palette().buttonText().color()));
+-        m_pClearBtn->setIcon(drawColoredPixmap(QIcon::fromTheme("application-exit-symbolic").pixmap(16,16),ThemeController::getPaletteColorFromDT("buttontext")));
+-        if(q->echoMode() == QLineEdit::Password)
+-//            m_pEchoModeBtn->setIcon(drawColoredPixmap(QIcon::fromTheme("ukui-eye-hidden-symbolic").pixmap(16,16),q->palette().buttonText().color()));
+-            m_pEchoModeBtn->setIcon(drawColoredPixmap(QIcon::fromTheme("ukui-eye-hidden-symbolic").pixmap(16,16),ThemeController::getPaletteColorFromDT("buttontext")));
++    if (ThemeController::themeMode() == LightTheme) {
++        //        m_pClearBtn->setIcon(drawColoredPixmap(QIcon::fromTheme("application-exit-symbolic").pixmap(16,16),q->palette().buttonText().color()));
++        m_pClearBtn->setIcon(drawColoredPixmap(QIcon::fromTheme("application-exit-symbolic").pixmap(16, 16), ThemeController::getPaletteColorFromDT("buttontext")));
++        if (q->echoMode() == QLineEdit::Password)
++            //            m_pEchoModeBtn->setIcon(drawColoredPixmap(QIcon::fromTheme("ukui-eye-hidden-symbolic").pixmap(16,16),q->palette().buttonText().color()));
++            m_pEchoModeBtn->setIcon(drawColoredPixmap(QIcon::fromTheme("ukui-eye-hidden-symbolic").pixmap(16, 16), ThemeController::getPaletteColorFromDT("buttontext")));
+         else
+-//            m_pEchoModeBtn->setIcon(drawColoredPixmap(QIcon::fromTheme("ukui-eye-display-symbolic").pixmap(16,16),q->palette().buttonText().color()));
+-            m_pEchoModeBtn->setIcon(drawColoredPixmap(QIcon::fromTheme("ukui-eye-display-symbolic").pixmap(16,16),ThemeController::getPaletteColorFromDT("buttontext")));
+-    }
+-    else
+-    {
+-//        m_pClearBtn->setIcon(drawColoredPixmap(QIcon::fromTheme("application-exit-symbolic").pixmap(16,16),q->palette().buttonText().color()));
+-        m_pClearBtn->setIcon(drawColoredPixmap(QIcon::fromTheme("application-exit-symbolic").pixmap(16,16),ThemeController::getPaletteColorFromDT("buttontext")));
+-        if(q->echoMode() == QLineEdit::Password)
+-        {
+-            if(q->isEnabled())
+-//                m_pEchoModeBtn->setIcon(drawColoredPixmap(QIcon::fromTheme("ukui-eye-hidden-symbolic").pixmap(16,16),q->palette().buttonText().color()));
+-                m_pEchoModeBtn->setIcon(drawColoredPixmap(QIcon::fromTheme("ukui-eye-hidden-symbolic").pixmap(16,16),ThemeController::getPaletteColorFromDT("buttontext")));
++            //            m_pEchoModeBtn->setIcon(drawColoredPixmap(QIcon::fromTheme("ukui-eye-display-symbolic").pixmap(16,16),q->palette().buttonText().color()));
++            m_pEchoModeBtn->setIcon(drawColoredPixmap(QIcon::fromTheme("ukui-eye-display-symbolic").pixmap(16, 16), ThemeController::getPaletteColorFromDT("buttontext")));
++    } else {
++        //        m_pClearBtn->setIcon(drawColoredPixmap(QIcon::fromTheme("application-exit-symbolic").pixmap(16,16),q->palette().buttonText().color()));
++        m_pClearBtn->setIcon(drawColoredPixmap(QIcon::fromTheme("application-exit-symbolic").pixmap(16, 16), ThemeController::getPaletteColorFromDT("buttontext")));
++        if (q->echoMode() == QLineEdit::Password) {
++            if (q->isEnabled())
++                //                m_pEchoModeBtn->setIcon(drawColoredPixmap(QIcon::fromTheme("ukui-eye-hidden-symbolic").pixmap(16,16),q->palette().buttonText().color()));
++                m_pEchoModeBtn->setIcon(drawColoredPixmap(QIcon::fromTheme("ukui-eye-hidden-symbolic").pixmap(16, 16), ThemeController::getPaletteColorFromDT("buttontext")));
+             else
+-                m_pEchoModeBtn->setIcon(drawColoredPixmap(QIcon::fromTheme("ukui-eye-hidden-symbolic").pixmap(16,16),QColor(50,50,50)));
+-        }
+-        else
+-        {
+-            if(q->isEnabled())
+-//                m_pEchoModeBtn->setIcon(drawColoredPixmap(QIcon::fromTheme("ukui-eye-display-symbolic").pixmap(16,16),q->palette().buttonText().color()));
+-                m_pEchoModeBtn->setIcon(drawColoredPixmap(QIcon::fromTheme("ukui-eye-display-symbolic").pixmap(16,16),ThemeController::getPaletteColorFromDT("buttontext")));
++                m_pEchoModeBtn->setIcon(drawColoredPixmap(QIcon::fromTheme("ukui-eye-hidden-symbolic").pixmap(16, 16), QColor(50, 50, 50)));
++        } else {
++            if (q->isEnabled())
++                //                m_pEchoModeBtn->setIcon(drawColoredPixmap(QIcon::fromTheme("ukui-eye-display-symbolic").pixmap(16,16),q->palette().buttonText().color()));
++                m_pEchoModeBtn->setIcon(drawColoredPixmap(QIcon::fromTheme("ukui-eye-display-symbolic").pixmap(16, 16), ThemeController::getPaletteColorFromDT("buttontext")));
+             else
+-                m_pEchoModeBtn->setIcon(drawColoredPixmap(QIcon::fromTheme("ukui-eye-display-symbolic").pixmap(16,16),QColor(50,50,50)));
++                m_pEchoModeBtn->setIcon(drawColoredPixmap(QIcon::fromTheme("ukui-eye-display-symbolic").pixmap(16, 16), QColor(50, 50, 50)));
+         }
+     }
+ }
+@@ -431,41 +412,35 @@ void KPasswordEditPrivate::changeTheme()
+ {
+     Q_Q(KPasswordEdit);
+     initThemeStyle();
+-    if(m_useCustomPalette)
++    if (m_useCustomPalette)
+         return;
+     repaintIcon();
+     QPalette palette = q->palette();
+-    if(q->hasFocus())
+-    {
+-//        QColor color = q->palette().color(QPalette::Base);
++    if (q->hasFocus()) {
++        //        QColor color = q->palette().color(QPalette::Base);
+         QColor color = ThemeController::getPaletteColorFromDT("base");
+-        palette.setBrush(QPalette::Button,color);
+-        if(ThemeController::themeMode() == LightTheme)
+-            palette.setBrush(QPalette::Text, QColor(38,38,38));
++        palette.setBrush(QPalette::Button, color);
++        if (ThemeController::themeMode() == LightTheme)
++            palette.setBrush(QPalette::Text, QColor(38, 38, 38));
+         else
+-            palette.setBrush(QPalette::Active, QPalette::Text, QColor(255,255,255));
++            palette.setBrush(QPalette::Active, QPalette::Text, QColor(255, 255, 255));
+         q->setPalette(palette);
+-    }
+-    else
+-    {
+-        if(ThemeController::themeMode() == LightTheme)
+-        {
+-            palette.setBrush(QPalette::Active, QPalette::Button, QColor(230,230,230));
+-            palette.setBrush(QPalette::Inactive, QPalette::Button, QColor(230,230,230));
+-            palette.setBrush(QPalette::Disabled, QPalette::Button, QColor(233,233,233));
+-            palette.setBrush(QPalette::Active, QPalette::Text, QColor(140,140,140));
+-            palette.setBrush(QPalette::Inactive, QPalette::Text, QColor(140,140,140));
+-            palette.setBrush(QPalette::Disabled, QPalette::Text, QColor(179,179,179));
++    } else {
++        if (ThemeController::themeMode() == LightTheme) {
++            palette.setBrush(QPalette::Active, QPalette::Button, QColor(230, 230, 230));
++            palette.setBrush(QPalette::Inactive, QPalette::Button, QColor(230, 230, 230));
++            palette.setBrush(QPalette::Disabled, QPalette::Button, QColor(233, 233, 233));
++            palette.setBrush(QPalette::Active, QPalette::Text, QColor(140, 140, 140));
++            palette.setBrush(QPalette::Inactive, QPalette::Text, QColor(140, 140, 140));
++            palette.setBrush(QPalette::Disabled, QPalette::Text, QColor(179, 179, 179));
+             q->setPalette(palette);
+-        }
+-        else
+-        {
+-            palette.setBrush(QPalette::Active, QPalette::Button, QColor(55,55,59));
+-            palette.setBrush(QPalette::Inactive, QPalette::Button, QColor(55,55,59));
+-            palette.setBrush(QPalette::Disabled, QPalette::Button, QColor(46,46,48));
+-            palette.setBrush(QPalette::Active, QPalette::Text, QColor(115,115,115));
+-            palette.setBrush(QPalette::Inactive, QPalette::Text, QColor(115,115,115));
+-            palette.setBrush(QPalette::Disabled, QPalette::Text, QColor(71,71,74));
++        } else {
++            palette.setBrush(QPalette::Active, QPalette::Button, QColor(55, 55, 59));
++            palette.setBrush(QPalette::Inactive, QPalette::Button, QColor(55, 55, 59));
++            palette.setBrush(QPalette::Disabled, QPalette::Button, QColor(46, 46, 48));
++            palette.setBrush(QPalette::Active, QPalette::Text, QColor(115, 115, 115));
++            palette.setBrush(QPalette::Inactive, QPalette::Text, QColor(115, 115, 115));
++            palette.setBrush(QPalette::Disabled, QPalette::Text, QColor(71, 71, 74));
+             q->setPalette(palette);
+         }
+     }
+diff --git a/kysdk-qtwidgets/src/kpasswordedit.h b/kysdk-qtwidgets/src/kpasswordedit.h
+index 25cf01c..9864a90 100644
+--- a/kysdk-qtwidgets/src/kpasswordedit.h
++++ b/kysdk-qtwidgets/src/kpasswordedit.h
+@@ -30,14 +30,13 @@ namespace kdk
+ {
+ 
+ /** @defgroup InputBoxModule
+-  * @{
+-  */
++ * @{
++ */
+ 
+ /**
+  * @brief 支持三种状态
+  */
+-enum LoginState
+-{
++enum LoginState {
+     Ordinary,
+     LoginSuccess,
+     LoginFailed
+@@ -47,12 +46,12 @@ class KPasswordEditPrivate;
+ /**
+  * @brief 密码输入框,继承于QLineEdit,支持三种不同状态显示
+  */
+-class GUI_EXPORT KPasswordEdit:public QLineEdit
++class GUI_EXPORT KPasswordEdit : public QLineEdit
+ {
+     Q_OBJECT
+ 
+ public:
+-    KPasswordEdit(QWidget*parent);
++    KPasswordEdit(QWidget *parent);
+ 
+     /**
+      * @brief 设置状态
+@@ -88,7 +87,7 @@ public:
+      * @brief 设置PlaceholderText
+      * @param text
+      */
+-    void setPlaceholderText(QString&text);
++    void setPlaceholderText(QString &text);
+ 
+     /**
+      * @brief 设置是否启用ClearButton
+@@ -106,34 +105,34 @@ public:
+      * @brief 设置EchoModeBtn是否可见
+      * @return
+      * @since 1.2
+-    */
++     */
+     void setEchoModeBtnVisible(bool enable);
+ 
+     /**
+      * @brief 返回EchoModeBtn是否可见
+      * @return
+      * @since 1.2
+-    */
++     */
+     bool echoModeBtnVisible();
+ 
+     /**
+      * @brief 设置ClearBtn是否可见
+      * @return
+      * @since 1.2
+-    */
++     */
+     void setClearBtnVisible(bool enable);
+ 
+     /**
+      * @brief 返回ClearBtn是否可见
+      * @return
+      * @since 1.2
+-    */
++     */
+     bool clearBtnVisible();
+ 
+     /**
+      * @brief 设置KLineEdit是否可用
+      * @return
+-    */
++     */
+     void setEnabled(bool);
+ 
+     /**
+@@ -149,21 +148,20 @@ public:
+      */
+     void setUseCustomPalette(bool flag);
+ 
+-
+ protected:
+-    void resizeEvent(QResizeEvent*event);
++    void resizeEvent(QResizeEvent *event);
+     bool eventFilter(QObject *watched, QEvent *event);
+     QSize sizeHint() const override;
+ 
+ private:
+     Q_DECLARE_PRIVATE(KPasswordEdit)
+-    KPasswordEditPrivate* const d_ptr;
++    KPasswordEditPrivate *const d_ptr;
+ };
+ }
+ /**
+-  * @example testpasswordedit/widget.h
+-  * @example testpasswordedit/widget.cpp
+-  * @}
+-  */
++ * @example testpasswordedit/widget.h
++ * @example testpasswordedit/widget.cpp
++ * @}
++ */
+ 
+ #endif // KPASSWORDEDIT_H
+diff --git a/kysdk-qtwidgets/src/kpixmapcontainer.cpp b/kysdk-qtwidgets/src/kpixmapcontainer.cpp
+index 86fa656..ebe1572 100644
+--- a/kysdk-qtwidgets/src/kpixmapcontainer.cpp
++++ b/kysdk-qtwidgets/src/kpixmapcontainer.cpp
+@@ -21,41 +21,40 @@
+  */
+ 
+ #include "kpixmapcontainer.h"
+-#include <QLabel>
+-#include <QVBoxLayout>
+-#include <QPainter>
++#include "themeController.h"
+ #include <QApplication>
+ #include <QDebug>
+-#include "themeController.h"
++#include <QLabel>
++#include <QPainter>
++#include <QVBoxLayout>
+ 
+ const static int margin = 10;
+ namespace kdk
+ {
+ 
+-class KPixmapContainerPrivate:public QObject
++class KPixmapContainerPrivate : public QObject
+ {
+     Q_OBJECT
+     Q_DECLARE_PUBLIC(KPixmapContainer)
+ 
+ public:
+-    KPixmapContainerPrivate(KPixmapContainer*parent);
++    KPixmapContainerPrivate(KPixmapContainer *parent);
+ 
+ private:
+-    KPixmapContainer* q_ptr;
++    KPixmapContainer *q_ptr;
+     QPixmap m_pixmap;
+     QColor m_color;
+     int m_fontSize;
+     int m_value;
+     bool m_isShowValue;
+-
+ };
+ 
+ KPixmapContainer::KPixmapContainer(QWidget *parent)
+-    :QWidget(parent),
+-      d_ptr(new KPixmapContainerPrivate(this))
++    : QWidget(parent)
++    , d_ptr(new KPixmapContainerPrivate(this))
+ {
+     Q_D(KPixmapContainer);
+-    setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed);
++    setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
+ }
+ 
+ int KPixmapContainer::value() const
+@@ -82,11 +81,11 @@ bool KPixmapContainer::isValueVisiable() const
+     return d->m_isShowValue;
+ }
+ 
+-void KPixmapContainer::setPixmap(const QPixmap& pixmap)
++void KPixmapContainer::setPixmap(const QPixmap &pixmap)
+ {
+     Q_D(KPixmapContainer);
+     d->m_pixmap = pixmap;
+-    QSize size = QSize(d->m_pixmap.size().width()+20, d->m_pixmap.size().height()+20);
++    QSize size = QSize(d->m_pixmap.size().width() + 20, d->m_pixmap.size().height() + 20);
+     this->setFixedSize(size);
+     update();
+ }
+@@ -94,7 +93,7 @@ void KPixmapContainer::setPixmap(const QPixmap& pixmap)
+ QPixmap KPixmapContainer::pixmap() const
+ {
+     Q_D(const KPixmapContainer);
+-    if(!d->m_pixmap.isNull())
++    if (!d->m_pixmap.isNull())
+         return d->m_pixmap;
+     else
+         return QPixmap();
+@@ -127,7 +126,7 @@ int KPixmapContainer::fontSize()
+ void KPixmapContainer::setFontSize(int size)
+ {
+     Q_D(KPixmapContainer);
+-    if(size<1 ||size >100)
++    if (size < 1 || size > 100)
+         return;
+     d->m_fontSize = size;
+     update();
+@@ -146,60 +145,53 @@ void KPixmapContainer::paintEvent(QPaintEvent *event)
+     QFontMetrics fm(font);
+     int height = fm.height();
+     int width;
+-    if(d->m_value <1 || !d->m_isShowValue)
+-    {
++    if (d->m_value < 1 || !d->m_isShowValue) {
+         width = 10;
+         height = 10;
+-    }
+-    else if(d->m_value >= 1 && d->m_value < 1000)
+-    {
++    } else if (d->m_value >= 1 && d->m_value < 1000) {
+         width = fm.width(QString::number(d->m_value));
+-        width = width > height ? width:height;
+-    }
+-    else
+-    {
++        width = width > height ? width : height;
++    } else {
+         width = fm.width(QString::number(999));
+-        width = width > height ? width:height;
++        width = width > height ? width : height;
+     }
+     QPainter painter(this);
+     painter.setRenderHint(QPainter::Antialiasing);
+     painter.setPen(Qt::NoPen);
+ 
+-//    d->m_color = palette().color(QPalette::Highlight);
++    //    d->m_color = palette().color(QPalette::Highlight);
+     d->m_color = ThemeController::getPaletteColorFromDT("highlight");
+ 
+     painter.setBrush(d->m_color);
+-    painter.drawPixmap(margin,margin,d->m_pixmap.width(),d->m_pixmap.height(),d->m_pixmap);
+-    QRect tmpRect(this->rect().topRight().x()-width/2-margin,this->rect().topRight().y()-height/2+margin,width,height);
+-    painter.drawRoundedRect(tmpRect,height/2,height/2);
+-    painter.setPen(QColor(255,255,255));
+-    if(d->m_value >= 1 && d->m_value<1000 && d->m_isShowValue)
+-    {
++    painter.drawPixmap(margin, margin, d->m_pixmap.width(), d->m_pixmap.height(), d->m_pixmap);
++    QRect tmpRect(this->rect().topRight().x() - width / 2 - margin, this->rect().topRight().y() - height / 2 + margin, width, height);
++    painter.drawRoundedRect(tmpRect, height / 2, height / 2);
++    painter.setPen(QColor(255, 255, 255));
++    if (d->m_value >= 1 && d->m_value < 1000 && d->m_isShowValue) {
+         QFont font(QApplication::font());
+         font.setPixelSize(d->m_fontSize);
+         painter.setFont(font);
+-        painter.drawText(tmpRect,Qt::AlignCenter,QString::number(d->m_value));
++        painter.drawText(tmpRect, Qt::AlignCenter, QString::number(d->m_value));
+     }
+ 
+-    if(d->m_value >= 1000 && d->m_value < INTMAX_MAX && d->m_isShowValue)
+-    {
+-        painter.setBrush(QColor(255,255,255));
+-        QPointF pointf(tmpRect.center().x(),tmpRect.center().y());
+-        painter.drawEllipse(pointf,qreal(1.0),qreal(1.0));
+-        QPointF leff(pointf.x()-5,pointf.y());
+-        QPointF rightf(pointf.x()+5,pointf.y());
+-        painter.drawEllipse(leff,qreal(1.0),qreal(1.0));
+-        painter.drawEllipse(rightf,qreal(1.0),qreal(1.0));
++    if (d->m_value >= 1000 && d->m_value < INTMAX_MAX && d->m_isShowValue) {
++        painter.setBrush(QColor(255, 255, 255));
++        QPointF pointf(tmpRect.center().x(), tmpRect.center().y());
++        painter.drawEllipse(pointf, qreal(1.0), qreal(1.0));
++        QPointF leff(pointf.x() - 5, pointf.y());
++        QPointF rightf(pointf.x() + 5, pointf.y());
++        painter.drawEllipse(leff, qreal(1.0), qreal(1.0));
++        painter.drawEllipse(rightf, qreal(1.0), qreal(1.0));
+     }
+ }
+ 
+ KPixmapContainerPrivate::KPixmapContainerPrivate(KPixmapContainer *parent)
+-    :q_ptr(parent)
++    : q_ptr(parent)
+ {
+     Q_Q(KPixmapContainer);
+     m_value = -1;
+     m_isShowValue = true;
+-    m_color = QColor(55,144,250);
++    m_color = QColor(55, 144, 250);
+     m_fontSize = 10;
+     setParent(parent);
+ }
+@@ -208,4 +200,3 @@ KPixmapContainerPrivate::KPixmapContainerPrivate(KPixmapContainer *parent)
+ 
+ #include "kpixmapcontainer.moc"
+ #include "moc_kpixmapcontainer.cpp"
+-
+diff --git a/kysdk-qtwidgets/src/kpixmapcontainer.h b/kysdk-qtwidgets/src/kpixmapcontainer.h
+index a659895..45e4ceb 100644
+--- a/kysdk-qtwidgets/src/kpixmapcontainer.h
++++ b/kysdk-qtwidgets/src/kpixmapcontainer.h
+@@ -31,15 +31,15 @@ namespace kdk
+ {
+ 
+ /** @defgroup BarModule
+-  * @{
+-  */
++ * @{
++ */
+ 
+ class KPixmapContainerPrivate;
+ 
+ /**
+  * @brief 为指定的pixmap添加右上角消息提示气泡,样式类似微信头像的消息提示
+  */
+-class  GUI_EXPORT KPixmapContainer:public QWidget
++class GUI_EXPORT KPixmapContainer : public QWidget
+ {
+     Q_OBJECT
+ 
+@@ -72,12 +72,12 @@ public:
+      * @brief 设置pixmap
+      * @param pixmap
+      */
+-    void setPixmap(const QPixmap& pixmap);
++    void setPixmap(const QPixmap &pixmap);
+ 
+     /**
+      * @brief 获取pixmap
+      */
+-    QPixmap pixmap()const;
++    QPixmap pixmap() const;
+ 
+     /**
+      * @brief 清除值
+@@ -94,7 +94,7 @@ public:
+      * @brief 设置背景色
+      * @param color
+      */
+-    void setColor(const QColor& color);
++    void setColor(const QColor &color);
+ 
+     /**
+      * @brief 返回字体大小
+@@ -109,18 +109,17 @@ public:
+     void setFontSize(int size);
+ 
+ protected:
+-    void paintEvent(QPaintEvent*event);
++    void paintEvent(QPaintEvent *event);
+ 
+ private:
+     Q_DECLARE_PRIVATE(KPixmapContainer)
+-    KPixmapContainerPrivate*const d_ptr;
+-
++    KPixmapContainerPrivate *const d_ptr;
+ };
+ }
+ /**
+-  * @example testbadge/widget.h
+-  * @example testbadge/widget.cpp
+-  * @}
+-  */
++ * @example testbadge/widget.h
++ * @example testbadge/widget.cpp
++ * @}
++ */
+ 
+ #endif // KPIXMAPCONTAINER_H
+diff --git a/kysdk-qtwidgets/src/kpressbutton.cpp b/kysdk-qtwidgets/src/kpressbutton.cpp
+old mode 100755
+new mode 100644
+index f6ec5ec..f5e39bb
+--- a/kysdk-qtwidgets/src/kpressbutton.cpp
++++ b/kysdk-qtwidgets/src/kpressbutton.cpp
+@@ -22,26 +22,28 @@
+ 
+ #include "kpressbutton.h"
+ #include "themeController.h"
+-#include <QTimer>
+-#include <QStyleOptionButton>
++#include <QDebug>
++#include <QIcon>
+ #include <QPainter>
+ #include <QPainterPath>
+-#include <QIcon>
+-#include <QDebug>
++#include <QStyleOptionButton>
++#include <QTimer>
+ 
+-namespace kdk {
++namespace kdk
++{
+ 
+-class KPressButtonPrivate:public QObject,public ThemeController
++class KPressButtonPrivate : public QObject, public ThemeController
+ {
+     Q_OBJECT
+     Q_DECLARE_PUBLIC(KPressButton)
+ public:
+-    KPressButtonPrivate(KPressButton* parent);
++    KPressButtonPrivate(KPressButton *parent);
+     void changeTheme();
++
+ private:
+     KPressButton *q_ptr;
+     QColor m_pbkgColor;
+-    QTimer* m_pTimer;
++    QTimer *m_pTimer;
+     KPressButton::ButtonType m_pButtonType;
+     QIcon m_pIcon;
+     int m_flashState;
+@@ -49,15 +51,14 @@ private:
+     int m_pTopRightRadius;
+     int m_pBottomLeftRadius;
+     int m_pBottomRightRadius;
+-    bool m_pLoading;    //loafing标志位
+-    bool m_pCheackable;  //开启标志位
++    bool m_pLoading; // loafing标志位
++    bool m_pCheackable; // 开启标志位
+     bool m_pTranslucent;
+     bool m_isTranslucentFlag;
+-
+ };
+ 
+ KPressButtonPrivate::KPressButtonPrivate(KPressButton *parent)
+-    :q_ptr(parent)
++    : q_ptr(parent)
+ {
+     Q_Q(KPressButton);
+ }
+@@ -65,35 +66,29 @@ KPressButtonPrivate::KPressButtonPrivate(KPressButton *parent)
+ void KPressButtonPrivate::changeTheme()
+ {
+     Q_Q(KPressButton);
+-    if(m_isTranslucentFlag)
+-    {
+-        if(ThemeController::widgetTheme() == ClassicTheme)
++    if (m_isTranslucentFlag) {
++        if (ThemeController::widgetTheme() == ClassicTheme)
+             m_pTranslucent = false;
+         else
+             m_pTranslucent = true;
+-    }
+-    else
+-    {
++    } else {
+         m_pTranslucent = false;
+     }
+     initThemeStyle();
+ }
+ 
+ KPressButton::KPressButton(QWidget *parent)
+-    :QPushButton(parent),
+-     d_ptr(new KPressButtonPrivate(this))
++    : QPushButton(parent)
++    , d_ptr(new KPressButtonPrivate(this))
+ {
+     Q_D(KPressButton);
+     int radius = ThemeController::getRadiusFromDT("kradius-normal");
+-    if(radius == -1)
+-    {
++    if (radius == -1) {
+         d->m_pTopLeftRadius = 6;
+         d->m_pTopRightRadius = 6;
+         d->m_pBottomLeftRadius = 6;
+         d->m_pBottomRightRadius = 6;
+-    }
+-    else
+-    {
++    } else {
+         d->m_pTopLeftRadius = radius;
+         d->m_pTopRightRadius = radius;
+         d->m_pBottomLeftRadius = radius;
+@@ -105,16 +100,18 @@ KPressButton::KPressButton(QWidget *parent)
+     d->m_isTranslucentFlag = false;
+     d->m_pTimer = new QTimer(this);
+     d->m_pTimer->setInterval(100);
+-    d->m_flashState =0;
++    d->m_flashState = 0;
+     setCheckable(true);
+-    connect(d->m_pTimer,&QTimer::timeout,this,[=](){
+-        if(d->m_flashState < 7)
++    connect(d->m_pTimer, &QTimer::timeout, this, [=]() {
++        if (d->m_flashState < 7)
+             d->m_flashState++;
+         else
+             d->m_flashState = 0;
+         setIcon(QIcon::fromTheme(QString("ukui-loading-%1.symbolic").arg(d->m_flashState)));
+     });
+-    connect(d->m_gsetting,&QGSettings::changed,this,[=](){d->changeTheme();});
++    connect(d->m_gsetting, &QGSettings::changed, this, [=]() {
++        d->changeTheme();
++    });
+ }
+ 
+ void KPressButton::setBorderRadius(int radius)
+@@ -126,7 +123,7 @@ void KPressButton::setBorderRadius(int radius)
+     d->m_pBottomRightRadius = radius;
+ }
+ 
+-void KPressButton::setBorderRadius(int bottomLeft,int topLeft,int topRight,int bottomRight)
++void KPressButton::setBorderRadius(int bottomLeft, int topLeft, int topRight, int bottomRight)
+ {
+     Q_D(KPressButton);
+     d->m_pBottomLeftRadius = bottomLeft;
+@@ -171,7 +168,7 @@ void KPressButton::setLoaingStatus(bool flag)
+ {
+     Q_D(KPressButton);
+     d->m_pLoading = flag;
+-    if(flag)
++    if (flag)
+         d->m_pTimer->start();
+     else
+         d->m_pTimer->stop();
+@@ -209,323 +206,255 @@ void KPressButton::paintEvent(QPaintEvent *event)
+     p.setRenderHint(QPainter::HighQualityAntialiasing);
+     p.setRenderHint(QPainter::TextAntialiasing);
+     p.setRenderHint(QPainter::SmoothPixmapTransform);
+-    if(ThemeController::widgetTheme() == ClassicTheme )
+-    {
++    if (ThemeController::widgetTheme() == ClassicTheme) {
+         d->m_pTranslucent = false;
+-        if(p.pen().width() == 1)
+-            p.translate(0.5,0.5);
++        if (p.pen().width() == 1)
++            p.translate(0.5, 0.5);
+     }
+ 
+-    if(d->m_pTranslucent)
+-    {
+-        if(ThemeController::themeMode() == LightTheme) // 开启透明度 浅色模式
++    if (d->m_pTranslucent) {
++        if (ThemeController::themeMode() == LightTheme) // 开启透明度 浅色模式
+         {
+-            if(isChecked() /*&& !isLoading()*/)
+-//                d->m_pbkgColor = opt.palette.color(QPalette::Highlight);
++            if (isChecked() /*&& !isLoading()*/)
++                //                d->m_pbkgColor = opt.palette.color(QPalette::Highlight);
+                 d->m_pbkgColor = ThemeController::getPaletteColorFromDT("highlight");
+-            else
+-            {
+-//                d->m_pbkgColor = opt.palette.color(QPalette::BrightText);
++            else {
++                //                d->m_pbkgColor = opt.palette.color(QPalette::BrightText);
+                 d->m_pbkgColor = ThemeController::getPaletteColorFromDT("brighttext");
+                 d->m_pbkgColor.setAlphaF(0.10);
+             }
+ 
+-            if(opt.state.testFlag(QStyle::State_MouseOver) && isCheckable() /*&& !isLoading()*/)
+-            {
+-                if(isChecked())
+-                {
+-                    if(opt.state & QStyle::State_Sunken)
+-                    {
+-                        d->m_pbkgColor = ThemeController::mixColor(d->m_pbkgColor,/*opt.palette.brightText().color()*/ThemeController::getPaletteColorFromDT("brighttext"),0.2);   //点击变深
+-                    }
+-                    else
+-                    {
+-                        d->m_pbkgColor = ThemeController::mixColor(d->m_pbkgColor,/*opt.palette.brightText().color()*/ThemeController::getPaletteColorFromDT("brighttext"),0.05);  //悬浮变浅
++            if (opt.state.testFlag(QStyle::State_MouseOver) && isCheckable() /*&& !isLoading()*/) {
++                if (isChecked()) {
++                    if (opt.state & QStyle::State_Sunken) {
++                        d->m_pbkgColor = ThemeController::mixColor(d->m_pbkgColor, /*opt.palette.brightText().color()*/ ThemeController::getPaletteColorFromDT("brighttext"), 0.2); // 点击变深
++                    } else {
++                        d->m_pbkgColor = ThemeController::mixColor(d->m_pbkgColor, /*opt.palette.brightText().color()*/ ThemeController::getPaletteColorFromDT("brighttext"), 0.05); // 悬浮变浅
+                     }
+-                }
+-                else
+-                {
+-                    if(opt.state & QStyle::State_Sunken)
+-                    {
+-//                        d->m_pbkgColor = opt.palette.brightText().color();   //点击变深
++                } else {
++                    if (opt.state & QStyle::State_Sunken) {
++                        //                        d->m_pbkgColor = opt.palette.brightText().color();   //点击变深
+                         d->m_pbkgColor = ThemeController::getPaletteColorFromDT("brighttext");
+                         d->m_pbkgColor.setAlphaF(0.21);
+-                    }
+-                    else
+-                    {
+-//                        d->m_pbkgColor = opt.palette.brightText().color();  //悬浮变浅
++                    } else {
++                        //                        d->m_pbkgColor = opt.palette.brightText().color();  //悬浮变浅
+                         d->m_pbkgColor = ThemeController::getPaletteColorFromDT("brighttext");
+                         d->m_pbkgColor.setAlphaF(0.16);
+                     }
+                 }
+-            }
+-            else if(opt.state.testFlag(QStyle::State_Selected) )
+-            {
+-                if(isChecked() )
+-//                    d->m_pbkgColor = opt.palette.color(QPalette::Highlight);
++            } else if (opt.state.testFlag(QStyle::State_Selected)) {
++                if (isChecked())
++                    //                    d->m_pbkgColor = opt.palette.color(QPalette::Highlight);
+                     d->m_pbkgColor = ThemeController::getPaletteColorFromDT("highlight");
+-                else
+-                {
+-//                    d->m_pbkgColor = opt.palette.color(QPalette::BrightText);
++                else {
++                    //                    d->m_pbkgColor = opt.palette.color(QPalette::BrightText);
+                     d->m_pbkgColor = ThemeController::getPaletteColorFromDT("brighttext");
+                     d->m_pbkgColor.setAlphaF(0.10);
+                 }
+             }
+-        }
+-        else  //开启透明度 深色模式
++        } else // 开启透明度 深色模式
+         {
+-            if(isChecked() /*&& !isLoading()*/)
+-//                d->m_pbkgColor = opt.palette.color(QPalette::Highlight);
++            if (isChecked() /*&& !isLoading()*/)
++                //                d->m_pbkgColor = opt.palette.color(QPalette::Highlight);
+                 d->m_pbkgColor = ThemeController::getPaletteColorFromDT("highlight");
+-            else
+-            {
+-//                d->m_pbkgColor = opt.palette.color(QPalette::BrightText);
++            else {
++                //                d->m_pbkgColor = opt.palette.color(QPalette::BrightText);
+                 d->m_pbkgColor = ThemeController::getPaletteColorFromDT("brighttext");
+                 d->m_pbkgColor.setAlphaF(0.10);
+             }
+ 
+-            if(opt.state.testFlag(QStyle::State_MouseOver) && isCheckable() /*&& !isLoading()*/)
+-            {
+-                if(isChecked())
+-                {
+-                    if(opt.state & QStyle::State_Sunken)
+-                    {
+-//                        d->m_pbkgColor = ThemeController::mixColor(d->m_pbkgColor,opt.palette.brightText().color(),0.2);   //点击变深
+-                        d->m_pbkgColor = ThemeController::mixColor(d->m_pbkgColor,ThemeController::getPaletteColorFromDT("brighttext"),0.2);
+-                    }
+-                    else
+-                    {
+-//                        d->m_pbkgColor = ThemeController::mixColor(d->m_pbkgColor,opt.palette.brightText().color(),0.05);  //悬浮变浅
+-                        d->m_pbkgColor = ThemeController::mixColor(d->m_pbkgColor,ThemeController::getPaletteColorFromDT("brighttext"),0.05);
++            if (opt.state.testFlag(QStyle::State_MouseOver) && isCheckable() /*&& !isLoading()*/) {
++                if (isChecked()) {
++                    if (opt.state & QStyle::State_Sunken) {
++                        //                        d->m_pbkgColor = ThemeController::mixColor(d->m_pbkgColor,opt.palette.brightText().color(),0.2);   //点击变深
++                        d->m_pbkgColor = ThemeController::mixColor(d->m_pbkgColor, ThemeController::getPaletteColorFromDT("brighttext"), 0.2);
++                    } else {
++                        //                        d->m_pbkgColor = ThemeController::mixColor(d->m_pbkgColor,opt.palette.brightText().color(),0.05);  //悬浮变浅
++                        d->m_pbkgColor = ThemeController::mixColor(d->m_pbkgColor, ThemeController::getPaletteColorFromDT("brighttext"), 0.05);
+                     }
+-                }
+-                else
+-                {
+-                    if(opt.state & QStyle::State_Sunken)
+-                    {
+-//                        d->m_pbkgColor = opt.palette.brightText().color();   //点击变深
++                } else {
++                    if (opt.state & QStyle::State_Sunken) {
++                        //                        d->m_pbkgColor = opt.palette.brightText().color();   //点击变深
+                         d->m_pbkgColor = ThemeController::getPaletteColorFromDT("brighttext");
+                         d->m_pbkgColor.setAlphaF(0.3);
+-                    }
+-                    else
+-                    {
+-//                        d->m_pbkgColor = opt.palette.brightText().color();  //悬浮变浅
++                    } else {
++                        //                        d->m_pbkgColor = opt.palette.brightText().color();  //悬浮变浅
+                         d->m_pbkgColor = ThemeController::getPaletteColorFromDT("brighttext");
+                         d->m_pbkgColor.setAlphaF(0.2);
+                     }
+                 }
+-            }
+-            else if(opt.state.testFlag(QStyle::State_Selected) )
+-            {
+-                if(isChecked() )
+-//                    d->m_pbkgColor = opt.palette.color(QPalette::Highlight);
++            } else if (opt.state.testFlag(QStyle::State_Selected)) {
++                if (isChecked())
++                    //                    d->m_pbkgColor = opt.palette.color(QPalette::Highlight);
+                     d->m_pbkgColor = ThemeController::getPaletteColorFromDT("highlight");
+-                else
+-                {
+-//                    d->m_pbkgColor = opt.palette.color(QPalette::BrightText);
++                else {
++                    //                    d->m_pbkgColor = opt.palette.color(QPalette::BrightText);
+                     d->m_pbkgColor = ThemeController::getPaletteColorFromDT("brighttext");
+                     d->m_pbkgColor.setAlphaF(0.10);
+                 }
+             }
+         }
+-    }
+-    else // 关闭透明度
++    } else // 关闭透明度
+     {
+-        if(isChecked() /*&& !isLoading()*/)
+-        {
++        if (isChecked() /*&& !isLoading()*/) {
+             d->m_pbkgColor = ThemeController::getPaletteColorFromDT("highlight");
+-//            if(ThemeController::widgetTheme() == ClassicTheme)
+-//                d->m_pbkgColor.setAlphaF(0.3);
+-        }
+-        else
++            //            if(ThemeController::widgetTheme() == ClassicTheme)
++            //                d->m_pbkgColor.setAlphaF(0.3);
++        } else
+             d->m_pbkgColor = ThemeController::getPaletteColorFromDT("button");
+ 
+-        if(ThemeController::widgetTheme() == ClassicTheme )
+-        {
+-            if(isChecked())
+-            {
+-                if(ThemeController::themeMode() == LightTheme)
+-                {
+-                    d->m_pbkgColor =ThemeController::highlightHover(false,palette());
++        if (ThemeController::widgetTheme() == ClassicTheme) {
++            if (isChecked()) {
++                if (ThemeController::themeMode() == LightTheme) {
++                    d->m_pbkgColor = ThemeController::highlightHover(false, palette());
+ 
+-                    d->m_pbkgColor = ThemeController::adjustH(d->m_pbkgColor,-3);
+-                    d->m_pbkgColor = ThemeController::adjustS(d->m_pbkgColor,-8);
+-                    d->m_pbkgColor = ThemeController::adjustL(d->m_pbkgColor,-3);
++                    d->m_pbkgColor = ThemeController::adjustH(d->m_pbkgColor, -3);
++                    d->m_pbkgColor = ThemeController::adjustS(d->m_pbkgColor, -8);
++                    d->m_pbkgColor = ThemeController::adjustL(d->m_pbkgColor, -3);
+ 
+-                    borderColor = ThemeController::highlightHover(false,palette());
+-                    borderColor = ThemeController::adjustH(borderColor,-3);
+-                    borderColor = ThemeController::adjustS(borderColor,-24);
+-                    borderColor = ThemeController::adjustL(borderColor,-24);
++                    borderColor = ThemeController::highlightHover(false, palette());
++                    borderColor = ThemeController::adjustH(borderColor, -3);
++                    borderColor = ThemeController::adjustS(borderColor, -24);
++                    borderColor = ThemeController::adjustL(borderColor, -24);
+ 
+-                }
+-                else
+-                {
+-                    d->m_pbkgColor =ThemeController::highlightHover(true,palette());
++                } else {
++                    d->m_pbkgColor = ThemeController::highlightHover(true, palette());
+ 
+-                    d->m_pbkgColor = ThemeController::adjustH(d->m_pbkgColor,-2);
+-                    d->m_pbkgColor = ThemeController::adjustS(d->m_pbkgColor,-23);
+-                    d->m_pbkgColor = ThemeController::adjustL(d->m_pbkgColor,11);
++                    d->m_pbkgColor = ThemeController::adjustH(d->m_pbkgColor, -2);
++                    d->m_pbkgColor = ThemeController::adjustS(d->m_pbkgColor, -23);
++                    d->m_pbkgColor = ThemeController::adjustL(d->m_pbkgColor, 11);
+ 
+-                    borderColor = ThemeController::highlightHover(true,palette());
+-                    borderColor = ThemeController::adjustH(borderColor,-2);
+-                    borderColor = ThemeController::adjustS(borderColor,-3);
+-                    borderColor = ThemeController::adjustL(borderColor,36);
++                    borderColor = ThemeController::highlightHover(true, palette());
++                    borderColor = ThemeController::adjustH(borderColor, -2);
++                    borderColor = ThemeController::adjustS(borderColor, -3);
++                    borderColor = ThemeController::adjustL(borderColor, 36);
+                 }
+-            }
+-            else
+-            {
+-                if(ThemeController::themeMode() == LightTheme)
+-                    borderColor=ThemeController::lanhuHSLToQtHsl(0, 0, 73);
++            } else {
++                if (ThemeController::themeMode() == LightTheme)
++                    borderColor = ThemeController::lanhuHSLToQtHsl(0, 0, 73);
+                 else
+-                    borderColor=ThemeController::lanhuHSLToQtHsl(0, 0, 35);
++                    borderColor = ThemeController::lanhuHSLToQtHsl(0, 0, 35);
+             }
+         }
+-        if(opt.state.testFlag(QStyle::State_MouseOver) && isCheckable() /*&& !isLoading()*/)
+-        {
+-            if(ThemeController::widgetTheme() == ClassicTheme && isChecked())
+-            {
+-                if(ThemeController::themeMode() == LightTheme)
+-                {
+-                    d->m_pbkgColor =ThemeController::highlightHover(false,palette());
+-                    d->m_pbkgColor = ThemeController::adjustH(d->m_pbkgColor,-4);
+-                    d->m_pbkgColor = ThemeController::adjustS(d->m_pbkgColor,0);
+-                    d->m_pbkgColor = ThemeController::adjustL(d->m_pbkgColor,-8);
+-
+-                    borderColor = ThemeController::highlightHover(false,palette());
+-                    borderColor = ThemeController::adjustH(borderColor,-2);
+-                    borderColor = ThemeController::adjustS(borderColor,-31);
+-                    borderColor = ThemeController::adjustL(borderColor,-35);
++        if (opt.state.testFlag(QStyle::State_MouseOver) && isCheckable() /*&& !isLoading()*/) {
++            if (ThemeController::widgetTheme() == ClassicTheme && isChecked()) {
++                if (ThemeController::themeMode() == LightTheme) {
++                    d->m_pbkgColor = ThemeController::highlightHover(false, palette());
++                    d->m_pbkgColor = ThemeController::adjustH(d->m_pbkgColor, -4);
++                    d->m_pbkgColor = ThemeController::adjustS(d->m_pbkgColor, 0);
++                    d->m_pbkgColor = ThemeController::adjustL(d->m_pbkgColor, -8);
++
++                    borderColor = ThemeController::highlightHover(false, palette());
++                    borderColor = ThemeController::adjustH(borderColor, -2);
++                    borderColor = ThemeController::adjustS(borderColor, -31);
++                    borderColor = ThemeController::adjustL(borderColor, -35);
++                } else {
++                    d->m_pbkgColor = ThemeController::highlightHover(true, palette());
++                    d->m_pbkgColor = ThemeController::adjustH(d->m_pbkgColor, -2);
++                    d->m_pbkgColor = ThemeController::adjustS(d->m_pbkgColor, -22);
++                    d->m_pbkgColor = ThemeController::adjustL(d->m_pbkgColor, 17);
++
++                    borderColor = ThemeController::highlightHover(true, palette());
++                    borderColor = ThemeController::adjustH(borderColor, -2);
++                    borderColor = ThemeController::adjustS(borderColor, 3);
++                    borderColor = ThemeController::adjustL(borderColor, 51);
+                 }
+-                else
+-                {
+-                    d->m_pbkgColor = ThemeController::highlightHover(true,palette());
+-                    d->m_pbkgColor = ThemeController::adjustH(d->m_pbkgColor,-2);
+-                    d->m_pbkgColor = ThemeController::adjustS(d->m_pbkgColor,-22);
+-                    d->m_pbkgColor = ThemeController::adjustL(d->m_pbkgColor,17);
+-
+-                    borderColor =ThemeController::highlightHover(true,palette());
+-                    borderColor = ThemeController::adjustH(borderColor,-2);
+-                    borderColor = ThemeController::adjustS(borderColor,3);
+-                    borderColor = ThemeController::adjustL(borderColor,51);
+-                }
+-            }
+-            else
+-            {
+-//                d->m_pbkgColor = ThemeController::mixColor(d->m_pbkgColor,opt.palette.brightText().color(),0.05);  //悬浮变浅
+-                d->m_pbkgColor = ThemeController::mixColor(d->m_pbkgColor , ThemeController::getPaletteColorFromDT("brighttext"),0.05);
++            } else {
++                //                d->m_pbkgColor = ThemeController::mixColor(d->m_pbkgColor,opt.palette.brightText().color(),0.05);  //悬浮变浅
++                d->m_pbkgColor = ThemeController::mixColor(d->m_pbkgColor, ThemeController::getPaletteColorFromDT("brighttext"), 0.05);
+             }
+-            if(opt.state & QStyle::State_Sunken)
+-            {
+-                if(ThemeController::widgetTheme() == ClassicTheme && isChecked())
+-                {
+-                    if(ThemeController::themeMode() == LightTheme)
+-                    {
+-                        d->m_pbkgColor =ThemeController::highlightClick(false,palette());
+-                        d->m_pbkgColor = ThemeController::adjustH(d->m_pbkgColor,-3);
+-                        d->m_pbkgColor = ThemeController::adjustS(d->m_pbkgColor,-6);
+-                        d->m_pbkgColor = ThemeController::adjustL(d->m_pbkgColor,-6);
+-
+-                        borderColor =ThemeController::highlightClick(false,palette());
+-                        borderColor = ThemeController::adjustH(borderColor,-1);
+-                        borderColor = ThemeController::adjustS(borderColor,-37);
+-                        borderColor = ThemeController::adjustL(borderColor,-38);
++            if (opt.state & QStyle::State_Sunken) {
++                if (ThemeController::widgetTheme() == ClassicTheme && isChecked()) {
++                    if (ThemeController::themeMode() == LightTheme) {
++                        d->m_pbkgColor = ThemeController::highlightClick(false, palette());
++                        d->m_pbkgColor = ThemeController::adjustH(d->m_pbkgColor, -3);
++                        d->m_pbkgColor = ThemeController::adjustS(d->m_pbkgColor, -6);
++                        d->m_pbkgColor = ThemeController::adjustL(d->m_pbkgColor, -6);
++
++                        borderColor = ThemeController::highlightClick(false, palette());
++                        borderColor = ThemeController::adjustH(borderColor, -1);
++                        borderColor = ThemeController::adjustS(borderColor, -37);
++                        borderColor = ThemeController::adjustL(borderColor, -38);
++                    } else {
++                        d->m_pbkgColor = ThemeController::highlightClick(true, palette());
++                        d->m_pbkgColor = ThemeController::adjustH(d->m_pbkgColor, -2);
++                        d->m_pbkgColor = ThemeController::adjustS(d->m_pbkgColor, -23);
++                        d->m_pbkgColor = ThemeController::adjustL(d->m_pbkgColor, 2);
++
++                        borderColor = ThemeController::highlightClick(true, palette());
++                        borderColor = ThemeController::adjustH(borderColor, -2);
++                        borderColor = ThemeController::adjustS(borderColor, -23);
++                        borderColor = ThemeController::adjustL(borderColor, 2);
+                     }
+-                    else
+-                    {
+-                        d->m_pbkgColor =ThemeController::highlightClick(true,palette());
+-                        d->m_pbkgColor = ThemeController::adjustH(d->m_pbkgColor,-2);
+-                        d->m_pbkgColor = ThemeController::adjustS(d->m_pbkgColor,-23);
+-                        d->m_pbkgColor = ThemeController::adjustL(d->m_pbkgColor,2);
+-
+-                        borderColor =ThemeController::highlightClick(true,palette());
+-                        borderColor = ThemeController::adjustH(borderColor,-2);
+-                        borderColor = ThemeController::adjustS(borderColor,-23);
+-                        borderColor = ThemeController::adjustL(borderColor,2);
+-                    }
+-                }
+-                else
+-                {
+-//                    d->m_pbkgColor = ThemeController::mixColor(d->m_pbkgColor,opt.palette.brightText().color(),0.2);   //点击变深
+-                    d->m_pbkgColor = ThemeController::mixColor(d->m_pbkgColor,ThemeController::getPaletteColorFromDT("brighttext"),0.2);
++                } else {
++                    //                    d->m_pbkgColor = ThemeController::mixColor(d->m_pbkgColor,opt.palette.brightText().color(),0.2);   //点击变深
++                    d->m_pbkgColor = ThemeController::mixColor(d->m_pbkgColor, ThemeController::getPaletteColorFromDT("brighttext"), 0.2);
+                 }
+             }
+-        }
+-        else if(opt.state.testFlag(QStyle::State_Selected) )
+-        {
+-            if(isChecked() )
+-//                d->m_pbkgColor = opt.palette.color(QPalette::Highlight);
++        } else if (opt.state.testFlag(QStyle::State_Selected)) {
++            if (isChecked())
++                //                d->m_pbkgColor = opt.palette.color(QPalette::Highlight);
+                 d->m_pbkgColor = ThemeController::getPaletteColorFromDT("highlight");
+             else
+-//                d->m_pbkgColor = opt.palette.color(QPalette::Button);
++                //                d->m_pbkgColor = opt.palette.color(QPalette::Button);
+                 d->m_pbkgColor = ThemeController::getPaletteColorFromDT("button");
+         }
+     }
+ 
+-    if(opt.icon.name() != "ukui-loading-0.symbolic" && opt.icon.name() != "ukui-loading-1.symbolic" &&
+-            opt.icon.name() != "ukui-loading-2.symbolic" && opt.icon.name()!= "ukui-loading-3.symbolic"&&
+-            opt.icon.name()!= "ukui-loading-4.symbolic"&&opt.icon.name() != "ukui-loading-5.symbolic"&&
+-            opt.icon.name() != "ukui-loading-6.symbolic"&&opt.icon.name() != "ukui-loading-7.symbolic")
++    if (opt.icon.name() != "ukui-loading-0.symbolic" && opt.icon.name() != "ukui-loading-1.symbolic" && opt.icon.name() != "ukui-loading-2.symbolic" && opt.icon.name() != "ukui-loading-3.symbolic" && opt.icon.name() != "ukui-loading-4.symbolic" && opt.icon.name() != "ukui-loading-5.symbolic" && opt.icon.name() != "ukui-loading-6.symbolic" && opt.icon.name() != "ukui-loading-7.symbolic")
+         d->m_pIcon = opt.icon;
+ 
+     QRect rect = this->rect();
+     QPainterPath path;
+ 
+-    switch (d->m_pButtonType)
+-    {
++    switch (d->m_pButtonType) {
+     case NormalType:
+-        if(ThemeController::widgetTheme() == ClassicTheme )
+-        {
+-            path.addRect(rect.adjusted(0,0,-1,-1));
++        if (ThemeController::widgetTheme() == ClassicTheme) {
++            path.addRect(rect.adjusted(0, 0, -1, -1));
+             p.setPen(borderColor);
+-        }
+-        else
+-        {
+-            path.moveTo(rect.topLeft() + QPointF(0 , d->m_pTopLeftRadius));
+-            path.lineTo(rect.bottomLeft() - QPointF ( 0 , d->m_pBottomLeftRadius));
+-            path.quadTo(rect.bottomLeft() , rect.bottomLeft() + QPointF(d->m_pBottomLeftRadius , 0));
+-            path.lineTo(rect.bottomRight() - QPointF(d->m_pBottomRightRadius , 0));
+-            path.quadTo(rect.bottomRight() , rect.bottomRight() - QPointF(0 ,d->m_pBottomRightRadius));
+-            path.lineTo(rect.topRight() + QPointF(0 , d->m_pTopRightRadius));
+-            path.quadTo(rect.topRight(),rect.topRight() - QPointF(d->m_pTopRightRadius , 0));
+-            path.lineTo(rect.topLeft() + QPointF(d->m_pTopLeftRadius , 0));
+-            path.quadTo(rect.topLeft() , rect.topLeft() + QPointF(0 , d->m_pTopLeftRadius));
++        } else {
++            path.moveTo(rect.topLeft() + QPointF(0, d->m_pTopLeftRadius));
++            path.lineTo(rect.bottomLeft() - QPointF(0, d->m_pBottomLeftRadius));
++            path.quadTo(rect.bottomLeft(), rect.bottomLeft() + QPointF(d->m_pBottomLeftRadius, 0));
++            path.lineTo(rect.bottomRight() - QPointF(d->m_pBottomRightRadius, 0));
++            path.quadTo(rect.bottomRight(), rect.bottomRight() - QPointF(0, d->m_pBottomRightRadius));
++            path.lineTo(rect.topRight() + QPointF(0, d->m_pTopRightRadius));
++            path.quadTo(rect.topRight(), rect.topRight() - QPointF(d->m_pTopRightRadius, 0));
++            path.lineTo(rect.topLeft() + QPointF(d->m_pTopLeftRadius, 0));
++            path.quadTo(rect.topLeft(), rect.topLeft() + QPointF(0, d->m_pTopLeftRadius));
+             p.setPen(Qt::NoPen);
+         }
+         p.setBrush(d->m_pbkgColor);
+         p.drawPath(path);
+         break;
+     case CircleType:
+-        if(ThemeController::widgetTheme() == ClassicTheme )
++        if (ThemeController::widgetTheme() == ClassicTheme)
+             p.setPen(borderColor);
+         else
+             p.setPen(Qt::NoPen);
+         p.setBrush(d->m_pbkgColor);
+-        p.drawEllipse(rect.adjusted(1,1,-1,-1));
++        p.drawEllipse(rect.adjusted(1, 1, -1, -1));
+     default:
+-       break;
++        break;
+     }
+ 
+     int iconSize = opt.iconSize.width();
+ 
+-    if(isChecked() || ThemeController::themeMode() == DarkTheme)
+-    {
+-        opt.icon = ThemeController::drawColoredPixmap(opt.icon.pixmap(iconSize,iconSize),QColor(255,255,255));
+-        d->m_pIcon= ThemeController::drawColoredPixmap(d->m_pIcon.pixmap(iconSize,iconSize),QColor(255,255,255));
+-    }
+-    else
+-        {
+-        opt.icon = ThemeController::drawColoredPixmap(opt.icon.pixmap(iconSize,iconSize),QColor(0,0,0));
+-        d->m_pIcon= ThemeController::drawColoredPixmap(d->m_pIcon.pixmap(iconSize,iconSize),QColor(0,0,0));
++    if (isChecked() || ThemeController::themeMode() == DarkTheme) {
++        opt.icon = ThemeController::drawColoredPixmap(opt.icon.pixmap(iconSize, iconSize), QColor(255, 255, 255));
++        d->m_pIcon = ThemeController::drawColoredPixmap(d->m_pIcon.pixmap(iconSize, iconSize), QColor(255, 255, 255));
++    } else {
++        opt.icon = ThemeController::drawColoredPixmap(opt.icon.pixmap(iconSize, iconSize), QColor(0, 0, 0));
++        d->m_pIcon = ThemeController::drawColoredPixmap(d->m_pIcon.pixmap(iconSize, iconSize), QColor(0, 0, 0));
+     }
+ 
+-    if(isLoading())
+-        p.drawPixmap(rect.center().x()-iconSize/2,rect.center().y()-iconSize/2,iconSize,iconSize,opt.icon.pixmap(iconSize,iconSize)); //opt.icon loading
++    if (isLoading())
++        p.drawPixmap(rect.center().x() - iconSize / 2, rect.center().y() - iconSize / 2, iconSize, iconSize, opt.icon.pixmap(iconSize, iconSize)); // opt.icon loading
+     else
+-        p.drawPixmap(rect.center().x()-iconSize/2,rect.center().y()-iconSize/2,iconSize,iconSize,d->m_pIcon.pixmap(iconSize,iconSize));
++        p.drawPixmap(rect.center().x() - iconSize / 2, rect.center().y() - iconSize / 2, iconSize, iconSize, d->m_pIcon.pixmap(iconSize, iconSize));
+ }
+ 
+ }
+ 
+ #include "kpressbutton.moc"
+ #include "moc_kpressbutton.cpp"
+-
+diff --git a/kysdk-qtwidgets/src/kpressbutton.h b/kysdk-qtwidgets/src/kpressbutton.h
+old mode 100755
+new mode 100644
+index b5e3fe3..db9c925
+--- a/kysdk-qtwidgets/src/kpressbutton.h
++++ b/kysdk-qtwidgets/src/kpressbutton.h
+@@ -25,7 +25,8 @@
+ #include "gui_g.h"
+ #include <QPushButton>
+ #include <QWidget>
+-namespace kdk {
++namespace kdk
++{
+ 
+ /**
+  * @defgroup PushbuttonModule
+@@ -36,16 +37,16 @@ class KPressButtonPrivate;
+  * @brief 按压按钮,可根据情况设置loading状态
+  * @since 1.2
+  */
+-class GUI_EXPORT KPressButton:public QPushButton
++class GUI_EXPORT KPressButton : public QPushButton
+ {
+     Q_OBJECT
+ public:
+-    enum ButtonType{
++    enum ButtonType {
+         NormalType,
+         CircleType
+     };
+ 
+-    KPressButton(QWidget* parent = 0);
++    KPressButton(QWidget *parent = 0);
+ 
+     /**
+      * @brief 设置圆角
+@@ -60,7 +61,7 @@ public:
+      * @param topRight
+      * @param bottomRight
+      */
+-    void setBorderRadius(int bottomLeft,int topLeft,int topRight,int bottomRight);
++    void setBorderRadius(int bottomLeft, int topLeft, int topRight, int bottomRight);
+ 
+     /**
+      * @brief 设置是否可选中
+@@ -121,12 +122,13 @@ public:
+      * @return
+      */
+     bool isTranslucent();
++
+ protected:
+-   void paintEvent(QPaintEvent *event) override;
++    void paintEvent(QPaintEvent *event) override;
+ 
+ private:
+     Q_DECLARE_PRIVATE(KPressButton)
+-    KPressButtonPrivate* const d_ptr;
++    KPressButtonPrivate *const d_ptr;
+ };
+ 
+ }
+diff --git a/kysdk-qtwidgets/src/kprogressbar.cpp b/kysdk-qtwidgets/src/kprogressbar.cpp
+index 98b38ab..a9921e1 100644
+--- a/kysdk-qtwidgets/src/kprogressbar.cpp
++++ b/kysdk-qtwidgets/src/kprogressbar.cpp
+@@ -22,35 +22,34 @@
+ 
+ #include "kprogressbar.h"
+ #include "themeController.h"
+-#include <QStyleOptionProgressBar>
+-#include <QPainter>
+-#include <QRect>
+-#include <QFontMetrics>
+ #include <QApplication>
++#include <QDebug>
++#include <QFontMetrics>
+ #include <QLinearGradient>
++#include <QPainter>
++#include <QRect>
++#include <QStyleOptionProgressBar>
+ #include <QVariantAnimation>
+-#include <QDebug>
+ 
+-namespace  kdk
++namespace kdk
+ {
+-class KProgressBarPrivate:public QObject,public ThemeController
++class KProgressBarPrivate : public QObject, public ThemeController
+ {
+     Q_OBJECT
+     Q_DECLARE_PUBLIC(KProgressBar)
+ 
+ public:
+-    KProgressBarPrivate(KProgressBar*parent);
++    KProgressBarPrivate(KProgressBar *parent);
+     void calculateTextRect();
+     void calculateRect();
+     void calculateContenteRect();
+     void changeTheme();
+ 
+-
+ Q_SIGNALS:
+     void progressStateChanged();
+ 
+ private:
+-    KProgressBar* q_ptr;
++    KProgressBar *q_ptr;
+     ProgressBarState m_state;
+     int m_contentMargin;
+     QRect m_textRect;
+@@ -65,37 +64,35 @@ private:
+     bool isBackgroundColor;
+     QColor m_fillColor;
+     bool isFillColor;
+-    QVariantAnimation* m_pAnimation;
++    QVariantAnimation *m_pAnimation;
+     qreal m_animationPos;
+     bool linearGradient;
+     bool animationsFlag;
+ };
+ 
+ KProgressBar::KProgressBar(QWidget *parent)
+-    :QProgressBar(parent),
+-      d_ptr(new KProgressBarPrivate(this))
++    : QProgressBar(parent)
++    , d_ptr(new KProgressBarPrivate(this))
+ {
+     Q_D(KProgressBar);
+     d->changeTheme();
+-    connect(d->m_gsetting,&QGSettings::changed,d,&KProgressBarPrivate::changeTheme);
+-    connect(this,&KProgressBar::valueChanged,this,[=](){
+-        if(this->value()==this->maximum())
+-        {
++    connect(d->m_gsetting, &QGSettings::changed, d, &KProgressBarPrivate::changeTheme);
++    connect(this, &KProgressBar::valueChanged, this, [=]() {
++        if (this->value() == this->maximum()) {
+             setState(SuccessProgress);
+         }
+     });
+ 
+-    connect(d->m_pAnimation, &QVariantAnimation::valueChanged, this,[=](const QVariant &value) {
+-        if(orientation() == Qt::Horizontal)
+-            d->m_animationPos = value.toDouble()/d->m_contentRect.width();
+-        else
+-        {
+-            d->m_animationPos = (value.toDouble()-d->m_contentRect.top())/d->m_contentRect.height();
++    connect(d->m_pAnimation, &QVariantAnimation::valueChanged, this, [=](const QVariant &value) {
++        if (orientation() == Qt::Horizontal)
++            d->m_animationPos = value.toDouble() / d->m_contentRect.width();
++        else {
++            d->m_animationPos = (value.toDouble() - d->m_contentRect.top()) / d->m_contentRect.height();
+         }
+         update();
+     });
+ 
+-    setContentsMargins(6,6,6,6);
++    setContentsMargins(6, 6, 6, 6);
+     setValue(0);
+ }
+ 
+@@ -109,12 +106,9 @@ void KProgressBar::setState(ProgressBarState state)
+ {
+     Q_D(KProgressBar);
+     d->m_state = state;
+-    if(d->animationsFlag && state == ProgressBarState::NormalProgress)
+-    {
++    if (d->animationsFlag && state == ProgressBarState::NormalProgress) {
+         d->m_pAnimation->start();
+-    }
+-    else
+-    {
++    } else {
+         d->m_pAnimation->stop();
+     }
+     update();
+@@ -126,397 +120,323 @@ void KProgressBar::paintEvent(QPaintEvent *event)
+     d->calculateTextRect();
+     d->calculateRect();
+     d->calculateContenteRect();
+-    //以上三个函数有逻辑关系,相对位置不能改变
++    // 以上三个函数有逻辑关系,相对位置不能改变
+ 
+     QPainter painter(this);
+-    if(ThemeController::widgetTheme() == ClassicTheme)
+-    {
+-        if(painter.pen().width() == 1)
+-            painter.translate(0.5,0.5);
++    if (ThemeController::widgetTheme() == ClassicTheme) {
++        if (painter.pen().width() == 1)
++            painter.translate(0.5, 0.5);
+     }
+     painter.setRenderHint(QPainter::Antialiasing);
+     painter.setPen(Qt::NoPen);
+ 
+     int radius = ThemeController::getRadiusFromDT("kradius-normal");
+-    if(radius == -1)
++    if (radius == -1)
+         radius = 6;
+ 
+-    if(this->orientation() == Qt::Horizontal)
+-    {
+-        if(ThemeController::widgetTheme() == ClassicTheme)
+-        {
+-            if(ThemeController::themeMode() == LightTheme)
+-            {
+-                painter.setBrush(QColor(250,250,250));
+-                painter.setPen(QColor(187,187,187));
+-            }
+-            else
+-            {
++    if (this->orientation() == Qt::Horizontal) {
++        if (ThemeController::widgetTheme() == ClassicTheme) {
++            if (ThemeController::themeMode() == LightTheme) {
++                painter.setBrush(QColor(250, 250, 250));
++                painter.setPen(QColor(187, 187, 187));
++            } else {
+                 painter.setBrush(QColor(68, 68, 68));
+-                painter.setPen(QColor(89,89,89));
++                painter.setPen(QColor(89, 89, 89));
+             }
+-            painter.drawRoundedRect(d->m_rect.adjusted(0,0,0,-1),0,0);
+-        }
+-        else
+-        {
+-	    if(d->isBackgroundColor)
++            painter.drawRoundedRect(d->m_rect.adjusted(0, 0, 0, -1), 0, 0);
++        } else {
++            if (d->isBackgroundColor)
+                 painter.setBrush(d->m_backgroundColor);
+-	    else
+-	    {
+-                if(ThemeController::themeMode() == LightTheme)
+-                    painter.setBrush(QColor(230,230,230));
++            else {
++                if (ThemeController::themeMode() == LightTheme)
++                    painter.setBrush(QColor(230, 230, 230));
+                 else
+-                    painter.setBrush(QColor(55,55,59));
+-  	    }
+-            painter.drawRoundedRect(d->m_rect,radius,radius);
++                    painter.setBrush(QColor(55, 55, 59));
++            }
++            painter.drawRoundedRect(d->m_rect, radius, radius);
+         }
+-//        QLinearGradient linear(this->rect().topLeft(), this->rect().bottomRight());
+-        QLinearGradient linear(d->m_contentRect.left(),0,d->m_contentRect.right(),0);
+-        d->m_linearGradient = QLinearGradient(d->m_contentRect.topLeft(),d->m_contentRect.bottomRight());
+-//        QColor color = palette().color(QPalette::Highlight);
++        //        QLinearGradient linear(this->rect().topLeft(), this->rect().bottomRight());
++        QLinearGradient linear(d->m_contentRect.left(), 0, d->m_contentRect.right(), 0);
++        d->m_linearGradient = QLinearGradient(d->m_contentRect.topLeft(), d->m_contentRect.bottomRight());
++        //        QColor color = palette().color(QPalette::Highlight);
+         QColor color = ThemeController::getPaletteColorFromDT("highlight");
+-        switch (d->m_state)
+-        {
++        switch (d->m_state) {
+         case NormalProgress:
+-            if(ThemeController::widgetTheme() == FashionTheme)
+-            {
++            if (ThemeController::widgetTheme() == FashionTheme) {
+                 QColor startColor;
+                 QColor endColor;
+-                ThemeController::getGradientFromDT("kbrand-hover",startColor,endColor);
+-                if(!startColor.isValid())
+-                    startColor = ThemeController::mixColor(color,Qt::white,0.2);
+-                if(!endColor.isValid())
+-                    endColor = ThemeController::mixColor(color,Qt::white,0.05);
++                ThemeController::getGradientFromDT("kbrand-hover", startColor, endColor);
++                if (!startColor.isValid())
++                    startColor = ThemeController::mixColor(color, Qt::white, 0.2);
++                if (!endColor.isValid())
++                    endColor = ThemeController::mixColor(color, Qt::white, 0.05);
+ 
+                 linear.setColorAt(0, startColor);
+                 linear.setColorAt(1, endColor);
+-            }
+-            else if(ThemeController::widgetTheme() == ClassicTheme)
+-            {
+-                QColor startColor = ThemeController::highlightClick(false,palette());
+-                startColor = ThemeController::adjustH(startColor,-6);
+-                startColor = ThemeController::adjustS(startColor,-13);
+-                startColor = ThemeController::adjustL(startColor,-33);
++            } else if (ThemeController::widgetTheme() == ClassicTheme) {
++                QColor startColor = ThemeController::highlightClick(false, palette());
++                startColor = ThemeController::adjustH(startColor, -6);
++                startColor = ThemeController::adjustS(startColor, -13);
++                startColor = ThemeController::adjustL(startColor, -33);
+                 linear.setColorAt(0, startColor);
+                 linear.setColorAt(1, startColor);
+-            }
+-            else
+-            {
+-                if(d->animationsFlag)
+-                {
+-                    QColor startColor = ThemeController::mixColor(color,Qt::white,0.5);
++            } else {
++                if (d->animationsFlag) {
++                    QColor startColor = ThemeController::mixColor(color, Qt::white, 0.5);
+                     linear.setColorAt(0, color);
+-                    linear.setColorAt(d->m_animationPos,startColor);
++                    linear.setColorAt(d->m_animationPos, startColor);
+                     linear.setColorAt(1, color);
+-                }
+-                else
+-                {
+-                    QColor startColor = ThemeController::mixColor(color,Qt::white,0.2);
+-                    QColor endColor = ThemeController::mixColor(color,Qt::white,0.05);
++                } else {
++                    QColor startColor = ThemeController::mixColor(color, Qt::white, 0.2);
++                    QColor endColor = ThemeController::mixColor(color, Qt::white, 0.05);
+                     linear.setColorAt(0, startColor);
+                     linear.setColorAt(1, endColor);
+                 }
+             }
+             linear.setSpread(QGradient::PadSpread);
+-            if(d->isLinearGradient)
+-            {
+-                if(!d->linearGradient)
+-                {
+-                    d->m_color1 = ThemeController::mixColor(color,Qt::white,0.2);
+-                    d->m_color2 = ThemeController::mixColor(color,Qt::white,0.05);
++            if (d->isLinearGradient) {
++                if (!d->linearGradient) {
++                    d->m_color1 = ThemeController::mixColor(color, Qt::white, 0.2);
++                    d->m_color2 = ThemeController::mixColor(color, Qt::white, 0.05);
+                 }
+-                d->m_linearGradient.setColorAt(0,d->m_color1);
+-                d->m_linearGradient.setColorAt(1,d->m_color2);
++                d->m_linearGradient.setColorAt(0, d->m_color1);
++                d->m_linearGradient.setColorAt(1, d->m_color2);
+                 painter.setBrush(d->m_linearGradient);
+-            }
+-            else if(d->isFillColor)
++            } else if (d->isFillColor)
+                 painter.setBrush(d->m_fillColor);
+             else
+                 painter.setBrush(linear);
+-            if(ThemeController::widgetTheme() == ClassicTheme)
+-                painter.drawRoundedRect(d->m_contentRect,0,0);
++            if (ThemeController::widgetTheme() == ClassicTheme)
++                painter.drawRoundedRect(d->m_contentRect, 0, 0);
+             else
+-                painter.drawRoundedRect(d->m_contentRect,radius,radius);
+-            if(isTextVisible())
+-            {
+-//                painter.setPen(QWidget::palette().color(QPalette::Text));
++                painter.drawRoundedRect(d->m_contentRect, radius, radius);
++            if (isTextVisible()) {
++                //                painter.setPen(QWidget::palette().color(QPalette::Text));
+                 painter.setPen(ThemeController::getPaletteColorFromDT("text"));
+-                painter.drawText(d->m_textRect,Qt::AlignCenter,text());
++                painter.drawText(d->m_textRect, Qt::AlignCenter, text());
+             }
+             break;
+-        case FailedProgress:
+-        {
+-            if(ThemeController::widgetTheme() == ClassicTheme)
+-            {
++        case FailedProgress: {
++            if (ThemeController::widgetTheme() == ClassicTheme) {
+                 linear.setColorAt(0, ThemeController::lanhuHSLToQtHsl(359, 100, 65));
+                 linear.setColorAt(1, ThemeController::lanhuHSLToQtHsl(359, 100, 65));
+-            }
+-            else
+-            {
+-                linear.setColorAt(0, QColor(255,77,79));
+-                linear.setColorAt(1, QColor(243,34,45));
++            } else {
++                linear.setColorAt(0, QColor(255, 77, 79));
++                linear.setColorAt(1, QColor(243, 34, 45));
+             }
+             linear.setSpread(QGradient::PadSpread);
+             painter.setBrush(linear);
+-            if(ThemeController::widgetTheme() == ClassicTheme)
+-                painter.drawRoundedRect(d->m_contentRect,0,0);
++            if (ThemeController::widgetTheme() == ClassicTheme)
++                painter.drawRoundedRect(d->m_contentRect, 0, 0);
+             else
+-                painter.drawRoundedRect(d->m_contentRect,radius,radius);
+-            if(isTextVisible())
+-            {
+-                QPixmap pixmap = QIcon::fromTheme("dialog-error").pixmap(16,16);
+-                QRect rect(0,0,16,16);
++                painter.drawRoundedRect(d->m_contentRect, radius, radius);
++            if (isTextVisible()) {
++                QPixmap pixmap = QIcon::fromTheme("dialog-error").pixmap(16, 16);
++                QRect rect(0, 0, 16, 16);
+                 rect.moveCenter(d->m_textRect.center());
+-                painter.drawPixmap(rect,pixmap);
++                painter.drawPixmap(rect, pixmap);
+             }
+             break;
+         }
+-        case SuccessProgress:
+-        {
+-            if(ThemeController::widgetTheme() == FashionTheme)
+-            {
+-               if(ThemeController::themeMode() == LightTheme)
+-               {
+-                   QColor startColor;
+-                   QColor endColor;
+-                   ThemeController::getGradientFromDT("ksuccess-hover",startColor,endColor);
+-                   if(!startColor.isValid())
+-                       startColor = QColor("#8DF063");
+-                   if(!endColor.isValid())
+-                       endColor = QColor("#4ED42D");
+-
+-                   linear.setColorAt(0, startColor);
+-                   linear.setColorAt(1, endColor);
+-               }
+-               else
+-               {
+-                   QColor startColor;
+-                   QColor endColor;
+-                   ThemeController::getGradientFromDT("ksuccess-hover",startColor,endColor);
+-                   if(!startColor.isValid())
+-                       startColor = QColor("#75D14D");
+-                   if(!endColor.isValid())
+-                       endColor = QColor("#52C429");
+-
+-                   linear.setColorAt(0, startColor);
+-                   linear.setColorAt(1, endColor);
+-               }
+-            }
+-            else if(ThemeController::widgetTheme() == ClassicTheme)
+-            {
++        case SuccessProgress: {
++            if (ThemeController::widgetTheme() == FashionTheme) {
++                if (ThemeController::themeMode() == LightTheme) {
++                    QColor startColor;
++                    QColor endColor;
++                    ThemeController::getGradientFromDT("ksuccess-hover", startColor, endColor);
++                    if (!startColor.isValid())
++                        startColor = QColor("#8DF063");
++                    if (!endColor.isValid())
++                        endColor = QColor("#4ED42D");
++
++                    linear.setColorAt(0, startColor);
++                    linear.setColorAt(1, endColor);
++                } else {
++                    QColor startColor;
++                    QColor endColor;
++                    ThemeController::getGradientFromDT("ksuccess-hover", startColor, endColor);
++                    if (!startColor.isValid())
++                        startColor = QColor("#75D14D");
++                    if (!endColor.isValid())
++                        endColor = QColor("#52C429");
++
++                    linear.setColorAt(0, startColor);
++                    linear.setColorAt(1, endColor);
++                }
++            } else if (ThemeController::widgetTheme() == ClassicTheme) {
+                 linear.setColorAt(0, ThemeController::lanhuHSLToQtHsl(104, 65, 46));
+                 linear.setColorAt(1, ThemeController::lanhuHSLToQtHsl(104, 65, 46));
+-            }
+-            else
+-            {
+-                linear.setColorAt(0, QColor(117,209,77));
+-                linear.setColorAt(1, QColor(82,196,41));
++            } else {
++                linear.setColorAt(0, QColor(117, 209, 77));
++                linear.setColorAt(1, QColor(82, 196, 41));
+             }
+             linear.setSpread(QGradient::PadSpread);
+             painter.setBrush(linear);
+-            if(ThemeController::widgetTheme() == ClassicTheme)
+-                painter.drawRoundedRect(d->m_contentRect,0,0);
++            if (ThemeController::widgetTheme() == ClassicTheme)
++                painter.drawRoundedRect(d->m_contentRect, 0, 0);
+             else
+-                painter.drawRoundedRect(d->m_contentRect,radius,radius);
+-            if(isTextVisible())
+-            {
+-                QPixmap pixmap = QIcon::fromTheme("ukui-dialog-success").pixmap(16,16);
+-                QRect rect(0,0,16,16);
++                painter.drawRoundedRect(d->m_contentRect, radius, radius);
++            if (isTextVisible()) {
++                QPixmap pixmap = QIcon::fromTheme("ukui-dialog-success").pixmap(16, 16);
++                QRect rect(0, 0, 16, 16);
+                 rect.moveCenter(d->m_textRect.center());
+-                painter.drawPixmap(rect,pixmap);
++                painter.drawPixmap(rect, pixmap);
+             }
+             break;
+         }
+         default:
+             break;
+         }
+-    }
+-    else
+-    {
+-        if(ThemeController::widgetTheme() == ClassicTheme)
+-        {
+-            if(ThemeController::themeMode() == LightTheme)
+-            {
+-                painter.setBrush(QColor(250,250,250));
+-                painter.setPen(QColor(187,187,187));
+-            }
+-            else
+-            {
++    } else {
++        if (ThemeController::widgetTheme() == ClassicTheme) {
++            if (ThemeController::themeMode() == LightTheme) {
++                painter.setBrush(QColor(250, 250, 250));
++                painter.setPen(QColor(187, 187, 187));
++            } else {
+                 painter.setBrush(QColor(68, 68, 68));
+-                painter.setPen(QColor(89,89,89));
++                painter.setPen(QColor(89, 89, 89));
+             }
+-            painter.drawRoundedRect(d->m_rect.adjusted(0,0,-1,0),0,0);
+-        }
+-        else
+-        {
+-            if(d->isBackgroundColor)
++            painter.drawRoundedRect(d->m_rect.adjusted(0, 0, -1, 0), 0, 0);
++        } else {
++            if (d->isBackgroundColor)
+                 painter.setBrush(d->m_backgroundColor);
+-            else
+-            {
+-                if(ThemeController::themeMode() == LightTheme)
+-                    painter.setBrush(QColor(230,230,230));
++            else {
++                if (ThemeController::themeMode() == LightTheme)
++                    painter.setBrush(QColor(230, 230, 230));
+                 else
+-                    painter.setBrush(QColor(55,55,59));
++                    painter.setBrush(QColor(55, 55, 59));
+             }
+-            painter.drawRoundedRect(d->m_rect,radius,radius);
++            painter.drawRoundedRect(d->m_rect, radius, radius);
+         }
+-        QLinearGradient linear(0,d->m_contentRect.top(),0, d->m_contentRect.bottom());
++        QLinearGradient linear(0, d->m_contentRect.top(), 0, d->m_contentRect.bottom());
+ 
+-        d->m_linearGradient = QLinearGradient(d->m_contentRect.topLeft(),d->m_contentRect.bottomRight());
+-//        QColor color = palette().color(QPalette::Highlight);
++        d->m_linearGradient = QLinearGradient(d->m_contentRect.topLeft(), d->m_contentRect.bottomRight());
++        //        QColor color = palette().color(QPalette::Highlight);
+         QColor color = ThemeController::getPaletteColorFromDT("highlight");
+-        switch (d->m_state)
+-        {
++        switch (d->m_state) {
+         case NormalProgress:
+-            if(ThemeController::widgetTheme() == FashionTheme)
+-            {
++            if (ThemeController::widgetTheme() == FashionTheme) {
+                 QColor startColor;
+                 QColor endColor;
+-                ThemeController::getGradientFromDT("kbrand-hover",startColor,endColor);
+-                if(!startColor.isValid())
+-                    startColor = ThemeController::mixColor(color,Qt::white,0.2);
+-                if(!endColor.isValid())
+-                    endColor = ThemeController::mixColor(color,Qt::white,0.05);
+-
+-//                QColor startColor = ThemeController::mixColor(color,Qt::white,0.2);
+-//                QColor endColor = ThemeController::mixColor(color,Qt::white,0.05);
++                ThemeController::getGradientFromDT("kbrand-hover", startColor, endColor);
++                if (!startColor.isValid())
++                    startColor = ThemeController::mixColor(color, Qt::white, 0.2);
++                if (!endColor.isValid())
++                    endColor = ThemeController::mixColor(color, Qt::white, 0.05);
++
++                //                QColor startColor = ThemeController::mixColor(color,Qt::white,0.2);
++                //                QColor endColor = ThemeController::mixColor(color,Qt::white,0.05);
+                 linear.setColorAt(0, startColor);
+                 linear.setColorAt(1, endColor);
+-            }
+-            else if(ThemeController::widgetTheme() == ClassicTheme)
+-            {
+-                QColor startColor = ThemeController::highlightClick(false,palette());
+-                startColor = ThemeController::adjustH(startColor,-6);
+-                startColor = ThemeController::adjustS(startColor,-13);
+-                startColor = ThemeController::adjustL(startColor,-33);
++            } else if (ThemeController::widgetTheme() == ClassicTheme) {
++                QColor startColor = ThemeController::highlightClick(false, palette());
++                startColor = ThemeController::adjustH(startColor, -6);
++                startColor = ThemeController::adjustS(startColor, -13);
++                startColor = ThemeController::adjustL(startColor, -33);
+                 linear.setColorAt(0, startColor);
+                 linear.setColorAt(1, startColor);
+-            }
+-            else
+-            {
+-                if(d->animationsFlag)
+-                {
+-                    QColor startColor = ThemeController::mixColor(color,Qt::white,0.5);
++            } else {
++                if (d->animationsFlag) {
++                    QColor startColor = ThemeController::mixColor(color, Qt::white, 0.5);
+                     linear.setColorAt(0, color);
+-                    linear.setColorAt(d->m_animationPos,startColor);
++                    linear.setColorAt(d->m_animationPos, startColor);
+                     linear.setColorAt(1, color);
+-                }
+-                else
+-                {
+-                    QColor startColor = ThemeController::mixColor(color,Qt::white,0.2);
+-                    QColor endColor = ThemeController::mixColor(color,Qt::white,0.05);
++                } else {
++                    QColor startColor = ThemeController::mixColor(color, Qt::white, 0.2);
++                    QColor endColor = ThemeController::mixColor(color, Qt::white, 0.05);
+                     linear.setColorAt(0, startColor);
+                     linear.setColorAt(1, endColor);
+                 }
+             }
+             linear.setSpread(QGradient::PadSpread);
+-            if(d->isLinearGradient)
+-            {
+-                if(!d->linearGradient)
+-                {
+-                    d->m_color1 = ThemeController::mixColor(color,Qt::white,0.2);
+-                    d->m_color2 = ThemeController::mixColor(color,Qt::white,0.05);
++            if (d->isLinearGradient) {
++                if (!d->linearGradient) {
++                    d->m_color1 = ThemeController::mixColor(color, Qt::white, 0.2);
++                    d->m_color2 = ThemeController::mixColor(color, Qt::white, 0.05);
+                 }
+-                d->m_linearGradient.setColorAt(0,d->m_color1);
+-                d->m_linearGradient.setColorAt(1,d->m_color2);
++                d->m_linearGradient.setColorAt(0, d->m_color1);
++                d->m_linearGradient.setColorAt(1, d->m_color2);
+                 painter.setBrush(d->m_linearGradient);
+-            }
+-            else if(d->isFillColor)
++            } else if (d->isFillColor)
+                 painter.setBrush(d->m_fillColor);
+             else
+                 painter.setBrush(linear);
+-            if(ThemeController::widgetTheme() == ClassicTheme)
+-                painter.drawRoundedRect(d->m_contentRect,0,0);
++            if (ThemeController::widgetTheme() == ClassicTheme)
++                painter.drawRoundedRect(d->m_contentRect, 0, 0);
+             else
+-                painter.drawRoundedRect(d->m_contentRect,radius,radius);
+-            if(isTextVisible())
+-            {
+-//                painter.setPen(QWidget::palette().color(QPalette::Text));
++                painter.drawRoundedRect(d->m_contentRect, radius, radius);
++            if (isTextVisible()) {
++                //                painter.setPen(QWidget::palette().color(QPalette::Text));
+                 painter.setPen(ThemeController::getPaletteColorFromDT("text"));
+-                painter.drawText(d->m_textRect,Qt::AlignCenter,text());
++                painter.drawText(d->m_textRect, Qt::AlignCenter, text());
+             }
+             break;
+-        case FailedProgress:
+-        {
+-            if(ThemeController::widgetTheme() == ClassicTheme)
+-            {
++        case FailedProgress: {
++            if (ThemeController::widgetTheme() == ClassicTheme) {
+                 linear.setColorAt(0, ThemeController::lanhuHSLToQtHsl(359, 100, 65));
+                 linear.setColorAt(1, ThemeController::lanhuHSLToQtHsl(359, 100, 65));
+-            }
+-            else
+-            {
+-                linear.setColorAt(0, QColor(255,77,79));
+-                linear.setColorAt(1, QColor(243,34,45));
++            } else {
++                linear.setColorAt(0, QColor(255, 77, 79));
++                linear.setColorAt(1, QColor(243, 34, 45));
+             }
+             linear.setSpread(QGradient::PadSpread);
+             painter.setBrush(linear);
+-            if(ThemeController::widgetTheme() == ClassicTheme)
+-                painter.drawRoundedRect(d->m_contentRect,0,0);
++            if (ThemeController::widgetTheme() == ClassicTheme)
++                painter.drawRoundedRect(d->m_contentRect, 0, 0);
+             else
+-                painter.drawRoundedRect(d->m_contentRect,radius,radius);
+-            if(isTextVisible())
+-            {
+-                QPixmap pixmap = QIcon::fromTheme("dialog-error").pixmap(16,16);
+-                QRect rect(0,0,16,16);
++                painter.drawRoundedRect(d->m_contentRect, radius, radius);
++            if (isTextVisible()) {
++                QPixmap pixmap = QIcon::fromTheme("dialog-error").pixmap(16, 16);
++                QRect rect(0, 0, 16, 16);
+                 rect.moveCenter(d->m_textRect.center());
+-                painter.drawPixmap(rect,pixmap);
++                painter.drawPixmap(rect, pixmap);
+             }
+             break;
+         }
+-        case SuccessProgress:
+-        {
+-            if(ThemeController::widgetTheme()== FashionTheme)
+-            {
+-               if(ThemeController::themeMode() == LightTheme)
+-               {
+-                   QColor startColor;
+-                   QColor endColor;
+-                   ThemeController::getGradientFromDT("ksuccess-hover",startColor,endColor);
+-                   if(!startColor.isValid())
+-                       startColor = QColor("#8DF063");
+-                   if(!endColor.isValid())
+-                       endColor = QColor("#4ED42D");
+-
+-                   linear.setColorAt(0, startColor);
+-                   linear.setColorAt(1, endColor);
+-               }
+-               else
+-               {
+-                   QColor startColor;
+-                   QColor endColor;
+-                   ThemeController::getGradientFromDT("ksuccess-hover",startColor,endColor);
+-                   if(!startColor.isValid())
+-                       startColor = QColor("#75D14D");
+-                   if(!endColor.isValid())
+-                       endColor = QColor("#52C429");
+-
+-                   linear.setColorAt(0, startColor);
+-                   linear.setColorAt(1, endColor);
+-               }
+-            }
+-            else if(ThemeController::widgetTheme() == ClassicTheme)
+-            {
++        case SuccessProgress: {
++            if (ThemeController::widgetTheme() == FashionTheme) {
++                if (ThemeController::themeMode() == LightTheme) {
++                    QColor startColor;
++                    QColor endColor;
++                    ThemeController::getGradientFromDT("ksuccess-hover", startColor, endColor);
++                    if (!startColor.isValid())
++                        startColor = QColor("#8DF063");
++                    if (!endColor.isValid())
++                        endColor = QColor("#4ED42D");
++
++                    linear.setColorAt(0, startColor);
++                    linear.setColorAt(1, endColor);
++                } else {
++                    QColor startColor;
++                    QColor endColor;
++                    ThemeController::getGradientFromDT("ksuccess-hover", startColor, endColor);
++                    if (!startColor.isValid())
++                        startColor = QColor("#75D14D");
++                    if (!endColor.isValid())
++                        endColor = QColor("#52C429");
++
++                    linear.setColorAt(0, startColor);
++                    linear.setColorAt(1, endColor);
++                }
++            } else if (ThemeController::widgetTheme() == ClassicTheme) {
+                 linear.setColorAt(0, ThemeController::lanhuHSLToQtHsl(104, 65, 46));
+                 linear.setColorAt(1, ThemeController::lanhuHSLToQtHsl(104, 65, 46));
+-            }
+-            else
+-            {
+-                linear.setColorAt(0, QColor(117,209,77));
+-                linear.setColorAt(1, QColor(82,196,41));
++            } else {
++                linear.setColorAt(0, QColor(117, 209, 77));
++                linear.setColorAt(1, QColor(82, 196, 41));
+             }
+             linear.setSpread(QGradient::PadSpread);
+             painter.setBrush(linear);
+-            if(ThemeController::widgetTheme() == ClassicTheme)
+-                painter.drawRoundedRect(d->m_contentRect,0,0);
++            if (ThemeController::widgetTheme() == ClassicTheme)
++                painter.drawRoundedRect(d->m_contentRect, 0, 0);
+             else
+-                painter.drawRoundedRect(d->m_contentRect,radius,radius);
+-            if(isTextVisible())
+-            {
+-                QPixmap pixmap = QIcon::fromTheme("ukui-dialog-success").pixmap(16,16);
+-                //painter.drawPixmap(d->m_textRect,pixmap);
+-                QRect rect(0,0,16,16);
++                painter.drawRoundedRect(d->m_contentRect, radius, radius);
++            if (isTextVisible()) {
++                QPixmap pixmap = QIcon::fromTheme("ukui-dialog-success").pixmap(16, 16);
++                // painter.drawPixmap(d->m_textRect,pixmap);
++                QRect rect(0, 0, 16, 16);
+                 rect.moveCenter(d->m_textRect.center());
+-                painter.drawPixmap(rect,pixmap);
++                painter.drawPixmap(rect, pixmap);
+             }
+             break;
+         }
+@@ -529,19 +449,18 @@ void KProgressBar::paintEvent(QPaintEvent *event)
+ QSize KProgressBar::sizeHint() const
+ {
+     QSize size = QProgressBar::sizeHint();
+-    if(this->orientation()==Qt::Horizontal)
++    if (this->orientation() == Qt::Horizontal)
+         size.setHeight(30);
+     else
+         size.setWidth(30);
+     return size;
+ }
+ 
+-
+ QString KProgressBar::text() const
+ {
+     Q_D(const KProgressBar);
+     if ((maximum() == 0 && minimum() == 0) || value() < minimum()
+-            || (minimum() == INT_MIN && minimum() == INT_MIN))
++        || (minimum() == INT_MIN && minimum() == INT_MIN))
+         return QString();
+     qint64 totalSteps = qint64(maximum()) - minimum();
+ 
+@@ -566,7 +485,7 @@ QString KProgressBar::text() const
+ 
+ void KProgressBar::setOrientation(Qt::Orientation orientation)
+ {
+-    if(orientation == Qt::Vertical)
++    if (orientation == Qt::Vertical)
+         this->setMinimumHeight(200);
+     QProgressBar::setOrientation(orientation);
+ }
+@@ -617,12 +536,9 @@ void KProgressBar::setAnimation(bool flag)
+     Q_D(KProgressBar);
+     d->animationsFlag = flag;
+ 
+-    if(!flag)
+-    {
++    if (!flag) {
+         d->m_pAnimation->stop();
+-    }
+-    else
+-    {
++    } else {
+         d->m_pAnimation->start();
+     }
+ }
+@@ -630,11 +546,11 @@ void KProgressBar::setAnimation(bool flag)
+ bool KProgressBar::animation()
+ {
+     Q_D(KProgressBar);
+-    return d->animationsFlag ;
++    return d->animationsFlag;
+ }
+ 
+ KProgressBarPrivate::KProgressBarPrivate(KProgressBar *parent)
+-    :q_ptr(parent)
++    : q_ptr(parent)
+ {
+     Q_Q(KProgressBar);
+     m_contentMargin = 2;
+@@ -657,29 +573,24 @@ KProgressBarPrivate::KProgressBarPrivate(KProgressBar *parent)
+ void KProgressBarPrivate::calculateTextRect()
+ {
+     Q_Q(KProgressBar);
+-    if(!q->isTextVisible())
+-        m_textRect =  QRect();
+-    else
+-    {
++    if (!q->isTextVisible())
++        m_textRect = QRect();
++    else {
+         QFont font(QApplication::font());
+         QFontMetrics fm(font);
+-        m_textRect = QRect(0,0,fm.width(q->text()),fm.height());
++        m_textRect = QRect(0, 0, fm.width(q->text()), fm.height());
+         m_textRect.moveCenter(q->rect().center());
+-        if(q->orientation()==Qt::Horizontal)
+-        {
+-            if(q->alignment() & Qt::AlignCenter)
++        if (q->orientation() == Qt::Horizontal) {
++            if (q->alignment() & Qt::AlignCenter)
+                 return;
+-            else
+-            {
+-                if(ThemeController::systemLang())
++            else {
++                if (ThemeController::systemLang())
+                     m_textRect.moveLeft(q->rect().left());
+                 else
+                     m_textRect.moveRight(q->rect().right());
+             }
+-        }
+-        else
+-        {
+-            if(q->alignment() & Qt::AlignCenter)
++        } else {
++            if (q->alignment() & Qt::AlignCenter)
+                 return;
+             else
+                 m_textRect.moveTop(q->rect().top());
+@@ -687,92 +598,74 @@ void KProgressBarPrivate::calculateTextRect()
+     }
+ }
+ 
+-void KProgressBarPrivate::calculateRect() //背景矩形
++void KProgressBarPrivate::calculateRect() // 背景矩形
+ {
+     Q_Q(KProgressBar);
+-    QMargins margins  = q->contentsMargins();
++    QMargins margins = q->contentsMargins();
+     m_rect = q->rect();
+-    if(q->orientation() == Qt::Horizontal)
+-    {
+-        if(m_bodyWidth != 0)
++    if (q->orientation() == Qt::Horizontal) {
++        if (m_bodyWidth != 0)
+             m_rect.setHeight(m_bodyWidth);
+-        if(!q->isTextVisible())
++        if (!q->isTextVisible())
+             return;
+-        else
+-        {
++        else {
+             m_rect.moveCenter(q->rect().center());
+-            if(q->alignment() & Qt::AlignCenter)
++            if (q->alignment() & Qt::AlignCenter)
+                 return;
+-            else
+-            {
+-                if(ThemeController::systemLang())
+-                    m_rect.setLeft(margins.right() + m_textRect.width()/*-gSpace*/);
++            else {
++                if (ThemeController::systemLang())
++                    m_rect.setLeft(margins.right() + m_textRect.width() /*-gSpace*/);
+                 else
+-                    m_rect.setRight(q->rect().width() - margins.right() - m_textRect.width()/*-gSpace*/);
++                    m_rect.setRight(q->rect().width() - margins.right() - m_textRect.width() /*-gSpace*/);
+             }
+         }
+-    }
+-    else
+-    {
+-        if(m_bodyWidth != 0)
++    } else {
++        if (m_bodyWidth != 0)
+             m_rect.setWidth(m_bodyWidth);
+-        if(!q->isTextVisible())
++        if (!q->isTextVisible())
+             return;
+-        else
+-        {
++        else {
+             m_rect.moveCenter(q->rect().center());
+-            if(q->alignment() & Qt::AlignCenter)
++            if (q->alignment() & Qt::AlignCenter)
+                 return;
+-            else
+-            {
+-                m_rect.setTop(margins.top() + m_textRect.height()/* + gSpace*/);
++            else {
++                m_rect.setTop(margins.top() + m_textRect.height() /* + gSpace*/);
+             }
+         }
+     }
+ }
+ 
+-void KProgressBarPrivate::calculateContenteRect()//填充矩形
++void KProgressBarPrivate::calculateContenteRect() // 填充矩形
+ {
+     Q_Q(KProgressBar);
+     m_contentRect = m_rect;
+-    if(q->orientation() == Qt::Horizontal)
+-    {
++    if (q->orientation() == Qt::Horizontal) {
+         int width;
+         qint64 totalSteps = qint64(q->maximum()) - q->minimum();
+-        width = m_rect.width() * (q->value() - q->minimum()) /totalSteps;
+-        if(!width)
+-        {
++        width = m_rect.width() * (q->value() - q->minimum()) / totalSteps;
++        if (!width) {
+             m_contentRect = QRect();
+         }
+-        //没设置反方向的情况下,即普通情况下
+-        if(!q->invertedAppearance())
+-        {
+-            m_contentRect.setRight(width+m_rect.left());
+-        }
+-        else
+-        {
++        // 没设置反方向的情况下,即普通情况下
++        if (!q->invertedAppearance()) {
++            m_contentRect.setRight(width + m_rect.left());
++        } else {
+             m_contentRect.setLeft(m_rect.width() - width);
+         }
+         m_pAnimation->setStartValue(m_contentRect.x());
+         m_pAnimation->setEndValue(m_contentRect.width());
+-    }
+-    else
+-    {
++    } else {
+         int height;
+         qint64 totalSteps = q->maximum() - q->minimum();
+-        height = m_rect.height() * (q->value() - q->minimum()) /totalSteps;
+-        if(!height)
+-        {
++        height = m_rect.height() * (q->value() - q->minimum()) / totalSteps;
++        if (!height) {
+             m_contentRect = QRect();
+         }
+-        //没设置反方向的情况下,即普通情况下
+-        if(!q->invertedAppearance())
+-        {
++        // 没设置反方向的情况下,即普通情况下
++        if (!q->invertedAppearance()) {
+             m_contentRect.setTop(m_rect.top() + m_rect.height() - height);
+-        }
+-        else
+-        {
+-            m_contentRect.setBottom(m_rect.top() +height);
++        } else {
++            m_contentRect.setBottom(m_rect.top() + height);
+         }
+         m_pAnimation->setStartValue(m_contentRect.bottom());
+         m_pAnimation->setEndValue(m_contentRect.top());
+diff --git a/kysdk-qtwidgets/src/kprogressbar.h b/kysdk-qtwidgets/src/kprogressbar.h
+index 9378da8..1e4bfb7 100644
+--- a/kysdk-qtwidgets/src/kprogressbar.h
++++ b/kysdk-qtwidgets/src/kprogressbar.h
+@@ -30,14 +30,13 @@ namespace kdk
+ {
+ 
+ /** @defgroup BarModule
+-  * @{
+-  */
++ * @{
++ */
+ 
+ /**
+  * @brief 支持三种状态
+  */
+-enum ProgressBarState
+-{
++enum ProgressBarState {
+     NormalProgress,
+     FailedProgress,
+     SuccessProgress
+@@ -47,12 +46,12 @@ class KProgressBarPrivate;
+ /**
+  * @brief 进度条,支持三种状态显示
+  */
+-class GUI_EXPORT KProgressBar:public QProgressBar
++class GUI_EXPORT KProgressBar : public QProgressBar
+ {
+     Q_OBJECT
+ 
+ public:
+-    KProgressBar(QWidget*parent);
++    KProgressBar(QWidget *parent);
+ 
+     /**
+      * @brief 获取状态
+@@ -90,7 +89,7 @@ public:
+      * @param color1
+      * @param color2
+      */
+-    void setGradationColor(QColor color1 ,QColor color2);
++    void setGradationColor(QColor color1, QColor color2);
+ 
+     /**
+      * @brief 设置背景色
+@@ -140,12 +139,12 @@ protected:
+ 
+ private:
+     Q_DECLARE_PRIVATE(KProgressBar)
+-    KProgressBarPrivate* const d_ptr;
++    KProgressBarPrivate *const d_ptr;
+ };
+ }
+ /**
+-  * @example testprogressbar/widget.h
+-  * @example testprogressbar/widget.cpp
+-  * @}
+-  */
++ * @example testprogressbar/widget.h
++ * @example testprogressbar/widget.cpp
++ * @}
++ */
+ #endif // KPROGRESSBAR_H
+diff --git a/kysdk-qtwidgets/src/kprogresscircle.cpp b/kysdk-qtwidgets/src/kprogresscircle.cpp
+index beb75ed..2459ee1 100644
+--- a/kysdk-qtwidgets/src/kprogresscircle.cpp
++++ b/kysdk-qtwidgets/src/kprogresscircle.cpp
+@@ -21,25 +21,25 @@
+  */
+ 
+ #include "kprogresscircle.h"
++#include "themeController.h"
++#include <QDebug>
++#include <QIcon>
+ #include <QLocale>
+ #include <QPainter>
+-#include <QIcon>
+-#include <QDebug>
+-#include "themeController.h"
+ 
+ namespace kdk
+ {
+-class KProgressCirclePrivate:public QObject,public ThemeController
++class KProgressCirclePrivate : public QObject, public ThemeController
+ {
+     Q_OBJECT
+     Q_DECLARE_PUBLIC(KProgressCircle)
+ 
+ public:
+-    KProgressCirclePrivate(KProgressCircle*parent);
++    KProgressCirclePrivate(KProgressCircle *parent);
+     void initDefaultFormat();
+-    void drawBaseCircle(QPainter*painter);
+-    void dawColoredCircle(QPainter*painter);
+-    void drawText(QPainter*painter);
++    void drawBaseCircle(QPainter *painter);
++    void dawColoredCircle(QPainter *painter);
++    void drawText(QPainter *painter);
+     void calculateCircleRect();
+     void changeTheme();
+ 
+@@ -66,12 +66,12 @@ private:
+ };
+ 
+ KProgressCircle::KProgressCircle(QWidget *parent)
+-    : QWidget(parent),
+-      d_ptr(new KProgressCirclePrivate(this))
++    : QWidget(parent)
++    , d_ptr(new KProgressCirclePrivate(this))
+ {
+-    setFixedSize(60,60);
+-    connect(this,&KProgressCircle::valueChanged,this,[=](){
+-        if(this->value()==this->maximum())
++    setFixedSize(60, 60);
++    connect(this, &KProgressCircle::valueChanged, this, [=]() {
++        if (this->value() == this->maximum())
+             setState(SuccessProgress);
+     });
+ }
+@@ -98,10 +98,9 @@ QString KProgressCircle::text() const
+ {
+     Q_D(const KProgressCircle);
+     if ((d->m_maximum == 0 && d->m_minimum == 0) || d->m_value < d->m_minimum
+-            || (d->m_value == INT_MIN && d->m_minimum == INT_MIN))
++        || (d->m_value == INT_MIN && d->m_minimum == INT_MIN))
+         return QString();
+ 
+-
+     qint64 totalSteps = qint64(d->m_maximum) - d->m_minimum;
+ 
+     QString result = d->m_format;
+@@ -143,8 +142,7 @@ void KProgressCircle::setState(ProgressBarState state)
+ {
+     Q_D(KProgressCircle);
+     d->m_state = state;
+-    switch (d->m_state)
+-    {
++    switch (d->m_state) {
+     case FailedProgress:
+         d->m_color = "#FF4D4F";
+         break;
+@@ -199,8 +197,8 @@ void KProgressCircle::setValue(int value)
+ {
+     Q_D(KProgressCircle);
+     if (d->m_value == value
+-            || ((value > d->m_maximum || value < d->m_minimum)
+-                && (d->m_maximum != 0 || d->m_minimum != 0)))
++        || ((value > d->m_maximum || value < d->m_minimum)
++            && (d->m_maximum != 0 || d->m_minimum != 0)))
+         return;
+     d->m_value = value;
+     Q_EMIT valueChanged(value);
+@@ -212,8 +210,8 @@ void KProgressCircle::paintEvent(QPaintEvent *)
+     Q_D(KProgressCircle);
+     QPainter painter(this);
+     painter.setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform);
+-    if(painter.pen().width() == 1)
+-        painter.translate(0.5,0.5);
++    if (painter.pen().width() == 1)
++        painter.translate(0.5, 0.5);
+     d->calculateCircleRect();
+     d->drawBaseCircle(&painter);
+     d->dawColoredCircle(&painter);
+@@ -221,45 +219,40 @@ void KProgressCircle::paintEvent(QPaintEvent *)
+ }
+ 
+ KProgressCirclePrivate::KProgressCirclePrivate(KProgressCircle *parent)
+-    :q_ptr(parent),
+-      m_minimum(0),
+-      m_maximum(100),
+-      m_value(0),
+-      m_cirleWidth(6),
+-      m_isTextVisiable(true),
+-      m_startAngel(90),
+-      m_pixWidth(20),
+-      m_textWidth(30),
+-      m_state(NormalProgress),
+-      m_color("#3790FA"),
+-      m_defaultFormat(true)
++    : q_ptr(parent)
++    , m_minimum(0)
++    , m_maximum(100)
++    , m_value(0)
++    , m_cirleWidth(6)
++    , m_isTextVisiable(true)
++    , m_startAngel(90)
++    , m_pixWidth(20)
++    , m_textWidth(30)
++    , m_state(NormalProgress)
++    , m_color("#3790FA")
++    , m_defaultFormat(true)
+ {
+     initDefaultFormat();
+     changeTheme();
+-    connect(m_gsetting,&QGSettings::changed,this,&KProgressCirclePrivate::changeTheme);
+-
++    connect(m_gsetting, &QGSettings::changed, this, &KProgressCirclePrivate::changeTheme);
+ }
+ 
+ void KProgressCirclePrivate::initDefaultFormat()
+ {
+     Q_Q(KProgressCircle);
+-    if (m_defaultFormat)
+-    {
++    if (m_defaultFormat) {
+         QLocale locale = q->locale();
+         m_format = QLatin1String("%p") + locale.percent();
+     }
+-
+ }
+ 
+ void KProgressCirclePrivate::drawBaseCircle(QPainter *painter)
+ {
+     Q_Q(KProgressCircle);
+     QPen pen;
+-    if(m_isTextVisiable)
+-    {
+-        if(ThemeController::widgetTheme() == ClassicTheme)
+-        {
+-            if(ThemeController::themeMode() == LightTheme)
++    if (m_isTextVisiable) {
++        if (ThemeController::widgetTheme() == ClassicTheme) {
++            if (ThemeController::themeMode() == LightTheme)
+                 pen.setColor(ThemeController::lanhuHSLToQtHsl(0, 0, 73));
+             else
+                 pen.setColor(ThemeController::lanhuHSLToQtHsl(0, 0, 35));
+@@ -267,39 +260,31 @@ void KProgressCirclePrivate::drawBaseCircle(QPainter *painter)
+             painter->setPen(pen);
+             painter->setBrush(Qt::NoBrush);
+             painter->setRenderHint(QPainter::Antialiasing);
+-            painter->drawEllipse(m_baseRect.adjusted(1,1,-1,-1));
++            painter->drawEllipse(m_baseRect.adjusted(1, 1, -1, -1));
+         }
+         pen.setColor(m_baseColor);
+         pen.setWidth(m_cirleWidth);
+         painter->setPen(pen);
+         painter->setBrush(Qt::NoBrush);
+         painter->setRenderHint(QPainter::Antialiasing);
+-        painter->drawEllipse(m_baseRect.adjusted(1,1,-1,-1));
+-    }
+-    else
+-    {
++        painter->drawEllipse(m_baseRect.adjusted(1, 1, -1, -1));
++    } else {
+         QPen penColor;
+-        QBrush outBrush,inBrush;
+-        if(ThemeController::widgetTheme() == ClassicTheme)
+-        {
+-            if(ThemeController::themeMode() == LightTheme)
+-            {
+-                outBrush=QBrush(ThemeController::lanhuHSLToQtHsl(0, 0, 98));
+-                inBrush=QBrush(ThemeController::lanhuHSLToQtHsl(0, 0, 98));
++        QBrush outBrush, inBrush;
++        if (ThemeController::widgetTheme() == ClassicTheme) {
++            if (ThemeController::themeMode() == LightTheme) {
++                outBrush = QBrush(ThemeController::lanhuHSLToQtHsl(0, 0, 98));
++                inBrush = QBrush(ThemeController::lanhuHSLToQtHsl(0, 0, 98));
+                 penColor.setColor(ThemeController::lanhuHSLToQtHsl(0, 0, 73));
+-            }
+-            else
+-            {
+-                outBrush=QBrush(ThemeController::lanhuHSLToQtHsl(0, 0, 27));
+-                inBrush=QBrush(ThemeController::lanhuHSLToQtHsl(0, 0, 27));
++            } else {
++                outBrush = QBrush(ThemeController::lanhuHSLToQtHsl(0, 0, 27));
++                inBrush = QBrush(ThemeController::lanhuHSLToQtHsl(0, 0, 27));
+                 penColor.setColor(ThemeController::lanhuHSLToQtHsl(0, 0, 35));
+             }
+-        }
+-        else
+-        {
++        } else {
+             outBrush = m_baseColor;
+-            inBrush=QBrush(Qt::NoBrush);
+-            penColor=QPen(Qt::NoPen);
++            inBrush = QBrush(Qt::NoBrush);
++            penColor = QPen(Qt::NoPen);
+         }
+ 
+         painter->save();
+@@ -321,41 +306,38 @@ void KProgressCirclePrivate::dawColoredCircle(QPainter *painter)
+ {
+     Q_Q(KProgressCircle);
+     QPen pen;
+-    int angleSpan = m_value*360/m_maximum;
++    int angleSpan = m_value * 360 / m_maximum;
+ 
+-    if(m_state == ProgressBarState::NormalProgress){
+-//        m_color = q->palette().color(QPalette::Highlight);
++    if (m_state == ProgressBarState::NormalProgress) {
++        //        m_color = q->palette().color(QPalette::Highlight);
+         m_color = ThemeController::getPaletteColorFromDT("highlight");
+     }
+ 
+-    if(m_isTextVisiable)
+-    {
++    if (m_isTextVisiable) {
+         pen.setColor(m_color);
+         pen.setWidth(m_cirleWidth);
+-        if(ThemeController::widgetTheme() == ClassicTheme)
++        if (ThemeController::widgetTheme() == ClassicTheme)
+             pen.setCapStyle(Qt::SquareCap);
+         else
+             pen.setCapStyle(Qt::RoundCap);
+         painter->setPen(pen);
+         painter->setBrush(Qt::NoBrush);
+         painter->setRenderHint(QPainter::Antialiasing);
+-        if(ThemeController::widgetTheme() == ClassicTheme)
+-            painter->drawArc(m_baseRect.adjusted(1,1,-1,-1),m_startAngel*16,-angleSpan*16);
++        if (ThemeController::widgetTheme() == ClassicTheme)
++            painter->drawArc(m_baseRect.adjusted(1, 1, -1, -1), m_startAngel * 16, -angleSpan * 16);
+         else
+-            painter->drawArc(m_baseRect,m_startAngel*16,-angleSpan*16);
+-    }
+-    else
+-    {
++            painter->drawArc(m_baseRect, m_startAngel * 16, -angleSpan * 16);
++    } else {
+         pen.setColor(m_color);
+         pen.setWidth(m_cirleWidth);
+-        if(ThemeController::widgetTheme() == ClassicTheme)
++        if (ThemeController::widgetTheme() == ClassicTheme)
+             pen.setCapStyle(Qt::SquareCap);
+         else
+             pen.setCapStyle(Qt::RoundCap);
+         painter->setPen(pen);
+         painter->setBrush(Qt::NoBrush);
+         painter->setRenderHint(QPainter::Antialiasing);
+-        painter->drawArc(m_contentRect,m_startAngel*16,-angleSpan*16);
++        painter->drawArc(m_contentRect, m_startAngel * 16, -angleSpan * 16);
+     }
+ }
+ 
+@@ -363,81 +345,63 @@ void KProgressCirclePrivate::drawText(QPainter *painter)
+ {
+     Q_Q(KProgressCircle);
+     QRect pixRect;
+-    pixRect.setLeft(q->rect().center().x()-m_pixWidth/2);
+-    pixRect.setTop(q->rect().center().y()-m_pixWidth/2);
+-    pixRect.setRight(q->rect().center().x()+m_pixWidth/2);
+-    pixRect.setBottom(q->rect().center().y()+m_pixWidth/2);
++    pixRect.setLeft(q->rect().center().x() - m_pixWidth / 2);
++    pixRect.setTop(q->rect().center().y() - m_pixWidth / 2);
++    pixRect.setRight(q->rect().center().x() + m_pixWidth / 2);
++    pixRect.setBottom(q->rect().center().y() + m_pixWidth / 2);
+     QRect textRect;
+-    textRect.setLeft(q->rect().center().x()-m_textWidth/2);
+-    textRect.setTop(q->rect().center().y()-m_textWidth/2);
+-    textRect.setRight(q->rect().center().x()+m_textWidth/2);
+-    textRect.setBottom(q->rect().center().y()+m_textWidth/2);
+-    if(m_isTextVisiable)
+-    {
+-        switch (m_state)
+-        {
+-        case NormalProgress:
+-        {
++    textRect.setLeft(q->rect().center().x() - m_textWidth / 2);
++    textRect.setTop(q->rect().center().y() - m_textWidth / 2);
++    textRect.setRight(q->rect().center().x() + m_textWidth / 2);
++    textRect.setBottom(q->rect().center().y() + m_textWidth / 2);
++    if (m_isTextVisiable) {
++        switch (m_state) {
++        case NormalProgress: {
+             painter->setRenderHint(QPainter::Antialiasing);
+-            painter->drawText(textRect,Qt::AlignCenter,q->text());
+-        }
+-            break;
+-        case SuccessProgress:
+-        {
++            painter->drawText(textRect, Qt::AlignCenter, q->text());
++        } break;
++        case SuccessProgress: {
+             QColor green;
+-            if(ThemeController::widgetTheme() == FashionTheme)
+-            {
+-                if(ThemeController::themeMode() == LightTheme)
+-                {
++            if (ThemeController::widgetTheme() == FashionTheme) {
++                if (ThemeController::themeMode() == LightTheme) {
+                     green = ThemeController::getCustomColorFromDT("ksuccess-normal");
+-                    if(!green.isValid())
++                    if (!green.isValid())
+                         green = QColor("#65E944");
+-                }
+-                else
+-                {
++                } else {
+                     green = ThemeController::getCustomColorFromDT("ksuccess-normal");
+-                    if(!green.isValid())
++                    if (!green.isValid())
+                         green = QColor("#52C429");
+                 }
+-            }
+-            else
+-            {
++            } else {
+                 green = ThemeController::getCustomColorFromDT("ksuccess-normal");
+-                if(!green.isValid())
++                if (!green.isValid())
+                     green = QColor("#52C429");
+             }
+-            QPixmap pixmap = ThemeController::drawColoredPixmap(QIcon::fromTheme("object-select-symbolic").pixmap(m_pixWidth,m_pixWidth),green);
++            QPixmap pixmap = ThemeController::drawColoredPixmap(QIcon::fromTheme("object-select-symbolic").pixmap(m_pixWidth, m_pixWidth), green);
+             painter->setRenderHint(QPainter::Antialiasing);
+-            painter->drawPixmap(pixRect,pixmap);
++            painter->drawPixmap(pixRect, pixmap);
+             break;
+         }
+-        case FailedProgress:
+-        {
++        case FailedProgress: {
+             QColor red;
+-            if(ThemeController::widgetTheme() == FashionTheme)
+-            {
+-                if(ThemeController::themeMode() == LightTheme)
+-                {
++            if (ThemeController::widgetTheme() == FashionTheme) {
++                if (ThemeController::themeMode() == LightTheme) {
+                     red = ThemeController::getCustomColorFromDT("kerror-normal");
+-                    if(!red.isValid())
++                    if (!red.isValid())
+                         red = QColor("#EC334C");
+-                }
+-                else
+-                {
++                } else {
+                     red = ThemeController::getCustomColorFromDT("kerror-normal");
+-                    if(!red.isValid())
++                    if (!red.isValid())
+                         red = QColor("#FF4D4F");
+                 }
+-            }
+-            else
+-            {
++            } else {
+                 red = ThemeController::getCustomColorFromDT("kerror-normal");
+-                if(!red.isValid())
++                if (!red.isValid())
+                     red = QColor("#FF4D4F");
+             }
+-            QPixmap pixmap = ThemeController::drawColoredPixmap(QIcon::fromTheme("window-close-symbolic").pixmap(20,20),red);
++            QPixmap pixmap = ThemeController::drawColoredPixmap(QIcon::fromTheme("window-close-symbolic").pixmap(20, 20), red);
+             painter->setRenderHint(QPainter::Antialiasing);
+-            painter->drawPixmap(pixRect,pixmap);
++            painter->drawPixmap(pixRect, pixmap);
+             break;
+         }
+         default:
+@@ -450,28 +414,25 @@ void KProgressCirclePrivate::calculateCircleRect()
+ {
+     Q_Q(KProgressCircle);
+ 
+-    m_baseRect.setTop(1+m_cirleWidth/2);
+-    m_baseRect.setLeft(1+m_cirleWidth/2);
+-    m_baseRect.setBottom(q->rect().height()-1-m_cirleWidth/2);
+-    m_baseRect.setRight(q->rect().right()-1-m_cirleWidth/2);
++    m_baseRect.setTop(1 + m_cirleWidth / 2);
++    m_baseRect.setLeft(1 + m_cirleWidth / 2);
++    m_baseRect.setBottom(q->rect().height() - 1 - m_cirleWidth / 2);
++    m_baseRect.setRight(q->rect().right() - 1 - m_cirleWidth / 2);
+ 
+-    m_contentRect.setTop(1+m_cirleWidth*2);
+-    m_contentRect.setLeft(1+m_cirleWidth*2);
+-    m_contentRect.setBottom(q->rect().height()-1-m_cirleWidth*2);
+-    m_contentRect.setRight(q->rect().right()-1-m_cirleWidth*2);
++    m_contentRect.setTop(1 + m_cirleWidth * 2);
++    m_contentRect.setLeft(1 + m_cirleWidth * 2);
++    m_contentRect.setBottom(q->rect().height() - 1 - m_cirleWidth * 2);
++    m_contentRect.setRight(q->rect().right() - 1 - m_cirleWidth * 2);
+ }
+ 
+ void KProgressCirclePrivate::changeTheme()
+ {
+     Q_Q(KProgressCircle);
+     initThemeStyle();
+-    if(ThemeController::themeMode() == LightTheme)
+-    {
++    if (ThemeController::themeMode() == LightTheme) {
+         m_baseColor = QColor("#E6E6E6");
+         m_baseCircleColor = QColor("#BFBFBF");
+-    }
+-    else
+-    {
++    } else {
+         m_baseColor = QColor("#37373B");
+         m_baseCircleColor = QColor("#232426");
+     }
+diff --git a/kysdk-qtwidgets/src/kprogresscircle.h b/kysdk-qtwidgets/src/kprogresscircle.h
+index 51cdee1..dfcd88c 100644
+--- a/kysdk-qtwidgets/src/kprogresscircle.h
++++ b/kysdk-qtwidgets/src/kprogresscircle.h
+@@ -23,8 +23,8 @@
+ #ifndef KPROGRESSCIRCLE_H
+ #define KPROGRESSCIRCLE_H
+ #include "gui_g.h"
+-#include <QWidget>
+ #include "kprogressbar.h"
++#include <QWidget>
+ 
+ /**
+  * @defgroup BarModule
+@@ -104,9 +104,8 @@ protected:
+ 
+ private:
+     Q_DECLARE_PRIVATE(KProgressCircle)
+-    KProgressCirclePrivate* const d_ptr;
++    KProgressCirclePrivate *const d_ptr;
+ };
+ }
+ 
+-
+ #endif // KPROGRESSCIRCLE_H
+diff --git a/kysdk-qtwidgets/src/kprogressdialog.cpp b/kysdk-qtwidgets/src/kprogressdialog.cpp
+index 8b8c2ff..9f6c323 100644
+--- a/kysdk-qtwidgets/src/kprogressdialog.cpp
++++ b/kysdk-qtwidgets/src/kprogressdialog.cpp
+@@ -26,27 +26,27 @@
+ 
+ namespace kdk
+ {
+-class KProgressDialogPrivate:public QObject
++class KProgressDialogPrivate : public QObject
+ {
+     Q_OBJECT
+     Q_DECLARE_PUBLIC(KProgressDialog)
+ 
+ public:
+-    KProgressDialogPrivate(KProgressDialog*parent);
++    KProgressDialogPrivate(KProgressDialog *parent);
+     void adjustNormalMode();
+     void infoReset();
+ 
+ private:
+-    KProgressDialog* const q_ptr;
++    KProgressDialog *const q_ptr;
+ 
+     QProgressBar *m_pProgressBar;
+     QLabel *m_pMainLabel;
+     QLabel *m_pPercentLabel;
+     QLabel *m_pSubContentLabel;
+     QLabel *m_pProgressLabel;
+-    QPushButton* m_pCanelButton;
+-    QList<QPushButton* > m_pButtons;
+-    QVBoxLayout* m_pMainLayout;
++    QPushButton *m_pCanelButton;
++    QList<QPushButton *> m_pButtons;
++    QVBoxLayout *m_pMainLayout;
+ 
+     QString m_suffix;
+     QString m_numerator;
+@@ -63,14 +63,14 @@ private:
+ };
+ 
+ KProgressDialog::KProgressDialog(QWidget *parent)
+-    :KDialog(parent),
+-      d_ptr(new KProgressDialogPrivate(this))
++    : KDialog(parent)
++    , d_ptr(new KProgressDialogPrivate(this))
+ {
+     Q_D(KProgressDialog);
+-//    setFixedSize(440,265);
++    //    setFixedSize(440,265);
+     this->layout()->setSizeConstraint(QLayout::SizeConstraint::SetFixedSize);
+     d->m_pMainLayout = new QVBoxLayout();
+-    d->m_pMainLayout->setContentsMargins(24,0,24,24);
++    d->m_pMainLayout->setContentsMargins(24, 0, 24, 24);
+     d->m_pMainLayout->setSpacing(0);
+     d->m_pMainLabel = new QLabel(this);
+ 
+@@ -94,17 +94,17 @@ KProgressDialog::KProgressDialog(QWidget *parent)
+     d->adjustNormalMode();
+     setShowDetail(false);
+     changeTheme();
+-    connect(m_gsetting,&QGSettings::changed,this,&KProgressDialog::changeTheme);
++    connect(m_gsetting, &QGSettings::changed, this, &KProgressDialog::changeTheme);
+     connect(this, SIGNAL(canceled()), this, SLOT(cancel()));
+     connect(d->m_pCanelButton, SIGNAL(clicked()), this, SIGNAL(canceled()));
+ }
+ 
+ KProgressDialog::KProgressDialog(const QString &labelText, const QString &cancelButtonText, int minimum, int maximum, QWidget *parent)
+-    :KProgressDialog(parent)
++    : KProgressDialog(parent)
+ {
+     Q_D(KProgressDialog);
+     d->m_pMainLabel->setText(labelText);
+-    d->m_pProgressBar->setRange(minimum,maximum);
++    d->m_pProgressBar->setRange(minimum, maximum);
+     d->m_pCanelButton->setText(cancelButtonText);
+     d->adjustNormalMode();
+     setShowDetail(true);
+@@ -112,15 +112,14 @@ KProgressDialog::KProgressDialog(const QString &labelText, const QString &cancel
+ 
+ KProgressDialog::~KProgressDialog()
+ {
+-
+ }
+ 
+ void KProgressDialog::setLabel(QLabel *label)
+ {
+     Q_D(KProgressDialog);
+-    if(!label)
++    if (!label)
+         return;
+-    if(d->m_pMainLabel)
++    if (d->m_pMainLabel)
+         delete d->m_pMainLabel;
+     d->m_pMainLabel = label;
+     d->m_pMainLabel->setVisible(true);
+@@ -129,9 +128,9 @@ void KProgressDialog::setLabel(QLabel *label)
+ void KProgressDialog::setCancelButton(QPushButton *button)
+ {
+     Q_D(KProgressDialog);
+-    if(!button)
++    if (!button)
+         return;
+-    if(d->m_pCanelButton)
++    if (d->m_pCanelButton)
+         delete d->m_pCanelButton;
+     d->m_pCanelButton = button;
+ }
+@@ -139,9 +138,9 @@ void KProgressDialog::setCancelButton(QPushButton *button)
+ void KProgressDialog::setBar(QProgressBar *bar)
+ {
+     Q_D(KProgressDialog);
+-    if(!bar)
++    if (!bar)
+         return;
+-    if(d->m_pProgressBar)
++    if (d->m_pProgressBar)
+         delete d->m_pProgressBar;
+     d->m_pProgressBar = bar;
+ }
+@@ -149,20 +148,18 @@ void KProgressDialog::setBar(QProgressBar *bar)
+ void KProgressDialog::setSuffix(const QString &suffix)
+ {
+     Q_D(KProgressDialog);
+-    if(myType()==BarType::NormalBar)
+-    {
++    if (myType() == BarType::NormalBar) {
+         d->m_suffix = suffix;
+     }
+ 
+     d->adjustNormalMode();
+ }
+ 
+-void KProgressDialog::setSuffix(const QString &numerator,const QString &denominator)
++void KProgressDialog::setSuffix(const QString &numerator, const QString &denominator)
+ {
+     Q_D(KProgressDialog);
+-    //加一些type的判断
+-    if(myType()==BarType::SpeedBar)
+-    {
++    // 加一些type的判断
++    if (myType() == BarType::SpeedBar) {
+         d->m_numerator = numerator;
+         d->m_denominator = denominator;
+     }
+@@ -174,32 +171,28 @@ void KProgressDialog::setSpeed(const float &speed)
+ {
+     Q_D(KProgressDialog);
+     d->m_speed = QString::number(speed);
+-    if(d->m_type == BarType::SpeedBar)
++    if (d->m_type == BarType::SpeedBar)
+         d->m_pProgressLabel->setText(QString("%1 %2/%3").arg(d->m_speed).arg(d->m_numerator).arg(d->m_denominator));
+ }
+ 
+ void KProgressDialog::setShowDetail(bool flag)
+ {
+     Q_D(KProgressDialog);
+-    if(flag)
+-    {
++    if (flag) {
+         d->m_pSubContentLabel->setVisible(true);
+         d->m_pProgressLabel->setVisible(true);
+         d->m_pPercentLabel->setVisible(true);
+-    }
+-    else
+-    {
++    } else {
+         d->m_pSubContentLabel->setVisible(false);
+         d->m_pProgressLabel->setVisible(false);
+         d->m_pPercentLabel->setVisible(false);
+     }
+ }
+ 
+-
+ int KProgressDialog::minimum() const
+ {
+     Q_D(const KProgressDialog);
+-    if(d->m_pProgressBar)
++    if (d->m_pProgressBar)
+         return d->m_pProgressBar->minimum();
+     else
+         return -1;
+@@ -208,7 +201,7 @@ int KProgressDialog::minimum() const
+ int KProgressDialog::maximum() const
+ {
+     Q_D(const KProgressDialog);
+-    if(d->m_pProgressBar)
++    if (d->m_pProgressBar)
+         return d->m_pProgressBar->maximum();
+     else
+         return -1;
+@@ -217,7 +210,7 @@ int KProgressDialog::maximum() const
+ int KProgressDialog::value() const
+ {
+     Q_D(const KProgressDialog);
+-    if(d->m_pProgressBar)
++    if (d->m_pProgressBar)
+         return d->m_pProgressBar->value();
+     else
+         return -1;
+@@ -226,10 +219,9 @@ int KProgressDialog::value() const
+ QString KProgressDialog::labelText() const
+ {
+     Q_D(const KProgressDialog);
+-    if(d->m_pMainLabel)
++    if (d->m_pMainLabel)
+         return d->m_pMainLabel->text();
+-    else
+-    {
++    else {
+         return QString();
+     }
+ }
+@@ -268,17 +260,15 @@ void KProgressDialog::setBarType(const BarType &type)
+ {
+     Q_D(KProgressDialog);
+     d->m_type = type;
+-    if(type == BarType::ScrollBar)
+-    {
+-        if(d->m_pProgressBar->minimum() != d->m_pProgressBar->maximum() != 0 )
+-        {
++    if (type == BarType::ScrollBar) {
++        if (d->m_pProgressBar->minimum() != d->m_pProgressBar->maximum() != 0) {
+             d->m_maxValue = d->m_pProgressBar->maximum();
+             d->m_minVlaue = d->m_pProgressBar->minimum();
+         }
+     }
+-    if(type == BarType::NormalBar)
++    if (type == BarType::NormalBar)
+         d->m_pProgressLabel->setText(QString("%1%2/%3%4").arg(d->m_pProgressBar->value()).arg(d->m_suffix).arg(maximum()).arg(d->m_suffix));
+-    else if(type == BarType::SpeedBar)
++    else if (type == BarType::SpeedBar)
+         d->m_pProgressLabel->setText(QString("%1 %2/%3").arg(d->m_speed).arg(d->m_numerator).arg(d->m_denominator));
+ 
+     d->adjustNormalMode();
+@@ -287,11 +277,10 @@ void KProgressDialog::setBarType(const BarType &type)
+ void KProgressDialog::addButton(QPushButton *button)
+ {
+     Q_D(KProgressDialog);
+-    if(!d->m_pButtons.contains(button))
+-    {
++    if (!d->m_pButtons.contains(button)) {
+         if (d->m_pButtons.count() >= 3)
+             return;
+-        if(button)
++        if (button)
+             d->m_pButtons.append(button);
+         d->adjustNormalMode();
+     }
+@@ -300,8 +289,7 @@ void KProgressDialog::addButton(QPushButton *button)
+ void KProgressDialog::removeButton(QPushButton *button)
+ {
+     Q_D(KProgressDialog);
+-    if(d->m_pButtons.contains(button))
+-    {
++    if (d->m_pButtons.contains(button)) {
+         d->m_pButtons.removeAll(button);
+     }
+     d->adjustNormalMode();
+@@ -333,63 +321,60 @@ void KProgressDialog::reset()
+ void KProgressDialog::setMaximum(int maximum)
+ {
+     Q_D(KProgressDialog);
+-    if(d->m_pProgressBar)
++    if (d->m_pProgressBar)
+         d->m_pProgressBar->setMaximum(maximum);
+ }
+ 
+ void KProgressDialog::setMinimum(int minimum)
+ {
+     Q_D(KProgressDialog);
+-    if(d->m_pProgressBar)
++    if (d->m_pProgressBar)
+         d->m_pProgressBar->setMinimum(minimum);
+ }
+ 
+ void KProgressDialog::setRange(int minimum, int maximum)
+ {
+     Q_D(KProgressDialog);
+-    if(d->m_pProgressBar)
+-        d->m_pProgressBar->setRange(minimum,maximum);
++    if (d->m_pProgressBar)
++        d->m_pProgressBar->setRange(minimum, maximum);
+ }
+ 
+ void KProgressDialog::setValue(int progress)
+ {
+     Q_D(KProgressDialog);
+-    if(d->m_pProgressBar)
++    if (d->m_pProgressBar)
+         d->m_pProgressBar->setValue(progress);
+-    if(d->m_pPercentLabel)
+-        d->m_pPercentLabel->setText(QString::number(progress*100/maximum())+"%");
+-    if(d->m_pProgressLabel)
+-    {
+-        if(d->m_type != BarType::SpeedBar)
++    if (d->m_pPercentLabel)
++        d->m_pPercentLabel->setText(QString::number(progress * 100 / maximum()) + "%");
++    if (d->m_pProgressLabel) {
++        if (d->m_type != BarType::SpeedBar)
+             d->m_pProgressLabel->setText(QString("%1%2/%3%4").arg(progress).arg(d->m_suffix).arg(maximum()).arg(d->m_suffix));
+-//        else
+-//            d->m_pProgressLabel->setText(QString("%1 %2/%3").arg(d->m_speed).arg(d->m_numerator).arg(d->m_denominator));
++        //        else
++        //            d->m_pProgressLabel->setText(QString("%1 %2/%3").arg(d->m_speed).arg(d->m_numerator).arg(d->m_denominator));
+     }
+ }
+ 
+ void KProgressDialog::setLabelText(const QString &text)
+ {
+     Q_D(KProgressDialog);
+-    if(d->m_pMainLabel)
++    if (d->m_pMainLabel)
+         d->m_pMainLabel->setText(text);
+ }
+ 
+ void KProgressDialog::setCancelButtonText(const QString &text)
+ {
+     Q_D(KProgressDialog);
+-    if(d->m_pCanelButton)
++    if (d->m_pCanelButton)
+         d->m_pCanelButton->setText(text);
+ }
+ 
+ void KProgressDialog::setSubContent(const QString &text)
+ {
+     Q_D(KProgressDialog);
+-    if(d->m_pSubContentLabel)
+-    {
++    if (d->m_pSubContentLabel) {
+         d->m_pSubContentLabel->setText(text);
+         setShowDetail(true);
+     }
+-
+ }
+ 
+ void KProgressDialog::changeTheme()
+@@ -399,14 +384,14 @@ void KProgressDialog::changeTheme()
+     QFont font;
+     font.setPixelSize(ThemeController::systemFontSize() * 1.7);
+     d->m_pMainLabel->setFont(font);
+-    font.setPixelSize(ThemeController::systemFontSize()  * 1.2);
++    font.setPixelSize(ThemeController::systemFontSize() * 1.2);
+     d->m_pPercentLabel->setFont(font);
+     d->m_pSubContentLabel->setFont(font);
+     d->m_pProgressLabel->setFont(font);
+ }
+ 
+ KProgressDialogPrivate::KProgressDialogPrivate(KProgressDialog *parent)
+-    :q_ptr(parent)
++    : q_ptr(parent)
+ {
+     setParent(parent);
+ }
+@@ -415,214 +400,194 @@ void KProgressDialogPrivate::adjustNormalMode()
+ {
+     Q_Q(KProgressDialog);
+ 
+-        QLayoutItem *child;
+-        while ((child = m_pMainLayout->takeAt(0)) != 0)
+-        {
+-            //删除Stretch(弹簧)等布局
+-            if (child->spacerItem())
+-            {
+-                m_pMainLayout->removeItem(child);
+-                continue;
+-            }
+-            //删除layout
+-            else if(child->layout())
+-            {
+-                QLayoutItem *item = child->layout()->takeAt(0);
+-                while(item != 0)
+-                {
+-                    child->layout()->removeItem(item);
+-                    delete item;
+-                    item = child->layout()->takeAt(0);
+-                }
+-            }
+-            else  //删除布局
+-            {
+-                m_pMainLayout->removeWidget(child->widget());
+-                child->widget()->setParent(nullptr);
+-            }
+-
+-            delete child;
+-            child =nullptr;
+-        }
+-
+-    q->mainWidget()->setLayout(m_pMainLayout);
+-    switch (m_type)
+-        {
+-        case BarType::NothingBar:
+-        {
+-            m_pProgressBar->setTextVisible(false);
+-
+-            m_pMainLayout->addStretch();
+-            m_pMainLayout->addSpacing(24);
+-            m_pMainLayout->addWidget(m_pMainLabel);
+-            m_pMainLayout->addSpacing(8);
+-
+-            m_pProgressBar->setMaximum(m_maxValue);
+-            m_pProgressBar->setMinimum(m_minVlaue);
+-            QHBoxLayout* hLayout = new QHBoxLayout;
+-            hLayout->setSpacing(0);
+-            hLayout->addWidget(m_pProgressBar);
+-            hLayout->addSpacing(8);
+-            hLayout->addWidget(m_pPercentLabel);
+-            m_pMainLayout->addLayout(hLayout);
+-            m_pProgressBar->show();
+-            m_pSubContentLabel->hide();
+-            m_pPercentLabel->show();
+-            m_pProgressLabel->hide();
+-            m_pCanelButton->hide();
+-
+-            q->iconBar()->setFixedHeight(0);
+-            q->windowButtonBar()->setVisible(false);
+-            break;
++    QLayoutItem *child;
++    while ((child = m_pMainLayout->takeAt(0)) != 0) {
++        // 删除Stretch(弹簧)等布局
++        if (child->spacerItem()) {
++            m_pMainLayout->removeItem(child);
++            continue;
+         }
+-        case BarType::NormalBar:
++        // 删除layout
++        else if (child->layout()) {
++            QLayoutItem *item = child->layout()->takeAt(0);
++            while (item != 0) {
++                child->layout()->removeItem(item);
++                delete item;
++                item = child->layout()->takeAt(0);
++            }
++        } else // 删除布局
+         {
+-            q->iconBar()->setFixedHeight(Parmscontroller::parm(Parmscontroller::Parm::PM_IconbarHeight));
+-            q->iconBar()->show();
+-            m_pProgressBar->setTextVisible(true);
+-            m_pMainLayout->addStretch();
+-            m_pMainLayout->addSpacing(30);
+-            m_pMainLayout->addWidget(m_pMainLabel);
+-            m_pMainLayout->addSpacing(10);
+-            m_pMainLayout->addWidget(m_pProgressBar);
+-            m_pProgressBar->setMaximum(m_maxValue);
+-            m_pProgressBar->setMinimum(m_minVlaue);
+-
+-            QHBoxLayout* hLayout = new QHBoxLayout;
+-            hLayout->setSpacing(0);
+-            hLayout->addWidget(m_pSubContentLabel);
+-            hLayout->addStretch();
+-            hLayout->addWidget(m_pPercentLabel);
+-            hLayout->addSpacing(15);
+-            hLayout->addWidget(m_pProgressLabel);
+-            m_pMainLayout->addLayout(hLayout);
+-
+-            hLayout = new QHBoxLayout;
+-            hLayout->addStretch();
+-            hLayout->addWidget(m_pCanelButton);
+-
+-            m_pMainLayout->addSpacing(30);
+-            m_pMainLayout->addLayout(hLayout);
+-
+-            m_pProgressBar->show();
+-            m_pSubContentLabel->show();
+-            m_pPercentLabel->show();
+-            m_pProgressLabel->show();
+-            m_pCanelButton->show();
+-            q->windowButtonBar()->setVisible(true);
+-            break;
++            m_pMainLayout->removeWidget(child->widget());
++            child->widget()->setParent(nullptr);
+         }
+-        case BarType::ScrollBar:
+-        {
+ 
+-            m_pProgressBar->setTextVisible(false);
+-            m_pProgressBar->setMaximum(0);
+-            m_pProgressBar->setMinimum(0);
+-            m_pMainLayout->addStretch();
+-            m_pMainLayout->addSpacing(24);
+-            m_pMainLayout->addWidget(m_pMainLabel);
+-            m_pMainLayout->addSpacing(8);
+-            m_pMainLayout->addWidget(m_pProgressBar);
+-            q->iconBar()->setFixedHeight(0);
+-
+-            m_pSubContentLabel->hide();
+-            m_pPercentLabel->hide();
+-            m_pProgressLabel->hide();
+-            m_pCanelButton->hide();
+-
+-            q->windowButtonBar()->setVisible(false);
+-            break;
+-        }
+-        case BarType::SpeedBar:
+-        {
++        delete child;
++        child = nullptr;
++    }
+ 
+-            q->iconBar()->setFixedHeight(Parmscontroller::parm(Parmscontroller::Parm::PM_IconbarHeight));
+-            q->iconBar()->hide();
+-            m_pProgressBar->setTextVisible(false);
+-            m_pMainLayout->addStretch();
+-            m_pMainLayout->addSpacing(4);
+-            m_pMainLayout->addWidget(m_pMainLabel);
+-            m_pMainLayout->addSpacing(8);
+-            m_pProgressBar->setMaximum(m_maxValue);
+-            m_pProgressBar->setMinimum(m_minVlaue);
+-
+-            QHBoxLayout* hLayout = new QHBoxLayout;
+-            hLayout->setSpacing(0);
+-            hLayout->addWidget(m_pProgressBar);
+-            hLayout->addSpacing(8);
+-            hLayout->addWidget(m_pPercentLabel);
+-            m_pMainLayout->addLayout(hLayout);
+-
+-            hLayout = new QHBoxLayout;
+-            hLayout->setSpacing(0);
+-            hLayout->addWidget(m_pSubContentLabel);
+-            hLayout->addStretch();
+-            hLayout->addWidget(m_pProgressLabel);
+-            hLayout->addSpacing(36);
+-            m_pMainLayout->addSpacing(4);
+-            m_pMainLayout->addLayout(hLayout);
+-
+-            hLayout = new QHBoxLayout;
+-            if(!m_pButtons.isEmpty())
+-            {
+-                if(m_pButtons.count() == 1)
+-                {
+-                    hLayout->addStretch();
+-                    hLayout->addWidget((m_pButtons.first()));
+-                }
+-                else if(m_pButtons.count() == 2)
+-                {
+-                    hLayout->addStretch();
+-                    hLayout->addWidget(m_pButtons[1]);
+-                    hLayout->addSpacing(8);
+-                    hLayout->addWidget(m_pButtons[0]);
+-                }
+-                else
+-                {
+-                    hLayout->addWidget(m_pButtons[2]);
+-                    hLayout->addStretch();
+-                    hLayout->addWidget(m_pButtons[1]);
+-                    hLayout->addSpacing(8);
+-                    hLayout->addWidget(m_pButtons[0]);
+-                }
++    q->mainWidget()->setLayout(m_pMainLayout);
++    switch (m_type) {
++    case BarType::NothingBar: {
++        m_pProgressBar->setTextVisible(false);
++
++        m_pMainLayout->addStretch();
++        m_pMainLayout->addSpacing(24);
++        m_pMainLayout->addWidget(m_pMainLabel);
++        m_pMainLayout->addSpacing(8);
++
++        m_pProgressBar->setMaximum(m_maxValue);
++        m_pProgressBar->setMinimum(m_minVlaue);
++        QHBoxLayout *hLayout = new QHBoxLayout;
++        hLayout->setSpacing(0);
++        hLayout->addWidget(m_pProgressBar);
++        hLayout->addSpacing(8);
++        hLayout->addWidget(m_pPercentLabel);
++        m_pMainLayout->addLayout(hLayout);
++        m_pProgressBar->show();
++        m_pSubContentLabel->hide();
++        m_pPercentLabel->show();
++        m_pProgressLabel->hide();
++        m_pCanelButton->hide();
++
++        q->iconBar()->setFixedHeight(0);
++        q->windowButtonBar()->setVisible(false);
++        break;
++    }
++    case BarType::NormalBar: {
++        q->iconBar()->setFixedHeight(Parmscontroller::parm(Parmscontroller::Parm::PM_IconbarHeight));
++        q->iconBar()->show();
++        m_pProgressBar->setTextVisible(true);
++        m_pMainLayout->addStretch();
++        m_pMainLayout->addSpacing(30);
++        m_pMainLayout->addWidget(m_pMainLabel);
++        m_pMainLayout->addSpacing(10);
++        m_pMainLayout->addWidget(m_pProgressBar);
++        m_pProgressBar->setMaximum(m_maxValue);
++        m_pProgressBar->setMinimum(m_minVlaue);
++
++        QHBoxLayout *hLayout = new QHBoxLayout;
++        hLayout->setSpacing(0);
++        hLayout->addWidget(m_pSubContentLabel);
++        hLayout->addStretch();
++        hLayout->addWidget(m_pPercentLabel);
++        hLayout->addSpacing(15);
++        hLayout->addWidget(m_pProgressLabel);
++        m_pMainLayout->addLayout(hLayout);
++
++        hLayout = new QHBoxLayout;
++        hLayout->addStretch();
++        hLayout->addWidget(m_pCanelButton);
++
++        m_pMainLayout->addSpacing(30);
++        m_pMainLayout->addLayout(hLayout);
++
++        m_pProgressBar->show();
++        m_pSubContentLabel->show();
++        m_pPercentLabel->show();
++        m_pProgressLabel->show();
++        m_pCanelButton->show();
++        q->windowButtonBar()->setVisible(true);
++        break;
++    }
++    case BarType::ScrollBar: {
++
++        m_pProgressBar->setTextVisible(false);
++        m_pProgressBar->setMaximum(0);
++        m_pProgressBar->setMinimum(0);
++        m_pMainLayout->addStretch();
++        m_pMainLayout->addSpacing(24);
++        m_pMainLayout->addWidget(m_pMainLabel);
++        m_pMainLayout->addSpacing(8);
++        m_pMainLayout->addWidget(m_pProgressBar);
++        q->iconBar()->setFixedHeight(0);
++
++        m_pSubContentLabel->hide();
++        m_pPercentLabel->hide();
++        m_pProgressLabel->hide();
++        m_pCanelButton->hide();
++
++        q->windowButtonBar()->setVisible(false);
++        break;
++    }
++    case BarType::SpeedBar: {
++
++        q->iconBar()->setFixedHeight(Parmscontroller::parm(Parmscontroller::Parm::PM_IconbarHeight));
++        q->iconBar()->hide();
++        m_pProgressBar->setTextVisible(false);
++        m_pMainLayout->addStretch();
++        m_pMainLayout->addSpacing(4);
++        m_pMainLayout->addWidget(m_pMainLabel);
++        m_pMainLayout->addSpacing(8);
++        m_pProgressBar->setMaximum(m_maxValue);
++        m_pProgressBar->setMinimum(m_minVlaue);
++
++        QHBoxLayout *hLayout = new QHBoxLayout;
++        hLayout->setSpacing(0);
++        hLayout->addWidget(m_pProgressBar);
++        hLayout->addSpacing(8);
++        hLayout->addWidget(m_pPercentLabel);
++        m_pMainLayout->addLayout(hLayout);
++
++        hLayout = new QHBoxLayout;
++        hLayout->setSpacing(0);
++        hLayout->addWidget(m_pSubContentLabel);
++        hLayout->addStretch();
++        hLayout->addWidget(m_pProgressLabel);
++        hLayout->addSpacing(36);
++        m_pMainLayout->addSpacing(4);
++        m_pMainLayout->addLayout(hLayout);
++
++        hLayout = new QHBoxLayout;
++        if (!m_pButtons.isEmpty()) {
++            if (m_pButtons.count() == 1) {
++                hLayout->addStretch();
++                hLayout->addWidget((m_pButtons.first()));
++            } else if (m_pButtons.count() == 2) {
++                hLayout->addStretch();
++                hLayout->addWidget(m_pButtons[1]);
++                hLayout->addSpacing(8);
++                hLayout->addWidget(m_pButtons[0]);
++            } else {
++                hLayout->addWidget(m_pButtons[2]);
++                hLayout->addStretch();
++                hLayout->addWidget(m_pButtons[1]);
++                hLayout->addSpacing(8);
++                hLayout->addWidget(m_pButtons[0]);
+             }
++        }
+ 
+-            m_pMainLayout->addSpacing(32);
+-            m_pMainLayout->addLayout(hLayout);
+-            m_pMainLayout->addStretch();
++        m_pMainLayout->addSpacing(32);
++        m_pMainLayout->addLayout(hLayout);
++        m_pMainLayout->addStretch();
+ 
+-            m_pProgressBar->show();
+-            m_pSubContentLabel->show();
+-            m_pPercentLabel->show();
+-            m_pProgressLabel->show();
++        m_pProgressBar->show();
++        m_pSubContentLabel->show();
++        m_pPercentLabel->show();
++        m_pProgressLabel->show();
+ 
+-            m_pCanelButton->hide();
+-         
+-            q->windowButtonBar()->setVisible(true);
+-            break;
+-        }
+-        default:
+-            break;
+-        }
++        m_pCanelButton->hide();
+ 
++        q->windowButtonBar()->setVisible(true);
++        break;
++    }
++    default:
++        break;
++    }
+ }
+ 
+ void KProgressDialogPrivate::infoReset()
+ {
+     Q_Q(KProgressDialog);
+ 
+-    if(m_pPercentLabel)
++    if (m_pPercentLabel)
+         m_pPercentLabel->setText(+"0%");
+-    if(m_pProgressLabel)
+-    {
+-        if(m_type != BarType::SpeedBar)
++    if (m_pProgressLabel) {
++        if (m_type != BarType::SpeedBar)
+             m_pProgressLabel->setText(QString("%1%2/%3%4").arg(0).arg(m_suffix).arg(q->maximum()).arg(m_suffix));
+         else
+             m_pProgressLabel->setText(QString("%1 %2/%3").arg(0).arg(m_numerator).arg(m_denominator));
+     }
+ }
+-
+-
+ }
+ #include "kprogressdialog.moc"
+ #include "moc_kprogressdialog.cpp"
+diff --git a/kysdk-qtwidgets/src/kprogressdialog.h b/kysdk-qtwidgets/src/kprogressdialog.h
+index 2511948..c5372d8 100644
+--- a/kysdk-qtwidgets/src/kprogressdialog.h
++++ b/kysdk-qtwidgets/src/kprogressdialog.h
+@@ -23,30 +23,28 @@
+ #ifndef KPROGRESSDIALOG_H
+ #define KPROGRESSDIALOG_H
+ 
+-#include <QLabel>
+-#include <QProgressBar>
+-#include <QBoxLayout>
+-#include <QDialog>
+-#include "kwidget.h"
+ #include "gui_g.h"
+-#include "themeController.h"
+-#include "kwindowbuttonbar.h"
+-#include "kiconbar.h"
+ #include "kdialog.h"
+-
++#include "kiconbar.h"
++#include "kwidget.h"
++#include "kwindowbuttonbar.h"
++#include "themeController.h"
++#include <QBoxLayout>
++#include <QDialog>
++#include <QLabel>
++#include <QProgressBar>
+ 
+ namespace kdk
+ {
+ 
+ /** @defgroup DialogBoxModule
+-  * @{
+-  */
++ * @{
++ */
+ 
+ /**
+  * @brief 支持三种样式
+  */
+-enum BarType
+-{
++enum BarType {
+     ScrollBar,
+     NothingBar,
+     NormalBar,
+@@ -58,14 +56,14 @@ class KProgressDialogPrivate;
+ /**
+  * @brief 进度对话框,会实时显示当前进度
+  */
+-class GUI_EXPORT KProgressDialog:public KDialog
++class GUI_EXPORT KProgressDialog : public KDialog
+ {
+     Q_OBJECT
+ 
+ public:
+     explicit KProgressDialog(QWidget *parent = nullptr);
+-    KProgressDialog(const QString &labelText, const QString &cancelButtonText="cancel",
+-                    int minimum=0, int maximum=100, QWidget *parent = nullptr);
++    KProgressDialog(const QString &labelText, const QString &cancelButtonText = "cancel",
++                    int minimum = 0, int maximum = 100, QWidget *parent = nullptr);
+     ~KProgressDialog();
+ 
+     /**
+@@ -90,11 +88,11 @@ public:
+      * @brief 设置detail的后缀
+      * @param suffix
+      */
+-    void setSuffix(const QString& suffix);
++    void setSuffix(const QString &suffix);
+ 
+-    void setSuffix(const QString &numerator,const QString &denominator);
++    void setSuffix(const QString &numerator, const QString &denominator);
+ 
+-    void setSpeed(const float& speed);
++    void setSpeed(const float &speed);
+ 
+     /**
+      * @brief 设置是否显示详细信息
+@@ -154,13 +152,13 @@ public:
+      * @brief 获取进度条
+      * @return
+      */
+-    QProgressBar* progressBar();
++    QProgressBar *progressBar();
+ 
+-    void setBarType(const BarType& type);
++    void setBarType(const BarType &type);
+ 
+-    void addButton(QPushButton* button);
++    void addButton(QPushButton *button);
+ 
+-    void removeButton(QPushButton* button);
++    void removeButton(QPushButton *button);
+ 
+     BarType myType();
+ 
+@@ -219,7 +217,7 @@ public Q_SLOTS:
+      * @brief 设置次级内容
+      * @param text
+      */
+-    void setSubContent(const QString&text);
++    void setSubContent(const QString &text);
+ 
+ protected:
+     void changeTheme();
+@@ -230,8 +228,8 @@ private:
+ };
+ }
+ /**
+-  * @example testprogressdialog/widget.h
+-  * @example testprogressdialog/widget.cpp
+-  * @}
+-  */
++ * @example testprogressdialog/widget.h
++ * @example testprogressdialog/widget.cpp
++ * @}
++ */
+ #endif // KPROGRESSDIALOG_H
+diff --git a/kysdk-qtwidgets/src/kprogresslabel.cpp b/kysdk-qtwidgets/src/kprogresslabel.cpp
+index 8908152..e93cbab 100644
+--- a/kysdk-qtwidgets/src/kprogresslabel.cpp
++++ b/kysdk-qtwidgets/src/kprogresslabel.cpp
+@@ -22,12 +22,13 @@
+ 
+ #include "kprogresslabel.h"
+ #include "themeController.h"
++#include <QDebug>
+ #include <QGSettings/QGSettings>
+-#include <QVariant>
+ #include <QIcon>
+-#include <QDebug>
++#include <QVariant>
+ 
+-namespace kdk {
++namespace kdk
++{
+ 
+ class Q_DECL_HIDDEN LineLabel : public QLabel
+ {
+@@ -68,7 +69,7 @@ private:
+     int m_radius;
+ };
+ 
+-class Q_DECL_HIDDEN TextLabel : public QLabel ,public ThemeController
++class Q_DECL_HIDDEN TextLabel : public QLabel, public ThemeController
+ {
+     Q_OBJECT
+ public:
+@@ -77,6 +78,7 @@ public:
+ 
+     void setTextHighlight(bool flag);
+     void followPalette(bool flag);
++
+ protected:
+     virtual void paintEvent(QPaintEvent *);
+ 
+@@ -84,12 +86,12 @@ private:
+     bool isPalette;
+ };
+ 
+-class Q_DECL_HIDDEN KProgressLabelPrivate : public QObject , public ThemeController
++class Q_DECL_HIDDEN KProgressLabelPrivate : public QObject, public ThemeController
+ {
+     Q_OBJECT
+     Q_DECLARE_PUBLIC(KProgressLabel)
+ public:
+-    KProgressLabelPrivate(KProgressLabel * parent);
++    KProgressLabelPrivate(KProgressLabel *parent);
+ 
+ protected:
+     void changeTheme();
+@@ -109,22 +111,22 @@ private:
+ };
+ 
+ KProgressLabel::KProgressLabel(QWidget *parent)
+-    : QWidget(parent),
+-      d_ptr(new KProgressLabelPrivate(this))
++    : QWidget(parent)
++    , d_ptr(new KProgressLabelPrivate(this))
+ {
+     Q_D(KProgressLabel);
+     d->mainLayout = new QVBoxLayout(this);
+     QWidget *wid1 = new QWidget();
+     QWidget *wid2 = new QWidget();
+     d->circleLayout = new QHBoxLayout(wid1);
+-    d->circleLayout->setContentsMargins(0,0,0,0);
++    d->circleLayout->setContentsMargins(0, 0, 0, 0);
+     d->textLayout = new QHBoxLayout(wid2);
+-    d->textLayout->setContentsMargins(8,0,8,0);
++    d->textLayout->setContentsMargins(8, 0, 8, 0);
+     d->mainLayout->setSpacing(0);
+     d->mainLayout->addWidget(wid1);
+     d->mainLayout->addSpacing(8);
+     d->mainLayout->addWidget(wid2);
+-    setSizePolicy(QSizePolicy::Preferred,QSizePolicy::Fixed);
++    setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
+ }
+ 
+ KProgressLabel::~KProgressLabel()
+@@ -134,33 +136,28 @@ KProgressLabel::~KProgressLabel()
+ void KProgressLabel::setStringList(QStringList list1, QStringList list2)
+ {
+     Q_D(KProgressLabel);
+-    //若布局不为空,则清空布局
+-    if (!d->circleLayout->isEmpty() || !d->textLayout->isEmpty())
+-    {
+-        //先清除list
++    // 若布局不为空,则清空布局
++    if (!d->circleLayout->isEmpty() || !d->textLayout->isEmpty()) {
++        // 先清除list
+         d->circleList.clear();
+         d->lineList.clear();
+         d->textList.clear();
+ 
+         QLayoutItem *child;
+-        while ((child = d->circleLayout->takeAt(0)) != 0)
+-        {
+-            //删除Stretch(弹簧)等布局
+-            if (child->spacerItem())
+-            {
++        while ((child = d->circleLayout->takeAt(0)) != 0) {
++            // 删除Stretch(弹簧)等布局
++            if (child->spacerItem()) {
+                 d->circleLayout->removeItem(child);
+                 continue;
+             }
+-            //删除布局
++            // 删除布局
+             d->circleLayout->removeWidget(child->widget());
+             child->widget()->setParent(nullptr);
+             delete child;
+             child = nullptr;
+         }
+-        while ((child = d->textLayout->takeAt(0)) != 0)
+-        {
+-            if (child->spacerItem())
+-            {
++        while ((child = d->textLayout->takeAt(0)) != 0) {
++            if (child->spacerItem()) {
+                 d->textLayout->removeItem(child);
+                 continue;
+             }
+@@ -172,9 +169,8 @@ void KProgressLabel::setStringList(QStringList list1, QStringList list2)
+         d->circleLayout->addSpacing(80);
+         d->textLayout->addSpacing(11);
+     }
+-    for (int i = 0; i < list1.count(); i++)
+-    {
+-        //第一行圆形label
++    for (int i = 0; i < list1.count(); i++) {
++        // 第一行圆形label
+         QString str;
+         if (i < list1.count())
+             str = list1.at(i);
+@@ -183,18 +179,16 @@ void KProgressLabel::setStringList(QStringList list1, QStringList list2)
+         d->circleList.append(circlelabel);
+         d->circleLayout->addWidget(circlelabel);
+ 
+-        if (i < list1.count() - 1)
+-        {
+-            //第一行线条label
++        if (i < list1.count() - 1) {
++            // 第一行线条label
+             LineLabel *lineLabel;
+             lineLabel = new LineLabel(this);
+             d->lineList.append(lineLabel);
+             d->circleLayout->addWidget(lineLabel);
+         }
+     }
+-    //第二行文本label
+-    for (int i = 0; i < list2.count(); i++)
+-    {
++    // 第二行文本label
++    for (int i = 0; i < list2.count(); i++) {
+         TextLabel *textLabel = new TextLabel(list2.at(i), this);
+         textLabel->setWordWrap(true);
+         textLabel->setAlignment(Qt::AlignCenter);
+@@ -209,32 +203,27 @@ void KProgressLabel::setStringList(QStringList list1, QStringList list2)
+ void KProgressLabel::setStringList(QStringList list1)
+ {
+     Q_D(KProgressLabel);
+-    if (!d->circleLayout->isEmpty() || !d->textLayout->isEmpty())
+-    {
+-        //先清除list
++    if (!d->circleLayout->isEmpty() || !d->textLayout->isEmpty()) {
++        // 先清除list
+         d->circleList.clear();
+         d->lineList.clear();
+         d->textList.clear();
+ 
+         QLayoutItem *child;
+-        while ((child = d->circleLayout->takeAt(0)) != 0)
+-        {
+-            //删除Stretch(弹簧)等布局
+-            if (child->spacerItem())
+-            {
++        while ((child = d->circleLayout->takeAt(0)) != 0) {
++            // 删除Stretch(弹簧)等布局
++            if (child->spacerItem()) {
+                 d->circleLayout->removeItem(child);
+                 continue;
+             }
+-            //删除布局
++            // 删除布局
+             d->circleLayout->removeWidget(child->widget());
+             child->widget()->setParent(nullptr);
+             delete child;
+             child = nullptr;
+         }
+-        while ((child = d->textLayout->takeAt(0)) != 0)
+-        {
+-            if (child->spacerItem())
+-            {
++        while ((child = d->textLayout->takeAt(0)) != 0) {
++            if (child->spacerItem()) {
+                 d->textLayout->removeItem(child);
+                 continue;
+             }
+@@ -244,29 +233,26 @@ void KProgressLabel::setStringList(QStringList list1)
+             child = nullptr;
+         }
+         d->circleLayout->addSpacing(80);
+-//        d->textLayout->addSpacing(11);
++        //        d->textLayout->addSpacing(11);
+     }
+-    for (int i = 0; i < list1.count(); i++)
+-    {
+-        //第一行圆形label
++    for (int i = 0; i < list1.count(); i++) {
++        // 第一行圆形label
+         QString str;
+         CircleLable *circlelabel = new CircleLable(str, this);
+         circlelabel->setFixedSize(d->m_circleSize);
+         d->circleList.append(circlelabel);
+         d->circleLayout->addWidget(circlelabel);
+ 
+-        if (i < list1.count() - 1)
+-        {
+-            //第一行线条label
++        if (i < list1.count() - 1) {
++            // 第一行线条label
+             LineLabel *lineLabel;
+             lineLabel = new LineLabel(this);
+             d->lineList.append(lineLabel);
+             d->circleLayout->addWidget(lineLabel);
+         }
+     }
+-    //第二行文本label
+-    for (int i = 0; i < list1.count(); i++)
+-    {
++    // 第二行文本label
++    for (int i = 0; i < list1.count(); i++) {
+         TextLabel *textLabel = new TextLabel(list1.at(i), this);
+         textLabel->setWordWrap(true);
+         textLabel->setAlignment(Qt::AlignCenter);
+@@ -276,37 +262,31 @@ void KProgressLabel::setStringList(QStringList list1)
+         if (i < list1.count() - 1)
+             d->textLayout->addStretch();
+     }
+-
+ }
+ 
+ void KProgressLabel::setCurrentIndex(int index)
+ {
+     Q_D(KProgressLabel);
+-    if(index < -1)
+-        return ;
+-    if(index > d->circleList.count() - 1)
+-        return ;
+-    for (int i = 0; i <= index; i++)
+-    {
++    if (index < -1)
++        return;
++    if (index > d->circleList.count() - 1)
++        return;
++    for (int i = 0; i <= index; i++) {
+         if (i < index)
+             d->circleList.at(i)->setBackgroundHighlight(true);
+         if (i < d->lineList.count())
+             d->lineList.at(i)->setBackgroundHighlight(true);
+         if (i < index)
+             d->textList.at(i)->setTextHighlight(false);
+-        if (i == index)
+-        {
++        if (i == index) {
+             d->circleList.at(i)->setBackgroundHighlight(false);
+             d->circleList.at(i)->setSucceed(true);
+             d->textList.at(i)->setTextHighlight(true);
+         }
+     }
+-    if (d->m_count > index)
+-    {
+-        for (int j = index + 1; j < d->circleList.count(); j++)
+-        {
+-            if (j < d->circleList.count())
+-            {
++    if (d->m_count > index) {
++        for (int j = index + 1; j < d->circleList.count(); j++) {
++            if (j < d->circleList.count()) {
+                 d->circleList.at(j)->setSucceed(false);
+                 d->circleList.at(j)->setBackgroundHighlight(false);
+             }
+@@ -329,17 +309,16 @@ int KProgressLabel::currentIndex()
+ void KProgressLabel::setCircleSize(QSize size)
+ {
+     Q_D(KProgressLabel);
+-    for (int count = 0; count < d->circleList.count(); count++)
+-    {
++    for (int count = 0; count < d->circleList.count(); count++) {
+         d->m_circleSize = size;
+         d->circleList.at(count)->setFixedSize(size);
+-        d->textLayout->setContentsMargins(size.width()/2 - 6,0,size.width()/2 - 6,0);
++        d->textLayout->setContentsMargins(size.width() / 2 - 6, 0, size.width() / 2 - 6, 0);
+     }
+ }
+ 
+ LineLabel::LineLabel(QWidget *parent)
+-    :QLabel(parent),
+-    colorFlag(false)
++    : QLabel(parent)
++    , colorFlag(false)
+ {
+     setMaximumHeight(30);
+     setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
+@@ -360,12 +339,9 @@ void LineLabel::paintEvent(QPaintEvent *event)
+     QPainter painter(this);
+     painter.setRenderHint(QPainter::Antialiasing);
+     painter.save();
+-    if (!colorFlag)
+-    {
++    if (!colorFlag) {
+         m_backgroundColor = ThemeController::getPaletteColorFromDT("midlight");
+-    }
+-    else
+-    {
++    } else {
+         m_backgroundColor = ThemeController::getPaletteColorFromDT("highlight");
+     }
+     QPen pen = painter.pen();
+@@ -380,12 +356,12 @@ void LineLabel::paintEvent(QPaintEvent *event)
+ }
+ 
+ CircleLable::CircleLable(const QString &text, QWidget *parent)
+-    : QLabel(parent),
+-      m_text(text),
+-      m_radius(24),
+-      colorFlag(false),
+-      isSucceed(false),
+-      m_textColor(Qt::white)
++    : QLabel(parent)
++    , m_text(text)
++    , m_radius(24)
++    , colorFlag(false)
++    , isSucceed(false)
++    , m_textColor(Qt::white)
+ {
+     setFixedSize(QSize(m_radius, m_radius));
+ }
+@@ -415,16 +391,13 @@ void CircleLable::paintEvent(QPaintEvent *event)
+     QPainter painter(this);
+     painter.setRenderHint(QPainter::Antialiasing); // 反锯齿;
+     // 深浅主题切换
+-    if (!colorFlag && !isSucceed)
+-    {
+-//        m_backgroundColor = palette().midlight().color();
++    if (!colorFlag && !isSucceed) {
++        //        m_backgroundColor = palette().midlight().color();
+         m_backgroundColor = ThemeController::getPaletteColorFromDT("midlight");
+-        m_textColor= QColor(255,255,255);
++        m_textColor = QColor(255, 255, 255);
+         painter.setBrush(QBrush(m_backgroundColor));
+-    }
+-    else if(isSucceed || colorFlag)
+-    {
+-//        painter.setBrush(QBrush(this->palette().highlight().color()));
++    } else if (isSucceed || colorFlag) {
++        //        painter.setBrush(QBrush(this->palette().highlight().color()));
+         painter.setBrush(ThemeController::getPaletteColorFromDT("highlight"));
+     }
+ 
+@@ -433,14 +406,12 @@ void CircleLable::paintEvent(QPaintEvent *event)
+     painter.drawRoundedRect(rect, rect.width() / 2, rect.width() / 2);
+ 
+     painter.setPen(m_textColor);
+-    if(colorFlag)
+-    {
+-        QPixmap pixmap = QIcon::fromTheme("dialog-apply").pixmap(16,16);
++    if (colorFlag) {
++        QPixmap pixmap = QIcon::fromTheme("dialog-apply").pixmap(16, 16);
+         pixmap = ThemeController::drawSymbolicColoredPixmap(pixmap);
+-        QRect pixRect((rect.width()-16)/2,(rect.height()-16)/2,16,16);
+-        painter.drawPixmap(pixRect,pixmap);
+-    }
+-    else
++        QRect pixRect((rect.width() - 16) / 2, (rect.height() - 16) / 2, 16, 16);
++        painter.drawPixmap(pixRect, pixmap);
++    } else
+         painter.drawText(rect, Qt::AlignCenter, m_text);
+ 
+     QLabel::paintEvent(event);
+@@ -460,16 +431,13 @@ TextLabel::~TextLabel()
+ void TextLabel::setTextHighlight(bool flag)
+ {
+     isPalette = flag;
+-    if (flag)
+-    {
++    if (flag) {
+         QPalette palette = this->palette();
+-//        palette.setColor(QPalette::WindowText, palette.highlight().color());
+-        palette.setColor(QPalette::WindowText,ThemeController::getPaletteColorFromDT("highlight"));
++        //        palette.setColor(QPalette::WindowText, palette.highlight().color());
++        palette.setColor(QPalette::WindowText, ThemeController::getPaletteColorFromDT("highlight"));
+         this->setPalette(palette);
+-    }
+-    else
+-    {
+-        QPalette palette ;
++    } else {
++        QPalette palette;
+         this->setPalette(palette);
+     }
+ }
+@@ -481,32 +449,29 @@ void TextLabel::followPalette(bool flag)
+ 
+ void TextLabel::paintEvent(QPaintEvent *e)
+ {
+-    if(!isPalette)
+-    {
++    if (!isPalette) {
+         QPalette palette = this->palette();
+-//        QColor textColor = this->palette().brightText().color();
++        //        QColor textColor = this->palette().brightText().color();
+         QColor textColor = ThemeController::getPaletteColorFromDT("brighttext");
+         textColor.setAlphaF(0.35);
+-        palette.setColor(QPalette::WindowText,textColor);
++        palette.setColor(QPalette::WindowText, textColor);
+         this->setPalette(palette);
+-    }
+-    else
+-    {
++    } else {
+         QPalette palette = this->palette();
+-//        palette.setColor(QPalette::WindowText, palette.highlight().color());
+-        palette.setColor(QPalette::WindowText,ThemeController::getPaletteColorFromDT("highlight"));
++        //        palette.setColor(QPalette::WindowText, palette.highlight().color());
++        palette.setColor(QPalette::WindowText, ThemeController::getPaletteColorFromDT("highlight"));
+         this->setPalette(palette);
+     }
+     QLabel::paintEvent(e);
+ }
+ 
+ KProgressLabelPrivate::KProgressLabelPrivate(KProgressLabel *parent)
+-    :q_ptr(parent),
+-    m_count(-1),
+-    m_circleSize(24, 24)
++    : q_ptr(parent)
++    , m_count(-1)
++    , m_circleSize(24, 24)
+ {
+     Q_Q(KProgressLabel);
+-    connect(m_gsetting,&QGSettings::changed,this,[=]{
++    connect(m_gsetting, &QGSettings::changed, this, [=] {
+         changeTheme();
+     });
+ }
+diff --git a/kysdk-qtwidgets/src/kprogresslabel.h b/kysdk-qtwidgets/src/kprogresslabel.h
+index 45c7632..f70e8df 100644
+--- a/kysdk-qtwidgets/src/kprogresslabel.h
++++ b/kysdk-qtwidgets/src/kprogresslabel.h
+@@ -23,15 +23,16 @@
+ #ifndef MYWIDGET_H
+ #define MYWIDGET_H
+ 
+-#include <QWidget>
+-#include <QLabel>
+-#include <QSize>
+ #include <QColor>
++#include <QHBoxLayout>
++#include <QLabel>
+ #include <QPainter>
+ #include <QPalette>
+-#include <QHBoxLayout>
++#include <QSize>
++#include <QWidget>
+ 
+-namespace kdk {
++namespace kdk
++{
+ 
+ /**
+  * @defgroup ProgressModule
+@@ -81,7 +82,7 @@ public:
+ 
+ private:
+     Q_DECLARE_PRIVATE(KProgressLabel)
+-    KProgressLabelPrivate * const d_ptr;
++    KProgressLabelPrivate *const d_ptr;
+ };
+ 
+ }
+diff --git a/kysdk-qtwidgets/src/kpushbutton.cpp b/kysdk-qtwidgets/src/kpushbutton.cpp
+old mode 100755
+new mode 100644
+index 38c73a9..8fbad97
+--- a/kysdk-qtwidgets/src/kpushbutton.cpp
++++ b/kysdk-qtwidgets/src/kpushbutton.cpp
+@@ -22,41 +22,46 @@
+ 
+ #include "kpushbutton.h"
+ #include "themeController.h"
++#include <QApplication>
+ #include <QColor>
+-#include <QPainter>
+-#include <QStyleOptionButton>
+-#include <QPainterPath>
+-#include <QGraphicsDropShadowEffect>
+ #include <QDebug>
++#include <QDesktopWidget>
++#include <QGraphicsDropShadowEffect>
+ #include <QMenu>
++#include <QPainter>
++#include <QPainterPath>
++#include <QStyleOptionButton>
+ #include <QTimer>
+-#include <QApplication>
+-#include <QDesktopWidget>
+ 
+-namespace kdk {
+-static int margin = 5; //左右边距
+-static int spacing = 4; //图标文本间距
++namespace kdk
++{
++static int margin = 5; // 左右边距
++static int spacing = 4; // 图标文本间距
+ 
+-class KPushButtonPrivate:public QObject,public ThemeController
++class KPushButtonPrivate : public QObject, public ThemeController
+ {
+     Q_DECLARE_PUBLIC(KPushButton)
+     Q_OBJECT
+ public:
+-    KPushButtonPrivate(KPushButton *parent):q_ptr(parent)
+-    {setParent(parent);}
++    KPushButtonPrivate(KPushButton *parent)
++        : q_ptr(parent)
++    {
++        setParent(parent);
++    }
+ 
+     void changeTheme();
+ 
+-    void updateColor( QPainter &painter,QStyleOptionButton &option, QColor &backgroundColor, QColor &highlight, QColor &mix, QColor &fontColor,QColor &pixmapColor);
++    void updateColor(QPainter &painter, QStyleOptionButton &option, QColor &backgroundColor, QColor &highlight, QColor &mix, QColor &fontColor, QColor &pixmapColor);
+     void drawBackground(QPainter &painter, QStyleOptionButton &option, QColor &backgroundColor);
+-    void updateArrowDirection(QPixmap &arrowPixmap, QPoint pos,QPoint desktopPos,QPoint globalPos,QIcon::Mode mode,QIcon::State state);
+-    void updatePixmap(QPixmap &arrowPixmap,QPixmap &pixmap, QStyleOptionButton &option , QColor &highlight, QColor &fontColor,QColor &pixmapColor,QIcon::Mode mode,QIcon::State state);
++    void updateArrowDirection(QPixmap &arrowPixmap, QPoint pos, QPoint desktopPos, QPoint globalPos, QIcon::Mode mode, QIcon::State state);
++    void updatePixmap(QPixmap &arrowPixmap, QPixmap &pixmap, QStyleOptionButton &option, QColor &highlight, QColor &fontColor, QColor &pixmapColor, QIcon::Mode mode, QIcon::State state);
++
++    void updateGrayColor(QPainter &painter, QStyleOptionButton &option, QColor &backgroundColor, QColor &pixmapColor);
+ 
+-    void updateGrayColor(QPainter &painter,QStyleOptionButton &option, QColor &backgroundColor, QColor &pixmapColor);
++    void drawContent(QPainter &painter, QStyleOptionButton &option, QColor &fontColor, QRect &arrowRect, QRect &textRect, QRect &iconRect, QFontMetrics fm, QPixmap &pixmap, QPixmap &arrowPixmap, uint tf, QPoint iconPosition, int iconWidth, int iconHeight, int textWidth);
+ 
+-    void drawContent(QPainter &painter,QStyleOptionButton &option,QColor &fontColor,QRect &arrowRect,QRect &textRect,QRect &iconRect,QFontMetrics fm,QPixmap& pixmap,QPixmap &arrowPixmap,uint tf ,QPoint iconPosition,int iconWidth,int iconHeight,int textWidth);
+ private:
+-    KPushButton* q_ptr;
++    KPushButton *q_ptr;
+     int m_radius;
+     int m_bottomLeft;
+     int m_topLeft;
+@@ -76,25 +81,24 @@ private:
+     bool m_isLoading;
+     KPushButton::ArrowDirection m_arrowDirection;
+     KPushButton::ButtonType m_buttonType;
+-    QGraphicsDropShadowEffect* m_pShadowEffect;
++    QGraphicsDropShadowEffect *m_pShadowEffect;
+     QTimer *m_pTimer;
+     QIcon m_icon;
+ };
+ 
+-KPushButton::KPushButton(QWidget *parent):QPushButton(parent),d_ptr(new KPushButtonPrivate(this))
++KPushButton::KPushButton(QWidget *parent)
++    : QPushButton(parent)
++    , d_ptr(new KPushButtonPrivate(this))
+ {
+     Q_D(KPushButton);
+     int radius = ThemeController::getRadiusFromDT("kradius-normal");
+-    if(radius == -1)
+-    {
++    if (radius == -1) {
+         d->m_radius = 6;
+         d->m_bottomLeft = 6;
+         d->m_topLeft = 6;
+         d->m_topRight = 6;
+         d->m_bottomRight = 6;
+-    }
+-    else
+-    {
++    } else {
+         d->m_radius = radius;
+         d->m_bottomLeft = radius;
+         d->m_topLeft = radius;
+@@ -102,27 +106,27 @@ KPushButton::KPushButton(QWidget *parent):QPushButton(parent),d_ptr(new KPushBut
+         d->m_bottomRight = radius;
+     }
+     d->m_flashState = 0;
+-//    d->m_backgroundColor = palette().color(QPalette::Button);
++    //    d->m_backgroundColor = palette().color(QPalette::Button);
+     d->m_backgroundColor = ThemeController::getPaletteColorFromDT("button");
+     d->m_useCustomColor = false;
+     d->m_hasOneParam = true;
+     d->m_buttonType = NormalType;
+     d->m_isTranslucent = false;
+     d->m_isIconHighlight = false;
+-//    d->m_iconColor = palette().color(QPalette::ButtonText);
++    //    d->m_iconColor = palette().color(QPalette::ButtonText);
+     d->m_iconColor = ThemeController::getPaletteColorFromDT("buttontext");
+     d->m_useCustomIconColor = false;
+     d->m_isBackgroundColorHighlight = false;
+     d->m_isTranslucentFlag = false;
+-    d->m_hasArrow =false;
+-    d->m_isLoading=false;
++    d->m_hasArrow = false;
++    d->m_isLoading = false;
+     d->m_arrowDirection = ArrowBottom;
+-    d->m_pShadowEffect= new QGraphicsDropShadowEffect(this);
++    d->m_pShadowEffect = new QGraphicsDropShadowEffect(this);
+     d->m_pTimer = new QTimer(this);
+     d->m_pTimer->setInterval(100);
+-    connect(d->m_gsetting,&QGSettings::changed, d,&KPushButtonPrivate::changeTheme);
+-    connect(d->m_pTimer,&QTimer::timeout,this,[=](){
+-        if(d->m_flashState < 7)
++    connect(d->m_gsetting, &QGSettings::changed, d, &KPushButtonPrivate::changeTheme);
++    connect(d->m_pTimer, &QTimer::timeout, this, [=]() {
++        if (d->m_flashState < 7)
+             d->m_flashState++;
+         else
+             d->m_flashState = 0;
+@@ -132,7 +136,6 @@ KPushButton::KPushButton(QWidget *parent):QPushButton(parent),d_ptr(new KPushBut
+ 
+ KPushButton::~KPushButton()
+ {
+-
+ }
+ 
+ void KPushButton::setBorderRadius(int radius)
+@@ -143,7 +146,7 @@ void KPushButton::setBorderRadius(int radius)
+     update();
+ }
+ 
+-void KPushButton::setBorderRadius(int bottomLeft,int topLeft,int topRight,int bottomRight)
++void KPushButton::setBorderRadius(int bottomLeft, int topLeft, int topRight, int bottomRight)
+ {
+     Q_D(KPushButton);
+     d->m_hasOneParam = false;
+@@ -163,7 +166,7 @@ int KPushButton::borderRadius()
+ void KPushButton::setBackgroundColor(QColor color)
+ {
+     Q_D(KPushButton);
+-    if(d->m_isBackgroundColorHighlight)
++    if (d->m_isBackgroundColorHighlight)
+         d->m_isBackgroundColorHighlight = false;
+     d->m_useCustomColor = true;
+     d->m_backgroundColor = color;
+@@ -179,13 +182,12 @@ QColor KPushButton::backgroundColor()
+ void KPushButton::setButtonType(ButtonType type)
+ {
+     Q_D(KPushButton);
+-    if(type == KPushButton::ShadowType)
+-    {
++    if (type == KPushButton::ShadowType) {
+         d->m_pShadowEffect->setOffset(0, 3);
+-        //阴影颜色
++        // 阴影颜色
+         QColor color(0, 0, 0);
+-        //阴影半径
+-        if(ThemeController::themeMode() == LightTheme)
++        // 阴影半径
++        if (ThemeController::themeMode() == LightTheme)
+             color.setAlphaF(0.25);
+         else
+             color.setAlphaF(0.45);
+@@ -193,7 +195,7 @@ void KPushButton::setButtonType(ButtonType type)
+         d->m_pShadowEffect->setBlurRadius(8);
+         setGraphicsEffect(d->m_pShadowEffect);
+     }
+-    if(type == KPushButton::GrayType)
++    if (type == KPushButton::GrayType)
+         setFocusPolicy(Qt::StrongFocus);
+     else
+         setFocusPolicy(Qt::NoFocus);
+@@ -249,7 +251,7 @@ QColor KPushButton::IconColor()
+ void KPushButton::setBackgroundColorHighlight(bool flag)
+ {
+     Q_D(KPushButton);
+-    if(d->m_useCustomColor)
++    if (d->m_useCustomColor)
+         d->m_useCustomColor = false;
+     d->m_isBackgroundColorHighlight = flag;
+ }
+@@ -267,7 +269,6 @@ void KPushButton::setArrow(bool flag, KPushButton::ArrowDirection arrowDirection
+     d->m_arrowDirection = arrowDirection;
+ }
+ 
+-
+ bool KPushButton::hasArrow() const
+ {
+     Q_D(const KPushButton);
+@@ -277,17 +278,13 @@ bool KPushButton::hasArrow() const
+ void KPushButton::setLoaingStatus(bool flag)
+ {
+     Q_D(KPushButton);
+-    if(!d->m_isLoading)
+-    {
++    if (!d->m_isLoading) {
+         d->m_icon = icon();
+     }
+     d->m_isLoading = flag;
+-    if(flag)
+-    {
++    if (flag) {
+         d->m_pTimer->start();
+-    }
+-    else
+-    {
++    } else {
+         d->m_pTimer->stop();
+         setIcon(d->m_icon);
+     }
+@@ -302,7 +299,7 @@ bool KPushButton::isLoading()
+ bool KPushButton::eventFilter(QObject *watched, QEvent *event)
+ {
+     Q_D(KPushButton);
+-    return QPushButton::eventFilter(watched,event);
++    return QPushButton::eventFilter(watched, event);
+ }
+ 
+ void KPushButton::paintEvent(QPaintEvent *event)
+@@ -318,22 +315,21 @@ void KPushButton::paintEvent(QPaintEvent *event)
+     painter.setRenderHint(QPainter::TextAntialiasing);
+     painter.setRenderHint(QPainter::SmoothPixmapTransform);
+ 
+-//    QColor fontColor = option.palette.color(QPalette::Active,QPalette::BrightText);
+-    QColor fontColor = ThemeController::getPaletteColorFromDT("brighttext",QPalette::Disabled);
+-//    QColor mix = option.palette.brightText().color();
++    //    QColor fontColor = option.palette.color(QPalette::Active,QPalette::BrightText);
++    QColor fontColor = ThemeController::getPaletteColorFromDT("brighttext", QPalette::Disabled);
++    //    QColor mix = option.palette.brightText().color();
+     QColor mix = ThemeController::getPaletteColorFromDT("brighttext");
+-//    QColor highlight = option.palette.highlight().color();
++    //    QColor highlight = option.palette.highlight().color();
+     QColor highlight = ThemeController::getPaletteColorFromDT("highlight");
+     QColor backgroundColor;
+ 
+-    if(ThemeController::widgetTheme() == ClassicTheme )
+-    {
+-        if(painter.pen().width() == 1)
+-            painter.translate(0.5,0.5);
++    if (ThemeController::widgetTheme() == ClassicTheme) {
++        if (painter.pen().width() == 1)
++            painter.translate(0.5, 0.5);
+     }
+ 
+-    d->updateColor(painter,option,backgroundColor,highlight,mix,fontColor,pixmapColor);
+-    d->drawBackground(painter,option,backgroundColor);
++    d->updateColor(painter, option, backgroundColor, highlight, mix, fontColor, pixmapColor);
++    d->drawBackground(painter, option, backgroundColor);
+ 
+     /*绘制图标和文字*/
+     QPen pen;
+@@ -344,7 +340,7 @@ void KPushButton::paintEvent(QPaintEvent *event)
+     QRect ir = option.rect;
+     uint tf = Qt::AlignVCenter;
+     QPixmap pixmap;
+-    QPixmap arrowPixmap ;
++    QPixmap arrowPixmap;
+ 
+     QIcon::Mode mode = option.state & QStyle::State_Enabled ? QIcon::Normal : QIcon::Disabled;
+     if (mode == QIcon::Normal && option.state & QStyle::State_HasFocus)
+@@ -353,25 +349,24 @@ void KPushButton::paintEvent(QPaintEvent *event)
+     if (option.state & QStyle::State_On)
+         state = QIcon::On;
+     QPoint pos;
+-    QPoint desktopPos(QApplication::desktop()->availableGeometry().width(),QApplication::desktop()->availableGeometry().height());
++    QPoint desktopPos(QApplication::desktop()->availableGeometry().width(), QApplication::desktop()->availableGeometry().height());
+     QPoint globalPos;
+ 
+-    d->updateArrowDirection(arrowPixmap,pos,desktopPos,globalPos,mode,state);
+-    d->updatePixmap(arrowPixmap,pixmap,option,highlight,fontColor,pixmapColor,mode,state);
+-
+-    if (!option.icon.isNull())
+-    {
+-//        QPixmap pixmap = option.icon.pixmap(option.iconSize, mode, state);
+-//        QImage image = pixmap.toImage();
+-//        if(mode != QIcon::Disabled){
+-//            if(d->m_isIconHighlight){
+-//                pixmap = ThemeController::drawColoredPixmap(this->icon().pixmap(iconSize()),highlight);
+-//            }else if(d->m_useCustomIconColor){
+-//                pixmap = ThemeController::drawColoredPixmap(this->icon().pixmap(iconSize()),d->m_iconColor);
+-//            }else{
+-//                pixmap = ThemeController::drawColoredPixmap(this->icon().pixmap(iconSize()),fontColor);
+-//            }
+-//        }
++    d->updateArrowDirection(arrowPixmap, pos, desktopPos, globalPos, mode, state);
++    d->updatePixmap(arrowPixmap, pixmap, option, highlight, fontColor, pixmapColor, mode, state);
++
++    if (!option.icon.isNull()) {
++        //        QPixmap pixmap = option.icon.pixmap(option.iconSize, mode, state);
++        //        QImage image = pixmap.toImage();
++        //        if(mode != QIcon::Disabled){
++        //            if(d->m_isIconHighlight){
++        //                pixmap = ThemeController::drawColoredPixmap(this->icon().pixmap(iconSize()),highlight);
++        //            }else if(d->m_useCustomIconColor){
++        //                pixmap = ThemeController::drawColoredPixmap(this->icon().pixmap(iconSize()),d->m_iconColor);
++        //            }else{
++        //                pixmap = ThemeController::drawColoredPixmap(this->icon().pixmap(iconSize()),fontColor);
++        //            }
++        //        }
+         int w = pixmap.width() / pixmap.devicePixelRatio();
+         int h = pixmap.height() / pixmap.devicePixelRatio();
+ 
+@@ -385,17 +380,17 @@ void KPushButton::paintEvent(QPaintEvent *event)
+ 
+         if (option.direction == Qt::RightToLeft)
+             point.rx() += w;
+-//        if(mode == QIcon::Disabled){
+-//            qreal opacity = 0.35;
+-//            QPainter painter(&image);
+-//            painter.setOpacity(opacity);
+-//            painter.setCompositionMode(QPainter::CompositionMode_SourceIn);
+-//            painter.fillRect(image.rect(),fontColor);
+-//            painter.end();
+-//            p.drawPixmap(this->style()->visualPos(option.direction, option.rect, point), QPixmap::fromImage(image));
+-//        }
+-//        else
+-//            p.drawPixmap(this->style()->visualPos(option.direction, option.rect, point), pixmap);
++        //        if(mode == QIcon::Disabled){
++        //            qreal opacity = 0.35;
++        //            QPainter painter(&image);
++        //            painter.setOpacity(opacity);
++        //            painter.setCompositionMode(QPainter::CompositionMode_SourceIn);
++        //            painter.fillRect(image.rect(),fontColor);
++        //            painter.end();
++        //            p.drawPixmap(this->style()->visualPos(option.direction, option.rect, point), QPixmap::fromImage(image));
++        //        }
++        //        else
++        //            p.drawPixmap(this->style()->visualPos(option.direction, option.rect, point), pixmap);
+ 
+         if (option.direction == Qt::RightToLeft)
+             ir.translate(-point.x() - 2, 0);
+@@ -405,75 +400,69 @@ void KPushButton::paintEvent(QPaintEvent *event)
+         // left-align text if there is
+         if (!option.text.isEmpty())
+             tf |= Qt::AlignLeft;
+-    }
+-    else
+-    {
++    } else {
+         tf |= Qt::AlignHCenter;
+     }
+ 
+-    if(hasArrow())
+-        point.rx() -= arrowPixmap.width()/2;
++    if (hasArrow())
++        point.rx() -= arrowPixmap.width() / 2;
+ 
+     QFontMetrics fm = option.fontMetrics;
+ 
+-//    if(!this->isEnabled()){
+-//        qreal opacity = 0.35;
+-//        fontColor.setAlphaF(opacity);
+-//        QPen pen ;
+-//        pen.setColor(fontColor);
+-//        p.setPen(pen);
+-//        if(option.icon.isNull() && (fm.width(option.text) > option.rect.width() - 10))
+-//        {
+-//            QString elidedText = fm.elidedText(option.text,Qt::ElideRight,option.rect.width() - 10);
+-//            p.drawText(option.rect.adjusted(5,0,-5,0),tf,elidedText);
+-//            setToolTip(option.text);
+-//        }
+-//        else
+-//            p.drawText(ir,tf,option.text);
+-
+-//    }
+-//    else
+-//    {
+-//        if(option.icon.isNull() && (fm.width(option.text) > option.rect.width() - 10)){
+-//            QString elidedText = fm.elidedText(option.text,Qt::ElideRight,option.rect.width() - 10);
+-//            p.drawText(option.rect.adjusted(5,0,-5,0),tf,elidedText);
+-//            setToolTip(option.text);
+-//        }
+-//        else
+-//            p.drawText(ir,tf,option.text);
+-//    }
++    //    if(!this->isEnabled()){
++    //        qreal opacity = 0.35;
++    //        fontColor.setAlphaF(opacity);
++    //        QPen pen ;
++    //        pen.setColor(fontColor);
++    //        p.setPen(pen);
++    //        if(option.icon.isNull() && (fm.width(option.text) > option.rect.width() - 10))
++    //        {
++    //            QString elidedText = fm.elidedText(option.text,Qt::ElideRight,option.rect.width() - 10);
++    //            p.drawText(option.rect.adjusted(5,0,-5,0),tf,elidedText);
++    //            setToolTip(option.text);
++    //        }
++    //        else
++    //            p.drawText(ir,tf,option.text);
++
++    //    }
++    //    else
++    //    {
++    //        if(option.icon.isNull() && (fm.width(option.text) > option.rect.width() - 10)){
++    //            QString elidedText = fm.elidedText(option.text,Qt::ElideRight,option.rect.width() - 10);
++    //            p.drawText(option.rect.adjusted(5,0,-5,0),tf,elidedText);
++    //            setToolTip(option.text);
++    //        }
++    //        else
++    //            p.drawText(ir,tf,option.text);
++    //    }
+     QPoint iconPosition = this->style()->visualPos(option.direction, option.rect, point);
+     int iconWidth = option.iconSize.width();
+     int iconHeight = option.iconSize.height();
+-    int textWidth = option.rect.width()-iconWidth*2-iconPosition.x();
++    int textWidth = option.rect.width() - iconWidth * 2 - iconPosition.x();
+     QRect arrowRect;
+     QRect textRect;
+-    QRect iconRect = QRect(iconPosition.x(),iconPosition.y(),iconWidth,iconHeight);
+-    d->drawContent(painter,option,fontColor,arrowRect,textRect,iconRect,fm,pixmap,arrowPixmap,tf,iconPosition,iconWidth,iconHeight,textWidth);
++    QRect iconRect = QRect(iconPosition.x(), iconPosition.y(), iconWidth, iconHeight);
++    d->drawContent(painter, option, fontColor, arrowRect, textRect, iconRect, fm, pixmap, arrowPixmap, tf, iconPosition, iconWidth, iconHeight, textWidth);
+ }
+ 
+ void KPushButtonPrivate::changeTheme()
+ {
+     Q_Q(KPushButton);
+-    if(m_isTranslucentFlag)
+-    {
+-        if(ThemeController::widgetTheme() == ClassicTheme)
++    if (m_isTranslucentFlag) {
++        if (ThemeController::widgetTheme() == ClassicTheme)
+             m_isTranslucent = false;
+         else
+             m_isTranslucent = true;
+-    }
+-    else
+-    {
++    } else {
+         m_isTranslucent = false;
+     }
+     initThemeStyle();
+-    if(m_buttonType == KPushButton::ShadowType)
+-    {
++    if (m_buttonType == KPushButton::ShadowType) {
+         m_pShadowEffect->setOffset(0, 3);
+-        //阴影颜色
++        // 阴影颜色
+         QColor color(0, 0, 0);
+-        //阴影半径
+-        if(ThemeController::themeMode() == LightTheme)
++        // 阴影半径
++        if (ThemeController::themeMode() == LightTheme)
+             color.setAlphaF(0.25);
+         else
+             color.setAlphaF(0.45);
+@@ -483,243 +472,194 @@ void KPushButtonPrivate::changeTheme()
+     }
+ }
+ 
+-void KPushButtonPrivate::updateColor(QPainter &painter,QStyleOptionButton &option, QColor &backgroundColor, QColor &highlight, QColor &mix, QColor &fontColor,QColor &pixmapColor)
++void KPushButtonPrivate::updateColor(QPainter &painter, QStyleOptionButton &option, QColor &backgroundColor, QColor &highlight, QColor &mix, QColor &fontColor, QColor &pixmapColor)
+ {
+     Q_Q(KPushButton);
+-    if(m_buttonType == KPushButton::NormalType || m_buttonType == KPushButton::CircleType || m_buttonType == KPushButton::ShadowType)
+-    {
+-        if(m_isTranslucent)
+-        {
++    if (m_buttonType == KPushButton::NormalType || m_buttonType == KPushButton::CircleType || m_buttonType == KPushButton::ShadowType) {
++        if (m_isTranslucent) {
+             /*判断使用用户设置的背景色、跟随系统高亮色或是使用默认的背景色*/
+-            if(m_useCustomColor){
++            if (m_useCustomColor) {
+                 backgroundColor = m_backgroundColor;
+-            }else if(m_isBackgroundColorHighlight){
++            } else if (m_isBackgroundColorHighlight) {
+                 backgroundColor = highlight;
+-            }else if(m_buttonType == KPushButton::ShadowType){
+-//                backgroundColor = option.palette.base().color();
++            } else if (m_buttonType == KPushButton::ShadowType) {
++                //                backgroundColor = option.palette.base().color();
+                 backgroundColor = ThemeController::getPaletteColorFromDT("base");
+-            }
+-            else{
+-//                backgroundColor = option.palette.brightText().color();
++            } else {
++                //                backgroundColor = option.palette.brightText().color();
+                 backgroundColor = ThemeController::getPaletteColorFromDT("brighttext");
+             }
+ 
+-             if(!option.state.testFlag(QStyle::State_Enabled))
+-             {
+-                 if(ThemeController::themeMode() == LightTheme){
+-//                     fontColor = option.palette.color(QPalette::Disabled,QPalette::ButtonText);
+-                     fontColor = ThemeController::getPaletteColorFromDT("buttontext");
+-                     backgroundColor.setAlphaF(0.05);
+-                 }
+-                 else
+-                 {
+-//                     fontColor = option.palette.color(QPalette::Disabled,QPalette::ButtonText);
+-                     fontColor = ThemeController::getPaletteColorFromDT("buttontext");
+-                     backgroundColor.setAlphaF(0.1);
+-                 }
+-             }
+-            else /*按钮处于可用(Enabled)状态*/
++            if (!option.state.testFlag(QStyle::State_Enabled)) {
++                if (ThemeController::themeMode() == LightTheme) {
++                    //                     fontColor = option.palette.color(QPalette::Disabled,QPalette::ButtonText);
++                    fontColor = ThemeController::getPaletteColorFromDT("buttontext");
++                    backgroundColor.setAlphaF(0.05);
++                } else {
++                    //                     fontColor = option.palette.color(QPalette::Disabled,QPalette::ButtonText);
++                    fontColor = ThemeController::getPaletteColorFromDT("buttontext");
++                    backgroundColor.setAlphaF(0.1);
++                }
++            } else /*按钮处于可用(Enabled)状态*/
+             {
+-                if(option.state.testFlag(QStyle::State_MouseOver))      /*鼠标在按钮上(hover状态)*/
++                if (option.state.testFlag(QStyle::State_MouseOver)) /*鼠标在按钮上(hover状态)*/
+                 {
+-                    if(m_buttonType == KPushButton::ShadowType)
+-                    {
+-//                        backgroundColor = option.palette.highlight().color();
++                    if (m_buttonType == KPushButton::ShadowType) {
++                        //                        backgroundColor = option.palette.highlight().color();
+                         backgroundColor = ThemeController::getPaletteColorFromDT("highlight");
+                     }
+-                    if(option.state.testFlag(QStyle::State_Sunken))     /*按钮被选中(clicked)*/
++                    if (option.state.testFlag(QStyle::State_Sunken)) /*按钮被选中(clicked)*/
+                     {
+-                        if(m_useCustomColor || m_isBackgroundColorHighlight || m_buttonType == KPushButton::ShadowType)
++                        if (m_useCustomColor || m_isBackgroundColorHighlight || m_buttonType == KPushButton::ShadowType)
+                             backgroundColor.setAlphaF(0.45);
+                         else
+                             backgroundColor.setAlphaF(0.21);
+-                    }
+-                    else
+-                    {
+-                        if(m_useCustomColor || m_isBackgroundColorHighlight)
++                    } else {
++                        if (m_useCustomColor || m_isBackgroundColorHighlight)
+                             backgroundColor.setAlphaF(0.3);
+                         else
+                             backgroundColor.setAlphaF(0.16);
+                     }
+-                }
+-                else
+-                {
+-                    if(m_useCustomColor || m_isBackgroundColorHighlight  )
++                } else {
++                    if (m_useCustomColor || m_isBackgroundColorHighlight)
+                         backgroundColor.setAlphaF(0.15);
+-                    else if(m_buttonType == KPushButton::ShadowType)
+-                    {
+-                        if(ThemeController::themeMode() == DarkTheme)
+-                        backgroundColor.setAlphaF(0.2);
+-                    }
+-                    else
++                    else if (m_buttonType == KPushButton::ShadowType) {
++                        if (ThemeController::themeMode() == DarkTheme)
++                            backgroundColor.setAlphaF(0.2);
++                    } else
+                         backgroundColor.setAlphaF(0.1);
+                 }
+             }
+-        }
+-        else
+-        {
+-            if(ThemeController::widgetTheme() == ClassicTheme)
+-            {
++        } else {
++            if (ThemeController::widgetTheme() == ClassicTheme) {
+                 /*判断使用用户设置的背景色或是使用默认的背景色*/
+-                if(m_useCustomColor){
++                if (m_useCustomColor) {
+                     backgroundColor = m_backgroundColor;
+-                }else if(m_isBackgroundColorHighlight){
+-                    backgroundColor=highlight;
+-                    if(option.state.testFlag(QStyle::State_MouseOver))      /*鼠标在按钮上(hover状态)*/
++                } else if (m_isBackgroundColorHighlight) {
++                    backgroundColor = highlight;
++                    if (option.state.testFlag(QStyle::State_MouseOver)) /*鼠标在按钮上(hover状态)*/
+                     {
+-                        if(option.state.testFlag(QStyle::State_Sunken))     /*按钮被选中(clicked)*/
+-                        {
+-                            if(ThemeController::themeMode() == LightTheme)
+-                            {
+-                                backgroundColor =ThemeController::highlightClick(false,q->palette());
+-
+-                                backgroundColor = ThemeController::adjustH(backgroundColor,-1);
+-                                backgroundColor = ThemeController::adjustS(backgroundColor,-34);
+-                                backgroundColor = ThemeController::adjustL(backgroundColor,-30);
+-                            }
+-                            else
+-                            {
+-                                backgroundColor =ThemeController::highlightClick(true,q->palette());
+-
+-                                backgroundColor = ThemeController::adjustH(backgroundColor,-2);
+-                                backgroundColor = ThemeController::adjustS(backgroundColor,2);
+-                                backgroundColor = ThemeController::adjustL(backgroundColor,45);
+-                            }
+-                        }
+-                        else
++                        if (option.state.testFlag(QStyle::State_Sunken)) /*按钮被选中(clicked)*/
+                         {
+-                            if(ThemeController::themeMode() == LightTheme)
+-                            {
+-                                backgroundColor =ThemeController::highlightHover(false,q->palette());
+-
+-                                backgroundColor = ThemeController::adjustH(backgroundColor,-3);
+-                                backgroundColor = ThemeController::adjustS(backgroundColor,-24);
+-                                backgroundColor = ThemeController::adjustL(backgroundColor,-24);
++                            if (ThemeController::themeMode() == LightTheme) {
++                                backgroundColor = ThemeController::highlightClick(false, q->palette());
++
++                                backgroundColor = ThemeController::adjustH(backgroundColor, -1);
++                                backgroundColor = ThemeController::adjustS(backgroundColor, -34);
++                                backgroundColor = ThemeController::adjustL(backgroundColor, -30);
++                            } else {
++                                backgroundColor = ThemeController::highlightClick(true, q->palette());
++
++                                backgroundColor = ThemeController::adjustH(backgroundColor, -2);
++                                backgroundColor = ThemeController::adjustS(backgroundColor, 2);
++                                backgroundColor = ThemeController::adjustL(backgroundColor, 45);
+                             }
+-                            else
+-                            {
+-                                backgroundColor =ThemeController::highlightHover(true,q->palette());
+-
+-                                backgroundColor = ThemeController::adjustH(backgroundColor,-2);
+-                                backgroundColor = ThemeController::adjustS(backgroundColor,-3);
+-                                backgroundColor = ThemeController::adjustL(backgroundColor,36);
++                        } else {
++                            if (ThemeController::themeMode() == LightTheme) {
++                                backgroundColor = ThemeController::highlightHover(false, q->palette());
++
++                                backgroundColor = ThemeController::adjustH(backgroundColor, -3);
++                                backgroundColor = ThemeController::adjustS(backgroundColor, -24);
++                                backgroundColor = ThemeController::adjustL(backgroundColor, -24);
++                            } else {
++                                backgroundColor = ThemeController::highlightHover(true, q->palette());
++
++                                backgroundColor = ThemeController::adjustH(backgroundColor, -2);
++                                backgroundColor = ThemeController::adjustS(backgroundColor, -3);
++                                backgroundColor = ThemeController::adjustL(backgroundColor, 36);
+                             }
+                         }
+                     }
+-                }else{
+-//                    backgroundColor = q->palette().color(QPalette::Button);
++                } else {
++                    //                    backgroundColor = q->palette().color(QPalette::Button);
+                     backgroundColor = ThemeController::getPaletteColorFromDT("button");
+                 }
+ 
+                 /*按钮处于不可用(Disabled)状态*/
+-                if(!option.state.testFlag(QStyle::State_Enabled))
+-                {
+-//                    fontColor = option.palette.color(QPalette::Disabled,QPalette::ButtonText);
++                if (!option.state.testFlag(QStyle::State_Enabled)) {
++                    //                    fontColor = option.palette.color(QPalette::Disabled,QPalette::ButtonText);
+                     fontColor = ThemeController::getPaletteColorFromDT("buttontext");
+-                }
+-                else
+-                {
+-                    if(m_useCustomColor)
+-                    {
+-                        if(option.state.testFlag(QStyle::State_MouseOver))      /*鼠标在按钮上(hover状态)*/
++                } else {
++                    if (m_useCustomColor) {
++                        if (option.state.testFlag(QStyle::State_MouseOver)) /*鼠标在按钮上(hover状态)*/
+                         {
+-                            if(option.state.testFlag(QStyle::State_Sunken))     /*按钮被选中(clicked)*/
+-                                backgroundColor = ThemeController::mixColor(backgroundColor,mix,0.2);
++                            if (option.state.testFlag(QStyle::State_Sunken)) /*按钮被选中(clicked)*/
++                                backgroundColor = ThemeController::mixColor(backgroundColor, mix, 0.2);
+                             else
+-                                backgroundColor = ThemeController::mixColor(backgroundColor,mix,0.05);
+-//                            fontColor = option.palette.color(QPalette::HighlightedText);
++                                backgroundColor = ThemeController::mixColor(backgroundColor, mix, 0.05);
++                            //                            fontColor = option.palette.color(QPalette::HighlightedText);
+                             fontColor = ThemeController::getPaletteColorFromDT("highlightedtext");
+                         }
+-                    }
+-                    else if( m_isBackgroundColorHighlight)
+-                    {
++                    } else if (m_isBackgroundColorHighlight) {
+                         backgroundColor = backgroundColor;
+-                    }
+-                    else
+-                    {
+-                    /*按钮处于可用(Enabled)状态*/
+-                        if(option.state.testFlag(QStyle::State_MouseOver))      /*鼠标在按钮上(hover状态)*/
++                    } else {
++                        /*按钮处于可用(Enabled)状态*/
++                        if (option.state.testFlag(QStyle::State_MouseOver)) /*鼠标在按钮上(hover状态)*/
+                         {
+-                            if(option.state.testFlag(QStyle::State_Sunken))     /*按钮被选中(clicked)*/
+-                                backgroundColor = ThemeController::mixColor(highlight,mix,0.2);
++                            if (option.state.testFlag(QStyle::State_Sunken)) /*按钮被选中(clicked)*/
++                                backgroundColor = ThemeController::mixColor(highlight, mix, 0.2);
+                             else
+-                                backgroundColor = ThemeController::mixColor(highlight,mix,0.05);
+-//                            fontColor = option.palette.color(QPalette::HighlightedText);
++                                backgroundColor = ThemeController::mixColor(highlight, mix, 0.05);
++                            //                            fontColor = option.palette.color(QPalette::HighlightedText);
+                             fontColor = ThemeController::getPaletteColorFromDT("highlightedtext");
+-                        }
+-                        else
+-                        {
+-//                            backgroundColor = q->palette().color(QPalette::Button);
++                        } else {
++                            //                            backgroundColor = q->palette().color(QPalette::Button);
+                             backgroundColor = ThemeController::getPaletteColorFromDT("button");
+                         }
+                     }
+                 }
+-            }
+-            else
+-            {
++            } else {
+                 /*判断使用用户设置的背景色或是使用默认的背景色*/
+-                if(m_useCustomColor){
++                if (m_useCustomColor) {
+                     backgroundColor = m_backgroundColor;
+-                }else if(m_isBackgroundColorHighlight){
++                } else if (m_isBackgroundColorHighlight) {
+                     backgroundColor = highlight;
+-                }else{
+-//                    backgroundColor = q->palette().color(QPalette::Button);
++                } else {
++                    //                    backgroundColor = q->palette().color(QPalette::Button);
+                     backgroundColor = ThemeController::getPaletteColorFromDT("button");
+                 }
+ 
+                 /*按钮处于不可用(Disabled)状态*/
+-                if(!option.state.testFlag(QStyle::State_Enabled))
+-                {
+-//                    fontColor = option.palette.color(QPalette::Disabled,QPalette::ButtonText);
++                if (!option.state.testFlag(QStyle::State_Enabled)) {
++                    //                    fontColor = option.palette.color(QPalette::Disabled,QPalette::ButtonText);
+                     fontColor = ThemeController::getPaletteColorFromDT("buttontext");
+-                }
+-                else
+-                {
+-                    if(m_useCustomColor || m_isBackgroundColorHighlight)
+-                    {
+-                        if(option.state.testFlag(QStyle::State_MouseOver))      /*鼠标在按钮上(hover状态)*/
++                } else {
++                    if (m_useCustomColor || m_isBackgroundColorHighlight) {
++                        if (option.state.testFlag(QStyle::State_MouseOver)) /*鼠标在按钮上(hover状态)*/
+                         {
+-                            if(option.state.testFlag(QStyle::State_Sunken))     /*按钮被选中(clicked)*/
+-                                backgroundColor = ThemeController::mixColor(backgroundColor,mix,0.2);
++                            if (option.state.testFlag(QStyle::State_Sunken)) /*按钮被选中(clicked)*/
++                                backgroundColor = ThemeController::mixColor(backgroundColor, mix, 0.2);
+                             else
+-                                backgroundColor = ThemeController::mixColor(backgroundColor,mix,0.05);
+-//                            fontColor = option.palette.color(QPalette::HighlightedText);
++                                backgroundColor = ThemeController::mixColor(backgroundColor, mix, 0.05);
++                            //                            fontColor = option.palette.color(QPalette::HighlightedText);
+                             fontColor = ThemeController::getPaletteColorFromDT("highlightedtext");
+-                        }
+-                        else
+-                        {
+-                            if(m_isBackgroundColorHighlight)
+-//                                fontColor = option.palette.color(QPalette::HighlightedText);
++                        } else {
++                            if (m_isBackgroundColorHighlight)
++                                //                                fontColor = option.palette.color(QPalette::HighlightedText);
+                                 fontColor = ThemeController::getPaletteColorFromDT("highlightedtext");
+                         }
+-                    }
+-                    else
+-                    {
+-                    /*按钮处于可用(Enabled)状态*/
+-                        if(option.state.testFlag(QStyle::State_MouseOver))      /*鼠标在按钮上(hover状态)*/
++                    } else {
++                        /*按钮处于可用(Enabled)状态*/
++                        if (option.state.testFlag(QStyle::State_MouseOver)) /*鼠标在按钮上(hover状态)*/
+                         {
+-                            if(option.state.testFlag(QStyle::State_Sunken))     /*按钮被选中(clicked)*/
+-                                backgroundColor = ThemeController::mixColor(highlight,mix,0.2);
++                            if (option.state.testFlag(QStyle::State_Sunken)) /*按钮被选中(clicked)*/
++                                backgroundColor = ThemeController::mixColor(highlight, mix, 0.2);
+                             else
+-                                backgroundColor = ThemeController::mixColor(highlight,mix,0.05);
+-//                            fontColor = option.palette.color(QPalette::HighlightedText);
++                                backgroundColor = ThemeController::mixColor(highlight, mix, 0.05);
++                            //                            fontColor = option.palette.color(QPalette::HighlightedText);
+                             fontColor = ThemeController::getPaletteColorFromDT("highlightedtext");
+-                        }
+-                        else
+-                        {
+-//                            backgroundColor = q->palette().color(QPalette::Button);
++                        } else {
++                            //                            backgroundColor = q->palette().color(QPalette::Button);
+                             backgroundColor = ThemeController::getPaletteColorFromDT("button");
+                         }
+                     }
+                 }
+             }
+         }
+-        if(q->isChecked())
++        if (q->isChecked())
+             backgroundColor = highlight;
+-    }
+-    else if(m_buttonType == KPushButton::GrayType)
+-    {
+-        updateGrayColor(painter,option,backgroundColor,pixmapColor);
++    } else if (m_buttonType == KPushButton::GrayType) {
++        updateGrayColor(painter, option, backgroundColor, pixmapColor);
+     }
+ }
+ 
+@@ -730,45 +670,37 @@ void KPushButtonPrivate::drawBackground(QPainter &painter, QStyleOptionButton &o
+     painter.save();
+     painter.setBrush(backgroundColor);
+     QColor borderColor;
+-    if(ThemeController::widgetTheme() == ClassicTheme )
+-    {
+-        if(ThemeController::themeMode() == LightTheme)
+-            borderColor=ThemeController::lanhuHSLToQtHsl(0, 0, 73);
++    if (ThemeController::widgetTheme() == ClassicTheme) {
++        if (ThemeController::themeMode() == LightTheme)
++            borderColor = ThemeController::lanhuHSLToQtHsl(0, 0, 73);
+         else
+-            borderColor=ThemeController::lanhuHSLToQtHsl(0, 0, 35);
++            borderColor = ThemeController::lanhuHSLToQtHsl(0, 0, 35);
+         painter.setPen(borderColor);
+-    }
+-    else
++    } else
+         painter.setPen(Qt::NoPen);
+ 
+-    switch(m_buttonType)
+-    {
+-    case KPushButton::NormalType:
+-    {
++    switch (m_buttonType) {
++    case KPushButton::NormalType: {
+         painter.setPen(Qt::NoPen);
+-        if(m_hasOneParam)
+-        {
+-            if(ThemeController::widgetTheme() == ClassicTheme )
+-                painter.drawRoundedRect(option.rect.adjusted(0,0,-1,-1),0,0);
++        if (m_hasOneParam) {
++            if (ThemeController::widgetTheme() == ClassicTheme)
++                painter.drawRoundedRect(option.rect.adjusted(0, 0, -1, -1), 0, 0);
+             else
+-                painter.drawRoundedRect(option.rect.adjusted(0,0,-1,-1),m_radius,m_radius);
+-        }
+-        else
+-        {
++                painter.drawRoundedRect(option.rect.adjusted(0, 0, -1, -1), m_radius, m_radius);
++        } else {
+             QPainterPath path;
+-            if(ThemeController::widgetTheme() == ClassicTheme )
+-                path.addRect(option.rect.adjusted(0,0,-1,-1));
+-            else
+-            {
+-                path.moveTo(option.rect.topLeft() + QPointF(0,m_topLeft));
+-                path.lineTo(option.rect.bottomLeft() - QPointF(0,m_bottomLeft));
+-                path.quadTo(option.rect.bottomLeft(),option.rect.bottomLeft() + QPointF(m_bottomLeft,0));
+-                path.lineTo(option.rect.bottomRight() - QPointF(m_bottomRight,0));
+-                path.quadTo(option.rect.bottomRight(),option.rect.bottomRight() - QPointF(0,m_bottomRight));
+-                path.lineTo(option.rect.topRight() + QPointF(0,m_topRight));
+-                path.quadTo(option.rect.topRight(),option.rect.topRight() - QPointF(m_topRight,0));
+-                path.lineTo(option.rect.topLeft() + QPointF(m_topLeft,0));
+-                path.quadTo(option.rect.topLeft(),option.rect.topLeft() + QPointF(0,m_topLeft));
++            if (ThemeController::widgetTheme() == ClassicTheme)
++                path.addRect(option.rect.adjusted(0, 0, -1, -1));
++            else {
++                path.moveTo(option.rect.topLeft() + QPointF(0, m_topLeft));
++                path.lineTo(option.rect.bottomLeft() - QPointF(0, m_bottomLeft));
++                path.quadTo(option.rect.bottomLeft(), option.rect.bottomLeft() + QPointF(m_bottomLeft, 0));
++                path.lineTo(option.rect.bottomRight() - QPointF(m_bottomRight, 0));
++                path.quadTo(option.rect.bottomRight(), option.rect.bottomRight() - QPointF(0, m_bottomRight));
++                path.lineTo(option.rect.topRight() + QPointF(0, m_topRight));
++                path.quadTo(option.rect.topRight(), option.rect.topRight() - QPointF(m_topRight, 0));
++                path.lineTo(option.rect.topLeft() + QPointF(m_topLeft, 0));
++                path.quadTo(option.rect.topLeft(), option.rect.topLeft() + QPointF(0, m_topLeft));
+             }
+             painter.drawPath(path);
+         }
+@@ -777,40 +709,33 @@ void KPushButtonPrivate::drawBackground(QPainter &painter, QStyleOptionButton &o
+     }
+     case KPushButton::CircleType:
+         painter.setPen(Qt::NoPen);
+-        painter.drawRoundedRect(option.rect.adjusted(0,0,0,0),q->width()/2,q->height()/2);
++        painter.drawRoundedRect(option.rect.adjusted(0, 0, 0, 0), q->width() / 2, q->height() / 2);
+         painter.restore();
+         break;
+-    case KPushButton::GrayType:
+-    {
+-        if(option.state.testFlag(QStyle::State_HasFocus))
+-        {
++    case KPushButton::GrayType: {
++        if (option.state.testFlag(QStyle::State_HasFocus)) {
+             QPen pen;
+             pen.setWidth(2);
+-//            pen.setColor(q->palette().highlight().color());
++            //            pen.setColor(q->palette().highlight().color());
+             pen.setColor(ThemeController::getPaletteColorFromDT("highlight"));
+             painter.setPen(pen);
+-        }
+-        else
+-        {
++        } else {
+             painter.setPen(Qt::NoPen);
+         }
+-        if(m_hasOneParam)
+-        {
+-            painter.drawRoundedRect(option.rect.adjusted(1,1,-1,-1),m_radius,m_radius);
+-        }
+-        else
+-        {
++        if (m_hasOneParam) {
++            painter.drawRoundedRect(option.rect.adjusted(1, 1, -1, -1), m_radius, m_radius);
++        } else {
+             QPainterPath path;
+ 
+-            path.moveTo(option.rect.topLeft() + QPointF(0,m_topLeft));
+-            path.lineTo(option.rect.bottomLeft() - QPointF(0,m_bottomLeft));
+-            path.quadTo(option.rect.bottomLeft(),option.rect.bottomLeft() + QPointF(m_bottomLeft,0));
+-            path.lineTo(option.rect.bottomRight() - QPointF(m_bottomRight,0));
+-            path.quadTo(option.rect.bottomRight(),option.rect.bottomRight() - QPointF(0,m_bottomRight));
+-            path.lineTo(option.rect.topRight() + QPointF(0,m_topRight));
+-            path.quadTo(option.rect.topRight(),option.rect.topRight() - QPointF(m_topRight,0));
+-            path.lineTo(option.rect.topLeft() + QPointF(m_topLeft,0));
+-            path.quadTo(option.rect.topLeft(),option.rect.topLeft() + QPointF(0,m_topLeft));
++            path.moveTo(option.rect.topLeft() + QPointF(0, m_topLeft));
++            path.lineTo(option.rect.bottomLeft() - QPointF(0, m_bottomLeft));
++            path.quadTo(option.rect.bottomLeft(), option.rect.bottomLeft() + QPointF(m_bottomLeft, 0));
++            path.lineTo(option.rect.bottomRight() - QPointF(m_bottomRight, 0));
++            path.quadTo(option.rect.bottomRight(), option.rect.bottomRight() - QPointF(0, m_bottomRight));
++            path.lineTo(option.rect.topRight() + QPointF(0, m_topRight));
++            path.quadTo(option.rect.topRight(), option.rect.topRight() - QPointF(m_topRight, 0));
++            path.lineTo(option.rect.topLeft() + QPointF(m_topLeft, 0));
++            path.quadTo(option.rect.topLeft(), option.rect.topLeft() + QPointF(0, m_topLeft));
+ 
+             painter.setRenderHint(QPainter::HighQualityAntialiasing);
+             painter.setRenderHint(QPainter::Antialiasing);
+@@ -822,47 +747,40 @@ void KPushButtonPrivate::drawBackground(QPainter &painter, QStyleOptionButton &o
+         painter.restore();
+         break;
+     }
+-    case KPushButton::ShadowType:
+-        {
+-            QColor penColor = Qt::white;
+-            if(!q->isEnabled())
+-            {
+-                if(ThemeController::themeMode() == LightTheme)
+-                    penColor.setAlphaF(0.05);
+-                else
+-                    penColor.setAlphaF(0.1);
+-            }
+-            painter.setPen(penColor);
+-            painter.setBrush(backgroundColor);
+-            painter.drawEllipse(option.rect.adjusted(0,0,-1,-1));
+-            painter.restore();
++    case KPushButton::ShadowType: {
++        QColor penColor = Qt::white;
++        if (!q->isEnabled()) {
++            if (ThemeController::themeMode() == LightTheme)
++                penColor.setAlphaF(0.05);
++            else
++                penColor.setAlphaF(0.1);
+         }
+-        break;
++        painter.setPen(penColor);
++        painter.setBrush(backgroundColor);
++        painter.drawEllipse(option.rect.adjusted(0, 0, -1, -1));
++        painter.restore();
++    } break;
+     default:
+         break;
+     }
+ }
+ 
+-void KPushButtonPrivate::updateArrowDirection(QPixmap &arrowPixmap, QPoint pos,QPoint desktopPos,QPoint globalPos,QIcon::Mode mode,QIcon::State state)
++void KPushButtonPrivate::updateArrowDirection(QPixmap &arrowPixmap, QPoint pos, QPoint desktopPos, QPoint globalPos, QIcon::Mode mode, QIcon::State state)
+ {
+     Q_Q(KPushButton);
+-    if(q->hasArrow())
+-    {
+-        switch (m_arrowDirection)
+-        {
++    if (q->hasArrow()) {
++        switch (m_arrowDirection) {
+         case KPushButton::ArrowTop:
+-            arrowPixmap = QIcon::fromTheme("ukui-up-symbolic").pixmap(QSize(16,16), mode, state);
+-            if(q->menu())
+-            {
++            arrowPixmap = QIcon::fromTheme("ukui-up-symbolic").pixmap(QSize(16, 16), mode, state);
++            if (q->menu()) {
+                 pos.setX(q->rect().left());
+-                pos.setY(- q->menu()->height());
+-                globalPos = q->mapToGlobal(pos); //现在
+-                if(globalPos.x() > (desktopPos.x() - q->menu()->width()))
++                pos.setY(-q->menu()->height());
++                globalPos = q->mapToGlobal(pos); // 现在
++                if (globalPos.x() > (desktopPos.x() - q->menu()->width()))
+                     globalPos.setX(desktopPos.x() - q->menu()->width());
+-                if(globalPos.x() < 0)
++                if (globalPos.x() < 0)
+                     globalPos.setX(0);
+-                if(globalPos.y() < 0)
+-                {
++                if (globalPos.y() < 0) {
+                     pos.setY(q->rect().bottom());
+                     globalPos.setY(q->mapToGlobal(pos).y());
+                 }
+@@ -870,42 +788,36 @@ void KPushButtonPrivate::updateArrowDirection(QPixmap &arrowPixmap, QPoint pos,Q
+             }
+             break;
+         case KPushButton::ArrowBottom:
+-            arrowPixmap = QIcon::fromTheme("ukui-down-symbolic").pixmap(QSize(16,16), mode, state);
++            arrowPixmap = QIcon::fromTheme("ukui-down-symbolic").pixmap(QSize(16, 16), mode, state);
+             break;
+         case KPushButton::ArrowLeft:
+-            arrowPixmap = QIcon::fromTheme("ukui-start-symbolic").pixmap(QSize(16,16), mode, state);
+-            if(q->menu())
+-            {
++            arrowPixmap = QIcon::fromTheme("ukui-start-symbolic").pixmap(QSize(16, 16), mode, state);
++            if (q->menu()) {
+                 pos.setX(q->rect().left() - q->menu()->width());
+-                pos.setY(q->rect().center().y()/2);
++                pos.setY(q->rect().center().y() / 2);
+                 globalPos = q->mapToGlobal(pos);
+-                if(globalPos.x() < 0)
+-                {
++                if (globalPos.x() < 0) {
+                     pos.setY(q->rect().bottom());
+                     globalPos.setX(0);
+                     globalPos.setY(q->mapToGlobal(pos).y());
+                 }
+-                if(globalPos.y() > desktopPos.y() - q->menu()->height())
+-                {
++                if (globalPos.y() > desktopPos.y() - q->menu()->height()) {
+                     globalPos.setY(desktopPos.y() - q->menu()->height());
+                 }
+                 q->menu()->move(globalPos);
+             }
+             break;
+         case KPushButton::ArrowRight:
+-            arrowPixmap = QIcon::fromTheme("ukui-end-symbolic").pixmap(QSize(16,16), mode, state);
+-            if(q->menu())
+-            {
++            arrowPixmap = QIcon::fromTheme("ukui-end-symbolic").pixmap(QSize(16, 16), mode, state);
++            if (q->menu()) {
+                 pos.setX(q->rect().right());
+                 q->menu()->move(q->mapToGlobal(pos));
+                 globalPos = q->mapToGlobal(pos);
+-                if(globalPos.x() > (desktopPos.x() - q->menu()->width()))
+-                {
+-                    pos.setX(q->rect().left()-q->menu()->width());
++                if (globalPos.x() > (desktopPos.x() - q->menu()->width())) {
++                    pos.setX(q->rect().left() - q->menu()->width());
+                     globalPos.setX(q->mapToGlobal(pos).x());
+                 }
+-                if(globalPos.y() > desktopPos.y() - q->menu()->height())
+-                {
++                if (globalPos.y() > desktopPos.y() - q->menu()->height()) {
+                     globalPos.setY(desktopPos.y() - q->menu()->height());
+                 }
+                 q->menu()->move(globalPos);
+@@ -917,124 +829,87 @@ void KPushButtonPrivate::updateArrowDirection(QPixmap &arrowPixmap, QPoint pos,Q
+     }
+ }
+ 
+-void KPushButtonPrivate::updatePixmap(QPixmap &arrowPixmap,QPixmap &pixmap, QStyleOptionButton &option , QColor &highlight, QColor &fontColor,QColor &pixmapColor,QIcon::Mode mode,QIcon::State state)
++void KPushButtonPrivate::updatePixmap(QPixmap &arrowPixmap, QPixmap &pixmap, QStyleOptionButton &option, QColor &highlight, QColor &fontColor, QColor &pixmapColor, QIcon::Mode mode, QIcon::State state)
+ {
+     Q_Q(KPushButton);
+     pixmap = option.icon.pixmap(option.iconSize, mode, state);
+-    if(mode != QIcon::Disabled)
+-    {
+-        if(m_buttonType == KPushButton::NormalType || m_buttonType == KPushButton::CircleType || m_buttonType == KPushButton::ShadowType)
+-        {
+-            if(m_isIconHighlight)
+-            {
+-                pixmap = ThemeController::drawColoredPixmap(q->icon().pixmap(q->iconSize()),highlight);
+-                arrowPixmap = ThemeController::drawColoredPixmap(arrowPixmap,highlight);
+-            }else if(m_useCustomIconColor)
+-            {
+-                pixmap = ThemeController::drawColoredPixmap(q->icon().pixmap(q->iconSize()),m_iconColor);
+-                arrowPixmap = ThemeController::drawColoredPixmap(arrowPixmap,m_iconColor);
+-            }else
+-            {
+-                if(ThemeController::isPixmapPureColor(pixmap) || ThemeController::isPixmapPureColor(arrowPixmap))
+-                {
+-                    pixmap = ThemeController::drawColoredPixmap(q->icon().pixmap(q->iconSize()),fontColor);
+-                    arrowPixmap = ThemeController::drawColoredPixmap(arrowPixmap,fontColor);
++    if (mode != QIcon::Disabled) {
++        if (m_buttonType == KPushButton::NormalType || m_buttonType == KPushButton::CircleType || m_buttonType == KPushButton::ShadowType) {
++            if (m_isIconHighlight) {
++                pixmap = ThemeController::drawColoredPixmap(q->icon().pixmap(q->iconSize()), highlight);
++                arrowPixmap = ThemeController::drawColoredPixmap(arrowPixmap, highlight);
++            } else if (m_useCustomIconColor) {
++                pixmap = ThemeController::drawColoredPixmap(q->icon().pixmap(q->iconSize()), m_iconColor);
++                arrowPixmap = ThemeController::drawColoredPixmap(arrowPixmap, m_iconColor);
++            } else {
++                if (ThemeController::isPixmapPureColor(pixmap) || ThemeController::isPixmapPureColor(arrowPixmap)) {
++                    pixmap = ThemeController::drawColoredPixmap(q->icon().pixmap(q->iconSize()), fontColor);
++                    arrowPixmap = ThemeController::drawColoredPixmap(arrowPixmap, fontColor);
+                 }
+             }
++        } else {
++            pixmap = ThemeController::drawColoredPixmap(q->icon().pixmap(q->iconSize()), pixmapColor);
++            arrowPixmap = ThemeController::drawColoredPixmap(arrowPixmap, pixmapColor);
+         }
+-        else
+-        {
+-            pixmap = ThemeController::drawColoredPixmap(q->icon().pixmap(q->iconSize()),pixmapColor);
+-            arrowPixmap = ThemeController::drawColoredPixmap(arrowPixmap,pixmapColor);
+-        }
+-    }
+-    else
+-    {
+-//        arrowPixmap = ThemeController::drawColoredPixmap(arrowPixmap,q->palette().color(QPalette::Disabled,QPalette::ButtonText));
+-        arrowPixmap = ThemeController::drawColoredPixmap(arrowPixmap,ThemeController::getPaletteColorFromDT("buttontext",QPalette::Disabled));
+-//        pixmap = ThemeController::drawColoredPixmap(pixmap,q->palette().color(QPalette::Disabled,QPalette::ButtonText));
+-        pixmap = ThemeController::drawColoredPixmap(pixmap,ThemeController::getPaletteColorFromDT("buttontext",QPalette::Disabled));
++    } else {
++        //        arrowPixmap = ThemeController::drawColoredPixmap(arrowPixmap,q->palette().color(QPalette::Disabled,QPalette::ButtonText));
++        arrowPixmap = ThemeController::drawColoredPixmap(arrowPixmap, ThemeController::getPaletteColorFromDT("buttontext", QPalette::Disabled));
++        //        pixmap = ThemeController::drawColoredPixmap(pixmap,q->palette().color(QPalette::Disabled,QPalette::ButtonText));
++        pixmap = ThemeController::drawColoredPixmap(pixmap, ThemeController::getPaletteColorFromDT("buttontext", QPalette::Disabled));
+     }
+ }
+ 
+ void KPushButtonPrivate::updateGrayColor(QPainter &painter, QStyleOptionButton &option, QColor &backgroundColor, QColor &pixmapColor)
+ {
+     Q_Q(KPushButton);
+-    if(!m_isTranslucent)
+-    {
+-//        pixmapColor = q->palette().text().color();
++    if (!m_isTranslucent) {
++        //        pixmapColor = q->palette().text().color();
+         pixmapColor = ThemeController::getPaletteColorFromDT("text");
+-        if(!q->isEnabled())
+-        {
++        if (!q->isEnabled()) {
+             backgroundColor = qApp->property("kComponentDisable").value<QColor>();
+-//            pixmapColor = q->palette().color(QPalette::Disabled,QPalette::Text);
+-            pixmapColor = ThemeController::getPaletteColorFromDT("text",QPalette::Disabled);
++            //            pixmapColor = q->palette().color(QPalette::Disabled,QPalette::Text);
++            pixmapColor = ThemeController::getPaletteColorFromDT("text", QPalette::Disabled);
+             painter.setPen(Qt::NoPen);
+-        }
+-        else
+-        {
+-            if(q->isLoading())
+-            {
++        } else {
++            if (q->isLoading()) {
+                 backgroundColor = qApp->property("kComponentNormal").value<QColor>();
+                 painter.setPen(Qt::NoPen);
+-            }
+-            else
+-            {
+-                if(option.state.testFlag(QStyle::State_MouseOver))
+-                {
+-                    if(option.state.testFlag(QStyle::State_Sunken))
+-                    {
++            } else {
++                if (option.state.testFlag(QStyle::State_MouseOver)) {
++                    if (option.state.testFlag(QStyle::State_Sunken)) {
+                         backgroundColor = qApp->property("kComponentClick").value<QColor>();
+-                    }
+-                    else
+-                    {
++                    } else {
+                         backgroundColor = qApp->property("kComponentHover").value<QColor>();
+                     }
+-                }
+-                else
+-                {
++                } else {
+                     backgroundColor = qApp->property("kComponentNormal").value<QColor>();
+                 }
+             }
+         }
+-    }
+-    else
+-    {
+-//        pixmapColor = q->palette().text().color();
++    } else {
++        //        pixmapColor = q->palette().text().color();
+         pixmapColor = ThemeController::getPaletteColorFromDT("text");
+-        if(!q->isEnabled())
+-        {
+-//            backgroundColor = backgroundColor = qApp->property("kComponentAlphaDisable").value<QColor>();
++        if (!q->isEnabled()) {
++            //            backgroundColor = backgroundColor = qApp->property("kComponentAlphaDisable").value<QColor>();
+             backgroundColor = ThemeController::getCustomColorFromDT("kComponentAlphaDisable");
+-//            pixmapColor = q->palette().color(QPalette::Disabled,QPalette::Text);
+-            pixmapColor = ThemeController::getPaletteColorFromDT("text",QPalette::Disabled);
+-        }
+-        else
+-        {
+-            if(q->isLoading())
+-            {
+-//                backgroundColor = qApp->property("kComponentAlphaNormal").value<QColor>();
++            //            pixmapColor = q->palette().color(QPalette::Disabled,QPalette::Text);
++            pixmapColor = ThemeController::getPaletteColorFromDT("text", QPalette::Disabled);
++        } else {
++            if (q->isLoading()) {
++                //                backgroundColor = qApp->property("kComponentAlphaNormal").value<QColor>();
+                 backgroundColor = ThemeController::getCustomColorFromDT("kComponentAlphaNormal");
+                 painter.setPen(Qt::NoPen);
+-            }
+-            else
+-            {
+-                if(option.state.testFlag(QStyle::State_MouseOver))
+-                {
+-                    if(option.state.testFlag(QStyle::State_Sunken))
+-                    {
+-//                        backgroundColor = qApp->property("kComponentAlphaClick").value<QColor>();
++            } else {
++                if (option.state.testFlag(QStyle::State_MouseOver)) {
++                    if (option.state.testFlag(QStyle::State_Sunken)) {
++                        //                        backgroundColor = qApp->property("kComponentAlphaClick").value<QColor>();
+                         backgroundColor = ThemeController::getCustomColorFromDT("kComponentAlphaClick");
+-                    }
+-                    else
+-                    {
+-//                        backgroundColor = qApp->property("kComponentAlphaHover").value<QColor>();
++                    } else {
++                        //                        backgroundColor = qApp->property("kComponentAlphaHover").value<QColor>();
+                         backgroundColor = ThemeController::getCustomColorFromDT("kComponentAlphaHover");
+                     }
+-                }
+-                else
+-                {
+-//                    backgroundColor = qApp->property("kComponentAlphaNormal").value<QColor>();
++                } else {
++                    //                    backgroundColor = qApp->property("kComponentAlphaNormal").value<QColor>();
+                     backgroundColor = ThemeController::getCustomColorFromDT("kComponentAlphaNormal");
+                 }
+             }
+@@ -1042,204 +917,151 @@ void KPushButtonPrivate::updateGrayColor(QPainter &painter, QStyleOptionButton &
+     }
+ }
+ 
+-void KPushButtonPrivate::drawContent(QPainter &painter,QStyleOptionButton &option,QColor &fontColor,QRect &arrowRect,QRect &textRect,QRect &iconRect,QFontMetrics fm,QPixmap& pixmap,QPixmap &arrowPixmap,uint tf ,QPoint iconPosition,int iconWidth,int iconHeight,int textWidth)
++void KPushButtonPrivate::drawContent(QPainter &painter, QStyleOptionButton &option, QColor &fontColor, QRect &arrowRect, QRect &textRect, QRect &iconRect, QFontMetrics fm, QPixmap &pixmap, QPixmap &arrowPixmap, uint tf, QPoint iconPosition, int iconWidth, int iconHeight, int textWidth)
+ {
+     Q_Q(KPushButton);
+-    if(m_isLoading)
+-    {
+-        iconRect = QRect((q->rect().width() - iconWidth)/2+1,iconPosition.y()-1,iconWidth,iconHeight);
+-        painter.drawPixmap(iconRect,pixmap);
+-    }
+-    else
+-    {
+-        if(q->hasArrow())
+-        {
+-            if(!q->isEnabled())
+-            {
+-                QPen pen ;
++    if (m_isLoading) {
++        iconRect = QRect((q->rect().width() - iconWidth) / 2 + 1, iconPosition.y() - 1, iconWidth, iconHeight);
++        painter.drawPixmap(iconRect, pixmap);
++    } else {
++        if (q->hasArrow()) {
++            if (!q->isEnabled()) {
++                QPen pen;
+                 pen.setColor(fontColor);
+                 painter.setPen(pen);
+-                if(option.icon.isNull())
+-                {
+-                    textRect = QRect(margin,(option.rect.height()- fm.height())/2 ,option.rect.width()- iconWidth - margin - spacing,fm.height());
+-    //                arrowRect = QRect(textRect.right() + spacing,(option.rect.height()- arrowPixmap.width())/2 ,arrowPixmap.width(),arrowPixmap.height());
+-
+-                    if((fm.width(option.text) > textRect.width()))
+-                    {
+-                        arrowRect = QRect(textRect.right() + spacing,(option.rect.height()- arrowPixmap.width())/2 ,arrowPixmap.width(),arrowPixmap.height());
+-
+-                        QString elidedText = fm.elidedText(option.text,Qt::ElideRight,textRect.width());
+-                        painter.drawText(textRect,tf,elidedText);
+-                        painter.drawPixmap(arrowRect,arrowPixmap);
++                if (option.icon.isNull()) {
++                    textRect = QRect(margin, (option.rect.height() - fm.height()) / 2, option.rect.width() - iconWidth - margin - spacing, fm.height());
++                    //                arrowRect = QRect(textRect.right() + spacing,(option.rect.height()- arrowPixmap.width())/2 ,arrowPixmap.width(),arrowPixmap.height());
++
++                    if ((fm.width(option.text) > textRect.width())) {
++                        arrowRect = QRect(textRect.right() + spacing, (option.rect.height() - arrowPixmap.width()) / 2, arrowPixmap.width(), arrowPixmap.height());
++
++                        QString elidedText = fm.elidedText(option.text, Qt::ElideRight, textRect.width());
++                        painter.drawText(textRect, tf, elidedText);
++                        painter.drawPixmap(arrowRect, arrowPixmap);
++                    } else {
++                        textRect = QRect((option.rect.width() - fm.width(option.text)) / 2, (option.rect.height() - fm.height()) / 2, fm.width(option.text), fm.height());
++                        arrowRect = QRect(textRect.right() + spacing, (option.rect.height() - arrowPixmap.width()) / 2, arrowPixmap.width(), arrowPixmap.height());
++
++                        painter.drawText(textRect, tf, option.text);
++                        painter.drawPixmap(arrowRect, arrowPixmap);
+                     }
+-                    else
+-                    {
+-                        textRect = QRect((option.rect.width() -fm.width(option.text))/2 ,(option.rect.height()- fm.height())/2 ,fm.width(option.text),fm.height());
+-                        arrowRect = QRect(textRect.right() + spacing,(option.rect.height()- arrowPixmap.width())/2 ,arrowPixmap.width(),arrowPixmap.height());
+ 
+-                        painter.drawText(textRect,tf,option.text);
+-                        painter.drawPixmap(arrowRect,arrowPixmap);
+-                    }
++                } else {
++                    painter.drawPixmap(iconRect, pixmap);
++                    //                arrowRect = QRect(option.rect.width() - arrowPixmap.width() - margin,(option.rect.height()- arrowPixmap.width())/2 ,arrowPixmap.width(),arrowPixmap.height());
++                    textRect = QRect(iconPosition.x() + spacing + iconWidth, 0, textWidth - margin - spacing, option.rect.height());
+ 
+-                }
+-                else
+-                {
+-                    painter.drawPixmap(iconRect,pixmap);
+-    //                arrowRect = QRect(option.rect.width() - arrowPixmap.width() - margin,(option.rect.height()- arrowPixmap.width())/2 ,arrowPixmap.width(),arrowPixmap.height());
+-                    textRect = QRect(iconPosition.x() + spacing +iconWidth,0 ,textWidth - margin - spacing,option.rect.height());
+-
+-                    if(fm.width(option.text) > textRect.width())
+-                    {
+-                        arrowRect = QRect(textRect.right() + spacing,(option.rect.height()- arrowPixmap.width())/2 ,arrowPixmap.width(),arrowPixmap.height());
++                    if (fm.width(option.text) > textRect.width()) {
++                        arrowRect = QRect(textRect.right() + spacing, (option.rect.height() - arrowPixmap.width()) / 2, arrowPixmap.width(), arrowPixmap.height());
+ 
+-                        QString elidedText = fm.elidedText(option.text,Qt::ElideRight,textRect.width());
+-                        painter.drawText(textRect,tf,elidedText);
+-                        painter.drawPixmap(arrowRect,arrowPixmap);
+-                    }
+-                    else
+-                    {
+-                        textRect = QRect(iconPosition.x() + spacing +iconWidth,0 ,fm.width(option.text),option.rect.height());
+-                        arrowRect = QRect(textRect.right() + spacing,(option.rect.height()- arrowPixmap.width())/2 ,arrowPixmap.width(),arrowPixmap.height());
++                        QString elidedText = fm.elidedText(option.text, Qt::ElideRight, textRect.width());
++                        painter.drawText(textRect, tf, elidedText);
++                        painter.drawPixmap(arrowRect, arrowPixmap);
++                    } else {
++                        textRect = QRect(iconPosition.x() + spacing + iconWidth, 0, fm.width(option.text), option.rect.height());
++                        arrowRect = QRect(textRect.right() + spacing, (option.rect.height() - arrowPixmap.width()) / 2, arrowPixmap.width(), arrowPixmap.height());
+ 
+-                        painter.drawText(textRect,tf,option.text);
+-                        painter.drawPixmap(arrowRect,arrowPixmap);
++                        painter.drawText(textRect, tf, option.text);
++                        painter.drawPixmap(arrowRect, arrowPixmap);
+                     }
+                 }
+-            }
+-            else
+-            {
+-                if(option.icon.isNull())
+-                {
+-                    arrowRect = QRect(option.rect.width() - arrowPixmap.width() - margin,(option.rect.height()- arrowPixmap.width())/2,arrowPixmap.width(),arrowPixmap.height());
+-                    textRect = QRect(margin,iconPosition.y() ,option.rect.width()- iconWidth - margin - spacing ,option.rect.height() );
+-
+-                    if(fm.width(option.text) > textRect.width())
+-                    {
+-    //                    arrowRect = QRect(textRect.right() + spacing,(option.rect.height()- arrowPixmap.width())/2 ,arrowPixmap.width(),arrowPixmap.height());
+-
+-                        QString elidedText = fm.elidedText(option.text,Qt::ElideRight,textRect.width());
+-                        painter.drawText(textRect,tf,elidedText);
+-                        painter.drawPixmap(arrowRect,arrowPixmap);
++            } else {
++                if (option.icon.isNull()) {
++                    arrowRect = QRect(option.rect.width() - arrowPixmap.width() - margin, (option.rect.height() - arrowPixmap.width()) / 2, arrowPixmap.width(), arrowPixmap.height());
++                    textRect = QRect(margin, iconPosition.y(), option.rect.width() - iconWidth - margin - spacing, option.rect.height());
++
++                    if (fm.width(option.text) > textRect.width()) {
++                        //                    arrowRect = QRect(textRect.right() + spacing,(option.rect.height()- arrowPixmap.width())/2 ,arrowPixmap.width(),arrowPixmap.height());
++
++                        QString elidedText = fm.elidedText(option.text, Qt::ElideRight, textRect.width());
++                        painter.drawText(textRect, tf, elidedText);
++                        painter.drawPixmap(arrowRect, arrowPixmap);
++                    } else {
++                        //                    textRect = QRect(margin,iconPosition.y() ,fm.width(option.text) ,option.rect.height() );
++                        //                    arrowRect = QRect(textRect.right() + spacing,(option.rect.height()- arrowPixmap.width())/2 ,arrowPixmap.width(),arrowPixmap.height());
++
++                        painter.drawText(textRect, tf, option.text);
++                        painter.drawPixmap(arrowRect, arrowPixmap);
+                     }
+-                    else
+-                    {
+-    //                    textRect = QRect(margin,iconPosition.y() ,fm.width(option.text) ,option.rect.height() );
+-    //                    arrowRect = QRect(textRect.right() + spacing,(option.rect.height()- arrowPixmap.width())/2 ,arrowPixmap.width(),arrowPixmap.height());
+-
+-                        painter.drawText(textRect,tf,option.text);
+-                        painter.drawPixmap(arrowRect,arrowPixmap);
+-                    }
+-
+-                }
+-                else
+-                {
+-    //                arrowRect = QRect(option.rect.width() - arrowPixmap.width() - margin,(option.rect.height()- arrowPixmap.width())/2 ,arrowPixmap.width(),arrowPixmap.height());
+-                    textRect = QRect(iconPosition.x() + spacing +iconWidth,0 ,textWidth - margin - spacing,option.rect.height());
+-                    painter.drawPixmap(iconRect,pixmap);
+ 
+-                    if(fm.width(option.text) > textRect.width())
+-                    {
+-                        arrowRect = QRect(textRect.right() + spacing,(option.rect.height()- arrowPixmap.width())/2 ,arrowPixmap.width(),arrowPixmap.height());
+-                        QString elidedText = fm.elidedText(option.text,Qt::ElideRight,textRect.width());
+-                        painter.drawText(textRect,tf,elidedText);
+-                        painter.drawPixmap(arrowRect,arrowPixmap);
+-                    }
+-                    else
+-                    {
+-                        textRect = QRect(iconPosition.x() + spacing +iconWidth,0 ,fm.width(option.text),option.rect.height());
+-                        arrowRect = QRect(textRect.right() + spacing,(option.rect.height()- arrowPixmap.width())/2 ,arrowPixmap.width(),arrowPixmap.height());
+-                        painter.drawText(textRect,tf,option.text);
+-                        painter.drawPixmap(arrowRect,arrowPixmap);
++                } else {
++                    //                arrowRect = QRect(option.rect.width() - arrowPixmap.width() - margin,(option.rect.height()- arrowPixmap.width())/2 ,arrowPixmap.width(),arrowPixmap.height());
++                    textRect = QRect(iconPosition.x() + spacing + iconWidth, 0, textWidth - margin - spacing, option.rect.height());
++                    painter.drawPixmap(iconRect, pixmap);
++
++                    if (fm.width(option.text) > textRect.width()) {
++                        arrowRect = QRect(textRect.right() + spacing, (option.rect.height() - arrowPixmap.width()) / 2, arrowPixmap.width(), arrowPixmap.height());
++                        QString elidedText = fm.elidedText(option.text, Qt::ElideRight, textRect.width());
++                        painter.drawText(textRect, tf, elidedText);
++                        painter.drawPixmap(arrowRect, arrowPixmap);
++                    } else {
++                        textRect = QRect(iconPosition.x() + spacing + iconWidth, 0, fm.width(option.text), option.rect.height());
++                        arrowRect = QRect(textRect.right() + spacing, (option.rect.height() - arrowPixmap.width()) / 2, arrowPixmap.width(), arrowPixmap.height());
++                        painter.drawText(textRect, tf, option.text);
++                        painter.drawPixmap(arrowRect, arrowPixmap);
+                     }
+                 }
+             }
+-        }
+-        else
+-        {
+-            if(!q->isEnabled())
+-            {
++        } else {
++            if (!q->isEnabled()) {
+                 qreal opacity = 0.35;
+                 fontColor.setAlphaF(opacity);
+-                QPen pen ;
++                QPen pen;
+                 pen.setColor(fontColor);
+                 painter.setPen(pen);
+-                if(option.icon.isNull() )
+-                {
+-                    QString elidedText = fm.elidedText(option.text,Qt::ElideRight,option.rect.width() - 10);
+-                    if(fm.width(option.text) > option.rect.width() - 10)
+-                    {
+-                        painter.drawText(option.rect.adjusted(margin,0,-margin,0),tf,elidedText);
++                if (option.icon.isNull()) {
++                    QString elidedText = fm.elidedText(option.text, Qt::ElideRight, option.rect.width() - 10);
++                    if (fm.width(option.text) > option.rect.width() - 10) {
++                        painter.drawText(option.rect.adjusted(margin, 0, -margin, 0), tf, elidedText);
+                         q->setToolTip(option.text);
+-                    }
+-                    else
+-                    {
+-                        painter.drawText(option.rect.adjusted(margin,0,-margin,0),tf,option.text);
++                    } else {
++                        painter.drawText(option.rect.adjusted(margin, 0, -margin, 0), tf, option.text);
+                         q->setToolTip("");
+                     }
+-                }
+-                else
+-                {
++                } else {
+                     QString elidedText = option.text;
+-                    if(elidedText.isEmpty())
+-                    {
+-                        iconRect = QRect((q->rect().width() - iconWidth)/2+1,iconPosition.y()-1,iconWidth,iconHeight);
+-                    }
+-                    else
+-                    {
+-                        if( (fm.width(option.text) > option.rect.width() - margin*2 - spacing - iconWidth))
+-                        {
+-                            iconRect = QRect(margin,iconPosition.y(),iconWidth,iconHeight);
+-                            textRect = QRect(iconRect.right() + spacing,0,option.rect.width() - margin*2 - spacing - iconWidth,option.rect.height());
+-                            elidedText = fm.elidedText(option.text,Qt::ElideRight,textRect.width());
++                    if (elidedText.isEmpty()) {
++                        iconRect = QRect((q->rect().width() - iconWidth) / 2 + 1, iconPosition.y() - 1, iconWidth, iconHeight);
++                    } else {
++                        if ((fm.width(option.text) > option.rect.width() - margin * 2 - spacing - iconWidth)) {
++                            iconRect = QRect(margin, iconPosition.y(), iconWidth, iconHeight);
++                            textRect = QRect(iconRect.right() + spacing, 0, option.rect.width() - margin * 2 - spacing - iconWidth, option.rect.height());
++                            elidedText = fm.elidedText(option.text, Qt::ElideRight, textRect.width());
+                             q->setToolTip(option.text);
+-                        }
+-                        else
+-                        {
+-                            textRect = QRect(iconRect.right() + spacing,0,option.rect.width() - margin*2 - spacing - iconWidth,option.rect.height());
++                        } else {
++                            textRect = QRect(iconRect.right() + spacing, 0, option.rect.width() - margin * 2 - spacing - iconWidth, option.rect.height());
+                         }
+                     }
+-                    painter.drawPixmap(iconRect,pixmap);
+-                    painter.drawText(textRect,tf,elidedText);
++                    painter.drawPixmap(iconRect, pixmap);
++                    painter.drawText(textRect, tf, elidedText);
+                 }
+-            }
+-            else
+-            {
+-                if(option.icon.isNull()){
+-                    if(fm.width(option.text) > option.rect.width() - 10)
+-                    {
+-                        QString elidedText = fm.elidedText(option.text,Qt::ElideRight,option.rect.width() - 10);
+-                        painter.drawText(option.rect.adjusted(margin,0,-margin,0),tf,elidedText);
++            } else {
++                if (option.icon.isNull()) {
++                    if (fm.width(option.text) > option.rect.width() - 10) {
++                        QString elidedText = fm.elidedText(option.text, Qt::ElideRight, option.rect.width() - 10);
++                        painter.drawText(option.rect.adjusted(margin, 0, -margin, 0), tf, elidedText);
+                         q->setToolTip(option.text);
+-                    }
+-                    else
+-                    {
+-                        painter.drawText(option.rect.adjusted(margin,0,-margin,0),tf,option.text);
++                    } else {
++                        painter.drawText(option.rect.adjusted(margin, 0, -margin, 0), tf, option.text);
+                         q->setToolTip("");
+                     }
+-                }
+-                else
+-                {
++                } else {
+                     QString elidedText = option.text;
+-                    if(elidedText.isEmpty())
+-                    {
+-                        iconRect = QRect((q->rect().width() - iconWidth)/2+1,iconPosition.y()-1,iconWidth,iconHeight);
+-                    }
+-                    else
+-                    {
+-                        if( (fm.width(option.text) > option.rect.width() - margin*2 - spacing - iconWidth))
+-                        {
+-                            iconRect = QRect(margin,iconPosition.y(),iconWidth,iconHeight);
+-                            textRect = QRect(iconRect.right() + spacing,0,option.rect.width() - margin*2 - spacing - iconWidth,option.rect.height());
+-                            elidedText = fm.elidedText(option.text,Qt::ElideRight,textRect.width());
++                    if (elidedText.isEmpty()) {
++                        iconRect = QRect((q->rect().width() - iconWidth) / 2 + 1, iconPosition.y() - 1, iconWidth, iconHeight);
++                    } else {
++                        if ((fm.width(option.text) > option.rect.width() - margin * 2 - spacing - iconWidth)) {
++                            iconRect = QRect(margin, iconPosition.y(), iconWidth, iconHeight);
++                            textRect = QRect(iconRect.right() + spacing, 0, option.rect.width() - margin * 2 - spacing - iconWidth, option.rect.height());
++                            elidedText = fm.elidedText(option.text, Qt::ElideRight, textRect.width());
+                             q->setToolTip(option.text);
+-                        }
+-                        else
+-                        {
+-                            textRect = QRect(iconRect.right() + spacing,0,option.rect.width() - margin*2 - spacing - iconWidth,option.rect.height());
++                        } else {
++                            textRect = QRect(iconRect.right() + spacing, 0, option.rect.width() - margin * 2 - spacing - iconWidth, option.rect.height());
+                         }
+                     }
+-                    painter.drawPixmap(iconRect,pixmap);
+-                    painter.drawText(textRect,tf,elidedText);
++                    painter.drawPixmap(iconRect, pixmap);
++                    painter.drawText(textRect, tf, elidedText);
+                 }
+             }
+         }
+diff --git a/kysdk-qtwidgets/src/kpushbutton.h b/kysdk-qtwidgets/src/kpushbutton.h
+index 47c6d26..81b8cec 100644
+--- a/kysdk-qtwidgets/src/kpushbutton.h
++++ b/kysdk-qtwidgets/src/kpushbutton.h
+@@ -24,10 +24,11 @@
+ #define KPUSHBUTTON_H
+ 
+ #include "gui_g.h"
+-#include <QWidget>
+ #include <QPushButton>
++#include <QWidget>
+ 
+-namespace kdk {
++namespace kdk
++{
+ 
+ /**
+  * @defgroup PushbuttonModule
+@@ -41,32 +42,28 @@ class KPushButtonPrivate;
+  * @since 1.2
+  */
+ 
+-class GUI_EXPORT KPushButton:public QPushButton
++class GUI_EXPORT KPushButton : public QPushButton
+ {
+     Q_OBJECT
+ public:
+-
+     /**
+      * @brief 支持两种样式的按钮
+      */
+-    enum ButtonType
+-    {
++    enum ButtonType {
+         NormalType,
+         CircleType,
+         GrayType,
+         ShadowType
+     };
+ 
+-    enum ArrowDirection
+-    {
++    enum ArrowDirection {
+         ArrowTop,
+         ArrowBottom,
+         ArrowLeft,
+         ArrowRight
+     };
+ 
+-    KPushButton(QWidget* parent = nullptr);
+-
++    KPushButton(QWidget *parent = nullptr);
+ 
+     ~KPushButton();
+ 
+@@ -85,7 +82,7 @@ public:
+      * @param topRight(右上)
+      * @param bottomRight(右下)
+      */
+-    void setBorderRadius(int bottomLeft,int topLeft,int topRight,int bottomRight);
++    void setBorderRadius(int bottomLeft, int topLeft, int topRight, int bottomRight);
+ 
+     /**
+      * @brief 获取按钮圆角
+@@ -116,7 +113,7 @@ public:
+      * @return
+      */
+     ButtonType buttonType();
+-    
++
+     /**
+      * @brief 设置KPushButton是否为半透明
+      * @param flag
+@@ -171,7 +168,7 @@ public:
+      * @param arrowDirection
+      * @since 2.4
+      */
+-    void setArrow(bool flag,ArrowDirection arrowDirection = ArrowBottom);
++    void setArrow(bool flag, ArrowDirection arrowDirection = ArrowBottom);
+ 
+     /**
+      * @brief 返回是否显示箭头
+@@ -190,7 +187,7 @@ protected:
+ 
+ private:
+     Q_DECLARE_PRIVATE(KPushButton)
+-    KPushButtonPrivate * const d_ptr;
++    KPushButtonPrivate *const d_ptr;
+ };
+ 
+ }
+diff --git a/kysdk-qtwidgets/src/ksearchlineedit.cpp b/kysdk-qtwidgets/src/ksearchlineedit.cpp
+index 5a09ff8..4bcfa15 100644
+--- a/kysdk-qtwidgets/src/ksearchlineedit.cpp
++++ b/kysdk-qtwidgets/src/ksearchlineedit.cpp
+@@ -20,52 +20,55 @@
+  *
+  */
+ 
+-#include <QLabel>
+-#include <QPixmap>
+-#include <QPushButton>
+-#include <QPropertyAnimation>
+-#include <QBoxLayout>
++#include "ksearchlineedit.h"
++#include "klineframe.h"
++#include "kshadowhelper.h"
++#include "ktoolbutton.h"
++#include "parmscontroller.h"
++#include "themeController.h"
++#include <QAbstractItemView>
+ #include <QAction>
+-#include <QEvent>
+-#include <QStringListModel>
++#include <QApplication>
++#include <QBoxLayout>
+ #include <QCompleter>
+-#include <QAbstractItemView>
+-#include <QStyledItemDelegate>
++#include <QCursor>
+ #include <QDebug>
+-#include <QStyleOption>
++#include <QEvent>
++#include <QLabel>
++#include <QLinearGradient>
+ #include <QListView>
++#include <QMouseEvent>
+ #include <QPainter>
+-#include <QPalette>
+-#include "ksearchlineedit.h"
+-#include "themeController.h"
+-#include <QApplication>
+-#include <QStyle>
+-#include <QProxyStyle>
+ #include <QPainterPath>
+-#include <QToolTip>
+-#include <QCursor>
+-#include <QLinearGradient>
++#include <QPalette>
+ #include <QPixmap>
++#include <QPropertyAnimation>
++#include <QProxyStyle>
++#include <QPushButton>
++#include <QStringListModel>
++#include <QStyle>
++#include <QStyleOption>
++#include <QStyledItemDelegate>
+ #include <QTimer>
+-#include <QMouseEvent>
+-#include "kshadowhelper.h"
+-#include "parmscontroller.h"
+-#include "ktoolbutton.h"
+-#include "klineframe.h"
++#include <QToolTip>
+ 
+ namespace kdk
+ {
+ 
+-class MyStyle:public QProxyStyle
++class MyStyle : public QProxyStyle
+ {
+ public:
+-    MyStyle(){}
+-    ~MyStyle(){}
++    MyStyle()
++    {
++    }
++    ~MyStyle()
++    {
++    }
+ 
+     void drawControl(QStyle::ControlElement element,
+-                        const QStyleOption *option,
+-                        QPainter *painter,
+-                        const QWidget *widget = nullptr) const override;
++                     const QStyleOption *option,
++                     QPainter *painter,
++                     const QWidget *widget = nullptr) const override;
+ 
+     QRect subElementRect(QStyle::SubElement element,
+                          const QStyleOption *option,
+@@ -75,23 +78,26 @@ public:
+ class CursorProxyStyle : public QProxyStyle
+ {
+ public:
+-    CursorProxyStyle(){}
+-    ~CursorProxyStyle(){}
++    CursorProxyStyle()
++    {
++    }
++    ~CursorProxyStyle()
++    {
++    }
+ 
+-    virtual int pixelMetric(PixelMetric metric, const QStyleOption* option = 0, const QWidget* widget = 0) const
++    virtual int pixelMetric(PixelMetric metric, const QStyleOption *option = 0, const QWidget *widget = 0) const
+     {
+-        if (metric == QStyle::PM_TextCursorWidth)
+-        {
++        if (metric == QStyle::PM_TextCursorWidth) {
+             return 0;
+         }
+         return QProxyStyle::pixelMetric(metric, option, widget);
+     }
+ };
+ 
+-class ListViewDelegate:public QStyledItemDelegate,public ThemeController
++class ListViewDelegate : public QStyledItemDelegate, public ThemeController
+ {
+ public:
+-    ListViewDelegate(QObject*parent);
++    ListViewDelegate(QObject *parent);
+ 
+ protected:
+     void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override;
+@@ -102,13 +108,13 @@ static const int iconMargin = 6;
+ static const int buttonMargin = 6;
+ static const int icontextSpacing = 5;
+ 
+-class KSearchLineEditPrivate:public QObject,public ThemeController
++class KSearchLineEditPrivate : public QObject, public ThemeController
+ {
+     Q_OBJECT
+     Q_DECLARE_PUBLIC(KSearchLineEdit)
+ 
+ public:
+-    KSearchLineEditPrivate(KSearchLineEdit*parent);
++    KSearchLineEditPrivate(KSearchLineEdit *parent);
+     void adjustHolderRect();
+     void adjustLayout();
+ 
+@@ -118,17 +124,18 @@ public Q_SLOTS:
+ 
+ protected:
+     void changeTheme();
++
+ private:
+-    KSearchLineEdit* q_ptr;
+-    QHBoxLayout* m_pWidgetLayout;
+-    QWidget* m_pWidget;
+-    QLabel* m_pTextLabel;
+-    QLabel* m_pIconLabel;
+-    QPropertyAnimation* m_pAnimation;
++    KSearchLineEdit *q_ptr;
++    QHBoxLayout *m_pWidgetLayout;
++    QWidget *m_pWidget;
++    QLabel *m_pTextLabel;
++    QLabel *m_pIconLabel;
++    QPropertyAnimation *m_pAnimation;
+     bool m_isSearching;
+-    QStringListModel* m_pListModel;
++    QStringListModel *m_pListModel;
+     QStringList m_List;
+-    QCompleter* m_pCompleter;
++    QCompleter *m_pCompleter;
+ 
+     QString m_placeHolderText;
+     Qt::Alignment m_placeHolderAlignment;
+@@ -154,47 +161,45 @@ private:
+     void init();
+     QString m_systemName;
+     bool m_contextMenu;
+-
+ };
+ 
+ KSearchLineEdit::KSearchLineEdit(QWidget *parent)
+-    :QLineEdit(parent),
+-      d_ptr(new KSearchLineEditPrivate(this))
++    : QLineEdit(parent)
++    , d_ptr(new KSearchLineEditPrivate(this))
+ {
+     Q_D(KSearchLineEdit);
+ 
+     setFocusPolicy(Qt::ClickFocus);
+-    //应设计师要求,1.2.0.8之后的版本默认显示右键菜单
+-    //setContextMenuPolicy(Qt::NoContextMenu);
++    // 应设计师要求,1.2.0.8之后的版本默认显示右键菜单
++    // setContextMenuPolicy(Qt::NoContextMenu);
+     d->init();
+     installEventFilter(this);
+     d->m_pCustomButton->installEventFilter(this);
+     d->m_pClearButton->installEventFilter(this);
+ 
+-    connect(d->m_pAnimation,&QPropertyAnimation::finished,d,&KSearchLineEditPrivate::doAnimationFinished);
+-    connect(d->m_gsetting,&QGSettings::changed,d,&KSearchLineEditPrivate::changeTheme);
+-    connect(this,&KSearchLineEdit::editingFinished,d,&KSearchLineEditPrivate::doEditingFinished);
+-    connect(this,&KSearchLineEdit::returnPressed,this,&KSearchLineEdit::clearFocus);
+-    connect(Parmscontroller::self(),&Parmscontroller::modeChanged,this,[=](){
++    connect(d->m_pAnimation, &QPropertyAnimation::finished, d, &KSearchLineEditPrivate::doAnimationFinished);
++    connect(d->m_gsetting, &QGSettings::changed, d, &KSearchLineEditPrivate::changeTheme);
++    connect(this, &KSearchLineEdit::editingFinished, d, &KSearchLineEditPrivate::doEditingFinished);
++    connect(this, &KSearchLineEdit::returnPressed, this, &KSearchLineEdit::clearFocus);
++    connect(Parmscontroller::self(), &Parmscontroller::modeChanged, this, [=]() {
+         updateGeometry();
+     });
+ 
+-    connect(this,&QLineEdit::textChanged,this,[=](){
+-        if(!text().isEmpty()&&d->m_pClearButton->isEnabled() &&hasFocus() && d->m_isClearVisible)
+-        {
+-                d->m_pClearButton->show();
+-                d->adjustLayout();
+-        }
+-        else
+-        {
++    connect(this, &QLineEdit::textChanged, this, [=]() {
++        if (!text().isEmpty() && d->m_pClearButton->isEnabled() && hasFocus() && d->m_isClearVisible) {
++            d->m_pClearButton->show();
++            d->adjustLayout();
++        } else {
+             d->m_pClearButton->hide();
+             d->adjustLayout();
+         }
+     });
+-    connect(d->m_pClearButton,&QPushButton::clicked,this,[=](){this->clear();});
+-    connect(d->m_pAnimation,&QPropertyAnimation::finished,this,[=](){
++    connect(d->m_pClearButton, &QPushButton::clicked, this, [=]() {
++        this->clear();
++    });
++    connect(d->m_pAnimation, &QPropertyAnimation::finished, this, [=]() {
+         d->sltUpdateCursorRect();
+-        if(hasFocus())
++        if (hasFocus())
+             d->m_timer->start();
+         else
+             d->m_timer->stop();
+@@ -202,15 +207,14 @@ KSearchLineEdit::KSearchLineEdit(QWidget *parent)
+ 
+     d->changeTheme();
+ 
+-    CursorProxyStyle* style = new CursorProxyStyle();
++    CursorProxyStyle *style = new CursorProxyStyle();
+     this->setStyle(style);
+     d->m_showCursor = false;
+     d->m_timer = new QTimer(this);
+     d->m_timer->setInterval(600);
+-    connect(d->m_timer, &QTimer::timeout, this,[=]{
++    connect(d->m_timer, &QTimer::timeout, this, [=] {
+         d->sltUpdateCursorRect();
+     });
+-
+ }
+ 
+ KSearchLineEdit::~KSearchLineEdit()
+@@ -242,7 +246,7 @@ bool KSearchLineEdit::isClearButtonEnabled() const
+ {
+     Q_D(const KSearchLineEdit);
+     return d->m_pClearButton->isHidden();
+-//    QLineEdit::isClearButtonEnabled();
++    //    QLineEdit::isClearButtonEnabled();
+ }
+ 
+ QString KSearchLineEdit::placeholderText() const
+@@ -287,7 +291,7 @@ void KSearchLineEdit::setTranslucent(bool flag)
+     d->m_isTranslucentFlag = flag;
+     d->m_isTranslucent = flag;
+     d->changeTheme();
+-    setProperty("needTranslucent",flag);
++    setProperty("needTranslucent", flag);
+ }
+ 
+ bool KSearchLineEdit::isTranslucent()
+@@ -316,9 +320,8 @@ KToolButton *KSearchLineEdit::customButton()
+ void KSearchLineEdit::setGradation(bool flag)
+ {
+     Q_D(KSearchLineEdit);
+-    if(flag)
+-    {
+-        if(d->m_pCustomButton->isChecked())
++    if (flag) {
++        if (d->m_pCustomButton->isChecked())
+             d->m_isCustomButton = true;
+         else
+             d->m_isCustomButton = false;
+@@ -344,18 +347,15 @@ void KSearchLineEdit::clear()
+ {
+     Q_D(KSearchLineEdit);
+ 
+-    if(this->text().isEmpty())
++    if (this->text().isEmpty())
+         return;
+     QLineEdit::clear();
+     d->isTextEmpty = true;
+-    if(this->hasFocus())
+-    {
++    if (this->hasFocus()) {
+         d->m_pTextLabel->setVisible(false);
+         d->m_pTextLabel->adjustSize();
+         d->m_pWidget->update();
+-    }
+-    else
+-    {
++    } else {
+         d->m_pTextLabel->setVisible(true);
+         d->m_pTextLabel->adjustSize();
+         d->adjustHolderRect();
+@@ -370,72 +370,58 @@ bool KSearchLineEdit::eventFilter(QObject *watched, QEvent *event)
+     Q_D(KSearchLineEdit);
+ 
+     QFont font;
+-    font=QApplication::font();
++    font = QApplication::font();
+     QFontMetrics fm(font);
+ 
+-    if(watched == this)
+-    {
++    if (watched == this) {
+         switch (event->type()) {
+         case QEvent::ContextMenu:
+-            if(!d->m_contextMenu)
++            if (!d->m_contextMenu)
+                 d->m_contextMenu = true;
+             break;
+-        case QEvent::Show:
+-        {
++        case QEvent::Show: {
+             d->adjustHolderRect();
+-            if(text().isEmpty())
++            if (text().isEmpty())
+                 d->m_pWidget->setGeometry(d->m_holderRect);
+             else
+                 d->m_pWidget->setGeometry(d->m_sideRect);
+             break;
+         }
+-        case QEvent::FocusIn:
+-        {
+-            if(d->m_contextMenu)
++        case QEvent::FocusIn: {
++            if (d->m_contextMenu)
+                 d->m_contextMenu = false;
+             d->m_pTextLabel->setVisible(false);
+-            //文本为空时获取焦点延时显示光标
+-            if(text().isEmpty())
+-            {
+-                d->m_showCursor =false;
++            // 文本为空时获取焦点延时显示光标
++            if (text().isEmpty()) {
++                d->m_showCursor = false;
+             }
+             d->m_isSearching = true;
+             d->m_hasFocus = false;
+-            if(!this->text().isEmpty())
+-            {
+-                if(d->isTextEmpty)
+-                {
+-//                    d->m_pTextLabel->setVisible(false);
+-                    d->isTextEmpty=false;
++            if (!this->text().isEmpty()) {
++                if (d->isTextEmpty) {
++                    //                    d->m_pTextLabel->setVisible(false);
++                    d->isTextEmpty = false;
+                 }
+-            }
+-            else
+-            {
+-                if(d->isTextEmpty)
+-                {
++            } else {
++                if (d->isTextEmpty) {
+                     d->adjustHolderRect();
+                     d->m_pAnimation->setStartValue(d->m_holderRect);
+                     d->m_pAnimation->setEndValue(d->m_sideRect);
+                     d->m_pAnimation->start();
+                     d->isTextEmpty = false;
+                 }
+-//                d->m_pTextLabel->setVisible(false);
++                //                d->m_pTextLabel->setVisible(false);
+             }
+             d->adjustLayout();
+-            break ;
++            break;
+         }
+-        case QEvent::FocusOut:
+-        {
+-            if(!d->m_contextMenu)
+-            {
++        case QEvent::FocusOut: {
++            if (!d->m_contextMenu) {
+                 d->m_isSearching = false;
+                 d->m_hasFocus = true;
+-                if(!this->text().isEmpty())
+-                {
++                if (!this->text().isEmpty()) {
+                     d->m_pTextLabel->setVisible(false);
+-                }
+-                else
+-                {
++                } else {
+                     d->m_pTextLabel->setVisible(true);
+                     d->adjustHolderRect();
+                     d->m_pAnimation->setStartValue(d->m_sideRect);
+@@ -448,11 +434,9 @@ bool KSearchLineEdit::eventFilter(QObject *watched, QEvent *event)
+             break;
+         }
+         case QEvent::HoverEnter:
+-        case QEvent::HoverMove:
+-        {
+-            if(width()-icontextSpacing-d->m_pIconLabel->width()<fm.width(d->m_placeHolderText))
+-            {
+-                if(d->m_hasFocus)
++        case QEvent::HoverMove: {
++            if (width() - icontextSpacing - d->m_pIconLabel->width() < fm.width(d->m_placeHolderText)) {
++                if (d->m_hasFocus)
+                     setToolTip(d->m_placeHolderText);
+                 else
+                     setToolTip("");
+@@ -463,99 +447,84 @@ bool KSearchLineEdit::eventFilter(QObject *watched, QEvent *event)
+             break;
+         }
+     }
+-    if(watched == d->m_pCustomButton )
+-    {
+-        if(event->type() == QEvent::HoverEnter || event->type() == QEvent::HoverMove )
++    if (watched == d->m_pCustomButton) {
++        if (event->type() == QEvent::HoverEnter || event->type() == QEvent::HoverMove)
+             d->m_isCustomButtonHover = true;
+-        if(event->type() == QEvent::Leave )
++        if (event->type() == QEvent::Leave)
+             d->m_isCustomButtonHover = false;
+     }
+ 
+-    if(watched == d->m_pClearButton )
+-    {
+-        if(event->type() == QEvent::HoverEnter || event->type() == QEvent::HoverMove )
++    if (watched == d->m_pClearButton) {
++        if (event->type() == QEvent::HoverEnter || event->type() == QEvent::HoverMove)
+             d->m_isClearHover = true;
+-        if(event->type() == QEvent::Leave )
++        if (event->type() == QEvent::Leave)
+             d->m_isClearHover = false;
+     }
+ 
+-    return QLineEdit::eventFilter(watched,event);
++    return QLineEdit::eventFilter(watched, event);
+ }
+ 
+ void KSearchLineEditPrivate::adjustHolderRect()
+ {
+     Q_Q(KSearchLineEdit);
+     m_pWidget->adjustSize();
+-    auto maxVisualWidth = q->width()-icontextSpacing-m_pIconLabel->width();
++    auto maxVisualWidth = q->width() - icontextSpacing - m_pIconLabel->width();
+     QFont font(QApplication::font());
+     QFontMetrics fm(font);
+-    auto elidedText = fm.elidedText(m_placeHolderText,Qt::ElideRight,maxVisualWidth);
++    auto elidedText = fm.elidedText(m_placeHolderText, Qt::ElideRight, maxVisualWidth);
+     m_pTextLabel->setText(elidedText);
+     m_pWidget->adjustSize();
+ 
+-    if(q->hasFocus())
++    if (q->hasFocus())
+         m_pWidget->setFixedHeight(m_pIconLabel->height());
+     else
+         m_pWidget->setFixedHeight(m_pTextLabel->height());
+ 
+-
+     m_sideRect = m_pWidget->rect();
+-    if(m_systemName == "ug_CN" || m_systemName == "kk_KZ" || m_systemName == "ky_KG")
+-    {
+-        m_sideRect.moveTop((q->rect().height()-m_pWidget->height())/2);
++    if (m_systemName == "ug_CN" || m_systemName == "kk_KZ" || m_systemName == "ky_KG") {
++        m_sideRect.moveTop((q->rect().height() - m_pWidget->height()) / 2);
+         m_sideRect.moveLeft(q->rect().width() - m_sideRect.width() - iconMargin);
+-    }
+-    else
+-    {
+-        m_sideRect.moveTop((q->rect().height()-m_pWidget->height())/2);
++    } else {
++        m_sideRect.moveTop((q->rect().height() - m_pWidget->height()) / 2);
+         m_sideRect.moveLeft(iconMargin);
+     }
+ 
+-    if(m_placeHolderAlignment & Qt::AlignCenter)
+-    {
++    if (m_placeHolderAlignment & Qt::AlignCenter) {
+         m_holderRect = m_pWidget->rect();
+         m_holderRect.moveCenter(q->rect().center());
+-    }
+-    else if(m_placeHolderAlignment & Qt::AlignLeft)
+-    {
++    } else if (m_placeHolderAlignment & Qt::AlignLeft) {
+         m_holderRect = m_pWidget->rect();
+-        m_holderRect.moveTop((q->rect().height()-m_pWidget->height())/2);
++        m_holderRect.moveTop((q->rect().height() - m_pWidget->height()) / 2);
+         m_holderRect.moveLeft(iconMargin);
+     }
+ 
+-    else if(m_placeHolderAlignment & Qt::AlignRight)
+-    {
++    else if (m_placeHolderAlignment & Qt::AlignRight) {
+         m_holderRect = m_pWidget->rect();
+-        m_holderRect.moveTop((q->height()-m_pWidget->height())/2);
++        m_holderRect.moveTop((q->height() - m_pWidget->height()) / 2);
+         m_holderRect.moveRight(q->width() - iconMargin);
+     }
+-
+ }
+ 
+ void KSearchLineEditPrivate::adjustLayout()
+ {
+     Q_Q(KSearchLineEdit);
+     int spacing = 5;
+-    int width = spacing*2;
+-    m_pLineFrame->setFixedHeight(m_pSubWidget->height()-12);
+-    if(!m_pClearButton->isHidden())
+-        width +=(spacing + m_pClearButton->iconSize().width());
+-    if(!m_pLineFrame->isHidden())
+-        width +=(spacing + m_pLineFrame->width());
+-    if(!m_pCustomButton->isHidden())
+-        width +=(spacing + m_pCustomButton->iconSize().width());
+-    m_pSubWidget->setFixedSize(width,q->cursorRect().height());
+-    if(m_systemName == "ug_CN" || m_systemName == "kk_KZ" || m_systemName == "ky_KG")
+-    {
+-        m_pSubWidget->move(0,(q->rect().height()-m_pSubWidget->height())/2 + 1);
+-        q->setTextMargins(m_pSubWidget->width(),0,m_pWidget->width(),0);
+-    }
+-    else
+-    {
+-        m_pSubWidget->move(q->width()-m_pSubWidget->width(),(q->rect().height()-m_pSubWidget->height())/2 + 1);
+-        q->setTextMargins(m_pWidget->width(),0,m_pSubWidget->width(),0);
++    int width = spacing * 2;
++    m_pLineFrame->setFixedHeight(m_pSubWidget->height() - 12);
++    if (!m_pClearButton->isHidden())
++        width += (spacing + m_pClearButton->iconSize().width());
++    if (!m_pLineFrame->isHidden())
++        width += (spacing + m_pLineFrame->width());
++    if (!m_pCustomButton->isHidden())
++        width += (spacing + m_pCustomButton->iconSize().width());
++    m_pSubWidget->setFixedSize(width, q->cursorRect().height());
++    if (m_systemName == "ug_CN" || m_systemName == "kk_KZ" || m_systemName == "ky_KG") {
++        m_pSubWidget->move(0, (q->rect().height() - m_pSubWidget->height()) / 2 + 1);
++        q->setTextMargins(m_pSubWidget->width(), 0, m_pWidget->width(), 0);
++    } else {
++        m_pSubWidget->move(q->width() - m_pSubWidget->width(), (q->rect().height() - m_pSubWidget->height()) / 2 + 1);
++        q->setTextMargins(m_pWidget->width(), 0, m_pSubWidget->width(), 0);
+     }
+-
+ }
+ 
+ void KSearchLineEdit::resizeEvent(QResizeEvent *event)
+@@ -563,7 +532,7 @@ void KSearchLineEdit::resizeEvent(QResizeEvent *event)
+     Q_D(KSearchLineEdit);
+     QLineEdit::resizeEvent(event);
+     d->adjustHolderRect();
+-    if(text().isEmpty() && !hasFocus())
++    if (text().isEmpty() && !hasFocus())
+         d->m_pWidget->setGeometry(d->m_holderRect);
+     else
+         d->m_pWidget->setGeometry(d->m_sideRect);
+@@ -574,16 +543,12 @@ void KSearchLineEdit::setVisible(bool visible)
+ {
+     Q_D(KSearchLineEdit);
+ 
+-
+     QLineEdit::setVisible(visible);
+-    if(!text().isEmpty())
+-    {
++    if (!text().isEmpty()) {
+         d->m_pTextLabel->setVisible(false);
+         d->adjustHolderRect();
+         d->m_pWidget->setGeometry(d->m_sideRect);
+-    }
+-    else
+-    {
++    } else {
+         d->m_pTextLabel->setVisible(true);
+     }
+ }
+@@ -592,74 +557,67 @@ void KSearchLineEdit::paintEvent(QPaintEvent *event)
+ {
+     Q_D(KSearchLineEdit);
+     QLineEdit::paintEvent(event);
+-    d->m_linearGradient = QLinearGradient(QPointF(rect().left(),rect().center().y()),QPointF(rect().right(),rect().center().y()));
++    d->m_linearGradient = QLinearGradient(QPointF(rect().left(), rect().center().y()), QPointF(rect().right(), rect().center().y()));
+ 
+     QPainter painter(this);
+     painter.setRenderHints(QPainter::Antialiasing);
+     painter.setRenderHints(QPainter::SmoothPixmapTransform);
+     painter.setRenderHints(QPainter::HighQualityAntialiasing);
+-    if (this->hasFocus() && d->m_showCursor)
+-    {
++    if (this->hasFocus() && d->m_showCursor) {
+         QRect rect = this->cursorRect();
+-//        painter.fillRect(QRect(rect.center().x()+2, rect.y()+2, 1, rect.height()-4),palette().windowText().color());
+-        painter.fillRect(QRect(rect.center().x() + 2 ,rect.y() + 2 , 1 ,rect.height() - 4) ,ThemeController::getPaletteColorFromDT("windowtext"));
++        //        painter.fillRect(QRect(rect.center().x()+2, rect.y()+2, 1, rect.height()-4),palette().windowText().color());
++        painter.fillRect(QRect(rect.center().x() + 2, rect.y() + 2, 1, rect.height() - 4), ThemeController::getPaletteColorFromDT("windowtext"));
+     }
+ 
+     QPen pen = painter.pen();
+     pen.setWidth(2);
+-    if(isEnabled())
+-    {
++    if (isEnabled()) {
+         d->m_pClearButton->setEnabled(true);
+         d->m_pCustomButton->setEnabled(true);
+-        if(d->m_isCustomButton)
+-        {
+-            d->m_linearGradient.setColorAt(0,QColor(232, 136, 248));
+-            d->m_linearGradient.setColorAt(0.4,QColor(138, 65, 255));
+-            d->m_linearGradient.setColorAt(0.7,QColor(78, 117, 255));
+-            d->m_linearGradient.setColorAt(1,QColor(0, 54, 245));
++        if (d->m_isCustomButton) {
++            d->m_linearGradient.setColorAt(0, QColor(232, 136, 248));
++            d->m_linearGradient.setColorAt(0.4, QColor(138, 65, 255));
++            d->m_linearGradient.setColorAt(0.7, QColor(78, 117, 255));
++            d->m_linearGradient.setColorAt(1, QColor(0, 54, 245));
+             pen.setBrush(d->m_linearGradient);
+-//            d->m_pCustomButton->setIconColor(true,palette().highlight().color());
+-            d->m_pCustomButton->setIconColor(true,ThemeController::getPaletteColorFromDT("highlight"));
+-            if(d->m_isClearHover  && hasFocus())
+-//                d->m_pClearButton->setIconColor(true,palette().windowText().color());
+-                d->m_pClearButton->setIconColor(true,ThemeController::getPaletteColorFromDT("windowtext"));
++            //            d->m_pCustomButton->setIconColor(true,palette().highlight().color());
++            d->m_pCustomButton->setIconColor(true, ThemeController::getPaletteColorFromDT("highlight"));
++            if (d->m_isClearHover && hasFocus())
++                //                d->m_pClearButton->setIconColor(true,palette().windowText().color());
++                d->m_pClearButton->setIconColor(true, ThemeController::getPaletteColorFromDT("windowtext"));
+             else
+-//                d->m_pClearButton->setIconColor(true,palette().mid().color());
+-                d->m_pClearButton->setIconColor(true,ThemeController::getPaletteColorFromDT("mid"));
+-        }
+-        else
+-        {
+-            if(d->m_isCustomButtonHover && hasFocus())
+-//                d->m_pCustomButton->setIconColor(true,palette().windowText().color());
+-                d->m_pCustomButton->setIconColor(true,ThemeController::getPaletteColorFromDT("windowtext"));
++                //                d->m_pClearButton->setIconColor(true,palette().mid().color());
++                d->m_pClearButton->setIconColor(true, ThemeController::getPaletteColorFromDT("mid"));
++        } else {
++            if (d->m_isCustomButtonHover && hasFocus())
++                //                d->m_pCustomButton->setIconColor(true,palette().windowText().color());
++                d->m_pCustomButton->setIconColor(true, ThemeController::getPaletteColorFromDT("windowtext"));
+             else
+-//                d->m_pCustomButton->setIconColor(true,palette().mid().color());
+-                d->m_pCustomButton->setIconColor(true,ThemeController::getPaletteColorFromDT("mid"));
+-            if(d->m_isClearHover  && hasFocus())
+-//                d->m_pClearButton->setIconColor(true,palette().windowText().color());
+-                d->m_pClearButton->setIconColor(true,ThemeController::getPaletteColorFromDT("windowtext"));
++                //                d->m_pCustomButton->setIconColor(true,palette().mid().color());
++                d->m_pCustomButton->setIconColor(true, ThemeController::getPaletteColorFromDT("mid"));
++            if (d->m_isClearHover && hasFocus())
++                //                d->m_pClearButton->setIconColor(true,palette().windowText().color());
++                d->m_pClearButton->setIconColor(true, ThemeController::getPaletteColorFromDT("windowtext"));
+             else
+-//                d->m_pClearButton->setIconColor(true,palette().mid().color());
+-                d->m_pClearButton->setIconColor(true,ThemeController::getPaletteColorFromDT("mid"));
++                //                d->m_pClearButton->setIconColor(true,palette().mid().color());
++                d->m_pClearButton->setIconColor(true, ThemeController::getPaletteColorFromDT("mid"));
+ 
+             pen.setBrush(ThemeController::getPaletteColorFromDT("highlight"));
+         }
+-    }
+-    else
+-    {
+-//        pen.setBrush(palette().color(QPalette::Disabled,QPalette::Button));
+-        pen.setBrush(ThemeController::getPaletteColorFromDT("button",QPalette::Disabled));
++    } else {
++        //        pen.setBrush(palette().color(QPalette::Disabled,QPalette::Button));
++        pen.setBrush(ThemeController::getPaletteColorFromDT("button", QPalette::Disabled));
+         d->m_pClearButton->setEnabled(false);
+         d->m_pCustomButton->setEnabled(false);
+     }
+-    if(!hasFocus() && !d->m_isCustomButton)
++    if (!hasFocus() && !d->m_isCustomButton)
+         painter.setPen(Qt::NoPen);
+     else
+         painter.setPen(pen);
+     int radius = ThemeController::getRadiusFromDT("kradius-normal");
+-    if(radius == -1)
++    if (radius == -1)
+         radius = 6;
+-    painter.drawRoundedRect(rect().adjusted(1,4,-1,-4),radius,radius);
++    painter.drawRoundedRect(rect().adjusted(1, 4, -1, -4), radius, radius);
+ }
+ 
+ QSize KSearchLineEdit::sizeHint() const
+@@ -670,21 +628,21 @@ QSize KSearchLineEdit::sizeHint() const
+ }
+ 
+ KSearchLineEditPrivate::KSearchLineEditPrivate(KSearchLineEdit *parent)
+-    :q_ptr(parent),
+-      m_placeHolderText(tr("Search")),
+-      m_placeHolderAlignment(Qt::AlignCenter),
+-      m_hasFocus(true),
+-      isTextEmpty(true),
+-      m_isTranslucent(false),
+-      m_isTranslucentFlag(false),
+-      m_isClearVisible(false),
+-      m_isCustomButton(false),
+-      m_isCustomButtonHover(false),
+-      m_isClearHover(false),
+-      m_contextMenu(false)
++    : q_ptr(parent)
++    , m_placeHolderText(tr("Search"))
++    , m_placeHolderAlignment(Qt::AlignCenter)
++    , m_hasFocus(true)
++    , isTextEmpty(true)
++    , m_isTranslucent(false)
++    , m_isTranslucentFlag(false)
++    , m_isClearVisible(false)
++    , m_isCustomButton(false)
++    , m_isCustomButtonHover(false)
++    , m_isClearHover(false)
++    , m_contextMenu(false)
+ {
+     Q_Q(KSearchLineEdit);
+-    q->setContentsMargins(0,3,0,3);
++    q->setContentsMargins(0, 3, 0, 3);
+     m_pCompleter = new QCompleter(this);
+     m_pCompleter->setCaseSensitivity(Qt::CaseInsensitive);
+     m_pListModel = new QStringListModel(m_List, this);
+@@ -703,110 +661,94 @@ KSearchLineEditPrivate::KSearchLineEditPrivate(KSearchLineEdit *parent)
+ void KSearchLineEditPrivate::doAnimationFinished()
+ {
+     Q_Q(KSearchLineEdit);
+-    if(m_isSearching)
+-    {
+-        if(m_systemName == "ug_CN" || m_systemName == "kk_KZ" || m_systemName == "ky_KG")
+-            q->setTextMargins(m_pSubWidget->width(),0,iconMargin + m_pIconLabel->width(),0);
++    if (m_isSearching) {
++        if (m_systemName == "ug_CN" || m_systemName == "kk_KZ" || m_systemName == "ky_KG")
++            q->setTextMargins(m_pSubWidget->width(), 0, iconMargin + m_pIconLabel->width(), 0);
+         else
+-            q->setTextMargins(iconMargin + m_pIconLabel->width(),0,m_pSubWidget->width(),0);
++            q->setTextMargins(iconMargin + m_pIconLabel->width(), 0, m_pSubWidget->width(), 0);
+     }
+-
+ }
+ 
+ void KSearchLineEditPrivate::doEditingFinished()
+ {
+     Q_Q(KSearchLineEdit);
+     QString text = q->text();
+-    if(QString::compare(text.trimmed(),"") != 0)
+-    {
++    if (QString::compare(text.trimmed(), "") != 0) {
+         bool flag = m_List.contains(text, Qt::CaseInsensitive);
+-         if(!flag)
+-         {
+-             m_List.append(text);
+-             m_pListModel->setStringList(m_List);
+-         }
++        if (!flag) {
++            m_List.append(text);
++            m_pListModel->setStringList(m_List);
++        }
+     }
+ }
+ 
+ void KSearchLineEditPrivate::changeTheme()
+ {
+     Q_Q(KSearchLineEdit);
+-    if(m_isTranslucentFlag)
+-    {
+-        if(ThemeController::widgetTheme() == ClassicTheme)
+-        {
++    if (m_isTranslucentFlag) {
++        if (ThemeController::widgetTheme() == ClassicTheme) {
+             m_isTranslucent = false;
+-            setProperty("needTranslucent",false);
+-        }
+-        else
+-        {
++            setProperty("needTranslucent", false);
++        } else {
+             m_isTranslucent = true;
+-            setProperty("needTranslucent",true);
++            setProperty("needTranslucent", true);
+         }
+-    }
+-    else
+-    {
++    } else {
+         m_isTranslucent = false;
+-        setProperty("needTranslucent",false);
++        setProperty("needTranslucent", false);
+     }
+     adjustHolderRect();
+-    if(q->text().isEmpty())
++    if (q->text().isEmpty())
+         m_pWidget->setGeometry(m_holderRect);
+     else
+         m_pWidget->setGeometry(m_sideRect);
+ 
+-    QPixmap pixmap = QIcon::fromTheme("search-symbolic").pixmap(QSize(16,16));
++    QPixmap pixmap = QIcon::fromTheme("search-symbolic").pixmap(QSize(16, 16));
+     initThemeStyle();
+ 
+-    if(!q->isEnabled())
+-    {
++    if (!q->isEnabled()) {
+         QPalette palette = q->palette();
+-//        palette.setColor(QPalette::Text,q->palette().color(QPalette::Disabled,QPalette::ButtonText));
+-        palette.setColor(QPalette::Text,ThemeController::getPaletteColorFromDT("buttontext",QPalette::Disabled));
++        //        palette.setColor(QPalette::Text,q->palette().color(QPalette::Disabled,QPalette::ButtonText));
++        palette.setColor(QPalette::Text, ThemeController::getPaletteColorFromDT("buttontext", QPalette::Disabled));
+         m_pTextLabel->setPalette(palette);
+-    }
+-    else
+-    {
++    } else {
+         QPalette palette = q->palette();
+-        #if (QT_VERSION >= QT_VERSION_CHECK(5, 12, 0))
+-//            palette.setColor(QPalette::Text,q->palette().color(QPalette::PlaceholderText));
+-            palette.setColor(QPalette::Text,ThemeController::getPaletteColorFromDT("placeholdertext"));
+-        #else if (QT_VERSION >= QT_VERSION_CHECK(5, 6, 0))
+-//            palette.setColor(QPalette::Text,q->palette().color(QPalette::Shadow));
+-            palette.setColor(QPalette::Text,ThemeController::getPaletteColorFromDT("shadow"));
+-        #endif
++#if (QT_VERSION >= QT_VERSION_CHECK(5, 12, 0))
++        //            palette.setColor(QPalette::Text,q->palette().color(QPalette::PlaceholderText));
++        palette.setColor(QPalette::Text, ThemeController::getPaletteColorFromDT("placeholdertext"));
++#else if (QT_VERSION >= QT_VERSION_CHECK(5, 6, 0))
++        //            palette.setColor(QPalette::Text,q->palette().color(QPalette::Shadow));
++        palette.setColor(QPalette::Text, ThemeController::getPaletteColorFromDT("shadow"));
++#endif
+ 
+         m_pTextLabel->setPalette(palette);
+     }
+ 
+-    if(ThemeController::themeMode() == LightTheme)
+-    {
++    if (ThemeController::themeMode() == LightTheme) {
+         m_pIconLabel->setPixmap(pixmap);
+         auto palette = qApp->palette();
+-        palette.setColor(QPalette::Base,Qt::transparent);
++        palette.setColor(QPalette::Base, Qt::transparent);
+         m_pCompleter->popup()->setPalette(palette);
+         m_pCompleter->popup()->setBackgroundRole(QPalette::Base);
+         m_pCompleter->popup()->setAutoFillBackground(true);
+ 
+-        QPalette lineFramePalette= qApp->palette();
+-        lineFramePalette.setColor(QPalette::Base,QColor(207, 207, 207));
++        QPalette lineFramePalette = qApp->palette();
++        lineFramePalette.setColor(QPalette::Base, QColor(207, 207, 207));
+         m_pLineFrame->setPalette(lineFramePalette);
+-    }
+-    else
+-    {
++    } else {
+         m_pIconLabel->setPixmap(drawSymbolicColoredPixmap(pixmap));
+ 
+         auto palette = qApp->palette();
+-        palette.setColor(QPalette::Base,Qt::transparent);
++        palette.setColor(QPalette::Base, Qt::transparent);
+         m_pCompleter->popup()->setPalette(palette);
+         m_pCompleter->popup()->setBackgroundRole(QPalette::Base);
+         m_pCompleter->popup()->setAutoFillBackground(true);
+ 
+-        QPalette pal=qApp->palette();
++        QPalette pal = qApp->palette();
+         m_pTextLabel->setPalette(pal);
+ 
+-        QPalette lineFramePalette= qApp->palette();
+-        lineFramePalette.setColor(QPalette::Base,QColor(115,115,115));
++        QPalette lineFramePalette = qApp->palette();
++        lineFramePalette.setColor(QPalette::Base, QColor(115, 115, 115));
+         m_pLineFrame->setPalette(lineFramePalette);
+     }
+ }
+@@ -815,7 +757,7 @@ void KSearchLineEditPrivate::sltUpdateCursorRect()
+ {
+     Q_Q(KSearchLineEdit);
+     m_showCursor = !m_showCursor;
+-    QRect rect =q->cursorRect();
++    QRect rect = q->cursorRect();
+     q->update(rect);
+ }
+ 
+@@ -835,8 +777,8 @@ void KSearchLineEditPrivate::init()
+     m_pClearButton->setType(KToolButtonType::Flat);
+     m_pClearButton->setAutoFillBackground(true);
+     m_pClearButton->setPalette(btnPalette);
+-    m_pClearButton->setIconSize(QSize(16,16));
+-    m_pClearButton->setFixedSize(QSize(16,16));
++    m_pClearButton->setIconSize(QSize(16, 16));
++    m_pClearButton->setFixedSize(QSize(16, 16));
+     m_pClearButton->setFocusPolicy(Qt::NoFocus);
+     m_pClearButton->setCursor(Qt::ArrowCursor);
+     m_pClearButton->setIcon(QIcon::fromTheme("application-exit-symbolic"));
+@@ -851,8 +793,8 @@ void KSearchLineEditPrivate::init()
+     m_pCustomButton->setType(KToolButtonType::Flat);
+     m_pCustomButton->setAutoFillBackground(true);
+     m_pCustomButton->setPalette(btnPalette);
+-    m_pCustomButton->setIconSize(QSize(16,16));
+-    m_pCustomButton->setFixedSize(QSize(16,16));
++    m_pCustomButton->setIconSize(QSize(16, 16));
++    m_pCustomButton->setFixedSize(QSize(16, 16));
+     m_pCustomButton->setFocusPolicy(Qt::NoFocus);
+     m_pCustomButton->setCursor(Qt::ArrowCursor);
+     m_pCustomButton->setVisible(false);
+@@ -860,71 +802,67 @@ void KSearchLineEditPrivate::init()
+ 
+     m_pSubWidget = new QWidget(q);
+     QHBoxLayout *layout = new QHBoxLayout(m_pSubWidget);
+-    layout->setContentsMargins(0,0,0,0);
++    layout->setContentsMargins(0, 0, 0, 0);
+     layout->addSpacing(iconMargin);
+     layout->addWidget(m_pClearButton);
+     layout->addWidget(m_pLineFrame);
+     layout->addWidget(m_pCustomButton);
+     layout->addSpacing(iconMargin);
+-    m_pSubWidget->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed);
++    m_pSubWidget->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
+ 
+     m_isSearching = false;
+     m_pTextLabel = new QLabel(tr("Search"));
+     m_pIconLabel = new QLabel;
+     m_pIconLabel->setScaledContents(true);
+-    QPixmap pixmap = QIcon::fromTheme("search-symbolic").pixmap(QSize(16,16));
++    QPixmap pixmap = QIcon::fromTheme("search-symbolic").pixmap(QSize(16, 16));
+     m_pIconLabel->setPixmap(pixmap);
+-    m_pIconLabel->setFixedSize(QSize(16,16));
+-    m_pWidget =new QWidget(q);
++    m_pIconLabel->setFixedSize(QSize(16, 16));
++    m_pWidget = new QWidget(q);
+     m_pWidget->setFocusPolicy(Qt::NoFocus);
+     m_pWidgetLayout = new QHBoxLayout();
+-    m_pWidgetLayout->setContentsMargins(0,0,0,0);
++    m_pWidgetLayout->setContentsMargins(0, 0, 0, 0);
+     m_pWidgetLayout->setMargin(0);
+     m_pWidgetLayout->setSpacing(0);
+-    m_pWidgetLayout->addWidget(m_pIconLabel,Qt::AlignVCenter);
++    m_pWidgetLayout->addWidget(m_pIconLabel, Qt::AlignVCenter);
+     m_pWidgetLayout->addSpacing(icontextSpacing);
+-    m_pWidgetLayout->addWidget(m_pTextLabel,Qt::AlignVCenter);
++    m_pWidgetLayout->addWidget(m_pTextLabel, Qt::AlignVCenter);
+     m_pWidgetLayout->addStretch();
+     m_pWidgetLayout->setSizeConstraint(QLayout::SizeConstraint::SetFixedSize);
+     m_pWidget->setLayout(m_pWidgetLayout);
+-    m_pAnimation = new QPropertyAnimation(m_pWidget,"geometry");
++    m_pAnimation = new QPropertyAnimation(m_pWidget, "geometry");
+     m_pAnimation->setEasingCurve(QEasingCurve::InOutQuad);
+     m_pAnimation->setDuration(100);
+ 
+     m_systemName = QLocale::system().name();
+-    if(m_systemName == "ug_CN" || m_systemName == "kk_KZ" || m_systemName == "ky_KG")
++    if (m_systemName == "ug_CN" || m_systemName == "kk_KZ" || m_systemName == "ky_KG")
+         q->setAlignment(Qt::AlignRight);
+     else
+         q->setAlignment(Qt::AlignLeft);
+ 
+-    q->setTextMargins(iconMargin + m_pIconLabel->width(),0,m_pSubWidget->width(),0);
++    q->setTextMargins(iconMargin + m_pIconLabel->width(), 0, m_pSubWidget->width(), 0);
+ }
+ 
+-ListViewDelegate::ListViewDelegate(QObject *parent):QStyledItemDelegate(parent)
++ListViewDelegate::ListViewDelegate(QObject *parent)
++    : QStyledItemDelegate(parent)
+ {
+-
+ }
+ 
+-
+ void ListViewDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
+ {
+     QRect rect;
+     rect.setX(option.rect.x());
+-    rect.setY(option.rect.y()+1);
++    rect.setY(option.rect.y() + 1);
+     rect.setWidth(option.rect.width());
+     rect.setHeight(option.rect.height());
+ 
+     qreal radius;
+-    if(ThemeController::widgetTheme() == ClassicTheme)
+-    {
+-        if(painter->pen().width() == 1)
+-            painter->translate(0.5,0.5);
++    if (ThemeController::widgetTheme() == ClassicTheme) {
++        if (painter->pen().width() == 1)
++            painter->translate(0.5, 0.5);
+         radius = 0;
+-    }
+-    else
+-    {
++    } else {
+         radius = ThemeController::getRadiusFromDT("kradius-normal");
+-        if(radius == -1)
++        if (radius == -1)
+             radius = 6;
+     }
+     QPainterPath path;
+@@ -940,94 +878,73 @@ void ListViewDelegate::paint(QPainter *painter, const QStyleOptionViewItem &opti
+ 
+     painter->setRenderHint(QPainter::Antialiasing);
+     QColor color = Qt::transparent;
+-//    QColor fontColor = qApp->palette().color(QPalette::ButtonText);
++    //    QColor fontColor = qApp->palette().color(QPalette::ButtonText);
+     QColor fontColor = ThemeController::getPaletteColorFromDT("buttontext");
+ 
+-    if(ThemeController::themeMode() == ThemeFlag::LightTheme){
+-        if(!(option.state & QStyle::State_Enabled))
+-        {
+-            color=QColor("#FFB3B3B3");
+-        }
+-        else if(((option.state & QStyle::State_HasFocus) || (option.state & QStyle::State_Selected)|| (option.state & QStyle::State_MouseOver)))
++    if (ThemeController::themeMode() == ThemeFlag::LightTheme) {
++        if (!(option.state & QStyle::State_Enabled)) {
++            color = QColor("#FFB3B3B3");
++        } else if (((option.state & QStyle::State_HasFocus) || (option.state & QStyle::State_Selected) || (option.state & QStyle::State_MouseOver))) {
++            if (option.state.testFlag(QStyle::State_HasFocus) && option.state.testFlag(QStyle::State_Selected)) // QStyle::State_Enabled
+             {
+-                if(option.state.testFlag(QStyle::State_HasFocus) && option.state.testFlag(QStyle::State_Selected)) //QStyle::State_Enabled
+-                {
+-                    if(ThemeController::widgetTheme() == ClassicTheme)
+-                    {
+-                        color = ThemeController::highlightClick(false,option.palette);
+-                        color = ThemeController::adjustH(color,-2);
+-                        color = ThemeController::adjustS(color,-30);
+-                        color = ThemeController::adjustL(color,-40);
+-                    }
+-                    else
+-//                        color = option.palette.highlight().color();
+-                        color = ThemeController::getPaletteColorFromDT("highlight");
+-                    fontColor = QColor(255,255,255);
+-                }
+-                else if((option.state & QStyle::State_MouseOver))
+-                {
+-                    if(ThemeController::widgetTheme() == ClassicTheme)
+-                    {
+-                        color = ThemeController::highlightHover(false,option.palette);
+-                        color = ThemeController::adjustH(color,-3);
+-                        color = ThemeController::adjustS(color,-26);
+-                        color = ThemeController::adjustL(color,-45);
+-                    }
+-                    else
+-//                        color = option.palette.highlight().color();
+-                        color = ThemeController::getPaletteColorFromDT("highlight");
+-                    fontColor = QColor(255,255,255);
+-                }
+-                else {
+-//                    color = option.palette.windowText().color();
+-                    color = ThemeController::getPaletteColorFromDT("windowtext");
+-                    color.setAlphaF(0.05);
+-                }
+-                painter->save();
+-                painter->setPen(QPen(Qt::NoPen));
+-                painter->setBrush(color);
+-                painter->drawPath(path);
+-                painter->restore();
++                if (ThemeController::widgetTheme() == ClassicTheme) {
++                    color = ThemeController::highlightClick(false, option.palette);
++                    color = ThemeController::adjustH(color, -2);
++                    color = ThemeController::adjustS(color, -30);
++                    color = ThemeController::adjustL(color, -40);
++                } else
++                    //                        color = option.palette.highlight().color();
++                    color = ThemeController::getPaletteColorFromDT("highlight");
++                fontColor = QColor(255, 255, 255);
++            } else if ((option.state & QStyle::State_MouseOver)) {
++                if (ThemeController::widgetTheme() == ClassicTheme) {
++                    color = ThemeController::highlightHover(false, option.palette);
++                    color = ThemeController::adjustH(color, -3);
++                    color = ThemeController::adjustS(color, -26);
++                    color = ThemeController::adjustL(color, -45);
++                } else
++                    //                        color = option.palette.highlight().color();
++                    color = ThemeController::getPaletteColorFromDT("highlight");
++                fontColor = QColor(255, 255, 255);
++            } else {
++                //                    color = option.palette.windowText().color();
++                color = ThemeController::getPaletteColorFromDT("windowtext");
++                color.setAlphaF(0.05);
+             }
+-    }
+-    else{
+-
+-        if(!(option.state & QStyle::State_Enabled))
+-        {
+-            color=QColor("#FFB3B3B3");
++            painter->save();
++            painter->setPen(QPen(Qt::NoPen));
++            painter->setBrush(color);
++            painter->drawPath(path);
++            painter->restore();
+         }
+-        else if(((option.state & QStyle::State_HasFocus) || (option.state & QStyle::State_Selected)|| (option.state & QStyle::State_MouseOver)))
+-        {
+-            if(option.state.testFlag(QStyle::State_HasFocus) && option.state.testFlag(QStyle::State_Selected)) //QStyle::State_Enabled
++    } else {
++
++        if (!(option.state & QStyle::State_Enabled)) {
++            color = QColor("#FFB3B3B3");
++        } else if (((option.state & QStyle::State_HasFocus) || (option.state & QStyle::State_Selected) || (option.state & QStyle::State_MouseOver))) {
++            if (option.state.testFlag(QStyle::State_HasFocus) && option.state.testFlag(QStyle::State_Selected)) // QStyle::State_Enabled
+             {
+-                if(ThemeController::widgetTheme() == ClassicTheme)
+-                {
+-                    color = ThemeController::highlightClick(true,option.palette);
+-                    color = ThemeController::adjustH(color,1);
+-                    color = ThemeController::adjustS(color,25);
+-                    color = ThemeController::adjustL(color,35);
+-                }
+-                else
+-//                    color = option.palette.highlight().color();
++                if (ThemeController::widgetTheme() == ClassicTheme) {
++                    color = ThemeController::highlightClick(true, option.palette);
++                    color = ThemeController::adjustH(color, 1);
++                    color = ThemeController::adjustS(color, 25);
++                    color = ThemeController::adjustL(color, 35);
++                } else
++                    //                    color = option.palette.highlight().color();
+                     color = ThemeController::getPaletteColorFromDT("highlight");
+-                fontColor = QColor(255,255,255);
+-            }
+-            else if((option.state & QStyle::State_MouseOver))
+-            {
+-                if(ThemeController::widgetTheme() == ClassicTheme)
+-                {
+-                    color = ThemeController::highlightHover(false,option.palette);
+-                    color = ThemeController::adjustH(color,-3);
+-                    color = ThemeController::adjustS(color,-2);
+-                    color = ThemeController::adjustL(color,-35);
+-                }
+-                else
+-//                    color = option.palette.highlight().color();
++                fontColor = QColor(255, 255, 255);
++            } else if ((option.state & QStyle::State_MouseOver)) {
++                if (ThemeController::widgetTheme() == ClassicTheme) {
++                    color = ThemeController::highlightHover(false, option.palette);
++                    color = ThemeController::adjustH(color, -3);
++                    color = ThemeController::adjustS(color, -2);
++                    color = ThemeController::adjustL(color, -35);
++                } else
++                    //                    color = option.palette.highlight().color();
+                     color = ThemeController::getPaletteColorFromDT("highlight");
+-                fontColor = QColor(255,255,255);
+-            }
+-            else {
+-//                color = option.palette.windowText().color();
++                fontColor = QColor(255, 255, 255);
++            } else {
++                //                color = option.palette.windowText().color();
+                 color = ThemeController::getPaletteColorFromDT("windowtext");
+                 color.setAlphaF(0.15);
+             }
+@@ -1043,17 +960,16 @@ void ListViewDelegate::paint(QPainter *painter, const QStyleOptionViewItem &opti
+     pen.setColor(fontColor);
+     painter->setPen(pen);
+     QFontMetrics fm = option.fontMetrics;
+-    auto str = index.model()->data(index,Qt::DisplayRole).toString();
+-    if(fm.width(str) >= rect.width()-12 )
+-    {
+-        if(option.state.testFlag(QStyle::State_MouseOver))
+-            QToolTip::showText(QCursor::pos(),str,qobject_cast<QWidget*>(const_cast<QWidget*>(option.widget)));
+-//        else
+-//            QToolTip::hideText();
+-
+-        str=fm.elidedText(str,Qt::ElideRight,rect.width()-12);
++    auto str = index.model()->data(index, Qt::DisplayRole).toString();
++    if (fm.width(str) >= rect.width() - 12) {
++        if (option.state.testFlag(QStyle::State_MouseOver))
++            QToolTip::showText(QCursor::pos(), str, qobject_cast<QWidget *>(const_cast<QWidget *>(option.widget)));
++        //        else
++        //            QToolTip::hideText();
++
++        str = fm.elidedText(str, Qt::ElideRight, rect.width() - 12);
+     }
+-    painter->drawText(rect.adjusted(12,0,0,0),Qt::AlignLeft|Qt::AlignVCenter,str);
++    painter->drawText(rect.adjusted(12, 0, 0, 0), Qt::AlignLeft | Qt::AlignVCenter, str);
+ }
+ 
+ QSize ListViewDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const
+@@ -1064,61 +980,50 @@ QSize ListViewDelegate::sizeHint(const QStyleOptionViewItem &option, const QMode
+     return size;
+ }
+ 
+-
+ void MyStyle::drawControl(QStyle::ControlElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget) const
+ {
+     switch (element) {
+-    case CE_ShapedFrame:
+-    {
++    case CE_ShapedFrame: {
+         painter->setRenderHint(QPainter::Antialiasing);
+         painter->setRenderHint(QPainter::HighQualityAntialiasing);
+         QColor color;
+-        if(ThemeController::widgetTheme() == ClassicTheme)
+-        {
++        if (ThemeController::widgetTheme() == ClassicTheme) {
+             color = ThemeController::lanhuHSLToQtHsl(197, 69, 26);
+-        }
+-        else
+-        {
+-            if(ThemeController::themeMode() == LightTheme)
+-            {
++        } else {
++            if (ThemeController::themeMode() == LightTheme) {
+                 color = QColor("#262626");
+                 color.setAlphaF(0.15);
+                 painter->setBrush(QColor("#FFFFFF"));
+-            }
+-            else
+-            {
++            } else {
+                 color = QColor("#333333");
+                 painter->setBrush(color);
+             }
+         }
+         painter->setPen(color);
+-        if(ThemeController::widgetTheme() == ClassicTheme)
+-            painter->drawRoundedRect(option->rect,0,0);
+-        else
+-        {
++        if (ThemeController::widgetTheme() == ClassicTheme)
++            painter->drawRoundedRect(option->rect, 0, 0);
++        else {
+             int radius = ThemeController::getRadiusFromDT("kradius-menu");
+-            if(radius == -1)
++            if (radius == -1)
+                 radius = 8;
+-            painter->drawRoundedRect(option->rect,radius,radius);
++            painter->drawRoundedRect(option->rect, radius, radius);
+         }
+         break;
+     }
+     default:
+-        QProxyStyle::drawControl(element,option,painter,widget);
++        QProxyStyle::drawControl(element, option, painter, widget);
+     }
+ }
+ 
+ QRect MyStyle::subElementRect(QStyle::SubElement element, const QStyleOption *option, const QWidget *widget) const
+ {
+ 
+-    switch (element)
+-    {
++    switch (element) {
+     case SE_ShapedFrameContents:
+-        return QProxyStyle::subElementRect(element,option,widget).adjusted(0,4,0,2);
++        return QProxyStyle::subElementRect(element, option, widget).adjusted(0, 4, 0, 2);
+     default:
+-        return  QProxyStyle::subElementRect(element,option,widget);
++        return QProxyStyle::subElementRect(element, option, widget);
+     }
+-
+ }
+ 
+ }
+diff --git a/kysdk-qtwidgets/src/ksearchlineedit.h b/kysdk-qtwidgets/src/ksearchlineedit.h
+index c7c0095..979e64c 100644
+--- a/kysdk-qtwidgets/src/ksearchlineedit.h
++++ b/kysdk-qtwidgets/src/ksearchlineedit.h
+@@ -23,29 +23,29 @@
+ #ifndef KSEARCHBAR_H
+ #define KSEARCHBAR_H
+ 
+-#include <QWidget>
+-#include <QLineEdit>
+ #include "gui_g.h"
+ #include "ktoolbutton.h"
++#include <QLineEdit>
++#include <QWidget>
+ 
+ namespace kdk
+ {
+ 
+ /** @defgroup InputBoxModule
+-  * @{
+-  */
++ * @{
++ */
+ 
+ class KSearchLineEditPrivate;
+ 
+ /**
+  * @brief 搜索输入框,可搜索匹配条件的item
+  */
+-class GUI_EXPORT KSearchLineEdit:public QLineEdit
++class GUI_EXPORT KSearchLineEdit : public QLineEdit
+ {
+     Q_OBJECT
+ 
+ public:
+-    explicit KSearchLineEdit(QWidget*parent = nullptr);
++    explicit KSearchLineEdit(QWidget *parent = nullptr);
+     ~KSearchLineEdit();
+ 
+     /**
+@@ -69,13 +69,13 @@ public:
+      * @brief 返回是否显示清除按钮
+      * @return
+      */
+-    bool isClearButtonEnabled()  const;
++    bool isClearButtonEnabled() const;
+ 
+     /**
+      * @brief 返回placeholder
+      * @return
+      */
+-    QString	placeholderText() const;
++    QString placeholderText() const;
+ 
+     /**
+      * @brief 设置placeholder
+@@ -162,19 +162,19 @@ protected:
+     bool eventFilter(QObject *watched, QEvent *event);
+     void resizeEvent(QResizeEvent *event);
+     void setVisible(bool visible);
+-    void paintEvent(QPaintEvent * event);
++    void paintEvent(QPaintEvent *event);
+     QSize sizeHint() const override;
+ 
+ private:
+     Q_DECLARE_PRIVATE(KSearchLineEdit)
+-    KSearchLineEditPrivate* d_ptr;
++    KSearchLineEditPrivate *d_ptr;
+ };
+ 
+ }
+ /**
+-  * @example testsearchlinedit/widget.h
+-  * @example testsearchlinedit/widget.cpp
+-  * @}
+-  */
++ * @example testsearchlinedit/widget.h
++ * @example testsearchlinedit/widget.cpp
++ * @}
++ */
+ 
+ #endif // KSEARCHBAR_H
+diff --git a/kysdk-qtwidgets/src/ksecuritylevelbar.cpp b/kysdk-qtwidgets/src/ksecuritylevelbar.cpp
+index 69e3663..ad783e9 100644
+--- a/kysdk-qtwidgets/src/ksecuritylevelbar.cpp
++++ b/kysdk-qtwidgets/src/ksecuritylevelbar.cpp
+@@ -21,36 +21,36 @@
+  */
+ 
+ #include "ksecuritylevelbar.h"
+-#include <QPainter>
+-#include <QLabel>
++#include "themeController.h"
+ #include <QBoxLayout>
++#include <QLabel>
++#include <QPainter>
+ #include <QPalette>
+-#include "themeController.h"
+ 
+ namespace kdk
+ {
+-class KSecurityLevelBarPrivate:public QObject
++class KSecurityLevelBarPrivate : public QObject
+ {
+     Q_OBJECT
+     Q_DECLARE_PUBLIC(KSecurityLevelBar)
+ public:
+-    KSecurityLevelBarPrivate(KSecurityLevelBar* parent);
++    KSecurityLevelBarPrivate(KSecurityLevelBar *parent);
+ 
+ private:
+-    KSecurityLevelBar* q_ptr;
++    KSecurityLevelBar *q_ptr;
+     SecurityLevel m_level;
+-    QLabel* m_pLabel;
++    QLabel *m_pLabel;
+     int m_contentMargin = 5;
+     int m_textWidth = 0;
+     int m_space = 5;
+ };
+ 
+ KSecurityLevelBar::KSecurityLevelBar(QWidget *parent)
+-    : QWidget(parent),
+-      d_ptr(new KSecurityLevelBarPrivate(this))
++    : QWidget(parent)
++    , d_ptr(new KSecurityLevelBarPrivate(this))
+ {
+     Q_D(KSecurityLevelBar);
+-    setFixedSize(300,30);
++    setFixedSize(300, 30);
+ }
+ 
+ void KSecurityLevelBar::setSecurityLevel(SecurityLevel level)
+@@ -87,98 +87,91 @@ void KSecurityLevelBar::paintEvent(QPaintEvent *event)
+     painter.setPen(Qt::NoPen);
+     d->m_pLabel->adjustSize();
+     d->m_textWidth = this->fontMetrics().width(d->m_pLabel->text()) + d->m_space;
+-    int rectWitdth = (rect().width() - d->m_textWidth - d->m_contentMargin*2)/3 - d->m_space;
++    int rectWitdth = (rect().width() - d->m_textWidth - d->m_contentMargin * 2) / 3 - d->m_space;
+     int rectHeight = height() > 6 ? 6 : height();
+     int currentPos = d->m_contentMargin + d->m_textWidth + d->m_space;
+-    if(ThemeController::widgetTheme() == ClassicTheme)
+-    {            
+-//        if(painter.pen().width() == 1)
+-//            painter.translate(0.5,0.5);
+-//        if(ThemeController::themeMode() == LightTheme)
+-//            painter.setPen(QColor(187,187,187));
+-//        else
+-//            painter.setPen(QColor(89,89,89));
+-        switch (d->m_level)
+-        {
++    if (ThemeController::widgetTheme() == ClassicTheme) {
++        //        if(painter.pen().width() == 1)
++        //            painter.translate(0.5,0.5);
++        //        if(ThemeController::themeMode() == LightTheme)
++        //            painter.setPen(QColor(187,187,187));
++        //        else
++        //            painter.setPen(QColor(89,89,89));
++        switch (d->m_level) {
+         case Low:
+-            painter.setBrush(QColor(243,34,45));
+-            painter.drawRoundedRect(currentPos,(rect().height()-rectHeight)/2,rectWitdth,rectHeight,0,0);
++            painter.setBrush(QColor(243, 34, 45));
++            painter.drawRoundedRect(currentPos, (rect().height() - rectHeight) / 2, rectWitdth, rectHeight, 0, 0);
+             currentPos = currentPos + d->m_space + rectWitdth;
+-//            painter.setBrush(this->palette().color(QPalette::Button));
++            //            painter.setBrush(this->palette().color(QPalette::Button));
+             painter.setBrush(ThemeController::getPaletteColorFromDT("button"));
+-            painter.drawRoundedRect(currentPos,(rect().height()-rectHeight)/2,rectWitdth,rectHeight,0,0);
++            painter.drawRoundedRect(currentPos, (rect().height() - rectHeight) / 2, rectWitdth, rectHeight, 0, 0);
+             currentPos = currentPos + d->m_space + rectWitdth;
+-            painter.drawRoundedRect(currentPos,(rect().height()-rectHeight)/2,rectWitdth,rectHeight,0,0);
++            painter.drawRoundedRect(currentPos, (rect().height() - rectHeight) / 2, rectWitdth, rectHeight, 0, 0);
+             break;
+         case Medium:
+-            painter.setBrush(QColor(249,197,61));
+-            painter.drawRoundedRect(currentPos,(rect().height()-rectHeight)/2,rectWitdth,rectHeight,0,0);
++            painter.setBrush(QColor(249, 197, 61));
++            painter.drawRoundedRect(currentPos, (rect().height() - rectHeight) / 2, rectWitdth, rectHeight, 0, 0);
+             currentPos = currentPos + d->m_space + rectWitdth;
+-            painter.drawRoundedRect(currentPos,(rect().height()-rectHeight)/2,rectWitdth,rectHeight,0,0);
++            painter.drawRoundedRect(currentPos, (rect().height() - rectHeight) / 2, rectWitdth, rectHeight, 0, 0);
+             currentPos = currentPos + d->m_space + rectWitdth;
+-//            painter.setBrush(this->palette().color(QPalette::Midlight));
++            //            painter.setBrush(this->palette().color(QPalette::Midlight));
+             painter.setBrush(ThemeController::getPaletteColorFromDT("midlight"));
+-            painter.drawRoundedRect(currentPos,(rect().height()-rectHeight)/2,rectWitdth,rectHeight,0,0);
++            painter.drawRoundedRect(currentPos, (rect().height() - rectHeight) / 2, rectWitdth, rectHeight, 0, 0);
+             break;
+         case High:
+-            painter.setBrush(QColor(82,196,41));
+-            painter.drawRoundedRect(currentPos,(rect().height()-rectHeight)/2,rectWitdth,rectHeight,0,0);
++            painter.setBrush(QColor(82, 196, 41));
++            painter.drawRoundedRect(currentPos, (rect().height() - rectHeight) / 2, rectWitdth, rectHeight, 0, 0);
+             currentPos = currentPos + d->m_space + rectWitdth;
+-            painter.drawRoundedRect(currentPos,(rect().height()-rectHeight)/2,rectWitdth,rectHeight,0,0);
++            painter.drawRoundedRect(currentPos, (rect().height() - rectHeight) / 2, rectWitdth, rectHeight, 0, 0);
+             currentPos = currentPos + d->m_space + rectWitdth;
+-            painter.drawRoundedRect(currentPos,(rect().height()-rectHeight)/2,rectWitdth,rectHeight,0,0);
++            painter.drawRoundedRect(currentPos, (rect().height() - rectHeight) / 2, rectWitdth, rectHeight, 0, 0);
+             break;
+         default:
+             break;
+         }
+-    }
+-    else
+-    {
+-        switch (d->m_level)
+-        {
++    } else {
++        switch (d->m_level) {
+         case Low:
+-            painter.setBrush(QColor(243,34,45));
+-            painter.drawRoundedRect(currentPos,(rect().height()-rectHeight)/2,rectWitdth,rectHeight,rectHeight,rectHeight);
++            painter.setBrush(QColor(243, 34, 45));
++            painter.drawRoundedRect(currentPos, (rect().height() - rectHeight) / 2, rectWitdth, rectHeight, rectHeight, rectHeight);
+             currentPos = currentPos + d->m_space + rectWitdth;
+-//            painter.setBrush(this->palette().color(QPalette::Button));
++            //            painter.setBrush(this->palette().color(QPalette::Button));
+             painter.setBrush(ThemeController::getPaletteColorFromDT("button"));
+-            painter.drawRoundedRect(currentPos,(rect().height()-rectHeight)/2,rectWitdth,rectHeight,rectHeight,rectHeight);
++            painter.drawRoundedRect(currentPos, (rect().height() - rectHeight) / 2, rectWitdth, rectHeight, rectHeight, rectHeight);
+             currentPos = currentPos + d->m_space + rectWitdth;
+-            painter.drawRoundedRect(currentPos,(rect().height()-rectHeight)/2,rectWitdth,rectHeight,rectHeight,rectHeight);
++            painter.drawRoundedRect(currentPos, (rect().height() - rectHeight) / 2, rectWitdth, rectHeight, rectHeight, rectHeight);
+             break;
+         case Medium:
+-            painter.setBrush(QColor(249,197,61));
+-            painter.drawRoundedRect(currentPos,(rect().height()-rectHeight)/2,rectWitdth,rectHeight,rectHeight,rectHeight);
++            painter.setBrush(QColor(249, 197, 61));
++            painter.drawRoundedRect(currentPos, (rect().height() - rectHeight) / 2, rectWitdth, rectHeight, rectHeight, rectHeight);
+             currentPos = currentPos + d->m_space + rectWitdth;
+-            painter.drawRoundedRect(currentPos,(rect().height()-rectHeight)/2,rectWitdth,rectHeight,rectHeight,rectHeight);
++            painter.drawRoundedRect(currentPos, (rect().height() - rectHeight) / 2, rectWitdth, rectHeight, rectHeight, rectHeight);
+             currentPos = currentPos + d->m_space + rectWitdth;
+-//            painter.setBrush(this->palette().color(QPalette::Button));
++            //            painter.setBrush(this->palette().color(QPalette::Button));
+             painter.setBrush(ThemeController::getPaletteColorFromDT("button"));
+-            painter.drawRoundedRect(currentPos,(rect().height()-rectHeight)/2,rectWitdth,rectHeight,rectHeight,rectHeight);
++            painter.drawRoundedRect(currentPos, (rect().height() - rectHeight) / 2, rectWitdth, rectHeight, rectHeight, rectHeight);
+             break;
+         case High:
+-            painter.setBrush(QColor(82,196,41));
+-            painter.drawRoundedRect(currentPos,(rect().height()-rectHeight)/2,rectWitdth,rectHeight,rectHeight,rectHeight);
++            painter.setBrush(QColor(82, 196, 41));
++            painter.drawRoundedRect(currentPos, (rect().height() - rectHeight) / 2, rectWitdth, rectHeight, rectHeight, rectHeight);
+             currentPos = currentPos + d->m_space + rectWitdth;
+-            painter.drawRoundedRect(currentPos,(rect().height()-rectHeight)/2,rectWitdth,rectHeight,rectHeight,rectHeight);
++            painter.drawRoundedRect(currentPos, (rect().height() - rectHeight) / 2, rectWitdth, rectHeight, rectHeight, rectHeight);
+             currentPos = currentPos + d->m_space + rectWitdth;
+-            painter.drawRoundedRect(currentPos,(rect().height()-rectHeight)/2,rectWitdth,rectHeight,rectHeight,rectHeight);
++            painter.drawRoundedRect(currentPos, (rect().height() - rectHeight) / 2, rectWitdth, rectHeight, rectHeight, rectHeight);
+             break;
+         default:
+             break;
+         }
+     }
+-
+-
+ }
+ 
+ KSecurityLevelBarPrivate::KSecurityLevelBarPrivate(KSecurityLevelBar *parent)
+-    :q_ptr(parent)
++    : q_ptr(parent)
+ {
+     Q_Q(KSecurityLevelBar);
+     m_pLabel = new QLabel(q);
+-    m_pLabel->setAlignment(Qt::AlignRight|Qt::AlignVCenter);
+-    m_pLabel->setGeometry(q->rect().top(),q->rect().left(),m_textWidth,q->rect().height());
++    m_pLabel->setAlignment(Qt::AlignRight | Qt::AlignVCenter);
++    m_pLabel->setGeometry(q->rect().top(), q->rect().left(), m_textWidth, q->rect().height());
+     m_level = Low;
+     m_pLabel->setText(tr("Low"));
+     setParent(parent);
+diff --git a/kysdk-qtwidgets/src/ksecuritylevelbar.h b/kysdk-qtwidgets/src/ksecuritylevelbar.h
+index aa54bfc..2e3f385 100644
+--- a/kysdk-qtwidgets/src/ksecuritylevelbar.h
++++ b/kysdk-qtwidgets/src/ksecuritylevelbar.h
+@@ -30,14 +30,13 @@ namespace kdk
+ {
+ 
+ /** @defgroup MessageAlertModule
+-  * @{
+-  */
++ * @{
++ */
+ 
+ /**
+  * @brief 分为三个安全等级
+  */
+-enum SecurityLevel
+-{
++enum SecurityLevel {
+     Low,
+     Medium,
+     High
+@@ -67,17 +66,17 @@ public:
+     SecurityLevel securityLevel();
+ 
+ protected:
+-    void paintEvent(QPaintEvent* event);
++    void paintEvent(QPaintEvent *event);
+ 
+ private:
+     Q_DECLARE_PRIVATE(KSecurityLevelBar)
+-    KSecurityLevelBarPrivate*const d_ptr;
++    KSecurityLevelBarPrivate *const d_ptr;
+ };
+ }
+ /**
+-  * @example testsecuritylevelbar/widget.h
+-  * @example testsecuritylevelbar/widget.cpp
+-  * @}
+-  */
++ * @example testsecuritylevelbar/widget.h
++ * @example testsecuritylevelbar/widget.cpp
++ * @}
++ */
+ 
+ #endif // KSECURITYLEVELBAR_H
+diff --git a/kysdk-qtwidgets/src/ksecurityquestiondialog.cpp b/kysdk-qtwidgets/src/ksecurityquestiondialog.cpp
+index aea5216..3611346 100644
+--- a/kysdk-qtwidgets/src/ksecurityquestiondialog.cpp
++++ b/kysdk-qtwidgets/src/ksecurityquestiondialog.cpp
+@@ -33,7 +33,7 @@
+ namespace kdk
+ {
+ 
+-class KSecurityQuestionDialogPrivate:public QObject
++class KSecurityQuestionDialogPrivate : public QObject
+ {
+     Q_OBJECT
+     Q_DECLARE_PUBLIC(KSecurityQuestionDialog)
+@@ -54,7 +54,7 @@ private:
+     QList<QLabel *> m_answerLabelList;
+     QList<QLabel *> m_tipsLabelList;
+     QStringList m_questionlist;
+-    QWidget* m_pScrollWidget;
++    QWidget *m_pScrollWidget;
+     bool m_isVerify = false;
+ 
+ public Q_SLOTS:
+@@ -63,8 +63,8 @@ public Q_SLOTS:
+ };
+ 
+ KSecurityQuestionDialog::KSecurityQuestionDialog(QWidget *parent)
+-    :KDialog(parent),
+-     d_ptr(new KSecurityQuestionDialogPrivate(this))
++    : KDialog(parent)
++    , d_ptr(new KSecurityQuestionDialogPrivate(this))
+ {
+     Q_D(KSecurityQuestionDialog);
+     setObjectName("KSecurityQuestionDialog");
+@@ -103,7 +103,7 @@ void KSecurityQuestionDialog::addSecurityQuestionItem(const int count, bool mute
+         questionHlayout->addWidget(questionLabel);
+         questionHlayout->addSpacing(16);
+ 
+-        QLabel *answerLabel =  new QLabel(tr("Answer"));
++        QLabel *answerLabel = new QLabel(tr("Answer"));
+         answerLabel->setFixedWidth(LABELWIDTH);
+         QLineEdit *answerLineEdit = new QLineEdit();
+         answerLineEdit->setPlaceholderText(tr("Required"));
+@@ -130,17 +130,17 @@ void KSecurityQuestionDialog::addSecurityQuestionItem(const int count, bool mute
+             d->m_questionLineeditList.append(questionLineedit);
+             questionLineedit->setEnabled(false);
+             QPalette palette = questionLineedit->palette();
+-//            QColor color = palette.color(QPalette::Active, QPalette::Text);
+-            QColor color = ThemeController::getPaletteColorFromDT("text",QPalette::Active);
++            //            QColor color = palette.color(QPalette::Active, QPalette::Text);
++            QColor color = ThemeController::getPaletteColorFromDT("text", QPalette::Active);
+             palette.setColor(QPalette::Disabled, QPalette::Text, color);
+             questionLineedit->setPalette(palette);
+             questionHlayout->addWidget(questionLineedit);
+             QLabel *tiplabel = new QLabel();
+             d->m_tipsLabelList.append(tiplabel);
+             QPalette pe;
+-            pe.setColor(QPalette::WindowText,Qt::red);
++            pe.setColor(QPalette::WindowText, Qt::red);
+             tiplabel->setPalette(pe);
+-            QLabel *placeholderLabel =  new QLabel();
++            QLabel *placeholderLabel = new QLabel();
+             placeholderLabel->setFixedWidth(LABELWIDTH);
+             QHBoxLayout *tipHLayout = new QHBoxLayout();
+             tipHLayout->setContentsMargins(0, 0, 0, 0);
+@@ -247,11 +247,10 @@ QLineEdit *KSecurityQuestionDialog::answerLineedit(const int answerIndex)
+     return nullptr;
+ }
+ 
+-void KSecurityQuestionDialog::keyPressEvent(QKeyEvent * event)
++void KSecurityQuestionDialog::keyPressEvent(QKeyEvent *event)
+ {
+     Q_D(KSecurityQuestionDialog);
+-    switch (event->key())
+-    {
++    switch (event->key()) {
+     case Qt::Key_Enter:
+         if (d->m_pConfirmKBtn->isEnabled())
+             d->m_pConfirmKBtn->clicked();
+@@ -266,7 +265,7 @@ void KSecurityQuestionDialog::keyPressEvent(QKeyEvent * event)
+ }
+ 
+ KSecurityQuestionDialogPrivate::KSecurityQuestionDialogPrivate(KSecurityQuestionDialog *parent)
+-    :q_ptr(parent)
++    : q_ptr(parent)
+ {
+     Q_Q(KSecurityQuestionDialog);
+     m_pScrollArea = new QScrollArea(q->mainWidget());
+@@ -298,9 +297,8 @@ KSecurityQuestionDialogPrivate::KSecurityQuestionDialogPrivate(KSecurityQuestion
+     hLayout->addWidget(m_pCancelKBtn);
+     hLayout->addWidget(m_pConfirmKBtn);
+ 
+-
+-    QVBoxLayout* scrollAreaLayout = new QVBoxLayout();
+-    scrollAreaLayout->setContentsMargins(0,0,0,0);
++    QVBoxLayout *scrollAreaLayout = new QVBoxLayout();
++    scrollAreaLayout->setContentsMargins(0, 0, 0, 0);
+     scrollAreaLayout->addWidget(m_pScrollArea);
+     m_pScrollArea->setWidgetResizable(true);
+     m_pScrollArea->horizontalScrollBar()->setVisible(false);
+@@ -316,11 +314,11 @@ KSecurityQuestionDialogPrivate::KSecurityQuestionDialogPrivate(KSecurityQuestion
+ 
+     q->mainWidget()->setLayout(scrollAreaLayout);
+     m_pScrollWidget->setFixedWidth(DIALOGWIDTH);
+-    q->setFixedSize(DIALOGWIDTH,DIALOGHEIGHT);
++    q->setFixedSize(DIALOGWIDTH, DIALOGHEIGHT);
+ 
+     QObject::connect(m_pCancelKBtn, SIGNAL(clicked(bool)), q, SLOT(reject()));
+ 
+-    QObject::connect(m_pConfirmKBtn, &KPushButton::clicked, this, [=](){
++    QObject::connect(m_pConfirmKBtn, &KPushButton::clicked, this, [=]() {
+         foreach (QLineEdit *tempLineedit, m_answerLineeditList) {
+             if (tempLineedit != nullptr) {
+                 tempLineedit->clearFocus();
+@@ -342,7 +340,7 @@ void KSecurityQuestionDialogPrivate::setQustionCombox()
+ 
+     for (int j = 0; j < m_questionComboxList.count(); j++) {
+         QComboBox *tempCombox = m_questionComboxList.at(j);
+-        QString currentText =  tempCombox->currentText();
++        QString currentText = tempCombox->currentText();
+         if (m_questionlist.contains(currentText)) {
+             tempCombox->blockSignals(true);
+             tempCombox->clear();
+diff --git a/kysdk-qtwidgets/src/ksecurityquestiondialog.h b/kysdk-qtwidgets/src/ksecurityquestiondialog.h
+index ad4c681..add0506 100644
+--- a/kysdk-qtwidgets/src/ksecurityquestiondialog.h
++++ b/kysdk-qtwidgets/src/ksecurityquestiondialog.h
+@@ -23,13 +23,13 @@
+ #ifndef KSECURITYQUESTIONDIALOG_H
+ #define KSECURITYQUESTIONDIALOG_H
+ 
+-#include <QDialog>
+-#include <QComboBox>
+-#include <QLineEdit>
+-#include <QBoxLayout>
+ #include "gui_g.h"
+ #include "kdialog.h"
+ #include "kpushbutton.h"
++#include <QBoxLayout>
++#include <QComboBox>
++#include <QDialog>
++#include <QLineEdit>
+ 
+ namespace kdk
+ {
+@@ -40,12 +40,12 @@ class KSecurityQuestionDialogPrivate;
+  * @brief 继承自 KDialog,
+  * @since 2.4
+  */
+-class GUI_EXPORT KSecurityQuestionDialog: public KDialog
++class GUI_EXPORT KSecurityQuestionDialog : public KDialog
+ {
+     Q_OBJECT
+ 
+ public:
+-    explicit KSecurityQuestionDialog(QWidget* parent = nullptr);
++    explicit KSecurityQuestionDialog(QWidget *parent = nullptr);
+     ~KSecurityQuestionDialog();
+ 
+     /**
+@@ -142,11 +142,11 @@ protected:
+ 
+ private:
+     Q_DECLARE_PRIVATE(KSecurityQuestionDialog)
+-    KSecurityQuestionDialogPrivate* const d_ptr;
++    KSecurityQuestionDialogPrivate *const d_ptr;
+ };
+ }
+ /**
+-  * @example testsecurityquestiondialog/main.cpp
+-  * @}
+-  */
++ * @example testsecurityquestiondialog/main.cpp
++ * @}
++ */
+ #endif // KSECURITYQUESTIONDIALOG_H
+diff --git a/kysdk-qtwidgets/src/kshadowhelper.cpp b/kysdk-qtwidgets/src/kshadowhelper.cpp
+index d06a6ac..5bb437b 100644
+--- a/kysdk-qtwidgets/src/kshadowhelper.cpp
++++ b/kysdk-qtwidgets/src/kshadowhelper.cpp
+@@ -21,26 +21,28 @@
+  */
+ 
+ #include "kshadowhelper.h"
+-#include <QPixmap>
+-#include <QLinearGradient>
+-#include <QPalette>
+ #include <KWindowShadow>
+ #include <KWindowShadowTile>
+-#include <QPainter>
++#include <QLinearGradient>
+ #include <QMap>
++#include <QPainter>
++#include <QPalette>
++#include <QPixmap>
+ 
+ extern void qt_blurImage(QImage &blurImage, qreal radius, bool quality, int transposed);
+ 
+-namespace kdk {
+-namespace effects {
++namespace kdk
++{
++namespace effects
++{
+ 
+-class KShadowHelperPrivate:public QObject
++class KShadowHelperPrivate : public QObject
+ {
+     Q_DECLARE_PUBLIC(KShadowHelper)
+     Q_OBJECT
+ 
+ public:
+-    KShadowHelperPrivate(KShadowHelper*parent);
++    KShadowHelperPrivate(KShadowHelper *parent);
+     QPixmap getShadowPixmap(QColor color,
+                             int shadowBorder,
+                             qreal darkness,
+@@ -48,19 +50,20 @@ public:
+     KWindowShadow *getShadow(QColor color, int shadowBorder,
+                              qreal darkness,
+                              int borderRadius = 0);
++
+ protected:
+     bool eventFilter(QObject *watched, QEvent *event);
+ 
+ private:
+-    KShadowHelper* q_ptr;
++    KShadowHelper *q_ptr;
+     QMap<const QWidget *, KWindowShadow *> m_shadows;
+ };
+ 
+-static KShadowHelper* g_kshadowHelper = nullptr;
++static KShadowHelper *g_kshadowHelper = nullptr;
+ 
+ KShadowHelper *KShadowHelper::self()
+ {
+-    if(g_kshadowHelper)
++    if (g_kshadowHelper)
+         return g_kshadowHelper;
+     g_kshadowHelper = new KShadowHelper();
+     return g_kshadowHelper;
+@@ -69,12 +72,12 @@ KShadowHelper *KShadowHelper::self()
+ void KShadowHelper::setWidget(QWidget *widget, int borderRadius, int shadowWidth, qreal darkness)
+ {
+     Q_D(KShadowHelper);
+-    KWindowShadow* shadow = d->getShadow(QColor(26,26,26),shadowWidth,darkness,borderRadius);
+-    shadow->setPadding(QMargins(shadowWidth,shadowWidth,shadowWidth,shadowWidth));
++    KWindowShadow *shadow = d->getShadow(QColor(26, 26, 26), shadowWidth, darkness, borderRadius);
++    shadow->setPadding(QMargins(shadowWidth, shadowWidth, shadowWidth, shadowWidth));
+ 
+     widget->installEventFilter(d);
+     d->m_shadows.insert(widget, shadow);
+-    connect(widget, &QWidget::destroyed, this, [=](){
++    connect(widget, &QWidget::destroyed, this, [=]() {
+         if (auto shadowToBeDelete = d->m_shadows.value(widget)) {
+             if (shadowToBeDelete->isCreated())
+                 shadowToBeDelete->destroy();
+@@ -85,27 +88,25 @@ void KShadowHelper::setWidget(QWidget *widget, int borderRadius, int shadowWidth
+ }
+ 
+ KShadowHelper::KShadowHelper(QObject *parent)
+-    : QObject(parent),
+-      d_ptr(new KShadowHelperPrivate(this))
++    : QObject(parent)
++    , d_ptr(new KShadowHelperPrivate(this))
+ {
+-
+ }
+ 
+ KShadowHelperPrivate::KShadowHelperPrivate(KShadowHelper *parent)
+-    :q_ptr(parent)
++    : q_ptr(parent)
+ {
+-
+ }
+ 
+ QPixmap KShadowHelperPrivate::getShadowPixmap(QColor color, int shadowBorder, qreal darkness, int borderRadius)
+ {
+-    QPixmap pixmap(QSize(100,100));
++    QPixmap pixmap(QSize(100, 100));
+     pixmap.fill(Qt::transparent);
+     QPainter painter(&pixmap);
+     painter.setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform);
+     painter.setBrush(color);
+     painter.setPen(Qt::NoPen);
+-    painter.drawRoundedRect(pixmap.rect().adjusted(shadowBorder,shadowBorder,-shadowBorder,-shadowBorder),borderRadius,borderRadius);
++    painter.drawRoundedRect(pixmap.rect().adjusted(shadowBorder, shadowBorder, -shadowBorder, -shadowBorder), borderRadius, borderRadius);
+ 
+     QImage rawImg = pixmap.toImage();
+     qt_blurImage(rawImg, shadowBorder, true, true);
+@@ -125,22 +126,22 @@ QPixmap KShadowHelperPrivate::getShadowPixmap(QColor color, int shadowBorder, qr
+     painter2.setCompositionMode(QPainter::CompositionMode_Clear);
+     painter2.setBrush(Qt::transparent);
+     painter2.setPen(Qt::NoPen);
+-    painter2.drawRoundedRect(target.rect().adjusted(shadowBorder,shadowBorder,-shadowBorder,-shadowBorder),borderRadius,borderRadius);
++    painter2.drawRoundedRect(target.rect().adjusted(shadowBorder, shadowBorder, -shadowBorder, -shadowBorder), borderRadius, borderRadius);
+     return target;
+ }
+ 
+ KWindowShadow *KShadowHelperPrivate::getShadow(QColor color, int shadowBorder, qreal darkness, int borderRadius)
+ {
+-    QPixmap pixmap = getShadowPixmap(color,shadowBorder,darkness,borderRadius);
+-    int parm = shadowBorder*2;
++    QPixmap pixmap = getShadowPixmap(color, shadowBorder, darkness, borderRadius);
++    int parm = shadowBorder * 2;
+     QPixmap topLeftPixmap = pixmap.copy(0, 0, parm, parm);
+-    QPixmap topPixmap = pixmap.copy(parm, 0, pixmap.width()-parm*2, parm);
+-    QPixmap topRightPixmap = pixmap.copy(pixmap.width()-parm, 0, parm, parm);
+-    QPixmap leftPixmap = pixmap.copy(0, parm, parm, pixmap.height()-parm*2);
+-    QPixmap rightPixmap = pixmap.copy(pixmap.width()-parm, parm, parm, pixmap.height()-parm*2);
+-    QPixmap bottomLeftPixmap = pixmap.copy(0, pixmap.height()-parm, parm, parm);
+-    QPixmap bottomPixmap = pixmap.copy(parm, pixmap.height()-parm, pixmap.width()-parm*2, parm);
+-    QPixmap bottomRightPixmap = pixmap.copy(pixmap.width()-parm,pixmap.height()-parm, parm, parm);
++    QPixmap topPixmap = pixmap.copy(parm, 0, pixmap.width() - parm * 2, parm);
++    QPixmap topRightPixmap = pixmap.copy(pixmap.width() - parm, 0, parm, parm);
++    QPixmap leftPixmap = pixmap.copy(0, parm, parm, pixmap.height() - parm * 2);
++    QPixmap rightPixmap = pixmap.copy(pixmap.width() - parm, parm, parm, pixmap.height() - parm * 2);
++    QPixmap bottomLeftPixmap = pixmap.copy(0, pixmap.height() - parm, parm, parm);
++    QPixmap bottomPixmap = pixmap.copy(parm, pixmap.height() - parm, pixmap.width() - parm * 2, parm);
++    QPixmap bottomRightPixmap = pixmap.copy(pixmap.width() - parm, pixmap.height() - parm, parm, parm);
+ 
+     KWindowShadow *shadow = new KWindowShadow;
+     KWindowShadowTile::Ptr topLeftTile = KWindowShadowTile::Ptr::create();
+@@ -172,20 +173,16 @@ KWindowShadow *KShadowHelperPrivate::getShadow(QColor color, int shadowBorder, q
+ 
+ bool KShadowHelperPrivate::eventFilter(QObject *watched, QEvent *event)
+ {
+-    if(watched->isWidgetType())
+-    {
++    if (watched->isWidgetType()) {
+         auto widget = qobject_cast<QWidget *>(watched);
+-        if(widget->isTopLevel() && event->type() == QEvent::Show)
+-        {
+-            if (auto shadow = m_shadows.value(widget))
+-            {
++        if (widget->isTopLevel() && event->type() == QEvent::Show) {
++            if (auto shadow = m_shadows.value(widget)) {
+                 shadow->setWindow(widget->windowHandle());
+                 shadow->create();
+             }
+-
+         }
+     }
+-    return QObject::eventFilter(watched,event);
++    return QObject::eventFilter(watched, event);
+ }
+ 
+ }
+diff --git a/kysdk-qtwidgets/src/kshadowhelper.h b/kysdk-qtwidgets/src/kshadowhelper.h
+index 0d149a3..12a367e 100644
+--- a/kysdk-qtwidgets/src/kshadowhelper.h
++++ b/kysdk-qtwidgets/src/kshadowhelper.h
+@@ -23,11 +23,13 @@
+ #ifndef KSHADOWHELPER_H
+ #define KSHADOWHELPER_H
+ 
++#include "gui_g.h"
+ #include <QObject>
+ #include <QWidget>
+-#include "gui_g.h"
+-namespace kdk {
+-namespace effects {
++namespace kdk
++{
++namespace effects
++{
+ 
+ class KShadowHelperPrivate;
+ 
+@@ -35,14 +37,13 @@ class KShadowHelper : public QObject
+ {
+     Q_OBJECT
+ public:
+-    static KShadowHelper* self();
+-    void setWidget(QWidget* widget,int borderRadius = 12, int shadowWidth = 20,qreal darkness = 0.5);
++    static KShadowHelper *self();
++    void setWidget(QWidget *widget, int borderRadius = 12, int shadowWidth = 20, qreal darkness = 0.5);
+ 
+ private:
+     KShadowHelper(QObject *parent = nullptr);
+     Q_DECLARE_PRIVATE(KShadowHelper)
+-    KShadowHelperPrivate* const d_ptr;
+-
++    KShadowHelperPrivate *const d_ptr;
+ };
+ }
+ }
+diff --git a/kysdk-qtwidgets/src/kslider.cpp b/kysdk-qtwidgets/src/kslider.cpp
+index e5fb2d3..4a07685 100644
+--- a/kysdk-qtwidgets/src/kslider.cpp
++++ b/kysdk-qtwidgets/src/kslider.cpp
+@@ -21,52 +21,53 @@
+  */
+ 
+ #include "kslider.h"
++#include "parmscontroller.h"
+ #include "themeController.h"
++#include <QDebug>
++#include <QMouseEvent>
+ #include <QPainter>
++#include <QPainterPath>
++#include <QPalette>
+ #include <QStyle>
+-#include <QStyleOptionSlider>
+ #include <QStyleOptionButton>
+-#include <QPalette>
+-#include <QMouseEvent>
++#include <QStyleOptionSlider>
+ #include <QToolTip>
+-#include <QPainterPath>
+-#include <QDebug>
+ #include <QVariantAnimation>
+-#include "parmscontroller.h"
+ 
+ using namespace kdk;
+ 
+-namespace kdk {
++namespace kdk
++{
+ 
+ static const int node_radius = 5;
+ static const int handle_radius = 10;
+-static const int spaceing = handle_radius+2;
++static const int spaceing = handle_radius + 2;
+ static const int line_width = 4;
+ static const int line_border_radius = 2;
+ 
+-class KSliderPrivate :public QObject,public ThemeController
++class KSliderPrivate : public QObject, public ThemeController
+ {
+     Q_DECLARE_PUBLIC(KSlider)
+ public:
+-    KSliderPrivate(KSlider*parent);
++    KSliderPrivate(KSlider *parent);
+     ~KSliderPrivate();
+     void animationStart();
+ 
+ private:
+-    KSlider* q_ptr;
++    KSlider *q_ptr;
+     KSliderType m_sliderType;
+-    void drawCoverNode(QPainter*painter);
+-    void drawSlider(QPainter*painter);
++    void drawCoverNode(QPainter *painter);
++    void drawSlider(QPainter *painter);
+     void locateNode();
+-    void drawBasePath(QPainter*painter);
+-    void drawCoverLine(QPainter*painter);
++    void drawBasePath(QPainter *painter);
++    void drawCoverLine(QPainter *painter);
+     void updateValuePosition();
+     void updateValue();
+     void updateColor(QPalette palette);
+     void changeTheme();
+     QRect baseLineRect();
+     QRect coverLineRect();
+-    QList<QPoint>m_nodes;
++    QList<QPoint> m_nodes;
+     bool m_isPressed;
+     bool m_isHovered;
+     int m_valuePosition;
+@@ -90,45 +91,44 @@ private:
+ };
+ 
+ KSliderPrivate::KSliderPrivate(KSlider *parent)
+-    :q_ptr(parent),
+-      m_sliderType(SmoothSlider),
+-      m_isPressed(false),
+-      m_isHovered(false),
+-      m_valuePosition(0),
+-      m_currentpos(QPoint(0,0)),
+-      m_nodeVisible(true),
+-      m_handleRadius(0),
+-      m_animationStarted(false),
+-      m_ismoving(false),
+-      m_resize(false),
+-      m_forceUpdate(false),
+-      m_isTranslucent(false),
+-      m_isTranslucentFlag(false)
++    : q_ptr(parent)
++    , m_sliderType(SmoothSlider)
++    , m_isPressed(false)
++    , m_isHovered(false)
++    , m_valuePosition(0)
++    , m_currentpos(QPoint(0, 0))
++    , m_nodeVisible(true)
++    , m_handleRadius(0)
++    , m_animationStarted(false)
++    , m_ismoving(false)
++    , m_resize(false)
++    , m_forceUpdate(false)
++    , m_isTranslucent(false)
++    , m_isTranslucentFlag(false)
+ {
+     Q_Q(KSlider);
+-    q->setProperty("animation",false);
++    q->setProperty("animation", false);
+     QStyleOptionSlider sliderOption;
+     m_animation = new QVariantAnimation(this);
+     m_animation->setDuration(150);
+     m_animation->setEasingCurve(QEasingCurve::InOutQuad);
+-    connect(m_animation, &QVariantAnimation::finished, q, [=](){
++    connect(m_animation, &QVariantAnimation::finished, q, [=]() {
+         m_animationStarted = false;
+     });
+-    connect(m_animation, &QVariantAnimation::valueChanged, q, [=](){
++    connect(m_animation, &QVariantAnimation::valueChanged, q, [=]() {
+         q->update();
+     });
+     animationStart();
+-    connect(q,&KSlider::valueChanged,this,[=](){
++    connect(q, &KSlider::valueChanged, this, [=]() {
+         animationStart();
+     });
+-    //获取滑动块大小
++    // 获取滑动块大小
+     QRect handle = q->style()->proxy()->subControlRect(QStyle::CC_Slider, &sliderOption, QStyle::SC_SliderHandle, q);
+-    m_handleRadius =handle.width()/2;
++    m_handleRadius = handle.width() / 2;
+ }
+ 
+ KSliderPrivate::~KSliderPrivate()
+ {
+-
+ }
+ 
+ void KSliderPrivate::animationStart()
+@@ -137,8 +137,7 @@ void KSliderPrivate::animationStart()
+     int prePosition = m_valuePosition;
+     updateValuePosition();
+ 
+-    if((m_forceUpdate||!m_animationStarted) && !m_ismoving)
+-    {
++    if ((m_forceUpdate || !m_animationStarted) && !m_ismoving) {
+         m_animation->stop();
+         m_animation->setStartValue(prePosition);
+         m_animation->setEndValue(m_valuePosition);
+@@ -149,260 +148,221 @@ void KSliderPrivate::animationStart()
+     }
+ }
+ 
+-void KSliderPrivate::drawCoverNode(QPainter*painter)
++void KSliderPrivate::drawCoverNode(QPainter *painter)
+ {
+     Q_Q(KSlider);
+     painter->setRenderHint(QPainter::Antialiasing);
+     painter->setPen(Qt::NoPen);
+-//    painter->setBrush(q->palette().color(QPalette::Highlight));
++    //    painter->setBrush(q->palette().color(QPalette::Highlight));
+     painter->setBrush(ThemeController::getPaletteColorFromDT("highlight"));
+     int side = 0;
+-    if( ThemeController::widgetTheme() == ClassicTheme )
+-    {
+-        if(ThemeController::themeMode() == LightTheme)
+-        {
++    if (ThemeController::widgetTheme() == ClassicTheme) {
++        if (ThemeController::themeMode() == LightTheme) {
+             painter->setPen(ThemeController::lanhuHSLToQtHsl(0, 0, 59));
+             painter->setBrush(ThemeController::ThemeController::lanhuHSLToQtHsl(0, 0, 85));
+ 
+-        }
+-        else
+-        {
++        } else {
+             painter->setPen(ThemeController::lanhuHSLToQtHsl(0, 0, 50));
+             painter->setBrush(ThemeController::ThemeController::lanhuHSLToQtHsl(0, 0, 17));
+         }
+-        if(q->orientation() == Qt::Horizontal)
+-        {
+-            for(auto point : m_nodes)
+-            {
+-                if(m_ismoving)
++        if (q->orientation() == Qt::Horizontal) {
++            for (auto point : m_nodes) {
++                if (m_ismoving)
+                     side = m_currentpos.x();
+-                else if(m_resize)
++                else if (m_resize)
+                     side = m_valuePosition;
+                 else
+                     side = m_animation->currentValue().toInt();
+-                QRect rect(point.x()-1,point.y()-5,3,10);
+-                if(point.x()<= side)
+-                    painter->drawRect(rect);//选中基点
++                QRect rect(point.x() - 1, point.y() - 5, 3, 10);
++                if (point.x() <= side)
++                    painter->drawRect(rect); // 选中基点
+             }
+-        }
+-        else
+-        {
+-            for(auto point : m_nodes)
+-            {
+-                if(m_ismoving)
++        } else {
++            for (auto point : m_nodes) {
++                if (m_ismoving)
+                     side = m_currentpos.y();
+-                else if(m_resize)
++                else if (m_resize)
+                     side = m_valuePosition;
+                 else
+                     side = m_animation->currentValue().toInt();
+-                QRect rect(point.x()-5,point.y()-3,10,3);
+-                if(point.y()>= side)
++                QRect rect(point.x() - 5, point.y() - 3, 10, 3);
++                if (point.y() >= side)
+                     painter->drawRect(rect);
+             }
+         }
+-    }
+-    else
+-    {
++    } else {
+         painter->setPen(Qt::NoPen);
+-//        painter->setBrush(q->palette().color(QPalette::Highlight));
++        //        painter->setBrush(q->palette().color(QPalette::Highlight));
+         painter->setBrush(ThemeController::getPaletteColorFromDT("highlight"));
+-        if(q->orientation() == Qt::Horizontal)
+-        {
+-            for(auto point : m_nodes)
+-            {
+-                if(m_ismoving)
++        if (q->orientation() == Qt::Horizontal) {
++            for (auto point : m_nodes) {
++                if (m_ismoving)
+                     side = m_currentpos.x();
+-                else if(m_resize)
++                else if (m_resize)
+                     side = m_valuePosition;
+                 else
+                     side = m_animation->currentValue().toInt();
+-//                if(point.x()<= side)
+-                if(q->layoutDirection() == Qt::LeftToRight && (point.x()<= side))
+-                    painter->drawEllipse(point,Parmscontroller::parm(Parmscontroller::Parm::PM_SliderNodeRadius)/2,Parmscontroller::parm(Parmscontroller::Parm::PM_SliderNodeRadius)/2);
+-                else if(q->layoutDirection() == Qt::RightToLeft && (point.x()>= side))
+-                    painter->drawEllipse(point,Parmscontroller::parm(Parmscontroller::Parm::PM_SliderNodeRadius)/2,Parmscontroller::parm(Parmscontroller::Parm::PM_SliderNodeRadius)/2);
++                //                if(point.x()<= side)
++                if (q->layoutDirection() == Qt::LeftToRight && (point.x() <= side))
++                    painter->drawEllipse(point, Parmscontroller::parm(Parmscontroller::Parm::PM_SliderNodeRadius) / 2, Parmscontroller::parm(Parmscontroller::Parm::PM_SliderNodeRadius) / 2);
++                else if (q->layoutDirection() == Qt::RightToLeft && (point.x() >= side))
++                    painter->drawEllipse(point, Parmscontroller::parm(Parmscontroller::Parm::PM_SliderNodeRadius) / 2, Parmscontroller::parm(Parmscontroller::Parm::PM_SliderNodeRadius) / 2);
+             }
+-        }
+-        else
+-        {
+-            for(auto point : m_nodes)
+-            {
+-                if(m_ismoving)
++        } else {
++            for (auto point : m_nodes) {
++                if (m_ismoving)
+                     side = m_currentpos.y();
+-                else if(m_resize)
++                else if (m_resize)
+                     side = m_valuePosition;
+                 else
+                     side = m_animation->currentValue().toInt();
+-                if(point.y()>= side)
+-                    painter->drawEllipse(point,Parmscontroller::parm(Parmscontroller::Parm::PM_SliderNodeRadius)/2,Parmscontroller::parm(Parmscontroller::Parm::PM_SliderNodeRadius)/2);
++                if (point.y() >= side)
++                    painter->drawEllipse(point, Parmscontroller::parm(Parmscontroller::Parm::PM_SliderNodeRadius) / 2, Parmscontroller::parm(Parmscontroller::Parm::PM_SliderNodeRadius) / 2);
+             }
+         }
+     }
+ }
+ 
+-void KSliderPrivate::drawSlider(QPainter*painter)
++void KSliderPrivate::drawSlider(QPainter *painter)
+ {
+     Q_Q(KSlider);
+     painter->setRenderHint(QPainter::Antialiasing);
+     painter->setPen(Qt::NoPen);
+-    //填充颜色待定
+-    if(ThemeController::widgetTheme() == FashionTheme && m_isHovered&&!m_isPressed && q->isEnabled())
+-    {
++    // 填充颜色待定
++    if (ThemeController::widgetTheme() == FashionTheme && m_isHovered && !m_isPressed && q->isEnabled()) {
+         painter->setBrush(m_linearGradient);
+-    }
+-    else
++    } else
+         painter->setBrush(m_startColor);
+-    //获取滑动块大小
++    // 获取滑动块大小
+ 
+-    if(ThemeController::widgetTheme() == ClassicTheme)
+-    {
+-        painter->setRenderHint(QPainter::HighQualityAntialiasing,true);
+-        painter->setRenderHint(QPainter::SmoothPixmapTransform,true);
+-        painter->setRenderHint(QPainter::Antialiasing,true);
+-//        painter->setPen(q->palette().highlight().color());
++    if (ThemeController::widgetTheme() == ClassicTheme) {
++        painter->setRenderHint(QPainter::HighQualityAntialiasing, true);
++        painter->setRenderHint(QPainter::SmoothPixmapTransform, true);
++        painter->setRenderHint(QPainter::Antialiasing, true);
++        //        painter->setPen(q->palette().highlight().color());
+         painter->setPen(ThemeController::getPaletteColorFromDT("highlight"));
+-        double handle_radius =4;
++        double handle_radius = 4;
+         QPainterPath path;
+         QPoint point;
+-        if(q->orientation() == Qt::Horizontal)
+-        {
++        if (q->orientation() == Qt::Horizontal) {
+             int x = 0;
+-            if(m_ismoving)
++            if (m_ismoving)
+                 x = m_currentpos.x();
+-            else if(m_resize)
++            else if (m_resize)
+                 x = m_valuePosition;
+             else
+-                x= m_animation->currentValue().toInt();
+-            point = QPoint(x,q->height()/2);
+-            m_rect=QRect(point.x()-handle_radius/2,point.y()-handle_radius,handle_radius,handle_radius*2);
+-            path.moveTo(point.x()-handle_radius , point.y()-handle_radius*2);
+-            path.lineTo(point.x()-handle_radius , point.y()+handle_radius);
+-            path.lineTo(point.x() , point.y()+handle_radius*2+1);
+-            path.lineTo(point.x()+handle_radius , point.y()+handle_radius);
+-            path.lineTo(point.x()+handle_radius , point.y()-handle_radius*2);
+-            path.lineTo(point.x()-handle_radius , point.y()-handle_radius*2);
+-        }
+-        else
+-        {
++                x = m_animation->currentValue().toInt();
++            point = QPoint(x, q->height() / 2);
++            m_rect = QRect(point.x() - handle_radius / 2, point.y() - handle_radius, handle_radius, handle_radius * 2);
++            path.moveTo(point.x() - handle_radius, point.y() - handle_radius * 2);
++            path.lineTo(point.x() - handle_radius, point.y() + handle_radius);
++            path.lineTo(point.x(), point.y() + handle_radius * 2 + 1);
++            path.lineTo(point.x() + handle_radius, point.y() + handle_radius);
++            path.lineTo(point.x() + handle_radius, point.y() - handle_radius * 2);
++            path.lineTo(point.x() - handle_radius, point.y() - handle_radius * 2);
++        } else {
+             int y = 0;
+-            if(m_ismoving)
++            if (m_ismoving)
+                 y = m_currentpos.y();
+-            else if(m_resize)
++            else if (m_resize)
+                 y = m_valuePosition;
+             else
+                 y = m_animation->currentValue().toInt();
+-            point = QPoint(q->width()/2,y);
+-            m_rect=QRect(point.x()-handle_radius,point.y()-handle_radius/2,handle_radius*2,handle_radius);
+-            path.moveTo(point.x()+handle_radius*2 , point.y()-handle_radius);
+-            path.lineTo(point.x()-handle_radius , point.y()-handle_radius);
+-            path.lineTo(point.x()-handle_radius*2-1 , point.y());
+-            path.lineTo(point.x()-handle_radius , point.y()+handle_radius);
+-            path.lineTo(point.x()+handle_radius*2 , point.y()+handle_radius);
+-            path.lineTo(point.x()+handle_radius*2 , point.y()-handle_radius);
++            point = QPoint(q->width() / 2, y);
++            m_rect = QRect(point.x() - handle_radius, point.y() - handle_radius / 2, handle_radius * 2, handle_radius);
++            path.moveTo(point.x() + handle_radius * 2, point.y() - handle_radius);
++            path.lineTo(point.x() - handle_radius, point.y() - handle_radius);
++            path.lineTo(point.x() - handle_radius * 2 - 1, point.y());
++            path.lineTo(point.x() - handle_radius, point.y() + handle_radius);
++            path.lineTo(point.x() + handle_radius * 2, point.y() + handle_radius);
++            path.lineTo(point.x() + handle_radius * 2, point.y() - handle_radius);
+         }
+         painter->drawPath(path);
+-    }
+-    else
+-    {
++    } else {
+         painter->setPen(Qt::NoPen);
+-        int handle_radius  = Parmscontroller::parm(Parmscontroller::Parm::PM_SliderHandleRadius)/2;
++        int handle_radius = Parmscontroller::parm(Parmscontroller::Parm::PM_SliderHandleRadius) / 2;
+         QPoint point;
+-        if(q->orientation() == Qt::Horizontal)
+-        {
++        if (q->orientation() == Qt::Horizontal) {
+             int x = 0;
+-            if(m_ismoving)
++            if (m_ismoving)
+                 x = m_currentpos.x();
+-            else if(m_resize)
++            else if (m_resize)
+                 x = m_valuePosition;
+             else
+-                x= m_animation->currentValue().toInt();
+-            point = QPoint(x,q->height()/2);
+-        }
+-        else
+-        {
++                x = m_animation->currentValue().toInt();
++            point = QPoint(x, q->height() / 2);
++        } else {
+             int y = 0;
+-            if(m_ismoving)
++            if (m_ismoving)
+                 y = m_currentpos.y();
+-            else if(m_resize)
++            else if (m_resize)
+                 y = m_valuePosition;
+             else
+                 y = m_animation->currentValue().toInt();
+-            point = QPoint(q->width()/2,y);
++            point = QPoint(q->width() / 2, y);
+         }
+-        painter->drawEllipse(point,handle_radius,handle_radius);
+-        m_rect=QRect(point.x()-handle_radius,point.y()-handle_radius,handle_radius*2,handle_radius*2);
++        painter->drawEllipse(point, handle_radius, handle_radius);
++        m_rect = QRect(point.x() - handle_radius, point.y() - handle_radius, handle_radius * 2, handle_radius * 2);
+     }
+ }
+ 
+ void KSliderPrivate::locateNode()
+ {
+     Q_Q(KSlider);
+-    if(q->orientation() == Qt::Horizontal)
+-    {
++    if (q->orientation() == Qt::Horizontal) {
+         m_nodes.clear();
+-        if(q->layoutDirection() == Qt::LeftToRight)
+-        {
+-            QPoint beginNode(baseLineRect().left(),q->height()/2);
+-            QPoint endNode(baseLineRect().right(),q->height()/2);
++        if (q->layoutDirection() == Qt::LeftToRight) {
++            QPoint beginNode(baseLineRect().left(), q->height() / 2);
++            QPoint endNode(baseLineRect().right(), q->height() / 2);
+             m_nodes.append(beginNode);
+ 
+-            if(!q->tickInterval())
+-            {
++            if (!q->tickInterval()) {
+                 m_nodes.append(endNode);
+                 return;
+             }
+ 
+-            for(int i = q->minimum() + q->tickInterval();i < q->maximum();i += q->tickInterval())
+-            {
++            for (int i = q->minimum() + q->tickInterval(); i < q->maximum(); i += q->tickInterval()) {
+                 QPoint point;
+-                int x = baseLineRect().left()+baseLineRect().width()*(i-q->minimum())/(q->maximum()-q->minimum());
+-                int y = q->height()/2;
++                int x = baseLineRect().left() + baseLineRect().width() * (i - q->minimum()) / (q->maximum() - q->minimum());
++                int y = q->height() / 2;
+                 point.setX(x);
+                 point.setY(y);
+                 m_nodes.append(point);
+             }
+             m_nodes.append(endNode);
+-        }
+-        else
+-        {
+-            QPoint beginNode(baseLineRect().right(),q->height()/2);
+-            QPoint endNode(baseLineRect().left(),q->height()/2);
++        } else {
++            QPoint beginNode(baseLineRect().right(), q->height() / 2);
++            QPoint endNode(baseLineRect().left(), q->height() / 2);
+             m_nodes.append(beginNode);
+ 
+-            if(!q->tickInterval())
+-            {
++            if (!q->tickInterval()) {
+                 m_nodes.append(endNode);
+                 return;
+             }
+ 
+-            for(int i = q->minimum() + q->tickInterval();i < q->maximum();i += q->tickInterval())
+-            {
++            for (int i = q->minimum() + q->tickInterval(); i < q->maximum(); i += q->tickInterval()) {
+                 QPoint point;
+-                int x = baseLineRect().right()- baseLineRect().width()*(i-q->minimum())/(q->maximum()-q->minimum());
+-                int y = q->height()/2;
++                int x = baseLineRect().right() - baseLineRect().width() * (i - q->minimum()) / (q->maximum() - q->minimum());
++                int y = q->height() / 2;
+                 point.setX(x);
+                 point.setY(y);
+                 m_nodes.append(point);
+             }
+             m_nodes.append(endNode);
+         }
+-    }
+-    else
+-    {
++    } else {
+         m_nodes.clear();
+-        QPoint beginNode(q->width()/2,baseLineRect().bottom());
+-        QPoint endNode(q->width()/2,baseLineRect().top());
++        QPoint beginNode(q->width() / 2, baseLineRect().bottom());
++        QPoint endNode(q->width() / 2, baseLineRect().top());
+         m_nodes.append(beginNode);
+-        if(!q->tickInterval())
+-        {
++        if (!q->tickInterval()) {
+             m_nodes.append(endNode);
+             return;
+         }
+-        for(int i = q->minimum() + q->tickInterval();i < q->maximum();i += q->tickInterval())
+-        {
++        for (int i = q->minimum() + q->tickInterval(); i < q->maximum(); i += q->tickInterval()) {
+             QPoint point;
+-            int x = q->width()/2;
+-            int y = baseLineRect().top() + baseLineRect().height()*(i-q->minimum())/(q->maximum()-q->minimum());
++            int x = q->width() / 2;
++            int y = baseLineRect().top() + baseLineRect().height() * (i - q->minimum()) / (q->maximum() - q->minimum());
+             point.setX(x);
+             point.setY(y);
+             m_nodes.append(point);
+@@ -411,27 +371,23 @@ void KSliderPrivate::locateNode()
+     }
+ }
+ 
+-void KSliderPrivate::drawBasePath(QPainter*painter)
++void KSliderPrivate::drawBasePath(QPainter *painter)
+ {
+     Q_Q(KSlider);
+     painter->setRenderHint(QPainter::Antialiasing);
+     painter->setPen(Qt::NoPen);
+     painter->setBrush(m_baseColor);
+-     QPainterPath basePath;
+-    basePath.addRoundedRect(this->baseLineRect(),line_border_radius,line_border_radius);
++    QPainterPath basePath;
++    basePath.addRoundedRect(this->baseLineRect(), line_border_radius, line_border_radius);
+ 
+-    if(ThemeController::widgetTheme() == ClassicTheme)
+-    {
++    if (ThemeController::widgetTheme() == ClassicTheme) {
+         QColor color;
+-        if(ThemeController::themeMode() == LightTheme)
+-        {
++        if (ThemeController::themeMode() == LightTheme) {
+             painter->setPen(ThemeController::lanhuHSLToQtHsl(0, 0, 59));
+-            color=ThemeController::ThemeController::lanhuHSLToQtHsl(0, 0, 85);
+-        }
+-        else
+-        {
++            color = ThemeController::ThemeController::lanhuHSLToQtHsl(0, 0, 85);
++        } else {
+             painter->setPen(ThemeController::lanhuHSLToQtHsl(0, 0, 50));
+-            color=ThemeController::ThemeController::lanhuHSLToQtHsl(0, 0, 17);
++            color = ThemeController::ThemeController::lanhuHSLToQtHsl(0, 0, 17);
+         }
+ 
+         basePath.addRect(this->baseLineRect());
+@@ -440,76 +396,59 @@ void KSliderPrivate::drawBasePath(QPainter*painter)
+         basePath.setFillRule(Qt::FillRule::WindingFill);
+         painter->drawPath(basePath.simplified());
+ 
+-        if(m_nodeVisible)
+-        {   
++        if (m_nodeVisible) {
+             painter->setBrush(color);
+-            for(auto point : m_nodes)
+-            {
+-                if(q->orientation() == Qt::Horizontal)
+-//                    basePath.addr(point.x()-1,point.y()-5,3,10);
+-                    painter->drawRect(point.x()-1,point.y()-5,3,10);
++            for (auto point : m_nodes) {
++                if (q->orientation() == Qt::Horizontal)
++                    //                    basePath.addr(point.x()-1,point.y()-5,3,10);
++                    painter->drawRect(point.x() - 1, point.y() - 5, 3, 10);
+                 else
+-//                    basePath.addRect(point.x()-5,point.y()-3,10,3);
+-                    painter->drawRect(point.x()-5,point.y()-3,10,3);
++                    //                    basePath.addRect(point.x()-5,point.y()-3,10,3);
++                    painter->drawRect(point.x() - 5, point.y() - 3, 10, 3);
+             }
+         }
+-    }
+-    else
+-    {
++    } else {
+         painter->setPen(Qt::NoPen);
+         painter->setBrush(m_baseColor);
+-        basePath.addRoundedRect(this->baseLineRect(),line_border_radius,line_border_radius);
+-        if(m_nodeVisible)
+-        {
+-            for(auto point : m_nodes)
+-            {
+-                basePath.addEllipse(point,node_radius,node_radius);
++        basePath.addRoundedRect(this->baseLineRect(), line_border_radius, line_border_radius);
++        if (m_nodeVisible) {
++            for (auto point : m_nodes) {
++                basePath.addEllipse(point, node_radius, node_radius);
+             }
+         }
+         basePath.setFillRule(Qt::FillRule::WindingFill);
+         painter->drawPath(basePath.simplified());
+     }
+-
+ }
+ 
+-void KSliderPrivate::drawCoverLine(QPainter*painter)
++void KSliderPrivate::drawCoverLine(QPainter *painter)
+ {
+     Q_Q(KSlider);
+     painter->setRenderHint(QPainter::Antialiasing);
+     painter->setPen(Qt::NoPen);
+     painter->setBrush(m_coverColor);
+-    painter->drawRoundedRect(this->coverLineRect(),line_border_radius,line_border_radius);
++    painter->drawRoundedRect(this->coverLineRect(), line_border_radius, line_border_radius);
+ }
+ 
+ void KSliderPrivate::updateValuePosition()
+ {
+     Q_Q(KSlider);
+     int prePosition = m_valuePosition;
+-    if(q->orientation() == Qt::Horizontal)
+-    {
+-        if(q->layoutDirection() == Qt::LeftToRight)
+-        {
+-            if(q->maximum() != q->minimum())
+-                m_valuePosition =this->baseLineRect().left() +
+-                    this->baseLineRect().width()*(q->value()-q->minimum())/(q->maximum()-q->minimum());
+-        }
+-        else
+-        {
+-            if(q->maximum() != q->minimum())
+-            {
+-                m_valuePosition =this->baseLineRect().adjusted(0,0,1,0).right() -
+-                    this->baseLineRect().width()*(q->value()-q->minimum())/(q->maximum()-q->minimum());
++    if (q->orientation() == Qt::Horizontal) {
++        if (q->layoutDirection() == Qt::LeftToRight) {
++            if (q->maximum() != q->minimum())
++                m_valuePosition = this->baseLineRect().left() + this->baseLineRect().width() * (q->value() - q->minimum()) / (q->maximum() - q->minimum());
++        } else {
++            if (q->maximum() != q->minimum()) {
++                m_valuePosition = this->baseLineRect().adjusted(0, 0, 1, 0).right() - this->baseLineRect().width() * (q->value() - q->minimum()) / (q->maximum() - q->minimum());
+             }
+         }
++    } else {
++        if (q->maximum() != q->minimum())
++            m_valuePosition = this->baseLineRect().top() + this->baseLineRect().height()
++                - this->baseLineRect().height() * (q->value() - q->minimum()) / (q->maximum() - q->minimum());
+     }
+-    else
+-    {
+-        if(q->maximum() != q->minimum())
+-            m_valuePosition =this->baseLineRect().top()+this->baseLineRect().height()
+-                -this->baseLineRect().height()*(q->value()-q->minimum())/(q->maximum()-q->minimum());
+-    }
+-    if(!m_animationStarted && !m_ismoving)
+-    {
++    if (!m_animationStarted && !m_ismoving) {
+         m_animation->stop();
+         m_animation->setStartValue(prePosition);
+         m_animation->setEndValue(m_valuePosition);
+@@ -523,291 +462,225 @@ void KSliderPrivate::updateValue()
+ {
+     Q_Q(KSlider);
+     int dur = q->maximum() - q->minimum();
+-    int pos,value;
++    int pos, value;
+     int step = q->singleStep();
+-    int nodeInterval =q->tickInterval();
+-    if(q->orientation() == Qt::Horizontal)
+-    {
+-        int left,width,right;
+-        if( q->layoutDirection() == Qt::LeftToRight)
+-        {
+-            if(m_currentpos.x() > baseLineRect().right())
++    int nodeInterval = q->tickInterval();
++    if (q->orientation() == Qt::Horizontal) {
++        int left, width, right;
++        if (q->layoutDirection() == Qt::LeftToRight) {
++            if (m_currentpos.x() > baseLineRect().right())
+                 value = q->maximum();
+-            else if(m_currentpos.x() < baseLineRect().left())
++            else if (m_currentpos.x() < baseLineRect().left())
+                 value = q->minimum();
+-            pos = qRound(q->minimum()+dur*((double)m_currentpos.x()-baseLineRect().left())/baseLineRect().width());
++            pos = qRound(q->minimum() + dur * ((double)m_currentpos.x() - baseLineRect().left()) / baseLineRect().width());
+             left = baseLineRect().left();
+             width = baseLineRect().width();
+-        }
+-        else
+-        {
+-            if(m_currentpos.x() > baseLineRect().right())
++        } else {
++            if (m_currentpos.x() > baseLineRect().right())
+                 value = q->minimum();
+-            else if(m_currentpos.x() < baseLineRect().left())
++            else if (m_currentpos.x() < baseLineRect().left())
+                 value = q->maximum();
+-            pos = qRound(q->minimum()-dur*((double)m_currentpos.x()-baseLineRect().right() -1)/baseLineRect().width());
++            pos = qRound(q->minimum() - dur * ((double)m_currentpos.x() - baseLineRect().right() - 1) / baseLineRect().width());
+             right = baseLineRect().right();
+             width = baseLineRect().width();
+         }
+-        switch (m_sliderType)
+-        {
++        switch (m_sliderType) {
+         case SingleSelectSlider:
+         case SmoothSlider:
+             value = pos;
+             break;
+-        case StepSlider:
+-        {
+-            int frontIndex = (pos-q->minimum()) / step;
+-            int backIndex = (pos-q->minimum()) / step + 1;
+-            if( q->layoutDirection() == Qt::LeftToRight)
+-            {
+-                if((m_currentpos.x()-left-frontIndex*step*width/dur)
+-                        <(backIndex*step*width/dur - (m_currentpos.x()-left)))
++        case StepSlider: {
++            int frontIndex = (pos - q->minimum()) / step;
++            int backIndex = (pos - q->minimum()) / step + 1;
++            if (q->layoutDirection() == Qt::LeftToRight) {
++                if ((m_currentpos.x() - left - frontIndex * step * width / dur)
++                    < (backIndex * step * width / dur - (m_currentpos.x() - left)))
+                     pos = frontIndex * step + q->minimum();
+                 else
+                     pos = backIndex * step + q->minimum();
+-            }
+-            else
+-            {
+-                if((right - m_currentpos.x()-frontIndex*step*width/dur)
+-                        <(backIndex*step*width/dur - (right - m_currentpos.x())))
++            } else {
++                if ((right - m_currentpos.x() - frontIndex * step * width / dur)
++                    < (backIndex * step * width / dur - (right - m_currentpos.x())))
+                     pos = frontIndex * step + q->minimum();
+                 else
+                     pos = backIndex * step + q->minimum();
+             }
+             value = pos;
+-        }
+-            break;
+-        case NodeSlider:
+-        {
+-            int frontIndex = (pos-q->minimum()) / nodeInterval;
+-            int backIndex = (pos-q->minimum()) / nodeInterval + 1;
+-            if( q->layoutDirection() == Qt::LeftToRight)
+-            {
+-                if((m_currentpos.x()-left-frontIndex*nodeInterval*width/dur)
+-                        <(backIndex*nodeInterval*width/dur - (m_currentpos.x()-left)))
++        } break;
++        case NodeSlider: {
++            int frontIndex = (pos - q->minimum()) / nodeInterval;
++            int backIndex = (pos - q->minimum()) / nodeInterval + 1;
++            if (q->layoutDirection() == Qt::LeftToRight) {
++                if ((m_currentpos.x() - left - frontIndex * nodeInterval * width / dur)
++                    < (backIndex * nodeInterval * width / dur - (m_currentpos.x() - left)))
+                     pos = frontIndex * nodeInterval + q->minimum();
+                 else
+                     pos = backIndex * nodeInterval + q->minimum();
+-            }
+-            else
+-            {
+-                if((right - m_currentpos.x()-frontIndex*nodeInterval*width/dur)
+-                        <(backIndex*nodeInterval*width/dur - (right - m_currentpos.x())))
++            } else {
++                if ((right - m_currentpos.x() - frontIndex * nodeInterval * width / dur)
++                    < (backIndex * nodeInterval * width / dur - (right - m_currentpos.x())))
+                     pos = frontIndex * nodeInterval + q->minimum();
+                 else
+                     pos = backIndex * nodeInterval + q->minimum();
+             }
+             value = pos;
+-        }
+-            break;
++        } break;
+         default:
+             break;
+         }
+-    }
+-    else
+-    {
+-        if(m_currentpos.y() < baseLineRect().top())
++    } else {
++        if (m_currentpos.y() < baseLineRect().top())
+             value = q->maximum();
+-        else if(m_currentpos.y() > baseLineRect().bottom())
++        else if (m_currentpos.y() > baseLineRect().bottom())
+             value = q->minimum();
+-        pos = qRound(q->minimum()+dur*((double)q->height()-m_currentpos.y())/q->height());
++        pos = qRound(q->minimum() + dur * ((double)q->height() - m_currentpos.y()) / q->height());
+         int top = baseLineRect().top();
+         int height = baseLineRect().height();
+-        switch (m_sliderType)
+-        {
++        switch (m_sliderType) {
+         case SingleSelectSlider:
+         case SmoothSlider:
+             value = pos;
+             break;
+-        case StepSlider:
+-        {
+-            int frontIndex = (pos-q->minimum())  / step + 1;
+-            int backIndex = (pos-q->minimum())  / step ;
+-            if((m_currentpos.y()-top - (height-frontIndex*step*height/dur))<
+-                    ((height-backIndex*step*height/dur) - (m_currentpos.y()-top)))
++        case StepSlider: {
++            int frontIndex = (pos - q->minimum()) / step + 1;
++            int backIndex = (pos - q->minimum()) / step;
++            if ((m_currentpos.y() - top - (height - frontIndex * step * height / dur)) < ((height - backIndex * step * height / dur) - (m_currentpos.y() - top)))
+                 pos = frontIndex * step + q->minimum();
+             else
+                 pos = backIndex * step + q->minimum();
+             value = pos;
+-        }
+-            break;
+-        case NodeSlider:
+-        {
+-            int frontIndex = (pos-q->minimum()) / nodeInterval + 1;
+-            int backIndex = (pos-q->minimum()) / nodeInterval ;
+-            if((m_currentpos.y()-top - (height-frontIndex*nodeInterval*height/dur))<
+-                    ((height-backIndex*nodeInterval*height/dur) - (m_currentpos.y()-top)))
++        } break;
++        case NodeSlider: {
++            int frontIndex = (pos - q->minimum()) / nodeInterval + 1;
++            int backIndex = (pos - q->minimum()) / nodeInterval;
++            if ((m_currentpos.y() - top - (height - frontIndex * nodeInterval * height / dur)) < ((height - backIndex * nodeInterval * height / dur) - (m_currentpos.y() - top)))
+                 pos = frontIndex * nodeInterval + q->minimum();
+             else
+                 pos = backIndex * nodeInterval + q->minimum();
+             value = pos;
+-        }
+-            break;
++        } break;
+         default:
+             break;
+         }
+     }
+-    if(q->tickInterval() !=0)
+-    {
+-        if(!m_ismoving)
++    if (q->tickInterval() != 0) {
++        if (!m_ismoving)
+             q->setValue(value);
+-    }
+-    else
+-    {
++    } else {
+         q->setValue(value);
+     }
+-
+ }
+ 
+ void KSliderPrivate::updateColor(QPalette palette)
+ {
+     Q_Q(KSlider);
+-//    QColor highlightColor = palette.color(QPalette::Highlight);
++    //    QColor highlightColor = palette.color(QPalette::Highlight);
+     QColor highlightColor = ThemeController::getPaletteColorFromDT("highlight");
+-//    QColor mix=q->palette().color(QPalette::BrightText);
++    //    QColor mix=q->palette().color(QPalette::BrightText);
+     QColor mix = ThemeController::getPaletteColorFromDT("brighttext");
+ 
+-    if(m_isTranslucent)
+-    {
+-//        m_baseColor = palette.color(QPalette::BrightText);
++    if (m_isTranslucent) {
++        //        m_baseColor = palette.color(QPalette::BrightText);
+         m_baseColor = ThemeController::getPaletteColorFromDT("brighttext");
+         m_baseColor.setAlphaF(0.1);
+-    }
+-    else
+-//        m_baseColor = palette.color(QPalette::Button);
++    } else
++        //        m_baseColor = palette.color(QPalette::Button);
+         m_baseColor = ThemeController::getPaletteColorFromDT("button");
+ 
+-    if(ThemeController::widgetTheme() == ClassicTheme)
+-    {
+-        if(ThemeController::themeMode() == LightTheme)
+-        {
+-            if(!q->isEnabled())
+-            {
++    if (ThemeController::widgetTheme() == ClassicTheme) {
++        if (ThemeController::themeMode() == LightTheme) {
++            if (!q->isEnabled()) {
+                 m_coverColor = ThemeController::lanhuHSLToQtHsl(0, 0, 73);
+-                m_startColor = ThemeController::lanhuHSLToQtHsl(0,0,98);
++                m_startColor = ThemeController::lanhuHSLToQtHsl(0, 0, 98);
+                 return;
+             }
+-//            m_coverColor = palette.highlight().color();
++            //            m_coverColor = palette.highlight().color();
+             m_coverColor = ThemeController::getPaletteColorFromDT("highlight");
+-            if(m_isPressed)
+-            {
+-                m_startColor = ThemeController::highlightClick(false,palette);
+-            }
+-            else if(m_isHovered)
+-            {
+-                m_startColor = ThemeController::highlightHover(false,palette);
+-            }
+-            else
+-            {
++            if (m_isPressed) {
++                m_startColor = ThemeController::highlightClick(false, palette);
++            } else if (m_isHovered) {
++                m_startColor = ThemeController::highlightHover(false, palette);
++            } else {
+                 m_startColor = ThemeController::lanhuHSLToQtHsl(0, 0, 98);
+             }
+-        }
+-        else
+-        {
+-            if(!q->isEnabled())
+-            {
+-                m_coverColor = ThemeController::lanhuHSLToQtHsl(240,2,30);
++        } else {
++            if (!q->isEnabled()) {
++                m_coverColor = ThemeController::lanhuHSLToQtHsl(240, 2, 30);
+                 m_startColor = ThemeController::lanhuHSLToQtHsl(0, 0, 35);
+                 return;
+             }
+-//            m_coverColor = palette.highlight().color();
++            //            m_coverColor = palette.highlight().color();
+             m_coverColor = ThemeController::getPaletteColorFromDT("highlight");
+-            if(m_isPressed)
+-            {
+-                m_startColor = ThemeController::highlightClick(true,palette);
+-            }
+-            else if(m_isHovered)
+-            {
+-                m_startColor = ThemeController::highlightHover(true,palette);
+-            }
+-            else
+-            {
++            if (m_isPressed) {
++                m_startColor = ThemeController::highlightClick(true, palette);
++            } else if (m_isHovered) {
++                m_startColor = ThemeController::highlightHover(true, palette);
++            } else {
+                 m_startColor = ThemeController::lanhuHSLToQtHsl(0, 0, 27);
+             }
+         }
+-    }
+-    else
+-    {
+-        if(!q->isEnabled())
+-        {
+-//            m_coverColor = palette.color(QPalette::Disabled,QPalette::ButtonText);
++    } else {
++        if (!q->isEnabled()) {
++            //            m_coverColor = palette.color(QPalette::Disabled,QPalette::ButtonText);
+             m_coverColor = ThemeController::getPaletteColorFromDT("buttontext");
+-//            m_startColor = palette.color(QPalette::Disabled,QPalette::ButtonText);
++            //            m_startColor = palette.color(QPalette::Disabled,QPalette::ButtonText);
+             m_startColor = ThemeController::getPaletteColorFromDT("buttontext");
+             return;
+         }
+-        if(ThemeController::themeMode() == LightTheme)
+-        {
++        if (ThemeController::themeMode() == LightTheme) {
+             QColor whiteColor("#FFFFFF");
+             QColor darkColor("#000000");
+-            m_coverColor = ThemeController::mixColor(highlightColor,mix,0.2);
+-            if(m_isPressed)
+-            {
+-    //            m_coverColor = highlightColor.darker(120).darker(120); //取消lineRect三态
++            m_coverColor = ThemeController::mixColor(highlightColor, mix, 0.2);
++            if (m_isPressed) {
++                //            m_coverColor = highlightColor.darker(120).darker(120); //取消lineRect三态
+                 m_startColor = highlightColor.darker(120);
+                 return;
+-            }
+-            else if(m_isHovered)
+-            {
+-    //            m_coverColor = highlightColor.darker(120);//取消lineRect三态
+-                if(ThemeController::widgetTheme() == FashionTheme)
+-                {
++            } else if (m_isHovered) {
++                //            m_coverColor = highlightColor.darker(120);//取消lineRect三态
++                if (ThemeController::widgetTheme() == FashionTheme) {
+                     QColor startColor;
+                     QColor endColor;
+ 
+-                    ThemeController::getGradientFromDT("kbrand-hover",startColor,endColor);
+-                    if(!startColor.isValid())
+-                        startColor = ThemeController::mixColor(highlightColor,whiteColor,0.2);
+-                    if(!endColor.isValid())
+-                        endColor = ThemeController::mixColor(highlightColor,darkColor,0.05);
+-                    m_linearGradient.setColorAt(0,startColor);
+-                    m_linearGradient.setColorAt(1,endColor);
+-                }
+-                else
++                    ThemeController::getGradientFromDT("kbrand-hover", startColor, endColor);
++                    if (!startColor.isValid())
++                        startColor = ThemeController::mixColor(highlightColor, whiteColor, 0.2);
++                    if (!endColor.isValid())
++                        endColor = ThemeController::mixColor(highlightColor, darkColor, 0.05);
++                    m_linearGradient.setColorAt(0, startColor);
++                    m_linearGradient.setColorAt(1, endColor);
++                } else
+                     m_startColor = highlightColor.darker(105);
+                 return;
+-            }
+-            else
+-            {
+-    //            m_coverColor = highlightColor.darker(120);//取消lineRect三态
++            } else {
++                //            m_coverColor = highlightColor.darker(120);//取消lineRect三态
+                 m_startColor = highlightColor;
+             }
+-        }
+-        else
+-        {
++        } else {
+             QColor whiteColor("#FFFFFF");
+-            m_coverColor = ThemeController::mixColor(highlightColor,mix,0.05);
+-            if(m_isPressed)
+-            {
+-    //            m_coverColor = highlightColor.lighter(120).lighter(120);//取消lineRect三态
+-                m_startColor = ThemeController::mixColor(highlightColor,mix,0.1);
++            m_coverColor = ThemeController::mixColor(highlightColor, mix, 0.05);
++            if (m_isPressed) {
++                //            m_coverColor = highlightColor.lighter(120).lighter(120);//取消lineRect三态
++                m_startColor = ThemeController::mixColor(highlightColor, mix, 0.1);
+                 return;
+-            }
+-            else if(m_isHovered)
+-            {
+-    //            m_coverColor = highlightColor.lighter(120);//取消lineRect三态
+-                if(ThemeController::widgetTheme() == FashionTheme)
+-                {
++            } else if (m_isHovered) {
++                //            m_coverColor = highlightColor.lighter(120);//取消lineRect三态
++                if (ThemeController::widgetTheme() == FashionTheme) {
+                     QColor startColor;
+                     QColor endColor;
+ 
+-                    ThemeController::getGradientFromDT("kbrand-hover",startColor,endColor);
+-                    if(!startColor.isValid())
+-                        startColor = ThemeController::mixColor(highlightColor,whiteColor,0.2);
+-                    if(!endColor.isValid())
++                    ThemeController::getGradientFromDT("kbrand-hover", startColor, endColor);
++                    if (!startColor.isValid())
++                        startColor = ThemeController::mixColor(highlightColor, whiteColor, 0.2);
++                    if (!endColor.isValid())
+                         endColor = highlightColor;
+ 
+-                     m_linearGradient.setColorAt(0,startColor);
+-                     m_linearGradient.setColorAt(1,endColor);
+-                }
+-                else
++                    m_linearGradient.setColorAt(0, startColor);
++                    m_linearGradient.setColorAt(1, endColor);
++                } else
+                     m_startColor = highlightColor.lighter(105);
+                 return;
+-            }
+-            else
+-            {
+-    //            m_coverColor = highlightColor.lighter(120);//取消lineRect三态
++            } else {
++                //            m_coverColor = highlightColor.lighter(120);//取消lineRect三态
+                 m_startColor = highlightColor;
+             }
+         }
+@@ -817,15 +690,12 @@ void KSliderPrivate::updateColor(QPalette palette)
+ void KSliderPrivate::changeTheme()
+ {
+     Q_Q(KSlider);
+-    if(m_isTranslucentFlag)
+-    {
+-        if(ThemeController::widgetTheme() == ClassicTheme)
++    if (m_isTranslucentFlag) {
++        if (ThemeController::widgetTheme() == ClassicTheme)
+             m_isTranslucent = false;
+         else
+             m_isTranslucent = true;
+-    }
+-    else
+-    {
++    } else {
+         m_isTranslucent = false;
+     }
+     initThemeStyle();
+@@ -835,20 +705,17 @@ QRect KSliderPrivate::baseLineRect()
+ {
+     Q_Q(KSlider);
+     QRect rect;
+-        if(q->orientation() == Qt::Horizontal)
+-        {
+-            rect.setBottom(q->height()/2 + line_width/2);
+-            rect.setTop(q->height()/2 - line_width/2);
+-            rect.setLeft(spaceing +Parmscontroller::parm(Parmscontroller::Parm::PM_SliderHandleRadius)/2);
+-            rect.setRight(q->width() - spaceing -Parmscontroller::parm(Parmscontroller::Parm::PM_SliderHandleRadius)/2);
+-        }
+-        else
+-        {
+-            rect.setBottom(q->height() - spaceing -m_handleRadius);
+-            rect.setTop(spaceing);
+-            rect.setLeft(q->width()/2 - line_width/2);
+-            rect.setRight(q->width()/2 + line_width/2);
+-        }
++    if (q->orientation() == Qt::Horizontal) {
++        rect.setBottom(q->height() / 2 + line_width / 2);
++        rect.setTop(q->height() / 2 - line_width / 2);
++        rect.setLeft(spaceing + Parmscontroller::parm(Parmscontroller::Parm::PM_SliderHandleRadius) / 2);
++        rect.setRight(q->width() - spaceing - Parmscontroller::parm(Parmscontroller::Parm::PM_SliderHandleRadius) / 2);
++    } else {
++        rect.setBottom(q->height() - spaceing - m_handleRadius);
++        rect.setTop(spaceing);
++        rect.setLeft(q->width() / 2 - line_width / 2);
++        rect.setRight(q->width() / 2 + line_width / 2);
++    }
+     return rect;
+ }
+ 
+@@ -856,41 +723,35 @@ QRect KSliderPrivate::coverLineRect()
+ {
+     Q_Q(KSlider);
+     QRect rect;
+-    if(q->orientation() == Qt::Horizontal)
+-    {
+-        if(q->layoutDirection() == Qt::LeftToRight)
+-        {
+-            rect.setBottom(q->height()/2 + line_width/2);
+-            rect.setTop(q->height()/2 - line_width/2);
+-            rect.setLeft(spaceing + Parmscontroller::parm(Parmscontroller::Parm::PM_SliderHandleRadius)/2);
+-            if(m_ismoving)
++    if (q->orientation() == Qt::Horizontal) {
++        if (q->layoutDirection() == Qt::LeftToRight) {
++            rect.setBottom(q->height() / 2 + line_width / 2);
++            rect.setTop(q->height() / 2 - line_width / 2);
++            rect.setLeft(spaceing + Parmscontroller::parm(Parmscontroller::Parm::PM_SliderHandleRadius) / 2);
++            if (m_ismoving)
+                 rect.setRight(m_currentpos.x());
+-            else if(m_resize)
++            else if (m_resize)
+                 rect.setRight(m_valuePosition);
+             else
+                 rect.setRight(m_animation->currentValue().toInt());
+-        }
+-        else
+-        {
+-            rect.setBottom(q->height()/2 + line_width/2);
+-            rect.setTop(q->height()/2 - line_width/2);
+-            if(m_ismoving)
++        } else {
++            rect.setBottom(q->height() / 2 + line_width / 2);
++            rect.setTop(q->height() / 2 - line_width / 2);
++            if (m_ismoving)
+                 rect.setLeft(m_currentpos.x());
+-            else if(m_resize)
++            else if (m_resize)
+                 rect.setLeft(m_valuePosition);
+             else
+                 rect.setLeft(m_animation->currentValue().toInt());
+-            rect.setRight(q->width() - spaceing -Parmscontroller::parm(Parmscontroller::Parm::PM_SliderHandleRadius)/2);
++            rect.setRight(q->width() - spaceing - Parmscontroller::parm(Parmscontroller::Parm::PM_SliderHandleRadius) / 2);
+         }
+-    }
+-    else
+-    {
+-        rect.setBottom(q->height() - spaceing -m_handleRadius);
+-        rect.setLeft(q->width()/2 - line_width/2);
+-        rect.setRight(q->width()/2 + line_width/2);
+-        if(m_ismoving)
++    } else {
++        rect.setBottom(q->height() - spaceing - m_handleRadius);
++        rect.setLeft(q->width() / 2 - line_width / 2);
++        rect.setRight(q->width() / 2 + line_width / 2);
++        if (m_ismoving)
+             rect.setTop(m_currentpos.y());
+-        else if(m_resize)
++        else if (m_resize)
+             rect.setTop(m_valuePosition);
+         else
+             rect.setTop(m_animation->currentValue().toInt());
+@@ -899,17 +760,18 @@ QRect KSliderPrivate::coverLineRect()
+ }
+ 
+ KSlider::KSlider(QWidget *parent)
+-    :KSlider(Qt::Horizontal,parent)
++    : KSlider(Qt::Horizontal, parent)
+ {
+ }
+ 
+ KSlider::KSlider(Qt::Orientation orientation, QWidget *parent)
+-    :QSlider(orientation,parent),d_ptr(new KSliderPrivate(this))
++    : QSlider(orientation, parent)
++    , d_ptr(new KSliderPrivate(this))
+ {
+     Q_D(KSlider);
+     d->changeTheme();
+-    connect(d->m_gsetting,&QGSettings::changed, d,&KSliderPrivate::changeTheme);
+-    connect(Parmscontroller::self(),&Parmscontroller::modeChanged,this,[=](){
++    connect(d->m_gsetting, &QGSettings::changed, d, &KSliderPrivate::changeTheme);
++    connect(Parmscontroller::self(), &Parmscontroller::modeChanged, this, [=]() {
+         updateGeometry();
+         update();
+     });
+@@ -928,15 +790,14 @@ void KSlider::setSliderType(KSliderType type)
+ {
+     Q_D(KSlider);
+     d->m_sliderType = type;
+-    if(!tickInterval() && type == KSliderType::NodeSlider)
++    if (!tickInterval() && type == KSliderType::NodeSlider)
+         setTickInterval(10);
+-   if(!singleStep()  && type == KSliderType::StepSlider)
+-       setSingleStep(10);
+-    if(type == KSliderType::SingleSelectSlider)
+-    {
++    if (!singleStep() && type == KSliderType::StepSlider)
++        setSingleStep(10);
++    if (type == KSliderType::SingleSelectSlider) {
+         setTickInterval(1);
+         setSingleStep(1);
+-        setRange(0,2);
++        setRange(0, 2);
+     }
+ }
+ 
+@@ -962,8 +823,7 @@ void KSlider::setValue(int value)
+ void KSlider::setNodeVisible(bool flag)
+ {
+     Q_D(KSlider);
+-    if(d->m_nodeVisible != flag)
+-    {
++    if (d->m_nodeVisible != flag) {
+         d->m_nodeVisible = flag;
+         repaint();
+     }
+@@ -989,7 +849,7 @@ QString KSlider::toolTip() const
+ 
+ void KSlider::setTranslucent(bool flag)
+ {
+-     Q_D(KSlider);
++    Q_D(KSlider);
+     d->m_isTranslucentFlag = flag;
+     d->m_isTranslucent = flag;
+     d->changeTheme();
+@@ -997,27 +857,22 @@ void KSlider::setTranslucent(bool flag)
+ 
+ bool KSlider::isTranslucent()
+ {
+-     Q_D(KSlider);
++    Q_D(KSlider);
+     return d->m_isTranslucent;
+ }
+ 
+ void KSlider::paintEvent(QPaintEvent *event)
+ {
+     Q_D(KSlider);
+-    if(orientation() == Qt::Horizontal)
+-    {
+-        for(auto point : d->m_nodes)
+-        {
+-            if(point.x()<= d->m_valuePosition)
+-                d->m_linearGradient=QLinearGradient(point.x(),point.y()-node_radius,point.x(),point.y()+node_radius);
++    if (orientation() == Qt::Horizontal) {
++        for (auto point : d->m_nodes) {
++            if (point.x() <= d->m_valuePosition)
++                d->m_linearGradient = QLinearGradient(point.x(), point.y() - node_radius, point.x(), point.y() + node_radius);
+         }
+-    }
+-    else
+-    {
+-        for(auto point : d->m_nodes)
+-        {
+-            if(point.y()>= d->m_valuePosition)
+-                d->m_linearGradient = QLinearGradient(point.x(),point.y()-node_radius,point.x(),point.y()+node_radius);
++    } else {
++        for (auto point : d->m_nodes) {
++            if (point.y() >= d->m_valuePosition)
++                d->m_linearGradient = QLinearGradient(point.x(), point.y() - node_radius, point.x(), point.y() + node_radius);
+         }
+     }
+ 
+@@ -1025,20 +880,18 @@ void KSlider::paintEvent(QPaintEvent *event)
+     d->locateNode();
+     d->updateValuePosition();
+     QPainter p(this);
+-    p.setRenderHint(QPainter::Antialiasing,true);
+-    p.setRenderHint(QPainter::SmoothPixmapTransform,true);
+-    p.setRenderHint(QPainter::HighQualityAntialiasing,true);
+-    if(ThemeController::widgetTheme() == ClassicTheme)
+-    {
+-        if(p.pen().width() == 1)
+-            p.translate(0.5,0.5);
++    p.setRenderHint(QPainter::Antialiasing, true);
++    p.setRenderHint(QPainter::SmoothPixmapTransform, true);
++    p.setRenderHint(QPainter::HighQualityAntialiasing, true);
++    if (ThemeController::widgetTheme() == ClassicTheme) {
++        if (p.pen().width() == 1)
++            p.translate(0.5, 0.5);
+     }
+     d->drawBasePath(&p);
+-    if(d->m_sliderType != SingleSelectSlider)
++    if (d->m_sliderType != SingleSelectSlider)
+         d->drawCoverLine(&p);
+-    if(d->m_nodeVisible)
+-    {
+-        if(d->m_sliderType != SingleSelectSlider)
++    if (d->m_nodeVisible) {
++        if (d->m_sliderType != SingleSelectSlider)
+             d->drawCoverNode(&p);
+     }
+     d->drawSlider(&p);
+@@ -1055,8 +908,7 @@ void KSlider::mousePressEvent(QMouseEvent *event)
+ {
+     Q_D(KSlider);
+ 
+-    if(event->button() == Qt::LeftButton)
+-    {
++    if (event->button() == Qt::LeftButton) {
+         d->m_currentpos = event->pos();
+         d->m_isPressed = true;
+         d->updateColor(palette());
+@@ -1068,32 +920,27 @@ void KSlider::mousePressEvent(QMouseEvent *event)
+ void KSlider::mouseReleaseEvent(QMouseEvent *event)
+ {
+     Q_D(KSlider);
+-    if(event->button() == Qt::LeftButton)
+-    {
+-        if(orientation() == Qt::Horizontal)
+-        {
+-            if( event->pos().x() >= d->baseLineRect().left() && event->pos().x() <= d->baseLineRect().adjusted(0,0,1,0).right() )
++    if (event->button() == Qt::LeftButton) {
++        if (orientation() == Qt::Horizontal) {
++            if (event->pos().x() >= d->baseLineRect().left() && event->pos().x() <= d->baseLineRect().adjusted(0, 0, 1, 0).right())
+                 d->m_currentpos = event->pos();
+-            else if( event->pos().x() < d->baseLineRect().left() )
++            else if (event->pos().x() < d->baseLineRect().left())
+                 d->m_currentpos.setX(d->baseLineRect().left());
+-            else if( event->pos().x() > d->baseLineRect().adjusted(0,0,1,0).right() )
+-                d->m_currentpos.setX(d->baseLineRect().adjusted(0,0,1,0).right());
+-        }
+-        else
+-        {
+-            if( event->pos().y() >= d->baseLineRect().top() && event->pos().y() <= d->baseLineRect().adjusted(0,0,0,1).bottom() )
++            else if (event->pos().x() > d->baseLineRect().adjusted(0, 0, 1, 0).right())
++                d->m_currentpos.setX(d->baseLineRect().adjusted(0, 0, 1, 0).right());
++        } else {
++            if (event->pos().y() >= d->baseLineRect().top() && event->pos().y() <= d->baseLineRect().adjusted(0, 0, 0, 1).bottom())
+                 d->m_currentpos = event->pos();
+-            else if( event->pos().y() > d->baseLineRect().adjusted(0,0,0,1).bottom() )
+-                d->m_currentpos.setY(d->baseLineRect().adjusted(0,0,0,1).bottom());
+-            else if( event->pos().y() < d->baseLineRect().top() )
++            else if (event->pos().y() > d->baseLineRect().adjusted(0, 0, 0, 1).bottom())
++                d->m_currentpos.setY(d->baseLineRect().adjusted(0, 0, 0, 1).bottom());
++            else if (event->pos().y() < d->baseLineRect().top())
+                 d->m_currentpos.setY(d->baseLineRect().top());
+         }
+-        if(d->m_ismoving)
+-        {
+-            if(orientation() == Qt::Horizontal)
+-            d->m_valuePosition =  d->m_currentpos.x();
++        if (d->m_ismoving) {
++            if (orientation() == Qt::Horizontal)
++                d->m_valuePosition = d->m_currentpos.x();
+             else
+-                d->m_valuePosition =  d->m_currentpos.y();
++                d->m_valuePosition = d->m_currentpos.y();
+         }
+         d->m_isPressed = false;
+         d->m_ismoving = false;
+@@ -1107,34 +954,29 @@ void KSlider::mouseReleaseEvent(QMouseEvent *event)
+ void KSlider::mouseMoveEvent(QMouseEvent *event)
+ {
+     Q_D(KSlider);
+-    if(d->m_isPressed)
+-    {
+-        if(orientation() == Qt::Horizontal)
+-        {
+-            if(event->pos().x() >= d->baseLineRect().left() &&event->pos().x() <= d->baseLineRect().adjusted(0,0,1,0).right())
++    if (d->m_isPressed) {
++        if (orientation() == Qt::Horizontal) {
++            if (event->pos().x() >= d->baseLineRect().left() && event->pos().x() <= d->baseLineRect().adjusted(0, 0, 1, 0).right())
+                 d->m_currentpos = event->pos();
+-            else if(event->pos().x() < d->baseLineRect().left())
++            else if (event->pos().x() < d->baseLineRect().left())
+                 d->m_currentpos.setX(d->baseLineRect().left());
+-            else if(event->pos().x() > d->baseLineRect().adjusted(0,0,1,0).right())
+-                d->m_currentpos.setX(d->baseLineRect().adjusted(0,0,1,0).right());
+-        d->m_ismoving = true;
+-        d->updateValue();
+-        update();
+-    }
+-        else
+-        {
+-            if( event->pos().y() >= d->baseLineRect().top() && event->pos().y() <= d->baseLineRect().adjusted(0,0,0,1).bottom() )
++            else if (event->pos().x() > d->baseLineRect().adjusted(0, 0, 1, 0).right())
++                d->m_currentpos.setX(d->baseLineRect().adjusted(0, 0, 1, 0).right());
++            d->m_ismoving = true;
++            d->updateValue();
++            update();
++        } else {
++            if (event->pos().y() >= d->baseLineRect().top() && event->pos().y() <= d->baseLineRect().adjusted(0, 0, 0, 1).bottom())
+                 d->m_currentpos = event->pos();
+-            else if( event->pos().y() > d->baseLineRect().adjusted(0,0,0,1).bottom() )
+-                d->m_currentpos.setY(d->baseLineRect().adjusted(0,0,0,1).bottom());
+-            else if( event->pos().y() < d->baseLineRect().top() )
++            else if (event->pos().y() > d->baseLineRect().adjusted(0, 0, 0, 1).bottom())
++                d->m_currentpos.setY(d->baseLineRect().adjusted(0, 0, 0, 1).bottom());
++            else if (event->pos().y() < d->baseLineRect().top())
+                 d->m_currentpos.setY(d->baseLineRect().top());
+-        d->m_ismoving = true;
+-        d->updateValue();
+-        update();
+-    }
+-    }
+-    else {
++            d->m_ismoving = true;
++            d->updateValue();
++            update();
++        }
++    } else {
+         d->m_ismoving = false;
+     }
+ }
+@@ -1147,8 +989,7 @@ void KSlider::wheelEvent(QWheelEvent *event)
+ bool KSlider::eventFilter(QObject *watched, QEvent *event)
+ {
+     Q_D(KSlider);
+-    if(watched == this)
+-    {
++    if (watched == this) {
+         switch (event->type()) {
+         case QEvent::Enter:
+             d->m_isHovered = true;
+@@ -1158,45 +999,38 @@ bool KSlider::eventFilter(QObject *watched, QEvent *event)
+             d->m_isHovered = false;
+             d->updateColor(palette());
+             break;
+-        case QEvent::ToolTip:
+-        {
+-            QHelpEvent* ex = static_cast<QHelpEvent*>(event);
+-            d->m_rect = QRect(d->m_currentpos.x()-handle_radius,d->m_currentpos.y()-handle_radius,handle_radius*2,handle_radius*2);
+-            if(d->m_rect.contains(ex->pos()))
+-            {
+-                QToolTip::showText(cursor().pos(),d->m_pToolTipText);
+-            }
+-            else
++        case QEvent::ToolTip: {
++            QHelpEvent *ex = static_cast<QHelpEvent *>(event);
++            d->m_rect = QRect(d->m_currentpos.x() - handle_radius, d->m_currentpos.y() - handle_radius, handle_radius * 2, handle_radius * 2);
++            if (d->m_rect.contains(ex->pos())) {
++                QToolTip::showText(cursor().pos(), d->m_pToolTipText);
++            } else
+                 return true;
+             break;
+         }
+-        case QEvent::Wheel:
+-        {
++        case QEvent::Wheel: {
+             d->m_forceUpdate = true;
+-        }
+-            break;
+-        case QEvent::KeyPress:
+-        {
++        } break;
++        case QEvent::KeyPress: {
+             d->m_forceUpdate = true;
+-        }
+-            break;
++        } break;
+         default:
+             break;
+         }
+     }
+-    return QSlider::eventFilter(watched,event);
++    return QSlider::eventFilter(watched, event);
+ }
+ 
+ QSize KSlider::sizeHint() const
+ {
+     auto size = QSlider::sizeHint();
+-    if(orientation() == Qt::Horizontal)
+-        size.setHeight(Parmscontroller::parm(Parmscontroller::Parm::PM_SliderHandleRadius)+2);
++    if (orientation() == Qt::Horizontal)
++        size.setHeight(Parmscontroller::parm(Parmscontroller::Parm::PM_SliderHandleRadius) + 2);
+     else
+-        size.setWidth(Parmscontroller::parm(Parmscontroller::Parm::PM_SliderHandleRadius)+2);
++        size.setWidth(Parmscontroller::parm(Parmscontroller::Parm::PM_SliderHandleRadius) + 2);
+     return size;
+ }
+ 
+ }
+-//#include "kslider.moc"
++// #include "kslider.moc"
+ #include "moc_kslider.cpp"
+diff --git a/kysdk-qtwidgets/src/kslider.h b/kysdk-qtwidgets/src/kslider.h
+index 9685d09..666b3a8 100644
+--- a/kysdk-qtwidgets/src/kslider.h
++++ b/kysdk-qtwidgets/src/kslider.h
+@@ -23,18 +23,17 @@
+ #ifndef KSLIDER_H
+ #define KSLIDER_H
+ 
+-#include <QSlider>
+-#include <QList>
+ #include "gui_g.h"
++#include <QList>
++#include <QSlider>
+ 
+ namespace kdk
+ {
+ /** @defgroup SliderModule
+-  * @{
+-  */
++ * @{
++ */
+ 
+-enum KSliderType
+-{
++enum KSliderType {
+     SmoothSlider,
+     StepSlider,
+     NodeSlider,
+@@ -49,11 +48,11 @@ class KSliderPrivate;
+  * 步数关系:步数为固定值,可根据步数值点击和拖拽
+  * 节点关系:步数为节点间隔,可根据节点间隔点击和拖拽
+  */
+-class KSlider:public QSlider
++class KSlider : public QSlider
+ {
+     Q_OBJECT
+ public:
+-    KSlider(QWidget*parent);
++    KSlider(QWidget *parent);
+     KSlider(Qt::Orientation orientation, QWidget *parent = nullptr);
+ 
+     /**
+@@ -78,7 +77,7 @@ public:
+      * @brief 获取节点间隔
+      * @return
+      */
+-    int	tickInterval() const;
++    int tickInterval() const;
+ 
+     /**
+      * @brief 设置值
+@@ -101,14 +100,14 @@ public:
+      * @brief 设置tooltip
+      * @since 1.2
+      */
+-    void setToolTip(const QString&);
++    void setToolTip(const QString &);
+ 
+     /**
+      * @brief 获取toolTip
+      * @since 1.2
+      * @return
+      */
+-    QString	toolTip() const;
++    QString toolTip() const;
+ 
+     /**
+      * @brief 设置是否启用半透明效果
+@@ -124,7 +123,6 @@ public:
+      */
+     bool isTranslucent();
+ 
+-
+ protected:
+     void paintEvent(QPaintEvent *event);
+     void resizeEvent(QResizeEvent *event);
+@@ -133,19 +131,19 @@ protected:
+     void mouseMoveEvent(QMouseEvent *event);
+     void wheelEvent(QWheelEvent *event);
+     bool eventFilter(QObject *watched, QEvent *event);
+-    QSize sizeHint() const  override;
++    QSize sizeHint() const override;
++
+ private:
+     KSliderPrivate *const d_ptr;
+ 
+     Q_DISABLE_COPY(KSlider)
+     Q_DECLARE_PRIVATE(KSlider)
+-
+ };
+ 
+ }
+ /**
+-  * @example testslider/widget.h
+-  * @example testslider/widget.cpp
+-  * @}
+-  */
++ * @example testslider/widget.h
++ * @example testslider/widget.cpp
++ * @}
++ */
+ #endif // KSLIDER_H
+diff --git a/kysdk-qtwidgets/src/kswitchbutton.cpp b/kysdk-qtwidgets/src/kswitchbutton.cpp
+index b58e26c..5c19cc5 100644
+--- a/kysdk-qtwidgets/src/kswitchbutton.cpp
++++ b/kysdk-qtwidgets/src/kswitchbutton.cpp
+@@ -20,27 +20,27 @@
+  *
+  */
+ 
+-#include <QMouseEvent>
+-#include <QStyle>
+-#include <QStyleOption>
+-#include <QPainterPath>
+ #include "kswitchbutton.h"
+ #include "themeController.h"
+ #include <QDebug>
++#include <QMouseEvent>
++#include <QPainterPath>
++#include <QStyle>
++#include <QStyleOption>
+ #include <QVariantAnimation>
+ #include <QtMath>
+ 
+ namespace kdk
+ {
+-class KSwitchButtonPrivate:public QObject,public ThemeController
++class KSwitchButtonPrivate : public QObject, public ThemeController
+ {
+     Q_OBJECT
+     Q_DECLARE_PUBLIC(KSwitchButton)
+ 
+ public:
+-    KSwitchButtonPrivate(KSwitchButton*parent)
+-        :q_ptr(parent),
+-         m_animation(new QVariantAnimation(parent))
++    KSwitchButtonPrivate(KSwitchButton *parent)
++        : q_ptr(parent)
++        , m_animation(new QVariantAnimation(parent))
+     {
+         setParent(parent);
+         m_animation->setDuration(200);
+@@ -54,13 +54,13 @@ protected:
+     void changeTheme();
+ 
+ private:
+-    KSwitchButton* q_ptr;
++    KSwitchButton *q_ptr;
+ 
+     QVariantAnimation *m_animation;
+-    int m_space;                  //滑块离背景间隔
+-    int m_rectRadius;             //圆角角度
+-    int m_startX;                 //滑块开始X轴坐标
+-    int m_endX;                   //滑块结束X轴坐标
++    int m_space; // 滑块离背景间隔
++    int m_rectRadius; // 圆角角度
++    int m_startX; // 滑块开始X轴坐标
++    int m_endX; // 滑块结束X轴坐标
+     QColor m_sliderColor;
+     QColor m_bkgStartColor;
+     QColor m_bkgEndColor;
+@@ -68,15 +68,15 @@ private:
+     bool m_isTranslucent;
+     bool m_isTranslucentFlag;
+     QLinearGradient m_linearGradient;
+-    void updateColor(const QStyleOptionButton& opt);
++    void updateColor(const QStyleOptionButton &opt);
+     void drawBackground(QPainter *painter);
+     void drawSlider(QPainter *painter);
+     void stepChanged();
+ };
+ 
+-
+-KSwitchButton::KSwitchButton(QWidget* parent)
+-    :QPushButton(parent),d_ptr(new KSwitchButtonPrivate(this))
++KSwitchButton::KSwitchButton(QWidget *parent)
++    : QPushButton(parent)
++    , d_ptr(new KSwitchButtonPrivate(this))
+ 
+ {
+     Q_D(KSwitchButton);
+@@ -86,12 +86,11 @@ KSwitchButton::KSwitchButton(QWidget* parent)
+     this->setCheckable(true);
+ 
+     d->changeTheme();
+-    connect(d->m_gsetting,&QGSettings::changed, d,&KSwitchButtonPrivate::changeTheme);
+-    connect(d->m_animation,&QVariantAnimation::valueChanged,d,&KSwitchButtonPrivate::stepChanged);
++    connect(d->m_gsetting, &QGSettings::changed, d, &KSwitchButtonPrivate::changeTheme);
++    connect(d->m_animation, &QVariantAnimation::valueChanged, d, &KSwitchButtonPrivate::stepChanged);
+ 
+-    connect(this,&KSwitchButton::toggled,this,[=](bool flag)
+-    {
+-        d->m_endX = width()>height() ? width()-height() : 0;
++    connect(this, &KSwitchButton::toggled, this, [=](bool flag) {
++        d->m_endX = width() > height() ? width() - height() : 0;
+         d->m_animation->start();
+         Q_EMIT stateChanged(flag);
+     });
+@@ -100,7 +99,6 @@ KSwitchButton::KSwitchButton(QWidget* parent)
+ 
+ KSwitchButton::~KSwitchButton()
+ {
+-
+ }
+ 
+ void KSwitchButton::setCheckable(bool flag)
+@@ -123,8 +121,7 @@ void KSwitchButton::setChecked(bool flag)
+ {
+     Q_D(KSwitchButton);
+     QPushButton::setChecked(flag);
+-    if(signalsBlocked())
+-    {
++    if (signalsBlocked()) {
+         d->m_animation->start();
+     }
+     this->update();
+@@ -148,7 +145,7 @@ void KSwitchButton::paintEvent(QPaintEvent *event)
+ {
+     Q_D(KSwitchButton);
+ 
+-    d->m_linearGradient = QLinearGradient(this->width()/2,0,this->width()/2,this->height());
++    d->m_linearGradient = QLinearGradient(this->width() / 2, 0, this->width() / 2, this->height());
+     QStyleOptionButton opt;
+     initStyleOption(&opt);
+     QPainter painter(this);
+@@ -164,336 +161,291 @@ void KSwitchButton::resizeEvent(QResizeEvent *event)
+     Q_D(KSwitchButton);
+     QPushButton::resizeEvent(event);
+     if (this->isChecked())
+-        d->m_startX = width()>height() ? width()-height() : 0;
++        d->m_startX = width() > height() ? width() - height() : 0;
+     else
+         d->m_startX = 0;
+     d->m_rectRadius = height() / 2;
+-    d->m_endX = width()>height() ? width()-height() : 0;
++    d->m_endX = width() > height() ? width() - height() : 0;
+ }
+ 
+ QSize KSwitchButton::sizeHint() const
+ {
+-    return QSize(50,24);
++    return QSize(50, 24);
+ }
+ 
+ void KSwitchButtonPrivate::changeTheme()
+ {
+     Q_Q(KSwitchButton);
+-    if(m_isTranslucentFlag)
+-    {
+-        if(ThemeController::widgetTheme() == ClassicTheme)
++    if (m_isTranslucentFlag) {
++        if (ThemeController::widgetTheme() == ClassicTheme)
+             m_isTranslucent = false;
+         else
+             m_isTranslucent = true;
+-    }
+-    else
+-    {
++    } else {
+         m_isTranslucent = false;
+     }
+     initThemeStyle();
+     q->update();
+ }
+ 
+-void KSwitchButtonPrivate::updateColor(const QStyleOptionButton& opt)
++void KSwitchButtonPrivate::updateColor(const QStyleOptionButton &opt)
+ {
+     Q_Q(KSwitchButton);
+ 
+-    //根据option状态去指定以下两个子部件的颜色
+-    //m_sliderColor
+-    //m_bkgColor
+-    if(m_isTranslucent && !q->isChecked())//半透明效果
++    // 根据option状态去指定以下两个子部件的颜色
++    // m_sliderColor
++    // m_bkgColor
++    if (m_isTranslucent && !q->isChecked()) // 半透明效果
+     {
+         m_sliderColor = QColor("#FFFFFF");
+-//        m_bkgStartColor = opt.palette.color(QPalette::BrightText);
++        //        m_bkgStartColor = opt.palette.color(QPalette::BrightText);
+         m_bkgStartColor = ThemeController::getPaletteColorFromDT("brighttext");
+ 
+-        if(ThemeController::themeMode() == LightTheme) //浅色模式
++        if (ThemeController::themeMode() == LightTheme) // 浅色模式
+         {
+-            if(!opt.state.testFlag(QStyle::State_Enabled)) //disable
++            if (!opt.state.testFlag(QStyle::State_Enabled)) // disable
+             {
+-//                m_sliderColor = opt.palette.color(QPalette::BrightText);
++                //                m_sliderColor = opt.palette.color(QPalette::BrightText);
+                 m_sliderColor = ThemeController::getPaletteColorFromDT("brighttext");
+                 m_sliderColor.setAlphaF(0.16);
+                 m_bkgStartColor.setAlphaF(0.1);
+                 return;
+             }
+-            m_bkgStartColor.setAlphaF(0.1); //normal
+-            if(opt.state.testFlag(QStyle::State_MouseOver))
+-            {
+-                if (opt.state & QStyle::State_Sunken) //clicked
++            m_bkgStartColor.setAlphaF(0.1); // normal
++            if (opt.state.testFlag(QStyle::State_MouseOver)) {
++                if (opt.state & QStyle::State_Sunken) // clicked
+                 {
+                     m_isHoverd = false;
+                     m_bkgStartColor.setAlphaF(0.21);
+-                }
+-                else //hover
++                } else // hover
+                 {
+                     m_isHoverd = true;
+                     m_bkgStartColor.setAlphaF(0.21);
+                 }
+             }
+-        }
+-        else
+-        {
+-            if(!opt.state.testFlag(QStyle::State_Enabled)) //disable
++        } else {
++            if (!opt.state.testFlag(QStyle::State_Enabled)) // disable
+             {
+-//                m_sliderColor = opt.palette.color(QPalette::BrightText);
++                //                m_sliderColor = opt.palette.color(QPalette::BrightText);
+                 m_sliderColor = ThemeController::getPaletteColorFromDT("bighttext");
+                 m_sliderColor.setAlphaF(0.2);
+                 m_bkgStartColor.setAlphaF(0.1);
+                 return;
+             }
+-            m_bkgStartColor.setAlphaF(0.1); //normal
+-            if(opt.state.testFlag(QStyle::State_MouseOver))
+-            {
+-                if (opt.state & QStyle::State_Sunken) //clicked
++            m_bkgStartColor.setAlphaF(0.1); // normal
++            if (opt.state.testFlag(QStyle::State_MouseOver)) {
++                if (opt.state & QStyle::State_Sunken) // clicked
+                 {
+                     m_isHoverd = false;
+                     m_bkgStartColor.setAlphaF(0.3);
+-                }
+-                else //hover
++                } else // hover
+                 {
+                     m_isHoverd = true;
+                     m_bkgStartColor.setAlphaF(0.2);
+                 }
+             }
+         }
+-    }
+-    else //常规效果
++    } else // 常规效果
+     {
+-        if(!opt.state.testFlag(QStyle::State_Enabled))
+-        {
+-//            m_sliderColor = opt.palette.color(QPalette::Disabled,QPalette::ButtonText);
+-            m_sliderColor = ThemeController::getPaletteColorFromDT("buttontext",QPalette::Disabled);
+-//            m_bkgStartColor = opt.palette.color(QPalette::Disabled,QPalette::Button);
+-            m_bkgStartColor = ThemeController::getPaletteColorFromDT("button",QPalette::Disabled);
++        if (!opt.state.testFlag(QStyle::State_Enabled)) {
++            //            m_sliderColor = opt.palette.color(QPalette::Disabled,QPalette::ButtonText);
++            m_sliderColor = ThemeController::getPaletteColorFromDT("buttontext", QPalette::Disabled);
++            //            m_bkgStartColor = opt.palette.color(QPalette::Disabled,QPalette::Button);
++            m_bkgStartColor = ThemeController::getPaletteColorFromDT("button", QPalette::Disabled);
+             return;
+         }
+-//        QColor mix = opt.palette.brightText().color();
++        //        QColor mix = opt.palette.brightText().color();
+         QColor mix = ThemeController::getPaletteColorFromDT("brighttext");
+         m_sliderColor = QColor("#FFFFFF");
+-        if(q->isChecked())
+-//            m_bkgStartColor = opt.palette.highlight().color();
++        if (q->isChecked())
++            //            m_bkgStartColor = opt.palette.highlight().color();
+             m_bkgStartColor = ThemeController::getPaletteColorFromDT("highlight");
+-        else
+-        {
+-            if(ThemeController::widgetTheme() == ClassicTheme)
+-            {
+-                if(ThemeController::themeMode() == LightTheme)
+-                {
+-                    m_bkgStartColor=ThemeController::lanhuHSLToQtHsl(0, 0, 90);
+-                }
+-                else
+-                {
+-                    m_bkgStartColor=ThemeController::lanhuHSLToQtHsl(0, 0, 17);
++        else {
++            if (ThemeController::widgetTheme() == ClassicTheme) {
++                if (ThemeController::themeMode() == LightTheme) {
++                    m_bkgStartColor = ThemeController::lanhuHSLToQtHsl(0, 0, 90);
++                } else {
++                    m_bkgStartColor = ThemeController::lanhuHSLToQtHsl(0, 0, 17);
+                 }
+-            }
+-            else
+-//                m_bkgStartColor = opt.palette.button().color();
++            } else
++                //                m_bkgStartColor = opt.palette.button().color();
+                 m_bkgStartColor = ThemeController::getPaletteColorFromDT("button");
+         }
+ 
+-        if(opt.state.testFlag(QStyle::State_MouseOver))
+-        {
+-            if (opt.state & QStyle::State_Sunken) //clicked
++        if (opt.state.testFlag(QStyle::State_MouseOver)) {
++            if (opt.state & QStyle::State_Sunken) // clicked
+             {
+                 m_isHoverd = false;
+-                if(ThemeController::widgetTheme() == ClassicTheme &&q->isChecked() )
+-//                    m_bkgStartColor = ThemeController::mixColor(m_bkgStartColor,m_sliderColor,0.2);
+-                    if(ThemeController::themeMode() == LightTheme)
+-                    {
+-                        m_bkgStartColor = ThemeController::highlightClick(false,opt.palette);
+-                        m_bkgStartColor = ThemeController::adjustH(m_bkgStartColor,-2);
+-                        m_bkgStartColor = ThemeController::adjustS(m_bkgStartColor,-27);
+-                        m_bkgStartColor = ThemeController::adjustL(m_bkgStartColor,-19);
+-                    }
+-                    else
+-                    {
+-                        m_bkgStartColor = ThemeController::highlightClick(true,opt.palette);
+-                        m_bkgStartColor = ThemeController::adjustH(m_bkgStartColor,-2);
+-                        m_bkgStartColor = ThemeController::adjustS(m_bkgStartColor,-3);
+-                        m_bkgStartColor = ThemeController::adjustL(m_bkgStartColor,30);
++                if (ThemeController::widgetTheme() == ClassicTheme && q->isChecked())
++                    //                    m_bkgStartColor = ThemeController::mixColor(m_bkgStartColor,m_sliderColor,0.2);
++                    if (ThemeController::themeMode() == LightTheme) {
++                        m_bkgStartColor = ThemeController::highlightClick(false, opt.palette);
++                        m_bkgStartColor = ThemeController::adjustH(m_bkgStartColor, -2);
++                        m_bkgStartColor = ThemeController::adjustS(m_bkgStartColor, -27);
++                        m_bkgStartColor = ThemeController::adjustL(m_bkgStartColor, -19);
++                    } else {
++                        m_bkgStartColor = ThemeController::highlightClick(true, opt.palette);
++                        m_bkgStartColor = ThemeController::adjustH(m_bkgStartColor, -2);
++                        m_bkgStartColor = ThemeController::adjustS(m_bkgStartColor, -3);
++                        m_bkgStartColor = ThemeController::adjustL(m_bkgStartColor, 30);
+                     }
+                 else
+-                    m_bkgStartColor = ThemeController::mixColor(m_bkgStartColor,mix,0.2);
+-            }
+-            else //hover
++                    m_bkgStartColor = ThemeController::mixColor(m_bkgStartColor, mix, 0.2);
++            } else // hover
+             {
+                 m_isHoverd = true;
+-                if(ThemeController::themeMode() == LightTheme) //浅色模式
++                if (ThemeController::themeMode() == LightTheme) // 浅色模式
+                 {
+-                    if(ThemeController::widgetTheme() == FashionTheme) //和印主题
++                    if (ThemeController::widgetTheme() == FashionTheme) // 和印主题
+                     {
+-                        if(q->isChecked())//开启
++                        if (q->isChecked()) // 开启
+                         {
+-//                            QColor startColor = opt.palette.color(QPalette::Highlight);
++                            //                            QColor startColor = opt.palette.color(QPalette::Highlight);
+                             QColor startColor = ThemeController::getPaletteColorFromDT("highlight");
+                             QColor startLightColor("#E6E6E6");
+                             QColor endLightColor("#000000");
+ 
+-//                            m_linearGradient.setColorAt(0,m_bkgStartColor);
+-//                            m_linearGradient.setColorAt(1,m_bkgEndColor);
++                            //                            m_linearGradient.setColorAt(0,m_bkgStartColor);
++                            //                            m_linearGradient.setColorAt(1,m_bkgEndColor);
+ 
+                             QColor startcolor;
+                             QColor endcolor;
+-                            ThemeController::getGradientFromDT("kbrand-hover",startcolor,endcolor);
+-                            if(!startColor.isValid())
+-                                startColor = ThemeController::mixColor(startColor,startLightColor,0.2);
+-                            if(!endcolor.isValid())
+-                                endcolor = ThemeController::mixColor(startColor,endLightColor,0.05);
+-
+-                            m_linearGradient.setColorAt(0,startColor);
+-                            m_linearGradient.setColorAt(1,endcolor);
+-                        }
+-                        else //关闭
++                            ThemeController::getGradientFromDT("kbrand-hover", startcolor, endcolor);
++                            if (!startColor.isValid())
++                                startColor = ThemeController::mixColor(startColor, startLightColor, 0.2);
++                            if (!endcolor.isValid())
++                                endcolor = ThemeController::mixColor(startColor, endLightColor, 0.05);
++
++                            m_linearGradient.setColorAt(0, startColor);
++                            m_linearGradient.setColorAt(1, endcolor);
++                        } else // 关闭
+                         {
+                             QColor startColor("#E6E6E6");
+                             QColor startLightColor("#000000 ");
+ 
+-//                            m_linearGradient.setColorAt(0,m_bkgStartColor);
+-//                            m_linearGradient.setColorAt(1,m_bkgEndColor);
++                            //                            m_linearGradient.setColorAt(0,m_bkgStartColor);
++                            //                            m_linearGradient.setColorAt(1,m_bkgEndColor);
+ 
+                             QColor startcolor;
+                             QColor endcolor;
+-                            ThemeController::getGradientFromDT("kcomponent-hover",startcolor,endcolor);
+-                            if(!startColor.isValid())
+-                                startColor = ThemeController::mixColor(startColor,startLightColor,0.05);
+-                            if(!endcolor.isValid())
+-                                endcolor = ThemeController::mixColor(startColor,startLightColor,0.2);
+-
+-                            m_linearGradient.setColorAt(0,startColor);
+-                            m_linearGradient.setColorAt(1,endcolor);
++                            ThemeController::getGradientFromDT("kcomponent-hover", startcolor, endcolor);
++                            if (!startColor.isValid())
++                                startColor = ThemeController::mixColor(startColor, startLightColor, 0.05);
++                            if (!endcolor.isValid())
++                                endcolor = ThemeController::mixColor(startColor, startLightColor, 0.2);
++
++                            m_linearGradient.setColorAt(0, startColor);
++                            m_linearGradient.setColorAt(1, endcolor);
+                         }
+ 
+-                    }
+-                    else if(ThemeController::widgetTheme() == ClassicTheme)
+-                    {
+-                        if(q->isChecked())//开启
+-                        {
+-                            m_bkgStartColor = ThemeController::highlightHover(false,opt.palette);
+-                            m_bkgStartColor = ThemeController::adjustH(m_bkgStartColor,-4);
+-                            m_bkgStartColor = ThemeController::adjustS(m_bkgStartColor,0);
+-                            m_bkgStartColor = ThemeController::adjustL(m_bkgStartColor,-8);
+-                        }
+-                        else
++                    } else if (ThemeController::widgetTheme() == ClassicTheme) {
++                        if (q->isChecked()) // 开启
+                         {
++                            m_bkgStartColor = ThemeController::highlightHover(false, opt.palette);
++                            m_bkgStartColor = ThemeController::adjustH(m_bkgStartColor, -4);
++                            m_bkgStartColor = ThemeController::adjustS(m_bkgStartColor, 0);
++                            m_bkgStartColor = ThemeController::adjustL(m_bkgStartColor, -8);
++                        } else {
+                             m_bkgStartColor = ThemeController::lanhuHSLToQtHsl(0, 0, 85);
+                         }
+-                    }
+-                    else //寻光主题
++                    } else // 寻光主题
+                     {
+-                        m_bkgStartColor = ThemeController::mixColor(m_bkgStartColor,mix,0.05);
++                        m_bkgStartColor = ThemeController::mixColor(m_bkgStartColor, mix, 0.05);
+                     }
+ 
+-                }
+-                else //深色模式
++                } else // 深色模式
+                 {
+-                    if(ThemeController::widgetTheme() == FashionTheme) //和印主题
++                    if (ThemeController::widgetTheme() == FashionTheme) // 和印主题
+                     {
+-                        if(q->isChecked())//开启
++                        if (q->isChecked()) // 开启
+                         {
+-//                            QColor startColor = opt.palette.color(QPalette::Highlight);
++                            //                            QColor startColor = opt.palette.color(QPalette::Highlight);
+                             QColor startColor = ThemeController::getPaletteColorFromDT("highlight");
+                             QColor startDarkColor("#FFFFFF");
+-//                            m_bkgStartColor =
+-//                            m_bkgEndColor  = ;
++                            //                            m_bkgStartColor =
++                            //                            m_bkgEndColor  = ;
+ 
+                             QColor startcolor;
+                             QColor endcolor;
+-                            ThemeController::getGradientFromDT("kcomponent-hover",startcolor,endcolor);
+-                            if(!startColor.isValid())
+-                                startColor = ThemeController::mixColor(startColor,startDarkColor,0.2);
+-                            if(!endcolor.isValid())
++                            ThemeController::getGradientFromDT("kcomponent-hover", startcolor, endcolor);
++                            if (!startColor.isValid())
++                                startColor = ThemeController::mixColor(startColor, startDarkColor, 0.2);
++                            if (!endcolor.isValid())
+                                 endcolor = startColor;
+ 
+-                            m_linearGradient.setColorAt(0,m_bkgStartColor);
+-                            m_linearGradient.setColorAt(1,m_bkgEndColor);
+-                        }
+-                        else //关闭
++                            m_linearGradient.setColorAt(0, m_bkgStartColor);
++                            m_linearGradient.setColorAt(1, m_bkgEndColor);
++                        } else // 关闭
+                         {
+                             QColor startColor("#373737");
+                             QColor startDarkColor("#FFFFFF");
+-//                            m_bkgStartColor = ThemeController::mixColor(startColor,startDarkColor,0.2);
+-//                            m_bkgEndColor  = ThemeController::mixColor(startColor,startDarkColor,0.05);
++                            //                            m_bkgStartColor = ThemeController::mixColor(startColor,startDarkColor,0.2);
++                            //                            m_bkgEndColor  = ThemeController::mixColor(startColor,startDarkColor,0.05);
+ 
+-//                            m_linearGradient.setColorAt(0,m_bkgStartColor);
+-//                            m_linearGradient.setColorAt(1,m_bkgEndColor);
++                            //                            m_linearGradient.setColorAt(0,m_bkgStartColor);
++                            //                            m_linearGradient.setColorAt(1,m_bkgEndColor);
+ 
+                             QColor startcolor;
+                             QColor endcolor;
+-                            ThemeController::getGradientFromDT("kbrand-hover",startcolor,endcolor);
+-                            if(!startColor.isValid())
+-                                startColor = ThemeController::mixColor(startColor,startDarkColor,0.2);
+-                            if(!endcolor.isValid())
+-                                endcolor = ThemeController::mixColor(startColor,startDarkColor,0.05);
++                            ThemeController::getGradientFromDT("kbrand-hover", startcolor, endcolor);
++                            if (!startColor.isValid())
++                                startColor = ThemeController::mixColor(startColor, startDarkColor, 0.2);
++                            if (!endcolor.isValid())
++                                endcolor = ThemeController::mixColor(startColor, startDarkColor, 0.05);
+                         }
+ 
+-                    }
+-                    else if(ThemeController::widgetTheme() == ClassicTheme)
+-                    {
+-                        if(q->isChecked())//开启
+-                        {
+-                            m_bkgStartColor = ThemeController::highlightHover(true,opt.palette);
+-                            m_bkgStartColor = ThemeController::adjustH(m_bkgStartColor,-2);
+-                            m_bkgStartColor = ThemeController::adjustS(m_bkgStartColor,3);
+-                            m_bkgStartColor = ThemeController::adjustL(m_bkgStartColor,51);
+-                        }
+-                        else
++                    } else if (ThemeController::widgetTheme() == ClassicTheme) {
++                        if (q->isChecked()) // 开启
+                         {
++                            m_bkgStartColor = ThemeController::highlightHover(true, opt.palette);
++                            m_bkgStartColor = ThemeController::adjustH(m_bkgStartColor, -2);
++                            m_bkgStartColor = ThemeController::adjustS(m_bkgStartColor, 3);
++                            m_bkgStartColor = ThemeController::adjustL(m_bkgStartColor, 51);
++                        } else {
+                             m_bkgStartColor = ThemeController::lanhuHSLToQtHsl(0, 0, 23);
+                         }
+-                    }
+-                    else //寻光
++                    } else // 寻光
+                     {
+-                        m_bkgStartColor = ThemeController::mixColor(m_bkgStartColor,mix,0.05); // deafult
++                        m_bkgStartColor = ThemeController::mixColor(m_bkgStartColor, mix, 0.05); // deafult
+                     }
+                 }
+-
+             }
+         }
+     }
+-
+ }
+ 
+ void KSwitchButtonPrivate::drawBackground(QPainter *painter)
+ {
+     Q_Q(KSwitchButton);
+     painter->save();
+-    if(ThemeController::widgetTheme() == ClassicTheme)
+-    {
+-        if(ThemeController::themeMode() == LightTheme )
++    if (ThemeController::widgetTheme() == ClassicTheme) {
++        if (ThemeController::themeMode() == LightTheme)
+             painter->setPen(ThemeController::lanhuHSLToQtHsl(0, 0, 73));
+         else
+             painter->setPen(ThemeController::lanhuHSLToQtHsl(0, 0, 35));
+-    }
+-    else
++    } else
+         painter->setPen(Qt::NoPen);
+-    if(ThemeController::widgetTheme() == FashionTheme)
+-    {
+-        if(m_isHoverd)
+-        {
++    if (ThemeController::widgetTheme() == FashionTheme) {
++        if (m_isHoverd) {
+             m_isHoverd = false;
+-            if(m_isTranslucent && !q->isChecked())
++            if (m_isTranslucent && !q->isChecked())
+                 painter->setBrush(m_bkgStartColor);
+             else
+                 painter->setBrush(m_linearGradient);
+-        }
+-        else
++        } else
+             painter->setBrush(m_bkgStartColor);
+-    }
+-    else
+-    {
++    } else {
+         m_isHoverd = false;
+         painter->setBrush(m_bkgStartColor);
+     }
+-    QRect rect(0, 0, q->width()-1, q->height()-1);
++    QRect rect(0, 0, q->width() - 1, q->height() - 1);
+ 
+-    //背景框两边是半圆,所以圆角的半径应该固定是矩形高度的一半
++    // 背景框两边是半圆,所以圆角的半径应该固定是矩形高度的一半
+     int radius = rect.height() / 2;
+     int circleWidth = rect.height();
+     QPainterPath path;
+-    if(ThemeController::widgetTheme() == ClassicTheme)
+-    {
+-        rect=rect.adjusted(1,1,0,0);
++    if (ThemeController::widgetTheme() == ClassicTheme) {
++        rect = rect.adjusted(1, 1, 0, 0);
+         path.moveTo(rect.topLeft());
+         path.lineTo(rect.bottomLeft());
+         path.lineTo(rect.bottomRight());
+@@ -501,16 +453,14 @@ void KSwitchButtonPrivate::drawBackground(QPainter *painter)
+         path.lineTo(rect.topLeft());
+         QPen pen;
+         pen.setWidth(1);
+-        if(ThemeController::themeMode() == LightTheme)
++        if (ThemeController::themeMode() == LightTheme)
+             pen.setColor(ThemeController::lanhuHSLToQtHsl(0, 0, 73));
+         else
+             pen.setColor(ThemeController::lanhuHSLToQtHsl(0, 0, 35));
+         painter->setPen(pen);
+-        painter->translate(0.5,0.5);
++        painter->translate(0.5, 0.5);
+         painter->drawPath(path);
+-    }
+-    else
+-    {
++    } else {
+         path.moveTo(radius, rect.top());
+         path.arcTo(QRectF(rect.left(), rect.top(), circleWidth, circleWidth), 90, 180);
+         path.lineTo(rect.width() - radius, rect.height());
+@@ -530,92 +480,78 @@ void KSwitchButtonPrivate::drawSlider(QPainter *painter)
+     painter->setRenderHint(QPainter::TextAntialiasing);
+     painter->setRenderHint(QPainter::SmoothPixmapTransform);
+ 
+-    if(ThemeController::widgetTheme() == ClassicTheme)
+-    {
++    if (ThemeController::widgetTheme() == ClassicTheme) {
+         QColor borColor;
+-        if(ThemeController::themeMode() == LightTheme)
+-        {
+-            m_sliderColor=ThemeController::lanhuHSLToQtHsl(0, 0, 98);
+-            borColor=ThemeController::lanhuHSLToQtHsl(0,0,73);
+-        }
+-        else
+-        {
+-            m_sliderColor=ThemeController::lanhuHSLToQtHsl(0, 0, 27);
+-            borColor=ThemeController::lanhuHSLToQtHsl(0, 0, 50);
++        if (ThemeController::themeMode() == LightTheme) {
++            m_sliderColor = ThemeController::lanhuHSLToQtHsl(0, 0, 98);
++            borColor = ThemeController::lanhuHSLToQtHsl(0, 0, 73);
++        } else {
++            m_sliderColor = ThemeController::lanhuHSLToQtHsl(0, 0, 27);
++            borColor = ThemeController::lanhuHSLToQtHsl(0, 0, 50);
+         }
+         painter->setPen(borColor);
+         painter->setBrush(m_sliderColor);
+-        int sliderWidth = q->height() - m_space - 1 ;
++        int sliderWidth = q->height() - m_space - 1;
+ 
+-        QRect sliderRect(m_startX + m_space/2, m_space/2, sliderWidth, sliderWidth);
+-        if(painter->pen().width() == 1)
+-            painter->translate(0.5,0.5);
++        QRect sliderRect(m_startX + m_space / 2, m_space / 2, sliderWidth, sliderWidth);
++        if (painter->pen().width() == 1)
++            painter->translate(0.5, 0.5);
+         painter->drawRect(sliderRect);
+ 
+-        QIcon icon(":/image/ukui-switchbutton-symbolic.svg") ;
+-        QPixmap pix = icon.pixmap(sliderWidth,sliderWidth+1);
+-//        pix=pix.fromImage(image);
+-//            qreal pixelRatio = painter->device()->devicePixelRatioF(); // 获取不同显示器的分辨率比例,防止不同分辨率下图片失真
+-//            pix = pix.scaled(QSize(sliderWidth * pixelRatio, sliderWidth *pixelRatio)
+-//                                         , Qt::KeepAspectRatio, Qt::SmoothTransformation);
++        QIcon icon(":/image/ukui-switchbutton-symbolic.svg");
++        QPixmap pix = icon.pixmap(sliderWidth, sliderWidth + 1);
++        //        pix=pix.fromImage(image);
++        //            qreal pixelRatio = painter->device()->devicePixelRatioF(); // 获取不同显示器的分辨率比例,防止不同分辨率下图片失真
++        //            pix = pix.scaled(QSize(sliderWidth * pixelRatio, sliderWidth *pixelRatio)
++        //                                         , Qt::KeepAspectRatio, Qt::SmoothTransformation);
+ 
+-        if(ThemeController::themeMode() == LightTheme)
+-            pix = ThemeController::drawColoredPixmap(pix,ThemeController::lanhuHSLToQtHsl(0, 0, 50));
++        if (ThemeController::themeMode() == LightTheme)
++            pix = ThemeController::drawColoredPixmap(pix, ThemeController::lanhuHSLToQtHsl(0, 0, 50));
+         else
+-            pix = ThemeController::drawColoredPixmap(pix,ThemeController::lanhuHSLToQtHsl(0, 0, 85));
++            pix = ThemeController::drawColoredPixmap(pix, ThemeController::lanhuHSLToQtHsl(0, 0, 85));
+ 
+         painter->setPen(Qt::NoPen);
+-        painter->drawPixmap(sliderRect,pix);
+-
+-        if(!q->isEnabled())
+-        {
+-            //绘制disenable状态下的小矩形条
+-            if(!q->isChecked())
+-            {
+-                int topX = q->width()-sliderWidth/2-10;
+-                int topY = (q->height()-sliderWidth/4)/2;
+-                QRect lineRect(topX,topY,sliderWidth/2,sliderWidth/4);
+-                if(painter->pen().width() == 1)
+-                    painter->translate(0.5,0.5);
++        painter->drawPixmap(sliderRect, pix);
++
++        if (!q->isEnabled()) {
++            // 绘制disenable状态下的小矩形条
++            if (!q->isChecked()) {
++                int topX = q->width() - sliderWidth / 2 - 10;
++                int topY = (q->height() - sliderWidth / 4) / 2;
++                QRect lineRect(topX, topY, sliderWidth / 2, sliderWidth / 4);
++                if (painter->pen().width() == 1)
++                    painter->translate(0.5, 0.5);
+                 painter->drawRect(lineRect);
+-            }
+-            else
+-            {
++            } else {
+                 int topX = 10;
+-                int topY = (q->height()-sliderWidth/4)/2;
+-                QRect lineRect(topX,topY,sliderWidth/2,sliderWidth/4);
+-                if(painter->pen().width() == 1)
+-                    painter->translate(0.5,0.5);
++                int topY = (q->height() - sliderWidth / 4) / 2;
++                QRect lineRect(topX, topY, sliderWidth / 2, sliderWidth / 4);
++                if (painter->pen().width() == 1)
++                    painter->translate(0.5, 0.5);
+                 painter->drawRect(lineRect);
+             }
+         }
+-    }
+-    else
+-    {
++    } else {
+         painter->setPen(Qt::NoPen);
+         painter->setBrush(m_sliderColor);
+-        //滑块的直径
++        // 滑块的直径
+         int sliderWidth = q->height() - m_space * 2;
+         QRect sliderRect(m_startX + m_space, m_space, sliderWidth, sliderWidth);
+         painter->drawEllipse(sliderRect);
+-        if(!q->isEnabled())
+-        {
+-            //绘制disenable状态下的小矩形条
+-            if(!q->isChecked())
+-            {
+-                int topX = q->width()-sliderWidth/2-10;
+-                int topY = (q->height()-sliderWidth/4)/2;
+-                QRect lineRect(topX,topY,sliderWidth/2,sliderWidth/4);
+-                int radius = lineRect.height()/2;
+-                painter->drawRoundedRect(lineRect,radius,radius);
+-            }
+-            else
+-            {
++        if (!q->isEnabled()) {
++            // 绘制disenable状态下的小矩形条
++            if (!q->isChecked()) {
++                int topX = q->width() - sliderWidth / 2 - 10;
++                int topY = (q->height() - sliderWidth / 4) / 2;
++                QRect lineRect(topX, topY, sliderWidth / 2, sliderWidth / 4);
++                int radius = lineRect.height() / 2;
++                painter->drawRoundedRect(lineRect, radius, radius);
++            } else {
+                 int topX = 10;
+-                int topY = (q->height()-sliderWidth/4)/2;
+-                QRect lineRect(topX,topY,sliderWidth/2,sliderWidth/4);
+-                int radius = lineRect.height()/2;
+-                painter->drawRoundedRect(lineRect,radius,radius);
++                int topY = (q->height() - sliderWidth / 4) / 2;
++                QRect lineRect(topX, topY, sliderWidth / 2, sliderWidth / 4);
++                int radius = lineRect.height() / 2;
++                painter->drawRoundedRect(lineRect, radius, radius);
+             }
+         }
+     }
+@@ -625,27 +561,18 @@ void KSwitchButtonPrivate::drawSlider(QPainter *painter)
+ void KSwitchButtonPrivate::stepChanged()
+ {
+     Q_Q(KSwitchButton);
+-    if(q->isChecked())
+-    {
+-        if(m_startX < m_endX)
+-        {
+-            m_startX =qCeil(m_endX * m_animation->currentValue().toDouble());
+-        }
+-        else
+-        {
++    if (q->isChecked()) {
++        if (m_startX < m_endX) {
++            m_startX = qCeil(m_endX * m_animation->currentValue().toDouble());
++        } else {
+             m_startX = m_endX;
+             m_animation->stop();
+         }
+-    }
+-    else
+-    {
+-        if (m_startX > 0)
+-        {
++    } else {
++        if (m_startX > 0) {
+             double percent = 1.0 - m_animation->currentValue().toDouble();
+             m_startX = qCeil(m_endX * percent);
+-        }
+-        else
+-        {
++        } else {
+             m_startX = 0;
+             m_animation->stop();
+         }
+@@ -656,4 +583,3 @@ void KSwitchButtonPrivate::stepChanged()
+ }
+ #include "kswitchbutton.moc"
+ #include "moc_kswitchbutton.cpp"
+-
+diff --git a/kysdk-qtwidgets/src/kswitchbutton.h b/kysdk-qtwidgets/src/kswitchbutton.h
+index 9d8252f..48c4be9 100644
+--- a/kysdk-qtwidgets/src/kswitchbutton.h
++++ b/kysdk-qtwidgets/src/kswitchbutton.h
+@@ -24,29 +24,29 @@
+ #define KSWITCHBUTTON_H
+ 
+ #include "gui_g.h"
++#include <QGSettings/QGSettings>
++#include <QPainter>
+ #include <QPushButton>
+ #include <QTimer>
+-#include <QPainter>
+-#include <QGSettings/QGSettings>
+ 
+ namespace kdk
+ {
+ 
+ /** @defgroup PushbuttonModule
+-  * @{
+-  */
++ * @{
++ */
+ 
+ class KSwitchButtonPrivate;
+ 
+ /**
+  * @brief 指示打开/关闭两种状态
+  */
+-class GUI_EXPORT KSwitchButton:public QPushButton
++class GUI_EXPORT KSwitchButton : public QPushButton
+ {
+     Q_OBJECT
+ 
+ public:
+-    KSwitchButton(QWidget* parent = 0);
++    KSwitchButton(QWidget *parent = 0);
+     ~KSwitchButton();
+ 
+     /**
+@@ -93,19 +93,19 @@ Q_SIGNALS:
+     void stateChanged(bool);
+ 
+ protected:
+-   void paintEvent(QPaintEvent *event) override;
+-   void resizeEvent(QResizeEvent *event) override;
+-   QSize sizeHint() const;
+-    
++    void paintEvent(QPaintEvent *event) override;
++    void resizeEvent(QResizeEvent *event) override;
++    QSize sizeHint() const;
++
+ private:
+     Q_DECLARE_PRIVATE(KSwitchButton)
+-    KSwitchButtonPrivate* const d_ptr;
++    KSwitchButtonPrivate *const d_ptr;
+ };
+ 
+ }
+ /**
+-  * @example testSwitchbutton/widget.h
+-  * @example testSwitchbutton/widget.cpp
+-  * @}
+-  */
+-#endif //KSWITCHBUTTON_H
++ * @example testSwitchbutton/widget.h
++ * @example testSwitchbutton/widget.cpp
++ * @}
++ */
++#endif // KSWITCHBUTTON_H
+diff --git a/kysdk-qtwidgets/src/ktabbar.cpp b/kysdk-qtwidgets/src/ktabbar.cpp
+index 5fe1eec..4a05bd9 100644
+--- a/kysdk-qtwidgets/src/ktabbar.cpp
++++ b/kysdk-qtwidgets/src/ktabbar.cpp
+@@ -21,43 +21,42 @@
+  */
+ 
+ #include "ktabbar.h"
++#include "parmscontroller.h"
+ #include "themeController.h"
+-#include <QStyleOptionTab>
++#include <QApplication>
++#include <QDebug>
++#include <QEvent>
++#include <QFontMetrics>
++#include <QMouseEvent>
+ #include <QPainter>
+ #include <QPainterPath>
++#include <QStyleOptionTab>
+ #include <QStylePainter>
+-#include <QPainterPath>
+-#include <QFontMetrics>
+-#include <QDebug>
+-#include <QEvent>
+-#include <QApplication>
+ #include <QVariantAnimation>
+-#include <QMouseEvent>
+-#include "parmscontroller.h"
+ 
+ namespace kdk
+ {
+-class KTabBarPrivate:public QObject,public ThemeController
++class KTabBarPrivate : public QObject, public ThemeController
+ {
+     Q_OBJECT
+     Q_DECLARE_PUBLIC(KTabBar)
+ 
+ public:
+-    KTabBarPrivate(KTabBar*parent)
+-        :q_ptr(parent),
+-          m_animation(new QVariantAnimation(this)),
+-          m_nextTabWidth(0),
+-          m_animationStarted(false)
++    KTabBarPrivate(KTabBar *parent)
++        : q_ptr(parent)
++        , m_animation(new QVariantAnimation(this))
++        , m_nextTabWidth(0)
++        , m_animationStarted(false)
+     {
+         Q_Q(KTabBar);
+         setParent(parent);
+         parent->installEventFilter(this);
+         m_animation->setDuration(300);
+         m_animation->setEasingCurve(QEasingCurve::InOutQuad);
+-        connect(m_animation, &QVariantAnimation::valueChanged, q, [=](){
++        connect(m_animation, &QVariantAnimation::valueChanged, q, [=]() {
+             q->update();
+         });
+-        connect(m_animation, &QVariantAnimation::finished, this, [=](){
++        connect(m_animation, &QVariantAnimation::finished, this, [=]() {
+             m_animationStarted = false;
+         });
+     }
+@@ -80,28 +79,27 @@ private:
+     bool m_animationStarted;
+ };
+ 
+-KTabBar::KTabBar(KTabBarStyle barStyle,QWidget* parent):
+-    QTabBar(parent),
+-    d_ptr(new KTabBarPrivate(this))
++KTabBar::KTabBar(KTabBarStyle barStyle, QWidget *parent)
++    : QTabBar(parent)
++    , d_ptr(new KTabBarPrivate(this))
+ {
+     Q_D(KTabBar);
+     d->m_borderRadius = ThemeController::getRadiusFromDT("kradius-normal");
+-    if(d->m_borderRadius == -1)
++    if (d->m_borderRadius == -1)
+         d->m_borderRadius = 6;
+     d->m_kTabBarStyle = barStyle;
+     d->m_useCustomColor = false;
+ 
+-    //this->setObjectName("KTabbar");
++    // this->setObjectName("KTabbar");
+     d->changeTheme();
+-    connect(d->m_gsetting,&QGSettings::changed, d,&KTabBarPrivate::changeTheme);
+-    connect(Parmscontroller::self(),&Parmscontroller::modeChanged,this,[=](bool flag){
++    connect(d->m_gsetting, &QGSettings::changed, d, &KTabBarPrivate::changeTheme);
++    connect(Parmscontroller::self(), &Parmscontroller::modeChanged, this, [=](bool flag) {
+         updateGeometry();
+     });
+ }
+ 
+ KTabBar::~KTabBar()
+ {
+-
+ }
+ 
+ void KTabBar::setTabBarStyle(KTabBarStyle barStyle)
+@@ -119,7 +117,7 @@ KTabBarStyle KTabBar::barStyle()
+ void KTabBar::setBorderRadius(int radius)
+ {
+     Q_D(KTabBar);
+-    if(radius < 0 || radius > 20)
++    if (radius < 0 || radius > 20)
+         return;
+     d->m_borderRadius = radius;
+     update();
+@@ -128,7 +126,7 @@ void KTabBar::setBorderRadius(int radius)
+ int KTabBar::borderRadius()
+ {
+     Q_D(KTabBar);
+-    if(d->m_kTabBarStyle == Sliding)
++    if (d->m_kTabBarStyle == Sliding)
+         return 0;
+     else
+         return d->m_borderRadius;
+@@ -151,15 +149,15 @@ QSize KTabBar::sizeHint() const
+ QSize KTabBar::minimumTabSizeHint(int index) const
+ {
+     Q_UNUSED(index)
+-    QSize size(100,Parmscontroller::parm(Parmscontroller::Parm::PM_PushButtonHeight));
++    QSize size(100, Parmscontroller::parm(Parmscontroller::Parm::PM_PushButtonHeight));
+     return size;
+ }
+ 
+ QSize KTabBar::tabSizeHint(int index) const
+ {
+     Q_UNUSED(index)
+-    //判断外部是否设置了固定宽度或者固定高度,如果设置,走默认的tabSizeHint
+-    if((this->maximumHeight() == this->minimumHeight()) ||this->maximumWidth()==this->minimumWidth())
++    // 判断外部是否设置了固定宽度或者固定高度,如果设置,走默认的tabSizeHint
++    if ((this->maximumHeight() == this->minimumHeight()) || this->maximumWidth() == this->minimumWidth())
+         return QTabBar::tabSizeHint(index);
+     auto size = QTabBar::tabSizeHint(index);
+     size.setHeight(Parmscontroller::parm(Parmscontroller::Parm::PM_TabBarHeight));
+@@ -174,113 +172,93 @@ void KTabBar::paintEvent(QPaintEvent *event)
+     p.setRenderHint(QPainter::HighQualityAntialiasing);
+     p.setRenderHint(QPainter::TextAntialiasing);
+     p.setRenderHint(QPainter::SmoothPixmapTransform);
+-    if(ThemeController::widgetTheme() == ClassicTheme)
+-    {
+-        if(p.pen().width() == 1)
+-            p.translate(0.5,0.5);
++    if (ThemeController::widgetTheme() == ClassicTheme) {
++        if (p.pen().width() == 1)
++            p.translate(0.5, 0.5);
+     }
+ 
+     QColor fontColor;
+     QColor mix;
+     QColor borderColor;
+     QFontMetrics fm = p.fontMetrics();
+-    for (int i = 0; i < count(); ++i)
+-    {
++    for (int i = 0; i < count(); ++i) {
+         QStyleOptionTab option;
+         initStyleOption(&option, i);
+-        QRect rect = option.rect.adjusted(d->m_horizontalMargin,0,0,-d->m_topMargin);
++        QRect rect = option.rect.adjusted(d->m_horizontalMargin, 0, 0, -d->m_topMargin);
+         rect.setHeight(Parmscontroller::parm(Parmscontroller::Parm::PM_PushButtonHeight));
+-        switch (d->m_kTabBarStyle)
+-        {
+-        case SegmentDark:
+-        {
+-//            mix = option.palette.brightText().color();
++        switch (d->m_kTabBarStyle) {
++        case SegmentDark: {
++            //            mix = option.palette.brightText().color();
+             mix = ThemeController::getPaletteColorFromDT("brighttext");
+-//            fontColor = option.palette.buttonText().color();
++            //            fontColor = option.palette.buttonText().color();
+             fontColor = ThemeController::getPaletteColorFromDT("buttontext");
+             QColor bkgrdColor = d->m_bkgrdColor;
+-            if(ThemeController::widgetTheme() == ClassicTheme)
+-            {
+-                if(ThemeController::themeMode() == LightTheme)
+-                {
+-                    if(option.state.testFlag(QStyle::State_Selected))
+-                    {
+-                        bkgrdColor = ThemeController::highlightClick(false,palette());
+-                        bkgrdColor = ThemeController::adjustH(bkgrdColor,-3);
+-                        bkgrdColor = ThemeController::adjustS(bkgrdColor,-3);
+-                        bkgrdColor = ThemeController::adjustL(bkgrdColor,-3);
+-//                        fontColor = QColor("#FFFFFF");
+-
+-                        borderColor = ThemeController::highlightClick(false,palette());
+-                        borderColor = ThemeController::adjustH(borderColor,-1);
+-                        borderColor = ThemeController::adjustS(borderColor,-34);
+-                        borderColor = ThemeController::adjustL(borderColor,-30);
+-                    }
+-                    else if(option.state.testFlag(QStyle::State_MouseOver))
+-                    {
+-                         bkgrdColor = ThemeController::highlightHover(false,palette());
+-                         bkgrdColor = ThemeController::adjustH(bkgrdColor,-3);
+-                         bkgrdColor = ThemeController::adjustS(bkgrdColor,-8);
+-                         bkgrdColor = ThemeController::adjustL(bkgrdColor,-3);
+-
+-                         borderColor = ThemeController::highlightHover(false,palette());
+-                         borderColor = ThemeController::adjustH(borderColor,-3);
+-                         borderColor = ThemeController::adjustS(borderColor,-24);
+-                         borderColor = ThemeController::adjustL(borderColor,-24);
++            if (ThemeController::widgetTheme() == ClassicTheme) {
++                if (ThemeController::themeMode() == LightTheme) {
++                    if (option.state.testFlag(QStyle::State_Selected)) {
++                        bkgrdColor = ThemeController::highlightClick(false, palette());
++                        bkgrdColor = ThemeController::adjustH(bkgrdColor, -3);
++                        bkgrdColor = ThemeController::adjustS(bkgrdColor, -3);
++                        bkgrdColor = ThemeController::adjustL(bkgrdColor, -3);
++                        //                        fontColor = QColor("#FFFFFF");
++
++                        borderColor = ThemeController::highlightClick(false, palette());
++                        borderColor = ThemeController::adjustH(borderColor, -1);
++                        borderColor = ThemeController::adjustS(borderColor, -34);
++                        borderColor = ThemeController::adjustL(borderColor, -30);
++                    } else if (option.state.testFlag(QStyle::State_MouseOver)) {
++                        bkgrdColor = ThemeController::highlightHover(false, palette());
++                        bkgrdColor = ThemeController::adjustH(bkgrdColor, -3);
++                        bkgrdColor = ThemeController::adjustS(bkgrdColor, -8);
++                        bkgrdColor = ThemeController::adjustL(bkgrdColor, -3);
++
++                        borderColor = ThemeController::highlightHover(false, palette());
++                        borderColor = ThemeController::adjustH(borderColor, -3);
++                        borderColor = ThemeController::adjustS(borderColor, -24);
++                        borderColor = ThemeController::adjustL(borderColor, -24);
+                     }
+-                }
+-                else
+-                {
+-                    if(option.state.testFlag(QStyle::State_Selected))
+-                    {
+-                        bkgrdColor = ThemeController::highlightClick(true,palette());
+-                        bkgrdColor = ThemeController::adjustH(bkgrdColor,-2);
+-                        bkgrdColor = ThemeController::adjustS(bkgrdColor,-23);
+-                        bkgrdColor = ThemeController::adjustL(bkgrdColor,11);
++                } else {
++                    if (option.state.testFlag(QStyle::State_Selected)) {
++                        bkgrdColor = ThemeController::highlightClick(true, palette());
++                        bkgrdColor = ThemeController::adjustH(bkgrdColor, -2);
++                        bkgrdColor = ThemeController::adjustS(bkgrdColor, -23);
++                        bkgrdColor = ThemeController::adjustL(bkgrdColor, 11);
+                         fontColor = QColor("#FFFFFF");
+ 
+-                        borderColor = ThemeController::highlightClick(true,palette());
+-                        borderColor = ThemeController::adjustH(borderColor,-2);
+-                        borderColor = ThemeController::adjustS(borderColor,2);
+-                        borderColor = ThemeController::adjustL(borderColor,46);
+-                    }
+-                    else if(option.state.testFlag(QStyle::State_MouseOver))
+-                    {
+-                         bkgrdColor = ThemeController::highlightHover(true,palette());
+-                         bkgrdColor = ThemeController::adjustH(bkgrdColor,-2);
+-                         bkgrdColor = ThemeController::adjustS(bkgrdColor,-23);
+-                         bkgrdColor = ThemeController::adjustL(bkgrdColor,11);
+-
+-                         borderColor = ThemeController::highlightHover(true,palette());
+-                         borderColor = ThemeController::adjustH(borderColor,-2);
+-                         borderColor = ThemeController::adjustS(borderColor,-2);
+-                         borderColor = ThemeController::adjustL(borderColor,36);
++                        borderColor = ThemeController::highlightClick(true, palette());
++                        borderColor = ThemeController::adjustH(borderColor, -2);
++                        borderColor = ThemeController::adjustS(borderColor, 2);
++                        borderColor = ThemeController::adjustL(borderColor, 46);
++                    } else if (option.state.testFlag(QStyle::State_MouseOver)) {
++                        bkgrdColor = ThemeController::highlightHover(true, palette());
++                        bkgrdColor = ThemeController::adjustH(bkgrdColor, -2);
++                        bkgrdColor = ThemeController::adjustS(bkgrdColor, -23);
++                        bkgrdColor = ThemeController::adjustL(bkgrdColor, 11);
++
++                        borderColor = ThemeController::highlightHover(true, palette());
++                        borderColor = ThemeController::adjustH(borderColor, -2);
++                        borderColor = ThemeController::adjustS(borderColor, -2);
++                        borderColor = ThemeController::adjustL(borderColor, 36);
+                     }
+                 }
+-            }
+-            else
+-            {
+-                if(option.state.testFlag(QStyle::State_Selected))
+-                {
+-//                    bkgrdColor = option.palette.highlight().color();
++            } else {
++                if (option.state.testFlag(QStyle::State_Selected)) {
++                    //                    bkgrdColor = option.palette.highlight().color();
+                     bkgrdColor = ThemeController::getPaletteColorFromDT("highlight");
+                     fontColor = QColor("#FFFFFF");
+-                }
+-                else if(option.state.testFlag(QStyle::State_MouseOver))
+-                {
+-                     bkgrdColor = ThemeController::mixColor(bkgrdColor,mix,0.05);
++                } else if (option.state.testFlag(QStyle::State_MouseOver)) {
++                    bkgrdColor = ThemeController::mixColor(bkgrdColor, mix, 0.05);
+                 }
+             }
+-            if(option.position == QStyleOptionTab::Middle)
+-            {
++            if (option.position == QStyleOptionTab::Middle) {
+                 p.save();
+                 p.setBrush(bkgrdColor);
+-                if(ThemeController::widgetTheme() == ClassicTheme &&(option.state.testFlag(QStyle::State_MouseOver) || option.state.testFlag(QStyle::State_Selected) ))
++                if (ThemeController::widgetTheme() == ClassicTheme && (option.state.testFlag(QStyle::State_MouseOver) || option.state.testFlag(QStyle::State_Selected)))
+                     p.setPen(borderColor);
+                 else
+                     p.setPen(Qt::NoPen);
+-                //利用quadto绘制圆角矩形会出现一个像素的偏差,修正一下QRect底部高度
+-                p.drawRect(rect.adjusted(0,1,-1,-1));  //调整启典 上描边
++                // 利用quadto绘制圆角矩形会出现一个像素的偏差,修正一下QRect底部高度
++                p.drawRect(rect.adjusted(0, 1, -1, -1)); // 调整启典 上描边
+                 p.restore();
+                 p.setBrush(Qt::NoBrush);
+                 p.setPen(fontColor);
+@@ -288,7 +266,7 @@ void KTabBar::paintEvent(QPaintEvent *event)
+                 uint tf = Qt::AlignVCenter;
+                 if (!option.icon.isNull()) {
+                     QIcon::Mode mode = option.state & QStyle::State_Enabled ? QIcon::Normal
+-                                                                     : QIcon::Disabled;
++                                                                            : QIcon::Disabled;
+                     if (mode == QIcon::Normal && option.state & QStyle::State_HasFocus)
+                         mode = QIcon::Active;
+                     QIcon::State state = QIcon::Off;
+@@ -308,80 +286,64 @@ void KTabBar::paintEvent(QPaintEvent *event)
+ 
+                     w = pixmap.width() / pixmap.devicePixelRatio();
+ 
+-//                    if (option.direction == Qt::RightToLeft)
+-//                        point.rx() += w;
++                    //                    if (option.direction == Qt::RightToLeft)
++                    //                        point.rx() += w;
+ 
+-                    if(fm.width(tabText(i)) >= option.rect.width()-option.iconSize.width()-7)
+-                        p.drawPixmap(option.rect.x()+4,this->style()->visualPos(option.direction, option.rect, point).y(), pixmap);
+-                    else
+-                    {
+-                        if(option.direction == Qt::RightToLeft)
++                    if (fm.width(tabText(i)) >= option.rect.width() - option.iconSize.width() - 7)
++                        p.drawPixmap(option.rect.x() + 4, this->style()->visualPos(option.direction, option.rect, point).y(), pixmap);
++                    else {
++                        if (option.direction == Qt::RightToLeft)
+                             p.drawPixmap(point, pixmap);
+                         else
+                             p.drawPixmap(this->style()->visualPos(option.direction, option.rect, point), pixmap);
+                     }
+ 
+-                    if (!tabText(i).isEmpty()){
+-                        int subH = std::max(option.iconSize.height(),option.fontMetrics.height());
++                    if (!tabText(i).isEmpty()) {
++                        int subH = std::max(option.iconSize.height(), option.fontMetrics.height());
+                         int icon_Y = (rect.height() - subH) / 2;
+                         int text_X = point.x() + option.iconSize.width() + 4;
+                         int text_Y = icon_Y;
+ 
+                         QRect textRect;
+-                        if(fm.width(tabText(i)) >= option.rect.width()-option.iconSize.width()-7)
+-                        {
+-                            textRect = QRect(option.rect.x()+option.iconSize.width()+8, text_Y, option.rect.width()-option.iconSize.width()-7, option.fontMetrics.height());
+-                            setTabToolTip(i,tabText(i));
+-                            QString elidedText = fm.elidedText(tabText(i),Qt::ElideRight,option.rect.width()-option.iconSize.width()-7);
+-                            p.drawText(textRect,tf,elidedText);
+-                        }
+-                        else
+-                        {
+-                            textRect=QRect(text_X, text_Y, option.fontMetrics.width(tabText(i)), option.fontMetrics.height());
+-                            setTabToolTip(i,"");
+-                            p.drawText(textRect,tf,tabText(i));
++                        if (fm.width(tabText(i)) >= option.rect.width() - option.iconSize.width() - 7) {
++                            textRect = QRect(option.rect.x() + option.iconSize.width() + 8, text_Y, option.rect.width() - option.iconSize.width() - 7, option.fontMetrics.height());
++                            setTabToolTip(i, tabText(i));
++                            QString elidedText = fm.elidedText(tabText(i), Qt::ElideRight, option.rect.width() - option.iconSize.width() - 7);
++                            p.drawText(textRect, tf, elidedText);
++                        } else {
++                            textRect = QRect(text_X, text_Y, option.fontMetrics.width(tabText(i)), option.fontMetrics.height());
++                            setTabToolTip(i, "");
++                            p.drawText(textRect, tf, tabText(i));
+                         }
+                     }
+-                }
+-                else
+-                {
++                } else {
+                     tf |= Qt::AlignHCenter;
+-                    if(fm.width(tabText(i)) >= option.rect.width())
+-                    {
+-                        QString elidedText = fm.elidedText(tabText(i),Qt::ElideRight,option.rect.width());
+-                        p.drawText(rect,tf,elidedText);
+-                        setTabToolTip(i,tabText(i));
+-                    }
+-                    else
+-                    {
+-                        setTabToolTip(i,"");
+-                        p.drawText(rect,tf,tabText(i));
++                    if (fm.width(tabText(i)) >= option.rect.width()) {
++                        QString elidedText = fm.elidedText(tabText(i), Qt::ElideRight, option.rect.width());
++                        p.drawText(rect, tf, elidedText);
++                        setTabToolTip(i, tabText(i));
++                    } else {
++                        setTabToolTip(i, "");
++                        p.drawText(rect, tf, tabText(i));
+                     }
+-
+                 }
+-            }
+-            else if(option.position == QStyleOptionTab::Beginning)
+-            {
++            } else if (option.position == QStyleOptionTab::Beginning) {
+                 p.save();
+                 p.setBrush(bkgrdColor);
+-                if(ThemeController::widgetTheme() == ClassicTheme &&(option.state.testFlag(QStyle::State_MouseOver) || option.state.testFlag(QStyle::State_Selected) ))
++                if (ThemeController::widgetTheme() == ClassicTheme && (option.state.testFlag(QStyle::State_MouseOver) || option.state.testFlag(QStyle::State_Selected)))
+                     p.setPen(borderColor);
+                 else
+                     p.setPen(Qt::NoPen);
+                 QPainterPath path;
+-                auto tempRect = rect.adjusted(0,1,0,0); //调整启典 上描边
+-                if(ThemeController::widgetTheme() == ClassicTheme)
+-                {
++                auto tempRect = rect.adjusted(0, 1, 0, 0); // 调整启典 上描边
++                if (ThemeController::widgetTheme() == ClassicTheme) {
+                     path.moveTo(tempRect.topLeft());
+                     path.lineTo(tempRect.bottomLeft());
+                     path.lineTo(tempRect.bottomRight());
+                     path.lineTo(tempRect.topRight());
+                     path.lineTo(tempRect.topLeft());
+-                }
+-                else
+-                {
+-                    if(layoutDirection() == Qt::LeftToRight)
+-                    {
++                } else {
++                    if (layoutDirection() == Qt::LeftToRight) {
+                         path.moveTo(tempRect.topLeft() + QPointF(0, d->m_borderRadius));
+                         path.lineTo(tempRect.bottomLeft() - QPointF(0, d->m_borderRadius));
+                         path.quadTo(tempRect.bottomLeft(), tempRect.bottomLeft() + QPointF(d->m_borderRadius, 0));
+@@ -389,15 +351,13 @@ void KTabBar::paintEvent(QPaintEvent *event)
+                         path.lineTo(tempRect.topRight());
+                         path.lineTo(tempRect.topLeft() + QPointF(d->m_borderRadius, 0));
+                         path.quadTo(tempRect.topLeft(), tempRect.topLeft() + QPointF(0, d->m_borderRadius));
+-                    }
+-                    else
+-                    {
++                    } else {
+                         path.moveTo(tempRect.topLeft());
+                         path.lineTo(tempRect.bottomLeft());
+-                        path.lineTo(tempRect.bottomRight() - QPointF(d->m_borderRadius,0));
+-                        path.quadTo(tempRect.bottomRight(), tempRect.bottomRight() - QPointF(0,d->m_borderRadius));
+-                        path.lineTo(tempRect.topRight() + QPointF(0,d->m_borderRadius));
+-                        path.quadTo(tempRect.topRight(), tempRect.topRight() - QPointF(d->m_borderRadius,0));
++                        path.lineTo(tempRect.bottomRight() - QPointF(d->m_borderRadius, 0));
++                        path.quadTo(tempRect.bottomRight(), tempRect.bottomRight() - QPointF(0, d->m_borderRadius));
++                        path.lineTo(tempRect.topRight() + QPointF(0, d->m_borderRadius));
++                        path.quadTo(tempRect.topRight(), tempRect.topRight() - QPointF(d->m_borderRadius, 0));
+                         path.lineTo(tempRect.topLeft());
+                     }
+                 }
+@@ -409,7 +369,7 @@ void KTabBar::paintEvent(QPaintEvent *event)
+                 uint tf = Qt::AlignVCenter;
+                 if (!option.icon.isNull()) {
+                     QIcon::Mode mode = option.state & QStyle::State_Enabled ? QIcon::Normal
+-                                                                     : QIcon::Disabled;
++                                                                            : QIcon::Disabled;
+                     if (mode == QIcon::Normal && option.state & QStyle::State_HasFocus)
+                         mode = QIcon::Active;
+                     QIcon::State state = QIcon::Off;
+@@ -429,25 +389,24 @@ void KTabBar::paintEvent(QPaintEvent *event)
+ 
+                     w = pixmap.width() / pixmap.devicePixelRatio();
+ 
+-//                    if (option.direction == Qt::RightToLeft)
+-//                        point.rx() += w;
++                    //                    if (option.direction == Qt::RightToLeft)
++                    //                        point.rx() += w;
+ 
+                     p.setBrush(Qt::red);
+-                    p.drawRect(option.rect.x()+4,this->style()->visualPos(option.direction, option.rect, point).y(),pixmap.width(),pixmap.height());
++                    p.drawRect(option.rect.x() + 4, this->style()->visualPos(option.direction, option.rect, point).y(), pixmap.width(), pixmap.height());
+                     p.setBrush(Qt::NoBrush);
+ 
+                     p.setBrush(Qt::red);
+-                    p.drawRect(option.rect.x()+4,this->style()->visualPos(option.direction, option.rect, point).y(),pixmap.width(),pixmap.height());
++                    p.drawRect(option.rect.x() + 4, this->style()->visualPos(option.direction, option.rect, point).y(), pixmap.width(), pixmap.height());
+                     p.setBrush(Qt::NoBrush);
+ 
+-                    if(fm.width(tabText(i)) >= option.rect.width()-option.iconSize.width()-7)
+-                        p.drawPixmap(option.rect.x()+4,this->style()->visualPos(option.direction, option.rect, point).y(), pixmap);
+-                    else
+-                    {
+-                        if(option.direction == Qt::RightToLeft)
++                    if (fm.width(tabText(i)) >= option.rect.width() - option.iconSize.width() - 7)
++                        p.drawPixmap(option.rect.x() + 4, this->style()->visualPos(option.direction, option.rect, point).y(), pixmap);
++                    else {
++                        if (option.direction == Qt::RightToLeft)
+                             p.drawPixmap(point, pixmap);
+                         else
+-                           p.drawPixmap(this->style()->visualPos(option.direction, option.rect, point), pixmap);
++                            p.drawPixmap(this->style()->visualPos(option.direction, option.rect, point), pixmap);
+                     }
+ 
+                     if (option.direction == Qt::RightToLeft)
+@@ -455,76 +414,60 @@ void KTabBar::paintEvent(QPaintEvent *event)
+                     else
+                         rect.translate(point.x() + w + 4, 0);
+ 
+-                    if (!tabText(i).isEmpty()){
+-                         tf |= Qt::AlignLeft;
+-                         int subH = std::max(option.iconSize.height(),option.fontMetrics.height());
+-                         int icon_Y = (rect.height() - subH) / 2;
+-                         int text_X = point.x() + option.iconSize.width() + 4;
+-                         int text_Y = icon_Y;
+-                         QRect textRect;
+-                         if(fm.width(tabText(i)) >= option.rect.width()-option.iconSize.width()-7)
+-                         {
+-                             textRect = QRect(option.rect.x()+option.iconSize.width()+8, text_Y, option.rect.width()-option.iconSize.width()-8, option.fontMetrics.height());
+-                             setTabToolTip(i,tabText(i));
+-                             QString elidedText = fm.elidedText(tabText(i),Qt::ElideRight,option.rect.width()-option.iconSize.width()-8);
+-                             p.drawText(textRect,tf,elidedText);
+-                         }
+-                         else
+-                         {
+-                             textRect=QRect(text_X, text_Y, option.fontMetrics.width(tabText(i)), option.fontMetrics.height());
+-                             setTabToolTip(i,"");
+-                             p.drawText(textRect,tf,tabText(i));
+-                         }
+-                     }
+-                }
+-                else
+-                {
+-                    tf |= Qt::AlignHCenter;
+-                    if(fm.width(tabText(i)) >= option.rect.width())
+-                    {
+-                        QString elidedText = fm.elidedText(tabText(i),Qt::ElideRight,option.rect.width());
+-                        p.drawText(rect,tf,elidedText);
+-                        setTabToolTip(i,tabText(i));
++                    if (!tabText(i).isEmpty()) {
++                        tf |= Qt::AlignLeft;
++                        int subH = std::max(option.iconSize.height(), option.fontMetrics.height());
++                        int icon_Y = (rect.height() - subH) / 2;
++                        int text_X = point.x() + option.iconSize.width() + 4;
++                        int text_Y = icon_Y;
++                        QRect textRect;
++                        if (fm.width(tabText(i)) >= option.rect.width() - option.iconSize.width() - 7) {
++                            textRect = QRect(option.rect.x() + option.iconSize.width() + 8, text_Y, option.rect.width() - option.iconSize.width() - 8, option.fontMetrics.height());
++                            setTabToolTip(i, tabText(i));
++                            QString elidedText = fm.elidedText(tabText(i), Qt::ElideRight, option.rect.width() - option.iconSize.width() - 8);
++                            p.drawText(textRect, tf, elidedText);
++                        } else {
++                            textRect = QRect(text_X, text_Y, option.fontMetrics.width(tabText(i)), option.fontMetrics.height());
++                            setTabToolTip(i, "");
++                            p.drawText(textRect, tf, tabText(i));
++                        }
+                     }
+-                    else
+-                    {
+-                        p.drawText(rect,tf,tabText(i));
+-                        setTabToolTip(i,"");
++                } else {
++                    tf |= Qt::AlignHCenter;
++                    if (fm.width(tabText(i)) >= option.rect.width()) {
++                        QString elidedText = fm.elidedText(tabText(i), Qt::ElideRight, option.rect.width());
++                        p.drawText(rect, tf, elidedText);
++                        setTabToolTip(i, tabText(i));
++                    } else {
++                        p.drawText(rect, tf, tabText(i));
++                        setTabToolTip(i, "");
+                     }
+                 }
+-            }
+-            else
+-            {
++            } else {
+                 p.save();
+                 p.setBrush(bkgrdColor);
+-                if(ThemeController::widgetTheme() == ClassicTheme &&(option.state.testFlag(QStyle::State_MouseOver) || option.state.testFlag(QStyle::State_Selected) ))
++                if (ThemeController::widgetTheme() == ClassicTheme && (option.state.testFlag(QStyle::State_MouseOver) || option.state.testFlag(QStyle::State_Selected)))
+                     p.setPen(borderColor);
+                 else
+                     p.setPen(Qt::NoPen);
+                 QPainterPath path;
+-                if(ThemeController::widgetTheme() == ClassicTheme)
+-                {
+-                    rect=rect.adjusted(0,1,0,0); //调整启典 上描边
++                if (ThemeController::widgetTheme() == ClassicTheme) {
++                    rect = rect.adjusted(0, 1, 0, 0); // 调整启典 上描边
+                     path.moveTo(rect.topLeft());
+                     path.lineTo(rect.bottomLeft());
+                     path.lineTo(rect.bottomRight());
+                     path.lineTo(rect.topRight());
+                     path.lineTo(rect.topLeft());
+-                }
+-                else
+-                {
+-                    if(layoutDirection() == Qt::LeftToRight)
+-                    {
++                } else {
++                    if (layoutDirection() == Qt::LeftToRight) {
+                         path.moveTo(rect.topLeft());
+                         path.lineTo(rect.bottomLeft());
+-                        path.lineTo(rect.bottomRight() - QPointF(d->m_borderRadius,0));
++                        path.lineTo(rect.bottomRight() - QPointF(d->m_borderRadius, 0));
+                         path.quadTo(rect.bottomRight(), rect.bottomRight() - QPointF(0, d->m_borderRadius));
+                         path.lineTo(rect.topRight() + QPointF(0, d->m_borderRadius));
+-                        path.quadTo(rect.topRight(), rect.topRight() - QPointF(d->m_borderRadius,0));
++                        path.quadTo(rect.topRight(), rect.topRight() - QPointF(d->m_borderRadius, 0));
+                         path.lineTo(rect.topLeft());
+-                    }
+-                    else
+-                    {
++                    } else {
+                         path.moveTo(rect.topLeft() + QPointF(0, d->m_borderRadius));
+                         path.lineTo(rect.bottomLeft() - QPointF(0, d->m_borderRadius));
+                         path.quadTo(rect.bottomLeft(), rect.bottomLeft() + QPointF(d->m_borderRadius, 0));
+@@ -543,7 +486,7 @@ void KTabBar::paintEvent(QPaintEvent *event)
+                 if (!option.icon.isNull()) {
+ 
+                     QIcon::Mode mode = option.state & QStyle::State_Enabled ? QIcon::Normal
+-                                                                     : QIcon::Disabled;
++                                                                            : QIcon::Disabled;
+                     if (mode == QIcon::Normal && option.state & QStyle::State_HasFocus)
+                         mode = QIcon::Active;
+                     QIcon::State state = QIcon::Off;
+@@ -563,160 +506,135 @@ void KTabBar::paintEvent(QPaintEvent *event)
+ 
+                     w = pixmap.width() / pixmap.devicePixelRatio();
+ 
+-//                    if (option.direction == Qt::RightToLeft)
+-//                        point.rx() += w;
++                    //                    if (option.direction == Qt::RightToLeft)
++                    //                        point.rx() += w;
+ 
+-                    if(fm.width(tabText(i)) >= option.rect.width()-option.iconSize.width()-7)
+-                        p.drawPixmap(option.rect.x()+4,this->style()->visualPos(option.direction, option.rect, point).y(), pixmap);
+-                    else
+-                    {
+-                        if(option.direction == Qt::RightToLeft)
++                    if (fm.width(tabText(i)) >= option.rect.width() - option.iconSize.width() - 7)
++                        p.drawPixmap(option.rect.x() + 4, this->style()->visualPos(option.direction, option.rect, point).y(), pixmap);
++                    else {
++                        if (option.direction == Qt::RightToLeft)
+                             p.drawPixmap(point, pixmap);
+                         else
+                             p.drawPixmap(this->style()->visualPos(option.direction, option.rect, point), pixmap);
+                     }
+ 
+-                    if (!tabText(i).isEmpty()){
+-                        int subH = std::max(option.iconSize.height(),option.fontMetrics.height());
++                    if (!tabText(i).isEmpty()) {
++                        int subH = std::max(option.iconSize.height(), option.fontMetrics.height());
+                         int icon_Y = (rect.height() - subH) / 2;
+                         int text_X = point.x() + option.iconSize.width() + 4;
+                         int text_Y = icon_Y;
+                         QRect textRect;
+-                        if(fm.width(tabText(i)) >= option.rect.width()-option.iconSize.width()-7)
+-                        {
+-                            textRect = QRect(option.rect.x()+option.iconSize.width()+8, text_Y, option.rect.width()-option.iconSize.width()-8, option.fontMetrics.height());
+-                            setTabToolTip(i,tabText(i));
+-                            QString elidedText = fm.elidedText(tabText(i),Qt::ElideRight,option.rect.width()-option.iconSize.width()-8);
+-                            p.drawText(textRect,elidedText);
+-                        }
+-                        else
+-                        {
+-                            textRect=QRect(text_X, text_Y, option.fontMetrics.width(tabText(i)), option.fontMetrics.height());
+-                            setTabToolTip(i,"");
+-                            p.drawText(textRect,tabText(i));
++                        if (fm.width(tabText(i)) >= option.rect.width() - option.iconSize.width() - 7) {
++                            textRect = QRect(option.rect.x() + option.iconSize.width() + 8, text_Y, option.rect.width() - option.iconSize.width() - 8, option.fontMetrics.height());
++                            setTabToolTip(i, tabText(i));
++                            QString elidedText = fm.elidedText(tabText(i), Qt::ElideRight, option.rect.width() - option.iconSize.width() - 8);
++                            p.drawText(textRect, elidedText);
++                        } else {
++                            textRect = QRect(text_X, text_Y, option.fontMetrics.width(tabText(i)), option.fontMetrics.height());
++                            setTabToolTip(i, "");
++                            p.drawText(textRect, tabText(i));
+                         }
+                     }
+-                }
+-                else
+-                {
++                } else {
+                     tf |= Qt::AlignHCenter;
+-                    if(fm.width(tabText(i)) >= option.rect.width())
+-                    {
+-                        QString elidedText = fm.elidedText(tabText(i),Qt::ElideRight,option.rect.width());
+-                        p.drawText(rect,tf,elidedText);
+-                        setTabToolTip(i,tabText(i));
+-                    }
+-                    else
+-                    {
+-                        p.drawText(rect,tf,tabText(i));
+-                        setTabToolTip(i,"");
++                    if (fm.width(tabText(i)) >= option.rect.width()) {
++                        QString elidedText = fm.elidedText(tabText(i), Qt::ElideRight, option.rect.width());
++                        p.drawText(rect, tf, elidedText);
++                        setTabToolTip(i, tabText(i));
++                    } else {
++                        p.drawText(rect, tf, tabText(i));
++                        setTabToolTip(i, "");
+                     }
+                 }
+             }
+             break;
+         }
+-        case SegmentLight:
+-        {
+-//            mix = option.palette.brightText().color();
++        case SegmentLight: {
++            //            mix = option.palette.brightText().color();
+             mix = ThemeController::getPaletteColorFromDT("brighttext");
+-//            fontColor = option.palette.buttonText().color();
++            //            fontColor = option.palette.buttonText().color();
+             fontColor = ThemeController::getPaletteColorFromDT("buttontext");
+             QColor bkgrdColor = d->m_bkgrdColor;
+-            if(ThemeController::widgetTheme() == ClassicTheme)
+-            {
+-                if(ThemeController::themeMode() == LightTheme)
+-                {
+-                    if(option.state.testFlag(QStyle::State_Selected))
+-                    {
+-                        bkgrdColor = ThemeController::highlightClick(false,palette());
+-                        bkgrdColor = ThemeController::adjustH(bkgrdColor,-3);
+-                        bkgrdColor = ThemeController::adjustS(bkgrdColor,-3);
+-                        bkgrdColor = ThemeController::adjustL(bkgrdColor,-3);
+-
+-                        borderColor = ThemeController::highlightClick(false,palette());
+-                        borderColor = ThemeController::adjustH(borderColor,-1);
+-                        borderColor = ThemeController::adjustS(borderColor,-34);
+-                        borderColor = ThemeController::adjustL(borderColor,-30);
++            if (ThemeController::widgetTheme() == ClassicTheme) {
++                if (ThemeController::themeMode() == LightTheme) {
++                    if (option.state.testFlag(QStyle::State_Selected)) {
++                        bkgrdColor = ThemeController::highlightClick(false, palette());
++                        bkgrdColor = ThemeController::adjustH(bkgrdColor, -3);
++                        bkgrdColor = ThemeController::adjustS(bkgrdColor, -3);
++                        bkgrdColor = ThemeController::adjustL(bkgrdColor, -3);
++
++                        borderColor = ThemeController::highlightClick(false, palette());
++                        borderColor = ThemeController::adjustH(borderColor, -1);
++                        borderColor = ThemeController::adjustS(borderColor, -34);
++                        borderColor = ThemeController::adjustL(borderColor, -30);
++                    } else if (option.state.testFlag(QStyle::State_MouseOver)) {
++                        bkgrdColor = ThemeController::highlightHover(false, palette());
++                        bkgrdColor = ThemeController::adjustH(bkgrdColor, -3);
++                        bkgrdColor = ThemeController::adjustS(bkgrdColor, -8);
++                        bkgrdColor = ThemeController::adjustL(bkgrdColor, -3);
++
++                        borderColor = ThemeController::highlightHover(false, palette());
++                        borderColor = ThemeController::adjustH(borderColor, -3);
++                        borderColor = ThemeController::adjustS(borderColor, -24);
++                        borderColor = ThemeController::adjustL(borderColor, -24);
+                     }
+-                    else if(option.state.testFlag(QStyle::State_MouseOver))
+-                    {
+-                         bkgrdColor = ThemeController::highlightHover(false,palette());
+-                         bkgrdColor = ThemeController::adjustH(bkgrdColor,-3);
+-                         bkgrdColor = ThemeController::adjustS(bkgrdColor,-8);
+-                         bkgrdColor = ThemeController::adjustL(bkgrdColor,-3);
+-
+-                         borderColor = ThemeController::highlightHover(false,palette());
+-                         borderColor = ThemeController::adjustH(borderColor,-3);
+-                         borderColor = ThemeController::adjustS(borderColor,-24);
+-                         borderColor = ThemeController::adjustL(borderColor,-24);
+-                    }
+-                }
+-                else
+-                {
+-                    if(option.state.testFlag(QStyle::State_Selected))
+-                    {
+-                        bkgrdColor = ThemeController::highlightClick(true,palette());
+-                        bkgrdColor = ThemeController::adjustH(bkgrdColor,-2);
+-                        bkgrdColor = ThemeController::adjustS(bkgrdColor,-23);
+-                        bkgrdColor = ThemeController::adjustL(bkgrdColor,11);
++                } else {
++                    if (option.state.testFlag(QStyle::State_Selected)) {
++                        bkgrdColor = ThemeController::highlightClick(true, palette());
++                        bkgrdColor = ThemeController::adjustH(bkgrdColor, -2);
++                        bkgrdColor = ThemeController::adjustS(bkgrdColor, -23);
++                        bkgrdColor = ThemeController::adjustL(bkgrdColor, 11);
+ 
+                         fontColor = QColor("#FFFFFF");
+ 
+-                        borderColor = ThemeController::highlightClick(true,palette());
+-                        borderColor = ThemeController::adjustH(borderColor,-2);
+-                        borderColor = ThemeController::adjustS(borderColor,2);
+-                        borderColor = ThemeController::adjustL(borderColor,46);
+-                    }
+-                    else if(option.state.testFlag(QStyle::State_MouseOver))
+-                    {
+-                         bkgrdColor = ThemeController::highlightHover(true,palette());
+-                         bkgrdColor = ThemeController::adjustH(bkgrdColor,-2);
+-                         bkgrdColor = ThemeController::adjustS(bkgrdColor,-23);
+-                         bkgrdColor = ThemeController::adjustL(bkgrdColor,11);
+-
+-                         borderColor = ThemeController::highlightHover(true,palette());
+-                         borderColor = ThemeController::adjustH(borderColor,-2);
+-                         borderColor = ThemeController::adjustS(borderColor,-2);
+-                         borderColor = ThemeController::adjustL(borderColor,36);
++                        borderColor = ThemeController::highlightClick(true, palette());
++                        borderColor = ThemeController::adjustH(borderColor, -2);
++                        borderColor = ThemeController::adjustS(borderColor, 2);
++                        borderColor = ThemeController::adjustL(borderColor, 46);
++                    } else if (option.state.testFlag(QStyle::State_MouseOver)) {
++                        bkgrdColor = ThemeController::highlightHover(true, palette());
++                        bkgrdColor = ThemeController::adjustH(bkgrdColor, -2);
++                        bkgrdColor = ThemeController::adjustS(bkgrdColor, -23);
++                        bkgrdColor = ThemeController::adjustL(bkgrdColor, 11);
++
++                        borderColor = ThemeController::highlightHover(true, palette());
++                        borderColor = ThemeController::adjustH(borderColor, -2);
++                        borderColor = ThemeController::adjustS(borderColor, -2);
++                        borderColor = ThemeController::adjustL(borderColor, 36);
+                     }
+                 }
+-            }
+-            else
+-            {
+-                if(option.state.testFlag(QStyle::State_Selected))
+-                {
+-//                    bkgrdColor = option.palette.highlight().color();
++            } else {
++                if (option.state.testFlag(QStyle::State_Selected)) {
++                    //                    bkgrdColor = option.palette.highlight().color();
+                     bkgrdColor = ThemeController::getPaletteColorFromDT("highlight");
+                     fontColor = QColor("#FFFFFF");
+-                }
+-                else if(option.state.testFlag(QStyle::State_MouseOver))
+-                {
+-                    if(ThemeController::themeMode() == LightTheme)
+-                        bkgrdColor = ThemeController::mixColor(bkgrdColor,mix,0.05);
++                } else if (option.state.testFlag(QStyle::State_MouseOver)) {
++                    if (ThemeController::themeMode() == LightTheme)
++                        bkgrdColor = ThemeController::mixColor(bkgrdColor, mix, 0.05);
+                     else
+-                        bkgrdColor = ThemeController::mixColor(bkgrdColor,mix,0.10);
++                        bkgrdColor = ThemeController::mixColor(bkgrdColor, mix, 0.10);
+                 }
+             }
+             p.save();
+             p.setBrush(bkgrdColor);
+-            if(ThemeController::widgetTheme() == ClassicTheme &&(option.state.testFlag(QStyle::State_MouseOver) || option.state.testFlag(QStyle::State_Selected) ))
++            if (ThemeController::widgetTheme() == ClassicTheme && (option.state.testFlag(QStyle::State_MouseOver) || option.state.testFlag(QStyle::State_Selected)))
+                 p.setPen(borderColor);
+             else
+                 p.setPen(Qt::NoPen);
+-            if(ThemeController::widgetTheme() == ClassicTheme)
+-                p.drawRoundedRect(rect.adjusted(0,1,-1,-1),0,0);
++            if (ThemeController::widgetTheme() == ClassicTheme)
++                p.drawRoundedRect(rect.adjusted(0, 1, -1, -1), 0, 0);
+             else
+-                p.drawRoundedRect(/*option.rect.adjusted*/rect.adjusted(d->m_horizontalMargin,0,0,-d->m_topMargin),
+-                              d->m_borderRadius,d->m_borderRadius);
++                p.drawRoundedRect(/*option.rect.adjusted*/ rect.adjusted(d->m_horizontalMargin, 0, 0, -d->m_topMargin),
++                                  d->m_borderRadius, d->m_borderRadius);
+             p.restore();
+             p.setBrush(Qt::NoBrush);
+             p.setPen(fontColor);
+-            /*QRect*/  rect = /*option.*/rect.adjusted(d->m_horizontalMargin,0,0,-d->m_topMargin);
++            /*QRect*/ rect = /*option.*/ rect.adjusted(d->m_horizontalMargin, 0, 0, -d->m_topMargin);
+             QPoint point;
+             uint tf = Qt::AlignVCenter;
+             if (!option.icon.isNull()) {
+                 QIcon::Mode mode = option.state & QStyle::State_Enabled ? QIcon::Normal
+-                                                                 : QIcon::Disabled;
++                                                                        : QIcon::Disabled;
+                 if (mode == QIcon::Normal && option.state & QStyle::State_HasFocus)
+                     mode = QIcon::Active;
+                 QIcon::State state = QIcon::Off;
+@@ -736,162 +654,133 @@ void KTabBar::paintEvent(QPaintEvent *event)
+ 
+                 w = pixmap.width() / pixmap.devicePixelRatio();
+ 
+-//                if (option.direction == Qt::RightToLeft)
+-//                    point.rx() += w;
++                //                if (option.direction == Qt::RightToLeft)
++                //                    point.rx() += w;
+ 
+-                if(fm.width(tabText(i)) >= option.rect.width()-option.iconSize.width()-7)
+-                    p.drawPixmap(option.rect.x()+4,this->style()->visualPos(option.direction, option.rect, point).y(), pixmap);
+-                else
+-                {
+-                    if(option.direction == Qt::RightToLeft)
++                if (fm.width(tabText(i)) >= option.rect.width() - option.iconSize.width() - 7)
++                    p.drawPixmap(option.rect.x() + 4, this->style()->visualPos(option.direction, option.rect, point).y(), pixmap);
++                else {
++                    if (option.direction == Qt::RightToLeft)
+                         p.drawPixmap(point, pixmap);
+                     else
+                         p.drawPixmap(this->style()->visualPos(option.direction, option.rect, point), pixmap);
+                 }
+ 
+-                if (!tabText(i).isEmpty()){
+-                    int subH = std::max(option.iconSize.height(),option.fontMetrics.height());
++                if (!tabText(i).isEmpty()) {
++                    int subH = std::max(option.iconSize.height(), option.fontMetrics.height());
+                     int icon_Y = (rect.height() - subH) / 2;
+                     int text_X = point.x() + option.iconSize.width() + 4;
+                     int text_Y = icon_Y;
+                     QRect textRect;
+-                    if(fm.width(tabText(i)) >= option.rect.width()-option.iconSize.width()-7)
+-                    {
+-                        textRect = QRect(option.rect.x()+option.iconSize.width()+8, text_Y, option.rect.width()-option.iconSize.width()-8, option.fontMetrics.height());
+-                        setTabToolTip(i,tabText(i));
+-                        QString elidedText = fm.elidedText(tabText(i),Qt::ElideRight,option.rect.width()-option.iconSize.width()-8);
+-                        p.drawText(textRect,elidedText);
+-                    }
+-                    else
+-                    {
+-                        textRect=QRect(text_X, text_Y, option.fontMetrics.width(tabText(i)), option.fontMetrics.height());
+-                        setTabToolTip(i,"");
+-                        p.drawText(textRect,tabText(i));
++                    if (fm.width(tabText(i)) >= option.rect.width() - option.iconSize.width() - 7) {
++                        textRect = QRect(option.rect.x() + option.iconSize.width() + 8, text_Y, option.rect.width() - option.iconSize.width() - 8, option.fontMetrics.height());
++                        setTabToolTip(i, tabText(i));
++                        QString elidedText = fm.elidedText(tabText(i), Qt::ElideRight, option.rect.width() - option.iconSize.width() - 8);
++                        p.drawText(textRect, elidedText);
++                    } else {
++                        textRect = QRect(text_X, text_Y, option.fontMetrics.width(tabText(i)), option.fontMetrics.height());
++                        setTabToolTip(i, "");
++                        p.drawText(textRect, tabText(i));
+                     }
+                 }
+-            }
+-            else
+-            {
++            } else {
+                 tf |= Qt::AlignHCenter;
+-                if(fm.width(tabText(i)) >= option.rect.width())
+-                {
+-                    QString elidedText = fm.elidedText(tabText(i),Qt::ElideRight,option.rect.width());
+-                    p.drawText(rect,tf,elidedText);
+-                    setTabToolTip(i,tabText(i));
+-                }
+-                else
+-                {
+-                    p.drawText(rect,tf,tabText(i));
+-                    setTabToolTip(i,"");
++                if (fm.width(tabText(i)) >= option.rect.width()) {
++                    QString elidedText = fm.elidedText(tabText(i), Qt::ElideRight, option.rect.width());
++                    p.drawText(rect, tf, elidedText);
++                    setTabToolTip(i, tabText(i));
++                } else {
++                    p.drawText(rect, tf, tabText(i));
++                    setTabToolTip(i, "");
+                 }
+             }
+             break;
+         }
+-        case Sliding:
+-        {
+-//            mix = option.palette.brightText().color();
++        case Sliding: {
++            //            mix = option.palette.brightText().color();
+             mix = ThemeController::getPaletteColorFromDT("brighttext");
+-//            fontColor = option.palette.buttonText().color();
++            //            fontColor = option.palette.buttonText().color();
+             fontColor = ThemeController::getPaletteColorFromDT("buttontext");
+             QColor bkgrdColor = d->m_bkgrdColor;
+-            if(ThemeController::widgetTheme() == ClassicTheme)
+-            {
+-                if(ThemeController::themeMode() == LightTheme)
+-                {
+-                    if(option.state.testFlag(QStyle::State_Selected))
+-                    {
+-                        bkgrdColor = ThemeController::highlightClick(false,palette());
+-                        bkgrdColor = ThemeController::adjustH(bkgrdColor,0);
+-                        bkgrdColor = ThemeController::adjustS(bkgrdColor,-29);
+-                        bkgrdColor = ThemeController::adjustL(bkgrdColor,-42);
++            if (ThemeController::widgetTheme() == ClassicTheme) {
++                if (ThemeController::themeMode() == LightTheme) {
++                    if (option.state.testFlag(QStyle::State_Selected)) {
++                        bkgrdColor = ThemeController::highlightClick(false, palette());
++                        bkgrdColor = ThemeController::adjustH(bkgrdColor, 0);
++                        bkgrdColor = ThemeController::adjustS(bkgrdColor, -29);
++                        bkgrdColor = ThemeController::adjustL(bkgrdColor, -42);
+ 
+                         fontColor = bkgrdColor;
++                    } else if (option.state.testFlag(QStyle::State_MouseOver)) {
++                        bkgrdColor = ThemeController::highlightHover(false, palette());
++                        bkgrdColor = ThemeController::adjustH(bkgrdColor, -6);
++                        bkgrdColor = ThemeController::adjustS(bkgrdColor, 4);
++                        bkgrdColor = ThemeController::adjustL(bkgrdColor, -27);
+                     }
+-                    else if(option.state.testFlag(QStyle::State_MouseOver))
+-                    {
+-                        bkgrdColor = ThemeController::highlightHover(false,palette());
+-                        bkgrdColor = ThemeController::adjustH(bkgrdColor,-6);
+-                        bkgrdColor = ThemeController::adjustS(bkgrdColor,4);
+-                        bkgrdColor = ThemeController::adjustL(bkgrdColor,-27);
+-                    }
+-                }
+-                else
+-                {
+-                    if(option.state.testFlag(QStyle::State_Selected))
+-                    {
+-                        bkgrdColor = ThemeController::highlightClick(true,palette());
+-                        bkgrdColor = ThemeController::adjustH(bkgrdColor,1);
+-                        bkgrdColor = ThemeController::adjustS(bkgrdColor,25);
+-                        bkgrdColor = ThemeController::adjustL(bkgrdColor,35);
++                } else {
++                    if (option.state.testFlag(QStyle::State_Selected)) {
++                        bkgrdColor = ThemeController::highlightClick(true, palette());
++                        bkgrdColor = ThemeController::adjustH(bkgrdColor, 1);
++                        bkgrdColor = ThemeController::adjustS(bkgrdColor, 25);
++                        bkgrdColor = ThemeController::adjustL(bkgrdColor, 35);
+ 
+                         fontColor = bkgrdColor;
+-                    }
+-                    else if(option.state.testFlag(QStyle::State_MouseOver))
+-                    {
+-                        bkgrdColor = ThemeController::highlightHover(true,palette());
+-                        bkgrdColor = ThemeController::adjustH(bkgrdColor,3);
+-                        bkgrdColor = ThemeController::adjustS(bkgrdColor,2);
+-                        bkgrdColor = ThemeController::adjustL(bkgrdColor,29);
++                    } else if (option.state.testFlag(QStyle::State_MouseOver)) {
++                        bkgrdColor = ThemeController::highlightHover(true, palette());
++                        bkgrdColor = ThemeController::adjustH(bkgrdColor, 3);
++                        bkgrdColor = ThemeController::adjustS(bkgrdColor, 2);
++                        bkgrdColor = ThemeController::adjustL(bkgrdColor, 29);
+                     }
+                 }
+-            }
+-            else
+-            {
+-                if(option.state.testFlag(QStyle::State_Selected))
+-                {
+-//                    bkgrdColor = option.palette.highlight().color();
++            } else {
++                if (option.state.testFlag(QStyle::State_Selected)) {
++                    //                    bkgrdColor = option.palette.highlight().color();
+                     bkgrdColor = ThemeController::getPaletteColorFromDT("highlight");
+-//                    fontColor = option.palette.highlight().color();
++                    //                    fontColor = option.palette.highlight().color();
+                     fontColor = ThemeController::getPaletteColorFromDT("highlight");
+-                }
+-                else if(option.state.testFlag(QStyle::State_MouseOver))
+-                {
+-                     bkgrdColor = ThemeController::mixColor(bkgrdColor,mix,0.05);
++                } else if (option.state.testFlag(QStyle::State_MouseOver)) {
++                    bkgrdColor = ThemeController::mixColor(bkgrdColor, mix, 0.05);
+                 }
+             }
+ 
+             p.save();
+             QPen pen;
+-            if(i != currentIndex())
++            if (i != currentIndex())
+                 pen.setColor(bkgrdColor);
+             else
+                 pen.setColor(d->m_bkgrdColor);
+             pen.setWidth(2);
+             p.setPen(pen);
+-            p.drawLine(rect.bottomLeft(),rect.bottomRight());
++            p.drawLine(rect.bottomLeft(), rect.bottomRight());
+             p.restore();
+ 
+-            if(d->m_animationStarted)
+-            {
++            if (d->m_animationStarted) {
+                 int left_border = d->m_animation->currentValue().toInt();
+                 p.save();
+                 QPen pen;
+                 pen.setWidth(2);
+-//                pen.setColor(option.palette.highlight().color());
++                //                pen.setColor(option.palette.highlight().color());
+                 pen.setColor(ThemeController::getPaletteColorFromDT("highlight"));
+                 p.setPen(pen);
+-                p.drawLine(QPoint(left_border, rect.height()-1),QPoint(left_border + d->m_nextTabWidth, rect.height()-1));
++                p.drawLine(QPoint(left_border, rect.height() - 1), QPoint(left_border + d->m_nextTabWidth, rect.height() - 1));
+                 p.restore();
+-            }
+-            else
+-            {
++            } else {
+                 p.save();
+                 QPen pen;
+                 pen.setColor(bkgrdColor);
+                 pen.setWidth(2);
+                 p.setPen(pen);
+-                p.drawLine(rect.bottomLeft(),rect.bottomRight());
++                p.drawLine(rect.bottomLeft(), rect.bottomRight());
+                 p.restore();
+             }
+ 
+-
+             p.setBrush(Qt::NoBrush);
+             p.setPen(fontColor);
+             QPoint point;
+             uint tf = Qt::AlignVCenter;
+             if (!option.icon.isNull()) {
+                 QIcon::Mode mode = option.state & QStyle::State_Enabled ? QIcon::Normal
+-                                                                 : QIcon::Disabled;
++                                                                        : QIcon::Disabled;
+                 if (mode == QIcon::Normal && option.state & QStyle::State_HasFocus)
+                     mode = QIcon::Active;
+                 QIcon::State state = QIcon::Off;
+@@ -911,53 +800,44 @@ void KTabBar::paintEvent(QPaintEvent *event)
+ 
+                 w = pixmap.width() / pixmap.devicePixelRatio();
+ 
+-//                if (option.direction == Qt::RightToLeft)
+-//                    point.rx() += w;
++                //                if (option.direction == Qt::RightToLeft)
++                //                    point.rx() += w;
+ 
+-                if(fm.width(tabText(i)) >= option.rect.width()-option.iconSize.width()-7)
+-                     p.drawPixmap(option.rect.x()+4,this->style()->visualPos(option.direction, option.rect, point).y(), pixmap);
+-                else
+-                {
+-                    if(option.direction == Qt::RightToLeft)
++                if (fm.width(tabText(i)) >= option.rect.width() - option.iconSize.width() - 7)
++                    p.drawPixmap(option.rect.x() + 4, this->style()->visualPos(option.direction, option.rect, point).y(), pixmap);
++                else {
++                    if (option.direction == Qt::RightToLeft)
+                         p.drawPixmap(point, pixmap);
+                     else
+                         p.drawPixmap(this->style()->visualPos(option.direction, option.rect, point), pixmap);
+                 }
+ 
+-                if (!tabText(i).isEmpty()){
+-                    int subH = std::max(option.iconSize.height(),option.fontMetrics.height());
++                if (!tabText(i).isEmpty()) {
++                    int subH = std::max(option.iconSize.height(), option.fontMetrics.height());
+                     int icon_Y = (rect.height() - subH) / 2;
+                     int text_X = point.x() + option.iconSize.width() + 4;
+                     int text_Y = icon_Y;
+                     QRect textRect;
+-                    if(fm.width(tabText(i)) >= option.rect.width()-option.iconSize.width()-7)
+-                    {
+-                        textRect = QRect(option.rect.x()+option.iconSize.width()+8, text_Y, option.rect.width()-option.iconSize.width()-8, option.fontMetrics.height());
+-                        setTabToolTip(i,tabText(i));
+-                        QString elidedText = fm.elidedText(tabText(i),Qt::ElideRight,option.rect.width()-option.iconSize.width()-8);
+-                        p.drawText(textRect,elidedText);
+-                    }
+-                    else
+-                    {
+-                        textRect=QRect(text_X, text_Y, option.fontMetrics.width(tabText(i)), option.fontMetrics.height());
+-                        setTabToolTip(i,"");
+-                        p.drawText(textRect,tabText(i));
++                    if (fm.width(tabText(i)) >= option.rect.width() - option.iconSize.width() - 7) {
++                        textRect = QRect(option.rect.x() + option.iconSize.width() + 8, text_Y, option.rect.width() - option.iconSize.width() - 8, option.fontMetrics.height());
++                        setTabToolTip(i, tabText(i));
++                        QString elidedText = fm.elidedText(tabText(i), Qt::ElideRight, option.rect.width() - option.iconSize.width() - 8);
++                        p.drawText(textRect, elidedText);
++                    } else {
++                        textRect = QRect(text_X, text_Y, option.fontMetrics.width(tabText(i)), option.fontMetrics.height());
++                        setTabToolTip(i, "");
++                        p.drawText(textRect, tabText(i));
+                     }
+                 }
+-            }
+-            else
+-            {
++            } else {
+                 tf |= Qt::AlignHCenter;
+-                if(fm.width(tabText(i)) >= option.rect.width())
+-                {
+-                    QString elidedText = fm.elidedText(tabText(i),Qt::ElideRight,option.rect.width());
+-                    p.drawText(rect,tf,elidedText);
+-                    setTabToolTip(i,tabText(i));
+-                }
+-                else
+-                {
+-                    p.drawText(rect,tf,tabText(i));
+-                    setTabToolTip(i,"");
++                if (fm.width(tabText(i)) >= option.rect.width()) {
++                    QString elidedText = fm.elidedText(tabText(i), Qt::ElideRight, option.rect.width());
++                    p.drawText(rect, tf, elidedText);
++                    setTabToolTip(i, tabText(i));
++                } else {
++                    p.drawText(rect, tf, tabText(i));
++                    setTabToolTip(i, "");
+                 }
+             }
+             break;
+@@ -972,33 +852,31 @@ void KTabBarPrivate::changeTheme()
+ {
+     Q_Q(KTabBar);
+     switch (m_kTabBarStyle) {
+-    case SegmentDark:
+-    {
+-        if(m_useCustomColor)
++    case SegmentDark: {
++        if (m_useCustomColor)
+             return;
+         else
+-//            m_bkgrdColor = q->palette().button().color();
++            //            m_bkgrdColor = q->palette().button().color();
+             m_bkgrdColor = ThemeController::getPaletteColorFromDT("button");
+         break;
+     }
+-    case SegmentLight:
+-    {
+-        if(m_useCustomColor)
+-           return;
++    case SegmentLight: {
++        if (m_useCustomColor)
++            return;
+         else
+-            m_bkgrdColor = QColor(0,0,0,0);
++            m_bkgrdColor = QColor(0, 0, 0, 0);
+         break;
+     }
+     case Sliding:
+-        if(m_useCustomColor)
++        if (m_useCustomColor)
+             return;
+         else
+-//            m_bkgrdColor = q->palette().button().color();
++            //            m_bkgrdColor = q->palette().button().color();
+             m_bkgrdColor = ThemeController::getPaletteColorFromDT("button");
+         break;
+     default:
+         break;
+-    } ;
++    };
+     q->update();
+ }
+ 
+@@ -1016,17 +894,13 @@ int KTabBarPrivate::getIndexAtPos(const QPoint &p)
+ bool KTabBarPrivate::eventFilter(QObject *watched, QEvent *event)
+ {
+     Q_Q(KTabBar);
+-    if(event->type() == QEvent::MouseButtonPress)
+-    {
+-        if(q->isEnabled())
+-        {
+-            QMouseEvent *mouseEvent = dynamic_cast<QMouseEvent*>(event);
+-            if(mouseEvent && mouseEvent->button() == Qt::MouseButton::LeftButton)
+-            {
++    if (event->type() == QEvent::MouseButtonPress) {
++        if (q->isEnabled()) {
++            QMouseEvent *mouseEvent = dynamic_cast<QMouseEvent *>(event);
++            if (mouseEvent && mouseEvent->button() == Qt::MouseButton::LeftButton) {
+                 int nextIndex = getIndexAtPos(mouseEvent->pos());
+                 int currentIndex = q->currentIndex();
+-                if(nextIndex != currentIndex)
+-                {
++                if (nextIndex != currentIndex) {
+                     int cur_left_border = q->tabRect(currentIndex).left();
+                     int next_left_border = q->tabRect(nextIndex).left();
+                     m_nextTabWidth = q->tabRect(nextIndex).width();
+@@ -1036,8 +910,7 @@ bool KTabBarPrivate::eventFilter(QObject *watched, QEvent *event)
+                     m_animationStarted = true;
+                 }
+             }
+-            if(mouseEvent && mouseEvent->button() == Qt::MouseButton::RightButton)
+-            {
++            if (mouseEvent && mouseEvent->button() == Qt::MouseButton::RightButton) {
+                 emit q->rightlicked(mouseEvent->globalPos());
+             }
+         }
+diff --git a/kysdk-qtwidgets/src/ktabbar.h b/kysdk-qtwidgets/src/ktabbar.h
+index 4bd0ffe..3741cd5 100644
+--- a/kysdk-qtwidgets/src/ktabbar.h
++++ b/kysdk-qtwidgets/src/ktabbar.h
+@@ -24,21 +24,20 @@
+ #define KTABBAR_H
+ 
+ #include "gui_g.h"
+-#include <QTabBar>
+ #include <QIcon>
++#include <QTabBar>
+ 
+ namespace kdk
+ {
+ 
+ /** @defgroup BarModule
+-  * @{
+-  */
++ * @{
++ */
+ 
+ /**
+  * @brief 支持三种样式
+  */
+-enum KTabBarStyle
+-{
++enum KTabBarStyle {
+     SegmentDark,
+     SegmentLight,
+     Sliding
+@@ -49,12 +48,12 @@ class KTabBarPrivate;
+ /**
+  * @brief 支持三种样式
+  */
+-class GUI_EXPORT KTabBar: public QTabBar
++class GUI_EXPORT KTabBar : public QTabBar
+ {
+     Q_OBJECT
+ 
+ public:
+-    KTabBar(KTabBarStyle barStyle = SegmentLight,QWidget* parent = nullptr);
++    KTabBar(KTabBarStyle barStyle = SegmentLight, QWidget *parent = nullptr);
+     ~KTabBar();
+ 
+     /**
+@@ -86,7 +85,7 @@ public:
+      * @param color
+      * @since 1.2
+      */
+-    void setBackgroundColor(const QColor& color);
++    void setBackgroundColor(const QColor &color);
+ Q_SIGNALS:
+     /**
+      * @brief 鼠标右键信号
+@@ -94,20 +93,21 @@ Q_SIGNALS:
+      * @since 2.4
+      */
+     void rightlicked(QPoint point);
++
+ protected:
+     QSize sizeHint() const;
+     QSize minimumTabSizeHint(int index) const;
+-     QSize tabSizeHint(int index) const;
++    QSize tabSizeHint(int index) const;
+     void paintEvent(QPaintEvent *event);
+ 
+ private:
+     Q_DECLARE_PRIVATE(KTabBar)
+-    KTabBarPrivate*const d_ptr;
++    KTabBarPrivate *const d_ptr;
+ };
+ }
+ /**
+-  * @example testtabbar/widget.h
+-  * @example testtabbar/widget.cpp
+-  * @}
+-  */
+-#endif //KTABBAR_H
++ * @example testtabbar/widget.h
++ * @example testtabbar/widget.cpp
++ * @}
++ */
++#endif // KTABBAR_H
+diff --git a/kysdk-qtwidgets/src/ktableheaderview.cpp b/kysdk-qtwidgets/src/ktableheaderview.cpp
+index eb72411..3182bcc 100644
+--- a/kysdk-qtwidgets/src/ktableheaderview.cpp
++++ b/kysdk-qtwidgets/src/ktableheaderview.cpp
+@@ -22,19 +22,20 @@
+ 
+ #include "ktableheaderview.h"
+ #include "themeController.h"
+-#include <QPainter>
+ #include <QApplication>
+ #include <QCheckBox>
+-#include <QMouseEvent>
+-#include <QEvent>
+ #include <QDebug>
+-#include <QMenu>
++#include <QEvent>
+ #include <QMap>
++#include <QMenu>
++#include <QMouseEvent>
++#include <QPainter>
+ #include <QToolButton>
+ 
+-namespace kdk {
++namespace kdk
++{
+ 
+-class Q_DECL_HIDDEN KTableHeaderViewPrivate : public QObject,public ThemeController
++class Q_DECL_HIDDEN KTableHeaderViewPrivate : public QObject, public ThemeController
+ {
+     Q_OBJECT
+     Q_DECLARE_PUBLIC(KTableHeaderView)
+@@ -44,28 +45,26 @@ public:
+     void changeTheme();
+ 
+ private:
+-    KTableHeaderView* q_ptr;
++    KTableHeaderView *q_ptr;
+     QStringList m_HeaderList;
+     bool m_bChecked;
+     bool m_bTristate;
+     bool m_bNoChange;
+     bool m_bPressed;
+     QCheckBox m_checkBox;
+-    QMap<int,QMenu*> m_map;
++    QMap<int, QMenu *> m_map;
+ };
+ 
+-
+ KTableHeaderView::KTableHeaderView(Qt::Orientation orientation, QWidget *parent)
+     : QHeaderView(orientation, parent)
+-    ,d_ptr(new KTableHeaderViewPrivate(this))
++    , d_ptr(new KTableHeaderViewPrivate(this))
+ 
+ {
+     Q_D(KTableHeaderView);
+-    //设置Section可点击,若不设置则不能发出sectionClicked信号
++    // 设置Section可点击,若不设置则不能发出sectionClicked信号
+     this->setSectionsClickable(true);
+-    connect(this,&KTableHeaderView::clickedHeader,this,[=](int column){
+-        if(d->m_map.contains(column))
+-        {
++    connect(this, &KTableHeaderView::clickedHeader, this, [=](int column) {
++        if (d->m_map.contains(column)) {
+             d->m_map.value(column)->exec(QCursor::pos());
+         }
+     });
+@@ -74,13 +73,13 @@ KTableHeaderView::KTableHeaderView(Qt::Orientation orientation, QWidget *parent)
+ void KTableHeaderView::setTitle(QStringList list)
+ {
+     Q_D(KTableHeaderView);
+-    d->m_HeaderList= list;
++    d->m_HeaderList = list;
+ }
+ 
+ void KTableHeaderView::setMenu(QMenu *menu, int column)
+ {
+     Q_D(KTableHeaderView);
+-    d->m_map.insert(column,menu);
++    d->m_map.insert(column, menu);
+ }
+ 
+ void KTableHeaderView::paintSection(QPainter *painter, const QRect &rect, int logicalIndex) const
+@@ -90,62 +89,49 @@ void KTableHeaderView::paintSection(QPainter *painter, const QRect &rect, int lo
+     QHeaderView::paintSection(painter, rect, logicalIndex);
+     painter->restore();
+ 
+-    if(logicalIndex == 0)
+-    {
++    if (logicalIndex == 0) {
+         QStyleOptionButton option;
+ 
+         option.initFrom(this);
+ 
+-        if (d->m_bTristate && d->m_bNoChange)
+-        {
++        if (d->m_bTristate && d->m_bNoChange) {
+             option.state |= QStyle::State_NoChange;
+-        }
+-        else
++        } else
+             option.state |= d->m_bChecked ? QStyle::State_On : QStyle::State_Off;
+ 
+         option.iconSize = QSize(16, 16);
+-        option.rect = QRect(rect.x() + 8, rect.y() + (rect.height() - 16)/2, 16, 16);
++        option.rect = QRect(rect.x() + 8, rect.y() + (rect.height() - 16) / 2, 16, 16);
+         style()->drawPrimitive(QStyle::PE_IndicatorCheckBox, &option, painter, &d->m_checkBox);
+ 
+-    }
+-    else
+-    {
+-        if(d->m_map.contains(logicalIndex))
+-        {
+-            QPixmap pixmap=QIcon::fromTheme("ukui-down-symbolic").pixmap(16,16);
+-            if(ThemeController::themeMode() == DarkTheme)
++    } else {
++        if (d->m_map.contains(logicalIndex)) {
++            QPixmap pixmap = QIcon::fromTheme("ukui-down-symbolic").pixmap(16, 16);
++            if (ThemeController::themeMode() == DarkTheme)
+                 pixmap = ThemeController::drawSymbolicColoredPixmap(pixmap);
+-            QRect iconRect(rect.right()-24,rect.height()/2-8,16,16);
+-            painter->drawPixmap(iconRect,pixmap);
++            QRect iconRect(rect.right() - 24, rect.height() / 2 - 8, 16, 16);
++            painter->drawPixmap(iconRect, pixmap);
+         }
+     }
+ 
+     QRect textRect;
+-    if(logicalIndex > -1 || logicalIndex < d->m_HeaderList.size()){
+-        if(logicalIndex == 0)
+-        {
+-            textRect = rect.adjusted(32,0,0,0);
+-            if(fontMetrics().width(d->m_HeaderList.at(logicalIndex)) > textRect.width())
+-            {
+-                QString str = fontMetrics().elidedText(d->m_HeaderList.at(logicalIndex),Qt::ElideRight,textRect.width());
+-                painter->drawText(textRect,Qt::AlignVCenter,str);
+-            }
+-            else
+-                painter->drawText(textRect,Qt::AlignVCenter,d->m_HeaderList.at(logicalIndex));
+-        }
+-        else
+-        {
+-            if(d->m_map.contains(logicalIndex))
+-                textRect = rect.adjusted(6,0,-24,0);
+-            else
+-                textRect = rect.adjusted(6,0,-6,0);
+-            if(fontMetrics().width(d->m_HeaderList.at(logicalIndex)) > textRect.width())
+-            {
+-                QString str = fontMetrics().elidedText(d->m_HeaderList.at(logicalIndex),Qt::ElideRight,textRect.width());
+-                painter->drawText(textRect,Qt::AlignVCenter,str);
+-            }
++    if (logicalIndex > -1 || logicalIndex < d->m_HeaderList.size()) {
++        if (logicalIndex == 0) {
++            textRect = rect.adjusted(32, 0, 0, 0);
++            if (fontMetrics().width(d->m_HeaderList.at(logicalIndex)) > textRect.width()) {
++                QString str = fontMetrics().elidedText(d->m_HeaderList.at(logicalIndex), Qt::ElideRight, textRect.width());
++                painter->drawText(textRect, Qt::AlignVCenter, str);
++            } else
++                painter->drawText(textRect, Qt::AlignVCenter, d->m_HeaderList.at(logicalIndex));
++        } else {
++            if (d->m_map.contains(logicalIndex))
++                textRect = rect.adjusted(6, 0, -24, 0);
+             else
+-                painter->drawText(textRect,Qt::AlignVCenter,d->m_HeaderList.at(logicalIndex));
++                textRect = rect.adjusted(6, 0, -6, 0);
++            if (fontMetrics().width(d->m_HeaderList.at(logicalIndex)) > textRect.width()) {
++                QString str = fontMetrics().elidedText(d->m_HeaderList.at(logicalIndex), Qt::ElideRight, textRect.width());
++                painter->drawText(textRect, Qt::AlignVCenter, str);
++            } else
++                painter->drawText(textRect, Qt::AlignVCenter, d->m_HeaderList.at(logicalIndex));
+         }
+     }
+ }
+@@ -155,23 +141,19 @@ void KTableHeaderView::mousePressEvent(QMouseEvent *e)
+     Q_D(KTableHeaderView);
+     int nColumn = logicalIndexAt(e->pos());
+ 
+-    if ((e->buttons() & Qt::LeftButton) )
+-    {
+-        if(nColumn == 0)
++    if ((e->buttons() & Qt::LeftButton)) {
++        if (nColumn == 0)
+             d->m_bPressed = true;
+-        else
+-        {
+-            //每个标题栏的rect
+-            QRect tabRect(sectionPosition(nColumn),0,sectionSize(nColumn),viewport()->rect().height());
+-            //是否在图标区域被点击
+-            QRect sectionRect(tabRect.right()-24,tabRect.y() + (tabRect.height() - 16)/2,16,16);
+-            if(sectionRect.contains(e->pos()) && d->m_map.contains(nColumn))
++        else {
++            // 每个标题栏的rect
++            QRect tabRect(sectionPosition(nColumn), 0, sectionSize(nColumn), viewport()->rect().height());
++            // 是否在图标区域被点击
++            QRect sectionRect(tabRect.right() - 24, tabRect.y() + (tabRect.height() - 16) / 2, 16, 16);
++            if (sectionRect.contains(e->pos()) && d->m_map.contains(nColumn))
+                 emit clickedHeader(nColumn);
+             QHeaderView::mousePressEvent(e);
+         }
+-    }
+-    else
+-    {
++    } else {
+         QHeaderView::mousePressEvent(e);
+     }
+     viewport()->update();
+@@ -180,25 +162,19 @@ void KTableHeaderView::mousePressEvent(QMouseEvent *e)
+ void KTableHeaderView::mouseReleaseEvent(QMouseEvent *e)
+ {
+     Q_D(KTableHeaderView);
+-    if (d->m_bPressed)
+-    {
+-        if (d->m_bTristate && d->m_bNoChange)
+-        {
++    if (d->m_bPressed) {
++        if (d->m_bTristate && d->m_bNoChange) {
+             d->m_bChecked = true;
+             d->m_bNoChange = false;
+-        }
+-        else
+-        {
++        } else {
+             d->m_bChecked = !d->m_bChecked;
+         }
+-    }
+-    else
+-    {
++    } else {
+         QHeaderView::mouseReleaseEvent(e);
+     }
+     this->viewport()->update();
+     d->m_bPressed = false;
+-    if(d->m_bChecked)
++    if (d->m_bChecked)
+         emit checkStateChange(Qt::Checked);
+     else
+         emit checkStateChange(Qt::Unchecked);
+@@ -225,13 +201,12 @@ void KTableHeaderView::checkStateChangeSlot(int iState)
+ }
+ 
+ KTableHeaderViewPrivate::KTableHeaderViewPrivate(KTableHeaderView *parent)
+-    :q_ptr(parent)
+-    ,m_bTristate(false)
+-    ,m_bNoChange(false)
+-    ,m_bChecked(false)
+-    ,m_bPressed(false)
++    : q_ptr(parent)
++    , m_bTristate(false)
++    , m_bNoChange(false)
++    , m_bChecked(false)
++    , m_bPressed(false)
+ {
+-
+ }
+ 
+ void KTableHeaderViewPrivate::changeTheme()
+@@ -242,6 +217,5 @@ void KTableHeaderViewPrivate::changeTheme()
+ 
+ }
+ 
+-
+ #include "ktableheaderview.moc"
+ #include "moc_ktableheaderview.cpp"
+diff --git a/kysdk-qtwidgets/src/ktableheaderview.h b/kysdk-qtwidgets/src/ktableheaderview.h
+index f1cf457..2278ee4 100644
+--- a/kysdk-qtwidgets/src/ktableheaderview.h
++++ b/kysdk-qtwidgets/src/ktableheaderview.h
+@@ -23,13 +23,13 @@
+ #ifndef KTABLEHEADVIEW_H
+ #define KTABLEHEADVIEW_H
+ 
+-
+-#include <QObject>
++#include <QCheckBox>
+ #include <QHeaderView>
+ #include <QMap>
+-#include <QCheckBox>
++#include <QObject>
+ 
+-namespace kdk {
++namespace kdk
++{
+ 
+ /**
+  * @brief 继承自QHeaderView,设置view视图标题
+@@ -59,7 +59,7 @@ public:
+      * @param menu
+      * @param column
+      */
+-    void setMenu(QMenu *menu,int column);
++    void setMenu(QMenu *menu, int column);
+ 
+ protected:
+     void paintSection(QPainter *painter, const QRect &rect, int logicalIndex) const;
+@@ -77,7 +77,6 @@ public slots:
+ private:
+     Q_DECLARE_PRIVATE(KTableHeaderView)
+     KTableHeaderViewPrivate *const d_ptr;
+-
+ };
+ 
+ }
+diff --git a/kysdk-qtwidgets/src/ktablemodel.cpp b/kysdk-qtwidgets/src/ktablemodel.cpp
+index fa4a31c..c094faf 100644
+--- a/kysdk-qtwidgets/src/ktablemodel.cpp
++++ b/kysdk-qtwidgets/src/ktablemodel.cpp
+@@ -21,15 +21,16 @@
+  */
+ 
+ #include "ktablemodel.h"
++#include "themeController.h"
++#include <QApplication>
++#include <QCheckBox>
+ #include <QDebug>
+ #include <QStyleOptionButton>
+-#include <QCheckBox>
+-#include <QApplication>
+-#include "themeController.h"
+ 
+-namespace kdk {
++namespace kdk
++{
+ 
+-class Q_DECL_HIDDEN KTableModelPrivate : public QObject,public ThemeController
++class Q_DECL_HIDDEN KTableModelPrivate : public QObject, public ThemeController
+ {
+     Q_OBJECT
+     Q_DECLARE_PUBLIC(KTableModel)
+@@ -40,21 +41,19 @@ public:
+ 
+ private:
+     KTableModel *q_ptr;
+-
+ };
+ 
+ KTableModel::KTableModel(QObject *parent)
+-    :QStandardItemModel(parent)
+-    ,d_ptr(new KTableModelPrivate(this))
++    : QStandardItemModel(parent)
++    , d_ptr(new KTableModelPrivate(this))
+ {
+-
+ }
+ 
+ QVariant KTableModel::headerData(int section, Qt::Orientation orientation, int role) const
+ {
+     (void)section;
+ 
+-    if(orientation == Qt::Horizontal && role == Qt::TextAlignmentRole){
++    if (orientation == Qt::Horizontal && role == Qt::TextAlignmentRole) {
+         return QVariant(Qt::AlignLeft | Qt::AlignVCenter);
+     }
+ 
+@@ -62,9 +61,8 @@ QVariant KTableModel::headerData(int section, Qt::Orientation orientation, int r
+ }
+ 
+ KTableModelPrivate::KTableModelPrivate(KTableModel *parent)
+-    :q_ptr(parent)
++    : q_ptr(parent)
+ {
+-
+ }
+ 
+ void KTableModelPrivate::changeTheme()
+@@ -77,6 +75,3 @@ void KTableModelPrivate::changeTheme()
+ 
+ #include "ktablemodel.moc"
+ #include "moc_ktablemodel.cpp"
+-
+-
+-
+diff --git a/kysdk-qtwidgets/src/ktablemodel.h b/kysdk-qtwidgets/src/ktablemodel.h
+index 6261ea1..1e20817 100644
+--- a/kysdk-qtwidgets/src/ktablemodel.h
++++ b/kysdk-qtwidgets/src/ktablemodel.h
+@@ -24,7 +24,8 @@
+ #define KTABLEMODEL_H
+ 
+ #include <QStandardItemModel>
+-namespace kdk {
++namespace kdk
++{
+ 
+ /**
+  * @brief 重置标题
+diff --git a/kysdk-qtwidgets/src/ktableview.cpp b/kysdk-qtwidgets/src/ktableview.cpp
+index 638465d..f6dd59e 100644
+--- a/kysdk-qtwidgets/src/ktableview.cpp
++++ b/kysdk-qtwidgets/src/ktableview.cpp
+@@ -21,27 +21,28 @@
+  */
+ 
+ #include "ktableview.h"
+-#include <QStyledItemDelegate>
+-#include <QPainter>
+-#include <QHeaderView>
+-#include <QCheckBox>
++#include "ktableheaderview.h"
++#include "themeController.h"
+ #include <QApplication>
++#include <QCheckBox>
+ #include <QDebug>
++#include <QHeaderView>
++#include <QItemSelectionModel>
+ #include <QMouseEvent>
++#include <QPainter>
++#include <QStyledItemDelegate>
+ #include <QToolButton>
+-#include <QItemSelectionModel>
+-#include "ktableheaderview.h"
+-#include "themeController.h"
+ 
+-namespace kdk {
++namespace kdk
++{
+ 
+-class Q_DECL_HIDDEN TableDelegate :public QStyledItemDelegate
++class Q_DECL_HIDDEN TableDelegate : public QStyledItemDelegate
+ {
+     Q_OBJECT
+ public:
+-    TableDelegate(QObject* parent);
++    TableDelegate(QObject *parent);
+ 
+-    void updateState(Qt::CheckState state,const QModelIndex &index);
++    void updateState(Qt::CheckState state, const QModelIndex &index);
+ 
+     QList<int> selectList();
+ 
+@@ -56,14 +57,14 @@ Q_SIGNALS:
+ public slots:
+     void checkChangeSlot(int state);
+     void onHoverIndexChanged(QModelIndex index);
+-//    void selectChange(int row);
++    //    void selectChange(int row);
+ 
+ private:
+     QList<int> m_checkList;
+     int m_hoverRow;
+ };
+ 
+-class Q_DECL_HIDDEN KTableViewPrivate : public QObject,public ThemeController
++class Q_DECL_HIDDEN KTableViewPrivate : public QObject, public ThemeController
+ {
+     Q_OBJECT
+     Q_DECLARE_PUBLIC(KTableView)
+@@ -73,46 +74,44 @@ public:
+ 
+     void changeTheme();
+ 
+-
+ private:
+-    KTableView* q_ptr;
+-    KTableHeaderView* m_pHeaderView;
+-    TableDelegate* m_pDelegate;
++    KTableView *q_ptr;
++    KTableHeaderView *m_pHeaderView;
++    TableDelegate *m_pDelegate;
+ };
+ 
+ KTableView::KTableView(QWidget *parent)
+-    :QTableView(parent)
+-    ,d_ptr(new KTableViewPrivate(this))
++    : QTableView(parent)
++    , d_ptr(new KTableViewPrivate(this))
+ {
+     Q_D(KTableView);
+     setShowGrid(false);
+     verticalHeader()->setVisible(false);
+-    setEditTriggers (QAbstractItemView::NoEditTriggers);
++    setEditTriggers(QAbstractItemView::NoEditTriggers);
+     setSelectionBehavior(QAbstractItemView::SelectRows);
+     setMouseTracking(true);
+     installEventFilter(this);
+ 
+-    d->m_pHeaderView = new KTableHeaderView(Qt::Horizontal,this);
++    d->m_pHeaderView = new KTableHeaderView(Qt::Horizontal, this);
+     d->m_pHeaderView->installEventFilter(this);
+ 
+     d->m_pDelegate = new TableDelegate(this);
+     setItemDelegate(d->m_pDelegate);
+ 
+-    connect(d->m_pDelegate,&TableDelegate::checkChange,d->m_pHeaderView,[=](int state){
++    connect(d->m_pDelegate, &TableDelegate::checkChange, d->m_pHeaderView, [=](int state) {
+         d->m_pHeaderView->checkStateChangeSlot(state);
+     });
+-    connect(d->m_pHeaderView,&KTableHeaderView::checkStateChange,d->m_pDelegate,[=](int state){
++    connect(d->m_pHeaderView, &KTableHeaderView::checkStateChange, d->m_pDelegate, [=](int state) {
+         d->m_pDelegate->checkChangeSlot(state);
+         QItemSelectionModel *SelectionModel = selectionModel();
+-        if (SelectionModel)
+-        {
++        if (SelectionModel) {
+             SelectionModel->clearSelection();
+         }
+         emit hoverIndexChanged(QModelIndex());
+     });
+ 
+-    connect(this,SIGNAL(hoverIndexChanged(QModelIndex)),d->m_pDelegate,SLOT(onHoverIndexChanged(QModelIndex)));
+-    connect(d->m_gsetting,&QGSettings::changed,this,[=]{
++    connect(this, SIGNAL(hoverIndexChanged(QModelIndex)), d->m_pDelegate, SLOT(onHoverIndexChanged(QModelIndex)));
++    connect(d->m_gsetting, &QGSettings::changed, this, [=] {
+         d->changeTheme();
+     });
+ }
+@@ -127,7 +126,7 @@ void KTableView::setHorizontalTitle(QStringList list)
+ KTableHeaderView *KTableView::headerView()
+ {
+     Q_D(KTableView);
+-    if(d->m_pHeaderView)
++    if (d->m_pHeaderView)
+         return d->m_pHeaderView;
+ }
+ 
+@@ -148,8 +147,7 @@ void KTableView::mouseMoveEvent(QMouseEvent *event)
+ bool KTableView::eventFilter(QObject *object, QEvent *event)
+ {
+     Q_D(KTableView);
+-    if(object == this)
+-    {
++    if (object == this) {
+         switch (event->type()) {
+         case QEvent::Leave:
+             emit hoverIndexChanged(QModelIndex());
+@@ -158,8 +156,7 @@ bool KTableView::eventFilter(QObject *object, QEvent *event)
+             break;
+         }
+     }
+-    if(object == d->m_pHeaderView)
+-    {
++    if (object == d->m_pHeaderView) {
+         switch (event->type()) {
+         case QEvent::Enter:
+             emit hoverIndexChanged(QModelIndex());
+@@ -169,18 +166,16 @@ bool KTableView::eventFilter(QObject *object, QEvent *event)
+         }
+     }
+     this->viewport()->update();
+-    return QTableView::eventFilter(object,event);
++    return QTableView::eventFilter(object, event);
+ }
+ 
+ KTableViewPrivate::KTableViewPrivate(KTableView *parent)
+-    :q_ptr(parent)
++    : q_ptr(parent)
+ {
+-
+ }
+ 
+ KTableViewPrivate::~KTableViewPrivate()
+ {
+-
+ }
+ 
+ void KTableViewPrivate::changeTheme()
+@@ -189,28 +184,25 @@ void KTableViewPrivate::changeTheme()
+ }
+ 
+ TableDelegate::TableDelegate(QObject *parent)
+-    :QStyledItemDelegate(parent)
++    : QStyledItemDelegate(parent)
+ {
+     m_hoverRow = -1;
+ }
+ 
+ void TableDelegate::updateState(Qt::CheckState state, const QModelIndex &index)
+ {
+-    if(state == Qt::Checked)
+-    {
++    if (state == Qt::Checked) {
+         m_checkList.append(index.row());
+-    }
+-    else if(state == Qt::Unchecked)
+-    {
++    } else if (state == Qt::Unchecked) {
+ 
+         m_checkList.removeOne(index.row());
+     }
+-    QAbstractItemView *view = qobject_cast<QAbstractItemView*>(parent());
++    QAbstractItemView *view = qobject_cast<QAbstractItemView *>(parent());
+     int count = view->model()->rowCount();
+ 
+-    if(m_checkList.count() == 0)
++    if (m_checkList.count() == 0)
+         emit checkChange(Qt::Unchecked);
+-    else if(m_checkList.count() == count)
++    else if (m_checkList.count() == count)
+         emit checkChange(Qt::Checked);
+     else
+         emit checkChange(Qt::PartiallyChecked);
+@@ -222,48 +214,40 @@ void TableDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option,
+     QColor bkgColor;
+     QColor hoverColor;
+ 
+-    if(ThemeController::themeMode() == LightTheme)
+-    {
++    if (ThemeController::themeMode() == LightTheme) {
+         if (index.row() % 2 == 0)
+-            bkgColor = QColor(245,245,245);
++            bkgColor = QColor(245, 245, 245);
+         else
+-            bkgColor = QColor(255,255,255);
+-        hoverColor = QColor(0,0,0);
++            bkgColor = QColor(255, 255, 255);
++        hoverColor = QColor(0, 0, 0);
+         hoverColor.setAlphaF(0.05);
+-    }
+-    else
+-    {
++    } else {
+         if (index.row() % 2 == 0)
+-            bkgColor = QColor(38,38,38);
++            bkgColor = QColor(38, 38, 38);
+         else
+-            bkgColor = QColor(18,18,18);
+-        hoverColor = QColor(255,255,255);
++            bkgColor = QColor(18, 18, 18);
++        hoverColor = QColor(255, 255, 255);
+         hoverColor.setAlphaF(0.10);
+     }
+-    if(index.row() == m_hoverRow && !option.state.testFlag(QStyle::State_Selected))
+-    {
++    if (index.row() == m_hoverRow && !option.state.testFlag(QStyle::State_Selected)) {
+         painter->fillRect(option.rect, hoverColor);
+-    }
+-    else
+-    {
+-        if(option.state.testFlag(QStyle::State_Selected))
+-            painter->fillRect(option.rect,/*pale.highlight().color()*/ThemeController::getPaletteColorFromDT("highlight"));
+-        else
+-        {
+-            painter->fillRect(option.rect,bkgColor);
++    } else {
++        if (option.state.testFlag(QStyle::State_Selected))
++            painter->fillRect(option.rect, /*pale.highlight().color()*/ ThemeController::getPaletteColorFromDT("highlight"));
++        else {
++            painter->fillRect(option.rect, bkgColor);
+         }
+         painter->setPen(Qt::NoPen);
+         painter->drawRect(option.rect);
+     }
+ 
+-//    painter->setPen(pale.windowText().color());
++    //    painter->setPen(pale.windowText().color());
+     painter->setPen(ThemeController::getPaletteColorFromDT("windowtext"));
+-    if(index.column() == 0)
+-    {
++    if (index.column() == 0) {
+         QRect rect = option.rect;
+         // 绘制复选框
+         QStyleOptionButton checkBoxStyle;
+-        checkBoxStyle.rect = QRect(rect.x() + 8, rect.y() + (rect.height() - 16)/2, 16, 16);
++        checkBoxStyle.rect = QRect(rect.x() + 8, rect.y() + (rect.height() - 16) / 2, 16, 16);
+ 
+         Qt::CheckState checkState = static_cast<Qt::CheckState>(index.data(Qt::CheckStateRole).toInt());
+         checkBoxStyle.state = (checkState == Qt::Checked) ? QStyle::State_On : QStyle::State_Off;
+@@ -271,41 +255,35 @@ void TableDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option,
+ 
+         QApplication::style()->drawPrimitive(QStyle::PE_IndicatorViewItemCheck, &checkBoxStyle, painter, option.widget);
+ 
+-        painter->drawText(option.rect.adjusted(checkBoxStyle.rect.right()+10,0,0,0), index.data(Qt::DisplayRole).toString());
+-    }
+-    else
+-    {
++        painter->drawText(option.rect.adjusted(checkBoxStyle.rect.right() + 10, 0, 0, 0), index.data(Qt::DisplayRole).toString());
++    } else {
+         painter->drawText(option.rect, index.data(Qt::DisplayRole).toString());
+     }
+-
+ }
+ 
+ bool TableDelegate::editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index)
+ {
+-    if((event->type() == QEvent::MouseButtonRelease) && (index.column() == 0))
+-    {
+-        QMouseEvent *mouse_event = static_cast<QMouseEvent*>(event);
+-       if(mouse_event->button() == Qt::LeftButton)
+-        {
+-            QRect r(option.rect.left()+8,option.rect.y() + (option.rect.height() - 16)/2,16,16);
++    if ((event->type() == QEvent::MouseButtonRelease) && (index.column() == 0)) {
++        QMouseEvent *mouse_event = static_cast<QMouseEvent *>(event);
++        if (mouse_event->button() == Qt::LeftButton) {
++            QRect r(option.rect.left() + 8, option.rect.y() + (option.rect.height() - 16) / 2, 16, 16);
+             bool flag = r.contains(mouse_event->pos());
+-            if(flag)
+-            {
+-                //根据当前单元格的选中状态来在 选中/未选中 之间切换
++            if (flag) {
++                // 根据当前单元格的选中状态来在 选中/未选中 之间切换
+                 QVariant value = index.data(Qt::CheckStateRole);
+                 Qt::CheckState state = (static_cast<Qt::CheckState>(value.toInt()) == Qt::Checked
+-                                        ? Qt::Unchecked : Qt::Checked);
++                                            ? Qt::Unchecked
++                                            : Qt::Checked);
+ 
+-                //设置当前单元格的选中状态
+-                bool checkState=model->setData(index,state, Qt::CheckStateRole);
+-                updateState(state,index);
++                // 设置当前单元格的选中状态
++                bool checkState = model->setData(index, state, Qt::CheckStateRole);
++                updateState(state, index);
+                 return checkState;
+             }
+         }
+         return false;
+-    }
+-    else
+-        return QStyledItemDelegate::editorEvent(event,model,option,index);
++    } else
++        return QStyledItemDelegate::editorEvent(event, model, option, index);
+ }
+ 
+ QList<int> TableDelegate::selectList()
+@@ -316,36 +294,29 @@ QList<int> TableDelegate::selectList()
+ void TableDelegate::checkChangeSlot(int state)
+ {
+     m_checkList.clear();
+-    QAbstractItemView *view = qobject_cast<QAbstractItemView*>(parent());
++    QAbstractItemView *view = qobject_cast<QAbstractItemView *>(parent());
+     int count = view->model()->rowCount();
+     Qt::CheckState checkState;
+ 
+-    for(int i=0 ; i <count ;i++ )
+-    {
+-        if(state == 0)
+-        {
+-            m_checkList.append(view->model()->index(i,0).row());
++    for (int i = 0; i < count; i++) {
++        if (state == 0) {
++            m_checkList.append(view->model()->index(i, 0).row());
+             checkState = Qt::Unchecked;
+-        }
+-        else
+-        {
+-            m_checkList.removeOne(view->model()->index(i,0).row());
++        } else {
++            m_checkList.removeOne(view->model()->index(i, 0).row());
+             checkState = Qt::Checked;
+         }
+-        //设置当前单元格的选中状态
+-        view->model()->setData(view->model()->index(i,0),checkState, Qt::CheckStateRole);
+-        updateState(checkState,view->model()->index(i,0));
++        // 设置当前单元格的选中状态
++        view->model()->setData(view->model()->index(i, 0), checkState, Qt::CheckStateRole);
++        updateState(checkState, view->model()->index(i, 0));
+     }
+ }
+ 
+ void TableDelegate::onHoverIndexChanged(QModelIndex index)
+ {
+-    if(index.isValid())
+-    {
++    if (index.isValid()) {
+         m_hoverRow = index.row();
+-    }
+-    else
+-    {
++    } else {
+         m_hoverRow = -1;
+     }
+ }
+diff --git a/kysdk-qtwidgets/src/ktableview.h b/kysdk-qtwidgets/src/ktableview.h
+index 34bdc23..a088ddb 100644
+--- a/kysdk-qtwidgets/src/ktableview.h
++++ b/kysdk-qtwidgets/src/ktableview.h
+@@ -23,11 +23,11 @@
+ #ifndef KTABLEVIEW_H
+ #define KTABLEVIEW_H
+ 
+-
+-#include <QTableView>
+ #include "ktableheaderview.h"
++#include <QTableView>
+ 
+-namespace kdk {
++namespace kdk
++{
+ 
+ /**
+  * @brief 继承qtbaleview
+@@ -35,7 +35,7 @@ namespace kdk {
+  */
+ class KTableViewPrivate;
+ 
+-class KTableView :public QTableView
++class KTableView : public QTableView
+ {
+     Q_OBJECT
+ public:
+@@ -51,7 +51,7 @@ public:
+      * @brief 返回水平标题栏
+      * @return
+      */
+-    KTableHeaderView* headerView();
++    KTableHeaderView *headerView();
+ 
+     /**
+      * @brief 返回所有选中item的行索引
+@@ -69,8 +69,6 @@ protected:
+ private:
+     Q_DECLARE_PRIVATE(KTableView)
+     KTableViewPrivate *const d_ptr;
+-
+ };
+ }
+ #endif // KTABLEVIEW_H
+-
+diff --git a/kysdk-qtwidgets/src/ktag.cpp b/kysdk-qtwidgets/src/ktag.cpp
+index 5976483..42c8996 100644
+--- a/kysdk-qtwidgets/src/ktag.cpp
++++ b/kysdk-qtwidgets/src/ktag.cpp
+@@ -21,32 +21,33 @@
+  */
+ 
+ #include "ktag.h"
+-#include "themeController.h"
+ #include "ktoolbutton.h"
+-#include <QPainter>
+-#include <QFontMetrics>
++#include "parmscontroller.h"
++#include "themeController.h"
+ #include <QApplication>
+-#include <QToolButton>
+-#include <QStyleOption>
+ #include <QDebug>
++#include <QFontMetrics>
++#include <QPainter>
+ #include <QPalette>
+-#include "parmscontroller.h"
++#include <QStyleOption>
++#include <QToolButton>
+ 
+-namespace kdk {
+-class KTagPrivate:public QObject,public ThemeController
++namespace kdk
++{
++class KTagPrivate : public QObject, public ThemeController
+ {
+     Q_OBJECT
+     Q_DECLARE_PUBLIC(KTag)
+ 
+ public:
+-    KTagPrivate(KTag*parent);
++    KTagPrivate(KTag *parent);
+     void changeTheme();
+     void updateDeleteBtnColor();
+ 
+ private:
+-    KTag* q_ptr;
++    KTag *q_ptr;
+     QString m_text;
+-    KToolButton* m_pDeleteBtn;
++    KToolButton *m_pDeleteBtn;
+     TagStyle m_style;
+     QColor m_backgroundColor;
+     bool m_isClosable;
+@@ -55,13 +56,13 @@ private:
+ };
+ 
+ KTag::KTag(QWidget *parent)
+-    :QPushButton(parent)
+-    ,d_ptr(new KTagPrivate(this))
++    : QPushButton(parent)
++    , d_ptr(new KTagPrivate(this))
+ {
+     Q_D(KTag);
+     setClosable(false);
+     d->changeTheme();
+-    connect(Parmscontroller::self(),&Parmscontroller::modeChanged,this,[=](bool flag){
++    connect(Parmscontroller::self(), &Parmscontroller::modeChanged, this, [=](bool flag) {
+         updateGeometry();
+     });
+ }
+@@ -70,7 +71,7 @@ void KTag::setClosable(bool flag)
+ {
+     Q_D(KTag);
+     d->m_isClosable = flag;
+-    if(flag)
++    if (flag)
+         setMinimumWidth(88);
+     d->updateDeleteBtnColor();
+     update();
+@@ -115,7 +116,7 @@ void KTag::setTranslucent(bool flag)
+ {
+     Q_D(KTag);
+     d->m_isTranslucent = flag;
+-    if(flag)
++    if (flag)
+         d->updateDeleteBtnColor();
+ }
+ 
+@@ -137,277 +138,230 @@ void KTag::paintEvent(QPaintEvent *event)
+     QStyleOptionButton option;
+     initStyleOption(&option);
+     QColor bkgColor;
+-//    QColor highColor = palette().highlight().color();
++    //    QColor highColor = palette().highlight().color();
+     QColor highColor = ThemeController::getPaletteColorFromDT("highlight");
+     QColor iconColor;
+     QColor fontColor;
+     QRect iconRect;
+     QRect textRect;
+-    if(!option.state.testFlag(QStyle::State_Enabled))
+-    {
+-//        bkgColor = palette().color(QPalette::Disabled,QPalette::Button);
+-        bkgColor = ThemeController::getPaletteColorFromDT("button",QPalette::Disabled);
+-//        iconColor = palette().color(QPalette::Disabled,QPalette::HighlightedText);
++    if (!option.state.testFlag(QStyle::State_Enabled)) {
++        //        bkgColor = palette().color(QPalette::Disabled,QPalette::Button);
++        bkgColor = ThemeController::getPaletteColorFromDT("button", QPalette::Disabled);
++        //        iconColor = palette().color(QPalette::Disabled,QPalette::HighlightedText);
+         iconColor = ThemeController::getPaletteColorFromDT("highlightedtext");
+-//        fontColor = palette().color(QPalette::Disabled,QPalette::HighlightedText);
++        //        fontColor = palette().color(QPalette::Disabled,QPalette::HighlightedText);
+         fontColor = ThemeController::getPaletteColorFromDT("highlightedtext");
+-    }
+-    else
+-    {
+-        if(d->m_isTranslucent || d->m_isBackgroundFlag)
+-        {
+-//            iconColor = palette().highlight().color();
++    } else {
++        if (d->m_isTranslucent || d->m_isBackgroundFlag) {
++            //            iconColor = palette().highlight().color();
+             iconColor = ThemeController::getPaletteColorFromDT("highlight");
+-//            fontColor = palette().highlight().color();
++            //            fontColor = palette().highlight().color();
+             fontColor = ThemeController::getPaletteColorFromDT("highlight");
+-        }
+-        else
+-        {
++        } else {
+             iconColor = Qt::white;
+             fontColor = Qt::white;
+         }
+ 
+-        if(!d->m_isBackgroundFlag)
+-        {
++        if (!d->m_isBackgroundFlag) {
+             bkgColor = highColor;
+-            if(option.state.testFlag(QStyle::State_MouseOver))
+-            {
+-                if(option.state.testFlag(QStyle::State_Sunken))
+-                {
+-                    if(d->m_isTranslucent)
++            if (option.state.testFlag(QStyle::State_MouseOver)) {
++                if (option.state.testFlag(QStyle::State_Sunken)) {
++                    if (d->m_isTranslucent)
+                         bkgColor.setAlphaF(0.45);
+                     else
+-//                        bkgColor = ThemeController::mixColor(bkgColor,option.palette.brightText().color(),0.2);
+-                        bkgColor = ThemeController::mixColor(bkgColor,ThemeController::getPaletteColorFromDT("brighttext"),0.2);
+-                }
+-                else
+-                {
+-                    if(d->m_isTranslucent)
++                        //                        bkgColor = ThemeController::mixColor(bkgColor,option.palette.brightText().color(),0.2);
++                        bkgColor = ThemeController::mixColor(bkgColor, ThemeController::getPaletteColorFromDT("brighttext"), 0.2);
++                } else {
++                    if (d->m_isTranslucent)
+                         bkgColor.setAlphaF(0.3);
+                     else
+-//                        bkgColor = ThemeController::mixColor(bkgColor,option.palette.brightText().color(),0.05);
+-                        bkgColor = ThemeController::mixColor(bkgColor,ThemeController::getPaletteColorFromDT("brighttext"),0.05);
++                        //                        bkgColor = ThemeController::mixColor(bkgColor,option.palette.brightText().color(),0.05);
++                        bkgColor = ThemeController::mixColor(bkgColor, ThemeController::getPaletteColorFromDT("brighttext"), 0.05);
+                 }
+-            }
+-            else
+-            {
+-                if(d->m_isTranslucent)
++            } else {
++                if (d->m_isTranslucent)
+                     bkgColor.setAlphaF(0.15);
+             }
+-        }
+-        else
+-        {
++        } else {
+             bkgColor = d->m_backgroundColor;
+         }
+     }
+-    if(closable())
+-    {
+-        QRect rect = option.rect.adjusted(8,0,-(d->m_pDeleteBtn->width()),0);
++    if (closable()) {
++        QRect rect = option.rect.adjusted(8, 0, -(d->m_pDeleteBtn->width()), 0);
+         int drawLength = option.iconSize.width() + 4 + fontMetrics().width((d->m_text));
+ 
+-        if(rect.width() > drawLength )
+-        {
+-            iconRect = QRect(rect.center().x() - drawLength/2,
+-                             rect.center().y() - option.iconSize.height()/2,
++        if (rect.width() > drawLength) {
++            iconRect = QRect(rect.center().x() - drawLength / 2,
++                             rect.center().y() - option.iconSize.height() / 2,
+                              option.iconSize.width(),
+                              option.iconSize.height());
+             textRect = QRect(iconRect.right() + 4,
+-                             rect.center().y() - fontMetrics().height()/2,
++                             rect.center().y() - fontMetrics().height() / 2,
+                              fontMetrics().width(d->m_text),
+                              fontMetrics().height());
+-        }
+-        else
+-        {
++        } else {
+             iconRect = QRect(rect.x(),
+-                             rect.center().y() - option.iconSize.height()/2,
++                             rect.center().y() - option.iconSize.height() / 2,
+                              option.iconSize.width(),
+                              option.iconSize.height());
+             textRect = QRect(iconRect.right() + 4,
+-                             rect.center().y() - fontMetrics().height()/2,
++                             rect.center().y() - fontMetrics().height() / 2,
+                              rect.width() - 4 - iconRect.width(),
+                              fontMetrics().height());
+         }
+-    }
+-    else
+-    {
+-        QRect rect = option.rect.adjusted(8,0,0,0);
++    } else {
++        QRect rect = option.rect.adjusted(8, 0, 0, 0);
+         int drawLength = option.iconSize.width() + 4 + fontMetrics().width((d->m_text));
+-        if(rect.width() > drawLength )
+-        {
+-            iconRect = QRect(rect.center().x() - drawLength/2,
+-                             rect.center().y() - option.iconSize.height()/2,
++        if (rect.width() > drawLength) {
++            iconRect = QRect(rect.center().x() - drawLength / 2,
++                             rect.center().y() - option.iconSize.height() / 2,
+                              option.iconSize.width(),
+                              option.iconSize.height());
+             textRect = QRect(iconRect.right() + 4,
+-                             rect.center().y() - fontMetrics().height()/2,
++                             rect.center().y() - fontMetrics().height() / 2,
+                              fontMetrics().width(d->m_text),
+                              fontMetrics().height());
+-        }
+-        else
+-        {
++        } else {
+             iconRect = QRect(rect.x(),
+-                             rect.center().y() - option.iconSize.height()/2,
++                             rect.center().y() - option.iconSize.height() / 2,
+                              option.iconSize.width(),
+                              option.iconSize.height());
+             textRect = QRect(iconRect.right() + 4,
+-                             rect.center().y() - fontMetrics().height()/2,
++                             rect.center().y() - fontMetrics().height() / 2,
+                              rect.width() - 4 - iconRect.width(),
+                              fontMetrics().height());
+         }
+     }
+     QPainter painter(this);
+     painter.setRenderHint(QPainter::Antialiasing);
+-    if(ThemeController::widgetTheme() == ClassicTheme)
+-    {
+-        if(painter.pen().width() == 1)
+-            painter.translate(0.5,0.5);
++    if (ThemeController::widgetTheme() == ClassicTheme) {
++        if (painter.pen().width() == 1)
++            painter.translate(0.5, 0.5);
+     }
+     QRect rect = this->rect();
+-    if(d->m_isClosable)
+-    {
++    if (d->m_isClosable) {
+         d->m_pDeleteBtn->show();
+-        d->m_pDeleteBtn->move(width()-d->m_pDeleteBtn->width(),(height()-d->m_pDeleteBtn->height())/2+2);
+-        rect.adjust(0,0,-16,0);
+-    }
+-    else
+-    {
++        d->m_pDeleteBtn->move(width() - d->m_pDeleteBtn->width(), (height() - d->m_pDeleteBtn->height()) / 2 + 2);
++        rect.adjust(0, 0, -16, 0);
++    } else {
+         d->m_pDeleteBtn->hide();
+     }
+-//    QColor color = palette().color(QPalette::Highlight);
++    //    QColor color = palette().color(QPalette::Highlight);
+     QColor color = ThemeController::getPaletteColorFromDT("highlight");
+-    switch (d->m_style)
+-    {
++    switch (d->m_style) {
+     case HighlightTag:
+ 
+-        if(ThemeController::widgetTheme() == ClassicTheme)
+-        {
+-            QColor backColor=color;
++        if (ThemeController::widgetTheme() == ClassicTheme) {
++            QColor backColor = color;
+             backColor.setAlpha(38);
+             painter.setBrush(backColor);
+             painter.setPen(color);
+-            painter.drawRoundedRect(this->rect(),0,0);
+-            painter.drawText(rect,Qt::AlignCenter,d->m_text);
+-        }
+-        else
+-        {
++            painter.drawRoundedRect(this->rect(), 0, 0);
++            painter.drawText(rect, Qt::AlignCenter, d->m_text);
++        } else {
+             painter.setBrush(color);
+             painter.setPen(Qt::PenStyle::NoPen);
+             int radius = ThemeController::getRadiusFromDT("kradius-normal");
+-            if(radius == -1)
++            if (radius == -1)
+                 radius = 6;
+-            painter.drawRoundedRect(this->rect(),radius,radius);
++            painter.drawRoundedRect(this->rect(), radius, radius);
+             painter.setPen(QColor("#FFFFFF"));
+-            painter.drawText(rect,Qt::AlignCenter,d->m_text);
++            painter.drawText(rect, Qt::AlignCenter, d->m_text);
+         }
+         break;
+     case BoderTag:
+         painter.setBrush(QColor(Qt::transparent));
+         painter.setPen(color);
+-        if(ThemeController::widgetTheme() == ClassicTheme)
+-        {
+-            painter.drawRoundedRect(this->rect(),0,0);
+-        }
+-        else
+-        {
++        if (ThemeController::widgetTheme() == ClassicTheme) {
++            painter.drawRoundedRect(this->rect(), 0, 0);
++        } else {
+             int radius = ThemeController::getRadiusFromDT("kradius-normal");
+-            if(radius == -1)
++            if (radius == -1)
+                 radius = 6;
+-            painter.drawRoundedRect(this->rect(),radius,radius);
++            painter.drawRoundedRect(this->rect(), radius, radius);
+         }
+-        painter.drawText(rect,Qt::AlignCenter,d->m_text);
++        painter.drawText(rect, Qt::AlignCenter, d->m_text);
+         break;
+-    case BaseBoderTag:
+-        {
+-            QColor backColor=color;
+-            backColor.setAlpha(38);
+-            painter.setBrush(backColor);
+-            painter.setPen(color);
+-            if(ThemeController::widgetTheme() == ClassicTheme)
+-            {
+-                painter.drawRoundedRect(this->rect(),0,0);
+-            }
+-            else
+-            {
+-                int radius = ThemeController::getRadiusFromDT("kradius-normal");
+-                if(radius == -1)
+-                    radius = 6;
+-                painter.drawRoundedRect(this->rect(),radius,radius);
+-            }
+-            painter.drawText(rect,Qt::AlignCenter,d->m_text);
+-            break;
++    case BaseBoderTag: {
++        QColor backColor = color;
++        backColor.setAlpha(38);
++        painter.setBrush(backColor);
++        painter.setPen(color);
++        if (ThemeController::widgetTheme() == ClassicTheme) {
++            painter.drawRoundedRect(this->rect(), 0, 0);
++        } else {
++            int radius = ThemeController::getRadiusFromDT("kradius-normal");
++            if (radius == -1)
++                radius = 6;
++            painter.drawRoundedRect(this->rect(), radius, radius);
+         }
++        painter.drawText(rect, Qt::AlignCenter, d->m_text);
++        break;
++    }
+     case GrayTag:
+ 
+-        if(ThemeController::widgetTheme() == ClassicTheme)
+-        {
++        if (ThemeController::widgetTheme() == ClassicTheme) {
+             painter.setBrush(QColor(Qt::transparent));
+             painter.setPen(color);
+-            painter.drawRoundedRect(this->rect(),0,0);
+-            painter.drawText(rect,Qt::AlignCenter,d->m_text);
+-        }
+-        else
+-        {
++            painter.drawRoundedRect(this->rect(), 0, 0);
++            painter.drawText(rect, Qt::AlignCenter, d->m_text);
++        } else {
+             painter.setPen(Qt::PenStyle::NoPen);
+-//            painter.setBrush(this->palette().color(QPalette::Disabled,QPalette::Highlight));
++            //            painter.setBrush(this->palette().color(QPalette::Disabled,QPalette::Highlight));
+             painter.setBrush(ThemeController::getPaletteColorFromDT("highlight"));
+             int radius = ThemeController::getRadiusFromDT("kradius-normal");
+-            if(radius == -1)
++            if (radius == -1)
+                 radius = 6;
+-            painter.drawRoundedRect(this->rect(),radius,radius);
+-//            painter.setPen(this->palette().color(QPalette::Text));
++            painter.drawRoundedRect(this->rect(), radius, radius);
++            //            painter.setPen(this->palette().color(QPalette::Text));
+             painter.setPen(ThemeController::getPaletteColorFromDT("text"));
+-            painter.drawText(rect,Qt::AlignCenter,d->m_text);
++            painter.drawText(rect, Qt::AlignCenter, d->m_text);
+         }
+         break;
+-    case IconTag:
+-    {
++    case IconTag: {
+         QPixmap pixmap = option.icon.pixmap(option.iconSize);
+         painter.setPen(Qt::NoPen);
+         painter.setBrush(bkgColor);
+         int radius = ThemeController::getRadiusFromDT("kradius-normal");
+-        if(radius == -1)
++        if (radius == -1)
+             radius = 6;
+-        painter.drawRoundedRect(this->rect(),radius,radius);
+-        painter.drawPixmap(iconRect,ThemeController::drawColoredPixmap(pixmap,iconColor));
++        painter.drawRoundedRect(this->rect(), radius, radius);
++        painter.drawPixmap(iconRect, ThemeController::drawColoredPixmap(pixmap, iconColor));
+         painter.setPen(fontColor);
+-        if(fontMetrics().width(d->m_text) > textRect.width())
+-        {
+-            QString str= fontMetrics().elidedText(d->m_text,Qt::ElideRight,textRect.width());
+-            painter.drawText(textRect,str);
++        if (fontMetrics().width(d->m_text) > textRect.width()) {
++            QString str = fontMetrics().elidedText(d->m_text, Qt::ElideRight, textRect.width());
++            painter.drawText(textRect, str);
+             setToolTip(d->m_text);
+-        }
+-        else
+-        {
++        } else {
+             setToolTip("");
+-            painter.drawText(textRect,d->m_text);
++            painter.drawText(textRect, d->m_text);
+         }
+         break;
+     }
+     default:
+         break;
+-
+     }
+ }
+ 
+ QSize KTag::sizeHint() const
+ {
+-    auto size= QPushButton::sizeHint();
++    auto size = QPushButton::sizeHint();
+     size.setHeight(Parmscontroller::parm(Parmscontroller::Parm::PM_TagHeight));
+     return size;
+ }
+ 
+ KTagPrivate::KTagPrivate(KTag *parent)
+-    :q_ptr(parent),
+-      m_isClosable(false),
+-      m_text(""),
+-      m_style(HighlightTag),
+-      m_isBackgroundFlag(false),
+-      m_isTranslucent(false)
++    : q_ptr(parent)
++    , m_isClosable(false)
++    , m_text("")
++    , m_style(HighlightTag)
++    , m_isBackgroundFlag(false)
++    , m_isTranslucent(false)
+ {
+     Q_Q(KTag);
+     m_pDeleteBtn = new KToolButton(q);
+-    m_pDeleteBtn->setIconSize(QSize(16,16));
+-    connect(m_pDeleteBtn,&KToolButton::clicked,q,&KTag::close);
++    m_pDeleteBtn->setIconSize(QSize(16, 16));
++    connect(m_pDeleteBtn, &KToolButton::clicked, q, &KTag::close);
+     m_pDeleteBtn->hide();
+     QPalette btnPalette;
+     btnPalette.setBrush(QPalette::Active, QPalette::Button, Qt::transparent);
+@@ -421,7 +375,9 @@ KTagPrivate::KTagPrivate(KTag *parent)
+     m_pDeleteBtn->setPalette(btnPalette);
+     m_pDeleteBtn->setFocusPolicy(Qt::NoFocus);
+     m_pDeleteBtn->setCursor(Qt::ArrowCursor);
+-    connect(m_gsetting,&QGSettings::changed,this,[=](){changeTheme();});
++    connect(m_gsetting, &QGSettings::changed, this, [=]() {
++        changeTheme();
++    });
+ }
+ 
+ void KTagPrivate::changeTheme()
+@@ -438,28 +394,27 @@ void KTagPrivate::updateDeleteBtnColor()
+     QIcon icon = QIcon::fromTheme("application-exit-symbolic");
+     QPalette palette = q->palette();
+     QSize size(m_pDeleteBtn->iconSize());
+-    switch (m_style)
+-    {
++    switch (m_style) {
+     case HighlightTag:
+-        m_pDeleteBtn->setIcon(drawColoredPixmap(icon.pixmap(size),QColor("#FFFFFF")));
++        m_pDeleteBtn->setIcon(drawColoredPixmap(icon.pixmap(size), QColor("#FFFFFF")));
+         break;
+     case BoderTag:
+-//        m_pDeleteBtn->setIcon(drawColoredPixmap(icon.pixmap(size),palette.color(QPalette::Text)));
+-        m_pDeleteBtn->setIcon(drawColoredPixmap(icon.pixmap(size),ThemeController::getPaletteColorFromDT("text")));
++        //        m_pDeleteBtn->setIcon(drawColoredPixmap(icon.pixmap(size),palette.color(QPalette::Text)));
++        m_pDeleteBtn->setIcon(drawColoredPixmap(icon.pixmap(size), ThemeController::getPaletteColorFromDT("text")));
+         break;
+     case BaseBoderTag:
+-//        m_pDeleteBtn->setIcon(drawColoredPixmap(icon.pixmap(size),palette.color(QPalette::Text)));
+-        m_pDeleteBtn->setIcon(drawColoredPixmap(icon.pixmap(size),ThemeController::getPaletteColorFromDT("text")));
++        //        m_pDeleteBtn->setIcon(drawColoredPixmap(icon.pixmap(size),palette.color(QPalette::Text)));
++        m_pDeleteBtn->setIcon(drawColoredPixmap(icon.pixmap(size), ThemeController::getPaletteColorFromDT("text")));
+         break;
+     case GrayTag:
+-//        m_pDeleteBtn->setIcon(drawColoredPixmap(icon.pixmap(size),palette.color(QPalette::Text)));
+-        m_pDeleteBtn->setIcon(drawColoredPixmap(icon.pixmap(size),ThemeController::getPaletteColorFromDT("text")));
++        //        m_pDeleteBtn->setIcon(drawColoredPixmap(icon.pixmap(size),palette.color(QPalette::Text)));
++        m_pDeleteBtn->setIcon(drawColoredPixmap(icon.pixmap(size), ThemeController::getPaletteColorFromDT("text")));
+         break;
+     case IconTag:
+-        if(m_isTranslucent || m_isBackgroundFlag)
+-            m_pDeleteBtn->setIconColor(true,q->palette().highlight().color());//m_backgroundColor
++        if (m_isTranslucent || m_isBackgroundFlag)
++            m_pDeleteBtn->setIconColor(true, q->palette().highlight().color()); // m_backgroundColor
+         else
+-            m_pDeleteBtn->setIconColor(true,Qt::white);
++            m_pDeleteBtn->setIconColor(true, Qt::white);
+         break;
+     default:
+         break;
+diff --git a/kysdk-qtwidgets/src/ktag.h b/kysdk-qtwidgets/src/ktag.h
+index 006d42e..139eb32 100644
+--- a/kysdk-qtwidgets/src/ktag.h
++++ b/kysdk-qtwidgets/src/ktag.h
+@@ -36,8 +36,7 @@ class KTagPrivate;
+ /**
+  * @brief 支持四种风格的tag
+  */
+-enum TagStyle
+-{
++enum TagStyle {
+     HighlightTag,
+     BoderTag,
+     BaseBoderTag,
+@@ -66,7 +65,7 @@ public:
+     /**
+      * @brief 设置文本
+      */
+-    void setText(const QString&);
++    void setText(const QString &);
+     /**
+      * @brief 获取当前文本
+      * @return QString
+@@ -83,7 +82,6 @@ public:
+      */
+     TagStyle tagStyle();
+ 
+-
+     /**
+      * @brief 设置背景颜色
+      * @param flag
+@@ -106,14 +104,13 @@ public:
+     bool translucent();
+ 
+ protected:
+-    void paintEvent(QPaintEvent* event);
++    void paintEvent(QPaintEvent *event);
+     QSize sizeHint() const override;
+ 
+ private:
+     Q_DECLARE_PRIVATE(KTag)
+-    KTagPrivate * const d_ptr;
++    KTagPrivate *const d_ptr;
+ };
+ }
+ 
+-
+ #endif // KTAG_H
+diff --git a/kysdk-qtwidgets/src/ktextedit.cpp b/kysdk-qtwidgets/src/ktextedit.cpp
+index 83bf078..c171f39 100644
+--- a/kysdk-qtwidgets/src/ktextedit.cpp
++++ b/kysdk-qtwidgets/src/ktextedit.cpp
+@@ -21,42 +21,43 @@
+  */
+ 
+ #include "ktextedit.h"
+-#include "themeController.h"
+ #include "ktag.h"
+-#include <QPainter>
+-#include <QTextCursor>
++#include "themeController.h"
++#include <QDebug>
++#include <QHBoxLayout>
+ #include <QPaintEvent>
++#include <QPainter>
++#include <QPainterPath>
+ #include <QProxyStyle>
++#include <QTextCursor>
+ #include <QTimer>
+-#include <QPainterPath>
+-#include <QHBoxLayout>
+-#include <QDebug>
+ 
+-namespace kdk {
++namespace kdk
++{
+ 
+-class KTextEditPrivate :public QObject, public ThemeController
++class KTextEditPrivate : public QObject, public ThemeController
+ {
+     Q_OBJECT
+     Q_DECLARE_PUBLIC(KTextEdit)
+ public:
+-    KTextEditPrivate(KTextEdit*parent);
++    KTextEditPrivate(KTextEdit *parent);
+ 
+ protected:
+     void changeTheme();
++
+ private:
+     KTextEdit *q_ptr;
+-    KLabel * m_pLabel;
++    KLabel *m_pLabel;
+     QTextBlockFormat m_blockFormat;
+     QTextCursor *m_pTextCursor;
+-
+ };
+ 
+-KTextEdit::KTextEdit(QWidget *parent):
+-    QTextEdit(parent),
+-    d_ptr(new KTextEditPrivate(this))
++KTextEdit::KTextEdit(QWidget *parent)
++    : QTextEdit(parent)
++    , d_ptr(new KTextEditPrivate(this))
+ {
+     Q_D(KTextEdit);
+-    viewport()->setContentsMargins(0,0,0,0);
++    viewport()->setContentsMargins(0, 0, 0, 0);
+     setFrameShape(QFrame::NoFrame);
+ }
+ 
+@@ -88,17 +89,14 @@ void KTextEdit::setReadOnly(bool ro)
+ {
+     Q_D(KTextEdit);
+     QTextEdit::setReadOnly(ro);
+-    if(isReadOnly())
+-    {
++    if (isReadOnly()) {
+         QPalette pale = palette();
+-//        pale.setColor(QPalette::Base,pale.highlight().color());
+-        pale.setColor(QPalette::Base,ThemeController::getPaletteColorFromDT("highlight"));
+-        pale.setColor(QPalette::Text,Qt::white);
++        //        pale.setColor(QPalette::Base,pale.highlight().color());
++        pale.setColor(QPalette::Base, ThemeController::getPaletteColorFromDT("highlight"));
++        pale.setColor(QPalette::Text, Qt::white);
+         setPalette(pale);
+-        d->m_pLabel->setBackgroundColor(true,Qt::white);
+-    }
+-    else
+-    {
++        d->m_pLabel->setBackgroundColor(true, Qt::white);
++    } else {
+         QPalette pale;
+         setPalette(pale);
+         d->m_pLabel->setBackgroundColor(false);
+@@ -110,14 +108,11 @@ void KTextEdit::paintEvent(QPaintEvent *event)
+     Q_D(KTextEdit);
+     QTextEdit::paintEvent(event);
+ 
+-    if(d->m_pLabel->isVisible())
+-    {
++    if (d->m_pLabel->isVisible()) {
+         d->m_blockFormat.setTextIndent(d->m_pLabel->width() + 4);
+         d->m_blockFormat.setLineHeight(3, QTextBlockFormat::LineDistanceHeight);
+         d->m_pTextCursor->setBlockFormat(d->m_blockFormat);
+-    }
+-    else
+-    {
++    } else {
+         d->m_blockFormat.setTextIndent(0);
+         d->m_blockFormat.setLineHeight(3, QTextBlockFormat::LineDistanceHeight);
+         d->m_pTextCursor->setBlockFormat(d->m_blockFormat);
+@@ -125,26 +120,25 @@ void KTextEdit::paintEvent(QPaintEvent *event)
+ }
+ 
+ KTextEditPrivate::KTextEditPrivate(KTextEdit *parent)
+-    :q_ptr(parent)
++    : q_ptr(parent)
+ {
+     Q_Q(KTextEdit);
+     m_pLabel = new KLabel(q);
+     m_pLabel->setAlignment(Qt::AlignCenter);
+     m_pLabel->setFixedHeight(30);
+     m_pLabel->setLabelType(KLabelType::DataType);
+-    //调整位置使其不遮盖边框
+-    m_pLabel->move(2,2);
++    // 调整位置使其不遮盖边框
++    m_pLabel->move(2, 2);
+     m_pLabel->setVisible(false);
+     m_pLabel->setDataHightColor(true);
+     m_pLabel->setFixedWidth(70);
+     m_pTextCursor = new QTextCursor(q->textCursor());
+-    connect(m_gsetting,&QGSettings::changed,q,[=]{
++    connect(m_gsetting, &QGSettings::changed, q, [=] {
+         changeTheme();
+-        m_pLabel->setFixedWidth(q->fontMetrics().width(m_pLabel->text()) +m_pLabel->pixmap()->width() + 12);
+-//        if(q->fontMetrics().height() > 30)
+-//        m_pLabel->setFixedHeight(q->fontMetrics().height() + 4);
++        m_pLabel->setFixedWidth(q->fontMetrics().width(m_pLabel->text()) + m_pLabel->pixmap()->width() + 12);
++        //        if(q->fontMetrics().height() > 30)
++        //        m_pLabel->setFixedHeight(q->fontMetrics().height() + 4);
+     });
+-
+ }
+ 
+ void KTextEditPrivate::changeTheme()
+@@ -155,6 +149,5 @@ void KTextEditPrivate::changeTheme()
+ 
+ }
+ 
+-
+ #include "ktextedit.moc"
+ #include "moc_ktextedit.cpp"
+diff --git a/kysdk-qtwidgets/src/ktextedit.h b/kysdk-qtwidgets/src/ktextedit.h
+index 08ab3ad..4ea63f4 100644
+--- a/kysdk-qtwidgets/src/ktextedit.h
++++ b/kysdk-qtwidgets/src/ktextedit.h
+@@ -23,13 +23,14 @@
+ #ifndef KTEXTEDIT_H
+ #define KTEXTEDIT_H
+ 
+-#include <QTextEdit>
++#include "gui_g.h"
++#include "klabel.h"
+ #include "ktag.h"
+ #include <QLineEdit>
+-#include "klabel.h"
+-#include "gui_g.h"
++#include <QTextEdit>
+ 
+-namespace kdk {
++namespace kdk
++{
+ 
+ /**
+  * @defgroup @DialogBoxModule
+@@ -41,7 +42,7 @@ class KTextEditPrivate;
+  * @brief 继承QTextEdit
+  * @since 2.4
+  */
+-class GUI_EXPORT KTextEdit :public QTextEdit
++class GUI_EXPORT KTextEdit : public QTextEdit
+ {
+     Q_OBJECT
+ public:
+@@ -78,12 +79,11 @@ public:
+     void setReadOnly(bool ro);
+ 
+ protected:
+-    void paintEvent(QPaintEvent* event);
++    void paintEvent(QPaintEvent *event);
+ 
+ private:
+     Q_DECLARE_PRIVATE(KTextEdit)
+-    KTextEditPrivate* const d_ptr;
+-
++    KTextEditPrivate *const d_ptr;
+ };
+ 
+ }
+diff --git a/kysdk-qtwidgets/src/ktexteditor.cpp b/kysdk-qtwidgets/src/ktexteditor.cpp
+index 101d743..a47461e 100644
+--- a/kysdk-qtwidgets/src/ktexteditor.cpp
++++ b/kysdk-qtwidgets/src/ktexteditor.cpp
+@@ -1,35 +1,36 @@
+ #include "ktexteditor.h"
+ #include "themeController.h"
+ 
+-#include <QScrollArea>
+ #include <QBoxLayout>
+-#include <QTextEdit>
++#include <QDebug>
++#include <QEvent>
+ #include <QPainter>
++#include <QScrollArea>
+ #include <QScrollBar>
+-#include <QEvent>
+-#include <QDebug>
++#include <QTextEdit>
+ 
+-namespace kdk {
++namespace kdk
++{
+ 
+ class KTextEditorPrivate : public QObject, public ThemeController
+ {
+     Q_OBJECT
+     Q_DECLARE_PUBLIC(KTextEditor)
+ public:
+-    KTextEditorPrivate(KTextEditor* parent );
++    KTextEditorPrivate(KTextEditor *parent);
+     virtual ~KTextEditorPrivate();
+ 
+ private:
+     KTextEditor *q_ptr;
+-    QVBoxLayout* m_pVBoxLayout;
+-    QScrollArea* m_pScrollArea;
+-    QTextEdit* m_pTextEdit;
++    QVBoxLayout *m_pVBoxLayout;
++    QScrollArea *m_pScrollArea;
++    QTextEdit *m_pTextEdit;
+     bool m_focus;
+ };
+ 
+ KTextEditor::KTextEditor(QWidget *parent)
+-    :QWidget(parent)
+-    ,d_ptr(new KTextEditorPrivate(this))
++    : QWidget(parent)
++    , d_ptr(new KTextEditorPrivate(this))
+ {
+     Q_D(KTextEditor);
+     this->setFocusPolicy(Qt::ClickFocus);
+@@ -49,28 +50,25 @@ void KTextEditor::paintEvent(QPaintEvent *event)
+     Q_D(KTextEditor);
+     QPainter painter(this);
+     painter.setRenderHint(QPainter::Antialiasing);
+-//    painter.fillRect(this->rect(), palette().window().color());
+-    painter.fillRect(this->rect(),ThemeController::getPaletteColorFromDT("window"));
++    //    painter.fillRect(this->rect(), palette().window().color());
++    painter.fillRect(this->rect(), ThemeController::getPaletteColorFromDT("window"));
+     QPen pen;
+     pen.setWidth(2);
+-    if(d->m_focus)
+-    {
+-//        pen.setColor(palette().highlight().color());
++    if (d->m_focus) {
++        //        pen.setColor(palette().highlight().color());
+         pen.setColor(ThemeController::getPaletteColorFromDT("highlight"));
+         painter.setPen(pen);
+-    }
+-    else
+-    {
+-//        pen.setColor(palette().placeholderText().color());
++    } else {
++        //        pen.setColor(palette().placeholderText().color());
+         pen.setColor(ThemeController::getPaletteColorFromDT("placeholdertext"));
+         painter.setPen(pen);
+     }
+ 
+-//    painter.setBrush(palette().base().color());
++    //    painter.setBrush(palette().base().color());
+     painter.setBrush(ThemeController::getPaletteColorFromDT("base"));
+     QRect rect = this->rect().adjusted(1, 1, -1, -1);
+     int radius = ThemeController::getRadiusFromDT("kradius-menu");
+-    if(radius == -1)
++    if (radius == -1)
+         radius = 8;
+     painter.drawRoundedRect(rect, radius, radius);
+ }
+@@ -78,10 +76,8 @@ void KTextEditor::paintEvent(QPaintEvent *event)
+ bool KTextEditor::eventFilter(QObject *watched, QEvent *event)
+ {
+     Q_D(KTextEditor);
+-    if(watched == this)
+-    {
+-        switch (event->type())
+-        {
++    if (watched == this) {
++        switch (event->type()) {
+         case QEvent::FocusIn:
+             d->m_focus = true;
+             update();
+@@ -93,12 +89,9 @@ bool KTextEditor::eventFilter(QObject *watched, QEvent *event)
+         default:
+             break;
+         }
+-        return QWidget::eventFilter(watched,event);
+-    }
+-    else
+-    {
+-        switch (event->type())
+-        {
++        return QWidget::eventFilter(watched, event);
++    } else {
++        switch (event->type()) {
+         case QEvent::FocusIn:
+             d->m_focus = true;
+             update();
+@@ -115,7 +108,7 @@ bool KTextEditor::eventFilter(QObject *watched, QEvent *event)
+ }
+ 
+ KTextEditorPrivate::KTextEditorPrivate(KTextEditor *parent)
+-    :q_ptr(parent)
++    : q_ptr(parent)
+ {
+     Q_Q(KTextEditor);
+ 
+@@ -124,7 +117,7 @@ KTextEditorPrivate::KTextEditorPrivate(KTextEditor *parent)
+     m_pTextEdit = new QTextEdit();
+     m_focus = false;
+ 
+-    q->setContentsMargins(8,12,0,13);//上下左右边距为20 ,因控件自带边距调整
++    q->setContentsMargins(8, 12, 0, 13); // 上下左右边距为20 ,因控件自带边距调整
+     m_pScrollArea->setWidget(m_pTextEdit);
+     m_pScrollArea->horizontalScrollBar()->setVisible(false);
+     m_pScrollArea->setWidgetResizable(true);
+@@ -133,7 +126,6 @@ KTextEditorPrivate::KTextEditorPrivate(KTextEditor *parent)
+     m_pTextEdit->setFrameShape(QFrame::NoFrame);
+     m_pScrollArea->setFrameShape(QFrame::NoFrame);
+ 
+-
+     m_pVBoxLayout->addWidget(m_pScrollArea);
+ 
+     q->setLayout(m_pVBoxLayout);
+@@ -141,7 +133,6 @@ KTextEditorPrivate::KTextEditorPrivate(KTextEditor *parent)
+ 
+ KTextEditorPrivate::~KTextEditorPrivate()
+ {
+-
+ }
+ 
+ }
+diff --git a/kysdk-qtwidgets/src/ktexteditor.h b/kysdk-qtwidgets/src/ktexteditor.h
+index dc15a15..1d05628 100644
+--- a/kysdk-qtwidgets/src/ktexteditor.h
++++ b/kysdk-qtwidgets/src/ktexteditor.h
+@@ -1,33 +1,30 @@
+ #ifndef KTEXTEDITOR_H
+ #define KTEXTEDITOR_H
+ 
+-#include <QWidget>
+-#include <QTextEdit>
+ #include "gui_g.h"
++#include <QTextEdit>
++#include <QWidget>
+ 
+-namespace kdk {
++namespace kdk
++{
+ 
+ class KTextEditorPrivate;
+ 
+-class GUI_EXPORT KTextEditor :public QWidget
++class GUI_EXPORT KTextEditor : public QWidget
+ {
+     Q_OBJECT
+ public:
+-    KTextEditor(QWidget* parent = nullptr);
+-
+-    QTextEdit* textEdit();
++    KTextEditor(QWidget *parent = nullptr);
+ 
++    QTextEdit *textEdit();
+ 
+ protected:
+-    void paintEvent(QPaintEvent* event);
++    void paintEvent(QPaintEvent *event);
+     bool eventFilter(QObject *watched, QEvent *event);
+ 
+ private:
+     Q_DECLARE_PRIVATE(KTextEditor)
+-    KTextEditorPrivate* const d_ptr;
+-
++    KTextEditorPrivate *const d_ptr;
+ };
+ }
+ #endif // KTEXTEDITOR_H
+-
+-
+diff --git a/kysdk-qtwidgets/src/ktitlewindow.cpp b/kysdk-qtwidgets/src/ktitlewindow.cpp
+index ca7bd6d..1a66ea9 100644
+--- a/kysdk-qtwidgets/src/ktitlewindow.cpp
++++ b/kysdk-qtwidgets/src/ktitlewindow.cpp
+@@ -22,20 +22,21 @@
+ 
+ #include "ktitlewindow.h"
+ #include "themeController.h"
+-#include <QPushButton>
++#include "ukuistylehelper/ukui-decoration-manager.h"
++#include "ukuistylehelper/ukui-shell-manager.h"
++#include "xatom-helper.h"
+ #include <QBoxLayout>
+-#include <QPainterPath>
+-#include <QPainter>
+-#include <QEvent>
+ #include <QDebug>
+-#include "xatom-helper.h"
++#include <QEvent>
+ #include <QGuiApplication>
+-#include "ukuistylehelper/ukui-decoration-manager.h"
+-#include "ukuistylehelper/ukui-shell-manager.h"
++#include <QPainter>
++#include <QPainterPath>
++#include <QPushButton>
+ 
+-namespace kdk {
++namespace kdk
++{
+ 
+-class Q_DECL_HIDDEN KTitleWindowPrivate :public QObject,public ThemeController
++class Q_DECL_HIDDEN KTitleWindowPrivate : public QObject, public ThemeController
+ {
+     Q_OBJECT
+     Q_DECLARE_PUBLIC(KTitleWindow)
+@@ -60,18 +61,18 @@ private:
+ };
+ 
+ KTitleWindow::KTitleWindow(QWidget *parent)
+-    :QWidget(parent)
+-    ,d_ptr(new KTitleWindowPrivate(this))
++    : QWidget(parent)
++    , d_ptr(new KTitleWindowPrivate(this))
+ {
+     Q_D(KTitleWindow);
+     installEventFilter(this);
+     MotifWmHints hints;
+-    hints.flags = MWM_HINTS_FUNCTIONS|MWM_HINTS_DECORATIONS;
++    hints.flags = MWM_HINTS_FUNCTIONS | MWM_HINTS_DECORATIONS;
+     hints.functions = MWM_FUNC_ALL;
+     hints.decorations = MWM_DECOR_BORDER;
+     XAtomHelper::getInstance()->setWindowMotifHint(this->winId(), hints);
+ 
+-    setMinimumSize(390,364);
++    setMinimumSize(390, 364);
+ }
+ 
+ KPushButton *KTitleWindow::addButton()
+@@ -123,49 +124,44 @@ void KTitleWindow::paintEvent(QPaintEvent *event)
+     painter.setRenderHint(QPainter::TextAntialiasing);
+     painter.setRenderHint(QPainter::SmoothPixmapTransform);
+     painter.setPen(Qt::NoPen);
+-//    painter.setBrush(palette().base().color());
++    //    painter.setBrush(palette().base().color());
+     painter.setBrush(ThemeController::getPaletteColorFromDT("base"));
+     int radius = ThemeController::getRadiusFromDT("kradius-window");
+-    if(radius == -1)
++    if (radius == -1)
+         radius = 12;
+-    painter.drawRoundedRect(this->rect(),radius,radius);
++    painter.drawRoundedRect(this->rect(), radius, radius);
+ 
+     d->m_pAddBtn->setIconColor(d->m_titleColor);
+-    d->m_pColorBtn->setIcon(ThemeController::drawColoredPixmap(d->m_pColorBtn->icon().pixmap(24,24),Qt::white));
+-    d->m_pMenuBtn->setIcon(ThemeController::drawColoredPixmap(d->m_pMenuBtn->icon().pixmap(24,24),Qt::white));
+-    d->m_pCloseBtn->setIcon(ThemeController::drawColoredPixmap(d->m_pCloseBtn->icon().pixmap(24,24),Qt::white));
++    d->m_pColorBtn->setIcon(ThemeController::drawColoredPixmap(d->m_pColorBtn->icon().pixmap(24, 24), Qt::white));
++    d->m_pMenuBtn->setIcon(ThemeController::drawColoredPixmap(d->m_pMenuBtn->icon().pixmap(24, 24), Qt::white));
++    d->m_pCloseBtn->setIcon(ThemeController::drawColoredPixmap(d->m_pCloseBtn->icon().pixmap(24, 24), Qt::white));
+ 
+     QPainterPath path1;
+-    QRect rect = this->rect().adjusted(0,0,1,1);
+-    if(isActiveWindow())
+-    {
+-        if(!d->m_pTitleWidget->isVisible())
+-        {
++    QRect rect = this->rect().adjusted(0, 0, 1, 1);
++    if (isActiveWindow()) {
++        if (!d->m_pTitleWidget->isVisible()) {
+             d->m_pTitleWidget->show();
+-            d->m_pVLayout->setContentsMargins(8,40,8,0);
++            d->m_pVLayout->setContentsMargins(8, 40, 8, 0);
+         }
+-        path1.lineTo(rect.topLeft() + QPoint(12 , 0));
+-        path1.lineTo(rect.topRight() - QPoint(12 , 0));
+-        path1.quadTo(rect.topRight() , rect.topRight() + QPoint(0 , 12));
+-        path1.lineTo(rect.topRight() + QPoint(0 , 40));
+-        path1.lineTo(rect.topLeft() + QPoint(0 , 40));
+-        path1.lineTo(rect.topLeft() + QPoint(0 , 12));
+-        path1.quadTo(rect.topLeft() , rect.topLeft() + QPoint(12 , 0));
+-    }
+-    else
+-    {
+-        if(d->m_pTitleWidget->isVisible())
+-        {
++        path1.lineTo(rect.topLeft() + QPoint(12, 0));
++        path1.lineTo(rect.topRight() - QPoint(12, 0));
++        path1.quadTo(rect.topRight(), rect.topRight() + QPoint(0, 12));
++        path1.lineTo(rect.topRight() + QPoint(0, 40));
++        path1.lineTo(rect.topLeft() + QPoint(0, 40));
++        path1.lineTo(rect.topLeft() + QPoint(0, 12));
++        path1.quadTo(rect.topLeft(), rect.topLeft() + QPoint(12, 0));
++    } else {
++        if (d->m_pTitleWidget->isVisible()) {
+             d->m_pTitleWidget->hide();
+-            d->m_pVLayout->setContentsMargins(8,12,8,0);
++            d->m_pVLayout->setContentsMargins(8, 12, 8, 0);
+         }
+-        path1.lineTo(rect.topLeft() + QPoint(12 , 0));
+-        path1.lineTo(rect.topRight() - QPoint(12 , 0));
+-        path1.quadTo(rect.topRight() , rect.topRight() + QPoint(0 , 12));
+-        path1.lineTo(rect.topRight() + QPoint(0 , 12));
+-        path1.lineTo(rect.topLeft() + QPoint(0 , 12));
+-        path1.lineTo(rect.topLeft() + QPoint(0 , 12));
+-        path1.quadTo(rect.topLeft() , rect.topLeft() + QPoint(12 , 0));
++        path1.lineTo(rect.topLeft() + QPoint(12, 0));
++        path1.lineTo(rect.topRight() - QPoint(12, 0));
++        path1.quadTo(rect.topRight(), rect.topRight() + QPoint(0, 12));
++        path1.lineTo(rect.topRight() + QPoint(0, 12));
++        path1.lineTo(rect.topLeft() + QPoint(0, 12));
++        path1.lineTo(rect.topLeft() + QPoint(0, 12));
++        path1.quadTo(rect.topLeft(), rect.topLeft() + QPoint(12, 0));
+     }
+     painter.setBrush(d->m_titleColor);
+     painter.drawPath(path1);
+@@ -175,61 +171,59 @@ bool KTitleWindow::eventFilter(QObject *watched, QEvent *event)
+ {
+     Q_D(KTitleWindow);
+     QString platform = QGuiApplication::platformName();
+-    if(platform.startsWith(QLatin1String("wayland"),Qt::CaseInsensitive))
+-    {
+-        if((event->type() == QEvent::PlatformSurface || event->type() == QEvent::Show || event->type() == QEvent::UpdateRequest))
+-        {
+-            #ifdef USE_UKUI_PROTOCOL
+-            if(UkuiShellManager::getInstance()->ukuishellReady())
++    if (platform.startsWith(QLatin1String("wayland"), Qt::CaseInsensitive)) {
++        if ((event->type() == QEvent::PlatformSurface || event->type() == QEvent::Show || event->type() == QEvent::UpdateRequest)) {
++#ifdef USE_UKUI_PROTOCOL
++            if (UkuiShellManager::getInstance()->ukuishellReady())
+                 UkuiShellManager::getInstance()->removeHeaderBar(this->windowHandle());
+             else
+                 UKUIDecorationManager::getInstance()->removeHeaderBar(this->windowHandle());
+-            #else
+-                UKUIDecorationManager::getInstance()->removeHeaderBar(this->windowHandle());
+-            #endif
++#else
++            UKUIDecorationManager::getInstance()->removeHeaderBar(this->windowHandle());
++#endif
+         }
+     }
+-    return QWidget::eventFilter(watched,event);
++    return QWidget::eventFilter(watched, event);
+ }
+ 
+ KTitleWindowPrivate::KTitleWindowPrivate(KTitleWindow *parent)
+-    :q_ptr(parent)
++    : q_ptr(parent)
+ {
+     Q_Q(KTitleWindow);
+-//    m_titleColor = q->palette().highlight().color();
++    //    m_titleColor = q->palette().highlight().color();
+     m_titleColor = ThemeController::getPaletteColorFromDT("highlight");
+     m_pTitleWidget = new QWidget(q);
+-    m_pTitleWidget->setAttribute(Qt::WA_TranslucentBackground,true);
+-    m_pTitleWidget->setContentsMargins(0,0,0,0);
++    m_pTitleWidget->setAttribute(Qt::WA_TranslucentBackground, true);
++    m_pTitleWidget->setContentsMargins(0, 0, 0, 0);
+     m_pTitleWidget->setFixedHeight(40);
+     m_pTitleWidgetLayou = new QHBoxLayout(m_pTitleWidget);
+ 
+     m_pAddBtn = new KPushButton();
+     m_pAddBtn->setProperty("useIconHighlightEffect", 0x2);
+     m_pAddBtn->setBackgroundColor(Qt::white);
+-    m_pAddBtn->setFixedSize(24,24);
++    m_pAddBtn->setFixedSize(24, 24);
+     m_pAddBtn->setBorderRadius(12);
+     m_pAddBtn->setIcon(QIcon::fromTheme("list-add-symbolic"));
+ 
+     m_pColorBtn = new QPushButton();
+     m_pColorBtn->setProperty("useIconHighlightEffect", 0x2);
+     m_pColorBtn->setFlat(true);
+-    m_pColorBtn->setFixedSize(24,24);
++    m_pColorBtn->setFixedSize(24, 24);
+     m_pColorBtn->setIcon(QIcon::fromTheme("window-close-symbolic"));
+ 
+     m_pMenuBtn = new QPushButton();
+     m_pMenuBtn->setProperty("useIconHighlightEffect", 0x2);
+     m_pMenuBtn->setFlat(true);
+-    m_pMenuBtn->setFixedSize(24,24);
++    m_pMenuBtn->setFixedSize(24, 24);
+     m_pMenuBtn->setIcon(QIcon::fromTheme("open-menu-symbolic"));
+ 
+     m_pCloseBtn = new QPushButton();
+     m_pCloseBtn->setProperty("isWindowButton", 0x02);
+     m_pCloseBtn->setProperty("useIconHighlightEffect", 0x08);
+     m_pCloseBtn->setFlat(true);
+-    m_pCloseBtn->setFixedSize(24,24);
++    m_pCloseBtn->setFixedSize(24, 24);
+     m_pCloseBtn->setIcon(QIcon::fromTheme("window-close-symbolic"));
+-    connect(m_pCloseBtn,&QPushButton::clicked,q,[=]{
++    connect(m_pCloseBtn, &QPushButton::clicked, q, [=] {
+         q->close();
+     });
+ 
+@@ -238,7 +232,7 @@ KTitleWindowPrivate::KTitleWindowPrivate(KTitleWindow *parent)
+     m_pVLayout = new QVBoxLayout(q);
+ 
+     m_pTitleWidgetLayou->setSpacing(8);
+-    m_pTitleWidgetLayou->setContentsMargins(8,8,8,8);
++    m_pTitleWidgetLayou->setContentsMargins(8, 8, 8, 8);
+     m_pTitleWidgetLayou->addWidget(m_pAddBtn);
+     m_pTitleWidgetLayou->addStretch();
+     m_pTitleWidgetLayou->addWidget(m_pColorBtn);
+@@ -248,11 +242,10 @@ KTitleWindowPrivate::KTitleWindowPrivate(KTitleWindow *parent)
+     m_pVLayout->addWidget(m_pBaseWidget);
+ 
+     m_pBaseWidget->setBackgroundRole(QPalette::Base);
+-    connect(m_gsetting,&QGSettings::changed,this,[=]{
++    connect(m_gsetting, &QGSettings::changed, this, [=] {
+         changeTheme();
+         m_pBaseWidget->setBackgroundRole(QPalette::Base);
+     });
+-
+ }
+ 
+ void KTitleWindowPrivate::changeTheme()
+diff --git a/kysdk-qtwidgets/src/ktitlewindow.h b/kysdk-qtwidgets/src/ktitlewindow.h
+index 26d0df6..1f2a7ac 100644
+--- a/kysdk-qtwidgets/src/ktitlewindow.h
++++ b/kysdk-qtwidgets/src/ktitlewindow.h
+@@ -23,10 +23,11 @@
+ #ifndef KTITLEWINDOW_H
+ #define KTITLEWINDOW_H
+ 
+-#include <QWidget>
+-#include <QPushButton>
+-#include "kpushbutton.h"
+ #include "gui_g.h"
++#include "kpushbutton.h"
++#include <QPushButton>
++#include <QTextStream>
++#include <QWidget>
+ 
+ namespace kdk
+ {
+@@ -40,7 +41,7 @@ class KTitleWindowPrivate;
+ 
+ class GUI_EXPORT KTitleWindow : public QWidget
+ {
+-   Q_OBJECT
++    Q_OBJECT
+ 
+ public:
+     KTitleWindow(QWidget *parent = nullptr);
+diff --git a/kysdk-qtwidgets/src/ktoolbar.cpp b/kysdk-qtwidgets/src/ktoolbar.cpp
+index f77cc4c..b882e61 100644
+--- a/kysdk-qtwidgets/src/ktoolbar.cpp
++++ b/kysdk-qtwidgets/src/ktoolbar.cpp
+@@ -1,28 +1,28 @@
+ #include "ktoolbar.h"
++#include "klineframe.h"
+ #include "themeController.h"
+ #include <QBoxLayout>
+-#include <QPainter>
+ #include <QDebug>
+-#include "klineframe.h"
++#include <QPainter>
+ 
+ namespace kdk
+ {
+ 
+-class KToolBarPrivate : public QObject,public ThemeController
++class KToolBarPrivate : public QObject, public ThemeController
+ {
+     Q_DECLARE_PUBLIC(KToolBar)
+     Q_OBJECT
+ public:
+-    KToolBarPrivate(KToolBar* parent);
++    KToolBarPrivate(KToolBar *parent);
+ 
+     void init();
+     void updateButtonLayout();
+     void clearButtonLayout();
+-    void getSelectList(KToolButton* button,bool checked);
++    void getSelectList(KToolButton *button, bool checked);
+ 
+ private:
+-    KToolBar* q_ptr;
+-    QBoxLayout* m_pLayout;
++    KToolBar *q_ptr;
++    QBoxLayout *m_pLayout;
+     QList<KToolButton *> m_pButtonList;
+     QList<KToolButton *> m_pCheckList;
+     int m_radius;
+@@ -33,18 +33,16 @@ private:
+ };
+ 
+ KToolBar::KToolBar(QWidget *parent)
+-    :QWidget(parent)
+-    ,d_ptr(new KToolBarPrivate(this))
++    : QWidget(parent)
++    , d_ptr(new KToolBarPrivate(this))
+ {
+-
+ }
+ 
+ Qt::Orientation KToolBar::orientation()
+ {
+     Q_D(KToolBar);
+     QBoxLayout::Direction layoutDirection = d->m_pLayout->direction();
+-    if(layoutDirection == QBoxLayout::LeftToRight || layoutDirection == QBoxLayout::RightToLeft)
+-    {
++    if (layoutDirection == QBoxLayout::LeftToRight || layoutDirection == QBoxLayout::RightToLeft) {
+         return Qt::Horizontal;
+     }
+     return Qt::Vertical;
+@@ -53,7 +51,7 @@ Qt::Orientation KToolBar::orientation()
+ void KToolBar::setOrientation(Qt::Orientation orientation)
+ {
+     Q_D(KToolBar);
+-    if(orientation == Qt::Vertical)
++    if (orientation == Qt::Vertical)
+         d->m_pLayout->setDirection(QBoxLayout::TopToBottom);
+     else
+         d->m_pLayout->setDirection(QBoxLayout::LeftToRight);
+@@ -63,7 +61,7 @@ void KToolBar::setOrientation(Qt::Orientation orientation)
+ KToolButton *KToolBar::addButton(QIcon icon)
+ {
+     Q_D(KToolBar);
+-    KToolButton* button = new KToolButton(this);
++    KToolButton *button = new KToolButton(this);
+     button->setType(KToolButtonType::Frameless);
+     button->setIcon(icon);
+     button->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
+@@ -75,7 +73,7 @@ KToolButton *KToolBar::addButton(QIcon icon)
+ KToolButton *KToolBar::addButton(QString string)
+ {
+     Q_D(KToolBar);
+-    KToolButton* button = new KToolButton(this);
++    KToolButton *button = new KToolButton(this);
+     button->setType(KToolButtonType::Frameless);
+     button->setText(string);
+     button->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
+@@ -87,10 +85,9 @@ KToolButton *KToolBar::addButton(QString string)
+ QList<KToolButton *> KToolBar::addButton(QList<QIcon> list)
+ {
+     Q_D(KToolBar);
+-    QList<KToolButton*> btnList;
+-    for(int i =0 ; i < list.count() ;i++)
+-    {
+-        KToolButton* button = new KToolButton(this);
++    QList<KToolButton *> btnList;
++    for (int i = 0; i < list.count(); i++) {
++        KToolButton *button = new KToolButton(this);
+         button->setType(KToolButtonType::Frameless);
+         button->setIcon(list.at(i));
+         button->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
+@@ -104,10 +101,9 @@ QList<KToolButton *> KToolBar::addButton(QList<QIcon> list)
+ QList<KToolButton *> KToolBar::addButton(QList<QString> list)
+ {
+     Q_D(KToolBar);
+-    QList<KToolButton*> btnList;
+-    for(int i =0 ; i < list.count() ;i++)
+-    {
+-        KToolButton* button = new KToolButton(this);
++    QList<KToolButton *> btnList;
++    for (int i = 0; i < list.count(); i++) {
++        KToolButton *button = new KToolButton(this);
+         button->setType(KToolButtonType::Frameless);
+         button->setText(list.at(i));
+         button->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
+@@ -118,28 +114,28 @@ QList<KToolButton *> KToolBar::addButton(QList<QString> list)
+     return btnList;
+ }
+ 
+-//void KToolBar::addButton(KToolButton *button)
++// void KToolBar::addButton(KToolButton *button)
+ //{
+-//    Q_D(KToolBar);
+-//    if(!d->m_pButtonList.contains(button))
+-//    {
+-//        d->m_pButtonList.append(button);
+-//        d->updateButtonLayout();
+-//    }
+-//}
+-
+-//void KToolBar::addButton(QList<KToolButton *> list)
++//     Q_D(KToolBar);
++//     if(!d->m_pButtonList.contains(button))
++//     {
++//         d->m_pButtonList.append(button);
++//         d->updateButtonLayout();
++//     }
++// }
++
++// void KToolBar::addButton(QList<KToolButton *> list)
+ //{
+-//    Q_D(KToolBar);
+-//    for(int i = 0 ; i < list.count() ; i++)
+-//    {
+-//        if(!d->m_pButtonList.contains(list.at(i)))
+-//        {
+-//            d->m_pButtonList.append(list.at(i));
+-//        }
+-//    }
+-//    d->updateButtonLayout();
+-//}
++//     Q_D(KToolBar);
++//     for(int i = 0 ; i < list.count() ; i++)
++//     {
++//         if(!d->m_pButtonList.contains(list.at(i)))
++//         {
++//             d->m_pButtonList.append(list.at(i));
++//         }
++//     }
++//     d->updateButtonLayout();
++// }
+ 
+ QList<KToolButton *> KToolBar::buttonList()
+ {
+@@ -150,8 +146,7 @@ QList<KToolButton *> KToolBar::buttonList()
+ void KToolBar::removeButton(KToolButton *button)
+ {
+     Q_D(KToolBar);
+-    if(d->m_pButtonList.contains(button))
+-    {
++    if (d->m_pButtonList.contains(button)) {
+         d->m_pButtonList.removeAll(button);
+     }
+     d->updateButtonLayout();
+@@ -160,7 +155,7 @@ void KToolBar::removeButton(KToolButton *button)
+ void KToolBar::removeButton(int id)
+ {
+     Q_D(KToolBar);
+-    if(id < 0 || id >= d->m_pButtonList.count())
++    if (id < 0 || id >= d->m_pButtonList.count())
+         return;
+     d->m_pButtonList.removeAt(id);
+     d->updateButtonLayout();
+@@ -169,10 +164,8 @@ void KToolBar::removeButton(int id)
+ void KToolBar::removeButton(QList<KToolButton *> list)
+ {
+     Q_D(KToolBar);
+-    for(int i = 0 ; i < list.count(); i++)
+-    {
+-        if(d->m_pButtonList.contains(list.at(i)))
+-        {
++    for (int i = 0; i < list.count(); i++) {
++        if (d->m_pButtonList.contains(list.at(i))) {
+             d->m_pButtonList.removeAll(list.at(i));
+         }
+     }
+@@ -221,7 +214,7 @@ bool KToolBar::isCheckable()
+     return d->m_isCheckable;
+ }
+ 
+-QList<KToolButton* >KToolBar::checkedButton()
++QList<KToolButton *> KToolBar::checkedButton()
+ {
+     Q_D(KToolBar);
+     return d->m_pCheckList;
+@@ -258,18 +251,18 @@ void KToolBar::paintEvent(QPaintEvent *event)
+     Q_D(KToolBar);
+     QPainter painter(this);
+     painter.setRenderHint(QPainter::Antialiasing);
+-    if(d->m_isBkgColorEnable)
+-//        painter.setBrush(palette().button().color());
++    if (d->m_isBkgColorEnable)
++        //        painter.setBrush(palette().button().color());
+         painter.setBrush(ThemeController::getPaletteColorFromDT("button"));
+     else
+         painter.setBrush(Qt::transparent);
+     painter.setPen(Qt::NoPen);
+-    painter.drawRoundedRect(this->rect(),d->m_radius,d->m_radius);
++    painter.drawRoundedRect(this->rect(), d->m_radius, d->m_radius);
+     QWidget::paintEvent(event);
+ }
+ 
+ KToolBarPrivate::KToolBarPrivate(KToolBar *parent)
+-    :q_ptr(parent)
++    : q_ptr(parent)
+ {
+     Q_Q(KToolBar);
+     init();
+@@ -283,7 +276,7 @@ void KToolBarPrivate::init()
+     m_pLayout->setSpacing(0);
+     m_pLayout->setDirection(QBoxLayout::LeftToRight);
+     m_radius = ThemeController::getRadiusFromDT("kradius-normal");
+-    if(m_radius == -1)
++    if (m_radius == -1)
+         m_radius = 6;
+     m_exclusive = false;
+     m_isCheckable = false;
+@@ -295,46 +288,41 @@ void KToolBarPrivate::updateButtonLayout()
+ {
+     Q_Q(KToolBar);
+     clearButtonLayout();
+-    for(int i = 0; i < m_pButtonList.count() ; i++)
+-    {
+-        if(m_isBkgColorEnable)
++    for (int i = 0; i < m_pButtonList.count(); i++) {
++        if (m_isBkgColorEnable)
+             m_pButtonList.at(i)->setBackgroundColorEnabled(true);
+         else
+             m_pButtonList.at(i)->setBackgroundColorEnabled(false);
+ 
+-        m_pButtonList.at(i)->setBorderRadius(m_radius,m_radius,m_radius,m_radius);
++        m_pButtonList.at(i)->setBorderRadius(m_radius, m_radius, m_radius, m_radius);
+ 
+         m_pLayout->addWidget(m_pButtonList.at(i));
+         q->setCheckable(q->isCheckable());
+ 
+-        if(m_pButtonList.at(i)->menu())
++        if (m_pButtonList.at(i)->menu())
+             m_pButtonList.at(i)->setArrow(true);
+ 
+-        connect(m_pButtonList.at(i),&KToolButton::checkedChanged,this,[=](bool checked){
+-            getSelectList(m_pButtonList.at(i),checked);
++        connect(m_pButtonList.at(i), &KToolButton::checkedChanged, this, [=](bool checked) {
++            getSelectList(m_pButtonList.at(i), checked);
+         });
+ 
+-        if( i != m_pButtonList.count() - 1 && m_isLineVisible)
+-        {
+-            if(q->orientation() == Qt::Vertical)
+-            {
+-                KHLineFrame* lineFrame = new KHLineFrame(q);
++        if (i != m_pButtonList.count() - 1 && m_isLineVisible) {
++            if (q->orientation() == Qt::Vertical) {
++                KHLineFrame *lineFrame = new KHLineFrame(q);
+                 lineFrame->setFollowPalette(false);
+-                QPalette pale ;
+-                QColor color(0,0,0);
++                QPalette pale;
++                QColor color(0, 0, 0);
+                 color.setAlphaF(0.1);
+-                pale.setColor(QPalette::Window,color);
++                pale.setColor(QPalette::Window, color);
+                 lineFrame->setPalette(pale);
+                 m_pLayout->addWidget(lineFrame);
+-            }
+-            else
+-            {
+-                KVLineFrame* lineFrame = new KVLineFrame(q);
++            } else {
++                KVLineFrame *lineFrame = new KVLineFrame(q);
+                 lineFrame->setFollowPalette(false);
+-                QPalette pale ;
+-                QColor color(0,0,0);
++                QPalette pale;
++                QColor color(0, 0, 0);
+                 color.setAlphaF(0.1);
+-                pale.setColor(QPalette::Window,color);
++                pale.setColor(QPalette::Window, color);
+                 lineFrame->setPalette(pale);
+                 m_pLayout->addWidget(lineFrame);
+             }
+@@ -344,66 +332,50 @@ void KToolBarPrivate::updateButtonLayout()
+ 
+ void KToolBarPrivate::clearButtonLayout()
+ {
+-    for(int i = 0; i < m_pButtonList.count() ; i++)
+-    {
++    for (int i = 0; i < m_pButtonList.count(); i++) {
+         disconnect(m_pButtonList.at(i), SIGNAL(checkedChanged(bool)), 0, 0);
+     }
+ 
+     QLayoutItem *child;
+-    while ((child = m_pLayout->takeAt(0)) != 0)
+-    {
+-        if (child->spacerItem())
+-        {
++    while ((child = m_pLayout->takeAt(0)) != 0) {
++        if (child->spacerItem()) {
+             m_pLayout->removeItem(child);
+             continue;
+         }
+         m_pLayout->removeWidget(child->widget());
+         child->widget()->setParent(nullptr);
+         delete child;
+-        child =nullptr;
++        child = nullptr;
+     }
+ }
+ 
+-void KToolBarPrivate::getSelectList(KToolButton* button,bool checked)
++void KToolBarPrivate::getSelectList(KToolButton *button, bool checked)
+ {
+     m_pCheckList.clear();
+-    if(m_exclusive)
+-    {
+-        if(checked)
+-        {
+-            for(int i = 0;i < m_pButtonList.count() ; i++)
+-            {
+-
+-                if(button == m_pButtonList.at(i))
+-                {
++    if (m_exclusive) {
++        if (checked) {
++            for (int i = 0; i < m_pButtonList.count(); i++) {
++
++                if (button == m_pButtonList.at(i)) {
+                     button->setChecked(checked);
+-                }
+-                else
++                } else
+                     m_pButtonList.at(i)->setChecked(false);
+             }
+ 
+-        }
+-        else
+-        {
++        } else {
+             button->setChecked(checked);
+         }
+-    }
+-    else
+-    {
+-        for(int i = 0;i < m_pButtonList.count() ; i++)
+-        {
+-            if(button == m_pButtonList.at(i))
+-            {
++    } else {
++        for (int i = 0; i < m_pButtonList.count(); i++) {
++            if (button == m_pButtonList.at(i)) {
+                 button->setChecked(checked);
+-            }
+-            else
++            } else
+                 m_pButtonList.at(i)->setChecked(m_pButtonList.at(i)->isChecked());
+         }
+     }
+ 
+-    for(int i = 0 ; i < m_pButtonList.count();i++)
+-    {
+-        if(m_pButtonList.at(i)->isChecked())
++    for (int i = 0; i < m_pButtonList.count(); i++) {
++        if (m_pButtonList.at(i)->isChecked())
+             m_pCheckList.append(m_pButtonList.at(i));
+     }
+ }
+diff --git a/kysdk-qtwidgets/src/ktoolbar.h b/kysdk-qtwidgets/src/ktoolbar.h
+index 0756db7..5e94760 100644
+--- a/kysdk-qtwidgets/src/ktoolbar.h
++++ b/kysdk-qtwidgets/src/ktoolbar.h
+@@ -1,12 +1,13 @@
+ #ifndef KTOOLBAR_H
+ #define KTOOLBAR_H
+ 
+-#include <QWidget>
+-#include <QPushButton>
+ #include "gui_g.h"
+ #include "ktoolbutton.h"
++#include <QPushButton>
++#include <QWidget>
+ 
+-namespace kdk {
++namespace kdk
++{
+ 
+ class KToolBarPrivate;
+ 
+@@ -14,28 +15,28 @@ class GUI_EXPORT KToolBar : public QWidget
+ {
+     Q_OBJECT
+ public:
+-    KToolBar(QWidget* parent = nullptr);
++    KToolBar(QWidget *parent = nullptr);
+ 
+     Qt::Orientation orientation();
+ 
+     void setOrientation(Qt::Orientation orientation);
+ 
+-    KToolButton* addButton(QIcon icon);
++    KToolButton *addButton(QIcon icon);
+ 
+-    KToolButton* addButton(QString string);
++    KToolButton *addButton(QString string);
+ 
+-//    KToolButton* addButton (const QIcon&icon ,const QString text = QString());
+-    QList<KToolButton*> addButton(QList<QIcon> list);
++    //    KToolButton* addButton (const QIcon&icon ,const QString text = QString());
++    QList<KToolButton *> addButton(QList<QIcon> list);
+ 
+-    QList<KToolButton*> addButton(QList<QString> list);
++    QList<KToolButton *> addButton(QList<QString> list);
+ 
+     QList<KToolButton *> buttonList();
+ 
+-    void removeButton(KToolButton* button);
++    void removeButton(KToolButton *button);
+ 
+     void removeButton(int id);
+ 
+-    void removeButton(QList<KToolButton*> list);
++    void removeButton(QList<KToolButton *> list);
+ 
+     void setBorderRadius(int radius);
+ 
+@@ -49,7 +50,7 @@ public:
+ 
+     bool isCheckable();
+ 
+-    QList<KToolButton* > checkedButton();
++    QList<KToolButton *> checkedButton();
+ 
+     void setLineVisible(bool flag);
+ 
+@@ -60,11 +61,11 @@ public:
+     bool backgroundColorEnabled();
+ 
+ protected:
+-    void paintEvent(QPaintEvent* event);
++    void paintEvent(QPaintEvent *event);
+ 
+ private:
+     Q_DECLARE_PRIVATE(KToolBar)
+-    KToolBarPrivate* const d_ptr;
++    KToolBarPrivate *const d_ptr;
+ };
+ 
+ }
+diff --git a/kysdk-qtwidgets/src/ktoolbutton.cpp b/kysdk-qtwidgets/src/ktoolbutton.cpp
+old mode 100755
+new mode 100644
+index 0d42f34..ddea5fb
+--- a/kysdk-qtwidgets/src/ktoolbutton.cpp
++++ b/kysdk-qtwidgets/src/ktoolbutton.cpp
+@@ -21,27 +21,29 @@
+  */
+ 
+ #include "ktoolbutton.h"
++#include "parmscontroller.h"
+ #include "themeController.h"
+-#include <QTimer>
+-#include <QPainter>
++#include <QApplication>
+ #include <QDebug>
+-#include <QStyleOption>
+-#include <QStyleOptionToolButton>
+ #include <QLinearGradient>
+-#include <QApplication>
++#include <QPainter>
+ #include <QPainterPath>
+-#include "parmscontroller.h"
++#include <QStyleOption>
++#include <QStyleOptionToolButton>
++#include <QTimer>
+ 
+-namespace  kdk
++namespace kdk
+ {
+-class KToolButtonPrivate:public QObject, public  ThemeController
++class KToolButtonPrivate : public QObject, public ThemeController
+ {
+     Q_DECLARE_PUBLIC(KToolButton)
+     Q_OBJECT
+ 
+ public:
+-    KToolButtonPrivate(KToolButton* parent);
+-    ~KToolButtonPrivate(){}
++    KToolButtonPrivate(KToolButton *parent);
++    ~KToolButtonPrivate()
++    {
++    }
+     void changePalette();
+     void doLoadingFlash();
+ 
+@@ -49,7 +51,7 @@ protected:
+     void changeTheme();
+ 
+ private:
+-    KToolButton* q_ptr;
++    KToolButton *q_ptr;
+     KToolButtonType m_type;
+     QLinearGradient m_pLinearGradient;
+     bool m_isLoading;
+@@ -74,8 +76,8 @@ private:
+ };
+ 
+ KToolButton::KToolButton(QWidget *parent)
+-    :QToolButton(parent),
+-      d_ptr(new KToolButtonPrivate(this))
++    : QToolButton(parent)
++    , d_ptr(new KToolButtonPrivate(this))
+ {
+     Q_D(KToolButton);
+     d->m_pTimer = new QTimer(this);
+@@ -83,15 +85,12 @@ KToolButton::KToolButton(QWidget *parent)
+     d->m_flashState = 0;
+     d->m_isLoading = false;
+     int radius = ThemeController::getRadiusFromDT("kradius-normal");
+-    if(radius == -1)
+-    {
++    if (radius == -1) {
+         d->m_bottomLeftRadius = 6;
+         d->m_topLeftRadius = 6;
+         d->m_topRightRadius = 6;
+         d->m_bottomRightRadius = 6;
+-    }
+-    else
+-    {
++    } else {
+         d->m_bottomLeftRadius = radius;
+         d->m_topLeftRadius = radius;
+         d->m_topRightRadius = radius;
+@@ -103,12 +102,12 @@ KToolButton::KToolButton(QWidget *parent)
+     QToolButton::setIcon(QIcon::fromTheme("open-menu-symbolic"));
+     setFocusPolicy(Qt::FocusPolicy::ClickFocus);
+     d->changeTheme();
+-    connect(d->m_gsetting,&QGSettings::changed,d,&KToolButtonPrivate::changeTheme);
+-    connect(d->m_pTimer,&QTimer::timeout,d,&KToolButtonPrivate::doLoadingFlash);
+-    connect(Parmscontroller::self(),&Parmscontroller::modeChanged,this,[=](){
++    connect(d->m_gsetting, &QGSettings::changed, d, &KToolButtonPrivate::changeTheme);
++    connect(d->m_pTimer, &QTimer::timeout, d, &KToolButtonPrivate::doLoadingFlash);
++    connect(Parmscontroller::self(), &Parmscontroller::modeChanged, this, [=]() {
+         updateGeometry();
+     });
+-    connect(this,&KToolButton::toggled,this,[=](bool checked){
++    connect(this, &KToolButton::toggled, this, [=](bool checked) {
+         emit checkedChanged(checked);
+     });
+ }
+@@ -136,12 +135,12 @@ void KToolButton::setIcon(const QIcon &icon)
+ void KToolButton::setLoading(bool flag)
+ {
+     Q_D(KToolButton);
+-    if(!isEnabled())
++    if (!isEnabled())
+         return;
+-    if(hasArrow())
++    if (hasArrow())
+         return;
+     d->m_isLoading = flag;
+-    if(flag)
++    if (flag)
+         d->m_pTimer->start();
+     else
+         d->m_pTimer->stop();
+@@ -161,7 +160,7 @@ QIcon KToolButton::icon()
+ void KToolButton::setArrow(bool flag)
+ {
+     Q_D(KToolButton);
+-    if(!d->m_isLoading)
++    if (!d->m_isLoading)
+         d->m_hasArrow = flag;
+     update();
+ }
+@@ -204,24 +203,19 @@ bool KToolButton::backgroundColorEnabled()
+ bool KToolButton::eventFilter(QObject *watched, QEvent *event)
+ {
+     Q_D(KToolButton);
+-//    QColor highlightColor = this->palette().color(QPalette::Highlight);
++    //    QColor highlightColor = this->palette().color(QPalette::Highlight);
+     QColor highlightColor = ThemeController::getPaletteColorFromDT("highlight");
+-    if(watched == this)
+-    {
+-        //根据不同状态重绘icon颜色
+-        if(highlightColor == Qt::transparent)
+-        {
++    if (watched == this) {
++        // 根据不同状态重绘icon颜色
++        if (highlightColor == Qt::transparent) {
+             if (ThemeController::themeMode() == LightTheme)
+-                d->m_pixColor = QColor(31,32,34);
++                d->m_pixColor = QColor(31, 32, 34);
+             else
+-                d->m_pixColor = QColor(255,255,255);
+-        }
+-        else
+-        {
++                d->m_pixColor = QColor(255, 255, 255);
++        } else {
+             switch (event->type()) {
+             case QEvent::MouseButtonPress:
+-                if(isEnabled()&& !d->m_isLoading)
+-                {
++                if (isEnabled() && !d->m_isLoading) {
+                     if (ThemeController::themeMode() == LightTheme)
+                         d->m_pixColor = highlightColor.darker(120);
+                     else
+@@ -229,8 +223,7 @@ bool KToolButton::eventFilter(QObject *watched, QEvent *event)
+                 }
+                 break;
+             case QEvent::Enter:
+-                if(isEnabled()&& !d->m_isLoading)
+-                {
++                if (isEnabled() && !d->m_isLoading) {
+                     if (ThemeController::themeMode() == LightTheme)
+                         d->m_pixColor = highlightColor.darker(105);
+                     else
+@@ -238,40 +231,32 @@ bool KToolButton::eventFilter(QObject *watched, QEvent *event)
+                 }
+                 break;
+             case QEvent::FocusIn:
+-                if(isEnabled()&& !d->m_isLoading)
+-                {
+-                    if (ThemeController::themeMode()== LightTheme)
++                if (isEnabled() && !d->m_isLoading) {
++                    if (ThemeController::themeMode() == LightTheme)
+                         d->m_pixColor = highlightColor.darker(120);
+                     else
+                         d->m_pixColor = highlightColor.lighter(120);
+                 }
+                 break;
+-            case QEvent::EnabledChange:
+-                {
+-                if(!isEnabled()&& !d->m_isLoading)
+-                {
+-                    if(d->m_isLoading)
+-                    {
++            case QEvent::EnabledChange: {
++                if (!isEnabled() && !d->m_isLoading) {
++                    if (d->m_isLoading) {
+                         d->m_isLoading = false;
+                         d->m_pTimer->stop();
+                     }
+                     if (ThemeController::themeMode() == LightTheme)
+-                        d->m_pixColor = QColor(191,191,191);
++                        d->m_pixColor = QColor(191, 191, 191);
+                     else
+-                        d->m_pixColor = QColor(95,99,104);
+-                }
+-                else if(isEnabled()&& !d->m_isLoading)
+-                {
++                        d->m_pixColor = QColor(95, 99, 104);
++                } else if (isEnabled() && !d->m_isLoading) {
+                     if (ThemeController::themeMode() == LightTheme)
+-                        d->m_pixColor = QColor(31,32,34);
++                        d->m_pixColor = QColor(31, 32, 34);
+                     else
+-                        d->m_pixColor = QColor(255,255,255);
++                        d->m_pixColor = QColor(255, 255, 255);
+                 }
+-                }
+-                break;
++            } break;
+             case QEvent::MouseButtonRelease:
+-                if(isEnabled()&& !d->m_isLoading)
+-                {
++                if (isEnabled() && !d->m_isLoading) {
+                     if (ThemeController::themeMode() == LightTheme)
+                         d->m_pixColor = highlightColor.darker(105);
+                     else
+@@ -280,12 +265,11 @@ bool KToolButton::eventFilter(QObject *watched, QEvent *event)
+                 break;
+             case QEvent::Leave:
+             case QEvent::FocusOut:
+-                if(isEnabled()&& !d->m_isLoading)
+-                {
++                if (isEnabled() && !d->m_isLoading) {
+                     if (ThemeController::themeMode() == LightTheme)
+-                        d->m_pixColor = QColor(31,32,34);
++                        d->m_pixColor = QColor(31, 32, 34);
+                     else
+-                        d->m_pixColor = QColor(255,255,255);
++                        d->m_pixColor = QColor(255, 255, 255);
+                 }
+                 break;
+             default:
+@@ -293,7 +277,7 @@ bool KToolButton::eventFilter(QObject *watched, QEvent *event)
+             }
+         }
+     }
+-    return QToolButton::eventFilter(watched,event);
++    return QToolButton::eventFilter(watched, event);
+ }
+ 
+ QSize KToolButton::sizeHint() const
+@@ -301,165 +285,133 @@ QSize KToolButton::sizeHint() const
+     Q_D(const KToolButton);
+ 
+     QSize size(Parmscontroller::parm(Parmscontroller::Parm::PM_ToolButtonHeight),
+-            Parmscontroller::parm(Parmscontroller::Parm::PM_ToolButtonHeight));
+-    if(d->m_hasArrow)
+-        size.setWidth(Parmscontroller::parm(Parmscontroller::Parm::PM_ToolButtonHeight)+24);
++               Parmscontroller::parm(Parmscontroller::Parm::PM_ToolButtonHeight));
++    if (d->m_hasArrow)
++        size.setWidth(Parmscontroller::parm(Parmscontroller::Parm::PM_ToolButtonHeight) + 24);
+     return size;
+ }
+ 
+ void KToolButton::paintEvent(QPaintEvent *event)
+ {
+-    Q_D( KToolButton);
+-    d->m_pLinearGradient.setStart(this->width()/2,0);
+-    d->m_pLinearGradient.setFinalStop(this->width()/2,this->height());
++    Q_D(KToolButton);
++    d->m_pLinearGradient.setStart(this->width() / 2, 0);
++    d->m_pLinearGradient.setFinalStop(this->width() / 2, this->height());
+     QPainter painter(this);
+     painter.setRenderHint(QPainter::HighQualityAntialiasing);
+     painter.setRenderHint(QPainter::SmoothPixmapTransform);
+-    if(ThemeController::widgetTheme() == ClassicTheme)
+-    {
+-        if(painter.pen().width() == 1)
+-            painter.translate(0.5,0.5);
++    if (ThemeController::widgetTheme() == ClassicTheme) {
++        if (painter.pen().width() == 1)
++            painter.translate(0.5, 0.5);
+     }
+-    //绘制边框
++    // 绘制边框
+     QStyleOptionToolButton option;
+     initStyleOption(&option);
+     d->m_arrowPixmap = QIcon::fromTheme("ukui-down-symbolic").pixmap(option.iconSize);
+ 
+     QPen pen;
+-//    QColor color = palette().color(QPalette::Highlight);
++    //    QColor color = palette().color(QPalette::Highlight);
+     QColor color = ThemeController::getPaletteColorFromDT("highlight");
+     pen.setColor(color);
+     pen.setWidth(2);
+-    if( ( (QStyle::State_HasFocus & option.state) && isEnabled() && !isLoading() &&(this->focusPolicy() != Qt::FocusPolicy::NoFocus) )&& d->m_type != Frameless)
++    if (((QStyle::State_HasFocus & option.state) && isEnabled() && !isLoading() && (this->focusPolicy() != Qt::FocusPolicy::NoFocus)) && d->m_type != Frameless)
+         painter.setPen(pen);
+     else
+         painter.setPen(Qt::NoPen);
+ 
+     pen.setWidth(2);
+ 
+-    if(!isEnabled())
++    if (!isEnabled())
+         painter.setBrush(d->m_disableColor);
+-    else if(QStyle::State_Sunken & option.state && !isLoading())
++    else if (QStyle::State_Sunken & option.state && !isLoading())
+         painter.setBrush(d->m_clickColor);
+-    else if(QStyle::State_MouseOver & option.state && !isLoading())
+-    {
+-        if(isChecked())
+-        {
++    else if (QStyle::State_MouseOver & option.state && !isLoading()) {
++        if (isChecked()) {
+             painter.setBrush(d->m_clickColor);
+-        }
+-        else
+-        {
+-            if(ThemeController::widgetTheme()==FashionTheme && type() != Flat)
+-            {
++        } else {
++            if (ThemeController::widgetTheme() == FashionTheme && type() != Flat) {
+                 painter.setBrush(d->m_pLinearGradient);
+-            }
+-            else
+-            {
++            } else {
+                 painter.setBrush(d->m_hoverColor);
+             }
+         }
+-    }
+-    else if(QStyle::State_HasFocus & option.state && !isLoading())
+-    {
+-        if(isChecked() && d->m_type == Frameless)
+-        {
++    } else if (QStyle::State_HasFocus & option.state && !isLoading()) {
++        if (isChecked() && d->m_type == Frameless) {
+             painter.setBrush(d->m_clickColor);
+-        }
+-        else
+-        {
+-            if(d->m_type == Frameless)
++        } else {
++            if (d->m_type == Frameless)
+                 painter.setBrush(d->m_bkgColor);
+             else
+                 painter.setBrush(d->m_focusColor);
+         }
+-    }
+-    else
+-    {
+-        if(isChecked() )
+-        {
++    } else {
++        if (isChecked()) {
+             painter.setBrush(d->m_clickColor);
+-        }
+-        else
+-        {
++        } else {
+             painter.setBrush(d->m_bkgColor);
+         }
+     }
+ 
+-    if(ThemeController::widgetTheme() == ClassicTheme){
+-        color = ThemeController::highlightClick(false,palette());
+-        color = ThemeController::adjustH(color,-2);
+-        color = ThemeController::adjustS(color,-27);
+-        color = ThemeController::adjustL(color,-19);
++    if (ThemeController::widgetTheme() == ClassicTheme) {
++        color = ThemeController::highlightClick(false, palette());
++        color = ThemeController::adjustH(color, -2);
++        color = ThemeController::adjustS(color, -27);
++        color = ThemeController::adjustL(color, -19);
+ 
+         pen.setColor(color);
+         pen.setWidth(1);
+ 
+-        switch (d->m_type)
+-        {
+-        case Flat:
+-        {
+-            if((QStyle::State_HasFocus & option.state) && isEnabled() && !isLoading() &&(this->focusPolicy() != Qt::FocusPolicy::NoFocus))
++        switch (d->m_type) {
++        case Flat: {
++            if ((QStyle::State_HasFocus & option.state) && isEnabled() && !isLoading() && (this->focusPolicy() != Qt::FocusPolicy::NoFocus))
+                 painter.setPen(pen);
+             else
+                 painter.setPen(Qt::NoPen);
+             break;
+         }
+-        case SemiFlat:
+-        {
+-            if(((QStyle::State_MouseOver & option.state) && isEnabled() && !isLoading()) ||
+-                    ((QStyle::State_HasFocus & option.state) && isEnabled() && !isLoading() && (this->focusPolicy() != Qt::FocusPolicy::NoFocus)))
++        case SemiFlat: {
++            if (((QStyle::State_MouseOver & option.state) && isEnabled() && !isLoading()) || ((QStyle::State_HasFocus & option.state) && isEnabled() && !isLoading() && (this->focusPolicy() != Qt::FocusPolicy::NoFocus)))
+                 painter.setPen(pen);
+-            else if((QStyle::State_Sunken & option.state) && isEnabled() && !isLoading()){
+-                color = ThemeController::adjustH(color,1);
+-                color = ThemeController::adjustS(color,-7);
+-                color = ThemeController::adjustL(color,-12);
++            else if ((QStyle::State_Sunken & option.state) && isEnabled() && !isLoading()) {
++                color = ThemeController::adjustH(color, 1);
++                color = ThemeController::adjustS(color, -7);
++                color = ThemeController::adjustL(color, -12);
+                 pen.setColor(color);
+                 painter.setPen(pen);
+-            }
+-            else
++            } else
+                 painter.setPen(Qt::NoPen);
+             break;
+         }
+-        case Background:
+-        {
+-            if(!isLoading())
+-            {
+-                if(isEnabled()){
+-
+-                    if(((QStyle::State_MouseOver & option.state) && isEnabled() && !isLoading())
+-                            || ((QStyle::State_HasFocus & option.state) && isEnabled() && !isLoading() &&(this->focusPolicy() != Qt::FocusPolicy::NoFocus)))
++        case Background: {
++            if (!isLoading()) {
++                if (isEnabled()) {
++
++                    if (((QStyle::State_MouseOver & option.state) && isEnabled() && !isLoading())
++                        || ((QStyle::State_HasFocus & option.state) && isEnabled() && !isLoading() && (this->focusPolicy() != Qt::FocusPolicy::NoFocus)))
+                         painter.setPen(pen);
+-                    else if((QStyle::State_Sunken & option.state) && isEnabled() && !isLoading())
+-                    {
+-                        color = ThemeController::adjustH(color,1);
+-                        color = ThemeController::adjustS(color,-7);
+-                        color = ThemeController::adjustL(color,-12);
++                    else if ((QStyle::State_Sunken & option.state) && isEnabled() && !isLoading()) {
++                        color = ThemeController::adjustH(color, 1);
++                        color = ThemeController::adjustS(color, -7);
++                        color = ThemeController::adjustL(color, -12);
+                         pen.setColor(color);
+                         painter.setPen(pen);
+-                    }
+-                    else
+-                    {
+-                        color = ThemeController::lanhuHSLToQtHsl(0,0,73);
++                    } else {
++                        color = ThemeController::lanhuHSLToQtHsl(0, 0, 73);
+                         pen.setColor(color);
+                         painter.setPen(pen);
+                     }
+-                }
+-                else
+-                {
+-                    color = ThemeController::lanhuHSLToQtHsl(0,0,85);
++                } else {
++                    color = ThemeController::lanhuHSLToQtHsl(0, 0, 85);
+                     pen.setColor(color);
+                     painter.setPen(pen);
+-//                    painter.setBrush(palette().color(QPalette::Inactive,QPalette::Button));
+-                    painter.setBrush(ThemeController::getPaletteColorFromDT("button",QPalette::Inactive));
++                    //                    painter.setBrush(palette().color(QPalette::Inactive,QPalette::Button));
++                    painter.setBrush(ThemeController::getPaletteColorFromDT("button", QPalette::Inactive));
+                 }
+-            }
+-            else
+-            {
+-                color = ThemeController::lanhuHSLToQtHsl(0,0,85);
++            } else {
++                color = ThemeController::lanhuHSLToQtHsl(0, 0, 85);
+                 pen.setColor(color);
+                 painter.setPen(pen);
+-//                painter.setBrush(palette().color(QPalette::Inactive,QPalette::Button));
+-                painter.setBrush(ThemeController::getPaletteColorFromDT("button",QPalette::Inactive));
++                //                painter.setBrush(palette().color(QPalette::Inactive,QPalette::Button));
++                painter.setBrush(ThemeController::getPaletteColorFromDT("button", QPalette::Inactive));
+             }
+         }
+         default:
+@@ -467,325 +419,277 @@ void KToolButton::paintEvent(QPaintEvent *event)
+         }
+     }
+ 
+-    if(ThemeController::widgetTheme() == ClassicTheme)
+-        painter.drawRoundedRect(this->rect().adjusted(1,1,-1,-1),0,0);
+-    else
+-    {
+-        QRect drawRect = this->rect().adjusted(1,1,0,0);
++    if (ThemeController::widgetTheme() == ClassicTheme)
++        painter.drawRoundedRect(this->rect().adjusted(1, 1, -1, -1), 0, 0);
++    else {
++        QRect drawRect = this->rect().adjusted(1, 1, 0, 0);
+         QPainterPath path;
+-        path.moveTo(drawRect.topLeft() + QPoint( 0, d->m_topLeftRadius));
+-        path.lineTo(drawRect.bottomLeft() - QPoint( 0, d->m_bottomLeftRadius));
+-        path.quadTo(drawRect.bottomLeft(), drawRect.bottomLeft() + QPoint(d->m_bottomLeftRadius , 0));
+-        path.lineTo(drawRect.bottomRight() - QPoint(d->m_bottomRightRadius ,0));
+-        path.quadTo(drawRect.bottomRight() , drawRect.bottomRight() - QPoint(0 , d->m_bottomRightRadius));
+-        path.lineTo(drawRect.topRight() + QPoint(0 , d->m_topRightRadius));
+-        path.quadTo(drawRect.topRight() , drawRect.topRight() - QPoint(d->m_topRightRadius , 0));
+-        path.lineTo(drawRect.topLeft() + QPoint(d->m_topLeftRadius , 0));
+-        path.quadTo(drawRect.topLeft() , drawRect.topLeft() + QPoint(0, d->m_topLeftRadius));
++        path.moveTo(drawRect.topLeft() + QPoint(0, d->m_topLeftRadius));
++        path.lineTo(drawRect.bottomLeft() - QPoint(0, d->m_bottomLeftRadius));
++        path.quadTo(drawRect.bottomLeft(), drawRect.bottomLeft() + QPoint(d->m_bottomLeftRadius, 0));
++        path.lineTo(drawRect.bottomRight() - QPoint(d->m_bottomRightRadius, 0));
++        path.quadTo(drawRect.bottomRight(), drawRect.bottomRight() - QPoint(0, d->m_bottomRightRadius));
++        path.lineTo(drawRect.topRight() + QPoint(0, d->m_topRightRadius));
++        path.quadTo(drawRect.topRight(), drawRect.topRight() - QPoint(d->m_topRightRadius, 0));
++        path.lineTo(drawRect.topLeft() + QPoint(d->m_topLeftRadius, 0));
++        path.quadTo(drawRect.topLeft(), drawRect.topLeft() + QPoint(0, d->m_topLeftRadius));
+         painter.drawPath(path);
+     }
+ 
+-
+-    //绘制图标
+-    QRect rect(0,0,option.iconSize.width(),option.iconSize.height());
++    // 绘制图标
++    QRect rect(0, 0, option.iconSize.width(), option.iconSize.height());
+     QPixmap pixmap = this->icon().pixmap(option.iconSize);
+-    if(ThemeController::isPixmapPureColor(pixmap))
+-    {
+-        if(d->m_type == KToolButtonType::Flat || !isEnabled())
+-            pixmap = ThemeController::drawColoredPixmap(pixmap,d->m_pixColor);
+-        else if(ThemeController::themeMode() == DarkTheme)
++    if (ThemeController::isPixmapPureColor(pixmap)) {
++        if (d->m_type == KToolButtonType::Flat || !isEnabled())
++            pixmap = ThemeController::drawColoredPixmap(pixmap, d->m_pixColor);
++        else if (ThemeController::themeMode() == DarkTheme)
+             pixmap = ThemeController::drawSymbolicColoredPixmap(pixmap);
+     }
+-    if(d->m_isIconColor)
+-    {
+-        if(isEnabled())
+-            pixmap = ThemeController::drawColoredPixmap(pixmap,d->m_iconColor);
++    if (d->m_isIconColor) {
++        if (isEnabled())
++            pixmap = ThemeController::drawColoredPixmap(pixmap, d->m_iconColor);
+         else
+-//            pixmap = ThemeController::drawColoredPixmap(pixmap,palette().color(QPalette::Disabled,QPalette::HighlightedText));
+-            pixmap = ThemeController::drawColoredPixmap(pixmap,ThemeController::getPaletteColorFromDT("highlightedtext",QPalette::Disabled));
++            //            pixmap = ThemeController::drawColoredPixmap(pixmap,palette().color(QPalette::Disabled,QPalette::HighlightedText));
++            pixmap = ThemeController::drawColoredPixmap(pixmap, ThemeController::getPaletteColorFromDT("highlightedtext", QPalette::Disabled));
+     }
+ 
+-    if(!hasArrow())
+-    {
++    if (!hasArrow()) {
+         rect.moveCenter(this->rect().center());
+-        painter.drawPixmap(rect,pixmap);
+-    }
+-    else
+-    {
+-        QRect newRect = this->rect().adjusted(0,0,-20,0);
++        painter.drawPixmap(rect, pixmap);
++    } else {
++        QRect newRect = this->rect().adjusted(0, 0, -20, 0);
+         rect.moveCenter(newRect.center());
+ 
+-        if(sizePolicy().horizontalPolicy() == QSizePolicy::Expanding)
+-            this->style()->drawItemPixmap(&painter,this->rect(),Qt::AlignCenter,pixmap);
++        if (sizePolicy().horizontalPolicy() == QSizePolicy::Expanding)
++            this->style()->drawItemPixmap(&painter, this->rect(), Qt::AlignCenter, pixmap);
+         else
+-            this->style()->drawItemPixmap(&painter,rect,Qt::AlignCenter,pixmap);
+-        QRect arrowRect(0,0,option.iconSize.width(),option.iconSize.height());
+-        arrowRect.moveLeft(this->rect().width()-option.iconSize.width()-8);
+-        arrowRect.moveTop((this->height()-option.iconSize.height())/2);
++            this->style()->drawItemPixmap(&painter, rect, Qt::AlignCenter, pixmap);
++        QRect arrowRect(0, 0, option.iconSize.width(), option.iconSize.height());
++        arrowRect.moveLeft(this->rect().width() - option.iconSize.width() - 8);
++        arrowRect.moveTop((this->height() - option.iconSize.height()) / 2);
+         QPixmap arrowPixmap = d->m_arrowPixmap;
+-        if(d->m_type == KToolButtonType::Flat || !isEnabled())
+-            arrowPixmap = ThemeController::drawColoredPixmap(arrowPixmap,d->m_pixColor);
+-        else if(ThemeController::themeMode() == DarkTheme)
++        if (d->m_type == KToolButtonType::Flat || !isEnabled())
++            arrowPixmap = ThemeController::drawColoredPixmap(arrowPixmap, d->m_pixColor);
++        else if (ThemeController::themeMode() == DarkTheme)
+             arrowPixmap = ThemeController::drawSymbolicColoredPixmap(arrowPixmap);
+-        painter.drawPixmap(arrowRect,arrowPixmap);
++        painter.drawPixmap(arrowRect, arrowPixmap);
+     }
+ }
+ 
+ KToolButtonPrivate::KToolButtonPrivate(KToolButton *parent)
+-    :q_ptr(parent),
+-      m_hasArrow(false)
++    : q_ptr(parent)
++    , m_hasArrow(false)
+ {
+-      m_hoverColor = Qt::transparent;
+-      m_bkgColor = Qt::transparent;
+-      m_disableColor = Qt::transparent;
+-      m_clickColor = Qt::transparent;
+-      m_focusColor = Qt::transparent;
+-      m_isIconColor = false;
+-      setParent(parent);
++    m_hoverColor = Qt::transparent;
++    m_bkgColor = Qt::transparent;
++    m_disableColor = Qt::transparent;
++    m_clickColor = Qt::transparent;
++    m_focusColor = Qt::transparent;
++    m_isIconColor = false;
++    setParent(parent);
+ }
+ 
+ void KToolButtonPrivate::changePalette()
+ {
+     Q_Q(KToolButton);
+-    switch (this->m_type)
+-    {
+-    case Flat:
+-    {
+-        if(ThemeController::themeMode() == LightTheme)
+-        {
++    switch (this->m_type) {
++    case Flat: {
++        if (ThemeController::themeMode() == LightTheme) {
+             m_bkgColor = Qt::transparent;
+             m_clickColor = Qt::transparent;
+             m_focusColor = Qt::transparent;
+             m_hoverColor = Qt::transparent;
+             m_disableColor = Qt::transparent;
+-        }
+-        else
+-        {
++        } else {
+             m_bkgColor = Qt::transparent;
+             m_clickColor = Qt::transparent;
+             m_focusColor = Qt::transparent;
+             m_hoverColor = Qt::transparent;
+-//            m_disableColor = q->palette().color(QPalette::Disabled,QPalette::Button);
+-            m_disableColor = ThemeController::getPaletteColorFromDT("button",QPalette::Disabled);
++            //            m_disableColor = q->palette().color(QPalette::Disabled,QPalette::Button);
++            m_disableColor = ThemeController::getPaletteColorFromDT("button", QPalette::Disabled);
+         }
+         break;
+     }
+-    case SemiFlat:
+-    {
+-//        QColor baseColor = q->palette().button().color();
++    case SemiFlat: {
++        //        QColor baseColor = q->palette().button().color();
+         QColor baseColor = ThemeController::getPaletteColorFromDT("button");
+-//        QColor mix = q->palette().brightText().color();
++        //        QColor mix = q->palette().brightText().color();
+         QColor mix = ThemeController::getPaletteColorFromDT("brighttext");
+         m_bkgColor = Qt::transparent;
+-        m_clickColor = mixColor(baseColor,mix,0.2);
+-        if(ThemeController::widgetTheme() == ClassicTheme)
+-        {
+-            if(ThemeController::themeMode() == LightTheme)
+-            {
+-                m_clickColor = ThemeController::highlightClick(false,q->palette());
+-                m_clickColor = ThemeController::adjustH(m_clickColor,-3);
+-                m_clickColor = ThemeController::adjustS(m_clickColor,-3);
+-                m_clickColor = ThemeController::adjustL(m_clickColor,-3);
+-
+-                m_hoverColor = ThemeController::highlightHover(false,q->palette());
+-                m_hoverColor = ThemeController::adjustH(m_hoverColor,-3);
+-                m_hoverColor = ThemeController::adjustS(m_hoverColor,-8);
+-                m_hoverColor = ThemeController::adjustL(m_hoverColor,-3);
+-
++        m_clickColor = mixColor(baseColor, mix, 0.2);
++        if (ThemeController::widgetTheme() == ClassicTheme) {
++            if (ThemeController::themeMode() == LightTheme) {
++                m_clickColor = ThemeController::highlightClick(false, q->palette());
++                m_clickColor = ThemeController::adjustH(m_clickColor, -3);
++                m_clickColor = ThemeController::adjustS(m_clickColor, -3);
++                m_clickColor = ThemeController::adjustL(m_clickColor, -3);
++
++                m_hoverColor = ThemeController::highlightHover(false, q->palette());
++                m_hoverColor = ThemeController::adjustH(m_hoverColor, -3);
++                m_hoverColor = ThemeController::adjustS(m_hoverColor, -8);
++                m_hoverColor = ThemeController::adjustL(m_hoverColor, -3);
++
++            } else {
++                m_clickColor = ThemeController::highlightClick(true, q->palette());
++                m_clickColor = ThemeController::adjustH(m_clickColor, -2);
++                m_clickColor = ThemeController::adjustS(m_clickColor, -23);
++                m_clickColor = ThemeController::adjustL(m_clickColor, 11);
++
++                m_hoverColor = ThemeController::highlightHover(true, q->palette());
++                m_hoverColor = ThemeController::adjustH(m_hoverColor, -2);
++                m_hoverColor = ThemeController::adjustS(m_hoverColor, -23);
++                m_hoverColor = ThemeController::adjustL(m_hoverColor, 11);
+             }
+-            else
+-            {
+-                m_clickColor = ThemeController::highlightClick(true,q->palette());
+-                m_clickColor = ThemeController::adjustH(m_clickColor,-2);
+-                m_clickColor = ThemeController::adjustS(m_clickColor,-23);
+-                m_clickColor = ThemeController::adjustL(m_clickColor,11);
+-
+-                m_hoverColor = ThemeController::highlightHover(true,q->palette());
+-                m_hoverColor = ThemeController::adjustH(m_hoverColor,-2);
+-                m_hoverColor = ThemeController::adjustS(m_hoverColor,-23);
+-                m_hoverColor = ThemeController::adjustL(m_hoverColor,11);
++        } else if (ThemeController::widgetTheme() == FashionTheme) {
++            if (ThemeController::themeMode() == LightTheme) {
++                QColor color("#E6E6E6");
++
++                //                    m_pLinearGradient.setColorAt(0,startColor);
++                //                    m_pLinearGradient.setColorAt(1,endColor);
++
++                QColor startColor;
++                QColor endColor;
++                ThemeController::getGradientFromDT("kcomponent-hover", startColor, endColor);
++                if (!startColor.isValid())
++                    startColor = mixColor(color, QColor(Qt::black), 0.05); //("#FFD9D9D9");
++                if (!endColor.isValid())
++                    endColor = mixColor(color, QColor(Qt::black), 0.2); //("#FFBFBFBF");
++
++                m_pLinearGradient.setColorAt(0, startColor);
++                m_pLinearGradient.setColorAt(1, endColor);
++            } else {
++                QColor color("#373737");
++                QColor startColor;
++                QColor endColor;
++
++                ThemeController::getGradientFromDT("kcomponent-hover", startColor, endColor);
++                if (!startColor.isValid())
++                    startColor = mixColor(color, QColor(Qt::white), 0.2); //("#FF5F5F5F");
++                if (!endColor.isValid())
++                    endColor = mixColor(color, QColor(Qt::white), 0.05); //("#FF414141");
++
++                m_pLinearGradient.setColorAt(0, startColor);
++                m_pLinearGradient.setColorAt(1, endColor);
+             }
++        } else {
++            m_hoverColor = mixColor(baseColor, mix, 0.05);
+         }
+-        else if(ThemeController::widgetTheme() == FashionTheme)
+-            {
+-                if(ThemeController::themeMode() == LightTheme)
+-                {
+-                    QColor color("#E6E6E6");
+-
+-//                    m_pLinearGradient.setColorAt(0,startColor);
+-//                    m_pLinearGradient.setColorAt(1,endColor);
+-
+-                    QColor startColor;
+-                    QColor endColor;
+-                    ThemeController::getGradientFromDT("kcomponent-hover",startColor,endColor);
+-                    if(!startColor.isValid())
+-                        startColor = mixColor(color,QColor(Qt::black),0.05);//("#FFD9D9D9");
+-                    if(!endColor.isValid())
+-                        endColor = mixColor(color,QColor(Qt::black),0.2);//("#FFBFBFBF");
+-
+-                    m_pLinearGradient.setColorAt(0,startColor);
+-                    m_pLinearGradient.setColorAt(1,endColor);
+-                }
+-                else
+-                {
+-                    QColor color("#373737");
+-                    QColor startColor;
+-                    QColor endColor;
+-
+-                    ThemeController::getGradientFromDT("kcomponent-hover",startColor,endColor);
+-                    if(!startColor.isValid())
+-                        startColor =  mixColor(color,QColor(Qt::white),0.2);//("#FF5F5F5F");
+-                    if(!endColor.isValid())
+-                        endColor = mixColor(color,QColor(Qt::white),0.05);//("#FF414141");
+-
+-                    m_pLinearGradient.setColorAt(0,startColor);
+-                    m_pLinearGradient.setColorAt(1,endColor);
+-                }
+-            }
+-        else
+-            {
+-                m_hoverColor = mixColor(baseColor,mix,0.05);
+-            }
+         m_disableColor = Qt::transparent;
+         break;
+     }
+-    case Background:
+-    {
+-//        QColor baseColor = q->palette().button().color();
++    case Background: {
++        //        QColor baseColor = q->palette().button().color();
+         QColor baseColor = ThemeController::getPaletteColorFromDT("button");
+-//        QColor mix = q->palette().brightText().color();
++        //        QColor mix = q->palette().brightText().color();
+         QColor mix = ThemeController::getPaletteColorFromDT("brighttext");
+         m_bkgColor = baseColor;
+-        m_clickColor = mixColor(baseColor,mix,0.2);
++        m_clickColor = mixColor(baseColor, mix, 0.2);
+         m_focusColor = baseColor;
+-        if(ThemeController::widgetTheme() == ClassicTheme)
+-        {
+-            if(ThemeController::themeMode() == LightTheme)
+-            {
+-                m_clickColor = ThemeController::highlightClick(false,q->palette());
+-                m_clickColor = ThemeController::adjustH(m_clickColor,-3);
+-                m_clickColor = ThemeController::adjustS(m_clickColor,-3);
+-                m_clickColor = ThemeController::adjustL(m_clickColor,-3);
+-
+-                m_hoverColor = ThemeController::highlightHover(false,q->palette());
+-                m_hoverColor = ThemeController::adjustH(m_hoverColor,-3);
+-                m_hoverColor = ThemeController::adjustS(m_hoverColor,-8);
+-                m_hoverColor = ThemeController::adjustL(m_hoverColor,-3);
++        if (ThemeController::widgetTheme() == ClassicTheme) {
++            if (ThemeController::themeMode() == LightTheme) {
++                m_clickColor = ThemeController::highlightClick(false, q->palette());
++                m_clickColor = ThemeController::adjustH(m_clickColor, -3);
++                m_clickColor = ThemeController::adjustS(m_clickColor, -3);
++                m_clickColor = ThemeController::adjustL(m_clickColor, -3);
++
++                m_hoverColor = ThemeController::highlightHover(false, q->palette());
++                m_hoverColor = ThemeController::adjustH(m_hoverColor, -3);
++                m_hoverColor = ThemeController::adjustS(m_hoverColor, -8);
++                m_hoverColor = ThemeController::adjustL(m_hoverColor, -3);
++            } else {
++                m_clickColor = ThemeController::highlightClick(true, q->palette());
++                m_clickColor = ThemeController::adjustH(m_clickColor, -2);
++                m_clickColor = ThemeController::adjustS(m_clickColor, -23);
++                m_clickColor = ThemeController::adjustL(m_clickColor, 11);
++
++                m_hoverColor = ThemeController::highlightHover(true, q->palette());
++                m_hoverColor = ThemeController::adjustH(m_hoverColor, -2);
++                m_hoverColor = ThemeController::adjustS(m_hoverColor, -23);
++                m_hoverColor = ThemeController::adjustL(m_hoverColor, 11);
+             }
+-            else
+-            {
+-                m_clickColor = ThemeController::highlightClick(true,q->palette());
+-                m_clickColor = ThemeController::adjustH(m_clickColor,-2);
+-                m_clickColor = ThemeController::adjustS(m_clickColor,-23);
+-                m_clickColor = ThemeController::adjustL(m_clickColor,11);
+-
+-                m_hoverColor = ThemeController::highlightHover(true,q->palette());
+-                m_hoverColor = ThemeController::adjustH(m_hoverColor,-2);
+-                m_hoverColor = ThemeController::adjustS(m_hoverColor,-23);
+-                m_hoverColor = ThemeController::adjustL(m_hoverColor,11);
+-            }
+-        }
+-        else if(ThemeController::widgetTheme()==FashionTheme)
+-        {
+-            if(ThemeController::themeMode() == LightTheme)
+-            {
++        } else if (ThemeController::widgetTheme() == FashionTheme) {
++            if (ThemeController::themeMode() == LightTheme) {
+                 QColor color("#E6E6E6");
+ 
+                 QColor startColor;
+                 QColor endColor;
+-                ThemeController::getGradientFromDT("kcomponent-hover",startColor,endColor);
+-                if(!startColor.isValid())
+-                    startColor = mixColor(color,QColor(Qt::black),0.05);//("#FFD9D9D9");
+-                if(!endColor.isValid())
+-                    endColor = mixColor(color,QColor(Qt::black),0.2);//("#FFBFBFBF");
+-
+-                m_pLinearGradient.setColorAt(0,startColor);
+-                m_pLinearGradient.setColorAt(1,endColor);
+-            }
+-            else
+-            {
++                ThemeController::getGradientFromDT("kcomponent-hover", startColor, endColor);
++                if (!startColor.isValid())
++                    startColor = mixColor(color, QColor(Qt::black), 0.05); //("#FFD9D9D9");
++                if (!endColor.isValid())
++                    endColor = mixColor(color, QColor(Qt::black), 0.2); //("#FFBFBFBF");
++
++                m_pLinearGradient.setColorAt(0, startColor);
++                m_pLinearGradient.setColorAt(1, endColor);
++            } else {
+                 QColor color("#373737");
+ 
+-
+                 QColor startColor;
+                 QColor endColor;
+-                ThemeController::getGradientFromDT("kcomponent-hover",startColor,endColor);
+-                if(!startColor.isValid())
+-                    startColor = mixColor(color,QColor(Qt::white),0.2);//("#FF5F5F5F");
+-                if(!endColor.isValid())
+-                    endColor = mixColor(color,QColor(Qt::white),0.05);//("#FF414141");
+-
+-                m_pLinearGradient.setColorAt(0,startColor);
+-                m_pLinearGradient.setColorAt(1,endColor);
++                ThemeController::getGradientFromDT("kcomponent-hover", startColor, endColor);
++                if (!startColor.isValid())
++                    startColor = mixColor(color, QColor(Qt::white), 0.2); //("#FF5F5F5F");
++                if (!endColor.isValid())
++                    endColor = mixColor(color, QColor(Qt::white), 0.05); //("#FF414141");
++
++                m_pLinearGradient.setColorAt(0, startColor);
++                m_pLinearGradient.setColorAt(1, endColor);
+             }
++        } else {
++            m_hoverColor = mixColor(baseColor, mix, 0.05);
+         }
+-        else
+-            {
+-                m_hoverColor = mixColor(baseColor,mix,0.05);
+-            }
+-//        m_disableColor = q->palette().color(QPalette::Disabled,QPalette::Button);
+-        m_disableColor = ThemeController::getPaletteColorFromDT("button",QPalette::Disabled);
++        //        m_disableColor = q->palette().color(QPalette::Disabled,QPalette::Button);
++        m_disableColor = ThemeController::getPaletteColorFromDT("button", QPalette::Disabled);
+         break;
+     }
+-    case Frameless:
+-    {
+-//        QColor baseColor = q->palette().button().color();
++    case Frameless: {
++        //        QColor baseColor = q->palette().button().color();
+         QColor baseColor = ThemeController::getPaletteColorFromDT("button");
+-//        QColor mix = q->palette().brightText().color();
++        //        QColor mix = q->palette().brightText().color();
+         QColor mix = ThemeController::getPaletteColorFromDT("brighttext");
+-        if(m_isBkgColorEnable)
++        if (m_isBkgColorEnable)
+             m_bkgColor = baseColor;
+         else
+             m_bkgColor = Qt::transparent;
+-        m_clickColor = mixColor(baseColor,mix,0.2);
++        m_clickColor = mixColor(baseColor, mix, 0.2);
+         m_focusColor = baseColor;
+-        if(ThemeController::widgetTheme()==FashionTheme)
+-            {
+-            if(ThemeController::themeMode() == LightTheme)
+-            {
++        if (ThemeController::widgetTheme() == FashionTheme) {
++            if (ThemeController::themeMode() == LightTheme) {
+                 QColor color("#E6E6E6");
+-                QColor startColor = mixColor(color,QColor(Qt::black),0.05);//("#FFD9D9D9");
+-                QColor endColor = mixColor(color,QColor(Qt::black),0.2);//("#FFBFBFBF");
+-                m_pLinearGradient.setColorAt(0,startColor);
+-                m_pLinearGradient.setColorAt(1,endColor);
+-            }
+-            else
+-            {
++                QColor startColor = mixColor(color, QColor(Qt::black), 0.05); //("#FFD9D9D9");
++                QColor endColor = mixColor(color, QColor(Qt::black), 0.2); //("#FFBFBFBF");
++                m_pLinearGradient.setColorAt(0, startColor);
++                m_pLinearGradient.setColorAt(1, endColor);
++            } else {
+                 QColor color("#373737");
+-                QColor startColor = mixColor(color,QColor(Qt::white),0.2);//("#FF5F5F5F");
+-                QColor endColor = mixColor(color,QColor(Qt::white),0.05);//("#FF414141");
+-                m_pLinearGradient.setColorAt(0,startColor);
+-                m_pLinearGradient.setColorAt(1,endColor);
+-            }
+-            }
+-        else
+-            {
+-                m_hoverColor = mixColor(baseColor,mix,0.05);
++                QColor startColor = mixColor(color, QColor(Qt::white), 0.2); //("#FF5F5F5F");
++                QColor endColor = mixColor(color, QColor(Qt::white), 0.05); //("#FF414141");
++                m_pLinearGradient.setColorAt(0, startColor);
++                m_pLinearGradient.setColorAt(1, endColor);
+             }
+-//        m_disableColor = q->palette().color(QPalette::Disabled,QPalette::Button);
+-        m_disableColor = ThemeController::getPaletteColorFromDT("button",QPalette::Disabled);
++        } else {
++            m_hoverColor = mixColor(baseColor, mix, 0.05);
++        }
++        //        m_disableColor = q->palette().color(QPalette::Disabled,QPalette::Button);
++        m_disableColor = ThemeController::getPaletteColorFromDT("button", QPalette::Disabled);
+         break;
+     }
+     default:
+         break;
+     }
+-
+ }
+ 
+ void KToolButtonPrivate::doLoadingFlash()
+ {
+     Q_Q(KToolButton);
+-    if(m_flashState < 7)
++    if (m_flashState < 7)
+         m_flashState++;
+     else
+         m_flashState = 0;
+-    if (ThemeController::themeMode() == LightTheme)
+-    {
++    if (ThemeController::themeMode() == LightTheme) {
+         q->QToolButton::setIcon(QIcon::fromTheme(QString("ukui-loading-%1.symbolic").arg(m_flashState)));
+-    }
+-    else
+-    {
+-        q->QToolButton::setIcon(ThemeController::drawColoredPixmap(QIcon::fromTheme(QString("ukui-loading-%1.symbolic").arg(m_flashState)).pixmap(q->iconSize()),QColor(255,255,255)));
++    } else {
++        q->QToolButton::setIcon(ThemeController::drawColoredPixmap(QIcon::fromTheme(QString("ukui-loading-%1.symbolic").arg(m_flashState)).pixmap(q->iconSize()), QColor(255, 255, 255)));
+     }
+ }
+ 
+@@ -795,18 +699,16 @@ void KToolButtonPrivate::changeTheme()
+ 
+     initThemeStyle();
+     changePalette();
+-    if (ThemeController::themeMode() == LightTheme)
+-    {
+-        if(q->isEnabled())
+-            m_pixColor = QColor(31,32,34);
++    if (ThemeController::themeMode() == LightTheme) {
++        if (q->isEnabled())
++            m_pixColor = QColor(31, 32, 34);
+         else
+-            m_pixColor = QColor(191,191,191);
+-    }
+-    else
+-    {   if(q->isEnabled())
+-            m_pixColor = QColor(255,255,255);
++            m_pixColor = QColor(191, 191, 191);
++    } else {
++        if (q->isEnabled())
++            m_pixColor = QColor(255, 255, 255);
+         else
+-            m_pixColor = QColor(95,99,104);
++            m_pixColor = QColor(95, 99, 104);
+     }
+ }
+ }
+diff --git a/kysdk-qtwidgets/src/ktoolbutton.h b/kysdk-qtwidgets/src/ktoolbutton.h
+index c6d6ba0..392f3c7 100644
+--- a/kysdk-qtwidgets/src/ktoolbutton.h
++++ b/kysdk-qtwidgets/src/ktoolbutton.h
+@@ -23,23 +23,22 @@
+ #ifndef KTOOLBUTTON_H
+ #define KTOOLBUTTON_H
+ 
++#include "gui_g.h"
++#include <QEvent>
+ #include <QToolButton>
+ #include <QWidget>
+-#include <QEvent>
+-#include "gui_g.h"
+ 
+ namespace kdk
+ {
+ 
+ /** @defgroup PushbuttonModule
+-  * @{
+-  */
++ * @{
++ */
+ 
+ /**
+  * @brief 支持三种样式,暂不支持文字显示
+  */
+-enum KToolButtonType
+-{
++enum KToolButtonType {
+     Flat,
+     SemiFlat,
+     Background,
+@@ -51,12 +50,12 @@ class KToolButtonPrivate;
+ /**
+  * @brief 提供了一个快速访问按钮,暂不支持显示文本
+  */
+-class GUI_EXPORT KToolButton:public QToolButton
++class GUI_EXPORT KToolButton : public QToolButton
+ {
+     Q_OBJECT
+ 
+ public:
+-    KToolButton(QWidget*parent);
++    KToolButton(QWidget *parent);
+ 
+     /**
+      * @brief 返回类型
+@@ -74,7 +73,7 @@ public:
+      * @brief 设置Icon
+      * @param icon
+      */
+-    void setIcon(const QIcon& icon);
++    void setIcon(const QIcon &icon);
+ 
+     /**
+      * @brief 设置正在加载状态,仅不带箭头的toolbuttuon支持该状态
+@@ -112,10 +111,9 @@ public:
+      * @param color
+      * @since 2.4
+      */
+-    void setIconColor(bool flag,QColor color);
+-
+-    void setBorderRadius(int bottomLeft,int topLeft,int topRight,int bottomRight);
++    void setIconColor(bool flag, QColor color);
+ 
++    void setBorderRadius(int bottomLeft, int topLeft, int topRight, int bottomRight);
+ 
+     void setBackgroundColorEnabled(bool flag);
+ 
+@@ -129,15 +127,14 @@ protected:
+     QSize sizeHint() const;
+     void paintEvent(QPaintEvent *event);
+ 
+-
+ private:
+     Q_DECLARE_PRIVATE(KToolButton)
+-    KToolButtonPrivate*const d_ptr;
++    KToolButtonPrivate *const d_ptr;
+ };
+ }
+ /**
+-  * @example testtoolbutton/widget.h
+-  * @example testtoolbutton/widget.cpp
+-  * @}
+-  */
++ * @example testtoolbutton/widget.h
++ * @example testtoolbutton/widget.cpp
++ * @}
++ */
+ #endif // KTOOLBUTTON_H
+diff --git a/kysdk-qtwidgets/src/ktranslucentfloor.cpp b/kysdk-qtwidgets/src/ktranslucentfloor.cpp
+index 3f866a2..c3d7aa0 100644
+--- a/kysdk-qtwidgets/src/ktranslucentfloor.cpp
++++ b/kysdk-qtwidgets/src/ktranslucentfloor.cpp
+@@ -21,26 +21,26 @@
+  */
+ 
+ #include "ktranslucentfloor.h"
+-#include <QPainter>
++#include "kshadowhelper.h"
++#include "themeController.h"
+ #include <QDebug>
+ #include <QPainter>
+-#include "kshadowhelper.h"
++#include <QPainterPath>
+ #include <QRegion>
+ #include <kwindoweffects.h>
+-#include <QPainterPath>
+-#include "themeController.h"
+ 
+-namespace kdk {
++namespace kdk
++{
+ 
+-class KTranslucentFloorPrivate :public QObject
++class KTranslucentFloorPrivate : public QObject
+ {
+     Q_OBJECT
+     Q_DECLARE_PUBLIC(KTranslucentFloor)
+ public:
+-    KTranslucentFloorPrivate(KTranslucentFloor* parent);
++    KTranslucentFloorPrivate(KTranslucentFloor *parent);
+ 
+ private:
+-    KTranslucentFloor* q_ptr;
++    KTranslucentFloor *q_ptr;
+     int m_radius;
+     bool m_shadowFlag;
+     bool m_enableBlur;
+@@ -48,22 +48,21 @@ private:
+ };
+ 
+ KTranslucentFloor::KTranslucentFloor(QWidget *parent)
+-    :QFrame(parent),
+-      d_ptr(new KTranslucentFloorPrivate(this))
++    : QFrame(parent)
++    , d_ptr(new KTranslucentFloorPrivate(this))
+ {
+     Q_D(KTranslucentFloor);
+ 
+     setWindowFlags(Qt::FramelessWindowHint);
+-    setAttribute(Qt::WA_TranslucentBackground,true);
++    setAttribute(Qt::WA_TranslucentBackground, true);
+ }
+ 
+ void KTranslucentFloor::setBorderRadius(int radius)
+ {
+     Q_D(KTranslucentFloor);
+     d->m_radius = radius;
+-    if(shadow())
+-    {
+-        effects::KShadowHelper::self()->setWidget(this,d->m_radius);
++    if (shadow()) {
++        effects::KShadowHelper::self()->setWidget(this, d->m_radius);
+     }
+ }
+ 
+@@ -77,8 +76,8 @@ void KTranslucentFloor::setShadow(bool flag)
+ {
+     Q_D(KTranslucentFloor);
+     d->m_shadowFlag = flag;
+-    if(d->m_shadowFlag)
+-        effects::KShadowHelper::self()->setWidget(this,d->m_radius);
++    if (d->m_shadowFlag)
++        effects::KShadowHelper::self()->setWidget(this, d->m_radius);
+ }
+ 
+ bool KTranslucentFloor::shadow()
+@@ -117,40 +116,36 @@ void KTranslucentFloor::paintEvent(QPaintEvent *event)
+ 
+     QPainterPath path;
+     QRect rect = this->rect();
+-    path.addRoundedRect(rect,d->m_radius,d->m_radius);
++    path.addRoundedRect(rect, d->m_radius, d->m_radius);
+ 
+     QPainter painter(this);
+     painter.setRenderHints(QPainter::Antialiasing);
+     painter.setRenderHints(QPainter::HighQualityAntialiasing);
+ 
+-    if(d->m_enableBlur)
+-    {
+-        //开启毛玻璃时
++    if (d->m_enableBlur) {
++        // 开启毛玻璃时
+         QRegion region(path.toFillPolygon().toPolygon());
+-        KWindowEffects::enableBlurBehind(this->winId(),true,region);
++        KWindowEffects::enableBlurBehind(this->winId(), true, region);
+         this->setMask(region);
+         painter.setOpacity(d->m_opacity);
+-    }
+-    else
+-    {
+-        //未开启毛玻璃时
++    } else {
++        // 未开启毛玻璃时
+         painter.setOpacity(1);
+     }
+     painter.setPen(Qt::NoPen);
+-//    painter.setBrush(this->palette().color(this->backgroundRole()));
++    //    painter.setBrush(this->palette().color(this->backgroundRole()));
+     painter.setBrush(ThemeController::getPaletteColorFromDT("window"));
+     painter.drawPath(path);
+-
+ }
+ 
+ KTranslucentFloorPrivate::KTranslucentFloorPrivate(KTranslucentFloor *parent)
+-    :q_ptr(parent),
+-     m_shadowFlag(true),
+-     m_enableBlur(true),
+-     m_opacity(0.5)
++    : q_ptr(parent)
++    , m_shadowFlag(true)
++    , m_enableBlur(true)
++    , m_opacity(0.5)
+ {
+     m_radius = ThemeController::getRadiusFromDT("kradius-window");
+-    if(m_radius == -1)
++    if (m_radius == -1)
+         m_radius = 12;
+ }
+ }
+diff --git a/kysdk-qtwidgets/src/ktranslucentfloor.h b/kysdk-qtwidgets/src/ktranslucentfloor.h
+index e5000c0..35098e1 100644
+--- a/kysdk-qtwidgets/src/ktranslucentfloor.h
++++ b/kysdk-qtwidgets/src/ktranslucentfloor.h
+@@ -26,7 +26,8 @@
+ #include "gui_g.h"
+ #include <QFrame>
+ 
+-namespace kdk {
++namespace kdk
++{
+ 
+ /**
+  *  @defgroup FormModule
+@@ -41,7 +42,7 @@ class GUI_EXPORT KTranslucentFloor : public QFrame
+ {
+     Q_OBJECT
+ public:
+-    KTranslucentFloor(QWidget* parent =nullptr);
++    KTranslucentFloor(QWidget *parent = nullptr);
+ 
+     /**
+      * @brief 设置圆角半径
+@@ -95,7 +96,7 @@ protected:
+     void paintEvent(QPaintEvent *);
+ 
+ private:
+-    KTranslucentFloorPrivate*const d_ptr;
++    KTranslucentFloorPrivate *const d_ptr;
+     Q_DECLARE_PRIVATE(KTranslucentFloor)
+ };
+ }
+diff --git a/kysdk-qtwidgets/src/kuninstalldialog.cpp b/kysdk-qtwidgets/src/kuninstalldialog.cpp
+index 4cf13a0..d50c268 100644
+--- a/kysdk-qtwidgets/src/kuninstalldialog.cpp
++++ b/kysdk-qtwidgets/src/kuninstalldialog.cpp
+@@ -20,54 +20,53 @@
+  *
+  */
+ 
+-#include <QLocale>
++#include "kuninstalldialog.h"
++#include <QByteArray>
++#include <QFileDialog>
+ #include <QFont>
++#include <QLocale>
++#include <QStandardPaths>
+ #include <QVariant>
+ #include <QtSql/QSqlDatabase>
+ #include <QtSql/QSqlQuery>
+ #include <QtSql/QSqlRecord>
+-#include <QStandardPaths>
+-#include <QByteArray>
+-#include <QFileDialog>
+-#include "kuninstalldialog.h"
+ 
+ namespace kdk
+ {
+-class KUninstallDialogPrivate:public QObject
++class KUninstallDialogPrivate : public QObject
+ {
+     Q_DECLARE_PUBLIC(KUninstallDialog)
+     Q_OBJECT
+ 
+ public:
+-    KUninstallDialogPrivate(KUninstallDialog*parent);
+-    QString      getIconPath(QString appName);
+-    QString      setLabelStringBody(QString text, QLabel *lable);
+-    QString      getAppCnName(QString appName);
+-    void         resetAppInfo(QString appName, QString appVersion);
+-    void         fontGsettingInit();
+-    void         setLabelText();
++    KUninstallDialogPrivate(KUninstallDialog *parent);
++    QString getIconPath(QString appName);
++    QString setLabelStringBody(QString text, QLabel *lable);
++    QString getAppCnName(QString appName);
++    void resetAppInfo(QString appName, QString appVersion);
++    void fontGsettingInit();
++    void setLabelText();
+ 
+ private:
+-    KUninstallDialog* q_ptr;
+-    QString      m_appName;
+-    QString      m_appVersion;
+-    QVBoxLayout  *debInfoLayout;
+-    QWidget      *IconAndAppNameWidget;
+-    QHBoxLayout  *IconAndAppNameLayout;
+-    QWidget      *debNameAndVersionWidget;
+-    QHBoxLayout  *debNameAndVersionLayout;
+-    QWidget      *nameVersionWidget;
+-    QVBoxLayout  *nameVersionVLayout;
+-    QGSettings   *m_pGsettingFontSize;
+-    QLabel       *debIconLabel;
+-    QLabel       *debAppNameLabel;
+-    QLabel       *debNameLabel;
+-    QLabel       *debVersionLabel;
+-    QPushButton * m_pUninstallBtn;
++    KUninstallDialog *q_ptr;
++    QString m_appName;
++    QString m_appVersion;
++    QVBoxLayout *debInfoLayout;
++    QWidget *IconAndAppNameWidget;
++    QHBoxLayout *IconAndAppNameLayout;
++    QWidget *debNameAndVersionWidget;
++    QHBoxLayout *debNameAndVersionLayout;
++    QWidget *nameVersionWidget;
++    QVBoxLayout *nameVersionVLayout;
++    QGSettings *m_pGsettingFontSize;
++    QLabel *debIconLabel;
++    QLabel *debAppNameLabel;
++    QLabel *debNameLabel;
++    QLabel *debVersionLabel;
++    QPushButton *m_pUninstallBtn;
+ };
+ KUninstallDialog::~KUninstallDialog()
+ {
+-
+ }
+ 
+ QLabel *KUninstallDialog::debAppNameLabel()
+@@ -103,26 +102,23 @@ QPushButton *KUninstallDialog::uninstallButtton()
+ void KUninstallDialog::changeTheme()
+ {
+     KDialog::changeTheme();
+-    if(ThemeController::themeMode() == LightTheme)
+-    {
+-        //to do 还没有具体的设计图 只有截图
+-    }
+-    else
+-    {
+-        //to do 还没有具体的设计图 只有截图
++    if (ThemeController::themeMode() == LightTheme) {
++        // to do 还没有具体的设计图 只有截图
++    } else {
++        // to do 还没有具体的设计图 只有截图
+     }
+ }
+ 
+ KUninstallDialog::KUninstallDialog(QString appName, QString appVersion, QWidget *parent)
+-    :KDialog(parent),
+-      d_ptr(new KUninstallDialogPrivate(this))
++    : KDialog(parent)
++    , d_ptr(new KUninstallDialogPrivate(this))
+ {
+     Q_D(KUninstallDialog);
+     d->m_appName = appName;
+     d->m_appVersion = appVersion;
+ 
+     setWindowTitle(tr("uninstall"));
+-    this->setFixedSize(550,450);
++    this->setFixedSize(550, 450);
+ 
+     d->debInfoLayout = new QVBoxLayout();
+     d->debInfoLayout->setContentsMargins(0, 0, 0, 0);
+@@ -131,28 +127,25 @@ KUninstallDialog::KUninstallDialog(QString appName, QString appVersion, QWidget
+     d->IconAndAppNameWidget->setContentsMargins(0, 0, 0, 0);
+ 
+     d->IconAndAppNameLayout = new QHBoxLayout();
+-    d->IconAndAppNameLayout->setContentsMargins(0,0,0,0);
++    d->IconAndAppNameLayout->setContentsMargins(0, 0, 0, 0);
+     d->IconAndAppNameLayout->setSpacing(0);
+     d->debIconLabel = new QLabel();
+     d->debIconLabel->setFixedSize(48, 48);
+ 
+     /*先判断主题中是否有icon*/
+-    if (QIcon::fromTheme(d->m_appName).isNull())
+-    {
++    if (QIcon::fromTheme(d->m_appName).isNull()) {
+         QPixmap pixmap = QPixmap(d->getIconPath(d->m_appName));
+-        pixmap.scaled(QSize(48,48), Qt::KeepAspectRatio);
+-        d->debIconLabel->setPixmap(QIcon(QPixmap(d->getIconPath(d->m_appName))).pixmap(QSize(48,48)));
+-        setWindowIcon(QIcon(QPixmap(d->getIconPath(d->m_appName))).pixmap(QSize(24,24)));
+-    }
+-    else
+-    {
+-        d->debIconLabel->setPixmap(QIcon::fromTheme(d->m_appName).pixmap(QSize(48,48)));
+-        setWindowIcon(QIcon::fromTheme(d->m_appName).pixmap(QSize(24,24)));
++        pixmap.scaled(QSize(48, 48), Qt::KeepAspectRatio);
++        d->debIconLabel->setPixmap(QIcon(QPixmap(d->getIconPath(d->m_appName))).pixmap(QSize(48, 48)));
++        setWindowIcon(QIcon(QPixmap(d->getIconPath(d->m_appName))).pixmap(QSize(24, 24)));
++    } else {
++        d->debIconLabel->setPixmap(QIcon::fromTheme(d->m_appName).pixmap(QSize(48, 48)));
++        setWindowIcon(QIcon::fromTheme(d->m_appName).pixmap(QSize(24, 24)));
+     }
+     d->debIconLabel->adjustSize();
+     d->fontGsettingInit();
+     d->debAppNameLabel = new QLabel();
+-    QFont font2 =  d->debAppNameLabel->font();
++    QFont font2 = d->debAppNameLabel->font();
+     font2.setPixelSize(d->m_pGsettingFontSize->get(GSETTING_FONT_KEY).toInt() * 2.5);
+     d->debAppNameLabel->setFont(font2);
+     d->debAppNameLabel->setFixedWidth(331);
+@@ -160,8 +153,7 @@ KUninstallDialog::KUninstallDialog(QString appName, QString appVersion, QWidget
+     if (locale.language() == QLocale::Chinese) {
+         if (d->getAppCnName(d->m_appName).isNull()) {
+             d->debAppNameLabel->setText(d->setLabelStringBody(d->m_appName, d->debAppNameLabel));
+-        }
+-        else {
++        } else {
+             d->debAppNameLabel->setText(d->setLabelStringBody(d->getAppCnName(d->m_appName), d->debAppNameLabel));
+         }
+     } else {
+@@ -178,7 +170,7 @@ KUninstallDialog::KUninstallDialog(QString appName, QString appVersion, QWidget
+ 
+     d->debNameAndVersionWidget = new QWidget();
+     d->debNameAndVersionLayout = new QHBoxLayout();
+-    d->debNameAndVersionLayout->setContentsMargins(0,0,0,0);
++    d->debNameAndVersionLayout->setContentsMargins(0, 0, 0, 0);
+     d->debNameAndVersionLayout->setSpacing(0);
+ 
+     d->debNameLabel = new QLabel();
+@@ -213,8 +205,8 @@ KUninstallDialog::KUninstallDialog(QString appName, QString appVersion, QWidget
+     d->debInfoLayout->addWidget(d->debNameAndVersionWidget);
+     d->debInfoLayout->addSpacing(25);
+ 
+-    d->m_pUninstallBtn = new QPushButton(tr("uninstall"),this);
+-    d->m_pUninstallBtn->setFixedSize(122,40);
++    d->m_pUninstallBtn = new QPushButton(tr("uninstall"), this);
++    d->m_pUninstallBtn->setFixedSize(122, 40);
+     QWidget *pBtnWidget = new QWidget();
+     QHBoxLayout *hLayout = new QHBoxLayout();
+     hLayout->addItem(new QSpacerItem(184, 10, QSizePolicy::Fixed));
+@@ -228,7 +220,7 @@ KUninstallDialog::KUninstallDialog(QString appName, QString appVersion, QWidget
+ }
+ 
+ KUninstallDialogPrivate::KUninstallDialogPrivate(KUninstallDialog *parent)
+-    :q_ptr(parent)
++    : q_ptr(parent)
+ {
+     setParent(parent);
+ }
+@@ -238,7 +230,7 @@ QString KUninstallDialogPrivate::getIconPath(QString appName)
+     QString iconFilePath;
+     /*cr判断~/.cache/icons下是否有icon*/
+     iconFilePath.clear();
+-    iconFilePath = QStandardPaths::writableLocation(QStandardPaths::HomeLocation) + "/.cache/uksc/icons/"+appName + ".png";
++    iconFilePath = QStandardPaths::writableLocation(QStandardPaths::HomeLocation) + "/.cache/uksc/icons/" + appName + ".png";
+     if (QFile::exists(iconFilePath)) {
+         return iconFilePath;
+     }
+@@ -257,7 +249,7 @@ QString KUninstallDialogPrivate::setLabelStringBody(QString text, QLabel *lable)
+     int LableWidth = lable->width();
+     int fontSize = fontMetrics.width(text);
+     QString formatBody = text;
+-    if(fontSize > (LableWidth - 10)) {
++    if (fontSize > (LableWidth - 10)) {
+         formatBody = fontMetrics.elidedText(formatBody, Qt::ElideRight, LableWidth - 10);
+         return formatBody;
+     }
+@@ -272,8 +264,8 @@ QString KUninstallDialogPrivate::getAppCnName(QString appName)
+         return nullptr;
+     }
+     QSqlQuery query;
+-    query.exec(QString("SELECT * FROM application WHERE app_name IS '%1'").arg(appName));	//执行
+-    while(query.next()) {
++    query.exec(QString("SELECT * FROM application WHERE app_name IS '%1'").arg(appName)); // 执行
++    while (query.next()) {
+         return query.value(4).toString();
+     }
+     db.close();
+@@ -287,19 +279,17 @@ void KUninstallDialogPrivate::resetAppInfo(QString appName, QString appVersion)
+     m_appName = appName;
+     m_appVersion = appVersion;
+     /*先判断主题中是否有icon*/
+-    if (QIcon::fromTheme(m_appName).isNull())
+-    {
++    if (QIcon::fromTheme(m_appName).isNull()) {
+         QPixmap pixmap = QPixmap(getIconPath(m_appName));
+-        pixmap.scaled(QSize(48,48), Qt::KeepAspectRatio);
+-        debIconLabel->setPixmap(QIcon(QPixmap(getIconPath(m_appName))).pixmap(QSize(48,48)));
+-    } else
+-    {
+-        debIconLabel->setPixmap(QIcon::fromTheme(m_appName).pixmap(QSize(48,48)));
++        pixmap.scaled(QSize(48, 48), Qt::KeepAspectRatio);
++        debIconLabel->setPixmap(QIcon(QPixmap(getIconPath(m_appName))).pixmap(QSize(48, 48)));
++    } else {
++        debIconLabel->setPixmap(QIcon::fromTheme(m_appName).pixmap(QSize(48, 48)));
+     }
+ 
+     if (getAppCnName(m_appName).isNull())
+         debAppNameLabel->setText(m_appName);
+-     else
++    else
+         debAppNameLabel->setText(getAppCnName(m_appName));
+ 
+     QString debName = tr("deb name:");
+@@ -310,8 +300,7 @@ void KUninstallDialogPrivate::resetAppInfo(QString appName, QString appVersion)
+     debVersion.append(appVersion);
+     debVersionLabel->setText(debVersion);
+     debVersionLabel->adjustSize();
+-    if (debVersionLabel->width() > 329)
+-    {
++    if (debVersionLabel->width() > 329) {
+         debVersionLabel->setText(debVersion.left(20) + "...");
+         debVersionLabel->setToolTip(debVersion);
+     }
+@@ -322,10 +311,8 @@ void KUninstallDialogPrivate::fontGsettingInit()
+     Q_Q(KUninstallDialog);
+     const QByteArray style_id(ORG_UKUI_STYLE_FONT);
+     m_pGsettingFontSize = new QGSettings(style_id);
+-    connect(m_pGsettingFontSize, &QGSettings::changed, this, [=] (const QString &key)
+-    {
+-        if (key == GSETTING_FONT_KEY)
+-        {
++    connect(m_pGsettingFontSize, &QGSettings::changed, this, [=](const QString &key) {
++        if (key == GSETTING_FONT_KEY) {
+             setLabelText();
+         }
+     });
+@@ -338,17 +325,13 @@ void KUninstallDialogPrivate::setLabelText()
+     font.setPixelSize(m_pGsettingFontSize->get(GSETTING_FONT_KEY).toDouble() * 2.5);
+     debAppNameLabel->setFont(font);
+     QLocale locale;
+-    if (locale.language() == QLocale::Chinese)
+-    {
+-        if (getAppCnName(m_appName).isNull())
+-        {
++    if (locale.language() == QLocale::Chinese) {
++        if (getAppCnName(m_appName).isNull()) {
+             q->setWindowTitle(setLabelStringBody(m_appName, debAppNameLabel));
+-        } else
+-        {
++        } else {
+             q->setWindowTitle(setLabelStringBody(getAppCnName(m_appName), debAppNameLabel));
+         }
+-    } else
+-    {
++    } else {
+         q->setWindowTitle(setLabelStringBody(m_appName, debAppNameLabel));
+     }
+ }
+diff --git a/kysdk-qtwidgets/src/kuninstalldialog.h b/kysdk-qtwidgets/src/kuninstalldialog.h
+index 8d03ddf..a4821e9 100644
+--- a/kysdk-qtwidgets/src/kuninstalldialog.h
++++ b/kysdk-qtwidgets/src/kuninstalldialog.h
+@@ -23,21 +23,21 @@
+ #ifndef KUNINSTALLDIALOG_H
+ #define KUNINSTALLDIALOG_H
+ 
++#include "gui_g.h"
++#include "kdialog.h"
++#include "themeController.h"
+ #include <QDialog>
+-#include <QWidget>
+-#include <QPushButton>
+ #include <QLabel>
+ #include <QLayout>
+-#include "gui_g.h"
+-#include "themeController.h"
+-#include "kdialog.h"
++#include <QPushButton>
++#include <QWidget>
+ 
+ namespace kdk
+ {
+ 
+ /** @defgroup DialogBoxModule
+-  * @{
+-  */
++ * @{
++ */
+ 
+ static const QByteArray ORG_UKUI_STYLE_FONT = "org.ukui.style";
+ static const QByteArray GSETTING_FONT_KEY = "systemFontSize";
+@@ -47,55 +47,55 @@ class KUninstallDialogPrivate;
+ /**
+  * @brief 卸载对话框,当用户卸载时可能会弹出此提示对话框
+  */
+-class GUI_EXPORT KUninstallDialog:public KDialog
++class GUI_EXPORT KUninstallDialog : public KDialog
+ {
+     Q_OBJECT
+ 
+ public:
+-    KUninstallDialog(QString appName, QString appVersion, QWidget *parent=nullptr);
++    KUninstallDialog(QString appName, QString appVersion, QWidget *parent = nullptr);
+     ~KUninstallDialog();
+ 
+     /**
+      * @brief debAppNameLabel
+      * @return
+      */
+-    QLabel* debAppNameLabel();
++    QLabel *debAppNameLabel();
+ 
+     /**
+      * @brief 包名Label
+      * @return
+      */
+-    QLabel* debNameLabel();
++    QLabel *debNameLabel();
+ 
+     /**
+      * @brief 包IconLabel
+      * @return
+      */
+-    QLabel* debIconLabel();
++    QLabel *debIconLabel();
+ 
+     /**
+      * @brief 包版本Label
+      * @return
+      */
+-    QLabel* debVersionLabel();
++    QLabel *debVersionLabel();
+ 
+     /**
+      * @brief 卸载按钮
+      * @return
+      */
+-    QPushButton* uninstallButtton();
++    QPushButton *uninstallButtton();
+ 
+ protected:
+     void changeTheme();
+ 
+ private:
+     Q_DECLARE_PRIVATE(KUninstallDialog)
+-    KUninstallDialogPrivate*const d_ptr;
++    KUninstallDialogPrivate *const d_ptr;
+ };
+ }
+ /**
+-  * @example testDialog/widget.h
+-  * @example testDialog/widget.cpp
+-  * @}
+-  */
++ * @example testDialog/widget.h
++ * @example testDialog/widget.cpp
++ * @}
++ */
+ #endif // KUNINSTALLDIALOG_H
+diff --git a/kysdk-qtwidgets/src/kwidget.cpp b/kysdk-qtwidgets/src/kwidget.cpp
+index 9aec1cb..bf25e61 100644
+--- a/kysdk-qtwidgets/src/kwidget.cpp
++++ b/kysdk-qtwidgets/src/kwidget.cpp
+@@ -21,41 +21,41 @@
+  */
+ 
+ #include "kwidget.h"
++#include "KWindowEffects"
+ #include "gui_g.h"
+-#include "xatom-helper.h"
+-#include <QBoxLayout>
+-#include <QPalette>
+-#include <QPainter>
+-#include <QApplication>
+ #include "parmscontroller.h"
+-#include "KWindowEffects"
+-#include <QGuiApplication>
+ #include "ukuistylehelper/ukui-decoration-manager.h"
+ #include "ukuistylehelper/ukui-shell-manager.h"
++#include "xatom-helper.h"
++#include <QApplication>
++#include <QBoxLayout>
++#include <QGuiApplication>
++#include <QPainter>
++#include <QPalette>
+ 
+ namespace kdk
+ {
+-#define  FocusIn QEvent::FocusIn
+-#define  FocusOut QEvent::FocusOut
+-class KWidgetPrivate:public QObject
++#define FocusIn QEvent::FocusIn
++#define FocusOut QEvent::FocusOut
++class KWidgetPrivate : public QObject
+ {
+     Q_OBJECT
+     Q_DECLARE_PUBLIC(KWidget)
+ 
+ public:
+-    KWidgetPrivate(KWidget*parent);
++    KWidgetPrivate(KWidget *parent);
+ 
+ private:
+     KWidget *q_ptr;
+-    KIconBar* m_pIconBar;
+-    KWindowButtonBar* m_pWindowButtonBar;
+-    QHBoxLayout* m_pTitleLayout;
+-    QHBoxLayout* m_pWidgetLayout;
+-    QVBoxLayout* m_pMainLayout;
+-    QWidget* m_pBaseWidget;
+-    QWidget* m_pSideWidget;
++    KIconBar *m_pIconBar;
++    KWindowButtonBar *m_pWindowButtonBar;
++    QHBoxLayout *m_pTitleLayout;
++    QHBoxLayout *m_pWidgetLayout;
++    QVBoxLayout *m_pMainLayout;
++    QWidget *m_pBaseWidget;
++    QWidget *m_pSideWidget;
+     QString m_IconName;
+-    QGSettings* m_pTransparency;
++    QGSettings *m_pTransparency;
+     double tranSparency;
+     LayoutType m_layoutType;
+     bool m_sidebarFollowMode;
+@@ -66,101 +66,93 @@ private:
+ };
+ 
+ KWidget::KWidget(QWidget *parent)
+-    :QWidget(parent),
+-      d_ptr(new KWidgetPrivate(this))
++    : QWidget(parent)
++    , d_ptr(new KWidgetPrivate(this))
+ {
+     Q_D(KWidget);
+     setFocusPolicy(Qt::ClickFocus);
+     setObjectName("Kwidget");
+-//    this->setAttribute(Qt::WA_TranslucentBackground, true);  //透明
++    //    this->setAttribute(Qt::WA_TranslucentBackground, true);  //透明
+     // bug 163681 弃用主题毛玻璃,改用kwindowsystem毛玻璃接口
+     this->setProperty("useSystemStyleBlur", true);
+     /* 开启背景模糊效果(毛玻璃) */
+-//    KWindowEffects::enableBlurBehind(this->winId());
++    //    KWindowEffects::enableBlurBehind(this->winId());
+ 
+-    if(Parmscontroller::isTabletMode())
+-    {
++    if (Parmscontroller::isTabletMode()) {
+         d->m_pWindowButtonBar->maximumButton()->hide();
+-    }
+-    else
+-    {
++    } else {
+         d->m_pWindowButtonBar->maximumButton()->show();
+     }
+-    connect(d->m_pWindowButtonBar->minimumButton(),&QPushButton::clicked,this,&KWidget::showMinimized);
+-    connect(d->m_pWindowButtonBar->maximumButton(),&QPushButton::clicked,this,[=]()
+-        {
+-            if(this->isMaximized())
+-                showNormal();
+-            else
+-                showMaximized();
+-        });
+-    connect(d->m_pWindowButtonBar->closeButton(),&QPushButton::clicked,this,&KWidget::close);
+-    connect(d->m_pWindowButtonBar,&KWindowButtonBar::doubleClick,this,[=]()
+-        {
+-            if(this->isMaximized())
+-                showNormal();
+-            else
+-                showMaximized();
+-        });
+-    connect(d->m_pIconBar,&KIconBar::doubleClick,this,[=]()
+-        {
+-            if(this->isMaximized())
+-                showNormal();
+-            else
+-                showMaximized();
+-        });
++    connect(d->m_pWindowButtonBar->minimumButton(), &QPushButton::clicked, this, &KWidget::showMinimized);
++    connect(d->m_pWindowButtonBar->maximumButton(), &QPushButton::clicked, this, [=]() {
++        if (this->isMaximized())
++            showNormal();
++        else
++            showMaximized();
++    });
++    connect(d->m_pWindowButtonBar->closeButton(), &QPushButton::clicked, this, &KWidget::close);
++    connect(d->m_pWindowButtonBar, &KWindowButtonBar::doubleClick, this, [=]() {
++        if (this->isMaximized())
++            showNormal();
++        else
++            showMaximized();
++    });
++    connect(d->m_pIconBar, &KIconBar::doubleClick, this, [=]() {
++        if (this->isMaximized())
++            showNormal();
++        else
++            showMaximized();
++    });
+     changeIconStyle();
+-    connect(m_gsetting,&QGSettings::changed,this,[=](){changeIconStyle();});
++    connect(m_gsetting, &QGSettings::changed, this, [=]() {
++        changeIconStyle();
++    });
+ 
+     if (QGSettings::isSchemaInstalled("org.ukui.control-center.personalise")) {
+         d->m_pTransparency = new QGSettings("org.ukui.control-center.personalise");
+         d->tranSparency = d->m_pTransparency->get("transparency").toDouble();
+         connect(d->m_pTransparency, &QGSettings::changed, this, [=](QString value) {
+-            if (value == "transparency" && ThemeController::themeMode() != ClassicTheme ) {
++            if (value == "transparency" && ThemeController::themeMode() != ClassicTheme) {
+                 d->tranSparency = d->m_pTransparency->get("transparency").toDouble();
+                 d->adjustBackground();
+             }
+         });
+     }
+     d->adjustBackground();
+-    connect(Parmscontroller::self(),&Parmscontroller::modeChanged,this,[=](){
+-        if(d->m_sidebarFollowMode)
+-        {
++    connect(Parmscontroller::self(), &Parmscontroller::modeChanged, this, [=]() {
++        if (d->m_sidebarFollowMode) {
+             d->m_pSideWidget->setFixedWidth(Parmscontroller::parm(Parmscontroller::Parm::PM_Widget_SideWidget_Width));
+             d->m_pIconBar->setFixedWidth(Parmscontroller::parm(Parmscontroller::Parm::PM_Widget_SideWidget_Width));
+         }
+-        if(Parmscontroller::isTabletMode())
+-        {
+-            if(d->m_pWindowButtonBar->followMode())
++        if (Parmscontroller::isTabletMode()) {
++            if (d->m_pWindowButtonBar->followMode())
+                 d->m_pWindowButtonBar->maximumButton()->hide();
+-        }
+-        else
+-        {
+-            if(d->m_pWindowButtonBar->followMode())
++        } else {
++            if (d->m_pWindowButtonBar->followMode())
+                 d->m_pWindowButtonBar->maximumButton()->show();
+         }
+         updateGeometry();
+     });
+     changeTheme();
+-    connect(m_gsetting,&QGSettings::changed,this,[=](){changeTheme();});
++    connect(m_gsetting, &QGSettings::changed, this, [=]() {
++        changeTheme();
++    });
+ 
+     QString platform = QGuiApplication::platformName();
+-    if(platform.startsWith(QLatin1String("xcb"),Qt::CaseInsensitive))
+-    {
++    if (platform.startsWith(QLatin1String("xcb"), Qt::CaseInsensitive)) {
+         MotifWmHints hints;
+-        hints.flags = MWM_HINTS_FUNCTIONS|MWM_HINTS_DECORATIONS;
++        hints.flags = MWM_HINTS_FUNCTIONS | MWM_HINTS_DECORATIONS;
+         hints.functions = MWM_FUNC_ALL;
+         hints.decorations = MWM_DECOR_BORDER;
+         XAtomHelper::getInstance()->setWindowMotifHint(this->winId(), hints);
+     }
+-    
++
+     installEventFilter(this);
+-    resize(800,600);
++    resize(800, 600);
+ }
+ 
+ KWidget::~KWidget()
+ {
+-
+ }
+ 
+ void KWidget::setIcon(const QIcon &icon)
+@@ -168,7 +160,7 @@ void KWidget::setIcon(const QIcon &icon)
+     Q_D(KWidget);
+     d->m_IconName = icon.name();
+     d->m_pIconBar->setIcon(icon);
+-//    setWindowIcon(icon.pixmap(QSize(36,36)));
++    //    setWindowIcon(icon.pixmap(QSize(36,36)));
+     setWindowIcon(icon);
+ }
+ 
+@@ -177,7 +169,7 @@ void KWidget::setIcon(const QString &iconName)
+     Q_D(KWidget);
+     d->m_IconName = iconName;
+     d->m_pIconBar->setIcon(iconName);
+-//    setWindowIcon(QIcon::fromTheme(iconName).pixmap(QSize(36,36)));
++    //    setWindowIcon(QIcon::fromTheme(iconName).pixmap(QSize(36,36)));
+     setWindowIcon(QIcon::fromTheme(iconName));
+ }
+ 
+@@ -225,27 +217,24 @@ void KWidget::setWindowFlags(Qt::WindowFlags type)
+     QWidget::setWindowFlags(type);
+     d->adjustFlagsTitleStatus(type);
+     QString platform = QGuiApplication::platformName();
+-    if(platform.startsWith(QLatin1String("xcb"),Qt::CaseInsensitive))
+-    {
++    if (platform.startsWith(QLatin1String("xcb"), Qt::CaseInsensitive)) {
+         MotifWmHints hints;
+-        hints.flags = MWM_HINTS_FUNCTIONS|MWM_HINTS_DECORATIONS;
++        hints.flags = MWM_HINTS_FUNCTIONS | MWM_HINTS_DECORATIONS;
+         hints.functions = MWM_FUNC_ALL;
+         hints.decorations = MWM_DECOR_BORDER;
+         XAtomHelper::getInstance()->setWindowMotifHint(this->winId(), hints);
+     }
+-
+ }
+ 
+ void KWidget::setWindowFlag(Qt::WindowType flag, bool on)
+ {
+     Q_D(KWidget);
+-    QWidget::setWindowFlag(flag,on);
++    QWidget::setWindowFlag(flag, on);
+     d->adjustFlagTitleStatus(flag);
+     QString platform = QGuiApplication::platformName();
+-    if(platform.startsWith(QLatin1String("xcb"),Qt::CaseInsensitive))
+-    {
++    if (platform.startsWith(QLatin1String("xcb"), Qt::CaseInsensitive)) {
+         MotifWmHints hints;
+-        hints.flags = MWM_HINTS_FUNCTIONS|MWM_HINTS_DECORATIONS;
++        hints.flags = MWM_HINTS_FUNCTIONS | MWM_HINTS_DECORATIONS;
+         hints.functions = MWM_FUNC_ALL;
+         hints.decorations = MWM_DECOR_BORDER;
+         XAtomHelper::getInstance()->setWindowMotifHint(this->winId(), hints);
+@@ -255,7 +244,7 @@ void KWidget::setWindowFlag(Qt::WindowType flag, bool on)
+ void KWidget::setSidebarFollowMode(bool flag)
+ {
+     Q_D(KWidget);
+-    d->m_sidebarFollowMode=flag;
++    d->m_sidebarFollowMode = flag;
+ }
+ 
+ bool KWidget::sidebarFollowMode()
+@@ -267,36 +256,32 @@ bool KWidget::sidebarFollowMode()
+ bool KWidget::eventFilter(QObject *target, QEvent *event)
+ {
+     Q_D(KWidget);
+-    if(target == this && (event->type() == QEvent::WindowStateChange|| event->type() == QEvent::Show))
+-    {
+-        if(this->isMaximized())
++    if (target == this && (event->type() == QEvent::WindowStateChange || event->type() == QEvent::Show)) {
++        if (this->isMaximized())
+             d->m_pWindowButtonBar->setMaximumButtonState(MaximumButtonState::Restore);
+         else
+             d->m_pWindowButtonBar->setMaximumButtonState(MaximumButtonState::Maximum);
+     }
+-    if(target == this && (event->type() == FocusIn|| event->type() == FocusOut) || event->type() == QEvent::ActivationChange)
++    if (target == this && (event->type() == FocusIn || event->type() == FocusOut) || event->type() == QEvent::ActivationChange)
+         d->adjustBackground();
+     QString platform = QGuiApplication::platformName();
+-    if(platform.startsWith(QLatin1String("wayland"),Qt::CaseInsensitive))
+-    {
+-        if((event->type() == QEvent::PlatformSurface || event->type() == QEvent::Show || event->type() == QEvent::UpdateRequest))
+-        {
+-            #ifdef USE_UKUI_PROTOCOL
+-            if(UkuiShellManager::getInstance()->ukuishellReady())
++    if (platform.startsWith(QLatin1String("wayland"), Qt::CaseInsensitive)) {
++        if ((event->type() == QEvent::PlatformSurface || event->type() == QEvent::Show || event->type() == QEvent::UpdateRequest)) {
++#ifdef USE_UKUI_PROTOCOL
++            if (UkuiShellManager::getInstance()->ukuishellReady())
+                 UkuiShellManager::getInstance()->removeHeaderBar(this->windowHandle());
+             else
+                 UKUIDecorationManager::getInstance()->removeHeaderBar(this->windowHandle());
+-            #else
+-                UKUIDecorationManager::getInstance()->removeHeaderBar(this->windowHandle());
+-            #endif
++#else
++            UKUIDecorationManager::getInstance()->removeHeaderBar(this->windowHandle());
++#endif
+         }
+     }
+-    if(target == this && (event->type() == QEvent::Close || event->type() == QEvent::Hide))
+-       {
+-           d->m_pWindowButtonBar->closeButton()->setAttribute(Qt::WA_UnderMouse, false);
+-           QHoverEvent hoverEvent(QEvent::HoverLeave, QPoint(10, 10), QPoint(0, 0));
+-           QCoreApplication::sendEvent(d->m_pWindowButtonBar->closeButton(), &hoverEvent);
+-       }
++    if (target == this && (event->type() == QEvent::Close || event->type() == QEvent::Hide)) {
++        d->m_pWindowButtonBar->closeButton()->setAttribute(Qt::WA_UnderMouse, false);
++        QHoverEvent hoverEvent(QEvent::HoverLeave, QPoint(10, 10), QPoint(0, 0));
++        QCoreApplication::sendEvent(d->m_pWindowButtonBar->closeButton(), &hoverEvent);
++    }
+     return QWidget::eventFilter(target, event);
+ }
+ 
+@@ -310,9 +295,8 @@ void KWidget::changeIconStyle()
+ void KWidget::changeTheme()
+ {
+     Q_D(KWidget);
+-    if(ThemeController::widgetTheme() != ClassicTheme)
+-    {
+-        this->setAttribute(Qt::WA_TranslucentBackground, true);  //透明
++    if (ThemeController::widgetTheme() != ClassicTheme) {
++        this->setAttribute(Qt::WA_TranslucentBackground, true); // 透明
+         KWindowEffects::enableBlurBehind(this->winId());
+     }
+     initThemeStyle();
+@@ -320,20 +304,20 @@ void KWidget::changeTheme()
+ }
+ 
+ KWidgetPrivate::KWidgetPrivate(KWidget *parent)
+-    :q_ptr(parent),
+-    m_sidebarFollowMode(true)
++    : q_ptr(parent)
++    , m_sidebarFollowMode(true)
+ {
+     Q_Q(KWidget);
+     m_pMainLayout = new QVBoxLayout();
+     m_pTitleLayout = new QHBoxLayout();
+     m_layoutType = VerticalType;
+ 
+-    //图标和标题名称
++    // 图标和标题名称
+     m_pIconBar = new KIconBar(q);
+     m_pIconBar->setObjectName("IconBar");
+     m_pIconBar->setFixedWidth(Parmscontroller::parm(Parmscontroller::Parm::PM_Widget_SideWidget_Width));
+     m_pIconBar->setFixedHeight(Parmscontroller::parm(Parmscontroller::Parm::PM_IconbarHeight));
+-    //窗口三联
++    // 窗口三联
+     m_pWindowButtonBar = new KWindowButtonBar(q);
+     m_pWindowButtonBar->setObjectName("TitleBar");
+     m_pWindowButtonBar->setFixedHeight(Parmscontroller::parm(Parmscontroller::Parm::PM_IconbarHeight));
+@@ -341,7 +325,7 @@ KWidgetPrivate::KWidgetPrivate(KWidget *parent)
+     m_pTitleLayout->addWidget(m_pIconBar);
+     m_pTitleLayout->addWidget(m_pWindowButtonBar);
+     m_pTitleLayout->setSpacing(0);
+-    m_pTitleLayout->setContentsMargins(0,0,0,0);
++    m_pTitleLayout->setContentsMargins(0, 0, 0, 0);
+ 
+     m_pWidgetLayout = new QHBoxLayout();
+     m_pBaseWidget = new QWidget(q);
+@@ -356,7 +340,7 @@ KWidgetPrivate::KWidgetPrivate(KWidget *parent)
+     m_pMainLayout->addLayout(m_pWidgetLayout);
+ 
+     m_pMainLayout->setSpacing(0);
+-    m_pMainLayout->setContentsMargins(0,0,0,0);
++    m_pMainLayout->setContentsMargins(0, 0, 0, 0);
+     q->setLayout(m_pMainLayout);
+     m_pBaseWidget->setAutoFillBackground(true);
+     m_pBaseWidget->setBackgroundRole(QPalette::Base);
+@@ -374,11 +358,10 @@ void KWidgetPrivate::adjustBackground()
+     QColor sideColor = q->palette().color(QPalette::Window);
+     sideColor.setAlphaF(tranSparency);
+     QPalette sidePalette = q->palette();
+-    sidePalette.setColor(QPalette::Window,sideColor);
++    sidePalette.setColor(QPalette::Window, sideColor);
+     m_pWindowButtonBar->setPalette(q->palette());
+     m_pIconBar->setPalette(q->palette());
+-    switch (m_layoutType)
+-    {
++    switch (m_layoutType) {
+     case VerticalType:
+         m_pIconBar->setBackgroundRole(QPalette::Base);
+         m_pSideWidget->hide();
+@@ -403,66 +386,65 @@ void KWidgetPrivate::adjustFlagsTitleStatus(Qt::WindowFlags type)
+ {
+     Q_Q(KWidget);
+     m_pWindowButtonBar->menuButton()->hide();
+-    switch (type)
+-    {
++    switch (type) {
+     case Qt::Drawer:
+         m_pWindowButtonBar->minimumButton()->hide();
+-//        m_pWindowButtonBar->menuButton()->hide();
++        //        m_pWindowButtonBar->menuButton()->hide();
+         break;
+     case Qt::Tool:
+         m_pWindowButtonBar->minimumButton()->hide();
+         m_pWindowButtonBar->maximumButton()->hide();
+-//        m_pWindowButtonBar->menuButton()->hide();
++        //        m_pWindowButtonBar->menuButton()->hide();
+         break;
+     case Qt::ToolTip:
+         m_pWindowButtonBar->minimumButton()->hide();
+         m_pWindowButtonBar->maximumButton()->hide();
+         m_pWindowButtonBar->closeButton()->hide();
+-//        m_pWindowButtonBar->menuButton()->hide();
++        //        m_pWindowButtonBar->menuButton()->hide();
+         break;
+     case Qt::SplashScreen:
+         m_pWindowButtonBar->minimumButton()->hide();
+         m_pWindowButtonBar->maximumButton()->hide();
+         m_pWindowButtonBar->closeButton()->hide();
+-//        m_pWindowButtonBar->menuButton()->hide();
++        //        m_pWindowButtonBar->menuButton()->hide();
+         break;
+     case Qt::Dialog:
+         m_pWindowButtonBar->minimumButton()->hide();
+         m_pWindowButtonBar->maximumButton()->hide();
+-//        m_pWindowButtonBar->menuButton()->hide();
++        //        m_pWindowButtonBar->menuButton()->hide();
+         break;
+     case Qt::Sheet:
+         m_pWindowButtonBar->minimumButton()->hide();
+         m_pWindowButtonBar->maximumButton()->hide();
+-//        m_pWindowButtonBar->menuButton()->hide();
++        //        m_pWindowButtonBar->menuButton()->hide();
+         break;
+     case Qt::Popup:
+         m_pWindowButtonBar->minimumButton()->hide();
+         m_pWindowButtonBar->maximumButton()->hide();
+         m_pWindowButtonBar->closeButton()->hide();
+-//        m_pWindowButtonBar->menuButton()->hide();
++        //        m_pWindowButtonBar->menuButton()->hide();
+         break;
+     case Qt::Desktop:
+         m_pWindowButtonBar->minimumButton()->hide();
+         m_pWindowButtonBar->maximumButton()->hide();
+         m_pWindowButtonBar->closeButton()->hide();
+-//        m_pWindowButtonBar->menuButton()->hide();
++        //        m_pWindowButtonBar->menuButton()->hide();
+         q->deleteLater();
+         break;
+     case Qt::ForeignWindow:
+-//        m_pWindowButtonBar->menuButton()->hide();
+-//        break;
++        //        m_pWindowButtonBar->menuButton()->hide();
++        //        break;
+     case Qt::CoverWindow:
+-//        m_pWindowButtonBar->menuButton()->hide();
+-//        break;
++        //        m_pWindowButtonBar->menuButton()->hide();
++        //        break;
+     case Qt::Window:
+-//        m_pWindowButtonBar->menuButton()->hide();
+-//        break;
++        //        m_pWindowButtonBar->menuButton()->hide();
++        //        break;
+     case Qt::Widget:
+-//        m_pWindowButtonBar->menuButton()->hide();
+-//        break;
++        //        m_pWindowButtonBar->menuButton()->hide();
++        //        break;
+     case Qt::SubWindow:
+-//        m_pWindowButtonBar->menuButton()->hide();
++        //        m_pWindowButtonBar->menuButton()->hide();
+         break;
+     default:
+         break;
+@@ -472,8 +454,7 @@ void KWidgetPrivate::adjustFlagsTitleStatus(Qt::WindowFlags type)
+ void KWidgetPrivate::adjustFlagTitleStatus(Qt::WindowFlags type)
+ {
+     Q_Q(KWidget);
+-    switch (type)
+-    {
++    switch (type) {
+     case Qt::Drawer:
+         m_pWindowButtonBar->minimumButton()->hide();
+         m_pWindowButtonBar->menuButton()->hide();
+@@ -514,7 +495,7 @@ void KWidgetPrivate::adjustFlagTitleStatus(Qt::WindowFlags type)
+         q->deleteLater();
+         break;
+     case Qt::ForeignWindow:
+-        q->setWindowFlags(Qt::WindowMinMaxButtonsHint);      //为窗口添加最大化和最小化按钮
++        q->setWindowFlags(Qt::WindowMinMaxButtonsHint); // 为窗口添加最大化和最小化按钮
+         m_pWindowButtonBar->menuButton()->hide();
+         break;
+     case Qt::CoverWindow:
+diff --git a/kysdk-qtwidgets/src/kwidget.h b/kysdk-qtwidgets/src/kwidget.h
+index 0c4ae01..8e928f5 100644
+--- a/kysdk-qtwidgets/src/kwidget.h
++++ b/kysdk-qtwidgets/src/kwidget.h
+@@ -23,33 +23,32 @@
+ #ifndef KWIDGET_H
+ #define KWIDGET_H
+ 
+-#include <QWidget>
+-#include <QIcon>
+-#include <QEvent>
+-#include "kwindowbuttonbar.h"
+ #include "kiconbar.h"
++#include "kwindowbuttonbar.h"
++#include <QEvent>
++#include <QIcon>
++#include <QWidget>
+ 
+ namespace kdk
+ {
+ /**
+  * @brief 支持切换三种结构布局
+  */
+-enum LayoutType
+-{
+-    VerticalType, //上下结构
+-    HorizontalType, //左右结构
+-    MixedType //过渡结构
++enum LayoutType {
++    VerticalType, // 上下结构
++    HorizontalType, // 左右结构
++    MixedType // 过渡结构
+ };
+ 
+ /** @defgroup FormModule
+-  * @{
+-  */
++ * @{
++ */
+ 
+ class KWidgetPrivate;
+ /**
+  * @brief 继承自QWidget,支持响应主题背景切换,图标主题切换,标题颜色响应窗口激活状态,内容区域分为side区和base区
+  */
+-class GUI_EXPORT KWidget : public QWidget,public ThemeController
++class GUI_EXPORT KWidget : public QWidget, public ThemeController
+ {
+     Q_OBJECT
+ 
+@@ -61,43 +60,43 @@ public:
+      * @brief 设置窗体图标
+      * @param icon
+      */
+-    void setIcon(const QIcon& icon);
++    void setIcon(const QIcon &icon);
+ 
+     /**
+      * @brief 设置窗体图标
+      * @param iconName 直接指定系统目录中的图标名称,如"kylin-music"
+      */
+-    void setIcon(const QString& iconName);
++    void setIcon(const QString &iconName);
+ 
+     /**
+      * @brief 设置窗体名称
+      * @param widgetName
+      */
+-    void setWidgetName(const QString& widgetName);
++    void setWidgetName(const QString &widgetName);
+ 
+     /**
+      * @brief 获取左边栏widget,通过setlayout添加自定义内容
+      * @return 返回左边栏widget
+      */
+-    QWidget* sideBar();
++    QWidget *sideBar();
+ 
+     /**
+      * @brief 获取主内容区widget,通过setlayout添加自定义内容
+      * @return 返回主内容区widget
+      */
+-    QWidget* baseBar();
++    QWidget *baseBar();
+ 
+     /**
+      * @brief 获取窗口三联组合控件,以控制是否显示最大化、最小化按钮和下拉菜单按钮;也可增加自定义按钮
+      * @return 返回窗口三联组合控件
+      */
+-    KWindowButtonBar* windowButtonBar();
++    KWindowButtonBar *windowButtonBar();
+ 
+     /**
+      * @brief 获取窗口标题、图标组合控件,以控制相关样式
+      * @return 返回窗口标题、图标组合控件
+      */
+-    KIconBar* iconBar();
++    KIconBar *iconBar();
+ 
+     /**
+      * @brief 设置布局结构类型
+@@ -140,13 +139,13 @@ protected:
+ 
+ private:
+     Q_DECLARE_PRIVATE(KWidget)
+-    KWidgetPrivate*const d_ptr;
++    KWidgetPrivate *const d_ptr;
+ };
+ 
+ }
+ /**
+-  * @example testWidget/testwidget.h
+-  * @example testWidget/testwidget.cpp
+-  * @}
+-  */
++ * @example testWidget/testwidget.h
++ * @example testWidget/testwidget.cpp
++ * @}
++ */
+ #endif // KWIDGET_H
+diff --git a/kysdk-qtwidgets/src/kwindowbuttonbar.cpp b/kysdk-qtwidgets/src/kwindowbuttonbar.cpp
+index f9d0dee..411e3d2 100644
+--- a/kysdk-qtwidgets/src/kwindowbuttonbar.cpp
++++ b/kysdk-qtwidgets/src/kwindowbuttonbar.cpp
+@@ -21,41 +21,41 @@
+  */
+ 
+ #include "kwindowbuttonbar.h"
++#include "parmscontroller.h"
+ #include "themeController.h"
+-#include <QPixmap>
+-#include <QMenu>
+ #include <QHBoxLayout>
++#include <QMenu>
++#include <QPixmap>
+ #include <QVariant>
+-#include "parmscontroller.h"
+ 
+ namespace kdk
+ {
+-class KWindowButtonBarPrivate:public QObject,public ThemeController
++class KWindowButtonBarPrivate : public QObject, public ThemeController
+ {
+     Q_OBJECT
+     Q_DECLARE_PUBLIC(KWindowButtonBar)
+ 
+ public:
+-    KWindowButtonBarPrivate(KWindowButtonBar*parent);
++    KWindowButtonBarPrivate(KWindowButtonBar *parent);
+ 
+ protected:
+     void changeTheme() override;
+ 
+ private:
+-    KWindowButtonBar* q_ptr;
++    KWindowButtonBar *q_ptr;
+     KMenuButton *m_pMenuBtn;
+     QPushButton *m_pMinimumBtn;
+     QPushButton *m_pmaximumBtn;
+     QPushButton *m_pCloseBtn;
+     MaximumButtonState m_maximumButtonState;
+-    QWidget*m_pParentWidget;
++    QWidget *m_pParentWidget;
+     QColor m_pixColor;
+     bool m_followMode;
+ };
+ 
+ KWindowButtonBar::KWindowButtonBar(QWidget *parent)
+-    :QFrame(parent),
+-    d_ptr(new KWindowButtonBarPrivate(this))
++    : QFrame(parent)
++    , d_ptr(new KWindowButtonBarPrivate(this))
+ {
+     Q_D(KWindowButtonBar);
+     d->m_pParentWidget = parent;
+@@ -64,14 +64,14 @@ KWindowButtonBar::KWindowButtonBar(QWidget *parent)
+     d->m_pmaximumBtn->setFocusPolicy(Qt::NoFocus);
+     d->m_pCloseBtn->setFocusPolicy(Qt::NoFocus);
+     setFixedHeight(Parmscontroller::parm(Parmscontroller::Parm::PM_IconbarHeight));
+-//    setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Fixed);
++    //    setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Fixed);
+     d->m_pCloseBtn->installEventFilter(this);
+-    connect(Parmscontroller::self(),&Parmscontroller::modeChanged,this,[=](){
++    connect(Parmscontroller::self(), &Parmscontroller::modeChanged, this, [=]() {
+         setFixedHeight(Parmscontroller::parm(Parmscontroller::Parm::PM_IconbarHeight));
+-        d->m_pMenuBtn->setFixedSize(Parmscontroller::parm(Parmscontroller::Parm::PM_WindowButtonBarSize),Parmscontroller::parm(Parmscontroller::Parm::PM_WindowButtonBarSize));
+-        d->m_pmaximumBtn->setFixedSize(Parmscontroller::parm(Parmscontroller::Parm::PM_WindowButtonBarSize),Parmscontroller::parm(Parmscontroller::Parm::PM_WindowButtonBarSize));
+-        d->m_pCloseBtn->setFixedSize(Parmscontroller::parm(Parmscontroller::Parm::PM_WindowButtonBarSize),Parmscontroller::parm(Parmscontroller::Parm::PM_WindowButtonBarSize));
+-        d->m_pMinimumBtn->setFixedSize(Parmscontroller::parm(Parmscontroller::Parm::PM_WindowButtonBarSize),Parmscontroller::parm(Parmscontroller::Parm::PM_WindowButtonBarSize));
++        d->m_pMenuBtn->setFixedSize(Parmscontroller::parm(Parmscontroller::Parm::PM_WindowButtonBarSize), Parmscontroller::parm(Parmscontroller::Parm::PM_WindowButtonBarSize));
++        d->m_pmaximumBtn->setFixedSize(Parmscontroller::parm(Parmscontroller::Parm::PM_WindowButtonBarSize), Parmscontroller::parm(Parmscontroller::Parm::PM_WindowButtonBarSize));
++        d->m_pCloseBtn->setFixedSize(Parmscontroller::parm(Parmscontroller::Parm::PM_WindowButtonBarSize), Parmscontroller::parm(Parmscontroller::Parm::PM_WindowButtonBarSize));
++        d->m_pMinimumBtn->setFixedSize(Parmscontroller::parm(Parmscontroller::Parm::PM_WindowButtonBarSize), Parmscontroller::parm(Parmscontroller::Parm::PM_WindowButtonBarSize));
+         updateGeometry();
+         repaint();
+     });
+@@ -79,7 +79,6 @@ KWindowButtonBar::KWindowButtonBar(QWidget *parent)
+ 
+ KWindowButtonBar::~KWindowButtonBar()
+ {
+-
+ }
+ 
+ QPushButton *KWindowButtonBar::minimumButton()
+@@ -122,7 +121,7 @@ void KWindowButtonBar::setMaximumButtonState(MaximumButtonState state)
+ void KWindowButtonBar::setFollowMode(bool flag)
+ {
+     Q_D(KWindowButtonBar);
+-    d->m_followMode=flag;
++    d->m_followMode = flag;
+ }
+ 
+ bool KWindowButtonBar::followMode()
+@@ -134,117 +133,99 @@ bool KWindowButtonBar::followMode()
+ void KWindowButtonBar::mouseDoubleClickEvent(QMouseEvent *event)
+ {
+     Q_D(KWindowButtonBar);
+-    if(event->button() == Qt::LeftButton && d->m_pmaximumBtn->isEnabled())
++    if (event->button() == Qt::LeftButton && d->m_pmaximumBtn->isEnabled())
+         Q_EMIT doubleClick();
+ }
+ 
+ bool KWindowButtonBar::eventFilter(QObject *watched, QEvent *event)
+ {
+     Q_D(KWindowButtonBar);
+-    if(QEvent::WindowDeactivate == event->type())
+-    {
+-        d->m_pixColor = QColor(179,179,179);
+-        auto closeIcon = ThemeController::drawColoredPixmap(QIcon::fromTheme("window-close-symbolic").pixmap(QSize(Parmscontroller::parm(Parmscontroller::Parm::PM_WindowButtonBarSize),Parmscontroller::parm(Parmscontroller::Parm::PM_WindowButtonBarSize))),d->m_pixColor);
+-        auto minIcon = ThemeController::drawColoredPixmap(QIcon::fromTheme("window-minimize-symbolic").pixmap(QSize(Parmscontroller::parm(Parmscontroller::Parm::PM_WindowButtonBarSize),Parmscontroller::parm(Parmscontroller::Parm::PM_WindowButtonBarSize))),d->m_pixColor);
++    if (QEvent::WindowDeactivate == event->type()) {
++        d->m_pixColor = QColor(179, 179, 179);
++        auto closeIcon = ThemeController::drawColoredPixmap(QIcon::fromTheme("window-close-symbolic").pixmap(QSize(Parmscontroller::parm(Parmscontroller::Parm::PM_WindowButtonBarSize), Parmscontroller::parm(Parmscontroller::Parm::PM_WindowButtonBarSize))), d->m_pixColor);
++        auto minIcon = ThemeController::drawColoredPixmap(QIcon::fromTheme("window-minimize-symbolic").pixmap(QSize(Parmscontroller::parm(Parmscontroller::Parm::PM_WindowButtonBarSize), Parmscontroller::parm(Parmscontroller::Parm::PM_WindowButtonBarSize))), d->m_pixColor);
+         d->m_pCloseBtn->setIcon(closeIcon);
+         d->m_pMinimumBtn->setIcon(minIcon);
+ 
+-        if(d->m_maximumButtonState == Maximum)
+-        {
+-            auto maxIcon = ThemeController::drawColoredPixmap(QIcon::fromTheme("window-maximize-symbolic").pixmap(QSize(Parmscontroller::parm(Parmscontroller::Parm::PM_WindowButtonBarSize),Parmscontroller::parm(Parmscontroller::Parm::PM_WindowButtonBarSize))),d->m_pixColor);
++        if (d->m_maximumButtonState == Maximum) {
++            auto maxIcon = ThemeController::drawColoredPixmap(QIcon::fromTheme("window-maximize-symbolic").pixmap(QSize(Parmscontroller::parm(Parmscontroller::Parm::PM_WindowButtonBarSize), Parmscontroller::parm(Parmscontroller::Parm::PM_WindowButtonBarSize))), d->m_pixColor);
+             d->m_pmaximumBtn->setIcon(maxIcon);
+             d->m_pmaximumBtn->setToolTip(tr("Maximize"));
+-        }
+-        else
+-        {
+-            auto maxIcon = ThemeController::drawColoredPixmap(QIcon::fromTheme("window-restore-symbolic").pixmap(QSize(Parmscontroller::parm(Parmscontroller::Parm::PM_WindowButtonBarSize),Parmscontroller::parm(Parmscontroller::Parm::PM_WindowButtonBarSize))),d->m_pixColor);
++        } else {
++            auto maxIcon = ThemeController::drawColoredPixmap(QIcon::fromTheme("window-restore-symbolic").pixmap(QSize(Parmscontroller::parm(Parmscontroller::Parm::PM_WindowButtonBarSize), Parmscontroller::parm(Parmscontroller::Parm::PM_WindowButtonBarSize))), d->m_pixColor);
+             d->m_pmaximumBtn->setIcon(maxIcon);
+             d->m_pmaximumBtn->setToolTip(tr("Restore"));
+         }
+     }
+-    if(QEvent::WindowActivate == event->type())
+-    {
++    if (QEvent::WindowActivate == event->type()) {
+         if (ThemeController::themeMode() == LightTheme)
+-            d->m_pixColor = QColor(31,32,34);
++            d->m_pixColor = QColor(31, 32, 34);
+         else
+-            d->m_pixColor = QColor(255,255,255);
+-        auto closeIcon = ThemeController::drawColoredPixmap(QIcon::fromTheme("window-close-symbolic").pixmap(QSize(Parmscontroller::parm(Parmscontroller::Parm::PM_WindowButtonBarSize),Parmscontroller::parm(Parmscontroller::Parm::PM_WindowButtonBarSize))),d->m_pixColor);
++            d->m_pixColor = QColor(255, 255, 255);
++        auto closeIcon = ThemeController::drawColoredPixmap(QIcon::fromTheme("window-close-symbolic").pixmap(QSize(Parmscontroller::parm(Parmscontroller::Parm::PM_WindowButtonBarSize), Parmscontroller::parm(Parmscontroller::Parm::PM_WindowButtonBarSize))), d->m_pixColor);
+         d->m_pCloseBtn->setIcon(closeIcon);
+         d->m_pMinimumBtn->setIcon(QIcon::fromTheme("window-minimize-symbolic"));
+ 
+-        if(d->m_maximumButtonState == Maximum)
+-        {
++        if (d->m_maximumButtonState == Maximum) {
+             d->m_pmaximumBtn->setIcon(QIcon::fromTheme("window-maximize-symbolic"));
+             d->m_pmaximumBtn->setToolTip(tr("Maximize"));
+-        }
+-        else
+-        {
++        } else {
+             d->m_pmaximumBtn->setIcon(QIcon::fromTheme("window-restore-symbolic"));
+             d->m_pmaximumBtn->setToolTip(tr("Restore"));
+         }
+     }
+-    if(watched == d->m_pCloseBtn)
+-    {
+-        //根据不同状态重绘icon颜色
++    if (watched == d->m_pCloseBtn) {
++        // 根据不同状态重绘icon颜色
+         switch (event->type()) {
+         case QEvent::MouseButtonPress:
+-            if(isEnabled())
+-            {
+-                auto mouseEvent = dynamic_cast<QMouseEvent*>(event);
+-                if(mouseEvent->button() == Qt::LeftButton)
+-                    d->m_pixColor = QColor(255,255,255);
+-                auto closeIcon = ThemeController::drawColoredPixmap(QIcon::fromTheme("window-close-symbolic").pixmap(QSize(Parmscontroller::parm(Parmscontroller::Parm::PM_WindowButtonBarSize),Parmscontroller::parm(Parmscontroller::Parm::PM_WindowButtonBarSize))),d->m_pixColor);
++            if (isEnabled()) {
++                auto mouseEvent = dynamic_cast<QMouseEvent *>(event);
++                if (mouseEvent->button() == Qt::LeftButton)
++                    d->m_pixColor = QColor(255, 255, 255);
++                auto closeIcon = ThemeController::drawColoredPixmap(QIcon::fromTheme("window-close-symbolic").pixmap(QSize(Parmscontroller::parm(Parmscontroller::Parm::PM_WindowButtonBarSize), Parmscontroller::parm(Parmscontroller::Parm::PM_WindowButtonBarSize))), d->m_pixColor);
+                 d->m_pCloseBtn->setIcon(closeIcon);
+             }
+             break;
+         case QEvent::Enter:
+-            if(isEnabled())
+-            {
+-                d->m_pixColor = QColor(255,255,255);
+-                auto closeIcon = ThemeController::drawColoredPixmap(QIcon::fromTheme("window-close-symbolic").pixmap(QSize(Parmscontroller::parm(Parmscontroller::Parm::PM_WindowButtonBarSize),Parmscontroller::parm(Parmscontroller::Parm::PM_WindowButtonBarSize))),d->m_pixColor);
++            if (isEnabled()) {
++                d->m_pixColor = QColor(255, 255, 255);
++                auto closeIcon = ThemeController::drawColoredPixmap(QIcon::fromTheme("window-close-symbolic").pixmap(QSize(Parmscontroller::parm(Parmscontroller::Parm::PM_WindowButtonBarSize), Parmscontroller::parm(Parmscontroller::Parm::PM_WindowButtonBarSize))), d->m_pixColor);
+                 d->m_pCloseBtn->setIcon(closeIcon);
+             }
+             break;
+         case QEvent::MouseButtonRelease:
+-            if(isEnabled())
+-            {
+-                auto mouseEvent = dynamic_cast<QMouseEvent*>(event);
+-                if(mouseEvent->button() == Qt::LeftButton)
+-                    d->m_pixColor = QColor(255,255,255);
+-                auto closeIcon = ThemeController::drawColoredPixmap(QIcon::fromTheme("window-close-symbolic").pixmap(QSize(Parmscontroller::parm(Parmscontroller::Parm::PM_WindowButtonBarSize),Parmscontroller::parm(Parmscontroller::Parm::PM_WindowButtonBarSize))),d->m_pixColor);
++            if (isEnabled()) {
++                auto mouseEvent = dynamic_cast<QMouseEvent *>(event);
++                if (mouseEvent->button() == Qt::LeftButton)
++                    d->m_pixColor = QColor(255, 255, 255);
++                auto closeIcon = ThemeController::drawColoredPixmap(QIcon::fromTheme("window-close-symbolic").pixmap(QSize(Parmscontroller::parm(Parmscontroller::Parm::PM_WindowButtonBarSize), Parmscontroller::parm(Parmscontroller::Parm::PM_WindowButtonBarSize))), d->m_pixColor);
+                 d->m_pCloseBtn->setIcon(closeIcon);
+             }
+             break;
+         case QEvent::Leave:
+-            if(isEnabled())
+-            {
+-                if(d->m_pCloseBtn->isActiveWindow())
+-                {
+-                if (ThemeController::themeMode() == LightTheme)
+-                    d->m_pixColor = QColor(31,32,34);
+-                else
+-                    d->m_pixColor = QColor(255,255,255);
++            if (isEnabled()) {
++                if (d->m_pCloseBtn->isActiveWindow()) {
++                    if (ThemeController::themeMode() == LightTheme)
++                        d->m_pixColor = QColor(31, 32, 34);
++                    else
++                        d->m_pixColor = QColor(255, 255, 255);
++                } else {
++                    d->m_pixColor = QColor(179, 179, 179);
+                 }
+-                else
+-                {
+-                    d->m_pixColor = QColor(179,179,179);
+-                }
+-                auto closeIcon = ThemeController::drawColoredPixmap(QIcon::fromTheme("window-close-symbolic").pixmap(QSize(Parmscontroller::parm(Parmscontroller::Parm::PM_WindowButtonBarSize),Parmscontroller::parm(Parmscontroller::Parm::PM_WindowButtonBarSize))),d->m_pixColor);
+-                d->m_pCloseBtn->setIcon(closeIcon);
+-            }
+-            break;
+-        case QEvent::WindowDeactivate:
+-            {
+-                d->m_pixColor = QColor(179,179,179);
+-                auto closeIcon = ThemeController::drawColoredPixmap(QIcon::fromTheme("window-close-symbolic").pixmap(QSize(Parmscontroller::parm(Parmscontroller::Parm::PM_WindowButtonBarSize),Parmscontroller::parm(Parmscontroller::Parm::PM_WindowButtonBarSize))),d->m_pixColor);
++                auto closeIcon = ThemeController::drawColoredPixmap(QIcon::fromTheme("window-close-symbolic").pixmap(QSize(Parmscontroller::parm(Parmscontroller::Parm::PM_WindowButtonBarSize), Parmscontroller::parm(Parmscontroller::Parm::PM_WindowButtonBarSize))), d->m_pixColor);
+                 d->m_pCloseBtn->setIcon(closeIcon);
+             }
+             break;
++        case QEvent::WindowDeactivate: {
++            d->m_pixColor = QColor(179, 179, 179);
++            auto closeIcon = ThemeController::drawColoredPixmap(QIcon::fromTheme("window-close-symbolic").pixmap(QSize(Parmscontroller::parm(Parmscontroller::Parm::PM_WindowButtonBarSize), Parmscontroller::parm(Parmscontroller::Parm::PM_WindowButtonBarSize))), d->m_pixColor);
++            d->m_pCloseBtn->setIcon(closeIcon);
++        } break;
+         default:
+             break;
+         }
+     }
+-    return QFrame::eventFilter(watched,event);
++    return QFrame::eventFilter(watched, event);
+ }
+ 
+ QSize KWindowButtonBar::sizeHint() const
+@@ -255,44 +236,45 @@ QSize KWindowButtonBar::sizeHint() const
+ }
+ 
+ KWindowButtonBarPrivate::KWindowButtonBarPrivate(KWindowButtonBar *parent)
+-    :q_ptr(parent),m_followMode(true)
++    : q_ptr(parent)
++    , m_followMode(true)
+ {
+     Q_Q(KWindowButtonBar);
+     QHBoxLayout *hLayout = new QHBoxLayout();
+     hLayout->setSpacing(8);
+-    hLayout->setContentsMargins(0,0,0,0);
++    hLayout->setContentsMargins(0, 0, 0, 0);
+ 
+-    //m_maximumButtonState = Maximum;
++    // m_maximumButtonState = Maximum;
+ 
+     m_pMenuBtn = new KMenuButton(q);
+-    m_pMenuBtn->setFixedSize(Parmscontroller::parm(Parmscontroller::Parm::PM_WindowButtonBarSize),Parmscontroller::parm(Parmscontroller::Parm::PM_WindowButtonBarSize));
++    m_pMenuBtn->setFixedSize(Parmscontroller::parm(Parmscontroller::Parm::PM_WindowButtonBarSize), Parmscontroller::parm(Parmscontroller::Parm::PM_WindowButtonBarSize));
+ 
+     m_pMinimumBtn = new QPushButton(q);
+     m_pMinimumBtn->setToolTip(tr("Minimize"));
+-    m_pMinimumBtn->setFixedSize(Parmscontroller::parm(Parmscontroller::Parm::PM_WindowButtonBarSize),Parmscontroller::parm(Parmscontroller::Parm::PM_WindowButtonBarSize));
++    m_pMinimumBtn->setFixedSize(Parmscontroller::parm(Parmscontroller::Parm::PM_WindowButtonBarSize), Parmscontroller::parm(Parmscontroller::Parm::PM_WindowButtonBarSize));
+ 
+     m_pmaximumBtn = new QPushButton(q);
+-    m_pmaximumBtn->setFixedSize(Parmscontroller::parm(Parmscontroller::Parm::PM_WindowButtonBarSize),Parmscontroller::parm(Parmscontroller::Parm::PM_WindowButtonBarSize));
++    m_pmaximumBtn->setFixedSize(Parmscontroller::parm(Parmscontroller::Parm::PM_WindowButtonBarSize), Parmscontroller::parm(Parmscontroller::Parm::PM_WindowButtonBarSize));
+ 
+     m_pCloseBtn = new QPushButton(q);
+     m_pCloseBtn->setObjectName("CloseButton");
+-    m_pCloseBtn->setFixedSize(Parmscontroller::parm(Parmscontroller::Parm::PM_WindowButtonBarSize),Parmscontroller::parm(Parmscontroller::Parm::PM_WindowButtonBarSize));
++    m_pCloseBtn->setFixedSize(Parmscontroller::parm(Parmscontroller::Parm::PM_WindowButtonBarSize), Parmscontroller::parm(Parmscontroller::Parm::PM_WindowButtonBarSize));
+     m_pCloseBtn->setToolTip(tr("Close"));
+ 
+-    hLayout->setContentsMargins(0,0,4,0);
++    hLayout->setContentsMargins(0, 0, 4, 0);
+     hLayout->setSpacing(4);
+     hLayout->addStretch();
+     hLayout->addWidget(m_pMenuBtn);
+-//    hLayout->addSpacing(4);
++    //    hLayout->addSpacing(4);
+     hLayout->addWidget(m_pMinimumBtn);
+-//    hLayout->addSpacing(4);
++    //    hLayout->addSpacing(4);
+     hLayout->addWidget(m_pmaximumBtn);
+-//    hLayout->addSpacing(4);
++    //    hLayout->addSpacing(4);
+     hLayout->addWidget(m_pCloseBtn);
+-//    hLayout->addSpacing(4);
++    //    hLayout->addSpacing(4);
+     q->setLayout(hLayout);
+ 
+-    //控件自己控制样式、响应主题变化
++    // 控件自己控制样式、响应主题变化
+     m_pMinimumBtn->setProperty("isWindowButton", 0x1);
+     m_pMinimumBtn->setProperty("useIconHighlightEffect", 0x2);
+     m_pMinimumBtn->setFlat(true);
+@@ -308,15 +290,16 @@ KWindowButtonBarPrivate::KWindowButtonBarPrivate(KWindowButtonBar *parent)
+     m_pCloseBtn->setIcon(QIcon::fromTheme("window-close-symbolic"));
+ 
+     changeTheme();
+-    connect(m_gsetting,&QGSettings::changed,this,[=](){changeTheme();});
+-    connect(m_pmaximumBtn,&QPushButton::clicked,this,[=]()
+-        {
+-            if(m_maximumButtonState == Maximum)
+-                m_maximumButtonState =Restore;
+-            else
+-                m_maximumButtonState = Maximum;
+-            changeTheme();
+-        });
++    connect(m_gsetting, &QGSettings::changed, this, [=]() {
++        changeTheme();
++    });
++    connect(m_pmaximumBtn, &QPushButton::clicked, this, [=]() {
++        if (m_maximumButtonState == Maximum)
++            m_maximumButtonState = Restore;
++        else
++            m_maximumButtonState = Maximum;
++        changeTheme();
++    });
+     setParent(parent);
+ }
+ 
+@@ -324,26 +307,21 @@ void KWindowButtonBarPrivate::changeTheme()
+ {
+     Q_Q(KWindowButtonBar);
+     initThemeStyle();
+-    if(q->isActiveWindow())
+-    {
+-        if(q->isEnabled())
+-        {
++    if (q->isActiveWindow()) {
++        if (q->isEnabled()) {
+             if (ThemeController::themeMode() == LightTheme)
+-                m_pixColor = QColor(31,32,34);
++                m_pixColor = QColor(31, 32, 34);
+             else
+-                m_pixColor = QColor(255,255,255);
+-            auto closeIcon = ThemeController::drawColoredPixmap(QIcon::fromTheme("window-close-symbolic").pixmap(QSize(Parmscontroller::parm(Parmscontroller::Parm::PM_WindowButtonBarSize),Parmscontroller::parm(Parmscontroller::Parm::PM_WindowButtonBarSize))),m_pixColor);
++                m_pixColor = QColor(255, 255, 255);
++            auto closeIcon = ThemeController::drawColoredPixmap(QIcon::fromTheme("window-close-symbolic").pixmap(QSize(Parmscontroller::parm(Parmscontroller::Parm::PM_WindowButtonBarSize), Parmscontroller::parm(Parmscontroller::Parm::PM_WindowButtonBarSize))), m_pixColor);
+             m_pCloseBtn->setIcon(closeIcon);
+         }
+-        if(m_maximumButtonState == Maximum)
+-        {
+-                m_pmaximumBtn->setIcon(QIcon::fromTheme("window-maximize-symbolic"));
+-                m_pmaximumBtn->setToolTip(tr("Maximize"));
+-        }
+-        else
+-        {
+-                m_pmaximumBtn->setIcon(QIcon::fromTheme("window-restore-symbolic"));
+-                m_pmaximumBtn->setToolTip(tr("Restore"));
++        if (m_maximumButtonState == Maximum) {
++            m_pmaximumBtn->setIcon(QIcon::fromTheme("window-maximize-symbolic"));
++            m_pmaximumBtn->setToolTip(tr("Maximize"));
++        } else {
++            m_pmaximumBtn->setIcon(QIcon::fromTheme("window-restore-symbolic"));
++            m_pmaximumBtn->setToolTip(tr("Restore"));
+         }
+     }
+ }
+diff --git a/kysdk-qtwidgets/src/kwindowbuttonbar.h b/kysdk-qtwidgets/src/kwindowbuttonbar.h
+index 2261f85..dd795ca 100644
+--- a/kysdk-qtwidgets/src/kwindowbuttonbar.h
++++ b/kysdk-qtwidgets/src/kwindowbuttonbar.h
+@@ -25,23 +25,22 @@
+ 
+ #include "gui_g.h"
+ #include "kmenubutton.h"
++#include <QDebug>
+ #include <QFrame>
+-#include <QPushButton>
+ #include <QMouseEvent>
+-#include <QDebug>
++#include <QPushButton>
+ 
+ namespace kdk
+ {
+ 
+ /** @defgroup BarModule
+-  * @{
+-  */
++ * @{
++ */
+ 
+ /**
+  * @brief  最大化按钮提供两种状态响应
+  */
+-enum MaximumButtonState
+-{
++enum MaximumButtonState {
+     Maximum,
+     Restore
+ };
+@@ -50,37 +49,37 @@ class KWindowButtonBarPrivate;
+ /**
+  * @brief 窗口三联按钮和菜单按钮的集合
+  */
+-class GUI_EXPORT KWindowButtonBar:public QFrame
++class GUI_EXPORT KWindowButtonBar : public QFrame
+ {
+     Q_OBJECT
+ 
+ public:
+-    KWindowButtonBar(QWidget*parent=nullptr);
++    KWindowButtonBar(QWidget *parent = nullptr);
+     ~KWindowButtonBar();
+ 
+     /**
+      * @brief 获取最小化按钮
+      * @return
+      */
+-    QPushButton* minimumButton();
++    QPushButton *minimumButton();
+ 
+     /**
+      * @brief 获取最大化按钮
+      * @return
+      */
+-    QPushButton* maximumButton();
++    QPushButton *maximumButton();
+ 
+     /**
+      * @brief 获取关闭按钮
+      * @return
+      */
+-    QPushButton* closeButton();
++    QPushButton *closeButton();
+ 
+     /**
+      * @brief 获取菜单按钮
+      * @return
+      */
+-    KMenuButton* menuButton();
++    KMenuButton *menuButton();
+ 
+     /**
+      * @brief 获取最大化按钮的状态(最大化/恢复)
+@@ -95,20 +94,19 @@ public:
+     void setMaximumButtonState(MaximumButtonState state);
+ 
+     /**
+-    * @brief 设置是否遵循模式
+-    * @since 2.0
+-    * @param flag
+-    */
++     * @brief 设置是否遵循模式
++     * @since 2.0
++     * @param flag
++     */
+     void setFollowMode(bool flag);
+ 
+     /**
+-    * @brief 返回是否遵循模式
+-    * @since 2.0
+-    * @return
+-    */
++     * @brief 返回是否遵循模式
++     * @since 2.0
++     * @return
++     */
+     bool followMode();
+ 
+-
+ Q_SIGNALS:
+     /**
+      * @brief 双击会发出双击信号,父widget可以绑定相应槽函数
+@@ -126,9 +124,9 @@ private:
+ };
+ }
+ /**
+-  * @example testWidget/testwidget.h
+-  * @example testWidget/testwidget.cpp
+-  * @}
+-  */
++ * @example testWidget/testwidget.h
++ * @example testWidget/testwidget.cpp
++ * @}
++ */
+ 
+-#endif //KTITLEBAR_H
++#endif // KTITLEBAR_H
+diff --git a/kysdk-qtwidgets/src/parmscontroller.cpp b/kysdk-qtwidgets/src/parmscontroller.cpp
+index 603f61c..c5bd44a 100644
+--- a/kysdk-qtwidgets/src/parmscontroller.cpp
++++ b/kysdk-qtwidgets/src/parmscontroller.cpp
+@@ -20,9 +20,9 @@
+  *
+  */
+ 
++#include <QDBusConnection>
+ #include <QDBusInterface>
+ #include <QDBusMessage>
+-#include <QDBusConnection>
+ #include <QDBusReply>
+ 
+ #include "parmscontroller.h"
+@@ -41,10 +41,10 @@ const static int TABLET_SLIDER_HANDLE_RADIUS = 40;
+ const static int TABLET_SLIDER_NODE_RADIUS = 16;
+ const static int TABLET_BADGE_HEIGHT = 20;
+ const static int TABLET_ICONBAR_HEIGHT = 64;
+-const static int TABLET_ICONBARICONSIZE =32;
+-const static int TABLET_WINDOWBUTTONBAR_SIZE =48;
++const static int TABLET_ICONBARICONSIZE = 32;
++const static int TABLET_WINDOWBUTTONBAR_SIZE = 48;
+ const static int TABLET_NAVIGATION_INTERVAL = 4;
+-//const static int TABLET_NAVIGATION_WIDTH = 230;
++// const static int TABLET_NAVIGATION_WIDTH = 230;
+ const static int TABLET_WIDGET_SIDEWIDGET_WIDTH = 254;
+ const static int TABLET_INPUTDIALOG_HEIGHT = 222;
+ const static int TABLET_INPUTDIALOG_WIDTH = 352;
+@@ -54,16 +54,15 @@ const static int TABLET_INPUTDIALOG_BUTTON_SPACING = 16;
+ const static int TABLET_INPUTDIALOG_BOTTOM_SPACING = 16;
+ const static int TABLET_INPUTDIALOG_RIGHT_SPACING = 32;
+ 
+-
+ const static int PC_CONTROL_HEIGHT = 36;
+ const static int PC_SLIDER_HANDLE_RADIUS = 20;
+ const static int PC_SLIDER_NODE_RADIUS = 10;
+ const static int PC_BADGE_HEIGHT = 30;
+ const static int PC_ICONBAR_HEIGHT = 40;
+-const static int PC_ICONBARICONSIZE =24;
+-const static int PC_WINDOWBUTTONBAR_SIZE =30;
++const static int PC_ICONBARICONSIZE = 24;
++const static int PC_WINDOWBUTTONBAR_SIZE = 30;
+ const static int PC_NAVIGATION_INTERVAL = 4;
+-//const static int PC_NAVIGATION_WIDTH = 168;
++// const static int PC_NAVIGATION_WIDTH = 168;
+ const static int PC_WIDGET_SIDEWIDGET_WIDTH = 200;
+ const static int PC_INPUTDIALOG_HEIGHT = 198;
+ const static int PC_INPUTDIALOG_WIDTH = 336;
+@@ -75,26 +74,25 @@ const static int PC_INPUTDIALOG_RIGHT_SPACING = 24;
+ 
+ Parmscontroller *Parmscontroller::self()
+ {
+-    if(g_parmscontroller)
++    if (g_parmscontroller)
+         return g_parmscontroller;
+-    else
+-    {
++    else {
+         g_parmscontroller = new Parmscontroller;
+         return g_parmscontroller;
+     }
+ }
+ 
+-Parmscontroller::Parmscontroller(QObject *parent) : QObject(parent)
++Parmscontroller::Parmscontroller(QObject *parent)
++    : QObject(parent)
+ {
+-    g_statusManagerDBus = new QDBusInterface(DBUS_STATUS_MANAGER, "/" ,DBUS_STATUS_MANAGER,QDBusConnection::sessionBus());
++    g_statusManagerDBus = new QDBusInterface(DBUS_STATUS_MANAGER, "/", DBUS_STATUS_MANAGER, QDBusConnection::sessionBus());
+ 
+     if (g_statusManagerDBus) {
+         if (g_statusManagerDBus->isValid()) {
+-            //平板模式切换
++            // 平板模式切换
+             connect(g_statusManagerDBus, SIGNAL(mode_change_signal(bool)), this, SIGNAL(modeChanged(bool)));
+-            connect(this,&Parmscontroller::modeChanged,this,[=](bool flag)
+-            {
+-               g_isTablet = flag;
++            connect(this, &Parmscontroller::modeChanged, this, [=](bool flag) {
++                g_isTablet = flag;
+             });
+         }
+     }
+@@ -109,22 +107,19 @@ Parmscontroller::~Parmscontroller()
+ 
+ bool Parmscontroller::isTabletMode()
+ {
+-    if (g_statusManagerDBus && g_statusManagerDBus->isValid())
+-    {
++    if (g_statusManagerDBus && g_statusManagerDBus->isValid()) {
+         QDBusReply<bool> message = g_statusManagerDBus->call("get_current_tabletmode");
+         if (message.isValid())
+             return message.value();
+         else
+             return false;
+-    }
+-    else
++    } else
+         return false;
+ }
+ 
+ int Parmscontroller::parm(Parmscontroller::Parm p)
+ {
+-    if(g_isTablet)
+-    {
++    if (g_isTablet) {
+         switch (p) {
+         case PM_TabBarHeight:
+         case PM_PushButtonHeight:
+@@ -149,8 +144,8 @@ int Parmscontroller::parm(Parmscontroller::Parm p)
+             return TABLET_WINDOWBUTTONBAR_SIZE;
+         case PM_NavigationBatInterval:
+             return TABLET_NAVIGATION_INTERVAL;
+-//        case PM_NavigationBarWidth:
+-//            return TABLET_NAVIGATION_WIDTH;
++            //        case PM_NavigationBarWidth:
++            //            return TABLET_NAVIGATION_WIDTH;
+         case PM_Widget_SideWidget_Width:
+             return TABLET_WIDGET_SIDEWIDGET_WIDTH;
+         case PM_InputDialog_Height:
+@@ -171,9 +166,7 @@ int Parmscontroller::parm(Parmscontroller::Parm p)
+             return 0;
+             break;
+         }
+-    }
+-    else
+-    {
++    } else {
+         switch (p) {
+         case PM_TabBarHeight:
+         case PM_PushButtonHeight:
+@@ -198,8 +191,8 @@ int Parmscontroller::parm(Parmscontroller::Parm p)
+             return PC_WINDOWBUTTONBAR_SIZE;
+         case PM_NavigationBatInterval:
+             return PC_NAVIGATION_INTERVAL;
+-//        case PM_NavigationBarWidth:
+-//            return PC_NAVIGATION_WIDTH;
++            //        case PM_NavigationBarWidth:
++            //            return PC_NAVIGATION_WIDTH;
+         case PM_Widget_SideWidget_Width:
+             return PC_WIDGET_SIDEWIDGET_WIDTH;
+         case PM_InputDialog_Height:
+@@ -221,9 +214,5 @@ int Parmscontroller::parm(Parmscontroller::Parm p)
+             break;
+         }
+     }
+-
+ }
+ }
+-
+-
+-
+diff --git a/kysdk-qtwidgets/src/parmscontroller.h b/kysdk-qtwidgets/src/parmscontroller.h
+index 1504cd9..6360424 100644
+--- a/kysdk-qtwidgets/src/parmscontroller.h
++++ b/kysdk-qtwidgets/src/parmscontroller.h
+@@ -39,35 +39,33 @@ class Parmscontroller : public QObject
+     Q_OBJECT
+ 
+ public:
+-
+-enum Parm
+-{
+-    PM_TabBarHeight,
+-    PM_PushButtonHeight,
+-    PM_ToolButtonHeight,
+-    PM_SearchLineEditHeight,
+-    PM_PasswordEditHeight,
+-    PM_NavigationBatHeight,
+-    PM_TagHeight,
+-    PM_SearchLineEditItemHeight,
+-    PM_SliderHandleRadius,
+-    PM_SliderNodeRadius,
+-    PM_BadgeHeight,
+-    PM_IconbarHeight,
+-    PM_IconBarIconSize,
+-    PM_WindowButtonBarSize,
+-    PM_NavigationBatInterval,
+-//    PM_NavigationBarWidth,
+-    PM_Widget_SideWidget_Width,
+-    PM_InputDialog_Height,
+-    PM_InputDialog_Width,
+-    PM_InputDialog_Label_Spacing,
+-    PM_InputDialog_Widget_Spacing,
+-    PM_InputDialog_Button_Spacing,
+-    PM_InputDialog_Bottom_Spacing,
+-    PM_InputDialog_Right_Spacing,
+-};
+-    static Parmscontroller* self();
++    enum Parm {
++        PM_TabBarHeight,
++        PM_PushButtonHeight,
++        PM_ToolButtonHeight,
++        PM_SearchLineEditHeight,
++        PM_PasswordEditHeight,
++        PM_NavigationBatHeight,
++        PM_TagHeight,
++        PM_SearchLineEditItemHeight,
++        PM_SliderHandleRadius,
++        PM_SliderNodeRadius,
++        PM_BadgeHeight,
++        PM_IconbarHeight,
++        PM_IconBarIconSize,
++        PM_WindowButtonBarSize,
++        PM_NavigationBatInterval,
++        //    PM_NavigationBarWidth,
++        PM_Widget_SideWidget_Width,
++        PM_InputDialog_Height,
++        PM_InputDialog_Width,
++        PM_InputDialog_Label_Spacing,
++        PM_InputDialog_Widget_Spacing,
++        PM_InputDialog_Button_Spacing,
++        PM_InputDialog_Bottom_Spacing,
++        PM_InputDialog_Right_Spacing,
++    };
++    static Parmscontroller *self();
+     static bool isTabletMode();
+     static int parm(Parm p);
+ 
+@@ -77,7 +75,6 @@ Q_SIGNALS:
+ private:
+     explicit Parmscontroller(QObject *parent = nullptr);
+     ~Parmscontroller();
+-
+ };
+ }
+ #endif // PARMSCONTROLLER_H
+diff --git a/kysdk-qtwidgets/src/themeController.cpp b/kysdk-qtwidgets/src/themeController.cpp
+index 10d81ac..b53607c 100644
+--- a/kysdk-qtwidgets/src/themeController.cpp
++++ b/kysdk-qtwidgets/src/themeController.cpp
+@@ -21,41 +21,40 @@
+  */
+ 
+ #include "themeController.h"
++#include <QApplication>
++#include <QDBusConnection>
++#include <QDBusMessage>
++#include <QDBusReply>
+ #include <QDebug>
+-#include <QVariant>
+-#include <QPainter>
+ #include <QGuiApplication>
++#include <QPainter>
+ #include <QPainterPath>
+ #include <QStringList>
+-#include <QApplication>
++#include <QVariant>
+ #include <QtMath>
+-#include <QDBusConnection>
+-#include <QDBusMessage>
+-#include <QDBusReply>
+ 
+ #define ColorDifference 10
+ 
+-static  WidgetThemeFlag g_widgetThemeFlag = DefaultTheme;
+-static  ThemeFlag g_themeFlag = LightTheme;
+-static  IconFlag g_iconFlag = ClassicStyle;
+-static  int g_fontSize = 11;
+-static  QGSettings* g_gsetting=nullptr;
++static WidgetThemeFlag g_widgetThemeFlag = DefaultTheme;
++static ThemeFlag g_themeFlag = LightTheme;
++static IconFlag g_iconFlag = ClassicStyle;
++static int g_fontSize = 11;
++static QGSettings *g_gsetting = nullptr;
+ QStringList applist{
+-//    "kylin-nm",
++    //    "kylin-nm",
+     "ukui-menu",
+     "ukui-panel",
+     "ukui-sidebar",
+     "ukui-volume-control-applet-qt",
+     "panelukui-panel",
+     "ukui-power-manager-tray",
+-//    "ukui-bluetooth",
++    //    "ukui-bluetooth",
+     "sogouimebs",
+     "kylin-device-daemoon",
+     "ukui-notifications",
+     "ukui-flash-disk",
+     "mktip",
+-    "kylin-video"
+-};
++    "kylin-video"};
+ static inline QString getUppercaseLetters(QString str)
+ {
+     if (str.isEmpty()) {
+@@ -70,21 +69,21 @@ static inline QString getUppercaseLetters(QString str)
+ 
+ static inline QString getDTColorGroup(QPalette::ColorGroup colorGroup)
+ {
+-//    QPalette::ColorGroup colorGroup;
++    //    QPalette::ColorGroup colorGroup;
+     QString str;
+-    if(colorGroup == QPalette::Active)
++    if (colorGroup == QPalette::Active)
+         str = "active";
+-    else if(colorGroup == QPalette::Inactive)
++    else if (colorGroup == QPalette::Inactive)
+         str = "inactive";
+-    else if(colorGroup == QPalette::Disabled)
++    else if (colorGroup == QPalette::Disabled)
+         str = "disable";
+-    else if(colorGroup == QPalette::NColorGroups)
++    else if (colorGroup == QPalette::NColorGroups)
+         str = "ncolorgroups";
+-    else if(colorGroup == QPalette::Current)
++    else if (colorGroup == QPalette::Current)
+         str = "current";
+-    else if(colorGroup == QPalette::All)
++    else if (colorGroup == QPalette::All)
+         str = "all";
+-    else if(colorGroup == QPalette::Normal)
++    else if (colorGroup == QPalette::Normal)
+         str = "normal";
+     return str;
+ }
+@@ -92,53 +91,53 @@ static inline QString getDTColorGroup(QPalette::ColorGroup colorGroup)
+ static inline QPalette::ColorRole getColorRole(QString str)
+ {
+     QPalette::ColorRole colorRole;
+-    if(str == "windowtext")
++    if (str == "windowtext")
+         colorRole = QPalette::WindowText;
+-    else if(str == "button")
++    else if (str == "button")
+         colorRole = QPalette::Button;
+-    else if(str == "light")
++    else if (str == "light")
+         colorRole = QPalette::Light;
+-    else if(str == "midlight")
++    else if (str == "midlight")
+         colorRole = QPalette::Midlight;
+-    else if(str == "dark")
++    else if (str == "dark")
+         colorRole = QPalette::Dark;
+-    else if(str == "mid")
++    else if (str == "mid")
+         colorRole = QPalette::Mid;
+-    else if(str == "text")
++    else if (str == "text")
+         colorRole = QPalette::Text;
+-    else if(str == "brighttext")
++    else if (str == "brighttext")
+         colorRole = QPalette::BrightText;
+-    else if(str == "buttontext")
++    else if (str == "buttontext")
+         colorRole = QPalette::ButtonText;
+-    else if(str == "base")
++    else if (str == "base")
+         colorRole = QPalette::Base;
+-    else if(str == "window")
++    else if (str == "window")
+         colorRole = QPalette::Window;
+-    else if(str == "shadow")
++    else if (str == "shadow")
+         colorRole = QPalette::Shadow;
+-    else if(str == "highlight")
++    else if (str == "highlight")
+         colorRole = QPalette::Highlight;
+-    else if(str == "highlightedtext")
++    else if (str == "highlightedtext")
+         colorRole = QPalette::HighlightedText;
+-    else if(str == "link")
++    else if (str == "link")
+         colorRole = QPalette::Link;
+-    else if(str == "linkvisited")
++    else if (str == "linkvisited")
+         colorRole = QPalette::LinkVisited;
+-    else if(str == "alternatebase")
++    else if (str == "alternatebase")
+         colorRole = QPalette::AlternateBase;
+-    else if(str == "norole")
++    else if (str == "norole")
+         colorRole = QPalette::NoRole;
+-    else if(str == "tooltipbase")
++    else if (str == "tooltipbase")
+         colorRole = QPalette::ToolTipBase;
+-    else if(str == "tooltiptext")
++    else if (str == "tooltiptext")
+         colorRole = QPalette::ToolTipText;
+-    else if(str == "placeholdertext")
++    else if (str == "placeholdertext")
+         colorRole = QPalette::PlaceholderText;
+-    else if(str == "ncolorroles")
++    else if (str == "ncolorroles")
+         colorRole = QPalette::NColorRoles;
+-    else if(str == "foreground")
++    else if (str == "foreground")
+         colorRole = QPalette::Foreground;
+-    else if(str == "background")
++    else if (str == "background")
+         colorRole = QPalette::Background;
+ 
+     return colorRole;
+@@ -153,66 +152,56 @@ static inline QColor adjustColor(const QColor c, int hRange = 0, int sRange = 0,
+     QColor cc;
+     int s, l, a;
+ 
+-    if((c.hslSaturationF() + sRange * 1.0 / 100.0) > 1){
+-//        qWarning() << "adjustColor s out of range1";
++    if ((c.hslSaturationF() + sRange * 1.0 / 100.0) > 1) {
++        //        qWarning() << "adjustColor s out of range1";
+         s = 255;
+-    }
+-    else if((c.hslSaturationF() + sRange * 1.0 / 100.0) < 0){
+-//        qWarning() << "adjustColor s out of range0";
++    } else if ((c.hslSaturationF() + sRange * 1.0 / 100.0) < 0) {
++        //        qWarning() << "adjustColor s out of range0";
+         s = 0;
+-    }
+-    else
+-        s = (c.hslSaturationF() + sRange * 1.0 / 100.0) *255.0;
++    } else
++        s = (c.hslSaturationF() + sRange * 1.0 / 100.0) * 255.0;
+ 
+-    if((c.lightnessF() + lRange * 1.0 / 100.0) > 0.97){//根据设计稿寻光色彩识别   l应<=0.97
++    if ((c.lightnessF() + lRange * 1.0 / 100.0) > 0.97) { // 根据设计稿寻光色彩识别   l应<=0.97
+         qWarning() << "adjustColor l out of range1" << c.lightnessF() << lRange << (c.lightnessF() + lRange * 1.0 / 100.0);
+         l = 255.0 * 0.97;
+-    }
+-    else if((c.lightnessF() + lRange * 1.0 / 100.0) < 0.15){//根据设计稿上l最小取的均值
++    } else if ((c.lightnessF() + lRange * 1.0 / 100.0) < 0.15) { // 根据设计稿上l最小取的均值
+         qWarning() << "adjustColor l out of range0";
+         l = 0.15 * 255.0;
+-    }
+-    else
+-        l = (c.lightnessF() + lRange * 1.0 / 100.0) *255.0;
++    } else
++        l = (c.lightnessF() + lRange * 1.0 / 100.0) * 255.0;
+ 
+-    if((c.alphaF() + aRange * 1.0 / 100.0) > 1){
++    if ((c.alphaF() + aRange * 1.0 / 100.0) > 1) {
+         qWarning() << "adjustColor a out of range1";
+         a = 255;
+-    }
+-    else if((c.alphaF() + aRange * 1.0 / 100.0) < 0){
++    } else if ((c.alphaF() + aRange * 1.0 / 100.0) < 0) {
+         qWarning() << "adjustColor a out of range0";
+         a = 0;
+-    }
+-    else
+-        a = (c.alphaF() + aRange * 1.0 / 100.0) *255.0;
++    } else
++        a = (c.alphaF() + aRange * 1.0 / 100.0) * 255.0;
+     cc.setHsl(c.hslHue() + hRange, s, l, a);
+-    return  cc;
++    return cc;
+ }
+ 
+ QPixmap ThemeController::drawSymbolicColoredPixmap(const QPixmap &source)
+ {
+-    QColor gray(128,128,128);
+-    QColor standard (31,32,34);
++    QColor gray(128, 128, 128);
++    QColor standard(31, 32, 34);
+     QImage img = source.toImage();
+     for (int x = 0; x < img.width(); x++) {
+         for (int y = 0; y < img.height(); y++) {
+             auto color = img.pixelColor(x, y);
+             if (color.alpha() > 0) {
+-                if (qAbs(color.red()-gray.red())<20 && qAbs(color.green()-gray.green())<20 && qAbs(color.blue()-gray.blue())<20) {
++                if (qAbs(color.red() - gray.red()) < 20 && qAbs(color.green() - gray.green()) < 20 && qAbs(color.blue() - gray.blue()) < 20) {
+                     color.setRed(255);
+                     color.setGreen(255);
+                     color.setBlue(255);
+                     img.setPixelColor(x, y, color);
+-                }
+-                else if(qAbs(color.red()-standard.red())<20 && qAbs(color.green()-standard.green())<20 && qAbs(color.blue()-standard.blue())<20)
+-                {
++                } else if (qAbs(color.red() - standard.red()) < 20 && qAbs(color.green() - standard.green()) < 20 && qAbs(color.blue() - standard.blue()) < 20) {
+                     color.setRed(255);
+                     color.setGreen(255);
+                     color.setBlue(255);
+                     img.setPixelColor(x, y, color);
+-                }
+-                else
+-                {
++                } else {
+                     img.setPixelColor(x, y, color);
+                 }
+             }
+@@ -223,21 +212,18 @@ QPixmap ThemeController::drawSymbolicColoredPixmap(const QPixmap &source)
+ 
+ QPixmap ThemeController::drawColoredPixmap(const QPixmap &source, const QColor &sampleColor)
+ {
+-//    QColor gray(128,128,128);
+-//    QColor standard (31,32,34);
++    //    QColor gray(128,128,128);
++    //    QColor standard (31,32,34);
+     QImage img = source.toImage();
+-    for (int x = 0; x < img.width(); x++)
+-    {
+-        for (int y = 0; y < img.height(); y++)
+-        {
++    for (int x = 0; x < img.width(); x++) {
++        for (int y = 0; y < img.height(); y++) {
+             auto color = img.pixelColor(x, y);
+-            if (color.alpha() > 0)
+-            {
++            if (color.alpha() > 0) {
+                 color.setRed(sampleColor.red());
+                 color.setGreen(sampleColor.green());
+                 color.setBlue(sampleColor.blue());
+                 img.setPixelColor(x, y, color);
+-             }
++            }
+         }
+     }
+     return QPixmap::fromImage(img);
+@@ -245,15 +231,12 @@ QPixmap ThemeController::drawColoredPixmap(const QPixmap &source, const QColor &
+ 
+ QColor ThemeController::getCurrentIconColor()
+ {
+-    QPixmap pixmap = QIcon::fromTheme("open-menu-symbolic").pixmap(16,16);
++    QPixmap pixmap = QIcon::fromTheme("open-menu-symbolic").pixmap(16, 16);
+     QImage img = pixmap.toImage();
+-    for (int x = 0; x < img.width(); x++)
+-    {
+-        for (int y = 0; y < img.height(); y++)
+-        {
++    for (int x = 0; x < img.width(); x++) {
++        for (int y = 0; y < img.height(); y++) {
+             auto color = img.pixelColor(x, y);
+-            if (color.alpha() > 0)
+-            {
++            if (color.alpha() > 0) {
+                 return color;
+             }
+         }
+@@ -272,9 +255,9 @@ QColor ThemeController::mixColor(const QColor &c1, const QColor &c2, qreal bias)
+         return c1;
+     }
+ 
+-    qreal r = mixQreal(c1.redF(),   c2.redF(),   bias);
++    qreal r = mixQreal(c1.redF(), c2.redF(), bias);
+     qreal g = mixQreal(c1.greenF(), c2.greenF(), bias);
+-    qreal b = mixQreal(c1.blueF(),  c2.blueF(),  bias);
++    qreal b = mixQreal(c1.blueF(), c2.blueF(), bias);
+     qreal a = mixQreal(c1.alphaF(), c2.alphaF(), bias);
+ 
+     return QColor::fromRgbF(r, g, b, a);
+@@ -297,21 +280,20 @@ IconFlag ThemeController::iconTheme()
+ 
+ int ThemeController::systemFontSize()
+ {
+-    if(!g_gsetting)
++    if (!g_gsetting)
+         return 11;
+-    if(g_gsetting->keys().contains("systemFontSize"))
+-    {
++    if (g_gsetting->keys().contains("systemFontSize")) {
+         g_fontSize = (int)g_gsetting->get("systemFontSize").toDouble();
+     }
+     return g_fontSize;
+ }
+ 
+-QPixmap ThemeController::drawFashionBackground(const QRect&rect,int sub_width,int sub_height,int radius, int flag)
++QPixmap ThemeController::drawFashionBackground(const QRect &rect, int sub_width, int sub_height, int radius, int flag)
+ {
+ 
+-//    int radius = 6;
+-//    int sub_width = 32;
+-//    int sub_height = 36;
++    //    int radius = 6;
++    //    int sub_width = 32;
++    //    int sub_height = 36;
+     QPixmap framePixmap(rect.size());
+ 
+     framePixmap.fill(Qt::transparent);
+@@ -320,31 +302,30 @@ QPixmap ThemeController::drawFashionBackground(const QRect&rect,int sub_width,in
+ 
+     auto baseColor = qApp->palette().color(QPalette::Active, QPalette::Button);
+ 
+-    QColor startColor = mixColor(baseColor,QColor(Qt::white),0.5);
+-    QColor endColor = mixColor(baseColor,QColor(Qt::black),0.1);
++    QColor startColor = mixColor(baseColor, QColor(Qt::white), 0.5);
++    QColor endColor = mixColor(baseColor, QColor(Qt::black), 0.1);
+ 
+     QLinearGradient linearGradient;
+     QPainterPath path;
+-    if(flag) //right
++    if (flag) // right
+     {
+-        path.moveTo(drawRect.bottomRight() - QPoint(0,radius + sub_height));
+-        path.lineTo(drawRect.bottomRight() - QPoint(0,radius));
+-        path.quadTo(drawRect.bottomRight(), drawRect.bottomRight() - QPoint(radius,0));
+-        path.lineTo(drawRect.bottomRight() - QPoint(radius + sub_width,0));
+-        path.quadTo(drawRect.bottomRight(),drawRect.bottomRight() - QPoint(0,radius + sub_height));
++        path.moveTo(drawRect.bottomRight() - QPoint(0, radius + sub_height));
++        path.lineTo(drawRect.bottomRight() - QPoint(0, radius));
++        path.quadTo(drawRect.bottomRight(), drawRect.bottomRight() - QPoint(radius, 0));
++        path.lineTo(drawRect.bottomRight() - QPoint(radius + sub_width, 0));
++        path.quadTo(drawRect.bottomRight(), drawRect.bottomRight() - QPoint(0, radius + sub_height));
+ 
+         linearGradient.setColorAt(0, startColor);
+         linearGradient.setColorAt(1, endColor);
+         linearGradient.setStart(drawRect.right(), drawRect.bottom() - (radius + sub_height));
+         linearGradient.setFinalStop(drawRect.right(), drawRect.bottom());
+-    }
+-    else //left
++    } else // left
+     {
+-        path.moveTo(drawRect.bottomLeft() - QPoint(0,radius + sub_height));
+-        path.lineTo(drawRect.bottomLeft() - QPoint(0,radius));
+-        path.quadTo(drawRect.bottomLeft(), drawRect.bottomLeft() + QPoint(radius,0));
+-        path.lineTo(drawRect.bottomLeft() + QPoint(radius + sub_width,0));
+-        path.quadTo(drawRect.bottomLeft(),drawRect.bottomLeft() - QPoint(0,radius + sub_height));
++        path.moveTo(drawRect.bottomLeft() - QPoint(0, radius + sub_height));
++        path.lineTo(drawRect.bottomLeft() - QPoint(0, radius));
++        path.quadTo(drawRect.bottomLeft(), drawRect.bottomLeft() + QPoint(radius, 0));
++        path.lineTo(drawRect.bottomLeft() + QPoint(radius + sub_width, 0));
++        path.quadTo(drawRect.bottomLeft(), drawRect.bottomLeft() - QPoint(0, radius + sub_height));
+ 
+         linearGradient.setColorAt(0, startColor);
+         linearGradient.setColorAt(1, endColor);
+@@ -363,59 +344,58 @@ bool ThemeController::isPixmapPureColor(const QPixmap &pixmap)
+ {
+     QColor symbolic_color = QColor(38, 38, 38);
+ 
+-        if (pixmap.isNull()) {
+-            qWarning("pixmap is null!");
+-            return false;
+-        }
+-        QImage image = pixmap.toImage();
+-
+-        QVector<QColor> vector;
+-        int total_red = 0;
+-        int total_green = 0;
+-        int total_blue = 0;
+-        bool pure = true;
+-        for (int y = 0; y < image.height(); ++y) {
+-            for (int x = 0; x < image.width(); ++x) {
+-                if (image.pixelColor(x, y).alphaF() > 0.3) {
+-                    QColor color = image.pixelColor(x, y);
+-                    vector << color;
+-                    total_red += color.red();
+-                    total_green += color.green();
+-                    total_blue += color.blue();
+-                    int dr = qAbs(color.red() - symbolic_color.red());
+-                    int dg = qAbs(color.green() - symbolic_color.green());
+-                    int db = qAbs(color.blue() - symbolic_color.blue());
+-                    if (dr > ColorDifference || dg > ColorDifference || db > ColorDifference)
+-                        pure = false;
+-                }
++    if (pixmap.isNull()) {
++        qWarning("pixmap is null!");
++        return false;
++    }
++    QImage image = pixmap.toImage();
++
++    QVector<QColor> vector;
++    int total_red = 0;
++    int total_green = 0;
++    int total_blue = 0;
++    bool pure = true;
++    for (int y = 0; y < image.height(); ++y) {
++        for (int x = 0; x < image.width(); ++x) {
++            if (image.pixelColor(x, y).alphaF() > 0.3) {
++                QColor color = image.pixelColor(x, y);
++                vector << color;
++                total_red += color.red();
++                total_green += color.green();
++                total_blue += color.blue();
++                int dr = qAbs(color.red() - symbolic_color.red());
++                int dg = qAbs(color.green() - symbolic_color.green());
++                int db = qAbs(color.blue() - symbolic_color.blue());
++                if (dr > ColorDifference || dg > ColorDifference || db > ColorDifference)
++                    pure = false;
+             }
+         }
++    }
+ 
+-        if (pure)
+-            return true;
+-
+-        qreal squareRoot_red = 0;
+-        qreal squareRoot_green = 0;
+-        qreal squareRoot_blue = 0;
+-        qreal average_red = total_red / vector.count();
+-        qreal average_green = total_green / vector.count();
+-        qreal average_blue = total_blue / vector.count();
+-        for (QColor color : vector) {
+-            squareRoot_red += (color.red() - average_red) * (color.red() - average_red);
+-            squareRoot_green += (color.green() - average_green) * (color.green() - average_green);
+-            squareRoot_blue += (color.blue() - average_blue) * (color.blue() - average_blue);
+-        }
++    if (pure)
++        return true;
++
++    qreal squareRoot_red = 0;
++    qreal squareRoot_green = 0;
++    qreal squareRoot_blue = 0;
++    qreal average_red = total_red / vector.count();
++    qreal average_green = total_green / vector.count();
++    qreal average_blue = total_blue / vector.count();
++    for (QColor color : vector) {
++        squareRoot_red += (color.red() - average_red) * (color.red() - average_red);
++        squareRoot_green += (color.green() - average_green) * (color.green() - average_green);
++        squareRoot_blue += (color.blue() - average_blue) * (color.blue() - average_blue);
++    }
+ 
+-        qreal arithmeticSquareRoot_red = qSqrt(squareRoot_red / vector.count());
+-        qreal arithmeticSquareRoot_green = qSqrt(squareRoot_green / vector.count());
+-        qreal arithmeticSquareRoot_blue = qSqrt(squareRoot_blue / vector.count());
+-        return arithmeticSquareRoot_red < 2.0 && arithmeticSquareRoot_green < 2.0 && arithmeticSquareRoot_blue < 2.0;
++    qreal arithmeticSquareRoot_red = qSqrt(squareRoot_red / vector.count());
++    qreal arithmeticSquareRoot_green = qSqrt(squareRoot_green / vector.count());
++    qreal arithmeticSquareRoot_blue = qSqrt(squareRoot_blue / vector.count());
++    return arithmeticSquareRoot_red < 2.0 && arithmeticSquareRoot_green < 2.0 && arithmeticSquareRoot_blue < 2.0;
+ }
+ 
+ QIcon ThemeController::overlayIcons(const QIcon &icon1, const QIcon &icon2, int iconWidth, int iconHeight, int offsetX, int offsetY)
+ {
+-    if(!icon1.isNull() && !icon2.isNull())
+-    {
++    if (!icon1.isNull() && !icon2.isNull()) {
+         QSize size = icon1.actualSize(QSize(iconWidth, iconHeight));
+ 
+         QPixmap pixmap(size);
+@@ -428,25 +408,22 @@ QIcon ThemeController::overlayIcons(const QIcon &icon1, const QIcon &icon2, int
+         painter.setRenderHint(QPainter::SmoothPixmapTransform);
+ 
+         icon1.paint(&painter, QRect(0, 0, size.width(), size.height()), Qt::AlignCenter);
+-        if(iconWidth > offsetX && iconHeight > offsetY)
+-            icon2.paint(&painter, QRect(offsetX, offsetY, pixmap.width()-offsetX, size.height() - offsetY), Qt::AlignCenter);
++        if (iconWidth > offsetX && iconHeight > offsetY)
++            icon2.paint(&painter, QRect(offsetX, offsetY, pixmap.width() - offsetX, size.height() - offsetY), Qt::AlignCenter);
+         else
+-            icon2.paint(&painter, QRect(pixmap.width()-16, pixmap.height()-16, 16, 16), Qt::AlignCenter);
++            icon2.paint(&painter, QRect(pixmap.width() - 16, pixmap.height() - 16, 16, 16), Qt::AlignCenter);
+ 
+         QIcon resultIcon(pixmap);
+ 
+         return resultIcon;
+-    }
+-    else
+-    {
++    } else {
+         return QIcon();
+     }
+ }
+ 
+ QPixmap ThemeController::overlayPixmaps(const QPixmap &pixmap1, const QPixmap &pixmap2, int offsetX, int offsetY)
+ {
+-    if(!pixmap1.isNull() && !pixmap2.isNull())
+-    {
++    if (!pixmap1.isNull() && !pixmap2.isNull()) {
+         QPixmap resultPixmap(pixmap1.size());
+         resultPixmap.fill(Qt::transparent);
+ 
+@@ -456,19 +433,17 @@ QPixmap ThemeController::overlayPixmaps(const QPixmap &pixmap1, const QPixmap &p
+         painter.setRenderHint(QPainter::TextAntialiasing);
+         painter.setRenderHint(QPainter::SmoothPixmapTransform);
+ 
+-        painter.drawPixmap(QRect(0,0,pixmap1.width(),pixmap1.height()), pixmap1);
++        painter.drawPixmap(QRect(0, 0, pixmap1.width(), pixmap1.height()), pixmap1);
+ 
+-        if(pixmap1.width() > offsetX && pixmap1.height() > offsetY)
+-            painter.drawPixmap(QRect(offsetX,offsetY,pixmap1.width()-offsetX,pixmap1.height()-offsetY),pixmap2);
++        if (pixmap1.width() > offsetX && pixmap1.height() > offsetY)
++            painter.drawPixmap(QRect(offsetX, offsetY, pixmap1.width() - offsetX, pixmap1.height() - offsetY), pixmap2);
+         else
+-            painter.drawPixmap(QRect(pixmap1.width()-16, pixmap1.height()-16, 16, 16),pixmap2);
++            painter.drawPixmap(QRect(pixmap1.width() - 16, pixmap1.height() - 16, 16, 16), pixmap2);
+ 
+         painter.end();
+ 
+         return resultPixmap;
+-    }
+-    else
+-    {
++    } else {
+         return QPixmap();
+     }
+ }
+@@ -476,19 +451,19 @@ QPixmap ThemeController::overlayPixmaps(const QPixmap &pixmap1, const QPixmap &p
+ QColor ThemeController::lanhuHSLToQtHsl(int h, int s, int l, int a)
+ {
+     QColor c;
+-    c.setHsl(h, s * 255.0 /100.0, l * 255.0 /100.0, a);
++    c.setHsl(h, s * 255.0 / 100.0, l * 255.0 / 100.0, a);
+     return c;
+ }
+ 
+ QColor ThemeController::adjustH(const QColor c, int range)
+ {
+     QColor cc;
+-    if((c.hslHue() + range) >= 0)
++    if ((c.hslHue() + range) >= 0)
+         cc.setHsl(c.hslHue() + range, c.hslSaturation(), c.lightness(), c.alpha());
+     else
+         cc.setHsl(c.hslHue(), c.hslSaturation(), c.lightness(), c.alpha());
+ 
+-    return  cc;
++    return cc;
+ }
+ 
+ QColor ThemeController::adjustS(const QColor c, int range)
+@@ -496,18 +471,16 @@ QColor ThemeController::adjustS(const QColor c, int range)
+     QColor cc;
+     int s;
+ 
+-    if((c.hslSaturationF() + range * 1.0 / 100.0) > 1){
+-//        qWarning() << "adjustS s out of range1";
++    if ((c.hslSaturationF() + range * 1.0 / 100.0) > 1) {
++        //        qWarning() << "adjustS s out of range1";
+         s = 255;
+-    }
+-    else if((c.hslSaturationF() + range * 1.0 / 100.0) < 0){
+-//        qWarning() << "adjustS s out of range0";
++    } else if ((c.hslSaturationF() + range * 1.0 / 100.0) < 0) {
++        //        qWarning() << "adjustS s out of range0";
+         s = 0;
+-    }
+-    else
+-        s = (c.hslSaturationF() + range * 1.0 / 100.0) *255.0;
++    } else
++        s = (c.hslSaturationF() + range * 1.0 / 100.0) * 255.0;
+     cc.setHsl(c.hslHue(), s, c.lightness(), c.alpha());
+-    return  cc;
++    return cc;
+ }
+ 
+ QColor ThemeController::adjustL(const QColor c, int range)
+@@ -515,60 +488,55 @@ QColor ThemeController::adjustL(const QColor c, int range)
+     QColor cc;
+     int l;
+ 
+-    if((c.lightnessF() + range * 1.0 / 100.0) > 0.97){
+-//        qWarning() << "adjustL l out of range1";
++    if ((c.lightnessF() + range * 1.0 / 100.0) > 0.97) {
++        //        qWarning() << "adjustL l out of range1";
+         l = 255.0 * 0.97;
+-    }
+-    else if((c.lightnessF() + range * 1.0 / 100.0) < 0.15){
+-//        qWarning() << "adjustL l out of range0" << c.lightnessF() << range << (c.lightnessF() + range * 1.0 / 100.0);
++    } else if ((c.lightnessF() + range * 1.0 / 100.0) < 0.15) {
++        //        qWarning() << "adjustL l out of range0" << c.lightnessF() << range << (c.lightnessF() + range * 1.0 / 100.0);
+         l = 255.0 * 0.15;
+-    }
+-    else
+-        l = (c.lightnessF() + range * 1.0 / 100.0) *255.0;
++    } else
++        l = (c.lightnessF() + range * 1.0 / 100.0) * 255.0;
+ 
+     cc.setHsl(c.hslHue(), c.hslSaturation(), l, c.alpha());
+-    return  cc;
++    return cc;
+ }
+ 
+ QColor ThemeController::adjustA(const QColor c, int range)
+ {
+     QColor cc;
+     int a;
+-    if((c.alphaF() + range * 1.0 / 100.0) > 1){
+-//        qWarning() << "adjustA a out of range1";
++    if ((c.alphaF() + range * 1.0 / 100.0) > 1) {
++        //        qWarning() << "adjustA a out of range1";
+         a = 255;
+-    }
+-    else if((c.alphaF() + range * 1.0 / 100.0) < 0){
+-//        qWarning() << "adjustA a out of range0";
++    } else if ((c.alphaF() + range * 1.0 / 100.0) < 0) {
++        //        qWarning() << "adjustA a out of range0";
+         a = 0;
+-    }
+-    else
+-        a = (c.alphaF() + range * 1.0 / 100.0) *255.0;
+-
++    } else
++        a = (c.alphaF() + range * 1.0 / 100.0) * 255.0;
+ 
+     cc.setHsl(c.hslHue(), c.hslSaturation(), c.lightness(), a);
+-    return  cc;
++    return cc;
+ }
+ 
+ QColor ThemeController::highlightClick(bool isDark, QPalette p)
+ {
+-    if(isDark){
+-        return adjustColor(p.color(QPalette::Active, QPalette::Highlight), 0, -25, -34);//hightlight->210,72%,71% 210,47%,37%
++    if (isDark) {
++        return adjustColor(p.color(QPalette::Active, QPalette::Highlight), 0, -25, -34); // hightlight->210,72%,71% 210,47%,37%
+     }
+-    return adjustColor(p.color(QPalette::Active, QPalette::Highlight), 3, 10, 31);//hightlight->209,87%,57% 212,97%,88%
++    return adjustColor(p.color(QPalette::Active, QPalette::Highlight), 3, 10, 31); // hightlight->209,87%,57% 212,97%,88%
+ }
+ 
+ QColor ThemeController::highlightHover(bool isDark, QPalette p)
+ {
+-    if(isDark){
+-        return adjustColor(p.color(QPalette::Active, QPalette::Highlight), 0, -26, -40);//210,46%,31%
++    if (isDark) {
++        return adjustColor(p.color(QPalette::Active, QPalette::Highlight), 0, -26, -40); // 210,46%,31%
+     }
+-    return adjustColor(p.color(QPalette::Active, QPalette::Highlight), 4, 2, 36);//213,89%,93%
++    return adjustColor(p.color(QPalette::Active, QPalette::Highlight), 4, 2, 36); // 213,89%,93%
+ }
+ 
+ QColor ThemeController::buttonDarkClick(bool isDark, QPalette p)
+ {
+-    if(isDark){
++    if (isDark) {
+         return adjustColor(p.color(QPalette::Disabled, QPalette::ButtonText), 0, 1, 5);
+     }
+     return QColor();
+@@ -577,30 +545,28 @@ QColor ThemeController::buttonDarkClick(bool isDark, QPalette p)
+ bool ThemeController::systemLang()
+ {
+     QString systemLang = QLocale::system().name();
+-    if(systemLang == "ug_CN" || systemLang == "ky_KG" || systemLang == "kk_KZ")
++    if (systemLang == "ug_CN" || systemLang == "ky_KG" || systemLang == "kk_KZ")
+         return true;
+     else
+         return false;
+ }
+ 
+-QColor ThemeController::getPaletteColorFromDT(QString dtString,QPalette::ColorGroup group)
++QColor ThemeController::getPaletteColorFromDT(QString dtString, QPalette::ColorGroup group)
+ {
+     QColor color;
+-    QPalette::ColorGroup colorGroup ;
+-    if(group == QPalette::NColorGroups)
++    QPalette::ColorGroup colorGroup;
++    if (group == QPalette::NColorGroups)
+         colorGroup = qApp->palette().currentColorGroup();
+     else
+-        colorGroup =  group;
++        colorGroup = group;
+     QString str = dtString + "-" + getDTColorGroup(colorGroup);
+-    char* m_char = str.toLocal8Bit().data();
+-    if (qApp->property(m_char).isValid() && qApp->property(m_char).canConvert<QColor>())
+-    {
+-        color =  qApp->property(m_char).value<QColor>();
++    char *m_char = str.toLocal8Bit().data();
++    if (qApp->property(m_char).isValid() && qApp->property(m_char).canConvert<QColor>()) {
++        color = qApp->property(m_char).value<QColor>();
+     }
+-    if(!color.isValid())
+-    {
++    if (!color.isValid()) {
+         QPalette::ColorRole colorRole = getColorRole(dtString);
+-        color = qApp->palette().color(colorGroup,colorRole);
++        color = qApp->palette().color(colorGroup, colorRole);
+     }
+     return color;
+ }
+@@ -608,40 +574,36 @@ QColor ThemeController::getPaletteColorFromDT(QString dtString,QPalette::ColorGr
+ QColor ThemeController::getCustomColorFromDT(QString dtString)
+ {
+     QColor color;
+-    char* m_char = dtString.toLocal8Bit().data();
+-    if (qApp->property(m_char).isValid() && qApp->property(m_char).canConvert<QColor>())
+-    {
+-        color =  qApp->property(m_char).value<QColor>();
++    char *m_char = dtString.toLocal8Bit().data();
++    if (qApp->property(m_char).isValid() && qApp->property(m_char).canConvert<QColor>()) {
++        color = qApp->property(m_char).value<QColor>();
+     }
+     return color;
+ }
+ 
+ QString ThemeController::getFontStylesFromDT(QString dtString)
+ {
+-    char* m_char = dtString.toLocal8Bit().data();
+-    if (qApp->property(m_char).isValid() && qApp->property(m_char).canConvert<QColor>())
+-    {
+-        return  qApp->property(m_char).value<QString>();
++    char *m_char = dtString.toLocal8Bit().data();
++    if (qApp->property(m_char).isValid() && qApp->property(m_char).canConvert<QColor>()) {
++        return qApp->property(m_char).value<QString>();
+     }
+     return QString();
+ }
+ 
+ int ThemeController::getRadiusFromDT(QString dtString)
+ {
+-    char* m_char = dtString.toLocal8Bit().data();
+-    if (qApp->property(m_char).isValid() && qApp->property(m_char).canConvert<QColor>())
+-    {
+-        return  qApp->property(m_char).value<int>();
++    char *m_char = dtString.toLocal8Bit().data();
++    if (qApp->property(m_char).isValid() && qApp->property(m_char).canConvert<QColor>()) {
++        return qApp->property(m_char).value<int>();
+     }
+     return -1;
+ }
+ 
+ int ThemeController::getLineOrMarginFromDT(QString dtString)
+ {
+-    char* m_char = dtString.toLocal8Bit().data();
+-    if (qApp->property(m_char).isValid() && qApp->property(m_char).canConvert<QColor>())
+-    {
+-        return  qApp->property(m_char).value<int>();
++    char *m_char = dtString.toLocal8Bit().data();
++    if (qApp->property(m_char).isValid() && qApp->property(m_char).canConvert<QColor>()) {
++        return qApp->property(m_char).value<int>();
+     }
+     return -1;
+ }
+@@ -656,11 +618,10 @@ void ThemeController::getGradientFromDT(QString key, QColor &startColor, QColor
+         "com.kylin.themeConfig",
+         "/com/kylin/ThemeConfig",
+         "com.kylin.ThemeConfig.DTParameters",
+-        "GetDTThemeConfig"
+-    );
++        "GetDTThemeConfig");
+ 
+-    //可以调整dt key值调试
+-//    QString key = QString("kfont-strong");
++    // 可以调整dt key值调试
++    //    QString key = QString("kfont-strong");
+     QVariantList arguments;
+     arguments.append(key);
+     message.setArguments(arguments);
+@@ -676,8 +637,7 @@ void ThemeController::getGradientFromDT(QString key, QColor &startColor, QColor
+             type = option.value("type").toUInt();
+         }
+ 
+-        if (type == 3 && option.contains(QStringLiteral("start_color")) &&
+-                option.contains(QStringLiteral("end_color"))) {
++        if (type == 3 && option.contains(QStringLiteral("start_color")) && option.contains(QStringLiteral("end_color"))) {
+ 
+             QByteArray startvalue = option.value(QStringLiteral("start_color")).toByteArray();
+             uint8_t c[4];
+@@ -701,14 +661,12 @@ void ThemeController::getGradientFromDT(QString key, QColor &startColor, QColor
+             endColor.setAlpha(c[3]);
+         }
+     }
+-
+ }
+ 
+ ThemeController::ThemeController()
+-    :m_gsetting(nullptr)
++    : m_gsetting(nullptr)
+ {
+-    if(QGSettings::isSchemaInstalled(FITTHEMEWINDOW))
+-    {
++    if (QGSettings::isSchemaInstalled(FITTHEMEWINDOW)) {
+         m_gsetting = new QGSettings(FITTHEMEWINDOW);
+         g_gsetting = m_gsetting;
+         initThemeStyle();
+@@ -717,42 +675,37 @@ ThemeController::ThemeController()
+ 
+ ThemeController::~ThemeController()
+ {
+-
+ }
+ 
+ void ThemeController::initThemeStyle()
+ {
+-    if(!m_gsetting)
++    if (!m_gsetting)
+         return;
+-    if(m_gsetting->keys().contains("styleName"))
+-    {
++    if (m_gsetting->keys().contains("styleName")) {
+         QString styleName = m_gsetting->get("styleName").toString();
+-        if(styleName == "ukui-dark" || styleName == "ukui-black" || (styleName == "ukui-default" && applist.contains(QApplication::applicationName())))
++        if (styleName == "ukui-dark" || styleName == "ukui-black" || (styleName == "ukui-default" && applist.contains(QApplication::applicationName())))
+             g_themeFlag = DarkTheme;
+         else
+             g_themeFlag = LightTheme;
+     }
+ 
+-    //初始化图标主题
+-    if(m_gsetting->keys().contains("iconThemeName"))
+-    {
++    // 初始化图标主题
++    if (m_gsetting->keys().contains("iconThemeName")) {
+         QString iconThemeName = m_gsetting->get("iconThemeName").toString();
+-        if(iconThemeName == "ukui-icon-theme-default")
++        if (iconThemeName == "ukui-icon-theme-default")
+             g_iconFlag = DefaultStyle;
+-        else
+-        {
++        else {
+             g_iconFlag = ClassicStyle;
+         }
+     }
+-    if(m_gsetting->keys().contains("widgetThemeName"))
+-    {
+-        //初始化样式主题
++    if (m_gsetting->keys().contains("widgetThemeName")) {
++        // 初始化样式主题
+         QString widgetThemeName = m_gsetting->get("widgetThemeName").toString();
+-        if(widgetThemeName == "default")
++        if (widgetThemeName == "default")
+             g_widgetThemeFlag = DefaultTheme;
+-        else if(widgetThemeName == "classical")
++        else if (widgetThemeName == "classical")
+             g_widgetThemeFlag = ClassicTheme;
+         else
+-           g_widgetThemeFlag = FashionTheme;
++            g_widgetThemeFlag = FashionTheme;
+     }
+ }
+diff --git a/kysdk-qtwidgets/src/themeController.h b/kysdk-qtwidgets/src/themeController.h
+index f4f7601..5c33b83 100644
+--- a/kysdk-qtwidgets/src/themeController.h
++++ b/kysdk-qtwidgets/src/themeController.h
+@@ -26,25 +26,22 @@
+ #include <QGSettings/QGSettings>
+ #include <QPushButton>
+ 
+-static const QByteArray FITTHEMEWINDOW =  "org.ukui.style";
++static const QByteArray FITTHEMEWINDOW = "org.ukui.style";
+ 
+-enum ThemeFlag
+-{
++enum ThemeFlag {
+     LightTheme,
+     DarkTheme
+ };
+ 
+-enum IconFlag
+-{
++enum IconFlag {
+     DefaultStyle,
+     ClassicStyle
+ };
+ 
+-enum WidgetThemeFlag
+-{
+-    DefaultTheme, //寻光
+-    ClassicTheme, //启典
+-    FashionTheme  //和印
++enum WidgetThemeFlag {
++    DefaultTheme, // 寻光
++    ClassicTheme, // 启典
++    FashionTheme // 和印
+ };
+ 
+ class ThemeController
+@@ -52,44 +49,48 @@ class ThemeController
+ 
+ public:
+     static QPixmap drawSymbolicColoredPixmap(const QPixmap &source);
+-    static QPixmap drawColoredPixmap(const QPixmap &source,const QColor &sampleColor);
++    static QPixmap drawColoredPixmap(const QPixmap &source, const QColor &sampleColor);
+     static QColor getCurrentIconColor();
+     static QColor mixColor(const QColor &c1, const QColor &c2, qreal bias = 0.5);
+     static WidgetThemeFlag widgetTheme();
+     static ThemeFlag themeMode();
+     static IconFlag iconTheme();
+     static int systemFontSize();
+-    static QPixmap drawFashionBackground(const QRect&rect,int sub_width,int sub_height,int radius,int flag); // flag ? rightBottom : leftBottom;
+-    static bool isPixmapPureColor(const QPixmap &pixmap) ;
+-    static QIcon overlayIcons(const QIcon &icon1, const QIcon &icon2,int iconWidth,int iconHeight ,int offsetX = 0, int offsetY = 0);
+-    static QPixmap overlayPixmaps(const QPixmap &pixmap1, const QPixmap &pixmap2 ,int offsetX = 0, int offsetY = 0);
++    static QPixmap drawFashionBackground(const QRect &rect, int sub_width, int sub_height, int radius, int flag); // flag ? rightBottom : leftBottom;
++    static bool isPixmapPureColor(const QPixmap &pixmap);
++    static QIcon overlayIcons(const QIcon &icon1, const QIcon &icon2, int iconWidth, int iconHeight, int offsetX = 0, int offsetY = 0);
++    static QPixmap overlayPixmaps(const QPixmap &pixmap1, const QPixmap &pixmap2, int offsetX = 0, int offsetY = 0);
+     static QColor lanhuHSLToQtHsl(int h, int s, int l, int a = 255);
+     static QColor adjustH(const QColor c, int range);
+     static QColor adjustS(const QColor c, int range);
+     static QColor adjustL(const QColor c, int range);
+     static QColor adjustA(const QColor c, int range);
+-    static QColor highlightClick(bool isDark, QPalette p) ;
+-    static QColor highlightHover(bool isDark, QPalette p) ;
+-    static QColor buttonDarkClick(bool isDark, QPalette p) ;
++    static QColor highlightClick(bool isDark, QPalette p);
++    static QColor highlightHover(bool isDark, QPalette p);
++    static QColor buttonDarkClick(bool isDark, QPalette p);
+     static bool systemLang();
+ 
+-    static QColor getPaletteColorFromDT(QString dtString,QPalette::ColorGroup group = QPalette::Normal);
++    static QColor getPaletteColorFromDT(QString dtString, QPalette::ColorGroup group = QPalette::Normal);
+     static QColor getCustomColorFromDT(QString dtString);
+     static QString getFontStylesFromDT(QString dtString);
+     static int getRadiusFromDT(QString dtString);
+     static int getLineOrMarginFromDT(QString dtString);
+ 
+-    static void getGradientFromDT(QString key ,QColor &startColor,QColor &endColor);
++    static void getGradientFromDT(QString key, QColor &startColor, QColor &endColor);
+ 
+     ThemeController();
+     ~ThemeController();
+ 
+-    virtual void changeTheme(){}
+-    virtual void changeIconStyle(){}
++    virtual void changeTheme()
++    {
++    }
++    virtual void changeIconStyle()
++    {
++    }
+     void initThemeStyle();
+ 
+     QGSettings *m_gsetting;
+-    //unused
++    // unused
+     ThemeFlag m_themeFlag;
+     IconFlag m_iconFlag;
+ };
+diff --git a/kysdk-qtwidgets/src/xatom-helper.cpp b/kysdk-qtwidgets/src/xatom-helper.cpp
+index 14ecbfa..295442a 100644
+--- a/kysdk-qtwidgets/src/xatom-helper.cpp
++++ b/kysdk-qtwidgets/src/xatom-helper.cpp
+@@ -27,7 +27,7 @@
+ 
+ #include <X11/X.h>
+ #include <X11/Xatom.h>
+-//#include <NETWM>
++// #include <NETWM>
+ using namespace kdk;
+ static XAtomHelper *global_instance = nullptr;
+ 
+@@ -116,9 +116,9 @@ UnityCorners XAtomHelper::getWindowBorderRadius(int winId)
+         if (type == XA_CARDINAL) {
+             if (nitems == 4) {
+                 corners.topLeft = static_cast<ulong>(data[0]);
+-                corners.topRight = static_cast<ulong>(data[1*sizeof (ulong)]);
+-                corners.bottomLeft = static_cast<ulong>(data[2*sizeof (ulong)]);
+-                corners.bottomRight = static_cast<ulong>(data[3*sizeof (ulong)]);
++                corners.topRight = static_cast<ulong>(data[1 * sizeof(ulong)]);
++                corners.bottomLeft = static_cast<ulong>(data[2 * sizeof(ulong)]);
++                corners.bottomRight = static_cast<ulong>(data[3 * sizeof(ulong)]);
+             }
+             XFree(data);
+         }
+@@ -135,7 +135,7 @@ void XAtomHelper::setWindowBorderRadius(int winId, const UnityCorners &data)
+     ulong corners[4] = {data.topLeft, data.topRight, data.bottomLeft, data.bottomRight};
+ 
+     XChangeProperty(QX11Info::display(), winId, m_unityBorderRadiusAtom, XA_CARDINAL,
+-                    32, 0, (const unsigned char *) &corners, sizeof (corners)/sizeof (corners[0]));
++                    32, 0, (const unsigned char *)&corners, sizeof(corners) / sizeof(corners[0]));
+ }
+ 
+ void XAtomHelper::setWindowBorderRadius(int winId, int topLeft, int topRight, int bottomLeft, int bottomRight)
+@@ -146,7 +146,7 @@ void XAtomHelper::setWindowBorderRadius(int winId, int topLeft, int topRight, in
+     ulong corners[4] = {(ulong)topLeft, (ulong)topRight, (ulong)bottomLeft, (ulong)bottomRight};
+ 
+     XChangeProperty(QX11Info::display(), winId, m_unityBorderRadiusAtom, XA_CARDINAL,
+-                    32, 0, (const unsigned char *) &corners, sizeof (corners)/sizeof (corners[0]));
++                    32, 0, (const unsigned char *)&corners, sizeof(corners) / sizeof(corners[0]));
+ }
+ 
+ void XAtomHelper::setUKUIDecoraiontHint(int winId, bool set)
+@@ -154,7 +154,7 @@ void XAtomHelper::setUKUIDecoraiontHint(int winId, bool set)
+     if (m_ukuiDecorationAtion == None)
+         return;
+ 
+-    XChangeProperty(QX11Info::display(), winId, m_ukuiDecorationAtion, m_ukuiDecorationAtion, 32, 0, (const unsigned char *) &set, 1);
++    XChangeProperty(QX11Info::display(), winId, m_ukuiDecorationAtion, m_ukuiDecorationAtion, 32, 0, (const unsigned char *)&set, 1);
+ }
+ 
+ void XAtomHelper::setWindowMotifHint(int winId, const MotifWmHints &hints)
+@@ -163,7 +163,7 @@ void XAtomHelper::setWindowMotifHint(int winId, const MotifWmHints &hints)
+         return;
+ 
+     XChangeProperty(QX11Info::display(), winId, m_motifWMHintsAtom, m_motifWMHintsAtom,
+-                    32, 0, (const unsigned char *)&hints, sizeof (MotifWmHints)/ sizeof (ulong));
++                    32, 0, (const unsigned char *)&hints, sizeof(MotifWmHints) / sizeof(ulong));
+ }
+ 
+ MotifWmHints XAtomHelper::getWindowMotifHint(int winId)
+@@ -180,7 +180,7 @@ MotifWmHints XAtomHelper::getWindowMotifHint(int winId)
+     ulong bytes_after;
+ 
+     XGetWindowProperty(QX11Info::display(), winId, m_motifWMHintsAtom,
+-                       0, sizeof (MotifWmHints)/sizeof (long), false, AnyPropertyType, &type,
++                       0, sizeof(MotifWmHints) / sizeof(long), false, AnyPropertyType, &type,
+                        &format, &nitems, &bytes_after, &data);
+ 
+     if (type == None) {
+@@ -192,7 +192,8 @@ MotifWmHints XAtomHelper::getWindowMotifHint(int winId)
+     return hints;
+ }
+ 
+-XAtomHelper::XAtomHelper(QObject *parent) : QObject(parent)
++XAtomHelper::XAtomHelper(QObject *parent)
++    : QObject(parent)
+ {
+     if (!QX11Info::isPlatformX11())
+         return;
+diff --git a/kysdk-qtwidgets/src/xatom-helper.h b/kysdk-qtwidgets/src/xatom-helper.h
+index 7b6d2a9..04ca02d 100644
+--- a/kysdk-qtwidgets/src/xatom-helper.h
++++ b/kysdk-qtwidgets/src/xatom-helper.h
+@@ -25,16 +25,18 @@
+ #include <QObject>
+ 
+ #include <X11/Xlib.h>
+-//#include <NETWM>
++// #include <NETWM>
+ 
+-struct UnityCorners {
++struct UnityCorners
++{
+     ulong topLeft = 0;
+     ulong topRight = 0;
+     ulong bottomLeft = 0;
+     ulong bottomRight = 0;
+ };
+ 
+-typedef struct {
++typedef struct
++{
+     ulong flags = 0;
+     ulong functions = 0;
+     ulong decorations = 0;
+@@ -42,25 +44,25 @@ typedef struct {
+     ulong status = 0;
+ } MotifWmHints, MwmHints;
+ 
+-#define MWM_HINTS_FUNCTIONS     (1L << 0)
+-#define MWM_HINTS_DECORATIONS   (1L << 1)
+-#define MWM_HINTS_INPUT_MODE    (1L << 2)
+-#define MWM_HINTS_STATUS        (1L << 3)
+-
+-#define MWM_FUNC_ALL            (1L << 0)
+-#define MWM_FUNC_RESIZE         (1L << 1)
+-#define MWM_FUNC_MOVE           (1L << 2)
+-#define MWM_FUNC_MINIMIZE       (1L << 3)
+-#define MWM_FUNC_MAXIMIZE       (1L << 4)
+-#define MWM_FUNC_CLOSE          (1L << 5)
+-
+-#define MWM_DECOR_ALL           (1L << 0)
+-#define MWM_DECOR_BORDER        (1L << 1)
+-#define MWM_DECOR_RESIZEH       (1L << 2)
+-#define MWM_DECOR_TITLE         (1L << 3)
+-#define MWM_DECOR_MENU          (1L << 4)
+-#define MWM_DECOR_MINIMIZE      (1L << 5)
+-#define MWM_DECOR_MAXIMIZE      (1L << 6)
++#define MWM_HINTS_FUNCTIONS (1L << 0)
++#define MWM_HINTS_DECORATIONS (1L << 1)
++#define MWM_HINTS_INPUT_MODE (1L << 2)
++#define MWM_HINTS_STATUS (1L << 3)
++
++#define MWM_FUNC_ALL (1L << 0)
++#define MWM_FUNC_RESIZE (1L << 1)
++#define MWM_FUNC_MOVE (1L << 2)
++#define MWM_FUNC_MINIMIZE (1L << 3)
++#define MWM_FUNC_MAXIMIZE (1L << 4)
++#define MWM_FUNC_CLOSE (1L << 5)
++
++#define MWM_DECOR_ALL (1L << 0)
++#define MWM_DECOR_BORDER (1L << 1)
++#define MWM_DECOR_RESIZEH (1L << 2)
++#define MWM_DECOR_TITLE (1L << 3)
++#define MWM_DECOR_MENU (1L << 4)
++#define MWM_DECOR_MINIMIZE (1L << 5)
++#define MWM_DECOR_MAXIMIZE (1L << 6)
+ 
+ #define MWM_INPUT_MODELESS 0
+ #define MWM_INPUT_PRIMARY_APPLICATION_MODAL 1
+@@ -68,9 +70,10 @@ typedef struct {
+ #define MWM_INPUT_FULL_APPLICATION_MODAL 3
+ #define MWM_INPUT_APPLICATION_MODAL MWM_INPUT_PRIMARY_APPLICATION_MODAL
+ 
+-#define MWM_TEAROFF_WINDOW	(1L<<0)
++#define MWM_TEAROFF_WINDOW (1L << 0)
+ 
+-namespace kdk {
++namespace kdk
++{
+ class Decoration;
+ 
+ class XAtomHelper : public QObject
+diff --git a/kysdk-qtwidgets/test/testAddFileButton/widget.cpp b/kysdk-qtwidgets/test/testAddFileButton/widget.cpp
+index 9c22631..c3055c8 100644
+--- a/kysdk-qtwidgets/test/testAddFileButton/widget.cpp
++++ b/kysdk-qtwidgets/test/testAddFileButton/widget.cpp
+@@ -1,36 +1,36 @@
+ #include "widget.h"
+ #include "kaddfilebutton.h"
++#include <QAbstractItemDelegate>
++#include <QBoxLayout>
+ #include <QDebug>
+ #include <QTreeView>
+-#include <QBoxLayout>
+-#include <QAbstractItemDelegate>
+ 
+ using namespace kdk;
+ Widget::Widget(QWidget *parent)
+     : QWidget(parent)
+ {
+-    QTreeView* view = new QTreeView(this);
+-    QHBoxLayout* layout = new QHBoxLayout(view);
+-    KAddFileButton* button1 = new KAddFileButton();
+-    KAddFileButton* button2 = new KAddFileButton();
++    QTreeView *view = new QTreeView(this);
++    QHBoxLayout *layout = new QHBoxLayout(view);
++    KAddFileButton *button1 = new KAddFileButton();
++    KAddFileButton *button2 = new KAddFileButton();
+     QStringList list;
+-    list<<"JPEG Files(*.jpg)"<<"PNG Files(*.png)";
++    list << "JPEG Files(*.jpg)"
++         << "PNG Files(*.png)";
+     button2->setNameFilters(list);
+ 
+     layout->addWidget(button1);
+     layout->addWidget(button2);
+ 
+-    connect(button1,&KAddFileButton::clicked,[=]{
+-        qDebug()<<"button1 选择路径"<<button1->fileDialog()->selectedFiles();
++    connect(button1, &KAddFileButton::clicked, [=] {
++        qDebug() << "button1 选择路径" << button1->fileDialog()->selectedFiles();
+     });
+-    connect(button2,&KAddFileButton::clicked,[=]{
+-        qDebug()<<"button2 选择路径"<<button2->fileDialog()->selectedFiles();
++    connect(button2, &KAddFileButton::clicked, [=] {
++        qDebug() << "button2 选择路径" << button2->fileDialog()->selectedFiles();
+     });
+ 
+-    setFixedSize(600,500);
++    setFixedSize(600, 500);
+ }
+ 
+ Widget::~Widget()
+ {
+ }
+-
+diff --git a/kysdk-qtwidgets/test/testDialog/main.cpp b/kysdk-qtwidgets/test/testDialog/main.cpp
+index b920b43..b9c8610 100644
+--- a/kysdk-qtwidgets/test/testDialog/main.cpp
++++ b/kysdk-qtwidgets/test/testDialog/main.cpp
+@@ -1,5 +1,5 @@
+ /*
+- * 
++ *
+  *
+  * Copyright (C) 2023, KylinSoft Co., Ltd.
+  *
+@@ -22,9 +22,9 @@
+ 
+ #include "widget.h"
+ 
++#include "kwidgetutils.h"
+ #include <QApplication>
+ #include <QTranslator>
+-#include "kwidgetutils.h"
+ 
+ int main(int argc, char *argv[])
+ {
+@@ -32,17 +32,13 @@ int main(int argc, char *argv[])
+     QApplication a(argc, argv);
+     QTranslator trans;
+     QString locale = QLocale::system().name();
+-    if(locale == "zh_CN")
+-    {
+-        if(trans.load(":/translations/gui_zh_CN.qm"))
+-        {
++    if (locale == "zh_CN") {
++        if (trans.load(":/translations/gui_zh_CN.qm")) {
+             a.installTranslator(&trans);
+         }
+     }
+-    if(locale == "bo_CN")
+-    {
+-        if(trans.load(":/translations/gui_bo_CN.qm"))
+-        {
++    if (locale == "bo_CN") {
++        if (trans.load(":/translations/gui_bo_CN.qm")) {
+             a.installTranslator(&trans);
+         }
+     }
+diff --git a/kysdk-qtwidgets/test/testDialog/widget.cpp b/kysdk-qtwidgets/test/testDialog/widget.cpp
+index a9bda9c..a402ab4 100644
+--- a/kysdk-qtwidgets/test/testDialog/widget.cpp
++++ b/kysdk-qtwidgets/test/testDialog/widget.cpp
+@@ -1,5 +1,5 @@
+ /*
+- * 
++ *
+  *
+  * Copyright (C) 2023, KylinSoft Co., Ltd.
+  *
+@@ -25,28 +25,28 @@
+ #include <QBoxLayout>
+ #include <QPushButton>
+ 
++#include "kaboutdialog.h"
+ #include "kdialog.h"
+ #include "kuninstalldialog.h"
+-#include "kaboutdialog.h"
+ 
+ Widget::Widget(QWidget *parent)
+     : KWidget(parent)
+ {
+-    QVBoxLayout* vLayout = new QVBoxLayout;
+-    QPushButton*pBtn1 =  new QPushButton("对话框",this);
+-    QPushButton*pBtn2 = new QPushButton("卸载对话框",this);
+-    QPushButton*pBtn3 = new QPushButton("关于对话框",this);
+-    KDialog*dialog = new KDialog();
+-    //设置标题
++    QVBoxLayout *vLayout = new QVBoxLayout;
++    QPushButton *pBtn1 = new QPushButton("对话框", this);
++    QPushButton *pBtn2 = new QPushButton("卸载对话框", this);
++    QPushButton *pBtn3 = new QPushButton("关于对话框", this);
++    KDialog *dialog = new KDialog();
++    // 设置标题
+     dialog->setWindowTitle("对话框");
+-    //设置icon
++    // 设置icon
+     dialog->setWindowIcon("kylin-music");
+-    //显示最小化和最大化按钮
++    // 显示最小化和最大化按钮
+     dialog->maximumButton()->show();
+     dialog->minimumButton()->show();
+ 
+-    KUninstallDialog *uninstallDialog = new KUninstallDialog("browser360-cn-stable","104",this);
+-    KAboutDialog *aboutDialog = new KAboutDialog(this,QIcon::fromTheme("kylin-music"),"麒麟音乐",tr("版本:2020.1.0"));
++    KUninstallDialog *uninstallDialog = new KUninstallDialog("browser360-cn-stable", "104", this);
++    KAboutDialog *aboutDialog = new KAboutDialog(this, QIcon::fromTheme("kylin-music"), "麒麟音乐", tr("版本:2020.1.0"));
+     aboutDialog->setBodyText("关于对话框,包含的主要内容有:应用图标,应用名称,版本号,团队邮箱以及具体的应用描述,注意,默认应用描述是不显示的。");
+     aboutDialog->setBodyTextVisiable(true);
+     vLayout->addStretch();
+@@ -54,22 +54,27 @@ Widget::Widget(QWidget *parent)
+     vLayout->addWidget(pBtn2);
+     vLayout->addWidget(pBtn3);
+     vLayout->addStretch();
+-    connect(pBtn1,&QPushButton::clicked,this,[=](){dialog->show();});
+-    connect(pBtn2,&QPushButton::clicked,this,[=](){uninstallDialog->show();});
+-    connect(pBtn3,&QPushButton::clicked,this,[=](){aboutDialog->show();});
+-//    QHBoxLayout* tmpLayout = dynamic_cast<QHBoxLayout*>(windowButtonBar()->layout());
+-//    QPushButton* btn = new QPushButton("btn",this);
+-//    tmpLayout->insertWidget(1,btn);
++    connect(pBtn1, &QPushButton::clicked, this, [=]() {
++        dialog->show();
++    });
++    connect(pBtn2, &QPushButton::clicked, this, [=]() {
++        uninstallDialog->show();
++    });
++    connect(pBtn3, &QPushButton::clicked, this, [=]() {
++        aboutDialog->show();
++    });
++    //    QHBoxLayout* tmpLayout = dynamic_cast<QHBoxLayout*>(windowButtonBar()->layout());
++    //    QPushButton* btn = new QPushButton("btn",this);
++    //    tmpLayout->insertWidget(1,btn);
+     QHBoxLayout *hLayout = new QHBoxLayout(dialog);
+-    QPushButton*pBtn5 =  new QPushButton("对话框",dialog);
++    QPushButton *pBtn5 = new QPushButton("对话框", dialog);
+     hLayout->addWidget(pBtn5);
+-    dialog->mainWidget()->setLayout(hLayout);   //获取主内容区,通过setLayout()添加内容
+-    dialog->menuButton()->show();//获取下拉菜单按钮,默认是隐藏的,不显示
+-    //dialog->closeButton()->show();//获取关闭按钮。
++    dialog->mainWidget()->setLayout(hLayout); // 获取主内容区,通过setLayout()添加内容
++    dialog->menuButton()->show(); // 获取下拉菜单按钮,默认是隐藏的,不显示
++    // dialog->closeButton()->show();//获取关闭按钮。
+     baseBar()->setLayout(vLayout);
+ }
+ 
+ Widget::~Widget()
+ {
+ }
+-
+diff --git a/kysdk-qtwidgets/test/testDialog/widget.h b/kysdk-qtwidgets/test/testDialog/widget.h
+index c98c809..5ee7bb7 100644
+--- a/kysdk-qtwidgets/test/testDialog/widget.h
++++ b/kysdk-qtwidgets/test/testDialog/widget.h
+@@ -1,5 +1,5 @@
+ /*
+- * 
++ *
+  *
+  * Copyright (C) 2023, KylinSoft Co., Ltd.
+  *
+diff --git a/kysdk-qtwidgets/test/testFileWidget/widget.cpp b/kysdk-qtwidgets/test/testFileWidget/widget.cpp
+index 8b06f3b..82792c1 100644
+--- a/kysdk-qtwidgets/test/testFileWidget/widget.cpp
++++ b/kysdk-qtwidgets/test/testFileWidget/widget.cpp
+@@ -1,39 +1,39 @@
+ #include "widget.h"
+ #include "kfilewidget.h"
+-#include <QIcon>
+ #include "kpressbutton.h"
+-#include <QObject>
+ #include <QHBoxLayout>
++#include <QIcon>
++#include <QObject>
+ 
+ Widget::Widget(QWidget *parent)
+     : KWidget(parent)
+ {
+-    QVBoxLayout* layout = new QVBoxLayout();
++    QVBoxLayout *layout = new QVBoxLayout();
+ 
+-    KFileWidget* widget1 = new KFileWidget(this);
+-    widget1->setFixedSize(150,56);
++    KFileWidget *widget1 = new KFileWidget(this);
++    widget1->setFixedSize(150, 56);
+     widget1->setMainText("文档.word");
+     widget1->setSubText("大小 1MB");
+     widget1->setIcon(QIcon::fromTheme("wps-office2019-wpsmain"));
+-    widget1->setBorderRadius(0,10,0,10);
+-    connect(widget1,&KFileWidget::clicked,this,[=]{
++    widget1->setBorderRadius(0, 10, 0, 10);
++    connect(widget1, &KFileWidget::clicked, this, [=] {
+         widget1->hide();
+     });
+ 
+-    KFileWidget* widget2 = new KFileWidget(this);
++    KFileWidget *widget2 = new KFileWidget(this);
+     widget2->setMainText("文档.word");
+     widget2->setIcon(QIcon::fromTheme("wps-office2019-wpsmain"));
+     widget2->setEnabled(false);
+-    connect(widget2,&KFileWidget::clicked,this,[=]{
++    connect(widget2, &KFileWidget::clicked, this, [=] {
+         widget2->hide();
+     });
+ 
+-    KFileWidget* widget3 = new KFileWidget(this);
++    KFileWidget *widget3 = new KFileWidget(this);
+     widget3->setMainText("文档.word");
+     widget3->setIcon(QIcon::fromTheme("wps-office2019-wpsmain"));
+-    widget3->setFixedSize(150,56);
++    widget3->setFixedSize(150, 56);
+     widget3->setBorderRadius(0);
+-    connect(widget3,&KFileWidget::clicked,this,[=]{
++    connect(widget3, &KFileWidget::clicked, this, [=] {
+         widget3->hide();
+     });
+ 
+@@ -43,15 +43,12 @@ Widget::Widget(QWidget *parent)
+     layout->addWidget(widget3);
+     layout->addStretch();
+ 
+-    QHBoxLayout* hlayout = new QHBoxLayout();
++    QHBoxLayout *hlayout = new QHBoxLayout();
+     hlayout->addLayout(layout);
+ 
+     baseBar()->setLayout(hlayout);
+-
+-
+ }
+ 
+ Widget::~Widget()
+ {
+ }
+-
+diff --git a/kysdk-qtwidgets/test/testFileWidget/widget.h b/kysdk-qtwidgets/test/testFileWidget/widget.h
+index 3819d78..242f066 100644
+--- a/kysdk-qtwidgets/test/testFileWidget/widget.h
++++ b/kysdk-qtwidgets/test/testFileWidget/widget.h
+@@ -1,8 +1,8 @@
+ #ifndef WIDGET_H
+ #define WIDGET_H
+ 
+-#include <QWidget>
+ #include "kwidget.h"
++#include <QWidget>
+ using namespace kdk;
+ 
+ class Widget : public KWidget
+@@ -14,4 +14,3 @@ public:
+     ~Widget();
+ };
+ #endif // WIDGET_H
+-
+diff --git a/kysdk-qtwidgets/test/testIcon/widget.cpp b/kysdk-qtwidgets/test/testIcon/widget.cpp
+index a3d35c0..a15b115 100644
+--- a/kysdk-qtwidgets/test/testIcon/widget.cpp
++++ b/kysdk-qtwidgets/test/testIcon/widget.cpp
+@@ -1,22 +1,22 @@
+ #include "widget.h"
+-#include "themeController.h"
+ #include "kwidget.h"
++#include "themeController.h"
+ #include <QHBoxLayout>
+-#include <QPushButton>
+ #include <QLabel>
++#include <QPushButton>
+ 
+-//using namespace kdk;
++// using namespace kdk;
+ 
+ Widget::Widget(QWidget *parent)
+     : QWidget(parent)
+ {
+-    QHBoxLayout* layout = new QHBoxLayout(this);
+-    QPushButton* btn = new QPushButton();
++    QHBoxLayout *layout = new QHBoxLayout(this);
++    QPushButton *btn = new QPushButton();
+     QIcon icon1 = QIcon::fromTheme("kylin-music");
+     QIcon icon2 = QIcon::fromTheme("kylin-video");
+-    btn->setIcon(ThemeController::overlayIcons(icon1,icon2,16,16,8,8));
+-    QLabel* label = new QLabel();
+-    label->setPixmap(ThemeController::overlayPixmaps(icon2.pixmap(24,24),icon1.pixmap(16,16),8,8));
++    btn->setIcon(ThemeController::overlayIcons(icon1, icon2, 16, 16, 8, 8));
++    QLabel *label = new QLabel();
++    label->setPixmap(ThemeController::overlayPixmaps(icon2.pixmap(24, 24), icon1.pixmap(16, 16), 8, 8));
+     layout->addWidget(btn);
+     layout->addWidget(label);
+ }
+@@ -24,4 +24,3 @@ Widget::Widget(QWidget *parent)
+ Widget::~Widget()
+ {
+ }
+-
+diff --git a/kysdk-qtwidgets/test/testKBubbleWidget/widget.cpp b/kysdk-qtwidgets/test/testKBubbleWidget/widget.cpp
+index 5b9e069..adf26fe 100644
+--- a/kysdk-qtwidgets/test/testKBubbleWidget/widget.cpp
++++ b/kysdk-qtwidgets/test/testKBubbleWidget/widget.cpp
+@@ -21,67 +21,65 @@
+  */
+ 
+ #include "widget.h"
++#include "kbubblewidget.h"
++#include "kwidget.h"
+ #include <QApplication>
+-#include <QLayout>
+ #include <QFrame>
+ #include <QGraphicsDropShadowEffect>
+-#include "kbubblewidget.h"
+-#include "kwidget.h"
+ #include <QHBoxLayout>
++#include <QLayout>
+ using namespace kdk;
+ 
+ Widget::Widget(QWidget *parent)
+     : QWidget(parent)
+ {
+-    QPushButton* btn1 = new QPushButton(this);
++    QPushButton *btn1 = new QPushButton(this);
+     btn1->setText("常规");
+ 
+-    QPushButton* btn2 = new QPushButton(this);
++    QPushButton *btn2 = new QPushButton(this);
+     btn2->setText("毛玻璃");
+ 
+-    btn2->move(100,0);
++    btn2->move(100, 0);
+ 
+-    KBubbleWidget*  w =new KBubbleWidget();
++    KBubbleWidget *w = new KBubbleWidget();
+     w->setTailPosition(TailDirection::TopDirection);
+-    w->setTailSize(QSize(16,8));
++    w->setTailSize(QSize(16, 8));
+     w->setBorderRadius(12);
+     w->setOpacity(0.4);
+     w->setEnableBlur(false);
+-    w->setFixedSize(320,320);
+-    QHBoxLayout* layout = new QHBoxLayout(w);
+-    QPushButton* button = new QPushButton(w);
++    w->setFixedSize(320, 320);
++    QHBoxLayout *layout = new QHBoxLayout(w);
++    QPushButton *button = new QPushButton(w);
+     button->setText("关闭");
+     layout->addWidget(button);
+-    connect(button,&QPushButton::clicked,this,[=](){
++    connect(button, &QPushButton::clicked, this, [=]() {
+         w->hide();
+     });
+ 
+-    KBubbleWidget*  w2 =new KBubbleWidget();
++    KBubbleWidget *w2 = new KBubbleWidget();
+     w2->setTailPosition(TailDirection::TopDirection);
+-    w2->setTailSize(QSize(16,8));
++    w2->setTailSize(QSize(16, 8));
+     w2->setBorderRadius(12);
+     w2->setOpacity(0.4);
+     w2->setEnableBlur(true);
+-    w2->setFixedSize(320,320);
+-    QPushButton* button2 = new QPushButton(w2);
++    w2->setFixedSize(320, 320);
++    QPushButton *button2 = new QPushButton(w2);
+     button2->setText("关闭");
+-    QHBoxLayout* layout2 = new QHBoxLayout(w2);
++    QHBoxLayout *layout2 = new QHBoxLayout(w2);
+     layout2->addWidget(button2);
+ 
+-    connect(button2,&QPushButton::clicked,this,[=](){
++    connect(button2, &QPushButton::clicked, this, [=]() {
+         w2->hide();
+     });
+ 
+-    connect(btn1,&QPushButton::clicked,this,[=](){
++    connect(btn1, &QPushButton::clicked, this, [=]() {
+         w->show();
+     });
+-    connect(btn2,&QPushButton::clicked,this,[=](){
++    connect(btn2, &QPushButton::clicked, this, [=]() {
+         w2->show();
+     });
+-
+ }
+ 
+ Widget::~Widget()
+ {
+ }
+-
+diff --git a/kysdk-qtwidgets/test/testKButtonBox/widget.cpp b/kysdk-qtwidgets/test/testKButtonBox/widget.cpp
+index fd6470e..bdea735 100644
+--- a/kysdk-qtwidgets/test/testKButtonBox/widget.cpp
++++ b/kysdk-qtwidgets/test/testKButtonBox/widget.cpp
+@@ -22,12 +22,12 @@
+ 
+ #include "widget.h"
+ #include "kbuttonbox.h"
+-#include <QList>
+ #include "kpushbutton.h"
+-#include <QDebug>
+ #include <QBoxLayout>
+-#include <QPushButton>
+ #include <QComboBox>
++#include <QDebug>
++#include <QList>
++#include <QPushButton>
+ 
+ using namespace kdk;
+ 
+@@ -40,24 +40,24 @@ Widget::Widget(QWidget *parent)
+     KButtonBox *box1 = new KButtonBox(this);
+     KPushButton *btn1 = new KPushButton;
+     btn1->setIcon(QIcon::fromTheme("list-add-symbolic"));
+-    btn1->setFixedSize(48,48);
+-    btn1->setIconSize(QSize(32,32));
++    btn1->setFixedSize(48, 48);
++    btn1->setIconSize(QSize(32, 32));
+     KPushButton *btn2 = new KPushButton;
+     btn2->setIcon(QIcon::fromTheme("list-remove-symbolic"));
+-    btn2->setFixedSize(48,48);
+-    btn2->setIconSize(QSize(32,32));
++    btn2->setFixedSize(48, 48);
++    btn2->setIconSize(QSize(32, 32));
+     box1->addButton(btn1);
+     box1->addButton(btn2);
+ 
+     KButtonBox *box2 = new KButtonBox(this);
+     KPushButton *btn3 = new KPushButton;
+     btn3->setIcon(QIcon::fromTheme("list-add-symbolic"));
+-    btn3->setFixedSize(48,48);
+-    btn3->setIconSize(QSize(32,32));
++    btn3->setFixedSize(48, 48);
++    btn3->setIconSize(QSize(32, 32));
+     KPushButton *btn4 = new KPushButton;
+     btn4->setIcon(QIcon::fromTheme("list-remove-symbolic"));
+-    btn4->setFixedSize(48,48);
+-    btn4->setIconSize(QSize(32,32));
++    btn4->setFixedSize(48, 48);
++    btn4->setIconSize(QSize(32, 32));
+     btn4->setEnabled(false);
+     box2->addButton(btn3);
+     box2->addButton(btn4);
+@@ -73,10 +73,10 @@ Widget::Widget(QWidget *parent)
+     KPushButton *btn8 = new KPushButton(this);
+     btn8->setIcon(QIcon::fromTheme("format-text-strikethrough-symbolic"));
+     QList<KPushButton *> list;
+-    list.insert(0,btn5);
+-    list.insert(1,btn6);
+-    list.insert(2,btn7);
+-    list.insert(3,btn8);
++    list.insert(0, btn5);
++    list.insert(1, btn6);
++    list.insert(2, btn7);
++    list.insert(3, btn8);
+ 
+     box3->setButtonList(list);
+     box3->setCheckable(true);
+@@ -85,10 +85,10 @@ Widget::Widget(QWidget *parent)
+     KPushButton *btn = new KPushButton;
+     btn->setText("New Button");
+ 
+-    connect(box1,&KButtonBox::buttonClicked,this,[=](QAbstractButton *button){
+-        if(btn1 == button)
++    connect(box1, &KButtonBox::buttonClicked, this, [=](QAbstractButton *button) {
++        if (btn1 == button)
+             box3->addButton(btn);
+-        if(btn2 == button)
++        if (btn2 == button)
+             box3->removeButton(btn);
+     });
+ 
+@@ -98,12 +98,9 @@ Widget::Widget(QWidget *parent)
+     layout->addLayout(layout1);
+     layout->addLayout(layout2);
+     this->setLayout(layout);
+-    this->setFixedSize(500,400);
+-
+-
++    this->setFixedSize(500, 400);
+ }
+ 
+ Widget::~Widget()
+ {
+ }
+-
+diff --git a/kysdk-qtwidgets/test/testKDragWidget/main.cpp b/kysdk-qtwidgets/test/testKDragWidget/main.cpp
+index 75cfb4c..14521a2 100644
+--- a/kysdk-qtwidgets/test/testKDragWidget/main.cpp
++++ b/kysdk-qtwidgets/test/testKDragWidget/main.cpp
+@@ -1,5 +1,5 @@
+-#include "widget.h"
+ #include "kwidgetutils.h"
++#include "widget.h"
+ #include <QApplication>
+ 
+ int main(int argc, char *argv[])
+diff --git a/kysdk-qtwidgets/test/testKDragWidget/widget.cpp b/kysdk-qtwidgets/test/testKDragWidget/widget.cpp
+index 6ed5d80..15b3061 100644
+--- a/kysdk-qtwidgets/test/testKDragWidget/widget.cpp
++++ b/kysdk-qtwidgets/test/testKDragWidget/widget.cpp
+@@ -1,19 +1,19 @@
+ #include "widget.h"
+-#include <QStringList>
+-#include <QStringListModel>
++#include "kdragwidget.h"
++#include "kiconbar.h"
++#include "ktoolbutton.h"
+ #include <QComboBox>
+ #include <QDebug>
+-#include <QPainter>
+-#include <QPaintEvent>
++#include <QFileDialog>
+ #include <QFont>
++#include <QPaintEvent>
++#include <QPainter>
+ #include <QPen>
+-#include <QStyleOptionFrame>
+ #include <QPushButton>
++#include <QStringList>
++#include <QStringListModel>
++#include <QStyleOptionFrame>
+ #include <QVBoxLayout>
+-#include "kdragwidget.h"
+-#include <QFileDialog>
+-#include "ktoolbutton.h"
+-#include "kiconbar.h"
+ 
+ using namespace kdk;
+ Widget::Widget(QWidget *parent)
+@@ -21,19 +21,21 @@ Widget::Widget(QWidget *parent)
+ {
+     QVBoxLayout *mainlayout = new QVBoxLayout(this);
+ 
+-    QLabel* label1 = new QLabel();
++    QLabel *label1 = new QLabel();
+     label1->setText("添加过滤文件");
+     KDragWidget *widget1 = new KDragWidget();
+     widget1->iconButton()->setIcon(QIcon::fromTheme("list-add.symbolic"));
+     widget1->textLabel()->setText("选择或者拖放文件夹识别路径");
+     QStringList list;
+-    list<<"JPEG Files(*.jpg)"<<"PNG Files(*.png)"<<"PGM Files(*.pgm)";
++    list << "JPEG Files(*.jpg)"
++         << "PNG Files(*.png)"
++         << "PGM Files(*.pgm)";
+     widget1->setNameFilters(list);
+ 
+     mainlayout->addWidget(label1);
+     mainlayout->addWidget(widget1);
+ 
+-    QLabel* label2 = new QLabel();
++    QLabel *label2 = new QLabel();
+     label2->setText("添加所有文件");
+     KDragWidget *widget2 = new KDragWidget();
+     widget2->iconButton()->setIcon(QIcon::fromTheme("list-add.symbolic"));
+@@ -42,17 +44,16 @@ Widget::Widget(QWidget *parent)
+     mainlayout->addWidget(label2);
+     mainlayout->addWidget(widget2);
+ 
+-    connect(widget1,&KDragWidget::getPath,[=](QString str){
+-        qDebug()<< "widget1 "<<str;
++    connect(widget1, &KDragWidget::getPath, [=](QString str) {
++        qDebug() << "widget1 " << str;
+     });
+-    connect(widget2,&KDragWidget::getPath,[=](QString str){
+-        qDebug()<< "widget2 "<<str;
++    connect(widget2, &KDragWidget::getPath, [=](QString str) {
++        qDebug() << "widget2 " << str;
+     });
+ 
+-    setMinimumSize(600,480);
++    setMinimumSize(600, 480);
+ }
+ 
+ Widget::~Widget()
+ {
+ }
+-
+diff --git a/kysdk-qtwidgets/test/testKLabel/widget.cpp b/kysdk-qtwidgets/test/testKLabel/widget.cpp
+index 2a51c1b..cde3255 100644
+--- a/kysdk-qtwidgets/test/testKLabel/widget.cpp
++++ b/kysdk-qtwidgets/test/testKLabel/widget.cpp
+@@ -1,24 +1,24 @@
+ #include "widget.h"
+ #include "klabel.h"
++#include <QDebug>
+ #include <QHBoxLayout>
+ #include <QIcon>
+ #include <QPushButton>
+-#include <QDebug>
+ 
+ using namespace kdk;
+ Widget::Widget(QWidget *parent)
+     : QWidget(parent)
+ {
+-    QVBoxLayout* vlayout = new QVBoxLayout(this);
+-    QVBoxLayout* layout = new QVBoxLayout();
++    QVBoxLayout *vlayout = new QVBoxLayout(this);
++    QVBoxLayout *layout = new QVBoxLayout();
+ 
+     KLabel *label1 = new KLabel();
+     label1->setText("我是一个测试tooltip的lable");
+-    label1->setBackgroundColor(true,Qt::red);
+-//    label1->setFixedWidth(100);
++    label1->setBackgroundColor(true, Qt::red);
++    //    label1->setFixedWidth(100);
+ 
+     KLabel *label2 = new KLabel(this);
+-    label2->setPixmap(QIcon::fromTheme("system-computer-symbolic").pixmap(16,16));
++    label2->setPixmap(QIcon::fromTheme("system-computer-symbolic").pixmap(16, 16));
+     label2->setDataHightColor(true);
+     label2->setLabelType(KLabelType::DataType);
+     label2->setText("我是一个测试lable");
+@@ -27,29 +27,28 @@ Widget::Widget(QWidget *parent)
+     label3->setFixedWidth(100);
+     label3->setText("测\n测dawdadafauphfuawhfawhfp");
+     label3->setWordWrap(true);
+-    label3->setPixmap(QIcon::fromTheme("system-computer-symbolic").pixmap(16,16));
++    label3->setPixmap(QIcon::fromTheme("system-computer-symbolic").pixmap(16, 16));
+     label3->setLabelType(KLabelType::DataType);
+     label3->setBackgroundColor(Qt::white);
+     label3->setDataHightColor(true);
+ 
+     KLabel *label4 = new KLabel();
+     label4->setLabelType(KLabelType::CircleType);
+-    label4->setPixmap(QIcon::fromTheme("system-computer-symbolic").pixmap(16,16));
+-    label4->setFixedSize(50,50);
++    label4->setPixmap(QIcon::fromTheme("system-computer-symbolic").pixmap(16, 16));
++    label4->setFixedSize(50, 50);
+     QFont font1;
+     int i = font().pointSize();
+-    font1.setPointSize(i +16);
++    font1.setPointSize(i + 16);
+     label1->setFont(font1);
+ 
+-    label4->setPixmap(QIcon::fromTheme("dialog-ok").pixmap(16,16));
+-    label4->setBackgroundColor(true,Qt::green);
++    label4->setPixmap(QIcon::fromTheme("dialog-ok").pixmap(16, 16));
++    label4->setBackgroundColor(true, Qt::green);
+ 
+     QLabel *label5 = new QLabel();
+     label5->setText("dawdsdawdadsadajwhfahlfaw案件\n噢if煎熬if怕回复发黄皮肤熊频繁;好发好");
+     label5->setWordWrap(true);
+     label5->setFixedWidth(200);
+ 
+-
+     QPushButton *btn1 = new QPushButton("默认");
+     QPushButton *btn2 = new QPushButton("高亮背景");
+     QPushButton *btn3 = new QPushButton("自定义背景");
+@@ -58,23 +57,23 @@ Widget::Widget(QWidget *parent)
+     hlayout->addWidget(btn2);
+     hlayout->addWidget(btn3);
+ 
+-    connect(btn1,&QPushButton::clicked,this,[=]{
++    connect(btn1, &QPushButton::clicked, this, [=] {
+         label4->setHighlightBackground(false);
+         label4->setBackgroundColor(false);
+-        label4->setPixmap(QIcon::fromTheme("system-computer-symbolic").pixmap(16,16));
++        label4->setPixmap(QIcon::fromTheme("system-computer-symbolic").pixmap(16, 16));
+     });
+-    connect(btn2,&QPushButton::clicked,this,[=]{
++    connect(btn2, &QPushButton::clicked, this, [=] {
+         label4->setHighlightBackground(true);
+-        label4->setPixmap(QIcon::fromTheme("system-computer-symbolic").pixmap(16,16));
++        label4->setPixmap(QIcon::fromTheme("system-computer-symbolic").pixmap(16, 16));
+     });
+-    connect(btn3,&QPushButton::clicked,this,[=]{
+-        label4->setBackgroundColor(true,QColor(82, 196, 41));
+-        label4->setPixmap(QIcon::fromTheme("dialog-ok").pixmap(16,16));
++    connect(btn3, &QPushButton::clicked, this, [=] {
++        label4->setBackgroundColor(true, QColor(82, 196, 41));
++        label4->setPixmap(QIcon::fromTheme("dialog-ok").pixmap(16, 16));
+     });
+ 
+     layout->addWidget(label1);
+     layout->addWidget(label2);
+-    qDebug()<<label5->contentsMargins();
++    qDebug() << label5->contentsMargins();
+     layout->addWidget(label3);
+     layout->addLayout(hlayout);
+     layout->addWidget(label4);
+@@ -85,4 +84,3 @@ Widget::Widget(QWidget *parent)
+ Widget::~Widget()
+ {
+ }
+-
+diff --git a/kysdk-qtwidgets/test/testKMessageBox/main.cpp b/kysdk-qtwidgets/test/testKMessageBox/main.cpp
+index 2cb8017..01b18eb 100644
+--- a/kysdk-qtwidgets/test/testKMessageBox/main.cpp
++++ b/kysdk-qtwidgets/test/testKMessageBox/main.cpp
+@@ -20,8 +20,8 @@
+  *
+  */
+ 
+-#include "widget.h"
+ #include "kwidgetutils.h"
++#include "widget.h"
+ #include <QApplication>
+ #include <QTranslator>
+ 
+@@ -31,17 +31,13 @@ int main(int argc, char *argv[])
+     QApplication a(argc, argv);
+     QTranslator trans;
+     QString locale = QLocale::system().name();
+-    if(locale == "zh_CN")
+-    {
+-        if(trans.load(":/translations/gui_zh_CN.qm"))
+-        {
++    if (locale == "zh_CN") {
++        if (trans.load(":/translations/gui_zh_CN.qm")) {
+             a.installTranslator(&trans);
+         }
+     }
+-    if(locale == "bo_CN")
+-    {
+-        if(trans.load(":/translations/gui_bo_CN.qm"))
+-        {
++    if (locale == "bo_CN") {
++        if (trans.load(":/translations/gui_bo_CN.qm")) {
+             a.installTranslator(&trans);
+         }
+     }
+diff --git a/kysdk-qtwidgets/test/testKMessageBox/widget.cpp b/kysdk-qtwidgets/test/testKMessageBox/widget.cpp
+index 313120b..65d278b 100644
+--- a/kysdk-qtwidgets/test/testKMessageBox/widget.cpp
++++ b/kysdk-qtwidgets/test/testKMessageBox/widget.cpp
+@@ -21,9 +21,9 @@
+  */
+ 
+ #include "widget.h"
++#include "kmessagebox.h"
+ #include <QPushButton>
+ #include <QVBoxLayout>
+-#include "kmessagebox.h"
+ 
+ using namespace kdk;
+ 
+@@ -34,30 +34,30 @@ Widget::Widget(QWidget *parent)
+ 
+     QPushButton *btn_1 = new QPushButton(this);
+     btn_1->setText("TestDemoOne");
+-    QObject::connect(btn_1,&QPushButton::clicked,this,[=](){
++    QObject::connect(btn_1, &QPushButton::clicked, this, [=]() {
+         KMessageBox w;
+         w.setCustomIcon(QIcon::fromTheme("dialog-error"));
+         w.setText("打印测试失败,建议修改驱动后重试");
+ 
+         QPushButton *btn1 = new QPushButton("修改驱动");
+         QPushButton *btn2 = new QPushButton("取消");
+-        w.addButton(btn1,KMessageBox::YesRole);
+-        w.addButton(btn2,KMessageBox::NoRole);
++        w.addButton(btn1, KMessageBox::YesRole);
++        w.addButton(btn2, KMessageBox::NoRole);
+ 
+         w.exec();
+     });
+ 
+     QPushButton *btn_2 = new QPushButton(this);
+     btn_2->setText("TestDemoTwo");
+-    QObject::connect(btn_2,&QPushButton::clicked,this,[=](){
++    QObject::connect(btn_2, &QPushButton::clicked, this, [=]() {
+         KMessageBox w;
+         w.setCustomIcon(QIcon::fromTheme("ukui-dialog-success"));
+         w.setText("添加成功,是否打印测试页?");
+ 
+         QPushButton *btn1 = new QPushButton("打印测试页");
+         QPushButton *btn2 = new QPushButton("查看设备");
+-        w.addButton(btn1,KMessageBox::YesRole);
+-        w.addButton(btn2,KMessageBox::NoRole);
++        w.addButton(btn1, KMessageBox::YesRole);
++        w.addButton(btn2, KMessageBox::NoRole);
+ 
+         w.exec();
+     });
+@@ -66,10 +66,9 @@ Widget::Widget(QWidget *parent)
+     layout->addWidget(btn_2);
+ 
+     this->setLayout(layout);
+-    this->setFixedSize(300,200);
++    this->setFixedSize(300, 200);
+ }
+ 
+ Widget::~Widget()
+ {
+ }
+-
+diff --git a/kysdk-qtwidgets/test/testKPushButton/main.cpp b/kysdk-qtwidgets/test/testKPushButton/main.cpp
+index 7127ae0..be8bdc7 100644
+--- a/kysdk-qtwidgets/test/testKPushButton/main.cpp
++++ b/kysdk-qtwidgets/test/testKPushButton/main.cpp
+@@ -1,5 +1,5 @@
+ /*
+- * 
++ *
+  *
+  * Copyright (C) 2023, KylinSoft Co., Ltd.
+  *
+@@ -22,11 +22,11 @@
+ 
+ #include "widget.h"
+ 
++#include "kwidgetutils.h"
+ #include <QApplication>
+-#include <kwindoweffects.h>
+ #include <QRegion>
+ #include <QTranslator>
+-#include "kwidgetutils.h"
++#include <kwindoweffects.h>
+ 
+ int main(int argc, char *argv[])
+ {
+@@ -34,23 +34,19 @@ int main(int argc, char *argv[])
+     QApplication a(argc, argv);
+     QTranslator trans;
+     QString locale = QLocale::system().name();
+-    if(locale == "zh_CN")
+-    {
+-        if(trans.load(":/translations/gui_zh_CN.qm"))
+-        {
++    if (locale == "zh_CN") {
++        if (trans.load(":/translations/gui_zh_CN.qm")) {
+             a.installTranslator(&trans);
+         }
+     }
+-    if(locale == "bo_CN")
+-    {
+-        if(trans.load(":/translations/gui_bo_CN.qm"))
+-        {
++    if (locale == "bo_CN") {
++        if (trans.load(":/translations/gui_bo_CN.qm")) {
+             a.installTranslator(&trans);
+         }
+     }
+     Widget w;
+-    w.setAttribute(Qt::WA_TranslucentBackground,true);
+-    KWindowEffects::enableBlurBehind(w.winId(),true);
++    w.setAttribute(Qt::WA_TranslucentBackground, true);
++    KWindowEffects::enableBlurBehind(w.winId(), true);
+     w.show();
+     return a.exec();
+ }
+diff --git a/kysdk-qtwidgets/test/testKPushButton/widget.cpp b/kysdk-qtwidgets/test/testKPushButton/widget.cpp
+index 112a2cf..13e0447 100644
+--- a/kysdk-qtwidgets/test/testKPushButton/widget.cpp
++++ b/kysdk-qtwidgets/test/testKPushButton/widget.cpp
+@@ -1,5 +1,5 @@
+ /*
+- * 
++ *
+  *
+  * Copyright (C) 2023, KylinSoft Co., Ltd.
+  *
+@@ -20,20 +20,18 @@
+  *
+  */
+ 
+-
+ #include "widget.h"
+ #include "kpushbutton.h"
+-#include <QVBoxLayout>
+-#include <QHBoxLayout>
+ #include <QDebug>
++#include <QHBoxLayout>
++#include <QVBoxLayout>
+ 
+ using namespace kdk;
+ 
+-
+ Widget::Widget(QWidget *parent)
+     : QWidget(parent)
+ {
+-    QHBoxLayout *layout1 = new QHBoxLayout();  /*半透明字体按钮布局,包括按钮1、2、3*/
++    QHBoxLayout *layout1 = new QHBoxLayout(); /*半透明字体按钮布局,包括按钮1、2、3*/
+ 
+     KPushButton *btn1 = new KPushButton(this); /*不可用透明按钮*/
+     btn1->setText("button1");
+@@ -54,36 +52,35 @@ Widget::Widget(QWidget *parent)
+     layout1->addWidget(btn2);
+     layout1->addWidget(btn3);
+ 
+-    QHBoxLayout *layout2 = new QHBoxLayout();  /*半透明图标按钮,包括按钮4、5*/
++    QHBoxLayout *layout2 = new QHBoxLayout(); /*半透明图标按钮,包括按钮4、5*/
+ 
+     KPushButton *btn4 = new KPushButton(this);
+     btn4->setIcon(QIcon::fromTheme("go-previous-symbolic"));
+     btn4->setTranslucent(true);
+-    btn4->setFixedSize(32,32);
+-    btn4->setIconSize(QSize(24,24));
++    btn4->setFixedSize(32, 32);
++    btn4->setIconSize(QSize(24, 24));
+     btn4->setBackgroundColor(Qt::blue);
+     KPushButton *btn5 = new KPushButton(this);
+     btn5->setIcon(QIcon::fromTheme("go-next-symbolic"));
+     btn5->setTranslucent(true);
+-    btn5->setFixedSize(32,32);
+-    btn5->setIconSize(QSize(24,24));
++    btn5->setFixedSize(32, 32);
++    btn5->setIconSize(QSize(24, 24));
+ 
+     layout2->addWidget(btn4);
+     layout2->addWidget(btn5);
+ 
+-
+-    QHBoxLayout *layout3 = new QHBoxLayout();  /*正常带图标不透明按钮,包括6、7*/
++    QHBoxLayout *layout3 = new QHBoxLayout(); /*正常带图标不透明按钮,包括6、7*/
+     KPushButton *btn6 = new KPushButton(this);
+     btn6->setIcon(QIcon::fromTheme("go-previous-symbolic"));
+-    btn6->setFixedSize(32,32);
+-    btn6->setIconSize(QSize(24,24));
++    btn6->setFixedSize(32, 32);
++    btn6->setIconSize(QSize(24, 24));
+     btn6->setIconHighlight(true);
+     btn6->setBackgroundColor(Qt::transparent);
+ 
+     KPushButton *btn7 = new KPushButton(this);
+     btn7->setIcon(QIcon::fromTheme("go-next-symbolic"));
+-    btn7->setFixedSize(32,32);
+-    btn7->setIconSize(QSize(24,24));
++    btn7->setFixedSize(32, 32);
++    btn7->setIconSize(QSize(24, 24));
+     btn7->setIconHighlight(true);
+     btn7->setBackgroundColor(Qt::transparent);
+ 
+@@ -96,15 +93,15 @@ Widget::Widget(QWidget *parent)
+     btn8->setText("button8");
+     btn8->setBorderRadius(10);
+ 
+-    KPushButton *btn9 = new KPushButton(this);   /*设置图标且设置圆角的不透明按钮*/
++    KPushButton *btn9 = new KPushButton(this); /*设置图标且设置圆角的不透明按钮*/
+     btn9->setIcon(QIcon::fromTheme("list-add-symbolic"));
+     btn9->setIconColor(Qt::white);
+-    btn9->setBackgroundColorHighlight(true);    /*设置按钮背景色跟随系统高亮色*/
+-    //btn9->setBackgroundColor(Qt::red);          /*用户设置自定义背景色(与跟随系统高亮存在先后关系,后设置的生效)*/
++    btn9->setBackgroundColorHighlight(true); /*设置按钮背景色跟随系统高亮色*/
++    // btn9->setBackgroundColor(Qt::red);          /*用户设置自定义背景色(与跟随系统高亮存在先后关系,后设置的生效)*/
+ 
+-    btn9->setFixedSize(40,40);
++    btn9->setFixedSize(40, 40);
+     btn9->setBorderRadius(20);
+-    btn9->setIconSize(QSize(24,24));
++    btn9->setIconSize(QSize(24, 24));
+ 
+     layout4->addWidget(btn8);
+     layout4->addWidget(btn9);
+@@ -124,6 +121,5 @@ Widget::~Widget()
+ 
+ void Widget::onButtonClicked()
+ {
+-    qDebug() << "clicked" ;
++    qDebug() << "clicked";
+ }
+-
+diff --git a/kysdk-qtwidgets/test/testKPushButton/widget.h b/kysdk-qtwidgets/test/testKPushButton/widget.h
+index 2d7a368..247ebf6 100644
+--- a/kysdk-qtwidgets/test/testKPushButton/widget.h
++++ b/kysdk-qtwidgets/test/testKPushButton/widget.h
+@@ -1,5 +1,5 @@
+ /*
+- * 
++ *
+  *
+  * Copyright (C) 2023, KylinSoft Co., Ltd.
+  *
+@@ -20,7 +20,6 @@
+  *
+  */
+ 
+-
+ #ifndef WIDGET_H
+ #define WIDGET_H
+ 
+diff --git a/kysdk-qtwidgets/test/testKTextedit/widget.cpp b/kysdk-qtwidgets/test/testKTextedit/widget.cpp
+index 1b9c1ca..b5f5938 100644
+--- a/kysdk-qtwidgets/test/testKTextedit/widget.cpp
++++ b/kysdk-qtwidgets/test/testKTextedit/widget.cpp
+@@ -1,6 +1,6 @@
+ #include "widget.h"
+-#include "ktextedit.h"
+ #include "kbubblewidget.h"
++#include "ktextedit.h"
+ #include <QBoxLayout>
+ 
+ using namespace kdk;
+@@ -8,122 +8,117 @@ using namespace kdk;
+ Widget::Widget(QWidget *parent)
+     : QWidget(parent)
+ {
+-    QVBoxLayout* mainLayout = new QVBoxLayout(this);
++    QVBoxLayout *mainLayout = new QVBoxLayout(this);
+ 
+-    QPushButton* btn1 = new QPushButton();
++    QPushButton *btn1 = new QPushButton();
+     btn1->setText("无tag-正常背景");
+-    QPushButton* btn2 = new QPushButton();
++    QPushButton *btn2 = new QPushButton();
+     btn2->setText("无tag-高亮背景");
+-    QPushButton* btn3 = new QPushButton();
++    QPushButton *btn3 = new QPushButton();
+     btn3->setText("有tag-正常背景");
+-    QPushButton* btn4 = new QPushButton();
++    QPushButton *btn4 = new QPushButton();
+     btn4->setText("有tag-高亮背景");
+ 
+-    KBubbleWidget* bubbleWidget1 = new KBubbleWidget();
++    KBubbleWidget *bubbleWidget1 = new KBubbleWidget();
+     bubbleWidget1->setTailPosition(TopDirection);
+-    QVBoxLayout* layout1= new QVBoxLayout(bubbleWidget1);
+-    KTextEdit* edit1 = new KTextEdit();
++    QVBoxLayout *layout1 = new QVBoxLayout(bubbleWidget1);
++    KTextEdit *edit1 = new KTextEdit();
+ 
+-    QPushButton* button1 = new QPushButton();
++    QPushButton *button1 = new QPushButton();
+     button1->setText("关闭");
+     layout1->addWidget(edit1);
+     layout1->addWidget(button1);
+-    connect(btn1,&QPushButton::clicked,this,[=]{
++    connect(btn1, &QPushButton::clicked, this, [=] {
+         bubbleWidget1->show();
+     });
+-    connect(button1,&QPushButton::clicked,this,[=]{
++    connect(button1, &QPushButton::clicked, this, [=] {
+         bubbleWidget1->hide();
+     });
+ 
+-    KBubbleWidget* bubbleWidget2 = new KBubbleWidget();
+-    bubbleWidget2->setTailPosition(RightDirection,TailLocation::LeftLocation);
++    KBubbleWidget *bubbleWidget2 = new KBubbleWidget();
++    bubbleWidget2->setTailPosition(RightDirection, TailLocation::LeftLocation);
+     bubbleWidget2->setHighlightBackground(true);
+-    QVBoxLayout* layout2= new QVBoxLayout(bubbleWidget2);
+-    KTextEdit* edit2 = new KTextEdit();
++    QVBoxLayout *layout2 = new QVBoxLayout(bubbleWidget2);
++    KTextEdit *edit2 = new KTextEdit();
+     edit2->setReadOnly(true);
+     edit2->setText("这是一段测试性文字,用来测试ktextedit在只读状态(不可编辑状态)下的背景色。");
+ 
+-    QPushButton* button2 = new QPushButton();
++    QPushButton *button2 = new QPushButton();
+     button2->setText("关闭");
+     layout2->addWidget(edit2);
+     layout2->addWidget(button2);
+-    connect(btn2,&QPushButton::clicked,this,[=]{
++    connect(btn2, &QPushButton::clicked, this, [=] {
+         bubbleWidget2->show();
+     });
+-    connect(button2,&QPushButton::clicked,this,[=]{
++    connect(button2, &QPushButton::clicked, this, [=] {
+         bubbleWidget2->hide();
+     });
+ 
+-    KBubbleWidget* bubbleWidget3 = new KBubbleWidget();
+-    bubbleWidget3->setTailPosition(BottomDirection,TailLocation::RightLocation);
+-    QVBoxLayout* layout3= new QVBoxLayout(bubbleWidget3);
+-    KTextEdit* edit3 = new KTextEdit();
++    KBubbleWidget *bubbleWidget3 = new KBubbleWidget();
++    bubbleWidget3->setTailPosition(BottomDirection, TailLocation::RightLocation);
++    QVBoxLayout *layout3 = new QVBoxLayout(bubbleWidget3);
++    KTextEdit *edit3 = new KTextEdit();
+ 
+     edit3->setLabelVisible(true);
+-    edit3->setPixmap(QIcon("system-computer-symbolic").pixmap(16,16));
++    edit3->setPixmap(QIcon("system-computer-symbolic").pixmap(16, 16));
+     edit3->setLabelText("翻译");
+ 
+-    QPushButton* button3 = new QPushButton();
++    QPushButton *button3 = new QPushButton();
+     button3->setText("关闭");
+     layout3->addWidget(edit3);
+     layout3->addWidget(button3);
+-    connect(btn3,&QPushButton::clicked,this,[=]{
++    connect(btn3, &QPushButton::clicked, this, [=] {
+         bubbleWidget3->show();
+     });
+-    connect(button3,&QPushButton::clicked,this,[=]{
++    connect(button3, &QPushButton::clicked, this, [=] {
+         bubbleWidget3->hide();
+     });
+ 
+-    KBubbleWidget* bubbleWidget4 = new KBubbleWidget();
+-    bubbleWidget4->setTailPosition(LeftDirection,TailLocation::RightLocation);
++    KBubbleWidget *bubbleWidget4 = new KBubbleWidget();
++    bubbleWidget4->setTailPosition(LeftDirection, TailLocation::RightLocation);
+     bubbleWidget4->setHighlightBackground(true);
+-    QVBoxLayout* layout4= new QVBoxLayout(bubbleWidget4);
+-    KTextEdit* edit4 = new KTextEdit();
++    QVBoxLayout *layout4 = new QVBoxLayout(bubbleWidget4);
++    KTextEdit *edit4 = new KTextEdit();
+     edit4->setLabelVisible(true);
+-    edit4->setPixmap(QIcon("system-computer-symbolic").pixmap(16,16));
++    edit4->setPixmap(QIcon("system-computer-symbolic").pixmap(16, 16));
+     edit4->setLabelText("翻译");
+     edit4->setText("这是一段测试性文字,用来测试ktextedit在只读状态(不可编辑状态)下的背景色。");
+     edit4->setReadOnly(true);
+ 
+-    QPushButton* button4 = new QPushButton();
++    QPushButton *button4 = new QPushButton();
+     button4->setText("关闭");
+-    QPushButton* button5 = new QPushButton();
++    QPushButton *button5 = new QPushButton();
+     button5->setText("切换是否可编辑状态");
+     layout4->addWidget(edit4);
+     layout4->addWidget(button4);
+     layout4->addWidget(button5);
+-    connect(btn4,&QPushButton::clicked,this,[=]{
++    connect(btn4, &QPushButton::clicked, this, [=] {
+         bubbleWidget4->show();
+     });
+-    connect(button4,&QPushButton::clicked,this,[=]{
++    connect(button4, &QPushButton::clicked, this, [=] {
+         bubbleWidget4->hide();
+     });
+ 
+-    connect(button5,&QPushButton::clicked,this,[=]{
+-        if(edit4->isReadOnly())
+-        {
++    connect(button5, &QPushButton::clicked, this, [=] {
++        if (edit4->isReadOnly()) {
+             edit4->setReadOnly(false);
+             bubbleWidget4->setHighlightBackground(false);
+-        }
+-        else
+-        {
++        } else {
+             edit4->setReadOnly(true);
+             bubbleWidget4->setHighlightBackground(true);
+         }
+     });
+ 
+-    QHBoxLayout* hlayout1 = new QHBoxLayout();
+-    QHBoxLayout* hlayout2 = new QHBoxLayout();
++    QHBoxLayout *hlayout1 = new QHBoxLayout();
++    QHBoxLayout *hlayout2 = new QHBoxLayout();
+     hlayout1->addWidget(btn1);
+     hlayout1->addWidget(btn2);
+     hlayout2->addWidget(btn3);
+     hlayout2->addWidget(btn4);
+     mainLayout->addLayout(hlayout1);
+     mainLayout->addLayout(hlayout2);
+-
+ }
+ 
+ Widget::~Widget()
+ {
+ }
+-
+diff --git a/kysdk-qtwidgets/test/testKTranslucentFloor/main.cpp b/kysdk-qtwidgets/test/testKTranslucentFloor/main.cpp
+index 97df2e6..6601685 100644
+--- a/kysdk-qtwidgets/test/testKTranslucentFloor/main.cpp
++++ b/kysdk-qtwidgets/test/testKTranslucentFloor/main.cpp
+@@ -1,5 +1,5 @@
+ /*
+- * 
++ *
+  *
+  * Copyright (C) 2023, KylinSoft Co., Ltd.
+  *
+@@ -22,9 +22,9 @@
+ 
+ #include "widget.h"
+ 
++#include "kwidgetutils.h"
+ #include <QApplication>
+ #include <QTranslator>
+-#include "kwidgetutils.h"
+ 
+ int main(int argc, char *argv[])
+ {
+@@ -32,17 +32,13 @@ int main(int argc, char *argv[])
+     QApplication a(argc, argv);
+     QTranslator trans;
+     QString locale = QLocale::system().name();
+-    if(locale == "zh_CN")
+-    {
+-        if(trans.load(":/translations/gui_zh_CN.qm"))
+-        {
++    if (locale == "zh_CN") {
++        if (trans.load(":/translations/gui_zh_CN.qm")) {
+             a.installTranslator(&trans);
+         }
+     }
+-    if(locale == "bo_CN")
+-    {
+-        if(trans.load(":/translations/gui_bo_CN.qm"))
+-        {
++    if (locale == "bo_CN") {
++        if (trans.load(":/translations/gui_bo_CN.qm")) {
+             a.installTranslator(&trans);
+         }
+     }
+diff --git a/kysdk-qtwidgets/test/testKTranslucentFloor/widget.cpp b/kysdk-qtwidgets/test/testKTranslucentFloor/widget.cpp
+index 9021d09..b7683c3 100644
+--- a/kysdk-qtwidgets/test/testKTranslucentFloor/widget.cpp
++++ b/kysdk-qtwidgets/test/testKTranslucentFloor/widget.cpp
+@@ -1,5 +1,5 @@
+ /*
+- * 
++ *
+  *
+  * Copyright (C) 2023, KylinSoft Co., Ltd.
+  *
+@@ -22,47 +22,47 @@
+ 
+ #include "widget.h"
+ #include "ktranslucentfloor.h"
+-#include <QPushButton>
+-#include <QLabel>
+-#include <QHBoxLayout>
+ #include <QDebug>
++#include <QHBoxLayout>
++#include <QLabel>
++#include <QPushButton>
+ 
+ using namespace kdk;
+ Widget::Widget(QWidget *parent)
+     : QWidget(parent)
+ {
+-    QHBoxLayout* mainLayout = new QHBoxLayout(this);
+-    QPushButton* button1 = new QPushButton("常规效果",this);
+-    QPushButton* button2 = new QPushButton("毛玻璃效果",this);
++    QHBoxLayout *mainLayout = new QHBoxLayout(this);
++    QPushButton *button1 = new QPushButton("常规效果", this);
++    QPushButton *button2 = new QPushButton("毛玻璃效果", this);
+     mainLayout->addWidget(button1);
+     mainLayout->addWidget(button2);
+ 
+-    KTranslucentFloor* floor1 = new KTranslucentFloor();
++    KTranslucentFloor *floor1 = new KTranslucentFloor();
+     floor1->setEnableBlur(false);
+-    floor1->setFixedSize(400,300);
++    floor1->setFixedSize(400, 300);
+     floor1->setShadow(true);
+-    QHBoxLayout* layout1 = new QHBoxLayout(floor1);
+-    QPushButton* subBtn1 = new QPushButton("关闭",this);
++    QHBoxLayout *layout1 = new QHBoxLayout(floor1);
++    QPushButton *subBtn1 = new QPushButton("关闭", this);
+     layout1->addWidget(subBtn1);
+ 
+-    KTranslucentFloor* floor2 = new KTranslucentFloor();
++    KTranslucentFloor *floor2 = new KTranslucentFloor();
+     floor2->setEnableBlur(true);
+-    floor2->setFixedSize(400,300);
++    floor2->setFixedSize(400, 300);
+     floor2->setShadow(true);
+-    QHBoxLayout* layout2 = new QHBoxLayout(floor2);
+-    QPushButton* subBtn2 = new QPushButton("关闭",this);
++    QHBoxLayout *layout2 = new QHBoxLayout(floor2);
++    QPushButton *subBtn2 = new QPushButton("关闭", this);
+     layout2->addWidget(subBtn2);
+ 
+-    connect(subBtn1,&QPushButton::clicked,this,[=](){
++    connect(subBtn1, &QPushButton::clicked, this, [=]() {
+         floor1->close();
+     });
+-    connect(subBtn2,&QPushButton::clicked,this,[=](){
++    connect(subBtn2, &QPushButton::clicked, this, [=]() {
+         floor2->close();
+     });
+-    connect(button1,&QPushButton::clicked,this,[=](){
++    connect(button1, &QPushButton::clicked, this, [=]() {
+         floor1->show();
+     });
+-    connect(button2,&QPushButton::clicked,this,[=](){
++    connect(button2, &QPushButton::clicked, this, [=]() {
+         floor2->show();
+     });
+ }
+@@ -70,4 +70,3 @@ Widget::Widget(QWidget *parent)
+ Widget::~Widget()
+ {
+ }
+-
+diff --git a/kysdk-qtwidgets/test/testKTranslucentFloor/widget.h b/kysdk-qtwidgets/test/testKTranslucentFloor/widget.h
+index c6c87d4..46a3f3e 100644
+--- a/kysdk-qtwidgets/test/testKTranslucentFloor/widget.h
++++ b/kysdk-qtwidgets/test/testKTranslucentFloor/widget.h
+@@ -1,5 +1,5 @@
+ /*
+- * 
++ *
+  *
+  * Copyright (C) 2023, KylinSoft Co., Ltd.
+  *
+diff --git a/kysdk-qtwidgets/test/testListView/main.cpp b/kysdk-qtwidgets/test/testListView/main.cpp
+index 97df2e6..6601685 100644
+--- a/kysdk-qtwidgets/test/testListView/main.cpp
++++ b/kysdk-qtwidgets/test/testListView/main.cpp
+@@ -1,5 +1,5 @@
+ /*
+- * 
++ *
+  *
+  * Copyright (C) 2023, KylinSoft Co., Ltd.
+  *
+@@ -22,9 +22,9 @@
+ 
+ #include "widget.h"
+ 
++#include "kwidgetutils.h"
+ #include <QApplication>
+ #include <QTranslator>
+-#include "kwidgetutils.h"
+ 
+ int main(int argc, char *argv[])
+ {
+@@ -32,17 +32,13 @@ int main(int argc, char *argv[])
+     QApplication a(argc, argv);
+     QTranslator trans;
+     QString locale = QLocale::system().name();
+-    if(locale == "zh_CN")
+-    {
+-        if(trans.load(":/translations/gui_zh_CN.qm"))
+-        {
++    if (locale == "zh_CN") {
++        if (trans.load(":/translations/gui_zh_CN.qm")) {
+             a.installTranslator(&trans);
+         }
+     }
+-    if(locale == "bo_CN")
+-    {
+-        if(trans.load(":/translations/gui_bo_CN.qm"))
+-        {
++    if (locale == "bo_CN") {
++        if (trans.load(":/translations/gui_bo_CN.qm")) {
+             a.installTranslator(&trans);
+         }
+     }
+diff --git a/kysdk-qtwidgets/test/testListView/widget.cpp b/kysdk-qtwidgets/test/testListView/widget.cpp
+index e436a26..ce5ea30 100644
+--- a/kysdk-qtwidgets/test/testListView/widget.cpp
++++ b/kysdk-qtwidgets/test/testListView/widget.cpp
+@@ -1,5 +1,5 @@
+ /*
+- * 
++ *
+  *
+  * Copyright (C) 2023, KylinSoft Co., Ltd.
+  *
+@@ -21,78 +21,77 @@
+  */
+ 
+ #include "widget.h"
+-#include <QStandardItem>
+-#include <QListView>
+-#include <QStandardItemModel>
+-#include <QAbstractItemView>
+ #include "klistview.h"
+ #include "klistviewdelegate.h"
+-#include <QHBoxLayout>
++#include <QAbstractItemView>
+ #include <QDebug>
++#include <QHBoxLayout>
++#include <QListView>
++#include <QStandardItem>
++#include <QStandardItemModel>
+ 
+ using namespace kdk;
+ 
+ Widget::Widget(QWidget *parent)
+     : QWidget(parent)
+ {
+-    QHBoxLayout* hlayout = new QHBoxLayout(this);
++    QHBoxLayout *hlayout = new QHBoxLayout(this);
+ 
+-    QListView* view = new QListView(this);
++    QListView *view = new QListView(this);
+ 
+-    view->setIconSize(QSize(32,32));  //设置图片大小
++    view->setIconSize(QSize(32, 32)); // 设置图片大小
+ 
+-    QStandardItemModel*model =new QStandardItemModel(this);
+-    KListViewDelegate *delegate =new KListViewDelegate(view);
++    QStandardItemModel *model = new QStandardItemModel(this);
++    KListViewDelegate *delegate = new KListViewDelegate(view);
+ 
+     view->setModel(model);
+-    QStandardItem* item = new QStandardItem();
++    QStandardItem *item = new QStandardItem();
+     item->setIcon(QIcon::fromTheme("kylin-music"));
+-    item->setData(QVariant("Test"),Qt::DisplayRole);
+-    item->setData(QVariant("subTEST"),Qt::UserRole);
++    item->setData(QVariant("Test"), Qt::DisplayRole);
++    item->setData(QVariant("subTEST"), Qt::UserRole);
+ 
+-    QStandardItem* item1 = new QStandardItem();
++    QStandardItem *item1 = new QStandardItem();
+     item1->setIcon(QIcon::fromTheme("kylin-music"));
+-    item1->setData(QVariant("Test"),Qt::DisplayRole);
+-    item1->setData(QVariant("supTEST"),Qt::UserRole);
++    item1->setData(QVariant("Test"), Qt::DisplayRole);
++    item1->setData(QVariant("supTEST"), Qt::UserRole);
+ 
+-    QStandardItem* item2 = new QStandardItem();
++    QStandardItem *item2 = new QStandardItem();
+     item2->setIcon(QIcon::fromTheme("kylin-music"));
+-    item2->setData(QVariant("Test"),Qt::DisplayRole);
+-    item2->setData(QVariant("supTEST"),Qt::UserRole);
++    item2->setData(QVariant("Test"), Qt::DisplayRole);
++    item2->setData(QVariant("supTEST"), Qt::UserRole);
+ 
+     model->appendRow(item);
+     model->appendRow(item1);
+     model->appendRow(item2);
+ 
+-
+     view->setItemDelegate(delegate);
+ 
+     view->setViewMode(QListView::ListMode);
+-    //view->setGridSize(QSize(60,120));//IconMode下用
++    // view->setGridSize(QSize(60,120));//IconMode下用
+ 
+-    view->setFixedSize(300,480);
++    view->setFixedSize(300, 480);
+     hlayout->addWidget(view);
+ 
+-    QListView* view1 = new QListView(this);
++    QListView *view1 = new QListView(this);
+ 
+-    view1->setIconSize(QSize(32,32));
++    view1->setIconSize(QSize(32, 32));
+ 
+-    QStandardItemModel*model1 =new QStandardItemModel(this);
+-    KListViewDelegate *delegate1 =new KListViewDelegate(view1);
++    QStandardItemModel *model1 = new QStandardItemModel(this);
++    KListViewDelegate *delegate1 = new KListViewDelegate(view1);
+ 
+     view1->setModel(model1);
+ 
+-    QStandardItem* item3 = new QStandardItem();
++    QStandardItem *item3 = new QStandardItem();
+     item3->setIcon(QIcon::fromTheme("kylin-music"));
+-    item3->setData(QVariant("Test"),Qt::DisplayRole);
++    item3->setData(QVariant("Test"), Qt::DisplayRole);
+ 
+-    QStandardItem* item4 = new QStandardItem();
++    QStandardItem *item4 = new QStandardItem();
+     item4->setIcon(QIcon::fromTheme("kylin-music"));
+-    item4->setData(QVariant("Test"),Qt::DisplayRole);
++    item4->setData(QVariant("Test"), Qt::DisplayRole);
+ 
+-    QStandardItem* item5 = new QStandardItem();
++    QStandardItem *item5 = new QStandardItem();
+     item5->setIcon(QIcon::fromTheme("kylin-music"));
+-    item5->setData(QVariant("Test"),Qt::DisplayRole);
++    item5->setData(QVariant("Test"), Qt::DisplayRole);
+ 
+     model1->appendRow(item3);
+     model1->appendRow(item4);
+@@ -100,20 +99,18 @@ Widget::Widget(QWidget *parent)
+     view1->setItemDelegate(delegate1);
+ 
+     view1->setViewMode(QListView::ListMode);
+-    //view->setGridSize(QSize(60,120));//IconMode下用
++    // view->setGridSize(QSize(60,120));//IconMode下用
+ 
+     hlayout->addWidget(view1);
+ 
+-//    view->setSelectionMode(QAbstractItemView::ContiguousSelection);
+-//    view->setSelectionMode(QAbstractItemView::MultiSelection);
+-//    view->setSelectionMode(QAbstractItemView::ExtendedSelection);
++    //    view->setSelectionMode(QAbstractItemView::ContiguousSelection);
++    //    view->setSelectionMode(QAbstractItemView::MultiSelection);
++    //    view->setSelectionMode(QAbstractItemView::ExtendedSelection);
+ 
+-    view1->setFixedSize(300,480);
+-//    setFixedSize(800,600);
++    view1->setFixedSize(300, 480);
++    //    setFixedSize(800,600);
+ }
+ 
+ Widget::~Widget()
+ {
+ }
+-
+-
+diff --git a/kysdk-qtwidgets/test/testListView/widget.h b/kysdk-qtwidgets/test/testListView/widget.h
+index c6c87d4..46a3f3e 100644
+--- a/kysdk-qtwidgets/test/testListView/widget.h
++++ b/kysdk-qtwidgets/test/testListView/widget.h
+@@ -1,5 +1,5 @@
+ /*
+- * 
++ *
+  *
+  * Copyright (C) 2023, KylinSoft Co., Ltd.
+  *
+diff --git a/kysdk-qtwidgets/test/testListWidget/main.cpp b/kysdk-qtwidgets/test/testListWidget/main.cpp
+index 97df2e6..6601685 100644
+--- a/kysdk-qtwidgets/test/testListWidget/main.cpp
++++ b/kysdk-qtwidgets/test/testListWidget/main.cpp
+@@ -1,5 +1,5 @@
+ /*
+- * 
++ *
+  *
+  * Copyright (C) 2023, KylinSoft Co., Ltd.
+  *
+@@ -22,9 +22,9 @@
+ 
+ #include "widget.h"
+ 
++#include "kwidgetutils.h"
+ #include <QApplication>
+ #include <QTranslator>
+-#include "kwidgetutils.h"
+ 
+ int main(int argc, char *argv[])
+ {
+@@ -32,17 +32,13 @@ int main(int argc, char *argv[])
+     QApplication a(argc, argv);
+     QTranslator trans;
+     QString locale = QLocale::system().name();
+-    if(locale == "zh_CN")
+-    {
+-        if(trans.load(":/translations/gui_zh_CN.qm"))
+-        {
++    if (locale == "zh_CN") {
++        if (trans.load(":/translations/gui_zh_CN.qm")) {
+             a.installTranslator(&trans);
+         }
+     }
+-    if(locale == "bo_CN")
+-    {
+-        if(trans.load(":/translations/gui_bo_CN.qm"))
+-        {
++    if (locale == "bo_CN") {
++        if (trans.load(":/translations/gui_bo_CN.qm")) {
+             a.installTranslator(&trans);
+         }
+     }
+diff --git a/kysdk-qtwidgets/test/testListWidget/widget.cpp b/kysdk-qtwidgets/test/testListWidget/widget.cpp
+index ea860cb..bb9e866 100644
+--- a/kysdk-qtwidgets/test/testListWidget/widget.cpp
++++ b/kysdk-qtwidgets/test/testListWidget/widget.cpp
+@@ -1,5 +1,5 @@
+ /*
+- * 
++ *
+  *
+  * Copyright (C) 2023, KylinSoft Co., Ltd.
+  *
+@@ -28,18 +28,18 @@ using namespace kdk;
+ Widget::Widget(QWidget *parent)
+     : QWidget(parent)
+ {
+-    QVBoxLayout* vlayout = new QVBoxLayout(this);
++    QVBoxLayout *vlayout = new QVBoxLayout(this);
+ 
+     m_listwidget = new KListWidget(this);
+     this->setWindowTitle("test");
+     this->setWindowIcon(QIcon::fromTheme("kylin-music"));
+-    this->resize(800,500);
+-    //KItemWidget 构造函数  KItemWidget(const QIcon &Myicon,QString MmainText,QString MsecText,QWidget *parent);
+-    //Myicon 需要显示的图片   MmainText 需要写入的miantext   MsecText 需要写入的sectext
+-    m_item = new KItemWidget(QIcon::fromTheme("kylin-music"),QString("IMG202202121544.JPG"),QString("1.6MB"),m_listwidget);
++    this->resize(800, 500);
++    // KItemWidget 构造函数  KItemWidget(const QIcon &Myicon,QString MmainText,QString MsecText,QWidget *parent);
++    // Myicon 需要显示的图片   MmainText 需要写入的miantext   MsecText 需要写入的sectext
++    m_item = new KItemWidget(QIcon::fromTheme("kylin-music"), QString("IMG202202121544.JPG"), QString("1.6MB"), m_listwidget);
+ 
+-    m_item1 = new KItemWidget(QIcon::fromTheme("kylin-music"),QString("IMG202202121544.JPG"),QString("1.5MB"),m_listwidget);
+-    KItemWidget* m_item2 = new KItemWidget(QIcon::fromTheme("kylin-music"),QString("IMG202202121544.JPG"),QString("1.5MB"),m_listwidget);
++    m_item1 = new KItemWidget(QIcon::fromTheme("kylin-music"), QString("IMG202202121544.JPG"), QString("1.5MB"), m_listwidget);
++    KItemWidget *m_item2 = new KItemWidget(QIcon::fromTheme("kylin-music"), QString("IMG202202121544.JPG"), QString("1.5MB"), m_listwidget);
+ 
+     m_listwidget->AddItemWidget(m_item);
+     m_listwidget->AddItemWidget(m_item1);
+@@ -51,4 +51,3 @@ Widget::Widget(QWidget *parent)
+ Widget::~Widget()
+ {
+ }
+-
+diff --git a/kysdk-qtwidgets/test/testListWidget/widget.h b/kysdk-qtwidgets/test/testListWidget/widget.h
+index 1f59850..32e656f 100644
+--- a/kysdk-qtwidgets/test/testListWidget/widget.h
++++ b/kysdk-qtwidgets/test/testListWidget/widget.h
+@@ -1,5 +1,5 @@
+ /*
+- * 
++ *
+  *
+  * Copyright (C) 2023, KylinSoft Co., Ltd.
+  *
+@@ -23,11 +23,11 @@
+ #ifndef WIDGET_H
+ #define WIDGET_H
+ 
+-#include <QWidget>
+-#include "kwidget.h"
++#include "gui_g.h"
+ #include "kitemwidget.h"
+ #include "klistwidget.h"
+-#include "gui_g.h"
++#include "kwidget.h"
++#include <QWidget>
+ 
+ using namespace kdk;
+ 
+@@ -40,8 +40,8 @@ public:
+     ~Widget();
+ 
+ private:
+-    KItemWidget* m_item;
+-    KItemWidget* m_item1;
+-    KListWidget* m_listwidget;
++    KItemWidget *m_item;
++    KItemWidget *m_item1;
++    KListWidget *m_listwidget;
+ };
+ #endif // WIDGET_H
+diff --git a/kysdk-qtwidgets/test/testLunarDateEdit/widget.cpp b/kysdk-qtwidgets/test/testLunarDateEdit/widget.cpp
+index 943ee0b..ce9c9b2 100644
+--- a/kysdk-qtwidgets/test/testLunarDateEdit/widget.cpp
++++ b/kysdk-qtwidgets/test/testLunarDateEdit/widget.cpp
+@@ -2,9 +2,10 @@
+ #include "klunardateedit.h"
+ #include <QVBoxLayout>
+ 
+-Widget::Widget(QWidget *parent) : QWidget(parent)
++Widget::Widget(QWidget *parent)
++    : QWidget(parent)
+ {
+-    this->setFixedSize(300,150);
++    this->setFixedSize(300, 150);
+     QVBoxLayout *layout = new QVBoxLayout(this);
+ 
+     m_pLunarCheckBox = new QCheckBox(this);
+@@ -19,7 +20,7 @@ Widget::Widget(QWidget *parent) : QWidget(parent)
+     layout->addWidget(m_pLunarCheckBox);
+     layout->addWidget(m_pLunarDateEdit);
+ 
+-    //用法,拿到DateEdit指针,然后像正常DateEdit控件一样用,农历会跟随刷新
++    // 用法,拿到DateEdit指针,然后像正常DateEdit控件一样用,农历会跟随刷新
+     m_pLunarDateEdit->getDateEdit()->setDate(QDate::currentDate());
+ 
+     QMetaObject::connectSlotsByName(this);
+@@ -27,11 +28,9 @@ Widget::Widget(QWidget *parent) : QWidget(parent)
+ 
+ Widget::~Widget()
+ {
+-
+ }
+ 
+ void Widget::on_checkBox_clicked(bool checked)
+ {
+     m_pLunarDateEdit->setShowLunar(checked);
+ }
+-
+diff --git a/kysdk-qtwidgets/test/testLunarDateEdit/widget.h b/kysdk-qtwidgets/test/testLunarDateEdit/widget.h
+index 48dcccd..9886314 100644
+--- a/kysdk-qtwidgets/test/testLunarDateEdit/widget.h
++++ b/kysdk-qtwidgets/test/testLunarDateEdit/widget.h
+@@ -1,9 +1,9 @@
+ #ifndef WIDGET_H
+ #define WIDGET_H
+ 
+-#include <QWidget>
+-#include <QCheckBox>
+ #include "klunardateedit.h"
++#include <QCheckBox>
++#include <QWidget>
+ 
+ using namespace kdk;
+ 
+@@ -18,8 +18,8 @@ private slots:
+     void on_checkBox_clicked(bool checked);
+ 
+ private:
+-    QCheckBox* m_pLunarCheckBox;
+-    KLunarDateEdit* m_pLunarDateEdit;
++    QCheckBox *m_pLunarCheckBox;
++    KLunarDateEdit *m_pLunarDateEdit;
+ };
+ 
+ #endif // WIDGET_H
+diff --git a/kysdk-qtwidgets/test/testProgressCircle/main.cpp b/kysdk-qtwidgets/test/testProgressCircle/main.cpp
+index 0fe4772..b9c8610 100644
+--- a/kysdk-qtwidgets/test/testProgressCircle/main.cpp
++++ b/kysdk-qtwidgets/test/testProgressCircle/main.cpp
+@@ -22,9 +22,9 @@
+ 
+ #include "widget.h"
+ 
++#include "kwidgetutils.h"
+ #include <QApplication>
+ #include <QTranslator>
+-#include "kwidgetutils.h"
+ 
+ int main(int argc, char *argv[])
+ {
+@@ -32,17 +32,13 @@ int main(int argc, char *argv[])
+     QApplication a(argc, argv);
+     QTranslator trans;
+     QString locale = QLocale::system().name();
+-    if(locale == "zh_CN")
+-    {
+-        if(trans.load(":/translations/gui_zh_CN.qm"))
+-        {
++    if (locale == "zh_CN") {
++        if (trans.load(":/translations/gui_zh_CN.qm")) {
+             a.installTranslator(&trans);
+         }
+     }
+-    if(locale == "bo_CN")
+-    {
+-        if(trans.load(":/translations/gui_bo_CN.qm"))
+-        {
++    if (locale == "bo_CN") {
++        if (trans.load(":/translations/gui_bo_CN.qm")) {
+             a.installTranslator(&trans);
+         }
+     }
+diff --git a/kysdk-qtwidgets/test/testProgressCircle/widget.cpp b/kysdk-qtwidgets/test/testProgressCircle/widget.cpp
+index d5c784e..68c8614 100644
+--- a/kysdk-qtwidgets/test/testProgressCircle/widget.cpp
++++ b/kysdk-qtwidgets/test/testProgressCircle/widget.cpp
+@@ -28,25 +28,25 @@
+ Widget::Widget(QWidget *parent)
+     : KWidget(parent)
+ {
+-    QVBoxLayout*vLayout = new QVBoxLayout;
+-    QHBoxLayout* hLayout = new QHBoxLayout;
++    QVBoxLayout *vLayout = new QVBoxLayout;
++    QHBoxLayout *hLayout = new QHBoxLayout;
+     KProgressCircle *circle1 = new KProgressCircle(this);
+-    circle1->setValue(40);   //设置初始值
++    circle1->setValue(40); // 设置初始值
+     hLayout->addWidget(circle1);
+     KProgressCircle *circle2 = new KProgressCircle(this);
+     circle2->setValue(10);
+-    circle2->setState(ProgressBarState::FailedProgress);   //设置失败状态
++    circle2->setState(ProgressBarState::FailedProgress); // 设置失败状态
+     hLayout->addWidget(circle2);
+     KProgressCircle *circle3 = new KProgressCircle(this);
+     circle3->setValue(75);
+-    circle3->setState(ProgressBarState::SuccessProgress);  //设置成功状态
++    circle3->setState(ProgressBarState::SuccessProgress); // 设置成功状态
+     hLayout->addWidget(circle3);
+     vLayout->addLayout(hLayout);
+ 
+     hLayout = new QHBoxLayout;
+     KProgressCircle *circle4 = new KProgressCircle(this);
+     circle4->setValue(40);
+-    circle4->setTextVisible(false);   //设置文本不可见
++    circle4->setTextVisible(false); // 设置文本不可见
+     hLayout->addWidget(circle4);
+     KProgressCircle *circle5 = new KProgressCircle(this);
+     circle5->setValue(93);
+@@ -64,25 +64,21 @@ Widget::Widget(QWidget *parent)
+ 
+     m_pTimer = new QTimer(this);
+     m_pTimer->setInterval(20);
+-    connect(m_pTimer,&QTimer::timeout,circle1,[=](){
+-        if(circle1->value()<circle1->maximum())
+-            circle1->setValue(circle1->value()+1);
+-        else
+-        {
++    connect(m_pTimer, &QTimer::timeout, circle1, [=]() {
++        if (circle1->value() < circle1->maximum())
++            circle1->setValue(circle1->value() + 1);
++        else {
+             circle1->setValue(circle1->minimum());
+             circle1->setState(NormalProgress);
+         }
+-
+     });
+-    connect(m_pTimer,&QTimer::timeout,circle4,[=](){
+-        if(circle4->value()<circle4->maximum())
+-            circle4->setValue(circle4->value()+1);
+-        else
+-        {
++    connect(m_pTimer, &QTimer::timeout, circle4, [=]() {
++        if (circle4->value() < circle4->maximum())
++            circle4->setValue(circle4->value() + 1);
++        else {
+             circle4->setValue(circle4->minimum());
+             circle4->setState(NormalProgress);
+         }
+-
+     });
+     m_pTimer->start();
+ }
+@@ -90,4 +86,3 @@ Widget::Widget(QWidget *parent)
+ Widget::~Widget()
+ {
+ }
+-
+diff --git a/kysdk-qtwidgets/test/testProgressCircle/widget.h b/kysdk-qtwidgets/test/testProgressCircle/widget.h
+index be2d01c..3e7e406 100644
+--- a/kysdk-qtwidgets/test/testProgressCircle/widget.h
++++ b/kysdk-qtwidgets/test/testProgressCircle/widget.h
+@@ -35,6 +35,6 @@ public:
+     ~Widget();
+ 
+ private:
+-    QTimer* m_pTimer;
++    QTimer *m_pTimer;
+ };
+ #endif // WIDGET_H
+diff --git a/kysdk-qtwidgets/test/testPushbutton/main.cpp b/kysdk-qtwidgets/test/testPushbutton/main.cpp
+index 0fe4772..b9c8610 100644
+--- a/kysdk-qtwidgets/test/testPushbutton/main.cpp
++++ b/kysdk-qtwidgets/test/testPushbutton/main.cpp
+@@ -22,9 +22,9 @@
+ 
+ #include "widget.h"
+ 
++#include "kwidgetutils.h"
+ #include <QApplication>
+ #include <QTranslator>
+-#include "kwidgetutils.h"
+ 
+ int main(int argc, char *argv[])
+ {
+@@ -32,17 +32,13 @@ int main(int argc, char *argv[])
+     QApplication a(argc, argv);
+     QTranslator trans;
+     QString locale = QLocale::system().name();
+-    if(locale == "zh_CN")
+-    {
+-        if(trans.load(":/translations/gui_zh_CN.qm"))
+-        {
++    if (locale == "zh_CN") {
++        if (trans.load(":/translations/gui_zh_CN.qm")) {
+             a.installTranslator(&trans);
+         }
+     }
+-    if(locale == "bo_CN")
+-    {
+-        if(trans.load(":/translations/gui_bo_CN.qm"))
+-        {
++    if (locale == "bo_CN") {
++        if (trans.load(":/translations/gui_bo_CN.qm")) {
+             a.installTranslator(&trans);
+         }
+     }
+diff --git a/kysdk-qtwidgets/test/testPushbutton/widget.cpp b/kysdk-qtwidgets/test/testPushbutton/widget.cpp
+index ac5cc89..7da82a6 100644
+--- a/kysdk-qtwidgets/test/testPushbutton/widget.cpp
++++ b/kysdk-qtwidgets/test/testPushbutton/widget.cpp
+@@ -29,27 +29,27 @@
+ Widget::Widget(QWidget *parent)
+     : KWidget(parent)
+ {
+-    QVBoxLayout* vLayout = new QVBoxLayout;
+-    QGroupBox* groupBox1 = new QGroupBox("border",this);
+-    QGroupBox* groupBox2 = new QGroupBox("borderless",this);
+-    QGroupBox* groupBox3 = new QGroupBox("borderless tooltip",this);
+-    QHBoxLayout* hLayout =new QHBoxLayout;
+-    m_pBtn1 = new KBorderButton("border",this);     //构造一个带边框按钮
+-    m_pBtn2 = new KBorderButton("border",this);
+-    m_pBtn2->setIcon(QIcon::fromTheme("browser-download-symbolic"));        //设置按钮图标
+-    m_pBtn3 = new KBorderButton("border",this);
++    QVBoxLayout *vLayout = new QVBoxLayout;
++    QGroupBox *groupBox1 = new QGroupBox("border", this);
++    QGroupBox *groupBox2 = new QGroupBox("borderless", this);
++    QGroupBox *groupBox3 = new QGroupBox("borderless tooltip", this);
++    QHBoxLayout *hLayout = new QHBoxLayout;
++    m_pBtn1 = new KBorderButton("border", this); // 构造一个带边框按钮
++    m_pBtn2 = new KBorderButton("border", this);
++    m_pBtn2->setIcon(QIcon::fromTheme("browser-download-symbolic")); // 设置按钮图标
++    m_pBtn3 = new KBorderButton("border", this);
+     m_pBtn3->setIcon(QIcon::fromTheme("browser-download-symbolic"));
+-    m_pBtn3->setEnabled(false);         //设置不可点击
++    m_pBtn3->setEnabled(false); // 设置不可点击
+     hLayout->addWidget(m_pBtn1);
+     hLayout->addWidget(m_pBtn2);
+     hLayout->addWidget(m_pBtn3);
+     groupBox1->setLayout(hLayout);
+-    m_pBtn4 = new KBorderlessButton("borderless",this);     //构造一个无边框按钮
+-    m_pBtn5 = new KBorderlessButton("borderless",this);
+-    m_pBtn5->setIcon(QIcon::fromTheme("document-send-symbolic"));       //设置按钮图标
+-    m_pBtn6 = new KBorderlessButton("borderless",this);
++    m_pBtn4 = new KBorderlessButton("borderless", this); // 构造一个无边框按钮
++    m_pBtn5 = new KBorderlessButton("borderless", this);
++    m_pBtn5->setIcon(QIcon::fromTheme("document-send-symbolic")); // 设置按钮图标
++    m_pBtn6 = new KBorderlessButton("borderless", this);
+     m_pBtn6->setIcon(QIcon::fromTheme("browser-download-symbolic"));
+-    m_pBtn6->setEnabled(false);     //设置不可点击
++    m_pBtn6->setEnabled(false); // 设置不可点击
+ 
+     hLayout = new QHBoxLayout;
+     hLayout->addWidget(m_pBtn4);
+@@ -57,11 +57,11 @@ Widget::Widget(QWidget *parent)
+     hLayout->addWidget(m_pBtn6);
+     groupBox2->setLayout(hLayout);
+ 
+-    KBorderlessButton* m_pBtn7 = new KBorderlessButton("borderless test",this);     //构造一个无边框按钮
++    KBorderlessButton *m_pBtn7 = new KBorderlessButton("borderless test", this); // 构造一个无边框按钮
+     m_pBtn7->setFixedWidth(80);
+-    KBorderlessButton*  m_pBtn8 = new KBorderlessButton("borderless",this);
+-    m_pBtn8->setIcon(QIcon::fromTheme("document-send-symbolic"));       //设置按钮图标
+-    KBorderlessButton* m_pBtn9 = new KBorderlessButton("borderless",this);
++    KBorderlessButton *m_pBtn8 = new KBorderlessButton("borderless", this);
++    m_pBtn8->setIcon(QIcon::fromTheme("document-send-symbolic")); // 设置按钮图标
++    KBorderlessButton *m_pBtn9 = new KBorderlessButton("borderless", this);
+     m_pBtn9->setFixedWidth(80);
+     m_pBtn9->setIcon(QIcon::fromTheme("browser-download-symbolic"));
+ 
+@@ -80,4 +80,3 @@ Widget::Widget(QWidget *parent)
+ Widget::~Widget()
+ {
+ }
+-
+diff --git a/kysdk-qtwidgets/test/testPushbutton/widget.h b/kysdk-qtwidgets/test/testPushbutton/widget.h
+index 13bb278..cb97091 100644
+--- a/kysdk-qtwidgets/test/testPushbutton/widget.h
++++ b/kysdk-qtwidgets/test/testPushbutton/widget.h
+@@ -23,9 +23,9 @@
+ #ifndef WIDGET_H
+ #define WIDGET_H
+ 
+-#include "kwidget.h"
+ #include "kborderbutton.h"
+ #include "kborderlessbutton.h"
++#include "kwidget.h"
+ 
+ using namespace kdk;
+ 
+@@ -38,11 +38,11 @@ public:
+     ~Widget();
+ 
+ private:
+-    KBorderButton* m_pBtn1;
+-    KBorderButton* m_pBtn2;
+-    KBorderButton* m_pBtn3;
+-    KBorderlessButton* m_pBtn4;
+-    KBorderlessButton* m_pBtn5;
+-    KBorderlessButton* m_pBtn6;
++    KBorderButton *m_pBtn1;
++    KBorderButton *m_pBtn2;
++    KBorderButton *m_pBtn3;
++    KBorderlessButton *m_pBtn4;
++    KBorderlessButton *m_pBtn5;
++    KBorderlessButton *m_pBtn6;
+ };
+ #endif // WIDGET_H
+diff --git a/kysdk-qtwidgets/test/testSwitchButton/main.cpp b/kysdk-qtwidgets/test/testSwitchButton/main.cpp
+index 0fe4772..b9c8610 100644
+--- a/kysdk-qtwidgets/test/testSwitchButton/main.cpp
++++ b/kysdk-qtwidgets/test/testSwitchButton/main.cpp
+@@ -22,9 +22,9 @@
+ 
+ #include "widget.h"
+ 
++#include "kwidgetutils.h"
+ #include <QApplication>
+ #include <QTranslator>
+-#include "kwidgetutils.h"
+ 
+ int main(int argc, char *argv[])
+ {
+@@ -32,17 +32,13 @@ int main(int argc, char *argv[])
+     QApplication a(argc, argv);
+     QTranslator trans;
+     QString locale = QLocale::system().name();
+-    if(locale == "zh_CN")
+-    {
+-        if(trans.load(":/translations/gui_zh_CN.qm"))
+-        {
++    if (locale == "zh_CN") {
++        if (trans.load(":/translations/gui_zh_CN.qm")) {
+             a.installTranslator(&trans);
+         }
+     }
+-    if(locale == "bo_CN")
+-    {
+-        if(trans.load(":/translations/gui_bo_CN.qm"))
+-        {
++    if (locale == "bo_CN") {
++        if (trans.load(":/translations/gui_bo_CN.qm")) {
+             a.installTranslator(&trans);
+         }
+     }
+diff --git a/kysdk-qtwidgets/test/testSwitchButton/widget.cpp b/kysdk-qtwidgets/test/testSwitchButton/widget.cpp
+index 3142c3d..8279d90 100644
+--- a/kysdk-qtwidgets/test/testSwitchButton/widget.cpp
++++ b/kysdk-qtwidgets/test/testSwitchButton/widget.cpp
+@@ -26,22 +26,25 @@
+ Widget::Widget(QWidget *parent)
+     : KWidget(parent)
+ {
+-    QVBoxLayout* mainLayout = new QVBoxLayout;
+-    QHBoxLayout* hLayout = new QHBoxLayout;
+-    m_pSwitchBtn1 = new KSwitchButton(this);    //构造一个kswitchbutton
+-    m_pSwitchBtn1->setFixedSize(50,24);         //设置button的大小
+-    m_pSwitchBtn1->setCheckable(true);          //设置是否可选中
+-    m_pSwitchBtn1->setChecked(true);            //设置是否为选中状态
++    QVBoxLayout *mainLayout = new QVBoxLayout;
++    QHBoxLayout *hLayout = new QHBoxLayout;
++    m_pSwitchBtn1 = new KSwitchButton(this); // 构造一个kswitchbutton
++    m_pSwitchBtn1->setFixedSize(50, 24); // 设置button的大小
++    m_pSwitchBtn1->setCheckable(true); // 设置是否可选中
++    m_pSwitchBtn1->setChecked(true); // 设置是否为选中状态
+     m_pLabel1 = new QLabel(this);
+-    m_pLabel1->setText(m_pSwitchBtn1->isChecked()?"ON":"OFF");      //获取button是否是选中状态
+-    //监听状态改变信号stateChanged
+-    connect(m_pSwitchBtn1,&KSwitchButton::stateChanged,this,[=](){m_pLabel1->setText(m_pSwitchBtn1->isChecked()?"ON":"OFF");});
++    m_pLabel1->setText(m_pSwitchBtn1->isChecked() ? "ON" : "OFF"); // 获取button是否是选中状态
++    // 监听状态改变信号stateChanged
++    connect(m_pSwitchBtn1, &KSwitchButton::stateChanged, this, [=]() {
++        m_pLabel1->setText(m_pSwitchBtn1->isChecked() ? "ON" : "OFF");
++    });
+     m_pBtn1 = new KBorderlessButton(this);
+     m_pBtn1->setChecked(true);
+-    m_pBtn1->setText(m_pSwitchBtn1->isEnabled()?"Enable":"Disable");
+-    connect(m_pBtn1,&KBorderlessButton::clicked,this,[=](){
++    m_pBtn1->setText(m_pSwitchBtn1->isEnabled() ? "Enable" : "Disable");
++    connect(m_pBtn1, &KBorderlessButton::clicked, this, [=]() {
+         m_pSwitchBtn1->setEnabled(!m_pSwitchBtn1->isEnabled());
+-        m_pBtn1->setText(m_pSwitchBtn1->isEnabled()?"Enable":"Disable");});
++        m_pBtn1->setText(m_pSwitchBtn1->isEnabled() ? "Enable" : "Disable");
++    });
+     hLayout->addWidget(m_pSwitchBtn1);
+     hLayout->addWidget(m_pLabel1);
+     hLayout->addWidget(m_pBtn1);
+@@ -50,16 +53,19 @@ Widget::Widget(QWidget *parent)
+ 
+     hLayout = new QHBoxLayout;
+     m_pSwitchBtn2 = new KSwitchButton(this);
+-    m_pSwitchBtn2->setFixedSize(100,48);
+-    m_pSwitchBtn2->setEnabled(false);   //设置button状态为不可点击状态
++    m_pSwitchBtn2->setFixedSize(100, 48);
++    m_pSwitchBtn2->setEnabled(false); // 设置button状态为不可点击状态
+     m_pLabel2 = new QLabel(this);
+-    m_pLabel2->setText(m_pSwitchBtn2->isChecked()?"ON":"OFF");
+-    connect(m_pSwitchBtn2,&KSwitchButton::stateChanged,this,[=](){m_pLabel2->setText(m_pSwitchBtn2->isChecked()?"ON":"OFF");});
++    m_pLabel2->setText(m_pSwitchBtn2->isChecked() ? "ON" : "OFF");
++    connect(m_pSwitchBtn2, &KSwitchButton::stateChanged, this, [=]() {
++        m_pLabel2->setText(m_pSwitchBtn2->isChecked() ? "ON" : "OFF");
++    });
+     m_pBtn2 = new KBorderlessButton(this);
+-    m_pBtn2->setText(m_pSwitchBtn2->isEnabled()?"Enable":"Disable");
+-    connect(m_pBtn2,&KBorderlessButton::clicked,this,[=](){
++    m_pBtn2->setText(m_pSwitchBtn2->isEnabled() ? "Enable" : "Disable");
++    connect(m_pBtn2, &KBorderlessButton::clicked, this, [=]() {
+         m_pSwitchBtn2->setEnabled(!m_pSwitchBtn2->isEnabled());
+-        m_pBtn2->setText(m_pSwitchBtn2->isEnabled()?"Enable":"Disable");});
++        m_pBtn2->setText(m_pSwitchBtn2->isEnabled() ? "Enable" : "Disable");
++    });
+     hLayout->addWidget(m_pSwitchBtn2);
+     hLayout->addWidget(m_pLabel2);
+     hLayout->addWidget(m_pBtn2);
+@@ -68,15 +74,18 @@ Widget::Widget(QWidget *parent)
+ 
+     hLayout = new QHBoxLayout;
+     m_pSwitchBtn3 = new KSwitchButton(this);
+-    m_pSwitchBtn3->setFixedSize(200,96);
++    m_pSwitchBtn3->setFixedSize(200, 96);
+     m_pLabel3 = new QLabel(this);
+-    m_pLabel3->setText(m_pSwitchBtn3->isChecked()?"ON":"OFF");
+-    connect(m_pSwitchBtn3,&KSwitchButton::stateChanged,this,[=](){m_pLabel3->setText(m_pSwitchBtn3->isChecked()?"ON":"OFF");});
++    m_pLabel3->setText(m_pSwitchBtn3->isChecked() ? "ON" : "OFF");
++    connect(m_pSwitchBtn3, &KSwitchButton::stateChanged, this, [=]() {
++        m_pLabel3->setText(m_pSwitchBtn3->isChecked() ? "ON" : "OFF");
++    });
+     m_pBtn3 = new KBorderlessButton(this);
+-    m_pBtn3->setText(m_pSwitchBtn3->isEnabled()?"Enable":"Disable");
+-    connect(m_pBtn3,&KBorderlessButton::clicked,this,[=](){
++    m_pBtn3->setText(m_pSwitchBtn3->isEnabled() ? "Enable" : "Disable");
++    connect(m_pBtn3, &KBorderlessButton::clicked, this, [=]() {
+         m_pSwitchBtn3->setEnabled(!m_pSwitchBtn3->isEnabled());
+-        m_pBtn3->setText(m_pSwitchBtn3->isEnabled()?"Enable":"Disable");});
++        m_pBtn3->setText(m_pSwitchBtn3->isEnabled() ? "Enable" : "Disable");
++    });
+     hLayout->addWidget(m_pSwitchBtn3);
+     hLayout->addWidget(m_pLabel3);
+     hLayout->addWidget(m_pBtn3);
+@@ -89,4 +98,3 @@ Widget::Widget(QWidget *parent)
+ Widget::~Widget()
+ {
+ }
+-
+diff --git a/kysdk-qtwidgets/test/testSwitchButton/widget.h b/kysdk-qtwidgets/test/testSwitchButton/widget.h
+index e47066b..8ecdafb 100644
+--- a/kysdk-qtwidgets/test/testSwitchButton/widget.h
++++ b/kysdk-qtwidgets/test/testSwitchButton/widget.h
+@@ -23,9 +23,9 @@
+ #ifndef WIDGET_H
+ #define WIDGET_H
+ 
+-#include "kwidget.h"
+-#include "kswitchbutton.h"
+ #include "kborderlessbutton.h"
++#include "kswitchbutton.h"
++#include "kwidget.h"
+ #include <QLabel>
+ 
+ using namespace kdk;
+@@ -39,14 +39,14 @@ public:
+     ~Widget();
+ 
+ private:
+-    KSwitchButton* m_pSwitchBtn1;
+-    QLabel* m_pLabel1;
+-    KBorderlessButton* m_pBtn1;
+-    KSwitchButton* m_pSwitchBtn2;
+-    QLabel* m_pLabel2;
+-    KBorderlessButton* m_pBtn2;
+-    KSwitchButton* m_pSwitchBtn3;
+-    QLabel* m_pLabel3;
+-    KBorderlessButton* m_pBtn3;
++    KSwitchButton *m_pSwitchBtn1;
++    QLabel *m_pLabel1;
++    KBorderlessButton *m_pBtn1;
++    KSwitchButton *m_pSwitchBtn2;
++    QLabel *m_pLabel2;
++    KBorderlessButton *m_pBtn2;
++    KSwitchButton *m_pSwitchBtn3;
++    QLabel *m_pLabel3;
++    KBorderlessButton *m_pBtn3;
+ };
+ #endif // WIDGET_H
+diff --git a/kysdk-qtwidgets/test/testTag/main.cpp b/kysdk-qtwidgets/test/testTag/main.cpp
+index 83ab687..01b18eb 100644
+--- a/kysdk-qtwidgets/test/testTag/main.cpp
++++ b/kysdk-qtwidgets/test/testTag/main.cpp
+@@ -20,10 +20,10 @@
+  *
+  */
+ 
++#include "kwidgetutils.h"
+ #include "widget.h"
+ #include <QApplication>
+ #include <QTranslator>
+-#include "kwidgetutils.h"
+ 
+ int main(int argc, char *argv[])
+ {
+@@ -31,17 +31,13 @@ int main(int argc, char *argv[])
+     QApplication a(argc, argv);
+     QTranslator trans;
+     QString locale = QLocale::system().name();
+-    if(locale == "zh_CN")
+-    {
+-        if(trans.load(":/translations/gui_zh_CN.qm"))
+-        {
++    if (locale == "zh_CN") {
++        if (trans.load(":/translations/gui_zh_CN.qm")) {
+             a.installTranslator(&trans);
+         }
+     }
+-    if(locale == "bo_CN")
+-    {
+-        if(trans.load(":/translations/gui_bo_CN.qm"))
+-        {
++    if (locale == "bo_CN") {
++        if (trans.load(":/translations/gui_bo_CN.qm")) {
+             a.installTranslator(&trans);
+         }
+     }
+diff --git a/kysdk-qtwidgets/test/testTag/widget.cpp b/kysdk-qtwidgets/test/testTag/widget.cpp
+index 5a5b27a..deb4c58 100644
+--- a/kysdk-qtwidgets/test/testTag/widget.cpp
++++ b/kysdk-qtwidgets/test/testTag/widget.cpp
+@@ -21,29 +21,27 @@
+  */
+ 
+ #include "widget.h"
+-#include <QPushButton>
+-#include <QLineEdit>
++#include "kbreadcrumb.h"
++#include "ktag.h"
+ #include <QHBoxLayout>
++#include <QLineEdit>
++#include <QPushButton>
+ #include <QTabBar>
+-#include "ktag.h"
+-#include "kbreadcrumb.h"
+-
+-
+ 
+ Widget::Widget(QWidget *parent)
+     : KWidget(parent)
+ {
+     QVBoxLayout *vLayout = new QVBoxLayout;
+-    KTag* tag1 = new KTag(this);
+-    tag1->setText("tag1");      //设置tag文本
+-    //tag1->setTagStyle(TagStyle::HighlightTag);
+-    KTag* tag2 = new KTag(this);
++    KTag *tag1 = new KTag(this);
++    tag1->setText("tag1"); // 设置tag文本
++    // tag1->setTagStyle(TagStyle::HighlightTag);
++    KTag *tag2 = new KTag(this);
+     tag2->setText("tag2");
+-    tag2->setTagStyle(TagStyle::BoderTag);      //设置tag的style,有HighlightTag,BoderTag,BaseBoderTag,GrayTag四种
+-    KTag* tag3 = new KTag(this);
++    tag2->setTagStyle(TagStyle::BoderTag); // 设置tag的style,有HighlightTag,BoderTag,BaseBoderTag,GrayTag四种
++    KTag *tag3 = new KTag(this);
+     tag3->setText("tag3");
+     tag3->setTagStyle(TagStyle::BaseBoderTag);
+-    KTag* tag4 = new KTag(this);
++    KTag *tag4 = new KTag(this);
+     tag4->setText("tag4");
+     tag4->setTagStyle(TagStyle::GrayTag);
+     QHBoxLayout *hLayout = new QHBoxLayout;
+@@ -53,18 +51,18 @@ Widget::Widget(QWidget *parent)
+     hLayout->addWidget(tag4);
+     vLayout->addLayout(hLayout);
+     hLayout = new QHBoxLayout;
+-    KTag* tag5 = new KTag(this);
++    KTag *tag5 = new KTag(this);
+     tag5->setText("tag5");
+-    tag5->setClosable(true);    //设置tag是否可以关闭
+-    KTag* tag6 = new KTag(this);
++    tag5->setClosable(true); // 设置tag是否可以关闭
++    KTag *tag6 = new KTag(this);
+     tag6->setClosable(true);
+     tag6->setText("tag6");
+     tag6->setTagStyle(TagStyle::BoderTag);
+-    KTag* tag7 = new KTag(this);
++    KTag *tag7 = new KTag(this);
+     tag7->setClosable(true);
+     tag7->setText("tag7");
+     tag7->setTagStyle(TagStyle::BaseBoderTag);
+-    KTag* tag8 = new KTag(this);
++    KTag *tag8 = new KTag(this);
+     tag8->setClosable(true);
+     tag8->setText("tag8");
+     tag8->setTagStyle(TagStyle::GrayTag);
+@@ -80,4 +78,3 @@ Widget::Widget(QWidget *parent)
+ Widget::~Widget()
+ {
+ }
+-
+diff --git a/kysdk-qtwidgets/test/testTranslucent/main.cpp b/kysdk-qtwidgets/test/testTranslucent/main.cpp
+index 359a626..597742a 100644
+--- a/kysdk-qtwidgets/test/testTranslucent/main.cpp
++++ b/kysdk-qtwidgets/test/testTranslucent/main.cpp
+@@ -22,16 +22,16 @@
+ 
+ #include "widget.h"
+ 
+-#include <QApplication>
+ #include <KWindowEffects>
+-//#include <kwidgetutils.h>
++#include <QApplication>
++// #include <kwidgetutils.h>
+ 
+ int main(int argc, char *argv[])
+ {
+-//    kdk::KWidgetUtils::highDpiScaling();
++    //    kdk::KWidgetUtils::highDpiScaling();
+     QApplication a(argc, argv);
+     Widget w;
+     w.show();
+-    KWindowEffects::enableBlurBehind(w.winId(),true);
++    KWindowEffects::enableBlurBehind(w.winId(), true);
+     return a.exec();
+ }
+diff --git a/kysdk-qtwidgets/test/testTranslucent/widget.cpp b/kysdk-qtwidgets/test/testTranslucent/widget.cpp
+index c3f9d89..4c61d38 100644
+--- a/kysdk-qtwidgets/test/testTranslucent/widget.cpp
++++ b/kysdk-qtwidgets/test/testTranslucent/widget.cpp
+@@ -21,18 +21,18 @@
+  */
+ 
+ #include "widget.h"
++#include "kpressbutton.h"
++#include "kpushbutton.h"
++#include "ksearchlineedit.h"
+ #include "kslider.h"
+ #include "kswitchbutton.h"
+-#include <kwindoweffects.h>
++#include <QEvent>
++#include <QLabel>
++#include <QLineEdit>
+ #include <QPalette>
+ #include <QVBoxLayout>
+ #include <QWidget>
+-#include <QLineEdit>
+-#include <QLabel>
+-#include <QEvent>
+-#include "ksearchlineedit.h"
+-#include "kpressbutton.h"
+-#include "kpushbutton.h"
++#include <kwindoweffects.h>
+ 
+ using namespace kdk;
+ 
+@@ -41,76 +41,74 @@ Widget::Widget(QWidget *parent)
+ {
+     setAttribute(Qt::WA_TranslucentBackground);
+ 
+-    QVBoxLayout* mainLayout = new QVBoxLayout(this);
++    QVBoxLayout *mainLayout = new QVBoxLayout(this);
+     QWidget *mainWidget = new QWidget(this);
+     mainWidget->setFocusPolicy(Qt::FocusPolicy::ClickFocus);
+     mainWidget->installEventFilter(this);
+-    QLabel* label1 = new QLabel("KSlider",this);
+-    label1->move(50,100);
+-    KSlider* slider = new KSlider(mainWidget);
++    QLabel *label1 = new QLabel("KSlider", this);
++    label1->move(50, 100);
++    KSlider *slider = new KSlider(mainWidget);
+     slider->setToolTip("this is a tool tip");
+-    slider->setRange(0,100);
+-    //测试接口
++    slider->setRange(0, 100);
++    // 测试接口
+     slider->setTranslucent(true);
+     slider->setTickInterval(20);
+     slider->setFixedWidth(300);
+-    slider->move(200,100);
++    slider->move(200, 100);
+ 
+-    QLabel* label2 = new QLabel("KSwitchButton",this);
++    QLabel *label2 = new QLabel("KSwitchButton", this);
+     label2->setFixedWidth(150);
+-    label2->move(50,200);
+-    KSwitchButton* switchbutton = new KSwitchButton(mainWidget);
+-    //测试接口
++    label2->move(50, 200);
++    KSwitchButton *switchbutton = new KSwitchButton(mainWidget);
++    // 测试接口
+     switchbutton->setTranslucent(true);
+-    switchbutton->move(200,200);
++    switchbutton->move(200, 200);
+ 
+-    QLabel* label3 = new QLabel("KSearchLineEdit",this);
+-    label3->move(50,300);
+-    KSearchLineEdit* lineEdit = new KSearchLineEdit(mainWidget);
+-    lineEdit->move(200,300);
+-    //测试接口
++    QLabel *label3 = new QLabel("KSearchLineEdit", this);
++    label3->move(50, 300);
++    KSearchLineEdit *lineEdit = new KSearchLineEdit(mainWidget);
++    lineEdit->move(200, 300);
++    // 测试接口
+     lineEdit->setTranslucent(true);
+ 
+-    QLabel* label4 = new QLabel("KPressButton",this);
+-    label4->move(50,400);
+-    KPressButton* pressBtn1 = new KPressButton(this);
++    QLabel *label4 = new QLabel("KPressButton", this);
++    label4->move(50, 400);
++    KPressButton *pressBtn1 = new KPressButton(this);
+     pressBtn1->setButtonType(KPressButton::CircleType);
+-    pressBtn1->setFixedSize(40,40);
++    pressBtn1->setFixedSize(40, 40);
+     pressBtn1->setIcon(QIcon::fromTheme("ukui-alarm-symbolic"));
+-    //测试接口
++    // 测试接口
+     pressBtn1->setTranslucent(true);
+-    pressBtn1->move(200,400);
++    pressBtn1->move(200, 400);
+ 
+-    KPressButton* pressBtn2 = new KPressButton(this);
+-    pressBtn2->setFixedSize(40,40);
++    KPressButton *pressBtn2 = new KPressButton(this);
++    pressBtn2->setFixedSize(40, 40);
+     pressBtn2->setIcon(QIcon::fromTheme("ukui-alarm-symbolic"));
+-    //测试接口
++    // 测试接口
+     pressBtn2->setTranslucent(true);
+-    pressBtn2->move(250,400);
+-
+-    QLabel* label5 = new QLabel("KPushButton",this);
+-    label5->move(50,500);
++    pressBtn2->move(250, 400);
+ 
++    QLabel *label5 = new QLabel("KPushButton", this);
++    label5->move(50, 500);
+ 
+-    KPushButton* pushbtn1 = new KPushButton(this);
++    KPushButton *pushbtn1 = new KPushButton(this);
+     pushbtn1->setButtonType(KPushButton::CircleType);
+-    pushbtn1->setFixedSize(40,40);
++    pushbtn1->setFixedSize(40, 40);
+     pushbtn1->setIcon(QIcon::fromTheme("ukui-alarm-symbolic"));
+     pushbtn1->setTranslucent(true);
+-    pushbtn1->move(200,500);
++    pushbtn1->move(200, 500);
+ 
+-    KPushButton* pushbtn2 = new KPushButton(this);
+-    pushbtn2->setFixedSize(40,40);
++    KPushButton *pushbtn2 = new KPushButton(this);
++    pushbtn2->setFixedSize(40, 40);
+     pushbtn2->setIcon(QIcon::fromTheme("ukui-alarm-symbolic"));
+-    pushbtn2->setIconColor(QColor(255,0,0));
+-    //测试接口
++    pushbtn2->setIconColor(QColor(255, 0, 0));
++    // 测试接口
+     pushbtn2->setTranslucent(true);
+-    pushbtn2->move(250,500);
+-
++    pushbtn2->move(250, 500);
+ 
+     mainLayout->addWidget(mainWidget);
+     mainLayout->setMargin(0);
+-    setFixedSize(800,600);
++    setFixedSize(800, 600);
+ }
+ 
+ Widget::~Widget()
+@@ -119,21 +117,18 @@ Widget::~Widget()
+ 
+ bool Widget::eventFilter(QObject *watched, QEvent *event)
+ {
+-    if(event->type() == QEvent::Paint)
+-    {
+-        auto widget = qobject_cast<QWidget*>(watched);
+-        if(widget)
+-        {
++    if (event->type() == QEvent::Paint) {
++        auto widget = qobject_cast<QWidget *>(watched);
++        if (widget) {
+             widget->setAutoFillBackground(true);
+ 
+             QPalette palette = this->palette();
+             auto color = this->palette().color(QPalette::Window);
+             color.setAlphaF(0.39);
+-            palette.setColor(QPalette::Window,color);
++            palette.setColor(QPalette::Window, color);
+             widget->setPalette(palette);
+             widget->setBackgroundRole(QPalette::Window);
+         }
+     }
+-    return QObject::eventFilter(watched,event);
++    return QObject::eventFilter(watched, event);
+ }
+-
+diff --git a/kysdk-qtwidgets/test/testWidget/build/moc_predefs.h b/kysdk-qtwidgets/test/testWidget/build/moc_predefs.h
+index 4f82874..2dd18d9 100644
+--- a/kysdk-qtwidgets/test/testWidget/build/moc_predefs.h
++++ b/kysdk-qtwidgets/test/testWidget/build/moc_predefs.h
+@@ -9,7 +9,7 @@
+ #define __FLT_MIN__ 1.17549435082228750796873653722224568e-38F
+ #define __GCC_IEC_559_COMPLEX 2
+ #define __UINT_LEAST8_TYPE__ unsigned char
+-#define __INTMAX_C(c) c ## L
++#define __INTMAX_C(c) c##L
+ #define __CHAR_BIT__ 8
+ #define __UINT8_MAX__ 0xff
+ #define __WINT_MAX__ 0xffffffffU
+@@ -73,7 +73,7 @@
+ #define __SCHAR_MAX__ 0x7f
+ #define __FLT128_MANT_DIG__ 113
+ #define __WCHAR_MIN__ 0U
+-#define __INT64_C(c) c ## L
++#define __INT64_C(c) c##L
+ #define __DBL_DIG__ 15
+ #define __GCC_ATOMIC_POINTER_LOCK_FREE 2
+ #define __FLT64X_MANT_DIG__ 113
+@@ -81,7 +81,7 @@
+ #define __SIZEOF_INT__ 4
+ #define __SIZEOF_POINTER__ 8
+ #define __GCC_ATOMIC_CHAR16_T_LOCK_FREE 2
+-#define __USER_LABEL_PREFIX__ 
++#define __USER_LABEL_PREFIX__
+ #define __FLT64X_EPSILON__ 1.92592994438723585305597794258492732e-34F64x
+ #define __STDC_HOSTED__ 1
+ #define __LDBL_HAS_INFINITY__ 1
+@@ -182,14 +182,14 @@
+ #define __FLT16_MIN_10_EXP__ (-4)
+ #define __FLT64X_DECIMAL_DIG__ 36
+ #define __DEC128_MIN__ 1E-6143DL
+-#define __REGISTER_PREFIX__ 
++#define __REGISTER_PREFIX__
+ #define __UINT16_MAX__ 0xffff
+ #define __FLT32_MIN__ 1.17549435082228750796873653722224568e-38F32
+ #define __UINT8_TYPE__ unsigned char
+ #define __FLT_MANT_DIG__ 24
+ #define __LDBL_DECIMAL_DIG__ 36
+ #define __VERSION__ "9.3.0"
+-#define __UINT64_C(c) c ## UL
++#define __UINT64_C(c) c##UL
+ #define __cpp_unicode_characters 200704
+ #define _STDC_PREDEF_H 1
+ #define __ARM_FEATURE_FMA 1
+@@ -225,7 +225,7 @@
+ #define __INT_LEAST16_TYPE__ short int
+ #define __ARM_ARCH_PROFILE 65
+ #define __LDBL_EPSILON__ 1.92592994438723585305597794258492732e-34L
+-#define __UINTMAX_C(c) c ## UL
++#define __UINTMAX_C(c) c##UL
+ #define __GLIBCXX_BITSIZE_INT_N_0 128
+ #define __ARM_PCS_AAPCS64 1
+ #define __SIG_ATOMIC_MAX__ 0x7fffffff
+@@ -344,7 +344,7 @@
+ #define __FLT32X_MAX__ 1.79769313486231570814527423731704357e+308F32x
+ #define __cpp_runtime_arrays 198712
+ #define __UINT64_TYPE__ long unsigned int
+-#define __UINT32_C(c) c ## U
++#define __UINT32_C(c) c##U
+ #define __INTMAX_MAX__ 0x7fffffffffffffffL
+ #define __cpp_alias_templates 200704
+ #define __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__
+diff --git a/kysdk-qtwidgets/test/testWidget/build/moc_testwidget.cpp b/kysdk-qtwidgets/test/testWidget/build/moc_testwidget.cpp
+index 9264f0c..cadb32e 100644
+--- a/kysdk-qtwidgets/test/testWidget/build/moc_testwidget.cpp
++++ b/kysdk-qtwidgets/test/testWidget/build/moc_testwidget.cpp
+@@ -20,38 +20,37 @@
+ QT_BEGIN_MOC_NAMESPACE
+ QT_WARNING_PUSH
+ QT_WARNING_DISABLE_DEPRECATED
+-struct qt_meta_stringdata_TestWidget_t {
++struct qt_meta_stringdata_TestWidget_t
++{
+     QByteArrayData data[1];
+     char stringdata0[11];
+ };
+-#define QT_MOC_LITERAL(idx, ofs, len) \
+-    Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \
+-    qptrdiff(offsetof(qt_meta_stringdata_TestWidget_t, stringdata0) + ofs \
+-        - idx * sizeof(QByteArrayData)) \
+-    )
++#define QT_MOC_LITERAL(idx, ofs, len)                                                                                             \
++    Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len,                                                                  \
++                                                            qptrdiff(offsetof(qt_meta_stringdata_TestWidget_t, stringdata0) + ofs \
++                                                                     - idx * sizeof(QByteArrayData)))
+ static const qt_meta_stringdata_TestWidget_t qt_meta_stringdata_TestWidget = {
+     {
+-QT_MOC_LITERAL(0, 0, 10) // "TestWidget"
++        QT_MOC_LITERAL(0, 0, 10) // "TestWidget"
+ 
+     },
+-    "TestWidget"
+-};
++    "TestWidget"};
+ #undef QT_MOC_LITERAL
+ 
+ static const uint qt_meta_data_TestWidget[] = {
+ 
+- // content:
+-       8,       // revision
+-       0,       // classname
+-       0,    0, // classinfo
+-       0,    0, // methods
+-       0,    0, // properties
+-       0,    0, // enums/sets
+-       0,    0, // constructors
+-       0,       // flags
+-       0,       // signalCount
++    // content:
++    8, // revision
++    0, // classname
++    0, 0, // classinfo
++    0, 0, // methods
++    0, 0, // properties
++    0, 0, // enums/sets
++    0, 0, // constructors
++    0, // flags
++    0, // signalCount
+ 
+-       0        // eod
++    0 // eod
+ };
+ 
+ void TestWidget::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
+@@ -62,15 +61,12 @@ void TestWidget::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id,
+     Q_UNUSED(_a);
+ }
+ 
+-QT_INIT_METAOBJECT const QMetaObject TestWidget::staticMetaObject = { {
+-    &KWidget::staticMetaObject,
+-    qt_meta_stringdata_TestWidget.data,
+-    qt_meta_data_TestWidget,
+-    qt_static_metacall,
+-    nullptr,
+-    nullptr
+-} };
+-
++QT_INIT_METAOBJECT const QMetaObject TestWidget::staticMetaObject = {{&KWidget::staticMetaObject,
++                                                                      qt_meta_stringdata_TestWidget.data,
++                                                                      qt_meta_data_TestWidget,
++                                                                      qt_static_metacall,
++                                                                      nullptr,
++                                                                      nullptr}};
+ 
+ const QMetaObject *TestWidget::metaObject() const
+ {
+@@ -79,9 +75,10 @@ const QMetaObject *TestWidget::metaObject() const
+ 
+ void *TestWidget::qt_metacast(const char *_clname)
+ {
+-    if (!_clname) return nullptr;
++    if (!_clname)
++        return nullptr;
+     if (!strcmp(_clname, qt_meta_stringdata_TestWidget.stringdata0))
+-        return static_cast<void*>(this);
++        return static_cast<void *>(this);
+     return KWidget::qt_metacast(_clname);
+ }
+ 
+diff --git a/kysdk-qtwidgets/test/testWidget/main.cpp b/kysdk-qtwidgets/test/testWidget/main.cpp
+index 4517eb3..378b4d8 100644
+--- a/kysdk-qtwidgets/test/testWidget/main.cpp
++++ b/kysdk-qtwidgets/test/testWidget/main.cpp
+@@ -20,15 +20,15 @@
+  *
+  */
+ 
++#include "kdialog.h"
++#include "kprogressdialog.h"
++#include "kwidget.h"
++#include "kwidgetutils.h"
++#include "testwidget.h"
+ #include <QApplication>
++#include <QProgressDialog>
+ #include <QStyleFactory>
+ #include <QTranslator>
+-#include <QProgressDialog>
+-#include "testwidget.h"
+-#include "kwidget.h"
+-#include "kprogressdialog.h"
+-#include "kdialog.h"
+-#include "kwidgetutils.h"
+ 
+ using namespace kdk;
+ int main(int argc, char *argv[])
+@@ -37,17 +37,13 @@ int main(int argc, char *argv[])
+     QApplication a(argc, argv);
+     QTranslator trans;
+     QString locale = QLocale::system().name();
+-    if(locale == "zh_CN")
+-    {
+-        if(trans.load(":/translations/gui_zh_CN.qm"))
+-        {
++    if (locale == "zh_CN") {
++        if (trans.load(":/translations/gui_zh_CN.qm")) {
+             a.installTranslator(&trans);
+         }
+     }
+-    if(locale == "bo_CN")
+-    {
+-        if(trans.load(":/translations/gui_bo_CN.qm"))
+-        {
++    if (locale == "bo_CN") {
++        if (trans.load(":/translations/gui_bo_CN.qm")) {
+             a.installTranslator(&trans);
+         }
+     }
+diff --git a/kysdk-qtwidgets/test/testWidget/testwidget.cpp b/kysdk-qtwidgets/test/testWidget/testwidget.cpp
+index 8a0a598..b013be6 100644
+--- a/kysdk-qtwidgets/test/testWidget/testwidget.cpp
++++ b/kysdk-qtwidgets/test/testWidget/testwidget.cpp
+@@ -20,56 +20,56 @@
+  *
+  */
+ 
+-#include <QTableWidget>
+-#include <QInputDialog>
+-#include <QDialogButtonBox>
+-#include <QMessageBox>
+-#include <QCoreApplication>
++#include <QAction>
+ #include <QApplication>
++#include <QCheckBox>
++#include <QCoreApplication>
+ #include <QDesktopWidget>
+-#include <QAction>
+-#include <QStyleFactory>
++#include <QDialogButtonBox>
+ #include <QFileDialog>
++#include <QInputDialog>
++#include <QList>
++#include <QMenu>
++#include <QMessageBox>
++#include <QProgressBar>
++#include <QProgressDialog>
+ #include <QSizePolicy>
+-#include <QCheckBox>
+ #include <QSlider>
+ #include <QStringList>
+-#include <QProgressDialog>
+-#include <QMenu>
+-#include <QList>
+-#include <QProgressBar>
++#include <QStyleFactory>
++#include <QTableWidget>
+ #include <QTranslator>
+ 
+-#include "ksearchlineedit.h"
+-#include "kborderbutton.h"
+-#include "kswitchbutton.h"
+-#include "ksearchlineedit.h"
+ #include "kaboutdialog.h"
++#include "kbadge.h"
++#include "kballontip.h"
++#include "kborderbutton.h"
+ #include "kborderlessbutton.h"
+-#include "ktabbar.h"
+-#include "kwindowbuttonbar.h"
+-#include "xatom-helper.h"
+-#include "kuninstalldialog.h"
+-#include "kprogressdialog.h"
+ #include "kinputdialog.h"
+-#include "kslider.h"
+ #include "knavigationbar.h"
+-#include "testwidget.h"
+-#include "ktoolbutton.h"
+-#include "kballontip.h"
+-#include "ksecuritylevelbar.h"
+-#include "kbadge.h"
+-#include "kpixmapcontainer.h"
+ #include "kpasswordedit.h"
++#include "kpixmapcontainer.h"
+ #include "kprogressbar.h"
++#include "kprogressdialog.h"
++#include "ksearchlineedit.h"
++#include "ksecuritylevelbar.h"
++#include "kslider.h"
++#include "kswitchbutton.h"
++#include "ktabbar.h"
++#include "ktoolbutton.h"
++#include "kuninstalldialog.h"
++#include "kwindowbuttonbar.h"
++#include "testwidget.h"
++#include "xatom-helper.h"
+ 
+-TestWidget::TestWidget(QWidget*parent):KWidget(parent)
++TestWidget::TestWidget(QWidget *parent)
++    : KWidget(parent)
+ {
+-    setMinimumSize(640,800);
+-    this->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed);
+-    //窗体显示在中间
++    setMinimumSize(640, 800);
++    this->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
++    // 窗体显示在中间
+     QDesktopWidget *screenResolution = QApplication::desktop();
+-    this->move((screenResolution->width() - this->width())/2, (screenResolution->height() - this->height())/2);
++    this->move((screenResolution->width() - this->width()) / 2, (screenResolution->height() - this->height()) / 2);
+ 
+     this->setWindowTitle("testWindow");
+ 
+@@ -77,22 +77,21 @@ TestWidget::TestWidget(QWidget*parent):KWidget(parent)
+     pLeftBtn->setText("Left");
+ 
+     KSwitchButton *pSwitchBtn1 = new KSwitchButton(this);
+-    pSwitchBtn1->setFixedSize(100,26);
++    pSwitchBtn1->setFixedSize(100, 26);
+     pSwitchBtn1->setEnabled(false);
+     KSwitchButton *pSwitchBtn2 = new KSwitchButton(this);
+-    pSwitchBtn2->setFixedSize(100,26);
+-
++    pSwitchBtn2->setFixedSize(100, 26);
+ 
+     KBorderButton *pRightBtn = new KBorderButton(this);
+     pRightBtn->setText("Right");
+-    //pRightBtn->setEnabled(false);
++    // pRightBtn->setEnabled(false);
+ 
+-    QIcon icon =QIcon::fromTheme("edit-find-symbolic");
++    QIcon icon = QIcon::fromTheme("edit-find-symbolic");
+     pRightBtn->setIcon(icon);
+ 
+     KSearchLineEdit *pSearchBar = new KSearchLineEdit(this);
+-    //默认是带completer的,如果不需要 可以设置为空
+-    //pSearchBar->setCompleter(nullptr);
++    // 默认是带completer的,如果不需要 可以设置为空
++    // pSearchBar->setCompleter(nullptr);
+ 
+     QVBoxLayout *vLayout = new QVBoxLayout();
+ 
+@@ -104,9 +103,9 @@ TestWidget::TestWidget(QWidget*parent):KWidget(parent)
+     vLayout->addWidget(pSearchBar);
+ 
+     hLayout = new QHBoxLayout();
+-    KSlider *slider = new KSlider(Qt::Horizontal,this);
++    KSlider *slider = new KSlider(Qt::Horizontal, this);
+     slider->setSliderType(KSliderType::NodeSlider);
+-    slider->setRange(0,100);
++    slider->setRange(0, 100);
+     slider->setTickInterval(20);
+     slider->setValue(33);
+     slider->setTickPosition(QSlider::TicksBothSides);
+@@ -128,54 +127,54 @@ TestWidget::TestWidget(QWidget*parent):KWidget(parent)
+     borderlessButton1->setText("borderless1");
+ 
+     KProgressDialog *progress1 = new KProgressDialog(this);
+-    connect(borderlessButton1,&KBorderlessButton::clicked,progress1,&QProgressDialog::show);
++    connect(borderlessButton1, &KBorderlessButton::clicked, progress1, &QProgressDialog::show);
+     progress1->setValue(20);
+     progress1->setShowDetail(true);
+ 
+     KBorderlessButton *borderlessButton2 = new KBorderlessButton(this);
+     borderlessButton2->setText("borderless2");
+ 
+-    KProgressDialog *progress2 = new KProgressDialog(tr("下载"),tr("取消"),0,100,this);
++    KProgressDialog *progress2 = new KProgressDialog(tr("下载"), tr("取消"), 0, 100, this);
+     progress2->setSubContent("下载中...");
+     progress2->setSuffix("MB");
+     progress2->setWindowTitle("进度对话框");
+     progress2->setWindowIcon("kylin-music");
+     progress2->setValue(50);
+     progress2->setShowDetail(false);
+-    connect(borderlessButton2,&KBorderlessButton::clicked,progress2,&KProgressDialog::show);
++    connect(borderlessButton2, &KBorderlessButton::clicked, progress2, &KProgressDialog::show);
+ 
+     hLayout = new QHBoxLayout();
+     hLayout->addWidget(borderlessButton1);
+     hLayout->addWidget(borderlessButton2);
+     vLayout->addLayout(hLayout);
+ 
+-    KBorderlessButton *borderlessButton3 = new KBorderlessButton(QIcon::fromTheme("edit-find-symbolic"),this);
+-    KBorderlessButton *borderlessButton4 = new KBorderlessButton(QIcon::fromTheme("edit-find-symbolic"),"borderless4",this);
++    KBorderlessButton *borderlessButton3 = new KBorderlessButton(QIcon::fromTheme("edit-find-symbolic"), this);
++    KBorderlessButton *borderlessButton4 = new KBorderlessButton(QIcon::fromTheme("edit-find-symbolic"), "borderless4", this);
+ 
+     hLayout = new QHBoxLayout();
+     hLayout->addWidget(borderlessButton3);
+     hLayout->addWidget(borderlessButton4);
+     vLayout->addLayout(hLayout);
+ 
+-    KPixmapContainer* container = new KPixmapContainer(this);
+-//    QPixmap pixmap;
+-//    pixmap.load("/home/sunzhen/my.jpg");
+-//    pixmap = pixmap.scaled(36,36);
++    KPixmapContainer *container = new KPixmapContainer(this);
++    //    QPixmap pixmap;
++    //    pixmap.load("/home/sunzhen/my.jpg");
++    //    pixmap = pixmap.scaled(36,36);
+ 
+-//    container->setPixmap(pixmap);
+-    container->setPixmap(QIcon::fromTheme("edit-find-symbolic").pixmap(36,36));
++    //    container->setPixmap(pixmap);
++    container->setPixmap(QIcon::fromTheme("edit-find-symbolic").pixmap(36, 36));
+     container->setValue(1000);
+     hLayout = new QHBoxLayout();
+     hLayout->addWidget(container);
+     vLayout->addLayout(hLayout);
+ 
+-    KPasswordEdit* edit = new KPasswordEdit(this);
++    KPasswordEdit *edit = new KPasswordEdit(this);
+     edit->setFixedWidth(200);
+     edit->setText("adad");
+-    //edit->setLoading(true);
+-    //edit->setState(LoginState::LoginFailed);
++    // edit->setLoading(true);
++    // edit->setState(LoginState::LoginFailed);
+     edit->setClearButtonEnabled(true);
+-    KPasswordEdit* edit2 = new KPasswordEdit(this);
++    KPasswordEdit *edit2 = new KPasswordEdit(this);
+     edit2->setFixedWidth(200);
+     edit2->setText("12313");
+     edit2->setEnabled(false);
+@@ -185,8 +184,8 @@ TestWidget::TestWidget(QWidget*parent):KWidget(parent)
+     hLayout->addWidget(edit2);
+     vLayout->addLayout(hLayout);
+ 
+-    KProgressBar* progressbar = new KProgressBar(this);
+-    progressbar->setRange(0,100);
++    KProgressBar *progressbar = new KProgressBar(this);
++    progressbar->setRange(0, 100);
+     progressbar->setValue(100);
+     progressbar->setTextVisible(true);
+     progressbar->setAlignment(Qt::AlignRight);
+@@ -194,41 +193,41 @@ TestWidget::TestWidget(QWidget*parent):KWidget(parent)
+     hLayout->addWidget(progressbar);
+     vLayout->addLayout(hLayout);
+ 
+-//    KProgressBar* progressbar2 = new KProgressBar(this);
+-//    progressbar2->setOrientation(Qt::Vertical);
+-//    progressbar2->setValue(50);
+-//    progressbar2->setTextVisible(true);
+-//    progressbar2->setAlignment(Qt::AlignRight);
+-//    hLayout = new QHBoxLayout();
+-//    hLayout->addWidget(progressbar2);
+-//    vLayout->addLayout(hLayout);
++    //    KProgressBar* progressbar2 = new KProgressBar(this);
++    //    progressbar2->setOrientation(Qt::Vertical);
++    //    progressbar2->setValue(50);
++    //    progressbar2->setTextVisible(true);
++    //    progressbar2->setAlignment(Qt::AlignRight);
++    //    hLayout = new QHBoxLayout();
++    //    hLayout->addWidget(progressbar2);
++    //    vLayout->addLayout(hLayout);
+ 
+-    KBallonTip* ballonTip = new KBallonTip("这是一段操作信息描述的文字,这是一段操作信息描述的文字,这是一段操作信息描述的文字,这是一段操作信息描述的文字",TipType::Error,this);
++    KBallonTip *ballonTip = new KBallonTip("这是一段操作信息描述的文字,这是一段操作信息描述的文字,这是一段操作信息描述的文字,这是一段操作信息描述的文字", TipType::Error, this);
+     ballonTip->setFixedWidth(400);
+     hLayout = new QHBoxLayout();
+     hLayout->addWidget(ballonTip);
+     vLayout->addLayout(hLayout);
+-    //ballonTip->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed);
++    // ballonTip->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed);
+ 
+-    KSecurityLevelBar* barrrr = new KSecurityLevelBar(this);
++    KSecurityLevelBar *barrrr = new KSecurityLevelBar(this);
+     barrrr->setSecurityLevel(SecurityLevel::Medium);
+     hLayout = new QHBoxLayout();
+     hLayout->addWidget(barrrr);
+     vLayout->addLayout(hLayout);
+ 
+-    KBadge* badge1 = new KBadge(this);
++    KBadge *badge1 = new KBadge(this);
+     badge1->setValue(-9);
+-    //badge1->setFontSize(20);
+-    KBadge* badge2 = new KBadge(this);
++    // badge1->setFontSize(20);
++    KBadge *badge2 = new KBadge(this);
+     badge2->setValue(99);
+-    //badge2->setFontSize(10);
+-    KBadge* badge3 = new KBadge(this);
++    // badge2->setFontSize(10);
++    KBadge *badge3 = new KBadge(this);
+     badge3->setValue(999);
+-    //badge3->setMinimumHeight(50);
++    // badge3->setMinimumHeight(50);
+     badge3->setFontSize(15);
+-    KBadge* badge4 = new KBadge(this);
++    KBadge *badge4 = new KBadge(this);
+     badge4->setValue(9991);
+-//    badge4->setColor(QColor(255,0,0));
++    //    badge4->setColor(QColor(255,0,0));
+     hLayout = new QHBoxLayout();
+     hLayout->addWidget(badge1);
+     hLayout->addWidget(badge2);
+@@ -236,26 +235,26 @@ TestWidget::TestWidget(QWidget*parent):KWidget(parent)
+     hLayout->addWidget(badge4);
+     vLayout->addLayout(hLayout);
+ 
+-    KTabBar *tabBar1 = new KTabBar(KTabBarStyle::SegmentLight,this);
++    KTabBar *tabBar1 = new KTabBar(KTabBarStyle::SegmentLight, this);
+     tabBar1->addTab("first");
+     tabBar1->addTab("second");
+     tabBar1->addTab("third");
+ 
+-    KTabBar *tabBar2 = new KTabBar(KTabBarStyle::SegmentDark,this);
++    KTabBar *tabBar2 = new KTabBar(KTabBarStyle::SegmentDark, this);
+     tabBar2->addTab("first");
+     tabBar2->addTab("second");
+     tabBar2->addTab("third");
+ 
+-    KTabBar *tabBar3 = new KTabBar(KTabBarStyle::Sliding,this);
++    KTabBar *tabBar3 = new KTabBar(KTabBarStyle::Sliding, this);
+     tabBar3->addTab("first");
+     tabBar3->addTab("second");
+     tabBar3->addTab("third");
+ 
+-    KUninstallDialog *uninstallDialog = new KUninstallDialog("browser360-cn-stable","104",this);
+-    KAboutDialog *aboutDialog = new KAboutDialog(this,QIcon::fromTheme("edit-find-symbolic"),"麒麟引导修复工具",tr("Version:2020.1.0"));
++    KUninstallDialog *uninstallDialog = new KUninstallDialog("browser360-cn-stable", "104", this);
++    KAboutDialog *aboutDialog = new KAboutDialog(this, QIcon::fromTheme("edit-find-symbolic"), "麒麟引导修复工具", tr("Version:2020.1.0"));
+ 
+-    connect(pLeftBtn,&KBorderButton::clicked,uninstallDialog,&KUninstallDialog::show);
+-    connect(pRightBtn,&KBorderButton::clicked,aboutDialog,&KAboutDialog::show);
++    connect(pLeftBtn, &KBorderButton::clicked, uninstallDialog, &KUninstallDialog::show);
++    connect(pRightBtn, &KBorderButton::clicked, aboutDialog, &KAboutDialog::show);
+ 
+     vLayout->addWidget(tabBar1);
+     vLayout->addWidget(tabBar2);
+@@ -264,23 +263,23 @@ TestWidget::TestWidget(QWidget*parent):KWidget(parent)
+     baseBar()->setLayout(vLayout);
+ 
+     vLayout = new QVBoxLayout();
+-    KNavigationBar* bar = new KNavigationBar(this);
++    KNavigationBar *bar = new KNavigationBar(this);
+ 
+-    QStandardItem * item1 = new QStandardItem(QIcon::fromTheme("system-computer-symbolic"),tr("一级导航"));
+-    QStandardItem * item2 = new QStandardItem(QIcon::fromTheme("stock-people-symbolic"),tr("二级导航"));
++    QStandardItem *item1 = new QStandardItem(QIcon::fromTheme("system-computer-symbolic"), tr("一级导航"));
++    QStandardItem *item2 = new QStandardItem(QIcon::fromTheme("stock-people-symbolic"), tr("二级导航"));
+     QList<QStandardItem *> list;
+-    QStandardItem * item3 = new QStandardItem(QIcon::fromTheme("camera-switch-symbolic"),tr("一组一级导航"));
+-    QStandardItem * item4 = new QStandardItem(QIcon::fromTheme("media-eq-symbolic"),tr("一组一级导航"));
+-    list<<item3<<item4;
++    QStandardItem *item3 = new QStandardItem(QIcon::fromTheme("camera-switch-symbolic"), tr("一组一级导航"));
++    QStandardItem *item4 = new QStandardItem(QIcon::fromTheme("media-eq-symbolic"), tr("一组一级导航"));
++    list << item3 << item4;
+     bar->addItem(item1);
+     bar->addSubItem(item2);
+-    bar->addGroupItems(list,"测试一组");
+-    QStandardItem * item5 = new QStandardItem(QIcon::fromTheme("camera-switch-symbolic"),tr("二组一级导航"));
+-    QStandardItem * item6 = new QStandardItem(QIcon::fromTheme("media-eq-symbolic"),tr("二组一级导航"));
+-    QStandardItem * item7 = new QStandardItem(QIcon::fromTheme("media-eq-symbolic"),tr("二组二级导航"));
++    bar->addGroupItems(list, "测试一组");
++    QStandardItem *item5 = new QStandardItem(QIcon::fromTheme("camera-switch-symbolic"), tr("二组一级导航"));
++    QStandardItem *item6 = new QStandardItem(QIcon::fromTheme("media-eq-symbolic"), tr("二组一级导航"));
++    QStandardItem *item7 = new QStandardItem(QIcon::fromTheme("media-eq-symbolic"), tr("二组二级导航"));
+     QList<QStandardItem *> list2;
+-    list2<<item5<<item6;
+-    bar->addGroupItems(list2,"测试二组");
++    list2 << item5 << item6;
++    bar->addGroupItems(list2, "测试二组");
+     bar->addSubItem(item7);
+ 
+     vLayout->addWidget(bar);
+@@ -289,6 +288,4 @@ TestWidget::TestWidget(QWidget*parent):KWidget(parent)
+ }
+ TestWidget::~TestWidget()
+ {
+-
+ }
+-
+diff --git a/kysdk-qtwidgets/test/testWidget/testwidget.h b/kysdk-qtwidgets/test/testWidget/testwidget.h
+index d7666b4..0ae4a2b 100644
+--- a/kysdk-qtwidgets/test/testWidget/testwidget.h
++++ b/kysdk-qtwidgets/test/testWidget/testwidget.h
+@@ -27,14 +27,12 @@
+ #include <QSlider>
+ using namespace kdk;
+ 
+-
+-
+-class TestWidget:public KWidget
++class TestWidget : public KWidget
+ {
+     Q_OBJECT
+ 
+ public:
+-    TestWidget(QWidget* parent = nullptr);
++    TestWidget(QWidget *parent = nullptr);
+     ~TestWidget();
+     QSlider *slider;
+ };
+diff --git a/kysdk-qtwidgets/test/testarrowtabbar/widget.cpp b/kysdk-qtwidgets/test/testarrowtabbar/widget.cpp
+index ca16f32..ea052a1 100644
+--- a/kysdk-qtwidgets/test/testarrowtabbar/widget.cpp
++++ b/kysdk-qtwidgets/test/testarrowtabbar/widget.cpp
+@@ -12,9 +12,9 @@ Widget::Widget(QWidget *parent)
+     KArrowTabBar *tab1 = new KArrowTabBar();
+     KNativeTabbar *tabBar1 = tab1->tabbar();
+     tabBar1->setTabBarStyle(KNativeTabbarStyle::SegmentLight);
+-    tabBar1->addTab(QIcon::fromTheme("kylin-music"),"Segment1");
++    tabBar1->addTab(QIcon::fromTheme("kylin-music"), "Segment1");
+     tabBar1->addTab("Segment2");
+-    tabBar1->addTab(QIcon::fromTheme("kylin-music"),"");
++    tabBar1->addTab(QIcon::fromTheme("kylin-music"), "");
+     tabBar1->addTab("Segment4");
+     tabBar1->addTab("Segment5");
+     tabBar1->addTab("Segment6");
+@@ -25,19 +25,19 @@ Widget::Widget(QWidget *parent)
+ 
+     tabBar2->addTab("SegmentDark1");
+     tabBar2->addTab("SegmentDark2");
+-    tabBar2->addTab(QIcon::fromTheme("kylin-music"),"SegmentDark3");
++    tabBar2->addTab(QIcon::fromTheme("kylin-music"), "SegmentDark3");
+     tabBar2->addTab("SegmentDark4");
+     tabBar2->addTab("SegmentDark5");
+-    tabBar2->addTab(QIcon::fromTheme("kylin-music"),"");
++    tabBar2->addTab(QIcon::fromTheme("kylin-music"), "");
+     KArrowTabBar *tab3 = new KArrowTabBar();
+     KNativeTabbar *tabBar3 = tab3->tabbar();
+     tabBar3->setTabBarStyle(KNativeTabbarStyle::Sliding);
+-    tabBar3->addTab(QIcon::fromTheme("ukui-dialog-success"),"正常");
+-    tabBar3->addTab(QIcon::fromTheme("dialog-warning"),"错误");
+-    tabBar3->addTab(QIcon::fromTheme("dialog-info"),"注意");
+-    tabBar3->addTab(QIcon::fromTheme("kylin-music"),"Sliding4");
++    tabBar3->addTab(QIcon::fromTheme("ukui-dialog-success"), "正常");
++    tabBar3->addTab(QIcon::fromTheme("dialog-warning"), "错误");
++    tabBar3->addTab(QIcon::fromTheme("dialog-info"), "注意");
++    tabBar3->addTab(QIcon::fromTheme("kylin-music"), "Sliding4");
+     tabBar3->addTab("Sliding5");
+-    tabBar3->addTab(QIcon::fromTheme("kylin-music"),"Sliding6");
++    tabBar3->addTab(QIcon::fromTheme("kylin-music"), "Sliding6");
+ 
+     KArrowTabBar *tab4 = new KArrowTabBar();
+     KNativeTabbar *tabBar4 = tab4->tabbar();
+@@ -45,17 +45,16 @@ Widget::Widget(QWidget *parent)
+     tabBar4->addTab("Segment2");
+     tabBar4->addTab("Segment3");
+     tabBar4->addTab("Segment4");
+-    tabBar4->setTabBarStyle(KNativeTabbarStyle::SegmentDark);     //设置style
+-    tabBar4->setBorderRadius(10);       //设置圆角半径,只对SegmentDark,SegmentLight样式生效
+-    tabBar4->setBackgroundColor(QColor(0,255,0));   //设置背景色
+-
++    tabBar4->setTabBarStyle(KNativeTabbarStyle::SegmentDark); // 设置style
++    tabBar4->setBorderRadius(10); // 设置圆角半径,只对SegmentDark,SegmentLight样式生效
++    tabBar4->setBackgroundColor(QColor(0, 255, 0)); // 设置背景色
+ 
+     QHBoxLayout *hlayout = new QHBoxLayout();
+     QLabel *label = new QLabel();
+     label->setText("just a test label");
+     hlayout->addWidget(label);
+ 
+-    QVBoxLayout*vLayout = new QVBoxLayout(this);
++    QVBoxLayout *vLayout = new QVBoxLayout(this);
+     vLayout->addStretch();
+     vLayout->addWidget(tab1);
+     vLayout->addWidget(tab2);
+@@ -66,10 +65,8 @@ Widget::Widget(QWidget *parent)
+     vLayout->addLayout(hlayout);
+     vLayout->addStretch();
+     setFixedWidth(500);
+-
+ }
+ 
+ Widget::~Widget()
+ {
+ }
+-
+diff --git a/kysdk-qtwidgets/test/testbadge/main.cpp b/kysdk-qtwidgets/test/testbadge/main.cpp
+index 911aae3..01b18eb 100644
+--- a/kysdk-qtwidgets/test/testbadge/main.cpp
++++ b/kysdk-qtwidgets/test/testbadge/main.cpp
+@@ -1,5 +1,5 @@
+ /*
+- * 
++ *
+  *
+  * Copyright (C) 2023, KylinSoft Co., Ltd.
+  *
+@@ -20,8 +20,8 @@
+  *
+  */
+ 
+-#include "widget.h"
+ #include "kwidgetutils.h"
++#include "widget.h"
+ #include <QApplication>
+ #include <QTranslator>
+ 
+@@ -31,17 +31,13 @@ int main(int argc, char *argv[])
+     QApplication a(argc, argv);
+     QTranslator trans;
+     QString locale = QLocale::system().name();
+-    if(locale == "zh_CN")
+-    {
+-        if(trans.load(":/translations/gui_zh_CN.qm"))
+-        {
++    if (locale == "zh_CN") {
++        if (trans.load(":/translations/gui_zh_CN.qm")) {
+             a.installTranslator(&trans);
+         }
+     }
+-    if(locale == "bo_CN")
+-    {
+-        if(trans.load(":/translations/gui_bo_CN.qm"))
+-        {
++    if (locale == "bo_CN") {
++        if (trans.load(":/translations/gui_bo_CN.qm")) {
+             a.installTranslator(&trans);
+         }
+     }
+diff --git a/kysdk-qtwidgets/test/testbadge/widget.cpp b/kysdk-qtwidgets/test/testbadge/widget.cpp
+index 7b975a6..0d0a9fb 100644
+--- a/kysdk-qtwidgets/test/testbadge/widget.cpp
++++ b/kysdk-qtwidgets/test/testbadge/widget.cpp
+@@ -1,5 +1,5 @@
+ /*
+- * 
++ *
+  *
+  * Copyright (C) 2023, KylinSoft Co., Ltd.
+  *
+@@ -22,32 +22,32 @@
+ 
+ #include "widget.h"
+ #include <QBoxLayout>
+-#include <QSpinBox>
+ #include <QLabel>
++#include <QSpinBox>
+ 
+ Widget::Widget(QWidget *parent)
+     : KWidget(parent)
+ {
+-    QVBoxLayout* vLayout = new QVBoxLayout(this);
++    QVBoxLayout *vLayout = new QVBoxLayout(this);
+ 
+-    QHBoxLayout* hLayout = new QHBoxLayout();
++    QHBoxLayout *hLayout = new QHBoxLayout();
+     m_pContainer1 = new KPixmapContainer(this);
+-    m_pContainer1->setPixmap(QIcon::fromTheme("edit-find-symbolic").pixmap(16,16));
++    m_pContainer1->setPixmap(QIcon::fromTheme("edit-find-symbolic").pixmap(16, 16));
+     m_pContainer1->setFontSize(8);
+ 
+-    m_pContainer1->setColor(QColor(255,0,0)); //设置背景色
++    m_pContainer1->setColor(QColor(255, 0, 0)); // 设置背景色
+     m_pContainer2 = new KPixmapContainer(this);
+-    m_pContainer2->setPixmap(QIcon::fromTheme("edit-find-symbolic").pixmap(24,24));
++    m_pContainer2->setPixmap(QIcon::fromTheme("edit-find-symbolic").pixmap(24, 24));
+     m_pContainer2->setFontSize(10);
+-    m_pContainer2->setValue(99); //设置值
+-    m_pContainer2->setValueVisiable(false); //设置值不可见
++    m_pContainer2->setValue(99); // 设置值
++    m_pContainer2->setValueVisiable(false); // 设置值不可见
+     m_pContainer3 = new KPixmapContainer(this);
+-    m_pContainer3->setPixmap(QIcon::fromTheme("edit-find-symbolic").pixmap(36,36));
++    m_pContainer3->setPixmap(QIcon::fromTheme("edit-find-symbolic").pixmap(36, 36));
+     m_pContainer3->setFontSize(10);
+     m_pContainer3->setValue(999);
+     m_pContainer4 = new KPixmapContainer(this);
+-    m_pContainer4->setPixmap(QIcon::fromTheme("edit-find-symbolic").pixmap(48,48));
+-    m_pContainer4->setFontSize(12);  //设置字体大小
++    m_pContainer4->setPixmap(QIcon::fromTheme("edit-find-symbolic").pixmap(48, 48));
++    m_pContainer4->setFontSize(12); // 设置字体大小
+     m_pContainer4->setValue(1000);
+     hLayout->addWidget(m_pContainer1);
+     hLayout->addWidget(m_pContainer2);
+@@ -56,11 +56,13 @@ Widget::Widget(QWidget *parent)
+     vLayout->addStretch();
+     vLayout->addLayout(hLayout);
+ 
+-    QLabel*label = new QLabel("调整badge3大小:",this);
+-    QSpinBox*spinBox = new QSpinBox(this);
++    QLabel *label = new QLabel("调整badge3大小:", this);
++    QSpinBox *spinBox = new QSpinBox(this);
+     spinBox->setValue(m_pContainer3->fontSize());
+-    connect(spinBox,static_cast<void(QSpinBox::*)(int)>(&QSpinBox::valueChanged),this,
+-            [=](int i){m_pContainer3->setFontSize(spinBox->value());});
++    connect(spinBox, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged), this,
++            [=](int i) {
++        m_pContainer3->setFontSize(spinBox->value());
++    });
+     hLayout = new QHBoxLayout();
+     hLayout->addStretch();
+     hLayout->addWidget(label);
+@@ -71,7 +73,7 @@ Widget::Widget(QWidget *parent)
+     m_pBadge1->setValue(0);
+     m_pBadge2 = new KBadge(this);
+     m_pBadge2->setValue(99);
+-    //m_pBadge2->setValueVisiable(false);
++    // m_pBadge2->setValueVisiable(false);
+     m_pBadge3 = new KBadge(this);
+     m_pBadge3->setValue(999);
+     m_pBadge4 = new KBadge(this);
+@@ -89,4 +91,3 @@ Widget::Widget(QWidget *parent)
+ Widget::~Widget()
+ {
+ }
+-
+diff --git a/kysdk-qtwidgets/test/testbadge/widget.h b/kysdk-qtwidgets/test/testbadge/widget.h
+index c9d3081..c55c5fd 100644
+--- a/kysdk-qtwidgets/test/testbadge/widget.h
++++ b/kysdk-qtwidgets/test/testbadge/widget.h
+@@ -1,5 +1,5 @@
+ /*
+- * 
++ *
+  *
+  * Copyright (C) 2023, KylinSoft Co., Ltd.
+  *
+@@ -23,9 +23,9 @@
+ #ifndef WIDGET_H
+ #define WIDGET_H
+ 
+-#include "kwidget.h"
+ #include "kbadge.h"
+ #include "kpixmapcontainer.h"
++#include "kwidget.h"
+ 
+ using namespace kdk;
+ 
+diff --git a/kysdk-qtwidgets/test/testballontip/main.cpp b/kysdk-qtwidgets/test/testballontip/main.cpp
+index 911aae3..01b18eb 100644
+--- a/kysdk-qtwidgets/test/testballontip/main.cpp
++++ b/kysdk-qtwidgets/test/testballontip/main.cpp
+@@ -1,5 +1,5 @@
+ /*
+- * 
++ *
+  *
+  * Copyright (C) 2023, KylinSoft Co., Ltd.
+  *
+@@ -20,8 +20,8 @@
+  *
+  */
+ 
+-#include "widget.h"
+ #include "kwidgetutils.h"
++#include "widget.h"
+ #include <QApplication>
+ #include <QTranslator>
+ 
+@@ -31,17 +31,13 @@ int main(int argc, char *argv[])
+     QApplication a(argc, argv);
+     QTranslator trans;
+     QString locale = QLocale::system().name();
+-    if(locale == "zh_CN")
+-    {
+-        if(trans.load(":/translations/gui_zh_CN.qm"))
+-        {
++    if (locale == "zh_CN") {
++        if (trans.load(":/translations/gui_zh_CN.qm")) {
+             a.installTranslator(&trans);
+         }
+     }
+-    if(locale == "bo_CN")
+-    {
+-        if(trans.load(":/translations/gui_bo_CN.qm"))
+-        {
++    if (locale == "bo_CN") {
++        if (trans.load(":/translations/gui_bo_CN.qm")) {
+             a.installTranslator(&trans);
+         }
+     }
+diff --git a/kysdk-qtwidgets/test/testballontip/widget.cpp b/kysdk-qtwidgets/test/testballontip/widget.cpp
+index 7666277..dde059c 100644
+--- a/kysdk-qtwidgets/test/testballontip/widget.cpp
++++ b/kysdk-qtwidgets/test/testballontip/widget.cpp
+@@ -1,5 +1,5 @@
+ /*
+- * 
++ *
+  *
+  * Copyright (C) 2023, KylinSoft Co., Ltd.
+  *
+@@ -27,17 +27,17 @@
+ Widget::Widget(QWidget *parent)
+     : KWidget(parent)
+ {
+-    QVBoxLayout* vLayout = new QVBoxLayout();
++    QVBoxLayout *vLayout = new QVBoxLayout();
+ 
+-    QPushButton* button  = new QPushButton(this);
++    QPushButton *button = new QPushButton(this);
+     button->setText("NothingTip");
+-    QPushButton* button1  = new QPushButton(this);
++    QPushButton *button1 = new QPushButton(this);
+     button1->setText("NormalTip");
+-    QPushButton* button2  = new QPushButton(this);
++    QPushButton *button2 = new QPushButton(this);
+     button2->setText("InfoTip");
+-    QPushButton* button3  = new QPushButton(this);
++    QPushButton *button3 = new QPushButton(this);
+     button3->setText("WarningTip");
+-    QPushButton* button4  = new QPushButton(this);
++    QPushButton *button4 = new QPushButton(this);
+     button4->setText("ErrorTip");
+     vLayout->addWidget(button);
+     vLayout->addWidget(button1);
+@@ -49,19 +49,19 @@ Widget::Widget(QWidget *parent)
+     m_pNothingTip = new KBallonTip();
+     m_pNothingTip->setWindowFlag(Qt::FramelessWindowHint);
+     m_pNothingTip->setAttribute(Qt::WA_TranslucentBackground);
+-    m_pNothingTip->setTipType(TipType::Nothing);  //设置KBallonTip类型
+-    m_pNothingTip->setText("这是一段操作信息描述的文字,这是一段操作信息描述的文字,这是一段操作信息描述的文字,这是一段操作信息描述的文字");  // 设置文本内容
++    m_pNothingTip->setTipType(TipType::Nothing); // 设置KBallonTip类型
++    m_pNothingTip->setText("这是一段操作信息描述的文字,这是一段操作信息描述的文字,这是一段操作信息描述的文字,这是一段操作信息描述的文字"); // 设置文本内容
+ 
+     m_pNormalTip = new KBallonTip();
+     m_pNormalTip->setWindowFlag(Qt::FramelessWindowHint);
+     m_pNormalTip->setAttribute(Qt::WA_TranslucentBackground);
+     m_pNormalTip->setTipType(TipType::Normal);
+     m_pNormalTip->setText("setContentsMargins调整边距");
+-    //两种setmargins都支持
+-    //m_pWarningTip->setContentsMargins(QMargins(0,0,0,0));
+-    m_pNormalTip->setContentsMargins(20,20,20,20);  //设置内容边距
++    // 两种setmargins都支持
++    // m_pWarningTip->setContentsMargins(QMargins(0,0,0,0));
++    m_pNormalTip->setContentsMargins(20, 20, 20, 20); // 设置内容边距
+ 
+-    m_pInfoTip = new KBallonTip("提供两种构造函数",TipType::Info);
++    m_pInfoTip = new KBallonTip("提供两种构造函数", TipType::Info);
+     m_pInfoTip->setWindowFlag(Qt::FramelessWindowHint);
+     m_pInfoTip->setAttribute(Qt::WA_TranslucentBackground);
+ 
+@@ -71,45 +71,44 @@ Widget::Widget(QWidget *parent)
+     m_pWarningTip->setTipType(TipType::Warning);
+     m_pWarningTip->setText("这是一段操作信息描述的文字,这是一段操作信息描述的文字,这是一段操作信息描述的文字,这是一段操作信息描述的文字");
+ 
+-    QMargins marge(20,20,20,20);
++    QMargins marge(20, 20, 20, 20);
+     m_pErrorTip = new KBallonTip();
+     m_pErrorTip->setWindowFlag(Qt::FramelessWindowHint);
+     m_pErrorTip->setAttribute(Qt::WA_TranslucentBackground);
+     m_pErrorTip->setTipType(TipType::Error);
+-    m_pErrorTip->setContentsMargins(marge);  //通过 QMargins 设置内容边距
++    m_pErrorTip->setContentsMargins(marge); // 通过 QMargins 设置内容边距
+     m_pErrorTip->setText("这是一段操作信息描述的文字,这是一段操作信息描述的文字,这是一段操作信息描述的文字,这是一段操作信息描述的文字");
+ 
+-    connect(button,&QPushButton::clicked,this,[=](){
+-        m_pNothingTip->setTipTime(4000);  //设置显示时间
+-        m_pNothingTip->showInfo();  //定时显示KBallonTip,随后隐退   默认为1s
++    connect(button, &QPushButton::clicked, this, [=]() {
++        m_pNothingTip->setTipTime(4000); // 设置显示时间
++        m_pNothingTip->showInfo(); // 定时显示KBallonTip,随后隐退   默认为1s
+     });
+ 
+-    connect(button1,&QPushButton::clicked,this,[=](){
++    connect(button1, &QPushButton::clicked, this, [=]() {
+         m_pNormalTip->setTipTime(3000);
+         m_pNormalTip->showInfo();
+     });
+ 
+-    connect(button2,&QPushButton::clicked,this,[=](){
++    connect(button2, &QPushButton::clicked, this, [=]() {
+         m_pInfoTip->setTipTime(2000);
+         m_pInfoTip->showInfo();
+     });
+ 
+-    connect(button3,&QPushButton::clicked,this,[=](){
++    connect(button3, &QPushButton::clicked, this, [=]() {
+         m_pWarningTip->setTipTime(1000);
+         m_pWarningTip->showInfo();
+     });
+-    connect(button4,&QPushButton::clicked,this,[=](){
++    connect(button4, &QPushButton::clicked, this, [=]() {
+         m_pErrorTip->showInfo();
+     });
+-//    //vLayout->addWidget(m_pNothingTip);
+-//    vLayout->addWidget(m_pNormalTip);
+-//    vLayout->addWidget(m_pInfoTip);
+-//    vLayout->addWidget(m_pWarningTip);
+-//    vLayout->addWidget(m_pErrorTip);
++    //    //vLayout->addWidget(m_pNothingTip);
++    //    vLayout->addWidget(m_pNormalTip);
++    //    vLayout->addWidget(m_pInfoTip);
++    //    vLayout->addWidget(m_pWarningTip);
++    //    vLayout->addWidget(m_pErrorTip);
+     this->baseBar()->setLayout(vLayout);
+ }
+ 
+ Widget::~Widget()
+ {
+ }
+-
+diff --git a/kysdk-qtwidgets/test/testballontip/widget.h b/kysdk-qtwidgets/test/testballontip/widget.h
+index 04a88a0..d3d982c 100644
+--- a/kysdk-qtwidgets/test/testballontip/widget.h
++++ b/kysdk-qtwidgets/test/testballontip/widget.h
+@@ -1,5 +1,5 @@
+ /*
+- * 
++ *
+  *
+  * Copyright (C) 2023, KylinSoft Co., Ltd.
+  *
+@@ -23,9 +23,9 @@
+ #ifndef WIDGET_H
+ #define WIDGET_H
+ 
+-#include <QWidget>
+-#include "kwidget.h"
+ #include "kballontip.h"
++#include "kwidget.h"
++#include <QWidget>
+ 
+ using namespace kdk;
+ 
+@@ -38,15 +38,15 @@ public:
+     ~Widget();
+ 
+ private:
+-    //Nothing
+-    KBallonTip* m_pNothingTip;
+-    //Normal
+-    KBallonTip* m_pNormalTip;
+-    //Info
+-    KBallonTip* m_pInfoTip;
+-    //Warning
+-    KBallonTip* m_pWarningTip;
+-    //Error
+-    KBallonTip* m_pErrorTip;
++    // Nothing
++    KBallonTip *m_pNothingTip;
++    // Normal
++    KBallonTip *m_pNormalTip;
++    // Info
++    KBallonTip *m_pInfoTip;
++    // Warning
++    KBallonTip *m_pWarningTip;
++    // Error
++    KBallonTip *m_pErrorTip;
+ };
+ #endif // WIDGET_H
+diff --git a/kysdk-qtwidgets/test/testbreadcrumb/main.cpp b/kysdk-qtwidgets/test/testbreadcrumb/main.cpp
+index 911aae3..01b18eb 100644
+--- a/kysdk-qtwidgets/test/testbreadcrumb/main.cpp
++++ b/kysdk-qtwidgets/test/testbreadcrumb/main.cpp
+@@ -1,5 +1,5 @@
+ /*
+- * 
++ *
+  *
+  * Copyright (C) 2023, KylinSoft Co., Ltd.
+  *
+@@ -20,8 +20,8 @@
+  *
+  */
+ 
+-#include "widget.h"
+ #include "kwidgetutils.h"
++#include "widget.h"
+ #include <QApplication>
+ #include <QTranslator>
+ 
+@@ -31,17 +31,13 @@ int main(int argc, char *argv[])
+     QApplication a(argc, argv);
+     QTranslator trans;
+     QString locale = QLocale::system().name();
+-    if(locale == "zh_CN")
+-    {
+-        if(trans.load(":/translations/gui_zh_CN.qm"))
+-        {
++    if (locale == "zh_CN") {
++        if (trans.load(":/translations/gui_zh_CN.qm")) {
+             a.installTranslator(&trans);
+         }
+     }
+-    if(locale == "bo_CN")
+-    {
+-        if(trans.load(":/translations/gui_bo_CN.qm"))
+-        {
++    if (locale == "bo_CN") {
++        if (trans.load(":/translations/gui_bo_CN.qm")) {
+             a.installTranslator(&trans);
+         }
+     }
+diff --git a/kysdk-qtwidgets/test/testbreadcrumb/widget.cpp b/kysdk-qtwidgets/test/testbreadcrumb/widget.cpp
+index 935137c..ad89e60 100644
+--- a/kysdk-qtwidgets/test/testbreadcrumb/widget.cpp
++++ b/kysdk-qtwidgets/test/testbreadcrumb/widget.cpp
+@@ -1,5 +1,5 @@
+ /*
+- * 
++ *
+  *
+  * Copyright (C) 2023, KylinSoft Co., Ltd.
+  *
+@@ -26,26 +26,26 @@
+ Widget::Widget(QWidget *parent)
+     : KWidget(parent)
+ {
+-    QVBoxLayout* mainLayout = new QVBoxLayout;
+-    QHBoxLayout* hLayout = new QHBoxLayout;
+-    KBreadCrumb*crumb = new KBreadCrumb(this);
+-    //默认是true
++    QVBoxLayout *mainLayout = new QVBoxLayout;
++    QHBoxLayout *hLayout = new QHBoxLayout;
++    KBreadCrumb *crumb = new KBreadCrumb(this);
++    // 默认是true
+     crumb->setFlat(true);
+-    crumb->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed);
++    crumb->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
+     crumb->addTab("页面目录一");
+     crumb->addTab("页面目录二");
+     crumb->addTab("页面目录三");
+     crumb->addTab("短的");
+     crumb->addTab("长的长的长的长的长的长的");
+-    crumb->setIcon(QIcon::fromTheme("dialog-info"));  //设置KBreadCrumb的图标
++    crumb->setIcon(QIcon::fromTheme("dialog-info")); // 设置KBreadCrumb的图标
+     hLayout->addWidget(crumb);
+     mainLayout->addLayout(hLayout);
+ 
+     hLayout = new QHBoxLayout;
+-    KBreadCrumb*crumb2 = new KBreadCrumb(this);
+-    //默认是true
+-    crumb->setFlat(false);  //设置KBreadCrumb是否为flat类型
+-    crumb2->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed);
++    KBreadCrumb *crumb2 = new KBreadCrumb(this);
++    // 默认是true
++    crumb->setFlat(false); // 设置KBreadCrumb是否为flat类型
++    crumb2->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
+     crumb2->addTab("页面目录一");
+     crumb2->addTab("页面目录二");
+     crumb2->addTab("页面目录三");
+@@ -60,4 +60,3 @@ Widget::Widget(QWidget *parent)
+ Widget::~Widget()
+ {
+ }
+-
+diff --git a/kysdk-qtwidgets/test/testbreadcrumb/widget.h b/kysdk-qtwidgets/test/testbreadcrumb/widget.h
+index 57b49bf..66a5404 100644
+--- a/kysdk-qtwidgets/test/testbreadcrumb/widget.h
++++ b/kysdk-qtwidgets/test/testbreadcrumb/widget.h
+@@ -1,5 +1,5 @@
+ /*
+- * 
++ *
+  *
+  * Copyright (C) 2023, KylinSoft Co., Ltd.
+  *
+@@ -23,9 +23,9 @@
+ #ifndef WIDGET_H
+ #define WIDGET_H
+ 
+-#include <QWidget>
+-#include "kwidget.h"
+ #include "kbreadcrumb.h"
++#include "kwidget.h"
++#include <QWidget>
+ 
+ using namespace kdk;
+ class Widget : public KWidget
+diff --git a/kysdk-qtwidgets/test/testclocktimer/widget.cpp b/kysdk-qtwidgets/test/testclocktimer/widget.cpp
+index 72bf84e..8dec054 100644
+--- a/kysdk-qtwidgets/test/testclocktimer/widget.cpp
++++ b/kysdk-qtwidgets/test/testclocktimer/widget.cpp
+@@ -1,8 +1,8 @@
+ #include "widget.h"
+ #include "kclocktimer.h"
+-#include <QPushButton>
+ #include <QBoxLayout>
+ #include <QDebug>
++#include <QPushButton>
+ 
+ using namespace kdk;
+ 
+@@ -12,7 +12,6 @@ Widget::Widget(QWidget *parent)
+     QVBoxLayout *vlayout = new QVBoxLayout(this);
+     KClockTimer *clock = new KClockTimer(this);
+ 
+-
+     QHBoxLayout *hlayout = new QHBoxLayout();
+     QPushButton *btn1 = new QPushButton("开始");
+     QPushButton *btn2 = new QPushButton("停止");
+@@ -34,28 +33,26 @@ Widget::Widget(QWidget *parent)
+     hlayout->addWidget(btn5);
+     vlayout->addLayout(hlayout);
+ 
+-    connect(btn1,&QPushButton::clicked,clock,&KClockTimer::startStopwatch);
+-    connect(btn2,&QPushButton::clicked,clock,&KClockTimer::stopStopwatch);
+-    connect(btn3,&QPushButton::clicked,clock,&KClockTimer::resetStopwatch);
+-    connect(btn4,&QPushButton::clicked,clock,&KClockTimer::startStopwatch);
+-    connect(btn5,&QPushButton::clicked,this,[=]{
+-        qDebug()<<clock->time();
++    connect(btn1, &QPushButton::clicked, clock, &KClockTimer::startStopwatch);
++    connect(btn2, &QPushButton::clicked, clock, &KClockTimer::stopStopwatch);
++    connect(btn3, &QPushButton::clicked, clock, &KClockTimer::resetStopwatch);
++    connect(btn4, &QPushButton::clicked, clock, &KClockTimer::startStopwatch);
++    connect(btn5, &QPushButton::clicked, this, [=] {
++        qDebug() << clock->time();
+     });
+ 
++    //    qint64 otherMilliseconds = stringToMilliseconds(otherTimeString); // 转换为毫秒数
+ 
+-//    qint64 otherMilliseconds = stringToMilliseconds(otherTimeString); // 转换为毫秒数
++    //    // 比较两个时间
++    //    if (compareMilliseconds(currentMilliseconds, otherMilliseconds)) {
++    //        // currentMilliseconds小于otherMilliseconds
++    //    } else {
++    //        // currentMilliseconds大于或等于otherMilliseconds
++    //    }
+ 
+-//    // 比较两个时间
+-//    if (compareMilliseconds(currentMilliseconds, otherMilliseconds)) {
+-//        // currentMilliseconds小于otherMilliseconds
+-//    } else {
+-//        // currentMilliseconds大于或等于otherMilliseconds
+-//    }
+-
+-//    setFixedSize(300,200);
++    //    setFixedSize(300,200);
+ }
+ 
+ Widget::~Widget()
+ {
+ }
+-
+diff --git a/kysdk-qtwidgets/test/testcolorbutton/widget.cpp b/kysdk-qtwidgets/test/testcolorbutton/widget.cpp
+index 310f89d..eaf7ce9 100644
+--- a/kysdk-qtwidgets/test/testcolorbutton/widget.cpp
++++ b/kysdk-qtwidgets/test/testcolorbutton/widget.cpp
+@@ -22,41 +22,41 @@
+ 
+ #include "widget.h"
+ #include "kcolorbutton.h"
+-#include <QHBoxLayout>
+-#include <QDebug>
+ #include <QButtonGroup>
++#include <QDebug>
++#include <QHBoxLayout>
+ 
+ using namespace kdk;
+ 
+ Widget::Widget(QWidget *parent)
+     : QWidget(parent)
+ {
+-    QVBoxLayout* vlayout = new QVBoxLayout(this);
++    QVBoxLayout *vlayout = new QVBoxLayout(this);
+ 
+-    QHBoxLayout* hlayout = new QHBoxLayout();
+-    QHBoxLayout* hlayout1 = new QHBoxLayout();
++    QHBoxLayout *hlayout = new QHBoxLayout();
++    QHBoxLayout *hlayout1 = new QHBoxLayout();
+ 
+-    KColorButton* btn1 = new KColorButton();
+-    KColorButton* btn2 = new KColorButton();
++    KColorButton *btn1 = new KColorButton();
++    KColorButton *btn2 = new KColorButton();
+     btn2->setBackgroundColor(Qt::cyan);
+-    KColorButton* btn3 = new KColorButton();
++    KColorButton *btn3 = new KColorButton();
+     btn3->setBackgroundColor(Qt::darkYellow);
+-    KColorButton* btn4 = new KColorButton();
++    KColorButton *btn4 = new KColorButton();
+     btn4->setBackgroundColor(Qt::red);
+-    KColorButton* btn5 = new KColorButton();
++    KColorButton *btn5 = new KColorButton();
+     btn5->setBackgroundColor(Qt::gray);
+     btn5->setButtonType(KColorButton::CheckedRect);
+-    KColorButton* btn6 = new KColorButton();
++    KColorButton *btn6 = new KColorButton();
+     btn6->setBackgroundColor(Qt::green);
+     btn6->setButtonType(KColorButton::CheckedRect);
+-    KColorButton* btn7 = new KColorButton();
++    KColorButton *btn7 = new KColorButton();
+     btn7->setBackgroundColor(Qt::darkCyan);
+     btn7->setButtonType(KColorButton::CheckedRect);
+-    KColorButton* btn8 = new KColorButton();
++    KColorButton *btn8 = new KColorButton();
+     btn8->setBackgroundColor(Qt::darkRed);
+     btn8->setButtonType(KColorButton::CheckedRect);
+ 
+-    QButtonGroup* group = new QButtonGroup(this);
++    QButtonGroup *group = new QButtonGroup(this);
+     group->addButton(btn1);
+     group->addButton(btn2);
+     group->addButton(btn3);
+@@ -65,9 +65,9 @@ Widget::Widget(QWidget *parent)
+     group->addButton(btn6);
+     group->addButton(btn7);
+     group->addButton(btn8);
+-    group->setExclusive(false); //方形按钮是否可以多选  false为可以多选
++    group->setExclusive(false); // 方形按钮是否可以多选  false为可以多选
+ 
+-    //方形第一行
++    // 方形第一行
+     hlayout->addStretch();
+     hlayout->setSpacing(10);
+     hlayout->addWidget(btn1);
+@@ -76,7 +76,7 @@ Widget::Widget(QWidget *parent)
+     hlayout->addWidget(btn4);
+     hlayout->addStretch();
+ 
+-    //方形第二行
++    // 方形第二行
+     hlayout1->addStretch();
+     hlayout1->setSpacing(10);
+     hlayout1->addWidget(btn5);
+@@ -85,28 +85,28 @@ Widget::Widget(QWidget *parent)
+     hlayout1->addWidget(btn8);
+     hlayout1->addStretch();
+ 
+-    //圆形
+-    KColorButton* btn9 = new KColorButton();
++    // 圆形
++    KColorButton *btn9 = new KColorButton();
+     btn9->setBackgroundColor(Qt::gray);
+     btn9->setButtonType(KColorButton::Circle);
+-    KColorButton* btn10 = new KColorButton();
++    KColorButton *btn10 = new KColorButton();
+     btn10->setBackgroundColor(Qt::green);
+     btn10->setButtonType(KColorButton::Circle);
+-    KColorButton* btn11 = new KColorButton();
++    KColorButton *btn11 = new KColorButton();
+     btn11->setBackgroundColor(Qt::darkCyan);
+     btn11->setButtonType(KColorButton::Circle);
+-    KColorButton* btn12 = new KColorButton();
++    KColorButton *btn12 = new KColorButton();
+     btn12->setBackgroundColor(Qt::darkRed);
+     btn12->setButtonType(KColorButton::Circle);
+ 
+-    QButtonGroup* group1 = new QButtonGroup(this);
++    QButtonGroup *group1 = new QButtonGroup(this);
+     group1->addButton(btn9);
+     group1->addButton(btn10);
+     group1->addButton(btn11);
+     group1->addButton(btn12);
+-    group1->setExclusive(false); //圆形形按钮是否可以多选  false为可以多选
++    group1->setExclusive(false); // 圆形形按钮是否可以多选  false为可以多选
+ 
+-    QHBoxLayout* hlayout2 = new QHBoxLayout();
++    QHBoxLayout *hlayout2 = new QHBoxLayout();
+     hlayout2->addStretch();
+     hlayout2->addWidget(btn9);
+     hlayout2->addWidget(btn10);
+@@ -117,12 +117,10 @@ Widget::Widget(QWidget *parent)
+     vlayout->addLayout(hlayout);
+     vlayout->addLayout(hlayout1);
+     vlayout->addLayout(hlayout2);
+-//    vlayout->setSizeConstraint(QLayout::SizeConstraint::SetFixedSize);
+-    this->setFixedSize(300,240);
+-
++    //    vlayout->setSizeConstraint(QLayout::SizeConstraint::SetFixedSize);
++    this->setFixedSize(300, 240);
+ }
+ 
+ Widget::~Widget()
+ {
+ }
+-
+diff --git a/kysdk-qtwidgets/test/testcomboboxwidget/widget.cpp b/kysdk-qtwidgets/test/testcomboboxwidget/widget.cpp
+index 192d085..2e208e8 100644
+--- a/kysdk-qtwidgets/test/testcomboboxwidget/widget.cpp
++++ b/kysdk-qtwidgets/test/testcomboboxwidget/widget.cpp
+@@ -1,16 +1,16 @@
+ #include "widget.h"
+ #include "kcomboboxwidget.h"
+ #include <QDebug>
++#include <QGSettings/QGSettings>
+ #include <QMenu>
+ #include <QPushButton>
+-#include <QGSettings/QGSettings>
+ 
+ using namespace kdk;
+ Widget::Widget(QWidget *parent)
+     : QWidget(parent)
+ {
+-    KComboBoxWidget* widget = new KComboBoxWidget(this);
+-//    widget->setLabelWeekSelect("111");
++    KComboBoxWidget *widget = new KComboBoxWidget(this);
++    //    widget->setLabelWeekSelect("111");
+ 
+     QStringList list;
+     list.append("111");
+@@ -24,8 +24,8 @@ Widget::Widget(QWidget *parent)
+     widget->setStringList(list);
+     widget->setMainText("abnfaowifoawf");
+     widget->menu()->setFixedWidth(200);
+-    connect(widget, &KComboBoxWidget::comBoxWidgetClicked, this, [=]{
+-        qDebug()<<"xxx"<<widget->getChosenList()<<widget->width()<<widget->menu()->size();
++    connect(widget, &KComboBoxWidget::comBoxWidgetClicked, this, [=] {
++        qDebug() << "xxx" << widget->getChosenList() << widget->width() << widget->menu()->size();
+     });
+ 
+     QPushButton *btn = new QPushButton(this);
+@@ -36,12 +36,11 @@ Widget::Widget(QWidget *parent)
+     menu->addAction("4");
+     menu->show();
+ 
+-    btn->move(0,200);
++    btn->move(0, 200);
+     btn->setMenu(menu);
+-    setFixedSize(600,500);
++    setFixedSize(600, 500);
+ }
+ 
+ Widget::~Widget()
+ {
+ }
+-
+diff --git a/kysdk-qtwidgets/test/testcrumb/main.cpp b/kysdk-qtwidgets/test/testcrumb/main.cpp
+index a286303..24bb62c 100644
+--- a/kysdk-qtwidgets/test/testcrumb/main.cpp
++++ b/kysdk-qtwidgets/test/testcrumb/main.cpp
+@@ -1,10 +1,9 @@
+ #include "widget.h"
++#include <QApplication>
++#include <QDebug>
+ #include <QLibraryInfo>
+ #include <QMessageBox>
+-#include <QLibraryInfo>
+ #include <QTranslator>
+-#include <QApplication>
+-#include <QDebug>
+ 
+ int main(int argc, char *argv[])
+ {
+@@ -12,9 +11,9 @@ int main(int argc, char *argv[])
+     QString qtTransPath = QLibraryInfo::location(QLibraryInfo::TranslationsPath);
+ 
+     QTranslator *trans_qt = new QTranslator();
+-    qDebug()<<qtTransPath;
++    qDebug() << qtTransPath;
+     if (trans_qt->load(QLocale(), "qt", "_", qtTransPath))
+-       qApp->installTranslator(trans_qt);
++        qApp->installTranslator(trans_qt);
+     Widget w;
+     w.show();
+     return a.exec();
+diff --git a/kysdk-qtwidgets/test/testcrumb/widget.cpp b/kysdk-qtwidgets/test/testcrumb/widget.cpp
+index ebd106f..78e6d8d 100644
+--- a/kysdk-qtwidgets/test/testcrumb/widget.cpp
++++ b/kysdk-qtwidgets/test/testcrumb/widget.cpp
+@@ -1,103 +1,102 @@
+ #include "widget.h"
+-#include "kcrumb.h"
+ #include "kborderlessbutton.h"
++#include "kcrumb.h"
+ #include <QBoxLayout>
+-#include <QTabBar>
+ #include <QMessageBox>
++#include <QTabBar>
+ 
+ using namespace kdk;
+ Widget::Widget(QWidget *parent)
+     : QWidget(parent)
+ {
+-    QVBoxLayout* mainLayout = new QVBoxLayout;
+-    QHBoxLayout* hLayout = new QHBoxLayout;
+-    KCrumb*crumb = new KCrumb(this);
+-//    QTabBar*crumb = new QTabBar(this);
++    QVBoxLayout *mainLayout = new QVBoxLayout;
++    QHBoxLayout *hLayout = new QHBoxLayout;
++    KCrumb *crumb = new KCrumb(this);
++    //    QTabBar*crumb = new QTabBar(this);
+     crumb->setUsesScrollButtons(false);
+-    //默认是true
++    // 默认是true
+     crumb->setFlat(false);
+-    crumb->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed);
++    crumb->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
+     crumb->addTab("页面目录一,页面目录一");
+     crumb->addTab("页面目录二,页面目录二");
+     crumb->addTab("页面目录三,页面目录三");
+     crumb->addTab("页面目录四,页面目录四");
+     crumb->addTab("页面目录五,页面目录五");
+-//    crumb->setFixedWidth(1200);
+-//    crumb->setIcon(QIcon::fromTheme("dialog-info"));  //设置KBreadCrumb的图标
+-    crumb->setUsesScrollButtons(false);;
+-//    crumb->addTab("长的长的长的长的长的长的");
+-//    crumb->addTab("长的长的长的长的长的长的");
++    //    crumb->setFixedWidth(1200);
++    //    crumb->setIcon(QIcon::fromTheme("dialog-info"));  //设置KBreadCrumb的图标
++    crumb->setUsesScrollButtons(false);
++    ;
++    //    crumb->addTab("长的长的长的长的长的长的");
++    //    crumb->addTab("长的长的长的长的长的长的");
+ 
+-//    crumb->setIcon(QIcon::fromTheme("dialog-info"));  //设置KBreadCrumb的图标
+-//    KBorderlessButton *btn1 = new KBorderlessButton();
+-//    KBorderlessButton *btn2 = new KBorderlessButton();
+-//    btn1->setIcon(QIcon::fromTheme("go-previous.symbolic"));
+-//    btn2->setIcon(QIcon::fromTheme("go-next.symbolic"));
+-//    btn1->setFixedSize(24,24);
+-//    btn2->setFixedSize(24,24);
+-//    hLayout->addWidget(btn1);
+-//    hLayout->addWidget(btn2);
++    //    crumb->setIcon(QIcon::fromTheme("dialog-info"));  //设置KBreadCrumb的图标
++    //    KBorderlessButton *btn1 = new KBorderlessButton();
++    //    KBorderlessButton *btn2 = new KBorderlessButton();
++    //    btn1->setIcon(QIcon::fromTheme("go-previous.symbolic"));
++    //    btn2->setIcon(QIcon::fromTheme("go-next.symbolic"));
++    //    btn1->setFixedSize(24,24);
++    //    btn2->setFixedSize(24,24);
++    //    hLayout->addWidget(btn1);
++    //    hLayout->addWidget(btn2);
+     hLayout->addWidget(crumb);
+ 
+     mainLayout->addLayout(hLayout);
+ 
+     hLayout = new QHBoxLayout;
+-//    KCrumb*crumb2 = new KCrumb(this);
+-    QTabBar*crumb2 = new QTabBar(this);
+-//    //默认是true
+-//    crumb->setFlat(false);  //设置KBreadCrumb是否为flat类型
+-//    crumb2->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed);
++    //    KCrumb*crumb2 = new KCrumb(this);
++    QTabBar *crumb2 = new QTabBar(this);
++    //    //默认是true
++    //    crumb->setFlat(false);  //设置KBreadCrumb是否为flat类型
++    //    crumb2->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed);
+     crumb2->addTab("页面目录一,页面目录一");
+     crumb2->addTab("页面目录二,页面目录二");
+     crumb2->addTab("页面目录三,页面目录三");
+     crumb2->addTab("短的");
+     crumb2->addTab("长的长的长的长的长的长的");
+-////    crumb2->setIcon(QIcon::fromTheme("dialog-warning"));
++    ////    crumb2->setIcon(QIcon::fromTheme("dialog-warning"));
+     hLayout->addWidget(crumb2);
+     mainLayout->addLayout(hLayout);
+-//    crumb2->setFixedWidth(200);
+-////    crumb2->setShape(QTabBar::RoundedWest);
+-
++    //    crumb2->setFixedWidth(200);
++    ////    crumb2->setShape(QTabBar::RoundedWest);
+ 
+     mainLayout->addLayout(hLayout);
+     setLayout(mainLayout);
+ 
+-//    if(crumb->currentIndex() == 0)
+-//    {
+-//        btn1->setEnabled(false);
+-//    }
+-//    else if(crumb->currentIndex() == crumb->count() - 1)
+-//    {
+-//        btn2->setEnabled(false);
+-//    }
++    //    if(crumb->currentIndex() == 0)
++    //    {
++    //        btn1->setEnabled(false);
++    //    }
++    //    else if(crumb->currentIndex() == crumb->count() - 1)
++    //    {
++    //        btn2->setEnabled(false);
++    //    }
+ 
+-//    connect(btn1,&KBorderlessButton::clicked,this,[=]{
+-//        crumb->leftScrollTabs();
+-//    });
+-//    connect(btn2,&KBorderlessButton::clicked,this,[=]{
+-//        crumb->rightScrollTabs();
+-//    });
+-    setMinimumSize(600,500);
++    //    connect(btn1,&KBorderlessButton::clicked,this,[=]{
++    //        crumb->leftScrollTabs();
++    //    });
++    //    connect(btn2,&KBorderlessButton::clicked,this,[=]{
++    //        crumb->rightScrollTabs();
++    //    });
++    setMinimumSize(600, 500);
+     crumb2->setElideMode(Qt::ElideMiddle);
+-    connect(crumb,&KCrumb::tabBarClicked,this,[=](int index){
+-        if(index == 1)
++    connect(crumb, &KCrumb::tabBarClicked, this, [=](int index) {
++        if (index == 1)
+             crumb->setMaximumWidth(1300);
+     });
+-//    connect(crumb2,&QTabBar::tabBarClicked,this,[=](int index){
+-//        if(index == 0)
+-//        {
+-//            crumb2->setTabText(1,"...");
+-//            crumb2->adjustSize();
+-//        }
+-//        if(index == 1)
+-//        {
+-//            crumb2->setTabText(1,"页面目录二,页面目录二");
+-//            crumb2->adjustSize();
+-//        }
+-//    });
++    //    connect(crumb2,&QTabBar::tabBarClicked,this,[=](int index){
++    //        if(index == 0)
++    //        {
++    //            crumb2->setTabText(1,"...");
++    //            crumb2->adjustSize();
++    //        }
++    //        if(index == 1)
++    //        {
++    //            crumb2->setTabText(1,"页面目录二,页面目录二");
++    //            crumb2->adjustSize();
++    //        }
++    //    });
+ }
+ 
+ Widget::~Widget()
+ {
+ }
+-
+diff --git a/kysdk-qtwidgets/test/testdirtabbar/widget.cpp b/kysdk-qtwidgets/test/testdirtabbar/widget.cpp
+index 06b3db9..c31a6a6 100644
+--- a/kysdk-qtwidgets/test/testdirtabbar/widget.cpp
++++ b/kysdk-qtwidgets/test/testdirtabbar/widget.cpp
+@@ -1,48 +1,49 @@
+ #include "widget.h"
+ #include "kdirtabbar.h"
+-#include <QFileInfo>
+-#include <QDebug>
+-#include <QWidget>
++#include <QBoxLayout>
+ #include <QDateTime>
+-#include <QPushButton>
++#include <QDebug>
+ #include <QDirIterator>
+-#include <QToolButton>
+-#include <QBoxLayout>
+-#include <QTextEdit>
+-#include <QPoint>
+-#include <QStyle>
+ #include <QFileDialog>
+-#include <QStyleOptionButton>
++#include <QFileInfo>
++#include <QLabel>
+ #include <QPainter>
++#include <QPoint>
++#include <QPushButton>
+ #include <QStandardPaths>
+-#include <QLabel>
++#include <QStyle>
++#include <QStyleOptionButton>
++#include <QTextEdit>
++#include <QToolButton>
++#include <QWidget>
+ 
+-using namespace  kdk;
++using namespace kdk;
+ 
+ Widget::Widget(QWidget *parent)
+     : QWidget(parent)
+ {
+-    KDirTabBar * bar = new KDirTabBar(this);
+-    QVBoxLayout* myLayout = new QVBoxLayout();
+-    QFileDialog* fileDialog = new QFileDialog(this);;
+-    QPushButton* button1 = new QPushButton("open files",this);
+-    QLabel* label = new QLabel();
+-    QString path =  QDir::currentPath();
++    KDirTabBar *bar = new KDirTabBar(this);
++    QVBoxLayout *myLayout = new QVBoxLayout();
++    QFileDialog *fileDialog = new QFileDialog(this);
++    ;
++    QPushButton *button1 = new QPushButton("open files", this);
++    QLabel *label = new QLabel();
++    QString path = QDir::currentPath();
+     QFileInfo fileInfo(path);
+-    QList<QToolButton* > btns;
+-    KDirTabBar* bar2 = new KDirTabBar(this);
++    QList<QToolButton *> btns;
++    KDirTabBar *bar2 = new KDirTabBar(this);
+ 
+     bar->setCurrentPath(fileInfo.absoluteFilePath());
+     label->setText(bar->currentPath());
+-    btns=bar->buttons();
+-    btns[btns.count()-1]->setIcon(QIcon());//设置按钮的图标
+-    btns[btns.count()-2]->setEnabled(false);//设置按钮是否可用
+-    bar->setIcon(btns.count()-2,QIcon::fromTheme("folder-pictures"));//设置按钮的图标
++    btns = bar->buttons();
++    btns[btns.count() - 1]->setIcon(QIcon()); // 设置按钮的图标
++    btns[btns.count() - 2]->setEnabled(false); // 设置按钮是否可用
++    bar->setIcon(btns.count() - 2, QIcon::fromTheme("folder-pictures")); // 设置按钮的图标
+ 
+-    connect(bar,&KDirTabBar::tabBarClicked,[=](){
++    connect(bar, &KDirTabBar::tabBarClicked, [=]() {
+         label->setText(bar->currentPath());
+     });
+-    connect(button1,&QPushButton::clicked,[=]{
++    connect(button1, &QPushButton::clicked, [=] {
+         fileDialog->setDirectory(QStandardPaths::writableLocation(QStandardPaths::HomeLocation));
+         fileDialog->setFileMode(QFileDialog::ExistingFiles);
+         bar2->setCurrentPath(fileDialog->getExistingDirectory());
+@@ -62,4 +63,3 @@ Widget::Widget(QWidget *parent)
+ Widget::~Widget()
+ {
+ }
+-
+diff --git a/kysdk-qtwidgets/test/testdirtabbar/widget.h b/kysdk-qtwidgets/test/testdirtabbar/widget.h
+index 170c38d..6505bec 100644
+--- a/kysdk-qtwidgets/test/testdirtabbar/widget.h
++++ b/kysdk-qtwidgets/test/testdirtabbar/widget.h
+@@ -1,9 +1,9 @@
+ #ifndef WIDGET_H
+ #define WIDGET_H
+ 
+-#include <QWidget>
+-#include "widget.h"
+ #include "kdirtabbar.h"
++#include "widget.h"
++#include <QWidget>
+ 
+ class Widget : public QWidget
+ {
+@@ -13,8 +13,6 @@ public:
+     Widget(QWidget *parent = nullptr);
+     ~Widget();
+ 
+-
+-    void getchildFolds(const QString& foldPath, QStringList& folds, QStringList& foldsName);
+-
++    void getchildFolds(const QString &foldPath, QStringList &folds, QStringList &foldsName);
+ };
+ #endif // WIDGET_H
+diff --git a/kysdk-qtwidgets/test/testinputdialog/main.cpp b/kysdk-qtwidgets/test/testinputdialog/main.cpp
+index 566e7a0..a5bd47a 100644
+--- a/kysdk-qtwidgets/test/testinputdialog/main.cpp
++++ b/kysdk-qtwidgets/test/testinputdialog/main.cpp
+@@ -1,5 +1,5 @@
+ /*
+- * 
++ *
+  *
+  * Copyright (C) 2023, KylinSoft Co., Ltd.
+  *
+@@ -22,9 +22,9 @@
+ 
+ #include "widget.h"
+ 
++#include "kwidgetutils.h"
+ #include <QApplication>
+ #include <QTranslator>
+-#include "kwidgetutils.h"
+ 
+ int main(int argc, char *argv[])
+ {
+@@ -33,17 +33,13 @@ int main(int argc, char *argv[])
+     Widget w;
+     QTranslator trans;
+     QString locale = QLocale::system().name();
+-    if(locale == "zh_CN")
+-    {
+-        if(trans.load(":/translations/gui_zh_CN.qm"))
+-        {
++    if (locale == "zh_CN") {
++        if (trans.load(":/translations/gui_zh_CN.qm")) {
+             a.installTranslator(&trans);
+         }
+     }
+-    if(locale == "bo_CN")
+-    {
+-        if(trans.load(":/translations/gui_bo_CN.qm"))
+-        {
++    if (locale == "bo_CN") {
++        if (trans.load(":/translations/gui_bo_CN.qm")) {
+             a.installTranslator(&trans);
+         }
+     }
+diff --git a/kysdk-qtwidgets/test/testinputdialog/widget.cpp b/kysdk-qtwidgets/test/testinputdialog/widget.cpp
+index a38fd2a..59c98d2 100644
+--- a/kysdk-qtwidgets/test/testinputdialog/widget.cpp
++++ b/kysdk-qtwidgets/test/testinputdialog/widget.cpp
+@@ -1,5 +1,5 @@
+ /*
+- * 
++ *
+  *
+  * Copyright (C) 2023, KylinSoft Co., Ltd.
+  *
+@@ -22,31 +22,38 @@
+ 
+ #include "widget.h"
+ #include "kinputdialog.h"
++#include <QDebug>
+ #include <QPushButton>
+ #include <QVBoxLayout>
+-#include <QDebug>
+ 
+-using namespace  kdk;
++using namespace kdk;
+ Widget::Widget(QWidget *parent)
+     : KWidget(parent)
+ {
+-    QVBoxLayout* vlayout = new QVBoxLayout();
+-    auto btn1 = new QPushButton("inputText",this);
+-    auto btn2 = new QPushButton("inputMultiText",this);
+-    auto btn3 = new QPushButton("inputInt",this);
+-    auto btn4 = new QPushButton("inputDouble",this);
++    QVBoxLayout *vlayout = new QVBoxLayout();
++    auto btn1 = new QPushButton("inputText", this);
++    auto btn2 = new QPushButton("inputMultiText", this);
++    auto btn3 = new QPushButton("inputInt", this);
++    auto btn4 = new QPushButton("inputDouble", this);
+     vlayout->addWidget(btn1);
+     vlayout->addWidget(btn2);
+     vlayout->addWidget(btn3);
+     vlayout->addWidget(btn4);
+-    connect(btn1,&QPushButton::clicked,this,[=](){KInputDialog::getText(this,tr("please input:"));}); //单行文本输入框
+-    connect(btn2,&QPushButton::clicked,this,[=](){KInputDialog::getMultiLineText(this,tr("please input:"));}); //多行文本输入框
+-    connect(btn3,&QPushButton::clicked,this,[=](){KInputDialog::getInt(this,tr("please input:"));});  //整型数字输入框
+-    connect(btn4,&QPushButton::clicked,this,[=](){KInputDialog::getDouble(this,tr("please input:"));});  //浮点型数字输入框
++    connect(btn1, &QPushButton::clicked, this, [=]() {
++        KInputDialog::getText(this, tr("please input:"));
++    }); // 单行文本输入框
++    connect(btn2, &QPushButton::clicked, this, [=]() {
++        KInputDialog::getMultiLineText(this, tr("please input:"));
++    }); // 多行文本输入框
++    connect(btn3, &QPushButton::clicked, this, [=]() {
++        KInputDialog::getInt(this, tr("please input:"));
++    }); // 整型数字输入框
++    connect(btn4, &QPushButton::clicked, this, [=]() {
++        KInputDialog::getDouble(this, tr("please input:"));
++    }); // 浮点型数字输入框
+     baseBar()->setLayout(vlayout);
+ }
+ 
+ Widget::~Widget()
+ {
+ }
+-
+diff --git a/kysdk-qtwidgets/test/testinputdialog/widget.h b/kysdk-qtwidgets/test/testinputdialog/widget.h
+index 976174b..cd7c149 100644
+--- a/kysdk-qtwidgets/test/testinputdialog/widget.h
++++ b/kysdk-qtwidgets/test/testinputdialog/widget.h
+@@ -1,5 +1,5 @@
+ /*
+- * 
++ *
+  *
+  * Copyright (C) 2023, KylinSoft Co., Ltd.
+  *
+diff --git a/kysdk-qtwidgets/test/testintrowidget/widget.cpp b/kysdk-qtwidgets/test/testintrowidget/widget.cpp
+index 48790d6..bfce5df 100644
+--- a/kysdk-qtwidgets/test/testintrowidget/widget.cpp
++++ b/kysdk-qtwidgets/test/testintrowidget/widget.cpp
+@@ -18,35 +18,34 @@ Widget::Widget(QWidget *parent)
+     widget2->setMainLabel("我是一段测试文本,测试换行符号\n('\\n'不显示只换行)是否可以正常换行以及显示不全是否可以换行");
+     widget2->setSubLabel("2024216161");
+     widget2->setViewType(ViewType::IconView);
+-    widget2->setFixedSize(218,200);
++    widget2->setFixedSize(218, 200);
+     widget2->setTitleColor(Qt::red);
+-    widget2->setBorderRadius(0,20,20,30);
++    widget2->setBorderRadius(0, 20, 20, 30);
+     layout->addWidget(widget1);
+     layout->addWidget(widget2);
+ 
+     QMenu *menu = new QMenu();
+-    QAction* action1 = new QAction("action1",menu);
+-    QAction* action2 = new QAction("action2",menu);
+-    QAction* action3 = new QAction("action3",menu);
++    QAction *action1 = new QAction("action1", menu);
++    QAction *action2 = new QAction("action2", menu);
++    QAction *action3 = new QAction("action3", menu);
+     menu->addAction(action1);
+     menu->addAction(action2);
+     menu->addAction(action3);
+ 
+-    connect(widget1,&KIntroWidget::rightClick,this,[=](QPoint point){
++    connect(widget1, &KIntroWidget::rightClick, this, [=](QPoint point) {
+         menu->move(point);
+         menu->show();
+     });
+ 
+-
+     QMenu *menu1 = new QMenu();
+-    QAction* action4 = new QAction("action4",menu);
+-    QAction* action5 = new QAction("action5",menu);
+-    QAction* action6 = new QAction("action6",menu);
++    QAction *action4 = new QAction("action4", menu);
++    QAction *action5 = new QAction("action5", menu);
++    QAction *action6 = new QAction("action6", menu);
+     menu1->addAction(action4);
+     menu1->addAction(action5);
+     menu1->addAction(action6);
+ 
+-    connect(widget2,&KIntroWidget::rightClick,this,[=](QPoint point){
++    connect(widget2, &KIntroWidget::rightClick, this, [=](QPoint point) {
+         menu1->move(point);
+         menu1->show();
+     });
+@@ -55,4 +54,3 @@ Widget::Widget(QWidget *parent)
+ Widget::~Widget()
+ {
+ }
+-
+diff --git a/kysdk-qtwidgets/test/testkbackground/widget.cpp b/kysdk-qtwidgets/test/testkbackground/widget.cpp
+index c98b76e..2931b41 100644
+--- a/kysdk-qtwidgets/test/testkbackground/widget.cpp
++++ b/kysdk-qtwidgets/test/testkbackground/widget.cpp
+@@ -21,37 +21,37 @@
+  */
+ 
+ #include "widget.h"
+-#include <QHBoxLayout>
+ #include "kbackgroundgroup.h"
+-#include <QFrame>
++#include "kborderlessbutton.h"
+ #include "klineframe.h"
+ #include "kpushbutton.h"
+-#include <QCheckBox>
+-#include <QLineEdit>
+ #include "kswitchbutton.h"
+-#include "kborderlessbutton.h"
+ #include "ktoolbutton.h"
++#include <QCheckBox>
++#include <QFrame>
++#include <QHBoxLayout>
+ #include <QLabel>
++#include <QLineEdit>
+ 
+ using namespace kdk;
+ Widget::Widget(QWidget *parent)
+     : QWidget(parent)
+ {
+-    QVBoxLayout* vmainLayout=new QVBoxLayout(this);
++    QVBoxLayout *vmainLayout = new QVBoxLayout(this);
+ 
+     QLabel *networkLabel = new QLabel();
+     networkLabel->setText("有线网络");
+-    networkLabel->setContentsMargins(20,0,0,0);
++    networkLabel->setContentsMargins(20, 0, 0, 0);
+ 
+     QWidget *widget1 = new QWidget();
+ 
+-    QLabel* widget1Label = new QLabel();
++    QLabel *widget1Label = new QLabel();
+     widget1Label->setText("开启");
+ 
+     KSwitchButton *widget1Switch = new KSwitchButton();
+ 
+-    QHBoxLayout* widget1Layout = new QHBoxLayout(widget1);
+-    widget1Layout->setContentsMargins(16,0,16,0);
++    QHBoxLayout *widget1Layout = new QHBoxLayout(widget1);
++    widget1Layout->setContentsMargins(16, 0, 16, 0);
+     widget1Layout->addWidget(widget1Label);
+     widget1Layout->addStretch();
+     widget1Layout->addWidget(widget1Switch);
+@@ -60,7 +60,7 @@ Widget::Widget(QWidget *parent)
+     back->addWidget(widget1);
+ 
+     QWidget *widget2 = new QWidget();
+-//    widget2->setFixedHeight(100);
++    //    widget2->setFixedHeight(100);
+ 
+     QLabel *widget2label = new QLabel();
+     widget2label->setText("网卡:wwwwwww");
+@@ -73,18 +73,18 @@ Widget::Widget(QWidget *parent)
+     widget2Switch->setAttribute(Qt::WA_TranslucentBackground);
+ 
+     QHBoxLayout *widget2Layout = new QHBoxLayout(widget2);
+-    widget2Layout->setContentsMargins(16,0,16,0);
++    widget2Layout->setContentsMargins(16, 0, 16, 0);
+     widget2Layout->addWidget(widget2label);
+     widget2Layout->addStretch();
+     widget2Layout->addWidget(less);
+     widget2Layout->addWidget(widget2Switch);
+ 
+     QWidget *widget3 = new QWidget();
+-//    QPushButton *widget3 = new QPushButton();
+-    widget3->setProperty("isWindowButton",0x01);
++    //    QPushButton *widget3 = new QPushButton();
++    widget3->setProperty("isWindowButton", 0x01);
+ 
+     QLabel *widget3Label1 = new QLabel();
+-    widget3Label1->setPixmap(QIcon::fromTheme("system-computer-symbolic").pixmap(16,16));
++    widget3Label1->setPixmap(QIcon::fromTheme("system-computer-symbolic").pixmap(16, 16));
+     QLabel *widget3Label2 = new QLabel();
+     widget3Label2->setText("网络名称");
+ 
+@@ -95,21 +95,21 @@ Widget::Widget(QWidget *parent)
+     widget3btn->setIcon(QIcon::fromTheme("stock-people-symbolic"));
+     widget3btn->setAttribute(Qt::WA_TranslucentBackground);
+ 
+-    QHBoxLayout *widget3Layout= new QHBoxLayout(widget3);
+-    widget3Layout->setContentsMargins(16,0,16,0);
++    QHBoxLayout *widget3Layout = new QHBoxLayout(widget3);
++    widget3Layout->setContentsMargins(16, 0, 16, 0);
+     widget3Layout->addWidget(widget3Label1);
+     widget3Layout->addWidget(widget3Label2);
+     widget3Layout->addStretch();
+     widget3Layout->addWidget(widget3Label3);
+     widget3Layout->addWidget(widget3btn);
+ 
+-    QWidget *widget4=new QWidget();
++    QWidget *widget4 = new QWidget();
+ 
+     QLabel *widget4Label1 = new QLabel();
+     widget4Label1->setText("点击添加");
+ 
+     QLabel *widget4Label2 = new QLabel();
+-    widget4Label2->setPixmap(QIcon::fromTheme("system-computer-symbolic").pixmap(16,16));
++    widget4Label2->setPixmap(QIcon::fromTheme("system-computer-symbolic").pixmap(16, 16));
+ 
+     QHBoxLayout *widget4Layout = new QHBoxLayout(widget4);
+     widget4Layout->addStretch();
+@@ -117,67 +117,64 @@ Widget::Widget(QWidget *parent)
+     widget4Layout->addWidget(widget4Label1);
+     widget4Layout->addStretch();
+ 
+-    QList<QWidget*> list;
++    QList<QWidget *> list;
+     list.append(widget2);
+     list.append(widget3);
+     list.append(widget4);
+ 
+     KBackgroundGroup *back1 = new KBackgroundGroup();
+     back1->addWidgetList(list);
+-    back1->setStateEnable(widget3,true);
+-    back1->setStateEnable(widget4,true);
+-
++    back1->setStateEnable(widget3, true);
++    back1->setStateEnable(widget4, true);
+ 
+     QWidget *widget5 = new QWidget();
+     widget5->hide();
+ 
+-    QWidget *widget6 =new QWidget();
++    QWidget *widget6 = new QWidget();
+     widget6->setWindowIcon(QIcon::fromTheme("kylin-music"));
+     widget6->hide();
+ 
+-    connect(widget1Switch,&KSwitchButton::clicked,this,[=](){
+-        if(back1->isVisible())
++    connect(widget1Switch, &KSwitchButton::clicked, this, [=]() {
++        if (back1->isVisible())
+             back1->hide();
+         else
+             back1->show();
+     });
+ 
+-    //插入删除
+-    connect(widget2Switch,&KSwitchButton::clicked,this,[=](){
+-        if(back1->widgetList().contains(widget3))
++    // 插入删除
++    connect(widget2Switch, &KSwitchButton::clicked, this, [=]() {
++        if (back1->widgetList().contains(widget3))
+             back1->removeWidget(widget3);
+         else
+-            back1->insertWidgetAt(back1->widgetList().count()-1,widget3);
+-        back1->setStateEnable(widget3,true);
++            back1->insertWidgetAt(back1->widgetList().count() - 1, widget3);
++        back1->setStateEnable(widget3, true);
+     });
+ 
+-    connect(less,&KBorderlessButton::clicked,this,[=](){
+-        if(back1->widgetList().contains(widget3))
++    connect(less, &KBorderlessButton::clicked, this, [=]() {
++        if (back1->widgetList().contains(widget3))
+             back1->removeWidget(widget3);
+         else
+-            back1->insertWidgetAt(back1->widgetList().count()-1,widget3);
+-        back1->setStateEnable(widget3,true);
++            back1->insertWidgetAt(back1->widgetList().count() - 1, widget3);
++        back1->setStateEnable(widget3, true);
+     });
+ 
+-    connect(back1,&KBackgroundGroup::clicked,this,[=](QWidget* widget){
+-        if(widget == widget3 )
+-        {
+-            if(widget3Label3->isVisible())
++    connect(back1, &KBackgroundGroup::clicked, this, [=](QWidget *widget) {
++        if (widget == widget3) {
++            if (widget3Label3->isVisible())
+                 widget3Label3->hide();
+             else
+                 widget3Label3->show();
+         }
+-        if(widget == widget4 )
+-        {
+-            if(widget6->isVisible())
++        if (widget == widget4) {
++            if (widget6->isVisible())
+                 widget6->hide();
+             else
+                 widget6->show();
+         }
+     });
+ 
+-    connect(widget3btn,&KBorderlessButton::clicked,this,[=](){
+-        if(widget5->isVisible())
++    connect(widget3btn, &KBorderlessButton::clicked, this, [=]() {
++        if (widget5->isVisible())
+             widget5->hide();
+         else
+             widget5->show();
+@@ -191,4 +188,3 @@ Widget::Widget(QWidget *parent)
+ Widget::~Widget()
+ {
+ }
+-
+diff --git a/kysdk-qtwidgets/test/testkbackground/widget.h b/kysdk-qtwidgets/test/testkbackground/widget.h
+index ecf77f4..b2060c2 100644
+--- a/kysdk-qtwidgets/test/testkbackground/widget.h
++++ b/kysdk-qtwidgets/test/testkbackground/widget.h
+@@ -23,8 +23,8 @@
+ #ifndef WIDGET_H
+ #define WIDGET_H
+ 
+-#include <QWidget>
+ #include "kwidget.h"
++#include <QWidget>
+ using namespace kdk;
+ 
+ class Widget : public QWidget
+diff --git a/kysdk-qtwidgets/test/testkcolorcombobox/widget.cpp b/kysdk-qtwidgets/test/testkcolorcombobox/widget.cpp
+index 24914f4..adceccc 100644
+--- a/kysdk-qtwidgets/test/testkcolorcombobox/widget.cpp
++++ b/kysdk-qtwidgets/test/testkcolorcombobox/widget.cpp
+@@ -21,11 +21,11 @@
+  */
+ 
+ #include "widget.h"
+-#include <QHBoxLayout>
+-#include <QColor>
+-#include <QList>
+ #include "kcolorcombobox.h"
++#include <QColor>
+ #include <QDebug>
++#include <QHBoxLayout>
++#include <QList>
+ using namespace kdk;
+ 
+ Widget::Widget(QWidget *parent)
+@@ -34,46 +34,45 @@ Widget::Widget(QWidget *parent)
+     QHBoxLayout *hLayout = new QHBoxLayout(this);
+     KColorComboBox *comboBoxCircle = new KColorComboBox(this);
+     comboBoxCircle->setComboType(KColorComboBox::Circle);
+-    connect(comboBoxCircle,&KColorComboBox::currentColorChanged,this,[=](){
+-        qDebug()<<"currentColorChanged";
++    connect(comboBoxCircle, &KColorComboBox::currentColorChanged, this, [=]() {
++        qDebug() << "currentColorChanged";
+     });
+-    connect(comboBoxCircle,&KColorComboBox::activated,this,[=](){
+-        qDebug()<<"activatedChanged";
++    connect(comboBoxCircle, &KColorComboBox::activated, this, [=]() {
++        qDebug() << "activatedChanged";
+     });
+-    connect(comboBoxCircle,&KColorComboBox::highlighted,this,[=](){
+-        qDebug()<<"highlightChanged";
++    connect(comboBoxCircle, &KColorComboBox::highlighted, this, [=]() {
++        qDebug() << "highlightChanged";
+     });
+     hLayout->addWidget(comboBoxCircle);
+-    comboBoxCircle->setFixedSize(36,36);
++    comboBoxCircle->setFixedSize(36, 36);
+     KColorComboBox *comboBoxRect = new KColorComboBox(this);
+-    connect(comboBoxRect,&KColorComboBox::currentColorChanged,this,[=](){
+-        qDebug()<<"currentColorChanged";
++    connect(comboBoxRect, &KColorComboBox::currentColorChanged, this, [=]() {
++        qDebug() << "currentColorChanged";
+     });
+-    connect(comboBoxRect,&KColorComboBox::activated,this,[=](){
+-        qDebug()<<"activatedChanged";
++    connect(comboBoxRect, &KColorComboBox::activated, this, [=]() {
++        qDebug() << "activatedChanged";
+     });
+-    connect(comboBoxRect,&KColorComboBox::highlighted,this,[=](){
+-        qDebug()<<"highlightChanged";
++    connect(comboBoxRect, &KColorComboBox::highlighted, this, [=]() {
++        qDebug() << "highlightChanged";
+     });
+     comboBoxRect->setComboType(KColorComboBox::RoundedRect);
+     hLayout->addWidget(comboBoxRect);
+-    comboBoxRect->setFixedSize(36,36);
++    comboBoxRect->setFixedSize(36, 36);
+ 
+-//    1.列表插入
+-    QList <QColor> list;
+-    list.append(QColor(255,0,0));
+-    list.append(QColor(0,255,0));
+-    list.append(QColor(255,255,0));
++    //    1.列表插入
++    QList<QColor> list;
++    list.append(QColor(255, 0, 0));
++    list.append(QColor(0, 255, 0));
++    list.append(QColor(255, 255, 0));
+     comboBoxCircle->setColorList(list);
+-//    2.逐个插入
+-    comboBoxRect->addColor(QColor(255,0,0));
+-    comboBoxRect->addColor(QColor(0,255,0));
+-    comboBoxRect->addColor(QColor(255,255,0));
+-    setGeometry(400,400,400,400);
+-        comboBoxCircle->setCurrentIndex(1);
++    //    2.逐个插入
++    comboBoxRect->addColor(QColor(255, 0, 0));
++    comboBoxRect->addColor(QColor(0, 255, 0));
++    comboBoxRect->addColor(QColor(255, 255, 0));
++    setGeometry(400, 400, 400, 400);
++    comboBoxCircle->setCurrentIndex(1);
+ }
+ 
+ Widget::~Widget()
+ {
+ }
+-
+diff --git a/kysdk-qtwidgets/test/testkpressbutton/main.cpp b/kysdk-qtwidgets/test/testkpressbutton/main.cpp
+index 97df2e6..6601685 100644
+--- a/kysdk-qtwidgets/test/testkpressbutton/main.cpp
++++ b/kysdk-qtwidgets/test/testkpressbutton/main.cpp
+@@ -1,5 +1,5 @@
+ /*
+- * 
++ *
+  *
+  * Copyright (C) 2023, KylinSoft Co., Ltd.
+  *
+@@ -22,9 +22,9 @@
+ 
+ #include "widget.h"
+ 
++#include "kwidgetutils.h"
+ #include <QApplication>
+ #include <QTranslator>
+-#include "kwidgetutils.h"
+ 
+ int main(int argc, char *argv[])
+ {
+@@ -32,17 +32,13 @@ int main(int argc, char *argv[])
+     QApplication a(argc, argv);
+     QTranslator trans;
+     QString locale = QLocale::system().name();
+-    if(locale == "zh_CN")
+-    {
+-        if(trans.load(":/translations/gui_zh_CN.qm"))
+-        {
++    if (locale == "zh_CN") {
++        if (trans.load(":/translations/gui_zh_CN.qm")) {
+             a.installTranslator(&trans);
+         }
+     }
+-    if(locale == "bo_CN")
+-    {
+-        if(trans.load(":/translations/gui_bo_CN.qm"))
+-        {
++    if (locale == "bo_CN") {
++        if (trans.load(":/translations/gui_bo_CN.qm")) {
+             a.installTranslator(&trans);
+         }
+     }
+diff --git a/kysdk-qtwidgets/test/testkpressbutton/widget.cpp b/kysdk-qtwidgets/test/testkpressbutton/widget.cpp
+index 2dbbd5b..5de42a7 100644
+--- a/kysdk-qtwidgets/test/testkpressbutton/widget.cpp
++++ b/kysdk-qtwidgets/test/testkpressbutton/widget.cpp
+@@ -1,5 +1,5 @@
+ /*
+- * 
++ *
+  *
+  * Copyright (C) 2023, KylinSoft Co., Ltd.
+  *
+@@ -21,8 +21,8 @@
+  */
+ 
+ #include "widget.h"
+-#include "kwidget.h"
+ #include "kpressbutton.h"
++#include "kwidget.h"
+ #include <QHBoxLayout>
+ #include <QVBoxLayout>
+ using namespace kdk;
+@@ -30,63 +30,62 @@ using namespace kdk;
+ Widget::Widget(QWidget *parent)
+     : QWidget(parent)
+ {
+-    KPressButton* button1 = new KPressButton();
++    KPressButton *button1 = new KPressButton();
+     button1->setIcon(QIcon::fromTheme("stock-people-symbolic"));
+     button1->setBorderRadius(20);
+     button1->setTranslucent(true);
+     button1->setChecked(true);
+ 
+-    KPressButton* button2 = new KPressButton();
++    KPressButton *button2 = new KPressButton();
+     button2->setCheckable(false);
+ 
+-    QHBoxLayout* layout = new QHBoxLayout();
++    QHBoxLayout *layout = new QHBoxLayout();
+     layout->addWidget(button1);
+     layout->addWidget(button2);
+ 
+-    KPressButton* button3 = new KPressButton(this);
+-    KPressButton* button4 = new KPressButton();
+-    button4->setFixedSize(36,36);
++    KPressButton *button3 = new KPressButton(this);
++    KPressButton *button4 = new KPressButton();
++    button4->setFixedSize(36, 36);
+     button4->setButtonType(KPressButton::CircleType);
+     button4->setIcon(QIcon::fromTheme("system-computer-symbolic"));
+ 
+-    QHBoxLayout* layout1 = new QHBoxLayout();
++    QHBoxLayout *layout1 = new QHBoxLayout();
+     layout1->addWidget(button3);
+     layout1->addWidget(button4);
+ 
+-    KPressButton* button5 = new KPressButton();
++    KPressButton *button5 = new KPressButton();
+     button5->setLoaingStatus(true);
+     button5->setChecked(true);
+ 
+-    KPressButton* button6 = new KPressButton();
++    KPressButton *button6 = new KPressButton();
+ 
+-    QHBoxLayout* layout2 = new QHBoxLayout();
++    QHBoxLayout *layout2 = new QHBoxLayout();
+     layout2->addWidget(button5);
+     layout2->addWidget(button6);
+ 
+-    QVBoxLayout* vlayout = new QVBoxLayout(this);
++    QVBoxLayout *vlayout = new QVBoxLayout(this);
+     vlayout->addLayout(layout);
+     vlayout->addLayout(layout1);
+     vlayout->addLayout(layout2);
+ 
+-    connect(button4,&KPressButton::clicked,this,[=](){
+-        if(button4->isChecked())
++    connect(button4, &KPressButton::clicked, this, [=]() {
++        if (button4->isChecked())
+             button4->setLoaingStatus(true);
+         else
+             button4->setLoaingStatus(false);
+     });
+-    connect(button5,&KPressButton::clicked,this,[=](){
+-        if(button5->isChecked())
++    connect(button5, &KPressButton::clicked, this, [=]() {
++        if (button5->isChecked())
+             button5->setLoaingStatus(true);
+         else
+             button5->setLoaingStatus(false);
+     });
+ 
+-    connect(button2,&KPressButton::clicked,this,[=](bool flag){
+-        qDebug() << flag << button2->isChecked()<<button2->isCheckable();
++    connect(button2, &KPressButton::clicked, this, [=](bool flag) {
++        qDebug() << flag << button2->isChecked() << button2->isCheckable();
+     });
+ }
+ 
+ Widget::~Widget()
+ {
+ }
+-
+diff --git a/kysdk-qtwidgets/test/testkpressbutton/widget.h b/kysdk-qtwidgets/test/testkpressbutton/widget.h
+index c6c87d4..46a3f3e 100644
+--- a/kysdk-qtwidgets/test/testkpressbutton/widget.h
++++ b/kysdk-qtwidgets/test/testkpressbutton/widget.h
+@@ -1,5 +1,5 @@
+ /*
+- * 
++ *
+  *
+  * Copyright (C) 2023, KylinSoft Co., Ltd.
+  *
+diff --git a/kysdk-qtwidgets/test/testlineedit/widget.cpp b/kysdk-qtwidgets/test/testlineedit/widget.cpp
+index 62f5957..c8e63ae 100644
+--- a/kysdk-qtwidgets/test/testlineedit/widget.cpp
++++ b/kysdk-qtwidgets/test/testlineedit/widget.cpp
+@@ -1,7 +1,7 @@
+ #include "widget.h"
+ #include "klineedit.h"
+-#include <QDebug>
+ #include <QBoxLayout>
++#include <QDebug>
+ #include <QPushButton>
+ 
+ using namespace kdk;
+@@ -12,19 +12,17 @@ Widget::Widget(QWidget *parent)
+ 
+     KLineEdit *edit = new KLineEdit(this);
+ 
+-    QPushButton* btn = edit->pushbutton();
++    QPushButton *btn = edit->pushbutton();
+     btn->setIcon(QIcon::fromTheme("system-computer-symbolic"));
+-    connect(btn,&QPushButton::clicked,this,[=]{
+-        qDebug()<<edit->text();
++    connect(btn, &QPushButton::clicked, this, [=] {
++        qDebug() << edit->text();
+     });
+     vlayout->addWidget(edit);
+ 
+-    QPushButton* btn1 = new QPushButton(this);
++    QPushButton *btn1 = new QPushButton(this);
+     vlayout->addWidget(btn1);
+-
+ }
+ 
+ Widget::~Widget()
+ {
+ }
+-
+diff --git a/kysdk-qtwidgets/test/testloopplaypage/widget.cpp b/kysdk-qtwidgets/test/testloopplaypage/widget.cpp
+index ab274ac..460831f 100644
+--- a/kysdk-qtwidgets/test/testloopplaypage/widget.cpp
++++ b/kysdk-qtwidgets/test/testloopplaypage/widget.cpp
+@@ -1,54 +1,54 @@
+ #include "widget.h"
+ 
+-#include <QWidget>
+-#include <QVBoxLayout>
+-#include <QPushButton>
++#include "kloopplaypage.h"
++#include <QDebug>
+ #include <QLabel>
++#include <QPushButton>
+ #include <QStackedWidget>
+-#include <QDebug>
+-#include "kloopplaypage.h"
++#include <QVBoxLayout>
++#include <QWidget>
+ 
+ using namespace kdk;
+ 
+ Widget::Widget(QWidget *parent)
+     : QWidget(parent)
+ {
+-//    QWidget*widget1 = new QWidget();
++    //    QWidget*widget1 = new QWidget();
+ 
+     QLabel *label1 = new QLabel();
+     QPixmap pixmap1(":/1.jpeg");
+     label1->setFixedWidth(400);
+     label1->setPixmap(pixmap1.scaled(400, 200));
+-//    QPushButton* btn1 = new QPushButton(widget1);
+-//    btn1->move(100,50);
+-//    btn1->setText("label1");
++    //    QPushButton* btn1 = new QPushButton(widget1);
++    //    btn1->move(100,50);
++    //    btn1->setText("label1");
+ 
+-//    QWidget*widget2 = new QWidget();
++    //    QWidget*widget2 = new QWidget();
+     QLabel *label2 = new QLabel();
+     QPixmap pixmap2(":/2.jpeg");
+     label2->setPixmap(pixmap2.scaled(400, 200));
+-//    QPushButton* btn2 = new QPushButton(widget2);
+-//    btn2->move(100,50);
+-//    btn2->setText("label2");
++    //    QPushButton* btn2 = new QPushButton(widget2);
++    //    btn2->move(100,50);
++    //    btn2->setText("label2");
+ 
+-//    QWidget*widget3 = new QWidget(this);
++    //    QWidget*widget3 = new QWidget(this);
+     QLabel *label3 = new QLabel();
+     QPixmap pixmap3(":/3.jpg");
+     label3->setPixmap(pixmap3.scaled(400, 200));
+-//    QPushButton* btn3 = new QPushButton(widget3);
+-//    btn3->move(100,50);
+-//    btn3->setText("label2");
++    //    QPushButton* btn3 = new QPushButton(widget3);
++    //    btn3->move(100,50);
++    //    btn3->setText("label2");
+ 
+-//    QWidget*widget4 = new QWidget();
++    //    QWidget*widget4 = new QWidget();
+     QLabel *label4 = new QLabel();
+     QPixmap pixmap4(":/4.jpg");
+     label4->setPixmap(pixmap4.scaled(400, 200));
+-//    QPushButton* btn4 = new QPushButton(widget4);
+-//    btn4->move(100,50);
+-//    btn4->setText("label2");
++    //    QPushButton* btn4 = new QPushButton(widget4);
++    //    btn4->move(100,50);
++    //    btn4->setText("label2");
+ 
+-    QHBoxLayout* layout = new QHBoxLayout(this);
+-    KLoopPlayPage* page = new KLoopPlayPage();
++    QHBoxLayout *layout = new QHBoxLayout(this);
++    KLoopPlayPage *page = new KLoopPlayPage();
+     page->addWidget(label1);
+     page->addWidget(label2);
+     page->addWidget(label3);
+@@ -62,4 +62,3 @@ Widget::Widget(QWidget *parent)
+ Widget::~Widget()
+ {
+ }
+-
+diff --git a/kysdk-qtwidgets/test/testnativetabbar/widget.cpp b/kysdk-qtwidgets/test/testnativetabbar/widget.cpp
+index 056f97f..79719ad 100644
+--- a/kysdk-qtwidgets/test/testnativetabbar/widget.cpp
++++ b/kysdk-qtwidgets/test/testnativetabbar/widget.cpp
+@@ -1,61 +1,69 @@
+ #include "widget.h"
+ #include "knativetabbar.h"
+-#include <QVBoxLayout>
+ #include <QLabel>
+ #include <QMenu>
++#include <QVBoxLayout>
+ 
+ using namespace kdk;
+ Widget::Widget(QWidget *parent)
+     : QWidget(parent)
+ {
+     QWidget *w = new QWidget();
+-    KNativeTabbar *tabBar1 = new KNativeTabbar(KNativeTabbarStyle::SegmentLight,w);
+-    tabBar1->addTab(QIcon::fromTheme("kylin-music"),"Segment1");
++    KNativeTabbar *tabBar1 = new KNativeTabbar(KNativeTabbarStyle::SegmentLight, w);
++    tabBar1->addTab(QIcon::fromTheme("kylin-music"), "Segment1");
+     tabBar1->addTab("Segment2");
+-    tabBar1->addTab(QIcon::fromTheme("kylin-music"),"");
++    tabBar1->addTab(QIcon::fromTheme("kylin-music"), "");
+     tabBar1->addTab("Segment4");
+     tabBar1->addTab("Segment5");
+     tabBar1->addTab("Segment6");
+-    KNativeTabbar *tabBar2 = new KNativeTabbar(KNativeTabbarStyle::SegmentDark,w);
++    KNativeTabbar *tabBar2 = new KNativeTabbar(KNativeTabbarStyle::SegmentDark, w);
+     tabBar2->addTab("SegmentDark1");
+     tabBar2->addTab("SegmentDark2");
+-    tabBar2->addTab(QIcon::fromTheme("kylin-music"),"SegmentDark3");
++    tabBar2->addTab(QIcon::fromTheme("kylin-music"), "SegmentDark3");
+     tabBar2->addTab("SegmentDark4");
+     tabBar2->addTab("SegmentDark5");
+-    tabBar2->addTab(QIcon::fromTheme("kylin-music"),"");
+-    KNativeTabbar *tabBar3 = new KNativeTabbar(KNativeTabbarStyle::Sliding,w);
+-    tabBar3->addTab(QIcon::fromTheme("ukui-dialog-success"),"正常");
+-    tabBar3->addTab(QIcon::fromTheme("dialog-warning"),"错误");
+-    tabBar3->addTab(QIcon::fromTheme("dialog-info"),"注意");
+-    tabBar3->addTab(QIcon::fromTheme("kylin-music"),"Sliding4");
++    tabBar2->addTab(QIcon::fromTheme("kylin-music"), "");
++    KNativeTabbar *tabBar3 = new KNativeTabbar(KNativeTabbarStyle::Sliding, w);
++    tabBar3->addTab(QIcon::fromTheme("ukui-dialog-success"), "正常");
++    tabBar3->addTab(QIcon::fromTheme("dialog-warning"), "错误");
++    tabBar3->addTab(QIcon::fromTheme("dialog-info"), "注意");
++    tabBar3->addTab(QIcon::fromTheme("kylin-music"), "Sliding4");
+     tabBar3->addTab("Sliding5");
+-    tabBar3->addTab(QIcon::fromTheme("kylin-music"),"Sliding6");
+-//    tabBar3->setIconSize(QSize(24,24));
+-    KNativeTabbar *tabBar4 = new KNativeTabbar(KNativeTabbarStyle::Sliding,w);
++    tabBar3->addTab(QIcon::fromTheme("kylin-music"), "Sliding6");
++    //    tabBar3->setIconSize(QSize(24,24));
++    KNativeTabbar *tabBar4 = new KNativeTabbar(KNativeTabbarStyle::Sliding, w);
+     tabBar4->addTab("Segment1");
+     tabBar4->addTab("Segment2");
+     tabBar4->addTab("Segment3");
+     tabBar4->addTab("Segment4");
+-    tabBar4->setTabBarStyle(KNativeTabbarStyle::SegmentDark);     //设置style
+-    tabBar4->setBorderRadius(10);       //设置圆角半径,只对SegmentDark,SegmentLight样式生效
+-    tabBar4->setBackgroundColor(QColor(0,255,0));   //设置背景色
++    tabBar4->setTabBarStyle(KNativeTabbarStyle::SegmentDark); // 设置style
++    tabBar4->setBorderRadius(10); // 设置圆角半径,只对SegmentDark,SegmentLight样式生效
++    tabBar4->setBackgroundColor(QColor(0, 255, 0)); // 设置背景色
+ 
+-    QLabel* pLabel = new QLabel(w);
++    QLabel *pLabel = new QLabel(w);
+     pLabel->setAlignment(Qt::AlignCenter);
+ 
+     QMenu *menu = new QMenu();
+-    QAction* action1 = new QAction("action1",menu);
+-    QAction* action2 = new QAction("action2",menu);
+-    QAction* action3 = new QAction("action3",menu);
++    QAction *action1 = new QAction("action1", menu);
++    QAction *action2 = new QAction("action2", menu);
++    QAction *action3 = new QAction("action3", menu);
+     menu->addAction(action1);
+     menu->addAction(action2);
+     menu->addAction(action3);
+ 
+-    connect(tabBar1,&KNativeTabbar::tabBarClicked,this,[=](int index){pLabel->setText(tabBar1->tabText(index));});
+-    connect(tabBar2,&KNativeTabbar::tabBarClicked,this,[=](int index){pLabel->setText(tabBar2->tabText(index));});
+-    connect(tabBar3,&KNativeTabbar::tabBarClicked,this,[=](int index){pLabel->setText(tabBar3->tabText(index));});
+-    connect(tabBar4,&KNativeTabbar::tabBarClicked,this,[=](int index){pLabel->setText(tabBar4->tabText(index));});
+-    connect(tabBar4,&KNativeTabbar::rightlicked,this,[=](QPoint point){
++    connect(tabBar1, &KNativeTabbar::tabBarClicked, this, [=](int index) {
++        pLabel->setText(tabBar1->tabText(index));
++    });
++    connect(tabBar2, &KNativeTabbar::tabBarClicked, this, [=](int index) {
++        pLabel->setText(tabBar2->tabText(index));
++    });
++    connect(tabBar3, &KNativeTabbar::tabBarClicked, this, [=](int index) {
++        pLabel->setText(tabBar3->tabText(index));
++    });
++    connect(tabBar4, &KNativeTabbar::tabBarClicked, this, [=](int index) {
++        pLabel->setText(tabBar4->tabText(index));
++    });
++    connect(tabBar4, &KNativeTabbar::rightlicked, this, [=](QPoint point) {
+         menu->move(point);
+         menu->show();
+     });
+@@ -65,7 +73,7 @@ Widget::Widget(QWidget *parent)
+     label->setText("just a test label");
+     hlayout->addWidget(label);
+ 
+-    QVBoxLayout*vLayout = new QVBoxLayout;
++    QVBoxLayout *vLayout = new QVBoxLayout;
+     vLayout->addStretch();
+     vLayout->addWidget(tabBar1);
+     vLayout->addWidget(tabBar2);
+@@ -82,4 +90,3 @@ Widget::Widget(QWidget *parent)
+ Widget::~Widget()
+ {
+ }
+-
+diff --git a/kysdk-qtwidgets/test/testnavigationbar/main.cpp b/kysdk-qtwidgets/test/testnavigationbar/main.cpp
+index 0fe4772..b9c8610 100644
+--- a/kysdk-qtwidgets/test/testnavigationbar/main.cpp
++++ b/kysdk-qtwidgets/test/testnavigationbar/main.cpp
+@@ -22,9 +22,9 @@
+ 
+ #include "widget.h"
+ 
++#include "kwidgetutils.h"
+ #include <QApplication>
+ #include <QTranslator>
+-#include "kwidgetutils.h"
+ 
+ int main(int argc, char *argv[])
+ {
+@@ -32,17 +32,13 @@ int main(int argc, char *argv[])
+     QApplication a(argc, argv);
+     QTranslator trans;
+     QString locale = QLocale::system().name();
+-    if(locale == "zh_CN")
+-    {
+-        if(trans.load(":/translations/gui_zh_CN.qm"))
+-        {
++    if (locale == "zh_CN") {
++        if (trans.load(":/translations/gui_zh_CN.qm")) {
+             a.installTranslator(&trans);
+         }
+     }
+-    if(locale == "bo_CN")
+-    {
+-        if(trans.load(":/translations/gui_bo_CN.qm"))
+-        {
++    if (locale == "bo_CN") {
++        if (trans.load(":/translations/gui_bo_CN.qm")) {
+             a.installTranslator(&trans);
+         }
+     }
+diff --git a/kysdk-qtwidgets/test/testnavigationbar/widget.cpp b/kysdk-qtwidgets/test/testnavigationbar/widget.cpp
+index 50bd2b7..2b237e4 100644
+--- a/kysdk-qtwidgets/test/testnavigationbar/widget.cpp
++++ b/kysdk-qtwidgets/test/testnavigationbar/widget.cpp
+@@ -27,31 +27,31 @@
+ Widget::Widget(QWidget *parent)
+     : KWidget(parent)
+ {
+-    QVBoxLayout* vLayout = new QVBoxLayout();
++    QVBoxLayout *vLayout = new QVBoxLayout();
+     m_pBar = new KNavigationBar(this);
+ 
+-    QStandardItem * item1 = new QStandardItem(QIcon::fromTheme("system-computer-symbolic"),tr("一级导航"));
+-    QStandardItem * item2 = new QStandardItem(QIcon::fromTheme("stock-people-symbolic"),tr("二级导航"));
++    QStandardItem *item1 = new QStandardItem(QIcon::fromTheme("system-computer-symbolic"), tr("一级导航"));
++    QStandardItem *item2 = new QStandardItem(QIcon::fromTheme("stock-people-symbolic"), tr("二级导航"));
+     QList<QStandardItem *> list;
+-    QStandardItem * item3 = new QStandardItem(QIcon::fromTheme("camera-switch-symbolic"),tr("一组一级导航1"));
+-    QStandardItem * item4 = new QStandardItem(QIcon::fromTheme("media-eq-symbolic"),tr("一组一级导航2"));
+-    list<<item3<<item4;
+-    m_pBar->addItem(item1);   //增加常规Item
+-    m_pBar->addSubItem(item2);   //增加次级Item
+-    m_pBar->addGroupItems(list,"测试一组");  //组增加Item,在导航栏中会显示tag
+-    QStandardItem * item5 = new QStandardItem(QIcon::fromTheme("camera-switch-symbolic"),tr("二组一级导航1"));
+-    QStandardItem * item6 = new QStandardItem(QIcon::fromTheme("media-eq-symbolic"),tr("二组一级导航2"));
+-    QStandardItem * item7 = new QStandardItem(QIcon::fromTheme("media-eq-symbolic"),tr("二组二级导航"));
++    QStandardItem *item3 = new QStandardItem(QIcon::fromTheme("camera-switch-symbolic"), tr("一组一级导航1"));
++    QStandardItem *item4 = new QStandardItem(QIcon::fromTheme("media-eq-symbolic"), tr("一组一级导航2"));
++    list << item3 << item4;
++    m_pBar->addItem(item1); // 增加常规Item
++    m_pBar->addSubItem(item2); // 增加次级Item
++    m_pBar->addGroupItems(list, "测试一组"); // 组增加Item,在导航栏中会显示tag
++    QStandardItem *item5 = new QStandardItem(QIcon::fromTheme("camera-switch-symbolic"), tr("二组一级导航1"));
++    QStandardItem *item6 = new QStandardItem(QIcon::fromTheme("media-eq-symbolic"), tr("二组一级导航2"));
++    QStandardItem *item7 = new QStandardItem(QIcon::fromTheme("media-eq-symbolic"), tr("二组二级导航"));
+     QList<QStandardItem *> list2;
+-    list2<<item5<<item6;
+-    m_pBar->addGroupItems(list2,"测试二组");
++    list2 << item5 << item6;
++    m_pBar->addGroupItems(list2, "测试二组");
+     m_pBar->addSubItem(item7);
+     m_pBar->addTag("测试三组");
+     vLayout->addWidget(m_pBar);
+     sideBar()->setLayout(vLayout);
+ 
+     vLayout = new QVBoxLayout;
+-    QLabel* pLabel = new QLabel(this);
++    QLabel *pLabel = new QLabel(this);
+     pLabel->setAlignment(Qt::AlignCenter);
+     vLayout->addWidget(pLabel);
+     baseBar()->setLayout(vLayout);
+@@ -61,16 +61,17 @@ Widget::Widget(QWidget *parent)
+     m_pBar->model()->item(3)->setEnabled(false);
+     m_pBar->model()->item(4)->setEnabled(false);
+ 
+-//    QListView* ba= m_pBar->listview(); //获取listview
+-//    ba->setDisabled(true);  //整体禁用
++    //    QListView* ba= m_pBar->listview(); //获取listview
++    //    ba->setDisabled(true);  //整体禁用
+ 
+-//    QStandardItemModel* m_mode = m_pBar->model();  //获取mode
++    //    QStandardItemModel* m_mode = m_pBar->model();  //获取mode
+ 
+-    connect(m_pBar->listview(),&QListView::clicked,this,[=](const QModelIndex &index){pLabel->setText(index.data().toString());});
++    connect(m_pBar->listview(), &QListView::clicked, this, [=](const QModelIndex &index) {
++        pLabel->setText(index.data().toString());
++    });
+     this->setLayoutType(HorizontalType);
+ }
+ 
+ Widget::~Widget()
+ {
+ }
+-
+diff --git a/kysdk-qtwidgets/test/testnavigationbar/widget.h b/kysdk-qtwidgets/test/testnavigationbar/widget.h
+index 40ec7c7..75e9a32 100644
+--- a/kysdk-qtwidgets/test/testnavigationbar/widget.h
++++ b/kysdk-qtwidgets/test/testnavigationbar/widget.h
+@@ -22,16 +22,15 @@
+ 
+ #ifndef WIDGET_H
+ #define WIDGET_H
++#include "knavigationbar.h"
+ #include "kwidget.h"
+ #include <QBoxLayout>
+-#include <QStandardItem>
+ #include <QList>
+-#include "knavigationbar.h"
++#include <QListView>
++#include <QModelIndex>
+ #include <QPushButton>
+ #include <QStandardItem>
+-#include <QModelIndex>
+ #include <QStandardItemModel>
+-#include <QListView>
+ 
+ using namespace kdk;
+ 
+@@ -44,6 +43,6 @@ public:
+     ~Widget();
+ 
+ private:
+-    KNavigationBar* m_pBar;
++    KNavigationBar *m_pBar;
+ };
+ #endif // WIDGET_H
+diff --git a/kysdk-qtwidgets/test/testnavigationtrail/widget.cpp b/kysdk-qtwidgets/test/testnavigationtrail/widget.cpp
+index 1380728..20722cc 100644
+--- a/kysdk-qtwidgets/test/testnavigationtrail/widget.cpp
++++ b/kysdk-qtwidgets/test/testnavigationtrail/widget.cpp
+@@ -6,8 +6,8 @@ using namespace kdk;
+ Widget::Widget(QWidget *parent)
+     : QWidget(parent)
+ {
+-    QHBoxLayout* layout =new QHBoxLayout(this);
+-    KNavigationTrail* trail = new KNavigationTrail();
++    QHBoxLayout *layout = new QHBoxLayout(this);
++    KNavigationTrail *trail = new KNavigationTrail();
+     KCrumb *crumb1 = trail->crumb();
+     crumb1->addTab("页面目录一,页面目录一");
+     crumb1->addTab("页面目录二,页面目录二");
+@@ -15,14 +15,14 @@ Widget::Widget(QWidget *parent)
+     crumb1->addTab("页面目录四,页面目录四");
+     crumb1->addTab("页面目录五,页面目录五");
+     crumb1->setFlat(false);
+-//    crumb1->setIcon(QIcon::fromTheme("dialog-info"));  //设置KBreadCrumb的图标
++    //    crumb1->setIcon(QIcon::fromTheme("dialog-info"));  //设置KBreadCrumb的图标
+     layout->addWidget(trail);
+-    connect(crumb1,&KCrumb::tabBarClicked,this,[=](int index){
+-        if(index == 1)
++    connect(crumb1, &KCrumb::tabBarClicked, this, [=](int index) {
++        if (index == 1)
+             trail->setPosition(ButtonPosition::LeftOrRight);
+-        if(index == 2)
++        if (index == 2)
+             trail->setPosition(ButtonPosition::LeftPosition);
+-        if(index == 3)
++        if (index == 3)
+             trail->setPosition(ButtonPosition::RightPosition);
+     });
+ }
+@@ -30,4 +30,3 @@ Widget::Widget(QWidget *parent)
+ Widget::~Widget()
+ {
+ }
+-
+diff --git a/kysdk-qtwidgets/test/testpasswordedit/main.cpp b/kysdk-qtwidgets/test/testpasswordedit/main.cpp
+index 0fe4772..b9c8610 100644
+--- a/kysdk-qtwidgets/test/testpasswordedit/main.cpp
++++ b/kysdk-qtwidgets/test/testpasswordedit/main.cpp
+@@ -22,9 +22,9 @@
+ 
+ #include "widget.h"
+ 
++#include "kwidgetutils.h"
+ #include <QApplication>
+ #include <QTranslator>
+-#include "kwidgetutils.h"
+ 
+ int main(int argc, char *argv[])
+ {
+@@ -32,17 +32,13 @@ int main(int argc, char *argv[])
+     QApplication a(argc, argv);
+     QTranslator trans;
+     QString locale = QLocale::system().name();
+-    if(locale == "zh_CN")
+-    {
+-        if(trans.load(":/translations/gui_zh_CN.qm"))
+-        {
++    if (locale == "zh_CN") {
++        if (trans.load(":/translations/gui_zh_CN.qm")) {
+             a.installTranslator(&trans);
+         }
+     }
+-    if(locale == "bo_CN")
+-    {
+-        if(trans.load(":/translations/gui_bo_CN.qm"))
+-        {
++    if (locale == "bo_CN") {
++        if (trans.load(":/translations/gui_bo_CN.qm")) {
+             a.installTranslator(&trans);
+         }
+     }
+diff --git a/kysdk-qtwidgets/test/testpasswordedit/widget.cpp b/kysdk-qtwidgets/test/testpasswordedit/widget.cpp
+index a85b52d..d01cc14 100644
+--- a/kysdk-qtwidgets/test/testpasswordedit/widget.cpp
++++ b/kysdk-qtwidgets/test/testpasswordedit/widget.cpp
+@@ -21,9 +21,9 @@
+  */
+ 
+ #include "widget.h"
+-#include <QVBoxLayout>
+-#include <QPushButton>
+ #include <QLabel>
++#include <QPushButton>
++#include <QVBoxLayout>
+ 
+ static const QString password = "kylin";
+ Widget::Widget(QWidget *parent)
+@@ -37,69 +37,61 @@ Widget::Widget(QWidget *parent)
+     m_pPasswordEdit1 = new KPasswordEdit(this);
+     m_pPasswordEdit2 = new KPasswordEdit(this);
+ 
+-
+-    QPushButton *confirmBtn = new QPushButton("confirm",this);
++    QPushButton *confirmBtn = new QPushButton("confirm", this);
+     hLayout->addWidget(confirmBtn);
+ 
+     vLayout->addLayout(hLayout);
+     vLayout->addWidget(m_pPasswordEdit1);
+     vLayout->addWidget(m_pPasswordEdit2);
+     hLayout = new QHBoxLayout(this);
+-    QPushButton *enableBtn = new QPushButton("enable",this);
++    QPushButton *enableBtn = new QPushButton("enable", this);
+     hLayout->addWidget(enableBtn);
+-    QPushButton *loadingBtn = new QPushButton("isLoading:false",this);
++    QPushButton *loadingBtn = new QPushButton("isLoading:false", this);
+     hLayout->addWidget(loadingBtn);
+     vLayout->addLayout(hLayout);
+     this->baseBar()->setLayout(vLayout);
+ 
+     QString str("dwadwa");
+-   m_pPasswordEdit1->setPlaceholderText(str);//设置背景文字
+-   m_pPasswordEdit1->setClearButtonEnabled(false); //禁用ClearBtn按钮
+-   m_pPasswordEdit2->setEchoModeBtnVisible(false); //隐藏EchoMode按钮
+-   bool flag = m_pPasswordEdit2->echoModeBtnVisible();//返回EchoMode按钮是否隐藏
+-   m_pPasswordEdit2->setEchoMode(QLineEdit::EchoMode::Normal);//明文输入
+-   m_pPasswordEdit->setClearBtnVisible(false);  //隐藏ClearBtn按钮(启用但隐藏)
+-   bool flag1 =m_pPasswordEdit->clearBtnVisible();//返回ClearBtn按钮是否隐藏
+-
++    m_pPasswordEdit1->setPlaceholderText(str); // 设置背景文字
++    m_pPasswordEdit1->setClearButtonEnabled(false); // 禁用ClearBtn按钮
++    m_pPasswordEdit2->setEchoModeBtnVisible(false); // 隐藏EchoMode按钮
++    bool flag = m_pPasswordEdit2->echoModeBtnVisible(); // 返回EchoMode按钮是否隐藏
++    m_pPasswordEdit2->setEchoMode(QLineEdit::EchoMode::Normal); // 明文输入
++    m_pPasswordEdit->setClearBtnVisible(false); // 隐藏ClearBtn按钮(启用但隐藏)
++    bool flag1 = m_pPasswordEdit->clearBtnVisible(); // 返回ClearBtn按钮是否隐藏
+ 
+-    connect(confirmBtn,&QPushButton::clicked,this,[=](){
+-        if(m_pPasswordEdit->text() == password)
+-            m_pPasswordEdit->setState(LoginState::LoginSuccess);  //设置登录状态
++    connect(confirmBtn, &QPushButton::clicked, this, [=]() {
++        if (m_pPasswordEdit->text() == password)
++            m_pPasswordEdit->setState(LoginState::LoginSuccess); // 设置登录状态
+ 
+         else
+             m_pPasswordEdit->setState(LoginState::LoginFailed);
+         m_pPasswordEdit->setFocus();
+     });
+-    connect(m_pPasswordEdit,&KPasswordEdit::returnPressed,this,[=](){
+-        if(m_pPasswordEdit->text() == password)
++    connect(m_pPasswordEdit, &KPasswordEdit::returnPressed, this, [=]() {
++        if (m_pPasswordEdit->text() == password)
+             m_pPasswordEdit->setState(LoginState::LoginSuccess);
+ 
+         else
+             m_pPasswordEdit->setState(LoginState::LoginFailed);
+         m_pPasswordEdit->setFocus();
+     });
+-    connect(enableBtn,&QPushButton::clicked,this,[=](){
+-        if(m_pPasswordEdit->isEnabled())
+-        {
+-            m_pPasswordEdit->setEnabled(false);  //设置KLineEdit不可用
++    connect(enableBtn, &QPushButton::clicked, this, [=]() {
++        if (m_pPasswordEdit->isEnabled()) {
++            m_pPasswordEdit->setEnabled(false); // 设置KLineEdit不可用
+             enableBtn->setText("disable");
+-        }
+-        else
+-        {
++        } else {
+             m_pPasswordEdit->setEnabled(true);
+             enableBtn->setText("enable");
+         }
+     });
+-    connect(loadingBtn,&QPushButton::clicked,this,[=](){
+-        if(!m_pPasswordEdit->isLoading())
+-        {
+-            qDebug()<<"is loading";
+-            m_pPasswordEdit->setLoading(true);  //设置启用加载状态
++    connect(loadingBtn, &QPushButton::clicked, this, [=]() {
++        if (!m_pPasswordEdit->isLoading()) {
++            qDebug() << "is loading";
++            m_pPasswordEdit->setLoading(true); // 设置启用加载状态
+             loadingBtn->setText("isLoading:true");
+-        }
+-        else
+-        {
+-            qDebug()<<"is not loading";
++        } else {
++            qDebug() << "is not loading";
+             m_pPasswordEdit->setLoading(false);
+             loadingBtn->setText("isLoading:false");
+         }
+@@ -109,4 +101,3 @@ Widget::Widget(QWidget *parent)
+ Widget::~Widget()
+ {
+ }
+-
+diff --git a/kysdk-qtwidgets/test/testpasswordedit/widget.h b/kysdk-qtwidgets/test/testpasswordedit/widget.h
+index 10b07c4..5d2248e 100644
+--- a/kysdk-qtwidgets/test/testpasswordedit/widget.h
++++ b/kysdk-qtwidgets/test/testpasswordedit/widget.h
+@@ -23,8 +23,8 @@
+ #ifndef WIDGET_H
+ #define WIDGET_H
+ 
+-#include "kwidget.h"
+ #include "kpasswordedit.h"
++#include "kwidget.h"
+ 
+ using namespace kdk;
+ 
+@@ -37,8 +37,8 @@ public:
+     ~Widget();
+ 
+ private:
+-    KPasswordEdit* m_pPasswordEdit;
+-    KPasswordEdit* m_pPasswordEdit1;
+-    KPasswordEdit* m_pPasswordEdit2;
++    KPasswordEdit *m_pPasswordEdit;
++    KPasswordEdit *m_pPasswordEdit1;
++    KPasswordEdit *m_pPasswordEdit2;
+ };
+ #endif // WIDGET_H
+diff --git a/kysdk-qtwidgets/test/testprogressbar/main.cpp b/kysdk-qtwidgets/test/testprogressbar/main.cpp
+index 904b36c..8cfcaac 100644
+--- a/kysdk-qtwidgets/test/testprogressbar/main.cpp
++++ b/kysdk-qtwidgets/test/testprogressbar/main.cpp
+@@ -30,17 +30,13 @@ int main(int argc, char *argv[])
+     QApplication a(argc, argv);
+     QTranslator trans;
+     QString locale = QLocale::system().name();
+-    if(locale == "zh_CN")
+-    {
+-        if(trans.load(":/translations/gui_zh_CN.qm"))
+-        {
++    if (locale == "zh_CN") {
++        if (trans.load(":/translations/gui_zh_CN.qm")) {
+             a.installTranslator(&trans);
+         }
+     }
+-    if(locale == "bo_CN")
+-    {
+-        if(trans.load(":/translations/gui_bo_CN.qm"))
+-        {
++    if (locale == "bo_CN") {
++        if (trans.load(":/translations/gui_bo_CN.qm")) {
+             a.installTranslator(&trans);
+         }
+     }
+diff --git a/kysdk-qtwidgets/test/testprogressbar/widget.cpp b/kysdk-qtwidgets/test/testprogressbar/widget.cpp
+index 10eeae4..22c257f 100644
+--- a/kysdk-qtwidgets/test/testprogressbar/widget.cpp
++++ b/kysdk-qtwidgets/test/testprogressbar/widget.cpp
+@@ -29,18 +29,18 @@ Widget::Widget(QWidget *parent)
+ {
+     m_pTimer = new QTimer(this);
+     m_pTimer->setInterval(50);
+-    QVBoxLayout* vLayout = new QVBoxLayout(this);
+-    QHBoxLayout* tmpLayout = new QHBoxLayout();
++    QVBoxLayout *vLayout = new QVBoxLayout(this);
++    QHBoxLayout *tmpLayout = new QHBoxLayout();
+     m_pVerticalBar = new KProgressBar(this);
+-    m_pVerticalBar->setOrientation(Qt::Vertical);  //设置KProgressBar方向
++    m_pVerticalBar->setOrientation(Qt::Vertical); // 设置KProgressBar方向
+     m_pVerticalBar->setTextVisible(false);
+-    m_pVerticalBar->setRange(0,100);
++    m_pVerticalBar->setRange(0, 100);
+     m_pVerticalBar->setValue(50);
+     tmpLayout->addWidget(m_pVerticalBar);
+     vLayout->addLayout(tmpLayout);
+-    QHBoxLayout* hLayout = new QHBoxLayout(this);
++    QHBoxLayout *hLayout = new QHBoxLayout(this);
+     m_pHorizontalBar = new KProgressBar(this);
+-    m_pHorizontalBar->setRange(0,100);
++    m_pHorizontalBar->setRange(0, 100);
+     m_pHorizontalBar->setValue(50);
+     hLayout->addWidget(m_pHorizontalBar);
+     vLayout->addLayout(hLayout);
+@@ -58,35 +58,31 @@ Widget::Widget(QWidget *parent)
+     hLayout->addStretch();
+     vLayout->addLayout(hLayout);
+     baseBar()->setLayout(vLayout);
+-    connect(m_pTimer,&QTimer::timeout,this,[=](){
+-        if(m_pVerticalBar->value() != m_pVerticalBar->maximum())
+-            m_pVerticalBar->setValue(m_pVerticalBar->value()+1);
+-        else
+-        {
++    connect(m_pTimer, &QTimer::timeout, this, [=]() {
++        if (m_pVerticalBar->value() != m_pVerticalBar->maximum())
++            m_pVerticalBar->setValue(m_pVerticalBar->value() + 1);
++        else {
+             m_pVerticalBar->setValue(m_pVerticalBar->minimum());
+-            m_pVerticalBar->setState(ProgressBarState::NormalProgress);  //设置KprogressBar状态
++            m_pVerticalBar->setState(ProgressBarState::NormalProgress); // 设置KprogressBar状态
+         }
+-        if(m_pHorizontalBar->value() != m_pHorizontalBar->maximum())
+-            m_pHorizontalBar->setValue(m_pHorizontalBar->value()+1);
+-        else
+-        {
++        if (m_pHorizontalBar->value() != m_pHorizontalBar->maximum())
++            m_pHorizontalBar->setValue(m_pHorizontalBar->value() + 1);
++        else {
+             m_pHorizontalBar->setValue(m_pHorizontalBar->minimum());
+             m_pHorizontalBar->setState(ProgressBarState::NormalProgress);
+         }
+     });
+-    connect(m_pStartBtn,&QPushButton::clicked,this,[=](){
+-        if(!m_pTimer->isActive())
++    connect(m_pStartBtn, &QPushButton::clicked, this, [=]() {
++        if (!m_pTimer->isActive())
+             m_pTimer->start();
+-        //qDebug() << m_pVerticalBar->text(); //获取文本值
++        // qDebug() << m_pVerticalBar->text(); //获取文本值
+     });
+-    connect(m_pStopBtn,&QPushButton::clicked,this,[=]()
+-    {
++    connect(m_pStopBtn, &QPushButton::clicked, this, [=]() {
+         m_pTimer->stop();
+         m_pVerticalBar->setState(ProgressBarState::FailedProgress);
+         m_pHorizontalBar->setState(ProgressBarState::FailedProgress);
+     });
+-    connect(m_pRestoreBtn,&QPushButton::clicked,this,[=]()
+-    {
++    connect(m_pRestoreBtn, &QPushButton::clicked, this, [=]() {
+         m_pTimer->start();
+         m_pVerticalBar->setValue(0);
+         m_pVerticalBar->setState(ProgressBarState::NormalProgress);
+@@ -97,6 +93,4 @@ Widget::Widget(QWidget *parent)
+ 
+ Widget::~Widget()
+ {
+-
+ }
+-
+diff --git a/kysdk-qtwidgets/test/testprogressbar/widget.h b/kysdk-qtwidgets/test/testprogressbar/widget.h
+index 1ee3f69..cb1c43b 100644
+--- a/kysdk-qtwidgets/test/testprogressbar/widget.h
++++ b/kysdk-qtwidgets/test/testprogressbar/widget.h
+@@ -23,8 +23,8 @@
+ #ifndef WIDGET_H
+ #define WIDGET_H
+ 
+-#include "kwidget.h"
+ #include "kprogressbar.h"
++#include "kwidget.h"
+ #include <QPushButton>
+ #include <QTimer>
+ 
+@@ -38,11 +38,11 @@ public:
+     ~Widget();
+ 
+ private:
+-    KProgressBar* m_pVerticalBar;
+-    KProgressBar* m_pHorizontalBar;
+-    QPushButton* m_pStartBtn;
+-    QPushButton* m_pStopBtn;
+-    QPushButton* m_pRestoreBtn;
+-    QTimer* m_pTimer;
++    KProgressBar *m_pVerticalBar;
++    KProgressBar *m_pHorizontalBar;
++    QPushButton *m_pStartBtn;
++    QPushButton *m_pStopBtn;
++    QPushButton *m_pRestoreBtn;
++    QTimer *m_pTimer;
+ };
+ #endif // WIDGET_H
+diff --git a/kysdk-qtwidgets/test/testprogressdialog/main.cpp b/kysdk-qtwidgets/test/testprogressdialog/main.cpp
+index 0fe4772..b9c8610 100644
+--- a/kysdk-qtwidgets/test/testprogressdialog/main.cpp
++++ b/kysdk-qtwidgets/test/testprogressdialog/main.cpp
+@@ -22,9 +22,9 @@
+ 
+ #include "widget.h"
+ 
++#include "kwidgetutils.h"
+ #include <QApplication>
+ #include <QTranslator>
+-#include "kwidgetutils.h"
+ 
+ int main(int argc, char *argv[])
+ {
+@@ -32,17 +32,13 @@ int main(int argc, char *argv[])
+     QApplication a(argc, argv);
+     QTranslator trans;
+     QString locale = QLocale::system().name();
+-    if(locale == "zh_CN")
+-    {
+-        if(trans.load(":/translations/gui_zh_CN.qm"))
+-        {
++    if (locale == "zh_CN") {
++        if (trans.load(":/translations/gui_zh_CN.qm")) {
+             a.installTranslator(&trans);
+         }
+     }
+-    if(locale == "bo_CN")
+-    {
+-        if(trans.load(":/translations/gui_bo_CN.qm"))
+-        {
++    if (locale == "bo_CN") {
++        if (trans.load(":/translations/gui_bo_CN.qm")) {
+             a.installTranslator(&trans);
+         }
+     }
+diff --git a/kysdk-qtwidgets/test/testprogressdialog/widget.cpp b/kysdk-qtwidgets/test/testprogressdialog/widget.cpp
+index 4ea9caa..08a655e 100644
+--- a/kysdk-qtwidgets/test/testprogressdialog/widget.cpp
++++ b/kysdk-qtwidgets/test/testprogressdialog/widget.cpp
+@@ -22,33 +22,33 @@
+ 
+ #include "widget.h"
+ #include "kprogressbar.h"
+-#include <QVBoxLayout>
+ #include <QPushButton>
++#include <QVBoxLayout>
+ 
+ using namespace kdk;
+ 
+ Widget::Widget(QWidget *parent)
+     : KWidget(parent)
+ {
+-    KProgressDialog *progressDialog = new KProgressDialog(tr("运行中"),tr("取消"),0,100,this);
+-    progressDialog->setSubContent("正在下载...");   //设置次级内容
+-    progressDialog->setSuffix("MB");      //设置detail的后缀
+-    progressDialog->setWindowTitle("进度对话框");   //设置窗口标题
+-    progressDialog->setWindowIcon("kylin-music");  //设置窗口图标
+-    progressDialog->setValue(98);    //设置当前进度值
+-    progressDialog->setShowDetail(true);        //设置是否显示详细信息
+-    progressDialog->setAutoReset(false);        //设置进度条是否重置
+-
+-
+-    QPushButton *pBtn = new QPushButton("显示",this);
++    KProgressDialog *progressDialog = new KProgressDialog(tr("运行中"), tr("取消"), 0, 100, this);
++    progressDialog->setSubContent("正在下载..."); // 设置次级内容
++    progressDialog->setSuffix("MB"); // 设置detail的后缀
++    progressDialog->setWindowTitle("进度对话框"); // 设置窗口标题
++    progressDialog->setWindowIcon("kylin-music"); // 设置窗口图标
++    progressDialog->setValue(98); // 设置当前进度值
++    progressDialog->setShowDetail(true); // 设置是否显示详细信息
++    progressDialog->setAutoReset(false); // 设置进度条是否重置
++
++    QPushButton *pBtn = new QPushButton("显示", this);
+     QVBoxLayout *vLayout = new QVBoxLayout(this);
+     vLayout->addWidget(pBtn);
+     baseBar()->setLayout(vLayout);
+ 
+-    connect(pBtn,&QPushButton::clicked,this,[=](){progressDialog->show();});
++    connect(pBtn, &QPushButton::clicked, this, [=]() {
++        progressDialog->show();
++    });
+ }
+ 
+ Widget::~Widget()
+ {
+ }
+-
+diff --git a/kysdk-qtwidgets/test/testprogressdialog/widget.h b/kysdk-qtwidgets/test/testprogressdialog/widget.h
+index 59ce269..cc29bf5 100644
+--- a/kysdk-qtwidgets/test/testprogressdialog/widget.h
++++ b/kysdk-qtwidgets/test/testprogressdialog/widget.h
+@@ -23,8 +23,8 @@
+ #ifndef WIDGET_H
+ #define WIDGET_H
+ 
+-#include "kwidget.h"
+ #include "kprogressdialog.h"
++#include "kwidget.h"
+ 
+ using namespace kdk;
+ 
+diff --git a/kysdk-qtwidgets/test/testprogresslabel/widget.cpp b/kysdk-qtwidgets/test/testprogresslabel/widget.cpp
+index 1afafda..bd12823 100644
+--- a/kysdk-qtwidgets/test/testprogresslabel/widget.cpp
++++ b/kysdk-qtwidgets/test/testprogresslabel/widget.cpp
+@@ -1,7 +1,7 @@
+ #include "widget.h"
+ #include "kprogresslabel.h"
+-#include <QPushButton>
+ #include <QDebug>
++#include <QPushButton>
+ 
+ using namespace kdk;
+ 
+@@ -10,7 +10,7 @@ Widget::Widget(QWidget *parent)
+ {
+     QVBoxLayout *vlayout = new QVBoxLayout(this);
+     QHBoxLayout *layout = new QHBoxLayout();
+-    KProgressLabel* label= new KProgressLabel();
++    KProgressLabel *label = new KProgressLabel();
+     QStringList list;
+     list.append("11");
+     list.append("22");
+@@ -25,29 +25,28 @@ Widget::Widget(QWidget *parent)
+     list2.append("4");
+     list2.append("5");
+     label->setStringList(list);
+-    label->setCircleSize(QSize(24,24));
++    label->setCircleSize(QSize(24, 24));
+     label->setCurrentIndex(1);
+-//    label->setStyleSheet("background :red");
++    //    label->setStyleSheet("background :red");
+ 
+-    QPushButton* btn1 = new QPushButton("");
++    QPushButton *btn1 = new QPushButton("");
+ 
+-    QPushButton* btn2 = new QPushButton("");
++    QPushButton *btn2 = new QPushButton("");
+ 
+     layout->addWidget(btn1);
+     layout->addWidget(btn2);
+     vlayout->addWidget(label);
+     vlayout->addLayout(layout);
+-    connect(btn1,&QPushButton::clicked,this,[=]{
+-        label->setCurrentIndex(label->currentIndex() -1 );
+-        qDebug()<<label->size();
++    connect(btn1, &QPushButton::clicked, this, [=] {
++        label->setCurrentIndex(label->currentIndex() - 1);
++        qDebug() << label->size();
+     });
+-    connect(btn2,&QPushButton::clicked,this,[=]{
++    connect(btn2, &QPushButton::clicked, this, [=] {
+         label->setCurrentIndex(label->currentIndex() + 1);
+     });
+-    setFixedSize(600,500);
++    setFixedSize(600, 500);
+ }
+ 
+ Widget::~Widget()
+ {
+ }
+-
+diff --git a/kysdk-qtwidgets/test/testsearchlinedit/main.cpp b/kysdk-qtwidgets/test/testsearchlinedit/main.cpp
+index 0fe4772..b9c8610 100644
+--- a/kysdk-qtwidgets/test/testsearchlinedit/main.cpp
++++ b/kysdk-qtwidgets/test/testsearchlinedit/main.cpp
+@@ -22,9 +22,9 @@
+ 
+ #include "widget.h"
+ 
++#include "kwidgetutils.h"
+ #include <QApplication>
+ #include <QTranslator>
+-#include "kwidgetutils.h"
+ 
+ int main(int argc, char *argv[])
+ {
+@@ -32,17 +32,13 @@ int main(int argc, char *argv[])
+     QApplication a(argc, argv);
+     QTranslator trans;
+     QString locale = QLocale::system().name();
+-    if(locale == "zh_CN")
+-    {
+-        if(trans.load(":/translations/gui_zh_CN.qm"))
+-        {
++    if (locale == "zh_CN") {
++        if (trans.load(":/translations/gui_zh_CN.qm")) {
+             a.installTranslator(&trans);
+         }
+     }
+-    if(locale == "bo_CN")
+-    {
+-        if(trans.load(":/translations/gui_bo_CN.qm"))
+-        {
++    if (locale == "bo_CN") {
++        if (trans.load(":/translations/gui_bo_CN.qm")) {
+             a.installTranslator(&trans);
+         }
+     }
+diff --git a/kysdk-qtwidgets/test/testsearchlinedit/widget.cpp b/kysdk-qtwidgets/test/testsearchlinedit/widget.cpp
+index 2d7db06..adc8640 100644
+--- a/kysdk-qtwidgets/test/testsearchlinedit/widget.cpp
++++ b/kysdk-qtwidgets/test/testsearchlinedit/widget.cpp
+@@ -28,51 +28,49 @@
+ Widget::Widget(QWidget *parent)
+     : KWidget(parent)
+ {
+-    QVBoxLayout*mainLayout = new QVBoxLayout;
++    QVBoxLayout *mainLayout = new QVBoxLayout;
+     mainLayout->addStretch();
+ 
+-
+-    QHBoxLayout*hLayout = new QHBoxLayout;
+-    m_pSearchLineEdit1 = new KSearchLineEdit(this);     //构造一个搜索框
+-    //m_pSearchLineEdit1->setPlaceholderAlignment(Qt::AlignCenter);     //设置placeholder的对齐方式
+-    m_pSearchLineEdit1->setClearButtonEnabled(true);    //是否启用清除键(true为启用)
+-    m_pSearchLineEdit1->setPlaceholderText("此处需要输入很长非常长的需要查找的内容");   //设置placeholder的文本内容
+-    m_pSearchLineEdit1->setAlignment(Qt::AlignLeft);    //设置输入内容的对齐方式
++    QHBoxLayout *hLayout = new QHBoxLayout;
++    m_pSearchLineEdit1 = new KSearchLineEdit(this); // 构造一个搜索框
++    // m_pSearchLineEdit1->setPlaceholderAlignment(Qt::AlignCenter);     //设置placeholder的对齐方式
++    m_pSearchLineEdit1->setClearButtonEnabled(true); // 是否启用清除键(true为启用)
++    m_pSearchLineEdit1->setPlaceholderText("此处需要输入很长非常长的需要查找的内容"); // 设置placeholder的文本内容
++    m_pSearchLineEdit1->setAlignment(Qt::AlignLeft); // 设置输入内容的对齐方式
+     m_pLabel1 = new QLabel(this);
+     hLayout->addWidget(m_pSearchLineEdit1);
+ 
+-    QPushButton* btn1 = new QPushButton(this);
++    QPushButton *btn1 = new QPushButton(this);
+     btn1->setText("隐藏");
+-    QPushButton* btn2 = new QPushButton(this);
++    QPushButton *btn2 = new QPushButton(this);
+     btn2->setText("显示");
+-    btn2->move(110,0);
+-    QPushButton* btn3 = new QPushButton(this);
++    btn2->move(110, 0);
++    QPushButton *btn3 = new QPushButton(this);
+     btn3->setText("清除");
+-    btn3->move(220,0);
++    btn3->move(220, 0);
+ 
+-    connect(btn1,&QPushButton::clicked,this,[=]{
++    connect(btn1, &QPushButton::clicked, this, [=] {
+         m_pSearchLineEdit1->hide();
+     });
+-    connect(btn2,&QPushButton::clicked,this,[=]{
++    connect(btn2, &QPushButton::clicked, this, [=] {
+         m_pSearchLineEdit1->show();
+     });
+-    connect(btn3,&QPushButton::clicked,this,[=]{
++    connect(btn3, &QPushButton::clicked, this, [=] {
+         m_pSearchLineEdit1->clear();
+     });
+ 
+-    connect(m_pSearchLineEdit1,&KSearchLineEdit::returnPressed,this,[=](){
++    connect(m_pSearchLineEdit1, &KSearchLineEdit::returnPressed, this, [=]() {
+         m_pLabel1->setText(QString("Search Content is:%1").arg(m_pSearchLineEdit1->text()));
+     });
+     mainLayout->addLayout(hLayout);
+     mainLayout->addWidget(m_pLabel1);
+ 
+-
+     hLayout = new QHBoxLayout;
+     m_pSearchLineEdit2 = new KSearchLineEdit(this);
+     m_pLabel2 = new QLabel(this);
+-    m_pSearchLineEdit2->setEnabled(false);     //设置搜索框是否可用
++    m_pSearchLineEdit2->setEnabled(false); // 设置搜索框是否可用
+     hLayout->addWidget(m_pSearchLineEdit2);
+-    connect(m_pSearchLineEdit2,&KSearchLineEdit::returnPressed,this,[=](){
++    connect(m_pSearchLineEdit2, &KSearchLineEdit::returnPressed, this, [=]() {
+         m_pLabel2->setText(QString("Search Content is:%1").arg(m_pSearchLineEdit2->text()));
+     });
+     mainLayout->addLayout(hLayout);
+@@ -84,5 +82,3 @@ Widget::Widget(QWidget *parent)
+ Widget::~Widget()
+ {
+ }
+-
+-
+diff --git a/kysdk-qtwidgets/test/testsearchlinedit/widget.h b/kysdk-qtwidgets/test/testsearchlinedit/widget.h
+index 1e58455..66423d4 100644
+--- a/kysdk-qtwidgets/test/testsearchlinedit/widget.h
++++ b/kysdk-qtwidgets/test/testsearchlinedit/widget.h
+@@ -23,8 +23,8 @@
+ #ifndef WIDGET_H
+ #define WIDGET_H
+ 
+-#include "kwidget.h"
+ #include "ksearchlineedit.h"
++#include "kwidget.h"
+ #include <QLabel>
+ 
+ using namespace kdk;
+@@ -37,9 +37,9 @@ public:
+     ~Widget();
+ 
+ private:
+-    KSearchLineEdit* m_pSearchLineEdit1;
+-    QLabel* m_pLabel1;
+-    KSearchLineEdit* m_pSearchLineEdit2;
+-    QLabel* m_pLabel2;
++    KSearchLineEdit *m_pSearchLineEdit1;
++    QLabel *m_pLabel1;
++    KSearchLineEdit *m_pSearchLineEdit2;
++    QLabel *m_pLabel2;
+ };
+ #endif // WIDGET_H
+diff --git a/kysdk-qtwidgets/test/testsecuritylevelbar/main.cpp b/kysdk-qtwidgets/test/testsecuritylevelbar/main.cpp
+index 0fe4772..b9c8610 100644
+--- a/kysdk-qtwidgets/test/testsecuritylevelbar/main.cpp
++++ b/kysdk-qtwidgets/test/testsecuritylevelbar/main.cpp
+@@ -22,9 +22,9 @@
+ 
+ #include "widget.h"
+ 
++#include "kwidgetutils.h"
+ #include <QApplication>
+ #include <QTranslator>
+-#include "kwidgetutils.h"
+ 
+ int main(int argc, char *argv[])
+ {
+@@ -32,17 +32,13 @@ int main(int argc, char *argv[])
+     QApplication a(argc, argv);
+     QTranslator trans;
+     QString locale = QLocale::system().name();
+-    if(locale == "zh_CN")
+-    {
+-        if(trans.load(":/translations/gui_zh_CN.qm"))
+-        {
++    if (locale == "zh_CN") {
++        if (trans.load(":/translations/gui_zh_CN.qm")) {
+             a.installTranslator(&trans);
+         }
+     }
+-    if(locale == "bo_CN")
+-    {
+-        if(trans.load(":/translations/gui_bo_CN.qm"))
+-        {
++    if (locale == "bo_CN") {
++        if (trans.load(":/translations/gui_bo_CN.qm")) {
+             a.installTranslator(&trans);
+         }
+     }
+diff --git a/kysdk-qtwidgets/test/testsecuritylevelbar/widget.cpp b/kysdk-qtwidgets/test/testsecuritylevelbar/widget.cpp
+index 5cee7a9..cc65189 100644
+--- a/kysdk-qtwidgets/test/testsecuritylevelbar/widget.cpp
++++ b/kysdk-qtwidgets/test/testsecuritylevelbar/widget.cpp
+@@ -26,9 +26,9 @@
+ Widget::Widget(QWidget *parent)
+     : KWidget(parent)
+ {
+-    QVBoxLayout* vLayout = new QVBoxLayout();
+-    QHBoxLayout*hLayout = new QHBoxLayout();
+-    m_pInfoLabel = new QLabel("请设置密码:",this);
++    QVBoxLayout *vLayout = new QVBoxLayout();
++    QHBoxLayout *hLayout = new QHBoxLayout();
++    m_pInfoLabel = new QLabel("请设置密码:", this);
+     m_pLineEdit = new QLineEdit(this);
+     m_pLineEdit->setEchoMode(QLineEdit::Password);
+     hLayout->addWidget(m_pInfoLabel);
+@@ -36,19 +36,19 @@ Widget::Widget(QWidget *parent)
+     vLayout->addStretch();
+     vLayout->addLayout(hLayout);
+     hLayout = new QHBoxLayout();
+-    m_pBar = new KSecurityLevelBar(this);       //构建一个安全等级提示条
+-    m_pBar->hide();       //隐藏安全等级提示条
++    m_pBar = new KSecurityLevelBar(this); // 构建一个安全等级提示条
++    m_pBar->hide(); // 隐藏安全等级提示条
+     hLayout->addWidget(m_pBar);
+     vLayout->addLayout(hLayout);
+     vLayout->addStretch();
+     baseBar()->setLayout(vLayout);
+ 
+-    //连接槽函数,根据输入密码的长度来设置安全等级进度条的等级并显示。
+-    connect(m_pLineEdit,&QLineEdit::textChanged,this,[=](){
++    // 连接槽函数,根据输入密码的长度来设置安全等级进度条的等级并显示。
++    connect(m_pLineEdit, &QLineEdit::textChanged, this, [=]() {
+         int length = m_pLineEdit->text().length();
+-        if(length<8)
+-            m_pBar->setSecurityLevel(SecurityLevel::Low);   //设置安全等级
+-        else if(length >=8 && length<12)
++        if (length < 8)
++            m_pBar->setSecurityLevel(SecurityLevel::Low); // 设置安全等级
++        else if (length >= 8 && length < 12)
+             m_pBar->setSecurityLevel(SecurityLevel::Medium);
+         else
+             m_pBar->setSecurityLevel(SecurityLevel::High);
+@@ -59,4 +59,3 @@ Widget::Widget(QWidget *parent)
+ Widget::~Widget()
+ {
+ }
+-
+diff --git a/kysdk-qtwidgets/test/testsecuritylevelbar/widget.h b/kysdk-qtwidgets/test/testsecuritylevelbar/widget.h
+index 4889527..0c15852 100644
+--- a/kysdk-qtwidgets/test/testsecuritylevelbar/widget.h
++++ b/kysdk-qtwidgets/test/testsecuritylevelbar/widget.h
+@@ -23,8 +23,8 @@
+ #ifndef WIDGET_H
+ #define WIDGET_H
+ 
+-#include "kwidget.h"
+ #include "ksecuritylevelbar.h"
++#include "kwidget.h"
+ #include <QLabel>
+ #include <QLineEdit>
+ #include <QPushButton>
+@@ -39,9 +39,9 @@ public:
+     ~Widget();
+ 
+ private:
+-    KSecurityLevelBar* m_pBar;
+-    QLineEdit* m_pLineEdit;
+-    QLabel* m_pInfoLabel;
+-    QPushButton* m_pBtn;
++    KSecurityLevelBar *m_pBar;
++    QLineEdit *m_pLineEdit;
++    QLabel *m_pInfoLabel;
++    QPushButton *m_pBtn;
+ };
+ #endif // WIDGET_H
+diff --git a/kysdk-qtwidgets/test/testsecurityquestiondialog/dialog.cpp b/kysdk-qtwidgets/test/testsecurityquestiondialog/dialog.cpp
+index 326639d..9c40000 100644
+--- a/kysdk-qtwidgets/test/testsecurityquestiondialog/dialog.cpp
++++ b/kysdk-qtwidgets/test/testsecurityquestiondialog/dialog.cpp
+@@ -6,13 +6,16 @@ using namespace kdk;
+ 
+ Dialog::Dialog()
+ {
+-    KSecurityQuestionDialog *questionDialog =  new KSecurityQuestionDialog();
++    KSecurityQuestionDialog *questionDialog = new KSecurityQuestionDialog();
+     questionDialog->setWindowIcon("ukui-control-center");
+     questionDialog->setWindowTitle("Security Question");
+     questionDialog->setTitleText(tr("Answer the security questions and reset your password"));
+     questionDialog->addSecurityQuestionItem(3, true);
+     QStringList AA;
+-    AA << "111" << "222" << "333" << "444";
++    AA << "111"
++       << "222"
++       << "333"
++       << "444";
+     questionDialog->initQustionCombox(AA);
+ 
+     if (questionDialog->answerLabel(1) != nullptr) {
+@@ -38,7 +41,7 @@ Dialog::Dialog()
+         qDebug() << questionDialog->tipsLabel(1)->text();
+     }
+ 
+-    connect(questionDialog->cancelButton(), &KPushButton::clicked, this, [=](){
++    connect(questionDialog->cancelButton(), &KPushButton::clicked, this, [=]() {
+         questionDialog->close();
+     });
+ 
+diff --git a/kysdk-qtwidgets/test/testsecurityquestiondialog/dialog.h b/kysdk-qtwidgets/test/testsecurityquestiondialog/dialog.h
+index cf08476..2b457a1 100644
+--- a/kysdk-qtwidgets/test/testsecurityquestiondialog/dialog.h
++++ b/kysdk-qtwidgets/test/testsecurityquestiondialog/dialog.h
+@@ -3,7 +3,7 @@
+ 
+ #include <QObject>
+ 
+-class Dialog: QObject
++class Dialog : QObject
+ {
+     Q_OBJECT
+ public:
+diff --git a/kysdk-qtwidgets/test/testsecurityquestiondialog/main.cpp b/kysdk-qtwidgets/test/testsecurityquestiondialog/main.cpp
+index 2659664..5ccf735 100644
+--- a/kysdk-qtwidgets/test/testsecurityquestiondialog/main.cpp
++++ b/kysdk-qtwidgets/test/testsecurityquestiondialog/main.cpp
+@@ -1,6 +1,6 @@
++#include "dialog.h"
+ #include <QApplication>
+ #include <QTranslator>
+-#include "dialog.h"
+ 
+ int main(int argc, char *argv[])
+ {
+@@ -8,8 +8,7 @@ int main(int argc, char *argv[])
+ 
+     // sdk翻译加载
+     QTranslator trans;
+-    if(trans.load(":/translations/gui_"+QLocale::system().name()+".qm"))
+-    {
++    if (trans.load(":/translations/gui_" + QLocale::system().name() + ".qm")) {
+         a.installTranslator(&trans);
+     }
+ 
+diff --git a/kysdk-qtwidgets/test/testselector/widget.cpp b/kysdk-qtwidgets/test/testselector/widget.cpp
+index 6a571d8..f058167 100644
+--- a/kysdk-qtwidgets/test/testselector/widget.cpp
++++ b/kysdk-qtwidgets/test/testselector/widget.cpp
+@@ -6,23 +6,21 @@ using namespace kdk;
+ Widget::Widget(QWidget *parent)
+     : QWidget(parent)
+ {
+-    KSelector* selector = new KSelector(this);
++    KSelector *selector = new KSelector(this);
+     selector->label()->setText("关机频率");
+-//    QAction* action1 =new QAction("action1");
+-//    QAction* action2 =new QAction("action2");
+-//    QAction* action3 =new QAction("action3");
+-//    selector->comboBox()->addAction(action1);
+-//    selector->comboBox()->addAction(action2);
+-//    selector->comboBox()->addAction(action3);
++    //    QAction* action1 =new QAction("action1");
++    //    QAction* action2 =new QAction("action2");
++    //    QAction* action3 =new QAction("action3");
++    //    selector->comboBox()->addAction(action1);
++    //    selector->comboBox()->addAction(action2);
++    //    selector->comboBox()->addAction(action3);
+     selector->comboBox()->addItem("1");
+     selector->comboBox()->addItem("2");
+     selector->comboBox()->addItem("3");
+ 
+     setFocusPolicy(Qt::ClickFocus);
+-
+ }
+ 
+ Widget::~Widget()
+ {
+ }
+-
+diff --git a/kysdk-qtwidgets/test/testslider/main.cpp b/kysdk-qtwidgets/test/testslider/main.cpp
+index 0fe4772..b9c8610 100644
+--- a/kysdk-qtwidgets/test/testslider/main.cpp
++++ b/kysdk-qtwidgets/test/testslider/main.cpp
+@@ -22,9 +22,9 @@
+ 
+ #include "widget.h"
+ 
++#include "kwidgetutils.h"
+ #include <QApplication>
+ #include <QTranslator>
+-#include "kwidgetutils.h"
+ 
+ int main(int argc, char *argv[])
+ {
+@@ -32,17 +32,13 @@ int main(int argc, char *argv[])
+     QApplication a(argc, argv);
+     QTranslator trans;
+     QString locale = QLocale::system().name();
+-    if(locale == "zh_CN")
+-    {
+-        if(trans.load(":/translations/gui_zh_CN.qm"))
+-        {
++    if (locale == "zh_CN") {
++        if (trans.load(":/translations/gui_zh_CN.qm")) {
+             a.installTranslator(&trans);
+         }
+     }
+-    if(locale == "bo_CN")
+-    {
+-        if(trans.load(":/translations/gui_bo_CN.qm"))
+-        {
++    if (locale == "bo_CN") {
++        if (trans.load(":/translations/gui_bo_CN.qm")) {
+             a.installTranslator(&trans);
+         }
+     }
+diff --git a/kysdk-qtwidgets/test/testslider/widget.cpp b/kysdk-qtwidgets/test/testslider/widget.cpp
+index 0eef3ba..cb0b373 100644
+--- a/kysdk-qtwidgets/test/testslider/widget.cpp
++++ b/kysdk-qtwidgets/test/testslider/widget.cpp
+@@ -22,113 +22,113 @@
+ 
+ #include "widget.h"
+ 
++#include "ktabbar.h"
+ #include <QBoxLayout>
+-#include <QTabWidget>
+ #include <QSlider>
+-#include "ktabbar.h"
++#include <QTabWidget>
+ 
+ Widget::Widget(QWidget *parent)
+     : KWidget(parent)
+ {
+-    QTabWidget* tabWidget = new QTabWidget(this);
+-    //horizontal
++    QTabWidget *tabWidget = new QTabWidget(this);
++    // horizontal
+     QWidget *widget1 = new QWidget(this);
+ 
+-    QVBoxLayout* vLayout1 = new QVBoxLayout;
+-    QHBoxLayout* hLayout = new QHBoxLayout;
++    QVBoxLayout *vLayout1 = new QVBoxLayout;
++    QHBoxLayout *hLayout = new QHBoxLayout;
+ 
+-    QLabel*label1 = new QLabel(this);
++    QLabel *label1 = new QLabel(this);
+     label1->setText("并列关系:");
+-    m_pSlider1 = new KSlider(this);     //构建一个滑动条
++    m_pSlider1 = new KSlider(this); // 构建一个滑动条
+     m_pSlider1->setFocusPolicy(Qt::ClickFocus);
+-    //设置是否显示节点
+-//    m_pSlider1->setNodeVisible(false);
+-    m_pSlider1->setSliderType(KSliderType::SingleSelectSlider); //设置滑动条的类型,包含四种SmoothSlider,StepSlider,NodeSlider,SingleSelectSlider
+-    m_pSlider1->setRange(0,4);      //设置滑动条值的范围
+-    m_pSlider1->setMaximum(2);      //设置滑动条的最大值
+-    m_pSlider1->setValue(1);        //设置滑动条的初始值
+-//    m_pSlider1->setTickInterval(1);
++    // 设置是否显示节点
++    //    m_pSlider1->setNodeVisible(false);
++    m_pSlider1->setSliderType(KSliderType::SingleSelectSlider); // 设置滑动条的类型,包含四种SmoothSlider,StepSlider,NodeSlider,SingleSelectSlider
++    m_pSlider1->setRange(0, 4); // 设置滑动条值的范围
++    m_pSlider1->setMaximum(2); // 设置滑动条的最大值
++    m_pSlider1->setValue(1); // 设置滑动条的初始值
++    //    m_pSlider1->setTickInterval(1);
+     m_pSlider1->setFixedWidth(200);
+ 
+     hLayout->addWidget(label1);
+     hLayout->addWidget(m_pSlider1);
+-    QLabel* numLabel1 = new QLabel(this);
++    QLabel *numLabel1 = new QLabel(this);
+     numLabel1->setFixedWidth(30);
+-    numLabel1->setText(QString::number(m_pSlider1->value()));  //获取滑动条当前的值
++    numLabel1->setText(QString::number(m_pSlider1->value())); // 获取滑动条当前的值
+     hLayout->addWidget(numLabel1);
+     hLayout->addStretch();
+     vLayout1->addLayout(hLayout);
+ 
+-    QLabel*label2 = new QLabel(this);
++    QLabel *label2 = new QLabel(this);
+     label2->setText("步数关系:");
+     m_pSlider2 = new KSlider(this);
+-    m_pSlider2->setSliderType(KSliderType::StepSlider); //设置滑动条的类型StepSlider
++    m_pSlider2->setSliderType(KSliderType::StepSlider); // 设置滑动条的类型StepSlider
+     m_pSlider2->setFocusPolicy(Qt::ClickFocus);
+-    //设置刻度间隔
++    // 设置刻度间隔
+     m_pSlider2->setTickInterval(10);
+-    //设置步长
++    // 设置步长
+     m_pSlider2->setSingleStep(20);
+-    //设置取值范围
+-    m_pSlider2->setRange(-50,50);
+-    //设置初始值
++    // 设置取值范围
++    m_pSlider2->setRange(-50, 50);
++    // 设置初始值
+     m_pSlider2->setValue(20);
+-    qDebug()<<m_pSlider2->value();
++    qDebug() << m_pSlider2->value();
+     hLayout = new QHBoxLayout;
+     hLayout->addWidget(label2);
+     hLayout->addWidget(m_pSlider2);
+-    QLabel* numLabel2 = new QLabel(this);
++    QLabel *numLabel2 = new QLabel(this);
+     numLabel2->setText(QString::number(m_pSlider2->value()));
+     numLabel2->setFixedWidth(30);
+     hLayout->addWidget(numLabel2);
+     vLayout1->addLayout(hLayout);
+ 
+-    QLabel*label3 = new QLabel(this);
++    QLabel *label3 = new QLabel(this);
+     label3->setText("节点关系:");
+     m_pSlider3 = new KSlider(this);
+     m_pSlider3->setSliderType(KSliderType::NodeSlider);
+     m_pSlider3->setFocusPolicy(Qt::ClickFocus);
+     m_pSlider3->setTickInterval(10);
+     m_pSlider3->setSingleStep(20);
+-    m_pSlider3->setRange(-50,50);
++    m_pSlider3->setRange(-50, 50);
+     m_pSlider3->setValue(20);
+     hLayout = new QHBoxLayout;
+     hLayout->addWidget(label3);
+     hLayout->addWidget(m_pSlider3);
+-    QLabel* numLabel3 = new QLabel(this);
++    QLabel *numLabel3 = new QLabel(this);
+     numLabel3->setText(QString::number(m_pSlider3->value()));
+     numLabel3->setFixedWidth(30);
+     hLayout->addWidget(numLabel3);
+     vLayout1->addLayout(hLayout);
+ 
+-    connect(m_pSlider1,&QSlider::valueChanged,this,[=](){
++    connect(m_pSlider1, &QSlider::valueChanged, this, [=]() {
+         numLabel1->setText(QString::number(m_pSlider1->value()));
+     });
+-    connect(m_pSlider2,&KSlider::valueChanged,this,[=](){
++    connect(m_pSlider2, &KSlider::valueChanged, this, [=]() {
+         numLabel2->setText(QString::number(m_pSlider2->value()));
+     });
+-    connect(m_pSlider3,&KSlider::valueChanged,this,[=](){
++    connect(m_pSlider3, &KSlider::valueChanged, this, [=]() {
+         numLabel3->setText(QString::number(m_pSlider3->value()));
+     });
+ 
+     widget1->setLayout(vLayout1);
+-    tabWidget->addTab(widget1,"horizontal");
++    tabWidget->addTab(widget1, "horizontal");
+ 
+-    //vertical
++    // vertical
+     QWidget *widget2 = new QWidget(this);
+ 
+-    QHBoxLayout* hLayout2 = new QHBoxLayout;
+-    QVBoxLayout* vLayout2 = new QVBoxLayout;
++    QHBoxLayout *hLayout2 = new QHBoxLayout;
++    QVBoxLayout *vLayout2 = new QVBoxLayout;
+ 
+-    QLabel*label4 = new QLabel(this);
++    QLabel *label4 = new QLabel(this);
+     label4->setText("非步数关系:");
+-    m_pSlider4 = new KSlider(Qt::Vertical,this);            //设置滑动条为垂直方向
++    m_pSlider4 = new KSlider(Qt::Vertical, this); // 设置滑动条为垂直方向
+     m_pSlider4->setSliderType(KSliderType::SmoothSlider);
+     m_pSlider4->setFocusPolicy(Qt::ClickFocus);
+     m_pSlider4->setTickInterval(20);
+     m_pSlider4->setSingleStep(10);
+     m_pSlider4->setValue(10);
+     m_pSlider4->setEnabled(false);
+-    QLabel* numLabel4 = new QLabel(this);
++    QLabel *numLabel4 = new QLabel(this);
+     numLabel4->setFixedWidth(30);
+     numLabel4->setText(QString::number(m_pSlider4->value()));
+     vLayout2->addWidget(numLabel4);
+@@ -136,15 +136,15 @@ Widget::Widget(QWidget *parent)
+     vLayout2->addWidget(label4);
+     hLayout2->addLayout(vLayout2);
+ 
+-    QLabel*label5 = new QLabel(this);
++    QLabel *label5 = new QLabel(this);
+     label5->setText("步数关系:");
+-    m_pSlider5 = new KSlider(Qt::Vertical,this);
++    m_pSlider5 = new KSlider(Qt::Vertical, this);
+     m_pSlider5->setSliderType(KSliderType::StepSlider);
+     m_pSlider5->setFocusPolicy(Qt::ClickFocus);
+     m_pSlider5->setTickInterval(20);
+     m_pSlider5->setSingleStep(10);
+     m_pSlider5->setValue(20);
+-    QLabel* numLabel5 = new QLabel(this);
++    QLabel *numLabel5 = new QLabel(this);
+     numLabel5->setFixedWidth(30);
+     numLabel5->setText(QString::number(m_pSlider5->value()));
+     vLayout2 = new QVBoxLayout;
+@@ -153,7 +153,7 @@ Widget::Widget(QWidget *parent)
+     vLayout2->addWidget(label5);
+     hLayout2->addLayout(vLayout2);
+ 
+-    QLabel*label6 = new QLabel(this);
++    QLabel *label6 = new QLabel(this);
+     label6->setText("节点关系:");
+     m_pSlider6 = new KSlider(this);
+     m_pSlider6->setSliderType(KSliderType::NodeSlider);
+@@ -162,7 +162,7 @@ Widget::Widget(QWidget *parent)
+     m_pSlider6->setSingleStep(10);
+     m_pSlider6->setValue(30);
+     m_pSlider6->setOrientation(Qt::Vertical);
+-    QLabel* numLabel6 = new QLabel(this);
++    QLabel *numLabel6 = new QLabel(this);
+     numLabel6->setFixedWidth(30);
+     numLabel6->setText(QString::number(m_pSlider6->value()));
+     vLayout2 = new QVBoxLayout;
+@@ -171,26 +171,24 @@ Widget::Widget(QWidget *parent)
+     vLayout2->addWidget(label6);
+     hLayout2->addLayout(vLayout2);
+ 
+-    connect(m_pSlider4,&QSlider::valueChanged,this,[=](){
++    connect(m_pSlider4, &QSlider::valueChanged, this, [=]() {
+         numLabel4->setText(QString::number(m_pSlider4->value()));
+     });
+-    connect(m_pSlider5,&KSlider::valueChanged,this,[=](){
++    connect(m_pSlider5, &KSlider::valueChanged, this, [=]() {
+         numLabel5->setText(QString::number(m_pSlider5->value()));
+     });
+-    connect(m_pSlider6,&KSlider::valueChanged,this,[=](){
++    connect(m_pSlider6, &KSlider::valueChanged, this, [=]() {
+         numLabel6->setText(QString::number(m_pSlider6->value()));
+     });
+ 
+     widget2->setLayout(hLayout2);
+-    tabWidget->addTab(widget2,"vertical");
++    tabWidget->addTab(widget2, "vertical");
+ 
+     QVBoxLayout *mainLayout = new QVBoxLayout();
+     mainLayout->addWidget(tabWidget);
+     this->baseBar()->setLayout(mainLayout);
+-
+ }
+ 
+ Widget::~Widget()
+ {
+ }
+-
+diff --git a/kysdk-qtwidgets/test/testslider/widget.h b/kysdk-qtwidgets/test/testslider/widget.h
+index eb35c6c..06488e6 100644
+--- a/kysdk-qtwidgets/test/testslider/widget.h
++++ b/kysdk-qtwidgets/test/testslider/widget.h
+@@ -23,8 +23,8 @@
+ #ifndef WIDGET_H
+ #define WIDGET_H
+ 
+-#include "kwidget.h"
+ #include "kslider.h"
++#include "kwidget.h"
+ #include <QTabWidget>
+ 
+ using namespace kdk;
+@@ -38,11 +38,11 @@ public:
+     ~Widget();
+ 
+ private:
+-    KSlider* m_pSlider1;
+-    KSlider* m_pSlider2;
+-    KSlider* m_pSlider3;
+-    KSlider* m_pSlider4;
+-    KSlider* m_pSlider5;
+-    KSlider* m_pSlider6;
++    KSlider *m_pSlider1;
++    KSlider *m_pSlider2;
++    KSlider *m_pSlider3;
++    KSlider *m_pSlider4;
++    KSlider *m_pSlider5;
++    KSlider *m_pSlider6;
+ };
+ #endif // WIDGET_H
+diff --git a/kysdk-qtwidgets/test/testtabbar/main.cpp b/kysdk-qtwidgets/test/testtabbar/main.cpp
+index 0fe4772..b9c8610 100644
+--- a/kysdk-qtwidgets/test/testtabbar/main.cpp
++++ b/kysdk-qtwidgets/test/testtabbar/main.cpp
+@@ -22,9 +22,9 @@
+ 
+ #include "widget.h"
+ 
++#include "kwidgetutils.h"
+ #include <QApplication>
+ #include <QTranslator>
+-#include "kwidgetutils.h"
+ 
+ int main(int argc, char *argv[])
+ {
+@@ -32,17 +32,13 @@ int main(int argc, char *argv[])
+     QApplication a(argc, argv);
+     QTranslator trans;
+     QString locale = QLocale::system().name();
+-    if(locale == "zh_CN")
+-    {
+-        if(trans.load(":/translations/gui_zh_CN.qm"))
+-        {
++    if (locale == "zh_CN") {
++        if (trans.load(":/translations/gui_zh_CN.qm")) {
+             a.installTranslator(&trans);
+         }
+     }
+-    if(locale == "bo_CN")
+-    {
+-        if(trans.load(":/translations/gui_bo_CN.qm"))
+-        {
++    if (locale == "bo_CN") {
++        if (trans.load(":/translations/gui_bo_CN.qm")) {
+             a.installTranslator(&trans);
+         }
+     }
+diff --git a/kysdk-qtwidgets/test/testtabbar/widget.cpp b/kysdk-qtwidgets/test/testtabbar/widget.cpp
+index b525d5d..f76d606 100644
+--- a/kysdk-qtwidgets/test/testtabbar/widget.cpp
++++ b/kysdk-qtwidgets/test/testtabbar/widget.cpp
+@@ -22,8 +22,8 @@
+ 
+ #include "widget.h"
+ #include "ktabbar.h"
+-#include <QVBoxLayout>
+ #include <QLabel>
++#include <QVBoxLayout>
+ 
+ Widget::Widget(QWidget *parent)
+     : KWidget(parent)
+@@ -33,49 +33,57 @@ Widget::Widget(QWidget *parent)
+      * 2.tabbar4测试设置tabbar样式、修改tabbar圆角(0-20)以及设置背景色。
+      */
+     QWidget *w = new QWidget();
+-    KTabBar *tabBar1 = new KTabBar(KTabBarStyle::SegmentLight,w);
+-    tabBar1->addTab(QIcon::fromTheme("kylin-music"),"Segment1");
++    KTabBar *tabBar1 = new KTabBar(KTabBarStyle::SegmentLight, w);
++    tabBar1->addTab(QIcon::fromTheme("kylin-music"), "Segment1");
+     tabBar1->addTab("Segment2");
+-    tabBar1->addTab(QIcon::fromTheme("kylin-music"),"");
++    tabBar1->addTab(QIcon::fromTheme("kylin-music"), "");
+     tabBar1->addTab("Segment4");
+     tabBar1->addTab("Segment5");
+     tabBar1->addTab("Segment6");
+-    KTabBar *tabBar2 = new KTabBar(KTabBarStyle::SegmentDark,w);
++    KTabBar *tabBar2 = new KTabBar(KTabBarStyle::SegmentDark, w);
+     tabBar2->addTab("SegmentDark1");
+     tabBar2->addTab("SegmentDark2");
+-    tabBar2->addTab(QIcon::fromTheme("kylin-music"),"SegmentDark3");
++    tabBar2->addTab(QIcon::fromTheme("kylin-music"), "SegmentDark3");
+     tabBar2->addTab("SegmentDark4");
+     tabBar2->addTab("SegmentDark5");
+-    tabBar2->addTab(QIcon::fromTheme("kylin-music"),"");
+-    KTabBar *tabBar3 = new KTabBar(KTabBarStyle::Sliding,w);
+-    tabBar3->addTab(QIcon::fromTheme("kylin-music"),"");
++    tabBar2->addTab(QIcon::fromTheme("kylin-music"), "");
++    KTabBar *tabBar3 = new KTabBar(KTabBarStyle::Sliding, w);
++    tabBar3->addTab(QIcon::fromTheme("kylin-music"), "");
+     tabBar3->addTab("Sliding2");
+     tabBar3->addTab("Sliding3");
+     tabBar3->addTab("Sliding4");
+     tabBar3->addTab("Sliding5");
+-    tabBar3->addTab(QIcon::fromTheme("kylin-music"),"Sliding6");
+-    KTabBar *tabBar4 = new KTabBar(KTabBarStyle::Sliding,w);
++    tabBar3->addTab(QIcon::fromTheme("kylin-music"), "Sliding6");
++    KTabBar *tabBar4 = new KTabBar(KTabBarStyle::Sliding, w);
+     tabBar4->addTab("Segment1");
+     tabBar4->addTab("Segment2");
+     tabBar4->addTab("Segment3");
+     tabBar4->addTab("Segment4");
+-    tabBar4->setTabBarStyle(KTabBarStyle::SegmentDark);     //设置style
+-    tabBar4->setBorderRadius(10);       //设置圆角半径,只对SegmentDark,SegmentLight样式生效
+-    tabBar4->setBackgroundColor(QColor(0,255,0));   //设置背景色
++    tabBar4->setTabBarStyle(KTabBarStyle::SegmentDark); // 设置style
++    tabBar4->setBorderRadius(10); // 设置圆角半径,只对SegmentDark,SegmentLight样式生效
++    tabBar4->setBackgroundColor(QColor(0, 255, 0)); // 设置背景色
+ 
+-    QLabel* pLabel = new QLabel(w);
++    QLabel *pLabel = new QLabel(w);
+     pLabel->setAlignment(Qt::AlignCenter);
+-    connect(tabBar1,&KTabBar::tabBarClicked,this,[=](int index){pLabel->setText(tabBar1->tabText(index));});
+-    connect(tabBar2,&KTabBar::tabBarClicked,this,[=](int index){pLabel->setText(tabBar2->tabText(index));});
+-    connect(tabBar3,&KTabBar::tabBarClicked,this,[=](int index){pLabel->setText(tabBar3->tabText(index));});
+-    connect(tabBar4,&KTabBar::tabBarClicked,this,[=](int index){pLabel->setText(tabBar4->tabText(index));});
++    connect(tabBar1, &KTabBar::tabBarClicked, this, [=](int index) {
++        pLabel->setText(tabBar1->tabText(index));
++    });
++    connect(tabBar2, &KTabBar::tabBarClicked, this, [=](int index) {
++        pLabel->setText(tabBar2->tabText(index));
++    });
++    connect(tabBar3, &KTabBar::tabBarClicked, this, [=](int index) {
++        pLabel->setText(tabBar3->tabText(index));
++    });
++    connect(tabBar4, &KTabBar::tabBarClicked, this, [=](int index) {
++        pLabel->setText(tabBar4->tabText(index));
++    });
+ 
+     QHBoxLayout *hlayout = new QHBoxLayout();
+     QLabel *label = new QLabel();
+     label->setText("just a test label");
+     hlayout->addWidget(label);
+ 
+-    QVBoxLayout*vLayout = new QVBoxLayout;
++    QVBoxLayout *vLayout = new QVBoxLayout;
+     vLayout->addStretch();
+     vLayout->addWidget(tabBar1);
+     vLayout->addWidget(tabBar2);
+@@ -87,11 +95,8 @@ Widget::Widget(QWidget *parent)
+     vLayout->addLayout(hlayout);
+     vLayout->addStretch();
+     baseBar()->setLayout(vLayout);
+-
+ }
+ 
+-
+ Widget::~Widget()
+ {
+ }
+-
+diff --git a/kysdk-qtwidgets/test/testtableview/widget.cpp b/kysdk-qtwidgets/test/testtableview/widget.cpp
+index f9bb97f..8c4eff9 100644
+--- a/kysdk-qtwidgets/test/testtableview/widget.cpp
++++ b/kysdk-qtwidgets/test/testtableview/widget.cpp
+@@ -2,83 +2,81 @@
+ #include "ktableheaderview.h"
+ #include "ktablemodel.h"
+ #include "ktableview.h"
+-#include <QMenu>
+ #include <QDebug>
++#include <QMenu>
+ #include <QPushButton>
+ 
+ using namespace kdk;
+ Widget::Widget(QWidget *parent)
+     : QWidget(parent)
+ {
+-    KTableModel* model = new KTableModel();
++    KTableModel *model = new KTableModel();
+     KTableView *tableview = new KTableView(this);
+-//    tableview->setShowGrid(false);
++    //    tableview->setShowGrid(false);
+     tableview->verticalHeader()->setVisible(false);
+ 
+-
+     QStringList head_list;
+-    head_list << "文件项" << "格式" << "时间" << "大小";
++    head_list << "文件项"
++              << "格式"
++              << "时间"
++              << "大小";
+     tableview->setHorizontalTitle(head_list);
+ 
+-    for(int i=0 ;i < 5 ; i++)
+-    {
+-        QList<QStandardItem*> add_items;
+-        for (int index = 0; index < head_list.count(); ++index)
+-        {
+-            add_items << new QStandardItem(QString::number(i+index));
+-
++    for (int i = 0; i < 5; i++) {
++        QList<QStandardItem *> add_items;
++        for (int index = 0; index < head_list.count(); ++index) {
++            add_items << new QStandardItem(QString::number(i + index));
+         }
+         model->appendRow(add_items);
+     }
+ 
+     tableview->setModel(model);
+ 
+-    tableview->setFixedSize(600,500);
++    tableview->setFixedSize(600, 500);
+ 
+-    tableview->setContextMenuPolicy(Qt::CustomContextMenu);//必须设置
+-    QMenu * tableviewMenu = new QMenu(tableview);
+-    QAction* Action1 = new QAction("tableview 1",tableview);
+-    QAction* Action2 = new QAction("tableview 2",tableview);
++    tableview->setContextMenuPolicy(Qt::CustomContextMenu); // 必须设置
++    QMenu *tableviewMenu = new QMenu(tableview);
++    QAction *Action1 = new QAction("tableview 1", tableview);
++    QAction *Action2 = new QAction("tableview 2", tableview);
+     tableviewMenu->addAction(Action1);
+     tableviewMenu->addAction(Action2);
+ 
+-    QMenu * headmenu1 = new QMenu(tableview);
+-    QAction* Action3 = new QAction("headmenu1 1",tableview);
+-    QAction* Action4 = new QAction("headmenu1 2",tableview);
++    QMenu *headmenu1 = new QMenu(tableview);
++    QAction *Action3 = new QAction("headmenu1 1", tableview);
++    QAction *Action4 = new QAction("headmenu1 2", tableview);
+     headmenu1->addAction(Action3);
+     headmenu1->addAction(Action4);
+ 
+-    QMenu * headmenu2 = new QMenu(tableview);
+-    QAction* Action5 = new QAction("headmenu2 1",tableview);
+-    QAction* Action6 = new QAction("headmenu2 2",tableview);
++    QMenu *headmenu2 = new QMenu(tableview);
++    QAction *Action5 = new QAction("headmenu2 1", tableview);
++    QAction *Action6 = new QAction("headmenu2 2", tableview);
+     headmenu2->addAction(Action5);
+     headmenu2->addAction(Action6);
+ 
+-QModelIndexList list=tableview->selectionModel()->selectedIndexes();
+-    connect(tableview,&KTableView::customContextMenuRequested,this,[=]{
++    QModelIndexList list = tableview->selectionModel()->selectedIndexes();
++    connect(tableview, &KTableView::customContextMenuRequested, this, [=] {
+         tableviewMenu->exec(QCursor::pos());
+ 
+-        for(int i =0 ; i<list.count();i++)
+-            qDebug()<<list.at(i).data().toString();
++        for (int i = 0; i < list.count(); i++)
++            qDebug() << list.at(i).data().toString();
+     });
+-    tableview->headerView()->setMenu(headmenu1,1);
+-    tableview->headerView()->setMenu(headmenu2,2);
++    tableview->headerView()->setMenu(headmenu1, 1);
++    tableview->headerView()->setMenu(headmenu2, 2);
+ 
+-//    for(int i = 0;i < tableview->model()->rowCount();i++)
+-//        qDebug()<< model->data(model->index(i,1)).toString();
++    //    for(int i = 0;i < tableview->model()->rowCount();i++)
++    //        qDebug()<< model->data(model->index(i,1)).toString();
+ 
+-    QPushButton* btn = new QPushButton(this);
+-    btn->move(0,300);
++    QPushButton *btn = new QPushButton(this);
++    btn->move(0, 300);
+     btn->setText("获取选中行的索引");
+-    connect(btn,&QPushButton::clicked,this,[=]{
+-        QList<int> list1=tableview->selectList();
+-        qDebug()<<"list1"<<list1.count();
+-        for(int i=0 ; i < list1.count(); i++)
+-            qDebug()<<list1.at(i);
++    connect(btn, &QPushButton::clicked, this, [=] {
++        QList<int> list1 = tableview->selectList();
++        qDebug() << "list1" << list1.count();
++        for (int i = 0; i < list1.count(); i++)
++            qDebug() << list1.at(i);
+     });
+ }
+ 
+ Widget::~Widget()
+ {
+ }
+-
+diff --git a/kysdk-qtwidgets/test/testtitlewindow/main.cpp b/kysdk-qtwidgets/test/testtitlewindow/main.cpp
+index dee16d8..2f37ae1 100644
+--- a/kysdk-qtwidgets/test/testtitlewindow/main.cpp
++++ b/kysdk-qtwidgets/test/testtitlewindow/main.cpp
+@@ -6,6 +6,6 @@ int main(int argc, char *argv[])
+ {
+     QApplication a(argc, argv);
+     Widget w;
+-//    w.show();
++    //    w.show();
+     return a.exec();
+ }
+diff --git a/kysdk-qtwidgets/test/testtitlewindow/widget.cpp b/kysdk-qtwidgets/test/testtitlewindow/widget.cpp
+index 617900d..3c292cf 100644
+--- a/kysdk-qtwidgets/test/testtitlewindow/widget.cpp
++++ b/kysdk-qtwidgets/test/testtitlewindow/widget.cpp
+@@ -1,14 +1,14 @@
+ #include "widget.h"
++#include "ktextedit.h"
+ #include "ktitlewindow.h"
+ #include <QBoxLayout>
+-#include "ktextedit.h"
+ 
+ using namespace kdk;
+ Widget::Widget(QWidget *parent)
+     : QWidget(parent)
+ {
+-    KTitleWindow* window = new KTitleWindow();
+-    QPushButton* btn1 = new QPushButton();
++    KTitleWindow *window = new KTitleWindow();
++    QPushButton *btn1 = new QPushButton();
+     btn1->setText("测试button");
+     QHBoxLayout *layout = new QHBoxLayout();
+     layout->addWidget(btn1);
+@@ -24,4 +24,3 @@ Widget::Widget(QWidget *parent)
+ Widget::~Widget()
+ {
+ }
+-
+diff --git a/kysdk-qtwidgets/test/testtoolbutton/main.cpp b/kysdk-qtwidgets/test/testtoolbutton/main.cpp
+index 0fe4772..b9c8610 100644
+--- a/kysdk-qtwidgets/test/testtoolbutton/main.cpp
++++ b/kysdk-qtwidgets/test/testtoolbutton/main.cpp
+@@ -22,9 +22,9 @@
+ 
+ #include "widget.h"
+ 
++#include "kwidgetutils.h"
+ #include <QApplication>
+ #include <QTranslator>
+-#include "kwidgetutils.h"
+ 
+ int main(int argc, char *argv[])
+ {
+@@ -32,17 +32,13 @@ int main(int argc, char *argv[])
+     QApplication a(argc, argv);
+     QTranslator trans;
+     QString locale = QLocale::system().name();
+-    if(locale == "zh_CN")
+-    {
+-        if(trans.load(":/translations/gui_zh_CN.qm"))
+-        {
++    if (locale == "zh_CN") {
++        if (trans.load(":/translations/gui_zh_CN.qm")) {
+             a.installTranslator(&trans);
+         }
+     }
+-    if(locale == "bo_CN")
+-    {
+-        if(trans.load(":/translations/gui_bo_CN.qm"))
+-        {
++    if (locale == "bo_CN") {
++        if (trans.load(":/translations/gui_bo_CN.qm")) {
+             a.installTranslator(&trans);
+         }
+     }
+diff --git a/kysdk-qtwidgets/test/testtoolbutton/widget.cpp b/kysdk-qtwidgets/test/testtoolbutton/widget.cpp
+index 63d5d86..2470b22 100644
+--- a/kysdk-qtwidgets/test/testtoolbutton/widget.cpp
++++ b/kysdk-qtwidgets/test/testtoolbutton/widget.cpp
+@@ -26,28 +26,28 @@
+ Widget::Widget(QWidget *parent)
+     : KWidget(parent)
+ {
+-    QVBoxLayout* mainLayout = new QVBoxLayout;
++    QVBoxLayout *mainLayout = new QVBoxLayout;
+ 
+-    KToolButton* toolbtn1 = new KToolButton(this);      //构建一个toolbutton,默认类型为Flat
+-    toolbtn1->setEnabled(false);    //设置是否可用
+-    KToolButton* toolbtn2 = new KToolButton(this);
+-    //默认图标为"open-menu-symbolic"
+-    //toolbtn2->setIcon(QIcon::fromTheme("camera-switch-symbolic"));    //设置toolbutton的图标
+-    KToolButton* toolbtn3 = new KToolButton(this);
+-    toolbtn3->setLoading(true);         //设置正在加载状态,仅不带箭头的toolbuttuon支持该状态
+-    QHBoxLayout* hLayout = new QHBoxLayout();
++    KToolButton *toolbtn1 = new KToolButton(this); // 构建一个toolbutton,默认类型为Flat
++    toolbtn1->setEnabled(false); // 设置是否可用
++    KToolButton *toolbtn2 = new KToolButton(this);
++    // 默认图标为"open-menu-symbolic"
++    // toolbtn2->setIcon(QIcon::fromTheme("camera-switch-symbolic"));    //设置toolbutton的图标
++    KToolButton *toolbtn3 = new KToolButton(this);
++    toolbtn3->setLoading(true); // 设置正在加载状态,仅不带箭头的toolbuttuon支持该状态
++    QHBoxLayout *hLayout = new QHBoxLayout();
+     hLayout->addWidget(toolbtn1);
+     hLayout->addWidget(toolbtn2);
+     hLayout->addWidget(toolbtn3);
+     mainLayout->addLayout(hLayout);
+ 
+     hLayout = new QHBoxLayout();
+-    KToolButton* toolbtn4 = new KToolButton(this);
++    KToolButton *toolbtn4 = new KToolButton(this);
+     toolbtn4->setEnabled(false);
+-    toolbtn4->setArrow(true);       //设置是否显示向下箭头,默认不显示
+-    KToolButton* toolbtn5 = new KToolButton(this);
++    toolbtn4->setArrow(true); // 设置是否显示向下箭头,默认不显示
++    KToolButton *toolbtn5 = new KToolButton(this);
+     toolbtn5->setArrow(true);
+-    KToolButton* toolbtn6 = new KToolButton(this);
++    KToolButton *toolbtn6 = new KToolButton(this);
+     toolbtn6->setLoading(true);
+     toolbtn6->setArrow(true);
+     hLayout->addWidget(toolbtn4);
+@@ -56,12 +56,12 @@ Widget::Widget(QWidget *parent)
+     mainLayout->addLayout(hLayout);
+ 
+     hLayout = new QHBoxLayout();
+-    KToolButton* toolbtn7 = new KToolButton(this);
++    KToolButton *toolbtn7 = new KToolButton(this);
+     toolbtn7->setEnabled(false);
+-    toolbtn7->setType(KToolButtonType::SemiFlat);       //设置toolbutton类型为SemiFlat
+-    KToolButton* toolbtn8 = new KToolButton(this);
++    toolbtn7->setType(KToolButtonType::SemiFlat); // 设置toolbutton类型为SemiFlat
++    KToolButton *toolbtn8 = new KToolButton(this);
+     toolbtn8->setType(KToolButtonType::SemiFlat);
+-    KToolButton* toolbtn9 = new KToolButton(this);
++    KToolButton *toolbtn9 = new KToolButton(this);
+     toolbtn9->setLoading(true);
+     toolbtn9->setType(KToolButtonType::SemiFlat);
+     hLayout->addWidget(toolbtn7);
+@@ -70,12 +70,12 @@ Widget::Widget(QWidget *parent)
+     mainLayout->addLayout(hLayout);
+ 
+     hLayout = new QHBoxLayout();
+-    KToolButton* toolbtn10 = new KToolButton(this);
++    KToolButton *toolbtn10 = new KToolButton(this);
+     toolbtn10->setEnabled(false);
+-    toolbtn10->setType(KToolButtonType::Background);    //设置toolbutton类型为Background
+-    KToolButton* toolbtn11 = new KToolButton(this);
++    toolbtn10->setType(KToolButtonType::Background); // 设置toolbutton类型为Background
++    KToolButton *toolbtn11 = new KToolButton(this);
+     toolbtn11->setType(KToolButtonType::Background);
+-    KToolButton* toolbtn12 = new KToolButton(this);
++    KToolButton *toolbtn12 = new KToolButton(this);
+     toolbtn12->setLoading(true);
+     toolbtn12->setType(KToolButtonType::Background);
+     hLayout->addWidget(toolbtn10);
+@@ -89,4 +89,3 @@ Widget::Widget(QWidget *parent)
+ Widget::~Widget()
+ {
+ }
+-
+diff --git a/kysdk-qtwidgets/test/testtoolbutton/widget.h b/kysdk-qtwidgets/test/testtoolbutton/widget.h
+index f271a86..c2370a0 100644
+--- a/kysdk-qtwidgets/test/testtoolbutton/widget.h
++++ b/kysdk-qtwidgets/test/testtoolbutton/widget.h
+@@ -23,8 +23,8 @@
+ #ifndef WIDGET_H
+ #define WIDGET_H
+ 
+-#include "kwidget.h"
+ #include "ktoolbutton.h"
++#include "kwidget.h"
+ 
+ using namespace kdk;
+ 
+diff --git a/kysdk-ukenv/src/currency.h b/kysdk-ukenv/src/currency.h
+index 322c1a3..dc6b836 100644
+--- a/kysdk-ukenv/src/currency.h
++++ b/kysdk-ukenv/src/currency.h
+@@ -29,25 +29,25 @@ namespace kdk
+ {
+ 
+ enum AppName {
+-    KylinIpmsg = 0,       /* 传书 */
+-    KylinFontViewer,      /* 字体管理器 */
+-    KylinCalculator,      /* 麒麟计算器 */
+-    KylinGpuController,   /* 显卡控制器 */
+-    KylinMusic,           /* 音乐 */
+-    KylinWeather,         /* 天气 */
+-    KylinPhotoViewer,     /* 看图 */
+-    KylinServiceSupport,  /* 服务与支持 */
+-    KylinPrinter,         /* 麒麟打印 */
+-    KylinCalendar,        /* 日历 */
+-    KylinRecorder,        /* 录音 */
+-    KylinCamera,          /* 摄像头 */
+-    KylinNotebook,        /* 便签 */
+-    KylinOsManager,       /* 麒麟管家 */
+-    KylinNetworkCheck,    /* 网络检测工具 */
+-    KylinGallery,         /* 相册 */
+-    KylinScanner,         /* 扫描 */
++    KylinIpmsg = 0, /* 传书 */
++    KylinFontViewer, /* 字体管理器 */
++    KylinCalculator, /* 麒麟计算器 */
++    KylinGpuController, /* 显卡控制器 */
++    KylinMusic, /* 音乐 */
++    KylinWeather, /* 天气 */
++    KylinPhotoViewer, /* 看图 */
++    KylinServiceSupport, /* 服务与支持 */
++    KylinPrinter, /* 麒麟打印 */
++    KylinCalendar, /* 日历 */
++    KylinRecorder, /* 录音 */
++    KylinCamera, /* 摄像头 */
++    KylinNotebook, /* 便签 */
++    KylinOsManager, /* 麒麟管家 */
++    KylinNetworkCheck, /* 网络检测工具 */
++    KylinGallery, /* 相册 */
++    KylinScanner, /* 扫描 */
+     KylinMobileAssistant, /* 多端协同 */
+-    KylinTest             /* 测试预留 */
++    KylinTest /* 测试预留 */
+ };
+ 
+ class Currency
+diff --git a/kysdk-ukenv/src/gsettingmonitor.cpp b/kysdk-ukenv/src/gsettingmonitor.cpp
+index 19edee8..9cd2302 100644
+--- a/kysdk-ukenv/src/gsettingmonitor.cpp
++++ b/kysdk-ukenv/src/gsettingmonitor.cpp
+@@ -20,9 +20,9 @@
+  *
+  */
+ 
++#include <QDebug>
+ #include <QGSettings/QGSettings>
+ #include <QHash>
+-#include <QDebug>
+ 
+ #include "gsettingmonitor.h"
+ 
+diff --git a/kysdk-ukenv/src/gsettingmonitor.h b/kysdk-ukenv/src/gsettingmonitor.h
+index c4b3ea9..c19cf03 100644
+--- a/kysdk-ukenv/src/gsettingmonitor.h
++++ b/kysdk-ukenv/src/gsettingmonitor.h
+@@ -23,10 +23,10 @@
+ #ifndef KYSDK_UKENV_GSETTINGMONITOR_H_
+ #define KYSDK_UKENV_GSETTINGMONITOR_H_
+ 
+-#include <QString>
+ #include <QByteArray>
+-#include <QVariant>
+ #include <QObject>
++#include <QString>
++#include <QVariant>
+ 
+ namespace kdk
+ {
+diff --git a/kysdk-ukenv/src/usermanual.cpp b/kysdk-ukenv/src/usermanual.cpp
+index 8935392..fedd778 100644
+--- a/kysdk-ukenv/src/usermanual.cpp
++++ b/kysdk-ukenv/src/usermanual.cpp
+@@ -22,8 +22,8 @@
+ 
+ #include <unistd.h>
+ 
+-#include <QDBusMessage>
+ #include <QDBusConnection>
++#include <QDBusMessage>
+ #include <QDBusReply>
+ #include <QDebug>
+ 
+diff --git a/kysdk-waylandhelper/kysdk-waylandhelper.pro b/kysdk-waylandhelper/kysdk-waylandhelper.pro
+index b1b4573..3f0e973 100644
+--- a/kysdk-waylandhelper/kysdk-waylandhelper.pro
++++ b/kysdk-waylandhelper/kysdk-waylandhelper.pro
+@@ -18,20 +18,24 @@ DEFINES += USE_UKUI_PROTOCOL
+ # You can also select to disable deprecated APIs only up to a certain version of Qt.
+ #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
+ 
+-system(wayland-scanner client-header /usr/share/kylin-wayland-protocols/ukui-shell.xml src/windowmanager/ukui-shell-client-protocol.h)
+-system(wayland-scanner private-code /usr/share/kylin-wayland-protocols/ukui-shell.xml src/windowmanager/ukui-shell-core-protocol.c)
++system(wayland-scanner client-header protocols/ukui-shell.xml $$OUT_PWD/ukui-shell-client-protocol.h)
++system(wayland-scanner private-code protocols/ukui-shell.xml $$OUT_PWD/ukui-shell-core-protocol.c)
+ 
+-system(wayland-scanner client-header /usr/share/kylin-wayland-protocols/ukui-window-management.xml src/windowmanager/ukui-window-management-client-protocol.h)
+-system(wayland-scanner private-code /usr/share/kylin-wayland-protocols/ukui-window-management.xml src/windowmanager/ukui-window-management-core-protocol.c)
++system(wayland-scanner client-header protocols/ukui-window-management.xml $$OUT_PWD/ukui-window-management-client-protocol.h)
++system(wayland-scanner private-code protocols/ukui-window-management.xml $$OUT_PWD/ukui-window-management-core-protocol.c)
+ 
+-system(wayland-scanner client-header /usr/share/wayland-protocols/staging/xdg-activation/xdg-activation-v1.xml src/windowmanager/wayland-xdg-activation-v1-client-protocol.h)
+-system(wayland-scanner private-code /usr/share/wayland-protocols/staging/xdg-activation/xdg-activation-v1.xml src/windowmanager/wayland-xdg-activation-v1-protocol.c)
++system(wayland-scanner client-header protocols/xdg-activation-v1.xml $$OUT_PWD/wayland-xdg-activation-v1-client-protocol.h)
++system(wayland-scanner private-code protocols/xdg-activation-v1.xml $$OUT_PWD/wayland-xdg-activation-v1-protocol.c)
+ 
+-system(wayland-scanner client-header /usr/share/wayland-protocols/staging/ext-idle-notify/ext-idle-notify-v1.xml src/windowmanager/wayland-ext-idle-notify-v1-client-protocol.h)
+-system(wayland-scanner private-code /usr/share/wayland-protocols/staging/ext-idle-notify/ext-idle-notify-v1.xml src/windowmanager/wayland-ext-idle-notify-v1-protocol.c)
++system(wayland-scanner client-header protocols/ext-idle-notify-v1.xml $$OUT_PWD/wayland-ext-idle-notify-v1-client-protocol.h)
++system(wayland-scanner private-code protocols/ext-idle-notify-v1.xml $$OUT_PWD/wayland-ext-idle-notify-v1-protocol.c)
++
++system(wayland-scanner client-header protocols/ukui-blur-v1.xml $$OUT_PWD/ukui-blur-manager-client-protocol.h)
++system(wayland-scanner private-code protocols/ukui-blur-v1.xml $$OUT_PWD/ukui-blur-manager-core-protocol.c)
++
++system(wayland-scanner client-header protocols/plasma-window-management.xml $$OUT_PWD/wayland-plasma-window-management-client-protocol.h)
++system(wayland-scanner private-code protocols/plasma-window-management.xml $$OUT_PWD/wayland-plasma-window-management-protocol.c)
+ 
+-system(wayland-scanner client-header /usr/share/kylin-wayland-protocols/ukui-blur-v1.xml src/blurmanager/ukui-blur-manager-client-protocol.h)
+-system(wayland-scanner private-code /usr/share/kylin-wayland-protocols/ukui-blur-v1.xml src/blurmanager/ukui-blur-manager-core-protocol.c)
+ 
+ SOURCES += \
+     src/ukuistylehelper/ukui-decoration-core.c \
+@@ -52,16 +56,16 @@ SOURCES += \
+     src/windowmanager/idlenotifier.cpp \
+     src/windowmanager/ukuishell.cpp \
+     src/windowmanager/xdgactivation.cpp \
+-    src/windowmanager/wayland-plasma-window-management-protocol.c \
+-    src/windowmanager/ukui-window-management-core-protocol.c\
+-    src/windowmanager/ukui-shell-core-protocol.c \
+-    src/windowmanager/wayland-xdg-activation-v1-protocol.c \
+-    src/windowmanager/wayland-ext-idle-notify-v1-protocol.c \
+     src/blurmanager/ukuiblur.cpp \
+     src/blurmanager/blurmanager.cpp \
+-    src/blurmanager/ukui-blur-manager-core-protocol.c \
+     src/blurmanager/blurwaylandinterface.cpp \
+     src/blurmanager/blurxcbinterface.cpp \
++    $$OUT_PWD/ukui-blur-manager-core-protocol.c \
++    $$OUT_PWD/ukui-window-management-core-protocol.c \
++    $$OUT_PWD/ukui-shell-core-protocol.c \
++    $$OUT_PWD/wayland-xdg-activation-v1-protocol.c \
++    $$OUT_PWD/wayland-ext-idle-notify-v1-protocol.c \
++    $$OUT_PWD/wayland-plasma-window-management-protocol.c \
+ 
+ 
+ HEADERS += \
+@@ -85,18 +89,22 @@ HEADERS += \
+     src/windowmanager/ukuishell.h \
+     src/windowmanager/extidlenotifier.h \
+     src/windowmanager/idlenotifier.h \
+-    src/windowmanager/ukui-shell-client-protocol.h \
+-    src/windowmanager/wayland-plasma-window-management-client-protocol.h \
+-    src/windowmanager/ukui-window-management-client-protocol.h \
+-    src/windowmanager/wayland-xdg-activation-v1-client-protocol.h \
+-    src/windowmanager/wayland-ext-idle-notify-v1-client-protocol.h \
+     src/windowmanager/kyatoms_p.h \
+     src/blurmanager/ukuiblur.h \
+     src/blurmanager/blurmanager.h \
+-    src/blurmanager/ukui-blur-manager-client-protocol.h\
+     src/blurmanager/blurabstractinterface.h \
+     src/blurmanager/blurwaylandinterface.h \
+     src/blurmanager/blurxcbinterface.h \
++    $$OUT_PWD/ukui-blur-manager-client-protocol.h\
++    $$OUT_PWD/ukui-shell-client-protocol.h \
++    $$OUT_PWD/wayland-plasma-window-management-client-protocol.h \
++    $$OUT_PWD/ukui-window-management-client-protocol.h \
++    $$OUT_PWD/wayland-xdg-activation-v1-client-protocol.h \
++    $$OUT_PWD/wayland-ext-idle-notify-v1-client-protocol.h \
++
++INCLUDEPATH+=src \
++    src/windowmanager \
++    $$OUT_PWD \
+ 
+ # Default rules for deployment.
+ headers.files = src/kysdk-waylandhelper_global.h \
+@@ -116,13 +124,13 @@ wm_headers.files = src/windowmanager/abstractinterface.h \
+     src/windowmanager/ukuishell.h \
+     src/windowmanager/extidlenotifier.h \
+     src/windowmanager/idlenotifier.h \
+-    src/windowmanager/ukui-shell-client-protocol.h \
+-    src/windowmanager/wayland-plasma-window-management-client-protocol.h \
+-    src/windowmanager/ukui-window-management-client-protocol.h \
+-    src/windowmanager/wayland-xdg-activation-v1-client-protocol.h \
+-    src/windowmanager/wayland-ext-idle-notify-v1-client-protocol.h \
+     src/windowmanager/kyatoms_p.h \
+     src/windowmanager/outputinfo.h \
++    $$OUT_PWD/ukui-shell-client-protocol.h \
++    $$OUT_PWD/wayland-plasma-window-management-client-protocol.h \
++    $$OUT_PWD/ukui-window-management-client-protocol.h \
++    $$OUT_PWD/wayland-xdg-activation-v1-client-protocol.h \
++    $$OUT_PWD/wayland-ext-idle-notify-v1-client-protocol.h \
+                     
+ wm_headers.path = /usr/include/kysdk/applications/windowmanager/
+ 
+@@ -137,10 +145,10 @@ sty_headers.path = /usr/include/kysdk/applications/ukuistylehelper/
+ 
+ blur_headers.files = src/blurmanager/ukuiblur.h \
+                     src/blurmanager/blurmanager.h \
+-                    src/blurmanager/ukui-blur-manager-client-protocol.h\
+                     src/blurmanager/blurabstractinterface.h \
+                     src/blurmanager/blurwaylandinterface.h \
+                     src/blurmanager/blurxcbinterface.h
++                    $$OUT_PWD/ukui-blur-manager-client-protocol.h\
+ 
+ blur_headers.path = /usr/include/kysdk/applications/blurmanager/
+ 
+diff --git a/kysdk-waylandhelper/protocols/ext-idle-notify-v1.xml b/kysdk-waylandhelper/protocols/ext-idle-notify-v1.xml
+new file mode 100644
+index 0000000..6fe97d7
+--- /dev/null
++++ b/kysdk-waylandhelper/protocols/ext-idle-notify-v1.xml
+@@ -0,0 +1,102 @@
++<?xml version="1.0" encoding="UTF-8"?>
++<protocol name="ext_idle_notify_v1">
++  <copyright>
++    Copyright © 2015 Martin Gräßlin
++    Copyright © 2022 Simon Ser
++
++    Permission is hereby granted, free of charge, to any person obtaining a
++    copy of this software and associated documentation files (the "Software"),
++    to deal in the Software without restriction, including without limitation
++    the rights to use, copy, modify, merge, publish, distribute, sublicense,
++    and/or sell copies of the Software, and to permit persons to whom the
++    Software is furnished to do so, subject to the following conditions:
++
++    The above copyright notice and this permission notice (including the next
++    paragraph) shall be included in all copies or substantial portions of the
++    Software.
++
++    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
++    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
++    THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
++    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
++    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
++    DEALINGS IN THE SOFTWARE.
++  </copyright>
++
++  <interface name="ext_idle_notifier_v1" version="1">
++    <description summary="idle notification manager">
++      This interface allows clients to monitor user idle status.
++
++      After binding to this global, clients can create ext_idle_notification_v1
++      objects to get notified when the user is idle for a given amount of time.
++    </description>
++
++    <request name="destroy" type="destructor">
++      <description summary="destroy the manager">
++        Destroy the manager object. All objects created via this interface
++        remain valid.
++      </description>
++    </request>
++
++    <request name="get_idle_notification">
++      <description summary="create a notification object">
++        Create a new idle notification object.
++
++        The notification object has a minimum timeout duration and is tied to a
++        seat. The client will be notified if the seat is inactive for at least
++        the provided timeout. See ext_idle_notification_v1 for more details.
++
++        A zero timeout is valid and means the client wants to be notified as
++        soon as possible when the seat is inactive.
++      </description>
++      <arg name="id" type="new_id" interface="ext_idle_notification_v1"/>
++      <arg name="timeout" type="uint" summary="minimum idle timeout in msec"/>
++      <arg name="seat" type="object" interface="wl_seat"/>
++    </request>
++  </interface>
++
++  <interface name="ext_idle_notification_v1" version="1">
++    <description summary="idle notification">
++      This interface is used by the compositor to send idle notification events
++      to clients.
++
++      Initially the notification object is not idle. The notification object
++      becomes idle when no user activity has happened for at least the timeout
++      duration, starting from the creation of the notification object. User
++      activity may include input events or a presence sensor, but is
++      compositor-specific. If an idle inhibitor is active (e.g. another client
++      has created a zwp_idle_inhibitor_v1 on a visible surface), the compositor
++      must not make the notification object idle.
++
++      When the notification object becomes idle, an idled event is sent. When
++      user activity starts again, the notification object stops being idle,
++      a resumed event is sent and the timeout is restarted.
++    </description>
++
++    <request name="destroy" type="destructor">
++      <description summary="destroy the notification object">
++        Destroy the notification object.
++      </description>
++    </request>
++
++    <event name="idled">
++      <description summary="notification object is idle">
++        This event is sent when the notification object becomes idle.
++
++        It's a compositor protocol error to send this event twice without a
++        resumed event in-between.
++      </description>
++    </event>
++
++    <event name="resumed">
++      <description summary="notification object is no longer idle">
++        This event is sent when the notification object stops being idle.
++
++        It's a compositor protocol error to send this event twice without an
++        idled event in-between. It's a compositor protocol error to send this
++        event prior to any idled event.
++      </description>
++    </event>
++  </interface>
++</protocol>
+diff --git a/kysdk-waylandhelper/protocols/plasma-window-management.xml b/kysdk-waylandhelper/protocols/plasma-window-management.xml
+new file mode 100644
+index 0000000..2bbf076
+--- /dev/null
++++ b/kysdk-waylandhelper/protocols/plasma-window-management.xml
+@@ -0,0 +1,417 @@
++<?xml version="1.0" encoding="UTF-8"?>
++<protocol name="plasma_window_management">
++  <copyright><![CDATA[
++    SPDX-FileCopyrightText: 2013-2014 Pier Luigi Fiorini
++
++    SPDX-License-Identifier: LGPL-2.1-or-later
++  ]]></copyright>
++
++  <interface name="org_kde_plasma_window_management" version="15">
++    <description summary="application windows management">
++      This interface manages application windows.
++      It provides requests to show and hide the desktop and emits
++      an event every time a window is created so that the client can
++      use it to manage the window.
++
++      Only one client can bind this interface at a time.
++    </description>
++
++    <enum name="state">
++      <entry name="active" value="1 &lt;&lt; 0"/>
++      <entry name="minimized" value="1 &lt;&lt; 1"/>
++      <entry name="maximized" value="1 &lt;&lt; 2"/>
++      <entry name="fullscreen" value="1 &lt;&lt; 3"/>
++      <entry name="keep_above" value="1 &lt;&lt; 4"/>
++      <entry name="keep_below" value="1 &lt;&lt; 5"/>
++      <entry name="on_all_desktops" value="1 &lt;&lt; 6"/>
++      <entry name="demands_attention" value="1 &lt;&lt; 7"/>
++      <entry name="closeable" value="1 &lt;&lt; 8"/>
++      <entry name="minimizable" value="1 &lt;&lt; 9"/>
++      <entry name="maximizable" value="1 &lt;&lt; 10"/>
++      <entry name="fullscreenable" value="1 &lt;&lt; 11"/>
++      <entry name="skiptaskbar" value="1 &lt;&lt; 12" since="2"/>
++      <entry name="shadeable" value="1 &lt;&lt; 13" since="3"/>
++      <entry name="shaded" value="1 &lt;&lt; 14" since="3"/>
++      <entry name="movable" value="1 &lt;&lt; 15" since="3"/>
++      <entry name="resizable" value="1 &lt;&lt; 16" since="3"/>
++      <entry name="virtual_desktop_changeable" value="1 &lt;&lt; 17" since="3"/>
++      <entry name="skipswitcher" value="1 &lt;&lt; 18" since="9"/>
++    </enum>
++
++    <enum name="show_desktop">
++        <entry name="disabled" value="0"/>
++        <entry name="enabled" value="1"/>
++    </enum>
++
++    <request name="show_desktop">
++      <description summary="show/hide the desktop">
++        Tell the compositor to show/hide the desktop.
++      </description>
++      <arg name="state" type="uint" summary="requested state"/>
++    </request>
++
++    <request name="get_window">
++        <description summary="deprecated">Deprecated: use get_window_by_uuid</description>
++        <arg name="id" type="new_id" interface="org_kde_plasma_window"/>
++        <arg name="internal_window_id" type="uint" summary="The internal window id of the window to create"/>
++    </request>
++
++    <request name="get_window_by_uuid" since="12">
++        <arg name="id" type="new_id" interface="org_kde_plasma_window"/>
++        <arg name="internal_window_uuid" type="string" summary="The internal window uuiid of the window to create"/>
++    </request>
++
++    <event name="show_desktop_changed">
++        <description summary="notify the client when the show desktop mode is entered/left">
++            This event will be sent whenever the show desktop mode changes. E.g. when it is entered
++            or left.
++
++            On binding the interface the current state is sent.
++        </description>
++      <arg name="state" type="uint" summary="new state"/>
++    </event>
++
++    <event name="window">
++      <description summary="notify the client that a window was mapped">
++        This event will be sent immediately after a window is mapped.
++      </description>
++      <arg name="id" type="uint" summary="Deprecated: internal window Id"/>
++    </event>
++
++    <event name="stacking_order_changed" since="11">
++      <description summary="notify the client when stacking order changed">
++        This event will be sent when stacking order changed and on bind
++      </description>
++      <arg name="ids" type="array" summary="internal windows id array"/>
++    </event>
++
++    <event name="stacking_order_uuid_changed" since="12">
++      <description summary="notify the client when stacking order changed">
++        This event will be sent when stacking order changed and on bind
++      </description>
++      <arg name="uuids" type="string" summary="internal windows id ;-separated"/>
++    </event>
++
++    <event name="window_with_uuid" since="13">
++      <description summary="notify the client that a window was mapped">
++        This event will be sent immediately after a window is mapped.
++      </description>
++      <arg name="id" type="uint" summary="Deprecated: internal window Id"/>
++      <arg name="uuid" type="string" summary="internal window uuid"/>
++    </event>
++  </interface>
++
++  <interface name="org_kde_plasma_window" version="15">
++    <description summary="interface to control application windows">
++      Manages and control an application window.
++
++      Only one client can bind this interface at a time.
++    </description>
++
++    <request name="set_state">
++      <description summary="set window state">
++        Set window state.
++
++        Values for state argument are described by org_kde_plasma_window_management.state
++        and can be used together in a bitfield. The flags bitfield describes which flags are
++        supposed to be set, the state bitfield the value for the set flags
++      </description>
++      <arg name="flags" type="uint" summary="bitfield of set state flags"/>
++      <arg name="state" type="uint" summary="bitfield of state flags"/>
++    </request>
++
++    <request name="set_virtual_desktop">
++      <description summary="map window on a virtual desktop">
++          Deprecated: use enter_virtual_desktop
++        Maps the window to a different virtual desktop.
++
++        To show the window on all virtual desktops, call the
++        org_kde_plasma_window.set_state request and specify a on_all_desktops
++        state in the bitfield.
++      </description>
++      <arg name="number" type="uint" summary="zero based virtual desktop number"/>
++    </request>
++
++    <request name="set_minimized_geometry">
++      <description summary="set the geometry for a taskbar entry">
++        Sets the geometry of the taskbar entry for this window.
++        The geometry is relative to a panel in particular.
++      </description>
++      <arg name="panel" type="object" interface="wl_surface"/>
++      <arg name="x" type="uint"/>
++      <arg name="y" type="uint"/>
++      <arg name="width" type="uint"/>
++      <arg name="height" type="uint"/>
++    </request>
++
++    <request name="unset_minimized_geometry">
++      <description summary="set the geometry for a taskbar entry">
++        Remove the task geometry information for a particular panel.
++      </description>
++      <arg name="panel" type="object" interface="wl_surface"/>
++    </request>
++
++  <!--
++    <request name="highlight">
++      <description summary="highlight the window">
++        Tell the compositor to highlight this window.
++      </description>
++    </request>
++  -->
++
++    <request name="close">
++      <description summary="close window">
++        Close this window.
++      </description>
++    </request>
++
++    <request name="request_move" since="3">
++      <description summary="request move">
++        Request an interactive move for this window.
++      </description>
++    </request>
++
++    <request name="request_resize" since="3">
++      <description summary="request resize">
++        Request an interactive resize for this window.
++      </description>
++    </request>
++
++    <request name="destroy" type="destructor" since="4">
++      <description summary="remove resource for the org_kde_plasma_window">
++        Removes the resource bound for this org_kde_plasma_window.
++      </description>
++    </request>
++
++    <request name="get_icon" since="7">
++      <description summary="Requests to get the window icon">
++        The compositor will write the window icon into the provided file descriptor.
++        The data is a serialized QIcon with QDataStream.
++      </description>
++      <arg name="fd" type="fd" summary="file descriptor for the icon"/>
++    </request>
++
++    <event name="title_changed">
++      <description summary="window title has been changed">
++        This event will be sent as soon as the window title is changed.
++      </description>
++      <arg name="title" type="string" summary="window title"/>
++    </event>
++
++    <event name="app_id_changed">
++      <description summary="application identifier has been changed">
++        This event will be sent as soon as the application
++        identifier is changed.
++      </description>
++      <arg name="app_id" type="string"/>
++    </event>
++
++    <event name="state_changed">
++      <description summary="window state has been changed">
++        This event will be sent as soon as the window state changes.
++
++        Values for state argument are described by org_kde_plasma_window_management.state.
++      </description>
++      <arg name="flags" type="uint" summary="bitfield of state flags"/>
++    </event>
++
++    <event name="virtual_desktop_changed">
++      <description summary="window was moved to another workspace">
++          DEPRECATED: use virtual_desktop_entered and virtual_desktop_left instead
++        This event will be sent when a window is moved to another
++        virtual desktop.
++
++        It is not sent if it becomes visible on all virtual desktops though.
++      </description>
++      <arg name="number" type="int" summary="zero based virtual desktop number"/>
++    </event>
++
++    <event name="themed_icon_name_changed">
++        <description summary="window's icon name changed">
++            This event will be sent whenever the themed icon name changes. May be null.
++        </description>
++        <arg name="name" type="string" summary="the new themed icon name"/>
++    </event>
++
++    <event name="unmapped">
++      <description summary="window's surface was unmapped">
++        This event will be sent immediately after the window is closed
++        and its surface is unmapped.
++      </description>
++    </event>
++
++    <event name="initial_state" since="4">
++        <description summary="All initial known state is submitted">
++            This event will be sent immediately after all initial state been sent to the client.
++            If the Plasma window is already unmapped, the unmapped event will be sent before the
++            initial_state event.
++        </description>
++    </event>
++
++    <event name="parent_window" since="5">
++        <description summary="The parent window changed">
++            This event will be sent whenever the parent window of this org_kde_plasma_window changes.
++            The passed parent is another org_kde_plasma_window and this org_kde_plasma_window is a
++            transient window to the parent window. If the parent argument is null, this
++            org_kde_plasma_window does not have a parent window.
++        </description>
++        <arg name="parent" type="object" interface="org_kde_plasma_window" summary="The parent window" allow-null="true"/>
++    </event>
++
++    <event name="geometry" since="6">
++        <description summary="The geometry of this window in absolute coordinates">
++            This event will be sent whenever the window geometry of this org_kde_plasma_window changes.
++            The coordinates are in absolute coordinates of the windowing system.
++        </description>
++        <arg name="x" type="int" summary="x position of the org_kde_plasma_window"/>
++        <arg name="y" type="int" summary="y position of the org_kde_plasma_window"/>
++        <arg name="width" type="uint" summary="width of the org_kde_plasma_window"/>
++        <arg name="height" type="uint" summary="height of the org_kde_plasma_window"/>
++    </event>
++
++    <event name="icon_changed" since="7">
++        <description summary="The icon of the window changed">
++            This event will be sent whenever the icon of the window changes, but there is no themed
++            icon name. Common examples are Xwayland windows which have a pixmap based icon.
++
++            The client can request the icon using get_icon.
++        </description>
++    </event>
++
++    <event name="pid_changed">
++      <description summary="process id of application owning the window has changed">
++        This event will be sent when the compositor has set the process id this window belongs to.
++        This should be set once before the initial_state is sent.
++      </description>
++      <arg name="pid" type="uint" summary="process id"/>
++    </event>
++
++
++
++
++    <request name="request_enter_virtual_desktop" since="8">
++      <description summary="map window on a virtual desktop">
++        Make the window enter a virtual desktop. A window can enter more
++        than one virtual desktop. if the id is empty or invalid, no action will be performed.
++      </description>
++      <arg name="id" type="string" summary="desktop id"/>
++    </request>
++
++    <request name="request_enter_new_virtual_desktop" since="8">
++      <description summary="map window on a virtual desktop">RFC: do this with an empty id to request_enter_virtual_desktop?
++        Make the window enter a new virtual desktop. If the server consents the request,
++        it will create a new virtual desktop and assign the window to it.
++      </description>
++    </request>
++
++    <request name="request_leave_virtual_desktop" since="8">
++      <description summary="remove a window from a virtual desktop">
++        Make the window exit a virtual desktop. If it exits all desktops it will be considered on all of them.
++      </description>
++      <arg name="id" type="string" summary="desktop id"/>
++    </request>
++
++    <event name="virtual_desktop_entered" since="8">
++      <description summary="the window entered a new virtual desktop">
++          This event will be sent when the window has entered a new virtual desktop. The window can be on more than one desktop, or none: then is considered on all of them.
++      </description>
++      <arg name="id" type="string" summary="desktop id"/>
++    </event>
++
++    <event name="virtual_desktop_left" since="8">
++      <description summary="the window left a virtual desktop">
++          This event will be sent when the window left a virtual desktop. If the window leaves all desktops, it can be considered on all.
++          If the window gets manually added on all desktops, the server has to send virtual_desktop_left for every previous desktop it was in for the window to be really considered on all desktops.
++      </description>
++      <arg name="is" type="string" summary="desktop id"/>
++    </event>
++
++    <!-- Version 10 additions -->
++
++    <event name="application_menu" since="10">
++      <description summary="notify the client that the current appmenu changed">
++          This event will be sent after the application menu
++          for the window has changed.
++      </description>
++      <arg name="service_name" type="string" />
++      <arg name="object_path" type="string" />
++    </event>
++
++    <request name="request_enter_activity" since="14">
++      <description summary="map window on an activity">
++        Make the window enter an activity. A window can enter more activity. If the id is empty or invalid, no action will be performed.
++      </description>
++      <arg name="id" type="string" summary="activity id"/>
++    </request>
++
++    <request name="request_leave_activity" since="14">
++      <description summary="remove a window from an activity">
++        Make the window exit a an activity. If it exits all activities it will be considered on all of them.
++      </description>
++      <arg name="id" type="string" summary="activity id"/>
++    </request>
++
++    <event name="activity_entered" since="14">
++      <description summary="the window entered an activity">
++        This event will be sent when the window has entered an activity. The window can be on more than one activity, or none: then is considered on all of them.
++      </description>
++      <arg name="id" type="string" summary="activity id"/>
++    </event>
++
++    <event name="activity_left" since="14">
++      <description summary="the window left an activity">
++        This event will be sent when the window left an activity. If the window leaves all activities, it will be considered on all.
++        If the window gets manually added on all activities, the server has to send activity_left for every previous activity it was in for the window to be really considered on all activities.
++      </description>
++      <arg name="id" type="string" summary="activity id"/>
++    </event>
++
++    <request name="send_to_output" since="15">
++     <description summary="send window to specified output">
++        Requests this window to be displayed in a specific output.
++      </description>
++      <arg name="output" type="object" interface="wl_output"/>
++    </request>
++  </interface>
++
++  <interface name="org_kde_plasma_activation_feedback" version="1">
++    <description summary="activation feedback">
++      The activation manager interface provides a way to get notified
++      when an application is about to be activated.
++    </description>
++
++    <request name="destroy" type="destructor">
++      <description summary="destroy the activation manager object">
++        Destroy the activation manager object. The activation objects introduced
++        by this manager object will be unaffected.
++      </description>
++    </request>
++
++    <event name="activation">
++      <description summary="notify that an app is starting">
++        Will be issued when an app is set to be activated. It offers
++        an instance of org_kde_plasma_activation that will tell us the app_id
++        and the extent of the activation.
++      </description>
++      <arg name="id" type="new_id" interface="org_kde_plasma_activation"/>
++    </event>
++  </interface>
++
++  <interface name="org_kde_plasma_activation" version="1">
++    <request name="destroy" type="destructor">
++      <description summary="destroy the org_kde_plasma_activation object">
++        Notify the compositor that the org_kde_plasma_activation object will no
++        longer be used.
++      </description>
++    </request>
++
++    <event name="app_id">
++      <description summary="Offers the app_id"></description>
++      <arg name="app_id" type="string" summary="application id, as described in xdg_activation_v1"/>
++    </event>
++
++    <event name="finished">
++        <description summary="Notifies about activation finished, either by activation or because it got invalidated"></description>
++    </event>
++  </interface>
++</protocol>
+diff --git a/kysdk-waylandhelper/protocols/ukui-blur-v1.xml b/kysdk-waylandhelper/protocols/ukui-blur-v1.xml
+new file mode 100644
+index 0000000..dc098ea
+--- /dev/null
++++ b/kysdk-waylandhelper/protocols/ukui-blur-v1.xml
+@@ -0,0 +1,93 @@
++<?xml version="1.0" encoding="UTF-8"?>
++<protocol name="ukui_blur_v1">
++  <copyright><![CDATA[
++      SPDX-FileCopyrightText: 2024 KylinSoft Co., Ltd.
++      SPDX-License-Identifier: MulanPSL-2.0
++    ]]>
++  </copyright>
++
++  <interface name="ukui_blur_manager_v1" version="1">
++    <description summary="blur object factory">
++      This protocol provides a way to improve visuals of translucent surfaces
++      by blurring background behind them.
++
++      Warning! The protocol described in this file is currently in the testing
++      phase. Backward compatible changes may be added together with the
++      corresponding interface version bump. Backward incompatible changes can
++      only be done by creating a new major version of the extension.
++    </description>
++
++    <request name="destroy" type="destructor">
++      <description summary="destroy the blur manager object">
++        Informs the server that the client will no longer be using this
++        protocol object. Existing objects created by this object are not
++        affected.
++      </description>
++    </request>
++
++    <enum name="error">
++      <entry name="blur_exists" value="0"
++             summary="the surface has already a blur object associated"/>
++    </enum>
++
++    <request name="get_blur">
++      <description summary="get a blur object">
++        Instantiate an interface extension for the given wl_surface to
++        blur background behind it. If the given wl_surface already has
++        a ukui_blur_surface_v1 object associated, the blur_exists protocol
++        error will be raised.
++      </description>
++      <arg name="id" type="new_id" interface="ukui_blur_surface_v1"
++           summary="the new ukui_blur_surface_v1 object"/>
++      <arg name="surface" type="object" interface="wl_surface"
++           summary="the surface"/>
++    </request>
++  </interface>
++
++  <interface name="ukui_blur_surface_v1" version="1">
++    <description summary="blur object for a surface">
++      The blur object provides a way to specify a region behind a surface
++      that should be blurred by the compositor.
++
++      If the wl_surface associated with the ukui_blur_surface_v1 object has been
++      destroyed, this object becomes inert.
++    </description>
++
++    <request name="destroy" type="destructor">
++      <description summary="release the blur object">
++        Informs the server that the client will no longer be using this
++        protocol object. The blur region will be unset on the next commit.
++      </description>
++    </request>
++
++    <request name="set_region">
++      <description summary="set blur region">
++        This request sets the region of the surface that will have its
++        background blurred.
++
++        The blur region is specified in the surface-local coordinates.
++        The initial value for the blur region is empty. Setting the pending
++        blur region has copy semantics, and the wl_region object can be
++        destroyed immediately. A NULL wl_region causes the blur region to be
++        set to infinite.
++
++        The blur region is double-buffered state, and will be applied on
++        the next wl_surface.commit.
++
++        The blur algorithm is subject to compositor policies.
++      </description>
++      <arg name="region" type="object" interface="wl_region" allow-null="true"
++           summary="blur region of the surface"/>
++    </request>
++
++    <request name="set_level">
++      <description summary="set blur algorithm level">
++        Change blur algorithm level in compositor.
++        The range of level is 1 to 15.
++        The compositor default blur algorithm level is 5.
++        The blur level will be applied on the next wl_surface.commit.
++      </description>
++      <arg name="level" type="uint" summary="level of the blur algorithm"/>
++    </request>
++  </interface>
++</protocol>
+diff --git a/kysdk-waylandhelper/protocols/ukui-shell.xml b/kysdk-waylandhelper/protocols/ukui-shell.xml
+new file mode 100644
+index 0000000..203e75e
+--- /dev/null
++++ b/kysdk-waylandhelper/protocols/ukui-shell.xml
+@@ -0,0 +1,235 @@
++<?xml version="1.0" encoding="UTF-8"?>
++<protocol name="ukui_shell">
++  <copyright><![CDATA[
++      SPDX-FileCopyrightText: 2024 KylinSoft Co., Ltd.
++      SPDX-FileCopyrightText: 2024 Hongfei Shang
++
++      SPDX-License-Identifier: MulanPSL-2.0
++    ]]>
++  </copyright>
++
++  <interface name="ukui_shell" version="4">
++    <description summary="create ukui shell windows and helpers">
++      This interface is used by kylin powered Wayland shells to communicate with the compositor and
++      can only be bound one time.
++    </description>
++
++    <!-- Surfaces -->
++
++    <request name="create_surface">
++      <description summary="create a shell surface from a surface">
++        Create a shell surface for an existing surface.
++
++        Only one shell surface can be associated with a given surface.
++      </description>
++      <arg name="id" type="new_id" interface="ukui_surface"/>
++      <arg name="surface" type="object" interface="wl_surface"/>
++    </request>
++
++    <!-- Outputs -->
++
++    <request name="get_current_output" since="2">
++      <description summary="get output under cursor">
++        Request get the output under cursor.
++
++        Send current_output and done event after this request.
++      </description>
++    </request>
++
++    <event name="current_output" since="2">
++      <description summary="send the output name under cursor">
++        Emitted after bind ukui_shell or receive get_current_output request.
++      </description>
++      <arg name="output_name" type="string" summary="name of current output"/>
++      <arg name="seat_name" type="string" summary="seat name of cursor under output"/>
++    </event>
++
++    <event name="done" since="2">
++      <description summary="sent all output and seat info completely">
++        This event is sent after all information has been sent after binding to
++        the ukui shell object.
++      </description>
++    </event>
++
++  </interface>
++
++  <interface name="ukui_surface" version="4">
++    <description summary="metadata interface">
++      An interface that may be implemented by a wl_surface, for implementations that provide the
++      shell user interface.
++
++      It provides requests to set surface roles, assign an output or set the position in output
++      coordinates.
++
++      On the server side the object is automatically destroyed when the related wl_surface is
++      destroyed. On client side, ukui_surface.destroy() must be called before destroying the
++      wl_surface object.
++    </description>
++
++    <!-- Destructor -->
++
++    <request name="destroy" type="destructor">
++      <description summary="remove ukui_surface interface">
++        The ukui_surface interface is removed from the wl_surface object that was turned into a
++        shell surface with the ukui_shell.get_surface request. The shell surface role is lost
++        and wl_surface is unmapped.
++      </description>
++    </request>
++
++    <!-- Output and position -->
++
++    <request name="set_output">
++      <description summary="assign an output to this shell surface">
++        Assign an output to this shell surface. The compositor will use this information to set the
++        position when ukui_surface.set_position request is called.
++      </description>
++      <arg name="output" type="object" interface="wl_output"/>
++    </request>
++
++    <request name="set_position">
++      <description summary="change the shell surface position">
++        Move the surface to new coordinates.
++
++        Coordinates are global, for example 50,50 for a 1920,0+1920x1080 output is 1970,50 in global
++        coordinates space.
++      </description>
++      <arg name="x" type="int" summary="x coordinate in global space"/>
++      <arg name="y" type="int" summary="y coordinate in global space"/>
++    </request>
++
++    <!-- Skip taskbar-->
++
++    <request name="set_skip_taskbar">
++      <description summary="make the window skip the taskbar">
++        Setting this bit to the window, will make it say it prefers to not be listed in the taskbar.
++        Taskbar implementations may or may not follow this hint.
++      </description>
++      <arg name="skip" type="uint" summary="Boolean value that sets whether to skip the taskbar"/>
++    </request>
++
++    <!-- Skip switcher -->
++
++    <request name="set_skip_switcher">
++      <description summary="make the window not appear in a switcher">
++        Setting this bit will indicate that the window prefers not to be listed in a switcher.
++      </description>
++      <arg name="skip" type="uint"
++        summary="Boolean value that sets whether to skip the window switcher."/>
++    </request>
++
++    <enum name="property">
++      <entry name="no_titlebar" value="0"/>
++      <entry name="theme" value="1"/>
++      <entry name="window_radius" value="2"/>
++      <entry name="border_width" value="3"/>
++      <entry name="border_color" value="4"/>
++      <entry name="shadow_radius" value="5"/>
++      <entry name="shadow_offset" value="6"/>
++      <entry name="shadow_color" value="7"/>
++    </enum>
++
++    <request name="set_property">
++      <description summary="set window property">
++        Set window property.
++
++        Values for property argument are described by ukui_shell.property
++        and can be used together in a bitfield. The flags bitfield describes which property are
++        supposed to be set.
++      </description>
++      <arg name="property" type="uint" enum="property" summary="property type"/>
++      <arg name="value" type="uint" summary="property value"/>
++    </request>
++
++    <!-- 窗口角色/类型 -->
++
++    <enum name="role">
++      <entry name="normal" value="0"/>
++      <entry name="desktop" value="1"/>
++      <entry name="panel" value="2"/>
++      <entry name="onscreendisplay" value="3"/>
++      <entry name="notification" value="4"/>
++      <entry name="tooltip" value="5"/>
++      <entry name="criticalnotification" value="6"/>
++      <entry name="appletpopup" value="7"/>
++      <entry name="screenlock" value="8"/>
++      <entry name="watermark" value="9"/>
++      <entry name="systemwindow" value="10"/>
++      <entry name="inputpanel" value="11"/>
++      <entry name="logout" value="12"/>
++      <entry name="screenlocknotification" value="13"/>
++      <entry name="switcher" value="14"/>
++      <entry name="authentication" value="15"/>
++    </enum>
++
++    <request name="set_role">
++      <description summary="assign a role to this surface">
++        Assign a role to a shell surface.
++
++        The compositor handles surfaces depending on their role. See the explanation below.
++
++        This request fails if the surface already has a role, this means the surface role may be
++        assigned only once.
++      </description>
++      <arg name="role" type="uint"/>
++    </request>
++
++    <request name="set_panel_auto_hide">
++      <description summary="auto hide the panel ">
++        Setting this bit will indicate that the panel area not to be calculate in output usable area.
++      </description>
++      <arg name="hide" type="uint" summary="Boolean value that sets whether to hide the panel"/>
++    </request>
++
++    <request name="open_under_cursor">
++      <description summary="open under cursor">
++        Request the initial position of this surface to be under the current cursor position. Has to
++        be called before attaching any buffer to this surface.
++      </description>
++      <arg name="x" type="int" summary="x coordinate in cursor-relative coordinates"/>
++      <arg name="y" type="int" summary="y coordinate in cursor-relative coordinates"/>
++    </request>
++
++    <request name="set_panel_takes_focus">
++      <description summary="Whether a panel takes focus">
++          By default various ukui_surface roles do not take focus and cannot be activated.
++          With this request the compositor can be instructed to pass focus also to this ukui_surface.
++      </description>
++      <arg name="takes_focus" type="uint" summary="Boolean value that sets whether the panel takes focus"/>
++    </request>
++
++    <request name="grab_keyboard">
++      <description summary="make the surface take keyboard grab">
++        This request makes the created surface take an explicit keyboard grab.
++        This keyboard grab will be dismissed when the client destroys the surface.
++        Grab all keyboard when seat is set to null.
++      </description>
++      <arg name="seat" type="object" interface="wl_seat" allow-null="true"
++           summary="the seat for which the keyboard should be grabbed"/>
++    </request>
++
++    <request name="set_icon">
++      <description summary="set server decoration icon">
++        Setting server decoration icon by icon name.
++        Set icon name to null will use app_id to find icon.
++      </description>
++      <arg name="icon_name" type="string" allow-null="true" summary="icon name for surface ssd"/>
++    </request>
++
++    <event name="position" since="3">
++      <description summary="informs of a new position for the window">
++        This event informs the client that the position of the window is about to change.
++      </description>
++      <arg name="x" type="int" summary="the horizontal position of the window" />
++      <arg name="y" type="int" summary="the vertical position of the window" />
++    </event>
++
++    <request name="activate" since = "4">
++      <description summary="set the surface active state">
++        This request makes the created surface to be activated.
++        There is no guarantee the surface will be actually activated, and behaviour
++        may be compositor-dependentption.
++      </description>
++    </request>
++
++  </interface>
++</protocol>
+diff --git a/kysdk-waylandhelper/protocols/ukui-window-management.xml b/kysdk-waylandhelper/protocols/ukui-window-management.xml
+new file mode 100644
+index 0000000..ceb01d7
+--- /dev/null
++++ b/kysdk-waylandhelper/protocols/ukui-window-management.xml
+@@ -0,0 +1,423 @@
++<?xml version="1.0" encoding="UTF-8"?>
++<protocol name="ukui_window_management">
++  <copyright><![CDATA[
++    SPDX-FileCopyrightText: 2024 KylinSoft Co., Ltd.
++    SPDX-FileCopyrightText: 2024 Hongfei Shang
++
++    SPDX-License-Identifier: MulanPSL-2.0
++  ]]>
++</copyright>
++
++  <interface name="ukui_window_management" version="1">
++    <description summary="application windows management">
++      This interface manages application windows. It provides requests to show and hide the desktop
++      and emits an event every time a window is created so that the client can use it to manage the
++      window.
++    </description>
++
++    <enum name="show_desktop">
++      <entry name="disabled" value="0"/>
++      <entry name="enabled" value="1"/>
++    </enum>
++
++    <request name="show_desktop">
++      <description summary="show/hide the desktop">
++        Tell the compositor to show/hide the desktop.
++      </description>
++      <arg name="state" type="uint" summary="requested state"/>
++    </request>
++
++    <request name="create_window">
++      <arg name="id" type="new_id" interface="ukui_window"/>
++      <arg name="internal_window_uuid" type="string"
++        summary="The internal window uuiid of the window to create"/>
++    </request>
++
++    <event name="show_desktop_changed">
++      <description summary="notify the client when the show desktop mode is entered/left">
++        This event will be sent whenever the show desktop mode changes. E.g. when it is entered or
++        left.
++
++        On binding the interface the current state is sent.
++      </description>
++      <arg name="state" type="uint" summary="new state"/>
++    </event>
++
++    <event name="stacking_order_changed">
++      <description summary="notify the client when stacking order changed">
++        This event will be sent when stacking order changed and on bind
++      </description>
++      <arg name="uuids" type="string" summary="internal windows uuid, use ';' separated"/>
++    </event>
++
++    <event name="window_created">
++      <description summary="notify the client that a window was mapped">
++        This event will be sent immediately after a window is mapped.
++      </description>
++      <arg name="uuid" type="string" summary="internal window uuid"/>
++    </event>
++  </interface>
++
++  <interface name="ukui_window" version="1">
++    <description summary="interface to control application windows">
++      Manages and control an application window.
++    </description>
++
++    <enum name="state">
++      <entry name="active" value="0x1"/>
++      <entry name="minimized" value="0x2"/>
++      <entry name="maximized" value="0x4"/>
++      <entry name="fullscreen" value="0x8"/>
++      <entry name="keep_above" value="0x10"/>
++      <entry name="keep_below" value="0x20"/>
++      <entry name="on_all_desktops" value="0x40"/>
++      <entry name="demands_attention" value="0x80"/>
++      <entry name="closeable" value="0x100"/>
++      <entry name="minimizable" value="0x200"/>
++      <entry name="maximizable" value="0x400"/>
++      <entry name="fullscreenable" value="0x800"/>
++      <entry name="shadeable" value="0x1000"/>
++      <entry name="shaded" value="0x2000"/>
++      <entry name="movable" value="0x4000"/>
++      <entry name="resizable" value="0x8000"/>
++      <entry name="virtual_desktop_changeable" value="0x10000"/>
++      <entry name="accept_focus" value="0x20000"/>
++      <entry name="skiptaskbar" value="0x40000"/>
++      <entry name="skipswitcher" value="0x80000"/>
++      <entry name="modality" value="0x100000"/>
++    </enum>
++
++    <request name="set_state">
++      <description summary="set window state">
++        Set window state. Can set multiple states at once.
++
++        Values for state argument are described by ukui_window_management.state and can be used
++        together in a bitfield.
++        The flags bitfield describes which flags are supposed to be set, the
++        state bitfield the value for the set flags.
++
++        The state argument is not a boolean value, but a bitfield, so it is possible to set multiple
++        states at once. Only the states that are set in the flags bitfield will be changed.
++
++        For example:
++
++        If flags was 0x14(keep_above|maximized) and state was 0x04(maximized), the window would be
++        maximized, but not keep above.
++
++        If flags was 0x04(maximized) and state was 0x14(keep_above|maximized), the window would be
++        maximized but not change keep above state.
++      </description>
++      <arg name="flags" type="uint" summary="bitfield of set state flags"/>
++      <arg name="state" type="uint" summary="bitfield of state flags"/>
++    </request>
++
++    <request name="set_startup_geometry">
++      <description summary="set the geometry for a taskbar/desktop entry">
++        Sets the geometry of the taskbar/desktop entry for this window. The geometry is relative to
++        a panel/desktop in particular.
++      </description>
++      <arg name="entry" type="object" interface="wl_surface" summary="the taskbar/desktop entry for the window"/>
++      <arg name="x" type="uint"/>
++      <arg name="y" type="uint"/>
++      <arg name="width" type="uint"/>
++      <arg name="height" type="uint"/>
++    </request>
++
++    <request name="set_minimized_geometry">
++      <description summary="set the geometry for a taskbar entry">
++        Sets the geometry of the taskbar entry for this window. The geometry is relative to a panel
++        in particular.
++      </description>
++      <arg name="panel" type="object" interface="wl_surface"/>
++      <arg name="x" type="uint"/>
++      <arg name="y" type="uint"/>
++      <arg name="width" type="uint"/>
++      <arg name="height" type="uint"/>
++    </request>
++
++    <request name="unset_minimized_geometry">
++      <description summary="set the geometry for a taskbar entry">
++        Remove the task geometry information for a particular panel.
++      </description>
++      <arg name="panel" type="object" interface="wl_surface"/>
++    </request>
++
++    <request name="close">
++      <description summary="close window">
++        Close this window.
++      </description>
++    </request>
++
++    <request name="request_move">
++      <description summary="request move">
++        Request an interactive move for this window. The pointer will move to the center of the
++        window and move with the pointer.
++
++        When mouse button is released, the interactive move ends.
++      </description>
++    </request>
++
++    <request name="request_resize">
++      <description summary="request resize">
++        Request an interactive resize for this window. The pointer will move to window right bottom
++        corner and resize with the pointer.
++
++        When mouse button is released, the interactive resize ends.
++      </description>
++    </request>
++
++    <request name="destroy" type="destructor">
++      <description summary="remove resource for the ukui_window">
++        Removes the resource bound for this ukui_window.
++      </description>
++    </request>
++
++    <request name="get_icon">
++      <description summary="Requests to get the window icon">
++        The compositor will write the window icon into the provided file descriptor.
++        This is an array of 32bit packed CARDINAL ARGB with high byte being A, low byte
++        being B. The first two cardinals are width, height. Data is in rows, left to
++        right and top to bottom.
++      </description>
++      <arg name="fd" type="fd" summary="file descriptor for the icon"/>
++    </request>
++
++    <event name="title_changed">
++      <description summary="window title has been changed">
++        This event will be sent as soon as the window title is changed.
++      </description>
++      <arg name="title" type="string" summary="window title"/>
++    </event>
++
++    <event name="app_id_changed">
++      <description summary="application identifier has been changed">
++        This event will be sent as soon as the application identifier is changed.
++      </description>
++      <arg name="app_id" type="string"/>
++    </event>
++
++    <event name="state_changed">
++      <description summary="window state has been changed">
++        This event will be sent as soon as the window state changes.
++
++        Values for state argument are described by ukui_window_management.state. It contains
++        the whole new state of the window.
++      </description>
++      <arg name="flags" type="uint" summary="bitfield of state flags"/>
++    </event>
++
++
++    <event name="themed_icon_name_changed">
++      <description summary="window's icon name changed">
++        This event will be sent whenever the themed icon name changes. May be null.
++      </description>
++      <arg name="name" type="string" summary="the new themed icon name"/>
++    </event>
++
++    <event name="unmapped">
++      <description summary="window's surface was unmapped">
++        This event will be sent immediately after the window is closed and its surface is unmapped.
++      </description>
++    </event>
++
++    <event name="initial_state">
++      <description summary="All initial known state is submitted">
++        This event will be sent immediately after all initial state been sent to the client. If the
++        Plasma window is already unmapped, the unmapped event will be sent before the initial_state
++        event.
++      </description>
++    </event>
++
++    <event name="parent_window">
++      <description summary="The parent window changed">
++        This event will be sent whenever the parent window of this ukui_window changes. The
++        passed parent is another ukui_window and this ukui_window is a transient window to
++        the parent window. If the parent argument is null, this ukui_window does not have a
++        parent window.
++      </description>
++      <arg name="parent" type="object" interface="ukui_window" summary="The parent window"
++        allow-null="true"/>
++    </event>
++
++    <event name="geometry">
++      <description summary="The geometry of this window in absolute coordinates">
++        This event will be sent whenever the window geometry of this ukui_window changes. The
++        coordinates are in absolute coordinates of the windowing system.
++      </description>
++      <arg name="x" type="int" summary="x position of the ukui_window"/>
++      <arg name="y" type="int" summary="y position of the ukui_window"/>
++      <arg name="width" type="uint" summary="width of the ukui_window"/>
++      <arg name="height" type="uint" summary="height of the ukui_window"/>
++    </event>
++
++    <event name="icon_changed">
++      <description summary="The icon of the window changed">
++        This event will be sent whenever the icon of the window changes, but there is no themed icon
++        name. Common examples are Xwayland windows which have a pixmap based icon.
++
++        The client can request the icon using get_icon.
++      </description>
++    </event>
++
++    <event name="pid_changed">
++      <description summary="process id of application owning the window has changed">
++        This event will be sent when the compositor has set the process id this window belongs to.
++        This should be set once before the initial_state is sent.
++      </description>
++      <arg name="pid" type="uint" summary="process id"/>
++    </event>
++
++
++    <request name="request_enter_virtual_desktop">
++      <description summary="map window on a virtual desktop">
++        Make the window enter a virtual desktop. A window can enter more than one virtual desktop.
++        if the id is empty or invalid, no action will be performed.
++      </description>
++      <arg name="id" type="string" summary="desktop id"/>
++    </request>
++
++    <request name="request_enter_new_virtual_desktop">
++      <description summary="map window on a virtual desktop">RFC: do this with an empty id to
++        request_enter_virtual_desktop?
++        Make the window enter a new virtual desktop. If the server consents the request, it will
++        create a new virtual desktop and assign the window to it.
++      </description>
++    </request>
++
++    <request name="request_leave_virtual_desktop">
++      <description summary="remove a window from a virtual desktop">
++        Make the window exit a virtual desktop. If it exits all desktops it will be considered on
++        all of them.
++      </description>
++      <arg name="id" type="string" summary="desktop id"/>
++    </request>
++
++    <event name="virtual_desktop_entered">
++      <description summary="the window entered a new virtual desktop">
++        This event will be sent when the window has entered a new virtual desktop. The window can be
++        on more than one desktop, or none: then is considered on all of them.
++      </description>
++      <arg name="id" type="string" summary="desktop id"/>
++    </event>
++
++    <event name="virtual_desktop_left">
++      <description summary="the window left a virtual desktop">
++        This event will be sent when the window left a virtual desktop. If the window leaves all
++        desktops, it can be considered on all. If the window gets manually added on all desktops,
++        the server has to send virtual_desktop_left for every previous desktop it was in for the
++        window to be really considered on all desktops.
++      </description>
++      <arg name="is" type="string" summary="desktop id"/>
++    </event>
++
++    <event name="application_menu">
++      <description summary="notify the client that the current appmenu changed">
++        This event will be sent after the application menu for the window has changed.
++      </description>
++      <arg name="service_name" type="string"/>
++      <arg name="object_path" type="string"/>
++    </event>
++
++    <request name="request_enter_activity">
++      <description summary="map window on an activity">
++        Make the window enter an activity. A window can enter more activity. If the id is empty or
++        invalid, no action will be performed.
++      </description>
++      <arg name="id" type="string" summary="activity id"/>
++    </request>
++
++    <request name="request_leave_activity">
++      <description summary="remove a window from an activity">
++        Make the window exit a an activity. If it exits all activities it will be considered on all
++        of them.
++      </description>
++      <arg name="id" type="string" summary="activity id"/>
++    </request>
++
++    <event name="activity_entered">
++      <description summary="the window entered an activity">
++        This event will be sent when the window has entered an activity. The window can be on more
++        than one activity, or none: then is considered on all of them.
++      </description>
++      <arg name="id" type="string" summary="activity id"/>
++    </event>
++
++    <event name="activity_left">
++      <description summary="the window left an activity">
++        This event will be sent when the window left an activity. If the window leaves all
++        activities, it will be considered on all. If the window gets manually added on all
++        activities, the server has to send activity_left for every previous activity it was in for
++        the window to be really considered on all activities.
++      </description>
++      <arg name="id" type="string" summary="activity id"/>
++    </event>
++
++    <request name="send_to_output">
++      <description summary="send window to specified output">
++        Requests this window to be displayed in a specific output.
++      </description>
++      <arg name="output" type="object" interface="wl_output"/>
++    </request>
++
++    <event name="resource_name_changed">
++      <description summary="X11 resource name has changed">
++        This event will be sent when the X11 resource name of the window has changed. This is only
++        set for XWayland windows.
++      </description>
++      <arg name="resource_name" type="string" summary="resource name"/>
++    </event>
++
++    <request name="highlight">
++      <description summary="highlight the window">
++        Tell the compositor to highlight this window.
++      </description>
++    </request>
++
++    <request name="unset_highlight">
++      <description summary="unset highlight window">
++        Tell the compositor to unset highlight window.
++      </description>
++    </request>
++  </interface>
++
++  <interface name="org_ukui_activation_feedback" version="1">
++    <description summary="activation feedback">
++      The activation manager interface provides a way to get notified when an application is about
++      to be activated.
++    </description>
++
++    <request name="destroy" type="destructor">
++      <description summary="destroy the activation manager object">
++        Destroy the activation manager object. The activation objects introduced by this manager
++        object will be unaffected.
++      </description>
++    </request>
++
++    <event name="activation">
++      <description summary="notify that an app is starting">
++        Will be issued when an app is set to be activated. It offers an instance of
++        org_ukui_activation that will tell us the app_id and the extent of the activation.
++      </description>
++      <arg name="id" type="new_id" interface="org_ukui_activation"/>
++    </event>
++  </interface>
++
++  <interface name="org_ukui_activation" version="1">
++    <request name="destroy" type="destructor">
++      <description summary="destroy the org_ukui_activation object">
++        Notify the compositor that the org_ukui_activation object will no longer be used.
++      </description>
++    </request>
++
++    <event name="app_id">
++      <description summary="Offers the app_id"></description>
++      <arg name="app_id" type="string" summary="application id, as described in xdg_activation_v1"/>
++    </event>
++
++    <event name="finished">
++      <description
++        summary="Notifies about activation finished, either by activation or because it got invalidated">
++      </description>
++    </event>
++  </interface>
++</protocol>
+diff --git a/kysdk-waylandhelper/protocols/xdg-activation-v1.xml b/kysdk-waylandhelper/protocols/xdg-activation-v1.xml
+new file mode 100644
+index 0000000..9adcc27
+--- /dev/null
++++ b/kysdk-waylandhelper/protocols/xdg-activation-v1.xml
+@@ -0,0 +1,200 @@
++<?xml version="1.0" encoding="UTF-8"?>
++<protocol name="xdg_activation_v1">
++
++  <copyright>
++    Copyright © 2020 Aleix Pol Gonzalez &lt;aleixpol@kde.org&gt;
++    Copyright © 2020 Carlos Garnacho &lt;carlosg@gnome.org&gt;
++
++    Permission is hereby granted, free of charge, to any person obtaining a
++    copy of this software and associated documentation files (the "Software"),
++    to deal in the Software without restriction, including without limitation
++    the rights to use, copy, modify, merge, publish, distribute, sublicense,
++    and/or sell copies of the Software, and to permit persons to whom the
++    Software is furnished to do so, subject to the following conditions:
++
++    The above copyright notice and this permission notice (including the next
++    paragraph) shall be included in all copies or substantial portions of the
++    Software.
++
++    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
++    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
++    THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
++    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
++    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
++    DEALINGS IN THE SOFTWARE.
++  </copyright>
++
++  <description summary="Protocol for requesting activation of surfaces">
++    The way for a client to pass focus to another toplevel is as follows.
++
++    The client that intends to activate another toplevel uses the
++    xdg_activation_v1.get_activation_token request to get an activation token.
++    This token is then forwarded to the client, which is supposed to activate
++    one of its surfaces, through a separate band of communication.
++
++    One established way of doing this is through the XDG_ACTIVATION_TOKEN
++    environment variable of a newly launched child process. The child process
++    should unset the environment variable again right after reading it out in
++    order to avoid propagating it to other child processes.
++
++    Another established way exists for Applications implementing the D-Bus
++    interface org.freedesktop.Application, which should get their token under
++    activation-token on their platform_data.
++
++    In general activation tokens may be transferred across clients through
++    means not described in this protocol.
++
++    The client to be activated will then pass the token
++    it received to the xdg_activation_v1.activate request. The compositor can
++    then use this token to decide how to react to the activation request.
++
++    The token the activating client gets may be ineffective either already at
++    the time it receives it, for example if it was not focused, for focus
++    stealing prevention. The activating client will have no way to discover
++    the validity of the token, and may still forward it to the to be activated
++    client.
++
++    The created activation token may optionally get information attached to it
++    that can be used by the compositor to identify the application that we
++    intend to activate. This can for example be used to display a visual hint
++    about what application is being started.
++
++    Warning! The protocol described in this file is currently in the testing
++    phase. Backward compatible changes may be added together with the
++    corresponding interface version bump. Backward incompatible changes can
++    only be done by creating a new major version of the extension.
++  </description>
++
++  <interface name="xdg_activation_v1" version="1">
++    <description summary="interface for activating surfaces">
++      A global interface used for informing the compositor about applications
++      being activated or started, or for applications to request to be
++      activated.
++    </description>
++
++    <request name="destroy" type="destructor">
++      <description summary="destroy the xdg_activation object">
++        Notify the compositor that the xdg_activation object will no longer be
++        used.
++
++        The child objects created via this interface are unaffected and should
++        be destroyed separately.
++      </description>
++    </request>
++
++    <request name="get_activation_token">
++      <description summary="requests a token">
++        Creates an xdg_activation_token_v1 object that will provide
++        the initiating client with a unique token for this activation. This
++        token should be offered to the clients to be activated.
++      </description>
++
++      <arg name="id" type="new_id" interface="xdg_activation_token_v1"/>
++    </request>
++
++    <request name="activate">
++      <description summary="notify new interaction being available">
++        Requests surface activation. It's up to the compositor to display
++        this information as desired, for example by placing the surface above
++        the rest.
++
++        The compositor may know who requested this by checking the activation
++        token and might decide not to follow through with the activation if it's
++        considered unwanted.
++
++        Compositors can ignore unknown activation tokens when an invalid
++        token is passed.
++      </description>
++      <arg name="token" type="string" summary="the activation token of the initiating client"/>
++      <arg name="surface" type="object" interface="wl_surface"
++	   summary="the wl_surface to activate"/>
++    </request>
++  </interface>
++
++  <interface name="xdg_activation_token_v1" version="1">
++    <description summary="an exported activation handle">
++      An object for setting up a token and receiving a token handle that can
++      be passed as an activation token to another client.
++
++      The object is created using the xdg_activation_v1.get_activation_token
++      request. This object should then be populated with the app_id, surface
++      and serial information and committed. The compositor shall then issue a
++      done event with the token. In case the request's parameters are invalid,
++      the compositor will provide an invalid token.
++    </description>
++
++    <enum name="error">
++      <entry name="already_used" value="0"
++             summary="The token has already been used previously"/>
++    </enum>
++
++    <request name="set_serial">
++      <description summary="specifies the seat and serial of the activating event">
++        Provides information about the seat and serial event that requested the
++        token.
++
++        The serial can come from an input or focus event. For instance, if a
++        click triggers the launch of a third-party client, the launcher client
++        should send a set_serial request with the serial and seat from the
++        wl_pointer.button event.
++
++        Some compositors might refuse to activate toplevels when the token
++        doesn't have a valid and recent enough event serial.
++
++        Must be sent before commit. This information is optional.
++      </description>
++      <arg name="serial" type="uint"
++           summary="the serial of the event that triggered the activation"/>
++      <arg name="seat" type="object" interface="wl_seat"
++           summary="the wl_seat of the event"/>
++    </request>
++
++    <request name="set_app_id">
++      <description summary="specifies the application being activated">
++        The requesting client can specify an app_id to associate the token
++        being created with it.
++
++        Must be sent before commit. This information is optional.
++      </description>
++      <arg name="app_id" type="string"
++           summary="the application id of the client being activated."/>
++    </request>
++
++    <request name="set_surface">
++      <description summary="specifies the surface requesting activation">
++        This request sets the surface requesting the activation. Note, this is
++        different from the surface that will be activated.
++
++        Some compositors might refuse to activate toplevels when the token
++        doesn't have a requesting surface.
++
++        Must be sent before commit. This information is optional.
++      </description>
++      <arg name="surface" type="object" interface="wl_surface"
++	   summary="the requesting surface"/>
++    </request>
++
++    <request name="commit">
++      <description summary="issues the token request">
++        Requests an activation token based on the different parameters that
++        have been offered through set_serial, set_surface and set_app_id.
++      </description>
++    </request>
++
++    <event name="done">
++      <description summary="the exported activation token">
++        The 'done' event contains the unique token of this activation request
++        and notifies that the provider is done.
++      </description>
++      <arg name="token" type="string" summary="the exported activation token"/>
++    </event>
++
++    <request name="destroy" type="destructor">
++      <description summary="destroy the xdg_activation_token_v1 object">
++        Notify the compositor that the xdg_activation_token_v1 object will no
++        longer be used. The received token stays valid.
++      </description>
++    </request>
++  </interface>
++</protocol>
+diff --git a/kysdk-waylandhelper/src/blurmanager/blurabstractinterface.h b/kysdk-waylandhelper/src/blurmanager/blurabstractinterface.h
+index 6155b91..4729b1f 100644
+--- a/kysdk-waylandhelper/src/blurmanager/blurabstractinterface.h
++++ b/kysdk-waylandhelper/src/blurmanager/blurabstractinterface.h
+@@ -1,15 +1,17 @@
+ #ifndef BLURABSTRACTINTERFACE_H
+ #define BLURABSTRACTINTERFACE_H
+ 
+-#include <QWindow>
+ #include <QRegion>
++#include <QWindow>
+ 
+-class BlurAbstractInterface:public QObject
++class BlurAbstractInterface : public QObject
+ {
+ public:
+-    BlurAbstractInterface(QObject* parent=nullptr)
+-        :QObject(parent){}
+-    virtual bool setBlurBehindWithStrength(QWindow *window, bool enable = true, const QRegion &region = QRegion(), uint32_t strength = -1)  = 0;
++    BlurAbstractInterface(QObject *parent = nullptr)
++        : QObject(parent)
++    {
++    }
++    virtual bool setBlurBehindWithStrength(QWindow *window, bool enable = true, const QRegion &region = QRegion(), uint32_t strength = -1) = 0;
+ };
+ 
+ #endif // BLURABSTRACTINTERFACE_H
+diff --git a/kysdk-waylandhelper/src/blurmanager/blurmanager.cpp b/kysdk-waylandhelper/src/blurmanager/blurmanager.cpp
+index 0529e9b..0c2e989 100644
+--- a/kysdk-waylandhelper/src/blurmanager/blurmanager.cpp
++++ b/kysdk-waylandhelper/src/blurmanager/blurmanager.cpp
+@@ -1,24 +1,24 @@
+ #include "blurmanager.h"
+ #include "ukui-blur-manager-client-protocol.h"
+ 
+-#include <QWindow>
+-#include <QRegion>
+ #include <QGuiApplication>
++#include <QRegion>
++#include <QWindow>
+ 
+-#include "blurxcbinterface.h"
+ #include "blurwaylandinterface.h"
++#include "blurxcbinterface.h"
+ 
+ namespace kdk
+ {
+ 
+-static BlurManager* g_blurmanager = nullptr;
++static BlurManager *g_blurmanager = nullptr;
+ 
+ BlurManager::BlurManager(QObject *parent)
+-    :QObject(parent)
++    : QObject(parent)
+ {
+     QString platform = QGuiApplication::platformName();
+-    if(platform.startsWith(QLatin1String("wayland"),Qt::CaseInsensitive))
+-         m_blurInterface = new BlurWaylandInterface(this);
++    if (platform.startsWith(QLatin1String("wayland"), Qt::CaseInsensitive))
++        m_blurInterface = new BlurWaylandInterface(this);
+     else
+         m_blurInterface = new BlurXcbInterface(this);
+ }
+@@ -30,7 +30,7 @@ BlurAbstractInterface *BlurManager::interface()
+ 
+ BlurManager *BlurManager::self()
+ {
+-    if(g_blurmanager)
++    if (g_blurmanager)
+         return g_blurmanager;
+     g_blurmanager = new BlurManager();
+     return g_blurmanager;
+diff --git a/kysdk-waylandhelper/src/blurmanager/blurmanager.h b/kysdk-waylandhelper/src/blurmanager/blurmanager.h
+index deeee43..9975ea7 100644
+--- a/kysdk-waylandhelper/src/blurmanager/blurmanager.h
++++ b/kysdk-waylandhelper/src/blurmanager/blurmanager.h
+@@ -2,8 +2,8 @@
+ #define BLURMANAGER_H
+ 
+ #include <QObject>
+-#include <QWindow>
+ #include <QRegion>
++#include <QWindow>
+ 
+ #include "blurabstractinterface.h"
+ 
+@@ -15,10 +15,9 @@ class Q_DECL_EXPORT BlurManager : public QObject
+ {
+     Q_OBJECT
+ public:
+-    static BlurManager*self();
++    static BlurManager *self();
+     static bool setBlurBehindWithStrength(QWindow *window, bool enable = true, const QRegion &region = QRegion(), uint32_t strength = -1);
+ 
+-
+ private:
+     BlurManager(QObject *parent = nullptr);
+     BlurAbstractInterface *interface();
+diff --git a/kysdk-waylandhelper/src/blurmanager/blurwaylandinterface.cpp b/kysdk-waylandhelper/src/blurmanager/blurwaylandinterface.cpp
+index 18bef0f..479ffa1 100644
+--- a/kysdk-waylandhelper/src/blurmanager/blurwaylandinterface.cpp
++++ b/kysdk-waylandhelper/src/blurmanager/blurwaylandinterface.cpp
+@@ -3,10 +3,10 @@
+ 
+ static const u_int32_t ukui_blur_surpported_version = 1;
+ 
+-static void handle_global(void *data,struct wl_registry *wl_registry,uint32_t name, const char *interface,  uint32_t version)
++static void handle_global(void *data, struct wl_registry *wl_registry, uint32_t name, const char *interface, uint32_t version)
+ {
+     auto blurInterface = reinterpret_cast<BlurWaylandInterface *>(data);
+-    blurInterface->handleGlobal(data,wl_registry,name,interface,version);
++    blurInterface->handleGlobal(data, wl_registry, name, interface, version);
+ }
+ static void handle_global_remove(void *data, struct wl_registry *wl_registry, uint32_t name)
+ {
+@@ -20,7 +20,7 @@ BlurWaylandInterface::BlurWaylandInterface(QObject *parent)
+     m_registry = new Registry(this);
+     m_registry->create(m_connection->display());
+ 
+-    wl_registry* registry = *m_registry;
++    wl_registry *registry = *m_registry;
+     wl_registry_add_listener(registry, &s_registryListener, this);
+ 
+     m_registry->setup();
+@@ -29,108 +29,88 @@ BlurWaylandInterface::BlurWaylandInterface(QObject *parent)
+ 
+ void BlurWaylandInterface::handleGlobal(void *data, wl_registry *registry, uint32_t name, const char *interface, uint32_t version)
+ {
+-    if (strcmp(interface, ukui_blur_manager_v1_interface.name) == 0)
+-    {
+-        ukui_blur_manager_v1 *blur_manager_handle =  (ukui_blur_manager_v1 *) wl_registry_bind(registry, name, &ukui_blur_manager_v1_interface, qMin(ukui_blur_surpported_version, version));
+-        if(blur_manager_handle)
+-        {
++    if (strcmp(interface, ukui_blur_manager_v1_interface.name) == 0) {
++        ukui_blur_manager_v1 *blur_manager_handle = (ukui_blur_manager_v1 *)wl_registry_bind(registry, name, &ukui_blur_manager_v1_interface, qMin(ukui_blur_surpported_version, version));
++        if (blur_manager_handle) {
+             m_blur_manager = new UkuiBlurManager(this);
+             m_blur_manager->setup(blur_manager_handle);
+         }
+     }
+-    if (strcmp(interface, wl_compositor_interface.name) == 0)
+-    {
+-        wl_compositor *wl_compositor_handle =  (wl_compositor *) wl_registry_bind(registry, name, &wl_compositor_interface, version);
+-        if(wl_compositor_handle)
+-        {
++    if (strcmp(interface, wl_compositor_interface.name) == 0) {
++        wl_compositor *wl_compositor_handle = (wl_compositor *)wl_registry_bind(registry, name, &wl_compositor_interface, version);
++        if (wl_compositor_handle) {
+             m_compositor = new Compositor(this);
+             m_compositor->setup(wl_compositor_handle);
+         }
+     }
+-
+ }
+ 
+ bool BlurWaylandInterface::eventFilter(QObject *obj, QEvent *ev)
+ {
+-    auto window = qobject_cast<QWindow*>(obj);
+-    if(window && ev->type() == QEvent::Hide)
+-    {
+-        if(m_surfaces.contains(window))
+-        {
++    auto window = qobject_cast<QWindow *>(obj);
++    if (window && ev->type() == QEvent::Hide) {
++        if (m_surfaces.contains(window)) {
+             auto surface = m_surfaces.value(window);
+-            if(surface)
+-            {
++            if (surface) {
+                 surface->release();
+                 surface->destroy();
+             }
+             m_surfaces.remove(window);
+         }
+-        if(m_regions.contains(window))
+-        {
++        if (m_regions.contains(window)) {
+             auto region = m_regions.value(window);
+-            if(region)
+-            {
++            if (region) {
+                 region->release();
+                 region->destroy();
+             }
+             m_regions.remove(window);
+         }
+-        if(m_blurs.contains(window))
+-        {
++        if (m_blurs.contains(window)) {
+             auto blur_handle = m_blurs.value(window);
+-            if(blur_handle)
+-            {
++            if (blur_handle) {
+                 blur_handle->release();
+                 blur_handle->destroy();
+             }
+             m_blurs.remove(window);
+         }
+     }
+-    return QObject::eventFilter(obj,ev);
++    return QObject::eventFilter(obj, ev);
+ }
+ 
+ bool BlurWaylandInterface::setBlurBehindWithStrength(QWindow *window, bool enable, const QRegion &region, uint32_t strength)
+ {
+-    if(!window || !m_blur_manager || !m_compositor)
++    if (!window || !m_blur_manager || !m_compositor)
+         return false;
+ 
+     auto surface = KWayland::Client::Surface::fromWindow(window);
+     if (!surface)
+         return false;
+-    if(!m_surfaces.contains(window))
+-    {
+-        m_surfaces.insert(window,surface);
++    if (!m_surfaces.contains(window)) {
++        m_surfaces.insert(window, surface);
+     }
+-    if(enable)
+-    {
+-        UkuiBlur * blurHandle = m_blur_manager->createBlur(surface, this);
+-        if(!blurHandle)
++    if (enable) {
++        UkuiBlur *blurHandle = m_blur_manager->createBlur(surface, this);
++        if (!blurHandle)
+             return false;
+-        if(!m_blurs.contains(window))
+-        {
+-            m_blurs.insert(window,blurHandle);
++        if (!m_blurs.contains(window)) {
++            m_blurs.insert(window, blurHandle);
+         }
+-        Region* region_hanlde = m_compositor->createRegion(this);
+-        if(!region_hanlde)
++        Region *region_hanlde = m_compositor->createRegion(this);
++        if (!region_hanlde)
+             return false;
+-        if(!m_regions.contains(window))
+-        {
+-            m_regions.insert(window,region_hanlde);
++        if (!m_regions.contains(window)) {
++            m_regions.insert(window, region_hanlde);
+         }
+-        for(const QRect &rect : region)
+-        {
++        for (const QRect &rect : region) {
+             region_hanlde->add(rect);
+         }
+         blurHandle->setRegion(region_hanlde);
+         blurHandle->setStrength(strength);
+         window->installEventFilter(this);
+         return true;
+-    }
+-    else
+-    {
++    } else {
+         m_blur_manager->removeBlur(surface);
+         window->removeEventFilter(this);
+         return true;
+     }
+-
+ }
+diff --git a/kysdk-waylandhelper/src/blurmanager/blurwaylandinterface.h b/kysdk-waylandhelper/src/blurmanager/blurwaylandinterface.h
+index babbf06..2c6029c 100644
+--- a/kysdk-waylandhelper/src/blurmanager/blurwaylandinterface.h
++++ b/kysdk-waylandhelper/src/blurmanager/blurwaylandinterface.h
+@@ -1,17 +1,17 @@
+ #ifndef BLURWAYLANDINTERFACE_H
+ #define BLURWAYLANDINTERFACE_H
+ 
+-#include <QObject>
+-#include <QRegion>
+-#include <KWayland/Client/surface.h>
+-#include <KWayland/Client/registry.h>
++#include "blurabstractinterface.h"
++#include "ukuiblur.h"
++#include <KWayland/Client/compositor.h>
++#include <KWayland/Client/connection_thread.h>
+ #include <KWayland/Client/event_queue.h>
+ #include <KWayland/Client/output.h>
+-#include <KWayland/Client/connection_thread.h>
+-#include <KWayland/Client/compositor.h>
++#include <KWayland/Client/registry.h>
++#include <KWayland/Client/surface.h>
+ #include <QApplication>
+-#include "ukuiblur.h"
+-#include "blurabstractinterface.h"
++#include <QObject>
++#include <QRegion>
+ 
+ using namespace KWayland::Client;
+ 
+@@ -25,21 +25,21 @@ public:
+     bool setBlurBehindWithStrength(QWindow *window, bool enable = true, const QRegion &region = QRegion(), uint32_t strength = -1) override;
+ 
+     void handleGlobal(void *data, struct wl_registry *registry,
+-                              uint32_t name, const char *interface, uint32_t version);
++                      uint32_t name, const char *interface, uint32_t version);
+ 
+ protected:
+     bool eventFilter(QObject *obj, QEvent *ev) override;
+ 
+ private:
+-    BlurWaylandInterface* q_ptr;
++    BlurWaylandInterface *q_ptr;
+     ConnectionThread *m_connection = nullptr;
+-    Compositor* m_compositor = nullptr;
+-    Registry* m_registry = nullptr;
+-    UkuiBlur* m_blur = nullptr;
+-    UkuiBlurManager* m_blur_manager = nullptr;
+-    QMap<QWindow*,Surface*>m_surfaces;
+-    QMap<QWindow*,Region*>m_regions;
+-    QMap<QWindow*,UkuiBlur*>m_blurs;
++    Compositor *m_compositor = nullptr;
++    Registry *m_registry = nullptr;
++    UkuiBlur *m_blur = nullptr;
++    UkuiBlurManager *m_blur_manager = nullptr;
++    QMap<QWindow *, Surface *> m_surfaces;
++    QMap<QWindow *, Region *> m_regions;
++    QMap<QWindow *, UkuiBlur *> m_blurs;
+     static const struct wl_registry_listener s_registryListener;
+ };
+ 
+diff --git a/kysdk-waylandhelper/src/blurmanager/blurxcbinterface.cpp b/kysdk-waylandhelper/src/blurmanager/blurxcbinterface.cpp
+index 6bd2034..1de30d9 100644
+--- a/kysdk-waylandhelper/src/blurmanager/blurxcbinterface.cpp
++++ b/kysdk-waylandhelper/src/blurmanager/blurxcbinterface.cpp
+@@ -1,11 +1,10 @@
+ #include "blurxcbinterface.h"
+-#include <QX11Info>
+ #include <QApplication>
++#include <QX11Info>
+ 
+ BlurXcbInterface::BlurXcbInterface(QObject *parent)
+     : BlurAbstractInterface(parent)
+ {
+-
+ }
+ 
+ bool BlurXcbInterface::setBlurBehindWithStrength(QWindow *window, bool enable, const QRegion &region, uint32_t strength)
+@@ -17,17 +16,14 @@ bool BlurXcbInterface::setBlurBehindWithStrength(QWindow *window, bool enable, c
+     const QByteArray effectName = QByteArrayLiteral("_KDE_NET_WM_BLUR_BEHIND_REGION");
+     xcb_intern_atom_cookie_t atomCookie = xcb_intern_atom_unchecked(c, false, effectName.length(), effectName.constData());
+     QScopedPointer<xcb_intern_atom_reply_t, QScopedPointerPodDeleter> atom(xcb_intern_atom_reply(c, atomCookie, nullptr));
+-    if (!atom)
+-    {
++    if (!atom) {
+         return false;
+     }
+ 
+-    if (enable)
+-    {
++    if (enable) {
+         QVector<uint32_t> data;
+         data.reserve(region.rectCount() * 4 + 1);
+-        for (const QRect &r : region)
+-        {
++        for (const QRect &r : region) {
+             auto dpr = qApp->devicePixelRatio();
+             data << r.x() * dpr << r.y() * dpr << r.width() * dpr << r.height() * dpr;
+         }
+@@ -35,9 +31,7 @@ bool BlurXcbInterface::setBlurBehindWithStrength(QWindow *window, bool enable, c
+ 
+         xcb_change_property(c, XCB_PROP_MODE_REPLACE, window->winId(), atom->atom, XCB_ATOM_CARDINAL, 32, data.size(), data.constData());
+         return true;
+-    }
+-    else
+-    {
++    } else {
+         xcb_delete_property(c, window->winId(), atom->atom);
+         xcb_flush(c);
+         return true;
+diff --git a/kysdk-waylandhelper/src/blurmanager/blurxcbinterface.h b/kysdk-waylandhelper/src/blurmanager/blurxcbinterface.h
+index 2b5401e..133be33 100644
+--- a/kysdk-waylandhelper/src/blurmanager/blurxcbinterface.h
++++ b/kysdk-waylandhelper/src/blurmanager/blurxcbinterface.h
+@@ -1,8 +1,8 @@
+ #ifndef BLURXCBINTERFACE_H
+ #define BLURXCBINTERFACE_H
+ 
+-#include <QObject>
+ #include "blurabstractinterface.h"
++#include <QObject>
+ 
+ class BlurXcbInterface : public BlurAbstractInterface
+ {
+diff --git a/kysdk-waylandhelper/src/blurmanager/ukuiblur.cpp b/kysdk-waylandhelper/src/blurmanager/ukuiblur.cpp
+index b780316..610e36a 100644
+--- a/kysdk-waylandhelper/src/blurmanager/ukuiblur.cpp
++++ b/kysdk-waylandhelper/src/blurmanager/ukuiblur.cpp
+@@ -1,5 +1,5 @@
+ #include "ukuiblur.h"
+-#include "../windowmanager/ukuiwaylandpointer.h"
++#include "ukuiwaylandpointer.h"
+ 
+ class Q_DECL_HIDDEN UkuiBlur::Private
+ {
+@@ -16,14 +16,13 @@ public:
+     EventQueue *queue = nullptr;
+ 
+ private:
+-    UkuiBlurManager* q;
++    UkuiBlurManager *q;
+ };
+ 
+ UkuiBlur::UkuiBlur(QObject *parent)
+-    : QObject(parent),
+-      d(new Private)
++    : QObject(parent)
++    , d(new Private)
+ {
+-
+ }
+ 
+ UkuiBlur::~UkuiBlur()
+@@ -74,10 +73,9 @@ UkuiBlur::operator ukui_blur_surface_v1 *() const
+ }
+ 
+ UkuiBlurManager::UkuiBlurManager(QObject *parent)
+-    : QObject(parent),
+-      d(new Private(this))
++    : QObject(parent)
++    , d(new Private(this))
+ {
+-
+ }
+ 
+ UkuiBlurManager::~UkuiBlurManager()
+@@ -87,7 +85,7 @@ UkuiBlurManager::~UkuiBlurManager()
+ 
+ bool UkuiBlurManager::isValid() const
+ {
+-    if(!d->blurManager)
++    if (!d->blurManager)
+         return false;
+     return d->blurManager.isValid();
+ }
+@@ -119,7 +117,7 @@ EventQueue *UkuiBlurManager::eventQueue()
+ 
+ UkuiBlur *UkuiBlurManager::createBlur(Surface *surface, QObject *parent)
+ {
+-    if(!isValid())
++    if (!isValid())
+         return nullptr;
+     UkuiBlur *s = new UkuiBlur(parent);
+     auto w = ukui_blur_manager_v1_get_blur(d->blurManager, *surface);
+@@ -133,7 +131,7 @@ UkuiBlur *UkuiBlurManager::createBlur(Surface *surface, QObject *parent)
+ void UkuiBlurManager::removeBlur(Surface *surface)
+ {
+     Q_ASSERT(isValid());
+-//    ukui_blur_manager_unset(d->blurManager, *surface);
++    //    ukui_blur_manager_unset(d->blurManager, *surface);
+ }
+ 
+ UkuiBlurManager::operator ukui_blur_manager_v1 *()
+@@ -147,6 +145,6 @@ UkuiBlurManager::operator ukui_blur_manager_v1 *() const
+ }
+ 
+ UkuiBlurManager::Private::Private(UkuiBlurManager *q)
+-    :q(q)
++    : q(q)
+ {
+ }
+diff --git a/kysdk-waylandhelper/src/blurmanager/ukuiblur.h b/kysdk-waylandhelper/src/blurmanager/ukuiblur.h
+index 809e9c7..fdd3e8f 100644
+--- a/kysdk-waylandhelper/src/blurmanager/ukuiblur.h
++++ b/kysdk-waylandhelper/src/blurmanager/ukuiblur.h
+@@ -1,11 +1,11 @@
+ #ifndef UKUIBLUR_H
+ #define UKUIBLUR_H
+ 
+-#include <QObject>
+-#include <KWayland/Client/region.h>
++#include "ukui-blur-manager-client-protocol.h"
+ #include <KWayland/Client/event_queue.h>
++#include <KWayland/Client/region.h>
+ #include <KWayland/Client/surface.h>
+-#include "ukui-blur-manager-client-protocol.h"
++#include <QObject>
+ 
+ struct ukui_blur_manager_v1;
+ struct ukui_blur_surface_v1;
+@@ -30,14 +30,12 @@ public:
+ 
+     void setStrength(uint32_t strength);
+ 
+-
+     operator ukui_blur_surface_v1 *();
+     operator ukui_blur_surface_v1 *() const;
+ 
+ private:
+     class Private;
+     QScopedPointer<Private> d;
+-
+ };
+ 
+ class UkuiBlurManager : public QObject
+@@ -70,7 +68,6 @@ public:
+ private:
+     class Private;
+     QScopedPointer<Private> d;
+-
+ };
+ 
+ #endif // UKUIBLUR_H
+diff --git a/kysdk-waylandhelper/src/kysdk-waylandhelper_global.h b/kysdk-waylandhelper/src/kysdk-waylandhelper_global.h
+index 373b983..3f9d21f 100644
+--- a/kysdk-waylandhelper/src/kysdk-waylandhelper_global.h
++++ b/kysdk-waylandhelper/src/kysdk-waylandhelper_global.h
+@@ -26,9 +26,9 @@
+ #include <QtCore/qglobal.h>
+ 
+ #if defined(KYSDKWAYLANDHELPER_LIBRARY)
+-#  define KYSDKWAYLANDHELPER_EXPORT Q_DECL_EXPORT
++#define KYSDKWAYLANDHELPER_EXPORT Q_DECL_EXPORT
+ #else
+-#  define KYSDKWAYLANDHELPER_EXPORT Q_DECL_IMPORT
++#define KYSDKWAYLANDHELPER_EXPORT Q_DECL_IMPORT
+ #endif
+ 
+ #endif // KYSDKWAYLANDHELPER_GLOBAL_H
+diff --git a/kysdk-waylandhelper/src/ukuistylehelper/ukui-decoration-client.h b/kysdk-waylandhelper/src/ukuistylehelper/ukui-decoration-client.h
+index 9f0d1cb..98b9661 100644
+--- a/kysdk-waylandhelper/src/ukuistylehelper/ukui-decoration-client.h
++++ b/kysdk-waylandhelper/src/ukuistylehelper/ukui-decoration-client.h
+@@ -25,11 +25,11 @@
+ #ifndef CUSTOM_CLIENT_PROTOCOL_H
+ #define CUSTOM_CLIENT_PROTOCOL_H
+ 
+-#include <stdint.h>
+-#include <stddef.h>
+ #include "wayland-client.h"
++#include <stddef.h>
++#include <stdint.h>
+ 
+-#ifdef  __cplusplus
++#ifdef __cplusplus
+ extern "C" {
+ #endif
+ 
+@@ -57,7 +57,6 @@ extern const struct wl_interface ukui_decoration_interface;
+ #define UKUI_DECORATION_SET_UKUI_DECORATION_MODE 1
+ #define UKUI_DECORATION_SET_UNITY_BORDER_RADIUS 2
+ 
+-
+ /**
+  * @ingroup iface_ukui_decoration
+  */
+@@ -75,27 +74,27 @@ extern const struct wl_interface ukui_decoration_interface;
+ static inline void
+ ukui_decoration_set_user_data(struct ukui_decoration *ukui_decoration, void *user_data)
+ {
+-	wl_proxy_set_user_data((struct wl_proxy *) ukui_decoration, user_data);
++    wl_proxy_set_user_data((struct wl_proxy *)ukui_decoration, user_data);
+ }
+ 
+ /** @ingroup iface_ukui_decoration */
+ static inline void *
+ ukui_decoration_get_user_data(struct ukui_decoration *ukui_decoration)
+ {
+-	return wl_proxy_get_user_data((struct wl_proxy *) ukui_decoration);
++    return wl_proxy_get_user_data((struct wl_proxy *)ukui_decoration);
+ }
+ 
+ static inline uint32_t
+ ukui_decoration_get_version(struct ukui_decoration *ukui_decoration)
+ {
+-	return wl_proxy_get_version((struct wl_proxy *) ukui_decoration);
++    return wl_proxy_get_version((struct wl_proxy *)ukui_decoration);
+ }
+ 
+ /** @ingroup iface_ukui_decoration */
+ static inline void
+ ukui_decoration_destroy(struct ukui_decoration *ukui_decoration)
+ {
+-	wl_proxy_destroy((struct wl_proxy *) ukui_decoration);
++    wl_proxy_destroy((struct wl_proxy *)ukui_decoration);
+ }
+ 
+ /**
+@@ -107,8 +106,8 @@ ukui_decoration_destroy(struct ukui_decoration *ukui_decoration)
+ static inline void
+ ukui_decoration_move_surface(struct ukui_decoration *ukui_decoration, struct wl_surface *surface)
+ {
+-	wl_proxy_marshal((struct wl_proxy *) ukui_decoration,
+-			 UKUI_DECORATION_MOVE_SURFACE, surface);
++    wl_proxy_marshal((struct wl_proxy *)ukui_decoration,
++                     UKUI_DECORATION_MOVE_SURFACE, surface);
+ }
+ 
+ /**
+@@ -119,8 +118,8 @@ ukui_decoration_move_surface(struct ukui_decoration *ukui_decoration, struct wl_
+ static inline void
+ ukui_decoration_set_ukui_decoration_mode(struct ukui_decoration *ukui_decoration, struct wl_surface *surface, uint32_t mode)
+ {
+-	wl_proxy_marshal((struct wl_proxy *) ukui_decoration,
+-			 UKUI_DECORATION_SET_UKUI_DECORATION_MODE, surface, mode);
++    wl_proxy_marshal((struct wl_proxy *)ukui_decoration,
++                     UKUI_DECORATION_SET_UKUI_DECORATION_MODE, surface, mode);
+ }
+ 
+ /**
+@@ -131,11 +130,11 @@ ukui_decoration_set_ukui_decoration_mode(struct ukui_decoration *ukui_decoration
+ static inline void
+ ukui_decoration_set_unity_border_radius(struct ukui_decoration *ukui_decoration, struct wl_surface *surface, uint32_t topleft, uint32_t topright, uint32_t bottomleft, uint32_t bottomright)
+ {
+-	wl_proxy_marshal((struct wl_proxy *) ukui_decoration,
+-			 UKUI_DECORATION_SET_UNITY_BORDER_RADIUS, surface, topleft, topright, bottomleft, bottomright);
++    wl_proxy_marshal((struct wl_proxy *)ukui_decoration,
++                     UKUI_DECORATION_SET_UNITY_BORDER_RADIUS, surface, topleft, topright, bottomleft, bottomright);
+ }
+ 
+-#ifdef  __cplusplus
++#ifdef __cplusplus
+ }
+ #endif
+ 
+diff --git a/kysdk-waylandhelper/src/ukuistylehelper/ukui-decoration-manager.cpp b/kysdk-waylandhelper/src/ukuistylehelper/ukui-decoration-manager.cpp
+index 6605273..50d9fd0 100644
+--- a/kysdk-waylandhelper/src/ukuistylehelper/ukui-decoration-manager.cpp
++++ b/kysdk-waylandhelper/src/ukuistylehelper/ukui-decoration-manager.cpp
+@@ -23,10 +23,10 @@
+ #include "ukui-decoration-manager.h"
+ 
+ #include "ukui-decoration-client.h"
+-#include <QDebug>
+-#include <QApplication>
+-#include <KWayland/Client/surface.h>
+ #include <KWayland/Client/connection_thread.h>
++#include <KWayland/Client/surface.h>
++#include <QApplication>
++#include <QDebug>
+ 
+ static const u_int32_t ukui_decoration_surpported_version = 1;
+ static UKUIDecorationManager *global_instance = nullptr;
+@@ -35,15 +35,17 @@ static wl_display *display = nullptr;
+ static ukui_decoration *ukui_decoration_manager = nullptr;
+ 
+ static void handle_global(void *data, struct wl_registry *registry,
+-                          uint32_t name, const char *interface, uint32_t version) {
++                          uint32_t name, const char *interface, uint32_t version)
++{
+     if (strcmp(interface, ukui_decoration_interface.name) == 0) {
+-        u_int32_t surpportedVersion = qMin(ukui_decoration_surpported_version , version);
+-        ukui_decoration_manager = (ukui_decoration *) wl_registry_bind(registry, name, &ukui_decoration_interface, surpportedVersion);
++        u_int32_t surpportedVersion = qMin(ukui_decoration_surpported_version, version);
++        ukui_decoration_manager = (ukui_decoration *)wl_registry_bind(registry, name, &ukui_decoration_interface, surpportedVersion);
+     }
+ }
+ 
+ static void handle_global_remove(void *data, struct wl_registry *registry,
+-                                 uint32_t name) {
++                                 uint32_t name)
++{
+     // Who cares
+ }
+ 
+@@ -88,14 +90,12 @@ bool UKUIDecorationManager::removeHeaderBar(QWindow *windowHandle)
+         return false;
+ 
+     auto kde_surface = KWayland::Client::Surface::fromWindow(windowHandle);
+-    if (!kde_surface)
+-    {
++    if (!kde_surface) {
+         qDebug() << "UKUIDecorationManager::get kde_surface failed!";
+         return false;
+     }
+     wl_surface *surface = *kde_surface;
+-    if (!surface)
+-    {
++    if (!surface) {
+         qDebug() << "UKUIDecorationManager::get wl_surface failed!";
+         return false;
+     }
+diff --git a/kysdk-waylandhelper/src/ukuistylehelper/ukui-shell-manager.cpp b/kysdk-waylandhelper/src/ukuistylehelper/ukui-shell-manager.cpp
+index de5b9cb..6189fc3 100644
+--- a/kysdk-waylandhelper/src/ukuistylehelper/ukui-shell-manager.cpp
++++ b/kysdk-waylandhelper/src/ukuistylehelper/ukui-shell-manager.cpp
+@@ -20,20 +20,20 @@
+  *
+  */
+ 
+-#include <KWayland/Client/surface.h>
++#include "ukui-shell-manager.h"
++#include "ukui-shell-client-protocol.h"
++#include "ukuiwaylandinterface.h"
+ #include <KWayland/Client/connection_thread.h>
++#include <KWayland/Client/surface.h>
+ #include <QApplication>
+ #include <QDebug>
+-#include "ukui-shell-manager.h"
+-#include "../windowmanager/ukui-shell-client-protocol.h"
+-#include "../windowmanager/ukuiwaylandinterface.h"
+ 
+ static UkuiShellManager *global_instance = nullptr;
+ static UkuiWaylandInterface *g_ukuiwaylandInterface = nullptr;
+ 
+ UkuiShellManager::UkuiShellManager()
+ {
+-    if(!g_ukuiwaylandInterface)
++    if (!g_ukuiwaylandInterface)
+         g_ukuiwaylandInterface = new UkuiWaylandInterface;
+ }
+ 
+@@ -46,7 +46,7 @@ UkuiShellManager *UkuiShellManager::getInstance()
+ 
+ bool UkuiShellManager::removeHeaderBar(QWindow *windowHandle)
+ {
+-    if(!g_ukuiwaylandInterface->ukuiProtocolReady())
++    if (!g_ukuiwaylandInterface->ukuiProtocolReady())
+         return false;
+     return g_ukuiwaylandInterface->removeHeaderBar(windowHandle);
+ }
+diff --git a/kysdk-waylandhelper/src/ukuistylehelper/ukui-shell-manager.h b/kysdk-waylandhelper/src/ukuistylehelper/ukui-shell-manager.h
+index 2811bb9..226d878 100644
+--- a/kysdk-waylandhelper/src/ukuistylehelper/ukui-shell-manager.h
++++ b/kysdk-waylandhelper/src/ukuistylehelper/ukui-shell-manager.h
+@@ -32,7 +32,6 @@ public:
+     bool removeHeaderBar(QWindow *windowHandle);
+     bool ukuishellReady();
+ 
+-
+ private:
+     UkuiShellManager();
+ };
+diff --git a/kysdk-waylandhelper/src/ukuistylehelper/ukuistylehelper.cpp b/kysdk-waylandhelper/src/ukuistylehelper/ukuistylehelper.cpp
+index d40f372..7205b53 100644
+--- a/kysdk-waylandhelper/src/ukuistylehelper/ukuistylehelper.cpp
++++ b/kysdk-waylandhelper/src/ukuistylehelper/ukuistylehelper.cpp
+@@ -21,41 +21,38 @@
+  */
+ 
+ #include "ukuistylehelper.h"
+-#include "../waylandhelper.h"
+ #include "ukui-decoration-manager.h"
+ #include "ukui-shell-manager.h"
++#include "waylandhelper.h"
++#include "windowmanager/ukuiwaylandinterface.h"
+ #include "xatom-helper.h"
+-#include "../windowmanager/ukuiwaylandinterface.h"
+-#include <QWidget>
+ #include <QGuiApplication>
++#include <QWidget>
+ 
+-namespace kdk {
++namespace kdk
++{
+ 
+ static UkuiStyleHelper *global_instance = nullptr;
+ 
+ UkuiStyleHelper *UkuiStyleHelper::self()
+ {
+-    if(global_instance)
++    if (global_instance)
+         return global_instance;
+-    else
+-    {
++    else {
+         global_instance = new UkuiStyleHelper();
+         return global_instance;
+     }
+ }
+ 
+-void UkuiStyleHelper::removeHeader(QWidget* widget)
++void UkuiStyleHelper::removeHeader(QWidget *widget)
+ {
+-    if(!widget)
++    if (!widget)
+         return;
+     QString platform = QGuiApplication::platformName();
+-    if(platform.startsWith(QLatin1String("wayland"),Qt::CaseInsensitive))
+-    {
++    if (platform.startsWith(QLatin1String("wayland"), Qt::CaseInsensitive)) {
+         m_widget = widget;
+         m_widget->installEventFilter(this);
+-    }
+-    else
+-    {
++    } else {
+         MotifWmHints hints1;
+         hints1.flags = MWM_HINTS_FUNCTIONS | MWM_HINTS_DECORATIONS;
+         hints1.functions = MWM_FUNC_ALL;
+@@ -66,23 +63,21 @@ void UkuiStyleHelper::removeHeader(QWidget* widget)
+ 
+ bool UkuiStyleHelper::eventFilter(QObject *obj, QEvent *ev)
+ {
+-    if(obj == m_widget && (ev->type() == QEvent::PlatformSurface || ev->type() == QEvent::Show || ev->type() == QEvent::UpdateRequest))
+-    {
+-        #ifdef USE_UKUI_PROTOCOL
+-            if(UkuiShellManager::getInstance()->ukuishellReady())
+-                UkuiShellManager::getInstance()->removeHeaderBar(m_widget->windowHandle());
+-            else
+-                UKUIDecorationManager::getInstance()->removeHeaderBar(m_widget->windowHandle());
+-        #else
++    if (obj == m_widget && (ev->type() == QEvent::PlatformSurface || ev->type() == QEvent::Show || ev->type() == QEvent::UpdateRequest)) {
++#ifdef USE_UKUI_PROTOCOL
++        if (UkuiShellManager::getInstance()->ukuishellReady())
++            UkuiShellManager::getInstance()->removeHeaderBar(m_widget->windowHandle());
++        else
+             UKUIDecorationManager::getInstance()->removeHeaderBar(m_widget->windowHandle());
+-        #endif
++#else
++        UKUIDecorationManager::getInstance()->removeHeaderBar(m_widget->windowHandle());
++#endif
+     }
+-    return QObject::eventFilter(obj,ev);
++    return QObject::eventFilter(obj, ev);
+ }
+ 
+ UkuiStyleHelper::UkuiStyleHelper()
+ {
+-
+ }
+ 
+ }
+diff --git a/kysdk-waylandhelper/src/ukuistylehelper/ukuistylehelper.h b/kysdk-waylandhelper/src/ukuistylehelper/ukuistylehelper.h
+index 2f47ff6..c7749cc 100644
+--- a/kysdk-waylandhelper/src/ukuistylehelper/ukuistylehelper.h
++++ b/kysdk-waylandhelper/src/ukuistylehelper/ukuistylehelper.h
+@@ -24,7 +24,8 @@
+ #define UKUISTYLEHELPER_H
+ #include <QWindow>
+ 
+-namespace kdk {
++namespace kdk
++{
+ 
+ /**
+  * @defgroup UkuiStyleModule
+@@ -33,7 +34,7 @@ namespace kdk {
+ /**
+  * @brief 解决wayland环境下的双标题栏问题
+  */
+-class UkuiStyleHelper:public QObject
++class UkuiStyleHelper : public QObject
+ {
+ public:
+     static UkuiStyleHelper *self();
+@@ -43,14 +44,14 @@ public:
+      * @param widget
+      * @since 1.2
+      */
+-    void removeHeader(QWidget* widget);
++    void removeHeader(QWidget *widget);
+ 
+ protected:
+     bool eventFilter(QObject *obj, QEvent *ev) override;
+ 
+ private:
+     UkuiStyleHelper();
+-    QWidget* m_widget;
++    QWidget *m_widget;
+ };
+ 
+ }
+diff --git a/kysdk-waylandhelper/src/ukuistylehelper/xatom-helper.cpp b/kysdk-waylandhelper/src/ukuistylehelper/xatom-helper.cpp
+index bdee9d3..7b5404c 100644
+--- a/kysdk-waylandhelper/src/ukuistylehelper/xatom-helper.cpp
++++ b/kysdk-waylandhelper/src/ukuistylehelper/xatom-helper.cpp
+@@ -22,11 +22,11 @@
+ 
+ #include "xatom-helper.h"
+ 
+-#include <limits.h>
+ #include <QX11Info>
+ #include <X11/X.h>
+ #include <X11/Xatom.h>
+ #include <X11/Xlib.h>
++#include <limits.h>
+ 
+ static XAtomHelper *global_instance = nullptr;
+ 
+@@ -115,9 +115,9 @@ UnityCorners XAtomHelper::getWindowBorderRadius(int winId)
+         if (type == XA_CARDINAL) {
+             if (nitems == 4) {
+                 corners.topLeft = static_cast<ulong>(data[0]);
+-                corners.topRight = static_cast<ulong>(data[1*sizeof (ulong)]);
+-                corners.bottomLeft = static_cast<ulong>(data[2*sizeof (ulong)]);
+-                corners.bottomRight = static_cast<ulong>(data[3*sizeof (ulong)]);
++                corners.topRight = static_cast<ulong>(data[1 * sizeof(ulong)]);
++                corners.bottomLeft = static_cast<ulong>(data[2 * sizeof(ulong)]);
++                corners.bottomRight = static_cast<ulong>(data[3 * sizeof(ulong)]);
+             }
+             XFree(data);
+         }
+@@ -134,7 +134,7 @@ void XAtomHelper::setWindowBorderRadius(int winId, const UnityCorners &data)
+     ulong corners[4] = {data.topLeft, data.topRight, data.bottomLeft, data.bottomRight};
+ 
+     XChangeProperty(QX11Info::display(), winId, m_unityBorderRadiusAtom, XA_CARDINAL,
+-                    32, XCB_PROP_MODE_REPLACE, (const unsigned char *) &corners, sizeof (corners)/sizeof (corners[0]));
++                    32, XCB_PROP_MODE_REPLACE, (const unsigned char *)&corners, sizeof(corners) / sizeof(corners[0]));
+ }
+ 
+ void XAtomHelper::setWindowBorderRadius(int winId, int topLeft, int topRight, int bottomLeft, int bottomRight)
+@@ -145,7 +145,7 @@ void XAtomHelper::setWindowBorderRadius(int winId, int topLeft, int topRight, in
+     ulong corners[4] = {(ulong)topLeft, (ulong)topRight, (ulong)bottomLeft, (ulong)bottomRight};
+ 
+     XChangeProperty(QX11Info::display(), winId, m_unityBorderRadiusAtom, XA_CARDINAL,
+-                    32, XCB_PROP_MODE_REPLACE, (const unsigned char *) &corners, sizeof (corners)/sizeof (corners[0]));
++                    32, XCB_PROP_MODE_REPLACE, (const unsigned char *)&corners, sizeof(corners) / sizeof(corners[0]));
+ }
+ 
+ void XAtomHelper::setUKUIDecoraiontHint(int winId, bool set)
+@@ -153,7 +153,7 @@ void XAtomHelper::setUKUIDecoraiontHint(int winId, bool set)
+     if (m_ukuiDecorationAtion == None)
+         return;
+ 
+-    XChangeProperty(QX11Info::display(), winId, m_ukuiDecorationAtion, m_ukuiDecorationAtion, 32, XCB_PROP_MODE_REPLACE, (const unsigned char *) &set, 1);
++    XChangeProperty(QX11Info::display(), winId, m_ukuiDecorationAtion, m_ukuiDecorationAtion, 32, XCB_PROP_MODE_REPLACE, (const unsigned char *)&set, 1);
+ }
+ 
+ void XAtomHelper::setWindowMotifHint(int winId, const MotifWmHints &hints)
+@@ -162,7 +162,7 @@ void XAtomHelper::setWindowMotifHint(int winId, const MotifWmHints &hints)
+         return;
+ 
+     XChangeProperty(QX11Info::display(), winId, m_motifWMHintsAtom, m_motifWMHintsAtom,
+-                    32, XCB_PROP_MODE_REPLACE, (const unsigned char *)&hints, sizeof (MotifWmHints)/ sizeof (ulong));
++                    32, XCB_PROP_MODE_REPLACE, (const unsigned char *)&hints, sizeof(MotifWmHints) / sizeof(ulong));
+ }
+ 
+ MotifWmHints XAtomHelper::getWindowMotifHint(int winId)
+@@ -179,7 +179,7 @@ MotifWmHints XAtomHelper::getWindowMotifHint(int winId)
+     ulong bytes_after;
+ 
+     XGetWindowProperty(QX11Info::display(), winId, m_motifWMHintsAtom,
+-                       0, sizeof (MotifWmHints)/sizeof (long), false, AnyPropertyType, &type,
++                       0, sizeof(MotifWmHints) / sizeof(long), false, AnyPropertyType, &type,
+                        &format, &nitems, &bytes_after, &data);
+ 
+     if (type == None) {
+@@ -191,7 +191,8 @@ MotifWmHints XAtomHelper::getWindowMotifHint(int winId)
+     return hints;
+ }
+ 
+-XAtomHelper::XAtomHelper(QObject *parent) : QObject(parent)
++XAtomHelper::XAtomHelper(QObject *parent)
++    : QObject(parent)
+ {
+     if (!QX11Info::isPlatformX11())
+         return;
+diff --git a/kysdk-waylandhelper/src/ukuistylehelper/xatom-helper.h b/kysdk-waylandhelper/src/ukuistylehelper/xatom-helper.h
+index f7faeb0..e5ecc17 100644
+--- a/kysdk-waylandhelper/src/ukuistylehelper/xatom-helper.h
++++ b/kysdk-waylandhelper/src/ukuistylehelper/xatom-helper.h
+@@ -25,14 +25,16 @@
+ 
+ #include <QObject>
+ 
+-struct UnityCorners {
++struct UnityCorners
++{
+     ulong topLeft = 0;
+     ulong topRight = 0;
+     ulong bottomLeft = 0;
+     ulong bottomRight = 0;
+ };
+ 
+-typedef struct {
++typedef struct
++{
+     ulong flags = 0;
+     ulong functions = 0;
+     ulong decorations = 0;
+@@ -40,25 +42,25 @@ typedef struct {
+     ulong status = 0;
+ } MotifWmHints, MwmHints;
+ 
+-#define MWM_HINTS_FUNCTIONS     (1L << 0)
+-#define MWM_HINTS_DECORATIONS   (1L << 1)
+-#define MWM_HINTS_INPUT_MODE    (1L << 2)
+-#define MWM_HINTS_STATUS        (1L << 3)
+-
+-#define MWM_FUNC_ALL            (1L << 0)
+-#define MWM_FUNC_RESIZE         (1L << 1)
+-#define MWM_FUNC_MOVE           (1L << 2)
+-#define MWM_FUNC_MINIMIZE       (1L << 3)
+-#define MWM_FUNC_MAXIMIZE       (1L << 4)
+-#define MWM_FUNC_CLOSE          (1L << 5)
+-
+-#define MWM_DECOR_ALL           (1L << 0)
+-#define MWM_DECOR_BORDER        (1L << 1)
+-#define MWM_DECOR_RESIZEH       (1L << 2)
+-#define MWM_DECOR_TITLE         (1L << 3)
+-#define MWM_DECOR_MENU          (1L << 4)
+-#define MWM_DECOR_MINIMIZE      (1L << 5)
+-#define MWM_DECOR_MAXIMIZE      (1L << 6)
++#define MWM_HINTS_FUNCTIONS (1L << 0)
++#define MWM_HINTS_DECORATIONS (1L << 1)
++#define MWM_HINTS_INPUT_MODE (1L << 2)
++#define MWM_HINTS_STATUS (1L << 3)
++
++#define MWM_FUNC_ALL (1L << 0)
++#define MWM_FUNC_RESIZE (1L << 1)
++#define MWM_FUNC_MOVE (1L << 2)
++#define MWM_FUNC_MINIMIZE (1L << 3)
++#define MWM_FUNC_MAXIMIZE (1L << 4)
++#define MWM_FUNC_CLOSE (1L << 5)
++
++#define MWM_DECOR_ALL (1L << 0)
++#define MWM_DECOR_BORDER (1L << 1)
++#define MWM_DECOR_RESIZEH (1L << 2)
++#define MWM_DECOR_TITLE (1L << 3)
++#define MWM_DECOR_MENU (1L << 4)
++#define MWM_DECOR_MINIMIZE (1L << 5)
++#define MWM_DECOR_MAXIMIZE (1L << 6)
+ 
+ #define MWM_INPUT_MODELESS 0
+ #define MWM_INPUT_PRIMARY_APPLICATION_MODAL 1
+@@ -66,9 +68,10 @@ typedef struct {
+ #define MWM_INPUT_FULL_APPLICATION_MODAL 3
+ #define MWM_INPUT_APPLICATION_MODAL MWM_INPUT_PRIMARY_APPLICATION_MODAL
+ 
+-#define MWM_TEAROFF_WINDOW	(1L<<0)
++#define MWM_TEAROFF_WINDOW (1L << 0)
+ 
+-namespace UKUI {
++namespace UKUI
++{
+ class Decoration;
+ }
+ 
+diff --git a/kysdk-waylandhelper/src/waylandhelper.cpp b/kysdk-waylandhelper/src/waylandhelper.cpp
+index ad3221b..cd9ac14 100644
+--- a/kysdk-waylandhelper/src/waylandhelper.cpp
++++ b/kysdk-waylandhelper/src/waylandhelper.cpp
+@@ -26,30 +26,24 @@
+ 
+ using namespace kdk;
+ 
+-static const char* server_flag = "XDG_SESSION_TYPE";
+-static const char* client_flag = "QT_QPA_PLATFORM";
++static const char *server_flag = "XDG_SESSION_TYPE";
++static const char *client_flag = "QT_QPA_PLATFORM";
+ 
+-static WaylandHelper* g_instance = nullptr;
++static WaylandHelper *g_instance = nullptr;
+ bool WaylandHelper::isWaylandServer()
+ {
+-    if (qgetenv(server_flag) == QString("wayland"))
+-    {
++    if (qgetenv(server_flag) == QString("wayland")) {
+         return true;
+-    }
+-    else
+-    {
++    } else {
+         return false;
+     }
+ }
+ 
+ bool WaylandHelper::isWaylandClient()
+ {
+-    if (qgetenv(client_flag) == QString("wayland"))
+-    {
++    if (qgetenv(client_flag) == QString("wayland")) {
+         return true;
+-    }
+-    else
+-    {
++    } else {
+         return false;
+     }
+ }
+@@ -62,7 +56,6 @@ WaylandHelper *WaylandHelper::self()
+ }
+ 
+ WaylandHelper::WaylandHelper(QObject *parent)
+-    :QObject(parent)
++    : QObject(parent)
+ {
+ }
+-
+diff --git a/kysdk-waylandhelper/src/waylandhelper.h b/kysdk-waylandhelper/src/waylandhelper.h
+index 39b7abb..2410e57 100644
+--- a/kysdk-waylandhelper/src/waylandhelper.h
++++ b/kysdk-waylandhelper/src/waylandhelper.h
+@@ -28,7 +28,7 @@
+ 
+ namespace kdk
+ {
+-class KYSDKWAYLANDHELPER_EXPORT WaylandHelper:public QObject
++class KYSDKWAYLANDHELPER_EXPORT WaylandHelper : public QObject
+ {
+ public:
+     static bool isWaylandServer();
+@@ -36,9 +36,8 @@ public:
+     static WaylandHelper *self();
+ 
+ private:
+-    WaylandHelper(QObject* parent=nullptr);
++    WaylandHelper(QObject *parent = nullptr);
+ };
+ }
+ 
+-
+ #endif // WAYLANDHELPER_H
+diff --git a/kysdk-waylandhelper/src/windowmanager/abstractinterface.cpp b/kysdk-waylandhelper/src/windowmanager/abstractinterface.cpp
+index 7db8a2a..2fc19d6 100644
+--- a/kysdk-waylandhelper/src/windowmanager/abstractinterface.cpp
++++ b/kysdk-waylandhelper/src/windowmanager/abstractinterface.cpp
+@@ -29,7 +29,7 @@
+ using namespace kdk;
+ 
+ AbstractInterface::AbstractInterface(QObject *parent)
+-    :QObject(parent)
++    : QObject(parent)
+ {
+ }
+ 
+@@ -39,8 +39,8 @@ AbstractInterface::~AbstractInterface()
+ 
+ bool AbstractInterface::inCurrentDesktopActivity(const WindowInfo &winfo)
+ {
+-    if(winfo.isValid() && winfo.isOnDesktop(currentDesktop()))
+-    return (winfo.isValid() && winfo.isOnDesktop(currentDesktop()) /*&& winfo.isOnActivity(currentActivity())*/);
++    if (winfo.isValid() && winfo.isOnDesktop(currentDesktop()))
++        return (winfo.isValid() && winfo.isOnDesktop(currentDesktop()) /*&& winfo.isOnActivity(currentActivity())*/);
+ }
+ 
+ bool AbstractInterface::isPlasmaDesktop(const QRect &wGeometry)
+@@ -76,7 +76,7 @@ void AbstractInterface::setPlasmaDesktop(WindowId wid)
+ 
+     if (!m_windows[wid].isPlasmaDesktop()) {
+         m_windows[wid].setIsPlasmaDesktop(true);
+-        //updateAllHints();
++        // updateAllHints();
+     }
+ }
+ 
+@@ -98,20 +98,18 @@ QString AbstractInterface::getProcessName(const WindowId &wid)
+ {
+     auto id = pid(wid);
+     char path[128];
+-    memset(path,0,128);
++    memset(path, 0, 128);
+     char name[128];
+-    memset(name,0,128);
+-    if(!name)
+-    {
++    memset(name, 0, 128);
++    if (!name) {
+         return NULL;
+     }
+     char link[512];
+-    memset(link,0,512);
++    memset(link, 0, 512);
+     sprintf(path, "/proc/%d/exe", id);
+ 
+     int count = readlink(path, link, sizeof(link));
+-    if(count != -1)
+-    {
++    if (count != -1) {
+         strcpy(name, basename(link));
+     }
+     return QString(name);
+@@ -136,7 +134,7 @@ void AbstractInterface::setIdleInterval(int msec)
+     Q_UNUSED(msec)
+     return;
+ }
+-QRect AbstractInterface::windowGeometry(const WindowId& windowId)
++QRect AbstractInterface::windowGeometry(const WindowId &windowId)
+ {
+     Q_UNUSED(windowId)
+     return QRect();
+@@ -192,7 +190,7 @@ void AbstractInterface::setOpenUnderCursor(QWindow *window, int x, int y)
+     Q_UNUSED(y)
+ }
+ 
+-void AbstractInterface::setIconName(QWindow *window, const QString& iconName)
++void AbstractInterface::setIconName(QWindow *window, const QString &iconName)
+ {
+     Q_UNUSED(window)
+     Q_UNUSED(iconName)
+diff --git a/kysdk-waylandhelper/src/windowmanager/abstractinterface.h b/kysdk-waylandhelper/src/windowmanager/abstractinterface.h
+index d812e8b..4181dc8 100644
+--- a/kysdk-waylandhelper/src/windowmanager/abstractinterface.h
++++ b/kysdk-waylandhelper/src/windowmanager/abstractinterface.h
+@@ -23,12 +23,12 @@
+ #ifndef ABSTRACTINTERFACE_H
+ #define ABSTRACTINTERFACE_H
+ 
++#include "netwm.h"
++#include "outputinfo.h"
++#include "windowinfo.h"
++#include <QMap>
+ #include <QObject>
+ #include <QVariant>
+-#include <QMap>
+-#include "windowinfo.h"
+-#include "outputinfo.h"
+-#include "netwm.h"
+ 
+ namespace kdk
+ {
+@@ -54,39 +54,38 @@ enum class WindowLayer {
+     Authentication
+ };
+ 
+-class AbstractInterface:public QObject
++class AbstractInterface : public QObject
+ {
+     Q_OBJECT
+ 
+ public:
+-    AbstractInterface(QObject* parent=nullptr);
++    AbstractInterface(QObject *parent = nullptr);
+     virtual ~AbstractInterface();
+     virtual WindowInfo requestInfo(WindowId wid) = 0;
+ 
+-    virtual void requestActivate(WindowId wid)  = 0;
+-    virtual void requestClose(WindowId wid)  = 0;
+-    virtual void requestToggleKeepAbove(WindowId wid)  = 0;
+-    virtual void requestToggleMinimized(WindowId wid)  = 0;
+-    virtual void requestToggleMaximized(WindowId wid)  = 0;
+-    virtual WindowId activeWindow()  = 0;
++    virtual void requestActivate(WindowId wid) = 0;
++    virtual void requestClose(WindowId wid) = 0;
++    virtual void requestToggleKeepAbove(WindowId wid) = 0;
++    virtual void requestToggleMinimized(WindowId wid) = 0;
++    virtual void requestToggleMaximized(WindowId wid) = 0;
++    virtual WindowId activeWindow() = 0;
+ 
+-    virtual QIcon iconFor(WindowId wid)  = 0;
+-    virtual QString titleFor(WindowId wid)  = 0;
++    virtual QIcon iconFor(WindowId wid) = 0;
++    virtual QString titleFor(WindowId wid) = 0;
+     virtual QString windowGroupFor(WindowId wid) = 0;
+ 
+-    virtual bool windowCanBeDragged(WindowId wid)  = 0;
+-    virtual bool windowCanBeMaximized(WindowId wid)  = 0;
+-
++    virtual bool windowCanBeDragged(WindowId wid) = 0;
++    virtual bool windowCanBeMaximized(WindowId wid) = 0;
+ 
+-    virtual void showCurrentDesktop()  = 0;
+-    virtual void hideCurrentDesktop()  = 0;
++    virtual void showCurrentDesktop() = 0;
++    virtual void hideCurrentDesktop() = 0;
+     virtual quint32 pid(WindowId wid) = 0;
+ 
+     virtual void setGeometry(QWindow *window, const QRect &rect) = 0;
+     virtual NET::WindowType windowType(WindowId wid) = 0;
+ 
+-    virtual void setSkipTaskBar(QWindow* window,bool skip) = 0;
+-    virtual void setSkipSwitcher(QWindow* window,bool skip) = 0;
++    virtual void setSkipTaskBar(QWindow *window, bool skip) = 0;
++    virtual void setSkipSwitcher(QWindow *window, bool skip) = 0;
+ 
+     virtual bool skipTaskBar(const WindowId &wid) = 0;
+     virtual bool skipSwitcher(const WindowId &wid) = 0;
+@@ -94,22 +93,22 @@ public:
+     virtual bool isShowingDesktop() = 0;
+     virtual void setOnAllDesktops(const WindowId &wid) = 0;
+ 
+-    bool inCurrentDesktopActivity(const WindowInfo &winfo) ;
++    bool inCurrentDesktopActivity(const WindowInfo &winfo);
+     bool isPlasmaDesktop(const QRect &wGeometry);
+-    QString currentDesktop() ;
+-    QString currentActivity() ;
++    QString currentDesktop();
++    QString currentActivity();
+ 
+     void setPlasmaDesktop(WindowId wid);
+-    bool isValidFor(const WindowId &wid) ;
++    bool isValidFor(const WindowId &wid);
+ 
+     QList<WindowId> windows();
+     virtual void setPanelTakefocus(QWindow *window, bool flag) = 0;
+     virtual void demandAttention(const WindowId &wid) = 0;
+     virtual QString getProcessName(const WindowId &wid);
+-    virtual bool setWindowRadius(QWindow *windowHandle,int radius);
+-    virtual void activateWindow(QWindow*window1,QWindow*window2);
++    virtual bool setWindowRadius(QWindow *windowHandle, int radius);
++    virtual void activateWindow(QWindow *window1, QWindow *window2);
+     virtual void setIdleInterval(int msec);
+-    virtual QRect windowGeometry(const WindowId& windowId);
++    virtual QRect windowGeometry(const WindowId &windowId);
+     virtual void setPanelAutoHide(QWindow *window, bool autoHide);
+     virtual void setGrabKeyboard(QWindow *window, bool grabKeyboard);
+     virtual void setWindowLayer(QWindow *window, WindowLayer layer);
+@@ -118,12 +117,12 @@ public:
+     virtual bool istHighlight(const WindowId &wid);
+     virtual void setOpenUnderCursor(QWindow *window);
+     virtual void setOpenUnderCursor(QWindow *window, int x, int y);
+-    virtual void setIconName(QWindow *window, const QString& iconName);
++    virtual void setIconName(QWindow *window, const QString &iconName);
+     virtual QString currentSeatName();
+     virtual QString currentOutputName();
+-    virtual QList<OutputInfo*> outputsInfo();
++    virtual QList<OutputInfo *> outputsInfo();
+     virtual QList<WindowId> getWindowIdByPid(quint32 pid);
+-    virtual QList<WindowId> getWindowIdByTtile(const QString& title);
++    virtual QList<WindowId> getWindowIdByTtile(const QString &title);
+ 
+ Q_SIGNALS:
+     void activeWindowChanged(WindowId wid);
+@@ -133,7 +132,7 @@ Q_SIGNALS:
+     void currentDesktopChanged();
+     void isShowingDesktopChanged();
+ 
+-    //since 2.3
++    // since 2.3
+     void titleChanged(WindowId wid);
+     void iconChanged(WindowId wid);
+     void activeChanged(WindowId wid);
+@@ -147,12 +146,12 @@ Q_SIGNALS:
+     void skipSwitcherChanged(WindowId wid);
+     void geometryChanged(WindowId wid);
+ 
+-    //since 2.4
++    // since 2.4
+     void idled();
+     void resumed();
+ 
+-    //since 2.5
+-    void outputInfoChanged(OutputInfo*);
++    // since 2.5
++    void outputInfoChanged(OutputInfo *);
+ 
+ public:
+     QMap<WindowId, WindowInfo> m_windows;
+diff --git a/kysdk-waylandhelper/src/windowmanager/extidlenotifier.cpp b/kysdk-waylandhelper/src/windowmanager/extidlenotifier.cpp
+index 2f5ebf9..7912a3c 100644
+--- a/kysdk-waylandhelper/src/windowmanager/extidlenotifier.cpp
++++ b/kysdk-waylandhelper/src/windowmanager/extidlenotifier.cpp
+@@ -12,14 +12,12 @@ public:
+ 
+ ExtIdleNotifier::ExtIdleNotifier(QObject *parent)
+     : QObject(parent)
+-    ,d(new Private(this))
++    , d(new Private(this))
+ {
+-
+ }
+ 
+ ExtIdleNotifier::~ExtIdleNotifier()
+ {
+-
+ }
+ 
+ bool ExtIdleNotifier::isValid() const
+@@ -51,24 +49,22 @@ ExtIdleNotifier::operator ext_idle_notifier_v1 *()
+ 
+ ExtIdleNotification *ExtIdleNotifier::requestExtIdleNotification(wl_seat *seat, int msec)
+ {
+-    ExtIdleNotification* notification = new ExtIdleNotification(this);
+-    if(!seat || msec <= 0)
++    ExtIdleNotification *notification = new ExtIdleNotification(this);
++    if (!seat || msec <= 0)
+         return notification;
+     ext_idle_notification_v1 *origin_notification =
+-            ext_idle_notifier_v1_get_idle_notification(d->notifier,msec,seat);
++        ext_idle_notifier_v1_get_idle_notification(d->notifier, msec, seat);
+     notification->setup(origin_notification);
+     return notification;
+ }
+ 
+-
+ ExtIdleNotifier::operator ext_idle_notifier_v1 *() const
+ {
+     return d->notifier;
+ }
+ 
+-
+ ExtIdleNotifier::Private::Private(ExtIdleNotifier *q)
+-    :q(q)
++    : q(q)
+ {
+ }
+ 
+@@ -76,7 +72,6 @@ ExtIdleNotifier::Private::~Private()
+ {
+ }
+ 
+-
+ class Q_DECL_HIDDEN ExtIdleNotification::Private
+ {
+ public:
+@@ -89,30 +84,26 @@ private:
+     ExtIdleNotification *q;
+     static const struct ext_idle_notification_v1_listener s_ext_idle_notification_v1_listener;
+     static void handle_idled(void *data,
+-              struct ext_idle_notification_v1 *ext_idle_notification_v1);
++                             struct ext_idle_notification_v1 *ext_idle_notification_v1);
+ 
+     static void handle_resumed(void *data,
+-            struct ext_idle_notification_v1 *ext_idle_notification_v1);
++                               struct ext_idle_notification_v1 *ext_idle_notification_v1);
+     void idled_callback();
+     void resumed_callback();
+ };
+ 
+-
+ const struct ext_idle_notification_v1_listener ExtIdleNotification::Private::s_ext_idle_notification_v1_listener = {
+     ExtIdleNotification::Private::handle_idled,
+-    ExtIdleNotification::Private::handle_resumed
+-};
++    ExtIdleNotification::Private::handle_resumed};
+ 
+ ExtIdleNotification::ExtIdleNotification(QObject *parent)
+     : QObject(parent)
+-    ,d(new Private(this))
++    , d(new Private(this))
+ {
+-
+ }
+ 
+ ExtIdleNotification::~ExtIdleNotification()
+ {
+-
+ }
+ 
+ bool ExtIdleNotification::isValid() const
+@@ -148,9 +139,8 @@ ExtIdleNotification::operator ext_idle_notification_v1 *() const
+     return d->notification;
+ }
+ 
+-
+ ExtIdleNotification::Private::Private(ExtIdleNotification *q)
+-    :q(q)
++    : q(q)
+ {
+ }
+ 
+@@ -160,7 +150,7 @@ ExtIdleNotification::Private::~Private()
+ 
+ void ExtIdleNotification::Private::init_listener()
+ {
+-    ext_idle_notification_v1_add_listener(notification,&s_ext_idle_notification_v1_listener, this);
++    ext_idle_notification_v1_add_listener(notification, &s_ext_idle_notification_v1_listener, this);
+ }
+ 
+ void ExtIdleNotification::Private::handle_idled(void *data, ext_idle_notification_v1 *ext_idle_notification_v1)
+diff --git a/kysdk-waylandhelper/src/windowmanager/extidlenotifier.h b/kysdk-waylandhelper/src/windowmanager/extidlenotifier.h
+index b944abc..989bfa3 100644
+--- a/kysdk-waylandhelper/src/windowmanager/extidlenotifier.h
++++ b/kysdk-waylandhelper/src/windowmanager/extidlenotifier.h
+@@ -1,9 +1,9 @@
+ #ifndef EXTIDLENOTIFIER_H
+ #define EXTIDLENOTIFIER_H
+ 
+-#include <QObject>
+ #include <KWayland/Client/seat.h>
+ #include <KWayland/Client/surface.h>
++#include <QObject>
+ 
+ #include "wayland-ext-idle-notify-v1-client-protocol.h"
+ 
+@@ -29,10 +29,10 @@ public:
+     operator ext_idle_notifier_v1 *();
+     operator ext_idle_notifier_v1 *() const;
+ 
+-   // static inline struct ext_idle_notification_v1 *
+-    //ext_idle_notifier_v1_get_idle_notification(struct ext_idle_notifier_v1 *ext_idle_notifier_v1, uint32_t timeout, struct wl_seat *seat)
++    // static inline struct ext_idle_notification_v1 *
++    // ext_idle_notifier_v1_get_idle_notification(struct ext_idle_notifier_v1 *ext_idle_notifier_v1, uint32_t timeout, struct wl_seat *seat)
+ 
+-    ExtIdleNotification* requestExtIdleNotification(wl_seat *seat, int msec);
++    ExtIdleNotification *requestExtIdleNotification(wl_seat *seat, int msec);
+ 
+ private:
+     class Private;
+diff --git a/kysdk-waylandhelper/src/windowmanager/idlenotifier.cpp b/kysdk-waylandhelper/src/windowmanager/idlenotifier.cpp
+index e305269..94ed9e9 100644
+--- a/kysdk-waylandhelper/src/windowmanager/idlenotifier.cpp
++++ b/kysdk-waylandhelper/src/windowmanager/idlenotifier.cpp
+@@ -1,17 +1,16 @@
+ #include "idlenotifier.h"
+ 
+-
+ using namespace kdk;
+ 
+ IdleNotifier::IdleNotifier(QObject *parent)
+-    :QObject(parent)
++    : QObject(parent)
+ {
+     m_wm = new WmRegister(this);
+-    connect(m_wm->winInterface(), &AbstractInterface::idled,this,&IdleNotifier::idled);
+-    connect(m_wm->winInterface(), &AbstractInterface::resumed,this,&IdleNotifier::resumed);
++    connect(m_wm->winInterface(), &AbstractInterface::idled, this, &IdleNotifier::idled);
++    connect(m_wm->winInterface(), &AbstractInterface::resumed, this, &IdleNotifier::resumed);
+ }
+ 
+ void IdleNotifier::setIdleInterval(int msec)
+ {
+-     return m_wm->winInterface()->setIdleInterval(msec);
++    return m_wm->winInterface()->setIdleInterval(msec);
+ }
+diff --git a/kysdk-waylandhelper/src/windowmanager/idlenotifier.h b/kysdk-waylandhelper/src/windowmanager/idlenotifier.h
+index f892285..0915f3a 100644
+--- a/kysdk-waylandhelper/src/windowmanager/idlenotifier.h
++++ b/kysdk-waylandhelper/src/windowmanager/idlenotifier.h
+@@ -1,15 +1,13 @@
+ #ifndef IDLENOTIFIER_H
+ #define IDLENOTIFIER_H
+ 
+-#include <QObject>
+ #include "wmregister.h"
+-
++#include <QObject>
+ 
+ namespace kdk
+ {
+ 
+-
+-class IdleNotifier: public QObject
++class IdleNotifier : public QObject
+ {
+     Q_OBJECT
+ 
+@@ -21,9 +19,8 @@ Q_SIGNALS:
+     void idled();
+     void resumed();
+ 
+-
+ private:
+-    WmRegister* m_wm = nullptr;
++    WmRegister *m_wm = nullptr;
+ };
+ 
+ }
+diff --git a/kysdk-waylandhelper/src/windowmanager/kdewaylandinterface.cpp b/kysdk-waylandhelper/src/windowmanager/kdewaylandinterface.cpp
+index 70d30a4..331d59c 100644
+--- a/kysdk-waylandhelper/src/windowmanager/kdewaylandinterface.cpp
++++ b/kysdk-waylandhelper/src/windowmanager/kdewaylandinterface.cpp
+@@ -10,38 +10,37 @@ KdeWaylandInterface::KdeWaylandInterface(QObject *parent)
+     m_registry = new Registry(this);
+     m_registry->create(m_connection->display());
+ 
+-    connect(m_registry, &KWayland::Client::Registry::shellAnnounced, this, [=](){
++    connect(m_registry, &KWayland::Client::Registry::shellAnnounced, this, [=]() {
+         const auto interface = m_registry->interface(KWayland::Client::Registry::Interface::Shell);
+         if (interface.name != 0) {
+             m_shell = m_registry->createShell(interface.name, interface.version, this);
+         }
+     });
+-    connect(m_registry, &KWayland::Client::Registry::plasmaShellAnnounced, this, [=](){
++    connect(m_registry, &KWayland::Client::Registry::plasmaShellAnnounced, this, [=]() {
+         const auto interface = m_registry->interface(KWayland::Client::Registry::Interface::PlasmaShell);
+         if (interface.name != 0) {
+             m_plasmaShell = m_registry->createPlasmaShell(interface.name, interface.version, this);
+         }
+     });
+ 
+-    connect(m_registry, &Registry::plasmaWindowManagementAnnounced, this, [=](){
++    connect(m_registry, &Registry::plasmaWindowManagementAnnounced, this, [=]() {
+         const auto interface = m_registry->interface(Registry::Interface::PlasmaWindowManagement);
+         if (interface.name != 0) {
+             m_windowManager = m_registry->createPlasmaWindowManagement(interface.name, interface.version, this);
+         }
+-        if(m_windowManager)
+-        {
+-            connect(m_windowManager, &PlasmaWindowManagement::showingDesktopChanged,this,&AbstractInterface::isShowingDesktopChanged);
++        if (m_windowManager) {
++            connect(m_windowManager, &PlasmaWindowManagement::showingDesktopChanged, this, &AbstractInterface::isShowingDesktopChanged);
+             connect(m_windowManager, &PlasmaWindowManagement::windowCreated, this, &KdeWaylandInterface::windowCreatedProxy);
+-            connect(m_windowManager, &PlasmaWindowManagement::activeWindowChanged, this, [&]() noexcept {
+-                        auto w = m_windowManager->activeWindow();
+-                        if(w)
+-                        {
+-                            emit activeWindowChanged(w ? w->internalId() : 0);
+-                        }
+-            }, Qt::QueuedConnection);
+-            connect(m_windowManager, &PlasmaWindowManagement::windowCreated,this,
+-                [this](PlasmaWindow *window)
+-            {
++            connect(
++                m_windowManager, &PlasmaWindowManagement::activeWindowChanged, this, [&]() noexcept {
++                auto w = m_windowManager->activeWindow();
++                if (w) {
++                    emit activeWindowChanged(w ? w->internalId() : 0);
++                }
++            },
++                Qt::QueuedConnection);
++            connect(m_windowManager, &PlasmaWindowManagement::windowCreated, this,
++                    [this](PlasmaWindow *window) {
+                 if (!m_windows.contains(window->internalId())) {
+                     m_windows.insert(window->internalId(), this->requestInfo(window->internalId()));
+                 }
+@@ -51,10 +50,9 @@ KdeWaylandInterface::KdeWaylandInterface(QObject *parent)
+     });
+ 
+     connect(m_registry, &KWayland::Client::Registry::plasmaVirtualDesktopManagementAnnounced,
+-                         [=] (quint32 name, quint32 version) {
++            [=](quint32 name, quint32 version) {
+         m_virtualDesktopManagement = m_registry->createPlasmaVirtualDesktopManagement(name, version, this);
+-        if(m_virtualDesktopManagement)
+-        {
++        if (m_virtualDesktopManagement) {
+             connect(m_virtualDesktopManagement, &KWayland::Client::PlasmaVirtualDesktopManagement::desktopCreated, this,
+                     [this](const QString &id, quint32 position) {
+                 addDesktop(id, position);
+@@ -76,7 +74,6 @@ KdeWaylandInterface::KdeWaylandInterface(QObject *parent)
+ 
+ KdeWaylandInterface::~KdeWaylandInterface()
+ {
+-
+ }
+ 
+ WindowInfo KdeWaylandInterface::requestInfo(WindowId wid)
+@@ -102,8 +99,7 @@ WindowInfo KdeWaylandInterface::requestInfo(WindowId wid)
+             windowInfo.setIsVirtualDesktopsChangeable(false);
+             //! Window Abilities
+ 
+-        }
+-        else if (isValidWindow(w)) {
++        } else if (isValidWindow(w)) {
+             windowInfo.setIsValid(true);
+             windowInfo.setWid(wid);
+             windowInfo.setIsActive(w->isActive());
+@@ -129,9 +125,7 @@ WindowInfo KdeWaylandInterface::requestInfo(WindowId wid)
+             //! Window Abilities
+             windowInfo.setDesktops(w->plasmaVirtualDesktops());
+         }
+-    }
+-    else
+-    {
++    } else {
+         windowInfo.setIsValid(false);
+     }
+ 
+@@ -214,12 +208,10 @@ QString KdeWaylandInterface::titleFor(WindowId wid)
+ QString KdeWaylandInterface::windowGroupFor(WindowId wid)
+ {
+     auto window = windowFor(wid);
+-    if (window)
+-    {
++    if (window) {
+         m_connection->roundtrip();
+         return window->appId();
+-    }
+-    else
++    } else
+         return QString();
+ }
+ 
+@@ -227,19 +219,16 @@ quint32 KdeWaylandInterface::pid(WindowId wid)
+ {
+     quint32 pid = 0;
+     auto window = windowFor(wid);
+-    if (window)
+-    {
++    if (window) {
+         m_connection->roundtrip();
+         return window->pid();
+-    }
+-    else
++    } else
+         return pid;
+ }
+ 
+ void KdeWaylandInterface::showCurrentDesktop()
+ {
+-    if(m_windowManager)
+-    {
++    if (m_windowManager) {
+         m_windowManager->showDesktop();
+         m_connection->roundtrip();
+     }
+@@ -247,8 +236,7 @@ void KdeWaylandInterface::showCurrentDesktop()
+ 
+ void KdeWaylandInterface::hideCurrentDesktop()
+ {
+-    if(m_windowManager)
+-    {
++    if (m_windowManager) {
+         m_windowManager->hideDesktop();
+         m_connection->roundtrip();
+     }
+@@ -298,7 +286,7 @@ WindowId KdeWaylandInterface::activeWindow()
+ 
+ void KdeWaylandInterface::setGeometry(QWindow *window, const QRect &rect)
+ {
+-    if(!window)
++    if (!window)
+         return;
+     if (!m_plasmaShell)
+         return;
+@@ -306,28 +294,25 @@ void KdeWaylandInterface::setGeometry(QWindow *window, const QRect &rect)
+     auto surface = KWayland::Client::Surface::fromWindow(window);
+     if (!surface)
+         return;
+-    if(!m_surfaces.contains(window))
+-    {
+-        m_surfaces.insert(window,surface);
++    if (!m_surfaces.contains(window)) {
++        m_surfaces.insert(window, surface);
+     }
+ 
+     auto plasmaShellSurface = m_plasmaShell->createSurface(surface, window);
+     if (!plasmaShellSurface)
+         return;
+-    if(!m_plasmaShellSurfaces.contains(window))
+-    {
+-        m_plasmaShellSurfaces.insert(window,plasmaShellSurface);
++    if (!m_plasmaShellSurfaces.contains(window)) {
++        m_plasmaShellSurfaces.insert(window, plasmaShellSurface);
+     }
+     plasmaShellSurface->setPosition(rect.topLeft());
+     window->resize(rect.size());
+ 
+-
+     window->installEventFilter(this);
+ }
+ 
+ void KdeWaylandInterface::setSkipTaskBar(QWindow *window, bool skip)
+ {
+-    if(!window)
++    if (!window)
+         return;
+     if (!m_plasmaShell)
+         return;
+@@ -335,13 +320,13 @@ void KdeWaylandInterface::setSkipTaskBar(QWindow *window, bool skip)
+     auto surface = KWayland::Client::Surface::fromWindow(window);
+     if (!surface)
+         return;
+-    if(!m_surfaces.contains(window))
+-        m_surfaces.insert(window,surface);
++    if (!m_surfaces.contains(window))
++        m_surfaces.insert(window, surface);
+     auto plasmaShellSurface = m_plasmaShell->createSurface(surface, window);
+     if (!plasmaShellSurface)
+         return;
+-    if(!m_plasmaShellSurfaces.contains(window))
+-        m_plasmaShellSurfaces.insert(window,plasmaShellSurface);
++    if (!m_plasmaShellSurfaces.contains(window))
++        m_plasmaShellSurfaces.insert(window, plasmaShellSurface);
+ 
+     plasmaShellSurface->setSkipTaskbar(skip);
+ 
+@@ -350,7 +335,7 @@ void KdeWaylandInterface::setSkipTaskBar(QWindow *window, bool skip)
+ 
+ void KdeWaylandInterface::setSkipSwitcher(QWindow *window, bool skip)
+ {
+-    if(!window)
++    if (!window)
+         return;
+     if (!m_plasmaShell)
+         return;
+@@ -358,17 +343,16 @@ void KdeWaylandInterface::setSkipSwitcher(QWindow *window, bool skip)
+     auto surface = KWayland::Client::Surface::fromWindow(window);
+     if (!surface)
+         return;
+-    if(!m_surfaces.contains(window))
+-        m_surfaces.insert(window,surface);
++    if (!m_surfaces.contains(window))
++        m_surfaces.insert(window, surface);
+     auto plasmaShellSurface = m_plasmaShell->createSurface(surface, window);
+     if (!plasmaShellSurface)
+         return;
+-    if(!m_plasmaShellSurfaces.contains(window))
+-        m_plasmaShellSurfaces.insert(window,plasmaShellSurface);
++    if (!m_plasmaShellSurfaces.contains(window))
++        m_plasmaShellSurfaces.insert(window, plasmaShellSurface);
+ 
+     plasmaShellSurface->setSkipSwitcher(skip);
+ 
+-
+     window->installEventFilter(this);
+ }
+ 
+@@ -389,8 +373,7 @@ bool KdeWaylandInterface::skipSwitcher(const WindowId &wid)
+ bool KdeWaylandInterface::isShowingDesktop()
+ {
+     bool flag = false;
+-    if(m_windowManager)
+-    {
++    if (m_windowManager) {
+         flag = m_windowManager->isShowingDesktop();
+         m_connection->roundtrip();
+     }
+@@ -421,7 +404,7 @@ NET::WindowType KdeWaylandInterface::windowType(WindowId wid)
+ 
+ void KdeWaylandInterface::setPanelTakefocus(QWindow *window, bool flag)
+ {
+-    if(!window)
++    if (!window)
+         return;
+     if (!m_plasmaShell)
+         return;
+@@ -429,17 +412,15 @@ void KdeWaylandInterface::setPanelTakefocus(QWindow *window, bool flag)
+     auto surface = KWayland::Client::Surface::fromWindow(window);
+     if (!surface)
+         return;
+-    if(!m_surfaces.contains(window))
+-    {
+-        m_surfaces.insert(window,surface);
++    if (!m_surfaces.contains(window)) {
++        m_surfaces.insert(window, surface);
+     }
+ 
+     auto plasmaShellSurface = m_plasmaShell->createSurface(surface, window);
+     if (!plasmaShellSurface)
+         return;
+-    if(!m_plasmaShellSurfaces.contains(window))
+-    {
+-        m_plasmaShellSurfaces.insert(window,plasmaShellSurface);
++    if (!m_plasmaShellSurfaces.contains(window)) {
++        m_plasmaShellSurfaces.insert(window, plasmaShellSurface);
+     }
+     plasmaShellSurface->setPanelTakesFocus(flag);
+     window->installEventFilter(this);
+@@ -449,15 +430,15 @@ void KdeWaylandInterface::demandAttention(const WindowId &wid)
+ {
+     auto w = windowFor(wid);
+     if (w) {
+-         org_kde_plasma_window_set_state(*w, ORG_KDE_PLASMA_WINDOW_MANAGEMENT_STATE_DEMANDS_ATTENTION, ORG_KDE_PLASMA_WINDOW_MANAGEMENT_STATE_DEMANDS_ATTENTION);
++        org_kde_plasma_window_set_state(*w, ORG_KDE_PLASMA_WINDOW_MANAGEMENT_STATE_DEMANDS_ATTENTION, ORG_KDE_PLASMA_WINDOW_MANAGEMENT_STATE_DEMANDS_ATTENTION);
+         m_connection->roundtrip();
+     }
+ }
+ 
+ QRect KdeWaylandInterface::windowGeometry(const WindowId &windowId)
+ {
+-    PlasmaWindow* w = windowFor(windowId);
+-    if(w)
++    PlasmaWindow *w = windowFor(windowId);
++    if (w)
+         return w->geometry();
+     else
+         return QRect(0, 0, 0, 0);
+@@ -465,7 +446,7 @@ QRect KdeWaylandInterface::windowGeometry(const WindowId &windowId)
+ 
+ void KdeWaylandInterface::setWindowLayer(QWindow *window, WindowLayer layer)
+ {
+-    if(!window)
++    if (!window)
+         return;
+     if (!m_plasmaShell)
+         return;
+@@ -473,104 +454,91 @@ void KdeWaylandInterface::setWindowLayer(QWindow *window, WindowLayer layer)
+     auto surface = KWayland::Client::Surface::fromWindow(window);
+     if (!surface)
+         return;
+-    if(!m_surfaces.contains(window))
+-    {
+-        m_surfaces.insert(window,surface);
++    if (!m_surfaces.contains(window)) {
++        m_surfaces.insert(window, surface);
+     }
+ 
+     auto plasmaShellSurface = m_plasmaShell->createSurface(surface, window);
+     if (!plasmaShellSurface)
+         return;
+-    if(!m_plasmaShellSurfaces.contains(window))
+-    {
+-        m_plasmaShellSurfaces.insert(window,plasmaShellSurface);
++    if (!m_plasmaShellSurfaces.contains(window)) {
++        m_plasmaShellSurfaces.insert(window, plasmaShellSurface);
+     }
+     window->installEventFilter(this);
+ 
+-    switch(layer)
+-    {
+-        case WindowLayer::Normal:
+-            plasmaShellSurface->setRole(PlasmaShellSurface::Role::Normal);
+-            break;
+-        case WindowLayer::Desktop:
+-            plasmaShellSurface->setRole(PlasmaShellSurface::Role::Desktop);
+-            break;
+-        case WindowLayer::Panel:
+-            plasmaShellSurface->setRole(PlasmaShellSurface::Role::Panel);
+-            break;
+-        case WindowLayer::OnScreenDisplay:
+-            plasmaShellSurface->setRole(PlasmaShellSurface::Role::OnScreenDisplay);
+-            break;
+-        case WindowLayer::Notification:
+-            plasmaShellSurface->setRole(PlasmaShellSurface::Role::Notification);
+-            break;
+-        case WindowLayer::ToolTip:
+-            plasmaShellSurface->setRole(PlasmaShellSurface::Role::ToolTip);
+-            break;
+-        case WindowLayer::CriticalNotification:
+-            plasmaShellSurface->setRole(PlasmaShellSurface::Role::CriticalNotification);
+-            break;
+-        case WindowLayer::AppletPop:
+-        {
+-            plasmaShellSurface->setRole(PlasmaShellSurface::Role::ToolTip);
+-            qWarning()<<"plasmashellsurface does not surpport AppletPop layer, replaced by Tooltip";
+-            break;
+-        }
+-        case WindowLayer::ScreenLock:
+-        {
+-            plasmaShellSurface->setRole(PlasmaShellSurface::Role::Normal);
+-            qWarning()<<"plasmashellsurface does not surpport ScreenLock layer, replaced by Normal";
+-            break;
+-        }
+-        case WindowLayer::Watermark:
+-        {
+-            plasmaShellSurface->setRole(PlasmaShellSurface::Role::Normal);
+-            qWarning()<<"plasmashellsurface does not surpport Watermark layer, replaced by Normal";
+-            break;
+-        }
+-        case WindowLayer::SystemWindow:
+-        {
+-            plasmaShellSurface->setRole(PlasmaShellSurface::Role::Normal);
+-            qWarning()<<"plasmashellsurface does not surpport SystemWindow layer, replaced by Normal";
+-            break;
+-        }
+-        case WindowLayer::InputPanel:
+-        {
+-            plasmaShellSurface->setRole(PlasmaShellSurface::Role::Normal);
+-            qWarning()<<"plasmashellsurface does not surpport InputPanel layer, replaced by Normal";
+-            break;
+-        }
+-        case WindowLayer::Logout:
+-        {
+-            plasmaShellSurface->setRole(PlasmaShellSurface::Role::Normal);
+-            qWarning()<<"plasmashellsurface does not surpport Logout layer, replaced by Normal";
+-            break;
+-        }
+-        case WindowLayer::ScreenLockNotification:
+-        {
+-            plasmaShellSurface->setRole(PlasmaShellSurface::Role::Normal);
+-            qWarning()<<"plasmashellsurface does not surpport ScreenLockNotification layer, replaced by Normal";
+-            break;
+-        }
+-        case WindowLayer::Switcher:
+-        {
+-            plasmaShellSurface->setRole(PlasmaShellSurface::Role::Panel);
+-            qWarning()<<"plasmashellsurface does not surpport Switcher layer, replaced by Panel";
+-            break;
+-        }
+-        default:
+-        {
+-            qWarning()<<"It is not a surpported window layer by kde protocols! id:" << (int)layer;
+-            plasmaShellSurface->setRole(PlasmaShellSurface::Role::Normal);
+-            break;
+-        }
++    switch (layer) {
++    case WindowLayer::Normal:
++        plasmaShellSurface->setRole(PlasmaShellSurface::Role::Normal);
++        break;
++    case WindowLayer::Desktop:
++        plasmaShellSurface->setRole(PlasmaShellSurface::Role::Desktop);
++        break;
++    case WindowLayer::Panel:
++        plasmaShellSurface->setRole(PlasmaShellSurface::Role::Panel);
++        break;
++    case WindowLayer::OnScreenDisplay:
++        plasmaShellSurface->setRole(PlasmaShellSurface::Role::OnScreenDisplay);
++        break;
++    case WindowLayer::Notification:
++        plasmaShellSurface->setRole(PlasmaShellSurface::Role::Notification);
++        break;
++    case WindowLayer::ToolTip:
++        plasmaShellSurface->setRole(PlasmaShellSurface::Role::ToolTip);
++        break;
++    case WindowLayer::CriticalNotification:
++        plasmaShellSurface->setRole(PlasmaShellSurface::Role::CriticalNotification);
++        break;
++    case WindowLayer::AppletPop: {
++        plasmaShellSurface->setRole(PlasmaShellSurface::Role::ToolTip);
++        qWarning() << "plasmashellsurface does not surpport AppletPop layer, replaced by Tooltip";
++        break;
++    }
++    case WindowLayer::ScreenLock: {
++        plasmaShellSurface->setRole(PlasmaShellSurface::Role::Normal);
++        qWarning() << "plasmashellsurface does not surpport ScreenLock layer, replaced by Normal";
++        break;
++    }
++    case WindowLayer::Watermark: {
++        plasmaShellSurface->setRole(PlasmaShellSurface::Role::Normal);
++        qWarning() << "plasmashellsurface does not surpport Watermark layer, replaced by Normal";
++        break;
++    }
++    case WindowLayer::SystemWindow: {
++        plasmaShellSurface->setRole(PlasmaShellSurface::Role::Normal);
++        qWarning() << "plasmashellsurface does not surpport SystemWindow layer, replaced by Normal";
++        break;
++    }
++    case WindowLayer::InputPanel: {
++        plasmaShellSurface->setRole(PlasmaShellSurface::Role::Normal);
++        qWarning() << "plasmashellsurface does not surpport InputPanel layer, replaced by Normal";
++        break;
++    }
++    case WindowLayer::Logout: {
++        plasmaShellSurface->setRole(PlasmaShellSurface::Role::Normal);
++        qWarning() << "plasmashellsurface does not surpport Logout layer, replaced by Normal";
++        break;
++    }
++    case WindowLayer::ScreenLockNotification: {
++        plasmaShellSurface->setRole(PlasmaShellSurface::Role::Normal);
++        qWarning() << "plasmashellsurface does not surpport ScreenLockNotification layer, replaced by Normal";
++        break;
++    }
++    case WindowLayer::Switcher: {
++        plasmaShellSurface->setRole(PlasmaShellSurface::Role::Panel);
++        qWarning() << "plasmashellsurface does not surpport Switcher layer, replaced by Panel";
++        break;
++    }
++    default: {
++        qWarning() << "It is not a surpported window layer by kde protocols! id:" << (int)layer;
++        plasmaShellSurface->setRole(PlasmaShellSurface::Role::Normal);
++        break;
++    }
+     }
+-
+ }
+ 
+ WindowLayer KdeWaylandInterface::windowLayer(QWindow *window)
+ {
+-    if(!window)
++    if (!window)
+         return WindowLayer::Normal;
+     if (!m_plasmaShell)
+         return WindowLayer::Normal;
+@@ -578,86 +546,76 @@ WindowLayer KdeWaylandInterface::windowLayer(QWindow *window)
+     auto surface = KWayland::Client::Surface::fromWindow(window);
+     if (!surface)
+         return WindowLayer::Normal;
+-    if(!m_surfaces.contains(window))
+-    {
+-        m_surfaces.insert(window,surface);
++    if (!m_surfaces.contains(window)) {
++        m_surfaces.insert(window, surface);
+     }
+ 
+     auto plasmaShellSurface = m_plasmaShell->createSurface(surface, window);
+     if (!plasmaShellSurface)
+         return WindowLayer::Normal;
+-    if(!m_plasmaShellSurfaces.contains(window))
+-    {
+-        m_plasmaShellSurfaces.insert(window,plasmaShellSurface);
++    if (!m_plasmaShellSurfaces.contains(window)) {
++        m_plasmaShellSurfaces.insert(window, plasmaShellSurface);
+     }
+     window->installEventFilter(this);
+ 
+-    WindowLayer layer; //not surpport applet and switcher layer
+-    switch(plasmaShellSurface->role())
+-    {
+-        case PlasmaShellSurface::Role::Normal:
+-            layer = WindowLayer::Normal;
+-            break;
+-        case PlasmaShellSurface::Role::Desktop:
+-            layer = WindowLayer::Desktop;
+-            break;
+-        case PlasmaShellSurface::Role::Panel:
+-            layer = WindowLayer::Panel;
+-            break;
+-        case PlasmaShellSurface::Role::OnScreenDisplay:
+-            layer = WindowLayer::OnScreenDisplay;
+-            break;
+-        case PlasmaShellSurface::Role::Notification:
+-            layer = WindowLayer::Notification;
+-            break;
+-        case PlasmaShellSurface::Role::ToolTip:
+-            layer = WindowLayer::ToolTip;
+-            break;
+-        case PlasmaShellSurface::Role::CriticalNotification:
+-            layer = WindowLayer::CriticalNotification;
+-            break;
+-        default:
+-            layer = WindowLayer::Normal;
+-            break;
++    WindowLayer layer; // not surpport applet and switcher layer
++    switch (plasmaShellSurface->role()) {
++    case PlasmaShellSurface::Role::Normal:
++        layer = WindowLayer::Normal;
++        break;
++    case PlasmaShellSurface::Role::Desktop:
++        layer = WindowLayer::Desktop;
++        break;
++    case PlasmaShellSurface::Role::Panel:
++        layer = WindowLayer::Panel;
++        break;
++    case PlasmaShellSurface::Role::OnScreenDisplay:
++        layer = WindowLayer::OnScreenDisplay;
++        break;
++    case PlasmaShellSurface::Role::Notification:
++        layer = WindowLayer::Notification;
++        break;
++    case PlasmaShellSurface::Role::ToolTip:
++        layer = WindowLayer::ToolTip;
++        break;
++    case PlasmaShellSurface::Role::CriticalNotification:
++        layer = WindowLayer::CriticalNotification;
++        break;
++    default:
++        layer = WindowLayer::Normal;
++        break;
+     }
+     return layer;
+ }
+ 
+ bool KdeWaylandInterface::eventFilter(QObject *obj, QEvent *ev)
+ {
+-    auto window = qobject_cast<QWindow*>(obj);
+-    if(window && ev->type() == QEvent::Hide)
+-    {
+-        if(m_plasmaShellSurfaces.contains(window))
+-        {
++    auto window = qobject_cast<QWindow *>(obj);
++    if (window && ev->type() == QEvent::Hide) {
++        if (m_plasmaShellSurfaces.contains(window)) {
+             auto plasmaShellSurface = m_plasmaShellSurfaces.value(window);
+-            if(plasmaShellSurface)
+-            {
++            if (plasmaShellSurface) {
+                 plasmaShellSurface->release();
+                 plasmaShellSurface->destroy();
+             }
+             m_plasmaShellSurfaces.remove(window);
+         }
+-        if(m_surfaces.contains(window))
+-        {
++        if (m_surfaces.contains(window)) {
+             auto surface = m_surfaces.value(window);
+-            if(surface)
+-            {
++            if (surface) {
+                 surface->release();
+                 surface->destroy();
+             }
+             m_surfaces.remove(window);
+         }
+-
+     }
+-    return QObject::eventFilter(obj,ev);
++    return QObject::eventFilter(obj, ev);
+ }
+ 
+ void KdeWaylandInterface::updateWindow()
+ {
+-    PlasmaWindow* w = qobject_cast<PlasmaWindow*>(QObject::sender());
+-    if(w && !isPlasmaPanel(w))
+-    {
++    PlasmaWindow *w = qobject_cast<PlasmaWindow *>(QObject::sender());
++    if (w && !isPlasmaPanel(w)) {
+         m_connection->roundtrip();
+         emit windowChanged(w->internalId());
+     }
+@@ -665,7 +623,7 @@ void KdeWaylandInterface::updateWindow()
+ 
+ void KdeWaylandInterface::windowUnmapped()
+ {
+-    PlasmaWindow *pW = qobject_cast<PlasmaWindow*>(QObject::sender());
++    PlasmaWindow *pW = qobject_cast<PlasmaWindow *>(QObject::sender());
+ 
+     if (pW) {
+         untrackWindow(pW);
+@@ -678,9 +636,9 @@ void KdeWaylandInterface::windowUnmapped()
+ 
+ PlasmaWindow *KdeWaylandInterface::windowFor(WindowId wid)
+ {
+-    auto it = std::find_if(m_windowManager->windows().constBegin(), m_windowManager->windows().constEnd(), [&wid](PlasmaWindow * w) noexcept {
+-            return w->isValid() && w->internalId() == wid;
+-});
++    auto it = std::find_if(m_windowManager->windows().constBegin(), m_windowManager->windows().constEnd(), [&wid](PlasmaWindow *w) noexcept {
++        return w->isValid() && w->internalId() == wid;
++    });
+ 
+     if (it == m_windowManager->windows().constEnd()) {
+         return nullptr;
+@@ -691,7 +649,7 @@ PlasmaWindow *KdeWaylandInterface::windowFor(WindowId wid)
+ 
+ bool KdeWaylandInterface::isValidWindow(const PlasmaWindow *w)
+ {
+-     return w->isValid();
++    return w->isValid();
+ }
+ 
+ bool KdeWaylandInterface::isPlasmaDesktop(const PlasmaWindow *w)
+@@ -705,7 +663,7 @@ bool KdeWaylandInterface::isPlasmaDesktop(const PlasmaWindow *w)
+ 
+ bool KdeWaylandInterface::isPlasmaPanel(const PlasmaWindow *w)
+ {
+-    if(w && w->appId() == QLatin1String("ukui-panel"))
++    if (w && w->appId() == QLatin1String("ukui-panel"))
+         return true;
+     else
+         return false;
+@@ -717,22 +675,19 @@ void KdeWaylandInterface::windowCreatedProxy(PlasmaWindow *w)
+         return;
+     }
+ 
+-    if ((w->appId() == QLatin1String("org.kde.plasmashell")) && isPlasmaPanel(w))
+-    {
++    if ((w->appId() == QLatin1String("org.kde.plasmashell")) && isPlasmaPanel(w)) {
+         return;
+-    }
+-    else
+-    {
++    } else {
+         trackWindow(w);
+     }
+ }
+ 
+ void KdeWaylandInterface::trackWindow(PlasmaWindow *w)
+ {
+-    if(!w || isPlasmaPanel(w)){
++    if (!w || isPlasmaPanel(w)) {
+         return;
+     }
+-    //兼容旧的windowchanged信号
++    // 兼容旧的windowchanged信号
+     connect(w, &PlasmaWindow::titleChanged, this, &KdeWaylandInterface::updateWindow);
+     connect(w, &PlasmaWindow::fullscreenChanged, this, &KdeWaylandInterface::updateWindow);
+     connect(w, &PlasmaWindow::geometryChanged, this, &KdeWaylandInterface::updateWindow);
+@@ -747,19 +702,43 @@ void KdeWaylandInterface::trackWindow(PlasmaWindow *w)
+     connect(w, &PlasmaWindow::plasmaVirtualDesktopLeft, this, &KdeWaylandInterface::updateWindow);
+     connect(w, &PlasmaWindow::unmapped, this, &KdeWaylandInterface::windowUnmapped);
+ 
+-    //按照具体事件新增信号,since2.3
+-    connect(w, &PlasmaWindow::titleChanged, this, [=](){emit titleChanged(w->internalId());});
+-    connect(w, &PlasmaWindow::fullscreenChanged, this, [=](){emit fullscreenChanged(w->internalId());});
+-    connect(w, &PlasmaWindow::iconChanged, this, [=](){emit iconChanged(w->internalId());});
+-    connect(w, &PlasmaWindow::activeChanged, this, [=](){emit activeChanged(w->internalId());});
+-    connect(w, &PlasmaWindow::keepAboveChanged, this, [=](){emit keepAboveChanged(w->internalId());});
+-    connect(w, &PlasmaWindow::minimizedChanged, this, [=](){emit minimizedChanged(w->internalId());});
+-    connect(w, &PlasmaWindow::maximizedChanged, this, [=](){emit maximizedChanged(w->internalId());});
+-    connect(w, &PlasmaWindow::onAllDesktopsChanged, this, [=](){emit onAllDesktopsChanged(w->internalId());});
+-    connect(w, &PlasmaWindow::demandsAttentionChanged, this, [=](){emit demandsAttentionChanged(w->internalId());});
+-    connect(w, &PlasmaWindow::skipTaskbarChanged, this, [=](){emit skipTaskbarChanged(w->internalId());});
+-    connect(w, &PlasmaWindow::skipSwitcherChanged, this, [=](){emit skipSwitcherChanged(w->internalId());});
+-    connect(w, &PlasmaWindow::geometryChanged, this, [=](){emit geometryChanged(w->internalId());});
++    // 按照具体事件新增信号,since2.3
++    connect(w, &PlasmaWindow::titleChanged, this, [=]() {
++        emit titleChanged(w->internalId());
++    });
++    connect(w, &PlasmaWindow::fullscreenChanged, this, [=]() {
++        emit fullscreenChanged(w->internalId());
++    });
++    connect(w, &PlasmaWindow::iconChanged, this, [=]() {
++        emit iconChanged(w->internalId());
++    });
++    connect(w, &PlasmaWindow::activeChanged, this, [=]() {
++        emit activeChanged(w->internalId());
++    });
++    connect(w, &PlasmaWindow::keepAboveChanged, this, [=]() {
++        emit keepAboveChanged(w->internalId());
++    });
++    connect(w, &PlasmaWindow::minimizedChanged, this, [=]() {
++        emit minimizedChanged(w->internalId());
++    });
++    connect(w, &PlasmaWindow::maximizedChanged, this, [=]() {
++        emit maximizedChanged(w->internalId());
++    });
++    connect(w, &PlasmaWindow::onAllDesktopsChanged, this, [=]() {
++        emit onAllDesktopsChanged(w->internalId());
++    });
++    connect(w, &PlasmaWindow::demandsAttentionChanged, this, [=]() {
++        emit demandsAttentionChanged(w->internalId());
++    });
++    connect(w, &PlasmaWindow::skipTaskbarChanged, this, [=]() {
++        emit skipTaskbarChanged(w->internalId());
++    });
++    connect(w, &PlasmaWindow::skipSwitcherChanged, this, [=]() {
++        emit skipSwitcherChanged(w->internalId());
++    });
++    connect(w, &PlasmaWindow::geometryChanged, this, [=]() {
++        emit geometryChanged(w->internalId());
++    });
+ }
+ 
+ void KdeWaylandInterface::untrackWindow(PlasmaWindow *w)
+@@ -782,7 +761,6 @@ void KdeWaylandInterface::untrackWindow(PlasmaWindow *w)
+     disconnect(w, &PlasmaWindow::plasmaVirtualDesktopLeft, this, &KdeWaylandInterface::updateWindow);
+     disconnect(w, &PlasmaWindow::unmapped, this, &KdeWaylandInterface::windowUnmapped);
+ 
+-
+     disconnect(w, &PlasmaWindow::titleChanged, 0, 0);
+     disconnect(w, &PlasmaWindow::iconChanged, 0, 0);
+     disconnect(w, &PlasmaWindow::activeChanged, 0, 0);
+@@ -792,7 +770,7 @@ void KdeWaylandInterface::untrackWindow(PlasmaWindow *w)
+     disconnect(w, &PlasmaWindow::maximizedChanged, 0, 0);
+     disconnect(w, &PlasmaWindow::onAllDesktopsChanged, 0, 0);
+     disconnect(w, &PlasmaWindow::demandsAttentionChanged, 0, 0);
+-    disconnect(w, &PlasmaWindow::skipTaskbarChanged,  0, 0);
++    disconnect(w, &PlasmaWindow::skipTaskbarChanged, 0, 0);
+     disconnect(w, &PlasmaWindow::skipSwitcherChanged, 0, 0);
+     disconnect(w, &PlasmaWindow::geometryChanged, 0, 0);
+ }
+@@ -820,8 +798,7 @@ void KdeWaylandInterface::addDesktop(const QString &id, quint32 position)
+     QObject::connect(desktop, &KWayland::Client::PlasmaVirtualDesktop::activated, this,
+                      [desktop, this]() {
+         setCurrentDesktop(desktop->id());
+-    }
+-    );
++    });
+ 
+     if (desktop->isActive()) {
+         setCurrentDesktop(id);
+@@ -830,5 +807,4 @@ void KdeWaylandInterface::addDesktop(const QString &id, quint32 position)
+ 
+ void KdeWaylandInterface::initKdeProtocol()
+ {
+-
+ }
+diff --git a/kysdk-waylandhelper/src/windowmanager/kdewaylandinterface.h b/kysdk-waylandhelper/src/windowmanager/kdewaylandinterface.h
+index 28ef388..03561cc 100644
+--- a/kysdk-waylandhelper/src/windowmanager/kdewaylandinterface.h
++++ b/kysdk-waylandhelper/src/windowmanager/kdewaylandinterface.h
+@@ -23,67 +23,66 @@
+ #ifndef KDEWAYLANDINTERFACE_H
+ #define KDEWAYLANDINTERFACE_H
+ 
+-#include <QObject>
+-#include <KWayland/Client/registry.h>
+-#include <KWayland/Server/plasmashell_interface.h>
+-#include <KWayland/Client/plasmawindowmanagement.h>
+-#include <KWayland/Client/plasmavirtualdesktop.h>
++#include "abstractinterface.h"
++#include <KWayland/Client/connection_thread.h>
+ #include <KWayland/Client/plasmashell.h>
++#include <KWayland/Client/plasmavirtualdesktop.h>
++#include <KWayland/Client/plasmawindowmanagement.h>
++#include <KWayland/Client/registry.h>
+ #include <KWayland/Client/shell.h>
+ #include <KWayland/Client/surface.h>
+-#include <KWayland/Client/connection_thread.h>
+-#include "abstractinterface.h"
++#include <KWayland/Server/plasmashell_interface.h>
++#include <QObject>
+ 
+ using namespace kdk;
+ using namespace KWayland::Client;
+ 
+-class  KdeWaylandInterface : public AbstractInterface
++class KdeWaylandInterface : public AbstractInterface
+ {
+     Q_OBJECT
+ public:
+     KdeWaylandInterface(QObject *parent = nullptr);
+     ~KdeWaylandInterface();
+-    WindowInfo requestInfo(WindowId wid)override;
++    WindowInfo requestInfo(WindowId wid) override;
+ 
+-    void requestActivate(WindowId wid)override;
+-    void requestClose(WindowId wid)override;
+-    void requestToggleKeepAbove(WindowId wid)override;
+-    void requestToggleMinimized(WindowId wid)override;
+-    void requestToggleMaximized(WindowId wid)override;
++    void requestActivate(WindowId wid) override;
++    void requestClose(WindowId wid) override;
++    void requestToggleKeepAbove(WindowId wid) override;
++    void requestToggleMinimized(WindowId wid) override;
++    void requestToggleMaximized(WindowId wid) override;
+ 
+-    QIcon iconFor(WindowId wid)override;
+-    QString titleFor(WindowId wid)override;
+-    QString windowGroupFor(WindowId wid)override;
+-    quint32 pid(WindowId wid)override;
++    QIcon iconFor(WindowId wid) override;
++    QString titleFor(WindowId wid) override;
++    QString windowGroupFor(WindowId wid) override;
++    quint32 pid(WindowId wid) override;
+ 
+-    void showCurrentDesktop()override;
+-    void hideCurrentDesktop()override;
++    void showCurrentDesktop() override;
++    void hideCurrentDesktop() override;
+ 
+-    bool windowCanBeDragged(WindowId wid)override;
+-    bool windowCanBeMaximized(WindowId wid)override;
++    bool windowCanBeDragged(WindowId wid) override;
++    bool windowCanBeMaximized(WindowId wid) override;
+ 
+-    WindowId activeWindow()override;
++    WindowId activeWindow() override;
+ 
+-    void setGeometry(QWindow *window, const QRect &rect)override;
++    void setGeometry(QWindow *window, const QRect &rect) override;
+ 
+-    void setSkipTaskBar(QWindow* window,bool skip)override;
+-    void setSkipSwitcher(QWindow* window,bool skip)override;
++    void setSkipTaskBar(QWindow *window, bool skip) override;
++    void setSkipSwitcher(QWindow *window, bool skip) override;
+ 
+-    bool skipTaskBar(const WindowId &wid)override;
+-    bool skipSwitcher(const WindowId &wid)override;
++    bool skipTaskBar(const WindowId &wid) override;
++    bool skipSwitcher(const WindowId &wid) override;
+ 
+     bool isShowingDesktop() override;
+-    void setOnAllDesktops(const WindowId &wid)override;
++    void setOnAllDesktops(const WindowId &wid) override;
+ 
+-    NET::WindowType windowType(WindowId wid)override;
+-    void setPanelTakefocus(QWindow *window, bool flag)override;
+-    void demandAttention(const WindowId &wid)override;
+-    QRect windowGeometry(const WindowId& windowId) override;
++    NET::WindowType windowType(WindowId wid) override;
++    void setPanelTakefocus(QWindow *window, bool flag) override;
++    void demandAttention(const WindowId &wid) override;
++    QRect windowGeometry(const WindowId &windowId) override;
+ 
+     void setWindowLayer(QWindow *window, WindowLayer layer) override;
+     WindowLayer windowLayer(QWindow *window) override;
+ 
+-
+ protected:
+     bool eventFilter(QObject *obj, QEvent *ev) override;
+ 
+@@ -92,10 +91,10 @@ private slots:
+     void windowUnmapped();
+ 
+ private:
+-    PlasmaWindow *windowFor(WindowId wid) ;
+-    bool isValidWindow(const KWayland::Client::PlasmaWindow *w) ;
+-    bool isPlasmaDesktop(const KWayland::Client::PlasmaWindow *w) ;
+-    bool isPlasmaPanel(const KWayland::Client::PlasmaWindow *w) ;
++    PlasmaWindow *windowFor(WindowId wid);
++    bool isValidWindow(const KWayland::Client::PlasmaWindow *w);
++    bool isPlasmaDesktop(const KWayland::Client::PlasmaWindow *w);
++    bool isPlasmaPanel(const KWayland::Client::PlasmaWindow *w);
+     void windowCreatedProxy(KWayland::Client::PlasmaWindow *w);
+     void trackWindow(KWayland::Client::PlasmaWindow *w);
+     void untrackWindow(KWayland::Client::PlasmaWindow *w);
+@@ -109,11 +108,10 @@ private:
+     PlasmaVirtualDesktopManagement *m_virtualDesktopManagement = nullptr;
+     Shell *m_shell = nullptr;
+     ConnectionThread *m_connection = nullptr;
+-    Registry* m_registry = nullptr;
+-    QMap<QWindow*,Surface*>m_surfaces;
++    Registry *m_registry = nullptr;
++    QMap<QWindow *, Surface *> m_surfaces;
+     QStringList m_desktops;
+-    QMap<QWindow*,PlasmaShellSurface*>m_plasmaShellSurfaces;
+-
++    QMap<QWindow *, PlasmaShellSurface *> m_plasmaShellSurfaces;
+ };
+ 
+ #endif // KDEWAYLANDINTERFACE_H
+diff --git a/kysdk-waylandhelper/src/windowmanager/netwm.h b/kysdk-waylandhelper/src/windowmanager/netwm.h
+index 8ae2fb4..234d1bd 100644
+--- a/kysdk-waylandhelper/src/windowmanager/netwm.h
++++ b/kysdk-waylandhelper/src/windowmanager/netwm.h
+@@ -23,15 +23,15 @@
+ 
+ */
+ 
+-#ifndef   netwm_h
+-#define   netwm_h
++#ifndef netwm_h
++#define netwm_h
+ 
+-#include <kwindowsystem_export.h>
+ #include <QSize>
+ #include <config-kwindowsystem.h>
++#include <kwindowsystem_export.h>
+ #if KWINDOWSYSTEM_HAVE_X11
+-#include <xcb/xcb.h>
+ #include <vector>
++#include <xcb/xcb.h>
+ 
+ #include "netwm_def.h"
+ 
+@@ -40,7 +40,8 @@
+ // forward declaration
+ struct NETRootInfoPrivate;
+ struct NETWinInfoPrivate;
+-template <class Z> class NETRArray;
++template<class Z>
++class NETRArray;
+ 
+ /**
+    Common API for root window properties/protocols.
+@@ -61,9 +62,13 @@ public:
+         Indexes for the properties array.
+     **/
+     // update also NETRootInfoPrivate::properties[] size when extending this
+-    enum { PROTOCOLS, WINDOW_TYPES, STATES, PROTOCOLS2, ACTIONS,
++    enum { PROTOCOLS,
++           WINDOW_TYPES,
++           STATES,
++           PROTOCOLS2,
++           ACTIONS,
+            PROPERTIES_SIZE
+-         };
++    };
+ 
+     /**
+        Window Managers should use this constructor to create a NETRootInfo object,
+@@ -124,7 +129,6 @@ public:
+     NETRootInfo(xcb_connection_t *connection, NET::Properties properties, NET::Properties2 properties2 = NET::Properties2(),
+                 int screen = -1, bool doActivate = true);
+ 
+-
+     /**
+        Creates a shared copy of the specified NETRootInfo object.
+ 
+@@ -933,6 +937,7 @@ protected:
+     binary compatibility. Unused in this class.
+     */
+     virtual void virtual_hook(int id, void *data);
++
+ private:
+     NETRootInfoPrivate *p; // krazy:exclude=dpointer (implicitly shared)
+ };
+@@ -957,9 +962,10 @@ public:
+         Indexes for the properties array.
+     **/
+     // update also NETWinInfoPrivate::properties[] size when extending this
+-    enum { PROTOCOLS, PROTOCOLS2,
++    enum { PROTOCOLS,
++           PROTOCOLS2,
+            PROPERTIES_SIZE
+-         };
++    };
+     /**
+        Create a NETWinInfo object, which will be used to set/read/change
+        information stored on an application window.
+@@ -1684,11 +1690,12 @@ protected:
+     binary compatibility. Unused in this class.
+     */
+     virtual void virtual_hook(int id, void *data);
++
+ private:
+     NETWinInfoPrivate *p; // krazy:exclude=dpointer (implicitly shared)
+ };
+ 
+-//#define KWIN_FOCUS
++// #define KWIN_FOCUS
+ 
+ #endif
+ #endif // netwm_h
+diff --git a/kysdk-waylandhelper/src/windowmanager/outputinfo.cpp b/kysdk-waylandhelper/src/windowmanager/outputinfo.cpp
+index 08af9af..e0e75fd 100644
+--- a/kysdk-waylandhelper/src/windowmanager/outputinfo.cpp
++++ b/kysdk-waylandhelper/src/windowmanager/outputinfo.cpp
+@@ -8,14 +8,13 @@ public:
+ 
+     QRect m_usableArea;
+     QString m_name;
+-    OutputInfo* q;
++    OutputInfo *q;
+ };
+ 
+ OutputInfo::OutputInfo(QObject *parent)
+-    :QObject(parent),
+-      d(new Private(this))
++    : QObject(parent)
++    , d(new Private(this))
+ {
+-
+ }
+ 
+ void OutputInfo::setOutputName(const QString &outputName)
+@@ -28,10 +27,8 @@ void OutputInfo::setUsableArea(const QRect &usableArea)
+     d->m_usableArea = usableArea;
+ }
+ 
+-
+ OutputInfo::~OutputInfo()
+ {
+-
+ }
+ 
+ QString OutputInfo::outputName()
+@@ -45,7 +42,7 @@ QRect OutputInfo::usableArea()
+ }
+ 
+ OutputInfo::Private::Private(OutputInfo *q)
+-    :q(q)
++    : q(q)
+ {
+ }
+ 
+diff --git a/kysdk-waylandhelper/src/windowmanager/outputinfo.h b/kysdk-waylandhelper/src/windowmanager/outputinfo.h
+index 8911d46..dae1938 100644
+--- a/kysdk-waylandhelper/src/windowmanager/outputinfo.h
++++ b/kysdk-waylandhelper/src/windowmanager/outputinfo.h
+@@ -4,7 +4,7 @@
+ #include <QObject>
+ #include <QRect>
+ 
+-class OutputInfo: public QObject
++class OutputInfo : public QObject
+ {
+     Q_OBJECT
+ public:
+@@ -13,11 +13,10 @@ public:
+     QString outputName();
+     QRect usableArea();
+ 
+-
+ private:
+     explicit OutputInfo(QObject *parent = nullptr);
+-    void setOutputName(const QString& outputName);
+-    void setUsableArea(const QRect& usableArea);
++    void setOutputName(const QString &outputName);
++    void setUsableArea(const QRect &usableArea);
+ 
+     friend class OutputUsableAreaManager;
+     class Private;
+diff --git a/kysdk-waylandhelper/src/windowmanager/ukuishell.cpp b/kysdk-waylandhelper/src/windowmanager/ukuishell.cpp
+index a6e954e..4bca045 100644
+--- a/kysdk-waylandhelper/src/windowmanager/ukuishell.cpp
++++ b/kysdk-waylandhelper/src/windowmanager/ukuishell.cpp
+@@ -1,5 +1,5 @@
+-#include "ukuiwaylandpointer.h"
+ #include "ukuishell.h"
++#include "ukuiwaylandpointer.h"
+ 
+ class Q_DECL_HIDDEN UkuiShell::Private
+ {
+@@ -17,13 +17,11 @@ public:
+     static struct ukui_shell_listener s_listener;
+     static void currentOutputCallback(void *data, struct ukui_shell *ukui_shell, const char *output_name, const char *seat_name);
+     static void doneCallback(void *data, struct ukui_shell *ukui_shell);
+-
+ };
+ 
+ ukui_shell_listener UkuiShell::Private::s_listener = {
+     .current_output = currentOutputCallback,
+-    .done = doneCallback
+-};
++    .done = doneCallback};
+ 
+ class Q_DECL_HIDDEN UkuiShellSurface::Private
+ {
+@@ -82,7 +80,6 @@ void UkuiShell::setup(ukui_shell *shell)
+     Q_ASSERT(shell);
+     d->shell.setup(shell);
+     d->init_listener();
+-
+ }
+ 
+ void UkuiShell::setEventQueue(EventQueue *queue)
+@@ -97,7 +94,7 @@ EventQueue *UkuiShell::eventQueue()
+ 
+ QString UkuiShell::seatName()
+ {
+-    if(d->m_currentOutputReady)
++    if (d->m_currentOutputReady)
+         return d->m_seatName;
+     else
+         return QString();
+@@ -105,7 +102,7 @@ QString UkuiShell::seatName()
+ 
+ QString UkuiShell::outputName()
+ {
+-    if(d->m_currentOutputReady)
++    if (d->m_currentOutputReady)
+         return d->m_outputName;
+     else
+         return QString();
+@@ -291,16 +288,16 @@ void UkuiShellSurface::setRole(UkuiShellSurface::Role role)
+     case Role::InputPanel:
+         wlRole = UKUI_SURFACE_ROLE_INPUTPANEL;
+         break;
+-    case  Role::Logout:
++    case Role::Logout:
+         wlRole = UKUI_SURFACE_ROLE_LOGOUT;
+         break;
+-    case  Role::ScreenLockNotification:
++    case Role::ScreenLockNotification:
+         wlRole = UKUI_SURFACE_ROLE_SCREENLOCKNOTIFICATION;
+         break;
+-    case  Role::Switcher:
++    case Role::Switcher:
+         wlRole = UKUI_SURFACE_ROLE_SWITCHER;
+         break;
+-    case  Role::Authentication:
++    case Role::Authentication:
+         wlRole = UKUI_SURFACE_ROLE_AUTHENTICATION;
+         break;
+     default:
+@@ -316,11 +313,10 @@ UkuiShellSurface::Role UkuiShellSurface::role() const
+     return d->role;
+ }
+ 
+-void UkuiShellSurface::setSurfaceProperty(SurfaceProperty property,uint32_t value)
++void UkuiShellSurface::setSurfaceProperty(SurfaceProperty property, uint32_t value)
+ {
+     uint32_t wlPropery = -1;
+-    switch(property)
+-    {
++    switch (property) {
+     case SurfaceProperty::NoTitleBar:
+         wlPropery = UKUI_SURFACE_PROPERTY_NO_TITLEBAR;
+         break;
+@@ -350,7 +346,7 @@ void UkuiShellSurface::setSurfaceProperty(SurfaceProperty property,uint32_t valu
+         break;
+     }
+ 
+-    ukui_surface_set_property(d->surface, wlPropery,value);
++    ukui_surface_set_property(d->surface, wlPropery, value);
+     d->property = property;
+ }
+ 
+@@ -386,15 +382,15 @@ void UkuiShellSurface::setGrabKeyboard(wl_seat *seat)
+ 
+ void UkuiShellSurface::setOpenUnderCursor()
+ {
+-    ukui_surface_open_under_cursor(d->surface, 0 , 0);
++    ukui_surface_open_under_cursor(d->surface, 0, 0);
+ }
+ 
+ void UkuiShellSurface::setOpenUnderCursor(int x, int y)
+ {
+-    ukui_surface_open_under_cursor(d->surface, x , y);
++    ukui_surface_open_under_cursor(d->surface, x, y);
+ }
+ 
+-void UkuiShellSurface::setIconName(const QString& iconName)
++void UkuiShellSurface::setIconName(const QString &iconName)
+ {
+     if (iconName.isEmpty()) {
+         ukui_surface_set_icon(d->surface, NULL);
+@@ -404,9 +400,8 @@ void UkuiShellSurface::setIconName(const QString& iconName)
+ }
+ 
+ UkuiShell::Private::Private(UkuiShell *q)
+-    :q(q)
++    : q(q)
+ {
+-
+ }
+ 
+ void UkuiShell::Private::init_listener()
+@@ -417,7 +412,7 @@ void UkuiShell::Private::init_listener()
+ void UkuiShell::Private::currentOutputCallback(void *data, ukui_shell *ukui_shell, const char *output_name, const char *seat_name)
+ {
+     auto ukuiShell = reinterpret_cast<UkuiShell::Private *>(data);
+-    if(ukuiShell->shell != ukui_shell)
++    if (ukuiShell->shell != ukui_shell)
+         return;
+     ukuiShell->m_outputName = QString::fromUtf8(output_name);
+     ukuiShell->m_seatName = QString::fromUtf8(seat_name);
+@@ -426,7 +421,7 @@ void UkuiShell::Private::currentOutputCallback(void *data, ukui_shell *ukui_shel
+ void UkuiShell::Private::doneCallback(void *data, ukui_shell *ukui_shell)
+ {
+     auto ukuiShell = reinterpret_cast<UkuiShell::Private *>(data);
+-    if(ukuiShell->shell != ukui_shell)
++    if (ukuiShell->shell != ukui_shell)
+         return;
+     ukuiShell->m_currentOutputReady = true;
+     Q_EMIT ukuiShell->q->currentOutputReady();
+diff --git a/kysdk-waylandhelper/src/windowmanager/ukuishell.h b/kysdk-waylandhelper/src/windowmanager/ukuishell.h
+index 392ecfd..c8e8969 100644
+--- a/kysdk-waylandhelper/src/windowmanager/ukuishell.h
++++ b/kysdk-waylandhelper/src/windowmanager/ukuishell.h
+@@ -1,13 +1,12 @@
+ #ifndef UKUISHELL_H
+ #define UKUISHELL_H
+ 
+-
++#include "ukui-shell-client-protocol.h"
++#include <KWayland/Client/event_queue.h>
++#include <KWayland/Client/surface.h>
+ #include <QObject>
+-#include <QSize>
+ #include <QPointer>
+-#include <KWayland/Client/surface.h>
+-#include <KWayland/Client/event_queue.h>
+-#include "ukui-shell-client-protocol.h"
++#include <QSize>
+ 
+ struct wl_surface;
+ struct ukui_surface;
+@@ -17,14 +16,13 @@ class UkuiShellSurface;
+ 
+ using namespace KWayland::Client;
+ 
+-class  UkuiShell : public QObject
++class UkuiShell : public QObject
+ {
+     Q_OBJECT
+ public:
+     explicit UkuiShell(QObject *parent = nullptr);
+     ~UkuiShell() override;
+ 
+-
+     bool isValid() const;
+ 
+     void release();
+@@ -67,8 +65,7 @@ private:
+     QScopedPointer<Private> d;
+ };
+ 
+-
+-class  UkuiShellSurface : public QObject
++class UkuiShellSurface : public QObject
+ {
+     Q_OBJECT
+ public:
+@@ -118,7 +115,6 @@ public:
+         ShadowColor
+     };
+ 
+-
+     void setRole(Role role);
+ 
+     Role role() const;
+@@ -137,13 +133,13 @@ public:
+ 
+     void setPanelAutoHide(bool autoHide);
+ 
+-    void setGrabKeyboard(wl_seat* seat);
++    void setGrabKeyboard(wl_seat *seat);
+ 
+     void setOpenUnderCursor();
+ 
+     void setOpenUnderCursor(int x, int y);
+ 
+-    void setIconName(const QString& iconName);
++    void setIconName(const QString &iconName);
+ 
+ Q_SIGNALS:
+ 
+@@ -157,5 +153,4 @@ private:
+     QScopedPointer<Private> d;
+ };
+ 
+-
+ #endif // UKUISHELL_H
+diff --git a/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.cpp b/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.cpp
+index aa86345..3e859c7 100644
+--- a/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.cpp
++++ b/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.cpp
+@@ -1,26 +1,25 @@
+ #include "ukuiwaylandinterface.h"
+ 
+-#include <QDebug>
+-#include <QApplication>
+-#include "ukui-window-management-client-protocol.h"
+ #include "ukui-shell-client-protocol.h"
+-#include "wayland-xdg-activation-v1-client-protocol.h"
++#include "ukui-window-management-client-protocol.h"
+ #include "wayland-ext-idle-notify-v1-client-protocol.h"
++#include "wayland-xdg-activation-v1-client-protocol.h"
++#include <QApplication>
++#include <QDebug>
+ 
+ static const u_int32_t ukui_window_management_surpported_version = 1;
+ static const u_int32_t ukui_shell_surpported_version = 2;
+ static const u_int32_t wayland_xdg_activation_surpported_version = 1;
+ static const u_int32_t wayland_ext_idle_notify_surpported_version = 1;
+ 
+-void handle_global(void *data,struct wl_registry *wl_registry,uint32_t name, const char *interface,  uint32_t version)
++void handle_global(void *data, struct wl_registry *wl_registry, uint32_t name, const char *interface, uint32_t version)
+ {
+     auto waylandInterface = reinterpret_cast<UkuiWaylandInterface *>(data);
+     Q_ASSERT(wl_registry == *waylandInterface->registry());
+-    waylandInterface->handleGlobal(data,wl_registry,name,interface,version);
++    waylandInterface->handleGlobal(data, wl_registry, name, interface, version);
+ }
+ void handle_global_remove(void *data, struct wl_registry *wl_registry, uint32_t name)
+ {
+-
+ }
+ 
+ const struct wl_registry_listener UkuiWaylandInterface::s_registryListener = {handle_global, handle_global_remove};
+@@ -32,25 +31,24 @@ UkuiWaylandInterface::UkuiWaylandInterface(QObject *parent)
+     m_registry = new Registry(this);
+     m_registry->create(m_connection->display());
+ 
+-    connect(m_registry, &KWayland::Client::Registry::shellAnnounced, this, [=](){
++    connect(m_registry, &KWayland::Client::Registry::shellAnnounced, this, [=]() {
+         const auto interface = m_registry->interface(KWayland::Client::Registry::Interface::Shell);
+         if (interface.name != 0) {
+             m_shell = m_registry->createShell(interface.name, interface.version, this);
+         }
+     });
+ 
+-    wl_registry* registry = *m_registry;
++    wl_registry *registry = *m_registry;
+     wl_registry_add_listener(registry, &s_registryListener, this);
+     wl_display_dispatch(m_connection->display());
+     wl_display_roundtrip(m_connection->display());
+ 
+     m_registry->setup();
+-//    m_connection->roundtrip();
++    //    m_connection->roundtrip();
+ }
+ 
+ UkuiWaylandInterface::~UkuiWaylandInterface()
+ {
+-
+ }
+ 
+ WindowInfo UkuiWaylandInterface::requestInfo(WindowId wid)
+@@ -59,8 +57,7 @@ WindowInfo UkuiWaylandInterface::requestInfo(WindowId wid)
+ 
+     auto w = windowFor(wid);
+ 
+-    if (w)
+-    {
++    if (w) {
+         windowInfo.setIsValid(true);
+         windowInfo.setWid(wid);
+         windowInfo.setIsActive(w->isActive());
+@@ -83,9 +80,7 @@ WindowInfo UkuiWaylandInterface::requestInfo(WindowId wid)
+         windowInfo.setIsResizable(w->isResizable());
+         windowInfo.setIsShadeable(w->isShadeable());
+         windowInfo.setIsVirtualDesktopsChangeable(w->isVirtualDesktopChangeable());
+-    }
+-    else
+-    {
++    } else {
+         windowInfo.setIsValid(false);
+     }
+ 
+@@ -168,12 +163,10 @@ QString UkuiWaylandInterface::titleFor(WindowId wid)
+ QString UkuiWaylandInterface::windowGroupFor(WindowId wid)
+ {
+     auto window = windowFor(wid);
+-    if (window)
+-    {
++    if (window) {
+         m_connection->roundtrip();
+         return window->appId();
+-    }
+-    else
++    } else
+         return QString();
+ }
+ 
+@@ -181,19 +174,16 @@ quint32 UkuiWaylandInterface::pid(WindowId wid)
+ {
+     quint32 pid = 0;
+     auto window = windowFor(wid);
+-    if (window)
+-    {
++    if (window) {
+         m_connection->roundtrip();
+         return window->pid();
+-    }
+-    else
++    } else
+         return pid;
+ }
+ 
+ void UkuiWaylandInterface::showCurrentDesktop()
+ {
+-    if(m_ukuiWindowManager)
+-    {
++    if (m_ukuiWindowManager) {
+         m_ukuiWindowManager->showDesktop();
+         m_connection->roundtrip();
+     }
+@@ -201,8 +191,7 @@ void UkuiWaylandInterface::showCurrentDesktop()
+ 
+ void UkuiWaylandInterface::hideCurrentDesktop()
+ {
+-    if(m_ukuiWindowManager)
+-    {
++    if (m_ukuiWindowManager) {
+         m_ukuiWindowManager->hideDesktop();
+         m_connection->roundtrip();
+     }
+@@ -251,7 +240,7 @@ WindowId UkuiWaylandInterface::activeWindow()
+ }
+ bool UkuiWaylandInterface::removeHeaderBar(QWindow *window)
+ {
+-    if(!window)
++    if (!window)
+         return false;
+     if (!m_ukuiShell)
+         return false;
+@@ -259,19 +248,17 @@ bool UkuiWaylandInterface::removeHeaderBar(QWindow *window)
+     auto surface = KWayland::Client::Surface::fromWindow(window);
+     if (!surface)
+         return false;
+-    if(!m_surfaces.contains(window))
+-    {
+-        m_surfaces.insert(window,surface);
++    if (!m_surfaces.contains(window)) {
++        m_surfaces.insert(window, surface);
+     }
+ 
+     auto ukuiShellSurface = m_ukuiShell->createSurface(surface, window);
+     if (!ukuiShellSurface)
+         return false;
+-    if(!m_ukuiShellSurfaces.contains(window))
+-    {
+-        m_ukuiShellSurfaces.insert(window,ukuiShellSurface);
++    if (!m_ukuiShellSurfaces.contains(window)) {
++        m_ukuiShellSurfaces.insert(window, ukuiShellSurface);
+     }
+-    ukuiShellSurface->setSurfaceProperty(UkuiShellSurface::SurfaceProperty::NoTitleBar,1);
++    ukuiShellSurface->setSurfaceProperty(UkuiShellSurface::SurfaceProperty::NoTitleBar, 1);
+ 
+     window->installEventFilter(this);
+     return true;
+@@ -279,7 +266,7 @@ bool UkuiWaylandInterface::removeHeaderBar(QWindow *window)
+ 
+ bool UkuiWaylandInterface::setWindowRadius(QWindow *window, int radius)
+ {
+-    if(!window || radius < 0)
++    if (!window || radius < 0)
+         return false;
+ 
+     if (!m_ukuiShell)
+@@ -288,50 +275,45 @@ bool UkuiWaylandInterface::setWindowRadius(QWindow *window, int radius)
+     auto surface = KWayland::Client::Surface::fromWindow(window);
+     if (!surface)
+         return false;
+-    if(!m_surfaces.contains(window))
+-    {
+-        m_surfaces.insert(window,surface);
++    if (!m_surfaces.contains(window)) {
++        m_surfaces.insert(window, surface);
+     }
+ 
+     auto ukuiShellSurface = m_ukuiShell->createSurface(surface, window);
+     if (!ukuiShellSurface)
+         return false;
+-    if(!m_ukuiShellSurfaces.contains(window))
+-    {
+-        m_ukuiShellSurfaces.insert(window,ukuiShellSurface);
++    if (!m_ukuiShellSurfaces.contains(window)) {
++        m_ukuiShellSurfaces.insert(window, ukuiShellSurface);
+     }
+-    ukuiShellSurface->setSurfaceProperty(UkuiShellSurface::SurfaceProperty::WindowRadius,radius);
++    ukuiShellSurface->setSurfaceProperty(UkuiShellSurface::SurfaceProperty::WindowRadius, radius);
+ 
+     window->installEventFilter(this);
+     return true;
+-
+ }
+ 
+ void UkuiWaylandInterface::activateWindow(QWindow *window1, QWindow *window2)
+ {
+-    if(!window1 || !window2)
++    if (!window1 || !window2)
+         return;
+ 
+-    if(!m_seat)
++    if (!m_seat)
+         return;
+-    if(!m_xdgActivation)
++    if (!m_xdgActivation)
+         return;
+ 
+     auto surface = KWayland::Client::Surface::fromWindow(window1);
+     if (!surface)
+         return;
+-    if(!m_surfaces.contains(window1))
+-    {
+-        m_surfaces.insert(window1,surface);
++    if (!m_surfaces.contains(window1)) {
++        m_surfaces.insert(window1, surface);
+     }
+-    XdgActivationToken *token = m_xdgActivation->requestXdgActivationToken(m_seat,surface,0,"");
+-    connect(token, &XdgActivationToken::done,this,[=](const QString&str){
++    XdgActivationToken *token = m_xdgActivation->requestXdgActivationToken(m_seat, surface, 0, "");
++    connect(token, &XdgActivationToken::done, this, [=](const QString &str) {
+         auto surface2 = KWayland::Client::Surface::fromWindow(window2);
+         if (!surface2)
+             return;
+-        if(!m_surfaces.contains(window2))
+-        {
+-            m_surfaces.insert(window2,surface2);
++        if (!m_surfaces.contains(window2)) {
++            m_surfaces.insert(window2, surface2);
+         }
+         m_xdgActivation->activateWindow(str, surface2);
+     });
+@@ -339,23 +321,23 @@ void UkuiWaylandInterface::activateWindow(QWindow *window1, QWindow *window2)
+ 
+ void UkuiWaylandInterface::setIdleInterval(int msec)
+ {
+-    if(!m_notifier || !m_seat)
++    if (!m_notifier || !m_seat)
++        return;
++    ExtIdleNotification *notification = m_notifier->requestExtIdleNotification(m_seat, msec);
++    if (!notification)
+         return;
+-     ExtIdleNotification* notification = m_notifier->requestExtIdleNotification(m_seat, msec);
+-     if(!notification)
+-         return;
+-     connect(notification,&ExtIdleNotification::idled,this,[=](){
+-         Q_EMIT idled();
+-     });
+-     connect(notification,&ExtIdleNotification::resumed,this,[=](){
+-         Q_EMIT resumed();
+-     });
++    connect(notification, &ExtIdleNotification::idled, this, [=]() {
++        Q_EMIT idled();
++    });
++    connect(notification, &ExtIdleNotification::resumed, this, [=]() {
++        Q_EMIT resumed();
++    });
+ }
+ 
+ QRect UkuiWaylandInterface::windowGeometry(const WindowId &windowId)
+ {
+-    UkuiWindow* w = windowFor(windowId);
+-    if(w)
++    UkuiWindow *w = windowFor(windowId);
++    if (w)
+         return w->geometry();
+     else
+         return QRect(0, 0, 0, 0);
+@@ -363,7 +345,7 @@ QRect UkuiWaylandInterface::windowGeometry(const WindowId &windowId)
+ 
+ void UkuiWaylandInterface::setPanelAutoHide(QWindow *window, bool autoHide)
+ {
+-    if(!window)
++    if (!window)
+         return;
+     if (!m_ukuiShell)
+         return;
+@@ -371,28 +353,25 @@ void UkuiWaylandInterface::setPanelAutoHide(QWindow *window, bool autoHide)
+     auto surface = KWayland::Client::Surface::fromWindow(window);
+     if (!surface)
+         return;
+-    if(!m_surfaces.contains(window))
+-    {
+-        m_surfaces.insert(window,surface);
++    if (!m_surfaces.contains(window)) {
++        m_surfaces.insert(window, surface);
+     }
+ 
+     auto ukuiShellSurface = m_ukuiShell->createSurface(surface, window);
+     if (!ukuiShellSurface)
+         return;
+-    if(!m_ukuiShellSurfaces.contains(window))
+-    {
+-        m_ukuiShellSurfaces.insert(window,ukuiShellSurface);
++    if (!m_ukuiShellSurfaces.contains(window)) {
++        m_ukuiShellSurfaces.insert(window, ukuiShellSurface);
+     }
+     ukuiShellSurface->setPanelAutoHide(autoHide);
+ 
+-
+     window->installEventFilter(this);
+ }
+ 
+ void UkuiWaylandInterface::setGrabKeyboard(QWindow *window, bool autoHide)
+ {
+     Q_UNUSED(autoHide)
+-    if(!window)
++    if (!window)
+         return;
+     if (!m_ukuiShell)
+         return;
+@@ -400,17 +379,15 @@ void UkuiWaylandInterface::setGrabKeyboard(QWindow *window, bool autoHide)
+     auto surface = KWayland::Client::Surface::fromWindow(window);
+     if (!surface)
+         return;
+-    if(!m_surfaces.contains(window))
+-    {
+-        m_surfaces.insert(window,surface);
++    if (!m_surfaces.contains(window)) {
++        m_surfaces.insert(window, surface);
+     }
+ 
+     auto ukuiShellSurface = m_ukuiShell->createSurface(surface, window);
+     if (!ukuiShellSurface)
+         return;
+-    if(!m_ukuiShellSurfaces.contains(window))
+-    {
+-        m_ukuiShellSurfaces.insert(window,ukuiShellSurface);
++    if (!m_ukuiShellSurfaces.contains(window)) {
++        m_ukuiShellSurfaces.insert(window, ukuiShellSurface);
+     }
+     ukuiShellSurface->setGrabKeyboard(m_seat);
+     window->installEventFilter(this);
+@@ -418,7 +395,7 @@ void UkuiWaylandInterface::setGrabKeyboard(QWindow *window, bool autoHide)
+ 
+ void UkuiWaylandInterface::setWindowLayer(QWindow *window, WindowLayer layer)
+ {
+-    if(!window)
++    if (!window)
+         return;
+     if (!m_ukuiShell)
+         return;
+@@ -426,150 +403,146 @@ void UkuiWaylandInterface::setWindowLayer(QWindow *window, WindowLayer layer)
+     auto surface = KWayland::Client::Surface::fromWindow(window);
+     if (!surface)
+         return;
+-    if(!m_surfaces.contains(window))
+-    {
+-        m_surfaces.insert(window,surface);
++    if (!m_surfaces.contains(window)) {
++        m_surfaces.insert(window, surface);
+     }
+ 
+     auto ukuiShellSurface = m_ukuiShell->createSurface(surface, window);
+     if (!ukuiShellSurface)
+         return;
+-    if(!m_ukuiShellSurfaces.contains(window))
+-    {
+-        m_ukuiShellSurfaces.insert(window,ukuiShellSurface);
++    if (!m_ukuiShellSurfaces.contains(window)) {
++        m_ukuiShellSurfaces.insert(window, ukuiShellSurface);
++    }
++    switch (layer) {
++    case WindowLayer::Desktop:
++        ukuiShellSurface->setRole(UkuiShellSurface::Role::Desktop);
++        break;
++    case WindowLayer::Panel:
++        ukuiShellSurface->setRole(UkuiShellSurface::Role::Panel);
++        break;
++    case WindowLayer::OnScreenDisplay:
++        ukuiShellSurface->setRole(UkuiShellSurface::Role::OnScreenDisplay);
++        break;
++    case WindowLayer::Notification:
++        ukuiShellSurface->setRole(UkuiShellSurface::Role::Notification);
++        break;
++    case WindowLayer::ToolTip:
++        ukuiShellSurface->setRole(UkuiShellSurface::Role::ToolTip);
++        break;
++    case WindowLayer::CriticalNotification:
++        ukuiShellSurface->setRole(UkuiShellSurface::Role::CriticalNotification);
++        break;
++    case WindowLayer::AppletPop:
++        ukuiShellSurface->setRole(UkuiShellSurface::Role::AppletPop);
++        break;
++    case WindowLayer::ScreenLock:
++        ukuiShellSurface->setRole(UkuiShellSurface::Role::ScreenLock);
++        break;
++    case WindowLayer::Watermark:
++        ukuiShellSurface->setRole(UkuiShellSurface::Role::Watermark);
++        break;
++    case WindowLayer::SystemWindow:
++        ukuiShellSurface->setRole(UkuiShellSurface::Role::SystemWindow);
++        break;
++    case WindowLayer::InputPanel:
++        ukuiShellSurface->setRole(UkuiShellSurface::Role::InputPanel);
++        break;
++    case WindowLayer::Logout:
++        ukuiShellSurface->setRole(UkuiShellSurface::Role::Logout);
++        break;
++    case WindowLayer::ScreenLockNotification:
++        ukuiShellSurface->setRole(UkuiShellSurface::Role::ScreenLockNotification);
++        break;
++    case WindowLayer::Switcher:
++        ukuiShellSurface->setRole(UkuiShellSurface::Role::Switcher);
++        break;
++    case WindowLayer::Authentication:
++        ukuiShellSurface->setRole(UkuiShellSurface::Role::Authentication);
++        break;
++    default: {
++        qWarning() << "It is not a surpported window layer by ukui protocols! id:" << (int)layer;
++        ukuiShellSurface->setRole(UkuiShellSurface::Role::Normal);
++        break;
+     }
+-    switch(layer)
+-    {
+-        case WindowLayer::Desktop:
+-            ukuiShellSurface->setRole(UkuiShellSurface::Role::Desktop);
+-            break;
+-        case WindowLayer::Panel:
+-            ukuiShellSurface->setRole(UkuiShellSurface::Role::Panel);
+-            break;
+-        case WindowLayer::OnScreenDisplay:
+-            ukuiShellSurface->setRole(UkuiShellSurface::Role::OnScreenDisplay);
+-            break;
+-        case WindowLayer::Notification:
+-            ukuiShellSurface->setRole(UkuiShellSurface::Role::Notification);
+-            break;
+-        case WindowLayer::ToolTip:
+-            ukuiShellSurface->setRole(UkuiShellSurface::Role::ToolTip);
+-            break;
+-        case WindowLayer::CriticalNotification:
+-            ukuiShellSurface->setRole(UkuiShellSurface::Role::CriticalNotification);
+-            break;
+-        case WindowLayer::AppletPop:
+-            ukuiShellSurface->setRole(UkuiShellSurface::Role::AppletPop);
+-            break;
+-        case WindowLayer::ScreenLock:
+-            ukuiShellSurface->setRole(UkuiShellSurface::Role::ScreenLock);
+-            break;
+-        case WindowLayer::Watermark:
+-            ukuiShellSurface->setRole(UkuiShellSurface::Role::Watermark);
+-            break;
+-        case WindowLayer::SystemWindow:
+-            ukuiShellSurface->setRole(UkuiShellSurface::Role::SystemWindow);
+-            break;
+-        case WindowLayer::InputPanel:
+-            ukuiShellSurface->setRole(UkuiShellSurface::Role::InputPanel);
+-            break;
+-        case WindowLayer::Logout:
+-            ukuiShellSurface->setRole(UkuiShellSurface::Role::Logout);
+-            break;
+-        case WindowLayer::ScreenLockNotification:
+-            ukuiShellSurface->setRole(UkuiShellSurface::Role::ScreenLockNotification);
+-            break;
+-        case WindowLayer::Switcher:
+-            ukuiShellSurface->setRole(UkuiShellSurface::Role::Switcher);
+-            break;
+-        case WindowLayer::Authentication:
+-            ukuiShellSurface->setRole(UkuiShellSurface::Role::Authentication);
+-            break;
+-        default:
+-        {
+-            qWarning()<<"It is not a surpported window layer by ukui protocols! id:" << (int)layer;
+-            ukuiShellSurface->setRole(UkuiShellSurface::Role::Normal);
+-            break;
+-        }
+     }
+     window->installEventFilter(this);
+ }
+ 
+ WindowLayer UkuiWaylandInterface::windowLayer(QWindow *window)
+ {
+-    if(!window)
++    if (!window)
+         return WindowLayer::Normal;
+     if (!m_ukuiShell)
+-        return WindowLayer::Normal;;
++        return WindowLayer::Normal;
++    ;
+ 
+     auto surface = KWayland::Client::Surface::fromWindow(window);
+     if (!surface)
+-        return WindowLayer::Normal;;
+-    if(!m_surfaces.contains(window))
+-    {
+-        m_surfaces.insert(window,surface);
++        return WindowLayer::Normal;
++    ;
++    if (!m_surfaces.contains(window)) {
++        m_surfaces.insert(window, surface);
+     }
+ 
+     auto ukuiShellSurface = m_ukuiShell->createSurface(surface, window);
+     if (!ukuiShellSurface)
+-        return WindowLayer::Normal;;
+-    if(!m_ukuiShellSurfaces.contains(window))
+-    {
+-        m_ukuiShellSurfaces.insert(window,ukuiShellSurface);
++        return WindowLayer::Normal;
++    ;
++    if (!m_ukuiShellSurfaces.contains(window)) {
++        m_ukuiShellSurfaces.insert(window, ukuiShellSurface);
+     }
+     window->installEventFilter(this);
+ 
+     WindowLayer layer;
+-    switch(ukuiShellSurface->role())
+-    {
+-        case UkuiShellSurface::Role::Normal:
+-            layer = WindowLayer::Normal;
+-            break;
+-        case UkuiShellSurface::Role::Desktop:
+-            layer = WindowLayer::Desktop;
+-            break;
+-        case UkuiShellSurface::Role::Panel:
+-            layer = WindowLayer::Panel;
+-            break;
+-        case UkuiShellSurface::Role::OnScreenDisplay:
+-            layer = WindowLayer::OnScreenDisplay;
+-            break;
+-        case UkuiShellSurface::Role::Notification:
+-            layer = WindowLayer::Notification;
+-            break;
+-        case UkuiShellSurface::Role::ToolTip:
+-            layer = WindowLayer::ToolTip;
+-            break;
+-        case UkuiShellSurface::Role::CriticalNotification:
+-            layer = WindowLayer::CriticalNotification;
+-            break;
+-        case UkuiShellSurface::Role::AppletPop:
+-            layer = WindowLayer::AppletPop;
+-            break;
+-        case UkuiShellSurface::Role::ScreenLock:
+-            layer = WindowLayer::ScreenLock;
+-            break;
+-        case UkuiShellSurface::Role::Watermark:
+-            layer = WindowLayer::Watermark;
+-            break;
+-        case UkuiShellSurface::Role::SystemWindow:
+-            layer = WindowLayer::SystemWindow;
+-            break;
+-        case UkuiShellSurface::Role::InputPanel:
+-            layer = WindowLayer::InputPanel;
+-            break;
+-        case UkuiShellSurface::Role::Logout:
+-            layer = WindowLayer::Logout;
+-            break;
+-        case UkuiShellSurface::Role::ScreenLockNotification:
+-            layer = WindowLayer::ScreenLockNotification;
+-            break;
+-        case UkuiShellSurface::Role::Switcher:
+-            layer = WindowLayer::Switcher;
+-            break;
+-        default:
+-            layer = WindowLayer::Normal;
+-            break;
++    switch (ukuiShellSurface->role()) {
++    case UkuiShellSurface::Role::Normal:
++        layer = WindowLayer::Normal;
++        break;
++    case UkuiShellSurface::Role::Desktop:
++        layer = WindowLayer::Desktop;
++        break;
++    case UkuiShellSurface::Role::Panel:
++        layer = WindowLayer::Panel;
++        break;
++    case UkuiShellSurface::Role::OnScreenDisplay:
++        layer = WindowLayer::OnScreenDisplay;
++        break;
++    case UkuiShellSurface::Role::Notification:
++        layer = WindowLayer::Notification;
++        break;
++    case UkuiShellSurface::Role::ToolTip:
++        layer = WindowLayer::ToolTip;
++        break;
++    case UkuiShellSurface::Role::CriticalNotification:
++        layer = WindowLayer::CriticalNotification;
++        break;
++    case UkuiShellSurface::Role::AppletPop:
++        layer = WindowLayer::AppletPop;
++        break;
++    case UkuiShellSurface::Role::ScreenLock:
++        layer = WindowLayer::ScreenLock;
++        break;
++    case UkuiShellSurface::Role::Watermark:
++        layer = WindowLayer::Watermark;
++        break;
++    case UkuiShellSurface::Role::SystemWindow:
++        layer = WindowLayer::SystemWindow;
++        break;
++    case UkuiShellSurface::Role::InputPanel:
++        layer = WindowLayer::InputPanel;
++        break;
++    case UkuiShellSurface::Role::Logout:
++        layer = WindowLayer::Logout;
++        break;
++    case UkuiShellSurface::Role::ScreenLockNotification:
++        layer = WindowLayer::ScreenLockNotification;
++        break;
++    case UkuiShellSurface::Role::Switcher:
++        layer = WindowLayer::Switcher;
++        break;
++    default:
++        layer = WindowLayer::Normal;
++        break;
+     }
+     return layer;
+ }
+@@ -578,9 +551,8 @@ void UkuiWaylandInterface::setHighlight(const WindowId &wid, bool highlight)
+ {
+     auto w = windowFor(wid);
+ 
+-    if (w)
+-    {
+-        highlight ?  w->setHighlight() :  w->unsetHightlight();
++    if (w) {
++        highlight ? w->setHighlight() : w->unsetHightlight();
+         m_connection->roundtrip();
+     }
+ }
+@@ -589,17 +561,15 @@ bool UkuiWaylandInterface::istHighlight(const WindowId &wid)
+ {
+     auto w = windowFor(wid);
+ 
+-    if (w)
+-    {
++    if (w) {
+         return w->isHighlight();
+-    }
+-    else
++    } else
+         return false;
+ }
+ 
+ void UkuiWaylandInterface::setOpenUnderCursor(QWindow *window)
+ {
+-    if(!window)
++    if (!window)
+         return;
+     if (!m_ukuiShell)
+         return;
+@@ -607,17 +577,15 @@ void UkuiWaylandInterface::setOpenUnderCursor(QWindow *window)
+     auto surface = KWayland::Client::Surface::fromWindow(window);
+     if (!surface)
+         return;
+-    if(!m_surfaces.contains(window))
+-    {
+-        m_surfaces.insert(window,surface);
++    if (!m_surfaces.contains(window)) {
++        m_surfaces.insert(window, surface);
+     }
+ 
+     auto ukuiShellSurface = m_ukuiShell->createSurface(surface, window);
+     if (!ukuiShellSurface)
+         return;
+-    if(!m_ukuiShellSurfaces.contains(window))
+-    {
+-        m_ukuiShellSurfaces.insert(window,ukuiShellSurface);
++    if (!m_ukuiShellSurfaces.contains(window)) {
++        m_ukuiShellSurfaces.insert(window, ukuiShellSurface);
+     }
+ 
+     ukuiShellSurface->setOpenUnderCursor();
+@@ -627,7 +595,7 @@ void UkuiWaylandInterface::setOpenUnderCursor(QWindow *window)
+ 
+ void UkuiWaylandInterface::setOpenUnderCursor(QWindow *window, int x, int y)
+ {
+-    if(!window)
++    if (!window)
+         return;
+     if (!m_ukuiShell)
+         return;
+@@ -635,17 +603,15 @@ void UkuiWaylandInterface::setOpenUnderCursor(QWindow *window, int x, int y)
+     auto surface = KWayland::Client::Surface::fromWindow(window);
+     if (!surface)
+         return;
+-    if(!m_surfaces.contains(window))
+-    {
+-        m_surfaces.insert(window,surface);
++    if (!m_surfaces.contains(window)) {
++        m_surfaces.insert(window, surface);
+     }
+ 
+     auto ukuiShellSurface = m_ukuiShell->createSurface(surface, window);
+     if (!ukuiShellSurface)
+         return;
+-    if(!m_ukuiShellSurfaces.contains(window))
+-    {
+-        m_ukuiShellSurfaces.insert(window,ukuiShellSurface);
++    if (!m_ukuiShellSurfaces.contains(window)) {
++        m_ukuiShellSurfaces.insert(window, ukuiShellSurface);
+     }
+ 
+     ukuiShellSurface->setOpenUnderCursor(x, y);
+@@ -653,7 +619,7 @@ void UkuiWaylandInterface::setOpenUnderCursor(QWindow *window, int x, int y)
+     window->installEventFilter(this);
+ }
+ 
+-void UkuiWaylandInterface::setIconName(QWindow *window, const QString& iconName)
++void UkuiWaylandInterface::setIconName(QWindow *window, const QString &iconName)
+ {
+     if (!window || !m_ukuiShell)
+         return;
+@@ -661,16 +627,14 @@ void UkuiWaylandInterface::setIconName(QWindow *window, const QString& iconName)
+     auto surface = KWayland::Client::Surface::fromWindow(window);
+     if (!surface)
+         return;
+-    if (!m_surfaces.contains(window))
+-    {
++    if (!m_surfaces.contains(window)) {
+         m_surfaces.insert(window, surface);
+     }
+ 
+     auto ukuiShellSurface = m_ukuiShell->createSurface(surface, window);
+     if (!ukuiShellSurface)
+         return;
+-    if (!m_ukuiShellSurfaces.contains(window))
+-    {
++    if (!m_ukuiShellSurfaces.contains(window)) {
+         m_ukuiShellSurfaces.insert(window, ukuiShellSurface);
+     }
+ 
+@@ -707,10 +671,9 @@ QList<WindowId> UkuiWaylandInterface::getWindowIdByPid(quint32 pid)
+ {
+     QList<WindowId> list;
+     wl_display_dispatch(m_connection->display());
+-    qDebug()<<m_ukuiWindowManager->windows().count();
+-    for(auto w : m_ukuiWindowManager->windows())
+-    {
+-        if(w->pid() == pid)
++    qDebug() << m_ukuiWindowManager->windows().count();
++    for (auto w : m_ukuiWindowManager->windows()) {
++        if (w->pid() == pid)
+             list.append(w->uuid());
+     }
+     return list;
+@@ -719,9 +682,8 @@ QList<WindowId> UkuiWaylandInterface::getWindowIdByPid(quint32 pid)
+ QList<WindowId> UkuiWaylandInterface::getWindowIdByTtile(const QString &title)
+ {
+     QList<WindowId> list;
+-    for(auto w : m_ukuiWindowManager->windows())
+-    {
+-        if(w->title() == title)
++    for (auto w : m_ukuiWindowManager->windows()) {
++        if (w->title() == title)
+             list.append(w->uuid());
+     }
+     return list;
+@@ -729,7 +691,7 @@ QList<WindowId> UkuiWaylandInterface::getWindowIdByTtile(const QString &title)
+ 
+ void UkuiWaylandInterface::setGeometry(QWindow *window, const QRect &rect)
+ {
+-    if(!window)
++    if (!window)
+         return;
+     if (!m_ukuiShell)
+         return;
+@@ -737,28 +699,25 @@ void UkuiWaylandInterface::setGeometry(QWindow *window, const QRect &rect)
+     auto surface = KWayland::Client::Surface::fromWindow(window);
+     if (!surface)
+         return;
+-    if(!m_surfaces.contains(window))
+-    {
+-        m_surfaces.insert(window,surface);
++    if (!m_surfaces.contains(window)) {
++        m_surfaces.insert(window, surface);
+     }
+ 
+     auto ukuiShellSurface = m_ukuiShell->createSurface(surface, window);
+     if (!ukuiShellSurface)
+         return;
+-    if(!m_ukuiShellSurfaces.contains(window))
+-    {
+-        m_ukuiShellSurfaces.insert(window,ukuiShellSurface);
++    if (!m_ukuiShellSurfaces.contains(window)) {
++        m_ukuiShellSurfaces.insert(window, ukuiShellSurface);
+     }
+     ukuiShellSurface->setPosition(rect.topLeft());
+     window->resize(rect.size());
+ 
+-
+     window->installEventFilter(this);
+ }
+ 
+ void UkuiWaylandInterface::setSkipTaskBar(QWindow *window, bool skip)
+ {
+-    if(!window)
++    if (!window)
+         return;
+     if (!m_ukuiShell)
+         return;
+@@ -766,13 +725,13 @@ void UkuiWaylandInterface::setSkipTaskBar(QWindow *window, bool skip)
+     auto surface = KWayland::Client::Surface::fromWindow(window);
+     if (!surface)
+         return;
+-    if(!m_surfaces.contains(window))
+-        m_surfaces.insert(window,surface);
++    if (!m_surfaces.contains(window))
++        m_surfaces.insert(window, surface);
+     auto ukuiShellSurface = m_ukuiShell->createSurface(surface, window);
+     if (!ukuiShellSurface)
+         return;
+-    if(!m_ukuiShellSurfaces.contains(window))
+-        m_ukuiShellSurfaces.insert(window,ukuiShellSurface);
++    if (!m_ukuiShellSurfaces.contains(window))
++        m_ukuiShellSurfaces.insert(window, ukuiShellSurface);
+ 
+     ukuiShellSurface->setSkipTaskbar(skip);
+ 
+@@ -781,7 +740,7 @@ void UkuiWaylandInterface::setSkipTaskBar(QWindow *window, bool skip)
+ 
+ void UkuiWaylandInterface::setSkipSwitcher(QWindow *window, bool skip)
+ {
+-    if(!window)
++    if (!window)
+         return;
+     if (!m_ukuiShell)
+         return;
+@@ -789,13 +748,13 @@ void UkuiWaylandInterface::setSkipSwitcher(QWindow *window, bool skip)
+     auto surface = KWayland::Client::Surface::fromWindow(window);
+     if (!surface)
+         return;
+-    if(!m_surfaces.contains(window))
+-        m_surfaces.insert(window,surface);
++    if (!m_surfaces.contains(window))
++        m_surfaces.insert(window, surface);
+     auto ukuiShellSurface = m_ukuiShell->createSurface(surface, window);
+     if (!ukuiShellSurface)
+         return;
+-    if(!m_ukuiShellSurfaces.contains(window))
+-        m_ukuiShellSurfaces.insert(window,ukuiShellSurface);
++    if (!m_ukuiShellSurfaces.contains(window))
++        m_ukuiShellSurfaces.insert(window, ukuiShellSurface);
+ 
+     ukuiShellSurface->setSkipSwitcher(skip);
+     window->installEventFilter(this);
+@@ -818,8 +777,7 @@ bool UkuiWaylandInterface::skipSwitcher(const WindowId &wid)
+ bool UkuiWaylandInterface::isShowingDesktop()
+ {
+     bool flag = false;
+-    if(m_ukuiWindowManager)
+-    {
++    if (m_ukuiWindowManager) {
+         flag = m_ukuiWindowManager->isShowingDesktop();
+     }
+     return flag;
+@@ -829,10 +787,8 @@ void UkuiWaylandInterface::setOnAllDesktops(const WindowId &wid)
+ {
+     auto w = windowFor(wid);
+ 
+-    if (w && m_desktops.count() > 1)
+-    {
+-        if (w->isOnAllDesktops())
+-        {
++    if (w && m_desktops.count() > 1) {
++        if (w->isOnAllDesktops()) {
+             w->requestEnterVirtualDesktop(m_currentDesktop);
+         }
+     }
+@@ -845,7 +801,7 @@ NET::WindowType UkuiWaylandInterface::windowType(WindowId wid)
+ 
+ void UkuiWaylandInterface::setPanelTakefocus(QWindow *window, bool flag)
+ {
+-    if(!window)
++    if (!window)
+         return;
+     if (!m_ukuiShell)
+         return;
+@@ -853,17 +809,15 @@ void UkuiWaylandInterface::setPanelTakefocus(QWindow *window, bool flag)
+     auto surface = KWayland::Client::Surface::fromWindow(window);
+     if (!surface)
+         return;
+-    if(!m_surfaces.contains(window))
+-    {
+-        m_surfaces.insert(window,surface);
++    if (!m_surfaces.contains(window)) {
++        m_surfaces.insert(window, surface);
+     }
+ 
+     auto ukuiShellSurface = m_ukuiShell->createSurface(surface, window);
+     if (!ukuiShellSurface)
+         return;
+-    if(!m_ukuiShellSurfaces.contains(window))
+-    {
+-        m_ukuiShellSurfaces.insert(window,ukuiShellSurface);
++    if (!m_ukuiShellSurfaces.contains(window)) {
++        m_ukuiShellSurfaces.insert(window, ukuiShellSurface);
+     }
+     ukuiShellSurface->setPanelTakesFocus(flag);
+     window->installEventFilter(this);
+@@ -881,31 +835,26 @@ void UkuiWaylandInterface::demandAttention(const WindowId &wid)
+ 
+ bool UkuiWaylandInterface::eventFilter(QObject *obj, QEvent *ev)
+ {
+-    auto window = qobject_cast<QWindow*>(obj);
+-    if(window && ev->type() == QEvent::Hide)
+-    {
+-        if(m_ukuiShellSurfaces.contains(window))
+-        {
++    auto window = qobject_cast<QWindow *>(obj);
++    if (window && ev->type() == QEvent::Hide) {
++        if (m_ukuiShellSurfaces.contains(window)) {
+             auto ukuiShellSurface = m_ukuiShellSurfaces.value(window);
+-            if(ukuiShellSurface)
+-            {
++            if (ukuiShellSurface) {
+                 ukuiShellSurface->release();
+                 ukuiShellSurface->destroy();
+             }
+             m_ukuiShellSurfaces.remove(window);
+         }
+-        if(m_surfaces.contains(window))
+-        {
++        if (m_surfaces.contains(window)) {
+             auto surface = m_surfaces.value(window);
+-            if(surface)
+-            {
++            if (surface) {
+                 surface->release();
+                 surface->destroy();
+             }
+             m_surfaces.remove(window);
+         }
+     }
+-    return QObject::eventFilter(obj,ev);
++    return QObject::eventFilter(obj, ev);
+ }
+ 
+ bool UkuiWaylandInterface::ukuiProtocolReady()
+@@ -920,8 +869,8 @@ Registry *UkuiWaylandInterface::registry()
+ 
+ UkuiWindow *UkuiWaylandInterface::windowFor(WindowId wid)
+ {
+-    auto it = std::find_if(m_ukuiWindowManager->windows().constBegin(), m_ukuiWindowManager->windows().constEnd(), [&wid](UkuiWindow * w) noexcept {
+-            return w->isValid() && w->uuid() == wid;
++    auto it = std::find_if(m_ukuiWindowManager->windows().constBegin(), m_ukuiWindowManager->windows().constEnd(), [&wid](UkuiWindow *w) noexcept {
++        return w->isValid() && w->uuid() == wid;
+     });
+ 
+     if (it == m_ukuiWindowManager->windows().constEnd()) {
+@@ -933,66 +882,54 @@ UkuiWindow *UkuiWaylandInterface::windowFor(WindowId wid)
+ 
+ void UkuiWaylandInterface::handleGlobal(void *data, wl_registry *registry, uint32_t name, const char *interface, uint32_t version)
+ {
+-    if(strcmp(interface, ext_idle_notifier_v1_interface.name) == 0)
+-    {
++    if (strcmp(interface, ext_idle_notifier_v1_interface.name) == 0) {
+         u_int32_t supportedVersion = qMin(wayland_ext_idle_notify_surpported_version, version);
+-        ext_idle_notifier_v1* notifier = (ext_idle_notifier_v1*)wl_registry_bind(registry, name, &ext_idle_notifier_v1_interface, supportedVersion);
+-        if(notifier)
+-        {
++        ext_idle_notifier_v1 *notifier = (ext_idle_notifier_v1 *)wl_registry_bind(registry, name, &ext_idle_notifier_v1_interface, supportedVersion);
++        if (notifier) {
+             m_notifier = new ExtIdleNotifier(this);
+             m_notifier->setup(notifier);
+         }
+     }
+-    if (strcmp(interface, wl_seat_interface.name) == 0)
+-    {
+-        m_seat =  (wl_seat *) wl_registry_bind(registry, name, &wl_seat_interface, version);
+-
++    if (strcmp(interface, wl_seat_interface.name) == 0) {
++        m_seat = (wl_seat *)wl_registry_bind(registry, name, &wl_seat_interface, version);
+     }
+-    if (strcmp(interface, xdg_activation_v1_interface.name) == 0)
+-    {
++    if (strcmp(interface, xdg_activation_v1_interface.name) == 0) {
+         u_int32_t supportedVersion = qMin(wayland_xdg_activation_surpported_version, version);
+-        xdg_activation_v1 *xdg_activation =  (xdg_activation_v1 *) wl_registry_bind(registry, name, &xdg_activation_v1_interface, supportedVersion);
+-        if(xdg_activation)
+-        {
++        xdg_activation_v1 *xdg_activation = (xdg_activation_v1 *)wl_registry_bind(registry, name, &xdg_activation_v1_interface, supportedVersion);
++        if (xdg_activation) {
+             m_xdgActivation = new XdgActivation(this);
+             m_xdgActivation->setup(xdg_activation);
+         }
+     }
+-    if (strcmp(interface, ukui_shell_interface.name) == 0)
+-    {
++    if (strcmp(interface, ukui_shell_interface.name) == 0) {
+         u_int32_t supportedVersion = qMin(ukui_shell_surpported_version, version);
+-        ukui_shell *shell =  (ukui_shell *) wl_registry_bind(registry, name, &ukui_shell_interface, supportedVersion);
+-        if(shell)
+-        {
++        ukui_shell *shell = (ukui_shell *)wl_registry_bind(registry, name, &ukui_shell_interface, supportedVersion);
++        if (shell) {
+             m_ukuiShell = new UkuiShell(this);
+             m_ukuiShell->setup(shell);
+         }
+     }
+-    if(strcmp(interface, ukui_window_management_interface.name) == 0)
+-    {
++    if (strcmp(interface, ukui_window_management_interface.name) == 0) {
+         u_int32_t supportedVersion = qMin(ukui_window_management_surpported_version, version);
+-        ukui_window_management  *wm =
+-                (ukui_window_management *) wl_registry_bind(registry, name, &ukui_window_management_interface, supportedVersion);
+-        if(wm)
+-        {
++        ukui_window_management *wm =
++            (ukui_window_management *)wl_registry_bind(registry, name, &ukui_window_management_interface, supportedVersion);
++        if (wm) {
+             m_ukuiWindowManager = new UkuiWindowManagement(this);
+             m_ukuiWindowManager->setup(wm);
+ 
+-            connect(m_ukuiWindowManager, &UkuiWindowManagement::showingDesktopChanged,this,&AbstractInterface::isShowingDesktopChanged);
++            connect(m_ukuiWindowManager, &UkuiWindowManagement::showingDesktopChanged, this, &AbstractInterface::isShowingDesktopChanged);
+             connect(m_ukuiWindowManager, &UkuiWindowManagement::windowCreated, this, &UkuiWaylandInterface::ukuiWindowCreatedProxy);
+-            connect(m_ukuiWindowManager, &UkuiWindowManagement::activeWindowChanged, this, [&]() noexcept
+-            {
+-                        UkuiWindow* w = m_ukuiWindowManager->activeWindow();
+-                        if(w)
+-                        {
+-                            emit activeWindowChanged(w ? w->uuid() : "");
+-                        }
+-            }, Qt::QueuedConnection);
+-            connect(m_ukuiWindowManager, &UkuiWindowManagement::windowCreated,this,
+-                [this](UkuiWindow *window)
+-            {
+-                if (!m_windows.contains(window->uuid()))
+-                {
++            connect(
++                m_ukuiWindowManager, &UkuiWindowManagement::activeWindowChanged, this, [&]() noexcept {
++                UkuiWindow *w = m_ukuiWindowManager->activeWindow();
++                if (w) {
++                    emit activeWindowChanged(w ? w->uuid() : "");
++                }
++            },
++                Qt::QueuedConnection);
++            connect(m_ukuiWindowManager, &UkuiWindowManagement::windowCreated, this,
++                    [this](UkuiWindow *window) {
++                if (!m_windows.contains(window->uuid())) {
+                     m_windows.insert(window->uuid(), this->requestInfo(window->uuid()));
+                 }
+                 emit windowAdded(window->uuid());
+@@ -1018,21 +955,45 @@ void UkuiWaylandInterface::ukuiWindowCreatedProxy(UkuiWindow *w)
+ 
+ void UkuiWaylandInterface::trackUkuiWindow(UkuiWindow *w)
+ {
+-    if(!w || w->appId() == "ukui-panel")
++    if (!w || w->appId() == "ukui-panel")
+         return;
+ 
+-    connect(w, &UkuiWindow::titleChanged, this, [=](){emit titleChanged(w->uuid());});
+-    connect(w, &UkuiWindow::fullscreenChanged, this, [=](){emit fullscreenChanged(w->uuid());});
+-    connect(w, &UkuiWindow::iconChanged, this, [=](){emit iconChanged(w->uuid());});
+-    connect(w, &UkuiWindow::activeChanged, this, [=](){emit activeChanged(w->uuid());});
+-    connect(w, &UkuiWindow::keepAboveChanged, this, [=](){emit keepAboveChanged(w->uuid());});
+-    connect(w, &UkuiWindow::minimizedChanged, this, [=](){emit minimizedChanged(w->uuid());});
+-    connect(w, &UkuiWindow::maximizedChanged, this, [=](){emit maximizedChanged(w->uuid());});
+-    connect(w, &UkuiWindow::onAllDesktopsChanged, this, [=](){emit onAllDesktopsChanged(w->uuid());});
+-    connect(w, &UkuiWindow::demandsAttentionChanged, this, [=](){emit demandsAttentionChanged(w->uuid());});
+-    connect(w, &UkuiWindow::skipTaskbarChanged, this, [=](){emit skipTaskbarChanged(w->uuid());});
+-    connect(w, &UkuiWindow::skipSwitcherChanged, this, [=](){emit skipSwitcherChanged(w->uuid());});
+-    connect(w, &UkuiWindow::geometryChanged, this, [=](){emit geometryChanged(w->uuid());});
++    connect(w, &UkuiWindow::titleChanged, this, [=]() {
++        emit titleChanged(w->uuid());
++    });
++    connect(w, &UkuiWindow::fullscreenChanged, this, [=]() {
++        emit fullscreenChanged(w->uuid());
++    });
++    connect(w, &UkuiWindow::iconChanged, this, [=]() {
++        emit iconChanged(w->uuid());
++    });
++    connect(w, &UkuiWindow::activeChanged, this, [=]() {
++        emit activeChanged(w->uuid());
++    });
++    connect(w, &UkuiWindow::keepAboveChanged, this, [=]() {
++        emit keepAboveChanged(w->uuid());
++    });
++    connect(w, &UkuiWindow::minimizedChanged, this, [=]() {
++        emit minimizedChanged(w->uuid());
++    });
++    connect(w, &UkuiWindow::maximizedChanged, this, [=]() {
++        emit maximizedChanged(w->uuid());
++    });
++    connect(w, &UkuiWindow::onAllDesktopsChanged, this, [=]() {
++        emit onAllDesktopsChanged(w->uuid());
++    });
++    connect(w, &UkuiWindow::demandsAttentionChanged, this, [=]() {
++        emit demandsAttentionChanged(w->uuid());
++    });
++    connect(w, &UkuiWindow::skipTaskbarChanged, this, [=]() {
++        emit skipTaskbarChanged(w->uuid());
++    });
++    connect(w, &UkuiWindow::skipSwitcherChanged, this, [=]() {
++        emit skipSwitcherChanged(w->uuid());
++    });
++    connect(w, &UkuiWindow::geometryChanged, this, [=]() {
++        emit geometryChanged(w->uuid());
++    });
+ }
+ 
+ void UkuiWaylandInterface::untrackUkuiWindow(UkuiWindow *w)
+@@ -1046,7 +1007,7 @@ void UkuiWaylandInterface::untrackUkuiWindow(UkuiWindow *w)
+     disconnect(w, &UkuiWindow::maximizedChanged, 0, 0);
+     disconnect(w, &UkuiWindow::onAllDesktopsChanged, 0, 0);
+     disconnect(w, &UkuiWindow::demandsAttentionChanged, 0, 0);
+-    disconnect(w, &UkuiWindow::skipTaskbarChanged,  0, 0);
++    disconnect(w, &UkuiWindow::skipTaskbarChanged, 0, 0);
+     disconnect(w, &UkuiWindow::skipSwitcherChanged, 0, 0);
+     disconnect(w, &UkuiWindow::geometryChanged, 0, 0);
+ }
+diff --git a/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.h b/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.h
+index 26c9fff..518c29d 100644
+--- a/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.h
++++ b/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.h
+@@ -23,13 +23,13 @@
+ #ifndef UKUIWAYLANDINTERFACE_H
+ #define UKUIWAYLANDINTERFACE_H
+ 
+-#include <QObject>
+ #include <QMap>
++#include <QObject>
+ 
++#include "extidlenotifier.h"
+ #include "ukuishell.h"
+ #include "ukuiwindowmanagement.h"
+ #include "xdgactivation.h"
+-#include "extidlenotifier.h"
+ 
+ #include "abstractinterface.h"
+ #include "kdewaylandinterface.h"
+@@ -41,54 +41,54 @@ public:
+     explicit UkuiWaylandInterface(QObject *parent = nullptr);
+     ~UkuiWaylandInterface();
+ 
+-    WindowInfo requestInfo(WindowId wid)override;
++    WindowInfo requestInfo(WindowId wid) override;
+ 
+-    void requestActivate(WindowId wid)override;
+-    void requestClose(WindowId wid)override;
+-    void requestToggleKeepAbove(WindowId wid)override;
+-    void requestToggleMinimized(WindowId wid)override;
+-    void requestToggleMaximized(WindowId wid)override;
++    void requestActivate(WindowId wid) override;
++    void requestClose(WindowId wid) override;
++    void requestToggleKeepAbove(WindowId wid) override;
++    void requestToggleMinimized(WindowId wid) override;
++    void requestToggleMaximized(WindowId wid) override;
+ 
+-    QIcon iconFor(WindowId wid)override;
+-    QString titleFor(WindowId wid)override;
+-    QString windowGroupFor(WindowId wid)override;
+-    quint32 pid(WindowId wid)override;
++    QIcon iconFor(WindowId wid) override;
++    QString titleFor(WindowId wid) override;
++    QString windowGroupFor(WindowId wid) override;
++    quint32 pid(WindowId wid) override;
+ 
+-    void showCurrentDesktop()override;
+-    void hideCurrentDesktop()override;
++    void showCurrentDesktop() override;
++    void hideCurrentDesktop() override;
+ 
+-    bool windowCanBeDragged(WindowId wid)override;
+-    bool windowCanBeMaximized(WindowId wid)override;
++    bool windowCanBeDragged(WindowId wid) override;
++    bool windowCanBeMaximized(WindowId wid) override;
+ 
+-    WindowId activeWindow()override;
++    WindowId activeWindow() override;
+ 
+-    void setGeometry(QWindow *window, const QRect &rect)override;
++    void setGeometry(QWindow *window, const QRect &rect) override;
+ 
+-    void setSkipTaskBar(QWindow* window,bool skip)override;
+-    void setSkipSwitcher(QWindow* window,bool skip)override;
++    void setSkipTaskBar(QWindow *window, bool skip) override;
++    void setSkipSwitcher(QWindow *window, bool skip) override;
+ 
+-    bool skipTaskBar(const WindowId &wid)override;
+-    bool skipSwitcher(const WindowId &wid)override;
++    bool skipTaskBar(const WindowId &wid) override;
++    bool skipSwitcher(const WindowId &wid) override;
+ 
+     bool isShowingDesktop() override;
+-    void setOnAllDesktops(const WindowId &wid)override;
++    void setOnAllDesktops(const WindowId &wid) override;
+ 
+-    NET::WindowType windowType(WindowId wid)override;
+-    void setPanelTakefocus(QWindow *window, bool flag)override;
+-    void demandAttention(const WindowId &wid)override;
++    NET::WindowType windowType(WindowId wid) override;
++    void setPanelTakefocus(QWindow *window, bool flag) override;
++    void demandAttention(const WindowId &wid) override;
+ 
+     bool ukuiProtocolReady();
+-    Registry* registry();
++    Registry *registry();
+     void handleGlobal(void *data, struct wl_registry *registry,
+-                              uint32_t name, const char *interface, uint32_t version);
++                      uint32_t name, const char *interface, uint32_t version);
+     void handleGlobalRemove(void *data, struct wl_registry *registry,
+                             uint32_t name);
+ 
+     bool removeHeaderBar(QWindow *windowHandle);
+-    bool setWindowRadius(QWindow *windowHandle,int radius) override;
+-    void activateWindow(QWindow*window1,QWindow*window2) override;
++    bool setWindowRadius(QWindow *windowHandle, int radius) override;
++    void activateWindow(QWindow *window1, QWindow *window2) override;
+     void setIdleInterval(int msec) override;
+-    QRect windowGeometry(const WindowId& windowId) override;
++    QRect windowGeometry(const WindowId &windowId) override;
+     void setPanelAutoHide(QWindow *window, bool autoHide) override;
+     void setGrabKeyboard(QWindow *window, bool autoHide) override;
+ 
+@@ -100,21 +100,21 @@ public:
+ 
+     void setOpenUnderCursor(QWindow *window) override;
+     void setOpenUnderCursor(QWindow *window, int x, int y) override;
+-    void setIconName(QWindow *window, const QString& iconName) override;
++    void setIconName(QWindow *window, const QString &iconName) override;
+ 
+     QString currentSeatName() override;
+     QString currentOutputName() override;
+-    QList<OutputInfo*> outputsInfo() override;
++    QList<OutputInfo *> outputsInfo() override;
+ 
+     QList<WindowId> getWindowIdByPid(quint32 pid) override;
+-    QList<WindowId> getWindowIdByTtile(const QString& title) override;
++    QList<WindowId> getWindowIdByTtile(const QString &title) override;
+ 
+ protected:
+     bool eventFilter(QObject *obj, QEvent *ev) override;
+ 
+ private:
+-    UkuiWindow* windowFor(WindowId wid);
+-    void ukuiWindowCreatedProxy(UkuiWindow* w);
++    UkuiWindow *windowFor(WindowId wid);
++    void ukuiWindowCreatedProxy(UkuiWindow *w);
+     void trackUkuiWindow(UkuiWindow *w);
+     void untrackUkuiWindow(UkuiWindow *w);
+     static const struct wl_registry_listener s_registryListener;
+@@ -124,14 +124,14 @@ private:
+     wl_seat *m_seat = nullptr;
+     Shell *m_shell = nullptr;
+     ConnectionThread *m_connection = nullptr;
+-    Registry* m_registry = nullptr;
+-    QMap<QWindow*,Surface*>m_surfaces;
++    Registry *m_registry = nullptr;
++    QMap<QWindow *, Surface *> m_surfaces;
+     QStringList m_desktops;
+     UkuiShell *m_ukuiShell = nullptr;
+     UkuiWindowManagement *m_ukuiWindowManager = nullptr;
+     XdgActivation *m_xdgActivation = nullptr;
+-    XdgActivationToken * m_xdgActivationToken = nullptr;
+-    QMap<QWindow*,UkuiShellSurface*>m_ukuiShellSurfaces;
++    XdgActivationToken *m_xdgActivationToken = nullptr;
++    QMap<QWindow *, UkuiShellSurface *> m_ukuiShellSurfaces;
+ };
+ 
+ #endif // UKUIWAYLANDINTERFACE_H
+diff --git a/kysdk-waylandhelper/src/windowmanager/ukuiwindowmanagement.cpp b/kysdk-waylandhelper/src/windowmanager/ukuiwindowmanagement.cpp
+index 785e786..57125e4 100644
+--- a/kysdk-waylandhelper/src/windowmanager/ukuiwindowmanagement.cpp
++++ b/kysdk-waylandhelper/src/windowmanager/ukuiwindowmanagement.cpp
+@@ -1,17 +1,14 @@
+ #include "ukuiwindowmanagement.h"
+ 
+-
+-
+ #include "ukui-window-management-client-protocol.h"
+ #include "ukuiwaylandpointer.h"
+ 
+ #include <QFutureWatcher>
+ #include <QTimer>
++#include <QtConcurrentRun>
+ #include <cerrno>
+-#include <unistd.h>
+ #include <fcntl.h>
+-#include <QtConcurrentRun>
+-
++#include <unistd.h>
+ 
+ class Q_DECL_HIDDEN UkuiWindowManagement::Private
+ {
+@@ -194,15 +191,15 @@ void UkuiWindowManagement::Private::windowCallback(void *data, ukui_window_manag
+         &QTimer::timeout,
+         wm->q,
+         [timer, wm, uuid] {
+-            //internalId 不用了,以uuid为唯一标识
+-            wm->windowCreated(ukui_window_management_create_window(wm->wm, uuid), 0, uuid);
+-            timer->deleteLater();
+-        },
++        // internalId 不用了,以uuid为唯一标识
++        wm->windowCreated(ukui_window_management_create_window(wm->wm, uuid), 0, uuid);
++        timer->deleteLater();
++    },
+         Qt::QueuedConnection);
+     timer->start();
+ }
+ 
+-//not used
++// not used
+ void UkuiWindowManagement::Private::windowWithUuidCallback(void *data, ukui_window_management *interface, uint32_t id, const char *_uuid)
+ {
+     QByteArray uuid(_uuid);
+@@ -216,9 +213,9 @@ void UkuiWindowManagement::Private::windowWithUuidCallback(void *data, ukui_wind
+         &QTimer::timeout,
+         wm->q,
+         [timer, wm, id, uuid] {
+-            wm->windowCreated(ukui_window_management_create_window(wm->wm, uuid), id, uuid);
+-            timer->deleteLater();
+-        },
++        wm->windowCreated(ukui_window_management_create_window(wm->wm, uuid), id, uuid);
++        timer->deleteLater();
++    },
+         Qt::QueuedConnection);
+     timer->start();
+ }
+@@ -268,7 +265,6 @@ void UkuiWindowManagement::Private::stackingOrderUuidsCallback(void *data, ukui_
+     wm->setStackingOrder(QByteArray(uuids).split(';').toVector());
+ }
+ 
+-
+ void UkuiWindowManagement::Private::setStackingOrder(const QVector<quint32> &ids)
+ {
+     if (stackingOrder == ids) {
+@@ -278,7 +274,6 @@ void UkuiWindowManagement::Private::setStackingOrder(const QVector<quint32> &ids
+     Q_EMIT q->stackingOrderChanged();
+ }
+ 
+-
+ void UkuiWindowManagement::Private::setStackingOrder(const QVector<QByteArray> &uuids)
+ {
+     if (stackingOrderUuids == uuids) {
+@@ -360,8 +355,8 @@ void UkuiWindowManagement::showDesktop()
+ void UkuiWindowManagement::setShowingDesktop(bool show)
+ {
+     ukui_window_management_show_desktop(d->wm,
+-                                                  show ? UKUI_WINDOW_MANAGEMENT_SHOW_DESKTOP_ENABLED
+-                                                       : UKUI_WINDOW_MANAGEMENT_SHOW_DESKTOP_DISABLED);
++                                        show ? UKUI_WINDOW_MANAGEMENT_SHOW_DESKTOP_ENABLED
++                                             : UKUI_WINDOW_MANAGEMENT_SHOW_DESKTOP_DISABLED);
+ }
+ 
+ bool UkuiWindowManagement::isShowingDesktop() const
+@@ -384,7 +379,6 @@ QVector<quint32> UkuiWindowManagement::stackingOrder() const
+     return d->stackingOrder;
+ }
+ 
+-
+ QVector<QByteArray> UkuiWindowManagement::stackingOrderUuids() const
+ {
+     return d->stackingOrderUuids;
+@@ -405,8 +399,7 @@ ukui_window_listener UkuiWindow::Private::s_listener = {
+     .virtual_desktop_left = virtualDesktopLeftCallback,
+     .application_menu = appmenuChangedCallback,
+     .activity_entered = activityEnteredCallback,
+-    .activity_left = activityLeftCallback
+-};
++    .activity_left = activityLeftCallback};
+ 
+ void UkuiWindow::Private::appmenuChangedCallback(void *data, ukui_window *window, const char *service_name, const char *object_path)
+ {
+@@ -600,13 +593,11 @@ static int readData(int fd, QByteArray &data)
+     char buf[4096];
+     int retryCount = 0;
+     int n;
+-    while (true)
+-    {
++    while (true) {
+         n = read(fd, buf, 4096);
+         if (n == -1 && (errno == EAGAIN) && ++retryCount < 1000) {
+             usleep(1000);
+-        } else
+-        {
++        } else {
+             break;
+         }
+     }
+@@ -635,26 +626,17 @@ void UkuiWindow::Private::iconChangedCallback(void *data, ukui_window *window)
+             return QIcon();
+         }
+         close(pipeFd);
+-        if (qgetenv("XDG_SESSION_DESKTOP") == QString("kylin-wlcom"))
+-        {
+-            int width = (content.at(0) << 0) | 
+-                    (content.at(1) << 8) |
+-                    (content.at(2) << 16) |
+-                    (content.at(3) << 24);
+-            int height = (content.at(4) << 0) | 
+-                    (content.at(5) << 8) |
+-                    (content.at(6) << 16) |
+-                    (content.at(7) << 24);
+-            if (content.size() - 8 != width * height *4 ) {
++        if (qgetenv("XDG_SESSION_DESKTOP") == QString("kylin-wlcom")) {
++            int width = (content.at(0) << 0) | (content.at(1) << 8) | (content.at(2) << 16) | (content.at(3) << 24);
++            int height = (content.at(4) << 0) | (content.at(5) << 8) | (content.at(6) << 16) | (content.at(7) << 24);
++            if (content.size() - 8 != width * height * 4) {
+                 return QIcon();
+             }
+             QImage image(width, height, QImage::Format_ARGB32);
+             memcpy(image.bits(), content.constData() + 8, content.size() - 8);
+             QIcon icon = QIcon(QPixmap::fromImage(image));
+             return icon;
+-        }
+-        else
+-        {
++        } else {
+             QDataStream ds(content);
+             QIcon icon;
+             ds >> icon;
+@@ -925,7 +907,6 @@ QString UkuiWindow::title() const
+     return d->title;
+ }
+ 
+-
+ quint32 UkuiWindow::virtualDesktop() const
+ {
+     return d->desktop;
+@@ -1067,7 +1048,7 @@ void UkuiWindow::requestResize()
+ 
+ void UkuiWindow::requestVirtualDesktop(quint32 desktop)
+ {
+-    //not used
++    // not used
+ }
+ 
+ void UkuiWindow::requestToggleKeepAbove()
+@@ -1117,7 +1098,7 @@ void UkuiWindow::requestToggleMaximized()
+ 
+ void UkuiWindow::setStartupGeometry(Surface *surface, const QRect &geometry)
+ {
+-    ukui_window_set_startup_geometry(d->window, *surface, geometry.x(),geometry.y(),geometry.width(),geometry.height());
++    ukui_window_set_startup_geometry(d->window, *surface, geometry.x(), geometry.y(), geometry.width(), geometry.height());
+ }
+ 
+ void UkuiWindow::setMinimizedGeometry(Surface *panel, const QRect &geom)
+@@ -1139,7 +1120,6 @@ void UkuiWindow::requestToggleShaded()
+     }
+ }
+ 
+-
+ quint32 UkuiWindow::internalId() const
+ {
+     return d->internalId;
+@@ -1204,7 +1184,7 @@ void UkuiWindow::sendToOutput(KWayland::Client::Output *output) const
+ 
+ void UkuiWindow::setHighlight()
+ {
+-    if(d->highlight)
++    if (d->highlight)
+         return;
+ 
+     ukui_window_highlight(d->window);
+@@ -1213,7 +1193,7 @@ void UkuiWindow::setHighlight()
+ 
+ void UkuiWindow::unsetHightlight()
+ {
+-    if(!d->highlight)
++    if (!d->highlight)
+         return;
+ 
+     ukui_window_unset_highlight(d->window);
+@@ -1224,7 +1204,3 @@ bool UkuiWindow::isHighlight()
+ {
+     return d->highlight;
+ }
+-
+-
+-
+-
+diff --git a/kysdk-waylandhelper/src/windowmanager/ukuiwindowmanagement.h b/kysdk-waylandhelper/src/windowmanager/ukuiwindowmanagement.h
+index 882ad0d..c3aad52 100644
+--- a/kysdk-waylandhelper/src/windowmanager/ukuiwindowmanagement.h
++++ b/kysdk-waylandhelper/src/windowmanager/ukuiwindowmanagement.h
+@@ -23,13 +23,13 @@
+ #ifndef UKUIWINDOWMANAGEMENT_H
+ #define UKUIWINDOWMANAGEMENT_H
+ 
++#include <KWayland/Client/event_queue.h>
++#include <KWayland/Client/output.h>
++#include <KWayland/Client/surface.h>
+ #include <QIcon>
+ #include <QObject>
+ #include <QSize>
+ #include <QVector>
+-#include <KWayland/Client/output.h>
+-#include <KWayland/Client/surface.h>
+-#include <KWayland/Client/event_queue.h>
+ 
+ struct ukui_activation;
+ struct ukui_activation_feedback;
+@@ -40,7 +40,6 @@ class UkuiWindow;
+ 
+ using namespace KWayland::Client;
+ 
+-
+ class UkuiWindowManagement : public QObject
+ {
+     Q_OBJECT
+@@ -110,7 +109,6 @@ class UkuiWindow : public QObject
+ public:
+     ~UkuiWindow() override;
+ 
+-
+     void release();
+ 
+     void destroy();
+@@ -230,8 +228,6 @@ public:
+ 
+     bool isHighlight();
+ 
+-
+-
+ Q_SIGNALS:
+ 
+     void titleChanged();
+@@ -290,16 +286,12 @@ Q_SIGNALS:
+ 
+     void geometryChanged();
+ 
+-
+     void ukuiVirtualDesktopEntered(const QString &id);
+ 
+-
+     void ukuiVirtualDesktopLeft(const QString &id);
+ 
+-
+     void ukuiActivityEntered(const QString &id);
+ 
+-
+     void ukuiActivityLeft(const QString &id);
+ 
+     void applicationMenuChanged();
+@@ -311,9 +303,6 @@ private:
+     QScopedPointer<Private> d;
+ };
+ 
+-
+ Q_DECLARE_METATYPE(UkuiWindow *)
+ 
+-
+-
+ #endif // UKUIWINDOWMANAGEMENT_H
+diff --git a/kysdk-waylandhelper/src/windowmanager/wayland-plasma-window-management-client-protocol.h b/kysdk-waylandhelper/src/windowmanager/wayland-plasma-window-management-client-protocol.h
+deleted file mode 100644
+index acc5d4e..0000000
+--- a/kysdk-waylandhelper/src/windowmanager/wayland-plasma-window-management-client-protocol.h
++++ /dev/null
+@@ -1,1118 +0,0 @@
+-/* Generated by wayland-scanner 1.22.0 */
+-
+-#ifndef PLASMA_WINDOW_MANAGEMENT_CLIENT_PROTOCOL_H
+-#define PLASMA_WINDOW_MANAGEMENT_CLIENT_PROTOCOL_H
+-
+-#include <stdint.h>
+-#include <stddef.h>
+-#include "wayland-client.h"
+-
+-#ifdef  __cplusplus
+-extern "C" {
+-#endif
+-
+-/**
+- * @page page_plasma_window_management The plasma_window_management protocol
+- * @section page_ifaces_plasma_window_management Interfaces
+- * - @subpage page_iface_org_kde_plasma_window_management - application windows management
+- * - @subpage page_iface_org_kde_plasma_window - interface to control application windows
+- * - @subpage page_iface_org_kde_plasma_activation_feedback - activation feedback
+- * - @subpage page_iface_org_kde_plasma_activation - 
+- * @section page_copyright_plasma_window_management Copyright
+- * <pre>
+- *
+- * SPDX-FileCopyrightText: 2013-2014 Pier Luigi Fiorini
+- *
+- * SPDX-License-Identifier: LGPL-2.1-or-later
+- * </pre>
+- */
+-struct org_kde_plasma_activation;
+-struct org_kde_plasma_activation_feedback;
+-struct org_kde_plasma_window;
+-struct org_kde_plasma_window_management;
+-struct wl_output;
+-struct wl_surface;
+-
+-#ifndef ORG_KDE_PLASMA_WINDOW_MANAGEMENT_INTERFACE
+-#define ORG_KDE_PLASMA_WINDOW_MANAGEMENT_INTERFACE
+-/**
+- * @page page_iface_org_kde_plasma_window_management org_kde_plasma_window_management
+- * @section page_iface_org_kde_plasma_window_management_desc Description
+- *
+- * This interface manages application windows.
+- * It provides requests to show and hide the desktop and emits
+- * an event every time a window is created so that the client can
+- * use it to manage the window.
+- *
+- * Only one client can bind this interface at a time.
+- * @section page_iface_org_kde_plasma_window_management_api API
+- * See @ref iface_org_kde_plasma_window_management.
+- */
+-/**
+- * @defgroup iface_org_kde_plasma_window_management The org_kde_plasma_window_management interface
+- *
+- * This interface manages application windows.
+- * It provides requests to show and hide the desktop and emits
+- * an event every time a window is created so that the client can
+- * use it to manage the window.
+- *
+- * Only one client can bind this interface at a time.
+- */
+-extern const struct wl_interface org_kde_plasma_window_management_interface;
+-#endif
+-#ifndef ORG_KDE_PLASMA_WINDOW_INTERFACE
+-#define ORG_KDE_PLASMA_WINDOW_INTERFACE
+-/**
+- * @page page_iface_org_kde_plasma_window org_kde_plasma_window
+- * @section page_iface_org_kde_plasma_window_desc Description
+- *
+- * Manages and control an application window.
+- *
+- * Only one client can bind this interface at a time.
+- * @section page_iface_org_kde_plasma_window_api API
+- * See @ref iface_org_kde_plasma_window.
+- */
+-/**
+- * @defgroup iface_org_kde_plasma_window The org_kde_plasma_window interface
+- *
+- * Manages and control an application window.
+- *
+- * Only one client can bind this interface at a time.
+- */
+-extern const struct wl_interface org_kde_plasma_window_interface;
+-#endif
+-#ifndef ORG_KDE_PLASMA_ACTIVATION_FEEDBACK_INTERFACE
+-#define ORG_KDE_PLASMA_ACTIVATION_FEEDBACK_INTERFACE
+-/**
+- * @page page_iface_org_kde_plasma_activation_feedback org_kde_plasma_activation_feedback
+- * @section page_iface_org_kde_plasma_activation_feedback_desc Description
+- *
+- * The activation manager interface provides a way to get notified
+- * when an application is about to be activated.
+- * @section page_iface_org_kde_plasma_activation_feedback_api API
+- * See @ref iface_org_kde_plasma_activation_feedback.
+- */
+-/**
+- * @defgroup iface_org_kde_plasma_activation_feedback The org_kde_plasma_activation_feedback interface
+- *
+- * The activation manager interface provides a way to get notified
+- * when an application is about to be activated.
+- */
+-extern const struct wl_interface org_kde_plasma_activation_feedback_interface;
+-#endif
+-#ifndef ORG_KDE_PLASMA_ACTIVATION_INTERFACE
+-#define ORG_KDE_PLASMA_ACTIVATION_INTERFACE
+-/**
+- * @page page_iface_org_kde_plasma_activation org_kde_plasma_activation
+- * @section page_iface_org_kde_plasma_activation_api API
+- * See @ref iface_org_kde_plasma_activation.
+- */
+-/**
+- * @defgroup iface_org_kde_plasma_activation The org_kde_plasma_activation interface
+- */
+-extern const struct wl_interface org_kde_plasma_activation_interface;
+-#endif
+-
+-#ifndef ORG_KDE_PLASMA_WINDOW_MANAGEMENT_STATE_ENUM
+-#define ORG_KDE_PLASMA_WINDOW_MANAGEMENT_STATE_ENUM
+-enum org_kde_plasma_window_management_state {
+-	ORG_KDE_PLASMA_WINDOW_MANAGEMENT_STATE_ACTIVE = 1 << 0,
+-	ORG_KDE_PLASMA_WINDOW_MANAGEMENT_STATE_MINIMIZED = 1 << 1,
+-	ORG_KDE_PLASMA_WINDOW_MANAGEMENT_STATE_MAXIMIZED = 1 << 2,
+-	ORG_KDE_PLASMA_WINDOW_MANAGEMENT_STATE_FULLSCREEN = 1 << 3,
+-	ORG_KDE_PLASMA_WINDOW_MANAGEMENT_STATE_KEEP_ABOVE = 1 << 4,
+-	ORG_KDE_PLASMA_WINDOW_MANAGEMENT_STATE_KEEP_BELOW = 1 << 5,
+-	ORG_KDE_PLASMA_WINDOW_MANAGEMENT_STATE_ON_ALL_DESKTOPS = 1 << 6,
+-	ORG_KDE_PLASMA_WINDOW_MANAGEMENT_STATE_DEMANDS_ATTENTION = 1 << 7,
+-	ORG_KDE_PLASMA_WINDOW_MANAGEMENT_STATE_CLOSEABLE = 1 << 8,
+-	ORG_KDE_PLASMA_WINDOW_MANAGEMENT_STATE_MINIMIZABLE = 1 << 9,
+-	ORG_KDE_PLASMA_WINDOW_MANAGEMENT_STATE_MAXIMIZABLE = 1 << 10,
+-	ORG_KDE_PLASMA_WINDOW_MANAGEMENT_STATE_FULLSCREENABLE = 1 << 11,
+-	/**
+-	 * @since 2
+-	 */
+-	ORG_KDE_PLASMA_WINDOW_MANAGEMENT_STATE_SKIPTASKBAR = 1 << 12,
+-	/**
+-	 * @since 3
+-	 */
+-	ORG_KDE_PLASMA_WINDOW_MANAGEMENT_STATE_SHADEABLE = 1 << 13,
+-	/**
+-	 * @since 3
+-	 */
+-	ORG_KDE_PLASMA_WINDOW_MANAGEMENT_STATE_SHADED = 1 << 14,
+-	/**
+-	 * @since 3
+-	 */
+-	ORG_KDE_PLASMA_WINDOW_MANAGEMENT_STATE_MOVABLE = 1 << 15,
+-	/**
+-	 * @since 3
+-	 */
+-	ORG_KDE_PLASMA_WINDOW_MANAGEMENT_STATE_RESIZABLE = 1 << 16,
+-	/**
+-	 * @since 3
+-	 */
+-	ORG_KDE_PLASMA_WINDOW_MANAGEMENT_STATE_VIRTUAL_DESKTOP_CHANGEABLE = 1 << 17,
+-	/**
+-	 * @since 9
+-	 */
+-	ORG_KDE_PLASMA_WINDOW_MANAGEMENT_STATE_SKIPSWITCHER = 1 << 18,
+-};
+-/**
+- * @ingroup iface_org_kde_plasma_window_management
+- */
+-#define ORG_KDE_PLASMA_WINDOW_MANAGEMENT_STATE_SKIPTASKBAR_SINCE_VERSION 2
+-/**
+- * @ingroup iface_org_kde_plasma_window_management
+- */
+-#define ORG_KDE_PLASMA_WINDOW_MANAGEMENT_STATE_SHADEABLE_SINCE_VERSION 3
+-/**
+- * @ingroup iface_org_kde_plasma_window_management
+- */
+-#define ORG_KDE_PLASMA_WINDOW_MANAGEMENT_STATE_SHADED_SINCE_VERSION 3
+-/**
+- * @ingroup iface_org_kde_plasma_window_management
+- */
+-#define ORG_KDE_PLASMA_WINDOW_MANAGEMENT_STATE_MOVABLE_SINCE_VERSION 3
+-/**
+- * @ingroup iface_org_kde_plasma_window_management
+- */
+-#define ORG_KDE_PLASMA_WINDOW_MANAGEMENT_STATE_RESIZABLE_SINCE_VERSION 3
+-/**
+- * @ingroup iface_org_kde_plasma_window_management
+- */
+-#define ORG_KDE_PLASMA_WINDOW_MANAGEMENT_STATE_VIRTUAL_DESKTOP_CHANGEABLE_SINCE_VERSION 3
+-/**
+- * @ingroup iface_org_kde_plasma_window_management
+- */
+-#define ORG_KDE_PLASMA_WINDOW_MANAGEMENT_STATE_SKIPSWITCHER_SINCE_VERSION 9
+-#endif /* ORG_KDE_PLASMA_WINDOW_MANAGEMENT_STATE_ENUM */
+-
+-#ifndef ORG_KDE_PLASMA_WINDOW_MANAGEMENT_SHOW_DESKTOP_ENUM
+-#define ORG_KDE_PLASMA_WINDOW_MANAGEMENT_SHOW_DESKTOP_ENUM
+-enum org_kde_plasma_window_management_show_desktop {
+-	ORG_KDE_PLASMA_WINDOW_MANAGEMENT_SHOW_DESKTOP_DISABLED = 0,
+-	ORG_KDE_PLASMA_WINDOW_MANAGEMENT_SHOW_DESKTOP_ENABLED = 1,
+-};
+-#endif /* ORG_KDE_PLASMA_WINDOW_MANAGEMENT_SHOW_DESKTOP_ENUM */
+-
+-/**
+- * @ingroup iface_org_kde_plasma_window_management
+- * @struct org_kde_plasma_window_management_listener
+- */
+-struct org_kde_plasma_window_management_listener {
+-	/**
+-	 * notify the client when the show desktop mode is entered/left
+-	 *
+-	 * This event will be sent whenever the show desktop mode
+-	 * changes. E.g. when it is entered or left.
+-	 *
+-	 * On binding the interface the current state is sent.
+-	 * @param state new state
+-	 */
+-	void (*show_desktop_changed)(void *data,
+-				     struct org_kde_plasma_window_management *org_kde_plasma_window_management,
+-				     uint32_t state);
+-	/**
+-	 * notify the client that a window was mapped
+-	 *
+-	 * This event will be sent immediately after a window is mapped.
+-	 * @param id Deprecated: internal window Id
+-	 */
+-	void (*window)(void *data,
+-		       struct org_kde_plasma_window_management *org_kde_plasma_window_management,
+-		       uint32_t id);
+-	/**
+-	 * notify the client when stacking order changed
+-	 *
+-	 * This event will be sent when stacking order changed and on
+-	 * bind
+-	 * @param ids internal windows id array
+-	 * @since 11
+-	 */
+-	void (*stacking_order_changed)(void *data,
+-				       struct org_kde_plasma_window_management *org_kde_plasma_window_management,
+-				       struct wl_array *ids);
+-	/**
+-	 * notify the client when stacking order changed
+-	 *
+-	 * This event will be sent when stacking order changed and on
+-	 * bind
+-	 * @param uuids internal windows id ;-separated
+-	 * @since 12
+-	 */
+-	void (*stacking_order_uuid_changed)(void *data,
+-					    struct org_kde_plasma_window_management *org_kde_plasma_window_management,
+-					    const char *uuids);
+-	/**
+-	 * notify the client that a window was mapped
+-	 *
+-	 * This event will be sent immediately after a window is mapped.
+-	 * @param id Deprecated: internal window Id
+-	 * @param uuid internal window uuid
+-	 * @since 13
+-	 */
+-	void (*window_with_uuid)(void *data,
+-				 struct org_kde_plasma_window_management *org_kde_plasma_window_management,
+-				 uint32_t id,
+-				 const char *uuid);
+-};
+-
+-/**
+- * @ingroup iface_org_kde_plasma_window_management
+- */
+-static inline int
+-org_kde_plasma_window_management_add_listener(struct org_kde_plasma_window_management *org_kde_plasma_window_management,
+-					      const struct org_kde_plasma_window_management_listener *listener, void *data)
+-{
+-	return wl_proxy_add_listener((struct wl_proxy *) org_kde_plasma_window_management,
+-				     (void (**)(void)) listener, data);
+-}
+-
+-#define ORG_KDE_PLASMA_WINDOW_MANAGEMENT_SHOW_DESKTOP 0
+-#define ORG_KDE_PLASMA_WINDOW_MANAGEMENT_GET_WINDOW 1
+-#define ORG_KDE_PLASMA_WINDOW_MANAGEMENT_GET_WINDOW_BY_UUID 2
+-
+-/**
+- * @ingroup iface_org_kde_plasma_window_management
+- */
+-#define ORG_KDE_PLASMA_WINDOW_MANAGEMENT_SHOW_DESKTOP_CHANGED_SINCE_VERSION 1
+-/**
+- * @ingroup iface_org_kde_plasma_window_management
+- */
+-#define ORG_KDE_PLASMA_WINDOW_MANAGEMENT_WINDOW_SINCE_VERSION 1
+-/**
+- * @ingroup iface_org_kde_plasma_window_management
+- */
+-#define ORG_KDE_PLASMA_WINDOW_MANAGEMENT_STACKING_ORDER_CHANGED_SINCE_VERSION 11
+-/**
+- * @ingroup iface_org_kde_plasma_window_management
+- */
+-#define ORG_KDE_PLASMA_WINDOW_MANAGEMENT_STACKING_ORDER_UUID_CHANGED_SINCE_VERSION 12
+-/**
+- * @ingroup iface_org_kde_plasma_window_management
+- */
+-#define ORG_KDE_PLASMA_WINDOW_MANAGEMENT_WINDOW_WITH_UUID_SINCE_VERSION 13
+-
+-/**
+- * @ingroup iface_org_kde_plasma_window_management
+- */
+-#define ORG_KDE_PLASMA_WINDOW_MANAGEMENT_SHOW_DESKTOP_SINCE_VERSION 1
+-/**
+- * @ingroup iface_org_kde_plasma_window_management
+- */
+-#define ORG_KDE_PLASMA_WINDOW_MANAGEMENT_GET_WINDOW_SINCE_VERSION 1
+-/**
+- * @ingroup iface_org_kde_plasma_window_management
+- */
+-#define ORG_KDE_PLASMA_WINDOW_MANAGEMENT_GET_WINDOW_BY_UUID_SINCE_VERSION 12
+-
+-/** @ingroup iface_org_kde_plasma_window_management */
+-static inline void
+-org_kde_plasma_window_management_set_user_data(struct org_kde_plasma_window_management *org_kde_plasma_window_management, void *user_data)
+-{
+-	wl_proxy_set_user_data((struct wl_proxy *) org_kde_plasma_window_management, user_data);
+-}
+-
+-/** @ingroup iface_org_kde_plasma_window_management */
+-static inline void *
+-org_kde_plasma_window_management_get_user_data(struct org_kde_plasma_window_management *org_kde_plasma_window_management)
+-{
+-	return wl_proxy_get_user_data((struct wl_proxy *) org_kde_plasma_window_management);
+-}
+-
+-static inline uint32_t
+-org_kde_plasma_window_management_get_version(struct org_kde_plasma_window_management *org_kde_plasma_window_management)
+-{
+-	return wl_proxy_get_version((struct wl_proxy *) org_kde_plasma_window_management);
+-}
+-
+-/** @ingroup iface_org_kde_plasma_window_management */
+-static inline void
+-org_kde_plasma_window_management_destroy(struct org_kde_plasma_window_management *org_kde_plasma_window_management)
+-{
+-	wl_proxy_destroy((struct wl_proxy *) org_kde_plasma_window_management);
+-}
+-
+-/**
+- * @ingroup iface_org_kde_plasma_window_management
+- *
+- * Tell the compositor to show/hide the desktop.
+- */
+-static inline void
+-org_kde_plasma_window_management_show_desktop(struct org_kde_plasma_window_management *org_kde_plasma_window_management, uint32_t state)
+-{
+-	wl_proxy_marshal_flags((struct wl_proxy *) org_kde_plasma_window_management,
+-			 ORG_KDE_PLASMA_WINDOW_MANAGEMENT_SHOW_DESKTOP, NULL, wl_proxy_get_version((struct wl_proxy *) org_kde_plasma_window_management), 0, state);
+-}
+-
+-/**
+- * @ingroup iface_org_kde_plasma_window_management
+- * Deprecated: use get_window_by_uuid
+- */
+-static inline struct org_kde_plasma_window *
+-org_kde_plasma_window_management_get_window(struct org_kde_plasma_window_management *org_kde_plasma_window_management, uint32_t internal_window_id)
+-{
+-	struct wl_proxy *id;
+-
+-	id = wl_proxy_marshal_flags((struct wl_proxy *) org_kde_plasma_window_management,
+-			 ORG_KDE_PLASMA_WINDOW_MANAGEMENT_GET_WINDOW, &org_kde_plasma_window_interface, wl_proxy_get_version((struct wl_proxy *) org_kde_plasma_window_management), 0, NULL, internal_window_id);
+-
+-	return (struct org_kde_plasma_window *) id;
+-}
+-
+-/**
+- * @ingroup iface_org_kde_plasma_window_management
+- */
+-static inline struct org_kde_plasma_window *
+-org_kde_plasma_window_management_get_window_by_uuid(struct org_kde_plasma_window_management *org_kde_plasma_window_management, const char *internal_window_uuid)
+-{
+-	struct wl_proxy *id;
+-
+-	id = wl_proxy_marshal_flags((struct wl_proxy *) org_kde_plasma_window_management,
+-			 ORG_KDE_PLASMA_WINDOW_MANAGEMENT_GET_WINDOW_BY_UUID, &org_kde_plasma_window_interface, wl_proxy_get_version((struct wl_proxy *) org_kde_plasma_window_management), 0, NULL, internal_window_uuid);
+-
+-	return (struct org_kde_plasma_window *) id;
+-}
+-
+-/**
+- * @ingroup iface_org_kde_plasma_window
+- * @struct org_kde_plasma_window_listener
+- */
+-struct org_kde_plasma_window_listener {
+-	/**
+-	 * window title has been changed
+-	 *
+-	 * This event will be sent as soon as the window title is
+-	 * changed.
+-	 * @param title window title
+-	 */
+-	void (*title_changed)(void *data,
+-			      struct org_kde_plasma_window *org_kde_plasma_window,
+-			      const char *title);
+-	/**
+-	 * application identifier has been changed
+-	 *
+-	 * This event will be sent as soon as the application identifier
+-	 * is changed.
+-	 */
+-	void (*app_id_changed)(void *data,
+-			       struct org_kde_plasma_window *org_kde_plasma_window,
+-			       const char *app_id);
+-	/**
+-	 * window state has been changed
+-	 *
+-	 * This event will be sent as soon as the window state changes.
+-	 *
+-	 * Values for state argument are described by
+-	 * org_kde_plasma_window_management.state.
+-	 * @param flags bitfield of state flags
+-	 */
+-	void (*state_changed)(void *data,
+-			      struct org_kde_plasma_window *org_kde_plasma_window,
+-			      uint32_t flags);
+-	/**
+-	 * window was moved to another workspace
+-	 *
+-	 * DEPRECATED: use virtual_desktop_entered and
+-	 * virtual_desktop_left instead This event will be sent when a
+-	 * window is moved to another virtual desktop.
+-	 *
+-	 * It is not sent if it becomes visible on all virtual desktops
+-	 * though.
+-	 * @param number zero based virtual desktop number
+-	 */
+-	void (*virtual_desktop_changed)(void *data,
+-					struct org_kde_plasma_window *org_kde_plasma_window,
+-					int32_t number);
+-	/**
+-	 * window's icon name changed
+-	 *
+-	 * This event will be sent whenever the themed icon name changes.
+-	 * May be null.
+-	 * @param name the new themed icon name
+-	 */
+-	void (*themed_icon_name_changed)(void *data,
+-					 struct org_kde_plasma_window *org_kde_plasma_window,
+-					 const char *name);
+-	/**
+-	 * window's surface was unmapped
+-	 *
+-	 * This event will be sent immediately after the window is closed
+-	 * and its surface is unmapped.
+-	 */
+-	void (*unmapped)(void *data,
+-			 struct org_kde_plasma_window *org_kde_plasma_window);
+-	/**
+-	 * All initial known state is submitted
+-	 *
+-	 * This event will be sent immediately after all initial state
+-	 * been sent to the client. If the Plasma window is already
+-	 * unmapped, the unmapped event will be sent before the
+-	 * initial_state event.
+-	 * @since 4
+-	 */
+-	void (*initial_state)(void *data,
+-			      struct org_kde_plasma_window *org_kde_plasma_window);
+-	/**
+-	 * The parent window changed
+-	 *
+-	 * This event will be sent whenever the parent window of this
+-	 * org_kde_plasma_window changes. The passed parent is another
+-	 * org_kde_plasma_window and this org_kde_plasma_window is a
+-	 * transient window to the parent window. If the parent argument is
+-	 * null, this org_kde_plasma_window does not have a parent window.
+-	 * @param parent The parent window
+-	 * @since 5
+-	 */
+-	void (*parent_window)(void *data,
+-			      struct org_kde_plasma_window *org_kde_plasma_window,
+-			      struct org_kde_plasma_window *parent);
+-	/**
+-	 * The geometry of this window in absolute coordinates
+-	 *
+-	 * This event will be sent whenever the window geometry of this
+-	 * org_kde_plasma_window changes. The coordinates are in absolute
+-	 * coordinates of the windowing system.
+-	 * @param x x position of the org_kde_plasma_window
+-	 * @param y y position of the org_kde_plasma_window
+-	 * @param width width of the org_kde_plasma_window
+-	 * @param height height of the org_kde_plasma_window
+-	 * @since 6
+-	 */
+-	void (*geometry)(void *data,
+-			 struct org_kde_plasma_window *org_kde_plasma_window,
+-			 int32_t x,
+-			 int32_t y,
+-			 uint32_t width,
+-			 uint32_t height);
+-	/**
+-	 * The icon of the window changed
+-	 *
+-	 * This event will be sent whenever the icon of the window
+-	 * changes, but there is no themed icon name. Common examples are
+-	 * Xwayland windows which have a pixmap based icon.
+-	 *
+-	 * The client can request the icon using get_icon.
+-	 * @since 7
+-	 */
+-	void (*icon_changed)(void *data,
+-			     struct org_kde_plasma_window *org_kde_plasma_window);
+-	/**
+-	 * process id of application owning the window has changed
+-	 *
+-	 * This event will be sent when the compositor has set the
+-	 * process id this window belongs to. This should be set once
+-	 * before the initial_state is sent.
+-	 * @param pid process id
+-	 */
+-	void (*pid_changed)(void *data,
+-			    struct org_kde_plasma_window *org_kde_plasma_window,
+-			    uint32_t pid);
+-	/**
+-	 * the window entered a new virtual desktop
+-	 *
+-	 * This event will be sent when the window has entered a new
+-	 * virtual desktop. The window can be on more than one desktop, or
+-	 * none: then is considered on all of them.
+-	 * @param id desktop id
+-	 * @since 8
+-	 */
+-	void (*virtual_desktop_entered)(void *data,
+-					struct org_kde_plasma_window *org_kde_plasma_window,
+-					const char *id);
+-	/**
+-	 * the window left a virtual desktop
+-	 *
+-	 * This event will be sent when the window left a virtual
+-	 * desktop. If the window leaves all desktops, it can be considered
+-	 * on all. If the window gets manually added on all desktops, the
+-	 * server has to send virtual_desktop_left for every previous
+-	 * desktop it was in for the window to be really considered on all
+-	 * desktops.
+-	 * @param is desktop id
+-	 * @since 8
+-	 */
+-	void (*virtual_desktop_left)(void *data,
+-				     struct org_kde_plasma_window *org_kde_plasma_window,
+-				     const char *is);
+-	/**
+-	 * notify the client that the current appmenu changed
+-	 *
+-	 * This event will be sent after the application menu for the
+-	 * window has changed.
+-	 * @since 10
+-	 */
+-	void (*application_menu)(void *data,
+-				 struct org_kde_plasma_window *org_kde_plasma_window,
+-				 const char *service_name,
+-				 const char *object_path);
+-	/**
+-	 * the window entered an activity
+-	 *
+-	 * This event will be sent when the window has entered an
+-	 * activity. The window can be on more than one activity, or none:
+-	 * then is considered on all of them.
+-	 * @param id activity id
+-	 * @since 14
+-	 */
+-	void (*activity_entered)(void *data,
+-				 struct org_kde_plasma_window *org_kde_plasma_window,
+-				 const char *id);
+-	/**
+-	 * the window left an activity
+-	 *
+-	 * This event will be sent when the window left an activity. If
+-	 * the window leaves all activities, it will be considered on all.
+-	 * If the window gets manually added on all activities, the server
+-	 * has to send activity_left for every previous activity it was in
+-	 * for the window to be really considered on all activities.
+-	 * @param id activity id
+-	 * @since 14
+-	 */
+-	void (*activity_left)(void *data,
+-			      struct org_kde_plasma_window *org_kde_plasma_window,
+-			      const char *id);
+-	/**
+-	 * X11 resource name has changed
+-	 *
+-	 * This event will be sent when the X11 resource name of the
+-	 * window has changed. This is only set for XWayland windows.
+-	 * @param resource_name resource name
+-	 * @since 16
+-	 */
+-	void (*resource_name_changed)(void *data,
+-				      struct org_kde_plasma_window *org_kde_plasma_window,
+-				      const char *resource_name);
+-};
+-
+-/**
+- * @ingroup iface_org_kde_plasma_window
+- */
+-static inline int
+-org_kde_plasma_window_add_listener(struct org_kde_plasma_window *org_kde_plasma_window,
+-				   const struct org_kde_plasma_window_listener *listener, void *data)
+-{
+-	return wl_proxy_add_listener((struct wl_proxy *) org_kde_plasma_window,
+-				     (void (**)(void)) listener, data);
+-}
+-
+-#define ORG_KDE_PLASMA_WINDOW_SET_STATE 0
+-#define ORG_KDE_PLASMA_WINDOW_SET_VIRTUAL_DESKTOP 1
+-#define ORG_KDE_PLASMA_WINDOW_SET_MINIMIZED_GEOMETRY 2
+-#define ORG_KDE_PLASMA_WINDOW_UNSET_MINIMIZED_GEOMETRY 3
+-#define ORG_KDE_PLASMA_WINDOW_CLOSE 4
+-#define ORG_KDE_PLASMA_WINDOW_REQUEST_MOVE 5
+-#define ORG_KDE_PLASMA_WINDOW_REQUEST_RESIZE 6
+-#define ORG_KDE_PLASMA_WINDOW_DESTROY 7
+-#define ORG_KDE_PLASMA_WINDOW_GET_ICON 8
+-#define ORG_KDE_PLASMA_WINDOW_REQUEST_ENTER_VIRTUAL_DESKTOP 9
+-#define ORG_KDE_PLASMA_WINDOW_REQUEST_ENTER_NEW_VIRTUAL_DESKTOP 10
+-#define ORG_KDE_PLASMA_WINDOW_REQUEST_LEAVE_VIRTUAL_DESKTOP 11
+-#define ORG_KDE_PLASMA_WINDOW_REQUEST_ENTER_ACTIVITY 12
+-#define ORG_KDE_PLASMA_WINDOW_REQUEST_LEAVE_ACTIVITY 13
+-#define ORG_KDE_PLASMA_WINDOW_SEND_TO_OUTPUT 14
+-
+-/**
+- * @ingroup iface_org_kde_plasma_window
+- */
+-#define ORG_KDE_PLASMA_WINDOW_TITLE_CHANGED_SINCE_VERSION 1
+-/**
+- * @ingroup iface_org_kde_plasma_window
+- */
+-#define ORG_KDE_PLASMA_WINDOW_APP_ID_CHANGED_SINCE_VERSION 1
+-/**
+- * @ingroup iface_org_kde_plasma_window
+- */
+-#define ORG_KDE_PLASMA_WINDOW_STATE_CHANGED_SINCE_VERSION 1
+-/**
+- * @ingroup iface_org_kde_plasma_window
+- */
+-#define ORG_KDE_PLASMA_WINDOW_VIRTUAL_DESKTOP_CHANGED_SINCE_VERSION 1
+-/**
+- * @ingroup iface_org_kde_plasma_window
+- */
+-#define ORG_KDE_PLASMA_WINDOW_THEMED_ICON_NAME_CHANGED_SINCE_VERSION 1
+-/**
+- * @ingroup iface_org_kde_plasma_window
+- */
+-#define ORG_KDE_PLASMA_WINDOW_UNMAPPED_SINCE_VERSION 1
+-/**
+- * @ingroup iface_org_kde_plasma_window
+- */
+-#define ORG_KDE_PLASMA_WINDOW_INITIAL_STATE_SINCE_VERSION 4
+-/**
+- * @ingroup iface_org_kde_plasma_window
+- */
+-#define ORG_KDE_PLASMA_WINDOW_PARENT_WINDOW_SINCE_VERSION 5
+-/**
+- * @ingroup iface_org_kde_plasma_window
+- */
+-#define ORG_KDE_PLASMA_WINDOW_GEOMETRY_SINCE_VERSION 6
+-/**
+- * @ingroup iface_org_kde_plasma_window
+- */
+-#define ORG_KDE_PLASMA_WINDOW_ICON_CHANGED_SINCE_VERSION 7
+-/**
+- * @ingroup iface_org_kde_plasma_window
+- */
+-#define ORG_KDE_PLASMA_WINDOW_PID_CHANGED_SINCE_VERSION 1
+-/**
+- * @ingroup iface_org_kde_plasma_window
+- */
+-#define ORG_KDE_PLASMA_WINDOW_VIRTUAL_DESKTOP_ENTERED_SINCE_VERSION 8
+-/**
+- * @ingroup iface_org_kde_plasma_window
+- */
+-#define ORG_KDE_PLASMA_WINDOW_VIRTUAL_DESKTOP_LEFT_SINCE_VERSION 8
+-/**
+- * @ingroup iface_org_kde_plasma_window
+- */
+-#define ORG_KDE_PLASMA_WINDOW_APPLICATION_MENU_SINCE_VERSION 10
+-/**
+- * @ingroup iface_org_kde_plasma_window
+- */
+-#define ORG_KDE_PLASMA_WINDOW_ACTIVITY_ENTERED_SINCE_VERSION 14
+-/**
+- * @ingroup iface_org_kde_plasma_window
+- */
+-#define ORG_KDE_PLASMA_WINDOW_ACTIVITY_LEFT_SINCE_VERSION 14
+-/**
+- * @ingroup iface_org_kde_plasma_window
+- */
+-#define ORG_KDE_PLASMA_WINDOW_RESOURCE_NAME_CHANGED_SINCE_VERSION 16
+-
+-/**
+- * @ingroup iface_org_kde_plasma_window
+- */
+-#define ORG_KDE_PLASMA_WINDOW_SET_STATE_SINCE_VERSION 1
+-/**
+- * @ingroup iface_org_kde_plasma_window
+- */
+-#define ORG_KDE_PLASMA_WINDOW_SET_VIRTUAL_DESKTOP_SINCE_VERSION 1
+-/**
+- * @ingroup iface_org_kde_plasma_window
+- */
+-#define ORG_KDE_PLASMA_WINDOW_SET_MINIMIZED_GEOMETRY_SINCE_VERSION 1
+-/**
+- * @ingroup iface_org_kde_plasma_window
+- */
+-#define ORG_KDE_PLASMA_WINDOW_UNSET_MINIMIZED_GEOMETRY_SINCE_VERSION 1
+-/**
+- * @ingroup iface_org_kde_plasma_window
+- */
+-#define ORG_KDE_PLASMA_WINDOW_CLOSE_SINCE_VERSION 1
+-/**
+- * @ingroup iface_org_kde_plasma_window
+- */
+-#define ORG_KDE_PLASMA_WINDOW_REQUEST_MOVE_SINCE_VERSION 3
+-/**
+- * @ingroup iface_org_kde_plasma_window
+- */
+-#define ORG_KDE_PLASMA_WINDOW_REQUEST_RESIZE_SINCE_VERSION 3
+-/**
+- * @ingroup iface_org_kde_plasma_window
+- */
+-#define ORG_KDE_PLASMA_WINDOW_DESTROY_SINCE_VERSION 4
+-/**
+- * @ingroup iface_org_kde_plasma_window
+- */
+-#define ORG_KDE_PLASMA_WINDOW_GET_ICON_SINCE_VERSION 7
+-/**
+- * @ingroup iface_org_kde_plasma_window
+- */
+-#define ORG_KDE_PLASMA_WINDOW_REQUEST_ENTER_VIRTUAL_DESKTOP_SINCE_VERSION 8
+-/**
+- * @ingroup iface_org_kde_plasma_window
+- */
+-#define ORG_KDE_PLASMA_WINDOW_REQUEST_ENTER_NEW_VIRTUAL_DESKTOP_SINCE_VERSION 8
+-/**
+- * @ingroup iface_org_kde_plasma_window
+- */
+-#define ORG_KDE_PLASMA_WINDOW_REQUEST_LEAVE_VIRTUAL_DESKTOP_SINCE_VERSION 8
+-/**
+- * @ingroup iface_org_kde_plasma_window
+- */
+-#define ORG_KDE_PLASMA_WINDOW_REQUEST_ENTER_ACTIVITY_SINCE_VERSION 14
+-/**
+- * @ingroup iface_org_kde_plasma_window
+- */
+-#define ORG_KDE_PLASMA_WINDOW_REQUEST_LEAVE_ACTIVITY_SINCE_VERSION 14
+-/**
+- * @ingroup iface_org_kde_plasma_window
+- */
+-#define ORG_KDE_PLASMA_WINDOW_SEND_TO_OUTPUT_SINCE_VERSION 15
+-
+-/** @ingroup iface_org_kde_plasma_window */
+-static inline void
+-org_kde_plasma_window_set_user_data(struct org_kde_plasma_window *org_kde_plasma_window, void *user_data)
+-{
+-	wl_proxy_set_user_data((struct wl_proxy *) org_kde_plasma_window, user_data);
+-}
+-
+-/** @ingroup iface_org_kde_plasma_window */
+-static inline void *
+-org_kde_plasma_window_get_user_data(struct org_kde_plasma_window *org_kde_plasma_window)
+-{
+-	return wl_proxy_get_user_data((struct wl_proxy *) org_kde_plasma_window);
+-}
+-
+-static inline uint32_t
+-org_kde_plasma_window_get_version(struct org_kde_plasma_window *org_kde_plasma_window)
+-{
+-	return wl_proxy_get_version((struct wl_proxy *) org_kde_plasma_window);
+-}
+-
+-/**
+- * @ingroup iface_org_kde_plasma_window
+- *
+- * Set window state.
+- *
+- * Values for state argument are described by org_kde_plasma_window_management.state
+- * and can be used together in a bitfield. The flags bitfield describes which flags are
+- * supposed to be set, the state bitfield the value for the set flags
+- */
+-static inline void
+-org_kde_plasma_window_set_state(struct org_kde_plasma_window *org_kde_plasma_window, uint32_t flags, uint32_t state)
+-{
+-	wl_proxy_marshal_flags((struct wl_proxy *) org_kde_plasma_window,
+-			 ORG_KDE_PLASMA_WINDOW_SET_STATE, NULL, wl_proxy_get_version((struct wl_proxy *) org_kde_plasma_window), 0, flags, state);
+-}
+-
+-/**
+- * @ingroup iface_org_kde_plasma_window
+- *
+- * Deprecated: use enter_virtual_desktop
+- * Maps the window to a different virtual desktop.
+- *
+- * To show the window on all virtual desktops, call the
+- * org_kde_plasma_window.set_state request and specify a on_all_desktops
+- * state in the bitfield.
+- */
+-static inline void
+-org_kde_plasma_window_set_virtual_desktop(struct org_kde_plasma_window *org_kde_plasma_window, uint32_t number)
+-{
+-	wl_proxy_marshal_flags((struct wl_proxy *) org_kde_plasma_window,
+-			 ORG_KDE_PLASMA_WINDOW_SET_VIRTUAL_DESKTOP, NULL, wl_proxy_get_version((struct wl_proxy *) org_kde_plasma_window), 0, number);
+-}
+-
+-/**
+- * @ingroup iface_org_kde_plasma_window
+- *
+- * Sets the geometry of the taskbar entry for this window.
+- * The geometry is relative to a panel in particular.
+- */
+-static inline void
+-org_kde_plasma_window_set_minimized_geometry(struct org_kde_plasma_window *org_kde_plasma_window, struct wl_surface *panel, uint32_t x, uint32_t y, uint32_t width, uint32_t height)
+-{
+-	wl_proxy_marshal_flags((struct wl_proxy *) org_kde_plasma_window,
+-			 ORG_KDE_PLASMA_WINDOW_SET_MINIMIZED_GEOMETRY, NULL, wl_proxy_get_version((struct wl_proxy *) org_kde_plasma_window), 0, panel, x, y, width, height);
+-}
+-
+-/**
+- * @ingroup iface_org_kde_plasma_window
+- *
+- * Remove the task geometry information for a particular panel.
+- */
+-static inline void
+-org_kde_plasma_window_unset_minimized_geometry(struct org_kde_plasma_window *org_kde_plasma_window, struct wl_surface *panel)
+-{
+-	wl_proxy_marshal_flags((struct wl_proxy *) org_kde_plasma_window,
+-			 ORG_KDE_PLASMA_WINDOW_UNSET_MINIMIZED_GEOMETRY, NULL, wl_proxy_get_version((struct wl_proxy *) org_kde_plasma_window), 0, panel);
+-}
+-
+-/**
+- * @ingroup iface_org_kde_plasma_window
+- *
+- * Close this window.
+- */
+-static inline void
+-org_kde_plasma_window_close(struct org_kde_plasma_window *org_kde_plasma_window)
+-{
+-	wl_proxy_marshal_flags((struct wl_proxy *) org_kde_plasma_window,
+-			 ORG_KDE_PLASMA_WINDOW_CLOSE, NULL, wl_proxy_get_version((struct wl_proxy *) org_kde_plasma_window), 0);
+-}
+-
+-/**
+- * @ingroup iface_org_kde_plasma_window
+- *
+- * Request an interactive move for this window.
+- */
+-static inline void
+-org_kde_plasma_window_request_move(struct org_kde_plasma_window *org_kde_plasma_window)
+-{
+-	wl_proxy_marshal_flags((struct wl_proxy *) org_kde_plasma_window,
+-			 ORG_KDE_PLASMA_WINDOW_REQUEST_MOVE, NULL, wl_proxy_get_version((struct wl_proxy *) org_kde_plasma_window), 0);
+-}
+-
+-/**
+- * @ingroup iface_org_kde_plasma_window
+- *
+- * Request an interactive resize for this window.
+- */
+-static inline void
+-org_kde_plasma_window_request_resize(struct org_kde_plasma_window *org_kde_plasma_window)
+-{
+-	wl_proxy_marshal_flags((struct wl_proxy *) org_kde_plasma_window,
+-			 ORG_KDE_PLASMA_WINDOW_REQUEST_RESIZE, NULL, wl_proxy_get_version((struct wl_proxy *) org_kde_plasma_window), 0);
+-}
+-
+-/**
+- * @ingroup iface_org_kde_plasma_window
+- *
+- * Removes the resource bound for this org_kde_plasma_window.
+- */
+-static inline void
+-org_kde_plasma_window_destroy(struct org_kde_plasma_window *org_kde_plasma_window)
+-{
+-	wl_proxy_marshal_flags((struct wl_proxy *) org_kde_plasma_window,
+-			 ORG_KDE_PLASMA_WINDOW_DESTROY, NULL, wl_proxy_get_version((struct wl_proxy *) org_kde_plasma_window), WL_MARSHAL_FLAG_DESTROY);
+-}
+-
+-/**
+- * @ingroup iface_org_kde_plasma_window
+- *
+- * The compositor will write the window icon into the provided file descriptor.
+- * The data is a serialized QIcon with QDataStream.
+- */
+-static inline void
+-org_kde_plasma_window_get_icon(struct org_kde_plasma_window *org_kde_plasma_window, int32_t fd)
+-{
+-	wl_proxy_marshal_flags((struct wl_proxy *) org_kde_plasma_window,
+-			 ORG_KDE_PLASMA_WINDOW_GET_ICON, NULL, wl_proxy_get_version((struct wl_proxy *) org_kde_plasma_window), 0, fd);
+-}
+-
+-/**
+- * @ingroup iface_org_kde_plasma_window
+- *
+- * Make the window enter a virtual desktop. A window can enter more
+- * than one virtual desktop. if the id is empty or invalid, no action will be performed.
+- */
+-static inline void
+-org_kde_plasma_window_request_enter_virtual_desktop(struct org_kde_plasma_window *org_kde_plasma_window, const char *id)
+-{
+-	wl_proxy_marshal_flags((struct wl_proxy *) org_kde_plasma_window,
+-			 ORG_KDE_PLASMA_WINDOW_REQUEST_ENTER_VIRTUAL_DESKTOP, NULL, wl_proxy_get_version((struct wl_proxy *) org_kde_plasma_window), 0, id);
+-}
+-
+-/**
+- * @ingroup iface_org_kde_plasma_window
+- * RFC: do this with an empty id to request_enter_virtual_desktop?
+- * Make the window enter a new virtual desktop. If the server consents the request,
+- * it will create a new virtual desktop and assign the window to it.
+- */
+-static inline void
+-org_kde_plasma_window_request_enter_new_virtual_desktop(struct org_kde_plasma_window *org_kde_plasma_window)
+-{
+-	wl_proxy_marshal_flags((struct wl_proxy *) org_kde_plasma_window,
+-			 ORG_KDE_PLASMA_WINDOW_REQUEST_ENTER_NEW_VIRTUAL_DESKTOP, NULL, wl_proxy_get_version((struct wl_proxy *) org_kde_plasma_window), 0);
+-}
+-
+-/**
+- * @ingroup iface_org_kde_plasma_window
+- *
+- * Make the window exit a virtual desktop. If it exits all desktops it will be considered on all of them.
+- */
+-static inline void
+-org_kde_plasma_window_request_leave_virtual_desktop(struct org_kde_plasma_window *org_kde_plasma_window, const char *id)
+-{
+-	wl_proxy_marshal_flags((struct wl_proxy *) org_kde_plasma_window,
+-			 ORG_KDE_PLASMA_WINDOW_REQUEST_LEAVE_VIRTUAL_DESKTOP, NULL, wl_proxy_get_version((struct wl_proxy *) org_kde_plasma_window), 0, id);
+-}
+-
+-/**
+- * @ingroup iface_org_kde_plasma_window
+- *
+- * Make the window enter an activity. A window can enter more activity. If the id is empty or invalid, no action will be performed.
+- */
+-static inline void
+-org_kde_plasma_window_request_enter_activity(struct org_kde_plasma_window *org_kde_plasma_window, const char *id)
+-{
+-	wl_proxy_marshal_flags((struct wl_proxy *) org_kde_plasma_window,
+-			 ORG_KDE_PLASMA_WINDOW_REQUEST_ENTER_ACTIVITY, NULL, wl_proxy_get_version((struct wl_proxy *) org_kde_plasma_window), 0, id);
+-}
+-
+-/**
+- * @ingroup iface_org_kde_plasma_window
+- *
+- * Make the window exit a an activity. If it exits all activities it will be considered on all of them.
+- */
+-static inline void
+-org_kde_plasma_window_request_leave_activity(struct org_kde_plasma_window *org_kde_plasma_window, const char *id)
+-{
+-	wl_proxy_marshal_flags((struct wl_proxy *) org_kde_plasma_window,
+-			 ORG_KDE_PLASMA_WINDOW_REQUEST_LEAVE_ACTIVITY, NULL, wl_proxy_get_version((struct wl_proxy *) org_kde_plasma_window), 0, id);
+-}
+-
+-/**
+- * @ingroup iface_org_kde_plasma_window
+- *
+- * Requests this window to be displayed in a specific output.
+- */
+-static inline void
+-org_kde_plasma_window_send_to_output(struct org_kde_plasma_window *org_kde_plasma_window, struct wl_output *output)
+-{
+-	wl_proxy_marshal_flags((struct wl_proxy *) org_kde_plasma_window,
+-			 ORG_KDE_PLASMA_WINDOW_SEND_TO_OUTPUT, NULL, wl_proxy_get_version((struct wl_proxy *) org_kde_plasma_window), 0, output);
+-}
+-
+-/**
+- * @ingroup iface_org_kde_plasma_activation_feedback
+- * @struct org_kde_plasma_activation_feedback_listener
+- */
+-struct org_kde_plasma_activation_feedback_listener {
+-	/**
+-	 * notify that an app is starting
+-	 *
+-	 * Will be issued when an app is set to be activated. It offers
+-	 * an instance of org_kde_plasma_activation that will tell us the
+-	 * app_id and the extent of the activation.
+-	 */
+-	void (*activation)(void *data,
+-			   struct org_kde_plasma_activation_feedback *org_kde_plasma_activation_feedback,
+-			   struct org_kde_plasma_activation *id);
+-};
+-
+-/**
+- * @ingroup iface_org_kde_plasma_activation_feedback
+- */
+-static inline int
+-org_kde_plasma_activation_feedback_add_listener(struct org_kde_plasma_activation_feedback *org_kde_plasma_activation_feedback,
+-						const struct org_kde_plasma_activation_feedback_listener *listener, void *data)
+-{
+-	return wl_proxy_add_listener((struct wl_proxy *) org_kde_plasma_activation_feedback,
+-				     (void (**)(void)) listener, data);
+-}
+-
+-#define ORG_KDE_PLASMA_ACTIVATION_FEEDBACK_DESTROY 0
+-
+-/**
+- * @ingroup iface_org_kde_plasma_activation_feedback
+- */
+-#define ORG_KDE_PLASMA_ACTIVATION_FEEDBACK_ACTIVATION_SINCE_VERSION 1
+-
+-/**
+- * @ingroup iface_org_kde_plasma_activation_feedback
+- */
+-#define ORG_KDE_PLASMA_ACTIVATION_FEEDBACK_DESTROY_SINCE_VERSION 1
+-
+-/** @ingroup iface_org_kde_plasma_activation_feedback */
+-static inline void
+-org_kde_plasma_activation_feedback_set_user_data(struct org_kde_plasma_activation_feedback *org_kde_plasma_activation_feedback, void *user_data)
+-{
+-	wl_proxy_set_user_data((struct wl_proxy *) org_kde_plasma_activation_feedback, user_data);
+-}
+-
+-/** @ingroup iface_org_kde_plasma_activation_feedback */
+-static inline void *
+-org_kde_plasma_activation_feedback_get_user_data(struct org_kde_plasma_activation_feedback *org_kde_plasma_activation_feedback)
+-{
+-	return wl_proxy_get_user_data((struct wl_proxy *) org_kde_plasma_activation_feedback);
+-}
+-
+-static inline uint32_t
+-org_kde_plasma_activation_feedback_get_version(struct org_kde_plasma_activation_feedback *org_kde_plasma_activation_feedback)
+-{
+-	return wl_proxy_get_version((struct wl_proxy *) org_kde_plasma_activation_feedback);
+-}
+-
+-/**
+- * @ingroup iface_org_kde_plasma_activation_feedback
+- *
+- * Destroy the activation manager object. The activation objects introduced
+- * by this manager object will be unaffected.
+- */
+-static inline void
+-org_kde_plasma_activation_feedback_destroy(struct org_kde_plasma_activation_feedback *org_kde_plasma_activation_feedback)
+-{
+-	wl_proxy_marshal_flags((struct wl_proxy *) org_kde_plasma_activation_feedback,
+-			 ORG_KDE_PLASMA_ACTIVATION_FEEDBACK_DESTROY, NULL, wl_proxy_get_version((struct wl_proxy *) org_kde_plasma_activation_feedback), WL_MARSHAL_FLAG_DESTROY);
+-}
+-
+-/**
+- * @ingroup iface_org_kde_plasma_activation
+- * @struct org_kde_plasma_activation_listener
+- */
+-struct org_kde_plasma_activation_listener {
+-	/**
+-	 * Offers the app_id
+-	 *
+-	 * 
+-	 * @param app_id application id, as described in xdg_activation_v1
+-	 */
+-	void (*app_id)(void *data,
+-		       struct org_kde_plasma_activation *org_kde_plasma_activation,
+-		       const char *app_id);
+-	/**
+-	 * Notifies about activation finished, either by activation or because it got invalidated
+-	 *
+-	 * 
+-	 */
+-	void (*finished)(void *data,
+-			 struct org_kde_plasma_activation *org_kde_plasma_activation);
+-};
+-
+-/**
+- * @ingroup iface_org_kde_plasma_activation
+- */
+-static inline int
+-org_kde_plasma_activation_add_listener(struct org_kde_plasma_activation *org_kde_plasma_activation,
+-				       const struct org_kde_plasma_activation_listener *listener, void *data)
+-{
+-	return wl_proxy_add_listener((struct wl_proxy *) org_kde_plasma_activation,
+-				     (void (**)(void)) listener, data);
+-}
+-
+-#define ORG_KDE_PLASMA_ACTIVATION_DESTROY 0
+-
+-/**
+- * @ingroup iface_org_kde_plasma_activation
+- */
+-#define ORG_KDE_PLASMA_ACTIVATION_APP_ID_SINCE_VERSION 1
+-/**
+- * @ingroup iface_org_kde_plasma_activation
+- */
+-#define ORG_KDE_PLASMA_ACTIVATION_FINISHED_SINCE_VERSION 1
+-
+-/**
+- * @ingroup iface_org_kde_plasma_activation
+- */
+-#define ORG_KDE_PLASMA_ACTIVATION_DESTROY_SINCE_VERSION 1
+-
+-/** @ingroup iface_org_kde_plasma_activation */
+-static inline void
+-org_kde_plasma_activation_set_user_data(struct org_kde_plasma_activation *org_kde_plasma_activation, void *user_data)
+-{
+-	wl_proxy_set_user_data((struct wl_proxy *) org_kde_plasma_activation, user_data);
+-}
+-
+-/** @ingroup iface_org_kde_plasma_activation */
+-static inline void *
+-org_kde_plasma_activation_get_user_data(struct org_kde_plasma_activation *org_kde_plasma_activation)
+-{
+-	return wl_proxy_get_user_data((struct wl_proxy *) org_kde_plasma_activation);
+-}
+-
+-static inline uint32_t
+-org_kde_plasma_activation_get_version(struct org_kde_plasma_activation *org_kde_plasma_activation)
+-{
+-	return wl_proxy_get_version((struct wl_proxy *) org_kde_plasma_activation);
+-}
+-
+-/**
+- * @ingroup iface_org_kde_plasma_activation
+- *
+- * Notify the compositor that the org_kde_plasma_activation object will no
+- * longer be used.
+- */
+-static inline void
+-org_kde_plasma_activation_destroy(struct org_kde_plasma_activation *org_kde_plasma_activation)
+-{
+-	wl_proxy_marshal_flags((struct wl_proxy *) org_kde_plasma_activation,
+-			 ORG_KDE_PLASMA_ACTIVATION_DESTROY, NULL, wl_proxy_get_version((struct wl_proxy *) org_kde_plasma_activation), WL_MARSHAL_FLAG_DESTROY);
+-}
+-
+-#ifdef  __cplusplus
+-}
+-#endif
+-
+-#endif
+diff --git a/kysdk-waylandhelper/src/windowmanager/wayland-plasma-window-management-protocol.c b/kysdk-waylandhelper/src/windowmanager/wayland-plasma-window-management-protocol.c
+deleted file mode 100644
+index 2d693a6..0000000
+--- a/kysdk-waylandhelper/src/windowmanager/wayland-plasma-window-management-protocol.c
++++ /dev/null
+@@ -1,130 +0,0 @@
+-/* Generated by wayland-scanner 1.22.0 */
+-
+-/*
+- * SPDX-FileCopyrightText: 2013-2014 Pier Luigi Fiorini
+- *
+- * SPDX-License-Identifier: LGPL-2.1-or-later
+- */
+-
+-#include <stdlib.h>
+-#include <stdint.h>
+-#include "wayland-util.h"
+-
+-extern const struct wl_interface org_kde_plasma_activation_interface;
+-extern const struct wl_interface org_kde_plasma_window_interface;
+-extern const struct wl_interface wl_output_interface;
+-extern const struct wl_interface wl_surface_interface;
+-
+-static const struct wl_interface *plasma_window_management_types[] = {
+-	NULL,
+-	NULL,
+-	NULL,
+-	NULL,
+-	&org_kde_plasma_window_interface,
+-	NULL,
+-	&org_kde_plasma_window_interface,
+-	NULL,
+-	&wl_surface_interface,
+-	NULL,
+-	NULL,
+-	NULL,
+-	NULL,
+-	&wl_surface_interface,
+-	&wl_output_interface,
+-	&org_kde_plasma_window_interface,
+-	&org_kde_plasma_activation_interface,
+-};
+-
+-static const struct wl_message org_kde_plasma_window_management_requests[] = {
+-	{ "show_desktop", "u", plasma_window_management_types + 0 },
+-	{ "get_window", "nu", plasma_window_management_types + 4 },
+-	{ "get_window_by_uuid", "12ns", plasma_window_management_types + 6 },
+-};
+-
+-static const struct wl_message org_kde_plasma_window_management_events[] = {
+-	{ "show_desktop_changed", "u", plasma_window_management_types + 0 },
+-	{ "window", "u", plasma_window_management_types + 0 },
+-	{ "stacking_order_changed", "11a", plasma_window_management_types + 0 },
+-	{ "stacking_order_uuid_changed", "12s", plasma_window_management_types + 0 },
+-	{ "window_with_uuid", "13us", plasma_window_management_types + 0 },
+-};
+-
+-WL_EXPORT const struct wl_interface org_kde_plasma_window_management_interface = {
+-	"org_kde_plasma_window_management", 16,
+-	3, org_kde_plasma_window_management_requests,
+-	5, org_kde_plasma_window_management_events,
+-};
+-
+-static const struct wl_message org_kde_plasma_window_requests[] = {
+-	{ "set_state", "uu", plasma_window_management_types + 0 },
+-	{ "set_virtual_desktop", "u", plasma_window_management_types + 0 },
+-	{ "set_minimized_geometry", "ouuuu", plasma_window_management_types + 8 },
+-	{ "unset_minimized_geometry", "o", plasma_window_management_types + 13 },
+-	{ "close", "", plasma_window_management_types + 0 },
+-	{ "request_move", "3", plasma_window_management_types + 0 },
+-	{ "request_resize", "3", plasma_window_management_types + 0 },
+-	{ "destroy", "4", plasma_window_management_types + 0 },
+-	{ "get_icon", "7h", plasma_window_management_types + 0 },
+-	{ "request_enter_virtual_desktop", "8s", plasma_window_management_types + 0 },
+-	{ "request_enter_new_virtual_desktop", "8", plasma_window_management_types + 0 },
+-	{ "request_leave_virtual_desktop", "8s", plasma_window_management_types + 0 },
+-	{ "request_enter_activity", "14s", plasma_window_management_types + 0 },
+-	{ "request_leave_activity", "14s", plasma_window_management_types + 0 },
+-	{ "send_to_output", "15o", plasma_window_management_types + 14 },
+-};
+-
+-static const struct wl_message org_kde_plasma_window_events[] = {
+-	{ "title_changed", "s", plasma_window_management_types + 0 },
+-	{ "app_id_changed", "s", plasma_window_management_types + 0 },
+-	{ "state_changed", "u", plasma_window_management_types + 0 },
+-	{ "virtual_desktop_changed", "i", plasma_window_management_types + 0 },
+-	{ "themed_icon_name_changed", "s", plasma_window_management_types + 0 },
+-	{ "unmapped", "", plasma_window_management_types + 0 },
+-	{ "initial_state", "4", plasma_window_management_types + 0 },
+-	{ "parent_window", "5?o", plasma_window_management_types + 15 },
+-	{ "geometry", "6iiuu", plasma_window_management_types + 0 },
+-	{ "icon_changed", "7", plasma_window_management_types + 0 },
+-	{ "pid_changed", "u", plasma_window_management_types + 0 },
+-	{ "virtual_desktop_entered", "8s", plasma_window_management_types + 0 },
+-	{ "virtual_desktop_left", "8s", plasma_window_management_types + 0 },
+-	{ "application_menu", "10ss", plasma_window_management_types + 0 },
+-	{ "activity_entered", "14s", plasma_window_management_types + 0 },
+-	{ "activity_left", "14s", plasma_window_management_types + 0 },
+-	{ "resource_name_changed", "16s", plasma_window_management_types + 0 },
+-};
+-
+-WL_EXPORT const struct wl_interface org_kde_plasma_window_interface = {
+-	"org_kde_plasma_window", 16,
+-	15, org_kde_plasma_window_requests,
+-	17, org_kde_plasma_window_events,
+-};
+-
+-static const struct wl_message org_kde_plasma_activation_feedback_requests[] = {
+-	{ "destroy", "", plasma_window_management_types + 0 },
+-};
+-
+-static const struct wl_message org_kde_plasma_activation_feedback_events[] = {
+-	{ "activation", "n", plasma_window_management_types + 16 },
+-};
+-
+-WL_EXPORT const struct wl_interface org_kde_plasma_activation_feedback_interface = {
+-	"org_kde_plasma_activation_feedback", 1,
+-	1, org_kde_plasma_activation_feedback_requests,
+-	1, org_kde_plasma_activation_feedback_events,
+-};
+-
+-static const struct wl_message org_kde_plasma_activation_requests[] = {
+-	{ "destroy", "", plasma_window_management_types + 0 },
+-};
+-
+-static const struct wl_message org_kde_plasma_activation_events[] = {
+-	{ "app_id", "s", plasma_window_management_types + 0 },
+-	{ "finished", "", plasma_window_management_types + 0 },
+-};
+-
+-WL_EXPORT const struct wl_interface org_kde_plasma_activation_interface = {
+-	"org_kde_plasma_activation", 1,
+-	1, org_kde_plasma_activation_requests,
+-	2, org_kde_plasma_activation_events,
+-};
+-
+diff --git a/kysdk-waylandhelper/src/windowmanager/windowinfo.h b/kysdk-waylandhelper/src/windowmanager/windowinfo.h
+index 7081a95..b808619 100644
+--- a/kysdk-waylandhelper/src/windowmanager/windowinfo.h
++++ b/kysdk-waylandhelper/src/windowmanager/windowinfo.h
+@@ -23,42 +23,45 @@
+ #ifndef WINDOWINFO_H
+ #define WINDOWINFO_H
+ 
+-#include <QVariant>
+-#include <QRect>
+ #include <QIcon>
++#include <QRect>
++#include <QVariant>
+ 
+-namespace kdk {
+-
++namespace kdk
++{
+ 
+ class WindowInfo
+ {
+-using WindowId = QVariant;
++    using WindowId = QVariant;
++
+ public:
+-    WindowInfo():
+-        m_handle(nullptr)
+-      , m_isValid(false)
+-      , m_isActive(false)
+-      , m_isMinimized(false)
+-      , m_isMaxVert(false)
+-      , m_isMaxHoriz(false)
+-      , m_isFullscreen(false)
+-      , m_isShaded(false)
+-      , m_isPlasmaDesktop(false)
+-      , m_isKeepAbove(false)
+-      , m_hasSkipTaskbar(false)
+-      , m_hasSkipSwitcher(false)
+-      , m_isOnAllDesktops(false)
+-      , m_isOnAllActivities(false)
+-      , m_isClosable(false)
+-      , m_isFullScreenable(false)
+-      , m_isGroupable(false)
+-      , m_isMaximizable(false)
+-      , m_isMinimizable(false)
+-      , m_isMovable(false)
+-      , m_isResizable(false)
+-      , m_isShadeable(false)
+-      , m_isVirtualDesktopsChangeable(false)
+-      , m_isDemandAttention(false){}
++    WindowInfo()
++        : m_handle(nullptr)
++        , m_isValid(false)
++        , m_isActive(false)
++        , m_isMinimized(false)
++        , m_isMaxVert(false)
++        , m_isMaxHoriz(false)
++        , m_isFullscreen(false)
++        , m_isShaded(false)
++        , m_isPlasmaDesktop(false)
++        , m_isKeepAbove(false)
++        , m_hasSkipTaskbar(false)
++        , m_hasSkipSwitcher(false)
++        , m_isOnAllDesktops(false)
++        , m_isOnAllActivities(false)
++        , m_isClosable(false)
++        , m_isFullScreenable(false)
++        , m_isGroupable(false)
++        , m_isMaximizable(false)
++        , m_isMinimizable(false)
++        , m_isMovable(false)
++        , m_isResizable(false)
++        , m_isShadeable(false)
++        , m_isVirtualDesktopsChangeable(false)
++        , m_isDemandAttention(false)
++    {
++    }
+ 
+     inline bool isPlasmaDesktop() const;
+     inline void setIsPlasmaDesktop(bool isPlasmaDesktop);
+@@ -104,7 +107,7 @@ public:
+     inline bool isOnAllActivities() const noexcept;
+     inline void setIsOnAllActivities(bool allactivities) noexcept;
+ 
+-    //ability
++    // ability
+     inline bool isCloseable() const noexcept;
+     inline void setIsClosable(bool closable) noexcept;
+ 
+@@ -143,9 +146,8 @@ public:
+     inline bool isDemandAttention() const noexcept;
+     inline void setIsDemandAttention(bool demandAttention) noexcept;
+ 
+-
+ private:
+-    void* m_handle;
++    void *m_handle;
+     bool m_isWayland;
+ 
+     WindowId m_wid{0};
+@@ -161,13 +163,13 @@ private:
+     bool m_isFullscreen : 1;
+     bool m_isShaded : 1;
+     bool m_isPlasmaDesktop : 1;
+-    bool m_isKeepAbove: 1;
+-    bool m_hasSkipTaskbar: 1;
+-    bool m_isOnAllDesktops: 1;
+-    bool m_isOnAllActivities: 1;
+-    bool m_hasSkipSwitcher: 1;
++    bool m_isKeepAbove : 1;
++    bool m_hasSkipTaskbar : 1;
++    bool m_isOnAllDesktops : 1;
++    bool m_isOnAllActivities : 1;
++    bool m_hasSkipSwitcher : 1;
+ 
+-    //!BEGIN: Window Abilities
++    //! BEGIN: Window Abilities
+     bool m_isClosable : 1;
+     bool m_isFullScreenable : 1;
+     bool m_isGroupable : 1;
+diff --git a/kysdk-waylandhelper/src/windowmanager/windowmanager.cpp b/kysdk-waylandhelper/src/windowmanager/windowmanager.cpp
+index de1bb36..5c1d645 100644
+--- a/kysdk-waylandhelper/src/windowmanager/windowmanager.cpp
++++ b/kysdk-waylandhelper/src/windowmanager/windowmanager.cpp
+@@ -27,39 +27,39 @@
+ 
+ using namespace kdk;
+ 
+-static WindowManager* g_windowmanger = nullptr;
+-static WmRegister* m_wm =nullptr;
++static WindowManager *g_windowmanger = nullptr;
++static WmRegister *m_wm = nullptr;
+ kdk::WindowManager::WindowManager(QObject *parent)
+-    :QObject(parent)
++    : QObject(parent)
+ {
+     m_wm = new WmRegister(this);
+ 
+-    connect(m_wm->winInterface(),&AbstractInterface::windowAdded,this,&WindowManager::windowAdded);
+-    connect(m_wm->winInterface(),&AbstractInterface::windowRemoved,this,&WindowManager::windowRemoved);
+-    connect(m_wm->winInterface(),&AbstractInterface::activeWindowChanged,this,&WindowManager::activeWindowChanged);
+-    connect(m_wm->winInterface(),&AbstractInterface::windowChanged,this,&WindowManager::windowChanged);
+-    connect(m_wm->winInterface(),&AbstractInterface::currentDesktopChanged,this,&WindowManager::currentDesktopChanged);
+-    connect(m_wm->winInterface(),&AbstractInterface::isShowingDesktopChanged,this,&WindowManager::isShowingDesktopChanged);
+-
+-    connect(m_wm->winInterface(),&AbstractInterface::titleChanged,this,&WindowManager::titleChanged);
+-    connect(m_wm->winInterface(),&AbstractInterface::iconChanged,this,&WindowManager::iconChanged);
+-    connect(m_wm->winInterface(),&AbstractInterface::activeChanged,this,&WindowManager::activeChanged);
+-    connect(m_wm->winInterface(),&AbstractInterface::fullscreenChanged,this,&WindowManager::fullscreenChanged);
+-    connect(m_wm->winInterface(),&AbstractInterface::keepAboveChanged,this,&WindowManager::keepAboveChanged);
+-    connect(m_wm->winInterface(),&AbstractInterface::minimizedChanged,this,&WindowManager::minimizedChanged);
+-    connect(m_wm->winInterface(),&AbstractInterface::maximizedChanged,this,&WindowManager::maximizedChanged);
+-    connect(m_wm->winInterface(),&AbstractInterface::onAllDesktopsChanged,this,&WindowManager::onAllDesktopsChanged);
+-    connect(m_wm->winInterface(),&AbstractInterface::demandsAttentionChanged,this,&WindowManager::demandsAttentionChanged);
+-    connect(m_wm->winInterface(),&AbstractInterface::skipTaskbarChanged,this,&WindowManager::skipTaskbarChanged);
+-    connect(m_wm->winInterface(),&AbstractInterface::skipSwitcherChanged,this,&WindowManager::skipSwitcherChanged);
+-    connect(m_wm->winInterface(),&AbstractInterface::geometryChanged,this,&WindowManager::geometryChanged);
+-    connect(m_wm->winInterface(),&AbstractInterface::outputInfoChanged,this,&WindowManager::outputInfoChanged);
++    connect(m_wm->winInterface(), &AbstractInterface::windowAdded, this, &WindowManager::windowAdded);
++    connect(m_wm->winInterface(), &AbstractInterface::windowRemoved, this, &WindowManager::windowRemoved);
++    connect(m_wm->winInterface(), &AbstractInterface::activeWindowChanged, this, &WindowManager::activeWindowChanged);
++    connect(m_wm->winInterface(), &AbstractInterface::windowChanged, this, &WindowManager::windowChanged);
++    connect(m_wm->winInterface(), &AbstractInterface::currentDesktopChanged, this, &WindowManager::currentDesktopChanged);
++    connect(m_wm->winInterface(), &AbstractInterface::isShowingDesktopChanged, this, &WindowManager::isShowingDesktopChanged);
++
++    connect(m_wm->winInterface(), &AbstractInterface::titleChanged, this, &WindowManager::titleChanged);
++    connect(m_wm->winInterface(), &AbstractInterface::iconChanged, this, &WindowManager::iconChanged);
++    connect(m_wm->winInterface(), &AbstractInterface::activeChanged, this, &WindowManager::activeChanged);
++    connect(m_wm->winInterface(), &AbstractInterface::fullscreenChanged, this, &WindowManager::fullscreenChanged);
++    connect(m_wm->winInterface(), &AbstractInterface::keepAboveChanged, this, &WindowManager::keepAboveChanged);
++    connect(m_wm->winInterface(), &AbstractInterface::minimizedChanged, this, &WindowManager::minimizedChanged);
++    connect(m_wm->winInterface(), &AbstractInterface::maximizedChanged, this, &WindowManager::maximizedChanged);
++    connect(m_wm->winInterface(), &AbstractInterface::onAllDesktopsChanged, this, &WindowManager::onAllDesktopsChanged);
++    connect(m_wm->winInterface(), &AbstractInterface::demandsAttentionChanged, this, &WindowManager::demandsAttentionChanged);
++    connect(m_wm->winInterface(), &AbstractInterface::skipTaskbarChanged, this, &WindowManager::skipTaskbarChanged);
++    connect(m_wm->winInterface(), &AbstractInterface::skipSwitcherChanged, this, &WindowManager::skipSwitcherChanged);
++    connect(m_wm->winInterface(), &AbstractInterface::geometryChanged, this, &WindowManager::geometryChanged);
++    connect(m_wm->winInterface(), &AbstractInterface::outputInfoChanged, this, &WindowManager::outputInfoChanged);
+ }
+ 
+ WindowId WindowManager::currentActiveWindow()
+ {
+     self();
+-    if(!m_wm)
++    if (!m_wm)
+         return QVariant();
+     return m_wm->winInterface()->activeWindow();
+ }
+@@ -67,7 +67,7 @@ WindowId WindowManager::currentActiveWindow()
+ void WindowManager::keepWindowAbove(const WindowId &windowId)
+ {
+     self();
+-    if(!m_wm)
++    if (!m_wm)
+         return;
+     m_wm->winInterface()->requestToggleKeepAbove(windowId);
+ }
+@@ -75,7 +75,7 @@ void WindowManager::keepWindowAbove(const WindowId &windowId)
+ QString WindowManager::getWindowTitle(const WindowId &windowId)
+ {
+     self();
+-    if(!m_wm)
++    if (!m_wm)
+         return QString();
+     return m_wm->winInterface()->titleFor(windowId);
+ }
+@@ -83,14 +83,14 @@ QString WindowManager::getWindowTitle(const WindowId &windowId)
+ QIcon WindowManager::getWindowIcon(const WindowId &windowId)
+ {
+     self();
+-    if(!m_wm)
++    if (!m_wm)
+         return QIcon();
+     return m_wm->winInterface()->iconFor(windowId);
+ }
+ 
+ QString WindowManager::getWindowGroup(const WindowId &windowId)
+ {
+-    if(!m_wm)
++    if (!m_wm)
+         return QString();
+     self();
+     return m_wm->winInterface()->windowGroupFor(windowId);
+@@ -99,7 +99,7 @@ QString WindowManager::getWindowGroup(const WindowId &windowId)
+ void WindowManager::closeWindow(const WindowId &windowId)
+ {
+     self();
+-    if(!m_wm)
++    if (!m_wm)
+         return;
+     m_wm->winInterface()->requestClose(windowId);
+ }
+@@ -107,15 +107,15 @@ void WindowManager::closeWindow(const WindowId &windowId)
+ void WindowManager::activateWindow(const WindowId &windowId)
+ {
+     self();
+-    if(!m_wm)
++    if (!m_wm)
+         return;
+     m_wm->winInterface()->requestActivate(windowId);
+ }
+ 
+ void WindowManager::maximizeWindow(const WindowId &windowId)
+ {
+-     self();
+-    if(!m_wm)
++    self();
++    if (!m_wm)
+         return;
+     m_wm->winInterface()->requestToggleMaximized(windowId);
+ }
+@@ -123,7 +123,7 @@ void WindowManager::maximizeWindow(const WindowId &windowId)
+ void WindowManager::minimizeWindow(const WindowId &windowId)
+ {
+     self();
+-    if(!m_wm)
++    if (!m_wm)
+         return;
+     m_wm->winInterface()->requestToggleMinimized(windowId);
+ }
+@@ -132,7 +132,7 @@ quint32 WindowManager::getPid(const WindowId &windowId)
+ {
+     self();
+     quint32 pid = 0;
+-    if(!m_wm)
++    if (!m_wm)
+         return pid;
+     pid = m_wm->winInterface()->pid(windowId);
+     return pid;
+@@ -140,7 +140,7 @@ quint32 WindowManager::getPid(const WindowId &windowId)
+ 
+ WindowManager *WindowManager::self()
+ {
+-    if(g_windowmanger)
++    if (g_windowmanger)
+         return g_windowmanger;
+     g_windowmanger = new WindowManager();
+     return g_windowmanger;
+@@ -149,7 +149,7 @@ WindowManager *WindowManager::self()
+ WindowInfo WindowManager::getwindowInfo(const WindowId &windowId)
+ {
+     self();
+-    if(!m_wm)
++    if (!m_wm)
+         return WindowInfo();
+     return m_wm->winInterface()->requestInfo(windowId);
+ }
+@@ -157,7 +157,7 @@ WindowInfo WindowManager::getwindowInfo(const WindowId &windowId)
+ void WindowManager::showDesktop()
+ {
+     self();
+-    if(!m_wm)
++    if (!m_wm)
+         return;
+     m_wm->winInterface()->showCurrentDesktop();
+ }
+@@ -165,7 +165,7 @@ void WindowManager::showDesktop()
+ void WindowManager::hideDesktop()
+ {
+     self();
+-    if(!m_wm)
++    if (!m_wm)
+         return;
+     m_wm->winInterface()->hideCurrentDesktop();
+ }
+@@ -173,7 +173,7 @@ void WindowManager::hideDesktop()
+ QString WindowManager::currentDesktop()
+ {
+     self();
+-    if(!m_wm)
++    if (!m_wm)
+         return 0;
+     return m_wm->winInterface()->currentDesktop();
+ }
+@@ -181,15 +181,15 @@ QString WindowManager::currentDesktop()
+ QList<WindowId> WindowManager::windows()
+ {
+     self();
+-    if(!m_wm)
++    if (!m_wm)
+         return QList<WindowId>();
+     return m_wm->winInterface()->windows();
+ }
+ 
+ NET::WindowType WindowManager::getWindowType(const WindowId &windowId)
+ {
+-     self();
+-    if(!m_wm)
++    self();
++    if (!m_wm)
+         return NET::WindowType::Unknown;
+     return m_wm->winInterface()->windowType(windowId);
+ }
+@@ -197,31 +197,31 @@ NET::WindowType WindowManager::getWindowType(const WindowId &windowId)
+ void WindowManager::setGeometry(QWindow *window, const QRect &rect)
+ {
+     self();
+-    if(!m_wm)
++    if (!m_wm)
+         return;
+-    m_wm->winInterface()->setGeometry(window,rect);
++    m_wm->winInterface()->setGeometry(window, rect);
+ }
+ 
+ void WindowManager::setSkipTaskBar(QWindow *window, bool skip)
+ {
+     self();
+-    if(!m_wm)
++    if (!m_wm)
+         return;
+-    m_wm->winInterface()->setSkipTaskBar(window,skip);
++    m_wm->winInterface()->setSkipTaskBar(window, skip);
+ }
+ 
+ void WindowManager::setSkipSwitcher(QWindow *window, bool skip)
+ {
+     self();
+-    if(!m_wm)
++    if (!m_wm)
+         return;
+-    m_wm->winInterface()->setSkipSwitcher(window,skip);
++    m_wm->winInterface()->setSkipSwitcher(window, skip);
+ }
+ 
+ bool WindowManager::skipTaskBar(const WindowId &windowId)
+ {
+     self();
+-    if(!m_wm)
++    if (!m_wm)
+         return false;
+     return m_wm->winInterface()->skipTaskBar(windowId);
+ }
+@@ -229,7 +229,7 @@ bool WindowManager::skipTaskBar(const WindowId &windowId)
+ bool WindowManager::skipSwitcher(const WindowId &windowId)
+ {
+     self();
+-    if(!m_wm)
++    if (!m_wm)
+         return false;
+     return m_wm->winInterface()->skipSwitcher(windowId);
+ }
+@@ -237,7 +237,7 @@ bool WindowManager::skipSwitcher(const WindowId &windowId)
+ bool WindowManager::isShowingDesktop()
+ {
+     self();
+-    if(!m_wm)
++    if (!m_wm)
+         return false;
+     return m_wm->winInterface()->isShowingDesktop();
+ }
+@@ -245,41 +245,41 @@ bool WindowManager::isShowingDesktop()
+ void WindowManager::setOnAllDesktops(const WindowId &windowId)
+ {
+     self();
+-    if(!m_wm)
++    if (!m_wm)
+         return;
+     m_wm->winInterface()->setOnAllDesktops(windowId);
+ }
+ 
+ bool WindowManager::isOnAllDesktops(const WindowId &windowId)
+ {
+-    kdk::WindowInfo windowInfo =  WindowManager::getwindowInfo(windowId);
++    kdk::WindowInfo windowInfo = WindowManager::getwindowInfo(windowId);
+     return windowInfo.isOnAllDesktops();
+ }
+ 
+ bool WindowManager::isOnCurrentDesktop(const WindowId &windowId)
+ {
+-    kdk::WindowInfo  windowinfo = WindowManager::getwindowInfo(windowId);
++    kdk::WindowInfo windowinfo = WindowManager::getwindowInfo(windowId);
+     return windowinfo.isOnDesktop(currentDesktop());
+ }
+ 
+ bool WindowManager::isOnDesktop(const WindowId &windowId, int desktop)
+ {
+-   kdk::WindowInfo  windowinfo = WindowManager::getwindowInfo(windowId);
+-   return windowinfo.isOnDesktop(QString::number(desktop));
++    kdk::WindowInfo windowinfo = WindowManager::getwindowInfo(windowId);
++    return windowinfo.isOnDesktop(QString::number(desktop));
+ }
+ 
+-void WindowManager::setPanelTakefocus(QWindow *window,bool flag)
++void WindowManager::setPanelTakefocus(QWindow *window, bool flag)
+ {
+     self();
+-    if(!m_wm || !window)
++    if (!m_wm || !window)
+         return;
+-    m_wm->winInterface()->setPanelTakefocus(window,flag);
++    m_wm->winInterface()->setPanelTakefocus(window, flag);
+ }
+ 
+ void WindowManager::demandAttention(const WindowId &wid)
+ {
+     self();
+-    if(!m_wm)
++    if (!m_wm)
+         return;
+     m_wm->winInterface()->demandAttention(wid);
+ }
+@@ -287,7 +287,7 @@ void WindowManager::demandAttention(const WindowId &wid)
+ QString WindowManager::getProcessName(const WindowId &windowId)
+ {
+     self();
+-    if(!m_wm)
++    if (!m_wm)
+         return QString();
+     return m_wm->winInterface()->getProcessName(windowId);
+ }
+@@ -295,23 +295,23 @@ QString WindowManager::getProcessName(const WindowId &windowId)
+ void WindowManager::setWindowRadius(QWindow *window, int radius)
+ {
+     self();
+-    if(!m_wm)
+-        return ;
+-    m_wm->winInterface()->setWindowRadius(window,radius);
++    if (!m_wm)
++        return;
++    m_wm->winInterface()->setWindowRadius(window, radius);
+ }
+ 
+ void WindowManager::activateWindow(QWindow *window1, QWindow *window2)
+ {
+     self();
+-    if(!m_wm)
+-        return ;
+-    m_wm->winInterface()->activateWindow(window1,window2);
++    if (!m_wm)
++        return;
++    m_wm->winInterface()->activateWindow(window1, window2);
+ }
+ 
+ QRect WindowManager::windowGeometry(const WindowId &windowId)
+ {
+     self();
+-    if(!m_wm)
++    if (!m_wm)
+         return QRect();
+     return m_wm->winInterface()->windowGeometry(windowId);
+ }
+@@ -319,31 +319,31 @@ QRect WindowManager::windowGeometry(const WindowId &windowId)
+ void WindowManager::setPanelAutoHide(QWindow *window, bool autoHide)
+ {
+     self();
+-    if(!m_wm)
+-        return ;
++    if (!m_wm)
++        return;
+     return m_wm->winInterface()->setPanelAutoHide(window, autoHide);
+ }
+ 
+ void WindowManager::setGrabKeyboard(QWindow *window, bool grabKeyboard)
+ {
+     self();
+-    if(!m_wm)
+-        return ;
++    if (!m_wm)
++        return;
+     return m_wm->winInterface()->setGrabKeyboard(window, grabKeyboard);
+ }
+ 
+ void WindowManager::setWindowLayer(QWindow *window, WindowLayer layer)
+ {
+     self();
+-    if(!m_wm)
+-        return ;
++    if (!m_wm)
++        return;
+     return m_wm->winInterface()->setWindowLayer(window, layer);
+ }
+ 
+ WindowLayer WindowManager::windowLayer(QWindow *window)
+ {
+     self();
+-    if(!m_wm)
++    if (!m_wm)
+         return WindowLayer::Normal;
+     return m_wm->winInterface()->windowLayer(window);
+ }
+@@ -351,15 +351,15 @@ WindowLayer WindowManager::windowLayer(QWindow *window)
+ void WindowManager::setHighlight(const WindowId &wid, bool highlight)
+ {
+     self();
+-    if(!m_wm)
+-        return ;
++    if (!m_wm)
++        return;
+     return m_wm->winInterface()->setHighlight(wid, highlight);
+ }
+ 
+ bool WindowManager::isHightlight(const WindowId &wid)
+ {
+     self();
+-    if(!m_wm)
++    if (!m_wm)
+         return false;
+     return m_wm->winInterface()->istHighlight(wid);
+ }
+@@ -367,31 +367,31 @@ bool WindowManager::isHightlight(const WindowId &wid)
+ void WindowManager::setOpenUnderCursor(QWindow *window)
+ {
+     self();
+-    if(!m_wm)
+-        return ;
++    if (!m_wm)
++        return;
+     return m_wm->winInterface()->setOpenUnderCursor(window);
+ }
+ 
+ void WindowManager::setOpenUnderCursor(QWindow *window, int x, int y)
+ {
+     self();
+-    if(!m_wm)
+-        return ;
++    if (!m_wm)
++        return;
+     return m_wm->winInterface()->setOpenUnderCursor(window, x, y);
+ }
+ 
+ void WindowManager::setIconName(QWindow *window, const QString &iconName)
+ {
+     self();
+-    if(!m_wm)
+-        return ;
++    if (!m_wm)
++        return;
+     return m_wm->winInterface()->setIconName(window, iconName);
+ }
+ 
+ QString WindowManager::currentSeatName()
+ {
+     self();
+-    if(!m_wm)
++    if (!m_wm)
+         return QString();
+     return m_wm->winInterface()->currentSeatName();
+ }
+@@ -399,7 +399,7 @@ QString WindowManager::currentSeatName()
+ QString WindowManager::currentOutputName()
+ {
+     self();
+-    if(!m_wm)
++    if (!m_wm)
+         return QString();
+     return m_wm->winInterface()->currentOutputName();
+ }
+@@ -408,7 +408,7 @@ QList<OutputInfo *> WindowManager::outputsInfo()
+ {
+     QList<OutputInfo *> list;
+     self();
+-    if(!m_wm)
++    if (!m_wm)
+         return list;
+     return m_wm->winInterface()->outputsInfo();
+ }
+@@ -417,16 +417,16 @@ QList<WindowId> WindowManager::getWindowIdByPid(quint32 pid)
+ {
+     QList<WindowId> list;
+     self();
+-    if(!m_wm)
++    if (!m_wm)
+         return list;
+     return m_wm->winInterface()->getWindowIdByPid(pid);
+ }
+ 
+-QList<WindowId> WindowManager::getWindowIdByTtile(const QString&title)
++QList<WindowId> WindowManager::getWindowIdByTtile(const QString &title)
+ {
+     QList<WindowId> list;
+     self();
+-    if(!m_wm)
++    if (!m_wm)
+         return list;
+     return m_wm->winInterface()->getWindowIdByTtile(title);
+ }
+diff --git a/kysdk-waylandhelper/src/windowmanager/windowmanager.h b/kysdk-waylandhelper/src/windowmanager/windowmanager.h
+index ab9e514..9e41f56 100644
+--- a/kysdk-waylandhelper/src/windowmanager/windowmanager.h
++++ b/kysdk-waylandhelper/src/windowmanager/windowmanager.h
+@@ -23,11 +23,11 @@
+ #ifndef WINDOWMANAGER_H
+ #define WINDOWMANAGER_H
+ 
+-#include <QObject>
+-#include <QString>
+-#include <QIcon>
+ #include "windowinfo.h"
+ #include "wmregister.h"
++#include <QIcon>
++#include <QObject>
++#include <QString>
+ 
+ namespace kdk
+ {
+@@ -46,19 +46,18 @@ class WindowManager : public QObject
+     Q_OBJECT
+ 
+ public:
+-
+     /**
+      * @brief self
+      * @return
+      */
+-    static WindowManager* self();
++    static WindowManager *self();
+ 
+     /**
+-      * @brief 获取窗口信息
+-      * @param windowId
+-      * @return
+-      */
+-    static WindowInfo getwindowInfo(const WindowId& windowId);
++     * @brief 获取窗口信息
++     * @param windowId
++     * @return
++     */
++    static WindowInfo getwindowInfo(const WindowId &windowId);
+ 
+     /**
+      * @brief 获取当前活动窗口
+@@ -70,72 +69,70 @@ public:
+      * @brief 置顶窗口
+      * @param windowId
+      */
+-    static void keepWindowAbove(const WindowId& windowId);
++    static void keepWindowAbove(const WindowId &windowId);
+ 
+     /**
+      * @brief 获取窗口标题
+      * @param windowId
+      * @return
+      */
+-     static QString getWindowTitle(const WindowId& windowId);
++    static QString getWindowTitle(const WindowId &windowId);
+ 
+     /**
+      * @brief 获取窗口图标
+      * @param windowId
+      * @return
+      */
+-     static QIcon getWindowIcon(const WindowId& windowId);
+-
+-
+-     /**
+-      * @brief 获取窗口所在组的组名
+-      * @param windowId
+-      * @return
+-      */
+-     static QString getWindowGroup(const WindowId& windowId);
++    static QIcon getWindowIcon(const WindowId &windowId);
+ 
++    /**
++     * @brief 获取窗口所在组的组名
++     * @param windowId
++     * @return
++     */
++    static QString getWindowGroup(const WindowId &windowId);
+ 
+     /**
+      * @brief 关闭窗口
+      * @param windowId
+      */
+-     static void closeWindow(const WindowId& windowId);
++    static void closeWindow(const WindowId &windowId);
+ 
+     /**
+      * @brief 激活窗口
+      * @param windowId
+      */
+-     static void activateWindow(const WindowId& windowId);
++    static void activateWindow(const WindowId &windowId);
+ 
+     /**
+      * @brief 最大化窗口
+      * @param windowId
+      */
+-     static void maximizeWindow(const WindowId& windowId);
++    static void maximizeWindow(const WindowId &windowId);
+ 
+     /**
+      * @brief 最小化窗口
+      * @param windowId
+      */
+-     static void minimizeWindow(const WindowId& windowId);
++    static void minimizeWindow(const WindowId &windowId);
+ 
+-     /**
+-      * @brief 获取窗口进程pid
+-      * @return
+-      */
+-     static quint32 getPid(const WindowId& windowId);
++    /**
++     * @brief 获取窗口进程pid
++     * @return
++     */
++    static quint32 getPid(const WindowId &windowId);
+ 
+     /**
+      * @brief 显示当前桌面
+      */
+-     static void showDesktop();
++    static void showDesktop();
+ 
+     /**
+      * @brief 取消显示当前桌面
+      */
+-     static void hideDesktop();
++    static void hideDesktop();
+ 
+-     /**
++    /**
+      * @brief 获取当前桌面的名称
+      * @return
+      */
+@@ -152,14 +149,14 @@ public:
+      * @param windowId
+      * @return
+      */
+-    static NET::WindowType getWindowType(const WindowId& windowId);
++    static NET::WindowType getWindowType(const WindowId &windowId);
+ 
+     /**
+      * @brief 设置窗口位置
+      * @param window
+      * @param rect
+      */
+-    static void	setGeometry(QWindow *window,const QRect &rect);
++    static void setGeometry(QWindow *window, const QRect &rect);
+ 
+     /**
+      * @brief 设置是否跳过任务栏
+@@ -167,7 +164,7 @@ public:
+      * @param window
+      * @param skip
+      */
+-    static void setSkipTaskBar(QWindow *window,bool skip);
++    static void setSkipTaskBar(QWindow *window, bool skip);
+ 
+     /**
+      * @brief 设置是否跳过窗口选择
+@@ -175,7 +172,7 @@ public:
+      * @param window
+      * @param skip
+      */
+-    static  void setSkipSwitcher(QWindow *window,bool skip);
++    static void setSkipSwitcher(QWindow *window, bool skip);
+ 
+     /**
+      * @brief 判断窗体是否跳过任务栏
+@@ -183,7 +180,7 @@ public:
+      * @param windowId
+      * @return
+      */
+-    static bool skipTaskBar(const WindowId& windowId);
++    static bool skipTaskBar(const WindowId &windowId);
+ 
+     /**
+      * @brief 判断窗体是否跳过窗口选择
+@@ -191,7 +188,7 @@ public:
+      * @param windowId
+      * @return
+      */
+-    static bool skipSwitcher(const WindowId& windowId);
++    static bool skipSwitcher(const WindowId &windowId);
+ 
+     /**
+      * @brief 判断桌面是否处于显示状态
+@@ -221,7 +218,7 @@ public:
+      * @since 2.1
+      * @return
+      */
+-    static bool isOnCurrentDesktop(const WindowId& id);
++    static bool isOnCurrentDesktop(const WindowId &id);
+ 
+     /**
+      * @brief 判断窗口是否在指定桌面
+@@ -232,7 +229,6 @@ public:
+      */
+     static bool isOnDesktop(const WindowId &id, int desktop);
+ 
+-
+     /**
+      * @brief 设置panel属性窗体是否获取焦点,仅wayland环境下生效
+      * @since 2.3
+@@ -240,7 +236,7 @@ public:
+      * @param flag
+      */
+     static void setPanelTakefocus(QWindow *window, bool flag);
+-    
++
+     /**
+      * @brief 发送demandAttention状态
+      * @since 2.3
+@@ -254,7 +250,7 @@ public:
+      * @param windowId
+      * @return
+      */
+-    static QString getProcessName(const WindowId& windowId);
++    static QString getProcessName(const WindowId &windowId);
+ 
+     /**
+      * @brief setWindowRadius
+@@ -262,7 +258,7 @@ public:
+      * @param window
+      * @param radius
+      */
+-    static void setWindowRadius(QWindow*window,int radius);
++    static void setWindowRadius(QWindow *window, int radius);
+ 
+     /**
+      * @brief activateWindow
+@@ -270,7 +266,7 @@ public:
+      * @param window1
+      * @param window2
+      */
+-    static void activateWindow(QWindow*window1,QWindow*window2);
++    static void activateWindow(QWindow *window1, QWindow *window2);
+ 
+     /**
+      * @brief windowGeometry
+@@ -278,7 +274,7 @@ public:
+      * @param windowId
+      * @return
+      */
+-    static QRect windowGeometry(const WindowId& windowId);
++    static QRect windowGeometry(const WindowId &windowId);
+ 
+     /**
+      * @brief setPanelAutoHide
+@@ -286,7 +282,7 @@ public:
+      * @param window
+      * @param autoHide
+      */
+-    static void setPanelAutoHide(QWindow *window,bool autoHide);
++    static void setPanelAutoHide(QWindow *window, bool autoHide);
+ 
+     /**
+      * @brief setGrabKeyboard
+@@ -349,7 +345,7 @@ public:
+      * @param window
+      * @param iconName
+      */
+-    static void setIconName(QWindow *window, const QString& iconName);
++    static void setIconName(QWindow *window, const QString &iconName);
+ 
+     /**
+      * @brief currentSeatName
+@@ -370,7 +366,7 @@ public:
+      * @since 2.5
+      * @return
+      */
+-    static QList<OutputInfo*> outputsInfo();
++    static QList<OutputInfo *> outputsInfo();
+ 
+     /**
+      * @brief getWindowIdByPid
+@@ -384,138 +380,137 @@ public:
+      * @since 2.5
+      * @return
+      */
+-    static QList<WindowId> getWindowIdByTtile(const QString&title);
++    static QList<WindowId> getWindowIdByTtile(const QString &title);
+ 
+ Q_SIGNALS:
+-     /**
+-      * @brief 窗口添加信号
+-      * @param windowId
+-      */
+-     void windowAdded(const WindowId& windowId);
+-
+-     /**
+-      * @brief 窗口删除信号
+-      * @param windowId
+-      */
+-     void windowRemoved(const WindowId& windowId);
+-
+-     /**
+-      * @brief 活动窗口改变信号
+-      * @param wid
+-      */
+-     void activeWindowChanged(const WindowId& wid);
+-
+-     /**
+-      * @brief 窗口改变信号
+-      * @param wid
+-      */
+-     void windowChanged(const WindowId& wid);
+-
+-     /**
+-      * @brief 当前桌面改变信号
+-      * @param wid
+-      */
+-     void currentDesktopChanged();
+-
+-     /**
+-      * @brief 桌面显示状态变化信号
+-      */
+-     void isShowingDesktopChanged();
+-
+-     /**
+-      * @brief 窗口标题改变信号
+-      * @since 2.3
+-      * @param wid
+-      */
+-     void titleChanged(const WindowId& wid);
+-     
+-     /**
+-      * @brief 窗口图标改变信号
+-      * @since 2.3
+-      * @param wid
+-      */
+-     void iconChanged(const WindowId& wid);
+-
+-     /**
+-      * @brief 窗口活动状态改变信号
+-      * @since 2.3
+-      * @param wid
+-      */
+-     void activeChanged(const WindowId& wid);
+-
+-     /**
+-      * @brief 窗口全屏状态改变信号
+-      * @since 2.3
+-      * @param wid
+-      */
+-     void fullscreenChanged(const WindowId& wid);
+-
+-     /**
+-      * @brief 窗口置顶状态改变信号
+-      * @since 2.3
+-      * @param wid
+-      */
+-     void keepAboveChanged(const WindowId& wid);
+-
+-     /**
+-      * @brief 窗口最小化状态改变信号
+-      * @since 2.3
+-      * @param wid
+-      */
+-     void minimizedChanged(const WindowId& wid);
+-
+-     /**
+-      * @brief 窗口最大化状态改变信号
+-      * @since 2.3
+-      * @param wid
+-      */
+-     void maximizedChanged(const WindowId& wid);
+-
+-     /**
+-      * @brief onAllDesktopsChanged
+-      * @since 2.3
+-      * @param wid
+-      */
+-     void onAllDesktopsChanged(const WindowId& wid);
+-
+-     /**
+-      * @brief demandsAttention状态改变信号
+-      * @since 2.3
+-      * @param wid
+-      */
+-     void demandsAttentionChanged(const WindowId& wid);
+-
+-     /**
+-      * @brief 跳过任务栏状态改变信号
+-      * @since 2.3
+-      * @param wid
+-      */
+-     void skipTaskbarChanged(const WindowId& wid);
+-
+-     /**
+-      * @brief 跳过窗口选择器状态改变信号
+-      * @since 2.3
+-      * @param wid
+-      */
+-     void skipSwitcherChanged(const WindowId& wid);
+-
+-     /**
+-      * @brief 窗口位置改变信号
+-      * @since 2.3
+-      * @param wid
+-      */
+-     void geometryChanged(const WindowId& wid);
+-
+-     /**
+-      * @brief 屏幕信息改变信号
+-      * @since 2.5
+-      */
+-     void outputInfoChanged(OutputInfo*);
++    /**
++     * @brief 窗口添加信号
++     * @param windowId
++     */
++    void windowAdded(const WindowId &windowId);
++
++    /**
++     * @brief 窗口删除信号
++     * @param windowId
++     */
++    void windowRemoved(const WindowId &windowId);
++
++    /**
++     * @brief 活动窗口改变信号
++     * @param wid
++     */
++    void activeWindowChanged(const WindowId &wid);
++
++    /**
++     * @brief 窗口改变信号
++     * @param wid
++     */
++    void windowChanged(const WindowId &wid);
++
++    /**
++     * @brief 当前桌面改变信号
++     * @param wid
++     */
++    void currentDesktopChanged();
++
++    /**
++     * @brief 桌面显示状态变化信号
++     */
++    void isShowingDesktopChanged();
++
++    /**
++     * @brief 窗口标题改变信号
++     * @since 2.3
++     * @param wid
++     */
++    void titleChanged(const WindowId &wid);
++
++    /**
++     * @brief 窗口图标改变信号
++     * @since 2.3
++     * @param wid
++     */
++    void iconChanged(const WindowId &wid);
++
++    /**
++     * @brief 窗口活动状态改变信号
++     * @since 2.3
++     * @param wid
++     */
++    void activeChanged(const WindowId &wid);
++
++    /**
++     * @brief 窗口全屏状态改变信号
++     * @since 2.3
++     * @param wid
++     */
++    void fullscreenChanged(const WindowId &wid);
++
++    /**
++     * @brief 窗口置顶状态改变信号
++     * @since 2.3
++     * @param wid
++     */
++    void keepAboveChanged(const WindowId &wid);
++
++    /**
++     * @brief 窗口最小化状态改变信号
++     * @since 2.3
++     * @param wid
++     */
++    void minimizedChanged(const WindowId &wid);
++
++    /**
++     * @brief 窗口最大化状态改变信号
++     * @since 2.3
++     * @param wid
++     */
++    void maximizedChanged(const WindowId &wid);
++
++    /**
++     * @brief onAllDesktopsChanged
++     * @since 2.3
++     * @param wid
++     */
++    void onAllDesktopsChanged(const WindowId &wid);
++
++    /**
++     * @brief demandsAttention状态改变信号
++     * @since 2.3
++     * @param wid
++     */
++    void demandsAttentionChanged(const WindowId &wid);
++
++    /**
++     * @brief 跳过任务栏状态改变信号
++     * @since 2.3
++     * @param wid
++     */
++    void skipTaskbarChanged(const WindowId &wid);
++
++    /**
++     * @brief 跳过窗口选择器状态改变信号
++     * @since 2.3
++     * @param wid
++     */
++    void skipSwitcherChanged(const WindowId &wid);
++
++    /**
++     * @brief 窗口位置改变信号
++     * @since 2.3
++     * @param wid
++     */
++    void geometryChanged(const WindowId &wid);
++
++    /**
++     * @brief 屏幕信息改变信号
++     * @since 2.5
++     */
++    void outputInfoChanged(OutputInfo *);
+ 
+ private:
+-     WindowManager(QObject *parent = nullptr);
++    WindowManager(QObject *parent = nullptr);
+ };
+ }
+ 
+-
+ #endif // WINDOWMANAGER_H
+diff --git a/kysdk-waylandhelper/src/windowmanager/wmregister.cpp b/kysdk-waylandhelper/src/windowmanager/wmregister.cpp
+index b52b1e6..a68cf2a 100644
+--- a/kysdk-waylandhelper/src/windowmanager/wmregister.cpp
++++ b/kysdk-waylandhelper/src/windowmanager/wmregister.cpp
+@@ -21,36 +21,33 @@
+  */
+ 
+ #include "wmregister.h"
+-#include <kwindowsystem.h>
+-#include <KWayland/Client/connection_thread.h>
+-#include <KWayland/Client/registry.h>
+-#include <QGuiApplication>
+-#include "../waylandhelper.h"
+ #include "kdewaylandinterface.h"
+ #include "ukuiwaylandinterface.h"
++#include "waylandhelper.h"
+ #include "xcbinterface.h"
++#include <KWayland/Client/connection_thread.h>
++#include <KWayland/Client/registry.h>
++#include <QGuiApplication>
++#include <kwindowsystem.h>
+ 
+ using namespace kdk;
+ using namespace KWayland::Client;
+ kdk::WmRegister::WmRegister(QObject *parent)
+-    :QObject(parent)
++    : QObject(parent)
+ {
+     QString platform = QGuiApplication::platformName();
+-    if(platform.startsWith(QLatin1String("wayland"),Qt::CaseInsensitive))
+-    {
+-        #ifdef USE_UKUI_PROTOCOL
+-            m_winInterface = new UkuiWaylandInterface(this);
+-            UkuiWaylandInterface* interface = dynamic_cast<UkuiWaylandInterface*>(m_winInterface);
+-            if(!interface->ukuiProtocolReady())
+-            {
+-                delete m_winInterface;
+-                m_winInterface = new KdeWaylandInterface(this);
+-            }
+-        #else
++    if (platform.startsWith(QLatin1String("wayland"), Qt::CaseInsensitive)) {
++#ifdef USE_UKUI_PROTOCOL
++        m_winInterface = new UkuiWaylandInterface(this);
++        UkuiWaylandInterface *interface = dynamic_cast<UkuiWaylandInterface *>(m_winInterface);
++        if (!interface->ukuiProtocolReady()) {
++            delete m_winInterface;
+             m_winInterface = new KdeWaylandInterface(this);
+-        #endif
+-    }
+-    else
++        }
++#else
++        m_winInterface = new KdeWaylandInterface(this);
++#endif
++    } else
+         m_winInterface = new XcbInterface(this);
+ }
+ 
+diff --git a/kysdk-waylandhelper/src/windowmanager/wmregister.h b/kysdk-waylandhelper/src/windowmanager/wmregister.h
+index c4a006e..330ac21 100644
+--- a/kysdk-waylandhelper/src/windowmanager/wmregister.h
++++ b/kysdk-waylandhelper/src/windowmanager/wmregister.h
+@@ -23,20 +23,19 @@
+ #ifndef WMREGISTER_H
+ #define WMREGISTER_H
+ 
+-#include <QObject>
+-#include "../kysdk-waylandhelper_global.h"
+ #include "abstractinterface.h"
+-
++#include "kysdk-waylandhelper_global.h"
++#include <QObject>
+ 
+ namespace kdk
+ {
+-class KYSDKWAYLANDHELPER_EXPORT WmRegister:public QObject
++class KYSDKWAYLANDHELPER_EXPORT WmRegister : public QObject
+ {
+ public:
+-    WmRegister(QObject*parent = nullptr);
++    WmRegister(QObject *parent = nullptr);
+     ~WmRegister();
+ 
+-    AbstractInterface* winInterface();
++    AbstractInterface *winInterface();
+ 
+ private:
+     AbstractInterface *m_winInterface{nullptr};
+diff --git a/kysdk-waylandhelper/src/windowmanager/xcbinterface.cpp b/kysdk-waylandhelper/src/windowmanager/xcbinterface.cpp
+index 94b4994..0a1f6c6 100644
+--- a/kysdk-waylandhelper/src/windowmanager/xcbinterface.cpp
++++ b/kysdk-waylandhelper/src/windowmanager/xcbinterface.cpp
+@@ -23,16 +23,16 @@
+ #include "xcbinterface.h"
+ #include "kwindowinfo.h"
+ #include "kyatoms_p.h"
+-#include <QRect>
++#include <KWindowInfo>
++#include <KWindowSystem>
++#include <QDebug>
+ #include <QIcon>
++#include <QRect>
++#include <QSharedData>
+ #include <QWidget>
++#include <QWindow>
+ #include <QtX11Extras/QX11Info>
+-#include <KWindowSystem>
+-#include <KWindowInfo>
+ #include <kiconloader.h>
+-#include <QWindow>
+-#include <QDebug>
+-#include <QSharedData>
+ 
+ class KylinAtoms : public QSharedData
+ {
+@@ -44,10 +44,10 @@ public:
+         return m_atoms[atom];
+     }
+     xcb_connection_t *m_connection;
++
+ private:
+     void init();
+     xcb_atom_t m_atoms[KyAtomCount];
+-
+ };
+ 
+ typedef QHash<xcb_connection_t *, QSharedDataPointer<KylinAtoms>> AtomHash;
+@@ -67,7 +67,7 @@ static QSharedDataPointer<KylinAtoms> atomsForConnection(xcb_connection_t *c)
+ class KyWinInfo
+ {
+ public:
+-    explicit KyWinInfo(xcb_connection_t *c,xcb_window_t w)
++    explicit KyWinInfo(xcb_connection_t *c, xcb_window_t w)
+     {
+         atoms = atomsForConnection(c);
+         connection = c;
+@@ -83,16 +83,13 @@ public:
+     xcb_window_t window;
+ };
+ 
+-
+-
+ void KyWinInfo::setWindowLayer(WindowLayer layer)
+ {
+ 
+     int len;
+     uint32_t data[2];
+ 
+-    switch (layer)
+-    {
++    switch (layer) {
+     case WindowLayer::Panel:
+         data[0] = this->atom(_NET_WM_WINDOW_TYPE_DOCK);
+         data[1] = XCB_NONE;
+@@ -194,18 +191,19 @@ KylinAtoms::KylinAtoms(xcb_connection_t *c)
+ }
+ 
+ XcbInterface::XcbInterface(QObject *parent)
+-    :AbstractInterface(parent)
++    : AbstractInterface(parent)
+ {
+     m_currentDesktop = QString::number(KWindowSystem::self()->currentDesktop());
+-    connect(KWindowSystem::self(),&KWindowSystem::showingDesktopChanged,this,&AbstractInterface::isShowingDesktopChanged);
++    connect(KWindowSystem::self(), &KWindowSystem::showingDesktopChanged, this, &AbstractInterface::isShowingDesktopChanged);
+     connect(KWindowSystem::self(), &KWindowSystem::activeWindowChanged, this, &AbstractInterface::activeWindowChanged);
+-    connect(KWindowSystem::self(), &KWindowSystem::windowAdded, this, [=](WindowId wid){
++    connect(KWindowSystem::self(), &KWindowSystem::windowAdded, this, [=](WindowId wid) {
+         if (!m_windows.contains(wid)) {
+             m_windows.insert(wid, this->requestInfo(wid));
+         }
+-        emit windowAdded(wid);});
++        emit windowAdded(wid);
++    });
+ 
+-    connect(KWindowSystem::self(), &KWindowSystem::windowRemoved, this, [=](WindowId wid){
++    connect(KWindowSystem::self(), &KWindowSystem::windowRemoved, this, [=](WindowId wid) {
+         m_windows.remove(wid);
+         emit windowRemoved(wid);
+     });
+@@ -215,10 +213,7 @@ XcbInterface::XcbInterface(QObject *parent)
+         emit currentDesktopChanged();
+     });
+ 
+-    connect(KWindowSystem::self()
+-            , static_cast<void (KWindowSystem::*)(WId, NET::Properties, NET::Properties2)>
+-            (&KWindowSystem::windowChanged)
+-            , this, &XcbInterface::windowChangedProxy);
++    connect(KWindowSystem::self(), static_cast<void (KWindowSystem::*)(WId, NET::Properties, NET::Properties2)>(&KWindowSystem::windowChanged), this, &XcbInterface::windowChangedProxy);
+     connect(KWindowSystem::self(), &KWindowSystem::activeWindowChanged, this, &AbstractInterface::activeChanged);
+ }
+ 
+@@ -228,17 +223,11 @@ XcbInterface::~XcbInterface()
+ 
+ WindowInfo XcbInterface::requestInfo(WindowId wid)
+ {
+-    const KWindowInfo winfo{wid.value<WId>(), NET::WMFrameExtents
+-                | NET::WMWindowType
+-                | NET::WMGeometry
+-                | NET::WMDesktop
+-                | NET::WMState
+-                | NET::WMName
+-                | NET::WMVisibleName,
+-                NET::WM2WindowClass
+-                | NET::WM2Activities
+-                | NET::WM2AllowedActions
+-                | NET::WM2TransientFor};
++    const KWindowInfo winfo{wid.value<WId>(), NET::WMFrameExtents | NET::WMWindowType | NET::WMGeometry | NET::WMDesktop | NET::WMState | NET::WMName | NET::WMVisibleName,
++                            NET::WM2WindowClass
++                                | NET::WM2Activities
++                                | NET::WM2AllowedActions
++                                | NET::WM2TransientFor};
+ 
+     bool isDesktop{false};
+     if (winfo.windowClassName() == "plasmashell" && isPlasmaDesktop(winfo.geometry())) {
+@@ -248,12 +237,9 @@ WindowInfo XcbInterface::requestInfo(WindowId wid)
+ 
+     WindowInfo windowInfo;
+ 
+-    if (!winfo.valid())
+-    {
++    if (!winfo.valid()) {
+         windowInfo.setIsValid(false);
+-    }
+-    else if (isValidWindow(winfo) && !isDesktop)
+-    {
++    } else if (isValidWindow(winfo) && !isDesktop) {
+         windowInfo.setIsValid(true);
+         windowInfo.setWid(wid);
+         windowInfo.setIsPlasmaDesktop(false);
+@@ -281,9 +267,7 @@ WindowInfo XcbInterface::requestInfo(WindowId wid)
+         //! Window Abilities
+ 
+         windowInfo.setDesktops({QString::number(winfo.desktop())});
+-    }
+-    else if (m_desktopId == wid)
+-    {
++    } else if (m_desktopId == wid) {
+         windowInfo.setIsValid(true);
+         windowInfo.setIsPlasmaDesktop(true);
+         windowInfo.setWid(wid);
+@@ -342,20 +326,20 @@ void XcbInterface::requestToggleMinimized(WindowId wid)
+ {
+     WindowInfo wInfo = requestInfo(wid);
+ 
+-     if (!wInfo.isValid() || wInfo.isPlasmaDesktop() || !inCurrentDesktopActivity(wInfo)) {
+-         return;
+-     }
++    if (!wInfo.isValid() || wInfo.isPlasmaDesktop() || !inCurrentDesktopActivity(wInfo)) {
++        return;
++    }
+ 
+-     if (wInfo.isMinimized()) {
+-         bool onCurrent = wInfo.isOnDesktop(m_currentDesktop);
++    if (wInfo.isMinimized()) {
++        bool onCurrent = wInfo.isOnDesktop(m_currentDesktop);
+ 
+-         KWindowSystem::unminimizeWindow(wid.toUInt());
+-         if (onCurrent) {
+-             KWindowSystem::forceActiveWindow(wid.toUInt());
+-         }
+-     } else {
+-         KWindowSystem::minimizeWindow(wid.toUInt());
+-     }
++        KWindowSystem::unminimizeWindow(wid.toUInt());
++        if (onCurrent) {
++            KWindowSystem::forceActiveWindow(wid.toUInt());
++        }
++    } else {
++        KWindowSystem::minimizeWindow(wid.toUInt());
++    }
+ }
+ 
+ void XcbInterface::requestToggleMaximized(WindowId wid)
+@@ -398,7 +382,7 @@ QIcon XcbInterface::iconFor(WindowId wid)
+ QString XcbInterface::titleFor(WindowId wid)
+ {
+     const KWindowInfo winfo{wid.value<WId>(), NET::WMName};
+-    if(winfo.valid())
++    if (winfo.valid())
+         return winfo.name();
+     else
+         return QString();
+@@ -407,11 +391,10 @@ QString XcbInterface::titleFor(WindowId wid)
+ QString XcbInterface::windowGroupFor(WindowId wid)
+ {
+     KWindowInfo winfo(wid.toULongLong(), NET::WMName, NET::WM2WindowClass);
+-    if(winfo.valid())
++    if (winfo.valid())
+         return winfo.windowClassClass();
+     else
+         return QString();
+-
+ }
+ 
+ void XcbInterface::showCurrentDesktop()
+@@ -426,15 +409,14 @@ void XcbInterface::hideCurrentDesktop()
+ 
+ quint32 XcbInterface::pid(WindowId wid)
+ {
+-     quint64 pid = 0;
+-     const KWindowInfo winfo{wid.value<WId>(), NET::WMName};
+-     if(!winfo.valid())
+-         return pid;
+-     else
+-     {
+-         pid = winfo.pid();
+-     }
+-     return pid;
++    quint64 pid = 0;
++    const KWindowInfo winfo{wid.value<WId>(), NET::WMName};
++    if (!winfo.valid())
++        return pid;
++    else {
++        pid = winfo.pid();
++    }
++    return pid;
+ }
+ 
+ WindowId XcbInterface::activeWindow()
+@@ -465,36 +447,36 @@ bool XcbInterface::windowCanBeMaximized(WindowId wid)
+ 
+ void XcbInterface::setGeometry(QWindow *window, const QRect &rect)
+ {
+-    if(window)
++    if (window)
+         window->setGeometry(rect);
+ }
+ 
+ void XcbInterface::setSkipTaskBar(QWindow *window, bool skip)
+ {
+-    if(skip)
+-        KWindowSystem::setState(window->winId(),NET::SkipTaskbar);
++    if (skip)
++        KWindowSystem::setState(window->winId(), NET::SkipTaskbar);
+     else
+-        KWindowSystem::clearState(window->winId(),NET::SkipTaskbar);
++        KWindowSystem::clearState(window->winId(), NET::SkipTaskbar);
+ }
+ 
+ void XcbInterface::setSkipSwitcher(QWindow *window, bool skip)
+ {
+-    if(skip)
+-        KWindowSystem::setState(window->winId(),NET::SkipSwitcher);
++    if (skip)
++        KWindowSystem::setState(window->winId(), NET::SkipSwitcher);
+     else
+-        KWindowSystem::clearState(window->winId(),NET::SkipSwitcher);
++        KWindowSystem::clearState(window->winId(), NET::SkipSwitcher);
+ }
+ 
+ bool XcbInterface::skipTaskBar(const WindowId &wid)
+ {
+     const KWindowInfo winfo(wid.value<WId>(), NET::WMState);
+-    return winfo.valid() ?  winfo.hasState(NET::SkipTaskbar) : false;
++    return winfo.valid() ? winfo.hasState(NET::SkipTaskbar) : false;
+ }
+ 
+ bool XcbInterface::skipSwitcher(const WindowId &wid)
+ {
+     const KWindowInfo winfo(wid.value<WId>(), NET::WMState);
+-    return winfo.valid() ?  winfo.hasState(NET::SkipSwitcher) : false;
++    return winfo.valid() ? winfo.hasState(NET::SkipSwitcher) : false;
+ }
+ 
+ bool XcbInterface::isShowingDesktop()
+@@ -524,13 +506,13 @@ void XcbInterface::setOnAllDesktops(const WindowId &wid)
+ 
+ void XcbInterface::setPanelTakefocus(QWindow *window, bool flag)
+ {
+-    //do nothing
++    // do nothing
+     return;
+ }
+ 
+ NET::WindowType XcbInterface::windowType(WindowId wid)
+ {
+-    KWindowInfo info(wid.value<WId>(),NET::WMWindowType|NET::WMState,NET::WM2TransientFor);
++    KWindowInfo info(wid.value<WId>(), NET::WMWindowType | NET::WMState, NET::WM2TransientFor);
+     return info.windowType(NET::AllTypesMask);
+ }
+ 
+@@ -550,7 +532,7 @@ QRect XcbInterface::windowGeometry(const WindowId &windowId)
+ 
+ void XcbInterface::setWindowLayer(QWindow *window, WindowLayer layer)
+ {
+-    if(!window)
++    if (!window)
+         return;
+     KyWinInfo info(QX11Info::connection(), window->winId());
+     info.setWindowLayer(layer);
+@@ -558,88 +540,83 @@ void XcbInterface::setWindowLayer(QWindow *window, WindowLayer layer)
+ 
+ WindowLayer XcbInterface::windowLayer(QWindow *window)
+ {
+-    if(!window)
++    if (!window)
+         return WindowLayer::Normal;
+ 
+     WindowLayer layer;
+-    KWindowInfo info(window->winId(), NET::WMWindowType|NET::WMState,NET::WM2TransientFor);
+-    switch (info.windowType(NET::AllTypesMask))
+-    {
+-        case NET::Normal:
+-            layer = WindowLayer::Normal;
+-            break;
+-        case NET::Desktop:
+-            layer = WindowLayer::Desktop;
+-            break;
+-        case NET::Dock:
+-        {
+-            layer = WindowLayer::Panel;
+-            qWarning()<<"NET::Dock replaced by WindowLayer::Panel";
+-            break;
+-        }
+-        case NET::Toolbar:
+-        {
+-            layer = WindowLayer::Normal;
+-            qWarning()<<"NET::Toolbar replaced by WindowLayer::Normal";
+-            break;
+-        }
+-        case NET::Menu:
+-        {
+-            layer = WindowLayer::AppletPop;
+-            qWarning()<<"NET::Menu replaced by WindowLayer::AppletPop";
+-            break;
+-        }
+-        case NET::Dialog:
+-            layer = WindowLayer::Normal;
+-            qWarning()<<"NET::Dialog replaced by WindowLayer::Normal";
+-            break;
+-        case NET::Override:
+-            layer = WindowLayer::Normal;
+-            qWarning()<<"NET::Override replaced by WindowLayer::Normal";
+-            break;
+-        case NET::Utility:
+-            layer = WindowLayer::Normal;
+-            qWarning()<<"NET::Utility replaced by WindowLayer::Normal";
+-            break;
+-        case NET::Splash:
+-            layer = WindowLayer::Normal;
+-            qWarning()<<"NET::Splash replaced by WindowLayer::Normal";
+-            break;
+-        case NET::DropdownMenu:
+-            layer = WindowLayer::AppletPop;
+-            qWarning()<<"NET::DropdownMenu replaced by WindowLayer::AppletPop";
+-            break;
+-        case NET::PopupMenu:
+-            layer = WindowLayer::AppletPop;
+-            qWarning()<<"NET::PopupMenu replaced by WindowLayer::AppletPop";
+-            break;
+-        case NET::Tooltip:
+-            layer = WindowLayer::ToolTip;
+-            break;
+-        case NET::Notification:
+-            layer = WindowLayer::Notification;
+-            break;
+-        case NET::ComboBox:
+-            layer = WindowLayer::Normal;
+-            qWarning()<<"NET::Dialog replaced by WindowLayer::Normal";
+-            break;
+-        case NET::DNDIcon:
+-            layer = WindowLayer::Normal;
+-            qWarning()<<"NET::DNDIcon replaced by WindowLayer::Normal";
+-            break;
+-        case NET::OnScreenDisplay:
+-            layer = WindowLayer::OnScreenDisplay;
+-            break;
+-        case NET::CriticalNotification:
+-            layer = WindowLayer::CriticalNotification;
+-            break;
+-        case NET::AppletPopup:
+-            layer = WindowLayer::AppletPop;
+-            break;
+-        default:
+-            layer = WindowLayer::Normal;
+-            break;
+-
++    KWindowInfo info(window->winId(), NET::WMWindowType | NET::WMState, NET::WM2TransientFor);
++    switch (info.windowType(NET::AllTypesMask)) {
++    case NET::Normal:
++        layer = WindowLayer::Normal;
++        break;
++    case NET::Desktop:
++        layer = WindowLayer::Desktop;
++        break;
++    case NET::Dock: {
++        layer = WindowLayer::Panel;
++        qWarning() << "NET::Dock replaced by WindowLayer::Panel";
++        break;
++    }
++    case NET::Toolbar: {
++        layer = WindowLayer::Normal;
++        qWarning() << "NET::Toolbar replaced by WindowLayer::Normal";
++        break;
++    }
++    case NET::Menu: {
++        layer = WindowLayer::AppletPop;
++        qWarning() << "NET::Menu replaced by WindowLayer::AppletPop";
++        break;
++    }
++    case NET::Dialog:
++        layer = WindowLayer::Normal;
++        qWarning() << "NET::Dialog replaced by WindowLayer::Normal";
++        break;
++    case NET::Override:
++        layer = WindowLayer::Normal;
++        qWarning() << "NET::Override replaced by WindowLayer::Normal";
++        break;
++    case NET::Utility:
++        layer = WindowLayer::Normal;
++        qWarning() << "NET::Utility replaced by WindowLayer::Normal";
++        break;
++    case NET::Splash:
++        layer = WindowLayer::Normal;
++        qWarning() << "NET::Splash replaced by WindowLayer::Normal";
++        break;
++    case NET::DropdownMenu:
++        layer = WindowLayer::AppletPop;
++        qWarning() << "NET::DropdownMenu replaced by WindowLayer::AppletPop";
++        break;
++    case NET::PopupMenu:
++        layer = WindowLayer::AppletPop;
++        qWarning() << "NET::PopupMenu replaced by WindowLayer::AppletPop";
++        break;
++    case NET::Tooltip:
++        layer = WindowLayer::ToolTip;
++        break;
++    case NET::Notification:
++        layer = WindowLayer::Notification;
++        break;
++    case NET::ComboBox:
++        layer = WindowLayer::Normal;
++        qWarning() << "NET::Dialog replaced by WindowLayer::Normal";
++        break;
++    case NET::DNDIcon:
++        layer = WindowLayer::Normal;
++        qWarning() << "NET::DNDIcon replaced by WindowLayer::Normal";
++        break;
++    case NET::OnScreenDisplay:
++        layer = WindowLayer::OnScreenDisplay;
++        break;
++    case NET::CriticalNotification:
++        layer = WindowLayer::CriticalNotification;
++        break;
++    case NET::AppletPopup:
++        layer = WindowLayer::AppletPop;
++        break;
++    default:
++        layer = WindowLayer::Normal;
++        break;
+     }
+     return layer;
+ }
+@@ -647,10 +624,8 @@ WindowLayer XcbInterface::windowLayer(QWindow *window)
+ QList<WindowId> XcbInterface::getWindowIdByPid(quint32 p)
+ {
+     QList<WindowId> list;
+-    for(auto windowId : windows())
+-    {
+-        if(pid(windowId) == p)
+-        {
++    for (auto windowId : windows()) {
++        if (pid(windowId) == p) {
+             list.append(windowId);
+         }
+     }
+@@ -660,10 +635,8 @@ QList<WindowId> XcbInterface::getWindowIdByPid(quint32 p)
+ QList<WindowId> XcbInterface::getWindowIdByTtile(const QString &title)
+ {
+     QList<WindowId> list;
+-    for(auto windowId : windows())
+-    {
+-        if(titleFor(windowId) == title)
+-        {
++    for (auto windowId : windows()) {
++        if (titleFor(windowId) == title) {
+             list.append(windowId);
+         }
+     }
+@@ -707,63 +680,53 @@ void XcbInterface::windowChangedProxy(WId wid, NET::Properties prop1, NET::Prope
+     }
+     emit windowChanged(wid);
+ 
+-    const KWindowInfo info(wid,prop1,prop2);
++    const KWindowInfo info(wid, prop1, prop2);
+     WindowInfo kInfo = m_windows.value(wid);
+ 
+-    if(prop1.testFlag(NET::WMState) && kInfo.isValid())
+-    {
+-        if(info.hasState(NET::State::FullScreen) != kInfo.isFullscreen())
+-        {
++    if (prop1.testFlag(NET::WMState) && kInfo.isValid()) {
++        if (info.hasState(NET::State::FullScreen) != kInfo.isFullscreen()) {
+             kInfo.setIsFullscreen(info.hasState(NET::State::FullScreen));
+             emit fullscreenChanged(wid);
+         }
+-        if(info.hasState(NET::State::KeepAbove) != kInfo.isKeepAbove())
+-        {
++        if (info.hasState(NET::State::KeepAbove) != kInfo.isKeepAbove()) {
+             kInfo.setIsKeepAbove(info.hasState(NET::State::KeepAbove));
+             emit keepAboveChanged(wid);
+         }
+-        if(info.hasState(NET::State::SkipSwitcher) != kInfo.hasSkipSwitcher())
+-        {
++        if (info.hasState(NET::State::SkipSwitcher) != kInfo.hasSkipSwitcher()) {
+             kInfo.setHasSkipSwitcher(info.hasState(NET::State::SkipSwitcher));
+             emit skipSwitcherChanged(wid);
+         }
+-        if(info.hasState(NET::State::SkipTaskbar) != kInfo.hasSkipTaskbar())
+-        {
++        if (info.hasState(NET::State::SkipTaskbar) != kInfo.hasSkipTaskbar()) {
+             kInfo.setHasSkipTaskbar(info.hasState(NET::State::SkipTaskbar));
+             emit skipTaskbarChanged(wid);
+         }
+-        if(info.hasState(NET::State::DemandsAttention) != kInfo.isDemandAttention())
+-        {
++        if (info.hasState(NET::State::DemandsAttention) != kInfo.isDemandAttention()) {
+             kInfo.setIsDemandAttention(info.hasState(NET::State::DemandsAttention));
+             emit demandsAttentionChanged(wid);
+         }
+-        if(info.hasState(NET::State::Max) != kInfo.isMaximized())
+-        {
+-           kInfo.setIsMaxHoriz(info.hasState(NET::State::Max));
+-           kInfo.setIsMaxVert(info.hasState(NET::State::Max));
+-           emit maximizedChanged(wid);
++        if (info.hasState(NET::State::Max) != kInfo.isMaximized()) {
++            kInfo.setIsMaxHoriz(info.hasState(NET::State::Max));
++            kInfo.setIsMaxVert(info.hasState(NET::State::Max));
++            emit maximizedChanged(wid);
+         }
+-        if(info.hasState(NET::State::Hidden) != kInfo.isMinimized())
+-        {
++        if (info.hasState(NET::State::Hidden) != kInfo.isMinimized()) {
+             kInfo.setIsMinimized(info.hasState(NET::State::Hidden));
+             emit minimizedChanged(wid);
+         }
+     }
+-    if(prop1.testFlag(NET::WMIcon))
++    if (prop1.testFlag(NET::WMIcon))
+         emit iconChanged(wid);
+-    if(prop1.testFlag(NET::ActiveWindow))
++    if (prop1.testFlag(NET::ActiveWindow))
+         emit activeChanged(wid);
+-    if(prop1.testFlag(NET::WMName) || prop1.testFlag(NET::WMVisibleName))
++    if (prop1.testFlag(NET::WMName) || prop1.testFlag(NET::WMVisibleName))
+         emit titleChanged(wid);
+-    if(prop1.testFlag(NET::WMGeometry))
++    if (prop1.testFlag(NET::WMGeometry))
+         emit geometryChanged(wid);
+ 
+-
+-    if(prop1.testFlag(NET::WMDesktop) && info.onAllDesktops())
++    if (prop1.testFlag(NET::WMDesktop) && info.onAllDesktops())
+         emit onAllDesktopsChanged(wid);
+ }
+ 
+-
+ void KylinAtoms::init()
+ {
+ #define ENUM_CREATE_CHAR_ARRAY 1
+diff --git a/kysdk-waylandhelper/src/windowmanager/xcbinterface.h b/kysdk-waylandhelper/src/windowmanager/xcbinterface.h
+index 5fbc320..86b508b 100644
+--- a/kysdk-waylandhelper/src/windowmanager/xcbinterface.h
++++ b/kysdk-waylandhelper/src/windowmanager/xcbinterface.h
+@@ -25,22 +25,22 @@
+ 
+ #include "abstractinterface.h"
+ 
+-#include <KWindowInfo>
+ #include <KWindowEffects>
++#include <KWindowInfo>
+ 
+ using namespace kdk;
+-class XcbInterface:public AbstractInterface
++class XcbInterface : public AbstractInterface
+ {
+ public:
+-    XcbInterface(QObject* parent=nullptr);
++    XcbInterface(QObject *parent = nullptr);
+     ~XcbInterface();
+     WindowInfo requestInfo(WindowId wid) override;
+ 
+-    void requestActivate(WindowId wid)  override;
++    void requestActivate(WindowId wid) override;
+     void requestClose(WindowId wid) override;
+-    void requestToggleKeepAbove(WindowId wid)  override;
+-    void requestToggleMinimized(WindowId wid)  override;
+-    void requestToggleMaximized(WindowId wid)  override;
++    void requestToggleKeepAbove(WindowId wid) override;
++    void requestToggleMinimized(WindowId wid) override;
++    void requestToggleMaximized(WindowId wid) override;
+ 
+     QIcon iconFor(WindowId wid) override;
+     QString titleFor(WindowId wid) override;
+@@ -57,8 +57,8 @@ public:
+     bool windowCanBeMaximized(WindowId wid) override;
+ 
+     void setGeometry(QWindow *window, const QRect &rect) override;
+-    void setSkipTaskBar(QWindow* window,bool skip) override;
+-    void setSkipSwitcher(QWindow* window,bool skip) override;
++    void setSkipTaskBar(QWindow *window, bool skip) override;
++    void setSkipSwitcher(QWindow *window, bool skip) override;
+ 
+     bool skipTaskBar(const WindowId &wid) override;
+     bool skipSwitcher(const WindowId &wid) override;
+@@ -69,17 +69,17 @@ public:
+     NET::WindowType windowType(WindowId wid) override;
+     void setPanelTakefocus(QWindow *window, bool flag) override;
+     void demandAttention(const WindowId &wid) override;
+-    QRect windowGeometry(const WindowId& windowId) override;
++    QRect windowGeometry(const WindowId &windowId) override;
+ 
+     void setWindowLayer(QWindow *window, WindowLayer layer) override;
+     WindowLayer windowLayer(QWindow *window) override;
+ 
+     QList<WindowId> getWindowIdByPid(quint32 pid) override;
+-    QList<WindowId> getWindowIdByTtile(const QString& title) override;
++    QList<WindowId> getWindowIdByTtile(const QString &title) override;
+ 
+ private:
+-    bool isValidWindow(WindowId wid) ;
+-    bool isValidWindow(const KWindowInfo &winfo) ;
++    bool isValidWindow(WindowId wid);
++    bool isValidWindow(const KWindowInfo &winfo);
+     void windowChangedProxy(WId wid, NET::Properties prop1, NET::Properties2 prop2);
+ 
+ private:
+diff --git a/kysdk-waylandhelper/src/windowmanager/xdgactivation.cpp b/kysdk-waylandhelper/src/windowmanager/xdgactivation.cpp
+index fdd483e..10d4f8f 100644
+--- a/kysdk-waylandhelper/src/windowmanager/xdgactivation.cpp
++++ b/kysdk-waylandhelper/src/windowmanager/xdgactivation.cpp
+@@ -11,17 +11,14 @@ public:
+     XdgActivation *q;
+ };
+ 
+-
+ XdgActivation::XdgActivation(QObject *parent)
+     : QObject(parent)
+-    ,d(new Private(this))
++    , d(new Private(this))
+ {
+-
+ }
+ 
+ XdgActivation::~XdgActivation()
+ {
+-
+ }
+ 
+ bool XdgActivation::isValid() const
+@@ -63,7 +60,7 @@ XdgActivation::operator xdg_activation_v1 *()
+ 
+ XdgActivationToken *XdgActivation::getXdgActivationToken()
+ {
+-    XdgActivationToken* token = new XdgActivationToken(this);
++    XdgActivationToken *token = new XdgActivationToken(this);
+     auto origin_token = xdg_activation_v1_get_activation_token((d->activation));
+     token->setup(origin_token);
+     return token;
+@@ -100,7 +97,6 @@ XdgActivation::operator xdg_activation_v1 *() const
+     return d->activation;
+ }
+ 
+-
+ class Q_DECL_HIDDEN XdgActivationToken::Private
+ {
+ public:
+@@ -122,13 +118,12 @@ private:
+ 
+ XdgActivationToken::XdgActivationToken(QObject *parent)
+     : QObject(parent)
+-    ,d(new Private(this))
++    , d(new Private(this))
+ {
+ }
+ 
+ XdgActivationToken::~XdgActivationToken()
+ {
+-
+ }
+ 
+ bool XdgActivationToken::isValid() const
+@@ -156,7 +151,7 @@ void XdgActivationToken::setup(xdg_activation_token_v1 *token)
+ 
+ void XdgActivationToken::set_serial(uint32_t serial, wl_seat *seat)
+ {
+-    xdg_activation_token_v1_set_serial(d->token,serial,seat);
++    xdg_activation_token_v1_set_serial(d->token, serial, seat);
+ }
+ 
+ void XdgActivationToken::set_app_id(const QString &app_id)
+@@ -181,22 +176,21 @@ void XdgActivationToken::commit()
+ 
+ XdgActivationToken::operator xdg_activation_token_v1 *()
+ {
+-     return d->token;
++    return d->token;
+ }
+ 
+ XdgActivationToken::operator xdg_activation_token_v1 *() const
+ {
+-     return d->token;
++    return d->token;
+ }
+ 
+ XdgActivationToken::Private::Private(XdgActivationToken *q)
+-    :q(q)
++    : q(q)
+ {
+ }
+ 
+ XdgActivationToken::Private::~Private()
+ {
+-
+ }
+ 
+ const struct xdg_activation_token_v1_listener XdgActivationToken::Private::m_xdg_activation_token_v1_listener = {
+@@ -204,7 +198,7 @@ const struct xdg_activation_token_v1_listener XdgActivationToken::Private::m_xdg
+ };
+ void XdgActivationToken::Private::init_listener()
+ {
+-     xdg_activation_token_v1_add_listener(token, &m_xdg_activation_token_v1_listener, this);
++    xdg_activation_token_v1_add_listener(token, &m_xdg_activation_token_v1_listener, this);
+ }
+ 
+ void XdgActivationToken::Private::handle_done(void *data, xdg_activation_token_v1 *object, const char *token)
+@@ -218,12 +212,10 @@ void XdgActivationToken::Private::doneCallback(const QString &token)
+ }
+ 
+ XdgActivation::Private::Private(XdgActivation *q)
+-    :q(q)
++    : q(q)
+ {
+-
+ }
+ 
+ XdgActivation::Private::~Private()
+ {
+-
+ }
+diff --git a/kysdk-waylandhelper/src/windowmanager/xdgactivation.h b/kysdk-waylandhelper/src/windowmanager/xdgactivation.h
+index 289e134..fdda1a4 100644
+--- a/kysdk-waylandhelper/src/windowmanager/xdgactivation.h
++++ b/kysdk-waylandhelper/src/windowmanager/xdgactivation.h
+@@ -1,10 +1,10 @@
+ #ifndef XDGACTIVATION_H
+ #define XDGACTIVATION_H
+ 
+-#include <QObject>
+ #include <KWayland/Client/event_queue.h>
+ #include <KWayland/Client/seat.h>
+ #include <KWayland/Client/surface.h>
++#include <QObject>
+ 
+ #include "wayland-xdg-activation-v1-client-protocol.h"
+ 
+@@ -27,7 +27,6 @@ public:
+ 
+     void setup(xdg_activation_v1 *activation);
+ 
+-
+     void setEventQueue(EventQueue *queue);
+ 
+     EventQueue *eventQueue();
+@@ -35,17 +34,16 @@ public:
+     operator xdg_activation_v1 *();
+     operator xdg_activation_v1 *() const;
+ 
+-    XdgActivationToken* getXdgActivationToken();
+-    XdgActivationToken* requestXdgActivationToken(wl_seat *seat, Surface *surface, uint32_t serial, const QString &app_id);
+-    void activateWindow(const QString&token,  Surface *surface);
++    XdgActivationToken *getXdgActivationToken();
++    XdgActivationToken *requestXdgActivationToken(wl_seat *seat, Surface *surface, uint32_t serial, const QString &app_id);
++    void activateWindow(const QString &token, Surface *surface);
+ 
+ private:
+     class Private;
+     QScopedPointer<Private> d;
+-
+ };
+ 
+-class XdgActivationToken: public QObject
++class XdgActivationToken : public QObject
+ {
+     Q_OBJECT
+ public:
+diff --git a/kysdk-waylandhelper/test/testBlurManager/widget.cpp b/kysdk-waylandhelper/test/testBlurManager/widget.cpp
+index 528371b..ead7e8f 100644
+--- a/kysdk-waylandhelper/test/testBlurManager/widget.cpp
++++ b/kysdk-waylandhelper/test/testBlurManager/widget.cpp
+@@ -1,29 +1,25 @@
+ #include "widget.h"
+ 
+ #include "widget.h"
++#include <KWindowEffects>
++#include <blurmanager/blurmanager.h>
+ #include <ukuistylehelper/ukuistylehelper.h>
+ #include <windowmanager/windowmanager.h>
+-#include <blurmanager/blurmanager.h>
+-#include <KWindowEffects>
+ Widget::Widget(QWidget *parent)
+     : QWidget(parent)
+ {
+-    m_btn = new QPushButton("switch",this);
++    m_btn = new QPushButton("switch", this);
+     m_btn->setCheckable(true);
+-    m_btn->move(100,100);
++    m_btn->move(100, 100);
+     m_testWidget = new QWidget();
+ 
+-    connect(m_btn,&QPushButton::clicked,this,[=](bool checked)
+-    {
+-        if(checked)
+-        {
++    connect(m_btn, &QPushButton::clicked, this, [=](bool checked) {
++        if (checked) {
+             m_testWidget->setAttribute(Qt::WA_TranslucentBackground);
+             m_testWidget->show();
+-            kdk::BlurManager::setBlurBehindWithStrength(m_testWidget->windowHandle(),true, QRegion(m_testWidget->rect()),400);
+-        }
+-        else
++            kdk::BlurManager::setBlurBehindWithStrength(m_testWidget->windowHandle(), true, QRegion(m_testWidget->rect()), 400);
++        } else
+             m_testWidget->hide();
+-
+     });
+ }
+ 
+diff --git a/kysdk-waylandhelper/test/testBlurManager/widget.h b/kysdk-waylandhelper/test/testBlurManager/widget.h
+index 8cdb61f..f1f3e66 100644
+--- a/kysdk-waylandhelper/test/testBlurManager/widget.h
++++ b/kysdk-waylandhelper/test/testBlurManager/widget.h
+@@ -1,8 +1,8 @@
+ #ifndef WIDGET_H
+ #define WIDGET_H
+ 
+-#include <QWidget>
+ #include <QPushButton>
++#include <QWidget>
+ 
+ class Widget : public QWidget
+ {
+@@ -13,7 +13,7 @@ public:
+     ~Widget();
+ 
+ private:
+-    QPushButton*m_btn;
++    QPushButton *m_btn;
+     QWidget *m_testWidget;
+ };
+ #endif // WIDGET_H
+diff --git a/kysdk-waylandhelper/test/testWindowInfo/widget.cpp b/kysdk-waylandhelper/test/testWindowInfo/widget.cpp
+index 2b8c331..bdd78fd 100644
+--- a/kysdk-waylandhelper/test/testWindowInfo/widget.cpp
++++ b/kysdk-waylandhelper/test/testWindowInfo/widget.cpp
+@@ -39,11 +39,11 @@ Widget::~Widget()
+ void Widget::initUi()
+ {
+     QHBoxLayout *hLayout = new QHBoxLayout();
+-    m_btnActivate = new QPushButton("Activate",this);
+-    m_btnMaximum = new QPushButton("Maximum",this);
+-    m_btnMinimize = new QPushButton("Minimum",this);
+-    m_btnClose = new QPushButton("Close",this);
+-    m_btnStayOnTop = new QPushButton("StayOnTop",this);
++    m_btnActivate = new QPushButton("Activate", this);
++    m_btnMaximum = new QPushButton("Maximum", this);
++    m_btnMinimize = new QPushButton("Minimum", this);
++    m_btnClose = new QPushButton("Close", this);
++    m_btnStayOnTop = new QPushButton("StayOnTop", this);
+ 
+     hLayout->addWidget(m_btnActivate);
+     hLayout->addWidget(m_btnMaximum);
+@@ -57,51 +57,49 @@ void Widget::initUi()
+ 
+ void Widget::initConnections()
+ {
+-    connect(WindowManager::self(),&WindowManager::windowAdded,this,[=](const WindowId& windowId){
+-        if(WindowManager::getWindowTitle(windowId) == "testWindowInfo")
++    connect(WindowManager::self(), &WindowManager::windowAdded, this, [=](const WindowId &windowId) {
++        if (WindowManager::getWindowTitle(windowId) == "testWindowInfo")
+             m_lastestWindowId = windowId;
+     });
+ 
+-    connect(m_btnActivate,&QPushButton::clicked,this,[=](){
++    connect(m_btnActivate, &QPushButton::clicked, this, [=]() {
+         WindowManager::activateWindow(m_lastestWindowId);
+     });
+ 
+-    connect(m_btnClose,&QPushButton::clicked,this,[=](){
++    connect(m_btnClose, &QPushButton::clicked, this, [=]() {
+         WindowManager::closeWindow(m_lastestWindowId);
+     });
+ 
+-    connect(m_btnMaximum,&QPushButton::clicked,this,[=](){
++    connect(m_btnMaximum, &QPushButton::clicked, this, [=]() {
+         WindowManager::maximizeWindow(m_lastestWindowId);
+     });
+ 
+-    connect(m_btnMinimize,&QPushButton::clicked,this,[=](){
++    connect(m_btnMinimize, &QPushButton::clicked, this, [=]() {
+         WindowManager::minimizeWindow(m_lastestWindowId);
+     });
+ 
+-    connect(m_btnStayOnTop,&QPushButton::clicked,this,[=](){
++    connect(m_btnStayOnTop, &QPushButton::clicked, this, [=]() {
+         WindowManager::keepWindowAbove(m_lastestWindowId);
+     });
+ 
+-    connect(WindowManager::self(),&WindowManager::windowChanged,this,[=](const WindowId& windowId){
+-        if(m_lastestWindowId == windowId)
+-        {
+-            kdk::WindowInfo windowInfo =  WindowManager::getwindowInfo(m_lastestWindowId);
++    connect(WindowManager::self(), &WindowManager::windowChanged, this, [=](const WindowId &windowId) {
++        if (m_lastestWindowId == windowId) {
++            kdk::WindowInfo windowInfo = WindowManager::getwindowInfo(m_lastestWindowId);
+             qDebug() << "-----------window state-----------";
+-            qDebug() << "isActive:"<< windowInfo.isActive();
+-            qDebug() << "isMaximized:"<<windowInfo.isMaximized();
+-            qDebug() << "isMinimized"<<windowInfo.isMinimized();
+-            qDebug() << "isValid"<<windowInfo.isValid();
+-            qDebug() << "isKeepAbove"<<windowInfo.isKeepAbove();
+-            //qDebug() << "isWaylandWindow"<<windowInfo.isWaylandWindow();
++            qDebug() << "isActive:" << windowInfo.isActive();
++            qDebug() << "isMaximized:" << windowInfo.isMaximized();
++            qDebug() << "isMinimized" << windowInfo.isMinimized();
++            qDebug() << "isValid" << windowInfo.isValid();
++            qDebug() << "isKeepAbove" << windowInfo.isKeepAbove();
++            // qDebug() << "isWaylandWindow"<<windowInfo.isWaylandWindow();
+ 
+             qDebug() << "-----------window ability-----------";
+-            qDebug() << "isCloseable:"<< windowInfo.isCloseable();
+-            qDebug() << "isFullScreenable:"<< windowInfo.isFullScreenable();
+-            qDebug() << "isGroupable:"<< windowInfo.isGroupable();
+-            qDebug() << "isMovable:"<< windowInfo.isMovable();
+-            qDebug() << "isMinimizable:"<< windowInfo.isMinimizable();
+-            qDebug() << "isMaximizable:"<< windowInfo.isMaximizable();
++            qDebug() << "isCloseable:" << windowInfo.isCloseable();
++            qDebug() << "isFullScreenable:" << windowInfo.isFullScreenable();
++            qDebug() << "isGroupable:" << windowInfo.isGroupable();
++            qDebug() << "isMovable:" << windowInfo.isMovable();
++            qDebug() << "isMinimizable:" << windowInfo.isMinimizable();
++            qDebug() << "isMaximizable:" << windowInfo.isMaximizable();
+         }
+     });
+-
+ }
+diff --git a/kysdk-waylandhelper/test/testWindowInfo/widget.h b/kysdk-waylandhelper/test/testWindowInfo/widget.h
+index 82193db..330da06 100644
+--- a/kysdk-waylandhelper/test/testWindowInfo/widget.h
++++ b/kysdk-waylandhelper/test/testWindowInfo/widget.h
+@@ -23,10 +23,10 @@
+ #ifndef WIDGET_H
+ #define WIDGET_H
+ 
+-#include <QWidget>
+-#include <QPushButton>
+ #include "windowmanager/windowinfo.h"
+ #include "windowmanager/windowmanager.h"
++#include <QPushButton>
++#include <QWidget>
+ 
+ using namespace kdk;
+ 
+@@ -42,11 +42,11 @@ public:
+     void initConnections();
+ 
+ private:
+-    QPushButton* m_btnMinimize;
+-    QPushButton* m_btnMaximum;
+-    QPushButton* m_btnActivate;
+-    QPushButton* m_btnStayOnTop;
+-    QPushButton* m_btnClose;
++    QPushButton *m_btnMinimize;
++    QPushButton *m_btnMaximum;
++    QPushButton *m_btnActivate;
++    QPushButton *m_btnStayOnTop;
++    QPushButton *m_btnClose;
+ 
+     kdk::WindowManager *m_manager;
+     WindowId m_lastestWindowId;
+diff --git a/kysdk-waylandhelper/test/testWindowManager/main.cpp b/kysdk-waylandhelper/test/testWindowManager/main.cpp
+index 2dc6b78..6babb16 100644
+--- a/kysdk-waylandhelper/test/testWindowManager/main.cpp
++++ b/kysdk-waylandhelper/test/testWindowManager/main.cpp
+@@ -23,8 +23,8 @@
+ #include "widget.h"
+ 
+ #include <QApplication>
+-#include <QWidget>
+ #include <QDebug>
++#include <QWidget>
+ 
+ using namespace kdk;
+ 
+diff --git a/kysdk-waylandhelper/test/testWindowManager/widget.cpp b/kysdk-waylandhelper/test/testWindowManager/widget.cpp
+index c5cd0cc..100ba78 100644
+--- a/kysdk-waylandhelper/test/testWindowManager/widget.cpp
++++ b/kysdk-waylandhelper/test/testWindowManager/widget.cpp
+@@ -21,107 +21,104 @@
+  */
+ 
+ #include "widget.h"
+-#include <unistd.h>
+-#include <QWindow>
+ #include <QBoxLayout>
+-#include <QDebug>
+-#include <QSpinBox>
+ #include <QComboBox>
++#include <QDebug>
+ #include <QGroupBox>
++#include <QSpinBox>
+ #include <QTimer>
++#include <QWindow>
+ #include <kwindowsystem.h>
++#include <unistd.h>
+ using namespace kdk;
+ 
+ Widget::Widget(QWidget *parent)
+-    : QWidget(parent),
+-      m_subWidget(nullptr)
++    : QWidget(parent)
++    , m_subWidget(nullptr)
+ {
+     m_timer = new QTimer(this);
+     m_timer->setInterval(2000);
+     setWindowTitle("windowtitle");
+-    connect(WindowManager::self(),&WindowManager::outputInfoChanged,this,[=](OutputInfo* info){
+-            qDebug() << "output info changed!name:"<<info->outputName() <<" usablearea:"<<info->usableArea();
++    connect(WindowManager::self(), &WindowManager::outputInfoChanged, this, [=](OutputInfo *info) {
++        qDebug() << "output info changed!name:" << info->outputName() << " usablearea:" << info->usableArea();
+     });
+ 
+-    connect(WindowManager::self(),&WindowManager::iconChanged,this,[=](const WindowId& windowId){
+-        if(m_lastestWindowId == windowId)
++    connect(WindowManager::self(), &WindowManager::iconChanged, this, [=](const WindowId &windowId) {
++        if (m_lastestWindowId == windowId)
+             qDebug() << "icon changed";
+     });
+-    connect(WindowManager::self(),&WindowManager::maximizedChanged,this,[=](const WindowId& windowId){
+-        if(m_lastestWindowId == windowId)
++    connect(WindowManager::self(), &WindowManager::maximizedChanged, this, [=](const WindowId &windowId) {
++        if (m_lastestWindowId == windowId)
+             qDebug() << "maximizedChanged";
+     });
+-    connect(WindowManager::self(),&WindowManager::minimizedChanged,this,[=](const WindowId& windowId){
+-        if(m_lastestWindowId == windowId)
++    connect(WindowManager::self(), &WindowManager::minimizedChanged, this, [=](const WindowId &windowId) {
++        if (m_lastestWindowId == windowId)
+             qDebug() << "minimizedChanged";
+     });
+-    connect(WindowManager::self(),&WindowManager::fullscreenChanged,this,[=](const WindowId& windowId){
+-        if(m_lastestWindowId == windowId)
++    connect(WindowManager::self(), &WindowManager::fullscreenChanged, this, [=](const WindowId &windowId) {
++        if (m_lastestWindowId == windowId)
+             qDebug() << "fullscreenChanged";
+     });
+-    connect(WindowManager::self(),&WindowManager::keepAboveChanged,this,[=](const WindowId& windowId){
+-        if(m_lastestWindowId == windowId)
++    connect(WindowManager::self(), &WindowManager::keepAboveChanged, this, [=](const WindowId &windowId) {
++        if (m_lastestWindowId == windowId)
+             qDebug() << "keepAboveChanged";
+     });
+-    connect(WindowManager::self(),&WindowManager::skipSwitcherChanged,this,[=](const WindowId& windowId){
+-        if(m_lastestWindowId == windowId)
++    connect(WindowManager::self(), &WindowManager::skipSwitcherChanged, this, [=](const WindowId &windowId) {
++        if (m_lastestWindowId == windowId)
+             qDebug() << "skipSwitcherChanged";
+     });
+-    connect(WindowManager::self(),&WindowManager::skipTaskbarChanged,this,[=](const WindowId& windowId){
+-        if(m_lastestWindowId == windowId)
++    connect(WindowManager::self(), &WindowManager::skipTaskbarChanged, this, [=](const WindowId &windowId) {
++        if (m_lastestWindowId == windowId)
+             qDebug() << "skipTaskbarChanged";
+     });
+-    connect(WindowManager::self(),&WindowManager::activeChanged,this,[=](const WindowId& windowId){
+-        if(m_lastestWindowId == windowId)
++    connect(WindowManager::self(), &WindowManager::activeChanged, this, [=](const WindowId &windowId) {
++        if (m_lastestWindowId == windowId)
+             qDebug() << "activeChanged";
+     });
+-    connect(WindowManager::self(),&WindowManager::titleChanged,this,[=](const WindowId& windowId){
+-        if(m_lastestWindowId == windowId)
++    connect(WindowManager::self(), &WindowManager::titleChanged, this, [=](const WindowId &windowId) {
++        if (m_lastestWindowId == windowId)
+             qDebug() << "titleChanged";
+     });
+-    connect(WindowManager::self(),&WindowManager::geometryChanged,this,[=](const WindowId& windowId){
+-//        if(m_lastestWindowId == windowId)
+-//            qDebug() << "geometryChanged";
++    connect(WindowManager::self(), &WindowManager::geometryChanged, this, [=](const WindowId &windowId) {
++        //        if(m_lastestWindowId == windowId)
++        //            qDebug() << "geometryChanged";
+     });
+-    connect(WindowManager::self(),&WindowManager::demandsAttentionChanged,this,[=](const WindowId& windowId){
+-        if(m_lastestWindowId == windowId)
++    connect(WindowManager::self(), &WindowManager::demandsAttentionChanged, this, [=](const WindowId &windowId) {
++        if (m_lastestWindowId == windowId)
+             qDebug() << "demandsAttentionChanged";
+     });
+-    connect(WindowManager::self(),&WindowManager::onAllDesktopsChanged,this,[=](const WindowId& windowId){
+-        if(m_lastestWindowId == windowId)
++    connect(WindowManager::self(), &WindowManager::onAllDesktopsChanged, this, [=](const WindowId &windowId) {
++        if (m_lastestWindowId == windowId)
+             qDebug() << "jnihbj,bhmjbhgbhmvgv";
+     });
+-    connect(WindowManager::self(),&WindowManager::windowAdded,this,[=](const WindowId& windowId){
+-
++    connect(WindowManager::self(), &WindowManager::windowAdded, this, [=](const WindowId &windowId) {
+         /*注意:
+          * 最新创建的窗体被设置为操作窗体,此demo中每个按钮对应一个接口函数调用,所有接口函数操作的窗口都是该最新创建的窗体
+          */
+-//    qDebug()<<"窗口添加:"<<WindowManager::getWindowTitle(windowId)<<" "<<windowId;
+-//    qDebug()<<"窗口添加:icon:"<<WindowManager::getWindowIcon(windowId);
+-    if((quint32)getpid() == WindowManager::getPid(windowId))
+-    {
+-        m_lastestWindowId = windowId;
+-    }
+-
+-//        qDebug()<<WindowManager::getWindowIcon(windowId);
+-//        qDebug()<<WindowManager::getPid(windowId);
++        //    qDebug()<<"窗口添加:"<<WindowManager::getWindowTitle(windowId)<<" "<<windowId;
++        //    qDebug()<<"窗口添加:icon:"<<WindowManager::getWindowIcon(windowId);
++        if ((quint32)getpid() == WindowManager::getPid(windowId)) {
++            m_lastestWindowId = windowId;
++        }
+ 
++        //        qDebug()<<WindowManager::getWindowIcon(windowId);
++        //        qDebug()<<WindowManager::getPid(windowId);
+     });
+-    connect(WindowManager::self(),&WindowManager::windowRemoved,this,[=](const WindowId& windowId){
+-        qDebug()<<"窗口移除:"<<windowId;
++    connect(WindowManager::self(), &WindowManager::windowRemoved, this, [=](const WindowId &windowId) {
++        qDebug() << "窗口移除:" << windowId;
+     });
+ 
+-    connect(WindowManager::self(),&WindowManager::windowChanged,this,[=](const WindowId& windowId){
+-        //该信号会被频繁触发,测试时可根据实际需求 选择是否添加打印
+-        if(m_lastestWindowId == windowId)
+-            qDebug()<<"窗口属性改变:"<<windowId;
++    connect(WindowManager::self(), &WindowManager::windowChanged, this, [=](const WindowId &windowId) {
++        // 该信号会被频繁触发,测试时可根据实际需求 选择是否添加打印
++        if (m_lastestWindowId == windowId)
++            qDebug() << "窗口属性改变:" << windowId;
+     });
+-    connect(WindowManager::self(),&WindowManager::activeWindowChanged,this,[=](const WindowId& windowId){
+-       qDebug()<<"活动窗口改变:"<<windowId;
++    connect(WindowManager::self(), &WindowManager::activeWindowChanged, this, [=](const WindowId &windowId) {
++        qDebug() << "活动窗口改变:" << windowId;
+     });
+-    connect(WindowManager::self(),&WindowManager::currentDesktopChanged,this,[=](){
+-       qDebug()<<"当前桌面改变:"<<WindowManager::currentDesktop();
+-       qDebug()<<"被测窗体是否在当前桌面:"<<WindowManager::isOnCurrentDesktop(m_lastestWindowId);
++    connect(WindowManager::self(), &WindowManager::currentDesktopChanged, this, [=]() {
++        qDebug() << "当前桌面改变:" << WindowManager::currentDesktop();
++        qDebug() << "被测窗体是否在当前桌面:" << WindowManager::isOnCurrentDesktop(m_lastestWindowId);
+     });
+     initUI();
+     initConnection();
+@@ -129,34 +126,32 @@ Widget::Widget(QWidget *parent)
+ 
+ Widget::~Widget()
+ {
+-
+ }
+ 
+ void Widget::initUI()
+ {
+-    QVBoxLayout* mainLayout = new QVBoxLayout(this);
++    QVBoxLayout *mainLayout = new QVBoxLayout(this);
+ 
+-    QHBoxLayout* hLayout1 = new QHBoxLayout();
++    QHBoxLayout *hLayout1 = new QHBoxLayout();
+     m_label = new QLabel(this);
+     m_label->setText("注意:最新创建的窗体被设置为操作窗体,此demo中每个按钮对应一个接口函数调用,所有接口函数操作的窗口都是该最新创建的窗体");
+-    m_btnMinimize = new QPushButton("最小化窗口",this);
+-    m_btnMaximum = new QPushButton("最大化窗口",this);
+-    m_btnActivate = new QPushButton("激活窗口",this);
+-    m_btnStayOnTop = new QPushButton("置顶窗口",this);
+-    m_btnClose = new QPushButton("关闭窗口",this);
+-    m_btnShowDesktop = new QPushButton("显示桌面",this);
+-    m_shwWindowTitle = new QPushButton("获取窗口标题",this);
+-    m_shwWindowIcon = new QPushButton("获取窗口图标",this);
+-    m_btnShowGroup = new QPushButton("获取窗口所属组",this);
+-    m_btnprintList = new QPushButton("获取窗口列表",this);
+-    m_btnSetGeometry = new QPushButton("设置窗口大小",this);
++    m_btnMinimize = new QPushButton("最小化窗口", this);
++    m_btnMaximum = new QPushButton("最大化窗口", this);
++    m_btnActivate = new QPushButton("激活窗口", this);
++    m_btnStayOnTop = new QPushButton("置顶窗口", this);
++    m_btnClose = new QPushButton("关闭窗口", this);
++    m_btnShowDesktop = new QPushButton("显示桌面", this);
++    m_shwWindowTitle = new QPushButton("获取窗口标题", this);
++    m_shwWindowIcon = new QPushButton("获取窗口图标", this);
++    m_btnShowGroup = new QPushButton("获取窗口所属组", this);
++    m_btnprintList = new QPushButton("获取窗口列表", this);
++    m_btnSetGeometry = new QPushButton("设置窗口大小", this);
+     hLayout1->addWidget(m_btnMinimize);
+     hLayout1->addWidget(m_btnMaximum);
+     hLayout1->addWidget(m_btnActivate);
+     hLayout1->addWidget(m_btnStayOnTop);
+     hLayout1->addWidget(m_btnClose);
+ 
+-
+     QLabel *label = new QLabel(this);
+     label->setText("依次输入起点x,起点y,宽度w,高度h");
+     m_posX = new QSpinBox(this);
+@@ -164,10 +159,10 @@ void Widget::initUI()
+     m_width = new QSpinBox(this);
+     m_height = new QSpinBox(this);
+ 
+-    m_posX->setRange(0,2000);
+-    m_posY->setRange(0,2000);
+-    m_width->setRange(1,2000);
+-    m_height->setRange(1,2000);
++    m_posX->setRange(0, 2000);
++    m_posY->setRange(0, 2000);
++    m_width->setRange(1, 2000);
++    m_height->setRange(1, 2000);
+     m_posX->setValue(0);
+     m_posY->setValue(0);
+     m_width->setValue(800);
+@@ -178,64 +173,75 @@ void Widget::initUI()
+     hLayout5->addWidget(m_width);
+     hLayout5->addWidget(m_height);
+ 
+-    QHBoxLayout* hLayout2 = new QHBoxLayout();
+-    m_shwWdgbtn = new QPushButton("打开测试窗口",this);
++    QHBoxLayout *hLayout2 = new QHBoxLayout();
++    m_shwWdgbtn = new QPushButton("打开测试窗口", this);
+     hLayout2->addWidget(m_shwWdgbtn);
+     hLayout2->addWidget(m_btnSetGeometry);
+-    hLayout2->addWidget(new QLabel("设置窗口类型",this));
++    hLayout2->addWidget(new QLabel("设置窗口类型", this));
+     m_setTypeBox = new QComboBox(this);
+     QStringList l;
+-    l<<"Widget"<<"Window"<<"Dialog"<<"Sheet"<<"Drawer"<<"Popup"<<"Tool"<<"ToolTip"<<
+-       "SplashScreen"<<"Desktop"<<"SubWindow"<<"ForeignWindow"<<"CoverWindow";
++    l << "Widget"
++      << "Window"
++      << "Dialog"
++      << "Sheet"
++      << "Drawer"
++      << "Popup"
++      << "Tool"
++      << "ToolTip"
++      << "SplashScreen"
++      << "Desktop"
++      << "SubWindow"
++      << "ForeignWindow"
++      << "CoverWindow";
+     m_setTypeBox->addItems(l);
+     hLayout2->addWidget(m_setTypeBox);
+ 
+-    QHBoxLayout* hLayout4 = new QHBoxLayout();
++    QHBoxLayout *hLayout4 = new QHBoxLayout();
+     hLayout4->addWidget(m_btnShowDesktop);
+     hLayout4->addWidget(m_shwWindowTitle);
+     hLayout4->addWidget(m_shwWindowIcon);
+     hLayout4->addWidget(m_btnShowGroup);
+     hLayout4->addWidget(m_btnprintList);
+ 
+-    QHBoxLayout* hLayout3 = new QHBoxLayout();
+-    m_btnChangeIcon = new QPushButton("更改图标",this);
+-    m_btnChangeTitle = new QPushButton("更改标题",this);
+-    m_btnGetType = new QPushButton("获取窗口类型",this);
++    QHBoxLayout *hLayout3 = new QHBoxLayout();
++    m_btnChangeIcon = new QPushButton("更改图标", this);
++    m_btnChangeTitle = new QPushButton("更改标题", this);
++    m_btnGetType = new QPushButton("获取窗口类型", this);
+ 
+     hLayout3->addWidget(m_btnChangeIcon);
+     hLayout3->addWidget(m_btnChangeTitle);
+     hLayout3->addWidget(m_btnGetType);
+ 
+-    QGroupBox *box2 = new QGroupBox("2.0需求接口",this);
++    QGroupBox *box2 = new QGroupBox("2.0需求接口", this);
+     QHBoxLayout *hLayout6 = new QHBoxLayout();
+-    m_skipTaskbarBtn = new QPushButton("跳过任务栏",this);
+-    m_skipSwitcherBtn = new QPushButton("跳过窗口选择器",this);
++    m_skipTaskbarBtn = new QPushButton("跳过任务栏", this);
++    m_skipSwitcherBtn = new QPushButton("跳过窗口选择器", this);
+     hLayout6->addWidget(m_skipTaskbarBtn);
+     hLayout6->addWidget(m_skipSwitcherBtn);
+ 
+     QHBoxLayout *hLayout7 = new QHBoxLayout();
+-    m_showOnAllDesktop = new QPushButton("在所有桌面中显示",this);
+-    m_isDesktopShowing = new QPushButton("获取桌面是否处于显示状态",this);
++    m_showOnAllDesktop = new QPushButton("在所有桌面中显示", this);
++    m_isDesktopShowing = new QPushButton("获取桌面是否处于显示状态", this);
+ 
+     hLayout7->addWidget(m_showOnAllDesktop);
+     hLayout7->addWidget(m_isDesktopShowing);
+ 
+-    QVBoxLayout* vlayout = new QVBoxLayout();
++    QVBoxLayout *vlayout = new QVBoxLayout();
+     vlayout->addLayout(hLayout6);
+     vlayout->addLayout(hLayout7);
+     box2->setLayout(vlayout);
+ 
+-    QGroupBox *box3 = new QGroupBox("2.1需求接口",this);
++    QGroupBox *box3 = new QGroupBox("2.1需求接口", this);
+     QVBoxLayout *vLayout = new QVBoxLayout();
+     QHBoxLayout *hLayout8 = new QHBoxLayout();
+-    m_isOnCurrentDesktop = new QPushButton("被测窗体是否在当前桌面",this);
++    m_isOnCurrentDesktop = new QPushButton("被测窗体是否在当前桌面", this);
+     hLayout8->addStretch();
+     hLayout8->addWidget(m_isOnCurrentDesktop);
+     vLayout->addLayout(hLayout8);
+     box3->setLayout(vLayout);
+ 
+-    QGroupBox *box4 = new QGroupBox("2.3需求接口",this);
+-    m_btnPanelWidget = new QPushButton("显示panel窗口",this);
++    QGroupBox *box4 = new QGroupBox("2.3需求接口", this);
++    m_btnPanelWidget = new QPushButton("显示panel窗口", this);
+     m_chbPanel = new QCheckBox(this);
+     m_chbPanel->setText("设置panel窗体获取焦点");
+     QVBoxLayout *vLayout2 = new QVBoxLayout();
+@@ -245,26 +251,25 @@ void Widget::initUI()
+     vLayout2->addLayout(hLayout9);
+     box4->setLayout(vLayout2);
+ 
+-
+-    m_demandBtn = new QPushButton("demandAttention",this);
+-    m_fullscreenBtn = new QPushButton("全屏",this);
+-    m_processName = new QPushButton("打印进程名",this);
++    m_demandBtn = new QPushButton("demandAttention", this);
++    m_fullscreenBtn = new QPushButton("全屏", this);
++    m_processName = new QPushButton("打印进程名", this);
+     hLayout9->addWidget(m_demandBtn);
+     hLayout9->addWidget(m_fullscreenBtn);
+     hLayout9->addWidget(m_processName);
+     vLayout2->addLayout(hLayout9);
+     box4->setLayout(vLayout2);
+ 
+-    QGroupBox *box5 = new QGroupBox("2.5需求接口",this);
+-    m_getGeometryBtn = new QPushButton("getGeometry",this);
+-    m_setGrabKeyboardBtn = new QPushButton("setGrabKeyboard" ,this);
+-    m_setSwitcherLayer = new QPushButton("setSwitcherLayer" ,this);
++    QGroupBox *box5 = new QGroupBox("2.5需求接口", this);
++    m_getGeometryBtn = new QPushButton("getGeometry", this);
++    m_setGrabKeyboardBtn = new QPushButton("setGrabKeyboard", this);
++    m_setSwitcherLayer = new QPushButton("setSwitcherLayer", this);
+     m_setHighlightBtn = new QPushButton("setHighlight", this);
+     m_unsetHighlightBtn = new QPushButton("unsetHighlight", this);
+-    m_setIconNameBtn = new QPushButton("setIconName",this);
+-    m_unsetIconNameBtn = new QPushButton("unsetIconName",this);
++    m_setIconNameBtn = new QPushButton("setIconName", this);
++    m_unsetIconNameBtn = new QPushButton("unsetIconName", this);
+ 
+-    QHBoxLayout* layout10 = new QHBoxLayout();
++    QHBoxLayout *layout10 = new QHBoxLayout();
+     layout10->addWidget(m_getGeometryBtn);
+     layout10->addWidget(m_setGrabKeyboardBtn);
+     layout10->addWidget(m_setSwitcherLayer);
+@@ -272,19 +277,19 @@ void Widget::initUI()
+     layout10->addWidget(m_setIconNameBtn);
+     layout10->addWidget(m_unsetIconNameBtn);
+ 
+-    QVBoxLayout* vLayout3 = new QVBoxLayout();
++    QVBoxLayout *vLayout3 = new QVBoxLayout();
+     vLayout3->addLayout(layout10);
+ 
+-    m_openUnderCursorBtn = new QPushButton("openUnderCursor",this);
++    m_openUnderCursorBtn = new QPushButton("openUnderCursor", this);
+ 
+-    m_openUnderCursorWithOffsetBtn = new QPushButton("openUnderCursorWithOffset",this);
++    m_openUnderCursorWithOffsetBtn = new QPushButton("openUnderCursorWithOffset", this);
+     m_xOffset = new QSpinBox(this);
+-    m_xOffset->setRange(-1920*2,1920*2);
++    m_xOffset->setRange(-1920 * 2, 1920 * 2);
+     m_xOffset->setValue(10);
+     m_yOffset = new QSpinBox(this);
+     m_yOffset->setValue(10);
+-    m_yOffset->setRange(-1080*2,1080*2);
+-    QHBoxLayout* layout11 = new QHBoxLayout();
++    m_yOffset->setRange(-1080 * 2, 1080 * 2);
++    QHBoxLayout *layout11 = new QHBoxLayout();
+     layout11->addWidget(m_unsetHighlightBtn);
+     layout11->addWidget(m_openUnderCursorBtn);
+     layout11->addWidget(m_openUnderCursorWithOffsetBtn);
+@@ -295,7 +300,7 @@ void Widget::initUI()
+     layout11->addStretch();
+     vLayout3->addLayout(layout11);
+ 
+-    QHBoxLayout* layout12 = new QHBoxLayout();
++    QHBoxLayout *layout12 = new QHBoxLayout();
+     m_getCurrentOutputBtn = new QPushButton(tr("GetCurrentOutput"), this);
+     m_getOutputsInfoBtn = new QPushButton(tr("GetOutputsInfo"), this);
+     layout12->addWidget(m_getCurrentOutputBtn);
+@@ -303,11 +308,11 @@ void Widget::initUI()
+     layout12->addStretch();
+     vLayout3->addLayout(layout12);
+ 
+-    QHBoxLayout* layout13 = new QHBoxLayout();
+-    m_getWindowIdByTitleBtn = new QPushButton("Search",this);
++    QHBoxLayout *layout13 = new QHBoxLayout();
++    m_getWindowIdByTitleBtn = new QPushButton("Search", this);
+     m_getWindowIdByTitleEdit = new QLineEdit(this);
+     m_getWindowIdByTitleEdit->setPlaceholderText("get window id by title");
+-    m_getWindowIdByPidBtn = new QPushButton("Search",this);
++    m_getWindowIdByPidBtn = new QPushButton("Search", this);
+     m_getWindowIdByPidEdit = new QLineEdit(this);
+     m_getWindowIdByPidEdit->setPlaceholderText("get window id by pid");
+     layout13->addWidget(m_getWindowIdByTitleEdit);
+@@ -318,7 +323,6 @@ void Widget::initUI()
+ 
+     box5->setLayout(vLayout3);
+ 
+-
+     mainLayout->addWidget(m_label);
+     mainLayout->addLayout(hLayout1);
+     mainLayout->addWidget(label);
+@@ -339,76 +343,73 @@ void Widget::initUI()
+ }
+ 
+ void Widget::initConnection()
+-{   
+-    connect(m_getWindowIdByPidBtn, &QPushButton::clicked,this,[=](){
+-        qDebug()<<QString("windows id of %1:").arg(m_getWindowIdByPidEdit->text())
+-               <<WindowManager::getWindowIdByPid(m_getWindowIdByPidEdit->text().toInt());
++{
++    connect(m_getWindowIdByPidBtn, &QPushButton::clicked, this, [=]() {
++        qDebug() << QString("windows id of %1:").arg(m_getWindowIdByPidEdit->text())
++                 << WindowManager::getWindowIdByPid(m_getWindowIdByPidEdit->text().toInt());
+     });
+ 
+-    connect(m_getWindowIdByTitleBtn, &QPushButton::clicked,this,[=](){
+-        qDebug()<<QString("windows id of %1:").arg(m_getWindowIdByTitleEdit->text())
+-               <<WindowManager::getWindowIdByTtile(m_getWindowIdByTitleEdit->text());
++    connect(m_getWindowIdByTitleBtn, &QPushButton::clicked, this, [=]() {
++        qDebug() << QString("windows id of %1:").arg(m_getWindowIdByTitleEdit->text())
++                 << WindowManager::getWindowIdByTtile(m_getWindowIdByTitleEdit->text());
+     });
+ 
+-    connect(m_getCurrentOutputBtn,&::QPushButton::clicked, this, [=](){
++    connect(m_getCurrentOutputBtn, &::QPushButton::clicked, this, [=]() {
+         qDebug() << "current output name:" << WindowManager::currentOutputName();
+         qDebug() << "current seat name:" << WindowManager::currentSeatName();
+     });
+ 
+-    connect(m_getOutputsInfoBtn,&::QPushButton::clicked, this, [=](){
+-        QList<OutputInfo*> infos = WindowManager::outputsInfo();
+-        for(auto info : infos)
+-        {
++    connect(m_getOutputsInfoBtn, &::QPushButton::clicked, this, [=]() {
++        QList<OutputInfo *> infos = WindowManager::outputsInfo();
++        for (auto info : infos) {
+             qDebug() << "output name:" << info->outputName();
+-            qDebug() << "output usable area:" << info->usableArea();;
++            qDebug() << "output usable area:" << info->usableArea();
++            ;
+         }
+     });
+-    connect(m_getOutputsInfoBtn,&::QPushButton::clicked, this, [=](){
++    connect(m_getOutputsInfoBtn, &::QPushButton::clicked, this, [=]() {
+         WindowManager::setIconName(m_subWidget->windowHandle(), "kylin-music");
+     });
+-    connect(m_setIconNameBtn,&::QPushButton::clicked, this, [=](){
++    connect(m_setIconNameBtn, &::QPushButton::clicked, this, [=]() {
+         WindowManager::setIconName(m_subWidget->windowHandle(), "kylin-music");
+     });
+ 
+-    connect(m_unsetIconNameBtn,&::QPushButton::clicked, this, [=](){
++    connect(m_unsetIconNameBtn, &::QPushButton::clicked, this, [=]() {
+         WindowManager::setIconName(m_subWidget->windowHandle(), "");
+     });
+ 
+-    connect(m_openUnderCursorWithOffsetBtn,&::QPushButton::clicked, this, [=](){
++    connect(m_openUnderCursorWithOffsetBtn, &::QPushButton::clicked, this, [=]() {
+         WindowManager::setOpenUnderCursor(m_subWidget->windowHandle(), m_xOffset->value(), m_yOffset->value());
+     });
+ 
+-
+-    connect(m_openUnderCursorBtn,&::QPushButton::clicked, this, [=](){
++    connect(m_openUnderCursorBtn, &::QPushButton::clicked, this, [=]() {
+         WindowManager::setOpenUnderCursor(m_subWidget->windowHandle());
+     });
+ 
+-    connect(m_setHighlightBtn,&::QPushButton::clicked, this, [=](){
++    connect(m_setHighlightBtn, &::QPushButton::clicked, this, [=]() {
+         WindowManager::setHighlight(m_lastestWindowId, true);
+     });
+ 
+-    connect(m_unsetHighlightBtn,&::QPushButton::clicked, this, [=](){
++    connect(m_unsetHighlightBtn, &::QPushButton::clicked, this, [=]() {
+         WindowManager::setHighlight(m_lastestWindowId, false);
+     });
+ 
+-    connect(m_setSwitcherLayer,&::QPushButton::clicked, this, [=](){
++    connect(m_setSwitcherLayer, &::QPushButton::clicked, this, [=]() {
+         WindowManager::setWindowLayer(m_subWidget->windowHandle(), WindowLayer::Switcher);
+     });
+ 
+-    connect(m_setGrabKeyboardBtn,&::QPushButton::clicked, this, [=](){
+-        WindowManager::setGrabKeyboard(m_subWidget->windowHandle(),true);
++    connect(m_setGrabKeyboardBtn, &::QPushButton::clicked, this, [=]() {
++        WindowManager::setGrabKeyboard(m_subWidget->windowHandle(), true);
+     });
+ 
+-    connect(m_getGeometryBtn,&QPushButton::clicked,this,[=](){
+-        qDebug()<<WindowManager::windowGeometry(m_lastestWindowId);
++    connect(m_getGeometryBtn, &QPushButton::clicked, this, [=]() {
++        qDebug() << WindowManager::windowGeometry(m_lastestWindowId);
+     });
+-    connect(m_btnPanelWidget,&QPushButton::clicked,this,[=](){
+-        if(m_panelWidget->isVisible())
+-        {   m_panelWidget->hide();
++    connect(m_btnPanelWidget, &QPushButton::clicked, this, [=]() {
++        if (m_panelWidget->isVisible()) {
++            m_panelWidget->hide();
+             m_btnPanelWidget->setText("显示panel窗口");
+-        }
+-        else
+-        {
++        } else {
+             m_panelWidget->show();
+             m_btnPanelWidget->setText("隐藏panel窗口");
+         }
+@@ -416,8 +417,7 @@ void Widget::initConnection()
+         WindowManager::setPanelTakefocus(m_panelWidget->windowHandle(), m_chbPanel->isChecked());
+     });
+ 
+-    connect(m_setTypeBox,static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged),this,[=](int index)
+-    {
++    connect(m_setTypeBox, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), this, [=](int index) {
+         switch (index) {
+         case 0:
+             m_subWidget->setWindowFlags(Qt::Widget);
+@@ -426,7 +426,7 @@ void Widget::initConnection()
+             m_subWidget->setWindowFlags(Qt::Window);
+             break;
+         case 2:
+-        m_subWidget->setWindowFlags(Qt::Dialog);
++            m_subWidget->setWindowFlags(Qt::Dialog);
+             break;
+         case 3:
+             m_subWidget->setWindowFlags(Qt::Sheet);
+@@ -462,229 +462,220 @@ void Widget::initConnection()
+             break;
+         }
+     });
+-    connect(WindowManager::self(),&WindowManager::activeWindowChanged,this,[=](const WindowId&wid){
+-//       qDebug()<<"活动窗口改变:"<<wid;
+-//       qDebug()<<"当前活动窗口为:"<<WindowManager::currentActiveWindow();
++    connect(WindowManager::self(), &WindowManager::activeWindowChanged, this, [=](const WindowId &wid) {
++        //       qDebug()<<"活动窗口改变:"<<wid;
++        //       qDebug()<<"当前活动窗口为:"<<WindowManager::currentActiveWindow();
+     });
+ 
+-    connect(WindowManager::self(),&WindowManager::isShowingDesktopChanged,this,[=](){
+-       qDebug()<<"桌面显示状态改变,桌面处于显示状态:"<<WindowManager::isShowingDesktop();
++    connect(WindowManager::self(), &WindowManager::isShowingDesktopChanged, this, [=]() {
++        qDebug() << "桌面显示状态改变,桌面处于显示状态:" << WindowManager::isShowingDesktop();
+     });
+-    connect(m_btnMinimize,&QPushButton::clicked,this,[=](){
+-           WindowManager::minimizeWindow(m_lastestWindowId);
++    connect(m_btnMinimize, &QPushButton::clicked, this, [=]() {
++        WindowManager::minimizeWindow(m_lastestWindowId);
+     });
+ 
+-    connect(m_btnMaximum,&QPushButton::clicked,this,[=](){
+-           WindowManager::maximizeWindow(m_lastestWindowId);
++    connect(m_btnMaximum, &QPushButton::clicked, this, [=]() {
++        WindowManager::maximizeWindow(m_lastestWindowId);
+     });
+ 
+-    connect(m_btnActivate,&QPushButton::clicked,this,[=](){
+-           WindowManager::activateWindow(m_lastestWindowId);
++    connect(m_btnActivate, &QPushButton::clicked, this, [=]() {
++        WindowManager::activateWindow(m_lastestWindowId);
+     });
+ 
+-    connect(m_btnStayOnTop,&QPushButton::clicked,this,[=](){
+-            WindowManager::keepWindowAbove(m_lastestWindowId);
++    connect(m_btnStayOnTop, &QPushButton::clicked, this, [=]() {
++        WindowManager::keepWindowAbove(m_lastestWindowId);
+     });
+ 
+-    connect(m_btnClose,&QPushButton::clicked,this,[=](){
+-           WindowManager::closeWindow(m_lastestWindowId);
++    connect(m_btnClose, &QPushButton::clicked, this, [=]() {
++        WindowManager::closeWindow(m_lastestWindowId);
+     });
+ 
+-    connect(m_btnShowDesktop,&QPushButton::clicked,this,[=](){
+-            WindowManager::showDesktop();
+-            m_timer->start();
+-            connect(m_timer,&QTimer::timeout,this,[=](){
+-                WindowManager::hideDesktop();
+-            });
++    connect(m_btnShowDesktop, &QPushButton::clicked, this, [=]() {
++        WindowManager::showDesktop();
++        m_timer->start();
++        connect(m_timer, &QTimer::timeout, this, [=]() {
++            WindowManager::hideDesktop();
++        });
+     });
+ 
+-    connect(m_btnShowGroup,&QPushButton::clicked,this,[=](){
+-            qDebug()<<"窗口所属组:"<<WindowManager::getWindowGroup(m_lastestWindowId);
++    connect(m_btnShowGroup, &QPushButton::clicked, this, [=]() {
++        qDebug() << "窗口所属组:" << WindowManager::getWindowGroup(m_lastestWindowId);
+     });
+ 
+-    connect(m_shwWdgbtn,&QPushButton::clicked,this,[=](){
+-            m_subWidget->show();
++    connect(m_shwWdgbtn, &QPushButton::clicked, this, [=]() {
++        m_subWidget->show();
+     });
+ 
+-    connect(m_btnChangeTitle,&QPushButton::clicked,this,[=](){
+-        if(m_subWidget)
+-        {
+-            if(m_subWidget->windowTitle()!= QString("originTitle"))
++    connect(m_btnChangeTitle, &QPushButton::clicked, this, [=]() {
++        if (m_subWidget) {
++            if (m_subWidget->windowTitle() != QString("originTitle"))
+                 m_subWidget->setWindowTitle("originTitle");
+             else
+                 m_subWidget->setWindowTitle("changedTitle");
+         }
+     });
+ 
+-    connect(m_btnChangeIcon,&QPushButton::clicked,this,[=](){
+-        if(m_subWidget)
+-        {
+-            if(!m_subWidget->windowIcon().name().contains("kylin-music"))
++    connect(m_btnChangeIcon, &QPushButton::clicked, this, [=]() {
++        if (m_subWidget) {
++            if (!m_subWidget->windowIcon().name().contains("kylin-music"))
+                 m_subWidget->setWindowIcon(QIcon::fromTheme("kylin-music"));
+             else
+                 m_subWidget->setWindowIcon(QIcon::fromTheme("kylin-network"));
+         }
+     });
+ 
+-    connect(m_shwWindowTitle,&QPushButton::clicked,this,[=](){
+-        if(m_subWidget)
+-            qDebug() << "窗口标题为:"<< WindowManager::getWindowTitle(m_lastestWindowId);
++    connect(m_shwWindowTitle, &QPushButton::clicked, this, [=]() {
++        if (m_subWidget)
++            qDebug() << "窗口标题为:" << WindowManager::getWindowTitle(m_lastestWindowId);
+     });
+-    connect(m_shwWindowIcon,&QPushButton::clicked,this,[=](){
+-        if(m_subWidget)
+-        {
+-            qDebug() <<"窗口图标为:"<<WindowManager::getWindowIcon(m_lastestWindowId);
++    connect(m_shwWindowIcon, &QPushButton::clicked, this, [=]() {
++        if (m_subWidget) {
++            qDebug() << "窗口图标为:" << WindowManager::getWindowIcon(m_lastestWindowId);
+         }
+-
+     });
+-    connect(m_btnprintList,&QPushButton::clicked,this,[=](){
++    connect(m_btnprintList, &QPushButton::clicked, this, [=]() {
+         QList<WindowId> lists = WindowManager::windows();
+-        qDebug()<<"打印窗口列表:";
+-        for(auto id : lists)
+-        {
+-            qDebug()<<id<<"title:"<<WindowManager::getWindowTitle(id)
+-                   <<"pid:"<<WindowManager::getPid(id);
++        qDebug() << "打印窗口列表:";
++        for (auto id : lists) {
++            qDebug() << id << "title:" << WindowManager::getWindowTitle(id)
++                     << "pid:" << WindowManager::getPid(id);
+         }
+     });
+-    connect(m_btnSetGeometry,&QPushButton::clicked,this,[=](){
++    connect(m_btnSetGeometry, &QPushButton::clicked, this, [=]() {
+         m_subWidget->show();
+-        QRect rect(m_posX->value(),m_posY->value(),m_width->value(),m_height->value());
+-        WindowManager::setGeometry(m_subWidget->windowHandle(),rect);
++        QRect rect(m_posX->value(), m_posY->value(), m_width->value(), m_height->value());
++        WindowManager::setGeometry(m_subWidget->windowHandle(), rect);
+     });
+-    connect(m_btnGetType,&QPushButton::clicked,this,[=](){
++    connect(m_btnGetType, &QPushButton::clicked, this, [=]() {
+         /*
+-        *Unknown  = -1,
+-        *Normal   = 0
+-        *Desktop  = 1,
+-        *Dock     = 2,
+-        *Toolbar  = 3,
+-        *Menu     = 4,
+-        *Dialog   = 5,
+-        *Override = 6, // NON STANDARD
+-        *TopMenu  = 7, // NON STANDARD
+-        *Utility  = 8,
+-        *Splash   = 9,
+-        *DropdownMenu = 10,
+-        *PopupMenu = 11,
+-        *Tooltip = 12,
+-        *Notification = 13,
+-        *ComboBox = 14,
+-        *DNDIcon = 15,
+-        *OnScreenDisplay = 16,
+-        *CriticalNotification = 17
+-        */
+-       switch (WindowManager::getWindowType(m_subWidget->winId()))
+-       {
+-       case NET::WindowType::Unknown:
+-           qDebug()<<"Unknown";
+-           break;
+-       case NET::WindowType::Normal:
+-           qDebug()<<"normal";
+-           break;
+-       case NET::WindowType::Desktop:
+-           qDebug()<<"Desktop";
+-           break;
+-       case NET::WindowType::Dock:
+-           qDebug()<<"Dock";
+-           break;
+-       case NET::WindowType::Toolbar:
+-           qDebug()<<"Toolbar";
+-           break;
+-       case NET::WindowType::Menu:
+-           qDebug()<<"Menu";
+-           break;
+-       case NET::WindowType::Dialog:
+-           qDebug()<<"Dialog";
+-           break;
+-       case NET::WindowType::Override:
+-           qDebug()<<"Override";
+-           break;
+-       case NET::WindowType::TopMenu:
+-           qDebug()<<"TopMenu";
+-           break;
+-       case NET::WindowType::Splash:
+-           qDebug()<<"Splash";
+-           break;
+-       case NET::WindowType::Utility:
+-           qDebug()<<"Utility";
+-           break;
+-       case NET::WindowType::DropdownMenu:
+-           qDebug()<<"DropdownMenu";
+-           break;
+-       case NET::WindowType::PopupMenu:
+-           qDebug()<<"PopupMenu";
+-           break;
+-       case NET::WindowType::Tooltip:
+-           qDebug()<<"Tooltip";
+-           break;
+-       case NET::WindowType::Notification:
+-           qDebug()<<"Notification";
+-           break;
+-       case NET::WindowType::ComboBox:
+-           qDebug()<<"ComboBox";
+-           break;
+-       case NET::WindowType::DNDIcon:
+-           qDebug()<<"DNDIcon";
+-           break;
+-       case NET::WindowType::OnScreenDisplay:
+-           qDebug()<<"OnScreenDisplay";
+-           break;
+-       case NET::WindowType::CriticalNotification:
+-           qDebug()<<"CriticalNotification";
+-           break;
+-       default:
+-           qDebug()<<WindowManager::getWindowType(m_subWidget->winId());
+-           break;
+-       } ;
+-    });
+-
+-    connect(m_skipTaskbarBtn,&QPushButton::clicked,this,[=](){;
+-        WindowManager::setSkipTaskBar(m_subWidget->windowHandle(),true);
+-        QTimer::singleShot(1000,this,[=](){
+-            qDebug()<<"跳过任务栏:"<<WindowManager::skipTaskBar(m_lastestWindowId);
+-        });
++         *Unknown  = -1,
++         *Normal   = 0
++         *Desktop  = 1,
++         *Dock     = 2,
++         *Toolbar  = 3,
++         *Menu     = 4,
++         *Dialog   = 5,
++         *Override = 6, // NON STANDARD
++         *TopMenu  = 7, // NON STANDARD
++         *Utility  = 8,
++         *Splash   = 9,
++         *DropdownMenu = 10,
++         *PopupMenu = 11,
++         *Tooltip = 12,
++         *Notification = 13,
++         *ComboBox = 14,
++         *DNDIcon = 15,
++         *OnScreenDisplay = 16,
++         *CriticalNotification = 17
++         */
++        switch (WindowManager::getWindowType(m_subWidget->winId())) {
++        case NET::WindowType::Unknown:
++            qDebug() << "Unknown";
++            break;
++        case NET::WindowType::Normal:
++            qDebug() << "normal";
++            break;
++        case NET::WindowType::Desktop:
++            qDebug() << "Desktop";
++            break;
++        case NET::WindowType::Dock:
++            qDebug() << "Dock";
++            break;
++        case NET::WindowType::Toolbar:
++            qDebug() << "Toolbar";
++            break;
++        case NET::WindowType::Menu:
++            qDebug() << "Menu";
++            break;
++        case NET::WindowType::Dialog:
++            qDebug() << "Dialog";
++            break;
++        case NET::WindowType::Override:
++            qDebug() << "Override";
++            break;
++        case NET::WindowType::TopMenu:
++            qDebug() << "TopMenu";
++            break;
++        case NET::WindowType::Splash:
++            qDebug() << "Splash";
++            break;
++        case NET::WindowType::Utility:
++            qDebug() << "Utility";
++            break;
++        case NET::WindowType::DropdownMenu:
++            qDebug() << "DropdownMenu";
++            break;
++        case NET::WindowType::PopupMenu:
++            qDebug() << "PopupMenu";
++            break;
++        case NET::WindowType::Tooltip:
++            qDebug() << "Tooltip";
++            break;
++        case NET::WindowType::Notification:
++            qDebug() << "Notification";
++            break;
++        case NET::WindowType::ComboBox:
++            qDebug() << "ComboBox";
++            break;
++        case NET::WindowType::DNDIcon:
++            qDebug() << "DNDIcon";
++            break;
++        case NET::WindowType::OnScreenDisplay:
++            qDebug() << "OnScreenDisplay";
++            break;
++        case NET::WindowType::CriticalNotification:
++            qDebug() << "CriticalNotification";
++            break;
++        default:
++            qDebug() << WindowManager::getWindowType(m_subWidget->winId());
++            break;
++        };
++    });
+ 
++    connect(m_skipTaskbarBtn, &QPushButton::clicked, this, [=]() {
++        ;
++        WindowManager::setSkipTaskBar(m_subWidget->windowHandle(), true);
++        QTimer::singleShot(1000, this, [=]() {
++            qDebug() << "跳过任务栏:" << WindowManager::skipTaskBar(m_lastestWindowId);
++        });
+     });
+-    connect(m_skipSwitcherBtn,&QPushButton::clicked,this,[=](){
+-        WindowManager::setSkipSwitcher(m_subWidget->windowHandle(),true);
+-        QTimer::singleShot(1000,this,[=](){
+-            qDebug()<<"跳过窗口选择器"<<WindowManager::skipSwitcher(m_lastestWindowId);
++    connect(m_skipSwitcherBtn, &QPushButton::clicked, this, [=]() {
++        WindowManager::setSkipSwitcher(m_subWidget->windowHandle(), true);
++        QTimer::singleShot(1000, this, [=]() {
++            qDebug() << "跳过窗口选择器" << WindowManager::skipSwitcher(m_lastestWindowId);
+         });
+     });
+-    connect(m_showOnAllDesktop,&QPushButton::clicked,this,[=](){
++    connect(m_showOnAllDesktop, &QPushButton::clicked, this, [=]() {
+         WindowManager::setOnAllDesktops(m_lastestWindowId);
+-        QTimer::singleShot(1000,this,[=](){
+-        qDebug()<<"设置窗口在所有桌面中显示:"<<WindowManager::isOnAllDesktops(m_lastestWindowId);
++        QTimer::singleShot(1000, this, [=]() {
++            qDebug() << "设置窗口在所有桌面中显示:" << WindowManager::isOnAllDesktops(m_lastestWindowId);
+         });
+     });
+-    connect(m_isDesktopShowing,&QPushButton::clicked,this,[=](){
+-        qDebug()<<"桌面处于显示状态:"<<WindowManager::isShowingDesktop();
++    connect(m_isDesktopShowing, &QPushButton::clicked, this, [=]() {
++        qDebug() << "桌面处于显示状态:" << WindowManager::isShowingDesktop();
+     });
+-    connect(m_isOnCurrentDesktop,&QPushButton::clicked,this,[=](){
+-        qDebug()<<m_lastestWindowId;
+-        qDebug()<<"被测窗体是否在当前桌面:"<<WindowManager::isOnCurrentDesktop(m_lastestWindowId);
++    connect(m_isOnCurrentDesktop, &QPushButton::clicked, this, [=]() {
++        qDebug() << m_lastestWindowId;
++        qDebug() << "被测窗体是否在当前桌面:" << WindowManager::isOnCurrentDesktop(m_lastestWindowId);
+     });
+ 
+-    connect(m_demandBtn,&QPushButton::clicked,this,[=](){
+-        QTimer::singleShot(2000,this,[=](){
++    connect(m_demandBtn, &QPushButton::clicked, this, [=]() {
++        QTimer::singleShot(2000, this, [=]() {
+             WindowManager::demandAttention(m_lastestWindowId);
+         });
+-
+     });
+-    connect(m_fullscreenBtn,&QPushButton::clicked,this,[=](){
+-        if(!m_subWidget)
++    connect(m_fullscreenBtn, &QPushButton::clicked, this, [=]() {
++        if (!m_subWidget)
+             return;
+-        if(m_subWidget->isFullScreen())
+-        {
+-            m_subWidget->resize(640,480);
++        if (m_subWidget->isFullScreen()) {
++            m_subWidget->resize(640, 480);
+             m_subWidget->showNormal();
+-        }
+-        else
++        } else
+             m_subWidget->showFullScreen();
+     });
+-    connect(m_processName,&QPushButton::clicked,this,[=](){
+-        if(!m_subWidget)
++    connect(m_processName, &QPushButton::clicked, this, [=]() {
++        if (!m_subWidget)
+             return;
+-        qDebug()<<WindowManager::getProcessName(m_lastestWindowId);
++        qDebug() << WindowManager::getProcessName(m_lastestWindowId);
+     });
+ }
+diff --git a/kysdk-waylandhelper/test/testWindowManager/widget.h b/kysdk-waylandhelper/test/testWindowManager/widget.h
+index 8d72aee..f43263b 100644
+--- a/kysdk-waylandhelper/test/testWindowManager/widget.h
++++ b/kysdk-waylandhelper/test/testWindowManager/widget.h
+@@ -23,14 +23,14 @@
+ #ifndef WIDGET_H
+ #define WIDGET_H
+ 
+-#include <QWidget>
+-#include <QPushButton>
+-#include <QTimer>
+-#include <QLabel>
++#include "windowmanager/windowmanager.h"
++#include <QCheckBox>
+ #include <QDialog>
++#include <QLabel>
+ #include <QLineEdit>
+-#include <QCheckBox>
+-#include "windowmanager/windowmanager.h"
++#include <QPushButton>
++#include <QTimer>
++#include <QWidget>
+ 
+ using namespace kdk;
+ class QSpinBox;
+@@ -46,59 +46,59 @@ public:
+     void initConnection();
+ 
+ private:
+-    QLabel* m_label;
+-    QWidget* m_subWidget;
+-    QPushButton* m_btnMinimize;
+-    QPushButton* m_btnMaximum;
+-    QPushButton* m_btnActivate;
+-    QPushButton* m_btnStayOnTop;
+-    QPushButton* m_btnClose;
+-    QPushButton* m_btnShowDesktop;
+-    QPushButton* m_btnChangeIcon;
+-    QPushButton* m_btnChangeTitle;
+-    QPushButton* m_btnShowGroup;
+-    QPushButton* m_shwWdgbtn;
+-    QPushButton* m_shwWindowTitle;
+-    QPushButton* m_shwWindowIcon;
+-    QPushButton* m_btnprintList;
+-    QPushButton* m_btnSetGeometry;
+-    QPushButton* m_btnGetType;
+-    QComboBox* m_setTypeBox;
++    QLabel *m_label;
++    QWidget *m_subWidget;
++    QPushButton *m_btnMinimize;
++    QPushButton *m_btnMaximum;
++    QPushButton *m_btnActivate;
++    QPushButton *m_btnStayOnTop;
++    QPushButton *m_btnClose;
++    QPushButton *m_btnShowDesktop;
++    QPushButton *m_btnChangeIcon;
++    QPushButton *m_btnChangeTitle;
++    QPushButton *m_btnShowGroup;
++    QPushButton *m_shwWdgbtn;
++    QPushButton *m_shwWindowTitle;
++    QPushButton *m_shwWindowIcon;
++    QPushButton *m_btnprintList;
++    QPushButton *m_btnSetGeometry;
++    QPushButton *m_btnGetType;
++    QComboBox *m_setTypeBox;
+     kdk::WindowManager *m_manager;
+     QSpinBox *m_posX;
+     QSpinBox *m_posY;
+     QSpinBox *m_width;
+     QSpinBox *m_height;
+-    QTimer* m_timer;
++    QTimer *m_timer;
+     WindowId m_lastestWindowId;
+-    QPushButton* m_skipTaskbarBtn;
+-    QPushButton* m_skipSwitcherBtn;
+-    QPushButton* m_showOnAllDesktop;
+-    QPushButton* m_isDesktopShowing;
+-    QPushButton* m_isOnCurrentDesktop;
+-    QPushButton* m_btnPanelWidget;
+-    QCheckBox* m_chbPanel;
++    QPushButton *m_skipTaskbarBtn;
++    QPushButton *m_skipSwitcherBtn;
++    QPushButton *m_showOnAllDesktop;
++    QPushButton *m_isDesktopShowing;
++    QPushButton *m_isOnCurrentDesktop;
++    QPushButton *m_btnPanelWidget;
++    QCheckBox *m_chbPanel;
+     bool m_isPanelShown;
+-    QWidget* m_panelWidget;
+-    QPushButton* m_demandBtn;
+-    QPushButton* m_fullscreenBtn;
+-    QPushButton* m_processName;
+-    QPushButton* m_getGeometryBtn;
+-    QPushButton* m_setGrabKeyboardBtn;
+-    QPushButton* m_setSwitcherLayer;
+-    QPushButton* m_setHighlightBtn;
+-    QPushButton* m_unsetHighlightBtn;
+-    QPushButton* m_openUnderCursorBtn;
+-    QPushButton* m_openUnderCursorWithOffsetBtn;
++    QWidget *m_panelWidget;
++    QPushButton *m_demandBtn;
++    QPushButton *m_fullscreenBtn;
++    QPushButton *m_processName;
++    QPushButton *m_getGeometryBtn;
++    QPushButton *m_setGrabKeyboardBtn;
++    QPushButton *m_setSwitcherLayer;
++    QPushButton *m_setHighlightBtn;
++    QPushButton *m_unsetHighlightBtn;
++    QPushButton *m_openUnderCursorBtn;
++    QPushButton *m_openUnderCursorWithOffsetBtn;
+     QSpinBox *m_xOffset;
+     QSpinBox *m_yOffset;
+-    QPushButton* m_setIconNameBtn;
+-    QPushButton* m_unsetIconNameBtn;
+-    QPushButton* m_getCurrentOutputBtn;
+-    QPushButton* m_getOutputsInfoBtn;
+-    QPushButton* m_getWindowIdByTitleBtn;
+-    QLineEdit* m_getWindowIdByTitleEdit;
+-    QPushButton* m_getWindowIdByPidBtn;
+-    QLineEdit* m_getWindowIdByPidEdit;
++    QPushButton *m_setIconNameBtn;
++    QPushButton *m_unsetIconNameBtn;
++    QPushButton *m_getCurrentOutputBtn;
++    QPushButton *m_getOutputsInfoBtn;
++    QPushButton *m_getWindowIdByTitleBtn;
++    QLineEdit *m_getWindowIdByTitleEdit;
++    QPushButton *m_getWindowIdByPidBtn;
++    QLineEdit *m_getWindowIdByPidEdit;
+ };
+ #endif // WIDGET_H
+diff --git a/kysdk-waylandhelper/test/testidlenotifier/widget.cpp b/kysdk-waylandhelper/test/testidlenotifier/widget.cpp
+index 6a0b849..b517c96 100644
+--- a/kysdk-waylandhelper/test/testidlenotifier/widget.cpp
++++ b/kysdk-waylandhelper/test/testidlenotifier/widget.cpp
+@@ -8,15 +8,14 @@ Widget::Widget(QWidget *parent)
+ {
+     IdleNotifier *notifier = new IdleNotifier(this);
+     notifier->setIdleInterval(10);
+-    connect(notifier, &IdleNotifier::idled,[=](){
+-        qDebug() <<"idled";
++    connect(notifier, &IdleNotifier::idled, [=]() {
++        qDebug() << "idled";
+     });
+-    connect(notifier, &IdleNotifier::resumed,[=](){
+-        qDebug() <<"resumed";
++    connect(notifier, &IdleNotifier::resumed, [=]() {
++        qDebug() << "resumed";
+     });
+ }
+ 
+ Widget::~Widget()
+ {
+ }
+-
+diff --git a/kysdk-waylandhelper/test/testidlenotifier/widget.h b/kysdk-waylandhelper/test/testidlenotifier/widget.h
+index d705886..29f0302 100644
+--- a/kysdk-waylandhelper/test/testidlenotifier/widget.h
++++ b/kysdk-waylandhelper/test/testidlenotifier/widget.h
+@@ -1,8 +1,8 @@
+ #ifndef WIDGET_H
+ #define WIDGET_H
+ 
+-#include <QWidget>
+ #include "windowmanager/idlenotifier.h"
++#include <QWidget>
+ 
+ class Widget : public QWidget
+ {
+diff --git a/kysdk-waylandhelper/test/testukuistylehelper/widget.cpp b/kysdk-waylandhelper/test/testukuistylehelper/widget.cpp
+index 588445b..96c5f55 100644
+--- a/kysdk-waylandhelper/test/testukuistylehelper/widget.cpp
++++ b/kysdk-waylandhelper/test/testukuistylehelper/widget.cpp
+@@ -26,27 +26,22 @@
+ Widget::Widget(QWidget *parent)
+     : QWidget(parent)
+ {
+-    m_btn = new QPushButton("switch",this);
++    m_btn = new QPushButton("switch", this);
+     m_btn->setCheckable(true);
+-    m_btn->move(100,100);
++    m_btn->move(100, 100);
+     m_testWidget = new QWidget();
+ 
+-    connect(m_btn,&QPushButton::clicked,this,[=](bool checked)
+-    {
+-        if(checked)
+-        {
++    connect(m_btn, &QPushButton::clicked, this, [=](bool checked) {
++        if (checked) {
+             kdk::UkuiStyleHelper::self()->removeHeader(m_testWidget);
+             m_testWidget->show();
+-            kdk::WindowManager::setGeometry(m_testWidget->windowHandle(),QRect(0,0,600,400));
+-            kdk::WindowManager::setWindowRadius(m_testWidget->windowHandle(),0);
+-        }
+-        else
++            kdk::WindowManager::setGeometry(m_testWidget->windowHandle(), QRect(0, 0, 600, 400));
++            kdk::WindowManager::setWindowRadius(m_testWidget->windowHandle(), 0);
++        } else
+             m_testWidget->hide();
+-
+     });
+ }
+ 
+ Widget::~Widget()
+ {
+ }
+-
+diff --git a/kysdk-waylandhelper/test/testukuistylehelper/widget.h b/kysdk-waylandhelper/test/testukuistylehelper/widget.h
+index 3069478..6174aa0 100644
+--- a/kysdk-waylandhelper/test/testukuistylehelper/widget.h
++++ b/kysdk-waylandhelper/test/testukuistylehelper/widget.h
+@@ -23,8 +23,8 @@
+ #ifndef WIDGET_H
+ #define WIDGET_H
+ 
+-#include <QWidget>
+ #include <QPushButton>
++#include <QWidget>
+ 
+ class Widget : public QWidget
+ {
+@@ -35,7 +35,7 @@ public:
+     ~Widget();
+ 
+ private:
+-    QPushButton*m_btn;
++    QPushButton *m_btn;
+     QWidget *m_testWidget;
+ };
+ #endif // WIDGET_H
+diff --git a/kysdk-waylandhelper/test/testxdgactivation/main.cpp b/kysdk-waylandhelper/test/testxdgactivation/main.cpp
+index 9a19178..66284bf 100644
+--- a/kysdk-waylandhelper/test/testxdgactivation/main.cpp
++++ b/kysdk-waylandhelper/test/testxdgactivation/main.cpp
+@@ -1,10 +1,10 @@
+-#include "widget.h"
+ #include "ukuistylehelper/ukuistylehelper.h"
++#include "widget.h"
+ #include "windowmanager/windowmanager.h"
+-#include <QVBoxLayout>
+-#include <QPushButton>
+-#include <QDebug>
+ #include <QApplication>
++#include <QDebug>
++#include <QPushButton>
++#include <QVBoxLayout>
+ 
+ int main(int argc, char *argv[])
+ {
+@@ -20,6 +20,7 @@ int main(int argc, char *argv[])
+     window2.setWindowTitle("Window 2");
+     window2.show();
+     QObject::connect(&p, &QPushButton::clicked, &a, [&] {
+-    kdk::WindowManager::activateWindow(window1.windowHandle(),window2.windowHandle());});
++        kdk::WindowManager::activateWindow(window1.windowHandle(), window2.windowHandle());
++    });
+     return a.exec();
+ }
+diff --git a/kysdk-waylandhelper/test/testxdgactivation/widget.cpp b/kysdk-waylandhelper/test/testxdgactivation/widget.cpp
+index 7350ff4..5fd997c 100644
+--- a/kysdk-waylandhelper/test/testxdgactivation/widget.cpp
++++ b/kysdk-waylandhelper/test/testxdgactivation/widget.cpp
+@@ -8,4 +8,3 @@ Widget::Widget(QWidget *parent)
+ Widget::~Widget()
+ {
+ }
+-
+diff --git a/kysdk-widgetutils/src/kwidgetutils.cpp b/kysdk-widgetutils/src/kwidgetutils.cpp
+index a64a4b8..6d11d4e 100644
+--- a/kysdk-widgetutils/src/kwidgetutils.cpp
++++ b/kysdk-widgetutils/src/kwidgetutils.cpp
+@@ -22,12 +22,12 @@
+ 
+ #include "kwidgetutils.h"
+ #include <QApplication>
+-#include <QGuiApplication>
++#include <QByteArray>
+ #include <QDebug>
+-#include <QtDBus/QtDBus>
+ #include <QGSettings/QGSettings>
+-#include <QByteArray>
++#include <QGuiApplication>
+ #include <QVariant>
++#include <QtDBus/QtDBus>
+ 
+ #define KWIN_SERVICE "org.ukui.KWin"
+ #define KWIN_PATH "/Compositor"
+@@ -36,7 +36,6 @@ using namespace kdk;
+ 
+ KWidgetUtils::KWidgetUtils()
+ {
+-
+ }
+ 
+ void KWidgetUtils::highDpiScaling()
+@@ -44,45 +43,39 @@ void KWidgetUtils::highDpiScaling()
+ #if (QT_VERSION >= QT_VERSION_CHECK(5, 6, 0))
+     QApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
+     QApplication::setAttribute(Qt::AA_UseHighDpiPixmaps);
+-    qDebug()<<"setAttribute success";
++    qDebug() << "setAttribute success";
+ #endif
+ #if (QT_VERSION >= QT_VERSION_CHECK(5, 14, 0))
+     QApplication::setHighDpiScaleFactorRoundingPolicy(Qt::HighDpiScaleFactorRoundingPolicy::PassThrough);
+-    qDebug()<<"setHighDpiScaleFactorRoundingPolicy success";
++    qDebug() << "setHighDpiScaleFactorRoundingPolicy success";
+ #endif
+ }
+ 
+ bool KWidgetUtils::checkCompositorRunning()
+ {
+-    QDBusInterface dbus_iface (KWIN_SERVICE, KWIN_PATH, KWIN_INTERFACE, QDBusConnection::sessionBus());
+-    QVariant reply = dbus_iface.property ("active");
++    QDBusInterface dbus_iface(KWIN_SERVICE, KWIN_PATH, KWIN_INTERFACE, QDBusConnection::sessionBus());
++    QVariant reply = dbus_iface.property("active");
+     bool isfoundCompositingManger = false;
+     if (reply.toBool()) {
+         isfoundCompositingManger = true;
+     }
+ 
+-    if(!isfoundCompositingManger)
+-    {
+-        if(QGSettings::isSchemaInstalled("org.gnome.metacity"))
+-        {
++    if (!isfoundCompositingManger) {
++        if (QGSettings::isSchemaInstalled("org.gnome.metacity")) {
+             QProcess process;
+             process.start("sh -c \"ps -e |grep metacity\"");
+-            if(process.waitForStarted(100)&&process.waitForFinished(100) && process.readAllStandardOutput().contains("metacity"))
+-            {
++            if (process.waitForStarted(100) && process.waitForFinished(100) && process.readAllStandardOutput().contains("metacity")) {
+                 QGSettings metacityGSettings("org.gnome.metacity", "/org/gnome/metacity/");
+                 isfoundCompositingManger = metacityGSettings.get("compositing-manager").toBool();
+             }
+         }
+     }
+ 
+-    if(!isfoundCompositingManger)
+-    {
+-        if(QGSettings::isSchemaInstalled("org.mate.Marco.general"))
+-        {
++    if (!isfoundCompositingManger) {
++        if (QGSettings::isSchemaInstalled("org.mate.Marco.general")) {
+             QProcess process;
+             process.start("sh -c \"ps -e |grep marco\"");
+-            if(process.waitForStarted(100)&&process.waitForFinished(100) && process.readAllStandardOutput().contains("marco"))
+-            {
++            if (process.waitForStarted(100) && process.waitForFinished(100) && process.readAllStandardOutput().contains("marco")) {
+                 QGSettings marcoGSettings("org.mate.Marco.general", "/org/mate/marco/general/");
+                 isfoundCompositingManger = marcoGSettings.get("compositing-manager").toBool();
+             }
+diff --git a/kysdk-widgetutils/src/kwidgetutils.h b/kysdk-widgetutils/src/kwidgetutils.h
+index 9946e91..930f75e 100644
+--- a/kysdk-widgetutils/src/kwidgetutils.h
++++ b/kysdk-widgetutils/src/kwidgetutils.h
+@@ -38,7 +38,6 @@ public:
+      */
+     static void highDpiScaling();
+ 
+-
+     /**
+      * @brief 判断合成器是否开启
+      *
+diff --git a/kysdk-widgetutils/src/kysdk-widgetutils_global.h b/kysdk-widgetutils/src/kysdk-widgetutils_global.h
+index 6cea8a1..0937409 100644
+--- a/kysdk-widgetutils/src/kysdk-widgetutils_global.h
++++ b/kysdk-widgetutils/src/kysdk-widgetutils_global.h
+@@ -26,9 +26,9 @@
+ #include <QtCore/qglobal.h>
+ 
+ #if defined(KYSDKWIDGETUTILS_LIBRARY)
+-#  define KYSDKWIDGETUTILS_EXPORT Q_DECL_EXPORT
++#define KYSDKWIDGETUTILS_EXPORT Q_DECL_EXPORT
+ #else
+-#  define KYSDKWIDGETUTILS_EXPORT Q_DECL_IMPORT
++#define KYSDKWIDGETUTILS_EXPORT Q_DECL_IMPORT
+ #endif
+ 
+ #endif // KYSDKWIDGETUTILS_GLOBAL_H
+diff --git a/kysdk-widgetutils/test/build-testWidgetutils-unknown-Debug/moc_predefs.h b/kysdk-widgetutils/test/build-testWidgetutils-unknown-Debug/moc_predefs.h
+index d58a5d4..b52fcca 100644
+--- a/kysdk-widgetutils/test/build-testWidgetutils-unknown-Debug/moc_predefs.h
++++ b/kysdk-widgetutils/test/build-testWidgetutils-unknown-Debug/moc_predefs.h
+@@ -9,7 +9,7 @@
+ #define __FLT_MIN__ 1.17549435082228750796873653722224568e-38F
+ #define __GCC_IEC_559_COMPLEX 2
+ #define __UINT_LEAST8_TYPE__ unsigned char
+-#define __INTMAX_C(c) c ## L
++#define __INTMAX_C(c) c##L
+ #define __CHAR_BIT__ 8
+ #define __UINT8_MAX__ 0xff
+ #define __WINT_MAX__ 0xffffffffU
+@@ -72,14 +72,14 @@
+ #define __SCHAR_MAX__ 0x7f
+ #define __FLT128_MANT_DIG__ 113
+ #define __WCHAR_MIN__ 0U
+-#define __INT64_C(c) c ## L
++#define __INT64_C(c) c##L
+ #define __DBL_DIG__ 15
+ #define __GCC_ATOMIC_POINTER_LOCK_FREE 2
+ #define __FLT64X_MANT_DIG__ 113
+ #define __SIZEOF_INT__ 4
+ #define __SIZEOF_POINTER__ 8
+ #define __GCC_ATOMIC_CHAR16_T_LOCK_FREE 2
+-#define __USER_LABEL_PREFIX__ 
++#define __USER_LABEL_PREFIX__
+ #define __FLT64X_EPSILON__ 1.92592994438723585305597794258492732e-34F64x
+ #define __STDC_HOSTED__ 1
+ #define __LDBL_HAS_INFINITY__ 1
+@@ -180,7 +180,7 @@
+ #define __FLT16_MIN_10_EXP__ (-4)
+ #define __FLT64X_DECIMAL_DIG__ 36
+ #define __DEC128_MIN__ 1E-6143DL
+-#define __REGISTER_PREFIX__ 
++#define __REGISTER_PREFIX__
+ #define __UINT16_MAX__ 0xffff
+ #define __FLT32_MIN__ 1.17549435082228750796873653722224568e-38F32
+ #define __UINT8_TYPE__ unsigned char
+@@ -188,7 +188,7 @@
+ #define __FLT_MANT_DIG__ 24
+ #define __LDBL_DECIMAL_DIG__ 36
+ #define __VERSION__ "9.3.0"
+-#define __UINT64_C(c) c ## UL
++#define __UINT64_C(c) c##UL
+ #define __cpp_unicode_characters 200704
+ #define _STDC_PREDEF_H 1
+ #define __ARM_FEATURE_FMA 1
+@@ -224,7 +224,7 @@
+ #define __INT_LEAST16_TYPE__ short int
+ #define __ARM_ARCH_PROFILE 65
+ #define __LDBL_EPSILON__ 1.92592994438723585305597794258492732e-34L
+-#define __UINTMAX_C(c) c ## UL
++#define __UINTMAX_C(c) c##UL
+ #define __GLIBCXX_BITSIZE_INT_N_0 128
+ #define __ARM_PCS_AAPCS64 1
+ #define __SIG_ATOMIC_MAX__ 0x7fffffff
+@@ -343,7 +343,7 @@
+ #define __FLT32X_MAX__ 1.79769313486231570814527423731704357e+308F32x
+ #define __cpp_runtime_arrays 198712
+ #define __UINT64_TYPE__ long unsigned int
+-#define __UINT32_C(c) c ## U
++#define __UINT32_C(c) c##U
+ #define __INTMAX_MAX__ 0x7fffffffffffffffL
+ #define __cpp_alias_templates 200704
+ #define __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__
+diff --git a/kysdk-widgetutils/test/testWidgetutils/main.cpp b/kysdk-widgetutils/test/testWidgetutils/main.cpp
+index f02e134..6228714 100644
+--- a/kysdk-widgetutils/test/testWidgetutils/main.cpp
++++ b/kysdk-widgetutils/test/testWidgetutils/main.cpp
+@@ -21,15 +21,15 @@
+  */
+ 
+ #include "widget.h"
+-#include <QDebug>
+ #include <QApplication>
++#include <QDebug>
+ 
+ int main(int argc, char *argv[])
+ {
+     KWidgetUtils::highDpiScaling();
+     QApplication a(argc, argv);
+     Widget w;
+-    qDebug()<<"Compositor is running:"<< KWidgetUtils::checkCompositorRunning();
++    qDebug() << "Compositor is running:" << KWidgetUtils::checkCompositorRunning();
+     w.show();
+     return a.exec();
+ }
+diff --git a/kysdk-widgetutils/test/testWidgetutils/widget.cpp b/kysdk-widgetutils/test/testWidgetutils/widget.cpp
+index d4fa055..bb02d04 100644
+--- a/kysdk-widgetutils/test/testWidgetutils/widget.cpp
++++ b/kysdk-widgetutils/test/testWidgetutils/widget.cpp
+@@ -30,4 +30,3 @@ Widget::Widget(QWidget *parent)
+ Widget::~Widget()
+ {
+ }
+-
+diff --git a/pre-commit b/pre-commit
+new file mode 100644
+index 0000000..2b0d40f
+--- /dev/null
++++ b/pre-commit
+@@ -0,0 +1,14 @@
++#!/bin/bash
++
++# This script is used to format the code using clang-format before git commit.
++
++readonly output=$(git clang-format --extensions 'cpp,h,hpp,c' -v --diff)
++
++if [[ "$output" == *"no modified files to format"* ]]; then exit 0; fi
++if [[ "$output" == *"clang-format did not modify any files"* ]]; then exit 0; fi
++
++echo "ERROR: You have unformatted changes, please format your files. You can do this using the following commands:"
++echo "       git clang-format --extensions 'cpp,h,hpp,c' --force # format the changed parts"
++echo "       git clang-format --extensions 'cpp,h,hpp,c' --diff # preview the changes done by the formatter"
++exit 1
++
diff -Nru libkysdk-applications-2.5.1.0/debian/patches/0009-fix-a-critical-bug.patch libkysdk-applications-2.5.2.0/debian/patches/0009-fix-a-critical-bug.patch
--- libkysdk-applications-2.5.1.0/debian/patches/0009-fix-a-critical-bug.patch	2024-07-31 11:09:38.000000000 +0800
+++ libkysdk-applications-2.5.2.0/debian/patches/0009-fix-a-critical-bug.patch	1970-01-01 08:00:00.000000000 +0800
@@ -1,53 +0,0 @@
-From: sunzhen <sunzhen1@kylinos.cn>
-Date: Fri, 31 May 2024 11:41:09 +0800
-Subject: fix a critical bug
-
----
- kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.cpp | 10 ++++------
- kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.h   |  1 +
- 2 files changed, 5 insertions(+), 6 deletions(-)
-
-diff --git a/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.cpp b/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.cpp
-index ce45a12..16b13ae 100644
---- a/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.cpp
-+++ b/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.cpp
-@@ -18,6 +18,8 @@ void handle_global_remove(void *data, struct wl_registry *wl_registry, uint32_t
- 
- }
- 
-+const struct wl_registry_listener UkuiWaylandInterface::s_registryListener = {handle_global, handle_global_remove};
-+
- UkuiWaylandInterface::UkuiWaylandInterface(QObject *parent)
-     : AbstractInterface(parent)
- {
-@@ -32,16 +34,12 @@ UkuiWaylandInterface::UkuiWaylandInterface(QObject *parent)
-         }
-     });
- 
--    struct wl_registry_listener registry_listener = {
--        .global = handle_global,
--        .global_remove = handle_global_remove
--    };
-     wl_registry* registry = *m_registry;
--    wl_registry_add_listener(registry, &registry_listener, this);
-+    wl_registry_add_listener(registry, &s_registryListener, this);
-     wl_display_roundtrip(m_connection->display());
- 
-     m_registry->setup();
--    m_connection->roundtrip();
-+//    m_connection->roundtrip();
- }
- 
- UkuiWaylandInterface::~UkuiWaylandInterface()
-diff --git a/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.h b/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.h
-index ca9eddd..60853b5 100644
---- a/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.h
-+++ b/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.h
-@@ -103,6 +103,7 @@ private:
-     void ukuiWindowCreatedProxy(UkuiWindow* w);
-     void trackUkuiWindow(UkuiWindow *w);
-     void untrackUkuiWindow(UkuiWindow *w);
-+    static const struct wl_registry_listener s_registryListener;
- 
- private:
-     ExtIdleNotifier *m_notifier = nullptr;
diff -Nru libkysdk-applications-2.5.1.0/debian/patches/0010-42-add-ukui-window-helper-module-based-ukuishellv1-p.patch libkysdk-applications-2.5.2.0/debian/patches/0010-42-add-ukui-window-helper-module-based-ukuishellv1-p.patch
--- libkysdk-applications-2.5.1.0/debian/patches/0010-42-add-ukui-window-helper-module-based-ukuishellv1-p.patch	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/debian/patches/0010-42-add-ukui-window-helper-module-based-ukuishellv1-p.patch	2025-03-17 13:09:05.000000000 +0800
@@ -0,0 +1,1537 @@
+From: "Mr.Sun" <sunzhen1@kylinos.cn>
+Date: Mon, 17 Mar 2025 07:49:11 +0000
+Subject: =?utf-8?q?!42_add_ukui_window_helper_module_based_ukuishellv1_prot?=
+ =?utf-8?q?ocol_Merge_pull_request_!42_from_=E5=88=98=E6=9D=B0/work/ukui=5F?=
+ =?utf-8?q?shell=5Fv1?=
+
+---
+ .gitignore                                         |   3 -
+ .vscode/launch.json                                |  46 ++
+ .vscode/qt5.natvis.xml                             | 814 +++++++++++++++++++++
+ .vscode/settings.json                              |   4 +
+ .vscode/tasks.json                                 |  22 +
+ development-files/kysdk-ukuiwindowhelper.pc        |   5 +
+ kysdk-application.pro                              |   3 +
+ kysdk-waylandhelper/kysdk-waylandhelper.pro        |   4 +-
+ .../kysdk-ukuiwindowhelper.pro                     |  17 +
+ .../kysdk-ukuiwindowhelper/ukuiwindowhelper.cpp    | 116 +++
+ .../src/kysdk-ukuiwindowhelper/ukuiwindowhelper.h  |  71 ++
+ .../src/ukuistylehelper/ukuistylehelper.cpp        |   1 +
+ .../src/windowmanager/ukuiwaylandinterface.cpp     |   2 +
+ .../test/testukuiwindowhelper/main.cpp             |  14 +
+ .../testukuiwindowhelper/testukuiwindowhelper.pro  |  28 +
+ .../test/testukuiwindowhelper/widget.cpp           | 158 ++++
+ .../test/testukuiwindowhelper/widget.h             |  49 ++
+ 17 files changed, 1352 insertions(+), 5 deletions(-)
+ create mode 100644 .vscode/launch.json
+ create mode 100644 .vscode/qt5.natvis.xml
+ create mode 100644 .vscode/settings.json
+ create mode 100644 .vscode/tasks.json
+ create mode 100644 development-files/kysdk-ukuiwindowhelper.pc
+ create mode 100644 kysdk-waylandhelper/src/kysdk-ukuiwindowhelper/kysdk-ukuiwindowhelper.pro
+ create mode 100644 kysdk-waylandhelper/src/kysdk-ukuiwindowhelper/ukuiwindowhelper.cpp
+ create mode 100644 kysdk-waylandhelper/src/kysdk-ukuiwindowhelper/ukuiwindowhelper.h
+ create mode 100644 kysdk-waylandhelper/test/testukuiwindowhelper/main.cpp
+ create mode 100644 kysdk-waylandhelper/test/testukuiwindowhelper/testukuiwindowhelper.pro
+ create mode 100644 kysdk-waylandhelper/test/testukuiwindowhelper/widget.cpp
+ create mode 100644 kysdk-waylandhelper/test/testukuiwindowhelper/widget.h
+
+diff --git a/.gitignore b/.gitignore
+index 6e6d196..85cfb01 100644
+--- a/.gitignore
++++ b/.gitignore
+@@ -5,6 +5,3 @@ build-*/
+ # wayland-scanner generated files 
+ *-protocol.h
+ *-protocol.c
+-
+-# .vscode settings files
+-.vscode/
+diff --git a/.vscode/launch.json b/.vscode/launch.json
+new file mode 100644
+index 0000000..4f85566
+--- /dev/null
++++ b/.vscode/launch.json
+@@ -0,0 +1,46 @@
++{
++    // See https://go.microsoft.com/fwlink/?linkid=830387
++    // for the documentation about the launch.json format
++    "version": "0.2.0",
++    "configurations": [
++        {
++            "name": "testukuiwindowhelper", 
++            "type": "cppdbg",
++            "request": "launch",
++            "program": "${workspaceFolder}/build/kysdk-waylandhelper/test/testukuiwindowhelper/testukuiwindowhelper", // The path to the executable you want to debug
++            "visualizerFile": "${workspaceFolder}/.vscode/qt5.natvis.xml",
++            "showDisplayString": true,
++            "args": [],
++            "stopAtEntry": false,
++            "cwd": "${workspaceFolder}/build",
++            "environment": [
++                {
++                    "name": "QT_QPA_PLATFORM",
++                    "value": "wayland"
++                },
++                {
++                    "name": "QT_QPA_PLATFORMTHEME",
++                    "value": "ukui"
++                },
++                {
++                    "name": "WAYLAND_DEBUG",
++                    "value": "0" // 0: no debug, server: only server debug, client: only client debug, 1: all debug
++                },
++                {
++                    "name": "LD_LIBRARY_PATH",
++                    "value": "${workspaceFolder}/build/kysdk-waylandhelper:${workspaceFolder}/build/kysdk-waylandhelper/src/ukuiwindowhelper:${env:LD_LIBRARY_PATH}"
++                }
++            ],
++            "externalConsole": false,
++            "MIMode": "gdb",
++            "setupCommands": [
++                {
++                    "description": "将反汇编风格设置为 Intel",
++                    "text": "-gdb-set disassembly-flavor intel",
++                    "ignoreFailures": true
++                }
++            ],
++            "preLaunchTask": "Build"
++        }
++    ]
++}
+\ No newline at end of file
+diff --git a/.vscode/qt5.natvis.xml b/.vscode/qt5.natvis.xml
+new file mode 100644
+index 0000000..064ab4b
+--- /dev/null
++++ b/.vscode/qt5.natvis.xml
+@@ -0,0 +1,814 @@
++<?xml version="1.0" encoding="utf-8"?>
++<!--************************************************************************************************
++ Copyright (C) 2024 The Qt Company Ltd.
++ SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
++*************************************************************************************************-->
++
++<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">
++
++    <Type Name="QUuid">
++        <DisplayString>{{{data1,Xb}-{data2,Xb}-{data3,Xb}-{(data4[0]),nvoXb}{(data4[1]),nvoXb}-{(data4[2]),nvoXb}{(data4[3]),nvoXb}{(data4[4]),nvoXb}{(data4[5]),nvoXb}{(data4[6]),nvoXb}{(data4[7]),nvoXb}}}</DisplayString>
++    </Type>
++
++  <Type Name="QPoint">
++        <AlternativeType Name="QPointF"/>
++        <DisplayString>{{ x = {xp}, y = {yp} }}</DisplayString>
++        <Expand>
++            <Item Name="[x]">xp</Item>
++            <Item Name="[y]">yp</Item>
++        </Expand>
++    </Type>
++
++    <Type Name="QRect">
++        <DisplayString>{{ x = {x1}, y = {y1}, width = {x2 - x1 + 1}, height = {y2 - y1 + 1} }}</DisplayString>
++        <Expand>
++            <Item Name="[x]">x1</Item>
++            <Item Name="[y]">y1</Item>
++            <Item Name="[width]">x2 - x1 + 1</Item>
++            <Item Name="[height]">y2 - y1 + 1</Item>
++        </Expand>
++    </Type>
++
++    <Type Name="QRectF">
++        <DisplayString>{{ x = {xp}, y = {yp}, width = {w}, height = {h} }}</DisplayString>
++        <Expand>
++            <Item Name="[x]">xp</Item>
++            <Item Name="[y]">yp</Item>
++            <Item Name="[width]">w</Item>
++            <Item Name="[height]">h</Item>
++        </Expand>
++    </Type>
++
++    <Type Name="QSize">
++        <AlternativeType Name="QSizeF"/>
++        <DisplayString>{{ width = {wd}, height = {ht} }}</DisplayString>
++        <Expand>
++            <Item Name="[width]">wd</Item>
++            <Item Name="[height]">ht</Item>
++        </Expand>
++    </Type>
++
++    <Type Name="QLine">
++        <AlternativeType Name="QLineF"/>
++        <DisplayString>{{ start point = {pt1}, end point = {pt2} }}</DisplayString>
++        <Expand>
++            <Synthetic Name="[start point]">
++                <DisplayString>{pt1}</DisplayString>
++                <Expand>
++                    <ExpandedItem>pt1</ExpandedItem>
++                </Expand>
++            </Synthetic>
++            <Synthetic Name="[end point]">
++                <DisplayString>{pt2}</DisplayString>
++                <Expand>
++                    <ExpandedItem>pt2</ExpandedItem>
++                </Expand>
++            </Synthetic>
++
++        </Expand>
++    </Type>
++
++    <Type Name="QPolygon">
++        <DisplayString>{{ size = {d-&gt;size} }}</DisplayString>
++        <Expand>
++            <Item Name="[referenced]">d-&gt;ref.atomic._q_value</Item>
++            <ArrayItems>
++                <Size>d-&gt;size</Size>
++                <ValuePointer>(QPoint*)((reinterpret_cast&lt;char*&gt;(d)) + d-&gt;offset)</ValuePointer>
++            </ArrayItems>
++        </Expand>
++    </Type>
++
++    <Type Name="QPolygonF">
++        <DisplayString>{{ size = {d-&gt;size} }}</DisplayString>
++        <Expand>
++            <Item Name="[closed]">
++                d-&gt;size &gt; 0
++                    &amp;&amp; ((((QPointF*)((reinterpret_cast&lt;char*&gt;(d)) + d-&gt;offset)[0]).xp
++                == (((QPointF*)((reinterpret_cast&lt;char*&gt;(d)) + d-&gt;offset)[d-&gt;size - 1]).xp)
++                    &amp;&amp; ((((QPointF*)((reinterpret_cast&lt;char*&gt;(d)) + d-&gt;offset)[0]).yp
++                == (((QPointF*)((reinterpret_cast&lt;char*&gt;(d)) + d-&gt;offset)[d-&gt;size - 1]).yp)
++            </Item>
++            <Item Name="[referenced]">d-&gt;ref.atomic._q_value</Item>
++            <ArrayItems>
++                <Size>d-&gt;size</Size>
++                <ValuePointer>(QPointF*)((reinterpret_cast&lt;char*&gt;(d)) + d-&gt;offset)</ValuePointer>
++            </ArrayItems>
++        </Expand>
++    </Type>
++
++    <Type Name ="QVector2D">
++        <DisplayString>{{ x = {xp}, y = {yp} }}</DisplayString>
++        <Expand>
++            <Item Name="[x]">xp</Item>
++            <Item Name="[y]">yp</Item>
++        </Expand>
++    </Type>
++
++    <Type Name ="QVector3D">
++        <DisplayString>{{ x = {xp}, y = {yp}, z = {zp} }}</DisplayString>
++        <Expand>
++            <Item Name="[x]">xp</Item>
++            <Item Name="[y]">yp</Item>
++            <Item Name="[z]">zp</Item>
++        </Expand>
++    </Type>
++
++    <Type Name ="QVector4D">
++        <DisplayString>{{ x = {xp}, y = {yp}, z = {zp}, w = {wp} }}</DisplayString>
++        <Expand>
++            <Item Name="[x]">xp</Item>
++            <Item Name="[y]">yp</Item>
++            <Item Name="[z]">zp</Item>
++            <Item Name="[w]">wp</Item>
++        </Expand>
++    </Type>
++
++    <Type Name ="QMatrix">
++        <DisplayString>
++            {{ m11 = {_m11}, m12 = {_m12}, m21 = {_m21}, m22 = {_m22}, ... }}
++        </DisplayString>
++        <Expand>
++            <Item Name="[m11]">_m11</Item>
++            <Item Name="[m12]">_m12</Item>
++            <Item Name="[m21]">_m21</Item>
++            <Item Name="[m22]">_m22</Item>
++            <Item Name="[dx]">_dx</Item>
++            <Item Name="[dy]">_dy</Item>
++        </Expand>
++    </Type>
++
++    <Type Name ="QMatrix4x4">
++        <DisplayString>
++            {{ m11 = {m[0][0]}, m12 = {m[1][0]}, m13 = {m[2][0]}, m14 = {m[3][0]}, ... }}
++        </DisplayString>
++        <Expand>
++            <Item Name="[m11]">m[0][0]</Item>
++            <Item Name="[m12]">m[1][0]</Item>
++            <Item Name="[m13]">m[2][0]</Item>
++            <Item Name="[m14]">m[3][0]</Item>
++            <Item Name="[m21]">m[0][1]</Item>
++            <Item Name="[m22]">m[1][1]</Item>
++            <Item Name="[m23]">m[2][1]</Item>
++            <Item Name="[m24]">m[3][1]</Item>
++            <Item Name="[m31]">m[0][2]</Item>
++            <Item Name="[m32]">m[1][2]</Item>
++            <Item Name="[m33]">m[2][2]</Item>
++            <Item Name="[m34]">m[3][2]</Item>
++            <Item Name="[m41]">m[0][3]</Item>
++            <Item Name="[m42]">m[1][3]</Item>
++            <Item Name="[m43]">m[2][3]</Item>
++            <Item Name="[m44]">m[3][3]</Item>
++        </Expand>
++    </Type>
++
++    <Type Name="QSizePolicy">
++        <DisplayString>
++            {{ horizontal = {static_cast&lt;Policy&gt;(bits.horPolicy)}, vertical = {static_cast&lt;Policy&gt;(bits.verPolicy)}, type = {ControlType(1 &lt;&lt; bits.ctype)} }}
++        </DisplayString>
++        <Expand>
++            <Synthetic Name="[vertical policy]">
++                <DisplayString>QSizePolicy::Policy::{static_cast&lt;Policy&gt;(bits.verPolicy)}</DisplayString>
++            </Synthetic>
++            <Synthetic Name="[horizontal policy]">
++                <DisplayString>QSizePolicy::Policy::{static_cast&lt;Policy&gt;(bits.horPolicy)}</DisplayString>
++            </Synthetic>
++            <Synthetic Name="[control type]">
++                <DisplayString>QSizePolicy::ControlType::{ControlType(1 &lt;&lt; bits.ctype)}</DisplayString>
++            </Synthetic>
++            <Synthetic Name="[expanding directions]">
++                <DisplayString
++                    Condition="(static_cast&lt;Policy&gt;(bits.verPolicy) &amp; ExpandFlag)">
++                        Qt::Vertical (2)
++                    </DisplayString>
++                <DisplayString
++                    Condition="(static_cast&lt;Policy&gt;(bits.horPolicy) &amp; ExpandFlag)">
++                        Qt::Horizontal (1)
++                </DisplayString>
++            </Synthetic>
++            <Item Name="[vertical stretch]">static_cast&lt;int&gt;(bits.verStretch)</Item>
++            <Item Name="[horizontal stretch]">static_cast&lt;int&gt;(bits.horStretch)</Item>
++            <Item Name="[has height for width]">bits.hfw == 1</Item>
++            <Item Name="[has width for height]">bits.wfh == 1</Item>
++        </Expand>
++    </Type>
++
++    <Type Name="QChar">
++        <DisplayString>{ucs,c}</DisplayString>
++        <StringView>ucs,c</StringView>
++        <Expand>
++            <Item Name="[latin 1]">ucs > 0xff ? '\0' : char(ucs),c</Item>
++            <Item Name="[unicode]">ucs,c</Item>
++        </Expand>
++    </Type>
++
++    <Type Name="QString">
++        <DisplayString>{((reinterpret_cast&lt;unsigned short*&gt;(d)) + d-&gt;offset / 2),sub}</DisplayString>
++        <StringView>((reinterpret_cast&lt;unsigned short*&gt;(d)) + d-&gt;offset / 2),sub</StringView>
++        <Expand>
++            <Item Name="[size]">d-&gt;size</Item>
++            <Item Name="[referenced]">d-&gt;ref.atomic._q_value</Item>
++            <ArrayItems>
++                <Size>d-&gt;size</Size>
++                <ValuePointer>((reinterpret_cast&lt;unsigned short*&gt;(d)) + d-&gt;offset / 2),c</ValuePointer>
++            </ArrayItems>
++        </Expand>
++    </Type>
++
++    <Type Name="QStringRef">
++        <Intrinsic Name="offset" Expression="(reinterpret_cast&lt;char16_t*&gt;(m_string-&gt;d))
++            + m_string-&gt;d->offset / 2" />
++        <DisplayString Condition="m_string == nullptr">{m_string,[m_size]} u""</DisplayString>
++        <DisplayString Condition="m_string != nullptr">{offset() + m_position,[m_size]}</DisplayString>
++        <Expand>
++            <Item Name="[position]" ExcludeView="simple">m_position</Item>
++            <Item Name="[size]" ExcludeView="simple">m_size</Item>
++            <ArrayItems Condition="m_string != nullptr">
++                <Size>m_size</Size>
++                <ValuePointer>offset()+m_position</ValuePointer>
++            </ArrayItems>
++        </Expand>
++    </Type>
++
++    <Type Name="QStringView">
++        <DisplayString>{m_data,[m_size]}</DisplayString>
++        <StringView>m_data,[m_size]</StringView>
++        <Expand>
++            <Item Name="[size]" ExcludeView="simple">m_size</Item>
++            <ArrayItems>
++                <Size>m_size</Size>
++                <ValuePointer>m_data</ValuePointer>
++            </ArrayItems>
++        </Expand>
++    </Type>
++
++    <Type Name="QByteArray">
++        <DisplayString>{((reinterpret_cast&lt;char*&gt;(d)) + d-&gt;offset),sb}</DisplayString>
++        <StringView>((reinterpret_cast&lt;char*&gt;(d)) + d-&gt;offset),sb</StringView>
++        <Expand>
++            <Item Name="[size]">d-&gt;size</Item>
++            <Item Name="[referenced]">d-&gt;ref.atomic._q_value</Item>
++            <ArrayItems>
++                <Size>d-&gt;size</Size>
++                <ValuePointer>((reinterpret_cast&lt;char*&gt;(d)) + d-&gt;offset),c</ValuePointer>
++            </ArrayItems>
++        </Expand>
++    </Type>
++
++    <Type Name="QUrl">
++        <Intrinsic Name="isEmpty" Expression="size==0">
++            <Parameter Name="size" Type="int"/>
++        </Intrinsic>
++        <Intrinsic Name="memberOffset" Expression="sizeof(QAtomicInt) + sizeof(int) + (sizeof(QString) * count)">
++            <Parameter Name="count" Type="int"/>
++        </Intrinsic>
++        <Intrinsic Name="scheme" Expression="*((QString*)(((char*)(d) + memberOffset(0))))" />
++        <Intrinsic Name="username" Expression="*((QString*)(((char*)(d) + memberOffset(1))))" />
++        <Intrinsic Name="password" Expression="*((QString*)(((char*)(d) + memberOffset(2))))" />
++        <Intrinsic Name="host" Expression="*((QString*)(((char*)(d) + memberOffset(3))))" />
++        <Intrinsic Name="path" Expression="*((QString*)(((char*)(d) + memberOffset(4))))" />
++        <Intrinsic Name="query" Expression="*((QString*)(((char*)(d) + memberOffset(5))))" />
++        <Intrinsic Name="fragment" Expression="*((QString*)(((char*)(d) + memberOffset(6))))" />
++
++        <DisplayString Condition="!isEmpty(scheme().d-&gt;size)">{scheme()}://{host()}{path()}</DisplayString>
++        <DisplayString Condition="isEmpty(scheme().d-&gt;size)">{path()}</DisplayString>
++        <Expand>
++            <Item Name="[scheme]">scheme()</Item>
++            <Item Name="[username]">username()</Item>
++            <Item Name="[password]">password()</Item>
++            <Item Name="[host]">host()</Item>
++            <Item Name="[path]">path()</Item>
++            <Item Name="[query]">query()</Item>
++            <Item Name="[fragment]">fragment()</Item>
++        </Expand>
++    </Type>
++
++    <Type Name="QBitArray">
++        <DisplayString>{{ size = {(d.d-&gt;size &lt;&lt; 3) - *((reinterpret_cast&lt;char*&gt;(d.d)) + d.d-&gt;offset)} }}</DisplayString>
++        <Expand>
++            <Item Name="[referenced]">d.d-&gt;ref.atomic._q_value</Item>
++            <IndexListItems>
++                <Size>(d.d-&gt;size &lt;&lt; 3) - *((reinterpret_cast&lt;char*&gt;(d.d)) + d.d-&gt;offset)</Size>
++                <ValueNode>
++                    (*(reinterpret_cast&lt;const unsigned char*&gt;((reinterpret_cast&lt;char*&gt;(d.d)) + d.d-&gt;offset) + 1
++                        + ($i &gt;&gt; 3)) &amp; (1 &lt;&lt; ($i &amp; 7))) != 0
++                </ValueNode>
++            </IndexListItems>
++        </Expand>
++    </Type>
++
++    <Type Name="QVarLengthArray&lt;*&gt;">
++        <AlternativeType Name="QVarLengthArray&lt;*, int&gt;"/>
++        <DisplayString>{{ size = {s} }}</DisplayString>
++        <Expand>
++            <Item Name="[capacity]">a</Item>
++            <ArrayItems>
++                <Size>s</Size>
++                <ValuePointer>ptr</ValuePointer>
++            </ArrayItems>
++        </Expand>
++    </Type>
++
++    <Type Name="QDate">
++        <DisplayString>{{ julian day = {jd} }}</DisplayString>
++        <Expand></Expand>
++    </Type>
++
++    <Type Name="QTime">
++        <DisplayString
++            Condition="mds == 1">{{ millisecond = {mds} }}</DisplayString>
++        <DisplayString
++            Condition="mds != 1">{{ milliseconds = {mds} }}</DisplayString>
++        <Expand>
++            <Item Name="[hour]"
++                  Condition="(mds / 3600000) == 1">mds / 3600000, d</Item>
++            <Item Name="[hours]"
++                  Condition="(mds / 3600000) != 1">mds / 3600000, d</Item>
++            <Item Name="[minute]"
++                  Condition="((mds % 3600000) / 60000) == 1">(mds % 3600000) / 60000, d</Item>
++            <Item Name="[minutes]"
++                  Condition="((mds % 3600000) / 60000) != 1">(mds % 3600000) / 60000, d</Item>
++            <Item Name="[second]"
++                  Condition="((mds / 1000) % 60) == 1">(mds / 1000) % 60, d</Item>
++            <Item Name="[seconds]"
++                  Condition="((mds / 1000) % 60) != 1">(mds / 1000) % 60, d</Item>
++            <Item Name="[millisecond]"
++                  Condition="(mds % 1000) == 1">mds % 1000, d</Item>
++            <Item Name="[milliseconds]"
++                  Condition="(mds % 1000) != 1">mds % 1000, d</Item>
++        </Expand>
++    </Type>
++
++    <Type Name="QRegularExpression">
++        <DisplayString>{d.pattern}</DisplayString>
++    </Type>
++
++    <Type Name="QSharedData">
++        <Expand>
++            <Item Name="[referenced]">ref._q_value</Item>
++        </Expand>
++    </Type>
++
++    <Type Name="QSharedPointer&lt;*&gt;">
++        <DisplayString>strong reference to shared pointer of type {"$T1"}</DisplayString>
++        <Expand>
++            <Item Name="[is null]">value == 0</Item>
++            <Item Name="[weak referenced]">d-&gt;weakref._q_value</Item>
++            <Item Name="[strong referenced]">d-&gt;strongref._q_value</Item>
++        </Expand>
++    </Type>
++
++    <Type Name="QSharedDataPointer&lt;*&gt;">
++        <DisplayString>pointer to implicit shared object of type {"$T1"}</DisplayString>
++        <Expand>
++            <ExpandedItem>d</ExpandedItem>
++        </Expand>
++    </Type>
++
++    <Type Name="QExplicitlySharedDataPointer&lt;*&gt;">
++        <DisplayString>pointer to explicit shared object of type {"$T1"}</DisplayString>
++        <Expand>
++            <ExpandedItem>d</ExpandedItem>
++        </Expand>
++    </Type>
++
++    <Type Name="QPointer&lt;*&gt;">
++        <DisplayString>guarded pointer to subclass of QObject of type {"$T1"}</DisplayString>
++        <Expand>
++            <Item Name="[is null]">wp.d == 0 || wp.d-&gt;strongref._q_value == 0 || wp.value == 0</Item>
++        </Expand>
++    </Type>
++
++    <Type Name="QWeakPointer&lt;*&gt;">
++        <DisplayString>weak reference to shared pointer of type {"$T1"}</DisplayString>
++        <Expand>
++            <Item Name="[is null]">d == 0 || d-&gt;strongref._q_value == 0 || value == 0</Item>
++            <Item Name="[weak referenced]">d-&gt;weakref._q_value</Item>
++            <Item Name="[strong referenced]">d-&gt;strongref._q_value</Item>
++        </Expand>
++    </Type>
++
++    <Type Name="QScopedPointer&lt;*&gt;">
++        <DisplayString>scoped pointer to a dynamically allocated object of type {"$T1"}</DisplayString>
++        <Expand>
++            <Item Name="[is null]">!d</Item>
++        </Expand>
++    </Type>
++
++    <Type Name="QScopedArrayPointer&lt;*&gt;">
++        <DisplayString>scoped pointer to dynamically allocated array of objects of type {"$T1"}</DisplayString>
++        <Expand>
++            <Item Name="[is null]">!d</Item>
++        </Expand>
++    </Type>
++
++    <Type Name="QPair&lt;*,*&gt;">
++        <DisplayString>({first}, {second})</DisplayString>
++        <Expand>
++            <Item Name="[first]">first</Item>
++            <Item Name="[second]">second</Item>
++        </Expand>
++    </Type>
++
++    <Type Name="QVector&lt;*&gt;">
++        <AlternativeType Name="QStack&lt;*&gt;"></AlternativeType>
++        <DisplayString>{{ size = {d-&gt;size} }}</DisplayString>
++        <Expand>
++            <Item Name="[referenced]">d-&gt;ref.atomic._q_value</Item>
++            <ArrayItems>
++                <Size>d-&gt;size</Size>
++                <ValuePointer>($T1*)((reinterpret_cast&lt;char*&gt;(d)) + d-&gt;offset)</ValuePointer>
++            </ArrayItems>
++        </Expand>
++    </Type>
++
++    <Type Name="QList&lt;*&gt;">
++        <AlternativeType Name="QQueue&lt;*&gt;"></AlternativeType>
++        <DisplayString>{{ size = {d-&gt;end - d-&gt;begin} }}</DisplayString>
++        <Expand>
++            <Item Name="[referenced]">d-&gt;ref.atomic._q_value</Item>
++            <IndexListItems>
++                <Size>d-&gt;end - d-&gt;begin</Size>
++                <ValueNode>*reinterpret_cast&lt;$T1*&gt;((sizeof($T1) &gt; sizeof(void*))
++                    ? reinterpret_cast&lt;Node*&gt;(d-&gt;array + d-&gt;begin + $i)-&gt;v
++                    : reinterpret_cast&lt;$T1*&gt;(d-&gt;array + d-&gt;begin + $i))
++                </ValueNode>
++            </IndexListItems>
++        </Expand>
++    </Type>
++
++    <Type Name="QStringList">
++        <DisplayString>{{ size = {d-&gt;end - d-&gt;begin} }}</DisplayString>
++        <Expand>
++            <Item Name="[referenced]">d-&gt;ref.atomic._q_value</Item>
++            <IndexListItems>
++                <Size>d-&gt;end - d-&gt;begin</Size>
++                <ValueNode>
++                    *reinterpret_cast&lt;QString*&gt;((sizeof(QString) &gt; sizeof(void*))
++                    ? reinterpret_cast&lt;Node*&gt;(d-&gt;array + d-&gt;begin + $i)-&gt;v
++                    : reinterpret_cast&lt;QString*&gt;(d-&gt;array + d-&gt;begin + $i))
++                </ValueNode>
++            </IndexListItems>
++        </Expand>
++    </Type>
++
++    <Type Name="QList&lt;QVariant&gt;">
++        <DisplayString>{{ size = {d-&gt;end - d-&gt;begin} }}</DisplayString>
++        <Expand>
++            <Item Name="[referenced]">d-&gt;ref.atomic._q_value</Item>
++            <IndexListItems>
++                <Size>d-&gt;end - d-&gt;begin</Size>
++                <ValueNode>
++                    *reinterpret_cast&lt;QVariant*&gt;((sizeof(QVariant) &gt; sizeof(void*))
++                    ? reinterpret_cast&lt;Node*&gt;(d-&gt;array + d-&gt;begin + $i)-&gt;v
++                    : reinterpret_cast&lt;QVariant*&gt;(d-&gt;array + d-&gt;begin + $i))
++                </ValueNode>
++            </IndexListItems>
++        </Expand>
++    </Type>
++
++    <Type Name="QLinkedList&lt;*&gt;">
++        <DisplayString>{{ size = {d-&gt;size} }}</DisplayString>
++        <Expand>
++            <Item Name="[referenced]">d-&gt;ref.atomic._q_value</Item>
++            <LinkedListItems>
++                <Size>d-&gt;size</Size>
++                <HeadPointer>d-&gt;n</HeadPointer>
++                <NextPointer>n</NextPointer>
++                <ValueNode>(*(QLinkedListNode&lt;$T1&gt;*)this).t</ValueNode>
++            </LinkedListItems>
++        </Expand>
++    </Type>
++
++    <Type Name="QMapNode&lt;*,*&gt;">
++        <DisplayString>({key}, {value})</DisplayString>
++        <Expand>
++            <Item Name="[key]">key</Item>
++            <Item Name="[value]">value</Item>
++        </Expand>
++    </Type>
++
++    <Type Name="QMap&lt;*,*&gt;">
++        <AlternativeType Name="QMultiMap&lt;*,*&gt;"/>
++        <DisplayString>{{ size = {d-&gt;size} }}</DisplayString>
++        <Expand>
++            <Item Name="[referenced]">d-&gt;ref.atomic._q_value</Item>
++            <TreeItems>
++                <Size>d-&gt;size</Size>
++                <HeadPointer>d-&gt;header.left</HeadPointer>
++                <LeftPointer>left</LeftPointer>
++                <RightPointer>right</RightPointer>
++                <ValueNode>*((QMapNode&lt;$T1,$T2&gt;*)this)</ValueNode>
++            </TreeItems>
++        </Expand>
++    </Type>
++
++    <Type Name="QHashNode&lt;*,*&gt;">
++        <DisplayString Condition="next == 0">(empty)</DisplayString>
++        <DisplayString Condition="next != 0">({key}, {value})</DisplayString>
++        <Expand>
++            <Item Name="[key]" Condition="next != 0">key</Item>
++            <Item Name="[value]" Condition="next != 0">value</Item>
++            <Item Name="[next]" Condition="next != 0">next</Item>
++        </Expand>
++    </Type>
++
++    <Type Name="QHash&lt;*,*&gt;">
++        <AlternativeType Name="QMultiHash&lt;*,*&gt;"/>
++        <DisplayString>{{ size = {d-&gt;size} }}</DisplayString>
++        <Expand>
++            <ArrayItems IncludeView="buckets">
++                <Size>d-&gt;numBuckets</Size>
++                <ValuePointer>reinterpret_cast&lt;Node **&gt;(d-&gt;buckets)</ValuePointer>
++            </ArrayItems>
++            <CustomListItems ExcludeView="buckets">
++                <Variable Name="n" InitialValue="d-&gt;numBuckets"/>
++                <Variable Name="bucket" InitialValue="d-&gt;buckets"/>
++                <Variable Name="node" InitialValue="d-&gt;buckets[0]"/>
++                <Variable Name="keyValuePair" InitialValue="reinterpret_cast&lt;Node *&gt;(0)"/>
++                <Size>d-&gt;size</Size>
++                <Loop>
++                    <Break Condition="n == 0"/>
++                    <Exec>node = *(bucket++)</Exec>
++                    <Exec>--n</Exec>
++                    <Loop>
++                        <Break Condition="!node || !node-&gt;next"/>
++                        <Exec>keyValuePair = reinterpret_cast&lt;Node *&gt;(node)</Exec>
++                        <Item Name="[{keyValuePair-&gt;key}]">keyValuePair-&gt;value</Item>
++                        <Exec>node = node-&gt;next</Exec>
++                    </Loop>
++                </Loop>
++            </CustomListItems>
++        </Expand>
++    </Type>
++
++    <Type Name="QHashNode&lt;*,QHashDummyValue&gt;">
++        <DisplayString Condition="next == 0">(empty)</DisplayString>
++        <DisplayString Condition="next != 0">({key})</DisplayString>
++        <Expand>
++            <Item Name="[key]" Condition="next != 0">key</Item>
++        </Expand>
++    </Type>
++
++    <Type Name="QSet&lt;*&gt;">
++        <DisplayString>{{ size = {q_hash.d-&gt;size} }}</DisplayString>
++        <Expand>
++            <ExpandedItem>q_hash</ExpandedItem>
++        </Expand>
++    </Type>
++
++    <Type Name="QCache&lt;*,*&gt;::Node">
++        <DisplayString>({*keyPtr}, {*t})</DisplayString>
++        <Expand>
++            <Item Name="[key]">*keyPtr</Item>
++            <Item Name="[value]">*t</Item>
++        </Expand>
++    </Type>
++
++    <Type Name="QCache&lt;*,*&gt;">
++        <DisplayString>{{ size = {hash.d-&gt;size} }}</DisplayString>
++        <Expand>
++            <Item Name="[max coast]">mx</Item>
++            <Item Name="[total coast]">total</Item>
++            <Item Name="[referenced]">hash.d-&gt;ref.atomic._q_value</Item>
++            <LinkedListItems>
++                <Size>hash.d-&gt;size</Size>
++                <HeadPointer>f</HeadPointer>
++                <NextPointer>n</NextPointer>
++                <ValueNode>*((Node*)this)</ValueNode>
++            </LinkedListItems>
++        </Expand>
++    </Type>
++
++    <Type Name="QStandardItemPrivate">
++        <Intrinsic Name="memberOffset" Expression="sizeof(QStandardItemModel *)
++                                                 + sizeof(QStandardItem *)
++                                                 + sizeof(int *)
++                                                 + sizeof(int *)
++                                                 + (sizeof(int) * count)">
++            <Parameter Name="count" Type="int"/>
++        </Intrinsic>
++        <Intrinsic Name="rows" Expression="*((int*)(((char*)(this)) + memberOffset(0)))" />
++        <Intrinsic Name="columns" Expression="*((int*)(((char*)(this)) + memberOffset(1)))" />
++    </Type>
++
++    <Type Name="QStandardItem">
++        <DisplayString>{{ row count = {(*d_ptr.d).rows()}, column count = {(*d_ptr.d).columns()} }}</DisplayString>
++        <Expand>
++            <Item Name="[d]">d_ptr.d,!</Item>
++            <Item Name="[row count]">(*d_ptr.d).rows()</Item>
++            <Item Name="[column count]">(*d_ptr.d).columns()</Item>
++        </Expand>
++    </Type>
++
++    <Type Name="QVariant">
++        <!--Region DisplayString QVariant-->
++
++        <DisplayString Condition="d.type == QMetaType::UnknownType">Invalid</DisplayString>
++        <DisplayString Condition="d.type == QMetaType::Bool">{d.data.b}</DisplayString>
++        <DisplayString Condition="d.type == QMetaType::Int">{d.data.i}</DisplayString>
++        <DisplayString Condition="d.type == QMetaType::UInt">{d.data.u}</DisplayString>
++        <DisplayString Condition="d.type == QMetaType::LongLong">{d.data.ll}</DisplayString>
++        <DisplayString Condition="d.type == QMetaType::ULongLong">{d.data.ull}</DisplayString>
++        <DisplayString Condition="d.type == QMetaType::Double">{d.data.d}</DisplayString>
++        <DisplayString Condition="d.type == QMetaType::QChar">{d.data.c}</DisplayString>
++        <DisplayString Condition="d.type == QMetaType::QVariantMap">
++            {*((QMap&lt;QString,QVariant&gt;*)(d.is_shared ? d.data.shared-&gt;ptr
++                : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
++        </DisplayString>
++        <DisplayString Condition="d.type == QMetaType::QVariantList">
++            {*((QList&lt;QVariant&gt;*)(d.is_shared ? d.data.shared-&gt;ptr
++                : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
++        </DisplayString>
++        <DisplayString Condition="d.type == QMetaType::QString">
++            {*((QString*)(d.is_shared ? d.data.shared-&gt;ptr
++                : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
++        </DisplayString>
++        <DisplayString Condition="d.type == QMetaType::QStringList">
++            {*((QStringList*)(d.is_shared ? d.data.shared-&gt;ptr
++                : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
++        </DisplayString>
++        <DisplayString Condition="d.type == QMetaType::QByteArray">
++            {*((QByteArray*)(d.is_shared ? d.data.shared-&gt;ptr
++                : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
++        </DisplayString>
++        <DisplayString Condition="d.type == QMetaType::QBitArray">
++            {*((QBitArray*)(d.is_shared ? d.data.shared-&gt;ptr
++                : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
++        </DisplayString>
++        <DisplayString Condition="d.type == QMetaType::QDate">
++            {*((QDate*)(d.is_shared ? d.data.shared-&gt;ptr
++                : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
++        </DisplayString>
++        <DisplayString Condition="d.type == QMetaType::QTime">
++            {*((QTime*)(d.is_shared ? d.data.shared-&gt;ptr
++                : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
++        </DisplayString>
++        <DisplayString Condition="d.type == QMetaType::QDateTime">DateTime</DisplayString>
++        <DisplayString Condition="d.type == QMetaType::QUrl">Url</DisplayString>
++        <DisplayString Condition="d.type == QMetaType::QLocale">Locale</DisplayString>
++        <DisplayString Condition="d.type == QMetaType::QRect">
++            {*((QRect*)(d.is_shared ? d.data.shared-&gt;ptr
++                : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
++        </DisplayString>
++        <DisplayString Condition="d.type == QMetaType::QRectF">
++            {*((QRectF*)(d.is_shared ? d.data.shared-&gt;ptr
++                : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
++        </DisplayString>
++        <DisplayString Condition="d.type == QMetaType::QSize">
++            {*((QSize*)(d.is_shared ? d.data.shared-&gt;ptr
++                : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
++        </DisplayString>
++        <DisplayString Condition="d.type == QMetaType::QSizeF">
++            {*((QSizeF*)(d.is_shared ? d.data.shared-&gt;ptr
++                : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
++        </DisplayString>
++        <DisplayString Condition="d.type == QMetaType::QLine">
++            {*((QLine*)(d.is_shared ? d.data.shared-&gt;ptr
++                : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
++        </DisplayString>
++        <DisplayString Condition="d.type == QMetaType::QLineF">
++            {*((QLineF*)(d.is_shared ? d.data.shared-&gt;ptr
++                : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
++        </DisplayString>
++        <DisplayString Condition="d.type == QMetaType::QPoint">
++            {*((QPoint*)(d.is_shared ? d.data.shared-&gt;ptr
++                : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
++        </DisplayString>
++        <DisplayString Condition="d.type == QMetaType::QPointF">
++            {*((QPointF*)(d.is_shared ? d.data.shared-&gt;ptr
++                : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
++        </DisplayString>
++        <DisplayString Condition="d.type == QMetaType::QRegExp">RegExp</DisplayString>
++        <DisplayString Condition="d.type == QMetaType::QRegularExpression">RegularExpression</DisplayString>
++        <DisplayString Condition="d.type == QMetaType::QVariantHash">
++            {*((QHash&lt;QString,QVariant&gt;*)(d.is_shared ? d.data.shared-&gt;ptr
++                : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))}
++        </DisplayString>
++        <DisplayString Condition="d.type == QMetaType::QEasingCurve">EasingCurve</DisplayString>
++        <DisplayString Condition="d.type == QMetaType::QUuid">Uuid</DisplayString>
++        <DisplayString Condition="d.type == QMetaType::QModelIndex">ModelIndex</DisplayString>
++        <DisplayString Condition="d.type == QMetaType::LastCoreType">LastCoreType</DisplayString>
++        <DisplayString Condition="d.type == QMetaType::QFont">Font</DisplayString>
++        <DisplayString Condition="d.type == QMetaType::QPixmap">Pixmap</DisplayString>
++        <DisplayString Condition="d.type == QMetaType::QBrush">Brush</DisplayString>
++        <DisplayString Condition="d.type == QMetaType::QColor">Color</DisplayString>
++        <DisplayString Condition="d.type == QMetaType::QPalette">Palette</DisplayString>
++        <DisplayString Condition="d.type == QMetaType::QImage">Image</DisplayString>
++        <DisplayString Condition="d.type == QMetaType::QPolygon">Polygon</DisplayString>
++        <DisplayString Condition="d.type == QMetaType::QRegion">Region</DisplayString>
++        <DisplayString Condition="d.type == QMetaType::QBitmap">Bitmap</DisplayString>
++        <DisplayString Condition="d.type == QMetaType::QCursor">Cursor</DisplayString>
++        <DisplayString Condition="d.type == QMetaType::QKeySequence">KeySequence</DisplayString>
++        <DisplayString Condition="d.type == QMetaType::QPen">Pen</DisplayString>
++        <DisplayString Condition="d.type == QMetaType::QTextLength">TextLength</DisplayString>
++        <DisplayString Condition="d.type == QMetaType::QTextFormat">TextFormat</DisplayString>
++        <DisplayString Condition="d.type == QMetaType::QMatrix">Matrix</DisplayString>
++        <DisplayString Condition="d.type == QMetaType::QTransform">Transform</DisplayString>
++        <DisplayString Condition="d.type == QMetaType::QMatrix4x4">Matrix4x4</DisplayString>
++        <DisplayString Condition="d.type == QMetaType::QVector2D">Vector2D</DisplayString>
++        <DisplayString Condition="d.type == QMetaType::QVector3D">Vector3D</DisplayString>
++        <DisplayString Condition="d.type == QMetaType::QVector4D">Vector4D</DisplayString>
++        <DisplayString Condition="d.type == QMetaType::QQuaternion">Quaternion</DisplayString>
++        <DisplayString Condition="d.type == QMetaType::QPolygonF">PolygonF</DisplayString>
++        <DisplayString Condition="d.type == QMetaType::QIcon">Icon</DisplayString>
++        <DisplayString Condition="d.type == QMetaType::LastGuiType">LastGuiType</DisplayString>
++        <DisplayString Condition="d.type == QMetaType::QSizePolicy">SizePolicy</DisplayString>
++        <DisplayString Condition="d.type == QMetaType::User">UserType</DisplayString>
++        <DisplayString Condition="d.type == 0xffffffff">LastType</DisplayString>
++
++        <!--End region DisplayString QVariant-->
++
++        <!--Region DisplayView QVariant-->
++
++        <StringView Condition="d.type == QMetaType::QChar">d.data.c</StringView>
++
++        <StringView Condition="d.type == QMetaType::QString">
++            *((QString*)(d.is_shared ? d.data.shared-&gt;ptr
++                : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
++        </StringView>
++
++        <StringView Condition="d.type == QMetaType::QByteArray">
++            *((QByteArray*)(d.is_shared ? d.data.shared-&gt;ptr
++                : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
++        </StringView>
++
++        <!--End region DisplayView QVariant-->
++
++        <!--Region Expand QVariant-->
++
++        <Expand>
++            <ExpandedItem Condition="d.type == QMetaType::QVariantMap">
++                *((QMap&lt;QString,QVariant&gt;*)(d.is_shared ? d.data.shared-&gt;ptr
++                    : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
++            </ExpandedItem>
++            <ExpandedItem Condition="d.type == QMetaType::QVariantList">
++                *((QList&lt;QVariant&gt;*)(d.is_shared ? d.data.shared-&gt;ptr
++                    : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
++            </ExpandedItem>
++            <ExpandedItem Condition="d.type == QMetaType::QString">
++                *((QString*)(d.is_shared ? d.data.shared-&gt;ptr
++                    : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
++            </ExpandedItem>
++            <ExpandedItem Condition="d.type == QMetaType::QStringList">
++                *((QStringList*)(d.is_shared ? d.data.shared-&gt;ptr
++                    : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
++            </ExpandedItem>
++            <ExpandedItem Condition="d.type == QMetaType::QByteArray">
++                *((QByteArray*)(d.is_shared ? d.data.shared-&gt;ptr
++                    : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
++            </ExpandedItem>
++            <ExpandedItem Condition="d.type == QMetaType::QBitArray">
++                *((QBitArray*)(d.is_shared ? d.data.shared-&gt;ptr
++                    : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
++            </ExpandedItem>
++            <ExpandedItem Condition="d.type == QMetaType::QDate">
++                *((QDate*)(d.is_shared ? d.data.shared-&gt;ptr
++                    : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
++            </ExpandedItem>
++            <ExpandedItem Condition="d.type == QMetaType::QTime">
++                *((QTime*)(d.is_shared ? d.data.shared-&gt;ptr
++                    : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
++            </ExpandedItem>
++            <ExpandedItem Condition="d.type == QMetaType::QRect">
++                *((QRect*)(d.is_shared ? d.data.shared-&gt;ptr
++                    : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
++            </ExpandedItem>
++            <ExpandedItem Condition="d.type == QMetaType::QRectF">
++                *((QRectF*)(d.is_shared ? d.data.shared-&gt;ptr
++                    : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
++            </ExpandedItem>
++            <ExpandedItem Condition="d.type == QMetaType::QSize">
++                *((QSize*)(d.is_shared ? d.data.shared-&gt;ptr
++                : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
++            </ExpandedItem>
++            <ExpandedItem Condition="d.type == QMetaType::QSizeF">
++                *((QSizeF*)(d.is_shared ? d.data.shared-&gt;ptr
++                : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
++            </ExpandedItem>
++            <ExpandedItem Condition="d.type == QMetaType::QLine">
++                *((QLine*)(d.is_shared ? d.data.shared-&gt;ptr
++                    : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
++            </ExpandedItem>
++            <ExpandedItem Condition="d.type == QMetaType::QLineF">
++                *((QLineF*)(d.is_shared ? d.data.shared-&gt;ptr
++                    : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
++            </ExpandedItem>
++            <ExpandedItem Condition="d.type == QMetaType::QPoint">
++                *((QPoint*)(d.is_shared ? d.data.shared-&gt;ptr
++                    : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
++            </ExpandedItem>
++            <ExpandedItem Condition="d.type == QMetaType::QPointF">
++                *((QPointF*)(d.is_shared ? d.data.shared-&gt;ptr
++                    : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
++            </ExpandedItem>
++            <ExpandedItem Condition="d.type == QMetaType::QVariantHash">
++                *((QHash&lt;QString,QVariant&gt;*)(d.is_shared ? d.data.shared-&gt;ptr
++                    : reinterpret_cast&lt;const void *&gt;(&amp;d.data.ptr)))
++            </ExpandedItem>
++        </Expand>
++
++        <!--End region Expand QVariant-->
++    </Type>
++
++</AutoVisualizer>
+diff --git a/.vscode/settings.json b/.vscode/settings.json
+new file mode 100644
+index 0000000..dc63d2e
+--- /dev/null
++++ b/.vscode/settings.json
+@@ -0,0 +1,4 @@
++{
++    "C_Cpp.clang_format_style": "file",
++    "C_Cpp.default.compileCommands": "${workspaceFolder}/build/compile_commands.json",
++}
+\ No newline at end of file
+diff --git a/.vscode/tasks.json b/.vscode/tasks.json
+new file mode 100644
+index 0000000..5999a24
+--- /dev/null
++++ b/.vscode/tasks.json
+@@ -0,0 +1,22 @@
++{
++    // See https://go.microsoft.com/fwlink/?LinkId=733558
++    // for the documentation about the tasks.json format
++    "version": "2.0.0",
++    "tasks": [
++        {
++            "label": "Configure",
++            "type": "shell",
++            "command": "qmake CONFIG+=debug -o build/ ."
++        },
++        {
++            "label": "Build",
++            "type": "shell",
++            "command": " bear --output build/compile_commands.json --append -- make -j$(nproc) -C build",
++            "dependsOn": "Configure",
++            "group": {
++                "kind": "build",
++                "isDefault": true
++            }
++        }
++    ]
++}
+\ No newline at end of file
+diff --git a/development-files/kysdk-ukuiwindowhelper.pc b/development-files/kysdk-ukuiwindowhelper.pc
+new file mode 100644
+index 0000000..f63374e
+--- /dev/null
++++ b/development-files/kysdk-ukuiwindowhelper.pc
+@@ -0,0 +1,5 @@
++Name: libkysdk-ukuiwindowhelper
++Description: kysdk-ukuiwindowhelper
++Version: 2.3.1.0
++Libs: -lkysdk-ukuiwindowhelper
++Cflags: -I/usr/include/kysdk/applications/ukuiwindowhelper/
+diff --git a/kysdk-application.pro b/kysdk-application.pro
+index e87ce96..5e55c0d 100644
+--- a/kysdk-application.pro
++++ b/kysdk-application.pro
+@@ -5,6 +5,7 @@ CONFIG += ordered
+ SUBDIRS = \
+     kysdk-appconf2 \
+     kysdk-waylandhelper \
++    kysdk-waylandhelper/src/kysdk-ukuiwindowhelper \
+     kysdk-widgetutils \
+     kysdk-qtwidgets \
+     kysdk-kabase/kabase \
+@@ -22,4 +23,6 @@ debug {
+             system(chmod +x $$git_hook_path)
+         }
+     }
++    SUBDIRS += \
++        kysdk-waylandhelper/test/testukuiwindowhelper \
+ }
+diff --git a/kysdk-waylandhelper/kysdk-waylandhelper.pro b/kysdk-waylandhelper/kysdk-waylandhelper.pro
+index 3f0e973..1d271aa 100644
+--- a/kysdk-waylandhelper/kysdk-waylandhelper.pro
++++ b/kysdk-waylandhelper/kysdk-waylandhelper.pro
+@@ -147,8 +147,8 @@ blur_headers.files = src/blurmanager/ukuiblur.h \
+                     src/blurmanager/blurmanager.h \
+                     src/blurmanager/blurabstractinterface.h \
+                     src/blurmanager/blurwaylandinterface.h \
+-                    src/blurmanager/blurxcbinterface.h
+-                    $$OUT_PWD/ukui-blur-manager-client-protocol.h\
++                    src/blurmanager/blurxcbinterface.h \
++                    $$OUT_PWD/ukui-blur-manager-client-protocol.h \
+ 
+ blur_headers.path = /usr/include/kysdk/applications/blurmanager/
+ 
+diff --git a/kysdk-waylandhelper/src/kysdk-ukuiwindowhelper/kysdk-ukuiwindowhelper.pro b/kysdk-waylandhelper/src/kysdk-ukuiwindowhelper/kysdk-ukuiwindowhelper.pro
+new file mode 100644
+index 0000000..bd651a7
+--- /dev/null
++++ b/kysdk-waylandhelper/src/kysdk-ukuiwindowhelper/kysdk-ukuiwindowhelper.pro
+@@ -0,0 +1,17 @@
++QT += gui widgets
++
++TEMPLATE = lib
++
++CONFIG += c++11
++
++SOURCES += \
++    ukuiwindowhelper.cpp \
++
++HEADERS += \
++    ukuiwindowhelper.h \
++
++# Default rules for deployment.
++headers.files = $${HEADERS}
++headers.path = /usr/include/kysdk/applications/ukuiwindowhelper/
++target.path = $$[QT_INSTALL_LIBS]
++INSTALLS += target headers
+diff --git a/kysdk-waylandhelper/src/kysdk-ukuiwindowhelper/ukuiwindowhelper.cpp b/kysdk-waylandhelper/src/kysdk-ukuiwindowhelper/ukuiwindowhelper.cpp
+new file mode 100644
+index 0000000..ec30c73
+--- /dev/null
++++ b/kysdk-waylandhelper/src/kysdk-ukuiwindowhelper/ukuiwindowhelper.cpp
+@@ -0,0 +1,116 @@
++#include "ukuiwindowhelper.h"
++
++#include <QPair>
++#include <QVariant>
++#include <QWidget>
++
++UkuiWindowHelper *UkuiWindowHelper::s_self = nullptr;
++
++UkuiWindowHelper *UkuiWindowHelper::self()
++{
++    if (!s_self)
++        s_self = new UkuiWindowHelper();
++    return s_self;
++}
++
++UkuiWindowHelper::UkuiWindowHelper(QObject *parent)
++    : QObject(parent)
++{
++}
++
++void UkuiWindowHelper::removeTitleBar(QWidget *widget)
++{
++    if (!widget)
++        return;
++
++    widget->setProperty("ukui_surface_no_titlebar", true);
++}
++
++void UkuiWindowHelper::setWindowRole(QWidget *widget, WindowRole role)
++{
++    if (!widget)
++        return;
++
++    widget->setProperty("ukui_surface_role_v1", (int)role);
++}
++
++void UkuiWindowHelper::setWindowState(QWidget *widget, States states)
++{
++    if (!widget)
++        return;
++
++    QPair<uint32_t, uint32_t> pair(0x3ff, states);
++    widget->setProperty("ukui_surface_state", QVariant::fromValue(pair));
++}
++
++void UkuiWindowHelper::setWindowIcon(QWidget *widget, const QString &iconName)
++{
++    if (!widget)
++        return;
++
++    widget->setProperty("ukui_surface_icon_name", iconName);
++}
++
++void UkuiWindowHelper::setSkipTaskBar(QWidget *widget, bool skip)
++{
++    if (!widget)
++        return;
++
++    widget->setProperty("ukui_surface_skip_taskbar", skip);
++}
++
++void UkuiWindowHelper::setSkipSwitcher(QWidget *widget, bool skip)
++{
++    if (!widget)
++        return;
++
++    widget->setProperty("ukui_surface_skip_switcher", skip);
++}
++
++void UkuiWindowHelper::setPanelAutoHide(QWidget *widget, bool autoHide)
++{
++    if (!widget)
++        return;
++
++    widget->setProperty("ukui_surface_panel_auto_hide", autoHide);
++}
++
++void UkuiWindowHelper::grabKeyboard(QWidget *widget)
++{
++    if (!widget)
++        return;
++
++    widget->setProperty("ukui_surface_grab_keyboard", true);
++}
++
++void UkuiWindowHelper::openUnderCursor(QWidget *widget, QPoint pos)
++{
++    if (!widget)
++        return;
++
++    widget->setProperty("ukui_surface_open_under_cursor", pos);
++}
++
++void UkuiWindowHelper::setBlurEffect(QWidget *widget, QRegion region, int level, bool enable)
++{
++    if (!widget)
++        return;
++
++    QPair<QRegion, int> pair(region, level);
++    if (!enable)
++        pair.second = -1;
++    widget->setProperty("ukui_surface_blur", QVariant::fromValue(pair));
++}
++
++void UkuiWindowHelper::setSlideEffect(QWidget *widget, Position position, int offset, bool enable)
++{
++    if (!widget)
++        return;
++
++    QPair<int, int> pair((int)position, offset);
++
++    if (!enable)
++        pair.second = -1;
++
++    widget->setProperty("ukui_surface_slide", QVariant::fromValue(pair));
++}
+diff --git a/kysdk-waylandhelper/src/kysdk-ukuiwindowhelper/ukuiwindowhelper.h b/kysdk-waylandhelper/src/kysdk-ukuiwindowhelper/ukuiwindowhelper.h
+new file mode 100644
+index 0000000..75c40ea
+--- /dev/null
++++ b/kysdk-waylandhelper/src/kysdk-ukuiwindowhelper/ukuiwindowhelper.h
+@@ -0,0 +1,71 @@
++#pragma once
++
++#include <QObject>
++
++class QWidget;
++
++class UkuiWindowHelper : public QObject
++{
++    Q_OBJECT
++public:
++    enum class WindowRole {
++        Normal,
++        Desktop,
++        Panel,
++        OnScreenDisplay,
++        Notification,
++        Tooltip,
++        CriticalNotification,
++        AppletPopup,
++        ScreenLock,
++        Watermark,
++        SystemWindow,
++        InputPanel,
++        Logout,
++        ScreenLockNotification,
++        Switcher,
++        Authentication
++    };
++    Q_ENUM(WindowRole)
++
++    enum class State : uint32_t {
++        Minimizable = 0x1,
++        Maximizable = 0x2,
++        Closeable = 0x4,
++        Fullscreenable = 0x8,
++        Movable = 0x10,
++        Resizable = 0x20,
++        Focusable = 0x40,
++        Activatable = 0x80,
++        KeepAbove = 0x100,
++        KeepBelow = 0x200,
++    };
++    Q_DECLARE_FLAGS(States, State)
++
++    enum class Position {
++        Top,
++        Bottom,
++        Left,
++        Right
++    };
++    Q_ENUM(Position)
++
++    static UkuiWindowHelper *self();
++    void removeTitleBar(QWidget *widget);
++    void setWindowRole(QWidget *widget, WindowRole role);
++    void setWindowState(QWidget *widget, States state);
++    void setWindowIcon(QWidget *widget, const QString &iconName);
++    void setSkipTaskBar(QWidget *widget, bool skip);
++    void setSkipSwitcher(QWidget *widget, bool skip);
++    void setPanelAutoHide(QWidget *widget, bool autoHide);
++    void grabKeyboard(QWidget *widget);
++    void openUnderCursor(QWidget *widget, QPoint pos);
++    void setBlurEffect(QWidget *widget, QRegion region, int level = 0, bool enable = true);
++    void setSlideEffect(QWidget *widget, Position position, int offset = 0, bool enable = true);
++
++protected:
++    explicit UkuiWindowHelper(QObject *parent = nullptr);
++
++private:
++    static UkuiWindowHelper *s_self;
++};
+diff --git a/kysdk-waylandhelper/src/ukuistylehelper/ukuistylehelper.cpp b/kysdk-waylandhelper/src/ukuistylehelper/ukuistylehelper.cpp
+index 7205b53..120a359 100644
+--- a/kysdk-waylandhelper/src/ukuistylehelper/ukuistylehelper.cpp
++++ b/kysdk-waylandhelper/src/ukuistylehelper/ukuistylehelper.cpp
+@@ -50,6 +50,7 @@ void UkuiStyleHelper::removeHeader(QWidget *widget)
+         return;
+     QString platform = QGuiApplication::platformName();
+     if (platform.startsWith(QLatin1String("wayland"), Qt::CaseInsensitive)) {
++        widget->setProperty("ukui_surface_no_titlebar", true);
+         m_widget = widget;
+         m_widget->installEventFilter(this);
+     } else {
+diff --git a/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.cpp b/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.cpp
+index 3e859c7..2931e7d 100644
+--- a/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.cpp
++++ b/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.cpp
+@@ -719,6 +719,7 @@ void UkuiWaylandInterface::setSkipTaskBar(QWindow *window, bool skip)
+ {
+     if (!window)
+         return;
++    window->setProperty("ukui_surface_skip_taskbar", skip);
+     if (!m_ukuiShell)
+         return;
+ 
+@@ -742,6 +743,7 @@ void UkuiWaylandInterface::setSkipSwitcher(QWindow *window, bool skip)
+ {
+     if (!window)
+         return;
++    window->setProperty("ukui_surface_skip_switcher", skip);
+     if (!m_ukuiShell)
+         return;
+ 
+diff --git a/kysdk-waylandhelper/test/testukuiwindowhelper/main.cpp b/kysdk-waylandhelper/test/testukuiwindowhelper/main.cpp
+new file mode 100644
+index 0000000..5454e36
+--- /dev/null
++++ b/kysdk-waylandhelper/test/testukuiwindowhelper/main.cpp
+@@ -0,0 +1,14 @@
++#include "widget.h"
++#include <QApplication>
++
++int main(int argc, char *argv[])
++{
++    qputenv("QT_QPA_PLATFORM", "wayland");
++    qputenv("QT_QPA_PLATFORMTHEME", "ukui");
++    // Now ukui-shell is disabled by default, enable it.
++    qputenv("QT_WAYLAND_SHELL_INTEGRATION", "ukui-shell");
++    QApplication a(argc, argv);
++    Widget w;
++    w.show();
++    return a.exec();
++}
+diff --git a/kysdk-waylandhelper/test/testukuiwindowhelper/testukuiwindowhelper.pro b/kysdk-waylandhelper/test/testukuiwindowhelper/testukuiwindowhelper.pro
+new file mode 100644
+index 0000000..480484b
+--- /dev/null
++++ b/kysdk-waylandhelper/test/testukuiwindowhelper/testukuiwindowhelper.pro
+@@ -0,0 +1,28 @@
++QT       += core gui
++
++greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
++
++CONFIG += c++11
++
++# The following define makes your compiler emit warnings if you use
++# any Qt feature that has been marked deprecated (the exact warnings
++# depend on your compiler). Please consult the documentation of the
++# deprecated API in order to know how to port your code away from it.
++DEFINES += QT_DEPRECATED_WARNINGS
++
++# You can also make your code fail to compile if it uses deprecated APIs.
++# In order to do so, uncomment the following line.
++# You can also select to disable deprecated APIs only up to a certain version of Qt.
++#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
++
++SOURCES += \
++    main.cpp \
++    widget.cpp
++
++HEADERS += \
++    widget.h
++
++INCLUDEPATH += \
++    ../../src/kysdk-ukuiwindowhelper/
++
++LIBS += $$OUT_PWD/../../src/kysdk-ukuiwindowhelper/libkysdk-ukuiwindowhelper.so
+\ No newline at end of file
+diff --git a/kysdk-waylandhelper/test/testukuiwindowhelper/widget.cpp b/kysdk-waylandhelper/test/testukuiwindowhelper/widget.cpp
+new file mode 100644
+index 0000000..ce95b4c
+--- /dev/null
++++ b/kysdk-waylandhelper/test/testukuiwindowhelper/widget.cpp
+@@ -0,0 +1,158 @@
++#include "widget.h"
++
++#include "ukuiwindowhelper.h"
++
++#include <QCheckBox>
++#include <QComboBox>
++#include <QDebug>
++#include <QDialog>
++#include <QGridLayout>
++#include <QLabel>
++#include <QLineEdit>
++
++Widget::Widget(QWidget *parent)
++    : QWidget(parent)
++{
++    UkuiWindowHelper::self()->setSkipTaskBar(this, true);
++    UkuiWindowHelper::self()->setSkipSwitcher(this, true);
++
++    QGridLayout *layout = new QGridLayout(this);
++
++    // 位置
++    QHBoxLayout *hbox_pos = new QHBoxLayout();
++    QLabel *label = new QLabel("位置", this);
++    lineEdit_pos = new QLineEdit("200,200", this);
++    hbox_pos->addWidget(label);
++    hbox_pos->addWidget(lineEdit_pos);
++
++    // role
++    QHBoxLayout *hbox_role = new QHBoxLayout();
++    QLabel *label_role = new QLabel("Role", this);
++    comboBox_role = new QComboBox(this);
++    comboBox_role->addItem("normal");
++    comboBox_role->addItem("desktop");
++    comboBox_role->addItem("panel");
++    comboBox_role->addItem("onscreendisplay");
++    comboBox_role->addItem("notification");
++    comboBox_role->addItem("tooltip");
++    comboBox_role->addItem("criticalnotification");
++    comboBox_role->addItem("appletpopup");
++    comboBox_role->addItem("screenlock");
++    comboBox_role->addItem("watermark");
++    comboBox_role->addItem("systemwindow");
++    comboBox_role->addItem("inputpanel");
++    comboBox_role->addItem("logout");
++    comboBox_role->addItem("screenlocknotification");
++    comboBox_role->addItem("switcher");
++    comboBox_role->addItem("authentication");
++    hbox_pos->addWidget(label_role);
++    hbox_pos->addWidget(comboBox_role);
++    layout->addLayout(hbox_pos, 0, 0, 1, 4);
++
++    // 跳过任务栏
++    checkBox_skipTaskbar = new QCheckBox("SkipTaskBar", this);
++    layout->addWidget(checkBox_skipTaskbar, 1, 0);
++
++    // 跳过Switcher
++    checkBox_skipSwitcher = new QCheckBox("SkipSwitcher", this);
++    layout->addWidget(checkBox_skipSwitcher, 1, 1);
++
++    // 窗口标题栏
++    checkBox_titleBar = new QCheckBox("NoTitleBar", this);
++    layout->addWidget(checkBox_titleBar, 1, 2);
++
++    // state
++    checkBox_state_maximizable = new QCheckBox("Maximizable", this);
++    layout->addWidget(checkBox_state_maximizable, 1, 3);
++
++    checkBox_state_minimizable = new QCheckBox("Minimizable", this);
++    layout->addWidget(checkBox_state_minimizable, 2, 0);
++
++    checkBox_state_fullscreenable = new QCheckBox("Fullscreenable", this);
++    layout->addWidget(checkBox_state_fullscreenable, 2, 1);
++
++    checkBox_state_closeable = new QCheckBox("Closeable", this);
++    layout->addWidget(checkBox_state_closeable, 2, 2);
++
++    checkBox_state_movable = new QCheckBox("Movable", this);
++    layout->addWidget(checkBox_state_movable, 2, 3);
++
++    checkBox_state_resizable = new QCheckBox("Resizable", this);
++    layout->addWidget(checkBox_state_resizable, 3, 0);
++
++    checkBox_state_focusable = new QCheckBox("Focusable", this);
++    layout->addWidget(checkBox_state_focusable, 3, 1);
++
++    checkBox_state_activatable = new QCheckBox("Activatable", this);
++    layout->addWidget(checkBox_state_activatable, 3, 2);
++
++    checkBox_state_keep_above = new QCheckBox("KeepAbove", this);
++    layout->addWidget(checkBox_state_keep_above, 3, 3);
++
++    checkBox_state_keep_below = new QCheckBox("KeepBelow", this);
++    layout->addWidget(checkBox_state_keep_below, 4, 0);
++
++    QPushButton *btn = new QPushButton("打开窗口", this);
++    connect(btn, &QPushButton::clicked, [this] {
++        if (childWindow == nullptr) {
++            childWindow = new QDialog(this);
++            initChildWindow(childWindow);
++            childWindow->resize(420, 360);
++            childWindow->show();
++        }
++    });
++
++    QPushButton *btnClose = new QPushButton("关闭窗口", this);
++    connect(btnClose, &QPushButton::clicked, [this] {
++        if (childWindow != nullptr) {
++            childWindow->close();
++            childWindow = nullptr;
++        }
++    });
++    QHBoxLayout *hbox_btn = new QHBoxLayout();
++    hbox_btn->addWidget(btn);
++    hbox_btn->addWidget(btnClose);
++    layout->addLayout(hbox_btn, 5, 0, 1, 4);
++
++    setLayout(layout);
++}
++
++Widget::~Widget()
++{
++}
++
++void Widget::initChildWindow(QWidget *w)
++{
++    if (QStringList pos = lineEdit_pos->text().split(","); pos.size() == 2) {
++        w->move(pos[0].toInt(), pos[1].toInt());
++    }
++    UkuiWindowHelper::self()->setSkipTaskBar(w, checkBox_skipTaskbar->isChecked());
++    UkuiWindowHelper::self()->setSkipSwitcher(w, checkBox_skipSwitcher->isChecked());
++    if (checkBox_titleBar->isChecked())
++        UkuiWindowHelper::self()->removeTitleBar(w);
++    UkuiWindowHelper::self()->setWindowRole(w, (UkuiWindowHelper::WindowRole)comboBox_role->currentIndex());
++
++    UkuiWindowHelper::States states;
++    uint32_t state = 0;
++    if (checkBox_state_minimizable->isChecked())
++        states |= UkuiWindowHelper::State::Minimizable;
++    if (checkBox_state_maximizable->isChecked())
++        states |= UkuiWindowHelper::State::Maximizable;
++    if (checkBox_state_fullscreenable->isChecked())
++        states |= UkuiWindowHelper::State::Fullscreenable;
++    if (checkBox_state_closeable->isChecked())
++        states |= UkuiWindowHelper::State::Closeable;
++    if (checkBox_state_movable->isChecked())
++        states |= UkuiWindowHelper::State::Movable;
++    if (checkBox_state_resizable->isChecked())
++        states |= UkuiWindowHelper::State::Resizable;
++    if (checkBox_state_focusable->isChecked())
++        states |= UkuiWindowHelper::State::Focusable;
++    if (checkBox_state_activatable->isChecked())
++        states |= UkuiWindowHelper::State::Activatable;
++    if (checkBox_state_keep_above->isChecked())
++        states |= UkuiWindowHelper::State::KeepAbove;
++    if (checkBox_state_keep_below->isChecked())
++        states |= UkuiWindowHelper::State::KeepBelow;
++    UkuiWindowHelper::self()->setWindowState(w, states);
++}
+\ No newline at end of file
+diff --git a/kysdk-waylandhelper/test/testukuiwindowhelper/widget.h b/kysdk-waylandhelper/test/testukuiwindowhelper/widget.h
+new file mode 100644
+index 0000000..7fb5a9f
+--- /dev/null
++++ b/kysdk-waylandhelper/test/testukuiwindowhelper/widget.h
+@@ -0,0 +1,49 @@
++#pragma once
++
++#include <QPushButton>
++#include <QWidget>
++
++class QLineEdit;
++class QComboBox;
++class QCheckBox;
++
++class Widget : public QWidget
++{
++    Q_OBJECT
++public:
++    explicit Widget(QWidget *parent = nullptr);
++    ~Widget() override;
++
++    enum state {
++        state_minimizable = 0x1,
++        state_maximizable = 0x2,
++        state_fullscreenable = 0x4,
++        state_closeable = 0x8,
++        state_movable = 0x10,
++        state_resizable = 0x20,
++        state_focusable = 0x40,
++        state_activatable = 0x80,
++        state_keep_above = 0x100,
++        state_keep_below = 0x200,
++    };
++
++private:
++    QWidget *childWindow = nullptr;
++    QLineEdit *lineEdit_pos = nullptr;
++    QComboBox *comboBox_role = nullptr;
++    QCheckBox *checkBox_skipTaskbar = nullptr;
++    QCheckBox *checkBox_skipSwitcher = nullptr;
++    QCheckBox *checkBox_titleBar = nullptr;
++    QCheckBox *checkBox_state_minimizable = nullptr;
++    QCheckBox *checkBox_state_maximizable = nullptr;
++    QCheckBox *checkBox_state_fullscreenable = nullptr;
++    QCheckBox *checkBox_state_closeable = nullptr;
++    QCheckBox *checkBox_state_movable = nullptr;
++    QCheckBox *checkBox_state_resizable = nullptr;
++    QCheckBox *checkBox_state_focusable = nullptr;
++    QCheckBox *checkBox_state_activatable = nullptr;
++    QCheckBox *checkBox_state_keep_above = nullptr;
++    QCheckBox *checkBox_state_keep_below = nullptr;
++
++    void initChildWindow(QWidget *window);
++};
+\ No newline at end of file
diff -Nru libkysdk-applications-2.5.1.0/debian/patches/0010-update-changelog.patch libkysdk-applications-2.5.2.0/debian/patches/0010-update-changelog.patch
--- libkysdk-applications-2.5.1.0/debian/patches/0010-update-changelog.patch	2024-07-31 11:09:38.000000000 +0800
+++ libkysdk-applications-2.5.2.0/debian/patches/0010-update-changelog.patch	1970-01-01 08:00:00.000000000 +0800
@@ -1,57 +0,0 @@
-From: sunzhen <sunzhen1@kylinos.cn>
-Date: Fri, 31 May 2024 14:51:20 +0800
-Subject: update changelog
-
----
- kysdk-waylandhelper/src/blurmanager/blurwaylandinterface.cpp | 8 +++-----
- kysdk-waylandhelper/src/blurmanager/blurwaylandinterface.h   | 3 +--
- 2 files changed, 4 insertions(+), 7 deletions(-)
-
-diff --git a/kysdk-waylandhelper/src/blurmanager/blurwaylandinterface.cpp b/kysdk-waylandhelper/src/blurmanager/blurwaylandinterface.cpp
-index 48fd09d..654bddd 100644
---- a/kysdk-waylandhelper/src/blurmanager/blurwaylandinterface.cpp
-+++ b/kysdk-waylandhelper/src/blurmanager/blurwaylandinterface.cpp
-@@ -9,6 +9,7 @@ static void handle_global(void *data,struct wl_registry *wl_registry,uint32_t na
- static void handle_global_remove(void *data, struct wl_registry *wl_registry, uint32_t name)
- {
- }
-+const struct wl_registry_listener BlurWaylandInterface::s_registryListener = {handle_global, handle_global_remove};
- 
- BlurWaylandInterface::BlurWaylandInterface(QObject *parent)
-     : BlurAbstractInterface(parent)
-@@ -23,12 +24,9 @@ BlurWaylandInterface::BlurWaylandInterface(QObject *parent)
-             m_compositor = m_registry->createCompositor(interface.name, interface.version, this);
-         }
-     });
--    struct wl_registry_listener registry_listener = {
--        .global = handle_global,
--        .global_remove = handle_global_remove
--    };
-+
-     wl_registry* registry = *m_registry;
--    wl_registry_add_listener(registry, &registry_listener, this);
-+    wl_registry_add_listener(registry, &s_registryListener, this);
- 
-     m_registry->setup();
-     m_connection->roundtrip();
-diff --git a/kysdk-waylandhelper/src/blurmanager/blurwaylandinterface.h b/kysdk-waylandhelper/src/blurmanager/blurwaylandinterface.h
-index 2444c97..babbf06 100644
---- a/kysdk-waylandhelper/src/blurmanager/blurwaylandinterface.h
-+++ b/kysdk-waylandhelper/src/blurmanager/blurwaylandinterface.h
-@@ -15,8 +15,6 @@
- 
- using namespace KWayland::Client;
- 
--class BlurWaylandInterfacePrivate;
--
- class BlurWaylandInterface : public BlurAbstractInterface
- {
-     Q_OBJECT
-@@ -42,6 +40,7 @@ private:
-     QMap<QWindow*,Surface*>m_surfaces;
-     QMap<QWindow*,Region*>m_regions;
-     QMap<QWindow*,UkuiBlur*>m_blurs;
-+    static const struct wl_registry_listener s_registryListener;
- };
- 
- #endif // BLURWAYLANDINTERFACE_H
diff -Nru libkysdk-applications-2.5.1.0/debian/patches/0011-UkuiWindowHelper.patch libkysdk-applications-2.5.2.0/debian/patches/0011-UkuiWindowHelper.patch
--- libkysdk-applications-2.5.1.0/debian/patches/0011-UkuiWindowHelper.patch	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/debian/patches/0011-UkuiWindowHelper.patch	2025-03-17 13:09:05.000000000 +0800
@@ -0,0 +1,328 @@
+From: Jie Liu <liujie01@kylinos.cn>
+Date: Wed, 19 Mar 2025 15:20:25 +0800
+Subject: =?utf-8?b?VWt1aVdpbmRvd0hlbHBlcuaooeWdl+aOpeWPo+W9ouW8j+iwg+aVtA==?=
+
+---
+ .vscode/launch.json                                |   2 +-
+ .../kysdk-ukuiwindowhelper/ukuiwindowhelper.cpp    | 146 ++++++++++++---------
+ .../src/kysdk-ukuiwindowhelper/ukuiwindowhelper.h  |  34 ++---
+ .../test/testukuiwindowhelper/widget.cpp           |  17 ++-
+ 4 files changed, 113 insertions(+), 86 deletions(-)
+
+diff --git a/.vscode/launch.json b/.vscode/launch.json
+index 4f85566..b8a1d73 100644
+--- a/.vscode/launch.json
++++ b/.vscode/launch.json
+@@ -28,7 +28,7 @@
+                 },
+                 {
+                     "name": "LD_LIBRARY_PATH",
+-                    "value": "${workspaceFolder}/build/kysdk-waylandhelper:${workspaceFolder}/build/kysdk-waylandhelper/src/ukuiwindowhelper:${env:LD_LIBRARY_PATH}"
++                    "value": "${workspaceFolder}/build/kysdk-waylandhelper:${workspaceFolder}/build/kysdk-waylandhelper/src/kysdk-ukuiwindowhelper:${env:LD_LIBRARY_PATH}"
+                 }
+             ],
+             "externalConsole": false,
+diff --git a/kysdk-waylandhelper/src/kysdk-ukuiwindowhelper/ukuiwindowhelper.cpp b/kysdk-waylandhelper/src/kysdk-ukuiwindowhelper/ukuiwindowhelper.cpp
+index ec30c73..6854b17 100644
+--- a/kysdk-waylandhelper/src/kysdk-ukuiwindowhelper/ukuiwindowhelper.cpp
++++ b/kysdk-waylandhelper/src/kysdk-ukuiwindowhelper/ukuiwindowhelper.cpp
+@@ -1,116 +1,138 @@
+ #include "ukuiwindowhelper.h"
+ 
++#include <QDebug>
+ #include <QPair>
+ #include <QVariant>
+ #include <QWidget>
++#include <QWindow>
+ 
+-UkuiWindowHelper *UkuiWindowHelper::s_self = nullptr;
+-
+-UkuiWindowHelper *UkuiWindowHelper::self()
++UkuiWindowHelper::UkuiWindowHelper(QWidget *widget)
++    : m_widget(widget)
+ {
+-    if (!s_self)
+-        s_self = new UkuiWindowHelper();
+-    return s_self;
++    if (!m_widget) {
++        qWarning() << "Creating a UkuiWindowHelper for a null QWidget(nullptr)!";
++    }
++    connect(m_widget, &QObject::destroyed, this, &QObject::deleteLater);
+ }
+ 
+-UkuiWindowHelper::UkuiWindowHelper(QObject *parent)
+-    : QObject(parent)
++UkuiWindowHelper::UkuiWindowHelper(QWindow *window)
++    : m_window(window)
+ {
++    if (!m_window) {
++        qWarning() << "Creating a UkuiWindowHelper for a QWindow(nullptr)!";
++    }
++    connect(m_widget, &QObject::destroyed, this, &QObject::deleteLater);
+ }
+ 
+-void UkuiWindowHelper::removeTitleBar(QWidget *widget)
++UkuiWindowHelper::~UkuiWindowHelper()
+ {
+-    if (!widget)
+-        return;
+-
+-    widget->setProperty("ukui_surface_no_titlebar", true);
+ }
+ 
+-void UkuiWindowHelper::setWindowRole(QWidget *widget, WindowRole role)
++void UkuiWindowHelper::removeTitleBar()
+ {
+-    if (!widget)
+-        return;
+-
+-    widget->setProperty("ukui_surface_role_v1", (int)role);
++    if (m_widget) {
++        m_widget->setProperty("ukui_surface_no_titlebar", true);
++    } else if (m_window) {
++        m_widget->setProperty("ukui_surface_no_titlebar", false);
++    }
+ }
+ 
+-void UkuiWindowHelper::setWindowState(QWidget *widget, States states)
++void UkuiWindowHelper::setWindowRole(WindowRole role)
+ {
+-    if (!widget)
+-        return;
++    if (m_widget) {
++        m_widget->setProperty("ukui_surface_role_v1", (int)role);
++    } else if (m_window) {
++        m_window->setProperty("ukui_surface_role_v1", (int)role);
++    }
++}
+ 
++void UkuiWindowHelper::setWindowState(States states)
++{
+     QPair<uint32_t, uint32_t> pair(0x3ff, states);
+-    widget->setProperty("ukui_surface_state", QVariant::fromValue(pair));
++    if (m_widget) {
++        m_widget->setProperty("ukui_surface_state", QVariant::fromValue(pair));
++    } else if (m_window) {
++        m_window->setProperty("ukui_surface_state", QVariant::fromValue(pair));
++    }
+ }
+ 
+-void UkuiWindowHelper::setWindowIcon(QWidget *widget, const QString &iconName)
++void UkuiWindowHelper::setWindowIcon(const QString &iconName)
+ {
+-    if (!widget)
+-        return;
+-
+-    widget->setProperty("ukui_surface_icon_name", iconName);
++    if (m_widget) {
++        m_widget->setProperty("ukui_surface_icon_name", iconName);
++    } else if (m_window) {
++        m_window->setProperty("ukui_surface_icon_name", iconName);
++    }
+ }
+ 
+-void UkuiWindowHelper::setSkipTaskBar(QWidget *widget, bool skip)
++void UkuiWindowHelper::setSkipTaskBar(bool skip)
+ {
+-    if (!widget)
+-        return;
+-
+-    widget->setProperty("ukui_surface_skip_taskbar", skip);
++    if (m_widget) {
++        m_widget->setProperty("ukui_surface_skip_taskbar", skip);
++    } else if (m_window) {
++        m_window->setProperty("ukui_surface_skip_taskbar", skip);
++    }
+ }
+ 
+-void UkuiWindowHelper::setSkipSwitcher(QWidget *widget, bool skip)
++void UkuiWindowHelper::setSkipSwitcher(bool skip)
+ {
+-    if (!widget)
+-        return;
+-
+-    widget->setProperty("ukui_surface_skip_switcher", skip);
++    if (m_widget) {
++        m_widget->setProperty("ukui_surface_skip_switcher", skip);
++    } else if (m_window) {
++        m_window->setProperty("ukui_surface_skip_switcher", skip);
++    }
+ }
+ 
+-void UkuiWindowHelper::setPanelAutoHide(QWidget *widget, bool autoHide)
++void UkuiWindowHelper::setPanelAutoHide(bool autoHide)
+ {
+-    if (!widget)
+-        return;
+-
+-    widget->setProperty("ukui_surface_panel_auto_hide", autoHide);
++    if (m_widget) {
++        m_widget->setProperty("ukui_surface_panel_auto_hide", autoHide);
++    } else if (m_window) {
++        m_window->setProperty("ukui_surface_panel_auto_hide", autoHide);
++    }
+ }
+ 
+-void UkuiWindowHelper::grabKeyboard(QWidget *widget)
++void UkuiWindowHelper::grabKeyboard()
+ {
+-    if (!widget)
+-        return;
+-
+-    widget->setProperty("ukui_surface_grab_keyboard", true);
++    if (m_widget) {
++        m_widget->setProperty("ukui_surface_grab_keyboard", true);
++    } else if (m_window) {
++        m_window->setProperty("ukui_surface_grab_keyboard", true);
++    }
+ }
+ 
+-void UkuiWindowHelper::openUnderCursor(QWidget *widget, QPoint pos)
++void UkuiWindowHelper::openUnderCursor(QPoint pos)
+ {
+-    if (!widget)
+-        return;
+-
+-    widget->setProperty("ukui_surface_open_under_cursor", pos);
++    if (m_widget) {
++        m_widget->setProperty("ukui_surface_open_under_cursor", pos);
++    } else if (m_window) {
++        m_window->setProperty("ukui_surface_open_under_cursor", pos);
++    }
+ }
+ 
+-void UkuiWindowHelper::setBlurEffect(QWidget *widget, QRegion region, int level, bool enable)
++void UkuiWindowHelper::setBlurEffect(QRegion region, int level, bool enable)
+ {
+-    if (!widget)
+-        return;
+-
+     QPair<QRegion, int> pair(region, level);
+     if (!enable)
+         pair.second = -1;
+-    widget->setProperty("ukui_surface_blur", QVariant::fromValue(pair));
++
++    if (m_widget) {
++        m_widget->setProperty("ukui_surface_blur", QVariant::fromValue(pair));
++    } else if (m_window) {
++        m_window->setProperty("ukui_surface_blur", QVariant::fromValue(pair));
++    }
+ }
+ 
+-void UkuiWindowHelper::setSlideEffect(QWidget *widget, Position position, int offset, bool enable)
++void UkuiWindowHelper::setSlideEffect(Position position, int offset, bool enable)
+ {
+-    if (!widget)
+-        return;
+-
+     QPair<int, int> pair((int)position, offset);
+ 
+     if (!enable)
+         pair.second = -1;
+ 
+-    widget->setProperty("ukui_surface_slide", QVariant::fromValue(pair));
++    if (m_widget) {
++        m_widget->setProperty("ukui_surface_slide", QVariant::fromValue(pair));
++    } else if (m_window) {
++        m_window->setProperty("ukui_surface_slide", QVariant::fromValue(pair));
++    }
+ }
+diff --git a/kysdk-waylandhelper/src/kysdk-ukuiwindowhelper/ukuiwindowhelper.h b/kysdk-waylandhelper/src/kysdk-ukuiwindowhelper/ukuiwindowhelper.h
+index 75c40ea..7e847e0 100644
+--- a/kysdk-waylandhelper/src/kysdk-ukuiwindowhelper/ukuiwindowhelper.h
++++ b/kysdk-waylandhelper/src/kysdk-ukuiwindowhelper/ukuiwindowhelper.h
+@@ -3,11 +3,16 @@
+ #include <QObject>
+ 
+ class QWidget;
++class QWindow;
+ 
+ class UkuiWindowHelper : public QObject
+ {
+     Q_OBJECT
+ public:
++    explicit UkuiWindowHelper(QWidget *widget);
++    explicit UkuiWindowHelper(QWindow *window);
++    ~UkuiWindowHelper();
++
+     enum class WindowRole {
+         Normal,
+         Desktop,
+@@ -50,22 +55,19 @@ public:
+     };
+     Q_ENUM(Position)
+ 
+-    static UkuiWindowHelper *self();
+-    void removeTitleBar(QWidget *widget);
+-    void setWindowRole(QWidget *widget, WindowRole role);
+-    void setWindowState(QWidget *widget, States state);
+-    void setWindowIcon(QWidget *widget, const QString &iconName);
+-    void setSkipTaskBar(QWidget *widget, bool skip);
+-    void setSkipSwitcher(QWidget *widget, bool skip);
+-    void setPanelAutoHide(QWidget *widget, bool autoHide);
+-    void grabKeyboard(QWidget *widget);
+-    void openUnderCursor(QWidget *widget, QPoint pos);
+-    void setBlurEffect(QWidget *widget, QRegion region, int level = 0, bool enable = true);
+-    void setSlideEffect(QWidget *widget, Position position, int offset = 0, bool enable = true);
+-
+-protected:
+-    explicit UkuiWindowHelper(QObject *parent = nullptr);
++    void removeTitleBar();
++    void setWindowRole(WindowRole role);
++    void setWindowState(States state);
++    void setWindowIcon(const QString &iconName);
++    void setSkipTaskBar(bool skip);
++    void setSkipSwitcher(bool skip);
++    void setPanelAutoHide(bool autoHide);
++    void grabKeyboard();
++    void openUnderCursor(QPoint pos);
++    void setBlurEffect(QRegion region, int level = 0, bool enable = true);
++    void setSlideEffect(Position position, int offset = 0, bool enable = true);
+ 
+ private:
+-    static UkuiWindowHelper *s_self;
++    QWidget *m_widget = nullptr;
++    QWindow *m_window = nullptr;
+ };
+diff --git a/kysdk-waylandhelper/test/testukuiwindowhelper/widget.cpp b/kysdk-waylandhelper/test/testukuiwindowhelper/widget.cpp
+index ce95b4c..7452fbb 100644
+--- a/kysdk-waylandhelper/test/testukuiwindowhelper/widget.cpp
++++ b/kysdk-waylandhelper/test/testukuiwindowhelper/widget.cpp
+@@ -13,8 +13,9 @@
+ Widget::Widget(QWidget *parent)
+     : QWidget(parent)
+ {
+-    UkuiWindowHelper::self()->setSkipTaskBar(this, true);
+-    UkuiWindowHelper::self()->setSkipSwitcher(this, true);
++    UkuiWindowHelper *windowHelper = new UkuiWindowHelper(this);
++    windowHelper->setSkipTaskBar(true);
++    windowHelper->setSkipSwitcher(true);
+ 
+     QGridLayout *layout = new QGridLayout(this);
+ 
+@@ -126,11 +127,13 @@ void Widget::initChildWindow(QWidget *w)
+     if (QStringList pos = lineEdit_pos->text().split(","); pos.size() == 2) {
+         w->move(pos[0].toInt(), pos[1].toInt());
+     }
+-    UkuiWindowHelper::self()->setSkipTaskBar(w, checkBox_skipTaskbar->isChecked());
+-    UkuiWindowHelper::self()->setSkipSwitcher(w, checkBox_skipSwitcher->isChecked());
++    UkuiWindowHelper *windowHelper = new UkuiWindowHelper(w);
++
++    windowHelper->setSkipTaskBar(checkBox_skipTaskbar->isChecked());
++    windowHelper->setSkipSwitcher(checkBox_skipSwitcher->isChecked());
+     if (checkBox_titleBar->isChecked())
+-        UkuiWindowHelper::self()->removeTitleBar(w);
+-    UkuiWindowHelper::self()->setWindowRole(w, (UkuiWindowHelper::WindowRole)comboBox_role->currentIndex());
++        windowHelper->removeTitleBar();
++    windowHelper->setWindowRole((UkuiWindowHelper::WindowRole)comboBox_role->currentIndex());
+ 
+     UkuiWindowHelper::States states;
+     uint32_t state = 0;
+@@ -154,5 +157,5 @@ void Widget::initChildWindow(QWidget *w)
+         states |= UkuiWindowHelper::State::KeepAbove;
+     if (checkBox_state_keep_below->isChecked())
+         states |= UkuiWindowHelper::State::KeepBelow;
+-    UkuiWindowHelper::self()->setWindowState(w, states);
++    windowHelper->setWindowState(states);
+ }
+\ No newline at end of file
diff -Nru libkysdk-applications-2.5.1.0/debian/patches/0011-update-changelog.patch libkysdk-applications-2.5.2.0/debian/patches/0011-update-changelog.patch
--- libkysdk-applications-2.5.1.0/debian/patches/0011-update-changelog.patch	2024-07-31 11:09:38.000000000 +0800
+++ libkysdk-applications-2.5.2.0/debian/patches/0011-update-changelog.patch	1970-01-01 08:00:00.000000000 +0800
@@ -1,143 +0,0 @@
-From: wangzhenyu <wangzhenyu@kylinos.cn>
-Date: Fri, 31 May 2024 17:12:50 +0800
-Subject: update changelog
-
----
- kysdk-qtwidgets/src/ksearchlineedit.cpp | 58 +++++++++++++++++++++++++--------
- 1 file changed, 45 insertions(+), 13 deletions(-)
-
-diff --git a/kysdk-qtwidgets/src/ksearchlineedit.cpp b/kysdk-qtwidgets/src/ksearchlineedit.cpp
-index 36390e3..100b89c 100644
---- a/kysdk-qtwidgets/src/ksearchlineedit.cpp
-+++ b/kysdk-qtwidgets/src/ksearchlineedit.cpp
-@@ -151,7 +151,7 @@ private:
-     QTimer *m_timer;
-     void sltUpdateCursorRect();
-     void init();
--
-+    QString m_systemName;
- };
- 
- KSearchLineEdit::KSearchLineEdit(QWidget *parent)
-@@ -382,6 +382,7 @@ bool KSearchLineEdit::eventFilter(QObject *watched, QEvent *event)
-         }
-         case QEvent::FocusIn:
-         {
-+            d->m_pTextLabel->setVisible(false);
-             //文本为空时获取焦点延时显示光标
-             if(text().isEmpty())
-             {
-@@ -393,7 +394,7 @@ bool KSearchLineEdit::eventFilter(QObject *watched, QEvent *event)
-             {
-                 if(d->isTextEmpty)
-                 {
--                    d->m_pTextLabel->setVisible(false);
-+//                    d->m_pTextLabel->setVisible(false);
-                     d->isTextEmpty=false;
-                 }
-             }
-@@ -407,7 +408,7 @@ bool KSearchLineEdit::eventFilter(QObject *watched, QEvent *event)
-                     d->m_pAnimation->start();
-                     d->isTextEmpty = false;
-                 }
--                d->m_pTextLabel->setVisible(false);
-+//                d->m_pTextLabel->setVisible(false);
-             }
-             d->adjustLayout();
-             break ;
-@@ -485,8 +486,17 @@ void KSearchLineEditPrivate::adjustHolderRect()
- 
- 
-     m_sideRect = m_pWidget->rect();
--    m_sideRect.moveTop((q->rect().height()-m_pWidget->height())/2);
--    m_sideRect.moveLeft(iconMargin);
-+    if(m_systemName == "ug_CN" || m_systemName == "kk_KZ" || m_systemName == "ky_KG")
-+    {
-+        m_sideRect.moveTop((q->rect().height()-m_pWidget->height())/2);
-+        m_sideRect.moveLeft(q->rect().width() - m_sideRect.width() - iconMargin);
-+    }
-+    else
-+    {
-+        m_sideRect.moveTop((q->rect().height()-m_pWidget->height())/2);
-+        m_sideRect.moveLeft(iconMargin);
-+    }
-+
-     if(m_placeHolderAlignment & Qt::AlignCenter)
-     {
-         m_holderRect = m_pWidget->rect();
-@@ -521,8 +531,17 @@ void KSearchLineEditPrivate::adjustLayout()
-     if(!m_pCustomButton->isHidden())
-         width +=(spacing + m_pCustomButton->iconSize().width());
-     m_pSubWidget->setFixedSize(width,q->cursorRect().height());
--    m_pSubWidget->move(q->width()-m_pSubWidget->width(),(q->rect().height()-m_pSubWidget->height())/2);
--    q->setTextMargins(m_pWidget->width(),0,m_pSubWidget->width(),0);
-+    if(m_systemName == "ug_CN" || m_systemName == "kk_KZ" || m_systemName == "ky_KG")
-+    {
-+        m_pSubWidget->move(0,(q->rect().height()-m_pSubWidget->height())/2);
-+        q->setTextMargins(m_pSubWidget->width(),0,m_pWidget->width(),0);
-+    }
-+    else
-+    {
-+        m_pSubWidget->move(q->width()-m_pSubWidget->width(),(q->rect().height()-m_pSubWidget->height())/2);
-+        q->setTextMargins(m_pWidget->width(),0,m_pSubWidget->width(),0);
-+    }
-+
- }
- 
- void KSearchLineEdit::resizeEvent(QResizeEvent *event)
-@@ -656,7 +675,13 @@ void KSearchLineEditPrivate::doAnimationFinished()
- {
-     Q_Q(KSearchLineEdit);
-     if(m_isSearching)
--        q->setTextMargins(iconMargin + m_pIconLabel->width(),0,0,0);
-+    {
-+        if(m_systemName == "ug_CN" || m_systemName == "kk_KZ" || m_systemName == "ky_KG")
-+            q->setTextMargins(m_pSubWidget->width(),0,iconMargin + m_pIconLabel->width(),0);
-+        else
-+            q->setTextMargins(iconMargin + m_pIconLabel->width(),0,m_pSubWidget->width(),0);
-+    }
-+
- }
- 
- void KSearchLineEditPrivate::doEditingFinished()
-@@ -804,11 +829,11 @@ void KSearchLineEditPrivate::init()
-     m_pSubWidget = new QWidget(q);
-     QHBoxLayout *layout = new QHBoxLayout(m_pSubWidget);
-     layout->setContentsMargins(0,0,0,0);
--    layout->addSpacing(5);
-+    layout->addSpacing(iconMargin);
-     layout->addWidget(m_pClearButton);
-     layout->addWidget(m_pLineFrame);
-     layout->addWidget(m_pCustomButton);
--    layout->addSpacing(5);
-+    layout->addSpacing(iconMargin);
-     m_pSubWidget->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed);
- 
-     m_isSearching = false;
-@@ -833,7 +858,14 @@ void KSearchLineEditPrivate::init()
-     m_pAnimation = new QPropertyAnimation(m_pWidget,"geometry");
-     m_pAnimation->setEasingCurve(QEasingCurve::InOutQuad);
-     m_pAnimation->setDuration(200);
--    q->setTextMargins(iconMargin + m_pIconLabel->width(),0,0,0);
-+
-+    m_systemName = QLocale::system().name();
-+    if(m_systemName == "ug_CN" || m_systemName == "kk_KZ" || m_systemName == "ky_KG")
-+        q->setAlignment(Qt::AlignRight);
-+    else
-+        q->setAlignment(Qt::AlignLeft);
-+
-+    q->setTextMargins(iconMargin + m_pIconLabel->width(),0,m_pSubWidget->width(),0);
- }
- 
- ListViewDelegate::ListViewDelegate(QObject *parent):QStyledItemDelegate(parent)
-@@ -973,8 +1005,8 @@ void ListViewDelegate::paint(QPainter *painter, const QStyleOptionViewItem &opti
-     {
-         if(option.state.testFlag(QStyle::State_MouseOver))
-             QToolTip::showText(QCursor::pos(),str,qobject_cast<QWidget*>(const_cast<QWidget*>(option.widget)));
--        else
--            QToolTip::hideText();
-+//        else
-+//            QToolTip::hideText();
- 
-         str=fm.elidedText(str,Qt::ElideRight,rect.width()-12);
-     }
diff -Nru libkysdk-applications-2.5.1.0/debian/patches/0012-add-highlight-interface.patch libkysdk-applications-2.5.2.0/debian/patches/0012-add-highlight-interface.patch
--- libkysdk-applications-2.5.1.0/debian/patches/0012-add-highlight-interface.patch	2024-07-31 11:09:38.000000000 +0800
+++ libkysdk-applications-2.5.2.0/debian/patches/0012-add-highlight-interface.patch	1970-01-01 08:00:00.000000000 +0800
@@ -1,271 +0,0 @@
-From: sunzhen <sunzhen1@kylinos.cn>
-Date: Tue, 4 Jun 2024 10:10:18 +0800
-Subject: add highlight interface
-
----
- .../src/windowmanager/abstractinterface.cpp        | 11 ++++++++++
- .../src/windowmanager/abstractinterface.h          |  2 ++
- .../src/windowmanager/ukuiwaylandinterface.cpp     | 23 +++++++++++++++++++++
- .../src/windowmanager/ukuiwaylandinterface.h       |  3 +++
- .../src/windowmanager/ukuiwindowmanagement.cpp     | 24 ++++++++++++++++++++++
- .../src/windowmanager/ukuiwindowmanagement.h       |  6 ++++++
- .../src/windowmanager/windowmanager.cpp            | 16 +++++++++++++++
- .../src/windowmanager/windowmanager.h              | 15 ++++++++++++++
- .../test/testWindowManager/widget.cpp              | 17 +++++++++++++--
- .../test/testWindowManager/widget.h                |  2 ++
- 10 files changed, 117 insertions(+), 2 deletions(-)
-
-diff --git a/kysdk-waylandhelper/src/windowmanager/abstractinterface.cpp b/kysdk-waylandhelper/src/windowmanager/abstractinterface.cpp
-index 4799ed2..1a9482f 100644
---- a/kysdk-waylandhelper/src/windowmanager/abstractinterface.cpp
-+++ b/kysdk-waylandhelper/src/windowmanager/abstractinterface.cpp
-@@ -168,3 +168,14 @@ WindowLayer AbstractInterface::windowLayer(QWindow *window)
-     Q_UNUSED(window)
-     return WindowLayer::Normal;
- }
-+
-+void AbstractInterface::setHighlight(const WindowId &wid, bool highlight)
-+{
-+    Q_UNUSED(wid)
-+    Q_UNUSED(highlight)
-+}
-+
-+bool AbstractInterface::istHighlight(const WindowId &wid)
-+{
-+    Q_UNUSED(wid)
-+}
-diff --git a/kysdk-waylandhelper/src/windowmanager/abstractinterface.h b/kysdk-waylandhelper/src/windowmanager/abstractinterface.h
-index d805ab8..e0b2598 100644
---- a/kysdk-waylandhelper/src/windowmanager/abstractinterface.h
-+++ b/kysdk-waylandhelper/src/windowmanager/abstractinterface.h
-@@ -112,6 +112,8 @@ public:
-     virtual void setGrabKeyboard(QWindow *window, bool grabKeyboard);
-     virtual void setWindowLayer(QWindow *window, WindowLayer layer);
-     virtual WindowLayer windowLayer(QWindow *window);
-+    virtual void setHighlight(const WindowId &wid, bool highlight);
-+    virtual bool istHighlight(const WindowId &wid);
- 
- Q_SIGNALS:
-     void activeWindowChanged(WindowId wid);
-diff --git a/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.cpp b/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.cpp
-index 16b13ae..52a2d69 100644
---- a/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.cpp
-+++ b/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.cpp
-@@ -583,6 +583,29 @@ WindowLayer UkuiWaylandInterface::windowLayer(QWindow *window)
-     return layer;
- }
- 
-+void UkuiWaylandInterface::setHighlight(const WindowId &wid, bool highlight)
-+{
-+    auto w = windowFor(wid);
-+
-+    if (w)
-+    {
-+        highlight ?  w->setHighlight() :  w->unsetHightlight();
-+        m_connection->roundtrip();
-+    }
-+}
-+
-+bool UkuiWaylandInterface::istHighlight(const WindowId &wid)
-+{
-+    auto w = windowFor(wid);
-+
-+    if (w)
-+    {
-+        return w->isHighlight();
-+    }
-+    else
-+        return false;
-+}
-+
- void UkuiWaylandInterface::setGeometry(QWindow *window, const QRect &rect)
- {
-     if(!window)
-diff --git a/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.h b/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.h
-index 60853b5..14883c4 100644
---- a/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.h
-+++ b/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.h
-@@ -95,6 +95,9 @@ public:
-     void setWindowLayer(QWindow *window, WindowLayer layer) override;
-     WindowLayer windowLayer(QWindow *window) override;
- 
-+    void setHighlight(const WindowId &wid, bool highlight) override;
-+    bool istHighlight(const WindowId &wid) override;
-+
- protected:
-     bool eventFilter(QObject *obj, QEvent *ev) override;
- 
-diff --git a/kysdk-waylandhelper/src/windowmanager/ukuiwindowmanagement.cpp b/kysdk-waylandhelper/src/windowmanager/ukuiwindowmanagement.cpp
-index 8d2179e..f539ad1 100644
---- a/kysdk-waylandhelper/src/windowmanager/ukuiwindowmanagement.cpp
-+++ b/kysdk-waylandhelper/src/windowmanager/ukuiwindowmanagement.cpp
-@@ -84,6 +84,7 @@ public:
-     quint32 pid = 0;
-     QString applicationMenuServiceName;
-     QString applicationMenuObjectPath;
-+    bool highlight = false;
- 
- private:
-     static void titleChangedCallback(void *data, ukui_window *window, const char *title);
-@@ -1180,6 +1181,29 @@ void UkuiWindow::sendToOutput(KWayland::Client::Output *output) const
-     }
- }
- 
-+void UkuiWindow::setHighlight()
-+{
-+    if(d->highlight)
-+        return;
-+
-+    ukui_window_highlight(d->window);
-+    d->highlight = true;
-+}
-+
-+void UkuiWindow::unsetHightlight()
-+{
-+    if(!d->highlight)
-+        return;
-+
-+    ukui_window_unset_highlight(d->window);
-+    d->highlight = false;
-+}
-+
-+bool UkuiWindow::isHighlight()
-+{
-+    return d->highlight;
-+}
-+
- 
- 
- 
-diff --git a/kysdk-waylandhelper/src/windowmanager/ukuiwindowmanagement.h b/kysdk-waylandhelper/src/windowmanager/ukuiwindowmanagement.h
-index 23d3aad..882ad0d 100644
---- a/kysdk-waylandhelper/src/windowmanager/ukuiwindowmanagement.h
-+++ b/kysdk-waylandhelper/src/windowmanager/ukuiwindowmanagement.h
-@@ -224,6 +224,12 @@ public:
- 
-     void sendToOutput(Output *output) const;
- 
-+    void setHighlight();
-+
-+    void unsetHightlight();
-+
-+    bool isHighlight();
-+
- 
- 
- Q_SIGNALS:
-diff --git a/kysdk-waylandhelper/src/windowmanager/windowmanager.cpp b/kysdk-waylandhelper/src/windowmanager/windowmanager.cpp
-index d25194a..e8168ff 100644
---- a/kysdk-waylandhelper/src/windowmanager/windowmanager.cpp
-+++ b/kysdk-waylandhelper/src/windowmanager/windowmanager.cpp
-@@ -346,3 +346,19 @@ WindowLayer WindowManager::windowLayer(QWindow *window)
-         return WindowLayer::Normal;
-     return m_wm->winInterface()->windowLayer(window);
- }
-+
-+void WindowManager::setHighlight(const WindowId &wid, bool highlight)
-+{
-+    self();
-+    if(!m_wm)
-+        return ;
-+    return m_wm->winInterface()->setHighlight(wid, highlight);
-+}
-+
-+bool WindowManager::isHightlight(const WindowId &wid)
-+{
-+    self();
-+    if(!m_wm)
-+        return false;
-+    return m_wm->winInterface()->istHighlight(wid);
-+}
-diff --git a/kysdk-waylandhelper/src/windowmanager/windowmanager.h b/kysdk-waylandhelper/src/windowmanager/windowmanager.h
-index d5f6a2d..a6d99bd 100644
---- a/kysdk-waylandhelper/src/windowmanager/windowmanager.h
-+++ b/kysdk-waylandhelper/src/windowmanager/windowmanager.h
-@@ -312,6 +312,21 @@ public:
-      */
-     static WindowLayer windowLayer(QWindow *window);
- 
-+    /**
-+     * @brief setHighlight
-+     * @since 2.5
-+     * @param wid
-+     * @param highlight
-+     */
-+    static void setHighlight(const WindowId &wid, bool highlight);
-+
-+    /**
-+     * @brief isHightlight
-+     * @since 2.5
-+     * @param wid
-+     */
-+    static bool isHightlight(const WindowId &wid);
-+
- Q_SIGNALS:
-      /**
-       * @brief 窗口添加信号
-diff --git a/kysdk-waylandhelper/test/testWindowManager/widget.cpp b/kysdk-waylandhelper/test/testWindowManager/widget.cpp
-index f69f856..ebd379e 100644
---- a/kysdk-waylandhelper/test/testWindowManager/widget.cpp
-+++ b/kysdk-waylandhelper/test/testWindowManager/widget.cpp
-@@ -93,6 +93,7 @@ Widget::Widget(QWidget *parent)
-          * 最新创建的窗体被设置为操作窗体,此demo中每个按钮对应一个接口函数调用,所有接口函数操作的窗口都是该最新创建的窗体
-          */
-     qDebug()<<"窗口添加:"<<WindowManager::getWindowTitle(windowId)<<" "<<windowId;
-+    qDebug()<<"窗口添加:icon:"<<WindowManager::getWindowIcon(windowId);
-     if((quint32)getpid() == WindowManager::getPid(windowId))
-     {
-         m_lastestWindowId = windowId;
-@@ -254,10 +255,14 @@ void Widget::initUI()
-     m_getGeometryBtn = new QPushButton("getGeometry",this);
-     m_setGrabKeyboardBtn = new QPushButton("setGrabKeyboard" ,this);
-     m_setSwitcherLayer = new QPushButton("setSwitcherLayer" ,this);
-+    m_setHighlightBtn = new QPushButton("setHighlight", this);
-+    m_unsetHighlightBtn = new QPushButton("unsetHighlight", this);
-     QHBoxLayout* layout10 = new QHBoxLayout();
-     layout10->addWidget(m_getGeometryBtn);
-     layout10->addWidget(m_setGrabKeyboardBtn);
-     layout10->addWidget(m_setSwitcherLayer);
-+    layout10->addWidget(m_setHighlightBtn);
-+    layout10->addWidget(m_unsetHighlightBtn);
-     box5->setLayout(layout10);
- 
- 
-@@ -282,6 +287,14 @@ void Widget::initUI()
- 
- void Widget::initConnection()
- {   
-+    connect(m_setHighlightBtn,&::QPushButton::clicked, this, [=](){
-+        WindowManager::setHighlight(m_lastestWindowId, true);
-+    });
-+
-+    connect(m_unsetHighlightBtn,&::QPushButton::clicked, this, [=](){
-+        WindowManager::setHighlight(m_lastestWindowId, false);
-+    });
-+
-     connect(m_setSwitcherLayer,&::QPushButton::clicked, this, [=](){
-         WindowManager::setWindowLayer(m_subWidget->windowHandle(), WindowLayer::Switcher);
-     });
-@@ -354,8 +367,8 @@ void Widget::initConnection()
-         }
-     });
-     connect(WindowManager::self(),&WindowManager::activeWindowChanged,this,[=](const WindowId&wid){
--       qDebug()<<"活动窗口改变:"<<wid;
--       qDebug()<<"当前活动窗口为:"<<WindowManager::currentActiveWindow();
-+//       qDebug()<<"活动窗口改变:"<<wid;
-+//       qDebug()<<"当前活动窗口为:"<<WindowManager::currentActiveWindow();
-     });
- 
-     connect(WindowManager::self(),&WindowManager::isShowingDesktopChanged,this,[=](){
-diff --git a/kysdk-waylandhelper/test/testWindowManager/widget.h b/kysdk-waylandhelper/test/testWindowManager/widget.h
-index 8d783f7..91c3fb4 100644
---- a/kysdk-waylandhelper/test/testWindowManager/widget.h
-+++ b/kysdk-waylandhelper/test/testWindowManager/widget.h
-@@ -86,5 +86,7 @@ private:
-     QPushButton* m_getGeometryBtn;
-     QPushButton* m_setGrabKeyboardBtn;
-     QPushButton* m_setSwitcherLayer;
-+    QPushButton* m_setHighlightBtn;
-+    QPushButton* m_unsetHighlightBtn;
- };
- #endif // WIDGET_H
diff -Nru libkysdk-applications-2.5.1.0/debian/patches/0013-Translated-using-Weblate-Uyghur.patch libkysdk-applications-2.5.2.0/debian/patches/0013-Translated-using-Weblate-Uyghur.patch
--- libkysdk-applications-2.5.1.0/debian/patches/0013-Translated-using-Weblate-Uyghur.patch	2024-07-31 11:09:38.000000000 +0800
+++ libkysdk-applications-2.5.2.0/debian/patches/0013-Translated-using-Weblate-Uyghur.patch	1970-01-01 08:00:00.000000000 +0800
@@ -1,215 +0,0 @@
-From: KevinDuan <duankaiwen@kylinos.com>
-Date: Tue, 4 Jun 2024 12:01:11 +0000
-Subject: Translated using Weblate (Uyghur)
-
-Currently translated at 97.2% (36 of 37 strings)
-
-Translation: openkylin-nile-new/libkysdk-applications
-Translate-URL: http://weblate.openkylin.top/projects/openkylin-nile-new/libkysdk-applications/ug/
----
- kysdk-qtwidgets/translations/gui_ug.ts | 50 +++++++++++++++++-----------------
- 1 file changed, 25 insertions(+), 25 deletions(-)
-
-diff --git a/kysdk-qtwidgets/translations/gui_ug.ts b/kysdk-qtwidgets/translations/gui_ug.ts
-index f8a1ea8..ff237c4 100644
---- a/kysdk-qtwidgets/translations/gui_ug.ts
-+++ b/kysdk-qtwidgets/translations/gui_ug.ts
-@@ -11,20 +11,20 @@
-     <message>
-         <location filename="../src/kaboutdialog.cpp" line="123"/>
-         <source>Unable to open mail application</source>
--        <translation>پوچتا يوللانمىسى ئابونت ئاچالمايدۇ</translation>
-+        <translation>ئېلخەت خېرىدارلار تېرمىنالىنى ئاچقىلى بولمىدى</translation>
-     </message>
-     <message>
-         <location filename="../src/kaboutdialog.cpp" line="257"/>
-         <location filename="../src/kaboutdialog.cpp" line="271"/>
-         <source>Service &amp; Support: </source>
-         <translatorcomment>服务与支持团队:</translatorcomment>
--        <translation>مۇلازىمەت ۋە قوللاش كوللېكتىپى : </translation>
-+        <translation>مۇلازىمەت ۋە قوللاش ئەترىتى </translation>
-     </message>
-     <message>
-         <location filename="../src/kaboutdialog.cpp" line="263"/>
-         <location filename="../src/kaboutdialog.cpp" line="277"/>
-         <source>Privacy statement</source>
--        <translation>«مەخپىي كېلىشىم»</translation>
-+        <translation>مەخپىيەتلىكنى ساقلاش باياناتى</translation>
-     </message>
- </context>
- <context>
-@@ -32,12 +32,12 @@
-     <message>
-         <location filename="../src/kaboutdialog.cpp" line="381"/>
-         <source>version :</source>
--        <translation>نەشىرى:</translation>
-+        <translation>نۇسخا</translation>
-     </message>
-     <message>
-         <location filename="../src/kaboutdialog.cpp" line="386"/>
-         <source>Version number not found</source>
--        <translation>ماس نۇسخا نومۇرى تېپىلمىدى</translation>
-+        <translation>ماس كېلىدىغان نۇسخا نومۇرىنى تاپالمىدى</translation>
-     </message>
- </context>
- <context>
-@@ -45,7 +45,7 @@
-     <message>
-         <location filename="../src/kdragwidget.cpp" line="102"/>
-         <source>Select or drag and drop the folder identification path</source>
--        <translation>ھۆججەت قىسقۇچ بەلگىسى تاللاش ياكى سۆرەپ قويۇش يولى</translation>
-+        <translation>ھۆججەت قىسقۇچنىڭ كۆرسەتمە يولىنى تاللاڭ ياكى سۆرەپ ئەكىلىڭ</translation>
-     </message>
- </context>
- <context>
-@@ -53,7 +53,7 @@
-     <message>
-         <location filename="../src/kdragwidget.cpp" line="62"/>
-         <source>Please select file</source>
--        <translation>ھۆججەت تاللاش</translation>
-+        <translation>ھۆججەتنى تاللاڭ</translation>
-     </message>
- </context>
- <context>
-@@ -61,7 +61,7 @@
-     <message>
-         <location filename="../src/kinputdialog.cpp" line="241"/>
-         <source>Enter a value:</source>
--        <translation>سانلىق قىممەتنى تاللاڭ:</translation>
-+        <translation>سانلىق قىممەتنى كىرگۈزۈڭ</translation>
-     </message>
- </context>
- <context>
-@@ -74,7 +74,7 @@
-     <message>
-         <location filename="../src/kinputdialog.cpp" line="252"/>
-         <source>cancel</source>
--        <translation>بىكار قىلىش</translation>
-+        <translation>ئەمەلدىن قالدۇرۇش</translation>
-     </message>
- </context>
- <context>
-@@ -82,18 +82,18 @@
-     <message>
-         <location filename="../src/kmenubutton.cpp" line="67"/>
-         <source>Options</source>
--        <translation>تاللاش</translation>
-+        <translation>كۆپنى تاللاش</translation>
-     </message>
-     <message>
-         <location filename="../src/kmenubutton.cpp" line="68"/>
-         <source>Setting</source>
-         <translatorcomment>设置</translatorcomment>
--        <translation>تەڭشەش</translation>
-+        <translation>بەلگىلەش</translation>
-     </message>
-     <message>
-         <location filename="../src/kmenubutton.cpp" line="69"/>
-         <source>Theme</source>
--        <translation>سىرتقى كۆرۈنۈش</translation>
-+        <translation>سىرتقى كۆرۈنۈشى</translation>
-     </message>
-     <message>
-         <location filename="../src/kmenubutton.cpp" line="70"/>
-@@ -103,7 +103,7 @@
-     <message>
-         <location filename="../src/kmenubutton.cpp" line="71"/>
-         <source>About</source>
--        <translation>ھەققىدە</translation>
-+        <translation>ئالاقىدارلار</translation>
-     </message>
-     <message>
-         <location filename="../src/kmenubutton.cpp" line="72"/>
-@@ -113,7 +113,7 @@
-     <message>
-         <location filename="../src/kmenubutton.cpp" line="79"/>
-         <source>Auto</source>
--        <translation>سېستىمىغا ئەگىشىش</translation>
-+        <translation>سىستېمىغا ئەگىشىش</translation>
-     </message>
-     <message>
-         <location filename="../src/kmenubutton.cpp" line="81"/>
-@@ -131,7 +131,7 @@
-     <message>
-         <location filename="../src/kprogressdialog.cpp" line="70"/>
-         <source>cancel</source>
--        <translation>بىكار قىلىش</translation>
-+        <translation>ئەمەلدىن قالدۇرۇش</translation>
-     </message>
- </context>
- <context>
-@@ -140,7 +140,7 @@
-         <location filename="../src/ksearchlineedit.cpp" line="627"/>
-         <location filename="../src/ksearchlineedit.cpp" line="815"/>
-         <source>Search</source>
--        <translation>ئىزدىمەكچى بولغان مەزمۇننى كىرگۈزۈڭ</translation>
-+        <translation>ئىزدەش</translation>
-     </message>
- </context>
- <context>
-@@ -158,7 +158,7 @@
-     <message>
-         <location filename="../src/ksecuritylevelbar.cpp" line="68"/>
-         <source>High</source>
--        <translation>ئېگىز</translation>
-+        <translation>يۇقىرى</translation>
-     </message>
- </context>
- <context>
-@@ -176,17 +176,17 @@
-         <location filename="../src/kuninstalldialog.cpp" line="216"/>
-         <source>uninstall</source>
-         <translatorcomment>立即卸载</translatorcomment>
--        <translation>دەرھال يۇيۇش</translation>
-+        <translation>دەرھال يۇيۇۋېتىش</translation>
-     </message>
-     <message>
-         <location filename="../src/kuninstalldialog.cpp" line="185"/>
-         <source>deb name:</source>
--        <translation>بوغچا نامى:</translation>
-+        <translation>نامى:</translation>
-     </message>
-     <message>
-         <location filename="../src/kuninstalldialog.cpp" line="190"/>
-         <source>deb version:</source>
--        <translation>نەشىرى:</translation>
-+        <translation>نۇسخىسى:</translation>
-     </message>
- </context>
- <context>
-@@ -194,12 +194,12 @@
-     <message>
-         <location filename="../src/kuninstalldialog.cpp" line="305"/>
-         <source>deb name:</source>
--        <translation>بوغچا نامى:</translation>
-+        <translation>نامى:</translation>
-     </message>
-     <message>
-         <location filename="../src/kuninstalldialog.cpp" line="309"/>
-         <source>deb version:</source>
--        <translation>نەشىرى:</translation>
-+        <translation>نۇسخىسى:</translation>
-     </message>
- </context>
- <context>
-@@ -222,17 +222,17 @@
-     <message>
-         <location filename="../src/kwindowbuttonbar.cpp" line="271"/>
-         <source>Minimize</source>
--        <translation>ئەڭ كىچىك ھالەت</translation>
-+        <translation>ئەڭ كىچىك ھالەتكە ئەكىلىش</translation>
-     </message>
-     <message>
-         <location filename="../src/kwindowbuttonbar.cpp" line="280"/>
-         <source>Close</source>
--        <translation>تاقاش</translation>
-+        <translation>ئېتىش</translation>
-     </message>
-     <message>
-         <location filename="../src/kwindowbuttonbar.cpp" line="341"/>
-         <source>Maximize</source>
--        <translation>ئەڭ چوڭ ھالەت</translation>
-+        <translation>ئەڭ چوڭ ھالەتكە ئەكىلىش</translation>
-     </message>
-     <message>
-         <location filename="../src/kwindowbuttonbar.cpp" line="346"/>
diff -Nru libkysdk-applications-2.5.1.0/debian/patches/0014-adapt-to-new-ukui-blur-protocol.patch libkysdk-applications-2.5.2.0/debian/patches/0014-adapt-to-new-ukui-blur-protocol.patch
--- libkysdk-applications-2.5.1.0/debian/patches/0014-adapt-to-new-ukui-blur-protocol.patch	2024-07-31 11:09:38.000000000 +0800
+++ libkysdk-applications-2.5.2.0/debian/patches/0014-adapt-to-new-ukui-blur-protocol.patch	1970-01-01 08:00:00.000000000 +0800
@@ -1,247 +0,0 @@
-From: sunzhen <sunzhen1@kylinos.cn>
-Date: Fri, 7 Jun 2024 16:19:37 +0800
-Subject: adapt to new ukui-blur protocol
-
----
- kysdk-waylandhelper/kysdk-waylandhelper.pro        |  4 +--
- .../src/blurmanager/blurwaylandinterface.cpp       |  5 ++--
- kysdk-waylandhelper/src/blurmanager/ukuiblur.cpp   | 29 +++++++++-------------
- kysdk-waylandhelper/src/blurmanager/ukuiblur.h     | 18 ++++++--------
- .../src/windowmanager/ukuiwindowmanagement.cpp     | 29 +++++++++++++++++++---
- 5 files changed, 49 insertions(+), 36 deletions(-)
-
-diff --git a/kysdk-waylandhelper/kysdk-waylandhelper.pro b/kysdk-waylandhelper/kysdk-waylandhelper.pro
-index c3de989..1ac5d0b 100644
---- a/kysdk-waylandhelper/kysdk-waylandhelper.pro
-+++ b/kysdk-waylandhelper/kysdk-waylandhelper.pro
-@@ -30,8 +30,8 @@ system(wayland-scanner private-code /usr/share/wayland-protocols/staging/xdg-act
- system(wayland-scanner client-header /usr/share/wayland-protocols/staging/ext-idle-notify/ext-idle-notify-v1.xml src/windowmanager/wayland-ext-idle-notify-v1-client-protocol.h)
- system(wayland-scanner private-code /usr/share/wayland-protocols/staging/ext-idle-notify/ext-idle-notify-v1.xml src/windowmanager/wayland-ext-idle-notify-v1-protocol.c)
- 
--system(wayland-scanner client-header /usr/share/kylin-wayland-protocols/ukui-blur-manager.xml src/blurmanager/ukui-blur-manager-client-protocol.h)
--system(wayland-scanner private-code /usr/share/kylin-wayland-protocols/ukui-blur-manager.xml src/blurmanager/ukui-blur-manager-core-protocol.c)
-+system(wayland-scanner client-header /usr/share/kylin-wayland-protocols/ukui-blur.xml src/blurmanager/ukui-blur-manager-client-protocol.h)
-+system(wayland-scanner private-code /usr/share/kylin-wayland-protocols/ukui-blur.xml src/blurmanager/ukui-blur-manager-core-protocol.c)
- 
- SOURCES += \
-     src/ukuistylehelper/ukui-decoration-core.c \
-diff --git a/kysdk-waylandhelper/src/blurmanager/blurwaylandinterface.cpp b/kysdk-waylandhelper/src/blurmanager/blurwaylandinterface.cpp
-index 654bddd..1ddcaa2 100644
---- a/kysdk-waylandhelper/src/blurmanager/blurwaylandinterface.cpp
-+++ b/kysdk-waylandhelper/src/blurmanager/blurwaylandinterface.cpp
-@@ -34,9 +34,9 @@ BlurWaylandInterface::BlurWaylandInterface(QObject *parent)
- 
- void BlurWaylandInterface::handleGlobal(void *data, wl_registry *registry, uint32_t name, const char *interface, uint32_t version)
- {
--    if (strcmp(interface, ukui_blur_manager_interface.name) == 0)
-+    if (strcmp(interface, ukui_blur_manager_v1_interface.name) == 0)
-     {
--        ukui_blur_manager *blur_manager_handle =  (ukui_blur_manager *) wl_registry_bind(registry, name, &ukui_blur_manager_interface, version);
-+        ukui_blur_manager_v1 *blur_manager_handle =  (ukui_blur_manager_v1 *) wl_registry_bind(registry, name, &ukui_blur_manager_v1_interface, version);
-         if(blur_manager_handle)
-         {
-             m_blur_manager = new UkuiBlurManager(this);
-@@ -118,7 +118,6 @@ bool BlurWaylandInterface::setBlurBehindWithStrength(QWindow *window, bool enabl
-         }
-         blurHandle->setRegion(region_hanlde);
-         blurHandle->setStrength(strength);
--        blurHandle->commit();
-         window->installEventFilter(this);
-         return true;
-     }
-diff --git a/kysdk-waylandhelper/src/blurmanager/ukuiblur.cpp b/kysdk-waylandhelper/src/blurmanager/ukuiblur.cpp
-index ee39d70..b780316 100644
---- a/kysdk-waylandhelper/src/blurmanager/ukuiblur.cpp
-+++ b/kysdk-waylandhelper/src/blurmanager/ukuiblur.cpp
-@@ -4,7 +4,7 @@
- class Q_DECL_HIDDEN UkuiBlur::Private
- {
- public:
--    UkuiWaylandPointer<ukui_blur, ukui_blur_destroy> blur;
-+    UkuiWaylandPointer<ukui_blur_surface_v1, ukui_blur_surface_v1_destroy> blur;
- };
- 
- class Q_DECL_HIDDEN UkuiBlurManager::Private
-@@ -12,7 +12,7 @@ class Q_DECL_HIDDEN UkuiBlurManager::Private
- public:
-     Private(UkuiBlurManager *q);
- 
--    UkuiWaylandPointer<ukui_blur_manager, ukui_blur_manager_destroy> blurManager;
-+    UkuiWaylandPointer<ukui_blur_manager_v1, ukui_blur_manager_v1_destroy> blurManager;
-     EventQueue *queue = nullptr;
- 
- private:
-@@ -46,34 +46,29 @@ void UkuiBlur::destroy()
-     d->blur.destroy();
- }
- 
--void UkuiBlur::setup(ukui_blur *blur)
-+void UkuiBlur::setup(ukui_blur_surface_v1 *blur)
- {
-     Q_ASSERT(blur);
-     Q_ASSERT(!d->blur);
-     d->blur.setup(blur);
- }
- 
--void UkuiBlur::commit()
--{
--    ukui_blur_commit(d->blur);
--}
--
- void UkuiBlur::setRegion(Region *region)
- {
--    ukui_blur_set_region(d->blur, *region);
-+    ukui_blur_surface_v1_set_region(d->blur, *region);
- }
- 
- void UkuiBlur::setStrength(uint32_t strength)
- {
--    ukui_blur_set_strength(d->blur, strength);
-+    ukui_blur_surface_v1_set_level(d->blur, strength);
- }
- 
--UkuiBlur::operator ukui_blur *()
-+UkuiBlur::operator ukui_blur_surface_v1 *()
- {
-     return d->blur;
- }
- 
--UkuiBlur::operator ukui_blur *() const
-+UkuiBlur::operator ukui_blur_surface_v1 *() const
- {
-     return d->blur;
- }
-@@ -107,7 +102,7 @@ void UkuiBlurManager::destroy()
-     d->blurManager.destroy();
- }
- 
--void UkuiBlurManager::setup(ukui_blur_manager *blur_manager)
-+void UkuiBlurManager::setup(ukui_blur_manager_v1 *blur_manager)
- {
-     d->blurManager.setup(blur_manager);
- }
-@@ -127,7 +122,7 @@ UkuiBlur *UkuiBlurManager::createBlur(Surface *surface, QObject *parent)
-     if(!isValid())
-         return nullptr;
-     UkuiBlur *s = new UkuiBlur(parent);
--    auto w = ukui_blur_manager_create(d->blurManager, *surface);
-+    auto w = ukui_blur_manager_v1_get_blur(d->blurManager, *surface);
-     if (d->queue) {
-         d->queue->addProxy(w);
-     }
-@@ -138,15 +133,15 @@ UkuiBlur *UkuiBlurManager::createBlur(Surface *surface, QObject *parent)
- void UkuiBlurManager::removeBlur(Surface *surface)
- {
-     Q_ASSERT(isValid());
--    ukui_blur_manager_unset(d->blurManager, *surface);
-+//    ukui_blur_manager_unset(d->blurManager, *surface);
- }
- 
--UkuiBlurManager::operator ukui_blur_manager *()
-+UkuiBlurManager::operator ukui_blur_manager_v1 *()
- {
-     return d->blurManager;
- }
- 
--UkuiBlurManager::operator ukui_blur_manager *() const
-+UkuiBlurManager::operator ukui_blur_manager_v1 *() const
- {
-     return d->blurManager;
- }
-diff --git a/kysdk-waylandhelper/src/blurmanager/ukuiblur.h b/kysdk-waylandhelper/src/blurmanager/ukuiblur.h
-index fbc1114..809e9c7 100644
---- a/kysdk-waylandhelper/src/blurmanager/ukuiblur.h
-+++ b/kysdk-waylandhelper/src/blurmanager/ukuiblur.h
-@@ -7,8 +7,8 @@
- #include <KWayland/Client/surface.h>
- #include "ukui-blur-manager-client-protocol.h"
- 
--struct ukui_blur;
--struct ukui_blur_manager;
-+struct ukui_blur_manager_v1;
-+struct ukui_blur_surface_v1;
- using namespace KWayland::Client;
- 
- class UkuiBlur : public QObject
-@@ -24,17 +24,15 @@ public:
- 
-     void destroy();
- 
--    void setup(ukui_blur *blur);
--
--    void commit();
-+    void setup(ukui_blur_surface_v1 *blur);
- 
-     void setRegion(Region *region);
- 
-     void setStrength(uint32_t strength);
- 
- 
--    operator ukui_blur *();
--    operator ukui_blur *() const;
-+    operator ukui_blur_surface_v1 *();
-+    operator ukui_blur_surface_v1 *() const;
- 
- private:
-     class Private;
-@@ -55,7 +53,7 @@ public:
- 
-     void destroy();
- 
--    void setup(ukui_blur_manager *blur_manager);
-+    void setup(ukui_blur_manager_v1 *blur_manager);
- 
-     void setEventQueue(EventQueue *queue);
- 
-@@ -65,9 +63,9 @@ public:
- 
-     void removeBlur(Surface *surface);
- 
--    operator ukui_blur_manager *();
-+    operator ukui_blur_manager_v1 *();
- 
--    operator ukui_blur_manager *() const;
-+    operator ukui_blur_manager_v1 *() const;
- 
- private:
-     class Private;
-diff --git a/kysdk-waylandhelper/src/windowmanager/ukuiwindowmanagement.cpp b/kysdk-waylandhelper/src/windowmanager/ukuiwindowmanagement.cpp
-index f539ad1..2ce5370 100644
---- a/kysdk-waylandhelper/src/windowmanager/ukuiwindowmanagement.cpp
-+++ b/kysdk-waylandhelper/src/windowmanager/ukuiwindowmanagement.cpp
-@@ -635,10 +635,31 @@ void UkuiWindow::Private::iconChangedCallback(void *data, ukui_window *window)
-             return QIcon();
-         }
-         close(pipeFd);
--        QDataStream ds(content);
--        QIcon icon;
--        ds >> icon;
--        return icon;
-+        if(qgetenv("GDMSESSION") == QString("kylin-wlcom"))
-+        {
-+            int width = (content.at(0) << 0) | 
-+                    (content.at(1) << 8) |
-+                    (content.at(2) << 16) |
-+                    (content.at(3) << 24);
-+            int height = (content.at(4) << 0) | 
-+                    (content.at(5) << 8) |
-+                    (content.at(6) << 16) |
-+                    (content.at(7) << 24);
-+            if (content.size() - 8 != width * height *4 ) {
-+                return QIcon();
-+            }
-+            QImage image(width, height, QImage::Format_ARGB32);
-+            memcpy(image.bits(), content.constData() + 8, content.size() - 8);
-+            QIcon icon = QIcon(QPixmap::fromImage(image));
-+            return icon;
-+        }
-+        else
-+        {
-+            QDataStream ds(content);
-+            QIcon icon;
-+            ds >> icon;
-+            return icon;
-+        }
-     };
-     QFutureWatcher<QIcon> *watcher = new QFutureWatcher<QIcon>(p->q);
-     QObject::connect(watcher, &QFutureWatcher<QIcon>::finished, p->q, [p, watcher] {
diff -Nru libkysdk-applications-2.5.1.0/debian/patches/0015-add-openUnderCursor-interface.patch libkysdk-applications-2.5.2.0/debian/patches/0015-add-openUnderCursor-interface.patch
--- libkysdk-applications-2.5.1.0/debian/patches/0015-add-openUnderCursor-interface.patch	2024-07-31 11:09:38.000000000 +0800
+++ libkysdk-applications-2.5.2.0/debian/patches/0015-add-openUnderCursor-interface.patch	1970-01-01 08:00:00.000000000 +0800
@@ -1,195 +0,0 @@
-From: sunzhen <sunzhen1@kylinos.cn>
-Date: Fri, 7 Jun 2024 17:09:41 +0800
-Subject: add openUnderCursor interface
-
----
- .../src/windowmanager/abstractinterface.cpp        |  5 ++++
- .../src/windowmanager/abstractinterface.h          |  1 +
- .../src/windowmanager/ukuishell.cpp                |  5 ++++
- kysdk-waylandhelper/src/windowmanager/ukuishell.h  |  2 ++
- .../src/windowmanager/ukuiwaylandinterface.cpp     | 28 ++++++++++++++++++++++
- .../src/windowmanager/ukuiwaylandinterface.h       |  2 ++
- .../src/windowmanager/windowmanager.cpp            |  8 +++++++
- .../src/windowmanager/windowmanager.h              |  7 ++++++
- .../test/testWindowManager/widget.cpp              |  6 +++++
- .../test/testWindowManager/widget.h                |  1 +
- 10 files changed, 65 insertions(+)
-
-diff --git a/kysdk-waylandhelper/src/windowmanager/abstractinterface.cpp b/kysdk-waylandhelper/src/windowmanager/abstractinterface.cpp
-index 1a9482f..3c51920 100644
---- a/kysdk-waylandhelper/src/windowmanager/abstractinterface.cpp
-+++ b/kysdk-waylandhelper/src/windowmanager/abstractinterface.cpp
-@@ -179,3 +179,8 @@ bool AbstractInterface::istHighlight(const WindowId &wid)
- {
-     Q_UNUSED(wid)
- }
-+
-+void AbstractInterface::setOpenUnderCursor(QWindow *window)
-+{
-+
-+}
-diff --git a/kysdk-waylandhelper/src/windowmanager/abstractinterface.h b/kysdk-waylandhelper/src/windowmanager/abstractinterface.h
-index e0b2598..495e3c5 100644
---- a/kysdk-waylandhelper/src/windowmanager/abstractinterface.h
-+++ b/kysdk-waylandhelper/src/windowmanager/abstractinterface.h
-@@ -114,6 +114,7 @@ public:
-     virtual WindowLayer windowLayer(QWindow *window);
-     virtual void setHighlight(const WindowId &wid, bool highlight);
-     virtual bool istHighlight(const WindowId &wid);
-+    virtual void setOpenUnderCursor(QWindow *window);
- 
- Q_SIGNALS:
-     void activeWindowChanged(WindowId wid);
-diff --git a/kysdk-waylandhelper/src/windowmanager/ukuishell.cpp b/kysdk-waylandhelper/src/windowmanager/ukuishell.cpp
-index b3d9692..add4abe 100644
---- a/kysdk-waylandhelper/src/windowmanager/ukuishell.cpp
-+++ b/kysdk-waylandhelper/src/windowmanager/ukuishell.cpp
-@@ -336,3 +336,8 @@ void UkuiShellSurface::setGrabKeyboard(wl_seat *seat)
-     ukui_surface_grab_keyboard(d->surface, seat);
- }
- 
-+void UkuiShellSurface::setOpenUnderCursor()
-+{
-+    ukui_surface_open_under_cursor(d->surface);
-+}
-+
-diff --git a/kysdk-waylandhelper/src/windowmanager/ukuishell.h b/kysdk-waylandhelper/src/windowmanager/ukuishell.h
-index ad5bdfb..eac0ca8 100644
---- a/kysdk-waylandhelper/src/windowmanager/ukuishell.h
-+++ b/kysdk-waylandhelper/src/windowmanager/ukuishell.h
-@@ -130,6 +130,8 @@ public:
- 
-     void setGrabKeyboard(wl_seat* seat);
- 
-+    void setOpenUnderCursor();
-+
- 
- Q_SIGNALS:
- 
-diff --git a/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.cpp b/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.cpp
-index 52a2d69..09f1ba7 100644
---- a/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.cpp
-+++ b/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.cpp
-@@ -606,6 +606,34 @@ bool UkuiWaylandInterface::istHighlight(const WindowId &wid)
-         return false;
- }
- 
-+void UkuiWaylandInterface::setOpenUnderCursor(QWindow *window)
-+{
-+    if(!window)
-+        return;
-+    if (!m_ukuiShell)
-+        return;
-+
-+    auto surface = KWayland::Client::Surface::fromWindow(window);
-+    if (!surface)
-+        return;
-+    if(!m_surfaces.contains(window))
-+    {
-+        m_surfaces.insert(window,surface);
-+    }
-+
-+    auto ukuiShellSurface = m_ukuiShell->createSurface(surface, window);
-+    if (!ukuiShellSurface)
-+        return;
-+    if(!m_ukuiShellSurfaces.contains(window))
-+    {
-+        m_ukuiShellSurfaces.insert(window,ukuiShellSurface);
-+    }
-+
-+    ukuiShellSurface->setOpenUnderCursor();
-+
-+    window->installEventFilter(this);
-+}
-+
- void UkuiWaylandInterface::setGeometry(QWindow *window, const QRect &rect)
- {
-     if(!window)
-diff --git a/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.h b/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.h
-index 14883c4..3e7c1a5 100644
---- a/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.h
-+++ b/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.h
-@@ -98,6 +98,8 @@ public:
-     void setHighlight(const WindowId &wid, bool highlight) override;
-     bool istHighlight(const WindowId &wid) override;
- 
-+    void setOpenUnderCursor(QWindow *window) override;
-+
- protected:
-     bool eventFilter(QObject *obj, QEvent *ev) override;
- 
-diff --git a/kysdk-waylandhelper/src/windowmanager/windowmanager.cpp b/kysdk-waylandhelper/src/windowmanager/windowmanager.cpp
-index e8168ff..2111699 100644
---- a/kysdk-waylandhelper/src/windowmanager/windowmanager.cpp
-+++ b/kysdk-waylandhelper/src/windowmanager/windowmanager.cpp
-@@ -362,3 +362,11 @@ bool WindowManager::isHightlight(const WindowId &wid)
-         return false;
-     return m_wm->winInterface()->istHighlight(wid);
- }
-+
-+void WindowManager::setOpenUnderCursor(QWindow *window)
-+{
-+    self();
-+    if(!m_wm)
-+        return ;
-+    return m_wm->winInterface()->setOpenUnderCursor(window);
-+}
-diff --git a/kysdk-waylandhelper/src/windowmanager/windowmanager.h b/kysdk-waylandhelper/src/windowmanager/windowmanager.h
-index a6d99bd..74f445b 100644
---- a/kysdk-waylandhelper/src/windowmanager/windowmanager.h
-+++ b/kysdk-waylandhelper/src/windowmanager/windowmanager.h
-@@ -327,6 +327,13 @@ public:
-      */
-     static bool isHightlight(const WindowId &wid);
- 
-+    /**
-+     * @brief setOpenUnderCursor
-+     * @since 2.5
-+     * @param window
-+     */
-+    static void setOpenUnderCursor(QWindow *window);
-+
- Q_SIGNALS:
-      /**
-       * @brief 窗口添加信号
-diff --git a/kysdk-waylandhelper/test/testWindowManager/widget.cpp b/kysdk-waylandhelper/test/testWindowManager/widget.cpp
-index ebd379e..baacb14 100644
---- a/kysdk-waylandhelper/test/testWindowManager/widget.cpp
-+++ b/kysdk-waylandhelper/test/testWindowManager/widget.cpp
-@@ -257,12 +257,14 @@ void Widget::initUI()
-     m_setSwitcherLayer = new QPushButton("setSwitcherLayer" ,this);
-     m_setHighlightBtn = new QPushButton("setHighlight", this);
-     m_unsetHighlightBtn = new QPushButton("unsetHighlight", this);
-+    m_openUnderCursorBtn = new QPushButton("openUnderCursor",this);
-     QHBoxLayout* layout10 = new QHBoxLayout();
-     layout10->addWidget(m_getGeometryBtn);
-     layout10->addWidget(m_setGrabKeyboardBtn);
-     layout10->addWidget(m_setSwitcherLayer);
-     layout10->addWidget(m_setHighlightBtn);
-     layout10->addWidget(m_unsetHighlightBtn);
-+    layout10->addWidget(m_openUnderCursorBtn);
-     box5->setLayout(layout10);
- 
- 
-@@ -287,6 +289,10 @@ void Widget::initUI()
- 
- void Widget::initConnection()
- {   
-+    connect(m_openUnderCursorBtn,&::QPushButton::clicked, this, [=](){
-+        WindowManager::setOpenUnderCursor(m_subWidget->windowHandle());
-+    });
-+
-     connect(m_setHighlightBtn,&::QPushButton::clicked, this, [=](){
-         WindowManager::setHighlight(m_lastestWindowId, true);
-     });
-diff --git a/kysdk-waylandhelper/test/testWindowManager/widget.h b/kysdk-waylandhelper/test/testWindowManager/widget.h
-index 91c3fb4..e310096 100644
---- a/kysdk-waylandhelper/test/testWindowManager/widget.h
-+++ b/kysdk-waylandhelper/test/testWindowManager/widget.h
-@@ -88,5 +88,6 @@ private:
-     QPushButton* m_setSwitcherLayer;
-     QPushButton* m_setHighlightBtn;
-     QPushButton* m_unsetHighlightBtn;
-+    QPushButton* m_openUnderCursorBtn;
- };
- #endif // WIDGET_H
diff -Nru libkysdk-applications-2.5.1.0/debian/patches/0016-test-fix-window-type.patch libkysdk-applications-2.5.2.0/debian/patches/0016-test-fix-window-type.patch
--- libkysdk-applications-2.5.1.0/debian/patches/0016-test-fix-window-type.patch	2024-07-31 11:09:38.000000000 +0800
+++ libkysdk-applications-2.5.2.0/debian/patches/0016-test-fix-window-type.patch	1970-01-01 08:00:00.000000000 +0800
@@ -1,31 +0,0 @@
-From: Morose <chenlinxiang@kylinos.cn>
-Date: Tue, 11 Jun 2024 13:25:47 +0800
-Subject: test: fix window type
-
-Signed-off-by: Morose <chenlinxiang@kylinos.cn>
----
- kysdk-waylandhelper/test/testWindowManager/widget.cpp | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/kysdk-waylandhelper/test/testWindowManager/widget.cpp b/kysdk-waylandhelper/test/testWindowManager/widget.cpp
-index baacb14..65fc983 100644
---- a/kysdk-waylandhelper/test/testWindowManager/widget.cpp
-+++ b/kysdk-waylandhelper/test/testWindowManager/widget.cpp
-@@ -284,7 +284,7 @@ void Widget::initUI()
-     m_subWidget->setWindowTitle("widget");
- 
-     m_panelWidget = new QWidget();
--    KWindowSystem::setType(m_panelWidget->winId(), NET::Notification);
-+    WindowManager::setWindowLayer(m_panelWidget->windowHandle(), WindowLayer::Panel);
- }
- 
- void Widget::initConnection()
-@@ -322,7 +322,7 @@ void Widget::initConnection()
-             m_panelWidget->show();
-             m_btnPanelWidget->setText("隐藏panel窗口");
-         }
--        KWindowSystem::setType(m_panelWidget->winId(), NET::Notification);
-+        WindowManager::setWindowLayer(m_panelWidget->windowHandle(), WindowLayer::Panel);
-         WindowManager::setPanelTakefocus(m_panelWidget->windowHandle(), m_chbPanel->isChecked());
-     });
- 
diff -Nru libkysdk-applications-2.5.1.0/debian/patches/0017-modify-the-method-of-getting-wl_compositor.patch libkysdk-applications-2.5.2.0/debian/patches/0017-modify-the-method-of-getting-wl_compositor.patch
--- libkysdk-applications-2.5.1.0/debian/patches/0017-modify-the-method-of-getting-wl_compositor.patch	2024-07-31 11:09:38.000000000 +0800
+++ libkysdk-applications-2.5.2.0/debian/patches/0017-modify-the-method-of-getting-wl_compositor.patch	1970-01-01 08:00:00.000000000 +0800
@@ -1,50 +0,0 @@
-From: sunzhen <sunzhen1@kylinos.cn>
-Date: Tue, 11 Jun 2024 13:45:54 +0800
-Subject: modify the method of getting wl_compositor
-
----
- .../src/blurmanager/blurwaylandinterface.cpp           | 18 ++++++++++--------
- 1 file changed, 10 insertions(+), 8 deletions(-)
-
-diff --git a/kysdk-waylandhelper/src/blurmanager/blurwaylandinterface.cpp b/kysdk-waylandhelper/src/blurmanager/blurwaylandinterface.cpp
-index 1ddcaa2..f992e6a 100644
---- a/kysdk-waylandhelper/src/blurmanager/blurwaylandinterface.cpp
-+++ b/kysdk-waylandhelper/src/blurmanager/blurwaylandinterface.cpp
-@@ -1,6 +1,5 @@
- #include "blurwaylandinterface.h"
- 
--
- static void handle_global(void *data,struct wl_registry *wl_registry,uint32_t name, const char *interface,  uint32_t version)
- {
-     auto blurInterface = reinterpret_cast<BlurWaylandInterface *>(data);
-@@ -18,13 +17,6 @@ BlurWaylandInterface::BlurWaylandInterface(QObject *parent)
-     m_registry = new Registry(this);
-     m_registry->create(m_connection->display());
- 
--    connect(m_registry, &KWayland::Client::Registry::compositorAnnounced, this, [=](){
--        const auto interface = m_registry->interface(KWayland::Client::Registry::Interface::Compositor);
--        if (interface.name != 0) {
--            m_compositor = m_registry->createCompositor(interface.name, interface.version, this);
--        }
--    });
--
-     wl_registry* registry = *m_registry;
-     wl_registry_add_listener(registry, &s_registryListener, this);
- 
-@@ -43,6 +35,16 @@ void BlurWaylandInterface::handleGlobal(void *data, wl_registry *registry, uint3
-             m_blur_manager->setup(blur_manager_handle);
-         }
-     }
-+    if (strcmp(interface, wl_compositor_interface.name) == 0)
-+    {
-+        wl_compositor *wl_compositor_handle =  (wl_compositor *) wl_registry_bind(registry, name, &wl_compositor_interface, version);
-+        if(wl_compositor_handle)
-+        {
-+            m_compositor = new Compositor(this);
-+            m_compositor->setup(wl_compositor_handle);
-+        }
-+    }
-+
- }
- 
- bool BlurWaylandInterface::eventFilter(QObject *obj, QEvent *ev)
diff -Nru libkysdk-applications-2.5.1.0/debian/patches/0018-clean-debug-path.patch libkysdk-applications-2.5.2.0/debian/patches/0018-clean-debug-path.patch
--- libkysdk-applications-2.5.1.0/debian/patches/0018-clean-debug-path.patch	2024-07-31 11:09:38.000000000 +0800
+++ libkysdk-applications-2.5.2.0/debian/patches/0018-clean-debug-path.patch	1970-01-01 08:00:00.000000000 +0800
@@ -1,23 +0,0 @@
-From: sunzhen <sunzhen1@kylinos.cn>
-Date: Tue, 11 Jun 2024 13:58:29 +0800
-Subject: clean debug path
-
----
- kysdk-waylandhelper/test/testBlurManager/testBlurManager.pro | 4 +---
- 1 file changed, 1 insertion(+), 3 deletions(-)
-
-diff --git a/kysdk-waylandhelper/test/testBlurManager/testBlurManager.pro b/kysdk-waylandhelper/test/testBlurManager/testBlurManager.pro
-index ea5b244..fc58d3d 100644
---- a/kysdk-waylandhelper/test/testBlurManager/testBlurManager.pro
-+++ b/kysdk-waylandhelper/test/testBlurManager/testBlurManager.pro
-@@ -3,9 +3,7 @@ QT       += core gui KWindowSystem
- greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
- 
- CONFIG += c++11 link_pkgconfig
--#PKGCONFIG += kysdk-waylandhelper
--INCLUDEPATH += /home/kylin/openkylin/libkysdk-applications/kysdk-waylandhelper/src/
--LIBS+= -L/home/kylin/openkylin/libkysdk-applications/build-kysdk-waylandhelper-unknown-Debug -lkysdk-waylandhelper
-+PKGCONFIG += kysdk-waylandhelper
- 
- # You can make your code fail to compile if it uses deprecated APIs.
- # In order to do so, uncomment the following line.
diff -Nru libkysdk-applications-2.5.1.0/debian/patches/0019-add-interface-of-setiing-opened-under-cursor-with-of.patch libkysdk-applications-2.5.2.0/debian/patches/0019-add-interface-of-setiing-opened-under-cursor-with-of.patch
--- libkysdk-applications-2.5.1.0/debian/patches/0019-add-interface-of-setiing-opened-under-cursor-with-of.patch	2024-07-31 11:09:38.000000000 +0800
+++ libkysdk-applications-2.5.2.0/debian/patches/0019-add-interface-of-setiing-opened-under-cursor-with-of.patch	1970-01-01 08:00:00.000000000 +0800
@@ -1,294 +0,0 @@
-From: sunzhen <sunzhen1@kylinos.cn>
-Date: Mon, 24 Jun 2024 14:25:14 +0800
-Subject: add interface of setiing opened under cursor with offset for ukui
- shell
-
----
- .../src/windowmanager/abstractinterface.cpp        | 13 ++++++
- .../src/windowmanager/abstractinterface.h          |  2 +
- .../src/windowmanager/ukuishell.cpp                | 11 ++++-
- kysdk-waylandhelper/src/windowmanager/ukuishell.h  |  3 ++
- .../src/windowmanager/ukuiwaylandinterface.cpp     | 54 ++++++++++++++++++++++
- .../src/windowmanager/ukuiwaylandinterface.h       |  2 +
- .../src/windowmanager/windowmanager.cpp            | 16 +++++++
- .../src/windowmanager/windowmanager.h              | 17 +++++++
- .../test/testWindowManager/widget.cpp              | 38 +++++++++++++--
- .../test/testWindowManager/widget.h                |  4 ++
- 10 files changed, 155 insertions(+), 5 deletions(-)
-
-diff --git a/kysdk-waylandhelper/src/windowmanager/abstractinterface.cpp b/kysdk-waylandhelper/src/windowmanager/abstractinterface.cpp
-index 3c51920..24eefa6 100644
---- a/kysdk-waylandhelper/src/windowmanager/abstractinterface.cpp
-+++ b/kysdk-waylandhelper/src/windowmanager/abstractinterface.cpp
-@@ -182,5 +182,18 @@ bool AbstractInterface::istHighlight(const WindowId &wid)
- 
- void AbstractInterface::setOpenUnderCursor(QWindow *window)
- {
-+    Q_UNUSED(window)
-+}
-+
-+void AbstractInterface::setOpenUnderCursor(QWindow *window, int x, int y)
-+{
-+    Q_UNUSED(window)
-+    Q_UNUSED(x)
-+    Q_UNUSED(y)
-+}
- 
-+void AbstractInterface::setIconName(QWindow *window, const QString& iconName)
-+{
-+    Q_UNUSED(window)
-+    Q_UNUSED(iconName)
- }
-diff --git a/kysdk-waylandhelper/src/windowmanager/abstractinterface.h b/kysdk-waylandhelper/src/windowmanager/abstractinterface.h
-index 495e3c5..0977666 100644
---- a/kysdk-waylandhelper/src/windowmanager/abstractinterface.h
-+++ b/kysdk-waylandhelper/src/windowmanager/abstractinterface.h
-@@ -115,6 +115,8 @@ public:
-     virtual void setHighlight(const WindowId &wid, bool highlight);
-     virtual bool istHighlight(const WindowId &wid);
-     virtual void setOpenUnderCursor(QWindow *window);
-+    virtual void setOpenUnderCursor(QWindow *window, int x, int y);
-+    virtual void setIconName(QWindow *window, const QString& iconName);
- 
- Q_SIGNALS:
-     void activeWindowChanged(WindowId wid);
-diff --git a/kysdk-waylandhelper/src/windowmanager/ukuishell.cpp b/kysdk-waylandhelper/src/windowmanager/ukuishell.cpp
-index add4abe..63ad0ff 100644
---- a/kysdk-waylandhelper/src/windowmanager/ukuishell.cpp
-+++ b/kysdk-waylandhelper/src/windowmanager/ukuishell.cpp
-@@ -338,6 +338,15 @@ void UkuiShellSurface::setGrabKeyboard(wl_seat *seat)
- 
- void UkuiShellSurface::setOpenUnderCursor()
- {
--    ukui_surface_open_under_cursor(d->surface);
-+    ukui_surface_open_under_cursor(d->surface, 0 , 0);
- }
- 
-+void UkuiShellSurface::setOpenUnderCursor(int x, int y)
-+{
-+    ukui_surface_open_under_cursor(d->surface, x , y);
-+}
-+
-+void UkuiShellSurface::setIconName(const QString& iconName)
-+{
-+    ukui_surface_set_icon(d->surface, iconName.toStdString().c_str());
-+}
-diff --git a/kysdk-waylandhelper/src/windowmanager/ukuishell.h b/kysdk-waylandhelper/src/windowmanager/ukuishell.h
-index eac0ca8..6136a10 100644
---- a/kysdk-waylandhelper/src/windowmanager/ukuishell.h
-+++ b/kysdk-waylandhelper/src/windowmanager/ukuishell.h
-@@ -132,6 +132,9 @@ public:
- 
-     void setOpenUnderCursor();
- 
-+    void setOpenUnderCursor(int x, int y);
-+
-+    void setIconName(const QString& iconName);
- 
- Q_SIGNALS:
- 
-diff --git a/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.cpp b/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.cpp
-index 09f1ba7..6bb7e7f 100644
---- a/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.cpp
-+++ b/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.cpp
-@@ -634,6 +634,60 @@ void UkuiWaylandInterface::setOpenUnderCursor(QWindow *window)
-     window->installEventFilter(this);
- }
- 
-+void UkuiWaylandInterface::setOpenUnderCursor(QWindow *window, int x, int y)
-+{
-+    if(!window)
-+        return;
-+    if (!m_ukuiShell)
-+        return;
-+
-+    auto surface = KWayland::Client::Surface::fromWindow(window);
-+    if (!surface)
-+        return;
-+    if(!m_surfaces.contains(window))
-+    {
-+        m_surfaces.insert(window,surface);
-+    }
-+
-+    auto ukuiShellSurface = m_ukuiShell->createSurface(surface, window);
-+    if (!ukuiShellSurface)
-+        return;
-+    if(!m_ukuiShellSurfaces.contains(window))
-+    {
-+        m_ukuiShellSurfaces.insert(window,ukuiShellSurface);
-+    }
-+
-+    ukuiShellSurface->setOpenUnderCursor(x, y);
-+
-+    window->installEventFilter(this);
-+}
-+
-+void UkuiWaylandInterface::setIconName(QWindow *window, const QString& iconName)
-+{
-+    if (!window || !m_ukuiShell)
-+        return;
-+
-+    auto surface = KWayland::Client::Surface::fromWindow(window);
-+    if (!surface)
-+        return;
-+    if (!m_surfaces.contains(window))
-+    {
-+        m_surfaces.insert(window, surface);
-+    }
-+
-+    auto ukuiShellSurface = m_ukuiShell->createSurface(surface, window);
-+    if (!ukuiShellSurface)
-+        return;
-+    if (!m_ukuiShellSurfaces.contains(window))
-+    {
-+        m_ukuiShellSurfaces.insert(window, ukuiShellSurface);
-+    }
-+
-+    ukuiShellSurface->setIconName(iconName);
-+
-+    window->installEventFilter(this);
-+}
-+
- void UkuiWaylandInterface::setGeometry(QWindow *window, const QRect &rect)
- {
-     if(!window)
-diff --git a/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.h b/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.h
-index 3e7c1a5..601c2b6 100644
---- a/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.h
-+++ b/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.h
-@@ -99,6 +99,8 @@ public:
-     bool istHighlight(const WindowId &wid) override;
- 
-     void setOpenUnderCursor(QWindow *window) override;
-+    void setOpenUnderCursor(QWindow *window, int x, int y) override;
-+    void setIconName(QWindow *window, const QString& iconName) override;
- 
- protected:
-     bool eventFilter(QObject *obj, QEvent *ev) override;
-diff --git a/kysdk-waylandhelper/src/windowmanager/windowmanager.cpp b/kysdk-waylandhelper/src/windowmanager/windowmanager.cpp
-index 2111699..3f4adbf 100644
---- a/kysdk-waylandhelper/src/windowmanager/windowmanager.cpp
-+++ b/kysdk-waylandhelper/src/windowmanager/windowmanager.cpp
-@@ -370,3 +370,19 @@ void WindowManager::setOpenUnderCursor(QWindow *window)
-         return ;
-     return m_wm->winInterface()->setOpenUnderCursor(window);
- }
-+
-+void WindowManager::setOpenUnderCursor(QWindow *window, int x, int y)
-+{
-+    self();
-+    if(!m_wm)
-+        return ;
-+    return m_wm->winInterface()->setOpenUnderCursor(window, x, y);
-+}
-+
-+void WindowManager::setIconName(QWindow *window, const QString &iconName)
-+{
-+    self();
-+    if(!m_wm)
-+        return ;
-+    return m_wm->winInterface()->setIconName(window, iconName);
-+}
-diff --git a/kysdk-waylandhelper/src/windowmanager/windowmanager.h b/kysdk-waylandhelper/src/windowmanager/windowmanager.h
-index 74f445b..e482625 100644
---- a/kysdk-waylandhelper/src/windowmanager/windowmanager.h
-+++ b/kysdk-waylandhelper/src/windowmanager/windowmanager.h
-@@ -334,6 +334,23 @@ public:
-      */
-     static void setOpenUnderCursor(QWindow *window);
- 
-+    /**
-+     * @brief setOpenUnderCursor
-+     * @since 2.5
-+     * @param window
-+     * @param x
-+     * @param y
-+     */
-+    static void setOpenUnderCursor(QWindow *window, int x, int y);
-+
-+    /**
-+     * @brief setIconName
-+     * @since 2.5
-+     * @param window
-+     * @param iconName
-+     */
-+    static void setIconName(QWindow *window, const QString& iconName);
-+
- Q_SIGNALS:
-      /**
-       * @brief 窗口添加信号
-diff --git a/kysdk-waylandhelper/test/testWindowManager/widget.cpp b/kysdk-waylandhelper/test/testWindowManager/widget.cpp
-index 65fc983..97fd515 100644
---- a/kysdk-waylandhelper/test/testWindowManager/widget.cpp
-+++ b/kysdk-waylandhelper/test/testWindowManager/widget.cpp
-@@ -257,15 +257,36 @@ void Widget::initUI()
-     m_setSwitcherLayer = new QPushButton("setSwitcherLayer" ,this);
-     m_setHighlightBtn = new QPushButton("setHighlight", this);
-     m_unsetHighlightBtn = new QPushButton("unsetHighlight", this);
--    m_openUnderCursorBtn = new QPushButton("openUnderCursor",this);
-+
-     QHBoxLayout* layout10 = new QHBoxLayout();
-     layout10->addWidget(m_getGeometryBtn);
-     layout10->addWidget(m_setGrabKeyboardBtn);
-     layout10->addWidget(m_setSwitcherLayer);
-     layout10->addWidget(m_setHighlightBtn);
--    layout10->addWidget(m_unsetHighlightBtn);
--    layout10->addWidget(m_openUnderCursorBtn);
--    box5->setLayout(layout10);
-+    layout10->addWidget(m_setIconNameBtn);
-+
-+    QVBoxLayout* vLayout3 = new QVBoxLayout();
-+    vLayout3->addLayout(layout10);
-+
-+    m_openUnderCursorBtn = new QPushButton("openUnderCursor",this);
-+    m_setIconNameBtn = new QPushButton("setIconName",this);
-+    m_openUnderCursorWithOffsetBtn = new QPushButton("openUnderCursorWithOffset",this);
-+    m_xOffset = new QSpinBox(this);
-+    m_xOffset->setRange(-1920*2,1920*2);
-+    m_xOffset->setValue(10);
-+    m_yOffset = new QSpinBox(this);
-+    m_yOffset->setValue(10);
-+    m_yOffset->setRange(-1080*2,1080*2);
-+    QHBoxLayout* layout11 = new QHBoxLayout();
-+    layout11->addWidget(m_unsetHighlightBtn);
-+    layout11->addWidget(m_openUnderCursorBtn);
-+    layout11->addWidget(m_openUnderCursorWithOffsetBtn);
-+    layout11->addWidget(m_xOffset);
-+    layout11->addWidget(m_yOffset);
-+    layout11->addWidget(m_setIconNameBtn);
-+    layout11->addStretch();
-+    vLayout3->addLayout(layout11);
-+    box5->setLayout(vLayout3);
- 
- 
-     mainLayout->addWidget(m_label);
-@@ -289,6 +310,15 @@ void Widget::initUI()
- 
- void Widget::initConnection()
- {   
-+    connect(m_setIconNameBtn,&::QPushButton::clicked, this, [=](){
-+        WindowManager::setIconName(m_subWidget->windowHandle(), "kylin-music");
-+    });
-+
-+    connect(m_openUnderCursorWithOffsetBtn,&::QPushButton::clicked, this, [=](){
-+        WindowManager::setOpenUnderCursor(m_subWidget->windowHandle(), m_xOffset->value(), m_yOffset->value());
-+    });
-+
-+
-     connect(m_openUnderCursorBtn,&::QPushButton::clicked, this, [=](){
-         WindowManager::setOpenUnderCursor(m_subWidget->windowHandle());
-     });
-diff --git a/kysdk-waylandhelper/test/testWindowManager/widget.h b/kysdk-waylandhelper/test/testWindowManager/widget.h
-index e310096..38c4a1d 100644
---- a/kysdk-waylandhelper/test/testWindowManager/widget.h
-+++ b/kysdk-waylandhelper/test/testWindowManager/widget.h
-@@ -89,5 +89,9 @@ private:
-     QPushButton* m_setHighlightBtn;
-     QPushButton* m_unsetHighlightBtn;
-     QPushButton* m_openUnderCursorBtn;
-+    QPushButton* m_openUnderCursorWithOffsetBtn;
-+    QSpinBox *m_xOffset;
-+    QSpinBox *m_yOffset;
-+    QPushButton* m_setIconNameBtn;
- };
- #endif // WIDGET_H
diff -Nru libkysdk-applications-2.5.1.0/debian/patches/0020-fix-a-bug-of-demo.patch libkysdk-applications-2.5.2.0/debian/patches/0020-fix-a-bug-of-demo.patch
--- libkysdk-applications-2.5.1.0/debian/patches/0020-fix-a-bug-of-demo.patch	2024-07-31 11:09:38.000000000 +0800
+++ libkysdk-applications-2.5.2.0/debian/patches/0020-fix-a-bug-of-demo.patch	1970-01-01 08:00:00.000000000 +0800
@@ -1,29 +0,0 @@
-From: sunzhen <sunzhen1@kylinos.cn>
-Date: Tue, 25 Jun 2024 13:57:00 +0800
-Subject: fix a bug of demo
-
----
- kysdk-waylandhelper/test/testWindowManager/widget.cpp | 3 ++-
- 1 file changed, 2 insertions(+), 1 deletion(-)
-
-diff --git a/kysdk-waylandhelper/test/testWindowManager/widget.cpp b/kysdk-waylandhelper/test/testWindowManager/widget.cpp
-index 97fd515..da0e481 100644
---- a/kysdk-waylandhelper/test/testWindowManager/widget.cpp
-+++ b/kysdk-waylandhelper/test/testWindowManager/widget.cpp
-@@ -257,6 +257,7 @@ void Widget::initUI()
-     m_setSwitcherLayer = new QPushButton("setSwitcherLayer" ,this);
-     m_setHighlightBtn = new QPushButton("setHighlight", this);
-     m_unsetHighlightBtn = new QPushButton("unsetHighlight", this);
-+    m_setIconNameBtn = new QPushButton("setIconName",this);
- 
-     QHBoxLayout* layout10 = new QHBoxLayout();
-     layout10->addWidget(m_getGeometryBtn);
-@@ -269,7 +270,7 @@ void Widget::initUI()
-     vLayout3->addLayout(layout10);
- 
-     m_openUnderCursorBtn = new QPushButton("openUnderCursor",this);
--    m_setIconNameBtn = new QPushButton("setIconName",this);
-+
-     m_openUnderCursorWithOffsetBtn = new QPushButton("openUnderCursorWithOffset",this);
-     m_xOffset = new QSpinBox(this);
-     m_xOffset->setRange(-1920*2,1920*2);
diff -Nru libkysdk-applications-2.5.1.0/debian/patches/0021-40-change-env-judgement.patch libkysdk-applications-2.5.2.0/debian/patches/0021-40-change-env-judgement.patch
--- libkysdk-applications-2.5.1.0/debian/patches/0021-40-change-env-judgement.patch	2024-07-31 11:09:38.000000000 +0800
+++ libkysdk-applications-2.5.2.0/debian/patches/0021-40-change-env-judgement.patch	1970-01-01 08:00:00.000000000 +0800
@@ -1,90 +0,0 @@
-From: "Mr.Sun" <sunzhen1@kylinos.cn>
-Date: Fri, 28 Jun 2024 01:43:10 +0000
-Subject: !40 change env judgement Merge pull request !40 from
- kylin0061/openkylin/nile
-
----
- kysdk-waylandhelper/src/windowmanager/ukuishell.cpp            | 6 +++++-
- kysdk-waylandhelper/src/windowmanager/ukuiwindowmanagement.cpp | 2 +-
- kysdk-waylandhelper/test/testWindowManager/widget.cpp          | 7 +++++++
- kysdk-waylandhelper/test/testWindowManager/widget.h            | 1 +
- 4 files changed, 14 insertions(+), 2 deletions(-)
-
-diff --git a/kysdk-waylandhelper/src/windowmanager/ukuishell.cpp b/kysdk-waylandhelper/src/windowmanager/ukuishell.cpp
-index 63ad0ff..11eb3a7 100644
---- a/kysdk-waylandhelper/src/windowmanager/ukuishell.cpp
-+++ b/kysdk-waylandhelper/src/windowmanager/ukuishell.cpp
-@@ -348,5 +348,9 @@ void UkuiShellSurface::setOpenUnderCursor(int x, int y)
- 
- void UkuiShellSurface::setIconName(const QString& iconName)
- {
--    ukui_surface_set_icon(d->surface, iconName.toStdString().c_str());
-+    if (iconName.isEmpty()) {
-+        ukui_surface_set_icon(d->surface, NULL);
-+    } else {
-+        ukui_surface_set_icon(d->surface, iconName.toStdString().c_str());
-+    }
- }
-diff --git a/kysdk-waylandhelper/src/windowmanager/ukuiwindowmanagement.cpp b/kysdk-waylandhelper/src/windowmanager/ukuiwindowmanagement.cpp
-index 2ce5370..785e786 100644
---- a/kysdk-waylandhelper/src/windowmanager/ukuiwindowmanagement.cpp
-+++ b/kysdk-waylandhelper/src/windowmanager/ukuiwindowmanagement.cpp
-@@ -635,7 +635,7 @@ void UkuiWindow::Private::iconChangedCallback(void *data, ukui_window *window)
-             return QIcon();
-         }
-         close(pipeFd);
--        if(qgetenv("GDMSESSION") == QString("kylin-wlcom"))
-+        if (qgetenv("XDG_SESSION_DESKTOP") == QString("kylin-wlcom"))
-         {
-             int width = (content.at(0) << 0) | 
-                     (content.at(1) << 8) |
-diff --git a/kysdk-waylandhelper/test/testWindowManager/widget.cpp b/kysdk-waylandhelper/test/testWindowManager/widget.cpp
-index da0e481..3e16c1e 100644
---- a/kysdk-waylandhelper/test/testWindowManager/widget.cpp
-+++ b/kysdk-waylandhelper/test/testWindowManager/widget.cpp
-@@ -258,6 +258,7 @@ void Widget::initUI()
-     m_setHighlightBtn = new QPushButton("setHighlight", this);
-     m_unsetHighlightBtn = new QPushButton("unsetHighlight", this);
-     m_setIconNameBtn = new QPushButton("setIconName",this);
-+    m_unsetIconNameBtn = new QPushButton("unsetIconName",this);
- 
-     QHBoxLayout* layout10 = new QHBoxLayout();
-     layout10->addWidget(m_getGeometryBtn);
-@@ -265,6 +266,7 @@ void Widget::initUI()
-     layout10->addWidget(m_setSwitcherLayer);
-     layout10->addWidget(m_setHighlightBtn);
-     layout10->addWidget(m_setIconNameBtn);
-+    layout10->addWidget(m_unsetIconNameBtn);
- 
-     QVBoxLayout* vLayout3 = new QVBoxLayout();
-     vLayout3->addLayout(layout10);
-@@ -285,6 +287,7 @@ void Widget::initUI()
-     layout11->addWidget(m_xOffset);
-     layout11->addWidget(m_yOffset);
-     layout11->addWidget(m_setIconNameBtn);
-+    layout11->addWidget(m_unsetIconNameBtn);
-     layout11->addStretch();
-     vLayout3->addLayout(layout11);
-     box5->setLayout(vLayout3);
-@@ -315,6 +318,10 @@ void Widget::initConnection()
-         WindowManager::setIconName(m_subWidget->windowHandle(), "kylin-music");
-     });
- 
-+    connect(m_unsetIconNameBtn,&::QPushButton::clicked, this, [=](){
-+        WindowManager::setIconName(m_subWidget->windowHandle(), "");
-+    });
-+
-     connect(m_openUnderCursorWithOffsetBtn,&::QPushButton::clicked, this, [=](){
-         WindowManager::setOpenUnderCursor(m_subWidget->windowHandle(), m_xOffset->value(), m_yOffset->value());
-     });
-diff --git a/kysdk-waylandhelper/test/testWindowManager/widget.h b/kysdk-waylandhelper/test/testWindowManager/widget.h
-index 38c4a1d..2c35cda 100644
---- a/kysdk-waylandhelper/test/testWindowManager/widget.h
-+++ b/kysdk-waylandhelper/test/testWindowManager/widget.h
-@@ -93,5 +93,6 @@ private:
-     QSpinBox *m_xOffset;
-     QSpinBox *m_yOffset;
-     QPushButton* m_setIconNameBtn;
-+    QPushButton* m_unsetIconNameBtn;
- };
- #endif // WIDGET_H
diff -Nru libkysdk-applications-2.5.1.0/debian/patches/0022-Translated-using-Weblate-Kyrgyz.patch libkysdk-applications-2.5.2.0/debian/patches/0022-Translated-using-Weblate-Kyrgyz.patch
--- libkysdk-applications-2.5.1.0/debian/patches/0022-Translated-using-Weblate-Kyrgyz.patch	2024-07-31 11:09:38.000000000 +0800
+++ libkysdk-applications-2.5.2.0/debian/patches/0022-Translated-using-Weblate-Kyrgyz.patch	1970-01-01 08:00:00.000000000 +0800
@@ -1,445 +0,0 @@
-From: KevinDuan <duankaiwen@kylinos.cn>
-Date: Tue, 9 Jul 2024 07:09:08 +0000
-Subject: Translated using Weblate (Kyrgyz)
-
-Currently translated at 78.3% (29 of 37 strings)
-
-Translation: openkylin-nile-new/libkysdk-applications
-Translate-URL: http://weblate.openkylin.top/projects/openkylin-nile-new/libkysdk-applications/ky/
----
- kysdk-qtwidgets/translations/gui_kk.ts | 58 +++++++++++++++++-----------------
- kysdk-qtwidgets/translations/gui_ky.ts | 58 +++++++++++++++++-----------------
- 2 files changed, 58 insertions(+), 58 deletions(-)
-
-diff --git a/kysdk-qtwidgets/translations/gui_kk.ts b/kysdk-qtwidgets/translations/gui_kk.ts
-index 27c9db9..9a161ef 100644
---- a/kysdk-qtwidgets/translations/gui_kk.ts
-+++ b/kysdk-qtwidgets/translations/gui_kk.ts
-@@ -18,7 +18,7 @@
-         <location filename="../src/kaboutdialog.cpp" line="271"/>
-         <source>Service &amp; Support: </source>
-         <translatorcomment>服务与支持团队:</translatorcomment>
--        <translation type="unfinished"></translation>
-+        <translation>قىزىمەت ۋا قولداۋ: </translation>
-     </message>
-     <message>
-         <location filename="../src/kaboutdialog.cpp" line="263"/>
-@@ -61,7 +61,7 @@
-     <message>
-         <location filename="../src/kinputdialog.cpp" line="241"/>
-         <source>Enter a value:</source>
--        <translation type="unfinished"></translation>
-+        <translation>بٸر مانىن كىرگىزىڭىز:</translation>
-     </message>
- </context>
- <context>
-@@ -69,12 +69,12 @@
-     <message>
-         <location filename="../src/kinputdialog.cpp" line="250"/>
-         <source>ok</source>
--        <translation type="unfinished"></translation>
-+        <translation>تۇراقتاندىرۋ</translation>
-     </message>
-     <message>
-         <location filename="../src/kinputdialog.cpp" line="252"/>
-         <source>cancel</source>
--        <translation type="unfinished"></translation>
-+        <translation>بوس ەتۋ</translation>
-     </message>
- </context>
- <context>
-@@ -82,48 +82,48 @@
-     <message>
-         <location filename="../src/kmenubutton.cpp" line="67"/>
-         <source>Options</source>
--        <translation type="unfinished"></translation>
-+        <translation>تالدانبا</translation>
-     </message>
-     <message>
-         <location filename="../src/kmenubutton.cpp" line="68"/>
-         <source>Setting</source>
-         <translatorcomment>设置</translatorcomment>
--        <translation type="unfinished"></translation>
-+        <translation>تەڭشە</translation>
-     </message>
-     <message>
-         <location filename="../src/kmenubutton.cpp" line="69"/>
-         <source>Theme</source>
--        <translation type="unfinished"></translation>
-+        <translation>سلوب</translation>
-     </message>
-     <message>
-         <location filename="../src/kmenubutton.cpp" line="70"/>
-         <source>Assist</source>
--        <translation type="unfinished"></translation>
-+        <translation>جاردەم</translation>
-     </message>
-     <message>
-         <location filename="../src/kmenubutton.cpp" line="71"/>
-         <source>About</source>
--        <translation type="unfinished"></translation>
-+        <translation>جونٸندە</translation>
-     </message>
-     <message>
-         <location filename="../src/kmenubutton.cpp" line="72"/>
-         <source>Quit</source>
--        <translation type="unfinished"></translation>
-+        <translation>شەگىنۋ</translation>
-     </message>
-     <message>
-         <location filename="../src/kmenubutton.cpp" line="79"/>
-         <source>Auto</source>
--        <translation type="unfinished"></translation>
-+        <translation>اۆتوماتىك</translation>
-     </message>
-     <message>
-         <location filename="../src/kmenubutton.cpp" line="81"/>
-         <source>Light</source>
--        <translation type="unfinished"></translation>
-+        <translation>السىرەۋ رەڭ</translation>
-     </message>
-     <message>
-         <location filename="../src/kmenubutton.cpp" line="83"/>
-         <source>Dark</source>
--        <translation type="unfinished"></translation>
-+        <translation>قانىق رەڭ</translation>
-     </message>
- </context>
- <context>
-@@ -131,7 +131,7 @@
-     <message>
-         <location filename="../src/kprogressdialog.cpp" line="70"/>
-         <source>cancel</source>
--        <translation type="unfinished"></translation>
-+        <translation>بوس ەتۋ</translation>
-     </message>
- </context>
- <context>
-@@ -140,7 +140,7 @@
-         <location filename="../src/ksearchlineedit.cpp" line="627"/>
-         <location filename="../src/ksearchlineedit.cpp" line="815"/>
-         <source>Search</source>
--        <translation type="unfinished"></translation>
-+        <translation>Іздеу</translation>
-     </message>
- </context>
- <context>
-@@ -148,17 +148,17 @@
-     <message>
-         <location filename="../src/ksecuritylevelbar.cpp" line="62"/>
-         <source>Low</source>
--        <translation type="unfinished"></translation>
-+        <translation>تومەن</translation>
-     </message>
-     <message>
-         <location filename="../src/ksecuritylevelbar.cpp" line="65"/>
-         <source>Medium</source>
--        <translation type="unfinished"></translation>
-+        <translation>ورتا</translation>
-     </message>
-     <message>
-         <location filename="../src/ksecuritylevelbar.cpp" line="68"/>
-         <source>High</source>
--        <translation type="unfinished"></translation>
-+        <translation>جوعارعى</translation>
-     </message>
- </context>
- <context>
-@@ -166,7 +166,7 @@
-     <message>
-         <location filename="../src/ksecuritylevelbar.cpp" line="179"/>
-         <source>Low</source>
--        <translation type="unfinished"></translation>
-+        <translation>تومەن</translation>
-     </message>
- </context>
- <context>
-@@ -181,12 +181,12 @@
-     <message>
-         <location filename="../src/kuninstalldialog.cpp" line="185"/>
-         <source>deb name:</source>
--        <translation type="unfinished"></translation>
-+        <translation>بۇلاق مى:</translation>
-     </message>
-     <message>
-         <location filename="../src/kuninstalldialog.cpp" line="190"/>
-         <source>deb version:</source>
--        <translation type="unfinished"></translation>
-+        <translation>باسىلىمى:</translation>
-     </message>
- </context>
- <context>
-@@ -194,12 +194,12 @@
-     <message>
-         <location filename="../src/kuninstalldialog.cpp" line="305"/>
-         <source>deb name:</source>
--        <translation type="unfinished"></translation>
-+        <translation>بۇلاق مى:</translation>
-     </message>
-     <message>
-         <location filename="../src/kuninstalldialog.cpp" line="309"/>
-         <source>deb version:</source>
--        <translation type="unfinished"></translation>
-+        <translation>باسىلىمى:</translation>
-     </message>
- </context>
- <context>
-@@ -208,13 +208,13 @@
-         <location filename="../src/kwindowbuttonbar.cpp" line="156"/>
-         <location filename="../src/kwindowbuttonbar.cpp" line="178"/>
-         <source>Maximize</source>
--        <translation type="unfinished"></translation>
-+        <translation>ۇلكەيتۋ</translation>
-     </message>
-     <message>
-         <location filename="../src/kwindowbuttonbar.cpp" line="162"/>
-         <location filename="../src/kwindowbuttonbar.cpp" line="183"/>
-         <source>Restore</source>
--        <translation type="unfinished"></translation>
-+        <translation>قالپىنا كەلتىرىلگەن</translation>
-     </message>
- </context>
- <context>
-@@ -222,22 +222,22 @@
-     <message>
-         <location filename="../src/kwindowbuttonbar.cpp" line="271"/>
-         <source>Minimize</source>
--        <translation type="unfinished"></translation>
-+        <translation>ەڭ كشكەنە بەينە</translation>
-     </message>
-     <message>
-         <location filename="../src/kwindowbuttonbar.cpp" line="280"/>
-         <source>Close</source>
--        <translation type="unfinished"></translation>
-+        <translation>تاقاۋ</translation>
-     </message>
-     <message>
-         <location filename="../src/kwindowbuttonbar.cpp" line="341"/>
-         <source>Maximize</source>
--        <translation type="unfinished"></translation>
-+        <translation>ۇلكەيتۋ</translation>
-     </message>
-     <message>
-         <location filename="../src/kwindowbuttonbar.cpp" line="346"/>
-         <source>Restore</source>
--        <translation type="unfinished"></translation>
-+        <translation>قالپىنا كەلتىرىلگەن</translation>
-     </message>
- </context>
- </TS>
-diff --git a/kysdk-qtwidgets/translations/gui_ky.ts b/kysdk-qtwidgets/translations/gui_ky.ts
-index 2f943a7..e994826 100644
---- a/kysdk-qtwidgets/translations/gui_ky.ts
-+++ b/kysdk-qtwidgets/translations/gui_ky.ts
-@@ -18,7 +18,7 @@
-         <location filename="../src/kaboutdialog.cpp" line="271"/>
-         <source>Service &amp; Support: </source>
-         <translatorcomment>服务与支持团队:</translatorcomment>
--        <translation type="unfinished"></translation>
-+        <translation>تەيلۅۅ جانا قولدوش ، دەم بەرىش : </translation>
-     </message>
-     <message>
-         <location filename="../src/kaboutdialog.cpp" line="263"/>
-@@ -61,7 +61,7 @@
-     <message>
-         <location filename="../src/kinputdialog.cpp" line="241"/>
-         <source>Enter a value:</source>
--        <translation type="unfinished"></translation>
-+        <translation>بىر  نارقتۇۇنۇ  كىرگىزىڭ:</translation>
-     </message>
- </context>
- <context>
-@@ -69,12 +69,12 @@
-     <message>
-         <location filename="../src/kinputdialog.cpp" line="250"/>
-         <source>ok</source>
--        <translation type="unfinished"></translation>
-+        <translation>بەكىتۉۉ</translation>
-     </message>
-     <message>
-         <location filename="../src/kinputdialog.cpp" line="252"/>
-         <source>cancel</source>
--        <translation type="unfinished"></translation>
-+        <translation>بەكەر  جاسوو ،اتقارۇۇ</translation>
-     </message>
- </context>
- <context>
-@@ -82,48 +82,48 @@
-     <message>
-         <location filename="../src/kmenubutton.cpp" line="67"/>
-         <source>Options</source>
--        <translation type="unfinished"></translation>
-+        <translation>تاندالما</translation>
-     </message>
-     <message>
-         <location filename="../src/kmenubutton.cpp" line="68"/>
-         <source>Setting</source>
-         <translatorcomment>设置</translatorcomment>
--        <translation type="unfinished"></translation>
-+        <translation>تەڭشەك</translation>
-     </message>
-     <message>
-         <location filename="../src/kmenubutton.cpp" line="69"/>
-         <source>Theme</source>
--        <translation type="unfinished"></translation>
-+        <translation>ۇسلۇپ</translation>
-     </message>
-     <message>
-         <location filename="../src/kmenubutton.cpp" line="70"/>
-         <source>Assist</source>
--        <translation type="unfinished"></translation>
-+        <translation>جەرلىك</translation>
-     </message>
-     <message>
-         <location filename="../src/kmenubutton.cpp" line="71"/>
-         <source>About</source>
--        <translation type="unfinished"></translation>
-+        <translation>جۅنۉندۅ</translation>
-     </message>
-     <message>
-         <location filename="../src/kmenubutton.cpp" line="72"/>
-         <source>Quit</source>
--        <translation type="unfinished"></translation>
-+        <translation>جانىش ، قايتىش</translation>
-     </message>
-     <message>
-         <location filename="../src/kmenubutton.cpp" line="79"/>
-         <source>Auto</source>
--        <translation type="unfinished"></translation>
-+        <translation>اپتوماتىك</translation>
-     </message>
-     <message>
-         <location filename="../src/kmenubutton.cpp" line="81"/>
-         <source>Light</source>
--        <translation type="unfinished"></translation>
-+        <translation>كۉڭۉرت  تۉس</translation>
-     </message>
-     <message>
-         <location filename="../src/kmenubutton.cpp" line="83"/>
-         <source>Dark</source>
--        <translation type="unfinished"></translation>
-+        <translation>قانىق  تۉس</translation>
-     </message>
- </context>
- <context>
-@@ -131,7 +131,7 @@
-     <message>
-         <location filename="../src/kprogressdialog.cpp" line="70"/>
-         <source>cancel</source>
--        <translation type="unfinished"></translation>
-+        <translation>بەكەر  جاسوو ،اتقارۇۇ</translation>
-     </message>
- </context>
- <context>
-@@ -140,7 +140,7 @@
-         <location filename="../src/ksearchlineedit.cpp" line="627"/>
-         <location filename="../src/ksearchlineedit.cpp" line="815"/>
-         <source>Search</source>
--        <translation type="unfinished"></translation>
-+        <translation>Издөө</translation>
-     </message>
- </context>
- <context>
-@@ -148,17 +148,17 @@
-     <message>
-         <location filename="../src/ksecuritylevelbar.cpp" line="62"/>
-         <source>Low</source>
--        <translation type="unfinished"></translation>
-+        <translation>تۅمۅن</translation>
-     </message>
-     <message>
-         <location filename="../src/ksecuritylevelbar.cpp" line="65"/>
-         <source>Medium</source>
--        <translation type="unfinished"></translation>
-+        <translation>ورتوسۇ</translation>
-     </message>
-     <message>
-         <location filename="../src/ksecuritylevelbar.cpp" line="68"/>
-         <source>High</source>
--        <translation type="unfinished"></translation>
-+        <translation>جوعورۇ</translation>
-     </message>
- </context>
- <context>
-@@ -166,7 +166,7 @@
-     <message>
-         <location filename="../src/ksecuritylevelbar.cpp" line="179"/>
-         <source>Low</source>
--        <translation type="unfinished"></translation>
-+        <translation>تۅمۅن</translation>
-     </message>
- </context>
- <context>
-@@ -181,12 +181,12 @@
-     <message>
-         <location filename="../src/kuninstalldialog.cpp" line="185"/>
-         <source>deb name:</source>
--        <translation type="unfinished"></translation>
-+        <translation>تاڭىق ناامى :</translation>
-     </message>
-     <message>
-         <location filename="../src/kuninstalldialog.cpp" line="190"/>
-         <source>deb version:</source>
--        <translation type="unfinished"></translation>
-+        <translation>باسماسى :</translation>
-     </message>
- </context>
- <context>
-@@ -194,12 +194,12 @@
-     <message>
-         <location filename="../src/kuninstalldialog.cpp" line="305"/>
-         <source>deb name:</source>
--        <translation type="unfinished"></translation>
-+        <translation>تاڭىق ناامى :</translation>
-     </message>
-     <message>
-         <location filename="../src/kuninstalldialog.cpp" line="309"/>
-         <source>deb version:</source>
--        <translation type="unfinished"></translation>
-+        <translation>باسماسى :</translation>
-     </message>
- </context>
- <context>
-@@ -208,13 +208,13 @@
-         <location filename="../src/kwindowbuttonbar.cpp" line="156"/>
-         <location filename="../src/kwindowbuttonbar.cpp" line="178"/>
-         <source>Maximize</source>
--        <translation type="unfinished"></translation>
-+        <translation>چوڭويتۇش</translation>
-     </message>
-     <message>
-         <location filename="../src/kwindowbuttonbar.cpp" line="162"/>
-         <location filename="../src/kwindowbuttonbar.cpp" line="183"/>
-         <source>Restore</source>
--        <translation type="unfinished"></translation>
-+        <translation>العاچىنا كەلتىرۉۉ</translation>
-     </message>
- </context>
- <context>
-@@ -222,22 +222,22 @@
-     <message>
-         <location filename="../src/kwindowbuttonbar.cpp" line="271"/>
-         <source>Minimize</source>
--        <translation type="unfinished"></translation>
-+        <translation>ەڭ كىچىك   ابالى</translation>
-     </message>
-     <message>
-         <location filename="../src/kwindowbuttonbar.cpp" line="280"/>
-         <source>Close</source>
--        <translation type="unfinished"></translation>
-+        <translation>بەكىتىش</translation>
-     </message>
-     <message>
-         <location filename="../src/kwindowbuttonbar.cpp" line="341"/>
-         <source>Maximize</source>
--        <translation type="unfinished"></translation>
-+        <translation>چوڭويتۇش</translation>
-     </message>
-     <message>
-         <location filename="../src/kwindowbuttonbar.cpp" line="346"/>
-         <source>Restore</source>
--        <translation type="unfinished"></translation>
-+        <translation>العاچىنا كەلتىرۉۉ</translation>
-     </message>
- </context>
- </TS>
diff -Nru libkysdk-applications-2.5.1.0/debian/patches/0023-update-changelog.patch libkysdk-applications-2.5.2.0/debian/patches/0023-update-changelog.patch
--- libkysdk-applications-2.5.1.0/debian/patches/0023-update-changelog.patch	2024-07-31 11:09:38.000000000 +0800
+++ libkysdk-applications-2.5.2.0/debian/patches/0023-update-changelog.patch	1970-01-01 08:00:00.000000000 +0800
@@ -1,294 +0,0 @@
-From: sunzhen <sunzhen1@kylinos.cn>
-Date: Thu, 11 Jul 2024 10:51:29 +0800
-Subject: update changelog
-
----
- .../src/windowmanager/abstractinterface.cpp        | 27 +++++++++++++++
- .../src/windowmanager/abstractinterface.h          |  2 ++
- .../src/windowmanager/kdewaylandinterface.cpp      |  2 ++
- .../src/windowmanager/ukuiwaylandinterface.cpp     |  3 +-
- kysdk-waylandhelper/src/windowmanager/windowinfo.h | 38 ++++++++++++++++++++++
- .../src/windowmanager/windowmanager.cpp            | 18 ++++++++++
- .../src/windowmanager/windowmanager.h              | 16 +++++++++
- .../src/windowmanager/xcbinterface.cpp             |  2 ++
- .../test/testWindowManager/widget.cpp              | 28 +++++++++++++++-
- .../test/testWindowManager/widget.h                |  5 +++
- 10 files changed, 139 insertions(+), 2 deletions(-)
-
-diff --git a/kysdk-waylandhelper/src/windowmanager/abstractinterface.cpp b/kysdk-waylandhelper/src/windowmanager/abstractinterface.cpp
-index 24eefa6..c757b10 100644
---- a/kysdk-waylandhelper/src/windowmanager/abstractinterface.cpp
-+++ b/kysdk-waylandhelper/src/windowmanager/abstractinterface.cpp
-@@ -94,6 +94,33 @@ QList<WindowId> AbstractInterface::windows()
-     return m_windows.keys();
- }
- 
-+QList<WindowId> AbstractInterface::getWindowIdByPid(const quint32 pid)
-+{
-+    QList<WindowId> list;
-+    for(WindowInfo info : m_windows.values())
-+    {
-+        if(info.windowPid() == pid)
-+        {
-+            WindowId windowId = m_windows.key(info);
-+            list.append(windowId);
-+        }
-+    }
-+    return list;
-+}
-+
-+QList<WindowId> AbstractInterface::getWindowIdByTitle(const QString &title)
-+{
-+    QList<WindowId> list;
-+    for(WindowInfo info : m_windows.values())
-+    {
-+        if(info.windowTitle() == title)
-+        {
-+            list.append(m_windows.key(info));
-+        }
-+    }
-+    return list;
-+}
-+
- QString AbstractInterface::getProcessName(const WindowId &wid)
- {
-     auto id = pid(wid);
-diff --git a/kysdk-waylandhelper/src/windowmanager/abstractinterface.h b/kysdk-waylandhelper/src/windowmanager/abstractinterface.h
-index 0977666..b1501aa 100644
---- a/kysdk-waylandhelper/src/windowmanager/abstractinterface.h
-+++ b/kysdk-waylandhelper/src/windowmanager/abstractinterface.h
-@@ -101,6 +101,8 @@ public:
-     bool isValidFor(const WindowId &wid) ;
- 
-     QList<WindowId> windows();
-+    QList<WindowId> getWindowIdByPid(const quint32 pid);
-+    QList<WindowId> getWindowIdByTitle(const QString& title);
-     virtual void setPanelTakefocus(QWindow *window, bool flag) = 0;
-     virtual void demandAttention(const WindowId &wid) = 0;
-     virtual QString getProcessName(const WindowId &wid);
-diff --git a/kysdk-waylandhelper/src/windowmanager/kdewaylandinterface.cpp b/kysdk-waylandhelper/src/windowmanager/kdewaylandinterface.cpp
-index 3e92ffa..61fede4 100644
---- a/kysdk-waylandhelper/src/windowmanager/kdewaylandinterface.cpp
-+++ b/kysdk-waylandhelper/src/windowmanager/kdewaylandinterface.cpp
-@@ -128,6 +128,8 @@ WindowInfo KdeWaylandInterface::requestInfo(WindowId wid)
-             windowInfo.setIsVirtualDesktopsChangeable(w->isVirtualDesktopChangeable());
-             //! Window Abilities
-             windowInfo.setDesktops(w->plasmaVirtualDesktops());
-+            windowInfo.setWindowPid(w->pid());
-+            windowInfo.setWindowTitle(w->title());
-         }
-     }
-     else
-diff --git a/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.cpp b/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.cpp
-index 6bb7e7f..f60c353 100644
---- a/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.cpp
-+++ b/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.cpp
-@@ -52,7 +52,6 @@ WindowInfo UkuiWaylandInterface::requestInfo(WindowId wid)
-     WindowInfo windowInfo;
- 
-     auto w = windowFor(wid);
--
-     if (w) {
-         if (isPlasmaDesktop(w->geometry())) {
-             windowInfo.setIsValid(true);
-@@ -94,6 +93,8 @@ WindowInfo UkuiWaylandInterface::requestInfo(WindowId wid)
-             windowInfo.setIsResizable(w->isResizable());
-             windowInfo.setIsShadeable(w->isShadeable());
-             windowInfo.setIsVirtualDesktopsChangeable(w->isVirtualDesktopChangeable());
-+            windowInfo.setWindowPid(w->pid());
-+            windowInfo.setWindowTitle(w->title());
-         }
-     }
-     else
-diff --git a/kysdk-waylandhelper/src/windowmanager/windowinfo.h b/kysdk-waylandhelper/src/windowmanager/windowinfo.h
-index 7081a95..315dffe 100644
---- a/kysdk-waylandhelper/src/windowmanager/windowinfo.h
-+++ b/kysdk-waylandhelper/src/windowmanager/windowinfo.h
-@@ -143,6 +143,14 @@ public:
-     inline bool isDemandAttention() const noexcept;
-     inline void setIsDemandAttention(bool demandAttention) noexcept;
- 
-+    inline QString windowTitle() const noexcept;
-+    inline void setWindowTitle(const QString& title) noexcept;
-+
-+    inline quint32 windowPid() const noexcept;
-+    inline void setWindowPid(quint32 pid) noexcept;
-+
-+    bool operator ==(const WindowInfo& info) const;
-+
- 
- private:
-     void* m_handle;
-@@ -181,6 +189,8 @@ private:
- 
-     QString m_appName;
-     QString m_display;
-+    QString m_title;
-+    quint32 m_pid;
- 
-     QIcon m_icon;
- 
-@@ -398,6 +408,34 @@ void WindowInfo::setIsDemandAttention(bool demandAttention) noexcept
-     m_isDemandAttention = demandAttention;
- }
- 
-+inline QString WindowInfo::windowTitle() const noexcept
-+{
-+    return m_title;
-+}
-+
-+inline void WindowInfo::setWindowTitle(const QString& title) noexcept
-+{
-+    m_title = title;
-+}
-+
-+inline quint32 WindowInfo::windowPid() const noexcept
-+{
-+    return m_pid;
-+}
-+
-+inline void WindowInfo::setWindowPid(quint32 pid) noexcept
-+{
-+    m_pid = pid;
-+}
-+
-+inline bool WindowInfo::operator ==(const WindowInfo &info) const
-+{
-+    if(this->m_wid == info.wid())
-+        return true;
-+    else
-+        return false;
-+}
-+
- bool WindowInfo::isMovable() const noexcept
- {
-     return m_isMovable;
-diff --git a/kysdk-waylandhelper/src/windowmanager/windowmanager.cpp b/kysdk-waylandhelper/src/windowmanager/windowmanager.cpp
-index 3f4adbf..4c5a588 100644
---- a/kysdk-waylandhelper/src/windowmanager/windowmanager.cpp
-+++ b/kysdk-waylandhelper/src/windowmanager/windowmanager.cpp
-@@ -386,3 +386,21 @@ void WindowManager::setIconName(QWindow *window, const QString &iconName)
-         return ;
-     return m_wm->winInterface()->setIconName(window, iconName);
- }
-+
-+QList<WindowId> WindowManager::getWindowIdByPid(const quint32 pid)
-+{
-+    QList<WindowId> list;
-+    self();
-+    if(!m_wm)
-+        return list;
-+    return m_wm->winInterface()->getWindowIdByPid(pid);
-+}
-+
-+QList<WindowId> WindowManager::getWindowIdByTitle(const QString &title)
-+{
-+    QList<WindowId> list;
-+    self();
-+    if(!m_wm)
-+        return list;
-+    return m_wm->winInterface()->getWindowIdByTitle(title);
-+}
-diff --git a/kysdk-waylandhelper/src/windowmanager/windowmanager.h b/kysdk-waylandhelper/src/windowmanager/windowmanager.h
-index e482625..168e311 100644
---- a/kysdk-waylandhelper/src/windowmanager/windowmanager.h
-+++ b/kysdk-waylandhelper/src/windowmanager/windowmanager.h
-@@ -351,6 +351,22 @@ public:
-      */
-     static void setIconName(QWindow *window, const QString& iconName);
- 
-+    /**
-+     * @brief getWindowIdByPid
-+     * @since 2.5
-+     * @param pid
-+     * @return
-+     */
-+    static QList<WindowId> getWindowIdByPid(const  quint32 pid);
-+
-+    /**
-+     * @brief getWindowIdByTitle
-+     * @since 2.5
-+     * @param title
-+     * @return
-+     */
-+    static QList<WindowId> getWindowIdByTitle(const QString& title);
-+
- Q_SIGNALS:
-      /**
-       * @brief 窗口添加信号
-diff --git a/kysdk-waylandhelper/src/windowmanager/xcbinterface.cpp b/kysdk-waylandhelper/src/windowmanager/xcbinterface.cpp
-index 678e536..db4d2bb 100644
---- a/kysdk-waylandhelper/src/windowmanager/xcbinterface.cpp
-+++ b/kysdk-waylandhelper/src/windowmanager/xcbinterface.cpp
-@@ -281,6 +281,8 @@ WindowInfo XcbInterface::requestInfo(WindowId wid)
-         //! Window Abilities
- 
-         windowInfo.setDesktops({QString::number(winfo.desktop())});
-+        windowInfo.setWindowPid(winfo.pid());
-+        windowInfo.setWindowTitle(winfo.name());
-     }
-     else if (m_desktopId == wid)
-     {
-diff --git a/kysdk-waylandhelper/test/testWindowManager/widget.cpp b/kysdk-waylandhelper/test/testWindowManager/widget.cpp
-index 3e16c1e..c407ad1 100644
---- a/kysdk-waylandhelper/test/testWindowManager/widget.cpp
-+++ b/kysdk-waylandhelper/test/testWindowManager/widget.cpp
-@@ -290,9 +290,26 @@ void Widget::initUI()
-     layout11->addWidget(m_unsetIconNameBtn);
-     layout11->addStretch();
-     vLayout3->addLayout(layout11);
--    box5->setLayout(vLayout3);
- 
- 
-+    m_getWidByPidEdit = new QLineEdit(this);
-+    m_getWidByPidEdit->setPlaceholderText("根据pid查询窗口id");
-+    m_getWidByPidBtn = new QPushButton("查询");
-+
-+    m_getWidByTitleEdit = new QLineEdit(this);
-+    m_getWidByTitleEdit->setPlaceholderText("根据窗口标题查询窗口id");
-+    m_getWidBytitleBtn = new QPushButton("查询");
-+
-+    QHBoxLayout* layout12 = new QHBoxLayout();
-+    layout12->addWidget(m_getWidByPidEdit);
-+    layout12->addWidget(m_getWidByPidBtn);
-+    layout12->addStretch();
-+    layout12->addWidget(m_getWidByTitleEdit);
-+    layout12->addWidget(m_getWidBytitleBtn);
-+    vLayout3->addLayout(layout12);
-+
-+    box5->setLayout(vLayout3);
-+
-     mainLayout->addWidget(m_label);
-     mainLayout->addLayout(hLayout1);
-     mainLayout->addWidget(label);
-@@ -314,6 +331,15 @@ void Widget::initUI()
- 
- void Widget::initConnection()
- {   
-+    connect(m_getWidByPidBtn,&QPushButton::clicked,this,[=](){
-+        quint32 pid = m_getWidByPidEdit->text().toUInt();
-+        qDebug()<<kdk::WindowManager::getWindowIdByPid(pid);
-+    });
-+
-+    connect(m_getWidBytitleBtn,&QPushButton::clicked,this,[=](){
-+        qDebug()<<kdk::WindowManager::getWindowIdByTitle(m_getWidByTitleEdit->text());
-+    });
-+
-     connect(m_setIconNameBtn,&::QPushButton::clicked, this, [=](){
-         WindowManager::setIconName(m_subWidget->windowHandle(), "kylin-music");
-     });
-diff --git a/kysdk-waylandhelper/test/testWindowManager/widget.h b/kysdk-waylandhelper/test/testWindowManager/widget.h
-index 2c35cda..fac6d58 100644
---- a/kysdk-waylandhelper/test/testWindowManager/widget.h
-+++ b/kysdk-waylandhelper/test/testWindowManager/widget.h
-@@ -94,5 +94,10 @@ private:
-     QSpinBox *m_yOffset;
-     QPushButton* m_setIconNameBtn;
-     QPushButton* m_unsetIconNameBtn;
-+
-+    QPushButton* m_getWidByPidBtn;
-+    QLineEdit* m_getWidByPidEdit;
-+    QPushButton* m_getWidBytitleBtn;
-+    QLineEdit* m_getWidByTitleEdit;
- };
- #endif // WIDGET_H
diff -Nru libkysdk-applications-2.5.1.0/debian/patches/0024-update-changelog.patch libkysdk-applications-2.5.2.0/debian/patches/0024-update-changelog.patch
--- libkysdk-applications-2.5.1.0/debian/patches/0024-update-changelog.patch	2024-07-31 11:09:38.000000000 +0800
+++ libkysdk-applications-2.5.2.0/debian/patches/0024-update-changelog.patch	1970-01-01 08:00:00.000000000 +0800
@@ -1,97 +0,0 @@
-From: sunzhen <sunzhen1@kylinos.cn>
-Date: Thu, 11 Jul 2024 14:02:14 +0800
-Subject: update changelog
-
----
- .../src/windowmanager/ukuiwaylandinterface.cpp     | 71 ++++++++--------------
- 1 file changed, 27 insertions(+), 44 deletions(-)
-
-diff --git a/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.cpp b/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.cpp
-index f60c353..df896b8 100644
---- a/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.cpp
-+++ b/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.cpp
-@@ -52,50 +52,32 @@ WindowInfo UkuiWaylandInterface::requestInfo(WindowId wid)
-     WindowInfo windowInfo;
- 
-     auto w = windowFor(wid);
--    if (w) {
--        if (isPlasmaDesktop(w->geometry())) {
--            windowInfo.setIsValid(true);
--            windowInfo.setIsPlasmaDesktop(true);
--            windowInfo.setWid(wid);
--            //! Window Abilities
--            windowInfo.setIsClosable(false);
--            windowInfo.setIsFullScreenable(false);
--            windowInfo.setIsGroupable(false);
--            windowInfo.setIsMaximizable(false);
--            windowInfo.setIsMinimizable(false);
--            windowInfo.setIsMovable(false);
--            windowInfo.setIsResizable(false);
--            windowInfo.setIsShadeable(false);
--            windowInfo.setIsVirtualDesktopsChangeable(false);
--            //! Window Abilities
--
--        }
--        else {
--            windowInfo.setIsValid(true);
--            windowInfo.setWid(wid);
--            windowInfo.setIsActive(w->isActive());
--            windowInfo.setIsMinimized(w->isMinimized());
--            windowInfo.setIsMaxVert(w->isMaximized());
--            windowInfo.setIsMaxHoriz(w->isMaximized());
--            windowInfo.setIsFullscreen(w->isFullscreen());
--            windowInfo.setIsShaded(w->isShaded());
--            windowInfo.setIsOnAllDesktops(w->isOnAllDesktops());
--            windowInfo.setIsOnAllActivities(true);
--            windowInfo.setHasSkipTaskbar(w->skipTaskbar());
--            windowInfo.setHasSkipSwitcher(w->skipSwitcher());
--            windowInfo.setIsKeepAbove(w->isKeepAbove());
--            //! Window Abilities
--            windowInfo.setIsClosable(w->isCloseable());
--            windowInfo.setIsFullScreenable(w->isFullscreenable());
--            windowInfo.setIsMaximizable(w->isMaximizeable());
--            windowInfo.setIsMinimizable(w->isMinimizeable());
--            windowInfo.setIsMovable(w->isMovable());
--            windowInfo.setIsResizable(w->isResizable());
--            windowInfo.setIsShadeable(w->isShadeable());
--            windowInfo.setIsVirtualDesktopsChangeable(w->isVirtualDesktopChangeable());
--            windowInfo.setWindowPid(w->pid());
--            windowInfo.setWindowTitle(w->title());
--        }
-+    if (w)
-+    {
-+        windowInfo.setIsValid(true);
-+        windowInfo.setWid(wid);
-+        windowInfo.setIsActive(w->isActive());
-+        windowInfo.setIsMinimized(w->isMinimized());
-+        windowInfo.setIsMaxVert(w->isMaximized());
-+        windowInfo.setIsMaxHoriz(w->isMaximized());
-+        windowInfo.setIsFullscreen(w->isFullscreen());
-+        windowInfo.setIsShaded(w->isShaded());
-+        windowInfo.setIsOnAllDesktops(w->isOnAllDesktops());
-+        windowInfo.setIsOnAllActivities(true);
-+        windowInfo.setHasSkipTaskbar(w->skipTaskbar());
-+        windowInfo.setHasSkipSwitcher(w->skipSwitcher());
-+        windowInfo.setIsKeepAbove(w->isKeepAbove());
-+        //! Window Abilities
-+        windowInfo.setIsClosable(w->isCloseable());
-+        windowInfo.setIsFullScreenable(w->isFullscreenable());
-+        windowInfo.setIsMaximizable(w->isMaximizeable());
-+        windowInfo.setIsMinimizable(w->isMinimizeable());
-+        windowInfo.setIsMovable(w->isMovable());
-+        windowInfo.setIsResizable(w->isResizable());
-+        windowInfo.setIsShadeable(w->isShadeable());
-+        windowInfo.setIsVirtualDesktopsChangeable(w->isVirtualDesktopChangeable());
-+        windowInfo.setWindowPid(w->pid());
-+        windowInfo.setWindowTitle(w->title());
-     }
-     else
-     {
-@@ -951,6 +933,7 @@ void UkuiWaylandInterface::handleGlobal(void *data, wl_registry *registry, uint3
-             {
-                 if (!m_windows.contains(window->uuid()))
-                 {
-+                    qDebug()<<"OOOOOOOOOOOOOOOOOOOOOOOOOOO"<<window->title()<<" "<<window->uuid();
-                     m_windows.insert(window->uuid(), this->requestInfo(window->uuid()));
-                 }
-                 emit windowAdded(window->uuid());
diff -Nru libkysdk-applications-2.5.1.0/debian/patches/0025-Translated-using-Weblate-Kyrgyz.patch libkysdk-applications-2.5.2.0/debian/patches/0025-Translated-using-Weblate-Kyrgyz.patch
--- libkysdk-applications-2.5.1.0/debian/patches/0025-Translated-using-Weblate-Kyrgyz.patch	2024-07-31 11:09:38.000000000 +0800
+++ libkysdk-applications-2.5.2.0/debian/patches/0025-Translated-using-Weblate-Kyrgyz.patch	1970-01-01 08:00:00.000000000 +0800
@@ -1,365 +0,0 @@
-From: KevinDuan <duankaiwen@kylinos.cn>
-Date: Tue, 9 Jul 2024 07:09:08 +0000
-Subject: Translated using Weblate (Kyrgyz)
-
-Currently translated at 78.3% (29 of 37 strings)
-
-Translation: openkylin-nile-new/libkysdk-applications
-Translate-URL: http://weblate.openkylin.top/projects/openkylin-nile-new/libkysdk-applications/ky/
----
- .../src/windowmanager/abstractinterface.cpp        | 27 ---------
- .../src/windowmanager/abstractinterface.h          |  2 -
- .../src/windowmanager/kdewaylandinterface.cpp      |  2 -
- .../src/windowmanager/ukuiwaylandinterface.cpp     | 70 +++++++++++++---------
- kysdk-waylandhelper/src/windowmanager/windowinfo.h | 38 ------------
- .../src/windowmanager/windowmanager.cpp            | 18 ------
- .../src/windowmanager/windowmanager.h              | 16 -----
- .../src/windowmanager/xcbinterface.cpp             |  2 -
- .../test/testWindowManager/widget.cpp              | 28 +--------
- .../test/testWindowManager/widget.h                |  5 --
- 10 files changed, 44 insertions(+), 164 deletions(-)
-
-diff --git a/kysdk-waylandhelper/src/windowmanager/abstractinterface.cpp b/kysdk-waylandhelper/src/windowmanager/abstractinterface.cpp
-index c757b10..24eefa6 100644
---- a/kysdk-waylandhelper/src/windowmanager/abstractinterface.cpp
-+++ b/kysdk-waylandhelper/src/windowmanager/abstractinterface.cpp
-@@ -94,33 +94,6 @@ QList<WindowId> AbstractInterface::windows()
-     return m_windows.keys();
- }
- 
--QList<WindowId> AbstractInterface::getWindowIdByPid(const quint32 pid)
--{
--    QList<WindowId> list;
--    for(WindowInfo info : m_windows.values())
--    {
--        if(info.windowPid() == pid)
--        {
--            WindowId windowId = m_windows.key(info);
--            list.append(windowId);
--        }
--    }
--    return list;
--}
--
--QList<WindowId> AbstractInterface::getWindowIdByTitle(const QString &title)
--{
--    QList<WindowId> list;
--    for(WindowInfo info : m_windows.values())
--    {
--        if(info.windowTitle() == title)
--        {
--            list.append(m_windows.key(info));
--        }
--    }
--    return list;
--}
--
- QString AbstractInterface::getProcessName(const WindowId &wid)
- {
-     auto id = pid(wid);
-diff --git a/kysdk-waylandhelper/src/windowmanager/abstractinterface.h b/kysdk-waylandhelper/src/windowmanager/abstractinterface.h
-index b1501aa..0977666 100644
---- a/kysdk-waylandhelper/src/windowmanager/abstractinterface.h
-+++ b/kysdk-waylandhelper/src/windowmanager/abstractinterface.h
-@@ -101,8 +101,6 @@ public:
-     bool isValidFor(const WindowId &wid) ;
- 
-     QList<WindowId> windows();
--    QList<WindowId> getWindowIdByPid(const quint32 pid);
--    QList<WindowId> getWindowIdByTitle(const QString& title);
-     virtual void setPanelTakefocus(QWindow *window, bool flag) = 0;
-     virtual void demandAttention(const WindowId &wid) = 0;
-     virtual QString getProcessName(const WindowId &wid);
-diff --git a/kysdk-waylandhelper/src/windowmanager/kdewaylandinterface.cpp b/kysdk-waylandhelper/src/windowmanager/kdewaylandinterface.cpp
-index 61fede4..3e92ffa 100644
---- a/kysdk-waylandhelper/src/windowmanager/kdewaylandinterface.cpp
-+++ b/kysdk-waylandhelper/src/windowmanager/kdewaylandinterface.cpp
-@@ -128,8 +128,6 @@ WindowInfo KdeWaylandInterface::requestInfo(WindowId wid)
-             windowInfo.setIsVirtualDesktopsChangeable(w->isVirtualDesktopChangeable());
-             //! Window Abilities
-             windowInfo.setDesktops(w->plasmaVirtualDesktops());
--            windowInfo.setWindowPid(w->pid());
--            windowInfo.setWindowTitle(w->title());
-         }
-     }
-     else
-diff --git a/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.cpp b/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.cpp
-index df896b8..6bb7e7f 100644
---- a/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.cpp
-+++ b/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.cpp
-@@ -52,32 +52,49 @@ WindowInfo UkuiWaylandInterface::requestInfo(WindowId wid)
-     WindowInfo windowInfo;
- 
-     auto w = windowFor(wid);
--    if (w)
--    {
--        windowInfo.setIsValid(true);
--        windowInfo.setWid(wid);
--        windowInfo.setIsActive(w->isActive());
--        windowInfo.setIsMinimized(w->isMinimized());
--        windowInfo.setIsMaxVert(w->isMaximized());
--        windowInfo.setIsMaxHoriz(w->isMaximized());
--        windowInfo.setIsFullscreen(w->isFullscreen());
--        windowInfo.setIsShaded(w->isShaded());
--        windowInfo.setIsOnAllDesktops(w->isOnAllDesktops());
--        windowInfo.setIsOnAllActivities(true);
--        windowInfo.setHasSkipTaskbar(w->skipTaskbar());
--        windowInfo.setHasSkipSwitcher(w->skipSwitcher());
--        windowInfo.setIsKeepAbove(w->isKeepAbove());
--        //! Window Abilities
--        windowInfo.setIsClosable(w->isCloseable());
--        windowInfo.setIsFullScreenable(w->isFullscreenable());
--        windowInfo.setIsMaximizable(w->isMaximizeable());
--        windowInfo.setIsMinimizable(w->isMinimizeable());
--        windowInfo.setIsMovable(w->isMovable());
--        windowInfo.setIsResizable(w->isResizable());
--        windowInfo.setIsShadeable(w->isShadeable());
--        windowInfo.setIsVirtualDesktopsChangeable(w->isVirtualDesktopChangeable());
--        windowInfo.setWindowPid(w->pid());
--        windowInfo.setWindowTitle(w->title());
-+
-+    if (w) {
-+        if (isPlasmaDesktop(w->geometry())) {
-+            windowInfo.setIsValid(true);
-+            windowInfo.setIsPlasmaDesktop(true);
-+            windowInfo.setWid(wid);
-+            //! Window Abilities
-+            windowInfo.setIsClosable(false);
-+            windowInfo.setIsFullScreenable(false);
-+            windowInfo.setIsGroupable(false);
-+            windowInfo.setIsMaximizable(false);
-+            windowInfo.setIsMinimizable(false);
-+            windowInfo.setIsMovable(false);
-+            windowInfo.setIsResizable(false);
-+            windowInfo.setIsShadeable(false);
-+            windowInfo.setIsVirtualDesktopsChangeable(false);
-+            //! Window Abilities
-+
-+        }
-+        else {
-+            windowInfo.setIsValid(true);
-+            windowInfo.setWid(wid);
-+            windowInfo.setIsActive(w->isActive());
-+            windowInfo.setIsMinimized(w->isMinimized());
-+            windowInfo.setIsMaxVert(w->isMaximized());
-+            windowInfo.setIsMaxHoriz(w->isMaximized());
-+            windowInfo.setIsFullscreen(w->isFullscreen());
-+            windowInfo.setIsShaded(w->isShaded());
-+            windowInfo.setIsOnAllDesktops(w->isOnAllDesktops());
-+            windowInfo.setIsOnAllActivities(true);
-+            windowInfo.setHasSkipTaskbar(w->skipTaskbar());
-+            windowInfo.setHasSkipSwitcher(w->skipSwitcher());
-+            windowInfo.setIsKeepAbove(w->isKeepAbove());
-+            //! Window Abilities
-+            windowInfo.setIsClosable(w->isCloseable());
-+            windowInfo.setIsFullScreenable(w->isFullscreenable());
-+            windowInfo.setIsMaximizable(w->isMaximizeable());
-+            windowInfo.setIsMinimizable(w->isMinimizeable());
-+            windowInfo.setIsMovable(w->isMovable());
-+            windowInfo.setIsResizable(w->isResizable());
-+            windowInfo.setIsShadeable(w->isShadeable());
-+            windowInfo.setIsVirtualDesktopsChangeable(w->isVirtualDesktopChangeable());
-+        }
-     }
-     else
-     {
-@@ -933,7 +950,6 @@ void UkuiWaylandInterface::handleGlobal(void *data, wl_registry *registry, uint3
-             {
-                 if (!m_windows.contains(window->uuid()))
-                 {
--                    qDebug()<<"OOOOOOOOOOOOOOOOOOOOOOOOOOO"<<window->title()<<" "<<window->uuid();
-                     m_windows.insert(window->uuid(), this->requestInfo(window->uuid()));
-                 }
-                 emit windowAdded(window->uuid());
-diff --git a/kysdk-waylandhelper/src/windowmanager/windowinfo.h b/kysdk-waylandhelper/src/windowmanager/windowinfo.h
-index 315dffe..7081a95 100644
---- a/kysdk-waylandhelper/src/windowmanager/windowinfo.h
-+++ b/kysdk-waylandhelper/src/windowmanager/windowinfo.h
-@@ -143,14 +143,6 @@ public:
-     inline bool isDemandAttention() const noexcept;
-     inline void setIsDemandAttention(bool demandAttention) noexcept;
- 
--    inline QString windowTitle() const noexcept;
--    inline void setWindowTitle(const QString& title) noexcept;
--
--    inline quint32 windowPid() const noexcept;
--    inline void setWindowPid(quint32 pid) noexcept;
--
--    bool operator ==(const WindowInfo& info) const;
--
- 
- private:
-     void* m_handle;
-@@ -189,8 +181,6 @@ private:
- 
-     QString m_appName;
-     QString m_display;
--    QString m_title;
--    quint32 m_pid;
- 
-     QIcon m_icon;
- 
-@@ -408,34 +398,6 @@ void WindowInfo::setIsDemandAttention(bool demandAttention) noexcept
-     m_isDemandAttention = demandAttention;
- }
- 
--inline QString WindowInfo::windowTitle() const noexcept
--{
--    return m_title;
--}
--
--inline void WindowInfo::setWindowTitle(const QString& title) noexcept
--{
--    m_title = title;
--}
--
--inline quint32 WindowInfo::windowPid() const noexcept
--{
--    return m_pid;
--}
--
--inline void WindowInfo::setWindowPid(quint32 pid) noexcept
--{
--    m_pid = pid;
--}
--
--inline bool WindowInfo::operator ==(const WindowInfo &info) const
--{
--    if(this->m_wid == info.wid())
--        return true;
--    else
--        return false;
--}
--
- bool WindowInfo::isMovable() const noexcept
- {
-     return m_isMovable;
-diff --git a/kysdk-waylandhelper/src/windowmanager/windowmanager.cpp b/kysdk-waylandhelper/src/windowmanager/windowmanager.cpp
-index 4c5a588..3f4adbf 100644
---- a/kysdk-waylandhelper/src/windowmanager/windowmanager.cpp
-+++ b/kysdk-waylandhelper/src/windowmanager/windowmanager.cpp
-@@ -386,21 +386,3 @@ void WindowManager::setIconName(QWindow *window, const QString &iconName)
-         return ;
-     return m_wm->winInterface()->setIconName(window, iconName);
- }
--
--QList<WindowId> WindowManager::getWindowIdByPid(const quint32 pid)
--{
--    QList<WindowId> list;
--    self();
--    if(!m_wm)
--        return list;
--    return m_wm->winInterface()->getWindowIdByPid(pid);
--}
--
--QList<WindowId> WindowManager::getWindowIdByTitle(const QString &title)
--{
--    QList<WindowId> list;
--    self();
--    if(!m_wm)
--        return list;
--    return m_wm->winInterface()->getWindowIdByTitle(title);
--}
-diff --git a/kysdk-waylandhelper/src/windowmanager/windowmanager.h b/kysdk-waylandhelper/src/windowmanager/windowmanager.h
-index 168e311..e482625 100644
---- a/kysdk-waylandhelper/src/windowmanager/windowmanager.h
-+++ b/kysdk-waylandhelper/src/windowmanager/windowmanager.h
-@@ -351,22 +351,6 @@ public:
-      */
-     static void setIconName(QWindow *window, const QString& iconName);
- 
--    /**
--     * @brief getWindowIdByPid
--     * @since 2.5
--     * @param pid
--     * @return
--     */
--    static QList<WindowId> getWindowIdByPid(const  quint32 pid);
--
--    /**
--     * @brief getWindowIdByTitle
--     * @since 2.5
--     * @param title
--     * @return
--     */
--    static QList<WindowId> getWindowIdByTitle(const QString& title);
--
- Q_SIGNALS:
-      /**
-       * @brief 窗口添加信号
-diff --git a/kysdk-waylandhelper/src/windowmanager/xcbinterface.cpp b/kysdk-waylandhelper/src/windowmanager/xcbinterface.cpp
-index db4d2bb..678e536 100644
---- a/kysdk-waylandhelper/src/windowmanager/xcbinterface.cpp
-+++ b/kysdk-waylandhelper/src/windowmanager/xcbinterface.cpp
-@@ -281,8 +281,6 @@ WindowInfo XcbInterface::requestInfo(WindowId wid)
-         //! Window Abilities
- 
-         windowInfo.setDesktops({QString::number(winfo.desktop())});
--        windowInfo.setWindowPid(winfo.pid());
--        windowInfo.setWindowTitle(winfo.name());
-     }
-     else if (m_desktopId == wid)
-     {
-diff --git a/kysdk-waylandhelper/test/testWindowManager/widget.cpp b/kysdk-waylandhelper/test/testWindowManager/widget.cpp
-index c407ad1..3e16c1e 100644
---- a/kysdk-waylandhelper/test/testWindowManager/widget.cpp
-+++ b/kysdk-waylandhelper/test/testWindowManager/widget.cpp
-@@ -290,26 +290,9 @@ void Widget::initUI()
-     layout11->addWidget(m_unsetIconNameBtn);
-     layout11->addStretch();
-     vLayout3->addLayout(layout11);
--
--
--    m_getWidByPidEdit = new QLineEdit(this);
--    m_getWidByPidEdit->setPlaceholderText("根据pid查询窗口id");
--    m_getWidByPidBtn = new QPushButton("查询");
--
--    m_getWidByTitleEdit = new QLineEdit(this);
--    m_getWidByTitleEdit->setPlaceholderText("根据窗口标题查询窗口id");
--    m_getWidBytitleBtn = new QPushButton("查询");
--
--    QHBoxLayout* layout12 = new QHBoxLayout();
--    layout12->addWidget(m_getWidByPidEdit);
--    layout12->addWidget(m_getWidByPidBtn);
--    layout12->addStretch();
--    layout12->addWidget(m_getWidByTitleEdit);
--    layout12->addWidget(m_getWidBytitleBtn);
--    vLayout3->addLayout(layout12);
--
-     box5->setLayout(vLayout3);
- 
-+
-     mainLayout->addWidget(m_label);
-     mainLayout->addLayout(hLayout1);
-     mainLayout->addWidget(label);
-@@ -331,15 +314,6 @@ void Widget::initUI()
- 
- void Widget::initConnection()
- {   
--    connect(m_getWidByPidBtn,&QPushButton::clicked,this,[=](){
--        quint32 pid = m_getWidByPidEdit->text().toUInt();
--        qDebug()<<kdk::WindowManager::getWindowIdByPid(pid);
--    });
--
--    connect(m_getWidBytitleBtn,&QPushButton::clicked,this,[=](){
--        qDebug()<<kdk::WindowManager::getWindowIdByTitle(m_getWidByTitleEdit->text());
--    });
--
-     connect(m_setIconNameBtn,&::QPushButton::clicked, this, [=](){
-         WindowManager::setIconName(m_subWidget->windowHandle(), "kylin-music");
-     });
-diff --git a/kysdk-waylandhelper/test/testWindowManager/widget.h b/kysdk-waylandhelper/test/testWindowManager/widget.h
-index fac6d58..2c35cda 100644
---- a/kysdk-waylandhelper/test/testWindowManager/widget.h
-+++ b/kysdk-waylandhelper/test/testWindowManager/widget.h
-@@ -94,10 +94,5 @@ private:
-     QSpinBox *m_yOffset;
-     QPushButton* m_setIconNameBtn;
-     QPushButton* m_unsetIconNameBtn;
--
--    QPushButton* m_getWidByPidBtn;
--    QLineEdit* m_getWidByPidEdit;
--    QPushButton* m_getWidBytitleBtn;
--    QLineEdit* m_getWidByTitleEdit;
- };
- #endif // WIDGET_H
diff -Nru libkysdk-applications-2.5.1.0/debian/patches/0026-add-interface-of-getting-output-info.patch libkysdk-applications-2.5.2.0/debian/patches/0026-add-interface-of-getting-output-info.patch
--- libkysdk-applications-2.5.1.0/debian/patches/0026-add-interface-of-getting-output-info.patch	2024-07-31 11:09:38.000000000 +0800
+++ libkysdk-applications-2.5.2.0/debian/patches/0026-add-interface-of-getting-output-info.patch	1970-01-01 08:00:00.000000000 +0800
@@ -1,777 +0,0 @@
-From: sunzhen <sunzhen1@kylinos.cn>
-Date: Fri, 12 Jul 2024 15:04:04 +0800
-Subject: add interface of getting output info
-
----
- kysdk-waylandhelper/kysdk-waylandhelper.pro        |  18 ++-
- .../src/windowmanager/abstractinterface.cpp        |  16 +++
- .../src/windowmanager/abstractinterface.h          |   4 +
- .../src/windowmanager/outputinfo.cpp               |  55 ++++++++
- kysdk-waylandhelper/src/windowmanager/outputinfo.h |  27 ++++
- .../src/windowmanager/outputusableareamanager.cpp  | 146 +++++++++++++++++++++
- .../src/windowmanager/outputusableareamanager.h    |  41 ++++++
- .../src/windowmanager/ukuishell.cpp                |  71 +++++++++-
- kysdk-waylandhelper/src/windowmanager/ukuishell.h  |   8 +-
- .../src/windowmanager/ukuiwaylandinterface.cpp     |  34 +++++
- .../src/windowmanager/ukuiwaylandinterface.h       |   6 +
- .../src/windowmanager/windowmanager.cpp            |  25 ++++
- .../src/windowmanager/windowmanager.h              |  21 +++
- .../test/testWindowManager/widget.cpp              |  24 ++++
- .../test/testWindowManager/widget.h                |   2 +
- 15 files changed, 493 insertions(+), 5 deletions(-)
- create mode 100644 kysdk-waylandhelper/src/windowmanager/outputinfo.cpp
- create mode 100644 kysdk-waylandhelper/src/windowmanager/outputinfo.h
- create mode 100644 kysdk-waylandhelper/src/windowmanager/outputusableareamanager.cpp
- create mode 100644 kysdk-waylandhelper/src/windowmanager/outputusableareamanager.h
-
-diff --git a/kysdk-waylandhelper/kysdk-waylandhelper.pro b/kysdk-waylandhelper/kysdk-waylandhelper.pro
-index 1ac5d0b..9b257d8 100644
---- a/kysdk-waylandhelper/kysdk-waylandhelper.pro
-+++ b/kysdk-waylandhelper/kysdk-waylandhelper.pro
-@@ -33,6 +33,9 @@ system(wayland-scanner private-code /usr/share/wayland-protocols/staging/ext-idl
- system(wayland-scanner client-header /usr/share/kylin-wayland-protocols/ukui-blur.xml src/blurmanager/ukui-blur-manager-client-protocol.h)
- system(wayland-scanner private-code /usr/share/kylin-wayland-protocols/ukui-blur.xml src/blurmanager/ukui-blur-manager-core-protocol.c)
- 
-+system(wayland-scanner client-header /usr/share/kylin-wayland-protocols/kywc-output-usable-area-v1.xml src/windowmanager/kywc-output-usable-area-v1-protocol.h)
-+system(wayland-scanner private-code /usr/share/kylin-wayland-protocols/kywc-output-usable-area-v1.xml src/windowmanager/kywc-output-usable-area-v1-protocol.c)
-+
- SOURCES += \
-     src/ukuistylehelper/ukui-decoration-core.c \
-     src/ukuistylehelper/ukui-decoration-manager.cpp \
-@@ -42,6 +45,8 @@ SOURCES += \
-     src/waylandhelper.cpp \
-     src/windowmanager/abstractinterface.cpp \
-     src/windowmanager/kdewaylandinterface.cpp \
-+    src/windowmanager/outputinfo.cpp \
-+    src/windowmanager/outputusableareamanager.cpp \
-     src/windowmanager/ukuiwaylandinterface.cpp \
-     src/windowmanager/xcbinterface.cpp \
-     src/windowmanager/ukuiwindowmanagement.cpp \
-@@ -60,7 +65,8 @@ SOURCES += \
-     src/blurmanager/blurmanager.cpp \
-     src/blurmanager/ukui-blur-manager-core-protocol.c \
-     src/blurmanager/blurwaylandinterface.cpp \
--    src/blurmanager/blurxcbinterface.cpp
-+    src/blurmanager/blurxcbinterface.cpp \
-+    src/windowmanager/kywc-output-usable-area-v1-protocol.c
- 
- 
- HEADERS += \
-@@ -72,6 +78,8 @@ HEADERS += \
-     src/waylandhelper.h \
-     src/windowmanager/abstractinterface.h \
-     src/windowmanager/kdewaylandinterface.h \
-+    src/windowmanager/outputinfo.h \
-+    src/windowmanager/outputusableareamanager.h \
-     src/windowmanager/xcbinterface.h \
-     src/windowmanager/ukuiwaylandinterface.h \
-     src/windowmanager/ukuiwaylandpointer.h \
-@@ -94,7 +102,8 @@ HEADERS += \
-     src/blurmanager/ukui-blur-manager-client-protocol.h\
-     src/blurmanager/blurabstractinterface.h \
-     src/blurmanager/blurwaylandinterface.h \
--    src/blurmanager/blurxcbinterface.h
-+    src/blurmanager/blurxcbinterface.h \
-+    src/windowmanager/kywc-output-usable-area-v1-protocol.h
- 
- # Default rules for deployment.
- headers.files = src/kysdk-waylandhelper_global.h \
-@@ -119,7 +128,10 @@ wm_headers.files = src/windowmanager/abstractinterface.h \
-     src/windowmanager/ukui-window-management-client-protocol.h \
-     src/windowmanager/wayland-xdg-activation-v1-client-protocol.h \
-     src/windowmanager/wayland-ext-idle-notify-v1-client-protocol.h \
--    src/windowmanager/kyatoms_p.h
-+    src/windowmanager/kyatoms_p.h \
-+    src/windowmanager/kywc-output-usable-area-v1-protocol.h \
-+    src/windowmanager/outputinfo.h \
-+    src/windowmanager/outputusableareamanager.h 
-                     
- wm_headers.path = /usr/include/kysdk/applications/windowmanager/
- 
-diff --git a/kysdk-waylandhelper/src/windowmanager/abstractinterface.cpp b/kysdk-waylandhelper/src/windowmanager/abstractinterface.cpp
-index 24eefa6..d2c4f1d 100644
---- a/kysdk-waylandhelper/src/windowmanager/abstractinterface.cpp
-+++ b/kysdk-waylandhelper/src/windowmanager/abstractinterface.cpp
-@@ -197,3 +197,19 @@ void AbstractInterface::setIconName(QWindow *window, const QString& iconName)
-     Q_UNUSED(window)
-     Q_UNUSED(iconName)
- }
-+
-+QString AbstractInterface::currentSeatName()
-+{
-+    return QString();
-+}
-+
-+QString AbstractInterface::currentOutputName()
-+{
-+    return QString();
-+}
-+
-+QList<OutputInfo *> AbstractInterface::outputsInfo()
-+{
-+    QList<OutputInfo *> list;
-+    return list;
-+}
-diff --git a/kysdk-waylandhelper/src/windowmanager/abstractinterface.h b/kysdk-waylandhelper/src/windowmanager/abstractinterface.h
-index 0977666..afbecfc 100644
---- a/kysdk-waylandhelper/src/windowmanager/abstractinterface.h
-+++ b/kysdk-waylandhelper/src/windowmanager/abstractinterface.h
-@@ -27,6 +27,7 @@
- #include <QVariant>
- #include <QMap>
- #include "windowinfo.h"
-+#include "outputinfo.h"
- #include "netwm.h"
- 
- namespace kdk
-@@ -117,6 +118,9 @@ public:
-     virtual void setOpenUnderCursor(QWindow *window);
-     virtual void setOpenUnderCursor(QWindow *window, int x, int y);
-     virtual void setIconName(QWindow *window, const QString& iconName);
-+    virtual QString currentSeatName();
-+    virtual QString currentOutputName();
-+    virtual QList<OutputInfo*> outputsInfo();
- 
- Q_SIGNALS:
-     void activeWindowChanged(WindowId wid);
-diff --git a/kysdk-waylandhelper/src/windowmanager/outputinfo.cpp b/kysdk-waylandhelper/src/windowmanager/outputinfo.cpp
-new file mode 100644
-index 0000000..9e9d236
---- /dev/null
-+++ b/kysdk-waylandhelper/src/windowmanager/outputinfo.cpp
-@@ -0,0 +1,55 @@
-+#include "outputinfo.h"
-+#include "outputusableareamanager.h"
-+
-+class Q_DECL_HIDDEN OutputInfo::Private
-+{
-+public:
-+    Private(OutputInfo *q);
-+    ~Private();
-+
-+    QRect m_usableArea;
-+    QString m_name;
-+    OutputInfo* q;
-+};
-+
-+OutputInfo::OutputInfo(QObject *parent)
-+    :QObject(parent),
-+      d(new Private(this))
-+{
-+
-+}
-+
-+void OutputInfo::setOutputName(const QString &outputName)
-+{
-+    d->m_name = outputName;
-+}
-+
-+void OutputInfo::setUsableArea(const QRect &usableArea)
-+{
-+    d->m_usableArea = usableArea;
-+}
-+
-+
-+OutputInfo::~OutputInfo()
-+{
-+
-+}
-+
-+QString OutputInfo::outputName()
-+{
-+    return d->m_name;
-+}
-+
-+QRect OutputInfo::usableArea()
-+{
-+    return d->m_usableArea;
-+}
-+
-+OutputInfo::Private::Private(OutputInfo *q)
-+    :q(q)
-+{
-+}
-+
-+OutputInfo::Private::~Private()
-+{
-+}
-diff --git a/kysdk-waylandhelper/src/windowmanager/outputinfo.h b/kysdk-waylandhelper/src/windowmanager/outputinfo.h
-new file mode 100644
-index 0000000..8911d46
---- /dev/null
-+++ b/kysdk-waylandhelper/src/windowmanager/outputinfo.h
-@@ -0,0 +1,27 @@
-+#ifndef OUTPUTINFO_H
-+#define OUTPUTINFO_H
-+
-+#include <QObject>
-+#include <QRect>
-+
-+class OutputInfo: public QObject
-+{
-+    Q_OBJECT
-+public:
-+    ~OutputInfo();
-+
-+    QString outputName();
-+    QRect usableArea();
-+
-+
-+private:
-+    explicit OutputInfo(QObject *parent = nullptr);
-+    void setOutputName(const QString& outputName);
-+    void setUsableArea(const QRect& usableArea);
-+
-+    friend class OutputUsableAreaManager;
-+    class Private;
-+    QScopedPointer<Private> d;
-+};
-+
-+#endif // OUTPUTINFO_H
-diff --git a/kysdk-waylandhelper/src/windowmanager/outputusableareamanager.cpp b/kysdk-waylandhelper/src/windowmanager/outputusableareamanager.cpp
-new file mode 100644
-index 0000000..2fc47c1
---- /dev/null
-+++ b/kysdk-waylandhelper/src/windowmanager/outputusableareamanager.cpp
-@@ -0,0 +1,146 @@
-+#include "outputusableareamanager.h"
-+#include "ukuiwaylandpointer.h"
-+#include "outputinfo.h"
-+
-+class Q_DECL_HIDDEN OutputUsableAreaManager::Private
-+{
-+public:
-+    Private(OutputUsableAreaManager *q);
-+    ~Private();
-+
-+    UkuiWaylandPointer<kywc_output_usable_area_manager_v1, kywc_output_usable_area_manager_v1_destroy> m_manager;
-+    OutputUsableAreaManager *q;
-+    static struct kywc_output_usable_area_manager_v1_listener s_listener;
-+    QList<OutputInfo*> m_outputsInfo;
-+    QStringList m_outputNames;
-+    bool m_outputsInfoReady = false;
-+
-+    void init_listener();
-+
-+    static void usableAreaCallback(void *data,
-+                struct kywc_output_usable_area_manager_v1 *kywc_output_usable_area_manager_v1,
-+                const char *name,
-+                int32_t x,
-+                int32_t y,
-+                int32_t width,
-+                int32_t height);
-+
-+    static void doneCallback(void *data,
-+             struct kywc_output_usable_area_manager_v1 *kywc_output_usable_area_manager_v1);
-+};
-+
-+kywc_output_usable_area_manager_v1_listener OutputUsableAreaManager::Private::s_listener = {
-+    .usable_area = usableAreaCallback,
-+    .done = doneCallback
-+};
-+
-+OutputUsableAreaManager::OutputUsableAreaManager(QObject *parent)
-+    :QObject(parent),
-+     d(new Private(this))
-+{
-+}
-+
-+OutputUsableAreaManager::~OutputUsableAreaManager()
-+{
-+}
-+
-+bool OutputUsableAreaManager::isValid() const
-+{
-+    return d->m_manager.isValid();
-+}
-+
-+void OutputUsableAreaManager::release()
-+{
-+    d->m_manager.release();
-+}
-+
-+void OutputUsableAreaManager::destroy()
-+{
-+    d->m_manager.destroy();
-+}
-+
-+void OutputUsableAreaManager::setup(kywc_output_usable_area_manager_v1 *manager)
-+{
-+    d->m_manager.setup(manager);
-+    d->init_listener();
-+}
-+
-+OutputUsableAreaManager::operator kywc_output_usable_area_manager_v1 *()
-+{
-+    return d->m_manager;
-+}
-+
-+bool OutputUsableAreaManager::isOutputsInfoReady()
-+{
-+    return d->m_outputsInfoReady;
-+}
-+
-+QList<OutputInfo*> OutputUsableAreaManager::outputsInfo()
-+{
-+    return d->m_outputsInfo;
-+}
-+
-+
-+OutputUsableAreaManager::operator kywc_output_usable_area_manager_v1 *() const
-+{
-+    return d->m_manager;
-+}
-+
-+OutputUsableAreaManager::Private::Private(OutputUsableAreaManager *q)
-+    :q(q)
-+{
-+}
-+
-+OutputUsableAreaManager::Private::~Private()
-+{
-+}
-+
-+void OutputUsableAreaManager::Private::init_listener()
-+{
-+    kywc_output_usable_area_manager_v1_add_listener(m_manager, &s_listener, this);
-+}
-+
-+void OutputUsableAreaManager::Private::usableAreaCallback(void *data, kywc_output_usable_area_manager_v1 *kywc_output_usable_area_manager_v1, const char *name, int32_t x, int32_t y, int32_t width, int32_t height)
-+{
-+    Q_UNUSED(kywc_output_usable_area_manager_v1)
-+    auto manager = reinterpret_cast<OutputUsableAreaManager::Private *>(data);
-+    if(!manager)
-+        return;
-+
-+    QString outputName = QString::fromUtf8(name);
-+    QRect usableArea(x, y, width, height);
-+
-+    OutputInfo* info = new OutputInfo(manager->q);
-+    info->setOutputName(outputName);
-+    info->setUsableArea(usableArea);
-+
-+    if(manager->m_outputNames.contains(outputName))
-+    {
-+        //update
-+        for(int i = 0 ; i < manager->m_outputsInfo.count() ; i++)
-+        {
-+            if(manager->m_outputsInfo[i]->outputName() == outputName)
-+            {
-+                manager->m_outputsInfo.replace(i, info);
-+                break;
-+            }
-+        }
-+    }
-+    else
-+    {
-+        //append
-+        manager->m_outputsInfo.append(info);
-+        manager->m_outputNames.append(outputName);
-+    }
-+}
-+
-+void OutputUsableAreaManager::Private::doneCallback(void *data, kywc_output_usable_area_manager_v1 *kywc_output_usable_area_manager_v1)
-+{
-+    Q_UNUSED(kywc_output_usable_area_manager_v1)
-+
-+    auto manager = reinterpret_cast<OutputUsableAreaManager::Private *>(data);
-+    if(!manager)
-+        return;
-+    manager->m_outputsInfoReady = true;
-+    Q_EMIT manager->q->outputsInfoReady();
-+}
-diff --git a/kysdk-waylandhelper/src/windowmanager/outputusableareamanager.h b/kysdk-waylandhelper/src/windowmanager/outputusableareamanager.h
-new file mode 100644
-index 0000000..7a5419b
---- /dev/null
-+++ b/kysdk-waylandhelper/src/windowmanager/outputusableareamanager.h
-@@ -0,0 +1,41 @@
-+#ifndef OUTPUTUSABLEAREAMANAGER_H
-+#define OUTPUTUSABLEAREAMANAGER_H
-+
-+#include <QObject>
-+#include <QRect>
-+#include "kywc-output-usable-area-v1-protocol.h"
-+
-+class OutputInfo;
-+class OutputUsableAreaManager : public QObject
-+{
-+    Q_OBJECT
-+public:
-+    explicit OutputUsableAreaManager(QObject *parent = nullptr);
-+    ~OutputUsableAreaManager();
-+
-+    bool isValid() const;
-+
-+    void release();
-+
-+    void destroy();
-+
-+    void setup(kywc_output_usable_area_manager_v1 *manager);
-+
-+    operator kywc_output_usable_area_manager_v1 *();
-+    operator kywc_output_usable_area_manager_v1 *() const;
-+
-+    QList<OutputInfo*> outputsInfo();
-+
-+    bool isOutputsInfoReady();
-+
-+Q_SIGNALS:
-+
-+    void outputsInfoReady();
-+
-+private:
-+    class Private;
-+    QScopedPointer<Private> d;
-+
-+};
-+
-+#endif // OUTPUTUSABLEAREAMANAGER_H
-diff --git a/kysdk-waylandhelper/src/windowmanager/ukuishell.cpp b/kysdk-waylandhelper/src/windowmanager/ukuishell.cpp
-index 11eb3a7..674cf89 100644
---- a/kysdk-waylandhelper/src/windowmanager/ukuishell.cpp
-+++ b/kysdk-waylandhelper/src/windowmanager/ukuishell.cpp
-@@ -4,8 +4,25 @@
- class Q_DECL_HIDDEN UkuiShell::Private
- {
- public:
-+    Private(UkuiShell *q);
-+
-     UkuiWaylandPointer<ukui_shell, ukui_shell_destroy> shell;
-     EventQueue *queue = nullptr;
-+    UkuiShell *q;
-+    QString m_seatName;
-+    QString m_outputName;
-+    bool m_outputForSeatReady = false;
-+    void init_listener();
-+
-+    static struct ukui_shell_listener s_listener;
-+    static void outputForSeatCallback(void *data, struct ukui_shell *ukui_shell, const char *output_name, const char *seat_name);
-+    static void doneCallback(void *data, struct ukui_shell *ukui_shell);
-+
-+};
-+
-+ukui_shell_listener UkuiShell::Private::s_listener = {
-+    .output_for_seat = outputForSeatCallback,
-+    .done = doneCallback
- };
- 
- class Q_DECL_HIDDEN UkuiShellSurface::Private
-@@ -32,7 +49,7 @@ QVector<UkuiShellSurface::Private *> UkuiShellSurface::Private::s_surfaces;
- 
- UkuiShell::UkuiShell(QObject *parent)
-     : QObject(parent)
--    , d(new Private)
-+    , d(new Private(this))
- {
- }
- 
-@@ -64,6 +81,8 @@ void UkuiShell::setup(ukui_shell *shell)
-     Q_ASSERT(!d->shell);
-     Q_ASSERT(shell);
-     d->shell.setup(shell);
-+    d->init_listener();
-+
- }
- 
- void UkuiShell::setEventQueue(EventQueue *queue)
-@@ -76,6 +95,27 @@ EventQueue *UkuiShell::eventQueue()
-     return d->queue;
- }
- 
-+QString UkuiShell::seatName()
-+{
-+    if(d->m_outputForSeatReady)
-+        return d->m_seatName;
-+    else
-+        return QString();
-+}
-+
-+QString UkuiShell::outputName()
-+{
-+    if(d->m_outputForSeatReady)
-+        return d->m_outputName;
-+    else
-+        return QString();
-+}
-+
-+bool UkuiShell::isOutputForSeatReady()
-+{
-+    return d->m_outputForSeatReady;
-+}
-+
- UkuiShellSurface *UkuiShell::createSurface(wl_surface *surface, QObject *parent)
- {
-     Q_ASSERT(isValid());
-@@ -354,3 +394,32 @@ void UkuiShellSurface::setIconName(const QString& iconName)
-         ukui_surface_set_icon(d->surface, iconName.toStdString().c_str());
-     }
- }
-+
-+UkuiShell::Private::Private(UkuiShell *q)
-+    :q(q)
-+{
-+
-+}
-+
-+void UkuiShell::Private::init_listener()
-+{
-+    ukui_shell_add_listener(shell, &s_listener, this);
-+}
-+
-+void UkuiShell::Private::outputForSeatCallback(void *data, ukui_shell *ukui_shell, const char *output_name, const char *seat_name)
-+{
-+    auto ukuiShell = reinterpret_cast<UkuiShell::Private *>(data);
-+    if(ukuiShell->shell != ukui_shell)
-+        return;
-+    ukuiShell->m_outputName = QString::fromUtf8(output_name);
-+    ukuiShell->m_seatName = QString::fromUtf8(seat_name);
-+}
-+
-+void UkuiShell::Private::doneCallback(void *data, ukui_shell *ukui_shell)
-+{
-+    auto ukuiShell = reinterpret_cast<UkuiShell::Private *>(data);
-+    if(ukuiShell->shell != ukui_shell)
-+        return;
-+    ukuiShell->m_outputForSeatReady = true;
-+    Q_EMIT ukuiShell->q->outputForSeatReady();
-+}
-diff --git a/kysdk-waylandhelper/src/windowmanager/ukuishell.h b/kysdk-waylandhelper/src/windowmanager/ukuishell.h
-index 6136a10..e02a0e9 100644
---- a/kysdk-waylandhelper/src/windowmanager/ukuishell.h
-+++ b/kysdk-waylandhelper/src/windowmanager/ukuishell.h
-@@ -33,11 +33,15 @@ public:
- 
-     void setup(ukui_shell *shell);
- 
--
-     void setEventQueue(EventQueue *queue);
- 
-     EventQueue *eventQueue();
- 
-+    QString seatName();
-+
-+    QString outputName();
-+
-+    bool isOutputForSeatReady();
- 
-     UkuiShellSurface *createSurface(wl_surface *surface, QObject *parent = nullptr);
- 
-@@ -54,6 +58,8 @@ Q_SIGNALS:
- 
-     void removed();
- 
-+    void outputForSeatReady();
-+
- private:
-     class Private;
-     QScopedPointer<Private> d;
-diff --git a/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.cpp b/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.cpp
-index 6bb7e7f..91b6151 100644
---- a/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.cpp
-+++ b/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.cpp
-@@ -6,6 +6,7 @@
- #include "ukui-shell-client-protocol.h"
- #include "wayland-xdg-activation-v1-client-protocol.h"
- #include "wayland-ext-idle-notify-v1-client-protocol.h"
-+#include "kywc-output-usable-area-v1-protocol.h"
- 
- void handle_global(void *data,struct wl_registry *wl_registry,uint32_t name, const char *interface,  uint32_t version)
- {
-@@ -688,6 +689,29 @@ void UkuiWaylandInterface::setIconName(QWindow *window, const QString& iconName)
-     window->installEventFilter(this);
- }
- 
-+QString UkuiWaylandInterface::currentSeatName()
-+{
-+    if (!m_ukuiShell)
-+        return QString();
-+    return m_ukuiShell->seatName();
-+}
-+
-+QString UkuiWaylandInterface::currentOutputName()
-+{
-+    if (!m_ukuiShell)
-+        return QString();
-+    return m_ukuiShell->outputName();
-+}
-+
-+QList<OutputInfo *> UkuiWaylandInterface::outputsInfo()
-+{
-+    QList<OutputInfo *> list;
-+    if(!m_outputUsableAreaManager || !m_outputUsableAreaManager->isOutputsInfoReady())
-+        return list;
-+    else
-+        return m_outputUsableAreaManager->outputsInfo();
-+}
-+
- void UkuiWaylandInterface::setGeometry(QWindow *window, const QRect &rect)
- {
-     if(!window)
-@@ -894,6 +918,16 @@ UkuiWindow *UkuiWaylandInterface::windowFor(WindowId wid)
- 
- void UkuiWaylandInterface::handleGlobal(void *data, wl_registry *registry, uint32_t name, const char *interface, uint32_t version)
- {
-+    if(strcmp(interface, kywc_output_usable_area_manager_v1_interface.name) == 0)
-+    {
-+        kywc_output_usable_area_manager_v1* output_usable_area_manager = (kywc_output_usable_area_manager_v1*)wl_registry_bind(registry, name, &kywc_output_usable_area_manager_v1_interface, version);
-+        if(output_usable_area_manager)
-+        {
-+            m_outputUsableAreaManager = new OutputUsableAreaManager(this);
-+            m_outputUsableAreaManager->setup(output_usable_area_manager);
-+        }
-+    }
-+
-     if(strcmp(interface, ext_idle_notifier_v1_interface.name) == 0)
-     {
-         ext_idle_notifier_v1* notifier = (ext_idle_notifier_v1*)wl_registry_bind(registry, name, &ext_idle_notifier_v1_interface, version);
-diff --git a/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.h b/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.h
-index 601c2b6..0f6b3e8 100644
---- a/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.h
-+++ b/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.h
-@@ -30,6 +30,7 @@
- #include "ukuiwindowmanagement.h"
- #include "xdgactivation.h"
- #include "extidlenotifier.h"
-+#include "outputusableareamanager.h"
- 
- #include "abstractinterface.h"
- #include "kdewaylandinterface.h"
-@@ -102,6 +103,10 @@ public:
-     void setOpenUnderCursor(QWindow *window, int x, int y) override;
-     void setIconName(QWindow *window, const QString& iconName) override;
- 
-+    QString currentSeatName() override;
-+    QString currentOutputName() override;
-+    QList<OutputInfo*> outputsInfo() override;
-+
- protected:
-     bool eventFilter(QObject *obj, QEvent *ev) override;
- 
-@@ -125,6 +130,7 @@ private:
-     XdgActivation *m_xdgActivation = nullptr;
-     XdgActivationToken * m_xdgActivationToken = nullptr;
-     QMap<QWindow*,UkuiShellSurface*>m_ukuiShellSurfaces;
-+    OutputUsableAreaManager* m_outputUsableAreaManager = nullptr;
- };
- 
- #endif // UKUIWAYLANDINTERFACE_H
-diff --git a/kysdk-waylandhelper/src/windowmanager/windowmanager.cpp b/kysdk-waylandhelper/src/windowmanager/windowmanager.cpp
-index 3f4adbf..c8a2876 100644
---- a/kysdk-waylandhelper/src/windowmanager/windowmanager.cpp
-+++ b/kysdk-waylandhelper/src/windowmanager/windowmanager.cpp
-@@ -386,3 +386,28 @@ void WindowManager::setIconName(QWindow *window, const QString &iconName)
-         return ;
-     return m_wm->winInterface()->setIconName(window, iconName);
- }
-+
-+QString WindowManager::currentSeatName()
-+{
-+    self();
-+    if(!m_wm)
-+        return QString();
-+    return m_wm->winInterface()->currentSeatName();
-+}
-+
-+QString WindowManager::currentOutputName()
-+{
-+    self();
-+    if(!m_wm)
-+        return QString();
-+    return m_wm->winInterface()->currentOutputName();
-+}
-+
-+QList<OutputInfo *> WindowManager::outputsInfo()
-+{
-+    QList<OutputInfo *> list;
-+    self();
-+    if(!m_wm)
-+        return list;
-+    return m_wm->winInterface()->outputsInfo();
-+}
-diff --git a/kysdk-waylandhelper/src/windowmanager/windowmanager.h b/kysdk-waylandhelper/src/windowmanager/windowmanager.h
-index e482625..99e792a 100644
---- a/kysdk-waylandhelper/src/windowmanager/windowmanager.h
-+++ b/kysdk-waylandhelper/src/windowmanager/windowmanager.h
-@@ -351,6 +351,27 @@ public:
-      */
-     static void setIconName(QWindow *window, const QString& iconName);
- 
-+    /**
-+     * @brief currentSeatName
-+     * @since 2.5
-+     * @return
-+     */
-+    static QString currentSeatName();
-+
-+    /**
-+     * @brief currentOutputName
-+     * @since 2.5
-+     * @return
-+     */
-+    static QString currentOutputName();
-+
-+    /**
-+     * @brief outputsInfo
-+     * @since 2.5
-+     * @return
-+     */
-+    static QList<OutputInfo*> outputsInfo();
-+
- Q_SIGNALS:
-      /**
-       * @brief 窗口添加信号
-diff --git a/kysdk-waylandhelper/test/testWindowManager/widget.cpp b/kysdk-waylandhelper/test/testWindowManager/widget.cpp
-index 3e16c1e..fac735b 100644
---- a/kysdk-waylandhelper/test/testWindowManager/widget.cpp
-+++ b/kysdk-waylandhelper/test/testWindowManager/widget.cpp
-@@ -290,6 +290,14 @@ void Widget::initUI()
-     layout11->addWidget(m_unsetIconNameBtn);
-     layout11->addStretch();
-     vLayout3->addLayout(layout11);
-+
-+    QHBoxLayout* layout12 = new QHBoxLayout();
-+    m_getOutputForSeatBtn = new QPushButton(tr("GetOutputForSear"), this);
-+    m_getOutputsInfoBtn = new QPushButton(tr("GetOutputsInfo"), this);
-+    layout12->addWidget(m_getOutputForSeatBtn);
-+    layout12->addWidget(m_getOutputsInfoBtn);
-+    layout12->addStretch();
-+    vLayout3->addLayout(layout12);
-     box5->setLayout(vLayout3);
- 
- 
-@@ -314,6 +322,22 @@ void Widget::initUI()
- 
- void Widget::initConnection()
- {   
-+    connect(m_getOutputForSeatBtn,&::QPushButton::clicked, this, [=](){
-+        qDebug() << "current output name:" << WindowManager::currentOutputName();
-+        qDebug() << "current seat name:" << WindowManager::currentSeatName();
-+    });
-+
-+    connect(m_getOutputsInfoBtn,&::QPushButton::clicked, this, [=](){
-+        QList<OutputInfo*> infos = WindowManager::outputsInfo();
-+        for(auto info : infos)
-+        {
-+            qDebug() << "output name:" << info->outputName();
-+            qDebug() << "output usable area:" << info->usableArea();;
-+        }
-+    });
-+    connect(m_getOutputsInfoBtn,&::QPushButton::clicked, this, [=](){
-+        WindowManager::setIconName(m_subWidget->windowHandle(), "kylin-music");
-+    });
-     connect(m_setIconNameBtn,&::QPushButton::clicked, this, [=](){
-         WindowManager::setIconName(m_subWidget->windowHandle(), "kylin-music");
-     });
-diff --git a/kysdk-waylandhelper/test/testWindowManager/widget.h b/kysdk-waylandhelper/test/testWindowManager/widget.h
-index 2c35cda..f11aa16 100644
---- a/kysdk-waylandhelper/test/testWindowManager/widget.h
-+++ b/kysdk-waylandhelper/test/testWindowManager/widget.h
-@@ -94,5 +94,7 @@ private:
-     QSpinBox *m_yOffset;
-     QPushButton* m_setIconNameBtn;
-     QPushButton* m_unsetIconNameBtn;
-+    QPushButton* m_getOutputForSeatBtn;
-+    QPushButton* m_getOutputsInfoBtn;
- };
- #endif // WIDGET_H
diff -Nru libkysdk-applications-2.5.1.0/debian/patches/0027-add-interface-of-gettting-windowId-by-pid-and-by-tit.patch libkysdk-applications-2.5.2.0/debian/patches/0027-add-interface-of-gettting-windowId-by-pid-and-by-tit.patch
--- libkysdk-applications-2.5.1.0/debian/patches/0027-add-interface-of-gettting-windowId-by-pid-and-by-tit.patch	2024-07-31 11:09:38.000000000 +0800
+++ libkysdk-applications-2.5.2.0/debian/patches/0027-add-interface-of-gettting-windowId-by-pid-and-by-tit.patch	1970-01-01 08:00:00.000000000 +0800
@@ -1,378 +0,0 @@
-From: sunzhen <sunzhen1@kylinos.cn>
-Date: Wed, 17 Jul 2024 17:36:33 +0800
-Subject: add interface of gettting windowId by pid and by title
-
----
- .../src/windowmanager/abstractinterface.cpp        |  14 +++
- .../src/windowmanager/abstractinterface.h          |   2 +
- .../src/windowmanager/ukuiwaylandinterface.cpp     | 108 +++++++++++----------
- .../src/windowmanager/ukuiwaylandinterface.h       |   3 +
- .../src/windowmanager/windowmanager.cpp            |  18 ++++
- .../src/windowmanager/windowmanager.h              |  14 +++
- .../src/windowmanager/xcbinterface.cpp             |  26 +++++
- .../src/windowmanager/xcbinterface.h               |   3 +
- .../test/testWindowManager/widget.cpp              |  26 ++++-
- .../test/testWindowManager/widget.h                |   4 +
- 10 files changed, 166 insertions(+), 52 deletions(-)
-
-diff --git a/kysdk-waylandhelper/src/windowmanager/abstractinterface.cpp b/kysdk-waylandhelper/src/windowmanager/abstractinterface.cpp
-index d2c4f1d..7db8a2a 100644
---- a/kysdk-waylandhelper/src/windowmanager/abstractinterface.cpp
-+++ b/kysdk-waylandhelper/src/windowmanager/abstractinterface.cpp
-@@ -213,3 +213,17 @@ QList<OutputInfo *> AbstractInterface::outputsInfo()
-     QList<OutputInfo *> list;
-     return list;
- }
-+
-+QList<WindowId> AbstractInterface::getWindowIdByPid(quint32 pid)
-+{
-+    Q_UNUSED(pid)
-+    QList<WindowId> list;
-+    return list;
-+}
-+
-+QList<WindowId> AbstractInterface::getWindowIdByTtile(const QString &title)
-+{
-+    Q_UNUSED(title)
-+    QList<WindowId> list;
-+    return list;
-+}
-diff --git a/kysdk-waylandhelper/src/windowmanager/abstractinterface.h b/kysdk-waylandhelper/src/windowmanager/abstractinterface.h
-index afbecfc..5492707 100644
---- a/kysdk-waylandhelper/src/windowmanager/abstractinterface.h
-+++ b/kysdk-waylandhelper/src/windowmanager/abstractinterface.h
-@@ -121,6 +121,8 @@ public:
-     virtual QString currentSeatName();
-     virtual QString currentOutputName();
-     virtual QList<OutputInfo*> outputsInfo();
-+    virtual QList<WindowId> getWindowIdByPid(quint32 pid);
-+    virtual QList<WindowId> getWindowIdByTtile(const QString& title);
- 
- Q_SIGNALS:
-     void activeWindowChanged(WindowId wid);
-diff --git a/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.cpp b/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.cpp
-index 91b6151..a16b64c 100644
---- a/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.cpp
-+++ b/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.cpp
-@@ -54,48 +54,30 @@ WindowInfo UkuiWaylandInterface::requestInfo(WindowId wid)
- 
-     auto w = windowFor(wid);
- 
--    if (w) {
--        if (isPlasmaDesktop(w->geometry())) {
--            windowInfo.setIsValid(true);
--            windowInfo.setIsPlasmaDesktop(true);
--            windowInfo.setWid(wid);
--            //! Window Abilities
--            windowInfo.setIsClosable(false);
--            windowInfo.setIsFullScreenable(false);
--            windowInfo.setIsGroupable(false);
--            windowInfo.setIsMaximizable(false);
--            windowInfo.setIsMinimizable(false);
--            windowInfo.setIsMovable(false);
--            windowInfo.setIsResizable(false);
--            windowInfo.setIsShadeable(false);
--            windowInfo.setIsVirtualDesktopsChangeable(false);
--            //! Window Abilities
--
--        }
--        else {
--            windowInfo.setIsValid(true);
--            windowInfo.setWid(wid);
--            windowInfo.setIsActive(w->isActive());
--            windowInfo.setIsMinimized(w->isMinimized());
--            windowInfo.setIsMaxVert(w->isMaximized());
--            windowInfo.setIsMaxHoriz(w->isMaximized());
--            windowInfo.setIsFullscreen(w->isFullscreen());
--            windowInfo.setIsShaded(w->isShaded());
--            windowInfo.setIsOnAllDesktops(w->isOnAllDesktops());
--            windowInfo.setIsOnAllActivities(true);
--            windowInfo.setHasSkipTaskbar(w->skipTaskbar());
--            windowInfo.setHasSkipSwitcher(w->skipSwitcher());
--            windowInfo.setIsKeepAbove(w->isKeepAbove());
--            //! Window Abilities
--            windowInfo.setIsClosable(w->isCloseable());
--            windowInfo.setIsFullScreenable(w->isFullscreenable());
--            windowInfo.setIsMaximizable(w->isMaximizeable());
--            windowInfo.setIsMinimizable(w->isMinimizeable());
--            windowInfo.setIsMovable(w->isMovable());
--            windowInfo.setIsResizable(w->isResizable());
--            windowInfo.setIsShadeable(w->isShadeable());
--            windowInfo.setIsVirtualDesktopsChangeable(w->isVirtualDesktopChangeable());
--        }
-+    if (w)
-+    {
-+        windowInfo.setIsValid(true);
-+        windowInfo.setWid(wid);
-+        windowInfo.setIsActive(w->isActive());
-+        windowInfo.setIsMinimized(w->isMinimized());
-+        windowInfo.setIsMaxVert(w->isMaximized());
-+        windowInfo.setIsMaxHoriz(w->isMaximized());
-+        windowInfo.setIsFullscreen(w->isFullscreen());
-+        windowInfo.setIsShaded(w->isShaded());
-+        windowInfo.setIsOnAllDesktops(w->isOnAllDesktops());
-+        windowInfo.setIsOnAllActivities(true);
-+        windowInfo.setHasSkipTaskbar(w->skipTaskbar());
-+        windowInfo.setHasSkipSwitcher(w->skipSwitcher());
-+        windowInfo.setIsKeepAbove(w->isKeepAbove());
-+        //! Window Abilities
-+        windowInfo.setIsClosable(w->isCloseable());
-+        windowInfo.setIsFullScreenable(w->isFullscreenable());
-+        windowInfo.setIsMaximizable(w->isMaximizeable());
-+        windowInfo.setIsMinimizable(w->isMinimizeable());
-+        windowInfo.setIsMovable(w->isMovable());
-+        windowInfo.setIsResizable(w->isResizable());
-+        windowInfo.setIsShadeable(w->isShadeable());
-+        windowInfo.setIsVirtualDesktopsChangeable(w->isVirtualDesktopChangeable());
-     }
-     else
-     {
-@@ -693,6 +675,7 @@ QString UkuiWaylandInterface::currentSeatName()
- {
-     if (!m_ukuiShell)
-         return QString();
-+    wl_display_dispatch(m_connection->display());
-     return m_ukuiShell->seatName();
- }
- 
-@@ -700,6 +683,7 @@ QString UkuiWaylandInterface::currentOutputName()
- {
-     if (!m_ukuiShell)
-         return QString();
-+    wl_display_dispatch(m_connection->display());
-     return m_ukuiShell->outputName();
- }
- 
-@@ -712,6 +696,28 @@ QList<OutputInfo *> UkuiWaylandInterface::outputsInfo()
-         return m_outputUsableAreaManager->outputsInfo();
- }
- 
-+QList<WindowId> UkuiWaylandInterface::getWindowIdByPid(quint32 pid)
-+{
-+    QList<WindowId> list;
-+    for(auto w : m_ukuiWindowManager->windows())
-+    {
-+        if(w->pid() == pid)
-+            list.append(w->uuid());
-+    }
-+    return list;
-+}
-+
-+QList<WindowId> UkuiWaylandInterface::getWindowIdByTtile(const QString &title)
-+{
-+    QList<WindowId> list;
-+    for(auto w : m_ukuiWindowManager->windows())
-+    {
-+        if(w->title() == title)
-+            list.append(w->uuid());
-+    }
-+    return list;
-+}
-+
- void UkuiWaylandInterface::setGeometry(QWindow *window, const QRect &rect)
- {
-     if(!window)
-@@ -918,15 +924,15 @@ UkuiWindow *UkuiWaylandInterface::windowFor(WindowId wid)
- 
- void UkuiWaylandInterface::handleGlobal(void *data, wl_registry *registry, uint32_t name, const char *interface, uint32_t version)
- {
--    if(strcmp(interface, kywc_output_usable_area_manager_v1_interface.name) == 0)
--    {
--        kywc_output_usable_area_manager_v1* output_usable_area_manager = (kywc_output_usable_area_manager_v1*)wl_registry_bind(registry, name, &kywc_output_usable_area_manager_v1_interface, version);
--        if(output_usable_area_manager)
--        {
--            m_outputUsableAreaManager = new OutputUsableAreaManager(this);
--            m_outputUsableAreaManager->setup(output_usable_area_manager);
--        }
--    }
-+   if(strcmp(interface, kywc_output_usable_area_manager_v1_interface.name) == 0)
-+   {
-+       kywc_output_usable_area_manager_v1* output_usable_area_manager = (kywc_output_usable_area_manager_v1*)wl_registry_bind(registry, name, &kywc_output_usable_area_manager_v1_interface, version);
-+       if(output_usable_area_manager)
-+       {
-+           m_outputUsableAreaManager = new OutputUsableAreaManager(this);
-+           m_outputUsableAreaManager->setup(output_usable_area_manager);
-+       }
-+   }
- 
-     if(strcmp(interface, ext_idle_notifier_v1_interface.name) == 0)
-     {
-diff --git a/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.h b/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.h
-index 0f6b3e8..0b33043 100644
---- a/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.h
-+++ b/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.h
-@@ -107,6 +107,9 @@ public:
-     QString currentOutputName() override;
-     QList<OutputInfo*> outputsInfo() override;
- 
-+    QList<WindowId> getWindowIdByPid(quint32 pid) override;
-+    QList<WindowId> getWindowIdByTtile(const QString& title) override;
-+
- protected:
-     bool eventFilter(QObject *obj, QEvent *ev) override;
- 
-diff --git a/kysdk-waylandhelper/src/windowmanager/windowmanager.cpp b/kysdk-waylandhelper/src/windowmanager/windowmanager.cpp
-index c8a2876..8e90846 100644
---- a/kysdk-waylandhelper/src/windowmanager/windowmanager.cpp
-+++ b/kysdk-waylandhelper/src/windowmanager/windowmanager.cpp
-@@ -411,3 +411,21 @@ QList<OutputInfo *> WindowManager::outputsInfo()
-         return list;
-     return m_wm->winInterface()->outputsInfo();
- }
-+
-+QList<WindowId> WindowManager::getWindowIdByPid(quint32 pid)
-+{
-+    QList<WindowId> list;
-+    self();
-+    if(!m_wm)
-+        return list;
-+    return m_wm->winInterface()->getWindowIdByPid(pid);
-+}
-+
-+QList<WindowId> WindowManager::getWindowIdByTtile(const QString&title)
-+{
-+    QList<WindowId> list;
-+    self();
-+    if(!m_wm)
-+        return list;
-+    return m_wm->winInterface()->getWindowIdByTtile(title);
-+}
-diff --git a/kysdk-waylandhelper/src/windowmanager/windowmanager.h b/kysdk-waylandhelper/src/windowmanager/windowmanager.h
-index 99e792a..e7a79d9 100644
---- a/kysdk-waylandhelper/src/windowmanager/windowmanager.h
-+++ b/kysdk-waylandhelper/src/windowmanager/windowmanager.h
-@@ -372,6 +372,20 @@ public:
-      */
-     static QList<OutputInfo*> outputsInfo();
- 
-+    /**
-+     * @brief getWindowIdByPid
-+     * @since 2.5
-+     * @return
-+     */
-+    static QList<WindowId> getWindowIdByPid(quint32 pid);
-+
-+    /**
-+     * @brief getWindowIdByTtile
-+     * @since 2.5
-+     * @return
-+     */
-+    static QList<WindowId> getWindowIdByTtile(const QString&title);
-+
- Q_SIGNALS:
-      /**
-       * @brief 窗口添加信号
-diff --git a/kysdk-waylandhelper/src/windowmanager/xcbinterface.cpp b/kysdk-waylandhelper/src/windowmanager/xcbinterface.cpp
-index 678e536..94b4994 100644
---- a/kysdk-waylandhelper/src/windowmanager/xcbinterface.cpp
-+++ b/kysdk-waylandhelper/src/windowmanager/xcbinterface.cpp
-@@ -644,6 +644,32 @@ WindowLayer XcbInterface::windowLayer(QWindow *window)
-     return layer;
- }
- 
-+QList<WindowId> XcbInterface::getWindowIdByPid(quint32 p)
-+{
-+    QList<WindowId> list;
-+    for(auto windowId : windows())
-+    {
-+        if(pid(windowId) == p)
-+        {
-+            list.append(windowId);
-+        }
-+    }
-+    return list;
-+}
-+
-+QList<WindowId> XcbInterface::getWindowIdByTtile(const QString &title)
-+{
-+    QList<WindowId> list;
-+    for(auto windowId : windows())
-+    {
-+        if(titleFor(windowId) == title)
-+        {
-+            list.append(windowId);
-+        }
-+    }
-+    return list;
-+}
-+
- bool XcbInterface::isValidWindow(WindowId wid)
- {
-     if (this->isValidFor(wid)) {
-diff --git a/kysdk-waylandhelper/src/windowmanager/xcbinterface.h b/kysdk-waylandhelper/src/windowmanager/xcbinterface.h
-index 1430217..5fbc320 100644
---- a/kysdk-waylandhelper/src/windowmanager/xcbinterface.h
-+++ b/kysdk-waylandhelper/src/windowmanager/xcbinterface.h
-@@ -74,6 +74,9 @@ public:
-     void setWindowLayer(QWindow *window, WindowLayer layer) override;
-     WindowLayer windowLayer(QWindow *window) override;
- 
-+    QList<WindowId> getWindowIdByPid(quint32 pid) override;
-+    QList<WindowId> getWindowIdByTtile(const QString& title) override;
-+
- private:
-     bool isValidWindow(WindowId wid) ;
-     bool isValidWindow(const KWindowInfo &winfo) ;
-diff --git a/kysdk-waylandhelper/test/testWindowManager/widget.cpp b/kysdk-waylandhelper/test/testWindowManager/widget.cpp
-index fac735b..960d512 100644
---- a/kysdk-waylandhelper/test/testWindowManager/widget.cpp
-+++ b/kysdk-waylandhelper/test/testWindowManager/widget.cpp
-@@ -292,12 +292,26 @@ void Widget::initUI()
-     vLayout3->addLayout(layout11);
- 
-     QHBoxLayout* layout12 = new QHBoxLayout();
--    m_getOutputForSeatBtn = new QPushButton(tr("GetOutputForSear"), this);
-+    m_getOutputForSeatBtn = new QPushButton(tr("GetOutputForSeat"), this);
-     m_getOutputsInfoBtn = new QPushButton(tr("GetOutputsInfo"), this);
-     layout12->addWidget(m_getOutputForSeatBtn);
-     layout12->addWidget(m_getOutputsInfoBtn);
-     layout12->addStretch();
-     vLayout3->addLayout(layout12);
-+
-+    QHBoxLayout* layout13 = new QHBoxLayout();
-+    m_getWindowIdByTitleBtn = new QPushButton("Search",this);
-+    m_getWindowIdByTitleEdit = new QLineEdit(this);
-+    m_getWindowIdByTitleEdit->setPlaceholderText("get window id by title");
-+    m_getWindowIdByPidBtn = new QPushButton("Search",this);
-+    m_getWindowIdByPidEdit = new QLineEdit(this);
-+    m_getWindowIdByPidEdit->setPlaceholderText("get window id by pid");
-+    layout13->addWidget(m_getWindowIdByTitleEdit);
-+    layout13->addWidget(m_getWindowIdByTitleBtn);
-+    layout13->addWidget(m_getWindowIdByPidEdit);
-+    layout13->addWidget(m_getWindowIdByPidBtn);
-+    vLayout3->addLayout(layout13);
-+
-     box5->setLayout(vLayout3);
- 
- 
-@@ -322,6 +336,16 @@ void Widget::initUI()
- 
- void Widget::initConnection()
- {   
-+    connect(m_getWindowIdByPidBtn, &QPushButton::clicked,this,[=](){
-+        qDebug()<<QString("windows id of %1:").arg(m_getWindowIdByPidEdit->text())
-+               <<WindowManager::getWindowIdByPid(m_getWindowIdByPidEdit->text().toInt());
-+    });
-+
-+    connect(m_getWindowIdByTitleBtn, &QPushButton::clicked,this,[=](){
-+        qDebug()<<QString("windows id of %1:").arg(m_getWindowIdByTitleEdit->text())
-+               <<WindowManager::getWindowIdByTtile(m_getWindowIdByTitleEdit->text());
-+    });
-+
-     connect(m_getOutputForSeatBtn,&::QPushButton::clicked, this, [=](){
-         qDebug() << "current output name:" << WindowManager::currentOutputName();
-         qDebug() << "current seat name:" << WindowManager::currentSeatName();
-diff --git a/kysdk-waylandhelper/test/testWindowManager/widget.h b/kysdk-waylandhelper/test/testWindowManager/widget.h
-index f11aa16..1f45b32 100644
---- a/kysdk-waylandhelper/test/testWindowManager/widget.h
-+++ b/kysdk-waylandhelper/test/testWindowManager/widget.h
-@@ -96,5 +96,9 @@ private:
-     QPushButton* m_unsetIconNameBtn;
-     QPushButton* m_getOutputForSeatBtn;
-     QPushButton* m_getOutputsInfoBtn;
-+    QPushButton* m_getWindowIdByTitleBtn;
-+    QLineEdit* m_getWindowIdByTitleEdit;
-+    QPushButton* m_getWindowIdByPidBtn;
-+    QLineEdit* m_getWindowIdByPidEdit;
- };
- #endif // WIDGET_H
diff -Nru libkysdk-applications-2.5.1.0/debian/patches/0028-update-changelog.patch libkysdk-applications-2.5.2.0/debian/patches/0028-update-changelog.patch
--- libkysdk-applications-2.5.1.0/debian/patches/0028-update-changelog.patch	2024-07-31 11:09:38.000000000 +0800
+++ libkysdk-applications-2.5.2.0/debian/patches/0028-update-changelog.patch	1970-01-01 08:00:00.000000000 +0800
@@ -1,711 +0,0 @@
-From: sunzhen <sunzhen1@kylinos.cn>
-Date: Fri, 19 Jul 2024 11:23:03 +0800
-Subject: update changelog
-
----
- kysdk-waylandhelper/kysdk-waylandhelper.pro        |  18 +--
- .../src/windowmanager/abstractinterface.cpp        |  15 ---
- .../src/windowmanager/abstractinterface.h          |   4 -
- .../src/windowmanager/outputinfo.cpp               |  55 --------
- kysdk-waylandhelper/src/windowmanager/outputinfo.h |  27 ----
- .../src/windowmanager/outputusableareamanager.cpp  | 146 ---------------------
- .../src/windowmanager/outputusableareamanager.h    |  41 ------
- .../src/windowmanager/ukuishell.cpp                |  22 ----
- kysdk-waylandhelper/src/windowmanager/ukuishell.h  |   8 +-
- .../src/windowmanager/ukuiwaylandinterface.cpp     |  36 -----
- .../src/windowmanager/ukuiwaylandinterface.h       |   5 -
- .../src/windowmanager/windowmanager.cpp            |  24 ----
- .../src/windowmanager/windowmanager.h              |  20 ---
- .../test/testWindowManager/widget.cpp              |  24 ----
- .../test/testWindowManager/widget.h                |   2 -
- 15 files changed, 4 insertions(+), 443 deletions(-)
- delete mode 100644 kysdk-waylandhelper/src/windowmanager/outputinfo.cpp
- delete mode 100644 kysdk-waylandhelper/src/windowmanager/outputinfo.h
- delete mode 100644 kysdk-waylandhelper/src/windowmanager/outputusableareamanager.cpp
- delete mode 100644 kysdk-waylandhelper/src/windowmanager/outputusableareamanager.h
-
-diff --git a/kysdk-waylandhelper/kysdk-waylandhelper.pro b/kysdk-waylandhelper/kysdk-waylandhelper.pro
-index 9b257d8..1ac5d0b 100644
---- a/kysdk-waylandhelper/kysdk-waylandhelper.pro
-+++ b/kysdk-waylandhelper/kysdk-waylandhelper.pro
-@@ -33,9 +33,6 @@ system(wayland-scanner private-code /usr/share/wayland-protocols/staging/ext-idl
- system(wayland-scanner client-header /usr/share/kylin-wayland-protocols/ukui-blur.xml src/blurmanager/ukui-blur-manager-client-protocol.h)
- system(wayland-scanner private-code /usr/share/kylin-wayland-protocols/ukui-blur.xml src/blurmanager/ukui-blur-manager-core-protocol.c)
- 
--system(wayland-scanner client-header /usr/share/kylin-wayland-protocols/kywc-output-usable-area-v1.xml src/windowmanager/kywc-output-usable-area-v1-protocol.h)
--system(wayland-scanner private-code /usr/share/kylin-wayland-protocols/kywc-output-usable-area-v1.xml src/windowmanager/kywc-output-usable-area-v1-protocol.c)
--
- SOURCES += \
-     src/ukuistylehelper/ukui-decoration-core.c \
-     src/ukuistylehelper/ukui-decoration-manager.cpp \
-@@ -45,8 +42,6 @@ SOURCES += \
-     src/waylandhelper.cpp \
-     src/windowmanager/abstractinterface.cpp \
-     src/windowmanager/kdewaylandinterface.cpp \
--    src/windowmanager/outputinfo.cpp \
--    src/windowmanager/outputusableareamanager.cpp \
-     src/windowmanager/ukuiwaylandinterface.cpp \
-     src/windowmanager/xcbinterface.cpp \
-     src/windowmanager/ukuiwindowmanagement.cpp \
-@@ -65,8 +60,7 @@ SOURCES += \
-     src/blurmanager/blurmanager.cpp \
-     src/blurmanager/ukui-blur-manager-core-protocol.c \
-     src/blurmanager/blurwaylandinterface.cpp \
--    src/blurmanager/blurxcbinterface.cpp \
--    src/windowmanager/kywc-output-usable-area-v1-protocol.c
-+    src/blurmanager/blurxcbinterface.cpp
- 
- 
- HEADERS += \
-@@ -78,8 +72,6 @@ HEADERS += \
-     src/waylandhelper.h \
-     src/windowmanager/abstractinterface.h \
-     src/windowmanager/kdewaylandinterface.h \
--    src/windowmanager/outputinfo.h \
--    src/windowmanager/outputusableareamanager.h \
-     src/windowmanager/xcbinterface.h \
-     src/windowmanager/ukuiwaylandinterface.h \
-     src/windowmanager/ukuiwaylandpointer.h \
-@@ -102,8 +94,7 @@ HEADERS += \
-     src/blurmanager/ukui-blur-manager-client-protocol.h\
-     src/blurmanager/blurabstractinterface.h \
-     src/blurmanager/blurwaylandinterface.h \
--    src/blurmanager/blurxcbinterface.h \
--    src/windowmanager/kywc-output-usable-area-v1-protocol.h
-+    src/blurmanager/blurxcbinterface.h
- 
- # Default rules for deployment.
- headers.files = src/kysdk-waylandhelper_global.h \
-@@ -128,10 +119,7 @@ wm_headers.files = src/windowmanager/abstractinterface.h \
-     src/windowmanager/ukui-window-management-client-protocol.h \
-     src/windowmanager/wayland-xdg-activation-v1-client-protocol.h \
-     src/windowmanager/wayland-ext-idle-notify-v1-client-protocol.h \
--    src/windowmanager/kyatoms_p.h \
--    src/windowmanager/kywc-output-usable-area-v1-protocol.h \
--    src/windowmanager/outputinfo.h \
--    src/windowmanager/outputusableareamanager.h 
-+    src/windowmanager/kyatoms_p.h
-                     
- wm_headers.path = /usr/include/kysdk/applications/windowmanager/
- 
-diff --git a/kysdk-waylandhelper/src/windowmanager/abstractinterface.cpp b/kysdk-waylandhelper/src/windowmanager/abstractinterface.cpp
-index 7db8a2a..926e123 100644
---- a/kysdk-waylandhelper/src/windowmanager/abstractinterface.cpp
-+++ b/kysdk-waylandhelper/src/windowmanager/abstractinterface.cpp
-@@ -198,21 +198,6 @@ void AbstractInterface::setIconName(QWindow *window, const QString& iconName)
-     Q_UNUSED(iconName)
- }
- 
--QString AbstractInterface::currentSeatName()
--{
--    return QString();
--}
--
--QString AbstractInterface::currentOutputName()
--{
--    return QString();
--}
--
--QList<OutputInfo *> AbstractInterface::outputsInfo()
--{
--    QList<OutputInfo *> list;
--    return list;
--}
- 
- QList<WindowId> AbstractInterface::getWindowIdByPid(quint32 pid)
- {
-diff --git a/kysdk-waylandhelper/src/windowmanager/abstractinterface.h b/kysdk-waylandhelper/src/windowmanager/abstractinterface.h
-index 5492707..62a7d94 100644
---- a/kysdk-waylandhelper/src/windowmanager/abstractinterface.h
-+++ b/kysdk-waylandhelper/src/windowmanager/abstractinterface.h
-@@ -27,7 +27,6 @@
- #include <QVariant>
- #include <QMap>
- #include "windowinfo.h"
--#include "outputinfo.h"
- #include "netwm.h"
- 
- namespace kdk
-@@ -118,9 +117,6 @@ public:
-     virtual void setOpenUnderCursor(QWindow *window);
-     virtual void setOpenUnderCursor(QWindow *window, int x, int y);
-     virtual void setIconName(QWindow *window, const QString& iconName);
--    virtual QString currentSeatName();
--    virtual QString currentOutputName();
--    virtual QList<OutputInfo*> outputsInfo();
-     virtual QList<WindowId> getWindowIdByPid(quint32 pid);
-     virtual QList<WindowId> getWindowIdByTtile(const QString& title);
- 
-diff --git a/kysdk-waylandhelper/src/windowmanager/outputinfo.cpp b/kysdk-waylandhelper/src/windowmanager/outputinfo.cpp
-deleted file mode 100644
-index 9e9d236..0000000
---- a/kysdk-waylandhelper/src/windowmanager/outputinfo.cpp
-+++ /dev/null
-@@ -1,55 +0,0 @@
--#include "outputinfo.h"
--#include "outputusableareamanager.h"
--
--class Q_DECL_HIDDEN OutputInfo::Private
--{
--public:
--    Private(OutputInfo *q);
--    ~Private();
--
--    QRect m_usableArea;
--    QString m_name;
--    OutputInfo* q;
--};
--
--OutputInfo::OutputInfo(QObject *parent)
--    :QObject(parent),
--      d(new Private(this))
--{
--
--}
--
--void OutputInfo::setOutputName(const QString &outputName)
--{
--    d->m_name = outputName;
--}
--
--void OutputInfo::setUsableArea(const QRect &usableArea)
--{
--    d->m_usableArea = usableArea;
--}
--
--
--OutputInfo::~OutputInfo()
--{
--
--}
--
--QString OutputInfo::outputName()
--{
--    return d->m_name;
--}
--
--QRect OutputInfo::usableArea()
--{
--    return d->m_usableArea;
--}
--
--OutputInfo::Private::Private(OutputInfo *q)
--    :q(q)
--{
--}
--
--OutputInfo::Private::~Private()
--{
--}
-diff --git a/kysdk-waylandhelper/src/windowmanager/outputinfo.h b/kysdk-waylandhelper/src/windowmanager/outputinfo.h
-deleted file mode 100644
-index 8911d46..0000000
---- a/kysdk-waylandhelper/src/windowmanager/outputinfo.h
-+++ /dev/null
-@@ -1,27 +0,0 @@
--#ifndef OUTPUTINFO_H
--#define OUTPUTINFO_H
--
--#include <QObject>
--#include <QRect>
--
--class OutputInfo: public QObject
--{
--    Q_OBJECT
--public:
--    ~OutputInfo();
--
--    QString outputName();
--    QRect usableArea();
--
--
--private:
--    explicit OutputInfo(QObject *parent = nullptr);
--    void setOutputName(const QString& outputName);
--    void setUsableArea(const QRect& usableArea);
--
--    friend class OutputUsableAreaManager;
--    class Private;
--    QScopedPointer<Private> d;
--};
--
--#endif // OUTPUTINFO_H
-diff --git a/kysdk-waylandhelper/src/windowmanager/outputusableareamanager.cpp b/kysdk-waylandhelper/src/windowmanager/outputusableareamanager.cpp
-deleted file mode 100644
-index 2fc47c1..0000000
---- a/kysdk-waylandhelper/src/windowmanager/outputusableareamanager.cpp
-+++ /dev/null
-@@ -1,146 +0,0 @@
--#include "outputusableareamanager.h"
--#include "ukuiwaylandpointer.h"
--#include "outputinfo.h"
--
--class Q_DECL_HIDDEN OutputUsableAreaManager::Private
--{
--public:
--    Private(OutputUsableAreaManager *q);
--    ~Private();
--
--    UkuiWaylandPointer<kywc_output_usable_area_manager_v1, kywc_output_usable_area_manager_v1_destroy> m_manager;
--    OutputUsableAreaManager *q;
--    static struct kywc_output_usable_area_manager_v1_listener s_listener;
--    QList<OutputInfo*> m_outputsInfo;
--    QStringList m_outputNames;
--    bool m_outputsInfoReady = false;
--
--    void init_listener();
--
--    static void usableAreaCallback(void *data,
--                struct kywc_output_usable_area_manager_v1 *kywc_output_usable_area_manager_v1,
--                const char *name,
--                int32_t x,
--                int32_t y,
--                int32_t width,
--                int32_t height);
--
--    static void doneCallback(void *data,
--             struct kywc_output_usable_area_manager_v1 *kywc_output_usable_area_manager_v1);
--};
--
--kywc_output_usable_area_manager_v1_listener OutputUsableAreaManager::Private::s_listener = {
--    .usable_area = usableAreaCallback,
--    .done = doneCallback
--};
--
--OutputUsableAreaManager::OutputUsableAreaManager(QObject *parent)
--    :QObject(parent),
--     d(new Private(this))
--{
--}
--
--OutputUsableAreaManager::~OutputUsableAreaManager()
--{
--}
--
--bool OutputUsableAreaManager::isValid() const
--{
--    return d->m_manager.isValid();
--}
--
--void OutputUsableAreaManager::release()
--{
--    d->m_manager.release();
--}
--
--void OutputUsableAreaManager::destroy()
--{
--    d->m_manager.destroy();
--}
--
--void OutputUsableAreaManager::setup(kywc_output_usable_area_manager_v1 *manager)
--{
--    d->m_manager.setup(manager);
--    d->init_listener();
--}
--
--OutputUsableAreaManager::operator kywc_output_usable_area_manager_v1 *()
--{
--    return d->m_manager;
--}
--
--bool OutputUsableAreaManager::isOutputsInfoReady()
--{
--    return d->m_outputsInfoReady;
--}
--
--QList<OutputInfo*> OutputUsableAreaManager::outputsInfo()
--{
--    return d->m_outputsInfo;
--}
--
--
--OutputUsableAreaManager::operator kywc_output_usable_area_manager_v1 *() const
--{
--    return d->m_manager;
--}
--
--OutputUsableAreaManager::Private::Private(OutputUsableAreaManager *q)
--    :q(q)
--{
--}
--
--OutputUsableAreaManager::Private::~Private()
--{
--}
--
--void OutputUsableAreaManager::Private::init_listener()
--{
--    kywc_output_usable_area_manager_v1_add_listener(m_manager, &s_listener, this);
--}
--
--void OutputUsableAreaManager::Private::usableAreaCallback(void *data, kywc_output_usable_area_manager_v1 *kywc_output_usable_area_manager_v1, const char *name, int32_t x, int32_t y, int32_t width, int32_t height)
--{
--    Q_UNUSED(kywc_output_usable_area_manager_v1)
--    auto manager = reinterpret_cast<OutputUsableAreaManager::Private *>(data);
--    if(!manager)
--        return;
--
--    QString outputName = QString::fromUtf8(name);
--    QRect usableArea(x, y, width, height);
--
--    OutputInfo* info = new OutputInfo(manager->q);
--    info->setOutputName(outputName);
--    info->setUsableArea(usableArea);
--
--    if(manager->m_outputNames.contains(outputName))
--    {
--        //update
--        for(int i = 0 ; i < manager->m_outputsInfo.count() ; i++)
--        {
--            if(manager->m_outputsInfo[i]->outputName() == outputName)
--            {
--                manager->m_outputsInfo.replace(i, info);
--                break;
--            }
--        }
--    }
--    else
--    {
--        //append
--        manager->m_outputsInfo.append(info);
--        manager->m_outputNames.append(outputName);
--    }
--}
--
--void OutputUsableAreaManager::Private::doneCallback(void *data, kywc_output_usable_area_manager_v1 *kywc_output_usable_area_manager_v1)
--{
--    Q_UNUSED(kywc_output_usable_area_manager_v1)
--
--    auto manager = reinterpret_cast<OutputUsableAreaManager::Private *>(data);
--    if(!manager)
--        return;
--    manager->m_outputsInfoReady = true;
--    Q_EMIT manager->q->outputsInfoReady();
--}
-diff --git a/kysdk-waylandhelper/src/windowmanager/outputusableareamanager.h b/kysdk-waylandhelper/src/windowmanager/outputusableareamanager.h
-deleted file mode 100644
-index 7a5419b..0000000
---- a/kysdk-waylandhelper/src/windowmanager/outputusableareamanager.h
-+++ /dev/null
-@@ -1,41 +0,0 @@
--#ifndef OUTPUTUSABLEAREAMANAGER_H
--#define OUTPUTUSABLEAREAMANAGER_H
--
--#include <QObject>
--#include <QRect>
--#include "kywc-output-usable-area-v1-protocol.h"
--
--class OutputInfo;
--class OutputUsableAreaManager : public QObject
--{
--    Q_OBJECT
--public:
--    explicit OutputUsableAreaManager(QObject *parent = nullptr);
--    ~OutputUsableAreaManager();
--
--    bool isValid() const;
--
--    void release();
--
--    void destroy();
--
--    void setup(kywc_output_usable_area_manager_v1 *manager);
--
--    operator kywc_output_usable_area_manager_v1 *();
--    operator kywc_output_usable_area_manager_v1 *() const;
--
--    QList<OutputInfo*> outputsInfo();
--
--    bool isOutputsInfoReady();
--
--Q_SIGNALS:
--
--    void outputsInfoReady();
--
--private:
--    class Private;
--    QScopedPointer<Private> d;
--
--};
--
--#endif // OUTPUTUSABLEAREAMANAGER_H
-diff --git a/kysdk-waylandhelper/src/windowmanager/ukuishell.cpp b/kysdk-waylandhelper/src/windowmanager/ukuishell.cpp
-index 674cf89..8c4e8d8 100644
---- a/kysdk-waylandhelper/src/windowmanager/ukuishell.cpp
-+++ b/kysdk-waylandhelper/src/windowmanager/ukuishell.cpp
-@@ -95,27 +95,6 @@ EventQueue *UkuiShell::eventQueue()
-     return d->queue;
- }
- 
--QString UkuiShell::seatName()
--{
--    if(d->m_outputForSeatReady)
--        return d->m_seatName;
--    else
--        return QString();
--}
--
--QString UkuiShell::outputName()
--{
--    if(d->m_outputForSeatReady)
--        return d->m_outputName;
--    else
--        return QString();
--}
--
--bool UkuiShell::isOutputForSeatReady()
--{
--    return d->m_outputForSeatReady;
--}
--
- UkuiShellSurface *UkuiShell::createSurface(wl_surface *surface, QObject *parent)
- {
-     Q_ASSERT(isValid());
-@@ -421,5 +400,4 @@ void UkuiShell::Private::doneCallback(void *data, ukui_shell *ukui_shell)
-     if(ukuiShell->shell != ukui_shell)
-         return;
-     ukuiShell->m_outputForSeatReady = true;
--    Q_EMIT ukuiShell->q->outputForSeatReady();
- }
-diff --git a/kysdk-waylandhelper/src/windowmanager/ukuishell.h b/kysdk-waylandhelper/src/windowmanager/ukuishell.h
-index e02a0e9..6136a10 100644
---- a/kysdk-waylandhelper/src/windowmanager/ukuishell.h
-+++ b/kysdk-waylandhelper/src/windowmanager/ukuishell.h
-@@ -33,15 +33,11 @@ public:
- 
-     void setup(ukui_shell *shell);
- 
-+
-     void setEventQueue(EventQueue *queue);
- 
-     EventQueue *eventQueue();
- 
--    QString seatName();
--
--    QString outputName();
--
--    bool isOutputForSeatReady();
- 
-     UkuiShellSurface *createSurface(wl_surface *surface, QObject *parent = nullptr);
- 
-@@ -58,8 +54,6 @@ Q_SIGNALS:
- 
-     void removed();
- 
--    void outputForSeatReady();
--
- private:
-     class Private;
-     QScopedPointer<Private> d;
-diff --git a/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.cpp b/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.cpp
-index a16b64c..a4cc968 100644
---- a/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.cpp
-+++ b/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.cpp
-@@ -6,7 +6,6 @@
- #include "ukui-shell-client-protocol.h"
- #include "wayland-xdg-activation-v1-client-protocol.h"
- #include "wayland-ext-idle-notify-v1-client-protocol.h"
--#include "kywc-output-usable-area-v1-protocol.h"
- 
- void handle_global(void *data,struct wl_registry *wl_registry,uint32_t name, const char *interface,  uint32_t version)
- {
-@@ -671,31 +670,6 @@ void UkuiWaylandInterface::setIconName(QWindow *window, const QString& iconName)
-     window->installEventFilter(this);
- }
- 
--QString UkuiWaylandInterface::currentSeatName()
--{
--    if (!m_ukuiShell)
--        return QString();
--    wl_display_dispatch(m_connection->display());
--    return m_ukuiShell->seatName();
--}
--
--QString UkuiWaylandInterface::currentOutputName()
--{
--    if (!m_ukuiShell)
--        return QString();
--    wl_display_dispatch(m_connection->display());
--    return m_ukuiShell->outputName();
--}
--
--QList<OutputInfo *> UkuiWaylandInterface::outputsInfo()
--{
--    QList<OutputInfo *> list;
--    if(!m_outputUsableAreaManager || !m_outputUsableAreaManager->isOutputsInfoReady())
--        return list;
--    else
--        return m_outputUsableAreaManager->outputsInfo();
--}
--
- QList<WindowId> UkuiWaylandInterface::getWindowIdByPid(quint32 pid)
- {
-     QList<WindowId> list;
-@@ -924,16 +898,6 @@ UkuiWindow *UkuiWaylandInterface::windowFor(WindowId wid)
- 
- void UkuiWaylandInterface::handleGlobal(void *data, wl_registry *registry, uint32_t name, const char *interface, uint32_t version)
- {
--   if(strcmp(interface, kywc_output_usable_area_manager_v1_interface.name) == 0)
--   {
--       kywc_output_usable_area_manager_v1* output_usable_area_manager = (kywc_output_usable_area_manager_v1*)wl_registry_bind(registry, name, &kywc_output_usable_area_manager_v1_interface, version);
--       if(output_usable_area_manager)
--       {
--           m_outputUsableAreaManager = new OutputUsableAreaManager(this);
--           m_outputUsableAreaManager->setup(output_usable_area_manager);
--       }
--   }
--
-     if(strcmp(interface, ext_idle_notifier_v1_interface.name) == 0)
-     {
-         ext_idle_notifier_v1* notifier = (ext_idle_notifier_v1*)wl_registry_bind(registry, name, &ext_idle_notifier_v1_interface, version);
-diff --git a/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.h b/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.h
-index 0b33043..c42918f 100644
---- a/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.h
-+++ b/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.h
-@@ -30,7 +30,6 @@
- #include "ukuiwindowmanagement.h"
- #include "xdgactivation.h"
- #include "extidlenotifier.h"
--#include "outputusableareamanager.h"
- 
- #include "abstractinterface.h"
- #include "kdewaylandinterface.h"
-@@ -103,9 +102,6 @@ public:
-     void setOpenUnderCursor(QWindow *window, int x, int y) override;
-     void setIconName(QWindow *window, const QString& iconName) override;
- 
--    QString currentSeatName() override;
--    QString currentOutputName() override;
--    QList<OutputInfo*> outputsInfo() override;
- 
-     QList<WindowId> getWindowIdByPid(quint32 pid) override;
-     QList<WindowId> getWindowIdByTtile(const QString& title) override;
-@@ -133,7 +129,6 @@ private:
-     XdgActivation *m_xdgActivation = nullptr;
-     XdgActivationToken * m_xdgActivationToken = nullptr;
-     QMap<QWindow*,UkuiShellSurface*>m_ukuiShellSurfaces;
--    OutputUsableAreaManager* m_outputUsableAreaManager = nullptr;
- };
- 
- #endif // UKUIWAYLANDINTERFACE_H
-diff --git a/kysdk-waylandhelper/src/windowmanager/windowmanager.cpp b/kysdk-waylandhelper/src/windowmanager/windowmanager.cpp
-index 8e90846..922e343 100644
---- a/kysdk-waylandhelper/src/windowmanager/windowmanager.cpp
-+++ b/kysdk-waylandhelper/src/windowmanager/windowmanager.cpp
-@@ -387,30 +387,6 @@ void WindowManager::setIconName(QWindow *window, const QString &iconName)
-     return m_wm->winInterface()->setIconName(window, iconName);
- }
- 
--QString WindowManager::currentSeatName()
--{
--    self();
--    if(!m_wm)
--        return QString();
--    return m_wm->winInterface()->currentSeatName();
--}
--
--QString WindowManager::currentOutputName()
--{
--    self();
--    if(!m_wm)
--        return QString();
--    return m_wm->winInterface()->currentOutputName();
--}
--
--QList<OutputInfo *> WindowManager::outputsInfo()
--{
--    QList<OutputInfo *> list;
--    self();
--    if(!m_wm)
--        return list;
--    return m_wm->winInterface()->outputsInfo();
--}
- 
- QList<WindowId> WindowManager::getWindowIdByPid(quint32 pid)
- {
-diff --git a/kysdk-waylandhelper/src/windowmanager/windowmanager.h b/kysdk-waylandhelper/src/windowmanager/windowmanager.h
-index e7a79d9..f9e71f5 100644
---- a/kysdk-waylandhelper/src/windowmanager/windowmanager.h
-+++ b/kysdk-waylandhelper/src/windowmanager/windowmanager.h
-@@ -351,26 +351,6 @@ public:
-      */
-     static void setIconName(QWindow *window, const QString& iconName);
- 
--    /**
--     * @brief currentSeatName
--     * @since 2.5
--     * @return
--     */
--    static QString currentSeatName();
--
--    /**
--     * @brief currentOutputName
--     * @since 2.5
--     * @return
--     */
--    static QString currentOutputName();
--
--    /**
--     * @brief outputsInfo
--     * @since 2.5
--     * @return
--     */
--    static QList<OutputInfo*> outputsInfo();
- 
-     /**
-      * @brief getWindowIdByPid
-diff --git a/kysdk-waylandhelper/test/testWindowManager/widget.cpp b/kysdk-waylandhelper/test/testWindowManager/widget.cpp
-index 960d512..bb80143 100644
---- a/kysdk-waylandhelper/test/testWindowManager/widget.cpp
-+++ b/kysdk-waylandhelper/test/testWindowManager/widget.cpp
-@@ -291,14 +291,6 @@ void Widget::initUI()
-     layout11->addStretch();
-     vLayout3->addLayout(layout11);
- 
--    QHBoxLayout* layout12 = new QHBoxLayout();
--    m_getOutputForSeatBtn = new QPushButton(tr("GetOutputForSeat"), this);
--    m_getOutputsInfoBtn = new QPushButton(tr("GetOutputsInfo"), this);
--    layout12->addWidget(m_getOutputForSeatBtn);
--    layout12->addWidget(m_getOutputsInfoBtn);
--    layout12->addStretch();
--    vLayout3->addLayout(layout12);
--
-     QHBoxLayout* layout13 = new QHBoxLayout();
-     m_getWindowIdByTitleBtn = new QPushButton("Search",this);
-     m_getWindowIdByTitleEdit = new QLineEdit(this);
-@@ -346,22 +338,6 @@ void Widget::initConnection()
-                <<WindowManager::getWindowIdByTtile(m_getWindowIdByTitleEdit->text());
-     });
- 
--    connect(m_getOutputForSeatBtn,&::QPushButton::clicked, this, [=](){
--        qDebug() << "current output name:" << WindowManager::currentOutputName();
--        qDebug() << "current seat name:" << WindowManager::currentSeatName();
--    });
--
--    connect(m_getOutputsInfoBtn,&::QPushButton::clicked, this, [=](){
--        QList<OutputInfo*> infos = WindowManager::outputsInfo();
--        for(auto info : infos)
--        {
--            qDebug() << "output name:" << info->outputName();
--            qDebug() << "output usable area:" << info->usableArea();;
--        }
--    });
--    connect(m_getOutputsInfoBtn,&::QPushButton::clicked, this, [=](){
--        WindowManager::setIconName(m_subWidget->windowHandle(), "kylin-music");
--    });
-     connect(m_setIconNameBtn,&::QPushButton::clicked, this, [=](){
-         WindowManager::setIconName(m_subWidget->windowHandle(), "kylin-music");
-     });
-diff --git a/kysdk-waylandhelper/test/testWindowManager/widget.h b/kysdk-waylandhelper/test/testWindowManager/widget.h
-index 1f45b32..92f454d 100644
---- a/kysdk-waylandhelper/test/testWindowManager/widget.h
-+++ b/kysdk-waylandhelper/test/testWindowManager/widget.h
-@@ -94,8 +94,6 @@ private:
-     QSpinBox *m_yOffset;
-     QPushButton* m_setIconNameBtn;
-     QPushButton* m_unsetIconNameBtn;
--    QPushButton* m_getOutputForSeatBtn;
--    QPushButton* m_getOutputsInfoBtn;
-     QPushButton* m_getWindowIdByTitleBtn;
-     QLineEdit* m_getWindowIdByTitleEdit;
-     QPushButton* m_getWindowIdByPidBtn;
diff -Nru libkysdk-applications-2.5.1.0/debian/patches/0029-remove-ukuishell-listener.patch libkysdk-applications-2.5.2.0/debian/patches/0029-remove-ukuishell-listener.patch
--- libkysdk-applications-2.5.1.0/debian/patches/0029-remove-ukuishell-listener.patch	2024-07-31 11:09:38.000000000 +0800
+++ libkysdk-applications-2.5.2.0/debian/patches/0029-remove-ukuishell-listener.patch	1970-01-01 08:00:00.000000000 +0800
@@ -1,53 +0,0 @@
-From: sunzhen <sunzhen1@kylinos.cn>
-Date: Fri, 19 Jul 2024 13:46:04 +0800
-Subject: remove ukuishell listener
-
----
- kysdk-waylandhelper/src/windowmanager/ukuishell.cpp | 15 ---------------
- 1 file changed, 15 deletions(-)
-
-diff --git a/kysdk-waylandhelper/src/windowmanager/ukuishell.cpp b/kysdk-waylandhelper/src/windowmanager/ukuishell.cpp
-index 8c4e8d8..a3112a2 100644
---- a/kysdk-waylandhelper/src/windowmanager/ukuishell.cpp
-+++ b/kysdk-waylandhelper/src/windowmanager/ukuishell.cpp
-@@ -12,19 +12,11 @@ public:
-     QString m_seatName;
-     QString m_outputName;
-     bool m_outputForSeatReady = false;
--    void init_listener();
--
--    static struct ukui_shell_listener s_listener;
-     static void outputForSeatCallback(void *data, struct ukui_shell *ukui_shell, const char *output_name, const char *seat_name);
-     static void doneCallback(void *data, struct ukui_shell *ukui_shell);
- 
- };
- 
--ukui_shell_listener UkuiShell::Private::s_listener = {
--    .output_for_seat = outputForSeatCallback,
--    .done = doneCallback
--};
--
- class Q_DECL_HIDDEN UkuiShellSurface::Private
- {
- public:
-@@ -81,8 +73,6 @@ void UkuiShell::setup(ukui_shell *shell)
-     Q_ASSERT(!d->shell);
-     Q_ASSERT(shell);
-     d->shell.setup(shell);
--    d->init_listener();
--
- }
- 
- void UkuiShell::setEventQueue(EventQueue *queue)
-@@ -380,11 +370,6 @@ UkuiShell::Private::Private(UkuiShell *q)
- 
- }
- 
--void UkuiShell::Private::init_listener()
--{
--    ukui_shell_add_listener(shell, &s_listener, this);
--}
--
- void UkuiShell::Private::outputForSeatCallback(void *data, ukui_shell *ukui_shell, const char *output_name, const char *seat_name)
- {
-     auto ukuiShell = reinterpret_cast<UkuiShell::Private *>(data);
diff -Nru libkysdk-applications-2.5.1.0/debian/patches/0030-update-changelog.patch libkysdk-applications-2.5.2.0/debian/patches/0030-update-changelog.patch
--- libkysdk-applications-2.5.1.0/debian/patches/0030-update-changelog.patch	2024-07-31 11:09:38.000000000 +0800
+++ libkysdk-applications-2.5.2.0/debian/patches/0030-update-changelog.patch	1970-01-01 08:00:00.000000000 +0800
@@ -1,882 +0,0 @@
-From: sunzhen <sunzhen1@kylinos.cn>
-Date: Tue, 23 Jul 2024 09:27:44 +0800
-Subject: update changelog
-
----
- kysdk-waylandhelper/kysdk-waylandhelper.pro        |  18 ++-
- .../src/windowmanager/abstractinterface.cpp        |  15 ++
- .../src/windowmanager/abstractinterface.h          |   7 +
- .../src/windowmanager/outputinfo.cpp               |  55 ++++++++
- kysdk-waylandhelper/src/windowmanager/outputinfo.h |  27 ++++
- .../src/windowmanager/outputusableareamanager.cpp  | 157 +++++++++++++++++++++
- .../src/windowmanager/outputusableareamanager.h    |  43 ++++++
- .../src/windowmanager/ukuishell.cpp                |  50 ++++++-
- kysdk-waylandhelper/src/windowmanager/ukuishell.h  |  10 +-
- .../src/windowmanager/ukuiwaylandinterface.cpp     |  46 +++++-
- .../src/windowmanager/ukuiwaylandinterface.h       |   5 +
- .../src/windowmanager/windowmanager.cpp            |  25 ++++
- .../src/windowmanager/windowmanager.h              |  26 ++++
- .../test/testWindowManager/widget.cpp              |  36 ++++-
- .../test/testWindowManager/widget.h                |   2 +
- 15 files changed, 509 insertions(+), 13 deletions(-)
- create mode 100644 kysdk-waylandhelper/src/windowmanager/outputinfo.cpp
- create mode 100644 kysdk-waylandhelper/src/windowmanager/outputinfo.h
- create mode 100644 kysdk-waylandhelper/src/windowmanager/outputusableareamanager.cpp
- create mode 100644 kysdk-waylandhelper/src/windowmanager/outputusableareamanager.h
-
-diff --git a/kysdk-waylandhelper/kysdk-waylandhelper.pro b/kysdk-waylandhelper/kysdk-waylandhelper.pro
-index 1ac5d0b..9b257d8 100644
---- a/kysdk-waylandhelper/kysdk-waylandhelper.pro
-+++ b/kysdk-waylandhelper/kysdk-waylandhelper.pro
-@@ -33,6 +33,9 @@ system(wayland-scanner private-code /usr/share/wayland-protocols/staging/ext-idl
- system(wayland-scanner client-header /usr/share/kylin-wayland-protocols/ukui-blur.xml src/blurmanager/ukui-blur-manager-client-protocol.h)
- system(wayland-scanner private-code /usr/share/kylin-wayland-protocols/ukui-blur.xml src/blurmanager/ukui-blur-manager-core-protocol.c)
- 
-+system(wayland-scanner client-header /usr/share/kylin-wayland-protocols/kywc-output-usable-area-v1.xml src/windowmanager/kywc-output-usable-area-v1-protocol.h)
-+system(wayland-scanner private-code /usr/share/kylin-wayland-protocols/kywc-output-usable-area-v1.xml src/windowmanager/kywc-output-usable-area-v1-protocol.c)
-+
- SOURCES += \
-     src/ukuistylehelper/ukui-decoration-core.c \
-     src/ukuistylehelper/ukui-decoration-manager.cpp \
-@@ -42,6 +45,8 @@ SOURCES += \
-     src/waylandhelper.cpp \
-     src/windowmanager/abstractinterface.cpp \
-     src/windowmanager/kdewaylandinterface.cpp \
-+    src/windowmanager/outputinfo.cpp \
-+    src/windowmanager/outputusableareamanager.cpp \
-     src/windowmanager/ukuiwaylandinterface.cpp \
-     src/windowmanager/xcbinterface.cpp \
-     src/windowmanager/ukuiwindowmanagement.cpp \
-@@ -60,7 +65,8 @@ SOURCES += \
-     src/blurmanager/blurmanager.cpp \
-     src/blurmanager/ukui-blur-manager-core-protocol.c \
-     src/blurmanager/blurwaylandinterface.cpp \
--    src/blurmanager/blurxcbinterface.cpp
-+    src/blurmanager/blurxcbinterface.cpp \
-+    src/windowmanager/kywc-output-usable-area-v1-protocol.c
- 
- 
- HEADERS += \
-@@ -72,6 +78,8 @@ HEADERS += \
-     src/waylandhelper.h \
-     src/windowmanager/abstractinterface.h \
-     src/windowmanager/kdewaylandinterface.h \
-+    src/windowmanager/outputinfo.h \
-+    src/windowmanager/outputusableareamanager.h \
-     src/windowmanager/xcbinterface.h \
-     src/windowmanager/ukuiwaylandinterface.h \
-     src/windowmanager/ukuiwaylandpointer.h \
-@@ -94,7 +102,8 @@ HEADERS += \
-     src/blurmanager/ukui-blur-manager-client-protocol.h\
-     src/blurmanager/blurabstractinterface.h \
-     src/blurmanager/blurwaylandinterface.h \
--    src/blurmanager/blurxcbinterface.h
-+    src/blurmanager/blurxcbinterface.h \
-+    src/windowmanager/kywc-output-usable-area-v1-protocol.h
- 
- # Default rules for deployment.
- headers.files = src/kysdk-waylandhelper_global.h \
-@@ -119,7 +128,10 @@ wm_headers.files = src/windowmanager/abstractinterface.h \
-     src/windowmanager/ukui-window-management-client-protocol.h \
-     src/windowmanager/wayland-xdg-activation-v1-client-protocol.h \
-     src/windowmanager/wayland-ext-idle-notify-v1-client-protocol.h \
--    src/windowmanager/kyatoms_p.h
-+    src/windowmanager/kyatoms_p.h \
-+    src/windowmanager/kywc-output-usable-area-v1-protocol.h \
-+    src/windowmanager/outputinfo.h \
-+    src/windowmanager/outputusableareamanager.h 
-                     
- wm_headers.path = /usr/include/kysdk/applications/windowmanager/
- 
-diff --git a/kysdk-waylandhelper/src/windowmanager/abstractinterface.cpp b/kysdk-waylandhelper/src/windowmanager/abstractinterface.cpp
-index 926e123..7db8a2a 100644
---- a/kysdk-waylandhelper/src/windowmanager/abstractinterface.cpp
-+++ b/kysdk-waylandhelper/src/windowmanager/abstractinterface.cpp
-@@ -198,6 +198,21 @@ void AbstractInterface::setIconName(QWindow *window, const QString& iconName)
-     Q_UNUSED(iconName)
- }
- 
-+QString AbstractInterface::currentSeatName()
-+{
-+    return QString();
-+}
-+
-+QString AbstractInterface::currentOutputName()
-+{
-+    return QString();
-+}
-+
-+QList<OutputInfo *> AbstractInterface::outputsInfo()
-+{
-+    QList<OutputInfo *> list;
-+    return list;
-+}
- 
- QList<WindowId> AbstractInterface::getWindowIdByPid(quint32 pid)
- {
-diff --git a/kysdk-waylandhelper/src/windowmanager/abstractinterface.h b/kysdk-waylandhelper/src/windowmanager/abstractinterface.h
-index 62a7d94..1f5b540 100644
---- a/kysdk-waylandhelper/src/windowmanager/abstractinterface.h
-+++ b/kysdk-waylandhelper/src/windowmanager/abstractinterface.h
-@@ -27,6 +27,7 @@
- #include <QVariant>
- #include <QMap>
- #include "windowinfo.h"
-+#include "outputinfo.h"
- #include "netwm.h"
- 
- namespace kdk
-@@ -117,6 +118,9 @@ public:
-     virtual void setOpenUnderCursor(QWindow *window);
-     virtual void setOpenUnderCursor(QWindow *window, int x, int y);
-     virtual void setIconName(QWindow *window, const QString& iconName);
-+    virtual QString currentSeatName();
-+    virtual QString currentOutputName();
-+    virtual QList<OutputInfo*> outputsInfo();
-     virtual QList<WindowId> getWindowIdByPid(quint32 pid);
-     virtual QList<WindowId> getWindowIdByTtile(const QString& title);
- 
-@@ -146,6 +150,9 @@ Q_SIGNALS:
-     void idled();
-     void resumed();
- 
-+    //since 2.5
-+    void outputInfoChanged(OutputInfo*);
-+
- public:
-     QMap<WindowId, WindowInfo> m_windows;
-     QString m_currentDesktop;
-diff --git a/kysdk-waylandhelper/src/windowmanager/outputinfo.cpp b/kysdk-waylandhelper/src/windowmanager/outputinfo.cpp
-new file mode 100644
-index 0000000..9e9d236
---- /dev/null
-+++ b/kysdk-waylandhelper/src/windowmanager/outputinfo.cpp
-@@ -0,0 +1,55 @@
-+#include "outputinfo.h"
-+#include "outputusableareamanager.h"
-+
-+class Q_DECL_HIDDEN OutputInfo::Private
-+{
-+public:
-+    Private(OutputInfo *q);
-+    ~Private();
-+
-+    QRect m_usableArea;
-+    QString m_name;
-+    OutputInfo* q;
-+};
-+
-+OutputInfo::OutputInfo(QObject *parent)
-+    :QObject(parent),
-+      d(new Private(this))
-+{
-+
-+}
-+
-+void OutputInfo::setOutputName(const QString &outputName)
-+{
-+    d->m_name = outputName;
-+}
-+
-+void OutputInfo::setUsableArea(const QRect &usableArea)
-+{
-+    d->m_usableArea = usableArea;
-+}
-+
-+
-+OutputInfo::~OutputInfo()
-+{
-+
-+}
-+
-+QString OutputInfo::outputName()
-+{
-+    return d->m_name;
-+}
-+
-+QRect OutputInfo::usableArea()
-+{
-+    return d->m_usableArea;
-+}
-+
-+OutputInfo::Private::Private(OutputInfo *q)
-+    :q(q)
-+{
-+}
-+
-+OutputInfo::Private::~Private()
-+{
-+}
-diff --git a/kysdk-waylandhelper/src/windowmanager/outputinfo.h b/kysdk-waylandhelper/src/windowmanager/outputinfo.h
-new file mode 100644
-index 0000000..8911d46
---- /dev/null
-+++ b/kysdk-waylandhelper/src/windowmanager/outputinfo.h
-@@ -0,0 +1,27 @@
-+#ifndef OUTPUTINFO_H
-+#define OUTPUTINFO_H
-+
-+#include <QObject>
-+#include <QRect>
-+
-+class OutputInfo: public QObject
-+{
-+    Q_OBJECT
-+public:
-+    ~OutputInfo();
-+
-+    QString outputName();
-+    QRect usableArea();
-+
-+
-+private:
-+    explicit OutputInfo(QObject *parent = nullptr);
-+    void setOutputName(const QString& outputName);
-+    void setUsableArea(const QRect& usableArea);
-+
-+    friend class OutputUsableAreaManager;
-+    class Private;
-+    QScopedPointer<Private> d;
-+};
-+
-+#endif // OUTPUTINFO_H
-diff --git a/kysdk-waylandhelper/src/windowmanager/outputusableareamanager.cpp b/kysdk-waylandhelper/src/windowmanager/outputusableareamanager.cpp
-new file mode 100644
-index 0000000..ffab50f
---- /dev/null
-+++ b/kysdk-waylandhelper/src/windowmanager/outputusableareamanager.cpp
-@@ -0,0 +1,157 @@
-+#include "outputusableareamanager.h"
-+#include "ukuiwaylandpointer.h"
-+#include "outputinfo.h"
-+
-+class Q_DECL_HIDDEN OutputUsableAreaManager::Private
-+{
-+public:
-+    Private(OutputUsableAreaManager *q);
-+    ~Private();
-+
-+    UkuiWaylandPointer<kywc_output_usable_area_manager_v1, kywc_output_usable_area_manager_v1_destroy> m_manager;
-+    OutputUsableAreaManager *q;
-+    static struct kywc_output_usable_area_manager_v1_listener s_listener;
-+    QList<OutputInfo*> m_outputsInfo;
-+    QStringList m_outputNames;
-+    bool m_outputsInfoReady = false;
-+
-+    void init_listener();
-+
-+    static void usableAreaCallback(void *data,
-+                struct kywc_output_usable_area_manager_v1 *kywc_output_usable_area_manager_v1,
-+                const char *name,
-+                int32_t x,
-+                int32_t y,
-+                int32_t width,
-+                int32_t height);
-+
-+    static void doneCallback(void *data,
-+             struct kywc_output_usable_area_manager_v1 *kywc_output_usable_area_manager_v1);
-+};
-+
-+kywc_output_usable_area_manager_v1_listener OutputUsableAreaManager::Private::s_listener = {
-+    .usable_area = usableAreaCallback,
-+    .done = doneCallback
-+};
-+
-+OutputUsableAreaManager::OutputUsableAreaManager(QObject *parent)
-+    :QObject(parent),
-+     d(new Private(this))
-+{
-+}
-+
-+OutputUsableAreaManager::~OutputUsableAreaManager()
-+{
-+}
-+
-+bool OutputUsableAreaManager::isValid() const
-+{
-+    return d->m_manager.isValid();
-+}
-+
-+void OutputUsableAreaManager::release()
-+{
-+    d->m_manager.release();
-+}
-+
-+void OutputUsableAreaManager::destroy()
-+{
-+    d->m_manager.destroy();
-+}
-+
-+void OutputUsableAreaManager::setup(kywc_output_usable_area_manager_v1 *manager)
-+{
-+    d->m_manager.setup(manager);
-+    d->init_listener();
-+}
-+
-+OutputUsableAreaManager::operator kywc_output_usable_area_manager_v1 *()
-+{
-+    return d->m_manager;
-+}
-+
-+bool OutputUsableAreaManager::isOutputsInfoReady()
-+{
-+    return d->m_outputsInfoReady;
-+}
-+
-+QList<OutputInfo*> OutputUsableAreaManager::outputsInfo()
-+{
-+    return d->m_outputsInfo;
-+}
-+
-+
-+OutputUsableAreaManager::operator kywc_output_usable_area_manager_v1 *() const
-+{
-+    return d->m_manager;
-+}
-+
-+OutputUsableAreaManager::Private::Private(OutputUsableAreaManager *q)
-+    :q(q)
-+{
-+}
-+
-+OutputUsableAreaManager::Private::~Private()
-+{
-+}
-+
-+void OutputUsableAreaManager::Private::init_listener()
-+{
-+    kywc_output_usable_area_manager_v1_add_listener(m_manager, &s_listener, this);
-+}
-+
-+void OutputUsableAreaManager::Private::usableAreaCallback(void *data, kywc_output_usable_area_manager_v1 *kywc_output_usable_area_manager_v1, const char *name, int32_t x, int32_t y, int32_t width, int32_t height)
-+{
-+    Q_UNUSED(kywc_output_usable_area_manager_v1)
-+    auto manager = reinterpret_cast<OutputUsableAreaManager::Private *>(data);
-+    if(!manager)
-+        return;
-+
-+    QString outputName = QString::fromUtf8(name);
-+    QRect usableArea(x, y, width, height);
-+
-+    OutputInfo* info = new OutputInfo(manager->q);
-+    info->setOutputName(outputName);
-+    info->setUsableArea(usableArea);
-+
-+    if(manager->m_outputsInfoReady)
-+    {
-+        //reset
-+        manager->m_outputsInfo.clear();
-+        manager->m_outputNames.clear();
-+        manager->m_outputsInfoReady = false;
-+    }
-+
-+    if(manager->m_outputNames.contains(outputName))
-+    {
-+        //update
-+        for(int i = 0 ; i < manager->m_outputsInfo.count() ; i++)
-+        {
-+            if(manager->m_outputsInfo[i]->outputName() == outputName &&
-+                manager->m_outputsInfo[i]->usableArea() != usableArea)
-+            {
-+                manager->m_outputsInfo.replace(i, info);
-+                Q_EMIT manager->q->outputInfoChanged(info);
-+                break;
-+            }
-+        }
-+    }
-+    else
-+    {
-+        //append
-+        manager->m_outputsInfo.append(info);
-+        manager->m_outputNames.append(outputName);
-+        Q_EMIT  manager->q->outputInfoChanged(info);
-+    }
-+}
-+
-+void OutputUsableAreaManager::Private::doneCallback(void *data, kywc_output_usable_area_manager_v1 *kywc_output_usable_area_manager_v1)
-+{
-+    Q_UNUSED(kywc_output_usable_area_manager_v1)
-+
-+    auto manager = reinterpret_cast<OutputUsableAreaManager::Private *>(data);
-+    if(!manager)
-+        return;
-+    manager->m_outputsInfoReady = true;
-+    Q_EMIT manager->q->outputsInfoReady();
-+}
-diff --git a/kysdk-waylandhelper/src/windowmanager/outputusableareamanager.h b/kysdk-waylandhelper/src/windowmanager/outputusableareamanager.h
-new file mode 100644
-index 0000000..8453f3f
---- /dev/null
-+++ b/kysdk-waylandhelper/src/windowmanager/outputusableareamanager.h
-@@ -0,0 +1,43 @@
-+#ifndef OUTPUTUSABLEAREAMANAGER_H
-+#define OUTPUTUSABLEAREAMANAGER_H
-+
-+#include <QObject>
-+#include <QRect>
-+#include "kywc-output-usable-area-v1-protocol.h"
-+
-+class OutputInfo;
-+class OutputUsableAreaManager : public QObject
-+{
-+    Q_OBJECT
-+public:
-+    explicit OutputUsableAreaManager(QObject *parent = nullptr);
-+    ~OutputUsableAreaManager();
-+
-+    bool isValid() const;
-+
-+    void release();
-+
-+    void destroy();
-+
-+    void setup(kywc_output_usable_area_manager_v1 *manager);
-+
-+    operator kywc_output_usable_area_manager_v1 *();
-+    operator kywc_output_usable_area_manager_v1 *() const;
-+
-+    QList<OutputInfo*> outputsInfo();
-+
-+    bool isOutputsInfoReady();
-+
-+Q_SIGNALS:
-+
-+    void outputsInfoReady();
-+
-+    void outputInfoChanged(OutputInfo*);
-+
-+private:
-+    class Private;
-+    QScopedPointer<Private> d;
-+
-+};
-+
-+#endif // OUTPUTUSABLEAREAMANAGER_H
-diff --git a/kysdk-waylandhelper/src/windowmanager/ukuishell.cpp b/kysdk-waylandhelper/src/windowmanager/ukuishell.cpp
-index a3112a2..c1e5d3a 100644
---- a/kysdk-waylandhelper/src/windowmanager/ukuishell.cpp
-+++ b/kysdk-waylandhelper/src/windowmanager/ukuishell.cpp
-@@ -11,12 +11,20 @@ public:
-     UkuiShell *q;
-     QString m_seatName;
-     QString m_outputName;
--    bool m_outputForSeatReady = false;
--    static void outputForSeatCallback(void *data, struct ukui_shell *ukui_shell, const char *output_name, const char *seat_name);
-+    bool m_currentOutputReady = false;
-+    void init_listener();
-+
-+    static struct ukui_shell_listener s_listener;
-+    static void currentOutputCallback(void *data, struct ukui_shell *ukui_shell, const char *output_name, const char *seat_name);
-     static void doneCallback(void *data, struct ukui_shell *ukui_shell);
- 
- };
- 
-+ukui_shell_listener UkuiShell::Private::s_listener = {
-+    .current_output = currentOutputCallback,
-+    .done = doneCallback
-+};
-+
- class Q_DECL_HIDDEN UkuiShellSurface::Private
- {
- public:
-@@ -73,6 +81,8 @@ void UkuiShell::setup(ukui_shell *shell)
-     Q_ASSERT(!d->shell);
-     Q_ASSERT(shell);
-     d->shell.setup(shell);
-+    d->init_listener();
-+
- }
- 
- void UkuiShell::setEventQueue(EventQueue *queue)
-@@ -85,6 +95,27 @@ EventQueue *UkuiShell::eventQueue()
-     return d->queue;
- }
- 
-+QString UkuiShell::seatName()
-+{
-+    if(d->m_currentOutputReady)
-+        return d->m_seatName;
-+    else
-+        return QString();
-+}
-+
-+QString UkuiShell::outputName()
-+{
-+    if(d->m_currentOutputReady)
-+        return d->m_outputName;
-+    else
-+        return QString();
-+}
-+
-+bool UkuiShell::isCurrentOutputReady()
-+{
-+    return d->m_currentOutputReady;
-+}
-+
- UkuiShellSurface *UkuiShell::createSurface(wl_surface *surface, QObject *parent)
- {
-     Q_ASSERT(isValid());
-@@ -111,6 +142,11 @@ UkuiShellSurface *UkuiShell::createSurface(Surface *surface, QObject *parent)
-     return createSurface(*surface, parent);
- }
- 
-+void UkuiShell::updateCurrentOutput()
-+{
-+    ukui_shell_get_current_output(d->shell);
-+}
-+
- bool UkuiShell::isValid() const
- {
-     return d->shell.isValid();
-@@ -370,7 +406,12 @@ UkuiShell::Private::Private(UkuiShell *q)
- 
- }
- 
--void UkuiShell::Private::outputForSeatCallback(void *data, ukui_shell *ukui_shell, const char *output_name, const char *seat_name)
-+void UkuiShell::Private::init_listener()
-+{
-+    ukui_shell_add_listener(shell, &s_listener, this);
-+}
-+
-+void UkuiShell::Private::currentOutputCallback(void *data, ukui_shell *ukui_shell, const char *output_name, const char *seat_name)
- {
-     auto ukuiShell = reinterpret_cast<UkuiShell::Private *>(data);
-     if(ukuiShell->shell != ukui_shell)
-@@ -384,5 +425,6 @@ void UkuiShell::Private::doneCallback(void *data, ukui_shell *ukui_shell)
-     auto ukuiShell = reinterpret_cast<UkuiShell::Private *>(data);
-     if(ukuiShell->shell != ukui_shell)
-         return;
--    ukuiShell->m_outputForSeatReady = true;
-+    ukuiShell->m_currentOutputReady = true;
-+    Q_EMIT ukuiShell->q->currentOutputReady();
- }
-diff --git a/kysdk-waylandhelper/src/windowmanager/ukuishell.h b/kysdk-waylandhelper/src/windowmanager/ukuishell.h
-index 6136a10..8322c1c 100644
---- a/kysdk-waylandhelper/src/windowmanager/ukuishell.h
-+++ b/kysdk-waylandhelper/src/windowmanager/ukuishell.h
-@@ -33,16 +33,22 @@ public:
- 
-     void setup(ukui_shell *shell);
- 
--
-     void setEventQueue(EventQueue *queue);
- 
-     EventQueue *eventQueue();
- 
-+    QString seatName();
-+
-+    QString outputName();
-+
-+    bool isCurrentOutputReady();
- 
-     UkuiShellSurface *createSurface(wl_surface *surface, QObject *parent = nullptr);
- 
-     UkuiShellSurface *createSurface(Surface *surface, QObject *parent = nullptr);
- 
-+    void updateCurrentOutput();
-+
-     operator ukui_shell *();
-     operator ukui_shell *() const;
- 
-@@ -54,6 +60,8 @@ Q_SIGNALS:
- 
-     void removed();
- 
-+    void currentOutputReady();
-+
- private:
-     class Private;
-     QScopedPointer<Private> d;
-diff --git a/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.cpp b/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.cpp
-index a4cc968..f2ac43c 100644
---- a/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.cpp
-+++ b/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.cpp
-@@ -6,6 +6,7 @@
- #include "ukui-shell-client-protocol.h"
- #include "wayland-xdg-activation-v1-client-protocol.h"
- #include "wayland-ext-idle-notify-v1-client-protocol.h"
-+#include "kywc-output-usable-area-v1-protocol.h"
- 
- void handle_global(void *data,struct wl_registry *wl_registry,uint32_t name, const char *interface,  uint32_t version)
- {
-@@ -36,6 +37,7 @@ UkuiWaylandInterface::UkuiWaylandInterface(QObject *parent)
- 
-     wl_registry* registry = *m_registry;
-     wl_registry_add_listener(registry, &s_registryListener, this);
-+    wl_display_dispatch(m_connection->display());
-     wl_display_roundtrip(m_connection->display());
- 
-     m_registry->setup();
-@@ -670,9 +672,40 @@ void UkuiWaylandInterface::setIconName(QWindow *window, const QString& iconName)
-     window->installEventFilter(this);
- }
- 
-+QString UkuiWaylandInterface::currentSeatName()
-+{
-+    if (!m_ukuiShell)
-+        return QString();
-+    m_ukuiShell->updateCurrentOutput();
-+    wl_display_dispatch(m_connection->display());
-+    wl_display_roundtrip(m_connection->display());
-+    return m_ukuiShell->seatName();
-+}
-+
-+QString UkuiWaylandInterface::currentOutputName()
-+{
-+    if (!m_ukuiShell)
-+        return QString();
-+    m_ukuiShell->updateCurrentOutput();
-+    wl_display_dispatch(m_connection->display());
-+    wl_display_roundtrip(m_connection->display());
-+    return m_ukuiShell->outputName();
-+}
-+
-+QList<OutputInfo *> UkuiWaylandInterface::outputsInfo()
-+{
-+    QList<OutputInfo *> list;
-+    if(!m_outputUsableAreaManager || !m_outputUsableAreaManager->isOutputsInfoReady())
-+        return list;
-+    else
-+        return m_outputUsableAreaManager->outputsInfo();
-+}
-+
- QList<WindowId> UkuiWaylandInterface::getWindowIdByPid(quint32 pid)
- {
-     QList<WindowId> list;
-+    wl_display_dispatch(m_connection->display());
-+    qDebug()<<m_ukuiWindowManager->windows().count();
-     for(auto w : m_ukuiWindowManager->windows())
-     {
-         if(w->pid() == pid)
-@@ -887,7 +920,7 @@ UkuiWindow *UkuiWaylandInterface::windowFor(WindowId wid)
- {
-     auto it = std::find_if(m_ukuiWindowManager->windows().constBegin(), m_ukuiWindowManager->windows().constEnd(), [&wid](UkuiWindow * w) noexcept {
-             return w->isValid() && w->uuid() == wid;
--});
-+    });
- 
-     if (it == m_ukuiWindowManager->windows().constEnd()) {
-         return nullptr;
-@@ -898,6 +931,17 @@ UkuiWindow *UkuiWaylandInterface::windowFor(WindowId wid)
- 
- void UkuiWaylandInterface::handleGlobal(void *data, wl_registry *registry, uint32_t name, const char *interface, uint32_t version)
- {
-+   if(strcmp(interface, kywc_output_usable_area_manager_v1_interface.name) == 0)
-+   {
-+       kywc_output_usable_area_manager_v1* output_usable_area_manager = (kywc_output_usable_area_manager_v1*)wl_registry_bind(registry, name, &kywc_output_usable_area_manager_v1_interface, version);
-+       if(output_usable_area_manager)
-+       {
-+           m_outputUsableAreaManager = new OutputUsableAreaManager(this);
-+           m_outputUsableAreaManager->setup(output_usable_area_manager);
-+           connect(m_outputUsableAreaManager, &OutputUsableAreaManager::outputInfoChanged,this, &AbstractInterface::outputInfoChanged);
-+       }
-+   }
-+
-     if(strcmp(interface, ext_idle_notifier_v1_interface.name) == 0)
-     {
-         ext_idle_notifier_v1* notifier = (ext_idle_notifier_v1*)wl_registry_bind(registry, name, &ext_idle_notifier_v1_interface, version);
-diff --git a/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.h b/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.h
-index c42918f..0b33043 100644
---- a/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.h
-+++ b/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.h
-@@ -30,6 +30,7 @@
- #include "ukuiwindowmanagement.h"
- #include "xdgactivation.h"
- #include "extidlenotifier.h"
-+#include "outputusableareamanager.h"
- 
- #include "abstractinterface.h"
- #include "kdewaylandinterface.h"
-@@ -102,6 +103,9 @@ public:
-     void setOpenUnderCursor(QWindow *window, int x, int y) override;
-     void setIconName(QWindow *window, const QString& iconName) override;
- 
-+    QString currentSeatName() override;
-+    QString currentOutputName() override;
-+    QList<OutputInfo*> outputsInfo() override;
- 
-     QList<WindowId> getWindowIdByPid(quint32 pid) override;
-     QList<WindowId> getWindowIdByTtile(const QString& title) override;
-@@ -129,6 +133,7 @@ private:
-     XdgActivation *m_xdgActivation = nullptr;
-     XdgActivationToken * m_xdgActivationToken = nullptr;
-     QMap<QWindow*,UkuiShellSurface*>m_ukuiShellSurfaces;
-+    OutputUsableAreaManager* m_outputUsableAreaManager = nullptr;
- };
- 
- #endif // UKUIWAYLANDINTERFACE_H
-diff --git a/kysdk-waylandhelper/src/windowmanager/windowmanager.cpp b/kysdk-waylandhelper/src/windowmanager/windowmanager.cpp
-index 922e343..de1bb36 100644
---- a/kysdk-waylandhelper/src/windowmanager/windowmanager.cpp
-+++ b/kysdk-waylandhelper/src/windowmanager/windowmanager.cpp
-@@ -53,6 +53,7 @@ kdk::WindowManager::WindowManager(QObject *parent)
-     connect(m_wm->winInterface(),&AbstractInterface::skipTaskbarChanged,this,&WindowManager::skipTaskbarChanged);
-     connect(m_wm->winInterface(),&AbstractInterface::skipSwitcherChanged,this,&WindowManager::skipSwitcherChanged);
-     connect(m_wm->winInterface(),&AbstractInterface::geometryChanged,this,&WindowManager::geometryChanged);
-+    connect(m_wm->winInterface(),&AbstractInterface::outputInfoChanged,this,&WindowManager::outputInfoChanged);
- }
- 
- WindowId WindowManager::currentActiveWindow()
-@@ -387,6 +388,30 @@ void WindowManager::setIconName(QWindow *window, const QString &iconName)
-     return m_wm->winInterface()->setIconName(window, iconName);
- }
- 
-+QString WindowManager::currentSeatName()
-+{
-+    self();
-+    if(!m_wm)
-+        return QString();
-+    return m_wm->winInterface()->currentSeatName();
-+}
-+
-+QString WindowManager::currentOutputName()
-+{
-+    self();
-+    if(!m_wm)
-+        return QString();
-+    return m_wm->winInterface()->currentOutputName();
-+}
-+
-+QList<OutputInfo *> WindowManager::outputsInfo()
-+{
-+    QList<OutputInfo *> list;
-+    self();
-+    if(!m_wm)
-+        return list;
-+    return m_wm->winInterface()->outputsInfo();
-+}
- 
- QList<WindowId> WindowManager::getWindowIdByPid(quint32 pid)
- {
-diff --git a/kysdk-waylandhelper/src/windowmanager/windowmanager.h b/kysdk-waylandhelper/src/windowmanager/windowmanager.h
-index f9e71f5..ab9e514 100644
---- a/kysdk-waylandhelper/src/windowmanager/windowmanager.h
-+++ b/kysdk-waylandhelper/src/windowmanager/windowmanager.h
-@@ -351,6 +351,26 @@ public:
-      */
-     static void setIconName(QWindow *window, const QString& iconName);
- 
-+    /**
-+     * @brief currentSeatName
-+     * @since 2.5
-+     * @return
-+     */
-+    static QString currentSeatName();
-+
-+    /**
-+     * @brief currentOutputName
-+     * @since 2.5
-+     * @return
-+     */
-+    static QString currentOutputName();
-+
-+    /**
-+     * @brief outputsInfo
-+     * @since 2.5
-+     * @return
-+     */
-+    static QList<OutputInfo*> outputsInfo();
- 
-     /**
-      * @brief getWindowIdByPid
-@@ -486,6 +506,12 @@ Q_SIGNALS:
-       */
-      void geometryChanged(const WindowId& wid);
- 
-+     /**
-+      * @brief 屏幕信息改变信号
-+      * @since 2.5
-+      */
-+     void outputInfoChanged(OutputInfo*);
-+
- private:
-      WindowManager(QObject *parent = nullptr);
- };
-diff --git a/kysdk-waylandhelper/test/testWindowManager/widget.cpp b/kysdk-waylandhelper/test/testWindowManager/widget.cpp
-index bb80143..c5cd0cc 100644
---- a/kysdk-waylandhelper/test/testWindowManager/widget.cpp
-+++ b/kysdk-waylandhelper/test/testWindowManager/widget.cpp
-@@ -39,6 +39,10 @@ Widget::Widget(QWidget *parent)
-     m_timer = new QTimer(this);
-     m_timer->setInterval(2000);
-     setWindowTitle("windowtitle");
-+    connect(WindowManager::self(),&WindowManager::outputInfoChanged,this,[=](OutputInfo* info){
-+            qDebug() << "output info changed!name:"<<info->outputName() <<" usablearea:"<<info->usableArea();
-+    });
-+
-     connect(WindowManager::self(),&WindowManager::iconChanged,this,[=](const WindowId& windowId){
-         if(m_lastestWindowId == windowId)
-             qDebug() << "icon changed";
-@@ -76,8 +80,8 @@ Widget::Widget(QWidget *parent)
-             qDebug() << "titleChanged";
-     });
-     connect(WindowManager::self(),&WindowManager::geometryChanged,this,[=](const WindowId& windowId){
--        if(m_lastestWindowId == windowId)
--            qDebug() << "geometryChanged";
-+//        if(m_lastestWindowId == windowId)
-+//            qDebug() << "geometryChanged";
-     });
-     connect(WindowManager::self(),&WindowManager::demandsAttentionChanged,this,[=](const WindowId& windowId){
-         if(m_lastestWindowId == windowId)
-@@ -92,8 +96,8 @@ Widget::Widget(QWidget *parent)
-         /*注意:
-          * 最新创建的窗体被设置为操作窗体,此demo中每个按钮对应一个接口函数调用,所有接口函数操作的窗口都是该最新创建的窗体
-          */
--    qDebug()<<"窗口添加:"<<WindowManager::getWindowTitle(windowId)<<" "<<windowId;
--    qDebug()<<"窗口添加:icon:"<<WindowManager::getWindowIcon(windowId);
-+//    qDebug()<<"窗口添加:"<<WindowManager::getWindowTitle(windowId)<<" "<<windowId;
-+//    qDebug()<<"窗口添加:icon:"<<WindowManager::getWindowIcon(windowId);
-     if((quint32)getpid() == WindowManager::getPid(windowId))
-     {
-         m_lastestWindowId = windowId;
-@@ -291,6 +295,14 @@ void Widget::initUI()
-     layout11->addStretch();
-     vLayout3->addLayout(layout11);
- 
-+    QHBoxLayout* layout12 = new QHBoxLayout();
-+    m_getCurrentOutputBtn = new QPushButton(tr("GetCurrentOutput"), this);
-+    m_getOutputsInfoBtn = new QPushButton(tr("GetOutputsInfo"), this);
-+    layout12->addWidget(m_getCurrentOutputBtn);
-+    layout12->addWidget(m_getOutputsInfoBtn);
-+    layout12->addStretch();
-+    vLayout3->addLayout(layout12);
-+
-     QHBoxLayout* layout13 = new QHBoxLayout();
-     m_getWindowIdByTitleBtn = new QPushButton("Search",this);
-     m_getWindowIdByTitleEdit = new QLineEdit(this);
-@@ -338,6 +350,22 @@ void Widget::initConnection()
-                <<WindowManager::getWindowIdByTtile(m_getWindowIdByTitleEdit->text());
-     });
- 
-+    connect(m_getCurrentOutputBtn,&::QPushButton::clicked, this, [=](){
-+        qDebug() << "current output name:" << WindowManager::currentOutputName();
-+        qDebug() << "current seat name:" << WindowManager::currentSeatName();
-+    });
-+
-+    connect(m_getOutputsInfoBtn,&::QPushButton::clicked, this, [=](){
-+        QList<OutputInfo*> infos = WindowManager::outputsInfo();
-+        for(auto info : infos)
-+        {
-+            qDebug() << "output name:" << info->outputName();
-+            qDebug() << "output usable area:" << info->usableArea();;
-+        }
-+    });
-+    connect(m_getOutputsInfoBtn,&::QPushButton::clicked, this, [=](){
-+        WindowManager::setIconName(m_subWidget->windowHandle(), "kylin-music");
-+    });
-     connect(m_setIconNameBtn,&::QPushButton::clicked, this, [=](){
-         WindowManager::setIconName(m_subWidget->windowHandle(), "kylin-music");
-     });
-diff --git a/kysdk-waylandhelper/test/testWindowManager/widget.h b/kysdk-waylandhelper/test/testWindowManager/widget.h
-index 92f454d..8d72aee 100644
---- a/kysdk-waylandhelper/test/testWindowManager/widget.h
-+++ b/kysdk-waylandhelper/test/testWindowManager/widget.h
-@@ -94,6 +94,8 @@ private:
-     QSpinBox *m_yOffset;
-     QPushButton* m_setIconNameBtn;
-     QPushButton* m_unsetIconNameBtn;
-+    QPushButton* m_getCurrentOutputBtn;
-+    QPushButton* m_getOutputsInfoBtn;
-     QPushButton* m_getWindowIdByTitleBtn;
-     QLineEdit* m_getWindowIdByTitleEdit;
-     QPushButton* m_getWindowIdByPidBtn;
diff -Nru libkysdk-applications-2.5.1.0/debian/patches/0031-update-changelog.patch libkysdk-applications-2.5.2.0/debian/patches/0031-update-changelog.patch
--- libkysdk-applications-2.5.1.0/debian/patches/0031-update-changelog.patch	2024-07-31 11:09:38.000000000 +0800
+++ libkysdk-applications-2.5.2.0/debian/patches/0031-update-changelog.patch	1970-01-01 08:00:00.000000000 +0800
@@ -1,355 +0,0 @@
-From: sunzhen <sunzhen1@kylinos.cn>
-Date: Tue, 23 Jul 2024 16:45:32 +0800
-Subject: update changelog
-
----
- kysdk-waylandhelper/kysdk-waylandhelper.pro        |   9 --
- .../src/windowmanager/outputinfo.cpp               |   1 -
- .../src/windowmanager/outputusableareamanager.cpp  | 157 ---------------------
- .../src/windowmanager/outputusableareamanager.h    |  43 ------
- .../src/windowmanager/ukuiwaylandinterface.cpp     |  17 ---
- .../src/windowmanager/ukuiwaylandinterface.h       |   2 -
- 6 files changed, 229 deletions(-)
- delete mode 100644 kysdk-waylandhelper/src/windowmanager/outputusableareamanager.cpp
- delete mode 100644 kysdk-waylandhelper/src/windowmanager/outputusableareamanager.h
-
-diff --git a/kysdk-waylandhelper/kysdk-waylandhelper.pro b/kysdk-waylandhelper/kysdk-waylandhelper.pro
-index 9b257d8..06b5959 100644
---- a/kysdk-waylandhelper/kysdk-waylandhelper.pro
-+++ b/kysdk-waylandhelper/kysdk-waylandhelper.pro
-@@ -33,9 +33,6 @@ system(wayland-scanner private-code /usr/share/wayland-protocols/staging/ext-idl
- system(wayland-scanner client-header /usr/share/kylin-wayland-protocols/ukui-blur.xml src/blurmanager/ukui-blur-manager-client-protocol.h)
- system(wayland-scanner private-code /usr/share/kylin-wayland-protocols/ukui-blur.xml src/blurmanager/ukui-blur-manager-core-protocol.c)
- 
--system(wayland-scanner client-header /usr/share/kylin-wayland-protocols/kywc-output-usable-area-v1.xml src/windowmanager/kywc-output-usable-area-v1-protocol.h)
--system(wayland-scanner private-code /usr/share/kylin-wayland-protocols/kywc-output-usable-area-v1.xml src/windowmanager/kywc-output-usable-area-v1-protocol.c)
--
- SOURCES += \
-     src/ukuistylehelper/ukui-decoration-core.c \
-     src/ukuistylehelper/ukui-decoration-manager.cpp \
-@@ -46,7 +43,6 @@ SOURCES += \
-     src/windowmanager/abstractinterface.cpp \
-     src/windowmanager/kdewaylandinterface.cpp \
-     src/windowmanager/outputinfo.cpp \
--    src/windowmanager/outputusableareamanager.cpp \
-     src/windowmanager/ukuiwaylandinterface.cpp \
-     src/windowmanager/xcbinterface.cpp \
-     src/windowmanager/ukuiwindowmanagement.cpp \
-@@ -66,7 +62,6 @@ SOURCES += \
-     src/blurmanager/ukui-blur-manager-core-protocol.c \
-     src/blurmanager/blurwaylandinterface.cpp \
-     src/blurmanager/blurxcbinterface.cpp \
--    src/windowmanager/kywc-output-usable-area-v1-protocol.c
- 
- 
- HEADERS += \
-@@ -79,7 +74,6 @@ HEADERS += \
-     src/windowmanager/abstractinterface.h \
-     src/windowmanager/kdewaylandinterface.h \
-     src/windowmanager/outputinfo.h \
--    src/windowmanager/outputusableareamanager.h \
-     src/windowmanager/xcbinterface.h \
-     src/windowmanager/ukuiwaylandinterface.h \
-     src/windowmanager/ukuiwaylandpointer.h \
-@@ -103,7 +97,6 @@ HEADERS += \
-     src/blurmanager/blurabstractinterface.h \
-     src/blurmanager/blurwaylandinterface.h \
-     src/blurmanager/blurxcbinterface.h \
--    src/windowmanager/kywc-output-usable-area-v1-protocol.h
- 
- # Default rules for deployment.
- headers.files = src/kysdk-waylandhelper_global.h \
-@@ -129,9 +122,7 @@ wm_headers.files = src/windowmanager/abstractinterface.h \
-     src/windowmanager/wayland-xdg-activation-v1-client-protocol.h \
-     src/windowmanager/wayland-ext-idle-notify-v1-client-protocol.h \
-     src/windowmanager/kyatoms_p.h \
--    src/windowmanager/kywc-output-usable-area-v1-protocol.h \
-     src/windowmanager/outputinfo.h \
--    src/windowmanager/outputusableareamanager.h 
-                     
- wm_headers.path = /usr/include/kysdk/applications/windowmanager/
- 
-diff --git a/kysdk-waylandhelper/src/windowmanager/outputinfo.cpp b/kysdk-waylandhelper/src/windowmanager/outputinfo.cpp
-index 9e9d236..08af9af 100644
---- a/kysdk-waylandhelper/src/windowmanager/outputinfo.cpp
-+++ b/kysdk-waylandhelper/src/windowmanager/outputinfo.cpp
-@@ -1,5 +1,4 @@
- #include "outputinfo.h"
--#include "outputusableareamanager.h"
- 
- class Q_DECL_HIDDEN OutputInfo::Private
- {
-diff --git a/kysdk-waylandhelper/src/windowmanager/outputusableareamanager.cpp b/kysdk-waylandhelper/src/windowmanager/outputusableareamanager.cpp
-deleted file mode 100644
-index ffab50f..0000000
---- a/kysdk-waylandhelper/src/windowmanager/outputusableareamanager.cpp
-+++ /dev/null
-@@ -1,157 +0,0 @@
--#include "outputusableareamanager.h"
--#include "ukuiwaylandpointer.h"
--#include "outputinfo.h"
--
--class Q_DECL_HIDDEN OutputUsableAreaManager::Private
--{
--public:
--    Private(OutputUsableAreaManager *q);
--    ~Private();
--
--    UkuiWaylandPointer<kywc_output_usable_area_manager_v1, kywc_output_usable_area_manager_v1_destroy> m_manager;
--    OutputUsableAreaManager *q;
--    static struct kywc_output_usable_area_manager_v1_listener s_listener;
--    QList<OutputInfo*> m_outputsInfo;
--    QStringList m_outputNames;
--    bool m_outputsInfoReady = false;
--
--    void init_listener();
--
--    static void usableAreaCallback(void *data,
--                struct kywc_output_usable_area_manager_v1 *kywc_output_usable_area_manager_v1,
--                const char *name,
--                int32_t x,
--                int32_t y,
--                int32_t width,
--                int32_t height);
--
--    static void doneCallback(void *data,
--             struct kywc_output_usable_area_manager_v1 *kywc_output_usable_area_manager_v1);
--};
--
--kywc_output_usable_area_manager_v1_listener OutputUsableAreaManager::Private::s_listener = {
--    .usable_area = usableAreaCallback,
--    .done = doneCallback
--};
--
--OutputUsableAreaManager::OutputUsableAreaManager(QObject *parent)
--    :QObject(parent),
--     d(new Private(this))
--{
--}
--
--OutputUsableAreaManager::~OutputUsableAreaManager()
--{
--}
--
--bool OutputUsableAreaManager::isValid() const
--{
--    return d->m_manager.isValid();
--}
--
--void OutputUsableAreaManager::release()
--{
--    d->m_manager.release();
--}
--
--void OutputUsableAreaManager::destroy()
--{
--    d->m_manager.destroy();
--}
--
--void OutputUsableAreaManager::setup(kywc_output_usable_area_manager_v1 *manager)
--{
--    d->m_manager.setup(manager);
--    d->init_listener();
--}
--
--OutputUsableAreaManager::operator kywc_output_usable_area_manager_v1 *()
--{
--    return d->m_manager;
--}
--
--bool OutputUsableAreaManager::isOutputsInfoReady()
--{
--    return d->m_outputsInfoReady;
--}
--
--QList<OutputInfo*> OutputUsableAreaManager::outputsInfo()
--{
--    return d->m_outputsInfo;
--}
--
--
--OutputUsableAreaManager::operator kywc_output_usable_area_manager_v1 *() const
--{
--    return d->m_manager;
--}
--
--OutputUsableAreaManager::Private::Private(OutputUsableAreaManager *q)
--    :q(q)
--{
--}
--
--OutputUsableAreaManager::Private::~Private()
--{
--}
--
--void OutputUsableAreaManager::Private::init_listener()
--{
--    kywc_output_usable_area_manager_v1_add_listener(m_manager, &s_listener, this);
--}
--
--void OutputUsableAreaManager::Private::usableAreaCallback(void *data, kywc_output_usable_area_manager_v1 *kywc_output_usable_area_manager_v1, const char *name, int32_t x, int32_t y, int32_t width, int32_t height)
--{
--    Q_UNUSED(kywc_output_usable_area_manager_v1)
--    auto manager = reinterpret_cast<OutputUsableAreaManager::Private *>(data);
--    if(!manager)
--        return;
--
--    QString outputName = QString::fromUtf8(name);
--    QRect usableArea(x, y, width, height);
--
--    OutputInfo* info = new OutputInfo(manager->q);
--    info->setOutputName(outputName);
--    info->setUsableArea(usableArea);
--
--    if(manager->m_outputsInfoReady)
--    {
--        //reset
--        manager->m_outputsInfo.clear();
--        manager->m_outputNames.clear();
--        manager->m_outputsInfoReady = false;
--    }
--
--    if(manager->m_outputNames.contains(outputName))
--    {
--        //update
--        for(int i = 0 ; i < manager->m_outputsInfo.count() ; i++)
--        {
--            if(manager->m_outputsInfo[i]->outputName() == outputName &&
--                manager->m_outputsInfo[i]->usableArea() != usableArea)
--            {
--                manager->m_outputsInfo.replace(i, info);
--                Q_EMIT manager->q->outputInfoChanged(info);
--                break;
--            }
--        }
--    }
--    else
--    {
--        //append
--        manager->m_outputsInfo.append(info);
--        manager->m_outputNames.append(outputName);
--        Q_EMIT  manager->q->outputInfoChanged(info);
--    }
--}
--
--void OutputUsableAreaManager::Private::doneCallback(void *data, kywc_output_usable_area_manager_v1 *kywc_output_usable_area_manager_v1)
--{
--    Q_UNUSED(kywc_output_usable_area_manager_v1)
--
--    auto manager = reinterpret_cast<OutputUsableAreaManager::Private *>(data);
--    if(!manager)
--        return;
--    manager->m_outputsInfoReady = true;
--    Q_EMIT manager->q->outputsInfoReady();
--}
-diff --git a/kysdk-waylandhelper/src/windowmanager/outputusableareamanager.h b/kysdk-waylandhelper/src/windowmanager/outputusableareamanager.h
-deleted file mode 100644
-index 8453f3f..0000000
---- a/kysdk-waylandhelper/src/windowmanager/outputusableareamanager.h
-+++ /dev/null
-@@ -1,43 +0,0 @@
--#ifndef OUTPUTUSABLEAREAMANAGER_H
--#define OUTPUTUSABLEAREAMANAGER_H
--
--#include <QObject>
--#include <QRect>
--#include "kywc-output-usable-area-v1-protocol.h"
--
--class OutputInfo;
--class OutputUsableAreaManager : public QObject
--{
--    Q_OBJECT
--public:
--    explicit OutputUsableAreaManager(QObject *parent = nullptr);
--    ~OutputUsableAreaManager();
--
--    bool isValid() const;
--
--    void release();
--
--    void destroy();
--
--    void setup(kywc_output_usable_area_manager_v1 *manager);
--
--    operator kywc_output_usable_area_manager_v1 *();
--    operator kywc_output_usable_area_manager_v1 *() const;
--
--    QList<OutputInfo*> outputsInfo();
--
--    bool isOutputsInfoReady();
--
--Q_SIGNALS:
--
--    void outputsInfoReady();
--
--    void outputInfoChanged(OutputInfo*);
--
--private:
--    class Private;
--    QScopedPointer<Private> d;
--
--};
--
--#endif // OUTPUTUSABLEAREAMANAGER_H
-diff --git a/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.cpp b/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.cpp
-index f2ac43c..e69d74d 100644
---- a/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.cpp
-+++ b/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.cpp
-@@ -6,7 +6,6 @@
- #include "ukui-shell-client-protocol.h"
- #include "wayland-xdg-activation-v1-client-protocol.h"
- #include "wayland-ext-idle-notify-v1-client-protocol.h"
--#include "kywc-output-usable-area-v1-protocol.h"
- 
- void handle_global(void *data,struct wl_registry *wl_registry,uint32_t name, const char *interface,  uint32_t version)
- {
-@@ -694,11 +693,6 @@ QString UkuiWaylandInterface::currentOutputName()
- 
- QList<OutputInfo *> UkuiWaylandInterface::outputsInfo()
- {
--    QList<OutputInfo *> list;
--    if(!m_outputUsableAreaManager || !m_outputUsableAreaManager->isOutputsInfoReady())
--        return list;
--    else
--        return m_outputUsableAreaManager->outputsInfo();
- }
- 
- QList<WindowId> UkuiWaylandInterface::getWindowIdByPid(quint32 pid)
-@@ -931,17 +925,6 @@ UkuiWindow *UkuiWaylandInterface::windowFor(WindowId wid)
- 
- void UkuiWaylandInterface::handleGlobal(void *data, wl_registry *registry, uint32_t name, const char *interface, uint32_t version)
- {
--   if(strcmp(interface, kywc_output_usable_area_manager_v1_interface.name) == 0)
--   {
--       kywc_output_usable_area_manager_v1* output_usable_area_manager = (kywc_output_usable_area_manager_v1*)wl_registry_bind(registry, name, &kywc_output_usable_area_manager_v1_interface, version);
--       if(output_usable_area_manager)
--       {
--           m_outputUsableAreaManager = new OutputUsableAreaManager(this);
--           m_outputUsableAreaManager->setup(output_usable_area_manager);
--           connect(m_outputUsableAreaManager, &OutputUsableAreaManager::outputInfoChanged,this, &AbstractInterface::outputInfoChanged);
--       }
--   }
--
-     if(strcmp(interface, ext_idle_notifier_v1_interface.name) == 0)
-     {
-         ext_idle_notifier_v1* notifier = (ext_idle_notifier_v1*)wl_registry_bind(registry, name, &ext_idle_notifier_v1_interface, version);
-diff --git a/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.h b/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.h
-index 0b33043..26c9fff 100644
---- a/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.h
-+++ b/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.h
-@@ -30,7 +30,6 @@
- #include "ukuiwindowmanagement.h"
- #include "xdgactivation.h"
- #include "extidlenotifier.h"
--#include "outputusableareamanager.h"
- 
- #include "abstractinterface.h"
- #include "kdewaylandinterface.h"
-@@ -133,7 +132,6 @@ private:
-     XdgActivation *m_xdgActivation = nullptr;
-     XdgActivationToken * m_xdgActivationToken = nullptr;
-     QMap<QWindow*,UkuiShellSurface*>m_ukuiShellSurfaces;
--    OutputUsableAreaManager* m_outputUsableAreaManager = nullptr;
- };
- 
- #endif // UKUIWAYLANDINTERFACE_H
diff -Nru libkysdk-applications-2.5.1.0/debian/patches/0032-Translated-using-Weblate-Kazakh.patch libkysdk-applications-2.5.2.0/debian/patches/0032-Translated-using-Weblate-Kazakh.patch
--- libkysdk-applications-2.5.1.0/debian/patches/0032-Translated-using-Weblate-Kazakh.patch	2024-07-31 11:09:38.000000000 +0800
+++ libkysdk-applications-2.5.2.0/debian/patches/0032-Translated-using-Weblate-Kazakh.patch	1970-01-01 08:00:00.000000000 +0800
@@ -1,25 +0,0 @@
-From: KevinDuan <duankaiwen@kylinos.cn>
-Date: Tue, 23 Jul 2024 12:11:37 +0000
-Subject: Translated using Weblate (Kazakh)
-
-Currently translated at 78.3% (29 of 37 strings)
-
-Translation: openkylin-nile-new/libkysdk-applications
-Translate-URL: http://weblate.openkylin.top/projects/openkylin-nile-new/libkysdk-applications/kk/
----
- kysdk-qtwidgets/translations/gui_kk.ts | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/kysdk-qtwidgets/translations/gui_kk.ts b/kysdk-qtwidgets/translations/gui_kk.ts
-index 9a161ef..4f261e9 100644
---- a/kysdk-qtwidgets/translations/gui_kk.ts
-+++ b/kysdk-qtwidgets/translations/gui_kk.ts
-@@ -140,7 +140,7 @@
-         <location filename="../src/ksearchlineedit.cpp" line="627"/>
-         <location filename="../src/ksearchlineedit.cpp" line="815"/>
-         <source>Search</source>
--        <translation>Іздеу</translation>
-+        <translation>ٸزدەۋ</translation>
-     </message>
- </context>
- <context>
diff -Nru libkysdk-applications-2.5.1.0/debian/patches/0033-Translated-using-Weblate-Kyrgyz.patch libkysdk-applications-2.5.2.0/debian/patches/0033-Translated-using-Weblate-Kyrgyz.patch
--- libkysdk-applications-2.5.1.0/debian/patches/0033-Translated-using-Weblate-Kyrgyz.patch	2024-07-31 11:09:38.000000000 +0800
+++ libkysdk-applications-2.5.2.0/debian/patches/0033-Translated-using-Weblate-Kyrgyz.patch	1970-01-01 08:00:00.000000000 +0800
@@ -1,25 +0,0 @@
-From: KevinDuan <duankaiwen@kylinos.cn>
-Date: Wed, 24 Jul 2024 06:37:10 +0000
-Subject: Translated using Weblate (Kyrgyz)
-
-Currently translated at 78.3% (29 of 37 strings)
-
-Translation: openkylin-nile-new/libkysdk-applications
-Translate-URL: http://weblate.openkylin.top/projects/openkylin-nile-new/libkysdk-applications/ky/
----
- kysdk-qtwidgets/translations/gui_ky.ts | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/kysdk-qtwidgets/translations/gui_ky.ts b/kysdk-qtwidgets/translations/gui_ky.ts
-index e994826..c26c9ed 100644
---- a/kysdk-qtwidgets/translations/gui_ky.ts
-+++ b/kysdk-qtwidgets/translations/gui_ky.ts
-@@ -140,7 +140,7 @@
-         <location filename="../src/ksearchlineedit.cpp" line="627"/>
-         <location filename="../src/ksearchlineedit.cpp" line="815"/>
-         <source>Search</source>
--        <translation>Издөө</translation>
-+        <translation>ىزدۅۅ</translation>
-     </message>
- </context>
- <context>
diff -Nru libkysdk-applications-2.5.1.0/debian/patches/0034-issues-IAAW34-IAAVXG-IAAMFW-I9RX69-I9RX3S.patch libkysdk-applications-2.5.2.0/debian/patches/0034-issues-IAAW34-IAAVXG-IAAMFW-I9RX69-I9RX3S.patch
--- libkysdk-applications-2.5.1.0/debian/patches/0034-issues-IAAW34-IAAVXG-IAAMFW-I9RX69-I9RX3S.patch	2024-07-31 11:09:38.000000000 +0800
+++ libkysdk-applications-2.5.2.0/debian/patches/0034-issues-IAAW34-IAAVXG-IAAMFW-I9RX69-I9RX3S.patch	1970-01-01 08:00:00.000000000 +0800
@@ -1,316 +0,0 @@
-From: =?utf-8?b?546L5oyv5a6H?= <wangzhenyu@kylinos.cn>
-Date: Fri, 26 Jul 2024 14:58:00 +0800
-Subject: issues #IAAW34 #IAAVXG #IAAMFW #I9RX69 #I9RX3S
-
----
- kysdk-qtwidgets/src/kpushbutton.cpp |  23 ++++-
- kysdk-qtwidgets/src/kslider.cpp     | 183 +++++++++++++++++++++++++++---------
- 2 files changed, 158 insertions(+), 48 deletions(-)
-
-diff --git a/kysdk-qtwidgets/src/kpushbutton.cpp b/kysdk-qtwidgets/src/kpushbutton.cpp
-index a4579c8..9758250 100644
---- a/kysdk-qtwidgets/src/kpushbutton.cpp
-+++ b/kysdk-qtwidgets/src/kpushbutton.cpp
-@@ -542,16 +542,35 @@ void KPushButton::paintEvent(QPaintEvent *event)
-     {
-         tf |= Qt::AlignHCenter;
-     }
-+
-+    QFontMetrics fm = option.fontMetrics;
-+
-     if(!this->isEnabled()){
-         qreal opacity = 0.35;
-         fontColor.setAlphaF(opacity);
-         QPen pen ;
-         pen.setColor(fontColor);
-         p.setPen(pen);
--        p.drawText(ir,tf,option.text);
-+        if(option.icon.isNull() && (fm.width(option.text) > option.rect.width() - 10))
-+        {
-+            QString elidedText = fm.elidedText(option.text,Qt::ElideRight,option.rect.width() - 10);
-+            p.drawText(option.rect.adjusted(5,0,-5,0),tf,elidedText);
-+            setToolTip(option.text);
-+        }
-+        else
-+            p.drawText(ir,tf,option.text);
-+
-     }
-     else
--        p.drawText(ir,tf,option.text);
-+    {
-+        if(option.icon.isNull() && (fm.width(option.text) > option.rect.width() - 10)){
-+            QString elidedText = fm.elidedText(option.text,Qt::ElideRight,option.rect.width() - 10);
-+            p.drawText(option.rect.adjusted(5,0,-5,0),tf,elidedText);
-+            setToolTip(option.text);
-+        }
-+        else
-+            p.drawText(ir,tf,option.text);
-+    }
- }
- 
- void KPushButtonPrivate::changeTheme()
-diff --git a/kysdk-qtwidgets/src/kslider.cpp b/kysdk-qtwidgets/src/kslider.cpp
-index f00b787..76e3afe 100644
---- a/kysdk-qtwidgets/src/kslider.cpp
-+++ b/kysdk-qtwidgets/src/kslider.cpp
-@@ -214,8 +214,11 @@ void KSliderPrivate::drawCoverNode(QPainter*painter)
-                     side = m_valuePosition;
-                 else
-                     side = m_animation->currentValue().toInt();
--                if(point.x()<= side)
--                    painter->drawEllipse(point,Parmscontroller::parm(Parmscontroller::Parm::PM_SliderNodeRadius)/2,Parmscontroller::parm(Parmscontroller::Parm::PM_SliderNodeRadius)/2);//选中基点
-+//                if(point.x()<= side)
-+                if(q->layoutDirection() == Qt::LeftToRight && (point.x()<= side))
-+                    painter->drawEllipse(point,Parmscontroller::parm(Parmscontroller::Parm::PM_SliderNodeRadius)/2,Parmscontroller::parm(Parmscontroller::Parm::PM_SliderNodeRadius)/2);
-+                else if(q->layoutDirection() == Qt::RightToLeft && (point.x()>= side))
-+                    painter->drawEllipse(point,Parmscontroller::parm(Parmscontroller::Parm::PM_SliderNodeRadius)/2,Parmscontroller::parm(Parmscontroller::Parm::PM_SliderNodeRadius)/2);
-             }
-         }
-         else
-@@ -334,26 +337,52 @@ void KSliderPrivate::locateNode()
-     if(q->orientation() == Qt::Horizontal)
-     {
-         m_nodes.clear();
--        QPoint beginNode(baseLineRect().left(),q->height()/2);
--        QPoint endNode(baseLineRect().right(),q->height()/2);
--        m_nodes.append(beginNode);
--
--        if(!q->tickInterval())
-+        if(q->layoutDirection() == Qt::LeftToRight)
-         {
-+            QPoint beginNode(baseLineRect().left(),q->height()/2);
-+            QPoint endNode(baseLineRect().right(),q->height()/2);
-+            m_nodes.append(beginNode);
-+
-+            if(!q->tickInterval())
-+            {
-+                m_nodes.append(endNode);
-+                return;
-+            }
-+
-+            for(int i = q->minimum() + q->tickInterval();i < q->maximum();i += q->tickInterval())
-+            {
-+                QPoint point;
-+                int x = baseLineRect().left()+baseLineRect().width()*(i-q->minimum())/(q->maximum()-q->minimum());
-+                int y = q->height()/2;
-+                point.setX(x);
-+                point.setY(y);
-+                m_nodes.append(point);
-+            }
-             m_nodes.append(endNode);
--            return;
-         }
--
--        for(int i = q->minimum() + q->tickInterval();i < q->maximum();i += q->tickInterval())
-+        else
-         {
--            QPoint point;
--            int x = baseLineRect().left()+baseLineRect().width()*(i-q->minimum())/(q->maximum()-q->minimum());
--            int y = q->height()/2;
--            point.setX(x);
--            point.setY(y);
--            m_nodes.append(point);
-+            QPoint beginNode(baseLineRect().right(),q->height()/2);
-+            QPoint endNode(baseLineRect().left(),q->height()/2);
-+            m_nodes.append(beginNode);
-+
-+            if(!q->tickInterval())
-+            {
-+                m_nodes.append(endNode);
-+                return;
-+            }
-+
-+            for(int i = q->minimum() + q->tickInterval();i < q->maximum();i += q->tickInterval())
-+            {
-+                QPoint point;
-+                int x = baseLineRect().right()- baseLineRect().width()*(i-q->minimum())/(q->maximum()-q->minimum());
-+                int y = q->height()/2;
-+                point.setX(x);
-+                point.setY(y);
-+                m_nodes.append(point);
-+            }
-+            m_nodes.append(endNode);
-         }
--        m_nodes.append(endNode);
-     }
-     else
-     {
-@@ -455,9 +484,20 @@ void KSliderPrivate::updateValuePosition()
-     int prePosition = m_valuePosition;
-     if(q->orientation() == Qt::Horizontal)
-     {
--        if(q->maximum() != q->minimum())
--            m_valuePosition =this->baseLineRect().left() +
--                this->baseLineRect().width()*(q->value()-q->minimum())/(q->maximum()-q->minimum());
-+        if(q->layoutDirection() == Qt::LeftToRight)
-+        {
-+            if(q->maximum() != q->minimum())
-+                m_valuePosition =this->baseLineRect().left() +
-+                    this->baseLineRect().width()*(q->value()-q->minimum())/(q->maximum()-q->minimum());
-+        }
-+        else
-+        {
-+            if(q->maximum() != q->minimum())
-+            {
-+                m_valuePosition =this->baseLineRect().adjusted(0,0,1,0).right() -
-+                    this->baseLineRect().width()*(q->value()-q->minimum())/(q->maximum()-q->minimum());
-+            }
-+        }
-     }
-     else
-     {
-@@ -485,13 +525,27 @@ void KSliderPrivate::updateValue()
-     int nodeInterval =q->tickInterval();
-     if(q->orientation() == Qt::Horizontal)
-     {
--        if(m_currentpos.x() > baseLineRect().right())
--            value = q->maximum();
--        else if(m_currentpos.x() < baseLineRect().left())
--            value = q->minimum();
--        pos = qRound(q->minimum()+dur*((double)m_currentpos.x()-baseLineRect().left())/baseLineRect().width());
--        int left = baseLineRect().left();
--        int width = baseLineRect().width();
-+        int left,width,right;
-+        if( q->layoutDirection() == Qt::LeftToRight)
-+        {
-+            if(m_currentpos.x() > baseLineRect().right())
-+                value = q->maximum();
-+            else if(m_currentpos.x() < baseLineRect().left())
-+                value = q->minimum();
-+            pos = qRound(q->minimum()+dur*((double)m_currentpos.x()-baseLineRect().left())/baseLineRect().width());
-+            left = baseLineRect().left();
-+            width = baseLineRect().width();
-+        }
-+        else
-+        {
-+            if(m_currentpos.x() > baseLineRect().right())
-+                value = q->minimum();
-+            else if(m_currentpos.x() < baseLineRect().left())
-+                value = q->maximum();
-+            pos = qRound(q->minimum()-dur*((double)m_currentpos.x()-baseLineRect().right() -1)/baseLineRect().width());
-+            right = baseLineRect().right();
-+            width = baseLineRect().width();
-+        }
-         switch (m_sliderType)
-         {
-         case SingleSelectSlider:
-@@ -502,11 +556,22 @@ void KSliderPrivate::updateValue()
-         {
-             int frontIndex = (pos-q->minimum()) / step;
-             int backIndex = (pos-q->minimum()) / step + 1;
--            if((m_currentpos.x()-left-frontIndex*step*width/dur)
--                    <(backIndex*step*width/dur - (m_currentpos.x()-left)))
--                pos = frontIndex * step + q->minimum();
-+            if( q->layoutDirection() == Qt::LeftToRight)
-+            {
-+                if((m_currentpos.x()-left-frontIndex*step*width/dur)
-+                        <(backIndex*step*width/dur - (m_currentpos.x()-left)))
-+                    pos = frontIndex * step + q->minimum();
-+                else
-+                    pos = backIndex * step + q->minimum();
-+            }
-             else
--                pos = backIndex * step + q->minimum();
-+            {
-+                if((right - m_currentpos.x()-frontIndex*step*width/dur)
-+                        <(backIndex*step*width/dur - (right - m_currentpos.x())))
-+                    pos = frontIndex * step + q->minimum();
-+                else
-+                    pos = backIndex * step + q->minimum();
-+            }
-             value = pos;
-         }
-             break;
-@@ -514,11 +579,22 @@ void KSliderPrivate::updateValue()
-         {
-             int frontIndex = (pos-q->minimum()) / nodeInterval;
-             int backIndex = (pos-q->minimum()) / nodeInterval + 1;
--            if((m_currentpos.x()-left-frontIndex*nodeInterval*width/dur)
--                    <(backIndex*nodeInterval*width/dur - (m_currentpos.x()-left)))
--                pos = frontIndex * nodeInterval + q->minimum();
-+            if( q->layoutDirection() == Qt::LeftToRight)
-+            {
-+                if((m_currentpos.x()-left-frontIndex*nodeInterval*width/dur)
-+                        <(backIndex*nodeInterval*width/dur - (m_currentpos.x()-left)))
-+                    pos = frontIndex * nodeInterval + q->minimum();
-+                else
-+                    pos = backIndex * nodeInterval + q->minimum();
-+            }
-             else
--                pos = backIndex * nodeInterval + q->minimum();
-+            {
-+                if((right - m_currentpos.x()-frontIndex*nodeInterval*width/dur)
-+                        <(backIndex*nodeInterval*width/dur - (right - m_currentpos.x())))
-+                    pos = frontIndex * nodeInterval + q->minimum();
-+                else
-+                    pos = backIndex * nodeInterval + q->minimum();
-+            }
-             value = pos;
-         }
-             break;
-@@ -760,15 +836,30 @@ QRect KSliderPrivate::coverLineRect()
-     QRect rect;
-     if(q->orientation() == Qt::Horizontal)
-     {
--        rect.setBottom(q->height()/2 + line_width/2);
--        rect.setTop(q->height()/2 - line_width/2);
--        rect.setLeft(spaceing + Parmscontroller::parm(Parmscontroller::Parm::PM_SliderHandleRadius)/2);
--        if(m_ismoving)
--            rect.setRight(m_currentpos.x());
--        else if(m_resize)
--        rect.setRight(m_valuePosition);
-+        if(q->layoutDirection() == Qt::LeftToRight)
-+        {
-+            rect.setBottom(q->height()/2 + line_width/2);
-+            rect.setTop(q->height()/2 - line_width/2);
-+            rect.setLeft(1 + Parmscontroller::parm(Parmscontroller::Parm::PM_SliderHandleRadius)/2);
-+            if(m_ismoving)
-+                rect.setRight(m_currentpos.x());
-+            else if(m_resize)
-+                rect.setRight(m_valuePosition);
-+            else
-+                rect.setRight(m_animation->currentValue().toInt());
-+        }
-         else
--            rect.setRight(m_animation->currentValue().toInt());
-+        {
-+            rect.setBottom(q->height()/2 + line_width/2);
-+            rect.setTop(q->height()/2 - line_width/2);
-+            if(m_ismoving)
-+                rect.setLeft(m_currentpos.x());
-+            else if(m_resize)
-+                rect.setLeft(m_valuePosition);
-+            else
-+                rect.setLeft(m_animation->currentValue().toInt());
-+            rect.setRight(q->width() - 1 -Parmscontroller::parm(Parmscontroller::Parm::PM_SliderHandleRadius)/2);
-+        }
-     }
-     else
-     {
-@@ -960,7 +1051,7 @@ void KSlider::mouseReleaseEvent(QMouseEvent *event)
-         if(orientation() == Qt::Horizontal)
-         {
-             if( event->pos().x() >= d->baseLineRect().left() && event->pos().x() <= d->baseLineRect().adjusted(0,0,1,0).right() )
--        d->m_currentpos = event->pos();
-+                d->m_currentpos = event->pos();
-             else if( event->pos().x() < d->baseLineRect().left() )
-                 d->m_currentpos.setX(d->baseLineRect().left());
-             else if( event->pos().x() > d->baseLineRect().adjusted(0,0,1,0).right() )
-@@ -999,7 +1090,7 @@ void KSlider::mouseMoveEvent(QMouseEvent *event)
-         if(orientation() == Qt::Horizontal)
-         {
-             if(event->pos().x() >= d->baseLineRect().left() &&event->pos().x() <= d->baseLineRect().adjusted(0,0,1,0).right())
--        d->m_currentpos = event->pos();
-+                d->m_currentpos = event->pos();
-             else if(event->pos().x() < d->baseLineRect().left())
-                 d->m_currentpos.setX(d->baseLineRect().left());
-             else if(event->pos().x() > d->baseLineRect().adjusted(0,0,1,0).right())
-@@ -1011,7 +1102,7 @@ void KSlider::mouseMoveEvent(QMouseEvent *event)
-         else
-         {
-             if( event->pos().y() >= d->baseLineRect().top() && event->pos().y() <= d->baseLineRect().adjusted(0,0,0,1).bottom() )
--        d->m_currentpos = event->pos();
-+                d->m_currentpos = event->pos();
-             else if( event->pos().y() > d->baseLineRect().adjusted(0,0,0,1).bottom() )
-                 d->m_currentpos.setY(d->baseLineRect().adjusted(0,0,0,1).bottom());
-             else if( event->pos().y() < d->baseLineRect().top() )
diff -Nru libkysdk-applications-2.5.1.0/debian/patches/0035-ui.patch libkysdk-applications-2.5.2.0/debian/patches/0035-ui.patch
--- libkysdk-applications-2.5.1.0/debian/patches/0035-ui.patch	2024-07-31 11:09:38.000000000 +0800
+++ libkysdk-applications-2.5.2.0/debian/patches/0035-ui.patch	1970-01-01 08:00:00.000000000 +0800
@@ -1,126 +0,0 @@
-From: =?utf-8?b?546L5oyv5a6H?= <wangzhenyu@kylinos.cn>
-Date: Mon, 29 Jul 2024 14:42:41 +0800
-Subject: =?utf-8?b?5L+u5q2j5ZOI57u05p+v6K+t6KiA5LiL5a+86Iiq5qCP55qEdWnmlYg=?=
- =?utf-8?b?5p6c?=
-
----
- kysdk-qtwidgets/src/knavigationbar.cpp  | 33 ++++++++++++++++++++++++++-------
- kysdk-qtwidgets/src/kslider.cpp         |  4 ++--
- kysdk-qtwidgets/src/themeController.cpp |  9 +++++++++
- kysdk-qtwidgets/src/themeController.h   |  1 +
- 4 files changed, 38 insertions(+), 9 deletions(-)
-
-diff --git a/kysdk-qtwidgets/src/knavigationbar.cpp b/kysdk-qtwidgets/src/knavigationbar.cpp
-index 3df533c..6cfde61 100644
---- a/kysdk-qtwidgets/src/knavigationbar.cpp
-+++ b/kysdk-qtwidgets/src/knavigationbar.cpp
-@@ -435,7 +435,11 @@ void Delegate::paint(QPainter *painter, const QStyleOptionViewItem &option, cons
-     switch (flag) {
-     case 0://standardItem
-     {
--        QRect iconRect=QRect(rect.x()+16,rect.y()+(rect.height()-16)/2,16,16); //图片大小16*16 左边距16
-+        QRect iconRect;
-+        if(ThemeController::systemLang())
-+            iconRect = QRect(rect.right()-32,rect.y()+(rect.height()-16)/2,16,16); //图片大小16*16 左边距16
-+        else
-+            iconRect = QRect(rect.x()+16,rect.y()+(rect.height()-16)/2,16,16);
-         auto *model =dynamic_cast<QStandardItemModel*>(const_cast<QAbstractItemModel*>(index.model()));
-         auto icon = model->item(index.row())->icon();
- 
-@@ -475,12 +479,23 @@ void Delegate::paint(QPainter *painter, const QStyleOptionViewItem &option, cons
-         }
-         painter->setFont(font);
-         if(!icon.isNull()){
--            painter->drawText(QRect(iconRect.right()+8,rect.y(),
--                                rect.width()-56,rect.height()),Qt::AlignVCenter,elidedText); //文本 图片间距8px
-+            if(ThemeController::systemLang())
-+            {
-+
-+                painter->drawText(QRect(rect.left() + 16,rect.y(),
-+                                    rect.width()-56,rect.height()),Qt::AlignVCenter,elidedText); //文本 图片间距8px
-+            }
-+            else
-+                painter->drawText(QRect(iconRect.right()+8,rect.y(),
-+                                    rect.width()-56,rect.height()),Qt::AlignVCenter,elidedText);
-         }
-         else {
--            painter->drawText(QRect(rect.x()+16,rect.y(),
--                                rect.width()-56,rect.height()),Qt::AlignVCenter,elidedText);
-+            if(ThemeController::systemLang())
-+                painter->drawText(QRect(rect.x() + 16,rect.y(),
-+                                    rect.width() - 56,rect.height()),Qt::AlignVCenter,elidedText);
-+            else
-+                painter->drawText(QRect(rect.x()+16,rect.y(),
-+                                    rect.width()-56,rect.height()),Qt::AlignVCenter,elidedText);
-         }
-         painter->restore();
-         break;
-@@ -514,8 +529,12 @@ void Delegate::paint(QPainter *painter, const QStyleOptionViewItem &option, cons
-             painter->setPen(color);
-         }
-         painter->setFont(font);
--        painter->drawText(QRect(iconRect.right()+8,rect.y(),
--                                rect.width()-56,rect.height()),Qt::AlignVCenter,elidedText); //文本 图片间距8px
-+        if(ThemeController::systemLang())
-+            painter->drawText(QRect(rect.x() + 16,rect.y(),
-+                                rect.width() - 56,rect.height()),Qt::AlignVCenter,elidedText); //文本 图片间距8px
-+        else
-+            painter->drawText(QRect(iconRect.right()+8,rect.y(),
-+                                    rect.width()-56,rect.height()),Qt::AlignVCenter,elidedText);
-         painter->restore();
-         break;
-     }
-diff --git a/kysdk-qtwidgets/src/kslider.cpp b/kysdk-qtwidgets/src/kslider.cpp
-index 76e3afe..a8313eb 100644
---- a/kysdk-qtwidgets/src/kslider.cpp
-+++ b/kysdk-qtwidgets/src/kslider.cpp
-@@ -840,7 +840,7 @@ QRect KSliderPrivate::coverLineRect()
-         {
-             rect.setBottom(q->height()/2 + line_width/2);
-             rect.setTop(q->height()/2 - line_width/2);
--            rect.setLeft(1 + Parmscontroller::parm(Parmscontroller::Parm::PM_SliderHandleRadius)/2);
-+            rect.setLeft(spaceing + Parmscontroller::parm(Parmscontroller::Parm::PM_SliderHandleRadius)/2);
-             if(m_ismoving)
-                 rect.setRight(m_currentpos.x());
-             else if(m_resize)
-@@ -858,7 +858,7 @@ QRect KSliderPrivate::coverLineRect()
-                 rect.setLeft(m_valuePosition);
-             else
-                 rect.setLeft(m_animation->currentValue().toInt());
--            rect.setRight(q->width() - 1 -Parmscontroller::parm(Parmscontroller::Parm::PM_SliderHandleRadius)/2);
-+            rect.setRight(q->width() - spaceing -Parmscontroller::parm(Parmscontroller::Parm::PM_SliderHandleRadius)/2);
-         }
-     }
-     else
-diff --git a/kysdk-qtwidgets/src/themeController.cpp b/kysdk-qtwidgets/src/themeController.cpp
-index 4c405fd..d9f4fc5 100644
---- a/kysdk-qtwidgets/src/themeController.cpp
-+++ b/kysdk-qtwidgets/src/themeController.cpp
-@@ -418,6 +418,15 @@ QColor ThemeController::buttonDarkClick(bool isDark, QPalette p)
- //    }
- //}
- 
-+bool ThemeController::systemLang()
-+{
-+    QString systemLang = QLocale::system().name();
-+    if(systemLang == "ug_CN" || systemLang == "ky_KG" || systemLang == "KK_KZ")
-+        return true;
-+    else
-+        return false;
-+}
-+
- ThemeController::ThemeController()
-     :m_gsetting(nullptr)
- {
-diff --git a/kysdk-qtwidgets/src/themeController.h b/kysdk-qtwidgets/src/themeController.h
-index c1286a5..7943178 100644
---- a/kysdk-qtwidgets/src/themeController.h
-+++ b/kysdk-qtwidgets/src/themeController.h
-@@ -70,6 +70,7 @@ public:
-     static QColor buttonDarkClick(bool isDark, QPalette p) ;
- //    static void normalButtonColor(bool isDark, QPalette p, QPen &defaultPen, QBrush &defaultBrush,  QPen &hoverPen, QBrush &hoverBrush,
- //                            QPen &clickPen, QBrush &clickBrush,  QPen &disablePen, QBrush &disableBrush);
-+    static bool systemLang();
- 
-     ThemeController();
-     ~ThemeController();
diff -Nru libkysdk-applications-2.5.1.0/debian/patches/0036-update-changelog.patch libkysdk-applications-2.5.2.0/debian/patches/0036-update-changelog.patch
--- libkysdk-applications-2.5.1.0/debian/patches/0036-update-changelog.patch	2024-07-31 11:09:38.000000000 +0800
+++ libkysdk-applications-2.5.2.0/debian/patches/0036-update-changelog.patch	1970-01-01 08:00:00.000000000 +0800
@@ -1,21 +0,0 @@
-From: =?utf-8?b?546L5oyv5a6H?= <wangzhenyu@kylinos.cn>
-Date: Tue, 30 Jul 2024 10:42:55 +0800
-Subject: update changelog
-
----
- kysdk-qtwidgets/src/themeController.cpp | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/kysdk-qtwidgets/src/themeController.cpp b/kysdk-qtwidgets/src/themeController.cpp
-index d9f4fc5..526f415 100644
---- a/kysdk-qtwidgets/src/themeController.cpp
-+++ b/kysdk-qtwidgets/src/themeController.cpp
-@@ -421,7 +421,7 @@ QColor ThemeController::buttonDarkClick(bool isDark, QPalette p)
- bool ThemeController::systemLang()
- {
-     QString systemLang = QLocale::system().name();
--    if(systemLang == "ug_CN" || systemLang == "ky_KG" || systemLang == "KK_KZ")
-+    if(systemLang == "ug_CN" || systemLang == "ky_KG" || systemLang == "kk_KZ")
-         return true;
-     else
-         return false;
diff -Nru libkysdk-applications-2.5.1.0/debian/patches/0037-ui.patch libkysdk-applications-2.5.2.0/debian/patches/0037-ui.patch
--- libkysdk-applications-2.5.1.0/debian/patches/0037-ui.patch	2024-07-31 11:09:38.000000000 +0800
+++ libkysdk-applications-2.5.2.0/debian/patches/0037-ui.patch	1970-01-01 08:00:00.000000000 +0800
@@ -1,234 +0,0 @@
-From: sunzhen <sunzhen1@kylinos.cn>
-Date: Wed, 31 Jul 2024 10:32:09 +0800
-Subject: =?utf-8?b?5L+u5q2j57u05ZOI5p+v6K+t6KiA5LiL6YOo5YiG5o6n5Lu2dWnmmL4=?=
- =?utf-8?b?56S6?=
-
----
- kysdk-qtwidgets/src/kbreadcrumb.cpp   | 33 +++++++++++++++-----
- kysdk-qtwidgets/src/kpasswordedit.cpp | 31 +++++++++++++++----
- kysdk-qtwidgets/src/kprogressbar.cpp  | 12 ++++++--
- kysdk-qtwidgets/src/kswitchbutton.cpp |  1 -
- kysdk-qtwidgets/src/ktabbar.cpp       | 58 ++++++++++++++++++++++++++---------
- 5 files changed, 104 insertions(+), 31 deletions(-)
-
-diff --git a/kysdk-qtwidgets/src/kbreadcrumb.cpp b/kysdk-qtwidgets/src/kbreadcrumb.cpp
-index 11fc89b..e31423f 100644
---- a/kysdk-qtwidgets/src/kbreadcrumb.cpp
-+++ b/kysdk-qtwidgets/src/kbreadcrumb.cpp
-@@ -133,17 +133,34 @@ void KBreadCrumb::paintEvent(QPaintEvent *event)
-             p.setPen(baseColor);
-         p.setBrush(Qt::NoBrush);
- 
--        if(i == 0 && !d->m_icon.isNull())
-+        if(layoutDirection() == Qt::LeftToRight)
-         {
--            p.drawPixmap(rc.left()+10,(rc.height()-24)/2,24,24,
--                         d->m_icon.pixmap(24,24));
--            p.drawText(rc.adjusted(30,0,-24,0),Qt::AlignCenter,tabText(i));
-+            if(i == 0 && !d->m_icon.isNull())
-+            {
-+                p.drawPixmap(rc.left()+10,(rc.height()-24)/2,24,24,
-+                             d->m_icon.pixmap(24,24));
-+                p.drawText(rc.adjusted(30,0,-24,0),Qt::AlignCenter,tabText(i));
-+            }
-+            else
-+                p.drawText(rc.adjusted(0,0,-24,0),Qt::AlignCenter,tabText(i));
-+            if(i != count()-1)
-+                p.drawPixmap(rc.right()-24,(rc.height()-16)/2,16,16,
-+                             ThemeController::drawColoredPixmap(QIcon::fromTheme("ukui-end-symbolic").pixmap(16,16),baseColor));
-         }
-         else
--            p.drawText(rc.adjusted(0,0,-24,0),Qt::AlignCenter,tabText(i));
--        if(i != count()-1)
--            p.drawPixmap(rc.right()-24,(rc.height()-16)/2,16,16,
--                         ThemeController::drawColoredPixmap(QIcon::fromTheme("ukui-end-symbolic").pixmap(16,16),baseColor));
-+        {
-+            if(i == 0 && !d->m_icon.isNull())
-+            {
-+                p.drawPixmap(rc.right()-34,(rc.height()-24)/2,24,24,
-+                             d->m_icon.pixmap(24,24));
-+                p.drawText(rc.adjusted(24,0,-30,0),Qt::AlignCenter,tabText(i));
-+            }
-+            else
-+                p.drawText(rc.adjusted(24,0,0,0),Qt::AlignCenter,tabText(i));
-+            if(i != count()-1)
-+                p.drawPixmap(rc.left()+8,(rc.height()-16)/2,16,16,
-+                             ThemeController::drawColoredPixmap(QIcon::fromTheme("ukui-start-symbolic").pixmap(16,16),baseColor));
-+        }
-     }
- }
- 
-diff --git a/kysdk-qtwidgets/src/kpasswordedit.cpp b/kysdk-qtwidgets/src/kpasswordedit.cpp
-index 07f57a0..196adfe 100644
---- a/kysdk-qtwidgets/src/kpasswordedit.cpp
-+++ b/kysdk-qtwidgets/src/kpasswordedit.cpp
-@@ -351,10 +351,21 @@ KPasswordEditPrivate::KPasswordEditPrivate(KPasswordEdit *parent)
-     m_pWidgetLayout = new QHBoxLayout(m_pWidget);
-     m_pWidgetLayout->setContentsMargins(0,0,0,0);
-     m_pWidgetLayout->setSpacing(5);
--    m_pWidgetLayout->addWidget(m_pLoadingBtn);
--    m_pWidgetLayout->addWidget(m_pClearBtn);
--    m_pWidgetLayout->addWidget(m_pEchoModeBtn);
--    m_pWidgetLayout->addSpacing(5);
-+    if(ThemeController::systemLang())
-+    {
-+        m_pWidgetLayout->addSpacing(5);
-+        m_pWidgetLayout->addWidget(m_pEchoModeBtn);
-+        m_pWidgetLayout->addWidget(m_pClearBtn);
-+        m_pWidgetLayout->addWidget(m_pLoadingBtn);
-+
-+    }
-+    else
-+    {
-+        m_pWidgetLayout->addWidget(m_pLoadingBtn);
-+        m_pWidgetLayout->addWidget(m_pClearBtn);
-+        m_pWidgetLayout->addWidget(m_pEchoModeBtn);
-+        m_pWidgetLayout->addSpacing(5);
-+    }
-     m_pWidget->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed);
-     setParent(parent);
- }
-@@ -371,8 +382,16 @@ void KPasswordEditPrivate::adjustLayout()
-     if(!m_pLoadingBtn->isHidden())
-         width +=(spacing + m_pLoadingBtn->iconSize().width());
-     m_pWidget->setFixedSize(width,q->height());
--    m_pWidget->move(q->width()-m_pWidget->width(),0);
--    q->setTextMargins(0,0,m_pWidget->width(),0);
-+    if(ThemeController::systemLang())
-+    {
-+        m_pWidget->move(spacing,0);
-+        q->setTextMargins(m_pWidget->width(),0,0,0);
-+    }
-+    else
-+    {
-+        m_pWidget->move(q->width()-m_pWidget->width(),0);
-+        q->setTextMargins(0,0,m_pWidget->width(),0);
-+    }
- }
- 
- void KPasswordEditPrivate::repaintIcon()
-diff --git a/kysdk-qtwidgets/src/kprogressbar.cpp b/kysdk-qtwidgets/src/kprogressbar.cpp
-index 8d6e695..fb03b85 100644
---- a/kysdk-qtwidgets/src/kprogressbar.cpp
-+++ b/kysdk-qtwidgets/src/kprogressbar.cpp
-@@ -452,7 +452,12 @@ void KProgressBarPrivate::calculateTextRect()
-             if(q->alignment() & Qt::AlignCenter)
-                 return;
-             else
--                m_textRect.moveRight(q->rect().right());
-+            {
-+                if(ThemeController::systemLang())
-+                    m_textRect.moveLeft(q->rect().left());
-+                else
-+                    m_textRect.moveRight(q->rect().right());
-+            }
-         }
-         else
-         {
-@@ -482,7 +487,10 @@ void KProgressBarPrivate::calculateRect() //背景矩形
-                 return;
-             else
-             {
--                m_rect.setRight(q->rect().width() - margins.right() - m_textRect.width()/*-gSpace*/);
-+                if(ThemeController::systemLang())
-+                    m_rect.setLeft(margins.right() + m_textRect.width()/*-gSpace*/);
-+                else
-+                    m_rect.setRight(q->rect().width() - margins.right() - m_textRect.width()/*-gSpace*/);
-             }
-         }
-     }
-diff --git a/kysdk-qtwidgets/src/kswitchbutton.cpp b/kysdk-qtwidgets/src/kswitchbutton.cpp
-index 2b9ed53..de900d0 100644
---- a/kysdk-qtwidgets/src/kswitchbutton.cpp
-+++ b/kysdk-qtwidgets/src/kswitchbutton.cpp
-@@ -504,7 +504,6 @@ void KSwitchButtonPrivate::drawSlider(QPainter *painter)
-         int sliderWidth = q->height() - m_space - 1 ;
- 
-         QRect sliderRect(m_startX + m_space/2, m_space/2, sliderWidth, sliderWidth);
--        qDebug()<<"xxxx"<<sliderWidth;
-         if(painter->pen().width() == 1)
-             painter->translate(0.5,0.5);
-         painter->drawRect(sliderRect);
-diff --git a/kysdk-qtwidgets/src/ktabbar.cpp b/kysdk-qtwidgets/src/ktabbar.cpp
-index 88cb9c8..6568056 100644
---- a/kysdk-qtwidgets/src/ktabbar.cpp
-+++ b/kysdk-qtwidgets/src/ktabbar.cpp
-@@ -370,13 +370,26 @@ void KTabBar::paintEvent(QPaintEvent *event)
-                 }
-                 else
-                 {
--                    path.moveTo(tempRect.topLeft() + QPointF(0, d->m_borderRadius));
--                    path.lineTo(tempRect.bottomLeft() - QPointF(0, d->m_borderRadius));
--                    path.quadTo(tempRect.bottomLeft(), tempRect.bottomLeft() + QPointF(d->m_borderRadius, 0));
--                    path.lineTo(tempRect.bottomRight());
--                    path.lineTo(tempRect.topRight());
--                    path.lineTo(tempRect.topLeft() + QPointF(d->m_borderRadius, 0));
--                    path.quadTo(tempRect.topLeft(), tempRect.topLeft() + QPointF(0, d->m_borderRadius));
-+                    if(layoutDirection() == Qt::LeftToRight)
-+                    {
-+                        path.moveTo(tempRect.topLeft() + QPointF(0, d->m_borderRadius));
-+                        path.lineTo(tempRect.bottomLeft() - QPointF(0, d->m_borderRadius));
-+                        path.quadTo(tempRect.bottomLeft(), tempRect.bottomLeft() + QPointF(d->m_borderRadius, 0));
-+                        path.lineTo(tempRect.bottomRight());
-+                        path.lineTo(tempRect.topRight());
-+                        path.lineTo(tempRect.topLeft() + QPointF(d->m_borderRadius, 0));
-+                        path.quadTo(tempRect.topLeft(), tempRect.topLeft() + QPointF(0, d->m_borderRadius));
-+                    }
-+                    else
-+                    {
-+                        path.moveTo(tempRect.topLeft());
-+                        path.lineTo(tempRect.bottomLeft());
-+                        path.lineTo(tempRect.bottomRight() - QPointF(d->m_borderRadius,0));
-+                        path.quadTo(tempRect.bottomRight(), tempRect.bottomRight() - QPointF(0,d->m_borderRadius));
-+                        path.lineTo(tempRect.topRight() + QPointF(0,d->m_borderRadius));
-+                        path.quadTo(tempRect.topRight(), tempRect.topRight() - QPointF(d->m_borderRadius,0));
-+                        path.lineTo(tempRect.topLeft());
-+                    }
-                 }
-                 p.drawPath(path);
-                 p.restore();
-@@ -409,6 +422,10 @@ void KTabBar::paintEvent(QPaintEvent *event)
-                     if (option.direction == Qt::RightToLeft)
-                         point.rx() += w;
- 
-+                    p.setBrush(Qt::red);
-+                    p.drawRect(option.rect.x()+4,this->style()->visualPos(option.direction, option.rect, point).y(),pixmap.width(),pixmap.height());
-+                    p.setBrush(Qt::NoBrush);
-+
-                     if(fm.width(tabText(i)) >= option.rect.width()-option.iconSize.width()-7)
-                         p.drawPixmap(option.rect.x()+4,this->style()->visualPos(option.direction, option.rect, point).y(), pixmap);
-                     else
-@@ -477,13 +494,26 @@ void KTabBar::paintEvent(QPaintEvent *event)
-                 }
-                 else
-                 {
--                    path.moveTo(rect.topLeft());
--                    path.lineTo(rect.bottomLeft());
--                    path.lineTo(rect.bottomRight() - QPointF(d->m_borderRadius,0));
--                    path.quadTo(rect.bottomRight(), rect.bottomRight() - QPointF(0, d->m_borderRadius));
--                    path.lineTo(rect.topRight() + QPointF(0, d->m_borderRadius));
--                    path.quadTo(rect.topRight(), rect.topRight() - QPointF(d->m_borderRadius,0));
--                    path.lineTo(rect.topLeft());
-+                    if(layoutDirection() == Qt::LeftToRight)
-+                    {
-+                        path.moveTo(rect.topLeft());
-+                        path.lineTo(rect.bottomLeft());
-+                        path.lineTo(rect.bottomRight() - QPointF(d->m_borderRadius,0));
-+                        path.quadTo(rect.bottomRight(), rect.bottomRight() - QPointF(0, d->m_borderRadius));
-+                        path.lineTo(rect.topRight() + QPointF(0, d->m_borderRadius));
-+                        path.quadTo(rect.topRight(), rect.topRight() - QPointF(d->m_borderRadius,0));
-+                        path.lineTo(rect.topLeft());
-+                    }
-+                    else
-+                    {
-+                        path.moveTo(rect.topLeft() + QPointF(0, d->m_borderRadius));
-+                        path.lineTo(rect.bottomLeft() - QPointF(0, d->m_borderRadius));
-+                        path.quadTo(rect.bottomLeft(), rect.bottomLeft() + QPointF(d->m_borderRadius, 0));
-+                        path.lineTo(rect.bottomRight());
-+                        path.lineTo(rect.topRight());
-+                        path.lineTo(rect.topLeft() + QPointF(d->m_borderRadius, 0));
-+                        path.quadTo(rect.topLeft(), rect.topLeft() + QPointF(0, d->m_borderRadius));
-+                    }
-                 }
-                 p.drawPath(path);
-                 p.restore();
diff -Nru libkysdk-applications-2.5.1.0/debian/patches/0038-ui.patch libkysdk-applications-2.5.2.0/debian/patches/0038-ui.patch
--- libkysdk-applications-2.5.1.0/debian/patches/0038-ui.patch	2024-07-31 11:09:38.000000000 +0800
+++ libkysdk-applications-2.5.2.0/debian/patches/0038-ui.patch	1970-01-01 08:00:00.000000000 +0800
@@ -1,40 +0,0 @@
-From: =?utf-8?b?546L5oyv5a6H?= <wangzhenyu@kylinos.cn>
-Date: Wed, 31 Jul 2024 10:53:13 +0800
-Subject: =?utf-8?b?5L+u5q2j5a+G56CB5qGG5Zyo57u05ZOI5p+v6K+t6KiA5LiL5a2Y5Zyo?=
- =?utf-8?b?6buY6K6k5a+G56CB5pe255qEdWnpl67popg=?=
-
----
- kysdk-qtwidgets/src/kpasswordedit.cpp | 19 ++++++-------------
- 1 file changed, 6 insertions(+), 13 deletions(-)
-
-diff --git a/kysdk-qtwidgets/src/kpasswordedit.cpp b/kysdk-qtwidgets/src/kpasswordedit.cpp
-index 196adfe..3665feb 100644
---- a/kysdk-qtwidgets/src/kpasswordedit.cpp
-+++ b/kysdk-qtwidgets/src/kpasswordedit.cpp
-@@ -352,20 +352,13 @@ KPasswordEditPrivate::KPasswordEditPrivate(KPasswordEdit *parent)
-     m_pWidgetLayout->setContentsMargins(0,0,0,0);
-     m_pWidgetLayout->setSpacing(5);
-     if(ThemeController::systemLang())
--    {
--        m_pWidgetLayout->addSpacing(5);
--        m_pWidgetLayout->addWidget(m_pEchoModeBtn);
--        m_pWidgetLayout->addWidget(m_pClearBtn);
--        m_pWidgetLayout->addWidget(m_pLoadingBtn);
--
--    }
-+        m_pWidget->setLayoutDirection(Qt::RightToLeft);
-     else
--    {
--        m_pWidgetLayout->addWidget(m_pLoadingBtn);
--        m_pWidgetLayout->addWidget(m_pClearBtn);
--        m_pWidgetLayout->addWidget(m_pEchoModeBtn);
--        m_pWidgetLayout->addSpacing(5);
--    }
-+        m_pWidget->setLayoutDirection(Qt::LeftToRight);
-+    m_pWidgetLayout->addWidget(m_pLoadingBtn);
-+    m_pWidgetLayout->addWidget(m_pClearBtn);
-+    m_pWidgetLayout->addWidget(m_pEchoModeBtn);
-+    m_pWidgetLayout->addSpacing(5);
-     m_pWidget->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed);
-     setParent(parent);
- }
diff -Nru libkysdk-applications-2.5.1.0/debian/patches/series libkysdk-applications-2.5.2.0/debian/patches/series
--- libkysdk-applications-2.5.1.0/debian/patches/series	2024-07-31 11:09:38.000000000 +0800
+++ libkysdk-applications-2.5.2.0/debian/patches/series	2025-03-17 13:09:05.000000000 +0800
@@ -1,38 +1,11 @@
 0001-update-changelog.patch
 0002-update-changelog.patch
 0003-update-changelog.patch
-0004-Translated-using-Weblate-Uyghur.patch
+0004-update-changelog.patch
 0005-update-changelog.patch
-0006-Translated-using-Weblate-Uyghur.patch
-0007-Translated-using-Weblate-Uyghur.patch
-0008-adapt-to-new-version-of-KF5.patch
-0009-fix-a-critical-bug.patch
-0010-update-changelog.patch
-0011-update-changelog.patch
-0012-add-highlight-interface.patch
-0013-Translated-using-Weblate-Uyghur.patch
-0014-adapt-to-new-ukui-blur-protocol.patch
-0015-add-openUnderCursor-interface.patch
-0016-test-fix-window-type.patch
-0017-modify-the-method-of-getting-wl_compositor.patch
-0018-clean-debug-path.patch
-0019-add-interface-of-setiing-opened-under-cursor-with-of.patch
-0020-fix-a-bug-of-demo.patch
-0021-40-change-env-judgement.patch
-0022-Translated-using-Weblate-Kyrgyz.patch
-0023-update-changelog.patch
-0024-update-changelog.patch
-0025-Translated-using-Weblate-Kyrgyz.patch
-0026-add-interface-of-getting-output-info.patch
-0027-add-interface-of-gettting-windowId-by-pid-and-by-tit.patch
-0028-update-changelog.patch
-0029-remove-ukuishell-listener.patch
-0030-update-changelog.patch
-0031-update-changelog.patch
-0032-Translated-using-Weblate-Kazakh.patch
-0033-Translated-using-Weblate-Kyrgyz.patch
-0034-issues-IAAW34-IAAVXG-IAAMFW-I9RX69-I9RX3S.patch
-0035-ui.patch
-0036-update-changelog.patch
-0037-ui.patch
-0038-ui.patch
+0006-update-changelog.patch
+0007-.patch
+0008-DT.patch
+0009-41.patch
+0010-42-add-ukui-window-helper-module-based-ukuishellv1-p.patch
+0011-UkuiWindowHelper.patch
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/image/ukui-semantics-symbolic.svg libkysdk-applications-2.5.2.0/kysdk-qtwidgets/image/ukui-semantics-symbolic.svg
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/image/ukui-semantics-symbolic.svg	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/image/ukui-semantics-symbolic.svg	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,5 @@
+<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M13.8206 9.46829C14.0583 8.8439 14.9417 8.8439 15.1794 9.46829L15.6398 10.6774C15.935 11.4527 16.5473 12.065 17.3226 12.3602L18.5317 12.8206C19.1561 13.0583 19.1561 13.9417 18.5317 14.1794L17.3226 14.6398C16.5473 14.935 15.935 15.5473 15.6398 16.3226L15.1794 17.5317C14.9417 18.1561 14.0583 18.1561 13.8206 17.5317L13.3602 16.3226C13.065 15.5473 12.4527 14.935 11.6774 14.6398L10.4683 14.1794C9.8439 13.9417 9.8439 13.0583 10.4683 12.8206L11.6774 12.3602C12.4527 12.065 13.065 11.4527 13.3602 10.6774L13.8206 9.46829Z" fill="#777777"/>
+<path d="M7.97157 5.36423C8.15649 4.87859 8.84351 4.87859 9.02843 5.36423L9.38652 6.30463C9.61613 6.90764 10.0924 7.38387 10.6954 7.61348L11.6358 7.97157C12.1214 8.15649 12.1214 8.84351 11.6358 9.02843L10.6954 9.38652C10.0924 9.61613 9.61613 10.0924 9.38652 10.6954L9.02843 11.6358C8.84351 12.1214 8.15649 12.1214 7.97157 11.6358L7.61348 10.6954C7.38387 10.0924 6.90764 9.61613 6.30463 9.38652L5.36423 9.02843C4.87859 8.84351 4.87859 8.15649 5.36423 7.97157L6.30463 7.61348C6.90764 7.38387 7.38387 6.90764 7.61348 6.30463L7.97157 5.36423Z" fill="#777777"/>
+<path d="M7.12255 14.2602C7.25464 13.9133 7.74536 13.9133 7.87745 14.2602L8.13323 14.9319C8.29723 15.3626 8.6374 15.7028 9.06812 15.8668L9.73984 16.1226C10.0867 16.2546 10.0867 16.7454 9.73984 16.8774L9.06812 17.1332C8.6374 17.2972 8.29723 17.6374 8.13323 18.0681L7.87745 18.7398C7.74536 19.0867 7.25464 19.0867 7.12255 18.7398L6.86677 18.0681C6.70277 17.6374 6.3626 17.2972 5.93188 17.1332L5.26016 16.8774C4.91328 16.7454 4.91328 16.2546 5.26016 16.1226L5.93188 15.8668C6.3626 15.7028 6.70276 15.3626 6.86677 14.9319L7.12255 14.2602Z" fill="#777777"/>
+</svg>
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/kysdk-qtwidgets.pro libkysdk-applications-2.5.2.0/kysdk-qtwidgets/kysdk-qtwidgets.pro
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/kysdk-qtwidgets.pro	2024-05-16 09:25:54.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/kysdk-qtwidgets.pro	2024-10-29 15:22:42.000000000 +0800
@@ -1,4 +1,4 @@
-QT += widgets core sql x11extras KWindowSystem dbus
+QT += widgets core sql x11extras KWindowSystem dbus svg
 
 TEMPLATE = lib
 DEFINES += GUI_LIBRARY
@@ -40,102 +40,158 @@
                 ./translations/gui_ky.ts
 
 SOURCES += \
-    src/parmscontroller.cpp\
-    src/kbreadcrumb.cpp \
-    src/kcolorcombobox.cpp \
-    src/kpasswordedit.cpp \
-    src/kpixmapcontainer.cpp \
-    src/kprogressbar.cpp \
-    src/kprogresscircle.cpp \
-    src/ksecuritylevelbar.cpp \
+    src/kaboutdialog.cpp \
+    src/kaddfilebutton.cpp \
+    src/karrowtabbar.cpp \
+    src/kbackgroundgroup.cpp\
     src/kbadge.cpp \
     src/kballontip.cpp \
-    src/kdialog.cpp \
+    src/kborderbutton.cpp \
+    src/kborderlessbutton.cpp \
+    src/kbreadcrumb.cpp \
+    src/kbubblewidget.cpp\
+    src/kbuttonbox.cpp\
+    src/kclocktimer.cpp \
+    src/kcolorbutton.cpp\
+    src/kcolorcombobox.cpp \
+    src/kcomboboxwidget.cpp \
     src/kcommentpanel.cpp \
+    src/kcrumb.cpp \
+    src/kcustomdateedit.cpp \
+    src/kcustomtabbar.cpp \
+    src/kdialog.cpp \
+    src/kdirtabbar.cpp \
+    src/kdragwidget.cpp \
+    src/kfilewidget.cpp \
     src/kiconbar.cpp \
     src/kinputdialog.cpp \
+    src/kintrowidget.cpp \
+    src/kitemwidget.cpp\
+    src/klabel.cpp \
+    src/klineedit.cpp \
+    src/klineframe.cpp\
+    src/klistview.cpp\
+    src/klistviewdelegate.cpp\
+    src/klistwidget.cpp\
+    src/kloopplaypage.cpp \
+    src/klunarcalendarinfo.cpp \
+    src/klunardateedit.cpp \
     src/kmenubutton.cpp \
+    src/kmessagebox.cpp\
+    src/kminicalendaritem.cpp \
+    src/kminicalendarwidget.cpp \
+    src/knativetabbar.cpp \
     src/knavigationbar.cpp \
+    src/knavigationtrail.cpp \
+    src/kpasswordedit.cpp \
+    src/kpixmapcontainer.cpp \
+    src/kpressbutton.cpp\
+    src/kprogressbar.cpp \
+    src/kprogresscircle.cpp \
     src/kprogressdialog.cpp \
+    src/kprogresslabel.cpp \
+    src/kpushbutton.cpp\
     src/ksearchlineedit.cpp \
+    src/ksecuritylevelbar.cpp \
+    src/ksecurityquestiondialog.cpp \
+    src/kshadowhelper.cpp\
     src/kslider.cpp \
+    src/kswitchbutton.cpp \
+    src/ktabbar.cpp \
+    src/ktableheaderview.cpp \
+    src/ktablemodel.cpp \
+    src/ktableview.cpp \
     src/ktag.cpp \
+    src/ktextedit.cpp \
+    src/ktexteditor.cpp \
+    src/ktitlewindow.cpp \
+    src/ktoolbar.cpp \
     src/ktoolbutton.cpp \
-    src/kwindowbuttonbar.cpp \
+    src/ktranslucentfloor.cpp\
     src/kuninstalldialog.cpp \
     src/kwidget.cpp \
+    src/kwindowbuttonbar.cpp \
+    src/parmscontroller.cpp\
     src/themeController.cpp \
-    src/kaboutdialog.cpp \
-    src/kborderbutton.cpp \
-    src/kborderlessbutton.cpp \
-    src/kswitchbutton.cpp \
-    src/ktabbar.cpp \
-    src/xatom-helper.cpp\
-    src/kitemwidget.cpp\
-    src/klistwidget.cpp\
-	src/klistview.cpp\
-    src/klistviewdelegate.cpp\
-    src/kshadowhelper.cpp\
-    src/kpressbutton.cpp\
-    src/kpushbutton.cpp\
-    src/ktranslucentfloor.cpp\
-    src/kbubblewidget.cpp\
-    src/kbuttonbox.cpp\
-    src/kbackgroundgroup.cpp\
-    src/klineframe.cpp\
-    src/kcolorbutton.cpp\
-    src/kmessagebox.cpp\
-    src/kdragwidget.cpp
+    src/xatom-helper.cpp
 
 HEADERS += \
-    src/parmscontroller.h\
-    src/kbreadcrumb.h \
-    src/kcolorcombobox.h \
-    src/kpasswordedit.h \
-    src/kpixmapcontainer.h \
-    src/kprogressbar.h \
-    src/kprogresscircle.h \
-    src/ksecuritylevelbar.h \
+    src/gui_g.h \
+    src/kaboutdialog.h \
+    src/kaddfilebutton.h \
+    src/karrowtabbar.h \
+    src/kbackgroundgroup.h\
     src/kbadge.h \
     src/kballontip.h \
-    src/kdialog.h \
+    src/kborderbutton.h \
+    src/kborderlessbutton.h \
+    src/kbreadcrumb.h \
+    src/kbubblewidget.h\
+    src/kbuttonbox.h\
+    src/kclocktimer.h \
+    src/kcolorbutton.h\
+    src/kcolorcombobox.h \
+    src/kcomboboxwidget.h \
     src/kcommentpanel.h \
+    src/kcrumb.h \
+    src/kcustomdateedit.h \
+    src/kcustomtabbar.h \
+    src/kdialog.h \
+    src/kdirtabbar.h \
+    src/kdragwidget.h \
+    src/kfilewidget.h \
     src/kiconbar.h \
     src/kinputdialog.h \
+    src/kintrowidget.h \
+    src/kitemwidget.h\
+    src/klabel.h \
+    src/klineedit.h \
+    src/klineframe.h\
+    src/klistviewdelegate.h\
+    src/klistview.h\
+    src/klistwidget.h\
+    src/kloopplaypage.h \
+    src/klunarcalendarinfo.h \
+    src/klunardateedit.h \
     src/kmenubutton.h \
+    src/kmessagebox.h\
+    src/kminicalendaritem.h \
+    src/kminicalendarwidget.h \
+    src/knativetabbar.h \
     src/knavigationbar.h \
+    src/knavigationtrail.h \
+    src/kpasswordedit.h \
+    src/kpixmapcontainer.h \
+    src/kpressbutton.h\
+    src/kprogressbar.h \
+    src/kprogresscircle.h \
     src/kprogressdialog.h \
+    src/kprogresslabel.h \
+    src/kpushbutton.h\
     src/ksearchlineedit.h \
+    src/ksecuritylevelbar.h \
+    src/ksecurityquestiondialog.h \
+    src/kshadowhelper.h\
     src/kslider.h \
+    src/kswitchbutton.h \
+    src/ktabbar.h \
+    src/ktableheaderview.h \
+    src/ktablemodel.h \
+    src/ktableview.h \
     src/ktag.h \
+    src/ktextedit.h \
+    src/ktexteditor.h \
+    src/ktitlewindow.h \
+    src/ktoolbar.h \
     src/ktoolbutton.h \
-    src/kwindowbuttonbar.h \
+    src/ktranslucentfloor.h\
     src/kuninstalldialog.h \
     src/kwidget.h \
+    src/kwindowbuttonbar.h \
+    src/parmscontroller.h\
     src/themeController.h \
-    src/kaboutdialog.h \
-    src/kborderbutton.h \
-    src/kborderlessbutton.h \
-    src/kswitchbutton.h \
-    src/ktabbar.h \
-    src/gui_g.h \
-    src/xatom-helper.h \
-    src/kitemwidget.h\
-    src/klistwidget.h\
-	src/klistview.h\
-    src/klistviewdelegate.h\
-    src/kshadowhelper.h\
-    src/kpressbutton.h\
-    src/kpushbutton.h\
-    src/ktranslucentfloor.h\
-    src/kbubblewidget.h\
-    src/kbuttonbox.h\
-    src/kbackgroundgroup.h\
-    src/klineframe.h\
-    src/kcolorbutton.h\
-    src/kmessagebox.h\
-    src/kdragwidget.h
-
+    src/accessinfohelper.h \
+    src/xatom-helper.h
    
 # Default rules for deployment.
 headers.files = $${HEADERS}
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/accessinfohelper.h libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/accessinfohelper.h
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/accessinfohelper.h	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/accessinfohelper.h	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,103 @@
+#ifndef ACCESSIBLEFORMAT_H
+#define ACCESSIBLEFORMAT_H
+
+#include <QWidget>
+#include <QString>
+#include <QFileInfo>
+#include <type_traits>
+#include <QApplication>
+
+namespace kdk {
+
+template <typename T>
+QString combineAccessibleName(T* obj, QString widgetName, const QString& pluginName, const QString& extend = QString())
+{
+    if(!obj)
+        return QString();
+    if(!std::is_base_of<QObject, T>::value)
+        return QString();
+    QFileInfo cmdInfo(QApplication::arguments().at(0));
+    QString accessibleName = cmdInfo.fileName();
+    accessibleName += "_";
+    if(!pluginName.isEmpty())
+    {
+        accessibleName += pluginName;
+        accessibleName += "_";
+    }
+    accessibleName += obj->metaObject()->className();
+    accessibleName += "_";
+    accessibleName += widgetName.remove(QRegExp("[&*]"));
+    if(!extend.isEmpty())
+    {
+        accessibleName += "_";
+        accessibleName += extend;
+    }
+    return accessibleName;
+}
+
+template <typename T>
+QString combineAccessibleDescription(T* obj, const QString& widgetName)
+{
+    if(!obj)
+        return QString();
+    if(!std::is_base_of<QObject, T>::value)
+        return QString();
+    QFileInfo cmdInfo(QApplication::arguments().at(0));
+    return QString("[%1] is [%2] type in process:[%3]")
+            .arg(widgetName)
+            .arg(obj->metaObject()->className())
+            .arg(cmdInfo.fileName());
+}
+
+template <typename T>
+class AccessInfoHelper
+{
+public:
+    AccessInfoHelper(T* widget)
+        :m_widget(widget){}
+
+    void setObjectInfo(const QString& widgetName, const QString& pluginName, const QString& extend = QString())
+    {
+        if(m_widget->objectName().isEmpty())
+            m_widget->setObjectName(combineAccessibleName<T>(m_widget, widgetName,pluginName, extend));
+    }
+
+    void setAllAttribute(const QString& widgetName, const QString& pluginName = QString(), const QString& extend = QString(),const QString& description = QString())
+    {
+        if(!m_widget)
+            return;
+        setObjectInfo(widgetName, pluginName, extend);
+        if(std::is_base_of<QWidget, T>::value)
+        {
+            m_widget->setAccessibleName(combineAccessibleName<T>(m_widget, widgetName,pluginName, extend));
+            if(!description.isEmpty())
+            {
+                m_widget->setAccessibleDescription(description);
+            }
+            else
+            {
+                m_widget->setAccessibleDescription(combineAccessibleDescription<T>(m_widget, widgetName));
+            }
+        }
+    }
+
+
+private:
+    T* m_widget;
+};
+
+template<typename T>
+AccessInfoHelper<T> getHandle(T* widget)
+{
+    return AccessInfoHelper<T>(widget);
+}
+
+#define KDK_ALL_INFO_FORMAT(widget, description) getHandle(widget).setAllAttribute(#widget,"", "", description)
+#define KDK_EXTEND_ALL_INFO_FORMAT(widget, pluginName, extend, description) getHandle(widget).setAllAttribute(#widget, pluginName, extend, description)
+
+#define KDK_OBJ_INFO_FORMAT(obj) getHandle(obj).setObjectInfo(#obj, "")
+#define KDK_EXTEND_OBJ_INFO_FORMAT(obj, pluginName, extend) getHandle(obj).setObjectInfo(#obj, pluginName, extend)
+
+
+}
+#endif // ACCESSIBLEFORMAT_H
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kaboutdialog.cpp libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kaboutdialog.cpp
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kaboutdialog.cpp	2024-05-16 09:25:54.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kaboutdialog.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -68,6 +68,7 @@
     QString getDefaultAppId(const char *contentType);
     bool isOpenKylin();
     void updateAppVersionText();
+    QString ConvertFirstLetterCase(const QString &input);
 private:
     KAboutDialog *q_ptr;
     QLabel *m_pAppIconLabel;
@@ -93,7 +94,7 @@
     d->m_pAppIconLabel->setPixmap(pix);
     d->m_pAppIconLabel->setAlignment(Qt::AlignCenter);
     d->m_pAppNameLabel = new QLabel(this);
-    d->m_pAppNameLabel->setText(appName);
+    d->m_pAppNameLabel->setText(d->ConvertFirstLetterCase(appName));
     d->m_pAppNameLabel->setAlignment(Qt::AlignCenter);
 
     if(!(appVersion=="") && (!(appVersion.isNull())) )
@@ -104,7 +105,7 @@
     d->m_pAppVersionLabel->setFixedWidth(400);
 
     d->m_pAppSupportLabel = new QLabel(this);
-    d->m_pAppSupportLabel->setFixedWidth(400);
+    d->m_pAppSupportLabel->setMinimumWidth(400);
 
     d->m_pAppPrivacyLabel = new LinkLabel(this);
     d->m_pAppPrivacyLabel->setAlignment(Qt::AlignCenter);
@@ -161,7 +162,7 @@
 void KAboutDialog::setAppName(const QString& appName)
 {
     Q_D(KAboutDialog);
-    d->m_pAppNameLabel->setText(appName);
+    d->m_pAppNameLabel->setText(d->ConvertFirstLetterCase(appName));
     update();
 }
 
@@ -177,9 +178,9 @@
     if(!appVersion.isNull())
     {
         d->m_appVersionFlag = false;
-    d->m_pAppVersionLabel->setText(appVersion);
-    update();
-}
+        d->m_pAppVersionLabel->setText(appVersion);
+        update();
+    }
 }
 
 QString KAboutDialog::appVersion()
@@ -386,15 +387,39 @@
             result +=QString(tr("Version number not found"));
         }
         else
-{
+        {
             result += string;
             result.remove("\n"); //去掉 \n 字符
-    }
+        }
         m_pAppVersionLabel->setText(result);
     }
     process.close();
 }
 
+QString KAboutDialogPrivate::ConvertFirstLetterCase(const QString &input)
+{
+    QStringList words;
+    if(input.contains('-'))
+    {
+        words = input.split('-', QString::SkipEmptyParts);
+        for (int i = 0; i < words.size(); ++i)
+        {
+            QString &word = words[i];
+            word[0] = word[0].toUpper(); // 将每个单词的首字母转换为大写
+        }
+    }
+    else
+    {
+        words = input.split(' ', QString::SkipEmptyParts);
+        for (int i = 0; i < words.size(); ++i)
+        {
+            QString &word = words[i];
+            word[0] = word[0].toUpper(); // 将每个单词的首字母转换为大写
+        }
+    }
+    return words.join(" ");
+}
+
 LinkLabel::LinkLabel(QWidget *parent)
     :QLabel(parent)
 {
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kaddfilebutton.cpp libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kaddfilebutton.cpp
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kaddfilebutton.cpp	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kaddfilebutton.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,252 @@
+/*
+ * libkysdk-qtwidgets's Library
+ *
+ * Copyright (C) 2023, KylinSoft Co., Ltd.
+ *
+ * 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 3 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 General Public License
+ * along with this library.  If not, see <https://www.gnu.org/licenses/>.
+ *
+ * Authors: Zhenyu Wang <wangzhenyu@kylinos.cn>
+ *
+ */
+
+#include "kaddfilebutton.h"
+#include "themeController.h"
+#include <QPainter>
+#include <QStyleOptionButton>
+#include <QDebug>
+#include <QFileDialog>
+#include <QStandardPaths>
+#include <QPainterPath>
+#include <QEvent>
+
+namespace kdk {
+
+#define BLANK_SPACE 20
+
+class AddFileDialog : public QFileDialog
+{
+    Q_OBJECT
+public:
+    AddFileDialog(QWidget* parent = nullptr);
+    virtual ~AddFileDialog();
+
+public slots:
+    void goAccept();
+
+protected:
+    void showEvent(QShowEvent* event) override;
+};
+
+class KAddFileButtonPrivate:public QObject,public ThemeController
+{
+    Q_DECLARE_PUBLIC(KAddFileButton)
+    Q_OBJECT
+public:
+    KAddFileButtonPrivate(KAddFileButton*parent);
+
+    void updateColor(QStyleOptionButton option,QPalette palette);
+    void openFile();
+
+protected:
+    void changeTheme();
+
+private:
+    KAddFileButton *q_ptr;
+    QColor m_bkgColor;
+    QString m_text;
+    QRect m_rect;
+    QRect m_textRect;
+    AddFileDialog *m_FileDialog;
+};
+
+KAddFileButton::KAddFileButton(QWidget *parent):
+    QPushButton(parent),
+    d_ptr(new KAddFileButtonPrivate(this))
+{
+    Q_D(KAddFileButton);
+    setFixedSize(104,110);
+    connect(this,&KAddFileButton::clicked,this,[=]{
+        d->openFile();
+    });
+}
+
+void KAddFileButton::paintEvent(QPaintEvent *event)
+{
+    Q_D(KAddFileButton);
+    QStyleOptionButton option;
+    initStyleOption(&option);
+    d->updateColor(option,palette());
+
+    d->m_rect = QRect(QPoint(20,8),QSize(64,64));
+
+    QPainter painter(this);
+    painter.save();
+    painter.setBrush(palette().base().color());
+    painter.setPen(Qt::NoPen);
+    painter.drawRoundedRect(rect(),0,0);
+    painter.restore();
+    QPen pen=painter.pen();
+    pen.setStyle(Qt::DashLine);
+    pen.setColor(palette().color(QPalette::Highlight));
+    painter.save();
+    painter.setRenderHint(QPainter::Antialiasing);
+    painter.setPen(pen);
+    painter.setBrush(d->m_bkgColor);
+    painter.drawRoundedRect(d->m_rect,6,6);
+    painter.setPen(palette().highlight().color());
+    painter.drawLine(QPoint(d->m_rect.center().x()-10,d->m_rect.center().y()+1),QPoint(d->m_rect.center().x()+10,d->m_rect.center().y()+1));
+    painter.drawLine(QPoint(d->m_rect.center().x()+1,d->m_rect.center().y()-10),QPoint(d->m_rect.center().x()+1,d->m_rect.center().y()+10));
+    painter.restore();
+
+    painter.save();
+    QFontMetrics fm = painter.fontMetrics();
+    int width = fm.width(d->m_text);
+    painter.setPen(palette().highlight().color());
+    d->m_textRect = QRect(QPoint(rect().center().x()-width/2,d->m_rect.bottom()+8),QSize(width,fm.height()));
+    painter.drawText(d->m_textRect,d->m_text);
+    painter.restore();
+
+}
+
+bool KAddFileButton::eventFilter(QObject *watched, QEvent *event)
+{
+    return QPushButton::eventFilter(watched,event);
+}
+
+void KAddFileButton::mouseMoveEvent(QMouseEvent *event)
+{
+    return QPushButton::mouseMoveEvent(event);
+}
+
+void KAddFileButton::mousePressEvent(QMouseEvent *event)
+{
+    return QPushButton::mousePressEvent(event);
+}
+
+void KAddFileButton::mouseReleaseEvent(QMouseEvent *event)
+{
+    return QPushButton::mouseReleaseEvent(event);
+}
+
+void KAddFileButton::setText(QString str)
+{
+    Q_D(KAddFileButton);
+    d->m_text = str;
+}
+
+QFileDialog *KAddFileButton::fileDialog()
+{
+    Q_D(KAddFileButton);
+    return dynamic_cast<QFileDialog*>(d->m_FileDialog);
+}
+
+void KAddFileButton::setNameFilter(const QString &filter)
+{
+    Q_D(KAddFileButton);
+    QString f(filter);
+    if (f.isEmpty())
+        return ;
+    QString sep(QLatin1String(";;"));
+    int i = f.indexOf(sep, 0);
+    if (i == -1)
+    {
+        if (f.indexOf(QLatin1Char('\n'), 0) != -1)
+        {
+            sep = QLatin1Char('\n');
+            i = f.indexOf(sep, 0);
+        }
+    }
+    setNameFilters(f.split(sep));
+}
+
+void KAddFileButton::setNameFilters(const QStringList &filters)
+{
+    Q_D(KAddFileButton);
+    d->m_FileDialog->setNameFilters(filters);
+}
+
+KAddFileButtonPrivate::KAddFileButtonPrivate(KAddFileButton *parent)
+    :q_ptr(parent)
+    ,m_text("添加文件")
+{
+    Q_Q(KAddFileButton);
+    m_FileDialog = new AddFileDialog(q);
+    m_FileDialog->setDirectory(QStandardPaths::writableLocation(QStandardPaths::HomeLocation));
+    m_FileDialog->setFileMode(QFileDialog::ExistingFiles);
+}
+
+void KAddFileButtonPrivate::updateColor(QStyleOptionButton option,QPalette palette)
+{
+    Q_Q(KAddFileButton);
+    m_bkgColor = palette.base().color();
+    QColor hightColor=palette.highlight().color();
+    if(option.state.testFlag(QStyle::State_MouseOver))
+    {
+        m_bkgColor = hightColor;
+        if(option.state.testFlag(QStyle::State_Sunken))
+            m_bkgColor.setAlphaF(0.4);
+        else
+            m_bkgColor.setAlphaF(0.3);
+    }
+}
+
+void KAddFileButtonPrivate::openFile()
+{
+    Q_Q(KAddFileButton);
+
+    m_FileDialog->setWindowTitle(tr("Please select file"));
+
+    m_FileDialog->exec();
+}
+
+void KAddFileButtonPrivate::changeTheme()
+{
+    initThemeStyle();
+}
+
+AddFileDialog::AddFileDialog(QWidget *parent)
+{
+    this->setFileMode(QFileDialog::ExistingFiles);
+}
+
+AddFileDialog::~AddFileDialog()
+{
+
+}
+
+void AddFileDialog::goAccept()
+{
+    accept();
+}
+
+void AddFileDialog::showEvent(QShowEvent *event)
+{
+    if (this->isVisible()) {
+        for (QWidget* widget : this->findChildren<QWidget*>()) {
+            if (widget->objectName() == "acceptButton") {
+                QPushButton * btn = qobject_cast<QPushButton*>(widget);
+                disconnect(btn, &QPushButton::clicked, 0, 0);
+                connect(btn, &QPushButton::clicked, [=](bool checked){
+                    Q_UNUSED(checked)
+                    this->goAccept();
+                });
+            }
+        }
+    }
+}
+
+}
+
+#include "kaddfilebutton.moc"
+#include "moc_kaddfilebutton.cpp"
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kaddfilebutton.h libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kaddfilebutton.h
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kaddfilebutton.h	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kaddfilebutton.h	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,85 @@
+/*
+ * libkysdk-qtwidgets's Library
+ *
+ * Copyright (C) 2023, KylinSoft Co., Ltd.
+ *
+ * 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 3 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 General Public License
+ * along with this library.  If not, see <https://www.gnu.org/licenses/>.
+ *
+ * Authors: Zhenyu Wang <wangzhenyu@kylinos.cn>
+ *
+ */
+
+#ifndef KADDFILEBUTTON_H
+#define KADDFILEBUTTON_H
+
+#include <QPushButton>
+#include <QFileDialog>
+#include "gui_g.h"
+
+namespace kdk {
+
+/** @defgroup PushbuttonModule
+  */
+
+class KAddFileButtonPrivate;
+
+/**
+ * @brief 选择文件的按钮
+ * @since 2.4
+ */
+class GUI_EXPORT KAddFileButton :public QPushButton
+{
+    Q_OBJECT
+public:
+    KAddFileButton(QWidget* parent=nullptr);
+
+    /**
+     * @brief 设置文本
+     * @param str
+     */
+    void setText(QString str);
+
+    /**
+     * @brief 获取filedialog
+     * @return QFileDialog
+     */
+    QFileDialog *fileDialog();
+
+    /**
+     * @brief 将文件对话框中使用的过滤器设置为给定的过滤器。
+     * @param filter
+     */
+    void setNameFilter(const QString &filter);
+
+    /**
+     * @brief 设置文件对话框中使用的过滤器。
+     * @param filters
+     */
+    void setNameFilters(const QStringList &filters);
+
+protected:
+    void paintEvent(QPaintEvent *event);
+    bool eventFilter(QObject *watched, QEvent *event);
+    void mouseMoveEvent(QMouseEvent *event);
+    void mousePressEvent(QMouseEvent *event);
+    void mouseReleaseEvent(QMouseEvent *event);
+
+private:
+    KAddFileButtonPrivate* const d_ptr;
+    Q_DECLARE_PRIVATE(KAddFileButton)
+};
+
+}
+
+#endif // KADDFILEBUTTON_H
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/karrowtabbar.cpp libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/karrowtabbar.cpp
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/karrowtabbar.cpp	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/karrowtabbar.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,199 @@
+/*
+ * libkysdk-qtwidgets's Library
+ *
+ * Copyright (C) 2023, KylinSoft Co., Ltd.
+ *
+ * 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 3 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 General Public License
+ * along with this library.  If not, see <https://www.gnu.org/licenses/>.
+ *
+ * Authors: Zhenyu Wang <wangzhenyu@kylinos.cn>
+ *
+ */
+
+#include "karrowtabbar.h"
+#include "themeController.h"
+#include "kborderlessbutton.h"
+#include "knativetabbar.h"
+#include <QBoxLayout>
+#include <QProxyStyle>
+#include <QDebug>
+
+namespace kdk {
+class Q_DECL_HIDDEN ArrowTabBarStyle : public QProxyStyle
+{
+    Q_OBJECT
+
+public:
+    ArrowTabBarStyle(QStyle *style = nullptr);
+
+    QRect subElementRect(QStyle::SubElement element, const QStyleOption *option, const QWidget *widget) const override;
+};
+
+class Q_DECL_HIDDEN KArrowTabBarPrivate:public QObject,public ThemeController
+{
+    Q_OBJECT
+    Q_DECLARE_PUBLIC(KArrowTabBar)
+
+public:
+    KArrowTabBarPrivate(KArrowTabBar *parent);
+
+    void currentChangeUpdateBtnStatus(int index);
+
+    void updateBtnVisible();
+
+private:
+    KArrowTabBar* q_ptr;
+    KBorderlessButton *m_pLeftButton;
+    KBorderlessButton *m_pRightButton;
+    KNativeTabbar *m_pTabBar;
+    QHBoxLayout *m_pHLayout;
+};
+
+KArrowTabBar::KArrowTabBar(QWidget *parent)
+    :QWidget(parent)
+    ,d_ptr(new KArrowTabBarPrivate(this))
+{
+    Q_D(KArrowTabBar);
+    connect(this,&KArrowTabBar::sizeChange,this,[=]{
+        d->updateBtnVisible();
+    });
+}
+
+KNativeTabbar *KArrowTabBar::tabbar()
+{
+    Q_D(KArrowTabBar);
+    return d->m_pTabBar;
+}
+
+void KArrowTabBar::resizeEvent(QResizeEvent *event)
+{
+    Q_D(KArrowTabBar);
+    QWidget::resizeEvent(event);
+    emit sizeChange();
+}
+
+KArrowTabBarPrivate::KArrowTabBarPrivate(KArrowTabBar *parent)
+    :q_ptr(parent)
+{
+    Q_Q(KArrowTabBar);
+    m_pHLayout = new QHBoxLayout(q);
+    m_pTabBar = new KNativeTabbar();
+    ArrowTabBarStyle *style = new ArrowTabBarStyle();
+    m_pTabBar->setStyle(style);
+    m_pLeftButton = new KBorderlessButton();
+    m_pLeftButton->setIcon(QIcon::fromTheme("go-previous.symbolic"));
+    m_pRightButton = new KBorderlessButton();
+    m_pRightButton->setIcon(QIcon::fromTheme("go-next.symbolic"));
+
+    m_pHLayout->addWidget(m_pLeftButton);
+    m_pHLayout->addWidget(m_pTabBar);
+    m_pHLayout->addWidget(m_pRightButton);
+
+    connect(m_pTabBar,&KNativeTabbar::currentChanged, this, [=](int index){
+        currentChangeUpdateBtnStatus(index);
+    });
+
+    connect(m_pLeftButton,&KBorderlessButton::clicked,this,[=]{
+        m_pTabBar->leftScrollTabs();
+
+    });
+    connect(m_pRightButton,&KBorderlessButton::clicked,this,[=]{
+        m_pTabBar->rightScrollTabs();
+    });
+    connect(m_pTabBar,&KNativeTabbar::leftBStatus,q,[=](bool flag){
+        m_pLeftButton->setEnabled(flag);
+    });
+    connect(m_pTabBar,&KNativeTabbar::rightBStatus,q,[=](bool flag){
+        m_pRightButton->setEnabled(flag);
+    });
+}
+
+void KArrowTabBarPrivate::currentChangeUpdateBtnStatus(int index)
+{
+    Q_Q(KArrowTabBar);
+    if(index == 0)
+    {
+        m_pLeftButton->setEnabled(false);
+        if(!m_pRightButton->isEnabled())
+            m_pRightButton->setEnabled(true);
+    }
+    else if(index == m_pTabBar->count() - 1)
+    {
+        m_pRightButton->setEnabled(false);
+        if(!m_pLeftButton->isEnabled())
+            m_pLeftButton->setEnabled(true);
+    }
+    else
+    {
+        if(!m_pLeftButton->isEnabled())
+            m_pLeftButton->setEnabled(true);
+        if(!m_pRightButton->isEnabled())
+            m_pRightButton->setEnabled(true);
+    }
+}
+
+void KArrowTabBarPrivate::updateBtnVisible()
+{
+    Q_Q(KArrowTabBar);
+    int wid =0 ;
+    for(int i = 0;i < q->tabbar()->count();i++)
+        wid +=q->tabbar()->tabRect(i).width();
+    if(q->rect().width() < wid)
+    {
+        if(m_pTabBar->usesScrollButtons())
+        {
+            m_pLeftButton->setVisible(true);
+            m_pRightButton->setVisible(true);
+        }
+        else
+        {
+            m_pLeftButton->setVisible(false);
+            m_pRightButton->setVisible(false);
+        }
+    }
+    else
+    {
+        m_pLeftButton->setVisible(false);
+        m_pRightButton->setVisible(false);
+    }
+}
+
+ArrowTabBarStyle::ArrowTabBarStyle(QStyle *style)
+{
+
+}
+
+QRect ArrowTabBarStyle::subElementRect(QStyle::SubElement element, const QStyleOption *option, const QWidget *widget) const
+{
+    QRect rc;
+    switch (element) {
+    case QStyle::SE_TabBarScrollLeftButton:
+        rc = option->rect;
+        rc.setWidth(0);
+        rc.setHeight(0);
+        break;
+    case QStyle::SE_TabBarScrollRightButton:
+        rc = option->rect;
+        rc.setWidth(0);
+        rc.setHeight(0);
+        break;
+    default:
+        break;
+    }
+    return rc;
+}
+
+}
+
+#include "karrowtabbar.moc"
+#include "moc_karrowtabbar.cpp"
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/karrowtabbar.h libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/karrowtabbar.h
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/karrowtabbar.h	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/karrowtabbar.h	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,72 @@
+/*
+ * libkysdk-qtwidgets's Library
+ *
+ * Copyright (C) 2023, KylinSoft Co., Ltd.
+ *
+ * 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 3 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 General Public License
+ * along with this library.  If not, see <https://www.gnu.org/licenses/>.
+ *
+ * Authors: Zhenyu Wang <wangzhenyu@kylinos.cn>
+ *
+ */
+
+#ifndef KARROWTABBAR_H
+#define KARROWTABBAR_H
+
+#include <QWidget>
+#include "knativetabbar.h"
+
+namespace kdk {
+
+/** @defgroup BarModule
+  * @{
+  */
+
+class KArrowTabBarPrivate;
+
+/**
+ * @brief 可显示箭头的tabbar
+ * @since 2.5
+ */
+class KArrowTabBar : public QWidget
+{
+    Q_OBJECT
+public:
+    KArrowTabBar(QWidget *parent = nullptr);
+
+    /**
+     * @brief 获取knativetabbar
+     * @return
+     */
+    KNativeTabbar *tabbar();
+
+
+Q_SIGNALS:
+    /**
+     * @brief 点击会发出信号
+     */
+    void sizeChange();
+
+protected:
+    void resizeEvent(QResizeEvent *event);
+
+private:
+    Q_DECLARE_PRIVATE(KArrowTabBar)
+    KArrowTabBarPrivate*const d_ptr;
+};
+
+}
+
+
+
+#endif // KArrowTabBar_H
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kbackgroundgroup.cpp libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kbackgroundgroup.cpp
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kbackgroundgroup.cpp	2024-05-16 09:25:54.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kbackgroundgroup.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -187,6 +187,10 @@
         widget->installEventFilter(this);
         widget->setAttribute(Qt::WA_TranslucentBackground);
     }
+    else if(d->m_pwidgetStateList.contains(widget) && !flag)
+    {
+        d->m_pwidgetStateList.removeOne(widget);
+    }
 }
 
 QList<QWidget *> KBackgroundGroup::widgetList()
@@ -226,17 +230,20 @@
 
     //确定三态区域
     int index,offset=0;
-    for(index =0;index<d->m_pwidgetList.count()-1;index++)
+    if(d->m_pwidgetStateList.count() > 0)
     {
-        auto widget = d->m_pwidgetList.at(index);
-        if( widget == d->m_pwidgetStateList.at(d->m_rectLocal))
-            break;
-        else
-            offset = offset + d->m_pwidgetList.at(index)->height();
-    }
+        for(index =0;index<d->m_pwidgetList.count();index++)
+        {
+            auto widget = d->m_pwidgetList.at(index);
+            if( widget != d->m_pwidgetStateList.at(d->m_rectLocal))
+                offset = /*offset +*/ d->m_pwidgetList.at(index)->height()*( d->m_pwidgetList.indexOf(d->m_pwidgetStateList.at(d->m_rectLocal)));
+            else
+                break;
 
-    d->m_rect = d->m_rect.translated(0,offset+index);
-    d->m_rect = d->m_rect.adjusted(0,0,2,2);
+        }
+        d->m_rect = d->m_rect.translated(0,offset+d->m_pwidgetList.indexOf(d->m_pwidgetStateList.at(d->m_rectLocal))*1);
+        d->m_rect = d->m_rect.adjusted(0,0,2,2);
+    }
 
     //三态区域颜色调整
     QPainterPath path1;
@@ -244,7 +251,7 @@
     {
          painter.drawRoundedRect(d->m_rect,d->m_radius,d->m_radius);
     }
-    else if(d->m_pwidgetList.count() > 1)
+    else if(d->m_pwidgetList.count() > 1 && d->m_pwidgetStateList.count() > 1)
     {
         switch (d->m_widgetPosition)
         {
@@ -286,42 +293,19 @@
     if(d->m_pwidgetStateList.contains(widget))
     {
         //事件过滤器判断事件设置颜色
-        QColor color;
+        QColor color = palette().color(d->m_brushColorRole);
         switch (event->type())
         {
-        case QEvent::HoverEnter:
-            d->m_rect = widget->rect();
-            //设置三态区域背景色
-            if(ThemeController::themeMode() == LightTheme)
-            {
-                color = palette().button().color();//QColor("#E6E6E6");
-                d->m_backgroundColor = ThemeController::mixColor(color,Qt::black,0.05);
-            }
-            else
-            {
-                color =palette().base().color();// QColor("#373737");
-                d->m_backgroundColor = ThemeController::mixColor(color,Qt::white,0.2);
-            }
-            //获取三态区域位置
-            if(d->m_pwidgetList.at(0) == widget)
-                d->m_widgetPosition = KBackgroundGroupPrivate::Beginning;
-            else if(d->m_pwidgetList.at(d->m_pwidgetList.count()-1) == widget)
-                d->m_widgetPosition = KBackgroundGroupPrivate::End;
-            else
-                d->m_widgetPosition = KBackgroundGroupPrivate::Middle;
-            d->m_rectLocal =d->m_pwidgetStateList.indexOf(widget);
-            update();
-            break;
         case QEvent::Enter:
             d->m_rect = widget->rect();
             if(ThemeController::themeMode() == LightTheme)
             {
-                color = palette().button().color();
+//                color = palette().button().color();
                 d->m_backgroundColor = ThemeController::mixColor(color,Qt::black,0.05);
             }
             else
             {
-                color = palette().base().color();
+//                color = palette().base().color();
                 d->m_backgroundColor = ThemeController::mixColor(color,Qt::white,0.2);
             }
             if(d->m_pwidgetList.at(0) == widget)
@@ -337,12 +321,12 @@
             d->m_rect = widget->rect();
             if(ThemeController::themeMode() == LightTheme)
             {
-                color = palette().button().color();
+//                color = palette().button().color();
                 d->m_backgroundColor = ThemeController::mixColor(color,Qt::black,0.2);
             }
             else
             {
-                color = palette().base().color();
+//                color = palette().base().color();
                 d->m_backgroundColor = ThemeController::mixColor(color,Qt::white,0.05);
             }
             if(d->m_pwidgetList.at(0) == widget)
@@ -359,12 +343,12 @@
             d->m_rect = widget->rect();
             if(ThemeController::themeMode() == LightTheme)
             {
-                color = palette().button().color();
+//                color = palette().button().color();
                 d->m_backgroundColor = ThemeController::mixColor(color,Qt::black,0.05);
             }
             else
             {
-                color = palette().base().color();
+//                color = palette().base().color();
                 d->m_backgroundColor = ThemeController::mixColor(color,Qt::white,0.2);
             }
             if(d->m_pwidgetList.at(0) == widget)
@@ -380,7 +364,7 @@
         }
         case QEvent::Leave:
             d->m_rect = widget->rect();
-            d->m_backgroundColor = palette().color(QPalette::Base);
+            d->m_backgroundColor = palette().color(d->m_brushColorRole);
             if(d->m_pwidgetList.at(0) == widget)
                 d->m_widgetPosition = KBackgroundGroupPrivate::Beginning;
             else if(d->m_pwidgetList.at(d->m_pwidgetList.count()-1) == widget)
@@ -390,6 +374,9 @@
             d->m_rectLocal =d->m_pwidgetStateList.indexOf(widget);
             update();
             break;
+        case QEvent::Paint:
+            d->m_rect = widget->rect();
+            break;
         default:
             break;
         }
@@ -400,8 +387,9 @@
 KBackgroundGroupPrivate::KBackgroundGroupPrivate(KBackgroundGroup *parent)
     :q_ptr(parent)
     ,m_widgetPosition(KBackgroundGroupPrivate::Beginning),m_rectLocal(0)
-    ,m_radius(12),m_backgroundColor(parent->palette().color(QPalette::Base))
+    ,m_radius(12)
     ,m_brushColorRole(QPalette::Base)
+    ,m_backgroundColor(parent->palette().color(m_brushColorRole))
 {
     Q_Q(KBackgroundGroup);
     m_pmainWidgetLayout = new QVBoxLayout(q);
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kballontip.cpp libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kballontip.cpp
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kballontip.cpp	2024-05-16 09:25:54.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kballontip.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -56,6 +56,8 @@
     QLabel* m_pIconLabel;
     TipType m_type;
     QIcon m_icon;
+    QPixmap m_variablePixmap;
+    QPixmap m_pixmap;
     QColor m_color;
     QHBoxLayout* m_pLayout;
     QVBoxLayout* m_pVLayout;
@@ -68,20 +70,31 @@
       d_ptr(new KBallonTipPrivate(this))
 {
     Q_D(KBallonTip);
+    setAttribute(Qt::WA_TranslucentBackground);
     setWindowFlag(Qt::ToolTip);
+    setFixedWidth(544);
     d->m_pVLayout = new QVBoxLayout(this);
     d->m_pLayout = new QHBoxLayout(this);
     d->m_pLayout->setSpacing(12);
     this->setContentsMargins(24,18,24,18);
     d->m_pContentLabel = new QLabel(this);
-    d->m_pContentLabel->setWordWrap(true);
+//    d->m_pContentLabel->setWordWrap(true);
     //设置具体阴影
     d->m_pShadow_effect = new QGraphicsDropShadowEffect(this);
-    d->changeTheme();
+    d->m_pShadow_effect->setOffset(0, 0);
+    //阴影颜色
+    d->m_pShadow_effect->setColor(this->palette().color(QPalette::Disabled,QPalette::Text));
+    //阴影半径
+    if(ThemeController::themeMode() == LightTheme)
+        d->m_pShadow_effect->setBlurRadius(15);
+    else
+        d->m_pShadow_effect->setBlurRadius(0);
+    this->setGraphicsEffect(d->m_pShadow_effect);
+
     d->m_pIconLabel = new QLabel(this);
     QVBoxLayout*vLayout = new QVBoxLayout;
     vLayout->addWidget(d->m_pIconLabel);
-    vLayout->addStretch();
+//    vLayout->addStretch();
     d->m_pLayout->addLayout(vLayout);
     d->m_pLayout->addWidget(d->m_pContentLabel);
     d->m_pLayout->setAlignment(Qt::AlignVCenter);
@@ -89,12 +102,19 @@
     d->m_pVLayout->addStretch();
     d->m_pVLayout->addLayout(d->m_pLayout);
     d->m_pVLayout->addStretch();
+
     d->adjustStyle();
-    d->m_pVLayout->setSizeConstraint(QLayout::SizeConstraint::SetMinimumSize);
+    d->m_pVLayout->setSizeConstraint(QLayout::SizeConstraint::SetFixedSize);
     if(ThemeController::systemFontSize() > 11)
         vLayout->setContentsMargins(0,(ThemeController::systemFontSize()-11),0,0);
     else
         vLayout->setContentsMargins(0,0,0,0);
+    connect(d->m_gsetting,&QGSettings::changed,this,[=](){
+        if(ThemeController::themeMode() == LightTheme)
+            d->m_pShadow_effect->setBlurRadius(15);
+        else
+            d->m_pShadow_effect->setBlurRadius(0);
+    });
     connect(d->m_gsetting,&QGSettings::changed,this,[=](const QString &key){
         if(key.contains("systemFontSize"))
             if(ThemeController::systemFontSize() > 11)
@@ -111,6 +131,7 @@
     d->m_pContentLabel->setText(content);
     d->m_type = type;
     d->adjustStyle();
+    setAttribute(Qt::WA_TranslucentBackground);
 }
 
 void KBallonTip::showInfo()
@@ -170,6 +191,25 @@
     d->m_time=my_time;
 }
 
+QHBoxLayout *KBallonTip::hBoxLayout()
+{
+    Q_D(KBallonTip);
+    return d->m_pLayout;
+}
+
+void KBallonTip::setVariableIcon(QIcon icon)
+{
+    Q_D(KBallonTip);
+    d->m_variablePixmap = icon.pixmap(22,22);
+    update();
+}
+
+QPixmap KBallonTip::variableIcon()
+{
+    Q_D(KBallonTip);
+    return d->m_variablePixmap;
+}
+
 void KBallonTip::onTimeupDestroy()
 {
     this->close();
@@ -233,6 +273,14 @@
         painter.setBrush(this->palette().color(QPalette::Window));
         painter.drawRoundedRect(rect.adjusted(8,8,-8,-8), 6, 6);
     }
+    if(ThemeController::isPixmapPureColor(d->m_variablePixmap))
+    {
+        if(ThemeController::themeMode() == LightTheme)
+            d->m_pixmap = d->m_variablePixmap;
+        else
+            d->m_pixmap = ThemeController::drawColoredPixmap(d->m_variablePixmap,Qt::white);
+    }
+    d->adjustStyle();
 }
 
 KBallonTipPrivate::KBallonTipPrivate(KBallonTip *parent)
@@ -251,31 +299,39 @@
     {
     case TipType::Nothing:
         m_icon = QIcon();
+        m_pIconLabel->setPixmap(m_icon.pixmap(22,22));
         m_pIconLabel->hide();
         break;
     case TipType::Normal:
 //        m_icon = QIcon::fromTheme("ukui-dialog-success");
-        m_icon = QIcon::fromTheme("ukui-dialog-success", QIcon::fromTheme("emblem-default"));
+         m_icon = QIcon::fromTheme("ukui-dialog-success", QIcon::fromTheme("emblem-default"));
+         m_pIconLabel->setPixmap(m_icon.pixmap(22,22));
         m_pIconLabel->show();
         break;
     case TipType::Info:;
         m_icon = QIcon::fromTheme("dialog-info");
+        m_pIconLabel->setPixmap(m_icon.pixmap(22,22));
         m_pIconLabel->show();
         break;
     case TipType::Warning:
         m_icon = QIcon::fromTheme("dialog-warning");
+        m_pIconLabel->setPixmap(m_icon.pixmap(22,22));
         m_pIconLabel->show();
         break;
     case TipType::Error:
         m_icon = QIcon::fromTheme("dialog-error");
+        m_pIconLabel->setPixmap(m_icon.pixmap(22,22));
+        m_pIconLabel->show();
+        break;
+    case TipType::Variable:
+        m_pIconLabel->setPixmap(m_pixmap);
         m_pIconLabel->show();
         break;
     default:
         break;
     }
-    m_pIconLabel->setPixmap(m_icon.pixmap(22,22));
     m_pIconLabel->setFixedSize(22,22);
-    m_pContentLabel->setAlignment(Qt::AlignLeft);
+//    m_pContentLabel->setAlignment(Qt::AlignLeft);
 }
 
 void KBallonTipPrivate::changeTheme()
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kballontip.h libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kballontip.h
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kballontip.h	2024-05-16 09:25:54.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kballontip.h	2024-10-29 15:22:42.000000000 +0800
@@ -24,6 +24,7 @@
 #define KBALLONTIP_H
 
 #include <QWidget>
+#include <QHBoxLayout>
 #include "gui_g.h"
 
 namespace  kdk
@@ -41,7 +42,8 @@
     Normal,
     Info,
     Warning,
-    Error
+    Error,
+    Variable
 };
 
 class KBallonTipPrivate;
@@ -106,6 +108,27 @@
       */
     void setTipTime(int my_time);
 
+    /**
+     * @brief 获取kballontip的水平布局
+     * @return
+     * @since 2.4
+     */
+    QHBoxLayout *hBoxLayout();
+
+    /**
+     * @brief 设置可变类型的icon
+     * @param icon
+     * @since 2.5
+     */
+    void setVariableIcon(QIcon icon);
+
+    /**
+     * @brief 获取可变类型的icon
+     * @return
+     * @since 2.5
+     */
+    QPixmap variableIcon();
+
 private Q_SLOTS:
     void onTimeupDestroy();
 
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kborderbutton.cpp libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kborderbutton.cpp
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kborderbutton.cpp	2024-05-16 09:25:54.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kborderbutton.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -80,6 +80,7 @@
     QPainter p(this);
     QColor borderColor;
     QColor fontColor;
+    int borderWidth = 1 ;
     QColor mix = option.palette.brightText().color();
     QColor highlight = option.palette.highlight().color();
     if(!option.state.testFlag(QStyle::State_Enabled))
@@ -188,6 +189,7 @@
         }
         else
         {
+		borderWidth = 2;
             fontColor = option.palette.buttonText().color();
             borderColor = ThemeController::mixColor(highlight,mix,0.2);
         }
@@ -218,7 +220,7 @@
     pen.setJoinStyle(Qt::RoundJoin);
 
     p.save();
-    pen.setWidth(1);
+    pen.setWidth(borderWidth);
     pen.setColor(borderColor);
     p.setPen(pen);
     if(ThemeController::widgetTheme() == ClassicTheme)
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kbubblewidget.cpp libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kbubblewidget.cpp
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kbubblewidget.cpp	2024-05-16 09:25:54.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kbubblewidget.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -52,6 +52,7 @@
     int m_bottomLeftRadius;
     int m_bottomRightRadius;
     bool m_enableBlur;
+    bool m_isHighlightBackground;
     qreal m_opacity;
 
 };
@@ -120,11 +121,19 @@
     return d->m_opacity;
 }
 
+void KBubbleWidget::setHighlightBackground(bool flag)
+{
+    Q_D(KBubbleWidget);
+    d->m_isHighlightBackground = flag;
+    update();
+}
+
 KBubbleWidget::KBubbleWidget(QWidget *parent)
     :QWidget(parent),
       d_ptr(new KBubbleWidgetPrivate(this))
 {
     Q_D(KBubbleWidget);
+//    setContentsMargins(24,24,24,24);
     setWindowFlags(Qt::FramelessWindowHint);
     setAttribute(Qt::WA_TranslucentBackground);
 }
@@ -167,6 +176,7 @@
         trianglePolygon << QPoint(d->m_startX + d->m_tailHeight, d->m_tailHeight);
         trianglePolygon << QPoint(d->m_startX + d->m_tailWidth / 2 + d->m_tailHeight, 0);
         trianglePolygon << QPoint(d->m_startX + d->m_tailWidth + d->m_tailHeight, d->m_tailHeight);
+        setContentsMargins(24,24+d->m_tailHeight,24,24);
         break;
 
     case LeftDirection:
@@ -182,6 +192,7 @@
         trianglePolygon << QPoint(d->m_startX + d->m_tailHeight, d->m_startY);
         trianglePolygon << QPoint(d->m_startX , d->m_startY + d->m_tailWidth/2);
         trianglePolygon << QPoint(d->m_startX + d->m_tailHeight , d->m_startY + d->m_tailWidth);
+        setContentsMargins(24+d->m_tailHeight,24,24,24);
         break;
 
     case RightDirection:
@@ -194,10 +205,10 @@
         else if(d->m_tailLocation == RightLocation)
              d->m_startY = d->m_tailHeight + static_cast<int>((targetRect.height()-d->m_tailHeight*2 - d->m_tailWidth))-19;
         d->m_startX = targetRect.width();
-        trianglePolygon << QPoint(d->m_startX - d->m_tailHeight - 1, d->m_startY);
-        trianglePolygon << QPoint(d->m_startX - 1, d->m_startY + d->m_tailWidth/2);
-        trianglePolygon << QPoint(d->m_startX - d->m_tailHeight - 1 , d->m_startY + d->m_tailWidth);
-
+        trianglePolygon << QPoint(d->m_startX - 1, d->m_startY);
+        trianglePolygon << QPoint(d->m_startX + d->m_tailHeight - 1, d->m_startY + d->m_tailWidth/2);
+        trianglePolygon << QPoint(d->m_startX - 1 , d->m_startY + d->m_tailWidth);
+        setContentsMargins(24,24,24+d->m_tailHeight,24);
         break;
     case BottomDirection:
         targetRect = targetRect.adjusted(0,0,0,-d->m_tailHeight);
@@ -212,7 +223,7 @@
         trianglePolygon << QPoint(d->m_startX + d->m_tailHeight, d->m_startY - d->m_tailHeight-1);
         trianglePolygon << QPoint(d->m_startX + d->m_tailWidth / 2 + d->m_tailHeight, d->m_startY-1);
         trianglePolygon << QPoint(d->m_startX + d->m_tailWidth + d->m_tailHeight,d->m_startY - d->m_tailHeight-1);
-
+        setContentsMargins(24,24,24,24+d->m_tailHeight);
         break;
     case None:
         break;
@@ -242,7 +253,7 @@
     painter.setRenderHints(QPainter::Antialiasing);
     painter.setRenderHints(QPainter::HighQualityAntialiasing);
 
-    if(d->m_enableBlur)
+    if(d->m_enableBlur &&  !d->m_isHighlightBackground)
     {
         //开启毛玻璃时
         QRegion region(path.toFillPolygon().toPolygon());
@@ -261,8 +272,12 @@
     pen.setColor(Qt::gray);
     painter.translate(0.5,0.5);
     painter.setPen(pen);
-    painter.setBrush(this->palette().color(this->backgroundRole()));
+    if(d->m_isHighlightBackground)
+        painter.setBrush(this->palette().color(QPalette::Highlight));
+    else
+        painter.setBrush(this->palette().color(QPalette::Base));
     painter.drawPath(path);
+
 }
 
 KBubbleWidgetPrivate::KBubbleWidgetPrivate(KBubbleWidget *parent)
@@ -275,6 +290,7 @@
       m_tailWidth(16),
       m_enableBlur(false),
       m_opacity(0.5),
+      m_isHighlightBackground(false),
       m_tailLocation(TailLocation::LeftLocation),
       m_tailDirection(TailDirection::BottomDirection)
 {
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kbubblewidget.h libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kbubblewidget.h
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kbubblewidget.h	2024-05-16 09:25:54.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kbubblewidget.h	2024-10-29 15:22:42.000000000 +0800
@@ -138,6 +138,13 @@
      */
     qreal opacity();
 
+    /**
+     * @brief 设置是否启用高亮背景色
+     * @param flag
+     * @since 2.4
+     */
+    void setHighlightBackground(bool flag);
+
 
 protected:
     void paintEvent(QPaintEvent *);
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kbuttonbox.cpp libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kbuttonbox.cpp
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kbuttonbox.cpp	2024-05-16 09:25:54.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kbuttonbox.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -27,10 +27,11 @@
 #include <QStyleOptionButton>
 #include <QColor>
 #include <QStylePainter>
+#include <QGraphicsDropShadowEffect>
 #include "themeController.h"
 
 namespace kdk {
-class KButtonBoxPrivate : public QObject
+class KButtonBoxPrivate : public QObject ,public ThemeController
 {
     Q_OBJECT
     Q_DECLARE_PUBLIC(KButtonBox)
@@ -38,13 +39,18 @@
     KButtonBoxPrivate(KButtonBox* parent);
     void updateBorderRadius();
     void updateButtonList();
+
+protected:
+    void changeTheme();
 private:
     KButtonBox *q_ptr;
     QButtonGroup *m_buttonGroup;
     QBoxLayout *m_layout;
     int m_radius;
     bool m_isCheckable;
+    bool m_shadowFlag;
     QList<KPushButton *> m_buttonList;
+    QGraphicsDropShadowEffect *m_pShadow_effect;
 };
 
 KButtonBoxPrivate::KButtonBoxPrivate(KButtonBox *parent)
@@ -56,6 +62,9 @@
     q->connect(m_buttonGroup, SIGNAL(buttonPressed(QAbstractButton*)), q, SIGNAL(buttonPressed(QAbstractButton*)));
     q->connect(m_buttonGroup, SIGNAL(buttonReleased(QAbstractButton*)), q, SIGNAL(buttonReleased(QAbstractButton*)));
     q->connect(m_buttonGroup, SIGNAL(buttonToggled(QAbstractButton*, bool)), q, SIGNAL(buttonToggled(QAbstractButton*, bool)));
+    q->connect(m_gsetting,&QGSettings::changed,this,[=]{
+        changeTheme();
+    });
 
     m_layout = new QHBoxLayout(q);
     m_layout->setSizeConstraint(QLayout::SetFixedSize);
@@ -63,6 +72,8 @@
     m_layout->setSpacing(0);
     m_radius = 6;
     m_isCheckable = false;
+    m_shadowFlag = false;
+    m_pShadow_effect = new QGraphicsDropShadowEffect();
 }
 
 void KButtonBoxPrivate::updateBorderRadius()
@@ -118,6 +129,12 @@
 {
     Q_Q(KButtonBox);
 
+    QColor shadowColor;
+    if(ThemeController::themeMode() == LightTheme)
+        shadowColor = QColor(0,0,0);
+    else
+        shadowColor = QColor(255,255,255);
+    shadowColor.setAlphaF(0.1);
     for (QAbstractButton *button : m_buttonGroup->buttons()) {
             m_buttonGroup->removeButton(button);
             m_layout->removeWidget(button);
@@ -128,10 +145,49 @@
         m_layout->insertWidget(i,button);
         m_buttonGroup->addButton(button,i);
         button->setCheckable(m_isCheckable);
+        if(m_shadowFlag)
+        {
+            m_pShadow_effect->setOffset(0, 2);
+            m_pShadow_effect->setColor(shadowColor);
+            m_pShadow_effect->setBlurRadius(4);
+            q->setGraphicsEffect(m_pShadow_effect);
+        }
     }
     updateBorderRadius();
 }
 
+void KButtonBoxPrivate::changeTheme()
+{
+    Q_Q(KButtonBox);
+    initThemeStyle();
+
+    if(ThemeController::themeMode() == LightTheme)
+    {
+        QColor shadowColor(0, 0, 0);
+        shadowColor.setAlphaF(0.1);
+        if(m_shadowFlag)
+        {
+            m_pShadow_effect->setOffset(0, 2);
+            m_pShadow_effect->setColor(shadowColor);
+            m_pShadow_effect->setBlurRadius(4);
+            q->setGraphicsEffect(m_pShadow_effect);
+        }
+    }
+    else
+    {
+        QColor shadowColor(255, 255, 255);
+        shadowColor.setAlphaF(0.1);
+        if(m_shadowFlag)
+        {
+            m_pShadow_effect->setOffset(0, 2);
+            m_pShadow_effect->setColor(shadowColor);
+            m_pShadow_effect->setBlurRadius(4);
+            q->setGraphicsEffect(m_pShadow_effect);
+        }
+    }
+
+}
+
 KButtonBox::KButtonBox(QWidget *parent)
     :QWidget(parent)
     ,d_ptr(new KButtonBoxPrivate(this))
@@ -296,6 +352,35 @@
     return d->m_isCheckable;
 }
 
+void KButtonBox::setShadow(bool flag)
+{
+    Q_D(KButtonBox);
+    QColor shadowColor(0, 0, 0);
+    shadowColor.setAlphaF(0.1);
+    d->m_shadowFlag = flag;
+    if(flag)
+    {
+        d->updateButtonList();
+    }
+    else
+    {
+        for (int i = 0; i < d->m_buttonList.count(); ++i) {
+            KPushButton *button = d->m_buttonList.at(i);
+            d->m_pShadow_effect->setOffset(0, 2);
+            d->m_pShadow_effect->setColor(Qt::NoBrush);
+            d->m_pShadow_effect->setBlurRadius(4);
+            button->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Expanding);
+            setGraphicsEffect(d->m_pShadow_effect);
+        }
+    }
+}
+
+bool KButtonBox::shadow()
+{
+    Q_D(KButtonBox);
+    return d->m_shadowFlag;
+}
+
 }
 #include "kbuttonbox.moc"
 #include "moc_kbuttonbox.cpp"
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kbuttonbox.h libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kbuttonbox.h
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kbuttonbox.h	2024-05-16 09:25:54.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kbuttonbox.h	2024-10-29 15:22:42.000000000 +0800
@@ -158,6 +158,20 @@
      */
     bool isCheckable();
 
+    /**
+     * @brief 设置是否启动阴影效果
+     * @param flag
+     * @since 2.4
+     */
+    void setShadow(bool flag);
+
+    /**
+     * @brief 获取是否启用阴影效果
+     * @return bool
+     * @since 2.4
+     */
+    bool shadow();
+
 Q_SIGNALS:
     void buttonClicked(QAbstractButton *);
     void buttonPressed(QAbstractButton *);
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kclocktimer.cpp libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kclocktimer.cpp
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kclocktimer.cpp	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kclocktimer.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,171 @@
+/*
+ * libkysdk-qtwidgets's Library
+ *
+ * Copyright (C) 2023, KylinSoft Co., Ltd.
+ *
+ * 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 3 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 General Public License
+ * along with this library.  If not, see <https://www.gnu.org/licenses/>.
+ *
+ * Authors: Zhenyu Wang <wangzhenyu@kylinos.cn>
+ *
+ */
+
+#include "kclocktimer.h"
+#include "themeController.h"
+#include <QLabel>
+#include <QBoxLayout>
+#include <QTimer>
+#include <QStringList>
+#include <QDebug>
+
+namespace kdk {
+
+class  Q_DECL_HIDDEN KClockTimerPrivate : public QObject , public ThemeController
+{
+    Q_OBJECT
+    Q_DECLARE_PUBLIC(KClockTimer)
+public:
+    KClockTimerPrivate(KClockTimer *parent);
+    void updateTime();
+
+private:
+    KClockTimer *q_ptr;
+    QLabel *m_pMainLabel;
+    QLabel *m_pSubLabel;
+    QVBoxLayout *m_vLayout;
+
+    QTimer *m_pTimer;
+    qint64 m_runningTime;
+    bool isRunning;
+};
+
+KClockTimer::KClockTimer(QWidget *parent)
+    :QWidget(parent)
+    ,d_ptr(new KClockTimerPrivate(this))
+{
+    Q_D(KClockTimer);
+}
+
+QString KClockTimer::time()
+{
+    Q_D(KClockTimer);
+    return d->m_pMainLabel->text();
+}
+
+void KClockTimer::startStopwatch()
+{
+    Q_D(KClockTimer);
+    if (!d->isRunning) {
+        d->m_pTimer->start();
+        d->isRunning = true;
+    }
+}
+
+void KClockTimer::stopStopwatch()
+{
+    Q_D(KClockTimer);
+    if (d->isRunning) {
+        d->m_pTimer->stop();
+        d->isRunning = false;
+    }
+}
+
+void KClockTimer::resetStopwatch()
+{
+    Q_D(KClockTimer);
+    if (d->isRunning) {
+        d->m_pTimer->stop();
+        d->isRunning = false;
+    }
+    d->m_runningTime = 0;
+    d->m_pMainLabel->setText("00:00.00");
+    d->m_pSubLabel->setText("00:00.00");
+}
+
+KClockTimerPrivate::KClockTimerPrivate(KClockTimer *parent)
+    :q_ptr(parent)
+    ,isRunning(false)
+{
+    Q_Q(KClockTimer);
+    m_vLayout = new QVBoxLayout(q);
+
+    m_pMainLabel = new QLabel();
+    m_pMainLabel->setFixedSize(210,70);
+    m_pMainLabel->setAlignment(Qt::AlignHCenter);
+    m_pMainLabel->setText("00:00.00");
+
+    m_pSubLabel = new QLabel();
+    m_pSubLabel->setFixedSize(210,41);
+    m_pSubLabel->setAlignment(Qt::AlignHCenter);
+    m_pSubLabel->setText("00:00.00");
+
+    QPalette pale;
+    pale.setColor(QPalette::WindowText,Qt::gray);
+    m_pSubLabel->setPalette(pale);
+    m_vLayout->setSpacing(0);
+    m_vLayout->addWidget(m_pMainLabel);
+    m_vLayout->addWidget(m_pSubLabel);
+    m_runningTime = 0;
+
+    m_pTimer = new QTimer();
+    m_pTimer->setInterval(10);
+
+    QPalette mainPalette;
+    mainPalette.setColor(QPalette::WindowText,q->palette().brightText().color());
+    m_pMainLabel->setPalette(mainPalette);
+
+    QFont f = q->font();
+    f.setPointSize(f.pointSize() + 15);
+    m_pMainLabel->setFont(f);
+    connect(m_gsetting,&QGSettings::changed,q,[=]{
+        QFont f = q->font();
+        f.setPointSize(f.pointSize() + 15);
+        m_pMainLabel->setFont(f);
+        QPalette mainPalette;
+        mainPalette.setColor(QPalette::WindowText,q->palette().brightText().color());
+        m_pMainLabel->setPalette(mainPalette);
+    });
+    connect(m_pTimer, &QTimer::timeout, this,[=]{
+        updateTime();
+    });
+
+
+}
+
+void KClockTimerPrivate::updateTime()
+{
+    Q_Q(KClockTimer);
+    m_runningTime += 10; // 增加10毫秒
+
+   int minutes = m_runningTime / (1000 * 60);
+   int seconds = (m_runningTime / 1000) % 60;
+   int milliseconds = m_runningTime % 1000;
+
+   // 取毫秒的前两位
+   milliseconds = milliseconds / 10;
+
+   // 使用QString的arg方法格式化输出
+   m_pMainLabel->setText(QString("%1:%2.%3")
+                       .arg(minutes, 2, 10, QChar('0'))
+                       .arg(seconds, 2, 10, QChar('0'))
+                       .arg(milliseconds, 2, 10, QChar('0')));
+   m_pSubLabel->setText(QString("%1:%2.%3")
+                       .arg(minutes, 2, 10, QChar('0'))
+                       .arg(seconds, 2, 10, QChar('0'))
+                        .arg(milliseconds, 2, 10, QChar('0')));
+}
+
+}
+
+#include "kclocktimer.moc"
+#include "moc_kclocktimer.cpp"
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kclocktimer.h libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kclocktimer.h
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kclocktimer.h	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kclocktimer.h	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,72 @@
+/*
+ * libkysdk-qtwidgets's Library
+ *
+ * Copyright (C) 2023, KylinSoft Co., Ltd.
+ *
+ * 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 3 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 General Public License
+ * along with this library.  If not, see <https://www.gnu.org/licenses/>.
+ *
+ * Authors: Zhenyu Wang <wangzhenyu@kylinos.cn>
+ *
+ */
+
+#ifndef KCLOCKTIMER_H
+#define KCLOCKTIMER_H
+
+#include "gui_g.h"
+#include <QWidget>
+
+namespace kdk {
+
+class KClockTimerPrivate;
+
+/**
+ * @defgroup timerModule
+ * @since 2.5
+ */
+class GUI_EXPORT KClockTimer :public QWidget
+{
+    Q_OBJECT
+public:
+    KClockTimer(QWidget * parent = nullptr);
+
+    /**
+     * @brief 获取当前时间
+     * @return
+     */
+    QString time();
+
+public slots:
+    /**
+     * @brief 开始计时信号
+     */
+    void startStopwatch();
+
+    /**
+     * @brief 停止计时信号
+     */
+    void stopStopwatch();
+
+    /**
+     * @brief 复位信号
+     */
+    void resetStopwatch();
+
+private:
+    KClockTimerPrivate* const d_ptr;
+    Q_DECLARE_PRIVATE(KClockTimer)
+
+};
+
+}
+#endif // KCLOCKTIMER_H
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kcomboboxwidget.cpp libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kcomboboxwidget.cpp
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kcomboboxwidget.cpp	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kcomboboxwidget.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,397 @@
+/*
+ * libkysdk-qtwidgets's Library
+ *
+ * Copyright (C) 2023, KylinSoft Co., Ltd.
+ *
+ * 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 3 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 General Public License
+ * along with this library.  If not, see <https://www.gnu.org/licenses/>.
+ *
+ * Authors: Zhenyu Wang <wangzhenyu@kylinos.cn>
+ *
+ */
+
+#include "kcomboboxwidget.h"
+#include "themeController.h"
+#include <QHBoxLayout>
+#include <QStyleOption>
+#include <QPainter>
+#include <QDebug>
+#include <QProxyStyle>
+#include <QToolButton>
+#include <QMenu>
+#include <QWidgetAction>
+#include <QMouseEvent>
+#include <QEvent>
+#include <QApplication>
+#include <QList>
+#include <QPainterPath>
+#include "klabel.h"
+#include "ktoolbutton.h"
+
+namespace kdk {
+
+class Q_DECL_HIDDEN ProxyStyle : public QProxyStyle
+{
+    Q_OBJECT
+public:
+    ProxyStyle(QWidget *parent = nullptr) {}
+    void drawComplexControl(ComplexControl control, const QStyleOptionComplex *option, QPainter *painter, const QWidget *widget = nullptr) const override;
+};
+
+class Q_DECL_HIDDEN MenuItem : public QToolButton ,public ThemeController
+{
+    Q_OBJECT
+public:
+    MenuItem(QString week, int id, QWidget *parent = nullptr);
+
+    void setIconVisible(bool status);
+
+protected:
+    void mouseReleaseEvent(QMouseEvent *event);
+    void enterEvent(QEvent *e);
+    void leaveEvent(QEvent *e);
+
+Q_SIGNALS:
+    void showLabelIcon(int id);
+    void hideLabelIcon(int id);
+
+private:
+    QLabel       *m_pTextLabel;
+    QLabel       *m_pMenuIconLabel;
+    QHBoxLayout  *m_pHLayout;
+    int           m_id = 0;
+    ProxyStyle *m_proxyStyle = nullptr;
+};
+
+class Q_DECL_HIDDEN KComboBoxWidgetPrivate : public QObject ,public ThemeController
+{
+    Q_OBJECT
+    Q_DECLARE_PUBLIC(KComboBoxWidget)
+public:
+    KComboBoxWidgetPrivate(KComboBoxWidget *parent);
+    void initLayout();
+    void setChosenString();
+    QStringList reorderListBasedOnSelection(const QStringList stringList, const QStringList chosenList);
+
+private:
+    KComboBoxWidget *q_ptr;
+    QLabel      *m_pMainLabel;
+    KLabel      *m_pSubLabel;
+    QLabel      *m_pIconLabel;
+    QHBoxLayout *m_pHLayout;
+    bool        m_mouseEnter = false;
+    QStringList m_stringList;
+    QStringList m_chosenList;
+    QMenu *m_pMenu;
+};
+
+KComboBoxWidget::KComboBoxWidget(QWidget *parent)
+    :QWidget(parent)
+    ,d_ptr(new KComboBoxWidgetPrivate(this))
+{
+
+}
+
+void KComboBoxWidget::setStringList(QStringList list)
+{
+    Q_D(KComboBoxWidget);
+    d->m_stringList = list;
+    for(int i = 0 ;i < list.count() ; i++)
+    {
+        MenuItem *item = new MenuItem(list[i], i, this);
+        connect(item, &MenuItem::showLabelIcon, this, [=](int index){
+            if(!d->m_chosenList.contains(d->m_stringList.at(index)))
+                d->m_chosenList.append(d->m_stringList.at(index));
+            d->setChosenString();
+        });
+        connect(item, &MenuItem::hideLabelIcon, this, [=](int index){
+            if(d->m_chosenList.contains(d->m_stringList.at(index)))
+                d->m_chosenList.removeOne(d->m_stringList.at(index));
+            d->setChosenString();
+        });
+        QWidgetAction *action = new QWidgetAction(this);
+        action->setDefaultWidget(item);
+        d->m_pMenu->addAction(action);
+    }
+}
+
+QStringList KComboBoxWidget::getChosenList()
+{
+    Q_D(KComboBoxWidget);
+    return d->m_chosenList;
+}
+
+void KComboBoxWidget::setMainText(QString text)
+{
+    Q_D(KComboBoxWidget);
+    d->m_pMainLabel->setText(text);
+}
+
+QMenu *KComboBoxWidget::menu()
+{
+    Q_D(KComboBoxWidget);
+    return d->m_pMenu;
+}
+
+void KComboBoxWidget::mouseReleaseEvent(QMouseEvent *event)
+{
+    Q_D(KComboBoxWidget);
+    emit comBoxWidgetClicked();
+    QWidget::mouseReleaseEvent(event);
+    return;
+}
+
+void KComboBoxWidget::mousePressEvent(QMouseEvent *event)
+{
+    Q_D(KComboBoxWidget);
+}
+
+void KComboBoxWidget::leaveEvent(QEvent *e)
+{
+    Q_D(KComboBoxWidget);
+    d->m_mouseEnter = false;
+    repaint();
+}
+
+void KComboBoxWidget::enterEvent(QEvent *e)
+{
+    Q_D(KComboBoxWidget);
+    d->m_mouseEnter = true;
+    repaint();
+}
+
+void KComboBoxWidget::paintEvent(QPaintEvent *event)
+{
+    Q_D(KComboBoxWidget);
+    QStyleOption opt;
+    opt.init(this);
+    QPainter p(this);
+    QPainterPath path;
+    opt.rect.adjust(0,0,0,0);
+
+    if(!opt.state.testFlag(QStyle::State_Enabled))
+    {
+        p.setBrush(opt.palette.color(QPalette::Disabled,QPalette::Button));
+    }
+    else
+    {
+
+        if (d->m_mouseEnter) {
+            p.setBrush(opt.palette.color(QPalette::Midlight));
+        } else {
+            p.setBrush(opt.palette.color(QPalette::Button));
+        }
+    }
+
+    p.setOpacity(1);
+    p.setPen(Qt::NoPen);
+    p.drawRoundedRect(opt.rect, 6, 6);
+    p.setRenderHint(QPainter::Antialiasing); //反锯齿
+    setProperty("blurRegion", QRegion(path.toFillPolygon().toPolygon()));
+}
+
+KComboBoxWidgetPrivate::KComboBoxWidgetPrivate(KComboBoxWidget *parent)
+    :q_ptr(parent)
+{
+    Q_Q(KComboBoxWidget);
+    initLayout();
+}
+
+void KComboBoxWidgetPrivate::initLayout()
+{
+    Q_Q(KComboBoxWidget);
+    m_pMenu = new QMenu;
+    m_pMainLabel = new QLabel();
+    m_pMainLabel->setAlignment(Qt::AlignVCenter);
+
+    m_pSubLabel = new KLabel();
+    m_pSubLabel->setAlignment(Qt::AlignRight);
+
+    m_pSubLabel->setFixedWidth(165);
+    m_pIconLabel = new QLabel();
+    QIcon labelIcon = QIcon::fromTheme("ukui-down.symbolic");
+    m_pIconLabel->setPixmap(labelIcon.pixmap(QSize(16, 16)));
+    m_pIconLabel->setProperty("useIconHighlightEffect", 0x1);
+    m_pHLayout = new QHBoxLayout();
+    m_pHLayout->setSpacing(0);
+    m_pHLayout->setContentsMargins(0, 0, 0, 0);
+    q->setContentsMargins(0, 0, 0, 0);
+
+    m_pHLayout->addItem(new QSpacerItem(16, 1, QSizePolicy::Fixed));
+    m_pHLayout->addWidget(m_pMainLabel, Qt::AlignVCenter);
+    m_pMainLabel->setAlignment(Qt::AlignVCenter);
+    m_pHLayout->addItem(new QSpacerItem(12, 20, QSizePolicy::Expanding));
+    m_pHLayout->addWidget(m_pSubLabel, Qt::AlignVCenter);
+    m_pSubLabel->setAlignment(Qt::AlignVCenter);
+    m_pHLayout->addItem(new QSpacerItem(8, 30, QSizePolicy::Minimum));
+    m_pHLayout->addWidget(m_pIconLabel, Qt::AlignVCenter);
+    m_pHLayout->addItem(new QSpacerItem(8, 5, QSizePolicy::Fixed));
+
+    q->setLayout(m_pHLayout);
+
+    connect(q,&KComboBoxWidget::comBoxWidgetClicked,q,[=]{
+        if (!m_pMenu->isVisible()) {
+            m_pMenu->exec(q->mapToGlobal(QPoint(0, q->rect().height())));
+        } else {
+            m_pMenu->hide();
+        }
+    });
+}
+
+void KComboBoxWidgetPrivate::setChosenString()
+{
+    Q_Q(KComboBoxWidget);
+    QStringList list = reorderListBasedOnSelection(m_stringList,m_chosenList);
+    QString text;
+    for(int i = 0 ; i<list.count(); i++)
+    {
+        text.append(list.at(i));
+        if( i < list.count() - 1)
+            text.append(" ");
+    }
+
+    m_pSubLabel->setText(text);
+}
+
+QStringList KComboBoxWidgetPrivate::reorderListBasedOnSelection(const QStringList stringList, const QStringList chosenList)
+{
+    QStringList result;
+    QVector<bool> isSelected(chosenList.size(), false);
+
+    for (const QString &selected : stringList) {
+        int index = chosenList.indexOf(selected);
+        if (index != -1) {
+            result.append(selected);
+            isSelected[index] = true;
+        }
+    }
+
+    for (int i = 0; i < chosenList.size(); ++i) {
+        if (!isSelected[i]) {
+            result.append(chosenList.at(i));
+        }
+    }
+
+    return result;
+}
+
+void ProxyStyle::drawComplexControl(QStyle::ComplexControl control, const QStyleOptionComplex *option, QPainter *painter, const QWidget *widget) const
+{
+    switch (control) {
+    case CC_ToolButton:
+    {
+        if (const QStyleOptionComplex *f = qstyleoption_cast<const QStyleOptionComplex *>(option)) {
+            const bool hover = f->state & State_MouseOver;
+            if (hover) {
+                painter->save();
+                painter->setRenderHint(QPainter::Antialiasing, true);
+                painter->setPen(Qt::NoPen);
+                QStyleOption opt;
+                QColor color = opt.palette.color(QPalette::Highlight);
+                painter->setBrush(color);
+                painter->drawRoundedRect(option->rect, 6, 6);
+                painter->restore();
+                return;
+            }
+        }
+        break;
+    }
+    default:
+        break;
+    }
+}
+
+MenuItem::MenuItem(QString week, int id, QWidget *parent)
+    :QToolButton(parent)
+    ,m_id(id)
+{
+    m_proxyStyle = new ProxyStyle(this);
+    this->setStyle(m_proxyStyle);
+    m_pTextLabel = new QLabel();
+    m_pTextLabel->setText(week);
+    this->setAutoRaise(true); //设置默认状态背景透明
+
+    m_pMenuIconLabel = new QLabel();
+
+    m_pMenuIconLabel->setFixedSize(16, 16);
+    QIcon labelIcon = QIcon::fromTheme("object-select-symbolic");
+    m_pMenuIconLabel->setPixmap(labelIcon.pixmap(QSize(16, 16)));
+    m_pMenuIconLabel->setProperty("useIconHighlightEffect", 0x8);
+    m_pMenuIconLabel->setFixedSize(16, 16);
+
+    m_pHLayout = new QHBoxLayout();
+    m_pHLayout->setContentsMargins(17, 0, 0, 0);
+    this->setLayout(m_pHLayout);
+    m_pHLayout->addWidget(m_pMenuIconLabel);
+    m_pHLayout->addWidget(m_pTextLabel);
+
+    QSizePolicy policy = m_pMenuIconLabel->sizePolicy();
+    policy.setRetainSizeWhenHidden(true);
+    m_pMenuIconLabel->setSizePolicy(policy);
+    m_pMenuIconLabel->setVisible(false);
+
+    connect(m_gsetting, &QGSettings::changed, this, [=](const QString & key) {
+            if (ThemeController::themeMode() == DarkTheme) {
+                QPalette palette;
+                palette.setColor(QPalette::Active, QPalette::ButtonText,Qt::white);
+                m_pTextLabel->setPalette(palette);
+            } else {
+                QPalette palette;
+                palette.setColor(QPalette::Active, QPalette::ButtonText,Qt::black);
+                m_pTextLabel->setPalette(palette);
+            }
+    });
+}
+
+void MenuItem::setIconVisible(bool status)
+{
+    m_pMenuIconLabel->setVisible(status);
+}
+
+void MenuItem::mouseReleaseEvent(QMouseEvent *event)
+{
+    if (event->button() == Qt::LeftButton) {
+        if (!this->m_pMenuIconLabel->isVisible()) {
+            m_pMenuIconLabel->setVisible(true);
+            emit showLabelIcon(m_id);
+        } else {
+            m_pMenuIconLabel->setVisible(false);
+            emit hideLabelIcon(m_id);
+        }
+    }
+    QToolButton::mouseReleaseEvent(event);
+}
+
+void MenuItem::enterEvent(QEvent *e)
+{
+    QApplication::postEvent(m_pMenuIconLabel, new QEvent(QEvent::Enter));
+
+    QPalette palette;
+    palette.setColor(QPalette::Active, QPalette::ButtonText,Qt::white);
+    m_pTextLabel->setPalette(palette);
+}
+
+void MenuItem::leaveEvent(QEvent *e)
+{
+    if (ThemeController::themeMode() == LightTheme) {
+        QPalette palette;
+        palette.setColor(QPalette::Active, QPalette::ButtonText,Qt::black);
+        m_pTextLabel->setPalette(palette);
+    }
+    QApplication::postEvent(m_pMenuIconLabel, new QEvent(QEvent::Leave));
+}
+
+}
+
+#include "kcomboboxwidget.moc"
+#include "moc_kcomboboxwidget.cpp"
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kcomboboxwidget.h libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kcomboboxwidget.h
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kcomboboxwidget.h	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kcomboboxwidget.h	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,82 @@
+/*
+ * libkysdk-qtwidgets's Library
+ *
+ * Copyright (C) 2023, KylinSoft Co., Ltd.
+ *
+ * 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 3 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 General Public License
+ * along with this library.  If not, see <https://www.gnu.org/licenses/>.
+ *
+ * Authors: Zhenyu Wang <wangzhenyu@kylinos.cn>
+ *
+ */
+
+#ifndef KCOMBOBOXWIDGET_H
+#define KCOMBOBOXWIDGET_H
+
+#include "gui_g.h"
+#include <QWidget>
+#include <QLabel>
+#include <QToolButton>
+
+namespace kdk {
+
+/**
+ * @brief 可选择多个或者单个选项
+ * @since 2.5
+ */
+class KComboBoxWidgetPrivate;
+class KComboBoxWidget : public QWidget
+{
+    Q_OBJECT
+public:
+    KComboBoxWidget(QWidget *parent = nullptr);
+
+    /**
+     * @brief 设置combobox的选项列表
+     * @param list
+     */
+    void setStringList(QStringList list);
+
+    /**
+     * @brief 获取选中的列表
+     * @return
+     */
+    QStringList getChosenList();
+
+    /**
+     * @brief 设置主文本
+     * @param text
+     */
+    void setMainText(QString text);
+
+    /**
+     * @brief 获取弹出菜单
+     * @return
+     */
+    QMenu *menu();
+protected:
+    void mouseReleaseEvent(QMouseEvent *event);
+    void mousePressEvent(QMouseEvent *event);
+    void leaveEvent(QEvent *e);
+    void enterEvent(QEvent *e);
+    void paintEvent(QPaintEvent *event);
+signals:
+    void comBoxWidgetClicked();
+
+private:
+    KComboBoxWidgetPrivate* const d_ptr;
+    Q_DECLARE_PRIVATE(KComboBoxWidget)
+};
+}
+
+#endif // KCOMBOBOXWIDGET_H
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kcrumb.cpp libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kcrumb.cpp
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kcrumb.cpp	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kcrumb.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,320 @@
+/*
+ * libkysdk-qtwidgets's Library
+ *
+ * Copyright (C) 2023, KylinSoft Co., Ltd.
+ *
+ * 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 3 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 General Public License
+ * along with this library.  If not, see <https://www.gnu.org/licenses/>.
+ *
+ * Authors: Zhenyu Wang <wangzhenyu@kylinos.cn>
+ *
+ */
+
+#include "kcrumb.h"
+#include <QPainter>
+#include <QStyle>
+#include <QStyleOptionTab>
+#include <QFontMetrics>
+#include <QApplication>
+#include <QDebug>
+#include <QProxyStyle>
+#include "themeController.h"
+#include "kcustomtabbar.h"
+#include "kborderlessbutton.h"
+
+namespace kdk
+{
+
+static int spacing = 4;
+
+class Q_DECL_HIDDEN CrumbStyle : public QProxyStyle
+{
+    Q_OBJECT
+
+public:
+    CrumbStyle(QStyle *style = nullptr);
+
+    QRect subElementRect(QStyle::SubElement element, const QStyleOption *option, const QWidget *widget) const override;
+};
+
+class Q_DECL_HIDDEN KCrumbPrivate : public QObject,public ThemeController
+{
+    Q_OBJECT
+    Q_DECLARE_PUBLIC(KCrumb)
+
+public:
+    KCrumbPrivate(KCrumb*parent);
+
+private:
+    KCrumb* q_ptr;
+    QIcon m_icon;
+    bool m_isFlat;
+    QStringList m_stringList;
+};
+
+KCrumb::KCrumb(QWidget *parent)
+    :KCustomTabBar(parent),
+      d_ptr(new KCrumbPrivate(this))
+{
+    CrumbStyle *style = new CrumbStyle();
+    setStyle(style);
+}
+
+int KCrumb::addTab(const QString &text)
+{
+    Q_D(KCrumb);
+    d->m_stringList.append(text);
+    return KCustomTabBar::addTab(text);
+}
+
+int KCrumb::addTab(const QIcon &icon, const QString &text)
+{
+    Q_D(KCrumb);
+    d->m_stringList.append(text);
+    return KCustomTabBar::addTab(icon,text);
+}
+
+int KCrumb::insertTab(int index, const QString &text)
+{
+    Q_D(KCrumb);
+    d->m_stringList.insert(index,text);
+    return KCustomTabBar::insertTab(index,text);
+}
+
+int KCrumb::insertTab(int index, const QIcon &icon, const QString &text)
+{
+    Q_D(KCrumb);
+    d->m_stringList.insert(index,text);
+    return insertTab(index,icon,text);
+}
+
+void KCrumb::removeTab(int index)
+{
+    Q_D(KCrumb);
+    d->m_stringList.removeAt(index);
+    KCustomTabBar::removeTab(index);
+}
+
+void KCrumb::moveTab(int from, int to)
+{
+    Q_D(KCrumb);
+    d->m_stringList.move(from,to);
+    KCustomTabBar::moveTab(from,to);
+}
+
+void KCrumb::setIcon(const QIcon &icon)
+{
+    Q_D(KCrumb);
+    d->m_icon = icon;
+    update();
+}
+
+QIcon KCrumb::icon() const
+{
+    Q_D(const KCrumb);
+    return d->m_icon;
+}
+
+bool KCrumb::isFlat() const
+{
+    Q_D(const KCrumb);
+    return d->m_isFlat;
+}
+
+void KCrumb::setFlat(bool flat)
+{
+    Q_D(KCrumb);
+    d->m_isFlat = flat;
+    update();
+}
+
+void KCrumb::leftScroll()
+{
+    Q_D(KCrumb);
+    leftScrollTabs();
+}
+
+void KCrumb::rightScroll()
+{
+    Q_D(KCrumb);
+    rightScrollTabs();
+}
+
+QSize KCrumb::tabSizeHint(int index) const
+{
+    Q_D(const KCrumb);
+    QSize size = KCustomTabBar::tabSizeHint(index);
+    QFont font(QApplication::font());
+
+    QFontMetrics fm(font);
+    int width = fm.width(tabText(index));
+    size.setWidth(width+40);
+    if(index == 0 && !d->m_icon.isNull())
+        size.setWidth(size.width()+50);
+    return size;
+}
+
+void KCrumb::paintEvent(QPaintEvent *event)
+{
+    Q_D(const KCrumb);
+    QPainter p(this);
+    p.setRenderHint(QPainter::Antialiasing);
+    p.setRenderHint(QPainter::HighQualityAntialiasing);
+    p.setRenderHint(QPainter::TextAntialiasing);
+    p.setRenderHint(QPainter::SmoothPixmapTransform);
+    QFontMetrics fm = p.fontMetrics();
+
+    QColor highLightColor = palette().color(QPalette::Highlight);
+    QColor baseColor;
+    QColor focusColor;
+    if(ThemeController::themeMode() == ThemeFlag::DarkTheme)
+    {
+        if(d->m_isFlat)
+            baseColor = "#D9D9D9";
+        else
+            baseColor = "#47474A";
+        focusColor = "#D9D9D9";
+    }
+    else
+    {
+        if(d->m_isFlat)
+            baseColor = "#262626";
+        else
+            baseColor = "#B3B3B3";
+        focusColor = "#262626";
+    }
+
+    int width=0;
+    for(int i = 0 ; i < count(); i++)
+    {
+        width += fm.width(d->m_stringList.at(i))+40 ; 
+    }
+    if(!d->m_icon.isNull())
+        width+=50;
+    int useWidth = fm.width(d->m_stringList.at(count()-1)) + 40;
+
+    for(int i = 0 ; i < count(); i++)
+    {
+        QRect rc = tabRect(i);
+        QStyleOptionTab option;
+        initStyleOption(&option, i);
+        p.setPen(Qt::NoPen);
+        p.drawRect(rc);
+        if(QStyle::State_MouseOver & option.state)
+            p.setPen(highLightColor);
+        else if(QStyle::State_Selected & option.state)
+            p.setPen(focusColor);
+        else
+            p.setPen(baseColor);
+        p.setBrush(Qt::NoBrush);
+
+        if(rect().width() >= width ) 
+        {
+            if(i == 0 && !d->m_icon.isNull())
+            {
+                p.drawPixmap(rc.left()+10,(rc.height()-24)/2,24,24,
+                             d->m_icon.pixmap(24,24));
+                p.drawText(rc.adjusted(30,0,-24,0),Qt::AlignCenter,d->m_stringList.at(i));
+            }
+            else
+                p.drawText(rc.adjusted(0,0,-24,0),Qt::AlignCenter,d->m_stringList.at(i));
+            if(i != count()-1)
+                p.drawPixmap(rc.right()-24,(rc.height()-16)/2,16,16,
+                             ThemeController::drawColoredPixmap(QIcon::fromTheme("ukui-end-symbolic").pixmap(16,16),baseColor));
+        }
+        else
+        {
+            if(i == 0 )
+            {
+                if(!d->m_icon.isNull())
+                {
+                    p.drawPixmap(rc.left()+10,(rc.height()-24)/2,24,24,
+                                 d->m_icon.pixmap(24,24));
+                    p.drawText(rc.adjusted(30,0,-24,0),Qt::AlignCenter,d->m_stringList.at(i));
+                    useWidth +=fm.width(d->m_stringList.at(0)) + 90; ;
+                }
+                else
+                {
+                    p.drawText(rc.adjusted(0,0,-24,0),Qt::AlignCenter,d->m_stringList.at(i));
+                    useWidth +=fm.width(d->m_stringList.at(0)) + 40;
+                }
+            }
+            else if(i == count() - 1)
+            {
+                p.drawText(rc.adjusted(0,0,-24,0),Qt::AlignCenter,d->m_stringList.at(i));
+            }
+            else
+            {
+                int usableWidth = 0; 
+                for(int j = i ;j < count()-1 ; j++) 
+                {
+                    usableWidth += fm.width(d->m_stringList.at(j)) + 40;
+                }
+
+                if( (rect().width() - useWidth) <= usableWidth ) 
+                {
+                    setTabContent(i,"...");
+                    setTabToolTip(i,d->m_stringList.at(i));
+                    p.drawText(rc.adjusted(0,0,-24,0),Qt::AlignCenter,"...");
+                    useWidth +=fm.width("...") + 40;
+                }
+                else //如果可用长度 大于 需用长度 则正常显示
+                {
+
+                    setTabContent(i,d->m_stringList.at(i));
+                    p.drawText(rc.adjusted(0,0,-24,0),Qt::AlignCenter,d->m_stringList.at(i));
+                    useWidth +=fm.width(d->m_stringList.at(i)) + 40;
+                    if(!tabToolTip(i).isEmpty())
+                        setTabToolTip(i,"");
+                }
+            }
+            if(i != count()-1)
+            {
+                p.drawPixmap(rc.right()-24,(rc.height()-16)/2,16,16,
+                             ThemeController::drawColoredPixmap(QIcon::fromTheme("ukui-end-symbolic").pixmap(16,16),baseColor));
+
+            }
+        }
+    }
+}
+
+KCrumbPrivate::KCrumbPrivate(KCrumb *parent)
+    :q_ptr(parent),
+      m_isFlat(true)
+{
+}
+
+CrumbStyle::CrumbStyle(QStyle *style)
+{
+
+}
+
+QRect CrumbStyle::subElementRect(QStyle::SubElement element, const QStyleOption *option, const QWidget *widget) const
+{
+    switch (element) {
+    case QStyle::SE_TabBarScrollLeftButton:
+        return QRect();
+        break;
+    case QStyle::SE_TabBarScrollRightButton:
+        return QRect();
+        break;
+    default:
+        break;
+    }
+    return QProxyStyle::subElementRect(element,option,widget);
+}
+
+}
+
+#include "kcrumb.moc"
+#include "moc_kcrumb.cpp"
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kcrumb.h libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kcrumb.h
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kcrumb.h	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kcrumb.h	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,140 @@
+/*
+ * libkysdk-qtwidgets's Library
+ *
+ * Copyright (C) 2023, KylinSoft Co., Ltd.
+ *
+ * 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 3 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 General Public License
+ * along with this library.  If not, see <https://www.gnu.org/licenses/>.
+ *
+ * Authors: Zhenyu Wang <wangzhenyu@kylinos.cn>
+ *
+ */
+
+#ifndef KCRUMB_H
+#define KCRUMB_H
+
+#include <QTabBar>
+#include "kcustomtabbar.h"
+
+namespace kdk
+{
+/**
+ *  @defgroup KCrumb
+ *  @since 2.5
+ */
+class KCrumbPrivate;
+
+/**
+ * @brief KCrumbType,包括两种类型。
+ */
+enum KCrumbType
+{
+    FlatBreadCrumb,
+    CubeBreadCrumb
+};
+
+/**
+ * @brief 面包屑控件
+ */
+class KCrumb : public KCustomTabBar
+{
+    Q_OBJECT
+
+public:
+    explicit KCrumb(QWidget *parent = nullptr);
+
+    /**
+     * @brief 添加tab
+     * @param text
+     * @return
+     */
+    int addTab(const QString &text);
+
+    /**
+     * @brief 添加tab
+     * @param icon
+     * @param text
+     * @return
+     */
+    int addTab(const QIcon &icon, const QString &text);
+
+    /**
+     * @brief 在index位置插入tab
+     * @param index
+     * @param text
+     * @return
+     */
+    int insertTab(int index, const QString &text);
+
+    /**
+     * @brief 在index位置插入tab
+     * @param index
+     * @param icon
+     * @param text
+     * @return
+     */
+    int insertTab(int index, const QIcon&icon, const QString &text);
+
+    /**
+     * @brief 删除index位置的tab
+     * @param index
+     */
+    void removeTab(int index);
+
+    /**
+     * @brief 将from位置tab移至to位置
+     * @param from
+     * @param to
+     */
+    void moveTab(int from, int to);
+
+    /**
+     * @brief 设置图标
+     * @param icon
+     */
+    void setIcon(const QIcon &icon);
+
+    /**
+     * @brief 获取图标
+     * @return
+     */
+    QIcon icon() const;
+
+    /**
+     * @brief 返回按钮边框是否凸起
+     * @return
+     */
+    bool  isFlat() const;
+
+    /**
+     * @brief 设置按钮边框是否凸起
+     * @param flat
+     */
+    void  setFlat(bool flat);
+
+public slots:
+    void leftScroll();
+    void rightScroll();
+
+protected:
+    QSize tabSizeHint(int index) const;
+    void paintEvent(QPaintEvent *event);
+
+private:
+    Q_DECLARE_PRIVATE(KCrumb)
+    KCrumbPrivate*const d_ptr;
+};
+}
+
+
+#endif // KCRUMB_H
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kcustomdateedit.cpp libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kcustomdateedit.cpp
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kcustomdateedit.cpp	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kcustomdateedit.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,272 @@
+#include "kcustomdateedit.h"
+#include <QApplication>
+#include <QStyleOptionComboBox>
+#include <QPainter>
+#include <QStyle>
+#include <QBrush>
+#include <QRect>
+#include <QApplication>
+#include <QSvgRenderer>
+#include <QRandomGenerator>
+
+namespace kdk
+{
+class KCustomDateEditPrivate : public QObject
+{
+    Q_DECLARE_PUBLIC(KCustomDateEdit)
+    Q_OBJECT
+public:
+    KCustomDateEditPrivate(KCustomDateEdit* parent);
+
+private slots:
+    void onDateSelected(const QDate &date);
+    QPixmap loadSvg(const QString &path, int size);
+    QPixmap drawSymbolicColoredPixmap(const QPixmap &source);
+
+private:
+    KCustomDateEdit* q_ptr;
+    KMiniCalendarWidget *m_pCalendar;
+    bool hoverFlag = false;
+    bool focusFlag = false;
+};
+
+KCustomDateEditPrivate::KCustomDateEditPrivate(KCustomDateEdit *parent) : q_ptr(parent)
+{
+    Q_Q(KCustomDateEdit);
+    m_pCalendar = new KMiniCalendarWidget(q);
+    m_pCalendar->setFixedSize(244, 264);
+    m_pCalendar->setWeekNameFormat(KMiniCalendarWidget::WeekNameFormat_Short);
+    connect(m_pCalendar, &KMiniCalendarWidget::clicked, this, &KCustomDateEditPrivate::onDateSelected);
+}
+
+void KCustomDateEditPrivate::onDateSelected(const QDate &date)
+{
+    Q_Q(KCustomDateEdit);
+    q->setDate(date);
+}
+
+QPixmap KCustomDateEditPrivate::loadSvg(const QString &path, int size)
+{
+    Q_Q(KCustomDateEdit);
+    int origSize = size;
+    const auto ratio = qApp->devicePixelRatio();
+
+    if ( 2 == ratio)
+    {
+        size += origSize;
+    }
+    else if (3 == ratio)
+    {
+        size += origSize;
+    }
+
+    QPixmap pixmap(size, size);
+    QSvgRenderer renderer(path);
+    pixmap.fill(Qt::transparent);
+
+    QPainter painter;
+    painter.begin(&pixmap);
+    renderer.render(&painter);
+    painter.end();
+
+    pixmap.setDevicePixelRatio(ratio);
+    return drawSymbolicColoredPixmap(pixmap);
+}
+
+QPixmap KCustomDateEditPrivate::drawSymbolicColoredPixmap(const QPixmap &source)
+{
+    Q_Q(KCustomDateEdit);
+    QImage img = source.toImage();
+
+    for (int x = 0; x < img.width(); x++)
+    {
+        for (int y = 0; y < img.height(); y++)
+        {
+            QColor color = img.pixelColor(x, y);
+
+            if (color.alpha() > 0)
+            {
+                QColor colorSet = q->palette().color(QPalette::ButtonText);
+                color.setRed(colorSet.red());
+                color.setGreen(colorSet.green());
+                color.setBlue(colorSet.blue());
+                img.setPixelColor(x, y, color);
+            }
+        }
+    }
+
+    return QPixmap::fromImage(img);
+}
+
+KCustomDateEdit::KCustomDateEdit(QWidget *parent) : QDateTimeEdit(parent), d_ptr(new KCustomDateEditPrivate(this))
+{
+    Q_D(KCustomDateEdit);
+    this->installEventFilter(this);
+    this->setButtonSymbols(QAbstractSpinBox::NoButtons);
+}
+
+void KCustomDateEdit::showCalendar()
+{
+    Q_D(KCustomDateEdit);
+    QStyleOptionComboBox opt;
+    opt.initFrom(this);
+    QRect arrowRect = style()->subControlRect(QStyle::CC_ComboBox, &opt, QStyle::SC_ComboBoxArrow, this);
+    int randomX = QRandomGenerator::global()->bounded(arrowRect.x(), arrowRect.x() + arrowRect.width());
+    int randomY = QRandomGenerator::global()->bounded(arrowRect.y(), arrowRect.y() + arrowRect.height());
+
+    QMouseEvent *event = new QMouseEvent(QEvent::MouseButtonPress, QPoint(randomX, randomY), Qt::LeftButton, Qt::LeftButton, Qt::NoModifier);
+    QApplication::postEvent(this, event);
+}
+
+void KCustomDateEdit::setShowLunar(bool showLunar)
+{
+    Q_D(KCustomDateEdit);
+    d->m_pCalendar->setShowLunar(showLunar);
+}
+
+void KCustomDateEdit::updateStyle(bool isDark)
+{
+    Q_D(KCustomDateEdit);
+
+    if(d->m_pCalendar == nullptr)
+        return;
+
+    if(isDark)
+    {
+        d->m_pCalendar->setWeekBgColor(QColor(29, 29, 29));
+        d->m_pCalendar->setWeekTextColor(QColor(255, 255, 255));
+        d->m_pCalendar->setBorderColor(QColor(180, 180, 180));
+        d->m_pCalendar->setWeekColor(QColor(255, 255, 255));
+        d->m_pCalendar->setLunarColor(QColor(55, 156, 238));
+        d->m_pCalendar->setCurrentTextColor(QColor(255, 255, 255));
+        d->m_pCalendar->setOtherTextColor(QColor(200, 200, 200));
+        d->m_pCalendar->setSelectTextColor(QColor(255, 255, 255));
+        d->m_pCalendar->setHoverTextColor(QColor(250, 250, 250));
+        d->m_pCalendar->setCurrentLunarColor(QColor(179, 179, 179));
+        d->m_pCalendar->setOtherLunarColor(QColor(179, 179, 179));
+        d->m_pCalendar->setSelectLunarColor(QColor(179, 179, 179));
+        d->m_pCalendar->setHoverLunarColor(QColor(179, 179, 179));
+        d->m_pCalendar->setCurrentBgColor(QColor(29, 29, 29));
+        d->m_pCalendar->setOtherBgColor(QColor(29, 29, 29));
+        d->m_pCalendar->setSelectBgColor(QColor(55, 144, 250));
+        d->m_pCalendar->setHoverBgColor(QColor(180, 180, 180));
+    }
+    else
+    {
+        d->m_pCalendar->setWeekBgColor(QColor(255, 255, 255));
+        d->m_pCalendar->setWeekTextColor(QColor(0, 0, 0));
+        d->m_pCalendar->setBorderColor(QColor(180, 180, 180));
+        d->m_pCalendar->setWeekColor(QColor(0, 0, 0));
+        d->m_pCalendar->setLunarColor(QColor(55, 156, 238));
+        d->m_pCalendar->setCurrentTextColor(QColor(0, 0, 0));
+        d->m_pCalendar->setOtherTextColor(QColor(200, 200, 200));
+        d->m_pCalendar->setSelectTextColor(QColor(255, 255, 255));
+        d->m_pCalendar->setHoverTextColor(QColor(250, 250, 250));
+        d->m_pCalendar->setCurrentLunarColor(QColor(179, 179, 179));
+        d->m_pCalendar->setOtherLunarColor(QColor(179, 179, 179));
+        d->m_pCalendar->setSelectLunarColor(QColor(179, 179, 179));
+        d->m_pCalendar->setHoverLunarColor(QColor(179, 179, 179));
+        d->m_pCalendar->setCurrentBgColor(QColor(255, 255, 255));
+        d->m_pCalendar->setOtherBgColor(QColor(255, 255, 255));
+        d->m_pCalendar->setSelectBgColor(QColor(55, 144, 250));
+        d->m_pCalendar->setHoverBgColor(QColor(180, 180, 180));
+    }
+}
+
+void KCustomDateEdit::mousePressEvent(QMouseEvent *event)
+{
+    Q_D(KCustomDateEdit);
+    QStyleOptionComboBox opt;
+    opt.initFrom(this);
+    QRect arrowRect = style()->subControlRect(QStyle::CC_ComboBox, &opt, QStyle::SC_ComboBoxArrow, this);
+    QPoint point = event->pos();
+
+    if (arrowRect.contains(event->pos()))
+    {
+        d->m_pCalendar->setDate(this->date());
+        d->m_pCalendar->move(mapToGlobal(QPoint(0, height())));
+        d->m_pCalendar->show();
+    }
+    else
+    {
+        QDateTimeEdit::mousePressEvent(event);
+    }
+}
+
+void KCustomDateEdit::paintEvent(QPaintEvent *e)
+{
+    Q_D(KCustomDateEdit);
+    Q_UNUSED(e);
+    QPainter painter(this);
+    painter.setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform);  // 反锯齿;
+    QBrush brush = QBrush(palette().color(QPalette::Button));
+    painter.setPen(Qt::NoPen);
+    painter.setBrush(brush);
+    painter.drawRoundedRect(this->rect(), 6, 6);
+    QPixmap pix = d->loadSvg("/usr/share/kylin-user-guide/data/ukui-down-symbolic.svg", 64);
+    QRect rect = QRect(113, 10, 15, 15);
+    painter.drawPixmap(rect, pix);
+
+    QRect rectBoxt = this->rect();
+    painter.setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform);  // 反锯齿;
+
+    if (d->m_pCalendar && d->m_pCalendar->isVisible())
+    {
+        d->focusFlag = true;
+    }
+
+    if (d->focusFlag == true)
+    {
+        QPen pen(palette().brush(QPalette::Active, QPalette::Highlight), 2);
+        pen.setJoinStyle(Qt::RoundJoin);
+        painter.setPen(pen);
+        painter.setBrush(Qt::NoBrush);
+        painter.translate(1, 1);
+        painter.drawRoundedRect(rectBoxt.adjusted(0, 0, -2, -2), 6, 6);
+    }
+    else if (d->hoverFlag == true)
+    {
+        painter.setPen(palette().color(QPalette::Active, QPalette::Highlight));
+        painter.setBrush(Qt::NoBrush);
+        painter.translate(0.5, 0.5);
+        painter.drawRoundedRect(rectBoxt.adjusted(0, 0, -1, -1), 6, 6);
+    }
+}
+
+bool KCustomDateEdit::eventFilter(QObject *obj, QEvent *event)
+{
+    Q_D(KCustomDateEdit);
+
+    if (QEvent::HoverEnter == event->type())
+    {
+        d->hoverFlag = true;
+        repaint();
+    }
+    else if (QEvent::HoverLeave == event->type())
+    {
+        d->hoverFlag = false;
+        repaint();
+    }
+    else if (QEvent::FocusIn == event->type())
+    {
+        d->focusFlag = true;
+        repaint();
+    }
+    else if (QEvent::FocusOut == event->type())
+    {
+        d->focusFlag = false;
+        d->hoverFlag = false;
+        repaint();
+
+        if (this->date() != QDateTime::currentDateTime().date() && !d->m_pCalendar->isVisible())
+        {
+            Q_EMIT changeDate();
+        }
+    }
+
+    return QObject::eventFilter(obj, event);
+}
+}
+
+#include "kcustomdateedit.moc"
+#include "moc_kcustomdateedit.cpp"
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kcustomdateedit.h libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kcustomdateedit.h
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kcustomdateedit.h	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kcustomdateedit.h	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,55 @@
+#ifndef KCUSTOMDATEEDIT_H
+#define KCUSTOMDATEEDIT_H
+
+#include "gui_g.h"
+#include <QDateTimeEdit>
+#include <QMouseEvent>
+#include "kminicalendarwidget.h"
+
+namespace kdk
+{
+class KCustomDateEditPrivate;
+
+/**
+ *  @defgroup KCustomDateEdit
+ *  @since 2.5
+ */
+
+class GUI_EXPORT KCustomDateEdit : public QDateTimeEdit
+{
+    Q_OBJECT
+public:
+    KCustomDateEdit(QWidget *parent = nullptr);
+
+    /**
+     * @brief 触发日历控件显示
+     */
+    void showCalendar();
+
+    /**
+     * @brief 是否显示农历
+     * @param showLunar
+     */
+    void setShowLunar(bool showLunar);
+
+    /**
+     * @brief 适应系统风格
+     * @param isDark:是否深色模式
+     */
+    void updateStyle(bool isDark);
+
+signals:
+    void changeDate();
+
+protected:
+    void mousePressEvent(QMouseEvent *event) override;
+    void paintEvent(QPaintEvent *e) override;
+    bool eventFilter(QObject *obj, QEvent *event) override;
+
+private:
+    Q_DECLARE_PRIVATE(KCustomDateEdit)
+    KCustomDateEditPrivate* const d_ptr;
+};
+}
+
+#endif // KCUSTOMDATEEDIT_H
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kcustomtabbar.cpp libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kcustomtabbar.cpp
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kcustomtabbar.cpp	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kcustomtabbar.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,3119 @@
+/*
+ * libkysdk-qtwidgets's Library
+ *
+ * Copyright (C) 2023, KylinSoft Co., Ltd.
+ *
+ * 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 3 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 General Public License
+ * along with this library.  If not, see <https://www.gnu.org/licenses/>.
+ *
+ * Authors: Zhenyu Wang <wangzhenyu@kylinos.cn>
+ *
+ */
+
+//#include "gui_g.h"
+
+//#include <QtWidgets/private/qtwidgetsglobal_p.h>
+#include "kcustomtabbar.h"
+//#include "private/qwidget_p.h"
+
+#include <QIcon>
+#include <QToolButton>
+#include <QDebug>
+//#if QT_CONFIG(animation)
+#include <QVariantAnimation>
+//#endif
+
+#include <QStyleOption>
+
+//#include "private/qlayoutengine_p.h"
+//#if QT_CONFIG(itemviews)
+//#include "qabstractitemdelegate.h"
+//#endif
+
+#include <QApplication>
+#include <QBitmap>
+#include <QCursor>
+#include <QEvent>
+#include <QPainter>
+#include <QStyle>
+#include <QStylePainter>
+#include <QAbstractButton>
+//#include <QCustomLayoutStruct>
+#include <QAbstractItemDelegate>
+
+//#if QT_CONFIG(tabwidget)
+#include <QTabWidget>
+//#endif
+#include <QToolTip>
+//#if QT_CONFIG(whatsthis)
+#include <QWhatsThis>
+//#endif
+//#ifndef QT_NO_ACCESSIBILITY
+#include <QAccessible>
+//#endif
+//#ifdef Q_OS_OSX
+//#include <qpa/qplatformnativeinterface.h>
+//#endif
+#include <QDebug>
+//#include "qdebug.h"
+//#include "private/KCustomTabBar_p.h"
+
+//#if 0 // Used to be included in Qt4 for Q_WS_MAC
+//#include <private/qt_mac_p.h>
+//#include <private/qt_cocoa_helpers_mac_p.h>
+//#endif
+
+#define ANIMATION_DURATION 250
+typedef qint64 Fixed64;
+static inline Fixed64 toFixed(int i) { return (Fixed64)i * 256; }
+static inline int fRound(Fixed64 i) {
+    return (i % 256 < 128) ? i / 256 : 1 + i / 256;
+}
+struct QCustomLayoutStruct
+{
+    inline void init(int stretchFactor = 0, int minSize = 0) {
+        stretch = stretchFactor;
+        minimumSize = sizeHint = minSize;
+        maximumSize = QLAYOUTSIZE_MAX;
+        expansive = false;
+        empty = true;
+        spacing = 0;
+    }
+
+    int smartSizeHint() {
+        return (stretch > 0) ? minimumSize : sizeHint;
+    }
+    int effectiveSpacer(int uniformSpacer) const {
+        Q_ASSERT(uniformSpacer >= 0 || spacing >= 0);
+        return (uniformSpacer >= 0) ? uniformSpacer : spacing;
+    }
+
+    // parameters
+    int stretch;
+    int sizeHint;
+    int maximumSize;
+    int minimumSize;
+    int spacing;
+    bool expansive;
+    bool empty;
+
+    // temporary storage
+    bool done;
+
+    // result
+    int pos;
+    int size;
+};
+
+class Q_DECL_HIDDEN KCustomMovableTabWidget : public QWidget
+{
+public:
+    explicit KCustomMovableTabWidget(QWidget *parent = nullptr);
+    void setPixmap(const QPixmap &pixmap);
+
+protected:
+    void paintEvent(QPaintEvent *e) override;
+
+private:
+    QPixmap m_pixmap;
+};
+
+class Q_DECL_HIDDEN KCustomTabBarPrivate
+{
+    Q_DECLARE_PUBLIC(KCustomTabBar)
+public:
+    KCustomTabBarPrivate(KCustomTabBar *parent);
+    Q_WIDGETS_EXPORT void qGeomCalc(QVector<QCustomLayoutStruct> &chain, int start, int count,
+                                int pos, int space, int spacer = -1);
+
+    int currentIndex;
+    int pressedIndex;
+    KCustomTabBar::Shape shape;
+    bool layoutDirty;
+    bool drawBase;
+    int scrollOffset;
+
+    struct Tab {
+        inline Tab(const QIcon &ico, const QString &txt)
+            : enabled(true) , shortcutId(0), text(txt), icon(ico),
+            leftWidget(0), rightWidget(0), lastTab(-1), dragOffset(0)
+#if QT_CONFIG(animation)
+            , animation(0)
+#endif // animation
+        {}
+        bool operator==(const Tab &other) const { return &other == this; }
+        bool enabled;
+        int shortcutId;
+        QString text;
+#ifndef QT_NO_TOOLTIP
+        QString toolTip;
+#endif
+#if QT_CONFIG(whatsthis)
+        QString whatsThis;
+#endif
+        QIcon icon;
+        QRect rect;
+        QRect minRect;
+        QRect maxRect;
+
+        QColor textColor;
+        QVariant data;
+        QWidget *leftWidget;
+        QWidget *rightWidget;
+        int lastTab;
+        int dragOffset;
+#ifndef QT_NO_ACCESSIBILITY
+        QString accessibleName;
+#endif
+
+#if QT_CONFIG(animation)
+        ~Tab() { delete animation; }
+        struct TabBarAnimation : public QVariantAnimation {
+            TabBarAnimation(Tab *t, KCustomTabBarPrivate *_priv) : tab(t), priv(_priv)
+            { setEasingCurve(QEasingCurve::InOutQuad); }
+
+            void updateCurrentValue(const QVariant &current) override;
+
+            void updateState(State newState, State) override;
+        private:
+            //these are needed for the callbacks
+            Tab *tab;
+            KCustomTabBarPrivate *priv;
+        } *animation;
+
+        void startAnimation(KCustomTabBarPrivate *priv, int duration) {
+            if (!priv->isAnimated()) {
+                priv->moveTabFinished(priv->tabList.indexOf(*this));
+                return;
+            }
+            if (!animation)
+                animation = new TabBarAnimation(this, priv);
+            animation->setStartValue(dragOffset);
+            animation->setEndValue(0);
+            animation->setDuration(duration);
+            animation->start();
+        }
+#else
+        void startAnimation(KCustomTabBarPrivate *priv, int duration)
+        { Q_UNUSED(duration); priv->moveTabFinished(priv->tabList.indexOf(*this)); }
+#endif // animation
+    };
+    QList<Tab> tabList;
+    mutable QHash<QString, QSize> textSizes;
+
+    int calculateNewPosition(int from, int to, int index) const;
+    void slide(int from, int to);
+    void init();
+
+    Tab *at(int index);
+    const Tab *at(int index) const;
+
+    int indexAtPos(const QPoint &p) const;
+
+    inline bool isAnimated() const { Q_Q(const KCustomTabBar); return q->style()->styleHint(QStyle::SH_Widget_Animation_Duration, 0, q) > 0; }
+    inline bool validIndex(int index) const { return index >= 0 && index < tabList.count(); }
+    void setCurrentNextEnabledIndex(int offset);
+
+    QToolButton* rightB; // right or bottom
+    QToolButton* leftB; // left or top
+
+    void moveTab(int index, int offset);
+    void moveTabFinished(int index);
+    QRect hoverRect;
+    int hoverIndex;
+
+    void refresh();
+    void layoutTabs();
+    void layoutWidgets(int start = 0);
+    void layoutTab(int index);
+    void updateMacBorderMetrics();
+    bool isTabInMacUnifiedToolbarArea() const;
+    void setupMovableTab();
+    void autoHideTabs();
+    QRect normalizedScrollRect(int index = -1);
+    int hoveredTabIndex() const;
+
+    void initBasicStyleOption(QStyleOptionTab *option, int tabIndex) const;
+
+    void makeVisible(int index);
+    QSize iconSize;
+    Qt::TextElideMode elideMode;
+    bool elideModeSetByUser;
+    bool useScrollButtons;
+    bool useScrollButtonsSetByUser;
+
+    bool expanding;
+    bool closeButtonOnTabs;
+    KCustomTabBar::SelectionBehavior selectionBehaviorOnRemove;
+
+    QPoint dragStartPosition;
+    bool paintWithOffsets;
+    bool movable;
+    bool dragInProgress;
+    bool documentMode;
+    bool autoHide;
+    bool changeCurrentOnDrag;
+
+    int switchTabCurrentIndex;
+    int switchTabTimerId;
+
+    KCustomMovableTabWidget *movingTab;
+
+    // shared by tabwidget and KCustomTabBar
+    static void initStyleBaseOption(QStyleOptionTabBarBase *optTabBase, KCustomTabBar *tabbar, QSize size)
+    {
+        QStyleOptionTab tabOverlap;
+        tabOverlap.shape = static_cast<const QTabBar::Shape>(tabbar->shape());
+        int overlap = tabbar->style()->pixelMetric(QStyle::PM_TabBarBaseOverlap, &tabOverlap, tabbar);
+        QWidget *theParent = tabbar->parentWidget();
+        optTabBase->init(tabbar);
+        optTabBase->shape = static_cast<const QTabBar::Shape>(tabbar->shape());
+        optTabBase->documentMode = tabbar->documentMode();
+        if (theParent && overlap > 0) {
+            QRect rect;
+            switch (tabOverlap.shape) {
+            case KCustomTabBar::RoundedNorth:
+            case KCustomTabBar::TriangularNorth:
+                rect.setRect(0, size.height()-overlap, size.width(), overlap);
+                break;
+            case KCustomTabBar::RoundedSouth:
+            case KCustomTabBar::TriangularSouth:
+                rect.setRect(0, 0, size.width(), overlap);
+                break;
+            case KCustomTabBar::RoundedEast:
+            case KCustomTabBar::TriangularEast:
+                rect.setRect(0, 0, overlap, size.height());
+                break;
+            case KCustomTabBar::RoundedWest:
+            case KCustomTabBar::TriangularWest:
+                rect.setRect(size.width() - overlap, 0, overlap, size.height());
+                break;
+            }
+            optTabBase->rect = rect;
+        }
+    }
+
+    void killSwitchTabTimer();
+
+private:
+    KCustomTabBar *const q_ptr;
+
+};
+
+namespace {
+class Q_DECL_HIDDEN CloseButton : public QAbstractButton
+{
+    Q_OBJECT
+
+public:
+    explicit CloseButton(QWidget *parent = 0);
+
+    QSize sizeHint() const override;
+    QSize minimumSizeHint() const override;
+    void enterEvent(QEvent *event) override;
+    void leaveEvent(QEvent *event) override;
+    void paintEvent(QPaintEvent *event) override;
+};
+}
+
+KCustomMovableTabWidget::KCustomMovableTabWidget(QWidget *parent)
+    : QWidget(parent)
+{
+}
+
+void KCustomMovableTabWidget::setPixmap(const QPixmap &pixmap)
+{
+    m_pixmap = pixmap;
+    update();
+}
+
+void KCustomMovableTabWidget::paintEvent(QPaintEvent *e)
+{
+    Q_UNUSED(e);
+    QPainter p(this);
+    p.drawPixmap(0, 0, m_pixmap);
+}
+
+inline static bool verticalTabs(KCustomTabBar::Shape shape)
+{
+    return shape == KCustomTabBar::RoundedWest
+           || shape == KCustomTabBar::RoundedEast
+           || shape == KCustomTabBar::TriangularWest
+           || shape == KCustomTabBar::TriangularEast;
+}
+
+void KCustomTabBarPrivate::updateMacBorderMetrics()
+{
+#if defined(Q_OS_OSX)
+    Q_Q(KCustomTabBar);
+    // Extend the unified title and toolbar area to cover the tab bar iff
+    // 1) the tab bar is in document mode
+    // 2) the tab bar is directly below an "unified" area.
+    // The extending itself is done in the Cocoa platform plugin and Mac style,
+    // this function registers geometry and visibility state for the tab bar.
+
+    // Calculate geometry
+    int upper, lower;
+    if (documentMode) {
+        QPoint windowPos = q->mapTo(q->window(), QPoint(0,0));
+        upper = windowPos.y();
+        int tabStripHeight = q->tabSizeHint(0).height();
+        int pixelTweak = -3;
+        lower = upper + tabStripHeight + pixelTweak;
+    } else {
+        upper = 0;
+        lower = 0;
+    }
+
+    QPlatformNativeInterface *nativeInterface = QGuiApplication::platformNativeInterface();
+    quintptr identifier = reinterpret_cast<quintptr>(q);
+
+    // Set geometry
+    QPlatformNativeInterface::NativeResourceForIntegrationFunction function =
+        nativeInterface->nativeResourceFunctionForIntegration("registerContentBorderArea");
+    if (!function)
+        return; // Not Cocoa platform plugin.
+    typedef void (*RegisterContentBorderAreaFunction)(QWindow *window, quintptr identifier, int upper, int lower);
+    (reinterpret_cast<RegisterContentBorderAreaFunction>(function))(q->window()->windowHandle(), identifier, upper, lower);
+
+    // Set visibility state
+    function = nativeInterface->nativeResourceFunctionForIntegration("setContentBorderAreaEnabled");
+    if (!function)
+        return;
+    typedef void (*SetContentBorderAreaEnabledFunction)(QWindow *window, quintptr identifier, bool enable);
+    (reinterpret_cast<SetContentBorderAreaEnabledFunction>(function))(q->window()->windowHandle(), identifier, q->isVisible());
+#endif
+}
+
+/*!
+    \internal
+    This is basically KCustomTabBar::initStyleOption() but
+    without the expensive QFontMetrics::elidedText() call.
+*/
+
+void KCustomTabBarPrivate::initBasicStyleOption(QStyleOptionTab *option, int tabIndex) const
+{
+    Q_Q(const KCustomTabBar);
+    const int totalTabs = tabList.size();
+
+    if (!option || (tabIndex < 0 || tabIndex >= totalTabs))
+        return;
+
+    const KCustomTabBarPrivate::Tab &tab = tabList.at(tabIndex);
+    option->initFrom(q);
+    option->state &= ~(QStyle::State_HasFocus | QStyle::State_MouseOver);
+    option->rect = q->tabRect(tabIndex);
+    const bool isCurrent = tabIndex == currentIndex;
+    option->row = 0;
+    if (tabIndex == pressedIndex)
+        option->state |= QStyle::State_Sunken;
+    if (isCurrent)
+        option->state |= QStyle::State_Selected;
+    if (isCurrent && q->hasFocus())
+        option->state |= QStyle::State_HasFocus;
+    if (!tab.enabled)
+        option->state &= ~QStyle::State_Enabled;
+    if (q->isActiveWindow())
+        option->state |= QStyle::State_Active;
+    if (!dragInProgress && option->rect == hoverRect)
+        option->state |= QStyle::State_MouseOver;
+    option->shape = static_cast<const QTabBar::Shape>(shape);
+    option->text = tab.text;
+
+    if (tab.textColor.isValid())
+        option->palette.setColor(q->foregroundRole(), tab.textColor);
+    option->icon = tab.icon;
+    option->iconSize = q->iconSize();  // Will get the default value then.
+
+    option->leftButtonSize = tab.leftWidget ? tab.leftWidget->size() : QSize();
+    option->rightButtonSize = tab.rightWidget ? tab.rightWidget->size() : QSize();
+    option->documentMode = documentMode;
+
+    if (tabIndex > 0 && tabIndex - 1 == currentIndex)
+        option->selectedPosition = QStyleOptionTab::PreviousIsSelected;
+    else if (tabIndex + 1 < totalTabs && tabIndex + 1 == currentIndex)
+        option->selectedPosition = QStyleOptionTab::NextIsSelected;
+    else
+        option->selectedPosition = QStyleOptionTab::NotAdjacent;
+
+    const bool paintBeginning = (tabIndex == 0) || (dragInProgress && tabIndex == pressedIndex + 1);
+    const bool paintEnd = (tabIndex == totalTabs - 1) || (dragInProgress && tabIndex == pressedIndex - 1);
+    if (paintBeginning) {
+        if (paintEnd)
+            option->position = QStyleOptionTab::OnlyOneTab;
+        else
+            option->position = QStyleOptionTab::Beginning;
+    } else if (paintEnd) {
+        option->position = QStyleOptionTab::End;
+    } else {
+        option->position = QStyleOptionTab::Middle;
+    }
+
+#if QT_CONFIG(tabwidget)
+    if (const QTabWidget *tw = qobject_cast<const QTabWidget *>(q->parentWidget())) {
+        option->features |= QStyleOptionTab::HasFrame;
+        if (tw->cornerWidget(Qt::TopLeftCorner) || tw->cornerWidget(Qt::BottomLeftCorner))
+            option->cornerWidgets |= QStyleOptionTab::LeftCornerWidget;
+        if (tw->cornerWidget(Qt::TopRightCorner) || tw->cornerWidget(Qt::BottomRightCorner))
+            option->cornerWidgets |= QStyleOptionTab::RightCornerWidget;
+    }
+#endif
+}
+
+/*!
+    Initialize \a option with the values from the tab at \a tabIndex. This method
+    is useful for subclasses when they need a QStyleOptionTab,
+    but don't want to fill in all the information themselves.
+
+    \sa QStyleOption::initFrom(), QTabWidget::initStyleOption()
+*/
+void KCustomTabBar::initStyleOption(QStyleOptionTab *option, int tabIndex) const
+{
+    Q_D(const KCustomTabBar);
+    d->initBasicStyleOption(option, tabIndex);
+
+    QRect textRect = style()->subElementRect(QStyle::SE_TabBarTabText, option, this);
+
+    option->text = fontMetrics().elidedText(option->text, d->elideMode, textRect.width(),
+                        Qt::TextShowMnemonic);
+}
+
+void KCustomTabBarPrivate::init()
+{
+    Q_Q(KCustomTabBar);
+    leftB = new QToolButton(q);
+    leftB->setAutoRepeat(true);
+//    QObject::connect(leftB, SIGNAL(clicked()), q, SLOT(scrollTabs()));
+    QObject::connect(leftB,&QToolButton::clicked,q,[=]{
+        q->leftScrollTabs();
+    });
+    leftB->hide();
+    rightB = new QToolButton(q);
+    rightB->setAutoRepeat(true);
+//    QObject::connect(rightB, SIGNAL(clicked()), q, SLOT(scrollTabs()));
+    QObject::connect(rightB,&QToolButton::clicked,q,[=]{
+        q->rightScrollTabs();
+    });
+    rightB->hide();
+#ifdef QT_KEYPAD_NAVIGATION
+    if (QApplication::keypadNavigationEnabled()) {
+        leftB->setFocusPolicy(Qt::NoFocus);
+        rightB->setFocusPolicy(Qt::NoFocus);
+        q->setFocusPolicy(Qt::NoFocus);
+    } else
+#endif
+        q->setFocusPolicy(Qt::TabFocus);
+
+#ifndef QT_NO_ACCESSIBILITY
+    leftB->setAccessibleName(KCustomTabBar::tr("Scroll Left"));
+    rightB->setAccessibleName(KCustomTabBar::tr("Scroll Right"));
+#endif
+    q->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
+    elideMode = Qt::TextElideMode(q->style()->styleHint(QStyle::SH_TabBar_ElideMode, 0, q));
+    useScrollButtons = !q->style()->styleHint(QStyle::SH_TabBar_PreferNoArrows, 0, q);
+}
+
+KCustomTabBarPrivate::Tab *KCustomTabBarPrivate::at(int index)
+{
+    return validIndex(index)?&tabList[index]:0;
+}
+
+const KCustomTabBarPrivate::Tab *KCustomTabBarPrivate::at(int index) const
+{
+    return validIndex(index)?&tabList[index]:0;
+}
+
+int KCustomTabBarPrivate::indexAtPos(const QPoint &p) const
+{
+    Q_Q(const KCustomTabBar);
+    if (q->tabRect(currentIndex).contains(p))
+        return currentIndex;
+    for (int i = 0; i < tabList.count(); ++i)
+        if (tabList.at(i).enabled && q->tabRect(i).contains(p))
+            return i;
+    return -1;
+}
+
+void KCustomTabBarPrivate::layoutTabs()
+{
+    Q_Q(KCustomTabBar);
+    layoutDirty = false;
+    QSize size = q->size();
+    int last, available;
+    int maxExtent;
+    int i;
+    bool vertTabs = verticalTabs(shape);
+    int tabChainIndex = 0;
+
+    Qt::Alignment tabAlignment = Qt::Alignment(q->style()->styleHint(QStyle::SH_TabBar_Alignment, 0, q));
+    QVector<QCustomLayoutStruct> tabChain(tabList.count() + 2);
+
+    // We put an empty item at the front and back and set its expansive attribute
+    // depending on tabAlignment and expanding.
+    tabChain[tabChainIndex].init();
+    tabChain[tabChainIndex].expansive = (!expanding)
+                                        && (tabAlignment != Qt::AlignLeft)
+                                        && (tabAlignment != Qt::AlignJustify);
+    tabChain[tabChainIndex].empty = true;
+    ++tabChainIndex;
+
+    // We now go through our list of tabs and set the minimum size and the size hint
+    // This will allow us to elide text if necessary. Since we don't set
+    // a maximum size, tabs will EXPAND to fill up the empty space.
+    // Since tab widget is rather *ahem* strict about keeping the geometry of the
+    // tab bar to its absolute minimum, this won't bleed through, but will show up
+    // if you use tab bar on its own (a.k.a. not a bug, but a feature).
+    // Update: if expanding is false, we DO set a maximum size to prevent the tabs
+    // being wider than necessary.
+    if (!vertTabs) {
+        int minx = 0;
+        int x = 0;
+        int maxHeight = 0;
+        for (i = 0; i < tabList.count(); ++i, ++tabChainIndex) {
+            QSize sz = q->tabSizeHint(i);
+            tabList[i].maxRect = QRect(x, 0, sz.width(), sz.height());
+            x += sz.width();
+            maxHeight = qMax(maxHeight, sz.height());
+            sz = q->minimumTabSizeHint(i);
+            tabList[i].minRect = QRect(minx, 0, sz.width(), sz.height());
+            minx += sz.width();
+            tabChain[tabChainIndex].init();
+            tabChain[tabChainIndex].sizeHint = tabList.at(i).maxRect.width();
+            tabChain[tabChainIndex].minimumSize = sz.width();
+            tabChain[tabChainIndex].empty = false;
+            tabChain[tabChainIndex].expansive = true;
+
+            if (!expanding)
+                tabChain[tabChainIndex].maximumSize = tabChain[tabChainIndex].sizeHint;
+        }
+
+        last = minx;
+        available = size.width();
+        maxExtent = maxHeight;
+    } else {
+        int miny = 0;
+        int y = 0;
+        int maxWidth = 0;
+        for (i = 0; i < tabList.count(); ++i, ++tabChainIndex) {
+            QSize sz = q->tabSizeHint(i);
+            tabList[i].maxRect = QRect(0, y, sz.width(), sz.height());
+            y += sz.height();
+            maxWidth = qMax(maxWidth, sz.width());
+            sz = q->minimumTabSizeHint(i);
+            tabList[i].minRect = QRect(0, miny, sz.width(), sz.height());
+            miny += sz.height();
+            tabChain[tabChainIndex].init();
+            tabChain[tabChainIndex].sizeHint = tabList.at(i).maxRect.height();
+            tabChain[tabChainIndex].minimumSize = sz.height();
+            tabChain[tabChainIndex].empty = false;
+            tabChain[tabChainIndex].expansive = true;
+
+            if (!expanding)
+                tabChain[tabChainIndex].maximumSize = tabChain[tabChainIndex].sizeHint;
+        }
+
+        last = miny;
+        available = size.height();
+        maxExtent = maxWidth;
+    }
+
+    // Mirror our front item.
+    tabChain[tabChainIndex].init();
+    tabChain[tabChainIndex].expansive = (!expanding)
+                                        && (tabAlignment != Qt::AlignRight)
+                                        && (tabAlignment != Qt::AlignJustify);
+    tabChain[tabChainIndex].empty = true;
+    Q_ASSERT(tabChainIndex == tabChain.count() - 1); // add an assert just to make sure.
+
+    // Do the calculation
+    qGeomCalc(tabChain, 0, tabChain.count(), 0, qMax(available, last), 0);
+
+    // Use the results
+    for (i = 0; i < tabList.count(); ++i) {
+        const QCustomLayoutStruct &lstruct = tabChain.at(i + 1);
+        if (!vertTabs)
+            tabList[i].rect.setRect(lstruct.pos, 0, lstruct.size, maxExtent);
+        else
+            tabList[i].rect.setRect(0, lstruct.pos, maxExtent, lstruct.size);
+    }
+
+    if (useScrollButtons && tabList.count() && last > available) {
+        const QRect scrollRect = normalizedScrollRect(0);
+        scrollOffset = -scrollRect.left();
+
+        Q_Q(KCustomTabBar);
+        QStyleOption opt;
+        opt.init(q);
+        QRect scrollButtonLeftRect = q->style()->subElementRect(QStyle::SE_TabBarScrollLeftButton, &opt, q);
+        QRect scrollButtonRightRect = q->style()->subElementRect(QStyle::SE_TabBarScrollRightButton, &opt, q);
+        int scrollButtonWidth = q->style()->pixelMetric(QStyle::PM_TabBarScrollButtonWidth, &opt, q);
+
+        // Normally SE_TabBarScrollLeftButton should have the same width as PM_TabBarScrollButtonWidth.
+        // But if that is not the case, we set the actual button width to PM_TabBarScrollButtonWidth, and
+        // use the extra space from SE_TabBarScrollLeftButton as margins towards the tabs.
+        if (vertTabs) {
+            scrollButtonLeftRect.setHeight(scrollButtonWidth);
+            scrollButtonRightRect.setY(scrollButtonRightRect.bottom() + 1 - scrollButtonWidth);
+            scrollButtonRightRect.setHeight(scrollButtonWidth);
+            leftB->setArrowType(Qt::UpArrow);
+            rightB->setArrowType(Qt::DownArrow);
+        } else if (q->layoutDirection() == Qt::RightToLeft) {
+            scrollButtonRightRect.setWidth(scrollButtonWidth);
+            scrollButtonLeftRect.setX(scrollButtonLeftRect.right() + 1 - scrollButtonWidth);
+            scrollButtonLeftRect.setWidth(scrollButtonWidth);
+            leftB->setArrowType(Qt::RightArrow);
+            rightB->setArrowType(Qt::LeftArrow);
+        } else {
+            scrollButtonLeftRect.setWidth(scrollButtonWidth);
+            scrollButtonRightRect.setX(scrollButtonRightRect.right() + 1 - scrollButtonWidth);
+            scrollButtonRightRect.setWidth(scrollButtonWidth);
+            leftB->setArrowType(Qt::LeftArrow);
+            rightB->setArrowType(Qt::RightArrow);
+        }
+
+        leftB->setGeometry(scrollButtonLeftRect);
+        leftB->setEnabled(false);
+        leftB->show();
+
+        rightB->setGeometry(scrollButtonRightRect);
+        rightB->setEnabled(last - scrollOffset > scrollRect.x() + scrollRect.width());
+        rightB->show();
+    } else {
+        scrollOffset = 0;
+        rightB->hide();
+        leftB->hide();
+    }
+
+    layoutWidgets();
+    q->tabLayoutChange();
+}
+
+QRect KCustomTabBarPrivate::normalizedScrollRect(int index)
+{
+    // "Normalized scroll rect" means return the free space on the tab bar
+    // that doesn't overlap with scroll buttons or tear indicators, and
+    // always return the rect as horizontal Qt::LeftToRight, even if the
+    // tab bar itself is in a different orientation.
+
+    Q_Q(KCustomTabBar);
+    QStyleOptionTab opt;
+    q->initStyleOption(&opt, currentIndex);
+    opt.rect = q->rect();
+
+    QRect scrollButtonLeftRect = q->style()->subElementRect(QStyle::SE_TabBarScrollLeftButton, &opt, q);
+    QRect scrollButtonRightRect = q->style()->subElementRect(QStyle::SE_TabBarScrollRightButton, &opt, q);
+    QRect tearLeftRect = q->style()->subElementRect(QStyle::SE_TabBarTearIndicatorLeft, &opt, q);
+    QRect tearRightRect = q->style()->subElementRect(QStyle::SE_TabBarTearIndicatorRight, &opt, q);
+
+    if (verticalTabs(shape)) {
+        int topEdge, bottomEdge;
+        bool leftButtonIsOnTop = scrollButtonLeftRect.y() < q->height() / 2;
+        bool rightButtonIsOnTop = scrollButtonRightRect.y() < q->height() / 2;
+
+        if (leftButtonIsOnTop && rightButtonIsOnTop) {
+            topEdge = scrollButtonRightRect.bottom() + 1;
+            bottomEdge = q->height();
+        } else if (!leftButtonIsOnTop && !rightButtonIsOnTop) {
+            topEdge = 0;
+            bottomEdge = scrollButtonLeftRect.top();
+        } else {
+            topEdge = scrollButtonLeftRect.bottom() + 1;
+            bottomEdge = scrollButtonRightRect.top();
+        }
+
+        bool tearTopVisible = index != 0 && topEdge != -scrollOffset;
+        bool tearBottomVisible = index != tabList.size() - 1 && bottomEdge != tabList.constLast().rect.bottom() + 1 - scrollOffset;
+        if (tearTopVisible && !tearLeftRect.isNull())
+            topEdge = tearLeftRect.bottom() + 1;
+        if (tearBottomVisible && !tearRightRect.isNull())
+            bottomEdge = tearRightRect.top();
+
+        return QRect(topEdge, 0, bottomEdge - topEdge, q->height());
+    } else {
+        if (q->layoutDirection() == Qt::RightToLeft) {
+            scrollButtonLeftRect = QStyle::visualRect(Qt::RightToLeft, q->rect(), scrollButtonLeftRect);
+            scrollButtonRightRect = QStyle::visualRect(Qt::RightToLeft, q->rect(), scrollButtonRightRect);
+            tearLeftRect = QStyle::visualRect(Qt::RightToLeft, q->rect(), tearLeftRect);
+            tearRightRect = QStyle::visualRect(Qt::RightToLeft, q->rect(), tearRightRect);
+        }
+
+        int leftEdge, rightEdge;
+        bool leftButtonIsOnLeftSide = scrollButtonLeftRect.x() < q->width() / 2;
+        bool rightButtonIsOnLeftSide = scrollButtonRightRect.x() < q->width() / 2;
+
+        if (leftButtonIsOnLeftSide && rightButtonIsOnLeftSide) {
+            leftEdge = scrollButtonRightRect.right() + 1;
+            rightEdge = q->width();
+        } else if (!leftButtonIsOnLeftSide && !rightButtonIsOnLeftSide) {
+            leftEdge = 0;
+            rightEdge = scrollButtonLeftRect.left();
+        } else {
+            leftEdge = scrollButtonLeftRect.right() + 1;
+            rightEdge = scrollButtonRightRect.left();
+        }
+
+        bool tearLeftVisible = index != 0 && leftEdge != -scrollOffset;
+        bool tearRightVisible = index != tabList.size() - 1 && rightEdge != tabList.constLast().rect.right() + 1 - scrollOffset;
+        if (tearLeftVisible && !tearLeftRect.isNull())
+            leftEdge = tearLeftRect.right() + 1;
+        if (tearRightVisible && !tearRightRect.isNull())
+            rightEdge = tearRightRect.left();
+
+        return QRect(leftEdge, 0, rightEdge - leftEdge, q->height());
+    }
+}
+
+int KCustomTabBarPrivate::hoveredTabIndex() const
+{
+    if (dragInProgress)
+        return currentIndex;
+    if (hoverIndex >= 0)
+        return hoverIndex;
+    return -1;
+}
+
+void KCustomTabBarPrivate::makeVisible(int index)
+{
+    Q_Q(KCustomTabBar);
+    if (!validIndex(index) || leftB->isHidden())
+        return;
+
+    const QRect tabRect = tabList.at(index).rect;
+    const int oldScrollOffset = scrollOffset;
+    const bool horiz = !verticalTabs(shape);
+    const int tabStart = horiz ? tabRect.left() : tabRect.top();
+    const int tabEnd = horiz ? tabRect.right() : tabRect.bottom();
+    const int lastTabEnd = horiz ? tabList.constLast().rect.right() : tabList.constLast().rect.bottom();
+    const QRect scrollRect = normalizedScrollRect(index);
+    const int scrolledTabBarStart = qMax(1, scrollRect.left() + scrollOffset);
+    const int scrolledTabBarEnd = qMin(lastTabEnd - 1, scrollRect.right() + scrollOffset);
+
+    if (tabStart < scrolledTabBarStart) {
+        // Tab is outside on the left, so scroll left.
+        scrollOffset = tabStart - scrollRect.left();
+    } else if (tabEnd > scrolledTabBarEnd) {
+        // Tab is outside on the right, so scroll right.
+        scrollOffset = tabEnd - scrollRect.right();
+    }
+
+    leftB->setEnabled(scrollOffset > -scrollRect.left());
+    emit q->leftBStatus(scrollOffset > -scrollRect.left());
+    rightB->setEnabled(scrollOffset < lastTabEnd - scrollRect.right());
+    emit q->rightBStatus(scrollOffset < lastTabEnd - scrollRect.right());
+
+    if (oldScrollOffset != scrollOffset) {
+        q->update();
+        layoutWidgets();
+    }
+}
+
+void KCustomTabBarPrivate::killSwitchTabTimer()
+{
+    Q_Q(KCustomTabBar);
+    if (switchTabTimerId) {
+        q->killTimer(switchTabTimerId);
+        switchTabTimerId = 0;
+    }
+    switchTabCurrentIndex = -1;
+}
+
+void KCustomTabBarPrivate::layoutTab(int index)
+{
+    Q_Q(KCustomTabBar);
+    Q_ASSERT(index >= 0);
+
+    Tab &tab = tabList[index];
+    bool vertical = verticalTabs(shape);
+    if (!(tab.leftWidget || tab.rightWidget))
+        return;
+
+    QStyleOptionTab opt;
+    q->initStyleOption(&opt, index);
+    if (tab.leftWidget) {
+        QRect rect = q->style()->subElementRect(QStyle::SE_TabBarTabLeftButton, &opt, q);
+        QPoint p = rect.topLeft();
+        if ((index == pressedIndex) || paintWithOffsets) {
+            if (vertical)
+                p.setY(p.y() + tabList[index].dragOffset);
+            else
+                p.setX(p.x() + tabList[index].dragOffset);
+        }
+        tab.leftWidget->move(p);
+    }
+    if (tab.rightWidget) {
+        QRect rect = q->style()->subElementRect(QStyle::SE_TabBarTabRightButton, &opt, q);
+        QPoint p = rect.topLeft();
+        if ((index == pressedIndex) || paintWithOffsets) {
+            if (vertical)
+                p.setY(p.y() + tab.dragOffset);
+            else
+                p.setX(p.x() + tab.dragOffset);
+        }
+        tab.rightWidget->move(p);
+    }
+}
+
+void KCustomTabBarPrivate::layoutWidgets(int start)
+{
+    Q_Q(KCustomTabBar);
+    for (int i = start; i < q->count(); ++i) {
+        layoutTab(i);
+    }
+}
+
+void KCustomTabBarPrivate::autoHideTabs()
+{
+    Q_Q(KCustomTabBar);
+
+    if (autoHide)
+        q->setVisible(q->count() > 1);
+}
+
+void KCustomTabBar::closeTab()
+{
+    Q_D(KCustomTabBar);
+    QObject *object = sender();
+    int tabToClose = -1;
+    KCustomTabBar::ButtonPosition closeSide = (KCustomTabBar::ButtonPosition)style()->styleHint(QStyle::SH_TabBar_CloseButtonPosition, 0, this);
+    for (int i = 0; i < d->tabList.count(); ++i) {
+        if (closeSide == KCustomTabBar::LeftSide) {
+            if (d->tabList.at(i).leftWidget == object) {
+                tabToClose = i;
+                break;
+            }
+        } else {
+            if (d->tabList.at(i).rightWidget == object) {
+                tabToClose = i;
+                break;
+            }
+        }
+    }
+    if (tabToClose != -1)
+        emit tabCloseRequested(tabToClose);
+}
+
+//void KCustomTabBar::scrollTabs()
+//{
+
+//    if (sender1 == d->leftB) {
+
+//    } else if (sender1 == d->rightB) {
+
+//    }
+//}
+
+void KCustomTabBar::leftScrollTabs()
+{
+    Q_D(KCustomTabBar);
+//    const QObject *sender1 = sender();
+
+    const bool horizontal = !verticalTabs(d->shape);
+    const QRect scrollRect = d->normalizedScrollRect();
+    int i = -1;
+    for (i = d->tabList.count() - 1; i >= 0; --i) {
+
+        int start = horizontal ? d->tabList.at(i).rect.left() : d->tabList.at(i).rect.top();
+        if (start < scrollRect.left() + d->scrollOffset) {
+            d->makeVisible(i);
+            return;
+        }
+    }
+
+}
+
+void KCustomTabBar::rightScrollTabs()
+{
+    Q_D(KCustomTabBar);
+
+//    const QObject *sender1 = sender();
+    const bool horizontal = !verticalTabs(d->shape);
+    const QRect scrollRect = d->normalizedScrollRect();
+    int i = -1;
+    for (i = 0; i < d->tabList.count(); ++i) {
+
+        int end = horizontal ? d->tabList.at(i).rect.right() : d->tabList.at(i).rect.bottom();
+
+        if (end > scrollRect.right() + d->scrollOffset) {
+            d->makeVisible(i);
+            return;
+        }
+    }
+}
+
+void KCustomTabBarPrivate::refresh()
+{
+    Q_Q(KCustomTabBar);
+
+    // be safe in case a subclass is also handling move with the tabs
+    if (pressedIndex != -1
+        && movable
+        && QApplication::mouseButtons() == Qt::NoButton) {
+        moveTabFinished(pressedIndex);
+        if (!validIndex(pressedIndex))
+            pressedIndex = -1;
+    }
+
+    if (!q->isVisible()) {
+        layoutDirty = true;
+    } else {
+        layoutTabs();
+        makeVisible(currentIndex);
+        q->update();
+        q->updateGeometry();
+    }
+}
+
+/*!
+    Creates a new tab bar with the given \a parent.
+*/
+KCustomTabBar::KCustomTabBar(QWidget* parent)
+    :QWidget(parent)
+    ,d_ptr(new KCustomTabBarPrivate(this))
+{
+    Q_D(KCustomTabBar);
+    d->init();
+}
+
+
+/*!
+    Destroys the tab bar.
+*/
+KCustomTabBar::~KCustomTabBar()
+{
+}
+
+/*!
+    \property KCustomTabBar::shape
+    \brief the shape of the tabs in the tab bar
+
+    Possible values for this property are described by the Shape enum.
+*/
+
+
+KCustomTabBar::Shape KCustomTabBar::shape() const
+{
+    Q_D(const KCustomTabBar);
+    return d->shape;
+}
+
+void KCustomTabBar::setShape(Shape shape)
+{
+    Q_D(KCustomTabBar);
+    if (d->shape == shape)
+        return;
+    d->shape = shape;
+    d->refresh();
+}
+
+/*!
+    \property KCustomTabBar::drawBase
+    \brief defines whether or not tab bar should draw its base.
+
+    If true then KCustomTabBar draws a base in relation to the styles overlab.
+    Otherwise only the tabs are drawn.
+
+    \sa QStyle::pixelMetric(), QStyle::PM_TabBarBaseOverlap, QStyleOptionTabBarBase
+*/
+
+void KCustomTabBar::setDrawBase(bool drawBase)
+{
+    Q_D(KCustomTabBar);
+    if (d->drawBase == drawBase)
+        return;
+    d->drawBase = drawBase;
+    update();
+}
+
+bool KCustomTabBar::drawBase() const
+{
+    Q_D(const KCustomTabBar);
+    return d->drawBase;
+}
+
+/*!
+    Adds a new tab with text \a text. Returns the new
+    tab's index.
+*/
+int KCustomTabBar::addTab(const QString &text)
+{
+    return insertTab(-1, text);
+}
+
+/*!
+    \overload
+
+    Adds a new tab with icon \a icon and text \a
+    text. Returns the new tab's index.
+*/
+int KCustomTabBar::addTab(const QIcon& icon, const QString &text)
+{
+    return insertTab(-1, icon, text);
+}
+
+/*!
+    Inserts a new tab with text \a text at position \a index. If \a
+    index is out of range, the new tab is appened. Returns the new
+    tab's index.
+*/
+int KCustomTabBar::insertTab(int index, const QString &text)
+{
+    return insertTab(index, QIcon(), text);
+}
+
+/*!\overload
+
+    Inserts a new tab with icon \a icon and text \a text at position
+    \a index. If \a index is out of range, the new tab is
+    appended. Returns the new tab's index.
+
+    If the KCustomTabBar was empty before this function is called, the inserted tab
+    becomes the current tab.
+
+    Inserting a new tab at an index less than or equal to the current index
+    will increment the current index, but keep the current tab.
+*/
+int KCustomTabBar::insertTab(int index, const QIcon& icon, const QString &text)
+{
+    Q_D(KCustomTabBar);
+    if (!d->validIndex(index)) {
+        index = d->tabList.count();
+        d->tabList.append(KCustomTabBarPrivate::Tab(icon, text));
+    } else {
+        d->tabList.insert(index, KCustomTabBarPrivate::Tab(icon, text));
+    }
+#ifndef QT_NO_SHORTCUT
+    d->tabList[index].shortcutId = grabShortcut(QKeySequence::mnemonic(text));
+#endif
+    d->refresh();
+    if (d->tabList.count() == 1)
+        setCurrentIndex(index);
+    else if (index <= d->currentIndex)
+        ++d->currentIndex;
+
+    if (d->closeButtonOnTabs) {
+        QStyleOptionTab opt;
+        initStyleOption(&opt, index);
+        ButtonPosition closeSide = (ButtonPosition)style()->styleHint(QStyle::SH_TabBar_CloseButtonPosition, 0, this);
+        QAbstractButton *closeButton = new CloseButton(this);
+//        connect(closeButton, SIGNAL(clicked()), this, SLOT(_q_closeTab()));
+        connect(closeButton,&QAbstractButton::clicked,this,[=]{
+            closeTab();
+        });
+        setTabButton(index, closeSide, closeButton);
+    }
+
+    for (int i = 0; i < d->tabList.count(); ++i) {
+        if (d->tabList[i].lastTab >= index)
+            ++d->tabList[i].lastTab;
+    }
+
+    tabInserted(index);
+    d->autoHideTabs();
+
+    return index;
+}
+
+
+/*!
+    Removes the tab at position \a index.
+
+    \sa SelectionBehavior
+ */
+void KCustomTabBar::removeTab(int index)
+{
+    Q_D(KCustomTabBar);
+    if (d->validIndex(index)) {
+        if (d->dragInProgress)
+            d->moveTabFinished(d->pressedIndex);
+
+#ifndef QT_NO_SHORTCUT
+        releaseShortcut(d->tabList.at(index).shortcutId);
+#endif
+        if (d->tabList[index].leftWidget) {
+            d->tabList[index].leftWidget->hide();
+            d->tabList[index].leftWidget->deleteLater();
+            d->tabList[index].leftWidget = 0;
+        }
+        if (d->tabList[index].rightWidget) {
+            d->tabList[index].rightWidget->hide();
+            d->tabList[index].rightWidget->deleteLater();
+            d->tabList[index].rightWidget = 0;
+        }
+
+        int newIndex = d->tabList[index].lastTab;
+        d->tabList.removeAt(index);
+        for (int i = 0; i < d->tabList.count(); ++i) {
+            if (d->tabList[i].lastTab == index)
+                d->tabList[i].lastTab = -1;
+            if (d->tabList[i].lastTab > index)
+                --d->tabList[i].lastTab;
+        }
+        if (index == d->currentIndex) {
+            // The current tab is going away, in order to make sure
+            // we emit that "current has changed", we need to reset this
+            // around.
+            d->currentIndex = -1;
+            if (d->tabList.size() > 0) {
+                switch(d->selectionBehaviorOnRemove) {
+                case SelectPreviousTab:
+                    if (newIndex > index)
+                        newIndex--;
+                    if (d->validIndex(newIndex))
+                        break;
+                    Q_FALLTHROUGH();
+                case SelectRightTab:
+                    newIndex = index;
+                    if (newIndex >= d->tabList.size())
+                        newIndex = d->tabList.size() - 1;
+                    break;
+                case SelectLeftTab:
+                    newIndex = index - 1;
+                    if (newIndex < 0)
+                        newIndex = 0;
+                    break;
+                default:
+                    break;
+                }
+
+                if (d->validIndex(newIndex)) {
+                    // don't loose newIndex's old through setCurrentIndex
+                    int bump = d->tabList[newIndex].lastTab;
+                    setCurrentIndex(newIndex);
+                    d->tabList[newIndex].lastTab = bump;
+                }
+            } else {
+                emit currentChanged(-1);
+            }
+        } else if (index < d->currentIndex) {
+            setCurrentIndex(d->currentIndex - 1);
+        }
+        d->refresh();
+        d->autoHideTabs();
+        if (!d->hoverRect.isEmpty()) {
+            for (int i = 0; i < d->tabList.count(); ++i) {
+                const QRect area = tabRect(i);
+                if (area.contains(mapFromGlobal(QCursor::pos()))) {
+                    d->hoverIndex = i;
+                    d->hoverRect = area;
+                    break;
+                }
+            }
+            update(d->hoverRect);
+        }
+        tabRemoved(index);
+    }
+}
+
+
+/*!
+    Returns \c true if the tab at position \a index is enabled; otherwise
+    returns \c false.
+*/
+bool KCustomTabBar::isTabEnabled(int index) const
+{
+    Q_D(const KCustomTabBar);
+    if (const KCustomTabBarPrivate::Tab *tab = d->at(index))
+        return tab->enabled;
+    return false;
+}
+
+/*!
+    If \a enabled is true then the tab at position \a index is
+    enabled; otherwise the item at position \a index is disabled.
+*/
+void KCustomTabBar::setTabEnabled(int index, bool enabled)
+{
+    Q_D(KCustomTabBar);
+    if (KCustomTabBarPrivate::Tab *tab = d->at(index)) {
+        tab->enabled = enabled;
+#ifndef QT_NO_SHORTCUT
+        setShortcutEnabled(tab->shortcutId, enabled);
+#endif
+        update();
+        if (!enabled && index == d->currentIndex)
+            setCurrentIndex(d->validIndex(index+1)?index+1:0);
+        else if (enabled && !d->validIndex(d->currentIndex))
+            setCurrentIndex(index);
+    }
+}
+
+
+/*!
+    Returns the text of the tab at position \a index, or an empty
+    string if \a index is out of range.
+*/
+QString KCustomTabBar::tabText(int index) const
+{
+    Q_D(const KCustomTabBar);
+    if (const KCustomTabBarPrivate::Tab *tab = d->at(index))
+        return tab->text;
+    return QString();
+}
+
+/*!
+    Sets the text of the tab at position \a index to \a text.
+*/
+void KCustomTabBar::setTabText(int index, const QString &text)
+{
+    Q_D(KCustomTabBar);
+    if (KCustomTabBarPrivate::Tab *tab = d->at(index)) {
+        d->textSizes.remove(tab->text);
+        tab->text = text;
+#ifndef QT_NO_SHORTCUT
+        releaseShortcut(tab->shortcutId);
+        tab->shortcutId = grabShortcut(QKeySequence::mnemonic(text));
+        setShortcutEnabled(tab->shortcutId, tab->enabled);
+#endif
+        d->refresh();
+    }
+}
+
+void KCustomTabBar::setTabContent(int index, const QString &text)
+{
+    Q_D(KCustomTabBar);
+    if (KCustomTabBarPrivate::Tab *tab = d->at(index)) {
+        d->textSizes.remove(tab->text);
+        tab->text = text;
+#ifndef QT_NO_SHORTCUT
+        releaseShortcut(tab->shortcutId);
+        tab->shortcutId = grabShortcut(QKeySequence::mnemonic(text));
+        setShortcutEnabled(tab->shortcutId, tab->enabled);
+#endif
+    }
+}
+
+/*!
+    Returns the text color of the tab with the given \a index, or a invalid
+    color if \a index is out of range.
+
+    \sa setTabTextColor()
+*/
+QColor KCustomTabBar::tabTextColor(int index) const
+{
+    Q_D(const KCustomTabBar);
+    if (const KCustomTabBarPrivate::Tab *tab = d->at(index))
+        return tab->textColor;
+    return QColor();
+}
+
+/*!
+    Sets the color of the text in the tab with the given \a index to the specified \a color.
+
+    If an invalid color is specified, the tab will use the KCustomTabBar foreground role instead.
+
+    \sa tabTextColor()
+*/
+void KCustomTabBar::setTabTextColor(int index, const QColor &color)
+{
+    Q_D(KCustomTabBar);
+    if (KCustomTabBarPrivate::Tab *tab = d->at(index)) {
+        tab->textColor = color;
+        update(tabRect(index));
+    }
+}
+
+/*!
+    Returns the icon of the tab at position \a index, or a null icon
+    if \a index is out of range.
+*/
+QIcon KCustomTabBar::tabIcon(int index) const
+{
+    Q_D(const KCustomTabBar);
+    if (const KCustomTabBarPrivate::Tab *tab = d->at(index))
+        return tab->icon;
+    return QIcon();
+}
+
+/*!
+    Sets the icon of the tab at position \a index to \a icon.
+*/
+void KCustomTabBar::setTabIcon(int index, const QIcon & icon)
+{
+    Q_D(KCustomTabBar);
+    if (KCustomTabBarPrivate::Tab *tab = d->at(index)) {
+        bool simpleIconChange = (!icon.isNull() && !tab->icon.isNull());
+        tab->icon = icon;
+        if (simpleIconChange)
+            update(tabRect(index));
+        else
+            d->refresh();
+    }
+}
+
+#ifndef QT_NO_TOOLTIP
+/*!
+    Sets the tool tip of the tab at position \a index to \a tip.
+*/
+void KCustomTabBar::setTabToolTip(int index, const QString & tip)
+{
+    Q_D(KCustomTabBar);
+    if (KCustomTabBarPrivate::Tab *tab = d->at(index))
+        tab->toolTip = tip;
+}
+
+/*!
+    Returns the tool tip of the tab at position \a index, or an empty
+    string if \a index is out of range.
+*/
+QString KCustomTabBar::tabToolTip(int index) const
+{
+    Q_D(const KCustomTabBar);
+    if (const KCustomTabBarPrivate::Tab *tab = d->at(index))
+        return tab->toolTip;
+    return QString();
+}
+#endif // QT_NO_TOOLTIP
+
+#if QT_CONFIG(whatsthis)
+/*!
+    \since 4.1
+
+    Sets the What's This help text of the tab at position \a index
+    to \a text.
+*/
+void KCustomTabBar::setTabWhatsThis(int index, const QString &text)
+{
+    Q_D(KCustomTabBar);
+    if (KCustomTabBarPrivate::Tab *tab = d->at(index))
+        tab->whatsThis = text;
+}
+
+/*!
+    \since 4.1
+
+    Returns the What's This help text of the tab at position \a index,
+    or an empty string if \a index is out of range.
+*/
+QString KCustomTabBar::tabWhatsThis(int index) const
+{
+    Q_D(const KCustomTabBar);
+    if (const KCustomTabBarPrivate::Tab *tab = d->at(index))
+        return tab->whatsThis;
+    return QString();
+}
+
+#endif // QT_CONFIG(whatsthis)
+
+/*!
+    Sets the data of the tab at position \a index to \a data.
+*/
+void KCustomTabBar::setTabData(int index, const QVariant & data)
+{
+    Q_D(KCustomTabBar);
+    if (KCustomTabBarPrivate::Tab *tab = d->at(index))
+        tab->data = data;
+}
+
+/*!
+    Returns the data of the tab at position \a index, or a null
+    variant if \a index is out of range.
+*/
+QVariant KCustomTabBar::tabData(int index) const
+{
+    Q_D(const KCustomTabBar);
+    if (const KCustomTabBarPrivate::Tab *tab = d->at(index))
+        return tab->data;
+    return QVariant();
+}
+
+/*!
+    Returns the visual rectangle of the tab at position \a
+    index, or a null rectangle if \a index is out of range.
+*/
+QRect KCustomTabBar::tabRect(int index) const
+{
+    Q_D(const KCustomTabBar);
+    if (const KCustomTabBarPrivate::Tab *tab = d->at(index)) {
+        if (d->layoutDirty)
+            const_cast<KCustomTabBarPrivate*>(d)->layoutTabs();
+        QRect r = tab->rect;
+        if (verticalTabs(d->shape))
+            r.translate(0, -d->scrollOffset);
+        else
+            r.translate(-d->scrollOffset, 0);
+        if (!verticalTabs(d->shape))
+            r = QStyle::visualRect(layoutDirection(), rect(), r);
+        return r;
+    }
+    return QRect();
+}
+
+/*!
+    \since 4.3
+    Returns the index of the tab that covers \a position or -1 if no
+    tab covers \a position;
+*/
+
+int KCustomTabBar::tabAt(const QPoint &position) const
+{
+    Q_D(const KCustomTabBar);
+    if (d->validIndex(d->currentIndex)
+        && tabRect(d->currentIndex).contains(position)) {
+        return d->currentIndex;
+    }
+    const int max = d->tabList.size();
+    for (int i = 0; i < max; ++i) {
+        if (tabRect(i).contains(position)) {
+            return i;
+        }
+    }
+    return -1;
+}
+
+/*!
+    \property KCustomTabBar::currentIndex
+    \brief the index of the tab bar's visible tab
+
+    The current index is -1 if there is no current tab.
+*/
+
+int KCustomTabBar::currentIndex() const
+{
+    Q_D(const KCustomTabBar);
+    if (d->validIndex(d->currentIndex))
+        return d->currentIndex;
+    return -1;
+}
+
+
+void KCustomTabBar::setCurrentIndex(int index)
+{
+    Q_D(KCustomTabBar);
+    if (d->dragInProgress && d->pressedIndex != -1)
+        return;
+
+    int oldIndex = d->currentIndex;
+    if (d->validIndex(index) && d->currentIndex != index) {
+        d->currentIndex = index;
+        update();
+        d->makeVisible(index);
+        d->tabList[index].lastTab = oldIndex;
+        if (oldIndex >= 0 && oldIndex < count())
+            d->layoutTab(oldIndex);
+        d->layoutTab(index);
+#ifndef QT_NO_ACCESSIBILITY
+        if (QAccessible::isActive()) {
+            if (hasFocus()) {
+                QAccessibleEvent focusEvent(this, QAccessible::Focus);
+                focusEvent.setChild(index);
+                QAccessible::updateAccessibility(&focusEvent);
+            }
+            QAccessibleEvent selectionEvent(this, QAccessible::Selection);
+            selectionEvent.setChild(index);
+            QAccessible::updateAccessibility(&selectionEvent);
+        }
+#endif
+        emit currentChanged(index);
+    }
+}
+
+/*!
+    \property KCustomTabBar::iconSize
+    \brief The size for icons in the tab bar
+    \since 4.1
+
+    The default value is style-dependent. \c iconSize is a maximum
+    size; icons that are smaller are not scaled up.
+
+    \sa QTabWidget::iconSize
+*/
+QSize KCustomTabBar::iconSize() const
+{
+    Q_D(const KCustomTabBar);
+    if (d->iconSize.isValid())
+        return d->iconSize;
+    int iconExtent = style()->pixelMetric(QStyle::PM_TabBarIconSize, 0, this);
+    return QSize(iconExtent, iconExtent);
+
+}
+
+void KCustomTabBar::setIconSize(const QSize &size)
+{
+    Q_D(KCustomTabBar);
+    d->iconSize = size;
+    d->layoutDirty = true;
+    update();
+    updateGeometry();
+}
+
+/*!
+    \property KCustomTabBar::count
+    \brief the number of tabs in the tab bar
+*/
+
+int KCustomTabBar::count() const
+{
+    Q_D(const KCustomTabBar);
+    return d->tabList.count();
+}
+
+
+/*!\reimp
+ */
+QSize KCustomTabBar::sizeHint() const
+{
+    Q_D(const KCustomTabBar);
+    if (d->layoutDirty)
+        const_cast<KCustomTabBarPrivate*>(d)->layoutTabs();
+    QRect r;
+    for (int i = 0; i < d->tabList.count(); ++i)
+        r = r.united(d->tabList.at(i).maxRect);
+    QSize sz = QApplication::globalStrut();
+    return r.size().expandedTo(sz);
+}
+
+/*!\reimp
+ */
+QSize KCustomTabBar::minimumSizeHint() const
+{
+    Q_D(const KCustomTabBar);
+    if (d->layoutDirty)
+        const_cast<KCustomTabBarPrivate*>(d)->layoutTabs();
+    if (!d->useScrollButtons) {
+        QRect r;
+        for (int i = 0; i < d->tabList.count(); ++i)
+            r = r.united(d->tabList.at(i).minRect);
+        return r.size().expandedTo(QApplication::globalStrut());
+    }
+    if (verticalTabs(d->shape))
+        return QSize(sizeHint().width(), d->rightB->sizeHint().height() * 2 + 75);
+    else
+        return QSize(d->rightB->sizeHint().width() * 2 + 75, sizeHint().height());
+}
+
+// Compute the most-elided possible text, for minimumSizeHint
+static QString computeElidedText(Qt::TextElideMode mode, const QString &text)
+{
+    if (text.length() <= 3)
+        return text;
+
+    static const QLatin1String Ellipses("...");
+    QString ret;
+    switch (mode) {
+    case Qt::ElideRight:
+        ret = text.leftRef(2) + Ellipses;
+        break;
+    case Qt::ElideMiddle:
+        ret = text.leftRef(1) + Ellipses + text.rightRef(1);
+        break;
+    case Qt::ElideLeft:
+        ret = Ellipses + text.rightRef(2);
+        break;
+    case Qt::ElideNone:
+        ret = text;
+        break;
+    }
+    return ret;
+}
+
+/*!
+    Returns the minimum tab size hint for the tab at position \a index.
+    \since 5.0
+*/
+
+QSize KCustomTabBar::minimumTabSizeHint(int index) const
+{
+    Q_D(const KCustomTabBar);
+    KCustomTabBarPrivate::Tab &tab = const_cast<KCustomTabBarPrivate::Tab&>(d->tabList[index]);
+    QString oldText = tab.text;
+    tab.text = computeElidedText(d->elideMode, oldText);
+    QSize size = tabSizeHint(index);
+    tab.text = oldText;
+    return size;
+}
+
+/*!
+    Returns the size hint for the tab at position \a index.
+*/
+QSize KCustomTabBar::tabSizeHint(int index) const
+{
+    //Note: this must match with the computations in QCommonStylePrivate::tabLayout
+    Q_D(const KCustomTabBar);
+    if (const KCustomTabBarPrivate::Tab *tab = d->at(index)) {
+        QStyleOptionTab opt;
+        d->initBasicStyleOption(&opt, index);
+        opt.text = d->tabList.at(index).text;
+        QSize iconSize = tab->icon.isNull() ? QSize(0, 0) : opt.iconSize;
+        int hframe = style()->pixelMetric(QStyle::PM_TabBarTabHSpace, &opt, this);
+        int vframe = style()->pixelMetric(QStyle::PM_TabBarTabVSpace, &opt, this);
+        const QFontMetrics fm = fontMetrics();
+
+        int maxWidgetHeight = qMax(opt.leftButtonSize.height(), opt.rightButtonSize.height());
+        int maxWidgetWidth = qMax(opt.leftButtonSize.width(), opt.rightButtonSize.width());
+
+        int widgetWidth = 0;
+        int widgetHeight = 0;
+        int padding = 0;
+        if (!opt.leftButtonSize.isEmpty()) {
+            padding += 4;
+            widgetWidth += opt.leftButtonSize.width();
+            widgetHeight += opt.leftButtonSize.height();
+        }
+        if (!opt.rightButtonSize.isEmpty()) {
+            padding += 4;
+            widgetWidth += opt.rightButtonSize.width();
+            widgetHeight += opt.rightButtonSize.height();
+        }
+        if (!opt.icon.isNull())
+            padding += 4;
+
+        QHash<QString, QSize>::iterator it = d->textSizes.find(tab->text);
+        if (it == d->textSizes.end())
+           it = d->textSizes.insert(tab->text, fm.size(Qt::TextShowMnemonic, tab->text));
+        const int textWidth = it.value().width();
+        QSize csz;
+        if (verticalTabs(d->shape)) {
+            csz = QSize( qMax(maxWidgetWidth, qMax(fm.height(), iconSize.height())) + vframe,
+                         textWidth + iconSize.width() + hframe + widgetHeight + padding);
+        } else {
+            csz = QSize(textWidth + iconSize.width() + hframe + widgetWidth + padding,
+                  qMax(maxWidgetHeight, qMax(fm.height(), iconSize.height())) + vframe);
+        }
+
+        QSize retSize = style()->sizeFromContents(QStyle::CT_TabBarTab, &opt, csz, this);
+        return retSize;
+    }
+    return QSize();
+}
+
+/*!
+  This virtual handler is called after a new tab was added or
+  inserted at position \a index.
+
+  \sa tabRemoved()
+ */
+void KCustomTabBar::tabInserted(int index)
+{
+    Q_UNUSED(index)
+}
+
+/*!
+  This virtual handler is called after a tab was removed from
+  position \a index.
+
+  \sa tabInserted()
+ */
+void KCustomTabBar::tabRemoved(int index)
+{
+    Q_UNUSED(index)
+}
+
+/*!
+  This virtual handler is called whenever the tab layout changes.
+
+  \sa tabRect()
+ */
+void KCustomTabBar::tabLayoutChange()
+{
+}
+
+
+/*!\reimp
+ */
+void KCustomTabBar::showEvent(QShowEvent *)
+{
+    Q_D(KCustomTabBar);
+    if (d->layoutDirty)
+        d->refresh();
+    if (!d->validIndex(d->currentIndex))
+        setCurrentIndex(0);
+    d->updateMacBorderMetrics();
+}
+
+/*!\reimp
+ */
+void KCustomTabBar::hideEvent(QHideEvent *)
+{
+    Q_D(KCustomTabBar);
+    d->updateMacBorderMetrics();
+}
+
+/*!\reimp
+ */
+bool KCustomTabBar::event(QEvent *event)
+{
+    Q_D(KCustomTabBar);
+    if (event->type() == QEvent::HoverMove
+        || event->type() == QEvent::HoverEnter) {
+        QHoverEvent *he = static_cast<QHoverEvent *>(event);
+        if (!d->hoverRect.contains(he->pos())) {
+            QRect oldHoverRect = d->hoverRect;
+            bool cursorOverTabs = false;
+            for (int i = 0; i < d->tabList.count(); ++i) {
+                QRect area = tabRect(i);
+                if (area.contains(he->pos())) {
+                    d->hoverIndex = i;
+                    d->hoverRect = area;
+                    cursorOverTabs = true;
+                    break;
+                }
+            }
+            if (!cursorOverTabs) {
+                d->hoverIndex = -1;
+                d->hoverRect = QRect();
+            }
+            if (he->oldPos() != QPoint(-1, -1))
+                update(oldHoverRect);
+            update(d->hoverRect);
+        }
+        return true;
+    } else if (event->type() == QEvent::HoverLeave) {
+        QRect oldHoverRect = d->hoverRect;
+        d->hoverIndex = -1;
+        d->hoverRect = QRect();
+        update(oldHoverRect);
+        return true;
+#ifndef QT_NO_TOOLTIP
+    } else if (event->type() == QEvent::ToolTip) {
+        if (const KCustomTabBarPrivate::Tab *tab = d->at(tabAt(static_cast<QHelpEvent*>(event)->pos()))) {
+            if (!tab->toolTip.isEmpty()) {
+                QToolTip::showText(static_cast<QHelpEvent*>(event)->globalPos(), tab->toolTip, this);
+                return true;
+            }
+        }
+#endif // QT_NO_TOOLTIP
+#if QT_CONFIG(whatsthis)
+    } else if (event->type() == QEvent::QueryWhatsThis) {
+        const KCustomTabBarPrivate::Tab *tab = d->at(d->indexAtPos(static_cast<QHelpEvent*>(event)->pos()));
+        if (!tab || tab->whatsThis.isEmpty())
+            event->ignore();
+        return true;
+    } else if (event->type() == QEvent::WhatsThis) {
+        if (const KCustomTabBarPrivate::Tab *tab = d->at(d->indexAtPos(static_cast<QHelpEvent*>(event)->pos()))) {
+            if (!tab->whatsThis.isEmpty()) {
+                QWhatsThis::showText(static_cast<QHelpEvent*>(event)->globalPos(),
+                                     tab->whatsThis, this);
+                return true;
+            }
+        }
+#endif // QT_CONFIG(whatsthis)
+#ifndef QT_NO_SHORTCUT
+    } else if (event->type() == QEvent::Shortcut) {
+        QShortcutEvent *se = static_cast<QShortcutEvent *>(event);
+        for (int i = 0; i < d->tabList.count(); ++i) {
+            const KCustomTabBarPrivate::Tab *tab = &d->tabList.at(i);
+            if (tab->shortcutId == se->shortcutId()) {
+                setCurrentIndex(i);
+                return true;
+            }
+        }
+#endif
+    } else if (event->type() == QEvent::MouseButtonDblClick) { // ### fixme Qt 6: move to mouseDoubleClickEvent(), here for BC reasons.
+        const QPoint pos = static_cast<const QMouseEvent *>(event)->pos();
+        const bool isEventInCornerButtons = (!d->leftB->isHidden() && d->leftB->geometry().contains(pos))
+                                            || (!d->rightB->isHidden() && d->rightB->geometry().contains(pos));
+        if (!isEventInCornerButtons)
+            emit tabBarDoubleClicked(tabAt(pos));
+    } else if (event->type() == QEvent::Move) {
+        d->updateMacBorderMetrics();
+        return QWidget::event(event);
+
+#if QT_CONFIG(draganddrop)
+    } else if (event->type() == QEvent::DragEnter) {
+        if (d->changeCurrentOnDrag)
+            event->accept();
+    } else if (event->type() == QEvent::DragMove) {
+        if (d->changeCurrentOnDrag) {
+            const int tabIndex = tabAt(static_cast<QDragMoveEvent *>(event)->pos());
+            if (isTabEnabled(tabIndex) && d->switchTabCurrentIndex != tabIndex) {
+                d->switchTabCurrentIndex = tabIndex;
+                if (d->switchTabTimerId)
+                    killTimer(d->switchTabTimerId);
+                d->switchTabTimerId = startTimer(style()->styleHint(QStyle::SH_TabBar_ChangeCurrentDelay));
+            }
+            event->ignore();
+        }
+    } else if (event->type() == QEvent::DragLeave || event->type() == QEvent::Drop) {
+        d->killSwitchTabTimer();
+        event->ignore();
+#endif
+    }
+    return QWidget::event(event);
+}
+
+/*!\reimp
+ */
+void KCustomTabBar::resizeEvent(QResizeEvent *)
+{
+    Q_D(KCustomTabBar);
+    if (d->layoutDirty)
+        updateGeometry();
+    d->layoutTabs();
+
+    d->makeVisible(d->currentIndex);
+}
+
+/*!\reimp
+ */
+void KCustomTabBar::paintEvent(QPaintEvent *)
+{
+    Q_D(KCustomTabBar);
+    QStyleOptionTabBarBase optTabBase;
+    KCustomTabBarPrivate::initStyleBaseOption(&optTabBase, this, size());
+
+    QStylePainter p(this);
+    int selected = -1;
+    int cutLeft = -1;
+    int cutRight = -1;
+    bool vertical = verticalTabs(d->shape);
+    QStyleOptionTab cutTabLeft;
+    QStyleOptionTab cutTabRight;
+    selected = d->currentIndex;
+    if (d->dragInProgress)
+        selected = d->pressedIndex;
+    const QRect scrollRect = d->normalizedScrollRect();
+
+    for (int i = 0; i < d->tabList.count(); ++i)
+         optTabBase.tabBarRect |= tabRect(i);
+
+    optTabBase.selectedTabRect = tabRect(selected);
+
+    if (d->drawBase)
+        p.drawPrimitive(QStyle::PE_FrameTabBarBase, optTabBase);
+
+    for (int i = 0; i < d->tabList.count(); ++i) {
+        QStyleOptionTab tab;
+        initStyleOption(&tab, i);
+        if (d->paintWithOffsets && d->tabList[i].dragOffset != 0) {
+            if (vertical) {
+                tab.rect.moveTop(tab.rect.y() + d->tabList[i].dragOffset);
+            } else {
+                tab.rect.moveLeft(tab.rect.x() + d->tabList[i].dragOffset);
+            }
+        }
+        if (!(tab.state & QStyle::State_Enabled)) {
+            tab.palette.setCurrentColorGroup(QPalette::Disabled);
+        }
+
+        // If this tab is partially obscured, make a note of it so that we can pass the information
+        // along when we draw the tear.
+        QRect tabRect = d->tabList[i].rect;
+        int tabStart = vertical ? tabRect.top() : tabRect.left();
+        int tabEnd = vertical ? tabRect.bottom() : tabRect.right();
+        if (tabStart < scrollRect.left() + d->scrollOffset) {
+            cutLeft = i;
+            cutTabLeft = tab;
+        } else if (tabEnd > scrollRect.right() + d->scrollOffset) {
+            cutRight = i;
+            cutTabRight = tab;
+        }
+
+        // Don't bother drawing a tab if the entire tab is outside of the visible tab bar.
+        if ((!vertical && (tab.rect.right() < 0 || tab.rect.left() > width()))
+            || (vertical && (tab.rect.bottom() < 0 || tab.rect.top() > height())))
+            continue;
+
+        optTabBase.tabBarRect |= tab.rect;
+        if (i == selected)
+            continue;
+
+        p.drawControl(QStyle::CE_TabBarTab, tab);
+    }
+
+    // Draw the selected tab last to get it "on top"
+    if (selected >= 0) {
+        QStyleOptionTab tab;
+        initStyleOption(&tab, selected);
+        if (d->paintWithOffsets && d->tabList[selected].dragOffset != 0) {
+            if (vertical)
+                tab.rect.moveTop(tab.rect.y() + d->tabList[selected].dragOffset);
+            else
+                tab.rect.moveLeft(tab.rect.x() + d->tabList[selected].dragOffset);
+        }
+        if (!d->dragInProgress)
+            p.drawControl(QStyle::CE_TabBarTab, tab);
+        else {
+            int taboverlap = style()->pixelMetric(QStyle::PM_TabBarTabOverlap, 0, this);
+            if (verticalTabs(d->shape))
+                d->movingTab->setGeometry(tab.rect.adjusted(0, -taboverlap, 0, taboverlap));
+            else
+                d->movingTab->setGeometry(tab.rect.adjusted(-taboverlap, 0, taboverlap, 0));
+        }
+    }
+
+    // Only draw the tear indicator if necessary. Most of the time we don't need too.
+    if (d->leftB->isVisible() && cutLeft >= 0) {
+        cutTabLeft.rect = rect();
+        cutTabLeft.rect = style()->subElementRect(QStyle::SE_TabBarTearIndicatorLeft, &cutTabLeft, this);
+        p.drawPrimitive(QStyle::PE_IndicatorTabTearLeft, cutTabLeft);
+    }
+
+    if (d->rightB->isVisible() && cutRight >= 0) {
+        cutTabRight.rect = rect();
+        cutTabRight.rect = style()->subElementRect(QStyle::SE_TabBarTearIndicatorRight, &cutTabRight, this);
+        p.drawPrimitive(QStyle::PE_IndicatorTabTearRight, cutTabRight);
+    }
+}
+
+/*
+    Given that index at position from moved to position to where return where index goes.
+ */
+KCustomTabBarPrivate::KCustomTabBarPrivate(KCustomTabBar *parent)
+    :q_ptr(parent),currentIndex(-1), pressedIndex(-1), shape(KCustomTabBar::RoundedNorth), layoutDirty(false),
+    drawBase(true), scrollOffset(0), hoverIndex(-1), elideModeSetByUser(false), useScrollButtonsSetByUser(false), expanding(true), closeButtonOnTabs(false),
+    selectionBehaviorOnRemove(KCustomTabBar::SelectRightTab), paintWithOffsets(true), movable(false),
+    dragInProgress(false), documentMode(false), autoHide(false), changeCurrentOnDrag(false),
+    switchTabCurrentIndex(-1), switchTabTimerId(0), movingTab(0)
+{
+
+}
+
+void KCustomTabBarPrivate::qGeomCalc(QVector<QCustomLayoutStruct> &chain, int start, int count, int pos, int space, int spacer)
+{
+    int cHint = 0;
+        int cMin = 0;
+        int cMax = 0;
+        int sumStretch = 0;
+        int sumSpacing = 0;
+        int expandingCount = 0;
+
+        bool allEmptyNonstretch = true;
+        int pendingSpacing = -1;
+        int spacerCount = 0;
+        int i;
+
+        for (i = start; i < start + count; i++) {
+            QCustomLayoutStruct *data = &chain[i];
+
+            data->done = false;
+            cHint += data->smartSizeHint();
+            cMin += data->minimumSize;
+            cMax += data->maximumSize;
+            sumStretch += data->stretch;
+            if (!data->empty) {
+                /*
+                    Using pendingSpacing, we ensure that the spacing for the last
+                    (non-empty) item is ignored.
+                */
+                if (pendingSpacing >= 0) {
+                    sumSpacing += pendingSpacing;
+                    ++spacerCount;
+                }
+                pendingSpacing = data->effectiveSpacer(spacer);
+            }
+            if (data->expansive)
+                expandingCount++;
+            allEmptyNonstretch = allEmptyNonstretch && data->empty && !data->expansive && data->stretch <= 0;
+        }
+
+        int extraspace = 0;
+
+        if (space < cMin + sumSpacing) {
+            /*
+              Less space than minimumSize; take from the biggest first
+            */
+
+            int minSize = cMin + sumSpacing;
+
+            // shrink the spacers proportionally
+            if (spacer >= 0) {
+                spacer = minSize > 0 ? spacer * space / minSize : 0;
+                sumSpacing = spacer * spacerCount;
+            }
+
+            QVarLengthArray<int, 32> minimumSizes;
+            minimumSizes.reserve(count);
+
+            for (i = start; i < start + count; i++)
+                minimumSizes << chain.at(i).minimumSize;
+
+            std::sort(minimumSizes.begin(), minimumSizes.end());
+
+            int space_left = space - sumSpacing;
+
+            int sum = 0;
+            int idx = 0;
+            int space_used=0;
+            int current = 0;
+            while (idx < count && space_used < space_left) {
+                current = minimumSizes.at(idx);
+                space_used = sum + current * (count - idx);
+                sum += current;
+                ++idx;
+            }
+            --idx;
+            int deficit = space_used - space_left;
+
+            int items = count - idx;
+            /*
+             * If we truncate all items to "current", we would get "deficit" too many pixels. Therefore, we have to remove
+             * deficit/items from each item bigger than maxval. The actual value to remove is deficitPerItem + remainder/items
+             * "rest" is the accumulated error from using integer arithmetic.
+            */
+            int deficitPerItem = deficit/items;
+            int remainder = deficit % items;
+            int maxval = current - deficitPerItem;
+
+            int rest = 0;
+            for (i = start; i < start + count; i++) {
+                int maxv = maxval;
+                rest += remainder;
+                if (rest >= items) {
+                    maxv--;
+                    rest-=items;
+                }
+                QCustomLayoutStruct *data = &chain[i];
+                data->size = qMin(data->minimumSize, maxv);
+                data->done = true;
+            }
+        } else if (space < cHint + sumSpacing) {
+            /*
+              Less space than smartSizeHint(), but more than minimumSize.
+              Currently take space equally from each, as in Qt 2.x.
+              Commented-out lines will give more space to stretchier
+              items.
+            */
+            int n = count;
+            int space_left = space - sumSpacing;
+            int overdraft = cHint - space_left;
+
+            // first give to the fixed ones:
+            for (i = start; i < start + count; i++) {
+                QCustomLayoutStruct *data = &chain[i];
+                if (!data->done
+                     && data->minimumSize >= data->smartSizeHint()) {
+                    data->size = data->smartSizeHint();
+                    data->done = true;
+                    space_left -= data->smartSizeHint();
+                    // sumStretch -= data->stretch;
+                    n--;
+                }
+            }
+            bool finished = n == 0;
+            while (!finished) {
+                finished = true;
+                Fixed64 fp_over = toFixed(overdraft);
+                Fixed64 fp_w = 0;
+
+                for (i = start; i < start+count; i++) {
+                    QCustomLayoutStruct *data = &chain[i];
+                    if (data->done)
+                        continue;
+                    // if (sumStretch <= 0)
+                    fp_w += fp_over / n;
+                    // else
+                    //    fp_w += (fp_over * data->stretch) / sumStretch;
+                    int w = fRound(fp_w);
+                    data->size = data->smartSizeHint() - w;
+                    fp_w -= toFixed(w); // give the difference to the next
+                    if (data->size < data->minimumSize) {
+                        data->done = true;
+                        data->size = data->minimumSize;
+                        finished = false;
+                        overdraft -= data->smartSizeHint() - data->minimumSize;
+                        // sumStretch -= data->stretch;
+                        n--;
+                        break;
+                    }
+                }
+            }
+        } else { // extra space
+            int n = count;
+            int space_left = space - sumSpacing;
+            // first give to the fixed ones, and handle non-expansiveness
+            for (i = start; i < start + count; i++) {
+                QCustomLayoutStruct *data = &chain[i];
+                if (!data->done
+                    && (data->maximumSize <= data->smartSizeHint()
+                        || (!allEmptyNonstretch && data->empty &&
+                            !data->expansive && data->stretch == 0))) {
+                    data->size = data->smartSizeHint();
+                    data->done = true;
+                    space_left -= data->size;
+                    sumStretch -= data->stretch;
+                     if (data->expansive)
+                         expandingCount--;
+                    n--;
+                }
+            }
+            extraspace = space_left;
+
+            /*
+              Do a trial distribution and calculate how much it is off.
+              If there are more deficit pixels than surplus pixels, give
+              the minimum size items what they need, and repeat.
+              Otherwise give to the maximum size items, and repeat.
+
+              Paul Olav Tvete has a wonderful mathematical proof of the
+              correctness of this principle, but unfortunately this
+              comment is too small to contain it.
+            */
+            int surplus, deficit;
+            do {
+                surplus = deficit = 0;
+                Fixed64 fp_space = toFixed(space_left);
+                Fixed64 fp_w = 0;
+                for (i = start; i < start + count; i++) {
+                    QCustomLayoutStruct *data = &chain[i];
+                    if (data->done)
+                        continue;
+                    extraspace = 0;
+                    if (sumStretch > 0) {
+                        fp_w += (fp_space * data->stretch) / sumStretch;
+                    } else if (expandingCount > 0) {
+                        fp_w += (fp_space * (data->expansive ? 1 : 0)) / expandingCount;
+                    } else {
+                        fp_w += fp_space * 1 / n;
+                    }
+                    int w = fRound(fp_w);
+                    data->size = w;
+                    fp_w -= toFixed(w); // give the difference to the next
+                    if (w < data->smartSizeHint()) {
+                        deficit +=  data->smartSizeHint() - w;
+                    } else if (w > data->maximumSize) {
+                        surplus += w - data->maximumSize;
+                    }
+                }
+                if (deficit > 0 && surplus <= deficit) {
+                    // give to the ones that have too little
+                    for (i = start; i < start+count; i++) {
+                        QCustomLayoutStruct *data = &chain[i];
+                        if (!data->done && data->size < data->smartSizeHint()) {
+                            data->size = data->smartSizeHint();
+                            data->done = true;
+                            space_left -= data->smartSizeHint();
+                            sumStretch -= data->stretch;
+                            if (data->expansive)
+                                expandingCount--;
+                            n--;
+                        }
+                    }
+                }
+                if (surplus > 0 && surplus >= deficit) {
+                    // take from the ones that have too much
+                    for (i = start; i < start + count; i++) {
+                        QCustomLayoutStruct *data = &chain[i];
+                        if (!data->done && data->size > data->maximumSize) {
+                            data->size = data->maximumSize;
+                            data->done = true;
+                            space_left -= data->maximumSize;
+                            sumStretch -= data->stretch;
+                            if (data->expansive)
+                                expandingCount--;
+                            n--;
+                        }
+                    }
+                }
+            } while (n > 0 && surplus != deficit);
+            if (n == 0)
+                extraspace = space_left;
+        }
+
+        /*
+          As a last resort, we distribute the unwanted space equally
+          among the spacers (counting the start and end of the chain). We
+          could, but don't, attempt a sub-pixel allocation of the extra
+          space.
+        */
+        int extra = extraspace / (spacerCount + 2);
+        int p = pos + extra;
+        for (i = start; i < start+count; i++) {
+            QCustomLayoutStruct *data = &chain[i];
+            data->pos = p;
+            p += data->size;
+            if (!data->empty)
+                p += data->effectiveSpacer(spacer) + extra;
+        }
+
+    #ifdef QLAYOUT_EXTRA_DEBUG
+        qDebug() << "qGeomCalc" << "start" << start <<  "count" << count <<  "pos" << pos
+                 <<  "space" << space <<  "spacer" << spacer;
+        for (i = start; i < start + count; ++i) {
+            qDebug() << i << ':' << chain[i].minimumSize << chain[i].smartSizeHint()
+                     << chain[i].maximumSize << "stretch" << chain[i].stretch
+                     << "empty" << chain[i].empty << "expansive" << chain[i].expansive
+                     << "spacing" << chain[i].spacing;
+            qDebug() << "result pos" << chain[i].pos << "size" << chain[i].size;
+        }
+    #endif
+}
+
+int KCustomTabBarPrivate::calculateNewPosition(int from, int to, int index) const
+{
+    if (index == from)
+        return to;
+
+    int start = qMin(from, to);
+    int end = qMax(from, to);
+    if (index >= start && index <= end)
+        index += (from < to) ? -1 : 1;
+    return index;
+}
+
+/*!
+    Moves the item at index position \a from to index position \a to.
+    \since 4.5
+
+    \sa tabMoved(), tabLayoutChange()
+ */
+void KCustomTabBar::moveTab(int from, int to)
+{
+    Q_D(KCustomTabBar);
+    if (from == to
+        || !d->validIndex(from)
+        || !d->validIndex(to))
+        return;
+
+    bool vertical = verticalTabs(d->shape);
+    int oldPressedPosition = 0;
+    if (d->pressedIndex != -1) {
+        // Record the position of the pressed tab before reordering the tabs.
+        oldPressedPosition = vertical ? d->tabList[d->pressedIndex].rect.y()
+                             : d->tabList[d->pressedIndex].rect.x();
+    }
+
+    // Update the locations of the tabs first
+    int start = qMin(from, to);
+    int end = qMax(from, to);
+    int width = vertical ? d->tabList[from].rect.height() : d->tabList[from].rect.width();
+    if (from < to)
+        width *= -1;
+    bool rtl = isRightToLeft();
+    for (int i = start; i <= end; ++i) {
+        if (i == from)
+            continue;
+        if (vertical)
+            d->tabList[i].rect.moveTop(d->tabList[i].rect.y() + width);
+        else
+            d->tabList[i].rect.moveLeft(d->tabList[i].rect.x() + width);
+        int direction = -1;
+        if (rtl && !vertical)
+            direction *= -1;
+        if (d->tabList[i].dragOffset != 0)
+            d->tabList[i].dragOffset += (direction * width);
+    }
+
+    if (vertical) {
+        if (from < to)
+            d->tabList[from].rect.moveTop(d->tabList[to].rect.bottom() + 1);
+        else
+            d->tabList[from].rect.moveTop(d->tabList[to].rect.top() - width);
+    } else {
+        if (from < to)
+            d->tabList[from].rect.moveLeft(d->tabList[to].rect.right() + 1);
+        else
+            d->tabList[from].rect.moveLeft(d->tabList[to].rect.left() - width);
+    }
+
+    // Move the actual data structures
+    d->tabList.move(from, to);
+
+    // update lastTab locations
+    for (int i = 0; i < d->tabList.count(); ++i)
+        d->tabList[i].lastTab = d->calculateNewPosition(from, to, d->tabList[i].lastTab);
+
+    // update external variables
+    int previousIndex = d->currentIndex;
+    d->currentIndex = d->calculateNewPosition(from, to, d->currentIndex);
+
+    // If we are in the middle of a drag update the dragStartPosition
+    if (d->pressedIndex != -1) {
+        d->pressedIndex = d->calculateNewPosition(from, to, d->pressedIndex);
+        int newPressedPosition = vertical ? d->tabList[d->pressedIndex].rect.top() : d->tabList[d->pressedIndex].rect.left();
+        int diff = oldPressedPosition - newPressedPosition;
+        if (isRightToLeft() && !vertical)
+            diff *= -1;
+        if (vertical)
+            d->dragStartPosition.setY(d->dragStartPosition.y() - diff);
+        else
+            d->dragStartPosition.setX(d->dragStartPosition.x() - diff);
+    }
+
+    d->layoutWidgets(start);
+    update();
+    emit tabMoved(from, to);
+    if (previousIndex != d->currentIndex)
+        emit currentChanged(d->currentIndex);
+    emit tabLayoutChange();
+}
+
+void KCustomTabBarPrivate::slide(int from, int to)
+{
+    Q_Q(KCustomTabBar);
+    if (from == to
+            || !validIndex(from)
+            || !validIndex(to))
+        return;
+    bool vertical = verticalTabs(shape);
+    int preLocation = vertical ? q->tabRect(from).y() : q->tabRect(from).x();
+    q->setUpdatesEnabled(false);
+    q->moveTab(from, to);
+    q->setUpdatesEnabled(true);
+    int postLocation = vertical ? q->tabRect(to).y() : q->tabRect(to).x();
+    int length = postLocation - preLocation;
+    tabList[to].dragOffset -= length;
+    tabList[to].startAnimation(this, ANIMATION_DURATION);
+}
+
+void KCustomTabBarPrivate::moveTab(int index, int offset)
+{
+    if (!validIndex(index))
+        return;
+    tabList[index].dragOffset = offset;
+    layoutTab(index); // Make buttons follow tab
+    q_func()->update();
+}
+
+/*!\reimp
+*/
+void KCustomTabBar::mousePressEvent(QMouseEvent *event)
+{
+    Q_D(KCustomTabBar);
+
+    const QPoint pos = event->pos();
+    const bool isEventInCornerButtons = (!d->leftB->isHidden() && d->leftB->geometry().contains(pos))
+                                     || (!d->rightB->isHidden() && d->rightB->geometry().contains(pos));
+    if (!isEventInCornerButtons) {
+        const int index = d->indexAtPos(pos);
+        emit tabBarClicked(index);
+    }
+
+    if (event->button() != Qt::LeftButton) {
+        event->ignore();
+        return;
+    }
+    // Be safe!
+    if (d->pressedIndex != -1 && d->movable)
+        d->moveTabFinished(d->pressedIndex);
+
+    d->pressedIndex = d->indexAtPos(event->pos());
+
+    if (d->validIndex(d->pressedIndex)) {
+        QStyleOptionTabBarBase optTabBase;
+        optTabBase.init(this);
+        optTabBase.documentMode = d->documentMode;
+        if (event->type() == style()->styleHint(QStyle::SH_TabBar_SelectMouseType, &optTabBase, this))
+            setCurrentIndex(d->pressedIndex);
+        else
+            repaint(tabRect(d->pressedIndex));
+        if (d->movable) {
+            d->dragStartPosition = event->pos();
+        }
+    }
+}
+
+/*!\reimp
+ */
+void KCustomTabBar::mouseMoveEvent(QMouseEvent *event)
+{
+    Q_D(KCustomTabBar);
+    if (d->movable) {
+        // Be safe!
+        if (d->pressedIndex != -1
+            && event->buttons() == Qt::NoButton)
+            d->moveTabFinished(d->pressedIndex);
+
+        // Start drag
+        if (!d->dragInProgress && d->pressedIndex != -1) {
+            if ((event->pos() - d->dragStartPosition).manhattanLength() > QApplication::startDragDistance()) {
+                d->dragInProgress = true;
+                d->setupMovableTab();
+            }
+        }
+
+        if (event->buttons() == Qt::LeftButton
+            && d->dragInProgress
+            && d->validIndex(d->pressedIndex)) {
+            bool vertical = verticalTabs(d->shape);
+            int dragDistance;
+            if (vertical) {
+                dragDistance = (event->pos().y() - d->dragStartPosition.y());
+            } else {
+                dragDistance = (event->pos().x() - d->dragStartPosition.x());
+            }
+            d->tabList[d->pressedIndex].dragOffset = dragDistance;
+
+            QRect startingRect = tabRect(d->pressedIndex);
+            if (vertical)
+                startingRect.moveTop(startingRect.y() + dragDistance);
+            else
+                startingRect.moveLeft(startingRect.x() + dragDistance);
+
+            int overIndex;
+            if (dragDistance < 0)
+                overIndex = tabAt(startingRect.topLeft());
+            else
+                overIndex = tabAt(startingRect.topRight());
+
+            if (overIndex != d->pressedIndex && overIndex != -1) {
+                int offset = 1;
+                if (isRightToLeft() && !vertical)
+                    offset *= -1;
+                if (dragDistance < 0) {
+                    dragDistance *= -1;
+                    offset *= -1;
+                }
+                for (int i = d->pressedIndex;
+                     offset > 0 ? i < overIndex : i > overIndex;
+                     i += offset) {
+                    QRect overIndexRect = tabRect(overIndex);
+                    int needsToBeOver = (vertical ? overIndexRect.height() : overIndexRect.width()) / 2;
+                    if (dragDistance > needsToBeOver)
+                        d->slide(i + offset, d->pressedIndex);
+                }
+            }
+            // Buttons needs to follow the dragged tab
+            d->layoutTab(d->pressedIndex);
+
+            update();
+        }
+    }
+
+    if (event->buttons() != Qt::LeftButton) {
+        event->ignore();
+        return;
+    }
+}
+
+void KCustomTabBarPrivate::setupMovableTab()
+{
+    Q_Q(KCustomTabBar);
+    if (!movingTab)
+        movingTab = new KCustomMovableTabWidget(q);
+
+    int taboverlap = q->style()->pixelMetric(QStyle::PM_TabBarTabOverlap, 0 ,q);
+    QRect grabRect = q->tabRect(pressedIndex);
+    if (verticalTabs(shape))
+        grabRect.adjust(0, -taboverlap, 0, taboverlap);
+    else
+        grabRect.adjust(-taboverlap, 0, taboverlap, 0);
+
+    QPixmap grabImage(grabRect.size() * q->devicePixelRatioF());
+    grabImage.setDevicePixelRatio(q->devicePixelRatioF());
+    grabImage.fill(Qt::transparent);
+    QStylePainter p(&grabImage, q);
+    p.initFrom(q);
+
+    QStyleOptionTab tab;
+    q->initStyleOption(&tab, pressedIndex);
+    tab.position = QStyleOptionTab::OnlyOneTab;
+    if (verticalTabs(shape))
+        tab.rect.moveTopLeft(QPoint(0, taboverlap));
+    else
+        tab.rect.moveTopLeft(QPoint(taboverlap, 0));
+    p.drawControl(QStyle::CE_TabBarTab, tab);
+    p.end();
+
+    movingTab->setPixmap(grabImage);
+    movingTab->setGeometry(grabRect);
+    movingTab->raise();
+
+    // Re-arrange widget order to avoid overlaps
+    if (tabList[pressedIndex].leftWidget)
+        tabList[pressedIndex].leftWidget->raise();
+    if (tabList[pressedIndex].rightWidget)
+        tabList[pressedIndex].rightWidget->raise();
+    if (leftB)
+        leftB->raise();
+    if (rightB)
+        rightB->raise();
+    movingTab->setVisible(true);
+}
+
+void KCustomTabBarPrivate::moveTabFinished(int index)
+{
+    Q_Q(KCustomTabBar);
+    bool cleanup = (pressedIndex == index) || (pressedIndex == -1) || !validIndex(index);
+    bool allAnimationsFinished = true;
+#if QT_CONFIG(animation)
+    for(int i = 0; allAnimationsFinished && i < tabList.count(); ++i) {
+        const Tab &t = tabList.at(i);
+        if (t.animation && t.animation->state() == QAbstractAnimation::Running)
+            allAnimationsFinished = false;
+    }
+#endif // animation
+    if (allAnimationsFinished && cleanup) {
+        if(movingTab)
+            movingTab->setVisible(false); // We might not get a mouse release
+        for (int i = 0; i < tabList.count(); ++i) {
+            tabList[i].dragOffset = 0;
+        }
+        if (pressedIndex != -1 && movable) {
+            pressedIndex = -1;
+            dragInProgress = false;
+            dragStartPosition = QPoint();
+        }
+        layoutWidgets();
+    } else {
+        if (!validIndex(index))
+            return;
+        tabList[index].dragOffset = 0;
+    }
+    q->update();
+}
+
+/*!\reimp
+*/
+void KCustomTabBar::mouseReleaseEvent(QMouseEvent *event)
+{
+    Q_D(KCustomTabBar);
+    if (event->button() != Qt::LeftButton) {
+        event->ignore();
+        return;
+    }
+    if (d->movable && d->dragInProgress && d->validIndex(d->pressedIndex)) {
+        int length = d->tabList[d->pressedIndex].dragOffset;
+        int width = verticalTabs(d->shape)
+            ? tabRect(d->pressedIndex).height()
+            : tabRect(d->pressedIndex).width();
+        int duration = qMin(ANIMATION_DURATION,
+                (qAbs(length) * ANIMATION_DURATION) / width);
+        d->tabList[d->pressedIndex].startAnimation(d, duration);
+        d->dragInProgress = false;
+        d->movingTab->setVisible(false);
+        d->dragStartPosition = QPoint();
+    }
+
+    int i = d->indexAtPos(event->pos()) == d->pressedIndex ? d->pressedIndex : -1;
+    d->pressedIndex = -1;
+    QStyleOptionTabBarBase optTabBase;
+    optTabBase.initFrom(this);
+    optTabBase.documentMode = d->documentMode;
+    const bool selectOnRelease =
+            (style()->styleHint(QStyle::SH_TabBar_SelectMouseType, &optTabBase, this) == QEvent::MouseButtonRelease);
+    if (selectOnRelease)
+        setCurrentIndex(i);
+    if (!selectOnRelease || !d->validIndex(i) || d->currentIndex == i)
+        repaint(tabRect(i));
+}
+
+/*!\reimp
+ */
+void KCustomTabBar::keyPressEvent(QKeyEvent *event)
+{
+    Q_D(KCustomTabBar);
+    if (event->key() != Qt::Key_Left && event->key() != Qt::Key_Right) {
+        event->ignore();
+        return;
+    }
+    int offset = event->key() == (isRightToLeft() ? Qt::Key_Right : Qt::Key_Left) ? -1 : 1;
+    d->setCurrentNextEnabledIndex(offset);
+}
+
+/*!\reimp
+ */
+#if QT_CONFIG(wheelevent)
+void KCustomTabBar::wheelEvent(QWheelEvent *event)
+{
+#ifndef Q_OS_MAC
+    Q_D(KCustomTabBar);
+    int offset = event->delta() > 0 ? -1 : 1;
+    d->setCurrentNextEnabledIndex(offset);
+    QWidget::wheelEvent(event);
+#else
+    Q_UNUSED(event)
+#endif
+}
+#endif // QT_CONFIG(wheelevent)
+
+void KCustomTabBarPrivate::setCurrentNextEnabledIndex(int offset)
+{
+    Q_Q(KCustomTabBar);
+    for (int index = currentIndex + offset; validIndex(index); index += offset) {
+        if (tabList.at(index).enabled) {
+            q->setCurrentIndex(index);
+            break;
+        }
+    }
+}
+
+/*!\reimp
+ */
+void KCustomTabBar::changeEvent(QEvent *event)
+{
+    Q_D(KCustomTabBar);
+    switch (event->type()) {
+    case QEvent::StyleChange:
+        if (!d->elideModeSetByUser)
+            d->elideMode = Qt::TextElideMode(style()->styleHint(QStyle::SH_TabBar_ElideMode, 0, this));
+        if (!d->useScrollButtonsSetByUser)
+            d->useScrollButtons = !style()->styleHint(QStyle::SH_TabBar_PreferNoArrows, 0, this);
+        Q_FALLTHROUGH();
+    case QEvent::FontChange:
+        d->textSizes.clear();
+        d->refresh();
+        break;
+    default:
+        break;
+    }
+
+    QWidget::changeEvent(event);
+}
+
+/*!
+    \reimp
+*/
+void KCustomTabBar::timerEvent(QTimerEvent *event)
+{
+    Q_D(KCustomTabBar);
+    if (event->timerId() == d->switchTabTimerId) {
+        killTimer(d->switchTabTimerId);
+        d->switchTabTimerId = 0;
+        setCurrentIndex(d->switchTabCurrentIndex);
+        d->switchTabCurrentIndex = -1;
+    }
+    QWidget::timerEvent(event);
+}
+
+/*!
+    \property KCustomTabBar::elideMode
+    \brief how to elide text in the tab bar
+    \since 4.2
+
+    This property controls how items are elided when there is not
+    enough space to show them for a given tab bar size.
+
+    By default the value is style dependent.
+
+    \sa QTabWidget::elideMode, usesScrollButtons, QStyle::SH_TabBar_ElideMode
+*/
+
+Qt::TextElideMode KCustomTabBar::elideMode() const
+{
+    Q_D(const KCustomTabBar);
+    return d->elideMode;
+}
+
+void KCustomTabBar::setElideMode(Qt::TextElideMode mode)
+{
+    Q_D(KCustomTabBar);
+    d->elideMode = mode;
+    d->elideModeSetByUser = true;
+    d->textSizes.clear();
+    d->refresh();
+}
+
+/*!
+    \property KCustomTabBar::usesScrollButtons
+    \brief Whether or not a tab bar should use buttons to scroll tabs when it
+    has many tabs.
+    \since 4.2
+
+    When there are too many tabs in a tab bar for its size, the tab bar can either choose
+    to expand its size or to add buttons that allow you to scroll through the tabs.
+
+    By default the value is style dependant.
+
+    \sa elideMode, QTabWidget::usesScrollButtons, QStyle::SH_TabBar_PreferNoArrows
+*/
+bool KCustomTabBar::usesScrollButtons() const
+{
+    return d_func()->useScrollButtons;
+}
+
+void KCustomTabBar::setUsesScrollButtons(bool useButtons)
+{
+    Q_D(KCustomTabBar);
+    d->useScrollButtonsSetByUser = true;
+    if (d->useScrollButtons == useButtons)
+        return;
+    d->useScrollButtons = useButtons;
+    d->refresh();
+}
+
+/*!
+    \property KCustomTabBar::tabsClosable
+    \brief Whether or not a tab bar should place close buttons on each tab
+    \since 4.5
+
+    When tabsClosable is set to true a close button will appear on the tab on
+    either the left or right hand side depending upon the style.  When the button
+    is clicked the tab the signal tabCloseRequested will be emitted.
+
+    By default the value is false.
+
+    \sa setTabButton(), tabRemoved()
+*/
+
+bool KCustomTabBar::tabsClosable() const
+{
+    Q_D(const KCustomTabBar);
+    return d->closeButtonOnTabs;
+}
+
+void KCustomTabBar::setTabsClosable(bool closable)
+{
+    Q_D(KCustomTabBar);
+    if (d->closeButtonOnTabs == closable)
+        return;
+    d->closeButtonOnTabs = closable;
+    ButtonPosition closeSide = (ButtonPosition)style()->styleHint(QStyle::SH_TabBar_CloseButtonPosition, 0, this);
+    if (!closable) {
+        for (int i = 0; i < d->tabList.count(); ++i) {
+            if (closeSide == LeftSide && d->tabList[i].leftWidget) {
+                d->tabList[i].leftWidget->deleteLater();
+                d->tabList[i].leftWidget = 0;
+            }
+            if (closeSide == RightSide && d->tabList[i].rightWidget) {
+                d->tabList[i].rightWidget->deleteLater();
+                d->tabList[i].rightWidget = 0;
+            }
+        }
+    } else {
+        bool newButtons = false;
+        for (int i = 0; i < d->tabList.count(); ++i) {
+            if (tabButton(i, closeSide))
+                continue;
+            newButtons = true;
+            QAbstractButton *closeButton = new CloseButton(this);
+//            connect(closeButton, SIGNAL(clicked()), this, SLOT(_q_closeTab()));
+            connect(closeButton,&QAbstractButton::clicked,this,[=]{
+                closeTab();
+            });
+            setTabButton(i, closeSide, closeButton);
+        }
+        if (newButtons)
+            d->layoutTabs();
+    }
+    update();
+}
+
+/*!
+    \enum KCustomTabBar::ButtonPosition
+    \since 4.5
+
+    This enum type lists the location of the widget on a tab.
+
+    \value LeftSide Left side of the tab.
+
+    \value RightSide Right side of the tab.
+
+*/
+
+/*!
+    \enum KCustomTabBar::SelectionBehavior
+    \since 4.5
+
+    This enum type lists the behavior of KCustomTabBar when a tab is removed
+    and the tab being removed is also the current tab.
+
+    \value SelectLeftTab  Select the tab to the left of the one being removed.
+
+    \value SelectRightTab  Select the tab to the right of the one being removed.
+
+    \value SelectPreviousTab  Select the previously selected tab.
+
+*/
+
+/*!
+    \property KCustomTabBar::selectionBehaviorOnRemove
+    \brief What tab should be set as current when removeTab is called if
+    the removed tab is also the current tab.
+    \since 4.5
+
+    By default the value is SelectRightTab.
+
+    \sa removeTab()
+*/
+
+
+KCustomTabBar::SelectionBehavior KCustomTabBar::selectionBehaviorOnRemove() const
+{
+    Q_D(const KCustomTabBar);
+    return d->selectionBehaviorOnRemove;
+}
+
+void KCustomTabBar::setSelectionBehaviorOnRemove(KCustomTabBar::SelectionBehavior behavior)
+{
+    Q_D(KCustomTabBar);
+    d->selectionBehaviorOnRemove = behavior;
+}
+
+/*!
+    \property KCustomTabBar::expanding
+    \brief When expanding is true KCustomTabBar will expand the tabs to use the empty space.
+    \since 4.5
+
+    By default the value is true.
+
+    \sa QTabWidget::documentMode
+*/
+
+bool KCustomTabBar::expanding() const
+{
+    Q_D(const KCustomTabBar);
+    return d->expanding;
+}
+
+void KCustomTabBar::setExpanding(bool enabled)
+{
+    Q_D(KCustomTabBar);
+    if (d->expanding == enabled)
+        return;
+    d->expanding = enabled;
+    d->layoutTabs();
+}
+
+/*!
+    \property KCustomTabBar::movable
+    \brief This property holds whether the user can move the tabs
+    within the tabbar area.
+
+    \since 4.5
+
+    By default, this property is \c false;
+*/
+
+bool KCustomTabBar::isMovable() const
+{
+    Q_D(const KCustomTabBar);
+    return d->movable;
+}
+
+void KCustomTabBar::setMovable(bool movable)
+{
+    Q_D(KCustomTabBar);
+    d->movable = movable;
+}
+
+
+/*!
+    \property KCustomTabBar::documentMode
+    \brief Whether or not the tab bar is rendered in a mode suitable for the main window.
+    \since 4.5
+
+    This property is used as a hint for styles to draw the tabs in a different
+    way then they would normally look in a tab widget.  On \macos this will
+    look similar to the tabs in Safari or Sierra's Terminal.app.
+
+    \sa QTabWidget::documentMode
+*/
+bool KCustomTabBar::documentMode() const
+{
+    return d_func()->documentMode;
+}
+
+void KCustomTabBar::setDocumentMode(bool enabled)
+{
+    Q_D(KCustomTabBar);
+
+    d->documentMode = enabled;
+    d->updateMacBorderMetrics();
+}
+
+/*!
+    \property KCustomTabBar::autoHide
+    \brief If true, the tab bar is automatically hidden when it contains less
+    than 2 tabs.
+    \since 5.4
+
+    By default, this property is false.
+
+    \sa QWidget::visible
+*/
+
+bool KCustomTabBar::autoHide() const
+{
+    Q_D(const KCustomTabBar);
+    return d->autoHide;
+}
+
+void KCustomTabBar::setAutoHide(bool hide)
+{
+    Q_D(KCustomTabBar);
+    if (d->autoHide == hide)
+        return;
+
+    d->autoHide = hide;
+    if (hide)
+        d->autoHideTabs();
+    else
+        setVisible(true);
+}
+
+/*!
+    \property KCustomTabBar::changeCurrentOnDrag
+    \brief If true, then the current tab is automatically changed when dragging
+    over the tabbar.
+    \since 5.4
+
+    \note You should also set acceptDrops property to true to make this feature
+    work.
+
+    By default, this property is false.
+*/
+
+bool KCustomTabBar::changeCurrentOnDrag() const
+{
+    Q_D(const KCustomTabBar);
+    return d->changeCurrentOnDrag;
+}
+
+void KCustomTabBar::setChangeCurrentOnDrag(bool change)
+{
+    Q_D(KCustomTabBar);
+    d->changeCurrentOnDrag = change;
+    if (!change)
+        d->killSwitchTabTimer();
+}
+
+/*!
+    Sets \a widget on the tab \a index.  The widget is placed
+    on the left or right hand side depending upon the \a position.
+    \since 4.5
+
+    Any previously set widget in \a position is hidden.
+
+    The tab bar will take ownership of the widget and so all widgets set here
+    will be deleted by the tab bar when it is destroyed unless you separately
+    reparent the widget after setting some other widget (or 0).
+
+    \sa tabsClosable()
+  */
+void KCustomTabBar::setTabButton(int index, ButtonPosition position, QWidget *widget)
+{
+    Q_D(KCustomTabBar);
+    if (index < 0 || index >= d->tabList.count())
+        return;
+    if (widget) {
+        widget->setParent(this);
+        // make sure our left and right widgets stay on top
+        widget->lower();
+        widget->show();
+    }
+    if (position == LeftSide) {
+        if (d->tabList[index].leftWidget)
+            d->tabList[index].leftWidget->hide();
+        d->tabList[index].leftWidget = widget;
+    } else {
+        if (d->tabList[index].rightWidget)
+            d->tabList[index].rightWidget->hide();
+        d->tabList[index].rightWidget = widget;
+    }
+    d->layoutTabs();
+    d->refresh();
+    update();
+}
+
+/*!
+    Returns the widget set a tab \a index and \a position or 0 if
+    one is not set.
+  */
+QWidget *KCustomTabBar::tabButton(int index, ButtonPosition position) const
+{
+    Q_D(const KCustomTabBar);
+    if (index < 0 || index >= d->tabList.count())
+        return 0;
+    if (position == LeftSide)
+        return d->tabList.at(index).leftWidget;
+    else
+        return d->tabList.at(index).rightWidget;
+}
+
+#ifndef QT_NO_ACCESSIBILITY
+/*!
+    Sets the accessibleName of the tab at position \a index to \a name.
+*/
+void KCustomTabBar::setAccessibleTabName(int index, const QString &name)
+{
+    Q_D(KCustomTabBar);
+    if (KCustomTabBarPrivate::Tab *tab = d->at(index)) {
+        tab->accessibleName = name;
+        QAccessibleEvent event(this, QAccessible::NameChanged);
+        event.setChild(index);
+        QAccessible::updateAccessibility(&event);
+    }
+}
+
+/*!
+    Returns the accessibleName of the tab at position \a index, or an empty
+    string if \a index is out of range.
+*/
+QString KCustomTabBar::accessibleTabName(int index) const
+{
+    Q_D(const KCustomTabBar);
+    if (const KCustomTabBarPrivate::Tab *tab = d->at(index))
+        return tab->accessibleName;
+    return QString();
+}
+#endif // QT_NO_ACCESSIBILITY
+
+CloseButton::CloseButton(QWidget *parent)
+    : QAbstractButton(parent)
+{
+    setFocusPolicy(Qt::NoFocus);
+#ifndef QT_NO_CURSOR
+    setCursor(Qt::ArrowCursor);
+#endif
+#ifndef QT_NO_TOOLTIP
+    setToolTip(tr("Close Tab"));
+#endif
+    resize(sizeHint());
+}
+
+QSize CloseButton::sizeHint() const
+{
+    ensurePolished();
+    int width = style()->pixelMetric(QStyle::PM_TabCloseIndicatorWidth, 0, this);
+    int height = style()->pixelMetric(QStyle::PM_TabCloseIndicatorHeight, 0, this);
+    return QSize(width, height);
+}
+
+QSize CloseButton::minimumSizeHint() const
+{
+    return sizeHint();
+}
+
+void CloseButton::enterEvent(QEvent *event)
+{
+    if (isEnabled())
+        update();
+    QAbstractButton::enterEvent(event);
+}
+
+void CloseButton::leaveEvent(QEvent *event)
+{
+    if (isEnabled())
+        update();
+    QAbstractButton::leaveEvent(event);
+}
+
+void CloseButton::paintEvent(QPaintEvent *)
+{
+    QPainter p(this);
+    QStyleOption opt;
+    opt.init(this);
+    opt.state |= QStyle::State_AutoRaise;
+    if (isEnabled() && underMouse() && !isChecked() && !isDown())
+        opt.state |= QStyle::State_Raised;
+    if (isChecked())
+        opt.state |= QStyle::State_On;
+    if (isDown())
+        opt.state |= QStyle::State_Sunken;
+
+    if (const KCustomTabBar *tb = qobject_cast<const KCustomTabBar *>(parent())) {
+        int index = tb->currentIndex();
+        KCustomTabBar::ButtonPosition position = (KCustomTabBar::ButtonPosition)style()->styleHint(QStyle::SH_TabBar_CloseButtonPosition, 0, tb);
+        if (tb->tabButton(index, position) == this)
+            opt.state |= QStyle::State_Selected;
+    }
+
+    style()->drawPrimitive(QStyle::PE_IndicatorTabClose, &opt, &p, this);
+}
+
+#if QT_CONFIG(animation)
+void KCustomTabBarPrivate::Tab::TabBarAnimation::updateCurrentValue(const QVariant &current)
+{
+    priv->moveTab(priv->tabList.indexOf(*tab), current.toInt());
+}
+
+void KCustomTabBarPrivate::Tab::TabBarAnimation::updateState(QAbstractAnimation::State newState, QAbstractAnimation::State)
+{
+    if (newState == Stopped) priv->moveTabFinished(priv->tabList.indexOf(*tab));
+}
+#endif
+
+QT_END_NAMESPACE
+
+#include "moc_kcustomtabbar.cpp"
+#include "kcustomtabbar.moc"
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kcustomtabbar.h libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kcustomtabbar.h
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kcustomtabbar.h	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kcustomtabbar.h	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,208 @@
+/*
+ * libkysdk-qtwidgets's Library
+ *
+ * Copyright (C) 2023, KylinSoft Co., Ltd.
+ *
+ * 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 3 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 General Public License
+ * along with this library.  If not, see <https://www.gnu.org/licenses/>.
+ *
+ * Authors: Zhenyu Wang <wangzhenyu@kylinos.cn>
+ *
+ */
+#ifndef KCUSTOMBAR_H
+#define KCUSTOMBAR_H
+
+#include <QtWidgets/qtwidgetsglobal.h>
+#include <QtWidgets/qwidget.h>
+#include <QTabBar>
+#include <QLayoutItem>
+#include <QIcon>
+#include <QStyleOptionTab>
+
+class KCustomTabBarPrivate;
+
+class KCustomTabBar: public QWidget
+{
+    Q_OBJECT
+
+    Q_PROPERTY(Shape shape READ shape WRITE setShape)
+    Q_PROPERTY(int currentIndex READ currentIndex WRITE setCurrentIndex NOTIFY currentChanged)
+    Q_PROPERTY(int count READ count)
+    Q_PROPERTY(bool drawBase READ drawBase WRITE setDrawBase)
+    Q_PROPERTY(QSize iconSize READ iconSize WRITE setIconSize)
+    Q_PROPERTY(Qt::TextElideMode elideMode READ elideMode WRITE setElideMode)
+    Q_PROPERTY(bool usesScrollButtons READ usesScrollButtons WRITE setUsesScrollButtons)
+    Q_PROPERTY(bool tabsClosable READ tabsClosable WRITE setTabsClosable)
+    Q_PROPERTY(SelectionBehavior selectionBehaviorOnRemove READ selectionBehaviorOnRemove WRITE setSelectionBehaviorOnRemove)
+    Q_PROPERTY(bool expanding READ expanding WRITE setExpanding)
+    Q_PROPERTY(bool movable READ isMovable WRITE setMovable)
+    Q_PROPERTY(bool documentMode READ documentMode WRITE setDocumentMode)
+    Q_PROPERTY(bool autoHide READ autoHide WRITE setAutoHide)
+    Q_PROPERTY(bool changeCurrentOnDrag READ changeCurrentOnDrag WRITE setChangeCurrentOnDrag)
+
+public:
+    explicit KCustomTabBar(QWidget *parent = nullptr);
+    ~KCustomTabBar();
+
+    enum Shape { RoundedNorth, RoundedSouth, RoundedWest, RoundedEast,
+                 TriangularNorth, TriangularSouth, TriangularWest, TriangularEast
+    };
+    Q_ENUM(Shape)
+
+    enum ButtonPosition {
+        LeftSide,
+        RightSide
+    };
+
+    enum SelectionBehavior {
+        SelectLeftTab,
+        SelectRightTab,
+        SelectPreviousTab
+    };
+
+    Shape shape() const;
+    void setShape(Shape shape);
+
+    int addTab(const QString &text);
+    int addTab(const QIcon &icon, const QString &text);
+
+    int insertTab(int index, const QString &text);
+    int insertTab(int index, const QIcon&icon, const QString &text);
+
+    void removeTab(int index);
+    void moveTab(int from, int to);
+
+    bool isTabEnabled(int index) const;
+    void setTabEnabled(int index, bool);
+
+    QString tabText(int index) const;
+    void setTabText(int index, const QString &text);
+
+    void setTabContent(int index, const QString &text);
+
+    QColor tabTextColor(int index) const;
+    void setTabTextColor(int index, const QColor &color);
+
+    QIcon tabIcon(int index) const;
+    void setTabIcon(int index, const QIcon &icon);
+
+    Qt::TextElideMode elideMode() const;
+    void setElideMode(Qt::TextElideMode);
+
+//#ifndef QT_NO_TOOLTIP
+    void setTabToolTip(int index, const QString &tip);
+    QString tabToolTip(int index) const;
+//#endif
+
+//#if QT_CONFIG(whatsthis)
+    void setTabWhatsThis(int index, const QString &text);
+    QString tabWhatsThis(int index) const;
+//#endif
+
+    void setTabData(int index, const QVariant &data);
+    QVariant tabData(int index) const;
+
+    QRect tabRect(int index) const;
+    int tabAt(const QPoint &pos) const;
+
+    int currentIndex() const;
+    int count() const;
+
+    QSize sizeHint() const override;
+    QSize minimumSizeHint() const override;
+
+    void setDrawBase(bool drawTheBase);
+    bool drawBase() const;
+
+    QSize iconSize() const;
+    void setIconSize(const QSize &size);
+
+    bool usesScrollButtons() const;
+    void setUsesScrollButtons(bool useButtons);
+
+    bool tabsClosable() const;
+    void setTabsClosable(bool closable);
+
+    void setTabButton(int index, ButtonPosition position, QWidget *widget);
+    QWidget *tabButton(int index, ButtonPosition position) const;
+
+    SelectionBehavior selectionBehaviorOnRemove() const;
+    void setSelectionBehaviorOnRemove(SelectionBehavior behavior);
+
+    bool expanding() const;
+    void setExpanding(bool enabled);
+
+    bool isMovable() const;
+    void setMovable(bool movable);
+
+    bool documentMode() const;
+    void setDocumentMode(bool set);
+
+    bool autoHide() const;
+    void setAutoHide(bool hide);
+
+    bool changeCurrentOnDrag() const;
+    void setChangeCurrentOnDrag(bool change);
+
+//#ifndef QT_NO_ACCESSIBILITY
+    QString accessibleTabName(int index) const;
+    void setAccessibleTabName(int index, const QString &name);
+//#endif
+
+public Q_SLOTS:
+    void setCurrentIndex(int index);
+//    void scrollTabs();
+    void leftScrollTabs();
+    void rightScrollTabs();
+    void closeTab();
+
+Q_SIGNALS:
+    void currentChanged(int index);
+    void tabCloseRequested(int index);
+    void tabMoved(int from, int to);
+    void tabBarClicked(int index);
+    void tabBarDoubleClicked(int index);
+    void leftBStatus(bool flag);
+    void rightBStatus(bool flag);
+
+protected:
+    virtual QSize tabSizeHint(int index) const;
+    virtual QSize minimumTabSizeHint(int index) const;
+    virtual void tabInserted(int index);
+    virtual void tabRemoved(int index);
+    virtual void tabLayoutChange();
+
+    bool event(QEvent *) override;
+    void resizeEvent(QResizeEvent *) override;
+    void showEvent(QShowEvent *) override;
+    void hideEvent(QHideEvent *) override;
+    void paintEvent(QPaintEvent *) override;
+    void mousePressEvent (QMouseEvent *) override;
+    void mouseMoveEvent (QMouseEvent *) override;
+    void mouseReleaseEvent (QMouseEvent *) override;
+    void wheelEvent(QWheelEvent *event) override;
+    void keyPressEvent(QKeyEvent *) override;
+    void changeEvent(QEvent *) override;
+    void timerEvent(QTimerEvent *event) override;
+    void initStyleOption(QStyleOptionTab *option, int tabIndex) const;
+
+//#ifndef QT_NO_ACCESSIBILITY
+//    friend class QAccessibleTabBar;
+//#endif
+private:
+    Q_DISABLE_COPY(KCustomTabBar)
+    Q_DECLARE_PRIVATE(KCustomTabBar)
+    KCustomTabBarPrivate* const d_ptr;
+};
+
+#endif // QTABBAR_H
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kdialog.cpp libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kdialog.cpp
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kdialog.cpp	2024-05-16 09:25:54.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kdialog.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -25,6 +25,7 @@
 #include <QApplication>
 #include "xatom-helper.h"
 #include "parmscontroller.h"
+#include <QDesktopWidget>
 
 #include "ukuistylehelper/ukui-decoration-manager.h"
 #include "ukuistylehelper/ukui-shell-manager.h"
@@ -109,7 +110,7 @@
     Q_D(KDialog);
     d->m_pIconBar->setIcon(icon);
     d->m_IconName = icon.name();
-    QWidget::setWindowIcon(icon.pixmap(QSize(36,36)));
+    QWidget::setWindowIcon(icon);
 }
 
 void KDialog::setWindowIcon(const QString &iconName)
@@ -117,7 +118,7 @@
     Q_D(KDialog);
     d->m_IconName = iconName;
     d->m_pIconBar->setIcon(iconName);
-    QWidget::setWindowIcon(QIcon::fromTheme(iconName).pixmap(QSize(36,36)));
+    QWidget::setWindowIcon(QIcon::fromTheme(iconName));
 }
 
 void KDialog::setWindowTitle(const QString &title)
@@ -163,11 +164,53 @@
         return d->m_pMainWidget;
 }
 
+KWindowButtonBar *KDialog::windowButtonBar()
+{
+    Q_D(KDialog);
+    return d->m_pWindowButtonBar;
+}
+
+KIconBar *KDialog::iconBar()
+{
+    Q_D(KDialog);
+    return d->m_pIconBar;
+}
+
 bool KDialog::eventFilter(QObject *target, QEvent *event)
 {
     Q_D(KDialog);
     if(target == this && (event->type() == QEvent::WindowStateChange || event->type() == QEvent::Show))
     {
+        if(event->type() == QEvent::Show)
+        {
+            MotifWmHints hints;
+            hints.flags = MWM_HINTS_FUNCTIONS|MWM_HINTS_DECORATIONS;
+            hints.functions = MWM_FUNC_ALL;
+            hints.decorations = MWM_DECOR_BORDER;
+            XAtomHelper::getInstance()->setWindowMotifHint(this->winId(), hints);
+
+            QWidget *parentWindow = qobject_cast<QWidget*>(this->parent());
+
+            while(parentWindow && parentWindow->parent())
+                parentWindow = qobject_cast<QWidget*>(parentWindow->parent());
+
+            if(parentWindow && parentWindow->isActiveWindow()){
+                const QPoint parentWindowCenter = parentWindow->geometry().center();
+                const QPoint dialogCenter = this->geometry().center();
+                const QPoint moveOffset = parentWindowCenter - dialogCenter;
+                move(pos() + moveOffset);
+            }
+            else{
+                QDesktopWidget desktop;
+                int screenWidth = desktop.screen()->width();
+                int screenHeight = desktop.screen()->height();
+
+                int messageBox_X = (screenWidth - this->width()) / 2;
+                int messageBox_Y = (screenHeight - this->height()) / 2;
+
+                this->move(messageBox_X, messageBox_Y);
+            }
+        }
         if(this->isMaximized())
             d->m_pWindowButtonBar->setMaximumButtonState(MaximumButtonState::Restore);
         else
@@ -211,11 +254,6 @@
     this->setPalette(p);
     if(!d->m_IconName.isEmpty())
         this->setWindowIcon(d->m_IconName);
-    QPalette palette=this->palette();
-    d->m_pWindowButtonBar->setAutoFillBackground(true);
-    d->m_pWindowButtonBar->setPalette(palette);
-    d->m_pIconBar->setAutoFillBackground(true);
-    d->m_pIconBar->setPalette(palette);
 }
 
 void KDialog::changeIconStyle()
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kdialog.h libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kdialog.h
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kdialog.h	2024-05-16 09:25:54.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kdialog.h	2024-10-29 15:22:42.000000000 +0800
@@ -99,6 +99,10 @@
      */
     QWidget* mainWidget();
 
+    KWindowButtonBar* windowButtonBar();
+
+    KIconBar* iconBar();
+
 protected:
     bool eventFilter(QObject *target, QEvent *event) override;
     void changeTheme();
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kdirtabbar.cpp libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kdirtabbar.cpp
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kdirtabbar.cpp	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kdirtabbar.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,477 @@
+#include "kdirtabbar.h"
+#include <QList>
+#include <QToolButton>
+#include <QFileInfo>
+#include <QBoxLayout>
+#include <QStringList>
+#include <QDirIterator>
+#include <QMenu>
+#include <QDebug>
+#include <QStyle>
+#include <QStyleOptionToolButton>
+#include <QFontMetrics>
+#include <QSpacerItem>
+#include <QPainter>
+#include <QStyle>
+#include <QStylePainter>
+#include <QString>
+#include "themeController.h"
+
+namespace kdk
+{
+
+class CustomButton : public QToolButton
+{
+    Q_OBJECT
+public:
+    CustomButton(QWidget* parent = nullptr);
+    QIcon setIconColor(QIcon icon, QColor color)
+    {
+        QPixmap pixmap = icon.pixmap(QSize(16,16));
+        QPainter painter(&pixmap);
+        painter.setCompositionMode(QPainter::CompositionMode_SourceIn);
+        painter.fillRect(pixmap.rect(), color);
+        QIcon colorIcon = QIcon(pixmap);
+        return colorIcon;
+    }
+
+protected:
+    void paintEvent(QPaintEvent * event);
+};
+
+class KDirTabBarPrivate:public QObject,public ThemeController
+{
+    Q_OBJECT
+    Q_DECLARE_PUBLIC(KDirTabBar)
+
+public:
+    KDirTabBarPrivate(KDirTabBar*parent);
+
+    void clearButtons();
+    void addButton(const QString &uri,QString buttonName, bool setMenu = true);
+
+    void doLayout();
+
+    void changeTheme();
+
+private:
+    KDirTabBar* q_ptr;
+    int m_visibleDepth;
+    int m_textLength;
+    QString m_currentPath;
+    QString m_rootPath;
+    QHBoxLayout *buttonLayout;
+    QHBoxLayout *m_layout;
+//    QSpacerItem *spacer;
+
+    QList<QToolButton*> m_buttonList;
+    QList<QFileInfo*> m_button_info;
+
+};
+
+
+KDirTabBar::KDirTabBar(QWidget *parent)
+    : QWidget(parent),
+      d_ptr(new KDirTabBarPrivate(this))
+{
+    Q_D(KDirTabBar);
+    d->m_visibleDepth = 5;
+    d->m_textLength = 5;
+//    d->spacer = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
+
+    d->buttonLayout = new QHBoxLayout;
+    d->buttonLayout->setContentsMargins(0,0,0,0);
+    d->buttonLayout->setSpacing(0);
+    d->buttonLayout->setMargin(0);
+    d->m_layout =new QHBoxLayout(this);
+    d->m_layout->setContentsMargins(0,0,0,0);
+    d->m_layout->setSpacing(0);
+    d->m_layout->setMargin(0);
+    d->m_layout->addLayout(d->buttonLayout);
+//    d->m_layout->addItem(d->spacer);
+    d->m_layout->addStretch();
+    setLayout(d->m_layout);
+//    setFocusPolicy(Qt::ClickFocus);
+    setObjectName("KDirTabBar");
+
+    connect(d->m_gsetting,&QGSettings::changed, d,&KDirTabBarPrivate::changeTheme);
+}
+
+KDirTabBar::~KDirTabBar()
+{
+
+}
+void KDirTabBar::setCurrentPath(const QString Dirpath)
+{
+    Q_D(KDirTabBar);
+    QList<QFileInfo*> lastInfo;
+    for(auto info:d->m_button_info)
+    {
+        QFileInfo * fileinfo =new QFileInfo();
+        fileinfo = info;
+        lastInfo.append(fileinfo);
+    }
+
+    d->m_currentPath=Dirpath;
+    d->m_button_info.clear();
+    auto tmpUri = Dirpath;
+    QFileInfo* file =new QFileInfo(tmpUri) ;
+    while (tmpUri != "/" && tmpUri != "") {
+        d->m_button_info.prepend(file);
+        tmpUri=file->absolutePath();
+        file=new QFileInfo(tmpUri);
+    }
+    if(lastInfo.isEmpty())
+    {
+    d->clearButtons();
+        for(auto info : d->m_button_info)
+        {
+            d->addButton(info->absoluteFilePath(), info->fileName(),true);
+        }
+    }
+    else
+    {
+        while(d->m_button_info.size() < d->m_buttonList.size())//新的比旧的列表短时,去掉多余的Qlist项
+        {
+            d->m_buttonList.last()->deleteLater();
+            d->m_buttonList.removeLast();
+        }
+        for(int i=d->m_buttonList.size()-1 ;i>=0;i--)
+        {
+            if(lastInfo[i]->absoluteFilePath() != d->m_button_info[i]->absoluteFilePath())//对比新旧列表中的每一项,如果不相同则remove按钮列表中的元素
+            {
+                d->m_buttonList[i]->hide();
+                d->m_buttonList[i]->deleteLater();
+                d->m_buttonList.removeAt(i);
+            }
+        }
+        for(int i=d->m_buttonList.size();i<d->m_button_info.size();i++)
+        {
+            d->addButton(d->m_button_info[i]->absoluteFilePath(), d->m_button_info[i]->fileName(),true);
+        }
+    }
+
+    for (auto info : lastInfo) {
+
+        delete info;
+    }
+    lastInfo.clear();
+
+    d->doLayout(); //布局,最大显示个数
+}
+
+QString KDirTabBar::currentPath() const
+{
+    Q_D(const KDirTabBar);
+    return d->m_currentPath;
+}
+
+void KDirTabBar::setVisibleDepth(const int depth)
+{
+    Q_D(KDirTabBar);
+    d->m_visibleDepth = depth;
+    //dolayout
+}
+
+int KDirTabBar::visibleDepth()
+{
+    Q_D(KDirTabBar);
+    return d->m_visibleDepth;
+}
+
+void KDirTabBar::setIcon(int index,const QIcon &icon)
+{
+    Q_D(KDirTabBar);
+    if(index<d->m_buttonList.size())
+    {
+        d->m_buttonList[index-1]->setIcon(icon);
+        d->doLayout();
+    }
+}
+
+QIcon KDirTabBar::icon(int index)
+{
+    Q_D(KDirTabBar);
+    return d->m_buttonList[index-1]->icon();
+}
+
+void KDirTabBar::setTextLength(int length)
+{
+    Q_D(KDirTabBar);
+    d->m_textLength = length;
+}
+
+int KDirTabBar::textLength()
+{
+    Q_D(KDirTabBar);
+    return d->m_textLength;
+}
+
+
+QList<QToolButton *> KDirTabBar::buttons()
+{
+    Q_D(KDirTabBar);
+    return d->m_buttonList;
+}
+
+
+//void KDirTabBar::mousePressEvent(QMouseEvent *event)
+//{
+//    QWidget::mousePressEvent(event);
+
+//}
+
+void KDirTabBarPrivate::addButton(const QString &uri, QString buttonName, bool setMenu){
+    Q_Q(KDirTabBar);
+    CustomButton *button = new CustomButton(q);
+    QString displayName = buttonName;
+    button->setFocusPolicy(Qt::FocusPolicy(button->focusPolicy() & ~Qt::TabFocus));
+    button->setAutoRaise(true);
+    button->setProperty("uri", uri);
+    button->setIconSize(QSize(16, 16));
+    button->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
+    button->setPopupMode(CustomButton::MenuButtonPopup);
+
+    m_buttonList.append(static_cast<CustomButton*>(button));
+
+    buttonLayout->addWidget(button);
+    button->setIcon(QIcon::fromTheme("folder"));
+    QFontMetrics ftm(q->font());
+
+    if (displayName.length() > m_textLength)
+    {
+        int  charWidth = ftm.averageCharWidth();
+        displayName = ftm.elidedText(displayName, Qt::ElideRight, m_textLength * charWidth);
+    }
+
+
+    button->setText(displayName);
+
+    if (buttonName != displayName)
+    {
+       button->setToolTip(buttonName);
+    }
+
+    connect(button, &CustomButton::clicked, [=]() {
+        q->setCurrentPath(uri);
+        emit q->tabBarClicked(uri);
+    });
+
+    if (setMenu){
+        QList<QFileInfo > uris;
+        QDirIterator it(uri, QDir::Dirs | QDir::NoDotAndDotDot);
+        while (it.hasNext()) {
+            it.next();
+            QFileInfo fileInfo = it.fileInfo();
+            if(fileInfo.isDir())
+            {
+                uris << fileInfo;
+            }
+        }
+
+        QMenu *menu = new QMenu;
+        connect(button, &CustomButton::destroyed, menu, &QMenu::deleteLater);
+        const int WIDTH_EXTEND = 5;
+
+        connect(menu, &QMenu::aboutToShow, this, [=](){
+            menu->setMinimumWidth(button->width() + WIDTH_EXTEND);
+        });
+        connect(menu, &QMenu::aboutToHide, this, [=](){
+        });
+
+        if (uris.isEmpty())
+            button->setPopupMode(CustomButton::InstantPopup);
+        else{
+            QList<QAction *> actions;
+            for (auto uri : uris) {
+                QIcon icon;
+
+                if(uri.baseName() == "图片")
+                    icon = QIcon::fromTheme("folder-pictures");
+                else if(uri.baseName() == "下载")
+                    icon = QIcon::fromTheme("folder-download");
+                else if(uri.baseName() == "公共的")
+                    icon = QIcon::fromTheme("folder-publicshare");
+                else if(uri.baseName() == "文档")
+                    icon = QIcon::fromTheme("folder-documents");
+                else if(uri.baseName() == "桌面")
+                    icon = QIcon::fromTheme("user-desktop");
+                else if(uri.baseName() == "模板")
+                    icon = QIcon::fromTheme("folder-templates");
+                else if(uri.baseName() == "视频")
+                    icon = QIcon::fromTheme("folder-videos");
+                else if(uri.baseName() == "音乐")
+                    icon = QIcon::fromTheme("folder-music");
+                else
+                    icon = QIcon::fromTheme("folder");
+
+                QAction *action = new QAction(icon, uri.fileName(), this);
+                actions<<action;
+                connect(action, &QAction::triggered, [=]() {
+                    q->setCurrentPath(uri.absoluteFilePath());
+                    emit q->tabBarClicked(uri.absoluteFilePath());
+                });
+            }
+            menu->addActions(actions);
+            if(menu)
+                button->setMenu(menu);
+        }
+    }
+}
+
+void KDirTabBarPrivate::doLayout()
+{
+    Q_Q(KDirTabBar);
+    int counter = 0;
+    if(m_buttonList.size() > m_visibleDepth)
+    {
+        counter = m_buttonList.size() - m_visibleDepth;
+    }
+    for(int i=0 ; i<m_buttonList.size() ; i++)
+    {
+        m_buttonList[i]->setVisible(false);
+    }
+    for(counter; counter<m_buttonList.size() ;counter++)
+    {
+        m_buttonList[counter]->setVisible(true);
+        m_buttonList[counter]->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
+        m_buttonList[counter]->adjustSize();
+//        buttonLayout->addWidget(m_buttonList[counter]);
+    }
+}
+
+void KDirTabBarPrivate::changeTheme()
+{
+    Q_Q(KDirTabBar);
+    initThemeStyle();
+}
+
+void KDirTabBarPrivate::clearButtons()
+{
+    Q_Q(KDirTabBar);
+    for (auto button : m_buttonList) {
+        button->hide();
+        button->deleteLater();
+    }
+    m_buttonList.clear();
+}
+
+KDirTabBarPrivate::KDirTabBarPrivate(KDirTabBar*parent)
+    :q_ptr(parent)
+{
+
+}
+
+CustomButton::CustomButton(QWidget *parent)
+{
+
+}
+
+void CustomButton::paintEvent(QPaintEvent *event)
+{
+    QStyleOptionToolButton option;
+    initStyleOption(&option);
+//QToolButton::paintEvent(event);
+
+    qreal ra = 6;
+    QColor textColor = palette().color(QPalette::Text);
+    QColor backgroundColor;
+    QPen pen;
+    QPainter painter(this);
+    painter.setRenderHint(QPainter::Antialiasing);
+
+    if(ThemeController::themeMode() == LightTheme){ //浅色模式
+        if(!option.state.testFlag(QStyle::State_Enabled))
+        {
+            textColor = palette().color(QPalette::Disabled,QPalette::Text);
+        }
+        else{
+            //三态
+            if(option.state.testFlag(QStyle::State_Sunken))
+            {
+                backgroundColor =QColor("#B9B9B9");
+                //绘制背景颜色
+                painter.setBrush(backgroundColor);
+                pen = QPen(backgroundColor);
+                painter.setPen(pen);
+                painter.drawRoundedRect(rect(),ra,ra);
+            }
+            else if (option.state.testFlag(QStyle::State_MouseOver))
+            {
+                backgroundColor = QColor("#DCDCDC");
+                //绘制背景颜色
+                painter.setBrush(backgroundColor);
+                pen = QPen(backgroundColor);
+                painter.setPen(pen);
+                painter.drawRoundedRect(rect(),ra,ra);
+            }
+        }
+    }
+    else
+    {
+        if(!option.state.testFlag(QStyle::State_Enabled))
+        {
+            textColor = palette().color(QPalette::Disabled,QPalette::Text);
+        }
+        else{
+            //三态
+            if(option.state.testFlag(QStyle::State_Sunken))
+            {
+                backgroundColor =QColor("#737373");
+                //绘制背景颜色
+                painter.setBrush(backgroundColor);
+                pen = QPen(backgroundColor);
+                painter.setPen(pen);
+                painter.drawRoundedRect(rect(),ra,ra);
+            }
+            else if (option.state.testFlag(QStyle::State_MouseOver))
+            {
+                backgroundColor = QColor("#545454");
+                //绘制背景颜色
+                painter.setBrush(backgroundColor);
+                pen = QPen(backgroundColor);
+                painter.setPen(pen);
+                painter.drawRoundedRect(rect(),ra,ra);
+            }
+        }
+    }
+
+    painter.end();
+
+    //绘制图标、文本、箭头
+    QPainter p(this);
+    QRect textRect;
+    uint tf = Qt::AlignVCenter;
+
+    textRect = QRect(32 ,0 , option.rect.width()-64 , option.rect.height());
+
+    if (menu() && menu()->isVisible())
+    {
+        p.drawPixmap(this->width()-24,(this->height()-16)/2,16,16,
+                     ThemeController::drawColoredPixmap(QIcon::fromTheme("ukui-down-symbolic").pixmap(16,16),textColor));
+    }
+    else if ( menu() && !menu()->isVisible() )
+    {
+        p.drawPixmap(this->width()-24,(this->height()-16)/2,16,16,
+                     setIconColor(QIcon::fromTheme("ukui-end-symbolic"),textColor).pixmap(16.16));
+    }
+    else
+        textRect = QRect(32 ,0 , option.rect.width()-32 , option.rect.height());
+
+    if (!icon().isNull())
+        p.drawPixmap(8,(option.rect.height()-16)/2,16,16,icon().pixmap(16,16));
+    else
+        textRect = QRect( 8, 0, option.rect.width()-32, option.rect.height());
+
+    pen=QPen(textColor);
+    p.setPen(pen);
+    p.drawText(textRect,tf,this->text());
+
+    p.end();
+
+}
+
+}
+
+#include "kdirtabbar.moc"
+#include "moc_kdirtabbar.cpp"
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kdirtabbar.h libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kdirtabbar.h
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kdirtabbar.h	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kdirtabbar.h	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,97 @@
+#ifndef KDIRTABBAR_H
+#define KDIRTABBAR_H
+
+#include <QWidget>
+#include <QToolButton>
+
+namespace kdk
+{
+
+class KDirTabBarPrivate;
+
+class KDirTabBar : public QWidget
+{
+    Q_OBJECT
+public:
+    KDirTabBar(QWidget *parent = nullptr);
+    ~KDirTabBar();
+
+    /**
+     * @brief 设置目标路径
+     * @param path
+     */
+    void setCurrentPath(const QString Dirpath);
+
+    /**
+     * @brief 获取目标路径
+     * @return QString
+     */
+    QString currentPath() const;
+
+    /**
+     * @brief 设置tabbar显示个数
+     * @param int
+     */
+    void setVisibleDepth(const int depth);
+
+    /**
+     * @brief 获取tabbar显示个数
+     * @return int
+     */
+    int visibleDepth() ;
+
+    /**
+     * @brief 设置图标
+     * @param icon
+     */
+    void setIcon(int index,const QIcon &icon);
+
+    /**
+     * @brief 获取图标
+     * @return QIcon
+     */
+    QIcon icon(int index);
+
+    /**
+     * @brief 设置Root
+     * @param
+     */
+    void setRootPath(const QString targetPath);
+
+    /**
+     * @brief 获取Root路径
+     * @return QString
+     */
+    QString RootPath();
+
+   /**
+    * @brief 设置按钮显示字体长度
+    * @param int
+    */
+    void setTextLength(int length);
+
+   /**
+    * @brief 返回字体显示长度
+    * @return int
+    */
+    int textLength();
+
+    QList<QToolButton *> buttons();
+//    QToolButton * buttonAt(int index);
+
+
+signals:
+    void tabBarClicked(const QString uri);
+
+protected:
+//    void paintEvent(QPaintEvent *event);//有图标和无图标,三态
+//    void mousePressEvent(QMouseEvent *e) override;
+
+private:
+    Q_DECLARE_PRIVATE(KDirTabBar);
+    KDirTabBarPrivate*const d_ptr;
+
+};
+
+}
+#endif // KDIRTABBAR_H
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kdragwidget.cpp libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kdragwidget.cpp
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kdragwidget.cpp	2024-05-16 09:25:54.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kdragwidget.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -7,6 +7,7 @@
 #include <QDebug>
 #include <QCoreApplication>
 #include <QStandardPaths>
+#include <QDesktopWidget>
 #include "themeController.h"
 
 namespace kdk {
@@ -123,6 +124,7 @@
     connect(d->m_gsetting,&QGSettings::changed,this,[=](){d->changeTheme();});
 
     installEventFilter(this);
+    d->m_FileDialog->installEventFilter(this);
 }
 
 KPushButton *KDragWidget::iconButton()
@@ -207,60 +209,94 @@
     QPen pen = painter.pen();
     pen.setColor(d->lineColor);
     pen.setStyle(d->mainState);
+    pen.setWidth(1);
     painter.setPen(pen);
-    painter.drawRoundedRect(rect().adjusted(0,0,-1,-1),6,6);
+    painter.setBrush(Qt::NoBrush);
+    painter.drawRoundedRect(rect().adjusted(1,1,-1,-1),6,6);
 }
 
 bool KDragWidget::eventFilter(QObject *watched, QEvent *event)
 {
     Q_D(KDragWidget);
-    switch (event->type()) {
-    case QEvent::MouseButtonPress:
+    if(watched == this)
     {
-        d->m_pIconButton->setAttribute(Qt::WA_UnderMouse, true);
-        d->lineColor = palette().toolTipText().color();
-        d->openFile();
+        switch (event->type())
+        {
+        case QEvent::MouseButtonPress:
+        {
+            d->m_pIconButton->setAttribute(Qt::WA_UnderMouse, true);
+            d->lineColor = palette().toolTipText().color();
+            d->openFile();
 
-        update();
-        break;
-    }
-    case QEvent::MouseButtonRelease:
-    {
-        d->m_pIconButton->setAttribute(Qt::WA_UnderMouse, true);
-        d->lineColor = palette().toolTipText().color();
-        update();
-        break;
-    }
-    case QEvent::Leave:
-    {
-        d->m_pIconButton->setAttribute(Qt::WA_UnderMouse, false);
-        d->lineColor = palette().placeholderText().color();
-        update();
-        break;
-    }
-    case QEvent::Enter:
-    {
-        d->m_pIconButton->setAttribute(Qt::WA_UnderMouse, true);
-        d->lineColor = palette().toolTipText().color();
-        update();
-        break;
-    }
-    case QEvent::DragEnter:
-    {
-        d->m_pIconButton->setAttribute(Qt::WA_UnderMouse, true);
-        d->lineColor = palette().highlight().color();
-        update();
-        break;
+            update();
+            break;
+        }
+        case QEvent::MouseButtonRelease:
+        {
+            d->m_pIconButton->setAttribute(Qt::WA_UnderMouse, true);
+            d->lineColor = palette().toolTipText().color();
+            update();
+            break;
+        }
+        case QEvent::Leave:
+        {
+            d->m_pIconButton->setAttribute(Qt::WA_UnderMouse, false);
+            d->lineColor = palette().placeholderText().color();
+            update();
+            break;
+        }
+        case QEvent::Enter:
+        {
+            d->m_pIconButton->setAttribute(Qt::WA_UnderMouse, true);
+            d->lineColor = palette().toolTipText().color();
+            update();
+            break;
+        }
+        case QEvent::DragEnter:
+        {
+            d->m_pIconButton->setAttribute(Qt::WA_UnderMouse, true);
+            d->lineColor = palette().highlight().color();
+            update();
+            break;
+        }
+        case QEvent::DragLeave:
+        {
+            d->m_pIconButton->setAttribute(Qt::WA_UnderMouse, false);
+            d->lineColor = palette().placeholderText().color();
+            update();
+            break;
+        }
+        default:
+            break;
+        }
     }
-    case QEvent::DragLeave:
+
+    if(watched == d->m_FileDialog)
     {
-        d->m_pIconButton->setAttribute(Qt::WA_UnderMouse, false);
-        d->lineColor = palette().placeholderText().color();
-        update();
-        break;
-    }
-    default:
-        break;
+
+        if(event->type() == QEvent::Show)
+        {
+            QWidget *parentWindow = qobject_cast<QWidget*>(this->parent());
+
+            while(parentWindow && parentWindow->parent())
+                parentWindow = qobject_cast<QWidget*>(parentWindow->parent());
+
+            if(parentWindow && parentWindow->isActiveWindow())
+            {
+                const QPoint parentWindowCenter = parentWindow->geometry().center();
+                d->m_FileDialog->move(parentWindowCenter.x() - d->m_FileDialog->width()/2 , parentWindowCenter.y() - d->m_FileDialog->height()/2 + 40);
+            }
+            else
+            {
+                QDesktopWidget desktop;
+                int screenWidth = desktop.screen()->width();
+                int screenHeight = desktop.screen()->height();
+
+                int messageBox_X = (screenWidth - this->width()) / 2;
+                int messageBox_Y = (screenHeight - this->height()) / 2;
+                d->m_FileDialog->move(messageBox_X, messageBox_Y);
+            }
+        }
     }
     return QWidget::eventFilter(watched,event);
 }
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kfilewidget.cpp libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kfilewidget.cpp
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kfilewidget.cpp	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kfilewidget.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,326 @@
+/*
+ * libkysdk-qtwidgets's Library
+ *
+ * Copyright (C) 2023, KylinSoft Co., Ltd.
+ *
+ * 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 3 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 General Public License
+ * along with this library.  If not, see <https://www.gnu.org/licenses/>.
+ *
+ * Authors: Zhenyu Wang <wangzhenyu@kylinos.cn>
+ *
+ */
+
+#include "kfilewidget.h"
+#include "themeController.h"
+#include <QEvent>
+#include <QPainter>
+#include <QDebug>
+#include <QIcon>
+#include <QPaintEvent>
+#include <QFontMetrics>
+#include <QHBoxLayout>
+#include <QVBoxLayout>
+#include <QLabel>
+#include <QPainterPath>
+
+namespace kdk {
+
+class KFileWidgetPrivate:public QObject,public ThemeController
+{
+    Q_OBJECT
+    Q_DECLARE_PUBLIC(KFileWidget)
+public:
+    KFileWidgetPrivate(KFileWidget*parent);
+
+protected:
+    void changeTheme();
+private:
+
+    KFileWidget *q_ptr;
+    QHBoxLayout *m_pHLayout;
+    QVBoxLayout *m_pVLayout;
+    QLabel *m_pIconLabel;
+    QLabel *m_pMainLabel;
+    QLabel *m_pSubLabel;
+    QColor m_buttonBkgColor;
+    QColor m_iconColor;
+    QRect m_buttonRect;
+    int m_bottomRightRadius;
+    int m_topLeftRadius;
+    int m_bottomLeftRadius;
+    int m_topRightRadius;
+};
+
+
+KFileWidget::KFileWidget(QWidget *parent):
+    QWidget(parent),
+    d_ptr(new KFileWidgetPrivate(this))
+{
+    Q_D(KFileWidget);
+    installEventFilter(this);
+    setMouseTracking(true);
+    d->m_pMainLabel->installEventFilter(this);
+    setFixedHeight(56);
+}
+
+void KFileWidget::setMainText(QString str)
+{
+    Q_D(KFileWidget);
+    d->m_pMainLabel->setText(str);
+}
+
+void KFileWidget::setSubText(QString str)
+{
+    Q_D(KFileWidget);
+    d->m_pSubLabel->setText(str);
+}
+
+void KFileWidget::setIcon(QIcon icon)
+{
+    Q_D(KFileWidget);
+    d->m_pIconLabel->setFixedSize(32,32);
+    d->m_pIconLabel->setPixmap(icon.pixmap(32,32));
+}
+
+void KFileWidget::setBorderRadius(int radius)
+{
+    Q_D(KFileWidget);
+    d->m_bottomRightRadius = radius;
+    d->m_topLeftRadius = radius;
+    d->m_bottomLeftRadius = radius;
+    d->m_topRightRadius = radius;
+}
+
+void KFileWidget::setBorderRadius(int bottomLeft, int topLeft, int topRight, int bottomRight)
+{
+    Q_D(KFileWidget);
+    d->m_bottomRightRadius = bottomRight;
+    d->m_topLeftRadius = topLeft;
+    d->m_bottomLeftRadius = bottomLeft;
+    d->m_topRightRadius = topRight;
+}
+
+void KFileWidget::paintEvent(QPaintEvent *event)
+{
+    Q_D(KFileWidget);
+    if(d->m_pSubLabel->text().isNull())
+        d->m_pSubLabel->setVisible(false);
+    d->m_buttonRect = QRect(rect().width()-17,0,16,16);
+    QPainter painter(this);
+    painter.setRenderHint(QPainter::Antialiasing);
+    painter.setRenderHint(QPainter::SmoothPixmapTransform);
+    painter.setRenderHint(QPainter::HighQualityAntialiasing);
+    painter.setBrush(palette().window().color());
+    if(ThemeController::themeMode() == LightTheme)
+    {
+        QColor color(38,38,38);
+        color.setAlphaF(0.15);
+        painter.setPen(color);
+    }
+    else
+    {
+        QColor color(255, 255, 255);
+        color.setAlphaF(0.15);
+        painter.setPen(color);
+    }
+
+    QPainterPath path;
+    QRect rectPath = rect().adjusted(0,2,-2,0);
+
+    path.moveTo(rectPath.topRight() - QPoint(d->m_topRightRadius , 0) ); //右上
+    path.lineTo(rectPath.topLeft() + QPointF(d->m_topLeftRadius , 0)); //上方线
+    path.quadTo(rectPath.topLeft(), rectPath.topLeft() + QPointF(0 , d->m_topLeftRadius)); //圆角
+    path.lineTo(rectPath.bottomLeft() +  QPointF(0,- d->m_bottomLeftRadius)); //左方线
+    path.quadTo(rectPath.bottomLeft(), rectPath.bottomLeft() + QPointF(d->m_bottomLeftRadius , 0));//圆角
+    path.lineTo(rectPath.bottomRight() - QPointF(d->m_bottomRightRadius , 0));//下方线
+    path.quadTo(rectPath.bottomRight(), rectPath.bottomRight() + QPointF(0, - d->m_bottomRightRadius));//圆角
+    path.lineTo(rectPath.topRight() + QPointF(0, d->m_topRightRadius));//右方线
+    path.quadTo(rectPath.topRight() , rectPath.topRight() - QPointF(d->m_topRightRadius, 0)); // 圆角
+
+    if(!isEnabled())
+    {
+        d->m_buttonBkgColor = palette().color(QPalette::Disabled,QPalette::Button);
+        d->m_iconColor = palette().color(QPalette::Disabled,QPalette::HighlightedText);
+    }
+    painter.drawPath(path);
+    painter.setBrush(d->m_buttonBkgColor);
+    painter.drawEllipse(d->m_buttonRect);
+
+    d->m_pHLayout->setContentsMargins(8,8,d->m_buttonRect.width(),8);
+    QIcon icon(QIcon::fromTheme("application-exit-symbolic"));
+    QPixmap pixmap =icon.pixmap(d->m_buttonRect.size());
+    painter.drawPixmap(d->m_buttonRect,ThemeController::drawColoredPixmap(pixmap,d->m_iconColor));
+}
+
+bool KFileWidget::eventFilter(QObject *watched, QEvent *event)
+{
+    Q_D(KFileWidget);
+
+    QMouseEvent* mouseEvent = static_cast<QMouseEvent*>(event);
+    switch (event->type())
+    {
+    case QEvent::Enter:
+    case QEvent::MouseMove:
+    {
+        if(d->m_buttonRect.contains(mouseEvent->pos()))
+        {
+            d->m_iconColor = QColor(255,255,255);
+            d->m_buttonBkgColor = QColor(243, 34, 45);
+        }
+        else
+        {
+            if(ThemeController::themeMode() == LightTheme)
+            {
+                d->m_iconColor = QColor(38,38,38);
+                d->m_buttonBkgColor = QColor(255,255,255);
+            }
+            else
+            {
+                d->m_iconColor = QColor(255,255,255);
+                d->m_buttonBkgColor = palette().window().color();
+            }
+        }
+        update();
+        break;
+    }
+    case QEvent::MouseButtonPress:
+    {
+        if(d->m_buttonRect.contains(mouseEvent->pos()))
+        {
+            d->m_iconColor = QColor(255,255,255);
+            d->m_buttonBkgColor = QColor(204, 18, 34);
+        }
+        else
+        {
+            if(ThemeController::themeMode() == LightTheme)
+            {
+                d->m_iconColor = QColor(38,38,38);
+                d->m_buttonBkgColor = QColor(255,255,255);
+            }
+            else
+            {
+                d->m_iconColor = QColor(255,255,255);
+                d->m_buttonBkgColor = palette().window().color();
+            }
+        }
+
+        update();
+        break;
+    }
+    case QEvent::MouseButtonRelease:
+    {
+        if(d->m_buttonRect.contains(mouseEvent->pos()))
+        {
+            d->m_iconColor = QColor(255,255,255);
+            d->m_buttonBkgColor = QColor(243, 34, 45);
+            if(isEnabled())
+                emit clicked();
+        }
+        else
+        {
+            if(ThemeController::themeMode() == LightTheme)
+            {
+                d->m_iconColor = QColor(38,38,38);
+                d->m_buttonBkgColor = QColor(255,255,255);
+            }
+            else
+            {
+                d->m_iconColor = QColor(255,255,255);
+                d->m_buttonBkgColor = palette().window().color();
+            }
+        }
+        update();
+        break;
+    }
+    case QEvent::Leave:
+    {
+        if(ThemeController::themeMode() == LightTheme)
+        {
+            d->m_iconColor = QColor(38,38,38);
+            d->m_buttonBkgColor = QColor(255,255,255);
+        }
+        else
+        {
+            d->m_iconColor = QColor(255,255,255);
+            d->m_buttonBkgColor = palette().window().color();
+        }
+        update();
+        break;
+    }
+    default:
+        break;
+    }
+    return QWidget::eventFilter(watched,event);
+}
+
+KFileWidgetPrivate::KFileWidgetPrivate(KFileWidget *parent)
+    :q_ptr(parent)
+{
+    Q_Q(KFileWidget);
+    m_bottomRightRadius = 6;
+    m_topLeftRadius = 6;
+    m_bottomLeftRadius = 6;
+    m_topRightRadius = 6;
+    m_pMainLabel = new QLabel();
+    m_pSubLabel = new QLabel();
+
+    m_pVLayout = new QVBoxLayout();
+    m_pVLayout->setSpacing(0);
+    m_pVLayout->addStretch();
+    m_pVLayout->addWidget(m_pMainLabel);
+    m_pVLayout->addWidget(m_pSubLabel);
+    m_pVLayout->addStretch();
+    m_pVLayout->setContentsMargins(0,0,0,0);
+
+    m_pIconLabel = new QLabel();
+    m_pHLayout = new QHBoxLayout(q);
+
+    m_pHLayout->setContentsMargins(0,0,0,0);
+    m_pHLayout->setSpacing(0);
+    m_pHLayout->addWidget(m_pIconLabel);
+    m_pHLayout->addSpacing(8);
+    m_pHLayout->addLayout(m_pVLayout);
+    q->setContentsMargins(0,0,0,0);
+
+    changeTheme();
+    connect(m_gsetting,&QGSettings::changed,this,[=](){changeTheme();});
+    setParent(parent);
+}
+
+void KFileWidgetPrivate::changeTheme()
+{
+    Q_Q(KFileWidget);
+    initThemeStyle();
+
+    QPalette subPalette = q->palette();
+    QColor color = subPalette.color(QPalette::Disabled,QPalette::WindowText);
+    subPalette.setColor(QPalette::Text,color);
+    m_pSubLabel->setPalette(subPalette);
+
+    if(ThemeController::themeMode() == LightTheme)
+    {
+        m_iconColor = QColor(38,38,38);
+        m_buttonBkgColor = QColor(255,255,255);
+    }
+    else
+    {
+        m_iconColor = QColor(255,255,255);
+        m_buttonBkgColor = q->palette().window().color();
+    }
+}
+
+
+}
+
+#include "kfilewidget.moc"
+#include "moc_kfilewidget.cpp"
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kfilewidget.h libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kfilewidget.h
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kfilewidget.h	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kfilewidget.h	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,92 @@
+/*
+ * libkysdk-qtwidgets's Library
+ *
+ * Copyright (C) 2023, KylinSoft Co., Ltd.
+ *
+ * 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 3 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 General Public License
+ * along with this library.  If not, see <https://www.gnu.org/licenses/>.
+ *
+ * Authors: Zhenyu Wang <wangzhenyu@kylinos.cn>
+ *
+ */
+
+#ifndef KFILEWIDGET_H
+#define KFILEWIDGET_H
+
+#include <QWidget>
+#include "gui_g.h"
+
+namespace kdk {
+
+/** @defgroup
+  */
+
+class KFileWidgetPrivate;
+
+/**
+ * @brief The KFileWidget class
+ * @since 2.4
+ */
+class GUI_EXPORT KFileWidget : public QWidget
+{
+    Q_OBJECT
+public:
+    KFileWidget(QWidget *parent = nullptr);
+
+public:
+    /** @brief 设置主要文本
+     *  @param str
+     */
+    void setMainText(QString str);
+
+    /**
+     * @brief 设置次级文本
+     * @param str
+     */
+    void setSubText(QString str);
+
+    /**
+     * @brief 设置图片
+     * @param icon
+     */
+    void setIcon(QIcon icon);
+
+    /**
+     * @brief 设置圆角
+     * @param radius
+     */
+    void setBorderRadius(int radius);
+
+    /**
+     * @brief 设置圆角
+     * @param bottomLeft
+     * @param topLeft
+     * @param topRight
+     * @param bottomRight
+     */
+    void setBorderRadius(int bottomLeft,int topLeft,int topRight,int bottomRight);
+
+Q_SIGNALS:
+    void clicked();
+
+protected:
+    void paintEvent(QPaintEvent* event);
+    bool eventFilter(QObject *watched, QEvent *event);
+
+private:
+    Q_DECLARE_PRIVATE(KFileWidget)
+    KFileWidgetPrivate* const d_ptr;
+};
+
+}
+#endif // KFILEWIDGET_H
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kintrowidget.cpp libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kintrowidget.cpp
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kintrowidget.cpp	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kintrowidget.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,296 @@
+/*
+ * libkysdk-qtwidgets's Library
+ *
+ * Copyright (C) 2023, KylinSoft Co., Ltd.
+ *
+ * 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 3 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 General Public License
+ * along with this library.  If not, see <https://www.gnu.org/licenses/>.
+ *
+ * Authors: Zhenyu Wang <wangzhenyu@kylinos.cn>
+ *
+ */
+
+#include "kintrowidget.h"
+#include "themeController.h"
+#include <QPainter>
+#include <QPainterPath>
+#include <QBoxLayout>
+#include <QEvent>
+#include <QDebug>
+#include <QLabel>
+#include <QMouseEvent>
+#include "klabel.h"
+
+namespace kdk {
+
+class Q_DECL_HIDDEN KIntroWidgetPrivate : public QObject , public ThemeController
+{
+    Q_OBJECT
+    Q_DECLARE_PUBLIC(KIntroWidget)
+public:
+    KIntroWidgetPrivate(KIntroWidget *parent);
+
+protected:
+    void changeTheme();
+
+private:
+    KIntroWidget *const q_ptr;
+    ViewType m_viewType;
+    int m_bottomRightRadius;
+    int m_topLeftRadius;
+    int m_bottomLeftRadius;
+    int m_topRightRadius;
+    KLabel *m_pMainLabel;
+    KLabel *m_pSubLabel;
+    QColor m_bkgColor;
+    QColor m_mixColor;
+    QColor m_borderColor;
+    QColor m_titleColor;
+};
+
+KIntroWidgetPrivate::KIntroWidgetPrivate(KIntroWidget *parent)
+    :q_ptr(parent)
+    ,m_viewType(ListView)
+    ,m_bottomLeftRadius(6)
+    ,m_bottomRightRadius(6)
+    ,m_topLeftRadius(6)
+    ,m_topRightRadius(6)
+{
+    Q_Q(KIntroWidget);
+    m_pMainLabel = new KLabel();
+    QFont font = q->font();
+    font.setBold(true);
+    m_pMainLabel->setFont(font);
+    m_pSubLabel = new KLabel();
+    QPalette palette;
+    palette.setColor(QPalette::WindowText,QColor(140, 140, 140));
+    m_pSubLabel->setPalette(palette);
+    m_titleColor = q->palette().highlight().color();
+}
+
+void KIntroWidgetPrivate::changeTheme()
+{
+    Q_Q(KIntroWidget);
+    initThemeStyle();
+    m_bkgColor = q->palette().toolTipBase().color();
+    m_borderColor = q->palette().toolTipBase().color();
+    m_borderColor.setAlphaF(0.08);
+    if(ThemeController::themeMode() == LightTheme)
+        m_mixColor = Qt::black;
+    else
+        m_mixColor = Qt::white;
+    q->update();
+}
+
+KIntroWidget::KIntroWidget(QWidget *parent)
+    :QWidget(parent)
+    ,d_ptr(new KIntroWidgetPrivate(this))
+{
+    Q_D(KIntroWidget);
+    setContentsMargins(22,4,16,4);
+    QVBoxLayout *vlayout = new QVBoxLayout(this);
+    vlayout->setSpacing(0);
+    vlayout->addWidget(d->m_pMainLabel);
+//    vlayout->addSpacing(4);
+    vlayout->addWidget(d->m_pSubLabel);
+    installEventFilter(this);
+//    setFixedSize(rect().width(),74);
+    d->m_pMainLabel->setAlignment(Qt::AlignLeft);
+    d->m_pSubLabel->setAlignment(Qt::AlignLeft);
+    d->changeTheme();
+    connect(d->m_gsetting,&QGSettings::changed,this,[=]{
+        d->changeTheme();
+    });
+}
+
+void KIntroWidget::setViewType(ViewType type)
+{
+    Q_D(KIntroWidget);
+    d->m_viewType = type;
+//    if(d->m_viewType == ListView)
+//        setFixedSize(rect().width(),74);
+//    else
+//        setFixedSize(218,200);
+}
+
+void KIntroWidget::setMainLabel(QString str)
+{
+    Q_D(KIntroWidget);
+    d->m_pMainLabel->setText(str);
+}
+
+void KIntroWidget::setSubLabel(QString str)
+{
+    Q_D(KIntroWidget);
+    d->m_pSubLabel->setText(str);
+}
+
+void KIntroWidget::setBorderRadius(int radius)
+{
+    Q_D(KIntroWidget);
+    d->m_bottomRightRadius = radius;
+    d->m_topLeftRadius = radius;
+    d->m_bottomLeftRadius = radius;
+    d->m_topRightRadius = radius;
+}
+
+void KIntroWidget::setBorderRadius(int bottomLeft, int topLeft, int topRight, int bottomRight)
+{
+    Q_D(KIntroWidget);
+    d->m_bottomRightRadius = bottomRight;
+    d->m_topLeftRadius = topLeft;
+    d->m_bottomLeftRadius = bottomLeft;
+    d->m_topRightRadius = topRight;
+}
+
+void KIntroWidget::setTitleColor(QColor color)
+{
+    Q_D(KIntroWidget);
+    d->m_titleColor = color;
+}
+
+void KIntroWidget::paintEvent(QPaintEvent *event)
+{
+    Q_D(KIntroWidget);
+    QPainter painter(this);
+    painter.setRenderHint(QPainter::Antialiasing);
+    painter.setRenderHint(QPainter::SmoothPixmapTransform);
+    painter.setRenderHint(QPainter::HighQualityAntialiasing);
+    painter.setPen(Qt::NoPen);
+    QPainterPath path;
+    QPainterPath path1;
+    QPainterPath path2;
+    QRect drawRect = this->rect();
+    path.moveTo(drawRect.topLeft() + QPoint(d->m_topLeftRadius , 0));
+    path.lineTo(drawRect.topRight() - QPoint(d->m_topRightRadius , 0));
+    path.quadTo(drawRect.topRight() , drawRect.topRight() + QPoint(0 , d->m_topRightRadius));
+    path.lineTo(drawRect.bottomRight() - QPoint(0 , d->m_bottomRightRadius ));
+    path.quadTo(drawRect.bottomRight() , drawRect.bottomRight() - QPoint(d->m_bottomRightRadius , 0));
+    path.lineTo(drawRect.bottomLeft() + QPoint(d->m_bottomLeftRadius , 0));
+    path.quadTo(drawRect.bottomLeft() , drawRect.bottomLeft() - QPoint(0 , d->m_bottomLeftRadius));
+    path.lineTo(drawRect.topLeft() + QPoint(0 , d->m_topLeftRadius));
+    path.quadTo(drawRect.topLeft() , drawRect.topLeft() + QPoint(d->m_topLeftRadius , 0));
+
+    switch (d->m_viewType) {
+    case ViewType::IconView:
+        {
+//            d->m_pMainLabel->setAlignment(Qt::AlignCenter);
+//            d->m_pSubLabel->setAlignment(Qt::AlignCenter);
+            d->m_pMainLabel->setWordWrap(true);
+            d->m_pSubLabel->setWordWrap(true);
+            path1.moveTo(drawRect.topLeft() + QPoint(d->m_topLeftRadius , 0));
+            path1.lineTo(drawRect.topRight() - QPoint(d->m_topRightRadius , 0));
+            path1.quadTo(drawRect.topRight() , drawRect.topRight() + QPoint(0 , d->m_topRightRadius));
+            path1.lineTo(drawRect.topLeft() + QPoint(0 , d->m_topLeftRadius));
+            path1.quadTo(drawRect.topLeft() , drawRect.topLeft() + QPoint(d->m_topLeftRadius , 0));
+
+            path2.moveTo(drawRect.topLeft() + QPoint(0 , d->m_topLeftRadius));
+            path2.lineTo(drawRect.bottomLeft() - QPoint(0 , d->m_bottomLeftRadius));
+            path2.quadTo(drawRect.bottomLeft() , drawRect.bottomLeft() + QPoint(d->m_bottomLeftRadius , 0));
+            path2.lineTo(drawRect.bottomRight() - QPoint(d->m_bottomRightRadius , 0));
+            path2.quadTo(drawRect.bottomRight() , drawRect.bottomRight() - QPoint(0 , d->m_bottomRightRadius));
+            path2.lineTo(drawRect.topRight() + QPoint(0 , d->m_topRightRadius));
+            path2.lineTo(drawRect.topLeft() + QPoint(0 , d->m_topLeftRadius));
+        }
+        break;
+    case ViewType::ListView:
+        {
+
+            d->m_pMainLabel->setWordWrap(false);
+            d->m_pSubLabel->setWordWrap(false);
+            path1.moveTo(drawRect.topLeft() + QPoint(d->m_topLeftRadius , 0));
+            path1.lineTo(drawRect.bottomLeft() + QPoint(d->m_bottomLeftRadius , 0));
+            path1.quadTo(drawRect.bottomLeft() , drawRect.bottomLeft() - QPoint(0 , d->m_bottomLeftRadius));
+            path1.lineTo(drawRect.topLeft() + QPoint(0 , d->m_topLeftRadius ));
+            path1.quadTo(drawRect.topLeft(), drawRect.topLeft() + QPoint(d->m_topLeftRadius , 0));
+
+            path2.moveTo(drawRect.topLeft() + QPoint(d->m_topLeftRadius , 0));
+            path2.lineTo(drawRect.topRight() - QPoint(d->m_topLeftRadius , 0));
+            path2.quadTo(drawRect.topRight() , drawRect.topRight() + QPoint(0 , d->m_topRightRadius));
+            path2.lineTo(drawRect.bottomRight() - QPoint(0 , d->m_bottomRightRadius));
+            path2.quadTo(drawRect.bottomRight() , drawRect.bottomRight() - QPoint(d->m_bottomRightRadius , 0));
+            path2.lineTo(drawRect.bottomLeft() + QPoint(d->m_bottomLeftRadius , 0));
+            path2.lineTo(drawRect.topLeft() + QPoint(d->m_topLeftRadius , 0));
+
+        }
+        break;
+    default:
+        break;
+    }
+    painter.setPen(d->m_borderColor);
+    painter.drawPath(path);
+
+    painter.setPen(Qt::NoPen);
+    painter.setBrush(d->m_titleColor);
+    painter.drawPath(path1);
+    painter.setBrush(d->m_bkgColor);
+    painter.drawPath(path2);
+
+}
+
+bool KIntroWidget::eventFilter(QObject *watched, QEvent *event)
+{
+    Q_D(KIntroWidget);
+    if(watched == this)
+    {
+
+        switch (event->type()) {
+        case QEvent::Enter:
+            d->m_bkgColor = ThemeController::mixColor(palette().toolTipBase().color(),d->m_mixColor,0.05);
+            update();
+            break;
+        case QEvent::Leave:
+            d->m_bkgColor = palette().toolTipBase().color();
+            update();
+            break;
+        case QEvent::MouseButtonPress:
+            d->m_bkgColor = ThemeController::mixColor(palette().toolTipBase().color(),d->m_mixColor,0.1);
+            update();
+            break;
+        case QEvent::MouseButtonRelease:
+            d->m_bkgColor = ThemeController::mixColor(palette().toolTipBase().color(),d->m_mixColor,0.05);
+            update();
+            break;
+        default:
+            break;
+        }
+    }
+    return QWidget::eventFilter(watched,event);
+}
+
+QSize KIntroWidget::sizeHint() const
+{
+    Q_D(const KIntroWidget);
+    return QWidget::sizeHint();
+}
+
+void KIntroWidget::mousePressEvent(QMouseEvent *event)
+{
+    Q_D(KIntroWidget);
+    if(event->button() == Qt::MouseButton::RightButton)
+    {
+        emit rightClick(event->globalPos());
+    }
+    return QWidget::mousePressEvent(event);
+}
+
+void KIntroWidget::mouseReleaseEvent(QMouseEvent *event)
+{
+    Q_D(KIntroWidget);
+    return QWidget::mouseReleaseEvent(event);
+}
+
+}
+
+#include "kintrowidget.moc"
+#include "moc_kintrowidget.cpp"
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kintrowidget.h libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kintrowidget.h
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kintrowidget.h	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kintrowidget.h	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,104 @@
+/*
+ * libkysdk-qtwidgets's Library
+ *
+ * Copyright (C) 2023, KylinSoft Co., Ltd.
+ *
+ * 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 3 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 General Public License
+ * along with this library.  If not, see <https://www.gnu.org/licenses/>.
+ *
+ * Authors: Zhenyu Wang <wangzhenyu@kylinos.cn>
+ *
+ */
+
+#ifndef KINTROWIDGET_H
+#define KINTROWIDGET_H
+
+#include "gui_g.h"
+#include <QWidget>
+
+namespace kdk {
+
+enum ViewType{
+    IconView,
+    ListView
+};
+
+/**
+ * @defgroup FormModule
+ * @since 2.5
+ */
+class KIntroWidgetPrivate;
+
+class GUI_EXPORT KIntroWidget :public QWidget
+{
+    Q_OBJECT
+public:
+    KIntroWidget(QWidget *parent =nullptr);
+
+    /**
+     * @brief 设置视图样式
+     * @param type
+     */
+    void setViewType(ViewType type);
+
+    /**
+     * @brief 设置主文本
+     * @param str
+     */
+    void setMainLabel(QString str);
+
+    /**
+     * @brief 设置次级文本
+     * @param str
+     */
+    void setSubLabel(QString str);
+
+    /**
+     * @brief 设置圆角
+     * @param radius
+     */
+    void setBorderRadius(int radius);
+
+    /**
+     * @brief 设置圆角
+     * @param bottomLeft
+     * @param topLeft
+     * @param topRight
+     * @param bottomRight
+     */
+    void setBorderRadius(int bottomLeft,int topLeft,int topRight,int bottomRight);
+
+    /**
+     * @brief 设置标题颜色
+     * @param color
+     */
+    void setTitleColor(QColor color);
+
+Q_SIGNALS:
+    void rightClick(QPoint point);
+
+protected:
+    void paintEvent(QPaintEvent* event);
+    bool eventFilter(QObject *watched, QEvent *event);
+    QSize sizeHint() const override;
+    void mousePressEvent(QMouseEvent *event);
+    void mouseReleaseEvent(QMouseEvent *event);
+
+private:
+    Q_DECLARE_PRIVATE(KIntroWidget)
+    KIntroWidgetPrivate *const d_ptr;
+};
+
+}
+
+#endif // KINTROWIDGET_H
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/klabel.cpp libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/klabel.cpp
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/klabel.cpp	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/klabel.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,467 @@
+/*
+ * libkysdk-qtwidgets's Library
+ *
+ * Copyright (C) 2023, KylinSoft Co., Ltd.
+ *
+ * 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 3 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 General Public License
+ * along with this library.  If not, see <https://www.gnu.org/licenses/>.
+ *
+ * Authors: Zhenyu Wang <wangzhenyu@kylinos.cn>
+ *
+ */
+
+#include "klabel.h"
+#include "themeController.h"
+#include <QPainter>
+#include <QRect>
+#include <QPainterPath>
+#include <QDebug>
+#include <QApplication>
+
+namespace kdk {
+
+static const int spacing = 4;
+class KLabelPrivate :public QObject, public ThemeController
+{
+    Q_OBJECT
+    Q_DECLARE_PUBLIC(KLabel)
+public:
+    KLabelPrivate(KLabel*parent);
+
+protected:
+    void changeTheme();
+private:
+    KLabel *q_ptr;
+    KLabelType m_labelType;
+    QPixmap m_pixmap;
+    QString m_text;
+    QColor m_backgroundColor;
+    bool m_dataHightColorFlag;
+    bool m_isBackgroundFlag;
+    int m_topLeftRadius;
+    int m_topRightRadius;
+    int m_bottomLeftRadius;
+    int m_bottomRightRadius;
+    int diffPointSize;
+    bool m_isHighlightBackgroundFlag;
+    bool m_wordWrap;
+    bool m_isFontColor;
+    QColor m_fontColor;
+};
+
+KLabel::KLabel(QWidget *parent):
+    QLabel(parent),
+    d_ptr(new KLabelPrivate(this))
+{
+    Q_D(KLabel);
+    int pointSize = QApplication::font().pointSize();
+    connect(d->m_gsetting,&QGSettings::changed,this,[=]{
+        d->changeTheme();
+        int now = this->font().pointSize();
+        if(d->diffPointSize == 0)
+            d->diffPointSize = now - pointSize;
+        QFont font = this->font();
+        font.setPointSize(d->diffPointSize + QApplication::font().pointSize());
+        setFont(font);
+    });
+}
+
+void KLabel::setLabelType(KLabelType type)
+{
+    Q_D(KLabel);
+    d->m_labelType = type;
+}
+
+void KLabel::setDataHightColor(bool flag)
+{
+    Q_D(KLabel);
+    d->m_dataHightColorFlag =flag;
+}
+
+void KLabel::setPixmap(const QPixmap &pixmap)
+{
+    Q_D(KLabel);
+    d->m_pixmap = pixmap;
+}
+
+const QPixmap *KLabel::pixmap() const
+{
+    Q_D(const KLabel);
+    return &d->m_pixmap;
+}
+
+void KLabel::setText(const QString &str)
+{
+    Q_D(KLabel);
+    QLabel::setText(str);
+}
+
+QString KLabel::text()
+{
+    Q_D(KLabel);
+    return QLabel::text();
+}
+
+void KLabel::setBackgroundColor(bool flag, QColor color)
+{
+    Q_D(KLabel);
+    if(d->m_isHighlightBackgroundFlag)
+        d->m_isHighlightBackgroundFlag = false;
+    d->m_isBackgroundFlag = flag;
+    d->m_backgroundColor = color;
+    update();
+}
+
+void KLabel::setHighlightBackground(bool flag)
+{
+    Q_D(KLabel);
+    if(d->m_isBackgroundFlag)
+        d->m_isBackgroundFlag = false;
+    d->m_isHighlightBackgroundFlag = flag;
+    update();
+}
+
+void KLabel::setBorderRadius(int bottomLeft, int topLeft, int topRight, int bottomRight)
+{
+    Q_D(KLabel);
+    d->m_bottomRightRadius = bottomRight;
+    d->m_topLeftRadius = topLeft;
+    d->m_bottomLeftRadius = bottomLeft;
+    d->m_topRightRadius = topRight;
+}
+
+void KLabel::setBorderRadius(int radius)
+{
+    Q_D(KLabel);
+    d->m_bottomRightRadius = radius;
+    d->m_topLeftRadius = radius;
+    d->m_bottomLeftRadius = radius;
+    d->m_topRightRadius = radius;
+}
+
+void KLabel::setWordWrap(bool flag)
+{
+    Q_D(KLabel);
+    d->m_wordWrap =flag;
+}
+
+bool KLabel::wordWrap()
+{
+    Q_D(KLabel);
+    return d->m_wordWrap ;
+}
+
+void KLabel::setFontColor(QColor color)
+{
+    Q_D(KLabel);
+    d->m_fontColor = color;
+    d->m_isFontColor = true;
+}
+
+void KLabel::paintEvent(QPaintEvent *event)
+{
+    Q_D(KLabel);
+    QPainter painter(this);
+    painter.setRenderHint(QPainter::SmoothPixmapTransform);
+    painter.setRenderHint(QPainter::Antialiasing);
+    painter.setRenderHint(QPainter::HighQualityAntialiasing);
+    QColor bkgColor;
+    QRect drawRect =rect();
+    QRect iconRect;
+    QRect textRect;
+
+    painter.setPen(Qt::NoPen);
+    QString str = text();
+
+    //绘制背景
+    QPainterPath path;
+    path.moveTo(drawRect.topRight() - QPoint(d->m_topRightRadius , 0) ); //右上
+    path.lineTo(drawRect.topLeft() + QPointF(d->m_topLeftRadius , 0)); //上方线
+    path.quadTo(drawRect.topLeft(), drawRect.topLeft() + QPointF(0 , d->m_topLeftRadius)); //圆角
+    path.lineTo(drawRect.bottomLeft() +  QPointF(0,- d->m_bottomLeftRadius)); //左方线
+    path.quadTo(drawRect.bottomLeft(), drawRect.bottomLeft() + QPointF(d->m_bottomLeftRadius , 0));//圆角
+    path.lineTo(drawRect.bottomRight() - QPointF(d->m_bottomRightRadius , 0));//下方线
+    path.quadTo(drawRect.bottomRight(), drawRect.bottomRight() + QPointF(0, - d->m_bottomRightRadius));//圆角
+    path.lineTo(drawRect.topRight() + QPointF(0, d->m_topRightRadius));//右方线
+    path.quadTo(drawRect.topRight() , drawRect.topRight() - QPointF(d->m_topRightRadius, 0)); // 圆角
+
+    switch (d->m_labelType) {
+    case DataType:
+        bkgColor = palette().highlight().color();
+        bkgColor.setAlphaF(0.15);
+        if(d->m_isBackgroundFlag)
+        {
+            painter.setBrush(d->m_backgroundColor);
+            painter.setPen(Qt::NoPen);
+        }
+        else
+        {
+            painter.setBrush(bkgColor);
+            painter.setPen(Qt::NoPen);
+        }
+        painter.drawPath(path);
+        break;
+    case NormalType:
+        if(d->m_isBackgroundFlag)
+            painter.setBrush(d->m_backgroundColor);
+        else if(d->m_isHighlightBackgroundFlag)
+            painter.setBrush(palette().highlight().color());
+        else
+            painter.setBrush(Qt::NoBrush);
+        painter.setPen(Qt::NoPen);
+        painter.drawPath(path);
+        break;
+    case CircleType:
+        if(d->m_isBackgroundFlag)
+            painter.setBrush(d->m_backgroundColor);
+        else if(d->m_isHighlightBackgroundFlag)
+                painter.setBrush(palette().highlight().color());
+        else
+            painter.setBrush(palette().button().color());
+        painter.setPen(Qt::NoPen);
+        painter.drawEllipse(rect());
+        break;
+    default:
+        break;
+    }
+
+    //绘制图标和文字
+    if(!wordWrap())
+    {
+        int drawLength ;
+        if(!text().isEmpty() && !d->m_pixmap.isNull())
+            drawLength = d->m_pixmap.width() + spacing +fontMetrics().width(text());
+        else if(!text().isEmpty() && d->m_pixmap.isNull())
+            drawLength = fontMetrics().width(text());
+        else if(text().isEmpty() && !d->m_pixmap.isNull())
+            drawLength = d->m_pixmap.width();
+
+        if(!text().isEmpty() && !d->m_pixmap.isNull())
+        {
+
+            int drawLength = d->m_pixmap.width() + spacing +fontMetrics().width(text());
+            if(drawRect.width() > drawLength )
+            {
+                iconRect = QRect(/*drawRect.center().x() - drawLength/2*/drawRect.x(),
+                                 drawRect.center().y() - d->m_pixmap.height()/2,
+                                 d->m_pixmap.width(),
+                                 d->m_pixmap.height());
+                textRect = QRect(iconRect.right() + spacing,
+                                 drawRect.center().y() - fontMetrics().height()/2,
+                                 fontMetrics().width(text()) + 1,
+                                 fontMetrics().height());
+                setToolTip("");
+
+            }
+            else
+            {
+                iconRect = QRect(/*drawRect.x()*/drawRect.x(),
+                                 drawRect.center().y() - d->m_pixmap.height()/2,
+                                 d->m_pixmap.width(),
+                                 d->m_pixmap.height());
+                textRect = QRect(iconRect.right() + spacing,
+                                 drawRect.center().y() - fontMetrics().height()/2,
+                                 drawRect.width() - spacing - iconRect.width(),
+                                 fontMetrics().height());
+                setToolTip(str);
+                str = fontMetrics().elidedText(str,Qt::ElideRight,textRect.width());
+            }
+        }
+        else
+        {
+            if(text().isEmpty())
+            {
+                iconRect = QRect(drawRect.x(),
+                                 drawRect.center().y() - d->m_pixmap.height()/2,
+                                 d->m_pixmap.width(),
+                                 d->m_pixmap.height());
+            }
+            else
+            {
+                int drawLength =fontMetrics().width(text());
+                if(drawRect.width() > drawLength )
+                {
+                    textRect = QRect(/*drawRect.center().x() - drawLength/2*/drawRect.x(),
+                                     drawRect.center().y() - fontMetrics().height()/2,
+                                     fontMetrics().width(text()) + 2,
+                                     fontMetrics().height());
+                    setToolTip("");
+                }
+                else
+                {
+                    textRect = QRect(drawRect.x(),
+                                     drawRect.center().y() - fontMetrics().height()/2,
+                                     drawRect.width(),
+                                     fontMetrics().height());
+                    setToolTip(str);
+                    str = fontMetrics().elidedText(str,Qt::ElideRight,textRect.width());
+                }
+            }
+        }
+
+        if(d->m_dataHightColorFlag)
+        {
+            d->m_pixmap = ThemeController::drawColoredPixmap(d->m_pixmap,palette().highlight().color());
+            if(d->m_isFontColor)
+                painter.setPen(d->m_fontColor);
+            else
+                painter.setPen(palette().highlight().color());
+        }
+        else if(d->m_isBackgroundFlag || d->m_isHighlightBackgroundFlag)
+        {
+            d->m_pixmap = ThemeController::drawSymbolicColoredPixmap(d->m_pixmap);
+            if(d->m_isFontColor)
+                painter.setPen(d->m_fontColor);
+            else
+                painter.setPen(palette().windowText().color());
+        }
+        else
+        {
+            if(d->m_isFontColor)
+                painter.setPen(d->m_fontColor);
+            else
+                painter.setPen(palette().windowText().color());
+            if(ThemeController::isPixmapPureColor(d->m_pixmap))
+            {
+                if(ThemeController::themeMode() == DarkTheme)
+                    d->m_pixmap = ThemeController::drawColoredPixmap(d->m_pixmap,Qt::white);
+                else
+                    d->m_pixmap = ThemeController::drawColoredPixmap(d->m_pixmap,palette().windowText().color());
+            }
+        }
+
+        if(alignment() == Qt::AlignCenter)
+        {
+            if(!text().isEmpty() && !d->m_pixmap.isNull())
+            {
+                iconRect.moveLeft(drawRect.center().x() - drawLength/2);
+                textRect.moveLeft(iconRect.right()  + spacing);
+            }
+            else
+            {
+                if(text().isEmpty())
+                    iconRect.moveLeft(drawRect.center().x() - drawLength/2);
+                else
+                    textRect.moveLeft(drawRect.center().x() - drawLength/2);
+            }
+        }
+        painter.drawText(textRect,str);
+        painter.drawPixmap(iconRect,d->m_pixmap);
+    }
+    else
+    {
+//        QString text = this->text();
+        QFontMetrics metrics(this->font());
+
+        int lineHeight = metrics.height();
+        int xPos = drawRect.left(); // 起始x位置
+        int yPos = lineHeight; // 起始y位置
+        while (!str.isEmpty())
+        {
+            QString line;
+            int widthUsed = 0;
+            if(rect().height() > (yPos + lineHeight))
+            {
+                QChar ch;
+                for (int i = 0; i < str.length(); ++i)
+                {
+                    ch = str[i];
+                    int charWidth = metrics.horizontalAdvance(ch);
+                    if(ch == '\n')
+                    {
+                        str.remove(ch);
+                        break;
+                    }
+                    if (widthUsed + charWidth > this->width() )
+                    {
+                        break; // 当前行已满,开始新行
+                    }
+
+                    line += ch;
+                    widthUsed += charWidth;
+                }
+                if(d->m_dataHightColorFlag)
+                    painter.setPen(palette().highlight().color());
+                else
+                {
+                    if(d->m_isFontColor)
+                        painter.setPen(d->m_fontColor);
+                    else
+                        painter.setPen(palette().windowText().color());
+                }
+                painter.drawText(xPos,yPos,line);
+                yPos += lineHeight;
+            }
+            else
+            {
+                line = fontMetrics().elidedText(str,Qt::ElideRight,rect().width());
+                if(d->m_dataHightColorFlag)
+                    painter.setPen(palette().highlight().color());
+                else
+                {
+                    if(d->m_isFontColor)
+                        painter.setPen(d->m_fontColor);
+                    else
+                        painter.setPen(palette().windowText().color());
+                }
+                painter.drawText(xPos,yPos,line);
+                break;
+            }
+            // 准备下一行
+            str = str.mid(line.length());
+        }
+    }
+}
+
+void KLabel::resizeEvent(QResizeEvent *event)
+{
+    Q_D(KLabel);
+    QLabel::resizeEvent(event);
+}
+
+QSize KLabel::sizeHint() const
+{
+    Q_D(const KLabel);
+    return QLabel::sizeHint();
+}
+
+KLabelPrivate::KLabelPrivate(KLabel *parent)
+    :q_ptr(parent),
+    m_isBackgroundFlag(false),
+    m_dataHightColorFlag(false),
+    m_bottomRightRadius(6),
+    m_topLeftRadius(6),
+    m_bottomLeftRadius(6),
+    m_topRightRadius(6),
+    diffPointSize(0),
+    m_isHighlightBackgroundFlag(false),
+    m_wordWrap(false),
+    m_isFontColor(false)
+{
+    Q_Q(KLabel);
+    m_labelType = NormalType;
+//    m_pixmap = new QPixmap();
+}
+
+void KLabelPrivate::changeTheme()
+{
+    Q_Q(KLabel);
+    initThemeStyle();
+    q->update();
+}
+
+}
+
+
+#include "klabel.moc"
+#include "moc_klabel.cpp"
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/klabel.h libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/klabel.h
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/klabel.h	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/klabel.h	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,147 @@
+/*
+ * libkysdk-qtwidgets's Library
+ *
+ * Copyright (C) 2023, KylinSoft Co., Ltd.
+ *
+ * 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 3 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 General Public License
+ * along with this library.  If not, see <https://www.gnu.org/licenses/>.
+ *
+ * Authors: Zhenyu Wang <wangzhenyu@kylinos.cn>
+ *
+ */
+
+#ifndef KLABEL_H
+#define KLABEL_H
+
+#include <QLabel>
+#include "gui_g.h"
+
+namespace kdk {
+
+/**
+ * @defgroup Label Module
+ */
+
+enum KLabelType{
+    NormalType,
+    DataType,
+    CircleType
+};
+
+class KLabelPrivate;
+
+/**
+ * @brief 继承qlabel
+ * @since 2.4
+ */
+class GUI_EXPORT KLabel :public QLabel
+{
+    Q_OBJECT
+public:
+    KLabel(QWidget *parent = nullptr);
+
+    /**
+     * @brief 设置label类型,NormalType和IconAndTextType
+     * @param type
+     */
+    void setLabelType(KLabelType type = KLabelType::DataType);
+
+    /**
+     * @brief 设置是否启用文本/图标高亮色
+     * @param flag
+     */
+    void setDataHightColor(bool flag);
+
+    /**
+     * @brief 设置图标pixmap
+     * @param pixmap
+     */
+    void setPixmap(const QPixmap &pixmap);
+
+    /**
+     * @brief 获取图标
+     * @return
+     */
+    const QPixmap *	pixmap() const;
+
+    /**
+     * @brief 设置文本
+     * @since 2.5
+     * @param str
+     */
+    void setText(const QString &str);
+
+    /**
+     * @brief 获取文本
+     * @since 2.5
+     * @return
+     */
+    QString text();
+
+    /**
+     * @brief 设置背景颜色
+     * @param flag
+     */
+    void setBackgroundColor(bool flag ,QColor color = Qt::white );
+
+    /**
+     * @brief 设置是否启用背景高亮色
+     * @since 2.5
+     * @param flag
+     */
+    void setHighlightBackground(bool flag);
+
+    /**
+     * @brief 设置圆角
+     * @param bottomLeft
+     * @param topLeft
+     * @param topRight
+     * @param bottomRight
+     */
+    void setBorderRadius(int bottomLeft,int topLeft,int topRight,int bottomRight);
+
+    /**
+     * @brief 设置圆角
+     * @param radius
+     */
+    void setBorderRadius(int radius);
+
+    /**
+     * @brief 设置是否启用换行
+     * @since 2.5
+     * @param flag
+     */
+    void setWordWrap(bool flag);
+
+    /**
+     * @brief 获取是否启用换行
+     * @since 2.5
+     * @return
+     */
+    bool wordWrap();
+
+    void setFontColor(QColor color);
+
+protected:
+    void paintEvent(QPaintEvent* event);
+    QSize sizeHint() const;
+    void resizeEvent(QResizeEvent *event);
+
+private:
+    Q_DECLARE_PRIVATE(KLabel)
+    KLabelPrivate* const d_ptr;
+
+};
+
+}
+#endif // KLABEL_H
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/klineedit.cpp libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/klineedit.cpp
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/klineedit.cpp	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/klineedit.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,236 @@
+/*
+ * libkysdk-qtwidgets's Library
+ *
+ * Copyright (C) 2023, KylinSoft Co., Ltd.
+ *
+ * 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 3 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 General Public License
+ * along with this library.  If not, see <https://www.gnu.org/licenses/>.
+ *
+ * Authors: Zhenyu Wang <wangzhenyu@kylinos.cn>
+ *
+ */
+
+#include "klineedit.h"
+#include "themeController.h"
+#include <QBoxLayout>
+#include <QPainter>
+#include <QStyleOptionButton>
+#include <QEvent>
+#include <QDebug>
+#include <QMouseEvent>
+
+namespace kdk {
+
+class Q_DECL_HIDDEN PushButton : public QPushButton , public ThemeController
+{
+    Q_OBJECT
+public:
+    PushButton(QWidget *parent = nullptr);
+
+    void setFocusStyle(bool flag);
+protected:
+    void paintEvent(QPaintEvent *event);
+    void mouseReleaseEvent(QMouseEvent *event);
+    void mousePressEvent(QMouseEvent *event);
+    void leaveEvent(QEvent *e);
+    void enterEvent(QEvent *e);
+
+private:
+    bool m_pressEnter;
+    bool m_mouseEnter;
+    bool m_foucusStyle;
+};
+
+class Q_DECL_HIDDEN KLineEditPrivate : public QObject ,public ThemeController
+{
+    Q_OBJECT
+    Q_DECLARE_PUBLIC(KLineEdit)
+public:
+    KLineEditPrivate(KLineEdit *parent);
+    void adjustLayout();
+
+protected:
+    void changeTheme() override;
+
+private:
+    KLineEdit *q_ptr;
+    QWidget *m_pWidget;
+    PushButton *m_pPushButton;
+};
+
+KLineEdit::KLineEdit(QWidget *parent)
+    :QLineEdit(parent)
+    ,d_ptr(new KLineEditPrivate(this))
+{
+    installEventFilter(this);
+    setFocusPolicy(Qt::StrongFocus);
+    clearFocus();
+    connect(this,&KLineEdit::returnPressed,this,&KLineEdit::clearFocus);
+}
+
+QPushButton *KLineEdit::pushbutton()
+{
+    Q_D(KLineEdit);
+    return d->m_pPushButton;
+}
+
+void KLineEdit::resizeEvent(QResizeEvent *event)
+{
+    Q_D(KLineEdit);
+    QLineEdit::resizeEvent(event);
+    d->adjustLayout();
+}
+
+bool KLineEdit::eventFilter(QObject *watched, QEvent *event)
+{
+    Q_D(KLineEdit);
+    if(watched == this)
+    {
+        switch (event->type()) {
+        case QEvent::FocusIn:
+            d->m_pPushButton->setFocusStyle(true);
+            break;
+        case QEvent::FocusOut:
+            d->m_pPushButton->setFocusStyle(false);
+            break;
+        default:
+            break;
+        }
+    }
+    return QLineEdit::eventFilter(watched,event);
+}
+
+void PushButton::mouseReleaseEvent(QMouseEvent *event)
+{
+    m_pressEnter = false;
+    m_mouseEnter = true;
+    QPushButton::mouseReleaseEvent(event);
+}
+
+void PushButton::mousePressEvent(QMouseEvent *event)
+{
+    m_pressEnter = true;
+    m_mouseEnter = false;
+    QPushButton::mousePressEvent(event);
+}
+
+void PushButton::leaveEvent(QEvent *e)
+{
+    m_mouseEnter = false;
+    QPushButton::leaveEvent(e);
+}
+
+void PushButton::enterEvent(QEvent *e)
+{
+    m_mouseEnter = true;
+    QPushButton::enterEvent(e);
+}
+
+KLineEditPrivate::KLineEditPrivate(KLineEdit *parent)
+    :q_ptr(parent)
+{
+    Q_Q(KLineEdit);
+    m_pPushButton = new PushButton();
+    m_pPushButton->setFixedSize(24,24);
+    m_pWidget = new QWidget(q);
+    QHBoxLayout *hlayout = new QHBoxLayout(m_pWidget);
+    hlayout->setContentsMargins(0,0,0,0);
+    hlayout->addWidget(m_pPushButton);
+    connect(m_gsetting,&QGSettings::changed,this,[=]{
+        changeTheme();
+    });
+}
+
+void KLineEditPrivate::adjustLayout()
+{
+    Q_Q(KLineEdit);
+    int spacing = 5;
+    int width = spacing;
+    if(!m_pPushButton->isHidden())
+        width +=(spacing + m_pPushButton->width());
+    m_pWidget->setFixedSize(width,q->cursorRect().height());
+    m_pWidget->move(q->width()-m_pWidget->width(),(q->rect().height()-m_pWidget->height())/2);
+    q->setTextMargins(0,0,m_pWidget->width(),0);
+}
+
+void KLineEditPrivate::changeTheme()
+{
+    initThemeStyle();
+}
+
+PushButton::PushButton(QWidget *parent)
+{
+//    connect(m_ge)
+    m_pressEnter = false;
+    m_mouseEnter = false;
+    m_foucusStyle = false;
+}
+
+void PushButton::setFocusStyle(bool flag)
+{
+    m_foucusStyle =flag;
+    if(flag)
+        setFocusPolicy(Qt::NoFocus);
+    else
+        setFocusPolicy(Qt:: StrongFocus);
+}
+
+void PushButton::paintEvent(QPaintEvent *event)
+{
+    QStyleOptionButton option;
+    initStyleOption(&option);
+    QPainter p(this);
+    p.setRenderHint(QPainter::HighQualityAntialiasing);
+    p.setRenderHint(QPainter::Antialiasing);
+    p.setRenderHint(QPainter::TextAntialiasing);
+    p.setRenderHint(QPainter::SmoothPixmapTransform);
+    p.setPen(Qt::NoPen);
+    QPixmap pixmap = icon().pixmap(iconSize());
+
+    if(m_foucusStyle)
+    {
+        if(ThemeController::themeMode() == DarkTheme)
+            pixmap = ThemeController::drawSymbolicColoredPixmap(pixmap);
+        if(m_mouseEnter || m_pressEnter)
+        {
+            pixmap = ThemeController::drawSymbolicColoredPixmap(pixmap);
+            p.setBrush(palette().highlight().color());
+        }
+        else
+            p.setBrush(Qt::NoBrush);
+    }
+    else
+    {
+        if(ThemeController::themeMode() == DarkTheme)
+            pixmap = ThemeController::drawSymbolicColoredPixmap(pixmap);
+        if(m_mouseEnter)
+        {
+            p.setBrush(QColor(218, 218, 218));
+        }
+        else if(m_pressEnter)
+        {
+            p.setBrush(QColor(184, 184, 184));
+        }
+        else
+            p.setBrush(palette().button().color());
+    }
+    p.drawRoundedRect(rect(),6,6);
+
+    QRect iconRect((rect().width()-iconSize().width())/2,(rect().height()-iconSize().height())/2,iconSize().width(),iconSize().height());
+    p.drawPixmap(iconRect,pixmap);
+}
+
+}
+
+#include "klineedit.moc"
+#include "moc_klineedit.cpp"
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/klineedit.h libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/klineedit.h
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/klineedit.h	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/klineedit.h	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,60 @@
+/*
+ * libkysdk-qtwidgets's Library
+ *
+ * Copyright (C) 2023, KylinSoft Co., Ltd.
+ *
+ * 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 3 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 General Public License
+ * along with this library.  If not, see <https://www.gnu.org/licenses/>.
+ *
+ * Authors: Zhenyu Wang <wangzhenyu@kylinos.cn>
+ *
+ */
+
+#ifndef KLINEEDIT_H
+#define KLINEEDIT_H
+
+#include <QLineEdit>
+#include <QPushButton>
+#include "gui_g.h"
+
+namespace kdk {
+
+class KLineEditPrivate;
+
+/**
+ * @defgroup InputBoxModule
+ * @since 2.5
+ */
+
+class GUI_EXPORT KLineEdit : public QLineEdit
+{
+    Q_OBJECT
+public:
+    KLineEdit(QWidget *parent = nullptr);
+
+    /**
+     * @brief 获取按钮
+     * @return
+     */
+    QPushButton* pushbutton();
+
+protected:
+    void resizeEvent(QResizeEvent *event);
+    bool eventFilter(QObject *watched, QEvent *event);
+private:
+    Q_DECLARE_PRIVATE(KLineEdit)
+    KLineEditPrivate *const d_ptr;
+};
+
+}
+#endif // KLINEEDIT_H
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kloopplaypage.cpp libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kloopplaypage.cpp
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kloopplaypage.cpp	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kloopplaypage.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,409 @@
+/*
+ * libkysdk-qtwidgets's Library
+ *
+ * Copyright (C) 2023, KylinSoft Co., Ltd.
+ *
+ * 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 3 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 General Public License
+ * along with this library.  If not, see <https://www.gnu.org/licenses/>.
+ *
+ * Authors: Zhenyu Wang <wangzhenyu@kylinos.cn>
+ *
+ */
+
+#include "kloopplaypage.h"
+#include "themeController.h"
+#include <QMouseEvent>
+#include <QStackedLayout>
+#include <QBoxLayout>
+#include <QPainter>
+#include <QTimer>
+#include <QScrollArea>
+#include <QScrollBar>
+#include <QDebug>
+
+namespace kdk {
+
+class Q_DECL_HIDDEN CircleButton : public QPushButton
+{
+    Q_OBJECT
+public:
+    enum ButtonType{
+        CircleType,
+        NormalType
+    };
+
+    CircleButton(QWidget *parent = nullptr);
+
+    void setButtonType(ButtonType type);
+
+protected:
+    void paintEvent(QPaintEvent* event);
+
+private:
+    ButtonType m_type;
+};
+
+class Q_DECL_HIDDEN Widget : public QWidget
+{
+    Q_OBJECT
+public:
+    Widget(QWidget *parent = nullptr);
+
+Q_SIGNALS:
+    void leftClick();
+
+protected:
+    void mousePressEvent(QMouseEvent *event);
+    void paintEvent(QPaintEvent * event);
+};
+
+class Q_DECL_HIDDEN KLoopPlayPagePrivate : public QObject,public ThemeController
+{
+    Q_OBJECT
+    Q_DECLARE_PUBLIC(KLoopPlayPage)
+public:
+    KLoopPlayPagePrivate(KLoopPlayPage *parent);
+
+    void updateWidget(int i);
+    void updateButton();
+    void updateShowPosition();
+private:
+    KLoopPlayPage *q_ptr;
+    Widget *m_pWidget1;
+    Widget *m_pWidget2;
+    Widget *m_pWidget3;
+    QWidget *m_pScrollWidget;
+    QHBoxLayout *m_pWidgetLayout;
+    QHBoxLayout *m_pButtonLayout;
+    QVBoxLayout *m_pLayout;
+    QList<QWidget*> m_WidgetList;
+    CircleButton * m_pCircleButton;
+    QList<CircleButton*> m_ButtonList;
+    QScrollArea * m_pScrollArea;
+    int m_index;
+    int m_spacing;
+    int m_timer;
+    QTimer* m_pTimer;
+};
+
+KLoopPlayPagePrivate::KLoopPlayPagePrivate(KLoopPlayPage *parent)
+    :q_ptr(parent)
+    ,m_index(0)
+    ,m_spacing(24)
+    ,m_timer(3000)
+{
+    Q_Q(KLoopPlayPage);
+
+    m_pLayout = new QVBoxLayout(q);
+    m_pLayout->setSpacing(16);
+
+    m_pScrollWidget = new QWidget();
+    m_pScrollWidget->setContentsMargins(0,0,0,0);
+
+    m_pScrollArea = new QScrollArea(q);
+    m_pScrollArea->setFrameStyle(QFrame::NoFrame);
+    m_pScrollArea->setWidgetResizable(true);
+    m_pScrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
+    m_pScrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
+    m_pScrollArea->setWidget(m_pScrollWidget);
+
+    m_pWidgetLayout = new QHBoxLayout(m_pScrollWidget);
+    m_pWidgetLayout->setSpacing(0);
+
+    m_pButtonLayout = new QHBoxLayout(q);
+    m_pButtonLayout->setSpacing(6);
+
+    m_pLayout->addWidget(m_pScrollArea);
+    m_pLayout->addLayout(m_pButtonLayout);
+
+    m_pTimer = new QTimer(q);
+    m_pTimer->start(m_timer);
+    connect(m_pTimer, &QTimer::timeout, this, [=]{
+        q->setCurrentWidget(q->currentWidget()+1);
+    });
+}
+
+void KLoopPlayPagePrivate::updateWidget(int i)
+{
+    Q_Q(KLoopPlayPage);
+    if(m_WidgetList.count() < 3 )
+        return;
+
+    QLayoutItem *child;
+    while ((child = m_pWidgetLayout->takeAt(0)) != 0)
+    {
+        //删除Stretch(弹簧)等布局
+        if (child->spacerItem())
+        {
+            m_pWidgetLayout->removeItem(child);
+            continue;
+        }
+        //删除布局
+        m_pWidgetLayout->removeWidget(child->widget());
+        child->widget()->setParent(nullptr);
+        delete child;
+        child =nullptr;
+    }
+
+    int prev;
+    int next;
+    if(i == 0)
+    {
+        prev = m_WidgetList.count()-1;
+        next = i + 1;
+    }
+    else if(i == m_WidgetList.count()-1)
+    {
+        prev = i - 1;
+        next = 0;
+    }
+    else
+    {
+        prev = i - 1;
+        next = i + 1;
+    }
+
+    m_pWidget1 = new Widget();
+    m_pWidget2 = new Widget();
+    m_pWidget3 = new Widget();
+
+    m_pWidgetLayout->addWidget(m_pWidget1);
+    m_pWidgetLayout->addSpacing(m_spacing);
+    m_pWidgetLayout->addWidget(m_pWidget2);
+    m_pWidgetLayout->addSpacing(m_spacing);
+    m_pWidgetLayout->addWidget(m_pWidget3);
+    m_pWidgetLayout->setContentsMargins(8,8,8,18);
+
+    QHBoxLayout *w1layout= new QHBoxLayout(m_pWidget1);
+    w1layout->setContentsMargins(0,0,0,0);
+    w1layout->setSpacing(0);
+    w1layout->addWidget(m_WidgetList.at(prev));
+
+    QHBoxLayout *w2layout= new QHBoxLayout(m_pWidget2);
+    w2layout->setContentsMargins(0,0,0,0);
+    w2layout->setSpacing(0);
+    w2layout->addWidget(m_WidgetList.at(i));
+
+    QHBoxLayout *w3layout= new QHBoxLayout(m_pWidget3);
+    w3layout->setContentsMargins(0,0,0,0);
+    w3layout->setSpacing(0);
+    w3layout->addWidget(m_WidgetList.at(next));
+
+    updateShowPosition();
+
+    connect(m_pWidget1,&Widget::leftClick,q,[=]{
+        q->setCurrentWidget(prev);
+        m_pTimer->start(m_timer);
+       emit q->leftClick();
+    });
+    connect(m_pWidget2,&Widget::leftClick,q,[=]{
+       emit q->centerClick();
+    });
+    connect(m_pWidget3,&Widget::leftClick,q,[=]{
+       q->setCurrentWidget(next);
+       m_pTimer->start(m_timer);
+       emit q->rightClick();
+    });
+    updateButton();
+}
+
+void KLoopPlayPagePrivate::updateButton()
+{
+    Q_Q(KLoopPlayPage);
+    m_ButtonList.clear();
+    QLayoutItem *child;
+    while ((child = m_pButtonLayout->takeAt(0)) != 0)
+    {
+        //删除Stretch(弹簧)等布局
+        if (child->spacerItem())
+        {
+            m_pButtonLayout->removeItem(child);
+            continue;
+        }
+        //删除布局
+        m_pButtonLayout->removeWidget(child->widget());
+        child->widget()->setParent(nullptr);
+        delete child;
+        child =nullptr;
+    }
+    m_pButtonLayout->addStretch();
+    m_pButtonLayout->setSpacing(8);
+    for(int i = 0;i<m_WidgetList.count();i++)
+    {
+        CircleButton *circleButton = new CircleButton();
+        m_ButtonList.append(circleButton);
+        m_pCircleButton = new CircleButton();
+        if(i == q->currentWidget())
+        {
+            m_pCircleButton->setFixedSize(12,6);
+            m_pCircleButton->setButtonType(CircleButton::NormalType);
+        }
+        else
+        {
+            m_pCircleButton->setFixedSize(6,6);
+            m_pCircleButton->setButtonType(CircleButton::CircleType);
+        }
+        m_pButtonLayout->addWidget(m_pCircleButton);
+        connect(m_pCircleButton,&CircleButton::clicked,this,[=]{
+           q->setCurrentWidget(i);
+           m_pTimer->start(m_timer);
+        });
+    }
+    m_pButtonLayout->addStretch();
+}
+
+void KLoopPlayPagePrivate::updateShowPosition()
+{
+    Q_Q(KLoopPlayPage);
+    int viewportWidth = m_pScrollArea->viewport()->width();
+    int scrollValue = (m_pScrollWidget->width() - viewportWidth) / 2;
+    if (scrollValue < 0)
+        scrollValue = 0;
+    m_pScrollArea->horizontalScrollBar()->setValue(scrollValue);
+}
+
+KLoopPlayPage::KLoopPlayPage(QWidget *parent)
+    :QWidget(parent)
+    ,d_ptr(new KLoopPlayPagePrivate(this))
+{
+    Q_D(KLoopPlayPage);
+
+}
+
+void KLoopPlayPage::addWidget(QWidget *widget)
+{
+    Q_D(KLoopPlayPage);
+    if(!d->m_WidgetList.contains(widget))
+        d->m_WidgetList.append(widget);
+    d->updateWidget(d->m_index);
+}
+
+void KLoopPlayPage::removeWidget(QWidget *widget)
+{
+    Q_D(KLoopPlayPage);
+    if(d->m_WidgetList.contains(widget))
+        d->m_WidgetList.removeOne(widget);
+    d->updateWidget(d->m_index);
+}
+
+void KLoopPlayPage::setCurrentWidget(int index)
+{
+    Q_D(KLoopPlayPage);
+    if(index >= d->m_WidgetList.count())
+        d->m_index = 0;
+    else if(index < 0)
+        d->m_index = d->m_WidgetList.count()-1;
+    else
+        d->m_index = index;
+    d->updateWidget(d->m_index);
+}
+
+int KLoopPlayPage::currentWidget()
+{
+    Q_D(KLoopPlayPage);
+    return d->m_index;
+}
+
+void KLoopPlayPage::setWidgetSpacing(int spacing)
+{
+    Q_D(KLoopPlayPage);
+    d->m_spacing = spacing;
+}
+
+void KLoopPlayPage::setLoopTime(int time)
+{
+    Q_D(KLoopPlayPage);
+    d->m_pTimer->start(time);
+}
+
+void KLoopPlayPage::resizeEvent(QResizeEvent *event)
+{
+    Q_D(KLoopPlayPage);
+    QWidget::resizeEvent(event);
+    d->updateShowPosition();
+}
+
+void KLoopPlayPage::paintEvent(QPaintEvent *event)
+{
+    Q_D(KLoopPlayPage);
+    QWidget::paintEvent(event);
+}
+
+void KLoopPlayPage::showEvent(QShowEvent *event)
+{
+    Q_D(KLoopPlayPage);
+    QWidget::showEvent(event);
+    d->updateShowPosition();
+}
+
+Widget::Widget(QWidget *parent)
+{
+
+}
+
+void Widget::mousePressEvent(QMouseEvent *event)
+{
+    if(event->button() == Qt::MouseButton::LeftButton)
+    {
+        emit leftClick();
+    }
+    return QWidget::mousePressEvent(event);
+}
+
+void Widget::paintEvent(QPaintEvent *event)
+{
+    QPainter painter(this);
+    painter.setBrush(Qt::NoBrush);
+    painter.setPen(Qt::NoPen);
+    painter.drawRect(rect());
+}
+
+CircleButton::CircleButton(QWidget *parent)
+{
+    m_type = ButtonType::CircleType;
+}
+
+void CircleButton::setButtonType(CircleButton::ButtonType type)
+{
+    m_type = type;
+    update();
+}
+
+void CircleButton::paintEvent(QPaintEvent *event)
+{
+    QPainter painter(this);
+    painter.setRenderHint(QPainter::Antialiasing);
+    painter.setRenderHint(QPainter::SmoothPixmapTransform);
+    painter.setRenderHint(QPainter::HighQualityAntialiasing);
+    painter.setPen(Qt::NoPen);
+
+    QColor color(18, 18, 18);
+    color.setAlphaF(0.2);
+    painter.setBrush(color);
+
+    switch (m_type) {
+    case ButtonType::CircleType:
+        painter.drawEllipse(rect());
+        break;
+    case ButtonType::NormalType:
+        painter.drawRoundedRect(rect(),3,3);
+        break;
+    default:
+        break;
+    }
+}
+
+}
+
+#include "kloopplaypage.moc"
+#include "moc_kloopplaypage.cpp"
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kloopplaypage.h libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kloopplaypage.h
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kloopplaypage.h	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kloopplaypage.h	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,97 @@
+/*
+ * libkysdk-qtwidgets's Library
+ *
+ * Copyright (C) 2023, KylinSoft Co., Ltd.
+ *
+ * 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 3 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 General Public License
+ * along with this library.  If not, see <https://www.gnu.org/licenses/>.
+ *
+ * Authors: Zhenyu Wang <wangzhenyu@kylinos.cn>
+ *
+ */
+
+#ifndef KLOOPPLAYPAGE_H
+#define KLOOPPLAYPAGE_H
+
+#include <QWidget>
+#include "gui_g.h"
+
+namespace kdk {
+
+class KLoopPlayPagePrivate;
+
+/**
+ * @brief FormModule
+ * @since 2.5
+ */
+
+class GUI_EXPORT KLoopPlayPage :public QWidget
+{
+    Q_OBJECT
+public:
+    KLoopPlayPage(QWidget* parent = nullptr);
+
+    /**
+     * @brief 添加widget
+     * @param widget
+     */
+    void addWidget(QWidget *widget);
+
+    /**
+     * @brief 删除widget
+     * @param widget
+     */
+    void removeWidget(QWidget *widget);
+
+    /**
+     * @brief 设置当前中心界面
+     * @param i
+     */
+    void setCurrentWidget(int i);
+
+    /**
+     * @brief 获取当前中心界面index
+     * @return
+     */
+    int  currentWidget();
+
+    /**
+     * @brief 设置窗体间距
+     * @param spacing
+     */
+    void setWidgetSpacing(int spacing);
+
+    /**
+     * @brief 设置轮播时长
+     * @param time
+     */
+    void setLoopTime(int time);
+
+Q_SIGNALS:
+    void leftClick();
+    void centerClick();
+    void rightClick();
+
+protected:
+    void resizeEvent(QResizeEvent *event);
+    void paintEvent(QPaintEvent* event);
+    void showEvent(QShowEvent *event) override;
+
+private:
+    KLoopPlayPagePrivate *const d_ptr;
+    Q_DECLARE_PRIVATE(KLoopPlayPage)
+};
+
+}
+
+#endif // KLOOPPLAYPAGE_H
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/klunarcalendarinfo.cpp libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/klunarcalendarinfo.cpp
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/klunarcalendarinfo.cpp	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/klunarcalendarinfo.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,1003 @@
+#pragma execution_character_set("utf-8")
+#include <QTimer>
+#include <QSettings>
+#include <QToolButton>
+#include "klunarcalendarinfo.h"
+#include "qmutex.h"
+#define year_2099
+
+namespace kdk
+{
+QScopedPointer<KLunarCalendarInfo> KLunarCalendarInfo::self;
+class KLunarCalendarInfoPrivate : public QObject
+{
+    Q_DECLARE_PUBLIC(KLunarCalendarInfo)
+    Q_OBJECT
+public:
+    KLunarCalendarInfoPrivate(KLunarCalendarInfo* parent);
+
+private:
+    KLunarCalendarInfo* q_ptr;
+    QList<int> lunarCalendarTable;      //农历年表
+    QList<int> springFestival;          //春节公历日期
+    QList<int> lunarData;               //农历每月数据
+    QList<int> chineseTwentyFourData;   //农历二十四节气数据
+    QList<int> monthAdd;                //公历每月前面的天数
+
+    QList<QString> listDayName;         //农历日期名称集合
+    QList<QString> listMonthName;       //农历月份名称集合
+    QList<QString> listSolarTerm;       //二十四节气名称集合
+
+    QList<QString> listTianGan;         //天干名称集合
+    QList<QString> listDiZhi;           //地支名称集合
+    QList<QString> listShuXiang;        //属相名称集合
+};
+
+KLunarCalendarInfoPrivate::KLunarCalendarInfoPrivate(KLunarCalendarInfo *parent) : q_ptr(parent)
+{
+    Q_Q(KLunarCalendarInfo);
+    //农历查表
+    lunarCalendarTable << 0x04AE53 << 0x0A5748 << 0x5526BD << 0x0D2650 << 0x0D9544 << 0x46AAB9 << 0x056A4D << 0x09AD42 << 0x24AEB6 << 0x04AE4A; //1901-1910
+    lunarCalendarTable << 0x6A4DBE << 0x0A4D52 << 0x0D2546 << 0x5D52BA << 0x0B544E << 0x0D6A43 << 0x296D37 << 0x095B4B << 0x749BC1 << 0x049754; //1911-1920
+    lunarCalendarTable << 0x0A4B48 << 0x5B25BC << 0x06A550 << 0x06D445 << 0x4ADAB8 << 0x02B64D << 0x095742 << 0x2497B7 << 0x04974A << 0x664B3E; //1921-1930
+    lunarCalendarTable << 0x0D4A51 << 0x0EA546 << 0x56D4BA << 0x05AD4E << 0x02B644 << 0x393738 << 0x092E4B << 0x7C96BF << 0x0C9553 << 0x0D4A48; //1931-1940
+    lunarCalendarTable << 0x6DA53B << 0x0B554F << 0x056A45 << 0x4AADB9 << 0x025D4D << 0x092D42 << 0x2C95B6 << 0x0A954A << 0x7B4ABD << 0x06CA51; //1941-1950
+    lunarCalendarTable << 0x0B5546 << 0x555ABB << 0x04DA4E << 0x0A5B43 << 0x352BB8 << 0x052B4C << 0x8A953F << 0x0E9552 << 0x06AA48 << 0x6AD53C; //1951-1960
+    lunarCalendarTable << 0x0AB54F << 0x04B645 << 0x4A5739 << 0x0A574D << 0x052642 << 0x3E9335 << 0x0D9549 << 0x75AABE << 0x056A51 << 0x096D46; //1961-1970
+    lunarCalendarTable << 0x54AEBB << 0x04AD4F << 0x0A4D43 << 0x4D26B7 << 0x0D254B << 0x8D52BF << 0x0B5452 << 0x0B6A47 << 0x696D3C << 0x095B50; //1971-1980
+    lunarCalendarTable << 0x049B45 << 0x4A4BB9 << 0x0A4B4D << 0xAB25C2 << 0x06A554 << 0x06D449 << 0x6ADA3D << 0x0AB651 << 0x093746 << 0x5497BB; //1981-1990
+    lunarCalendarTable << 0x04974F << 0x064B44 << 0x36A537 << 0x0EA54A << 0x86B2BF << 0x05AC53 << 0x0AB647 << 0x5936BC << 0x092E50 << 0x0C9645; //1991-2000
+    lunarCalendarTable << 0x4D4AB8 << 0x0D4A4C << 0x0DA541 << 0x25AAB6 << 0x056A49 << 0x7AADBD << 0x025D52 << 0x092D47 << 0x5C95BA << 0x0A954E; //2001-2010
+    lunarCalendarTable << 0x0B4A43 << 0x4B5537 << 0x0AD54A << 0x955ABF << 0x04BA53 << 0x0A5B48 << 0x652BBC << 0x052B50 << 0x0A9345 << 0x474AB9; //2011-2020
+    lunarCalendarTable << 0x06AA4C << 0x0AD541 << 0x24DAB6 << 0x04B64A << 0x69573D << 0x0A4E51 << 0x0D2646 << 0x5E933A << 0x0D534D << 0x05AA43; //2021-2030
+    lunarCalendarTable << 0x36B537 << 0x096D4B << 0xB4AEBF << 0x04AD53 << 0x0A4D48 << 0x6D25BC << 0x0D254F << 0x0D5244 << 0x5DAA38 << 0x0B5A4C; //2031-2040
+    lunarCalendarTable << 0x056D41 << 0x24ADB6 << 0x049B4A << 0x7A4BBE << 0x0A4B51 << 0x0AA546 << 0x5B52BA << 0x06D24E << 0x0ADA42 << 0x355B37; //2041-2050
+    lunarCalendarTable << 0x09374B << 0x8497C1 << 0x049753 << 0x064B48 << 0x66A53C << 0x0EA54F << 0x06B244 << 0x4AB638 << 0x0AAE4C << 0x092E42; //2051-2060
+    lunarCalendarTable << 0x3C9735 << 0x0C9649 << 0x7D4ABD << 0x0D4A51 << 0x0DA545 << 0x55AABA << 0x056A4E << 0x0A6D43 << 0x452EB7 << 0x052D4B; //2061-2070
+    lunarCalendarTable << 0x8A95BF << 0x0A9553 << 0x0B4A47 << 0x6B553B << 0x0AD54F << 0x055A45 << 0x4A5D38 << 0x0A5B4C << 0x052B42 << 0x3A93B6; //2071-2080
+    lunarCalendarTable << 0x069349 << 0x7729BD << 0x06AA51 << 0x0AD546 << 0x54DABA << 0x04B64E << 0x0A5743 << 0x452738 << 0x0D264A << 0x8E933E; //2081-2090
+    lunarCalendarTable << 0x0D5252 << 0x0DAA47 << 0x66B53B << 0x056D4F << 0x04AE45 << 0x4A4EB9 << 0x0A4D4C << 0x0D1541 << 0x2D92B5;             //2091-2099
+
+    //每年春节对应的公历日期
+    springFestival << 130 << 217 << 206;                                                                // 1968 1969 1970
+    springFestival << 127 << 215 << 203 << 123 << 211 << 131 << 218 << 207 << 128 << 216;               // 1971--1980
+    springFestival << 205 << 125 << 213 << 202 << 220 << 209 << 219 << 217 << 206 << 127;               // 1981--1990
+    springFestival << 215 << 204 << 123 << 210 << 131 << 219 << 207 << 128 << 216 << 205;               // 1991--2000
+    springFestival << 124 << 212 << 201 << 122 << 209 << 129 << 218 << 207 << 126 << 214;               // 2001--2010
+    springFestival << 203 << 123 << 210 << 131 << 219 << 208 << 128 << 216 << 205 << 125;               // 2011--2020
+    springFestival << 212 << 201 << 122 << 210 << 129 << 217 << 206 << 126 << 213 << 203;               // 2021--2030
+    springFestival << 123 << 211 << 131 << 219 << 208 << 128 << 215 << 204 << 124 << 212;               // 2031--2040
+
+    //16--18位表示闰几月 0--12位表示农历每月的数据 高位表示1月 低位表示12月(农历闰月就会多一个月)
+    lunarData << 461653 << 1386 << 2413;                                                                // 1968 1969 1970
+    lunarData << 330077 << 1197 << 2637 << 268877 << 3365 << 531109 << 2900 << 2922 << 398042 << 2395;  // 1971--1980
+    lunarData << 1179 << 267415 << 2635 << 661067 << 1701 << 1748 << 398772 << 2742 << 2391 << 330031;  // 1981--1990
+    lunarData << 1175 << 1611 << 200010 << 3749 << 527717 << 1452 << 2742 << 332397 << 2350 << 3222;    // 1991--2000
+    lunarData << 268949 << 3402 << 3493 << 133973 << 1386 << 464219 << 605 << 2349 << 334123 << 2709;   // 2001--2010
+    lunarData << 2890 << 267946 << 2773 << 592565 << 1210 << 2651 << 395863 << 1323 << 2707 << 265877;  // 2011--2020
+    lunarData << 1706 << 2773 << 133557 << 1206 << 398510 << 2638 << 3366 << 335142 << 3411 << 1450;    // 2021--2030
+    lunarData << 200042 << 2413 << 723293 << 1197 << 2637 << 399947 << 3365 << 3410 << 334676 << 2906;  // 2031--2040
+
+    //二十四节气表
+    chineseTwentyFourData << 0x95 << 0xB4 << 0x96 << 0xA5 << 0x96 << 0x97 << 0x88 << 0x78 << 0x78 << 0x69 << 0x78 << 0x87; // 1970
+    chineseTwentyFourData << 0x96 << 0xB4 << 0x96 << 0xA6 << 0x97 << 0x97 << 0x78 << 0x79 << 0x79 << 0x69 << 0x78 << 0x77; // 1971
+    chineseTwentyFourData << 0x96 << 0xA4 << 0xA5 << 0xA5 << 0xA6 << 0xA6 << 0x88 << 0x88 << 0x88 << 0x78 << 0x87 << 0x87; // 1972
+    chineseTwentyFourData << 0xA5 << 0xB5 << 0x96 << 0xA5 << 0xA6 << 0x96 << 0x88 << 0x78 << 0x78 << 0x78 << 0x87 << 0x87; // 1973
+    chineseTwentyFourData << 0x95 << 0xB4 << 0x96 << 0xA5 << 0x96 << 0x97 << 0x88 << 0x78 << 0x78 << 0x69 << 0x78 << 0x87; // 1974
+    chineseTwentyFourData << 0x96 << 0xB4 << 0x96 << 0xA6 << 0x97 << 0x97 << 0x78 << 0x79 << 0x78 << 0x69 << 0x78 << 0x77; // 1975
+    chineseTwentyFourData << 0x96 << 0xA4 << 0xA5 << 0xB5 << 0xA6 << 0xA6 << 0x88 << 0x89 << 0x88 << 0x78 << 0x87 << 0x87; // 1976
+    chineseTwentyFourData << 0xA5 << 0xB4 << 0x96 << 0xA5 << 0x96 << 0x96 << 0x88 << 0x88 << 0x78 << 0x78 << 0x87 << 0x87; // 1977
+    chineseTwentyFourData << 0x95 << 0xB4 << 0x96 << 0xA5 << 0x96 << 0x97 << 0x88 << 0x78 << 0x78 << 0x79 << 0x78 << 0x87; // 1978
+    chineseTwentyFourData << 0x96 << 0xB4 << 0x96 << 0xA6 << 0x96 << 0x97 << 0x78 << 0x79 << 0x78 << 0x69 << 0x78 << 0x77; // 1979
+    chineseTwentyFourData << 0x96 << 0xA4 << 0xA5 << 0xB5 << 0xA6 << 0xA6 << 0x88 << 0x88 << 0x88 << 0x78 << 0x87 << 0x87; // 1980
+    chineseTwentyFourData << 0xA5 << 0xB4 << 0x96 << 0xA5 << 0xA6 << 0x96 << 0x88 << 0x88 << 0x78 << 0x78 << 0x77 << 0x87; // 1981
+    chineseTwentyFourData << 0x95 << 0xB4 << 0x96 << 0xA5 << 0x96 << 0x97 << 0x88 << 0x78 << 0x78 << 0x79 << 0x77 << 0x87; // 1982
+    chineseTwentyFourData << 0x95 << 0xB4 << 0x96 << 0xA5 << 0x96 << 0x97 << 0x78 << 0x79 << 0x78 << 0x69 << 0x78 << 0x77; // 1983
+    chineseTwentyFourData << 0x96 << 0xB4 << 0xA5 << 0xB5 << 0xA6 << 0xA6 << 0x87 << 0x88 << 0x88 << 0x78 << 0x87 << 0x87; // 1984
+    chineseTwentyFourData << 0xA5 << 0xB4 << 0xA6 << 0xA5 << 0xA6 << 0x96 << 0x88 << 0x88 << 0x78 << 0x78 << 0x87 << 0x87; // 1985
+    chineseTwentyFourData << 0xA5 << 0xB4 << 0x96 << 0xA5 << 0x96 << 0x97 << 0x88 << 0x78 << 0x78 << 0x79 << 0x77 << 0x87; // 1986
+    chineseTwentyFourData << 0x95 << 0xB4 << 0x96 << 0xA5 << 0x96 << 0x97 << 0x88 << 0x79 << 0x78 << 0x69 << 0x78 << 0x87; // 1987
+    chineseTwentyFourData << 0x96 << 0xB4 << 0xA5 << 0xB5 << 0xA6 << 0xA6 << 0x87 << 0x88 << 0x88 << 0x78 << 0x87 << 0x86; // 1988
+    chineseTwentyFourData << 0xA5 << 0xB4 << 0xA5 << 0xA5 << 0xA6 << 0x96 << 0x88 << 0x88 << 0x88 << 0x78 << 0x87 << 0x87; // 1989
+    chineseTwentyFourData << 0xA5 << 0xB4 << 0x96 << 0xA5 << 0x96 << 0x96 << 0x88 << 0x78 << 0x78 << 0x79 << 0x77 << 0x87; // 1990
+    chineseTwentyFourData << 0x95 << 0xB4 << 0x96 << 0xA5 << 0x86 << 0x97 << 0x88 << 0x78 << 0x78 << 0x69 << 0x78 << 0x87; // 1991
+    chineseTwentyFourData << 0x96 << 0xB4 << 0xA5 << 0xB5 << 0xA6 << 0xA6 << 0x87 << 0x88 << 0x88 << 0x78 << 0x87 << 0x86; // 1992
+    chineseTwentyFourData << 0xA5 << 0xB3 << 0xA5 << 0xA5 << 0xA6 << 0x96 << 0x88 << 0x88 << 0x88 << 0x78 << 0x87 << 0x87; // 1993
+    chineseTwentyFourData << 0xA5 << 0xB4 << 0x96 << 0xA5 << 0x96 << 0x96 << 0x88 << 0x78 << 0x78 << 0x78 << 0x87 << 0x87; // 1994
+    chineseTwentyFourData << 0x95 << 0xB4 << 0x96 << 0xA5 << 0x96 << 0x97 << 0x88 << 0x76 << 0x78 << 0x69 << 0x78 << 0x87; // 1995
+    chineseTwentyFourData << 0x96 << 0xB4 << 0xA5 << 0xB5 << 0xA6 << 0xA6 << 0x87 << 0x88 << 0x88 << 0x78 << 0x87 << 0x86; // 1996
+    chineseTwentyFourData << 0xA5 << 0xB3 << 0xA5 << 0xA5 << 0xA6 << 0xA6 << 0x88 << 0x88 << 0x88 << 0x78 << 0x87 << 0x87; // 1997
+    chineseTwentyFourData << 0xA5 << 0xB4 << 0x96 << 0xA5 << 0x96 << 0x96 << 0x88 << 0x78 << 0x78 << 0x78 << 0x87 << 0x87; // 1998
+    chineseTwentyFourData << 0x95 << 0xB4 << 0x96 << 0xA5 << 0x96 << 0x97 << 0x88 << 0x78 << 0x78 << 0x69 << 0x78 << 0x87; // 1999
+    chineseTwentyFourData << 0x96 << 0xB4 << 0xA5 << 0xB5 << 0xA6 << 0xA6 << 0x87 << 0x88 << 0x88 << 0x78 << 0x87 << 0x86; // 2000
+    chineseTwentyFourData << 0xA5 << 0xB3 << 0xA5 << 0xA5 << 0xA6 << 0xA6 << 0x88 << 0x88 << 0x88 << 0x78 << 0x87 << 0x87; // 2001
+    chineseTwentyFourData << 0xA5 << 0xB4 << 0x96 << 0xA5 << 0x96 << 0x96 << 0x88 << 0x78 << 0x78 << 0x78 << 0x87 << 0x87; // 2002
+    chineseTwentyFourData << 0x95 << 0xB4 << 0x96 << 0xA5 << 0x96 << 0x97 << 0x88 << 0x78 << 0x78 << 0x69 << 0x78 << 0x87; // 2003
+    chineseTwentyFourData << 0x96 << 0xB4 << 0xA5 << 0xB5 << 0xA6 << 0xA6 << 0x87 << 0x88 << 0x88 << 0x78 << 0x87 << 0x86; // 2004
+    chineseTwentyFourData << 0xA5 << 0xB3 << 0xA5 << 0xA5 << 0xA6 << 0xA6 << 0x88 << 0x88 << 0x88 << 0x78 << 0x87 << 0x87; // 2005
+    chineseTwentyFourData << 0xA5 << 0xB4 << 0x96 << 0xA5 << 0xA6 << 0x96 << 0x88 << 0x88 << 0x78 << 0x78 << 0x87 << 0x87; // 2006
+    chineseTwentyFourData << 0x95 << 0xB4 << 0x96 << 0xA5 << 0x96 << 0x97 << 0x88 << 0x78 << 0x78 << 0x69 << 0x78 << 0x87; // 2007
+    chineseTwentyFourData << 0x96 << 0xB4 << 0xA5 << 0xB5 << 0xA6 << 0xA6 << 0x87 << 0x88 << 0x87 << 0x78 << 0x87 << 0x86; // 2008
+    chineseTwentyFourData << 0xA5 << 0xB3 << 0xA5 << 0xB5 << 0xA6 << 0xA6 << 0x88 << 0x88 << 0x88 << 0x78 << 0x87 << 0x87; // 2009
+    chineseTwentyFourData << 0xA5 << 0xB4 << 0x96 << 0xA5 << 0xA6 << 0x96 << 0x88 << 0x88 << 0x78 << 0x78 << 0x87 << 0x87; // 2010
+    chineseTwentyFourData << 0x95 << 0xB4 << 0x96 << 0xA5 << 0x96 << 0x97 << 0x88 << 0x78 << 0x78 << 0x79 << 0x78 << 0x87; // 2011
+    chineseTwentyFourData << 0x96 << 0xB4 << 0xA5 << 0xB5 << 0xA5 << 0xA6 << 0x87 << 0x88 << 0x87 << 0x78 << 0x87 << 0x86; // 2012
+    chineseTwentyFourData << 0xA5 << 0xB3 << 0xA5 << 0xB5 << 0xA6 << 0xA6 << 0x87 << 0x88 << 0x88 << 0x78 << 0x87 << 0x87; // 2013
+    chineseTwentyFourData << 0xA5 << 0xB4 << 0x96 << 0xA5 << 0xA6 << 0x96 << 0x88 << 0x88 << 0x78 << 0x78 << 0x87 << 0x87; // 2014
+    chineseTwentyFourData << 0x95 << 0xB4 << 0x96 << 0xA5 << 0x96 << 0x97 << 0x88 << 0x78 << 0x78 << 0x79 << 0x77 << 0x87; // 2015
+    chineseTwentyFourData << 0x95 << 0xB4 << 0xA5 << 0xB4 << 0xA5 << 0xA6 << 0x87 << 0x88 << 0x87 << 0x78 << 0x87 << 0x86; // 2016
+    chineseTwentyFourData << 0xA5 << 0xC3 << 0xA5 << 0xB5 << 0xA6 << 0xA6 << 0x87 << 0x88 << 0x88 << 0x78 << 0x87 << 0x87; // 2017
+    chineseTwentyFourData << 0xA5 << 0xB4 << 0xA6 << 0xA5 << 0xA6 << 0x96 << 0x88 << 0x88 << 0x78 << 0x78 << 0x87 << 0x87; // 2018
+    chineseTwentyFourData << 0xA5 << 0xB4 << 0x96 << 0xA5 << 0x96 << 0x96 << 0x88 << 0x78 << 0x78 << 0x79 << 0x77 << 0x87; // 2019
+    chineseTwentyFourData << 0x95 << 0xB4 << 0xA5 << 0xB4 << 0xA5 << 0xA6 << 0x97 << 0x87 << 0x87 << 0x78 << 0x87 << 0x86; // 2020
+    chineseTwentyFourData << 0xA5 << 0xC3 << 0xA5 << 0xB5 << 0xA6 << 0xA6 << 0x87 << 0x88 << 0x88 << 0x78 << 0x87 << 0x86; // 2021
+    chineseTwentyFourData << 0xA5 << 0xB4 << 0xA5 << 0xA5 << 0xA6 << 0x96 << 0x88 << 0x88 << 0x88 << 0x78 << 0x87 << 0x87; // 2022
+    chineseTwentyFourData << 0xA5 << 0xB4 << 0x96 << 0xA5 << 0x96 << 0x96 << 0x88 << 0x78 << 0x78 << 0x79 << 0x77 << 0x87; // 2023
+    chineseTwentyFourData << 0x95 << 0xB4 << 0xA5 << 0xB4 << 0xA5 << 0xA6 << 0x97 << 0x87 << 0x87 << 0x78 << 0x87 << 0x96; // 2024
+    chineseTwentyFourData << 0xA5 << 0xC3 << 0xA5 << 0xB5 << 0xA6 << 0xA6 << 0x87 << 0x88 << 0x88 << 0x78 << 0x87 << 0x86; // 2025
+    chineseTwentyFourData << 0xA5 << 0xB3 << 0xA5 << 0xA5 << 0xA6 << 0xA6 << 0x88 << 0x88 << 0x88 << 0x78 << 0x87 << 0x87; // 2026
+    chineseTwentyFourData << 0xA5 << 0xB4 << 0x96 << 0xA5 << 0x96 << 0x96 << 0x88 << 0x78 << 0x78 << 0x78 << 0x87 << 0x87; // 2027
+    chineseTwentyFourData << 0x95 << 0xB4 << 0xA5 << 0xB4 << 0xA5 << 0xA6 << 0x97 << 0x87 << 0x87 << 0x78 << 0x87 << 0x96; // 2028
+    chineseTwentyFourData << 0xA5 << 0xC3 << 0xA5 << 0xB5 << 0xA6 << 0xA6 << 0x87 << 0x88 << 0x88 << 0x78 << 0x87 << 0x86; // 2029
+    chineseTwentyFourData << 0xA5 << 0xB3 << 0xA5 << 0xA5 << 0xA6 << 0xA6 << 0x88 << 0x88 << 0x88 << 0x78 << 0x87 << 0x87; // 2030
+    chineseTwentyFourData << 0xA5 << 0xB4 << 0x96 << 0xA5 << 0x96 << 0x96 << 0x88 << 0x78 << 0x78 << 0x78 << 0x87 << 0x87; // 2031
+    chineseTwentyFourData << 0x95 << 0xB4 << 0xA5 << 0xB4 << 0xA5 << 0xA6 << 0x97 << 0x87 << 0x87 << 0x78 << 0x87 << 0x96; // 2032
+    chineseTwentyFourData << 0xA5 << 0xC3 << 0xA5 << 0xB5 << 0xA6 << 0xA6 << 0x88 << 0x88 << 0x88 << 0x78 << 0x87 << 0x86; // 2033
+    chineseTwentyFourData << 0xA5 << 0xB3 << 0xA5 << 0xA5 << 0xA6 << 0xA6 << 0x88 << 0x78 << 0x88 << 0x78 << 0x87 << 0x87; // 2034
+    chineseTwentyFourData << 0xA5 << 0xB4 << 0x96 << 0xA5 << 0xA6 << 0x96 << 0x88 << 0x88 << 0x78 << 0x78 << 0x87 << 0x87; // 2035
+    chineseTwentyFourData << 0x95 << 0xB4 << 0xA5 << 0xB4 << 0xA5 << 0xA6 << 0x97 << 0x87 << 0x87 << 0x78 << 0x87 << 0x96; // 2036
+    chineseTwentyFourData << 0xA5 << 0xC3 << 0xA5 << 0xB5 << 0xA6 << 0xA6 << 0x87 << 0x88 << 0x88 << 0x78 << 0x87 << 0x86; // 2037
+    chineseTwentyFourData << 0xA5 << 0xB3 << 0xA5 << 0xA5 << 0xA6 << 0xA6 << 0x88 << 0x88 << 0x88 << 0x78 << 0x87 << 0x87; // 2038
+    chineseTwentyFourData << 0xA5 << 0xB4 << 0x96 << 0xA5 << 0xA6 << 0x96 << 0x88 << 0x88 << 0x78 << 0x78 << 0x87 << 0x87; // 2039
+    chineseTwentyFourData << 0x95 << 0xB4 << 0x96 << 0xA5 << 0x96 << 0x97 << 0x88 << 0x78 << 0x78 << 0x69 << 0x78 << 0x87; // 2040
+    chineseTwentyFourData << 0xA5 << 0xC3 << 0xA5 << 0xB5 << 0xA5 << 0xA6 << 0x87 << 0x88 << 0x87 << 0x78 << 0x87 << 0x86; // 2041
+    chineseTwentyFourData << 0xA5 << 0xB3 << 0xA5 << 0xB5 << 0xA6 << 0xA6 << 0x88 << 0x88 << 0x88 << 0x78 << 0x87 << 0x87; // 2042
+    chineseTwentyFourData << 0xA5 << 0xB4 << 0x96 << 0xA5 << 0xA6 << 0x96 << 0x88 << 0x88 << 0x78 << 0x78 << 0x87 << 0x87; // 2043
+    chineseTwentyFourData << 0x95 << 0xB4 << 0x96 << 0xA5 << 0x96 << 0x97 << 0x88 << 0x78 << 0x78 << 0x79 << 0x78 << 0x87; // 2044
+    chineseTwentyFourData << 0xA5 << 0xC3 << 0xA5 << 0xB4 << 0xA5 << 0xA6 << 0x87 << 0x88 << 0x87 << 0x78 << 0x87 << 0x86; // 2045
+    chineseTwentyFourData << 0xA5 << 0xB3 << 0xA5 << 0xB5 << 0xA6 << 0xA6 << 0x87 << 0x88 << 0x88 << 0x78 << 0x87 << 0x87; // 2046
+    chineseTwentyFourData << 0xA5 << 0xB4 << 0x96 << 0xA5 << 0xA6 << 0x96 << 0x88 << 0x88 << 0x78 << 0x78 << 0x87 << 0x87; // 2047
+    chineseTwentyFourData << 0x95 << 0xB4 << 0x96 << 0xA5 << 0x96 << 0x96 << 0x88 << 0x78 << 0x78 << 0x79 << 0x77 << 0x87; // 2048
+    chineseTwentyFourData << 0xA4 << 0xC3 << 0xA5 << 0xB4 << 0xA5 << 0xA6 << 0x97 << 0x87 << 0x87 << 0x78 << 0x87 << 0x86; // 2049
+    chineseTwentyFourData << 0xA5 << 0xC3 << 0xA5 << 0xB5 << 0xA6 << 0xA6 << 0x87 << 0x88 << 0x88 << 0x78 << 0x87 << 0x87; // 2050
+    chineseTwentyFourData << 0xA5 << 0xB4 << 0xA5 << 0xA5 << 0xA6 << 0x96 << 0x88 << 0x88 << 0x88 << 0x78 << 0x87 << 0x87; // 2051
+    chineseTwentyFourData << 0xA5 << 0xB4 << 0x96 << 0xA5 << 0x96 << 0x96 << 0x88 << 0x78 << 0x78 << 0x79 << 0x77 << 0x87; // 2052
+    chineseTwentyFourData << 0xA4 << 0xC3 << 0xA5 << 0xB4 << 0xA5 << 0xA6 << 0x97 << 0x87 << 0x87 << 0x78 << 0x87 << 0x86; // 2053
+    chineseTwentyFourData << 0xA5 << 0xC3 << 0xA5 << 0xB5 << 0xA6 << 0xA6 << 0x87 << 0x88 << 0x88 << 0x78 << 0x87 << 0x87; // 2054
+    chineseTwentyFourData << 0xA5 << 0xB4 << 0xA5 << 0xA5 << 0xA6 << 0xA6 << 0x88 << 0x88 << 0x88 << 0x78 << 0x87 << 0x87; // 2055
+    chineseTwentyFourData << 0xA5 << 0xB4 << 0x96 << 0xA5 << 0x96 << 0x96 << 0x88 << 0x78 << 0x78 << 0x79 << 0x77 << 0x87; // 2056
+    chineseTwentyFourData << 0xA4 << 0xC3 << 0xA5 << 0xB4 << 0xA5 << 0xA6 << 0x97 << 0x87 << 0x87 << 0x78 << 0x87 << 0x96; // 2057
+    chineseTwentyFourData << 0xA5 << 0xC3 << 0xA5 << 0xB5 << 0xA6 << 0xA6 << 0x87 << 0x88 << 0x88 << 0x78 << 0x87 << 0x86; // 2058
+    chineseTwentyFourData << 0xA5 << 0xB4 << 0xA5 << 0xA5 << 0xA6 << 0xA6 << 0x88 << 0x88 << 0x88 << 0x78 << 0x87 << 0x87; // 2059
+    chineseTwentyFourData << 0xA5 << 0xB4 << 0x96 << 0xA5 << 0x96 << 0x96 << 0x88 << 0x78 << 0x78 << 0x78 << 0x87 << 0x87; // 2060
+    chineseTwentyFourData << 0xA4 << 0xC3 << 0xA5 << 0xB4 << 0xA5 << 0xA6 << 0x97 << 0x87 << 0x87 << 0x78 << 0x87 << 0x96; // 2061
+    chineseTwentyFourData << 0xA5 << 0xC3 << 0xA5 << 0xB5 << 0xA6 << 0xA6 << 0x87 << 0x88 << 0x88 << 0x78 << 0x87 << 0x86; // 2062
+    chineseTwentyFourData << 0xA5 << 0xB3 << 0xA5 << 0xA5 << 0xA6 << 0xA6 << 0x88 << 0x88 << 0x88 << 0x78 << 0x87 << 0x87; // 2063
+    chineseTwentyFourData << 0xA5 << 0xB4 << 0x96 << 0xA5 << 0x96 << 0x96 << 0x88 << 0x78 << 0x78 << 0x78 << 0x87 << 0x87; // 2064
+    chineseTwentyFourData << 0xA4 << 0xC3 << 0xA5 << 0xB4 << 0xA5 << 0xA6 << 0x97 << 0x87 << 0x87 << 0x78 << 0x87 << 0x96; // 2065
+    chineseTwentyFourData << 0xA5 << 0xC3 << 0xA5 << 0xB5 << 0xA6 << 0xA6 << 0x87 << 0x88 << 0x88 << 0x78 << 0x87 << 0x86; // 2066
+    chineseTwentyFourData << 0xA5 << 0xB3 << 0xA5 << 0xA5 << 0xA6 << 0xA6 << 0x88 << 0x88 << 0x88 << 0x78 << 0x87 << 0x87; // 2067
+    chineseTwentyFourData << 0xA5 << 0xB4 << 0x96 << 0xA5 << 0xA6 << 0x96 << 0x88 << 0x88 << 0x78 << 0x78 << 0x87 << 0x87; // 2068
+    chineseTwentyFourData << 0xA4 << 0xC3 << 0xA5 << 0xB4 << 0xA5 << 0xA6 << 0x97 << 0x87 << 0x87 << 0x78 << 0x87 << 0x96; // 2069
+    chineseTwentyFourData << 0xA5 << 0xC3 << 0xA5 << 0xB5 << 0xA5 << 0xA6 << 0x87 << 0x88 << 0x87 << 0x78 << 0x87 << 0x86; // 2070
+    chineseTwentyFourData << 0xA5 << 0xB3 << 0xA5 << 0xA5 << 0xA6 << 0xA6 << 0x88 << 0x88 << 0x88 << 0x78 << 0x87 << 0x87; // 2071
+    chineseTwentyFourData << 0xA5 << 0xB4 << 0x96 << 0xA5 << 0xA6 << 0x96 << 0x88 << 0x88 << 0x78 << 0x78 << 0x87 << 0x87; // 2072
+    chineseTwentyFourData << 0xA4 << 0xC3 << 0xA5 << 0xB4 << 0xA5 << 0xA6 << 0x97 << 0x87 << 0x87 << 0x88 << 0x87 << 0x96; // 2073
+    chineseTwentyFourData << 0xA5 << 0xC3 << 0xA5 << 0xB5 << 0xA5 << 0xA6 << 0x87 << 0x88 << 0x87 << 0x78 << 0x87 << 0x86; // 2074
+    chineseTwentyFourData << 0xA5 << 0xB3 << 0xA5 << 0xB5 << 0xA6 << 0xA6 << 0x87 << 0x88 << 0x88 << 0x78 << 0x87 << 0x87; // 2075
+    chineseTwentyFourData << 0xA5 << 0xB4 << 0x96 << 0xA5 << 0xA6 << 0x96 << 0x88 << 0x88 << 0x78 << 0x78 << 0x87 << 0x87; // 2076
+    chineseTwentyFourData << 0xA4 << 0xC3 << 0xA5 << 0xB4 << 0xA5 << 0xA6 << 0x97 << 0x87 << 0x87 << 0x88 << 0x87 << 0x96; // 2077
+    chineseTwentyFourData << 0xA5 << 0xC3 << 0xA5 << 0xB4 << 0xA5 << 0xA6 << 0x97 << 0x88 << 0x87 << 0x78 << 0x87 << 0x86; // 2078
+    chineseTwentyFourData << 0xA5 << 0xB3 << 0xA5 << 0xB5 << 0xA6 << 0xA6 << 0x87 << 0x88 << 0x88 << 0x78 << 0x87 << 0x87; // 2079
+    chineseTwentyFourData << 0xA5 << 0xB4 << 0x96 << 0xA5 << 0xA6 << 0x96 << 0x88 << 0x88 << 0x78 << 0x78 << 0x87 << 0x87; // 2080
+    chineseTwentyFourData << 0xA4 << 0xC3 << 0xA5 << 0xB4 << 0xA5 << 0xA5 << 0x97 << 0x87 << 0x87 << 0x88 << 0x86 << 0x96; // 2081
+    chineseTwentyFourData << 0xA5 << 0xC3 << 0xA5 << 0xB4 << 0xA5 << 0xA6 << 0x97 << 0x87 << 0x87 << 0x78 << 0x87 << 0x86; // 2082
+    chineseTwentyFourData << 0xA5 << 0xC3 << 0xA5 << 0xB5 << 0xA6 << 0xA6 << 0x87 << 0x88 << 0x88 << 0x78 << 0x87 << 0x87; // 2083
+    chineseTwentyFourData << 0xA5 << 0xB4 << 0xA6 << 0xA5 << 0xA6 << 0x96 << 0x88 << 0x88 << 0x88 << 0x78 << 0x87 << 0x87; // 2084
+    chineseTwentyFourData << 0xB4 << 0xC3 << 0xA5 << 0xB4 << 0xA5 << 0xA5 << 0x97 << 0x87 << 0x87 << 0x88 << 0x86 << 0x96; // 2085
+    chineseTwentyFourData << 0xA4 << 0xC3 << 0xA5 << 0xB4 << 0xA5 << 0xA6 << 0x97 << 0x87 << 0x87 << 0x78 << 0x87 << 0x86; // 2086
+    chineseTwentyFourData << 0xA5 << 0xC3 << 0xA5 << 0xB5 << 0xA6 << 0xA6 << 0x87 << 0x88 << 0x88 << 0x78 << 0x87 << 0x87; // 2087
+    chineseTwentyFourData << 0xA5 << 0xB4 << 0xA5 << 0xA5 << 0xA6 << 0xA6 << 0x88 << 0x88 << 0x88 << 0x78 << 0x87 << 0x87; // 2088
+    chineseTwentyFourData << 0xB4 << 0xC3 << 0xA5 << 0xB4 << 0xA5 << 0xA5 << 0x97 << 0x87 << 0x87 << 0x88 << 0x96 << 0x96; // 2089
+    chineseTwentyFourData << 0xA4 << 0xC3 << 0xA5 << 0xB4 << 0xA5 << 0xA6 << 0x97 << 0x87 << 0x87 << 0x78 << 0x87 << 0x96; // 2090
+    chineseTwentyFourData << 0xA5 << 0xC3 << 0xA5 << 0xB5 << 0xA6 << 0xA6 << 0x87 << 0x88 << 0x88 << 0x78 << 0x87 << 0x86; // 2091
+    chineseTwentyFourData << 0xA5 << 0xB4 << 0xA5 << 0xA5 << 0xA6 << 0xA6 << 0x88 << 0x88 << 0x88 << 0x78 << 0x87 << 0x87; // 2092
+    chineseTwentyFourData << 0xB4 << 0xC3 << 0xA5 << 0xB4 << 0xA5 << 0xA5 << 0x97 << 0x87 << 0x87 << 0x87 << 0x96 << 0x96; // 2093
+    chineseTwentyFourData << 0xA4 << 0xC3 << 0xA5 << 0xB4 << 0xA5 << 0xA6 << 0x97 << 0x87 << 0x87 << 0x78 << 0x87 << 0x96; // 2094
+    chineseTwentyFourData << 0xA5 << 0xC3 << 0xA5 << 0xB5 << 0xA6 << 0xA6 << 0x87 << 0x88 << 0x88 << 0x78 << 0x87 << 0x86; // 2095
+    chineseTwentyFourData << 0xA5 << 0xB3 << 0xA5 << 0xA5 << 0xA6 << 0xA6 << 0x88 << 0x88 << 0x88 << 0x78 << 0x87 << 0x87; // 2096
+    chineseTwentyFourData << 0xB4 << 0xC3 << 0xA5 << 0xB4 << 0xA5 << 0xA5 << 0x97 << 0x97 << 0x87 << 0x87 << 0x96 << 0x96; // 2097
+    chineseTwentyFourData << 0xA4 << 0xC3 << 0xA5 << 0xB4 << 0xA5 << 0xA6 << 0x97 << 0x87 << 0x87 << 0x78 << 0x87 << 0x96; // 2098
+    chineseTwentyFourData << 0xA5 << 0xC3 << 0xA5 << 0xB5 << 0xA6 << 0xA6 << 0x87 << 0x88 << 0x88 << 0x78 << 0x87 << 0x86; // 2099
+
+    //公历每月前面的天数
+    monthAdd << 0 << 31 << 59 << 90 << 120 << 151 << 181 << 212 << 243 << 273 << 304 << 334;
+
+    //农历日期名称
+    listDayName << "*" << "初一" << "初二" << "初三" << "初四" << "初五" << "初六" << "初七" << "初八" << "初九" << "初十"
+                << "十一" << "十二" << "十三" << "十四" << "十五" << "十六" << "十七" << "十八" << "十九" << "二十"
+                << "廿一" << "廿二" << "廿三" << "廿四" << "廿五" << "廿六" << "廿七" << "廿八" << "廿九" << "三十";
+
+    //农历月份名称
+    listMonthName << "*" << "正月" << "二月" << "三月" << "四月" << "五月" << "六月" << "七月" << "八月" << "九月" << "十月" << "冬月" << "腊月";
+
+    //二十四节气名称
+    listSolarTerm << "小寒" << "大寒" << "立春" << "雨水" << "惊蛰" << "春分" << "清明" << "谷雨"
+                  << "立夏" << "小满" << "芒种" << "夏至" << "小暑" << "大暑" << "立秋" << "处暑"
+                  << "白露" << "秋分" << "寒露" << "霜降" << "立冬" << "小雪" << "大雪" << "冬至";
+
+    //天干
+    listTianGan << "甲" << "乙" << "丙" << "丁" << "戊" << "己" << "庚" << "辛" << "壬" << "癸";
+
+    //地支
+    listDiZhi << "子" << "丑" << "寅" << "卯" << "辰" << "巳" << "午" << "未" << "申" << "酉" << "戌" << "亥";
+
+    //属相
+    listShuXiang << "鼠" << "牛" << "虎" << "兔" << "龙" << "蛇" << "马" << "羊" << "猴" << "鸡" << "狗" << "猪";
+}
+
+KLunarCalendarInfo *KLunarCalendarInfo::Instance()
+{
+    if(self.isNull())
+    {
+        static QMutex mutex;
+        QMutexLocker locker(&mutex);
+
+        if(self.isNull())
+        {
+            self.reset(new KLunarCalendarInfo);
+        }
+    }
+
+    return self.data();
+}
+
+KLunarCalendarInfo::KLunarCalendarInfo(QObject *parent) : QObject(parent), d_ptr(new KLunarCalendarInfoPrivate(this))
+{
+    Q_D(KLunarCalendarInfo);
+}
+
+//计算是否闰年
+bool KLunarCalendarInfo::isLoopYear(int year)
+{
+    Q_D(KLunarCalendarInfo);
+    return (((0 == (year % 4)) && (0 != (year % 100))) || (0 == (year % 400)));
+}
+
+//计算指定年月该月共多少天
+int KLunarCalendarInfo::getMonthDays(int year, int month)
+{
+    Q_D(KLunarCalendarInfo);
+    int countDay = 0;
+    int loopDay = isLoopYear(year) ? 1 : 0;
+
+    switch (month)
+    {
+    case 1:
+        countDay = 31;
+        break;
+
+    case 2:
+        countDay = 28 + loopDay;
+        break;
+
+    case 3:
+        countDay = 31;
+        break;
+
+    case 4:
+        countDay = 30;
+        break;
+
+    case 5:
+        countDay = 31;
+        break;
+
+    case 6:
+        countDay = 30;
+        break;
+
+    case 7:
+        countDay = 31;
+        break;
+
+    case 8:
+        countDay = 31;
+        break;
+
+    case 9:
+        countDay = 30;
+        break;
+
+    case 10:
+        countDay = 31;
+        break;
+
+    case 11:
+        countDay = 30;
+        break;
+
+    case 12:
+        countDay = 31;
+        break;
+
+    default:
+        countDay = 30;
+        break;
+    }
+
+    return countDay;
+}
+
+//计算指定年月对应到该月共多少天
+int KLunarCalendarInfo::getTotalMonthDays(int year, int month)
+{
+    Q_D(KLunarCalendarInfo);
+    int countDay = 0;
+    int loopDay = isLoopYear(year) ? 1 : 0;
+
+    switch (month)
+    {
+    case 1:
+        countDay = 0;
+        break;
+
+    case 2:
+        countDay = 31;
+        break;
+
+    case 3:
+        countDay = 59 + loopDay;
+        break;
+
+    case 4:
+        countDay = 90 + loopDay;
+        break;
+
+    case 5:
+        countDay = 120 + loopDay;
+        break;
+
+    case 6:
+        countDay = 151 + loopDay;
+        break;
+
+    case 7:
+        countDay = 181 + loopDay;
+        break;
+
+    case 8:
+        countDay = 212 + loopDay;
+        break;
+
+    case 9:
+        countDay = 243 + loopDay;
+        break;
+
+    case 10:
+        countDay = 273 + loopDay;
+        break;
+
+    case 11:
+        countDay = 304 + loopDay;
+        break;
+
+    case 12:
+        countDay = 334 + loopDay;
+        break;
+
+    default:
+        countDay = 0;
+        break;
+    }
+
+    return countDay;
+}
+
+//计算指定年月对应星期几
+int KLunarCalendarInfo::getFirstDayOfWeek(int year, int month, bool FirstDayisSun)
+{
+    Q_D(KLunarCalendarInfo);
+    int week = 0;
+    week = (year + (year - 1) / 4 - (year - 1) / 100 + (year - 1) / 400) % 7;
+    week += getTotalMonthDays(year, month);
+    week = week % 7 - (!FirstDayisSun);
+
+    if (week == -1)
+        week = 6;
+
+    return week;
+}
+
+//计算国际节日
+QString KLunarCalendarInfo::getHoliday(int month, int day)
+{
+    Q_D(KLunarCalendarInfo);
+    int temp = (month << 8) | day;
+    QString strHoliday;
+
+    switch (temp)
+    {
+    case 0x0101:
+        strHoliday = "元旦";
+        break;
+
+    case 0x020E:
+        strHoliday = "情人节";
+        break;
+
+    case 0x0305:
+        strHoliday = "志愿者";
+        break;
+
+    case 0x0308:
+        strHoliday = "妇女节";
+        break;
+
+    case 0x030C:
+        strHoliday = "植树节";
+        break;
+
+    case 0x0401:
+        strHoliday = "愚人节";
+        break;
+
+    case 0x0501:
+        strHoliday = "劳动节";
+        break;
+
+    case 0x0504:
+        strHoliday = "青年节";
+        break;
+
+    case 0x0601:
+        strHoliday = "儿童节";
+        break;
+
+    case 0x0606:
+        strHoliday = "爱眼日";
+        break;
+
+    case 0x0701:
+        strHoliday = "建党节";
+        break;
+
+    case 0x0707:
+        strHoliday = "抗战日";
+        break;
+
+    case 0x0801:
+        strHoliday = "建军节";
+        break;
+
+    case 0x090A:
+        strHoliday = "教师节";
+        break;
+
+    case 0x0A01:
+        strHoliday = "国庆节";
+        break;
+
+    case 0x0B08:
+        strHoliday = "记者节";
+        break;
+
+    case 0x0B09:
+        strHoliday = "消防日";
+        break;
+
+    case 0x0C18:
+        strHoliday = "平安夜";
+        break;
+
+    case 0x0C19:
+        strHoliday = "圣诞节";
+        break;
+
+    default:
+        break;
+    }
+
+    return strHoliday;
+}
+
+//计算二十四节气
+QString KLunarCalendarInfo::getSolarTerms(int year, int month, int day)
+{
+    Q_D(KLunarCalendarInfo);
+    QString strSolarTerms;
+    int dayTemp = 0;
+    int index = (year - 1970) * 12 + month - 1;
+
+    if (day < 15)
+    {
+        dayTemp = 15 - day;
+
+        if ((d->chineseTwentyFourData.at(index) >> 4) == dayTemp)
+        {
+            strSolarTerms = d->listSolarTerm.at(2 * (month - 1));
+        }
+    }
+    else if (day > 15)
+    {
+        dayTemp = day - 15;
+
+        if ((d->chineseTwentyFourData.at(index) & 0x0f) == dayTemp)
+        {
+            strSolarTerms = d->listSolarTerm.at(2 * (month - 1) + 1);
+        }
+    }
+
+    return strSolarTerms;
+}
+
+//计算农历节日(必须传入农历年份月份)
+QString KLunarCalendarInfo::getLunarFestival(int month, int day)
+{
+    Q_D(KLunarCalendarInfo);
+    int temp = (month << 8) | day;
+    QString strFestival;
+
+    switch (temp)
+    {
+    case 0x0201:
+        strFestival = "二月";
+        break;
+
+    case 0x0301:
+        strFestival = "三月";
+        break;
+
+    case 0x0401:
+        strFestival = "四月";
+        break;
+
+    case 0x0501:
+        strFestival = "五月";
+        break;
+
+    case 0x0601:
+        strFestival = "六月";
+        break;
+
+    case 0x0701:
+        strFestival = "七月";
+        break;
+
+    case 0x0801:
+        strFestival = "八月";
+        break;
+
+    case 0x0901:
+        strFestival = "九月";
+        break;
+
+    case 0x0A01:
+        strFestival = "十月";
+        break;
+
+    case 0x0B01:
+        strFestival = "冬月";
+        break;
+
+    case 0x0C01:
+        strFestival = "腊月";
+        break;
+
+    case 0x0101:
+        strFestival = "春节";
+        break;
+
+    case 0x010F:
+        strFestival = "元宵节";
+        break;
+
+    case 0x0202:
+        strFestival = "龙抬头";
+        break;
+
+    case 0x0505:
+        strFestival = "端午节";
+        break;
+
+    case 0x0707:
+        strFestival = "七夕节";
+        break;
+
+    case 0x080F:
+        strFestival = "中秋节";
+        break;
+
+    case 0x0909:
+        strFestival = "重阳节";
+        break;
+
+    case 0x0C08:
+        strFestival = "腊八节";
+        break;
+
+    case 0x0C1E:
+        strFestival = "除夕";
+        break;
+
+    default:
+        break;
+    }
+
+    return strFestival;
+}
+
+//计算农历年 天干+地支+生肖
+QString KLunarCalendarInfo::getLunarYear(int year)
+{
+    Q_D(KLunarCalendarInfo);
+    QString strYear;
+
+    if (year > 1924)
+    {
+        int temp = year - 1924;
+        strYear.append(d->listTianGan.at(temp % 10));
+        strYear.append(d->listDiZhi.at(temp % 12));
+        strYear.append("年");
+        strYear.append(d->listShuXiang.at(temp % 12));
+        strYear.append("年");
+    }
+
+    return strYear;
+}
+
+void KLunarCalendarInfo::getLunarCalendarInfo(int year, int month, int day,
+        QString &strHoliday,
+        QString &strSolarTerms,
+        QString &strLunarFestival,
+        QString &strLunarYear,
+        QString &strLunarMonth,
+        QString &strLunarDay)
+{
+
+    Q_D(KLunarCalendarInfo);
+    if( year < 1901 || year > 2099 || month < 1 || month > 12 || day < 1 || day > 31)
+    {
+        return;
+    }
+
+    strHoliday = getHoliday(month, day);
+    strSolarTerms = getSolarTerms(year, month, day);
+
+#ifndef year_2099
+    //现在计算农历:获得当年春节的公历日期(比如:2015年春节日期为(2月19日))
+    //以此为分界点,2.19前面的农历是2014年农历(用2014年农历数据来计算)
+    //2.19以及之后的日期,农历为2015年农历(用2015年农历数据来计算)
+    int temp, tempYear, tempMonth, isEnd, k, n;
+    tempMonth = year - 1968;
+    int springFestivalMonth = d->springFestival.at(tempMonth) / 100;
+    int springFestivalDaty = d->springFestival.at(tempMonth) % 100;
+
+    if (month < springFestivalMonth)
+    {
+        tempMonth--;
+        tempYear = 365 * 1 + day + d->monthAdd.at(month - 1) - 31 * ((d->springFestival.at(tempMonth) / 100) - 1) - d->springFestival.at(tempMonth) % 100 + 1;
+
+        if ((!(year % 4)) && (month > 2))
+        {
+            tempYear = tempYear + 1;
+        }
+
+        if ((!((year - 1) % 4)))
+        {
+            tempYear = tempYear + 1;
+        }
+    }
+    else if (month == springFestivalMonth)
+    {
+        if (day < springFestivalDaty)
+        {
+            tempMonth--;
+            tempYear = 365 * 1 + day + d->monthAdd.at(month - 1) - 31 * ((d->springFestival.at(tempMonth) / 100) - 1) - d->springFestival.at(tempMonth) % 100 + 1;
+
+            if ((!(year % 4)) && (month > 2))
+            {
+                tempYear = tempYear + 1;
+            }
+
+            if ((!((year - 1) % 4)))
+            {
+                tempYear = tempYear + 1;
+            }
+        }
+        else
+        {
+            tempYear = day + d->monthAdd.at(month - 1) - 31 * ((d->springFestival.at(tempMonth) / 100) - 1) - d->springFestival.at(tempMonth) % 100 + 1;
+
+            if ((!(year % 4)) && (month > 2))
+            {
+                tempYear = tempYear + 1;
+            }
+        }
+    }
+    else
+    {
+        tempYear = day + d->monthAdd.at(month - 1) - 31 * ((d->springFestival.at(tempMonth) / 100) - 1) - d->springFestival.at(tempMonth) % 100 + 1;
+
+        if ((!(year % 4)) && (month > 2))
+        {
+            tempYear = tempYear + 1;
+        }
+    }
+
+    //计算农历天干地支月日
+    isEnd = 0;
+
+    while (isEnd != 1)
+    {
+        if (d->lunarData.at(tempMonth) < 4095)
+        {
+            k = 11;
+        }
+        else
+        {
+            k = 12;
+        }
+
+        n = k;
+
+        while (n >= 0)
+        {
+            temp = d->lunarData.at(tempMonth);
+            temp = temp >> n;
+            temp = temp % 2;
+
+            if (tempYear <= (29 + temp))
+            {
+                isEnd = 1;
+                break;
+            }
+
+            tempYear = tempYear - 29 - temp;
+            n = n - 1;
+        }
+
+        if (isEnd)
+        {
+            break;
+        }
+
+        tempMonth = tempMonth + 1;
+    }
+
+    //农历的年月日
+    year = 1969 + tempMonth - 1;
+    month = k - n + 1;
+    day = tempYear;
+
+    if (k == 12)
+    {
+        if (month == (d->lunarData.at(tempMonth) / 65536) + 1)
+        {
+            month = 1 - month;
+        }
+        else if (month > (d->lunarData.at(tempMonth) / 65536) + 1)
+        {
+            month = month - 1;
+        }
+    }
+
+    strLunarYear = getLunarYear(year);
+
+    if (month < 1 && (1 == day))
+    {
+        month = month * -1;
+        strLunarMonth = "闰" + d->listMonthName.at(month);
+    }
+    else
+    {
+        strLunarMonth = d->listMonthName.at(month);
+    }
+
+    strLunarDay = d->listDayName.at(day);
+    strLunarFestival = getLunarFestival(month, day);
+#else
+    //记录春节离当年元旦的天数
+    int springOffset = 0;
+    //记录阳历日离当年元旦的天数
+    int newYearOffset = 0;
+    //记录大小月的天数 29或30
+    int monthCount = 0;
+
+    if(((d->lunarCalendarTable.at(year - 1901) & 0x0060) >> 5) == 1)
+    {
+        springOffset = (d->lunarCalendarTable.at(year - 1901) & 0x001F) - 1;
+    }
+    else
+    {
+        springOffset = (d->lunarCalendarTable.at(year - 1901) & 0x001F) - 1 + 31;
+    }
+
+    //如果是不闰年且不是2月份 +1
+    newYearOffset = d->monthAdd.at(month - 1) + day - 1;
+
+    if((!(year % 4)) && (month > 2))
+    {
+        newYearOffset++;
+    }
+
+    //记录从哪个月开始来计算
+    int index = 0;
+    //用来对闰月的特殊处理
+    int flag = 0;
+
+    //判断阳历日在春节前还是春节后,计算农历的月/日
+    if (newYearOffset >= springOffset)
+    {
+        newYearOffset -= springOffset;
+        month = 1;
+        index = 1;
+        flag = 0;
+
+        if((d->lunarCalendarTable.at(year - 1901) & (0x80000 >> (index - 1))) == 0)
+        {
+            monthCount = 29;
+        }
+        else
+        {
+            monthCount = 30;
+        }
+
+        while (newYearOffset >= monthCount)
+        {
+            newYearOffset -= monthCount;
+            index++;
+
+            if (month == ((d->lunarCalendarTable.at(year - 1901) & 0xF00000) >> 20) )
+            {
+                flag = ~flag;
+
+                if (flag == 0)
+                {
+                    month++;
+                }
+            }
+            else
+            {
+                month++;
+            }
+
+            if ((d->lunarCalendarTable.at(year - 1901) & (0x80000 >> (index - 1))) == 0)
+            {
+                monthCount = 29;
+            }
+            else
+            {
+                monthCount = 30;
+            }
+        }
+
+        day = newYearOffset + 1;
+    }
+    else
+    {
+        springOffset -= newYearOffset;
+        year--;
+        month = 12;
+        flag = 0;
+
+        if (((d->lunarCalendarTable.at(year - 1901) & 0xF00000) >> 20) == 0)
+        {
+            index = 12;
+        }
+        else
+        {
+            index = 13;
+        }
+
+        if ((d->lunarCalendarTable.at(year - 1901) & (0x80000 >> (index - 1))) == 0)
+        {
+            monthCount = 29;
+        }
+        else
+        {
+            monthCount = 30;
+        }
+
+        while (springOffset > monthCount)
+        {
+            springOffset -= monthCount;
+            index--;
+
+            if(flag == 0)
+            {
+                month--;
+            }
+
+            if(month == ((d->lunarCalendarTable.at(year - 1901) & 0xF00000) >> 20))
+            {
+                flag = ~flag;
+            }
+
+            if ((d->lunarCalendarTable.at(year - 1901) & (0x80000 >> (index - 1))) == 0)
+            {
+                monthCount = 29;
+            }
+            else
+            {
+                monthCount = 30;
+            }
+        }
+
+        day = monthCount - springOffset + 1;
+    }
+
+    //计算农历的索引配置
+    int temp = 0;
+    temp |= day;
+    temp |= (month << 6);
+
+    //转换农历的年月
+    month = (temp & 0x3C0) >> 6;
+    day = temp & 0x3F;
+
+    strLunarYear = getLunarYear(year);
+
+    if ((month == ((d->lunarCalendarTable.at(year - 1901) & 0xF00000) >> 20)) && (1 == day))
+    {
+        strLunarMonth = "闰" + d->listMonthName.at(month);
+    }
+    else
+    {
+        strLunarMonth = d->listMonthName.at(month);
+    }
+
+    strLunarDay = d->listDayName.at(day);
+    strLunarFestival = getLunarFestival(month, day);
+#endif
+}
+
+QString KLunarCalendarInfo::getLunarInfo(int year, int month, int day, bool yearInfo, bool monthInfo, bool dayInfo)
+{
+    Q_D(KLunarCalendarInfo);
+    QString strHoliday, strSolarTerms, strLunarFestival, strLunarYear, strLunarMonth, strLunarDay;
+
+    KLunarCalendarInfo::Instance()->getLunarCalendarInfo(year, month, day,
+            strHoliday, strSolarTerms, strLunarFestival,
+            strLunarYear, strLunarMonth, strLunarDay);
+
+    //农历节日优先,其次农历节气,然后公历节日,最后才是农历月份名称
+    if (!strLunarFestival.isEmpty())
+    {
+        strLunarDay = strLunarFestival;
+    }
+    else if (!strSolarTerms.isEmpty())
+    {
+        strLunarDay = strSolarTerms;
+    }
+    else if (!strHoliday.isEmpty())
+    {
+        strLunarDay = strHoliday;
+    }
+
+    QString info = QString("%1%2%3")
+                   .arg(yearInfo ? strLunarYear + "年" : "")
+                   .arg(monthInfo ? strLunarMonth : "")
+                   .arg(dayInfo ? strLunarDay : "");
+
+    return info;
+}
+
+QString KLunarCalendarInfo::getLunarYearMonthDay(int year, int month, int day)
+{
+    return getLunarInfo(year, month, day, true, true, true);
+}
+
+QString KLunarCalendarInfo::getLunarMonthDay(int year, int month, int day)
+{
+    return getLunarInfo(year, month, day, false, true, true);
+}
+
+QString KLunarCalendarInfo::getLunarDay(int year, int month, int day)
+{
+    return getLunarInfo(year, month, day, false, false, true);
+}
+}
+
+#include "klunarcalendarinfo.moc"
+#include "moc_klunarcalendarinfo.cpp"
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/klunarcalendarinfo.h libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/klunarcalendarinfo.h
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/klunarcalendarinfo.h	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/klunarcalendarinfo.h	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,153 @@
+#ifndef KLUNARCALENDARINFO_H
+#define KLUNARCALENDARINFO_H
+
+#include "gui_g.h"
+#include <QObject>
+
+namespace kdk
+{
+class KLunarCalendarInfoPrivate;
+
+/**
+ *  @defgroup KLunarCalendarInfo
+ *  @since 2.5
+ */
+
+class GUI_EXPORT KLunarCalendarInfo : public QObject
+{
+    Q_OBJECT
+public:
+    static KLunarCalendarInfo *Instance();
+    explicit KLunarCalendarInfo(QObject *parent = 0);
+
+    /**
+     * @brief 计算是否闰年
+     * @param year
+     * @return
+     */
+    bool isLoopYear(int year);
+
+    /**
+     * @brief 计算指定年月该月共多少天
+     * @param year
+     * @param month
+     * @return
+     */
+    int getMonthDays(int year, int month);
+
+    /**
+     * @brief 计算指定年月对应到该月共多少天
+     * @param year
+     * @param month
+     * @return
+     */
+    int getTotalMonthDays(int year, int month);
+
+    /**
+     * @brief 计算指定年月对应星期几
+     * @param year
+     * @param month
+     * @param FirstDayisSun:第一天是否以周日开始
+     * @return
+     */
+    int getFirstDayOfWeek(int year, int month, bool FirstDayisSun);
+
+    /**
+     * @brief 计算国际节日
+     * @param month
+     * @param day
+     * @return
+     */
+    QString getHoliday(int month, int day);
+
+    /**
+     * @brief 计算二十四节气
+     * @param year
+     * @param month
+     * @param day
+     * @return
+     */
+    QString getSolarTerms(int year, int month, int day);
+
+    /**
+     * @brief 计算农历节日(必须传入农历年份月份)
+     * @param month
+     * @param day
+     * @return
+     */
+    QString getLunarFestival(int month, int day);
+
+    /**
+     * @brief 计算农历年 天干+地支+生肖
+     * @param year
+     * @return
+     */
+    QString getLunarYear(int year);
+
+    /**
+     * @brief 计算指定年月日农历信息,包括公历节日和农历节日及二十四节气
+     * @param year
+     * @param month
+     * @param day
+     * @param strHoliday
+     * @param strSolarTerms
+     * @param strLunarFestival
+     * @param strLunarYear
+     * @param strLunarMonth
+     * @param strLunarDay
+     */
+    void getLunarCalendarInfo(int year, int month, int day,
+                              QString &strHoliday,
+                              QString &strSolarTerms,
+                              QString &strLunarFestival,
+                              QString &strLunarYear,
+                              QString &strLunarMonth,
+                              QString &strLunarDay);
+
+    /**
+     * @brief 获取指定年月日农历信息
+     * @param year
+     * @param month
+     * @param day
+     * @param yearInfo
+     * @param monthInfo
+     * @param dayInfo
+     * @return
+     */
+    QString getLunarInfo(int year, int month, int day, bool yearInfo, bool monthInfo, bool dayInfo);
+
+    /**
+     * @brief 获取农历年月日
+     * @param year
+     * @param month
+     * @param day
+     * @return
+     */
+    QString getLunarYearMonthDay(int year, int month, int day);
+
+    /**
+     * @brief 获取农历月日
+     * @param year
+     * @param month
+     * @param day
+     * @return
+     */
+    QString getLunarMonthDay(int year, int month, int day);
+
+    /**
+     * @brief 获取农历日
+     * @param year
+     * @param month
+     * @param day
+     * @return
+     */
+    QString getLunarDay(int year, int month, int day);
+
+private:
+    Q_DECLARE_PRIVATE(KLunarCalendarInfo)
+    KLunarCalendarInfoPrivate* const d_ptr;
+    static QScopedPointer<KLunarCalendarInfo> self;
+};
+}
+
+#endif // KLUNARCALENDARINFO_H
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/klunardateedit.cpp libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/klunardateedit.cpp
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/klunardateedit.cpp	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/klunardateedit.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,257 @@
+#include "klunardateedit.h"
+#include "kcustomdateedit.h"
+#include <QVBoxLayout>
+#include <QHBoxLayout>
+#include <QApplication>
+#include <QSvgRenderer>
+#include <QPainter>
+#include <QGSettings>
+#include <QLabel>
+#include <QPushButton>
+#include <QDateTimeEdit>
+#define THEME_SCHAME "org.ukui.style"
+#define COLOR_THEME "styleName"
+
+namespace kdk
+{
+class KLunarDateEditPrivate : public QObject
+{
+    Q_OBJECT
+    Q_DECLARE_PUBLIC(KLunarDateEdit)
+public:
+    KLunarDateEditPrivate(KLunarDateEdit* parent);
+
+private:
+    QPixmap loadSvg(const QString &path, int size);
+    QPixmap drawSymbolicColoredPixmap(const QPixmap &source);
+
+private:
+    KLunarDateEdit* q_ptr;
+
+    QGSettings *colorGsettings;
+    KCustomDateEdit *dateEdit;
+    QWidget *m_pLunarWidget;
+    QLabel *lunarLabel;
+    QPushButton *popButton;
+};
+
+KLunarDateEditPrivate::KLunarDateEditPrivate(KLunarDateEdit* parent) : q_ptr(parent)
+{
+    Q_Q(KLunarDateEdit);
+    dateEdit = new KCustomDateEdit(q);
+    dateEdit->setContextMenuPolicy(Qt::NoContextMenu);
+    dateEdit->setCalendarPopup(true);
+    dateEdit->setDisplayFormat("yyyy-MM-dd");
+    QSizePolicy sizePolicy(QSizePolicy::Ignored, QSizePolicy::Preferred);
+    sizePolicy.setHorizontalStretch(0);
+    sizePolicy.setVerticalStretch(0);
+    sizePolicy.setHeightForWidth(dateEdit->sizePolicy().hasHeightForWidth());
+    dateEdit->setSizePolicy(sizePolicy);
+
+    //lunarDateEdit
+    m_pLunarWidget = new QWidget(q);
+    m_pLunarWidget->setObjectName(QString::fromUtf8("LunarWidget"));
+    QHBoxLayout *horizontalLayout = new QHBoxLayout(m_pLunarWidget);
+    horizontalLayout->setSpacing(0);
+    horizontalLayout->setMargin(0);
+
+    lunarLabel = new QLabel(m_pLunarWidget);
+    sizePolicy.setHeightForWidth(lunarLabel->sizePolicy().hasHeightForWidth());
+    lunarLabel->setMargin(10);
+    lunarLabel->setSizePolicy(sizePolicy);
+
+    popButton = new QPushButton(m_pLunarWidget);
+    sizePolicy.setHeightForWidth(popButton->sizePolicy().hasHeightForWidth());
+    popButton->setSizePolicy(sizePolicy);
+    popButton->setFixedWidth(38);
+    popButton->setStyleSheet(QString::fromUtf8("QPushButton{background-color: rgba(255, 255, 255, 0);border: none;}"
+                                "QPushButton:hover { background-color: rgba(255, 255, 255, 0); }"
+                                "QPushButton:pressed { background-color: rgba(255, 255, 255, 0);}"));
+    popButton->setFlat(true);
+    connect(popButton, SIGNAL(clicked()), q, SLOT(slotClicked()));
+    horizontalLayout->addWidget(lunarLabel);
+    horizontalLayout->addWidget(popButton);
+
+    dateEdit->setVisible(true);
+    m_pLunarWidget->setVisible(false);
+
+    connect(dateEdit, SIGNAL(dateChanged(QDate)), q, SIGNAL(dateChanged(QDate)));
+    connect(dateEdit, SIGNAL(dateChanged(QDate)), q, SLOT(slotDateChanged(QDate)));
+
+    const QByteArray id(THEME_SCHAME);
+
+    if (QGSettings::isSchemaInstalled(id))
+    {
+        colorGsettings = new QGSettings(id, QByteArray(), q);
+        connect(colorGsettings, &QGSettings::changed, this, [ = ](QString key)
+        {
+            if ("themeColor" == key || "styleName" == key)
+            {
+                q->slotPaletteChanged();
+            }
+        });
+    }
+}
+
+QPixmap KLunarDateEditPrivate::loadSvg(const QString &path, int size)
+{
+    Q_Q(KLunarDateEdit);
+    int origSize = size;
+    const auto ratio = qApp->devicePixelRatio();
+
+    if ( 2 == ratio)
+    {
+        size += origSize;
+    }
+    else if (3 == ratio)
+    {
+        size += origSize;
+    }
+
+    QPixmap pixmap(size, size);
+    QSvgRenderer renderer(path);
+    pixmap.fill(Qt::transparent);
+
+    QPainter painter;
+    painter.begin(&pixmap);
+    renderer.render(&painter);
+    painter.end();
+
+    pixmap.setDevicePixelRatio(ratio);
+    return drawSymbolicColoredPixmap(pixmap);
+}
+
+QPixmap KLunarDateEditPrivate::drawSymbolicColoredPixmap(const QPixmap &source)
+{
+    Q_Q(KLunarDateEdit);
+    QImage img = source.toImage();
+
+    for (int x = 0; x < img.width(); x++)
+    {
+        for (int y = 0; y < img.height(); y++)
+        {
+            QColor color = img.pixelColor(x, y);
+
+            if (color.alpha() > 0)
+            {
+                QColor colorSet = q->palette().color(popButton->palette().ButtonText);
+                color.setRed(colorSet.red());
+                color.setGreen(colorSet.green());
+                color.setBlue(colorSet.blue());
+                img.setPixelColor(x, y, color);
+            }
+        }
+    }
+
+    return QPixmap::fromImage(img);
+}
+
+KLunarDateEdit::KLunarDateEdit(QWidget *parent) : QWidget{parent}, d_ptr(new KLunarDateEditPrivate(this))
+{
+    Q_D(KLunarDateEdit);
+    slotPaletteChanged();
+}
+
+void KLunarDateEdit::setShowLunar(bool showLunar)
+{
+    Q_D(KLunarDateEdit);
+    slotDateChanged(d->dateEdit->date());
+    d->m_pLunarWidget->setVisible(showLunar);
+    d->dateEdit->setShowLunar(showLunar);
+}
+
+void KLunarDateEdit::slotPaletteChanged()
+{
+    Q_D(KLunarDateEdit);
+
+    if(d->popButton == nullptr || d->lunarLabel == nullptr || d->m_pLunarWidget == nullptr)
+        return;
+
+    QPalette pal = qApp->palette();
+    this->setPalette(pal);
+    d->dateEdit->setPalette(pal);
+    d->m_pLunarWidget->setPalette(pal);
+    d->lunarLabel->setPalette(pal);
+    d->popButton->setPalette(pal);
+
+    QGSettings * styleGsettings = nullptr;
+    const QByteArray style_id(THEME_SCHAME);
+
+    if (QGSettings::isSchemaInstalled(style_id))
+    {
+        styleGsettings = new QGSettings(style_id);
+        QString currentTheme = styleGsettings->get(COLOR_THEME).toString();
+
+        if(currentTheme == "ukui-default" || currentTheme == "ukui-light" )
+        {
+            d->dateEdit->updateStyle(false);
+            d->m_pLunarWidget->setStyleSheet(QString("QWidget#LunarWidget{background-color: rgb(233,233,233); border:none;border-radius:5px;}"));
+            d->lunarLabel->setStyleSheet(QString("color:rgb(0,0,0);"));
+        }
+        else if(currentTheme == "ukui-dark")
+        {
+            d->dateEdit->updateStyle(true);
+            d->m_pLunarWidget->setStyleSheet(QString("QWidget#LunarWidget{background-color: rgb(55,55,59); border:none;border-radius:5px;}"));
+            d->lunarLabel->setStyleSheet(QString("color:rgb(233,233,233);"));
+        }
+    }
+
+    QPixmap pixmap = d->loadSvg("/usr/share/kylin-user-guide/data/ukui-down-symbolic.svg", 64);
+    pixmap = pixmap.scaled(QSize(15, 15), Qt::KeepAspectRatio, Qt::SmoothTransformation);
+    QIcon icon(pixmap);
+    d->popButton->setIcon(icon);
+    d->popButton->setIconSize(QSize(15, 15));
+
+    if(styleGsettings != nullptr)
+    {
+        delete styleGsettings;
+        styleGsettings = nullptr;
+    }
+}
+
+QDateTimeEdit *KLunarDateEdit::getDateEdit()
+{
+    Q_D(KLunarDateEdit);
+    return static_cast<QDateTimeEdit*>(d->dateEdit);
+}
+
+void KLunarDateEdit::resizeEvent(QResizeEvent *event)
+{
+    Q_D(KLunarDateEdit);
+    d->dateEdit->setFixedSize(event->size());
+    d->m_pLunarWidget->setFixedSize(event->size());
+}
+
+void KLunarDateEdit::slotDateChanged(QDate date)
+{
+    Q_D(KLunarDateEdit);
+    QString strHoliday;
+    QString strSolarTerms;
+    QString strLunarFestival;
+    QString strLunarYear;
+    QString strLunarMonth;
+    QString strLunarDay;
+
+    KLunarCalendarInfo::Instance()->getLunarCalendarInfo(date.year(),
+            date.month(),
+            date.day(),
+            strHoliday,
+            strSolarTerms,
+            strLunarFestival,
+            strLunarYear,
+            strLunarMonth,
+            strLunarDay);
+
+    QString labBottomarg = strLunarMonth + strLunarDay;
+    d->lunarLabel->setText(labBottomarg);
+}
+
+void KLunarDateEdit::slotClicked()
+{
+    Q_D(KLunarDateEdit);
+    d->dateEdit->showCalendar();
+}
+}
+
+#include "klunardateedit.moc"
+#include "moc_klunardateedit.cpp"
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/klunardateedit.h libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/klunardateedit.h
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/klunardateedit.h	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/klunardateedit.h	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,53 @@
+#ifndef KLUNARDATEEDIT_H
+#define KLUNARDATEEDIT_H
+
+#include "gui_g.h"
+#include <QObject>
+#include <QWidget>
+#include <QDateEdit>
+
+namespace kdk
+{
+class KLunarDateEditPrivate;
+
+/**
+ *  @defgroup KLunarDateEdit
+ *  @since 2.5
+ */
+
+class GUI_EXPORT KLunarDateEdit : public QWidget
+{
+    Q_OBJECT
+public:
+    explicit KLunarDateEdit(QWidget *parent = nullptr);
+
+    /**
+     * @brief 是否显示农历
+     * @param showLunar:true显示,false不显示
+     */
+    void setShowLunar(bool showLunar);
+
+    /**
+     * @brief 获取控件中的DateEdit控件
+     * @return
+     */
+    QDateTimeEdit* getDateEdit();
+
+protected:
+    void resizeEvent(QResizeEvent* event);
+
+signals:
+    void dateChanged(QDate);
+
+private slots:
+    void slotPaletteChanged();
+    void slotDateChanged(QDate date);
+    void slotClicked();
+
+private:
+    Q_DECLARE_PRIVATE(KLunarDateEdit)
+    KLunarDateEditPrivate* const d_ptr;
+};
+}
+
+#endif // KLUNARDATEEDIT_H
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kmenubutton.cpp libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kmenubutton.cpp
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kmenubutton.cpp	2024-05-16 09:25:54.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kmenubutton.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -23,9 +23,11 @@
 #include "kmenubutton.h"
 #include <QAction>
 #include <QPainter>
-#include <QEvent>
-#include <QDebug>
+#include <QFile>
+#include <QProcess>
+#include <QApplication>
 #include "parmscontroller.h"
+#include <QDebug>
 
 namespace kdk
 {
@@ -37,6 +39,7 @@
 
 public:
     KMenuButtonPrivate(KMenuButton*parent);
+    void feedbackShow();
 
 protected:
     bool eventFilter(QObject *watched, QEvent *event);
@@ -48,11 +51,13 @@
     QAction *m_pThemeAction;
     QAction *m_pAssistAction;
     QAction *m_pAboutAction;
+    QAction *m_pFeedbackAction;
     QAction *m_pQuitAction;
     QMenu *m_pThemeMenu;
     QAction *m_pAutoAction;
     QAction *m_pLightAction;
     QAction *m_pDarkAction;
+    QProcess m_feedbackProcess;
 };
 
 KMenuButton::KMenuButton(QWidget *parent)
@@ -67,11 +72,12 @@
     setToolTip(tr("Options"));
     d->m_pSettingAction = new QAction(tr("Setting"),d->m_pMenu);
     d->m_pThemeAction = new QAction(tr("Theme"),d->m_pMenu);
-    d->m_pAssistAction = new QAction(tr("Assist"),d->m_pMenu);
+    d->m_pAssistAction = new QAction(tr("Help"),d->m_pMenu);
     d->m_pAboutAction = new QAction(tr("About"),d->m_pMenu);
+    d->m_pFeedbackAction = new QAction(tr("Feedback"),d->m_pMenu);
     d->m_pQuitAction = new QAction(tr("Quit"),d->m_pMenu);
     QList<QAction*> actionList;
-    actionList<<d->m_pSettingAction<<d->m_pThemeAction<<d->m_pAssistAction<<d->m_pAboutAction<<d->m_pQuitAction;
+    actionList<<d->m_pSettingAction<<d->m_pThemeAction<<d->m_pAssistAction<<d->m_pAboutAction<<d->m_pFeedbackAction<<d->m_pQuitAction;
     d->m_pMenu->addActions(actionList);
     setPopupMode(QToolButton::InstantPopup);
 
@@ -102,6 +108,17 @@
         updateGeometry();
         update();
     });
+
+    QString directoryPath = "/opt/kylin-os-manager/tools/service-support-mini";
+    QFile file(directoryPath);
+    if(file.exists())
+        feedbackAction()->setVisible(true);
+    else
+        feedbackAction()->setVisible(false);
+
+    connect(feedbackAction(),&QAction::triggered,this,[=]{
+        d->feedbackShow();
+    });
 }
 
 KMenuButton::~KMenuButton()
@@ -145,6 +162,12 @@
     return d->m_pAboutAction;
 }
 
+QAction *KMenuButton::feedbackAction()
+{
+    Q_D(KMenuButton);
+    return d->m_pFeedbackAction;
+}
+
 QAction *KMenuButton::quitAction()
 {
     Q_D(KMenuButton);
@@ -194,6 +217,36 @@
     parent->installEventFilter(this);
 }
 
+void KMenuButtonPrivate::feedbackShow()
+{
+    Q_Q(KMenuButton);
+    QString directoryPath = "/opt/kylin-os-manager/tools/service-support-mini";
+    QFile file(directoryPath);
+    if(file.exists())
+    {
+        QStringList arguments;
+        QString processName;
+        QString fileName = QString("/proc/%1/cmdline").arg(QApplication::applicationPid());
+        QFile file(fileName);
+        if (file.open(QIODevice::ReadOnly))
+        {
+            QByteArray data = file.readAll();
+            int pos = data.indexOf('\0');
+            if (pos != -1)
+            {
+                QStringList list = QString::fromUtf8(data.left(pos)).trimmed().split("/");
+                processName = list.last();
+            }
+            file.close();
+        }
+
+        arguments << "-mode=1" <<"-exe=" + processName;
+
+        m_feedbackProcess.startDetached(directoryPath, arguments);
+        m_feedbackProcess.waitForFinished();
+    }
+}
+
 bool KMenuButtonPrivate::eventFilter(QObject *watched, QEvent *event)
 {
     Q_Q(KMenuButton);
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kmenubutton.h libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kmenubutton.h
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kmenubutton.h	2024-05-16 09:25:54.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kmenubutton.h	2024-10-29 15:22:42.000000000 +0800
@@ -87,6 +87,12 @@
     QAction* aboutAction();
 
     /**
+     * @brief 获取意见反馈Action
+     * @since 2.4.1.0-0k1.0
+     * @return
+     */
+    QAction* feedbackAction();
+    /**
      * @brief 获取离开Action
      * @return
      */
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kmessagebox.cpp libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kmessagebox.cpp
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kmessagebox.cpp	2024-05-16 09:25:54.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kmessagebox.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -33,6 +33,8 @@
 #include <QScreen>
 #include <QVBoxLayout>
 #include <QCheckBox>
+#include <QApplication>
+#include <QDesktopWidget>
 #include "themeController.h"
 
 namespace kdk {
@@ -301,6 +303,7 @@
     }
 
     d->defaultButton = button;
+    button->setProperty("isImportant",true);
     button->setDefault(true);
     button->setFocus();
 }
@@ -418,6 +421,29 @@
         case QEvent::FontChange:
             d->updateSize();
             break;
+        case QEvent::Show:
+        {
+            d->updateSize();
+            QWidget *parentWindow = qobject_cast<QWidget*>(this->parent());
+
+            if(parentWindow && parentWindow->isActiveWindow()){
+                const QPoint parentWindowCenter = parentWindow->geometry().center();
+                const QPoint messageBoxCenter = this->geometry().center();
+                const QPoint moveOffset = parentWindowCenter - messageBoxCenter;
+                move(pos() + moveOffset);
+            }
+            else{
+                QDesktopWidget desktop;
+                int screenWidth = desktop.screen()->width();
+                int screenHeight = desktop.screen()->height();
+
+                int messageBox_X = (screenWidth - this->width()) / 2;
+                int messageBox_Y = (screenHeight - this->height()) / 2;
+
+                this->move(messageBox_X, messageBox_Y);
+            }
+            break;
+        }
         default:
             break;
     }
@@ -582,7 +608,6 @@
     q->setFixedSize(size);
 
     QCoreApplication::removePostedEvents(q, QEvent::LayoutRequest);
-
 }
 
 void KMessageBoxPrivate::_q_buttonClicked(QAbstractButton *button)
@@ -625,6 +650,7 @@
     emit q->buttonClicked(clickedButton);
 
     int resultCode = execReturnCode(button);
+    q->setResult(resultCode);
     q->hide();
     q->close();
     int dialogCode = dialogCodeForButton(button);
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kminicalendaritem.cpp libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kminicalendaritem.cpp
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kminicalendaritem.cpp	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kminicalendaritem.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,728 @@
+#pragma execution_character_set("utf-8")
+
+#include "kminicalendaritem.h"
+#include "qpainter.h"
+#include "qevent.h"
+#include "qdatetime.h"
+#include "qdebug.h"
+
+namespace kdk
+{
+class KMiniCalendarItemPrivate : public QObject
+{
+    Q_OBJECT
+    Q_DECLARE_PUBLIC(KMiniCalendarItem)
+public:
+    KMiniCalendarItemPrivate(KMiniCalendarItem* parent);
+
+private:
+    KMiniCalendarItem* q_ptr;
+    KMiniCalendarItem::SelectType selectType;          //选中模式
+    KMiniCalendarItem::DayType dayType;                //当前日类型
+    bool hover;                     //鼠标是否悬停
+    bool pressed;                   //鼠标是否按下
+
+    bool select;                    //是否选中
+    bool showLunar;                 //显示农历
+    bool enableBorder;              //显示边框
+
+    QDate date;                     //当前日期
+    QString lunar;                  //农历信息
+
+    QColor borderColor;             //边框颜色
+    QColor weekColor;               //周末颜色
+    QColor superColor;              //角标颜色
+    QColor lunarColor;              //农历节日颜色
+
+    QColor currentTextColor;        //当前月文字颜色
+    QColor otherTextColor;          //其他月文字颜色
+    QColor selectTextColor;         //选中日期文字颜色
+    QColor hoverTextColor;          //悬停日期文字颜色
+
+    QColor currentLunarColor;       //当前月农历文字颜色
+    QColor otherLunarColor;         //其他月农历文字颜色
+    QColor selectLunarColor;        //选中日期农历文字颜色
+    QColor hoverLunarColor;         //悬停日期农历文字颜色
+
+    QColor currentBgColor;          //当前月背景颜色
+    QColor otherBgColor;            //其他月背景颜色
+    QColor selectBgColor;           //选中日期背景颜色
+    QColor hoverBgColor;            //悬停日期背景颜色
+};
+
+KMiniCalendarItemPrivate::KMiniCalendarItemPrivate(KMiniCalendarItem* parent) : q_ptr(parent)
+{
+    Q_Q(KMiniCalendarItem);
+    hover = false;
+    pressed = false;
+
+    select = false;
+    showLunar = true;
+    enableBorder = false;
+    selectType = KMiniCalendarItem::SelectType_Rect;
+
+    date = QDate::currentDate();
+    lunar = "初一";
+    dayType = KMiniCalendarItem::DayType_MonthCurrent;
+
+    borderColor = QColor(180, 180, 180);
+    weekColor = QColor(255, 0, 0);
+    superColor = QColor(255, 129, 6);
+    lunarColor = QColor(55, 156, 238);
+
+    currentTextColor = QColor(0, 0, 0);
+    otherTextColor = QColor(200, 200, 200);
+    selectTextColor = QColor(255, 255, 255);
+    hoverTextColor = QColor(250, 250, 250);
+
+    currentLunarColor = QColor(150, 150, 150);
+    otherLunarColor = QColor(200, 200, 200);
+    selectLunarColor = QColor(255, 255, 255);
+    hoverLunarColor = QColor(250, 250, 250);
+
+    currentBgColor = QColor(255, 255, 255);
+    otherBgColor = QColor(240, 240, 240);
+    selectBgColor = QColor(208, 47, 18);
+    hoverBgColor = QColor(204, 183, 180);
+}
+
+KMiniCalendarItem::KMiniCalendarItem(QWidget *parent) : QWidget(parent), d_ptr(new KMiniCalendarItemPrivate(this))
+{
+    Q_D(KMiniCalendarItem);
+}
+
+void KMiniCalendarItem::enterEvent(QEvent *)
+{
+    Q_D(KMiniCalendarItem);
+    d->hover = true;
+    update();
+}
+
+void KMiniCalendarItem::leaveEvent(QEvent *)
+{
+    Q_D(KMiniCalendarItem);
+    d->hover = false;
+    update();
+}
+
+void KMiniCalendarItem::mousePressEvent(QMouseEvent *)
+{
+    Q_D(KMiniCalendarItem);
+    d->pressed = true;
+    update();
+
+    emit clicked(d->date, d->dayType);
+}
+
+void KMiniCalendarItem::mouseReleaseEvent(QMouseEvent *)
+{
+    Q_D(KMiniCalendarItem);
+    d->pressed = false;
+    update();
+}
+
+void KMiniCalendarItem::paintEvent(QPaintEvent *)
+{
+    Q_D(KMiniCalendarItem);
+    //绘制准备工作,启用反锯齿
+    QPainter painter(this);
+    painter.setRenderHints(QPainter::Antialiasing | QPainter::TextAntialiasing);
+
+    //绘制背景和边框
+    drawBg(&painter);
+
+    //优先绘制选中状态,其次绘制悬停状态
+    if (d->select)
+    {
+        drawBgCurrent(&painter, d->selectBgColor);
+    }
+    else if (d->hover)
+    {
+        drawBgCurrent(&painter, d->hoverBgColor);
+    }
+
+    //绘制日期
+    drawDay(&painter);
+
+    //绘制农历信息
+    drawLunar(&painter);
+}
+
+void KMiniCalendarItem::drawBg(QPainter *painter)
+{
+    Q_D(KMiniCalendarItem);
+    painter->save();
+
+    //根据当前类型选择对应的颜色
+    QColor bgColor = d->currentBgColor;
+
+    if (d->dayType == DayType_MonthPre || d->dayType == DayType_MonthNext)
+    {
+        bgColor = d->otherBgColor;
+    }
+
+    if(getEnableBorder())
+        painter->setPen(d->borderColor);
+    else
+        painter->setPen(bgColor);
+
+    painter->setBrush(bgColor);
+    painter->drawRect(rect());
+
+    painter->restore();
+}
+
+void KMiniCalendarItem::drawBgCurrent(QPainter *painter, const QColor &color)
+{
+    Q_D(KMiniCalendarItem);
+    int width = this->width();
+    int height = this->height();
+    int side = qMin(width, height);
+
+    painter->save();
+
+    painter->setPen(Qt::NoPen);
+    painter->setBrush(color);
+
+    //根据设定绘制背景样式
+    if (d->selectType == SelectType_Rect)
+    {
+        painter->drawRect(rect());
+    }
+    else if (d->selectType == SelectType_Circle)
+    {
+        int radius = side / 2;
+        painter->drawEllipse(QPointF(width / 2, height / 2), radius, radius);
+    }
+    else if (d->selectType == SelectType_Triangle)
+    {
+        int radius = side / 3;
+        QPolygon pts;
+        pts.setPoints(3, 1, 1, radius, 1, 1, radius);
+        painter->drawRect(rect());
+        painter->setBrush(d->superColor);
+        painter->drawConvexPolygon(pts);
+    }
+
+    painter->restore();
+}
+
+void KMiniCalendarItem::drawDay(QPainter *painter)
+{
+    Q_D(KMiniCalendarItem);
+    int width = this->width();
+    int height = this->height();
+    int side = qMin(width, height);
+
+    painter->save();
+
+    //根据当前类型选择对应的颜色
+    QColor color = d->currentTextColor;
+
+    if (d->dayType == DayType_MonthPre || d->dayType == DayType_MonthNext)
+    {
+        color = d->otherTextColor;
+    }
+    else if (d->dayType == DayType_WeekEnd)
+    {
+        color = d->weekColor;
+    }
+
+    if (d->select)
+    {
+        color = d->selectTextColor;
+    }
+    else if (d->hover)
+    {
+        color = d->hoverTextColor;
+    }
+
+    painter->setPen(color);
+
+    if (d->showLunar)
+    {
+        QFont font;
+        font.setPixelSize(side / 2.7);
+        painter->setFont(font);
+
+        QRect dayRect = QRect(0, 0, width, height / 1.5);
+        painter->drawText(dayRect, Qt::AlignHCenter | Qt::AlignBottom, QString::number(d->date.day()));
+    }
+    else
+    {
+        QFont font;
+        font.setPixelSize(side / 2);
+        painter->setFont(font);
+
+        QRect dayRect = QRect(0, 0, width, height);
+        painter->drawText(dayRect, Qt::AlignCenter, QString::number(d->date.day()));
+    }
+
+    painter->restore();
+}
+
+void KMiniCalendarItem::drawLunar(QPainter *painter)
+{
+    Q_D(KMiniCalendarItem);
+
+    if (!d->showLunar)
+    {
+        return;
+    }
+
+    int width = this->width();
+    int height = this->height();
+    int side = qMin(width, height);
+
+    painter->save();
+
+    QStringList listDayName;
+    listDayName << "*" << "初一" << "初二" << "初三" << "初四" << "初五" << "初六" << "初七" << "初八" << "初九" << "初十"
+                << "十一" << "十二" << "十三" << "十四" << "十五" << "十六" << "十七" << "十八" << "十九" << "二十"
+                << "廿一" << "廿二" << "廿三" << "廿四" << "廿五" << "廿六" << "廿七" << "廿八" << "廿九" << "三十";
+
+    //根据当前类型选择对应的颜色
+    QColor color = d->currentLunarColor;
+
+    if (d->dayType == DayType_MonthPre || d->dayType == DayType_MonthNext)
+    {
+        color = d->otherLunarColor;
+    }
+
+    if (d->select)
+    {
+        color = d->selectTextColor;
+    }
+    else if (d->hover)
+    {
+        color = d->hoverTextColor;
+    }
+
+    painter->setPen(color);
+
+    QFont font;
+    font.setPixelSize(side / 4);
+    font.setBold(true);
+    painter->setFont(font);
+
+    QRect lunarRect(0, height / 2, width, height / 2.2);
+    painter->drawText(lunarRect, Qt::AlignCenter, d->lunar);
+
+    painter->restore();
+}
+
+bool KMiniCalendarItem::getSelect() const
+{
+    Q_D(const KMiniCalendarItem);
+    return d->select;
+}
+
+bool KMiniCalendarItem::getShowLunar() const
+{
+    Q_D(const KMiniCalendarItem);
+    return d->showLunar;
+}
+
+bool KMiniCalendarItem::getEnableBorder() const
+{
+    Q_D(const KMiniCalendarItem);
+    return d->enableBorder;
+}
+
+KMiniCalendarItem::SelectType KMiniCalendarItem::getSelectType() const
+{
+    Q_D(const KMiniCalendarItem);
+    return d->selectType;
+}
+
+QDate KMiniCalendarItem::getDate() const
+{
+    Q_D(const KMiniCalendarItem);
+    return d->date;
+}
+
+QString KMiniCalendarItem::getLunar() const
+{
+    Q_D(const KMiniCalendarItem);
+    return d->lunar;
+}
+
+KMiniCalendarItem::DayType KMiniCalendarItem::getDayType() const
+{
+    Q_D(const KMiniCalendarItem);
+    return d->dayType;
+}
+
+QColor KMiniCalendarItem::getBorderColor() const
+{
+    Q_D(const KMiniCalendarItem);
+    return d->borderColor;
+}
+
+QColor KMiniCalendarItem::getWeekColor() const
+{
+    Q_D(const KMiniCalendarItem);
+    return d->weekColor;
+}
+
+QColor KMiniCalendarItem::getSuperColor() const
+{
+    Q_D(const KMiniCalendarItem);
+    return d->superColor;
+}
+
+QColor KMiniCalendarItem::getLunarColor() const
+{
+    Q_D(const KMiniCalendarItem);
+    return d->lunarColor;
+}
+
+QColor KMiniCalendarItem::getCurrentTextColor() const
+{
+    Q_D(const KMiniCalendarItem);
+    return d->currentTextColor;
+}
+
+QColor KMiniCalendarItem::getOtherTextColor() const
+{
+    Q_D(const KMiniCalendarItem);
+    return d->otherTextColor;
+}
+
+QColor KMiniCalendarItem::getSelectTextColor() const
+{
+    Q_D(const KMiniCalendarItem);
+    return d->selectTextColor;
+}
+
+QColor KMiniCalendarItem::getHoverTextColor() const
+{
+    Q_D(const KMiniCalendarItem);
+    return d->hoverTextColor;
+}
+
+QColor KMiniCalendarItem::getCurrentLunarColor() const
+{
+    Q_D(const KMiniCalendarItem);
+    return d->currentLunarColor;
+}
+
+QColor KMiniCalendarItem::getOtherLunarColor() const
+{
+    Q_D(const KMiniCalendarItem);
+    return d->otherLunarColor;
+}
+
+QColor KMiniCalendarItem::getSelectLunarColor() const
+{
+    Q_D(const KMiniCalendarItem);
+    return d->selectLunarColor;
+}
+
+QColor KMiniCalendarItem::getHoverLunarColor() const
+{
+    Q_D(const KMiniCalendarItem);
+    return d->hoverLunarColor;
+}
+
+QColor KMiniCalendarItem::getCurrentBgColor() const
+{
+    Q_D(const KMiniCalendarItem);
+    return d->currentBgColor;
+}
+
+QColor KMiniCalendarItem::getOtherBgColor() const
+{
+    Q_D(const KMiniCalendarItem);
+    return d->otherBgColor;
+}
+
+QColor KMiniCalendarItem::getSelectBgColor() const
+{
+    Q_D(const KMiniCalendarItem);
+    return d->selectBgColor;
+}
+
+QColor KMiniCalendarItem::getHoverBgColor() const
+{
+    Q_D(const KMiniCalendarItem);
+    return d->hoverBgColor;
+}
+
+QSize KMiniCalendarItem::sizeHint() const
+{
+    Q_D(const KMiniCalendarItem);
+    return QSize(100, 100);
+}
+
+QSize KMiniCalendarItem::minimumSizeHint() const
+{
+    Q_D(const KMiniCalendarItem);
+    return QSize(20, 20);
+}
+
+void KMiniCalendarItem::setSelect(bool select)
+{
+    Q_D(KMiniCalendarItem);
+
+    if (d->select != select)
+    {
+        d->select = select;
+        update();
+    }
+}
+
+void KMiniCalendarItem::setShowLunar(bool showLunar)
+{
+    Q_D(KMiniCalendarItem);
+
+    if (d->showLunar != showLunar)
+    {
+        d->showLunar = showLunar;
+        update();
+    }
+}
+
+void KMiniCalendarItem::setSelectType(const KMiniCalendarItem::SelectType &selectType)
+{
+    Q_D(KMiniCalendarItem);
+
+    if(d->selectType != selectType)
+    {
+        d->selectType = selectType;
+        update();
+    }
+}
+
+void KMiniCalendarItem::setDate(const QDate &date)
+{
+    Q_D(KMiniCalendarItem);
+
+    if (d->date != date)
+    {
+        d->date = date;
+        update();
+    }
+}
+
+void KMiniCalendarItem::setLunar(const QString &lunar)
+{
+    Q_D(KMiniCalendarItem);
+
+    if (d->lunar != lunar)
+    {
+        d->lunar = lunar;
+        update();
+    }
+}
+
+void KMiniCalendarItem::setDayType(const DayType &dayType)
+{
+    Q_D(KMiniCalendarItem);
+
+    if (d->dayType != dayType)
+    {
+        d->dayType = dayType;
+        update();
+    }
+}
+
+void KMiniCalendarItem::setDate(const QDate &date, const QString &lunar, const DayType &dayType)
+{
+    Q_D(KMiniCalendarItem);
+    d->date = date;
+    d->lunar = lunar;
+    d->dayType = dayType;
+    update();
+}
+
+void KMiniCalendarItem::setEnableBorder(bool bVisible)
+{
+    Q_D(KMiniCalendarItem);
+
+    if (d->enableBorder != bVisible)
+    {
+        d->enableBorder = bVisible;
+        update();
+    }
+}
+
+void KMiniCalendarItem::setBorderColor(const QColor &borderColor)
+{
+    Q_D(KMiniCalendarItem);
+
+    if (d->borderColor != borderColor)
+    {
+        d->borderColor = borderColor;
+        update();
+    }
+}
+
+void KMiniCalendarItem::setWeekColor(const QColor &weekColor)
+{
+    Q_D(KMiniCalendarItem);
+
+    if (d->weekColor != weekColor)
+    {
+        d->weekColor = weekColor;
+        update();
+    }
+}
+
+void KMiniCalendarItem::setSuperColor(const QColor &superColor)
+{
+    Q_D(KMiniCalendarItem);
+
+    if (d->superColor != superColor)
+    {
+        d->superColor = superColor;
+        update();
+    }
+}
+
+void KMiniCalendarItem::setLunarColor(const QColor &lunarColor)
+{
+    Q_D(KMiniCalendarItem);
+
+    if (d->lunarColor != lunarColor)
+    {
+        d->lunarColor = lunarColor;
+        update();
+    }
+}
+
+void KMiniCalendarItem::setCurrentTextColor(const QColor &currentTextColor)
+{
+    Q_D(KMiniCalendarItem);
+
+    if (d->currentTextColor != currentTextColor)
+    {
+        d->currentTextColor = currentTextColor;
+        update();
+    }
+}
+
+void KMiniCalendarItem::setOtherTextColor(const QColor &otherTextColor)
+{
+    Q_D(KMiniCalendarItem);
+
+    if (d->otherTextColor != otherTextColor)
+    {
+        d->otherTextColor = otherTextColor;
+        update();
+    }
+}
+
+void KMiniCalendarItem::setSelectTextColor(const QColor &selectTextColor)
+{
+    Q_D(KMiniCalendarItem);
+
+    if (d->selectTextColor != selectTextColor)
+    {
+        d->selectTextColor = selectTextColor;
+        update();
+    }
+}
+
+void KMiniCalendarItem::setHoverTextColor(const QColor &hoverTextColor)
+{
+    Q_D(KMiniCalendarItem);
+
+    if (d->hoverTextColor != hoverTextColor)
+    {
+        d->hoverTextColor = hoverTextColor;
+        update();
+    }
+}
+
+void KMiniCalendarItem::setCurrentLunarColor(const QColor &currentLunarColor)
+{
+    Q_D(KMiniCalendarItem);
+
+    if (d->currentLunarColor != currentLunarColor)
+    {
+        d->currentLunarColor = currentLunarColor;
+        update();
+    }
+}
+
+void KMiniCalendarItem::setOtherLunarColor(const QColor &otherLunarColor)
+{
+    Q_D(KMiniCalendarItem);
+
+    if (d->otherLunarColor != otherLunarColor)
+    {
+        d->otherLunarColor = otherLunarColor;
+        update();
+    }
+}
+
+void KMiniCalendarItem::setSelectLunarColor(const QColor &selectLunarColor)
+{
+    Q_D(KMiniCalendarItem);
+
+    if (d->selectLunarColor != selectLunarColor)
+    {
+        d->selectLunarColor = selectLunarColor;
+        update();
+    }
+}
+
+void KMiniCalendarItem::setHoverLunarColor(const QColor &hoverLunarColor)
+{
+    Q_D(KMiniCalendarItem);
+
+    if (d->hoverLunarColor != hoverLunarColor)
+    {
+        d->hoverLunarColor = hoverLunarColor;
+        update();
+    }
+}
+
+void KMiniCalendarItem::setCurrentBgColor(const QColor &currentBgColor)
+{
+    Q_D(KMiniCalendarItem);
+
+    if (d->currentBgColor != currentBgColor)
+    {
+        d->currentBgColor = currentBgColor;
+        update();
+    }
+}
+
+void KMiniCalendarItem::setOtherBgColor(const QColor &otherBgColor)
+{
+    Q_D(KMiniCalendarItem);
+
+    if (d->otherBgColor != otherBgColor)
+    {
+        d->otherBgColor = otherBgColor;
+        update();
+    }
+}
+
+void KMiniCalendarItem::setSelectBgColor(const QColor &selectBgColor)
+{
+    Q_D(KMiniCalendarItem);
+
+    if (d->selectBgColor != selectBgColor)
+    {
+        d->selectBgColor = selectBgColor;
+        update();
+    }
+}
+
+void KMiniCalendarItem::setHoverBgColor(const QColor &hoverBgColor)
+{
+    Q_D(KMiniCalendarItem);
+
+    if (d->hoverBgColor != hoverBgColor)
+    {
+        d->hoverBgColor = hoverBgColor;
+        update();
+    }
+}
+}
+
+#include "kminicalendaritem.moc"
+#include "moc_kminicalendaritem.cpp"
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kminicalendaritem.h libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kminicalendaritem.h
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kminicalendaritem.h	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kminicalendaritem.h	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,288 @@
+#ifndef KMINICALENDARITEM_H
+#define KMINICALENDARITEM_H
+
+#include "gui_g.h"
+#include <QWidget>
+#include <QDate>
+
+namespace kdk
+{
+
+/**
+ *  @defgroup KMiniCalendarItem
+ *  @since 2.5
+ */
+
+
+class KMiniCalendarItemPrivate;
+class GUI_EXPORT KMiniCalendarItem : public QWidget
+{
+    Q_OBJECT
+    Q_ENUMS(DayType)
+    Q_ENUMS(SelectType)
+
+    Q_PROPERTY(bool select READ getSelect WRITE setSelect)
+    Q_PROPERTY(bool showLunar READ getShowLunar WRITE setShowLunar)
+    Q_PROPERTY(bool enableBorder READ getEnableBorder WRITE setEnableBorder)
+    Q_PROPERTY(SelectType selectType READ getSelectType WRITE setSelectType)
+
+    Q_PROPERTY(QDate date READ getDate WRITE setDate)
+    Q_PROPERTY(QString lunar READ getLunar WRITE setLunar)
+    Q_PROPERTY(DayType dayType READ getDayType WRITE setDayType)
+
+    Q_PROPERTY(QColor borderColor READ getBorderColor WRITE setBorderColor)
+    Q_PROPERTY(QColor weekColor READ getWeekColor WRITE setWeekColor)
+    Q_PROPERTY(QColor superColor READ getSuperColor WRITE setSuperColor)
+    Q_PROPERTY(QColor lunarColor READ getLunarColor WRITE setLunarColor)
+
+    Q_PROPERTY(QColor currentTextColor READ getCurrentTextColor WRITE setCurrentTextColor)
+    Q_PROPERTY(QColor otherTextColor READ getOtherTextColor WRITE setOtherTextColor)
+    Q_PROPERTY(QColor selectTextColor READ getSelectTextColor WRITE setSelectTextColor)
+    Q_PROPERTY(QColor hoverTextColor READ getHoverTextColor WRITE setHoverTextColor)
+
+    Q_PROPERTY(QColor currentLunarColor READ getCurrentLunarColor WRITE setCurrentLunarColor)
+    Q_PROPERTY(QColor otherLunarColor READ getOtherLunarColor WRITE setOtherLunarColor)
+    Q_PROPERTY(QColor selectLunarColor READ getSelectLunarColor WRITE setSelectLunarColor)
+    Q_PROPERTY(QColor hoverLunarColor READ getHoverLunarColor WRITE setHoverLunarColor)
+
+    Q_PROPERTY(QColor currentBgColor READ getCurrentBgColor WRITE setCurrentBgColor)
+    Q_PROPERTY(QColor otherBgColor READ getOtherBgColor WRITE setOtherBgColor)
+    Q_PROPERTY(QColor selectBgColor READ getSelectBgColor WRITE setSelectBgColor)
+    Q_PROPERTY(QColor hoverBgColor READ getHoverBgColor WRITE setHoverBgColor)
+
+public:
+    enum DayType
+    {
+        DayType_MonthPre = 0,       // 上月剩余天数
+        DayType_MonthNext = 1,      // 下个月的天数
+        DayType_MonthCurrent = 2,   // 当月天数
+        DayType_WeekEnd = 3         // 周末
+    };
+
+    enum SelectType
+    {
+        SelectType_Rect = 0,        //矩形背景
+        SelectType_Circle = 1,      //圆形背景
+        SelectType_Triangle = 2,    //带三角标
+        SelectType_Image = 3        //图片背景
+    };
+
+    explicit KMiniCalendarItem(QWidget *parent = 0);
+
+protected:
+    void enterEvent(QEvent *);
+    void leaveEvent(QEvent *);
+    void mousePressEvent(QMouseEvent *);
+    void mouseReleaseEvent(QMouseEvent *);
+    void paintEvent(QPaintEvent *);
+    void drawBg(QPainter *painter);
+    void drawBgCurrent(QPainter *painter, const QColor &color);
+    void drawDay(QPainter *painter);
+    void drawLunar(QPainter *painter);
+
+public:
+    /**
+     * @brief 获取是否选中
+     * @return
+     */
+    bool getSelect()                const;
+
+    /**
+     * @brief 获取是否显示农历
+     * @return
+     */
+    bool getShowLunar()             const;
+
+    /**
+     * @brief 获取启用边界
+     * @return
+     */
+    bool getEnableBorder()          const;
+
+    /**
+     * @brief 获取选择类型
+     * @return
+     */
+    SelectType getSelectType()      const;
+
+    /**
+     * @brief 获取当前日期
+     * @return
+     */
+    QDate getDate()                 const;
+
+    /**
+     * @brief 获取农历信息
+     * @return
+     */
+    QString getLunar()              const;
+
+    /**
+     * @brief 获取日期类型
+     * @return
+     */
+    DayType getDayType()            const;
+
+    /**
+     * @brief 获取边框颜色
+     * @return
+     */
+    QColor getBorderColor()         const;
+
+    /**
+     * @brief 获取周颜色
+     * @return
+     */
+    QColor getWeekColor()           const;
+
+    /**
+     * @brief 获取角标颜色
+     * @return
+     */
+    QColor getSuperColor()          const;
+
+    /**
+     * @brief 获取农历节日颜色
+     * @return
+     */
+    QColor getLunarColor()          const;
+
+    /**
+     * @brief 获取当前月文字颜色
+     * @return
+     */
+    QColor getCurrentTextColor()    const;
+
+    /**
+     * @brief 获取其他月文字颜色
+     * @return
+     */
+    QColor getOtherTextColor()      const;
+
+    /**
+     * @brief 获取选中日期文字颜色
+     * @return
+     */
+    QColor getSelectTextColor()     const;
+
+    /**
+     * @brief 获取悬停日期文字颜色
+     * @return
+     */
+    QColor getHoverTextColor()      const;
+
+    /**
+     * @brief 获取当前月农历文字颜色
+     * @return
+     */
+    QColor getCurrentLunarColor()   const;
+
+    /**
+     * @brief 获取其他月农历文字颜色
+     * @return
+     */
+    QColor getOtherLunarColor()     const;
+
+    /**
+     * @brief 获取选中日期农历文字颜色
+     * @return
+     */
+    QColor getSelectLunarColor()    const;
+
+    /**
+     * @brief 获取悬停日期农历文字颜色
+     * @return
+     */
+    QColor getHoverLunarColor()     const;
+
+    /**
+     * @brief 获取当前月背景颜色
+     * @return
+     */
+    QColor getCurrentBgColor()      const;
+
+    /**
+     * @brief 获取其他月背景颜色
+     * @return
+     */
+    QColor getOtherBgColor()        const;
+
+    /**
+     * @brief 获取选中日期背景颜色
+     * @return
+     */
+    QColor getSelectBgColor()       const;
+
+    /**
+     * @brief 获取悬停日期背景颜色
+     * @return
+     */
+    QColor getHoverBgColor()        const;
+
+    QSize sizeHint()                const;
+    QSize minimumSizeHint()         const;
+
+public Q_SLOTS:
+    //设置是否选中
+    void setSelect(bool select);
+    //设置是否显示农历信息
+    void setShowLunar(bool showLunar);
+    //设置选中背景样式
+    void setSelectType(const SelectType &selectType);
+
+    //设置日期
+    void setDate(const QDate &date);
+    //设置农历
+    void setLunar(const QString &lunar);
+    //设置类型
+    void setDayType(const DayType &dayType);
+    //设置日期/农历/类型
+    void setDate(const QDate &date, const QString &lunar, const DayType &dayType);
+    //是否显示边框
+    void setEnableBorder(bool bVisible);
+    //设置边框颜色
+    void setBorderColor(const QColor &borderColor);
+    //设置周末颜色
+    void setWeekColor(const QColor &weekColor);
+    //设置角标颜色
+    void setSuperColor(const QColor &superColor);
+    //设置农历节日颜色
+    void setLunarColor(const QColor &lunarColor);
+
+    //设置当前月文字颜色
+    void setCurrentTextColor(const QColor &currentTextColor);
+    //设置其他月文字颜色
+    void setOtherTextColor(const QColor &otherTextColor);
+    //设置选中日期文字颜色
+    void setSelectTextColor(const QColor &selectTextColor);
+    //设置悬停日期文字颜色
+    void setHoverTextColor(const QColor &hoverTextColor);
+
+    //设置当前月农历文字颜色
+    void setCurrentLunarColor(const QColor &currentLunarColor);
+    //设置其他月农历文字颜色
+    void setOtherLunarColor(const QColor &otherLunarColor);
+    //设置选中日期农历文字颜色
+    void setSelectLunarColor(const QColor &selectLunarColor);
+    //设置悬停日期农历文字颜色
+    void setHoverLunarColor(const QColor &hoverLunarColor);
+
+    //设置当前月背景颜色
+    void setCurrentBgColor(const QColor &currentBgColor);
+    //设置其他月背景颜色
+    void setOtherBgColor(const QColor &otherBgColor);
+    //设置选中日期背景颜色
+    void setSelectBgColor(const QColor &selectBgColor);
+    //设置悬停日期背景颜色
+    void setHoverBgColor(const QColor &hoverBgColor);
+
+signals:
+    void clicked(const QDate &date, const KMiniCalendarItem::DayType &dayType);
+
+private:
+    Q_DECLARE_PRIVATE(KMiniCalendarItem)
+    KMiniCalendarItemPrivate* const d_ptr;
+};
+}
+
+#endif // KMINICALENDARITEM_H
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kminicalendarwidget.cpp libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kminicalendarwidget.cpp
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kminicalendarwidget.cpp	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kminicalendarwidget.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,966 @@
+#pragma execution_character_set("utf-8")
+
+#include "kminicalendarwidget.h"
+#include "qfontdatabase.h"
+#include "qdatetime.h"
+#include "qlayout.h"
+#include <QPainter>
+#include <QPainterPath>
+#include "kpushbutton.h"
+#include "kborderlessbutton.h"
+
+namespace kdk
+{
+class KMiniCalendarWidgetPrivate : public QObject
+{
+    Q_DECLARE_PUBLIC(KMiniCalendarWidget)
+    Q_OBJECT
+public:
+    KMiniCalendarWidgetPrivate(KMiniCalendarWidget* parent);
+
+private:
+    KMiniCalendarWidget* q_ptr;
+    KMiniCalendarWidget::CalendarStyle calendarStyle;        //整体样式
+    KMiniCalendarWidget::WeekNameFormat weekNameFormat;      //星期名称格式
+    KMiniCalendarWidget::SelectType selectType;              //选中模式
+    bool btnClick;                      //按钮单击,避开下拉选择重复触发
+    QLabel *labelYearMonth;             //年月
+    QList<QLabel *> labWeeks;           //顶部星期名称
+    QList<KMiniCalendarItem *> dayItems;//日期元素
+
+    QDate date;                         //当前日期
+
+    QColor weekTextColor;               //星期名称文字颜色
+    QColor weekBgColor;                 //星期名称背景色
+
+    bool showLunar;                     //显示农历
+    bool enableBorder;                  //显示边框
+
+    QColor borderColor;                 //边框颜色
+    QColor weekColor;                   //周末颜色
+    QColor lunarColor;                  //农历节日颜色
+
+    QColor currentTextColor;            //当前月文字颜色
+    QColor otherTextColor;              //其他月文字颜色
+    QColor selectTextColor;             //选中日期文字颜色
+    QColor hoverTextColor;              //悬停日期文字颜色
+
+    QColor currentLunarColor;           //当前月农历文字颜色
+    QColor otherLunarColor;             //其他月农历文字颜色
+    QColor selectLunarColor;            //选中日期农历文字颜色
+    QColor hoverLunarColor;             //悬停日期农历文字颜色
+
+    QColor currentBgColor;              //当前月背景颜色
+    QColor otherBgColor;                //其他月背景颜色
+    QColor selectBgColor;               //选中日期背景颜色
+    QColor hoverBgColor;                //悬停日期背景颜色
+};
+
+KMiniCalendarWidgetPrivate::KMiniCalendarWidgetPrivate(KMiniCalendarWidget* parent) : q_ptr(parent)
+{
+    Q_Q(KMiniCalendarWidget);
+    btnClick = false;
+
+    calendarStyle = KMiniCalendarWidget::CalendarStyle_Red;
+    weekNameFormat = KMiniCalendarWidget::WeekNameFormat_Short;
+    date = QDate::currentDate();
+
+    weekBgColor = QColor(255, 255, 255);
+    weekBgColor = QColor(255, 255, 255);
+
+    showLunar = false;
+    enableBorder = false;
+    selectType = KMiniCalendarWidget::SelectType_Circle;
+
+    borderColor = QColor(180, 180, 180);
+    weekColor = QColor(0, 0, 0);
+    lunarColor = QColor(55, 156, 238);
+
+    currentTextColor = QColor(0, 0, 0);
+    otherTextColor = QColor(200, 200, 200);
+    selectTextColor = QColor(255, 255, 255);
+    hoverTextColor = QColor(250, 250, 250);
+
+    currentLunarColor = QColor(179, 179, 179);
+    otherLunarColor = QColor(179, 179, 179);
+    selectLunarColor = QColor(179, 179, 179);
+    hoverLunarColor = QColor(179, 179, 179);
+
+    currentBgColor = QColor(255, 255, 255);
+    otherBgColor = QColor(255, 255, 255);
+    selectBgColor = QColor(55, 144, 250);
+    hoverBgColor = QColor(180, 180, 180);
+}
+
+KMiniCalendarWidget::KMiniCalendarWidget(QWidget *parent) : QWidget(parent), d_ptr(new KMiniCalendarWidgetPrivate(this))
+{
+    Q_D(KMiniCalendarWidget);
+    setWindowFlags(Qt::Popup | Qt::FramelessWindowHint);
+    setAttribute(Qt::WA_TranslucentBackground);
+
+    initWidget();
+    initStyle();
+    initDate();
+}
+
+KMiniCalendarWidget::~KMiniCalendarWidget()
+{
+}
+
+void KMiniCalendarWidget::initWidget()
+{
+    Q_D(KMiniCalendarWidget);
+    this->setObjectName("miniCalendarWidget");
+
+    //顶部widget
+    QWidget *widgetTop = new QWidget();
+    widgetTop->setObjectName("widgetTop");
+    widgetTop->setMinimumHeight(36);
+
+    //上个月按钮
+    kdk::KBorderlessButton *btnPrevMonth = new kdk::KBorderlessButton();
+    btnPrevMonth->setObjectName("btnPrevMonth");
+    btnPrevMonth->setFixedSize(45, 36);
+    btnPrevMonth->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Expanding);
+    btnPrevMonth->setIcon(QIcon::fromTheme("ukui-start-symbolic"));
+
+    //下个月按钮
+    kdk::KBorderlessButton *btnNextMonth = new kdk::KBorderlessButton();
+    btnNextMonth->setObjectName("btnNextMonth");
+    btnNextMonth->setFixedSize(45, 36);
+    btnNextMonth->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Expanding);
+    btnNextMonth->setIcon(QIcon::fromTheme("ukui-end-symbolic"));
+
+    d->labelYearMonth = new QLabel();
+    d->labelYearMonth->setFixedSize(96, 36);
+    d->labelYearMonth->setAlignment(Qt::AlignCenter);
+    QFont labelFont;
+    labelFont.setFamily("Microsoft Yahei");
+    labelFont.setPixelSize(14);
+    d->labelYearMonth->setFont(labelFont);
+
+    //顶部横向布局
+    QHBoxLayout *layoutTop = new QHBoxLayout(widgetTop);
+    layoutTop->setContentsMargins(0, 0, 0, 0);
+    layoutTop->addWidget(btnPrevMonth);
+    layoutTop->addWidget(d->labelYearMonth);
+    layoutTop->addWidget(btnNextMonth);
+
+    //星期widget
+    QWidget *widgetWeek = new QWidget();
+    widgetWeek->setObjectName("widgetWeek");
+    widgetWeek->setMinimumHeight(30);
+
+    //星期布局
+    QHBoxLayout *layoutWeek = new QHBoxLayout(widgetWeek);
+    layoutWeek->setMargin(0);
+    layoutWeek->setSpacing(0);
+
+    for (int i = 0; i < 7; i++)
+    {
+        QLabel *lab = new QLabel;
+        lab->setAlignment(Qt::AlignCenter);
+        layoutWeek->addWidget(lab);
+        d->labWeeks.append(lab);
+    }
+
+    setWeekNameFormat(WeekNameFormat_Long);
+
+    //日期标签widget
+    QWidget *widgetBody = new QWidget();
+    widgetBody->setObjectName("widgetBody");
+
+    //日期标签布局
+    QGridLayout *layoutBody = new QGridLayout(widgetBody);
+    layoutBody->setMargin(0);
+    layoutBody->setHorizontalSpacing(0);
+    layoutBody->setVerticalSpacing(0);
+
+    //逐个添加日标签
+    for (int i = 0; i < 42; i++)
+    {
+        KMiniCalendarItem *lab = new KMiniCalendarItem();
+        lab->setObjectName("KMiniCalendarItem");
+        connect(lab, SIGNAL(clicked(QDate,KMiniCalendarItem::DayType)), this, SLOT(slotClicked(QDate,KMiniCalendarItem::DayType)));
+        layoutBody->addWidget(lab, i / 7, i % 7);
+        d->dayItems.append(lab);
+    }
+
+    //主布局
+    QVBoxLayout *verLayoutCalendar = new QVBoxLayout(this);
+    verLayoutCalendar->setContentsMargins(15, 10, 15, 15);
+    verLayoutCalendar->setSpacing(0);
+    verLayoutCalendar->addWidget(widgetTop);
+    verLayoutCalendar->addWidget(widgetWeek);
+    verLayoutCalendar->addWidget(widgetBody, 1);
+
+    //绑定按钮和下拉框信号
+    connect(btnPrevMonth, SIGNAL(clicked(bool)), this, SLOT(showPreviousMonth()));
+    connect(btnNextMonth, SIGNAL(clicked(bool)), this, SLOT(showNextMonth()));
+}
+
+void KMiniCalendarWidget::initStyle()
+{
+    Q_D(KMiniCalendarWidget);
+    //设置样式
+    QStringList qss;
+    //星期名称样式
+    qss.append(QString("QLabel{background:%1;color:%2;}").arg(d->weekBgColor.name()).arg(d->weekTextColor.name()));
+    //边框
+    qss.append("QWidget#widgetBody{border:0px;}");
+
+    //顶部下拉框
+    qss.append(QString("QToolButton{padding:0px;background:none;border:none;border-radius:5px;}"));
+    //qss.append(QString("QToolButton:hover{background:rgb(180,180,180);color:#FFFFFF;}"));
+
+    //自定义日控件颜色
+    QString strSelectType;
+
+    if (d->selectType == SelectType_Rect)
+    {
+        strSelectType = "SelectType_Rect";
+    }
+    else if (d->selectType == SelectType_Circle)
+    {
+        strSelectType = "SelectType_Circle";
+    }
+    else if (d->selectType == SelectType_Triangle)
+    {
+        strSelectType = "SelectType_Triangle";
+    }
+
+    qss.append(QString("KMiniCalendarItem{qproperty-showLunar:%1;}").arg(d->showLunar));
+    qss.append(QString("KMiniCalendarItem{qproperty-selectType:%1;}").arg(strSelectType));
+    qss.append(QString("KMiniCalendarItem{qproperty-borderColor:%1;}").arg(d->borderColor.name()));
+    qss.append(QString("KMiniCalendarItem{qproperty-weekColor:%1;}").arg(d->weekColor.name()));
+    qss.append(QString("KMiniCalendarItem{qproperty-lunarColor:%1;}").arg(d->lunarColor.name()));
+    qss.append(QString("KMiniCalendarItem{qproperty-currentTextColor:%1;}").arg(d->currentTextColor.name()));
+    qss.append(QString("KMiniCalendarItem{qproperty-otherTextColor:%1;}").arg(d->otherTextColor.name()));
+    qss.append(QString("KMiniCalendarItem{qproperty-selectTextColor:%1;}").arg(d->selectTextColor.name()));
+    qss.append(QString("KMiniCalendarItem{qproperty-hoverTextColor:%1;}").arg(d->hoverTextColor.name()));
+    qss.append(QString("KMiniCalendarItem{qproperty-currentLunarColor:%1;}").arg(d->currentLunarColor.name()));
+    qss.append(QString("KMiniCalendarItem{qproperty-otherLunarColor:%1;}").arg(d->otherLunarColor.name()));
+    qss.append(QString("KMiniCalendarItem{qproperty-selectLunarColor:%1;}").arg(d->selectLunarColor.name()));
+    qss.append(QString("KMiniCalendarItem{qproperty-hoverLunarColor:%1;}").arg(d->hoverLunarColor.name()));
+    qss.append(QString("KMiniCalendarItem{qproperty-currentBgColor:%1;}").arg(d->currentBgColor.name()));
+    qss.append(QString("KMiniCalendarItem{qproperty-otherBgColor:%1;}").arg(d->otherBgColor.name()));
+    qss.append(QString("KMiniCalendarItem{qproperty-selectBgColor:%1;}").arg(d->selectBgColor.name()));
+    qss.append(QString("KMiniCalendarItem{qproperty-hoverBgColor:%1;}").arg(d->hoverBgColor.name()));
+
+    for(KMiniCalendarItem * dayItem : d->dayItems)
+    {
+        dayItem->setShowLunar(d->showLunar);
+        dayItem->setSelectType(static_cast<kdk::KMiniCalendarItem::SelectType>(d->selectType));
+        dayItem->setBorderColor(d->borderColor.name());
+        dayItem->setWeekColor(d->weekColor.name());
+        dayItem->setLunarColor(d->lunarColor.name());
+        dayItem->setCurrentTextColor(d->currentTextColor.name());
+        dayItem->setOtherTextColor(d->otherTextColor.name());
+        dayItem->setSelectTextColor(d->selectTextColor.name());
+        dayItem->setHoverTextColor(d->hoverTextColor.name());
+        dayItem->setCurrentLunarColor(d->currentLunarColor.name());
+        dayItem->setOtherLunarColor(d->otherLunarColor.name());
+        dayItem->setSelectLunarColor(d->selectLunarColor.name());
+        dayItem->setHoverLunarColor(d->hoverLunarColor.name());
+        dayItem->setCurrentBgColor(d->currentBgColor.name());
+        dayItem->setOtherBgColor(d->otherBgColor.name());
+        dayItem->setSelectBgColor(d->selectBgColor.name());
+        dayItem->setHoverBgColor(d->hoverBgColor.name());
+    }
+
+    this->setStyleSheet(qss.join(""));
+}
+
+//初始化日期面板
+void KMiniCalendarWidget::initDate()
+{
+    Q_D(KMiniCalendarWidget);
+    int year = d->date.year();
+    int month = d->date.month();
+
+    //设置为今天,设置变量防止重复触发
+    d->btnClick = true;
+    d->labelYearMonth->setText(QString("%1年%2月").arg(year).arg(month));
+    d->btnClick = false;
+
+    //首先判断当前月的第一天是星期几
+    int week = KLunarCalendarInfo::Instance()->getFirstDayOfWeek(year, month, false);
+    //当前月天数
+    int countDay = KLunarCalendarInfo::Instance()->getMonthDays(year, month);
+    //上月天数
+    int countDayPre = KLunarCalendarInfo::Instance()->getMonthDays(1 == month ? year - 1 : year, 1 == month ? 12 : month - 1);
+
+    //如果上月天数上月刚好一周则另外处理
+    int startPre, endPre, startNext, endNext, index, tempYear, tempMonth, tempDay;
+
+    if (0 == week)
+    {
+        startPre = 0;
+        endPre = 7;
+        startNext = 0;
+        endNext = 42 - (countDay + 7);
+    }
+    else
+    {
+        startPre = 0;
+        endPre = week;
+        startNext = week + countDay;
+        endNext = 42;
+    }
+
+    //纠正1月份前面部分偏差,1月份前面部分是上一年12月份
+    tempYear = year;
+    tempMonth = month - 1;
+
+    if (tempMonth < 1)
+    {
+        tempYear--;
+        tempMonth = 12;
+    }
+
+    //显示上月天数
+    for (int i = startPre; i < endPre; i++)
+    {
+        index = i;
+        tempDay = countDayPre - endPre + i + 1;
+
+        QDate date(tempYear, tempMonth, tempDay);
+        QString lunar = KLunarCalendarInfo::Instance()->getLunarDay(tempYear, tempMonth, tempDay);
+        d->dayItems.at(index)->setDate(date, lunar, KMiniCalendarItem::DayType_MonthPre);
+    }
+
+    //纠正12月份后面部分偏差,12月份后面部分是下一年1月份
+    tempYear = year;
+    tempMonth = month + 1;
+
+    if (tempMonth > 12)
+    {
+        tempYear++;
+        tempMonth = 1;
+    }
+
+    //显示下月天数
+    for (int i = startNext; i < endNext; i++)
+    {
+        index = 42 - endNext + i;
+        tempDay = i - startNext + 1;
+
+        QDate date(tempYear, tempMonth, tempDay);
+        QString lunar = KLunarCalendarInfo::Instance()->getLunarDay(tempYear, tempMonth, tempDay);
+        d->dayItems.at(index)->setDate(date, lunar, KMiniCalendarItem::DayType_MonthNext);
+    }
+
+    //重新置为当前年月
+    tempYear = year;
+    tempMonth = month;
+
+    //显示当前月
+    for (int i = week; i < (countDay + week); i++)
+    {
+        index = (0 == week ? (i + 7) : i);
+        tempDay = i - week + 1;
+
+        QDate date(tempYear, tempMonth, tempDay);
+        QString lunar = KLunarCalendarInfo::Instance()->getLunarDay(tempYear, tempMonth, tempDay);
+
+        if (0 == (i % 7) || 6 == (i % 7))
+        {
+            d->dayItems.at(index)->setDate(date, lunar, KMiniCalendarItem::DayType_WeekEnd);
+        }
+        else
+        {
+            d->dayItems.at(index)->setDate(date, lunar, KMiniCalendarItem::DayType_MonthCurrent);
+        }
+    }
+
+    dayChanged(d->date);
+}
+
+void KMiniCalendarWidget::slotClicked(const QDate &date, const KMiniCalendarItem::DayType &dayType)
+{
+    Q_D(KMiniCalendarWidget);
+    d->date = date;
+
+    if (KMiniCalendarItem::DayType_MonthPre == dayType)
+    {
+        d->date = date.addMonths(1);
+        showPreviousMonth();
+    }
+    else if (KMiniCalendarItem::DayType_MonthNext == dayType)
+    {
+        d->date = date.addMonths(-1);
+        showNextMonth();
+    }
+    else
+    {
+        dayChanged(d->date);
+    }
+
+    this->close();
+}
+
+void KMiniCalendarWidget::dayChanged(const QDate &date)
+{
+    Q_D(KMiniCalendarWidget);
+    //计算星期几,当前天对应标签索引=日期+星期几-1
+    int year = date.year();
+    int month = date.month();
+    int day = date.day();
+    int week = KLunarCalendarInfo::Instance()->getFirstDayOfWeek(year, month, false);
+    //qDebug() << QString("%1-%2-%3").arg(year).arg(month).arg(day);
+
+    //选中当前日期,其他日期恢复,这里还有优化空间,比方说类似单选框机制
+    for (int i = 0; i < 42; i++)
+    {
+        //当月第一天是星期天要另外计算
+        int index = day + week - 1;
+
+        if (week == 0)
+        {
+            index = day + 6;
+        }
+
+        d->dayItems.at(i)->setSelect(i == index);
+    }
+
+    //发送日期单击信号
+    emit clicked(date);
+    //发送日期更新信号
+    emit selectionChanged();
+}
+
+void KMiniCalendarWidget::dateChanged(int year, int month, int day)
+{
+    Q_D(KMiniCalendarWidget);
+    //如果原有天大于28则设置为1,防止出错
+    d->date.setDate(year, month, day > 28 ? 1 : day);
+    initDate();
+}
+
+KMiniCalendarWidget::CalendarStyle KMiniCalendarWidget::getCalendarStyle() const
+{
+    Q_D(const KMiniCalendarWidget);
+    return d->calendarStyle;
+}
+
+KMiniCalendarWidget::WeekNameFormat KMiniCalendarWidget::getWeekNameFormat() const
+{
+    Q_D(const KMiniCalendarWidget);
+    return d->weekNameFormat;
+}
+
+QDate KMiniCalendarWidget::getDate() const
+{
+    Q_D(const KMiniCalendarWidget);
+    return d->date;
+}
+
+QColor KMiniCalendarWidget::getWeekTextColor() const
+{
+    Q_D(const KMiniCalendarWidget);
+    return d->weekTextColor;
+}
+
+QColor KMiniCalendarWidget::getWeekBgColor() const
+{
+    Q_D(const KMiniCalendarWidget);
+    return d->weekBgColor;
+}
+
+bool KMiniCalendarWidget::getShowLunar() const
+{
+    Q_D(const KMiniCalendarWidget);
+    return d->showLunar;
+}
+
+bool KMiniCalendarWidget::getEnableBorder() const
+{
+    Q_D(const KMiniCalendarWidget);
+    return d->enableBorder;
+}
+
+KMiniCalendarWidget::SelectType KMiniCalendarWidget::getSelectType() const
+{
+    Q_D(const KMiniCalendarWidget);
+    return d->selectType;
+}
+
+QColor KMiniCalendarWidget::getBorderColor() const
+{
+    Q_D(const KMiniCalendarWidget);
+    return d->borderColor;
+}
+
+QColor KMiniCalendarWidget::getWeekColor() const
+{
+    Q_D(const KMiniCalendarWidget);
+    return d->weekColor;
+}
+
+QColor KMiniCalendarWidget::getLunarColor() const
+{
+    Q_D(const KMiniCalendarWidget);
+    return d->lunarColor;
+}
+
+QColor KMiniCalendarWidget::getCurrentTextColor() const
+{
+    Q_D(const KMiniCalendarWidget);
+    return d->currentTextColor;
+}
+
+QColor KMiniCalendarWidget::getOtherTextColor() const
+{
+    Q_D(const KMiniCalendarWidget);
+    return d->otherTextColor;
+}
+
+QColor KMiniCalendarWidget::getSelectTextColor() const
+{
+    Q_D(const KMiniCalendarWidget);
+    return d->selectTextColor;
+}
+
+QColor KMiniCalendarWidget::getHoverTextColor() const
+{
+    Q_D(const KMiniCalendarWidget);
+    return d->hoverTextColor;
+}
+
+QColor KMiniCalendarWidget::getCurrentLunarColor() const
+{
+    Q_D(const KMiniCalendarWidget);
+    return d->currentLunarColor;
+}
+
+QColor KMiniCalendarWidget::getOtherLunarColor() const
+{
+    Q_D(const KMiniCalendarWidget);
+    return d->otherLunarColor;
+}
+
+QColor KMiniCalendarWidget::getSelectLunarColor() const
+{
+    Q_D(const KMiniCalendarWidget);
+    return d->selectLunarColor;
+}
+
+QColor KMiniCalendarWidget::getHoverLunarColor() const
+{
+    Q_D(const KMiniCalendarWidget);
+    return d->hoverLunarColor;
+}
+
+QColor KMiniCalendarWidget::getCurrentBgColor() const
+{
+    Q_D(const KMiniCalendarWidget);
+    return d->currentBgColor;
+}
+
+QColor KMiniCalendarWidget::getOtherBgColor() const
+{
+    Q_D(const KMiniCalendarWidget);
+    return d->otherBgColor;
+}
+
+QColor KMiniCalendarWidget::getSelectBgColor() const
+{
+    Q_D(const KMiniCalendarWidget);
+    return d->selectBgColor;
+}
+
+QColor KMiniCalendarWidget::getHoverBgColor() const
+{
+    Q_D(const KMiniCalendarWidget);
+    return d->hoverBgColor;
+}
+
+QSize KMiniCalendarWidget::sizeHint() const
+{
+    Q_D(const KMiniCalendarWidget);
+    return QSize(600, 500);
+}
+
+QSize KMiniCalendarWidget::minimumSizeHint() const
+{
+    Q_D(const KMiniCalendarWidget);
+    return QSize(200, 150);
+}
+
+//显示上月日期
+void KMiniCalendarWidget::showPreviousMonth()
+{
+    Q_D(KMiniCalendarWidget);
+    int year = d->date.year();
+    int month = d->date.month();
+    int day = d->date.day();
+
+    if (year <= 1901 && month == 1)
+    {
+        return;
+    }
+
+    month--;
+
+    if (month < 1)
+    {
+        month = 12;
+        year--;
+    }
+
+    dateChanged(year, month, day);
+}
+
+//显示下月日期
+void KMiniCalendarWidget::showNextMonth()
+{
+    Q_D(KMiniCalendarWidget);
+    int year = d->date.year();
+    int month = d->date.month();
+    int day = d->date.day();
+
+    if (year >= 2099 && month == 12)
+    {
+        return;
+    }
+
+    month++;
+
+    if (month > 12)
+    {
+        month = 1;
+        year++;
+    }
+
+    dateChanged(year, month, day);
+}
+
+//转到今天
+void KMiniCalendarWidget::showToday()
+{
+    Q_D(KMiniCalendarWidget);
+    d->date = QDate::currentDate();
+    initDate();
+    dayChanged(d->date);
+}
+
+void KMiniCalendarWidget::setCalendarStyle(const KMiniCalendarWidget::CalendarStyle &calendarStyle)
+{
+    Q_D(KMiniCalendarWidget);
+
+    if (d->calendarStyle != calendarStyle)
+    {
+        d->calendarStyle = calendarStyle;
+    }
+}
+
+void KMiniCalendarWidget::setWeekNameFormat(const KMiniCalendarWidget::WeekNameFormat &weekNameFormat)
+{
+    Q_D(KMiniCalendarWidget);
+
+    if (d->weekNameFormat != weekNameFormat)
+    {
+        d->weekNameFormat = weekNameFormat;
+
+        QStringList listWeek;
+
+        if (weekNameFormat == WeekNameFormat_Short)
+        {
+            listWeek << "一" << "二" << "三" << "四" << "五" << "六" << "日" ;
+        }
+        else if (weekNameFormat == WeekNameFormat_Normal)
+        {
+            listWeek << "周一" << "周二" << "周三" << "周四" << "周五" << "周六" << "周日";
+        }
+        else if (weekNameFormat == WeekNameFormat_Long)
+        {
+            listWeek << "星期一" << "星期二" << "星期三" << "星期四" << "星期五" << "星期六" << "星期天";
+        }
+        else if (weekNameFormat == WeekNameFormat_En)
+        {
+            listWeek << "Mon" << "Tue" << "Wed" << "Thu" << "Fri" << "Sat" << "Sun";
+        }
+
+        //逐个添加日期文字
+        for (int i = 0; i < 7; i++)
+        {
+            d->labWeeks.at(i)->setText(listWeek.at(i));
+        }
+    }
+}
+
+void KMiniCalendarWidget::setDate(const QDate &date)
+{
+    Q_D(KMiniCalendarWidget);
+
+    if (d->date != date)
+    {
+        d->date = date;
+        initDate();
+    }
+}
+
+void KMiniCalendarWidget::setWeekTextColor(const QColor &weekTextColor)
+{
+    Q_D(KMiniCalendarWidget);
+
+    if (d->weekTextColor != weekTextColor)
+    {
+        d->weekTextColor = weekTextColor;
+        initStyle();
+    }
+}
+
+void KMiniCalendarWidget::setWeekBgColor(const QColor &weekBgColor)
+{
+    Q_D(KMiniCalendarWidget);
+
+    if (d->weekBgColor != weekBgColor)
+    {
+        d->weekBgColor = weekBgColor;
+        initStyle();
+    }
+}
+
+void KMiniCalendarWidget::setShowLunar(bool showLunar)
+{
+    Q_D(KMiniCalendarWidget);
+
+    if(d->showLunar != showLunar)
+    {
+        d->showLunar = showLunar;
+        initStyle();
+    }
+}
+
+void KMiniCalendarWidget::setEnableBorder(bool bVisible)
+{
+    Q_D(KMiniCalendarWidget);
+
+    if (d->enableBorder != bVisible)
+    {
+        d->enableBorder = bVisible;
+        update();
+    }
+}
+
+void KMiniCalendarWidget::setSelectType(const KMiniCalendarWidget::SelectType &selectType)
+{
+    Q_D(KMiniCalendarWidget);
+
+    if (d->selectType != selectType)
+    {
+        d->selectType = selectType;
+        initStyle();
+    }
+}
+
+void KMiniCalendarWidget::setBorderColor(const QColor &borderColor)
+{
+    Q_D(KMiniCalendarWidget);
+
+    if (d->borderColor != borderColor)
+    {
+        d->borderColor = borderColor;
+        initStyle();
+    }
+}
+
+void KMiniCalendarWidget::setWeekColor(const QColor &weekColor)
+{
+    Q_D(KMiniCalendarWidget);
+
+    if (d->weekColor != weekColor)
+    {
+        d->weekColor = weekColor;
+        initStyle();
+    }
+}
+
+void KMiniCalendarWidget::setLunarColor(const QColor &lunarColor)
+{
+    Q_D(KMiniCalendarWidget);
+
+    if (d->lunarColor != lunarColor)
+    {
+        d->lunarColor = lunarColor;
+        initStyle();
+    }
+}
+
+void KMiniCalendarWidget::setCurrentTextColor(const QColor &currentTextColor)
+{
+    Q_D(KMiniCalendarWidget);
+
+    if (d->currentTextColor != currentTextColor)
+    {
+        d->currentTextColor = currentTextColor;
+        initStyle();
+    }
+}
+
+void KMiniCalendarWidget::setOtherTextColor(const QColor &otherTextColor)
+{
+    Q_D(KMiniCalendarWidget);
+
+    if (d->otherTextColor != otherTextColor)
+    {
+        d->otherTextColor = otherTextColor;
+        initStyle();
+    }
+}
+
+void KMiniCalendarWidget::setSelectTextColor(const QColor &selectTextColor)
+{
+    Q_D(KMiniCalendarWidget);
+
+    if (d->selectTextColor != selectTextColor)
+    {
+        d->selectTextColor = selectTextColor;
+        initStyle();
+    }
+}
+
+void KMiniCalendarWidget::setHoverTextColor(const QColor &hoverTextColor)
+{
+    Q_D(KMiniCalendarWidget);
+
+    if (d->hoverTextColor != hoverTextColor)
+    {
+        d->hoverTextColor = hoverTextColor;
+        initStyle();
+    }
+}
+
+void KMiniCalendarWidget::setCurrentLunarColor(const QColor &currentLunarColor)
+{
+    Q_D(KMiniCalendarWidget);
+
+    if (d->currentLunarColor != currentLunarColor)
+    {
+        d->currentLunarColor = currentLunarColor;
+        initStyle();
+    }
+}
+
+void KMiniCalendarWidget::setOtherLunarColor(const QColor &otherLunarColor)
+{
+    Q_D(KMiniCalendarWidget);
+
+    if (d->otherLunarColor != otherLunarColor)
+    {
+        d->otherLunarColor = otherLunarColor;
+        initStyle();
+    }
+}
+
+void KMiniCalendarWidget::setSelectLunarColor(const QColor &selectLunarColor)
+{
+    Q_D(KMiniCalendarWidget);
+
+    if (d->selectLunarColor != selectLunarColor)
+    {
+        d->selectLunarColor = selectLunarColor;
+        initStyle();
+    }
+}
+
+void KMiniCalendarWidget::setHoverLunarColor(const QColor &hoverLunarColor)
+{
+    Q_D(KMiniCalendarWidget);
+
+    if (d->hoverLunarColor != hoverLunarColor)
+    {
+        d->hoverLunarColor = hoverLunarColor;
+        initStyle();
+    }
+}
+
+void KMiniCalendarWidget::setCurrentBgColor(const QColor &currentBgColor)
+{
+    Q_D(KMiniCalendarWidget);
+
+    if (d->currentBgColor != currentBgColor)
+    {
+        d->currentBgColor = currentBgColor;
+        initStyle();
+    }
+}
+
+void KMiniCalendarWidget::setOtherBgColor(const QColor &otherBgColor)
+{
+    Q_D(KMiniCalendarWidget);
+
+    if (d->otherBgColor != otherBgColor)
+    {
+        d->otherBgColor = otherBgColor;
+        initStyle();
+    }
+}
+
+void KMiniCalendarWidget::setSelectBgColor(const QColor &selectBgColor)
+{
+    Q_D(KMiniCalendarWidget);
+
+    if (d->selectBgColor != selectBgColor)
+    {
+        d->selectBgColor = selectBgColor;
+        initStyle();
+    }
+}
+
+void KMiniCalendarWidget::setHoverBgColor(const QColor &hoverBgColor)
+{
+    Q_D(KMiniCalendarWidget);
+
+    if (d->hoverBgColor != hoverBgColor)
+    {
+        d->hoverBgColor = hoverBgColor;
+        initStyle();
+    }
+}
+
+void KMiniCalendarWidget::wheelEvent(QWheelEvent *event)
+{
+    Q_D(KMiniCalendarWidget);
+
+    if (event->angleDelta().ry() > 100)
+    {
+        showPreviousMonth();
+    }
+    else if (event->angleDelta().ry() < -100)
+    {
+        showNextMonth();
+    }
+}
+
+void KMiniCalendarWidget::paintEvent(QPaintEvent *event)
+{
+    Q_D(KMiniCalendarWidget);
+    QPainter painter(this);
+    painter.setRenderHint(QPainter::Antialiasing, true);  // 开启抗锯齿
+
+    // 圆角矩形的尺寸和圆角大小
+    QRect rect(0, 0, width(), height());
+    int radius = 12;
+
+    // 使用QPainterPath来绘制圆角矩形
+    QPainterPath path;
+    path.addRoundedRect(rect, radius, radius);
+
+    // 设置画刷
+    painter.setBrush(QBrush(d->weekBgColor));  // 设置背景色
+    // 设置画笔颜色为灰色
+    QPen pen(QColor(233, 233, 233), 1); // 创建一个灰色、宽度为1的画笔
+    painter.setPen(pen);   // 将画笔应用于QPainter
+
+    // 绘制圆角矩形(这将包括边框和背景)
+    painter.drawPath(path);
+
+    // 调用基类的paintEvent来绘制子控件(如果有的话)
+    QWidget::paintEvent(event);
+}
+}
+
+#include "kminicalendarwidget.moc"
+#include "moc_kminicalendarwidget.cpp"
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kminicalendarwidget.h libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kminicalendarwidget.h
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kminicalendarwidget.h	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kminicalendarwidget.h	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,309 @@
+#ifndef KMINICALENDARWIDGET_H
+#define KMINICALENDARWIDGET_H
+
+#include "gui_g.h"
+#include <QWidget>
+#include <QDate>
+#include <QWheelEvent>
+#include <QLabel>
+#include <QToolButton>
+#include <QComboBox>
+#include "kminicalendaritem.h"
+#include "klunarcalendarinfo.h"
+
+namespace kdk
+{
+class KMiniCalendarWidgetPrivate;
+
+/**
+ *  @defgroup KMiniCalendarWidget
+ *  @since 2.5
+ */
+
+class GUI_EXPORT KMiniCalendarWidget : public QWidget
+{
+    Q_OBJECT
+    Q_ENUMS(CalendarStyle)
+    Q_ENUMS(WeekNameFormat)
+    Q_ENUMS(SelectType)
+
+    Q_PROPERTY(CalendarStyle calendarStyle READ getCalendarStyle WRITE setCalendarStyle)
+    Q_PROPERTY(WeekNameFormat weekNameFormat READ getWeekNameFormat WRITE setWeekNameFormat)
+    Q_PROPERTY(QDate date READ getDate WRITE setDate)
+
+    Q_PROPERTY(QColor weekTextColor READ getWeekTextColor WRITE setWeekTextColor)
+    Q_PROPERTY(QColor weekBgColor READ getWeekBgColor WRITE setWeekBgColor)
+
+    Q_PROPERTY(bool showLunar READ getShowLunar WRITE setShowLunar)
+    Q_PROPERTY(bool enableBorder READ getEnableBorder WRITE setEnableBorder)
+    Q_PROPERTY(SelectType selectType READ getSelectType WRITE setSelectType)
+
+    Q_PROPERTY(QColor borderColor READ getBorderColor WRITE setBorderColor)
+    Q_PROPERTY(QColor weekColor READ getWeekColor WRITE setWeekColor)
+    Q_PROPERTY(QColor lunarColor READ getLunarColor WRITE setLunarColor)
+
+    Q_PROPERTY(QColor currentTextColor READ getCurrentTextColor WRITE setCurrentTextColor)
+    Q_PROPERTY(QColor otherTextColor READ getOtherTextColor WRITE setOtherTextColor)
+    Q_PROPERTY(QColor selectTextColor READ getSelectTextColor WRITE setSelectTextColor)
+    Q_PROPERTY(QColor hoverTextColor READ getHoverTextColor WRITE setHoverTextColor)
+
+    Q_PROPERTY(QColor currentLunarColor READ getCurrentLunarColor WRITE setCurrentLunarColor)
+    Q_PROPERTY(QColor otherLunarColor READ getOtherLunarColor WRITE setOtherLunarColor)
+    Q_PROPERTY(QColor selectLunarColor READ getSelectLunarColor WRITE setSelectLunarColor)
+    Q_PROPERTY(QColor hoverLunarColor READ getHoverLunarColor WRITE setHoverLunarColor)
+
+    Q_PROPERTY(QColor currentBgColor READ getCurrentBgColor WRITE setCurrentBgColor)
+    Q_PROPERTY(QColor otherBgColor READ getOtherBgColor WRITE setOtherBgColor)
+    Q_PROPERTY(QColor selectBgColor READ getSelectBgColor WRITE setSelectBgColor)
+    Q_PROPERTY(QColor hoverBgColor READ getHoverBgColor WRITE setHoverBgColor)
+
+public:
+    enum CalendarStyle
+    {
+        CalendarStyle_Red = 0
+    };
+
+    enum WeekNameFormat
+    {
+        WeekNameFormat_Short = 0,   //短名称模式
+        WeekNameFormat_Normal = 1,  //普通名称模式
+        WeekNameFormat_Long = 2,    //长名称模式
+        WeekNameFormat_En = 3       //英文模式
+    };
+
+    enum SelectType
+    {
+        SelectType_Rect = 0,        //矩形背景
+        SelectType_Circle = 1,      //圆形背景
+        SelectType_Triangle = 2,    //带三角标
+        SelectType_Image = 3        //图片背景
+    };
+
+    explicit KMiniCalendarWidget(QWidget *parent = 0);
+    ~KMiniCalendarWidget();
+
+public:
+    /**
+     * @brief 获取整体样式
+     * @return
+     */
+    CalendarStyle getCalendarStyle()    const;
+
+    /**
+     * @brief 获取星期名称格式
+     * @return
+     */
+    WeekNameFormat getWeekNameFormat()  const;
+
+    /**
+     * @brief 获取当前日期
+     * @return
+     */
+    QDate getDate()                     const;
+
+    /**
+     * @brief 获取星期文本颜色
+     * @return
+     */
+    QColor getWeekTextColor()           const;
+
+    /**
+     * @brief 获取周末名称背景色
+     * @return
+     */
+    QColor getWeekBgColor()             const;
+
+    /**
+     * @brief 获取农历显示
+     * @return
+     */
+    bool getShowLunar()                 const;
+
+    /**
+     * @brief 获取启用边框
+     * @return
+     */
+    bool getEnableBorder()              const;
+
+    /**
+     * @brief 获取选择类型
+     * @return
+     */
+    SelectType getSelectType()          const;
+
+    /**
+     * @brief 获取边框颜色
+     * @return
+     */
+    QColor getBorderColor()             const;
+
+    /**
+     * @brief 获取周末颜色
+     * @return
+     */
+    QColor getWeekColor()               const;
+
+    /**
+     * @brief 获取农历节日颜色
+     * @return
+     */
+    QColor getLunarColor()              const;
+
+    /**
+     * @brief 获取当前月文本颜色
+     * @return
+     */
+    QColor getCurrentTextColor()        const;
+
+    /**
+     * @brief 获取其他月文本颜色
+     * @return
+     */
+    QColor getOtherTextColor()          const;
+
+    /**
+     * @brief 获取选中日期文本颜色
+     * @return
+     */
+    QColor getSelectTextColor()         const;
+
+    /**
+     * @brief 获取悬浮日期文本颜色
+     * @return
+     */
+    QColor getHoverTextColor()          const;
+
+    /**
+     * @brief 获取当前月农历文字颜色
+     * @return
+     */
+    QColor getCurrentLunarColor()       const;
+
+    /**
+     * @brief 获取其他月农历文本颜色
+     * @return
+     */
+    QColor getOtherLunarColor()         const;
+
+    /**
+     * @brief 获取选中日期农历颜文本色
+     * @return
+     */
+    QColor getSelectLunarColor()        const;
+
+    /**
+     * @brief 获取悬浮日期农历文本颜色
+     * @return
+     */
+    QColor getHoverLunarColor()         const;
+
+    /**
+     * @brief 获取当前月背景色
+     * @return
+     */
+    QColor getCurrentBgColor()          const;
+
+    /**
+     * @brief 获取其他月背景色
+     * @return
+     */
+    QColor getOtherBgColor()            const;
+
+    /**
+     * @brief 获取选择日期背景色
+     * @return
+     */
+    QColor getSelectBgColor()           const;
+
+    /**
+     * @brief 获取悬浮日期背景色
+     * @return
+     */
+    QColor getHoverBgColor()            const;
+
+    QSize sizeHint()                    const;
+    QSize minimumSizeHint()             const;
+
+public Q_SLOTS:
+    //上一月,下一月
+    void showPreviousMonth();
+    void showNextMonth();
+
+    //转到今天
+    void showToday();
+
+    //设置整体样式
+    void setCalendarStyle(const CalendarStyle &calendarStyle);
+    //设置星期名称格式
+    void setWeekNameFormat(const WeekNameFormat &weekNameFormat);
+
+    //设置日期
+    void setDate(const QDate &date);
+    //设置顶部星期名称文字颜色+背景色
+    void setWeekTextColor(const QColor &weekTextColor);
+    void setWeekBgColor(const QColor &weekBgColor);
+
+    //设置是否显示农历信息
+    void setShowLunar(bool showLunar);
+    //是否显示边框
+    void setEnableBorder(bool bVisible);
+    //设置选中背景样式
+    void setSelectType(const SelectType &selectType);
+
+    //设置边框颜色
+    void setBorderColor(const QColor &borderColor);
+    //设置周末颜色
+    void setWeekColor(const QColor &weekColor);
+    //设置农历节日颜色
+    void setLunarColor(const QColor &lunarColor);
+
+    //设置当前月文字颜色
+    void setCurrentTextColor(const QColor &currentTextColor);
+    //设置其他月文字颜色
+    void setOtherTextColor(const QColor &otherTextColor);
+    //设置选中日期文字颜色
+    void setSelectTextColor(const QColor &selectTextColor);
+    //设置悬停日期文字颜色
+    void setHoverTextColor(const QColor &hoverTextColor);
+
+    //设置当前月农历文字颜色
+    void setCurrentLunarColor(const QColor &currentLunarColor);
+    //设置其他月农历文字颜色
+    void setOtherLunarColor(const QColor &otherLunarColor);
+    //设置选中日期农历文字颜色
+    void setSelectLunarColor(const QColor &selectLunarColor);
+    //设置悬停日期农历文字颜色
+    void setHoverLunarColor(const QColor &hoverLunarColor);
+
+    //设置当前月背景颜色
+    void setCurrentBgColor(const QColor &currentBgColor);
+    //设置其他月背景颜色
+    void setOtherBgColor(const QColor &otherBgColor);
+    //设置选中日期背景颜色
+    void setSelectBgColor(const QColor &selectBgColor);
+    //设置悬停日期背景颜色
+    void setHoverBgColor(const QColor &hoverBgColor);
+
+protected:
+    void wheelEvent(QWheelEvent *event) override;
+    void paintEvent(QPaintEvent *event) override;
+
+signals:
+    void clicked(const QDate &date);
+    void selectionChanged();
+
+private slots:
+    void initWidget();
+    void initStyle();
+    void initDate();
+    void slotClicked(const QDate &date, const KMiniCalendarItem::DayType &dayType);
+    void dayChanged(const QDate &date);
+    void dateChanged(int year, int month, int day);
+
+private:
+    Q_DECLARE_PRIVATE(KMiniCalendarWidget)
+    KMiniCalendarWidgetPrivate* const d_ptr;
+};
+}
+
+#endif // KMINICALENDARWIDGET_H
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/knativetabbar.cpp libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/knativetabbar.cpp
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/knativetabbar.cpp	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/knativetabbar.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,761 @@
+/*
+ * libkysdk-qtwidgets's Library
+ *
+ * Copyright (C) 2023, KylinSoft Co., Ltd.
+ *
+ * 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 3 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 General Public License
+ * along with this library.  If not, see <https://www.gnu.org/licenses/>.
+ *
+ * Authors: Zhenyu Wang <wangzhenyu@kylinos.cn>
+ *
+ */
+
+#include "knativetabbar.h"
+#include "themeController.h"
+#include <QStyleOptionTab>
+#include <QPainter>
+#include <QPainterPath>
+#include <QStylePainter>
+#include <QPainterPath>
+#include <QFontMetrics>
+#include <QDebug>
+#include <QEvent>
+#include <QApplication>
+#include <QVariantAnimation>
+#include <QMouseEvent>
+#include "parmscontroller.h"
+
+namespace kdk
+{
+class Q_DECL_HIDDEN KNativeTabbarPrivate:public QObject,public ThemeController
+{
+    Q_OBJECT
+    Q_DECLARE_PUBLIC(KNativeTabbar)
+
+public:
+    KNativeTabbarPrivate(KNativeTabbar*parent)
+        :q_ptr(parent),
+          m_animation(new QVariantAnimation(this)),
+          m_nextTabWidth(0),
+          m_animationStarted(false)
+    {
+        Q_Q(KNativeTabbar);
+        setParent(parent);
+        parent->installEventFilter(this);
+        m_animation->setDuration(300);
+        m_animation->setEasingCurve(QEasingCurve::InOutQuad);
+        connect(m_animation, &QVariantAnimation::valueChanged, q, [=](){
+            q->update();
+        });
+        connect(m_animation, &QVariantAnimation::finished, this, [=](){
+            m_animationStarted = false;
+        });
+    }
+    void changeTheme();
+    int getIndexAtPos(const QPoint &p);
+
+protected:
+    bool eventFilter(QObject *watched, QEvent *event);
+
+private:
+    KNativeTabbar *q_ptr;
+    KNativeTabbarStyle m_KNativeTabbarStyle;
+    int m_borderRadius = 6;
+    int m_horizontalMargin = 1;
+    int m_topMargin = 0;
+    QColor m_bkgrdColor;
+    bool m_useCustomColor;
+    QVariantAnimation *m_animation;
+    int m_nextTabWidth;
+    bool m_animationStarted;
+};
+
+KNativeTabbar::KNativeTabbar(KNativeTabbarStyle barStyle,QWidget* parent):
+    KCustomTabBar(parent),
+    d_ptr(new KNativeTabbarPrivate(this))
+{
+    Q_D(KNativeTabbar);
+    d->m_borderRadius = 6;
+    d->m_KNativeTabbarStyle = barStyle;
+    d->m_useCustomColor = false;
+
+    //this->setObjectName("KNativeTabbar");
+    d->changeTheme();
+    connect(d->m_gsetting,&QGSettings::changed, d,&KNativeTabbarPrivate::changeTheme);
+    connect(Parmscontroller::self(),&Parmscontroller::modeChanged,this,[=](bool flag){
+        updateGeometry();
+    });
+}
+
+KNativeTabbar::~KNativeTabbar()
+{
+
+}
+
+void KNativeTabbar::setTabbarStyle(KNativeTabbarStyle barStyle)
+{
+    Q_D(KNativeTabbar);
+    d->m_KNativeTabbarStyle = barStyle;
+    d->changeTheme();
+}
+KNativeTabbarStyle KNativeTabbar::barStyle()
+{
+    Q_D(KNativeTabbar);
+    return d->m_KNativeTabbarStyle;
+}
+
+void KNativeTabbar::setBorderRadius(int radius)
+{
+    Q_D(KNativeTabbar);
+    if(radius < 0 || radius > 20)
+        return;
+    d->m_borderRadius = radius;
+    update();
+}
+
+int KNativeTabbar::borderRadius()
+{
+    Q_D(KNativeTabbar);
+    if(d->m_KNativeTabbarStyle == Sliding)
+        return 0;
+    else
+        return d->m_borderRadius;
+}
+
+void KNativeTabbar::setBackgroundColor(const QColor &color)
+{
+    Q_D(KNativeTabbar);
+    d->m_useCustomColor = true;
+    d->m_bkgrdColor = color;
+}
+
+QSize KNativeTabbar::sizeHint() const
+{
+    auto size = KCustomTabBar::sizeHint();
+    size.setHeight(Parmscontroller::parm(Parmscontroller::Parm::PM_TabBarHeight));
+    return size;
+}
+
+QSize KNativeTabbar::minimumTabSizeHint(int index) const
+{
+    Q_UNUSED(index)
+    QSize size(100,Parmscontroller::parm(Parmscontroller::Parm::PM_PushButtonHeight));
+    return size;
+}
+
+QSize KNativeTabbar::tabSizeHint(int index) const
+{
+    Q_UNUSED(index)
+    //判断外部是否设置了固定宽度或者固定高度,如果设置,走默认的tabSizeHint
+    if((this->maximumHeight() == this->minimumHeight()) ||this->maximumWidth()==this->minimumWidth())
+        return KCustomTabBar::tabSizeHint(index);
+    auto size = KCustomTabBar::tabSizeHint(index);
+    size.setHeight(Parmscontroller::parm(Parmscontroller::Parm::PM_TabBarHeight));
+    return size;
+}
+
+void KNativeTabbar::paintEvent(QPaintEvent *event)
+{
+    Q_D(KNativeTabbar);
+    QPainter p(this);
+    p.setRenderHint(QPainter::Antialiasing);
+    p.setRenderHint(QPainter::HighQualityAntialiasing);
+    p.setRenderHint(QPainter::TextAntialiasing);
+    p.setRenderHint(QPainter::SmoothPixmapTransform);
+
+    QColor fontColor;
+    QColor mix;
+    QFontMetrics fm = p.fontMetrics();
+    for (int i = 0; i < count(); ++i)
+    {
+        QStyleOptionTab option;
+        initStyleOption(&option, i);
+        QRect rect = option.rect.adjusted(d->m_horizontalMargin,0,0,-d->m_topMargin);
+        rect.setHeight(Parmscontroller::parm(Parmscontroller::Parm::PM_PushButtonHeight));
+        switch (d->m_KNativeTabbarStyle)
+        {
+        case SegmentDark:
+        {
+            mix = option.palette.brightText().color();
+            fontColor = option.palette.buttonText().color();
+            QColor bkgrdColor = d->m_bkgrdColor;
+            if(option.state.testFlag(QStyle::State_Selected))
+            {
+                bkgrdColor = option.palette.highlight().color();
+                fontColor = QColor("#FFFFFF");
+            }
+            else if(option.state.testFlag(QStyle::State_MouseOver))
+            {
+                 bkgrdColor = ThemeController::mixColor(bkgrdColor,mix,0.05);
+            }
+            if(option.position == QStyleOptionTab::Middle)
+            {
+                p.save();
+                p.setBrush(bkgrdColor);
+                p.setPen(Qt::NoPen);
+                //利用quadto绘制圆角矩形会出现一个像素的偏差,修正一下QRect底部高度
+                p.drawRect(rect.adjusted(0,0,0,-1));
+                p.restore();
+                p.setBrush(Qt::NoBrush);
+                p.setPen(fontColor);
+                QPoint point;
+                uint tf = Qt::AlignVCenter;
+                if (!option.icon.isNull()) {
+                    QIcon::Mode mode = option.state & QStyle::State_Enabled ? QIcon::Normal
+                                                                     : QIcon::Disabled;
+                    if (mode == QIcon::Normal && option.state & QStyle::State_HasFocus)
+                        mode = QIcon::Active;
+                    QIcon::State state = QIcon::Off;
+                    if (option.state & QStyle::State_On)
+                        state = QIcon::On;
+
+                    QPixmap pixmap = option.icon.pixmap(option.iconSize, mode, state);
+
+                    int w = pixmap.width() / pixmap.devicePixelRatio();
+                    int h = pixmap.height() / pixmap.devicePixelRatio();
+
+                    if (!tabText(i).isEmpty())
+                        w += option.fontMetrics.boundingRect(option.rect, tf, tabText(i)).width() + 2;
+
+                    point = QPoint(rect.x() + rect.width() / 2 - w / 2,
+                                   rect.y() + rect.height() / 2 - h / 2);
+
+                    w = pixmap.width() / pixmap.devicePixelRatio();
+
+                    if (option.direction == Qt::RightToLeft)
+                        point.rx() += w;
+
+                    if(fm.width(tabText(i)) >= option.rect.width()-option.iconSize.width()-7)
+                        p.drawPixmap(option.rect.x()+4,this->style()->visualPos(option.direction, option.rect, point).y(), pixmap);
+                    else
+                        p.drawPixmap(this->style()->visualPos(option.direction, option.rect, point), pixmap);
+
+                    if (!tabText(i).isEmpty()){
+                        int subH = std::max(option.iconSize.height(),option.fontMetrics.height());
+                        int icon_Y = (rect.height() - subH) / 2;
+                        int text_X = point.x() + option.iconSize.width() + 4;
+                        int text_Y = icon_Y;
+
+                        QRect textRect;
+                        if(fm.width(tabText(i)) >= option.rect.width()-option.iconSize.width()-7)
+                        {
+                            textRect = QRect(option.rect.x()+option.iconSize.width()+8, text_Y, option.rect.width()-option.iconSize.width()-7, option.fontMetrics.height());
+                            setTabToolTip(i,tabText(i));
+                            QString elidedText = fm.elidedText(tabText(i),Qt::ElideRight,option.rect.width()-option.iconSize.width()-7);
+                            p.drawText(textRect,tf,elidedText);
+                        }
+                        else
+                        {
+                            textRect=QRect(text_X, text_Y, option.fontMetrics.width(tabText(i)), option.fontMetrics.height());
+                            setTabToolTip(i,"");
+                            p.drawText(textRect,tf,tabText(i));
+                        }
+                    }
+                }
+                else
+                {
+                    tf |= Qt::AlignHCenter;
+                    if(fm.width(tabText(i)) >= option.rect.width())
+                    {
+                        QString elidedText = fm.elidedText(tabText(i),Qt::ElideRight,option.rect.width());
+                        p.drawText(rect,tf,elidedText);
+                        setTabToolTip(i,tabText(i));
+                    }
+                    else
+                    {
+                        setTabToolTip(i,"");
+                        p.drawText(rect,tf,tabText(i));
+                    }
+
+                }
+            }
+            else if(option.position == QStyleOptionTab::Beginning)
+            {
+                p.save();
+                p.setBrush(bkgrdColor);
+                p.setPen(Qt::NoPen);
+                QPainterPath path;
+                auto tempRect = rect.adjusted(0,0,1,0);
+                path.moveTo(tempRect.topLeft() + QPointF(0, d->m_borderRadius));
+                path.lineTo(tempRect.bottomLeft() - QPointF(0, d->m_borderRadius));
+                path.quadTo(tempRect.bottomLeft(), tempRect.bottomLeft() + QPointF(d->m_borderRadius, 0));
+                path.lineTo(tempRect.bottomRight());
+                path.lineTo(tempRect.topRight());
+                path.lineTo(tempRect.topLeft() + QPointF(d->m_borderRadius, 0));
+                path.quadTo(tempRect.topLeft(), tempRect.topLeft() + QPointF(0, d->m_borderRadius));
+                p.drawPath(path);
+                p.restore();
+                p.setBrush(Qt::NoBrush);
+                p.setPen(fontColor);
+                QPoint point;
+                uint tf = Qt::AlignVCenter;
+                if (!option.icon.isNull()) {
+                    QIcon::Mode mode = option.state & QStyle::State_Enabled ? QIcon::Normal
+                                                                     : QIcon::Disabled;
+                    if (mode == QIcon::Normal && option.state & QStyle::State_HasFocus)
+                        mode = QIcon::Active;
+                    QIcon::State state = QIcon::Off;
+                    if (option.state & QStyle::State_On)
+                        state = QIcon::On;
+
+                    QPixmap pixmap = option.icon.pixmap(option.iconSize, mode, state);
+
+                    int w = pixmap.width() / pixmap.devicePixelRatio();
+                    int h = pixmap.height() / pixmap.devicePixelRatio();
+
+                    if (!tabText(i).isEmpty())
+                        w += option.fontMetrics.boundingRect(option.rect, tf, tabText(i)).width() + 2;
+
+                    point = QPoint(rect.x() + rect.width() / 2 - w / 2,
+                                   rect.y() + rect.height() / 2 - h / 2);
+
+                    w = pixmap.width() / pixmap.devicePixelRatio();
+
+                    if (option.direction == Qt::RightToLeft)
+                        point.rx() += w;
+
+                    if(fm.width(tabText(i)) >= option.rect.width()-option.iconSize.width()-7)
+                        p.drawPixmap(option.rect.x()+4,this->style()->visualPos(option.direction, option.rect, point).y(), pixmap);
+                    else
+                        p.drawPixmap(this->style()->visualPos(option.direction, option.rect, point), pixmap);
+
+                    if (option.direction == Qt::RightToLeft)
+                        rect.translate(-point.x() - 2, 0);
+                    else
+                        rect.translate(point.x() + w + 4, 0);
+
+                    if (!tabText(i).isEmpty()){
+                         tf |= Qt::AlignLeft;
+                         int subH = std::max(option.iconSize.height(),option.fontMetrics.height());
+                         int icon_Y = (rect.height() - subH) / 2;
+                         int text_X = point.x() + option.iconSize.width() + 4;
+                         int text_Y = icon_Y;
+                         QRect textRect;
+                         if(fm.width(tabText(i)) >= option.rect.width()-option.iconSize.width()-7)
+                         {
+                             textRect = QRect(option.rect.x()+option.iconSize.width()+8, text_Y, option.rect.width()-option.iconSize.width()-8, option.fontMetrics.height());
+                             setTabToolTip(i,tabText(i));
+                             QString elidedText = fm.elidedText(tabText(i),Qt::ElideRight,option.rect.width()-option.iconSize.width()-8);
+                             p.drawText(textRect,tf,elidedText);
+                         }
+                         else
+                         {
+                             textRect=QRect(text_X, text_Y, option.fontMetrics.width(tabText(i)), option.fontMetrics.height());
+                             setTabToolTip(i,"");
+                             p.drawText(textRect,tf,tabText(i));
+                         }
+                     }
+                }
+                else
+                {
+                    tf |= Qt::AlignHCenter;
+                    if(fm.width(tabText(i)) >= option.rect.width())
+                    {
+                        QString elidedText = fm.elidedText(tabText(i),Qt::ElideRight,option.rect.width());
+                        p.drawText(rect,tf,elidedText);
+                        setTabToolTip(i,tabText(i));
+                    }
+                    else
+                    {
+                        p.drawText(rect,tf,tabText(i));
+                        setTabToolTip(i,"");
+                    }
+                }
+            }
+            else
+            {
+                p.save();
+                p.setBrush(bkgrdColor);
+                p.setPen(Qt::NoPen);
+                QPainterPath path;
+                path.moveTo(rect.topLeft());
+                path.lineTo(rect.bottomLeft());
+                path.lineTo(rect.bottomRight() - QPointF(d->m_borderRadius,0));
+                path.quadTo(rect.bottomRight(), rect.bottomRight() - QPointF(0, d->m_borderRadius));
+                path.lineTo(rect.topRight() + QPointF(0, d->m_borderRadius));
+                path.quadTo(rect.topRight(), rect.topRight() - QPointF(d->m_borderRadius,0));
+                path.lineTo(rect.topLeft());
+                p.drawPath(path);
+                p.restore();
+                p.setBrush(Qt::NoBrush);
+                p.setPen(fontColor);
+                QPoint point;
+                uint tf = Qt::AlignVCenter;
+                if (!option.icon.isNull()) {
+
+                    QIcon::Mode mode = option.state & QStyle::State_Enabled ? QIcon::Normal
+                                                                     : QIcon::Disabled;
+                    if (mode == QIcon::Normal && option.state & QStyle::State_HasFocus)
+                        mode = QIcon::Active;
+                    QIcon::State state = QIcon::Off;
+                    if (option.state & QStyle::State_On)
+                        state = QIcon::On;
+
+                    QPixmap pixmap = option.icon.pixmap(option.iconSize, mode, state);
+
+                    int w = pixmap.width() / pixmap.devicePixelRatio();
+                    int h = pixmap.height() / pixmap.devicePixelRatio();
+
+                    if (!tabText(i).isEmpty())
+                        w += option.fontMetrics.boundingRect(option.rect, tf, tabText(i)).width() + 4;
+
+                    point = QPoint(rect.x() + rect.width() / 2 - w / 2,
+                                   rect.y() + rect.height() / 2 - h / 2);
+
+                    w = pixmap.width() / pixmap.devicePixelRatio();
+
+                    if (option.direction == Qt::RightToLeft)
+                        point.rx() += w;
+
+                    if(fm.width(tabText(i)) >= option.rect.width()-option.iconSize.width()-7)
+                        p.drawPixmap(option.rect.x()+4,this->style()->visualPos(option.direction, option.rect, point).y(), pixmap);
+                    else
+                        p.drawPixmap(this->style()->visualPos(option.direction, option.rect, point), pixmap);
+
+                    if (!tabText(i).isEmpty()){
+                        int subH = std::max(option.iconSize.height(),option.fontMetrics.height());
+                        int icon_Y = (rect.height() - subH) / 2;
+                        int text_X = point.x() + option.iconSize.width() + 4;
+                        int text_Y = icon_Y;
+                        QRect textRect;
+                        if(fm.width(tabText(i)) >= option.rect.width()-option.iconSize.width()-7)
+                        {
+                            textRect = QRect(option.rect.x()+option.iconSize.width()+8, text_Y, option.rect.width()-option.iconSize.width()-8, option.fontMetrics.height());
+                            setTabToolTip(i,tabText(i));
+                            QString elidedText = fm.elidedText(tabText(i),Qt::ElideRight,option.rect.width()-option.iconSize.width()-8);
+                            p.drawText(textRect,elidedText);
+                        }
+                        else
+                        {
+                            textRect=QRect(text_X, text_Y, option.fontMetrics.width(tabText(i)), option.fontMetrics.height());
+                            setTabToolTip(i,"");
+                            p.drawText(textRect,tabText(i));
+                        }
+                    }
+                }
+                else
+                {
+                    tf |= Qt::AlignHCenter;
+                    if(fm.width(tabText(i)) >= option.rect.width())
+                    {
+                        QString elidedText = fm.elidedText(tabText(i),Qt::ElideRight,option.rect.width());
+                        p.drawText(rect,tf,elidedText);
+                        setTabToolTip(i,tabText(i));
+                    }
+                    else
+                    {
+                        p.drawText(rect,tf,tabText(i));
+                        setTabToolTip(i,"");
+                    }
+                }
+            }
+            break;
+        }
+        case SegmentLight:
+        {
+            mix = option.palette.brightText().color();
+            fontColor = option.palette.buttonText().color();
+            QColor bkgrdColor = d->m_bkgrdColor;
+            if(option.state.testFlag(QStyle::State_Selected))
+            {
+                bkgrdColor = option.palette.highlight().color();
+                fontColor = QColor("#FFFFFF");
+            }
+            else if(option.state.testFlag(QStyle::State_MouseOver))
+            {
+                 bkgrdColor = ThemeController::mixColor(bkgrdColor,mix,0.05);
+            }
+            p.save();
+            p.setBrush(bkgrdColor);
+            p.setPen(Qt::NoPen);
+            p.drawRoundedRect(/*option.rect.adjusted*/rect.adjusted(d->m_horizontalMargin,0,0,-d->m_topMargin),
+                              d->m_borderRadius,d->m_borderRadius);
+            p.restore();
+            p.setBrush(Qt::NoBrush);
+            p.setPen(fontColor);
+            /*QRect*/  rect = /*option.*/rect.adjusted(d->m_horizontalMargin,0,0,-d->m_topMargin);
+            QPoint point;
+            uint tf = Qt::AlignVCenter;
+            if (!option.icon.isNull()) {
+                QIcon::Mode mode = option.state & QStyle::State_Enabled ? QIcon::Normal
+                                                                 : QIcon::Disabled;
+                if (mode == QIcon::Normal && option.state & QStyle::State_HasFocus)
+                    mode = QIcon::Active;
+                QIcon::State state = QIcon::Off;
+                if (option.state & QStyle::State_On)
+                    state = QIcon::On;
+
+                QPixmap pixmap = option.icon.pixmap(option.iconSize, mode, state);
+
+                int w = pixmap.width() / pixmap.devicePixelRatio();
+                int h = pixmap.height() / pixmap.devicePixelRatio();
+
+                if (!tabText(i).isEmpty())
+                    w += option.fontMetrics.boundingRect(option.rect, tf, tabText(i)).width() + 2;
+
+                point = QPoint(rect.x() + rect.width() / 2 - w / 2,
+                               rect.y() + rect.height() / 2 - h / 2);
+
+                w = pixmap.width() / pixmap.devicePixelRatio();
+
+                if (option.direction == Qt::RightToLeft)
+                    point.rx() += w;
+
+                if(fm.width(tabText(i)) >= option.rect.width()-option.iconSize.width()-7)
+                    p.drawPixmap(option.rect.x()+4,this->style()->visualPos(option.direction, option.rect, point).y(), pixmap);
+                else
+                    p.drawPixmap(this->style()->visualPos(option.direction, option.rect, point), pixmap);
+
+                if (!tabText(i).isEmpty()){
+                    int subH = std::max(option.iconSize.height(),option.fontMetrics.height());
+                    int icon_Y = (rect.height() - subH) / 2;
+                    int text_X = point.x() + option.iconSize.width() + 4;
+                    int text_Y = icon_Y;
+                    QRect textRect;
+                    if(fm.width(tabText(i)) >= option.rect.width()-option.iconSize.width()-7)
+                    {
+                        textRect = QRect(option.rect.x()+option.iconSize.width()+8, text_Y, option.rect.width()-option.iconSize.width()-8, option.fontMetrics.height());
+                        setTabToolTip(i,tabText(i));
+                        QString elidedText = fm.elidedText(tabText(i),Qt::ElideRight,option.rect.width()-option.iconSize.width()-8);
+                        p.drawText(textRect,elidedText);
+                    }
+                    else
+                    {
+                        textRect=QRect(text_X, text_Y, option.fontMetrics.width(tabText(i)), option.fontMetrics.height());
+                        setTabToolTip(i,"");
+                        p.drawText(textRect,tabText(i));
+                    }
+                }
+            }
+            else
+            {
+                tf |= Qt::AlignHCenter;
+                if(fm.width(tabText(i)) >= option.rect.width())
+                {
+                    QString elidedText = fm.elidedText(tabText(i),Qt::ElideRight,option.rect.width());
+                    p.drawText(rect,tf,elidedText);
+                    setTabToolTip(i,tabText(i));
+                }
+                else
+                {
+                    p.drawText(rect,tf,tabText(i));
+                    setTabToolTip(i,"");
+                }
+            }
+            break;
+        }
+        case Sliding:
+        {
+            mix = option.palette.brightText().color();
+            fontColor = option.palette.buttonText().color();
+            QColor bkgrdColor = d->m_bkgrdColor;
+            if(option.state.testFlag(QStyle::State_Selected))
+            {
+                bkgrdColor = option.palette.highlight().color();
+                fontColor = option.palette.highlight().color();
+            }
+            else if(option.state.testFlag(QStyle::State_MouseOver))
+            {
+                 bkgrdColor = ThemeController::mixColor(bkgrdColor,mix,0.05);
+            }
+            p.save();
+            QPen pen;
+            if(i != currentIndex())
+                pen.setColor(bkgrdColor);
+            else
+                pen.setColor(d->m_bkgrdColor);
+            pen.setWidth(2);
+            p.setPen(pen);
+            /*QRect*/  rect = /*option.*/rect.adjusted(d->m_horizontalMargin,0,0,-5);
+            p.drawLine(rect.bottomLeft(),rect.bottomRight());
+            p.restore();
+
+            if(d->m_animationStarted)
+            {
+                int left_border = d->m_animation->currentValue().toInt();
+                p.save();
+                QPen pen;
+                pen.setWidth(2);
+                pen.setColor(option.palette.highlight().color());
+                p.setPen(pen);
+                p.drawLine(QPoint(left_border, rect.height()-1),QPoint(left_border + d->m_nextTabWidth, rect.height()-1));
+                p.restore();
+            }
+            else
+            {
+                p.save();
+                QPen pen;
+                pen.setColor(bkgrdColor);
+                pen.setWidth(2);
+                p.setPen(pen);
+                p.drawLine(rect.bottomLeft(),rect.bottomRight());
+                p.restore();
+            }
+
+
+            p.setBrush(Qt::NoBrush);
+            p.setPen(fontColor);
+            QPoint point;
+            uint tf = Qt::AlignVCenter;
+            if (!option.icon.isNull()) {
+                QIcon::Mode mode = option.state & QStyle::State_Enabled ? QIcon::Normal
+                                                                 : QIcon::Disabled;
+                if (mode == QIcon::Normal && option.state & QStyle::State_HasFocus)
+                    mode = QIcon::Active;
+                QIcon::State state = QIcon::Off;
+                if (option.state & QStyle::State_On)
+                    state = QIcon::On;
+
+                QPixmap pixmap = option.icon.pixmap(option.iconSize, mode, state);
+
+                int w = pixmap.width() / pixmap.devicePixelRatio();
+                int h = pixmap.height() / pixmap.devicePixelRatio();
+
+                if (!tabText(i).isEmpty())
+                    w += option.fontMetrics.boundingRect(option.rect, tf, tabText(i)).width() + 2;
+
+                point = QPoint(rect.x() + rect.width() / 2 - w / 2,
+                               rect.y() + rect.height() / 2 - h / 2);
+
+                w = pixmap.width() / pixmap.devicePixelRatio();
+
+                if (option.direction == Qt::RightToLeft)
+                    point.rx() += w;
+
+                if(fm.width(tabText(i)) >= option.rect.width()-option.iconSize.width()-7)
+                     p.drawPixmap(option.rect.x()+4,this->style()->visualPos(option.direction, option.rect, point).y(), pixmap);
+                else
+                    p.drawPixmap(this->style()->visualPos(option.direction, option.rect, point), pixmap);
+
+                if (!tabText(i).isEmpty()){
+                    int subH = std::max(option.iconSize.height(),option.fontMetrics.height());
+                    int icon_Y = (rect.height() - subH) / 2;
+                    int text_X = point.x() + option.iconSize.width() + 4;
+                    int text_Y = icon_Y;
+                    QRect textRect;
+                    if(fm.width(tabText(i)) >= option.rect.width()-option.iconSize.width()-7)
+                    {
+                        textRect = QRect(option.rect.x()+option.iconSize.width()+8, text_Y, option.rect.width()-option.iconSize.width()-8, option.fontMetrics.height());
+                        setTabToolTip(i,tabText(i));
+                        QString elidedText = fm.elidedText(tabText(i),Qt::ElideRight,option.rect.width()-option.iconSize.width()-8);
+                        p.drawText(textRect,elidedText);
+                    }
+                    else
+                    {
+                        textRect=QRect(text_X, text_Y, option.fontMetrics.width(tabText(i)), option.fontMetrics.height());
+                        setTabToolTip(i,"");
+                        p.drawText(textRect,tabText(i));
+                    }
+                }
+            }
+            else
+            {
+                tf |= Qt::AlignHCenter;
+                if(fm.width(tabText(i)) >= option.rect.width())
+                {
+                    QString elidedText = fm.elidedText(tabText(i),Qt::ElideRight,option.rect.width());
+                    p.drawText(rect,tf,elidedText);
+                    setTabToolTip(i,tabText(i));
+                }
+                else
+                {
+                    p.drawText(rect,tf,tabText(i));
+                    setTabToolTip(i,"");
+                }
+            }
+            break;
+        }
+        default:
+            break;
+        }
+    }
+}
+
+void KNativeTabbarPrivate::changeTheme()
+{
+    Q_Q(KNativeTabbar);
+    switch (m_KNativeTabbarStyle) {
+    case SegmentDark:
+    {
+        if(m_useCustomColor)
+            return;
+        else
+            m_bkgrdColor = q->palette().button().color();
+        break;
+    }
+    case SegmentLight:
+    {
+        if(m_useCustomColor)
+           return;
+        else
+            m_bkgrdColor = QColor(0,0,0,0);
+        break;
+    }
+    case Sliding:
+        if(m_useCustomColor)
+            return;
+        else
+            m_bkgrdColor = q->palette().button().color();
+        break;
+    default:
+        break;
+    } ;
+    q->update();
+}
+
+int KNativeTabbarPrivate::getIndexAtPos(const QPoint &p)
+{
+    Q_Q(KNativeTabbar);
+    if (q->tabRect(q->currentIndex()).contains(p))
+        return q->currentIndex();
+    for (int i = 0; i < q->count(); ++i)
+        if (q->tabRect(i).contains(p))
+            return i;
+    return -1;
+}
+
+bool KNativeTabbarPrivate::eventFilter(QObject *watched, QEvent *event)
+{
+    Q_Q(KNativeTabbar);
+    if(event->type() == QEvent::MouseButtonPress)
+    {
+        if(q->isEnabled())
+        {
+            QMouseEvent *mouseEvent = dynamic_cast<QMouseEvent*>(event);
+            if(mouseEvent && mouseEvent->button() == Qt::MouseButton::LeftButton)
+            {
+                int nextIndex = getIndexAtPos(mouseEvent->pos());
+                int currentIndex = q->currentIndex();
+                if(nextIndex != currentIndex)
+                {
+                    int cur_left_border = q->tabRect(currentIndex).left();
+                    int next_left_border = q->tabRect(nextIndex).left();
+                    m_nextTabWidth = q->tabRect(nextIndex).width();
+                    m_animation->setStartValue(cur_left_border);
+                    m_animation->setEndValue(next_left_border);
+                    m_animation->start();
+                    m_animationStarted = true;
+                }
+            }
+            if(mouseEvent && mouseEvent->button() == Qt::MouseButton::RightButton)
+            {
+                emit q->rightlicked(mouseEvent->globalPos());
+            }
+        }
+    }
+    return QObject::eventFilter(watched, event);
+}
+
+}
+#include "knativetabbar.moc"
+#include "moc_knativetabbar.cpp"
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/knativetabbar.h libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/knativetabbar.h
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/knativetabbar.h	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/knativetabbar.h	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,112 @@
+/*
+ * libkysdk-qtwidgets's Library
+ *
+ * Copyright (C) 2023, KylinSoft Co., Ltd.
+ *
+ * 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 3 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 General Public License
+ * along with this library.  If not, see <https://www.gnu.org/licenses/>.
+ *
+ * Authors: Zhenyu Wang <wangzhenyu@kylinos.cn>
+ *
+ */
+
+#ifndef KNAVETABBAR_H
+#define KNAVETABBAR_H
+
+#include "gui_g.h"
+#include <QTabBar>
+#include <QIcon>
+#include "kcustomtabbar.h"
+
+namespace kdk
+{
+
+/** @defgroup BarModule
+  * @since 2.5
+  */
+
+/**
+ * @brief 支持三种样式
+ */
+enum KNativeTabbarStyle
+{
+    SegmentDark,
+    SegmentLight,
+    Sliding
+};
+
+class KNativeTabbarPrivate;
+
+/**
+ * @brief 支持三种样式
+ */
+class GUI_EXPORT KNativeTabbar: public KCustomTabBar
+{
+    Q_OBJECT
+
+public:
+    KNativeTabbar(KNativeTabbarStyle barStyle = SegmentLight,QWidget* parent = nullptr);
+    ~KNativeTabbar();
+
+    /**
+     * @brief 设置TabBar样式
+     * @param barStyle
+     */
+    void setTabbarStyle(KNativeTabbarStyle barStyle);
+
+    /**
+     * @brief 返回TabBar样式
+     * @return
+     */
+    KNativeTabbarStyle barStyle();
+
+    /**
+     * @brief 设置圆角半径,只对SegmentDark,SegmentLight样式生效
+     * @param radius
+     */
+    void setBorderRadius(int radius);
+
+    /**
+     * @brief 获取圆角半径
+     * @return
+     */
+    int borderRadius();
+
+    /**
+     * @brief 设置背景色
+     * @param color
+     */
+    void setBackgroundColor(const QColor& color);
+Q_SIGNALS:
+    /**
+     * @brief 鼠标右键信号
+     * @param point
+     */
+    void rightlicked(QPoint point);
+protected:
+    QSize sizeHint() const;
+    QSize minimumTabSizeHint(int index) const;
+     QSize tabSizeHint(int index) const;
+    void paintEvent(QPaintEvent *event);
+
+private:
+    Q_DECLARE_PRIVATE(KNativeTabbar)
+    KNativeTabbarPrivate*const d_ptr;
+};
+}
+/**
+  * @example testtabbar/widget.h
+  * @example testtabbar/widget.cpp
+  * @}
+  */
+#endif //KNAVETABBAR_H
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/knavigationbar.cpp libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/knavigationbar.cpp
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/knavigationbar.cpp	2024-05-16 09:25:54.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/knavigationbar.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -39,8 +39,6 @@
 #include "themeController.h"
 #include "parmscontroller.h"
 
-#define ColorDifference 10
-
 namespace kdk
 {
 
@@ -55,7 +53,6 @@
 {
 public:
     Delegate(QObject*parent,QListView*view);
-    bool isPixmapPureColor(const QPixmap &pixmap) const;
 
 protected:
     void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override;
@@ -201,59 +198,6 @@
 {
 }
 
-bool Delegate::isPixmapPureColor(const QPixmap &pixmap) const
-{
-    QColor symbolic_color = QColor(38, 38, 38);
-
-        if (pixmap.isNull()) {
-            qWarning("pixmap is null!");
-            return false;
-        }
-        QImage image = pixmap.toImage();
-
-        QVector<QColor> vector;
-        int total_red = 0;
-        int total_green = 0;
-        int total_blue = 0;
-        bool pure = true;
-        for (int y = 0; y < image.height(); ++y) {
-            for (int x = 0; x < image.width(); ++x) {
-                if (image.pixelColor(x, y).alphaF() > 0.3) {
-                    QColor color = image.pixelColor(x, y);
-                    vector << color;
-                    total_red += color.red();
-                    total_green += color.green();
-                    total_blue += color.blue();
-                    int dr = qAbs(color.red() - symbolic_color.red());
-                    int dg = qAbs(color.green() - symbolic_color.green());
-                    int db = qAbs(color.blue() - symbolic_color.blue());
-                    if (dr > ColorDifference || dg > ColorDifference || db > ColorDifference)
-                        pure = false;
-                }
-            }
-        }
-
-        if (pure)
-            return true;
-
-        qreal squareRoot_red = 0;
-        qreal squareRoot_green = 0;
-        qreal squareRoot_blue = 0;
-        qreal average_red = total_red / vector.count();
-        qreal average_green = total_green / vector.count();
-        qreal average_blue = total_blue / vector.count();
-        for (QColor color : vector) {
-            squareRoot_red += (color.red() - average_red) * (color.red() - average_red);
-            squareRoot_green += (color.green() - average_green) * (color.green() - average_green);
-            squareRoot_blue += (color.blue() - average_blue) * (color.blue() - average_blue);
-        }
-
-        qreal arithmeticSquareRoot_red = qSqrt(squareRoot_red / vector.count());
-        qreal arithmeticSquareRoot_green = qSqrt(squareRoot_green / vector.count());
-        qreal arithmeticSquareRoot_blue = qSqrt(squareRoot_blue / vector.count());
-        return arithmeticSquareRoot_red < 2.0 && arithmeticSquareRoot_green < 2.0 && arithmeticSquareRoot_blue < 2.0;
-}
-
 void Delegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
 {
     QLinearGradient m_linearGradient;
@@ -435,11 +379,15 @@
     switch (flag) {
     case 0://standardItem
     {
-        QRect iconRect=QRect(rect.x()+16,rect.y()+(rect.height()-16)/2,16,16); //图片大小16*16 左边距16
+        QRect iconRect;
+        if(ThemeController::systemLang())
+            iconRect = QRect(rect.right()-32,rect.y()+(rect.height()-16)/2,16,16); //图片大小16*16 左边距16
+        else
+            iconRect = QRect(rect.x()+16,rect.y()+(rect.height()-16)/2,16,16);
         auto *model =dynamic_cast<QStandardItemModel*>(const_cast<QAbstractItemModel*>(index.model()));
         auto icon = model->item(index.row())->icon();
 
-        if(isPixmapPureColor(icon.pixmap(16,16)))
+        if(ThemeController::isPixmapPureColor(icon.pixmap(16,16)))
         {
             if(ThemeController::themeMode() == DarkTheme)
                   icon = ThemeController::drawSymbolicColoredPixmap(icon.pixmap(16,16));
@@ -475,12 +423,23 @@
         }
         painter->setFont(font);
         if(!icon.isNull()){
-            painter->drawText(QRect(iconRect.right()+8,rect.y(),
-                                rect.width()-56,rect.height()),Qt::AlignVCenter,elidedText); //文本 图片间距8px
+            if(ThemeController::systemLang())
+            {
+
+                painter->drawText(QRect(rect.left() + 16,rect.y(),
+                                    rect.width()-56,rect.height()),Qt::AlignVCenter,elidedText); //文本 图片间距8px
+            }
+            else
+                painter->drawText(QRect(iconRect.right()+8,rect.y(),
+                                    rect.width()-56,rect.height()),Qt::AlignVCenter,elidedText);
         }
         else {
-            painter->drawText(QRect(rect.x()+16,rect.y(),
-                                rect.width()-56,rect.height()),Qt::AlignVCenter,elidedText);
+            if(ThemeController::systemLang())
+                painter->drawText(QRect(rect.x() + 16,rect.y(),
+                                    rect.width() - 56,rect.height()),Qt::AlignVCenter,elidedText);
+            else
+                painter->drawText(QRect(rect.x()+16,rect.y(),
+                                    rect.width()-56,rect.height()),Qt::AlignVCenter,elidedText);
         }
         painter->restore();
         break;
@@ -514,8 +473,12 @@
             painter->setPen(color);
         }
         painter->setFont(font);
-        painter->drawText(QRect(iconRect.right()+8,rect.y(),
-                                rect.width()-56,rect.height()),Qt::AlignVCenter,elidedText); //文本 图片间距8px
+        if(ThemeController::systemLang())
+            painter->drawText(QRect(rect.x() + 16,rect.y(),
+                                rect.width() - 56,rect.height()),Qt::AlignVCenter,elidedText); //文本 图片间距8px
+        else
+            painter->drawText(QRect(iconRect.right()+8,rect.y(),
+                                    rect.width()-56,rect.height()),Qt::AlignVCenter,elidedText);
         painter->restore();
         break;
     }
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/knavigationtrail.cpp libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/knavigationtrail.cpp
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/knavigationtrail.cpp	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/knavigationtrail.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,172 @@
+/*
+ * libkysdk-qtwidgets's Library
+ *
+ * Copyright (C) 2023, KylinSoft Co., Ltd.
+ *
+ * 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 3 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 General Public License
+ * along with this library.  If not, see <https://www.gnu.org/licenses/>.
+ *
+ * Authors: Zhenyu Wang <wangzhenyu@kylinos.cn>
+ *
+ */
+
+#include "knavigationtrail.h"
+#include "themeController.h"
+#include "kborderlessbutton.h"
+#include "kcrumb.h"
+#include <QBoxLayout>
+#include <QDebug>
+
+namespace kdk {
+
+class Q_DECL_HIDDEN KNavigationTrailPrivate:public QObject,public ThemeController
+{
+    Q_OBJECT
+    Q_DECLARE_PUBLIC(KNavigationTrail)
+
+public:
+    KNavigationTrailPrivate(KNavigationTrail *parent);
+
+    void updateLayout();
+
+private:
+    KNavigationTrail* q_ptr;
+    KBorderlessButton *m_pLeftButton;
+    KBorderlessButton *m_pRightButton;
+    KCrumb *m_pCrumb;
+    QHBoxLayout *m_pHLayout;
+    ButtonPosition m_position;
+};
+
+KNavigationTrail::KNavigationTrail(QWidget *parent)
+    :QWidget(parent)
+    ,d_ptr(new KNavigationTrailPrivate(this))
+{
+    Q_D(KNavigationTrail);
+
+}
+
+KCrumb *KNavigationTrail::crumb()
+{
+    Q_D(KNavigationTrail);
+    return d->m_pCrumb;
+}
+
+void KNavigationTrail::setPosition(ButtonPosition type)
+{
+    Q_D(KNavigationTrail);
+    d->m_position = type;
+    d->updateLayout();
+}
+
+
+void KNavigationTrail::resizeEvent(QResizeEvent *event)
+{
+    Q_D(KNavigationTrail);
+    QWidget::resizeEvent(event);
+    emit sizeChange();
+}
+
+KNavigationTrailPrivate::KNavigationTrailPrivate(KNavigationTrail *parent)
+    :q_ptr(parent)
+{
+    Q_Q(KNavigationTrail);
+    m_position = ButtonPosition::LeftOrRight;
+    m_pHLayout = new QHBoxLayout(q);
+    m_pCrumb = new KCrumb();
+    m_pLeftButton = new KBorderlessButton();
+    m_pLeftButton->setIcon(QIcon::fromTheme("go-previous.symbolic"));
+    m_pRightButton = new KBorderlessButton();
+    m_pRightButton->setIcon(QIcon::fromTheme("go-next.symbolic"));
+
+    m_pHLayout->addWidget(m_pLeftButton);
+    m_pHLayout->addWidget(m_pRightButton);
+    m_pHLayout->addWidget(m_pCrumb);
+
+    connect(m_pCrumb,&KCrumb::currentChanged, this, [=](int index){
+        if(index == 0)
+        {
+            m_pLeftButton->setEnabled(false);
+            if(!m_pRightButton->isEnabled())
+                m_pRightButton->setEnabled(true);
+        }
+        else if(index == m_pCrumb->count() - 1)
+        {
+            m_pRightButton->setEnabled(false);
+            if(!m_pLeftButton->isEnabled())
+                m_pLeftButton->setEnabled(true);
+        }
+        else
+        {
+            if(!m_pLeftButton->isEnabled())
+                m_pLeftButton->setEnabled(true);
+            if(!m_pRightButton->isEnabled())
+                m_pRightButton->setEnabled(true);
+        }
+    });
+
+    connect(m_pLeftButton,&KBorderlessButton::clicked,this,[=]{
+//        m_pCrumb->leftScroll();
+        m_pCrumb->setCurrentIndex(m_pCrumb->currentIndex() - 1);
+
+    });
+    connect(m_pRightButton,&KBorderlessButton::clicked,this,[=]{
+//        m_pCrumb->rightScroll();
+        m_pCrumb->setCurrentIndex(m_pCrumb->currentIndex() + 1);
+    });
+}
+
+void KNavigationTrailPrivate::updateLayout()
+{
+    Q_Q(KNavigationTrail);
+    QLayoutItem *child;
+    while ((child = m_pHLayout->takeAt(0)) != 0)
+    {
+        //删除Stretch(弹簧)等布局
+        if (child->spacerItem())
+        {
+            m_pHLayout->removeItem(child);
+            continue;
+        }
+        //删除布局
+        m_pHLayout->removeWidget(child->widget());
+        child->widget()->setParent(nullptr);
+        delete child;
+        child =nullptr;
+    }
+
+    switch (m_position) {
+    case ButtonPosition::LeftPosition:
+        m_pHLayout->addWidget(m_pLeftButton);
+        m_pHLayout->addWidget(m_pRightButton);
+        m_pHLayout->addWidget(m_pCrumb);
+        break;
+    case ButtonPosition::LeftOrRight:
+        m_pHLayout->addWidget(m_pLeftButton);
+        m_pHLayout->addWidget(m_pCrumb);
+        m_pHLayout->addWidget(m_pRightButton);
+        break;
+    case ButtonPosition::RightPosition:
+        m_pHLayout->addWidget(m_pCrumb);
+        m_pHLayout->addWidget(m_pLeftButton);
+        m_pHLayout->addWidget(m_pRightButton);
+        break;
+    default:
+        break;
+    }
+}
+
+}
+
+#include "knavigationtrail.moc"
+#include "moc_knavigationtrail.cpp"
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/knavigationtrail.h libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/knavigationtrail.h
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/knavigationtrail.h	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/knavigationtrail.h	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,81 @@
+/*
+ * libkysdk-qtwidgets's Library
+ *
+ * Copyright (C) 2023, KylinSoft Co., Ltd.
+ *
+ * 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 3 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 General Public License
+ * along with this library.  If not, see <https://www.gnu.org/licenses/>.
+ *
+ * Authors: Zhenyu Wang <wangzhenyu@kylinos.cn>
+ *
+ */
+
+#ifndef KNAVIGATIONTRAIL_H
+#define KNAVIGATIONTRAIL_H
+
+#include <QWidget>
+#include "kcrumb.h"
+
+namespace kdk {
+
+
+enum ButtonPosition {
+    LeftPosition,
+    LeftOrRight,
+    RightPosition
+};
+
+/**
+ * @defgroup BarModule
+ * @since 2.5
+ */
+class KNavigationTrailPrivate;
+
+class KNavigationTrail : public QWidget
+{
+    Q_OBJECT
+public:
+    KNavigationTrail(QWidget *parent = nullptr);
+
+    /**
+     * @brief 获取kcrumb
+     * @return
+     */
+    KCrumb *crumb();
+
+    /**
+     * @brief 设置箭头位置
+     * @param type
+     */
+    void setPosition(ButtonPosition type);
+
+
+Q_SIGNALS:
+    /**
+     * @brief 点击会发出信号
+     */
+    void sizeChange();
+
+protected:
+    void resizeEvent(QResizeEvent *event);
+
+private:
+    Q_DECLARE_PRIVATE(KNavigationTrail)
+    KNavigationTrailPrivate*const d_ptr;
+};
+
+}
+
+
+
+#endif // KNAVIGATIONTRAIL_H
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kpasswordedit.cpp libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kpasswordedit.cpp
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kpasswordedit.cpp	2024-05-16 09:25:54.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kpasswordedit.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -108,6 +108,7 @@
     setContextMenuPolicy(Qt::NoContextMenu);
     setFocusPolicy(Qt::StrongFocus);
     setAttribute(Qt::WA_InputMethodEnabled, false);
+    d->changeTheme();
 }
 
 void KPasswordEdit::setState(LoginState state)
@@ -205,6 +206,7 @@
 {
     Q_D(KPasswordEdit);
     d->m_pEchoModeBtn->setVisible(enable);
+    d->adjustLayout();
 }
 
 bool KPasswordEdit::echoModeBtnVisible()
@@ -217,6 +219,7 @@
 {
     Q_D(KPasswordEdit);
     d->m_pClearBtn->setEnabled(enable);
+    d->adjustLayout();
 }
 
 bool KPasswordEdit::clearBtnVisible()
@@ -231,10 +234,7 @@
     if(!flag)
     {
         d->m_pClearBtn->hide();
-        if(!isLoading())
-        {
-            d->m_pLoadingBtn->hide();
-        }
+        d->m_pLoadingBtn->hide();
     }
     QLineEdit::setEnabled(flag);
     d->repaintIcon();
@@ -351,6 +351,10 @@
     m_pWidgetLayout = new QHBoxLayout(m_pWidget);
     m_pWidgetLayout->setContentsMargins(0,0,0,0);
     m_pWidgetLayout->setSpacing(5);
+    if(ThemeController::systemLang())
+        m_pWidget->setLayoutDirection(Qt::RightToLeft);
+    else
+        m_pWidget->setLayoutDirection(Qt::LeftToRight);
     m_pWidgetLayout->addWidget(m_pLoadingBtn);
     m_pWidgetLayout->addWidget(m_pClearBtn);
     m_pWidgetLayout->addWidget(m_pEchoModeBtn);
@@ -371,8 +375,16 @@
     if(!m_pLoadingBtn->isHidden())
         width +=(spacing + m_pLoadingBtn->iconSize().width());
     m_pWidget->setFixedSize(width,q->height());
-    m_pWidget->move(q->width()-m_pWidget->width(),0);
-    q->setTextMargins(0,0,m_pWidget->width(),0);
+    if(ThemeController::systemLang())
+    {
+        m_pWidget->move(spacing,0);
+        q->setTextMargins(m_pWidget->width(),0,0,0);
+    }
+    else
+    {
+        m_pWidget->move(q->width()-m_pWidget->width(),0);
+        q->setTextMargins(0,0,m_pWidget->width(),0);
+    }
 }
 
 void KPasswordEditPrivate::repaintIcon()
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kpressbutton.cpp libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kpressbutton.cpp
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kpressbutton.cpp	2024-05-16 09:25:54.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kpressbutton.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -307,11 +307,7 @@
     else // 关闭透明度
     {
         if(isChecked() /*&& !isLoading()*/)
-        {
             d->m_pbkgColor = opt.palette.color(QPalette::Highlight);
-//            if(ThemeController::widgetTheme() == ClassicTheme)
-//                d->m_pbkgColor.setAlphaF(0.3);
-        }
         else
             d->m_pbkgColor = opt.palette.color(QPalette::Button);
 
@@ -428,7 +424,7 @@
             if(isChecked() )
                 d->m_pbkgColor = opt.palette.color(QPalette::Highlight);
             else
-                d->m_pbkgColor = opt.palette.color(QPalette::Button);
+                 d->m_pbkgColor = opt.palette.color(QPalette::Button);
         }
     }
 
@@ -440,7 +436,6 @@
 
     QRect rect = this->rect();
     QPainterPath path;
-
     switch (d->m_pButtonType)
     {
     case NormalType:
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kprogressbar.cpp libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kprogressbar.cpp
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kprogressbar.cpp	2024-05-16 09:25:54.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kprogressbar.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -27,6 +27,8 @@
 #include <QRect>
 #include <QFontMetrics>
 #include <QApplication>
+#include <QLinearGradient>
+#include <QVariantAnimation>
 #include <QDebug>
 
 namespace  kdk
@@ -55,6 +57,18 @@
     QRect m_contentRect;
     QRect m_rect;
     int m_bodyWidth;
+    QLinearGradient m_linearGradient;
+    bool isLinearGradient;
+    QColor m_color1;
+    QColor m_color2;
+    QColor m_backgroundColor;
+    bool isBackgroundColor;
+    QColor m_fillColor;
+    bool isFillColor;
+    QVariantAnimation* m_pAnimation;
+    qreal m_animationPos;
+    bool linearGradient;
+    bool animationsFlag;
 };
 
 KProgressBar::KProgressBar(QWidget *parent)
@@ -66,8 +80,21 @@
     connect(d->m_gsetting,&QGSettings::changed,d,&KProgressBarPrivate::changeTheme);
     connect(this,&KProgressBar::valueChanged,this,[=](){
         if(this->value()==this->maximum())
+        {
             setState(SuccessProgress);
+        }
     });
+
+    connect(d->m_pAnimation, &QVariantAnimation::valueChanged, this,[=](const QVariant &value) {
+        if(orientation() == Qt::Horizontal)
+            d->m_animationPos = value.toDouble()/d->m_contentRect.width();
+        else
+        {
+            d->m_animationPos = (value.toDouble()-d->m_contentRect.top())/d->m_contentRect.height();
+        }
+        update();
+    });
+
     setContentsMargins(6,6,6,6);
     setValue(0);
 }
@@ -82,6 +109,14 @@
 {
     Q_D(KProgressBar);
     d->m_state = state;
+    if(d->animationsFlag && state == ProgressBarState::NormalProgress)
+    {
+        d->m_pAnimation->start();
+    }
+    else
+    {
+        d->m_pAnimation->stop();
+    }
     update();
 }
 
@@ -119,13 +154,20 @@
         }
         else
         {
-            if(ThemeController::themeMode() == LightTheme)
-                painter.setBrush(QColor(230,230,230));
-            else
-                painter.setBrush(QColor(55,55,59));
+	    if(d->isBackgroundColor)
+                painter.setBrush(d->m_backgroundColor);
+	    else
+	    {
+                if(ThemeController::themeMode() == LightTheme)
+                    painter.setBrush(QColor(230,230,230));
+                else
+                    painter.setBrush(QColor(55,55,59));
+  	    }
             painter.drawRoundedRect(d->m_rect,6,6);
         }
-        QLinearGradient linear(this->rect().topLeft(), this->rect().bottomRight());
+//        QLinearGradient linear(this->rect().topLeft(), this->rect().bottomRight());
+        QLinearGradient linear(d->m_contentRect.left(),0,d->m_contentRect.right(),0);
+        d->m_linearGradient = QLinearGradient(d->m_contentRect.topLeft(),d->m_contentRect.bottomRight());
         QColor color = palette().color(QPalette::Highlight);
         switch (d->m_state)
         {
@@ -148,13 +190,37 @@
             }
             else
             {
-                QColor startColor = ThemeController::mixColor(color,Qt::white,0.2);
-                QColor endColor = ThemeController::mixColor(color,Qt::white,0.05);
-                linear.setColorAt(0, startColor);
-                linear.setColorAt(1, endColor);
+                if(d->animationsFlag)
+                {
+                    QColor startColor = ThemeController::mixColor(color,Qt::white,0.5);
+                    linear.setColorAt(0, color);
+                    linear.setColorAt(d->m_animationPos,startColor);
+                    linear.setColorAt(1, color);
+                }
+                else
+                {
+                    QColor startColor = ThemeController::mixColor(color,Qt::white,0.2);
+                    QColor endColor = ThemeController::mixColor(color,Qt::white,0.05);
+                    linear.setColorAt(0, startColor);
+                    linear.setColorAt(1, endColor);
+                }
             }
             linear.setSpread(QGradient::PadSpread);
-            painter.setBrush(linear);
+            if(d->isLinearGradient)
+            {
+                if(!d->linearGradient)
+                {
+                    d->m_color1 = ThemeController::mixColor(color,Qt::white,0.2);
+                    d->m_color2 = ThemeController::mixColor(color,Qt::white,0.05);
+                }
+                d->m_linearGradient.setColorAt(0,d->m_color1);
+                d->m_linearGradient.setColorAt(1,d->m_color2);
+                painter.setBrush(d->m_linearGradient);
+            }
+            else if(d->isFillColor)
+                painter.setBrush(d->m_fillColor);
+            else
+                painter.setBrush(linear);
             if(ThemeController::widgetTheme() == ClassicTheme)
                 painter.drawRoundedRect(d->m_contentRect,0,0);
             else
@@ -254,13 +320,20 @@
         }
         else
         {
-            if(ThemeController::themeMode() == LightTheme)
-                painter.setBrush(QColor(230,230,230));
+            if(d->isBackgroundColor)
+                painter.setBrush(d->m_backgroundColor);
             else
-                painter.setBrush(QColor(55,55,59));
+            {
+                if(ThemeController::themeMode() == LightTheme)
+                    painter.setBrush(QColor(230,230,230));
+                else
+                    painter.setBrush(QColor(55,55,59));
+            }
             painter.drawRoundedRect(d->m_rect,6,6);
         }
-        QLinearGradient linear(this->rect().topLeft(), this->rect().bottomRight());
+        QLinearGradient linear(0,d->m_contentRect.top(),0, d->m_contentRect.bottom());
+
+        d->m_linearGradient = QLinearGradient(d->m_contentRect.topLeft(),d->m_contentRect.bottomRight());
         QColor color = palette().color(QPalette::Highlight);
         switch (d->m_state)
         {
@@ -283,13 +356,37 @@
             }
             else
             {
-                QColor startColor = ThemeController::mixColor(color,Qt::white,0.2);
-                QColor endColor = ThemeController::mixColor(color,Qt::white,0.05);
-                linear.setColorAt(0, startColor);
-                linear.setColorAt(1, endColor);
+                if(d->animationsFlag)
+                {
+                    QColor startColor = ThemeController::mixColor(color,Qt::white,0.5);
+                    linear.setColorAt(0, color);
+                    linear.setColorAt(d->m_animationPos,startColor);
+                    linear.setColorAt(1, color);
+                }
+                else
+                {
+                    QColor startColor = ThemeController::mixColor(color,Qt::white,0.2);
+                    QColor endColor = ThemeController::mixColor(color,Qt::white,0.05);
+                    linear.setColorAt(0, startColor);
+                    linear.setColorAt(1, endColor);
+                }
             }
             linear.setSpread(QGradient::PadSpread);
-            painter.setBrush(linear);
+            if(d->isLinearGradient)
+            {
+                if(!d->linearGradient)
+                {
+                    d->m_color1 = ThemeController::mixColor(color,Qt::white,0.2);
+                    d->m_color2 = ThemeController::mixColor(color,Qt::white,0.05);
+                }
+                d->m_linearGradient.setColorAt(0,d->m_color1);
+                d->m_linearGradient.setColorAt(1,d->m_color2);
+                painter.setBrush(d->m_linearGradient);
+            }
+            else if(d->isFillColor)
+                painter.setBrush(d->m_fillColor);
+            else
+                painter.setBrush(linear);
             if(ThemeController::widgetTheme() == ClassicTheme)
                 painter.drawRoundedRect(d->m_contentRect,0,0);
             else
@@ -426,14 +523,80 @@
     update();
 }
 
+void KProgressBar::setGradationColor(QColor color1, QColor color2)
+{
+    Q_D(KProgressBar);
+    d->linearGradient = true;
+    d->m_color1 = color1;
+    d->m_color2 = color2;
+}
+
+void KProgressBar::setBackgroundColor(QColor color)
+{
+    Q_D(KProgressBar);
+    d->m_backgroundColor = color;
+    d->isBackgroundColor = true;
+}
+
+void KProgressBar::setFillColor(QColor color)
+{
+    Q_D(KProgressBar);
+    d->m_fillColor = color;
+    d->isFillColor = true;
+}
+
+void KProgressBar::setGradation(bool flag)
+{
+    Q_D(KProgressBar);
+    d->isLinearGradient = flag;
+}
+
+bool KProgressBar::gradation()
+{
+    Q_D(KProgressBar);
+    return d->isLinearGradient;
+}
+
+void KProgressBar::setAnimation(bool flag)
+{
+    Q_D(KProgressBar);
+    d->animationsFlag = flag;
+
+    if(!flag)
+    {
+        d->m_pAnimation->stop();
+    }
+    else
+    {
+        d->m_pAnimation->start();
+    }
+}
+
+bool KProgressBar::animation()
+{
+    Q_D(KProgressBar);
+    return d->animationsFlag ;
+}
 
 KProgressBarPrivate::KProgressBarPrivate(KProgressBar *parent)
     :q_ptr(parent)
 {
+    Q_Q(KProgressBar);
     m_contentMargin = 2;
     m_state = NormalProgress;
     setParent(parent);
     m_bodyWidth = 0;
+    isLinearGradient = false;
+    isBackgroundColor = false;
+    isFillColor = false;
+    linearGradient = false;
+    animationsFlag = false;
+
+    m_animationPos = 0.00;
+    m_pAnimation = new QVariantAnimation();
+    m_pAnimation->setDuration(1000);
+    m_pAnimation->setEasingCurve(QEasingCurve::Linear);
+    m_pAnimation->setLoopCount(-1);
 }
 
 void KProgressBarPrivate::calculateTextRect()
@@ -452,7 +615,12 @@
             if(q->alignment() & Qt::AlignCenter)
                 return;
             else
-                m_textRect.moveRight(q->rect().right());
+            {
+                if(ThemeController::systemLang())
+                    m_textRect.moveLeft(q->rect().left());
+                else
+                    m_textRect.moveRight(q->rect().right());
+            }
         }
         else
         {
@@ -482,7 +650,10 @@
                 return;
             else
             {
-                m_rect.setRight(q->rect().width() - margins.right() - m_textRect.width()/*-gSpace*/);
+                if(ThemeController::systemLang())
+                    m_rect.setLeft(margins.right() + m_textRect.width()/*-gSpace*/);
+                else
+                    m_rect.setRight(q->rect().width() - margins.right() - m_textRect.width()/*-gSpace*/);
             }
         }
     }
@@ -527,6 +698,8 @@
         {
             m_contentRect.setLeft(m_rect.width() - width);
         }
+        m_pAnimation->setStartValue(m_contentRect.x());
+        m_pAnimation->setEndValue(m_contentRect.width());
     }
     else
     {
@@ -546,6 +719,8 @@
         {
             m_contentRect.setBottom(m_rect.top() +height);
         }
+        m_pAnimation->setStartValue(m_contentRect.bottom());
+        m_pAnimation->setEndValue(m_contentRect.top());
     }
 }
 
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kprogressbar.h libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kprogressbar.h
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kprogressbar.h	2024-05-16 09:25:54.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kprogressbar.h	2024-10-29 15:22:42.000000000 +0800
@@ -84,6 +84,56 @@
      */
     void setBodyWidth(int width);
 
+    /**
+     * @brief 设置首尾位置的渐变颜色
+     * @since 2.5
+     * @param color1
+     * @param color2
+     */
+    void setGradationColor(QColor color1 ,QColor color2);
+
+    /**
+     * @brief 设置背景色
+     * @since 2.5
+     * @param color
+     */
+    void setBackgroundColor(QColor color);
+
+    /**
+     * @brief 设置填充色
+     * @since 2.5
+     * @param color
+     */
+    void setFillColor(QColor color);
+
+    /**
+     * @brief 是否启用自定义渐变色
+     * @since 2.5
+     * @param flag
+     */
+    void setGradation(bool flag);
+
+    /**
+     * @brief 获取是否启用自定义渐变色
+     * @since 2.5
+     * @return
+     */
+    bool gradation();
+
+    /**
+     * @brief 是否启用动画
+     * @since 2.5
+     * @param flag
+     */
+    void setAnimation(bool flag);
+
+    /**
+     * @brief 获取是否启用动画
+     * @since 2.5
+     * @return
+     */
+    bool animation();
+
 protected:
     void paintEvent(QPaintEvent *event) override;
     QSize sizeHint() const;
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kprogressdialog.cpp libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kprogressdialog.cpp
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kprogressdialog.cpp	2024-05-16 09:25:54.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kprogressdialog.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -21,6 +21,8 @@
  */
 
 #include "kprogressdialog.h"
+#include "parmscontroller.h"
+#include <QLayoutItem>
 
 namespace kdk
 {
@@ -43,13 +45,21 @@
     QLabel *m_pSubContentLabel;
     QLabel *m_pProgressLabel;
     QPushButton* m_pCanelButton;
+    QList<QPushButton* > m_pButtons;
     QVBoxLayout* m_pMainLayout;
 
     QString m_suffix;
+    QString m_numerator;
+    QString m_denominator;
+    QString m_speed;
 
+    BarType m_type;
     bool m_autoClose;
     bool m_autoReset;
     bool m_forceHide;
+
+    int m_maxValue;
+    int m_minVlaue;
 };
 
 KProgressDialog::KProgressDialog(QWidget *parent)
@@ -60,7 +70,7 @@
 //    setFixedSize(440,265);
     this->layout()->setSizeConstraint(QLayout::SizeConstraint::SetFixedSize);
     d->m_pMainLayout = new QVBoxLayout();
-    d->m_pMainLayout->setContentsMargins(25,0,25,30);
+    d->m_pMainLayout->setContentsMargins(24,0,24,24);
     d->m_pMainLayout->setSpacing(0);
     d->m_pMainLabel = new QLabel(this);
 
@@ -76,6 +86,11 @@
     d->m_autoReset = true;
     d->m_forceHide = false;
 
+    d->m_maxValue = maximum();
+    d->m_minVlaue = minimum();
+
+    d->m_type = BarType::NormalBar;
+
     d->adjustNormalMode();
     setShowDetail(false);
     changeTheme();
@@ -134,7 +149,33 @@
 void KProgressDialog::setSuffix(const QString &suffix)
 {
     Q_D(KProgressDialog);
-    d->m_suffix = suffix;
+    if(myType()==BarType::NormalBar)
+    {
+        d->m_suffix = suffix;
+    }
+
+    d->adjustNormalMode();
+}
+
+void KProgressDialog::setSuffix(const QString &numerator,const QString &denominator)
+{
+    Q_D(KProgressDialog);
+    //加一些type的判断
+    if(myType()==BarType::SpeedBar)
+    {
+        d->m_numerator = numerator;
+        d->m_denominator = denominator;
+    }
+
+    d->adjustNormalMode();
+}
+
+void KProgressDialog::setSpeed(const float &speed)
+{
+    Q_D(KProgressDialog);
+    d->m_speed = QString::number(speed);
+    if(d->m_type == BarType::SpeedBar)
+        d->m_pProgressLabel->setText(QString("%1 %2/%3").arg(d->m_speed).arg(d->m_numerator).arg(d->m_denominator));
 }
 
 void KProgressDialog::setShowDetail(bool flag)
@@ -223,6 +264,55 @@
     return d->m_pProgressBar;
 }
 
+void KProgressDialog::setBarType(const BarType &type)
+{
+    Q_D(KProgressDialog);
+    d->m_type = type;
+    if(type == BarType::ScrollBar)
+    {
+        if(d->m_pProgressBar->minimum() != d->m_pProgressBar->maximum() != 0 )
+        {
+            d->m_maxValue = d->m_pProgressBar->maximum();
+            d->m_minVlaue = d->m_pProgressBar->minimum();
+        }
+    }
+    if(type == BarType::NormalBar)
+        d->m_pProgressLabel->setText(QString("%1%2/%3%4").arg(d->m_pProgressBar->value()).arg(d->m_suffix).arg(maximum()).arg(d->m_suffix));
+    else if(type == BarType::SpeedBar)
+        d->m_pProgressLabel->setText(QString("%1 %2/%3").arg(d->m_speed).arg(d->m_numerator).arg(d->m_denominator));
+
+    d->adjustNormalMode();
+}
+
+void KProgressDialog::addButton(QPushButton *button)
+{
+    Q_D(KProgressDialog);
+    if(!d->m_pButtons.contains(button))
+    {
+        if (d->m_pButtons.count() >= 3)
+            return;
+        if(button)
+            d->m_pButtons.append(button);
+        d->adjustNormalMode();
+    }
+}
+
+void KProgressDialog::removeButton(QPushButton *button)
+{
+    Q_D(KProgressDialog);
+    if(d->m_pButtons.contains(button))
+    {
+        d->m_pButtons.removeAll(button);
+    }
+    d->adjustNormalMode();
+}
+
+BarType KProgressDialog::myType()
+{
+    Q_D(KProgressDialog);
+    return d->m_type;
+}
+
 void KProgressDialog::cancel()
 {
     Q_D(KProgressDialog);
@@ -269,7 +359,12 @@
     if(d->m_pPercentLabel)
         d->m_pPercentLabel->setText(QString::number(progress*100/maximum())+"%");
     if(d->m_pProgressLabel)
-        d->m_pProgressLabel->setText(QString("%1%2/%3%4").arg(progress).arg(d->m_suffix).arg(maximum()).arg(d->m_suffix));
+    {
+        if(d->m_type != BarType::SpeedBar)
+            d->m_pProgressLabel->setText(QString("%1%2/%3%4").arg(progress).arg(d->m_suffix).arg(maximum()).arg(d->m_suffix));
+//        else
+//            d->m_pProgressLabel->setText(QString("%1 %2/%3").arg(d->m_speed).arg(d->m_numerator).arg(d->m_denominator));
+    }
 }
 
 void KProgressDialog::setLabelText(const QString &text)
@@ -320,26 +415,196 @@
 {
     Q_Q(KProgressDialog);
 
-    QHBoxLayout* hLayout = new QHBoxLayout;
-    hLayout->setSpacing(0);
-    hLayout->addWidget(m_pSubContentLabel);
-    hLayout->addStretch();
-    hLayout->addWidget(m_pPercentLabel);
-    hLayout->addSpacing(15);
-    hLayout->addWidget(m_pProgressLabel);
-
-    m_pMainLayout->addStretch();
-    m_pMainLayout->addWidget(m_pMainLabel);
-    m_pMainLayout->addSpacing(10);
-    m_pMainLayout->addWidget(m_pProgressBar);
-    m_pMainLayout->addLayout(hLayout);
-
-    hLayout = new QHBoxLayout;
-    hLayout->addStretch();
-    hLayout->addWidget(m_pCanelButton);
-    m_pMainLayout->addSpacing(30);
-    m_pMainLayout->addLayout(hLayout);
+        QLayoutItem *child;
+        while ((child = m_pMainLayout->takeAt(0)) != 0)
+        {
+            //删除Stretch(弹簧)等布局
+            if (child->spacerItem())
+            {
+                m_pMainLayout->removeItem(child);
+                continue;
+            }
+            //删除layout
+            else if(child->layout())
+            {
+                QLayoutItem *item = child->layout()->takeAt(0);
+                while(item != 0)
+                {
+                    child->layout()->removeItem(item);
+                    delete item;
+                    item = child->layout()->takeAt(0);
+                }
+            }
+            else  //删除布局
+            {
+                m_pMainLayout->removeWidget(child->widget());
+                child->widget()->setParent(nullptr);
+            }
+
+            delete child;
+            child =nullptr;
+        }
+
     q->mainWidget()->setLayout(m_pMainLayout);
+    switch (m_type)
+        {
+        case BarType::NothingBar:
+        {
+            m_pProgressBar->setTextVisible(false);
+
+            m_pMainLayout->addStretch();
+            m_pMainLayout->addSpacing(24);
+            m_pMainLayout->addWidget(m_pMainLabel);
+            m_pMainLayout->addSpacing(8);
+
+            m_pProgressBar->setMaximum(m_maxValue);
+            m_pProgressBar->setMinimum(m_minVlaue);
+            QHBoxLayout* hLayout = new QHBoxLayout;
+            hLayout->setSpacing(0);
+            hLayout->addWidget(m_pProgressBar);
+            hLayout->addSpacing(8);
+            hLayout->addWidget(m_pPercentLabel);
+            m_pMainLayout->addLayout(hLayout);
+            m_pProgressBar->show();
+            m_pSubContentLabel->hide();
+            m_pPercentLabel->show();
+            m_pProgressLabel->hide();
+            m_pCanelButton->hide();
+
+            q->iconBar()->setFixedHeight(0);
+            q->windowButtonBar()->setVisible(false);
+            break;
+        }
+        case BarType::NormalBar:
+        {
+            q->iconBar()->setFixedHeight(Parmscontroller::parm(Parmscontroller::Parm::PM_IconbarHeight));
+            q->iconBar()->show();
+            m_pProgressBar->setTextVisible(true);
+            m_pMainLayout->addStretch();
+            m_pMainLayout->addSpacing(30);
+            m_pMainLayout->addWidget(m_pMainLabel);
+            m_pMainLayout->addSpacing(10);
+            m_pMainLayout->addWidget(m_pProgressBar);
+            m_pProgressBar->setMaximum(m_maxValue);
+            m_pProgressBar->setMinimum(m_minVlaue);
+
+            QHBoxLayout* hLayout = new QHBoxLayout;
+            hLayout->setSpacing(0);
+            hLayout->addWidget(m_pSubContentLabel);
+            hLayout->addStretch();
+            hLayout->addWidget(m_pPercentLabel);
+            hLayout->addSpacing(15);
+            hLayout->addWidget(m_pProgressLabel);
+            m_pMainLayout->addLayout(hLayout);
+
+            hLayout = new QHBoxLayout;
+            hLayout->addStretch();
+            hLayout->addWidget(m_pCanelButton);
+
+            m_pMainLayout->addSpacing(30);
+            m_pMainLayout->addLayout(hLayout);
+
+            m_pProgressBar->show();
+            m_pSubContentLabel->show();
+            m_pPercentLabel->show();
+            m_pProgressLabel->show();
+            m_pCanelButton->show();
+            q->windowButtonBar()->setVisible(true);
+            break;
+        }
+        case BarType::ScrollBar:
+        {
+
+            m_pProgressBar->setTextVisible(false);
+            m_pProgressBar->setMaximum(0);
+            m_pProgressBar->setMinimum(0);
+            m_pMainLayout->addStretch();
+            m_pMainLayout->addSpacing(24);
+            m_pMainLayout->addWidget(m_pMainLabel);
+            m_pMainLayout->addSpacing(8);
+            m_pMainLayout->addWidget(m_pProgressBar);
+            q->iconBar()->setFixedHeight(0);
+
+            m_pSubContentLabel->hide();
+            m_pPercentLabel->hide();
+            m_pProgressLabel->hide();
+            m_pCanelButton->hide();
+
+            q->windowButtonBar()->setVisible(false);
+            break;
+        }
+        case BarType::SpeedBar:
+        {
+
+            q->iconBar()->setFixedHeight(Parmscontroller::parm(Parmscontroller::Parm::PM_IconbarHeight));
+            q->iconBar()->hide();
+            m_pProgressBar->setTextVisible(false);
+            m_pMainLayout->addStretch();
+            m_pMainLayout->addSpacing(4);
+            m_pMainLayout->addWidget(m_pMainLabel);
+            m_pMainLayout->addSpacing(8);
+            m_pProgressBar->setMaximum(m_maxValue);
+            m_pProgressBar->setMinimum(m_minVlaue);
+
+            QHBoxLayout* hLayout = new QHBoxLayout;
+            hLayout->setSpacing(0);
+            hLayout->addWidget(m_pProgressBar);
+            hLayout->addSpacing(8);
+            hLayout->addWidget(m_pPercentLabel);
+            m_pMainLayout->addLayout(hLayout);
+
+            hLayout = new QHBoxLayout;
+            hLayout->setSpacing(0);
+            hLayout->addWidget(m_pSubContentLabel);
+            hLayout->addStretch();
+            hLayout->addWidget(m_pProgressLabel);
+            hLayout->addSpacing(36);
+            m_pMainLayout->addSpacing(4);
+            m_pMainLayout->addLayout(hLayout);
+
+            hLayout = new QHBoxLayout;
+            if(!m_pButtons.isEmpty())
+            {
+                if(m_pButtons.count() == 1)
+                {
+                    hLayout->addStretch();
+                    hLayout->addWidget((m_pButtons.first()));
+                }
+                else if(m_pButtons.count() == 2)
+                {
+                    hLayout->addStretch();
+                    hLayout->addWidget(m_pButtons[1]);
+                    hLayout->addSpacing(8);
+                    hLayout->addWidget(m_pButtons[0]);
+                }
+                else
+                {
+                    hLayout->addWidget(m_pButtons[2]);
+                    hLayout->addStretch();
+                    hLayout->addWidget(m_pButtons[1]);
+                    hLayout->addSpacing(8);
+                    hLayout->addWidget(m_pButtons[0]);
+                }
+            }
+
+            m_pMainLayout->addSpacing(32);
+            m_pMainLayout->addLayout(hLayout);
+            m_pMainLayout->addStretch();
+
+            m_pProgressBar->show();
+            m_pSubContentLabel->show();
+            m_pPercentLabel->show();
+            m_pProgressLabel->show();
+
+            m_pCanelButton->hide();
+         
+            q->windowButtonBar()->setVisible(true);
+            break;
+        }
+        default:
+            break;
+        }
+
 }
 
 void KProgressDialogPrivate::infoReset()
@@ -349,8 +614,15 @@
     if(m_pPercentLabel)
         m_pPercentLabel->setText(+"0%");
     if(m_pProgressLabel)
-        m_pProgressLabel->setText(QString("%1%2/%3%4").arg(0).arg(m_suffix).arg(q->maximum()).arg(m_suffix));
+    {
+        if(m_type != BarType::SpeedBar)
+            m_pProgressLabel->setText(QString("%1%2/%3%4").arg(0).arg(m_suffix).arg(q->maximum()).arg(m_suffix));
+        else
+            m_pProgressLabel->setText(QString("%1 %2/%3").arg(0).arg(m_numerator).arg(m_denominator));
+    }
 }
+
+
 }
 #include "kprogressdialog.moc"
 #include "moc_kprogressdialog.cpp"
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kprogressdialog.h libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kprogressdialog.h
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kprogressdialog.h	2024-05-16 09:25:54.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kprogressdialog.h	2024-10-29 15:22:42.000000000 +0800
@@ -42,6 +42,17 @@
   * @{
   */
 
+/**
+ * @brief 支持三种样式
+ */
+enum BarType
+{
+    ScrollBar,
+    NothingBar,
+    NormalBar,
+    SpeedBar
+};
+
 class KProgressDialogPrivate;
 
 /**
@@ -81,6 +92,10 @@
      */
     void setSuffix(const QString& suffix);
 
+    void setSuffix(const QString &numerator,const QString &denominator);
+
+    void setSpeed(const float& speed);
+
     /**
      * @brief 设置是否显示详细信息
      * @param flag
@@ -141,6 +156,14 @@
      */
     QProgressBar* progressBar();
 
+    void setBarType(const BarType& type);
+
+    void addButton(QPushButton* button);
+
+    void removeButton(QPushButton* button);
+
+    BarType myType();
+
 Q_SIGNALS:
     void canceled();
 
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kprogresslabel.cpp libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kprogresslabel.cpp
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kprogresslabel.cpp	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kprogresslabel.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,518 @@
+/*
+ * libkysdk-qtwidgets's Library
+ *
+ * Copyright (C) 2023, KylinSoft Co., Ltd.
+ *
+ * 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 3 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 General Public License
+ * along with this library.  If not, see <https://www.gnu.org/licenses/>.
+ *
+ * Authors: Zhenyu Wang <wangzhenyu@kylinos.cn>
+ *
+ */
+
+#include "kprogresslabel.h"
+#include "themeController.h"
+#include <QGSettings/QGSettings>
+#include <QVariant>
+#include <QIcon>
+#include <QDebug>
+
+namespace kdk {
+
+class Q_DECL_HIDDEN LineLabel : public QLabel
+{
+    Q_OBJECT
+public:
+    LineLabel(QWidget *parent = nullptr);
+    virtual ~LineLabel();
+
+    void setBackgroundHighlight(bool flag);
+
+protected:
+    virtual void paintEvent(QPaintEvent *);
+
+private:
+    QColor m_backgroundColor;
+    bool colorFlag;
+};
+
+class Q_DECL_HIDDEN CircleLable : public QLabel
+{
+    Q_OBJECT
+public:
+    CircleLable(const QString &text, QWidget *parent = nullptr);
+    virtual ~CircleLable();
+    void setText(const QString &text);
+    void setBackgroundHighlight(bool flag);
+    void setSucceed(bool flag);
+
+protected:
+    virtual void paintEvent(QPaintEvent *);
+
+private:
+    QString m_text;
+    QColor m_textColor;
+    QColor m_backgroundColor;
+    bool colorFlag;
+    bool isSucceed;
+    int m_radius;
+};
+
+class Q_DECL_HIDDEN TextLabel : public QLabel ,public ThemeController
+{
+    Q_OBJECT
+public:
+    TextLabel(QString str, QWidget *parent = nullptr);
+    virtual ~TextLabel();
+
+    void setTextHighlight(bool flag);
+    void followPalette(bool flag);
+protected:
+    virtual void paintEvent(QPaintEvent *);
+
+private:
+    bool isPalette;
+};
+
+class Q_DECL_HIDDEN KProgressLabelPrivate : public QObject , public ThemeController
+{
+    Q_OBJECT
+    Q_DECLARE_PUBLIC(KProgressLabel)
+public:
+    KProgressLabelPrivate(KProgressLabel * parent);
+
+protected:
+    void changeTheme();
+
+private:
+    KProgressLabel *const q_ptr;
+
+    QVBoxLayout *mainLayout;
+    QHBoxLayout *circleLayout;
+    QHBoxLayout *textLayout;
+
+    int m_count;
+    QSize m_circleSize;
+    QList<CircleLable *> circleList;
+    QList<LineLabel *> lineList;
+    QList<TextLabel *> textList;
+};
+
+KProgressLabel::KProgressLabel(QWidget *parent)
+    : QWidget(parent),
+      d_ptr(new KProgressLabelPrivate(this))
+{
+    Q_D(KProgressLabel);
+    d->mainLayout = new QVBoxLayout(this);
+    QWidget *wid1 = new QWidget();
+    QWidget *wid2 = new QWidget();
+    d->circleLayout = new QHBoxLayout(wid1);
+    d->circleLayout->setContentsMargins(0,0,0,0);
+    d->textLayout = new QHBoxLayout(wid2);
+    d->textLayout->setContentsMargins(8,0,8,0);
+    d->mainLayout->setSpacing(0);
+    d->mainLayout->addWidget(wid1);
+    d->mainLayout->addSpacing(8);
+    d->mainLayout->addWidget(wid2);
+    setSizePolicy(QSizePolicy::Preferred,QSizePolicy::Fixed);
+}
+
+KProgressLabel::~KProgressLabel()
+{
+}
+
+void KProgressLabel::setStringList(QStringList list1, QStringList list2)
+{
+    Q_D(KProgressLabel);
+    //若布局不为空,则清空布局
+    if (!d->circleLayout->isEmpty() || !d->textLayout->isEmpty())
+    {
+        //先清除list
+        d->circleList.clear();
+        d->lineList.clear();
+        d->textList.clear();
+
+        QLayoutItem *child;
+        while ((child = d->circleLayout->takeAt(0)) != 0)
+        {
+            //删除Stretch(弹簧)等布局
+            if (child->spacerItem())
+            {
+                d->circleLayout->removeItem(child);
+                continue;
+            }
+            //删除布局
+            d->circleLayout->removeWidget(child->widget());
+            child->widget()->setParent(nullptr);
+            delete child;
+            child = nullptr;
+        }
+        while ((child = d->textLayout->takeAt(0)) != 0)
+        {
+            if (child->spacerItem())
+            {
+                d->textLayout->removeItem(child);
+                continue;
+            }
+            d->textLayout->removeWidget(child->widget());
+            child->widget()->setParent(nullptr);
+            delete child;
+            child = nullptr;
+        }
+        d->circleLayout->addSpacing(80);
+        d->textLayout->addSpacing(11);
+    }
+    for (int i = 0; i < list1.count(); i++)
+    {
+        //第一行圆形label
+        QString str;
+        if (i < list1.count())
+            str = list1.at(i);
+        CircleLable *circlelabel = new CircleLable(str, this);
+        circlelabel->setFixedSize(d->m_circleSize);
+        d->circleList.append(circlelabel);
+        d->circleLayout->addWidget(circlelabel);
+
+        if (i < list1.count() - 1)
+        {
+            //第一行线条label
+            LineLabel *lineLabel;
+            lineLabel = new LineLabel(this);
+            d->lineList.append(lineLabel);
+            d->circleLayout->addWidget(lineLabel);
+        }
+    }
+    //第二行文本label
+    for (int i = 0; i < list2.count(); i++)
+    {
+        TextLabel *textLabel = new TextLabel(list2.at(i), this);
+        textLabel->setWordWrap(true);
+        textLabel->setAlignment(Qt::AlignCenter);
+        textLabel->setScaledContents(true);
+        d->textList.append(textLabel);
+        d->textLayout->addWidget(textLabel);
+        if (i < list2.count() - 1)
+            d->textLayout->addStretch();
+    }
+}
+
+void KProgressLabel::setStringList(QStringList list1)
+{
+    Q_D(KProgressLabel);
+    if (!d->circleLayout->isEmpty() || !d->textLayout->isEmpty())
+    {
+        //先清除list
+        d->circleList.clear();
+        d->lineList.clear();
+        d->textList.clear();
+
+        QLayoutItem *child;
+        while ((child = d->circleLayout->takeAt(0)) != 0)
+        {
+            //删除Stretch(弹簧)等布局
+            if (child->spacerItem())
+            {
+                d->circleLayout->removeItem(child);
+                continue;
+            }
+            //删除布局
+            d->circleLayout->removeWidget(child->widget());
+            child->widget()->setParent(nullptr);
+            delete child;
+            child = nullptr;
+        }
+        while ((child = d->textLayout->takeAt(0)) != 0)
+        {
+            if (child->spacerItem())
+            {
+                d->textLayout->removeItem(child);
+                continue;
+            }
+            d->textLayout->removeWidget(child->widget());
+            child->widget()->setParent(nullptr);
+            delete child;
+            child = nullptr;
+        }
+        d->circleLayout->addSpacing(80);
+//        d->textLayout->addSpacing(11);
+    }
+    for (int i = 0; i < list1.count(); i++)
+    {
+        //第一行圆形label
+        QString str;
+        CircleLable *circlelabel = new CircleLable(str, this);
+        circlelabel->setFixedSize(d->m_circleSize);
+        d->circleList.append(circlelabel);
+        d->circleLayout->addWidget(circlelabel);
+
+        if (i < list1.count() - 1)
+        {
+            //第一行线条label
+            LineLabel *lineLabel;
+            lineLabel = new LineLabel(this);
+            d->lineList.append(lineLabel);
+            d->circleLayout->addWidget(lineLabel);
+        }
+    }
+    //第二行文本label
+    for (int i = 0; i < list1.count(); i++)
+    {
+        TextLabel *textLabel = new TextLabel(list1.at(i), this);
+        textLabel->setWordWrap(true);
+        textLabel->setAlignment(Qt::AlignCenter);
+        textLabel->setScaledContents(true);
+        d->textList.append(textLabel);
+        d->textLayout->addWidget(textLabel);
+        if (i < list1.count() - 1)
+            d->textLayout->addStretch();
+    }
+
+}
+
+void KProgressLabel::setCurrentIndex(int index)
+{
+    Q_D(KProgressLabel);
+    if(index < -1)
+        return ;
+    if(index > d->circleList.count() - 1)
+        return ;
+    for (int i = 0; i <= index; i++)
+    {
+        if (i < index)
+            d->circleList.at(i)->setBackgroundHighlight(true);
+        if (i < d->lineList.count())
+            d->lineList.at(i)->setBackgroundHighlight(true);
+        if (i < index)
+            d->textList.at(i)->setTextHighlight(false);
+        if (i == index)
+        {
+            d->circleList.at(i)->setBackgroundHighlight(false);
+            d->circleList.at(i)->setSucceed(true);
+            d->textList.at(i)->setTextHighlight(true);
+        }
+    }
+    if (d->m_count > index)
+    {
+        for (int j = index + 1; j < d->circleList.count(); j++)
+        {
+            if (j < d->circleList.count())
+            {
+                d->circleList.at(j)->setSucceed(false);
+                d->circleList.at(j)->setBackgroundHighlight(false);
+            }
+            if (j < d->lineList.count())
+                d->lineList.at(j)->setBackgroundHighlight(false);
+            if (j < d->textList.count())
+                d->textList.at(j)->followPalette(false);
+        }
+    }
+    d->m_count = index;
+    repaint();
+}
+
+int KProgressLabel::currentIndex()
+{
+    Q_D(KProgressLabel);
+    return d->m_count;
+}
+
+void KProgressLabel::setCircleSize(QSize size)
+{
+    Q_D(KProgressLabel);
+    for (int count = 0; count < d->circleList.count(); count++)
+    {
+        d->m_circleSize = size;
+        d->circleList.at(count)->setFixedSize(size);
+        d->textLayout->setContentsMargins(size.width()/2 - 6,0,size.width()/2 - 6,0);
+    }
+}
+
+LineLabel::LineLabel(QWidget *parent)
+    :QLabel(parent),
+    colorFlag(false)
+{
+    setMaximumHeight(30);
+    setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
+}
+
+LineLabel::~LineLabel()
+{
+}
+
+void LineLabel::setBackgroundHighlight(bool flag)
+{
+    colorFlag = flag;
+}
+
+void LineLabel::paintEvent(QPaintEvent *event)
+{
+    Q_UNUSED(event)
+    QPainter painter(this);
+    painter.setRenderHint(QPainter::Antialiasing);
+    painter.save();
+    if (!colorFlag)
+    {
+        m_backgroundColor = palette().midlight().color();
+    }
+    else
+    {
+        m_backgroundColor = palette().highlight().color();
+    }
+    QPen pen = painter.pen();
+    pen.setColor(m_backgroundColor);
+    pen.setWidth(2);
+    painter.setPen(pen);
+    QRect rect = this->rect();
+    painter.drawLine(0, rect.height() / 2, rect.width(), rect.height() / 2);
+
+    painter.restore();
+    QLabel::paintEvent(event);
+}
+
+CircleLable::CircleLable(const QString &text, QWidget *parent)
+    : QLabel(parent),
+      m_text(text),
+      m_radius(24),
+      colorFlag(false),
+      isSucceed(false),
+      m_textColor(Qt::white)
+{
+    setFixedSize(QSize(m_radius, m_radius));
+}
+
+CircleLable::~CircleLable()
+{
+}
+
+void CircleLable::setText(const QString &text)
+{
+    m_text = text;
+    repaint();
+}
+
+void CircleLable::setBackgroundHighlight(bool flag)
+{
+    colorFlag = flag;
+}
+
+void CircleLable::setSucceed(bool flag)
+{
+    isSucceed = flag;
+}
+
+void CircleLable::paintEvent(QPaintEvent *event)
+{
+    QPainter painter(this);
+    painter.setRenderHint(QPainter::Antialiasing); // 反锯齿;
+    // 深浅主题切换
+    if (!colorFlag && !isSucceed)
+    {
+        m_backgroundColor = palette().midlight().color();
+        m_textColor= QColor(255,255,255);
+        painter.setBrush(QBrush(m_backgroundColor));
+    }
+    else if(isSucceed || colorFlag)
+    {
+        painter.setBrush(QBrush(this->palette().highlight().color()));
+    }
+
+    painter.setPen(Qt::NoPen);
+    QRect rect = this->rect();
+    painter.drawRoundedRect(rect, rect.width() / 2, rect.width() / 2);
+
+    painter.setPen(m_textColor);
+    if(colorFlag)
+    {
+        QPixmap pixmap = QIcon::fromTheme("dialog-apply").pixmap(16,16);
+        pixmap = ThemeController::drawSymbolicColoredPixmap(pixmap);
+        QRect pixRect((rect.width()-16)/2,(rect.height()-16)/2,16,16);
+        painter.drawPixmap(pixRect,pixmap);
+    }
+    else
+        painter.drawText(rect, Qt::AlignCenter, m_text);
+
+    QLabel::paintEvent(event);
+}
+
+TextLabel::TextLabel(QString str, QWidget *parent)
+    : QLabel(parent)
+{
+    setText(str);
+    isPalette = false;
+}
+
+TextLabel::~TextLabel()
+{
+}
+
+void TextLabel::setTextHighlight(bool flag)
+{
+    isPalette = flag;
+    if (flag)
+    {
+        QPalette palette = this->palette();
+        palette.setColor(QPalette::WindowText, palette.highlight().color());
+        this->setPalette(palette);
+    }
+    else
+    {
+        QPalette palette ;
+        this->setPalette(palette);
+    }
+}
+
+void TextLabel::followPalette(bool flag)
+{
+    isPalette = flag;
+}
+
+void TextLabel::paintEvent(QPaintEvent *e)
+{
+    if(!isPalette)
+    {
+        QPalette palette = this->palette();
+        QColor textColor = this->palette().brightText().color();
+        textColor.setAlphaF(0.35);
+        palette.setColor(QPalette::WindowText,textColor);
+        this->setPalette(palette);
+    }
+    else
+    {
+        QPalette palette = this->palette();
+        palette.setColor(QPalette::WindowText, palette.highlight().color());
+        this->setPalette(palette);
+    }
+    QLabel::paintEvent(e);
+}
+
+KProgressLabelPrivate::KProgressLabelPrivate(KProgressLabel *parent)
+    :q_ptr(parent),
+    m_count(-1),
+    m_circleSize(24, 24)
+{
+    Q_Q(KProgressLabel);
+    connect(m_gsetting,&QGSettings::changed,this,[=]{
+        changeTheme();
+    });
+}
+
+void KProgressLabelPrivate::changeTheme()
+{
+    Q_Q(KProgressLabel);
+    initThemeStyle();
+}
+
+}
+
+#include "kprogresslabel.moc"
+#include "moc_kprogresslabel.cpp"
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kprogresslabel.h libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kprogresslabel.h
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kprogresslabel.h	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kprogresslabel.h	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,88 @@
+/*
+ * libkysdk-qtwidgets's Library
+ *
+ * Copyright (C) 2023, KylinSoft Co., Ltd.
+ *
+ * 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 3 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 General Public License
+ * along with this library.  If not, see <https://www.gnu.org/licenses/>.
+ *
+ * Authors: Zhenyu Wang <wangzhenyu@kylinos.cn>
+ *
+ */
+
+#ifndef MYWIDGET_H
+#define MYWIDGET_H
+
+#include <QWidget>
+#include <QLabel>
+#include <QSize>
+#include <QColor>
+#include <QPainter>
+#include <QPalette>
+#include <QHBoxLayout>
+
+namespace kdk {
+
+/**
+ * @defgroup ProgressModule
+ * @since 2.5
+ */
+
+class KProgressLabelPrivate;
+
+class KProgressLabel : public QWidget
+{
+    Q_OBJECT
+public:
+    KProgressLabel(QWidget *parent = nullptr);
+    ~KProgressLabel();
+
+public:
+    /**
+     * @brief 设置第二行文本和第一行文本
+     * @param list1
+     * @param list2
+     */
+    void setStringList(QStringList list1, QStringList list2);
+
+    /**
+     * @brief setStringList
+     * @param list1
+     */
+    void setStringList(QStringList list1);
+
+    /**
+     * @brief 设置当前进度
+     * @param index
+     */
+    void setCurrentIndex(int index);
+
+    /**
+     * @brief 获取当前进度
+     * @return
+     */
+    int currentIndex();
+
+    /**
+     * @brief 设置圆形label的大小
+     * @param size
+     */
+    void setCircleSize(QSize size);
+
+private:
+    Q_DECLARE_PRIVATE(KProgressLabel)
+    KProgressLabelPrivate * const d_ptr;
+};
+
+}
+#endif // MYWIDGET_H
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kpushbutton.cpp libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kpushbutton.cpp
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kpushbutton.cpp	2024-05-16 09:25:54.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kpushbutton.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -26,9 +26,16 @@
 #include <QPainter>
 #include <QStyleOptionButton>
 #include <QPainterPath>
+#include <QGraphicsDropShadowEffect>
 #include <QDebug>
+#include <QMenu>
+#include <QTimer>
+#include <QApplication>
+#include <QDesktopWidget>
 
 namespace kdk {
+static int margin = 5; //左右边距
+static int spacing = 4; //图标文本间距
 
 class KPushButtonPrivate:public QObject,public ThemeController
 {
@@ -39,6 +46,15 @@
     {setParent(parent);}
 
     void changeTheme();
+
+    void updateColor( QPainter &painter,QStyleOptionButton &option, QColor &backgroundColor, QColor &highlight, QColor &mix, QColor &fontColor,QColor &pixmapColor);
+    void drawBackground(QPainter &painter, QStyleOptionButton &option, QColor &backgroundColor);
+    void updateArrowDirection(QPixmap &arrowPixmap, QPoint pos,QPoint desktopPos,QPoint globalPos,QIcon::Mode mode,QIcon::State state);
+    void updatePixmap(QPixmap &arrowPixmap,QPixmap &pixmap, QStyleOptionButton &option , QColor &highlight, QColor &fontColor,QColor &pixmapColor,QIcon::Mode mode,QIcon::State state);
+
+    void updateGrayColor(QPainter &painter,QStyleOptionButton &option, QColor &backgroundColor, QColor &pixmapColor);
+
+    void drawContent(QPainter &painter,QStyleOptionButton &option,QColor &fontColor,QRect &arrowRect,QRect &textRect,QRect &iconRect,QFontMetrics fm,QPixmap& pixmap,QPixmap &arrowPixmap,uint tf ,QPoint iconPosition,int iconWidth,int iconHeight,int textWidth);
 private:
     KPushButton* q_ptr;
     int m_radius;
@@ -46,6 +62,7 @@
     int m_topLeft;
     int m_topRight;
     int m_bottomRight;
+    int m_flashState;
     QColor m_backgroundColor;
     bool m_useCustomColor;
     bool m_hasOneParam;
@@ -55,7 +72,13 @@
     bool m_useCustomIconColor;
     bool m_isBackgroundColorHighlight;
     bool m_isTranslucentFlag;
+    bool m_hasArrow;
+    bool m_isLoading;
+    KPushButton::ArrowDirection m_arrowDirection;
     KPushButton::ButtonType m_buttonType;
+    QGraphicsDropShadowEffect* m_pShadowEffect;
+    QTimer *m_pTimer;
+    QIcon m_icon;
 };
 
 KPushButton::KPushButton(QWidget *parent):QPushButton(parent),d_ptr(new KPushButtonPrivate(this))
@@ -66,6 +89,7 @@
     d->m_topLeft = 6;
     d->m_topRight = 6;
     d->m_bottomRight = 6;
+    d->m_flashState = 0;
     d->m_backgroundColor = palette().color(QPalette::Button);
     d->m_useCustomColor = false;
     d->m_hasOneParam = true;
@@ -76,7 +100,20 @@
     d->m_useCustomIconColor = false;
     d->m_isBackgroundColorHighlight = false;
     d->m_isTranslucentFlag = false;
+    d->m_hasArrow =false;
+    d->m_isLoading=false;
+    d->m_arrowDirection = ArrowBottom;
+    d->m_pShadowEffect= new QGraphicsDropShadowEffect(this);
+    d->m_pTimer = new QTimer(this);
+    d->m_pTimer->setInterval(100);
     connect(d->m_gsetting,&QGSettings::changed, d,&KPushButtonPrivate::changeTheme);
+    connect(d->m_pTimer,&QTimer::timeout,this,[=](){
+        if(d->m_flashState < 7)
+            d->m_flashState++;
+        else
+            d->m_flashState = 0;
+        setIcon(QIcon::fromTheme(QString("ukui-loading-%1.symbolic").arg(d->m_flashState)));
+    });
 }
 
 KPushButton::~KPushButton()
@@ -128,6 +165,24 @@
 void KPushButton::setButtonType(ButtonType type)
 {
     Q_D(KPushButton);
+    if(type == KPushButton::ShadowType)
+    {
+        d->m_pShadowEffect->setOffset(0, 3);
+        //阴影颜色
+        QColor color(0, 0, 0);
+        //阴影半径
+        if(ThemeController::themeMode() == LightTheme)
+            color.setAlphaF(0.25);
+        else
+            color.setAlphaF(0.45);
+        d->m_pShadowEffect->setColor(color);
+        d->m_pShadowEffect->setBlurRadius(8);
+        setGraphicsEffect(d->m_pShadowEffect);
+    }
+    if(type == KPushButton::GrayType)
+        setFocusPolicy(Qt::StrongFocus);
+    else
+        setFocusPolicy(Qt::NoFocus);
     d->m_buttonType = type;
 }
 
@@ -191,6 +246,45 @@
     return d->m_isBackgroundColorHighlight;
 }
 
+void KPushButton::setArrow(bool flag, KPushButton::ArrowDirection arrowDirection)
+{
+    Q_D(KPushButton);
+    d->m_hasArrow = flag;
+    d->m_arrowDirection = arrowDirection;
+}
+
+
+bool KPushButton::hasArrow() const
+{
+    Q_D(const KPushButton);
+    return d->m_hasArrow;
+}
+
+void KPushButton::setLoaingStatus(bool flag)
+{
+    Q_D(KPushButton);
+    if(!d->m_isLoading)
+    {
+        d->m_icon = icon();
+    }
+    d->m_isLoading = flag;
+    if(flag)
+    {
+        d->m_pTimer->start();
+    }
+    else
+    {
+        d->m_pTimer->stop();
+        setIcon(d->m_icon);
+    }
+}
+
+bool KPushButton::isLoading()
+{
+    Q_D(KPushButton);
+    return d->m_isLoading;
+}
+
 bool KPushButton::eventFilter(QObject *watched, QEvent *event)
 {
     Q_D(KPushButton);
@@ -202,226 +296,404 @@
     Q_D(KPushButton);
     QStyleOptionButton option;
     initStyleOption(&option);
+    QColor pixmapColor;
+
+    QPainter painter(this);
+    painter.setRenderHint(QPainter::HighQualityAntialiasing);
+    painter.setRenderHint(QPainter::Antialiasing);
+    painter.setRenderHint(QPainter::TextAntialiasing);
+    painter.setRenderHint(QPainter::SmoothPixmapTransform);
 
-    QPainter p(this);
     QColor fontColor = option.palette.color(QPalette::Active,QPalette::BrightText);
     QColor mix = option.palette.brightText().color();
     QColor highlight = option.palette.highlight().color();
     QColor backgroundColor;
+
     if(ThemeController::widgetTheme() == ClassicTheme )
     {
-        if(p.pen().width() == 1)
-            p.translate(0.5,0.5);
+        if(painter.pen().width() == 1)
+            painter.translate(0.5,0.5);
     }
-    if(d->m_isTranslucent){
-        /*判断使用用户设置的背景色、跟随系统高亮色或是使用默认的背景色*/
-        if(d->m_useCustomColor){
-            backgroundColor = d->m_backgroundColor;
-        }else if(d->m_isBackgroundColorHighlight){
-            backgroundColor = highlight;
-        }else{
-            backgroundColor = option.palette.brightText().color();
-        }
 
-        if(ThemeController::themeMode() == LightTheme){
-            /*按钮处于不可用(Disabled)状态*/
-            if(!option.state.testFlag(QStyle::State_Enabled))
-            {
-                fontColor = option.palette.color(QPalette::Disabled,QPalette::BrightText);
-                backgroundColor.setAlphaF(0.1);
+    d->updateColor(painter,option,backgroundColor,highlight,mix,fontColor,pixmapColor);
+    d->drawBackground(painter,option,backgroundColor);
+
+    /*绘制图标和文字*/
+    QPen pen;
+    pen.setColor(fontColor);
+    painter.setBrush(Qt::NoBrush);
+    painter.setPen(pen);
+    QPoint point;
+    QRect ir = option.rect;
+    uint tf = Qt::AlignVCenter;
+    QPixmap pixmap;
+    QPixmap arrowPixmap ;
+
+    QIcon::Mode mode = option.state & QStyle::State_Enabled ? QIcon::Normal : QIcon::Disabled;
+    if (mode == QIcon::Normal && option.state & QStyle::State_HasFocus)
+        mode = QIcon::Active;
+    QIcon::State state = QIcon::Off;
+    if (option.state & QStyle::State_On)
+        state = QIcon::On;
+    QPoint pos;
+    QPoint desktopPos(QApplication::desktop()->availableGeometry().width(),QApplication::desktop()->availableGeometry().height());
+    QPoint globalPos;
+
+    d->updateArrowDirection(arrowPixmap,pos,desktopPos,globalPos,mode,state);
+    d->updatePixmap(arrowPixmap,pixmap,option,highlight,fontColor,pixmapColor,mode,state);
+
+    if (!option.icon.isNull())
+    {
+//        QPixmap pixmap = option.icon.pixmap(option.iconSize, mode, state);
+//        QImage image = pixmap.toImage();
+//        if(mode != QIcon::Disabled){
+//            if(d->m_isIconHighlight){
+//                pixmap = ThemeController::drawColoredPixmap(this->icon().pixmap(iconSize()),highlight);
+//            }else if(d->m_useCustomIconColor){
+//                pixmap = ThemeController::drawColoredPixmap(this->icon().pixmap(iconSize()),d->m_iconColor);
+//            }else{
+//                pixmap = ThemeController::drawColoredPixmap(this->icon().pixmap(iconSize()),fontColor);
+//            }
+//        }
+        int w = pixmap.width() / pixmap.devicePixelRatio();
+        int h = pixmap.height() / pixmap.devicePixelRatio();
+
+        if (!option.text.isEmpty())
+            w += option.fontMetrics.boundingRect(option.rect, tf, option.text).width() + 2;
+
+        point = QPoint(ir.x() + ir.width() / 2 - w / 2,
+                       ir.y() + ir.height() / 2 - h / 2);
+
+        w = pixmap.width() / pixmap.devicePixelRatio();
+
+        if (option.direction == Qt::RightToLeft)
+            point.rx() += w;
+//        if(mode == QIcon::Disabled){
+//            qreal opacity = 0.35;
+//            QPainter painter(&image);
+//            painter.setOpacity(opacity);
+//            painter.setCompositionMode(QPainter::CompositionMode_SourceIn);
+//            painter.fillRect(image.rect(),fontColor);
+//            painter.end();
+//            p.drawPixmap(this->style()->visualPos(option.direction, option.rect, point), QPixmap::fromImage(image));
+//        }
+//        else
+//            p.drawPixmap(this->style()->visualPos(option.direction, option.rect, point), pixmap);
+
+        if (option.direction == Qt::RightToLeft)
+            ir.translate(-point.x() - 2, 0);
+        else
+            ir.translate(point.x() + w + 4, 0);
+
+        // left-align text if there is
+        if (!option.text.isEmpty())
+            tf |= Qt::AlignLeft;
+    }
+    else
+    {
+        tf |= Qt::AlignHCenter;
+    }
+
+    if(hasArrow())
+        point.rx() -= arrowPixmap.width()/2;
+
+    QFontMetrics fm = option.fontMetrics;
+
+//    if(!this->isEnabled()){
+//        qreal opacity = 0.35;
+//        fontColor.setAlphaF(opacity);
+//        QPen pen ;
+//        pen.setColor(fontColor);
+//        p.setPen(pen);
+//        if(option.icon.isNull() && (fm.width(option.text) > option.rect.width() - 10))
+//        {
+//            QString elidedText = fm.elidedText(option.text,Qt::ElideRight,option.rect.width() - 10);
+//            p.drawText(option.rect.adjusted(5,0,-5,0),tf,elidedText);
+//            setToolTip(option.text);
+//        }
+//        else
+//            p.drawText(ir,tf,option.text);
+
+//    }
+//    else
+//    {
+//        if(option.icon.isNull() && (fm.width(option.text) > option.rect.width() - 10)){
+//            QString elidedText = fm.elidedText(option.text,Qt::ElideRight,option.rect.width() - 10);
+//            p.drawText(option.rect.adjusted(5,0,-5,0),tf,elidedText);
+//            setToolTip(option.text);
+//        }
+//        else
+//            p.drawText(ir,tf,option.text);
+//    }
+    QPoint iconPosition = this->style()->visualPos(option.direction, option.rect, point);
+    int iconWidth = option.iconSize.width();
+    int iconHeight = option.iconSize.height();
+    int textWidth = option.rect.width()-iconWidth*2-iconPosition.x();
+    QRect arrowRect;
+    QRect textRect;
+    QRect iconRect = QRect(iconPosition.x(),iconPosition.y(),iconWidth,iconHeight);
+    d->drawContent(painter,option,fontColor,arrowRect,textRect,iconRect,fm,pixmap,arrowPixmap,tf,iconPosition,iconWidth,iconHeight,textWidth);
+}
+
+void KPushButtonPrivate::changeTheme()
+{
+    Q_Q(KPushButton);
+    if(m_isTranslucentFlag)
+    {
+        if(ThemeController::widgetTheme() == ClassicTheme)
+            m_isTranslucent = false;
+        else
+            m_isTranslucent = true;
+    }
+    else
+    {
+        m_isTranslucent = false;
+    }
+    initThemeStyle();
+    if(m_buttonType == KPushButton::ShadowType)
+    {
+        m_pShadowEffect->setOffset(0, 3);
+        //阴影颜色
+        QColor color(0, 0, 0);
+        //阴影半径
+        if(ThemeController::themeMode() == LightTheme)
+            color.setAlphaF(0.25);
+        else
+            color.setAlphaF(0.45);
+        m_pShadowEffect->setColor(color);
+        m_pShadowEffect->setBlurRadius(8);
+        q->setGraphicsEffect(m_pShadowEffect);
+    }
+}
+
+void KPushButtonPrivate::updateColor(QPainter &painter,QStyleOptionButton &option, QColor &backgroundColor, QColor &highlight, QColor &mix, QColor &fontColor,QColor &pixmapColor)
+{
+    Q_Q(KPushButton);
+    if(m_buttonType == KPushButton::NormalType || m_buttonType == KPushButton::CircleType || m_buttonType == KPushButton::ShadowType)
+    {
+        if(m_isTranslucent)
+        {
+            /*判断使用用户设置的背景色、跟随系统高亮色或是使用默认的背景色*/
+            if(m_useCustomColor){
+                backgroundColor = m_backgroundColor;
+            }else if(m_isBackgroundColorHighlight){
+                backgroundColor = highlight;
+            }else if(m_buttonType == KPushButton::ShadowType){
+                backgroundColor = option.palette.base().color();
             }
             else{
-                /*按钮处于可用(Enabled)状态*/
-                if(option.state.testFlag(QStyle::State_MouseOver))      /*鼠标在按钮上(hover状态)*/
-                {
-                    if(option.state.testFlag(QStyle::State_Sunken))     /*按钮被选中(clicked)*/
-                        backgroundColor.setAlphaF(0.21);
-                    else
-                        backgroundColor.setAlphaF(0.16);
-                }
-                else{
-                    backgroundColor.setAlphaF(0.1);
-                }
+                backgroundColor = option.palette.brightText().color();
             }
-        }
-        else{
-            /*按钮处于不可用(Disabled)状态*/
-            if(!option.state.testFlag(QStyle::State_Enabled))
-            {
-                fontColor = option.palette.color(QPalette::Disabled,QPalette::BrightText);
-                backgroundColor.setAlphaF(0.1);
-            }
-            else
+
+             if(!option.state.testFlag(QStyle::State_Enabled))
+             {
+                 if(ThemeController::themeMode() == LightTheme){
+                     fontColor = option.palette.color(QPalette::Disabled,QPalette::ButtonText);
+                     backgroundColor.setAlphaF(0.05);
+                 }
+                 else
+                 {
+                     fontColor = option.palette.color(QPalette::Disabled,QPalette::ButtonText);
+                     backgroundColor.setAlphaF(0.1);
+                 }
+             }
+            else /*按钮处于可用(Enabled)状态*/
             {
-                /*按钮处于可用(Enabled)状态*/
                 if(option.state.testFlag(QStyle::State_MouseOver))      /*鼠标在按钮上(hover状态)*/
                 {
+                    if(m_buttonType == KPushButton::ShadowType)
+                    {
+                        backgroundColor = option.palette.highlight().color();
+                    }
                     if(option.state.testFlag(QStyle::State_Sunken))     /*按钮被选中(clicked)*/
-                        backgroundColor.setAlphaF(0.3);
+                    {
+                        if(m_useCustomColor || m_isBackgroundColorHighlight || m_buttonType == KPushButton::ShadowType)
+                            backgroundColor.setAlphaF(0.45);
+                        else
+                            backgroundColor.setAlphaF(0.21);
+                    }
                     else
-                        backgroundColor.setAlphaF(0.2);
+                    {
+                        if(m_useCustomColor || m_isBackgroundColorHighlight)
+                            backgroundColor.setAlphaF(0.3);
+                        else
+                            backgroundColor.setAlphaF(0.16);
+                    }
                 }
-                else{
-                    backgroundColor.setAlphaF(0.1);
+                else
+                {
+                    if(m_useCustomColor || m_isBackgroundColorHighlight  )
+                        backgroundColor.setAlphaF(0.15);
+                    else if(m_buttonType == KPushButton::ShadowType)
+                    {
+                        if(ThemeController::themeMode() == DarkTheme)
+                        backgroundColor.setAlphaF(0.2);
+                    }
+                    else
+                        backgroundColor.setAlphaF(0.1);
                 }
             }
         }
-    }
-    else{
-        if(ThemeController::widgetTheme() == ClassicTheme)
+        else
         {
-            /*判断使用用户设置的背景色或是使用默认的背景色*/
-            if(d->m_useCustomColor){
-                backgroundColor = d->m_backgroundColor;
-            }else if(d->m_isBackgroundColorHighlight){
-                backgroundColor=highlight;
-                if(option.state.testFlag(QStyle::State_MouseOver))      /*鼠标在按钮上(hover状态)*/
-                {
-                    if(option.state.testFlag(QStyle::State_Sunken))     /*按钮被选中(clicked)*/
+            if(ThemeController::widgetTheme() == ClassicTheme)
+            {
+                /*判断使用用户设置的背景色或是使用默认的背景色*/
+                if(m_useCustomColor){
+                    backgroundColor = m_backgroundColor;
+                }else if(m_isBackgroundColorHighlight){
+                    backgroundColor=highlight;
+                    if(option.state.testFlag(QStyle::State_MouseOver))      /*鼠标在按钮上(hover状态)*/
                     {
-                        if(ThemeController::themeMode() == LightTheme)
+                        if(option.state.testFlag(QStyle::State_Sunken))     /*按钮被选中(clicked)*/
                         {
-                            backgroundColor =ThemeController::highlightClick(false,palette());
-
-                            backgroundColor = ThemeController::adjustH(backgroundColor,-1);
-                            backgroundColor = ThemeController::adjustS(backgroundColor,-34);
-                            backgroundColor = ThemeController::adjustL(backgroundColor,-30);
+                            if(ThemeController::themeMode() == LightTheme)
+                            {
+                                backgroundColor =ThemeController::highlightClick(false,q->palette());
+
+                                backgroundColor = ThemeController::adjustH(backgroundColor,-1);
+                                backgroundColor = ThemeController::adjustS(backgroundColor,-34);
+                                backgroundColor = ThemeController::adjustL(backgroundColor,-30);
+                            }
+                            else
+                            {
+                                backgroundColor =ThemeController::highlightClick(true,q->palette());
+
+                                backgroundColor = ThemeController::adjustH(backgroundColor,-2);
+                                backgroundColor = ThemeController::adjustS(backgroundColor,2);
+                                backgroundColor = ThemeController::adjustL(backgroundColor,45);
+                            }
                         }
                         else
                         {
-                            backgroundColor =ThemeController::highlightClick(true,palette());
+                            if(ThemeController::themeMode() == LightTheme)
+                            {
+                                backgroundColor =ThemeController::highlightHover(false,q->palette());
+
+                                backgroundColor = ThemeController::adjustH(backgroundColor,-3);
+                                backgroundColor = ThemeController::adjustS(backgroundColor,-24);
+                                backgroundColor = ThemeController::adjustL(backgroundColor,-24);
+                            }
+                            else
+                            {
+                                backgroundColor =ThemeController::highlightHover(true,q->palette());
+
+                                backgroundColor = ThemeController::adjustH(backgroundColor,-2);
+                                backgroundColor = ThemeController::adjustS(backgroundColor,-3);
+                                backgroundColor = ThemeController::adjustL(backgroundColor,36);
+                            }
+                        }
+                    }
+                }else{
+                    backgroundColor = q->palette().color(QPalette::Button);
+                }
 
-                            backgroundColor = ThemeController::adjustH(backgroundColor,-2);
-                            backgroundColor = ThemeController::adjustS(backgroundColor,2);
-                            backgroundColor = ThemeController::adjustL(backgroundColor,45);
+                /*按钮处于不可用(Disabled)状态*/
+                if(!option.state.testFlag(QStyle::State_Enabled))
+                {
+                    fontColor = option.palette.color(QPalette::Disabled,QPalette::ButtonText);
+                }
+                else
+                {
+                    if(m_useCustomColor){
+                        if(option.state.testFlag(QStyle::State_MouseOver))      /*鼠标在按钮上(hover状态)*/
+                        {
+                            if(option.state.testFlag(QStyle::State_Sunken))     /*按钮被选中(clicked)*/
+                                backgroundColor = ThemeController::mixColor(backgroundColor,mix,0.2);
+                            else
+                                backgroundColor = ThemeController::mixColor(backgroundColor,mix,0.05);
+                            fontColor = option.palette.color(QPalette::HighlightedText);
                         }
                     }
-                    else
+                    else if( m_isBackgroundColorHighlight)
                     {
-                        if(ThemeController::themeMode() == LightTheme)
+                        backgroundColor = backgroundColor;
+                    }
+                    else{
+                    /*按钮处于可用(Enabled)状态*/
+                        if(option.state.testFlag(QStyle::State_MouseOver))      /*鼠标在按钮上(hover状态)*/
                         {
-                            backgroundColor =ThemeController::highlightHover(false,palette());
-
-                            backgroundColor = ThemeController::adjustH(backgroundColor,-3);
-                            backgroundColor = ThemeController::adjustS(backgroundColor,-24);
-                            backgroundColor = ThemeController::adjustL(backgroundColor,-24);
+                            if(option.state.testFlag(QStyle::State_Sunken))     /*按钮被选中(clicked)*/
+                                backgroundColor = ThemeController::mixColor(highlight,mix,0.2);
+                            else
+                                backgroundColor = ThemeController::mixColor(highlight,mix,0.05);
+                            fontColor = option.palette.color(QPalette::HighlightedText);
                         }
                         else
                         {
-                            backgroundColor =ThemeController::highlightHover(true,palette());
-
-                            backgroundColor = ThemeController::adjustH(backgroundColor,-2);
-                            backgroundColor = ThemeController::adjustS(backgroundColor,-3);
-                            backgroundColor = ThemeController::adjustL(backgroundColor,36);
+                            backgroundColor = q->palette().color(QPalette::Button);
                         }
                     }
                 }
-            }else{
-                backgroundColor = palette().color(QPalette::Button);
-            }
-
-            /*按钮处于不可用(Disabled)状态*/
-            if(!option.state.testFlag(QStyle::State_Enabled))
-            {
-                fontColor = option.palette.color(QPalette::Disabled,QPalette::BrightText);
             }
             else
             {
-                if(d->m_useCustomColor){
-                    if(option.state.testFlag(QStyle::State_MouseOver))      /*鼠标在按钮上(hover状态)*/
-                    {
-                        if(option.state.testFlag(QStyle::State_Sunken))     /*按钮被选中(clicked)*/
-                            backgroundColor = ThemeController::mixColor(backgroundColor,mix,0.2);
-                        else
-                            backgroundColor = ThemeController::mixColor(backgroundColor,mix,0.05);
-                        fontColor = option.palette.color(QPalette::HighlightedText);
-                    }
+                /*判断使用用户设置的背景色或是使用默认的背景色*/
+                if(m_useCustomColor){
+                    backgroundColor = m_backgroundColor;
+                }else if(m_isBackgroundColorHighlight){
+                    backgroundColor = highlight;
+                }else{
+                    backgroundColor = q->palette().color(QPalette::Button);
                 }
-                else if( d->m_isBackgroundColorHighlight)
+
+                /*按钮处于不可用(Disabled)状态*/
+                if(!option.state.testFlag(QStyle::State_Enabled))
                 {
-                    backgroundColor = backgroundColor;
+                    fontColor = option.palette.color(QPalette::Disabled,QPalette::ButtonText);
                 }
-                else{
-                /*按钮处于可用(Enabled)状态*/
-                    if(option.state.testFlag(QStyle::State_MouseOver))      /*鼠标在按钮上(hover状态)*/
+                else
+                {
+                    if(m_useCustomColor || m_isBackgroundColorHighlight)
                     {
-                        if(option.state.testFlag(QStyle::State_Sunken))     /*按钮被选中(clicked)*/
-                            backgroundColor = ThemeController::mixColor(highlight,mix,0.2);
+                        if(option.state.testFlag(QStyle::State_MouseOver))      /*鼠标在按钮上(hover状态)*/
+                        {
+                            if(option.state.testFlag(QStyle::State_Sunken))     /*按钮被选中(clicked)*/
+                                backgroundColor = ThemeController::mixColor(backgroundColor,mix,0.2);
+                            else
+                                backgroundColor = ThemeController::mixColor(backgroundColor,mix,0.05);
+                            fontColor = option.palette.color(QPalette::HighlightedText);
+                        }
                         else
-                            backgroundColor = ThemeController::mixColor(highlight,mix,0.05);
-                        fontColor = option.palette.color(QPalette::HighlightedText);
+                        {
+                            if(m_isBackgroundColorHighlight)
+                                fontColor = option.palette.color(QPalette::HighlightedText);
+                        }
                     }
                     else
                     {
-                        backgroundColor = palette().color(QPalette::Button);
-                    }
-                }
-            }
-        }
-        else
-        {
-            /*判断使用用户设置的背景色或是使用默认的背景色*/
-            if(d->m_useCustomColor){
-                backgroundColor = d->m_backgroundColor;
-            }else if(d->m_isBackgroundColorHighlight){
-                backgroundColor = highlight;
-            }else{
-                backgroundColor = palette().color(QPalette::Button);
-            }
-
-            /*按钮处于不可用(Disabled)状态*/
-            if(!option.state.testFlag(QStyle::State_Enabled))
-            {
-                fontColor = option.palette.color(QPalette::Disabled,QPalette::BrightText);
-            }
-            else
-            {
-                if(d->m_useCustomColor || d->m_isBackgroundColorHighlight){
-                    if(option.state.testFlag(QStyle::State_MouseOver))      /*鼠标在按钮上(hover状态)*/
-                    {
-                        if(option.state.testFlag(QStyle::State_Sunken))     /*按钮被选中(clicked)*/
-                            backgroundColor = ThemeController::mixColor(backgroundColor,mix,0.2);
-                        else
-                            backgroundColor = ThemeController::mixColor(backgroundColor,mix,0.05);
-                        fontColor = option.palette.color(QPalette::HighlightedText);
-                    }
-                }
-                else{
-                /*按钮处于可用(Enabled)状态*/
-                    if(option.state.testFlag(QStyle::State_MouseOver))      /*鼠标在按钮上(hover状态)*/
-                    {
-                        if(option.state.testFlag(QStyle::State_Sunken))     /*按钮被选中(clicked)*/
+                    /*按钮处于可用(Enabled)状态*/
+                        if(option.state.testFlag(QStyle::State_MouseOver))      /*鼠标在按钮上(hover状态)*/
                         {
-                            if(ThemeController::widgetTheme() != ClassicTheme)
+                            if(option.state.testFlag(QStyle::State_Sunken))     /*按钮被选中(clicked)*/
                                 backgroundColor = ThemeController::mixColor(highlight,mix,0.2);
+                            else
+                                backgroundColor = ThemeController::mixColor(highlight,mix,0.05);
+                            fontColor = option.palette.color(QPalette::HighlightedText);
                         }
                         else
                         {
-                            if(ThemeController::widgetTheme() != ClassicTheme)
-                                backgroundColor = ThemeController::mixColor(highlight,mix,0.05);
+                            backgroundColor = q->palette().color(QPalette::Button);
                         }
-                        fontColor = option.palette.color(QPalette::HighlightedText);
-                    }
-                    else
-                    {
-                        backgroundColor = palette().color(QPalette::Button);
                     }
                 }
             }
         }
-
-        if(isChecked())
+        if(q->isChecked())
             backgroundColor = highlight;
     }
+    else if(m_buttonType == KPushButton::GrayType)
+    {
+        updateGrayColor(painter,option,backgroundColor,pixmapColor);
+    }
+}
 
-    p.setRenderHint(QPainter::HighQualityAntialiasing);
-    p.setRenderHint(QPainter::Antialiasing);
-    p.setRenderHint(QPainter::TextAntialiasing);
-    p.setRenderHint(QPainter::SmoothPixmapTransform);
-
+void KPushButtonPrivate::drawBackground(QPainter &painter, QStyleOptionButton &option, QColor &backgroundColor)
+{
+    Q_Q(KPushButton);
     /*绘制背景色和rect*/
-    p.save();
-    p.setBrush(backgroundColor);
+    painter.save();
+    painter.setBrush(backgroundColor);
     QColor borderColor;
     if(ThemeController::widgetTheme() == ClassicTheme )
     {
@@ -429,21 +701,22 @@
             borderColor=ThemeController::lanhuHSLToQtHsl(0, 0, 73);
         else
             borderColor=ThemeController::lanhuHSLToQtHsl(0, 0, 35);
-        p.setPen(borderColor);
+        painter.setPen(borderColor);
     }
     else
-        p.setPen(Qt::NoPen);
+        painter.setPen(Qt::NoPen);
 
-    switch(d->m_buttonType)
+    switch(m_buttonType)
     {
-    case NormalType:
+    case KPushButton::NormalType:
     {
-        if(d->m_hasOneParam)
+        painter.setPen(Qt::NoPen);
+        if(m_hasOneParam)
         {
             if(ThemeController::widgetTheme() == ClassicTheme )
-                p.drawRoundedRect(option.rect.adjusted(0,0,-1,-1),0,0);
+                painter.drawRoundedRect(option.rect.adjusted(0,0,-1,-1),0,0);
             else
-                p.drawRoundedRect(option.rect.adjusted(0,0,-1,-1),d->m_radius,d->m_radius);
+                painter.drawRoundedRect(option.rect.adjusted(0,0,-1,-1),m_radius,m_radius);
         }
         else
         {
@@ -452,123 +725,479 @@
                 path.addRect(option.rect.adjusted(0,0,-1,-1));
             else
             {
-                path.moveTo(option.rect.topLeft() + QPointF(0,d->m_topLeft));
-                path.lineTo(option.rect.bottomLeft() - QPointF(0,d->m_bottomLeft));
-                path.quadTo(option.rect.bottomLeft(),option.rect.bottomLeft() + QPointF(d->m_bottomLeft,0));
-                path.lineTo(option.rect.bottomRight() - QPointF(d->m_bottomRight,0));
-                path.quadTo(option.rect.bottomRight(),option.rect.bottomRight() - QPointF(0,d->m_bottomRight));
-                path.lineTo(option.rect.topRight() + QPointF(0,d->m_topRight));
-                path.quadTo(option.rect.topRight(),option.rect.topRight() - QPointF(d->m_topRight,0));
-                path.lineTo(option.rect.topLeft() + QPointF(d->m_topLeft,0));
-                path.quadTo(option.rect.topLeft(),option.rect.topLeft() + QPointF(0,d->m_topLeft));
+                path.moveTo(option.rect.topLeft() + QPointF(0,m_topLeft));
+                path.lineTo(option.rect.bottomLeft() - QPointF(0,m_bottomLeft));
+                path.quadTo(option.rect.bottomLeft(),option.rect.bottomLeft() + QPointF(m_bottomLeft,0));
+                path.lineTo(option.rect.bottomRight() - QPointF(m_bottomRight,0));
+                path.quadTo(option.rect.bottomRight(),option.rect.bottomRight() - QPointF(0,m_bottomRight));
+                path.lineTo(option.rect.topRight() + QPointF(0,m_topRight));
+                path.quadTo(option.rect.topRight(),option.rect.topRight() - QPointF(m_topRight,0));
+                path.lineTo(option.rect.topLeft() + QPointF(m_topLeft,0));
+                path.quadTo(option.rect.topLeft(),option.rect.topLeft() + QPointF(0,m_topLeft));
             }
-            p.drawPath(path);
+            painter.drawPath(path);
+        }
+        painter.restore();
+        break;
+    }
+    case KPushButton::CircleType:
+        painter.setPen(Qt::NoPen);
+        painter.drawRoundedRect(option.rect.adjusted(0,0,0,0),q->width()/2,q->height()/2);
+        painter.restore();
+        break;
+    case KPushButton::GrayType:
+    {
+        if(option.state.testFlag(QStyle::State_HasFocus))
+        {
+            QPen pen;
+            pen.setWidth(2);
+//                pen.setColor(qApp->property("kBrandFocus").value<QColor>());
+            pen.setColor(q->palette().highlight().color());
+            painter.setPen(pen);
+        }
+        else
+        {
+            painter.setPen(Qt::NoPen);
+        }
+        if(m_hasOneParam)
+        {
+            painter.drawRoundedRect(option.rect.adjusted(1,1,-1,-1),m_radius,m_radius);
+        }
+        else
+        {
+            QPainterPath path;
+
+            path.moveTo(option.rect.topLeft() + QPointF(0,m_topLeft));
+            path.lineTo(option.rect.bottomLeft() - QPointF(0,m_bottomLeft));
+            path.quadTo(option.rect.bottomLeft(),option.rect.bottomLeft() + QPointF(m_bottomLeft,0));
+            path.lineTo(option.rect.bottomRight() - QPointF(m_bottomRight,0));
+            path.quadTo(option.rect.bottomRight(),option.rect.bottomRight() - QPointF(0,m_bottomRight));
+            path.lineTo(option.rect.topRight() + QPointF(0,m_topRight));
+            path.quadTo(option.rect.topRight(),option.rect.topRight() - QPointF(m_topRight,0));
+            path.lineTo(option.rect.topLeft() + QPointF(m_topLeft,0));
+            path.quadTo(option.rect.topLeft(),option.rect.topLeft() + QPointF(0,m_topLeft));
+
+            painter.setRenderHint(QPainter::HighQualityAntialiasing);
+            painter.setRenderHint(QPainter::Antialiasing);
+            painter.setRenderHint(QPainter::TextAntialiasing);
+            painter.setRenderHint(QPainter::SmoothPixmapTransform);
+
+            painter.drawPath(path);
         }
-        p.restore();
+        painter.restore();
         break;
     }
-    case CircleType:
-        p.drawEllipse(option.rect.adjusted(0,0,-1,-1));
-        p.restore();
+    case KPushButton::ShadowType:
+        {
+            QColor penColor = Qt::white;
+            if(!q->isEnabled())
+            {
+                if(ThemeController::themeMode() == LightTheme)
+                    penColor.setAlphaF(0.05);
+                else
+                    penColor.setAlphaF(0.1);
+            }
+            painter.setPen(penColor);
+            painter.setBrush(backgroundColor);
+            painter.drawEllipse(option.rect.adjusted(0,0,-1,-1));
+            painter.restore();
+        }
         break;
     default:
         break;
     }
+}
 
-    /*绘制图标和文字*/
-    QPen pen;
-    pen.setColor(fontColor);
-    p.setBrush(Qt::NoBrush);
-    p.setPen(pen);
-    QPoint point;
-    QRect ir = option.rect;
-    uint tf = Qt::AlignVCenter;
-
-    if (!option.icon.isNull()) {
-        QIcon::Mode mode = option.state & QStyle::State_Enabled ? QIcon::Normal : QIcon::Disabled;
-        if (mode == QIcon::Normal && option.state & QStyle::State_HasFocus)
-            mode = QIcon::Active;
-        QIcon::State state = QIcon::Off;
-        if (option.state & QStyle::State_On)
-            state = QIcon::On;
-
-        QPixmap pixmap = option.icon.pixmap(option.iconSize, mode, state);
-        QImage image = pixmap.toImage();
-        if(mode != QIcon::Disabled){
-            if(d->m_isIconHighlight){
-                pixmap = ThemeController::drawColoredPixmap(this->icon().pixmap(iconSize()),highlight);
-            }else if(d->m_useCustomIconColor){
-                pixmap = ThemeController::drawColoredPixmap(this->icon().pixmap(iconSize()),d->m_iconColor);
-            }else{
-                pixmap = ThemeController::drawColoredPixmap(this->icon().pixmap(iconSize()),fontColor);
+void KPushButtonPrivate::updateArrowDirection(QPixmap &arrowPixmap, QPoint pos,QPoint desktopPos,QPoint globalPos,QIcon::Mode mode,QIcon::State state)
+{
+    Q_Q(KPushButton);
+    if(q->hasArrow())
+    {
+        switch (m_arrowDirection)
+        {
+        case KPushButton::ArrowTop:
+            arrowPixmap = QIcon::fromTheme("ukui-up-symbolic").pixmap(QSize(16,16), mode, state);
+            if(q->menu())
+            {
+                pos.setX(q->rect().left());
+                pos.setY(- q->menu()->height());
+                globalPos = q->mapToGlobal(pos); //现在
+                if(globalPos.x() > (desktopPos.x() - q->menu()->width()))
+                    globalPos.setX(desktopPos.x() - q->menu()->width());
+                if(globalPos.x() < 0)
+                    globalPos.setX(0);
+                if(globalPos.y() < 0)
+                {
+                    pos.setY(q->rect().bottom());
+                    globalPos.setY(q->mapToGlobal(pos).y());
+                }
+                q->menu()->move(globalPos);
             }
+            break;
+        case KPushButton::ArrowBottom:
+            arrowPixmap = QIcon::fromTheme("ukui-down-symbolic").pixmap(QSize(16,16), mode, state);
+            break;
+        case KPushButton::ArrowLeft:
+            arrowPixmap = QIcon::fromTheme("ukui-start-symbolic").pixmap(QSize(16,16), mode, state);
+            if(q->menu())
+            {
+                pos.setX(q->rect().left() - q->menu()->width());
+                pos.setY(q->rect().center().y()/2);
+                globalPos = q->mapToGlobal(pos);
+                if(globalPos.x() < 0)
+                {
+                    pos.setY(q->rect().bottom());
+                    globalPos.setX(0);
+                    globalPos.setY(q->mapToGlobal(pos).y());
+                }
+                if(globalPos.y() > desktopPos.y() - q->menu()->height())
+                {
+                    globalPos.setY(desktopPos.y() - q->menu()->height());
+                }
+                q->menu()->move(globalPos);
+            }
+            break;
+        case KPushButton::ArrowRight:
+            arrowPixmap = QIcon::fromTheme("ukui-end-symbolic").pixmap(QSize(16,16), mode, state);
+            if(q->menu())
+            {
+                pos.setX(q->rect().right());
+                q->menu()->move(q->mapToGlobal(pos));
+                globalPos = q->mapToGlobal(pos);
+                if(globalPos.x() > (desktopPos.x() - q->menu()->width()))
+                {
+                    pos.setX(q->rect().left()-q->menu()->width());
+                    globalPos.setX(q->mapToGlobal(pos).x());
+                }
+                if(globalPos.y() > desktopPos.y() - q->menu()->height())
+                {
+                    globalPos.setY(desktopPos.y() - q->menu()->height());
+                }
+                q->menu()->move(globalPos);
+            }
+            break;
+        default:
+            break;
         }
+    }
+}
 
-        int w = pixmap.width() / pixmap.devicePixelRatio();
-        int h = pixmap.height() / pixmap.devicePixelRatio();
-
-        if (!option.text.isEmpty())
-            w += option.fontMetrics.boundingRect(option.rect, tf, option.text).width() + 2;
-
-        point = QPoint(ir.x() + ir.width() / 2 - w / 2,
-                       ir.y() + ir.height() / 2 - h / 2);
-
-        w = pixmap.width() / pixmap.devicePixelRatio();
-
-        if (option.direction == Qt::RightToLeft)
-            point.rx() += w;
-        if(mode == QIcon::Disabled){
-            qreal opacity = 0.35;
-            QPainter painter(&image);
-            painter.setOpacity(opacity);
-            painter.setCompositionMode(QPainter::CompositionMode_SourceIn);
-            painter.fillRect(image.rect(),fontColor);
-            painter.end();
-            p.drawPixmap(this->style()->visualPos(option.direction, option.rect, point), QPixmap::fromImage(image));
+void KPushButtonPrivate::updatePixmap(QPixmap &arrowPixmap,QPixmap &pixmap, QStyleOptionButton &option , QColor &highlight, QColor &fontColor,QColor &pixmapColor,QIcon::Mode mode,QIcon::State state)
+{
+    Q_Q(KPushButton);
+    pixmap = option.icon.pixmap(option.iconSize, mode, state);
+    if(mode != QIcon::Disabled)
+    {
+        if(m_buttonType == KPushButton::NormalType || m_buttonType == KPushButton::CircleType || m_buttonType == KPushButton::ShadowType)
+        {
+            if(m_isIconHighlight)
+            {
+                pixmap = ThemeController::drawColoredPixmap(q->icon().pixmap(q->iconSize()),highlight);
+                arrowPixmap = ThemeController::drawColoredPixmap(arrowPixmap,highlight);
+            }else if(m_useCustomIconColor)
+            {
+                pixmap = ThemeController::drawColoredPixmap(q->icon().pixmap(q->iconSize()),m_iconColor);
+                arrowPixmap = ThemeController::drawColoredPixmap(arrowPixmap,m_iconColor);
+            }else
+            {
+                if(ThemeController::isPixmapPureColor(pixmap) || ThemeController::isPixmapPureColor(arrowPixmap))
+                {
+                    pixmap = ThemeController::drawColoredPixmap(q->icon().pixmap(q->iconSize()),fontColor);
+                    arrowPixmap = ThemeController::drawColoredPixmap(arrowPixmap,fontColor);
+                }
+            }
         }
         else
-            p.drawPixmap(this->style()->visualPos(option.direction, option.rect, point), pixmap);
-
-        if (option.direction == Qt::RightToLeft)
-            ir.translate(-point.x() - 2, 0);
-        else
-            ir.translate(point.x() + w + 4, 0);
-
-        // left-align text if there is
-        if (!option.text.isEmpty())
-            tf |= Qt::AlignLeft;
+        {
+            pixmap = ThemeController::drawColoredPixmap(q->icon().pixmap(q->iconSize()),pixmapColor);
+            arrowPixmap = ThemeController::drawColoredPixmap(arrowPixmap,pixmapColor);
+        }
     }
     else
     {
-        tf |= Qt::AlignHCenter;
+        arrowPixmap = ThemeController::drawColoredPixmap(arrowPixmap,q->palette().color(QPalette::Disabled,QPalette::ButtonText));
+        pixmap = ThemeController::drawColoredPixmap(pixmap,q->palette().color(QPalette::Disabled,QPalette::ButtonText));
     }
-    if(!this->isEnabled()){
-        qreal opacity = 0.35;
-        fontColor.setAlphaF(opacity);
-        QPen pen ;
-        pen.setColor(fontColor);
-        p.setPen(pen);
-        p.drawText(ir,tf,option.text);
+}
+
+void KPushButtonPrivate::updateGrayColor(QPainter &painter, QStyleOptionButton &option, QColor &backgroundColor, QColor &pixmapColor)
+{
+    Q_Q(KPushButton);
+    if(!m_isTranslucent)
+    {
+        pixmapColor = q->palette().text().color();
+        if(!q->isEnabled())
+        {
+            backgroundColor = qApp->property("kComponentDisable").value<QColor>();
+            pixmapColor = q->palette().color(QPalette::Disabled,QPalette::Text);
+            painter.setPen(Qt::NoPen);
+        }
+        else
+        {
+            if(q->isLoading())
+            {
+                backgroundColor = qApp->property("kComponentNormal").value<QColor>();
+                painter.setPen(Qt::NoPen);
+            }
+            else
+            {
+                if(option.state.testFlag(QStyle::State_MouseOver))
+                {
+                    if(option.state.testFlag(QStyle::State_Sunken))
+                    {
+                        backgroundColor = qApp->property("kComponentClick").value<QColor>();
+                    }
+                    else
+                    {
+                        backgroundColor = qApp->property("kComponentHover").value<QColor>();
+                    }
+                }
+                else
+                {
+                    backgroundColor = qApp->property("kComponentNormal").value<QColor>();
+                }
+            }
+        }
     }
     else
-        p.drawText(ir,tf,option.text);
+    {
+        pixmapColor = q->palette().text().color();
+        if(!q->isEnabled())
+        {
+            backgroundColor = backgroundColor = qApp->property("kComponentAlphaDisable").value<QColor>();
+            pixmapColor = q->palette().color(QPalette::Disabled,QPalette::Text);
+        }
+        else
+        {
+            if(q->isLoading())
+            {
+                backgroundColor = qApp->property("kComponentAlphaNormal").value<QColor>();
+                painter.setPen(Qt::NoPen);
+            }
+            else
+            {
+                if(option.state.testFlag(QStyle::State_MouseOver))
+                {
+                    if(option.state.testFlag(QStyle::State_Sunken))
+                    {
+                        backgroundColor = qApp->property("kComponentAlphaClick").value<QColor>();
+                    }
+                    else
+                    {
+                        backgroundColor = qApp->property("kComponentAlphaHover").value<QColor>();
+                    }
+                }
+                else
+                {
+                    backgroundColor = qApp->property("kComponentAlphaNormal").value<QColor>();
+                }
+            }
+        }
+    }
 }
 
-void KPushButtonPrivate::changeTheme()
+void KPushButtonPrivate::drawContent(QPainter &painter,QStyleOptionButton &option,QColor &fontColor,QRect &arrowRect,QRect &textRect,QRect &iconRect,QFontMetrics fm,QPixmap& pixmap,QPixmap &arrowPixmap,uint tf ,QPoint iconPosition,int iconWidth,int iconHeight,int textWidth)
 {
     Q_Q(KPushButton);
-    if(m_isTranslucentFlag)
+    if(m_isLoading)
     {
-        if(ThemeController::widgetTheme() == ClassicTheme)
-            m_isTranslucent = false;
-        else
-            m_isTranslucent = true;
+        iconRect = QRect((q->rect().width() - iconWidth)/2+1,iconPosition.y()-1,iconWidth,iconHeight);
+        painter.drawPixmap(iconRect,pixmap);
     }
     else
     {
-        m_isTranslucent = false;
+        if(q->hasArrow())
+        {
+            if(!q->isEnabled())
+            {
+                QPen pen ;
+                pen.setColor(fontColor);
+                painter.setPen(pen);
+                if(option.icon.isNull())
+                {
+                    textRect = QRect(margin,(option.rect.height()- fm.height())/2 ,option.rect.width()- iconWidth - margin - spacing,fm.height());
+    //                arrowRect = QRect(textRect.right() + spacing,(option.rect.height()- arrowPixmap.width())/2 ,arrowPixmap.width(),arrowPixmap.height());
+
+                    if((fm.width(option.text) > textRect.width()))
+                    {
+                        arrowRect = QRect(textRect.right() + spacing,(option.rect.height()- arrowPixmap.width())/2 ,arrowPixmap.width(),arrowPixmap.height());
+
+                        QString elidedText = fm.elidedText(option.text,Qt::ElideRight,textRect.width());
+                        painter.drawText(textRect,tf,elidedText);
+                        painter.drawPixmap(arrowRect,arrowPixmap);
+                    }
+                    else
+                    {
+                        textRect = QRect((option.rect.width() -fm.width(option.text))/2 ,(option.rect.height()- fm.height())/2 ,fm.width(option.text),fm.height());
+                        arrowRect = QRect(textRect.right() + spacing,(option.rect.height()- arrowPixmap.width())/2 ,arrowPixmap.width(),arrowPixmap.height());
+
+                        painter.drawText(textRect,tf,option.text);
+                        painter.drawPixmap(arrowRect,arrowPixmap);
+                    }
+
+                }
+                else
+                {
+                    painter.drawPixmap(iconRect,pixmap);
+    //                arrowRect = QRect(option.rect.width() - arrowPixmap.width() - margin,(option.rect.height()- arrowPixmap.width())/2 ,arrowPixmap.width(),arrowPixmap.height());
+                    textRect = QRect(iconPosition.x() + spacing +iconWidth,0 ,textWidth - margin - spacing,option.rect.height());
+
+                    if(fm.width(option.text) > textRect.width())
+                    {
+                        arrowRect = QRect(textRect.right() + spacing,(option.rect.height()- arrowPixmap.width())/2 ,arrowPixmap.width(),arrowPixmap.height());
+
+                        QString elidedText = fm.elidedText(option.text,Qt::ElideRight,textRect.width());
+                        painter.drawText(textRect,tf,elidedText);
+                        painter.drawPixmap(arrowRect,arrowPixmap);
+                    }
+                    else
+                    {
+                        textRect = QRect(iconPosition.x() + spacing +iconWidth,0 ,fm.width(option.text),option.rect.height());
+                        arrowRect = QRect(textRect.right() + spacing,(option.rect.height()- arrowPixmap.width())/2 ,arrowPixmap.width(),arrowPixmap.height());
+
+                        painter.drawText(textRect,tf,option.text);
+                        painter.drawPixmap(arrowRect,arrowPixmap);
+                    }
+                }
+            }
+            else
+            {
+                if(option.icon.isNull())
+                {
+                    arrowRect = QRect(option.rect.width() - arrowPixmap.width() - margin,(option.rect.height()- arrowPixmap.width())/2,arrowPixmap.width(),arrowPixmap.height());
+                    textRect = QRect(margin,iconPosition.y() ,option.rect.width()- iconWidth - margin - spacing ,option.rect.height() );
+
+                    if(fm.width(option.text) > textRect.width())
+                    {
+    //                    arrowRect = QRect(textRect.right() + spacing,(option.rect.height()- arrowPixmap.width())/2 ,arrowPixmap.width(),arrowPixmap.height());
+
+                        QString elidedText = fm.elidedText(option.text,Qt::ElideRight,textRect.width());
+                        painter.drawText(textRect,tf,elidedText);
+                        painter.drawPixmap(arrowRect,arrowPixmap);
+                    }
+                    else
+                    {
+    //                    textRect = QRect(margin,iconPosition.y() ,fm.width(option.text) ,option.rect.height() );
+    //                    arrowRect = QRect(textRect.right() + spacing,(option.rect.height()- arrowPixmap.width())/2 ,arrowPixmap.width(),arrowPixmap.height());
+
+                        painter.drawText(textRect,tf,option.text);
+                        painter.drawPixmap(arrowRect,arrowPixmap);
+                    }
+
+                }
+                else
+                {
+    //                arrowRect = QRect(option.rect.width() - arrowPixmap.width() - margin,(option.rect.height()- arrowPixmap.width())/2 ,arrowPixmap.width(),arrowPixmap.height());
+                    textRect = QRect(iconPosition.x() + spacing +iconWidth,0 ,textWidth - margin - spacing,option.rect.height());
+                    painter.drawPixmap(iconRect,pixmap);
+
+                    if(fm.width(option.text) > textRect.width())
+                    {
+                        arrowRect = QRect(textRect.right() + spacing,(option.rect.height()- arrowPixmap.width())/2 ,arrowPixmap.width(),arrowPixmap.height());
+                        QString elidedText = fm.elidedText(option.text,Qt::ElideRight,textRect.width());
+                        painter.drawText(textRect,tf,elidedText);
+                        painter.drawPixmap(arrowRect,arrowPixmap);
+                    }
+                    else
+                    {
+                        textRect = QRect(iconPosition.x() + spacing +iconWidth,0 ,fm.width(option.text),option.rect.height());
+                        arrowRect = QRect(textRect.right() + spacing,(option.rect.height()- arrowPixmap.width())/2 ,arrowPixmap.width(),arrowPixmap.height());
+                        painter.drawText(textRect,tf,option.text);
+                        painter.drawPixmap(arrowRect,arrowPixmap);
+                    }
+                }
+            }
+        }
+        else
+        {
+            if(!q->isEnabled())
+            {
+                qreal opacity = 0.35;
+                fontColor.setAlphaF(opacity);
+                QPen pen ;
+                pen.setColor(fontColor);
+                painter.setPen(pen);
+                if(option.icon.isNull() )
+                {
+                    QString elidedText = fm.elidedText(option.text,Qt::ElideRight,option.rect.width() - 10);
+                    if(fm.width(option.text) > option.rect.width() - 10)
+                    {
+                        painter.drawText(option.rect.adjusted(margin,0,-margin,0),tf,elidedText);
+                        q->setToolTip(option.text);
+                    }
+                    else
+                    {
+                        painter.drawText(option.rect.adjusted(margin,0,-margin,0),tf,option.text);
+                        q->setToolTip("");
+                    }
+                }
+                else
+                {
+                    QString elidedText = option.text;
+                    if(elidedText.isEmpty())
+                    {
+                        iconRect = QRect((q->rect().width() - iconWidth)/2+1,iconPosition.y()-1,iconWidth,iconHeight);
+                    }
+                    else
+                    {
+                        if( (fm.width(option.text) > option.rect.width() - margin*2 - spacing - iconWidth))
+                        {
+                            iconRect = QRect(margin,iconPosition.y(),iconWidth,iconHeight);
+                            textRect = QRect(iconRect.right() + spacing,0,option.rect.width() - margin*2 - spacing - iconWidth,option.rect.height());
+                            elidedText = fm.elidedText(option.text,Qt::ElideRight,textRect.width());
+                            q->setToolTip(option.text);
+                        }
+                        else
+                        {
+                            textRect = QRect(iconRect.right() + spacing,0,option.rect.width() - margin*2 - spacing - iconWidth,option.rect.height());
+                        }
+                    }
+                    painter.drawPixmap(iconRect,pixmap);
+                    painter.drawText(textRect,tf,elidedText);
+                }
+            }
+            else
+            {
+                if(option.icon.isNull()){
+                    if(fm.width(option.text) > option.rect.width() - 10)
+                    {
+                        QString elidedText = fm.elidedText(option.text,Qt::ElideRight,option.rect.width() - 10);
+                        painter.drawText(option.rect.adjusted(margin,0,-margin,0),tf,elidedText);
+                        q->setToolTip(option.text);
+                    }
+                    else
+                    {
+                        painter.drawText(option.rect.adjusted(margin,0,-margin,0),tf,option.text);
+                        q->setToolTip("");
+                    }
+                }
+                else
+                {
+                    QString elidedText = option.text;
+                    if(elidedText.isEmpty())
+                    {
+                        iconRect = QRect((q->rect().width() - iconWidth)/2+1,iconPosition.y()-1,iconWidth,iconHeight);
+                    }
+                    else
+                    {
+                        if( (fm.width(option.text) > option.rect.width() - margin*2 - spacing - iconWidth))
+                        {
+                            iconRect = QRect(margin,iconPosition.y(),iconWidth,iconHeight);
+                            textRect = QRect(iconRect.right() + spacing,0,option.rect.width() - margin*2 - spacing - iconWidth,option.rect.height());
+                            elidedText = fm.elidedText(option.text,Qt::ElideRight,textRect.width());
+                            q->setToolTip(option.text);
+                        }
+                        else
+                        {
+                            textRect = QRect(iconRect.right() + spacing,0,option.rect.width() - margin*2 - spacing - iconWidth,option.rect.height());
+                        }
+                    }
+                    painter.drawPixmap(iconRect,pixmap);
+                    painter.drawText(textRect,tf,elidedText);
+                }
+            }
+        }
     }
-    initThemeStyle();
 }
 
 }
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kpushbutton.h libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kpushbutton.h
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kpushbutton.h	2024-05-16 09:25:54.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kpushbutton.h	2024-10-29 15:22:42.000000000 +0800
@@ -52,7 +52,17 @@
     enum ButtonType
     {
         NormalType,
-        CircleType
+        CircleType,
+        GrayType,
+        ShadowType
+    };
+
+    enum ArrowDirection
+    {
+        ArrowTop,
+        ArrowBottom,
+        ArrowLeft,
+        ArrowRight
     };
 
     KPushButton(QWidget* parent = nullptr);
@@ -155,6 +165,25 @@
      */
     bool isBackgroundColorHighlight();
 
+    /**
+     * @brief 设置是否显示箭头flag,设置箭头方向arrowDirection
+     * @param flag
+     * @param arrowDirection
+     * @since 2.4
+     */
+    void setArrow(bool flag,ArrowDirection arrowDirection = ArrowBottom);
+
+    /**
+     * @brief 返回是否显示箭头
+     * @return bool
+     * @since 2.4
+     */
+    bool hasArrow() const;
+
+    void setLoaingStatus(bool flag);
+
+    bool isLoading();
+
 protected:
     bool eventFilter(QObject *watched, QEvent *event);
     void paintEvent(QPaintEvent *event);
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/ksearchlineedit.cpp libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/ksearchlineedit.cpp
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/ksearchlineedit.cpp	2024-05-16 09:25:54.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/ksearchlineedit.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -47,6 +47,7 @@
 #include <QLinearGradient>
 #include <QPixmap>
 #include <QTimer>
+#include <QMouseEvent>
 #include "kshadowhelper.h"
 #include "parmscontroller.h"
 #include "ktoolbutton.h"
@@ -151,6 +152,8 @@
     QTimer *m_timer;
     void sltUpdateCursorRect();
     void init();
+    QString m_systemName;
+    bool m_contextMenu;
 
 };
 
@@ -284,6 +287,7 @@
     d->m_isTranslucentFlag = flag;
     d->m_isTranslucent = flag;
     d->changeTheme();
+    setProperty("needTranslucent",flag);
 }
 
 bool KSearchLineEdit::isTranslucent()
@@ -327,6 +331,7 @@
     Q_D(KSearchLineEdit);
     d->m_pCustomButton->setVisible(flag);
     d->m_pLineFrame->setVisible(flag);
+    d->adjustLayout();
 }
 
 bool KSearchLineEdit::isCustomButtonVisible()
@@ -371,6 +376,10 @@
     if(watched == this)
     {
         switch (event->type()) {
+        case QEvent::ContextMenu:
+            if(!d->m_contextMenu)
+                d->m_contextMenu = true;
+            break;
         case QEvent::Show:
         {
             d->adjustHolderRect();
@@ -382,6 +391,9 @@
         }
         case QEvent::FocusIn:
         {
+            if(d->m_contextMenu)
+                d->m_contextMenu = false;
+            d->m_pTextLabel->setVisible(false);
             //文本为空时获取焦点延时显示光标
             if(text().isEmpty())
             {
@@ -414,22 +426,25 @@
         }
         case QEvent::FocusOut:
         {
-            d->m_isSearching = false;
-            d->m_hasFocus = true;
-            if(!this->text().isEmpty())
-            {
-                d->m_pTextLabel->setVisible(false);
-            }
-            else
+            if(!d->m_contextMenu)
             {
-                d->m_pTextLabel->setVisible(true);
-                d->adjustHolderRect();
-                d->m_pAnimation->setStartValue(d->m_sideRect);
-                d->m_pAnimation->setEndValue(d->m_holderRect);
-                d->m_pAnimation->start();
-                d->isTextEmpty = true;
+                d->m_isSearching = false;
+                d->m_hasFocus = true;
+                if(!this->text().isEmpty())
+                {
+                    d->m_pTextLabel->setVisible(false);
+                }
+                else
+                {
+                    d->m_pTextLabel->setVisible(true);
+                    d->adjustHolderRect();
+                    d->m_pAnimation->setStartValue(d->m_sideRect);
+                    d->m_pAnimation->setEndValue(d->m_holderRect);
+                    d->m_pAnimation->start();
+                    d->isTextEmpty = true;
+                }
+                d->adjustLayout();
             }
-            d->adjustLayout();
             break;
         }
         case QEvent::HoverEnter:
@@ -485,8 +500,17 @@
 
 
     m_sideRect = m_pWidget->rect();
-    m_sideRect.moveTop((q->rect().height()-m_pWidget->height())/2);
-    m_sideRect.moveLeft(iconMargin);
+    if(m_systemName == "ug_CN" || m_systemName == "kk_KZ" || m_systemName == "ky_KG")
+    {
+        m_sideRect.moveTop((q->rect().height()-m_pWidget->height())/2);
+        m_sideRect.moveLeft(q->rect().width() - m_sideRect.width() - iconMargin);
+    }
+    else
+    {
+        m_sideRect.moveTop((q->rect().height()-m_pWidget->height())/2);
+        m_sideRect.moveLeft(iconMargin);
+    }
+
     if(m_placeHolderAlignment & Qt::AlignCenter)
     {
         m_holderRect = m_pWidget->rect();
@@ -512,7 +536,7 @@
 {
     Q_Q(KSearchLineEdit);
     int spacing = 5;
-    int width = spacing;
+    int width = spacing*2;
     m_pLineFrame->setFixedHeight(m_pSubWidget->height()-12);
     if(!m_pClearButton->isHidden())
         width +=(spacing + m_pClearButton->iconSize().width());
@@ -521,8 +545,17 @@
     if(!m_pCustomButton->isHidden())
         width +=(spacing + m_pCustomButton->iconSize().width());
     m_pSubWidget->setFixedSize(width,q->cursorRect().height());
-    m_pSubWidget->move(q->width()-m_pSubWidget->width(),(q->rect().height()-m_pSubWidget->height())/2);
-    q->setTextMargins(m_pWidget->width(),0,m_pSubWidget->width(),0);
+    if(m_systemName == "ug_CN" || m_systemName == "kk_KZ" || m_systemName == "ky_KG")
+    {
+        m_pSubWidget->move(0,(q->rect().height()-m_pSubWidget->height())/2 + 1);
+        q->setTextMargins(m_pSubWidget->width(),0,m_pWidget->width(),0);
+    }
+    else
+    {
+        m_pSubWidget->move(q->width()-m_pSubWidget->width(),(q->rect().height()-m_pSubWidget->height())/2 + 1);
+        q->setTextMargins(m_pWidget->width(),0,m_pSubWidget->width(),0);
+    }
+
 }
 
 void KSearchLineEdit::resizeEvent(QResizeEvent *event)
@@ -562,7 +595,9 @@
     d->m_linearGradient = QLinearGradient(QPointF(rect().left(),rect().center().y()),QPointF(rect().right(),rect().center().y()));
 
     QPainter painter(this);
-
+    painter.setRenderHints(QPainter::Antialiasing);
+    painter.setRenderHints(QPainter::SmoothPixmapTransform);
+    painter.setRenderHints(QPainter::HighQualityAntialiasing);
     if (this->hasFocus() && d->m_showCursor)
     {
         QRect rect = this->cursorRect();
@@ -612,7 +647,7 @@
         painter.setPen(Qt::NoPen);
     else
         painter.setPen(pen);
-    painter.drawRoundedRect(rect().adjusted(1,5,-1,-5),6,6);
+    painter.drawRoundedRect(rect().adjusted(1,4,-1,-4),6,6);
 }
 
 QSize KSearchLineEdit::sizeHint() const
@@ -633,10 +668,11 @@
       m_isClearVisible(false),
       m_isCustomButton(false),
       m_isCustomButtonHover(false),
-      m_isClearHover(false)
+      m_isClearHover(false),
+      m_contextMenu(false)
 {
     Q_Q(KSearchLineEdit);
-    q->setContentsMargins(0,4,0,4);
+    q->setContentsMargins(0,3,0,3);
     m_pCompleter = new QCompleter(this);
     m_pCompleter->setCaseSensitivity(Qt::CaseInsensitive);
     m_pListModel = new QStringListModel(m_List, this);
@@ -656,7 +692,13 @@
 {
     Q_Q(KSearchLineEdit);
     if(m_isSearching)
-        q->setTextMargins(iconMargin + m_pIconLabel->width(),0,0,0);
+    {
+        if(m_systemName == "ug_CN" || m_systemName == "kk_KZ" || m_systemName == "ky_KG")
+            q->setTextMargins(m_pSubWidget->width(),0,iconMargin + m_pIconLabel->width(),0);
+        else
+            q->setTextMargins(iconMargin + m_pIconLabel->width(),0,m_pSubWidget->width(),0);
+    }
+
 }
 
 void KSearchLineEditPrivate::doEditingFinished()
@@ -804,11 +846,11 @@
     m_pSubWidget = new QWidget(q);
     QHBoxLayout *layout = new QHBoxLayout(m_pSubWidget);
     layout->setContentsMargins(0,0,0,0);
-    layout->addSpacing(5);
+    layout->addSpacing(iconMargin);
     layout->addWidget(m_pClearButton);
     layout->addWidget(m_pLineFrame);
     layout->addWidget(m_pCustomButton);
-    layout->addSpacing(5);
+    layout->addSpacing(iconMargin);
     m_pSubWidget->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed);
 
     m_isSearching = false;
@@ -832,8 +874,15 @@
     m_pWidget->setLayout(m_pWidgetLayout);
     m_pAnimation = new QPropertyAnimation(m_pWidget,"geometry");
     m_pAnimation->setEasingCurve(QEasingCurve::InOutQuad);
-    m_pAnimation->setDuration(200);
-    q->setTextMargins(iconMargin + m_pIconLabel->width(),0,0,0);
+    m_pAnimation->setDuration(100);
+
+    m_systemName = QLocale::system().name();
+    if(m_systemName == "ug_CN" || m_systemName == "kk_KZ" || m_systemName == "ky_KG")
+        q->setAlignment(Qt::AlignRight);
+    else
+        q->setAlignment(Qt::AlignLeft);
+
+    q->setTextMargins(iconMargin + m_pIconLabel->width(),0,m_pSubWidget->width(),0);
 }
 
 ListViewDelegate::ListViewDelegate(QObject *parent):QStyledItemDelegate(parent)
@@ -973,8 +1022,8 @@
     {
         if(option.state.testFlag(QStyle::State_MouseOver))
             QToolTip::showText(QCursor::pos(),str,qobject_cast<QWidget*>(const_cast<QWidget*>(option.widget)));
-        else
-            QToolTip::hideText();
+//        else
+//            QToolTip::hideText();
 
         str=fm.elidedText(str,Qt::ElideRight,rect.width()-12);
     }
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/ksearchlineedit.h libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/ksearchlineedit.h
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/ksearchlineedit.h	2024-05-16 09:25:54.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/ksearchlineedit.h	2024-10-29 15:22:42.000000000 +0800
@@ -127,9 +127,20 @@
      */
     void reloadStyle();
 
+    /**
+     * @brief 获取自定义按钮
+     * @return
+     * @since 2.4
+     */
     KToolButton *customButton();
 
+    /**
+     * @brief 是否启用渐变色
+     * @param flag
+     * @since 2.4
+     */
     void setGradation(bool flag);
+
     /**
      * @brief 设置智能语义按钮是否可见
      * @param flag
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/ksecurityquestiondialog.cpp libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/ksecurityquestiondialog.cpp
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/ksecurityquestiondialog.cpp	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/ksecurityquestiondialog.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,385 @@
+/*
+ * libkysdk-qtwidgets's Library
+ *
+ * Copyright (C) 2023, KylinSoft Co., Ltd.
+ *
+ * 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 3 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 General Public License
+ * along with this library.  If not, see <https://www.gnu.org/licenses/>.
+ *
+ * Authors: SiSheng He <hesisheng@kylinos.cn>
+ *
+ */
+
+#include "ksecurityquestiondialog.h"
+#include <QObject>
+#include <QScrollArea>
+#include <QScrollBar>
+
+#define LABELWIDTH 92
+#define BUTTONWIDTH 96
+#define DIALOGWIDTH 424
+#define DIALOGHEIGHT 476
+
+namespace kdk
+{
+
+class KSecurityQuestionDialogPrivate:public QObject
+{
+    Q_OBJECT
+    Q_DECLARE_PUBLIC(KSecurityQuestionDialog)
+public:
+    KSecurityQuestionDialogPrivate(KSecurityQuestionDialog *parent);
+
+private:
+    KSecurityQuestionDialog *q_ptr;
+    QScrollArea *m_pScrollArea;
+    QVBoxLayout *m_pMainVLayout = nullptr;
+    QLabel *m_pTitleLabel = nullptr;
+    KPushButton *m_pCancelKBtn = nullptr;
+    KPushButton *m_pConfirmKBtn = nullptr;
+    QList<QComboBox *> m_questionComboxList;
+    QList<QLineEdit *> m_questionLineeditList;
+    QList<QLineEdit *> m_answerLineeditList;
+    QList<QLabel *> m_questionLabelList;
+    QList<QLabel *> m_answerLabelList;
+    QList<QLabel *> m_tipsLabelList;
+    QStringList m_questionlist;
+    QWidget* m_pScrollWidget;
+    bool m_isVerify = false;
+
+public Q_SLOTS:
+    void setQustionCombox();
+    void refreshConfirmBtn();
+};
+
+KSecurityQuestionDialog::KSecurityQuestionDialog(QWidget *parent)
+    :KDialog(parent),
+     d_ptr(new KSecurityQuestionDialogPrivate(this))
+{
+    Q_D(KSecurityQuestionDialog);
+    setObjectName("KSecurityQuestionDialog");
+}
+
+KSecurityQuestionDialog::~KSecurityQuestionDialog()
+{
+}
+
+KPushButton *KSecurityQuestionDialog::cancelButton()
+{
+    Q_D(KSecurityQuestionDialog);
+    return d->m_pCancelKBtn;
+}
+
+KPushButton *KSecurityQuestionDialog::confirmButton()
+{
+    Q_D(KSecurityQuestionDialog);
+    return d->m_pConfirmKBtn;
+}
+
+void KSecurityQuestionDialog::setTitleText(const QString &text)
+{
+    Q_D(KSecurityQuestionDialog);
+    d->m_pTitleLabel->setText(text);
+}
+
+void KSecurityQuestionDialog::addSecurityQuestionItem(const int count, bool mutex)
+{
+    Q_D(KSecurityQuestionDialog);
+    for (int i = 1; i <= count; i++) {
+        QLabel *questionLabel = new QLabel(tr("Security question%1").arg(i));
+        questionLabel->setFixedWidth(LABELWIDTH);
+        QHBoxLayout *questionHlayout = new QHBoxLayout();
+        questionHlayout->setContentsMargins(0, 0, 0, 0);
+        questionHlayout->addWidget(questionLabel);
+        questionHlayout->addSpacing(16);
+
+        QLabel *answerLabel =  new QLabel(tr("Answer"));
+        answerLabel->setFixedWidth(LABELWIDTH);
+        QLineEdit *answerLineEdit = new QLineEdit();
+        answerLineEdit->setPlaceholderText(tr("Required"));
+        answerLineEdit->setFixedHeight(36);
+        QHBoxLayout *answerHlayout = new QHBoxLayout();
+        answerHlayout->setContentsMargins(0, 0, 0, 0);
+        answerHlayout->addWidget(answerLabel);
+        answerHlayout->addSpacing(16);
+        answerHlayout->addWidget(answerLineEdit);
+
+        d->m_answerLineeditList.append(answerLineEdit);
+        d->m_questionLabelList.append(questionLabel);
+        d->m_answerLabelList.append(answerLabel);
+
+        QVBoxLayout *itemVLayout = new QVBoxLayout;
+        itemVLayout->setContentsMargins(0, 0, 0, 0);
+        itemVLayout->setSpacing(8);
+        itemVLayout->addLayout(questionHlayout);
+        itemVLayout->addLayout(answerHlayout);
+
+        if (d->m_isVerify) {
+            QLineEdit *questionLineedit = new QLineEdit();
+            questionLineedit->setFixedHeight(36);
+            d->m_questionLineeditList.append(questionLineedit);
+            questionLineedit->setEnabled(false);
+            QPalette palette = questionLineedit->palette();
+            QColor color = palette.color(QPalette::Active, QPalette::Text);
+            palette.setColor(QPalette::Disabled, QPalette::Text, color);
+            questionLineedit->setPalette(palette);
+            questionHlayout->addWidget(questionLineedit);
+            QLabel *tiplabel = new QLabel();
+            d->m_tipsLabelList.append(tiplabel);
+            QPalette pe;
+            pe.setColor(QPalette::WindowText,Qt::red);
+            tiplabel->setPalette(pe);
+            QLabel *placeholderLabel =  new QLabel();
+            placeholderLabel->setFixedWidth(LABELWIDTH);
+            QHBoxLayout *tipHLayout = new QHBoxLayout();
+            tipHLayout->setContentsMargins(0, 0, 0, 0);
+            tipHLayout->addWidget(placeholderLabel);
+            tipHLayout->addSpacing(16);
+            tipHLayout->addWidget(tiplabel);
+
+            itemVLayout->addLayout(tipHLayout);
+
+        } else {
+            QComboBox *questionCombox = new QComboBox();
+            questionCombox->setFixedHeight(36);
+            d->m_questionComboxList.append(questionCombox);
+            questionHlayout->addWidget(questionCombox);
+            itemVLayout->addStretch();
+
+            if (mutex) {
+                connect(questionCombox, &QComboBox::currentTextChanged, d, &KSecurityQuestionDialogPrivate::setQustionCombox);
+            }
+        }
+
+        d->m_pMainVLayout->insertLayout(d->m_pMainVLayout->count() - 1, itemVLayout);
+
+        connect(answerLineEdit, &QLineEdit::textChanged, d, &KSecurityQuestionDialogPrivate::refreshConfirmBtn);
+    }
+}
+
+void KSecurityQuestionDialog::addSecurityQuestionItem(const int count, bool mutex, bool isVerify)
+{
+    Q_D(KSecurityQuestionDialog);
+    d->m_isVerify = isVerify;
+    addSecurityQuestionItem(count, mutex);
+}
+
+void KSecurityQuestionDialog::initQustionCombox(const QStringList &questionlist)
+{
+    Q_D(KSecurityQuestionDialog);
+    d->m_questionlist = questionlist;
+    for (int i = 0; i < d->m_questionComboxList.count(); i++) {
+        QComboBox *question = d->m_questionComboxList.at(i);
+        question->blockSignals(true);
+        question->addItems(questionlist);
+        question->blockSignals(false);
+        question->setCurrentIndex(i);
+    }
+
+    for (int i = 0; i < d->m_questionLineeditList.count(); i++) {
+        QLineEdit *question = d->m_questionLineeditList.at(i);
+        if (questionlist.count() > i) {
+            question->setText(questionlist.at(i));
+        }
+    }
+}
+
+QLabel *KSecurityQuestionDialog::tipsLabel(const int index)
+{
+    Q_D(KSecurityQuestionDialog);
+    // questionIndex 最小为0 count最小为1,
+    if (index >= 0 && d->m_tipsLabelList.count() > index) {
+        return d->m_tipsLabelList.at(index);
+    }
+
+    return nullptr;
+}
+
+QLabel *KSecurityQuestionDialog::questionLabel(const int questionIndex)
+{
+    Q_D(KSecurityQuestionDialog);
+    // questionIndex 最小为0 count最小为1,
+    if (questionIndex >= 0 && d->m_questionLabelList.count() > questionIndex) {
+        return d->m_questionLabelList.at(questionIndex);
+    }
+
+    return nullptr;
+}
+
+QLabel *KSecurityQuestionDialog::answerLabel(const int answerIndex)
+{
+    Q_D(KSecurityQuestionDialog);
+    if (answerIndex >= 0 && d->m_answerLabelList.count() > answerIndex) {
+        return d->m_answerLabelList.at(answerIndex);
+    }
+
+    return nullptr;
+}
+
+QComboBox *KSecurityQuestionDialog::questionCombox(const int questionIndex)
+{
+    Q_D(KSecurityQuestionDialog);
+    if (questionIndex >= 0 && d->m_questionComboxList.count() > questionIndex) {
+        return d->m_questionComboxList.at(questionIndex);
+    }
+
+    return nullptr;
+}
+
+QLineEdit *KSecurityQuestionDialog::answerLineedit(const int answerIndex)
+{
+    Q_D(KSecurityQuestionDialog);
+    if (answerIndex >= 0 && d->m_answerLineeditList.count() > answerIndex) {
+        return d->m_answerLineeditList.at(answerIndex);
+    }
+
+    return nullptr;
+}
+
+void KSecurityQuestionDialog::keyPressEvent(QKeyEvent * event)
+{
+    Q_D(KSecurityQuestionDialog);
+    switch (event->key())
+    {
+    case Qt::Key_Enter:
+        if (d->m_pConfirmKBtn->isEnabled())
+            d->m_pConfirmKBtn->clicked();
+        break;
+    case Qt::Key_Return:
+        if (d->m_pConfirmKBtn->isEnabled())
+            d->m_pConfirmKBtn->clicked();
+        break;
+    default:
+        KDialog::keyPressEvent(event);
+    }
+}
+
+KSecurityQuestionDialogPrivate::KSecurityQuestionDialogPrivate(KSecurityQuestionDialog *parent)
+    :q_ptr(parent)
+{
+    Q_Q(KSecurityQuestionDialog);
+    m_pScrollArea = new QScrollArea(q->mainWidget());
+    m_pScrollArea->setFrameShape(QScrollArea::NoFrame);
+    m_pScrollWidget = new QWidget();
+
+    setParent(parent);
+    q->setWindowIcon("ukui-control-center");
+    q->setWindowTitle(tr("Security Question"));
+
+    m_pTitleLabel = new QLabel(tr("Setting security questions to reset password when forget it, "
+                                  "please remember answer."));
+    m_pTitleLabel->setWordWrap(true);
+    m_pCancelKBtn = new KPushButton();
+    m_pCancelKBtn->setFocusPolicy(Qt::FocusPolicy::NoFocus);
+    m_pCancelKBtn->setFixedWidth(BUTTONWIDTH);
+    m_pCancelKBtn->setText(tr("Cancel"));
+    m_pConfirmKBtn = new KPushButton();
+    m_pConfirmKBtn->setFixedWidth(BUTTONWIDTH);
+    m_pConfirmKBtn->setText(tr("Save"));
+    m_pConfirmKBtn->setEnabled(false);
+    m_pConfirmKBtn->setFocusPolicy(Qt::FocusPolicy::NoFocus);
+    q->closeButton()->setFocusPolicy(Qt::FocusPolicy::NoFocus);
+
+    QHBoxLayout *hLayout = new QHBoxLayout();
+    hLayout->setContentsMargins(0, 0, 0, 0);
+    hLayout->setSpacing(16);
+    hLayout->addStretch();
+    hLayout->addWidget(m_pCancelKBtn);
+    hLayout->addWidget(m_pConfirmKBtn);
+
+
+    QVBoxLayout* scrollAreaLayout = new QVBoxLayout();
+    scrollAreaLayout->setContentsMargins(0,0,0,0);
+    scrollAreaLayout->addWidget(m_pScrollArea);
+    m_pScrollArea->setWidgetResizable(true);
+    m_pScrollArea->horizontalScrollBar()->setVisible(false);
+
+    m_pMainVLayout = new QVBoxLayout(m_pScrollWidget);
+    m_pMainVLayout->setContentsMargins(21, 16, 27, 24);
+    m_pMainVLayout->setSpacing(24);
+    m_pMainVLayout->addWidget(m_pTitleLabel);
+    m_pMainVLayout->addLayout(hLayout);
+
+    m_pScrollWidget->setLayout(m_pMainVLayout);
+    m_pScrollArea->setWidget(m_pScrollWidget);
+
+    q->mainWidget()->setLayout(scrollAreaLayout);
+    m_pScrollWidget->setFixedWidth(DIALOGWIDTH);
+    q->setFixedSize(DIALOGWIDTH,DIALOGHEIGHT);
+
+    QObject::connect(m_pCancelKBtn, SIGNAL(clicked(bool)), q, SLOT(reject()));
+
+    QObject::connect(m_pConfirmKBtn, &KPushButton::clicked, this, [=](){
+        foreach (QLineEdit *tempLineedit, m_answerLineeditList) {
+            if (tempLineedit != nullptr) {
+                tempLineedit->clearFocus();
+            }
+        }
+    });
+}
+
+// 安全问题下拉框问题不可重复,已选择问题下拉框中置灰
+void KSecurityQuestionDialogPrivate::setQustionCombox()
+{
+    Q_Q(KSecurityQuestionDialog);
+    QStringList allComboxCurrentText;
+    for (int i = 0; i < m_questionComboxList.count(); i++) {
+        QComboBox *tempCombox = m_questionComboxList.at(i);
+        // 获取所有combox当前选择的text
+        allComboxCurrentText.append(tempCombox->currentText());
+    }
+
+    for (int j = 0; j < m_questionComboxList.count(); j++) {
+        QComboBox *tempCombox = m_questionComboxList.at(j);
+        QString currentText =  tempCombox->currentText();
+        if (m_questionlist.contains(currentText)) {
+            tempCombox->blockSignals(true);
+            tempCombox->clear();
+            tempCombox->addItems(m_questionlist);
+            tempCombox->setCurrentText(currentText);
+            tempCombox->blockSignals(false);
+            // 将在当前combox的其他combox的当前项置灰
+            foreach (QString text, allComboxCurrentText) {
+                if (text != currentText) {
+                    QVariant v(0);
+                    tempCombox->setItemData(tempCombox->findText(text), v, Qt::UserRole - 1);
+                }
+            }
+        }
+    }
+}
+
+void KSecurityQuestionDialogPrivate::refreshConfirmBtn()
+{
+    foreach (QLabel *tempLabel, m_tipsLabelList) {
+        if (!tempLabel->text().isEmpty()) {
+            tempLabel->clear();
+        }
+    }
+
+    foreach (QLineEdit *tempLineedit, m_answerLineeditList) {
+        if (tempLineedit->text().isEmpty()) {
+            m_pConfirmKBtn->setEnabled(false);
+            m_pConfirmKBtn->setProperty("isImportant", false);
+            return;
+        }
+    }
+
+    m_pConfirmKBtn->setEnabled(true);
+    m_pConfirmKBtn->setProperty("isImportant", true);
+}
+
+}
+
+#include "ksecurityquestiondialog.moc"
+#include "moc_ksecurityquestiondialog.cpp"
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/ksecurityquestiondialog.h libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/ksecurityquestiondialog.h
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/ksecurityquestiondialog.h	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/ksecurityquestiondialog.h	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,152 @@
+/*
+ * libkysdk-qtwidgets's Library
+ *
+ * Copyright (C) 2023, KylinSoft Co., Ltd.
+ *
+ * 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 3 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 General Public License
+ * along with this library.  If not, see <https://www.gnu.org/licenses/>.
+ *
+ * Authors: SiSheng He <hesisheng@kylinos.cn>
+ *
+ */
+
+#ifndef KSECURITYQUESTIONDIALOG_H
+#define KSECURITYQUESTIONDIALOG_H
+
+#include <QDialog>
+#include <QComboBox>
+#include <QLineEdit>
+#include <QBoxLayout>
+#include "gui_g.h"
+#include "kdialog.h"
+#include "kpushbutton.h"
+
+namespace kdk
+{
+
+class KSecurityQuestionDialogPrivate;
+
+/**
+ * @brief 继承自 KDialog,
+ * @since 2.4
+ */
+class GUI_EXPORT KSecurityQuestionDialog: public KDialog
+{
+    Q_OBJECT
+
+public:
+    explicit KSecurityQuestionDialog(QWidget* parent = nullptr);
+    ~KSecurityQuestionDialog();
+
+    /**
+     * @brief 设置对话框标题
+     *
+     * @param text 标题
+     */
+    void setTitleText(const QString &text);
+
+    /**
+     * @brief 添加安全问题控件
+     *Label combox
+     *Label lineedit
+     *      tipsLabel
+     * @param count 控件个数
+     * @param mutex 是否开启下拉框互斥校验,若开启后,已被选择项,在其他下拉框中被置灰
+     */
+    void addSecurityQuestionItem(const int count, bool mutex);
+
+    /**
+     * @brief 添加安全问题控件
+     *Label combox/lineedit
+     *Label lineedit
+     *      tipsLabel
+     * @param count 控件个数
+     * @param mutex 是否开启下拉框互斥校验,若开启后,已被选择项,在其他下拉框中被置灰
+     * @param isVerify 是否为校验窗口
+     */
+    void addSecurityQuestionItem(const int count, bool mutex, bool isVerify);
+
+    /**
+     * @brief 添加下拉框选项列表
+     *
+     * @param questionlist
+     */
+    void initQustionCombox(const QStringList &questionlist);
+
+    /**
+     * @brief 获取下拉框左侧Label
+     *
+     * @param questionIndex item索引 [0,count)
+     * @return QLabel 下拉框左侧Label,若未获取到,返回nullptr
+     */
+    QLabel *questionLabel(const int questionIndex);
+
+    /**
+     * @brief 获取combox
+     *
+     * @param questionIndex item索引 [0,count)
+     * @return QComboBox 下拉框,若未获取到,返回nullptr
+     */
+    QComboBox *questionCombox(const int questionIndex);
+
+    /**
+     * @brief 获取lineedit左侧label
+     *
+     * @param answerIndex item索引 [0,count)
+     * @return QLabel lineedit左侧label,若未获取到,返回nullptr
+     */
+    QLabel *answerLabel(const int answerIndex);
+
+    /**
+     * @brief 获取 lineedit
+     *
+     * @param answerIndex item索引 [0,count)
+     * @return QLineEdit lineedit,若未获取到,返回nullptr
+     */
+    QLineEdit *answerLineedit(const int answerIndex);
+
+    /**
+     * @brief 获取提示 label
+     *
+     * @param index item 索引 [0,count)
+     * @return QLabel 提示label,若未获取到,返回nullptr
+     */
+    QLabel *tipsLabel(const int index);
+
+    /**
+     * @brief 获取取消按钮
+     *
+     * @return KPushButton
+     */
+    KPushButton *cancelButton();
+
+    /**
+     * @brief 获取确认按钮
+     *
+     * @return KPushButton
+     */
+    KPushButton *confirmButton();
+
+protected:
+    void keyPressEvent(QKeyEvent *);
+
+private:
+    Q_DECLARE_PRIVATE(KSecurityQuestionDialog)
+    KSecurityQuestionDialogPrivate* const d_ptr;
+};
+}
+/**
+  * @example testsecurityquestiondialog/main.cpp
+  * @}
+  */
+#endif // KSECURITYQUESTIONDIALOG_H
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kslider.cpp libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kslider.cpp
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kslider.cpp	2024-05-16 09:25:54.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kslider.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -214,8 +214,11 @@
                     side = m_valuePosition;
                 else
                     side = m_animation->currentValue().toInt();
-                if(point.x()<= side)
-                    painter->drawEllipse(point,Parmscontroller::parm(Parmscontroller::Parm::PM_SliderNodeRadius)/2,Parmscontroller::parm(Parmscontroller::Parm::PM_SliderNodeRadius)/2);//选中基点
+//                if(point.x()<= side)
+                if(q->layoutDirection() == Qt::LeftToRight && (point.x()<= side))
+                    painter->drawEllipse(point,Parmscontroller::parm(Parmscontroller::Parm::PM_SliderNodeRadius)/2,Parmscontroller::parm(Parmscontroller::Parm::PM_SliderNodeRadius)/2);
+                else if(q->layoutDirection() == Qt::RightToLeft && (point.x()>= side))
+                    painter->drawEllipse(point,Parmscontroller::parm(Parmscontroller::Parm::PM_SliderNodeRadius)/2,Parmscontroller::parm(Parmscontroller::Parm::PM_SliderNodeRadius)/2);
             }
         }
         else
@@ -334,26 +337,52 @@
     if(q->orientation() == Qt::Horizontal)
     {
         m_nodes.clear();
-        QPoint beginNode(baseLineRect().left(),q->height()/2);
-        QPoint endNode(baseLineRect().right(),q->height()/2);
-        m_nodes.append(beginNode);
-
-        if(!q->tickInterval())
+        if(q->layoutDirection() == Qt::LeftToRight)
         {
+            QPoint beginNode(baseLineRect().left(),q->height()/2);
+            QPoint endNode(baseLineRect().right(),q->height()/2);
+            m_nodes.append(beginNode);
+
+            if(!q->tickInterval())
+            {
+                m_nodes.append(endNode);
+                return;
+            }
+
+            for(int i = q->minimum() + q->tickInterval();i < q->maximum();i += q->tickInterval())
+            {
+                QPoint point;
+                int x = baseLineRect().left()+baseLineRect().width()*(i-q->minimum())/(q->maximum()-q->minimum());
+                int y = q->height()/2;
+                point.setX(x);
+                point.setY(y);
+                m_nodes.append(point);
+            }
             m_nodes.append(endNode);
-            return;
         }
-
-        for(int i = q->minimum() + q->tickInterval();i < q->maximum();i += q->tickInterval())
+        else
         {
-            QPoint point;
-            int x = baseLineRect().left()+baseLineRect().width()*(i-q->minimum())/(q->maximum()-q->minimum());
-            int y = q->height()/2;
-            point.setX(x);
-            point.setY(y);
-            m_nodes.append(point);
+            QPoint beginNode(baseLineRect().right(),q->height()/2);
+            QPoint endNode(baseLineRect().left(),q->height()/2);
+            m_nodes.append(beginNode);
+
+            if(!q->tickInterval())
+            {
+                m_nodes.append(endNode);
+                return;
+            }
+
+            for(int i = q->minimum() + q->tickInterval();i < q->maximum();i += q->tickInterval())
+            {
+                QPoint point;
+                int x = baseLineRect().right()- baseLineRect().width()*(i-q->minimum())/(q->maximum()-q->minimum());
+                int y = q->height()/2;
+                point.setX(x);
+                point.setY(y);
+                m_nodes.append(point);
+            }
+            m_nodes.append(endNode);
         }
-        m_nodes.append(endNode);
     }
     else
     {
@@ -455,9 +484,20 @@
     int prePosition = m_valuePosition;
     if(q->orientation() == Qt::Horizontal)
     {
-        if(q->maximum() != q->minimum())
-            m_valuePosition =this->baseLineRect().left() +
-                this->baseLineRect().width()*(q->value()-q->minimum())/(q->maximum()-q->minimum());
+        if(q->layoutDirection() == Qt::LeftToRight)
+        {
+            if(q->maximum() != q->minimum())
+                m_valuePosition =this->baseLineRect().left() +
+                    this->baseLineRect().width()*(q->value()-q->minimum())/(q->maximum()-q->minimum());
+        }
+        else
+        {
+            if(q->maximum() != q->minimum())
+            {
+                m_valuePosition =this->baseLineRect().adjusted(0,0,1,0).right() -
+                    this->baseLineRect().width()*(q->value()-q->minimum())/(q->maximum()-q->minimum());
+            }
+        }
     }
     else
     {
@@ -485,13 +525,27 @@
     int nodeInterval =q->tickInterval();
     if(q->orientation() == Qt::Horizontal)
     {
-        if(m_currentpos.x() > baseLineRect().right())
-            value = q->maximum();
-        else if(m_currentpos.x() < baseLineRect().left())
-            value = q->minimum();
-        pos = qRound(q->minimum()+dur*((double)m_currentpos.x()-baseLineRect().left())/baseLineRect().width());
-        int left = baseLineRect().left();
-        int width = baseLineRect().width();
+        int left,width,right;
+        if( q->layoutDirection() == Qt::LeftToRight)
+        {
+            if(m_currentpos.x() > baseLineRect().right())
+                value = q->maximum();
+            else if(m_currentpos.x() < baseLineRect().left())
+                value = q->minimum();
+            pos = qRound(q->minimum()+dur*((double)m_currentpos.x()-baseLineRect().left())/baseLineRect().width());
+            left = baseLineRect().left();
+            width = baseLineRect().width();
+        }
+        else
+        {
+            if(m_currentpos.x() > baseLineRect().right())
+                value = q->minimum();
+            else if(m_currentpos.x() < baseLineRect().left())
+                value = q->maximum();
+            pos = qRound(q->minimum()-dur*((double)m_currentpos.x()-baseLineRect().right() -1)/baseLineRect().width());
+            right = baseLineRect().right();
+            width = baseLineRect().width();
+        }
         switch (m_sliderType)
         {
         case SingleSelectSlider:
@@ -502,11 +556,22 @@
         {
             int frontIndex = (pos-q->minimum()) / step;
             int backIndex = (pos-q->minimum()) / step + 1;
-            if((m_currentpos.x()-left-frontIndex*step*width/dur)
-                    <(backIndex*step*width/dur - (m_currentpos.x()-left)))
-                pos = frontIndex * step + q->minimum();
+            if( q->layoutDirection() == Qt::LeftToRight)
+            {
+                if((m_currentpos.x()-left-frontIndex*step*width/dur)
+                        <(backIndex*step*width/dur - (m_currentpos.x()-left)))
+                    pos = frontIndex * step + q->minimum();
+                else
+                    pos = backIndex * step + q->minimum();
+            }
             else
-                pos = backIndex * step + q->minimum();
+            {
+                if((right - m_currentpos.x()-frontIndex*step*width/dur)
+                        <(backIndex*step*width/dur - (right - m_currentpos.x())))
+                    pos = frontIndex * step + q->minimum();
+                else
+                    pos = backIndex * step + q->minimum();
+            }
             value = pos;
         }
             break;
@@ -514,11 +579,22 @@
         {
             int frontIndex = (pos-q->minimum()) / nodeInterval;
             int backIndex = (pos-q->minimum()) / nodeInterval + 1;
-            if((m_currentpos.x()-left-frontIndex*nodeInterval*width/dur)
-                    <(backIndex*nodeInterval*width/dur - (m_currentpos.x()-left)))
-                pos = frontIndex * nodeInterval + q->minimum();
+            if( q->layoutDirection() == Qt::LeftToRight)
+            {
+                if((m_currentpos.x()-left-frontIndex*nodeInterval*width/dur)
+                        <(backIndex*nodeInterval*width/dur - (m_currentpos.x()-left)))
+                    pos = frontIndex * nodeInterval + q->minimum();
+                else
+                    pos = backIndex * nodeInterval + q->minimum();
+            }
             else
-                pos = backIndex * nodeInterval + q->minimum();
+            {
+                if((right - m_currentpos.x()-frontIndex*nodeInterval*width/dur)
+                        <(backIndex*nodeInterval*width/dur - (right - m_currentpos.x())))
+                    pos = frontIndex * nodeInterval + q->minimum();
+                else
+                    pos = backIndex * nodeInterval + q->minimum();
+            }
             value = pos;
         }
             break;
@@ -760,15 +836,30 @@
     QRect rect;
     if(q->orientation() == Qt::Horizontal)
     {
-        rect.setBottom(q->height()/2 + line_width/2);
-        rect.setTop(q->height()/2 - line_width/2);
-        rect.setLeft(spaceing + Parmscontroller::parm(Parmscontroller::Parm::PM_SliderHandleRadius)/2);
-        if(m_ismoving)
-            rect.setRight(m_currentpos.x());
-        else if(m_resize)
-        rect.setRight(m_valuePosition);
+        if(q->layoutDirection() == Qt::LeftToRight)
+        {
+            rect.setBottom(q->height()/2 + line_width/2);
+            rect.setTop(q->height()/2 - line_width/2);
+            rect.setLeft(spaceing + Parmscontroller::parm(Parmscontroller::Parm::PM_SliderHandleRadius)/2);
+            if(m_ismoving)
+                rect.setRight(m_currentpos.x());
+            else if(m_resize)
+                rect.setRight(m_valuePosition);
+            else
+                rect.setRight(m_animation->currentValue().toInt());
+        }
         else
-            rect.setRight(m_animation->currentValue().toInt());
+        {
+            rect.setBottom(q->height()/2 + line_width/2);
+            rect.setTop(q->height()/2 - line_width/2);
+            if(m_ismoving)
+                rect.setLeft(m_currentpos.x());
+            else if(m_resize)
+                rect.setLeft(m_valuePosition);
+            else
+                rect.setLeft(m_animation->currentValue().toInt());
+            rect.setRight(q->width() - spaceing -Parmscontroller::parm(Parmscontroller::Parm::PM_SliderHandleRadius)/2);
+        }
     }
     else
     {
@@ -960,7 +1051,7 @@
         if(orientation() == Qt::Horizontal)
         {
             if( event->pos().x() >= d->baseLineRect().left() && event->pos().x() <= d->baseLineRect().adjusted(0,0,1,0).right() )
-        d->m_currentpos = event->pos();
+                d->m_currentpos = event->pos();
             else if( event->pos().x() < d->baseLineRect().left() )
                 d->m_currentpos.setX(d->baseLineRect().left());
             else if( event->pos().x() > d->baseLineRect().adjusted(0,0,1,0).right() )
@@ -999,7 +1090,7 @@
         if(orientation() == Qt::Horizontal)
         {
             if(event->pos().x() >= d->baseLineRect().left() &&event->pos().x() <= d->baseLineRect().adjusted(0,0,1,0).right())
-        d->m_currentpos = event->pos();
+                d->m_currentpos = event->pos();
             else if(event->pos().x() < d->baseLineRect().left())
                 d->m_currentpos.setX(d->baseLineRect().left());
             else if(event->pos().x() > d->baseLineRect().adjusted(0,0,1,0).right())
@@ -1011,7 +1102,7 @@
         else
         {
             if( event->pos().y() >= d->baseLineRect().top() && event->pos().y() <= d->baseLineRect().adjusted(0,0,0,1).bottom() )
-        d->m_currentpos = event->pos();
+                d->m_currentpos = event->pos();
             else if( event->pos().y() > d->baseLineRect().adjusted(0,0,0,1).bottom() )
                 d->m_currentpos.setY(d->baseLineRect().adjusted(0,0,0,1).bottom());
             else if( event->pos().y() < d->baseLineRect().top() )
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kswitchbutton.cpp libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kswitchbutton.cpp
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kswitchbutton.cpp	2024-05-16 09:25:54.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kswitchbutton.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -504,7 +504,6 @@
         int sliderWidth = q->height() - m_space - 1 ;
 
         QRect sliderRect(m_startX + m_space/2, m_space/2, sliderWidth, sliderWidth);
-        qDebug()<<"xxxx"<<sliderWidth;
         if(painter->pen().width() == 1)
             painter->translate(0.5,0.5);
         painter->drawRect(sliderRect);
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/ktabbar.cpp libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/ktabbar.cpp
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/ktabbar.cpp	2024-05-16 09:25:54.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/ktabbar.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -303,13 +303,18 @@
 
                     w = pixmap.width() / pixmap.devicePixelRatio();
 
-                    if (option.direction == Qt::RightToLeft)
-                        point.rx() += w;
+//                    if (option.direction == Qt::RightToLeft)
+//                        point.rx() += w;
 
                     if(fm.width(tabText(i)) >= option.rect.width()-option.iconSize.width()-7)
                         p.drawPixmap(option.rect.x()+4,this->style()->visualPos(option.direction, option.rect, point).y(), pixmap);
                     else
-                        p.drawPixmap(this->style()->visualPos(option.direction, option.rect, point), pixmap);
+                    {
+                        if(option.direction == Qt::RightToLeft)
+                            p.drawPixmap(point, pixmap);
+                        else
+                            p.drawPixmap(this->style()->visualPos(option.direction, option.rect, point), pixmap);
+                    }
 
                     if (!tabText(i).isEmpty()){
                         int subH = std::max(option.iconSize.height(),option.fontMetrics.height());
@@ -370,13 +375,26 @@
                 }
                 else
                 {
-                    path.moveTo(tempRect.topLeft() + QPointF(0, d->m_borderRadius));
-                    path.lineTo(tempRect.bottomLeft() - QPointF(0, d->m_borderRadius));
-                    path.quadTo(tempRect.bottomLeft(), tempRect.bottomLeft() + QPointF(d->m_borderRadius, 0));
-                    path.lineTo(tempRect.bottomRight());
-                    path.lineTo(tempRect.topRight());
-                    path.lineTo(tempRect.topLeft() + QPointF(d->m_borderRadius, 0));
-                    path.quadTo(tempRect.topLeft(), tempRect.topLeft() + QPointF(0, d->m_borderRadius));
+                    if(layoutDirection() == Qt::LeftToRight)
+                    {
+                        path.moveTo(tempRect.topLeft() + QPointF(0, d->m_borderRadius));
+                        path.lineTo(tempRect.bottomLeft() - QPointF(0, d->m_borderRadius));
+                        path.quadTo(tempRect.bottomLeft(), tempRect.bottomLeft() + QPointF(d->m_borderRadius, 0));
+                        path.lineTo(tempRect.bottomRight());
+                        path.lineTo(tempRect.topRight());
+                        path.lineTo(tempRect.topLeft() + QPointF(d->m_borderRadius, 0));
+                        path.quadTo(tempRect.topLeft(), tempRect.topLeft() + QPointF(0, d->m_borderRadius));
+                    }
+                    else
+                    {
+                        path.moveTo(tempRect.topLeft());
+                        path.lineTo(tempRect.bottomLeft());
+                        path.lineTo(tempRect.bottomRight() - QPointF(d->m_borderRadius,0));
+                        path.quadTo(tempRect.bottomRight(), tempRect.bottomRight() - QPointF(0,d->m_borderRadius));
+                        path.lineTo(tempRect.topRight() + QPointF(0,d->m_borderRadius));
+                        path.quadTo(tempRect.topRight(), tempRect.topRight() - QPointF(d->m_borderRadius,0));
+                        path.lineTo(tempRect.topLeft());
+                    }
                 }
                 p.drawPath(path);
                 p.restore();
@@ -406,13 +424,22 @@
 
                     w = pixmap.width() / pixmap.devicePixelRatio();
 
-                    if (option.direction == Qt::RightToLeft)
-                        point.rx() += w;
+//                    if (option.direction == Qt::RightToLeft)
+//                        point.rx() += w;
+
+                    p.setBrush(Qt::red);
+                    p.drawRect(option.rect.x()+4,this->style()->visualPos(option.direction, option.rect, point).y(),pixmap.width(),pixmap.height());
+                    p.setBrush(Qt::NoBrush);
 
                     if(fm.width(tabText(i)) >= option.rect.width()-option.iconSize.width()-7)
                         p.drawPixmap(option.rect.x()+4,this->style()->visualPos(option.direction, option.rect, point).y(), pixmap);
                     else
-                        p.drawPixmap(this->style()->visualPos(option.direction, option.rect, point), pixmap);
+                    {
+                        if(option.direction == Qt::RightToLeft)
+                            p.drawPixmap(point, pixmap);
+                        else
+                           p.drawPixmap(this->style()->visualPos(option.direction, option.rect, point), pixmap);
+                    }
 
                     if (option.direction == Qt::RightToLeft)
                         rect.translate(-point.x() - 2, 0);
@@ -477,13 +504,26 @@
                 }
                 else
                 {
-                    path.moveTo(rect.topLeft());
-                    path.lineTo(rect.bottomLeft());
-                    path.lineTo(rect.bottomRight() - QPointF(d->m_borderRadius,0));
-                    path.quadTo(rect.bottomRight(), rect.bottomRight() - QPointF(0, d->m_borderRadius));
-                    path.lineTo(rect.topRight() + QPointF(0, d->m_borderRadius));
-                    path.quadTo(rect.topRight(), rect.topRight() - QPointF(d->m_borderRadius,0));
-                    path.lineTo(rect.topLeft());
+                    if(layoutDirection() == Qt::LeftToRight)
+                    {
+                        path.moveTo(rect.topLeft());
+                        path.lineTo(rect.bottomLeft());
+                        path.lineTo(rect.bottomRight() - QPointF(d->m_borderRadius,0));
+                        path.quadTo(rect.bottomRight(), rect.bottomRight() - QPointF(0, d->m_borderRadius));
+                        path.lineTo(rect.topRight() + QPointF(0, d->m_borderRadius));
+                        path.quadTo(rect.topRight(), rect.topRight() - QPointF(d->m_borderRadius,0));
+                        path.lineTo(rect.topLeft());
+                    }
+                    else
+                    {
+                        path.moveTo(rect.topLeft() + QPointF(0, d->m_borderRadius));
+                        path.lineTo(rect.bottomLeft() - QPointF(0, d->m_borderRadius));
+                        path.quadTo(rect.bottomLeft(), rect.bottomLeft() + QPointF(d->m_borderRadius, 0));
+                        path.lineTo(rect.bottomRight());
+                        path.lineTo(rect.topRight());
+                        path.lineTo(rect.topLeft() + QPointF(d->m_borderRadius, 0));
+                        path.quadTo(rect.topLeft(), rect.topLeft() + QPointF(0, d->m_borderRadius));
+                    }
                 }
                 p.drawPath(path);
                 p.restore();
@@ -514,13 +554,18 @@
 
                     w = pixmap.width() / pixmap.devicePixelRatio();
 
-                    if (option.direction == Qt::RightToLeft)
-                        point.rx() += w;
+//                    if (option.direction == Qt::RightToLeft)
+//                        point.rx() += w;
 
                     if(fm.width(tabText(i)) >= option.rect.width()-option.iconSize.width()-7)
                         p.drawPixmap(option.rect.x()+4,this->style()->visualPos(option.direction, option.rect, point).y(), pixmap);
                     else
-                        p.drawPixmap(this->style()->visualPos(option.direction, option.rect, point), pixmap);
+                    {
+                        if(option.direction == Qt::RightToLeft)
+                            p.drawPixmap(point, pixmap);
+                        else
+                            p.drawPixmap(this->style()->visualPos(option.direction, option.rect, point), pixmap);
+                    }
 
                     if (!tabText(i).isEmpty()){
                         int subH = std::max(option.iconSize.height(),option.fontMetrics.height());
@@ -676,13 +721,18 @@
 
                 w = pixmap.width() / pixmap.devicePixelRatio();
 
-                if (option.direction == Qt::RightToLeft)
-                    point.rx() += w;
+//                if (option.direction == Qt::RightToLeft)
+//                    point.rx() += w;
 
                 if(fm.width(tabText(i)) >= option.rect.width()-option.iconSize.width()-7)
                     p.drawPixmap(option.rect.x()+4,this->style()->visualPos(option.direction, option.rect, point).y(), pixmap);
                 else
-                    p.drawPixmap(this->style()->visualPos(option.direction, option.rect, point), pixmap);
+                {
+                    if(option.direction == Qt::RightToLeft)
+                        p.drawPixmap(point, pixmap);
+                    else
+                        p.drawPixmap(this->style()->visualPos(option.direction, option.rect, point), pixmap);
+                }
 
                 if (!tabText(i).isEmpty()){
                     int subH = std::max(option.iconSize.height(),option.fontMetrics.height());
@@ -841,13 +891,18 @@
 
                 w = pixmap.width() / pixmap.devicePixelRatio();
 
-                if (option.direction == Qt::RightToLeft)
-                    point.rx() += w;
+//                if (option.direction == Qt::RightToLeft)
+//                    point.rx() += w;
 
                 if(fm.width(tabText(i)) >= option.rect.width()-option.iconSize.width()-7)
                      p.drawPixmap(option.rect.x()+4,this->style()->visualPos(option.direction, option.rect, point).y(), pixmap);
                 else
-                    p.drawPixmap(this->style()->visualPos(option.direction, option.rect, point), pixmap);
+                {
+                    if(option.direction == Qt::RightToLeft)
+                        p.drawPixmap(point, pixmap);
+                    else
+                        p.drawPixmap(this->style()->visualPos(option.direction, option.rect, point), pixmap);
+                }
 
                 if (!tabText(i).isEmpty()){
                     int subH = std::max(option.iconSize.height(),option.fontMetrics.height());
@@ -959,6 +1014,10 @@
                     m_animationStarted = true;
                 }
             }
+            if(mouseEvent && mouseEvent->button() == Qt::MouseButton::RightButton)
+            {
+                emit q->rightlicked(mouseEvent->globalPos());
+            }
         }
     }
     return QObject::eventFilter(watched, event);
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/ktabbar.h libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/ktabbar.h
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/ktabbar.h	2024-05-16 09:25:54.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/ktabbar.h	2024-10-29 15:22:42.000000000 +0800
@@ -87,7 +87,13 @@
      * @since 1.2
      */
     void setBackgroundColor(const QColor& color);
-
+Q_SIGNALS:
+    /**
+     * @brief 鼠标右键信号
+     * @param point
+     * @since 2.4
+     */
+    void rightlicked(QPoint point);
 protected:
     QSize sizeHint() const;
     QSize minimumTabSizeHint(int index) const;
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/ktableheaderview.cpp libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/ktableheaderview.cpp
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/ktableheaderview.cpp	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/ktableheaderview.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,247 @@
+/*
+ * libkysdk-qtwidgets's Library
+ *
+ * Copyright (C) 2023, KylinSoft Co., Ltd.
+ *
+ * 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 3 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 General Public License
+ * along with this library.  If not, see <https://www.gnu.org/licenses/>.
+ *
+ * Authors: Zhenyu Wang <wangzhenyu@kylinos.cn>
+ *
+ */
+
+#include "ktableheaderview.h"
+#include "themeController.h"
+#include <QPainter>
+#include <QApplication>
+#include <QCheckBox>
+#include <QMouseEvent>
+#include <QEvent>
+#include <QDebug>
+#include <QMenu>
+#include <QMap>
+#include <QToolButton>
+
+namespace kdk {
+
+class Q_DECL_HIDDEN KTableHeaderViewPrivate : public QObject,public ThemeController
+{
+    Q_OBJECT
+    Q_DECLARE_PUBLIC(KTableHeaderView)
+public:
+    KTableHeaderViewPrivate(KTableHeaderView *PARENT);
+
+    void changeTheme();
+
+private:
+    KTableHeaderView* q_ptr;
+    QStringList m_HeaderList;
+    bool m_bChecked;
+    bool m_bTristate;
+    bool m_bNoChange;
+    bool m_bPressed;
+    QCheckBox m_checkBox;
+    QMap<int,QMenu*> m_map;
+};
+
+
+KTableHeaderView::KTableHeaderView(Qt::Orientation orientation, QWidget *parent)
+    : QHeaderView(orientation, parent)
+    ,d_ptr(new KTableHeaderViewPrivate(this))
+
+{
+    Q_D(KTableHeaderView);
+    //设置Section可点击,若不设置则不能发出sectionClicked信号
+    this->setSectionsClickable(true);
+    connect(this,&KTableHeaderView::clickedHeader,this,[=](int column){
+        if(d->m_map.contains(column))
+        {
+            d->m_map.value(column)->exec(QCursor::pos());
+        }
+    });
+}
+
+void KTableHeaderView::setTitle(QStringList list)
+{
+    Q_D(KTableHeaderView);
+    d->m_HeaderList= list;
+}
+
+void KTableHeaderView::setMenu(QMenu *menu, int column)
+{
+    Q_D(KTableHeaderView);
+    d->m_map.insert(column,menu);
+}
+
+void KTableHeaderView::paintSection(QPainter *painter, const QRect &rect, int logicalIndex) const
+{
+    Q_D(const KTableHeaderView);
+    painter->save();
+    QHeaderView::paintSection(painter, rect, logicalIndex);
+    painter->restore();
+
+    if(logicalIndex == 0)
+    {
+        QStyleOptionButton option;
+
+        option.initFrom(this);
+
+        if (d->m_bTristate && d->m_bNoChange)
+        {
+            option.state |= QStyle::State_NoChange;
+        }
+        else
+            option.state |= d->m_bChecked ? QStyle::State_On : QStyle::State_Off;
+
+        option.iconSize = QSize(16, 16);
+        option.rect = QRect(rect.x() + 8, rect.y() + (rect.height() - 16)/2, 16, 16);
+        style()->drawPrimitive(QStyle::PE_IndicatorCheckBox, &option, painter, &d->m_checkBox);
+
+    }
+    else
+    {
+        if(d->m_map.contains(logicalIndex))
+        {
+            QPixmap pixmap=QIcon::fromTheme("ukui-down-symbolic").pixmap(16,16);
+            if(ThemeController::themeMode() == DarkTheme)
+                pixmap = ThemeController::drawSymbolicColoredPixmap(pixmap);
+            QRect iconRect(rect.right()-24,rect.height()/2-8,16,16);
+            painter->drawPixmap(iconRect,pixmap);
+        }
+    }
+
+    QRect textRect;
+    if(logicalIndex > -1 || logicalIndex < d->m_HeaderList.size()){
+        if(logicalIndex == 0)
+        {
+            textRect = rect.adjusted(32,0,0,0);
+            if(fontMetrics().width(d->m_HeaderList.at(logicalIndex)) > textRect.width())
+            {
+                QString str = fontMetrics().elidedText(d->m_HeaderList.at(logicalIndex),Qt::ElideRight,textRect.width());
+                painter->drawText(textRect,Qt::AlignVCenter,str);
+            }
+            else
+                painter->drawText(textRect,Qt::AlignVCenter,d->m_HeaderList.at(logicalIndex));
+        }
+        else
+        {
+            if(d->m_map.contains(logicalIndex))
+                textRect = rect.adjusted(6,0,-24,0);
+            else
+                textRect = rect.adjusted(6,0,-6,0);
+            if(fontMetrics().width(d->m_HeaderList.at(logicalIndex)) > textRect.width())
+            {
+                QString str = fontMetrics().elidedText(d->m_HeaderList.at(logicalIndex),Qt::ElideRight,textRect.width());
+                painter->drawText(textRect,Qt::AlignVCenter,str);
+            }
+            else
+                painter->drawText(textRect,Qt::AlignVCenter,d->m_HeaderList.at(logicalIndex));
+        }
+    }
+}
+
+void KTableHeaderView::mousePressEvent(QMouseEvent *e)
+{
+    Q_D(KTableHeaderView);
+    int nColumn = logicalIndexAt(e->pos());
+
+    if ((e->buttons() & Qt::LeftButton) )
+    {
+        if(nColumn == 0)
+            d->m_bPressed = true;
+        else
+        {
+            //每个标题栏的rect
+            QRect tabRect(sectionPosition(nColumn),0,sectionSize(nColumn),viewport()->rect().height());
+            //是否在图标区域被点击
+            QRect sectionRect(tabRect.right()-24,tabRect.y() + (tabRect.height() - 16)/2,16,16);
+            if(sectionRect.contains(e->pos()) && d->m_map.contains(nColumn))
+                emit clickedHeader(nColumn);
+            QHeaderView::mousePressEvent(e);
+        }
+    }
+    else
+    {
+        QHeaderView::mousePressEvent(e);
+    }
+    viewport()->update();
+}
+
+void KTableHeaderView::mouseReleaseEvent(QMouseEvent *e)
+{
+    Q_D(KTableHeaderView);
+    if (d->m_bPressed)
+    {
+        if (d->m_bTristate && d->m_bNoChange)
+        {
+            d->m_bChecked = true;
+            d->m_bNoChange = false;
+        }
+        else
+        {
+            d->m_bChecked = !d->m_bChecked;
+        }
+    }
+    else
+    {
+        QHeaderView::mouseReleaseEvent(e);
+    }
+    this->viewport()->update();
+    d->m_bPressed = false;
+    if(d->m_bChecked)
+        emit checkStateChange(Qt::Checked);
+    else
+        emit checkStateChange(Qt::Unchecked);
+}
+
+bool KTableHeaderView::event(QEvent *e)
+{
+    this->viewport()->update();
+    return QHeaderView::event(e);
+}
+
+void KTableHeaderView::checkStateChangeSlot(int iState)
+{
+    Q_D(KTableHeaderView);
+    if (iState == Qt::PartiallyChecked) {
+        d->m_bTristate = true;
+        d->m_bNoChange = true;
+    } else {
+        d->m_bNoChange = false;
+    }
+
+    d->m_bChecked = (iState != Qt::Unchecked);
+    this->viewport()->update();
+}
+
+KTableHeaderViewPrivate::KTableHeaderViewPrivate(KTableHeaderView *parent)
+    :q_ptr(parent)
+    ,m_bTristate(false)
+    ,m_bNoChange(false)
+    ,m_bChecked(false)
+    ,m_bPressed(false)
+{
+
+}
+
+void KTableHeaderViewPrivate::changeTheme()
+{
+    Q_Q(KTableHeaderView);
+    initThemeStyle();
+}
+
+}
+
+
+#include "ktableheaderview.moc"
+#include "moc_ktableheaderview.cpp"
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/ktableheaderview.h libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/ktableheaderview.h
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/ktableheaderview.h	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/ktableheaderview.h	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,84 @@
+/*
+ * libkysdk-qtwidgets's Library
+ *
+ * Copyright (C) 2023, KylinSoft Co., Ltd.
+ *
+ * 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 3 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 General Public License
+ * along with this library.  If not, see <https://www.gnu.org/licenses/>.
+ *
+ * Authors: Zhenyu Wang <wangzhenyu@kylinos.cn>
+ *
+ */
+
+#ifndef KTABLEHEADVIEW_H
+#define KTABLEHEADVIEW_H
+
+
+#include <QObject>
+#include <QHeaderView>
+#include <QMap>
+#include <QCheckBox>
+
+namespace kdk {
+
+/**
+ * @brief 继承自QHeaderView,设置view视图标题
+ * @since 2.5
+ */
+class KTableHeaderViewPrivate;
+
+class KTableHeaderView : public QHeaderView
+{
+    Q_OBJECT
+public:
+    /**
+     * @brief KTableHeaderView 构造函数
+     * @param orientation 方向
+     * @param parent 父类对象
+     */
+    KTableHeaderView(Qt::Orientation orientation, QWidget *parent = nullptr);
+
+    /**
+     * @brief 设置水平标题
+     * @param list
+     */
+    void setTitle(QStringList list);
+
+    /**
+     * @brief 设置menu
+     * @param menu
+     * @param column
+     */
+    void setMenu(QMenu *menu,int column);
+
+protected:
+    void paintSection(QPainter *painter, const QRect &rect, int logicalIndex) const;
+    void mousePressEvent(QMouseEvent *e);
+    void mouseReleaseEvent(QMouseEvent *e);
+    bool event(QEvent *e);
+
+Q_SIGNALS:
+    void checkStateChange(int state);
+    void clickedHeader(int column);
+
+public slots:
+    void checkStateChangeSlot(int iState);
+
+private:
+    Q_DECLARE_PRIVATE(KTableHeaderView)
+    KTableHeaderViewPrivate *const d_ptr;
+
+};
+
+}
+#endif // KTABLEHEADVIEW_H
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/ktablemodel.cpp libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/ktablemodel.cpp
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/ktablemodel.cpp	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/ktablemodel.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,82 @@
+/*
+ * libkysdk-qtwidgets's Library
+ *
+ * Copyright (C) 2023, KylinSoft Co., Ltd.
+ *
+ * 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 3 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 General Public License
+ * along with this library.  If not, see <https://www.gnu.org/licenses/>.
+ *
+ * Authors: Zhenyu Wang <wangzhenyu@kylinos.cn>
+ *
+ */
+
+#include "ktablemodel.h"
+#include <QDebug>
+#include <QStyleOptionButton>
+#include <QCheckBox>
+#include <QApplication>
+#include "themeController.h"
+
+namespace kdk {
+
+class Q_DECL_HIDDEN KTableModelPrivate : public QObject,public ThemeController
+{
+    Q_OBJECT
+    Q_DECLARE_PUBLIC(KTableModel)
+public:
+    KTableModelPrivate(KTableModel *parent);
+
+    void changeTheme();
+
+private:
+    KTableModel *q_ptr;
+
+};
+
+KTableModel::KTableModel(QObject *parent)
+    :QStandardItemModel(parent)
+    ,d_ptr(new KTableModelPrivate(this))
+{
+
+}
+
+QVariant KTableModel::headerData(int section, Qt::Orientation orientation, int role) const
+{
+    (void)section;
+
+    if(orientation == Qt::Horizontal && role == Qt::TextAlignmentRole){
+        return QVariant(Qt::AlignLeft | Qt::AlignVCenter);
+    }
+
+    return QVariant();
+}
+
+KTableModelPrivate::KTableModelPrivate(KTableModel *parent)
+    :q_ptr(parent)
+{
+
+}
+
+void KTableModelPrivate::changeTheme()
+{
+    Q_Q(KTableModel);
+    initThemeStyle();
+}
+
+}
+
+#include "ktablemodel.moc"
+#include "moc_ktablemodel.cpp"
+
+
+
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/ktablemodel.h libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/ktablemodel.h
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/ktablemodel.h	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/ktablemodel.h	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,49 @@
+/*
+ * libkysdk-qtwidgets's Library
+ *
+ * Copyright (C) 2023, KylinSoft Co., Ltd.
+ *
+ * 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 3 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 General Public License
+ * along with this library.  If not, see <https://www.gnu.org/licenses/>.
+ *
+ * Authors: Zhenyu Wang <wangzhenyu@kylinos.cn>
+ *
+ */
+
+#ifndef KTABLEMODEL_H
+#define KTABLEMODEL_H
+
+#include <QStandardItemModel>
+namespace kdk {
+
+/**
+ * @brief 重置标题
+ * @since 2.5
+ */
+class KTableModelPrivate;
+
+class KTableModel : public QStandardItemModel
+{
+    Q_OBJECT
+public:
+    explicit KTableModel(QObject *parent = nullptr);
+
+protected:
+    QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
+
+private:
+    Q_DECLARE_PRIVATE(KTableModel)
+    KTableModelPrivate *const d_ptr;
+};
+}
+#endif // KTABLEMODEL_H
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/ktableview.cpp libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/ktableview.cpp
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/ktableview.cpp	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/ktableview.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,355 @@
+/*
+ * libkysdk-qtwidgets's Library
+ *
+ * Copyright (C) 2023, KylinSoft Co., Ltd.
+ *
+ * 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 3 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 General Public License
+ * along with this library.  If not, see <https://www.gnu.org/licenses/>.
+ *
+ * Authors: Zhenyu Wang <wangzhenyu@kylinos.cn>
+ *
+ */
+
+#include "ktableview.h"
+#include <QStyledItemDelegate>
+#include <QPainter>
+#include <QHeaderView>
+#include <QCheckBox>
+#include <QApplication>
+#include <QDebug>
+#include <QMouseEvent>
+#include <QToolButton>
+#include <QItemSelectionModel>
+#include "ktableheaderview.h"
+#include "themeController.h"
+
+namespace kdk {
+
+class Q_DECL_HIDDEN TableDelegate :public QStyledItemDelegate
+{
+    Q_OBJECT
+public:
+    TableDelegate(QObject* parent);
+
+    void updateState(Qt::CheckState state,const QModelIndex &index);
+
+    QList<int> selectList();
+
+protected:
+    void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override;
+
+    virtual bool editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index) override;
+
+Q_SIGNALS:
+    void checkChange(int state);
+
+public slots:
+    void checkChangeSlot(int state);
+    void onHoverIndexChanged(QModelIndex index);
+//    void selectChange(int row);
+
+private:
+    QList<int> m_checkList;
+    int m_hoverRow;
+};
+
+class Q_DECL_HIDDEN KTableViewPrivate : public QObject,public ThemeController
+{
+    Q_OBJECT
+    Q_DECLARE_PUBLIC(KTableView)
+public:
+    KTableViewPrivate(KTableView *parent);
+    virtual ~KTableViewPrivate();
+
+    void changeTheme();
+
+
+private:
+    KTableView* q_ptr;
+    KTableHeaderView* m_pHeaderView;
+    TableDelegate* m_pDelegate;
+};
+
+KTableView::KTableView(QWidget *parent)
+    :QTableView(parent)
+    ,d_ptr(new KTableViewPrivate(this))
+{
+    Q_D(KTableView);
+    setShowGrid(false);
+    verticalHeader()->setVisible(false);
+    setEditTriggers (QAbstractItemView::NoEditTriggers);
+    setSelectionBehavior(QAbstractItemView::SelectRows);
+    setMouseTracking(true);
+    installEventFilter(this);
+
+    d->m_pHeaderView = new KTableHeaderView(Qt::Horizontal,this);
+    d->m_pHeaderView->installEventFilter(this);
+
+    d->m_pDelegate = new TableDelegate(this);
+    setItemDelegate(d->m_pDelegate);
+
+    connect(d->m_pDelegate,&TableDelegate::checkChange,d->m_pHeaderView,[=](int state){
+        d->m_pHeaderView->checkStateChangeSlot(state);
+    });
+    connect(d->m_pHeaderView,&KTableHeaderView::checkStateChange,d->m_pDelegate,[=](int state){
+        d->m_pDelegate->checkChangeSlot(state);
+        QItemSelectionModel *SelectionModel = selectionModel();
+        if (SelectionModel)
+        {
+            SelectionModel->clearSelection();
+        }
+        emit hoverIndexChanged(QModelIndex());
+    });
+
+    connect(this,SIGNAL(hoverIndexChanged(QModelIndex)),d->m_pDelegate,SLOT(onHoverIndexChanged(QModelIndex)));
+    connect(d->m_gsetting,&QGSettings::changed,this,[=]{
+        d->changeTheme();
+    });
+}
+
+void KTableView::setHorizontalTitle(QStringList list)
+{
+    Q_D(KTableView);
+    d->m_pHeaderView->setTitle(list);
+    setHorizontalHeader(d->m_pHeaderView);
+}
+
+KTableHeaderView *KTableView::headerView()
+{
+    Q_D(KTableView);
+    if(d->m_pHeaderView)
+        return d->m_pHeaderView;
+}
+
+QList<int> KTableView::selectList()
+{
+    Q_D(KTableView);
+    return d->m_pDelegate->selectList();
+}
+
+void KTableView::mouseMoveEvent(QMouseEvent *event)
+{
+    QModelIndex index = indexAt(event->pos());
+    emit hoverIndexChanged(index);
+    QTableView::mouseMoveEvent(event);
+    this->viewport()->update();
+}
+
+bool KTableView::eventFilter(QObject *object, QEvent *event)
+{
+    Q_D(KTableView);
+    if(object == this)
+    {
+        switch (event->type()) {
+        case QEvent::Leave:
+            emit hoverIndexChanged(QModelIndex());
+            break;
+        default:
+            break;
+        }
+    }
+    if(object == d->m_pHeaderView)
+    {
+        switch (event->type()) {
+        case QEvent::Enter:
+            emit hoverIndexChanged(QModelIndex());
+            break;
+        default:
+            break;
+        }
+    }
+    this->viewport()->update();
+    return QTableView::eventFilter(object,event);
+}
+
+KTableViewPrivate::KTableViewPrivate(KTableView *parent)
+    :q_ptr(parent)
+{
+
+}
+
+KTableViewPrivate::~KTableViewPrivate()
+{
+
+}
+
+void KTableViewPrivate::changeTheme()
+{
+    initThemeStyle();
+}
+
+TableDelegate::TableDelegate(QObject *parent)
+    :QStyledItemDelegate(parent)
+{
+    m_hoverRow = -1;
+}
+
+void TableDelegate::updateState(Qt::CheckState state, const QModelIndex &index)
+{
+    if(state == Qt::Checked)
+    {
+        m_checkList.append(index.row());
+    }
+    else if(state == Qt::Unchecked)
+    {
+
+        m_checkList.removeOne(index.row());
+    }
+    QAbstractItemView *view = qobject_cast<QAbstractItemView*>(parent());
+    int count = view->model()->rowCount();
+
+    if(m_checkList.count() == 0)
+        emit checkChange(Qt::Unchecked);
+    else if(m_checkList.count() == count)
+        emit checkChange(Qt::Checked);
+    else
+        emit checkChange(Qt::PartiallyChecked);
+}
+
+void TableDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
+{
+    QPalette pale;
+    QColor bkgColor;
+    QColor hoverColor;
+
+    if(ThemeController::themeMode() == LightTheme)
+    {
+        if (index.row() % 2 == 0)
+            bkgColor = QColor(245,245,245);
+        else
+            bkgColor = QColor(255,255,255);
+        hoverColor = QColor(0,0,0);
+        hoverColor.setAlphaF(0.05);
+    }
+    else
+    {
+        if (index.row() % 2 == 0)
+            bkgColor = QColor(38,38,38);
+        else
+            bkgColor = QColor(18,18,18);
+        hoverColor = QColor(255,255,255);
+        hoverColor.setAlphaF(0.10);
+    }
+    if(index.row() == m_hoverRow && !option.state.testFlag(QStyle::State_Selected))
+    {
+        painter->fillRect(option.rect, hoverColor);
+    }
+    else
+    {
+        if(option.state.testFlag(QStyle::State_Selected))
+            painter->fillRect(option.rect,pale.highlight().color());
+        else
+        {
+            painter->fillRect(option.rect,bkgColor);
+        }
+        painter->setPen(Qt::NoPen);
+        painter->drawRect(option.rect);
+    }
+
+    painter->setPen(pale.windowText().color());
+    if(index.column() == 0)
+    {
+        QRect rect = option.rect;
+        // 绘制复选框
+        QStyleOptionButton checkBoxStyle;
+        checkBoxStyle.rect = QRect(rect.x() + 8, rect.y() + (rect.height() - 16)/2, 16, 16);
+
+        Qt::CheckState checkState = static_cast<Qt::CheckState>(index.data(Qt::CheckStateRole).toInt());
+        checkBoxStyle.state = (checkState == Qt::Checked) ? QStyle::State_On : QStyle::State_Off;
+        checkBoxStyle.state |= QStyle::State_Enabled;
+
+        QApplication::style()->drawPrimitive(QStyle::PE_IndicatorViewItemCheck, &checkBoxStyle, painter, option.widget);
+
+        painter->drawText(option.rect.adjusted(checkBoxStyle.rect.right()+10,0,0,0), index.data(Qt::DisplayRole).toString());
+    }
+    else
+    {
+        painter->drawText(option.rect, index.data(Qt::DisplayRole).toString());
+    }
+
+}
+
+bool TableDelegate::editorEvent(QEvent *event, QAbstractItemModel *model, const QStyleOptionViewItem &option, const QModelIndex &index)
+{
+    if((event->type() == QEvent::MouseButtonRelease) && (index.column() == 0))
+    {
+        QMouseEvent *mouse_event = static_cast<QMouseEvent*>(event);
+       if(mouse_event->button() == Qt::LeftButton)
+        {
+            QRect r(option.rect.left()+8,option.rect.y() + (option.rect.height() - 16)/2,16,16);
+            bool flag = r.contains(mouse_event->pos());
+            if(flag)
+            {
+                //根据当前单元格的选中状态来在 选中/未选中 之间切换
+                QVariant value = index.data(Qt::CheckStateRole);
+                Qt::CheckState state = (static_cast<Qt::CheckState>(value.toInt()) == Qt::Checked
+                                        ? Qt::Unchecked : Qt::Checked);
+
+                //设置当前单元格的选中状态
+                bool checkState=model->setData(index,state, Qt::CheckStateRole);
+                updateState(state,index);
+                return checkState;
+            }
+        }
+        return false;
+    }
+    else
+        return QStyledItemDelegate::editorEvent(event,model,option,index);
+}
+
+QList<int> TableDelegate::selectList()
+{
+    return m_checkList;
+}
+
+void TableDelegate::checkChangeSlot(int state)
+{
+    m_checkList.clear();
+    QAbstractItemView *view = qobject_cast<QAbstractItemView*>(parent());
+    int count = view->model()->rowCount();
+    Qt::CheckState checkState;
+
+    for(int i=0 ; i <count ;i++ )
+    {
+        if(state == 0)
+        {
+            m_checkList.append(view->model()->index(i,0).row());
+            checkState = Qt::Unchecked;
+        }
+        else
+        {
+            m_checkList.removeOne(view->model()->index(i,0).row());
+            checkState = Qt::Checked;
+        }
+        //设置当前单元格的选中状态
+        view->model()->setData(view->model()->index(i,0),checkState, Qt::CheckStateRole);
+        updateState(checkState,view->model()->index(i,0));
+    }
+}
+
+void TableDelegate::onHoverIndexChanged(QModelIndex index)
+{
+    if(index.isValid())
+    {
+        m_hoverRow = index.row();
+    }
+    else
+    {
+        m_hoverRow = -1;
+    }
+}
+
+}
+
+#include "ktableview.moc"
+#include "moc_ktableview.cpp"
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/ktableview.h libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/ktableview.h
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/ktableview.h	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/ktableview.h	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,76 @@
+/*
+ * libkysdk-qtwidgets's Library
+ *
+ * Copyright (C) 2023, KylinSoft Co., Ltd.
+ *
+ * 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 3 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 General Public License
+ * along with this library.  If not, see <https://www.gnu.org/licenses/>.
+ *
+ * Authors: Zhenyu Wang <wangzhenyu@kylinos.cn>
+ *
+ */
+
+#ifndef KTABLEVIEW_H
+#define KTABLEVIEW_H
+
+
+#include <QTableView>
+#include "ktableheaderview.h"
+
+namespace kdk {
+
+/**
+ * @brief 继承qtbaleview
+ * @since 2.5
+ */
+class KTableViewPrivate;
+
+class KTableView :public QTableView
+{
+    Q_OBJECT
+public:
+    KTableView(QWidget *parent = nullptr);
+
+    /**
+     * @brief 设置水平标题
+     * @param list
+     */
+    void setHorizontalTitle(QStringList list);
+
+    /**
+     * @brief 返回水平标题栏
+     * @return
+     */
+    KTableHeaderView* headerView();
+
+    /**
+     * @brief 返回所有选中item的行索引
+     * @return
+     */
+    QList<int> selectList();
+
+Q_SIGNALS:
+    void hoverIndexChanged(QModelIndex index);
+
+protected:
+    void mouseMoveEvent(QMouseEvent *event);
+    bool eventFilter(QObject *object, QEvent *event);
+
+private:
+    Q_DECLARE_PRIVATE(KTableView)
+    KTableViewPrivate *const d_ptr;
+
+};
+}
+#endif // KTABLEVIEW_H
+
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/ktag.cpp libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/ktag.cpp
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/ktag.cpp	2024-05-16 09:25:54.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/ktag.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -41,13 +41,17 @@
 public:
     KTagPrivate(KTag*parent);
     void changeTheme();
+    void updateDeleteBtnColor();
 
 private:
     KTag* q_ptr;
     QString m_text;
-    bool m_isClosable;
     KToolButton* m_pDeleteBtn;
     TagStyle m_style;
+    QColor m_backgroundColor;
+    bool m_isClosable;
+    bool m_isBackgroundFlag;
+    bool m_isTranslucent;
 };
 
 KTag::KTag(QWidget *parent)
@@ -68,6 +72,7 @@
     d->m_isClosable = flag;
     if(flag)
         setMinimumWidth(88);
+    d->updateDeleteBtnColor();
     update();
 }
 
@@ -94,9 +99,32 @@
 TagStyle KTag::tagStyle()
 {
     Q_D(KTag);
+    d->updateDeleteBtnColor();
     return d->m_style;
 }
 
+void KTag::setBackgroundColor(QColor color)
+{
+    Q_D(KTag);
+    d->m_isBackgroundFlag = true;
+    d->m_backgroundColor = color;
+    d->updateDeleteBtnColor();
+}
+
+void KTag::setTranslucent(bool flag)
+{
+    Q_D(KTag);
+    d->m_isTranslucent = flag;
+    if(flag)
+        d->updateDeleteBtnColor();
+}
+
+bool KTag::translucent()
+{
+    Q_D(KTag);
+    return d->m_isTranslucent;
+}
+
 QString KTag::text()
 {
     Q_D(KTag);
@@ -106,6 +134,119 @@
 void KTag::paintEvent(QPaintEvent *event)
 {
     Q_D(KTag);
+    QStyleOptionButton option;
+    initStyleOption(&option);
+    QColor bkgColor;
+    QColor highColor = palette().highlight().color();
+    QColor iconColor;
+    QColor fontColor;
+    QRect iconRect;
+    QRect textRect;
+    if(!option.state.testFlag(QStyle::State_Enabled))
+    {
+        bkgColor = palette().color(QPalette::Disabled,QPalette::Button);
+        iconColor = palette().color(QPalette::Disabled,QPalette::HighlightedText);
+        fontColor = palette().color(QPalette::Disabled,QPalette::HighlightedText);
+    }
+    else
+    {
+        if(d->m_isTranslucent || d->m_isBackgroundFlag)
+        {
+            iconColor = palette().highlight().color();
+            fontColor = palette().highlight().color();
+        }
+        else
+        {
+            iconColor = Qt::white;
+            fontColor = Qt::white;
+        }
+
+        if(!d->m_isBackgroundFlag)
+        {
+            bkgColor = highColor;
+            if(option.state.testFlag(QStyle::State_MouseOver))
+            {
+                if(option.state.testFlag(QStyle::State_Sunken))
+                {
+                    if(d->m_isTranslucent)
+                        bkgColor.setAlphaF(0.45);
+                    else
+                        bkgColor = ThemeController::mixColor(bkgColor,option.palette.brightText().color(),0.2);
+                }
+                else
+                {
+                    if(d->m_isTranslucent)
+                        bkgColor.setAlphaF(0.3);
+                    else
+                        bkgColor = ThemeController::mixColor(bkgColor,option.palette.brightText().color(),0.05);
+                }
+            }
+            else
+            {
+                if(d->m_isTranslucent)
+                    bkgColor.setAlphaF(0.15);
+            }
+        }
+        else
+        {
+            bkgColor = d->m_backgroundColor;
+        }
+    }
+    if(closable())
+    {
+        QRect rect = option.rect.adjusted(8,0,-(d->m_pDeleteBtn->width()),0);
+        int drawLength = option.iconSize.width() + 4 + fontMetrics().width((d->m_text));
+
+        if(rect.width() > drawLength )
+        {
+            iconRect = QRect(rect.center().x() - drawLength/2,
+                             rect.center().y() - option.iconSize.height()/2,
+                             option.iconSize.width(),
+                             option.iconSize.height());
+            textRect = QRect(iconRect.right() + 4,
+                             rect.center().y() - fontMetrics().height()/2,
+                             fontMetrics().width(d->m_text),
+                             fontMetrics().height());
+        }
+        else
+        {
+            iconRect = QRect(rect.x(),
+                             rect.center().y() - option.iconSize.height()/2,
+                             option.iconSize.width(),
+                             option.iconSize.height());
+            textRect = QRect(iconRect.right() + 4,
+                             rect.center().y() - fontMetrics().height()/2,
+                             rect.width() - 4 - iconRect.width(),
+                             fontMetrics().height());
+        }
+    }
+    else
+    {
+        QRect rect = option.rect.adjusted(8,0,0,0);
+        int drawLength = option.iconSize.width() + 4 + fontMetrics().width((d->m_text));
+        if(rect.width() > drawLength )
+        {
+            iconRect = QRect(rect.center().x() - drawLength/2,
+                             rect.center().y() - option.iconSize.height()/2,
+                             option.iconSize.width(),
+                             option.iconSize.height());
+            textRect = QRect(iconRect.right() + 4,
+                             rect.center().y() - fontMetrics().height()/2,
+                             fontMetrics().width(d->m_text),
+                             fontMetrics().height());
+        }
+        else
+        {
+            iconRect = QRect(rect.x(),
+                             rect.center().y() - option.iconSize.height()/2,
+                             option.iconSize.width(),
+                             option.iconSize.height());
+            textRect = QRect(iconRect.right() + 4,
+                             rect.center().y() - fontMetrics().height()/2,
+                             rect.width() - 4 - iconRect.width(),
+                             fontMetrics().height());
+        }
+    }
     QPainter painter(this);
     painter.setRenderHint(QPainter::Antialiasing);
     if(ThemeController::widgetTheme() == ClassicTheme)
@@ -187,6 +328,27 @@
             painter.drawText(rect,Qt::AlignCenter,d->m_text);
         }
         break;
+    case IconTag:
+    {
+        QPixmap pixmap = option.icon.pixmap(option.iconSize);
+        painter.setPen(Qt::NoPen);
+        painter.setBrush(bkgColor);
+        painter.drawRoundedRect(this->rect(),6,6);
+        painter.drawPixmap(iconRect,ThemeController::drawColoredPixmap(pixmap,iconColor));
+        painter.setPen(fontColor);
+        if(fontMetrics().width(d->m_text) > textRect.width())
+        {
+            QString str= fontMetrics().elidedText(d->m_text,Qt::ElideRight,textRect.width());
+            painter.drawText(textRect,str);
+            setToolTip(d->m_text);
+        }
+        else
+        {
+            setToolTip("");
+            painter.drawText(textRect,d->m_text);
+        }
+        break;
+    }
     default:
         break;
 
@@ -204,7 +366,9 @@
     :q_ptr(parent),
       m_isClosable(false),
       m_text(""),
-      m_style(HighlightTag)
+      m_style(HighlightTag),
+      m_isBackgroundFlag(false),
+      m_isTranslucent(false)
 {
     Q_Q(KTag);
     m_pDeleteBtn = new KToolButton(q);
@@ -231,6 +395,12 @@
     Q_Q(KTag);
 
     initThemeStyle();
+    updateDeleteBtnColor();
+}
+
+void KTagPrivate::updateDeleteBtnColor()
+{
+    Q_Q(KTag);
     QIcon icon = QIcon::fromTheme("application-exit-symbolic");
     QPalette palette = q->palette();
     QSize size(m_pDeleteBtn->iconSize());
@@ -248,6 +418,12 @@
     case GrayTag:
         m_pDeleteBtn->setIcon(drawColoredPixmap(icon.pixmap(size),palette.color(QPalette::Text)));
         break;
+    case IconTag:
+        if(m_isTranslucent || m_isBackgroundFlag)
+            m_pDeleteBtn->setIconColor(true,q->palette().highlight().color());//m_backgroundColor
+        else
+            m_pDeleteBtn->setIconColor(true,Qt::white);
+        break;
     default:
         break;
     }
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/ktag.h libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/ktag.h
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/ktag.h	2024-05-16 09:25:54.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/ktag.h	2024-10-29 15:22:42.000000000 +0800
@@ -41,7 +41,8 @@
     HighlightTag,
     BoderTag,
     BaseBoderTag,
-    GrayTag
+    GrayTag,
+    IconTag
 };
 
 /**
@@ -82,6 +83,28 @@
      */
     TagStyle tagStyle();
 
+
+    /**
+     * @brief 设置背景颜色
+     * @param flag
+     * @since 2.4
+     */
+    void setBackgroundColor(QColor color);
+
+    /**
+     * @brief 设置半透明
+     * @param flag
+     * @since 2.4
+     */
+    void setTranslucent(bool flag);
+
+    /**
+     * @brief 获取是否启用半透明
+     * @return bool
+     * @since 2.4
+     */
+    bool translucent();
+
 protected:
     void paintEvent(QPaintEvent* event);
     QSize sizeHint() const override;
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/ktextedit.cpp libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/ktextedit.cpp
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/ktextedit.cpp	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/ktextedit.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,159 @@
+/*
+ * libkysdk-qtwidgets's Library
+ *
+ * Copyright (C) 2023, KylinSoft Co., Ltd.
+ *
+ * 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 3 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 General Public License
+ * along with this library.  If not, see <https://www.gnu.org/licenses/>.
+ *
+ * Authors: Zhenyu Wang <wangzhenyu@kylinos.cn>
+ *
+ */
+
+#include "ktextedit.h"
+#include "themeController.h"
+#include "ktag.h"
+#include <QPainter>
+#include <QTextCursor>
+#include <QPaintEvent>
+#include <QProxyStyle>
+#include <QTimer>
+#include <QPainterPath>
+#include <QHBoxLayout>
+#include <QDebug>
+
+namespace kdk {
+
+class KTextEditPrivate :public QObject, public ThemeController
+{
+    Q_OBJECT
+    Q_DECLARE_PUBLIC(KTextEdit)
+public:
+    KTextEditPrivate(KTextEdit*parent);
+
+protected:
+    void changeTheme();
+private:
+    KTextEdit *q_ptr;
+    KLabel * m_pLabel;
+    QTextBlockFormat m_blockFormat;
+    QTextCursor *m_pTextCursor;
+
+};
+
+KTextEdit::KTextEdit(QWidget *parent):
+    QTextEdit(parent),
+    d_ptr(new KTextEditPrivate(this))
+{
+    Q_D(KTextEdit);
+    viewport()->setContentsMargins(0,0,0,0);
+    setFrameShape(QFrame::NoFrame);
+}
+
+void KTextEdit::setLabelVisible(bool flag)
+{
+    Q_D(KTextEdit);
+    d->m_pLabel->setVisible(flag);
+}
+
+void KTextEdit::setPixmap(const QPixmap &pixmap)
+{
+    Q_D(KTextEdit);
+    d->m_pLabel->setPixmap(pixmap);
+}
+
+const QPixmap *KTextEdit::pixmap() const
+{
+    Q_D(const KTextEdit);
+    return d->m_pLabel->pixmap();
+}
+
+void KTextEdit::setLabelText(const QString &text)
+{
+    Q_D(KTextEdit);
+    d->m_pLabel->setText(text);
+}
+
+void KTextEdit::setReadOnly(bool ro)
+{
+    Q_D(KTextEdit);
+    QTextEdit::setReadOnly(ro);
+    if(isReadOnly())
+    {
+        QPalette pale = palette();
+        pale.setColor(QPalette::Base,pale.highlight().color());
+        pale.setColor(QPalette::Text,Qt::white);
+        setPalette(pale);
+        d->m_pLabel->setBackgroundColor(true,Qt::white);
+    }
+    else
+    {
+        QPalette pale;
+        setPalette(pale);
+        d->m_pLabel->setBackgroundColor(false);
+    }
+}
+
+void KTextEdit::paintEvent(QPaintEvent *event)
+{
+    Q_D(KTextEdit);
+    QTextEdit::paintEvent(event);
+
+    if(d->m_pLabel->isVisible())
+    {
+        d->m_blockFormat.setTextIndent(d->m_pLabel->width() + 4);
+        d->m_blockFormat.setLineHeight(3, QTextBlockFormat::LineDistanceHeight);
+        d->m_pTextCursor->setBlockFormat(d->m_blockFormat);
+    }
+    else
+    {
+        d->m_blockFormat.setTextIndent(0);
+        d->m_blockFormat.setLineHeight(3, QTextBlockFormat::LineDistanceHeight);
+        d->m_pTextCursor->setBlockFormat(d->m_blockFormat);
+    }
+}
+
+KTextEditPrivate::KTextEditPrivate(KTextEdit *parent)
+    :q_ptr(parent)
+{
+    Q_Q(KTextEdit);
+    m_pLabel = new KLabel(q);
+    m_pLabel->setAlignment(Qt::AlignCenter);
+    m_pLabel->setFixedHeight(30);
+    m_pLabel->setLabelType(KLabelType::DataType);
+    //调整位置使其不遮盖边框
+    m_pLabel->move(2,2);
+    m_pLabel->setVisible(false);
+    m_pLabel->setDataHightColor(true);
+    m_pLabel->setFixedWidth(70);
+    m_pTextCursor = new QTextCursor(q->textCursor());
+    connect(m_gsetting,&QGSettings::changed,q,[=]{
+        changeTheme();
+        m_pLabel->setFixedWidth(q->fontMetrics().width(m_pLabel->text()) +m_pLabel->pixmap()->width() + 12);
+//        if(q->fontMetrics().height() > 30)
+//        m_pLabel->setFixedHeight(q->fontMetrics().height() + 4);
+    });
+
+}
+
+void KTextEditPrivate::changeTheme()
+{
+    Q_Q(KTextEdit);
+    initThemeStyle();
+}
+
+}
+
+
+#include "ktextedit.moc"
+#include "moc_ktextedit.cpp"
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/ktextedit.h libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/ktextedit.h
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/ktextedit.h	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/ktextedit.h	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,90 @@
+/*
+ * libkysdk-qtwidgets's Library
+ *
+ * Copyright (C) 2023, KylinSoft Co., Ltd.
+ *
+ * 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 3 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 General Public License
+ * along with this library.  If not, see <https://www.gnu.org/licenses/>.
+ *
+ * Authors: Zhenyu Wang <wangzhenyu@kylinos.cn>
+ *
+ */
+
+#ifndef KTEXTEDIT_H
+#define KTEXTEDIT_H
+
+#include <QTextEdit>
+#include "ktag.h"
+#include <QLineEdit>
+#include "klabel.h"
+#include "gui_g.h"
+
+namespace kdk {
+
+/**
+ * @defgroup @DialogBoxModule
+ */
+
+class KTextEditPrivate;
+
+/**
+ * @brief 继承QTextEdit
+ * @since 2.4
+ */
+class GUI_EXPORT KTextEdit :public QTextEdit
+{
+    Q_OBJECT
+public:
+    KTextEdit(QWidget *parent = nullptr);
+
+    /**
+     * @brief 设置label是否可见
+     * @param flag
+     */
+    void setLabelVisible(bool flag);
+
+    /**
+     * @brief 设置图标
+     * @param pixmap
+     */
+    void setPixmap(const QPixmap &pixmap);
+
+    /**
+     * @brief 获取图标
+     * @return
+     */
+    const QPixmap *pixmap() const;
+
+    /**
+     * @brief 设置label文本
+     * @param text
+     */
+    void setLabelText(const QString &text);
+
+    /**
+     * @brief 设置是否可编辑状态
+     * @param ro
+     */
+    void setReadOnly(bool ro);
+
+protected:
+    void paintEvent(QPaintEvent* event);
+
+private:
+    Q_DECLARE_PRIVATE(KTextEdit)
+    KTextEditPrivate* const d_ptr;
+
+};
+
+}
+#endif // KTEXTEDIT_H
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/ktexteditor.cpp libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/ktexteditor.cpp
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/ktexteditor.cpp	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/ktexteditor.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,150 @@
+#include "ktexteditor.h"
+#include "themeController.h"
+
+#include <QScrollArea>
+#include <QBoxLayout>
+#include <QTextEdit>
+#include <QPainter>
+#include <QScrollBar>
+#include <QEvent>
+#include <QDebug>
+
+namespace kdk {
+
+class KTextEditorPrivate : public QObject, public ThemeController
+{
+    Q_OBJECT
+    Q_DECLARE_PUBLIC(KTextEditor)
+public:
+    KTextEditorPrivate(KTextEditor* parent );
+    virtual ~KTextEditorPrivate();
+
+private:
+    KTextEditor *q_ptr;
+    QVBoxLayout* m_pVBoxLayout;
+    QScrollArea* m_pScrollArea;
+    QTextEdit* m_pTextEdit;
+    bool m_focus;
+};
+
+KTextEditor::KTextEditor(QWidget *parent)
+    :QWidget(parent)
+    ,d_ptr(new KTextEditorPrivate(this))
+{
+    Q_D(KTextEditor);
+    this->setFocusPolicy(Qt::ClickFocus);
+    installEventFilter(this);
+    d->m_pTextEdit->installEventFilter(this);
+    d->m_pScrollArea->installEventFilter(this);
+}
+
+QTextEdit *KTextEditor::textEdit()
+{
+    Q_D(KTextEditor);
+    return d->m_pTextEdit;
+}
+
+void KTextEditor::paintEvent(QPaintEvent *event)
+{
+    Q_D(KTextEditor);
+    QPainter painter(this);
+    painter.setRenderHint(QPainter::Antialiasing);
+    painter.fillRect(this->rect(), palette().window().color());
+    QPen pen;
+    pen.setWidth(2);
+    qDebug()<< d->m_pTextEdit->hasFocus()<<d->m_pScrollArea->hasFocus() << hasFocus() <<d->m_focus;
+    if(d->m_focus)
+    {
+        pen.setColor(palette().highlight().color());
+        painter.setPen(pen);
+    }
+    else
+    {
+        pen.setColor(palette().placeholderText().color());
+        painter.setPen(pen);
+    }
+
+    painter.setBrush(palette().base().color());
+    QRect rect = this->rect().adjusted(1, 1, -1, -1);
+    painter.drawRoundedRect(rect, 8, 8);
+}
+
+bool KTextEditor::eventFilter(QObject *watched, QEvent *event)
+{
+    Q_D(KTextEditor);
+    if(watched == this)
+    {
+        switch (event->type())
+        {
+        qDebug()<<event->type();
+        case QEvent::FocusIn:
+            qDebug()<<"focus in";
+            d->m_focus = true;
+            update();
+            break;
+        case QEvent::FocusOut:
+            qDebug()<<"focus out";
+            d->m_focus = false;
+            update();
+            break;
+        default:
+            break;
+        }
+        return QWidget::eventFilter(watched,event);
+    }
+    else
+    {
+        switch (event->type())
+        {
+        qDebug()<<event->type();
+        case QEvent::FocusIn:
+            qDebug()<<"focus in";
+            d->m_focus = true;
+            update();
+            break;
+        case QEvent::FocusOut:
+            qDebug()<<"focus out";
+            d->m_focus = false;
+            update();
+            break;
+        default:
+            break;
+        }
+        return false;
+    }
+}
+
+KTextEditorPrivate::KTextEditorPrivate(KTextEditor *parent)
+    :q_ptr(parent)
+{
+    Q_Q(KTextEditor);
+
+    m_pVBoxLayout = new QVBoxLayout();
+    m_pScrollArea = new QScrollArea();
+    m_pTextEdit = new QTextEdit();
+    m_focus = false;
+
+    q->setContentsMargins(8,12,0,13);//上下左右边距为20 ,因控件自带边距调整
+    m_pScrollArea->setWidget(m_pTextEdit);
+    m_pScrollArea->horizontalScrollBar()->setVisible(false);
+    m_pScrollArea->setWidgetResizable(true);
+    m_pScrollArea->setFocusPolicy(Qt::ClickFocus);
+
+    m_pTextEdit->setFrameShape(QFrame::NoFrame);
+    m_pScrollArea->setFrameShape(QFrame::NoFrame);
+
+
+    m_pVBoxLayout->addWidget(m_pScrollArea);
+
+    q->setLayout(m_pVBoxLayout);
+}
+
+KTextEditorPrivate::~KTextEditorPrivate()
+{
+
+}
+
+}
+
+#include "ktexteditor.moc"
+#include "moc_ktexteditor.cpp"
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/ktexteditor.h libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/ktexteditor.h
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/ktexteditor.h	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/ktexteditor.h	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,33 @@
+#ifndef KTEXTEDITOR_H
+#define KTEXTEDITOR_H
+
+#include <QWidget>
+#include <QTextEdit>
+#include "gui_g.h"
+
+namespace kdk {
+
+class KTextEditorPrivate;
+
+class GUI_EXPORT KTextEditor :public QWidget
+{
+    Q_OBJECT
+public:
+    KTextEditor(QWidget* parent = nullptr);
+
+    QTextEdit* textEdit();
+
+
+protected:
+    void paintEvent(QPaintEvent* event);
+    bool eventFilter(QObject *watched, QEvent *event);
+
+private:
+    Q_DECLARE_PRIVATE(KTextEditor)
+    KTextEditorPrivate* const d_ptr;
+
+};
+}
+#endif // KTEXTEDITOR_H
+
+
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/ktitlewindow.cpp libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/ktitlewindow.cpp
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/ktitlewindow.cpp	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/ktitlewindow.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,262 @@
+/*
+ * libkysdk-qtwidgets's Library
+ *
+ * Copyright (C) 2023, KylinSoft Co., Ltd.
+ *
+ * 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 3 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 General Public License
+ * along with this library.  If not, see <https://www.gnu.org/licenses/>.
+ *
+ * Authors: Zhenyu Wang <wangzhenyu@kylinos.cn>
+ *
+ */
+
+#include "ktitlewindow.h"
+#include "themeController.h"
+#include <QPushButton>
+#include <QBoxLayout>
+#include <QPainterPath>
+#include <QPainter>
+#include <QEvent>
+#include <QDebug>
+#include "xatom-helper.h"
+#include <QGuiApplication>
+#include "ukuistylehelper/ukui-decoration-manager.h"
+#include "ukuistylehelper/ukui-shell-manager.h"
+
+namespace kdk {
+
+class Q_DECL_HIDDEN KTitleWindowPrivate :public QObject,public ThemeController
+{
+    Q_OBJECT
+    Q_DECLARE_PUBLIC(KTitleWindow)
+
+public:
+    KTitleWindowPrivate(KTitleWindow *parent);
+
+protected:
+    void changeTheme();
+
+private:
+    KTitleWindow *q_ptr;
+    QWidget *m_pTitleWidget;
+    QWidget *m_pBaseWidget;
+    KPushButton *m_pAddBtn;
+    QPushButton *m_pColorBtn;
+    QPushButton *m_pMenuBtn;
+    QPushButton *m_pCloseBtn;
+    QHBoxLayout *m_pTitleWidgetLayou;
+    QVBoxLayout *m_pVLayout;
+    QColor m_titleColor;
+};
+
+KTitleWindow::KTitleWindow(QWidget *parent)
+    :QWidget(parent)
+    ,d_ptr(new KTitleWindowPrivate(this))
+{
+    Q_D(KTitleWindow);
+    installEventFilter(this);
+    MotifWmHints hints;
+    hints.flags = MWM_HINTS_FUNCTIONS|MWM_HINTS_DECORATIONS;
+    hints.functions = MWM_FUNC_ALL;
+    hints.decorations = MWM_DECOR_BORDER;
+    XAtomHelper::getInstance()->setWindowMotifHint(this->winId(), hints);
+
+    setMinimumSize(390,364);
+}
+
+KPushButton *KTitleWindow::addButton()
+{
+    Q_D(KTitleWindow);
+    return d->m_pAddBtn;
+}
+
+QPushButton *KTitleWindow::colorButton()
+{
+    Q_D(KTitleWindow);
+    return d->m_pColorBtn;
+}
+
+QPushButton *KTitleWindow::menuButton()
+{
+    Q_D(KTitleWindow);
+    return d->m_pMenuBtn;
+}
+
+QWidget *KTitleWindow::baseWidget()
+{
+    Q_D(KTitleWindow);
+    return d->m_pBaseWidget;
+}
+
+void KTitleWindow::setTitleColor(QColor color)
+{
+    Q_D(KTitleWindow);
+    d->m_titleColor = color;
+}
+
+void KTitleWindow::resizeEvent(QResizeEvent *event)
+{
+    Q_D(KTitleWindow);
+
+    QWidget::resizeEvent(event);
+    d->m_pTitleWidget->setFixedWidth(width());
+    repaint();
+}
+
+void KTitleWindow::paintEvent(QPaintEvent *event)
+{
+    Q_D(KTitleWindow);
+
+    QPainter painter(this);
+    painter.setRenderHint(QPainter::HighQualityAntialiasing);
+    painter.setRenderHint(QPainter::Antialiasing);
+    painter.setRenderHint(QPainter::TextAntialiasing);
+    painter.setRenderHint(QPainter::SmoothPixmapTransform);
+    painter.setPen(Qt::NoPen);
+    painter.setBrush(palette().base().color());
+    painter.drawRoundedRect(this->rect(),12,12);
+
+    d->m_pAddBtn->setIconColor(d->m_titleColor);
+    d->m_pColorBtn->setIcon(ThemeController::drawColoredPixmap(d->m_pColorBtn->icon().pixmap(24,24),Qt::white));
+    d->m_pMenuBtn->setIcon(ThemeController::drawColoredPixmap(d->m_pMenuBtn->icon().pixmap(24,24),Qt::white));
+    d->m_pCloseBtn->setIcon(ThemeController::drawColoredPixmap(d->m_pCloseBtn->icon().pixmap(24,24),Qt::white));
+
+    QPainterPath path1;
+    QRect rect = this->rect().adjusted(0,0,1,1);
+    if(isActiveWindow())
+    {
+        if(!d->m_pTitleWidget->isVisible())
+        {
+            d->m_pTitleWidget->show();
+            d->m_pVLayout->setContentsMargins(8,40,8,0);
+        }
+        path1.lineTo(rect.topLeft() + QPoint(12 , 0));
+        path1.lineTo(rect.topRight() - QPoint(12 , 0));
+        path1.quadTo(rect.topRight() , rect.topRight() + QPoint(0 , 12));
+        path1.lineTo(rect.topRight() + QPoint(0 , 40));
+        path1.lineTo(rect.topLeft() + QPoint(0 , 40));
+        path1.lineTo(rect.topLeft() + QPoint(0 , 12));
+        path1.quadTo(rect.topLeft() , rect.topLeft() + QPoint(12 , 0));
+    }
+    else
+    {
+        if(d->m_pTitleWidget->isVisible())
+        {
+            d->m_pTitleWidget->hide();
+            d->m_pVLayout->setContentsMargins(8,12,8,0);
+        }
+        path1.lineTo(rect.topLeft() + QPoint(12 , 0));
+        path1.lineTo(rect.topRight() - QPoint(12 , 0));
+        path1.quadTo(rect.topRight() , rect.topRight() + QPoint(0 , 12));
+        path1.lineTo(rect.topRight() + QPoint(0 , 12));
+        path1.lineTo(rect.topLeft() + QPoint(0 , 12));
+        path1.lineTo(rect.topLeft() + QPoint(0 , 12));
+        path1.quadTo(rect.topLeft() , rect.topLeft() + QPoint(12 , 0));
+    }
+    painter.setBrush(d->m_titleColor);
+    painter.drawPath(path1);
+}
+
+bool KTitleWindow::eventFilter(QObject *watched, QEvent *event)
+{
+    Q_D(KTitleWindow);
+    QString platform = QGuiApplication::platformName();
+    if(platform.startsWith(QLatin1String("wayland"),Qt::CaseInsensitive))
+    {
+        if((event->type() == QEvent::PlatformSurface || event->type() == QEvent::Show || event->type() == QEvent::UpdateRequest))
+        {
+            #ifdef USE_UKUI_PROTOCOL
+            if(UkuiShellManager::getInstance()->ukuishellReady())
+                UkuiShellManager::getInstance()->removeHeaderBar(this->windowHandle());
+            else
+                UKUIDecorationManager::getInstance()->removeHeaderBar(this->windowHandle());
+            #else
+                UKUIDecorationManager::getInstance()->removeHeaderBar(this->windowHandle());
+            #endif
+        }
+    }
+    return QWidget::eventFilter(watched,event);
+}
+
+KTitleWindowPrivate::KTitleWindowPrivate(KTitleWindow *parent)
+    :q_ptr(parent)
+{
+    Q_Q(KTitleWindow);
+    m_titleColor = q->palette().highlight().color();
+    m_pTitleWidget = new QWidget(q);
+    m_pTitleWidget->setAttribute(Qt::WA_TranslucentBackground,true);
+    m_pTitleWidget->setContentsMargins(0,0,0,0);
+    m_pTitleWidget->setFixedHeight(40);
+    m_pTitleWidgetLayou = new QHBoxLayout(m_pTitleWidget);
+
+    m_pAddBtn = new KPushButton();
+    m_pAddBtn->setProperty("useIconHighlightEffect", 0x2);
+    m_pAddBtn->setBackgroundColor(Qt::white);
+    m_pAddBtn->setFixedSize(24,24);
+    m_pAddBtn->setBorderRadius(12);
+    m_pAddBtn->setIcon(QIcon::fromTheme("list-add-symbolic"));
+
+    m_pColorBtn = new QPushButton();
+    m_pColorBtn->setProperty("useIconHighlightEffect", 0x2);
+    m_pColorBtn->setFlat(true);
+    m_pColorBtn->setFixedSize(24,24);
+    m_pColorBtn->setIcon(QIcon::fromTheme("window-close-symbolic"));
+
+    m_pMenuBtn = new QPushButton();
+    m_pMenuBtn->setProperty("useIconHighlightEffect", 0x2);
+    m_pMenuBtn->setFlat(true);
+    m_pMenuBtn->setFixedSize(24,24);
+    m_pMenuBtn->setIcon(QIcon::fromTheme("open-menu-symbolic"));
+
+    m_pCloseBtn = new QPushButton();
+    m_pCloseBtn->setProperty("isWindowButton", 0x02);
+    m_pCloseBtn->setProperty("useIconHighlightEffect", 0x08);
+    m_pCloseBtn->setFlat(true);
+    m_pCloseBtn->setFixedSize(24,24);
+    m_pCloseBtn->setIcon(QIcon::fromTheme("window-close-symbolic"));
+    connect(m_pCloseBtn,&QPushButton::clicked,q,[=]{
+        q->close();
+    });
+
+    m_pBaseWidget = new QWidget();
+
+    m_pVLayout = new QVBoxLayout(q);
+
+    m_pTitleWidgetLayou->setSpacing(8);
+    m_pTitleWidgetLayou->setContentsMargins(8,8,8,8);
+    m_pTitleWidgetLayou->addWidget(m_pAddBtn);
+    m_pTitleWidgetLayou->addStretch();
+    m_pTitleWidgetLayou->addWidget(m_pColorBtn);
+    m_pTitleWidgetLayou->addWidget(m_pMenuBtn);
+    m_pTitleWidgetLayou->addWidget(m_pCloseBtn);
+    m_pVLayout->addLayout(m_pTitleWidgetLayou);
+    m_pVLayout->addWidget(m_pBaseWidget);
+
+    m_pBaseWidget->setBackgroundRole(QPalette::Base);
+    connect(m_gsetting,&QGSettings::changed,this,[=]{
+        changeTheme();
+        m_pBaseWidget->setBackgroundRole(QPalette::Base);
+    });
+
+}
+
+void KTitleWindowPrivate::changeTheme()
+{
+    Q_Q(KTitleWindow);
+    initThemeStyle();
+}
+
+}
+
+#include "ktitlewindow.moc"
+#include "moc_ktitlewindow.cpp"
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/ktitlewindow.h libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/ktitlewindow.h
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/ktitlewindow.h	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/ktitlewindow.h	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,90 @@
+/*
+ * libkysdk-qtwidgets's Library
+ *
+ * Copyright (C) 2023, KylinSoft Co., Ltd.
+ *
+ * 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 3 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 General Public License
+ * along with this library.  If not, see <https://www.gnu.org/licenses/>.
+ *
+ * Authors: Zhenyu Wang <wangzhenyu@kylinos.cn>
+ *
+ */
+
+#ifndef KTITLEWINDOW_H
+#define KTITLEWINDOW_H
+
+#include <QWidget>
+#include <QPushButton>
+#include "kpushbutton.h"
+#include "gui_g.h"
+
+namespace kdk
+{
+
+/**
+ * @defgroup FormModule
+ * @since 2.5
+ */
+
+class KTitleWindowPrivate;
+
+class GUI_EXPORT KTitleWindow : public QWidget
+{
+   Q_OBJECT
+
+public:
+    KTitleWindow(QWidget *parent = nullptr);
+
+    /**
+     * @brief 获取添加按钮
+     * @return
+     */
+    KPushButton *addButton();
+
+    /**
+     * @brief 获取颜色按钮
+     * @return
+     */
+    QPushButton *colorButton();
+
+    /**
+     * @brief 获取menu按钮
+     * @return
+     */
+    QPushButton *menuButton();
+
+    /**
+     * @brief 获取widget
+     * @return
+     */
+    QWidget *baseWidget();
+
+    /**
+     * @brief 设置标题颜色
+     * @param color
+     */
+    void setTitleColor(QColor color);
+
+protected:
+    void resizeEvent(QResizeEvent *event);
+    void paintEvent(QPaintEvent *event);
+    bool eventFilter(QObject *watched, QEvent *event);
+
+private:
+    Q_DECLARE_PRIVATE(KTitleWindow)
+    KTitleWindowPrivate *const d_ptr;
+};
+
+}
+
+#endif // KTITLEWINDOW_H
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/ktoolbar.cpp libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/ktoolbar.cpp
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/ktoolbar.cpp	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/ktoolbar.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,411 @@
+#include "ktoolbar.h"
+#include "themeController.h"
+#include <QBoxLayout>
+#include <QPainter>
+#include <QDebug>
+#include "klineframe.h"
+
+namespace kdk
+{
+
+class KToolBarPrivate : public QObject,public ThemeController
+{
+    Q_DECLARE_PUBLIC(KToolBar)
+    Q_OBJECT
+public:
+    KToolBarPrivate(KToolBar* parent);
+
+    void init();
+    void updateButtonLayout();
+    void clearButtonLayout();
+    void getSelectList(KToolButton* button,bool checked);
+
+private:
+    KToolBar* q_ptr;
+    QBoxLayout* m_pLayout;
+    QList<KToolButton *> m_pButtonList;
+    QList<KToolButton *> m_pCheckList;
+    int m_radius;
+    bool m_exclusive;
+    bool m_isCheckable;
+    bool m_isLineVisible;
+    bool m_isBkgColorEnable;
+};
+
+KToolBar::KToolBar(QWidget *parent)
+    :QWidget(parent)
+    ,d_ptr(new KToolBarPrivate(this))
+{
+
+}
+
+Qt::Orientation KToolBar::orientation()
+{
+    Q_D(KToolBar);
+    QBoxLayout::Direction layoutDirection = d->m_pLayout->direction();
+    if(layoutDirection == QBoxLayout::LeftToRight || layoutDirection == QBoxLayout::RightToLeft)
+    {
+        return Qt::Horizontal;
+    }
+    return Qt::Vertical;
+}
+
+void KToolBar::setOrientation(Qt::Orientation orientation)
+{
+    Q_D(KToolBar);
+    if(orientation == Qt::Vertical)
+        d->m_pLayout->setDirection(QBoxLayout::TopToBottom);
+    else
+        d->m_pLayout->setDirection(QBoxLayout::LeftToRight);
+    d->updateButtonLayout();
+}
+
+KToolButton *KToolBar::addButton(QIcon icon)
+{
+    Q_D(KToolBar);
+    KToolButton* button = new KToolButton(this);
+    button->setType(KToolButtonType::Frameless);
+    button->setIcon(icon);
+    button->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
+    d->m_pButtonList.append(button);
+    d->updateButtonLayout();
+    return button;
+}
+
+KToolButton *KToolBar::addButton(QString string)
+{
+    Q_D(KToolBar);
+    KToolButton* button = new KToolButton(this);
+    button->setType(KToolButtonType::Frameless);
+    button->setText(string);
+    button->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
+    d->m_pButtonList.append(button);
+    d->updateButtonLayout();
+    return button;
+}
+
+QList<KToolButton *> KToolBar::addButton(QList<QIcon> list)
+{
+    Q_D(KToolBar);
+    QList<KToolButton*> btnList;
+    for(int i =0 ; i < list.count() ;i++)
+    {
+        KToolButton* button = new KToolButton(this);
+        button->setType(KToolButtonType::Frameless);
+        button->setIcon(list.at(i));
+        button->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
+        d->m_pButtonList.append(button);
+        btnList.append(button);
+    }
+    d->updateButtonLayout();
+    return btnList;
+}
+
+QList<KToolButton *> KToolBar::addButton(QList<QString> list)
+{
+    Q_D(KToolBar);
+    QList<KToolButton*> btnList;
+    for(int i =0 ; i < list.count() ;i++)
+    {
+        KToolButton* button = new KToolButton(this);
+        button->setType(KToolButtonType::Frameless);
+        button->setText(list.at(i));
+        button->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
+        d->m_pButtonList.append(button);
+        btnList.append(button);
+    }
+    d->updateButtonLayout();
+    return btnList;
+}
+
+//void KToolBar::addButton(KToolButton *button)
+//{
+//    Q_D(KToolBar);
+//    if(!d->m_pButtonList.contains(button))
+//    {
+//        d->m_pButtonList.append(button);
+//        d->updateButtonLayout();
+//    }
+//}
+
+//void KToolBar::addButton(QList<KToolButton *> list)
+//{
+//    Q_D(KToolBar);
+//    for(int i = 0 ; i < list.count() ; i++)
+//    {
+//        if(!d->m_pButtonList.contains(list.at(i)))
+//        {
+//            d->m_pButtonList.append(list.at(i));
+//        }
+//    }
+//    d->updateButtonLayout();
+//}
+
+QList<KToolButton *> KToolBar::buttonList()
+{
+    Q_D(KToolBar);
+    return d->m_pButtonList;
+}
+
+void KToolBar::removeButton(KToolButton *button)
+{
+    Q_D(KToolBar);
+    if(d->m_pButtonList.contains(button))
+    {
+        d->m_pButtonList.removeAll(button);
+    }
+    d->updateButtonLayout();
+}
+
+void KToolBar::removeButton(int id)
+{
+    Q_D(KToolBar);
+    if(id < 0 || id >= d->m_pButtonList.count())
+        return;
+    d->m_pButtonList.removeAt(id);
+    d->updateButtonLayout();
+}
+
+void KToolBar::removeButton(QList<KToolButton *> list)
+{
+    Q_D(KToolBar);
+    for(int i = 0 ; i < list.count(); i++)
+    {
+        if(d->m_pButtonList.contains(list.at(i)))
+        {
+            d->m_pButtonList.removeAll(list.at(i));
+        }
+    }
+    d->updateButtonLayout();
+}
+
+void KToolBar::setBorderRadius(int radius)
+{
+    Q_D(KToolBar);
+    d->m_radius = radius;
+}
+
+int KToolBar::borderRadius()
+{
+    Q_D(KToolBar);
+    return d->m_radius;
+}
+
+void KToolBar::setExclusive(bool exclusive)
+{
+    Q_D(KToolBar);
+    d->m_exclusive = exclusive;
+}
+
+bool KToolBar::exclusive()
+{
+    Q_D(KToolBar);
+    return d->m_exclusive;
+}
+
+void KToolBar::setCheckable(bool flag)
+{
+    Q_D(KToolBar);
+    d->m_isCheckable = flag;
+    QList<KToolButton *> list = buttonList();
+    for (int i = 0; i < list.count(); ++i) {
+        KToolButton *button = list.at(i);
+        button->setCheckable(d->m_isCheckable);
+    }
+    update();
+}
+
+bool KToolBar::isCheckable()
+{
+    Q_D(KToolBar);
+    return d->m_isCheckable;
+}
+
+QList<KToolButton* >KToolBar::checkedButton()
+{
+    Q_D(KToolBar);
+    return d->m_pCheckList;
+}
+
+void KToolBar::setLineVisible(bool flag)
+{
+    Q_D(KToolBar);
+    d->m_isLineVisible = flag;
+    d->updateButtonLayout();
+}
+
+bool KToolBar::isLineVisible()
+{
+    Q_D(KToolBar);
+    return d->m_isLineVisible;
+}
+
+void KToolBar::setBackgroundColorEnabled(bool flag)
+{
+    Q_D(KToolBar);
+    d->m_isBkgColorEnable = flag;
+    d->updateButtonLayout();
+}
+
+bool KToolBar::backgroundColorEnabled()
+{
+    Q_D(KToolBar);
+    return d->m_isBkgColorEnable;
+}
+
+void KToolBar::paintEvent(QPaintEvent *event)
+{
+    Q_D(KToolBar);
+    QPainter painter(this);
+    painter.setRenderHint(QPainter::Antialiasing);
+    if(d->m_isBkgColorEnable)
+        painter.setBrush(palette().button().color());
+    else
+        painter.setBrush(Qt::transparent);
+    painter.setPen(Qt::NoPen);
+    painter.drawRoundedRect(this->rect(),d->m_radius,d->m_radius);
+    QWidget::paintEvent(event);
+}
+
+KToolBarPrivate::KToolBarPrivate(KToolBar *parent)
+    :q_ptr(parent)
+{
+    Q_Q(KToolBar);
+    init();
+}
+
+void KToolBarPrivate::init()
+{
+    Q_Q(KToolBar);
+    m_pLayout = new QHBoxLayout(q);
+    m_pLayout->setMargin(0);
+    m_pLayout->setSpacing(0);
+    m_pLayout->setDirection(QBoxLayout::LeftToRight);
+    m_radius = 6;
+    m_exclusive = false;
+    m_isCheckable = false;
+    m_isLineVisible = false;
+    m_isBkgColorEnable = false;
+}
+
+void KToolBarPrivate::updateButtonLayout()
+{
+    Q_Q(KToolBar);
+    clearButtonLayout();
+    for(int i = 0; i < m_pButtonList.count() ; i++)
+    {
+        if(m_isBkgColorEnable)
+            m_pButtonList.at(i)->setBackgroundColorEnabled(true);
+        else
+            m_pButtonList.at(i)->setBackgroundColorEnabled(false);
+
+        m_pButtonList.at(i)->setBorderRadius(m_radius,m_radius,m_radius,m_radius);
+
+        m_pLayout->addWidget(m_pButtonList.at(i));
+        q->setCheckable(q->isCheckable());
+
+        if(m_pButtonList.at(i)->menu())
+            m_pButtonList.at(i)->setArrow(true);
+
+        connect(m_pButtonList.at(i),&KToolButton::checkedChanged,this,[=](bool checked){
+            getSelectList(m_pButtonList.at(i),checked);
+        });
+
+        if( i != m_pButtonList.count() - 1 && m_isLineVisible)
+        {
+            if(q->orientation() == Qt::Vertical)
+            {
+                KHLineFrame* lineFrame = new KHLineFrame(q);
+                lineFrame->setFollowPalette(false);
+                QPalette pale ;
+                QColor color(0,0,0);
+                color.setAlphaF(0.1);
+                pale.setColor(QPalette::Window,color);
+                lineFrame->setPalette(pale);
+                m_pLayout->addWidget(lineFrame);
+            }
+            else
+            {
+                KVLineFrame* lineFrame = new KVLineFrame(q);
+                lineFrame->setFollowPalette(false);
+                QPalette pale ;
+                QColor color(0,0,0);
+                color.setAlphaF(0.1);
+                pale.setColor(QPalette::Window,color);
+                lineFrame->setPalette(pale);
+                m_pLayout->addWidget(lineFrame);
+            }
+        }
+    }
+}
+
+void KToolBarPrivate::clearButtonLayout()
+{
+    for(int i = 0; i < m_pButtonList.count() ; i++)
+    {
+        disconnect(m_pButtonList.at(i), SIGNAL(checkedChanged(bool)), 0, 0);
+    }
+
+    QLayoutItem *child;
+    while ((child = m_pLayout->takeAt(0)) != 0)
+    {
+        if (child->spacerItem())
+        {
+            m_pLayout->removeItem(child);
+            continue;
+        }
+        m_pLayout->removeWidget(child->widget());
+        child->widget()->setParent(nullptr);
+        delete child;
+        child =nullptr;
+    }
+}
+
+void KToolBarPrivate::getSelectList(KToolButton* button,bool checked)
+{
+    m_pCheckList.clear();
+    if(m_exclusive)
+    {
+        if(checked)
+        {
+            for(int i = 0;i < m_pButtonList.count() ; i++)
+            {
+
+                if(button == m_pButtonList.at(i))
+                {
+                    button->setChecked(checked);
+                }
+                else
+                    m_pButtonList.at(i)->setChecked(false);
+            }
+
+        }
+        else
+        {
+            button->setChecked(checked);
+        }
+    }
+    else
+    {
+        for(int i = 0;i < m_pButtonList.count() ; i++)
+        {
+            if(button == m_pButtonList.at(i))
+            {
+                button->setChecked(checked);
+            }
+            else
+                m_pButtonList.at(i)->setChecked(m_pButtonList.at(i)->isChecked());
+        }
+    }
+
+    for(int i = 0 ; i < m_pButtonList.count();i++)
+    {
+        if(m_pButtonList.at(i)->isChecked())
+            m_pCheckList.append(m_pButtonList.at(i));
+    }
+}
+
+}
+
+#include "ktoolbar.moc"
+#include "moc_ktoolbar.cpp"
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/ktoolbar.h libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/ktoolbar.h
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/ktoolbar.h	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/ktoolbar.h	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,72 @@
+#ifndef KTOOLBAR_H
+#define KTOOLBAR_H
+
+#include <QWidget>
+#include <QPushButton>
+#include "gui_g.h"
+#include "ktoolbutton.h"
+
+namespace kdk {
+
+class KToolBarPrivate;
+
+class GUI_EXPORT KToolBar : public QWidget
+{
+    Q_OBJECT
+public:
+    KToolBar(QWidget* parent = nullptr);
+
+    Qt::Orientation orientation();
+
+    void setOrientation(Qt::Orientation orientation);
+
+    KToolButton* addButton(QIcon icon);
+
+    KToolButton* addButton(QString string);
+
+//    KToolButton* addButton (const QIcon&icon ,const QString text = QString());
+    QList<KToolButton*> addButton(QList<QIcon> list);
+
+    QList<KToolButton*> addButton(QList<QString> list);
+
+    QList<KToolButton *> buttonList();
+
+    void removeButton(KToolButton* button);
+
+    void removeButton(int id);
+
+    void removeButton(QList<KToolButton*> list);
+
+    void setBorderRadius(int radius);
+
+    int borderRadius();
+
+    void setExclusive(bool);
+
+    bool exclusive();
+
+    void setCheckable(bool flag);
+
+    bool isCheckable();
+
+    QList<KToolButton* > checkedButton();
+
+    void setLineVisible(bool flag);
+
+    bool isLineVisible();
+
+    void setBackgroundColorEnabled(bool flag);
+
+    bool backgroundColorEnabled();
+
+protected:
+    void paintEvent(QPaintEvent* event);
+
+private:
+    Q_DECLARE_PRIVATE(KToolBar)
+    KToolBarPrivate* const d_ptr;
+};
+
+}
+
+#endif // KTOOLBAR_H
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/ktoolbutton.cpp libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/ktoolbutton.cpp
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/ktoolbutton.cpp	2024-05-16 09:25:54.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/ktoolbutton.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -29,6 +29,7 @@
 #include <QStyleOptionToolButton>
 #include <QLinearGradient>
 #include <QApplication>
+#include <QPainterPath>
 #include "parmscontroller.h"
 
 namespace  kdk
@@ -65,6 +66,11 @@
     QSize m_pixmapSize;
     bool m_isIconColor;
     QColor m_iconColor;
+    int m_bottomLeftRadius;
+    int m_topLeftRadius;
+    int m_topRightRadius;
+    int m_bottomRightRadius;
+    bool m_isBkgColorEnable;
 };
 
 KToolButton::KToolButton(QWidget *parent)
@@ -76,6 +82,11 @@
     d->m_pTimer->setInterval(100);
     d->m_flashState = 0;
     d->m_isLoading = false;
+    d->m_bottomLeftRadius = 6;
+    d->m_topLeftRadius = 6;
+    d->m_topRightRadius = 6;
+    d->m_bottomRightRadius = 6;
+    d->m_isBkgColorEnable = false;
     setType(Flat);
     installEventFilter(this);
     QToolButton::setIcon(QIcon::fromTheme("open-menu-symbolic"));
@@ -86,6 +97,9 @@
     connect(Parmscontroller::self(),&Parmscontroller::modeChanged,this,[=](){
         updateGeometry();
     });
+    connect(this,&KToolButton::toggled,this,[=](bool checked){
+        emit checkedChanged(checked);
+    });
 }
 
 KToolButtonType KToolButton::type()
@@ -155,6 +169,27 @@
     update();
 }
 
+void KToolButton::setBorderRadius(int bottomLeft, int topLeft, int topRight, int bottomRight)
+{
+    Q_D(KToolButton);
+    d->m_bottomLeftRadius = bottomLeft;
+    d->m_topLeftRadius = topLeft;
+    d->m_topRightRadius = topRight;
+    d->m_bottomRightRadius = bottomRight;
+}
+
+void KToolButton::setBackgroundColorEnabled(bool flag)
+{
+    Q_D(KToolButton);
+    d->m_isBkgColorEnable = flag;
+}
+
+bool KToolButton::backgroundColorEnabled()
+{
+    Q_D(KToolButton);
+    return d->m_isBkgColorEnable;
+}
+
 bool KToolButton::eventFilter(QObject *watched, QEvent *event)
 {
     Q_D(KToolButton);
@@ -252,6 +287,7 @@
 QSize KToolButton::sizeHint() const
 {
     Q_D(const KToolButton);
+
     QSize size(Parmscontroller::parm(Parmscontroller::Parm::PM_ToolButtonHeight),
             Parmscontroller::parm(Parmscontroller::Parm::PM_ToolButtonHeight));
     if(d->m_hasArrow)
@@ -280,32 +316,59 @@
     QPen pen;
     QColor color = palette().color(QPalette::Highlight);
     pen.setColor(color);
-    if((QStyle::State_HasFocus & option.state) && isEnabled() && !isLoading() &&(this->focusPolicy() != Qt::FocusPolicy::NoFocus))
+    pen.setWidth(2);
+    if( ( (QStyle::State_HasFocus & option.state) && isEnabled() && !isLoading() &&(this->focusPolicy() != Qt::FocusPolicy::NoFocus) )&& d->m_type != Frameless)
         painter.setPen(pen);
     else
         painter.setPen(Qt::NoPen);
 
-    pen.setWidth(2);
-
     if(!isEnabled())
         painter.setBrush(d->m_disableColor);
     else if(QStyle::State_Sunken & option.state && !isLoading())
         painter.setBrush(d->m_clickColor);
     else if(QStyle::State_MouseOver & option.state && !isLoading())
+    {
+        if(isChecked())
         {
-        if(ThemeController::widgetTheme()==FashionTheme && type() != Flat)
-        {
-            painter.setBrush(d->m_pLinearGradient);
+            painter.setBrush(d->m_clickColor);
         }
         else
         {
-            painter.setBrush(d->m_hoverColor);
+            if(ThemeController::widgetTheme()==FashionTheme && type() != Flat)
+            {
+                painter.setBrush(d->m_pLinearGradient);
+            }
+            else
+            {
+                painter.setBrush(d->m_hoverColor);
+            }
         }
     }
     else if(QStyle::State_HasFocus & option.state && !isLoading())
-        painter.setBrush(d->m_focusColor);
+    {
+        if(isChecked() && d->m_type == Frameless)
+        {
+            painter.setBrush(d->m_clickColor);
+        }
+        else
+        {
+            if(d->m_type == Frameless)
+                painter.setBrush(d->m_bkgColor);
+            else
+                painter.setBrush(d->m_focusColor);
+        }
+    }
     else
-        painter.setBrush(d->m_bkgColor);
+    {
+        if(isChecked() )
+        {
+            painter.setBrush(d->m_clickColor);
+        }
+        else
+        {
+            painter.setBrush(d->m_bkgColor);
+        }
+    }
 
     if(ThemeController::widgetTheme() == ClassicTheme){
         color = ThemeController::highlightClick(false,palette());
@@ -390,16 +453,32 @@
     if(ThemeController::widgetTheme() == ClassicTheme)
         painter.drawRoundedRect(this->rect().adjusted(1,1,-1,-1),0,0);
     else
-        painter.drawRoundedRect(this->rect().adjusted(1,1,-1,-1),6,6);
+    {
+        QRect drawRect = this->rect().adjusted(1,1,0,0);
+        QPainterPath path;
+        path.moveTo(drawRect.topLeft() + QPoint( 0, d->m_topLeftRadius));
+        path.lineTo(drawRect.bottomLeft() - QPoint( 0, d->m_bottomLeftRadius));
+        path.quadTo(drawRect.bottomLeft(), drawRect.bottomLeft() + QPoint(d->m_bottomLeftRadius , 0));
+        path.lineTo(drawRect.bottomRight() - QPoint(d->m_bottomRightRadius ,0));
+        path.quadTo(drawRect.bottomRight() , drawRect.bottomRight() - QPoint(0 , d->m_bottomRightRadius));
+        path.lineTo(drawRect.topRight() + QPoint(0 , d->m_topRightRadius));
+        path.quadTo(drawRect.topRight() , drawRect.topRight() - QPoint(d->m_topRightRadius , 0));
+        path.lineTo(drawRect.topLeft() + QPoint(d->m_topLeftRadius , 0));
+        path.quadTo(drawRect.topLeft() , drawRect.topLeft() + QPoint(0, d->m_topLeftRadius));
+        painter.drawPath(path);
+    }
 
 
     //绘制图标
     QRect rect(0,0,option.iconSize.width(),option.iconSize.height());
     QPixmap pixmap = this->icon().pixmap(option.iconSize);
-    if(d->m_type == KToolButtonType::Flat || !isEnabled())
-        pixmap = ThemeController::drawColoredPixmap(pixmap,d->m_pixColor);
-    else if(ThemeController::themeMode() == DarkTheme)
-        pixmap = ThemeController::drawSymbolicColoredPixmap(pixmap);
+    if(ThemeController::isPixmapPureColor(pixmap))
+    {
+        if(d->m_type == KToolButtonType::Flat || !isEnabled())
+            pixmap = ThemeController::drawColoredPixmap(pixmap,d->m_pixColor);
+        else if(ThemeController::themeMode() == DarkTheme)
+            pixmap = ThemeController::drawSymbolicColoredPixmap(pixmap);
+    }
     if(d->m_isIconColor)
     {
         if(isEnabled())
@@ -417,7 +496,11 @@
     {
         QRect newRect = this->rect().adjusted(0,0,-20,0);
         rect.moveCenter(newRect.center());
-        this->style()->drawItemPixmap(&painter,rect,Qt::AlignCenter,pixmap);
+
+        if(sizePolicy().horizontalPolicy() == QSizePolicy::Expanding)
+            this->style()->drawItemPixmap(&painter,this->rect(),Qt::AlignCenter,pixmap);
+        else
+            this->style()->drawItemPixmap(&painter,rect,Qt::AlignCenter,pixmap);
         QRect arrowRect(0,0,option.iconSize.width(),option.iconSize.height());
         arrowRect.moveLeft(this->rect().width()-option.iconSize.width()-8);
         arrowRect.moveTop((this->height()-option.iconSize.height())/2);
@@ -588,9 +671,46 @@
         m_disableColor = q->palette().color(QPalette::Disabled,QPalette::Button);
         break;
     }
+    case Frameless:
+    {
+        QColor baseColor = q->palette().button().color();
+        QColor mix = q->palette().brightText().color();
+        if(m_isBkgColorEnable)
+            m_bkgColor = baseColor;
+        else
+            m_bkgColor = Qt::transparent;
+        m_clickColor = mixColor(baseColor,mix,0.2);
+        m_focusColor = baseColor;
+        if(ThemeController::widgetTheme()==FashionTheme)
+            {
+            if(ThemeController::themeMode() == LightTheme)
+            {
+                QColor color("#E6E6E6");
+                QColor startColor = mixColor(color,QColor(Qt::black),0.05);//("#FFD9D9D9");
+                QColor endColor = mixColor(color,QColor(Qt::black),0.2);//("#FFBFBFBF");
+                m_pLinearGradient.setColorAt(0,startColor);
+                m_pLinearGradient.setColorAt(1,endColor);
+            }
+            else
+            {
+                QColor color("#373737");
+                QColor startColor = mixColor(color,QColor(Qt::white),0.2);//("#FF5F5F5F");
+                QColor endColor = mixColor(color,QColor(Qt::white),0.05);//("#FF414141");
+                m_pLinearGradient.setColorAt(0,startColor);
+                m_pLinearGradient.setColorAt(1,endColor);
+            }
+            }
+        else
+            {
+                m_hoverColor = mixColor(baseColor,mix,0.05);
+            }
+        m_disableColor = q->palette().color(QPalette::Disabled,QPalette::Button);
+        break;
+    }
     default:
         break;
     }
+
 }
 
 void KToolButtonPrivate::doLoadingFlash()
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/ktoolbutton.h libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/ktoolbutton.h
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/ktoolbutton.h	2024-05-16 09:25:54.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/ktoolbutton.h	2024-10-29 15:22:42.000000000 +0800
@@ -42,7 +42,8 @@
 {
     Flat,
     SemiFlat,
-    Background
+    Background,
+    Frameless
 };
 
 class KToolButtonPrivate;
@@ -113,6 +114,15 @@
      */
     void setIconColor(bool flag,QColor color);
 
+    void setBorderRadius(int bottomLeft,int topLeft,int topRight,int bottomRight);
+
+
+    void setBackgroundColorEnabled(bool flag);
+
+    bool backgroundColorEnabled();
+
+Q_SIGNALS:
+    void checkedChanged(bool checked);
 
 protected:
     bool eventFilter(QObject *watched, QEvent *event);
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kwidget.cpp libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kwidget.cpp
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kwidget.cpp	2024-05-16 09:25:54.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kwidget.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -251,6 +251,7 @@
         XAtomHelper::getInstance()->setWindowMotifHint(this->winId(), hints);
     }
 }
+
 void KWidget::setSidebarFollowMode(bool flag)
 {
     Q_D(KWidget);
@@ -262,6 +263,7 @@
     Q_D(KWidget);
     return d->m_sidebarFollowMode;
 }
+
 bool KWidget::eventFilter(QObject *target, QEvent *event)
 {
     Q_D(KWidget);
@@ -395,7 +397,6 @@
     default:
         break;
     }
-
 }
 
 void KWidgetPrivate::adjustFlagsTitleStatus(Qt::WindowFlags type)
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kwindowbuttonbar.cpp libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kwindowbuttonbar.cpp
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/kwindowbuttonbar.cpp	2024-05-16 09:25:54.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/kwindowbuttonbar.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -347,7 +347,6 @@
         }
     }
 }
-
 }
 #include "kwindowbuttonbar.moc"
 #include "moc_kwindowbuttonbar.cpp"
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/themeController.cpp libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/themeController.cpp
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/themeController.cpp	2024-05-16 09:25:54.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/themeController.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -28,6 +28,9 @@
 #include <QPainterPath>
 #include <QStringList>
 #include <QApplication>
+#include <QtMath>
+
+#define ColorDifference 10
 
 static  WidgetThemeFlag g_widgetThemeFlag = DefaultTheme;
 static  ThemeFlag g_themeFlag = LightTheme;
@@ -266,6 +269,120 @@
     return framePixmap;
 }
 
+bool ThemeController::isPixmapPureColor(const QPixmap &pixmap)
+{
+    QColor symbolic_color = QColor(38, 38, 38);
+
+        if (pixmap.isNull()) {
+            qWarning("pixmap is null!");
+            return false;
+        }
+        QImage image = pixmap.toImage();
+
+        QVector<QColor> vector;
+        int total_red = 0;
+        int total_green = 0;
+        int total_blue = 0;
+        bool pure = true;
+        for (int y = 0; y < image.height(); ++y) {
+            for (int x = 0; x < image.width(); ++x) {
+                if (image.pixelColor(x, y).alphaF() > 0.3) {
+                    QColor color = image.pixelColor(x, y);
+                    vector << color;
+                    total_red += color.red();
+                    total_green += color.green();
+                    total_blue += color.blue();
+                    int dr = qAbs(color.red() - symbolic_color.red());
+                    int dg = qAbs(color.green() - symbolic_color.green());
+                    int db = qAbs(color.blue() - symbolic_color.blue());
+                    if (dr > ColorDifference || dg > ColorDifference || db > ColorDifference)
+                        pure = false;
+                }
+            }
+        }
+
+        if (pure)
+            return true;
+
+        qreal squareRoot_red = 0;
+        qreal squareRoot_green = 0;
+        qreal squareRoot_blue = 0;
+        qreal average_red = total_red / vector.count();
+        qreal average_green = total_green / vector.count();
+        qreal average_blue = total_blue / vector.count();
+        for (QColor color : vector) {
+            squareRoot_red += (color.red() - average_red) * (color.red() - average_red);
+            squareRoot_green += (color.green() - average_green) * (color.green() - average_green);
+            squareRoot_blue += (color.blue() - average_blue) * (color.blue() - average_blue);
+        }
+
+        qreal arithmeticSquareRoot_red = qSqrt(squareRoot_red / vector.count());
+        qreal arithmeticSquareRoot_green = qSqrt(squareRoot_green / vector.count());
+        qreal arithmeticSquareRoot_blue = qSqrt(squareRoot_blue / vector.count());
+        return arithmeticSquareRoot_red < 2.0 && arithmeticSquareRoot_green < 2.0 && arithmeticSquareRoot_blue < 2.0;
+}
+
+QIcon ThemeController::overlayIcons(const QIcon &icon1, const QIcon &icon2, int iconWidth, int iconHeight, int offsetX, int offsetY)
+{
+    if(!icon1.isNull() && !icon2.isNull())
+    {
+        QSize size = icon1.actualSize(QSize(iconWidth, iconHeight));
+
+        QPixmap pixmap(size);
+        pixmap.fill(Qt::transparent);
+
+        QPainter painter(&pixmap);
+        painter.setRenderHint(QPainter::HighQualityAntialiasing);
+        painter.setRenderHint(QPainter::Antialiasing);
+        painter.setRenderHint(QPainter::TextAntialiasing);
+        painter.setRenderHint(QPainter::SmoothPixmapTransform);
+
+        icon1.paint(&painter, QRect(0, 0, size.width(), size.height()), Qt::AlignCenter);
+        if(iconWidth > offsetX && iconHeight > offsetY)
+            icon2.paint(&painter, QRect(offsetX, offsetY, pixmap.width()-offsetX, size.height() - offsetY), Qt::AlignCenter);
+        else
+            icon2.paint(&painter, QRect(pixmap.width()-16, pixmap.height()-16, 16, 16), Qt::AlignCenter);
+
+        QIcon resultIcon(pixmap);
+
+        return resultIcon;
+    }
+    else
+    {
+        return QIcon();
+    }
+}
+
+QPixmap ThemeController::overlayPixmaps(const QPixmap &pixmap1, const QPixmap &pixmap2, int offsetX, int offsetY)
+{
+    if(!pixmap1.isNull() && !pixmap2.isNull())
+    {
+        QPixmap resultPixmap(pixmap1.size());
+        resultPixmap.fill(Qt::transparent);
+
+        QPainter painter(&resultPixmap);
+        painter.setRenderHint(QPainter::HighQualityAntialiasing);
+        painter.setRenderHint(QPainter::Antialiasing);
+        painter.setRenderHint(QPainter::TextAntialiasing);
+        painter.setRenderHint(QPainter::SmoothPixmapTransform);
+
+        painter.drawPixmap(QRect(0,0,pixmap1.width(),pixmap1.height()), pixmap1);
+
+        if(pixmap1.width() > offsetX && pixmap1.height() > offsetY)
+            painter.drawPixmap(QRect(offsetX,offsetY,pixmap1.width()-offsetX,pixmap1.height()-offsetY),pixmap2);
+        else
+            painter.drawPixmap(QRect(pixmap1.width()-16, pixmap1.height()-16, 16, 16),pixmap2);
+
+        painter.end();
+
+        return resultPixmap;
+    }
+    else
+    {
+        return QPixmap();
+    }
+}
+
 QColor ThemeController::lanhuHSLToQtHsl(int h, int s, int l, int a)
 {
     QColor c;
@@ -418,6 +535,15 @@
 //    }
 //}
 
+bool ThemeController::systemLang()
+{
+    QString systemLang = QLocale::system().name();
+    if(systemLang == "ug_CN" || systemLang == "ky_KG" || systemLang == "kk_KZ")
+        return true;
+    else
+        return false;
+}
+
 ThemeController::ThemeController()
     :m_gsetting(nullptr)
 {
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/themeController.h libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/themeController.h
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/src/themeController.h	2024-05-16 09:25:54.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/src/themeController.h	2024-10-29 15:22:42.000000000 +0800
@@ -60,6 +60,9 @@
     static IconFlag iconTheme();
     static int systemFontSize();
     static QPixmap drawFashionBackground(const QRect&rect,int sub_width,int sub_height,int radius,int flag); // flag ? rightBottom : leftBottom;
+    static bool isPixmapPureColor(const QPixmap &pixmap) ;
+    static QIcon overlayIcons(const QIcon &icon1, const QIcon &icon2,int iconWidth,int iconHeight ,int offsetX = 0, int offsetY = 0);
+    static QPixmap overlayPixmaps(const QPixmap &pixmap1, const QPixmap &pixmap2 ,int offsetX = 0, int offsetY = 0);
     static QColor lanhuHSLToQtHsl(int h, int s, int l, int a = 255);
     static QColor adjustH(const QColor c, int range);
     static QColor adjustS(const QColor c, int range);
@@ -70,6 +73,7 @@
     static QColor buttonDarkClick(bool isDark, QPalette p) ;
 //    static void normalButtonColor(bool isDark, QPalette p, QPen &defaultPen, QBrush &defaultBrush,  QPen &hoverPen, QBrush &hoverBrush,
 //                            QPen &clickPen, QBrush &clickBrush,  QPen &disablePen, QBrush &disableBrush);
+    static bool systemLang();
 
     ThemeController();
     ~ThemeController();
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/test.pro libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/test.pro
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/test.pro	2024-05-16 09:25:54.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/test.pro	2024-10-29 15:22:42.000000000 +0800
@@ -33,4 +33,5 @@
     testkbackground\
     testcolorbutton\
     testKMessageBox\
-    testKDragWidget
+    testKDragWidget\
+    testsecurityquestiondialog
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testAddFileButton/main.cpp libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testAddFileButton/main.cpp
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testAddFileButton/main.cpp	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testAddFileButton/main.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,11 @@
+#include "widget.h"
+
+#include <QApplication>
+
+int main(int argc, char *argv[])
+{
+    QApplication a(argc, argv);
+    Widget w;
+    w.show();
+    return a.exec();
+}
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testAddFileButton/testAddFileButton.pro libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testAddFileButton/testAddFileButton.pro
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testAddFileButton/testAddFileButton.pro	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testAddFileButton/testAddFileButton.pro	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,35 @@
+QT       += core gui
+
+greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
+
+CONFIG += c++11
+
+CONFIG += c++11
+
+CONFIG += link_pkgconfig
+PKGCONFIG += kysdk-widgetutils #kysdk-qtwidgets
+
+LIBS += -L/home/kylin/openkylin/applications/libkysdk-applications/build-kysdk-qtwidgets-unknown-Debug -lkysdk-qtwidgets
+INCLUDEPATH +=/home/kylin/openkylin/applications/libkysdk-applications/kysdk-qtwidgets/src
+# The following define makes your compiler emit warnings if you use
+# any Qt feature that has been marked deprecated (the exact warnings
+# depend on your compiler). Please consult the documentation of the
+# deprecated API in order to know how to port your code away from it.
+DEFINES += QT_DEPRECATED_WARNINGS
+
+# You can also make your code fail to compile if it uses deprecated APIs.
+# In order to do so, uncomment the following line.
+# You can also select to disable deprecated APIs only up to a certain version of Qt.
+#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
+
+SOURCES += \
+    main.cpp \
+    widget.cpp
+
+HEADERS += \
+    widget.h
+
+# Default rules for deployment.
+qnx: target.path = /tmp/$${TARGET}/bin
+else: unix:!android: target.path = /opt/$${TARGET}/bin
+!isEmpty(target.path): INSTALLS += target
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testAddFileButton/widget.cpp libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testAddFileButton/widget.cpp
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testAddFileButton/widget.cpp	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testAddFileButton/widget.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,36 @@
+#include "widget.h"
+#include "kaddfilebutton.h"
+#include <QDebug>
+#include <QTreeView>
+#include <QBoxLayout>
+#include <QAbstractItemDelegate>
+
+using namespace kdk;
+Widget::Widget(QWidget *parent)
+    : QWidget(parent)
+{
+    QTreeView* view = new QTreeView(this);
+    QHBoxLayout* layout = new QHBoxLayout(view);
+    KAddFileButton* button1 = new KAddFileButton();
+    KAddFileButton* button2 = new KAddFileButton();
+    QStringList list;
+    list<<"JPEG Files(*.jpg)"<<"PNG Files(*.png)";
+    button2->setNameFilters(list);
+
+    layout->addWidget(button1);
+    layout->addWidget(button2);
+
+    connect(button1,&KAddFileButton::clicked,[=]{
+        qDebug()<<"button1 选择路径"<<button1->fileDialog()->selectedFiles();
+    });
+    connect(button2,&KAddFileButton::clicked,[=]{
+        qDebug()<<"button2 选择路径"<<button2->fileDialog()->selectedFiles();
+    });
+
+    setFixedSize(600,500);
+}
+
+Widget::~Widget()
+{
+}
+
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testAddFileButton/widget.h libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testAddFileButton/widget.h
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testAddFileButton/widget.h	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testAddFileButton/widget.h	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,14 @@
+#ifndef WIDGET_H
+#define WIDGET_H
+
+#include <QWidget>
+
+class Widget : public QWidget
+{
+    Q_OBJECT
+
+public:
+    Widget(QWidget *parent = nullptr);
+    ~Widget();
+};
+#endif // WIDGET_H
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testFileWidget/main.cpp libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testFileWidget/main.cpp
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testFileWidget/main.cpp	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testFileWidget/main.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,11 @@
+#include "widget.h"
+
+#include <QApplication>
+
+int main(int argc, char *argv[])
+{
+    QApplication a(argc, argv);
+    Widget w;
+    w.show();
+    return a.exec();
+}
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testFileWidget/testFileWidget.pro libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testFileWidget/testFileWidget.pro
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testFileWidget/testFileWidget.pro	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testFileWidget/testFileWidget.pro	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,31 @@
+QT       += core gui
+
+greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
+
+CONFIG += c++11
+
+CONFIG += link_pkgconfig
+PKGCONFIG += kysdk-widgetutils kysdk-qtwidgets
+
+# The following define makes your compiler emit warnings if you use
+# any Qt feature that has been marked deprecated (the exact warnings
+# depend on your compiler). Please consult the documentation of the
+# deprecated API in order to know how to port your code away from it.
+DEFINES += QT_DEPRECATED_WARNINGS
+
+# You can also make your code fail to compile if it uses deprecated APIs.
+# In order to do so, uncomment the following line.
+# You can also select to disable deprecated APIs only up to a certain version of Qt.
+#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
+
+SOURCES += \
+    main.cpp \
+    widget.cpp
+
+HEADERS += \
+    widget.h
+
+# Default rules for deployment.
+qnx: target.path = /tmp/$${TARGET}/bin
+else: unix:!android: target.path = /opt/$${TARGET}/bin
+!isEmpty(target.path): INSTALLS += target
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testFileWidget/widget.cpp libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testFileWidget/widget.cpp
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testFileWidget/widget.cpp	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testFileWidget/widget.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,57 @@
+#include "widget.h"
+#include "kfilewidget.h"
+#include <QIcon>
+#include "kpressbutton.h"
+#include <QObject>
+#include <QHBoxLayout>
+
+Widget::Widget(QWidget *parent)
+    : KWidget(parent)
+{
+    QVBoxLayout* layout = new QVBoxLayout();
+
+    KFileWidget* widget1 = new KFileWidget(this);
+    widget1->setFixedSize(150,56);
+    widget1->setMainText("文档.word");
+    widget1->setSubText("大小 1MB");
+    widget1->setIcon(QIcon::fromTheme("wps-office2019-wpsmain"));
+    widget1->setBorderRadius(0,10,0,10);
+    connect(widget1,&KFileWidget::clicked,this,[=]{
+        widget1->hide();
+    });
+
+    KFileWidget* widget2 = new KFileWidget(this);
+    widget2->setMainText("文档.word");
+    widget2->setIcon(QIcon::fromTheme("wps-office2019-wpsmain"));
+    widget2->setEnabled(false);
+    connect(widget2,&KFileWidget::clicked,this,[=]{
+        widget2->hide();
+    });
+
+    KFileWidget* widget3 = new KFileWidget(this);
+    widget3->setMainText("文档.word");
+    widget3->setIcon(QIcon::fromTheme("wps-office2019-wpsmain"));
+    widget3->setFixedSize(150,56);
+    widget3->setBorderRadius(0);
+    connect(widget3,&KFileWidget::clicked,this,[=]{
+        widget3->hide();
+    });
+
+    layout->addStretch();
+    layout->addWidget(widget1);
+    layout->addWidget(widget2);
+    layout->addWidget(widget3);
+    layout->addStretch();
+
+    QHBoxLayout* hlayout = new QHBoxLayout();
+    hlayout->addLayout(layout);
+
+    baseBar()->setLayout(hlayout);
+
+
+}
+
+Widget::~Widget()
+{
+}
+
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testFileWidget/widget.h libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testFileWidget/widget.h
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testFileWidget/widget.h	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testFileWidget/widget.h	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,17 @@
+#ifndef WIDGET_H
+#define WIDGET_H
+
+#include <QWidget>
+#include "kwidget.h"
+using namespace kdk;
+
+class Widget : public KWidget
+{
+    Q_OBJECT
+
+public:
+    Widget(QWidget *parent = nullptr);
+    ~Widget();
+};
+#endif // WIDGET_H
+
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testKLabel/main.cpp libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testKLabel/main.cpp
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testKLabel/main.cpp	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testKLabel/main.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,11 @@
+#include "widget.h"
+
+#include <QApplication>
+
+int main(int argc, char *argv[])
+{
+    QApplication a(argc, argv);
+    Widget w;
+    w.show();
+    return a.exec();
+}
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testKLabel/testKLabel.pro libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testKLabel/testKLabel.pro
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testKLabel/testKLabel.pro	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testKLabel/testKLabel.pro	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,34 @@
+QT       += core gui
+
+greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
+
+CONFIG += c++11
+
+CONFIG += link_pkgconfig
+PKGCONFIG += kysdk-widgetutils #kysdk-qtwidgets
+
+LIBS += -L/home/kylin/openkylin/applications/libkysdk-applications/build-kysdk-qtwidgets-unknown-Debug -lkysdk-qtwidgets
+INCLUDEPATH +=/home/kylin/openkylin/applications/libkysdk-applications/kysdk-qtwidgets/src
+
+# The following define makes your compiler emit warnings if you use
+# any Qt feature that has been marked deprecated (the exact warnings
+# depend on your compiler). Please consult the documentation of the
+# deprecated API in order to know how to port your code away from it.
+DEFINES += QT_DEPRECATED_WARNINGS
+
+# You can also make your code fail to compile if it uses deprecated APIs.
+# In order to do so, uncomment the following line.
+# You can also select to disable deprecated APIs only up to a certain version of Qt.
+#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
+
+SOURCES += \
+    main.cpp \
+    widget.cpp
+
+HEADERS += \
+    widget.h
+
+# Default rules for deployment.
+qnx: target.path = /tmp/$${TARGET}/bin
+else: unix:!android: target.path = /opt/$${TARGET}/bin
+!isEmpty(target.path): INSTALLS += target
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testKLabel/widget.cpp libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testKLabel/widget.cpp
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testKLabel/widget.cpp	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testKLabel/widget.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,88 @@
+#include "widget.h"
+#include "klabel.h"
+#include <QHBoxLayout>
+#include <QIcon>
+#include <QPushButton>
+#include <QDebug>
+
+using namespace kdk;
+Widget::Widget(QWidget *parent)
+    : QWidget(parent)
+{
+    QVBoxLayout* vlayout = new QVBoxLayout(this);
+    QVBoxLayout* layout = new QVBoxLayout();
+
+    KLabel *label1 = new KLabel();
+    label1->setText("我是一个测试tooltip的lable");
+    label1->setBackgroundColor(true,Qt::red);
+//    label1->setFixedWidth(100);
+
+    KLabel *label2 = new KLabel(this);
+    label2->setPixmap(QIcon::fromTheme("system-computer-symbolic").pixmap(16,16));
+    label2->setDataHightColor(true);
+    label2->setLabelType(KLabelType::DataType);
+    label2->setText("我是一个测试lable");
+
+    KLabel *label3 = new KLabel();
+    label3->setFixedWidth(100);
+    label3->setText("测\n测dawdadafauphfuawhfawhfp");
+    label3->setWordWrap(true);
+    label3->setPixmap(QIcon::fromTheme("system-computer-symbolic").pixmap(16,16));
+    label3->setLabelType(KLabelType::DataType);
+    label3->setBackgroundColor(Qt::white);
+    label3->setDataHightColor(true);
+
+    KLabel *label4 = new KLabel();
+    label4->setLabelType(KLabelType::CircleType);
+    label4->setPixmap(QIcon::fromTheme("system-computer-symbolic").pixmap(16,16));
+    label4->setFixedSize(50,50);
+    QFont font1;
+    int i = font().pointSize();
+    font1.setPointSize(i +16);
+    label1->setFont(font1);
+
+    label4->setPixmap(QIcon::fromTheme("dialog-ok").pixmap(16,16));
+    label4->setBackgroundColor(true,Qt::green);
+
+    QLabel *label5 = new QLabel();
+    label5->setText("dawdsdawdadsadajwhfahlfaw案件\n噢if煎熬if怕回复发黄皮肤熊频繁;好发好");
+    label5->setWordWrap(true);
+    label5->setFixedWidth(200);
+
+
+    QPushButton *btn1 = new QPushButton("默认");
+    QPushButton *btn2 = new QPushButton("高亮背景");
+    QPushButton *btn3 = new QPushButton("自定义背景");
+    QHBoxLayout *hlayout = new QHBoxLayout();
+    hlayout->addWidget(btn1);
+    hlayout->addWidget(btn2);
+    hlayout->addWidget(btn3);
+
+    connect(btn1,&QPushButton::clicked,this,[=]{
+        label4->setHighlightBackground(false);
+        label4->setBackgroundColor(false);
+        label4->setPixmap(QIcon::fromTheme("system-computer-symbolic").pixmap(16,16));
+    });
+    connect(btn2,&QPushButton::clicked,this,[=]{
+        label4->setHighlightBackground(true);
+        label4->setPixmap(QIcon::fromTheme("system-computer-symbolic").pixmap(16,16));
+    });
+    connect(btn3,&QPushButton::clicked,this,[=]{
+        label4->setBackgroundColor(true,QColor(82, 196, 41));
+        label4->setPixmap(QIcon::fromTheme("dialog-ok").pixmap(16,16));
+    });
+
+    layout->addWidget(label1);
+    layout->addWidget(label2);
+    qDebug()<<label5->contentsMargins();
+    layout->addWidget(label3);
+    layout->addLayout(hlayout);
+    layout->addWidget(label4);
+    layout->addWidget(label5);
+    vlayout->addLayout(layout);
+}
+
+Widget::~Widget()
+{
+}
+
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testKLabel/widget.h libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testKLabel/widget.h
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testKLabel/widget.h	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testKLabel/widget.h	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,14 @@
+#ifndef WIDGET_H
+#define WIDGET_H
+
+#include <QWidget>
+
+class Widget : public QWidget
+{
+    Q_OBJECT
+
+public:
+    Widget(QWidget *parent = nullptr);
+    ~Widget();
+};
+#endif // WIDGET_H
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testKTextedit/main.cpp libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testKTextedit/main.cpp
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testKTextedit/main.cpp	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testKTextedit/main.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,11 @@
+#include "widget.h"
+
+#include <QApplication>
+
+int main(int argc, char *argv[])
+{
+    QApplication a(argc, argv);
+    Widget w;
+    w.show();
+    return a.exec();
+}
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testKTextedit/testKTextedit.pro libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testKTextedit/testKTextedit.pro
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testKTextedit/testKTextedit.pro	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testKTextedit/testKTextedit.pro	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,34 @@
+QT       += core gui
+
+greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
+
+CONFIG += c++11
+
+CONFIG += link_pkgconfig
+PKGCONFIG += kysdk-widgetutils # kysdk-qtwidgets
+
+LIBS += -L/home/kylin/openkylin/applications/libkysdk-applications/build-kysdk-qtwidgets-unknown-Debug -lkysdk-qtwidgets
+INCLUDEPATH +=/home/kylin/openkylin/applications/libkysdk-applications/kysdk-qtwidgets/src
+
+# The following define makes your compiler emit warnings if you use
+# any Qt feature that has been marked deprecated (the exact warnings
+# depend on your compiler). Please consult the documentation of the
+# deprecated API in order to know how to port your code away from it.
+DEFINES += QT_DEPRECATED_WARNINGS
+
+# You can also make your code fail to compile if it uses deprecated APIs.
+# In order to do so, uncomment the following line.
+# You can also select to disable deprecated APIs only up to a certain version of Qt.
+#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
+
+SOURCES += \
+    main.cpp \
+    widget.cpp
+
+HEADERS += \
+    widget.h
+
+# Default rules for deployment.
+qnx: target.path = /tmp/$${TARGET}/bin
+else: unix:!android: target.path = /opt/$${TARGET}/bin
+!isEmpty(target.path): INSTALLS += target
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testKTextedit/widget.cpp libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testKTextedit/widget.cpp
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testKTextedit/widget.cpp	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testKTextedit/widget.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,129 @@
+#include "widget.h"
+#include "ktextedit.h"
+#include "kbubblewidget.h"
+#include <QBoxLayout>
+
+using namespace kdk;
+
+Widget::Widget(QWidget *parent)
+    : QWidget(parent)
+{
+    QVBoxLayout* mainLayout = new QVBoxLayout(this);
+
+    QPushButton* btn1 = new QPushButton();
+    btn1->setText("无tag-正常背景");
+    QPushButton* btn2 = new QPushButton();
+    btn2->setText("无tag-高亮背景");
+    QPushButton* btn3 = new QPushButton();
+    btn3->setText("有tag-正常背景");
+    QPushButton* btn4 = new QPushButton();
+    btn4->setText("有tag-高亮背景");
+
+    KBubbleWidget* bubbleWidget1 = new KBubbleWidget();
+    bubbleWidget1->setTailPosition(TopDirection);
+    QVBoxLayout* layout1= new QVBoxLayout(bubbleWidget1);
+    KTextEdit* edit1 = new KTextEdit();
+
+    QPushButton* button1 = new QPushButton();
+    button1->setText("关闭");
+    layout1->addWidget(edit1);
+    layout1->addWidget(button1);
+    connect(btn1,&QPushButton::clicked,this,[=]{
+        bubbleWidget1->show();
+    });
+    connect(button1,&QPushButton::clicked,this,[=]{
+        bubbleWidget1->hide();
+    });
+
+    KBubbleWidget* bubbleWidget2 = new KBubbleWidget();
+    bubbleWidget2->setTailPosition(RightDirection,TailLocation::LeftLocation);
+    bubbleWidget2->setHighlightBackground(true);
+    QVBoxLayout* layout2= new QVBoxLayout(bubbleWidget2);
+    KTextEdit* edit2 = new KTextEdit();
+    edit2->setReadOnly(true);
+    edit2->setText("这是一段测试性文字,用来测试ktextedit在只读状态(不可编辑状态)下的背景色。");
+
+    QPushButton* button2 = new QPushButton();
+    button2->setText("关闭");
+    layout2->addWidget(edit2);
+    layout2->addWidget(button2);
+    connect(btn2,&QPushButton::clicked,this,[=]{
+        bubbleWidget2->show();
+    });
+    connect(button2,&QPushButton::clicked,this,[=]{
+        bubbleWidget2->hide();
+    });
+
+    KBubbleWidget* bubbleWidget3 = new KBubbleWidget();
+    bubbleWidget3->setTailPosition(BottomDirection,TailLocation::RightLocation);
+    QVBoxLayout* layout3= new QVBoxLayout(bubbleWidget3);
+    KTextEdit* edit3 = new KTextEdit();
+
+    edit3->setLabelVisible(true);
+    edit3->setPixmap(QIcon("system-computer-symbolic").pixmap(16,16));
+    edit3->setLabelText("翻译");
+
+    QPushButton* button3 = new QPushButton();
+    button3->setText("关闭");
+    layout3->addWidget(edit3);
+    layout3->addWidget(button3);
+    connect(btn3,&QPushButton::clicked,this,[=]{
+        bubbleWidget3->show();
+    });
+    connect(button3,&QPushButton::clicked,this,[=]{
+        bubbleWidget3->hide();
+    });
+
+    KBubbleWidget* bubbleWidget4 = new KBubbleWidget();
+    bubbleWidget4->setTailPosition(LeftDirection,TailLocation::RightLocation);
+    bubbleWidget4->setHighlightBackground(true);
+    QVBoxLayout* layout4= new QVBoxLayout(bubbleWidget4);
+    KTextEdit* edit4 = new KTextEdit();
+    edit4->setLabelVisible(true);
+    edit4->setPixmap(QIcon("system-computer-symbolic").pixmap(16,16));
+    edit4->setLabelText("翻译");
+    edit4->setText("这是一段测试性文字,用来测试ktextedit在只读状态(不可编辑状态)下的背景色。");
+    edit4->setReadOnly(true);
+
+    QPushButton* button4 = new QPushButton();
+    button4->setText("关闭");
+    QPushButton* button5 = new QPushButton();
+    button5->setText("切换是否可编辑状态");
+    layout4->addWidget(edit4);
+    layout4->addWidget(button4);
+    layout4->addWidget(button5);
+    connect(btn4,&QPushButton::clicked,this,[=]{
+        bubbleWidget4->show();
+    });
+    connect(button4,&QPushButton::clicked,this,[=]{
+        bubbleWidget4->hide();
+    });
+
+    connect(button5,&QPushButton::clicked,this,[=]{
+        if(edit4->isReadOnly())
+        {
+            edit4->setReadOnly(false);
+            bubbleWidget4->setHighlightBackground(false);
+        }
+        else
+        {
+            edit4->setReadOnly(true);
+            bubbleWidget4->setHighlightBackground(true);
+        }
+    });
+
+    QHBoxLayout* hlayout1 = new QHBoxLayout();
+    QHBoxLayout* hlayout2 = new QHBoxLayout();
+    hlayout1->addWidget(btn1);
+    hlayout1->addWidget(btn2);
+    hlayout2->addWidget(btn3);
+    hlayout2->addWidget(btn4);
+    mainLayout->addLayout(hlayout1);
+    mainLayout->addLayout(hlayout2);
+
+}
+
+Widget::~Widget()
+{
+}
+
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testKTextedit/widget.h libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testKTextedit/widget.h
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testKTextedit/widget.h	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testKTextedit/widget.h	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,14 @@
+#ifndef WIDGET_H
+#define WIDGET_H
+
+#include <QWidget>
+
+class Widget : public QWidget
+{
+    Q_OBJECT
+
+public:
+    Widget(QWidget *parent = nullptr);
+    ~Widget();
+};
+#endif // WIDGET_H
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testTag/testTag.pro.user libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testTag/testTag.pro.user
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testTag/testTag.pro.user	2024-05-16 09:25:54.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testTag/testTag.pro.user	1970-01-01 08:00:00.000000000 +0800
@@ -1,314 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE QtCreatorProject>
-<!-- Written by QtCreator 4.11.0, 2021-11-17T09:43:39. -->
-<qtcreator>
- <data>
-  <variable>EnvironmentId</variable>
-  <value type="QByteArray">{2fbbdfe0-46ea-4bec-b909-73a0b852001a}</value>
- </data>
- <data>
-  <variable>ProjectExplorer.Project.ActiveTarget</variable>
-  <value type="int">0</value>
- </data>
- <data>
-  <variable>ProjectExplorer.Project.EditorSettings</variable>
-  <valuemap type="QVariantMap">
-   <value type="bool" key="EditorConfiguration.AutoIndent">true</value>
-   <value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value>
-   <value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value>
-   <valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
-    <value type="QString" key="language">Cpp</value>
-    <valuemap type="QVariantMap" key="value">
-     <value type="QByteArray" key="CurrentPreferences">CppGlobal</value>
-    </valuemap>
-   </valuemap>
-   <valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
-    <value type="QString" key="language">QmlJS</value>
-    <valuemap type="QVariantMap" key="value">
-     <value type="QByteArray" key="CurrentPreferences">QmlJSGlobal</value>
-    </valuemap>
-   </valuemap>
-   <value type="int" key="EditorConfiguration.CodeStyle.Count">2</value>
-   <value type="QByteArray" key="EditorConfiguration.Codec">UTF-8</value>
-   <value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
-   <value type="int" key="EditorConfiguration.IndentSize">4</value>
-   <value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
-   <value type="int" key="EditorConfiguration.MarginColumn">80</value>
-   <value type="bool" key="EditorConfiguration.MouseHiding">true</value>
-   <value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
-   <value type="int" key="EditorConfiguration.PaddingMode">1</value>
-   <value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
-   <value type="bool" key="EditorConfiguration.ShowMargin">false</value>
-   <value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
-   <value type="bool" key="EditorConfiguration.SmartSelectionChanging">true</value>
-   <value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
-   <value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
-   <value type="int" key="EditorConfiguration.TabSize">8</value>
-   <value type="bool" key="EditorConfiguration.UseGlobal">true</value>
-   <value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
-   <value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
-   <value type="bool" key="EditorConfiguration.cleanIndentation">true</value>
-   <value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
-   <value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
-  </valuemap>
- </data>
- <data>
-  <variable>ProjectExplorer.Project.PluginSettings</variable>
-  <valuemap type="QVariantMap"/>
- </data>
- <data>
-  <variable>ProjectExplorer.Project.Target.0</variable>
-  <valuemap type="QVariantMap">
-   <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">桌面</value>
-   <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">桌面</value>
-   <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">{83abf94d-9435-41e8-bf16-20b2a6aa9fe3}</value>
-   <value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
-   <value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
-   <value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
-   <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
-    <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/sunzhen/projects/kysdk-application/kysdk-qtwidgets/test/build-testTag-arm64-Debug</value>
-    <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
-     <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
-      <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
-      <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
-      <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">true</value>
-      <value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
-      <value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
-      <value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">false</value>
-      <value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value>
-     </valuemap>
-     <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
-      <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
-      <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
-      <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
-      <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
-      <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
-      <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
-      <value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
-     </valuemap>
-     <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
-     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
-     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
-     <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
-    </valuemap>
-    <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
-     <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
-      <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
-      <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
-      <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
-      <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
-      <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
-      <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
-      <value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
-     </valuemap>
-     <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
-     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
-     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
-     <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
-    </valuemap>
-    <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
-    <value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
-    <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
-    <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Debug</value>
-    <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
-    <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
-   </valuemap>
-   <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
-    <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/sunzhen/projects/kysdk-application/kysdk-qtwidgets/test/build-testTag-arm64-Release</value>
-    <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
-     <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
-      <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
-      <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
-      <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
-      <value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
-      <value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
-      <value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">false</value>
-      <value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value>
-     </valuemap>
-     <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
-      <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
-      <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
-      <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
-      <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
-      <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
-      <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
-      <value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
-     </valuemap>
-     <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
-     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
-     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
-     <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
-    </valuemap>
-    <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
-     <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
-      <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
-      <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
-      <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
-      <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
-      <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
-      <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
-      <value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
-     </valuemap>
-     <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
-     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
-     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
-     <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
-    </valuemap>
-    <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
-    <value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
-    <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
-    <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Release</value>
-    <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
-    <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
-   </valuemap>
-   <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.2">
-    <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/sunzhen/projects/kysdk-application/kysdk-qtwidgets/test/build-testTag-arm64-Profile</value>
-    <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
-     <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
-      <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
-      <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
-      <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">true</value>
-      <value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
-      <value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
-      <value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">true</value>
-      <value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value>
-     </valuemap>
-     <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
-      <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
-      <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
-      <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
-      <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
-      <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments"></value>
-      <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
-      <value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
-     </valuemap>
-     <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">2</value>
-     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
-     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
-     <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
-    </valuemap>
-    <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
-     <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
-      <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
-      <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
-      <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
-      <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
-      <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">clean</value>
-      <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
-      <value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
-     </valuemap>
-     <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
-     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
-     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
-     <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
-    </valuemap>
-    <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
-    <value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
-    <valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
-    <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Profile</value>
-    <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
-    <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
-   </valuemap>
-   <value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">3</value>
-   <valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
-    <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
-     <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
-     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy</value>
-     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Deploy</value>
-     <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
-    </valuemap>
-    <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
-    <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
-   </valuemap>
-   <value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
-   <valuemap type="QVariantMap" key="ProjectExplorer.Target.PluginSettings"/>
-   <valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
-    <value type="QString" key="Analyzer.Perf.CallgraphMode">dwarf</value>
-    <valuelist type="QVariantList" key="Analyzer.Perf.Events">
-     <value type="QString">cpu-cycles</value>
-    </valuelist>
-    <valuelist type="QVariantList" key="Analyzer.Perf.ExtraArguments"/>
-    <value type="int" key="Analyzer.Perf.Frequency">250</value>
-    <valuelist type="QVariantList" key="Analyzer.Perf.RecordArguments">
-     <value type="QString">-e</value>
-     <value type="QString">cpu-cycles</value>
-     <value type="QString">--call-graph</value>
-     <value type="QString">dwarf,4096</value>
-     <value type="QString">-F</value>
-     <value type="QString">250</value>
-    </valuelist>
-    <value type="QString" key="Analyzer.Perf.SampleMode">-F</value>
-    <value type="bool" key="Analyzer.Perf.Settings.UseGlobalSettings">true</value>
-    <value type="int" key="Analyzer.Perf.StackSize">4096</value>
-    <value type="bool" key="Analyzer.QmlProfiler.AggregateTraces">false</value>
-    <value type="bool" key="Analyzer.QmlProfiler.FlushEnabled">false</value>
-    <value type="uint" key="Analyzer.QmlProfiler.FlushInterval">1000</value>
-    <value type="QString" key="Analyzer.QmlProfiler.LastTraceFile"></value>
-    <value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
-    <valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
-    <value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
-    <value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
-    <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
-    <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
-    <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
-    <value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
-    <value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
-    <value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
-    <value type="QString" key="Analyzer.Valgrind.KCachegrindExecutable">kcachegrind</value>
-    <value type="int" key="Analyzer.Valgrind.LeakCheckOnFinish">1</value>
-    <value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
-    <valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
-    <value type="int" key="Analyzer.Valgrind.SelfModifyingCodeDetection">1</value>
-    <value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
-    <value type="bool" key="Analyzer.Valgrind.ShowReachable">false</value>
-    <value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
-    <value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
-    <valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
-     <value type="int">0</value>
-     <value type="int">1</value>
-     <value type="int">2</value>
-     <value type="int">3</value>
-     <value type="int">4</value>
-     <value type="int">5</value>
-     <value type="int">6</value>
-     <value type="int">7</value>
-     <value type="int">8</value>
-     <value type="int">9</value>
-     <value type="int">10</value>
-     <value type="int">11</value>
-     <value type="int">12</value>
-     <value type="int">13</value>
-     <value type="int">14</value>
-    </valuelist>
-    <value type="int" key="PE.EnvironmentAspect.Base">2</value>
-    <valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
-    <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:/home/sunzhen/projects/kysdk-application/kysdk-qtwidgets/test/testTag/testTag.pro</value>
-    <value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey">/home/sunzhen/projects/kysdk-application/kysdk-qtwidgets/test/testTag/testTag.pro</value>
-    <value type="QString" key="RunConfiguration.Arguments"></value>
-    <value type="bool" key="RunConfiguration.Arguments.multi">false</value>
-    <value type="QString" key="RunConfiguration.OverrideDebuggerStartup"></value>
-    <value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
-    <value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
-    <value type="bool" key="RunConfiguration.UseLibrarySearchPath">true</value>
-    <value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
-    <value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
-    <value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
-    <value type="QString" key="RunConfiguration.WorkingDirectory"></value>
-    <value type="QString" key="RunConfiguration.WorkingDirectory.default">/home/sunzhen/projects/kysdk-application/kysdk-qtwidgets/test/build-testTag-arm64-Debug</value>
-   </valuemap>
-   <value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
-  </valuemap>
- </data>
- <data>
-  <variable>ProjectExplorer.Project.TargetCount</variable>
-  <value type="int">1</value>
- </data>
- <data>
-  <variable>ProjectExplorer.Project.Updater.FileVersion</variable>
-  <value type="int">22</value>
- </data>
- <data>
-  <variable>Version</variable>
-  <value type="int">22</value>
- </data>
-</qtcreator>
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testWidget/build/.qmake.stash libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testWidget/build/.qmake.stash
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testWidget/build/.qmake.stash	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testWidget/build/.qmake.stash	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,23 @@
+QMAKE_CXX.QT_COMPILER_STDCXX = 201402L
+QMAKE_CXX.QMAKE_GCC_MAJOR_VERSION = 9
+QMAKE_CXX.QMAKE_GCC_MINOR_VERSION = 3
+QMAKE_CXX.QMAKE_GCC_PATCH_VERSION = 0
+QMAKE_CXX.COMPILER_MACROS = \
+    QT_COMPILER_STDCXX \
+    QMAKE_GCC_MAJOR_VERSION \
+    QMAKE_GCC_MINOR_VERSION \
+    QMAKE_GCC_PATCH_VERSION
+QMAKE_CXX.INCDIRS = \
+    /usr/include/c++/9 \
+    /usr/include/aarch64-linux-gnu/c++/9 \
+    /usr/include/c++/9/backward \
+    /usr/lib/gcc/aarch64-linux-gnu/9/include \
+    /usr/local/include \
+    /usr/include/aarch64-linux-gnu \
+    /usr/include
+QMAKE_CXX.LIBDIRS = \
+    /usr/lib/gcc/aarch64-linux-gnu/9 \
+    /usr/lib/aarch64-linux-gnu \
+    /usr/lib \
+    /lib/aarch64-linux-gnu \
+    /lib
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testWidget/build/Makefile libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testWidget/build/Makefile
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testWidget/build/Makefile	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testWidget/build/Makefile	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,526 @@
+#############################################################################
+# Makefile for building: testWidget
+# Generated by qmake (3.1) (Qt 5.12.12)
+# Project:  ../testWidget.pro
+# Template: app
+# Command: /usr/lib/qt5/bin/qmake -o Makefile ../testWidget.pro
+#############################################################################
+
+MAKEFILE      = Makefile
+
+EQ            = =
+
+####### Compiler, tools and options
+
+CC            = gcc
+CXX           = g++
+DEFINES       = -DQT_DEPRECATED_WARNINGS -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB
+CFLAGS        = -pipe -O2 -Wall -W -D_REENTRANT -fPIC $(DEFINES)
+CXXFLAGS      = -pipe -O2 -std=gnu++11 -Wall -W -D_REENTRANT -fPIC $(DEFINES)
+INCPATH       = -I../../testWidget -I. -isystem /usr/include/kysdk/applications -isystem /usr/include/kysdk/applications -isystem /usr/include/aarch64-linux-gnu/qt5 -isystem /usr/include/aarch64-linux-gnu/qt5/QtWidgets -isystem /usr/include/aarch64-linux-gnu/qt5/QtGui -isystem /usr/include/aarch64-linux-gnu/qt5/QtCore -I. -I/usr/lib/aarch64-linux-gnu/qt5/mkspecs/linux-g++
+QMAKE         = /usr/lib/qt5/bin/qmake
+DEL_FILE      = rm -f
+CHK_DIR_EXISTS= test -d
+MKDIR         = mkdir -p
+COPY          = cp -f
+COPY_FILE     = cp -f
+COPY_DIR      = cp -f -R
+INSTALL_FILE  = install -m 644 -p
+INSTALL_PROGRAM = install -m 755 -p
+INSTALL_DIR   = cp -f -R
+QINSTALL      = /usr/lib/qt5/bin/qmake -install qinstall
+QINSTALL_PROGRAM = /usr/lib/qt5/bin/qmake -install qinstall -exe
+DEL_FILE      = rm -f
+SYMLINK       = ln -f -s
+DEL_DIR       = rmdir
+MOVE          = mv -f
+TAR           = tar -cf
+COMPRESS      = gzip -9f
+DISTNAME      = testWidget1.0.0
+DISTDIR = /home/kylin/openkylin/applications/libkysdk-applications/kysdk-qtwidgets/test/testWidget/build/.tmp/testWidget1.0.0
+LINK          = g++
+LFLAGS        = -Wl,-O1
+LIBS          = $(SUBLIBS) -lkysdk-widgetutils -lkysdk-qtwidgets /usr/lib/aarch64-linux-gnu/libQt5Widgets.so /usr/lib/aarch64-linux-gnu/libQt5Gui.so /usr/lib/aarch64-linux-gnu/libQt5Core.so /usr/lib/aarch64-linux-gnu/libGL.so -lpthread   
+AR            = ar cqs
+RANLIB        = 
+SED           = sed
+STRIP         = strip
+
+####### Output directory
+
+OBJECTS_DIR   = ./
+
+####### Files
+
+SOURCES       = ../main.cpp \
+		../testwidget.cpp moc_testwidget.cpp
+OBJECTS       = main.o \
+		testwidget.o \
+		moc_testwidget.o
+DIST          = /usr/lib/aarch64-linux-gnu/qt5/mkspecs/features/spec_pre.prf \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/common/unix.conf \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/common/linux.conf \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/common/sanitize.conf \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/common/gcc-base.conf \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/common/gcc-base-unix.conf \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/common/g++-base.conf \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/common/g++-unix.conf \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/qconfig.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_Attica.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_KAuth.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_KAuthCore.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_KCodecs.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_KCompletion.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_KConfigCore.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_KConfigGui.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_KConfigWidgets.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_KCoreAddons.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_KDBusAddons.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_KGlobalAccel.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_KGuiAddons.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_KI18n.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_KIconThemes.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_KItemViews.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_KScreen.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_KService.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_KTextWidgets.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_KWaylandClient.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_KWaylandServer.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_KWidgetsAddons.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_KWindowSystem.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_KXmlGui.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_accessibility_support_private.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_bootstrap_private.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_charts.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_concurrent.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_concurrent_private.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_core.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_core_private.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_dbus.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_dbus_private.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_designer.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_devicediscovery_support_private.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_edid_support_private.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_egl_support_private.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_eglfs_kms_support_private.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_eglfsdeviceintegration_private.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_eventdispatcher_support_private.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_fb_support_private.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_fontdatabase_support_private.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_glx_support_private.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_gui.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_gui_private.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_help.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_input_support_private.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_kms_support_private.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_linuxaccessibility_support_private.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_multimedia.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_multimediawidgets.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_network.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_network_private.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_opengl.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_opengl_private.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_openglextensions.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_openglextensions_private.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_platformcompositor_support_private.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_printsupport.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_printsupport_private.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_qml.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_qmltest.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_quick.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_quickwidgets.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_script.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_scripttools.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_service_support_private.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_sql.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_sql_private.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_svg.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_testlib.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_testlib_private.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_theme_support_private.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_uiplugin.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_uitools.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_vulkan_support_private.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_widgets.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_widgets_private.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_x11extras.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_xcb_qpa_lib_private.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_xml.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_xml_private.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_QApt.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_SonnetCore.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_SonnetUi.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/features/qt_functions.prf \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/features/qt_config.prf \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/linux-g++/qmake.conf \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/features/spec_post.prf \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/features/exclusive_builds.prf \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/features/toolchain.prf \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/features/default_pre.prf \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/features/resolve_config.prf \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/features/default_post.prf \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/features/link_pkgconfig.prf \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/features/warn_on.prf \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/features/qt.prf \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/features/resources.prf \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/features/moc.prf \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/features/unix/opengl.prf \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/features/uic.prf \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/features/unix/thread.prf \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/features/qmake_use.prf \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/features/file_copies.prf \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/features/testcase_targets.prf \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/features/exceptions.prf \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/features/yacc.prf \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/features/lex.prf \
+		../../testWidget.pro ../testwidget.h ../main.cpp \
+		../testwidget.cpp
+QMAKE_TARGET  = testWidget
+DESTDIR       = 
+TARGET        = testWidget
+
+
+first: all
+####### Build rules
+
+testWidget:  $(OBJECTS)  
+	$(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJCOMP) $(LIBS)
+
+Makefile: ../testWidget.pro /usr/lib/aarch64-linux-gnu/qt5/mkspecs/linux-g++/qmake.conf /usr/lib/aarch64-linux-gnu/qt5/mkspecs/features/spec_pre.prf \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/common/unix.conf \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/common/linux.conf \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/common/sanitize.conf \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/common/gcc-base.conf \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/common/gcc-base-unix.conf \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/common/g++-base.conf \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/common/g++-unix.conf \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/qconfig.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_Attica.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_KAuth.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_KAuthCore.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_KCodecs.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_KCompletion.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_KConfigCore.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_KConfigGui.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_KConfigWidgets.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_KCoreAddons.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_KDBusAddons.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_KGlobalAccel.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_KGuiAddons.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_KI18n.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_KIconThemes.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_KItemViews.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_KScreen.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_KService.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_KTextWidgets.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_KWaylandClient.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_KWaylandServer.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_KWidgetsAddons.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_KWindowSystem.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_KXmlGui.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_accessibility_support_private.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_bootstrap_private.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_charts.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_concurrent.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_concurrent_private.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_core.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_core_private.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_dbus.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_dbus_private.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_designer.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_devicediscovery_support_private.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_edid_support_private.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_egl_support_private.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_eglfs_kms_support_private.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_eglfsdeviceintegration_private.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_eventdispatcher_support_private.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_fb_support_private.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_fontdatabase_support_private.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_glx_support_private.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_gui.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_gui_private.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_help.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_input_support_private.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_kms_support_private.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_linuxaccessibility_support_private.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_multimedia.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_multimediawidgets.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_network.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_network_private.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_opengl.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_opengl_private.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_openglextensions.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_openglextensions_private.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_platformcompositor_support_private.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_printsupport.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_printsupport_private.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_qml.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_qmltest.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_quick.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_quickwidgets.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_script.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_scripttools.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_service_support_private.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_sql.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_sql_private.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_svg.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_testlib.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_testlib_private.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_theme_support_private.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_uiplugin.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_uitools.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_vulkan_support_private.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_widgets.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_widgets_private.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_x11extras.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_xcb_qpa_lib_private.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_xml.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_xml_private.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_QApt.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_SonnetCore.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_SonnetUi.pri \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/features/qt_functions.prf \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/features/qt_config.prf \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/linux-g++/qmake.conf \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/features/spec_post.prf \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/features/exclusive_builds.prf \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/features/toolchain.prf \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/features/default_pre.prf \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/features/resolve_config.prf \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/features/default_post.prf \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/features/link_pkgconfig.prf \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/features/warn_on.prf \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/features/qt.prf \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/features/resources.prf \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/features/moc.prf \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/features/unix/opengl.prf \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/features/uic.prf \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/features/unix/thread.prf \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/features/qmake_use.prf \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/features/file_copies.prf \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/features/testcase_targets.prf \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/features/exceptions.prf \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/features/yacc.prf \
+		/usr/lib/aarch64-linux-gnu/qt5/mkspecs/features/lex.prf \
+		../testWidget.pro \
+		/usr/lib/aarch64-linux-gnu/libkysdk-widgetutils.prl \
+		/usr/lib/aarch64-linux-gnu/libkysdk-qtwidgets.prl
+	$(QMAKE) -o Makefile ../testWidget.pro
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/features/spec_pre.prf:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/common/unix.conf:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/common/linux.conf:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/common/sanitize.conf:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/common/gcc-base.conf:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/common/gcc-base-unix.conf:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/common/g++-base.conf:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/common/g++-unix.conf:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/qconfig.pri:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_Attica.pri:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_KAuth.pri:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_KAuthCore.pri:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_KCodecs.pri:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_KCompletion.pri:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_KConfigCore.pri:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_KConfigGui.pri:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_KConfigWidgets.pri:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_KCoreAddons.pri:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_KDBusAddons.pri:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_KGlobalAccel.pri:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_KGuiAddons.pri:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_KI18n.pri:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_KIconThemes.pri:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_KItemViews.pri:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_KScreen.pri:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_KService.pri:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_KTextWidgets.pri:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_KWaylandClient.pri:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_KWaylandServer.pri:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_KWidgetsAddons.pri:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_KWindowSystem.pri:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_KXmlGui.pri:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_accessibility_support_private.pri:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_bootstrap_private.pri:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_charts.pri:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_concurrent.pri:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_concurrent_private.pri:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_core.pri:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_core_private.pri:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_dbus.pri:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_dbus_private.pri:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_designer.pri:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_devicediscovery_support_private.pri:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_edid_support_private.pri:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_egl_support_private.pri:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_eglfs_kms_support_private.pri:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_eglfsdeviceintegration_private.pri:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_eventdispatcher_support_private.pri:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_fb_support_private.pri:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_fontdatabase_support_private.pri:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_glx_support_private.pri:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_gui.pri:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_gui_private.pri:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_help.pri:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_input_support_private.pri:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_kms_support_private.pri:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_linuxaccessibility_support_private.pri:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_multimedia.pri:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_multimediawidgets.pri:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_network.pri:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_network_private.pri:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_opengl.pri:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_opengl_private.pri:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_openglextensions.pri:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_openglextensions_private.pri:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_platformcompositor_support_private.pri:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_printsupport.pri:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_printsupport_private.pri:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_qml.pri:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_qmltest.pri:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_quick.pri:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_quickwidgets.pri:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_script.pri:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_scripttools.pri:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_service_support_private.pri:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_sql.pri:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_sql_private.pri:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_svg.pri:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_testlib.pri:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_testlib_private.pri:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_theme_support_private.pri:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_uiplugin.pri:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_uitools.pri:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_vulkan_support_private.pri:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_widgets.pri:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_widgets_private.pri:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_x11extras.pri:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_xcb_qpa_lib_private.pri:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_xml.pri:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_lib_xml_private.pri:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_QApt.pri:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_SonnetCore.pri:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/modules/qt_SonnetUi.pri:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/features/qt_functions.prf:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/features/qt_config.prf:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/linux-g++/qmake.conf:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/features/spec_post.prf:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/features/exclusive_builds.prf:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/features/toolchain.prf:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/features/default_pre.prf:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/features/resolve_config.prf:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/features/default_post.prf:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/features/link_pkgconfig.prf:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/features/warn_on.prf:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/features/qt.prf:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/features/resources.prf:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/features/moc.prf:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/features/unix/opengl.prf:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/features/uic.prf:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/features/unix/thread.prf:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/features/qmake_use.prf:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/features/file_copies.prf:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/features/testcase_targets.prf:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/features/exceptions.prf:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/features/yacc.prf:
+/usr/lib/aarch64-linux-gnu/qt5/mkspecs/features/lex.prf:
+../testWidget.pro:
+/usr/lib/aarch64-linux-gnu/libkysdk-widgetutils.prl:
+/usr/lib/aarch64-linux-gnu/libkysdk-qtwidgets.prl:
+qmake: FORCE
+	@$(QMAKE) -o Makefile ../testWidget.pro
+
+qmake_all: FORCE
+
+
+all: Makefile testWidget
+
+dist: distdir FORCE
+	(cd `dirname $(DISTDIR)` && $(TAR) $(DISTNAME).tar $(DISTNAME) && $(COMPRESS) $(DISTNAME).tar) && $(MOVE) `dirname $(DISTDIR)`/$(DISTNAME).tar.gz . && $(DEL_FILE) -r $(DISTDIR)
+
+distdir: FORCE
+	@test -d $(DISTDIR) || mkdir -p $(DISTDIR)
+	$(COPY_FILE) --parents $(DIST) $(DISTDIR)/
+	$(COPY_FILE) --parents /usr/lib/aarch64-linux-gnu/qt5/mkspecs/features/data/dummy.cpp $(DISTDIR)/
+	$(COPY_FILE) --parents ../testwidget.h $(DISTDIR)/
+	$(COPY_FILE) --parents ../main.cpp ../testwidget.cpp $(DISTDIR)/
+
+
+clean: compiler_clean 
+	-$(DEL_FILE) $(OBJECTS)
+	-$(DEL_FILE) *~ core *.core
+
+
+distclean: clean 
+	-$(DEL_FILE) $(TARGET) 
+	-$(DEL_FILE) .qmake.stash
+	-$(DEL_FILE) Makefile
+
+
+####### Sub-libraries
+
+mocclean: compiler_moc_header_clean compiler_moc_objc_header_clean compiler_moc_source_clean
+
+mocables: compiler_moc_header_make_all compiler_moc_objc_header_make_all compiler_moc_source_make_all
+
+check: first
+
+benchmark: first
+
+compiler_rcc_make_all:
+compiler_rcc_clean:
+compiler_moc_predefs_make_all: moc_predefs.h
+compiler_moc_predefs_clean:
+	-$(DEL_FILE) moc_predefs.h
+moc_predefs.h: /usr/lib/aarch64-linux-gnu/qt5/mkspecs/features/data/dummy.cpp
+	g++ -pipe -O2 -std=gnu++11 -Wall -W -dM -E -o moc_predefs.h /usr/lib/aarch64-linux-gnu/qt5/mkspecs/features/data/dummy.cpp
+
+compiler_moc_header_make_all: moc_testwidget.cpp
+compiler_moc_header_clean:
+	-$(DEL_FILE) moc_testwidget.cpp
+moc_testwidget.cpp: ../testwidget.h \
+		moc_predefs.h \
+		/usr/lib/qt5/bin/moc
+	/usr/lib/qt5/bin/moc $(DEFINES) --include /home/kylin/openkylin/applications/libkysdk-applications/kysdk-qtwidgets/test/testWidget/build/moc_predefs.h -I/usr/lib/aarch64-linux-gnu/qt5/mkspecs/linux-g++ -I/home/kylin/openkylin/applications/libkysdk-applications/kysdk-qtwidgets/test/testWidget -I/usr/include/kysdk/applications -I/usr/include/kysdk/applications -I/usr/include/aarch64-linux-gnu/qt5 -I/usr/include/aarch64-linux-gnu/qt5/QtWidgets -I/usr/include/aarch64-linux-gnu/qt5/QtGui -I/usr/include/aarch64-linux-gnu/qt5/QtCore -I. -I/usr/include/c++/9 -I/usr/include/aarch64-linux-gnu/c++/9 -I/usr/include/c++/9/backward -I/usr/lib/gcc/aarch64-linux-gnu/9/include -I/usr/local/include -I/usr/include/aarch64-linux-gnu -I/usr/include ../testwidget.h -o moc_testwidget.cpp
+
+compiler_moc_objc_header_make_all:
+compiler_moc_objc_header_clean:
+compiler_moc_source_make_all:
+compiler_moc_source_clean:
+compiler_uic_make_all:
+compiler_uic_clean:
+compiler_yacc_decl_make_all:
+compiler_yacc_decl_clean:
+compiler_yacc_impl_make_all:
+compiler_yacc_impl_clean:
+compiler_lex_make_all:
+compiler_lex_clean:
+compiler_clean: compiler_moc_predefs_clean compiler_moc_header_clean 
+
+####### Compile
+
+main.o: ../main.cpp ../testwidget.h
+	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o main.o ../main.cpp
+
+testwidget.o: ../testwidget.cpp ../testwidget.h
+	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o testwidget.o ../testwidget.cpp
+
+moc_testwidget.o: moc_testwidget.cpp 
+	$(CXX) -c $(CXXFLAGS) $(INCPATH) -o moc_testwidget.o moc_testwidget.cpp
+
+####### Install
+
+install_target: first FORCE
+	@test -d $(INSTALL_ROOT)/opt/testWidget/bin || mkdir -p $(INSTALL_ROOT)/opt/testWidget/bin
+	-$(QINSTALL_PROGRAM) $(QMAKE_TARGET) $(INSTALL_ROOT)/opt/testWidget/bin/$(QMAKE_TARGET)
+	-$(STRIP) $(INSTALL_ROOT)/opt/testWidget/bin/$(QMAKE_TARGET)
+
+uninstall_target: FORCE
+	-$(DEL_FILE) $(INSTALL_ROOT)/opt/testWidget/bin/$(QMAKE_TARGET)
+	-$(DEL_DIR) $(INSTALL_ROOT)/opt/testWidget/bin/ 
+
+
+install: install_target  FORCE
+
+uninstall: uninstall_target  FORCE
+
+FORCE:
+
Binary files /tmp/tmpqylf0shy/9xkMnedI4d/libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testWidget/build/main.o and /tmp/tmpqylf0shy/mEy9aQSYLZ/libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testWidget/build/main.o differ
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testWidget/build/moc_predefs.h libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testWidget/build/moc_predefs.h
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testWidget/build/moc_predefs.h	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testWidget/build/moc_predefs.h	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,406 @@
+#define __SSP_STRONG__ 3
+#define __DBL_MIN_EXP__ (-1021)
+#define __FLT32X_MAX_EXP__ 1024
+#define __cpp_attributes 200809
+#define __UINT_LEAST16_MAX__ 0xffff
+#define __ARM_SIZEOF_WCHAR_T 4
+#define __ATOMIC_ACQUIRE 2
+#define __FLT128_MAX_10_EXP__ 4932
+#define __FLT_MIN__ 1.17549435082228750796873653722224568e-38F
+#define __GCC_IEC_559_COMPLEX 2
+#define __UINT_LEAST8_TYPE__ unsigned char
+#define __INTMAX_C(c) c ## L
+#define __CHAR_BIT__ 8
+#define __UINT8_MAX__ 0xff
+#define __WINT_MAX__ 0xffffffffU
+#define __FLT32_MIN_EXP__ (-125)
+#define __cpp_static_assert 200410
+#define __ORDER_LITTLE_ENDIAN__ 1234
+#define __SIZE_MAX__ 0xffffffffffffffffUL
+#define __WCHAR_MAX__ 0xffffffffU
+#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 1
+#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2 1
+#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 1
+#define __DBL_DENORM_MIN__ double(4.94065645841246544176568792868221372e-324L)
+#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_8 1
+#define __GCC_ATOMIC_CHAR_LOCK_FREE 2
+#define __GCC_IEC_559 2
+#define __FLT32X_DECIMAL_DIG__ 17
+#define __FLT_EVAL_METHOD__ 0
+#define __unix__ 1
+#define __cpp_binary_literals 201304
+#define __FLT64_DECIMAL_DIG__ 17
+#define __GCC_ATOMIC_CHAR32_T_LOCK_FREE 2
+#define __cpp_variadic_templates 200704
+#define __UINT_FAST64_MAX__ 0xffffffffffffffffUL
+#define __SIG_ATOMIC_TYPE__ int
+#define __DBL_MIN_10_EXP__ (-307)
+#define __FLT16_EPSILON__ 9.76562500000000000000000000000000000e-4F16
+#define __FINITE_MATH_ONLY__ 0
+#define __ARM_FEATURE_UNALIGNED 1
+#define __GNUC_PATCHLEVEL__ 0
+#define __FLT32_HAS_DENORM__ 1
+#define __UINT_FAST8_MAX__ 0xff
+#define __cpp_rvalue_reference 200610
+#define __has_include(STR) __has_include__(STR)
+#define __DEC64_MAX_EXP__ 385
+#define __INT8_C(c) c
+#define __INT_LEAST8_WIDTH__ 8
+#define __UINT_LEAST64_MAX__ 0xffffffffffffffffUL
+#define __SHRT_MAX__ 0x7fff
+#define __LDBL_MAX__ 1.18973149535723176508575932662800702e+4932L
+#define __ARM_FEATURE_IDIV 1
+#define __FLT64X_MAX_10_EXP__ 4932
+#define __ARM_FP 14
+#define __UINT_LEAST8_MAX__ 0xff
+#define __GCC_ATOMIC_BOOL_LOCK_FREE 2
+#define __FLT128_DENORM_MIN__ 6.47517511943802511092443895822764655e-4966F128
+#define __UINTMAX_TYPE__ long unsigned int
+#define __linux 1
+#define __DEC32_EPSILON__ 1E-6DF
+#define __FLT_EVAL_METHOD_TS_18661_3__ 0
+#define __OPTIMIZE__ 1
+#define __CHAR_UNSIGNED__ 1
+#define __UINT32_MAX__ 0xffffffffU
+#define __GXX_EXPERIMENTAL_CXX0X__ 1
+#define __AARCH64_CMODEL_SMALL__ 1
+#define __LDBL_MAX_EXP__ 16384
+#define __FLT128_MIN_EXP__ (-16381)
+#define __WINT_MIN__ 0U
+#define __linux__ 1
+#define __FLT128_MIN_10_EXP__ (-4931)
+#define __INT_LEAST16_WIDTH__ 16
+#define __SCHAR_MAX__ 0x7f
+#define __FLT128_MANT_DIG__ 113
+#define __WCHAR_MIN__ 0U
+#define __INT64_C(c) c ## L
+#define __DBL_DIG__ 15
+#define __GCC_ATOMIC_POINTER_LOCK_FREE 2
+#define __FLT64X_MANT_DIG__ 113
+#define _FORTIFY_SOURCE 2
+#define __SIZEOF_INT__ 4
+#define __SIZEOF_POINTER__ 8
+#define __GCC_ATOMIC_CHAR16_T_LOCK_FREE 2
+#define __USER_LABEL_PREFIX__ 
+#define __FLT64X_EPSILON__ 1.92592994438723585305597794258492732e-34F64x
+#define __STDC_HOSTED__ 1
+#define __LDBL_HAS_INFINITY__ 1
+#define __ARM_ALIGN_MAX_STACK_PWR 16
+#define __FLT32_DIG__ 6
+#define __FLT_EPSILON__ 1.19209289550781250000000000000000000e-7F
+#define __GXX_WEAK__ 1
+#define __SHRT_WIDTH__ 16
+#define __LDBL_MIN__ 3.36210314311209350626267781732175260e-4932L
+#define __DEC32_MAX__ 9.999999E96DF
+#define __cpp_threadsafe_static_init 200806
+#define __ARM_SIZEOF_MINIMAL_ENUM 4
+#define __FLT64X_DENORM_MIN__ 6.47517511943802511092443895822764655e-4966F64x
+#define __FLT32X_HAS_INFINITY__ 1
+#define __INT32_MAX__ 0x7fffffff
+#define __INT_WIDTH__ 32
+#define __SIZEOF_LONG__ 8
+#define __STDC_IEC_559__ 1
+#define __STDC_ISO_10646__ 201706L
+#define __UINT16_C(c) c
+#define __PTRDIFF_WIDTH__ 64
+#define __DECIMAL_DIG__ 36
+#define __FLT64_EPSILON__ 2.22044604925031308084726333618164062e-16F64
+#define __gnu_linux__ 1
+#define __INTMAX_WIDTH__ 64
+#define __FLT64_MIN_EXP__ (-1021)
+#define __has_include_next(STR) __has_include_next__(STR)
+#define __FLT64X_MIN_10_EXP__ (-4931)
+#define __LDBL_HAS_QUIET_NAN__ 1
+#define __FLT16_MIN_EXP__ (-13)
+#define __FLT64_MANT_DIG__ 53
+#define __GNUC__ 9
+#define __GXX_RTTI 1
+#define __pie__ 2
+#define __cpp_delegating_constructors 200604
+#define __FLT_HAS_DENORM__ 1
+#define __SIZEOF_LONG_DOUBLE__ 16
+#define __BIGGEST_ALIGNMENT__ 16
+#define __STDC_UTF_16__ 1
+#define __FLT64_MAX_10_EXP__ 308
+#define __FLT16_MAX_10_EXP__ 4
+#define __FLT32_HAS_INFINITY__ 1
+#define __DBL_MAX__ double(1.79769313486231570814527423731704357e+308L)
+#define __cpp_raw_strings 200710
+#define __INT_FAST32_MAX__ 0x7fffffffffffffffL
+#define __DBL_HAS_INFINITY__ 1
+#define __HAVE_SPECULATION_SAFE_VALUE 1
+#define __DEC32_MIN_EXP__ (-94)
+#define __INTPTR_WIDTH__ 64
+#define __FLT32X_HAS_DENORM__ 1
+#define __INT_FAST16_TYPE__ long int
+#define __LDBL_HAS_DENORM__ 1
+#define __cplusplus 201103L
+#define __cpp_ref_qualifiers 200710
+#define __DEC128_MAX__ 9.999999999999999999999999999999999E6144DL
+#define __INT_LEAST32_MAX__ 0x7fffffff
+#define __DEC32_MIN__ 1E-95DF
+#define __DEPRECATED 1
+#define __cpp_rvalue_references 200610
+#define __DBL_MAX_EXP__ 1024
+#define __WCHAR_WIDTH__ 32
+#define __FLT32_MAX__ 3.40282346638528859811704183484516925e+38F32
+#define __DEC128_EPSILON__ 1E-33DL
+#define __FLT16_DECIMAL_DIG__ 5
+#define __PTRDIFF_MAX__ 0x7fffffffffffffffL
+#define __FLT32_HAS_QUIET_NAN__ 1
+#define __GNUG__ 9
+#define __LONG_LONG_MAX__ 0x7fffffffffffffffLL
+#define __SIZEOF_SIZE_T__ 8
+#define __ARM_ALIGN_MAX_PWR 28
+#define __cpp_nsdmi 200809
+#define __FLT64X_MIN_EXP__ (-16381)
+#define __SIZEOF_WINT_T__ 4
+#define __LONG_LONG_WIDTH__ 64
+#define __cpp_initializer_lists 200806
+#define __FLT32_MAX_EXP__ 128
+#define __cpp_hex_float 201603
+#define __GCC_HAVE_DWARF2_CFI_ASM 1
+#define __ARM_FP16_FORMAT_IEEE 1
+#define __GXX_ABI_VERSION 1013
+#define __FLT128_HAS_INFINITY__ 1
+#define __FLT_MIN_EXP__ (-125)
+#define __FLT16_MANT_DIG__ 11
+#define __cpp_lambdas 200907
+#define __FLT64X_HAS_QUIET_NAN__ 1
+#define __INT_FAST64_TYPE__ long int
+#define __FP_FAST_FMAF 1
+#define __FLT64_DENORM_MIN__ 4.94065645841246544176568792868221372e-324F64
+#define __DBL_MIN__ double(2.22507385850720138309023271733240406e-308L)
+#define __PIE__ 2
+#define __FLT16_DENORM_MIN__ 5.96046447753906250000000000000000000e-8F16
+#define __LP64__ 1
+#define __FLT_EVAL_METHOD_C99__ 0
+#define __FLT32X_EPSILON__ 2.22044604925031308084726333618164062e-16F32x
+#define __aarch64__ 1
+#define __FLT64_MIN_10_EXP__ (-307)
+#define __ARM_FP16_ARGS 1
+#define __FLT16_MIN_10_EXP__ (-4)
+#define __FLT64X_DECIMAL_DIG__ 36
+#define __DEC128_MIN__ 1E-6143DL
+#define __REGISTER_PREFIX__ 
+#define __UINT16_MAX__ 0xffff
+#define __FLT32_MIN__ 1.17549435082228750796873653722224568e-38F32
+#define __UINT8_TYPE__ unsigned char
+#define __FLT_MANT_DIG__ 24
+#define __LDBL_DECIMAL_DIG__ 36
+#define __VERSION__ "9.3.0"
+#define __UINT64_C(c) c ## UL
+#define __cpp_unicode_characters 200704
+#define _STDC_PREDEF_H 1
+#define __ARM_FEATURE_FMA 1
+#define __GCC_ATOMIC_INT_LOCK_FREE 2
+#define __FLT128_MAX_EXP__ 16384
+#define __FLT32_MANT_DIG__ 24
+#define __FLOAT_WORD_ORDER__ __ORDER_LITTLE_ENDIAN__
+#define __FLT32X_MIN_EXP__ (-1021)
+#define __FLT16_DIG__ 3
+#define __STDC_IEC_559_COMPLEX__ 1
+#define __FLT128_HAS_DENORM__ 1
+#define __FLT128_DIG__ 33
+#define __SCHAR_WIDTH__ 8
+#define __INT32_C(c) c
+#define __DEC64_EPSILON__ 1E-15DD
+#define __ORDER_PDP_ENDIAN__ 3412
+#define __DEC128_MIN_EXP__ (-6142)
+#define __FLT32_MAX_10_EXP__ 38
+#define __ARM_64BIT_STATE 1
+#define __INT_FAST32_TYPE__ long int
+#define __UINT_LEAST16_TYPE__ short unsigned int
+#define __FLT64X_HAS_INFINITY__ 1
+#define unix 1
+#define __DBL_HAS_DENORM__ 1
+#define __INT16_MAX__ 0x7fff
+#define __cpp_rtti 199711
+#define __SIZE_TYPE__ long unsigned int
+#define __UINT64_MAX__ 0xffffffffffffffffUL
+#define __FLT64X_DIG__ 33
+#define __INT8_TYPE__ signed char
+#define __ELF__ 1
+#define __FLT_RADIX__ 2
+#define __INT_LEAST16_TYPE__ short int
+#define __ARM_ARCH_PROFILE 65
+#define __LDBL_EPSILON__ 1.92592994438723585305597794258492732e-34L
+#define __UINTMAX_C(c) c ## UL
+#define __GLIBCXX_BITSIZE_INT_N_0 128
+#define __ARM_PCS_AAPCS64 1
+#define __SIG_ATOMIC_MAX__ 0x7fffffff
+#define __GCC_ATOMIC_WCHAR_T_LOCK_FREE 2
+#define __SIZEOF_PTRDIFF_T__ 8
+#define __FLT32X_MANT_DIG__ 53
+#define __AARCH64EL__ 1
+#define __FLT16_MAX_EXP__ 16
+#define __DEC32_SUBNORMAL_MIN__ 0.000001E-95DF
+#define __INT_FAST16_MAX__ 0x7fffffffffffffffL
+#define __FLT64_DIG__ 15
+#define __UINT_FAST32_MAX__ 0xffffffffffffffffUL
+#define __UINT_LEAST64_TYPE__ long unsigned int
+#define __FLT_HAS_QUIET_NAN__ 1
+#define __FLT_MAX_10_EXP__ 38
+#define __LONG_MAX__ 0x7fffffffffffffffL
+#define __FLT64X_HAS_DENORM__ 1
+#define __DEC128_SUBNORMAL_MIN__ 0.000000000000000000000000000000001E-6143DL
+#define __FLT_HAS_INFINITY__ 1
+#define __unix 1
+#define __cpp_unicode_literals 200710
+#define __UINT_FAST16_TYPE__ long unsigned int
+#define __DEC64_MAX__ 9.999999999999999E384DD
+#define __INT_FAST32_WIDTH__ 64
+#define __CHAR16_TYPE__ short unsigned int
+#define __PRAGMA_REDEFINE_EXTNAME 1
+#define __SIZE_WIDTH__ 64
+#define __INT_LEAST16_MAX__ 0x7fff
+#define __DEC64_MANT_DIG__ 16
+#define __INT64_MAX__ 0x7fffffffffffffffL
+#define __UINT_LEAST32_MAX__ 0xffffffffU
+#define __FLT32_DENORM_MIN__ 1.40129846432481707092372958328991613e-45F32
+#define __GCC_ATOMIC_LONG_LOCK_FREE 2
+#define __SIG_ATOMIC_WIDTH__ 32
+#define __INT_LEAST64_TYPE__ long int
+#define __ARM_FEATURE_CLZ 1
+#define __INT16_TYPE__ short int
+#define __INT_LEAST8_TYPE__ signed char
+#define __FLT16_MAX__ 6.55040000000000000000000000000000000e+4F16
+#define __DEC32_MAX_EXP__ 97
+#define __INT_FAST8_MAX__ 0x7f
+#define __ARM_ARCH 8
+#define __FLT128_MAX__ 1.18973149535723176508575932662800702e+4932F128
+#define __INTPTR_MAX__ 0x7fffffffffffffffL
+#define linux 1
+#define __cpp_range_based_for 200907
+#define __FLT64_HAS_QUIET_NAN__ 1
+#define __FLT32_MIN_10_EXP__ (-37)
+#define __EXCEPTIONS 1
+#define __LDBL_MANT_DIG__ 113
+#define __DBL_HAS_QUIET_NAN__ 1
+#define __FLT64_HAS_INFINITY__ 1
+#define __FLT64X_MAX__ 1.18973149535723176508575932662800702e+4932F64x
+#define __FLT16_HAS_INFINITY__ 1
+#define __SIG_ATOMIC_MIN__ (-__SIG_ATOMIC_MAX__ - 1)
+#define __INTPTR_TYPE__ long int
+#define __UINT16_TYPE__ short unsigned int
+#define __WCHAR_TYPE__ unsigned int
+#define __SIZEOF_FLOAT__ 4
+#define __pic__ 2
+#define __UINTPTR_MAX__ 0xffffffffffffffffUL
+#define __ARM_ARCH_8A 1
+#define __INT_FAST64_WIDTH__ 64
+#define __DEC64_MIN_EXP__ (-382)
+#define __cpp_decltype 200707
+#define __FLT32_DECIMAL_DIG__ 9
+#define __INT_FAST64_MAX__ 0x7fffffffffffffffL
+#define __GCC_ATOMIC_TEST_AND_SET_TRUEVAL 1
+#define __FLT_DIG__ 6
+#define __FLT64X_MAX_EXP__ 16384
+#define __UINT_FAST64_TYPE__ long unsigned int
+#define __INT_MAX__ 0x7fffffff
+#define __FLT16_HAS_QUIET_NAN__ 1
+#define __INT64_TYPE__ long int
+#define __FLT_MAX_EXP__ 128
+#define __ORDER_BIG_ENDIAN__ 4321
+#define __DBL_MANT_DIG__ 53
+#define __cpp_inheriting_constructors 201511
+#define __INT_LEAST64_MAX__ 0x7fffffffffffffffL
+#define __FP_FAST_FMAF32 1
+#define __DEC64_MIN__ 1E-383DD
+#define __WINT_TYPE__ unsigned int
+#define __UINT_LEAST32_TYPE__ unsigned int
+#define __SIZEOF_SHORT__ 2
+#define __LDBL_MIN_EXP__ (-16381)
+#define __FLT64_MAX__ 1.79769313486231570814527423731704357e+308F64
+#define __WINT_WIDTH__ 32
+#define __FP_FAST_FMAF64 1
+#define __INT_LEAST8_MAX__ 0x7f
+#define __FLT32X_MAX_10_EXP__ 308
+#define __SIZEOF_INT128__ 16
+#define __FLT16_MIN__ 6.10351562500000000000000000000000000e-5F16
+#define __WCHAR_UNSIGNED__ 1
+#define __LDBL_MAX_10_EXP__ 4932
+#define __ATOMIC_RELAXED 0
+#define __DBL_EPSILON__ double(2.22044604925031308084726333618164062e-16L)
+#define __FLT128_MIN__ 3.36210314311209350626267781732175260e-4932F128
+#define _LP64 1
+#define __UINT8_C(c) c
+#define __FLT64_MAX_EXP__ 1024
+#define __INT_LEAST32_TYPE__ int
+#define __SIZEOF_WCHAR_T__ 4
+#define __ARM_NEON 1
+#define __FLT128_HAS_QUIET_NAN__ 1
+#define __INT_FAST8_TYPE__ signed char
+#define __FLT64X_MIN__ 3.36210314311209350626267781732175260e-4932F64x
+#define __GNUC_STDC_INLINE__ 1
+#define __FLT64_HAS_DENORM__ 1
+#define __FLT32_EPSILON__ 1.19209289550781250000000000000000000e-7F32
+#define __FP_FAST_FMAF32x 1
+#define __FLT16_HAS_DENORM__ 1
+#define __DBL_DECIMAL_DIG__ 17
+#define __STDC_UTF_32__ 1
+#define __INT_FAST8_WIDTH__ 8
+#define __DEC_EVAL_METHOD__ 2
+#define __FLT32X_MAX__ 1.79769313486231570814527423731704357e+308F32x
+#define __cpp_runtime_arrays 198712
+#define __UINT64_TYPE__ long unsigned int
+#define __UINT32_C(c) c ## U
+#define __INTMAX_MAX__ 0x7fffffffffffffffL
+#define __cpp_alias_templates 200704
+#define __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__
+#define __FLT_DENORM_MIN__ 1.40129846432481707092372958328991613e-45F
+#define __INT8_MAX__ 0x7f
+#define __LONG_WIDTH__ 64
+#define __PIC__ 2
+#define __UINT_FAST32_TYPE__ long unsigned int
+#define __CHAR32_TYPE__ unsigned int
+#define __FLT_MAX__ 3.40282346638528859811704183484516925e+38F
+#define __FP_FAST_FMA 1
+#define __cpp_constexpr 200704
+#define __ARM_FEATURE_NUMERIC_MAXMIN 1
+#define __INT32_TYPE__ int
+#define __SIZEOF_DOUBLE__ 8
+#define __cpp_exceptions 199711
+#define __FLT_MIN_10_EXP__ (-37)
+#define __FLT64_MIN__ 2.22507385850720138309023271733240406e-308F64
+#define __INT_LEAST32_WIDTH__ 32
+#define __INTMAX_TYPE__ long int
+#define __DEC128_MAX_EXP__ 6145
+#define __FLT32X_HAS_QUIET_NAN__ 1
+#define __ATOMIC_CONSUME 1
+#define __GNUC_MINOR__ 3
+#define __GLIBCXX_TYPE_INT_N_0 __int128
+#define __INT_FAST16_WIDTH__ 64
+#define __UINTMAX_MAX__ 0xffffffffffffffffUL
+#define __DEC32_MANT_DIG__ 7
+#define __FLT32X_DENORM_MIN__ 4.94065645841246544176568792868221372e-324F32x
+#define __DBL_MAX_10_EXP__ 308
+#define __LDBL_DENORM_MIN__ 6.47517511943802511092443895822764655e-4966L
+#define __INT16_C(c) c
+#define __ARM_ARCH_ISA_A64 1
+#define __STDC__ 1
+#define __FLT32X_DIG__ 15
+#define __PTRDIFF_TYPE__ long int
+#define __ATOMIC_SEQ_CST 5
+#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_16 1
+#define __UINT32_TYPE__ unsigned int
+#define __FLT32X_MIN_10_EXP__ (-307)
+#define __UINTPTR_TYPE__ long unsigned int
+#define __DEC64_SUBNORMAL_MIN__ 0.000000000000001E-383DD
+#define __DEC128_MANT_DIG__ 34
+#define __LDBL_MIN_10_EXP__ (-4931)
+#define __FLT128_EPSILON__ 1.92592994438723585305597794258492732e-34F128
+#define __SIZEOF_LONG_LONG__ 8
+#define __cpp_user_defined_literals 200809
+#define __FLT128_DECIMAL_DIG__ 36
+#define __GCC_ATOMIC_LLONG_LOCK_FREE 2
+#define __FLT32X_MIN__ 2.22507385850720138309023271733240406e-308F32x
+#define __LDBL_DIG__ 33
+#define __FLT_DECIMAL_DIG__ 9
+#define __UINT_FAST16_MAX__ 0xffffffffffffffffUL
+#define __GCC_ATOMIC_SHORT_LOCK_FREE 2
+#define __INT_LEAST64_WIDTH__ 64
+#define __UINT_FAST8_TYPE__ unsigned char
+#define _GNU_SOURCE 1
+#define __ATOMIC_ACQ_REL 4
+#define __ATOMIC_RELEASE 3
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testWidget/build/moc_testwidget.cpp libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testWidget/build/moc_testwidget.cpp
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testWidget/build/moc_testwidget.cpp	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testWidget/build/moc_testwidget.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,94 @@
+/****************************************************************************
+** Meta object code from reading C++ file 'testwidget.h'
+**
+** Created by: The Qt Meta Object Compiler version 67 (Qt 5.12.12)
+**
+** WARNING! All changes made in this file will be lost!
+*****************************************************************************/
+
+#include "../testwidget.h"
+#include <QtCore/qbytearray.h>
+#include <QtCore/qmetatype.h>
+#if !defined(Q_MOC_OUTPUT_REVISION)
+#error "The header file 'testwidget.h' doesn't include <QObject>."
+#elif Q_MOC_OUTPUT_REVISION != 67
+#error "This file was generated using the moc from 5.12.12. It"
+#error "cannot be used with the include files from this version of Qt."
+#error "(The moc has changed too much.)"
+#endif
+
+QT_BEGIN_MOC_NAMESPACE
+QT_WARNING_PUSH
+QT_WARNING_DISABLE_DEPRECATED
+struct qt_meta_stringdata_TestWidget_t {
+    QByteArrayData data[1];
+    char stringdata0[11];
+};
+#define QT_MOC_LITERAL(idx, ofs, len) \
+    Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \
+    qptrdiff(offsetof(qt_meta_stringdata_TestWidget_t, stringdata0) + ofs \
+        - idx * sizeof(QByteArrayData)) \
+    )
+static const qt_meta_stringdata_TestWidget_t qt_meta_stringdata_TestWidget = {
+    {
+QT_MOC_LITERAL(0, 0, 10) // "TestWidget"
+
+    },
+    "TestWidget"
+};
+#undef QT_MOC_LITERAL
+
+static const uint qt_meta_data_TestWidget[] = {
+
+ // content:
+       8,       // revision
+       0,       // classname
+       0,    0, // classinfo
+       0,    0, // methods
+       0,    0, // properties
+       0,    0, // enums/sets
+       0,    0, // constructors
+       0,       // flags
+       0,       // signalCount
+
+       0        // eod
+};
+
+void TestWidget::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
+{
+    Q_UNUSED(_o);
+    Q_UNUSED(_id);
+    Q_UNUSED(_c);
+    Q_UNUSED(_a);
+}
+
+QT_INIT_METAOBJECT const QMetaObject TestWidget::staticMetaObject = { {
+    &KWidget::staticMetaObject,
+    qt_meta_stringdata_TestWidget.data,
+    qt_meta_data_TestWidget,
+    qt_static_metacall,
+    nullptr,
+    nullptr
+} };
+
+
+const QMetaObject *TestWidget::metaObject() const
+{
+    return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject;
+}
+
+void *TestWidget::qt_metacast(const char *_clname)
+{
+    if (!_clname) return nullptr;
+    if (!strcmp(_clname, qt_meta_stringdata_TestWidget.stringdata0))
+        return static_cast<void*>(this);
+    return KWidget::qt_metacast(_clname);
+}
+
+int TestWidget::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
+{
+    _id = KWidget::qt_metacall(_c, _id, _a);
+    return _id;
+}
+QT_WARNING_POP
+QT_END_MOC_NAMESPACE
Binary files /tmp/tmpqylf0shy/9xkMnedI4d/libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testWidget/build/moc_testwidget.o and /tmp/tmpqylf0shy/mEy9aQSYLZ/libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testWidget/build/moc_testwidget.o differ
Binary files /tmp/tmpqylf0shy/9xkMnedI4d/libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testWidget/build/testWidget and /tmp/tmpqylf0shy/mEy9aQSYLZ/libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testWidget/build/testWidget differ
Binary files /tmp/tmpqylf0shy/9xkMnedI4d/libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testWidget/build/testwidget.o and /tmp/tmpqylf0shy/mEy9aQSYLZ/libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testWidget/build/testwidget.o differ
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testarrowtabbar/main.cpp libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testarrowtabbar/main.cpp
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testarrowtabbar/main.cpp	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testarrowtabbar/main.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,11 @@
+#include "widget.h"
+
+#include <QApplication>
+
+int main(int argc, char *argv[])
+{
+    QApplication a(argc, argv);
+    Widget w;
+    w.show();
+    return a.exec();
+}
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testarrowtabbar/testarrowtabbar.pro libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testarrowtabbar/testarrowtabbar.pro
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testarrowtabbar/testarrowtabbar.pro	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testarrowtabbar/testarrowtabbar.pro	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,33 @@
+QT       += core gui
+
+greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
+
+CONFIG += c++11
+
+
+LIBS += -L/home/kylin/openkylin/applications/libkysdk-applications/build-kysdk-qtwidgets-unknown-Debug -lkysdk-qtwidgets
+INCLUDEPATH +=/home/kylin/openkylin/applications/libkysdk-applications/kysdk-qtwidgets/src
+
+
+# The following define makes your compiler emit warnings if you use
+# any Qt feature that has been marked deprecated (the exact warnings
+# depend on your compiler). Please consult the documentation of the
+# deprecated API in order to know how to port your code away from it.
+DEFINES += QT_DEPRECATED_WARNINGS
+
+# You can also make your code fail to compile if it uses deprecated APIs.
+# In order to do so, uncomment the following line.
+# You can also select to disable deprecated APIs only up to a certain version of Qt.
+#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
+
+SOURCES += \
+    main.cpp \
+    widget.cpp
+
+HEADERS += \
+    widget.h
+
+# Default rules for deployment.
+qnx: target.path = /tmp/$${TARGET}/bin
+else: unix:!android: target.path = /opt/$${TARGET}/bin
+!isEmpty(target.path): INSTALLS += target
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testarrowtabbar/widget.cpp libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testarrowtabbar/widget.cpp
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testarrowtabbar/widget.cpp	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testarrowtabbar/widget.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,75 @@
+#include "widget.h"
+#include "karrowtabbar.h"
+#include "knativetabbar.h"
+#include <QHBoxLayout>
+#include <QLabel>
+
+using namespace kdk;
+Widget::Widget(QWidget *parent)
+    : QWidget(parent)
+{
+
+    KArrowTabBar *tab1 = new KArrowTabBar();
+    KNativeTabbar *tabBar1 = tab1->tabbar();
+    tabBar1->setTabBarStyle(KNativeTabbarStyle::SegmentLight);
+    tabBar1->addTab(QIcon::fromTheme("kylin-music"),"Segment1");
+    tabBar1->addTab("Segment2");
+    tabBar1->addTab(QIcon::fromTheme("kylin-music"),"");
+    tabBar1->addTab("Segment4");
+    tabBar1->addTab("Segment5");
+    tabBar1->addTab("Segment6");
+
+    KArrowTabBar *tab2 = new KArrowTabBar();
+    KNativeTabbar *tabBar2 = tab2->tabbar();
+    tabBar2->setTabBarStyle(KNativeTabbarStyle::SegmentDark);
+
+    tabBar2->addTab("SegmentDark1");
+    tabBar2->addTab("SegmentDark2");
+    tabBar2->addTab(QIcon::fromTheme("kylin-music"),"SegmentDark3");
+    tabBar2->addTab("SegmentDark4");
+    tabBar2->addTab("SegmentDark5");
+    tabBar2->addTab(QIcon::fromTheme("kylin-music"),"");
+    KArrowTabBar *tab3 = new KArrowTabBar();
+    KNativeTabbar *tabBar3 = tab3->tabbar();
+    tabBar3->setTabBarStyle(KNativeTabbarStyle::Sliding);
+    tabBar3->addTab(QIcon::fromTheme("ukui-dialog-success"),"正常");
+    tabBar3->addTab(QIcon::fromTheme("dialog-warning"),"错误");
+    tabBar3->addTab(QIcon::fromTheme("dialog-info"),"注意");
+    tabBar3->addTab(QIcon::fromTheme("kylin-music"),"Sliding4");
+    tabBar3->addTab("Sliding5");
+    tabBar3->addTab(QIcon::fromTheme("kylin-music"),"Sliding6");
+
+    KArrowTabBar *tab4 = new KArrowTabBar();
+    KNativeTabbar *tabBar4 = tab4->tabbar();
+    tabBar4->addTab("Segment1");
+    tabBar4->addTab("Segment2");
+    tabBar4->addTab("Segment3");
+    tabBar4->addTab("Segment4");
+    tabBar4->setTabBarStyle(KNativeTabbarStyle::SegmentDark);     //设置style
+    tabBar4->setBorderRadius(10);       //设置圆角半径,只对SegmentDark,SegmentLight样式生效
+    tabBar4->setBackgroundColor(QColor(0,255,0));   //设置背景色
+
+
+    QHBoxLayout *hlayout = new QHBoxLayout();
+    QLabel *label = new QLabel();
+    label->setText("just a test label");
+    hlayout->addWidget(label);
+
+    QVBoxLayout*vLayout = new QVBoxLayout(this);
+    vLayout->addStretch();
+    vLayout->addWidget(tab1);
+    vLayout->addWidget(tab2);
+    vLayout->addWidget(tab3);
+    vLayout->addWidget(tab4);
+    vLayout->addStretch();
+    vLayout->addStretch();
+    vLayout->addLayout(hlayout);
+    vLayout->addStretch();
+    setFixedWidth(500);
+
+}
+
+Widget::~Widget()
+{
+}
+
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testarrowtabbar/widget.h libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testarrowtabbar/widget.h
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testarrowtabbar/widget.h	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testarrowtabbar/widget.h	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,14 @@
+#ifndef WIDGET_H
+#define WIDGET_H
+
+#include <QWidget>
+
+class Widget : public QWidget
+{
+    Q_OBJECT
+
+public:
+    Widget(QWidget *parent = nullptr);
+    ~Widget();
+};
+#endif // WIDGET_H
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testclocktimer/main.cpp libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testclocktimer/main.cpp
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testclocktimer/main.cpp	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testclocktimer/main.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,11 @@
+#include "widget.h"
+
+#include <QApplication>
+
+int main(int argc, char *argv[])
+{
+    QApplication a(argc, argv);
+    Widget w;
+    w.show();
+    return a.exec();
+}
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testclocktimer/testclocktimer.pro libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testclocktimer/testclocktimer.pro
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testclocktimer/testclocktimer.pro	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testclocktimer/testclocktimer.pro	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,31 @@
+QT       += core gui
+
+greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
+
+CONFIG += c++11
+
+LIBS += -L/home/kylin/openkylin/applications/libkysdk-applications/build-kysdk-qtwidgets-unknown-Debug -lkysdk-qtwidgets
+INCLUDEPATH +=/home/kylin/openkylin/applications/libkysdk-applications/kysdk-qtwidgets/src
+
+# The following define makes your compiler emit warnings if you use
+# any Qt feature that has been marked deprecated (the exact warnings
+# depend on your compiler). Please consult the documentation of the
+# deprecated API in order to know how to port your code away from it.
+DEFINES += QT_DEPRECATED_WARNINGS
+
+# You can also make your code fail to compile if it uses deprecated APIs.
+# In order to do so, uncomment the following line.
+# You can also select to disable deprecated APIs only up to a certain version of Qt.
+#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
+
+SOURCES += \
+    main.cpp \
+    widget.cpp
+
+HEADERS += \
+    widget.h
+
+# Default rules for deployment.
+qnx: target.path = /tmp/$${TARGET}/bin
+else: unix:!android: target.path = /opt/$${TARGET}/bin
+!isEmpty(target.path): INSTALLS += target
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testclocktimer/widget.cpp libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testclocktimer/widget.cpp
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testclocktimer/widget.cpp	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testclocktimer/widget.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,61 @@
+#include "widget.h"
+#include "kclocktimer.h"
+#include <QPushButton>
+#include <QBoxLayout>
+#include <QDebug>
+
+using namespace kdk;
+
+Widget::Widget(QWidget *parent)
+    : QWidget(parent)
+{
+    QVBoxLayout *vlayout = new QVBoxLayout(this);
+    KClockTimer *clock = new KClockTimer(this);
+
+
+    QHBoxLayout *hlayout = new QHBoxLayout();
+    QPushButton *btn1 = new QPushButton("开始");
+    QPushButton *btn2 = new QPushButton("停止");
+    QPushButton *btn3 = new QPushButton("复位");
+    QPushButton *btn4 = new QPushButton("继续");
+    QPushButton *btn5 = new QPushButton("计次");
+
+    hlayout->addWidget(btn1);
+    hlayout->addWidget(btn2);
+    vlayout->addWidget(clock);
+    vlayout->addLayout(hlayout);
+
+    hlayout = new QHBoxLayout();
+    hlayout->addWidget(btn3);
+    hlayout->addWidget(btn4);
+    vlayout->addLayout(hlayout);
+
+    hlayout = new QHBoxLayout();
+    hlayout->addWidget(btn5);
+    vlayout->addLayout(hlayout);
+
+    connect(btn1,&QPushButton::clicked,clock,&KClockTimer::startStopwatch);
+    connect(btn2,&QPushButton::clicked,clock,&KClockTimer::stopStopwatch);
+    connect(btn3,&QPushButton::clicked,clock,&KClockTimer::resetStopwatch);
+    connect(btn4,&QPushButton::clicked,clock,&KClockTimer::startStopwatch);
+    connect(btn5,&QPushButton::clicked,this,[=]{
+        qDebug()<<clock->time();
+    });
+
+
+//    qint64 otherMilliseconds = stringToMilliseconds(otherTimeString); // 转换为毫秒数
+
+//    // 比较两个时间
+//    if (compareMilliseconds(currentMilliseconds, otherMilliseconds)) {
+//        // currentMilliseconds小于otherMilliseconds
+//    } else {
+//        // currentMilliseconds大于或等于otherMilliseconds
+//    }
+
+//    setFixedSize(300,200);
+}
+
+Widget::~Widget()
+{
+}
+
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testclocktimer/widget.h libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testclocktimer/widget.h
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testclocktimer/widget.h	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testclocktimer/widget.h	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,14 @@
+#ifndef WIDGET_H
+#define WIDGET_H
+
+#include <QWidget>
+
+class Widget : public QWidget
+{
+    Q_OBJECT
+
+public:
+    Widget(QWidget *parent = nullptr);
+    ~Widget();
+};
+#endif // WIDGET_H
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testcomboboxwidget/main.cpp libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testcomboboxwidget/main.cpp
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testcomboboxwidget/main.cpp	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testcomboboxwidget/main.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,11 @@
+#include "widget.h"
+
+#include <QApplication>
+
+int main(int argc, char *argv[])
+{
+    QApplication a(argc, argv);
+    Widget w;
+    w.show();
+    return a.exec();
+}
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testcomboboxwidget/testcomboboxwidget.pro libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testcomboboxwidget/testcomboboxwidget.pro
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testcomboboxwidget/testcomboboxwidget.pro	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testcomboboxwidget/testcomboboxwidget.pro	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,35 @@
+QT       += core gui
+
+greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
+
+CONFIG += c++11
+
+CONFIG += link_pkgconfig
+PKGCONFIG += gsettings-qt
+
+LIBS += -L/home/kylin/openkylin/applications/libkysdk-applications/build-kysdk-qtwidgets-unknown-Debug -lkysdk-qtwidgets
+INCLUDEPATH +=/home/kylin/openkylin/applications/libkysdk-applications/kysdk-qtwidgets/src
+
+
+# The following define makes your compiler emit warnings if you use
+# any Qt feature that has been marked deprecated (the exact warnings
+# depend on your compiler). Please consult the documentation of the
+# deprecated API in order to know how to port your code away from it.
+DEFINES += QT_DEPRECATED_WARNINGS
+
+# You can also make your code fail to compile if it uses deprecated APIs.
+# In order to do so, uncomment the following line.
+# You can also select to disable deprecated APIs only up to a certain version of Qt.
+#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
+
+SOURCES += \
+    main.cpp \
+    widget.cpp
+
+HEADERS += \
+    widget.h
+
+# Default rules for deployment.
+qnx: target.path = /tmp/$${TARGET}/bin
+else: unix:!android: target.path = /opt/$${TARGET}/bin
+!isEmpty(target.path): INSTALLS += target
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testcomboboxwidget/widget.cpp libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testcomboboxwidget/widget.cpp
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testcomboboxwidget/widget.cpp	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testcomboboxwidget/widget.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,47 @@
+#include "widget.h"
+#include "kcomboboxwidget.h"
+#include <QDebug>
+#include <QMenu>
+#include <QPushButton>
+#include <QGSettings/QGSettings>
+
+using namespace kdk;
+Widget::Widget(QWidget *parent)
+    : QWidget(parent)
+{
+    KComboBoxWidget* widget = new KComboBoxWidget(this);
+//    widget->setLabelWeekSelect("111");
+
+    QStringList list;
+    list.append("111");
+    list.append("222");
+    list.append("333");
+    list.append("444444444");
+    list.append("55555555555");
+    list.append("66666");
+    list.append("7777");
+    list.append("888");
+    widget->setStringList(list);
+    widget->setMainText("abnfaowifoawf");
+    widget->menu()->setFixedWidth(200);
+    connect(widget, &KComboBoxWidget::comBoxWidgetClicked, this, [=]{
+        qDebug()<<"xxx"<<widget->getChosenList()<<widget->width()<<widget->menu()->size();
+    });
+
+    QPushButton *btn = new QPushButton(this);
+    QMenu *menu = new QMenu(this);
+    menu->addAction("1");
+    menu->addAction("2");
+    menu->addAction("3");
+    menu->addAction("4");
+    menu->show();
+
+    btn->move(0,200);
+    btn->setMenu(menu);
+    setFixedSize(600,500);
+}
+
+Widget::~Widget()
+{
+}
+
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testcomboboxwidget/widget.h libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testcomboboxwidget/widget.h
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testcomboboxwidget/widget.h	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testcomboboxwidget/widget.h	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,14 @@
+#ifndef WIDGET_H
+#define WIDGET_H
+
+#include <QWidget>
+
+class Widget : public QWidget
+{
+    Q_OBJECT
+
+public:
+    Widget(QWidget *parent = nullptr);
+    ~Widget();
+};
+#endif // WIDGET_H
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testcrumb/main.cpp libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testcrumb/main.cpp
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testcrumb/main.cpp	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testcrumb/main.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,21 @@
+#include "widget.h"
+#include <QLibraryInfo>
+#include <QMessageBox>
+#include <QLibraryInfo>
+#include <QTranslator>
+#include <QApplication>
+#include <QDebug>
+
+int main(int argc, char *argv[])
+{
+    QApplication a(argc, argv);
+    QString qtTransPath = QLibraryInfo::location(QLibraryInfo::TranslationsPath);
+
+    QTranslator *trans_qt = new QTranslator();
+    qDebug()<<qtTransPath;
+    if (trans_qt->load(QLocale(), "qt", "_", qtTransPath))
+       qApp->installTranslator(trans_qt);
+    Widget w;
+    w.show();
+    return a.exec();
+}
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testcrumb/testcrumb.pro libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testcrumb/testcrumb.pro
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testcrumb/testcrumb.pro	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testcrumb/testcrumb.pro	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,31 @@
+QT       += core gui
+
+greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
+
+CONFIG += c++11
+
+LIBS += -L/home/kylin/openkylin/applications/libkysdk-applications/build-kysdk-qtwidgets-unknown-Debug -lkysdk-qtwidgets
+INCLUDEPATH +=/home/kylin/openkylin/applications/libkysdk-applications/kysdk-qtwidgets/src
+
+# The following define makes your compiler emit warnings if you use
+# any Qt feature that has been marked deprecated (the exact warnings
+# depend on your compiler). Please consult the documentation of the
+# deprecated API in order to know how to port your code away from it.
+DEFINES += QT_DEPRECATED_WARNINGS
+
+# You can also make your code fail to compile if it uses deprecated APIs.
+# In order to do so, uncomment the following line.
+# You can also select to disable deprecated APIs only up to a certain version of Qt.
+#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
+
+SOURCES += \
+    main.cpp \
+    widget.cpp
+
+HEADERS += \
+    widget.h
+
+# Default rules for deployment.
+qnx: target.path = /tmp/$${TARGET}/bin
+else: unix:!android: target.path = /opt/$${TARGET}/bin
+!isEmpty(target.path): INSTALLS += target
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testcrumb/widget.cpp libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testcrumb/widget.cpp
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testcrumb/widget.cpp	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testcrumb/widget.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,103 @@
+#include "widget.h"
+#include "kcrumb.h"
+#include "kborderlessbutton.h"
+#include <QBoxLayout>
+#include <QTabBar>
+#include <QMessageBox>
+
+using namespace kdk;
+Widget::Widget(QWidget *parent)
+    : QWidget(parent)
+{
+    QVBoxLayout* mainLayout = new QVBoxLayout;
+    QHBoxLayout* hLayout = new QHBoxLayout;
+    KCrumb*crumb = new KCrumb(this);
+//    QTabBar*crumb = new QTabBar(this);
+    crumb->setUsesScrollButtons(false);
+    //默认是true
+    crumb->setFlat(false);
+    crumb->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed);
+    crumb->addTab("页面目录一,页面目录一");
+    crumb->addTab("页面目录二,页面目录二");
+    crumb->addTab("页面目录三,页面目录三");
+    crumb->addTab("页面目录四,页面目录四");
+    crumb->addTab("页面目录五,页面目录五");
+//    crumb->setFixedWidth(1200);
+//    crumb->setIcon(QIcon::fromTheme("dialog-info"));  //设置KBreadCrumb的图标
+    crumb->setUsesScrollButtons(false);;
+//    crumb->addTab("长的长的长的长的长的长的");
+//    crumb->addTab("长的长的长的长的长的长的");
+
+//    crumb->setIcon(QIcon::fromTheme("dialog-info"));  //设置KBreadCrumb的图标
+//    KBorderlessButton *btn1 = new KBorderlessButton();
+//    KBorderlessButton *btn2 = new KBorderlessButton();
+//    btn1->setIcon(QIcon::fromTheme("go-previous.symbolic"));
+//    btn2->setIcon(QIcon::fromTheme("go-next.symbolic"));
+//    btn1->setFixedSize(24,24);
+//    btn2->setFixedSize(24,24);
+//    hLayout->addWidget(btn1);
+//    hLayout->addWidget(btn2);
+    hLayout->addWidget(crumb);
+
+    mainLayout->addLayout(hLayout);
+
+    hLayout = new QHBoxLayout;
+//    KCrumb*crumb2 = new KCrumb(this);
+    QTabBar*crumb2 = new QTabBar(this);
+//    //默认是true
+//    crumb->setFlat(false);  //设置KBreadCrumb是否为flat类型
+//    crumb2->setSizePolicy(QSizePolicy::Fixed,QSizePolicy::Fixed);
+    crumb2->addTab("页面目录一,页面目录一");
+    crumb2->addTab("页面目录二,页面目录二");
+    crumb2->addTab("页面目录三,页面目录三");
+    crumb2->addTab("短的");
+    crumb2->addTab("长的长的长的长的长的长的");
+////    crumb2->setIcon(QIcon::fromTheme("dialog-warning"));
+    hLayout->addWidget(crumb2);
+    mainLayout->addLayout(hLayout);
+//    crumb2->setFixedWidth(200);
+////    crumb2->setShape(QTabBar::RoundedWest);
+
+
+    mainLayout->addLayout(hLayout);
+    setLayout(mainLayout);
+
+//    if(crumb->currentIndex() == 0)
+//    {
+//        btn1->setEnabled(false);
+//    }
+//    else if(crumb->currentIndex() == crumb->count() - 1)
+//    {
+//        btn2->setEnabled(false);
+//    }
+
+//    connect(btn1,&KBorderlessButton::clicked,this,[=]{
+//        crumb->leftScrollTabs();
+//    });
+//    connect(btn2,&KBorderlessButton::clicked,this,[=]{
+//        crumb->rightScrollTabs();
+//    });
+    setMinimumSize(600,500);
+    crumb2->setElideMode(Qt::ElideMiddle);
+    connect(crumb,&KCrumb::tabBarClicked,this,[=](int index){
+        if(index == 1)
+            crumb->setMaximumWidth(1300);
+    });
+//    connect(crumb2,&QTabBar::tabBarClicked,this,[=](int index){
+//        if(index == 0)
+//        {
+//            crumb2->setTabText(1,"...");
+//            crumb2->adjustSize();
+//        }
+//        if(index == 1)
+//        {
+//            crumb2->setTabText(1,"页面目录二,页面目录二");
+//            crumb2->adjustSize();
+//        }
+//    });
+}
+
+Widget::~Widget()
+{
+}
+
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testcrumb/widget.h libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testcrumb/widget.h
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testcrumb/widget.h	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testcrumb/widget.h	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,14 @@
+#ifndef WIDGET_H
+#define WIDGET_H
+
+#include <QWidget>
+
+class Widget : public QWidget
+{
+    Q_OBJECT
+
+public:
+    Widget(QWidget *parent = nullptr);
+    ~Widget();
+};
+#endif // WIDGET_H
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testintrowidget/main.cpp libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testintrowidget/main.cpp
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testintrowidget/main.cpp	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testintrowidget/main.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,11 @@
+#include "widget.h"
+
+#include <QApplication>
+
+int main(int argc, char *argv[])
+{
+    QApplication a(argc, argv);
+    Widget w;
+    w.show();
+    return a.exec();
+}
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testintrowidget/testintrowidget.pro libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testintrowidget/testintrowidget.pro
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testintrowidget/testintrowidget.pro	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testintrowidget/testintrowidget.pro	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,31 @@
+QT       += core gui
+
+greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
+
+CONFIG += c++11
+
+LIBS += -L/home/kylin/openkylin/applications/libkysdk-applications/build-kysdk-qtwidgets-unknown-Debug -lkysdk-qtwidgets
+INCLUDEPATH +=/home/kylin/openkylin/applications/libkysdk-applications/kysdk-qtwidgets/src
+
+# The following define makes your compiler emit warnings if you use
+# any Qt feature that has been marked deprecated (the exact warnings
+# depend on your compiler). Please consult the documentation of the
+# deprecated API in order to know how to port your code away from it.
+DEFINES += QT_DEPRECATED_WARNINGS
+
+# You can also make your code fail to compile if it uses deprecated APIs.
+# In order to do so, uncomment the following line.
+# You can also select to disable deprecated APIs only up to a certain version of Qt.
+#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
+
+SOURCES += \
+    main.cpp \
+    widget.cpp
+
+HEADERS += \
+    widget.h
+
+# Default rules for deployment.
+qnx: target.path = /tmp/$${TARGET}/bin
+else: unix:!android: target.path = /opt/$${TARGET}/bin
+!isEmpty(target.path): INSTALLS += target
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testintrowidget/widget.cpp libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testintrowidget/widget.cpp
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testintrowidget/widget.cpp	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testintrowidget/widget.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,58 @@
+#include "widget.h"
+#include "kintrowidget.h"
+#include <QBoxLayout>
+#include <QMenu>
+
+using namespace kdk;
+
+Widget::Widget(QWidget *parent)
+    : QWidget(parent)
+{
+    QVBoxLayout *layout = new QVBoxLayout(this);
+    KIntroWidget *widget1 = new KIntroWidget(this);
+    widget1->setMainLabel("我是一段测试文本,测试显示不全是否可以换行(单行测试文本)");
+    widget1->setSubLabel("2024216161");
+    widget1->setFixedHeight(76);
+    widget1->setBorderRadius(15);
+    KIntroWidget *widget2 = new KIntroWidget(this);
+    widget2->setMainLabel("我是一段测试文本,测试换行符号\n('\\n'不显示只换行)是否可以正常换行以及显示不全是否可以换行");
+    widget2->setSubLabel("2024216161");
+    widget2->setViewType(ViewType::IconView);
+    widget2->setFixedSize(218,200);
+    widget2->setTitleColor(Qt::red);
+    widget2->setBorderRadius(0,20,20,30);
+    layout->addWidget(widget1);
+    layout->addWidget(widget2);
+
+    QMenu *menu = new QMenu();
+    QAction* action1 = new QAction("action1",menu);
+    QAction* action2 = new QAction("action2",menu);
+    QAction* action3 = new QAction("action3",menu);
+    menu->addAction(action1);
+    menu->addAction(action2);
+    menu->addAction(action3);
+
+    connect(widget1,&KIntroWidget::rightClick,this,[=](QPoint point){
+        menu->move(point);
+        menu->show();
+    });
+
+
+    QMenu *menu1 = new QMenu();
+    QAction* action4 = new QAction("action4",menu);
+    QAction* action5 = new QAction("action5",menu);
+    QAction* action6 = new QAction("action6",menu);
+    menu1->addAction(action4);
+    menu1->addAction(action5);
+    menu1->addAction(action6);
+
+    connect(widget2,&KIntroWidget::rightClick,this,[=](QPoint point){
+        menu1->move(point);
+        menu1->show();
+    });
+}
+
+Widget::~Widget()
+{
+}
+
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testintrowidget/widget.h libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testintrowidget/widget.h
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testintrowidget/widget.h	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testintrowidget/widget.h	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,14 @@
+#ifndef WIDGET_H
+#define WIDGET_H
+
+#include <QWidget>
+
+class Widget : public QWidget
+{
+    Q_OBJECT
+
+public:
+    Widget(QWidget *parent = nullptr);
+    ~Widget();
+};
+#endif // WIDGET_H
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testlineedit/main.cpp libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testlineedit/main.cpp
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testlineedit/main.cpp	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testlineedit/main.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,11 @@
+#include "widget.h"
+
+#include <QApplication>
+
+int main(int argc, char *argv[])
+{
+    QApplication a(argc, argv);
+    Widget w;
+    w.show();
+    return a.exec();
+}
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testlineedit/testlineedit.pro libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testlineedit/testlineedit.pro
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testlineedit/testlineedit.pro	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testlineedit/testlineedit.pro	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,31 @@
+QT       += core gui
+
+greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
+
+CONFIG += c++11
+
+LIBS += -L/home/kylin/openkylin/applications/libkysdk-applications/build-kysdk-qtwidgets-unknown-Debug -lkysdk-qtwidgets
+INCLUDEPATH +=/home/kylin/openkylin/applications/libkysdk-applications/kysdk-qtwidgets/src
+
+# The following define makes your compiler emit warnings if you use
+# any Qt feature that has been marked deprecated (the exact warnings
+# depend on your compiler). Please consult the documentation of the
+# deprecated API in order to know how to port your code away from it.
+DEFINES += QT_DEPRECATED_WARNINGS
+
+# You can also make your code fail to compile if it uses deprecated APIs.
+# In order to do so, uncomment the following line.
+# You can also select to disable deprecated APIs only up to a certain version of Qt.
+#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
+
+SOURCES += \
+    main.cpp \
+    widget.cpp
+
+HEADERS += \
+    widget.h
+
+# Default rules for deployment.
+qnx: target.path = /tmp/$${TARGET}/bin
+else: unix:!android: target.path = /opt/$${TARGET}/bin
+!isEmpty(target.path): INSTALLS += target
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testlineedit/widget.cpp libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testlineedit/widget.cpp
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testlineedit/widget.cpp	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testlineedit/widget.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,30 @@
+#include "widget.h"
+#include "klineedit.h"
+#include <QDebug>
+#include <QBoxLayout>
+#include <QPushButton>
+
+using namespace kdk;
+Widget::Widget(QWidget *parent)
+    : QWidget(parent)
+{
+    QVBoxLayout *vlayout = new QVBoxLayout(this);
+
+    KLineEdit *edit = new KLineEdit(this);
+
+    QPushButton* btn = edit->pushbutton();
+    btn->setIcon(QIcon::fromTheme("system-computer-symbolic"));
+    connect(btn,&QPushButton::clicked,this,[=]{
+        qDebug()<<edit->text();
+    });
+    vlayout->addWidget(edit);
+
+    QPushButton* btn1 = new QPushButton(this);
+    vlayout->addWidget(btn1);
+
+}
+
+Widget::~Widget()
+{
+}
+
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testlineedit/widget.h libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testlineedit/widget.h
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testlineedit/widget.h	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testlineedit/widget.h	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,14 @@
+#ifndef WIDGET_H
+#define WIDGET_H
+
+#include <QWidget>
+
+class Widget : public QWidget
+{
+    Q_OBJECT
+
+public:
+    Widget(QWidget *parent = nullptr);
+    ~Widget();
+};
+#endif // WIDGET_H
Binary files /tmp/tmpqylf0shy/9xkMnedI4d/libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testloopplaypage/1.jpeg and /tmp/tmpqylf0shy/mEy9aQSYLZ/libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testloopplaypage/1.jpeg differ
Binary files /tmp/tmpqylf0shy/9xkMnedI4d/libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testloopplaypage/2.jpeg and /tmp/tmpqylf0shy/mEy9aQSYLZ/libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testloopplaypage/2.jpeg differ
Binary files /tmp/tmpqylf0shy/9xkMnedI4d/libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testloopplaypage/3.jpg and /tmp/tmpqylf0shy/mEy9aQSYLZ/libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testloopplaypage/3.jpg differ
Binary files /tmp/tmpqylf0shy/9xkMnedI4d/libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testloopplaypage/4.jpg and /tmp/tmpqylf0shy/mEy9aQSYLZ/libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testloopplaypage/4.jpg differ
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testloopplaypage/main.cpp libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testloopplaypage/main.cpp
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testloopplaypage/main.cpp	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testloopplaypage/main.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,11 @@
+#include "widget.h"
+
+#include <QApplication>
+
+int main(int argc, char *argv[])
+{
+    QApplication a(argc, argv);
+    Widget w;
+    w.show();
+    return a.exec();
+}
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testloopplaypage/qrc.qrc libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testloopplaypage/qrc.qrc
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testloopplaypage/qrc.qrc	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testloopplaypage/qrc.qrc	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,8 @@
+<RCC>
+    <qresource prefix="/">
+        <file>1.jpeg</file>
+        <file>2.jpeg</file>
+        <file>3.jpg</file>
+        <file>4.jpg</file>
+    </qresource>
+</RCC>
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testloopplaypage/testloopplaypage.pro libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testloopplaypage/testloopplaypage.pro
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testloopplaypage/testloopplaypage.pro	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testloopplaypage/testloopplaypage.pro	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,34 @@
+QT       += core gui
+
+greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
+
+CONFIG += c++11
+
+LIBS += -L/home/kylin/openkylin/applications/libkysdk-applications/build-kysdk-qtwidgets-unknown-Debug -lkysdk-qtwidgets
+INCLUDEPATH +=/home/kylin/openkylin/applications/libkysdk-applications/kysdk-qtwidgets/src
+
+# The following define makes your compiler emit warnings if you use
+# any Qt feature that has been marked deprecated (the exact warnings
+# depend on your compiler). Please consult the documentation of the
+# deprecated API in order to know how to port your code away from it.
+DEFINES += QT_DEPRECATED_WARNINGS
+
+# You can also make your code fail to compile if it uses deprecated APIs.
+# In order to do so, uncomment the following line.
+# You can also select to disable deprecated APIs only up to a certain version of Qt.
+#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
+
+SOURCES += \
+    main.cpp \
+    widget.cpp
+
+HEADERS += \
+    widget.h
+
+# Default rules for deployment.
+qnx: target.path = /tmp/$${TARGET}/bin
+else: unix:!android: target.path = /opt/$${TARGET}/bin
+!isEmpty(target.path): INSTALLS += target
+
+RESOURCES += \
+    qrc.qrc
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testloopplaypage/widget.cpp libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testloopplaypage/widget.cpp
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testloopplaypage/widget.cpp	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testloopplaypage/widget.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,65 @@
+#include "widget.h"
+
+#include <QWidget>
+#include <QVBoxLayout>
+#include <QPushButton>
+#include <QLabel>
+#include <QStackedWidget>
+#include <QDebug>
+#include "kloopplaypage.h"
+
+using namespace kdk;
+
+Widget::Widget(QWidget *parent)
+    : QWidget(parent)
+{
+//    QWidget*widget1 = new QWidget();
+
+    QLabel *label1 = new QLabel();
+    QPixmap pixmap1(":/1.jpeg");
+    label1->setFixedWidth(400);
+    label1->setPixmap(pixmap1.scaled(400, 200));
+//    QPushButton* btn1 = new QPushButton(widget1);
+//    btn1->move(100,50);
+//    btn1->setText("label1");
+
+//    QWidget*widget2 = new QWidget();
+    QLabel *label2 = new QLabel();
+    QPixmap pixmap2(":/2.jpeg");
+    label2->setPixmap(pixmap2.scaled(400, 200));
+//    QPushButton* btn2 = new QPushButton(widget2);
+//    btn2->move(100,50);
+//    btn2->setText("label2");
+
+//    QWidget*widget3 = new QWidget(this);
+    QLabel *label3 = new QLabel();
+    QPixmap pixmap3(":/3.jpg");
+    label3->setPixmap(pixmap3.scaled(400, 200));
+//    QPushButton* btn3 = new QPushButton(widget3);
+//    btn3->move(100,50);
+//    btn3->setText("label2");
+
+//    QWidget*widget4 = new QWidget();
+    QLabel *label4 = new QLabel();
+    QPixmap pixmap4(":/4.jpg");
+    label4->setPixmap(pixmap4.scaled(400, 200));
+//    QPushButton* btn4 = new QPushButton(widget4);
+//    btn4->move(100,50);
+//    btn4->setText("label2");
+
+    QHBoxLayout* layout = new QHBoxLayout(this);
+    KLoopPlayPage* page = new KLoopPlayPage();
+    page->addWidget(label1);
+    page->addWidget(label2);
+    page->addWidget(label3);
+    page->addWidget(label4);
+    page->setCurrentWidget(0);
+    layout->addWidget(page);
+
+    setFixedWidth(600);
+}
+
+Widget::~Widget()
+{
+}
+
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testloopplaypage/widget.h libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testloopplaypage/widget.h
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testloopplaypage/widget.h	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testloopplaypage/widget.h	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,14 @@
+#ifndef WIDGET_H
+#define WIDGET_H
+
+#include <QWidget>
+
+class Widget : public QWidget
+{
+    Q_OBJECT
+
+public:
+    Widget(QWidget *parent = nullptr);
+    ~Widget();
+};
+#endif // WIDGET_H
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testnativetabbar/main.cpp libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testnativetabbar/main.cpp
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testnativetabbar/main.cpp	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testnativetabbar/main.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,11 @@
+#include "widget.h"
+
+#include <QApplication>
+
+int main(int argc, char *argv[])
+{
+    QApplication a(argc, argv);
+    Widget w;
+    w.show();
+    return a.exec();
+}
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testnativetabbar/testnativetabbar.pro libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testnativetabbar/testnativetabbar.pro
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testnativetabbar/testnativetabbar.pro	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testnativetabbar/testnativetabbar.pro	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,33 @@
+QT       += core gui
+
+greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
+
+CONFIG += c++11
+CONFIG += link_pkgconfig
+#PKGCONFIG += kysdk-qtwidgets kysdk-widgetutils
+
+LIBS +=-L/home/kylin/kylinos-src/libkysdk-applications/libkysdk-applications/build-kysdk-qtwidgets-unknown-Debug -lkysdk-qtwidgets
+INCLUDEPATH +=/home/kylin/kylinos-src/libkysdk-applications/libkysdk-applications/kysdk-qtwidgets/src
+
+# The following define makes your compiler emit warnings if you use
+# any Qt feature that has been marked deprecated (the exact warnings
+# depend on your compiler). Please consult the documentation of the
+# deprecated API in order to know how to port your code away from it.
+DEFINES += QT_DEPRECATED_WARNINGS
+
+# You can also make your code fail to compile if it uses deprecated APIs.
+# In order to do so, uncomment the following line.
+# You can also select to disable deprecated APIs only up to a certain version of Qt.
+#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
+
+SOURCES += \
+    main.cpp \
+    widget.cpp
+
+HEADERS += \
+    widget.h
+
+# Default rules for deployment.
+qnx: target.path = /tmp/$${TARGET}/bin
+else: unix:!android: target.path = /opt/$${TARGET}/bin
+!isEmpty(target.path): INSTALLS += target
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testnativetabbar/widget.cpp libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testnativetabbar/widget.cpp
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testnativetabbar/widget.cpp	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testnativetabbar/widget.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,85 @@
+#include "widget.h"
+#include "knativetabbar.h"
+#include <QVBoxLayout>
+#include <QLabel>
+#include <QMenu>
+
+using namespace kdk;
+Widget::Widget(QWidget *parent)
+    : QWidget(parent)
+{
+    QWidget *w = new QWidget();
+    KNativeTabbar *tabBar1 = new KNativeTabbar(KNativeTabbarStyle::SegmentLight,w);
+    tabBar1->addTab(QIcon::fromTheme("kylin-music"),"Segment1");
+    tabBar1->addTab("Segment2");
+    tabBar1->addTab(QIcon::fromTheme("kylin-music"),"");
+    tabBar1->addTab("Segment4");
+    tabBar1->addTab("Segment5");
+    tabBar1->addTab("Segment6");
+    KNativeTabbar *tabBar2 = new KNativeTabbar(KNativeTabbarStyle::SegmentDark,w);
+    tabBar2->addTab("SegmentDark1");
+    tabBar2->addTab("SegmentDark2");
+    tabBar2->addTab(QIcon::fromTheme("kylin-music"),"SegmentDark3");
+    tabBar2->addTab("SegmentDark4");
+    tabBar2->addTab("SegmentDark5");
+    tabBar2->addTab(QIcon::fromTheme("kylin-music"),"");
+    KNativeTabbar *tabBar3 = new KNativeTabbar(KNativeTabbarStyle::Sliding,w);
+    tabBar3->addTab(QIcon::fromTheme("ukui-dialog-success"),"正常");
+    tabBar3->addTab(QIcon::fromTheme("dialog-warning"),"错误");
+    tabBar3->addTab(QIcon::fromTheme("dialog-info"),"注意");
+    tabBar3->addTab(QIcon::fromTheme("kylin-music"),"Sliding4");
+    tabBar3->addTab("Sliding5");
+    tabBar3->addTab(QIcon::fromTheme("kylin-music"),"Sliding6");
+//    tabBar3->setIconSize(QSize(24,24));
+    KNativeTabbar *tabBar4 = new KNativeTabbar(KNativeTabbarStyle::Sliding,w);
+    tabBar4->addTab("Segment1");
+    tabBar4->addTab("Segment2");
+    tabBar4->addTab("Segment3");
+    tabBar4->addTab("Segment4");
+    tabBar4->setTabBarStyle(KNativeTabbarStyle::SegmentDark);     //设置style
+    tabBar4->setBorderRadius(10);       //设置圆角半径,只对SegmentDark,SegmentLight样式生效
+    tabBar4->setBackgroundColor(QColor(0,255,0));   //设置背景色
+
+    QLabel* pLabel = new QLabel(w);
+    pLabel->setAlignment(Qt::AlignCenter);
+
+    QMenu *menu = new QMenu();
+    QAction* action1 = new QAction("action1",menu);
+    QAction* action2 = new QAction("action2",menu);
+    QAction* action3 = new QAction("action3",menu);
+    menu->addAction(action1);
+    menu->addAction(action2);
+    menu->addAction(action3);
+
+    connect(tabBar1,&KNativeTabbar::tabBarClicked,this,[=](int index){pLabel->setText(tabBar1->tabText(index));});
+    connect(tabBar2,&KNativeTabbar::tabBarClicked,this,[=](int index){pLabel->setText(tabBar2->tabText(index));});
+    connect(tabBar3,&KNativeTabbar::tabBarClicked,this,[=](int index){pLabel->setText(tabBar3->tabText(index));});
+    connect(tabBar4,&KNativeTabbar::tabBarClicked,this,[=](int index){pLabel->setText(tabBar4->tabText(index));});
+    connect(tabBar4,&KNativeTabbar::rightlicked,this,[=](QPoint point){
+        menu->move(point);
+        menu->show();
+    });
+
+    QHBoxLayout *hlayout = new QHBoxLayout();
+    QLabel *label = new QLabel();
+    label->setText("just a test label");
+    hlayout->addWidget(label);
+
+    QVBoxLayout*vLayout = new QVBoxLayout;
+    vLayout->addStretch();
+    vLayout->addWidget(tabBar1);
+    vLayout->addWidget(tabBar2);
+    vLayout->addWidget(tabBar3);
+    vLayout->addWidget(tabBar4);
+    vLayout->addStretch();
+    vLayout->addWidget(pLabel);
+    vLayout->addStretch();
+    vLayout->addLayout(hlayout);
+    vLayout->addStretch();
+    setLayout(vLayout);
+}
+
+Widget::~Widget()
+{
+}
+
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testnativetabbar/widget.h libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testnativetabbar/widget.h
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testnativetabbar/widget.h	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testnativetabbar/widget.h	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,14 @@
+#ifndef WIDGET_H
+#define WIDGET_H
+
+#include <QWidget>
+
+class Widget : public QWidget
+{
+    Q_OBJECT
+
+public:
+    Widget(QWidget *parent = nullptr);
+    ~Widget();
+};
+#endif // WIDGET_H
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testnavigationtrail/main.cpp libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testnavigationtrail/main.cpp
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testnavigationtrail/main.cpp	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testnavigationtrail/main.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,11 @@
+#include "widget.h"
+
+#include <QApplication>
+
+int main(int argc, char *argv[])
+{
+    QApplication a(argc, argv);
+    Widget w;
+    w.show();
+    return a.exec();
+}
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testnavigationtrail/testnavigationtrail.pro libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testnavigationtrail/testnavigationtrail.pro
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testnavigationtrail/testnavigationtrail.pro	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testnavigationtrail/testnavigationtrail.pro	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,31 @@
+QT       += core gui
+
+greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
+
+CONFIG += c++11
+
+LIBS += -L/home/kylin/openkylin/applications/libkysdk-applications/build-kysdk-qtwidgets-unknown-Debug -lkysdk-qtwidgets
+INCLUDEPATH +=/home/kylin/openkylin/applications/libkysdk-applications/kysdk-qtwidgets/src
+
+# The following define makes your compiler emit warnings if you use
+# any Qt feature that has been marked deprecated (the exact warnings
+# depend on your compiler). Please consult the documentation of the
+# deprecated API in order to know how to port your code away from it.
+DEFINES += QT_DEPRECATED_WARNINGS
+
+# You can also make your code fail to compile if it uses deprecated APIs.
+# In order to do so, uncomment the following line.
+# You can also select to disable deprecated APIs only up to a certain version of Qt.
+#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
+
+SOURCES += \
+    main.cpp \
+    widget.cpp
+
+HEADERS += \
+    widget.h
+
+# Default rules for deployment.
+qnx: target.path = /tmp/$${TARGET}/bin
+else: unix:!android: target.path = /opt/$${TARGET}/bin
+!isEmpty(target.path): INSTALLS += target
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testnavigationtrail/widget.cpp libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testnavigationtrail/widget.cpp
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testnavigationtrail/widget.cpp	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testnavigationtrail/widget.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,33 @@
+#include "widget.h"
+#include "knavigationtrail.h"
+#include <QHBoxLayout>
+
+using namespace kdk;
+Widget::Widget(QWidget *parent)
+    : QWidget(parent)
+{
+    QHBoxLayout* layout =new QHBoxLayout(this);
+    KNavigationTrail* trail = new KNavigationTrail();
+    KCrumb *crumb1 = trail->crumb();
+    crumb1->addTab("页面目录一,页面目录一");
+    crumb1->addTab("页面目录二,页面目录二");
+    crumb1->addTab("页面目录三,页面目录三");
+    crumb1->addTab("页面目录四,页面目录四");
+    crumb1->addTab("页面目录五,页面目录五");
+    crumb1->setFlat(false);
+//    crumb1->setIcon(QIcon::fromTheme("dialog-info"));  //设置KBreadCrumb的图标
+    layout->addWidget(trail);
+    connect(crumb1,&KCrumb::tabBarClicked,this,[=](int index){
+        if(index == 1)
+            trail->setPosition(ButtonPosition::LeftOrRight);
+        if(index == 2)
+            trail->setPosition(ButtonPosition::LeftPosition);
+        if(index == 3)
+            trail->setPosition(ButtonPosition::RightPosition);
+    });
+}
+
+Widget::~Widget()
+{
+}
+
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testnavigationtrail/widget.h libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testnavigationtrail/widget.h
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testnavigationtrail/widget.h	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testnavigationtrail/widget.h	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,14 @@
+#ifndef WIDGET_H
+#define WIDGET_H
+
+#include <QWidget>
+
+class Widget : public QWidget
+{
+    Q_OBJECT
+
+public:
+    Widget(QWidget *parent = nullptr);
+    ~Widget();
+};
+#endif // WIDGET_H
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testprogresslabel/main.cpp libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testprogresslabel/main.cpp
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testprogresslabel/main.cpp	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testprogresslabel/main.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,11 @@
+#include "widget.h"
+
+#include <QApplication>
+
+int main(int argc, char *argv[])
+{
+    QApplication a(argc, argv);
+    Widget w;
+    w.show();
+    return a.exec();
+}
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testprogresslabel/testprogresslabel.pro libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testprogresslabel/testprogresslabel.pro
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testprogresslabel/testprogresslabel.pro	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testprogresslabel/testprogresslabel.pro	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,33 @@
+QT       += core gui
+
+greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
+
+CONFIG += c++11
+
+
+LIBS += -L/home/kylin/openkylin/applications/libkysdk-applications/build-kysdk-qtwidgets-unknown-Debug -lkysdk-qtwidgets
+INCLUDEPATH +=/home/kylin/openkylin/applications/libkysdk-applications/kysdk-qtwidgets/src
+
+
+# The following define makes your compiler emit warnings if you use
+# any Qt feature that has been marked deprecated (the exact warnings
+# depend on your compiler). Please consult the documentation of the
+# deprecated API in order to know how to port your code away from it.
+DEFINES += QT_DEPRECATED_WARNINGS
+
+# You can also make your code fail to compile if it uses deprecated APIs.
+# In order to do so, uncomment the following line.
+# You can also select to disable deprecated APIs only up to a certain version of Qt.
+#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
+
+SOURCES += \
+    main.cpp \
+    widget.cpp
+
+HEADERS += \
+    widget.h
+
+# Default rules for deployment.
+qnx: target.path = /tmp/$${TARGET}/bin
+else: unix:!android: target.path = /opt/$${TARGET}/bin
+!isEmpty(target.path): INSTALLS += target
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testprogresslabel/widget.cpp libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testprogresslabel/widget.cpp
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testprogresslabel/widget.cpp	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testprogresslabel/widget.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,53 @@
+#include "widget.h"
+#include "kprogresslabel.h"
+#include <QPushButton>
+#include <QDebug>
+
+using namespace kdk;
+
+Widget::Widget(QWidget *parent)
+    : QWidget(parent)
+{
+    QVBoxLayout *vlayout = new QVBoxLayout(this);
+    QHBoxLayout *layout = new QHBoxLayout();
+    KProgressLabel* label= new KProgressLabel();
+    QStringList list;
+    list.append("11");
+    list.append("22");
+    list.append("33");
+    list.append("44");
+    list.append("55");
+
+    QStringList list2;
+    list2.append("1");
+    list2.append("2");
+    list2.append("3");
+    list2.append("4");
+    list2.append("5");
+    label->setStringList(list);
+    label->setCircleSize(QSize(24,24));
+    label->setCurrentIndex(1);
+//    label->setStyleSheet("background :red");
+
+    QPushButton* btn1 = new QPushButton("");
+
+    QPushButton* btn2 = new QPushButton("");
+
+    layout->addWidget(btn1);
+    layout->addWidget(btn2);
+    vlayout->addWidget(label);
+    vlayout->addLayout(layout);
+    connect(btn1,&QPushButton::clicked,this,[=]{
+        label->setCurrentIndex(label->currentIndex() -1 );
+        qDebug()<<label->size();
+    });
+    connect(btn2,&QPushButton::clicked,this,[=]{
+        label->setCurrentIndex(label->currentIndex() + 1);
+    });
+    setFixedSize(600,500);
+}
+
+Widget::~Widget()
+{
+}
+
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testprogresslabel/widget.h libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testprogresslabel/widget.h
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testprogresslabel/widget.h	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testprogresslabel/widget.h	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,14 @@
+#ifndef WIDGET_H
+#define WIDGET_H
+
+#include <QWidget>
+
+class Widget : public QWidget
+{
+    Q_OBJECT
+
+public:
+    Widget(QWidget *parent = nullptr);
+    ~Widget();
+};
+#endif // WIDGET_H
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testsecurityquestiondialog/dialog.cpp libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testsecurityquestiondialog/dialog.cpp
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testsecurityquestiondialog/dialog.cpp	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testsecurityquestiondialog/dialog.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,46 @@
+#include "dialog.h"
+#include <QDebug>
+
+#include "ksecurityquestiondialog.h"
+using namespace kdk;
+
+Dialog::Dialog()
+{
+    KSecurityQuestionDialog *questionDialog =  new KSecurityQuestionDialog();
+    questionDialog->setWindowIcon("ukui-control-center");
+    questionDialog->setWindowTitle("Security Question");
+    questionDialog->setTitleText(tr("Answer the security questions and reset your password"));
+    questionDialog->addSecurityQuestionItem(3, true);
+    QStringList AA;
+    AA << "111" << "222" << "333" << "444";
+    questionDialog->initQustionCombox(AA);
+
+    if (questionDialog->answerLabel(1) != nullptr) {
+        questionDialog->answerLabel(1)->setText("answerLabel1");
+        qDebug() << questionDialog->answerLabel(1)->text();
+    }
+
+    if (questionDialog->questionLabel(1) != nullptr) {
+        questionDialog->questionLabel(1)->setText("test111");
+        qDebug() << questionDialog->questionLabel(1)->text();
+    }
+
+    if (questionDialog->answerLineedit(1) != nullptr) {
+        qDebug() << questionDialog->answerLineedit(1)->text();
+    }
+
+    if (questionDialog->questionCombox(1) != nullptr) {
+        qDebug() << questionDialog->questionCombox(1)->currentText();
+    }
+
+    if (questionDialog->tipsLabel(1) != nullptr) {
+        questionDialog->tipsLabel(1)->setText("Incorrect answer");
+        qDebug() << questionDialog->tipsLabel(1)->text();
+    }
+
+    connect(questionDialog->cancelButton(), &KPushButton::clicked, this, [=](){
+        questionDialog->close();
+    });
+
+    questionDialog->show();
+}
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testsecurityquestiondialog/dialog.h libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testsecurityquestiondialog/dialog.h
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testsecurityquestiondialog/dialog.h	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testsecurityquestiondialog/dialog.h	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,13 @@
+#ifndef DIALOG_H
+#define DIALOG_H
+
+#include <QObject>
+
+class Dialog: QObject
+{
+    Q_OBJECT
+public:
+    Dialog();
+};
+
+#endif // DIALOG_H
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testsecurityquestiondialog/main.cpp libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testsecurityquestiondialog/main.cpp
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testsecurityquestiondialog/main.cpp	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testsecurityquestiondialog/main.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,19 @@
+#include <QApplication>
+#include <QTranslator>
+#include "dialog.h"
+
+int main(int argc, char *argv[])
+{
+    QApplication a(argc, argv);
+
+    // sdk翻译加载
+    QTranslator trans;
+    if(trans.load(":/translations/gui_"+QLocale::system().name()+".qm"))
+    {
+        a.installTranslator(&trans);
+    }
+
+    Dialog *testDailog = new Dialog();
+
+    return a.exec();
+}
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testsecurityquestiondialog/testsecurityquestiondialog.pro libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testsecurityquestiondialog/testsecurityquestiondialog.pro
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testsecurityquestiondialog/testsecurityquestiondialog.pro	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testsecurityquestiondialog/testsecurityquestiondialog.pro	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,31 @@
+QT       += core gui
+
+greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
+
+CONFIG += c++11
+
+CONFIG += link_pkgconfig
+PKGCONFIG += kysdk-qtwidgets
+
+# The following define makes your compiler emit warnings if you use
+# any Qt feature that has been marked deprecated (the exact warnings
+# depend on your compiler). Please consult the documentation of the
+# deprecated API in order to know how to port your code away from it.
+DEFINES += QT_DEPRECATED_WARNINGS
+
+# You can also make your code fail to compile if it uses deprecated APIs.
+# In order to do so, uncomment the following line.
+# You can also select to disable deprecated APIs only up to a certain version of Qt.
+#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
+
+SOURCES += \
+    dialog.cpp \
+    main.cpp \
+
+HEADERS += \
+    dialog.h
+
+# Default rules for deployment.
+qnx: target.path = /tmp/$${TARGET}/bin
+else: unix:!android: target.path = /opt/$${TARGET}/bin
+!isEmpty(target.path): INSTALLS += target
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testselector/main.cpp libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testselector/main.cpp
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testselector/main.cpp	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testselector/main.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,11 @@
+#include "widget.h"
+
+#include <QApplication>
+
+int main(int argc, char *argv[])
+{
+    QApplication a(argc, argv);
+    Widget w;
+    w.show();
+    return a.exec();
+}
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testselector/testselector.pro libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testselector/testselector.pro
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testselector/testselector.pro	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testselector/testselector.pro	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,31 @@
+QT       += core gui
+
+greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
+
+CONFIG += c++11
+
+LIBS += -L/home/kylin/kylinos-src/libkysdk-applications/libkysdk-applications/build-kysdk-qtwidgets-unknown-Debug -lkysdk-qtwidgets
+INCLUDEPATH +=/home/kylin/kylinos-src/libkysdk-applications/libkysdk-applications/kysdk-qtwidgets/src
+
+# The following define makes your compiler emit warnings if you use
+# any Qt feature that has been marked deprecated (the exact warnings
+# depend on your compiler). Please consult the documentation of the
+# deprecated API in order to know how to port your code away from it.
+DEFINES += QT_DEPRECATED_WARNINGS
+
+# You can also make your code fail to compile if it uses deprecated APIs.
+# In order to do so, uncomment the following line.
+# You can also select to disable deprecated APIs only up to a certain version of Qt.
+#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
+
+SOURCES += \
+    main.cpp \
+    widget.cpp
+
+HEADERS += \
+    widget.h
+
+# Default rules for deployment.
+qnx: target.path = /tmp/$${TARGET}/bin
+else: unix:!android: target.path = /opt/$${TARGET}/bin
+!isEmpty(target.path): INSTALLS += target
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testselector/widget.cpp libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testselector/widget.cpp
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testselector/widget.cpp	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testselector/widget.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,28 @@
+#include "widget.h"
+#include "kcomboxwidget.h"
+#include <QAction>
+using namespace kdk;
+
+Widget::Widget(QWidget *parent)
+    : QWidget(parent)
+{
+    KSelector* selector = new KSelector(this);
+    selector->label()->setText("关机频率");
+//    QAction* action1 =new QAction("action1");
+//    QAction* action2 =new QAction("action2");
+//    QAction* action3 =new QAction("action3");
+//    selector->comboBox()->addAction(action1);
+//    selector->comboBox()->addAction(action2);
+//    selector->comboBox()->addAction(action3);
+    selector->comboBox()->addItem("1");
+    selector->comboBox()->addItem("2");
+    selector->comboBox()->addItem("3");
+
+    setFocusPolicy(Qt::ClickFocus);
+
+}
+
+Widget::~Widget()
+{
+}
+
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testselector/widget.h libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testselector/widget.h
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testselector/widget.h	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testselector/widget.h	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,14 @@
+#ifndef WIDGET_H
+#define WIDGET_H
+
+#include <QWidget>
+
+class Widget : public QWidget
+{
+    Q_OBJECT
+
+public:
+    Widget(QWidget *parent = nullptr);
+    ~Widget();
+};
+#endif // WIDGET_H
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testtitlewindow/main.cpp libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testtitlewindow/main.cpp
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testtitlewindow/main.cpp	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testtitlewindow/main.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,11 @@
+#include "widget.h"
+
+#include <QApplication>
+
+int main(int argc, char *argv[])
+{
+    QApplication a(argc, argv);
+    Widget w;
+//    w.show();
+    return a.exec();
+}
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testtitlewindow/testtitlewindow.pro libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testtitlewindow/testtitlewindow.pro
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testtitlewindow/testtitlewindow.pro	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testtitlewindow/testtitlewindow.pro	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,31 @@
+QT       += core gui
+
+greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
+
+CONFIG += c++11
+
+LIBS += -L/home/kylin/openkylin/applications/libkysdk-applications/build-kysdk-qtwidgets-unknown-Debug -lkysdk-qtwidgets
+INCLUDEPATH +=/home/kylin/openkylin/applications/libkysdk-applications/kysdk-qtwidgets/src
+
+# The following define makes your compiler emit warnings if you use
+# any Qt feature that has been marked deprecated (the exact warnings
+# depend on your compiler). Please consult the documentation of the
+# deprecated API in order to know how to port your code away from it.
+DEFINES += QT_DEPRECATED_WARNINGS
+
+# You can also make your code fail to compile if it uses deprecated APIs.
+# In order to do so, uncomment the following line.
+# You can also select to disable deprecated APIs only up to a certain version of Qt.
+#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
+
+SOURCES += \
+    main.cpp \
+    widget.cpp
+
+HEADERS += \
+    widget.h
+
+# Default rules for deployment.
+qnx: target.path = /tmp/$${TARGET}/bin
+else: unix:!android: target.path = /opt/$${TARGET}/bin
+!isEmpty(target.path): INSTALLS += target
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testtitlewindow/widget.cpp libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testtitlewindow/widget.cpp
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testtitlewindow/widget.cpp	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testtitlewindow/widget.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,27 @@
+#include "widget.h"
+#include "ktitlewindow.h"
+#include <QBoxLayout>
+#include "ktextedit.h"
+
+using namespace kdk;
+Widget::Widget(QWidget *parent)
+    : QWidget(parent)
+{
+    KTitleWindow* window = new KTitleWindow();
+    QPushButton* btn1 = new QPushButton();
+    btn1->setText("测试button");
+    QHBoxLayout *layout = new QHBoxLayout();
+    layout->addWidget(btn1);
+    KTextEdit *edit = new KTextEdit();
+    edit->setLabelVisible(false);
+    QVBoxLayout *vlayout = new QVBoxLayout();
+    vlayout->addLayout(layout);
+    vlayout->addWidget(edit);
+    window->baseWidget()->setLayout(vlayout);
+    window->show();
+}
+
+Widget::~Widget()
+{
+}
+
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testtitlewindow/widget.h libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testtitlewindow/widget.h
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/test/testtitlewindow/widget.h	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/test/testtitlewindow/widget.h	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,14 @@
+#ifndef WIDGET_H
+#define WIDGET_H
+
+#include <QWidget>
+
+class Widget : public QWidget
+{
+    Q_OBJECT
+
+public:
+    Widget(QWidget *parent = nullptr);
+    ~Widget();
+};
+#endif // WIDGET_H
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/translations/gui_bo_CN.ts libkysdk-applications-2.5.2.0/kysdk-qtwidgets/translations/gui_bo_CN.ts
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/translations/gui_bo_CN.ts	2024-05-16 09:25:54.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/translations/gui_bo_CN.ts	2024-10-29 15:22:42.000000000 +0800
@@ -2,26 +2,47 @@
 <!DOCTYPE TS>
 <TS version="2.1" language="bo_CN">
 <context>
+    <name>CloseButton</name>
+    <message>
+        <location filename="../src/kcustomtabbar.cpp" line="3049"/>
+        <source>Close Tab</source>
+        <translation>སྒོ་རྒྱག་པའི་རེའུ་མིག</translation>
+    </message>
+</context>
+<context>
+    <name>KCustomTabBar</name>
+    <message>
+        <location filename="../src/kcustomtabbar.cpp" line="518"/>
+        <source>Scroll Left</source>
+        <translation>གཡོན་ཕྱོགས་སུ་ཤོག་ལྷེ་གཅིག</translation>
+    </message>
+    <message>
+        <location filename="../src/kcustomtabbar.cpp" line="519"/>
+        <source>Scroll Right</source>
+        <translation>གཡས་ཕྱོགས་སུ་དཀྱ</translation>
+    </message>
+</context>
+<context>
     <name>kdk::KAboutDialog</name>
     <message>
-        <location filename="../src/kaboutdialog.cpp" line="122"/>
+        <location filename="../src/kaboutdialog.cpp" line="123"/>
         <source>Your system does not have any email application installed or the default mail application is not set up</source>
         <translation>ཁྱེད་རང་གི་མ་ལག་ལ་གློག་རྡུལ་སྦྲག་རྫས་གང་རུང་ཞིག་སྒྲིག་སྦྱོར་བྱས་མེད་པའམ་ཡང་ན་སྦྲག་རྫས་བཀོལ་སྤྱོད་བྱས་མེད།།</translation>
     </message>
     <message>
-        <location filename="../src/kaboutdialog.cpp" line="123"/>
+        <location filename="../src/kaboutdialog.cpp" line="124"/>
         <source>Unable to open mail application</source>
         <translation>སྦྲག་རྫས་ཉེར་སྤྱོད་བྱ་རིམ་ཁ་ཕྱེ་མི་ཐུབ་།</translation>
     </message>
     <message>
-        <location filename="../src/kaboutdialog.cpp" line="257"/>
-        <location filename="../src/kaboutdialog.cpp" line="271"/>
+        <location filename="../src/kaboutdialog.cpp" line="258"/>
+        <location filename="../src/kaboutdialog.cpp" line="272"/>
         <source>Service &amp; Support: </source>
         <translation>ཞབས་ཞུ་དང་རྒྱབ་སྐྱོར་ཚོགས་པ་</translation>
     </message>
     <message>
-        <location filename="../src/kaboutdialog.cpp" line="263"/>
-        <location filename="../src/kaboutdialog.cpp" line="277"/>
+        <location filename="../src/kaboutdialog.cpp" line="264"/>
+        <location filename="../src/kaboutdialog.cpp" line="278"/>
         <source>Privacy statement</source>
         <translation>《གསང་བའི་གསལ་བསྒྲགས། 》</translation>
     </message>
@@ -29,20 +50,28 @@
 <context>
     <name>kdk::KAboutDialogPrivate</name>
     <message>
-        <location filename="../src/kaboutdialog.cpp" line="381"/>
+        <location filename="../src/kaboutdialog.cpp" line="382"/>
         <source>version :</source>
         <translation>པར་གཞི།</translation>
     </message>
     <message>
-        <location filename="../src/kaboutdialog.cpp" line="386"/>
+        <location filename="../src/kaboutdialog.cpp" line="387"/>
         <source>Version number not found</source>
         <translation>པར་གཞིའི་ཨང་གྲངས་རྙེད་མ་བྱུང་།</translation>
     </message>
 </context>
 <context>
+    <name>kdk::KAddFileButtonPrivate</name>
+    <message>
+        <location filename="../src/kaddfilebutton.cpp" line="208"/>
+        <source>Please select file</source>
+        <translation type="unfinished">ཡིག་ཆ་འདེམས་རོགས་གནང་།</translation>
+    </message>
+</context>
+<context>
     <name>kdk::KDragWidget</name>
     <message>
-        <location filename="../src/kdragwidget.cpp" line="102"/>
+        <location filename="../src/kdragwidget.cpp" line="103"/>
         <source>Select or drag and drop the folder identification path</source>
         <translation>ཡིག་ཆའི་རྟགས་མཚན་འགོད་པའི་ཐབས་ལམ་འདེམས་པའམ་ཡང་ན་འདྲུད་གཏོང་བྱས་པ།</translation>
     </message>
@@ -50,7 +79,7 @@
 <context>
     <name>kdk::KDragWidgetPrivate</name>
     <message>
-        <location filename="../src/kdragwidget.cpp" line="62"/>
+        <location filename="../src/kdragwidget.cpp" line="63"/>
         <source>Please select file</source>
         <translation>ཡིག་ཆ་འདེམས་རོགས་གནང་།</translation>
     </message>
@@ -79,47 +108,52 @@
 <context>
     <name>kdk::KMenuButton</name>
     <message>
-        <location filename="../src/kmenubutton.cpp" line="67"/>
+        <location filename="../src/kmenubutton.cpp" line="72"/>
         <source>Options</source>
         <translation>འདེམས་ཚན་</translation>
     </message>
     <message>
-        <location filename="../src/kmenubutton.cpp" line="68"/>
+        <location filename="../src/kmenubutton.cpp" line="73"/>
         <source>Setting</source>
         <translation>བཀོད་སྒྲིག་བཅས་བྱ་དགོས།</translation>
     </message>
     <message>
-        <location filename="../src/kmenubutton.cpp" line="69"/>
+        <location filename="../src/kmenubutton.cpp" line="74"/>
         <source>Theme</source>
         <translation>ཕྱི་ཚུལ།</translation>
     </message>
     <message>
-        <location filename="../src/kmenubutton.cpp" line="70"/>
-        <source>Assist</source>
+        <location filename="../src/kmenubutton.cpp" line="75"/>
+        <source>Help</source>
         <translation>རོགས་རམ་བྱེད་དགོས།</translation>
     </message>
     <message>
-        <location filename="../src/kmenubutton.cpp" line="71"/>
+        <location filename="../src/kmenubutton.cpp" line="76"/>
         <source>About</source>
         <translation>དེའི་སྐོར།</translation>
     </message>
     <message>
-        <location filename="../src/kmenubutton.cpp" line="72"/>
+        <location filename="../src/kmenubutton.cpp" line="77"/>
+        <source>Feedback</source>
+        <translation>ལྡོག་འདྲེན་</translation>
+    </message>
+    <message>
+        <location filename="../src/kmenubutton.cpp" line="78"/>
         <source>Quit</source>
         <translation>ཕྱིར་འཐེན་བྱ་དགོས།</translation>
     </message>
     <message>
-        <location filename="../src/kmenubutton.cpp" line="79"/>
+        <location filename="../src/kmenubutton.cpp" line="85"/>
         <source>Auto</source>
         <translation>མ་ལག་གི་རྗེས་སུ་འབྲང་བ</translation>
     </message>
     <message>
-        <location filename="../src/kmenubutton.cpp" line="81"/>
+        <location filename="../src/kmenubutton.cpp" line="87"/>
         <source>Light</source>
         <translation>མདོག་སྨུག་པོ།</translation>
     </message>
     <message>
-        <location filename="../src/kmenubutton.cpp" line="83"/>
+        <location filename="../src/kmenubutton.cpp" line="89"/>
         <source>Dark</source>
         <translation>ཚོས་གཞི་ཟབ་པ།</translation>
     </message>
@@ -127,7 +161,7 @@
 <context>
     <name>kdk::KProgressDialog</name>
     <message>
-        <location filename="../src/kprogressdialog.cpp" line="70"/>
+        <location filename="../src/kprogressdialog.cpp" line="80"/>
         <source>cancel</source>
         <translation>མེད་པར་བཟོ་དགོས།</translation>
     </message>
@@ -135,8 +169,8 @@
 <context>
     <name>kdk::KSearchLineEditPrivate</name>
     <message>
-        <location filename="../src/ksearchlineedit.cpp" line="627"/>
-        <location filename="../src/ksearchlineedit.cpp" line="815"/>
+        <location filename="../src/ksearchlineedit.cpp" line="662"/>
+        <location filename="../src/ksearchlineedit.cpp" line="857"/>
         <source>Search</source>
         <translation>འཚོལ་ཞིབ་བྱེད་པ།</translation>
     </message>
@@ -168,6 +202,47 @@
     </message>
 </context>
 <context>
+    <name>kdk::KSecurityQuestionDialog</name>
+    <message>
+        <location filename="../src/ksecurityquestiondialog.cpp" line="99"/>
+        <source>Security question%1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/ksecurityquestiondialog.cpp" line="106"/>
+        <source>Answer</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/ksecurityquestiondialog.cpp" line="109"/>
+        <source>Required</source>
+        <translation>ངེས་པར་དུ་སྐོང་དགོས།</translation>
+    </message>
+</context>
+<context>
+    <name>kdk::KSecurityQuestionDialogPrivate</name>
+    <message>
+        <location filename="../src/ksecurityquestiondialog.cpp" line="277"/>
+        <source>Security Question</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/ksecurityquestiondialog.cpp" line="279"/>
+        <source>Setting security questions to reset password when forget it, please remember answer.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/ksecurityquestiondialog.cpp" line="285"/>
+        <source>Cancel</source>
+        <translation>ཕྱིར་འཐེན།</translation>
+    </message>
+    <message>
+        <location filename="../src/ksecurityquestiondialog.cpp" line="288"/>
+        <source>Save</source>
+        <translation>ཉར་ཚགས་བྱེད་དགོས།</translation>
+    </message>
+</context>
+<context>
     <name>kdk::KUninstallDialog</name>
     <message>
         <location filename="../src/kuninstalldialog.cpp" line="124"/>
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/translations/gui_de.ts libkysdk-applications-2.5.2.0/kysdk-qtwidgets/translations/gui_de.ts
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/translations/gui_de.ts	2024-05-16 09:25:54.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/translations/gui_de.ts	2024-10-29 15:22:42.000000000 +0800
@@ -2,27 +2,48 @@
 <!DOCTYPE TS>
 <TS version="2.1" language="de">
 <context>
+    <name>CloseButton</name>
+    <message>
+        <location filename="../src/kcustomtabbar.cpp" line="3049"/>
+        <source>Close Tab</source>
+        <translation>Reiter schließen</translation>
+    </message>
+</context>
+<context>
+    <name>KCustomTabBar</name>
+    <message>
+        <location filename="../src/kcustomtabbar.cpp" line="518"/>
+        <source>Scroll Left</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/kcustomtabbar.cpp" line="519"/>
+        <source>Scroll Right</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>kdk::KAboutDialog</name>
     <message>
-        <location filename="../src/kaboutdialog.cpp" line="122"/>
+        <location filename="../src/kaboutdialog.cpp" line="123"/>
         <source>Your system does not have any email application installed or the default mail application is not set up</source>
         <translation>Sie haben keine E-Mail-Apps auf Ihrem System installiert oder keine Standard-Mail-App festgelegt</translation>
     </message>
     <message>
-        <location filename="../src/kaboutdialog.cpp" line="123"/>
+        <location filename="../src/kaboutdialog.cpp" line="124"/>
         <source>Unable to open mail application</source>
         <translation>E-Mail-Anwendung kann nicht geöffnet werden</translation>
     </message>
     <message>
-        <location filename="../src/kaboutdialog.cpp" line="257"/>
-        <location filename="../src/kaboutdialog.cpp" line="271"/>
+        <location filename="../src/kaboutdialog.cpp" line="258"/>
+        <location filename="../src/kaboutdialog.cpp" line="272"/>
         <source>Service &amp; Support: </source>
         <translatorcomment>服务与支持团队:</translatorcomment>
         <translation>Service &amp; Support: </translation>
     </message>
     <message>
-        <location filename="../src/kaboutdialog.cpp" line="263"/>
-        <location filename="../src/kaboutdialog.cpp" line="277"/>
+        <location filename="../src/kaboutdialog.cpp" line="264"/>
+        <location filename="../src/kaboutdialog.cpp" line="278"/>
         <source>Privacy statement</source>
         <translation>Datenschutzerklärung</translation>
     </message>
@@ -30,20 +51,28 @@
 <context>
     <name>kdk::KAboutDialogPrivate</name>
     <message>
-        <location filename="../src/kaboutdialog.cpp" line="381"/>
+        <location filename="../src/kaboutdialog.cpp" line="382"/>
         <source>version :</source>
         <translation>Version:</translation>
     </message>
     <message>
-        <location filename="../src/kaboutdialog.cpp" line="386"/>
+        <location filename="../src/kaboutdialog.cpp" line="387"/>
         <source>Version number not found</source>
         <translation>Versionsnummer nicht gefunden</translation>
     </message>
 </context>
 <context>
+    <name>kdk::KAddFileButtonPrivate</name>
+    <message>
+        <location filename="../src/kaddfilebutton.cpp" line="208"/>
+        <source>Please select file</source>
+        <translation type="unfinished">Bitte wählen Sie eine Datei aus</translation>
+    </message>
+</context>
+<context>
     <name>kdk::KDragWidget</name>
     <message>
-        <location filename="../src/kdragwidget.cpp" line="102"/>
+        <location filename="../src/kdragwidget.cpp" line="103"/>
         <source>Select or drag and drop the folder identification path</source>
         <translation>Wählen Sie den Ordneridentifikationspfad aus oder ziehen Sie ihn per Drag &amp; Drop</translation>
     </message>
@@ -51,7 +80,7 @@
 <context>
     <name>kdk::KDragWidgetPrivate</name>
     <message>
-        <location filename="../src/kdragwidget.cpp" line="62"/>
+        <location filename="../src/kdragwidget.cpp" line="63"/>
         <source>Please select file</source>
         <translation>Bitte wählen Sie eine Datei aus</translation>
     </message>
@@ -80,48 +109,53 @@
 <context>
     <name>kdk::KMenuButton</name>
     <message>
-        <location filename="../src/kmenubutton.cpp" line="67"/>
+        <location filename="../src/kmenubutton.cpp" line="72"/>
         <source>Options</source>
         <translation>Optionen</translation>
     </message>
     <message>
-        <location filename="../src/kmenubutton.cpp" line="68"/>
+        <location filename="../src/kmenubutton.cpp" line="73"/>
         <source>Setting</source>
         <translatorcomment>设置</translatorcomment>
         <translation>Einstellung</translation>
     </message>
     <message>
-        <location filename="../src/kmenubutton.cpp" line="69"/>
+        <location filename="../src/kmenubutton.cpp" line="74"/>
         <source>Theme</source>
         <translation>Thema</translation>
     </message>
     <message>
-        <location filename="../src/kmenubutton.cpp" line="70"/>
-        <source>Assist</source>
-        <translation>Helfen</translation>
+        <location filename="../src/kmenubutton.cpp" line="75"/>
+        <source>Help</source>
+        <translation>Hilfe</translation>
     </message>
     <message>
-        <location filename="../src/kmenubutton.cpp" line="71"/>
+        <location filename="../src/kmenubutton.cpp" line="76"/>
         <source>About</source>
         <translation>Über</translation>
     </message>
     <message>
-        <location filename="../src/kmenubutton.cpp" line="72"/>
+        <location filename="../src/kmenubutton.cpp" line="77"/>
+        <source>Feedback</source>
+        <translation>Feedback</translation>
+    </message>
+    <message>
+        <location filename="../src/kmenubutton.cpp" line="78"/>
         <source>Quit</source>
         <translation>Verlassen</translation>
     </message>
     <message>
-        <location filename="../src/kmenubutton.cpp" line="79"/>
+        <location filename="../src/kmenubutton.cpp" line="85"/>
         <source>Auto</source>
         <translation>Auto</translation>
     </message>
     <message>
-        <location filename="../src/kmenubutton.cpp" line="81"/>
+        <location filename="../src/kmenubutton.cpp" line="87"/>
         <source>Light</source>
         <translation>Licht</translation>
     </message>
     <message>
-        <location filename="../src/kmenubutton.cpp" line="83"/>
+        <location filename="../src/kmenubutton.cpp" line="89"/>
         <source>Dark</source>
         <translation>Dunkel</translation>
     </message>
@@ -129,7 +163,7 @@
 <context>
     <name>kdk::KProgressDialog</name>
     <message>
-        <location filename="../src/kprogressdialog.cpp" line="70"/>
+        <location filename="../src/kprogressdialog.cpp" line="80"/>
         <source>cancel</source>
         <translation>Abbrechen</translation>
     </message>
@@ -137,8 +171,8 @@
 <context>
     <name>kdk::KSearchLineEditPrivate</name>
     <message>
-        <location filename="../src/ksearchlineedit.cpp" line="627"/>
-        <location filename="../src/ksearchlineedit.cpp" line="815"/>
+        <location filename="../src/ksearchlineedit.cpp" line="662"/>
+        <location filename="../src/ksearchlineedit.cpp" line="857"/>
         <source>Search</source>
         <translation>Suchen</translation>
     </message>
@@ -170,6 +204,47 @@
     </message>
 </context>
 <context>
+    <name>kdk::KSecurityQuestionDialog</name>
+    <message>
+        <location filename="../src/ksecurityquestiondialog.cpp" line="99"/>
+        <source>Security question%1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/ksecurityquestiondialog.cpp" line="106"/>
+        <source>Answer</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/ksecurityquestiondialog.cpp" line="109"/>
+        <source>Required</source>
+        <translation>Erforderlich</translation>
+    </message>
+</context>
+<context>
+    <name>kdk::KSecurityQuestionDialogPrivate</name>
+    <message>
+        <location filename="../src/ksecurityquestiondialog.cpp" line="277"/>
+        <source>Security Question</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/ksecurityquestiondialog.cpp" line="279"/>
+        <source>Setting security questions to reset password when forget it, please remember answer.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/ksecurityquestiondialog.cpp" line="285"/>
+        <source>Cancel</source>
+        <translation>Abbrechen</translation>
+    </message>
+    <message>
+        <location filename="../src/ksecurityquestiondialog.cpp" line="288"/>
+        <source>Save</source>
+        <translation>Retten</translation>
+    </message>
+</context>
+<context>
     <name>kdk::KUninstallDialog</name>
     <message>
         <location filename="../src/kuninstalldialog.cpp" line="124"/>
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/translations/gui_es.ts libkysdk-applications-2.5.2.0/kysdk-qtwidgets/translations/gui_es.ts
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/translations/gui_es.ts	2024-05-16 09:25:54.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/translations/gui_es.ts	2024-10-29 15:22:42.000000000 +0800
@@ -2,27 +2,48 @@
 <!DOCTYPE TS>
 <TS version="2.1" language="es">
 <context>
+    <name>CloseButton</name>
+    <message>
+        <location filename="../src/kcustomtabbar.cpp" line="3049"/>
+        <source>Close Tab</source>
+        <translation>Cerrar pestaña</translation>
+    </message>
+</context>
+<context>
+    <name>KCustomTabBar</name>
+    <message>
+        <location filename="../src/kcustomtabbar.cpp" line="518"/>
+        <source>Scroll Left</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/kcustomtabbar.cpp" line="519"/>
+        <source>Scroll Right</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>kdk::KAboutDialog</name>
     <message>
-        <location filename="../src/kaboutdialog.cpp" line="122"/>
+        <location filename="../src/kaboutdialog.cpp" line="123"/>
         <source>Your system does not have any email application installed or the default mail application is not set up</source>
         <translation>No tiene ninguna aplicación de correo electrónico instalada en el sistema o no tiene una aplicación de correo predeterminada configurada</translation>
     </message>
     <message>
-        <location filename="../src/kaboutdialog.cpp" line="123"/>
+        <location filename="../src/kaboutdialog.cpp" line="124"/>
         <source>Unable to open mail application</source>
         <translation>No se puede abrir la aplicación de correo</translation>
     </message>
     <message>
-        <location filename="../src/kaboutdialog.cpp" line="257"/>
-        <location filename="../src/kaboutdialog.cpp" line="271"/>
+        <location filename="../src/kaboutdialog.cpp" line="258"/>
+        <location filename="../src/kaboutdialog.cpp" line="272"/>
         <source>Service &amp; Support: </source>
         <translatorcomment>服务与支持团队:</translatorcomment>
         <translation>Servicio y soporte: </translation>
     </message>
     <message>
-        <location filename="../src/kaboutdialog.cpp" line="263"/>
-        <location filename="../src/kaboutdialog.cpp" line="277"/>
+        <location filename="../src/kaboutdialog.cpp" line="264"/>
+        <location filename="../src/kaboutdialog.cpp" line="278"/>
         <source>Privacy statement</source>
         <translation>Declaración de privacidad</translation>
     </message>
@@ -30,20 +51,28 @@
 <context>
     <name>kdk::KAboutDialogPrivate</name>
     <message>
-        <location filename="../src/kaboutdialog.cpp" line="381"/>
+        <location filename="../src/kaboutdialog.cpp" line="382"/>
         <source>version :</source>
         <translation>Versión:</translation>
     </message>
     <message>
-        <location filename="../src/kaboutdialog.cpp" line="386"/>
+        <location filename="../src/kaboutdialog.cpp" line="387"/>
         <source>Version number not found</source>
         <translation>No se encontró el número de versión</translation>
     </message>
 </context>
 <context>
+    <name>kdk::KAddFileButtonPrivate</name>
+    <message>
+        <location filename="../src/kaddfilebutton.cpp" line="208"/>
+        <source>Please select file</source>
+        <translation type="unfinished">Por favor, seleccione un archivo</translation>
+    </message>
+</context>
+<context>
     <name>kdk::KDragWidget</name>
     <message>
-        <location filename="../src/kdragwidget.cpp" line="102"/>
+        <location filename="../src/kdragwidget.cpp" line="103"/>
         <source>Select or drag and drop the folder identification path</source>
         <translation>Seleccione o arrastre y suelte la ruta de identificación de la carpeta</translation>
     </message>
@@ -51,7 +80,7 @@
 <context>
     <name>kdk::KDragWidgetPrivate</name>
     <message>
-        <location filename="../src/kdragwidget.cpp" line="62"/>
+        <location filename="../src/kdragwidget.cpp" line="63"/>
         <source>Please select file</source>
         <translation>Por favor, seleccione un archivo</translation>
     </message>
@@ -80,48 +109,53 @@
 <context>
     <name>kdk::KMenuButton</name>
     <message>
-        <location filename="../src/kmenubutton.cpp" line="67"/>
+        <location filename="../src/kmenubutton.cpp" line="72"/>
         <source>Options</source>
         <translation>Opciones</translation>
     </message>
     <message>
-        <location filename="../src/kmenubutton.cpp" line="68"/>
+        <location filename="../src/kmenubutton.cpp" line="73"/>
         <source>Setting</source>
         <translatorcomment>设置</translatorcomment>
         <translation>Ajuste</translation>
     </message>
     <message>
-        <location filename="../src/kmenubutton.cpp" line="69"/>
+        <location filename="../src/kmenubutton.cpp" line="74"/>
         <source>Theme</source>
         <translation>Tema</translation>
     </message>
     <message>
-        <location filename="../src/kmenubutton.cpp" line="70"/>
-        <source>Assist</source>
-        <translation>Asistir</translation>
+        <location filename="../src/kmenubutton.cpp" line="75"/>
+        <source>Help</source>
+        <translation>Ayuda</translation>
     </message>
     <message>
-        <location filename="../src/kmenubutton.cpp" line="71"/>
+        <location filename="../src/kmenubutton.cpp" line="76"/>
         <source>About</source>
         <translation>Acerca de</translation>
     </message>
     <message>
-        <location filename="../src/kmenubutton.cpp" line="72"/>
+        <location filename="../src/kmenubutton.cpp" line="77"/>
+        <source>Feedback</source>
+        <translation>Retroalimentación</translation>
+    </message>
+    <message>
+        <location filename="../src/kmenubutton.cpp" line="78"/>
         <source>Quit</source>
         <translation>Renunciar</translation>
     </message>
     <message>
-        <location filename="../src/kmenubutton.cpp" line="79"/>
+        <location filename="../src/kmenubutton.cpp" line="85"/>
         <source>Auto</source>
         <translation>Automático</translation>
     </message>
     <message>
-        <location filename="../src/kmenubutton.cpp" line="81"/>
+        <location filename="../src/kmenubutton.cpp" line="87"/>
         <source>Light</source>
         <translation>Luz</translation>
     </message>
     <message>
-        <location filename="../src/kmenubutton.cpp" line="83"/>
+        <location filename="../src/kmenubutton.cpp" line="89"/>
         <source>Dark</source>
         <translation>Oscuro</translation>
     </message>
@@ -129,7 +163,7 @@
 <context>
     <name>kdk::KProgressDialog</name>
     <message>
-        <location filename="../src/kprogressdialog.cpp" line="70"/>
+        <location filename="../src/kprogressdialog.cpp" line="80"/>
         <source>cancel</source>
         <translation>Cancelar</translation>
     </message>
@@ -137,8 +171,8 @@
 <context>
     <name>kdk::KSearchLineEditPrivate</name>
     <message>
-        <location filename="../src/ksearchlineedit.cpp" line="627"/>
-        <location filename="../src/ksearchlineedit.cpp" line="815"/>
+        <location filename="../src/ksearchlineedit.cpp" line="662"/>
+        <location filename="../src/ksearchlineedit.cpp" line="857"/>
         <source>Search</source>
         <translation>Buscar</translation>
     </message>
@@ -170,6 +204,47 @@
     </message>
 </context>
 <context>
+    <name>kdk::KSecurityQuestionDialog</name>
+    <message>
+        <location filename="../src/ksecurityquestiondialog.cpp" line="99"/>
+        <source>Security question%1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/ksecurityquestiondialog.cpp" line="106"/>
+        <source>Answer</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/ksecurityquestiondialog.cpp" line="109"/>
+        <source>Required</source>
+        <translation>Obligatorio</translation>
+    </message>
+</context>
+<context>
+    <name>kdk::KSecurityQuestionDialogPrivate</name>
+    <message>
+        <location filename="../src/ksecurityquestiondialog.cpp" line="277"/>
+        <source>Security Question</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/ksecurityquestiondialog.cpp" line="279"/>
+        <source>Setting security questions to reset password when forget it, please remember answer.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/ksecurityquestiondialog.cpp" line="285"/>
+        <source>Cancel</source>
+        <translation>Cancel</translation>
+    </message>
+    <message>
+        <location filename="../src/ksecurityquestiondialog.cpp" line="288"/>
+        <source>Save</source>
+        <translation>Salvar</translation>
+    </message>
+</context>
+<context>
     <name>kdk::KUninstallDialog</name>
     <message>
         <location filename="../src/kuninstalldialog.cpp" line="124"/>
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/translations/gui_fr.ts libkysdk-applications-2.5.2.0/kysdk-qtwidgets/translations/gui_fr.ts
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/translations/gui_fr.ts	2024-05-16 09:25:54.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/translations/gui_fr.ts	2024-10-29 15:22:42.000000000 +0800
@@ -2,27 +2,48 @@
 <!DOCTYPE TS>
 <TS version="2.1" language="fr">
 <context>
+    <name>CloseButton</name>
+    <message>
+        <location filename="../src/kcustomtabbar.cpp" line="3049"/>
+        <source>Close Tab</source>
+        <translation>Fermer l&apos;onglet</translation>
+    </message>
+</context>
+<context>
+    <name>KCustomTabBar</name>
+    <message>
+        <location filename="../src/kcustomtabbar.cpp" line="518"/>
+        <source>Scroll Left</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/kcustomtabbar.cpp" line="519"/>
+        <source>Scroll Right</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>kdk::KAboutDialog</name>
     <message>
-        <location filename="../src/kaboutdialog.cpp" line="122"/>
+        <location filename="../src/kaboutdialog.cpp" line="123"/>
         <source>Your system does not have any email application installed or the default mail application is not set up</source>
         <translation>Aucune application de messagerie n’est installée sur votre système ou vous n’avez pas d’application de messagerie par défaut</translation>
     </message>
     <message>
-        <location filename="../src/kaboutdialog.cpp" line="123"/>
+        <location filename="../src/kaboutdialog.cpp" line="124"/>
         <source>Unable to open mail application</source>
         <translation>Impossible d’ouvrir l’application de messagerie</translation>
     </message>
     <message>
-        <location filename="../src/kaboutdialog.cpp" line="257"/>
-        <location filename="../src/kaboutdialog.cpp" line="271"/>
+        <location filename="../src/kaboutdialog.cpp" line="258"/>
+        <location filename="../src/kaboutdialog.cpp" line="272"/>
         <source>Service &amp; Support: </source>
         <translatorcomment>服务与支持团队:</translatorcomment>
         <translation>Service après-vente et assistance : </translation>
     </message>
     <message>
-        <location filename="../src/kaboutdialog.cpp" line="263"/>
-        <location filename="../src/kaboutdialog.cpp" line="277"/>
+        <location filename="../src/kaboutdialog.cpp" line="264"/>
+        <location filename="../src/kaboutdialog.cpp" line="278"/>
         <source>Privacy statement</source>
         <translation>Déclaration de confidentialité</translation>
     </message>
@@ -30,20 +51,28 @@
 <context>
     <name>kdk::KAboutDialogPrivate</name>
     <message>
-        <location filename="../src/kaboutdialog.cpp" line="381"/>
+        <location filename="../src/kaboutdialog.cpp" line="382"/>
         <source>version :</source>
         <translation>Version:</translation>
     </message>
     <message>
-        <location filename="../src/kaboutdialog.cpp" line="386"/>
+        <location filename="../src/kaboutdialog.cpp" line="387"/>
         <source>Version number not found</source>
         <translation>Numéro de version introuvable</translation>
     </message>
 </context>
 <context>
+    <name>kdk::KAddFileButtonPrivate</name>
+    <message>
+        <location filename="../src/kaddfilebutton.cpp" line="208"/>
+        <source>Please select file</source>
+        <translation type="unfinished">S’il vous plaît sélectionner un fichier</translation>
+    </message>
+</context>
+<context>
     <name>kdk::KDragWidget</name>
     <message>
-        <location filename="../src/kdragwidget.cpp" line="102"/>
+        <location filename="../src/kdragwidget.cpp" line="103"/>
         <source>Select or drag and drop the folder identification path</source>
         <translation>Sélectionnez ou glissez-déposez le chemin d’identification du dossier</translation>
     </message>
@@ -51,7 +80,7 @@
 <context>
     <name>kdk::KDragWidgetPrivate</name>
     <message>
-        <location filename="../src/kdragwidget.cpp" line="62"/>
+        <location filename="../src/kdragwidget.cpp" line="63"/>
         <source>Please select file</source>
         <translation>S’il vous plaît sélectionner un fichier</translation>
     </message>
@@ -80,48 +109,53 @@
 <context>
     <name>kdk::KMenuButton</name>
     <message>
-        <location filename="../src/kmenubutton.cpp" line="67"/>
+        <location filename="../src/kmenubutton.cpp" line="72"/>
         <source>Options</source>
         <translation>Options</translation>
     </message>
     <message>
-        <location filename="../src/kmenubutton.cpp" line="68"/>
+        <location filename="../src/kmenubutton.cpp" line="73"/>
         <source>Setting</source>
         <translatorcomment>设置</translatorcomment>
         <translation>Réglage</translation>
     </message>
     <message>
-        <location filename="../src/kmenubutton.cpp" line="69"/>
+        <location filename="../src/kmenubutton.cpp" line="74"/>
         <source>Theme</source>
         <translation>Thème</translation>
     </message>
     <message>
-        <location filename="../src/kmenubutton.cpp" line="70"/>
-        <source>Assist</source>
-        <translation>Aider</translation>
+        <location filename="../src/kmenubutton.cpp" line="75"/>
+        <source>Help</source>
+        <translation>Aide</translation>
     </message>
     <message>
-        <location filename="../src/kmenubutton.cpp" line="71"/>
+        <location filename="../src/kmenubutton.cpp" line="76"/>
         <source>About</source>
         <translation>Environ</translation>
     </message>
     <message>
-        <location filename="../src/kmenubutton.cpp" line="72"/>
+        <location filename="../src/kmenubutton.cpp" line="77"/>
+        <source>Feedback</source>
+        <translation>Rétroaction</translation>
+    </message>
+    <message>
+        <location filename="../src/kmenubutton.cpp" line="78"/>
         <source>Quit</source>
         <translation>Démissionner</translation>
     </message>
     <message>
-        <location filename="../src/kmenubutton.cpp" line="79"/>
+        <location filename="../src/kmenubutton.cpp" line="85"/>
         <source>Auto</source>
         <translation>Auto</translation>
     </message>
     <message>
-        <location filename="../src/kmenubutton.cpp" line="81"/>
+        <location filename="../src/kmenubutton.cpp" line="87"/>
         <source>Light</source>
         <translation>Lumière</translation>
     </message>
     <message>
-        <location filename="../src/kmenubutton.cpp" line="83"/>
+        <location filename="../src/kmenubutton.cpp" line="89"/>
         <source>Dark</source>
         <translation>Sombre</translation>
     </message>
@@ -129,7 +163,7 @@
 <context>
     <name>kdk::KProgressDialog</name>
     <message>
-        <location filename="../src/kprogressdialog.cpp" line="70"/>
+        <location filename="../src/kprogressdialog.cpp" line="80"/>
         <source>cancel</source>
         <translation>Annuler</translation>
     </message>
@@ -137,8 +171,8 @@
 <context>
     <name>kdk::KSearchLineEditPrivate</name>
     <message>
-        <location filename="../src/ksearchlineedit.cpp" line="627"/>
-        <location filename="../src/ksearchlineedit.cpp" line="815"/>
+        <location filename="../src/ksearchlineedit.cpp" line="662"/>
+        <location filename="../src/ksearchlineedit.cpp" line="857"/>
         <source>Search</source>
         <translation>Rechercher</translation>
     </message>
@@ -170,6 +204,47 @@
     </message>
 </context>
 <context>
+    <name>kdk::KSecurityQuestionDialog</name>
+    <message>
+        <location filename="../src/ksecurityquestiondialog.cpp" line="99"/>
+        <source>Security question%1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/ksecurityquestiondialog.cpp" line="106"/>
+        <source>Answer</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/ksecurityquestiondialog.cpp" line="109"/>
+        <source>Required</source>
+        <translation>Obligatoire</translation>
+    </message>
+</context>
+<context>
+    <name>kdk::KSecurityQuestionDialogPrivate</name>
+    <message>
+        <location filename="../src/ksecurityquestiondialog.cpp" line="277"/>
+        <source>Security Question</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/ksecurityquestiondialog.cpp" line="279"/>
+        <source>Setting security questions to reset password when forget it, please remember answer.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/ksecurityquestiondialog.cpp" line="285"/>
+        <source>Cancel</source>
+        <translation>Annuler</translation>
+    </message>
+    <message>
+        <location filename="../src/ksecurityquestiondialog.cpp" line="288"/>
+        <source>Save</source>
+        <translation>Sauvegarder</translation>
+    </message>
+</context>
+<context>
     <name>kdk::KUninstallDialog</name>
     <message>
         <location filename="../src/kuninstalldialog.cpp" line="124"/>
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/translations/gui_kk.ts libkysdk-applications-2.5.2.0/kysdk-qtwidgets/translations/gui_kk.ts
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/translations/gui_kk.ts	2024-05-16 09:25:54.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/translations/gui_kk.ts	2024-10-29 15:22:42.000000000 +0800
@@ -2,58 +2,87 @@
 <!DOCTYPE TS>
 <TS version="2.1" language="kk">
 <context>
+    <name>CloseButton</name>
+    <message>
+        <location filename="../src/kcustomtabbar.cpp" line="3049"/>
+        <source>Close Tab</source>
+        <translation>بەتكۇش ياپ</translation>
+    </message>
+</context>
+<context>
+    <name>KCustomTabBar</name>
+    <message>
+        <location filename="../src/kcustomtabbar.cpp" line="518"/>
+        <source>Scroll Left</source>
+        <translation>سولعا سىيرىل</translation>
+    </message>
+    <message>
+        <location filename="../src/kcustomtabbar.cpp" line="519"/>
+        <source>Scroll Right</source>
+        <translation>وڭعا سيىرىلۋ</translation>
+    </message>
+</context>
+<context>
     <name>kdk::KAboutDialog</name>
     <message>
-        <location filename="../src/kaboutdialog.cpp" line="122"/>
+        <location filename="../src/kaboutdialog.cpp" line="123"/>
         <source>Your system does not have any email application installed or the default mail application is not set up</source>
-        <translation>Жүйеңізде орнатылған электрондық пошта бағдарламалары жоқ немесе әдепкі пошта бағдарламасының жиынтығы жоқ</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/kaboutdialog.cpp" line="123"/>
+        <location filename="../src/kaboutdialog.cpp" line="124"/>
         <source>Unable to open mail application</source>
-        <translation>Пошта қолданбасы ашылмады</translation>
+        <translation>پوچتا جولدانباسى  ورتاسنىڭ اشۋئاجرىتىششىن بولمادى</translation>
     </message>
     <message>
-        <location filename="../src/kaboutdialog.cpp" line="257"/>
-        <location filename="../src/kaboutdialog.cpp" line="271"/>
+        <location filename="../src/kaboutdialog.cpp" line="258"/>
+        <location filename="../src/kaboutdialog.cpp" line="272"/>
         <source>Service &amp; Support: </source>
         <translatorcomment>服务与支持团队:</translatorcomment>
-        <translation>Қызмет және қолдау: </translation>
+        <translation>قىزىمەت ۋا قولداۋ: </translation>
     </message>
     <message>
-        <location filename="../src/kaboutdialog.cpp" line="263"/>
-        <location filename="../src/kaboutdialog.cpp" line="277"/>
+        <location filename="../src/kaboutdialog.cpp" line="264"/>
+        <location filename="../src/kaboutdialog.cpp" line="278"/>
         <source>Privacy statement</source>
-        <translation>Құпиялылық туралы мәлімдеме</translation>
+        <translation>قۇپيالىعىن ساقتاۋ مالىمەتى</translation>
     </message>
 </context>
 <context>
     <name>kdk::KAboutDialogPrivate</name>
     <message>
-        <location filename="../src/kaboutdialog.cpp" line="381"/>
+        <location filename="../src/kaboutdialog.cpp" line="382"/>
         <source>version :</source>
-        <translation>нұсқасы:</translation>
+        <translation>نۇسخا</translation>
     </message>
     <message>
-        <location filename="../src/kaboutdialog.cpp" line="386"/>
+        <location filename="../src/kaboutdialog.cpp" line="387"/>
         <source>Version number not found</source>
-        <translation>Нұсқа нөмірі табылмады</translation>
+        <translation>بۇرشاق كەلەتىن نۇسخا نۇمىردى تاباالمادٸ</translation>
+    </message>
+</context>
+<context>
+    <name>kdk::KAddFileButtonPrivate</name>
+    <message>
+        <location filename="../src/kaddfilebutton.cpp" line="208"/>
+        <source>Please select file</source>
+        <translation>حۇجاتتى تالدا</translation>
     </message>
 </context>
 <context>
     <name>kdk::KDragWidget</name>
     <message>
-        <location filename="../src/kdragwidget.cpp" line="102"/>
+        <location filename="../src/kdragwidget.cpp" line="103"/>
         <source>Select or drag and drop the folder identification path</source>
-        <translation>Қалтаны сәйкестендіру жолын таңдау немесе апару және тастау</translation>
+        <translation>حۇجات قىسۋاسپابىنىڭ كورسەتپە جولىن تالدا ياكي سۇيرەپ كەلىڭ</translation>
     </message>
 </context>
 <context>
     <name>kdk::KDragWidgetPrivate</name>
     <message>
-        <location filename="../src/kdragwidget.cpp" line="62"/>
+        <location filename="../src/kdragwidget.cpp" line="63"/>
         <source>Please select file</source>
-        <translation>Файлды таңдауыңызды сұраймын</translation>
+        <translation>حۇجاتتى تالدا</translation>
     </message>
 </context>
 <context>
@@ -61,7 +90,7 @@
     <message>
         <location filename="../src/kinputdialog.cpp" line="241"/>
         <source>Enter a value:</source>
-        <translation>Мәнді енгізіңіз:</translation>
+        <translation>بٸر مانىن كىرگىزىڭىز:</translation>
     </message>
 </context>
 <context>
@@ -69,78 +98,83 @@
     <message>
         <location filename="../src/kinputdialog.cpp" line="250"/>
         <source>ok</source>
-        <translation>Жақсы</translation>
+        <translation>تۇراقتاندىرۋ</translation>
     </message>
     <message>
         <location filename="../src/kinputdialog.cpp" line="252"/>
         <source>cancel</source>
-        <translation>Болдырмау</translation>
+        <translation>بوس ەتۋ</translation>
     </message>
 </context>
 <context>
     <name>kdk::KMenuButton</name>
     <message>
-        <location filename="../src/kmenubutton.cpp" line="67"/>
+        <location filename="../src/kmenubutton.cpp" line="72"/>
         <source>Options</source>
-        <translation>Параметрлер</translation>
+        <translation>تالدانبا</translation>
     </message>
     <message>
-        <location filename="../src/kmenubutton.cpp" line="68"/>
+        <location filename="../src/kmenubutton.cpp" line="73"/>
         <source>Setting</source>
         <translatorcomment>设置</translatorcomment>
-        <translation>Баптау</translation>
+        <translation>تەڭشە</translation>
     </message>
     <message>
-        <location filename="../src/kmenubutton.cpp" line="69"/>
+        <location filename="../src/kmenubutton.cpp" line="74"/>
         <source>Theme</source>
-        <translation>Тақырып</translation>
+        <translation>سلوب</translation>
     </message>
     <message>
-        <location filename="../src/kmenubutton.cpp" line="70"/>
-        <source>Assist</source>
-        <translation>Көмек көрсету</translation>
+        <location filename="../src/kmenubutton.cpp" line="75"/>
+        <source>Help</source>
+        <translation>جاردەم</translation>
     </message>
     <message>
-        <location filename="../src/kmenubutton.cpp" line="71"/>
+        <location filename="../src/kmenubutton.cpp" line="76"/>
         <source>About</source>
-        <translation>Шамамен</translation>
+        <translation>جونٸندە</translation>
     </message>
     <message>
-        <location filename="../src/kmenubutton.cpp" line="72"/>
+        <location filename="../src/kmenubutton.cpp" line="77"/>
+        <source>Feedback</source>
+        <translation>جاۋاپ قايتارۋ</translation>
+    </message>
+    <message>
+        <location filename="../src/kmenubutton.cpp" line="78"/>
         <source>Quit</source>
-        <translation>Шығу</translation>
+        <translation>شەگىنۋ</translation>
     </message>
     <message>
-        <location filename="../src/kmenubutton.cpp" line="79"/>
+        <location filename="../src/kmenubutton.cpp" line="85"/>
         <source>Auto</source>
-        <translation>Авто</translation>
+        <translation>اۆتوماتىك</translation>
     </message>
     <message>
-        <location filename="../src/kmenubutton.cpp" line="81"/>
+        <location filename="../src/kmenubutton.cpp" line="87"/>
         <source>Light</source>
-        <translation>Жарық</translation>
+        <translation>السىرەۋ رەڭ</translation>
     </message>
     <message>
-        <location filename="../src/kmenubutton.cpp" line="83"/>
+        <location filename="../src/kmenubutton.cpp" line="89"/>
         <source>Dark</source>
-        <translation>Қараңғы</translation>
+        <translation>قانىق رەڭ</translation>
     </message>
 </context>
 <context>
     <name>kdk::KProgressDialog</name>
     <message>
-        <location filename="../src/kprogressdialog.cpp" line="70"/>
+        <location filename="../src/kprogressdialog.cpp" line="80"/>
         <source>cancel</source>
-        <translation>Болдырмау</translation>
+        <translation>بوس ەتۋ</translation>
     </message>
 </context>
 <context>
     <name>kdk::KSearchLineEditPrivate</name>
     <message>
-        <location filename="../src/ksearchlineedit.cpp" line="627"/>
-        <location filename="../src/ksearchlineedit.cpp" line="815"/>
+        <location filename="../src/ksearchlineedit.cpp" line="662"/>
+        <location filename="../src/ksearchlineedit.cpp" line="857"/>
         <source>Search</source>
-        <translation>Іздеу</translation>
+        <translation>ٸزدەۋ</translation>
     </message>
 </context>
 <context>
@@ -148,17 +182,17 @@
     <message>
         <location filename="../src/ksecuritylevelbar.cpp" line="62"/>
         <source>Low</source>
-        <translation>Төмен</translation>
+        <translation>تومەن</translation>
     </message>
     <message>
         <location filename="../src/ksecuritylevelbar.cpp" line="65"/>
         <source>Medium</source>
-        <translation>Орташа</translation>
+        <translation>ورتا</translation>
     </message>
     <message>
         <location filename="../src/ksecuritylevelbar.cpp" line="68"/>
         <source>High</source>
-        <translation>Жоғары</translation>
+        <translation>جوعارعى</translation>
     </message>
 </context>
 <context>
@@ -166,7 +200,48 @@
     <message>
         <location filename="../src/ksecuritylevelbar.cpp" line="179"/>
         <source>Low</source>
-        <translation>Төмен</translation>
+        <translation>تومەن</translation>
+    </message>
+</context>
+<context>
+    <name>kdk::KSecurityQuestionDialog</name>
+    <message>
+        <location filename="../src/ksecurityquestiondialog.cpp" line="99"/>
+        <source>Security question%1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/ksecurityquestiondialog.cpp" line="106"/>
+        <source>Answer</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/ksecurityquestiondialog.cpp" line="109"/>
+        <source>Required</source>
+        <translation>ٴسوزسىز</translation>
+    </message>
+</context>
+<context>
+    <name>kdk::KSecurityQuestionDialogPrivate</name>
+    <message>
+        <location filename="../src/ksecurityquestiondialog.cpp" line="277"/>
+        <source>Security Question</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/ksecurityquestiondialog.cpp" line="279"/>
+        <source>Setting security questions to reset password when forget it, please remember answer.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/ksecurityquestiondialog.cpp" line="285"/>
+        <source>Cancel</source>
+        <translation>كۇشىنەن قالدىرۋ</translation>
+    </message>
+    <message>
+        <location filename="../src/ksecurityquestiondialog.cpp" line="288"/>
+        <source>Save</source>
+        <translation>ساقتاۋ</translation>
     </message>
 </context>
 <context>
@@ -176,17 +251,17 @@
         <location filename="../src/kuninstalldialog.cpp" line="216"/>
         <source>uninstall</source>
         <translatorcomment>立即卸载</translatorcomment>
-        <translation>жою</translation>
+        <translation>دەرەۋ جۋىپ جىبەرۋ</translation>
     </message>
     <message>
         <location filename="../src/kuninstalldialog.cpp" line="185"/>
         <source>deb name:</source>
-        <translation>деб атауы:</translation>
+        <translation>بۇلاق مى:</translation>
     </message>
     <message>
         <location filename="../src/kuninstalldialog.cpp" line="190"/>
         <source>deb version:</source>
-        <translation>deb нұсқасы:</translation>
+        <translation>باسىلىمى:</translation>
     </message>
 </context>
 <context>
@@ -194,12 +269,12 @@
     <message>
         <location filename="../src/kuninstalldialog.cpp" line="305"/>
         <source>deb name:</source>
-        <translation>деб атауы:</translation>
+        <translation>بۇلاق مى:</translation>
     </message>
     <message>
         <location filename="../src/kuninstalldialog.cpp" line="309"/>
         <source>deb version:</source>
-        <translation>deb нұсқасы:</translation>
+        <translation>باسىلىمى:</translation>
     </message>
 </context>
 <context>
@@ -208,13 +283,13 @@
         <location filename="../src/kwindowbuttonbar.cpp" line="156"/>
         <location filename="../src/kwindowbuttonbar.cpp" line="178"/>
         <source>Maximize</source>
-        <translation>Барынша көбейту</translation>
+        <translation>ۇلكەيتۋ</translation>
     </message>
     <message>
         <location filename="../src/kwindowbuttonbar.cpp" line="162"/>
         <location filename="../src/kwindowbuttonbar.cpp" line="183"/>
         <source>Restore</source>
-        <translation>Қалпына келтіру</translation>
+        <translation>قالپىنا كەلتىرىلگەن</translation>
     </message>
 </context>
 <context>
@@ -222,22 +297,22 @@
     <message>
         <location filename="../src/kwindowbuttonbar.cpp" line="271"/>
         <source>Minimize</source>
-        <translation>Кішірейту</translation>
+        <translation>ەڭ كشكەنە بەينە</translation>
     </message>
     <message>
         <location filename="../src/kwindowbuttonbar.cpp" line="280"/>
         <source>Close</source>
-        <translation>Жабу</translation>
+        <translation>تاقاۋ</translation>
     </message>
     <message>
         <location filename="../src/kwindowbuttonbar.cpp" line="341"/>
         <source>Maximize</source>
-        <translation>Барынша көбейту</translation>
+        <translation>ۇلكەيتۋ</translation>
     </message>
     <message>
         <location filename="../src/kwindowbuttonbar.cpp" line="346"/>
         <source>Restore</source>
-        <translation>Қалпына келтіру</translation>
+        <translation>قالپىنا كەلتىرىلگەن</translation>
     </message>
 </context>
 </TS>
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/translations/gui_ky.ts libkysdk-applications-2.5.2.0/kysdk-qtwidgets/translations/gui_ky.ts
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/translations/gui_ky.ts	2024-05-16 09:25:54.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/translations/gui_ky.ts	2024-10-29 15:22:42.000000000 +0800
@@ -2,58 +2,87 @@
 <!DOCTYPE TS>
 <TS version="2.1" language="ky">
 <context>
+    <name>CloseButton</name>
+    <message>
+        <location filename="../src/kcustomtabbar.cpp" line="3049"/>
+        <source>Close Tab</source>
+        <translation>بەتكۈچ ياپ</translation>
+    </message>
+</context>
+<context>
+    <name>KCustomTabBar</name>
+    <message>
+        <location filename="../src/kcustomtabbar.cpp" line="518"/>
+        <source>Scroll Left</source>
+        <translation>سولعو سىيرىل</translation>
+    </message>
+    <message>
+        <location filename="../src/kcustomtabbar.cpp" line="519"/>
+        <source>Scroll Right</source>
+        <translation>وڭ جاقا  تايعىلۇۇ</translation>
+    </message>
+</context>
+<context>
     <name>kdk::KAboutDialog</name>
     <message>
-        <location filename="../src/kaboutdialog.cpp" line="122"/>
+        <location filename="../src/kaboutdialog.cpp" line="123"/>
         <source>Your system does not have any email application installed or the default mail application is not set up</source>
-        <translation>Системаңызда орнотулган электрондук почта тиркемелери жок же дефолт почта тиркемеси орнотулган жок</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/kaboutdialog.cpp" line="123"/>
+        <location filename="../src/kaboutdialog.cpp" line="124"/>
         <source>Unable to open mail application</source>
-        <translation>Почта арызын ачууга болбоду</translation>
+        <translation>پوچتو جولدونموسۇ   تەرمىنالدى اچقالى بولبودۇ</translation>
     </message>
     <message>
-        <location filename="../src/kaboutdialog.cpp" line="257"/>
-        <location filename="../src/kaboutdialog.cpp" line="271"/>
+        <location filename="../src/kaboutdialog.cpp" line="258"/>
+        <location filename="../src/kaboutdialog.cpp" line="272"/>
         <source>Service &amp; Support: </source>
         <translatorcomment>服务与支持团队:</translatorcomment>
-        <translation>Кызмат &amp;: </translation>
+        <translation>تەيلۅۅ جانا قولدوش ، دەم بەرىش : </translation>
     </message>
     <message>
-        <location filename="../src/kaboutdialog.cpp" line="263"/>
-        <location filename="../src/kaboutdialog.cpp" line="277"/>
+        <location filename="../src/kaboutdialog.cpp" line="264"/>
+        <location filename="../src/kaboutdialog.cpp" line="278"/>
         <source>Privacy statement</source>
-        <translation>Купуялуулук билдирүүсү</translation>
+        <translation>سىرىن ساقتوو باياناتى</translation>
     </message>
 </context>
 <context>
     <name>kdk::KAboutDialogPrivate</name>
     <message>
-        <location filename="../src/kaboutdialog.cpp" line="381"/>
+        <location filename="../src/kaboutdialog.cpp" line="382"/>
         <source>version :</source>
-        <translation>нускасы :</translation>
+        <translation>نۇسقا</translation>
     </message>
     <message>
-        <location filename="../src/kaboutdialog.cpp" line="386"/>
+        <location filename="../src/kaboutdialog.cpp" line="387"/>
         <source>Version number not found</source>
-        <translation>Версиянын номери табылган жок</translation>
+        <translation>شاي  گەلەتۇرعان  نۇسقا نومۇرۇن تابالبادى</translation>
+    </message>
+</context>
+<context>
+    <name>kdk::KAddFileButtonPrivate</name>
+    <message>
+        <location filename="../src/kaddfilebutton.cpp" line="208"/>
+        <source>Please select file</source>
+        <translation>ۅجۅتۉن تانداڭ</translation>
     </message>
 </context>
 <context>
     <name>kdk::KDragWidget</name>
     <message>
-        <location filename="../src/kdragwidget.cpp" line="102"/>
+        <location filename="../src/kdragwidget.cpp" line="103"/>
         <source>Select or drag and drop the folder identification path</source>
-        <translation>Папканы аныктоо жолун тандоо же сүйрөп чыгуу</translation>
+        <translation>ۅجۅت  قىسقىچتىن جولجورۇق  جولۇن تانداڭ كۅرۉنۉشتۅرۉ سۉيرۅپ كېلىڭ</translation>
     </message>
 </context>
 <context>
     <name>kdk::KDragWidgetPrivate</name>
     <message>
-        <location filename="../src/kdragwidget.cpp" line="62"/>
+        <location filename="../src/kdragwidget.cpp" line="63"/>
         <source>Please select file</source>
-        <translation>Файлды тандаңыз</translation>
+        <translation>ۅجۅتۉن تانداڭ</translation>
     </message>
 </context>
 <context>
@@ -61,7 +90,7 @@
     <message>
         <location filename="../src/kinputdialog.cpp" line="241"/>
         <source>Enter a value:</source>
-        <translation>Бир наркты киргизүү:</translation>
+        <translation>بىر  نارقتۇۇنۇ  كىرگىزىڭ:</translation>
     </message>
 </context>
 <context>
@@ -69,78 +98,83 @@
     <message>
         <location filename="../src/kinputdialog.cpp" line="250"/>
         <source>ok</source>
-        <translation>Макул</translation>
+        <translation>بەكىتۉۉ</translation>
     </message>
     <message>
         <location filename="../src/kinputdialog.cpp" line="252"/>
         <source>cancel</source>
-        <translation>Жокко чыгаруу</translation>
+        <translation>بەكەر  جاسوو ،اتقارۇۇ</translation>
     </message>
 </context>
 <context>
     <name>kdk::KMenuButton</name>
     <message>
-        <location filename="../src/kmenubutton.cpp" line="67"/>
+        <location filename="../src/kmenubutton.cpp" line="72"/>
         <source>Options</source>
-        <translation>Параметрлер</translation>
+        <translation>تاندالما</translation>
     </message>
     <message>
-        <location filename="../src/kmenubutton.cpp" line="68"/>
+        <location filename="../src/kmenubutton.cpp" line="73"/>
         <source>Setting</source>
         <translatorcomment>设置</translatorcomment>
-        <translation>Орнотуу</translation>
+        <translation>تەڭشەك</translation>
     </message>
     <message>
-        <location filename="../src/kmenubutton.cpp" line="69"/>
+        <location filename="../src/kmenubutton.cpp" line="74"/>
         <source>Theme</source>
-        <translation>Тема</translation>
+        <translation>ۇسلۇپ</translation>
     </message>
     <message>
-        <location filename="../src/kmenubutton.cpp" line="70"/>
-        <source>Assist</source>
-        <translation>Жардам</translation>
+        <location filename="../src/kmenubutton.cpp" line="75"/>
+        <source>Help</source>
+        <translation>جەرلىك</translation>
     </message>
     <message>
-        <location filename="../src/kmenubutton.cpp" line="71"/>
+        <location filename="../src/kmenubutton.cpp" line="76"/>
         <source>About</source>
-        <translation>Жөнүндө</translation>
+        <translation>جۅنۉندۅ</translation>
     </message>
     <message>
-        <location filename="../src/kmenubutton.cpp" line="72"/>
+        <location filename="../src/kmenubutton.cpp" line="77"/>
+        <source>Feedback</source>
+        <translation>ىنكاس كەتىرىش</translation>
+    </message>
+    <message>
+        <location filename="../src/kmenubutton.cpp" line="78"/>
         <source>Quit</source>
-        <translation>Чыгуу</translation>
+        <translation>جانىش ، قايتىش</translation>
     </message>
     <message>
-        <location filename="../src/kmenubutton.cpp" line="79"/>
+        <location filename="../src/kmenubutton.cpp" line="85"/>
         <source>Auto</source>
-        <translation>Авто</translation>
+        <translation>اپتوماتىك</translation>
     </message>
     <message>
-        <location filename="../src/kmenubutton.cpp" line="81"/>
+        <location filename="../src/kmenubutton.cpp" line="87"/>
         <source>Light</source>
-        <translation>Жарык</translation>
+        <translation>كۉڭۉرت  تۉس</translation>
     </message>
     <message>
-        <location filename="../src/kmenubutton.cpp" line="83"/>
+        <location filename="../src/kmenubutton.cpp" line="89"/>
         <source>Dark</source>
-        <translation>Караңгы</translation>
+        <translation>قانىق  تۉس</translation>
     </message>
 </context>
 <context>
     <name>kdk::KProgressDialog</name>
     <message>
-        <location filename="../src/kprogressdialog.cpp" line="70"/>
+        <location filename="../src/kprogressdialog.cpp" line="80"/>
         <source>cancel</source>
-        <translation>Жокко чыгаруу</translation>
+        <translation>بەكەر  جاسوو ،اتقارۇۇ</translation>
     </message>
 </context>
 <context>
     <name>kdk::KSearchLineEditPrivate</name>
     <message>
-        <location filename="../src/ksearchlineedit.cpp" line="627"/>
-        <location filename="../src/ksearchlineedit.cpp" line="815"/>
+        <location filename="../src/ksearchlineedit.cpp" line="662"/>
+        <location filename="../src/ksearchlineedit.cpp" line="857"/>
         <source>Search</source>
-        <translation>Издөө</translation>
+        <translation>ىزدۅۅ</translation>
     </message>
 </context>
 <context>
@@ -148,17 +182,17 @@
     <message>
         <location filename="../src/ksecuritylevelbar.cpp" line="62"/>
         <source>Low</source>
-        <translation>Төмөн</translation>
+        <translation>تۅمۅن</translation>
     </message>
     <message>
         <location filename="../src/ksecuritylevelbar.cpp" line="65"/>
         <source>Medium</source>
-        <translation>Орто</translation>
+        <translation>ورتوسۇ</translation>
     </message>
     <message>
         <location filename="../src/ksecuritylevelbar.cpp" line="68"/>
         <source>High</source>
-        <translation>Жогорку</translation>
+        <translation>جوعورۇ</translation>
     </message>
 </context>
 <context>
@@ -166,7 +200,48 @@
     <message>
         <location filename="../src/ksecuritylevelbar.cpp" line="179"/>
         <source>Low</source>
-        <translation>Төмөн</translation>
+        <translation>تۅمۅن</translation>
+    </message>
+</context>
+<context>
+    <name>kdk::KSecurityQuestionDialog</name>
+    <message>
+        <location filename="../src/ksecurityquestiondialog.cpp" line="99"/>
+        <source>Security question%1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/ksecurityquestiondialog.cpp" line="106"/>
+        <source>Answer</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/ksecurityquestiondialog.cpp" line="109"/>
+        <source>Required</source>
+        <translation>زارىل</translation>
+    </message>
+</context>
+<context>
+    <name>kdk::KSecurityQuestionDialogPrivate</name>
+    <message>
+        <location filename="../src/ksecurityquestiondialog.cpp" line="277"/>
+        <source>Security Question</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/ksecurityquestiondialog.cpp" line="279"/>
+        <source>Setting security questions to reset password when forget it, please remember answer.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/ksecurityquestiondialog.cpp" line="285"/>
+        <source>Cancel</source>
+        <translation>ارعادان  قالتىرىش</translation>
+    </message>
+    <message>
+        <location filename="../src/ksecurityquestiondialog.cpp" line="288"/>
+        <source>Save</source>
+        <translation>ساقتوو</translation>
     </message>
 </context>
 <context>
@@ -176,17 +251,17 @@
         <location filename="../src/kuninstalldialog.cpp" line="216"/>
         <source>uninstall</source>
         <translatorcomment>立即卸载</translatorcomment>
-        <translation>туруксуз</translation>
+        <translation>داروو  جۇۇپ جىبەر</translation>
     </message>
     <message>
         <location filename="../src/kuninstalldialog.cpp" line="185"/>
         <source>deb name:</source>
-        <translation>деб аты:</translation>
+        <translation>تاڭىق ناامى :</translation>
     </message>
     <message>
         <location filename="../src/kuninstalldialog.cpp" line="190"/>
         <source>deb version:</source>
-        <translation>деб версиясы:</translation>
+        <translation>باسماسى :</translation>
     </message>
 </context>
 <context>
@@ -194,12 +269,12 @@
     <message>
         <location filename="../src/kuninstalldialog.cpp" line="305"/>
         <source>deb name:</source>
-        <translation>деб аты:</translation>
+        <translation>تاڭىق ناامى :</translation>
     </message>
     <message>
         <location filename="../src/kuninstalldialog.cpp" line="309"/>
         <source>deb version:</source>
-        <translation>деб версиясы:</translation>
+        <translation>باسماسى :</translation>
     </message>
 </context>
 <context>
@@ -208,13 +283,13 @@
         <location filename="../src/kwindowbuttonbar.cpp" line="156"/>
         <location filename="../src/kwindowbuttonbar.cpp" line="178"/>
         <source>Maximize</source>
-        <translation>Максималдуу</translation>
+        <translation>چوڭويتۇش</translation>
     </message>
     <message>
         <location filename="../src/kwindowbuttonbar.cpp" line="162"/>
         <location filename="../src/kwindowbuttonbar.cpp" line="183"/>
         <source>Restore</source>
-        <translation>Калыбына келтирүү</translation>
+        <translation>العاچىنا كەلتىرۉۉ</translation>
     </message>
 </context>
 <context>
@@ -222,22 +297,22 @@
     <message>
         <location filename="../src/kwindowbuttonbar.cpp" line="271"/>
         <source>Minimize</source>
-        <translation>Минималдуу</translation>
+        <translation>ەڭ كىچىك   ابالى</translation>
     </message>
     <message>
         <location filename="../src/kwindowbuttonbar.cpp" line="280"/>
         <source>Close</source>
-        <translation>Жабуу</translation>
+        <translation>بەكىتىش</translation>
     </message>
     <message>
         <location filename="../src/kwindowbuttonbar.cpp" line="341"/>
         <source>Maximize</source>
-        <translation>Максималдуу</translation>
+        <translation>چوڭويتۇش</translation>
     </message>
     <message>
         <location filename="../src/kwindowbuttonbar.cpp" line="346"/>
         <source>Restore</source>
-        <translation>Калыбына келтирүү</translation>
+        <translation>العاچىنا كەلتىرۉۉ</translation>
     </message>
 </context>
 </TS>
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/translations/gui_mn.ts libkysdk-applications-2.5.2.0/kysdk-qtwidgets/translations/gui_mn.ts
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/translations/gui_mn.ts	2024-05-16 09:25:54.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/translations/gui_mn.ts	2024-10-29 15:22:42.000000000 +0800
@@ -2,26 +2,47 @@
 <!DOCTYPE TS>
 <TS version="2.1" language="mn">
 <context>
+    <name>CloseButton</name>
+    <message>
+        <location filename="../src/kcustomtabbar.cpp" line="3049"/>
+        <source>Close Tab</source>
+        <translation>ᠱᠤᠰᠢᠭ᠎ᠠ ᠵᠢᠨ ᠨᠢᠭᠤᠷ ᠢ᠋ ᠬᠠᠭᠠᠬᠤ</translation>
+    </message>
+</context>
+<context>
+    <name>KCustomTabBar</name>
+    <message>
+        <location filename="../src/kcustomtabbar.cpp" line="518"/>
+        <source>Scroll Left</source>
+        <translation>ᠵᠡᠭᠦᠨᠰᠢ ᠦᠩᠬᠦᠷᠢᠬᠦ</translation>
+    </message>
+    <message>
+        <location filename="../src/kcustomtabbar.cpp" line="519"/>
+        <source>Scroll Right</source>
+        <translation>ᠪᠠᠷᠠᠭᠤᠨᠰᠢ ᠦᠩᠬᠦᠷᠢᠬᠦ</translation>
+    </message>
+</context>
+<context>
     <name>kdk::KAboutDialog</name>
     <message>
-        <location filename="../src/kaboutdialog.cpp" line="122"/>
+        <location filename="../src/kaboutdialog.cpp" line="123"/>
         <source>Your system does not have any email application installed or the default mail application is not set up</source>
         <translation>ᠲᠠᠨ ᠤ ᠰᠢᠰᠲ᠋ᠧᠮ ᠳᠦ ᠶᠠᠮᠠᠷ ᠴᠤ ᠡᠯᠧᠺᠲ᠋ᠷᠣᠨ ᠰᠢᠤᠳᠠᠨ ᠤ ᠵᠦᠢᠯ ᠢ ᠬᠡᠷᠡᠭᠯᠡᠬᠦ ᠪᠤᠶᠤ ᠳᠤᠪ ᠳᠤᠭᠤᠢ ᠲᠠᠨᠢᠬᠤ ᠰᠢᠤᠳᠠᠨ ᠤ ᠵᠦᠢᠯ ᠦᠨ ᠬᠡᠷᠡᠭᠯᠡᠯᠲᠡ ᠬᠢᠭᠰᠡᠨ ᠦᠭᠡᠢ ᠃</translation>
     </message>
     <message>
-        <location filename="../src/kaboutdialog.cpp" line="123"/>
+        <location filename="../src/kaboutdialog.cpp" line="124"/>
         <source>Unable to open mail application</source>
         <translation>ᠰᠢᠤᠳᠠᠨ ᠤ ᠵᠦᠢᠯ ᠦᠨ ᠵᠣᠴᠢᠨ ᠡᠷᠦᠬᠡ ᠶᠢ ᠨᠡᠭᠡᠭᠡᠵᠦ ᠳᠡᠶᠢᠯᠬᠦ ᠦᠭᠡᠢ ᠃</translation>
     </message>
     <message>
-        <location filename="../src/kaboutdialog.cpp" line="257"/>
-        <location filename="../src/kaboutdialog.cpp" line="271"/>
+        <location filename="../src/kaboutdialog.cpp" line="258"/>
+        <location filename="../src/kaboutdialog.cpp" line="272"/>
         <source>Service &amp; Support: </source>
         <translation>ᠦᠢᠯᠡᠴᠢᠯᠡᠬᠦ ᠪᠠ ᠳᠡᠮᠵᠢᠬᠦ ᠪᠦᠯᠬᠦᠮ:</translation>
     </message>
     <message>
-        <location filename="../src/kaboutdialog.cpp" line="263"/>
-        <location filename="../src/kaboutdialog.cpp" line="277"/>
+        <location filename="../src/kaboutdialog.cpp" line="264"/>
+        <location filename="../src/kaboutdialog.cpp" line="278"/>
         <source>Privacy statement</source>
         <translation>《ᠨᠢᠭᠤᠴᠠ ᠶᠢᠨ ᠢᠯᠡᠷᠬᠡᠶᠢᠯᠡᠯᠲᠡ》</translation>
     </message>
@@ -29,20 +50,28 @@
 <context>
     <name>kdk::KAboutDialogPrivate</name>
     <message>
-        <location filename="../src/kaboutdialog.cpp" line="381"/>
+        <location filename="../src/kaboutdialog.cpp" line="382"/>
         <source>version :</source>
         <translation>ᠬᠡᠪᠯᠡᠯ</translation>
     </message>
     <message>
-        <location filename="../src/kaboutdialog.cpp" line="386"/>
+        <location filename="../src/kaboutdialog.cpp" line="387"/>
         <source>Version number not found</source>
         <translation>ᠵᠣᠬᠢᠴᠠᠩᠭᠤᠢ ᠬᠡᠪᠯᠡᠯ ᠦᠨ ᠨᠣᠮᠧᠷ ᠢ ᠡᠷᠢᠵᠦ ᠣᠯᠣᠭᠰᠠᠨ ᠦᠭᠡᠢ ᠃</translation>
     </message>
 </context>
 <context>
+    <name>kdk::KAddFileButtonPrivate</name>
+    <message>
+        <location filename="../src/kaddfilebutton.cpp" line="208"/>
+        <source>Please select file</source>
+        <translation type="unfinished">ᠪᠢᠴᠢᠭ᠌ ᠮᠠᠲ᠋ᠧᠷᠢᠶᠠᠯ ᠢ ᠰᠣᠩᠭᠣᠭᠠᠷᠠᠢ ᠃</translation>
+    </message>
+</context>
+<context>
     <name>kdk::KDragWidget</name>
     <message>
-        <location filename="../src/kdragwidget.cpp" line="102"/>
+        <location filename="../src/kdragwidget.cpp" line="103"/>
         <source>Select or drag and drop the folder identification path</source>
         <translation>ᠪᠢᠴᠢᠭ ᠮᠠᠲ᠋ᠧᠷᠢᠶᠠᠯ ᠤᠨ ᠬᠠᠪᠤᠳᠠᠷ ᠢ ᠰᠣᠩᠭᠣᠬᠤ ᠪᠤᠶᠤ ᠲᠠᠯᠪᠢᠬᠤ ᠬᠡᠷᠡᠭᠲᠡᠶ᠃</translation>
     </message>
@@ -50,7 +79,7 @@
 <context>
     <name>kdk::KDragWidgetPrivate</name>
     <message>
-        <location filename="../src/kdragwidget.cpp" line="62"/>
+        <location filename="../src/kdragwidget.cpp" line="63"/>
         <source>Please select file</source>
         <translation>ᠪᠢᠴᠢᠭ᠌ ᠮᠠᠲ᠋ᠧᠷᠢᠶᠠᠯ ᠢ ᠰᠣᠩᠭᠣᠭᠠᠷᠠᠢ ᠃</translation>
     </message>
@@ -79,47 +108,52 @@
 <context>
     <name>kdk::KMenuButton</name>
     <message>
-        <location filename="../src/kmenubutton.cpp" line="67"/>
+        <location filename="../src/kmenubutton.cpp" line="72"/>
         <source>Options</source>
         <translation>ᠰᠣᠩᠭᠣᠯᠲᠠ ᠃</translation>
     </message>
     <message>
-        <location filename="../src/kmenubutton.cpp" line="68"/>
+        <location filename="../src/kmenubutton.cpp" line="73"/>
         <source>Setting</source>
         <translation>ᠳᠤᠬᠢᠷᠠᠭᠤᠯᠬᠤ</translation>
     </message>
     <message>
-        <location filename="../src/kmenubutton.cpp" line="69"/>
+        <location filename="../src/kmenubutton.cpp" line="74"/>
         <source>Theme</source>
         <translation>ᠭᠤᠤᠯ ᠰᠡᠳᠦᠪ</translation>
     </message>
     <message>
-        <location filename="../src/kmenubutton.cpp" line="70"/>
-        <source>Assist</source>
-        <translation>ᠳᠤᠰᠠᠯᠠᠬᠤ</translation>
+        <location filename="../src/kmenubutton.cpp" line="75"/>
+        <source>Help</source>
+        <translation>ᠬᠠᠪᠰᠤᠷᠬᠤ</translation>
     </message>
     <message>
-        <location filename="../src/kmenubutton.cpp" line="71"/>
+        <location filename="../src/kmenubutton.cpp" line="76"/>
         <source>About</source>
         <translation>ᠲᠤᠬᠠᠢ</translation>
     </message>
     <message>
-        <location filename="../src/kmenubutton.cpp" line="72"/>
+        <location filename="../src/kmenubutton.cpp" line="77"/>
+        <source>Feedback</source>
+        <translation>ᠬᠠᠷᠢᠭᠤ ᠲᠤᠰᠬᠠᠯ ᠃</translation>
+    </message>
+    <message>
+        <location filename="../src/kmenubutton.cpp" line="78"/>
         <source>Quit</source>
         <translation>ᠪᠤᠴᠠᠵᠤ ᠭᠠᠷᠬᠤ</translation>
     </message>
     <message>
-        <location filename="../src/kmenubutton.cpp" line="79"/>
+        <location filename="../src/kmenubutton.cpp" line="85"/>
         <source>Auto</source>
         <translation>ᠭᠤᠤᠯ ᠰᠡᠳᠦᠪ ᠢ ᠳᠠᠭᠠᠬᠤ</translation>
     </message>
     <message>
-        <location filename="../src/kmenubutton.cpp" line="81"/>
+        <location filename="../src/kmenubutton.cpp" line="87"/>
         <source>Light</source>
         <translation>ᠬᠦᠶᠦᠬᠡᠨ ᠦᠩᠭᠡ ᠲᠠᠢ ᠭᠤᠤᠯ ᠰᠡᠳᠦᠪ</translation>
     </message>
     <message>
-        <location filename="../src/kmenubutton.cpp" line="83"/>
+        <location filename="../src/kmenubutton.cpp" line="89"/>
         <source>Dark</source>
         <translation>ᠬᠦᠨ ᠦᠩᠭᠡ ᠲᠠᠢ ᠭᠤᠤᠯ ᠰᠡᠳᠦᠪ</translation>
     </message>
@@ -127,7 +161,7 @@
 <context>
     <name>kdk::KProgressDialog</name>
     <message>
-        <location filename="../src/kprogressdialog.cpp" line="70"/>
+        <location filename="../src/kprogressdialog.cpp" line="80"/>
         <source>cancel</source>
         <translation>ᠦᠬᠡᠢᠰᠬᠡᠬᠦ</translation>
     </message>
@@ -135,8 +169,8 @@
 <context>
     <name>kdk::KSearchLineEditPrivate</name>
     <message>
-        <location filename="../src/ksearchlineedit.cpp" line="627"/>
-        <location filename="../src/ksearchlineedit.cpp" line="815"/>
+        <location filename="../src/ksearchlineedit.cpp" line="662"/>
+        <location filename="../src/ksearchlineedit.cpp" line="857"/>
         <source>Search</source>
         <translation>ᠬᠠᠢᠯᠳᠠ</translation>
     </message>
@@ -168,6 +202,47 @@
     </message>
 </context>
 <context>
+    <name>kdk::KSecurityQuestionDialog</name>
+    <message>
+        <location filename="../src/ksecurityquestiondialog.cpp" line="99"/>
+        <source>Security question%1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/ksecurityquestiondialog.cpp" line="106"/>
+        <source>Answer</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/ksecurityquestiondialog.cpp" line="109"/>
+        <source>Required</source>
+        <translation>ᠡᠷᠬᠡᠪᠰᠢ ᠳᠠᠭᠯᠠᠬᠤ</translation>
+    </message>
+</context>
+<context>
+    <name>kdk::KSecurityQuestionDialogPrivate</name>
+    <message>
+        <location filename="../src/ksecurityquestiondialog.cpp" line="277"/>
+        <source>Security Question</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/ksecurityquestiondialog.cpp" line="279"/>
+        <source>Setting security questions to reset password when forget it, please remember answer.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/ksecurityquestiondialog.cpp" line="285"/>
+        <source>Cancel</source>
+        <translation>ᠦᠬᠡᠢᠰᠭᠡᠬᠦ᠌</translation>
+    </message>
+    <message>
+        <location filename="../src/ksecurityquestiondialog.cpp" line="288"/>
+        <source>Save</source>
+        <translation>ᠬᠠᠳᠠᠭᠠᠯᠠᠬᠤ</translation>
+    </message>
+</context>
+<context>
     <name>kdk::KUninstallDialog</name>
     <message>
         <location filename="../src/kuninstalldialog.cpp" line="124"/>
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/translations/gui_ug.ts libkysdk-applications-2.5.2.0/kysdk-qtwidgets/translations/gui_ug.ts
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/translations/gui_ug.ts	2024-05-16 09:25:54.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/translations/gui_ug.ts	2024-10-29 15:22:42.000000000 +0800
@@ -2,58 +2,87 @@
 <!DOCTYPE TS>
 <TS version="2.1" language="ug">
 <context>
+    <name>CloseButton</name>
+    <message>
+        <location filename="../src/kcustomtabbar.cpp" line="3049"/>
+        <source>Close Tab</source>
+        <translation>بەتكۈچ ياپ</translation>
+    </message>
+</context>
+<context>
+    <name>KCustomTabBar</name>
+    <message>
+        <location filename="../src/kcustomtabbar.cpp" line="518"/>
+        <source>Scroll Left</source>
+        <translation>سولغا سىيرىل</translation>
+    </message>
+    <message>
+        <location filename="../src/kcustomtabbar.cpp" line="519"/>
+        <source>Scroll Right</source>
+        <translation>ئوڭغا سىيرىلىش</translation>
+    </message>
+</context>
+<context>
     <name>kdk::KAboutDialog</name>
     <message>
-        <location filename="../src/kaboutdialog.cpp" line="122"/>
+        <location filename="../src/kaboutdialog.cpp" line="123"/>
         <source>Your system does not have any email application installed or the default mail application is not set up</source>
-        <translation>سىزنىڭ سىستېمىڭىزغا ھېچقانداق ئېلخەت ئورنىتىلمىغان ياكى كۆڭۈلدىكىدەك پوچتا يوللانمىسىنىڭ قوللىنىلىشى ئورناتمىغان</translation>
+        <translation type="unfinished"></translation>
     </message>
     <message>
-        <location filename="../src/kaboutdialog.cpp" line="123"/>
+        <location filename="../src/kaboutdialog.cpp" line="124"/>
         <source>Unable to open mail application</source>
-        <translation>ئېلخەت ئىلتىماسىنى ئاچالمىدى</translation>
+        <translation>ئېلخەت خېرىدارلار تېرمىنالىنى ئاچقىلى بولمىدى</translation>
     </message>
     <message>
-        <location filename="../src/kaboutdialog.cpp" line="257"/>
-        <location filename="../src/kaboutdialog.cpp" line="271"/>
+        <location filename="../src/kaboutdialog.cpp" line="258"/>
+        <location filename="../src/kaboutdialog.cpp" line="272"/>
         <source>Service &amp; Support: </source>
         <translatorcomment>服务与支持团队:</translatorcomment>
-        <translation>مۇلازىمەت &gt; قوللاش: </translation>
+        <translation>مۇلازىمەت ۋە قوللاش ئەترىتى </translation>
     </message>
     <message>
-        <location filename="../src/kaboutdialog.cpp" line="263"/>
-        <location filename="../src/kaboutdialog.cpp" line="277"/>
+        <location filename="../src/kaboutdialog.cpp" line="264"/>
+        <location filename="../src/kaboutdialog.cpp" line="278"/>
         <source>Privacy statement</source>
-        <translation>مەخپىيەتلىك باياناتى</translation>
+        <translation>مەخپىيەتلىكنى ساقلاش باياناتى</translation>
     </message>
 </context>
 <context>
     <name>kdk::KAboutDialogPrivate</name>
     <message>
-        <location filename="../src/kaboutdialog.cpp" line="381"/>
+        <location filename="../src/kaboutdialog.cpp" line="382"/>
         <source>version :</source>
-        <translation>نەشرى :</translation>
+        <translation>نۇسخا</translation>
     </message>
     <message>
-        <location filename="../src/kaboutdialog.cpp" line="386"/>
+        <location filename="../src/kaboutdialog.cpp" line="387"/>
         <source>Version number not found</source>
-        <translation>نەشر نومۇرى تېپىلمىدى</translation>
+        <translation>ماس كېلىدىغان نۇسخا نومۇرىنى تاپالمىدى</translation>
+    </message>
+</context>
+<context>
+    <name>kdk::KAddFileButtonPrivate</name>
+    <message>
+        <location filename="../src/kaddfilebutton.cpp" line="208"/>
+        <source>Please select file</source>
+        <translation type="unfinished">ھۆججەتنى تاللاڭ</translation>
     </message>
 </context>
 <context>
     <name>kdk::KDragWidget</name>
     <message>
-        <location filename="../src/kdragwidget.cpp" line="102"/>
+        <location filename="../src/kdragwidget.cpp" line="103"/>
         <source>Select or drag and drop the folder identification path</source>
-        <translation>ھۆججەت قىسقۇچ بەلگىسى يولىنى تاللاش ياكى سۆرەپ قويۇش</translation>
+        <translation>ھۆججەت قىسقۇچنىڭ كۆرسەتمە يولىنى تاللاڭ ياكى سۆرەپ ئەكىلىڭ</translation>
     </message>
 </context>
 <context>
     <name>kdk::KDragWidgetPrivate</name>
     <message>
-        <location filename="../src/kdragwidget.cpp" line="62"/>
+        <location filename="../src/kdragwidget.cpp" line="63"/>
         <source>Please select file</source>
-        <translation>ھۆججەت تاللاڭ</translation>
+        <translation>ھۆججەتنى تاللاڭ</translation>
     </message>
 </context>
 <context>
@@ -61,7 +90,7 @@
     <message>
         <location filename="../src/kinputdialog.cpp" line="241"/>
         <source>Enter a value:</source>
-        <translation>بىر قىممەت كىرگۈزۈڭ:</translation>
+        <translation>سانلىق قىممەتنى كىرگۈزۈڭ</translation>
     </message>
 </context>
 <context>
@@ -69,7 +98,7 @@
     <message>
         <location filename="../src/kinputdialog.cpp" line="250"/>
         <source>ok</source>
-        <translation>ماقۇل</translation>
+        <translation>جەزملەشتۈرۈش</translation>
     </message>
     <message>
         <location filename="../src/kinputdialog.cpp" line="252"/>
@@ -80,56 +109,61 @@
 <context>
     <name>kdk::KMenuButton</name>
     <message>
-        <location filename="../src/kmenubutton.cpp" line="67"/>
+        <location filename="../src/kmenubutton.cpp" line="72"/>
         <source>Options</source>
-        <translation>تاللانمىلار</translation>
+        <translation>كۆپنى تاللاش</translation>
     </message>
     <message>
-        <location filename="../src/kmenubutton.cpp" line="68"/>
+        <location filename="../src/kmenubutton.cpp" line="73"/>
         <source>Setting</source>
         <translatorcomment>设置</translatorcomment>
-        <translation>تەڭشەك</translation>
+        <translation>بەلگىلەش</translation>
     </message>
     <message>
-        <location filename="../src/kmenubutton.cpp" line="69"/>
+        <location filename="../src/kmenubutton.cpp" line="74"/>
         <source>Theme</source>
-        <translation>ئۇسلۇب</translation>
+        <translation>سىرتقى كۆرۈنۈشى</translation>
     </message>
     <message>
-        <location filename="../src/kmenubutton.cpp" line="70"/>
-        <source>Assist</source>
+        <location filename="../src/kmenubutton.cpp" line="75"/>
+        <source>Help</source>
         <translation>ياردەم</translation>
     </message>
     <message>
-        <location filename="../src/kmenubutton.cpp" line="71"/>
+        <location filename="../src/kmenubutton.cpp" line="76"/>
         <source>About</source>
-        <translation>ھەققىدە</translation>
+        <translation>ئالاقىدارلار</translation>
     </message>
     <message>
-        <location filename="../src/kmenubutton.cpp" line="72"/>
+        <location filename="../src/kmenubutton.cpp" line="77"/>
+        <source>Feedback</source>
+        <translation>ئىنكاس قايتۇرۇش</translation>
+    </message>
+    <message>
+        <location filename="../src/kmenubutton.cpp" line="78"/>
         <source>Quit</source>
         <translation>چېكىنىش</translation>
     </message>
     <message>
-        <location filename="../src/kmenubutton.cpp" line="79"/>
+        <location filename="../src/kmenubutton.cpp" line="85"/>
         <source>Auto</source>
-        <translation>ئاپتۇماتىك</translation>
+        <translation>سىستېمىغا ئەگىشىش</translation>
     </message>
     <message>
-        <location filename="../src/kmenubutton.cpp" line="81"/>
+        <location filename="../src/kmenubutton.cpp" line="87"/>
         <source>Light</source>
-        <translation>نۇر</translation>
+        <translation>سۇس رەڭ</translation>
     </message>
     <message>
-        <location filename="../src/kmenubutton.cpp" line="83"/>
+        <location filename="../src/kmenubutton.cpp" line="89"/>
         <source>Dark</source>
-        <translation>قاراڭغۇلۇق</translation>
+        <translation>قېنىق رەڭ</translation>
     </message>
 </context>
 <context>
     <name>kdk::KProgressDialog</name>
     <message>
-        <location filename="../src/kprogressdialog.cpp" line="70"/>
+        <location filename="../src/kprogressdialog.cpp" line="80"/>
         <source>cancel</source>
         <translation>ئەمەلدىن قالدۇرۇش</translation>
     </message>
@@ -137,10 +171,10 @@
 <context>
     <name>kdk::KSearchLineEditPrivate</name>
     <message>
-        <location filename="../src/ksearchlineedit.cpp" line="627"/>
-        <location filename="../src/ksearchlineedit.cpp" line="815"/>
+        <location filename="../src/ksearchlineedit.cpp" line="662"/>
+        <location filename="../src/ksearchlineedit.cpp" line="857"/>
         <source>Search</source>
-        <translation>ئىزدە</translation>
+        <translation>ئىزدەش</translation>
     </message>
 </context>
 <context>
@@ -153,7 +187,7 @@
     <message>
         <location filename="../src/ksecuritylevelbar.cpp" line="65"/>
         <source>Medium</source>
-        <translation>ئوتتۇراھال</translation>
+        <translation>ئوتتۇرا</translation>
     </message>
     <message>
         <location filename="../src/ksecuritylevelbar.cpp" line="68"/>
@@ -170,23 +204,64 @@
     </message>
 </context>
 <context>
+    <name>kdk::KSecurityQuestionDialog</name>
+    <message>
+        <location filename="../src/ksecurityquestiondialog.cpp" line="99"/>
+        <source>Security question%1</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/ksecurityquestiondialog.cpp" line="106"/>
+        <source>Answer</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/ksecurityquestiondialog.cpp" line="109"/>
+        <source>Required</source>
+        <translation>زۆرۈر</translation>
+    </message>
+</context>
+<context>
+    <name>kdk::KSecurityQuestionDialogPrivate</name>
+    <message>
+        <location filename="../src/ksecurityquestiondialog.cpp" line="277"/>
+        <source>Security Question</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/ksecurityquestiondialog.cpp" line="279"/>
+        <source>Setting security questions to reset password when forget it, please remember answer.</source>
+        <translation type="unfinished"></translation>
+    </message>
+    <message>
+        <location filename="../src/ksecurityquestiondialog.cpp" line="285"/>
+        <source>Cancel</source>
+        <translation>ئەمەلدىن قالدۇرۇش</translation>
+    </message>
+    <message>
+        <location filename="../src/ksecurityquestiondialog.cpp" line="288"/>
+        <source>Save</source>
+        <translation>ساقلاش</translation>
+    </message>
+</context>
+<context>
     <name>kdk::KUninstallDialog</name>
     <message>
         <location filename="../src/kuninstalldialog.cpp" line="124"/>
         <location filename="../src/kuninstalldialog.cpp" line="216"/>
         <source>uninstall</source>
         <translatorcomment>立即卸载</translatorcomment>
-        <translation>Uninstall</translation>
+        <translation>دەرھال يۇيۇۋېتىش</translation>
     </message>
     <message>
         <location filename="../src/kuninstalldialog.cpp" line="185"/>
         <source>deb name:</source>
-        <translation>deb نامى:</translation>
+        <translation>نامى:</translation>
     </message>
     <message>
         <location filename="../src/kuninstalldialog.cpp" line="190"/>
         <source>deb version:</source>
-        <translation>deb نۇسخىسى:</translation>
+        <translation>نۇسخىسى:</translation>
     </message>
 </context>
 <context>
@@ -194,12 +269,12 @@
     <message>
         <location filename="../src/kuninstalldialog.cpp" line="305"/>
         <source>deb name:</source>
-        <translation>deb نامى:</translation>
+        <translation>نامى:</translation>
     </message>
     <message>
         <location filename="../src/kuninstalldialog.cpp" line="309"/>
         <source>deb version:</source>
-        <translation>deb نۇسخىسى:</translation>
+        <translation>نۇسخىسى:</translation>
     </message>
 </context>
 <context>
@@ -208,13 +283,13 @@
         <location filename="../src/kwindowbuttonbar.cpp" line="156"/>
         <location filename="../src/kwindowbuttonbar.cpp" line="178"/>
         <source>Maximize</source>
-        <translation>ئەڭ چوڭ چەككە</translation>
+        <translation>ئەڭ چوڭ ھالەت</translation>
     </message>
     <message>
         <location filename="../src/kwindowbuttonbar.cpp" line="162"/>
         <location filename="../src/kwindowbuttonbar.cpp" line="183"/>
         <source>Restore</source>
-        <translation>ئەسلىگە كەلتۈرۈش</translation>
+        <translation>ئەسلىگە قايتۇرۇش</translation>
     </message>
 </context>
 <context>
@@ -222,22 +297,22 @@
     <message>
         <location filename="../src/kwindowbuttonbar.cpp" line="271"/>
         <source>Minimize</source>
-        <translation>كىچىكلىتىش</translation>
+        <translation>ئەڭ كىچىك ھالەتكە ئەكىلىش</translation>
     </message>
     <message>
         <location filename="../src/kwindowbuttonbar.cpp" line="280"/>
         <source>Close</source>
-        <translation>ياپ</translation>
+        <translation>ئېتىش</translation>
     </message>
     <message>
         <location filename="../src/kwindowbuttonbar.cpp" line="341"/>
         <source>Maximize</source>
-        <translation>ئەڭ چوڭ چەككە</translation>
+        <translation>ئەڭ چوڭ ھالەتكە ئەكىلىش</translation>
     </message>
     <message>
         <location filename="../src/kwindowbuttonbar.cpp" line="346"/>
         <source>Restore</source>
-        <translation>ئەسلىگە كەلتۈرۈش</translation>
+        <translation>ئەسلىگە قايتۇرۇش</translation>
     </message>
 </context>
 </TS>
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/translations/gui_zh_CN.ts libkysdk-applications-2.5.2.0/kysdk-qtwidgets/translations/gui_zh_CN.ts
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/translations/gui_zh_CN.ts	2024-05-16 09:25:54.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/translations/gui_zh_CN.ts	2024-10-29 15:22:42.000000000 +0800
@@ -2,27 +2,48 @@
 <!DOCTYPE TS>
 <TS version="2.1" language="zh_CN">
 <context>
+    <name>CloseButton</name>
+    <message>
+        <location filename="../src/kcustomtabbar.cpp" line="3049"/>
+        <source>Close Tab</source>
+        <translation>关闭选项卡</translation>
+    </message>
+</context>
+<context>
+    <name>KCustomTabBar</name>
+    <message>
+        <location filename="../src/kcustomtabbar.cpp" line="518"/>
+        <source>Scroll Left</source>
+        <translation>向左滚动</translation>
+    </message>
+    <message>
+        <location filename="../src/kcustomtabbar.cpp" line="519"/>
+        <source>Scroll Right</source>
+        <translation>向右滚动</translation>
+    </message>
+</context>
+<context>
     <name>kdk::KAboutDialog</name>
     <message>
-        <location filename="../src/kaboutdialog.cpp" line="122"/>
+        <location filename="../src/kaboutdialog.cpp" line="123"/>
         <source>Your system does not have any email application installed or the default mail application is not set up</source>
         <translation>您的系统未安装任何电子邮件应用或未设置默认邮件应用</translation>
     </message>
     <message>
-        <location filename="../src/kaboutdialog.cpp" line="123"/>
+        <location filename="../src/kaboutdialog.cpp" line="124"/>
         <source>Unable to open mail application</source>
         <translation>无法打开邮件客户端</translation>
     </message>
     <message>
-        <location filename="../src/kaboutdialog.cpp" line="257"/>
-        <location filename="../src/kaboutdialog.cpp" line="271"/>
+        <location filename="../src/kaboutdialog.cpp" line="258"/>
+        <location filename="../src/kaboutdialog.cpp" line="272"/>
         <source>Service &amp; Support: </source>
         <translatorcomment>服务与支持团队:</translatorcomment>
         <translation>服务与支持团队:</translation>
     </message>
     <message>
-        <location filename="../src/kaboutdialog.cpp" line="263"/>
-        <location filename="../src/kaboutdialog.cpp" line="277"/>
+        <location filename="../src/kaboutdialog.cpp" line="264"/>
+        <location filename="../src/kaboutdialog.cpp" line="278"/>
         <source>Privacy statement</source>
         <translation>《隐私声明》</translation>
     </message>
@@ -30,20 +51,28 @@
 <context>
     <name>kdk::KAboutDialogPrivate</name>
     <message>
-        <location filename="../src/kaboutdialog.cpp" line="381"/>
+        <location filename="../src/kaboutdialog.cpp" line="382"/>
         <source>version :</source>
         <translation>版本:</translation>
     </message>
     <message>
-        <location filename="../src/kaboutdialog.cpp" line="386"/>
+        <location filename="../src/kaboutdialog.cpp" line="387"/>
         <source>Version number not found</source>
         <translation>未找到对应版本号</translation>
     </message>
 </context>
 <context>
+    <name>kdk::KAddFileButtonPrivate</name>
+    <message>
+        <location filename="../src/kaddfilebutton.cpp" line="208"/>
+        <source>Please select file</source>
+        <translation>请选择文件</translation>
+    </message>
+</context>
+<context>
     <name>kdk::KDragWidget</name>
     <message>
-        <location filename="../src/kdragwidget.cpp" line="102"/>
+        <location filename="../src/kdragwidget.cpp" line="103"/>
         <source>Select or drag and drop the folder identification path</source>
         <translation>选择或拖放文件夹标识路径</translation>
     </message>
@@ -51,7 +80,7 @@
 <context>
     <name>kdk::KDragWidgetPrivate</name>
     <message>
-        <location filename="../src/kdragwidget.cpp" line="62"/>
+        <location filename="../src/kdragwidget.cpp" line="63"/>
         <source>Please select file</source>
         <translation>请选择文件</translation>
     </message>
@@ -80,48 +109,53 @@
 <context>
     <name>kdk::KMenuButton</name>
     <message>
-        <location filename="../src/kmenubutton.cpp" line="67"/>
+        <location filename="../src/kmenubutton.cpp" line="72"/>
         <source>Options</source>
         <translation>选项</translation>
     </message>
     <message>
-        <location filename="../src/kmenubutton.cpp" line="68"/>
+        <location filename="../src/kmenubutton.cpp" line="73"/>
         <source>Setting</source>
         <translatorcomment>设置</translatorcomment>
         <translation>设置</translation>
     </message>
     <message>
-        <location filename="../src/kmenubutton.cpp" line="69"/>
+        <location filename="../src/kmenubutton.cpp" line="74"/>
         <source>Theme</source>
         <translation>外观</translation>
     </message>
     <message>
-        <location filename="../src/kmenubutton.cpp" line="70"/>
-        <source>Assist</source>
+        <location filename="../src/kmenubutton.cpp" line="75"/>
+        <source>Help</source>
         <translation>帮助</translation>
     </message>
     <message>
-        <location filename="../src/kmenubutton.cpp" line="71"/>
+        <location filename="../src/kmenubutton.cpp" line="76"/>
         <source>About</source>
         <translation>关于</translation>
     </message>
     <message>
-        <location filename="../src/kmenubutton.cpp" line="72"/>
+        <location filename="../src/kmenubutton.cpp" line="77"/>
+        <source>Feedback</source>
+        <translation>意见反馈</translation>
+    </message>
+    <message>
+        <location filename="../src/kmenubutton.cpp" line="78"/>
         <source>Quit</source>
         <translation>退出</translation>
     </message>
     <message>
-        <location filename="../src/kmenubutton.cpp" line="79"/>
+        <location filename="../src/kmenubutton.cpp" line="85"/>
         <source>Auto</source>
         <translation>跟随系统</translation>
     </message>
     <message>
-        <location filename="../src/kmenubutton.cpp" line="81"/>
+        <location filename="../src/kmenubutton.cpp" line="87"/>
         <source>Light</source>
         <translation>浅色</translation>
     </message>
     <message>
-        <location filename="../src/kmenubutton.cpp" line="83"/>
+        <location filename="../src/kmenubutton.cpp" line="89"/>
         <source>Dark</source>
         <translation>深色</translation>
     </message>
@@ -129,7 +163,7 @@
 <context>
     <name>kdk::KProgressDialog</name>
     <message>
-        <location filename="../src/kprogressdialog.cpp" line="70"/>
+        <location filename="../src/kprogressdialog.cpp" line="80"/>
         <source>cancel</source>
         <translation>取消</translation>
     </message>
@@ -137,8 +171,8 @@
 <context>
     <name>kdk::KSearchLineEditPrivate</name>
     <message>
-        <location filename="../src/ksearchlineedit.cpp" line="627"/>
-        <location filename="../src/ksearchlineedit.cpp" line="815"/>
+        <location filename="../src/ksearchlineedit.cpp" line="662"/>
+        <location filename="../src/ksearchlineedit.cpp" line="857"/>
         <source>Search</source>
         <translation>搜索</translation>
     </message>
@@ -170,6 +204,47 @@
     </message>
 </context>
 <context>
+    <name>kdk::KSecurityQuestionDialog</name>
+    <message>
+        <location filename="../src/ksecurityquestiondialog.cpp" line="99"/>
+        <source>Security question%1</source>
+        <translation>安全问题%1</translation>
+    </message>
+    <message>
+        <location filename="../src/ksecurityquestiondialog.cpp" line="106"/>
+        <source>Answer</source>
+        <translation>答案</translation>
+    </message>
+    <message>
+        <location filename="../src/ksecurityquestiondialog.cpp" line="109"/>
+        <source>Required</source>
+        <translation>必填</translation>
+    </message>
+</context>
+<context>
+    <name>kdk::KSecurityQuestionDialogPrivate</name>
+    <message>
+        <location filename="../src/ksecurityquestiondialog.cpp" line="277"/>
+        <source>Security Question</source>
+        <translation>安全问题</translation>
+    </message>
+    <message>
+        <location filename="../src/ksecurityquestiondialog.cpp" line="279"/>
+        <source>Setting security questions to reset password when forget it, please remember answer.</source>
+        <translation>设置安全问题可以帮助你在忘记密码时重置密码,请确保一定记住答案。</translation>
+    </message>
+    <message>
+        <location filename="../src/ksecurityquestiondialog.cpp" line="285"/>
+        <source>Cancel</source>
+        <translation>取消</translation>
+    </message>
+    <message>
+        <location filename="../src/ksecurityquestiondialog.cpp" line="288"/>
+        <source>Save</source>
+        <translation>保存</translation>
+    </message>
+</context>
+<context>
     <name>kdk::KUninstallDialog</name>
     <message>
         <location filename="../src/kuninstalldialog.cpp" line="124"/>
diff -Nru libkysdk-applications-2.5.1.0/kysdk-qtwidgets/translations/gui_zh_HK.ts libkysdk-applications-2.5.2.0/kysdk-qtwidgets/translations/gui_zh_HK.ts
--- libkysdk-applications-2.5.1.0/kysdk-qtwidgets/translations/gui_zh_HK.ts	2024-05-16 09:25:54.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-qtwidgets/translations/gui_zh_HK.ts	2024-10-29 15:22:42.000000000 +0800
@@ -2,27 +2,48 @@
 <!DOCTYPE TS>
 <TS version="2.1" language="zh_HK">
 <context>
+    <name>CloseButton</name>
+    <message>
+        <location filename="../src/kcustomtabbar.cpp" line="3049"/>
+        <source>Close Tab</source>
+        <translation>關閉分頁</translation>
+    </message>
+</context>
+<context>
+    <name>KCustomTabBar</name>
+    <message>
+        <location filename="../src/kcustomtabbar.cpp" line="518"/>
+        <source>Scroll Left</source>
+        <translation>向左滾動</translation>
+    </message>
+    <message>
+        <location filename="../src/kcustomtabbar.cpp" line="519"/>
+        <source>Scroll Right</source>
+        <translation>向右滾動</translation>
+    </message>
+</context>
+<context>
     <name>kdk::KAboutDialog</name>
     <message>
-        <location filename="../src/kaboutdialog.cpp" line="122"/>
+        <location filename="../src/kaboutdialog.cpp" line="123"/>
         <source>Your system does not have any email application installed or the default mail application is not set up</source>
         <translation>您的系統未安裝任何電子郵件應用或未設置預設郵件應用</translation>
     </message>
     <message>
-        <location filename="../src/kaboutdialog.cpp" line="123"/>
+        <location filename="../src/kaboutdialog.cpp" line="124"/>
         <source>Unable to open mail application</source>
         <translation>無法打開郵件用戶端</translation>
     </message>
     <message>
-        <location filename="../src/kaboutdialog.cpp" line="257"/>
-        <location filename="../src/kaboutdialog.cpp" line="271"/>
+        <location filename="../src/kaboutdialog.cpp" line="258"/>
+        <location filename="../src/kaboutdialog.cpp" line="272"/>
         <source>Service &amp; Support: </source>
         <translatorcomment>服务与支持团队:</translatorcomment>
         <translation>服務與支持團隊: </translation>
     </message>
     <message>
-        <location filename="../src/kaboutdialog.cpp" line="263"/>
-        <location filename="../src/kaboutdialog.cpp" line="277"/>
+        <location filename="../src/kaboutdialog.cpp" line="264"/>
+        <location filename="../src/kaboutdialog.cpp" line="278"/>
         <source>Privacy statement</source>
         <translation>《隱私聲明》</translation>
     </message>
@@ -30,20 +51,28 @@
 <context>
     <name>kdk::KAboutDialogPrivate</name>
     <message>
-        <location filename="../src/kaboutdialog.cpp" line="381"/>
+        <location filename="../src/kaboutdialog.cpp" line="382"/>
         <source>version :</source>
         <translation>版本:</translation>
     </message>
     <message>
-        <location filename="../src/kaboutdialog.cpp" line="386"/>
+        <location filename="../src/kaboutdialog.cpp" line="387"/>
         <source>Version number not found</source>
         <translation>未找到對應版本號</translation>
     </message>
 </context>
 <context>
+    <name>kdk::KAddFileButtonPrivate</name>
+    <message>
+        <location filename="../src/kaddfilebutton.cpp" line="208"/>
+        <source>Please select file</source>
+        <translation>請選擇檔案</translation>
+    </message>
+</context>
+<context>
     <name>kdk::KDragWidget</name>
     <message>
-        <location filename="../src/kdragwidget.cpp" line="102"/>
+        <location filename="../src/kdragwidget.cpp" line="103"/>
         <source>Select or drag and drop the folder identification path</source>
         <translation>選擇或拖放資料夾識別路徑</translation>
     </message>
@@ -51,7 +80,7 @@
 <context>
     <name>kdk::KDragWidgetPrivate</name>
     <message>
-        <location filename="../src/kdragwidget.cpp" line="62"/>
+        <location filename="../src/kdragwidget.cpp" line="63"/>
         <source>Please select file</source>
         <translation>請選擇檔案</translation>
     </message>
@@ -80,48 +109,53 @@
 <context>
     <name>kdk::KMenuButton</name>
     <message>
-        <location filename="../src/kmenubutton.cpp" line="67"/>
+        <location filename="../src/kmenubutton.cpp" line="72"/>
         <source>Options</source>
         <translation>選項</translation>
     </message>
     <message>
-        <location filename="../src/kmenubutton.cpp" line="68"/>
+        <location filename="../src/kmenubutton.cpp" line="73"/>
         <source>Setting</source>
         <translatorcomment>设置</translatorcomment>
         <translation>設置</translation>
     </message>
     <message>
-        <location filename="../src/kmenubutton.cpp" line="69"/>
+        <location filename="../src/kmenubutton.cpp" line="74"/>
         <source>Theme</source>
         <translation>外觀</translation>
     </message>
     <message>
-        <location filename="../src/kmenubutton.cpp" line="70"/>
-        <source>Assist</source>
-        <translation>説明</translation>
+        <location filename="../src/kmenubutton.cpp" line="75"/>
+        <source>Help</source>
+        <translation>幫助</translation>
     </message>
     <message>
-        <location filename="../src/kmenubutton.cpp" line="71"/>
+        <location filename="../src/kmenubutton.cpp" line="76"/>
         <source>About</source>
         <translation>關於</translation>
     </message>
     <message>
-        <location filename="../src/kmenubutton.cpp" line="72"/>
+        <location filename="../src/kmenubutton.cpp" line="77"/>
+        <source>Feedback</source>
+        <translation>去反饋</translation>
+    </message>
+    <message>
+        <location filename="../src/kmenubutton.cpp" line="78"/>
         <source>Quit</source>
         <translation>退出</translation>
     </message>
     <message>
-        <location filename="../src/kmenubutton.cpp" line="79"/>
+        <location filename="../src/kmenubutton.cpp" line="85"/>
         <source>Auto</source>
         <translation>跟隨系統</translation>
     </message>
     <message>
-        <location filename="../src/kmenubutton.cpp" line="81"/>
+        <location filename="../src/kmenubutton.cpp" line="87"/>
         <source>Light</source>
         <translation>淺色</translation>
     </message>
     <message>
-        <location filename="../src/kmenubutton.cpp" line="83"/>
+        <location filename="../src/kmenubutton.cpp" line="89"/>
         <source>Dark</source>
         <translation>深色</translation>
     </message>
@@ -129,7 +163,7 @@
 <context>
     <name>kdk::KProgressDialog</name>
     <message>
-        <location filename="../src/kprogressdialog.cpp" line="70"/>
+        <location filename="../src/kprogressdialog.cpp" line="80"/>
         <source>cancel</source>
         <translation>取消</translation>
     </message>
@@ -137,8 +171,8 @@
 <context>
     <name>kdk::KSearchLineEditPrivate</name>
     <message>
-        <location filename="../src/ksearchlineedit.cpp" line="627"/>
-        <location filename="../src/ksearchlineedit.cpp" line="815"/>
+        <location filename="../src/ksearchlineedit.cpp" line="662"/>
+        <location filename="../src/ksearchlineedit.cpp" line="857"/>
         <source>Search</source>
         <translation>搜索</translation>
     </message>
@@ -170,6 +204,47 @@
     </message>
 </context>
 <context>
+    <name>kdk::KSecurityQuestionDialog</name>
+    <message>
+        <location filename="../src/ksecurityquestiondialog.cpp" line="99"/>
+        <source>Security question%1</source>
+        <translation>安全問題%1</translation>
+    </message>
+    <message>
+        <location filename="../src/ksecurityquestiondialog.cpp" line="106"/>
+        <source>Answer</source>
+        <translation>答案</translation>
+    </message>
+    <message>
+        <location filename="../src/ksecurityquestiondialog.cpp" line="109"/>
+        <source>Required</source>
+        <translation>要求</translation>
+    </message>
+</context>
+<context>
+    <name>kdk::KSecurityQuestionDialogPrivate</name>
+    <message>
+        <location filename="../src/ksecurityquestiondialog.cpp" line="277"/>
+        <source>Security Question</source>
+        <translation>安全問題</translation>
+    </message>
+    <message>
+        <location filename="../src/ksecurityquestiondialog.cpp" line="279"/>
+        <source>Setting security questions to reset password when forget it, please remember answer.</source>
+        <translation>設置安全問題可以幫助你再忘記密碼時重置密碼,請確保一定記住答案。</translation>
+    </message>
+    <message>
+        <location filename="../src/ksecurityquestiondialog.cpp" line="285"/>
+        <source>Cancel</source>
+        <translation>取消</translation>
+    </message>
+    <message>
+        <location filename="../src/ksecurityquestiondialog.cpp" line="288"/>
+        <source>Save</source>
+        <translation>保存</translation>
+    </message>
+</context>
+<context>
     <name>kdk::KUninstallDialog</name>
     <message>
         <location filename="../src/kuninstalldialog.cpp" line="124"/>
diff -Nru libkysdk-applications-2.5.1.0/kysdk-waylandhelper/kysdk-waylandhelper.pro libkysdk-applications-2.5.2.0/kysdk-waylandhelper/kysdk-waylandhelper.pro
--- libkysdk-applications-2.5.1.0/kysdk-waylandhelper/kysdk-waylandhelper.pro	2024-05-16 09:25:54.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-waylandhelper/kysdk-waylandhelper.pro	2024-10-29 15:22:42.000000000 +0800
@@ -30,6 +30,8 @@
 system(wayland-scanner client-header /usr/share/wayland-protocols/staging/ext-idle-notify/ext-idle-notify-v1.xml src/windowmanager/wayland-ext-idle-notify-v1-client-protocol.h)
 system(wayland-scanner private-code /usr/share/wayland-protocols/staging/ext-idle-notify/ext-idle-notify-v1.xml src/windowmanager/wayland-ext-idle-notify-v1-protocol.c)
 
+system(wayland-scanner client-header /usr/share/kylin-wayland-protocols/ukui-blur.xml src/blurmanager/ukui-blur-manager-client-protocol.h)
+system(wayland-scanner private-code /usr/share/kylin-wayland-protocols/ukui-blur.xml src/blurmanager/ukui-blur-manager-core-protocol.c)
 
 SOURCES += \
     src/ukuistylehelper/ukui-decoration-core.c \
@@ -40,6 +42,7 @@
     src/waylandhelper.cpp \
     src/windowmanager/abstractinterface.cpp \
     src/windowmanager/kdewaylandinterface.cpp \
+    src/windowmanager/outputinfo.cpp \
     src/windowmanager/ukuiwaylandinterface.cpp \
     src/windowmanager/xcbinterface.cpp \
     src/windowmanager/ukuiwindowmanagement.cpp \
@@ -53,7 +56,13 @@
     src/windowmanager/ukui-window-management-core-protocol.c\
     src/windowmanager/ukui-shell-core-protocol.c \
     src/windowmanager/wayland-xdg-activation-v1-protocol.c \
-    src/windowmanager/wayland-ext-idle-notify-v1-protocol.c
+    src/windowmanager/wayland-ext-idle-notify-v1-protocol.c \
+    src/blurmanager/ukuiblur.cpp \
+    src/blurmanager/blurmanager.cpp \
+    src/blurmanager/ukui-blur-manager-core-protocol.c \
+    src/blurmanager/blurwaylandinterface.cpp \
+    src/blurmanager/blurxcbinterface.cpp \
+
 
 HEADERS += \
     src/ukuistylehelper/ukui-decoration-client.h \
@@ -64,6 +73,7 @@
     src/waylandhelper.h \
     src/windowmanager/abstractinterface.h \
     src/windowmanager/kdewaylandinterface.h \
+    src/windowmanager/outputinfo.h \
     src/windowmanager/xcbinterface.h \
     src/windowmanager/ukuiwaylandinterface.h \
     src/windowmanager/ukuiwaylandpointer.h \
@@ -79,7 +89,14 @@
     src/windowmanager/wayland-plasma-window-management-client-protocol.h \
     src/windowmanager/ukui-window-management-client-protocol.h \
     src/windowmanager/wayland-xdg-activation-v1-client-protocol.h \
-    src/windowmanager/wayland-ext-idle-notify-v1-client-protocol.h
+    src/windowmanager/wayland-ext-idle-notify-v1-client-protocol.h \
+    src/windowmanager/kyatoms_p.h \
+    src/blurmanager/ukuiblur.h \
+    src/blurmanager/blurmanager.h \
+    src/blurmanager/ukui-blur-manager-client-protocol.h\
+    src/blurmanager/blurabstractinterface.h \
+    src/blurmanager/blurwaylandinterface.h \
+    src/blurmanager/blurxcbinterface.h \
 
 # Default rules for deployment.
 headers.files = src/kysdk-waylandhelper_global.h \
@@ -103,7 +120,9 @@
     src/windowmanager/wayland-plasma-window-management-client-protocol.h \
     src/windowmanager/ukui-window-management-client-protocol.h \
     src/windowmanager/wayland-xdg-activation-v1-client-protocol.h \
-    src/windowmanager/wayland-ext-idle-notify-v1-client-protocol.h
+    src/windowmanager/wayland-ext-idle-notify-v1-client-protocol.h \
+    src/windowmanager/kyatoms_p.h \
+    src/windowmanager/outputinfo.h \
                     
 wm_headers.path = /usr/include/kysdk/applications/windowmanager/
 
@@ -116,5 +135,14 @@
 
 sty_headers.path = /usr/include/kysdk/applications/ukuistylehelper/
 
+blur_headers.files = src/blurmanager/ukuiblur.h \
+                    src/blurmanager/blurmanager.h \
+                    src/blurmanager/ukui-blur-manager-client-protocol.h\
+                    src/blurmanager/blurabstractinterface.h \
+                    src/blurmanager/blurwaylandinterface.h \
+                    src/blurmanager/blurxcbinterface.h
+
+blur_headers.path = /usr/include/kysdk/applications/blurmanager/
+
 target.path = $$[QT_INSTALL_LIBS]
-INSTALLS += target headers wm_headers sty_headers
+INSTALLS += target headers wm_headers sty_headers blur_headers
diff -Nru libkysdk-applications-2.5.1.0/kysdk-waylandhelper/src/blurmanager/blurabstractinterface.h libkysdk-applications-2.5.2.0/kysdk-waylandhelper/src/blurmanager/blurabstractinterface.h
--- libkysdk-applications-2.5.1.0/kysdk-waylandhelper/src/blurmanager/blurabstractinterface.h	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-waylandhelper/src/blurmanager/blurabstractinterface.h	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,15 @@
+#ifndef BLURABSTRACTINTERFACE_H
+#define BLURABSTRACTINTERFACE_H
+
+#include <QWindow>
+#include <QRegion>
+
+class BlurAbstractInterface:public QObject
+{
+public:
+    BlurAbstractInterface(QObject* parent=nullptr)
+        :QObject(parent){}
+    virtual bool setBlurBehindWithStrength(QWindow *window, bool enable = true, const QRegion &region = QRegion(), uint32_t strength = -1)  = 0;
+};
+
+#endif // BLURABSTRACTINTERFACE_H
diff -Nru libkysdk-applications-2.5.1.0/kysdk-waylandhelper/src/blurmanager/blurmanager.cpp libkysdk-applications-2.5.2.0/kysdk-waylandhelper/src/blurmanager/blurmanager.cpp
--- libkysdk-applications-2.5.1.0/kysdk-waylandhelper/src/blurmanager/blurmanager.cpp	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-waylandhelper/src/blurmanager/blurmanager.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,44 @@
+#include "blurmanager.h"
+#include "ukui-blur-manager-client-protocol.h"
+
+#include <QWindow>
+#include <QRegion>
+#include <QGuiApplication>
+
+#include "blurxcbinterface.h"
+#include "blurwaylandinterface.h"
+
+namespace kdk
+{
+
+static BlurManager* g_blurmanager = nullptr;
+
+BlurManager::BlurManager(QObject *parent)
+    :QObject(parent)
+{
+    QString platform = QGuiApplication::platformName();
+    if(platform.startsWith(QLatin1String("wayland"),Qt::CaseInsensitive))
+         m_blurInterface = new BlurWaylandInterface(this);
+    else
+        m_blurInterface = new BlurXcbInterface(this);
+}
+
+BlurAbstractInterface *BlurManager::interface()
+{
+    return m_blurInterface;
+}
+
+BlurManager *BlurManager::self()
+{
+    if(g_blurmanager)
+        return g_blurmanager;
+    g_blurmanager = new BlurManager();
+    return g_blurmanager;
+}
+
+bool BlurManager::setBlurBehindWithStrength(QWindow *window, bool enable, const QRegion &region, uint32_t strength)
+{
+    return self()->interface()->setBlurBehindWithStrength(window, enable, region, strength);
+}
+
+}
diff -Nru libkysdk-applications-2.5.1.0/kysdk-waylandhelper/src/blurmanager/blurmanager.h libkysdk-applications-2.5.2.0/kysdk-waylandhelper/src/blurmanager/blurmanager.h
--- libkysdk-applications-2.5.1.0/kysdk-waylandhelper/src/blurmanager/blurmanager.h	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-waylandhelper/src/blurmanager/blurmanager.h	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,30 @@
+#ifndef BLURMANAGER_H
+#define BLURMANAGER_H
+
+#include <QObject>
+#include <QWindow>
+#include <QRegion>
+
+#include "blurabstractinterface.h"
+
+namespace kdk
+{
+class BlurManagerPrivate;
+
+class Q_DECL_EXPORT BlurManager : public QObject
+{
+    Q_OBJECT
+public:
+    static BlurManager*self();
+    static bool setBlurBehindWithStrength(QWindow *window, bool enable = true, const QRegion &region = QRegion(), uint32_t strength = -1);
+
+
+private:
+    BlurManager(QObject *parent = nullptr);
+    BlurAbstractInterface *interface();
+    BlurAbstractInterface *m_blurInterface = nullptr;
+};
+
+}
+
+#endif // BLURMANAGER_H
diff -Nru libkysdk-applications-2.5.1.0/kysdk-waylandhelper/src/blurmanager/blurwaylandinterface.cpp libkysdk-applications-2.5.2.0/kysdk-waylandhelper/src/blurmanager/blurwaylandinterface.cpp
--- libkysdk-applications-2.5.1.0/kysdk-waylandhelper/src/blurmanager/blurwaylandinterface.cpp	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-waylandhelper/src/blurmanager/blurwaylandinterface.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,136 @@
+#include "blurwaylandinterface.h"
+#include <QtGlobal>
+
+static const u_int32_t ukui_blur_surpported_version = 1;
+
+static void handle_global(void *data,struct wl_registry *wl_registry,uint32_t name, const char *interface,  uint32_t version)
+{
+    auto blurInterface = reinterpret_cast<BlurWaylandInterface *>(data);
+    blurInterface->handleGlobal(data,wl_registry,name,interface,version);
+}
+static void handle_global_remove(void *data, struct wl_registry *wl_registry, uint32_t name)
+{
+}
+const struct wl_registry_listener BlurWaylandInterface::s_registryListener = {handle_global, handle_global_remove};
+
+BlurWaylandInterface::BlurWaylandInterface(QObject *parent)
+    : BlurAbstractInterface(parent)
+{
+    m_connection = KWayland::Client::ConnectionThread::fromApplication(qApp);
+    m_registry = new Registry(this);
+    m_registry->create(m_connection->display());
+
+    wl_registry* registry = *m_registry;
+    wl_registry_add_listener(registry, &s_registryListener, this);
+
+    m_registry->setup();
+    m_connection->roundtrip();
+}
+
+void BlurWaylandInterface::handleGlobal(void *data, wl_registry *registry, uint32_t name, const char *interface, uint32_t version)
+{
+    if (strcmp(interface, ukui_blur_manager_v1_interface.name) == 0)
+    {
+        ukui_blur_manager_v1 *blur_manager_handle =  (ukui_blur_manager_v1 *) wl_registry_bind(registry, name, &ukui_blur_manager_v1_interface, qMin(ukui_blur_surpported_version, version));
+        if(blur_manager_handle)
+        {
+            m_blur_manager = new UkuiBlurManager(this);
+            m_blur_manager->setup(blur_manager_handle);
+        }
+    }
+    if (strcmp(interface, wl_compositor_interface.name) == 0)
+    {
+        wl_compositor *wl_compositor_handle =  (wl_compositor *) wl_registry_bind(registry, name, &wl_compositor_interface, version);
+        if(wl_compositor_handle)
+        {
+            m_compositor = new Compositor(this);
+            m_compositor->setup(wl_compositor_handle);
+        }
+    }
+
+}
+
+bool BlurWaylandInterface::eventFilter(QObject *obj, QEvent *ev)
+{
+    auto window = qobject_cast<QWindow*>(obj);
+    if(window && ev->type() == QEvent::Hide)
+    {
+        if(m_surfaces.contains(window))
+        {
+            auto surface = m_surfaces.value(window);
+            if(surface)
+            {
+                surface->release();
+                surface->destroy();
+            }
+            m_surfaces.remove(window);
+        }
+        if(m_regions.contains(window))
+        {
+            auto region = m_regions.value(window);
+            if(region)
+            {
+                region->release();
+                region->destroy();
+            }
+            m_regions.remove(window);
+        }
+        if(m_blurs.contains(window))
+        {
+            auto blur_handle = m_blurs.value(window);
+            if(blur_handle)
+            {
+                blur_handle->release();
+                blur_handle->destroy();
+            }
+            m_blurs.remove(window);
+        }
+    }
+    return QObject::eventFilter(obj,ev);
+}
+
+bool BlurWaylandInterface::setBlurBehindWithStrength(QWindow *window, bool enable, const QRegion &region, uint32_t strength)
+{
+    if(!window || !m_blur_manager || !m_compositor)
+        return false;
+
+    auto surface = KWayland::Client::Surface::fromWindow(window);
+    if (!surface)
+        return false;
+    if(!m_surfaces.contains(window))
+    {
+        m_surfaces.insert(window,surface);
+    }
+    if(enable)
+    {
+        UkuiBlur * blurHandle = m_blur_manager->createBlur(surface, this);
+        if(!blurHandle)
+            return false;
+        if(!m_blurs.contains(window))
+        {
+            m_blurs.insert(window,blurHandle);
+        }
+        Region* region_hanlde = m_compositor->createRegion(this);
+        if(!region_hanlde)
+            return false;
+        if(!m_regions.contains(window))
+        {
+            m_regions.insert(window,region_hanlde);
+        }
+        for(const QRect &rect : region)
+        {
+            region_hanlde->add(rect);
+        }
+        blurHandle->setRegion(region_hanlde);
+        blurHandle->setStrength(strength);
+        window->installEventFilter(this);
+        return true;
+    }
+    else
+    {
+        m_blur_manager->removeBlur(surface);
+        window->removeEventFilter(this);
+        return true;
+    }
+
+}
diff -Nru libkysdk-applications-2.5.1.0/kysdk-waylandhelper/src/blurmanager/blurwaylandinterface.h libkysdk-applications-2.5.2.0/kysdk-waylandhelper/src/blurmanager/blurwaylandinterface.h
--- libkysdk-applications-2.5.1.0/kysdk-waylandhelper/src/blurmanager/blurwaylandinterface.h	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-waylandhelper/src/blurmanager/blurwaylandinterface.h	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,46 @@
+#ifndef BLURWAYLANDINTERFACE_H
+#define BLURWAYLANDINTERFACE_H
+
+#include <QObject>
+#include <QRegion>
+#include <KWayland/Client/surface.h>
+#include <KWayland/Client/registry.h>
+#include <KWayland/Client/event_queue.h>
+#include <KWayland/Client/output.h>
+#include <KWayland/Client/connection_thread.h>
+#include <KWayland/Client/compositor.h>
+#include <QApplication>
+#include "ukuiblur.h"
+#include "blurabstractinterface.h"
+
+using namespace KWayland::Client;
+
+class BlurWaylandInterface : public BlurAbstractInterface
+{
+    Q_OBJECT
+
+public:
+    explicit BlurWaylandInterface(QObject *parent = nullptr);
+
+    bool setBlurBehindWithStrength(QWindow *window, bool enable = true, const QRegion &region = QRegion(), uint32_t strength = -1) override;
+
+    void handleGlobal(void *data, struct wl_registry *registry,
+                              uint32_t name, const char *interface, uint32_t version);
+
+protected:
+    bool eventFilter(QObject *obj, QEvent *ev) override;
+
+private:
+    BlurWaylandInterface* q_ptr;
+    ConnectionThread *m_connection = nullptr;
+    Compositor* m_compositor = nullptr;
+    Registry* m_registry = nullptr;
+    UkuiBlur* m_blur = nullptr;
+    UkuiBlurManager* m_blur_manager = nullptr;
+    QMap<QWindow*,Surface*>m_surfaces;
+    QMap<QWindow*,Region*>m_regions;
+    QMap<QWindow*,UkuiBlur*>m_blurs;
+    static const struct wl_registry_listener s_registryListener;
+};
+
+#endif // BLURWAYLANDINTERFACE_H
diff -Nru libkysdk-applications-2.5.1.0/kysdk-waylandhelper/src/blurmanager/blurxcbinterface.cpp libkysdk-applications-2.5.2.0/kysdk-waylandhelper/src/blurmanager/blurxcbinterface.cpp
--- libkysdk-applications-2.5.1.0/kysdk-waylandhelper/src/blurmanager/blurxcbinterface.cpp	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-waylandhelper/src/blurmanager/blurxcbinterface.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,45 @@
+#include "blurxcbinterface.h"
+#include <QX11Info>
+#include <QApplication>
+
+BlurXcbInterface::BlurXcbInterface(QObject *parent)
+    : BlurAbstractInterface(parent)
+{
+
+}
+
+bool BlurXcbInterface::setBlurBehindWithStrength(QWindow *window, bool enable, const QRegion &region, uint32_t strength)
+{
+    xcb_connection_t *c = QX11Info::connection();
+    if (!c) {
+        return false;
+    }
+    const QByteArray effectName = QByteArrayLiteral("_KDE_NET_WM_BLUR_BEHIND_REGION");
+    xcb_intern_atom_cookie_t atomCookie = xcb_intern_atom_unchecked(c, false, effectName.length(), effectName.constData());
+    QScopedPointer<xcb_intern_atom_reply_t, QScopedPointerPodDeleter> atom(xcb_intern_atom_reply(c, atomCookie, nullptr));
+    if (!atom)
+    {
+        return false;
+    }
+
+    if (enable)
+    {
+        QVector<uint32_t> data;
+        data.reserve(region.rectCount() * 4 + 1);
+        for (const QRect &r : region)
+        {
+            auto dpr = qApp->devicePixelRatio();
+            data << r.x() * dpr << r.y() * dpr << r.width() * dpr << r.height() * dpr;
+        }
+        data << strength;
+
+        xcb_change_property(c, XCB_PROP_MODE_REPLACE, window->winId(), atom->atom, XCB_ATOM_CARDINAL, 32, data.size(), data.constData());
+        return true;
+    }
+    else
+    {
+        xcb_delete_property(c, window->winId(), atom->atom);
+        xcb_flush(c);
+        return true;
+    }
+}
diff -Nru libkysdk-applications-2.5.1.0/kysdk-waylandhelper/src/blurmanager/blurxcbinterface.h libkysdk-applications-2.5.2.0/kysdk-waylandhelper/src/blurmanager/blurxcbinterface.h
--- libkysdk-applications-2.5.1.0/kysdk-waylandhelper/src/blurmanager/blurxcbinterface.h	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-waylandhelper/src/blurmanager/blurxcbinterface.h	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,16 @@
+#ifndef BLURXCBINTERFACE_H
+#define BLURXCBINTERFACE_H
+
+#include <QObject>
+#include "blurabstractinterface.h"
+
+class BlurXcbInterface : public BlurAbstractInterface
+{
+    Q_OBJECT
+public:
+    explicit BlurXcbInterface(QObject *parent = nullptr);
+
+    bool setBlurBehindWithStrength(QWindow *window, bool enable = true, const QRegion &region = QRegion(), uint32_t strength = -1) override;
+};
+
+#endif // BLURXCBINTERFACE_H
diff -Nru libkysdk-applications-2.5.1.0/kysdk-waylandhelper/src/blurmanager/ukuiblur.cpp libkysdk-applications-2.5.2.0/kysdk-waylandhelper/src/blurmanager/ukuiblur.cpp
--- libkysdk-applications-2.5.1.0/kysdk-waylandhelper/src/blurmanager/ukuiblur.cpp	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-waylandhelper/src/blurmanager/ukuiblur.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,152 @@
+#include "ukuiblur.h"
+#include "../windowmanager/ukuiwaylandpointer.h"
+
+class Q_DECL_HIDDEN UkuiBlur::Private
+{
+public:
+    UkuiWaylandPointer<ukui_blur_surface_v1, ukui_blur_surface_v1_destroy> blur;
+};
+
+class Q_DECL_HIDDEN UkuiBlurManager::Private
+{
+public:
+    Private(UkuiBlurManager *q);
+
+    UkuiWaylandPointer<ukui_blur_manager_v1, ukui_blur_manager_v1_destroy> blurManager;
+    EventQueue *queue = nullptr;
+
+private:
+    UkuiBlurManager* q;
+};
+
+UkuiBlur::UkuiBlur(QObject *parent)
+    : QObject(parent),
+      d(new Private)
+{
+
+}
+
+UkuiBlur::~UkuiBlur()
+{
+    release();
+}
+
+bool UkuiBlur::isValid() const
+{
+    return d->blur.isValid();
+}
+
+void UkuiBlur::release()
+{
+    d->blur.release();
+}
+
+void UkuiBlur::destroy()
+{
+    d->blur.destroy();
+}
+
+void UkuiBlur::setup(ukui_blur_surface_v1 *blur)
+{
+    Q_ASSERT(blur);
+    Q_ASSERT(!d->blur);
+    d->blur.setup(blur);
+}
+
+void UkuiBlur::setRegion(Region *region)
+{
+    ukui_blur_surface_v1_set_region(d->blur, *region);
+}
+
+void UkuiBlur::setStrength(uint32_t strength)
+{
+    ukui_blur_surface_v1_set_level(d->blur, strength);
+}
+
+UkuiBlur::operator ukui_blur_surface_v1 *()
+{
+    return d->blur;
+}
+
+UkuiBlur::operator ukui_blur_surface_v1 *() const
+{
+    return d->blur;
+}
+
+UkuiBlurManager::UkuiBlurManager(QObject *parent)
+    : QObject(parent),
+      d(new Private(this))
+{
+
+}
+
+UkuiBlurManager::~UkuiBlurManager()
+{
+    release();
+}
+
+bool UkuiBlurManager::isValid() const
+{
+    if(!d->blurManager)
+        return false;
+    return d->blurManager.isValid();
+}
+
+void UkuiBlurManager::release()
+{
+    d->blurManager.release();
+}
+
+void UkuiBlurManager::destroy()
+{
+    d->blurManager.destroy();
+}
+
+void UkuiBlurManager::setup(ukui_blur_manager_v1 *blur_manager)
+{
+    d->blurManager.setup(blur_manager);
+}
+
+void UkuiBlurManager::setEventQueue(EventQueue *queue)
+{
+    d->queue = queue;
+}
+
+EventQueue *UkuiBlurManager::eventQueue()
+{
+    return d->queue;
+}
+
+UkuiBlur *UkuiBlurManager::createBlur(Surface *surface, QObject *parent)
+{
+    if(!isValid())
+        return nullptr;
+    UkuiBlur *s = new UkuiBlur(parent);
+    auto w = ukui_blur_manager_v1_get_blur(d->blurManager, *surface);
+    if (d->queue) {
+        d->queue->addProxy(w);
+    }
+    s->setup(w);
+    return s;
+}
+
+void UkuiBlurManager::removeBlur(Surface *surface)
+{
+    Q_ASSERT(isValid());
+//    ukui_blur_manager_unset(d->blurManager, *surface);
+}
+
+UkuiBlurManager::operator ukui_blur_manager_v1 *()
+{
+    return d->blurManager;
+}
+
+UkuiBlurManager::operator ukui_blur_manager_v1 *() const
+{
+    return d->blurManager;
+}
+
+UkuiBlurManager::Private::Private(UkuiBlurManager *q)
+    :q(q)
+{
+}
diff -Nru libkysdk-applications-2.5.1.0/kysdk-waylandhelper/src/blurmanager/ukuiblur.h libkysdk-applications-2.5.2.0/kysdk-waylandhelper/src/blurmanager/ukuiblur.h
--- libkysdk-applications-2.5.1.0/kysdk-waylandhelper/src/blurmanager/ukuiblur.h	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-waylandhelper/src/blurmanager/ukuiblur.h	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,76 @@
+#ifndef UKUIBLUR_H
+#define UKUIBLUR_H
+
+#include <QObject>
+#include <KWayland/Client/region.h>
+#include <KWayland/Client/event_queue.h>
+#include <KWayland/Client/surface.h>
+#include "ukui-blur-manager-client-protocol.h"
+
+struct ukui_blur_manager_v1;
+struct ukui_blur_surface_v1;
+using namespace KWayland::Client;
+
+class UkuiBlur : public QObject
+{
+    Q_OBJECT
+public:
+    explicit UkuiBlur(QObject *parent = nullptr);
+    ~UkuiBlur();
+
+    bool isValid() const;
+
+    void release();
+
+    void destroy();
+
+    void setup(ukui_blur_surface_v1 *blur);
+
+    void setRegion(Region *region);
+
+    void setStrength(uint32_t strength);
+
+
+    operator ukui_blur_surface_v1 *();
+    operator ukui_blur_surface_v1 *() const;
+
+private:
+    class Private;
+    QScopedPointer<Private> d;
+
+};
+
+class UkuiBlurManager : public QObject
+{
+    Q_OBJECT
+public:
+    explicit UkuiBlurManager(QObject *parent = nullptr);
+    ~UkuiBlurManager();
+
+    bool isValid() const;
+
+    void release();
+
+    void destroy();
+
+    void setup(ukui_blur_manager_v1 *blur_manager);
+
+    void setEventQueue(EventQueue *queue);
+
+    EventQueue *eventQueue();
+
+    UkuiBlur *createBlur(Surface *surface, QObject *parent = nullptr);
+
+    void removeBlur(Surface *surface);
+
+    operator ukui_blur_manager_v1 *();
+
+    operator ukui_blur_manager_v1 *() const;
+
+private:
+    class Private;
+    QScopedPointer<Private> d;
+
+};
+
+#endif // UKUIBLUR_H
diff -Nru libkysdk-applications-2.5.1.0/kysdk-waylandhelper/src/ukuistylehelper/ukui-decoration-manager.cpp libkysdk-applications-2.5.2.0/kysdk-waylandhelper/src/ukuistylehelper/ukui-decoration-manager.cpp
--- libkysdk-applications-2.5.1.0/kysdk-waylandhelper/src/ukuistylehelper/ukui-decoration-manager.cpp	2024-05-16 09:25:54.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-waylandhelper/src/ukuistylehelper/ukui-decoration-manager.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -28,6 +28,7 @@
 #include <KWayland/Client/surface.h>
 #include <KWayland/Client/connection_thread.h>
 
+static const u_int32_t ukui_decoration_surpported_version = 1;
 static UKUIDecorationManager *global_instance = nullptr;
 
 static wl_display *display = nullptr;
@@ -36,7 +37,8 @@
 static void handle_global(void *data, struct wl_registry *registry,
                           uint32_t name, const char *interface, uint32_t version) {
     if (strcmp(interface, ukui_decoration_interface.name) == 0) {
-        ukui_decoration_manager = (ukui_decoration *) wl_registry_bind(registry, name, &ukui_decoration_interface, version);
+        u_int32_t surpportedVersion = qMin(ukui_decoration_surpported_version , version);
+        ukui_decoration_manager = (ukui_decoration *) wl_registry_bind(registry, name, &ukui_decoration_interface, surpportedVersion);
     }
 }
 
diff -Nru libkysdk-applications-2.5.1.0/kysdk-waylandhelper/src/windowmanager/abstractinterface.cpp libkysdk-applications-2.5.2.0/kysdk-waylandhelper/src/windowmanager/abstractinterface.cpp
--- libkysdk-applications-2.5.1.0/kysdk-waylandhelper/src/windowmanager/abstractinterface.cpp	2024-05-16 09:25:54.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-waylandhelper/src/windowmanager/abstractinterface.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -148,3 +148,82 @@
     Q_UNUSED(autoHide)
     return;
 }
+
+void AbstractInterface::setGrabKeyboard(QWindow *window, bool grabKeyboard)
+{
+    Q_UNUSED(window)
+    Q_UNUSED(grabKeyboard)
+    return;
+}
+
+void AbstractInterface::setWindowLayer(QWindow *window, WindowLayer layer)
+{
+    Q_UNUSED(window)
+    Q_UNUSED(layer)
+    return;
+}
+
+WindowLayer AbstractInterface::windowLayer(QWindow *window)
+{
+    Q_UNUSED(window)
+    return WindowLayer::Normal;
+}
+
+void AbstractInterface::setHighlight(const WindowId &wid, bool highlight)
+{
+    Q_UNUSED(wid)
+    Q_UNUSED(highlight)
+}
+
+bool AbstractInterface::istHighlight(const WindowId &wid)
+{
+    Q_UNUSED(wid)
+}
+
+void AbstractInterface::setOpenUnderCursor(QWindow *window)
+{
+    Q_UNUSED(window)
+}
+
+void AbstractInterface::setOpenUnderCursor(QWindow *window, int x, int y)
+{
+    Q_UNUSED(window)
+    Q_UNUSED(x)
+    Q_UNUSED(y)
+}
+
+void AbstractInterface::setIconName(QWindow *window, const QString& iconName)
+{
+    Q_UNUSED(window)
+    Q_UNUSED(iconName)
+}
+
+QString AbstractInterface::currentSeatName()
+{
+    return QString();
+}
+
+QString AbstractInterface::currentOutputName()
+{
+    return QString();
+}
+
+QList<OutputInfo *> AbstractInterface::outputsInfo()
+{
+    QList<OutputInfo *> list;
+    return list;
+}
+
+QList<WindowId> AbstractInterface::getWindowIdByPid(quint32 pid)
+{
+    Q_UNUSED(pid)
+    QList<WindowId> list;
+    return list;
+}
+
+QList<WindowId> AbstractInterface::getWindowIdByTtile(const QString &title)
+{
+    Q_UNUSED(title)
+    QList<WindowId> list;
+    return list;
+}
diff -Nru libkysdk-applications-2.5.1.0/kysdk-waylandhelper/src/windowmanager/abstractinterface.h libkysdk-applications-2.5.2.0/kysdk-waylandhelper/src/windowmanager/abstractinterface.h
--- libkysdk-applications-2.5.1.0/kysdk-waylandhelper/src/windowmanager/abstractinterface.h	2024-05-16 09:25:54.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-waylandhelper/src/windowmanager/abstractinterface.h	2024-10-29 15:22:42.000000000 +0800
@@ -27,6 +27,7 @@
 #include <QVariant>
 #include <QMap>
 #include "windowinfo.h"
+#include "outputinfo.h"
 #include "netwm.h"
 
 namespace kdk
@@ -34,6 +35,24 @@
 using WindowId = QVariant;
 class KWindows;
 
+enum class WindowLayer {
+    Normal,
+    Desktop,
+    Panel,
+    OnScreenDisplay,
+    Notification,
+    ToolTip,
+    CriticalNotification,
+    AppletPop,
+    ScreenLock,
+    Watermark,
+    SystemWindow,
+    InputPanel,
+    Logout,
+    ScreenLockNotification,
+    Switcher
+};
+
 class AbstractInterface:public QObject
 {
     Q_OBJECT
@@ -91,6 +110,19 @@
     virtual void setIdleInterval(int msec);
     virtual QRect windowGeometry(const WindowId& windowId);
     virtual void setPanelAutoHide(QWindow *window, bool autoHide);
+    virtual void setGrabKeyboard(QWindow *window, bool grabKeyboard);
+    virtual void setWindowLayer(QWindow *window, WindowLayer layer);
+    virtual WindowLayer windowLayer(QWindow *window);
+    virtual void setHighlight(const WindowId &wid, bool highlight);
+    virtual bool istHighlight(const WindowId &wid);
+    virtual void setOpenUnderCursor(QWindow *window);
+    virtual void setOpenUnderCursor(QWindow *window, int x, int y);
+    virtual void setIconName(QWindow *window, const QString& iconName);
+    virtual QString currentSeatName();
+    virtual QString currentOutputName();
+    virtual QList<OutputInfo*> outputsInfo();
+    virtual QList<WindowId> getWindowIdByPid(quint32 pid);
+    virtual QList<WindowId> getWindowIdByTtile(const QString& title);
 
 Q_SIGNALS:
     void activeWindowChanged(WindowId wid);
@@ -118,6 +150,9 @@
     void idled();
     void resumed();
 
+    //since 2.5
+    void outputInfoChanged(OutputInfo*);
+
 public:
     QMap<WindowId, WindowInfo> m_windows;
     QString m_currentDesktop;
diff -Nru libkysdk-applications-2.5.1.0/kysdk-waylandhelper/src/windowmanager/kdewaylandinterface.cpp libkysdk-applications-2.5.2.0/kysdk-waylandhelper/src/windowmanager/kdewaylandinterface.cpp
--- libkysdk-applications-2.5.1.0/kysdk-waylandhelper/src/windowmanager/kdewaylandinterface.cpp	2024-05-16 09:25:54.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-waylandhelper/src/windowmanager/kdewaylandinterface.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -1,6 +1,7 @@
 #include "kdewaylandinterface.h"
 #include "wayland-plasma-window-management-client-protocol.h"
 #include <QApplication>
+#include <QDebug>
 
 KdeWaylandInterface::KdeWaylandInterface(QObject *parent)
     : AbstractInterface(parent)
@@ -456,7 +457,170 @@
 QRect KdeWaylandInterface::windowGeometry(const WindowId &windowId)
 {
     PlasmaWindow* w = windowFor(windowId);
-    return w->geometry();
+    if(w)
+        return w->geometry();
+    else
+        return QRect(0, 0, 0, 0);
+}
+
+void KdeWaylandInterface::setWindowLayer(QWindow *window, WindowLayer layer)
+{
+    if(!window)
+        return;
+    if (!m_plasmaShell)
+        return;
+
+    auto surface = KWayland::Client::Surface::fromWindow(window);
+    if (!surface)
+        return;
+    if(!m_surfaces.contains(window))
+    {
+        m_surfaces.insert(window,surface);
+    }
+
+    auto plasmaShellSurface = m_plasmaShell->createSurface(surface, window);
+    if (!plasmaShellSurface)
+        return;
+    if(!m_plasmaShellSurfaces.contains(window))
+    {
+        m_plasmaShellSurfaces.insert(window,plasmaShellSurface);
+    }
+    window->installEventFilter(this);
+
+    switch(layer)
+    {
+        case WindowLayer::Normal:
+            plasmaShellSurface->setRole(PlasmaShellSurface::Role::Normal);
+            break;
+        case WindowLayer::Desktop:
+            plasmaShellSurface->setRole(PlasmaShellSurface::Role::Desktop);
+            break;
+        case WindowLayer::Panel:
+            plasmaShellSurface->setRole(PlasmaShellSurface::Role::Panel);
+            break;
+        case WindowLayer::OnScreenDisplay:
+            plasmaShellSurface->setRole(PlasmaShellSurface::Role::OnScreenDisplay);
+            break;
+        case WindowLayer::Notification:
+            plasmaShellSurface->setRole(PlasmaShellSurface::Role::Notification);
+            break;
+        case WindowLayer::ToolTip:
+            plasmaShellSurface->setRole(PlasmaShellSurface::Role::ToolTip);
+            break;
+        case WindowLayer::CriticalNotification:
+            plasmaShellSurface->setRole(PlasmaShellSurface::Role::CriticalNotification);
+            break;
+        case WindowLayer::AppletPop:
+        {
+            plasmaShellSurface->setRole(PlasmaShellSurface::Role::ToolTip);
+            qWarning()<<"plasmashellsurface does not surpport AppletPop layer, replaced by Tooltip";
+            break;
+        }
+        case WindowLayer::ScreenLock:
+        {
+            plasmaShellSurface->setRole(PlasmaShellSurface::Role::Normal);
+            qWarning()<<"plasmashellsurface does not surpport ScreenLock layer, replaced by Normal";
+            break;
+        }
+        case WindowLayer::Watermark:
+        {
+            plasmaShellSurface->setRole(PlasmaShellSurface::Role::Normal);
+            qWarning()<<"plasmashellsurface does not surpport Watermark layer, replaced by Normal";
+            break;
+        }
+        case WindowLayer::SystemWindow:
+        {
+            plasmaShellSurface->setRole(PlasmaShellSurface::Role::Normal);
+            qWarning()<<"plasmashellsurface does not surpport SystemWindow layer, replaced by Normal";
+            break;
+        }
+        case WindowLayer::InputPanel:
+        {
+            plasmaShellSurface->setRole(PlasmaShellSurface::Role::Normal);
+            qWarning()<<"plasmashellsurface does not surpport InputPanel layer, replaced by Normal";
+            break;
+        }
+        case WindowLayer::Logout:
+        {
+            plasmaShellSurface->setRole(PlasmaShellSurface::Role::Normal);
+            qWarning()<<"plasmashellsurface does not surpport Logout layer, replaced by Normal";
+            break;
+        }
+        case WindowLayer::ScreenLockNotification:
+        {
+            plasmaShellSurface->setRole(PlasmaShellSurface::Role::Normal);
+            qWarning()<<"plasmashellsurface does not surpport ScreenLockNotification layer, replaced by Normal";
+            break;
+        }
+        case WindowLayer::Switcher:
+        {
+            plasmaShellSurface->setRole(PlasmaShellSurface::Role::Panel);
+            qWarning()<<"plasmashellsurface does not surpport Switcher layer, replaced by Panel";
+            break;
+        }
+        default:
+        {
+            qWarning()<<"It is not a surpported window layer by kde protocols! id:" << (int)layer;
+            plasmaShellSurface->setRole(PlasmaShellSurface::Role::Normal);
+            break;
+        }
+    }
+
+}
+
+WindowLayer KdeWaylandInterface::windowLayer(QWindow *window)
+{
+    if(!window)
+        return WindowLayer::Normal;
+    if (!m_plasmaShell)
+        return WindowLayer::Normal;
+
+    auto surface = KWayland::Client::Surface::fromWindow(window);
+    if (!surface)
+        return WindowLayer::Normal;
+    if(!m_surfaces.contains(window))
+    {
+        m_surfaces.insert(window,surface);
+    }
+
+    auto plasmaShellSurface = m_plasmaShell->createSurface(surface, window);
+    if (!plasmaShellSurface)
+        return WindowLayer::Normal;
+    if(!m_plasmaShellSurfaces.contains(window))
+    {
+        m_plasmaShellSurfaces.insert(window,plasmaShellSurface);
+    }
+    window->installEventFilter(this);
+
+    WindowLayer layer; //not surpport applet and switcher layer
+    switch(plasmaShellSurface->role())
+    {
+        case PlasmaShellSurface::Role::Normal:
+            layer = WindowLayer::Normal;
+            break;
+        case PlasmaShellSurface::Role::Desktop:
+            layer = WindowLayer::Desktop;
+            break;
+        case PlasmaShellSurface::Role::Panel:
+            layer = WindowLayer::Panel;
+            break;
+        case PlasmaShellSurface::Role::OnScreenDisplay:
+            layer = WindowLayer::OnScreenDisplay;
+            break;
+        case PlasmaShellSurface::Role::Notification:
+            layer = WindowLayer::Notification;
+            break;
+        case PlasmaShellSurface::Role::ToolTip:
+            layer = WindowLayer::ToolTip;
+            break;
+        case PlasmaShellSurface::Role::CriticalNotification:
+            layer = WindowLayer::CriticalNotification;
+            break;
+        default:
+            layer = WindowLayer::Normal;
+            break;
+    }
+    return layer;
 }
 
 bool KdeWaylandInterface::eventFilter(QObject *obj, QEvent *ev)
diff -Nru libkysdk-applications-2.5.1.0/kysdk-waylandhelper/src/windowmanager/kdewaylandinterface.h libkysdk-applications-2.5.2.0/kysdk-waylandhelper/src/windowmanager/kdewaylandinterface.h
--- libkysdk-applications-2.5.1.0/kysdk-waylandhelper/src/windowmanager/kdewaylandinterface.h	2024-05-16 09:25:54.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-waylandhelper/src/windowmanager/kdewaylandinterface.h	2024-10-29 15:22:42.000000000 +0800
@@ -80,6 +80,9 @@
     void demandAttention(const WindowId &wid)override;
     QRect windowGeometry(const WindowId& windowId) override;
 
+    void setWindowLayer(QWindow *window, WindowLayer layer) override;
+    WindowLayer windowLayer(QWindow *window) override;
+
 
 protected:
     bool eventFilter(QObject *obj, QEvent *ev) override;
diff -Nru libkysdk-applications-2.5.1.0/kysdk-waylandhelper/src/windowmanager/kyatoms_p.h libkysdk-applications-2.5.2.0/kysdk-waylandhelper/src/windowmanager/kyatoms_p.h
--- libkysdk-applications-2.5.1.0/kysdk-waylandhelper/src/windowmanager/kyatoms_p.h	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-waylandhelper/src/windowmanager/kyatoms_p.h	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,180 @@
+
+#if (!defined ATOMS_H) || (defined ENUM_CREATE_CHAR_ARRAY)
+
+#undef ENUM_BEGIN
+#undef ENUM
+#undef ENUM_END
+#undef ENUM_COUNT
+
+// the following macros are set in a way so that
+// the code below will either construct an enum for "<typ>"
+// or a const *char array "<typ>Strings" containing all enum
+// symbols as strings, depending on whether ENUM_CREATE_CHAR_ARRAY is
+// defined
+// The enum gets one extra item "<typ>Count", describing also the
+// length of the array
+
+// The header is safe for re-inclusion unless you define ENUM_CREATE_CHAR_ARRAY
+// which is therefore undefined after usage
+
+// => You *must* "#define ENUM_CREATE_CHAR_ARRAY 1" *every* time you want to create
+// a string array!
+
+// clang-format off
+
+#ifndef ENUM_CREATE_CHAR_ARRAY
+#define ATOMS_H
+#define ENUM_BEGIN(typ) enum typ {
+#define ENUM(nam) nam
+#define ENUM_COUNT(typ) , typ##Count
+#else
+#define ENUM_BEGIN(typ) const char * typ##Strings [] = {
+#define ENUM(nam) #nam
+#define ENUM_COUNT(typ)
+#undef ENUM_CREATE_CHAR_ARRAY
+#endif
+
+#define ENUM_END(typ) };
+
+ENUM_BEGIN(KyAtom)
+    ENUM(UTF8_STRING),
+
+    // root window properties
+    ENUM(_NET_SUPPORTED),
+    ENUM(_NET_SUPPORTING_WM_CHECK),
+    ENUM(_NET_CLIENT_LIST),
+    ENUM(_NET_CLIENT_LIST_STACKING),
+    ENUM(_NET_NUMBER_OF_DESKTOPS),
+    ENUM(_NET_DESKTOP_GEOMETRY),
+    ENUM(_NET_DESKTOP_VIEWPORT),
+    ENUM(_NET_CURRENT_DESKTOP),
+    ENUM(_NET_DESKTOP_NAMES),
+    ENUM(_NET_ACTIVE_WINDOW),
+    ENUM(_NET_WORKAREA),
+    ENUM(_NET_VIRTUAL_ROOTS),
+    ENUM(_NET_DESKTOP_LAYOUT),
+    ENUM(_NET_SHOWING_DESKTOP),
+
+    // root window messages
+    ENUM(_NET_CLOSE_WINDOW),
+    ENUM(_NET_RESTACK_WINDOW),
+    ENUM(_NET_WM_MOVERESIZE),
+    ENUM(_NET_MOVERESIZE_WINDOW),
+
+    // application window properties
+    ENUM(_NET_WM_NAME),
+    ENUM(_NET_WM_VISIBLE_NAME),
+    ENUM(_NET_WM_ICON_NAME),
+    ENUM(_NET_WM_VISIBLE_ICON_NAME),
+    ENUM(_NET_WM_DESKTOP),
+    ENUM(_NET_WM_WINDOW_TYPE),
+    ENUM(_NET_WM_STATE),
+    ENUM(_NET_WM_STRUT),
+    ENUM(_NET_WM_STRUT_PARTIAL),
+    ENUM(_NET_WM_ICON_GEOMETRY),
+    ENUM(_NET_WM_ICON),
+    ENUM(_NET_WM_PID),
+    ENUM(_NET_WM_USER_TIME),
+    ENUM(_NET_WM_HANDLED_ICONS),
+    ENUM(_NET_STARTUP_ID),
+    ENUM(_NET_WM_ALLOWED_ACTIONS),
+    ENUM(WM_WINDOW_ROLE),
+    ENUM(_NET_FRAME_EXTENTS),
+    ENUM(_NET_WM_WINDOW_OPACITY),
+    ENUM(_NET_WM_FULLSCREEN_MONITORS),
+    ENUM(_NET_WM_OPAQUE_REGION),
+    ENUM(_KDE_NET_WM_DESKTOP_FILE),
+    // used to determine whether application window is managed or not
+    ENUM(WM_STATE),
+
+    // application window types
+    ENUM(_NET_WM_WINDOW_TYPE_NORMAL),
+    ENUM(_NET_WM_WINDOW_TYPE_DESKTOP),
+    ENUM(_NET_WM_WINDOW_TYPE_DOCK),
+    ENUM(_NET_WM_WINDOW_TYPE_TOOLBAR),
+    ENUM(_NET_WM_WINDOW_TYPE_MENU),
+    ENUM(_NET_WM_WINDOW_TYPE_DIALOG),
+    ENUM(_NET_WM_WINDOW_TYPE_UTILITY),
+    ENUM(_NET_WM_WINDOW_TYPE_SPLASH),
+    ENUM(_NET_WM_WINDOW_TYPE_DROPDOWN_MENU),
+    ENUM(_NET_WM_WINDOW_TYPE_POPUP_MENU),
+    ENUM(_NET_WM_WINDOW_TYPE_TOOLTIP),
+    ENUM(_NET_WM_WINDOW_TYPE_NOTIFICATION),
+    ENUM(_NET_WM_WINDOW_TYPE_COMBO),
+    ENUM(_NET_WM_WINDOW_TYPE_DND),
+
+    // application window state
+    ENUM(_NET_WM_STATE_MODAL),
+    ENUM(_NET_WM_STATE_STICKY),
+    ENUM(_NET_WM_STATE_MAXIMIZED_VERT),
+    ENUM(_NET_WM_STATE_MAXIMIZED_HORZ),
+    ENUM(_NET_WM_STATE_SHADED),
+    ENUM(_NET_WM_STATE_SKIP_TASKBAR),
+    ENUM(_NET_WM_STATE_SKIP_PAGER),
+    ENUM(_NET_WM_STATE_HIDDEN),
+    ENUM(_NET_WM_STATE_FULLSCREEN),
+    ENUM(_NET_WM_STATE_ABOVE),
+    ENUM(_NET_WM_STATE_BELOW),
+    ENUM(_NET_WM_STATE_DEMANDS_ATTENTION),
+    ENUM(_NET_WM_STATE_FOCUSED),
+    // KDE-specific atom
+    ENUM(_KDE_NET_WM_STATE_SKIP_SWITCHER),
+
+    // allowed actions
+    ENUM(_NET_WM_ACTION_MOVE),
+    ENUM(_NET_WM_ACTION_RESIZE),
+    ENUM(_NET_WM_ACTION_MINIMIZE),
+    ENUM(_NET_WM_ACTION_SHADE),
+    ENUM(_NET_WM_ACTION_STICK),
+    ENUM(_NET_WM_ACTION_MAXIMIZE_VERT),
+    ENUM(_NET_WM_ACTION_MAXIMIZE_HORZ),
+    ENUM(_NET_WM_ACTION_FULLSCREEN),
+    ENUM(_NET_WM_ACTION_CHANGE_DESKTOP),
+    ENUM(_NET_WM_ACTION_CLOSE),
+
+    // KDE extensions
+    ENUM(_KDE_NET_WM_FRAME_STRUT),
+    ENUM(_KDE_NET_WM_WINDOW_TYPE_OVERRIDE),
+    ENUM(_KDE_NET_WM_WINDOW_TYPE_TOPMENU),
+    ENUM(_KDE_NET_WM_WINDOW_TYPE_ON_SCREEN_DISPLAY),
+    ENUM(_KDE_NET_WM_WINDOW_TYPE_CRITICAL_NOTIFICATION),
+    ENUM(_KDE_NET_WM_WINDOW_TYPE_APPLET_POPUP),
+    ENUM(_KDE_NET_WM_TEMPORARY_RULES),
+    ENUM(_NET_WM_FRAME_OVERLAP),
+    ENUM(_KDE_NET_WM_APPMENU_SERVICE_NAME),
+    ENUM(_KDE_NET_WM_APPMENU_OBJECT_PATH),
+
+    // UKUI extensions
+    ENUM(_UKUI_NET_WM_WINDOW_TYPE_SYSTEMWINDOW),
+    ENUM(_UKUI_NET_WM_WINDOW_TYPE_INPUTPANEL),
+    ENUM(_UKUI_NET_WM_WINDOW_TYPE_LOGOUT),
+    ENUM(_UKUI_NET_WM_WINDOW_TYPE_SCREENLOCK),
+    ENUM(_UKUI_NET_WM_WINDOW_TYPE_SCREENLOCKNOTIFICATION),
+    ENUM(_UKUI_NET_WM_WINDOW_TYPE_WATERMARK),
+
+    // deprecated and naming convention violation
+    ENUM(_NET_WM_STATE_STAYS_ON_TOP),
+
+    // GTK extensions
+    ENUM(_GTK_FRAME_EXTENTS),
+    ENUM(_GTK_APPLICATION_ID),
+    ENUM(_GTK_SHOW_WINDOW_MENU),
+
+    // application protocols
+    ENUM(WM_PROTOCOLS),
+    ENUM(WM_TAKE_FOCUS),
+    ENUM(WM_DELETE_WINDOW),
+    ENUM(_NET_WM_PING),
+    ENUM(_NET_WM_SYNC_REQUEST),
+    ENUM(_NET_WM_CONTEXT_HELP),
+
+    // ability flags
+    ENUM(_NET_WM_FULL_PLACEMENT),
+    ENUM(_NET_WM_BYPASS_COMPOSITOR),
+    ENUM(_KDE_NET_WM_ACTIVITIES),
+    ENUM(_KDE_NET_WM_BLOCK_COMPOSITING),
+    ENUM(_KDE_NET_WM_SHADOW)
+    ENUM_COUNT(KyAtom)
+ENUM_END(KyAtom)
+
+#endif // ATOMS_H
diff -Nru libkysdk-applications-2.5.1.0/kysdk-waylandhelper/src/windowmanager/outputinfo.cpp libkysdk-applications-2.5.2.0/kysdk-waylandhelper/src/windowmanager/outputinfo.cpp
--- libkysdk-applications-2.5.1.0/kysdk-waylandhelper/src/windowmanager/outputinfo.cpp	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-waylandhelper/src/windowmanager/outputinfo.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,54 @@
+#include "outputinfo.h"
+
+class Q_DECL_HIDDEN OutputInfo::Private
+{
+public:
+    Private(OutputInfo *q);
+    ~Private();
+
+    QRect m_usableArea;
+    QString m_name;
+    OutputInfo* q;
+};
+
+OutputInfo::OutputInfo(QObject *parent)
+    :QObject(parent),
+      d(new Private(this))
+{
+
+}
+
+void OutputInfo::setOutputName(const QString &outputName)
+{
+    d->m_name = outputName;
+}
+
+void OutputInfo::setUsableArea(const QRect &usableArea)
+{
+    d->m_usableArea = usableArea;
+}
+
+
+OutputInfo::~OutputInfo()
+{
+
+}
+
+QString OutputInfo::outputName()
+{
+    return d->m_name;
+}
+
+QRect OutputInfo::usableArea()
+{
+    return d->m_usableArea;
+}
+
+OutputInfo::Private::Private(OutputInfo *q)
+    :q(q)
+{
+}
+
+OutputInfo::Private::~Private()
+{
+}
diff -Nru libkysdk-applications-2.5.1.0/kysdk-waylandhelper/src/windowmanager/outputinfo.h libkysdk-applications-2.5.2.0/kysdk-waylandhelper/src/windowmanager/outputinfo.h
--- libkysdk-applications-2.5.1.0/kysdk-waylandhelper/src/windowmanager/outputinfo.h	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-waylandhelper/src/windowmanager/outputinfo.h	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,27 @@
+#ifndef OUTPUTINFO_H
+#define OUTPUTINFO_H
+
+#include <QObject>
+#include <QRect>
+
+class OutputInfo: public QObject
+{
+    Q_OBJECT
+public:
+    ~OutputInfo();
+
+    QString outputName();
+    QRect usableArea();
+
+
+private:
+    explicit OutputInfo(QObject *parent = nullptr);
+    void setOutputName(const QString& outputName);
+    void setUsableArea(const QRect& usableArea);
+
+    friend class OutputUsableAreaManager;
+    class Private;
+    QScopedPointer<Private> d;
+};
+
+#endif // OUTPUTINFO_H
diff -Nru libkysdk-applications-2.5.1.0/kysdk-waylandhelper/src/windowmanager/ukuishell.cpp libkysdk-applications-2.5.2.0/kysdk-waylandhelper/src/windowmanager/ukuishell.cpp
--- libkysdk-applications-2.5.1.0/kysdk-waylandhelper/src/windowmanager/ukuishell.cpp	2024-05-16 09:25:54.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-waylandhelper/src/windowmanager/ukuishell.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -4,8 +4,25 @@
 class Q_DECL_HIDDEN UkuiShell::Private
 {
 public:
+    Private(UkuiShell *q);
+
     UkuiWaylandPointer<ukui_shell, ukui_shell_destroy> shell;
     EventQueue *queue = nullptr;
+    UkuiShell *q;
+    QString m_seatName;
+    QString m_outputName;
+    bool m_currentOutputReady = false;
+    void init_listener();
+
+    static struct ukui_shell_listener s_listener;
+    static void currentOutputCallback(void *data, struct ukui_shell *ukui_shell, const char *output_name, const char *seat_name);
+    static void doneCallback(void *data, struct ukui_shell *ukui_shell);
+
+};
+
+ukui_shell_listener UkuiShell::Private::s_listener = {
+    .current_output = currentOutputCallback,
+    .done = doneCallback
 };
 
 class Q_DECL_HIDDEN UkuiShellSurface::Private
@@ -32,7 +49,7 @@
 
 UkuiShell::UkuiShell(QObject *parent)
     : QObject(parent)
-    , d(new Private)
+    , d(new Private(this))
 {
 }
 
@@ -64,6 +81,8 @@
     Q_ASSERT(!d->shell);
     Q_ASSERT(shell);
     d->shell.setup(shell);
+    d->init_listener();
+
 }
 
 void UkuiShell::setEventQueue(EventQueue *queue)
@@ -76,6 +95,27 @@
     return d->queue;
 }
 
+QString UkuiShell::seatName()
+{
+    if(d->m_currentOutputReady)
+        return d->m_seatName;
+    else
+        return QString();
+}
+
+QString UkuiShell::outputName()
+{
+    if(d->m_currentOutputReady)
+        return d->m_outputName;
+    else
+        return QString();
+}
+
+bool UkuiShell::isCurrentOutputReady()
+{
+    return d->m_currentOutputReady;
+}
+
 UkuiShellSurface *UkuiShell::createSurface(wl_surface *surface, QObject *parent)
 {
     Q_ASSERT(isValid());
@@ -102,6 +142,11 @@
     return createSurface(*surface, parent);
 }
 
+void UkuiShell::updateCurrentOutput()
+{
+    ukui_shell_get_current_output(d->shell);
+}
+
 bool UkuiShell::isValid() const
 {
     return d->shell.isValid();
@@ -252,6 +297,9 @@
     case  Role::ScreenLockNotification:
         wlRole = UKUI_SURFACE_ROLE_SCREENLOCKNOTIFICATION;
         break;
+    case  Role::Switcher:
+        wlRole = UKUI_SURFACE_ROLE_SWITCHER;
+        break;
     default:
         Q_UNREACHABLE();
         break;
@@ -328,3 +376,55 @@
     ukui_surface_set_panel_auto_hide(d->surface, autoHide);
 }
 
+void UkuiShellSurface::setGrabKeyboard(wl_seat *seat)
+{
+    ukui_surface_grab_keyboard(d->surface, seat);
+}
+
+void UkuiShellSurface::setOpenUnderCursor()
+{
+    ukui_surface_open_under_cursor(d->surface, 0 , 0);
+}
+
+void UkuiShellSurface::setOpenUnderCursor(int x, int y)
+{
+    ukui_surface_open_under_cursor(d->surface, x , y);
+}
+
+void UkuiShellSurface::setIconName(const QString& iconName)
+{
+    if (iconName.isEmpty()) {
+        ukui_surface_set_icon(d->surface, NULL);
+    } else {
+        ukui_surface_set_icon(d->surface, iconName.toStdString().c_str());
+    }
+}
+
+UkuiShell::Private::Private(UkuiShell *q)
+    :q(q)
+{
+
+}
+
+void UkuiShell::Private::init_listener()
+{
+    ukui_shell_add_listener(shell, &s_listener, this);
+}
+
+void UkuiShell::Private::currentOutputCallback(void *data, ukui_shell *ukui_shell, const char *output_name, const char *seat_name)
+{
+    auto ukuiShell = reinterpret_cast<UkuiShell::Private *>(data);
+    if(ukuiShell->shell != ukui_shell)
+        return;
+    ukuiShell->m_outputName = QString::fromUtf8(output_name);
+    ukuiShell->m_seatName = QString::fromUtf8(seat_name);
+}
+
+void UkuiShell::Private::doneCallback(void *data, ukui_shell *ukui_shell)
+{
+    auto ukuiShell = reinterpret_cast<UkuiShell::Private *>(data);
+    if(ukuiShell->shell != ukui_shell)
+        return;
+    ukuiShell->m_currentOutputReady = true;
+    Q_EMIT ukuiShell->q->currentOutputReady();
+}
diff -Nru libkysdk-applications-2.5.1.0/kysdk-waylandhelper/src/windowmanager/ukuishell.h libkysdk-applications-2.5.2.0/kysdk-waylandhelper/src/windowmanager/ukuishell.h
--- libkysdk-applications-2.5.1.0/kysdk-waylandhelper/src/windowmanager/ukuishell.h	2024-05-16 09:25:54.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-waylandhelper/src/windowmanager/ukuishell.h	2024-10-29 15:22:42.000000000 +0800
@@ -11,6 +11,7 @@
 
 struct wl_surface;
 struct ukui_surface;
+struct wl_seat;
 
 class UkuiShellSurface;
 
@@ -32,16 +33,22 @@
 
     void setup(ukui_shell *shell);
 
-
     void setEventQueue(EventQueue *queue);
 
     EventQueue *eventQueue();
 
+    QString seatName();
+
+    QString outputName();
+
+    bool isCurrentOutputReady();
 
     UkuiShellSurface *createSurface(wl_surface *surface, QObject *parent = nullptr);
 
     UkuiShellSurface *createSurface(Surface *surface, QObject *parent = nullptr);
 
+    void updateCurrentOutput();
+
     operator ukui_shell *();
     operator ukui_shell *() const;
 
@@ -53,6 +60,8 @@
 
     void removed();
 
+    void currentOutputReady();
+
 private:
     class Private;
     QScopedPointer<Private> d;
@@ -93,7 +102,8 @@
         SystemWindow,
         InputPanel,
         Logout,
-        ScreenLockNotification
+        ScreenLockNotification,
+        Switcher
     };
 
     enum class SurfaceProperty {
@@ -126,6 +136,13 @@
 
     void setPanelAutoHide(bool autoHide);
 
+    void setGrabKeyboard(wl_seat* seat);
+
+    void setOpenUnderCursor();
+
+    void setOpenUnderCursor(int x, int y);
+
+    void setIconName(const QString& iconName);
 
 Q_SIGNALS:
 
diff -Nru libkysdk-applications-2.5.1.0/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.cpp libkysdk-applications-2.5.2.0/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.cpp
--- libkysdk-applications-2.5.1.0/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.cpp	2024-05-16 09:25:54.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -7,6 +7,11 @@
 #include "wayland-xdg-activation-v1-client-protocol.h"
 #include "wayland-ext-idle-notify-v1-client-protocol.h"
 
+static const u_int32_t ukui_window_management_surpported_version = 1;
+static const u_int32_t ukui_shell_surpported_version = 1;
+static const u_int32_t wayland_xdg_activation_surpported_version = 1;
+static const u_int32_t wayland_ext_idle_notify_surpported_version = 1;
+
 void handle_global(void *data,struct wl_registry *wl_registry,uint32_t name, const char *interface,  uint32_t version)
 {
     auto waylandInterface = reinterpret_cast<UkuiWaylandInterface *>(data);
@@ -18,6 +23,8 @@
 
 }
 
+const struct wl_registry_listener UkuiWaylandInterface::s_registryListener = {handle_global, handle_global_remove};
+
 UkuiWaylandInterface::UkuiWaylandInterface(QObject *parent)
     : AbstractInterface(parent)
 {
@@ -32,16 +39,13 @@
         }
     });
 
-    struct wl_registry_listener registry_listener = {
-        .global = handle_global,
-        .global_remove = handle_global_remove
-    };
     wl_registry* registry = *m_registry;
-    wl_registry_add_listener(registry, &registry_listener, this);
+    wl_registry_add_listener(registry, &s_registryListener, this);
+    wl_display_dispatch(m_connection->display());
     wl_display_roundtrip(m_connection->display());
 
     m_registry->setup();
-    m_connection->roundtrip();
+//    m_connection->roundtrip();
 }
 
 UkuiWaylandInterface::~UkuiWaylandInterface()
@@ -55,48 +59,30 @@
 
     auto w = windowFor(wid);
 
-    if (w) {
-        if (isPlasmaDesktop(w->geometry())) {
-            windowInfo.setIsValid(true);
-            windowInfo.setIsPlasmaDesktop(true);
-            windowInfo.setWid(wid);
-            //! Window Abilities
-            windowInfo.setIsClosable(false);
-            windowInfo.setIsFullScreenable(false);
-            windowInfo.setIsGroupable(false);
-            windowInfo.setIsMaximizable(false);
-            windowInfo.setIsMinimizable(false);
-            windowInfo.setIsMovable(false);
-            windowInfo.setIsResizable(false);
-            windowInfo.setIsShadeable(false);
-            windowInfo.setIsVirtualDesktopsChangeable(false);
-            //! Window Abilities
-
-        }
-        else {
-            windowInfo.setIsValid(true);
-            windowInfo.setWid(wid);
-            windowInfo.setIsActive(w->isActive());
-            windowInfo.setIsMinimized(w->isMinimized());
-            windowInfo.setIsMaxVert(w->isMaximized());
-            windowInfo.setIsMaxHoriz(w->isMaximized());
-            windowInfo.setIsFullscreen(w->isFullscreen());
-            windowInfo.setIsShaded(w->isShaded());
-            windowInfo.setIsOnAllDesktops(w->isOnAllDesktops());
-            windowInfo.setIsOnAllActivities(true);
-            windowInfo.setHasSkipTaskbar(w->skipTaskbar());
-            windowInfo.setHasSkipSwitcher(w->skipSwitcher());
-            windowInfo.setIsKeepAbove(w->isKeepAbove());
-            //! Window Abilities
-            windowInfo.setIsClosable(w->isCloseable());
-            windowInfo.setIsFullScreenable(w->isFullscreenable());
-            windowInfo.setIsMaximizable(w->isMaximizeable());
-            windowInfo.setIsMinimizable(w->isMinimizeable());
-            windowInfo.setIsMovable(w->isMovable());
-            windowInfo.setIsResizable(w->isResizable());
-            windowInfo.setIsShadeable(w->isShadeable());
-            windowInfo.setIsVirtualDesktopsChangeable(w->isVirtualDesktopChangeable());
-        }
+    if (w)
+    {
+        windowInfo.setIsValid(true);
+        windowInfo.setWid(wid);
+        windowInfo.setIsActive(w->isActive());
+        windowInfo.setIsMinimized(w->isMinimized());
+        windowInfo.setIsMaxVert(w->isMaximized());
+        windowInfo.setIsMaxHoriz(w->isMaximized());
+        windowInfo.setIsFullscreen(w->isFullscreen());
+        windowInfo.setIsShaded(w->isShaded());
+        windowInfo.setIsOnAllDesktops(w->isOnAllDesktops());
+        windowInfo.setIsOnAllActivities(true);
+        windowInfo.setHasSkipTaskbar(w->skipTaskbar());
+        windowInfo.setHasSkipSwitcher(w->skipSwitcher());
+        windowInfo.setIsKeepAbove(w->isKeepAbove());
+        //! Window Abilities
+        windowInfo.setIsClosable(w->isCloseable());
+        windowInfo.setIsFullScreenable(w->isFullscreenable());
+        windowInfo.setIsMaximizable(w->isMaximizeable());
+        windowInfo.setIsMinimizable(w->isMinimizeable());
+        windowInfo.setIsMovable(w->isMovable());
+        windowInfo.setIsResizable(w->isResizable());
+        windowInfo.setIsShadeable(w->isShadeable());
+        windowInfo.setIsVirtualDesktopsChangeable(w->isVirtualDesktopChangeable());
     }
     else
     {
@@ -369,7 +355,10 @@
 QRect UkuiWaylandInterface::windowGeometry(const WindowId &windowId)
 {
     UkuiWindow* w = windowFor(windowId);
-    return w->geometry();
+    if(w)
+        return w->geometry();
+    else
+        return QRect(0, 0, 0, 0);
 }
 
 void UkuiWaylandInterface::setPanelAutoHide(QWindow *window, bool autoHide)
@@ -400,6 +389,340 @@
     window->installEventFilter(this);
 }
 
+void UkuiWaylandInterface::setGrabKeyboard(QWindow *window, bool autoHide)
+{
+    Q_UNUSED(autoHide)
+    if(!window)
+        return;
+    if (!m_ukuiShell)
+        return;
+
+    auto surface = KWayland::Client::Surface::fromWindow(window);
+    if (!surface)
+        return;
+    if(!m_surfaces.contains(window))
+    {
+        m_surfaces.insert(window,surface);
+    }
+
+    auto ukuiShellSurface = m_ukuiShell->createSurface(surface, window);
+    if (!ukuiShellSurface)
+        return;
+    if(!m_ukuiShellSurfaces.contains(window))
+    {
+        m_ukuiShellSurfaces.insert(window,ukuiShellSurface);
+    }
+    ukuiShellSurface->setGrabKeyboard(m_seat);
+    window->installEventFilter(this);
+}
+
+void UkuiWaylandInterface::setWindowLayer(QWindow *window, WindowLayer layer)
+{
+    if(!window)
+        return;
+    if (!m_ukuiShell)
+        return;
+
+    auto surface = KWayland::Client::Surface::fromWindow(window);
+    if (!surface)
+        return;
+    if(!m_surfaces.contains(window))
+    {
+        m_surfaces.insert(window,surface);
+    }
+
+    auto ukuiShellSurface = m_ukuiShell->createSurface(surface, window);
+    if (!ukuiShellSurface)
+        return;
+    if(!m_ukuiShellSurfaces.contains(window))
+    {
+        m_ukuiShellSurfaces.insert(window,ukuiShellSurface);
+    }
+    switch(layer)
+    {
+        case WindowLayer::Desktop:
+            ukuiShellSurface->setRole(UkuiShellSurface::Role::Desktop);
+            break;
+        case WindowLayer::Panel:
+            ukuiShellSurface->setRole(UkuiShellSurface::Role::Panel);
+            break;
+        case WindowLayer::OnScreenDisplay:
+            ukuiShellSurface->setRole(UkuiShellSurface::Role::OnScreenDisplay);
+            break;
+        case WindowLayer::Notification:
+            ukuiShellSurface->setRole(UkuiShellSurface::Role::Notification);
+            break;
+        case WindowLayer::ToolTip:
+            ukuiShellSurface->setRole(UkuiShellSurface::Role::ToolTip);
+            break;
+        case WindowLayer::CriticalNotification:
+            ukuiShellSurface->setRole(UkuiShellSurface::Role::CriticalNotification);
+            break;
+        case WindowLayer::AppletPop:
+            ukuiShellSurface->setRole(UkuiShellSurface::Role::AppletPop);
+            break;
+        case WindowLayer::ScreenLock:
+            ukuiShellSurface->setRole(UkuiShellSurface::Role::ScreenLock);
+            break;
+        case WindowLayer::Watermark:
+            ukuiShellSurface->setRole(UkuiShellSurface::Role::Watermark);
+            break;
+        case WindowLayer::SystemWindow:
+            ukuiShellSurface->setRole(UkuiShellSurface::Role::SystemWindow);
+            break;
+        case WindowLayer::InputPanel:
+            ukuiShellSurface->setRole(UkuiShellSurface::Role::InputPanel);
+            break;
+        case WindowLayer::Logout:
+            ukuiShellSurface->setRole(UkuiShellSurface::Role::Logout);
+            break;
+        case WindowLayer::ScreenLockNotification:
+            ukuiShellSurface->setRole(UkuiShellSurface::Role::ScreenLockNotification);
+            break;
+        case WindowLayer::Switcher:
+            ukuiShellSurface->setRole(UkuiShellSurface::Role::Switcher);
+            break;
+        default:
+        {
+            qWarning()<<"It is not a surpported window layer by ukui protocols! id:" << (int)layer;
+            ukuiShellSurface->setRole(UkuiShellSurface::Role::Normal);
+            break;
+        }
+    }
+    window->installEventFilter(this);
+}
+
+WindowLayer UkuiWaylandInterface::windowLayer(QWindow *window)
+{
+    if(!window)
+        return WindowLayer::Normal;
+    if (!m_ukuiShell)
+        return WindowLayer::Normal;;
+
+    auto surface = KWayland::Client::Surface::fromWindow(window);
+    if (!surface)
+        return WindowLayer::Normal;;
+    if(!m_surfaces.contains(window))
+    {
+        m_surfaces.insert(window,surface);
+    }
+
+    auto ukuiShellSurface = m_ukuiShell->createSurface(surface, window);
+    if (!ukuiShellSurface)
+        return WindowLayer::Normal;;
+    if(!m_ukuiShellSurfaces.contains(window))
+    {
+        m_ukuiShellSurfaces.insert(window,ukuiShellSurface);
+    }
+    window->installEventFilter(this);
+
+    WindowLayer layer;
+    switch(ukuiShellSurface->role())
+    {
+        case UkuiShellSurface::Role::Normal:
+            layer = WindowLayer::Normal;
+            break;
+        case UkuiShellSurface::Role::Desktop:
+            layer = WindowLayer::Desktop;
+            break;
+        case UkuiShellSurface::Role::Panel:
+            layer = WindowLayer::Panel;
+            break;
+        case UkuiShellSurface::Role::OnScreenDisplay:
+            layer = WindowLayer::OnScreenDisplay;
+            break;
+        case UkuiShellSurface::Role::Notification:
+            layer = WindowLayer::Notification;
+            break;
+        case UkuiShellSurface::Role::ToolTip:
+            layer = WindowLayer::ToolTip;
+            break;
+        case UkuiShellSurface::Role::CriticalNotification:
+            layer = WindowLayer::CriticalNotification;
+            break;
+        case UkuiShellSurface::Role::AppletPop:
+            layer = WindowLayer::AppletPop;
+            break;
+        case UkuiShellSurface::Role::ScreenLock:
+            layer = WindowLayer::ScreenLock;
+            break;
+        case UkuiShellSurface::Role::Watermark:
+            layer = WindowLayer::Watermark;
+            break;
+        case UkuiShellSurface::Role::SystemWindow:
+            layer = WindowLayer::SystemWindow;
+            break;
+        case UkuiShellSurface::Role::InputPanel:
+            layer = WindowLayer::InputPanel;
+            break;
+        case UkuiShellSurface::Role::Logout:
+            layer = WindowLayer::Logout;
+            break;
+        case UkuiShellSurface::Role::ScreenLockNotification:
+            layer = WindowLayer::ScreenLockNotification;
+            break;
+        case UkuiShellSurface::Role::Switcher:
+            layer = WindowLayer::Switcher;
+            break;
+        default:
+            layer = WindowLayer::Normal;
+            break;
+    }
+    return layer;
+}
+
+void UkuiWaylandInterface::setHighlight(const WindowId &wid, bool highlight)
+{
+    auto w = windowFor(wid);
+
+    if (w)
+    {
+        highlight ?  w->setHighlight() :  w->unsetHightlight();
+        m_connection->roundtrip();
+    }
+}
+
+bool UkuiWaylandInterface::istHighlight(const WindowId &wid)
+{
+    auto w = windowFor(wid);
+
+    if (w)
+    {
+        return w->isHighlight();
+    }
+    else
+        return false;
+}
+
+void UkuiWaylandInterface::setOpenUnderCursor(QWindow *window)
+{
+    if(!window)
+        return;
+    if (!m_ukuiShell)
+        return;
+
+    auto surface = KWayland::Client::Surface::fromWindow(window);
+    if (!surface)
+        return;
+    if(!m_surfaces.contains(window))
+    {
+        m_surfaces.insert(window,surface);
+    }
+
+    auto ukuiShellSurface = m_ukuiShell->createSurface(surface, window);
+    if (!ukuiShellSurface)
+        return;
+    if(!m_ukuiShellSurfaces.contains(window))
+    {
+        m_ukuiShellSurfaces.insert(window,ukuiShellSurface);
+    }
+
+    ukuiShellSurface->setOpenUnderCursor();
+
+    window->installEventFilter(this);
+}
+
+void UkuiWaylandInterface::setOpenUnderCursor(QWindow *window, int x, int y)
+{
+    if(!window)
+        return;
+    if (!m_ukuiShell)
+        return;
+
+    auto surface = KWayland::Client::Surface::fromWindow(window);
+    if (!surface)
+        return;
+    if(!m_surfaces.contains(window))
+    {
+        m_surfaces.insert(window,surface);
+    }
+
+    auto ukuiShellSurface = m_ukuiShell->createSurface(surface, window);
+    if (!ukuiShellSurface)
+        return;
+    if(!m_ukuiShellSurfaces.contains(window))
+    {
+        m_ukuiShellSurfaces.insert(window,ukuiShellSurface);
+    }
+
+    ukuiShellSurface->setOpenUnderCursor(x, y);
+
+    window->installEventFilter(this);
+}
+
+void UkuiWaylandInterface::setIconName(QWindow *window, const QString& iconName)
+{
+    if (!window || !m_ukuiShell)
+        return;
+
+    auto surface = KWayland::Client::Surface::fromWindow(window);
+    if (!surface)
+        return;
+    if (!m_surfaces.contains(window))
+    {
+        m_surfaces.insert(window, surface);
+    }
+
+    auto ukuiShellSurface = m_ukuiShell->createSurface(surface, window);
+    if (!ukuiShellSurface)
+        return;
+    if (!m_ukuiShellSurfaces.contains(window))
+    {
+        m_ukuiShellSurfaces.insert(window, ukuiShellSurface);
+    }
+
+    ukuiShellSurface->setIconName(iconName);
+
+    window->installEventFilter(this);
+}
+
+QString UkuiWaylandInterface::currentSeatName()
+{
+    if (!m_ukuiShell)
+        return QString();
+    m_ukuiShell->updateCurrentOutput();
+    wl_display_dispatch(m_connection->display());
+    wl_display_roundtrip(m_connection->display());
+    return m_ukuiShell->seatName();
+}
+
+QString UkuiWaylandInterface::currentOutputName()
+{
+    if (!m_ukuiShell)
+        return QString();
+    m_ukuiShell->updateCurrentOutput();
+    wl_display_dispatch(m_connection->display());
+    wl_display_roundtrip(m_connection->display());
+    return m_ukuiShell->outputName();
+}
+
+QList<OutputInfo *> UkuiWaylandInterface::outputsInfo()
+{
+}
+
+QList<WindowId> UkuiWaylandInterface::getWindowIdByPid(quint32 pid)
+{
+    QList<WindowId> list;
+    wl_display_dispatch(m_connection->display());
+    qDebug()<<m_ukuiWindowManager->windows().count();
+    for(auto w : m_ukuiWindowManager->windows())
+    {
+        if(w->pid() == pid)
+            list.append(w->uuid());
+    }
+    return list;
+}
+
+QList<WindowId> UkuiWaylandInterface::getWindowIdByTtile(const QString &title)
+{
+    QList<WindowId> list;
+    for(auto w : m_ukuiWindowManager->windows())
+    {
+        if(w->title() == title)
+            list.append(w->uuid());
+    }
+    return list;
+}
 
 void UkuiWaylandInterface::setGeometry(QWindow *window, const QRect &rect)
 {
@@ -596,7 +919,7 @@
 {
     auto it = std::find_if(m_ukuiWindowManager->windows().constBegin(), m_ukuiWindowManager->windows().constEnd(), [&wid](UkuiWindow * w) noexcept {
             return w->isValid() && w->uuid() == wid;
-});
+    });
 
     if (it == m_ukuiWindowManager->windows().constEnd()) {
         return nullptr;
@@ -609,7 +932,8 @@
 {
     if(strcmp(interface, ext_idle_notifier_v1_interface.name) == 0)
     {
-        ext_idle_notifier_v1* notifier = (ext_idle_notifier_v1*)wl_registry_bind(registry, name, &ext_idle_notifier_v1_interface, version);
+        u_int32_t supportedVersion = qMin(wayland_ext_idle_notify_surpported_version, version);
+        ext_idle_notifier_v1* notifier = (ext_idle_notifier_v1*)wl_registry_bind(registry, name, &ext_idle_notifier_v1_interface, supportedVersion);
         if(notifier)
         {
             m_notifier = new ExtIdleNotifier(this);
@@ -623,7 +947,8 @@
     }
     if (strcmp(interface, xdg_activation_v1_interface.name) == 0)
     {
-        xdg_activation_v1 *xdg_activation =  (xdg_activation_v1 *) wl_registry_bind(registry, name, &xdg_activation_v1_interface, version);
+        u_int32_t supportedVersion = qMin(wayland_xdg_activation_surpported_version, version);
+        xdg_activation_v1 *xdg_activation =  (xdg_activation_v1 *) wl_registry_bind(registry, name, &xdg_activation_v1_interface, supportedVersion);
         if(xdg_activation)
         {
             m_xdgActivation = new XdgActivation(this);
@@ -632,7 +957,8 @@
     }
     if (strcmp(interface, ukui_shell_interface.name) == 0)
     {
-        ukui_shell *shell =  (ukui_shell *) wl_registry_bind(registry, name, &ukui_shell_interface, version);
+        u_int32_t supportedVersion = qMin(ukui_shell_surpported_version, version);
+        ukui_shell *shell =  (ukui_shell *) wl_registry_bind(registry, name, &ukui_shell_interface, supportedVersion);
         if(shell)
         {
             m_ukuiShell = new UkuiShell(this);
@@ -641,8 +967,9 @@
     }
     if(strcmp(interface, ukui_window_management_interface.name) == 0)
     {
+        u_int32_t supportedVersion = qMin(ukui_window_management_surpported_version, version);
         ukui_window_management  *wm =
-                (ukui_window_management *) wl_registry_bind(registry, name, &ukui_window_management_interface, version);
+                (ukui_window_management *) wl_registry_bind(registry, name, &ukui_window_management_interface, supportedVersion);
         if(wm)
         {
             m_ukuiWindowManager = new UkuiWindowManagement(this);
diff -Nru libkysdk-applications-2.5.1.0/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.h libkysdk-applications-2.5.2.0/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.h
--- libkysdk-applications-2.5.1.0/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.h	2024-05-16 09:25:54.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-waylandhelper/src/windowmanager/ukuiwaylandinterface.h	2024-10-29 15:22:42.000000000 +0800
@@ -70,7 +70,7 @@
     bool skipTaskBar(const WindowId &wid)override;
     bool skipSwitcher(const WindowId &wid)override;
 
-    bool isShowingDesktop();
+    bool isShowingDesktop() override;
     void setOnAllDesktops(const WindowId &wid)override;
 
     NET::WindowType windowType(WindowId wid)override;
@@ -90,6 +90,24 @@
     void setIdleInterval(int msec) override;
     QRect windowGeometry(const WindowId& windowId) override;
     void setPanelAutoHide(QWindow *window, bool autoHide) override;
+    void setGrabKeyboard(QWindow *window, bool autoHide) override;
+
+    void setWindowLayer(QWindow *window, WindowLayer layer) override;
+    WindowLayer windowLayer(QWindow *window) override;
+
+    void setHighlight(const WindowId &wid, bool highlight) override;
+    bool istHighlight(const WindowId &wid) override;
+
+    void setOpenUnderCursor(QWindow *window) override;
+    void setOpenUnderCursor(QWindow *window, int x, int y) override;
+    void setIconName(QWindow *window, const QString& iconName) override;
+
+    QString currentSeatName() override;
+    QString currentOutputName() override;
+    QList<OutputInfo*> outputsInfo() override;
+
+    QList<WindowId> getWindowIdByPid(quint32 pid) override;
+    QList<WindowId> getWindowIdByTtile(const QString& title) override;
 
 protected:
     bool eventFilter(QObject *obj, QEvent *ev) override;
@@ -99,6 +117,7 @@
     void ukuiWindowCreatedProxy(UkuiWindow* w);
     void trackUkuiWindow(UkuiWindow *w);
     void untrackUkuiWindow(UkuiWindow *w);
+    static const struct wl_registry_listener s_registryListener;
 
 private:
     ExtIdleNotifier *m_notifier = nullptr;
diff -Nru libkysdk-applications-2.5.1.0/kysdk-waylandhelper/src/windowmanager/ukuiwindowmanagement.cpp libkysdk-applications-2.5.2.0/kysdk-waylandhelper/src/windowmanager/ukuiwindowmanagement.cpp
--- libkysdk-applications-2.5.1.0/kysdk-waylandhelper/src/windowmanager/ukuiwindowmanagement.cpp	2024-05-16 09:25:54.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-waylandhelper/src/windowmanager/ukuiwindowmanagement.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -84,6 +84,7 @@
     quint32 pid = 0;
     QString applicationMenuServiceName;
     QString applicationMenuObjectPath;
+    bool highlight = false;
 
 private:
     static void titleChangedCallback(void *data, ukui_window *window, const char *title);
@@ -634,10 +635,31 @@
             return QIcon();
         }
         close(pipeFd);
-        QDataStream ds(content);
-        QIcon icon;
-        ds >> icon;
-        return icon;
+        if (qgetenv("XDG_SESSION_DESKTOP") == QString("kylin-wlcom"))
+        {
+            int width = (content.at(0) << 0) | 
+                    (content.at(1) << 8) |
+                    (content.at(2) << 16) |
+                    (content.at(3) << 24);
+            int height = (content.at(4) << 0) | 
+                    (content.at(5) << 8) |
+                    (content.at(6) << 16) |
+                    (content.at(7) << 24);
+            if (content.size() - 8 != width * height *4 ) {
+                return QIcon();
+            }
+            QImage image(width, height, QImage::Format_ARGB32);
+            memcpy(image.bits(), content.constData() + 8, content.size() - 8);
+            QIcon icon = QIcon(QPixmap::fromImage(image));
+            return icon;
+        }
+        else
+        {
+            QDataStream ds(content);
+            QIcon icon;
+            ds >> icon;
+            return icon;
+        }
     };
     QFutureWatcher<QIcon> *watcher = new QFutureWatcher<QIcon>(p->q);
     QObject::connect(watcher, &QFutureWatcher<QIcon>::finished, p->q, [p, watcher] {
@@ -1093,6 +1115,11 @@
     }
 }
 
+void UkuiWindow::setStartupGeometry(Surface *surface, const QRect &geometry)
+{
+    ukui_window_set_startup_geometry(d->window, *surface, geometry.x(),geometry.y(),geometry.width(),geometry.height());
+}
+
 void UkuiWindow::setMinimizedGeometry(Surface *panel, const QRect &geom)
 {
     ukui_window_set_minimized_geometry(d->window, *panel, geom.x(), geom.y(), geom.width(), geom.height());
@@ -1175,6 +1202,29 @@
     }
 }
 
+void UkuiWindow::setHighlight()
+{
+    if(d->highlight)
+        return;
+
+    ukui_window_highlight(d->window);
+    d->highlight = true;
+}
+
+void UkuiWindow::unsetHightlight()
+{
+    if(!d->highlight)
+        return;
+
+    ukui_window_unset_highlight(d->window);
+    d->highlight = false;
+}
+
+bool UkuiWindow::isHighlight()
+{
+    return d->highlight;
+}
+
 
 
 
diff -Nru libkysdk-applications-2.5.1.0/kysdk-waylandhelper/src/windowmanager/ukuiwindowmanagement.h libkysdk-applications-2.5.2.0/kysdk-waylandhelper/src/windowmanager/ukuiwindowmanagement.h
--- libkysdk-applications-2.5.1.0/kysdk-waylandhelper/src/windowmanager/ukuiwindowmanagement.h	2024-05-16 09:25:54.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-waylandhelper/src/windowmanager/ukuiwindowmanagement.h	2024-10-29 15:22:42.000000000 +0800
@@ -188,6 +188,8 @@
 
     void requestToggleMaximized();
 
+    void setStartupGeometry(Surface *surface, const QRect &geometry);
+
     void setMinimizedGeometry(Surface *panel, const QRect &geom);
 
     void unsetMinimizedGeometry(Surface *panel);
@@ -222,6 +224,14 @@
 
     void sendToOutput(Output *output) const;
 
+    void setHighlight();
+
+    void unsetHightlight();
+
+    bool isHighlight();
+
+
+
 Q_SIGNALS:
 
     void titleChanged();
diff -Nru libkysdk-applications-2.5.1.0/kysdk-waylandhelper/src/windowmanager/wayland-plasma-window-management-client-protocol.h libkysdk-applications-2.5.2.0/kysdk-waylandhelper/src/windowmanager/wayland-plasma-window-management-client-protocol.h
--- libkysdk-applications-2.5.1.0/kysdk-waylandhelper/src/windowmanager/wayland-plasma-window-management-client-protocol.h	2024-05-16 09:25:54.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-waylandhelper/src/windowmanager/wayland-plasma-window-management-client-protocol.h	2024-10-29 15:22:42.000000000 +0800
@@ -1,4 +1,4 @@
-/* Generated by wayland-scanner 1.20.0 */
+/* Generated by wayland-scanner 1.22.0 */
 
 #ifndef PLASMA_WINDOW_MANAGEMENT_CLIENT_PROTOCOL_H
 #define PLASMA_WINDOW_MANAGEMENT_CLIENT_PROTOCOL_H
@@ -572,6 +572,17 @@
 	void (*activity_left)(void *data,
 			      struct org_kde_plasma_window *org_kde_plasma_window,
 			      const char *id);
+	/**
+	 * X11 resource name has changed
+	 *
+	 * This event will be sent when the X11 resource name of the
+	 * window has changed. This is only set for XWayland windows.
+	 * @param resource_name resource name
+	 * @since 16
+	 */
+	void (*resource_name_changed)(void *data,
+				      struct org_kde_plasma_window *org_kde_plasma_window,
+				      const char *resource_name);
 };
 
 /**
@@ -665,6 +676,10 @@
  * @ingroup iface_org_kde_plasma_window
  */
 #define ORG_KDE_PLASMA_WINDOW_ACTIVITY_LEFT_SINCE_VERSION 14
+/**
+ * @ingroup iface_org_kde_plasma_window
+ */
+#define ORG_KDE_PLASMA_WINDOW_RESOURCE_NAME_CHANGED_SINCE_VERSION 16
 
 /**
  * @ingroup iface_org_kde_plasma_window
diff -Nru libkysdk-applications-2.5.1.0/kysdk-waylandhelper/src/windowmanager/wayland-plasma-window-management-protocol.c libkysdk-applications-2.5.2.0/kysdk-waylandhelper/src/windowmanager/wayland-plasma-window-management-protocol.c
--- libkysdk-applications-2.5.1.0/kysdk-waylandhelper/src/windowmanager/wayland-plasma-window-management-protocol.c	2024-05-16 09:25:54.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-waylandhelper/src/windowmanager/wayland-plasma-window-management-protocol.c	2024-10-29 15:22:42.000000000 +0800
@@ -1,4 +1,4 @@
-/* Generated by wayland-scanner 1.20.0 */
+/* Generated by wayland-scanner 1.22.0 */
 
 /*
  * SPDX-FileCopyrightText: 2013-2014 Pier Luigi Fiorini
@@ -50,7 +50,7 @@
 };
 
 WL_EXPORT const struct wl_interface org_kde_plasma_window_management_interface = {
-	"org_kde_plasma_window_management", 15,
+	"org_kde_plasma_window_management", 16,
 	3, org_kde_plasma_window_management_requests,
 	5, org_kde_plasma_window_management_events,
 };
@@ -90,12 +90,13 @@
 	{ "application_menu", "10ss", plasma_window_management_types + 0 },
 	{ "activity_entered", "14s", plasma_window_management_types + 0 },
 	{ "activity_left", "14s", plasma_window_management_types + 0 },
+	{ "resource_name_changed", "16s", plasma_window_management_types + 0 },
 };
 
 WL_EXPORT const struct wl_interface org_kde_plasma_window_interface = {
-	"org_kde_plasma_window", 15,
+	"org_kde_plasma_window", 16,
 	15, org_kde_plasma_window_requests,
-	16, org_kde_plasma_window_events,
+	17, org_kde_plasma_window_events,
 };
 
 static const struct wl_message org_kde_plasma_activation_feedback_requests[] = {
diff -Nru libkysdk-applications-2.5.1.0/kysdk-waylandhelper/src/windowmanager/waylandinterface.cpp libkysdk-applications-2.5.2.0/kysdk-waylandhelper/src/windowmanager/waylandinterface.cpp
--- libkysdk-applications-2.5.1.0/kysdk-waylandhelper/src/windowmanager/waylandinterface.cpp	2024-05-16 09:25:54.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-waylandhelper/src/windowmanager/waylandinterface.cpp	1970-01-01 08:00:00.000000000 +0800
@@ -1,685 +0,0 @@
-/*
- * libkysdk-waylandhelper's Library
- *
- * Copyright (C) 2023, KylinSoft Co., Ltd.
- *
- * 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 3 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 General Public License
- * along with this library.  If not, see <https://www.gnu.org/licenses/>.
- *
- * Authors: Zhen Sun <sunzhen1@kylinos.cn>
- *
- */
-
-#include "waylandinterface.h"
-
-#include <QApplication>
-#include <QDebug>
-#include <KWayland/Client/registry.h>
-#include <KWayland/Client/surface.h>
-#include <QWindow>
-#include <QEvent>
-#include "wayland-plasma-window-management-client-protocol.h"
-WaylandInterface::WaylandInterface(QObject *parent)
-    :AbstractInterface(parent)
-{
-   m_connection = KWayland::Client::ConnectionThread::fromApplication(qApp);
-        auto registry = new Registry(this);
-        registry->create(m_connection->display());
-
-
-        connect(registry, &KWayland::Client::Registry::plasmaShellAnnounced, this, [=](){
-            const auto interface = registry->interface(KWayland::Client::Registry::Interface::PlasmaShell);
-            if (interface.name != 0) {
-                m_plasmaShell = registry->createPlasmaShell(interface.name, interface.version, this);
-            }
-        });
-
-        connect(registry, &Registry::plasmaWindowManagementAnnounced, this, [=](){
-            const auto interface = registry->interface(Registry::Interface::PlasmaWindowManagement);
-            if (interface.name != 0) {
-                m_windowManager = registry->createPlasmaWindowManagement(interface.name, interface.version, this);
-            }
-            if(m_windowManager)
-            {
-                connect(m_windowManager, &PlasmaWindowManagement::showingDesktopChanged,this,&AbstractInterface::isShowingDesktopChanged);
-                connect(m_windowManager, &PlasmaWindowManagement::windowCreated, this, &WaylandInterface::windowCreatedProxy);
-                connect(m_windowManager, &PlasmaWindowManagement::activeWindowChanged, this, [&]() noexcept {
-                            auto w = m_windowManager->activeWindow();
-                            if(w)
-                            {
-                                emit activeWindowChanged(w ? w->internalId() : 0);
-                            }
-                }, Qt::QueuedConnection);
-                connect(m_windowManager, &PlasmaWindowManagement::windowCreated,this,
-                    [this](PlasmaWindow *window)
-                {
-                    if (!m_windows.contains(window->internalId())) {
-                        m_windows.insert(window->internalId(), this->requestInfo(window->internalId()));
-                    }
-                    emit windowAdded(window->internalId());
-                });
-            }
-        });
-
-        connect(registry, &KWayland::Client::Registry::plasmaVirtualDesktopManagementAnnounced,
-                             [this, registry] (quint32 name, quint32 version) {
-            m_virtualDesktopManagement = registry->createPlasmaVirtualDesktopManagement(name, version, this);
-            if(m_virtualDesktopManagement)
-            {
-                connect(m_virtualDesktopManagement, &KWayland::Client::PlasmaVirtualDesktopManagement::desktopCreated, this,
-                        [this](const QString &id, quint32 position) {
-                    addDesktop(id, position);
-                });
-
-                connect(m_virtualDesktopManagement, &KWayland::Client::PlasmaVirtualDesktopManagement::desktopRemoved, this,
-                        [this](const QString &id) {
-                    m_desktops.removeAll(id);
-
-                    if (m_currentDesktop == id) {
-                        setCurrentDesktop(QString());
-                    }
-                });
-            }
-        });
-        connect(registry, &KWayland::Client::Registry::shellAnnounced, this, [=](){
-            const auto interface = registry->interface(KWayland::Client::Registry::Interface::Shell);
-            if (interface.name != 0) {
-                m_shell = registry->createShell(interface.name, interface.version, this);
-            }
-        });
-        registry->setup();
-        m_connection->roundtrip();
-}
-
-WaylandInterface::~WaylandInterface()
-{
-}
-
-WindowInfo WaylandInterface::requestInfo(WindowId wid)
-{
-    WindowInfo windowInfo;
-
-    auto w = windowFor(wid);
-
-    if (w) {
-        if (isPlasmaDesktop(w)) {
-            windowInfo.setIsValid(true);
-            windowInfo.setIsPlasmaDesktop(true);
-            windowInfo.setWid(wid);
-            //! Window Abilities
-            windowInfo.setIsClosable(false);
-            windowInfo.setIsFullScreenable(false);
-            windowInfo.setIsGroupable(false);
-            windowInfo.setIsMaximizable(false);
-            windowInfo.setIsMinimizable(false);
-            windowInfo.setIsMovable(false);
-            windowInfo.setIsResizable(false);
-            windowInfo.setIsShadeable(false);
-            windowInfo.setIsVirtualDesktopsChangeable(false);
-            //! Window Abilities
-
-        } else if (isValidWindow(w)) {
-            windowInfo.setIsValid(true);
-            windowInfo.setWid(wid);
-            windowInfo.setIsActive(w->isActive());
-            windowInfo.setIsMinimized(w->isMinimized());
-            windowInfo.setIsMaxVert(w->isMaximized());
-            windowInfo.setIsMaxHoriz(w->isMaximized());
-            windowInfo.setIsFullscreen(w->isFullscreen());
-            windowInfo.setIsShaded(w->isShaded());
-            windowInfo.setIsOnAllDesktops(w->isOnAllDesktops());
-            windowInfo.setIsOnAllActivities(true);
-            windowInfo.setHasSkipTaskbar(w->skipTaskbar());
-            windowInfo.setHasSkipSwitcher(w->skipSwitcher());
-            windowInfo.setIsKeepAbove(w->isKeepAbove());
-            //! Window Abilities
-            windowInfo.setIsClosable(w->isCloseable());
-            windowInfo.setIsFullScreenable(w->isFullscreenable());
-            windowInfo.setIsMaximizable(w->isMaximizeable());
-            windowInfo.setIsMinimizable(w->isMinimizeable());
-            windowInfo.setIsMovable(w->isMovable());
-            windowInfo.setIsResizable(w->isResizable());
-            windowInfo.setIsShadeable(w->isShadeable());
-            windowInfo.setIsVirtualDesktopsChangeable(w->isVirtualDesktopChangeable());
-            //! Window Abilities
-            windowInfo.setDesktops(w->plasmaVirtualDesktops());
-        }
-    } else {
-        windowInfo.setIsValid(false);
-    }
-
-    return windowInfo;
-
-}
-
-void WaylandInterface::requestActivate(WindowId wid)
-{
-    auto w = windowFor(wid);
-
-    if (w) {
-        w->requestActivate();
-        m_connection->roundtrip();
-        emit windowChanged(w->internalId());
-    }
-}
-
-void WaylandInterface::requestClose(WindowId wid)
-{
-    auto w = windowFor(wid);
-
-    if (w) {
-        w->requestClose();
-        m_connection->roundtrip();
-    }
-}
-
-void WaylandInterface::requestToggleKeepAbove(WindowId wid)
-{
-    auto w = windowFor(wid);
-
-    if (w) {
-        w->requestToggleKeepAbove();
-        m_connection->roundtrip();
-        emit windowChanged(w->internalId());
-    }
-}
-
-void WaylandInterface::requestToggleMinimized(WindowId wid)
-{
-    auto w = windowFor(wid);
-
-    if (w) {
-        w->requestToggleMinimized();
-        m_connection->roundtrip();
-    }
-}
-
-void WaylandInterface::requestToggleMaximized(WindowId wid)
-{
-    auto w = windowFor(wid);
-
-    if (w) {
-        w->requestToggleMaximized();
-        m_connection->roundtrip();
-    }
-}
-
-QIcon WaylandInterface::iconFor(WindowId wid)
-{
-    auto window = windowFor(wid);
-
-    if (window) {
-        return window->icon();
-    }
-
-    return QIcon();
-}
-
-QString WaylandInterface::titleFor(WindowId wid)
-{
-    auto window = windowFor(wid);
-
-    if (window) {
-        return window->title();
-    }
-    return QString();
-}
-
-QString WaylandInterface::windowGroupFor(WindowId wid)
-{
-    auto window = windowFor(wid);
-    if (window)
-    {
-        m_connection->roundtrip();
-        return window->appId();
-    }
-    else
-        return QString();
-}
-
-quint32 WaylandInterface::pid(WindowId wid)
-{
-    quint32 pid = 0;
-    auto window = windowFor(wid);
-    if (window)
-    {
-        m_connection->roundtrip();
-        return window->pid();
-    }
-    else
-        return pid;
-}
-
-void WaylandInterface::showCurrentDesktop()
-{
-    if(m_windowManager)
-    {
-        m_windowManager->showDesktop();
-        m_connection->roundtrip();
-    }
-
-}
-
-void WaylandInterface::hideCurrentDesktop()
-{
-    if(m_windowManager)
-    {
-        m_windowManager->hideDesktop();
-        m_connection->roundtrip();
-    }
-}
-
-bool WaylandInterface::windowCanBeDragged(WindowId wid)
-{
-    auto w = windowFor(wid);
-
-    if (w && isValidWindow(w)) {
-        WindowInfo winfo = requestInfo(wid);
-        return (winfo.isValid()
-                && w->isMovable()
-                && !winfo.isMinimized()
-                && inCurrentDesktopActivity(winfo)
-                && !winfo.isPlasmaDesktop());
-    }
-
-    return false;
-}
-
-bool WaylandInterface::windowCanBeMaximized(WindowId wid)
-{
-    auto w = windowFor(wid);
-
-    if (w && isValidWindow(w)) {
-        WindowInfo winfo = requestInfo(wid);
-        return (winfo.isValid()
-                && w->isMaximizeable()
-                && !winfo.isMinimized()
-                && inCurrentDesktopActivity(winfo)
-                && !winfo.isPlasmaDesktop());
-    }
-
-    return false;
-}
-
-WindowId WaylandInterface::activeWindow()
-{
-    if (!m_windowManager) {
-        return 0;
-    }
-    m_connection->roundtrip();
-    auto wid = m_windowManager->activeWindow();
-    return wid ? QVariant(wid->internalId()) : 0;
-}
-
-void WaylandInterface::setGeometry(QWindow *window, const QRect &rect)
-{
-    if(!window)
-        return;
-    if (!m_plasmaShell)
-        return;
-
-    auto surface = KWayland::Client::Surface::fromWindow(window);
-    if (!surface)
-        return;
-    if(!m_surfaces.contains(window))
-    {
-        m_surfaces.insert(window,surface);
-    }
-
-    auto plasmaShellSurface = m_plasmaShell->createSurface(surface, window);
-    if (!plasmaShellSurface)
-        return;
-    if(!m_plasmaShellSurfaces.contains(window))
-    {
-        m_plasmaShellSurfaces.insert(window,plasmaShellSurface);
-    }
-    plasmaShellSurface->setPosition(rect.topLeft());
-    window->resize(rect.size());
-
-
-    window->installEventFilter(this);
-}
-
-void WaylandInterface::setSkipTaskBar(QWindow *window, bool skip)
-{
-    if(!window)
-        return;
-    if (!m_plasmaShell)
-        return;
-
-    auto surface = KWayland::Client::Surface::fromWindow(window);
-    if (!surface)
-        return;
-    if(!m_surfaces.contains(window))
-        m_surfaces.insert(window,surface);
-    auto plasmaShellSurface = m_plasmaShell->createSurface(surface, window);
-    if (!plasmaShellSurface)
-        return;
-    if(!m_plasmaShellSurfaces.contains(window))
-        m_plasmaShellSurfaces.insert(window,plasmaShellSurface);
-
-    plasmaShellSurface->setSkipTaskbar(skip);
-
-    window->installEventFilter(this);
-}
-
-void WaylandInterface::setSkipSwitcher(QWindow *window, bool skip)
-{
-    if(!window)
-        return;
-    if (!m_plasmaShell)
-        return;
-
-    auto surface = KWayland::Client::Surface::fromWindow(window);
-    if (!surface)
-        return;
-    if(!m_surfaces.contains(window))
-        m_surfaces.insert(window,surface);
-    auto plasmaShellSurface = m_plasmaShell->createSurface(surface, window);
-    if (!plasmaShellSurface)
-        return;
-    if(!m_plasmaShellSurfaces.contains(window))
-        m_plasmaShellSurfaces.insert(window,plasmaShellSurface);
-
-    plasmaShellSurface->setSkipSwitcher(skip);
-
-
-    window->installEventFilter(this);
-}
-
-bool WaylandInterface::skipTaskBar(const WindowId &wid)
-{
-    auto window = windowFor(wid);
-
-    return window ? window->skipTaskbar() : false;
-}
-
-bool WaylandInterface::skipSwitcher(const WindowId &wid)
-{
-    auto window = windowFor(wid);
-
-    return window ? window->skipSwitcher() : false;
-}
-
-bool WaylandInterface::isShowingDesktop()
-{
-    bool flag = false;
-    if(m_windowManager)
-    {
-        flag = m_windowManager->isShowingDesktop();
-        m_connection->roundtrip();
-    }
-    return flag;
-}
-
-void WaylandInterface::setOnAllDesktops(const WindowId &wid)
-{
-    auto w = windowFor(wid);
-
-    if (w && isValidWindow(w) && m_desktops.count() > 1) {
-        if (w->isOnAllDesktops()) {
-            w->requestEnterVirtualDesktop(m_currentDesktop);
-        } else {
-            const QStringList &now = w->plasmaVirtualDesktops();
-
-            foreach (const QString &desktop, now) {
-                w->requestLeaveVirtualDesktop(desktop);
-            }
-        }
-    }
-}
-
-void WaylandInterface::setPanelTakefocus(QWindow *window,bool flag)
-{
-    if(!window)
-        return;
-    if (!m_plasmaShell)
-        return;
-
-    auto surface = KWayland::Client::Surface::fromWindow(window);
-    if (!surface)
-        return;
-    if(!m_surfaces.contains(window))
-    {
-        m_surfaces.insert(window,surface);
-    }
-
-    auto plasmaShellSurface = m_plasmaShell->createSurface(surface, window);
-    if (!plasmaShellSurface)
-        return;
-    if(!m_plasmaShellSurfaces.contains(window))
-    {
-        m_plasmaShellSurfaces.insert(window,plasmaShellSurface);
-    }
-    plasmaShellSurface->setPanelTakesFocus(flag);
-    window->installEventFilter(this);
-}
-
-NET::WindowType WaylandInterface::windowType(WindowId wid)
-{
-    return NET::WindowType::Normal;
-}
-
-void WaylandInterface::demandAttention(const WindowId &wid)
-{
-    auto w = windowFor(wid);
-    if (w) {
-         org_kde_plasma_window_set_state(*w, ORG_KDE_PLASMA_WINDOW_MANAGEMENT_STATE_DEMANDS_ATTENTION, ORG_KDE_PLASMA_WINDOW_MANAGEMENT_STATE_DEMANDS_ATTENTION);
-        m_connection->roundtrip();
-    }
-}
-
-bool WaylandInterface::eventFilter(QObject *obj, QEvent *ev)
-{
-    auto window = qobject_cast<QWindow*>(obj);
-    if(window && ev->type() == QEvent::Hide)
-    {
-        if(m_plasmaShellSurfaces.contains(window))
-        {
-            auto plasmaShellSurface = m_plasmaShellSurfaces.value(window);
-            if(plasmaShellSurface)
-            {
-                plasmaShellSurface->release();
-                plasmaShellSurface->destroy();
-            }
-            m_plasmaShellSurfaces.remove(window);
-        }
-        if(m_surfaces.contains(window))
-        {
-            auto surface = m_surfaces.value(window);
-            if(surface)
-            {
-                surface->release();
-                surface->destroy();
-            }
-            m_surfaces.remove(window);
-        }
-
-    }
-    return QObject::eventFilter(obj,ev);
-}
-
-void WaylandInterface::updateWindow()
-{
-    PlasmaWindow* w = qobject_cast<PlasmaWindow*>(QObject::sender());
-    if(w && !isPlasmaPanel(w))
-    {
-        m_connection->roundtrip();
-        emit windowChanged(w->internalId());
-    }
-}
-
-void WaylandInterface::windowUnmapped()
-{
-    PlasmaWindow *pW = qobject_cast<PlasmaWindow*>(QObject::sender());
-
-    if (pW) {
-        untrackWindow(pW);
-        if (!m_windows.contains(pW->internalId())) {
-            m_windows.remove(pW->internalId());
-        }
-        emit windowRemoved(pW->internalId());
-    }
-}
-
-PlasmaWindow *WaylandInterface::windowFor(WindowId wid)
-{
-    auto it = std::find_if(m_windowManager->windows().constBegin(), m_windowManager->windows().constEnd(), [&wid](PlasmaWindow * w) noexcept {
-            return w->isValid() && w->internalId() == wid;
-});
-
-    if (it == m_windowManager->windows().constEnd()) {
-        return nullptr;
-    }
-
-    return *it;
-}
-
-bool WaylandInterface::isValidWindow(const PlasmaWindow *w)
-{
-    return w->isValid();
-}
-
-bool WaylandInterface::isPlasmaDesktop(const PlasmaWindow *w)
-{
-    if (!w || (w->appId() != QLatin1String("org.kde.plasmashell"))) {
-        return false;
-    }
-
-    return AbstractInterface::isPlasmaDesktop(w->geometry());
-}
-
-bool WaylandInterface::isPlasmaPanel(const PlasmaWindow *w)
-{
-    if(w && w->appId() == QLatin1String("ukui-panel"))
-        return true;
-    else
-        return false;
-}
-
-void WaylandInterface::windowCreatedProxy(PlasmaWindow *w)
-{
-    if (!isValidWindow(w)) {
-        return;
-    }
-
-    if ((w->appId() == QLatin1String("org.kde.plasmashell")) && isPlasmaPanel(w))
-    {
-        return;
-    }
-    else
-    {
-        trackWindow(w);
-    }
-}
-
-void WaylandInterface::trackWindow(PlasmaWindow *w)
-{
-    if(!w || isPlasmaPanel(w)){
-        return;
-    }
-    //兼容旧的windowchanged信号
-    connect(w, &PlasmaWindow::titleChanged, this, &WaylandInterface::updateWindow);
-    connect(w, &PlasmaWindow::fullscreenChanged, this, &WaylandInterface::updateWindow);
-    connect(w, &PlasmaWindow::geometryChanged, this, &WaylandInterface::updateWindow);
-    connect(w, &PlasmaWindow::maximizedChanged, this, &WaylandInterface::updateWindow);
-    connect(w, &PlasmaWindow::minimizedChanged, this, &WaylandInterface::updateWindow);
-    connect(w, &PlasmaWindow::shadedChanged, this, &WaylandInterface::updateWindow);
-    connect(w, &PlasmaWindow::skipTaskbarChanged, this, &WaylandInterface::updateWindow);
-    connect(w, &PlasmaWindow::onAllDesktopsChanged, this, &WaylandInterface::updateWindow);
-    connect(w, &PlasmaWindow::parentWindowChanged, this, &WaylandInterface::updateWindow);
-    connect(w, &PlasmaWindow::iconChanged, this, &WaylandInterface::updateWindow);
-    connect(w, &PlasmaWindow::plasmaVirtualDesktopEntered, this, &WaylandInterface::updateWindow);
-    connect(w, &PlasmaWindow::plasmaVirtualDesktopLeft, this, &WaylandInterface::updateWindow);
-    connect(w, &PlasmaWindow::unmapped, this, &WaylandInterface::windowUnmapped);
-
-    //按照具体事件新增信号,since2.3
-    connect(w, &PlasmaWindow::titleChanged, this, [=](){emit titleChanged(w->internalId());});
-    connect(w, &PlasmaWindow::fullscreenChanged, this, [=](){emit fullscreenChanged(w->internalId());});
-    connect(w, &PlasmaWindow::iconChanged, this, [=](){emit iconChanged(w->internalId());});
-    connect(w, &PlasmaWindow::activeChanged, this, [=](){emit activeChanged(w->internalId());});
-    connect(w, &PlasmaWindow::keepAboveChanged, this, [=](){emit keepAboveChanged(w->internalId());});
-    connect(w, &PlasmaWindow::minimizedChanged, this, [=](){emit minimizedChanged(w->internalId());});
-    connect(w, &PlasmaWindow::maximizedChanged, this, [=](){emit maximizedChanged(w->internalId());});
-    connect(w, &PlasmaWindow::onAllDesktopsChanged, this, [=](){emit onAllDesktopsChanged(w->internalId());});
-    connect(w, &PlasmaWindow::demandsAttentionChanged, this, [=](){emit demandsAttentionChanged(w->internalId());});
-    connect(w, &PlasmaWindow::skipTaskbarChanged, this, [=](){emit skipTaskbarChanged(w->internalId());});
-    connect(w, &PlasmaWindow::skipSwitcherChanged, this, [=](){emit skipSwitcherChanged(w->internalId());});
-    connect(w, &PlasmaWindow::geometryChanged, this, [=](){emit geometryChanged(w->internalId());});
-}
-
-void WaylandInterface::untrackWindow(PlasmaWindow *w)
-{
-    if (!w) {
-        return;
-    }
-
-    disconnect(w, &PlasmaWindow::activeChanged, this, &WaylandInterface::updateWindow);
-    disconnect(w, &PlasmaWindow::titleChanged, this, &WaylandInterface::updateWindow);
-    disconnect(w, &PlasmaWindow::fullscreenChanged, this, &WaylandInterface::updateWindow);
-    disconnect(w, &PlasmaWindow::geometryChanged, this, &WaylandInterface::updateWindow);
-    disconnect(w, &PlasmaWindow::maximizedChanged, this, &WaylandInterface::updateWindow);
-    disconnect(w, &PlasmaWindow::minimizedChanged, this, &WaylandInterface::updateWindow);
-    disconnect(w, &PlasmaWindow::shadedChanged, this, &WaylandInterface::updateWindow);
-    disconnect(w, &PlasmaWindow::skipTaskbarChanged, this, &WaylandInterface::updateWindow);
-    disconnect(w, &PlasmaWindow::onAllDesktopsChanged, this, &WaylandInterface::updateWindow);
-    disconnect(w, &PlasmaWindow::parentWindowChanged, this, &WaylandInterface::updateWindow);
-    disconnect(w, &PlasmaWindow::plasmaVirtualDesktopEntered, this, &WaylandInterface::updateWindow);
-    disconnect(w, &PlasmaWindow::plasmaVirtualDesktopLeft, this, &WaylandInterface::updateWindow);
-    disconnect(w, &PlasmaWindow::unmapped, this, &WaylandInterface::windowUnmapped);
-
-
-    disconnect(w, &PlasmaWindow::titleChanged, 0, 0);
-    disconnect(w, &PlasmaWindow::iconChanged, 0, 0);
-    disconnect(w, &PlasmaWindow::activeChanged, 0, 0);
-    disconnect(w, &PlasmaWindow::keepAboveChanged, 0, 0);
-    disconnect(w, &PlasmaWindow::keepBelowChanged, 0, 0);
-    disconnect(w, &PlasmaWindow::minimizedChanged, 0, 0);
-    disconnect(w, &PlasmaWindow::maximizedChanged, 0, 0);
-    disconnect(w, &PlasmaWindow::onAllDesktopsChanged, 0, 0);
-    disconnect(w, &PlasmaWindow::demandsAttentionChanged, 0, 0);
-    disconnect(w, &PlasmaWindow::skipTaskbarChanged,  0, 0);
-    disconnect(w, &PlasmaWindow::skipSwitcherChanged, 0, 0);
-    disconnect(w, &PlasmaWindow::geometryChanged, 0, 0);
-}
-
-void WaylandInterface::setCurrentDesktop(QString desktop)
-{
-    if (m_currentDesktop == desktop) {
-        return;
-    }
-
-    m_currentDesktop = desktop;
-    emit currentDesktopChanged();
-}
-
-void WaylandInterface::addDesktop(const QString &id, quint32 position)
-{
-    if (m_desktops.contains(id)) {
-        return;
-    }
-
-    m_desktops.append(id);
-
-    const KWayland::Client::PlasmaVirtualDesktop *desktop = m_virtualDesktopManagement->getVirtualDesktop(id);
-
-    QObject::connect(desktop, &KWayland::Client::PlasmaVirtualDesktop::activated, this,
-                     [desktop, this]() {
-        setCurrentDesktop(desktop->id());
-    }
-    );
-
-    if (desktop->isActive()) {
-        setCurrentDesktop(id);
-    }
-}
diff -Nru libkysdk-applications-2.5.1.0/kysdk-waylandhelper/src/windowmanager/waylandinterface.h libkysdk-applications-2.5.2.0/kysdk-waylandhelper/src/windowmanager/waylandinterface.h
--- libkysdk-applications-2.5.1.0/kysdk-waylandhelper/src/windowmanager/waylandinterface.h	2024-05-16 09:25:54.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-waylandhelper/src/windowmanager/waylandinterface.h	1970-01-01 08:00:00.000000000 +0800
@@ -1,109 +0,0 @@
-/*
- * libkysdk-waylandhelper's Library
- *
- * Copyright (C) 2023, KylinSoft Co., Ltd.
- *
- * 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 3 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 General Public License
- * along with this library.  If not, see <https://www.gnu.org/licenses/>.
- *
- * Authors: Zhen Sun <sunzhen1@kylinos.cn>
- *
- */
-
-#ifndef WAYLANDINTERFACE_H
-#define WAYLANDINTERFACE_H
-
-#include "abstractinterface.h"
-
-#include <KWayland/Server/plasmashell_interface.h>
-#include <KWayland/Client/plasmawindowmanagement.h>
-#include <KWayland/Client/plasmavirtualdesktop.h>
-#include <KWayland/Client/plasmashell.h>
-#include <KWayland/Client/shell.h>
-#include <KWayland/Client/connection_thread.h>
-#include <QMap>
-
-using namespace kdk;
-using namespace KWayland::Client;
-class Q_DECL_HIDDEN WaylandInterface:public AbstractInterface
-{
-public:
-    WaylandInterface(QObject* parent=nullptr);
-    ~WaylandInterface();
-    WindowInfo requestInfo(WindowId wid) override;
-
-    void requestActivate(WindowId wid)  override;
-    void requestClose(WindowId wid)  override;
-    void requestToggleKeepAbove(WindowId wid)  override;
-    void requestToggleMinimized(WindowId wid)  override;
-    void requestToggleMaximized(WindowId wid)  override;
-
-    QIcon iconFor(WindowId wid) override;
-    QString titleFor(WindowId wid) override;
-    QString windowGroupFor(WindowId wid) override;
-    quint32 pid(WindowId wid) override;
-
-    void showCurrentDesktop() override;
-    void hideCurrentDesktop() override;
-
-    bool windowCanBeDragged(WindowId wid) override;
-    bool windowCanBeMaximized(WindowId wid) override;
-
-    WindowId activeWindow() override;
-
-    void setGeometry(QWindow *window, const QRect &rect) override;
-
-    void setSkipTaskBar(QWindow* window,bool skip) override;
-    void setSkipSwitcher(QWindow* window,bool skip) override;
-
-    bool skipTaskBar(const WindowId &wid) override;
-    bool skipSwitcher(const WindowId &wid) override;
-
-    bool isShowingDesktop();
-    void setOnAllDesktops(const WindowId &wid);
-
-    NET::WindowType windowType(WindowId wid) override;
-    void setPanelTakefocus(QWindow *window, bool flag) override;
-    void demandAttention(const WindowId &wid) override;
-
-protected:
-    bool eventFilter(QObject *obj, QEvent *ev) override;
-
-private slots:
-    void updateWindow();
-    void windowUnmapped();
-
-private:
-    PlasmaWindow *windowFor(WindowId wid) ;
-    bool isValidWindow(const KWayland::Client::PlasmaWindow *w) ;
-    bool isPlasmaDesktop(const KWayland::Client::PlasmaWindow *w) ;
-    bool isPlasmaPanel(const KWayland::Client::PlasmaWindow *w) ;
-    void windowCreatedProxy(KWayland::Client::PlasmaWindow *w);
-    void trackWindow(KWayland::Client::PlasmaWindow *w);
-    void untrackWindow(KWayland::Client::PlasmaWindow *w);
-    void setCurrentDesktop(QString desktop);
-    void addDesktop(const QString &id, quint32 position);
-
-private:
-    ConnectionThread *m_connection=nullptr;
-    PlasmaShell *m_plasmaShell = nullptr;
-    Shell *m_shell = nullptr;
-    PlasmaWindowManagement *m_windowManager = nullptr;
-    PlasmaWindow *m_appWindow = nullptr;
-    PlasmaVirtualDesktopManagement *m_virtualDesktopManagement{nullptr};
-    QStringList m_desktops;
-    QMap<QWindow*,Surface*>m_surfaces;
-    QMap<QWindow*,PlasmaShellSurface*>m_plasmaShellSurfaces;
-};
-
-#endif // WAYLANDINTERFACE_H
diff -Nru libkysdk-applications-2.5.1.0/kysdk-waylandhelper/src/windowmanager/windowmanager.cpp libkysdk-applications-2.5.2.0/kysdk-waylandhelper/src/windowmanager/windowmanager.cpp
--- libkysdk-applications-2.5.1.0/kysdk-waylandhelper/src/windowmanager/windowmanager.cpp	2024-05-16 09:25:54.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-waylandhelper/src/windowmanager/windowmanager.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -53,6 +53,7 @@
     connect(m_wm->winInterface(),&AbstractInterface::skipTaskbarChanged,this,&WindowManager::skipTaskbarChanged);
     connect(m_wm->winInterface(),&AbstractInterface::skipSwitcherChanged,this,&WindowManager::skipSwitcherChanged);
     connect(m_wm->winInterface(),&AbstractInterface::geometryChanged,this,&WindowManager::geometryChanged);
+    connect(m_wm->winInterface(),&AbstractInterface::outputInfoChanged,this,&WindowManager::outputInfoChanged);
 }
 
 WindowId WindowManager::currentActiveWindow()
@@ -322,3 +323,110 @@
         return ;
     return m_wm->winInterface()->setPanelAutoHide(window, autoHide);
 }
+
+void WindowManager::setGrabKeyboard(QWindow *window, bool grabKeyboard)
+{
+    self();
+    if(!m_wm)
+        return ;
+    return m_wm->winInterface()->setGrabKeyboard(window, grabKeyboard);
+}
+
+void WindowManager::setWindowLayer(QWindow *window, WindowLayer layer)
+{
+    self();
+    if(!m_wm)
+        return ;
+    return m_wm->winInterface()->setWindowLayer(window, layer);
+}
+
+WindowLayer WindowManager::windowLayer(QWindow *window)
+{
+    self();
+    if(!m_wm)
+        return WindowLayer::Normal;
+    return m_wm->winInterface()->windowLayer(window);
+}
+
+void WindowManager::setHighlight(const WindowId &wid, bool highlight)
+{
+    self();
+    if(!m_wm)
+        return ;
+    return m_wm->winInterface()->setHighlight(wid, highlight);
+}
+
+bool WindowManager::isHightlight(const WindowId &wid)
+{
+    self();
+    if(!m_wm)
+        return false;
+    return m_wm->winInterface()->istHighlight(wid);
+}
+
+void WindowManager::setOpenUnderCursor(QWindow *window)
+{
+    self();
+    if(!m_wm)
+        return ;
+    return m_wm->winInterface()->setOpenUnderCursor(window);
+}
+
+void WindowManager::setOpenUnderCursor(QWindow *window, int x, int y)
+{
+    self();
+    if(!m_wm)
+        return ;
+    return m_wm->winInterface()->setOpenUnderCursor(window, x, y);
+}
+
+void WindowManager::setIconName(QWindow *window, const QString &iconName)
+{
+    self();
+    if(!m_wm)
+        return ;
+    return m_wm->winInterface()->setIconName(window, iconName);
+}
+
+QString WindowManager::currentSeatName()
+{
+    self();
+    if(!m_wm)
+        return QString();
+    return m_wm->winInterface()->currentSeatName();
+}
+
+QString WindowManager::currentOutputName()
+{
+    self();
+    if(!m_wm)
+        return QString();
+    return m_wm->winInterface()->currentOutputName();
+}
+
+QList<OutputInfo *> WindowManager::outputsInfo()
+{
+    QList<OutputInfo *> list;
+    self();
+    if(!m_wm)
+        return list;
+    return m_wm->winInterface()->outputsInfo();
+}
+
+QList<WindowId> WindowManager::getWindowIdByPid(quint32 pid)
+{
+    QList<WindowId> list;
+    self();
+    if(!m_wm)
+        return list;
+    return m_wm->winInterface()->getWindowIdByPid(pid);
+}
+
+QList<WindowId> WindowManager::getWindowIdByTtile(const QString&title)
+{
+    QList<WindowId> list;
+    self();
+    if(!m_wm)
+        return list;
+    return m_wm->winInterface()->getWindowIdByTtile(title);
+}
diff -Nru libkysdk-applications-2.5.1.0/kysdk-waylandhelper/src/windowmanager/windowmanager.h libkysdk-applications-2.5.2.0/kysdk-waylandhelper/src/windowmanager/windowmanager.h
--- libkysdk-applications-2.5.1.0/kysdk-waylandhelper/src/windowmanager/windowmanager.h	2024-05-16 09:25:54.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-waylandhelper/src/windowmanager/windowmanager.h	2024-10-29 15:22:42.000000000 +0800
@@ -258,7 +258,7 @@
 
     /**
      * @brief setWindowRadius
-     * @since 2.4
+     * @since 2.5
      * @param window
      * @param radius
      */
@@ -266,7 +266,7 @@
 
     /**
      * @brief activateWindow
-     * @since 2.4
+     * @since 2.5
      * @param window1
      * @param window2
      */
@@ -274,7 +274,7 @@
 
     /**
      * @brief windowGeometry
-     * @since 2.4
+     * @since 2.5
      * @param windowId
      * @return
      */
@@ -282,12 +282,110 @@
 
     /**
      * @brief setPanelAutoHide
-     * @since 2.4
+     * @since 2.5
      * @param window
      * @param autoHide
      */
     static void setPanelAutoHide(QWindow *window,bool autoHide);
 
+    /**
+     * @brief setGrabKeyboard
+     * @since 2.5
+     * @param window
+     * @param grabKeyboard
+     */
+    static void setGrabKeyboard(QWindow *window, bool grabKeyboard);
+
+    /**
+     * @brief setWindowLayer
+     * @since 2.5
+     * @param window
+     * @param layer
+     */
+    static void setWindowLayer(QWindow *window, WindowLayer layer);
+
+    /**
+     * @brief windowLayer
+     * @since 2.5
+     * @param window
+     * @return
+     */
+    static WindowLayer windowLayer(QWindow *window);
+
+    /**
+     * @brief setHighlight
+     * @since 2.5
+     * @param wid
+     * @param highlight
+     */
+    static void setHighlight(const WindowId &wid, bool highlight);
+
+    /**
+     * @brief isHightlight
+     * @since 2.5
+     * @param wid
+     */
+    static bool isHightlight(const WindowId &wid);
+
+    /**
+     * @brief setOpenUnderCursor
+     * @since 2.5
+     * @param window
+     */
+    static void setOpenUnderCursor(QWindow *window);
+
+    /**
+     * @brief setOpenUnderCursor
+     * @since 2.5
+     * @param window
+     * @param x
+     * @param y
+     */
+    static void setOpenUnderCursor(QWindow *window, int x, int y);
+
+    /**
+     * @brief setIconName
+     * @since 2.5
+     * @param window
+     * @param iconName
+     */
+    static void setIconName(QWindow *window, const QString& iconName);
+
+    /**
+     * @brief currentSeatName
+     * @since 2.5
+     * @return
+     */
+    static QString currentSeatName();
+
+    /**
+     * @brief currentOutputName
+     * @since 2.5
+     * @return
+     */
+    static QString currentOutputName();
+
+    /**
+     * @brief outputsInfo
+     * @since 2.5
+     * @return
+     */
+    static QList<OutputInfo*> outputsInfo();
+
+    /**
+     * @brief getWindowIdByPid
+     * @since 2.5
+     * @return
+     */
+    static QList<WindowId> getWindowIdByPid(quint32 pid);
+
+    /**
+     * @brief getWindowIdByTtile
+     * @since 2.5
+     * @return
+     */
+    static QList<WindowId> getWindowIdByTtile(const QString&title);
+
 Q_SIGNALS:
      /**
       * @brief 窗口添加信号
@@ -408,6 +506,12 @@
       */
      void geometryChanged(const WindowId& wid);
 
+     /**
+      * @brief 屏幕信息改变信号
+      * @since 2.5
+      */
+     void outputInfoChanged(OutputInfo*);
+
 private:
      WindowManager(QObject *parent = nullptr);
 };
diff -Nru libkysdk-applications-2.5.1.0/kysdk-waylandhelper/src/windowmanager/xcbinterface.cpp libkysdk-applications-2.5.2.0/kysdk-waylandhelper/src/windowmanager/xcbinterface.cpp
--- libkysdk-applications-2.5.1.0/kysdk-waylandhelper/src/windowmanager/xcbinterface.cpp	2024-05-16 09:25:54.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-waylandhelper/src/windowmanager/xcbinterface.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -21,7 +21,8 @@
  */
 
 #include "xcbinterface.h"
-
+#include "kwindowinfo.h"
+#include "kyatoms_p.h"
 #include <QRect>
 #include <QIcon>
 #include <QWidget>
@@ -30,8 +31,168 @@
 #include <KWindowInfo>
 #include <kiconloader.h>
 #include <QWindow>
-#include "kwindowinfo.h"
 #include <QDebug>
+#include <QSharedData>
+
+class KylinAtoms : public QSharedData
+{
+public:
+    explicit KylinAtoms(xcb_connection_t *c);
+
+    xcb_atom_t atom(KyAtom atom) const
+    {
+        return m_atoms[atom];
+    }
+    xcb_connection_t *m_connection;
+private:
+    void init();
+    xcb_atom_t m_atoms[KyAtomCount];
+
+};
+
+typedef QHash<xcb_connection_t *, QSharedDataPointer<KylinAtoms>> AtomHash;
+Q_GLOBAL_STATIC(AtomHash, s_gAtomsHash)
+
+static QSharedDataPointer<KylinAtoms> atomsForConnection(xcb_connection_t *c)
+{
+    auto it = s_gAtomsHash->constFind(c);
+    if (it == s_gAtomsHash->constEnd()) {
+        QSharedDataPointer<KylinAtoms> atom(new KylinAtoms(c));
+        s_gAtomsHash->insert(c, atom);
+        return atom;
+    }
+    return it.value();
+}
+
+class KyWinInfo
+{
+public:
+    explicit KyWinInfo(xcb_connection_t *c,xcb_window_t w)
+    {
+        atoms = atomsForConnection(c);
+        connection = c;
+        window = w;
+    }
+    xcb_atom_t atom(KyAtom atom) const
+    {
+        return atoms->atom(atom);
+    }
+    void setWindowLayer(WindowLayer layer);
+    QSharedDataPointer<KylinAtoms> atoms;
+    xcb_connection_t *connection;
+    xcb_window_t window;
+};
+
+
+
+void KyWinInfo::setWindowLayer(WindowLayer layer)
+{
+
+    int len;
+    uint32_t data[2];
+
+    switch (layer)
+    {
+    case WindowLayer::Panel:
+        data[0] = this->atom(_NET_WM_WINDOW_TYPE_DOCK);
+        data[1] = XCB_NONE;
+        len = 1;
+        break;
+
+    case WindowLayer::Desktop:
+        data[0] = this->atom(_NET_WM_WINDOW_TYPE_DESKTOP);
+        data[1] = XCB_NONE;
+        len = 1;
+        break;
+
+    case WindowLayer::ToolTip:
+        data[0] = this->atom(_NET_WM_WINDOW_TYPE_TOOLTIP);
+        data[1] = XCB_NONE;
+        len = 1;
+        break;
+
+    case WindowLayer::Notification:
+        data[0] = this->atom(_NET_WM_WINDOW_TYPE_NOTIFICATION);
+        data[1] = this->atom(_NET_WM_WINDOW_TYPE_UTILITY); // fallback (utility seems to be the best)
+        len = 1;
+        break;
+
+    case WindowLayer::OnScreenDisplay:
+        data[0] = this->atom(_KDE_NET_WM_WINDOW_TYPE_ON_SCREEN_DISPLAY);
+        data[1] = this->atom(_NET_WM_WINDOW_TYPE_NOTIFICATION);
+        len = 2;
+        break;
+
+    case WindowLayer::CriticalNotification:
+        data[0] = this->atom(_KDE_NET_WM_WINDOW_TYPE_CRITICAL_NOTIFICATION);
+        data[1] = this->atom(_NET_WM_WINDOW_TYPE_NOTIFICATION);
+        len = 2;
+        break;
+
+    case WindowLayer::AppletPop:
+        data[0] = this->atom(_KDE_NET_WM_WINDOW_TYPE_APPLET_POPUP);
+        data[1] = XCB_NONE;
+        len = 1;
+        break;
+
+    // UKUI extensions
+    case WindowLayer::SystemWindow:
+        data[0] = this->atom(_UKUI_NET_WM_WINDOW_TYPE_SYSTEMWINDOW);
+        data[1] = XCB_NONE;
+        len = 1;
+        break;
+
+    case WindowLayer::InputPanel:
+        data[0] = this->atom(_UKUI_NET_WM_WINDOW_TYPE_INPUTPANEL);
+        data[1] = XCB_NONE;
+        len = 1;
+        break;
+
+    case WindowLayer::Logout:
+        data[0] = this->atom(_UKUI_NET_WM_WINDOW_TYPE_LOGOUT);
+        data[1] = XCB_NONE;
+        len = 1;
+        break;
+
+    case WindowLayer::ScreenLock:
+        data[0] = this->atom(_UKUI_NET_WM_WINDOW_TYPE_SCREENLOCK);
+        data[1] = XCB_NONE;
+        len = 1;
+        break;
+
+    case WindowLayer::ScreenLockNotification:
+        data[0] = this->atom(_UKUI_NET_WM_WINDOW_TYPE_SCREENLOCKNOTIFICATION);
+        data[1] = XCB_NONE;
+        len = 1;
+        break;
+
+    case WindowLayer::Watermark:
+        data[0] = this->atom(_UKUI_NET_WM_WINDOW_TYPE_WATERMARK);
+        data[1] = XCB_NONE;
+        len = 1;
+        break;
+
+    default:
+    case WindowLayer::Normal:
+        data[0] = this->atom(_NET_WM_WINDOW_TYPE_NORMAL);
+        data[1] = XCB_NONE;
+        len = 1;
+        break;
+    }
+
+    xcb_change_property(this->connection, XCB_PROP_MODE_REPLACE, this->window, atom(_NET_WM_WINDOW_TYPE), XCB_ATOM_ATOM, 32, len, (const void *)&data);
+}
+
+KylinAtoms::KylinAtoms(xcb_connection_t *c)
+    : QSharedData()
+    , m_connection(c)
+{
+    for (int i = 0; i < KyAtomCount; ++i) {
+        m_atoms[i] = XCB_ATOM_NONE;
+    }
+    init();
+}
+
 XcbInterface::XcbInterface(QObject *parent)
     :AbstractInterface(parent)
 {
@@ -387,6 +548,128 @@
         return QRect();
 }
 
+void XcbInterface::setWindowLayer(QWindow *window, WindowLayer layer)
+{
+    if(!window)
+        return;
+    KyWinInfo info(QX11Info::connection(), window->winId());
+    info.setWindowLayer(layer);
+}
+
+WindowLayer XcbInterface::windowLayer(QWindow *window)
+{
+    if(!window)
+        return WindowLayer::Normal;
+
+    WindowLayer layer;
+    KWindowInfo info(window->winId(), NET::WMWindowType|NET::WMState,NET::WM2TransientFor);
+    switch (info.windowType(NET::AllTypesMask))
+    {
+        case NET::Normal:
+            layer = WindowLayer::Normal;
+            break;
+        case NET::Desktop:
+            layer = WindowLayer::Desktop;
+            break;
+        case NET::Dock:
+        {
+            layer = WindowLayer::Panel;
+            qWarning()<<"NET::Dock replaced by WindowLayer::Panel";
+            break;
+        }
+        case NET::Toolbar:
+        {
+            layer = WindowLayer::Normal;
+            qWarning()<<"NET::Toolbar replaced by WindowLayer::Normal";
+            break;
+        }
+        case NET::Menu:
+        {
+            layer = WindowLayer::AppletPop;
+            qWarning()<<"NET::Menu replaced by WindowLayer::AppletPop";
+            break;
+        }
+        case NET::Dialog:
+            layer = WindowLayer::Normal;
+            qWarning()<<"NET::Dialog replaced by WindowLayer::Normal";
+            break;
+        case NET::Override:
+            layer = WindowLayer::Normal;
+            qWarning()<<"NET::Override replaced by WindowLayer::Normal";
+            break;
+        case NET::Utility:
+            layer = WindowLayer::Normal;
+            qWarning()<<"NET::Utility replaced by WindowLayer::Normal";
+            break;
+        case NET::Splash:
+            layer = WindowLayer::Normal;
+            qWarning()<<"NET::Splash replaced by WindowLayer::Normal";
+            break;
+        case NET::DropdownMenu:
+            layer = WindowLayer::AppletPop;
+            qWarning()<<"NET::DropdownMenu replaced by WindowLayer::AppletPop";
+            break;
+        case NET::PopupMenu:
+            layer = WindowLayer::AppletPop;
+            qWarning()<<"NET::PopupMenu replaced by WindowLayer::AppletPop";
+            break;
+        case NET::Tooltip:
+            layer = WindowLayer::ToolTip;
+            break;
+        case NET::Notification:
+            layer = WindowLayer::Notification;
+            break;
+        case NET::ComboBox:
+            layer = WindowLayer::Normal;
+            qWarning()<<"NET::Dialog replaced by WindowLayer::Normal";
+            break;
+        case NET::DNDIcon:
+            layer = WindowLayer::Normal;
+            qWarning()<<"NET::DNDIcon replaced by WindowLayer::Normal";
+            break;
+        case NET::OnScreenDisplay:
+            layer = WindowLayer::OnScreenDisplay;
+            break;
+        case NET::CriticalNotification:
+            layer = WindowLayer::CriticalNotification;
+            break;
+        case NET::AppletPopup:
+            layer = WindowLayer::AppletPop;
+            break;
+        default:
+            layer = WindowLayer::Normal;
+            break;
+
+    }
+    return layer;
+}
+
+QList<WindowId> XcbInterface::getWindowIdByPid(quint32 p)
+{
+    QList<WindowId> list;
+    for(auto windowId : windows())
+    {
+        if(pid(windowId) == p)
+        {
+            list.append(windowId);
+        }
+    }
+    return list;
+}
+
+QList<WindowId> XcbInterface::getWindowIdByTtile(const QString &title)
+{
+    QList<WindowId> list;
+    for(auto windowId : windows())
+    {
+        if(titleFor(windowId) == title)
+        {
+            list.append(windowId);
+        }
+    }
+    return list;
+}
+
 bool XcbInterface::isValidWindow(WindowId wid)
 {
     if (this->isValidFor(wid)) {
@@ -479,3 +762,26 @@
     if(prop1.testFlag(NET::WMDesktop) && info.onAllDesktops())
         emit onAllDesktopsChanged(wid);
 }
+
+
+void KylinAtoms::init()
+{
+#define ENUM_CREATE_CHAR_ARRAY 1
+#include "kyatoms_p.h" // creates const char* array "KyAtomStrings"
+    // Send the intern atom requests
+    xcb_intern_atom_cookie_t cookies[KyAtomCount];
+    for (int i = 0; i < KyAtomCount; ++i) {
+        cookies[i] = xcb_intern_atom(m_connection, false, strlen(KyAtomStrings[i]), KyAtomStrings[i]);
+    }
+
+    // Get the replies
+    for (int i = 0; i < KyAtomCount; ++i) {
+        xcb_intern_atom_reply_t *reply = xcb_intern_atom_reply(m_connection, cookies[i], nullptr);
+        if (!reply) {
+            continue;
+        }
+
+        m_atoms[i] = reply->atom;
+        free(reply);
+    }
+}
diff -Nru libkysdk-applications-2.5.1.0/kysdk-waylandhelper/src/windowmanager/xcbinterface.h libkysdk-applications-2.5.2.0/kysdk-waylandhelper/src/windowmanager/xcbinterface.h
--- libkysdk-applications-2.5.1.0/kysdk-waylandhelper/src/windowmanager/xcbinterface.h	2024-05-16 09:25:54.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-waylandhelper/src/windowmanager/xcbinterface.h	2024-10-29 15:22:42.000000000 +0800
@@ -37,7 +37,7 @@
     WindowInfo requestInfo(WindowId wid) override;
 
     void requestActivate(WindowId wid)  override;
-    void requestClose(WindowId wid) ;
+    void requestClose(WindowId wid) override;
     void requestToggleKeepAbove(WindowId wid)  override;
     void requestToggleMinimized(WindowId wid)  override;
     void requestToggleMaximized(WindowId wid)  override;
@@ -63,14 +63,20 @@
     bool skipTaskBar(const WindowId &wid) override;
     bool skipSwitcher(const WindowId &wid) override;
 
-    bool isShowingDesktop();
-    void setOnAllDesktops(const WindowId &wid);
+    bool isShowingDesktop() override;
+    void setOnAllDesktops(const WindowId &wid) override;
 
     NET::WindowType windowType(WindowId wid) override;
     void setPanelTakefocus(QWindow *window, bool flag) override;
     void demandAttention(const WindowId &wid) override;
     QRect windowGeometry(const WindowId& windowId) override;
 
+    void setWindowLayer(QWindow *window, WindowLayer layer) override;
+    WindowLayer windowLayer(QWindow *window) override;
+
+    QList<WindowId> getWindowIdByPid(quint32 pid) override;
+    QList<WindowId> getWindowIdByTtile(const QString& title) override;
+
 private:
     bool isValidWindow(WindowId wid) ;
     bool isValidWindow(const KWindowInfo &winfo) ;
diff -Nru libkysdk-applications-2.5.1.0/kysdk-waylandhelper/test/testBlurManager/.gitignore libkysdk-applications-2.5.2.0/kysdk-waylandhelper/test/testBlurManager/.gitignore
--- libkysdk-applications-2.5.1.0/kysdk-waylandhelper/test/testBlurManager/.gitignore	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-waylandhelper/test/testBlurManager/.gitignore	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,73 @@
+# This file is used to ignore files which are generated
+# ----------------------------------------------------------------------------
+
+*~
+*.autosave
+*.a
+*.core
+*.moc
+*.o
+*.obj
+*.orig
+*.rej
+*.so
+*.so.*
+*_pch.h.cpp
+*_resource.rc
+*.qm
+.#*
+*.*#
+core
+!core/
+tags
+.DS_Store
+.directory
+*.debug
+Makefile*
+*.prl
+*.app
+moc_*.cpp
+ui_*.h
+qrc_*.cpp
+Thumbs.db
+*.res
+*.rc
+/.qmake.cache
+/.qmake.stash
+
+# qtcreator generated files
+*.pro.user*
+
+# xemacs temporary files
+*.flc
+
+# Vim temporary files
+.*.swp
+
+# Visual Studio generated files
+*.ib_pdb_index
+*.idb
+*.ilk
+*.pdb
+*.sln
+*.suo
+*.vcproj
+*vcproj.*.*.user
+*.ncb
+*.sdf
+*.opensdf
+*.vcxproj
+*vcxproj.*
+
+# MinGW generated files
+*.Debug
+*.Release
+
+# Python byte code
+*.pyc
+
+# Binaries
+# --------
+*.dll
+*.exe
+
diff -Nru libkysdk-applications-2.5.1.0/kysdk-waylandhelper/test/testBlurManager/main.cpp libkysdk-applications-2.5.2.0/kysdk-waylandhelper/test/testBlurManager/main.cpp
--- libkysdk-applications-2.5.1.0/kysdk-waylandhelper/test/testBlurManager/main.cpp	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-waylandhelper/test/testBlurManager/main.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,11 @@
+#include "widget.h"
+
+#include <QApplication>
+
+int main(int argc, char *argv[])
+{
+    QApplication a(argc, argv);
+    Widget w;
+    w.show();
+    return a.exec();
+}
diff -Nru libkysdk-applications-2.5.1.0/kysdk-waylandhelper/test/testBlurManager/testBlurManager.pro libkysdk-applications-2.5.2.0/kysdk-waylandhelper/test/testBlurManager/testBlurManager.pro
--- libkysdk-applications-2.5.1.0/kysdk-waylandhelper/test/testBlurManager/testBlurManager.pro	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-waylandhelper/test/testBlurManager/testBlurManager.pro	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,22 @@
+QT       += core gui KWindowSystem
+
+greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
+
+CONFIG += c++11 link_pkgconfig
+PKGCONFIG += kysdk-waylandhelper
+
+# You can make your code fail to compile if it uses deprecated APIs.
+# In order to do so, uncomment the following line.
+#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
+
+SOURCES += \
+    main.cpp \
+    widget.cpp
+
+HEADERS += \
+    widget.h
+
+# Default rules for deployment.
+qnx: target.path = /tmp/$${TARGET}/bin
+else: unix:!android: target.path = /opt/$${TARGET}/bin
+!isEmpty(target.path): INSTALLS += target
diff -Nru libkysdk-applications-2.5.1.0/kysdk-waylandhelper/test/testBlurManager/widget.cpp libkysdk-applications-2.5.2.0/kysdk-waylandhelper/test/testBlurManager/widget.cpp
--- libkysdk-applications-2.5.1.0/kysdk-waylandhelper/test/testBlurManager/widget.cpp	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-waylandhelper/test/testBlurManager/widget.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,32 @@
+#include "widget.h"
+
+#include "widget.h"
+#include <ukuistylehelper/ukuistylehelper.h>
+#include <windowmanager/windowmanager.h>
+#include <blurmanager/blurmanager.h>
+#include <KWindowEffects>
+Widget::Widget(QWidget *parent)
+    : QWidget(parent)
+{
+    m_btn = new QPushButton("switch",this);
+    m_btn->setCheckable(true);
+    m_btn->move(100,100);
+    m_testWidget = new QWidget();
+
+    connect(m_btn,&QPushButton::clicked,this,[=](bool checked)
+    {
+        if(checked)
+        {
+            m_testWidget->setAttribute(Qt::WA_TranslucentBackground);
+            m_testWidget->show();
+            kdk::BlurManager::setBlurBehindWithStrength(m_testWidget->windowHandle(),true, QRegion(m_testWidget->rect()),400);
+        }
+        else
+            m_testWidget->hide();
+
+    });
+}
+
+Widget::~Widget()
+{
+}
diff -Nru libkysdk-applications-2.5.1.0/kysdk-waylandhelper/test/testBlurManager/widget.h libkysdk-applications-2.5.2.0/kysdk-waylandhelper/test/testBlurManager/widget.h
--- libkysdk-applications-2.5.1.0/kysdk-waylandhelper/test/testBlurManager/widget.h	1970-01-01 08:00:00.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-waylandhelper/test/testBlurManager/widget.h	2024-10-29 15:22:42.000000000 +0800
@@ -0,0 +1,19 @@
+#ifndef WIDGET_H
+#define WIDGET_H
+
+#include <QWidget>
+#include <QPushButton>
+
+class Widget : public QWidget
+{
+    Q_OBJECT
+
+public:
+    Widget(QWidget *parent = nullptr);
+    ~Widget();
+
+private:
+    QPushButton*m_btn;
+    QWidget *m_testWidget;
+};
+#endif // WIDGET_H
diff -Nru libkysdk-applications-2.5.1.0/kysdk-waylandhelper/test/testWindowManager/widget.cpp libkysdk-applications-2.5.2.0/kysdk-waylandhelper/test/testWindowManager/widget.cpp
--- libkysdk-applications-2.5.1.0/kysdk-waylandhelper/test/testWindowManager/widget.cpp	2024-05-16 09:25:54.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-waylandhelper/test/testWindowManager/widget.cpp	2024-10-29 15:22:42.000000000 +0800
@@ -39,6 +39,10 @@
     m_timer = new QTimer(this);
     m_timer->setInterval(2000);
     setWindowTitle("windowtitle");
+    connect(WindowManager::self(),&WindowManager::outputInfoChanged,this,[=](OutputInfo* info){
+            qDebug() << "output info changed!name:"<<info->outputName() <<" usablearea:"<<info->usableArea();
+    });
+
     connect(WindowManager::self(),&WindowManager::iconChanged,this,[=](const WindowId& windowId){
         if(m_lastestWindowId == windowId)
             qDebug() << "icon changed";
@@ -76,8 +80,8 @@
             qDebug() << "titleChanged";
     });
     connect(WindowManager::self(),&WindowManager::geometryChanged,this,[=](const WindowId& windowId){
-        if(m_lastestWindowId == windowId)
-            qDebug() << "geometryChanged";
+//        if(m_lastestWindowId == windowId)
+//            qDebug() << "geometryChanged";
     });
     connect(WindowManager::self(),&WindowManager::demandsAttentionChanged,this,[=](const WindowId& windowId){
         if(m_lastestWindowId == windowId)
@@ -92,7 +96,8 @@
         /*注意:
          * 最新创建的窗体被设置为操作窗体,此demo中每个按钮对应一个接口函数调用,所有接口函数操作的窗口都是该最新创建的窗体
          */
-    qDebug()<<"窗口添加:"<<WindowManager::getWindowTitle(windowId)<<" "<<windowId;
+//    qDebug()<<"窗口添加:"<<WindowManager::getWindowTitle(windowId)<<" "<<windowId;
+//    qDebug()<<"窗口添加:icon:"<<WindowManager::getWindowIcon(windowId);
     if((quint32)getpid() == WindowManager::getPid(windowId))
     {
         m_lastestWindowId = windowId;
@@ -250,11 +255,69 @@
     vLayout2->addLayout(hLayout9);
     box4->setLayout(vLayout2);
 
-    QGroupBox *box5 = new QGroupBox("2.4需求接口",this);
+    QGroupBox *box5 = new QGroupBox("2.5需求接口",this);
     m_getGeometryBtn = new QPushButton("getGeometry",this);
+    m_setGrabKeyboardBtn = new QPushButton("setGrabKeyboard" ,this);
+    m_setSwitcherLayer = new QPushButton("setSwitcherLayer" ,this);
+    m_setHighlightBtn = new QPushButton("setHighlight", this);
+    m_unsetHighlightBtn = new QPushButton("unsetHighlight", this);
+    m_setIconNameBtn = new QPushButton("setIconName",this);
+    m_unsetIconNameBtn = new QPushButton("unsetIconName",this);
+
     QHBoxLayout* layout10 = new QHBoxLayout();
     layout10->addWidget(m_getGeometryBtn);
-    box5->setLayout(layout10);
+    layout10->addWidget(m_setGrabKeyboardBtn);
+    layout10->addWidget(m_setSwitcherLayer);
+    layout10->addWidget(m_setHighlightBtn);
+    layout10->addWidget(m_setIconNameBtn);
+    layout10->addWidget(m_unsetIconNameBtn);
+
+    QVBoxLayout* vLayout3 = new QVBoxLayout();
+    vLayout3->addLayout(layout10);
+
+    m_openUnderCursorBtn = new QPushButton("openUnderCursor",this);
+
+    m_openUnderCursorWithOffsetBtn = new QPushButton("openUnderCursorWithOffset",this);
+    m_xOffset = new QSpinBox(this);
+    m_xOffset->setRange(-1920*2,1920*2);
+    m_xOffset->setValue(10);
+    m_yOffset = new QSpinBox(this);
+    m_yOffset->setValue(10);
+    m_yOffset->setRange(-1080*2,1080*2);
+    QHBoxLayout* layout11 = new QHBoxLayout();
+    layout11->addWidget(m_unsetHighlightBtn);
+    layout11->addWidget(m_openUnderCursorBtn);
+    layout11->addWidget(m_openUnderCursorWithOffsetBtn);
+    layout11->addWidget(m_xOffset);
+    layout11->addWidget(m_yOffset);
+    layout11->addWidget(m_setIconNameBtn);
+    layout11->addWidget(m_unsetIconNameBtn);
+    layout11->addStretch();
+    vLayout3->addLayout(layout11);
+
+    QHBoxLayout* layout12 = new QHBoxLayout();
+    m_getCurrentOutputBtn = new QPushButton(tr("GetCurrentOutput"), this);
+    m_getOutputsInfoBtn = new QPushButton(tr("GetOutputsInfo"), this);
+    layout12->addWidget(m_getCurrentOutputBtn);
+    layout12->addWidget(m_getOutputsInfoBtn);
+    layout12->addStretch();
+    vLayout3->addLayout(layout12);
+
+    QHBoxLayout* layout13 = new QHBoxLayout();
+    m_getWindowIdByTitleBtn = new QPushButton("Search",this);
+    m_getWindowIdByTitleEdit = new QLineEdit(this);
+    m_getWindowIdByTitleEdit->setPlaceholderText("get window id by title");
+    m_getWindowIdByPidBtn = new QPushButton("Search",this);
+    m_getWindowIdByPidEdit = new QLineEdit(this);
+    m_getWindowIdByPidEdit->setPlaceholderText("get window id by pid");
+    layout13->addWidget(m_getWindowIdByTitleEdit);
+    layout13->addWidget(m_getWindowIdByTitleBtn);
+    layout13->addWidget(m_getWindowIdByPidEdit);
+    layout13->addWidget(m_getWindowIdByPidBtn);
+    vLayout3->addLayout(layout13);
+
+    box5->setLayout(vLayout3);
+
 
     mainLayout->addWidget(m_label);
     mainLayout->addLayout(hLayout1);
@@ -272,11 +335,69 @@
     m_subWidget->setWindowTitle("widget");
 
     m_panelWidget = new QWidget();
-    KWindowSystem::setType(m_panelWidget->winId(), NET::Notification);
+    WindowManager::setWindowLayer(m_panelWidget->windowHandle(), WindowLayer::Panel);
 }
 
 void Widget::initConnection()
 {   
+    connect(m_getWindowIdByPidBtn, &QPushButton::clicked,this,[=](){
+        qDebug()<<QString("windows id of %1:").arg(m_getWindowIdByPidEdit->text())
+               <<WindowManager::getWindowIdByPid(m_getWindowIdByPidEdit->text().toInt());
+    });
+
+    connect(m_getWindowIdByTitleBtn, &QPushButton::clicked,this,[=](){
+        qDebug()<<QString("windows id of %1:").arg(m_getWindowIdByTitleEdit->text())
+               <<WindowManager::getWindowIdByTtile(m_getWindowIdByTitleEdit->text());
+    });
+
+    connect(m_getCurrentOutputBtn,&::QPushButton::clicked, this, [=](){
+        qDebug() << "current output name:" << WindowManager::currentOutputName();
+        qDebug() << "current seat name:" << WindowManager::currentSeatName();
+    });
+
+    connect(m_getOutputsInfoBtn,&::QPushButton::clicked, this, [=](){
+        QList<OutputInfo*> infos = WindowManager::outputsInfo();
+        for(auto info : infos)
+        {
+            qDebug() << "output name:" << info->outputName();
+            qDebug() << "output usable area:" << info->usableArea();;
+        }
+    });
+    connect(m_getOutputsInfoBtn,&::QPushButton::clicked, this, [=](){
+        WindowManager::setIconName(m_subWidget->windowHandle(), "kylin-music");
+    });
+    connect(m_setIconNameBtn,&::QPushButton::clicked, this, [=](){
+        WindowManager::setIconName(m_subWidget->windowHandle(), "kylin-music");
+    });
+
+    connect(m_unsetIconNameBtn,&::QPushButton::clicked, this, [=](){
+        WindowManager::setIconName(m_subWidget->windowHandle(), "");
+    });
+
+    connect(m_openUnderCursorWithOffsetBtn,&::QPushButton::clicked, this, [=](){
+        WindowManager::setOpenUnderCursor(m_subWidget->windowHandle(), m_xOffset->value(), m_yOffset->value());
+    });
+
+
+    connect(m_openUnderCursorBtn,&::QPushButton::clicked, this, [=](){
+        WindowManager::setOpenUnderCursor(m_subWidget->windowHandle());
+    });
+
+    connect(m_setHighlightBtn,&::QPushButton::clicked, this, [=](){
+        WindowManager::setHighlight(m_lastestWindowId, true);
+    });
+
+    connect(m_unsetHighlightBtn,&::QPushButton::clicked, this, [=](){
+        WindowManager::setHighlight(m_lastestWindowId, false);
+    });
+
+    connect(m_setSwitcherLayer,&::QPushButton::clicked, this, [=](){
+        WindowManager::setWindowLayer(m_subWidget->windowHandle(), WindowLayer::Switcher);
+    });
+
+    connect(m_setGrabKeyboardBtn,&::QPushButton::clicked, this, [=](){
+        WindowManager::setGrabKeyboard(m_subWidget->windowHandle(),true);
+    });
 
     connect(m_getGeometryBtn,&QPushButton::clicked,this,[=](){
         qDebug()<<WindowManager::windowGeometry(m_lastestWindowId);
@@ -291,7 +412,7 @@
             m_panelWidget->show();
             m_btnPanelWidget->setText("隐藏panel窗口");
         }
-        KWindowSystem::setType(m_panelWidget->winId(), NET::Notification);
+        WindowManager::setWindowLayer(m_panelWidget->windowHandle(), WindowLayer::Panel);
         WindowManager::setPanelTakefocus(m_panelWidget->windowHandle(), m_chbPanel->isChecked());
     });
 
@@ -342,8 +463,8 @@
         }
     });
     connect(WindowManager::self(),&WindowManager::activeWindowChanged,this,[=](const WindowId&wid){
-       qDebug()<<"活动窗口改变:"<<wid;
-       qDebug()<<"当前活动窗口为:"<<WindowManager::currentActiveWindow();
+//       qDebug()<<"活动窗口改变:"<<wid;
+//       qDebug()<<"当前活动窗口为:"<<WindowManager::currentActiveWindow();
     });
 
     connect(WindowManager::self(),&WindowManager::isShowingDesktopChanged,this,[=](){
diff -Nru libkysdk-applications-2.5.1.0/kysdk-waylandhelper/test/testWindowManager/widget.h libkysdk-applications-2.5.2.0/kysdk-waylandhelper/test/testWindowManager/widget.h
--- libkysdk-applications-2.5.1.0/kysdk-waylandhelper/test/testWindowManager/widget.h	2024-05-16 09:25:54.000000000 +0800
+++ libkysdk-applications-2.5.2.0/kysdk-waylandhelper/test/testWindowManager/widget.h	2024-10-29 15:22:42.000000000 +0800
@@ -84,5 +84,21 @@
     QPushButton* m_fullscreenBtn;
     QPushButton* m_processName;
     QPushButton* m_getGeometryBtn;
+    QPushButton* m_setGrabKeyboardBtn;
+    QPushButton* m_setSwitcherLayer;
+    QPushButton* m_setHighlightBtn;
+    QPushButton* m_unsetHighlightBtn;
+    QPushButton* m_openUnderCursorBtn;
+    QPushButton* m_openUnderCursorWithOffsetBtn;
+    QSpinBox *m_xOffset;
+    QSpinBox *m_yOffset;
+    QPushButton* m_setIconNameBtn;
+    QPushButton* m_unsetIconNameBtn;
+    QPushButton* m_getCurrentOutputBtn;
+    QPushButton* m_getOutputsInfoBtn;
+    QPushButton* m_getWindowIdByTitleBtn;
+    QLineEdit* m_getWindowIdByTitleEdit;
+    QPushButton* m_getWindowIdByPidBtn;
+    QLineEdit* m_getWindowIdByPidEdit;
 };
 #endif // WIDGET_H