From 362b0c729ce9c8523cf21a7eae8620d03680e218 Mon Sep 17 00:00:00 2001 From: Mae PUGIN <48982737+mornepousse@users.noreply.github.com> Date: Tue, 7 Apr 2026 09:20:54 +0200 Subject: [PATCH] fix: Combo key picker and TD buttons visibility - Combo picker: pass key index directly instead of relying on selected_key_index - TD actions: use DarkButton for consistent visibility - Combo Add: validation message when keys not picked Co-Authored-By: Claude Opus 4.6 (1M context) --- src/main.rs | 34 ++++++++++++++------------------ ui/components/key_selector.slint | 5 ++--- ui/tabs/tab_advanced.slint | 32 ++++++++++++------------------ 3 files changed, 30 insertions(+), 41 deletions(-) diff --git a/src/main.rs b/src/main.rs index c720f4c..3963b7d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -705,25 +705,21 @@ fn main() { adv.set_new_leader_result_name(name); } "combo-key1" | "combo-key2" => { - // For combo key picking, the user clicked on the keyboard view. - // The selected key index tells us which physical key was clicked. - let key_idx = w.global::().get_selected_key_index(); - if key_idx >= 0 { - let keys = keys_arc.borrow(); - let idx = key_idx as usize; - if idx < keys.len() { - let kp = &keys[idx]; - let adv = w.global::(); - let label = SharedString::from(format!("R{}C{}", kp.row, kp.col)); - if target.as_str() == "combo-key1" { - adv.set_new_combo_r1(kp.row as i32); - adv.set_new_combo_c1(kp.col as i32); - adv.set_new_combo_key1_name(label); - } else { - adv.set_new_combo_r2(kp.row as i32); - adv.set_new_combo_c2(kp.col as i32); - adv.set_new_combo_key2_name(label); - } + // code = key index from the mini keyboard in the popup + let keys = keys_arc.borrow(); + let idx = code as usize; + if idx < keys.len() { + let kp = &keys[idx]; + let adv = w.global::(); + let label = SharedString::from(format!("R{}C{}", kp.row, kp.col)); + if target.as_str() == "combo-key1" { + adv.set_new_combo_r1(kp.row as i32); + adv.set_new_combo_c1(kp.col as i32); + adv.set_new_combo_key1_name(label); + } else { + adv.set_new_combo_r2(kp.row as i32); + adv.set_new_combo_c2(kp.col as i32); + adv.set_new_combo_key2_name(label); } } } diff --git a/ui/components/key_selector.slint b/ui/components/key_selector.slint index 9f76b0e..48a2b09 100644 --- a/ui/components/key_selector.slint +++ b/ui/components/key_selector.slint @@ -132,9 +132,8 @@ export component KeySelector inherits Rectangle { scale: parent.kb-scale; data: keycap; clicked(key-index) => { - KeymapBridge.select-key(key-index); - // The dispatch in main.rs handles combo-key1/combo-key2 - KeySelectorBridge.select-keycode(0); // trigger dispatch + // Pass key index as the code — dispatch reads keys_arc[code] for row/col + KeySelectorBridge.select-keycode(key-index); KeymapBridge.key-selector-open = false; } } diff --git a/ui/tabs/tab_advanced.slint b/ui/tabs/tab_advanced.slint index 0758397..38a0e4b 100644 --- a/ui/tabs/tab_advanced.slint +++ b/ui/tabs/tab_advanced.slint @@ -94,28 +94,22 @@ export component TabAdvanced inherits Rectangle { for td in AdvancedBridge.tap-dances : Rectangle { background: Theme.bg-primary; border-radius: 4px; - height: 30px; + HorizontalLayout { - padding-left: 8px; padding-right: 8px; spacing: 4px; + padding: 4px; + padding-left: 8px; + spacing: 4px; + alignment: start; + Text { text: "TD" + td.index; color: Theme.accent-purple; font-size: 11px; vertical-alignment: center; width: 35px; } - for action[a-idx] in td.actions : Rectangle { - width: 60px; - height: 24px; - border-radius: 3px; - background: td-action-ta.has-hover ? Theme.button-hover : Theme.button-bg; - border-width: 1px; - border-color: Theme.button-border; - Text { text: action.name; color: Theme.fg-primary; font-size: 10px; horizontal-alignment: center; vertical-alignment: center; } - - td-action-ta := TouchArea { - clicked => { - AdvancedBridge.editing-td-index = td.index; - AdvancedBridge.editing-td-slot = a-idx; - KeymapBridge.selector-target = "td-action"; - KeymapBridge.key-selector-open = true; - } - mouse-cursor: pointer; + for action[a-idx] in td.actions : DarkButton { + text: action.name; + clicked => { + AdvancedBridge.editing-td-index = td.index; + AdvancedBridge.editing-td-slot = a-idx; + KeymapBridge.selector-target = "td-action"; + KeymapBridge.key-selector-open = true; } } }