!80 session电源管理合入锁屏

Merge pull request !80 from liudunfa/openkylin/nile
This commit is contained in:
杨敏 2024-05-24 07:18:40 +00:00 committed by Gitee
commit 3e902001f2
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
39 changed files with 2517 additions and 579 deletions

View File

@ -24,7 +24,7 @@
<translation type="obsolete">使</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1146"/>
<location filename="../src/widgets/authdialog.cpp" line="1179"/>
<source>Retry</source>
<translation></translation>
</message>
@ -53,157 +53,157 @@
<translation type="vanished">%1%2</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1217"/>
<location filename="../src/widgets/authdialog.cpp" line="1248"/>
<source>Please try again in %1 minutes.</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1224"/>
<location filename="../src/widgets/authdialog.cpp" line="1255"/>
<source>Please try again in %1 seconds.</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1231"/>
<location filename="../src/widgets/authdialog.cpp" line="1262"/>
<source>Account locked permanently.</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="629"/>
<location filename="../src/widgets/authdialog.cpp" line="657"/>
<location filename="../src/widgets/authdialog.cpp" line="637"/>
<location filename="../src/widgets/authdialog.cpp" line="680"/>
<source>Verify face recognition or enter password to unlock</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="436"/>
<location filename="../src/widgets/authdialog.cpp" line="434"/>
<source>Guest</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="632"/>
<location filename="../src/widgets/authdialog.cpp" line="642"/>
<source>Press fingerprint or enter password to unlock</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="635"/>
<location filename="../src/widgets/authdialog.cpp" line="647"/>
<source>Verify voiceprint or enter password to unlock</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="638"/>
<location filename="../src/widgets/authdialog.cpp" line="652"/>
<source>Verify finger vein or enter password to unlock</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="641"/>
<location filename="../src/widgets/authdialog.cpp" line="657"/>
<source>Verify iris or enter password to unlock</source>
<translation>iris </translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="916"/>
<location filename="../src/widgets/authdialog.cpp" line="948"/>
<source>Input Password</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="921"/>
<location filename="../src/widgets/authdialog.cpp" line="953"/>
<source>Username</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="991"/>
<location filename="../src/widgets/authdialog.cpp" line="1022"/>
<source>User name input error!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1067"/>
<location filename="../src/widgets/authdialog.cpp" line="1099"/>
<source>login</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1446"/>
<location filename="../src/widgets/authdialog.cpp" line="1595"/>
<location filename="../src/widgets/authdialog.cpp" line="1739"/>
<location filename="../src/widgets/authdialog.cpp" line="1921"/>
<location filename="../src/widgets/authdialog.cpp" line="1482"/>
<location filename="../src/widgets/authdialog.cpp" line="1634"/>
<location filename="../src/widgets/authdialog.cpp" line="1775"/>
<location filename="../src/widgets/authdialog.cpp" line="1952"/>
<source>Failed to verify %1, please enter password to unlock</source>
<translation>%1 </translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1449"/>
<location filename="../src/widgets/authdialog.cpp" line="1598"/>
<location filename="../src/widgets/authdialog.cpp" line="1744"/>
<location filename="../src/widgets/authdialog.cpp" line="1747"/>
<location filename="../src/widgets/authdialog.cpp" line="1924"/>
<location filename="../src/widgets/authdialog.cpp" line="1484"/>
<location filename="../src/widgets/authdialog.cpp" line="1636"/>
<location filename="../src/widgets/authdialog.cpp" line="1779"/>
<location filename="../src/widgets/authdialog.cpp" line="1781"/>
<location filename="../src/widgets/authdialog.cpp" line="1954"/>
<source>Unable to verify %1, please enter password to unlock</source>
<translation>%1 </translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1776"/>
<location filename="../src/widgets/authdialog.cpp" line="1809"/>
<source>Abnormal network</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1784"/>
<location filename="../src/widgets/authdialog.cpp" line="1816"/>
<source>Face recognition waiting time out, please click refresh or enter the password to unlock.</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="2048"/>
<location filename="../src/widgets/authdialog.cpp" line="2077"/>
<source>FingerPrint</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="2050"/>
<location filename="../src/widgets/authdialog.cpp" line="2079"/>
<source>FingerVein</source>
<translation>FingerVein</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="2052"/>
<location filename="../src/widgets/authdialog.cpp" line="2081"/>
<source>Iris</source>
<translation>Iris</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="2054"/>
<location filename="../src/widgets/authdialog.cpp" line="2083"/>
<source>Face</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="2056"/>
<location filename="../src/widgets/authdialog.cpp" line="2085"/>
<source>VoicePrint</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="2058"/>
<location filename="../src/widgets/authdialog.cpp" line="2080"/>
<location filename="../src/widgets/authdialog.cpp" line="2087"/>
<location filename="../src/widgets/authdialog.cpp" line="2110"/>
<source>Ukey</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="2060"/>
<location filename="../src/widgets/authdialog.cpp" line="2082"/>
<location filename="../src/widgets/authdialog.cpp" line="2089"/>
<location filename="../src/widgets/authdialog.cpp" line="2112"/>
<source>QRCode</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="2070"/>
<location filename="../src/widgets/authdialog.cpp" line="2100"/>
<source>fingerprint</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="2072"/>
<location filename="../src/widgets/authdialog.cpp" line="2102"/>
<source>fingervein</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="2074"/>
<location filename="../src/widgets/authdialog.cpp" line="2104"/>
<source>iris</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="2076"/>
<location filename="../src/widgets/authdialog.cpp" line="2106"/>
<source>face</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="2078"/>
<location filename="../src/widgets/authdialog.cpp" line="2108"/>
<source>voiceprint</source>
<translation></translation>
</message>
@ -212,8 +212,8 @@
<translation type="vanished">使</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="768"/>
<location filename="../src/widgets/authdialog.cpp" line="769"/>
<location filename="../src/widgets/authdialog.cpp" line="791"/>
<location filename="../src/widgets/authdialog.cpp" line="792"/>
<source>Password cannot be empty</source>
<translation></translation>
</message>
@ -226,8 +226,8 @@
<translation type="vanished">%1.</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1761"/>
<location filename="../src/widgets/authdialog.cpp" line="1765"/>
<location filename="../src/widgets/authdialog.cpp" line="1794"/>
<location filename="../src/widgets/authdialog.cpp" line="1798"/>
<source>Failed to verify %1, you still have %2 verification opportunities</source>
<translation>%1 %2</translation>
</message>
@ -256,13 +256,13 @@
<translation type="vanished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="994"/>
<location filename="../src/widgets/authdialog.cpp" line="998"/>
<location filename="../src/widgets/authdialog.cpp" line="1025"/>
<location filename="../src/widgets/authdialog.cpp" line="1030"/>
<source>Authentication failure, Please try again</source>
<translation> </translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="644"/>
<location filename="../src/widgets/authdialog.cpp" line="662"/>
<source>Use the bound wechat scanning code or enter the password to unlock</source>
<translation></translation>
</message>
@ -275,13 +275,13 @@
<translation type="vanished">USBཡི</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="913"/>
<location filename="../src/widgets/authdialog.cpp" line="945"/>
<source>Password </source>
<translation> </translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="434"/>
<location filename="../src/widgets/authdialog.cpp" line="1137"/>
<location filename="../src/widgets/authdialog.cpp" line="432"/>
<location filename="../src/widgets/authdialog.cpp" line="1170"/>
<source>Login</source>
<translation></translation>
</message>
@ -406,36 +406,41 @@
<message>
<location filename="../src/widgets/blockwidget.cpp" line="57"/>
<location filename="../src/widgets/blockwidget.cpp" line="124"/>
<location filename="../src/widgets/blockwidget.cpp" line="177"/>
<location filename="../src/widgets/blockwidget.cpp" line="180"/>
<source>Cancel</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="61"/>
<location filename="../src/widgets/blockwidget.cpp" line="125"/>
<location filename="../src/widgets/blockwidget.cpp" line="178"/>
<location filename="../src/widgets/blockwidget.cpp" line="181"/>
<source>Confrim</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="133"/>
<source>The following program is running to prevent the system from reboot!</source>
<translation></translation>
<source>The following programs prevent restarting, you can click "Cancel" and then close these programs.</source>
<translation> "མེད་པར་བཟོ་""</translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="136"/>
<source>The following program is running to prevent the system from shutting down!</source>
<translation></translation>
<source>The following programs prevent the shutdown, you can click "Cancel" and then close these programs.</source>
<translation>"མེད་པར་བཟོ་"</translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="139"/>
<source>The following program is running to prevent the system from suspend!</source>
<translation></translation>
<source>The following programs prevent suspend, you can click "Cancel" and then close these programs.</source>
<translation>"མེད་པར་བཟོ་"</translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="142"/>
<source>The following program is running to prevent the system from hibernate!</source>
<translation></translation>
<source>The following programs prevent hibernation, you can click "Cancel" and then close these programs.</source>
<translation>"མེད་པར་བཟོ་"</translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="145"/>
<source>The following programs prevent you from logging out, you can click "Cancel" and then close them.</source>
<translation> "མེད་པར་བཟོ་""</translation>
</message>
</context>
<context>
@ -1948,17 +1953,17 @@
<context>
<name>LightDMHelper</name>
<message>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="111"/>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="123"/>
<source>failed to start session.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="210"/>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="222"/>
<source>Login</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="219"/>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="231"/>
<source>Guest</source>
<translation type="unfinished"></translation>
</message>
@ -2002,61 +2007,87 @@
<translation type="vanished"></translation>
</message>
<message>
<location filename="../src/widgets/lockwidget.cpp" line="1027"/>
<location filename="../src/widgets/lockwidget.cpp" line="540"/>
<source>system-monitor</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/lockwidget.cpp" line="1090"/>
<source>Restart</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/lockwidget.cpp" line="1091"/>
<location filename="../src/widgets/lockwidget.cpp" line="1094"/>
<source>Multiple users are logged in at the same time.Are you sure you want to %1 this system?</source>
<translation> %1</translation>
</message>
<message>
<location filename="../src/widgets/lockwidget.cpp" line="1091"/>
<source>Reboot</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/lockwidget.cpp" line="1093"/>
<source>PowerOff</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/lockwidget.cpp" line="1094"/>
<source>Shut Down</source>
<translation></translation>
</message>
</context>
<context>
<name>LoginOptionsWidget</name>
<message>
<location filename="../src/widgets/loginoptionswidget.cpp" line="81"/>
<location filename="../src/widgets/loginoptionswidget.cpp" line="104"/>
<location filename="../src/widgets/loginoptionswidget.cpp" line="84"/>
<location filename="../src/widgets/loginoptionswidget.cpp" line="107"/>
<source>Login Options</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/loginoptionswidget.cpp" line="281"/>
<location filename="../src/widgets/loginoptionswidget.cpp" line="288"/>
<source>Password</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/loginoptionswidget.cpp" line="307"/>
<location filename="../src/widgets/loginoptionswidget.cpp" line="314"/>
<source>Other</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/loginoptionswidget.cpp" line="1021"/>
<location filename="../src/widgets/loginoptionswidget.cpp" line="1054"/>
<source>FingerPrint</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/loginoptionswidget.cpp" line="1023"/>
<location filename="../src/widgets/loginoptionswidget.cpp" line="1056"/>
<source>FingerVein</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/loginoptionswidget.cpp" line="1025"/>
<location filename="../src/widgets/loginoptionswidget.cpp" line="1058"/>
<source>Iris</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/loginoptionswidget.cpp" line="1027"/>
<location filename="../src/widgets/loginoptionswidget.cpp" line="1060"/>
<source>Face</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/loginoptionswidget.cpp" line="1029"/>
<location filename="../src/widgets/loginoptionswidget.cpp" line="1062"/>
<source>VoicePrint</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/loginoptionswidget.cpp" line="1031"/>
<location filename="../src/widgets/loginoptionswidget.cpp" line="1064"/>
<source>Ukey</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/loginoptionswidget.cpp" line="1033"/>
<location filename="../src/widgets/loginoptionswidget.cpp" line="1066"/>
<source>QRCode</source>
<translation></translation>
</message>
@ -2065,7 +2096,7 @@
<translation type="vanished"></translation>
</message>
<message>
<location filename="../src/widgets/loginoptionswidget.cpp" line="690"/>
<location filename="../src/widgets/loginoptionswidget.cpp" line="723"/>
<source>Identify device removed!</source>
<translation></translation>
</message>
@ -2260,61 +2291,102 @@
<context>
<name>PowerListWidget</name>
<message>
<location filename="../src/widgets/powerlistwidget.cpp" line="168"/>
<location filename="../src/widgets/powerlistwidget.h" line="81"/>
<location filename="../src/widgets/powerlistwidget.cpp" line="228"/>
<location filename="../src/widgets/powerlistwidget.h" line="105"/>
<source>Hibernate</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/powerlistwidget.cpp" line="169"/>
<location filename="../src/widgets/powerlistwidget.h" line="82"/>
<location filename="../src/widgets/powerlistwidget.cpp" line="229"/>
<location filename="../src/widgets/powerlistwidget.h" line="106"/>
<source>Turn off your computer, but the app stays open. When the computer is turned on, it can be restored to the state you left</source>
<translation> </translation>
</message>
<message>
<location filename="../src/widgets/powerlistwidget.cpp" line="172"/>
<location filename="../src/widgets/powerlistwidget.h" line="94"/>
<location filename="../src/widgets/powerlistwidget.cpp" line="232"/>
<location filename="../src/widgets/powerlistwidget.h" line="118"/>
<source>Suspend</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/powerlistwidget.cpp" line="173"/>
<location filename="../src/widgets/powerlistwidget.h" line="95"/>
<location filename="../src/widgets/powerlistwidget.cpp" line="233"/>
<location filename="../src/widgets/powerlistwidget.h" line="119"/>
<source>The computer stays on, but consumes less power. The app stays open and can quickly wake up and revert to where you left off</source>
<translation> </translation>
</message>
<message>
<location filename="../src/widgets/powerlistwidget.cpp" line="176"/>
<location filename="../src/widgets/powerlistwidget.h" line="107"/>
<location filename="../src/widgets/powerlistwidget.cpp" line="236"/>
<location filename="../src/widgets/powerlistwidget.h" line="167"/>
<source>Restart</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/powerlistwidget.cpp" line="177"/>
<location filename="../src/widgets/powerlistwidget.cpp" line="237"/>
<source>Close all apps, and then restart your computer</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/powerlistwidget.cpp" line="179"/>
<location filename="../src/widgets/powerlistwidget.h" line="119"/>
<location filename="../src/widgets/powerlistwidget.cpp" line="239"/>
<location filename="../src/widgets/powerlistwidget.h" line="191"/>
<source>Shut Down</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/powerlistwidget.cpp" line="243"/>
<location filename="../src/widgets/powerlistwidget.h" line="144"/>
<source>The current user logs out of the system, terminates the session, and returns to the login page</source>
<translation> </translation>
</message>
<message>
<location filename="../src/widgets/powerlistwidget.cpp" line="253"/>
<source>Logout</source>
<translation></translation>
</message>
<message>
<source>Power Off</source>
<translation type="vanished"></translation>
</message>
<message>
<location filename="../src/widgets/powerlistwidget.cpp" line="180"/>
<location filename="../src/widgets/powerlistwidget.h" line="120"/>
<location filename="../src/widgets/powerlistwidget.cpp" line="240"/>
<location filename="../src/widgets/powerlistwidget.h" line="192"/>
<source>Close all apps, and then shut down your computer</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/powerlistwidget.h" line="108"/>
<location filename="../src/widgets/powerlistwidget.cpp" line="245"/>
<location filename="../src/widgets/powerlistwidget.h" line="93"/>
<source>SwitchUser</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/powerlistwidget.cpp" line="247"/>
<location filename="../src/widgets/powerlistwidget.h" line="131"/>
<source>LockScreen</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/powerlistwidget.cpp" line="242"/>
<location filename="../src/widgets/powerlistwidget.h" line="143"/>
<source>Log Out</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/powerlistwidget.cpp" line="249"/>
<location filename="../src/widgets/powerlistwidget.h" line="155"/>
<source>UpgradeThenRestart</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/powerlistwidget.h" line="168"/>
<source>Close all apps, turn off your computer, and then turn your computer back on</source>
<translation type="unfinished"> </translation>
</message>
<message>
<location filename="../src/widgets/powerlistwidget.cpp" line="251"/>
<location filename="../src/widgets/powerlistwidget.h" line="179"/>
<source>UpgradeThenShutdown</source>
<translation></translation>
</message>
</context>
<context>
<name>PowerManager</name>
@ -2394,39 +2466,39 @@
<context>
<name>QObject</name>
<message>
<location filename="../src/lock-command/main.cpp" line="90"/>
<location filename="../src/lock-command/main.cpp" line="100"/>
<source>The screensaver is active.</source>
<translation></translation>
</message>
<message>
<location filename="../src/lock-command/main.cpp" line="92"/>
<location filename="../src/lock-command/main.cpp" line="102"/>
<source>The screensaver is inactive.</source>
<translation></translation>
</message>
<message>
<location filename="../src/common/biodefines.cpp" line="28"/>
<source>FingerPrint</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<location filename="../src/common/biodefines.cpp" line="30"/>
<source>FingerVein</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<location filename="../src/common/biodefines.cpp" line="32"/>
<source>Iris</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<location filename="../src/common/biodefines.cpp" line="34"/>
<source>Face</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<location filename="../src/common/biodefines.cpp" line="36"/>
<source>VoicePrint</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<location filename="../src/common/biodefines.cpp" line="38"/>
@ -2436,7 +2508,7 @@
<message>
<location filename="../src/common/biodefines.cpp" line="40"/>
<source>QRCode</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
</context>
<context>
@ -2599,7 +2671,7 @@
<location filename="../src/widgets/userlistwidget.cpp" line="65"/>
<location filename="../src/widgets/userlistwidget.cpp" line="119"/>
<source>Login</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/userlistwidget.cpp" line="67"/>
@ -2677,6 +2749,15 @@
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>action</name>
<message>
<location filename="../src/lock-dialog/lockdialogmodel.cpp" line="67"/>
<location filename="../src/lock-dialog/lockdialogmodel.cpp" line="70"/>
<source>which block type</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>delay</name>
<message>
@ -2727,6 +2808,24 @@
<source>show blank and delay to lock,param:idle/lid/lowpower</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/lock-command/main.cpp" line="60"/>
<location filename="../src/lock-dialog/lockdialogmodel.cpp" line="64"/>
<source>show the session tools</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/lock-command/main.cpp" line="62"/>
<location filename="../src/lock-dialog/lockdialogmodel.cpp" line="66"/>
<source>show the app block window</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/lock-command/main.cpp" line="64"/>
<location filename="../src/lock-dialog/lockdialogmodel.cpp" line="69"/>
<source>show the multiUsers block window</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/lock-dialog/lockdialogmodel.cpp" line="40"/>
<source>Dialog for the ukui ScreenSaver.</source>

View File

