Skip to content

Commit 50853a3

Browse files
committed
feat: Initial support for per-key disabling
1 parent af142b6 commit 50853a3

File tree

3 files changed

+35
-5
lines changed

3 files changed

+35
-5
lines changed

backend/src/key.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ impl Key {
9898
let mut led_color = None;
9999
if board.layout().meta.has_mode && leds.len() > 0 {
100100
match board.daemon().color(board.board(), leds[0]) {
101+
Ok((0, 0, 0)) => {}
101102
Ok((r, g, b)) => led_color = Some(Rgb::new(r, g, b).to_hs_lossy()),
102103
Err(err) => error!("error getting key color: {}", err),
103104
}
@@ -132,13 +133,13 @@ impl Key {
132133
self.led_color.get()
133134
}
134135

135-
pub fn set_color(&self, color: Hs) -> Result<(), String> {
136+
pub fn set_color(&self, color: Option<Hs>) -> Result<(), String> {
136137
let board = self.board();
137-
let Rgb { r, g, b } = color.to_rgb();
138+
let Rgb { r, g, b } = color.map_or(Rgb::new(0, 0, 0), Hs::to_rgb);
138139
for index in &self.leds {
139140
board.daemon().set_color(board.board(), *index, (r, g, b))?;
140141
}
141-
self.led_color.set(Some(color));
142+
self.led_color.set(color);
142143
board.set_leds_changed();
143144
Ok(())
144145
}

src/application/backlight.rs

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ use backend::{DaemonBoard, Hs, Mode};
1111
#[derive(Default)]
1212
pub struct BacklightInner {
1313
board: DerefCell<DaemonBoard>,
14+
disable_color_button: DerefCell<gtk::Button>,
1415
keyboard_color: DerefCell<KeyboardColor>,
1516
color_row: DerefCell<gtk::ListBoxRow>,
1617
brightness_scale: DerefCell<gtk::Scale>,
@@ -109,10 +110,22 @@ impl ObjectImpl for BacklightInner {
109110
}
110111
}
111112

113+
let disable_color_button = cascade! {
114+
gtk::Button::with_label("Disable");
115+
..connect_clicked(clone!(@weak obj => move |_| obj.disable_color_clicked()));
116+
};
117+
112118
let mode_row = row("Layer Color Pattern:", &mode_combobox);
113119
let speed_row = row("Layer Animation Speed:", &speed_scale);
114120
let saturation_row = row("Layer Saturation:", &saturation_scale);
115-
let color_row = row("Layer Color:", &keyboard_color);
121+
let color_row = row(
122+
"Layer Color:",
123+
&cascade! {
124+
gtk::Box::new(gtk::Orientation::Horizontal, 8);
125+
..add(&disable_color_button);
126+
..add(&keyboard_color);
127+
},
128+
);
116129

117130
cascade! {
118131
obj;
@@ -127,6 +140,7 @@ impl ObjectImpl for BacklightInner {
127140
});
128141
};
129142

143+
self.disable_color_button.set(disable_color_button);
130144
self.keyboard_color.set(keyboard_color);
131145
self.color_row.set(color_row);
132146
self.brightness_scale.set(brightness_scale);
@@ -279,6 +293,9 @@ impl Backlight {
279293
.keyboard_color
280294
.set_index(KeyboardColorIndex::Layer(self.inner().layer.get()));
281295
}
296+
self.inner()
297+
.disable_color_button
298+
.set_visible(self.mode().is_per_key());
282299
self.invalidate_filter();
283300

284301
if self.inner().do_not_set.get() {
@@ -339,6 +356,18 @@ impl Backlight {
339356
self.inner()
340357
.keyboard_color
341358
.set_sensitive(!selected.is_empty());
359+
self.inner()
360+
.disable_color_button
361+
.set_sensitive(!selected.is_empty());
362+
}
363+
364+
fn disable_color_clicked(&self) {
365+
let keys = self.board().keys();
366+
for i in self.inner().selected.borrow().iter() {
367+
if let Err(err) = keys[*i].set_color(None) {
368+
error!("Failed to disable key: {}", err);
369+
}
370+
}
342371
}
343372

344373
fn led_save(&self) {

src/keyboard_color.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@ impl KeyboardColor {
161161
let res = match &*self.index() {
162162
KeyboardColorIndex::Keys(keys) => (|| {
163163
for i in keys.iter() {
164-
board.keys()[*i as usize].set_color(hs)?;
164+
board.keys()[*i as usize].set_color(Some(hs))?;
165165
}
166166
Ok(())
167167
})(),

0 commit comments

Comments
 (0)