Skip to content

Commit cd49cff

Browse files
committed
feat: Add support to keyboard_layer for making non-selectable
1 parent 26201c4 commit cd49cff

File tree

1 file changed

+15
-3
lines changed

1 file changed

+15
-3
lines changed

src/application/keyboard_layer.rs

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,12 @@ const SCALE: f64 = 64.0;
1818
const MARGIN: f64 = 2.;
1919
const RADIUS: f64 = 4.;
2020

21+
#[derive(Default)]
2122
pub struct KeyboardLayerInner {
2223
page: Cell<Page>,
2324
keys: OnceCell<Rc<[Key]>>,
2425
selected: Cell<Option<usize>>,
26+
selectable: Cell<bool>,
2527
}
2628

2729
impl ObjectSubclass for KeyboardLayerInner {
@@ -38,9 +40,8 @@ impl ObjectSubclass for KeyboardLayerInner {
3840

3941
fn new() -> Self {
4042
Self {
41-
page: Cell::new(Page::Layer1),
42-
keys: OnceCell::new(),
43-
selected: Cell::new(None),
43+
selectable: Cell::new(true),
44+
..Self::default()
4445
}
4546
}
4647
}
@@ -143,6 +144,10 @@ impl WidgetImpl for KeyboardLayerInner {
143144
fn button_press_event(&self, widget: &KeyboardLayer, evt: &gdk::EventButton) -> Inhibit {
144145
self.parent_button_press_event(widget, evt);
145146

147+
if !self.selectable.get() {
148+
return Inhibit(false);
149+
}
150+
146151
let pos = evt.get_position();
147152
for (i, k) in widget.keys().iter().enumerate() {
148153
let x = (k.physical.x * SCALE) + MARGIN;
@@ -208,4 +213,11 @@ impl KeyboardLayer {
208213
self.queue_draw();
209214
self.notify("selected");
210215
}
216+
217+
pub fn set_selectable(&self, selectable: bool) {
218+
self.inner().selectable.set(selectable);
219+
if !selectable {
220+
self.set_selected(None);
221+
}
222+
}
211223
}

0 commit comments

Comments
 (0)