@@ -9,13 +9,23 @@ import org.deepin.dcc 1.0
99
1010DccObject {
1111 id: root
12+
13+ // Config path constants
14+ readonly property string cfgGroup: " Hotkey"
15+ readonly property string cfgEnumKey: " EnumerateForwardKeys"
16+ readonly property string cfgTriggerKey: " TriggerKeys"
17+ readonly property string cfgEnum0: cfgGroup + " /" + cfgEnumKey + " /0"
18+ readonly property string cfgEnum1: cfgGroup + " /" + cfgEnumKey + " /1"
19+ readonly property string cfgTrigger0: cfgGroup + " /" + cfgTriggerKey + " /0"
20+ readonly property string cfgTrigger1: cfgGroup + " /" + cfgTriggerKey + " /1"
21+
1222 readonly property var enumKeys: [" Ctrl+Shift" , " Alt+Shift" , " None" ]
1323 readonly property var enumKeysI18n: [" Ctrl+Shift" , " Alt+Shift" , qsTr (" None" )]
1424 readonly property var triggerEnumKeys: [" Shift" , " Ctrl+Space" , " None" ]
1525 readonly property var triggerEnumKeysI18n: [" Shift" , " Ctrl+Space" , qsTr (" None" )]
1626
1727 property var triggerKeys: dccData .fcitx5ConfigProxy .globalConfigOption (
18- " Hotkey " , " TriggerKeys " )
28+ cfgGroup, cfgTriggerKey )
1929 // 改为受控属性,避免等值赋值不触发刷新
2030 property int enumerateForwardKeys: - 1
2131 property int currentTriggerKeys: - 1
@@ -39,11 +49,11 @@ DccObject {
3949
4050 function calculateTriggerKeys (value ) {
4151 // 获取完整的TriggerKeys配置
42- let triggerKeys0 = dccData .fcitx5ConfigProxy .globalConfigOption (" Hotkey " , " TriggerKeys " ).value
52+ let triggerKeys0 = dccData .fcitx5ConfigProxy .globalConfigOption (cfgGroup, cfgTriggerKey ).value
4353 let triggerKeys1 = []
4454 try {
4555 // 尝试获取第二个TriggerKey
46- let triggerKeysObj = dccData .fcitx5ConfigProxy .globalConfigOption (" Hotkey " , " TriggerKeys " )
56+ let triggerKeysObj = dccData .fcitx5ConfigProxy .globalConfigOption (cfgGroup, cfgTriggerKey )
4757 if (triggerKeysObj && triggerKeysObj .hasOwnProperty (" 1" )) {
4858 triggerKeys1 = triggerKeysObj[" 1" ] || []
4959 }
@@ -134,7 +144,7 @@ DccObject {
134144 }
135145 font .pixelSize : D .DTK .fontManager .t8 .pixelSize
136146 onClicked: {
137- dccData .fcitx5ConfigProxy .restoreDefault (" Hotkey " )
147+ dccData .fcitx5ConfigProxy .restoreDefault (cfgGroup )
138148 console .log (" Restore Defaults button clicked" )
139149 }
140150 }
@@ -146,10 +156,10 @@ DccObject {
146156 enumKeysDisplay = [" Ctrl+Shift" , " Alt+Shift" , qsTr (" None" )]
147157 triggerEnumKeysDisplay = [" Shift" , " Ctrl+Space" , qsTr (" None" )]
148158
149- let enumInitOpt = dccData .fcitx5ConfigProxy .globalConfigOption (" Hotkey " , " EnumerateForwardKeys " )
159+ let enumInitOpt = dccData .fcitx5ConfigProxy .globalConfigOption (cfgGroup, cfgEnumKey )
150160 let enumInitVal = enumInitOpt && enumInitOpt .value ? enumInitOpt .value : []
151161 let enumInitIdx = calculateEnumerateForwardKeys (enumInitVal)
152- let triggerInitOpt = dccData .fcitx5ConfigProxy .globalConfigOption (" Hotkey " , " TriggerKeys " )
162+ let triggerInitOpt = dccData .fcitx5ConfigProxy .globalConfigOption (cfgGroup, cfgTriggerKey )
153163 let triggerInitVal = triggerInitOpt && triggerInitOpt .value ? triggerInitOpt .value : []
154164 let triggerInitIdx = calculateTriggerKeys (triggerInitVal)
155165 currentTriggerKeys = triggerInitIdx
@@ -159,8 +169,8 @@ DccObject {
159169 Connections {
160170 target: dccData .fcitx5ConfigProxy
161171 function onRequestConfigFinished () {
162- let fullTriggerKeys = dccData .fcitx5ConfigProxy .globalConfigOption (" Hotkey " , " TriggerKeys " )
163- let enumValue = dccData .fcitx5ConfigProxy .globalConfigOption (" Hotkey " , " EnumerateForwardKeys " ).value
172+ let fullTriggerKeys = dccData .fcitx5ConfigProxy .globalConfigOption (cfgGroup, cfgTriggerKey )
173+ let enumValue = dccData .fcitx5ConfigProxy .globalConfigOption (cfgGroup, cfgEnumKey ).value
164174
165175
166176 let newTriggerIdx = calculateTriggerKeys (fullTriggerKeys .value )
@@ -186,31 +196,30 @@ DccObject {
186196 }
187197 }
188198
199+ // Always returns [binding0, binding1] where each binding is an array.
200+ // binding1 is [""] when no second binding is needed.
189201 function reverseEnumerateForwardKeys (index ) {
190202 if (index < 0 || index >= enumKeys .length ) {
191- return " "
203+ return [[ " " ], [ " " ]]
192204 }
193205 let value = enumKeys[index]
194-
195- if (value === " Ctrl+Shift" ) value = " CTRL_SHIFT"
196- if (value === " Alt+Shift" ) value = " ALT_SHIFT"
197-
198- if (value === " None" ) {
199- return " "
206+
207+ // Ctrl+Shift needs two key bindings to cover both press orders:
208+ // Binding 0: press Ctrl then Shift_L triggers forward switch
209+ // Binding 1: press Ctrl+Shift then Ctrl_L triggers forward switch
210+ // Without both bindings, only one press order works.
211+ if (value === " Ctrl+Shift" ) {
212+ return [[" Control" , " Shift_L" ], [" Control" , " Shift" , " Control_L" ]]
200213 }
201- let parts = value .split (" _" )
202- for (var i = 0 ; i < parts .length ; i++ ) {
203- if (parts .length > 0 ) {
204- parts[i] = parts[i].charAt (0 ).toUpperCase () + parts[i].slice (
205- 1 ).toLowerCase ()
206- }
207- if (parts[i] === " Super" ) {
208- parts[i] = " Meta"
209- } else if (parts[i] === " Shift" ) {
210- parts[i] = " Shift_L"
211- }
214+ if (value === " Alt+Shift" ) {
215+ return [[" Alt" , " Shift_L" ], [" " ]]
216+ }
217+
218+ if (value === " None" ) {
219+ return [[" " ], [" " ]]
212220 }
213- return parts
221+ // Fallback for unknown enum values
222+ return [[value], [" " ]]
214223 }
215224
216225 // Shortcut of scroll IM
@@ -236,7 +245,7 @@ DccObject {
236245 Component .onCompleted : {
237246 if (root .enumerateForwardKeys === - 1 ) {
238247 try {
239- let ev = dccData .fcitx5ConfigProxy .globalConfigOption (" Hotkey " , " EnumerateForwardKeys " ).value || []
248+ let ev = dccData .fcitx5ConfigProxy .globalConfigOption (cfgGroup, cfgEnumKey ).value || []
240249 let eidx = calculateEnumerateForwardKeys (ev)
241250 console .warn (" [QML][page] init enum from backend idx=" , eidx)
242251 root .enumerateForwardKeys = eidx
@@ -248,9 +257,13 @@ DccObject {
248257
249258 // 只在用户激活选择时写回,避免程序化更新触发写回
250259 onActivated: {
260+ let reversed = reverseEnumerateForwardKeys (currentIndex)
261+ dccData .fcitx5ConfigProxy .setValue (
262+ cfgEnum0,
263+ reversed[0 ], true )
251264 dccData .fcitx5ConfigProxy .setValue (
252- " Hotkey/EnumerateForwardKeys/0 " ,
253- reverseEnumerateForwardKeys (currentIndex) , true )
265+ cfgEnum1 ,
266+ reversed[ 1 ] , true )
254267 }
255268 }
256269 }
@@ -287,7 +300,7 @@ DccObject {
287300 " root.trigger=" , root .currentTriggerKeys )
288301 if (root .currentTriggerKeys === - 1 ) {
289302 try {
290- let tv = dccData .fcitx5ConfigProxy .globalConfigOption (" Hotkey " , " TriggerKeys " ).value || []
303+ let tv = dccData .fcitx5ConfigProxy .globalConfigOption (cfgGroup, cfgTriggerKey ).value || []
291304 let tidx = calculateTriggerKeys (tv)
292305 console .warn (" [QML][page] init trigger from backend idx=" , tidx)
293306 root .currentTriggerKeys = tidx
@@ -302,13 +315,13 @@ DccObject {
302315 isUserChanging = true
303316 if (currentIndex === 0 ) {
304317 console .warn (" [QML] write TriggerKeys -> Shift_L + Shift_R" )
305- dccData .fcitx5ConfigProxy .setValue (" Hotkey/TriggerKeys/0 " , [" Shift_L" ], true )
306- dccData .fcitx5ConfigProxy .setValue (" Hotkey/TriggerKeys/1 " , [" Shift_R" ], true )
318+ dccData .fcitx5ConfigProxy .setValue (cfgTrigger0 , [" Shift_L" ], true )
319+ dccData .fcitx5ConfigProxy .setValue (cfgTrigger1 , [" Shift_R" ], true )
307320 } else {
308321 let newKeys = reverseTriggerKeys (currentIndex)
309322 console .warn (" [QML] write TriggerKeys ->" , JSON .stringify (newKeys))
310- dccData .fcitx5ConfigProxy .setValue (" Hotkey/TriggerKeys/0 " , newKeys, true )
311- dccData .fcitx5ConfigProxy .setValue (" Hotkey/TriggerKeys/1 " , [" " ], true )
323+ dccData .fcitx5ConfigProxy .setValue (cfgTrigger0 , newKeys, true )
324+ dccData .fcitx5ConfigProxy .setValue (cfgTrigger1 , [" " ], true )
312325 }
313326 Qt .callLater (() => { isUserChanging = false })
314327 }
0 commit comments