@ -24,7 +24,7 @@
<translation type="obsolete">使</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1146"/>
<location filename="../src/widgets/authdialog.cpp" line="1179"/>
<source>Retry</source>
<translation> </translation>
</message>
@ -53,157 +53,157 @@
<translation type="vanished">%1%2</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1217"/>
<location filename="../src/widgets/authdialog.cpp" line="1248"/>
<source>Please try again in %1 minutes.</source>
<translation>%1 </translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1224"/>
<location filename="../src/widgets/authdialog.cpp" line="1255"/>
<source>Please try again in %1 seconds.</source>
<translation>%1 </translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1231"/>
<location filename="../src/widgets/authdialog.cpp" line="1262"/>
<source>Account locked permanently.</source>
<translation> </translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="629"/>
<location filename="../src/widgets/authdialog.cpp" line="657"/>
<location filename="../src/widgets/authdialog.cpp" line="637"/>
<location filename="../src/widgets/authdialog.cpp" line="680"/>
<source>Verify face recognition or enter password to unlock</source>
<translation> </translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="436"/>
<location filename="../src/widgets/authdialog.cpp" line="434"/>
<source>Guest</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="632"/>
<location filename="../src/widgets/authdialog.cpp" line="642"/>
<source>Press fingerprint or enter password to unlock</source>
<translation> </translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="635"/>
<location filename="../src/widgets/authdialog.cpp" line="647"/>
<source>Verify voiceprint or enter password to unlock</source>
<translation> </translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="638"/>
<location filename="../src/widgets/authdialog.cpp" line="652"/>
<source>Verify finger vein or enter password to unlock</source>
<translation> </translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="641"/>
<location filename="../src/widgets/authdialog.cpp" line="657"/>
<source>Verify iris or enter password to unlock</source>
<translation> </translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="916"/>
<location filename="../src/widgets/authdialog.cpp" line="948"/>
<source>Input Password</source>
<translation> </translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="921"/>
<location filename="../src/widgets/authdialog.cpp" line="953"/>
<source>Username</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="991"/>
<location filename="../src/widgets/authdialog.cpp" line="1022"/>
<source>User name input error!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1067"/>
<location filename="../src/widgets/authdialog.cpp" line="1099"/>
<source>login</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1446"/>
<location filename="../src/widgets/authdialog.cpp" line="1595"/>
<location filename="../src/widgets/authdialog.cpp" line="1739"/>
<location filename="../src/widgets/authdialog.cpp" line="1921"/>
<location filename="../src/widgets/authdialog.cpp" line="1482"/>
<location filename="../src/widgets/authdialog.cpp" line="1634"/>
<location filename="../src/widgets/authdialog.cpp" line="1775"/>
<location filename="../src/widgets/authdialog.cpp" line="1952"/>
<source>Failed to verify %1, please enter password to unlock</source>
<translation>%1 </translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1449"/>
<location filename="../src/widgets/authdialog.cpp" line="1598"/>
<location filename="../src/widgets/authdialog.cpp" line="1744"/>
<location filename="../src/widgets/authdialog.cpp" line="1747"/>
<location filename="../src/widgets/authdialog.cpp" line="1924"/>
<location filename="../src/widgets/authdialog.cpp" line="1484"/>
<location filename="../src/widgets/authdialog.cpp" line="1636"/>
<location filename="../src/widgets/authdialog.cpp" line="1779"/>
<location filename="../src/widgets/authdialog.cpp" line="1781"/>
<location filename="../src/widgets/authdialog.cpp" line="1954"/>
<source>Unable to verify %1, please enter password to unlock</source>
<translation>%1/ </translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1776"/>
<location filename="../src/widgets/authdialog.cpp" line="1809"/>
<source>Abnormal network</source>
<translation> </translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1784"/>
<location filename="../src/widgets/authdialog.cpp" line="1816"/>
<source>Face recognition waiting time out, please click refresh or enter the password to unlock.</source>
<translation> </translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="2048"/>
<location filename="../src/widgets/authdialog.cpp" line="2077"/>
<source>FingerPrint</source>
<translation> </translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="2050"/>
<location filename="../src/widgets/authdialog.cpp" line="2079"/>
<source>FingerVein</source>
<translation> </translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="2052"/>
<location filename="../src/widgets/authdialog.cpp" line="2081"/>
<source>Iris</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="2054"/>
<location filename="../src/widgets/authdialog.cpp" line="2083"/>
<source>Face</source>
<translation> </translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="2056"/>
<location filename="../src/widgets/authdialog.cpp" line="2085"/>
<source>VoicePrint</source>
<translation> </translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="2058"/>
<location filename="../src/widgets/authdialog.cpp" line="2080"/>
<location filename="../src/widgets/authdialog.cpp" line="2087"/>
<location filename="../src/widgets/authdialog.cpp" line="2110"/>
<source>Ukey</source>
<translation> </translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="2060"/>
<location filename="../src/widgets/authdialog.cpp" line="2082"/>
<location filename="../src/widgets/authdialog.cpp" line="2089"/>
<location filename="../src/widgets/authdialog.cpp" line="2112"/>
<source>QRCode</source>
<translation> </translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="2070"/>
<location filename="../src/widgets/authdialog.cpp" line="2100"/>
<source>fingerprint</source>
<translation> </translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="2072"/>
<location filename="../src/widgets/authdialog.cpp" line="2102"/>
<source>fingervein</source>
<translation> </translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="2074"/>
<location filename="../src/widgets/authdialog.cpp" line="2104"/>
<source>iris</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="2076"/>
<location filename="../src/widgets/authdialog.cpp" line="2106"/>
<source>face</source>
<translation> </translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="2078"/>
<location filename="../src/widgets/authdialog.cpp" line="2108"/>
<source>voiceprint</source>
<translation> </translation>
</message>
@ -212,8 +212,8 @@
<translation type="vanished">使</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="768"/>
<location filename="../src/widgets/authdialog.cpp" line="769"/>
<location filename="../src/widgets/authdialog.cpp" line="791"/>
<location filename="../src/widgets/authdialog.cpp" line="792"/>
<source>Password cannot be empty</source>
<translation> </translation>
</message>
@ -226,8 +226,8 @@
<translation type="vanished">%1.</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1761"/>
<location filename="../src/widgets/authdialog.cpp" line="1765"/>
<location filename="../src/widgets/authdialog.cpp" line="1794"/>
<location filename="../src/widgets/authdialog.cpp" line="1798"/>
<source>Failed to verify %1, you still have %2 verification opportunities</source>
<translation>%1/ %2 </translation>
</message>
@ -256,13 +256,13 @@
<translation type="vanished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="994"/>
<location filename="../src/widgets/authdialog.cpp" line="998"/>
<location filename="../src/widgets/authdialog.cpp" line="1025"/>
<location filename="../src/widgets/authdialog.cpp" line="1030"/>
<source>Authentication failure, Please try again</source>
<translation> </translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="644"/>
<location filename="../src/widgets/authdialog.cpp" line="662"/>
<source>Use the bound wechat scanning code or enter the password to unlock</source>
<translation> </translation>
</message>
@ -275,13 +275,13 @@
<translation type="vanished"> USB </translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="913"/>
<location filename="../src/widgets/authdialog.cpp" line="945"/>
<source>Password </source>
<translation> </translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="434"/>
<location filename="../src/widgets/authdialog.cpp" line="1137"/>
<location filename="../src/widgets/authdialog.cpp" line="432"/>
<location filename="../src/widgets/authdialog.cpp" line="1170"/>
<source>Login</source>
<translation> </translation>
</message>
@ -406,36 +406,41 @@
<message>
<location filename="../src/widgets/blockwidget.cpp" line="57"/>
<location filename="../src/widgets/blockwidget.cpp" line="124"/>
<location filename="../src/widgets/blockwidget.cpp" line="177"/>
<location filename="../src/widgets/blockwidget.cpp" line="180"/>
<source>Cancel</source>
<translation> </translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="61"/>
<location filename="../src/widgets/blockwidget.cpp" line="125"/>
<location filename="../src/widgets/blockwidget.cpp" line="178"/>
<location filename="../src/widgets/blockwidget.cpp" line="181"/>
<source>Confrim</source>
<translation> </translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="133"/>
<source>The following program is running to prevent the system from reboot!</source>
<translation> !</translation>
<source>The following programs prevent restarting, you can click "Cancel" and then close these programs.</source>
<translation> </translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="136"/>
<source>The following program is running to prevent the system from shutting down!</source>
<translation> !</translation>
<source>The following programs prevent the shutdown, you can click "Cancel" and then close these programs.</source>
<translation> </translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="139"/>
<source>The following program is running to prevent the system from suspend!</source>
<translation> !</translation>
<source>The following programs prevent suspend, you can click "Cancel" and then close these programs.</source>
<translation> </translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="142"/>
<source>The following program is running to prevent the system from hibernate!</source>
<translation> !</translation>
<source>The following programs prevent hibernation, you can click "Cancel" and then close these programs.</source>
<translation> </translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="145"/>
<source>The following programs prevent you from logging out, you can click "Cancel" and then close them.</source>
<translation> </translation>
</message>
</context>
<context>
@ -1951,17 +1956,17 @@
<context>
<name>LightDMHelper</name>
<message>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="111"/>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="123"/>
<source>failed to start session.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="210"/>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="222"/>
<source>Login</source>
<translation type="unfinished"> </translation>
</message>
<message>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="219"/>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="231"/>
<source>Guest</source>
<translation type="unfinished"></translation>
</message>
@ -2005,61 +2010,87 @@
<translation type="vanished"> </translation>
</message>
<message>
<location filename="../src/widgets/lockwidget.cpp" line="1027"/>
<location filename="../src/widgets/lockwidget.cpp" line="540"/>
<source>system-monitor</source>
<translation> </translation>
</message>
<message>
<location filename="../src/widgets/lockwidget.cpp" line="1090"/>
<source>Restart</source>
<translation> </translation>
</message>
<message>
<location filename="../src/widgets/lockwidget.cpp" line="1091"/>
<location filename="../src/widgets/lockwidget.cpp" line="1094"/>
<source>Multiple users are logged in at the same time.Are you sure you want to %1 this system?</source>
<translation> %1 ?</translation>
</message>
<message>
<location filename="../src/widgets/lockwidget.cpp" line="1091"/>
<source>Reboot</source>
<translation> </translation>
</message>
<message>
<location filename="../src/widgets/lockwidget.cpp" line="1093"/>
<source>PowerOff</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/lockwidget.cpp" line="1094"/>
<source>Shut Down</source>
<translation></translation>
</message>
</context>
<context>
<name>LoginOptionsWidget</name>
<message>
<location filename="../src/widgets/loginoptionswidget.cpp" line="81"/>
<location filename="../src/widgets/loginoptionswidget.cpp" line="104"/>
<location filename="../src/widgets/loginoptionswidget.cpp" line="84"/>
<location filename="../src/widgets/loginoptionswidget.cpp" line="107"/>
<source>Login Options</source>
<translation> </translation>
</message>
<message>
<location filename="../src/widgets/loginoptionswidget.cpp" line="281"/>
<location filename="../src/widgets/loginoptionswidget.cpp" line="288"/>
<source>Password</source>
<translation> </translation>
</message>
<message>
<location filename="../src/widgets/loginoptionswidget.cpp" line="307"/>
<location filename="../src/widgets/loginoptionswidget.cpp" line="314"/>
<source>Other</source>
<translation> </translation>
</message>
<message>
<location filename="../src/widgets/loginoptionswidget.cpp" line="1021"/>
<location filename="../src/widgets/loginoptionswidget.cpp" line="1054"/>
<source>FingerPrint</source>
<translation> </translation>
</message>
<message>
<location filename="../src/widgets/loginoptionswidget.cpp" line="1023"/>
<location filename="../src/widgets/loginoptionswidget.cpp" line="1056"/>
<source>FingerVein</source>
<translation> </translation>
</message>
<message>
<location filename="../src/widgets/loginoptionswidget.cpp" line="1025"/>
<location filename="../src/widgets/loginoptionswidget.cpp" line="1058"/>
<source>Iris</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/loginoptionswidget.cpp" line="1027"/>
<location filename="../src/widgets/loginoptionswidget.cpp" line="1060"/>
<source>Face</source>
<translation> </translation>
</message>
<message>
<location filename="../src/widgets/loginoptionswidget.cpp" line="1029"/>
<location filename="../src/widgets/loginoptionswidget.cpp" line="1062"/>
<source>VoicePrint</source>
<translation> </translation>
</message>
<message>
<location filename="../src/widgets/loginoptionswidget.cpp" line="1031"/>
<location filename="../src/widgets/loginoptionswidget.cpp" line="1064"/>
<source>Ukey</source>
<translation> </translation>
</message>
<message>
<location filename="../src/widgets/loginoptionswidget.cpp" line="1033"/>
<location filename="../src/widgets/loginoptionswidget.cpp" line="1066"/>
<source>QRCode</source>
<translation> </translation>
</message>
@ -2068,7 +2099,7 @@
<translation type="vanished"></translation>
</message>
<message>
<location filename="../src/widgets/loginoptionswidget.cpp" line="690"/>
<location filename="../src/widgets/loginoptionswidget.cpp" line="723"/>
<source>Identify device removed!</source>
<translation> !</translation>
</message>
@ -2263,61 +2294,102 @@
<context>
<name>PowerListWidget</name>
<message>
<location filename="../src/widgets/powerlistwidget.cpp" line="168"/>
<location filename="../src/widgets/powerlistwidget.h" line="81"/>
<location filename="../src/widgets/powerlistwidget.cpp" line="228"/>
<location filename="../src/widgets/powerlistwidget.h" line="105"/>
<source>Hibernate</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/powerlistwidget.cpp" line="169"/>
<location filename="../src/widgets/powerlistwidget.h" line="82"/>
<location filename="../src/widgets/powerlistwidget.cpp" line="229"/>
<location filename="../src/widgets/powerlistwidget.h" line="106"/>
<source>Turn off your computer, but the app stays open. When the computer is turned on, it can be restored to the state you left</source>
<translation> </translation>
</message>
<message>
<location filename="../src/widgets/powerlistwidget.cpp" line="172"/>
<location filename="../src/widgets/powerlistwidget.h" line="94"/>
<location filename="../src/widgets/powerlistwidget.cpp" line="232"/>
<location filename="../src/widgets/powerlistwidget.h" line="118"/>
<source>Suspend</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/powerlistwidget.cpp" line="173"/>
<location filename="../src/widgets/powerlistwidget.h" line="95"/>
<location filename="../src/widgets/powerlistwidget.cpp" line="233"/>
<location filename="../src/widgets/powerlistwidget.h" line="119"/>
<source>The computer stays on, but consumes less power. The app stays open and can quickly wake up and revert to where you left off</source>
<translation> </translation>
</message>
<message>
<location filename="../src/widgets/powerlistwidget.cpp" line="176"/>
<location filename="../src/widgets/powerlistwidget.h" line="107"/>
<location filename="../src/widgets/powerlistwidget.cpp" line="236"/>
<location filename="../src/widgets/powerlistwidget.h" line="167"/>
<source>Restart</source>
<translation> </translation>
</message>
<message>
<location filename="../src/widgets/powerlistwidget.cpp" line="177"/>
<location filename="../src/widgets/powerlistwidget.cpp" line="237"/>
<source>Close all apps, and then restart your computer</source>
<translation> </translation>
</message>
<message>
<location filename="../src/widgets/powerlistwidget.cpp" line="179"/>
<location filename="../src/widgets/powerlistwidget.h" line="119"/>
<location filename="../src/widgets/powerlistwidget.cpp" line="239"/>
<location filename="../src/widgets/powerlistwidget.h" line="191"/>
<source>Shut Down</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/powerlistwidget.cpp" line="243"/>
<location filename="../src/widgets/powerlistwidget.h" line="144"/>
<source>The current user logs out of the system, terminates the session, and returns to the login page</source>
<translation> </translation>
</message>
<message>
<location filename="../src/widgets/powerlistwidget.cpp" line="253"/>
<source>Logout</source>
<translation> </translation>
</message>
<message>
<source>Power Off</source>
<translation type="vanished"></translation>
</message>
<message>
<location filename="../src/widgets/powerlistwidget.cpp" line="180"/>
<location filename="../src/widgets/powerlistwidget.h" line="120"/>
<location filename="../src/widgets/powerlistwidget.cpp" line="240"/>
<location filename="../src/widgets/powerlistwidget.h" line="192"/>
<source>Close all apps, and then shut down your computer</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/powerlistwidget.h" line="108"/>
<location filename="../src/widgets/powerlistwidget.cpp" line="245"/>
<location filename="../src/widgets/powerlistwidget.h" line="93"/>
<source>SwitchUser</source>
<translation> </translation>
</message>
<message>
<location filename="../src/widgets/powerlistwidget.cpp" line="247"/>
<location filename="../src/widgets/powerlistwidget.h" line="131"/>
<source>LockScreen</source>
<translation> </translation>
</message>
<message>
<location filename="../src/widgets/powerlistwidget.cpp" line="242"/>
<location filename="../src/widgets/powerlistwidget.h" line="143"/>
<source>Log Out</source>
<translation> </translation>
</message>
<message>
<location filename="../src/widgets/powerlistwidget.cpp" line="249"/>
<location filename="../src/widgets/powerlistwidget.h" line="155"/>
<source>UpgradeThenRestart</source>
<translation> </translation>
</message>
<message>
<location filename="../src/widgets/powerlistwidget.h" line="168"/>
<source>Close all apps, turn off your computer, and then turn your computer back on</source>
<translation> </translation>
</message>
<message>
<location filename="../src/widgets/powerlistwidget.cpp" line="251"/>
<location filename="../src/widgets/powerlistwidget.h" line="179"/>
<source>UpgradeThenShutdown</source>
<translation> </translation>
</message>
</context>
<context>
<name>PowerManager</name>
@ -2397,39 +2469,39 @@
<context>
<name>QObject</name>
<message>
<location filename="../src/lock-command/main.cpp" line="90"/>
<location filename="../src/lock-command/main.cpp" line="100"/>
<source>The screensaver is active.</source>
<translation> </translation>
</message>
<message>
<location filename="../src/lock-command/main.cpp" line="92"/>
<location filename="../src/lock-command/main.cpp" line="102"/>
<source>The screensaver is inactive.</source>
<translation> </translation>
</message>
<message>
<location filename="../src/common/biodefines.cpp" line="28"/>
<source>FingerPrint</source>
<translation type="unfinished"></translation>
<translation> </translation>
</message>
<message>
<location filename="../src/common/biodefines.cpp" line="30"/>
<source>FingerVein</source>
<translation type="unfinished"></translation>
<translation> </translation>
</message>
<message>
<location filename="../src/common/biodefines.cpp" line="32"/>
<source>Iris</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<location filename="../src/common/biodefines.cpp" line="34"/>
<source>Face</source>
<translation type="unfinished"></translation>
<translation> </translation>
</message>
<message>
<location filename="../src/common/biodefines.cpp" line="36"/>
<source>VoicePrint</source>
<translation type="unfinished"></translation>
<translation> </translation>
</message>
<message>
<location filename="../src/common/biodefines.cpp" line="38"/>
@ -2439,7 +2511,7 @@
<message>
<location filename="../src/common/biodefines.cpp" line="40"/>
<source>QRCode</source>
<translation type="unfinished"> </translation>
<translation> </translation>
</message>
</context>
<context>
@ -2680,6 +2752,15 @@
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>action</name>
<message>
<location filename="../src/lock-dialog/lockdialogmodel.cpp" line="67"/>
<location filename="../src/lock-dialog/lockdialogmodel.cpp" line="70"/>
<source>which block type</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>delay</name>
<message>
@ -2730,6 +2811,24 @@
<source>show blank and delay to lock,param:idle/lid/lowpower</source>
<translation> / / </translation>
</message>
<message>
<location filename="../src/lock-command/main.cpp" line="60"/>
<location filename="../src/lock-dialog/lockdialogmodel.cpp" line="64"/>
<source>show the session tools</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/lock-command/main.cpp" line="62"/>
<location filename="../src/lock-dialog/lockdialogmodel.cpp" line="66"/>
<source>show the app block window</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/lock-command/main.cpp" line="64"/>
<location filename="../src/lock-dialog/lockdialogmodel.cpp" line="69"/>
<source>show the multiUsers block window</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/lock-dialog/lockdialogmodel.cpp" line="40"/>
<source>Dialog for the ukui ScreenSaver.</source>

View File

@ -24,7 +24,7 @@
<translation type="obsolete">使</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1146"/>
<location filename="../src/widgets/authdialog.cpp" line="1179"/>
<source>Retry</source>
<translation></translation>
</message>
@ -53,157 +53,157 @@
<translation type="vanished">%1%2</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1217"/>
<location filename="../src/widgets/authdialog.cpp" line="1248"/>
<source>Please try again in %1 minutes.</source>
<translation>%1</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1224"/>
<location filename="../src/widgets/authdialog.cpp" line="1255"/>
<source>Please try again in %1 seconds.</source>
<translation>%1</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1231"/>
<location filename="../src/widgets/authdialog.cpp" line="1262"/>
<source>Account locked permanently.</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="629"/>
<location filename="../src/widgets/authdialog.cpp" line="657"/>
<location filename="../src/widgets/authdialog.cpp" line="637"/>
<location filename="../src/widgets/authdialog.cpp" line="680"/>
<source>Verify face recognition or enter password to unlock</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="436"/>
<location filename="../src/widgets/authdialog.cpp" line="434"/>
<source>Guest</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="632"/>
<location filename="../src/widgets/authdialog.cpp" line="642"/>
<source>Press fingerprint or enter password to unlock</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="635"/>
<location filename="../src/widgets/authdialog.cpp" line="647"/>
<source>Verify voiceprint or enter password to unlock</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="638"/>
<location filename="../src/widgets/authdialog.cpp" line="652"/>
<source>Verify finger vein or enter password to unlock</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="641"/>
<location filename="../src/widgets/authdialog.cpp" line="657"/>
<source>Verify iris or enter password to unlock</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="916"/>
<location filename="../src/widgets/authdialog.cpp" line="948"/>
<source>Input Password</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="921"/>
<location filename="../src/widgets/authdialog.cpp" line="953"/>
<source>Username</source>
<translation>:</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="991"/>
<location filename="../src/widgets/authdialog.cpp" line="1022"/>
<source>User name input error!</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1067"/>
<location filename="../src/widgets/authdialog.cpp" line="1099"/>
<source>login</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1446"/>
<location filename="../src/widgets/authdialog.cpp" line="1595"/>
<location filename="../src/widgets/authdialog.cpp" line="1739"/>
<location filename="../src/widgets/authdialog.cpp" line="1921"/>
<location filename="../src/widgets/authdialog.cpp" line="1482"/>
<location filename="../src/widgets/authdialog.cpp" line="1634"/>
<location filename="../src/widgets/authdialog.cpp" line="1775"/>
<location filename="../src/widgets/authdialog.cpp" line="1952"/>
<source>Failed to verify %1, please enter password to unlock</source>
<translation>%1</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1449"/>
<location filename="../src/widgets/authdialog.cpp" line="1598"/>
<location filename="../src/widgets/authdialog.cpp" line="1744"/>
<location filename="../src/widgets/authdialog.cpp" line="1747"/>
<location filename="../src/widgets/authdialog.cpp" line="1924"/>
<location filename="../src/widgets/authdialog.cpp" line="1484"/>
<location filename="../src/widgets/authdialog.cpp" line="1636"/>
<location filename="../src/widgets/authdialog.cpp" line="1779"/>
<location filename="../src/widgets/authdialog.cpp" line="1781"/>
<location filename="../src/widgets/authdialog.cpp" line="1954"/>
<source>Unable to verify %1, please enter password to unlock</source>
<translation>%1</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1776"/>
<location filename="../src/widgets/authdialog.cpp" line="1809"/>
<source>Abnormal network</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1784"/>
<location filename="../src/widgets/authdialog.cpp" line="1816"/>
<source>Face recognition waiting time out, please click refresh or enter the password to unlock.</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="2048"/>
<location filename="../src/widgets/authdialog.cpp" line="2077"/>
<source>FingerPrint</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="2050"/>
<location filename="../src/widgets/authdialog.cpp" line="2079"/>
<source>FingerVein</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="2052"/>
<location filename="../src/widgets/authdialog.cpp" line="2081"/>
<source>Iris</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="2054"/>
<location filename="../src/widgets/authdialog.cpp" line="2083"/>
<source>Face</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="2056"/>
<location filename="../src/widgets/authdialog.cpp" line="2085"/>
<source>VoicePrint</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="2058"/>
<location filename="../src/widgets/authdialog.cpp" line="2080"/>
<location filename="../src/widgets/authdialog.cpp" line="2087"/>
<location filename="../src/widgets/authdialog.cpp" line="2110"/>
<source>Ukey</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="2060"/>
<location filename="../src/widgets/authdialog.cpp" line="2082"/>
<location filename="../src/widgets/authdialog.cpp" line="2089"/>
<location filename="../src/widgets/authdialog.cpp" line="2112"/>
<source>QRCode</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="2070"/>
<location filename="../src/widgets/authdialog.cpp" line="2100"/>
<source>fingerprint</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="2072"/>
<location filename="../src/widgets/authdialog.cpp" line="2102"/>
<source>fingervein</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="2074"/>
<location filename="../src/widgets/authdialog.cpp" line="2104"/>
<source>iris</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="2076"/>
<location filename="../src/widgets/authdialog.cpp" line="2106"/>
<source>face</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="2078"/>
<location filename="../src/widgets/authdialog.cpp" line="2108"/>
<source>voiceprint</source>
<translation></translation>
</message>
@ -212,8 +212,8 @@
<translation type="vanished">使</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="768"/>
<location filename="../src/widgets/authdialog.cpp" line="769"/>
<location filename="../src/widgets/authdialog.cpp" line="791"/>
<location filename="../src/widgets/authdialog.cpp" line="792"/>
<source>Password cannot be empty</source>
<translation></translation>
</message>
@ -226,8 +226,8 @@
<translation type="vanished">%1.</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1761"/>
<location filename="../src/widgets/authdialog.cpp" line="1765"/>
<location filename="../src/widgets/authdialog.cpp" line="1794"/>
<location filename="../src/widgets/authdialog.cpp" line="1798"/>
<source>Failed to verify %1, you still have %2 verification opportunities</source>
<translation>%1%2</translation>
</message>
@ -256,13 +256,13 @@
<translation type="vanished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="994"/>
<location filename="../src/widgets/authdialog.cpp" line="998"/>
<location filename="../src/widgets/authdialog.cpp" line="1025"/>
<location filename="../src/widgets/authdialog.cpp" line="1030"/>
<source>Authentication failure, Please try again</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="644"/>
<location filename="../src/widgets/authdialog.cpp" line="662"/>
<source>Use the bound wechat scanning code or enter the password to unlock</source>
<translation>使</translation>
</message>
@ -275,13 +275,13 @@
<translation type="vanished">USB端口</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="913"/>
<location filename="../src/widgets/authdialog.cpp" line="945"/>
<source>Password </source>
<translation> </translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="434"/>
<location filename="../src/widgets/authdialog.cpp" line="1137"/>
<location filename="../src/widgets/authdialog.cpp" line="432"/>
<location filename="../src/widgets/authdialog.cpp" line="1170"/>
<source>Login</source>
<translation></translation>
</message>
@ -406,36 +406,41 @@
<message>
<location filename="../src/widgets/blockwidget.cpp" line="57"/>
<location filename="../src/widgets/blockwidget.cpp" line="124"/>
<location filename="../src/widgets/blockwidget.cpp" line="177"/>
<location filename="../src/widgets/blockwidget.cpp" line="180"/>
<source>Cancel</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="61"/>
<location filename="../src/widgets/blockwidget.cpp" line="125"/>
<location filename="../src/widgets/blockwidget.cpp" line="178"/>
<location filename="../src/widgets/blockwidget.cpp" line="181"/>
<source>Confrim</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="133"/>
<source>The following program is running to prevent the system from reboot!</source>
<translation></translation>
<source>The following programs prevent restarting, you can click "Cancel" and then close these programs.</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="136"/>
<source>The following program is running to prevent the system from shutting down!</source>
<translation></translation>
<source>The following programs prevent the shutdown, you can click "Cancel" and then close these programs.</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="139"/>
<source>The following program is running to prevent the system from suspend!</source>
<translation></translation>
<source>The following programs prevent suspend, you can click "Cancel" and then close these programs.</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="142"/>
<source>The following program is running to prevent the system from hibernate!</source>
<translation></translation>
<source>The following programs prevent hibernation, you can click "Cancel" and then close these programs.</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="145"/>
<source>The following programs prevent you from logging out, you can click "Cancel" and then close them.</source>
<translation></translation>
</message>
</context>
<context>
@ -1928,17 +1933,17 @@
<context>
<name>LightDMHelper</name>
<message>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="111"/>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="123"/>
<source>failed to start session.</source>
<translation></translation>
</message>
<message>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="210"/>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="222"/>
<source>Login</source>
<translation></translation>
</message>
<message>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="219"/>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="231"/>
<source>Guest</source>
<translation></translation>
</message>
@ -1982,61 +1987,87 @@
<translation type="vanished">线</translation>
</message>
<message>
<location filename="../src/widgets/lockwidget.cpp" line="1027"/>
<location filename="../src/widgets/lockwidget.cpp" line="540"/>
<source>system-monitor</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/lockwidget.cpp" line="1090"/>
<source>Restart</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/lockwidget.cpp" line="1091"/>
<location filename="../src/widgets/lockwidget.cpp" line="1094"/>
<source>Multiple users are logged in at the same time.Are you sure you want to %1 this system?</source>
<translation>%1?</translation>
</message>
<message>
<location filename="../src/widgets/lockwidget.cpp" line="1091"/>
<source>Reboot</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/lockwidget.cpp" line="1093"/>
<source>PowerOff</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/lockwidget.cpp" line="1094"/>
<source>Shut Down</source>
<translation></translation>
</message>
</context>
<context>
<name>LoginOptionsWidget</name>
<message>
<location filename="../src/widgets/loginoptionswidget.cpp" line="81"/>
<location filename="../src/widgets/loginoptionswidget.cpp" line="104"/>
<location filename="../src/widgets/loginoptionswidget.cpp" line="84"/>
<location filename="../src/widgets/loginoptionswidget.cpp" line="107"/>
<source>Login Options</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/loginoptionswidget.cpp" line="281"/>
<location filename="../src/widgets/loginoptionswidget.cpp" line="288"/>
<source>Password</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/loginoptionswidget.cpp" line="307"/>
<location filename="../src/widgets/loginoptionswidget.cpp" line="314"/>
<source>Other</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/loginoptionswidget.cpp" line="1021"/>
<location filename="../src/widgets/loginoptionswidget.cpp" line="1054"/>
<source>FingerPrint</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/loginoptionswidget.cpp" line="1023"/>
<location filename="../src/widgets/loginoptionswidget.cpp" line="1056"/>
<source>FingerVein</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/loginoptionswidget.cpp" line="1025"/>
<location filename="../src/widgets/loginoptionswidget.cpp" line="1058"/>
<source>Iris</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/loginoptionswidget.cpp" line="1027"/>
<location filename="../src/widgets/loginoptionswidget.cpp" line="1060"/>
<source>Face</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/loginoptionswidget.cpp" line="1029"/>
<location filename="../src/widgets/loginoptionswidget.cpp" line="1062"/>
<source>VoicePrint</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/loginoptionswidget.cpp" line="1031"/>
<location filename="../src/widgets/loginoptionswidget.cpp" line="1064"/>
<source>Ukey</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/loginoptionswidget.cpp" line="1033"/>
<location filename="../src/widgets/loginoptionswidget.cpp" line="1066"/>
<source>QRCode</source>
<translation></translation>
</message>
@ -2045,7 +2076,7 @@
<translation type="vanished"></translation>
</message>
<message>
<location filename="../src/widgets/loginoptionswidget.cpp" line="690"/>
<location filename="../src/widgets/loginoptionswidget.cpp" line="723"/>
<source>Identify device removed!</source>
<translation>!</translation>
</message>
@ -2236,61 +2267,102 @@
<context>
<name>PowerListWidget</name>
<message>
<location filename="../src/widgets/powerlistwidget.cpp" line="168"/>
<location filename="../src/widgets/powerlistwidget.h" line="81"/>
<location filename="../src/widgets/powerlistwidget.cpp" line="228"/>
<location filename="../src/widgets/powerlistwidget.h" line="105"/>
<source>Hibernate</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/powerlistwidget.cpp" line="169"/>
<location filename="../src/widgets/powerlistwidget.h" line="82"/>
<location filename="../src/widgets/powerlistwidget.cpp" line="229"/>
<location filename="../src/widgets/powerlistwidget.h" line="106"/>
<source>Turn off your computer, but the app stays open. When the computer is turned on, it can be restored to the state you left</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/powerlistwidget.cpp" line="172"/>
<location filename="../src/widgets/powerlistwidget.h" line="94"/>
<location filename="../src/widgets/powerlistwidget.cpp" line="232"/>
<location filename="../src/widgets/powerlistwidget.h" line="118"/>
<source>Suspend</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/powerlistwidget.cpp" line="173"/>
<location filename="../src/widgets/powerlistwidget.h" line="95"/>
<location filename="../src/widgets/powerlistwidget.cpp" line="233"/>
<location filename="../src/widgets/powerlistwidget.h" line="119"/>
<source>The computer stays on, but consumes less power. The app stays open and can quickly wake up and revert to where you left off</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/powerlistwidget.cpp" line="176"/>
<location filename="../src/widgets/powerlistwidget.h" line="107"/>
<location filename="../src/widgets/powerlistwidget.cpp" line="236"/>
<location filename="../src/widgets/powerlistwidget.h" line="167"/>
<source>Restart</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/powerlistwidget.cpp" line="177"/>
<location filename="../src/widgets/powerlistwidget.cpp" line="237"/>
<source>Close all apps, and then restart your computer</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/powerlistwidget.cpp" line="179"/>
<location filename="../src/widgets/powerlistwidget.h" line="119"/>
<location filename="../src/widgets/powerlistwidget.cpp" line="239"/>
<location filename="../src/widgets/powerlistwidget.h" line="191"/>
<source>Shut Down</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/powerlistwidget.cpp" line="243"/>
<location filename="../src/widgets/powerlistwidget.h" line="144"/>
<source>The current user logs out of the system, terminates the session, and returns to the login page</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/powerlistwidget.cpp" line="253"/>
<source>Logout</source>
<translation></translation>
</message>
<message>
<source>Power Off</source>
<translation type="vanished"></translation>
</message>
<message>
<location filename="../src/widgets/powerlistwidget.cpp" line="180"/>
<location filename="../src/widgets/powerlistwidget.h" line="120"/>
<location filename="../src/widgets/powerlistwidget.cpp" line="240"/>
<location filename="../src/widgets/powerlistwidget.h" line="192"/>
<source>Close all apps, and then shut down your computer</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/powerlistwidget.h" line="108"/>
<location filename="../src/widgets/powerlistwidget.cpp" line="245"/>
<location filename="../src/widgets/powerlistwidget.h" line="93"/>
<source>SwitchUser</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/powerlistwidget.cpp" line="247"/>
<location filename="../src/widgets/powerlistwidget.h" line="131"/>
<source>LockScreen</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/powerlistwidget.cpp" line="242"/>
<location filename="../src/widgets/powerlistwidget.h" line="143"/>
<source>Log Out</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/powerlistwidget.cpp" line="249"/>
<location filename="../src/widgets/powerlistwidget.h" line="155"/>
<source>UpgradeThenRestart</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/powerlistwidget.h" line="168"/>
<source>Close all apps, turn off your computer, and then turn your computer back on</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/powerlistwidget.cpp" line="251"/>
<location filename="../src/widgets/powerlistwidget.h" line="179"/>
<source>UpgradeThenShutdown</source>
<translation></translation>
</message>
</context>
<context>
<name>PowerManager</name>
@ -2370,12 +2442,12 @@
<context>
<name>QObject</name>
<message>
<location filename="../src/lock-command/main.cpp" line="90"/>
<location filename="../src/lock-command/main.cpp" line="100"/>
<source>The screensaver is active.</source>
<translation></translation>
</message>
<message>
<location filename="../src/lock-command/main.cpp" line="92"/>
<location filename="../src/lock-command/main.cpp" line="102"/>
<source>The screensaver is inactive.</source>
<translation></translation>
</message>
@ -2649,6 +2721,15 @@
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>action</name>
<message>
<location filename="../src/lock-dialog/lockdialogmodel.cpp" line="67"/>
<location filename="../src/lock-dialog/lockdialogmodel.cpp" line="70"/>
<source>which block type</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>delay</name>
<message>
@ -2699,6 +2780,24 @@
<source>show blank and delay to lock,param:idle/lid/lowpower</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/lock-command/main.cpp" line="60"/>
<location filename="../src/lock-dialog/lockdialogmodel.cpp" line="64"/>
<source>show the session tools</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/lock-command/main.cpp" line="62"/>
<location filename="../src/lock-dialog/lockdialogmodel.cpp" line="66"/>
<source>show the app block window</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/lock-command/main.cpp" line="64"/>
<location filename="../src/lock-dialog/lockdialogmodel.cpp" line="69"/>
<source>show the multiUsers block window</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/lock-backend/main.cpp" line="50"/>
<source>Backend for the ukui ScreenSaver.</source>

