@@ -8,18 +8,17 @@ import org.deepin.dtk 1.0 as D
88import org.deepin.dcc 1.0
99
1010DccObject {
11+ id: root
1112 readonly property var enumKeys: [" Ctrl+Shift" , " Alt+Shift" , " None" ]
1213 readonly property var enumKeysI18n: [" Ctrl+Shift" , " Alt+Shift" , qsTr (" None" )]
1314 readonly property var triggerEnumKeys: [" Shift" , " Ctrl+Space" , " None" ]
1415 readonly property var triggerEnumKeysI18n: [" Shift" , " Ctrl+Space" , qsTr (" None" )]
1516
1617 property var triggerKeys: dccData .fcitx5ConfigProxy .globalConfigOption (
1718 " Hotkey" , " TriggerKeys" )
18- property int enumerateForwardKeys: calculateEnumerateForwardKeys (
19- dccData .fcitx5ConfigProxy .globalConfigOption (
20- " Hotkey" ,
21- " EnumerateForwardKeys" ).value )
22- property int currentTriggerKeys: calculateTriggerKeys (triggerKeys .value )
19+ // 改为受控属性,避免等值赋值不触发刷新
20+ property int enumerateForwardKeys: - 1
21+ property int currentTriggerKeys: - 1
2322 property bool isUserChanging: false
2423
2524 function calculateEnumerateForwardKeys (value ) {
@@ -150,19 +149,45 @@ DccObject {
150149 // 设置翻译后的显示数组
151150 enumKeysDisplay = [" Ctrl+Shift" , " Alt+Shift" , qsTr (" None" )]
152151 triggerEnumKeysDisplay = [" Shift" , " Ctrl+Space" , qsTr (" None" )]
153-
154- dccData .fcitx5ConfigProxy .onRequestConfigFinished .connect (() => {
155-
156- let fullTriggerKeys = dccData .fcitx5ConfigProxy .globalConfigOption (" Hotkey" , " TriggerKeys" )
157-
158- if (! isUserChanging) {
159- triggerKeys = fullTriggerKeys
160- console .warn (" Updated triggerKeys:" , triggerKeys .value )
161- } else {
162- console .warn (" Skipping config update - user is changing" )
163- }
164- enumerateForwardKeys = calculateEnumerateForwardKeys (dccData .fcitx5ConfigProxy .globalConfigOption (" Hotkey" , " EnumerateForwardKeys" ).value )
165- })
152+
153+ let enumInitOpt = dccData .fcitx5ConfigProxy .globalConfigOption (" Hotkey" , " EnumerateForwardKeys" )
154+ let enumInitVal = enumInitOpt && enumInitOpt .value ? enumInitOpt .value : []
155+ let enumInitIdx = calculateEnumerateForwardKeys (enumInitVal)
156+ let triggerInitOpt = dccData .fcitx5ConfigProxy .globalConfigOption (" Hotkey" , " TriggerKeys" )
157+ let triggerInitVal = triggerInitOpt && triggerInitOpt .value ? triggerInitOpt .value : []
158+ let triggerInitIdx = calculateTriggerKeys (triggerInitVal)
159+ currentTriggerKeys = triggerInitIdx
160+ }
161+
162+ // 使用 Connections 绑定信号,确保对象替换/重载后仍能收到
163+ Connections {
164+ target: dccData .fcitx5ConfigProxy
165+ function onRequestConfigFinished () {
166+ let fullTriggerKeys = dccData .fcitx5ConfigProxy .globalConfigOption (" Hotkey" , " TriggerKeys" )
167+ let enumValue = dccData .fcitx5ConfigProxy .globalConfigOption (" Hotkey" , " EnumerateForwardKeys" ).value
168+
169+
170+ let newTriggerIdx = calculateTriggerKeys (fullTriggerKeys .value )
171+ if (! isUserChanging) {
172+ triggerKeys = fullTriggerKeys
173+ if (currentTriggerKeys === newTriggerIdx) {
174+ currentTriggerKeys = - 1
175+ Qt .callLater (() => { currentTriggerKeys = newTriggerIdx })
176+ } else {
177+ currentTriggerKeys = newTriggerIdx
178+ }
179+ } else {
180+ console .warn (" [QML] Skipping set triggerKeys (user changing)" )
181+ }
182+
183+ const idxEnum = calculateEnumerateForwardKeys (enumValue)
184+ if (enumerateForwardKeys === idxEnum) {
185+ enumerateForwardKeys = - 1
186+ Qt .callLater (() => { enumerateForwardKeys = idxEnum })
187+ } else {
188+ enumerateForwardKeys = idxEnum
189+ }
190+ }
166191 }
167192
168193 function reverseEnumerateForwardKeys (index ) {
@@ -205,10 +230,23 @@ DccObject {
205230 flat: true
206231 model: enumKeysI18n
207232 currentIndex: enumerateForwardKeys
233+ // 恢复默认 delegate,由主题负责显示选中项勾号
234+
235+ Component .onCompleted : {
236+ if (root .enumerateForwardKeys === - 1 ) {
237+ try {
238+ let ev = dccData .fcitx5ConfigProxy .globalConfigOption (" Hotkey" , " EnumerateForwardKeys" ).value || []
239+ let eidx = calculateEnumerateForwardKeys (ev)
240+ console .warn (" [QML][page] init enum from backend idx=" , eidx)
241+ root .enumerateForwardKeys = eidx
242+ } catch (e) {
243+ console .warn (" [QML][page] init enum failed:" , e)
244+ }
245+ }
246+ }
208247
209- onCurrentIndexChanged: {
210- console .log (" Current index changed to:" , currentIndex,
211- " with text:" , model[currentIndex])
248+ // 只在用户激活选择时写回,避免程序化更新触发写回
249+ onActivated: {
212250 dccData .fcitx5ConfigProxy .setValue (
213251 " Hotkey/EnumerateForwardKeys/0" ,
214252 reverseEnumerateForwardKeys (currentIndex), true )
@@ -236,22 +274,37 @@ DccObject {
236274 model: triggerEnumKeysI18n
237275 currentIndex: currentTriggerKeys
238276
277+ // 恢复默认 delegate,由主题负责显示选中项勾号
278+
279+ Component .onCompleted : {
280+ console .warn (" [QML][page] trigger ComboBox created: idx=" , triggerComboBox .currentIndex ,
281+ " root.trigger=" , root .currentTriggerKeys )
282+ if (root .currentTriggerKeys === - 1 ) {
283+ try {
284+ let tv = dccData .fcitx5ConfigProxy .globalConfigOption (" Hotkey" , " TriggerKeys" ).value || []
285+ let tidx = calculateTriggerKeys (tv)
286+ console .warn (" [QML][page] init trigger from backend idx=" , tidx)
287+ root .currentTriggerKeys = tidx
288+ } catch (e) {
289+ console .warn (" [QML][page] init trigger failed:" , e)
290+ }
291+ }
292+ }
293+
239294 onCurrentIndexChanged: {
295+ console .warn (" [QML] trigger onCurrentIndexChanged idx=" , currentIndex, " text=" , model[currentIndex])
240296 isUserChanging = true
241-
242297 if (currentIndex === 0 ) {
243- // Shift选项:分别设置左右Shift
298+ console . warn ( " [QML] write TriggerKeys -> Shift_L + Shift_R " )
244299 dccData .fcitx5ConfigProxy .setValue (" Hotkey/TriggerKeys/0" , [" Shift_L" ], true )
245300 dccData .fcitx5ConfigProxy .setValue (" Hotkey/TriggerKeys/1" , [" Shift_R" ], true )
246301 } else {
247302 let newKeys = reverseTriggerKeys (currentIndex)
303+ console .warn (" [QML] write TriggerKeys ->" , JSON .stringify (newKeys))
248304 dccData .fcitx5ConfigProxy .setValue (" Hotkey/TriggerKeys/0" , newKeys, true )
249305 dccData .fcitx5ConfigProxy .setValue (" Hotkey/TriggerKeys/1" , [" " ], true )
250306 }
251-
252- Qt .callLater (() => {
253- isUserChanging = false
254- })
307+ Qt .callLater (() => { isUserChanging = false })
255308 }
256309 }
257310 }
0 commit comments