ukui-screensaver/debian/patches/0008-55-fixbug.patch

8166 lines
366 KiB
Diff
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

From: =?utf-8?b?5p2o5pWP?= <yangmin@kylinos.cn>
Date: Wed, 27 Dec 2023 05:45:24 +0000
Subject: =?utf-8?q?!55_fixbug_Merge_pull_request_!55_from_=E6=9D=A8?=
=?utf-8?q?=E6=95=8F/openkylin/nile?=
---
i18n_ts/bo.ts | 143 ++++++-----
i18n_ts/bo_CN.ts | 143 ++++++-----
i18n_ts/de.ts | 209 +++++++---------
i18n_ts/es.ts | 209 +++++++---------
i18n_ts/fr.ts | 209 +++++++---------
i18n_ts/kk.ts | 209 +++++++---------
i18n_ts/ky.ts | 209 +++++++---------
i18n_ts/mn.ts | 143 ++++++-----
i18n_ts/pt.ts | 15 ++
i18n_ts/ru.ts | 15 ++
i18n_ts/tr.ts | 143 ++++++-----
i18n_ts/ug.ts | 209 +++++++---------
i18n_ts/zh_CN.ts | 187 ++++++++-------
i18n_ts/zh_HK.ts | 143 ++++++-----
src/CMakeLists.txt | 2 +-
src/VirtualKeyboard/src/charswidget.cpp | 23 ++
src/VirtualKeyboard/src/charswidget.h | 4 +
src/VirtualKeyboard/src/numberswidget.cpp | 21 ++
src/VirtualKeyboard/src/numberswidget.h | 4 +
src/VirtualKeyboard/src/virtualkeyboardwidget.cpp | 2 +-
src/common/configuration.h | 1 -
src/common/definetypes.h | 9 +
src/dbusifs/accountservicehelper.cpp | 127 ----------
src/dbusifs/accountservicehelper.h | 44 ----
src/dbusifs/accountshelper.cpp | 156 ++++++++++++
src/dbusifs/accountshelper.h | 56 +++++
src/lock-backend/dbusupperinterface.cpp | 4 +-
src/lock-backend/dbusupperinterface.h | 4 +-
src/lock-backend/lightdmhelper.cpp | 278 +++++++++++++++++-----
src/lock-backend/lightdmhelper.h | 55 ++++-
src/lock-dialog/languagesetting.cpp | 71 ++++++
src/lock-dialog/languagesetting.h | 29 +++
src/lock-dialog/lockdialogmodel.cpp | 42 +++-
src/lock-dialog/main.cpp | 8 +-
src/userinfo.cpp | 210 ++++++++++++++--
src/userinfo.h | 42 +++-
src/widgets/authdialog.cpp | 252 ++++++++++----------
src/widgets/authdialog.h | 11 +-
src/widgets/batterywidget.cpp | 38 ++-
src/widgets/batterywidget.h | 5 +-
src/widgets/blockwidget.cpp | 4 +
src/widgets/fullbackgroundwidget.cpp | 1 +
src/widgets/iconedit.cpp | 12 +-
src/widgets/iconedit.h | 3 +-
src/widgets/lockwidget.cpp | 44 +++-
src/widgets/lockwidget.h | 4 +-
src/widgets/mynetworkwidget.cpp | 1 -
src/widgets/mynetworkwidget.h | 5 +-
src/widgets/powerlistwidget.cpp | 29 +++
src/widgets/powerlistwidget.h | 2 +
src/widgets/sessionlistwidget.cpp | 3 +-
src/widgets/userlistwidget.cpp | 34 ++-
src/widgets/userlistwidget.h | 5 +
53 files changed, 2288 insertions(+), 1543 deletions(-)
delete mode 100644 src/dbusifs/accountservicehelper.cpp
delete mode 100644 src/dbusifs/accountservicehelper.h
create mode 100644 src/dbusifs/accountshelper.cpp
create mode 100644 src/dbusifs/accountshelper.h
create mode 100644 src/lock-dialog/languagesetting.cpp
create mode 100644 src/lock-dialog/languagesetting.h
diff --git a/i18n_ts/bo.ts b/i18n_ts/bo.ts
index 49c98e2..a7049f6 100644
--- a/i18n_ts/bo.ts
+++ b/i18n_ts/bo.ts
@@ -12,163 +12,169 @@
<context>
<name>AuthDialog</name>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="931"/>
- <location filename="../src/widgets/authdialog.cpp" line="936"/>
+ <location filename="../src/widgets/authdialog.cpp" line="963"/>
+ <location filename="../src/widgets/authdialog.cpp" line="968"/>
<source>Authentication failure, Please try again</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="703"/>
- <location filename="../src/widgets/authdialog.cpp" line="704"/>
+ <location filename="../src/widgets/authdialog.cpp" line="730"/>
+ <location filename="../src/widgets/authdialog.cpp" line="731"/>
<source>Password cannot be empty</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="522"/>
- <location filename="../src/widgets/authdialog.cpp" line="565"/>
+ <location filename="../src/widgets/authdialog.cpp" line="549"/>
+ <location filename="../src/widgets/authdialog.cpp" line="592"/>
<source>Verify face recognition or enter password to unlock</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="527"/>
+ <location filename="../src/widgets/authdialog.cpp" line="554"/>
<source>Press fingerprint or enter password to unlock</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="532"/>
+ <location filename="../src/widgets/authdialog.cpp" line="559"/>
<source>Verify voiceprint or enter password to unlock</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="537"/>
+ <location filename="../src/widgets/authdialog.cpp" line="564"/>
<source>Verify finger vein or enter password to unlock</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="542"/>
+ <location filename="../src/widgets/authdialog.cpp" line="569"/>
<source>Verify iris or enter password to unlock</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="547"/>
+ <location filename="../src/widgets/authdialog.cpp" line="574"/>
<source>Use the bound wechat scanning code or enter the password to unlock</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="857"/>
+ <location filename="../src/widgets/authdialog.cpp" line="884"/>
<source>Password </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="860"/>
+ <location filename="../src/widgets/authdialog.cpp" line="887"/>
<source>Input Password</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="865"/>
+ <location filename="../src/widgets/authdialog.cpp" line="892"/>
<source>Username</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="928"/>
+ <location filename="../src/widgets/authdialog.cpp" line="960"/>
<source>User name input error!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1005"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1037"/>
<source>login</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1076"/>
+ <location filename="../src/widgets/authdialog.cpp" line="346"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1108"/>
<source>Login</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1085"/>
+ <location filename="../src/widgets/authdialog.cpp" line="348"/>
+ <source>Guest</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/widgets/authdialog.cpp" line="1117"/>
<source>Retry</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1148"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1186"/>
<source>Please try again in %1 minutes.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1155"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1193"/>
<source>Please try again in %1 seconds.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1162"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1200"/>
<source>Account locked permanently.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1382"/>
- <location filename="../src/widgets/authdialog.cpp" line="1534"/>
- <location filename="../src/widgets/authdialog.cpp" line="1675"/>
- <location filename="../src/widgets/authdialog.cpp" line="1852"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1420"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1572"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1713"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1890"/>
<source>Failed to verify %1, please enter password to unlock</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1384"/>
- <location filename="../src/widgets/authdialog.cpp" line="1536"/>
- <location filename="../src/widgets/authdialog.cpp" line="1679"/>
- <location filename="../src/widgets/authdialog.cpp" line="1681"/>
- <location filename="../src/widgets/authdialog.cpp" line="1854"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1422"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1574"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1717"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1719"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1892"/>
<source>Unable to verify %1, please enter password to unlock</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1694"/>
- <location filename="../src/widgets/authdialog.cpp" line="1698"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1732"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1736"/>
<source>Failed to verify %1, you still have %2 verification opportunities</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1709"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1747"/>
<source>Abnormal network</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1716"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1754"/>
<source>Face recognition waiting time out, please click refresh or enter the password to unlock.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1982"/>
+ <location filename="../src/widgets/authdialog.cpp" line="2020"/>
<source>FingerPrint</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1984"/>
+ <location filename="../src/widgets/authdialog.cpp" line="2022"/>
<source>FingerVein</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1986"/>
+ <location filename="../src/widgets/authdialog.cpp" line="2024"/>
<source>Iris</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1988"/>
+ <location filename="../src/widgets/authdialog.cpp" line="2026"/>
<source>Face</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1990"/>
+ <location filename="../src/widgets/authdialog.cpp" line="2028"/>
<source>VoicePrint</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1992"/>
+ <location filename="../src/widgets/authdialog.cpp" line="2030"/>
<source>Ukey</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1994"/>
+ <location filename="../src/widgets/authdialog.cpp" line="2032"/>
<source>QRCode</source>
<translation type="unfinished"></translation>
</message>
@@ -200,31 +206,35 @@
<name>BlockWidget</name>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="40"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="82"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="135"/>
<source>Cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="44"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="83"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="136"/>
<source>Confrim</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/blockwidget.cpp" line="89"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="91"/>
<source>The following program is running to prevent the system from reboot!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/blockwidget.cpp" line="92"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="94"/>
<source>The following program is running to prevent the system from shutting down!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/blockwidget.cpp" line="95"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="97"/>
<source>The following program is running to prevent the system from suspend!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/blockwidget.cpp" line="98"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="100"/>
<source>The following program is running to prevent the system from hibernate!</source>
<translation type="unfinished"></translation>
</message>
@@ -240,17 +250,18 @@
<context>
<name>CharsWidget</name>
<message>
- <location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="114"/>
+ <location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="115"/>
+ <location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="273"/>
<source>More</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="128"/>
+ <location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="129"/>
<source>ABC</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="141"/>
+ <location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="142"/>
<source>123</source>
<translation type="unfinished"></translation>
</message>
@@ -389,17 +400,17 @@
<context>
<name>LightDMHelper</name>
<message>
- <location filename="../src/lock-backend/lightdmhelper.cpp" line="99"/>
+ <location filename="../src/lock-backend/lightdmhelper.cpp" line="105"/>
<source>failed to start session.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/lock-backend/lightdmhelper.cpp" line="234"/>
+ <location filename="../src/lock-backend/lightdmhelper.cpp" line="204"/>
<source>Login</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/lock-backend/lightdmhelper.cpp" line="242"/>
+ <location filename="../src/lock-backend/lightdmhelper.cpp" line="213"/>
<source>Guest</source>
<translation type="unfinished"></translation>
</message>
@@ -407,7 +418,7 @@
<context>
<name>LockWidget</name>
<message>
- <location filename="../src/widgets/lockwidget.cpp" line="923"/>
+ <location filename="../src/widgets/lockwidget.cpp" line="944"/>
<source>Multiple users are logged in at the same time.Are you sure you want to %1 this system?</source>
<translation type="unfinished"></translation>
</message>
@@ -474,12 +485,12 @@
<context>
<name>MyNetworkWidget</name>
<message>
- <location filename="../src/widgets/mynetworkwidget.cpp" line="36"/>
+ <location filename="../src/widgets/mynetworkwidget.cpp" line="35"/>
<source>LAN</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/mynetworkwidget.cpp" line="38"/>
+ <location filename="../src/widgets/mynetworkwidget.cpp" line="37"/>
<source>WLAN</source>
<translation type="unfinished"></translation>
</message>
@@ -487,12 +498,13 @@
<context>
<name>NumbersWidget</name>
<message>
- <location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="160"/>
+ <location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="161"/>
<source>&amp;&amp;?!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="174"/>
+ <location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="175"/>
+ <location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="310"/>
<source>Return</source>
<translation type="unfinished"></translation>
</message>
@@ -614,6 +626,21 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>UserListWidget</name>
+ <message>
+ <location filename="../src/widgets/userlistwidget.cpp" line="46"/>
+ <location filename="../src/widgets/userlistwidget.cpp" line="99"/>
+ <source>Login</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/widgets/userlistwidget.cpp" line="48"/>
+ <location filename="../src/widgets/userlistwidget.cpp" line="101"/>
+ <source>Guest</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
<context>
<name>Widget</name>
<message>
@@ -729,12 +756,12 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/lock-backend/main.cpp" line="48"/>
+ <location filename="../src/lock-backend/main.cpp" line="49"/>
<source>Backend for the ukui ScreenSaver.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/lock-backend/main.cpp" line="54"/>
+ <location filename="../src/lock-backend/main.cpp" line="55"/>
<source>lock the screen by startup</source>
<translation type="unfinished"></translation>
</message>
diff --git a/i18n_ts/bo_CN.ts b/i18n_ts/bo_CN.ts
index 264f78d..729ab90 100644
--- a/i18n_ts/bo_CN.ts
+++ b/i18n_ts/bo_CN.ts
@@ -24,7 +24,7 @@
<translation type="obsolete">使用密码认证</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1085"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1117"/>
<source>Retry</source>
<translation>བསྐྱར་དུ་ཞིབ་བཤེར་བྱ་དགོས།</translation>
</message>
@@ -53,125 +53,130 @@
<translation type="vanished">账户锁定%1分钟由于%2次错误尝试</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1148"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1186"/>
<source>Please try again in %1 minutes.</source>
<translation>ཁྱོད་ཀྱིས་ཡང་བསྐྱར་ཐེངས་གཅིག་ལ་ཚོད་ལྟ་ཞིག་བྱེད་རོགས།</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1155"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1193"/>
<source>Please try again in %1 seconds.</source>
<translation>ཁྱོད་ཀྱིས་དུས་ཚོད་སྐར་ཆ་གཅིག་གི་ནང་དུ་ཡང་བསྐྱར་ཚོད་ལྟ་ཞིག་བྱེད་རོགས།</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1162"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1200"/>
<source>Account locked permanently.</source>
<translation>དུས་གཏན་དུ་ཟྭ་བརྒྱབ་པའི་རྩིས་ཐོ།</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="522"/>
- <location filename="../src/widgets/authdialog.cpp" line="565"/>
+ <location filename="../src/widgets/authdialog.cpp" line="549"/>
+ <location filename="../src/widgets/authdialog.cpp" line="592"/>
<source>Verify face recognition or enter password to unlock</source>
<translation>ངོ་གདོང་ངོས་འཛིན་ལ་ཞིབ་བཤེར་བྱེད་པའམ་ཡང་ན་གསང་གྲངས་ནང་</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="527"/>
+ <location filename="../src/widgets/authdialog.cpp" line="348"/>
+ <source>Guest</source>
+ <translation type="unfinished">游客</translation>
+ </message>
+ <message>
+ <location filename="../src/widgets/authdialog.cpp" line="554"/>
<source>Press fingerprint or enter password to unlock</source>
<translation>མཛུབ་རིས་མནན་པའམ་ཡང་ན་གསང་གྲངས་ནང་འཇུག་བྱས་ནས་</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="532"/>
+ <location filename="../src/widgets/authdialog.cpp" line="559"/>
<source>Verify voiceprint or enter password to unlock</source>
<translation>སྒྲ་པར་ཞིབ་བཤེར་བྱེད་པའམ་ཡང་ན་གསང་གྲངས་ནང་འཇུག་བྱས་ནས་ཟྭ་རྒྱག</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="537"/>
+ <location filename="../src/widgets/authdialog.cpp" line="564"/>
<source>Verify finger vein or enter password to unlock</source>
<translation>མཛུབ་མོའི་ནང་དུ་ཞིབ་བཤེར་བྱེད་པའམ་ཡང་ན་གསང་གྲངས་ནང་འཇུག་བྱས་</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="542"/>
+ <location filename="../src/widgets/authdialog.cpp" line="569"/>
<source>Verify iris or enter password to unlock</source>
<translation>iris ཞིབ་བཤེར་བྱེད་པའམ་ཡང་ན་གསང་གྲངས་ནང་འཇུག་བྱས་ནས་ཟྭ་</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="860"/>
+ <location filename="../src/widgets/authdialog.cpp" line="887"/>
<source>Input Password</source>
<translation>ནང་འཇུག་གི་གསང་གྲངས།</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="865"/>
+ <location filename="../src/widgets/authdialog.cpp" line="892"/>
<source>Username</source>
<translation type="unfinished">སྤྱོད་མཁན་གྱི་མིང་།</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="928"/>
+ <location filename="../src/widgets/authdialog.cpp" line="960"/>
<source>User name input error!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1005"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1037"/>
<source>login</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1382"/>
- <location filename="../src/widgets/authdialog.cpp" line="1534"/>
- <location filename="../src/widgets/authdialog.cpp" line="1675"/>
- <location filename="../src/widgets/authdialog.cpp" line="1852"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1420"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1572"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1713"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1890"/>
<source>Failed to verify %1, please enter password to unlock</source>
<translation>%1ལ་ཞིབ་བཤེར་བྱེད་མ་ཐུབ་ན། གསང་གྲངས་ནང་འཇུག་བྱས་ནས་ཟྭ་རྒྱག་རོགས།</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1384"/>
- <location filename="../src/widgets/authdialog.cpp" line="1536"/>
- <location filename="../src/widgets/authdialog.cpp" line="1679"/>
- <location filename="../src/widgets/authdialog.cpp" line="1681"/>
- <location filename="../src/widgets/authdialog.cpp" line="1854"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1422"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1574"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1717"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1719"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1892"/>
<source>Unable to verify %1, please enter password to unlock</source>
<translation>%1ལ་ཞིབ་བཤེར་བྱེད་ཐབས་བྲལ་བ་དང་། གསང་གྲངས་ནང་འཇུག་བྱས་ནས་ཟྭ་རྒྱག་རོགས།</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1709"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1747"/>
<source>Abnormal network</source>
<translation>རྒྱུན་ལྡན་མིན་པའི་དྲ་</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1716"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1754"/>
<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="1982"/>
+ <location filename="../src/widgets/authdialog.cpp" line="2020"/>
<source>FingerPrint</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1984"/>
+ <location filename="../src/widgets/authdialog.cpp" line="2022"/>
<source>FingerVein</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1986"/>
+ <location filename="../src/widgets/authdialog.cpp" line="2024"/>
<source>Iris</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1988"/>
+ <location filename="../src/widgets/authdialog.cpp" line="2026"/>
<source>Face</source>
<translation>མིའི་གདོང་།</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1990"/>
+ <location filename="../src/widgets/authdialog.cpp" line="2028"/>
<source>VoicePrint</source>
<translation>སྒྲ་རིས།</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1992"/>
+ <location filename="../src/widgets/authdialog.cpp" line="2030"/>
<source>Ukey</source>
<translation type="unfinished">བདེ་འཇགས་གསང་ལྡེ་</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1994"/>
+ <location filename="../src/widgets/authdialog.cpp" line="2032"/>
<source>QRCode</source>
<translation type="unfinished">དོན་ཚན་གཉིས་པ།</translation>
</message>
@@ -180,8 +185,8 @@
<translation type="vanished">使用绑定的微信扫码或输入密码登录</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="703"/>
- <location filename="../src/widgets/authdialog.cpp" line="704"/>
+ <location filename="../src/widgets/authdialog.cpp" line="730"/>
+ <location filename="../src/widgets/authdialog.cpp" line="731"/>
<source>Password cannot be empty</source>
<translation>གསང་གྲངས་སྟོང་པ་ཡིན་མི་སྲིད།</translation>
</message>
@@ -194,8 +199,8 @@
<translation type="vanished">无法验证%1请输入密码.</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1694"/>
- <location filename="../src/widgets/authdialog.cpp" line="1698"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1732"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1736"/>
<source>Failed to verify %1, you still have %2 verification opportunities</source>
<translation>%1ལ་ཞིབ་བཤེར་བྱེད་མ་ཐུབ་ན། ཁྱེད་ཚོར་ད་དུང་%2ལ་ཞིབ་བཤེར་བྱེད་པའི་གོ་སྐབས་ཡོད།</translation>
</message>
@@ -224,13 +229,13 @@
<translation type="vanished">请输入密码或者录入指纹</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="931"/>
- <location filename="../src/widgets/authdialog.cpp" line="936"/>
+ <location filename="../src/widgets/authdialog.cpp" line="963"/>
+ <location filename="../src/widgets/authdialog.cpp" line="968"/>
<source>Authentication failure, Please try again</source>
<translation>བདེན་དཔང་ར་སྤྲོད་བྱེད་མ་ཐུབ་ན། ཡང་བསྐྱར་ཚོད་ལྟ་ཞིག</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="547"/>
+ <location filename="../src/widgets/authdialog.cpp" line="574"/>
<source>Use the bound wechat scanning code or enter the password to unlock</source>
<translation>འབྲེལ་མཐུད་ཀྱི་འཕྲིན་ཕྲན་ཞིབ་བཤེར་ཨང་གྲངས་སམ་ཡང་ན་གསང་གྲངས་ནང་འཇུག་བྱས་ནས་ཟྭ་རྒྱག་པ།</translation>
</message>
@@ -243,12 +248,13 @@
<translation type="vanished">བདེ་འཇགས་ཀྱི་གསང་བའི་ལྡེ་མིག་དེ་USBཡི་སྣེ་འདྲེན་དུ་འཇུག་རོགས།</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="857"/>
+ <location filename="../src/widgets/authdialog.cpp" line="884"/>
<source>Password </source>
<translation>གསང་གྲངས། </translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1076"/>
+ <location filename="../src/widgets/authdialog.cpp" line="346"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1108"/>
<source>Login</source>
<translation>ཐོ་འགོད་བྱེད་པ།</translation>
</message>
@@ -368,31 +374,35 @@
<name>BlockWidget</name>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="40"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="82"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="135"/>
<source>Cancel</source>
<translation type="unfinished">ཕྱིར་འཐེན།</translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="44"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="83"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="136"/>
<source>Confrim</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/blockwidget.cpp" line="89"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="91"/>
<source>The following program is running to prevent the system from reboot!</source>
<translation type="unfinished">གཤམ་གྱི་གོ་རིམ་ནི་མ་ལག་བསྐྱར་དུ་འབྱུང་བར་སྔོན་འགོག་བྱེད་ཆེད་ཡིན།</translation>
</message>
<message>
- <location filename="../src/widgets/blockwidget.cpp" line="92"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="94"/>
<source>The following program is running to prevent the system from shutting down!</source>
<translation type="unfinished">གཤམ་གྱི་གོ་རིམ་ནི་མ་ལག་གི་སྒོ་རྒྱག་པར་བཀག་འགོག་བྱེད་པའི་ཆེད་དུ་ཡིན།</translation>
</message>
<message>
- <location filename="../src/widgets/blockwidget.cpp" line="95"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="97"/>
<source>The following program is running to prevent the system from suspend!</source>
<translation type="unfinished">གཤམ་གྱི་གོ་རིམ་ནི་མ་ལག་གནས་སྐབས་མཚམས་འཇོག་པར་བཀག་འགོག་བྱེད་པའི་ཆེད་དུ་ཡིན།</translation>
</message>
<message>
- <location filename="../src/widgets/blockwidget.cpp" line="98"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="100"/>
<source>The following program is running to prevent the system from hibernate!</source>
<translation type="unfinished">གཤམ་གྱི་གོ་རིམ་ནི་མ་ལག་ལ་བཀག་འགོག་བྱེད་པའི་ཆེད་དུ་ཡིན།</translation>
</message>
@@ -413,17 +423,18 @@
<translation>དེ་བས་ཀྱང་མང་</translation>
</message>
<message>
- <location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="114"/>
+ <location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="115"/>
+ <location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="273"/>
<source>More</source>
<translation>དེ་བས་ཀྱང་མང་</translation>
</message>
<message>
- <location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="128"/>
+ <location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="129"/>
<source>ABC</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="141"/>
+ <location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="142"/>
<source>123</source>
<translation type="unfinished"></translation>
</message>
@@ -1887,17 +1898,17 @@
<context>
<name>LightDMHelper</name>
<message>
- <location filename="../src/lock-backend/lightdmhelper.cpp" line="99"/>
+ <location filename="../src/lock-backend/lightdmhelper.cpp" line="105"/>
<source>failed to start session.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/lock-backend/lightdmhelper.cpp" line="234"/>
+ <location filename="../src/lock-backend/lightdmhelper.cpp" line="204"/>
<source>Login</source>
<translation type="unfinished">ཐོ་འགོད་བྱེད་པ།</translation>
</message>
<message>
- <location filename="../src/lock-backend/lightdmhelper.cpp" line="242"/>
+ <location filename="../src/lock-backend/lightdmhelper.cpp" line="213"/>
<source>Guest</source>
<translation type="unfinished">游客</translation>
</message>
@@ -1941,7 +1952,7 @@
<translation type="vanished">སྐུད་མེད་ཅུས་ཁོངས་ཀྱི་དྲ་བ།</translation>
</message>
<message>
- <location filename="../src/widgets/lockwidget.cpp" line="923"/>
+ <location filename="../src/widgets/lockwidget.cpp" line="944"/>
<source>Multiple users are logged in at the same time.Are you sure you want to %1 this system?</source>
<translation type="unfinished"></translation>
</message>
@@ -2019,12 +2030,12 @@
<context>
<name>MyNetworkWidget</name>
<message>
- <location filename="../src/widgets/mynetworkwidget.cpp" line="36"/>
+ <location filename="../src/widgets/mynetworkwidget.cpp" line="35"/>
<source>LAN</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/mynetworkwidget.cpp" line="38"/>
+ <location filename="../src/widgets/mynetworkwidget.cpp" line="37"/>
<source>WLAN</source>
<translation type="unfinished">སྐུད་མེད་ཅུས་ཁོངས་ཀྱི་དྲ་བ།</translation>
</message>
@@ -2032,12 +2043,13 @@
<context>
<name>NumbersWidget</name>
<message>
- <location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="160"/>
+ <location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="161"/>
<source>&amp;&amp;?!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="174"/>
+ <location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="175"/>
+ <location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="310"/>
<source>Return</source>
<translation>ཕྱིར་ལོག་པ།</translation>
</message>
@@ -2511,6 +2523,21 @@
<translation type="vanished">བྲོས་བྱོལ་དུ་སོང་བ།</translation>
</message>
</context>
+<context>
+ <name>UserListWidget</name>
+ <message>
+ <location filename="../src/widgets/userlistwidget.cpp" line="46"/>
+ <location filename="../src/widgets/userlistwidget.cpp" line="99"/>
+ <source>Login</source>
+ <translation type="unfinished">ཐོ་འགོད་བྱེད་པ།</translation>
+ </message>
+ <message>
+ <location filename="../src/widgets/userlistwidget.cpp" line="48"/>
+ <location filename="../src/widgets/userlistwidget.cpp" line="101"/>
+ <source>Guest</source>
+ <translation type="unfinished">游客</translation>
+ </message>
+</context>
<context>
<name>Utils</name>
<message>
@@ -2682,12 +2709,12 @@
<translation>སྒེའུ་ཁུང་གི་ཐོབ་ཐང་</translation>
</message>
<message>
- <location filename="../src/lock-backend/main.cpp" line="48"/>
+ <location filename="../src/lock-backend/main.cpp" line="49"/>
<source>Backend for the ukui ScreenSaver.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/lock-backend/main.cpp" line="54"/>
+ <location filename="../src/lock-backend/main.cpp" line="55"/>
<source>lock the screen by startup</source>
<translation type="unfinished"></translation>
</message>
diff --git a/i18n_ts/de.ts b/i18n_ts/de.ts
index e0ff65d..89efd18 100644
--- a/i18n_ts/de.ts
+++ b/i18n_ts/de.ts
@@ -24,7 +24,7 @@
<translation type="obsolete">使用密码认证</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1085"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1117"/>
<source>Retry</source>
<translation>Wiederholen</translation>
</message>
@@ -53,125 +53,130 @@
<translation type="vanished">账户锁定%1分钟由于%2次错误尝试</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1148"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1186"/>
<source>Please try again in %1 minutes.</source>
<translation>Versuchen Sie es in %1 Minuten erneut.</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1155"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1193"/>
<source>Please try again in %1 seconds.</source>
<translation>Bitte versuchen Sie es in %1 Sekunden erneut.</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1162"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1200"/>
<source>Account locked permanently.</source>
<translation>Das Konto wurde dauerhaft gesperrt.</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="522"/>
- <location filename="../src/widgets/authdialog.cpp" line="565"/>
+ <location filename="../src/widgets/authdialog.cpp" line="549"/>
+ <location filename="../src/widgets/authdialog.cpp" line="592"/>
<source>Verify face recognition or enter password to unlock</source>
<translation>Überprüfen Sie die Gesichtserkennung oder geben Sie das Passwort ein, um zu entsperren</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="527"/>
+ <location filename="../src/widgets/authdialog.cpp" line="348"/>
+ <source>Guest</source>
+ <translation type="unfinished">游客</translation>
+ </message>
+ <message>
+ <location filename="../src/widgets/authdialog.cpp" line="554"/>
<source>Press fingerprint or enter password to unlock</source>
<translation>Drücken Sie den Fingerabdruck oder geben Sie das Passwort ein, um zu entsperren</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="532"/>
+ <location filename="../src/widgets/authdialog.cpp" line="559"/>
<source>Verify voiceprint or enter password to unlock</source>
<translation>Überprüfen Sie den Stimmabdruck oder geben Sie das Passwort ein, um zu entsperren</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="537"/>
+ <location filename="../src/widgets/authdialog.cpp" line="564"/>
<source>Verify finger vein or enter password to unlock</source>
<translation>Überprüfen Sie die Fingervene oder geben Sie das Passwort ein, um zu entsperren</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="542"/>
+ <location filename="../src/widgets/authdialog.cpp" line="569"/>
<source>Verify iris or enter password to unlock</source>
<translation>Überprüfen Sie die Iris oder geben Sie das Passwort ein, um zu entsperren</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="860"/>
+ <location filename="../src/widgets/authdialog.cpp" line="887"/>
<source>Input Password</source>
<translation>Passwort eingeben</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="865"/>
+ <location filename="../src/widgets/authdialog.cpp" line="892"/>
<source>Username</source>
<translation type="unfinished">Nutzername</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="928"/>
+ <location filename="../src/widgets/authdialog.cpp" line="960"/>
<source>User name input error!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1005"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1037"/>
<source>login</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1382"/>
- <location filename="../src/widgets/authdialog.cpp" line="1534"/>
- <location filename="../src/widgets/authdialog.cpp" line="1675"/>
- <location filename="../src/widgets/authdialog.cpp" line="1852"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1420"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1572"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1713"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1890"/>
<source>Failed to verify %1, please enter password to unlock</source>
<translation>%1 konnte nicht verifiziert werden, bitte geben Sie das Kennwort zum Entsperren ein</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1384"/>
- <location filename="../src/widgets/authdialog.cpp" line="1536"/>
- <location filename="../src/widgets/authdialog.cpp" line="1679"/>
- <location filename="../src/widgets/authdialog.cpp" line="1681"/>
- <location filename="../src/widgets/authdialog.cpp" line="1854"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1422"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1574"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1717"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1719"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1892"/>
<source>Unable to verify %1, please enter password to unlock</source>
<translation>%1 kann nicht verifiziert werden, bitte geben Sie das Kennwort zum Entsperren ein</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1709"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1747"/>
<source>Abnormal network</source>
<translation>Ungewöhnliches Netzwerk</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1716"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1754"/>
<source>Face recognition waiting time out, please click refresh or enter the password to unlock.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1982"/>
+ <location filename="../src/widgets/authdialog.cpp" line="2020"/>
<source>FingerPrint</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1984"/>
+ <location filename="../src/widgets/authdialog.cpp" line="2022"/>
<source>FingerVein</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1986"/>
+ <location filename="../src/widgets/authdialog.cpp" line="2024"/>
<source>Iris</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1988"/>
+ <location filename="../src/widgets/authdialog.cpp" line="2026"/>
<source>Face</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1990"/>
+ <location filename="../src/widgets/authdialog.cpp" line="2028"/>
<source>VoicePrint</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1992"/>
+ <location filename="../src/widgets/authdialog.cpp" line="2030"/>
<source>Ukey</source>
<translation type="unfinished">Ukey</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1994"/>
+ <location filename="../src/widgets/authdialog.cpp" line="2032"/>
<source>QRCode</source>
<translation type="unfinished">QRCode</translation>
</message>
@@ -180,8 +185,8 @@
<translation type="vanished">使用绑定的微信扫码或输入密码登录</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="703"/>
- <location filename="../src/widgets/authdialog.cpp" line="704"/>
+ <location filename="../src/widgets/authdialog.cpp" line="730"/>
+ <location filename="../src/widgets/authdialog.cpp" line="731"/>
<source>Password cannot be empty</source>
<translation>Das Kennwort darf nicht leer sein.</translation>
</message>
@@ -194,8 +199,8 @@
<translation type="vanished">无法验证%1请输入密码.</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1694"/>
- <location filename="../src/widgets/authdialog.cpp" line="1698"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1732"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1736"/>
<source>Failed to verify %1, you still have %2 verification opportunities</source>
<translation>%1 konnte nicht verifiziert werden, Sie haben immer noch %2 Überprüfungsmöglichkeiten</translation>
</message>
@@ -224,13 +229,13 @@
<translation type="vanished">请输入密码或者录入指纹</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="931"/>
- <location filename="../src/widgets/authdialog.cpp" line="936"/>
+ <location filename="../src/widgets/authdialog.cpp" line="963"/>
+ <location filename="../src/widgets/authdialog.cpp" line="968"/>
<source>Authentication failure, Please try again</source>
<translation>Authentifizierungsfehler, Bitte versuchen Sie es erneut</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="547"/>
+ <location filename="../src/widgets/authdialog.cpp" line="574"/>
<source>Use the bound wechat scanning code or enter the password to unlock</source>
<translation>Verwenden Sie den gebundenen Wechat-Scan-Code oder geben Sie das Passwort zum Entsperren ein</translation>
</message>
@@ -243,12 +248,13 @@
<translation type="vanished">Stecken Sie den Ukey in den USB-Anschluss</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="857"/>
+ <location filename="../src/widgets/authdialog.cpp" line="884"/>
<source>Password </source>
<translation>Passwort </translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1076"/>
+ <location filename="../src/widgets/authdialog.cpp" line="346"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1108"/>
<source>Login</source>
<translation>Einloggen</translation>
</message>
@@ -368,31 +374,35 @@
<name>BlockWidget</name>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="40"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="82"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="135"/>
<source>Cancel</source>
<translation type="unfinished">Abbrechen</translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="44"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="83"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="136"/>
<source>Confrim</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/blockwidget.cpp" line="89"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="91"/>
<source>The following program is running to prevent the system from reboot!</source>
<translation type="unfinished">Das folgende Programm wird ausgeführt, um einen Neustart des Systems zu verhindern!</translation>
</message>
<message>
- <location filename="../src/widgets/blockwidget.cpp" line="92"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="94"/>
<source>The following program is running to prevent the system from shutting down!</source>
<translation type="unfinished">Das folgende Programm wird ausgeführt, um das Herunterfahren des Systems zu verhindern!</translation>
</message>
<message>
- <location filename="../src/widgets/blockwidget.cpp" line="95"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="97"/>
<source>The following program is running to prevent the system from suspend!</source>
<translation type="unfinished">Das folgende Programm wird ausgeführt, um zu verhindern, dass das System angehalten wird!</translation>
</message>
<message>
- <location filename="../src/widgets/blockwidget.cpp" line="98"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="100"/>
<source>The following program is running to prevent the system from hibernate!</source>
<translation type="unfinished">Das folgende Programm wird ausgeführt, um zu verhindern, dass das System in den Ruhezustand versetzt wird!</translation>
</message>
@@ -408,17 +418,18 @@
<context>
<name>CharsWidget</name>
<message>
- <location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="114"/>
+ <location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="115"/>
+ <location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="273"/>
<source>More</source>
<translation>Mehr</translation>
</message>
<message>
- <location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="128"/>
+ <location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="129"/>
<source>ABC</source>
<translation>ABC</translation>
</message>
<message>
- <location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="141"/>
+ <location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="142"/>
<source>123</source>
<translation>123</translation>
</message>
@@ -1883,17 +1894,17 @@
<context>
<name>LightDMHelper</name>
<message>
- <location filename="../src/lock-backend/lightdmhelper.cpp" line="99"/>
+ <location filename="../src/lock-backend/lightdmhelper.cpp" line="105"/>
<source>failed to start session.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/lock-backend/lightdmhelper.cpp" line="234"/>
+ <location filename="../src/lock-backend/lightdmhelper.cpp" line="204"/>
<source>Login</source>
<translation type="unfinished">Einloggen</translation>
</message>
<message>
- <location filename="../src/lock-backend/lightdmhelper.cpp" line="242"/>
+ <location filename="../src/lock-backend/lightdmhelper.cpp" line="213"/>
<source>Guest</source>
<translation type="unfinished">游客</translation>
</message>
@@ -1937,7 +1948,7 @@
<translation type="vanished">WLAN</translation>
</message>
<message>
- <location filename="../src/widgets/lockwidget.cpp" line="923"/>
+ <location filename="../src/widgets/lockwidget.cpp" line="944"/>
<source>Multiple users are logged in at the same time.Are you sure you want to %1 this system?</source>
<translation type="unfinished"></translation>
</message>
@@ -2015,12 +2026,12 @@
<context>
<name>MyNetworkWidget</name>
<message>
- <location filename="../src/widgets/mynetworkwidget.cpp" line="36"/>
+ <location filename="../src/widgets/mynetworkwidget.cpp" line="35"/>
<source>LAN</source>
<translation type="unfinished">LAN</translation>
</message>
<message>
- <location filename="../src/widgets/mynetworkwidget.cpp" line="38"/>
+ <location filename="../src/widgets/mynetworkwidget.cpp" line="37"/>
<source>WLAN</source>
<translation type="unfinished">WLAN</translation>
</message>
@@ -2028,12 +2039,13 @@
<context>
<name>NumbersWidget</name>
<message>
- <location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="160"/>
+ <location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="161"/>
<source>&amp;&amp;?!</source>
<translation>&amp;&amp;?!</translation>
</message>
<message>
- <location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="174"/>
+ <location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="175"/>
+ <location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="310"/>
<source>Return</source>
<translation>Rückgabe</translation>
</message>
@@ -2358,72 +2370,6 @@
<message>
<location filename="../src/dbusifs/enginedevice.cpp" line="308"/>
<source></source>
- <comment>this is only shown for laptops with multiple batteries</comment>
- <translation></translation>
- </message>
- <message>
- <location filename="../src/dbusifs/enginedevice.cpp" line="313"/>
- <source></source>
- <comment>this is only shown for laptops with multiple batteries</comment>
- <translation></translation>
- </message>
- <message>
- <location filename="../src/dbusifs/enginedevice.cpp" line="337"/>
- <source></source>
- <comment>laptop primary battery</comment>
- <translation></translation>
- </message>
- <message>
- <location filename="../src/dbusifs/enginedevice.cpp" line="341"/>
- <source></source>
- <comment>battery-backed AC power source</comment>
- <translation></translation>
- </message>
- <message>
- <location filename="../src/dbusifs/enginedevice.cpp" line="345"/>
- <source></source>
- <comment>a monitor is a device to measure voltage and current</comment>
- <translation></translation>
- </message>
- <message>
- <location filename="../src/dbusifs/enginedevice.cpp" line="349"/>
- <source></source>
- <comment>wireless mice with internal batteries</comment>
- <translation></translation>
- </message>
- <message>
- <location filename="../src/dbusifs/enginedevice.cpp" line="353"/>
- <source></source>
- <comment>wireless keyboard with internal battery</comment>
- <translation></translation>
- </message>
- <message>
- <location filename="../src/dbusifs/enginedevice.cpp" line="357"/>
- <source></source>
- <comment>portable device</comment>
- <translation></translation>
- </message>
- <message>
- <location filename="../src/dbusifs/enginedevice.cpp" line="361"/>
- <source></source>
- <comment>cell phone (mobile...)</comment>
- <translation></translation>
- </message>
- <message>
- <location filename="../src/dbusifs/enginedevice.cpp" line="365"/>
- <source></source>
- <comment>media player, mp3 etc</comment>
- <translation></translation>
- </message>
- <message>
- <location filename="../src/dbusifs/enginedevice.cpp" line="369"/>
- <source></source>
- <comment>tablet device</comment>
- <translation></translation>
- </message>
- <message>
- <location filename="../src/dbusifs/enginedevice.cpp" line="373"/>
- <source></source>
<comment>tablet device</comment>
<translation></translation>
</message>
@@ -2573,6 +2519,21 @@
<translation type="vanished">Hüpfen</translation>
</message>
</context>
+<context>
+ <name>UserListWidget</name>
+ <message>
+ <location filename="../src/widgets/userlistwidget.cpp" line="46"/>
+ <location filename="../src/widgets/userlistwidget.cpp" line="99"/>
+ <source>Login</source>
+ <translation type="unfinished">Einloggen</translation>
+ </message>
+ <message>
+ <location filename="../src/widgets/userlistwidget.cpp" line="48"/>
+ <location filename="../src/widgets/userlistwidget.cpp" line="101"/>
+ <source>Guest</source>
+ <translation type="unfinished">游客</translation>
+ </message>
+</context>
<context>
<name>Utils</name>
<message>
@@ -2744,12 +2705,12 @@
<translation>Fenster-ID</translation>
</message>
<message>
- <location filename="../src/lock-backend/main.cpp" line="48"/>
+ <location filename="../src/lock-backend/main.cpp" line="49"/>
<source>Backend for the ukui ScreenSaver.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/lock-backend/main.cpp" line="54"/>
+ <location filename="../src/lock-backend/main.cpp" line="55"/>
<source>lock the screen by startup</source>
<translation type="unfinished"></translation>
</message>
diff --git a/i18n_ts/es.ts b/i18n_ts/es.ts
index 0f7028a..d7141cf 100644
--- a/i18n_ts/es.ts
+++ b/i18n_ts/es.ts
@@ -24,7 +24,7 @@
<translation type="obsolete">使用密码认证</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1085"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1117"/>
<source>Retry</source>
<translation>Reintentar</translation>
</message>
@@ -53,125 +53,130 @@
<translation type="vanished">账户锁定%1分钟由于%2次错误尝试</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1148"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1186"/>
<source>Please try again in %1 minutes.</source>
<translation>Inténtelo de nuevo en %1 minutos.</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1155"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1193"/>
<source>Please try again in %1 seconds.</source>
<translation>Inténtelo de nuevo en %1 segundos.</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1162"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1200"/>
<source>Account locked permanently.</source>
<translation>Cuenta bloqueada permanentemente.</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="522"/>
- <location filename="../src/widgets/authdialog.cpp" line="565"/>
+ <location filename="../src/widgets/authdialog.cpp" line="549"/>
+ <location filename="../src/widgets/authdialog.cpp" line="592"/>
<source>Verify face recognition or enter password to unlock</source>
<translation>Verifique el reconocimiento facial o ingrese la contraseña para desbloquear</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="527"/>
+ <location filename="../src/widgets/authdialog.cpp" line="348"/>
+ <source>Guest</source>
+ <translation type="unfinished">游客</translation>
+ </message>
+ <message>
+ <location filename="../src/widgets/authdialog.cpp" line="554"/>
<source>Press fingerprint or enter password to unlock</source>
<translation>Presione la huella dactilar o ingrese la contraseña para desbloquear</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="532"/>
+ <location filename="../src/widgets/authdialog.cpp" line="559"/>
<source>Verify voiceprint or enter password to unlock</source>
<translation>Verifica la huella de voz o ingresa la contraseña para desbloquear</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="537"/>
+ <location filename="../src/widgets/authdialog.cpp" line="564"/>
<source>Verify finger vein or enter password to unlock</source>
<translation>Verifique la vena del dedo o ingrese la contraseña para desbloquear</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="542"/>
+ <location filename="../src/widgets/authdialog.cpp" line="569"/>
<source>Verify iris or enter password to unlock</source>
<translation>Verifique el iris o ingrese la contraseña para desbloquear</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="860"/>
+ <location filename="../src/widgets/authdialog.cpp" line="887"/>
<source>Input Password</source>
<translation>Contraseña de entrada</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="865"/>
+ <location filename="../src/widgets/authdialog.cpp" line="892"/>
<source>Username</source>
<translation type="unfinished">Nombre de usuario</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="928"/>
+ <location filename="../src/widgets/authdialog.cpp" line="960"/>
<source>User name input error!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1005"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1037"/>
<source>login</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1382"/>
- <location filename="../src/widgets/authdialog.cpp" line="1534"/>
- <location filename="../src/widgets/authdialog.cpp" line="1675"/>
- <location filename="../src/widgets/authdialog.cpp" line="1852"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1420"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1572"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1713"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1890"/>
<source>Failed to verify %1, please enter password to unlock</source>
<translation>No se pudo verificar %1, ingrese la contraseña para desbloquear</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1384"/>
- <location filename="../src/widgets/authdialog.cpp" line="1536"/>
- <location filename="../src/widgets/authdialog.cpp" line="1679"/>
- <location filename="../src/widgets/authdialog.cpp" line="1681"/>
- <location filename="../src/widgets/authdialog.cpp" line="1854"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1422"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1574"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1717"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1719"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1892"/>
<source>Unable to verify %1, please enter password to unlock</source>
<translation>No se puede verificar %1, ingrese la contraseña para desbloquear</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1709"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1747"/>
<source>Abnormal network</source>
<translation>Red anormal</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1716"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1754"/>
<source>Face recognition waiting time out, please click refresh or enter the password to unlock.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1982"/>
+ <location filename="../src/widgets/authdialog.cpp" line="2020"/>
<source>FingerPrint</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1984"/>
+ <location filename="../src/widgets/authdialog.cpp" line="2022"/>
<source>FingerVein</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1986"/>
+ <location filename="../src/widgets/authdialog.cpp" line="2024"/>
<source>Iris</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1988"/>
+ <location filename="../src/widgets/authdialog.cpp" line="2026"/>
<source>Face</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1990"/>
+ <location filename="../src/widgets/authdialog.cpp" line="2028"/>
<source>VoicePrint</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1992"/>
+ <location filename="../src/widgets/authdialog.cpp" line="2030"/>
<source>Ukey</source>
<translation type="unfinished">Ukey</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1994"/>
+ <location filename="../src/widgets/authdialog.cpp" line="2032"/>
<source>QRCode</source>
<translation type="unfinished">QRCode</translation>
</message>
@@ -180,8 +185,8 @@
<translation type="vanished">使用绑定的微信扫码或输入密码登录</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="703"/>
- <location filename="../src/widgets/authdialog.cpp" line="704"/>
+ <location filename="../src/widgets/authdialog.cpp" line="730"/>
+ <location filename="../src/widgets/authdialog.cpp" line="731"/>
<source>Password cannot be empty</source>
<translation>La contraseña no puede estar vacía</translation>
</message>
@@ -194,8 +199,8 @@
<translation type="vanished">无法验证%1请输入密码.</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1694"/>
- <location filename="../src/widgets/authdialog.cpp" line="1698"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1732"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1736"/>
<source>Failed to verify %1, you still have %2 verification opportunities</source>
<translation>No se pudo verificar %1, todavía tiene %2 oportunidades de verificación</translation>
</message>
@@ -224,13 +229,13 @@
<translation type="vanished">请输入密码或者录入指纹</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="931"/>
- <location filename="../src/widgets/authdialog.cpp" line="936"/>
+ <location filename="../src/widgets/authdialog.cpp" line="963"/>
+ <location filename="../src/widgets/authdialog.cpp" line="968"/>
<source>Authentication failure, Please try again</source>
<translation>Error de autenticación, inténtelo de nuevo</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="547"/>
+ <location filename="../src/widgets/authdialog.cpp" line="574"/>
<source>Use the bound wechat scanning code or enter the password to unlock</source>
<translation>Use el código de escaneo de wechat vinculado o ingrese la contraseña para desbloquear</translation>
</message>
@@ -243,12 +248,13 @@
<translation type="vanished">Inserte la ukey en el puerto USB</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="857"/>
+ <location filename="../src/widgets/authdialog.cpp" line="884"/>
<source>Password </source>
<translation>Contraseña </translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1076"/>
+ <location filename="../src/widgets/authdialog.cpp" line="346"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1108"/>
<source>Login</source>
<translation>Iniciar sesión</translation>
</message>
@@ -368,31 +374,35 @@
<name>BlockWidget</name>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="40"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="82"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="135"/>
<source>Cancel</source>
<translation type="unfinished">Cancelar</translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="44"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="83"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="136"/>
<source>Confrim</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/blockwidget.cpp" line="89"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="91"/>
<source>The following program is running to prevent the system from reboot!</source>
<translation type="unfinished">¡El siguiente programa se está ejecutando para evitar que el sistema se reinicie!</translation>
</message>
<message>
- <location filename="../src/widgets/blockwidget.cpp" line="92"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="94"/>
<source>The following program is running to prevent the system from shutting down!</source>
<translation type="unfinished">¡El siguiente programa se está ejecutando para evitar que el sistema se apague!</translation>
</message>
<message>
- <location filename="../src/widgets/blockwidget.cpp" line="95"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="97"/>
<source>The following program is running to prevent the system from suspend!</source>
<translation type="unfinished">¡El siguiente programa se está ejecutando para evitar que el sistema se suspenda!</translation>
</message>
<message>
- <location filename="../src/widgets/blockwidget.cpp" line="98"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="100"/>
<source>The following program is running to prevent the system from hibernate!</source>
<translation type="unfinished">¡El siguiente programa se está ejecutando para evitar que el sistema hiberne!</translation>
</message>
@@ -408,17 +418,18 @@
<context>
<name>CharsWidget</name>
<message>
- <location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="114"/>
+ <location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="115"/>
+ <location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="273"/>
<source>More</source>
<translation>Más</translation>
</message>
<message>
- <location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="128"/>
+ <location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="129"/>
<source>ABC</source>
<translation>ABECEDARIO</translation>
</message>
<message>
- <location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="141"/>
+ <location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="142"/>
<source>123</source>
<translation>123</translation>
</message>
@@ -1883,17 +1894,17 @@
<context>
<name>LightDMHelper</name>
<message>
- <location filename="../src/lock-backend/lightdmhelper.cpp" line="99"/>
+ <location filename="../src/lock-backend/lightdmhelper.cpp" line="105"/>
<source>failed to start session.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/lock-backend/lightdmhelper.cpp" line="234"/>
+ <location filename="../src/lock-backend/lightdmhelper.cpp" line="204"/>
<source>Login</source>
<translation type="unfinished">Iniciar sesión</translation>
</message>
<message>
- <location filename="../src/lock-backend/lightdmhelper.cpp" line="242"/>
+ <location filename="../src/lock-backend/lightdmhelper.cpp" line="213"/>
<source>Guest</source>
<translation type="unfinished">游客</translation>
</message>
@@ -1941,7 +1952,7 @@
<translation type="vanished">WLAN</translation>
</message>
<message>
- <location filename="../src/widgets/lockwidget.cpp" line="923"/>
+ <location filename="../src/widgets/lockwidget.cpp" line="944"/>
<source>Multiple users are logged in at the same time.Are you sure you want to %1 this system?</source>
<translation type="unfinished"></translation>
</message>
@@ -2019,12 +2030,12 @@
<context>
<name>MyNetworkWidget</name>
<message>
- <location filename="../src/widgets/mynetworkwidget.cpp" line="36"/>
+ <location filename="../src/widgets/mynetworkwidget.cpp" line="35"/>
<source>LAN</source>
<translation type="unfinished">LAN</translation>
</message>
<message>
- <location filename="../src/widgets/mynetworkwidget.cpp" line="38"/>
+ <location filename="../src/widgets/mynetworkwidget.cpp" line="37"/>
<source>WLAN</source>
<translation type="unfinished">WLAN</translation>
</message>
@@ -2032,12 +2043,13 @@
<context>
<name>NumbersWidget</name>
<message>
- <location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="160"/>
+ <location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="161"/>
<source>&amp;&amp;?!</source>
<translation>&amp;&amp;?!</translation>
</message>
<message>
- <location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="174"/>
+ <location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="175"/>
+ <location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="310"/>
<source>Return</source>
<translation>Devolución</translation>
</message>
@@ -2362,72 +2374,6 @@
<message>
<location filename="../src/dbusifs/enginedevice.cpp" line="308"/>
<source></source>
- <comment>this is only shown for laptops with multiple batteries</comment>
- <translation></translation>
- </message>
- <message>
- <location filename="../src/dbusifs/enginedevice.cpp" line="313"/>
- <source></source>
- <comment>this is only shown for laptops with multiple batteries</comment>
- <translation></translation>
- </message>
- <message>
- <location filename="../src/dbusifs/enginedevice.cpp" line="337"/>
- <source></source>
- <comment>laptop primary battery</comment>
- <translation></translation>
- </message>
- <message>
- <location filename="../src/dbusifs/enginedevice.cpp" line="341"/>
- <source></source>
- <comment>battery-backed AC power source</comment>
- <translation></translation>
- </message>
- <message>
- <location filename="../src/dbusifs/enginedevice.cpp" line="345"/>
- <source></source>
- <comment>a monitor is a device to measure voltage and current</comment>
- <translation></translation>
- </message>
- <message>
- <location filename="../src/dbusifs/enginedevice.cpp" line="349"/>
- <source></source>
- <comment>wireless mice with internal batteries</comment>
- <translation></translation>
- </message>
- <message>
- <location filename="../src/dbusifs/enginedevice.cpp" line="353"/>
- <source></source>
- <comment>wireless keyboard with internal battery</comment>
- <translation></translation>
- </message>
- <message>
- <location filename="../src/dbusifs/enginedevice.cpp" line="357"/>
- <source></source>
- <comment>portable device</comment>
- <translation></translation>
- </message>
- <message>
- <location filename="../src/dbusifs/enginedevice.cpp" line="361"/>
- <source></source>
- <comment>cell phone (mobile...)</comment>
- <translation></translation>
- </message>
- <message>
- <location filename="../src/dbusifs/enginedevice.cpp" line="365"/>
- <source></source>
- <comment>media player, mp3 etc</comment>
- <translation></translation>
- </message>
- <message>
- <location filename="../src/dbusifs/enginedevice.cpp" line="369"/>
- <source></source>
- <comment>tablet device</comment>
- <translation></translation>
- </message>
- <message>
- <location filename="../src/dbusifs/enginedevice.cpp" line="373"/>
- <source></source>
<comment>tablet device</comment>
<translation></translation>
</message>
@@ -2577,6 +2523,21 @@
<translation type="vanished">Saltarse</translation>
</message>
</context>
+<context>
+ <name>UserListWidget</name>
+ <message>
+ <location filename="../src/widgets/userlistwidget.cpp" line="46"/>
+ <location filename="../src/widgets/userlistwidget.cpp" line="99"/>
+ <source>Login</source>
+ <translation type="unfinished">Iniciar sesión</translation>
+ </message>
+ <message>
+ <location filename="../src/widgets/userlistwidget.cpp" line="48"/>
+ <location filename="../src/widgets/userlistwidget.cpp" line="101"/>
+ <source>Guest</source>
+ <translation type="unfinished">游客</translation>
+ </message>
+</context>
<context>
<name>Utils</name>
<message>
@@ -2748,12 +2709,12 @@
<translation>ID de ventana</translation>
</message>
<message>
- <location filename="../src/lock-backend/main.cpp" line="48"/>
+ <location filename="../src/lock-backend/main.cpp" line="49"/>
<source>Backend for the ukui ScreenSaver.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/lock-backend/main.cpp" line="54"/>
+ <location filename="../src/lock-backend/main.cpp" line="55"/>
<source>lock the screen by startup</source>
<translation type="unfinished"></translation>
</message>
diff --git a/i18n_ts/fr.ts b/i18n_ts/fr.ts
index 3a38e63..63b9f5c 100644
--- a/i18n_ts/fr.ts
+++ b/i18n_ts/fr.ts
@@ -24,7 +24,7 @@
<translation type="obsolete">使用密码认证</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1085"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1117"/>
<source>Retry</source>
<translation>Réessayer</translation>
</message>
@@ -53,125 +53,130 @@
<translation type="vanished">账户锁定%1分钟由于%2次错误尝试</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1148"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1186"/>
<source>Please try again in %1 minutes.</source>
<translation>Veuillez réessayer dans %1 minutes.</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1155"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1193"/>
<source>Please try again in %1 seconds.</source>
<translation>Veuillez réessayer dans %1 secondes.</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1162"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1200"/>
<source>Account locked permanently.</source>
<translation>Compte verrouillé définitivement.</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="522"/>
- <location filename="../src/widgets/authdialog.cpp" line="565"/>
+ <location filename="../src/widgets/authdialog.cpp" line="549"/>
+ <location filename="../src/widgets/authdialog.cpp" line="592"/>
<source>Verify face recognition or enter password to unlock</source>
<translation>Vérifier la reconnaissance faciale ou saisir le mot de passe pour déverrouiller</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="527"/>
+ <location filename="../src/widgets/authdialog.cpp" line="348"/>
+ <source>Guest</source>
+ <translation type="unfinished">游客</translation>
+ </message>
+ <message>
+ <location filename="../src/widgets/authdialog.cpp" line="554"/>
<source>Press fingerprint or enter password to unlock</source>
<translation>Appuyez sur lempreinte digitale ou entrez le mot de passe pour déverrouiller</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="532"/>
+ <location filename="../src/widgets/authdialog.cpp" line="559"/>
<source>Verify voiceprint or enter password to unlock</source>
<translation>Vérifier lempreinte vocale ou saisir le mot de passe pour déverrouiller</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="537"/>
+ <location filename="../src/widgets/authdialog.cpp" line="564"/>
<source>Verify finger vein or enter password to unlock</source>
<translation>Vérifiez la veine du doigt ou entrez le mot de passe pour déverrouiller</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="542"/>
+ <location filename="../src/widgets/authdialog.cpp" line="569"/>
<source>Verify iris or enter password to unlock</source>
<translation>Vérifiez liris ou entrez le mot de passe pour déverrouiller</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="860"/>
+ <location filename="../src/widgets/authdialog.cpp" line="887"/>
<source>Input Password</source>
<translation>Mot de passe dentrée</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="865"/>
+ <location filename="../src/widgets/authdialog.cpp" line="892"/>
<source>Username</source>
<translation type="unfinished">Nom dutilisateur</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="928"/>
+ <location filename="../src/widgets/authdialog.cpp" line="960"/>
<source>User name input error!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1005"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1037"/>
<source>login</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1382"/>
- <location filename="../src/widgets/authdialog.cpp" line="1534"/>
- <location filename="../src/widgets/authdialog.cpp" line="1675"/>
- <location filename="../src/widgets/authdialog.cpp" line="1852"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1420"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1572"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1713"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1890"/>
<source>Failed to verify %1, please enter password to unlock</source>
<translation>Impossible de vérifier %1, veuillez entrer le mot de passe pour déverrouiller</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1384"/>
- <location filename="../src/widgets/authdialog.cpp" line="1536"/>
- <location filename="../src/widgets/authdialog.cpp" line="1679"/>
- <location filename="../src/widgets/authdialog.cpp" line="1681"/>
- <location filename="../src/widgets/authdialog.cpp" line="1854"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1422"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1574"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1717"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1719"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1892"/>
<source>Unable to verify %1, please enter password to unlock</source>
<translation>Impossible de vérifier %1, veuillez entrer le mot de passe pour déverrouiller</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1709"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1747"/>
<source>Abnormal network</source>
<translation>Réseau anormal</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1716"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1754"/>
<source>Face recognition waiting time out, please click refresh or enter the password to unlock.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1982"/>
+ <location filename="../src/widgets/authdialog.cpp" line="2020"/>
<source>FingerPrint</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1984"/>
+ <location filename="../src/widgets/authdialog.cpp" line="2022"/>
<source>FingerVein</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1986"/>
+ <location filename="../src/widgets/authdialog.cpp" line="2024"/>
<source>Iris</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1988"/>
+ <location filename="../src/widgets/authdialog.cpp" line="2026"/>
<source>Face</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1990"/>
+ <location filename="../src/widgets/authdialog.cpp" line="2028"/>
<source>VoicePrint</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1992"/>
+ <location filename="../src/widgets/authdialog.cpp" line="2030"/>
<source>Ukey</source>
<translation type="unfinished">Ukey (en anglais seulement)</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1994"/>
+ <location filename="../src/widgets/authdialog.cpp" line="2032"/>
<source>QRCode</source>
<translation type="unfinished">QRCode</translation>
</message>
@@ -180,8 +185,8 @@
<translation type="vanished">使用绑定的微信扫码或输入密码登录</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="703"/>
- <location filename="../src/widgets/authdialog.cpp" line="704"/>
+ <location filename="../src/widgets/authdialog.cpp" line="730"/>
+ <location filename="../src/widgets/authdialog.cpp" line="731"/>
<source>Password cannot be empty</source>
<translation>Le mot de passe ne peut pas être vide</translation>
</message>
@@ -194,8 +199,8 @@
<translation type="vanished">无法验证%1请输入密码.</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1694"/>
- <location filename="../src/widgets/authdialog.cpp" line="1698"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1732"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1736"/>
<source>Failed to verify %1, you still have %2 verification opportunities</source>
<translation>Échec de la vérification %1, vous avez encore %2 possibilités de vérification</translation>
</message>
@@ -224,13 +229,13 @@
<translation type="vanished">请输入密码或者录入指纹</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="931"/>
- <location filename="../src/widgets/authdialog.cpp" line="936"/>
+ <location filename="../src/widgets/authdialog.cpp" line="963"/>
+ <location filename="../src/widgets/authdialog.cpp" line="968"/>
<source>Authentication failure, Please try again</source>
<translation>Échec de lauthentification, veuillez réessayer</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="547"/>
+ <location filename="../src/widgets/authdialog.cpp" line="574"/>
<source>Use the bound wechat scanning code or enter the password to unlock</source>
<translation>Utilisez le code danalyse wechat lié ou entrez le mot de passe pour déverrouiller</translation>
</message>
@@ -243,12 +248,13 @@
<translation type="vanished">Insérez lukey dans le port USB</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="857"/>
+ <location filename="../src/widgets/authdialog.cpp" line="884"/>
<source>Password </source>
<translation>Mot de passe </translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1076"/>
+ <location filename="../src/widgets/authdialog.cpp" line="346"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1108"/>
<source>Login</source>
<translation>Connectez-vous</translation>
</message>
@@ -368,31 +374,35 @@
<name>BlockWidget</name>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="40"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="82"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="135"/>
<source>Cancel</source>
<translation type="unfinished">Annuler</translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="44"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="83"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="136"/>
<source>Confrim</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/blockwidget.cpp" line="89"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="91"/>
<source>The following program is running to prevent the system from reboot!</source>
<translation type="unfinished">Le programme suivant est en cours dexécution pour empêcher le système de redémarrer !</translation>
</message>
<message>
- <location filename="../src/widgets/blockwidget.cpp" line="92"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="94"/>
<source>The following program is running to prevent the system from shutting down!</source>
<translation type="unfinished">Le programme suivant est en cours dexécution pour empêcher le système de sarrêter !</translation>
</message>
<message>
- <location filename="../src/widgets/blockwidget.cpp" line="95"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="97"/>
<source>The following program is running to prevent the system from suspend!</source>
<translation type="unfinished">Le programme suivant est en cours dexécution pour empêcher le système de se suspendre !</translation>
</message>
<message>
- <location filename="../src/widgets/blockwidget.cpp" line="98"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="100"/>
<source>The following program is running to prevent the system from hibernate!</source>
<translation type="unfinished">Le programme suivant est en cours dexécution pour empêcher le système de hiberner !</translation>
</message>
@@ -408,17 +418,18 @@
<context>
<name>CharsWidget</name>
<message>
- <location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="114"/>
+ <location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="115"/>
+ <location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="273"/>
<source>More</source>
<translation>Plus</translation>
</message>
<message>
- <location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="128"/>
+ <location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="129"/>
<source>ABC</source>
<translation>ABC</translation>
</message>
<message>
- <location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="141"/>
+ <location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="142"/>
<source>123</source>
<translation>123</translation>
</message>
@@ -1883,17 +1894,17 @@
<context>
<name>LightDMHelper</name>
<message>
- <location filename="../src/lock-backend/lightdmhelper.cpp" line="99"/>
+ <location filename="../src/lock-backend/lightdmhelper.cpp" line="105"/>
<source>failed to start session.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/lock-backend/lightdmhelper.cpp" line="234"/>
+ <location filename="../src/lock-backend/lightdmhelper.cpp" line="204"/>
<source>Login</source>
<translation type="unfinished">Connectez-vous</translation>
</message>
<message>
- <location filename="../src/lock-backend/lightdmhelper.cpp" line="242"/>
+ <location filename="../src/lock-backend/lightdmhelper.cpp" line="213"/>
<source>Guest</source>
<translation type="unfinished">游客</translation>
</message>
@@ -1937,7 +1948,7 @@
<translation type="vanished">Réseau local sans fil (WLAN)</translation>
</message>
<message>
- <location filename="../src/widgets/lockwidget.cpp" line="923"/>
+ <location filename="../src/widgets/lockwidget.cpp" line="944"/>
<source>Multiple users are logged in at the same time.Are you sure you want to %1 this system?</source>
<translation type="unfinished"></translation>
</message>
@@ -2015,12 +2026,12 @@
<context>
<name>MyNetworkWidget</name>
<message>
- <location filename="../src/widgets/mynetworkwidget.cpp" line="36"/>
+ <location filename="../src/widgets/mynetworkwidget.cpp" line="35"/>
<source>LAN</source>
<translation type="unfinished">LAN</translation>
</message>
<message>
- <location filename="../src/widgets/mynetworkwidget.cpp" line="38"/>
+ <location filename="../src/widgets/mynetworkwidget.cpp" line="37"/>
<source>WLAN</source>
<translation type="unfinished">Réseau local sans fil (WLAN)</translation>
</message>
@@ -2028,12 +2039,13 @@
<context>
<name>NumbersWidget</name>
<message>
- <location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="160"/>
+ <location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="161"/>
<source>&amp;&amp;?!</source>
<translation>&amp;&amp;?!</translation>
</message>
<message>
- <location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="174"/>
+ <location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="175"/>
+ <location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="310"/>
<source>Return</source>
<translation>Rendre</translation>
</message>
@@ -2358,72 +2370,6 @@
<message>
<location filename="../src/dbusifs/enginedevice.cpp" line="308"/>
<source></source>
- <comment>this is only shown for laptops with multiple batteries</comment>
- <translation></translation>
- </message>
- <message>
- <location filename="../src/dbusifs/enginedevice.cpp" line="313"/>
- <source></source>
- <comment>this is only shown for laptops with multiple batteries</comment>
- <translation></translation>
- </message>
- <message>
- <location filename="../src/dbusifs/enginedevice.cpp" line="337"/>
- <source></source>
- <comment>laptop primary battery</comment>
- <translation></translation>
- </message>
- <message>
- <location filename="../src/dbusifs/enginedevice.cpp" line="341"/>
- <source></source>
- <comment>battery-backed AC power source</comment>
- <translation></translation>
- </message>
- <message>
- <location filename="../src/dbusifs/enginedevice.cpp" line="345"/>
- <source></source>
- <comment>a monitor is a device to measure voltage and current</comment>
- <translation></translation>
- </message>
- <message>
- <location filename="../src/dbusifs/enginedevice.cpp" line="349"/>
- <source></source>
- <comment>wireless mice with internal batteries</comment>
- <translation></translation>
- </message>
- <message>
- <location filename="../src/dbusifs/enginedevice.cpp" line="353"/>
- <source></source>
- <comment>wireless keyboard with internal battery</comment>
- <translation></translation>
- </message>
- <message>
- <location filename="../src/dbusifs/enginedevice.cpp" line="357"/>
- <source></source>
- <comment>portable device</comment>
- <translation></translation>
- </message>
- <message>
- <location filename="../src/dbusifs/enginedevice.cpp" line="361"/>
- <source></source>
- <comment>cell phone (mobile...)</comment>
- <translation></translation>
- </message>
- <message>
- <location filename="../src/dbusifs/enginedevice.cpp" line="365"/>
- <source></source>
- <comment>media player, mp3 etc</comment>
- <translation></translation>
- </message>
- <message>
- <location filename="../src/dbusifs/enginedevice.cpp" line="369"/>
- <source></source>
- <comment>tablet device</comment>
- <translation></translation>
- </message>
- <message>
- <location filename="../src/dbusifs/enginedevice.cpp" line="373"/>
- <source></source>
<comment>tablet device</comment>
<translation></translation>
</message>
@@ -2573,6 +2519,21 @@
<translation type="vanished">Sautiller</translation>
</message>
</context>
+<context>
+ <name>UserListWidget</name>
+ <message>
+ <location filename="../src/widgets/userlistwidget.cpp" line="46"/>
+ <location filename="../src/widgets/userlistwidget.cpp" line="99"/>
+ <source>Login</source>
+ <translation type="unfinished">Connectez-vous</translation>
+ </message>
+ <message>
+ <location filename="../src/widgets/userlistwidget.cpp" line="48"/>
+ <location filename="../src/widgets/userlistwidget.cpp" line="101"/>
+ <source>Guest</source>
+ <translation type="unfinished">游客</translation>
+ </message>
+</context>
<context>
<name>Utils</name>
<message>
@@ -2744,12 +2705,12 @@
<translation>ID de la fenêtre</translation>
</message>
<message>
- <location filename="../src/lock-backend/main.cpp" line="48"/>
+ <location filename="../src/lock-backend/main.cpp" line="49"/>
<source>Backend for the ukui ScreenSaver.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/lock-backend/main.cpp" line="54"/>
+ <location filename="../src/lock-backend/main.cpp" line="55"/>
<source>lock the screen by startup</source>
<translation type="unfinished"></translation>
</message>
diff --git a/i18n_ts/kk.ts b/i18n_ts/kk.ts
index 0eb6362..738b367 100644
--- a/i18n_ts/kk.ts
+++ b/i18n_ts/kk.ts
@@ -24,7 +24,7 @@
<translation type="obsolete">使用密码认证</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1085"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1117"/>
<source>Retry</source>
<translation>Ретри</translation>
</message>
@@ -53,125 +53,130 @@
<translation type="vanished">账户锁定%1分钟由于%2次错误尝试</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1148"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1186"/>
<source>Please try again in %1 minutes.</source>
<translation>% 1 минутта қайталап көріңіз.</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1155"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1193"/>
<source>Please try again in %1 seconds.</source>
<translation>% 1 секундта қайталап көріңіз.</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1162"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1200"/>
<source>Account locked permanently.</source>
<translation>Тіркелгі біржолата құлыпталады.</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="522"/>
- <location filename="../src/widgets/authdialog.cpp" line="565"/>
+ <location filename="../src/widgets/authdialog.cpp" line="549"/>
+ <location filename="../src/widgets/authdialog.cpp" line="592"/>
<source>Verify face recognition or enter password to unlock</source>
<translation>Бет тануды тексеру немесе құлыптан босату үшін құпия сөзді енгізу</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="527"/>
+ <location filename="../src/widgets/authdialog.cpp" line="348"/>
+ <source>Guest</source>
+ <translation type="unfinished">游客</translation>
+ </message>
+ <message>
+ <location filename="../src/widgets/authdialog.cpp" line="554"/>
<source>Press fingerprint or enter password to unlock</source>
<translation>Құлыптан босату үшін дактилоскопияны басу немесе құпия сөзді енгізу</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="532"/>
+ <location filename="../src/widgets/authdialog.cpp" line="559"/>
<source>Verify voiceprint or enter password to unlock</source>
<translation>Құлыптан босату үшін дауыстық ізді тексеру немесе құпия сөзді енгізу</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="537"/>
+ <location filename="../src/widgets/authdialog.cpp" line="564"/>
<source>Verify finger vein or enter password to unlock</source>
<translation>Құлыптан босату үшін саусақ көктамырын тексеру немесе құпия сөзді енгізу</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="542"/>
+ <location filename="../src/widgets/authdialog.cpp" line="569"/>
<source>Verify iris or enter password to unlock</source>
<translation>Құлыптан босату үшін IRIS тексеру немесе құпиясөзді енгізу</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="860"/>
+ <location filename="../src/widgets/authdialog.cpp" line="887"/>
<source>Input Password</source>
<translation>Құпиясөзді енгізу</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="865"/>
+ <location filename="../src/widgets/authdialog.cpp" line="892"/>
<source>Username</source>
<translation type="unfinished">Пайдаланушы аты</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="928"/>
+ <location filename="../src/widgets/authdialog.cpp" line="960"/>
<source>User name input error!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1005"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1037"/>
<source>login</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1382"/>
- <location filename="../src/widgets/authdialog.cpp" line="1534"/>
- <location filename="../src/widgets/authdialog.cpp" line="1675"/>
- <location filename="../src/widgets/authdialog.cpp" line="1852"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1420"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1572"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1713"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1890"/>
<source>Failed to verify %1, please enter password to unlock</source>
<translation>% 1 дегенді тексеру мүмкін болмады, құлыптан босату үшін құпия сөзді енгізіңіз</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1384"/>
- <location filename="../src/widgets/authdialog.cpp" line="1536"/>
- <location filename="../src/widgets/authdialog.cpp" line="1679"/>
- <location filename="../src/widgets/authdialog.cpp" line="1681"/>
- <location filename="../src/widgets/authdialog.cpp" line="1854"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1422"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1574"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1717"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1719"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1892"/>
<source>Unable to verify %1, please enter password to unlock</source>
<translation>% 1 дегенді тексеру мүмкін болмады, құлыптан босату үшін құпия сөзді енгізіңіз</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1709"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1747"/>
<source>Abnormal network</source>
<translation>Аномальды желі</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1716"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1754"/>
<source>Face recognition waiting time out, please click refresh or enter the password to unlock.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1982"/>
+ <location filename="../src/widgets/authdialog.cpp" line="2020"/>
<source>FingerPrint</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1984"/>
+ <location filename="../src/widgets/authdialog.cpp" line="2022"/>
<source>FingerVein</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1986"/>
+ <location filename="../src/widgets/authdialog.cpp" line="2024"/>
<source>Iris</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1988"/>
+ <location filename="../src/widgets/authdialog.cpp" line="2026"/>
<source>Face</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1990"/>
+ <location filename="../src/widgets/authdialog.cpp" line="2028"/>
<source>VoicePrint</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1992"/>
+ <location filename="../src/widgets/authdialog.cpp" line="2030"/>
<source>Ukey</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1994"/>
+ <location filename="../src/widgets/authdialog.cpp" line="2032"/>
<source>QRCode</source>
<translation type="unfinished">QRCode</translation>
</message>
@@ -180,8 +185,8 @@
<translation type="vanished">使用绑定的微信扫码或输入密码登录</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="703"/>
- <location filename="../src/widgets/authdialog.cpp" line="704"/>
+ <location filename="../src/widgets/authdialog.cpp" line="730"/>
+ <location filename="../src/widgets/authdialog.cpp" line="731"/>
<source>Password cannot be empty</source>
<translation>Құпия сөз бос болмады</translation>
</message>
@@ -194,8 +199,8 @@
<translation type="vanished">无法验证%1请输入密码.</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1694"/>
- <location filename="../src/widgets/authdialog.cpp" line="1698"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1732"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1736"/>
<source>Failed to verify %1, you still have %2 verification opportunities</source>
<translation>% 1 дегенді тексеру мүмкін болмады, сізде әлі де% 2 тексеру мүмкіндіктері бар</translation>
</message>
@@ -224,23 +229,24 @@
<translation type="vanished">请输入密码或者录入指纹</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="931"/>
- <location filename="../src/widgets/authdialog.cpp" line="936"/>
+ <location filename="../src/widgets/authdialog.cpp" line="963"/>
+ <location filename="../src/widgets/authdialog.cpp" line="968"/>
<source>Authentication failure, Please try again</source>
<translation>Аутентификация сәтсіздігі, қайталап көріңіз</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="547"/>
+ <location filename="../src/widgets/authdialog.cpp" line="574"/>
<source>Use the bound wechat scanning code or enter the password to unlock</source>
<translation>Байланыстыратын wechat сканерлеу кодын пайдаланыңыз немесе құлыптан босату үшін құпия сөзді енгізіңіз</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="857"/>
+ <location filename="../src/widgets/authdialog.cpp" line="884"/>
<source>Password </source>
<translation>Пароль </translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1076"/>
+ <location filename="../src/widgets/authdialog.cpp" line="346"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1108"/>
<source>Login</source>
<translation>Кіру</translation>
</message>
@@ -360,31 +366,35 @@
<name>BlockWidget</name>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="40"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="82"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="135"/>
<source>Cancel</source>
<translation type="unfinished">Болдырмау</translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="44"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="83"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="136"/>
<source>Confrim</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/blockwidget.cpp" line="89"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="91"/>
<source>The following program is running to prevent the system from reboot!</source>
<translation type="unfinished">Жүйені қайта жүктеуге жол бермеу үшін келесі бағдарлама іске асырылуда!</translation>
</message>
<message>
- <location filename="../src/widgets/blockwidget.cpp" line="92"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="94"/>
<source>The following program is running to prevent the system from shutting down!</source>
<translation type="unfinished">Жүйенің тоқтап қалуына жол бермеу үшін келесі бағдарлама іске асырылуда!</translation>
</message>
<message>
- <location filename="../src/widgets/blockwidget.cpp" line="95"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="97"/>
<source>The following program is running to prevent the system from suspend!</source>
<translation type="unfinished">Жүйенің тоқтатылуына жол бермеу үшін келесі бағдарлама іске асырылуда!</translation>
</message>
<message>
- <location filename="../src/widgets/blockwidget.cpp" line="98"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="100"/>
<source>The following program is running to prevent the system from hibernate!</source>
<translation type="unfinished">Жүйенің жорыққа шығуына жол бермеу үшін келесі бағдарлама іске асырылуда!</translation>
</message>
@@ -400,17 +410,18 @@
<context>
<name>CharsWidget</name>
<message>
- <location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="114"/>
+ <location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="115"/>
+ <location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="273"/>
<source>More</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="128"/>
+ <location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="129"/>
<source>ABC</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="141"/>
+ <location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="142"/>
<source>123</source>
<translation type="unfinished"></translation>
</message>
@@ -1863,17 +1874,17 @@
<context>
<name>LightDMHelper</name>
<message>
- <location filename="../src/lock-backend/lightdmhelper.cpp" line="99"/>
+ <location filename="../src/lock-backend/lightdmhelper.cpp" line="105"/>
<source>failed to start session.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/lock-backend/lightdmhelper.cpp" line="234"/>
+ <location filename="../src/lock-backend/lightdmhelper.cpp" line="204"/>
<source>Login</source>
<translation type="unfinished">Кіру</translation>
</message>
<message>
- <location filename="../src/lock-backend/lightdmhelper.cpp" line="242"/>
+ <location filename="../src/lock-backend/lightdmhelper.cpp" line="213"/>
<source>Guest</source>
<translation type="unfinished">游客</translation>
</message>
@@ -1901,7 +1912,7 @@
<translation type="vanished">Бірнеше пайдаланушы бір уақытта кіргізіледі. Бұл жүйені қайта жүктеу керек пе?</translation>
</message>
<message>
- <location filename="../src/widgets/lockwidget.cpp" line="923"/>
+ <location filename="../src/widgets/lockwidget.cpp" line="944"/>
<source>Multiple users are logged in at the same time.Are you sure you want to %1 this system?</source>
<translation type="unfinished"></translation>
</message>
@@ -1979,12 +1990,12 @@
<context>
<name>MyNetworkWidget</name>
<message>
- <location filename="../src/widgets/mynetworkwidget.cpp" line="36"/>
+ <location filename="../src/widgets/mynetworkwidget.cpp" line="35"/>
<source>LAN</source>
<translation type="unfinished">ЛАН</translation>
</message>
<message>
- <location filename="../src/widgets/mynetworkwidget.cpp" line="38"/>
+ <location filename="../src/widgets/mynetworkwidget.cpp" line="37"/>
<source>WLAN</source>
<translation type="unfinished">WLAN</translation>
</message>
@@ -1992,12 +2003,13 @@
<context>
<name>NumbersWidget</name>
<message>
- <location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="160"/>
+ <location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="161"/>
<source>&amp;&amp;?!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="174"/>
+ <location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="175"/>
+ <location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="310"/>
<source>Return</source>
<translation type="unfinished"></translation>
</message>
@@ -2306,72 +2318,6 @@
<message>
<location filename="../src/dbusifs/enginedevice.cpp" line="308"/>
<source></source>
- <comment>this is only shown for laptops with multiple batteries</comment>
- <translation></translation>
- </message>
- <message>
- <location filename="../src/dbusifs/enginedevice.cpp" line="313"/>
- <source></source>
- <comment>this is only shown for laptops with multiple batteries</comment>
- <translation></translation>
- </message>
- <message>
- <location filename="../src/dbusifs/enginedevice.cpp" line="337"/>
- <source></source>
- <comment>laptop primary battery</comment>
- <translation></translation>
- </message>
- <message>
- <location filename="../src/dbusifs/enginedevice.cpp" line="341"/>
- <source></source>
- <comment>battery-backed AC power source</comment>
- <translation></translation>
- </message>
- <message>
- <location filename="../src/dbusifs/enginedevice.cpp" line="345"/>
- <source></source>
- <comment>a monitor is a device to measure voltage and current</comment>
- <translation></translation>
- </message>
- <message>
- <location filename="../src/dbusifs/enginedevice.cpp" line="349"/>
- <source></source>
- <comment>wireless mice with internal batteries</comment>
- <translation></translation>
- </message>
- <message>
- <location filename="../src/dbusifs/enginedevice.cpp" line="353"/>
- <source></source>
- <comment>wireless keyboard with internal battery</comment>
- <translation></translation>
- </message>
- <message>
- <location filename="../src/dbusifs/enginedevice.cpp" line="357"/>
- <source></source>
- <comment>portable device</comment>
- <translation></translation>
- </message>
- <message>
- <location filename="../src/dbusifs/enginedevice.cpp" line="361"/>
- <source></source>
- <comment>cell phone (mobile...)</comment>
- <translation></translation>
- </message>
- <message>
- <location filename="../src/dbusifs/enginedevice.cpp" line="365"/>
- <source></source>
- <comment>media player, mp3 etc</comment>
- <translation></translation>
- </message>
- <message>
- <location filename="../src/dbusifs/enginedevice.cpp" line="369"/>
- <source></source>
- <comment>tablet device</comment>
- <translation></translation>
- </message>
- <message>
- <location filename="../src/dbusifs/enginedevice.cpp" line="373"/>
- <source></source>
<comment>tablet device</comment>
<translation></translation>
</message>
@@ -2521,6 +2467,21 @@
<translation type="vanished">Өткізіп жіберу</translation>
</message>
</context>
+<context>
+ <name>UserListWidget</name>
+ <message>
+ <location filename="../src/widgets/userlistwidget.cpp" line="46"/>
+ <location filename="../src/widgets/userlistwidget.cpp" line="99"/>
+ <source>Login</source>
+ <translation type="unfinished">Кіру</translation>
+ </message>
+ <message>
+ <location filename="../src/widgets/userlistwidget.cpp" line="48"/>
+ <location filename="../src/widgets/userlistwidget.cpp" line="101"/>
+ <source>Guest</source>
+ <translation type="unfinished">游客</translation>
+ </message>
+</context>
<context>
<name>Utils</name>
<message>
@@ -2692,12 +2653,12 @@
<translation>терезе идентифика- ты</translation>
</message>
<message>
- <location filename="../src/lock-backend/main.cpp" line="48"/>
+ <location filename="../src/lock-backend/main.cpp" line="49"/>
<source>Backend for the ukui ScreenSaver.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/lock-backend/main.cpp" line="54"/>
+ <location filename="../src/lock-backend/main.cpp" line="55"/>
<source>lock the screen by startup</source>
<translation type="unfinished"></translation>
</message>
diff --git a/i18n_ts/ky.ts b/i18n_ts/ky.ts
index 8970c57..2c6c34c 100644
--- a/i18n_ts/ky.ts
+++ b/i18n_ts/ky.ts
@@ -24,7 +24,7 @@
<translation type="obsolete">使用密码认证</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1085"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1117"/>
<source>Retry</source>
<translation>Ретри</translation>
</message>
@@ -53,125 +53,130 @@
<translation type="vanished">账户锁定%1分钟由于%2次错误尝试</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1148"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1186"/>
<source>Please try again in %1 minutes.</source>
<translation>%1 мүнөттө кайра аракет кылыңыз.</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1155"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1193"/>
<source>Please try again in %1 seconds.</source>
<translation>%1 секунданын ичинде кайра аракет кылыңыз.</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1162"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1200"/>
<source>Account locked permanently.</source>
<translation>Эсеп биротоло кулпуланган.</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="522"/>
- <location filename="../src/widgets/authdialog.cpp" line="565"/>
+ <location filename="../src/widgets/authdialog.cpp" line="549"/>
+ <location filename="../src/widgets/authdialog.cpp" line="592"/>
<source>Verify face recognition or enter password to unlock</source>
<translation>Беттин таанылышын текшерүү же кулпуну ачуу үчүн сырсөз киргизүү</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="527"/>
+ <location filename="../src/widgets/authdialog.cpp" line="348"/>
+ <source>Guest</source>
+ <translation type="unfinished">游客</translation>
+ </message>
+ <message>
+ <location filename="../src/widgets/authdialog.cpp" line="554"/>
<source>Press fingerprint or enter password to unlock</source>
<translation>Манжа изин басуу же кулпуну ачуу үчүн сырсөз киргизүү</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="532"/>
+ <location filename="../src/widgets/authdialog.cpp" line="559"/>
<source>Verify voiceprint or enter password to unlock</source>
<translation>Үн изин текшерүү же сырсөз киргизүү</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="537"/>
+ <location filename="../src/widgets/authdialog.cpp" line="564"/>
<source>Verify finger vein or enter password to unlock</source>
<translation>Манжа тамырын текшерүү же кулпуну ачуу үчүн сырсөз киргизүү</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="542"/>
+ <location filename="../src/widgets/authdialog.cpp" line="569"/>
<source>Verify iris or enter password to unlock</source>
<translation>Ирис текшерүү же кулпусун ачуу үчүн сырсөз киргизүү</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="860"/>
+ <location filename="../src/widgets/authdialog.cpp" line="887"/>
<source>Input Password</source>
<translation>Сырсөз киргизүү</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="865"/>
+ <location filename="../src/widgets/authdialog.cpp" line="892"/>
<source>Username</source>
<translation type="unfinished">Колдонуучунун аты</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="928"/>
+ <location filename="../src/widgets/authdialog.cpp" line="960"/>
<source>User name input error!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1005"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1037"/>
<source>login</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1382"/>
- <location filename="../src/widgets/authdialog.cpp" line="1534"/>
- <location filename="../src/widgets/authdialog.cpp" line="1675"/>
- <location filename="../src/widgets/authdialog.cpp" line="1852"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1420"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1572"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1713"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1890"/>
<source>Failed to verify %1, please enter password to unlock</source>
<translation>%1 текшерүүгө болбоду, кулпусун ачуу үчүн сырсөздү киргизиңиз</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1384"/>
- <location filename="../src/widgets/authdialog.cpp" line="1536"/>
- <location filename="../src/widgets/authdialog.cpp" line="1679"/>
- <location filename="../src/widgets/authdialog.cpp" line="1681"/>
- <location filename="../src/widgets/authdialog.cpp" line="1854"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1422"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1574"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1717"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1719"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1892"/>
<source>Unable to verify %1, please enter password to unlock</source>
<translation>%1 текшерүүгө болбоду, кулпусун ачуу үчүн сырсөздү киргизиңиз</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1709"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1747"/>
<source>Abnormal network</source>
<translation>Аномалдуу тармак</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1716"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1754"/>
<source>Face recognition waiting time out, please click refresh or enter the password to unlock.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1982"/>
+ <location filename="../src/widgets/authdialog.cpp" line="2020"/>
<source>FingerPrint</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1984"/>
+ <location filename="../src/widgets/authdialog.cpp" line="2022"/>
<source>FingerVein</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1986"/>
+ <location filename="../src/widgets/authdialog.cpp" line="2024"/>
<source>Iris</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1988"/>
+ <location filename="../src/widgets/authdialog.cpp" line="2026"/>
<source>Face</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1990"/>
+ <location filename="../src/widgets/authdialog.cpp" line="2028"/>
<source>VoicePrint</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1992"/>
+ <location filename="../src/widgets/authdialog.cpp" line="2030"/>
<source>Ukey</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1994"/>
+ <location filename="../src/widgets/authdialog.cpp" line="2032"/>
<source>QRCode</source>
<translation type="unfinished">QRCode</translation>
</message>
@@ -180,8 +185,8 @@
<translation type="vanished">使用绑定的微信扫码或输入密码登录</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="703"/>
- <location filename="../src/widgets/authdialog.cpp" line="704"/>
+ <location filename="../src/widgets/authdialog.cpp" line="730"/>
+ <location filename="../src/widgets/authdialog.cpp" line="731"/>
<source>Password cannot be empty</source>
<translation>Сырсөз бош болушу мүмкүн эмес</translation>
</message>
@@ -194,8 +199,8 @@
<translation type="vanished">无法验证%1请输入密码.</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1694"/>
- <location filename="../src/widgets/authdialog.cpp" line="1698"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1732"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1736"/>
<source>Failed to verify %1, you still have %2 verification opportunities</source>
<translation>%1 текшерүүгө болбоду, сизде дагы эле %2 текшерүү мүмкүнчүлүктөрү бар</translation>
</message>
@@ -224,23 +229,24 @@
<translation type="vanished">请输入密码或者录入指纹</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="931"/>
- <location filename="../src/widgets/authdialog.cpp" line="936"/>
+ <location filename="../src/widgets/authdialog.cpp" line="963"/>
+ <location filename="../src/widgets/authdialog.cpp" line="968"/>
<source>Authentication failure, Please try again</source>
<translation>Аутентификациянын жетишсиздиги, сураныч, кайрадан аракет кылыңыз</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="547"/>
+ <location filename="../src/widgets/authdialog.cpp" line="574"/>
<source>Use the bound wechat scanning code or enter the password to unlock</source>
<translation>Чектелген вечат сканерлеу кодын колдонуңуз же сырсөздү ачуу үчүн киргизиңиз</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="857"/>
+ <location filename="../src/widgets/authdialog.cpp" line="884"/>
<source>Password </source>
<translation>Сырсөз </translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1076"/>
+ <location filename="../src/widgets/authdialog.cpp" line="346"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1108"/>
<source>Login</source>
<translation>Кирүү</translation>
</message>
@@ -360,31 +366,35 @@
<name>BlockWidget</name>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="40"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="82"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="135"/>
<source>Cancel</source>
<translation type="unfinished">Жокко чыгаруу</translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="44"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="83"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="136"/>
<source>Confrim</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/blockwidget.cpp" line="89"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="91"/>
<source>The following program is running to prevent the system from reboot!</source>
<translation type="unfinished">Системаны кайра жүктөөдөн алдын алуу үчүн төмөнкү программа иштеп жатат!</translation>
</message>
<message>
- <location filename="../src/widgets/blockwidget.cpp" line="92"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="94"/>
<source>The following program is running to prevent the system from shutting down!</source>
<translation type="unfinished">Системанын жабылышына жол бербөө үчүн төмөнкү программа иштеп жатат!</translation>
</message>
<message>
- <location filename="../src/widgets/blockwidget.cpp" line="95"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="97"/>
<source>The following program is running to prevent the system from suspend!</source>
<translation type="unfinished">Системанын токтотулушуна жол бербөө үчүн төмөнкү программа иштеп жатат!</translation>
</message>
<message>
- <location filename="../src/widgets/blockwidget.cpp" line="98"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="100"/>
<source>The following program is running to prevent the system from hibernate!</source>
<translation type="unfinished">Системанын уктап кетишине жол бербөө үчүн төмөнкү программа иштеп жатат!</translation>
</message>
@@ -400,17 +410,18 @@
<context>
<name>CharsWidget</name>
<message>
- <location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="114"/>
+ <location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="115"/>
+ <location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="273"/>
<source>More</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="128"/>
+ <location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="129"/>
<source>ABC</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="141"/>
+ <location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="142"/>
<source>123</source>
<translation type="unfinished"></translation>
</message>
@@ -1863,17 +1874,17 @@
<context>
<name>LightDMHelper</name>
<message>
- <location filename="../src/lock-backend/lightdmhelper.cpp" line="99"/>
+ <location filename="../src/lock-backend/lightdmhelper.cpp" line="105"/>
<source>failed to start session.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/lock-backend/lightdmhelper.cpp" line="234"/>
+ <location filename="../src/lock-backend/lightdmhelper.cpp" line="204"/>
<source>Login</source>
<translation type="unfinished">Кирүү</translation>
</message>
<message>
- <location filename="../src/lock-backend/lightdmhelper.cpp" line="242"/>
+ <location filename="../src/lock-backend/lightdmhelper.cpp" line="213"/>
<source>Guest</source>
<translation type="unfinished">游客</translation>
</message>
@@ -1901,7 +1912,7 @@
<translation type="vanished">Бир эле учурда бир нече колдонуучулар катталган. Сиз бул системаны кайра жүктөп келет деп ишенесизби?</translation>
</message>
<message>
- <location filename="../src/widgets/lockwidget.cpp" line="923"/>
+ <location filename="../src/widgets/lockwidget.cpp" line="944"/>
<source>Multiple users are logged in at the same time.Are you sure you want to %1 this system?</source>
<translation type="unfinished"></translation>
</message>
@@ -1979,12 +1990,12 @@
<context>
<name>MyNetworkWidget</name>
<message>
- <location filename="../src/widgets/mynetworkwidget.cpp" line="36"/>
+ <location filename="../src/widgets/mynetworkwidget.cpp" line="35"/>
<source>LAN</source>
<translation type="unfinished">ЛАН</translation>
</message>
<message>
- <location filename="../src/widgets/mynetworkwidget.cpp" line="38"/>
+ <location filename="../src/widgets/mynetworkwidget.cpp" line="37"/>
<source>WLAN</source>
<translation type="unfinished">ВЛАН</translation>
</message>
@@ -1992,12 +2003,13 @@
<context>
<name>NumbersWidget</name>
<message>
- <location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="160"/>
+ <location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="161"/>
<source>&amp;&amp;?!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="174"/>
+ <location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="175"/>
+ <location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="310"/>
<source>Return</source>
<translation type="unfinished"></translation>
</message>
@@ -2306,72 +2318,6 @@
<message>
<location filename="../src/dbusifs/enginedevice.cpp" line="308"/>
<source></source>
- <comment>this is only shown for laptops with multiple batteries</comment>
- <translation></translation>
- </message>
- <message>
- <location filename="../src/dbusifs/enginedevice.cpp" line="313"/>
- <source></source>
- <comment>this is only shown for laptops with multiple batteries</comment>
- <translation></translation>
- </message>
- <message>
- <location filename="../src/dbusifs/enginedevice.cpp" line="337"/>
- <source></source>
- <comment>laptop primary battery</comment>
- <translation></translation>
- </message>
- <message>
- <location filename="../src/dbusifs/enginedevice.cpp" line="341"/>
- <source></source>
- <comment>battery-backed AC power source</comment>
- <translation></translation>
- </message>
- <message>
- <location filename="../src/dbusifs/enginedevice.cpp" line="345"/>
- <source></source>
- <comment>a monitor is a device to measure voltage and current</comment>
- <translation></translation>
- </message>
- <message>
- <location filename="../src/dbusifs/enginedevice.cpp" line="349"/>
- <source></source>
- <comment>wireless mice with internal batteries</comment>
- <translation></translation>
- </message>
- <message>
- <location filename="../src/dbusifs/enginedevice.cpp" line="353"/>
- <source></source>
- <comment>wireless keyboard with internal battery</comment>
- <translation></translation>
- </message>
- <message>
- <location filename="../src/dbusifs/enginedevice.cpp" line="357"/>
- <source></source>
- <comment>portable device</comment>
- <translation></translation>
- </message>
- <message>
- <location filename="../src/dbusifs/enginedevice.cpp" line="361"/>
- <source></source>
- <comment>cell phone (mobile...)</comment>
- <translation></translation>
- </message>
- <message>
- <location filename="../src/dbusifs/enginedevice.cpp" line="365"/>
- <source></source>
- <comment>media player, mp3 etc</comment>
- <translation></translation>
- </message>
- <message>
- <location filename="../src/dbusifs/enginedevice.cpp" line="369"/>
- <source></source>
- <comment>tablet device</comment>
- <translation></translation>
- </message>
- <message>
- <location filename="../src/dbusifs/enginedevice.cpp" line="373"/>
- <source></source>
<comment>tablet device</comment>
<translation></translation>
</message>
@@ -2521,6 +2467,21 @@
<translation type="vanished">Өтүү</translation>
</message>
</context>
+<context>
+ <name>UserListWidget</name>
+ <message>
+ <location filename="../src/widgets/userlistwidget.cpp" line="46"/>
+ <location filename="../src/widgets/userlistwidget.cpp" line="99"/>
+ <source>Login</source>
+ <translation type="unfinished">Кирүү</translation>
+ </message>
+ <message>
+ <location filename="../src/widgets/userlistwidget.cpp" line="48"/>
+ <location filename="../src/widgets/userlistwidget.cpp" line="101"/>
+ <source>Guest</source>
+ <translation type="unfinished">游客</translation>
+ </message>
+</context>
<context>
<name>Utils</name>
<message>
@@ -2692,12 +2653,12 @@
<translation>терезе идентификату</translation>
</message>
<message>
- <location filename="../src/lock-backend/main.cpp" line="48"/>
+ <location filename="../src/lock-backend/main.cpp" line="49"/>
<source>Backend for the ukui ScreenSaver.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/lock-backend/main.cpp" line="54"/>
+ <location filename="../src/lock-backend/main.cpp" line="55"/>
<source>lock the screen by startup</source>
<translation type="unfinished"></translation>
</message>
diff --git a/i18n_ts/mn.ts b/i18n_ts/mn.ts
index 88df517..6db645f 100644
--- a/i18n_ts/mn.ts
+++ b/i18n_ts/mn.ts
@@ -24,7 +24,7 @@
<translation type="obsolete">使用密码认证</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1085"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1117"/>
<source>Retry</source>
<translation>ᠳᠠᠬᠢᠵᠤ ᠳᠤᠷᠱᠢᠬᠤ</translation>
</message>
@@ -53,125 +53,130 @@
<translation type="vanished">账户锁定%1分钟由于%2次错误尝试</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1148"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1186"/>
<source>Please try again in %1 minutes.</source>
<translation>%1 ᠮᠢᠨᠦ᠋ᠲ᠎ᠦᠨ ᠳᠠᠷᠠᠭ᠎ᠠ ᠳᠠᠬᠢᠵᠤ ᠳᠤᠷᠠᠱᠢᠭᠠᠷᠠᠢ</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1155"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1193"/>
<source>Please try again in %1 seconds.</source>
<translation>%1 ᠮᠢᠨᠦ᠋ᠲ᠎ᠦᠨ ᠳᠠᠷᠠᠭ᠎ᠠ ᠳᠠᠬᠢᠵᠤ ᠳᠤᠷᠠᠱᠢᠭᠠᠷᠠᠢ</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1162"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1200"/>
<source>Account locked permanently.</source>
<translation>ᠳᠠᠩᠰᠠ ᠨᠢᠭᠡᠨᠳᠡ ᠦᠨᠢᠳᠡ ᠤᠨᠢᠰᠤᠯᠠᠭᠳᠠᠪᠠ᠃</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="522"/>
- <location filename="../src/widgets/authdialog.cpp" line="565"/>
+ <location filename="../src/widgets/authdialog.cpp" line="549"/>
+ <location filename="../src/widgets/authdialog.cpp" line="592"/>
<source>Verify face recognition or enter password to unlock</source>
<translation>ᠨᠢᠭᠤᠷ ᠱᠢᠷᠪᠢᠵᠤ ᠪᠠᠳᠤᠯᠭᠠᠵᠢᠭᠤᠯᠬᠤ ᠪᠤᠶᠤ ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ ᠤᠷᠤᠭᠤᠯᠵᠤ ᠤᠨᠢᠰᠤ᠎ᠶᠢ ᠳᠠᠢᠯᠤᠭᠠᠷᠠᠢ</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="527"/>
+ <location filename="../src/widgets/authdialog.cpp" line="348"/>
+ <source>Guest</source>
+ <translation type="unfinished">游客</translation>
+ </message>
+ <message>
+ <location filename="../src/widgets/authdialog.cpp" line="554"/>
<source>Press fingerprint or enter password to unlock</source>
<translation>ᠬᠤᠷᠤᠭᠤᠨ᠎ᠤ ᠤᠷᠤᠮ ᠳᠠᠷᠤᠬᠤ ᠪᠤᠶᠤ ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ ᠤᠷᠤᠭᠤᠯᠵᠤ ᠤᠨᠢᠰᠤ᠎ᠶᠢ ᠳᠠᠢᠯᠤᠭᠠᠷᠠᠢ</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="532"/>
+ <location filename="../src/widgets/authdialog.cpp" line="559"/>
<source>Verify voiceprint or enter password to unlock</source>
<translation>ᠳᠠᠭᠤ᠎ᠪᠠᠷ ᠪᠠᠳᠤᠯᠭᠠᠵᠢᠭᠤᠯᠬᠤ ᠪᠤᠶᠤ ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ ᠤᠷᠤᠭᠤᠯᠵᠤ ᠤᠨᠢᠰᠤ᠎ᠶᠢ ᠳᠠᠢᠯᠤᠭᠠᠷᠠᠢ</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="537"/>
+ <location filename="../src/widgets/authdialog.cpp" line="564"/>
<source>Verify finger vein or enter password to unlock</source>
<translation>ᠬᠤᠷᠤᠭᠤᠨ᠎ᠤ ᠨᠠᠮᠵᠢᠭᠤᠨ ᠰᠤᠳᠠᠯ᠎ᠢᠶᠠᠷ ᠪᠠᠳᠤᠯᠭᠠᠵᠢᠭᠤᠯᠬᠤ ᠪᠤᠶᠤ ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ ᠤᠷᠤᠭᠤᠯᠵᠤ ᠤᠨᠢᠰᠤ᠎ᠶᠢ ᠳᠠᠢᠯᠤᠭᠠᠷᠠᠢ</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="542"/>
+ <location filename="../src/widgets/authdialog.cpp" line="569"/>
<source>Verify iris or enter password to unlock</source>
<translation>ᠰᠤᠯᠤᠩᠭ᠎ᠠ ᠪᠦᠷᠬᠦᠪᠴᠢ᠎ᠶᠢ ᠪᠠᠳᠤᠯᠭᠠᠵᠢᠭᠤᠯᠬᠤ ᠪᠤᠶᠤ ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ ᠤᠷᠤᠭᠤᠯᠵᠤ ᠤᠨᠢᠰᠤ᠎ᠶᠢ ᠳᠠᠢᠯᠤᠭᠠᠷᠠᠢ</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="860"/>
+ <location filename="../src/widgets/authdialog.cpp" line="887"/>
<source>Input Password</source>
<translation>ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ ᠤᠷᠤᠭᠤᠯᠬᠤ</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="865"/>
+ <location filename="../src/widgets/authdialog.cpp" line="892"/>
<source>Username</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="928"/>
+ <location filename="../src/widgets/authdialog.cpp" line="960"/>
<source>User name input error!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1005"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1037"/>
<source>login</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1382"/>
- <location filename="../src/widgets/authdialog.cpp" line="1534"/>
- <location filename="../src/widgets/authdialog.cpp" line="1675"/>
- <location filename="../src/widgets/authdialog.cpp" line="1852"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1420"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1572"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1713"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1890"/>
<source>Failed to verify %1, please enter password to unlock</source>
<translation>%1ᠤ ᠪᠠᠳᠤᠯᠭᠠᠵᠢᠭᠤᠯᠤᠯᠳᠠ ᠢᠯᠠᠭᠳᠠᠪᠠ ᠂ ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ ᠤᠷᠤᠭᠤᠯᠵᠤ ᠤᠨᠢᠰᠤ᠎ᠶᠢ ᠳᠠᠢᠯᠤᠭᠠᠷᠠᠢ</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1384"/>
- <location filename="../src/widgets/authdialog.cpp" line="1536"/>
- <location filename="../src/widgets/authdialog.cpp" line="1679"/>
- <location filename="../src/widgets/authdialog.cpp" line="1681"/>
- <location filename="../src/widgets/authdialog.cpp" line="1854"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1422"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1574"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1717"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1719"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1892"/>
<source>Unable to verify %1, please enter password to unlock</source>
<translation>%1ᠶᠢ/᠎ᠢ ᠪᠠᠳᠤᠯᠭᠠᠵᠢᠭᠤᠯᠬᠤ ᠠᠷᠭ᠎ᠠ ᠦᠬᠡᠢ ᠂ ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ ᠤᠷᠤᠭᠤᠯᠵᠤ ᠤᠨᠢᠰᠤ᠎ᠶᠢ ᠳᠠᠢᠯᠤᠭᠠᠷᠠᠢ</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1709"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1747"/>
<source>Abnormal network</source>
<translation>ᠰᠦᠯᠵᠢᠶ᠎ᠡ ᠬᠡᠪ᠎ᠦᠨ ᠪᠤᠰᠤ</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1716"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1754"/>
<source>Face recognition waiting time out, please click refresh or enter the password to unlock.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1982"/>
+ <location filename="../src/widgets/authdialog.cpp" line="2020"/>
<source>FingerPrint</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1984"/>
+ <location filename="../src/widgets/authdialog.cpp" line="2022"/>
<source>FingerVein</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1986"/>
+ <location filename="../src/widgets/authdialog.cpp" line="2024"/>
<source>Iris</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1988"/>
+ <location filename="../src/widgets/authdialog.cpp" line="2026"/>
<source>Face</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1990"/>
+ <location filename="../src/widgets/authdialog.cpp" line="2028"/>
<source>VoicePrint</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1992"/>
+ <location filename="../src/widgets/authdialog.cpp" line="2030"/>
<source>Ukey</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1994"/>
+ <location filename="../src/widgets/authdialog.cpp" line="2032"/>
<source>QRCode</source>
<translation type="unfinished">ᠬᠤᠶᠠᠷ ᠬᠡᠮᠵᠢᠯᠳᠡᠳᠦ ᠺᠤᠳ᠋</translation>
</message>
@@ -180,8 +185,8 @@
<translation type="vanished">使用绑定的微信扫码或输入密码登录</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="703"/>
- <location filename="../src/widgets/authdialog.cpp" line="704"/>
+ <location filename="../src/widgets/authdialog.cpp" line="730"/>
+ <location filename="../src/widgets/authdialog.cpp" line="731"/>
<source>Password cannot be empty</source>
<translation>ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ ᠬᠤᠭᠤᠰᠤᠨ ᠪᠠᠢᠵᠤ ᠪᠤᠯᠬᠤ ᠦᠬᠡᠢ</translation>
</message>
@@ -194,8 +199,8 @@
<translation type="vanished">无法验证%1请输入密码.</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1694"/>
- <location filename="../src/widgets/authdialog.cpp" line="1698"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1732"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1736"/>
<source>Failed to verify %1, you still have %2 verification opportunities</source>
<translation>%1ᠶᠢᠨ/᠎ᠦᠨ ᠪᠠᠳᠤᠯᠭᠠᠵᠢᠭᠤᠯᠤᠯᠳᠠ ᠢᠯᠠᠭᠳᠠᠪᠠ ᠂ ᠲᠠ ᠪᠠᠰᠠ%2 ᠤᠳᠠᠭᠠᠨ᠎ᠤ ᠳᠤᠷᠱᠢᠬᠤ ᠵᠠᠪᠱᠢᠶᠠᠨ ᠲᠠᠢ</translation>
</message>
@@ -224,13 +229,13 @@
<translation type="vanished">请输入密码或者录入指纹</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="931"/>
- <location filename="../src/widgets/authdialog.cpp" line="936"/>
+ <location filename="../src/widgets/authdialog.cpp" line="963"/>
+ <location filename="../src/widgets/authdialog.cpp" line="968"/>
<source>Authentication failure, Please try again</source>
<translation>ᠪᠠᠳᠤᠯᠭᠠᠵᠢᠭᠤᠯᠤᠯᠳᠠ ᠢᠯᠠᠭᠳᠠᠪᠠ ᠂ ᠳᠠᠬᠢᠵᠤ ᠳᠤᠷᠱᠢᠭᠠᠷᠠᠢ</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="547"/>
+ <location filename="../src/widgets/authdialog.cpp" line="574"/>
<source>Use the bound wechat scanning code or enter the password to unlock</source>
<translation>ᠤᠶᠠᠭᠰᠠᠨ ᠸᠢᠴᠠᠲ᠎ᠢᠶᠠᠷ ᠺᠤᠳ᠋ ᠱᠢᠷᠪᠢᠬᠦ᠌ ᠪᠤᠶᠤ ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ ᠤᠷᠤᠭᠤᠯᠵᠤ ᠤᠨᠢᠰᠤ᠎ᠶᠢ ᠳᠠᠢᠯᠤᠭᠠᠷᠠᠢ</translation>
</message>
@@ -243,12 +248,13 @@
<translation type="vanished">ᠠᠮᠤᠷ ᠲᠦᠪᠰᠢᠨ ᠦ ᠨᠢᠭᠤᠴᠠ ᠶᠢ USB ᠦᠵᠦᠭᠦᠷ ᠲᠦ ᠬᠠᠳᠬᠤᠵᠤ ᠣᠷᠣᠭᠠᠷᠠᠢ </translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="857"/>
+ <location filename="../src/widgets/authdialog.cpp" line="884"/>
<source>Password </source>
<translation>ᠨᠢᠭᠤᠴᠠ ᠺᠤᠳ᠋ </translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1076"/>
+ <location filename="../src/widgets/authdialog.cpp" line="346"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1108"/>
<source>Login</source>
<translation>ᠳᠠᠩᠰᠠᠯᠠᠨ ᠤᠷᠤᠬᠤ</translation>
</message>
@@ -368,31 +374,35 @@
<name>BlockWidget</name>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="40"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="82"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="135"/>
<source>Cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="44"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="83"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="136"/>
<source>Confrim</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/blockwidget.cpp" line="89"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="91"/>
<source>The following program is running to prevent the system from reboot!</source>
<translation type="unfinished">ᠳᠠᠷᠠᠭᠠᠬᠢ ᠫᠠᠷᠦᠭᠷᠡᠮ ᠶᠠᠭ ᠠᠵᠢᠯᠯᠠᠵᠤ ᠪᠠᠢᠨ᠎ᠠ ᠂ ᠱᠢᠰᠲ᠋ᠧᠮ᠎ᠦᠨ ᠳᠠᠬᠢᠵᠤ ᠡᠬᠢᠯᠡᠬᠦ᠌᠎ᠶᠢ ᠬᠤᠷᠢᠭᠯᠠᠨ᠎ᠠ!</translation>
</message>
<message>
- <location filename="../src/widgets/blockwidget.cpp" line="92"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="94"/>
<source>The following program is running to prevent the system from shutting down!</source>
<translation type="unfinished">ᠳᠠᠷᠠᠭᠠᠬᠢ ᠫᠠᠷᠦᠭᠷᠡᠮ ᠶᠠᠭ ᠠᠵᠢᠯᠯᠠᠵᠤ ᠪᠠᠢᠨ᠎ᠠ ᠂ ᠱᠢᠰᠲ᠋ᠧᠮ᠎ᠦᠨ ᠬᠠᠭᠠᠬᠤ᠎ᠶᠢ ᠬᠤᠷᠢᠭᠯᠠᠨ᠎ᠠ!</translation>
</message>
<message>
- <location filename="../src/widgets/blockwidget.cpp" line="95"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="97"/>
<source>The following program is running to prevent the system from suspend!</source>
<translation type="unfinished">ᠳᠠᠷᠠᠭᠠᠬᠢ ᠫᠠᠷᠦᠭᠷᠡᠮ ᠶᠠᠭ ᠠᠵᠢᠯᠯᠠᠵᠤ ᠪᠠᠢᠨ᠎ᠠ ᠂ ᠱᠢᠰᠲ᠋ᠧᠮ᠎ᠦᠨ ᠤᠨᠳᠠᠬᠤ᠎ᠶᠢ ᠬᠤᠷᠢᠭᠯᠠᠨ᠎ᠠ!</translation>
</message>
<message>
- <location filename="../src/widgets/blockwidget.cpp" line="98"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="100"/>
<source>The following program is running to prevent the system from hibernate!</source>
<translation type="unfinished">ᠳᠠᠷᠠᠭᠠᠬᠢ ᠫᠠᠷᠦᠭᠷᠡᠮ ᠶᠠᠭ ᠠᠵᠢᠯᠯᠠᠵᠤ ᠪᠠᠢᠨ᠎ᠠ ᠂ ᠱᠢᠰᠲ᠋ᠧᠮ᠎ᠦᠨ ᠢᠴᠡᠬᠡᠯᠡᠬᠦ᠌᠎ᠶᠢ ᠬᠤᠷᠢᠭᠯᠠᠨ᠎ᠠ!</translation>
</message>
@@ -408,17 +418,18 @@
<context>
<name>CharsWidget</name>
<message>
- <location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="114"/>
+ <location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="115"/>
+ <location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="273"/>
<source>More</source>
<translation>ᠨᠡᠩ ᠠᠷᠪᠢᠨ </translation>
</message>
<message>
- <location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="128"/>
+ <location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="129"/>
<source>ABC</source>
<translation>ABC</translation>
</message>
<message>
- <location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="141"/>
+ <location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="142"/>
<source>123</source>
<translation>123</translation>
</message>
@@ -1890,17 +1901,17 @@
<context>
<name>LightDMHelper</name>
<message>
- <location filename="../src/lock-backend/lightdmhelper.cpp" line="99"/>
+ <location filename="../src/lock-backend/lightdmhelper.cpp" line="105"/>
<source>failed to start session.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/lock-backend/lightdmhelper.cpp" line="234"/>
+ <location filename="../src/lock-backend/lightdmhelper.cpp" line="204"/>
<source>Login</source>
<translation type="unfinished">ᠳᠠᠩᠰᠠᠯᠠᠨ ᠤᠷᠤᠬᠤ</translation>
</message>
<message>
- <location filename="../src/lock-backend/lightdmhelper.cpp" line="242"/>
+ <location filename="../src/lock-backend/lightdmhelper.cpp" line="213"/>
<source>Guest</source>
<translation type="unfinished">游客</translation>
</message>
@@ -1944,7 +1955,7 @@
<translation type="vanished">ᠤᠳᠠᠰᠤ ᠦᠬᠡᠢ ᠬᠡᠰᠡᠭ ᠬᠡᠪᠴᠢᠶᠡᠨ᠎ᠦ ᠰᠦᠯᠵᠢᠶ᠎ᠡ</translation>
</message>
<message>
- <location filename="../src/widgets/lockwidget.cpp" line="923"/>
+ <location filename="../src/widgets/lockwidget.cpp" line="944"/>
<source>Multiple users are logged in at the same time.Are you sure you want to %1 this system?</source>
<translation type="unfinished"></translation>
</message>
@@ -2022,12 +2033,12 @@
<context>
<name>MyNetworkWidget</name>
<message>
- <location filename="../src/widgets/mynetworkwidget.cpp" line="36"/>
+ <location filename="../src/widgets/mynetworkwidget.cpp" line="35"/>
<source>LAN</source>
<translation type="unfinished">ᠤᠳᠠᠰᠤᠳᠤ ᠰᠦᠯᠵᠢᠶ᠎ᠡ</translation>
</message>
<message>
- <location filename="../src/widgets/mynetworkwidget.cpp" line="38"/>
+ <location filename="../src/widgets/mynetworkwidget.cpp" line="37"/>
<source>WLAN</source>
<translation type="unfinished">ᠤᠳᠠᠰᠤ ᠦᠬᠡᠢ ᠬᠡᠰᠡᠭ ᠬᠡᠪᠴᠢᠶᠡᠨ᠎ᠦ ᠰᠦᠯᠵᠢᠶ᠎ᠡ</translation>
</message>
@@ -2035,12 +2046,13 @@
<context>
<name>NumbersWidget</name>
<message>
- <location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="160"/>
+ <location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="161"/>
<source>&amp;&amp;?!</source>
<translation>&amp;&amp;?!</translation>
</message>
<message>
- <location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="174"/>
+ <location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="175"/>
+ <location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="310"/>
<source>Return</source>
<translation>ᠪᠤᠴᠠᠵᠤ ᠢᠷᠡᠨ᠎ᠡ </translation>
</message>
@@ -2514,6 +2526,21 @@
<translation type="vanished">ᠦᠰᠦᠷᠴᠤ᠌ ᠭᠠᠷᠬᠤ</translation>
</message>
</context>
+<context>
+ <name>UserListWidget</name>
+ <message>
+ <location filename="../src/widgets/userlistwidget.cpp" line="46"/>
+ <location filename="../src/widgets/userlistwidget.cpp" line="99"/>
+ <source>Login</source>
+ <translation type="unfinished">ᠳᠠᠩᠰᠠᠯᠠᠨ ᠤᠷᠤᠬᠤ</translation>
+ </message>
+ <message>
+ <location filename="../src/widgets/userlistwidget.cpp" line="48"/>
+ <location filename="../src/widgets/userlistwidget.cpp" line="101"/>
+ <source>Guest</source>
+ <translation type="unfinished">游客</translation>
+ </message>
+</context>
<context>
<name>Utils</name>
<message>
@@ -2685,12 +2712,12 @@
<translation>ᠴᠣᠩᠬᠣᠨ᠎ᠤ᠋ id</translation>
</message>
<message>
- <location filename="../src/lock-backend/main.cpp" line="48"/>
+ <location filename="../src/lock-backend/main.cpp" line="49"/>
<source>Backend for the ukui ScreenSaver.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/lock-backend/main.cpp" line="54"/>
+ <location filename="../src/lock-backend/main.cpp" line="55"/>
<source>lock the screen by startup</source>
<translation type="unfinished"></translation>
</message>
diff --git a/i18n_ts/pt.ts b/i18n_ts/pt.ts
index 1525f0f..37d4686 100644
--- a/i18n_ts/pt.ts
+++ b/i18n_ts/pt.ts
@@ -158,6 +158,10 @@
<source>QRCode</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Guest</source>
+ <translation type="unfinished">Convidado</translation>
+ </message>
</context>
<context>
<name>BatteryWidget</name>
@@ -723,6 +727,17 @@
<translation type="obsolete">TextLabel</translation>
</message>
</context>
+<context>
+ <name>UserListWidget</name>
+ <message>
+ <source>Login</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Guest</source>
+ <translation type="unfinished">Convidado</translation>
+ </message>
+</context>
<context>
<name>Widget</name>
<message>
diff --git a/i18n_ts/ru.ts b/i18n_ts/ru.ts
index be49d2b..ad5ee8b 100644
--- a/i18n_ts/ru.ts
+++ b/i18n_ts/ru.ts
@@ -158,6 +158,10 @@
<source>QRCode</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Guest</source>
+ <translation type="unfinished">гость</translation>
+ </message>
</context>
<context>
<name>BatteryWidget</name>
@@ -723,6 +727,17 @@
<translation type="obsolete">TextLabel</translation>
</message>
</context>
+<context>
+ <name>UserListWidget</name>
+ <message>
+ <source>Login</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Guest</source>
+ <translation type="unfinished">гость</translation>
+ </message>
+</context>
<context>
<name>Widget</name>
<message>
diff --git a/i18n_ts/tr.ts b/i18n_ts/tr.ts
index 8d8d4a7..eaed354 100644
--- a/i18n_ts/tr.ts
+++ b/i18n_ts/tr.ts
@@ -24,7 +24,7 @@
<translation type="obsolete">Parola</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1085"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1117"/>
<source>Retry</source>
<translation type="unfinished">Yeniden Dene</translation>
</message>
@@ -49,158 +49,164 @@
<translation type="vanished">Kimlik doğrulama hatası, hala %1 kalan denemen var</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="931"/>
- <location filename="../src/widgets/authdialog.cpp" line="936"/>
+ <location filename="../src/widgets/authdialog.cpp" line="963"/>
+ <location filename="../src/widgets/authdialog.cpp" line="968"/>
<source>Authentication failure, Please try again</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1148"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1186"/>
<source>Please try again in %1 minutes.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1155"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1193"/>
<source>Please try again in %1 seconds.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1162"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1200"/>
<source>Account locked permanently.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="522"/>
- <location filename="../src/widgets/authdialog.cpp" line="565"/>
+ <location filename="../src/widgets/authdialog.cpp" line="549"/>
+ <location filename="../src/widgets/authdialog.cpp" line="592"/>
<source>Verify face recognition or enter password to unlock</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="527"/>
+ <location filename="../src/widgets/authdialog.cpp" line="554"/>
<source>Press fingerprint or enter password to unlock</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="532"/>
+ <location filename="../src/widgets/authdialog.cpp" line="559"/>
<source>Verify voiceprint or enter password to unlock</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="537"/>
+ <location filename="../src/widgets/authdialog.cpp" line="564"/>
<source>Verify finger vein or enter password to unlock</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="542"/>
+ <location filename="../src/widgets/authdialog.cpp" line="569"/>
<source>Verify iris or enter password to unlock</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="547"/>
+ <location filename="../src/widgets/authdialog.cpp" line="574"/>
<source>Use the bound wechat scanning code or enter the password to unlock</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="703"/>
- <location filename="../src/widgets/authdialog.cpp" line="704"/>
+ <location filename="../src/widgets/authdialog.cpp" line="730"/>
+ <location filename="../src/widgets/authdialog.cpp" line="731"/>
<source>Password cannot be empty</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="857"/>
+ <location filename="../src/widgets/authdialog.cpp" line="884"/>
<source>Password </source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="860"/>
+ <location filename="../src/widgets/authdialog.cpp" line="887"/>
<source>Input Password</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="865"/>
+ <location filename="../src/widgets/authdialog.cpp" line="892"/>
<source>Username</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="928"/>
+ <location filename="../src/widgets/authdialog.cpp" line="960"/>
<source>User name input error!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1005"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1037"/>
<source>login</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1076"/>
+ <location filename="../src/widgets/authdialog.cpp" line="346"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1108"/>
<source>Login</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1382"/>
- <location filename="../src/widgets/authdialog.cpp" line="1534"/>
- <location filename="../src/widgets/authdialog.cpp" line="1675"/>
- <location filename="../src/widgets/authdialog.cpp" line="1852"/>
+ <location filename="../src/widgets/authdialog.cpp" line="348"/>
+ <source>Guest</source>
+ <translation type="unfinished">Misafir</translation>
+ </message>
+ <message>
+ <location filename="../src/widgets/authdialog.cpp" line="1420"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1572"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1713"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1890"/>
<source>Failed to verify %1, please enter password to unlock</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1384"/>
- <location filename="../src/widgets/authdialog.cpp" line="1536"/>
- <location filename="../src/widgets/authdialog.cpp" line="1679"/>
- <location filename="../src/widgets/authdialog.cpp" line="1681"/>
- <location filename="../src/widgets/authdialog.cpp" line="1854"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1422"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1574"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1717"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1719"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1892"/>
<source>Unable to verify %1, please enter password to unlock</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1694"/>
- <location filename="../src/widgets/authdialog.cpp" line="1698"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1732"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1736"/>
<source>Failed to verify %1, you still have %2 verification opportunities</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1709"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1747"/>
<source>Abnormal network</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1716"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1754"/>
<source>Face recognition waiting time out, please click refresh or enter the password to unlock.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1982"/>
+ <location filename="../src/widgets/authdialog.cpp" line="2020"/>
<source>FingerPrint</source>
<translation type="unfinished">Parmak İzi</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1984"/>
+ <location filename="../src/widgets/authdialog.cpp" line="2022"/>
<source>FingerVein</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1986"/>
+ <location filename="../src/widgets/authdialog.cpp" line="2024"/>
<source>Iris</source>
<translation type="unfinished">Göz</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1988"/>
+ <location filename="../src/widgets/authdialog.cpp" line="2026"/>
<source>Face</source>
<translation type="unfinished">Yüz</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1990"/>
+ <location filename="../src/widgets/authdialog.cpp" line="2028"/>
<source>VoicePrint</source>
<translation type="unfinished">Ses İzi</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1992"/>
+ <location filename="../src/widgets/authdialog.cpp" line="2030"/>
<source>Ukey</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1994"/>
+ <location filename="../src/widgets/authdialog.cpp" line="2032"/>
<source>QRCode</source>
<translation type="unfinished"></translation>
</message>
@@ -312,31 +318,35 @@
<name>BlockWidget</name>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="40"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="82"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="135"/>
<source>Cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="44"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="83"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="136"/>
<source>Confrim</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/blockwidget.cpp" line="89"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="91"/>
<source>The following program is running to prevent the system from reboot!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/blockwidget.cpp" line="92"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="94"/>
<source>The following program is running to prevent the system from shutting down!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/blockwidget.cpp" line="95"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="97"/>
<source>The following program is running to prevent the system from suspend!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/blockwidget.cpp" line="98"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="100"/>
<source>The following program is running to prevent the system from hibernate!</source>
<translation type="unfinished"></translation>
</message>
@@ -352,17 +362,18 @@
<context>
<name>CharsWidget</name>
<message>
- <location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="114"/>
+ <location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="115"/>
+ <location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="273"/>
<source>More</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="128"/>
+ <location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="129"/>
<source>ABC</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="141"/>
+ <location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="142"/>
<source>123</source>
<translation type="unfinished"></translation>
</message>
@@ -587,17 +598,17 @@
<context>
<name>LightDMHelper</name>
<message>
- <location filename="../src/lock-backend/lightdmhelper.cpp" line="99"/>
+ <location filename="../src/lock-backend/lightdmhelper.cpp" line="105"/>
<source>failed to start session.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/lock-backend/lightdmhelper.cpp" line="234"/>
+ <location filename="../src/lock-backend/lightdmhelper.cpp" line="204"/>
<source>Login</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/lock-backend/lightdmhelper.cpp" line="242"/>
+ <location filename="../src/lock-backend/lightdmhelper.cpp" line="213"/>
<source>Guest</source>
<translation type="unfinished">Misafir</translation>
</message>
@@ -621,7 +632,7 @@
<translation type="vanished">Kullanıcı Değiştir</translation>
</message>
<message>
- <location filename="../src/widgets/lockwidget.cpp" line="923"/>
+ <location filename="../src/widgets/lockwidget.cpp" line="944"/>
<source>Multiple users are logged in at the same time.Are you sure you want to %1 this system?</source>
<translation type="unfinished"></translation>
</message>
@@ -688,12 +699,12 @@
<context>
<name>MyNetworkWidget</name>
<message>
- <location filename="../src/widgets/mynetworkwidget.cpp" line="36"/>
+ <location filename="../src/widgets/mynetworkwidget.cpp" line="35"/>
<source>LAN</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/mynetworkwidget.cpp" line="38"/>
+ <location filename="../src/widgets/mynetworkwidget.cpp" line="37"/>
<source>WLAN</source>
<translation type="unfinished"></translation>
</message>
@@ -701,12 +712,13 @@
<context>
<name>NumbersWidget</name>
<message>
- <location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="160"/>
+ <location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="161"/>
<source>&amp;&amp;?!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="174"/>
+ <location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="175"/>
+ <location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="310"/>
<source>Return</source>
<translation type="unfinished"></translation>
</message>
@@ -887,6 +899,21 @@
<translation type="unfinished"></translation>
</message>
</context>
+<context>
+ <name>UserListWidget</name>
+ <message>
+ <location filename="../src/widgets/userlistwidget.cpp" line="46"/>
+ <location filename="../src/widgets/userlistwidget.cpp" line="99"/>
+ <source>Login</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <location filename="../src/widgets/userlistwidget.cpp" line="48"/>
+ <location filename="../src/widgets/userlistwidget.cpp" line="101"/>
+ <source>Guest</source>
+ <translation type="unfinished">Misafir</translation>
+ </message>
+</context>
<context>
<name>Widget</name>
<message>
@@ -1002,12 +1029,12 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/lock-backend/main.cpp" line="48"/>
+ <location filename="../src/lock-backend/main.cpp" line="49"/>
<source>Backend for the ukui ScreenSaver.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/lock-backend/main.cpp" line="54"/>
+ <location filename="../src/lock-backend/main.cpp" line="55"/>
<source>lock the screen by startup</source>
<translation type="unfinished"></translation>
</message>
diff --git a/i18n_ts/ug.ts b/i18n_ts/ug.ts
index 34c49ad..79732f2 100644
--- a/i18n_ts/ug.ts
+++ b/i18n_ts/ug.ts
@@ -24,7 +24,7 @@
<translation type="obsolete">使用密码认证</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1085"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1117"/>
<source>Retry</source>
<translation>قايتا قايتا تىرشىش</translation>
</message>
@@ -53,125 +53,130 @@
<translation type="vanished">账户锁定%1分钟由于%2次错误尝试</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1148"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1186"/>
<source>Please try again in %1 minutes.</source>
<translation>٪1 مىنۇت ئىچىدە قايتا سىناپ بېقىڭ.</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1155"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1193"/>
<source>Please try again in %1 seconds.</source>
<translation>٪1 سېكۇنت ئىچىدە قايتا سىناپ بېقىڭ.</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1162"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1200"/>
<source>Account locked permanently.</source>
<translation>ھېسابات مەڭگۈلۈك قۇلۇپلىنىدۇ.</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="522"/>
- <location filename="../src/widgets/authdialog.cpp" line="565"/>
+ <location filename="../src/widgets/authdialog.cpp" line="549"/>
+ <location filename="../src/widgets/authdialog.cpp" line="592"/>
<source>Verify face recognition or enter password to unlock</source>
<translation>چىراي تونۇشنى دەلىللەش ياكى مەخپىي نومۇر كىرگۈزۈش ئارقىلىق قۇلۇپ ئېچىش</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="527"/>
+ <location filename="../src/widgets/authdialog.cpp" line="348"/>
+ <source>Guest</source>
+ <translation type="unfinished">游客</translation>
+ </message>
+ <message>
+ <location filename="../src/widgets/authdialog.cpp" line="554"/>
<source>Press fingerprint or enter password to unlock</source>
<translation>بارماق ئىزىنى بېسىش ياكى مەخپىي نومۇر كىرگۈزۈش ئارقىلىق قۇلۇپ ئېچىش</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="532"/>
+ <location filename="../src/widgets/authdialog.cpp" line="559"/>
<source>Verify voiceprint or enter password to unlock</source>
<translation>ئاۋاز ئىزىنى دەلىللەش ياكى مەخپىي نومۇر كىرگۈزۈش ئارقىلىق قۇلۇپ ئېچىش</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="537"/>
+ <location filename="../src/widgets/authdialog.cpp" line="564"/>
<source>Verify finger vein or enter password to unlock</source>
<translation>بارماق تومۇرىنى ئېنىقلاش ياكى مەخپىي نومۇر كىرگۈزۈش ئارقىلىق قۇلۇپ ئېچىش</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="542"/>
+ <location filename="../src/widgets/authdialog.cpp" line="569"/>
<source>Verify iris or enter password to unlock</source>
<translation>Iris نى ئېنىقلاش ياكى مەخپىي نومۇر كىرگۈزۈش ئارقىلىق قۇلۇپ ئېچىش</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="860"/>
+ <location filename="../src/widgets/authdialog.cpp" line="887"/>
<source>Input Password</source>
<translation>ئىم كىرگۈزۈش</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="865"/>
+ <location filename="../src/widgets/authdialog.cpp" line="892"/>
<source>Username</source>
<translation type="unfinished">ئىشلەتكۈچى نامى</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="928"/>
+ <location filename="../src/widgets/authdialog.cpp" line="960"/>
<source>User name input error!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1005"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1037"/>
<source>login</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1382"/>
- <location filename="../src/widgets/authdialog.cpp" line="1534"/>
- <location filename="../src/widgets/authdialog.cpp" line="1675"/>
- <location filename="../src/widgets/authdialog.cpp" line="1852"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1420"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1572"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1713"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1890"/>
<source>Failed to verify %1, please enter password to unlock</source>
<translation>٪1 نى دەلىللەش مەغلۇپ بولدى، مەخپى نۇمۇر كىرگۈزۈڭ</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1384"/>
- <location filename="../src/widgets/authdialog.cpp" line="1536"/>
- <location filename="../src/widgets/authdialog.cpp" line="1679"/>
- <location filename="../src/widgets/authdialog.cpp" line="1681"/>
- <location filename="../src/widgets/authdialog.cpp" line="1854"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1422"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1574"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1717"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1719"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1892"/>
<source>Unable to verify %1, please enter password to unlock</source>
<translation>٪1 نى دەلىللەشكە ئامالسىز، مەخپىي نومۇرنى كىرگۈزۈپ قۇلۇپنى ئاچ</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1709"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1747"/>
<source>Abnormal network</source>
<translation>بىنورمال تور</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1716"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1754"/>
<source>Face recognition waiting time out, please click refresh or enter the password to unlock.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1982"/>
+ <location filename="../src/widgets/authdialog.cpp" line="2020"/>
<source>FingerPrint</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1984"/>
+ <location filename="../src/widgets/authdialog.cpp" line="2022"/>
<source>FingerVein</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1986"/>
+ <location filename="../src/widgets/authdialog.cpp" line="2024"/>
<source>Iris</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1988"/>
+ <location filename="../src/widgets/authdialog.cpp" line="2026"/>
<source>Face</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1990"/>
+ <location filename="../src/widgets/authdialog.cpp" line="2028"/>
<source>VoicePrint</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1992"/>
+ <location filename="../src/widgets/authdialog.cpp" line="2030"/>
<source>Ukey</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1994"/>
+ <location filename="../src/widgets/authdialog.cpp" line="2032"/>
<source>QRCode</source>
<translation type="unfinished">QRCode</translation>
</message>
@@ -180,8 +185,8 @@
<translation type="vanished">使用绑定的微信扫码或输入密码登录</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="703"/>
- <location filename="../src/widgets/authdialog.cpp" line="704"/>
+ <location filename="../src/widgets/authdialog.cpp" line="730"/>
+ <location filename="../src/widgets/authdialog.cpp" line="731"/>
<source>Password cannot be empty</source>
<translation>مەخپىي نومۇرنى بوش قويۇشقا بولمايدۇ</translation>
</message>
@@ -194,8 +199,8 @@
<translation type="vanished">无法验证%1请输入密码.</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1694"/>
- <location filename="../src/widgets/authdialog.cpp" line="1698"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1732"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1736"/>
<source>Failed to verify %1, you still have %2 verification opportunities</source>
<translation>٪1 نى دەلىللەش مەغلۇپ بولدى، سىزدە يەنىلا ٪2 دەلىللەش پۇرسىتى بار</translation>
</message>
@@ -224,23 +229,24 @@
<translation type="vanished">请输入密码或者录入指纹</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="931"/>
- <location filename="../src/widgets/authdialog.cpp" line="936"/>
+ <location filename="../src/widgets/authdialog.cpp" line="963"/>
+ <location filename="../src/widgets/authdialog.cpp" line="968"/>
<source>Authentication failure, Please try again</source>
<translation>دەلىللەش مەغلۇپ بولدى، قايتا سىناپ بېقىڭ</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="547"/>
+ <location filename="../src/widgets/authdialog.cpp" line="574"/>
<source>Use the bound wechat scanning code or enter the password to unlock</source>
<translation>باغلانغان ئۈندىدارنى سىكاننېرلاش كودى ياكى مەخپىي نومۇرىنى كىرگۈزۈپ قۇلۇپ ئېچىش</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="857"/>
+ <location filename="../src/widgets/authdialog.cpp" line="884"/>
<source>Password </source>
<translation>ئىم </translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1076"/>
+ <location filename="../src/widgets/authdialog.cpp" line="346"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1108"/>
<source>Login</source>
<translation>كىرىش</translation>
</message>
@@ -360,31 +366,35 @@
<name>BlockWidget</name>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="40"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="82"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="135"/>
<source>Cancel</source>
<translation type="unfinished">ئەمەلدىن قالدۇرۇش</translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="44"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="83"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="136"/>
<source>Confrim</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/blockwidget.cpp" line="89"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="91"/>
<source>The following program is running to prevent the system from reboot!</source>
<translation type="unfinished">سېستىمىنىڭ قايتا قوزغىلىشىنىڭ ئالدىنى ئېلىش ئۈچۈن تۆۋەندىكى پروگرامما ئىجرا بولىۋاتىدۇ!</translation>
</message>
<message>
- <location filename="../src/widgets/blockwidget.cpp" line="92"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="94"/>
<source>The following program is running to prevent the system from shutting down!</source>
<translation type="unfinished">تۆۋەندىكى پروگرامما سىستېمىنىڭ تاقىلىپ قېلىشىنىڭ ئالدىنى ئېلىش ئۈچۈن يۈگۈرۈۋاتىدۇ!</translation>
</message>
<message>
- <location filename="../src/widgets/blockwidget.cpp" line="95"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="97"/>
<source>The following program is running to prevent the system from suspend!</source>
<translation type="unfinished">سېستىمىنىڭ توختىشىنىڭ ئالدىنى ئېلىش ئۈچۈن تۆۋەندىكى پروگرامما ئىجرا قىلىنىۋاتىدۇ!</translation>
</message>
<message>
- <location filename="../src/widgets/blockwidget.cpp" line="98"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="100"/>
<source>The following program is running to prevent the system from hibernate!</source>
<translation type="unfinished">سېستىمىنىڭ تىزگىنلەپ قېلىشىنىڭ ئالدىنى ئېلىش ئۈچۈن تۆۋەندىكى پروگرامما ئىجرا بولىۋاتىدۇ!</translation>
</message>
@@ -400,17 +410,18 @@
<context>
<name>CharsWidget</name>
<message>
- <location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="114"/>
+ <location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="115"/>
+ <location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="273"/>
<source>More</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="128"/>
+ <location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="129"/>
<source>ABC</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="141"/>
+ <location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="142"/>
<source>123</source>
<translation type="unfinished"></translation>
</message>
@@ -1863,17 +1874,17 @@
<context>
<name>LightDMHelper</name>
<message>
- <location filename="../src/lock-backend/lightdmhelper.cpp" line="99"/>
+ <location filename="../src/lock-backend/lightdmhelper.cpp" line="105"/>
<source>failed to start session.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/lock-backend/lightdmhelper.cpp" line="234"/>
+ <location filename="../src/lock-backend/lightdmhelper.cpp" line="204"/>
<source>Login</source>
<translation type="unfinished">كىرىش</translation>
</message>
<message>
- <location filename="../src/lock-backend/lightdmhelper.cpp" line="242"/>
+ <location filename="../src/lock-backend/lightdmhelper.cpp" line="213"/>
<source>Guest</source>
<translation type="unfinished">游客</translation>
</message>
@@ -1901,7 +1912,7 @@
<translation type="vanished">بىرلا ۋاقىتتا كۆپ ئابونت تىزىملىتىپ كىرىدۇ. سىز بۇ سىستېمىنى قايتىدىن قوزغىماقچى ئىكەنلىكىڭىزنى جەزىملەشتۈرەلەمسىز؟</translation>
</message>
<message>
- <location filename="../src/widgets/lockwidget.cpp" line="923"/>
+ <location filename="../src/widgets/lockwidget.cpp" line="944"/>
<source>Multiple users are logged in at the same time.Are you sure you want to %1 this system?</source>
<translation type="unfinished"></translation>
</message>
@@ -1979,12 +1990,12 @@
<context>
<name>MyNetworkWidget</name>
<message>
- <location filename="../src/widgets/mynetworkwidget.cpp" line="36"/>
+ <location filename="../src/widgets/mynetworkwidget.cpp" line="35"/>
<source>LAN</source>
<translation type="unfinished">LAN</translation>
</message>
<message>
- <location filename="../src/widgets/mynetworkwidget.cpp" line="38"/>
+ <location filename="../src/widgets/mynetworkwidget.cpp" line="37"/>
<source>WLAN</source>
<translation type="unfinished">WLAN</translation>
</message>
@@ -1992,12 +2003,13 @@
<context>
<name>NumbersWidget</name>
<message>
- <location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="160"/>
+ <location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="161"/>
<source>&amp;&amp;?!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="174"/>
+ <location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="175"/>
+ <location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="310"/>
<source>Return</source>
<translation type="unfinished"></translation>
</message>
@@ -2306,72 +2318,6 @@
<message>
<location filename="../src/dbusifs/enginedevice.cpp" line="308"/>
<source></source>
- <comment>this is only shown for laptops with multiple batteries</comment>
- <translation></translation>
- </message>
- <message>
- <location filename="../src/dbusifs/enginedevice.cpp" line="313"/>
- <source></source>
- <comment>this is only shown for laptops with multiple batteries</comment>
- <translation></translation>
- </message>
- <message>
- <location filename="../src/dbusifs/enginedevice.cpp" line="337"/>
- <source></source>
- <comment>laptop primary battery</comment>
- <translation></translation>
- </message>
- <message>
- <location filename="../src/dbusifs/enginedevice.cpp" line="341"/>
- <source></source>
- <comment>battery-backed AC power source</comment>
- <translation></translation>
- </message>
- <message>
- <location filename="../src/dbusifs/enginedevice.cpp" line="345"/>
- <source></source>
- <comment>a monitor is a device to measure voltage and current</comment>
- <translation></translation>
- </message>
- <message>
- <location filename="../src/dbusifs/enginedevice.cpp" line="349"/>
- <source></source>
- <comment>wireless mice with internal batteries</comment>
- <translation></translation>
- </message>
- <message>
- <location filename="../src/dbusifs/enginedevice.cpp" line="353"/>
- <source></source>
- <comment>wireless keyboard with internal battery</comment>
- <translation></translation>
- </message>
- <message>
- <location filename="../src/dbusifs/enginedevice.cpp" line="357"/>
- <source></source>
- <comment>portable device</comment>
- <translation></translation>
- </message>
- <message>
- <location filename="../src/dbusifs/enginedevice.cpp" line="361"/>
- <source></source>
- <comment>cell phone (mobile...)</comment>
- <translation></translation>
- </message>
- <message>
- <location filename="../src/dbusifs/enginedevice.cpp" line="365"/>
- <source></source>
- <comment>media player, mp3 etc</comment>
- <translation></translation>
- </message>
- <message>
- <location filename="../src/dbusifs/enginedevice.cpp" line="369"/>
- <source></source>
- <comment>tablet device</comment>
- <translation></translation>
- </message>
- <message>
- <location filename="../src/dbusifs/enginedevice.cpp" line="373"/>
- <source></source>
<comment>tablet device</comment>
<translation></translation>
</message>
@@ -2521,6 +2467,21 @@
<translation type="vanished">ئاتلاندۇق</translation>
</message>
</context>
+<context>
+ <name>UserListWidget</name>
+ <message>
+ <location filename="../src/widgets/userlistwidget.cpp" line="46"/>
+ <location filename="../src/widgets/userlistwidget.cpp" line="99"/>
+ <source>Login</source>
+ <translation type="unfinished">كىرىش</translation>
+ </message>
+ <message>
+ <location filename="../src/widgets/userlistwidget.cpp" line="48"/>
+ <location filename="../src/widgets/userlistwidget.cpp" line="101"/>
+ <source>Guest</source>
+ <translation type="unfinished">游客</translation>
+ </message>
+</context>
<context>
<name>Utils</name>
<message>
@@ -2692,12 +2653,12 @@
<translation>كۆزنەك id</translation>
</message>
<message>
- <location filename="../src/lock-backend/main.cpp" line="48"/>
+ <location filename="../src/lock-backend/main.cpp" line="49"/>
<source>Backend for the ukui ScreenSaver.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/lock-backend/main.cpp" line="54"/>
+ <location filename="../src/lock-backend/main.cpp" line="55"/>
<source>lock the screen by startup</source>
<translation type="unfinished"></translation>
</message>
diff --git a/i18n_ts/zh_CN.ts b/i18n_ts/zh_CN.ts
index f4c87a6..888064f 100644
--- a/i18n_ts/zh_CN.ts
+++ b/i18n_ts/zh_CN.ts
@@ -24,7 +24,7 @@
<translation type="obsolete">使用密码认证</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1085"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1117"/>
<source>Retry</source>
<translation>重试</translation>
</message>
@@ -46,132 +46,137 @@
</message>
<message>
<source>Password: </source>
- <translation>密码:</translation>
+ <translation type="vanished">密码:</translation>
</message>
<message>
<source>Account locked %1 minutes due to %2 fail attempts</source>
<translation type="vanished">账户锁定%1分钟由于%2次错误尝试</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1148"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1186"/>
<source>Please try again in %1 minutes.</source>
<translation>请%1分钟后再试</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1155"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1193"/>
<source>Please try again in %1 seconds.</source>
<translation>请%1秒后再试</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1162"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1200"/>
<source>Account locked permanently.</source>
<translation>账号已被永久锁定</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="522"/>
- <location filename="../src/widgets/authdialog.cpp" line="565"/>
+ <location filename="../src/widgets/authdialog.cpp" line="549"/>
+ <location filename="../src/widgets/authdialog.cpp" line="592"/>
<source>Verify face recognition or enter password to unlock</source>
<translation>验证人脸识别或输入密码解锁</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="527"/>
+ <location filename="../src/widgets/authdialog.cpp" line="348"/>
+ <source>Guest</source>
+ <translation>游客</translation>
+ </message>
+ <message>
+ <location filename="../src/widgets/authdialog.cpp" line="554"/>
<source>Press fingerprint or enter password to unlock</source>
<translation>按压指纹或输入密码解锁</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="532"/>
+ <location filename="../src/widgets/authdialog.cpp" line="559"/>
<source>Verify voiceprint or enter password to unlock</source>
<translation>验证声纹或输入密码解锁</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="537"/>
+ <location filename="../src/widgets/authdialog.cpp" line="564"/>
<source>Verify finger vein or enter password to unlock</source>
<translation>验证指静脉或输入密码解锁</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="542"/>
+ <location filename="../src/widgets/authdialog.cpp" line="569"/>
<source>Verify iris or enter password to unlock</source>
<translation>验证虹膜或输入密码解锁</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="860"/>
+ <location filename="../src/widgets/authdialog.cpp" line="887"/>
<source>Input Password</source>
<translation>输入密码</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="865"/>
+ <location filename="../src/widgets/authdialog.cpp" line="892"/>
<source>Username</source>
<translation>用户名:</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="928"/>
+ <location filename="../src/widgets/authdialog.cpp" line="960"/>
<source>User name input error!</source>
<translation>用户名输入错误</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1005"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1037"/>
<source>login</source>
<translation>登录</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1382"/>
- <location filename="../src/widgets/authdialog.cpp" line="1534"/>
- <location filename="../src/widgets/authdialog.cpp" line="1675"/>
- <location filename="../src/widgets/authdialog.cpp" line="1852"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1420"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1572"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1713"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1890"/>
<source>Failed to verify %1, please enter password to unlock</source>
<translation>验证%1失败请输入密码解锁</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1384"/>
- <location filename="../src/widgets/authdialog.cpp" line="1536"/>
- <location filename="../src/widgets/authdialog.cpp" line="1679"/>
- <location filename="../src/widgets/authdialog.cpp" line="1681"/>
- <location filename="../src/widgets/authdialog.cpp" line="1854"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1422"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1574"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1717"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1719"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1892"/>
<source>Unable to verify %1, please enter password to unlock</source>
<translation>无法验证%1请输入密码解锁</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1709"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1747"/>
<source>Abnormal network</source>
<translation>网络异常</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1716"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1754"/>
<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="1982"/>
+ <location filename="../src/widgets/authdialog.cpp" line="2020"/>
<source>FingerPrint</source>
<translation>指纹</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1984"/>
+ <location filename="../src/widgets/authdialog.cpp" line="2022"/>
<source>FingerVein</source>
<translation>指静脉</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1986"/>
+ <location filename="../src/widgets/authdialog.cpp" line="2024"/>
<source>Iris</source>
<translation>虹膜</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1988"/>
+ <location filename="../src/widgets/authdialog.cpp" line="2026"/>
<source>Face</source>
<translation>人脸识别</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1990"/>
+ <location filename="../src/widgets/authdialog.cpp" line="2028"/>
<source>VoicePrint</source>
<translation>声纹</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1992"/>
+ <location filename="../src/widgets/authdialog.cpp" line="2030"/>
<source>Ukey</source>
<translation>安全密钥</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1994"/>
+ <location filename="../src/widgets/authdialog.cpp" line="2032"/>
<source>QRCode</source>
<translation>二维码</translation>
</message>
@@ -180,8 +185,8 @@
<translation type="vanished">使用绑定的微信扫码或输入密码登录</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="703"/>
- <location filename="../src/widgets/authdialog.cpp" line="704"/>
+ <location filename="../src/widgets/authdialog.cpp" line="730"/>
+ <location filename="../src/widgets/authdialog.cpp" line="731"/>
<source>Password cannot be empty</source>
<translation>密码不能为空</translation>
</message>
@@ -194,8 +199,8 @@
<translation type="vanished">无法验证%1请输入密码.</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1694"/>
- <location filename="../src/widgets/authdialog.cpp" line="1698"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1732"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1736"/>
<source>Failed to verify %1, you still have %2 verification opportunities</source>
<translation>验证%1失败您还有%2次尝试机会</translation>
</message>
@@ -224,13 +229,13 @@
<translation type="vanished">请输入密码或者录入指纹</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="931"/>
- <location filename="../src/widgets/authdialog.cpp" line="936"/>
+ <location filename="../src/widgets/authdialog.cpp" line="963"/>
+ <location filename="../src/widgets/authdialog.cpp" line="968"/>
<source>Authentication failure, Please try again</source>
<translation>认证失败,请重试</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="547"/>
+ <location filename="../src/widgets/authdialog.cpp" line="574"/>
<source>Use the bound wechat scanning code or enter the password to unlock</source>
<translation>使用绑定的微信扫码或输入密码解锁</translation>
</message>
@@ -243,12 +248,13 @@
<translation type="vanished">请将安全密钥插入USB端口</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="857"/>
+ <location filename="../src/widgets/authdialog.cpp" line="884"/>
<source>Password </source>
<translation>密码 </translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1076"/>
+ <location filename="../src/widgets/authdialog.cpp" line="346"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1108"/>
<source>Login</source>
<translation>登录</translation>
</message>
@@ -368,31 +374,35 @@
<name>BlockWidget</name>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="40"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="82"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="135"/>
<source>Cancel</source>
<translation>取消</translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="44"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="83"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="136"/>
<source>Confrim</source>
<translation>确认</translation>
</message>
<message>
- <location filename="../src/widgets/blockwidget.cpp" line="89"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="91"/>
<source>The following program is running to prevent the system from reboot!</source>
<translation>以下程序正在运行,阻止系统重启!</translation>
</message>
<message>
- <location filename="../src/widgets/blockwidget.cpp" line="92"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="94"/>
<source>The following program is running to prevent the system from shutting down!</source>
<translation>以下程序正在运行,阻止系统关机!</translation>
</message>
<message>
- <location filename="../src/widgets/blockwidget.cpp" line="95"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="97"/>
<source>The following program is running to prevent the system from suspend!</source>
<translation>以下程序正在运行,阻止系统进入睡眠!</translation>
</message>
<message>
- <location filename="../src/widgets/blockwidget.cpp" line="98"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="100"/>
<source>The following program is running to prevent the system from hibernate!</source>
<translation>以下程序正在运行,阻止系统进入休眠!</translation>
</message>
@@ -408,17 +418,18 @@
<context>
<name>CharsWidget</name>
<message>
- <location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="114"/>
+ <location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="115"/>
+ <location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="273"/>
<source>More</source>
<translation>更多</translation>
</message>
<message>
- <location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="128"/>
+ <location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="129"/>
<source>ABC</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="141"/>
+ <location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="142"/>
<source>123</source>
<translation type="unfinished"></translation>
</message>
@@ -1867,19 +1878,19 @@
<context>
<name>LightDMHelper</name>
<message>
- <location filename="../src/lock-backend/lightdmhelper.cpp" line="99"/>
+ <location filename="../src/lock-backend/lightdmhelper.cpp" line="105"/>
<source>failed to start session.</source>
- <translation type="unfinished"></translation>
+ <translation>启动会话失败。</translation>
</message>
<message>
- <location filename="../src/lock-backend/lightdmhelper.cpp" line="234"/>
+ <location filename="../src/lock-backend/lightdmhelper.cpp" line="204"/>
<source>Login</source>
- <translation type="unfinished">登录</translation>
+ <translation>登录</translation>
</message>
<message>
- <location filename="../src/lock-backend/lightdmhelper.cpp" line="242"/>
+ <location filename="../src/lock-backend/lightdmhelper.cpp" line="213"/>
<source>Guest</source>
- <translation type="unfinished">游客</translation>
+ <translation>游客</translation>
</message>
</context>
<context>
@@ -1910,7 +1921,7 @@
</message>
<message>
<source>Multiple users are logged in at the same time.Are you sure you want to reboot this system?</source>
- <translation>同时有多个用户登录系统,您确定要退出系统吗?</translation>
+ <translation type="vanished">同时有多个用户登录系统,您确定要退出系统吗?</translation>
</message>
<message>
<source>LAN</source>
@@ -1921,9 +1932,9 @@
<translation type="vanished">无线局域网</translation>
</message>
<message>
- <location filename="../src/widgets/lockwidget.cpp" line="931"/>
+ <location filename="../src/widgets/lockwidget.cpp" line="944"/>
<source>Multiple users are logged in at the same time.Are you sure you want to %1 this system?</source>
- <translation type="unfinished"></translation>
+ <translation>同时有多个用户处于登录状态,你确定要%1吗?</translation>
</message>
</context>
<context>
@@ -1947,37 +1958,37 @@
<message>
<location filename="../src/widgets/loginoptionswidget.cpp" line="1023"/>
<source>FingerPrint</source>
- <translation type="unfinished">指纹</translation>
+ <translation>指纹</translation>
</message>
<message>
<location filename="../src/widgets/loginoptionswidget.cpp" line="1025"/>
<source>FingerVein</source>
- <translation type="unfinished">指静脉</translation>
+ <translation>指静脉</translation>
</message>
<message>
<location filename="../src/widgets/loginoptionswidget.cpp" line="1027"/>
<source>Iris</source>
- <translation type="unfinished">虹膜</translation>
+ <translation>虹膜</translation>
</message>
<message>
<location filename="../src/widgets/loginoptionswidget.cpp" line="1029"/>
<source>Face</source>
- <translation type="unfinished"></translation>
+ <translation>人脸识别</translation>
</message>
<message>
<location filename="../src/widgets/loginoptionswidget.cpp" line="1031"/>
<source>VoicePrint</source>
- <translation type="unfinished">声纹</translation>
+ <translation>声纹</translation>
</message>
<message>
<location filename="../src/widgets/loginoptionswidget.cpp" line="1033"/>
<source>Ukey</source>
- <translation type="unfinished">安全密钥</translation>
+ <translation>安全密钥</translation>
</message>
<message>
<location filename="../src/widgets/loginoptionswidget.cpp" line="1035"/>
<source>QRCode</source>
- <translation type="unfinished">二维码</translation>
+ <translation>二维码</translation>
</message>
<message>
<source>Wechat</source>
@@ -1999,25 +2010,26 @@
<context>
<name>MyNetworkWidget</name>
<message>
- <location filename="../src/widgets/mynetworkwidget.cpp" line="36"/>
+ <location filename="../src/widgets/mynetworkwidget.cpp" line="35"/>
<source>LAN</source>
- <translation type="unfinished">有线网络</translation>
+ <translation>有线网络</translation>
</message>
<message>
- <location filename="../src/widgets/mynetworkwidget.cpp" line="38"/>
+ <location filename="../src/widgets/mynetworkwidget.cpp" line="37"/>
<source>WLAN</source>
- <translation type="unfinished">无线局域网</translation>
+ <translation>无线局域网</translation>
</message>
</context>
<context>
<name>NumbersWidget</name>
<message>
- <location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="160"/>
+ <location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="161"/>
<source>&amp;&amp;?!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="174"/>
+ <location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="175"/>
+ <location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="310"/>
<source>Return</source>
<translation>返回</translation>
</message>
@@ -2176,7 +2188,7 @@
<message>
<location filename="../src/widgets/powerlistwidget.h" line="64"/>
<source>Hibernate</source>
- <translation type="unfinished">休眠</translation>
+ <translation>休眠</translation>
</message>
<message>
<location filename="../src/widgets/powerlistwidget.h" line="65"/>
@@ -2186,7 +2198,7 @@
<message>
<location filename="../src/widgets/powerlistwidget.h" line="78"/>
<source>Suspend</source>
- <translation type="unfinished">睡眠</translation>
+ <translation>睡眠</translation>
</message>
<message>
<location filename="../src/widgets/powerlistwidget.h" line="79"/>
@@ -2197,12 +2209,12 @@
<message>
<location filename="../src/widgets/powerlistwidget.h" line="92"/>
<source>Restart</source>
- <translation type="unfinished">重启</translation>
+ <translation>重启</translation>
</message>
<message>
<location filename="../src/widgets/powerlistwidget.h" line="106"/>
<source>Power Off</source>
- <translation type="unfinished">关机</translation>
+ <translation>关机</translation>
</message>
<message>
<location filename="../src/widgets/powerlistwidget.h" line="107"/>
@@ -2315,7 +2327,7 @@
<message>
<location filename="../src/common/biodefines.cpp" line="35"/>
<source>Face</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">人脸识别</translation>
</message>
<message>
<location filename="../src/common/biodefines.cpp" line="37"/>
@@ -2483,6 +2495,21 @@
<translation type="vanished">跳过</translation>
</message>
</context>
+<context>
+ <name>UserListWidget</name>
+ <message>
+ <location filename="../src/widgets/userlistwidget.cpp" line="46"/>
+ <location filename="../src/widgets/userlistwidget.cpp" line="99"/>
+ <source>Login</source>
+ <translation type="unfinished">登录</translation>
+ </message>
+ <message>
+ <location filename="../src/widgets/userlistwidget.cpp" line="48"/>
+ <location filename="../src/widgets/userlistwidget.cpp" line="101"/>
+ <source>Guest</source>
+ <translation type="unfinished">游客</translation>
+ </message>
+</context>
<context>
<name>Utils</name>
<message>
@@ -2557,7 +2584,7 @@
<message>
<location filename="../src/lock-dialog/lockdialogmodel.cpp" line="59"/>
<source>how long to show lock</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">多久显示锁屏</translation>
</message>
</context>
<context>
@@ -2565,7 +2592,7 @@
<message>
<location filename="../src/lock-dialog/lockdialogmodel.cpp" line="62"/>
<source>if show lock</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">是否锁屏</translation>
</message>
</context>
<context>
@@ -2654,12 +2681,12 @@
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/lock-backend/main.cpp" line="48"/>
+ <location filename="../src/lock-backend/main.cpp" line="49"/>
<source>Backend for the ukui ScreenSaver.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/lock-backend/main.cpp" line="54"/>
+ <location filename="../src/lock-backend/main.cpp" line="55"/>
<source>lock the screen by startup</source>
<translation type="unfinished"></translation>
</message>
diff --git a/i18n_ts/zh_HK.ts b/i18n_ts/zh_HK.ts
index 494e927..1303bac 100644
--- a/i18n_ts/zh_HK.ts
+++ b/i18n_ts/zh_HK.ts
@@ -24,7 +24,7 @@
<translation type="obsolete">使用密码认证</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1085"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1117"/>
<source>Retry</source>
<translation>重試</translation>
</message>
@@ -53,125 +53,130 @@
<translation type="vanished">账户锁定%1分钟由于%2次错误尝试</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1148"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1186"/>
<source>Please try again in %1 minutes.</source>
<translation>請在 %1 分鐘後重試。</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1155"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1193"/>
<source>Please try again in %1 seconds.</source>
<translation>請在 %1 秒後重試。</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1162"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1200"/>
<source>Account locked permanently.</source>
<translation>帳戶永久鎖定。</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="522"/>
- <location filename="../src/widgets/authdialog.cpp" line="565"/>
+ <location filename="../src/widgets/authdialog.cpp" line="549"/>
+ <location filename="../src/widgets/authdialog.cpp" line="592"/>
<source>Verify face recognition or enter password to unlock</source>
<translation>驗證人臉識別或輸入密碼解鎖</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="527"/>
+ <location filename="../src/widgets/authdialog.cpp" line="348"/>
+ <source>Guest</source>
+ <translation type="unfinished">游客</translation>
+ </message>
+ <message>
+ <location filename="../src/widgets/authdialog.cpp" line="554"/>
<source>Press fingerprint or enter password to unlock</source>
<translation>按指紋或輸入密碼解鎖</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="532"/>
+ <location filename="../src/widgets/authdialog.cpp" line="559"/>
<source>Verify voiceprint or enter password to unlock</source>
<translation>驗證聲紋或輸入密碼以解鎖</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="537"/>
+ <location filename="../src/widgets/authdialog.cpp" line="564"/>
<source>Verify finger vein or enter password to unlock</source>
<translation>驗證指靜脈或輸入密碼解鎖</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="542"/>
+ <location filename="../src/widgets/authdialog.cpp" line="569"/>
<source>Verify iris or enter password to unlock</source>
<translation>驗證虹膜或輸入密碼解鎖</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="860"/>
+ <location filename="../src/widgets/authdialog.cpp" line="887"/>
<source>Input Password</source>
<translation>輸入密碼</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="865"/>
+ <location filename="../src/widgets/authdialog.cpp" line="892"/>
<source>Username</source>
<translation type="unfinished">使用者名</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="928"/>
+ <location filename="../src/widgets/authdialog.cpp" line="960"/>
<source>User name input error!</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1005"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1037"/>
<source>login</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1382"/>
- <location filename="../src/widgets/authdialog.cpp" line="1534"/>
- <location filename="../src/widgets/authdialog.cpp" line="1675"/>
- <location filename="../src/widgets/authdialog.cpp" line="1852"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1420"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1572"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1713"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1890"/>
<source>Failed to verify %1, please enter password to unlock</source>
<translation>驗證 %1 失敗,請輸入密碼進行解鎖</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1384"/>
- <location filename="../src/widgets/authdialog.cpp" line="1536"/>
- <location filename="../src/widgets/authdialog.cpp" line="1679"/>
- <location filename="../src/widgets/authdialog.cpp" line="1681"/>
- <location filename="../src/widgets/authdialog.cpp" line="1854"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1422"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1574"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1717"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1719"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1892"/>
<source>Unable to verify %1, please enter password to unlock</source>
<translation>無法驗證 %1請輸入密碼進行解鎖</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1709"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1747"/>
<source>Abnormal network</source>
<translation>網路異常</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1716"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1754"/>
<source>Face recognition waiting time out, please click refresh or enter the password to unlock.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1982"/>
+ <location filename="../src/widgets/authdialog.cpp" line="2020"/>
<source>FingerPrint</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1984"/>
+ <location filename="../src/widgets/authdialog.cpp" line="2022"/>
<source>FingerVein</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1986"/>
+ <location filename="../src/widgets/authdialog.cpp" line="2024"/>
<source>Iris</source>
<translation type="unfinished">虹膜</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1988"/>
+ <location filename="../src/widgets/authdialog.cpp" line="2026"/>
<source>Face</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1990"/>
+ <location filename="../src/widgets/authdialog.cpp" line="2028"/>
<source>VoicePrint</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1992"/>
+ <location filename="../src/widgets/authdialog.cpp" line="2030"/>
<source>Ukey</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1994"/>
+ <location filename="../src/widgets/authdialog.cpp" line="2032"/>
<source>QRCode</source>
<translation type="unfinished">微信掃碼</translation>
</message>
@@ -180,8 +185,8 @@
<translation type="vanished">使用绑定的微信扫码或输入密码登录</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="703"/>
- <location filename="../src/widgets/authdialog.cpp" line="704"/>
+ <location filename="../src/widgets/authdialog.cpp" line="730"/>
+ <location filename="../src/widgets/authdialog.cpp" line="731"/>
<source>Password cannot be empty</source>
<translation>密碼不能為空</translation>
</message>
@@ -194,8 +199,8 @@
<translation type="vanished">无法验证%1请输入密码.</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1694"/>
- <location filename="../src/widgets/authdialog.cpp" line="1698"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1732"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1736"/>
<source>Failed to verify %1, you still have %2 verification opportunities</source>
<translation>驗證 %1 失敗,您仍有 %2 次驗證機會</translation>
</message>
@@ -224,13 +229,13 @@
<translation type="vanished">请输入密码或者录入指纹</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="931"/>
- <location filename="../src/widgets/authdialog.cpp" line="936"/>
+ <location filename="../src/widgets/authdialog.cpp" line="963"/>
+ <location filename="../src/widgets/authdialog.cpp" line="968"/>
<source>Authentication failure, Please try again</source>
<translation>身份驗證失敗,請重試</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="547"/>
+ <location filename="../src/widgets/authdialog.cpp" line="574"/>
<source>Use the bound wechat scanning code or enter the password to unlock</source>
<translation>使用綁定的微信掃碼或輸入密碼解鎖</translation>
</message>
@@ -243,12 +248,13 @@
<translation type="vanished">將 Ukey 插入 USB 埠</translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="857"/>
+ <location filename="../src/widgets/authdialog.cpp" line="884"/>
<source>Password </source>
<translation>密碼 </translation>
</message>
<message>
- <location filename="../src/widgets/authdialog.cpp" line="1076"/>
+ <location filename="../src/widgets/authdialog.cpp" line="346"/>
+ <location filename="../src/widgets/authdialog.cpp" line="1108"/>
<source>Login</source>
<translation>登錄</translation>
</message>
@@ -368,31 +374,35 @@
<name>BlockWidget</name>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="40"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="82"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="135"/>
<source>Cancel</source>
<translation type="unfinished">取消</translation>
</message>
<message>
<location filename="../src/widgets/blockwidget.cpp" line="44"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="83"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="136"/>
<source>Confrim</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/widgets/blockwidget.cpp" line="89"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="91"/>
<source>The following program is running to prevent the system from reboot!</source>
<translation type="unfinished">以下程式正在運行以防止系統重新啟動!</translation>
</message>
<message>
- <location filename="../src/widgets/blockwidget.cpp" line="92"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="94"/>
<source>The following program is running to prevent the system from shutting down!</source>
<translation type="unfinished">以下程式正在運行以防止系統關閉!</translation>
</message>
<message>
- <location filename="../src/widgets/blockwidget.cpp" line="95"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="97"/>
<source>The following program is running to prevent the system from suspend!</source>
<translation type="unfinished">以下程式正在運行以防止系統掛起!</translation>
</message>
<message>
- <location filename="../src/widgets/blockwidget.cpp" line="98"/>
+ <location filename="../src/widgets/blockwidget.cpp" line="100"/>
<source>The following program is running to prevent the system from hibernate!</source>
<translation type="unfinished">以下程式正在運行以防止系統休眠!</translation>
</message>
@@ -408,17 +418,18 @@
<context>
<name>CharsWidget</name>
<message>
- <location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="114"/>
+ <location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="115"/>
+ <location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="273"/>
<source>More</source>
<translation>更多</translation>
</message>
<message>
- <location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="128"/>
+ <location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="129"/>
<source>ABC</source>
<translation>美國廣播公司</translation>
</message>
<message>
- <location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="141"/>
+ <location filename="../src/VirtualKeyboard/src/charswidget.cpp" line="142"/>
<source>123</source>
<translation>123</translation>
</message>
@@ -1883,17 +1894,17 @@
<context>
<name>LightDMHelper</name>
<message>
- <location filename="../src/lock-backend/lightdmhelper.cpp" line="99"/>
+ <location filename="../src/lock-backend/lightdmhelper.cpp" line="105"/>
<source>failed to start session.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/lock-backend/lightdmhelper.cpp" line="234"/>
+ <location filename="../src/lock-backend/lightdmhelper.cpp" line="204"/>
<source>Login</source>
<translation type="unfinished">登錄</translation>
</message>
<message>
- <location filename="../src/lock-backend/lightdmhelper.cpp" line="242"/>
+ <location filename="../src/lock-backend/lightdmhelper.cpp" line="213"/>
<source>Guest</source>
<translation type="unfinished">游客</translation>
</message>
@@ -1937,7 +1948,7 @@
<translation type="vanished">無線局域網</translation>
</message>
<message>
- <location filename="../src/widgets/lockwidget.cpp" line="923"/>
+ <location filename="../src/widgets/lockwidget.cpp" line="944"/>
<source>Multiple users are logged in at the same time.Are you sure you want to %1 this system?</source>
<translation type="unfinished"></translation>
</message>
@@ -2015,12 +2026,12 @@
<context>
<name>MyNetworkWidget</name>
<message>
- <location filename="../src/widgets/mynetworkwidget.cpp" line="36"/>
+ <location filename="../src/widgets/mynetworkwidget.cpp" line="35"/>
<source>LAN</source>
<translation type="unfinished">局域網</translation>
</message>
<message>
- <location filename="../src/widgets/mynetworkwidget.cpp" line="38"/>
+ <location filename="../src/widgets/mynetworkwidget.cpp" line="37"/>
<source>WLAN</source>
<translation type="unfinished">無線局域網</translation>
</message>
@@ -2028,12 +2039,13 @@
<context>
<name>NumbersWidget</name>
<message>
- <location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="160"/>
+ <location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="161"/>
<source>&amp;&amp;?!</source>
<translation>&amp;&amp;?!</translation>
</message>
<message>
- <location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="174"/>
+ <location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="175"/>
+ <location filename="../src/VirtualKeyboard/src/numberswidget.cpp" line="310"/>
<source>Return</source>
<translation>返回</translation>
</message>
@@ -2507,6 +2519,21 @@
<translation type="vanished">跳</translation>
</message>
</context>
+<context>
+ <name>UserListWidget</name>
+ <message>
+ <location filename="../src/widgets/userlistwidget.cpp" line="46"/>
+ <location filename="../src/widgets/userlistwidget.cpp" line="99"/>
+ <source>Login</source>
+ <translation type="unfinished">登錄</translation>
+ </message>
+ <message>
+ <location filename="../src/widgets/userlistwidget.cpp" line="48"/>
+ <location filename="../src/widgets/userlistwidget.cpp" line="101"/>
+ <source>Guest</source>
+ <translation type="unfinished">游客</translation>
+ </message>
+</context>
<context>
<name>Utils</name>
<message>
@@ -2678,12 +2705,12 @@
<translation>窗口標識</translation>
</message>
<message>
- <location filename="../src/lock-backend/main.cpp" line="48"/>
+ <location filename="../src/lock-backend/main.cpp" line="49"/>
<source>Backend for the ukui ScreenSaver.</source>
<translation type="unfinished"></translation>
</message>
<message>
- <location filename="../src/lock-backend/main.cpp" line="54"/>
+ <location filename="../src/lock-backend/main.cpp" line="55"/>
<source>lock the screen by startup</source>
<translation type="unfinished"></translation>
</message>
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 2c6f650..268446d 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -153,7 +153,7 @@ set(backend_SRC
dbusifs/upowerhelper.cpp
dbusifs/enginedevice.cpp
dbusifs/device.cpp
- dbusifs/accountservicehelper.cpp
+ dbusifs/accountshelper.cpp
dbusifs/sessionhelper.cpp
dbusifs/uniauthservice.cpp
dbusifs/biometrichelper.cpp
diff --git a/src/VirtualKeyboard/src/charswidget.cpp b/src/VirtualKeyboard/src/charswidget.cpp
index c66597f..2e3fe6d 100644
--- a/src/VirtualKeyboard/src/charswidget.cpp
+++ b/src/VirtualKeyboard/src/charswidget.cpp
@@ -18,6 +18,7 @@
#include "charswidget.h"
#include "commondef.h"
+#include <QEvent>
#include <QDebug>
CharsWidget::CharsWidget(QWidget *parent/* = nullptr*/)
@@ -253,3 +254,25 @@ void CharsWidget::onBtnClicked(QChar charId)
Q_EMIT specialBtnClicked(keyName);
}
}
+
+
+void CharsWidget::changeEvent(QEvent *event)
+{
+ if(event->type() == QEvent::LanguageChange){
+ refreshTranslate();
+ }
+}
+
+void CharsWidget::refreshTranslate()
+{
+ QMap<KBButton*, QRect>::iterator itGeometry = m_mapBtnGeometrys.begin();
+ for (; itGeometry != m_mapBtnGeometrys.end(); itGeometry ++) {
+ KBButton *button = itGeometry.key();
+ if (button) {
+ if (button->objectName() == "btn_more") {
+ button->setText(tr("More"));
+ }
+ }
+ }
+}
+
diff --git a/src/VirtualKeyboard/src/charswidget.h b/src/VirtualKeyboard/src/charswidget.h
index 1076201..b7fd805 100644
--- a/src/VirtualKeyboard/src/charswidget.h
+++ b/src/VirtualKeyboard/src/charswidget.h
@@ -39,8 +39,12 @@ Q_SIGNALS:
void specialBtnClicked(QString keyName);
void normalBtnClicked(QChar c);
+protected:
+ void changeEvent(QEvent *event);
+
private:
void initUI();
+ void refreshTranslate();
private:
QMap<KBButton*, QRect> m_mapBtnGeometrys;
diff --git a/src/VirtualKeyboard/src/numberswidget.cpp b/src/VirtualKeyboard/src/numberswidget.cpp
index a09de13..5d776d5 100644
--- a/src/VirtualKeyboard/src/numberswidget.cpp
+++ b/src/VirtualKeyboard/src/numberswidget.cpp
@@ -24,6 +24,7 @@
#include <QScrollBar>
#include <QVBoxLayout>
#include <QVariant>
+#include <QEvent>
#include <QDebug>
NumbersWidget::NumbersWidget(QWidget *parent)
@@ -291,3 +292,23 @@ void NumbersWidget::onBtnClicked(QChar charId)
Q_EMIT specialBtnClicked(keyName);
}
}
+
+void NumbersWidget::changeEvent(QEvent *event)
+{
+ if(event->type() == QEvent::LanguageChange){
+ refreshTranslate();
+ }
+}
+
+void NumbersWidget::refreshTranslate()
+{
+ QMap<QWidget*, QRect>::iterator itGeometry = m_mapBtnGeometrys.begin();
+ for (; itGeometry != m_mapBtnGeometrys.end(); itGeometry ++) {
+ KBButton *button = qobject_cast<KBButton *>(itGeometry.key());
+ if (button) {
+ if (button->objectName() == "btn_return") {
+ button->setText(tr("Return"));
+ }
+ }
+ }
+}
diff --git a/src/VirtualKeyboard/src/numberswidget.h b/src/VirtualKeyboard/src/numberswidget.h
index bea0f28..0e359ab 100644
--- a/src/VirtualKeyboard/src/numberswidget.h
+++ b/src/VirtualKeyboard/src/numberswidget.h
@@ -42,8 +42,12 @@ Q_SIGNALS:
void specialBtnClicked(QString keyName);
void narmalBtnClicked(QChar charId);
+protected:
+ void changeEvent(QEvent *event);
+
private:
void initUI();
+ void refreshTranslate();
private:
QMap<QWidget*, QRect> m_mapBtnGeometrys;
diff --git a/src/VirtualKeyboard/src/virtualkeyboardwidget.cpp b/src/VirtualKeyboard/src/virtualkeyboardwidget.cpp
index f96c688..66f108a 100644
--- a/src/VirtualKeyboard/src/virtualkeyboardwidget.cpp
+++ b/src/VirtualKeyboard/src/virtualkeyboardwidget.cpp
@@ -41,7 +41,7 @@ VirtualKeyboardWidget::VirtualKeyboardWidget(QWidget *parent)
, m_isVertical(false)
{
Q_INIT_RESOURCE(keyboard);
- setAttribute(Qt::WA_TranslucentBackground);//背景透明
+ //setAttribute(Qt::WA_TranslucentBackground);//背景透明
//setAutoFillBackground(true);
setWindowFlags(Qt::FramelessWindowHint |
Qt::WindowStaysOnTopHint |
diff --git a/src/common/configuration.h b/src/common/configuration.h
index 4c9f991..4d109b9 100644
--- a/src/common/configuration.h
+++ b/src/common/configuration.h
@@ -21,7 +21,6 @@
#include <QObject>
#include <QSettings>
-#include <QTranslator>
#include <QPixmap>
#include <QGSettings>
diff --git a/src/common/definetypes.h b/src/common/definetypes.h
index a04bf8e..cc08b1f 100644
--- a/src/common/definetypes.h
+++ b/src/common/definetypes.h
@@ -203,6 +203,7 @@ enum SessionStatus
#define DM_DBUS_PATH "/org/freedesktop/DisplayManager"
#define DM_DBUS_INTERFACE "org.freedesktop.DisplayManager"
#define DM_SEAT_INTERFACE "org.freedesktop.DisplayManager.Seat"
+#define DM_SESSION_INTERFACE "org.freedesktop.DisplayManager.Session"
#define SSWND_DBUS_SERVICE "org.ukui.ScreenSaverWnd"
#define SSWND_DBUS_PATH "/"
@@ -310,5 +311,13 @@ typedef enum {
#define FD_DBUS_SERVICE "org.freedesktop.DBus"
#define FD_DBUS_PATH "/org/freedesktop/DBus"
#define FD_DBUS_INTERFACE "org.freedesktop.DBus"
+#define FD_PROPERTIES_INTERFACE "org.freedesktop.DBus.Properties"
+
+#define ACCOUNTS_DBUS_SERVICE "org.freedesktop.Accounts"
+#define ACCOUNTS_DBUS_PATH "/org/freedesktop/Accounts"
+#define ACCOUNTS_DBUS_INTERFACE "org.freedesktop.Accounts"
+
+#define ACCOUNTS_USER_DBUS_INTERFACE "org.freedesktop.Accounts.User"
+#define ACCOUNTS_USER_LDM_SERVICE_INTERFACE "org.freedesktop.DisplayManager.AccountsService"
#endif // DEFINETYPES_H
diff --git a/src/dbusifs/accountservicehelper.cpp b/src/dbusifs/accountservicehelper.cpp
deleted file mode 100644
index a7c426d..0000000
--- a/src/dbusifs/accountservicehelper.cpp
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * Copyright (C) 2023 Tianjin KYLIN Information Technology Co., Ltd.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 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 "accountservicehelper.h"
-#include <QDBusConnection>
-#include <QDBusInterface>
-#include <QDBusConnectionInterface>
-#include <QDebug>
-
-const static QString accountsService = QStringLiteral("org.freedesktop.Accounts");
-const static QString accountsPath = QStringLiteral("/org/freedesktop/Accounts");
-const static QString accountsInterface = QStringLiteral("org.freedesktop.Accounts");
-const static QString propertiesInterface = QStringLiteral("org.freedesktop.DBus.Properties");
-const static QString accountsUserInterface = QStringLiteral("org.freedesktop.Accounts.User");
-
-AccountServiceHelper::AccountServiceHelper(QObject *parent)
- : QObject(parent)
-{
- m_accountsInterface = new QDBusInterface(accountsService,
- accountsPath,
- accountsInterface,
- QDBusConnection::systemBus(),
- this);
-}
-
-AccountServiceHelper::~AccountServiceHelper()
-{
-
-}
-
-QString AccountServiceHelper::getUserLanguageByName(QString strUserName)
-{
- QString strLanguage = "";
- if(!m_accountsInterface)
- return strLanguage;
- QDBusReply<QDBusObjectPath> userPath = m_accountsInterface->call("FindUserByName", strUserName);
- if(!userPath.isValid())
- qWarning() << "Get UserPath error:" << userPath.error();
- else {
- QDBusInterface userIface(accountsService, userPath.value().path(),
- propertiesInterface, QDBusConnection::systemBus());
- QDBusReply<QDBusVariant> languageReply = userIface.call("Get", accountsUserInterface, "Language");
- if(!languageReply.isValid())
- qWarning() << "Get User's language error" << languageReply.error();
- else {
- strLanguage = languageReply.value().variant().toString();
- }
- }
- return strLanguage;
-}
-
-QString AccountServiceHelper::getUserBackgroundByName(QString strUserName)
-{
- QString strBackground = "";
- if(!m_accountsInterface)
- return strBackground;
- QDBusReply<QDBusObjectPath> userPath = m_accountsInterface->call("FindUserByName", strUserName);
- if(!userPath.isValid())
- qWarning() << "Get UserPath error:" << userPath.error();
- else {
- QDBusInterface userIface(accountsService, userPath.value().path(),
- propertiesInterface, QDBusConnection::systemBus());
- QDBusReply<QDBusVariant> backgroundReply = userIface.call("Get", accountsUserInterface, "BackgroundFile");
- if(!backgroundReply.isValid())
- qWarning() << "Get User's background error" << backgroundReply.error();
- else {
- strBackground = backgroundReply.value().variant().toString();
- }
- }
- return strBackground;
-}
-
-QString AccountServiceHelper::getUserSessionByName(QString strUserName)
-{
- QString strSession = "";
- if(!m_accountsInterface)
- return strSession;
- QDBusReply<QDBusObjectPath> userPath = m_accountsInterface->call("FindUserByName", strUserName);
- if(!userPath.isValid())
- qWarning() << "Get UserPath error:" << userPath.error();
- else {
- QDBusInterface userIface(accountsService, userPath.value().path(),
- propertiesInterface, QDBusConnection::systemBus());
- QDBusReply<QDBusVariant> sessionReply = userIface.call("Get", accountsUserInterface, "XSession");
- if(!sessionReply.isValid())
- qWarning() << "Get User's xsession error" << sessionReply.error();
- else {
- strSession = sessionReply.value().variant().toString();
- }
- }
- return strSession;
-}
-
-QString AccountServiceHelper::getAccountBackground(uid_t uid)
-{
- QString strBackground = "";
- if(!m_accountsInterface)
- return strBackground;
- QDBusReply<QDBusObjectPath> userPath = m_accountsInterface->call("FindUserById", (qint64)uid);
- if(!userPath.isValid())
- qWarning() << "Get UserPath error:" << userPath.error();
- else {
- QDBusInterface userIface(accountsService, userPath.value().path(),
- propertiesInterface, QDBusConnection::systemBus());
- QDBusReply<QDBusVariant> backgroundReply = userIface.call("Get", accountsUserInterface, "BackgroundFile");
- if(!backgroundReply.isValid())
- qWarning() << "Get User's BackgroundFile error" << backgroundReply.error();
- else {
- strBackground = backgroundReply.value().variant().toString();
- }
- }
- return strBackground;
-}
diff --git a/src/dbusifs/accountservicehelper.h b/src/dbusifs/accountservicehelper.h
deleted file mode 100644
index 74fb23b..0000000
--- a/src/dbusifs/accountservicehelper.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (C) 2023 Tianjin KYLIN Information Technology Co., Ltd.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 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 ACCOUNTSERVICEHELPER_H
-#define ACCOUNTSERVICEHELPER_H
-
-#include <QObject>
-#include <QDBusInterface>
-
-class AccountServiceHelper : public QObject
-{
- Q_OBJECT
-public:
- explicit AccountServiceHelper(QObject *parent = nullptr);
-
- virtual ~AccountServiceHelper();
-
- QString getUserLanguageByName(QString strUserName);
-
- QString getUserBackgroundByName(QString strUserName);
-
- QString getUserSessionByName(QString strUserName);
-
- QString getAccountBackground(uid_t uid);
-
-private:
- QDBusInterface *m_accountsInterface = nullptr;
-};
-
-#endif // ACCOUNTSERVICEHELPER_H
diff --git a/src/dbusifs/accountshelper.cpp b/src/dbusifs/accountshelper.cpp
new file mode 100644
index 0000000..f6462e4
--- /dev/null
+++ b/src/dbusifs/accountshelper.cpp
@@ -0,0 +1,156 @@
+/*
+ * Copyright (C) 2023 Tianjin KYLIN Information Technology Co., Ltd.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 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 "accountshelper.h"
+#include "definetypes.h"
+#include <QDBusConnection>
+#include <QDBusInterface>
+#include <QDBusConnectionInterface>
+#include <QDebug>
+#include "userinfo.h"
+
+AccountsHelper::AccountsHelper(QObject *parent)
+ : QObject(parent)
+{
+ initData();
+ initConnections();
+}
+
+AccountsHelper::~AccountsHelper()
+{
+
+}
+
+QString AccountsHelper::getUserLanguageByName(QString strUserName)
+{
+ QString strLanguage = "";
+ if(!m_accountsInterface)
+ return strLanguage;
+ QDBusReply<QDBusObjectPath> userPath = m_accountsInterface->call("FindUserByName", strUserName);
+ if(!userPath.isValid())
+ qWarning() << "Get UserPath error:" << userPath.error();
+ else {
+ QDBusInterface userIface(ACCOUNTS_DBUS_SERVICE, userPath.value().path(),
+ FD_PROPERTIES_INTERFACE, QDBusConnection::systemBus());
+ QDBusReply<QDBusVariant> languageReply = userIface.call("Get", ACCOUNTS_USER_DBUS_INTERFACE, "Language");
+ if(!languageReply.isValid())
+ qWarning() << "Get User's language error" << languageReply.error();
+ else {
+ strLanguage = languageReply.value().variant().toString();
+ }
+ }
+ return strLanguage;
+}
+
+QString AccountsHelper::getUserBackgroundByName(QString strUserName)
+{
+ QString strBackground = "";
+ if(!m_accountsInterface)
+ return strBackground;
+ QDBusReply<QDBusObjectPath> userPath = m_accountsInterface->call("FindUserByName", strUserName);
+ if(!userPath.isValid())
+ qWarning() << "Get UserPath error:" << userPath.error();
+ else {
+ QDBusInterface userIface(ACCOUNTS_DBUS_SERVICE, userPath.value().path(),
+ FD_PROPERTIES_INTERFACE, QDBusConnection::systemBus());
+ QDBusReply<QDBusVariant> backgroundReply = userIface.call("Get", ACCOUNTS_USER_DBUS_INTERFACE, "BackgroundFile");
+ if(!backgroundReply.isValid())
+ qWarning() << "Get User's background error" << backgroundReply.error();
+ else {
+ strBackground = backgroundReply.value().variant().toString();
+ }
+ }
+ return strBackground;
+}
+
+QString AccountsHelper::getUserSessionByName(QString strUserName)
+{
+ QString strSession = "";
+ if(!m_accountsInterface)
+ return strSession;
+ QDBusReply<QDBusObjectPath> userPath = m_accountsInterface->call("FindUserByName", strUserName);
+ if(!userPath.isValid())
+ qWarning() << "Get UserPath error:" << userPath.error();
+ else {
+ QDBusInterface userIface(ACCOUNTS_DBUS_SERVICE, userPath.value().path(),
+ FD_PROPERTIES_INTERFACE, QDBusConnection::systemBus());
+ QDBusReply<QDBusVariant> sessionReply = userIface.call("Get", ACCOUNTS_USER_DBUS_INTERFACE, "XSession");
+ if(!sessionReply.isValid())
+ qWarning() << "Get User's xsession error" << sessionReply.error();
+ else {
+ strSession = sessionReply.value().variant().toString();
+ }
+ }
+ return strSession;
+}
+
+QString AccountsHelper::getAccountBackground(uid_t uid)
+{
+ QString strBackground = "";
+ if(!m_accountsInterface)
+ return strBackground;
+ QDBusReply<QDBusObjectPath> userPath = m_accountsInterface->call("FindUserById", (qint64)uid);
+ if(!userPath.isValid())
+ qWarning() << "Get UserPath error:" << userPath.error();
+ else {
+ QDBusInterface userIface(ACCOUNTS_DBUS_SERVICE, userPath.value().path(),
+ FD_PROPERTIES_INTERFACE, QDBusConnection::systemBus());
+ QDBusReply<QDBusVariant> backgroundReply = userIface.call("Get", ACCOUNTS_USER_DBUS_INTERFACE, "BackgroundFile");
+ if(!backgroundReply.isValid())
+ qWarning() << "Get User's BackgroundFile error" << backgroundReply.error();
+ else {
+ strBackground = backgroundReply.value().variant().toString();
+ }
+ }
+ return strBackground;
+}
+
+void AccountsHelper::initData()
+{
+ if (!m_accountsInterface) {
+ m_accountsInterface = new QDBusInterface(ACCOUNTS_DBUS_SERVICE,
+ ACCOUNTS_DBUS_PATH,
+ ACCOUNTS_DBUS_INTERFACE,
+ QDBusConnection::systemBus(),
+ this);
+ }
+}
+
+void AccountsHelper::initConnections()
+{
+ connect(m_accountsInterface, SIGNAL(UserAdded(QDBusObjectPath)), this, SIGNAL(UserAdded(QDBusObjectPath)));
+ connect(m_accountsInterface, SIGNAL(UserDeleted(QDBusObjectPath)), this, SIGNAL(UserRemoved(QDBusObjectPath)));
+}
+
+QStringList AccountsHelper::getUserList()
+{
+ QStringList listUsers;
+ if (!m_accountsInterface)
+ return listUsers;
+ QDBusMessage ret = m_accountsInterface->call("ListCachedUsers");
+ QList<QVariant> outArgs = ret.arguments();
+ QVariant first = outArgs.at(0);
+ const QDBusArgument &dbusArgs = first.value<QDBusArgument>();
+ QDBusObjectPath path;
+ dbusArgs.beginArray();
+ while (!dbusArgs.atEnd()) {
+ dbusArgs >> path;
+ listUsers << path.path();
+ }
+ dbusArgs.endArray();
+ return listUsers;
+}
diff --git a/src/dbusifs/accountshelper.h b/src/dbusifs/accountshelper.h
new file mode 100644
index 0000000..daae4e0
--- /dev/null
+++ b/src/dbusifs/accountshelper.h
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2023 Tianjin KYLIN Information Technology Co., Ltd.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 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 ACCOUNTSERVICEHELPER_H
+#define ACCOUNTSERVICEHELPER_H
+
+#include <QObject>
+#include <QDBusInterface>
+#include <QMap>
+#include <QDBusObjectPath>
+
+class AccountsHelper : public QObject
+{
+ Q_OBJECT
+public:
+ explicit AccountsHelper(QObject *parent = nullptr);
+
+ virtual ~AccountsHelper();
+
+ QString getUserLanguageByName(QString strUserName);
+
+ QString getUserBackgroundByName(QString strUserName);
+
+ QString getUserSessionByName(QString strUserName);
+
+ QString getAccountBackground(uid_t uid);
+
+ QStringList getUserList();
+
+Q_SIGNALS:
+ void UserAdded(const QDBusObjectPath &path);
+ void UserRemoved(const QDBusObjectPath &path);
+
+private:
+ void initData();
+ void initConnections();
+
+private:
+ QDBusInterface *m_accountsInterface = nullptr;
+};
+
+#endif // ACCOUNTSERVICEHELPER_H
diff --git a/src/lock-backend/dbusupperinterface.cpp b/src/lock-backend/dbusupperinterface.cpp
index f081ea9..6443d72 100644
--- a/src/lock-backend/dbusupperinterface.cpp
+++ b/src/lock-backend/dbusupperinterface.cpp
@@ -33,7 +33,7 @@
#include "switchuserutils.h"
#include "pamauthenticate.h"
#include "upowerhelper.h"
-#include "accountservicehelper.h"
+#include "accountshelper.h"
#include "sessionhelper.h"
#include "sessionwatcher.h"
#include "freedesktophelper.h"
@@ -56,7 +56,7 @@ void DbusUpperInterface::initData()
{
m_bLockState = false;
m_bSlpState = false;
- m_accountsHelper = new AccountServiceHelper(this);
+ m_accountsHelper = new AccountsHelper(this);
m_lightDmHelper = new LightDMHelper(m_accountsHelper, this);
m_login1Helper = new Login1Helper(this);
m_config = new Configuration(this);
diff --git a/src/lock-backend/dbusupperinterface.h b/src/lock-backend/dbusupperinterface.h
index 892f9db..42c046b 100644
--- a/src/lock-backend/dbusupperinterface.h
+++ b/src/lock-backend/dbusupperinterface.h
@@ -37,7 +37,7 @@ class QJsonObject;
class PamAuthenticate;
class UsdHelper;
class UpowerHelper;
-class AccountServiceHelper;
+class AccountsHelper;
class SessionHelper;
class SessionWatcher;
class BioAuthenticate;
@@ -381,7 +381,7 @@ private:
PamAuthenticate *m_pamAuth = nullptr;
UsdHelper *m_usdHelper = nullptr;
UpowerHelper *m_upowerHelper = nullptr;
- AccountServiceHelper *m_accountsHelper = nullptr;
+ AccountsHelper *m_accountsHelper = nullptr;
bool lockState = false;
SessionHelper *m_sessionHelper = nullptr;
SessionWatcher *m_sessionWatcher = nullptr;
diff --git a/src/lock-backend/lightdmhelper.cpp b/src/lock-backend/lightdmhelper.cpp
index 6c50c53..5c1012a 100644
--- a/src/lock-backend/lightdmhelper.cpp
+++ b/src/lock-backend/lightdmhelper.cpp
@@ -22,14 +22,21 @@
#include "securityuser.h"
#include <pwd.h>
#include "proxymodel.h"
-#include "accountservicehelper.h"
+#include "accountshelper.h"
+#include "definetypes.h"
+#include <QDBusArgument>
+#include <QDBusMessage>
+#include <QVariantMap>
-LightDMHelper::LightDMHelper(AccountServiceHelper *accountHelper, QObject *parent)
+LightDMHelper::LightDMHelper(AccountsHelper *accountHelper, QObject *parent)
: QLightDM::Greeter(parent)
, m_sessionsModel(nullptr)
, m_secUser(SecurityUser::instance())
, m_strCurUserName("")
, m_accountServiceHelper(accountHelper)
+ , m_ldmSessions(new QMap<QString, std::shared_ptr<LightDMSessionInfo>>())
+ , m_mapUsers(new QMap<QString, UserInfoPtr>())
+ , m_dbusIfsLDM(nullptr)
{
//连接到lightdm
if(!connectToDaemonSync()){
@@ -46,11 +53,10 @@ void LightDMHelper::initData()
updateSessionsInfo();
setSession(defaultSessionHint());
// 获取用户信息
+ initLDMSessionsInfo();
m_isShowManualLogin = showManualLoginHint();
if(!hideUsersHint()){
- m_modelUsers = new UsersModel(this);
- m_modelUsers->setSourceModel(new QLightDM::UsersModel(this));
- connect(m_modelUsers, &UsersModel::userInfoChanged, this, &LightDMHelper::onUsersChanged);
+ initAccountsUsersInfo();
if(hasValidUsers() == 0) {
m_isShowManualLogin = true;
}
@@ -127,7 +133,7 @@ bool LightDMHelper::setCurrentUser(QString strUserName)
UserInfoPtr LightDMHelper::findUserByUid(uid_t id)
{
- for (auto userInfoPtr : m_listUsers) {
+ for (auto userInfoPtr : m_mapUsers->values()) {
if (userInfoPtr->uid() == id) {
return userInfoPtr;
}
@@ -137,7 +143,7 @@ UserInfoPtr LightDMHelper::findUserByUid(uid_t id)
UserInfoPtr LightDMHelper::findUserByName(QString strName)
{
- for (auto userInfoPtr : m_listUsers) {
+ for (auto userInfoPtr : m_mapUsers->values()) {
if (userInfoPtr->name() == strName) {
return userInfoPtr;
}
@@ -147,7 +153,7 @@ UserInfoPtr LightDMHelper::findUserByName(QString strName)
bool LightDMHelper::hasSameUser(const UserInfoPtr userInfoPtr)
{
- for (auto user : m_listUsers) {
+ for (auto user : m_mapUsers->values()) {
if (user->uid() == userInfoPtr->uid()
&& user->name() == userInfoPtr->name()) {
return true;
@@ -158,12 +164,9 @@ bool LightDMHelper::hasSameUser(const UserInfoPtr userInfoPtr)
bool LightDMHelper::hasValidUsers()
{
- if (!m_modelUsers)
- return false;
int count = 0;
- for(int i = 0; i < m_modelUsers->rowCount(QModelIndex()); i++){
- QString name = m_modelUsers->index(i).data(QLightDM::UsersModel::NameRole).toString();
- if(m_secUser->isSecrityUser(name))
+ for (auto user : m_mapUsers->values()) {
+ if(m_secUser->isSecrityUser(user->name()))
count++;
}
return (bool)(count>0);
@@ -182,51 +185,18 @@ bool LightDMHelper::isSameUser(UserInfoPtr userA, UserInfoPtr userB)
void LightDMHelper::onUsersChanged()
{
- if (!m_modelUsers)
- return ;
updateUsersInfo();
Q_EMIT usersInfoChanged();
}
void LightDMHelper::updateUsersInfo()
{
- m_listUsers.clear();
- if (m_modelUsers) {
- for(int i = 0; i < m_modelUsers->rowCount(QModelIndex()); i++){
- QString name = m_modelUsers->index(i).data(QLightDM::UsersModel::NameRole).toString();
- if(m_secUser->isSecrityUser(name)) {
- std::shared_ptr<UserInfo> userInfoPtr = std::make_shared<UserInfo>();
- userInfoPtr->updateName(name);
- uid_t uid = m_modelUsers->index(i).data(QLightDM::UsersModel::UidRole).toUInt();
- userInfoPtr->updateUid(uid);
- QString strRealName = m_modelUsers->index(i).data(QLightDM::UsersModel::RealNameRole).toString();
- if (strRealName.isEmpty()) {
- strRealName = name;
- }
- userInfoPtr->updateFullName(strRealName);
- QString strBackGround = m_modelUsers->index(i).data(QLightDM::UsersModel::BackgroundPathRole).toString();
- if (!strBackGround.isEmpty() && QFileInfo(strBackGround).exists()){
- userInfoPtr->updateBackground(strBackGround);
- } else {
- if (m_accountServiceHelper) {
- strBackGround = m_accountServiceHelper->getAccountBackground(uid);
- if (!strBackGround.isEmpty() && QFileInfo(strBackGround).exists()){
- userInfoPtr->updateBackground(strBackGround);
- }
- }
- }
- QString strImgHead = m_modelUsers->index(i).data(QLightDM::UsersModel::ImagePathRole).toString();
- if (!strImgHead.isEmpty() && QFileInfo(strImgHead).exists()){
- userInfoPtr->updateHeadImage(strImgHead);
- }
-
- bool isLoggedIn = m_modelUsers->index(i).data(QLightDM::UsersModel::LoggedInRole).toBool();
- userInfoPtr->updateLoggedIn(isLoggedIn);
-
- if (!hasSameUser(userInfoPtr)) {
- m_listUsers.append(userInfoPtr);
- }
- }
+ QList<UserInfoPtr> userInfos = m_mapUsers->values();
+ for (auto user : userInfos) {
+ if (isUserLoggined(user->name())) {
+ user->updateLoggedIn(true);
+ } else {
+ user->updateLoggedIn(false);
}
}
if (m_isShowManualLogin) {
@@ -234,7 +204,8 @@ void LightDMHelper::updateUsersInfo()
userInfoPtr->updateFullName(tr("Login"));
userInfoPtr->updateName("*login");
if (!hasSameUser(userInfoPtr)) {
- m_listUsers.append(userInfoPtr);
+ const QString path = userInfoPtr->path().isEmpty() ? userInfoPtr->name() : userInfoPtr->path();
+ m_mapUsers->insert(path, userInfoPtr);
}
}
if (hasGuestAccountHint()) {
@@ -242,7 +213,8 @@ void LightDMHelper::updateUsersInfo()
userInfoPtr->updateFullName(tr("Guest"));
userInfoPtr->updateName("*guest");
if (!hasSameUser(userInfoPtr)) {
- m_listUsers.append(userInfoPtr);
+ const QString path = userInfoPtr->path().isEmpty() ? userInfoPtr->name() : userInfoPtr->path();
+ m_mapUsers->insert(path, userInfoPtr);
}
}
}
@@ -261,5 +233,201 @@ void LightDMHelper::updateSessionsInfo()
QList<UserInfoPtr> LightDMHelper::getUsersInfo()
{
- return m_listUsers;
+ return m_mapUsers->values();
+}
+
+bool LightDMHelper::isUserLoggined(const QString &strUserName)
+{
+ QList<std::shared_ptr<LightDMSessionInfo>> sessionList = m_ldmSessions->values();
+ auto it = std::find_if(sessionList.begin(), sessionList.end(), [strUserName](std::shared_ptr<LightDMSessionInfo> &session) {
+ return session->userName() == strUserName;
+ });
+ if (it != sessionList.end()) {
+ return true;
+ }
+ return false;
+}
+
+void LightDMHelper::initLDMSessionsInfo()
+{
+ if (!m_dbusIfsLDM) {
+ m_dbusIfsLDM = new QDBusInterface(DM_DBUS_SERVICE, DM_DBUS_PATH, DM_DBUS_INTERFACE, QDBusConnection::systemBus(), this);
+ connect(m_dbusIfsLDM, SIGNAL(SessionAdded(QDBusObjectPath)), this, SLOT(onLDMSessionAdded(QDBusObjectPath)));
+ connect(m_dbusIfsLDM, SIGNAL(SessionRemoved(QDBusObjectPath)), this, SLOT(onLDMSessionRemoved(QDBusObjectPath)));
+
+ QStringList listSessions;
+ QDBusInterface ifLDMProp(DM_DBUS_SERVICE, DM_DBUS_PATH, FD_PROPERTIES_INTERFACE, QDBusConnection::systemBus());
+ QDBusMessage ret = ifLDMProp.call("GetAll", DM_DBUS_INTERFACE);
+ QList<QVariant> outArgs = ret.arguments();
+ QVariant first = outArgs.at(0);
+ const QDBusArgument &dbusArgs = first.value<QDBusArgument>();
+ dbusArgs.beginMap();
+ while(!dbusArgs.atEnd()) {
+ QString key;
+ QVariant value;
+ dbusArgs.beginMapEntry();
+ dbusArgs >> key >> value;
+ if (key == "Sessions") {
+ const QDBusArgument &dbusObjPaths = value.value<QDBusArgument>();
+ QDBusObjectPath path;
+ dbusObjPaths.beginArray();
+ while (!dbusObjPaths.atEnd()) {
+ dbusObjPaths >> path;
+ listSessions << path.path();
+ }
+ dbusObjPaths.endArray();
+ }
+ dbusArgs.endMapEntry();
+ }
+ dbusArgs.endMap();
+ for (auto session : listSessions) {
+ std::shared_ptr<LightDMSessionInfo> ldmSessionInfo(new LightDMSessionInfo(session, this));
+ m_ldmSessions->insert(session, ldmSessionInfo);
+ }
+ }
+}
+
+void LightDMHelper::onLDMSessionAdded(QDBusObjectPath objPath)
+{
+ qDebug()<< "Add LDM Session, path:"<<objPath.path();
+
+ if (m_ldmSessions->contains(objPath.path())) {
+ return;
+ }
+ std::shared_ptr<LightDMSessionInfo> ldmSessionInfo(new LightDMSessionInfo(objPath.path(), this));
+ m_ldmSessions->insert(objPath.path(), ldmSessionInfo);
+ onUsersChanged();
+}
+
+void LightDMHelper::onLDMSessionRemoved(QDBusObjectPath objPath)
+{
+ if (!m_ldmSessions->contains(objPath.path())) {
+ return;
+ }
+ const std::shared_ptr<LightDMSessionInfo> session = m_ldmSessions->value(objPath.path());
+ m_ldmSessions->remove(objPath.path());
+ onUsersChanged();
+}
+
+void LightDMHelper::initAccountsUsersInfo()
+{
+ if (m_accountServiceHelper) {
+ QStringList listUsers = m_accountServiceHelper->getUserList();
+ for (auto user : listUsers) {
+ LocalUserInfoPtr userInfo(new LocalUserInfo(user, this));
+ connect(userInfo.get(), &UserInfo::userPropChanged, this, &LightDMHelper::onUsersChanged);
+ m_mapUsers->insert(user, userInfo);
+ }
+ connect(m_accountServiceHelper, SIGNAL(UserAdded(QDBusObjectPath)), this, SLOT(onUserAdded(QDBusObjectPath)));
+ connect(m_accountServiceHelper, SIGNAL(UserRemoved(QDBusObjectPath)), this, SLOT(onUserRemoved(QDBusObjectPath)));
+ }
+}
+
+void LightDMHelper::onUserAdded(QDBusObjectPath objPath)
+{
+ qDebug()<< "Add Accounts User, path:"<<objPath.path();
+
+ if (m_mapUsers->contains(objPath.path())) {
+ return;
+ }
+ LocalUserInfoPtr userInfo(new LocalUserInfo(objPath.path(), this));
+ connect(userInfo.get(), &UserInfo::userPropChanged, this, &LightDMHelper::onUsersChanged);
+ m_mapUsers->insert(objPath.path(), userInfo);
+ onUsersChanged();
+}
+
+void LightDMHelper::onUserRemoved(QDBusObjectPath objPath)
+{
+ if (!m_mapUsers->contains(objPath.path())) {
+ return;
+ }
+ const UserInfoPtr userInfo = m_mapUsers->value(objPath.path());
+ qDebug()<< "Remove Accounts User, name:"<<userInfo->name();
+ m_mapUsers->remove(objPath.path());
+ onUsersChanged();
+}
+
+LightDMSessionInfo::LightDMSessionInfo(const QString &strPath, QObject* parent)
+ : QObject(parent)
+ , m_strPath(strPath)
+{
+ initData();
+ initConnections();
+}
+
+LightDMSessionInfo::~LightDMSessionInfo()
+{
+ if (m_propertiesChangedConnected) {
+ QDBusConnection::systemBus().disconnect(DM_DBUS_SERVICE,
+ m_strPath,
+ FD_PROPERTIES_INTERFACE,
+ "PropertiesChanged",
+ this,
+ SLOT(onPropertiesChanged(QString, QVariantMap, QStringList)));
+ m_propertiesChangedConnected = false;
+ }
+}
+
+void LightDMSessionInfo::initData()
+{
+ QDBusInterface ifaceExtra(DM_DBUS_SERVICE, m_strPath, FD_PROPERTIES_INTERFACE, QDBusConnection::systemBus());
+ QDBusMessage ret = ifaceExtra.call("GetAll", DM_SESSION_INTERFACE);
+ QList<QVariant> outArgs = ret.arguments();
+ QVariant first = outArgs.at(0);
+ const QDBusArgument &dbusArgs = first.value<QDBusArgument>();
+ dbusArgs.beginMap();
+ while(!dbusArgs.atEnd()) {
+ QString key;
+ QVariant value;
+ dbusArgs.beginMapEntry();
+ dbusArgs >> key >> value;
+ if (key == "Seat") {
+ m_strSeatPath = value.toString();
+ } else if (key == "UserName") {
+ m_strUserName = value.toString();
+ }
+ dbusArgs.endMapEntry();
+ }
+ dbusArgs.endMap();
+}
+
+void LightDMSessionInfo::initConnections()
+{
+ if (!m_propertiesChangedConnected) {
+ QDBusConnection::systemBus().connect(DM_DBUS_SERVICE,
+ m_strPath,
+ FD_PROPERTIES_INTERFACE,
+ "PropertiesChanged",
+ this,
+ SLOT(onPropertiesChanged(QString, QVariantMap, QStringList)));
+ m_propertiesChangedConnected = true;
+ }
+}
+
+void LightDMSessionInfo::onPropertiesChanged(const QString& interfaceName,
+ const QVariantMap& changedProperties,
+ const QStringList& invalidatedProperties)
+{
+ Q_UNUSED(invalidatedProperties);
+ if (interfaceName == DM_SESSION_INTERFACE) {
+ QVariantMap::const_iterator itVar = changedProperties.constBegin();
+ for ( ; itVar != changedProperties.constEnd(); itVar++) {
+ QVariant varValue = itVar.value();
+ if(itVar.key() == "Seat") {
+ m_strSeatPath = varValue.toString();
+ } else if(itVar.key() == "UserName") {
+ m_strUserName = varValue.toString();
+ }
+ }
+ }
+}
+
+QDebug operator <<(QDebug stream, const LightDMSessionInfo &sessionInfo)
+{
+ stream << "["
+ << sessionInfo.path()
+ << sessionInfo.userName()
+ << sessionInfo.seatPath()
+ << "]";
+ return stream;
}
diff --git a/src/lock-backend/lightdmhelper.h b/src/lock-backend/lightdmhelper.h
index 54829fd..8fc5053 100644
--- a/src/lock-backend/lightdmhelper.h
+++ b/src/lock-backend/lightdmhelper.h
@@ -24,11 +24,13 @@
#include <QLightDM/UsersModel>
#include <QList>
#include <QModelIndex>
+#include <QDBusInterface>
#include "userinfo.h"
class SecurityUser;
class UsersModel;
-class AccountServiceHelper;
+class AccountsHelper;
+class LightDMSessionInfo;
/**
* @brief lightdm工具类
*
@@ -42,7 +44,7 @@ public:
*
* @param parent 父指针
*/
- explicit LightDMHelper(AccountServiceHelper *accountHelper, QObject *parent = nullptr);
+ explicit LightDMHelper(AccountsHelper *accountHelper, QObject *parent = nullptr);
public:
/**
@@ -103,6 +105,14 @@ public Q_SLOTS:
*/
void onUsersChanged();
+ void onLDMSessionAdded(QDBusObjectPath objPath);
+
+ void onLDMSessionRemoved(QDBusObjectPath objPath);
+
+ void onUserAdded(QDBusObjectPath objPath);
+
+ void onUserRemoved(QDBusObjectPath objPath);
+
Q_SIGNALS:
/**
* @brief 认证成功
@@ -153,16 +163,51 @@ private:
void updateSessionsInfo();
+ void initLDMSessionsInfo();
+
+ bool isUserLoggined(const QString &strUserName);
+
+ void initAccountsUsersInfo();
+
private:
bool m_isShowManualLogin; /**< 是否显示手动登录 */
QString m_strSession; /**< 当前会话 */
QString m_strCurUserName; /**< 当前选择用户 */
- QList<UserInfoPtr> m_listUsers; /**< 用户信息列表 */
SecurityUser *m_secUser = nullptr; /**< 安全用户信息指针 */
QLightDM::SessionsModel *m_sessionsModel; /**< lightdm 会话数据指针 */
QList<QString> m_listSessions; /**< 会话列表 */
- UsersModel *m_modelUsers = nullptr; /**< lightdm 用户数据指针 */
- AccountServiceHelper *m_accountServiceHelper = nullptr;
+ QMap<QString, UserInfoPtr> *m_mapUsers; /**< accounts 用户信息列表指针 */
+ AccountsHelper *m_accountServiceHelper = nullptr;
+ QMap<QString, std::shared_ptr<LightDMSessionInfo>> *m_ldmSessions;
+ QDBusInterface *m_dbusIfsLDM;
};
+class LightDMSessionInfo : public QObject
+{
+ Q_OBJECT
+public:
+ explicit LightDMSessionInfo(const QString &strPath, QObject* parent = nullptr);
+
+ virtual ~LightDMSessionInfo();
+
+ inline QString path() const { return m_strPath; }
+ inline QString userName() const { return m_strUserName; }
+ inline QString seatPath() const { return m_strSeatPath; }
+
+private:
+ void initData();
+ void initConnections();
+
+private Q_SLOTS:
+ void onPropertiesChanged(const QString&, const QVariantMap&, const QStringList&);
+
+private:
+ QString m_strPath;
+ bool m_propertiesChangedConnected = false;
+ QString m_strSeatPath;
+ QString m_strUserName;
+};
+
+QDebug operator <<(QDebug stream, const LightDMSessionInfo &userInfo);
+
#endif // LIGHTDMHELPER_H
diff --git a/src/lock-dialog/languagesetting.cpp b/src/lock-dialog/languagesetting.cpp
new file mode 100644
index 0000000..44b552d
--- /dev/null
+++ b/src/lock-dialog/languagesetting.cpp
@@ -0,0 +1,71 @@
+#include "languagesetting.h"
+#include <QApplication>
+#include "definetypes.h"
+#include <QDebug>
+
+LanguageSetting* LanguageSetting::m_singleInstance = nullptr;
+
+LanguageSetting::LanguageSetting(QObject *parent)
+ : QObject(parent)
+{
+
+}
+
+LanguageSetting::~LanguageSetting()
+{
+
+}
+
+LanguageSetting* LanguageSetting::instance(QObject *parent)
+{
+ if(m_singleInstance == nullptr)
+ m_singleInstance = new LanguageSetting(parent);
+ return m_singleInstance;
+}
+
+void LanguageSetting::onLanguageChanged(QString languageCode)
+{
+ if(languageCode == "")
+ return ;
+
+ if(m_strLanguageCode == languageCode) {
+ return;
+ }
+
+ qDebug()<<"onLanguageChanged "<<languageCode;
+ Q_EMIT languageChanged(false);
+ if (m_translator) {
+ qApp->removeTranslator(m_translator);
+ delete m_translator;
+ m_translator = nullptr;
+ }
+ m_translator = new QTranslator(this);
+ QString qmFile;
+
+ if (languageCode.startsWith("zh_CN")) { /*这里写的有问题忘记之前为什么写了会导致繁体也会加载zh_CN*/
+ qmFile = QString(WORKING_DIRECTORY"/i18n_qm/%1.qm").arg("zh_CN");
+ setenv("LANGUAGE","zh_CN",1);
+ setenv("LANG","zh_CN",1);
+ setlocale(LC_ALL,"zh_CN.utf8");
+ QLocale lang("zh_CN");
+ /*这里设置一个QLocale的默认值用来影响插件的语言。插件加载翻译文件时不使用QLocale::system().name()来获取语言,
+ * 应该使用QLocale local; local.name() 来获取语言,这样可以识别到登录界面设置的的语言环境*/
+ QLocale::setDefault(lang);
+ } else {
+ qmFile = QString(WORKING_DIRECTORY"/i18n_qm/%1.qm").arg(languageCode);
+ setenv("LANGUAGE",languageCode.toLatin1().data(),1);
+ setenv("LANG",languageCode.toLatin1().data(),1);
+ setlocale(LC_ALL,"");
+ QLocale lang(languageCode);
+ /*这里设置一个QLocale的默认值用来影响插件的语言。插件加载翻译文件时不使用QLocale::system().name()来获取语言,
+ * 应该使用QLocale local; local.name() 来获取语言,这样可以识别到登录界面设置的的语言环境*/
+ QLocale::setDefault(languageCode);
+ }
+
+ m_translator->load(qmFile);
+ qApp->installTranslator(m_translator);
+ qDebug() << "load translation file " << qmFile;
+
+ m_strLanguageCode = languageCode;
+ Q_EMIT languageChanged(true);
+}
diff --git a/src/lock-dialog/languagesetting.h b/src/lock-dialog/languagesetting.h
new file mode 100644
index 0000000..0119516
--- /dev/null
+++ b/src/lock-dialog/languagesetting.h
@@ -0,0 +1,29 @@
+#ifndef LANGUAGESETTING_H
+#define LANGUAGESETTING_H
+
+#include <QObject>
+#include <QTranslator>
+
+class LanguageSetting : public QObject
+{
+ Q_OBJECT
+
+public:
+ static LanguageSetting *instance(QObject *parent = nullptr);
+
+ void onLanguageChanged(QString languageCode);
+
+Q_SIGNALS:
+ void languageChanged(bool isCompleted);
+
+private:
+ LanguageSetting(QObject *parent = nullptr);
+ virtual ~LanguageSetting();
+
+private:
+ static LanguageSetting *m_singleInstance;
+ QTranslator *m_translator = nullptr;
+ QString m_strLanguageCode;
+};
+
+#endif // LANGUAGESETTING_H
diff --git a/src/lock-dialog/lockdialogmodel.cpp b/src/lock-dialog/lockdialogmodel.cpp
index d8b06a3..4f684d1 100644
--- a/src/lock-dialog/lockdialogmodel.cpp
+++ b/src/lock-dialog/lockdialogmodel.cpp
@@ -178,7 +178,26 @@ void LockDialogModel::updateSessionsInfo(QStringList list)
void LockDialogModel::updateUsersInfo(QList<UserInfoPtr> list)
{
- m_listUsersInfo = list;
+ for (auto userinfo : list) {
+ if (m_listUsersInfo.contains(userinfo)) {
+ UserInfoPtr changedUserInfo = findUserByName(userinfo->name());
+ if (changedUserInfo) {
+ changedUserInfo->updateUid(userinfo->uid());
+ changedUserInfo->updateFullName(userinfo->fullName());
+ changedUserInfo->updateHeadImage(userinfo->headImage());
+ changedUserInfo->updateLang(userinfo->lang());
+ changedUserInfo->updateLoggedIn(userinfo->isLoggedIn());
+ changedUserInfo->updateBackground(userinfo->backGround());
+ }
+ } else {
+ m_listUsersInfo.append(userinfo);
+ }
+ }
+ foreach (auto userinfo, m_listUsersInfo) {
+ if (!list.contains(userinfo)) {
+ m_listUsersInfo.removeOne(userinfo);
+ }
+ }
Q_EMIT usersInfoChanged();
}
@@ -190,7 +209,26 @@ void LockDialogModel::updateAgreementInfo(AgreementInfoPtr agreementInfo)
void LockDialogModel::onUsersInfoChanged(QList<UserInfoPtr> list)
{
- m_listUsersInfo = list;
+ for (auto userinfo : list) {
+ if (m_listUsersInfo.contains(userinfo)) {
+ UserInfoPtr changedUserInfo = findUserByName(userinfo->name());
+ if (changedUserInfo) {
+ changedUserInfo->updateUid(userinfo->uid());
+ changedUserInfo->updateFullName(userinfo->fullName());
+ changedUserInfo->updateHeadImage(userinfo->headImage());
+ changedUserInfo->updateLang(userinfo->lang());
+ changedUserInfo->updateLoggedIn(userinfo->isLoggedIn());
+ changedUserInfo->updateBackground(userinfo->backGround());
+ }
+ } else {
+ m_listUsersInfo.append(userinfo);
+ }
+ }
+ foreach (auto userinfo, m_listUsersInfo) {
+ if (!list.contains(userinfo)) {
+ m_listUsersInfo.removeOne(userinfo);
+ }
+ }
Q_EMIT usersInfoChanged();
}
diff --git a/src/lock-dialog/main.cpp b/src/lock-dialog/main.cpp
index a55d8bc..492f2f4 100644
--- a/src/lock-dialog/main.cpp
+++ b/src/lock-dialog/main.cpp
@@ -42,6 +42,7 @@
#include "screensaverwndadaptor.h"
#include "pluginsloader.h"
#include "msysdbus.h"
+#include "languagesetting.h"
FullBackgroundWidget *window = nullptr;
@@ -122,12 +123,7 @@ int main(int argc, char *argv[])
qInfo()<<"Start "<<app.arguments();
//加载翻译文件
- QString locale = QLocale::system().name();
- QTranslator translator;
- QString qmFile = QString(WORKING_DIRECTORY"/i18n_qm/%1.qm").arg(locale);
- translator.load(qmFile);
- app.installTranslator(&translator);
- qDebug() << "load translation file " << qmFile;
+ LanguageSetting::instance()->onLanguageChanged(QLocale::system().name());
window = new FullBackgroundWidget(lockDialogModel);
diff --git a/src/userinfo.cpp b/src/userinfo.cpp
index be2e55f..2e38e3f 100644
--- a/src/userinfo.cpp
+++ b/src/userinfo.cpp
@@ -17,9 +17,16 @@
**/
#include "userinfo.h"
#include "global_utils.h"
+#include "definetypes.h"
+#include <QDBusConnection>
+#include <QDBusMessage>
+#include <QDBusInterface>
+#include <QDBusArgument>
+#include <QFile>
-UserInfo::UserInfo()
- : m_isLoggedIn(false)
+UserInfo::UserInfo(QObject *parent)
+ : QObject(parent)
+ , m_isLoggedIn(false)
, m_uId(-1)
, m_strBackground(DEFAULT_BACKGROUND_PATH)
, m_strLang(qgetenv("LANG"))
@@ -29,7 +36,8 @@ UserInfo::UserInfo()
}
UserInfo::UserInfo(const UserInfo &userInfo)
- : m_isLoggedIn(userInfo.m_isLoggedIn)
+ : QObject(userInfo.parent())
+ , m_isLoggedIn(userInfo.m_isLoggedIn)
, m_uId(userInfo.m_uId)
, m_strHeadImage(userInfo.m_strHeadImage)
, m_strFullName(userInfo.m_strFullName)
@@ -50,22 +58,11 @@ bool UserInfo::operator==(const UserInfo &userInfo) const
return userInfo.uid() == m_uId && userInfo.name() == m_strName;
}
-UserInfo& UserInfo::operator=(const UserInfo &userInfo)
-{
- if (this == &userInfo) return *this;
-
- updateLoggedIn(userInfo.isLoggedIn());
- updateUid(userInfo.uid());
- updateHeadImage(userInfo.headImage());
- updateFullName(userInfo.fullName());
- updateBackground(userInfo.backGround());
- updateLang(userInfo.lang());
- updateName(userInfo.name());
- return *this;
-}
-
void UserInfo::updateLoggedIn(const bool &isLoggedIn)
{
+ if (isLoggedIn == m_isLoggedIn) {
+ return ;
+ }
m_isLoggedIn = isLoggedIn;
}
@@ -112,3 +109,182 @@ QDebug operator <<(QDebug stream, const UserInfo &userInfo)
<< "]";
return stream;
}
+
+
+LocalUserInfo::LocalUserInfo(const uid_t &uId, QObject* parent)
+ : UserInfo(parent)
+ , m_strPath("/org/freedesktop/Accounts/User" + QString::number(uId))
+{
+ initData();
+ initConnections();
+}
+
+LocalUserInfo::LocalUserInfo(const QString &strPath, QObject* parent)
+ : UserInfo(parent)
+ , m_strPath(strPath)
+{
+ initData();
+ initConnections();
+}
+
+LocalUserInfo::LocalUserInfo(const LocalUserInfo &localUser)
+ : UserInfo(localUser)
+ , m_strPath(localUser.path())
+{
+ if (m_strPath.isEmpty()) {
+ m_strPath = QString("/org/freedesktop/Accounts/User" + QString::number(localUser.uid()));
+ }
+ initConnections();
+}
+
+LocalUserInfo::~LocalUserInfo()
+{
+ if (m_propertiesChangedConnected) {
+ QDBusConnection::systemBus().disconnect(ACCOUNTS_DBUS_SERVICE,
+ m_strPath,
+ FD_PROPERTIES_INTERFACE,
+ "PropertiesChanged",
+ this,
+ SLOT(onPropertiesChanged(QString, QVariantMap, QStringList)));
+ m_propertiesChangedConnected = false;
+ }
+}
+
+void LocalUserInfo::initData()
+{
+ QDBusInterface ifaceExtra(ACCOUNTS_DBUS_SERVICE, m_strPath, FD_PROPERTIES_INTERFACE, QDBusConnection::systemBus());
+ QDBusMessage ret = ifaceExtra.call("GetAll", ACCOUNTS_USER_LDM_SERVICE_INTERFACE);
+ QList<QVariant> outArgs = ret.arguments();
+ QVariant first = outArgs.at(0);
+ const QDBusArgument &dbusArgsExtra = first.value<QDBusArgument>();
+ dbusArgsExtra.beginMap();
+ while(!dbusArgsExtra.atEnd()) {
+ QString key;
+ QVariant value;
+ dbusArgsExtra.beginMapEntry();
+ dbusArgsExtra >> key >> value;
+ if(key == "BackgroundFile") {
+ QString strBackground = value.toString();
+ if(strBackground.isEmpty() || !QFile(strBackground).exists() || !QFile(strBackground).size()) {
+ m_strBackground = DEFAULT_BACKGROUND_PATH;
+ } else {
+ m_strBackground = strBackground;
+ }
+ }
+ dbusArgsExtra.endMapEntry();
+ }
+ dbusArgsExtra.endMap();
+
+ QDBusInterface iface(ACCOUNTS_DBUS_SERVICE, m_strPath, FD_PROPERTIES_INTERFACE, QDBusConnection::systemBus());
+ ret = iface.call("GetAll", ACCOUNTS_USER_DBUS_INTERFACE);
+ outArgs = ret.arguments();
+ first = outArgs.at(0);
+ const QDBusArgument &dbusArgs = first.value<QDBusArgument>();
+ dbusArgs.beginMap();
+ while(!dbusArgs.atEnd()) {
+ QString key;
+ QVariant value;
+ dbusArgs.beginMapEntry();
+ dbusArgs >> key >> value;
+ if(key == "UserName") {
+ m_strName = value.toString();
+ } else if(key == "RealName") {
+ m_strFullName = value.toString();
+ } else if(key == "IconFile") {
+ QString strHeadImage = value.toString();
+ if(strHeadImage.isEmpty() || !QFile(strHeadImage).exists() || !QFile(strHeadImage).size()) {
+ m_strHeadImage = getDefaultFace();
+ } else {
+ m_strHeadImage = strHeadImage;
+ }
+ } else if(key == "Uid") {
+ m_uId = value.toUInt();
+ } else if(key == "Language") {
+ m_strLang = value.toString();
+ } else if (key == "BackgroundFile") {
+ QString strBackground = value.toString();
+ if(!strBackground.isEmpty() && QFile(strBackground).exists() && QFile(strBackground).size()) {
+ m_strBackground = strBackground;
+ }
+ }
+ dbusArgs.endMapEntry();
+ }
+ dbusArgs.endMap();
+ if(m_strFullName.isEmpty()) {
+ m_strFullName = m_strName;
+ }
+}
+
+void LocalUserInfo::initConnections()
+{
+ if (!m_propertiesChangedConnected) {
+ QDBusConnection::systemBus().connect(ACCOUNTS_DBUS_SERVICE,
+ m_strPath,
+ FD_PROPERTIES_INTERFACE,
+ "PropertiesChanged",
+ this,
+ SLOT(onPropertiesChanged(QString, QVariantMap, QStringList)));
+ m_propertiesChangedConnected = true;
+ }
+}
+
+void LocalUserInfo::onPropertiesChanged(const QString& interfaceName,
+ const QVariantMap& changedProperties,
+ const QStringList& invalidatedProperties)
+{
+ Q_UNUSED(invalidatedProperties);
+ if (interfaceName == ACCOUNTS_USER_DBUS_INTERFACE) {
+ QVariantMap::const_iterator itVar = changedProperties.constBegin();
+ bool isChanged = false;
+ for ( ; itVar != changedProperties.constEnd(); itVar++) {
+ QVariant varValue = itVar.value();
+ if(itVar.key() == "UserName") {
+ m_strName = varValue.toString();
+ isChanged = true;
+ } else if(itVar.key() == "RealName") {
+ m_strFullName = varValue.toString();
+ isChanged = true;
+ } else if(itVar.key() == "IconFile") {
+ QString strHeadImage = varValue.toString();
+ if(strHeadImage.isEmpty() || !QFile(strHeadImage).exists() || !QFile(strHeadImage).size()) {
+ m_strHeadImage = getDefaultFace();
+ } else {
+ m_strHeadImage = strHeadImage;
+ }
+ isChanged = true;
+ } else if(itVar.key() == "Uid") {
+ m_uId = varValue.toUInt();
+ isChanged = true;
+ } else if(itVar.key() == "Language") {
+ m_strLang = varValue.toString();
+ isChanged = true;
+ } else if (itVar.key() == "BackgroundFile") {
+ QString strBackground = varValue.toString();
+ if(!strBackground.isEmpty() && QFile(strBackground).exists() && QFile(strBackground).size()) {
+ m_strBackground = strBackground;
+ isChanged = true;
+ }
+ }
+ }
+ if(m_strFullName.isEmpty()) {
+ m_strFullName = m_strName;
+ }
+ if (isChanged)
+ Q_EMIT userPropChanged(m_strName);
+ }
+}
+
+QDebug operator <<(QDebug stream, const LocalUserInfo &userInfo)
+{
+ stream << "["
+ << userInfo.path()
+ << userInfo.uid()
+ << userInfo.name()
+ << userInfo.fullName()
+ << userInfo.headImage()
+ << userInfo.backGround()
+ << userInfo.isLoggedIn()
+ << userInfo.lang()
+ << "]";
+ return stream;
+}
diff --git a/src/userinfo.h b/src/userinfo.h
index 593858b..f4ec45c 100644
--- a/src/userinfo.h
+++ b/src/userinfo.h
@@ -22,15 +22,15 @@
#include <memory>
#include <QDebug>
-class UserInfo
+class UserInfo : public QObject
{
+ Q_OBJECT
public:
- UserInfo();
- UserInfo(const UserInfo &userInfo);
+ explicit UserInfo(QObject *parent = nullptr);
+ explicit UserInfo(const UserInfo &userInfo);
virtual ~UserInfo();
bool operator==(const UserInfo &userInfo) const;
- UserInfo& operator=(const UserInfo &userInfo);
public:
inline bool isLoggedIn() const { return m_isLoggedIn; }
@@ -41,6 +41,9 @@ public:
inline QString lang() const { return m_strLang; }
inline QString name() const { return m_strName; }
+ virtual inline QString path() const { return QString(); }
+
+public:
void updateLoggedIn(const bool &isLoggedIn);
void updateUid(const uid_t &id);
void updateHeadImage(const QString &path);
@@ -49,6 +52,9 @@ public:
void updateLang(const QString &lang);
void updateName(const QString &name);
+Q_SIGNALS:
+ void userPropChanged(const QString &userName);
+
protected:
bool m_isLoggedIn; // 是否已登录
uid_t m_uId; // 用户 uid
@@ -63,4 +69,32 @@ typedef std::shared_ptr<UserInfo> UserInfoPtr;
QDebug operator <<(QDebug stream, const UserInfo &userInfo);
+class LocalUserInfo : public UserInfo
+{
+ Q_OBJECT
+public:
+ explicit LocalUserInfo(const uid_t &uId, QObject* parent = nullptr);
+ explicit LocalUserInfo(const QString &strPath, QObject* parent = nullptr);
+ explicit LocalUserInfo(const LocalUserInfo &localUser);
+
+ virtual ~LocalUserInfo();
+
+ inline QString path() const override { return m_strPath; }
+
+private:
+ void initData();
+ void initConnections();
+
+private Q_SLOTS:
+ void onPropertiesChanged(const QString&, const QVariantMap&, const QStringList&);
+
+private:
+ QString m_strPath;
+ bool m_propertiesChangedConnected = false;
+};
+
+typedef std::shared_ptr<LocalUserInfo> LocalUserInfoPtr;
+
+QDebug operator <<(QDebug stream, const LocalUserInfo &userInfo);
+
#endif // USERINFO_H
diff --git a/src/widgets/authdialog.cpp b/src/widgets/authdialog.cpp
index ef4c014..108b49f 100644
--- a/src/widgets/authdialog.cpp
+++ b/src/widgets/authdialog.cpp
@@ -17,8 +17,17 @@
#include <sys/types.h>
#include <pwd.h>
#include "../lock-dialog/pam-tally.h"
+#include "global_utils.h"
-AuthDialog::AuthDialog(LockDialogModel *model, UserInfo userInfo, QWidget *parent)
+#define WIDGET_HEIGHT_HEADTIP (40*scale)
+#define WIDGET_HEIGHT_HEADIMAGE (154*scale)
+#define WIDGET_HEIGHT_USERNAME (40*scale)
+#define WIDGET_HEIGHT_PASSWDEDIT (80*scale)
+#define WIDGET_HEIGHT_SPACING (16*scale)
+#define WIDGET_HEIGHT_CUSTOM (WIDGET_HEIGHT_HEADIMAGE+WIDGET_HEIGHT_USERNAME+WIDGET_HEIGHT_PASSWDEDIT+WIDGET_HEIGHT_SPACING*2)
+#define WIDGET_HEIGHT_LOGINOPTS (104*scale)
+
+AuthDialog::AuthDialog(LockDialogModel *model, UserInfoPtr userInfo, QWidget *parent)
: QWidget(parent)
, m_modelLockDialog(model)
, m_isLockingFlg(false)
@@ -33,7 +42,7 @@ void AuthDialog::initUI()
{
QVBoxLayout *mainLayout = new QVBoxLayout(this);
mainLayout->setAlignment(Qt::AlignCenter);
- mainLayout->setSpacing(16);
+ mainLayout->setSpacing(WIDGET_HEIGHT_SPACING);
mainLayout->setContentsMargins(0, 0, 0, 0);
m_curFontSize = m_modelLockDialog->getCurFontSize();
m_ptToPx = m_modelLockDialog->getPtToPx();
@@ -50,12 +59,12 @@ void AuthDialog::initUI()
// 密码输入框
m_editWidget = new QWidget(this);
- //错误信息提示
- m_messageWidget = new QWidget(this);
-
// ukey
m_ukeyPasswdWidget = new QWidget(this);
+ // custom widget
+ m_customWidget = new QWidget(this);
+
// login option
m_widgetLoginOpts = new QWidget(this);
@@ -65,6 +74,7 @@ void AuthDialog::initUI()
mainLayout->addWidget(m_nameWidget);
mainLayout->addWidget(m_editWidget);
mainLayout->addWidget(m_ukeyPasswdWidget);
+ mainLayout->addWidget(m_customWidget);
mainLayout->addWidget(m_widgetLoginOpts);
mainLayout->addStretch();
@@ -73,6 +83,7 @@ void AuthDialog::initUI()
initNameWidget();
initEditWidget();
initUkeyPasswordWidget();
+ initCustomAuthWidget();
initLoginoptionWidget();
initConnections();
@@ -116,31 +127,29 @@ void AuthDialog::resizeEvent(QResizeEvent *event)
void AuthDialog::updateAuthSize()
{
- this->layout()->setSpacing(16*scale);
+ this->layout()->setSpacing(WIDGET_HEIGHT_SPACING);
if (m_tipWidget)
- m_tipWidget->setFixedSize(this->width(), 40*scale);
+ m_tipWidget->setFixedSize(this->width(), WIDGET_HEIGHT_HEADTIP);
if (m_headerWidget)
- m_headerWidget->setFixedSize(this->width(), 154*scale);
+ m_headerWidget->setFixedSize(this->width(), WIDGET_HEIGHT_HEADIMAGE);
if (m_nameWidget)
- m_nameWidget->setFixedSize(this->width(), 40*scale);
+ m_nameWidget->setFixedSize(this->width(), WIDGET_HEIGHT_USERNAME);
if (m_editWidget)
- m_editWidget->setFixedSize(this->width(), 80*scale);
- if (m_messageWidget)
- m_messageWidget->setFixedSize(this->width(), 40*scale);
+ m_editWidget->setFixedSize(this->width(), WIDGET_HEIGHT_PASSWDEDIT);
if (m_ukeyPasswdWidget)
- m_ukeyPasswdWidget->setFixedSize(this->width(), 80*scale);
+ m_ukeyPasswdWidget->setFixedSize(this->width(), WIDGET_HEIGHT_PASSWDEDIT);
if (m_widgetLoginOpts)
- m_widgetLoginOpts->setFixedSize(this->width(), 104*scale);
+ m_widgetLoginOpts->setFixedSize(this->width(), WIDGET_HEIGHT_LOGINOPTS);
if (m_labelLoginTypeTip) {
m_labelLoginTypeTip->setFixedSize(m_tipWidget->size());
m_labelLoginTypeTip->setFontSize((14 + m_curFontSize)*m_ptToPx);
}
if (m_labelHeadImg)
- m_labelHeadImg->setFixedSize(154*scale, 154*scale);
+ m_labelHeadImg->setFixedSize(WIDGET_HEIGHT_HEADIMAGE, WIDGET_HEIGHT_HEADIMAGE);
if (m_labelFace)
- m_labelFace->setFixedSize(154*scale, 154*scale);
+ m_labelFace->setFixedSize(WIDGET_HEIGHT_HEADIMAGE, WIDGET_HEIGHT_HEADIMAGE);
if (m_labelQRCode)
- m_labelQRCode->setFixedSize(154*scale, 154*scale);
+ m_labelQRCode->setFixedSize(WIDGET_HEIGHT_HEADIMAGE, WIDGET_HEIGHT_HEADIMAGE);
if (m_labelQRCodeTip)
m_labelQRCodeTip->setFixedSize(22*scale, 22*scale);
if (m_labelQRCodeMsg) {
@@ -148,7 +157,7 @@ void AuthDialog::updateAuthSize()
m_labelQRCodeMsg->setFontSize((14 + m_curFontSize)*m_ptToPx);
}
if (m_nameLabel) {
- m_nameLabel->setFixedSize(this->width(), 40*scale);
+ m_nameLabel->setFixedSize(this->width(), WIDGET_HEIGHT_USERNAME);
m_nameLabel->setFontSize((24 + m_curFontSize)*m_ptToPx);
}
if (m_passwordEdit) {
@@ -179,8 +188,9 @@ void AuthDialog::updateAuthSize()
}
if (m_tipWidget && bottomListWidget)
m_optionTip->setFixedSize(bottomListWidget->width(), 32*scale);
+ if (m_customWidget)
+ m_customWidget->setFixedSize(width(), WIDGET_HEIGHT_CUSTOM);
updateUI();
-
}
void AuthDialog::initTipWidget()
@@ -324,30 +334,60 @@ void AuthDialog::initLoginoptionWidget()
// btnsLayout->addWidget(bottomListWidget);
// loginoptionLayout->addLayout(btnsLayout);
- m_customWidget = new QWidget(this);
- m_layoutCustom = new QHBoxLayout();
- m_layoutCustom->setSpacing(0);
- m_layoutCustom->setContentsMargins(0,0,0,0);
- m_customWidget->setLayout(m_layoutCustom);
- m_customWidget->hide();
- m_customWidget->setFixedSize(width(), 376+100);
+}
+
+void AuthDialog::initCustomAuthWidget()
+{
+ if (m_customWidget) {
+ m_layoutCustom = new QHBoxLayout(m_customWidget);
+ m_layoutCustom->setSpacing(0);
+ m_layoutCustom->setContentsMargins(0,0,0,0);
+ m_layoutCustom->setAlignment(Qt::AlignVCenter);
+ m_customWidget->hide();
+ }
}
void AuthDialog::updateUI()
{
- QPixmap p(m_curUserInfo.headImage());
+ QPixmap p(m_curUserInfo->headImage());
QPixmap userIcon = scaledPixmap(p);
userIcon = userIcon.scaled(154*scale, 154*scale, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
userIcon = PixmapToRound(userIcon, 77*scale);
m_labelHeadImg->setPixmap(userIcon);
- m_nameLabel->setText(m_curUserInfo.fullName());
+ if (m_curUserInfo->name() == "*login") {
+ m_nameLabel->setText(tr("Login"));
+ } else if (m_curUserInfo->name() == "*guest") {
+ m_nameLabel->setText(tr("Guest"));
+ } else {
+ m_nameLabel->setText(m_curUserInfo->fullName());
+ }
m_fRetryButton->setStyleSheet(QString("QPushButton{border-radius: %1px; border:0px solid white;background-color: rgba(255,255,255,10%);}"
"QPushButton::hover{background-color: rgb(255,255,255,30%);}"
"QPushButton::pressed {background-color: rgba(255,255,255,40%);}").arg((int)(77*scale)));
m_fRetryButton->setFixedSize(154*scale, 154*scale);
m_fRetryButton->setIconSize(QSize(48*scale, 48*scale));
+ qDebug()<<"AuthDialog updateUI:"<<isGreeterMode() << ","<<m_curUserInfo->isLoggedIn();
+ if (!isGreeterMode() && m_curUserInfo->isLoggedIn()) {
+ QPixmap iconLogin = QIcon::fromTheme("system-lock-screen-symbolic").pixmap(12,12);
+ iconLogin = drawSymbolicColoredPixmap(iconLogin, "white");
+ if (m_passwordEdit) {
+ m_passwordEdit->setIcon(iconLogin, iconLogin.size());
+ }
+ if (m_ukeyPasswordEdit) {
+ m_ukeyPasswordEdit->setIcon(iconLogin, iconLogin.size());
+ }
+ } else {
+ QPixmap iconLogin = QIcon::fromTheme("go-next-symbolic").pixmap(20,20);
+ iconLogin = drawSymbolicColoredPixmap(iconLogin, "white");
+ if (m_passwordEdit) {
+ m_passwordEdit->setIcon(iconLogin, iconLogin.size());
+ }
+ if (m_ukeyPasswordEdit) {
+ m_ukeyPasswordEdit->setIcon(iconLogin, iconLogin.size());
+ }
+ }
}
void AuthDialog::startLoadingUkey()
@@ -397,11 +437,12 @@ void AuthDialog::switchLoginOptType(unsigned uLoginOptType, bool faceBtnClicked)
case LOGINOPT_TYPE_PASSWORD:
{
m_editWidget->show();
+ m_headerWidget->show();
+ m_nameWidget->show();
m_labelHeadImg->show();
m_labelQRCode->hide();
m_labelFace->hide();
m_fRetryButton->hide();
- m_nameWidget->show();
m_ukeyPasswdWidget->hide();
m_ukeyPasswordEdit->clearFocus();
m_customWidget->hide();
@@ -411,11 +452,12 @@ void AuthDialog::switchLoginOptType(unsigned uLoginOptType, bool faceBtnClicked)
case LOGINOPT_TYPE_FACE:
{
m_editWidget->show();
+ m_headerWidget->show();
+ m_nameWidget->show();
m_labelHeadImg->hide();
m_labelQRCode->hide();
m_labelFace->show();
m_fRetryButton->hide();
- m_nameWidget->show();
m_ukeyPasswdWidget->hide();
m_ukeyPasswordEdit->clearFocus();
m_customWidget->hide();
@@ -431,8 +473,9 @@ void AuthDialog::switchLoginOptType(unsigned uLoginOptType, bool faceBtnClicked)
case LOGINOPT_TYPE_IRIS:
{
m_editWidget->show();
- m_labelHeadImg->show();
+ m_headerWidget->show();
m_nameWidget->show();
+ m_labelHeadImg->show();
m_labelQRCode->hide();
m_labelFace->hide();
m_fRetryButton->hide();
@@ -445,11 +488,12 @@ void AuthDialog::switchLoginOptType(unsigned uLoginOptType, bool faceBtnClicked)
case LOGINOPT_TYPE_QRCODE:
{
m_editWidget->show();
+ m_headerWidget->show();
+ m_nameWidget->show();
m_labelHeadImg->hide();
setQRCodeMsg("");
m_labelQRCode->show();
m_labelFace->hide();
- m_nameWidget->show();
m_fRetryButton->hide();
m_ukeyPasswdWidget->hide();
m_ukeyPasswordEdit->clearFocus();
@@ -460,8 +504,9 @@ void AuthDialog::switchLoginOptType(unsigned uLoginOptType, bool faceBtnClicked)
case LOGINOPT_TYPE_GENERAL_UKEY:
{
m_editWidget->show();
- m_labelHeadImg->show();
+ m_headerWidget->show();
m_nameWidget->show();
+ m_labelHeadImg->show();
m_labelQRCode->hide();
m_labelFace->hide();
m_fRetryButton->hide();
@@ -476,12 +521,9 @@ void AuthDialog::switchLoginOptType(unsigned uLoginOptType, bool faceBtnClicked)
case LOGINOPT_TYPE_CUSTOM:
{
m_editWidget->hide();
- m_labelHeadImg->hide();
- setQRCodeMsg("");
- m_labelQRCode->hide();
+ m_headerWidget->hide();
m_nameWidget->hide();
- m_labelFace->hide();
- m_fRetryButton->hide();
+ setQRCodeMsg("");
m_ukeyPasswdWidget->hide();
m_ukeyPasswordEdit->clearFocus();
LoginAuthInterface* plugin = m_loginOpts->getCustomLoginAuth();
@@ -509,7 +551,7 @@ void AuthDialog::switchLoginOptType(unsigned uLoginOptType, bool faceBtnClicked)
return;
}
- if (uLoginOptType != m_uCurLoginOptType || (m_deviceInfo && m_deviceInfo->id != m_nLastDeviceId) || m_curUserInfo.name() != m_lastUserName) {
+ if (uLoginOptType != m_uCurLoginOptType || (m_deviceInfo && m_deviceInfo->id != m_nLastDeviceId) || m_curUserInfo->name() != m_lastUserName) {
clearMessage();
switch(uLoginOptType) {
case LOGINOPT_TYPE_PASSWORD:
@@ -570,37 +612,10 @@ void AuthDialog::switchLoginOptType(unsigned uLoginOptType, bool faceBtnClicked)
m_nLastDeviceId = -1;
}
- m_lastUserName = m_curUserInfo.name();
+ m_lastUserName = m_curUserInfo->name();
m_uCurLoginOptType = uLoginOptType;
}
-/**
- * @brief LoginWindow::setFace
- * @param faceFile 用户头像文件
- *
- * 设置用户头像
- */
-void AuthDialog::setFace(const QString& facePath)
-{
- QFile faceFile(facePath);
- QPixmap faceImage;
- m_labelHeadImg->setFixedSize(154,154);
- //如果头像文件不存在,则使用默认头像
- if(faceFile.exists()){
- faceImage.load(facePath);
- }
- else{
- faceImage.load(m_strDefaultFace);
- }
- //faceImage = cutPixmap(faceImage);
- faceImage = faceImage.scaled(154,154, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
- faceImage = PixmapToRound(faceImage,77);
- m_labelHeadImg->setAlignment(Qt::AlignCenter);
- m_labelHeadImg->setPixmap(faceImage);
-
- m_face = facePath;
-}
-
void AuthDialog::setQRCode(QImage& imgQRCode)
{
if (imgQRCode.isNull()) {
@@ -674,7 +689,7 @@ void AuthDialog::onRespondUkey(const QString &text)
{
if (m_loginOpts && m_deviceInfo){
m_loginOpts->SetExtraInfo(text,"pincode");
- m_loginOpts->startAuth(m_deviceInfo, m_curUserInfo.uid());
+ m_loginOpts->startAuth(m_deviceInfo, m_curUserInfo->uid());
}
}
@@ -892,11 +907,11 @@ void AuthDialog::onPamShowPrompt(QString strPrompt, int nType)
void AuthDialog::onPamAuthCompleted()
{
- if (m_curUserInfo.name().isEmpty())
+ if (m_curUserInfo->name().isEmpty())
return ;
m_passwordEdit->stopWaiting();
bool isAuthenticated = (Q_EMIT m_modelLockDialog->pamIsAuthenticated());
- qDebug()<<"onPamAuthCompleted:"<<isAuthenticated<<m_curUserInfo.name();
+ qDebug()<<"onPamAuthCompleted:"<<isAuthenticated<<m_curUserInfo->name();
if(isAuthenticated) {
if((m_bRecvPrompt && !m_bHasUnacknowledgedMsg ) || m_bDirectLogin) {
m_bDirectLogin = false;
@@ -905,12 +920,12 @@ void AuthDialog::onPamAuthCompleted()
m_passwordEdit->readOnly(false);
m_passwordEdit->clear();
clearMessage();
- m_failMap.remove(m_curUserInfo.uid());
+ m_failMap.remove(m_curUserInfo->uid());
setLoginTypeTip("");
setUkeyTypeTip("");
authMode = UNKNOWN;
m_uCurLoginOptType = LOGINOPT_TYPE_PASSWORD;
- Q_EMIT authSucceed(m_curUserInfo.name());
+ Q_EMIT authSucceed(m_curUserInfo->name());
} else {
qDebug()<<"m_bRecvPrompt = "<<m_bRecvPrompt<<" m_bHasUnacknowledgedMsg = "<<m_bHasUnacknowledgedMsg;
@@ -968,17 +983,17 @@ void AuthDialog::onRespond(const QString &strRes)
qInfo()<<"Wait for input passwd!";
return;
}
- if (m_curUserInfo.name().isEmpty()) {
+ if (m_curUserInfo->name().isEmpty()) {
qInfo()<<"No user be selected!!";
return ;
}
m_bHasUnacknowledgedMsg = false;
clearMessage();
- qDebug()<<"onRespond:"<<m_curUserInfo.name();
- if(m_curUserInfo.name() == "*guest"){
- Q_EMIT m_modelLockDialog->pamAuthenticate(m_curUserInfo.name());
- } else if(m_curUserInfo.name() == "*login") { //用户输入用户名
+ qDebug()<<"onRespond:"<<m_curUserInfo->name();
+ if(m_curUserInfo->name() == "*guest"){
+ Q_EMIT m_modelLockDialog->pamAuthenticate(m_curUserInfo->name());
+ } else if(m_curUserInfo->name() == "*login") { //用户输入用户名
m_isManual = true;
m_isNameLogin = true;
@@ -1000,19 +1015,19 @@ void AuthDialog::onRespond(const QString &strRes)
void AuthDialog::startAuth()
{
- if (!m_curUserInfo.name().isEmpty()) {
+ if (!m_curUserInfo->name().isEmpty()) {
m_bRecvPrompt = false;
m_bHasUnacknowledgedMsg = false;
//用户认证
- if(m_curUserInfo.name() == "*guest") { //游客登录
+ if(m_curUserInfo->name() == "*guest") { //游客登录
qDebug() << "guest login";
m_passwordEdit->show();
m_passwordEdit->setPrompt(tr("login"));
- } else if(m_curUserInfo.name() == "*login") { //手动输入用户名
+ } else if(m_curUserInfo->name() == "*login") { //手动输入用户名
Q_EMIT m_modelLockDialog->pamAuthenticate("");
} else {
- qDebug() << "login: " << m_curUserInfo.name();
- Q_EMIT m_modelLockDialog->pamAuthenticate(m_curUserInfo.name());
+ qDebug() << "login: " << m_curUserInfo->name();
+ Q_EMIT m_modelLockDialog->pamAuthenticate(m_curUserInfo->name());
m_passwordEdit->clear();
m_passwordEdit->readOnly(true);
}
@@ -1032,15 +1047,15 @@ void AuthDialog::stopAuth()
clearMessage();
}
-void AuthDialog::onCurUserInfoChanged(const UserInfo &userInfo)
+void AuthDialog::onCurUserInfoChanged(UserInfoPtr userInfo)
{
- if (m_curUserInfo.uid() > -1 && userInfo.uid() == m_curUserInfo.uid()) {
+ if (m_curUserInfo->uid() > -1 && userInfo->uid() == m_curUserInfo->uid()) {
m_curUserInfo = userInfo;
updateUI();
}
}
-void AuthDialog::onCurUserChanged(const UserInfo &userInfo)
+void AuthDialog::onCurUserChanged(UserInfoPtr userInfo)
{
if(m_loginOpts){
m_loginOpts->stopAuth();
@@ -1100,13 +1115,13 @@ void AuthDialog::onMessageButtonClicked()
m_passwordEdit->clear();
clearMessage();
- m_failMap.remove(m_curUserInfo.uid());
+ m_failMap.remove(m_curUserInfo->uid());
setLoginTypeTip("");
setUkeyTypeTip("");
authMode = UNKNOWN;
m_uCurLoginOptType = LOGINOPT_TYPE_PASSWORD;
- Q_EMIT authSucceed(m_curUserInfo.name());
+ Q_EMIT authSucceed(m_curUserInfo->name());
} else {
m_messageButton->hide();
m_messageLabel->setText("");
@@ -1124,14 +1139,14 @@ void AuthDialog::clearMessage()
bool AuthDialog::unlockUserTimer()
{
- if (m_curUserInfo.name().isEmpty())
+ if (m_curUserInfo->name().isEmpty())
return false;
int failed_count = 0;
int time_left = 0;
int deny = 0;
int fail_time =0;
int unlock_time = 0;
- QString curUserName = m_curUserInfo.name();
+ QString curUserName = m_curUserInfo->name();
if (NULL == curUserName.toLatin1().data()) {
qDebug() << "get user info failed." ;
@@ -1236,7 +1251,7 @@ void AuthDialog::pamBioSuccess()
if(m_deviceInfo && m_deviceInfo->deviceType == LOGINOPT_TYPE_GENERAL_UKEY){
//ukey时不调用ukey认证
}else{
- m_loginOpts->startAuth(m_deviceInfo, m_curUserInfo.uid());
+ m_loginOpts->startAuth(m_deviceInfo, m_curUserInfo->uid());
}
if (m_deviceInfo) {
@@ -1349,10 +1364,10 @@ void AuthDialog::performBiometricAuth()
//获取默认设备
if (m_loginOpts) {
- if(m_curUserInfo.name() == "*login")
+ if(m_curUserInfo->name() == "*login")
m_deviceName = m_loginOpts->getDefaultDevice(m_strManualLoginName);
else
- m_deviceName = m_loginOpts->getDefaultDevice(m_curUserInfo.name());
+ m_deviceName = m_loginOpts->getDefaultDevice(m_curUserInfo->name());
if (m_isCustomDefault) { // 认证插件配置默认插件认证
if (m_loginOpts) {
@@ -1387,7 +1402,7 @@ void AuthDialog::performBiometricAuth()
}
//已经错误超过3次
- if(m_failMap.contains(m_curUserInfo.uid()) && m_failMap[m_curUserInfo.uid()][m_deviceInfo->id] >= maxFailedTimes)
+ if(m_failMap.contains(m_curUserInfo->uid()) && m_failMap[m_curUserInfo->uid()][m_deviceInfo->id] >= maxFailedTimes)
{
if (m_deviceInfo->deviceType == UniT_Remote) {
setLoginTypeTip(tr("Failed to verify %1, please enter password to unlock").arg(getDeviceType_tr(m_deviceInfo->deviceType)));
@@ -1424,11 +1439,11 @@ void AuthDialog::skipBiometricAuth()
void AuthDialog::initBiometricWidget()
{
if(m_loginOpts) {
- m_loginOpts->setUser(m_curUserInfo.uid());
+ m_loginOpts->setUser(m_curUserInfo->uid());
} else {
QHBoxLayout *optsLayout = new QHBoxLayout(m_widgetLoginOpts);
optsLayout->setContentsMargins(0,0,0,0);
- m_loginOpts = new LoginOptionsWidget(m_biometricProxy, m_curUserInfo.uid(), m_uniauthService, m_widgetLoginOpts);
+ m_loginOpts = new LoginOptionsWidget(m_biometricProxy, m_curUserInfo->uid(), m_uniauthService, m_widgetLoginOpts);
optsLayout->addWidget(m_loginOpts);
connect(m_loginOpts, &LoginOptionsWidget::authComplete,
this, &AuthDialog::onBiometricAuthComplete);
@@ -1442,7 +1457,7 @@ void AuthDialog::initBiometricWidget()
this, &AuthDialog::onLoginOptsCount);
connect(m_loginOpts, &LoginOptionsWidget::updateAuthMsg,
this, &AuthDialog::setLoginMsg);
- m_loginOpts->setUser(m_curUserInfo.uid());
+ m_loginOpts->setUser(m_curUserInfo->uid());
}
qDebug()<<"OptsCount:"<<m_loginOpts->getLoginOptCount();
@@ -1503,7 +1518,7 @@ void AuthDialog::onLoginOptsCount(unsigned uCount)
}
//获取默认设备
- if(m_curUserInfo.name() == "*login"){
+ if(m_curUserInfo->name() == "*login"){
if(isLoadingUkey){
m_deviceName = m_loginOpts->getDefaultDevice(m_strManualLoginName,UniT_General_Ukey);
}else{
@@ -1511,9 +1526,9 @@ void AuthDialog::onLoginOptsCount(unsigned uCount)
}
} else{
if(isLoadingUkey){
- m_deviceName = m_loginOpts->getDefaultDevice(m_curUserInfo.name(),UniT_General_Ukey);
+ m_deviceName = m_loginOpts->getDefaultDevice(m_curUserInfo->name(),UniT_General_Ukey);
}else{
- m_deviceName = m_loginOpts->getDefaultDevice(m_curUserInfo.name());
+ m_deviceName = m_loginOpts->getDefaultDevice(m_curUserInfo->name());
}
}
@@ -1539,7 +1554,7 @@ void AuthDialog::onLoginOptsCount(unsigned uCount)
}
//已经错误超过3次
- if(m_failMap.contains(m_curUserInfo.uid()) && m_failMap[m_curUserInfo.uid()][m_deviceInfo->id] >= maxFailedTimes)
+ if(m_failMap.contains(m_curUserInfo->uid()) && m_failMap[m_curUserInfo->uid()][m_deviceInfo->id] >= maxFailedTimes)
{
if (m_deviceInfo->deviceType == UniT_Remote) {
setLoginTypeTip(tr("Failed to verify %1, please enter password to unlock").arg(getDeviceType_tr(m_deviceInfo->deviceType)));
@@ -1620,7 +1635,7 @@ void AuthDialog::onDeviceChanged(unsigned uCurLoginOptType, const DeviceInfoPtr
if(deviceInfo)
qDebug() << "device changed: " << *deviceInfo;
- if(deviceInfo && m_failMap[m_curUserInfo.uid()][deviceInfo->id] >= maxFailedTimes){
+ if(deviceInfo && m_failMap[m_curUserInfo->uid()][deviceInfo->id] >= maxFailedTimes){
qDebug() << "Failed MAX!!";
return ;
}
@@ -1670,18 +1685,18 @@ void AuthDialog::onBiometricAuthComplete(bool result, int nStatus)
return;
} else if (nStatus >= 2 && nStatus != 5){
if (m_deviceInfo) {
- if(m_failMap.contains(m_curUserInfo.uid()) && m_failMap[m_curUserInfo.uid()].contains(m_deviceInfo->id)){
- m_failMap[m_curUserInfo.uid()][m_deviceInfo->id] = m_failMap[m_curUserInfo.uid()][m_deviceInfo->id] + 1;
+ if(m_failMap.contains(m_curUserInfo->uid()) && m_failMap[m_curUserInfo->uid()].contains(m_deviceInfo->id)){
+ m_failMap[m_curUserInfo->uid()][m_deviceInfo->id] = m_failMap[m_curUserInfo->uid()][m_deviceInfo->id] + 1;
}else{
- m_failMap[m_curUserInfo.uid()][m_deviceInfo->id] = 1;
+ m_failMap[m_curUserInfo->uid()][m_deviceInfo->id] = 1;
}
- qDebug()<<"Failed count:"<<m_failMap[m_curUserInfo.uid()][m_deviceInfo->id]<<",Max:"<<maxFailedTimes;
+ qDebug()<<"Failed count:"<<m_failMap[m_curUserInfo->uid()][m_deviceInfo->id]<<",Max:"<<maxFailedTimes;
if (m_deviceInfo->deviceType == BioT_Face) {
QImage imgFailed;
setFaceImg(imgFailed, 1);
m_fTimeoutTimes = 0;
}
- if(m_failMap[m_curUserInfo.uid()][m_deviceInfo->id] >= maxFailedTimes){
+ if(m_failMap[m_curUserInfo->uid()][m_deviceInfo->id] >= maxFailedTimes){
if (m_deviceInfo->deviceType == UniT_Remote) {
setLoginTypeTip(tr("Failed to verify %1, please enter password to unlock").arg(getDeviceType_tr(m_deviceInfo->deviceType)));
QImage nullImage;
@@ -1704,11 +1719,11 @@ void AuthDialog::onBiometricAuthComplete(bool result, int nStatus)
if(m_deviceInfo->deviceType == LOGINOPT_TYPE_GENERAL_UKEY){
setUkeyTypeTip(tr("Failed to verify %1, you still have %2 verification opportunities")
.arg(getDeviceType_tr(m_deviceInfo->deviceType))
- .arg(maxFailedTimes-m_failMap[m_curUserInfo.uid()][m_deviceInfo->id]));
+ .arg(maxFailedTimes-m_failMap[m_curUserInfo->uid()][m_deviceInfo->id]));
}else {
setLoginTypeTip(tr("Failed to verify %1, you still have %2 verification opportunities")
.arg(getDeviceType_tr(m_deviceInfo->deviceType))
- .arg(maxFailedTimes-m_failMap[m_curUserInfo.uid()][m_deviceInfo->id]));
+ .arg(maxFailedTimes-m_failMap[m_curUserInfo->uid()][m_deviceInfo->id]));
}
}
}
@@ -1831,10 +1846,10 @@ void AuthDialog::onBiometricDbusChanged(bool bActive)
//获取默认设备
if (m_loginOpts) {
- if(m_curUserInfo.name() == "*login")
+ if(m_curUserInfo->name() == "*login")
m_deviceName = m_loginOpts->getDefaultDevice(m_strManualLoginName);
else
- m_deviceName = m_loginOpts->getDefaultDevice(m_curUserInfo.name());
+ m_deviceName = m_loginOpts->getDefaultDevice(m_curUserInfo->name());
}
qDebug() << m_deviceName;
if (m_deviceInfo) {
@@ -1858,7 +1873,7 @@ void AuthDialog::onBiometricDbusChanged(bool bActive)
}
//已经错误超过3次
- if(m_failMap.contains(m_curUserInfo.uid()) && m_failMap[m_curUserInfo.uid()][m_deviceInfo->id] >= maxFailedTimes) {
+ if(m_failMap.contains(m_curUserInfo->uid()) && m_failMap[m_curUserInfo->uid()][m_deviceInfo->id] >= maxFailedTimes) {
if (m_deviceInfo->deviceType == UniT_Remote) {
setLoginTypeTip(tr("Failed to verify %1, please enter password to unlock").arg(getDeviceType_tr(m_deviceInfo->deviceType)));
} else {
@@ -1951,17 +1966,12 @@ QString AuthDialog::onCustomRequest(QString strReqJson)
if (reqType == "GetInformations") { // 请求信息
QString strType = rootObj.value("Type").toString();
if (strType.contains("CurrentUser")) { // 当前用户信息
- if (m_curUserInfo.uid() >= 0 && !m_curUserInfo.name().isEmpty() && !m_curUserInfo.name().startsWith("*")) {
+ if (m_curUserInfo->uid() >= 0 && !m_curUserInfo->name().isEmpty() && !m_curUserInfo->name().startsWith("*")) {
QJsonObject user;
- user["Name"] = m_curUserInfo.name();
- user["Id"] = (double)(m_curUserInfo.uid());
- QFile faceFile(m_face);
- if (!faceFile.exists()) {
- user["HeadImg"] = m_strDefaultFace;
- } else {
- user["HeadImg"] = m_face;
- }
- user["RealName"] = m_curUserInfo.fullName();
+ user["Name"] = m_curUserInfo->name();
+ user["Id"] = (double)(m_curUserInfo->uid());
+ user["HeadImg"] = m_curUserInfo->headImage();
+ user["RealName"] = m_curUserInfo->fullName();
contentObj["CurrentUser"] = user;
} else {
retObj["Ret"] = -1;
diff --git a/src/widgets/authdialog.h b/src/widgets/authdialog.h
index 9d52775..f8cde66 100644
--- a/src/widgets/authdialog.h
+++ b/src/widgets/authdialog.h
@@ -25,7 +25,7 @@ class AuthDialog : public QWidget
Q_OBJECT
public:
- explicit AuthDialog(LockDialogModel *model, UserInfo userInfo, QWidget *parent = nullptr);
+ explicit AuthDialog(LockDialogModel *model, UserInfoPtr userInfo, QWidget *parent = nullptr);
void initUI();
void switchLoginOptType(unsigned uLoginOptType,bool faceBtnClicked = false);
@@ -33,8 +33,8 @@ public:
public:
void startAuth();
void stopAuth();
- void onCurUserChanged(const UserInfo &userInfo);
- void onCurUserInfoChanged(const UserInfo &userInfo);
+ void onCurUserChanged(UserInfoPtr userInfo);
+ void onCurUserInfoChanged(UserInfoPtr userInfo);
void updateUI();
void updateAuthSize();
@@ -125,6 +125,7 @@ private:
void initMessagerWidget();
void initUkeyPasswordWidget();
void initLoginoptionWidget();
+ void initCustomAuthWidget();
void showAuthenticated(bool successful = true);
void initConnections();
@@ -140,7 +141,6 @@ private:
void restartBioAuth();
void waitBiometricServiceStatus();
QString getDeviceType_tr(int deviceType);
- void setFace(const QString& facePath);
void updatePixmap();
@@ -157,7 +157,6 @@ private:
KLabel *m_nameLabel = nullptr; //用户名
QWidget *m_editWidget = nullptr;
- QWidget *m_messageWidget = nullptr;
IconEdit *m_passwordEdit = nullptr; //密码输入框
KLabel *m_messageLabel = nullptr; //PAM消息显示
QPushButton *m_messageButton = nullptr; //免密登录按钮
@@ -184,7 +183,7 @@ private:
BioButtonListWidget *bottomListWidget = nullptr;
- UserInfo m_curUserInfo;
+ UserInfoPtr m_curUserInfo;
bool m_bRecvPrompt = false;
bool m_bHasUnacknowledgedMsg = false;
bool m_bDirectLogin = false;
diff --git a/src/widgets/batterywidget.cpp b/src/widgets/batterywidget.cpp
index 65db55f..2e838ae 100644
--- a/src/widgets/batterywidget.cpp
+++ b/src/widgets/batterywidget.cpp
@@ -21,6 +21,7 @@
#include <QDebug>
#include <QStyleOption>
#include <QPainter>
+#include <QEvent>
BatteryWidget::BatteryWidget(LockDialogModel *model, QWidget *parent) :
QWidget(parent),
@@ -107,14 +108,14 @@ void BatteryWidget::paintEvent(QPaintEvent *event)
void BatteryWidget::onBatteryChanged(QStringList args)
{
- int battery = args.at(0).toInt();
- int batteryState = args.at(1).toInt();
- if (batteryState == 1 || batteryState == 5) {
+ m_nCurBatteryValue = args.at(0).toInt();
+ m_nCurBatteryState = args.at(1).toInt();
+ if (m_nCurBatteryState == 1 || m_nCurBatteryState == 5) {
mStatusLabel->setText(tr("Charging..."));
- } else if (batteryState == 4) {
+ } else if (m_nCurBatteryState == 4) {
mStatusLabel->setText(tr("fully charged"));
}
- if (batteryState == 4 || batteryState == 1 || batteryState == 5) {
+ if (m_nCurBatteryState == 4 || m_nCurBatteryState == 1 || m_nCurBatteryState == 5) {
mStatusLabel->setVisible(true);
mModeLabel->setText(tr("PowerMode"));
} else {
@@ -122,10 +123,35 @@ void BatteryWidget::onBatteryChanged(QStringList args)
mModeLabel->setText(tr("BatteryMode"));
}
- mValueLabel->setText(QString("<font size='5';font color=#262626>%1</font>%").arg(battery));
+ mValueLabel->setText(QString("<font size='5';font color=#262626>%1</font>%").arg(m_nCurBatteryValue));
}
void BatteryWidget::onBatteryStatusChanged(QString iconName)
{
mIconBtn->setIcon(QIcon::fromTheme(iconName));
}
+
+void BatteryWidget::changeEvent(QEvent *event)
+{
+ if(event->type() == QEvent::LanguageChange){
+ refreshTranslate();
+ }
+}
+
+void BatteryWidget::refreshTranslate()
+{
+ if (m_nCurBatteryState == 1 || m_nCurBatteryState == 5) {
+ mStatusLabel->setText(tr("Charging..."));
+ } else if (m_nCurBatteryState == 4) {
+ mStatusLabel->setText(tr("fully charged"));
+ }
+ if (m_nCurBatteryState == 4 || m_nCurBatteryState == 1 || m_nCurBatteryState == 5) {
+ mStatusLabel->setVisible(true);
+ mModeLabel->setText(tr("PowerMode"));
+ } else {
+ mStatusLabel->setVisible(false);
+ mModeLabel->setText(tr("BatteryMode"));
+ }
+
+ mValueLabel->setText(QString("<font size='5';font color=#262626>%1</font>%").arg(m_nCurBatteryValue));
+}
diff --git a/src/widgets/batterywidget.h b/src/widgets/batterywidget.h
index e1ba432..7d0cc93 100644
--- a/src/widgets/batterywidget.h
+++ b/src/widgets/batterywidget.h
@@ -38,6 +38,7 @@ public:
protected:
void paintEvent(QPaintEvent *event);
+ void changeEvent(QEvent *event);
private:
LockDialogModel *m_modelLockDialog = nullptr;
@@ -46,11 +47,13 @@ private:
QLabel *mValueLabel;
QLabel *mStatusLabel;
QPoint mPoint;
+ int m_nCurBatteryValue;
+ int m_nCurBatteryState;
private Q_SLOTS:
void onBatteryChanged(QStringList args);
void onBatteryStatusChanged(QString iconName);
-
+ void refreshTranslate();
};
#endif // BATTERYWIDGET_H
diff --git a/src/widgets/blockwidget.cpp b/src/widgets/blockwidget.cpp
index 48f3418..581e484 100644
--- a/src/widgets/blockwidget.cpp
+++ b/src/widgets/blockwidget.cpp
@@ -79,6 +79,8 @@ void BlockWidget::setTips(const QString tips)
m_tipLabel->show();
m_listView->hide();
m_tipLabel->setText(tips);
+ m_cancelButton->setText(tr("Cancel"));
+ m_confirmButton->setText(tr("Confrim"));
}
void BlockWidget::setWarning(QStringList list, int type)
@@ -130,5 +132,7 @@ void BlockWidget::setWarning(QStringList list, int type)
"QPushButton:pressed {background: rgba(255, 255, 255, 0.3);border-radius: 8px;}");
sysFont.setPointSize((16 + m_curFontSize) *m_ptToPx);
m_cancelButton->setFont(sysFont);
+ m_cancelButton->setText(tr("Cancel"));
+ m_confirmButton->setText(tr("Confrim"));
}
diff --git a/src/widgets/fullbackgroundwidget.cpp b/src/widgets/fullbackgroundwidget.cpp
index f7c9a8d..9a05e41 100644
--- a/src/widgets/fullbackgroundwidget.cpp
+++ b/src/widgets/fullbackgroundwidget.cpp
@@ -545,6 +545,7 @@ void FullBackgroundWidget::showEvent(QShowEvent *event)
{
if(QX11Info::isPlatformX11())
tryGrabKeyboard();
+ KWindowSystem::setType(this->winId(), NET::ScreenLock);
}
void FullBackgroundWidget::tryGrabKeyboard()
diff --git a/src/widgets/iconedit.cpp b/src/widgets/iconedit.cpp
index d2c4d70..9453bda 100644
--- a/src/widgets/iconedit.cpp
+++ b/src/widgets/iconedit.cpp
@@ -63,12 +63,9 @@ IconEdit::IconEdit(LockDialogModel *model, QWidget *parent)
m_iconButton = new QPushButton(this);
m_iconButton->installEventFilter(this);
- m_iconButton->setFixedSize(24, 24);
- m_iconButton->setIconSize(QSize(24, 24));
+ m_iconButton->setFixedSize(24*scale, 24*scale);
m_iconButton->setProperty("isRoundButton", true);
m_iconButton->setProperty("isImportant", true);
- setIcon(QIcon::fromTheme("go-next-symbolic"));
-
QHBoxLayout *layout = new QHBoxLayout(this);
layout->setContentsMargins(1, 1, 8, 1);
@@ -141,11 +138,12 @@ bool IconEdit::eventFilter(QObject *obj, QEvent *event)
return false;
}
-void IconEdit::setIcon(const QIcon &icon)
+void IconEdit::setIcon(const QIcon &icon, const QSize &size)
{
m_iconButton->setIcon(icon);
m_iconButton->setText("");
- m_iconButton->setIconSize(QSize(24, 24));
+ m_sizeIconBtn = size;
+ m_iconButton->setIconSize(QSize(m_sizeIconBtn.width()*scale, m_sizeIconBtn.height()*scale));
m_icon = icon;
m_iconText = "";
}
@@ -230,7 +228,7 @@ void IconEdit::stopWaiting()
m_edit->setReadOnly(false);
if (!m_icon.isNull()) {
m_iconButton->setIcon(m_icon);
- m_iconButton->setIconSize(QSize(24*scale, 24*scale));
+ m_iconButton->setIconSize(QSize(m_sizeIconBtn.width()*scale, m_sizeIconBtn.height()*scale));
} else {
m_iconButton->setText(m_iconText);
}
diff --git a/src/widgets/iconedit.h b/src/widgets/iconedit.h
index 40be273..4b9cf9d 100644
--- a/src/widgets/iconedit.h
+++ b/src/widgets/iconedit.h
@@ -38,7 +38,7 @@ class IconEdit : public QWidget
public:
IconEdit(LockDialogModel *model,QWidget *parent = 0);
- void setIcon(const QIcon &icon);
+ void setIcon(const QIcon &icon, const QSize &size);
void clear();
void clearText();
void setPrompt(const QString &);
@@ -79,6 +79,7 @@ private:
QTimer *m_timer = nullptr;
QPixmap m_waitingPixmap;
bool m_capsState = false;
+ QSize m_sizeIconBtn;
};
#endif // ICONEDIT_H
diff --git a/src/widgets/lockwidget.cpp b/src/widgets/lockwidget.cpp
index 07ebc6d..1a12a9b 100644
--- a/src/widgets/lockwidget.cpp
+++ b/src/widgets/lockwidget.cpp
@@ -32,6 +32,7 @@
#include "blockwidget.h"
#include "pluginsloader.h"
#include "global_utils.h"
+#include "../lock-dialog/languagesetting.h"
#define BLUR_RADIUS 300
#define RIGHT_MARGIN 24
@@ -45,10 +46,7 @@ LockWidget::LockWidget(LockDialogModel *model, QWidget *parent)
, m_modelLockDialog(model)
{
scale = 1.0;
- UserInfoPtr ptrUser = m_modelLockDialog->findUserByName(m_modelLockDialog->defaultUserName());
- if (ptrUser) {
- m_curUserInfo = *ptrUser;
- }
+ m_curUserInfo = m_modelLockDialog->findUserByName(m_modelLockDialog->defaultUserName());
initUI();
initConnections();
initUsdMediaKeys();
@@ -193,7 +191,7 @@ void LockWidget::resizeEvent(QResizeEvent *event)
m_powerListWidget->move((width() - m_powerListWidget->width())/2, (height() - m_powerListWidget->height())/2 - BOTTOM_MARGIN*scale);
updateBottomButton();
- if (m_curUserInfo.isLoggedIn() && m_sessionButton) {
+ if (m_curUserInfo->isLoggedIn() && m_sessionButton) {
buttonListWidget->setFixedSize(QSize(48*(buttonListWidget->count() - 1) + buttonListWidget->spacing()*2*(buttonListWidget->count() - 1), 64));
} else {
buttonListWidget->setFixedSize(QSize(48*buttonListWidget->count() + buttonListWidget->spacing()*2*buttonListWidget->count(), 64));
@@ -311,6 +309,7 @@ void LockWidget::initConnections()
connect(authDialog, &AuthDialog::customRequestAccount,
this, &LockWidget::onCustomRequestAccount);
}
+ connect(LanguageSetting::instance(this), &LanguageSetting::languageChanged, this, &LockWidget::onLanguageChanged);
}
void LockWidget::initTimeWidget()
{
@@ -329,6 +328,10 @@ void LockWidget::initUserWidget()
connect(m_userListWidget, &UserListWidget::userSelected, m_modelLockDialog, [=](QString strUserName){
SwitchToUser(strUserName);
});
+ connect(m_userListWidget, &UserListWidget::widgetSizeChanged, m_modelLockDialog, [=](){
+ m_userListWidget->move(width() - m_userListWidget->width() - RIGHT_MARGIN,
+ height()- BOTTOM_MARGIN*scale - buttonListWidget->height() - buttonListWidget->spacing()*scale - m_userListWidget->height());
+ });
m_userListWidget->clearFocus();
m_userListWidget->move(width() - m_userListWidget->width() - RIGHT_MARGIN,
height()- BOTTOM_MARGIN*scale - buttonListWidget->height() - buttonListWidget->spacing()*scale - m_userListWidget->height());
@@ -385,7 +388,7 @@ void LockWidget::initButtonWidget()
buttonListWidget->setItemWidget(m_btnItemSession, m_sessionButton);
buttonListWidget->addItem(m_btnItemSession);
m_sessionButton->setObjectName("BtnSession");
- if (m_curUserInfo.isLoggedIn()) {
+ if (m_curUserInfo->isLoggedIn()) {
buttonListWidget->setItemHidden(m_btnItemSession, true);
} else {
buttonListWidget->setItemHidden(m_btnItemSession, false);
@@ -494,7 +497,7 @@ void LockWidget::initButtonWidget()
});
}
- if (m_curUserInfo.isLoggedIn() && m_sessionButton) {
+ if (m_curUserInfo->isLoggedIn() && m_sessionButton) {
buttonListWidget->setFixedSize(QSize(48*(buttonListWidget->count() - 1) + buttonListWidget->spacing()*2*(buttonListWidget->count() - 1), 64));
} else {
buttonListWidget->setFixedSize(QSize(48*buttonListWidget->count() + buttonListWidget->spacing()*2*buttonListWidget->count(), 64));
@@ -642,9 +645,9 @@ void LockWidget::onUsersInfoChanged()
height()- BOTTOM_MARGIN*scale - buttonListWidget->height() - buttonListWidget->spacing()*scale - m_userListWidget->height());
}
}
- UserInfoPtr ptrUser = m_modelLockDialog->findUserByName(m_curUserInfo.name());
+ UserInfoPtr ptrUser = m_modelLockDialog->findUserByName(m_curUserInfo->name());
if (ptrUser) {
- m_curUserInfo = *ptrUser;
+ m_curUserInfo = ptrUser;
if (authDialog) {
authDialog->onCurUserInfoChanged(m_curUserInfo);
}
@@ -654,11 +657,16 @@ void LockWidget::onUsersInfoChanged()
void LockWidget::onCurUserChanged(const QString &strUserName)
{
UserInfoPtr ptrUser = m_modelLockDialog->findUserByName(strUserName);
- if (ptrUser && authDialog) {
- m_curUserInfo = *ptrUser;
- authDialog->onCurUserChanged(m_curUserInfo);
+ if (ptrUser) {
+ m_curUserInfo = ptrUser;
+ qDebug()<<"CurUserInfo:"<<*m_curUserInfo;
+ if (m_curUserInfo->name() != "*login" && m_curUserInfo->name() != "*guest") {
+ LanguageSetting::instance()->onLanguageChanged(m_curUserInfo->lang());
+ }
+ if (authDialog)
+ authDialog->onCurUserChanged(m_curUserInfo);
}
- if (m_btnItemSession && m_curUserInfo.isLoggedIn()) {
+ if (m_btnItemSession && m_curUserInfo->isLoggedIn()) {
buttonListWidget->setItemHidden(m_btnItemSession, true);
} else {
buttonListWidget->setItemHidden(m_btnItemSession, false);
@@ -795,6 +803,7 @@ void LockWidget::onShowNetworkWidget()
m_networkWidget = new MyNetworkWidget(this);
m_networkWidget->installEventFilter(this);
}
+ m_networkWidget->loadNetPlugin();
m_networkWidget->setGeometry(this->width() - m_networkWidget->width() - RIGHT_MARGIN*scale,
this->height() - m_networkWidget->height() - BOTTOM_MARGIN*scale - buttonListWidget->spacing()*scale - buttonListWidget->height(),
m_networkWidget->width(),
@@ -1053,3 +1062,12 @@ void LockWidget::SwitchToUser(QString strUserName)
}
}
}
+
+void LockWidget::onLanguageChanged(bool isCompleted)
+{
+ if (isCompleted) {
+ if (m_networkWidget) {
+ m_networkWidget->unloadNetPlugin();
+ }
+ }
+}
diff --git a/src/widgets/lockwidget.h b/src/widgets/lockwidget.h
index 3fedf26..e7f1db0 100644
--- a/src/widgets/lockwidget.h
+++ b/src/widgets/lockwidget.h
@@ -119,6 +119,8 @@ private Q_SLOTS:
void onSessionActiveChanged(bool isActive);
+ void onLanguageChanged(bool isCompleted);
+
Q_SIGNALS:
void authSucceed(QString strUserName);
@@ -138,7 +140,7 @@ private:
LockDialogModel *m_modelLockDialog = nullptr;
- UserInfo m_curUserInfo;
+ UserInfoPtr m_curUserInfo;
AuthDialog *authDialog = nullptr;
QTimer *m_timerChkActive = nullptr;
diff --git a/src/widgets/mynetworkwidget.cpp b/src/widgets/mynetworkwidget.cpp
index bc1b9fa..ccc447e 100644
--- a/src/widgets/mynetworkwidget.cpp
+++ b/src/widgets/mynetworkwidget.cpp
@@ -16,7 +16,6 @@ MyNetworkWidget::MyNetworkWidget(QWidget *parent) : QWidget(parent)
{
setObjectName("m_networkWidget");
setStyleSheet("#m_networkWidget{background-color: white; border-radius:12px;}");
- loadNetPlugin();
}
void MyNetworkWidget::loadNetPlugin()
diff --git a/src/widgets/mynetworkwidget.h b/src/widgets/mynetworkwidget.h
index 542746f..b9c1b33 100644
--- a/src/widgets/mynetworkwidget.h
+++ b/src/widgets/mynetworkwidget.h
@@ -12,6 +12,9 @@ class MyNetworkWidget : public QWidget
public:
explicit MyNetworkWidget(QWidget *parent = nullptr);
+ void loadNetPlugin();
+ void unloadNetPlugin();
+
private Q_SLOTS:
/**
* @brief 网络窗口有线和无线弹窗切换事件,用于通知网络插件窗口切换
@@ -25,8 +28,6 @@ private Q_SLOTS:
void paintEvent(QPaintEvent *p1);
private:
- void loadNetPlugin();
- void unloadNetPlugin();
void sendNetPluginVisible(bool visible);
QPluginLoader netloader;
diff --git a/src/widgets/powerlistwidget.cpp b/src/widgets/powerlistwidget.cpp
index 7428c33..56fe5e0 100644
--- a/src/widgets/powerlistwidget.cpp
+++ b/src/widgets/powerlistwidget.cpp
@@ -143,3 +143,32 @@ void PowerListWidget::setSystemPowerStatus(QString statusName)
qWarning() << __LINE__ << __FUNCTION__ << statusName;
}
+
+void PowerListWidget::changeEvent(QEvent *event)
+{
+ if(event->type() == QEvent::LanguageChange){
+ refreshTranslate();
+ }
+}
+
+void PowerListWidget::refreshTranslate()
+{
+ for (int i = 0; i < sizeof(powerBtnList)/sizeof(powerBtnList[0]) ; i++)
+ {
+ if (powerBtnList[i].setFuncName == "Hibernate") {
+ powerBtnList[i].m_strName = tr("Hibernate");
+ powerBtnList[i].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");
+ } else if (powerBtnList[i].setFuncName == "Suspend") {
+ powerBtnList[i].m_strName = tr("Suspend");
+ powerBtnList[i].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");
+ } else if (powerBtnList[i].setFuncName == "Reboot") {
+ powerBtnList[i].m_strName = tr("Restart");
+ powerBtnList[i].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");
+ } else if (powerBtnList[i].setFuncName == "PowerOff") {
+ powerBtnList[i].m_strName = tr("Power Off");
+ powerBtnList[i].m_strToolTip = tr("Close all apps, and then shut down your computer");
+ }
+ }
+ onUpdateListInfo();
+}
+
diff --git a/src/widgets/powerlistwidget.h b/src/widgets/powerlistwidget.h
index 7083b74..f8b3f0d 100644
--- a/src/widgets/powerlistwidget.h
+++ b/src/widgets/powerlistwidget.h
@@ -121,6 +121,7 @@ public:
protected:
bool eventFilter(QObject *obj, QEvent *event);
+ void changeEvent(QEvent *event);
Q_SIGNALS:
void mulUsersLogined(QString inhibitType);
@@ -143,6 +144,7 @@ private:
void initUI();
void initBtnShowFlag();
void initConnections();
+ void refreshTranslate();
// void initDBusInterface();
};
diff --git a/src/widgets/sessionlistwidget.cpp b/src/widgets/sessionlistwidget.cpp
index ed3f882..44a8cfe 100644
--- a/src/widgets/sessionlistwidget.cpp
+++ b/src/widgets/sessionlistwidget.cpp
@@ -44,8 +44,6 @@ void SessionListWidget::initConnections()
{
// 响应点击事件
connect(this, &SessionListWidget::itemClicked, this, &SessionListWidget::onListItemClicked);
-
- connect(m_modelLockDialog, &LockDialogModel::usersInfoChanged, this, &SessionListWidget::onUpdateListInfo);
}
void SessionListWidget::onUpdateListInfo()
@@ -66,6 +64,7 @@ void SessionListWidget::onListItemClicked(QListWidgetItem *item)
QWidget *widget = itemWidget(item);
SessionItemWidget *currentItem = qobject_cast<SessionItemWidget *>(widget);
if (currentItem) {
+ this->hide();
Q_EMIT sessionSelected(currentItem->sessionName());
}
}
diff --git a/src/widgets/userlistwidget.cpp b/src/widgets/userlistwidget.cpp
index e4c6c37..7ffa91b 100644
--- a/src/widgets/userlistwidget.cpp
+++ b/src/widgets/userlistwidget.cpp
@@ -42,7 +42,13 @@ void UserListWidget::onUpdateListInfo()
UserItemWidget *itemWidget = new UserItemWidget(this);
QPixmap p(user->headImage());
itemWidget->setUserPixmap(p);
- itemWidget->setUserNickName(user->fullName());
+ if (user->name() == "*login") {
+ itemWidget->setUserNickName(tr("Login"));
+ } else if (user->name() == "*guest") {
+ itemWidget->setUserNickName(tr("Guest"));
+ } else {
+ itemWidget->setUserNickName(user->fullName());
+ }
itemWidget->setUserStatus(user->isLoggedIn());
if (user->fullName() == m_modelLockDialog->currentUserName()) {
setCurrentItem(userItem, QItemSelectionModel::SelectionFlag::SelectCurrent);
@@ -71,4 +77,30 @@ void UserListWidget::updateWidgetSize()
setFixedHeight(count() * 40 + 10);
}
adjustSize();
+ Q_EMIT widgetSizeChanged();
+}
+
+void UserListWidget::changeEvent(QEvent *event)
+{
+ if(event->type() == QEvent::LanguageChange){
+ refreshTranslate();
+ }
+}
+
+void UserListWidget::refreshTranslate()
+{
+ for (int n = 0; n < count(); n++) {
+ QListWidgetItem *widgetItem = item(n);
+ if (widgetItem) {
+ QWidget *widget = itemWidget(widgetItem);
+ UserItemWidget *item = qobject_cast<UserItemWidget *>(widget);
+ if (item) {
+ if (item->getUserName() == "*login") {
+ item->setUserNickName(tr("Login"));
+ } else if (item->getUserName() == "*guest") {
+ item->setUserNickName(tr("Guest"));
+ }
+ }
+ }
+ }
}
diff --git a/src/widgets/userlistwidget.h b/src/widgets/userlistwidget.h
index 596bed6..e8a4254 100644
--- a/src/widgets/userlistwidget.h
+++ b/src/widgets/userlistwidget.h
@@ -22,10 +22,15 @@ public Q_SLOTS:
Q_SIGNALS:
void userSelected(QString strUserName);
+ void widgetSizeChanged();
+
+protected:
+ void changeEvent(QEvent *event);
private:
void initUI();
void initConnections();
+ void refreshTranslate();
private:
LockDialogModel *m_modelLockDialog = nullptr;