View File

@ -24,7 +24,7 @@
<translation type="obsolete">使</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1146"/>
<location filename="../src/widgets/authdialog.cpp" line="1179"/>
<source>Retry</source>
<translation></translation>
</message>
@ -53,157 +53,157 @@
<translation type="vanished">%1%2</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1217"/>
<location filename="../src/widgets/authdialog.cpp" line="1248"/>
<source>Please try again in %1 minutes.</source>
<translation> %1 </translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1224"/>
<location filename="../src/widgets/authdialog.cpp" line="1255"/>
<source>Please try again in %1 seconds.</source>
<translation> %1 </translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1231"/>
<location filename="../src/widgets/authdialog.cpp" line="1262"/>
<source>Account locked permanently.</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="629"/>
<location filename="../src/widgets/authdialog.cpp" line="657"/>
<location filename="../src/widgets/authdialog.cpp" line="637"/>
<location filename="../src/widgets/authdialog.cpp" line="680"/>
<source>Verify face recognition or enter password to unlock</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="436"/>
<location filename="../src/widgets/authdialog.cpp" line="434"/>
<source>Guest</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="632"/>
<location filename="../src/widgets/authdialog.cpp" line="642"/>
<source>Press fingerprint or enter password to unlock</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="635"/>
<location filename="../src/widgets/authdialog.cpp" line="647"/>
<source>Verify voiceprint or enter password to unlock</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="638"/>
<location filename="../src/widgets/authdialog.cpp" line="652"/>
<source>Verify finger vein or enter password to unlock</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="641"/>
<location filename="../src/widgets/authdialog.cpp" line="657"/>
<source>Verify iris or enter password to unlock</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="916"/>
<location filename="../src/widgets/authdialog.cpp" line="948"/>
<source>Input Password</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="921"/>
<location filename="../src/widgets/authdialog.cpp" line="953"/>
<source>Username</source>
<translation type="unfinished">使</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="991"/>
<location filename="../src/widgets/authdialog.cpp" line="1022"/>
<source>User name input error!</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1067"/>
<location filename="../src/widgets/authdialog.cpp" line="1099"/>
<source>login</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1446"/>
<location filename="../src/widgets/authdialog.cpp" line="1595"/>
<location filename="../src/widgets/authdialog.cpp" line="1739"/>
<location filename="../src/widgets/authdialog.cpp" line="1921"/>
<location filename="../src/widgets/authdialog.cpp" line="1482"/>
<location filename="../src/widgets/authdialog.cpp" line="1634"/>
<location filename="../src/widgets/authdialog.cpp" line="1775"/>
<location filename="../src/widgets/authdialog.cpp" line="1952"/>
<source>Failed to verify %1, please enter password to unlock</source>
<translation> %1 </translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1449"/>
<location filename="../src/widgets/authdialog.cpp" line="1598"/>
<location filename="../src/widgets/authdialog.cpp" line="1744"/>
<location filename="../src/widgets/authdialog.cpp" line="1747"/>
<location filename="../src/widgets/authdialog.cpp" line="1924"/>
<location filename="../src/widgets/authdialog.cpp" line="1484"/>
<location filename="../src/widgets/authdialog.cpp" line="1636"/>
<location filename="../src/widgets/authdialog.cpp" line="1779"/>
<location filename="../src/widgets/authdialog.cpp" line="1781"/>
<location filename="../src/widgets/authdialog.cpp" line="1954"/>
<source>Unable to verify %1, please enter password to unlock</source>
<translation> %1</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1776"/>
<location filename="../src/widgets/authdialog.cpp" line="1809"/>
<source>Abnormal network</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1784"/>
<location filename="../src/widgets/authdialog.cpp" line="1816"/>
<source>Face recognition waiting time out, please click refresh or enter the password to unlock.</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="2048"/>
<location filename="../src/widgets/authdialog.cpp" line="2077"/>
<source>FingerPrint</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="2050"/>
<location filename="../src/widgets/authdialog.cpp" line="2079"/>
<source>FingerVein</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="2052"/>
<location filename="../src/widgets/authdialog.cpp" line="2081"/>
<source>Iris</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="2054"/>
<location filename="../src/widgets/authdialog.cpp" line="2083"/>
<source>Face</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="2056"/>
<location filename="../src/widgets/authdialog.cpp" line="2085"/>
<source>VoicePrint</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="2058"/>
<location filename="../src/widgets/authdialog.cpp" line="2080"/>
<location filename="../src/widgets/authdialog.cpp" line="2087"/>
<location filename="../src/widgets/authdialog.cpp" line="2110"/>
<source>Ukey</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="2060"/>
<location filename="../src/widgets/authdialog.cpp" line="2082"/>
<location filename="../src/widgets/authdialog.cpp" line="2089"/>
<location filename="../src/widgets/authdialog.cpp" line="2112"/>
<source>QRCode</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="2070"/>
<location filename="../src/widgets/authdialog.cpp" line="2100"/>
<source>fingerprint</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="2072"/>
<location filename="../src/widgets/authdialog.cpp" line="2102"/>
<source>fingervein</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="2074"/>
<location filename="../src/widgets/authdialog.cpp" line="2104"/>
<source>iris</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="2076"/>
<location filename="../src/widgets/authdialog.cpp" line="2106"/>
<source>face</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="2078"/>
<location filename="../src/widgets/authdialog.cpp" line="2108"/>
<source>voiceprint</source>
<translation></translation>
</message>
@ -212,8 +212,8 @@
<translation type="vanished">使</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="768"/>
<location filename="../src/widgets/authdialog.cpp" line="769"/>
<location filename="../src/widgets/authdialog.cpp" line="791"/>
<location filename="../src/widgets/authdialog.cpp" line="792"/>
<source>Password cannot be empty</source>
<translation></translation>
</message>
@ -226,8 +226,8 @@
<translation type="vanished">%1.</translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="1761"/>
<location filename="../src/widgets/authdialog.cpp" line="1765"/>
<location filename="../src/widgets/authdialog.cpp" line="1794"/>
<location filename="../src/widgets/authdialog.cpp" line="1798"/>
<source>Failed to verify %1, you still have %2 verification opportunities</source>
<translation> %1 %2 </translation>
</message>
@ -256,13 +256,13 @@
<translation type="vanished"></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="994"/>
<location filename="../src/widgets/authdialog.cpp" line="998"/>
<location filename="../src/widgets/authdialog.cpp" line="1025"/>
<location filename="../src/widgets/authdialog.cpp" line="1030"/>
<source>Authentication failure, Please try again</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="644"/>
<location filename="../src/widgets/authdialog.cpp" line="662"/>
<source>Use the bound wechat scanning code or enter the password to unlock</source>
<translation>使</translation>
</message>
@ -275,13 +275,13 @@
<translation type="vanished"> Ukey USB </translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="913"/>
<location filename="../src/widgets/authdialog.cpp" line="945"/>
<source>Password </source>
<translation> </translation>
</message>
<message>
<location filename="../src/widgets/authdialog.cpp" line="434"/>
<location filename="../src/widgets/authdialog.cpp" line="1137"/>
<location filename="../src/widgets/authdialog.cpp" line="432"/>
<location filename="../src/widgets/authdialog.cpp" line="1170"/>
<source>Login</source>
<translation></translation>
</message>
@ -406,36 +406,41 @@
<message>
<location filename="../src/widgets/blockwidget.cpp" line="57"/>
<location filename="../src/widgets/blockwidget.cpp" line="124"/>
<location filename="../src/widgets/blockwidget.cpp" line="177"/>
<location filename="../src/widgets/blockwidget.cpp" line="180"/>
<source>Cancel</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="61"/>
<location filename="../src/widgets/blockwidget.cpp" line="125"/>
<location filename="../src/widgets/blockwidget.cpp" line="178"/>
<location filename="../src/widgets/blockwidget.cpp" line="181"/>
<source>Confrim</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="133"/>
<source>The following program is running to prevent the system from reboot!</source>
<translation></translation>
<source>The following programs prevent restarting, you can click "Cancel" and then close these programs.</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="136"/>
<source>The following program is running to prevent the system from shutting down!</source>
<translation></translation>
<source>The following programs prevent the shutdown, you can click "Cancel" and then close these programs.</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="139"/>
<source>The following program is running to prevent the system from suspend!</source>
<translation></translation>
<source>The following programs prevent suspend,you can click "Cancel" and then close these programs.</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="142"/>
<source>The following program is running to prevent the system from hibernate!</source>
<translation></translation>
<source>The following programs prevent hibernation, you can click "Cancel" and then close these programs.</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="145"/>
<source>The following programs prevent you from logging out, you can click "Cancel" and then close them.</source>
<translation></translation>
</message>
</context>
<context>
@ -1944,17 +1949,17 @@
<context>
<name>LightDMHelper</name>
<message>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="111"/>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="123"/>
<source>failed to start session.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="210"/>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="222"/>
<source>Login</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="219"/>
<location filename="../src/lock-backend/lightdmhelper.cpp" line="231"/>
<source>Guest</source>
<translation type="unfinished"></translation>
</message>
@ -1998,61 +2003,87 @@
<translation type="vanished"></translation>
</message>
<message>
<location filename="../src/widgets/lockwidget.cpp" line="1027"/>
<location filename="../src/widgets/lockwidget.cpp" line="540"/>
<source>system-monitor</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/lockwidget.cpp" line="1090"/>
<source>Restart</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/lockwidget.cpp" line="1091"/>
<location filename="../src/widgets/lockwidget.cpp" line="1094"/>
<source>Multiple users are logged in at the same time.Are you sure you want to %1 this system?</source>
<translation>, %1 </translation>
</message>
<message>
<location filename="../src/widgets/lockwidget.cpp" line="1091"/>
<source>Reboot</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/lockwidget.cpp" line="1093"/>
<source>PowerOff</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/lockwidget.cpp" line="1094"/>
<source>Shut Down</source>
<translation></translation>
</message>
</context>
<context>
<name>LoginOptionsWidget</name>
<message>
<location filename="../src/widgets/loginoptionswidget.cpp" line="81"/>
<location filename="../src/widgets/loginoptionswidget.cpp" line="104"/>
<location filename="../src/widgets/loginoptionswidget.cpp" line="84"/>
<location filename="../src/widgets/loginoptionswidget.cpp" line="107"/>
<source>Login Options</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/loginoptionswidget.cpp" line="281"/>
<location filename="../src/widgets/loginoptionswidget.cpp" line="288"/>
<source>Password</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/loginoptionswidget.cpp" line="307"/>
<location filename="../src/widgets/loginoptionswidget.cpp" line="314"/>
<source>Other</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/loginoptionswidget.cpp" line="1021"/>
<location filename="../src/widgets/loginoptionswidget.cpp" line="1054"/>
<source>FingerPrint</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/loginoptionswidget.cpp" line="1023"/>
<location filename="../src/widgets/loginoptionswidget.cpp" line="1056"/>
<source>FingerVein</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/loginoptionswidget.cpp" line="1025"/>
<location filename="../src/widgets/loginoptionswidget.cpp" line="1058"/>
<source>Iris</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/loginoptionswidget.cpp" line="1027"/>
<location filename="../src/widgets/loginoptionswidget.cpp" line="1060"/>
<source>Face</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/loginoptionswidget.cpp" line="1029"/>
<location filename="../src/widgets/loginoptionswidget.cpp" line="1062"/>
<source>VoicePrint</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/loginoptionswidget.cpp" line="1031"/>
<location filename="../src/widgets/loginoptionswidget.cpp" line="1064"/>
<source>Ukey</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/loginoptionswidget.cpp" line="1033"/>
<location filename="../src/widgets/loginoptionswidget.cpp" line="1066"/>
<source>QRCode</source>
<translation></translation>
</message>
@ -2061,7 +2092,7 @@
<translation type="vanished"></translation>
</message>
<message>
<location filename="../src/widgets/loginoptionswidget.cpp" line="690"/>
<location filename="../src/widgets/loginoptionswidget.cpp" line="723"/>
<source>Identify device removed!</source>
<translation></translation>
</message>
@ -2256,61 +2287,102 @@
<context>
<name>PowerListWidget</name>
<message>
<location filename="../src/widgets/powerlistwidget.cpp" line="168"/>
<location filename="../src/widgets/powerlistwidget.h" line="81"/>
<location filename="../src/widgets/powerlistwidget.cpp" line="228"/>
<location filename="../src/widgets/powerlistwidget.h" line="105"/>
<source>Hibernate</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/powerlistwidget.cpp" line="169"/>
<location filename="../src/widgets/powerlistwidget.h" line="82"/>
<location filename="../src/widgets/powerlistwidget.cpp" line="229"/>
<location filename="../src/widgets/powerlistwidget.h" line="106"/>
<source>Turn off your computer, but the app stays open. When the computer is turned on, it can be restored to the state you left</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/powerlistwidget.cpp" line="172"/>
<location filename="../src/widgets/powerlistwidget.h" line="94"/>
<location filename="../src/widgets/powerlistwidget.cpp" line="232"/>
<location filename="../src/widgets/powerlistwidget.h" line="118"/>
<source>Suspend</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/powerlistwidget.cpp" line="173"/>
<location filename="../src/widgets/powerlistwidget.h" line="95"/>
<location filename="../src/widgets/powerlistwidget.cpp" line="233"/>
<location filename="../src/widgets/powerlistwidget.h" line="119"/>
<source>The computer stays on, but consumes less power. The app stays open and can quickly wake up and revert to where you left off</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/powerlistwidget.cpp" line="176"/>
<location filename="../src/widgets/powerlistwidget.h" line="107"/>
<location filename="../src/widgets/powerlistwidget.cpp" line="236"/>
<location filename="../src/widgets/powerlistwidget.h" line="167"/>
<source>Restart</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/powerlistwidget.cpp" line="177"/>
<location filename="../src/widgets/powerlistwidget.cpp" line="237"/>
<source>Close all apps, and then restart your computer</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/powerlistwidget.cpp" line="179"/>
<location filename="../src/widgets/powerlistwidget.h" line="119"/>
<location filename="../src/widgets/powerlistwidget.cpp" line="239"/>
<location filename="../src/widgets/powerlistwidget.h" line="191"/>
<source>Shut Down</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/powerlistwidget.cpp" line="243"/>
<location filename="../src/widgets/powerlistwidget.h" line="144"/>
<source>The current user logs out of the system, terminates the session, and returns to the login page</source>
<translation>使</translation>
</message>
<message>
<location filename="../src/widgets/powerlistwidget.cpp" line="253"/>
<source>Logout</source>
<translation></translation>
</message>
<message>
<source>Power Off</source>
<translation type="vanished"></translation>
</message>
<message>
<location filename="../src/widgets/powerlistwidget.cpp" line="180"/>
<location filename="../src/widgets/powerlistwidget.h" line="120"/>
<location filename="../src/widgets/powerlistwidget.cpp" line="240"/>
<location filename="../src/widgets/powerlistwidget.h" line="192"/>
<source>Close all apps, and then shut down your computer</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/powerlistwidget.h" line="108"/>
<location filename="../src/widgets/powerlistwidget.cpp" line="245"/>
<location filename="../src/widgets/powerlistwidget.h" line="93"/>
<source>SwitchUser</source>
<translation>使</translation>
</message>
<message>
<location filename="../src/widgets/powerlistwidget.cpp" line="247"/>
<location filename="../src/widgets/powerlistwidget.h" line="131"/>
<source>LockScreen</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/powerlistwidget.cpp" line="242"/>
<location filename="../src/widgets/powerlistwidget.h" line="143"/>
<source>Log Out</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/powerlistwidget.cpp" line="249"/>
<location filename="../src/widgets/powerlistwidget.h" line="155"/>
<source>UpgradeThenRestart</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/powerlistwidget.h" line="168"/>
<source>Close all apps, turn off your computer, and then turn your computer back on</source>
<translation></translation>
</message>
<message>
<location filename="../src/widgets/powerlistwidget.cpp" line="251"/>
<location filename="../src/widgets/powerlistwidget.h" line="179"/>
<source>UpgradeThenShutdown</source>
<translation></translation>
</message>
</context>
<context>
<name>PowerManager</name>
@ -2390,39 +2462,39 @@
<context>
<name>QObject</name>
<message>
<location filename="../src/lock-command/main.cpp" line="90"/>
<location filename="../src/lock-command/main.cpp" line="100"/>
<source>The screensaver is active.</source>
<translation></translation>
</message>
<message>
<location filename="../src/lock-command/main.cpp" line="92"/>
<location filename="../src/lock-command/main.cpp" line="102"/>
<source>The screensaver is inactive.</source>
<translation></translation>
</message>
<message>
<location filename="../src/common/biodefines.cpp" line="28"/>
<source>FingerPrint</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<location filename="../src/common/biodefines.cpp" line="30"/>
<source>FingerVein</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<location filename="../src/common/biodefines.cpp" line="32"/>
<source>Iris</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<location filename="../src/common/biodefines.cpp" line="34"/>
<source>Face</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<location filename="../src/common/biodefines.cpp" line="36"/>
<source>VoicePrint</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
<message>
<location filename="../src/common/biodefines.cpp" line="38"/>
@ -2432,7 +2504,7 @@
<message>
<location filename="../src/common/biodefines.cpp" line="40"/>
<source>QRCode</source>
<translation type="unfinished"></translation>
<translation></translation>
</message>
</context>
<context>
@ -2673,6 +2745,15 @@
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>action</name>
<message>
<location filename="../src/lock-dialog/lockdialogmodel.cpp" line="67"/>
<location filename="../src/lock-dialog/lockdialogmodel.cpp" line="70"/>
<source>which block type</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>delay</name>
<message>
@ -2723,6 +2804,24 @@
<source>show blank and delay to lock,param:idle/lid/lowpower</source>
<translation>//</translation>
</message>
<message>
<location filename="../src/lock-command/main.cpp" line="60"/>
<location filename="../src/lock-dialog/lockdialogmodel.cpp" line="64"/>
<source>show the session tools</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/lock-command/main.cpp" line="62"/>
<location filename="../src/lock-dialog/lockdialogmodel.cpp" line="66"/>
<source>show the app block window</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/lock-command/main.cpp" line="64"/>
<location filename="../src/lock-dialog/lockdialogmodel.cpp" line="69"/>
<source>show the multiUsers block window</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/lock-dialog/lockdialogmodel.cpp" line="40"/>
<source>Dialog for the ukui ScreenSaver.</source>

View File

@ -168,6 +168,7 @@ set(backend_SRC
dbusifs/kglobalaccelhelper.cpp
dbusifs/machinemodel.cpp
dbusifs/libinputswitchevent.cpp
dbusifs/systemupgradehelper.cpp
userinfo.cpp
agreementinfo.cpp
common/global_utils.cpp

View File

@ -125,6 +125,8 @@
<file>assets/reboot.svg</file>
<file>assets/hibernate.svg</file>
<file>assets/switchuser.svg</file>
<file>assets/logout.svg</file>
<file>assets/lockscreen.svg</file>
</qresource>
<qresource prefix="/">
<file>assets/data/conf.ini</file>

1
src/assets/lockscreen.svg Executable file
View File

@ -0,0 +1 @@
<svg id="图层_1" data-name="图层 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48"><path d="M36.34,16H34V10.9C34,6,29.51,2,24,2S14,6,14,10.9V16H11.66A6.67,6.67,0,0,0,5,22.66V39.34A6.67,6.67,0,0,0,11.66,46H36.34A6.67,6.67,0,0,0,43,39.34V22.66A6.67,6.67,0,0,0,36.34,16ZM17,10.9C17,7.65,20.14,5,24,5s7,2.65,7,5.9V16H17ZM40,39.34A3.66,3.66,0,0,1,36.34,43H11.66A3.66,3.66,0,0,1,8,39.34V22.66A3.66,3.66,0,0,1,11.66,19H36.34A3.66,3.66,0,0,1,40,22.66Z" fill="#fff"/></svg>

After

Width:  |  Height:  |  Size: 476 B

1
src/assets/logout.svg Executable file
View File

@ -0,0 +1 @@
<svg id="图层_1" data-name="图层 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48"><path d="M34.34,35.14A16.58,16.58,0,0,1,21.71,41a17,17,0,0,1,0-34,16.59,16.59,0,0,1,12.65,5.88,1.5,1.5,0,1,0,2.28-2A19.61,19.61,0,0,0,21.71,4,19.88,19.88,0,0,0,2,24,19.88,19.88,0,0,0,21.71,44a19.6,19.6,0,0,0,14.91-6.91,1.5,1.5,0,0,0-2.28-2Z" fill="#fff"/><path d="M40.14,22H21.5a1.5,1.5,0,0,0,0,3H40.14v4.36L46,23.5l-5.86-5.86Z" fill="#fff"/></svg>

After

Width:  |  Height:  |  Size: 443 B

View File

@ -40,10 +40,14 @@ typedef enum _LOCK_CMD_ID_e
LOCK_CMD_ID_LOGIN1_IS_SESSION_ACTIVE,
LOCK_CMD_ID_LOGIN1_LIDSTATE_CHANGED,
LOCK_CMD_ID_LOGIN1_SET_POWER_MANAGER,
LOCK_CMD_ID_LOGIN1_GET_POWER_MANAGER_CANSWITCHUSER,
LOCK_CMD_ID_LOGIN1_GET_POWER_MANAGER_CANHIBERNATE,
LOCK_CMD_ID_LOGIN1_GET_POWER_MANAGER_CANPOWEROFF,
LOCK_CMD_ID_LOGIN1_GET_POWER_MANAGER_CANREBOOT,
LOCK_CMD_ID_LOGIN1_GET_POWER_MANAGER_CANSUSPEND,
LOCK_CMD_ID_LOGIN1_GET_POWER_MANAGER_CANLOGOUT,
LOCK_CMD_ID_LOGIN1_GET_POWER_MANAGER_CANLOCKSCREEN,
LOCK_CMD_ID_SYSTEM_UPGRADE_CHECK,
LOCK_CMD_ID_GSETTINGS_GET_LOCKSCREEN_CONF = 200,
LOCK_CMD_ID_GSETTINGS_SET_LOCKSCREEN_CONF,
LOCK_CMD_ID_GSETTINGS_LOCKSCREEN_CONF_CHANGED,
@ -71,6 +75,9 @@ typedef enum _LOCK_CMD_ID_e
LOCK_CMD_ID_GSETTINGS_GET_USD_MEDIAKEYS_CONF,
LOCK_CMD_ID_GSETTINGS_SET_USD_MEDIAKEYS_CONF,
LOCK_CMD_ID_GSETTINGS_USD_MEDIAKEYS_CONF_CHANGED,
LOCK_CMD_ID_GSETTINGS_GET_USD_MEDIA_STATE_KEYS_CONF,
LOCK_CMD_ID_GSETTINGS_SET_USD_MEDIA_STATE_KEYS_CONF,
LOCK_CMD_ID_GSETTINGS_USD_MEDIA_STATE_KEYS_CONF_CHANGED,
LOCK_CMD_ID_GET_AGREEMENT = 300,
LOCK_CMD_ID_LOCK_STATE_CHANGED,
LOCK_CMD_ID_GET_PUBLIC_KEY,
@ -171,6 +178,8 @@ typedef enum _LOCK_CMD_ID_e
#define GSETTINGS_SCHEMA_SESSION "org.ukui.session"
#define KEY_SESSION_IDLE "idleDelay"
#define KEY_SESSION_LOGOUT_MUSIC "logoutMusic"
#define KEY_SESSION_POWEROFF_MUSIC "poweroffMusic"
#define GSETTINGS_SCHEMA_PERIPHERALS_KEYBOARD "org.ukui.peripherals-keyboard"
#define KEY_CAPSLOCK_STATUS "capslockState"
@ -182,6 +191,9 @@ typedef enum _LOCK_CMD_ID_e
#define KEY_SCREEN_SHOT2 "screenshot2"
#define KEY_WINDOW_SCREENSHOT "windowScreenshot"
#define GSETTINGS_SCHEMA_MEDIAKEY_STATE_SCHEMA "org.ukui.SettingsDaemon.plugins.media-keys-state"
#define KEY_RFKILL_STATE "rfkillState"
#define WORKING_DIRECTORY "/usr/share/ukui-screensaver"
#define SUBWND_COUNT_MAX 1024
@ -323,4 +335,16 @@ typedef enum {
#define ACCOUNTS_USER_DBUS_INTERFACE "org.freedesktop.Accounts.User"
#define ACCOUNTS_USER_LDM_SERVICE_INTERFACE "org.freedesktop.DisplayManager.AccountsService"
enum Action {
PowerSwitchUser,
PowerHibernate,
PowerSuspend,
PowerMonitorOff,
PowerLogout,
PowerUpgradeThenRboot,
PowerReboot,
PowerUpgradeThenShutdown,
PowerShutdown,
};
#endif // DEFINETYPES_H

View File

@ -178,3 +178,23 @@ bool Login1Helper::isCanPowerOff()
{
return m_isCanPowerOff;
}
bool Login1Helper::canAction(Action action)
{
switch (action) {
case PowerHibernate:
return m_isCanHibernate;
case PowerSuspend:
return m_isCanSuspend;
case PowerMonitorOff:
return m_isCanLockScreen;
case PowerLogout:
return m_isCanLogout;
case PowerReboot:
return m_isCanReboot;
case PowerShutdown:
return m_isCanPowerOff;
default:
return false;
}
}

View File

@ -21,6 +21,7 @@
#include <QDBusConnection>
#include <QVariantMap>
#include <QObject>
#include "definetypes.h"
/**
* @brief login1访问工具类
@ -56,6 +57,7 @@ public:
bool isCanSuspend();
bool isCanReboot();
bool isCanPowerOff();
bool canAction(Action action);
public Q_SLOTS:
/**
@ -116,6 +118,8 @@ private:
bool m_isCanSuspend = true;
bool m_isCanReboot = true;
bool m_isCanPowerOff = true;
bool m_isCanLockScreen = true;
bool m_isCanLogout = true;
};
#endif // LOGIN1HELPER_H

View File

@ -23,6 +23,10 @@
#include <QDBusMetaType>
#include <QDBusReply>
#include <QDBusInterface>
#include <QProcess>
#include "login1helper.h"
#include "lock-backend/gsettingshelper.h"
const static QString sessionService = QStringLiteral("org.gnome.SessionManager");
const static QString sessionPath = QStringLiteral("/org/gnome/SessionManager");
@ -58,6 +62,110 @@ SessionHelper::~SessionHelper()
}
bool SessionHelper::canAction(Action action)
{
//以下为代码结构调整
QString command;
switch (action) {
case PowerSwitchUser:
command = QLatin1String("canSwitch");
break;
case PowerHibernate:
command = QLatin1String("canHibernate");
break;
case PowerSuspend:
command = QLatin1String("canSuspend");
break;
case PowerMonitorOff:
command = QLatin1String("canLockscreen");
break;
case PowerLogout:
command = QLatin1String("canLogout");
break;
case PowerReboot:
command = QLatin1String("canReboot");
break;
case PowerShutdown:
command = QLatin1String("canPowerOff");
break;
default:
break;
}
if (!m_sessionInterface->isValid()) {
qWarning() << "dbusCall: Session QDBusInterface is invalid";
return false;
}
QDBusReply<bool> testReply = m_sessionInterface->call(QLatin1String("canLockscreen"));
if (!testReply.isValid()) {
//解决老版本升级到新版本接口不兼容的问题在session接口不存在的情况下调用systemd的接口
QDBusError error = testReply.error();
Login1Helper* m_login1Helper = new Login1Helper(this);
if (error.type() == QDBusError::UnknownMethod) {
qInfo() << "updating ! old ukui-session dose not have canAction method";
if (action == PowerLogout || action == PowerMonitorOff) {
return true;
}
return m_login1Helper->canAction(action);
}
qInfo() << "dbus error";
return false;
}
QDBusReply<bool> reply = m_sessionInterface->call(command);
qInfo() << "command = " << command << "reply = " << m_sessionInterface->call(command);
return reply.value();
}
bool SessionHelper::doAction(const QString &powerManagerfunc)
{
if (!m_sessionInterface->isValid()) {
qWarning() << "dbusCall: Session QDBusInterface is invalid";
return false;
}
up_to_time = new QTimer();
up_to_time->setSingleShot(true);
qDebug() << "playShutdownMusic(powerManagerfunc) = " << playShutdownMusic(powerManagerfunc);
if (!playShutdownMusic(powerManagerfunc)) {
doPowerManager(powerManagerfunc);
}
return true;
}
void SessionHelper::doPowerManager(const QString &powerManagerfunc)
{
QString command;
if (powerManagerfunc == "Hibernate") {
command = QLatin1String("hibernate");
} else if (powerManagerfunc == "Suspend") {
command = QLatin1String("suspend");
} else if (powerManagerfunc == "Reboot") {
command = QLatin1String("reboot");
} else if (powerManagerfunc == "PowerOff") {
command = QLatin1String("powerOff");
} else if (powerManagerfunc == "Logout") {
command = QLatin1String("logout");
} else if (powerManagerfunc == "SwitchUser") {
command = QLatin1String("switchUser");
} else {
return ;
}
QDBusMessage mes = m_sessionInterface->call(command);
if (!(mes.errorName().isEmpty())) {
Login1Helper* m_login1Helper = new Login1Helper(this);
//本来应该判断错误类别,考虑到运行效率,不做该判断
m_login1Helper->setPowerManager(powerManagerfunc);
}
}
QStringList SessionHelper::getLockCheckStatus(QString type)
{
qDBusRegisterMetaType<InhibitInfo::InhibitorInfo>();
@ -89,3 +197,54 @@ QStringList SessionHelper::getLockCheckStatus(QString type)
return lockCheckList;
}
bool SessionHelper::playShutdownMusic(const QString &powerManagerfunc)
{
// up_to_time and soundplayer can not be define out of this if().
// otherwise run ukui-session-tools --suspend with segmente error.
// because they will be delate at the end of the playShutdownMusic().
bool play_music = false;
GSettingsHelper *gsettingsHelper = new GSettingsHelper(this);
if (powerManagerfunc == "Reboot" || powerManagerfunc == "PowerOff") {
play_music = gsettingsHelper->GetSessionConf(KEY_SESSION_POWEROFF_MUSIC).toBool();
} else if (powerManagerfunc == "Logout") {
play_music = gsettingsHelper->GetSessionConf(KEY_SESSION_LOGOUT_MUSIC).toBool();
} else {
return false;
}
QDBusMessage msg;
if (powerManagerfunc == "SwitchUser") {
msg = m_sessionInterface->call("emitPrepareForSwitchuser");
if (!msg.errorName().isEmpty()) {
qWarning() << "Dbus error: " << msg;
}
}
if (play_music) {
QObject::connect(up_to_time, &QTimer::timeout, [=]() {
doPowerManager(powerManagerfunc);
return true;
});
QString xdg_session_type = qgetenv("XDG_SESSION_TYPE");
if (powerManagerfunc == "Reboot" || powerManagerfunc == "PowerOff") {
if (xdg_session_type == "wayland") {
QProcess::startDetached("paplay /usr/share/ukui/ukui-session-manager/shutdown.wav");
} else {
QProcess::startDetached("aplay /usr/share/ukui/ukui-session-manager/shutdown.wav");
}
up_to_time->start(5000);
} else if (powerManagerfunc == "Logout") {
if (xdg_session_type == "wayland") {
QProcess::startDetached("paplay /usr/share/ukui/ukui-session-manager/logout.wav");
} else {
QProcess::startDetached("aplay /usr/share/ukui/ukui-session-manager/logout.wav");
}
up_to_time->start(2000);
} else {
qDebug() << "error num";
return false;
}
}
return play_music;
}

View File

@ -20,7 +20,9 @@
#define SESSIONHELPER_H
#include <QFile>
#include <QTimer>
#include <QDBusArgument>
#include "definetypes.h"
namespace InhibitInfo {
struct InhibitorInfo {
@ -36,6 +38,7 @@ namespace InhibitInfo {
Q_DECLARE_METATYPE(InhibitInfo::InhibitorInfo)
class QDBusInterface;
class Login1Helper;
class SessionHelper : public QObject
{
@ -47,8 +50,18 @@ public:
QStringList getLockCheckStatus(QString type);
bool canAction(Action action);
bool doAction(const QString &powerManagerfunc);
private:
QDBusInterface *m_sessionInterface = nullptr;
QTimer *up_to_time = nullptr;
void doPowerManager(const QString &powerManagerfunc);
bool playShutdownMusic(const QString &powerManagerfunc);
};
#endif // SESSIONHELPER_H

View File

@ -0,0 +1,100 @@
/*
* Copyright (C) 2023 KylinSoftCo., Ltd.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
*
**/
#include "systemupgradehelper.h"
#include <QDebug>
#include <QDBusMessage>
const static QString sysUpgradeService = QStringLiteral("com.kylin.systemupgrade");
const static QString sysUpgradePath = QStringLiteral("/com/kylin/systemupgrade");
const static QString sysUpgradeInterface = QStringLiteral("com.kylin.systemupgrade.interface");
SystemUpgradeHelper::SystemUpgradeHelper(QObject *parent) : QObject(parent)
{
m_sysUpgradeInterface = new QDBusInterface(sysUpgradeService, sysUpgradePath, sysUpgradeInterface, QDBusConnection::systemBus());
if (!m_sysUpgradeInterface->isValid()) {
qDebug() << "systemUpgrade interface not valid";
isDbusActive = false;
isSystemUpgrade =false;
} else {
isDbusActive = true;
}
}
SystemUpgradeHelper::~SystemUpgradeHelper()
{
}
bool SystemUpgradeHelper::checkSystemUpgrade(){
if (!isDbusActive) return false;
QDBusMessage response = m_sysUpgradeInterface->call("CheckInstallRequired");
if (response.type() == QDBusMessage::ReplyMessage) {
int res = response.arguments()[0].toInt();
qDebug() << "CheckInstallRequired return " << res;
if (res == 0)
isSystemUpgrade = false;
else
isSystemUpgrade = true;
} else {
qDebug () << "call CheckInstallRequired failed;";
isSystemUpgrade = false;
}
return isSystemUpgrade;
}
bool SystemUpgradeHelper::doUpgradeThenRboot(){
if (!isDbusActive) return false;
bool mask = false;
QDBusMessage response = m_sysUpgradeInterface->call("TriggerInstallOnShutdown","reboot");
if (response.type() == QDBusMessage::ReplyMessage) {
int res = response.arguments()[0].toInt();
qDebug() << "TriggerInstallOnShutdown reboot return " << res;
if (res == 0)
mask = true;
else
mask = false;
} else {
qDebug () << "call TriggerInstallOnShutdown reboot failed;";
mask = false;
}
return mask;
}
bool SystemUpgradeHelper::doUpgradeThenShutdown(){
if (!isDbusActive) return false;
bool mask = false;
QDBusMessage response = m_sysUpgradeInterface->call("TriggerInstallOnShutdown","shutdown");
if (response.type() == QDBusMessage::ReplyMessage) {
int res = response.arguments()[0].toInt();
qDebug() << "TriggerInstallOnShutdown shutdown return " << res;
if (res == 0)
mask = true;
else
mask = false;
} else {
qDebug () << "call TriggerInstallOnShutdown shutdown failed;";
mask = false;
}
return mask;
}

View File

@ -0,0 +1,53 @@
/*
* Copyright (C) 2023 KylinSoftCo., Ltd.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>.
*
**/
#ifndef SYSTEMUPGRADEHELPER_H
#define SYSTEMUPGRADEHELPER_H
#include <QDBusInterface>
#include <QDBusConnection>
#include <QVariantMap>
#include <QObject>
class SystemUpgradeHelper : public QObject
{
Q_OBJECT
public:
/**
* @brief
*
* @param parent
*/
explicit SystemUpgradeHelper(QObject *parent = nullptr);
/**
* @brief
*
*/
virtual ~SystemUpgradeHelper();
bool checkSystemUpgrade();
bool doUpgradeThenRboot();
bool doUpgradeThenShutdown();
private:
private:
QDBusInterface *m_sysUpgradeInterface = nullptr;
bool isDbusActive = false;
bool isSystemUpgrade = false;
};
#endif // SYSTEMUPGRADEHELPER_H

View File

@ -35,6 +35,7 @@
#include "upowerhelper.h"
#include "accountshelper.h"
#include "sessionhelper.h"
#include "systemupgradehelper.h"
#include "sessionwatcher.h"
#include "freedesktophelper.h"
#include "bioauthenticate.h"
@ -67,6 +68,7 @@ void DbusUpperInterface::initData()
m_usdHelper= new UsdHelper(this);
m_upowerHelper = new UpowerHelper(this);
m_sessionHelper = new SessionHelper(this);
m_systemsUpgradeHelper = new SystemUpgradeHelper(this);
m_sessionWatcher = new SessionWatcher(m_gsettingsHelper, this);
m_kglobalHelper = new KglobalAccelHelper(this);
m_libinputSwitchEvent = new LibinputSwitchEvent(this);
@ -215,6 +217,182 @@ void DbusUpperInterface::Lock()
emitLockState(true);
}
bool DbusUpperInterface::CheckAppVersion()
{
return true;
}
void DbusUpperInterface::SessionTools()
{
if(GetLockState())
return;
if(m_procLockDialog.state() != QProcess::NotRunning) {
QDBusMessage message;
message = QDBusMessage::createSignal(SS_DBUS_PATH,
SS_DBUS_INTERFACE,
"SecondRunParam");
message<<"CmdSessionTools";
QDBusConnection::sessionBus().send(message);
emitLockState(true);
return ;
}
m_bLockState = false;
QString cmd = QString("/usr/bin/ukui-screensaver-dialog --session-tools");
qDebug() << cmd;
m_procLockDialog.start(cmd);
emitLockState(true);
}
void DbusUpperInterface::AppBlockWindow(QString actionType)
{
QStringList lockcheck;
if (actionType == "Shutdown" || actionType == "Restart" || actionType == "Logout") {
lockcheck = m_sessionHelper->getLockCheckStatus("shutdown");
} else if (actionType == "Suspend" || actionType == "Hibernate") {
lockcheck = m_sessionHelper->getLockCheckStatus("sleep");
}
qDebug() << "lockCheck = " << lockcheck;
if (lockcheck.isEmpty()) {
return ;
}
if(m_procLockDialog.state() != QProcess::NotRunning) {
QDBusMessage message;
message = QDBusMessage::createSignal(SS_DBUS_PATH,
SS_DBUS_INTERFACE,
"SecondRunParam");
if (actionType == "Restart")
message<<"CmdRestartAppBlock";
else if (actionType == "Shutdown")
message<<"CmdPowerOffAppBlock";
else if (actionType == "Suspend")
message<<"CmdSuspendAppBlock";
else if (actionType == "Hibernate")
message<<"CmdHibernateAppBlock";
else if (actionType == "Logout")
message<<"CmdLogoutAppBlock";
else
return;
QDBusConnection::sessionBus().send(message);
emitLockState(false);
return ;
}
if (actionType != "Restart" && actionType != "Shutdown" && actionType != "Suspend" && actionType != "Hibernate" && actionType != "Logout")
return ;
m_bLockState = false;
QString cmd;
cmd = QString("/usr/bin/ukui-screensaver-dialog --app-block %1").arg(actionType);
qDebug() << cmd;
m_procLockDialog.start(cmd);
emitLockState(false);
}
void DbusUpperInterface::MultiUserBlockWindow(QString actionType)
{
if(m_procLockDialog.state() != QProcess::NotRunning) {
QDBusMessage message;
message = QDBusMessage::createSignal(SS_DBUS_PATH,
SS_DBUS_INTERFACE,
"SecondRunParam");
if (actionType == "Restart")
message<<"CmdRestartMulTiUserBlock";
else if (actionType == "Shutdown")
message<<"CmdPowerOffMulTiUserBlock";
else
return;
QDBusConnection::sessionBus().send(message);
emitLockState(false);
return ;
}
if (actionType != "Restart" && actionType != "Shutdown")
return ;
m_bLockState = false;
QString cmd;
cmd = QString("/usr/bin/ukui-screensaver-dialog --multiusers-block %1").arg(actionType);
qDebug() << cmd;
m_procLockDialog.start(cmd);
emitLockState(false);
}
void DbusUpperInterface::Suspend()
{
if (m_sessionHelper) {
QStringList lockCheckList = m_sessionHelper->getLockCheckStatus("sleep");
if (lockCheckList.count() == 0)
m_sessionHelper->doAction("Suspend");
else {
AppBlockWindow("Suspend");
}
}
}
void DbusUpperInterface::Hibernate()
{
if (m_sessionHelper) {
QStringList lockCheckList = m_sessionHelper->getLockCheckStatus("sleep");
if (lockCheckList.count() == 0)
m_sessionHelper->doAction("Hibernate");
else {
AppBlockWindow("Hibernate");
}
}
}
void DbusUpperInterface::Reboot()
{
if (m_sessionHelper) {
QStringList lockCheckList = m_sessionHelper->getLockCheckStatus("shutdown");
if (lockCheckList.count() == 0) {
if (m_lightDmHelper && m_lightDmHelper->getLoginUserCount() > 1) {
MultiUserBlockWindow("Restart");
} else {
m_sessionHelper->doAction("Reboot");
}
} else {
AppBlockWindow("Restart");
}
}
}
void DbusUpperInterface::PowerOff()
{
if (m_sessionHelper) {
QStringList lockCheckList = m_sessionHelper->getLockCheckStatus("shutdown");
if (lockCheckList.count() == 0) {
if (m_lightDmHelper && m_lightDmHelper->getLoginUserCount() > 1) {
MultiUserBlockWindow("Shutdown");
} else {
m_sessionHelper->doAction("PowerOff");
}
} else {
AppBlockWindow("Shutdown");
}
}
}
void DbusUpperInterface::Logout()
{
if (m_sessionHelper) {
QStringList lockCheckList = m_sessionHelper->getLockCheckStatus("shutdown");
if (lockCheckList.count() == 0)
m_sessionHelper->doAction("Logout");
else {
AppBlockWindow("Logout");
}
}
}
void DbusUpperInterface::SwitchUser()
{
if (m_sessionHelper) {
m_sessionHelper->doAction("SwitchUser");
}
}
void DbusUpperInterface::UnLock()
{
if(m_procLockDialog.state() != QProcess::NotRunning)
@ -497,23 +675,42 @@ QString DbusUpperInterface::GetInformation(QString strJson)
PamAuthenticationUser(rootObj, retObj);
case LOCK_CMD_ID_GSETTINGS_GET_USD_MEDIAKEYS_CONF:
retObj["CmdId"] = cmdId;
getUsdMediaKeys(rootObj, retObj);
GetUsdMediaKeys(rootObj, retObj);
break;
case LOCK_CMD_ID_LOGIN1_GET_POWER_MANAGER_CANHIBERNATE:
retObj["CmdId"] = cmdId;
retObj["Content"] = m_login1Helper->isCanHibernate();
if (m_login1Helper)
retObj["Content"] = m_login1Helper->isCanHibernate();
break;
case LOCK_CMD_ID_LOGIN1_GET_POWER_MANAGER_CANPOWEROFF:
retObj["CmdId"] = cmdId;
retObj["Content"] = m_login1Helper->isCanPowerOff();
if (m_login1Helper)
retObj["Content"] = m_login1Helper->isCanPowerOff();
break;
case LOCK_CMD_ID_LOGIN1_GET_POWER_MANAGER_CANREBOOT:
retObj["CmdId"] = cmdId;
retObj["Content"] = m_login1Helper->isCanReboot();
if (m_login1Helper)
retObj["Content"] = m_login1Helper->isCanReboot();
break;
case LOCK_CMD_ID_LOGIN1_GET_POWER_MANAGER_CANSUSPEND:
retObj["CmdId"] = cmdId;
retObj["Content"] = m_login1Helper->isCanSuspend();
if (m_login1Helper)
retObj["Content"] = m_login1Helper->isCanSuspend();
break;
case LOCK_CMD_ID_LOGIN1_GET_POWER_MANAGER_CANLOGOUT:
retObj["CmdId"] = cmdId;
if (m_sessionHelper)
retObj["Content"] = m_sessionHelper->canAction(PowerLogout);
break;
case LOCK_CMD_ID_LOGIN1_GET_POWER_MANAGER_CANLOCKSCREEN:
retObj["CmdId"] = cmdId;
if (m_sessionHelper)
retObj["Content"] = m_sessionHelper->canAction(PowerMonitorOff);
break;
case LOCK_CMD_ID_SYSTEM_UPGRADE_CHECK:
retObj["CmdId"] = cmdId;
if (m_systemsUpgradeHelper)
retObj["Content"] = m_systemsUpgradeHelper->checkSystemUpgrade();
break;
case LOCK_CMD_ID_UPOWER_BATTERY_STATUS:
retObj["CmdId"] = cmdId;
@ -2220,7 +2417,7 @@ int DbusUpperInterface::BioStopAuth(const QJsonObject &objInfo)
return nRet;
}
void DbusUpperInterface::getUsdMediaKeys(QJsonObject &reqObj, QJsonObject &retObj)
void DbusUpperInterface::GetUsdMediaKeys(QJsonObject &reqObj, QJsonObject &retObj)
{
QString strKey = reqObj.value("Key").toString();
if (!strKey.isEmpty()) {
@ -2286,8 +2483,17 @@ int DbusUpperInterface::SetPowerManager(const QJsonObject &objInfo)
QString strFuncName = objInfo.value("Content").toString();
if (!strFuncName.isEmpty()) {
qWarning() << __LINE__ << __FUNCTION__ << strFuncName;
if (m_login1Helper)
m_login1Helper->setPowerManager(strFuncName);
if (strFuncName != "UpgradeThenRestart" && strFuncName != "UpgradeThenShutdown" && m_sessionHelper)
if (!isGreeterMode()) {
m_sessionHelper->doAction(strFuncName);
} else if (m_login1Helper) {
m_login1Helper->setPowerManager(strFuncName);
}
else if (strFuncName == "UpgradeThenRestart" && m_systemsUpgradeHelper) {
m_systemsUpgradeHelper->doUpgradeThenRboot();
} else if (strFuncName == "UpgradeThenShutdown" && m_systemsUpgradeHelper) {
m_systemsUpgradeHelper->doUpgradeThenShutdown();
}
nRet = 0;
}

View File

@ -39,6 +39,7 @@ class UsdHelper;
class UpowerHelper;
class AccountsHelper;
class SessionHelper;
class SystemUpgradeHelper;
class SessionWatcher;
class BioAuthenticate;
class KglobalAccelHelper;
@ -112,6 +113,20 @@ public:
*
*/
void LockScreensaver();
/**
* @brief session tools
*
*/
bool CheckAppVersion();
void SessionTools();
void AppBlockWindow(QString actionType);
void MultiUserBlockWindow(QString actionType);
void Suspend();
void Logout();
void SwitchUser();
void Reboot();
void PowerOff();
void Hibernate();
/**
* @brief
*
@ -302,7 +317,7 @@ private:
int PamRespond(const QJsonObject &objInfo);
void getUsdMediaKeys(QJsonObject &reqObj, QJsonObject &retObj);
void GetUsdMediaKeys(QJsonObject &reqObj, QJsonObject &retObj);
bool usdExternalDoAction(const QJsonObject &objInfo);
@ -393,6 +408,7 @@ private:
AccountsHelper *m_accountsHelper = nullptr;
bool lockState = false;
SessionHelper *m_sessionHelper = nullptr;
SystemUpgradeHelper *m_systemsUpgradeHelper = nullptr;
SessionWatcher *m_sessionWatcher = nullptr;
BioAuthenticate *m_bioAuth = nullptr;
RSAC rsac;

View File

@ -242,6 +242,12 @@ bool GSettingsHelper::initSession()
if (keys.contains(KEY_SESSION_IDLE)) {
m_nSessionIdle = m_gsSession->get(KEY_SESSION_IDLE).toInt();
}
if (keys.contains(KEY_SESSION_LOGOUT_MUSIC)) {
m_nSessionLogout = m_gsSession->get(KEY_SESSION_LOGOUT_MUSIC).toBool();
}
if (keys.contains(KEY_SESSION_POWEROFF_MUSIC)) {
m_nSessionPoweroff = m_gsSession->get(KEY_SESSION_POWEROFF_MUSIC).toBool();
}
}
}
return (bool)(m_gsSession);
@ -423,6 +429,10 @@ void GSettingsHelper::onSessionConfigChanged(QString strKey)
QVariant varValue;
if (strKey == KEY_SESSION_IDLE) {
varValue = m_nSessionIdle = m_gsSession->get(KEY_SESSION_IDLE).toInt();
} else if (strKey == KEY_SESSION_LOGOUT_MUSIC) {
m_nSessionLogout = m_gsSession->get(KEY_SESSION_LOGOUT_MUSIC).toBool();
} else if (strKey == KEY_SESSION_POWEROFF_MUSIC) {
m_nSessionPoweroff = m_gsSession->get(KEY_SESSION_POWEROFF_MUSIC).toBool();
}
Q_EMIT sessionConfigChanged(strKey, varValue);
}
@ -661,6 +671,10 @@ QVariant GSettingsHelper::GetSessionConf(QString strKey)
if (initSession()) {
if (strKey == KEY_SESSION_IDLE) {
varValue = m_nSessionIdle;
} else if (strKey == KEY_SESSION_LOGOUT_MUSIC) {
varValue = m_nSessionLogout;
} else if (strKey == KEY_SESSION_POWEROFF_MUSIC) {
varValue = m_nSessionPoweroff;
}
}
return varValue;

View File

@ -137,6 +137,8 @@ private:
QString m_font;
int m_nSessionIdle = -1;
bool m_nSessionLogout = false;
bool m_nSessionPoweroff = false;
bool m_capsState = false;

View File

@ -95,6 +95,18 @@ QList<QString> LightDMHelper::getSessionsInfo()
return m_listSessions;
}
int LightDMHelper::getLoginUserCount()
{
QList<UserInfoPtr> userInfos = m_mapUsers->values();
int loginUserCount = 0;
for (auto user : userInfos) {
if (isUserLoggined(user->name())) {
loginUserCount += 1;
}
}
return loginUserCount;
}
void LightDMHelper::startSession()
{
if(isAuthenticated()) {

View File

@ -95,6 +95,8 @@ public:
QList<QString> getSessionsInfo();
int getLoginUserCount();
public Q_SLOTS:
/**
* @brief

View File

@ -41,5 +41,28 @@
<arg type="s" direction="in"/>
<arg type="i" direction="out"/>
</method>
<method name="CheckAppVersion">
<arg type="b" direction="out"/>
</method>
<method name="SessionTools">
</method>
<method name="Logout">
</method>
<method name="SwitchUser">
</method>
<method name="Reboot">
</method>
<method name="PowerOff">
</method>
<method name="Suspend">
</method>
<method name="Hibernate">
</method>
<method name="AppBlockWindow">
<arg type="s" direction="in"/>
</method>
<method name="MultiUserBlockWindow">
<arg type="s" direction="in"/>
</method>
</interface>
</node>

View File

@ -22,6 +22,7 @@
#include <QTranslator>
#include <QCommandLineParser>
#include <QDebug>
#include <QGuiApplication>
#include "utils.h"
#include <ukui-log4qt.h>
#include <QThread>
@ -56,16 +57,28 @@ int main(int argc, char **argv)
QCoreApplication::translate("main", "show the screensaver"));
QCommandLineOption blankOption({"b", QStringLiteral("blank")},
QCoreApplication::translate("main", "show blank and delay to lock,param:idle/lid/lowpower"), "lid");
QCommandLineOption sessiontoolsOption({"t", QStringLiteral("session-tools")},
QCoreApplication::translate("main", "show the session tools"));
QCommandLineOption appBlockOption({"a", QStringLiteral("app-block")},
QCoreApplication::translate("main", "show the app block window"),
QGuiApplication::translate("action", "which block type,param:Suspend/Hibernate/Restart/Shutdown/Logout"), "type");
QCommandLineOption multiUsersOption({"m", QStringLiteral("multiusers-block")},
QCoreApplication::translate("main", "show the multiUsers block window"),
QGuiApplication::translate("action", "which block type,param:Shutdown/Restart"), "type");
parser.addOption(lockOption);
parser.addOption(queryOption);
parser.addOption(unlockOption);
parser.addOption(screensaverOption);
parser.addOption(blankOption);
parser.addOption(sessiontoolsOption);
parser.addOption(appBlockOption);
parser.addOption(multiUsersOption);
parser.process(a);
if(!parser.isSet(lockOption) && !parser.isSet(queryOption) && !parser.isSet(unlockOption)
&& !parser.isSet(screensaverOption) && !parser.isSet(blankOption))
&& !parser.isSet(screensaverOption) && !parser.isSet(blankOption)
&& !parser.isSet(sessiontoolsOption) && !parser.isSet(appBlockOption) && !parser.isSet(multiUsersOption))
return -1;
QString displayNum = QString(qgetenv("DISPLAY")).replace(":", "").replace(".", "_");
@ -132,6 +145,21 @@ int main(int argc, char **argv)
} else {
qDebug()<<"LockByBlank:"<<bLockSuccess.error().message()<<bLockSuccess.value();
}
} else if (parser.isSet(sessiontoolsOption) && !stateReply) {
QDBusMessage msg = interface->call("SessionTools");
if(msg.type() == QDBusMessage::ErrorMessage)
qDebug() << msg.errorMessage();
} else if (parser.isSet(appBlockOption) && !stateReply) {
QString opValue = parser.value(appBlockOption);
QDBusMessage msg = interface->call("AppBlockWindow", opValue);
if(msg.type() == QDBusMessage::ErrorMessage)
qDebug() << msg.errorMessage();
} else if (parser.isSet(multiUsersOption) && !stateReply) {
QString opValue = parser.value(multiUsersOption);
qDebug() << opValue;
QDBusMessage msg = interface->call("MultiUserBlockWindow", opValue);
if(msg.type() == QDBusMessage::ErrorMessage)
qDebug() << msg.errorMessage();
}
return 0;
}

View File

@ -2388,6 +2388,43 @@ bool BackendDbusHelper::getPowerManagerCanPowerOff()
return canFlag;
}
bool BackendDbusHelper::getPowerManagerCanSwitchUser()
{
bool canFlag = true;
QJsonObject jsonCmd;
jsonCmd["CmdId"] = LOCK_CMD_ID_LOGIN1_GET_POWER_MANAGER_CANSWITCHUSER;
QDBusPendingReply<QString> reply = GetInformation(QString(QJsonDocument(jsonCmd).toJson()));
reply.waitForFinished();
if (reply.isError()) {
qWarning() << "getPowerManagerCanSwitchUser error: " << reply.error().message();
} else {
QString strResponse = reply.value();
QJsonParseError jsonParseError;
const QJsonDocument jsonDoc = QJsonDocument::fromJson(strResponse.toUtf8(), &jsonParseError);
if (jsonParseError.error != QJsonParseError::NoError) {
qInfo()<<"getPowerManagerCanSwitchUser Parse json failed!!";
} else {
QJsonObject objRes = jsonDoc.object();
if (objRes.isEmpty()) {
qInfo()<<"getPowerManagerCanSwitchUser Json is null!!";
} else {
if (objRes.contains("CmdId") && objRes.contains("Ret")) {
int nCmdId = objRes.value("CmdId").toInt(-1);
int nRet = objRes.value("Ret").toInt(-1);
if (nCmdId != LOCK_CMD_ID_LOGIN1_GET_POWER_MANAGER_CANSWITCHUSER || nRet != 0) {
qInfo()<<"getPowerManagerCanSwitchUser Failed!!";
} else {
canFlag = objRes.value("Content").toBool();
}
} else {
qInfo()<<"getPowerManagerCanSwitchUser Json is invalid!!";
}
}
}
}
return canFlag;
}
bool BackendDbusHelper::getPowerManagerCanHibernate()
{
bool canFlag = true;
@ -2425,6 +2462,117 @@ bool BackendDbusHelper::getPowerManagerCanHibernate()
return canFlag;
}
bool BackendDbusHelper::getPowerManagerCanLogout()
{
bool canFlag = true;
QJsonObject jsonCmd;
jsonCmd["CmdId"] = LOCK_CMD_ID_LOGIN1_GET_POWER_MANAGER_CANLOGOUT;
QDBusPendingReply<QString> reply = GetInformation(QString(QJsonDocument(jsonCmd).toJson()));
reply.waitForFinished();
if (reply.isError()) {
qWarning() << "getPowerManagerCanLogout error: " << reply.error().message();
} else {
QString strResponse = reply.value();
QJsonParseError jsonParseError;
const QJsonDocument jsonDoc = QJsonDocument::fromJson(strResponse.toUtf8(), &jsonParseError);
if (jsonParseError.error != QJsonParseError::NoError) {
qInfo()<<"getPowerManagerCanLogout Parse json failed!!";
} else {
QJsonObject objRes = jsonDoc.object();
if (objRes.isEmpty()) {
qInfo()<<"getPowerManagerCanLogout Json is null!!";
} else {
if (objRes.contains("CmdId") && objRes.contains("Ret")) {
int nCmdId = objRes.value("CmdId").toInt(-1);
int nRet = objRes.value("Ret").toInt(-1);
if (nCmdId != LOCK_CMD_ID_LOGIN1_GET_POWER_MANAGER_CANLOGOUT || nRet != 0) {
qInfo()<<"getPowerManagerCanLogout Failed!!";
} else {
canFlag = objRes.value("Content").toBool();
}
} else {
qInfo()<<"getPowerManagerCanLogout Json is invalid!!";
}
}
}
}
return canFlag;
}
bool BackendDbusHelper::getPowerManagerCanLockScreen()
{
bool canFlag = true;
QJsonObject jsonCmd;
jsonCmd["CmdId"] = LOCK_CMD_ID_LOGIN1_GET_POWER_MANAGER_CANLOCKSCREEN;
QDBusPendingReply<QString> reply = GetInformation(QString(QJsonDocument(jsonCmd).toJson()));
reply.waitForFinished();
if (reply.isError()) {
qWarning() << "getPowerManagerCanLockScreen error: " << reply.error().message();
} else {
QString strResponse = reply.value();
QJsonParseError jsonParseError;
const QJsonDocument jsonDoc = QJsonDocument::fromJson(strResponse.toUtf8(), &jsonParseError);
if (jsonParseError.error != QJsonParseError::NoError) {
qInfo()<<"getPowerManagerCanLockScreen Parse json failed!!";
} else {
QJsonObject objRes = jsonDoc.object();
if (objRes.isEmpty()) {
qInfo()<<"getPowerManagerCanLockScreen Json is null!!";
} else {
if (objRes.contains("CmdId") && objRes.contains("Ret")) {
int nCmdId = objRes.value("CmdId").toInt(-1);
int nRet = objRes.value("Ret").toInt(-1);
if (nCmdId != LOCK_CMD_ID_LOGIN1_GET_POWER_MANAGER_CANLOCKSCREEN || nRet != 0) {
qInfo()<<"getPowerManagerCanLockScreen Failed!!";
} else {
canFlag = objRes.value("Content").toBool();
}
} else {
qInfo()<<"getPowerManagerCanLockScreen Json is invalid!!";
}
}
}
}
return canFlag;
}
bool BackendDbusHelper::checkSystemUpgrade()
{
bool canFlag = true;
QJsonObject jsonCmd;
jsonCmd["CmdId"] = LOCK_CMD_ID_SYSTEM_UPGRADE_CHECK;
QDBusPendingReply<QString> reply = GetInformation(QString(QJsonDocument(jsonCmd).toJson()));
reply.waitForFinished();
if (reply.isError()) {
qWarning() << "checkSystemUpgrade error: " << reply.error().message();
} else {
QString strResponse = reply.value();
QJsonParseError jsonParseError;
const QJsonDocument jsonDoc = QJsonDocument::fromJson(strResponse.toUtf8(), &jsonParseError);
if (jsonParseError.error != QJsonParseError::NoError) {
qInfo()<<"checkSystemUpgrade Parse json failed!!";
} else {
QJsonObject objRes = jsonDoc.object();
if (objRes.isEmpty()) {
qInfo()<<"checkSystemUpgrade Json is null!!";
} else {
if (objRes.contains("CmdId") && objRes.contains("Ret")) {
int nCmdId = objRes.value("CmdId").toInt(-1);
int nRet = objRes.value("Ret").toInt(-1);
if (nCmdId != LOCK_CMD_ID_SYSTEM_UPGRADE_CHECK || nRet != 0) {
qInfo()<<"checkSystemUpgrade Failed!!";
} else {
canFlag = objRes.value("Content").toBool();
}
} else {
qInfo()<<"checkSystemUpgrade Json is invalid!!";
}
}
}
}
return canFlag;
}
QString BackendDbusHelper::getPublicEncrypt()
{
QString publicEncrypt = "";

View File

@ -110,10 +110,15 @@ public:
* @return
*/
bool usdExternalDoAction(int actionType);
bool getPowerManagerCanSwitchUser();
bool getPowerManagerCanHibernate();
bool getPowerManagerCanPowerOff();
bool getPowerManagerCanReboot();
bool getPowerManagerCanSuspend();
bool getPowerManagerCanLockScreen();
bool getPowerManagerCanLogout();
bool checkSystemUpgrade();
QStringList getBatteryArgs();

View File

@ -60,7 +60,16 @@ bool LockDialogModel::parseCmdArguments(QStringList args, CommandLineArgs &cmdAr
QCommandLineOption hasLockOption(QStringLiteral("has-lock"),
QGuiApplication::translate("main", "show blank screensaver immediately and if lock"),
QGuiApplication::translate("has-lock", "if show lock"), "1");
parser.addOptions({lockOption, lstOption,sessionIdleOption , screensaverOption,blankOption,lscreensaverOption,delayOption,hasLockOption});
QCommandLineOption sessiontoolsOption({"t", QStringLiteral("session-tools")},
QCoreApplication::translate("main", "show the session tools"));
QCommandLineOption appBlockOption({"a", QStringLiteral("app-block")},
QCoreApplication::translate("main", "show the app block window"),
QGuiApplication::translate("action", "which block type"), "type");
QCommandLineOption multiUsersOption({"m", QStringLiteral("multiusers-block")},
QCoreApplication::translate("main", "show the multiUsers block window"),
QGuiApplication::translate("action", "which block type"), "type");
parser.addOptions({lockOption, lstOption,sessionIdleOption , screensaverOption,blankOption,lscreensaverOption,delayOption,
hasLockOption,sessiontoolsOption,appBlockOption,multiUsersOption});
parser.process(args);
QString strHostCloundPlatform = getHostCloudPlatform();
@ -75,7 +84,10 @@ bool LockDialogModel::parseCmdArguments(QStringList args, CommandLineArgs &cmdAr
&& !parser.isSet(lstOption)
&& !parser.isSet(screensaverOption)
&& !parser.isSet(lscreensaverOption)
&& !parser.isSet(blankOption))
&& !parser.isSet(blankOption)
&& !parser.isSet(sessiontoolsOption)
&& !parser.isSet(appBlockOption)
&& !parser.isSet(multiUsersOption))
{
return false;
}
@ -86,6 +98,7 @@ bool LockDialogModel::parseCmdArguments(QStringList args, CommandLineArgs &cmdAr
cmdArgs.isScreenSaver = parser.isSet(screensaverOption);
cmdArgs.isLockScreensaver = parser.isSet(lscreensaverOption);
cmdArgs.isBlank = parser.isSet(blankOption);
cmdArgs.isSessionTools = parser.isSet(sessiontoolsOption);
if (parser.isSet(hasLockOption)) {
int nHasLockValue = parser.value(hasLockOption).toInt();
if (nHasLockValue == 0) {
@ -97,6 +110,28 @@ bool LockDialogModel::parseCmdArguments(QStringList args, CommandLineArgs &cmdAr
if (parser.isSet(delayOption)) {
cmdArgs.nBlankDelay = parser.value(delayOption).toInt();
}
if (parser.isSet(appBlockOption)) {
QString opValue = parser.value(appBlockOption);
if (opValue == "Restart") {
cmdArgs.isAppBlock = 0;
} else if (opValue == "Shutdown") {
cmdArgs.isAppBlock = 1;
} else if (opValue == "Suspend") {
cmdArgs.isAppBlock = 2;
} else if (opValue == "Hibernate") {
cmdArgs.isAppBlock = 3;
} else if (opValue == "Logout") {
cmdArgs.isAppBlock = 4;
}
}
if (parser.isSet(multiUsersOption)) {
QString opValue = parser.value(multiUsersOption);
if (opValue == "Restart") {
cmdArgs.isMultiUserBlock = 0;
} else if (opValue == "Shutdown") {
cmdArgs.isMultiUserBlock = 1;
}
}
return true;
}
@ -147,6 +182,18 @@ void LockDialogModel::onRunningMessage(const QString &strMsg)
Q_EMIT showScreensaver();
}
if (cmdArgs.isSessionTools) {
Q_EMIT showSessionTools();
}
if (cmdArgs.isAppBlock != -1) {
Q_EMIT showAppBlockWindow(cmdArgs.isAppBlock);
}
if (cmdArgs.isMultiUserBlock != -1) {
Q_EMIT showMultiUsersBlockWindow(cmdArgs.isMultiUserBlock);
}
KillFocusOfKydroid();
}
@ -383,6 +430,8 @@ void LockDialogModel::onLockScreenConfChanged(const QString &key, QVariant value
m_lockTimeout = value.toInt();
} else if (key ==KEY_LOCK_ENABLED){
m_lockEnabled = value.toBool();
} else if (key == KEY_SLEEP_ACTIVATION_ENABLED) {
m_sleepActivationEnabled = value.toBool();
}
}
@ -412,6 +461,15 @@ void LockDialogModel::onTabletModeChanged(bool tabletMode)
Q_EMIT tabletModeChanged(tabletMode);
}
void LockDialogModel::onSessionConfChanged(const QString &key, QVariant value)
{
if (key == KEY_SESSION_LOGOUT_MUSIC) {
m_logoutMusic = value.toBool();
} else if (key == KEY_SESSION_POWEROFF_MUSIC) {
m_poweroffMusic = value.toBool();
}
}
void LockDialogModel::updateCapslockState(bool capslockState)
{
m_capslockState = capslockState;
@ -443,6 +501,11 @@ void LockDialogModel::updateLockEnabled(bool value)
m_lockEnabled = value;
}
void LockDialogModel::updateSleepActivationEnabled(bool value)
{
m_sleepActivationEnabled = value;
}
void LockDialogModel::updateLockTimeout(int value)
{
m_lockTimeout = value;
@ -495,6 +558,34 @@ void LockDialogModel::updateCanSuspend(bool canflag)
}
void LockDialogModel::updateCanLockScreen(bool canflag)
{
qWarning()<<__LINE__ << __FUNCTION__ << canflag;
m_CanLockScreen = canflag;
}
void LockDialogModel::updateCanSwitchUser(bool canflag)
{
qWarning()<<__LINE__ << __FUNCTION__ << canflag;
m_CanSwitchUser = canflag;
}
void LockDialogModel::updateCanLogout(bool canflag)
{
qWarning()<<__LINE__ << __FUNCTION__ << canflag;
m_CanLogout = canflag;
}
void LockDialogModel::updataCheckSystemUpgrade(bool canflag)
{
qWarning()<<__LINE__ << __FUNCTION__ << canflag;
m_sysUpgradeStatus = canflag;
}
void LockDialogModel::updateBatteryArgs(QStringList batteryArgs)
{
m_batteryArgs = batteryArgs;

View File

@ -45,6 +45,9 @@ public:
bool isBlank = false; /**< 是否黑色屏保锁定 */
bool isBlankHasLock = true; /**< 是否黑色屏保需要锁定 */
int nBlankDelay = 0; /**< 黑色屏保延迟锁定时间 */
bool isSessionTools = false; /**< 显示session电源管理界面*/
int isAppBlock = -1; /**< 显示应用阻塞关机/重启界面*/
int isMultiUserBlock = -1; /**< 显示多用户登录阻塞关机/重启界面*/
};
/**
* @brief
@ -125,6 +128,8 @@ public:
void updateLockEnabled(bool value);
void updateSleepActivationEnabled(bool value);
inline QStringList sessionsInfo() { return m_listSessions; }
inline void updateCurSession(const QString &strSession) { m_strCurSession = strSession; }
@ -147,6 +152,10 @@ public:
void updateSystemFontSize(double fontSize) { m_curFontSize = fontSize; }
void updateSessionLogoutMusic(bool logoutMusic) {m_logoutMusic = logoutMusic;}
void updateSessionPoweroffMusic(bool poweroffMusic) {m_poweroffMusic = poweroffMusic;}
inline AgreementInfoPtr agreementInfo() { return m_agreementInfo;}
inline bool getAgreementWindowShowLoginPrompt() { return m_agreementInfo->showLoginPrompt(); }
@ -170,11 +179,19 @@ public:
inline bool getCanSuspend() { return m_CanSuspend; }
inline bool getCanReboot() { return m_CanReboot; }
inline bool getCanPowerOff() { return m_CanPowerOff; }
inline bool getCanLockScreen() { return m_CanLockScreen; }
inline bool getCanSwitchUser() { return m_CanSwitchUser; }
inline bool getCanLogout() { return m_CanLogout; }
inline bool checkSystemUpgrade() { return m_sysUpgradeStatus; }
void updateCanHibernate(bool);
void updateCanReboot(bool);
void updateCanPowerOff(bool);
void updateCanSuspend(bool);
void updateCanLockScreen(bool);
void updateCanSwitchUser(bool);
void updateCanLogout(bool);
void updataCheckSystemUpgrade(bool);
inline QStringList getBatteryArgs() { return m_batteryArgs; }
@ -198,6 +215,12 @@ public:
inline bool getTabletMode() { return m_tabletMode; }
inline bool getSessionLogoutMusic() { return m_logoutMusic; }
inline bool getSessionPoweroffMusic() { return m_poweroffMusic; }
inline bool getSleepActivationEnabled() {return m_sleepActivationEnabled; }
public Q_SLOTS:
/**
* @brief
@ -240,6 +263,8 @@ public Q_SLOTS:
void onTabletModeChanged(bool tabletMode);
void onSessionConfChanged(const QString &key, QVariant value);
Q_SIGNALS:
/**
* @brief
@ -302,6 +327,21 @@ Q_SIGNALS:
*
*/
void showPowerManager();
/**
* @brief session电源管理
*
*/
void showSessionTools();
/**
* @brief
*
*/
void showAppBlockWindow(int actionType);
/**
* @brief
*
*/
void showMultiUsersBlockWindow(int actionType);
void currentUserChanged(const QString &strUserName);
@ -398,6 +438,10 @@ private:
bool m_CanReboot;
bool m_CanPowerOff;
bool m_CanSuspend;
bool m_CanLockScreen;
bool m_CanSwitchUser;
bool m_CanLogout;
bool m_sysUpgradeStatus;
QStringList m_batteryArgs;
QString m_batteryIconName;
@ -409,8 +453,12 @@ private:
int m_lockTimeout = 10;
bool m_lockEnabled = true;
double m_curFontSize;
bool m_sleepActivationEnabled = false;
bool m_tabletMode = false;
bool m_logoutMusic = false;
bool m_poweroffMusic = false;
};
#endif // LOCKDIALOGMODEL_H

View File

@ -58,6 +58,7 @@ void LockDialogPerformer::initConnections()
connect(m_bdHelper, &BackendDbusHelper::SecondRunParam, m_modelLockDialog, &LockDialogModel::onSecondRunParam);
connect(m_bdHelper, &BackendDbusHelper::lockScreenConfChanged, m_modelLockDialog, &LockDialogModel::onLockScreenConfChanged);
connect(m_bdHelper, &BackendDbusHelper::themeStyleConfChanged, m_modelLockDialog, &LockDialogModel::onThemeStyleConfChanged);
connect(m_bdHelper, &BackendDbusHelper::sessionConfChanged, m_modelLockDialog, &LockDialogModel::onSessionConfChanged);
// pam signals
connect(m_bdHelper, SIGNAL(pamShowMessage(QString, int)), m_modelLockDialog, SIGNAL(pamShowMessage(QString, int)));
@ -136,10 +137,14 @@ void LockDialogPerformer::initData()
m_modelLockDialog->updateScreensaverTheme(m_bdHelper->getSaverThemes());
m_modelLockDialog->updateScreensaverImageTSEffect(m_bdHelper->getLockScreenConf(KEY_IMAGE_TRANSITION_EFFECT).toInt());
m_modelLockDialog->updateScreensaverImageSwitchInterval(m_bdHelper->getLockScreenConf(KEY_IMAGE_SWITCH_INTERVAL).toInt());
m_modelLockDialog->updateCanSwitchUser(m_bdHelper->getPowerManagerCanSwitchUser());
m_modelLockDialog->updateCanHibernate(m_bdHelper->getPowerManagerCanHibernate());
m_modelLockDialog->updateCanReboot(m_bdHelper->getPowerManagerCanReboot());
m_modelLockDialog->updateCanPowerOff(m_bdHelper->getPowerManagerCanPowerOff());
m_modelLockDialog->updateCanSuspend(m_bdHelper->getPowerManagerCanSuspend());
m_modelLockDialog->updateCanLockScreen(m_bdHelper->getPowerManagerCanLockScreen());
m_modelLockDialog->updateCanLogout(m_bdHelper->getPowerManagerCanLogout());
m_modelLockDialog->updataCheckSystemUpgrade(m_bdHelper->checkSystemUpgrade());
m_modelLockDialog->updateBatteryArgs(m_bdHelper->getBatteryArgs());
m_modelLockDialog->updateBatteryIconName(m_bdHelper->getBatteryIconName());
m_modelLockDialog->updateIsBattery(m_bdHelper->getIsBattery());
@ -148,7 +153,10 @@ void LockDialogPerformer::initData()
m_modelLockDialog->updateLoggedInUsersCount();
m_modelLockDialog->updateLockTimeout(m_bdHelper->getLockScreenConf(KEY_LOCK_TIMEOUT).toInt());
m_modelLockDialog->updateLockEnabled(m_bdHelper->getLockScreenConf(KEY_LOCK_ENABLED).toBool());
m_modelLockDialog->updateSleepActivationEnabled(m_bdHelper->getLockScreenConf(KEY_SLEEP_ACTIVATION_ENABLED).toBool());
m_modelLockDialog->updateSystemFontSize(m_bdHelper->getThemeStyleConf(KEY_SYSTEM_FONT_SIZE).toDouble());
m_modelLockDialog->updateTabletMode(m_bdHelper->getCurTabletMode());
m_modelLockDialog->updateSessionLogoutMusic(m_bdHelper->getSessionConf(KEY_SESSION_LOGOUT_MUSIC).toBool());
m_modelLockDialog->updateSessionPoweroffMusic(m_bdHelper->getSessionConf(KEY_SESSION_POWEROFF_MUSIC).toBool());
}

View File

@ -183,6 +183,18 @@ int main(int argc, char *argv[])
Q_EMIT lockDialogModel->showScreensaver();
}
if(cmdArgs.isSessionTools) {
Q_EMIT lockDialogModel->showSessionTools();
}
if (cmdArgs.isAppBlock != -1) {
Q_EMIT lockDialogModel->showAppBlockWindow(cmdArgs.isAppBlock);
}
if (cmdArgs.isMultiUserBlock != -1) {
Q_EMIT lockDialogModel->showMultiUsersBlockWindow(cmdArgs.isMultiUserBlock);
}
KillFocusOfKydroid();
return app.exec();

View File

@ -49,6 +49,7 @@ void BlockWidget::initUi()
QHBoxLayout *listLayout = new QHBoxLayout();
listLayout->setAlignment(Qt::AlignCenter);
m_listView = new QListView(this);
m_listView->setObjectName(QString::fromUtf8("applist"));
listLayout->addWidget(m_listView);
@ -73,7 +74,7 @@ void BlockWidget::initUi()
m_curFontSize = m_modelLockDialog->getCurFontSize();
m_ptToPx = m_modelLockDialog->getPtToPx();
connect(m_modelLockDialog, &LockDialogModel::fontSizeChanged, this, &BlockWidget::onFontSizeChanged);
m_tipLabel->setFontSize((14 + m_curFontSize)*m_ptToPx);
m_tipLabel->setFontSize((18 + m_curFontSize)*m_ptToPx);
connect(m_cancelButton, &QPushButton::clicked, this, [&]() { emit cancelButtonclicked(); });
connect(m_confirmButton, &QPushButton::clicked, this, [&]() { emit confirmButtonclicked(); });
@ -82,7 +83,7 @@ void BlockWidget::initUi()
void BlockWidget::onFontSizeChanged(double fontSize)
{
m_curFontSize = fontSize;
m_tipLabel->setFontSize((14 + m_curFontSize)*m_ptToPx);
m_tipLabel->setFontSize((18 + m_curFontSize)*m_ptToPx);
sysFont.setPointSize((16 + m_curFontSize) *m_ptToPx);
m_confirmButton->setFont(sysFont);
@ -114,7 +115,7 @@ void BlockWidget::setTips(const QString tips)
m_confirmButton->setStyleSheet("QPushButton{background: rgba(255, 255, 255, 0.2);border-radius: 8px;color: white;}"
"QPushButton:hover{background: rgba(255, 255, 255, 0.4);border-radius: 8px;}"
"QPushButton:pressed {background: rgba(255, 255, 255, 0.3);border-radius: 8px;}");
sysFont.setPointSize((16 + m_curFontSize) *m_ptToPx);
sysFont.setPointSize((20 + m_curFontSize) *m_ptToPx);
m_confirmButton->setFont(sysFont);
m_cancelButton->setFont(sysFont);
m_confirmButton->show();
@ -130,16 +131,19 @@ void BlockWidget::setWarning(QStringList list, int type)
m_tipLabel->setFixedWidth(this->width());
switch (type) {
case 0:
m_tipLabel->setText(tr("The following program is running to prevent the system from reboot!"));
m_tipLabel->setText(tr("The following programs prevent restarting, you can click \"Cancel\" and then close these programs."));
break;
case 1:
m_tipLabel->setText(tr("The following program is running to prevent the system from shutting down!"));
m_tipLabel->setText(tr("The following programs prevent the shutdown, you can click \"Cancel\" and then close these programs."));
break;
case 2:
m_tipLabel->setText(tr("The following program is running to prevent the system from suspend!"));
m_tipLabel->setText(tr("The following programs prevent suspend, you can click \"Cancel\" and then close these programs."));
break;
case 3:
m_tipLabel->setText(tr("The following program is running to prevent the system from hibernate!"));
m_tipLabel->setText(tr("The following programs prevent hibernation, you can click \"Cancel\" and then close these programs."));
break;
case 4:
m_tipLabel->setText(tr("The following programs prevent you from logging out, you can click \"Cancel\" and then close them."));
break;
default:
break;
@ -159,7 +163,12 @@ void BlockWidget::setWarning(QStringList list, int type)
model->appendRow(new QStandardItem(icon, appName));
m_listView->verticalScrollMode();
m_listView->setStyleSheet("color:white; background-color: rgba(255,255,255,30%); border-radius: 12px;");
m_listView->setStyleSheet("QListView#applist{font:10pt;color:white;background-color: rgb(255,255,255,80);border-style: outset;border-width: 0px;border-radius: 6px;}\
QListView#applist::item{height:48px;margin-top:2px;border-radius: 6px;}\
QListView#applist::item::selected {background-color: rgb(255,255,255,80);border: 1px solid #296CD9;\
height:48px;margin-top:2px;border-radius: 6px;}\
QListView#applist::item::hover {background-color: rgb(255,255,255,80);height:48px;margin-top:2px;border-radius: 6px;}");
sysFont.setPointSize((10 + m_curFontSize) *m_ptToPx);
m_listView->setFont(sysFont);
m_listView->setEditTriggers(QAbstractItemView::NoEditTriggers);
@ -169,9 +178,9 @@ void BlockWidget::setWarning(QStringList list, int type)
m_cancelButton->setFixedSize(120, 48);
m_confirmButton->hide();
m_cancelButton->setStyleSheet("QPushButton{background: rgba(255, 255, 255, 0.2);border-radius: 8px;color: white;}"
"QPushButton:hover{background: rgba(255, 255, 255, 0.4);border-radius: 8px;}"
"QPushButton:pressed {background: rgba(255, 255, 255, 0.3);border-radius: 8px;}");
m_cancelButton->setStyleSheet("QPushButton{background: rgba(255, 255, 255, 0.2);border-radius: 24px;color: white;}"
"QPushButton:hover{background: rgba(255, 255, 255, 0.4);border-radius:24px;}"
"QPushButton:pressed {background: rgba(255, 255, 255, 0.3);border-radius: 24px;}");
sysFont.setPointSize((16 + m_curFontSize) *m_ptToPx);
m_cancelButton->setFont(sysFont);
m_cancelButton->setText(tr("Cancel"));

View File

@ -95,6 +95,8 @@ void FullBackgroundWidget::initUI()
if (!m_lockWidget) {
m_lockWidget = new LockWidget(m_modelLockDialog, this);
connect(m_lockWidget, &LockWidget::authSucceed, this, &FullBackgroundWidget::onAuthSucceed);
connect(m_lockWidget, &LockWidget::sessionToolsExit, this, &FullBackgroundWidget::onCloseScreensaver);
connect(m_lockWidget, &LockWidget::showBlankScreensaver, this, &FullBackgroundWidget::onShowBlankScreensaver);
moveToPrimaryScreen();
}
@ -187,6 +189,9 @@ void FullBackgroundWidget::initConnections()
connect(m_modelLockDialog, &LockDialogModel::showScreensaver, this, &FullBackgroundWidget::onShowScreensaver);
connect(m_modelLockDialog, &LockDialogModel::showSessionIdle, this, &FullBackgroundWidget::onShowSessionIdle);
connect(m_modelLockDialog, &LockDialogModel::SecondRunParam, this, &FullBackgroundWidget::onSecondRunParam);
connect(m_modelLockDialog, &LockDialogModel::showSessionTools, this, &FullBackgroundWidget::onShowSessionTools);
connect(m_modelLockDialog, &LockDialogModel::showAppBlockWindow, this, &FullBackgroundWidget::onShowAppBlockWindow);
connect(m_modelLockDialog, &LockDialogModel::showMultiUsersBlockWindow, this, &FullBackgroundWidget::onShowMultiUsersBlockWindows);
}
void FullBackgroundWidget::setLockState()
@ -225,6 +230,22 @@ void FullBackgroundWidget::onSecondRunParam(const QString &str)
onShowSessionIdle();
} else if (str == "Screensaver") {
onShowScreensaver();
} else if (str == "CmdSessionTools") {
onShowSessionTools();
} else if (str == "CmdRestartAppBlock") {
onShowAppBlockWindow(0);
} else if (str == "CmdPowerOffAppBlock") {
onShowAppBlockWindow(1);
} else if (str == "CmdSuspendAppBlock") {
onShowAppBlockWindow(2);
} else if (str == "CmdHibernateAppBlock") {
onShowAppBlockWindow(3);
} else if (str == "CmdLogoutAppBlock") {
onShowAppBlockWindow(4);
} else if (str == "CmdRestartMulTiUserBlock") {
onShowMultiUsersBlockWindows(0);
} else if (str == "CmdPowerOffMulTiUserBlock") {
onShowMultiUsersBlockWindows(1);
}
}
@ -271,6 +292,12 @@ void FullBackgroundWidget::onShowBlankScreensaver(int nDelay, bool isHasLock)
void FullBackgroundWidget::onShowLock(bool isStartup)
{
if (m_isSessionTools) {
m_isSessionTools = false;
if (m_lockWidget && !m_lockWidget->isHidden())
m_lockWidget->exitSubWidget();
}
screenStatus = (ScreenStatus)(screenStatus | SCREEN_LOCK);
m_isStartupMode = isStartup;
show();
@ -280,6 +307,50 @@ void FullBackgroundWidget::onShowLock(bool isStartup)
m_lockWidget->show();
}
void FullBackgroundWidget::onShowSessionTools()
{
screenStatus = (ScreenStatus)(screenStatus | SCREEN_LOCK);
m_isSessionTools = true;
show();
Q_EMIT m_modelLockDialog->setCurrentUser(m_modelLockDialog->defaultUserName());
Q_EMIT m_modelLockDialog->lockStateChanged(true);
if (m_lockWidget && !m_lockWidget->isHidden())
m_lockWidget->onShowPowerListWidget(true);
}
void FullBackgroundWidget::onShowAppBlockWindow(int actionType)
{
QStringList lockcheck;
if (actionType == 0 || actionType == 1 || actionType == 4) {
lockcheck = m_modelLockDialog->getShutdownLockcheck();
} else if (actionType == 2 || actionType == 3) {
lockcheck = m_modelLockDialog->getSleepLockcheck();
}
if (!lockcheck.isEmpty()) {
show();
if (m_lockWidget && !m_lockWidget->isHidden())
screenStatus = (ScreenStatus)(screenStatus | SCREEN_LOCK);
Q_EMIT m_modelLockDialog->setCurrentUser(m_modelLockDialog->defaultUserName());
Q_EMIT m_modelLockDialog->lockStateChanged(true);
m_isSessionTools = true;
if (m_lockWidget && !m_lockWidget->isHidden())
m_lockWidget->onShowInhibitWarning(lockcheck, actionType, true);
}
}
void FullBackgroundWidget::onShowMultiUsersBlockWindows(int actionType)
{
screenStatus = (ScreenStatus)(screenStatus | SCREEN_LOCK);
m_isSessionTools = true;
show();
if (m_lockWidget && !m_lockWidget->isHidden())
Q_EMIT m_modelLockDialog->setCurrentUser(m_modelLockDialog->defaultUserName());
Q_EMIT m_modelLockDialog->lockStateChanged(true);
if (m_lockWidget && !m_lockWidget->isHidden())
m_lockWidget->onMulUsersLogined(actionType, true);
}
void FullBackgroundWidget::onShowSessionIdle()
{
onShowScreensaver();
@ -295,6 +366,12 @@ void FullBackgroundWidget::onShowLockScreensaver()
void FullBackgroundWidget::onShowScreensaver()
{
if (m_isSessionTools) {
m_isSessionTools = false;
if (m_lockWidget && !m_lockWidget->isHidden())
m_lockWidget->exitSubWidget(true);
}
screenStatus = (ScreenStatus)(screenStatus | SCREEN_SAVER);
for (auto screen : QGuiApplication::screens()) {
@ -379,12 +456,6 @@ void FullBackgroundWidget::onCloseScreensaver()
screenStatus = UNDEFINED;
}
void FullBackgroundWidget::onShowPowerManager()
{
show();
Q_EMIT m_modelLockDialog->lockStateChanged(true);
}
void FullBackgroundWidget::onDesktopResized()
{
qDebug() << "[FullBackgroundWidget] [onDesktopResized]";
@ -416,8 +487,13 @@ void FullBackgroundWidget::onPrepareForSleep(bool sleep)
onClearScreensaver();
} else {
repaint();
if (m_lockWidget)
if (m_lockWidget) {
if (m_lockWidget->isHidden()) {
m_lockWidget->show();
m_lockWidget->activateWindow();
}
m_lockWidget->startAuth();
}
// inhibit();
}
}

View File

@ -72,13 +72,15 @@ public Q_SLOTS:
void onShowSessionIdle();
void onShowLockScreensaver();
void onShowScreensaver();
void onShowPowerManager();
void onCloseScreensaver();
void onDesktopResized();
void onPrepareForSleep(bool sleep);
void laterActivate();
void setLockState();
void onClearScreensaver();
void onShowSessionTools();
void onShowAppBlockWindow(int actionType);
void onShowMultiUsersBlockWindows(int actionType);
void onCurUserChanged(const QString &strUserName);
void onUpdateUserBackground(const QString &strUserName);
@ -157,6 +159,8 @@ private:
int m_RREventBase;
int m_RRErrorBase;
QList<QString> m_listMonitors;
bool m_isSessionTools = false;
};
#endif // FULLBACKGROUNDWIDGET_H

View File

@ -99,8 +99,25 @@ bool LockWidget::eventFilter(QObject *obj, QEvent *event)
return false;
}
bool LockWidget::exitSubWidget()
bool LockWidget::exitSubWidget(bool isForScreensaver)
{
if (m_isSessionTools) {
authDialog->setFocus();
authDialog->show();
buttonListWidget->show();
m_timeWidget->show();
m_powerListWidget->hide();
if (m_systemMonitorBtn && m_systemMonitorBtn->isVisible()) {
m_systemMonitorBtn->hide();
}
m_blockWidget->hide();
m_powerManagerButton->setClickedStatus(NORMAL);
if (!isForScreensaver) {
Q_EMIT sessionToolsExit();
}
m_isSessionTools = false;
return false;
}
bool allExited = true;
if (m_userListWidget && m_userListWidget->isVisible()) {
m_userListWidget->hide();
@ -110,8 +127,11 @@ bool LockWidget::exitSubWidget()
if (m_powerListWidget && m_powerListWidget->isVisible()) {
authDialog->setFocus();
authDialog->show();
authDialog->lower();
m_powerListWidget->hide();
buttonListWidget->show();
if (m_systemMonitorBtn && m_systemMonitorBtn->isVisible()) {
m_systemMonitorBtn->hide();
}
m_powerManagerButton->setClickedStatus(NORMAL);
allExited = false;
}
@ -136,6 +156,13 @@ bool LockWidget::exitSubWidget()
m_sessionButton->setClickedStatus(NORMAL);
allExited = false;
}
if (m_blockWidget && m_blockWidget->isVisible()) {
m_blockWidget->hide();
m_timeWidget->show();
m_powerListWidget->show();
buttonListWidget->show();
allExited = false;
}
authDialog->setFocus();
return allExited;
@ -177,9 +204,16 @@ void LockWidget::resizeEvent(QResizeEvent *event)
m_userListWidget->updateWidgetSize();
qDebug() << "m_userListWidget:" << m_userListWidget->geometry();
}
m_powerListWidget->setMaxHeight(height() - (80 + m_timeWidget->height() + m_systemMonitorBtn->height()));
m_powerListWidget->updateWidgetSize();
m_powerListWidget->move((width() - m_powerListWidget->width()) / 2,
(height() - m_powerListWidget->height()) / 2 - BOTTOM_MARGIN * scale);
if (m_powerListWidget->getScrollShowStatus()) { //如果显示Scroll直接从时间窗口底部开始显示
m_powerListWidget->move((width() - m_powerListWidget->width())/2,
m_timeWidget->height() + 30);
} else { //居中显示
m_powerListWidget->move((width() - m_powerListWidget->width())/2,
(height() - m_powerListWidget->height())/2);
}
updateBottomButton();
if (m_curUserInfo->isLoggedIn() && m_sessionButton) {
@ -219,6 +253,10 @@ void LockWidget::resizeEvent(QResizeEvent *event)
height() - BOTTOM_MARGIN * scale - buttonListWidget->height()
- buttonListWidget->spacing() * scale - m_userListWidget->height());
}
if (m_systemMonitorBtn) {
m_systemMonitorBtn->move((width() - m_systemMonitorBtn->width()) / 2, height() - m_systemMonitorBtn->height() - 40);
}
onSetVirkeyboardPos();
}
@ -293,6 +331,7 @@ void LockWidget::initUI()
initPowerWidget();
initButtonWidget();
initBlockWidget();
initSystemMonitorBtn();
// authDialog->setFocus();
// Q_EMIT m_modelLockDialog->setCurrentUser(m_modelLockDialog->defaultUserName());
}
@ -366,14 +405,16 @@ void LockWidget::initSessionWidget()
void LockWidget::initPowerWidget()
{
m_powerListWidget = new PowerListWidget(m_modelLockDialog, this);
m_powerListWidget->setMaximumHeight(height() / 2);
m_powerListWidget->move((width() - m_powerListWidget->width()) / 2,
(height() - m_powerListWidget->height()) / 2 - 80);
m_powerListWidget->hide();
connect(m_powerListWidget, &MyListWidget::currentItemChanged, this, &LockWidget::onPowerItemChanged);
connect(m_powerListWidget, &PowerListWidget::showInhibitWarning, this, &LockWidget::onShowInhibitWarning);
connect(m_powerListWidget, &PowerListWidget::mulUsersLogined, this, &LockWidget::onMulUsersLogined);
connect(m_powerListWidget, &PowerListWidget::itemClicked, this, &LockWidget::onShowPowerListWidget);
connect(m_powerListWidget, &PowerListWidget::lockScreenClicked, this, &LockWidget::onLockScreenClicked);
connect(m_powerListWidget, &PowerListWidget::suspendClicked, this, &LockWidget::onSuspendClicked);
connect(m_powerListWidget, &PowerListWidget::itemClicked, this, &LockWidget::onPowerItemClicked);
connect(m_powerListWidget, &PowerListWidget::switchuserClicked, this, &LockWidget::onSwitchuserClicked);
m_powerListWidget->clearFocus();
}
@ -484,16 +525,18 @@ void LockWidget::initButtonWidget()
connect(m_virKbButton, &StatusButton::clicked, this, [this]() { onShowVirtualKeyboard(); });
onShowVirtualKeyboard(m_modelLockDialog->getTabletMode());
if (m_powerListWidget->count() > 1) {
// if (m_powerListWidget->count() > 1 ) {
m_powerManagerButton = new StatusButton(this, BOTBUTTON);
QListWidgetItem *buttonItem = new QListWidgetItem();
buttonItem->setSizeHint(QSize(48, 48));
buttonListWidget->insertItem(buttonListWidget->count(), buttonItem);
buttonListWidget->setItemWidget(buttonItem, m_powerManagerButton);
QListWidgetItem *powerButtonItem = new QListWidgetItem();
powerButtonItem->setSizeHint(QSize(48, 48));
buttonListWidget->insertItem(buttonListWidget->count(), powerButtonItem);
buttonListWidget->setItemWidget(powerButtonItem, m_powerManagerButton);
m_powerManagerButton->setIcon(QIcon(":/image/assets/shutdown.svg"));
buttonListWidget->addItem(buttonItem);
connect(m_powerManagerButton, &StatusButton::clicked, this, [this]() { onShowPowerListWidget(); });
}
buttonListWidget->addItem(powerButtonItem);
connect(m_powerManagerButton, &StatusButton::clicked, this, [this]() {
onShowPowerListWidget();
});
// }
if (m_curUserInfo->isLoggedIn() && m_sessionButton) {
buttonListWidget->setFixedSize(QSize(48 * (buttonListWidget->count() - 1)
@ -519,6 +562,21 @@ void LockWidget::initBlockWidget()
connect(m_blockWidget, SIGNAL(confirmButtonclicked()), this, SLOT(onConfirmBtnClicked()));
}
void LockWidget::initSystemMonitorBtn()
{
m_systemMonitorBtn = new StatusButton(this, NORMALBTN);
QFont sysBtnFont;
sysBtnFont.setFamily(m_curFont);
sysBtnFont.setPointSize((16 + m_curFontSize) * m_ptToPx);
m_systemMonitorBtn->setFont(sysBtnFont);
m_systemMonitorBtn->hide();
m_systemMonitorBtn->setFixedHeight(48);
m_systemMonitorBtn->setText(tr("system-monitor"));
m_systemMonitorBtn->setContentsMargins(5, 0, 5, 0);
m_systemMonitorBtn->adjustSize();
connect(m_systemMonitorBtn, &StatusButton::clicked, this, &LockWidget::doSystemMonitor);
}
void LockWidget::initUsdMediaKeys()
{
m_areaScreenShot = m_modelLockDialog->getUsdAreaScreenShotKey();
@ -543,10 +601,10 @@ void LockWidget::updateBottomButton()
{
QList<StatusButton *> statusButton = this->findChildren<StatusButton *>();
for (auto button : statusButton) {
if (button->getButtonTyoe() == POWERBUTTON) {
if (button->getButtonType() == POWERBUTTON) {
button->setFixedSize(130, 130);
button->setIconSize(QSize(130, 130));
} else {
} else if (button->getButtonType() != NORMALBTN) {
button->setFixedSize(48, 48);
button->setIconSize(QSize(24, 24));
}
@ -628,6 +686,13 @@ void LockWidget::onPowerItemClicked(QListWidgetItem *item)
currentItem->setSelected(CLICKED);
currentItem->clicked();
}
if (m_isSessionTools && m_blockWidget->isHidden()) {
exitSubWidget();
Q_EMIT sessionToolsExit();
m_isSessionTools = false;
}/* else if (m_blockWidget->isHidden()) {
exitSubWidget();
}*/
}
void LockWidget::onUsersInfoChanged()
@ -757,12 +822,18 @@ void LockWidget::onShowSessionListWidget()
m_sessionListWidget->show();
m_sessionListWidget->setFocus();
m_sessionButton->setClickedStatus(CLICKED);
if (m_networkWidget && m_networkWidget->isVisible())
if (m_networkWidget && m_networkWidget->isVisible()) {
m_networkWidget->hide();
if (batteryWidget && batteryWidget->isVisible())
m_networkButton->setClickedStatus(NORMAL);
}
if (batteryWidget && batteryWidget->isVisible()) {
batteryWidget->hide();
if (m_userListWidget && m_userListWidget->isVisible())
m_batteryonButton->setClickedStatus(NORMAL);
}
if (m_userListWidget && m_userListWidget->isVisible()) {
m_userListWidget->hide();
m_userButton->setClickedStatus(NORMAL);
}
} else {
m_sessionListWidget->hide();
m_sessionButton->setClickedStatus(NORMAL);
@ -784,12 +855,18 @@ void LockWidget::onShowBatteryWidget()
if (batteryWidget && batteryWidget->isHidden()) {
batteryWidget->show();
m_batteryonButton->setClickedStatus(CLICKED);
if (m_networkWidget && m_networkWidget->isVisible())
if (m_networkWidget && m_networkWidget->isVisible()) {
m_networkWidget->hide();
if (m_userListWidget && m_userListWidget->isVisible())
m_networkButton->setClickedStatus(NORMAL);
}
if (m_userListWidget && m_userListWidget->isVisible()) {
m_userListWidget->hide();
if (m_sessionListWidget && m_sessionListWidget->isVisible())
m_userButton->setClickedStatus(NORMAL);
}
if (m_sessionListWidget && m_sessionListWidget->isVisible()) {
m_sessionListWidget->hide();
m_sessionButton->setClickedStatus(NORMAL);
}
} else {
batteryWidget->hide();
m_batteryonButton->setClickedStatus(NORMAL);
@ -801,14 +878,20 @@ void LockWidget::onShowUserListWidget()
initUserWidget();
if (m_userListWidget && m_userListWidget->isHidden()) {
m_userListWidget->show();
m_userListWidget->setFocus();
// m_userListWidget->setFocus();
m_userButton->setClickedStatus(CLICKED);
if (m_networkWidget && m_networkWidget->isVisible())
if (m_networkWidget && m_networkWidget->isVisible()) {
m_networkWidget->hide();
if (batteryWidget && batteryWidget->isVisible())
m_networkButton->setClickedStatus(NORMAL);
}
if (batteryWidget && batteryWidget->isVisible()) {
batteryWidget->hide();
if (m_sessionListWidget && m_sessionListWidget->isVisible())
m_batteryonButton->setClickedStatus(NORMAL);
}
if (m_sessionListWidget && m_sessionListWidget->isVisible()) {
m_sessionListWidget->hide();
m_sessionButton->setClickedStatus(NORMAL);
}
} else {
m_userListWidget->hide();
m_userButton->setClickedStatus(NORMAL);
@ -836,12 +919,18 @@ void LockWidget::onShowNetworkWidget()
} else {
m_networkWidget->show();
m_networkButton->setClickedStatus(CLICKED);
if (m_userListWidget && m_userListWidget->isVisible())
if (m_userListWidget && m_userListWidget->isVisible()) {
m_userListWidget->hide();
if (batteryWidget && batteryWidget->isVisible())
m_userButton->setClickedStatus(NORMAL);
}
if (batteryWidget && batteryWidget->isVisible()) {
batteryWidget->hide();
if (m_sessionListWidget && m_sessionListWidget->isVisible())
m_batteryonButton->setClickedStatus(NORMAL);
}
if (m_sessionListWidget && m_sessionListWidget->isVisible()) {
m_sessionListWidget->hide();
m_sessionButton->setClickedStatus(NORMAL);
}
}
}
@ -857,12 +946,18 @@ void LockWidget::onLineEditClicked()
m_virtualKeyboardWidget, &VirtualKeyboardWidget::aboutToFloat, this, &LockWidget::onNetWorkResetLocation);
}
if (m_isTabletMode) {
if (batteryWidget && batteryWidget->isVisible())
if (batteryWidget && batteryWidget->isVisible()) {
batteryWidget->hide();
if (m_sessionListWidget && m_sessionListWidget->isVisible())
m_batteryonButton->setClickedStatus(NORMAL);
}
if (m_sessionListWidget && m_sessionListWidget->isVisible()) {
m_sessionListWidget->hide();
if (m_userListWidget && m_userListWidget->isVisible())
m_sessionButton->setClickedStatus(NORMAL);
}
if (m_userListWidget && m_userListWidget->isVisible()) {
m_userListWidget->hide();
m_userButton->setClickedStatus(NORMAL);
}
m_virtualKeyboardWidget->show();
authDialog->setFocus();
}
@ -880,12 +975,18 @@ void LockWidget::onShowVirtualKeyboard()
m_virtualKeyboardWidget, &VirtualKeyboardWidget::aboutToFloat, this, &LockWidget::onNetWorkResetLocation);
}
if (m_virtualKeyboardWidget->isHidden()) {
if (batteryWidget && batteryWidget->isVisible())
if (batteryWidget && batteryWidget->isVisible()) {
batteryWidget->hide();
if (m_sessionListWidget && m_sessionListWidget->isVisible())
m_batteryonButton->setClickedStatus(NORMAL);
}
if (m_sessionListWidget && m_sessionListWidget->isVisible()) {
m_sessionListWidget->hide();
if (m_userListWidget && m_userListWidget->isVisible())
m_sessionButton->setClickedStatus(NORMAL);
}
if (m_userListWidget && m_userListWidget->isVisible()) {
m_userListWidget->hide();
m_userButton->setClickedStatus(NORMAL);
}
m_virtualKeyboardWidget->show();
authDialog->setFocus();
} else {
@ -917,12 +1018,18 @@ void LockWidget::onShowVirtualKeyboard(bool tabletMode)
m_virtualKeyboardWidget, &VirtualKeyboardWidget::aboutToFloat, this, &LockWidget::onNetWorkResetLocation);
}
if (tabletMode) {
if (batteryWidget && batteryWidget->isVisible())
if (batteryWidget && batteryWidget->isVisible()) {
batteryWidget->hide();
if (m_sessionListWidget && m_sessionListWidget->isVisible())
m_batteryonButton->setClickedStatus(NORMAL);
}
if (m_sessionListWidget && m_sessionListWidget->isVisible()) {
m_sessionListWidget->hide();
if (m_userListWidget && m_userListWidget->isVisible())
m_sessionButton->setClickedStatus(NORMAL);
}
if (m_userListWidget && m_userListWidget->isVisible()) {
m_userListWidget->hide();
m_userButton->setClickedStatus(NORMAL);
}
m_virtualKeyboardWidget->show();
authDialog->setFocus();
} else {
@ -941,39 +1048,74 @@ void LockWidget::onShowVirtualKeyboard(bool tabletMode)
m_virKbButton->setClickedStatus(NORMAL);
}
void LockWidget::onShowPowerListWidget()
void LockWidget::onShowPowerListWidget(bool issessionTools)
{
if (issessionTools) {
m_powerListWidget->setPowerType(SESSION);
m_isSessionTools = issessionTools;
} else {
m_powerListWidget->setPowerType(SAVER);
}
if (m_powerListWidget->isHidden()) {
m_powerListWidget->show();
authDialog->hide();
m_powerListWidget->clearFocus();
buttonListWidget->clearFocus();
if (m_powerListWidget->getScrollShowStatus()) { //如果显示Scroll直接从时间窗口底部开始显示
m_powerListWidget->move((width() - m_powerListWidget->width())/2,
m_timeWidget->height() + 30);
} else { //居中显示
m_powerListWidget->move((width() - m_powerListWidget->width())/2,
(height() - m_powerListWidget->height())/2);
}
if (m_isSessionTools) {
m_systemMonitorBtn->show();
buttonListWidget->hide();
}
} else {
m_powerListWidget->hide();
authDialog->show();
authDialog->setFocus();
m_systemMonitorBtn->hide();
buttonListWidget->show();
}
if (m_isInhibitStatus) {
authDialog->hide();
m_powerListWidget->hide();
buttonListWidget->hide();
m_timeWidget->hide();
}
// if (m_isInhibitStatus) {
// authDialog->hide();
// m_powerListWidget->hide();
// buttonListWidget->hide();
// m_timeWidget->hide();
// }
if (m_userListWidget && m_userListWidget->isVisible())
if (m_userListWidget && m_userListWidget->isVisible()) {
m_userListWidget->hide();
if (m_virtualKeyboardWidget && m_virtualKeyboardWidget->isVisible())
m_userButton->setClickedStatus(NORMAL);
}
if (m_virtualKeyboardWidget && m_virtualKeyboardWidget->isVisible()) {
m_virtualKeyboardWidget->hide();
if (batteryWidget && batteryWidget->isVisible())
m_virKbButton->setClickedStatus(NORMAL);
}
if (batteryWidget && batteryWidget->isVisible()) {
batteryWidget->hide();
if (m_networkWidget && m_networkWidget->isVisible())
m_batteryonButton->setClickedStatus(NORMAL);
}
if (m_networkWidget && m_networkWidget->isVisible()) {
m_networkWidget->hide();
if (m_sessionListWidget && m_sessionListWidget->isVisible())
m_networkButton->setClickedStatus(NORMAL);
}
if (m_sessionListWidget && m_sessionListWidget->isVisible()) {
m_sessionListWidget->hide();
m_sessionButton->setClickedStatus(NORMAL);
}
m_powerManagerButton->setClickedStatus(NORMAL);
}
void LockWidget::doSystemMonitor()
{
qDebug() << "doSystemMonitor....";
QProcess::startDetached("ukui-system-monitor", QStringList());
}
void LockWidget::onSetVirkeyboardPos()
{
if (m_virtualKeyboardWidget) {
@ -1011,22 +1153,50 @@ void LockWidget::onHideVirkeyboard()
}
}
void LockWidget::onShowInhibitWarning(QStringList list, int type)
void LockWidget::onShowInhibitWarning(QStringList list, int type, bool iscommand)
{
authDialog->hide();
buttonListWidget->hide();
m_timeWidget->hide();
if (m_userListWidget && m_userListWidget->isVisible()) {
m_userListWidget->hide();
m_userButton->setClickedStatus(NORMAL);
}
m_powerListWidget->hide();
m_blockWidget->setGeometry(this->geometry());
m_blockWidget->setWarning(list, type);
m_blockWidget->show();
m_isInhibitStatus = true;
if (!m_isSessionTools)
m_isSessionTools = iscommand;
if (m_isSessionTools)
m_systemMonitorBtn->show();
}
void LockWidget::onMulUsersLogined(QString inhibitType)
void LockWidget::onMulUsersLogined(int inhibitType, bool iscommand)
{
m_inhibitType = inhibitType;
authDialog->hide();
buttonListWidget->hide();
m_timeWidget->hide();
m_powerListWidget->hide();
if (m_userListWidget && m_userListWidget->isVisible()) {
m_userListWidget->hide();
m_userButton->setClickedStatus(NORMAL);
}
m_blockWidget->setGeometry(this->geometry());
m_blockWidget->setTips(
tr("Multiple users are logged in at the same time.Are you sure you want to %1 this system?").arg(inhibitType));
if (inhibitType == 0) {
m_inhibitType = "Reboot";
m_blockWidget->setTips(tr("Multiple users are logged in at the same time.Are you sure you want to %1 this system?").arg(tr("Reboot")));
} else if (inhibitType == 1) {
m_inhibitType = "PowerOff";
m_blockWidget->setTips(tr("Multiple users are logged in at the same time.Are you sure you want to %1 this system?").arg(tr("Shut Down")));
}
m_blockWidget->show();
m_isInhibitStatus = true;
if (!m_isSessionTools)
m_isSessionTools = iscommand;
if (m_isSessionTools)
m_systemMonitorBtn->show();
}
void LockWidget::onConfirmBtnClicked()
@ -1034,9 +1204,15 @@ void LockWidget::onConfirmBtnClicked()
m_blockWidget->hide();
m_powerListWidget->hide();
authDialog->show();
m_timeWidget->show();
buttonListWidget->show();
m_isInhibitStatus = false;
Q_EMIT m_modelLockDialog->setPowerManager(m_inhibitType);
if (m_isSessionTools) {
// m_isSessionTools = false;
exitSubWidget();
Q_EMIT sessionToolsExit();
}
}
void LockWidget::onCancelBtnClicked()
@ -1046,6 +1222,34 @@ void LockWidget::onCancelBtnClicked()
m_powerListWidget->show();
buttonListWidget->show();
m_timeWidget->show();
if (m_isSessionTools) {
// m_isSessionTools = false;
exitSubWidget();
Q_EMIT sessionToolsExit();
}
}
void LockWidget::onLockScreenClicked()
{
m_isSessionTools = false;
exitSubWidget();
}
void LockWidget::onSuspendClicked()
{
if (m_modelLockDialog->getSleepActivationEnabled()) {
m_isSessionTools = false;
Q_EMIT showBlankScreensaver(0, true);
} else {
exitSubWidget();
}
}
void LockWidget::onSwitchuserClicked()
{
onLockScreenClicked();
qDebug() << "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" ;
onShowUserListWidget();
}
void LockWidget::onCustomRequestAccount(QString account)
@ -1261,6 +1465,14 @@ void LockWidget::updateFont()
if (m_blockWidget) {
m_blockWidget->updateFontFamily(m_curFont);
}
if (m_systemMonitorBtn) {
QFont sysBtnFont;
sysBtnFont.setFamily(m_curFont);
sysBtnFont.setPointSize((16 + m_curFontSize) * m_ptToPx);
m_systemMonitorBtn->setFont(sysBtnFont);
m_systemMonitorBtn->setText(tr("system-monitor"));
m_systemMonitorBtn->adjustSize();
}
}
void LockWidget::updateFontSize()

View File

@ -49,13 +49,24 @@ class LockWidget : public QWidget
Q_OBJECT
public:
explicit LockWidget(LockDialogModel *model, QWidget *parent = nullptr);
bool exitSubWidget();
bool exitSubWidget(bool isForScreensaver = false);
void stopAuth();
void startAuth();
void reloadRootBackground();
void drawRootBackground();
void updateFont();
void updateFontSize();
void onShowPowerListWidget(bool issessionTools = false);
void onShowInhibitWarning(QStringList list, int type, bool iscommand = false);
void onMulUsersLogined(int inhibitType, bool iscommand = false);
void onLockScreenClicked();
void onSuspendClicked();
void onSwitchuserClicked();
protected:
void paintEvent(QPaintEvent *event);
@ -74,6 +85,7 @@ private:
void initButtonWidget();
void initTimeWidget();
void initBlockWidget();
void initSystemMonitorBtn();
void sendNetPluginVisible(bool visible);
/**
@ -120,19 +132,15 @@ private Q_SLOTS:
void onShowBatteryWidget();
void onShowUserListWidget();
void onShowNetworkWidget();
void onShowPowerListWidget();
void onShowVirtualKeyboard();
void onShowVirtualKeyboard(bool tabletMode);
void onLineEditClicked();
void doSystemMonitor();
void onNetWorkResetLocation();
void onSetVirkeyboardPos();
void onHideVirkeyboard();
void onShowInhibitWarning(QStringList list, int type);
void onMulUsersLogined(QString inhibitType);
void onConfirmBtnClicked();
void onCancelBtnClicked();
/**
@ -159,6 +167,10 @@ private Q_SLOTS:
Q_SIGNALS:
void authSucceed(QString strUserName);
void sessionToolsExit();
void showBlankScreensaver(int nDelay, bool isHasLock);
private:
void setrootWindowBackground(int type,unsigned int color,QString filename);
@ -215,6 +227,9 @@ private:
StatusButton *m_virKbButton = nullptr;
StatusButton *m_powerManagerButton = nullptr;
// 底部系统监视器按钮
StatusButton *m_systemMonitorBtn = nullptr;
bool m_isCustomDefault = false; /** 是否默认使用第三方认证 */
bool m_isShowNetwork = true; /** 是否显示网络插件 */
bool m_isShowUserSwitch = true; /** 是否显示用户切换 */
@ -231,6 +246,11 @@ private:
QString m_curFont;
double m_curFontSize;
double m_ptToPx = 1.0;
int m_powerBtnNum = 0;
bool m_isSessionTools = false;
bool m_iscommand = false;
};
#endif // LOCKWIDGET_H

View File

@ -28,6 +28,7 @@ PowerItemWidget::PowerItemWidget(QWidget *parent) : QFrame(parent)
textLabel = new KLabel(this);
textLabel->setAlignment(Qt::AlignCenter);
textLabel->setStyleSheet("color: white");
textLabel->setMaximumWidth(130);
QVBoxLayout *itemlayout = new QVBoxLayout(this);
itemlayout->addWidget(itemFace);
itemlayout->addWidget(textLabel);

View File

@ -16,12 +16,14 @@
*
**/
#include <QKeyEvent>
#include <QScreen>
#include <QApplication>
#include "powerlistwidget.h"
PowerListWidget::PowerListWidget(LockDialogModel *model, QWidget *parent)
: m_modelLockDialog(model), MyListWidget(parent)
{
initBtnShowFlag();
// updateBtnShowFlag();
initUI();
initConnections();
}
@ -48,40 +50,100 @@ bool PowerListWidget::eventFilter(QObject *obj, QEvent *event)
return MyListWidget::eventFilter(obj, event);
}
void PowerListWidget::setPowerType(int type)
{
m_powerType = type;
qDebug() << "m_powerType = " << m_powerType;
updateBtnShowFlag();
onUpdateListInfo();
updateWidgetSize();
}
void PowerListWidget::initUI()
{
setFlow(QListWidget::LeftToRight);
setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
setProperty("isWrapping", QVariant(true));
setResizeMode(QListView::Adjust);
QString powerListStyle = "QListWidget{background:rgba(255, 255, 255, 0%); border: 0px;}"
"QListWidget::item{background:rgba(255, 255, 255, 0%);}";
setStyleSheet(powerListStyle);
setFixedSize(QSize(BTN_ITEM_SIZE_WIDTH * sizeof(powerBtnList) / sizeof(powerBtnList[0]) + 1, BTN_ITEM_SIZE_HEIGHT));
this->verticalScrollBar()->setStyleSheet("QScrollBar{ background: transparent; margin-top:3px;margin-bottom:3px ; }"\
"QScrollBar:vertical{width: 6px;background: transparent;border-radius:3px;}"\
"QScrollBar::handle:vertical{width: 6px; background: rgba(255,255,255, 40); border-radius:3px;}"\
"QScrollBar::handle:vertical:hover{width: 6px; background: rgba(255,255,255, 60); border-radius:3px;}"\
"QScrollBar::add-line:vertical{width:0px;height:0px}"\
"QScrollBar::sub-line:vertical{width:0px;height:0px}");
// powerBtnList[0].func = &PowerListWidget::setSystemSuspend1();
m_curFontSize = m_modelLockDialog->getCurFontSize();
m_ptToPx = m_modelLockDialog->getPtToPx();
onUpdateListInfo();
}
void PowerListWidget::initConnections()
{
connect(this, &PowerListWidget::itemClicked, this, &PowerListWidget::onListItemClicked);
}
void PowerListWidget::initBtnShowFlag()
void PowerListWidget::updateBtnShowFlag()
{
m_powerBtnNum = 0;
for (int i = 0; i < sizeof(powerBtnList) / sizeof(powerBtnList[0]); i++) {
if (powerBtnList[i].canFuncName == QString("CanPowerOff"))
if (powerBtnList[i].canFuncName == QString("CanSwitchUser")) {
powerBtnList[i].m_show_flag = (m_powerType == SESSION && m_modelLockDialog->usersInfo().count() > 1);
if (powerBtnList[i].m_show_flag)
m_powerBtnNum += 1;
}
if (powerBtnList[i].canFuncName == QString("CanLockScreen")) {
powerBtnList[i].m_show_flag = (m_powerType == SESSION && m_modelLockDialog->getCanLockScreen());
if (powerBtnList[i].m_show_flag)
m_powerBtnNum += 1;
}
if (powerBtnList[i].canFuncName == QString("CanLogout")) {
powerBtnList[i].m_show_flag = (m_powerType == SESSION && m_modelLockDialog->getCanLogout());
if (powerBtnList[i].m_show_flag)
m_powerBtnNum += 1;
}
if (powerBtnList[i].canFuncName == QString("CanPowerOff")) {
powerBtnList[i].m_show_flag = m_modelLockDialog->getCanPowerOff();
if (powerBtnList[i].m_show_flag)
m_powerBtnNum += 1;
}
if (powerBtnList[i].canFuncName == QString("CanSuspend"))
if (powerBtnList[i].canFuncName == QString("CanSuspend")) {
powerBtnList[i].m_show_flag = m_modelLockDialog->getCanSuspend();
if (powerBtnList[i].m_show_flag)
m_powerBtnNum += 1;
}
if (powerBtnList[i].canFuncName == QString("CanReboot"))
if (powerBtnList[i].canFuncName == QString("CheckSystemUpgradeReboot")) {
powerBtnList[i].m_show_flag = (m_powerType == SESSION && m_modelLockDialog->checkSystemUpgrade());
if (powerBtnList[i].m_show_flag)
m_powerBtnNum += 1;
}
if (powerBtnList[i].canFuncName == QString("CheckSystemUpgradeShutdown")) {
powerBtnList[i].m_show_flag = (m_powerType == SESSION && m_modelLockDialog->checkSystemUpgrade());
if (powerBtnList[i].m_show_flag)
m_powerBtnNum += 1;
}
if (powerBtnList[i].canFuncName == QString("CanReboot")) {
powerBtnList[i].m_show_flag = m_modelLockDialog->getCanReboot();
if (powerBtnList[i].m_show_flag)
m_powerBtnNum += 1;
}
if (powerBtnList[i].canFuncName == QString("CanHibernate"))
if (powerBtnList[i].canFuncName == QString("CanHibernate")) {
powerBtnList[i].m_show_flag = m_modelLockDialog->getCanHibernate();
if (powerBtnList[i].m_show_flag)
m_powerBtnNum += 1;
}
}
qInfo() << "m_powerBtnNum = " << m_powerBtnNum;
}
void PowerListWidget::onUpdateListInfo()
@ -118,22 +180,33 @@ void PowerListWidget::onListItemClicked(QListWidgetItem *item)
if (powerBtnList[i].setFuncName == "Hibernate" || powerBtnList[i].setFuncName == "Suspend") {
QStringList sleepLockcheck = m_modelLockDialog->getSleepLockcheck();
if (!sleepLockcheck.isEmpty()) {
Q_EMIT showInhibitWarning(sleepLockcheck, powerBtnList[i].m_inhibitType);
Q_EMIT showInhibitWarning(sleepLockcheck, powerBtnList[i].m_inhibitType, false);
break;
}
}
if (powerBtnList[i].setFuncName == "Reboot" || powerBtnList[i].setFuncName == "PowerOff") {
if (powerBtnList[i].setFuncName == "Reboot" || powerBtnList[i].setFuncName == "PowerOff" || powerBtnList[i].setFuncName == "Logout") {
QStringList shutdownLockcheck = m_modelLockDialog->getShutdownLockcheck();
if (shutdownLockcheck.count() > 0) {
Q_EMIT showInhibitWarning(shutdownLockcheck, powerBtnList[i].m_inhibitType);
Q_EMIT showInhibitWarning(shutdownLockcheck, powerBtnList[i].m_inhibitType, false);
break;
} else if (m_modelLockDialog->getLoggedInUsersCount() > 1) {
Q_EMIT mulUsersLogined(powerBtnList[i].setFuncName);
Q_EMIT mulUsersLogined(powerBtnList[i].m_inhibitType, false);
break;
}
}
qWarning() << __LINE__ << "=================" << powerBtnList[i].setFuncName << __FUNCTION__;
Q_EMIT m_modelLockDialog->setPowerManager(powerBtnList[i].setFuncName);
if (powerBtnList[i].setFuncName == "LockScreen") {
Q_EMIT lockScreenClicked();
} else if (powerBtnList[i].setFuncName == "Suspend") {
Q_EMIT m_modelLockDialog->setPowerManager(powerBtnList[i].setFuncName);
Q_EMIT suspendClicked();
} else if (powerBtnList[i].setFuncName == "SwitchUser") {
// Q_EMIT lockScreenClicked();
// Q_EMIT m_modelLockDialog->setPowerManager(powerBtnList[i].setFuncName);
Q_EMIT switchuserClicked();
} else {
Q_EMIT m_modelLockDialog->setPowerManager(powerBtnList[i].setFuncName);
}
break;
}
}
@ -141,12 +214,35 @@ void PowerListWidget::onListItemClicked(QListWidgetItem *item)
void PowerListWidget::updateWidgetSize()
{
if (count() * 40 + 10 > maximumHeight()) {
setFixedHeight(maximumHeight());
} else {
setFixedHeight(count() * 40 + 10);
QScreen *screen = QApplication::primaryScreen();
QRect rect = screen->geometry();
if (BTN_ITEM_SIZE_WIDTH * m_powerBtnNum < rect.width()) {
if (BTN_ITEM_SIZE_HEIGHT < this->maxHeight()) {
setFixedSize(QSize((BTN_ITEM_SIZE_WIDTH + 3) * m_powerBtnNum, BTN_ITEM_SIZE_HEIGHT));
m_scrollIsShow = false;
setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
} else {
setFixedSize(QSize((BTN_ITEM_SIZE_WIDTH + 3) * m_powerBtnNum, this->maxHeight()));
m_scrollIsShow = true;
setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
}
} else { //宽度超过屏幕宽度需要换行显示取item宽度的倍数设为总宽度防止显示不居中
int pHeight = BTN_ITEM_SIZE_HEIGHT * (BTN_ITEM_SIZE_WIDTH * m_powerBtnNum / rect.width() + 1);
if (pHeight < this->maxHeight()) {
setFixedSize(QSize(rect.width() / BTN_ITEM_SIZE_WIDTH * (BTN_ITEM_SIZE_WIDTH + 3),
BTN_ITEM_SIZE_HEIGHT * (BTN_ITEM_SIZE_WIDTH * m_powerBtnNum / rect.width() + 1)));
m_scrollIsShow = false;
setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
} else if ((rect.width() / BTN_ITEM_SIZE_WIDTH * BTN_ITEM_SIZE_WIDTH + 10) > rect.width()) { //需要显示滚动条
setFixedSize(QSize((rect.width() / BTN_ITEM_SIZE_WIDTH - 1) * BTN_ITEM_SIZE_WIDTH + 10, this->maxHeight()));
m_scrollIsShow = true;
setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
} else {
setFixedSize(QSize(rect.width() / BTN_ITEM_SIZE_WIDTH * BTN_ITEM_SIZE_WIDTH + 10, this->maxHeight()));
m_scrollIsShow = true;
setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
}
}
adjustSize();
}
void PowerListWidget::setSystemPowerStatus(QString statusName)
@ -178,6 +274,19 @@ void PowerListWidget::refreshTranslate()
} else if (powerBtnList[i].setFuncName == "PowerOff") {
powerBtnList[i].m_strName = tr("Shut Down");
powerBtnList[i].m_strToolTip = tr("Close all apps, and then shut down your computer");
} else if (powerBtnList[i].setFuncName == "Log Out") {
powerBtnList[i].m_strName = tr("Log Out");
powerBtnList[i].m_strToolTip = tr("The current user logs out of the system, terminates the session, and returns to the login page");
} else if (powerBtnList[i].setFuncName == "SwitchUser") {
powerBtnList[i].m_strName = tr("SwitchUser");
} else if (powerBtnList[i].setFuncName == "LockScreen") {
powerBtnList[i].m_strName = tr("LockScreen");
} else if (powerBtnList[i].setFuncName == "UpgradeThenRestart") {
powerBtnList[i].m_strName = tr("UpgradeThenRestart");
} else if (powerBtnList[i].setFuncName == "UpgradeThenShutdown") {
powerBtnList[i].m_strName = tr("UpgradeThenShutdown");
} else if (powerBtnList[i].setFuncName == "PowerOff") {
powerBtnList[i].m_strName = tr("Logout");
}
}
onUpdateListInfo();

View File

@ -41,12 +41,23 @@ class LockDialogModel;
#define BTN_ICON_SIZE_WIDTH 48
#define BTN_ICON_SIZE_HEIGHT 48
enum powerType
{
SAVER,
SESSION
};
enum stateType
{
REBOOT,
SHUTDOWN,
SLEEP,
HIBERNATE,
LOGOUT,
SWITCHUSER,
LOCKSCREEN,
UPGRADETHENREBOOT,
UPGRADETHENSHUTDOWN,
NOTHING
};
@ -60,6 +71,8 @@ public:
void updateWidgetSize();
void setSystemSuspend1();
void setPowerType(int type);
inline bool getScrollShowStatus() { return m_scrollIsShow; }
struct Btn_Data_Struct
{
@ -76,8 +89,20 @@ public:
QString setFuncName;
int m_inhibitType;
// void (*func)();
} powerBtnList[4]
= { // 1.Hibernate
} powerBtnList[9]
= { // 1.switchuser
{ .m_strName = tr("SwitchUser"),
.m_strToolTip = tr(""),
.m_strIcon = ":/image/assets/switchuser.svg",
.m_show_flag = true,
.m_item_width = BTN_ITEM_SIZE_WIDTH,
.m_item_height = BTN_ITEM_SIZE_HEIGHT,
.m_icon_width = BTN_ICON_SIZE_WIDTH,
.m_icon_height = BTN_ICON_SIZE_HEIGHT,
.canFuncName = "CanSwitchUser",
.setFuncName = "SwitchUser",
.m_inhibitType = SWITCHUSER },
// 2.Hibernate
{ .m_strName = tr("Hibernate"),
.m_strToolTip = tr("Turn off your computer, but the app stays open. When the computer is turned on, it "
"can be restored to the state you left"),
@ -90,7 +115,7 @@ public:
.canFuncName = "CanHibernate",
.setFuncName = "Hibernate",
.m_inhibitType = HIBERNATE },
// 2.Suspend
// 3.Suspend
{ .m_strName = tr("Suspend"),
.m_strToolTip = tr("The computer stays on, but consumes less power. The app stays open and can quickly "
"wake up and revert to where you left off"),
@ -103,7 +128,43 @@ public:
.canFuncName = "CanSuspend",
.setFuncName = "Suspend",
.m_inhibitType = SLEEP },
// 3.reboot
// 4.LockScreen
{ .m_strName = tr("LockScreen"),
.m_strToolTip = tr(""),
.m_strIcon = ":/image/assets/lockscreen.svg",
.m_show_flag = true,
.m_item_width = BTN_ITEM_SIZE_WIDTH,
.m_item_height = BTN_ITEM_SIZE_HEIGHT,
.m_icon_width = BTN_ICON_SIZE_WIDTH,
.m_icon_height = BTN_ICON_SIZE_HEIGHT,
.canFuncName = "CanLockScreen",
.setFuncName = "LockScreen",
.m_inhibitType = LOCKSCREEN },
// 5.Logout
{ .m_strName = tr("Log Out"),
.m_strToolTip = tr("The current user logs out of the system, terminates the session, and returns to the login page"),
.m_strIcon = ":/image/assets/logout.svg",
.m_show_flag = true,
.m_item_width = BTN_ITEM_SIZE_WIDTH,
.m_item_height = BTN_ITEM_SIZE_HEIGHT,
.m_icon_width = BTN_ICON_SIZE_WIDTH,
.m_icon_height = BTN_ICON_SIZE_HEIGHT,
.canFuncName = "CanLogout",
.setFuncName = "Logout",
.m_inhibitType = LOGOUT },
// 6.upgradethenreboot
{ .m_strName = tr("UpgradeThenRestart"),
.m_strToolTip = tr(""),
.m_strIcon = ":/image/assets/reboot.svg",
.m_show_flag = true,
.m_item_width = BTN_ITEM_SIZE_WIDTH,
.m_item_height = BTN_ITEM_SIZE_HEIGHT,
.m_icon_width = BTN_ICON_SIZE_WIDTH,
.m_icon_height = BTN_ICON_SIZE_HEIGHT,
.canFuncName = "CheckSystemUpgradeReboot",
.setFuncName = "UpgradeThenRestart",
.m_inhibitType = UPGRADETHENREBOOT },
// 7.reboot
{ .m_strName = tr("Restart"),
.m_strToolTip = tr("Close all apps, turn off your computer, and then turn your computer back on"),
.m_strIcon = ":/image/assets/reboot.svg",
@ -115,7 +176,19 @@ public:
.canFuncName = "CanReboot",
.setFuncName = "Reboot",
.m_inhibitType = REBOOT },
// 4.Shut Down
// 8.upgradethenshutdown
{ .m_strName = tr("UpgradeThenShutdown"),
.m_strToolTip = tr(""),
.m_strIcon = ":/image/assets/shutdown.svg",
.m_show_flag = true,
.m_item_width = BTN_ITEM_SIZE_WIDTH,
.m_item_height = BTN_ITEM_SIZE_HEIGHT,
.m_icon_width = BTN_ICON_SIZE_WIDTH,
.m_icon_height = BTN_ICON_SIZE_HEIGHT,
.canFuncName = "CheckSystemUpgradeShutdown",
.setFuncName = "UpgradeThenShutdown",
.m_inhibitType = UPGRADETHENREBOOT },
// 9.Shut Down
{ .m_strName = tr("Shut Down"),
.m_strToolTip = tr("Close all apps, and then shut down your computer"),
.m_strIcon = ":/image/assets/shutdown.svg",
@ -136,8 +209,11 @@ protected:
void changeEvent(QEvent *event);
Q_SIGNALS:
void mulUsersLogined(QString inhibitType);
void showInhibitWarning(QStringList list, int type);
void mulUsersLogined(int inhibitType, bool iscommand);
void showInhibitWarning(QStringList list, int type, bool iscommand);
void lockScreenClicked();
void suspendClicked();
void switchuserClicked();
public Q_SLOTS:
void onUpdateListInfo();
@ -152,11 +228,20 @@ private:
bool m_canReboot;
bool m_canShutDown;
bool m_canLockScreen = true;
bool m_canSwitchUser = true;
bool m_canLogout = true;
double m_curFontSize;
double m_ptToPx = 1.0;
int m_powerType = SAVER;
int m_powerBtnNum = 0;
bool m_scrollIsShow = false;
void initUI();
void initBtnShowFlag();
void updateBtnShowFlag();
void initConnections();
void refreshTranslate();
// void initDBusInterface();

View File

@ -18,7 +18,7 @@
#include "statusbutton.h"
#include <QDebug>
#include <QApplication>
#include <QMouseEvent>
#include<QMouseEvent>
StatusButton::StatusButton(QWidget *parent, int type) : QPushButton(parent)
{
@ -29,8 +29,12 @@ StatusButton::StatusButton(QWidget *parent, int type) : QPushButton(parent)
} else if (buttonType == POWERBUTTON) {
setFixedSize(130, 130);
setIconSize(QSize(48, 48));
} else if (buttonType == NORMALBTN) {
setFixedHeight(48);
setFocusPolicy(Qt::TabFocus);
}
this->setFocusPolicy(Qt::NoFocus);
if (buttonType != NORMALBTN)
this->setFocusPolicy(Qt::NoFocus);
}
void StatusButton::setClickedStatus(int status)
@ -57,22 +61,26 @@ void StatusButton::paintEvent(QPaintEvent *e)
painter.setPen(Qt::NoPen);
painter.setBrush(Qt::white);
switch (buttonType) {
case BOTBUTTON:
painter.setOpacity(0);
painter.drawRoundedRect(option.rect.adjusted(1, 1, -1, -1), 6, 6);
break;
case BIOBUTTON:
painter.setOpacity(0.1);
painter.drawRoundedRect(option.rect.adjusted(1, 1, -1, -1), 6, 6);
break;
case POWERBUTTON:
painter.setOpacity(0.1);
painter.drawRoundedRect(option.rect.adjusted(1, 1, -1, -1), 65, 65);
break;
default:
painter.setOpacity(0);
painter.drawRoundedRect(option.rect.adjusted(1, 1, -1, -1), 6, 6);
break;
case BOTBUTTON:
painter.setOpacity(0);
painter.drawRoundedRect(option.rect.adjusted(1, 1, -1, -1), 6, 6);
break;
case BIOBUTTON:
painter.setOpacity(0.1);
painter.drawRoundedRect(option.rect.adjusted(1, 1, -1, -1), 6, 6);
break;
case POWERBUTTON:
painter.setOpacity(0.1);
painter.drawRoundedRect(option.rect.adjusted(1, 1, -1, -1), 65, 65);
break;
case NORMALBTN:
painter.setOpacity(0);
painter.drawRoundedRect(option.rect.adjusted(1, 1, -1, -1), 24, 24);
break;
default:
painter.setOpacity(0);
painter.drawRoundedRect(option.rect.adjusted(1, 1, -1, -1), 6, 6);
break;
}
painter.restore();
}
@ -81,18 +89,22 @@ void StatusButton::paintEvent(QPaintEvent *e)
painter.save();
painter.setPen(Qt::NoPen);
painter.setBrush(Qt::white);
painter.setOpacity(0.25);
painter.setOpacity(0.15);
switch (buttonType) {
case BOTBUTTON:
case BIOBUTTON:
painter.drawRoundedRect(option.rect.adjusted(1, 1, -1, -1), 6, 6);
break;
case POWERBUTTON:
painter.drawRoundedRect(option.rect.adjusted(1, 1, -1, -1), 65, 65);
break;
default:
painter.drawRoundedRect(option.rect.adjusted(1, 1, -1, -1), 6, 6);
break;
case BOTBUTTON:
case BIOBUTTON:
painter.drawRoundedRect(option.rect.adjusted(1, 1, -1, -1), 6, 6);
break;
case POWERBUTTON:
painter.drawRoundedRect(option.rect.adjusted(1, 1, -1, -1), 65, 65);
break;
case NORMALBTN:
painter.setOpacity(0.15);
painter.drawRoundedRect(option.rect.adjusted(1, 1, -1, -1), 24, 24);
break;
default:
painter.drawRoundedRect(option.rect.adjusted(1, 1, -1, -1), 6, 6);
break;
}
painter.restore();
}
@ -101,18 +113,21 @@ void StatusButton::paintEvent(QPaintEvent *e)
painter.save();
painter.setPen(Qt::NoPen);
painter.setBrush(Qt::white);
painter.setOpacity(0.35);
painter.setOpacity(0.21);
switch (buttonType) {
case BOTBUTTON:
case BIOBUTTON:
painter.drawRoundedRect(option.rect.adjusted(1, 1, -1, -1), 6, 6);
break;
case POWERBUTTON:
painter.drawRoundedRect(option.rect.adjusted(1, 1, -1, -1), 65, 65);
break;
default:
painter.drawRoundedRect(option.rect.adjusted(1, 1, -1, -1), 6, 6);
break;
case BOTBUTTON:
case BIOBUTTON:
painter.drawRoundedRect(option.rect.adjusted(1, 1, -1, -1), 6, 6);
break;
case POWERBUTTON:
painter.drawRoundedRect(option.rect.adjusted(1, 1, -1, -1), 65, 65);
break;
case NORMALBTN:
painter.drawRoundedRect(option.rect.adjusted(1, 1, -1, -1), 24, 24);
break;
default:
painter.drawRoundedRect(option.rect.adjusted(1, 1, -1, -1), 6, 6);
break;
}
painter.restore();
}
@ -123,16 +138,19 @@ void StatusButton::paintEvent(QPaintEvent *e)
painter.setBrush(Qt::white);
painter.setOpacity(0.25);
switch (buttonType) {
case BOTBUTTON:
case BIOBUTTON:
painter.drawRoundedRect(option.rect.adjusted(1, 1, -1, -1), 6, 6);
break;
case POWERBUTTON:
painter.drawRoundedRect(option.rect.adjusted(1, 1, -1, -1), 65, 65);
break;
default:
painter.drawRoundedRect(option.rect.adjusted(1, 1, -1, -1), 6, 6);
break;
case BOTBUTTON:
case BIOBUTTON:
painter.drawRoundedRect(option.rect.adjusted(1, 1, -1, -1), 6, 6);
break;
case POWERBUTTON:
painter.drawRoundedRect(option.rect.adjusted(1, 1, -1, -1), 65, 65);
break;
case NORMALBTN:
painter.drawRoundedRect(option.rect.adjusted(1, 1, -1, -1), 24, 24);
break;
default:
painter.drawRoundedRect(option.rect.adjusted(1, 1, -1, -1), 6, 6);
break;
}
painter.restore();
painter.save();
@ -141,20 +159,30 @@ void StatusButton::paintEvent(QPaintEvent *e)
painter.setPen(QPen(color, 2));
painter.setBrush(Qt::NoBrush);
switch (buttonType) {
case BOTBUTTON:
case BIOBUTTON:
painter.drawRoundedRect(option.rect.adjusted(1, 1, -1, -1), 6, 6);
break;
case POWERBUTTON:
painter.drawRoundedRect(option.rect.adjusted(1, 1, -1, -1), 65, 65);
break;
default:
painter.drawRoundedRect(option.rect.adjusted(1, 1, -1, -1), 6, 6);
break;
case BOTBUTTON:
case BIOBUTTON:
painter.drawRoundedRect(option.rect.adjusted(1, 1, -1, -1), 6, 6);
break;
case POWERBUTTON:
painter.drawRoundedRect(option.rect.adjusted(1, 1, -1, -1), 65, 65);
break;
case NORMALBTN:
painter.drawRoundedRect(option.rect.adjusted(1, 1, -1, -1), 24, 24);
break;
default:
painter.drawRoundedRect(option.rect.adjusted(1, 1, -1, -1), 6, 6);
break;
}
painter.restore();
}
// 绘制文字
if (buttonType == NORMALBTN && !text().isEmpty() && text() != "") {
painter.setPen(QColor(255,255,255,255));
painter.setFont(font());
painter.drawText(this->rect(), Qt::AlignHCenter | Qt::AlignVCenter, this->text());
}
// 绘制图片
int buttonWidget = this->width();
int buttonHeight = this->height();
@ -185,10 +213,14 @@ void StatusButton::paintEvent(QPaintEvent *e)
void StatusButton::mouseReleaseEvent(QMouseEvent *e)
{
if (buttonType == NORMALBTN)
Q_EMIT clicked();
e->ignore();
}
void StatusButton::mousePressEvent(QMouseEvent *e)
{
if (buttonType == NORMALBTN)
Q_EMIT clicked();
e->ignore();
}

View File

@ -36,6 +36,7 @@ enum BUTTONTYPE {
BOTBUTTON,
BIOBUTTON,
POWERBUTTON,
NORMALBTN,
};
class StatusButton : public QPushButton
@ -53,7 +54,7 @@ public:
void setDrivedId(int drivedId);
inline int getDrivedId() { return m_drivedId; }
inline int getButtonTyoe() { return buttonType; }
inline int getButtonType() { return buttonType; }
protected:
void paintEvent(QPaintEvent *e) override;
void mouseReleaseEvent(QMouseEvent *e);