Skip to content

Commit 330eed2

Browse files
committed
improv: Make more use of DerefCell
1 parent 85a0c5b commit 330eed2

File tree

3 files changed

+15
-16
lines changed

3 files changed

+15
-16
lines changed

src/application/keyboard_layer.rs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,8 @@ use std::{
88
f64::consts::PI,
99
rc::Rc,
1010
};
11-
use once_cell::unsync::OnceCell;
1211

13-
use crate::Rgb;
12+
use crate::{DerefCell, Rgb};
1413
use super::{Key, Page};
1514

1615
const SCALE: f64 = 64.0;
@@ -20,7 +19,7 @@ const RADIUS: f64 = 4.;
2019
#[derive(Default)]
2120
pub struct KeyboardLayerInner {
2221
page: Cell<Page>,
23-
keys: OnceCell<Rc<[Key]>>,
22+
keys: DerefCell<Rc<[Key]>>,
2423
selected: Cell<Option<usize>>,
2524
selectable: Cell<bool>,
2625
}
@@ -186,7 +185,7 @@ impl KeyboardLayer {
186185
obj.set_size_request(width, height);
187186

188187
obj.inner().page.set(page);
189-
obj.inner().keys.set(keys).unwrap();
188+
obj.inner().keys.set(keys);
190189

191190
obj
192191
}
@@ -200,7 +199,7 @@ impl KeyboardLayer {
200199
}
201200

202201
pub fn keys(&self) -> &[Key] {
203-
self.inner().keys.get().unwrap()
202+
&self.inner().keys
204203
}
205204

206205
pub fn selected(&self) -> Option<usize> {

src/application/mod.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ use cascade::cascade;
22
use glib::subclass;
33
use gtk::prelude::*;
44
use gtk::subclass::prelude::*;
5-
use once_cell::unsync::OnceCell;
65

76
mod about_dialog;
87
mod error_dialog;
@@ -16,6 +15,8 @@ mod picker;
1615
mod rect;
1716
mod shortcuts_window;
1817

18+
use crate::DerefCell;
19+
1920
use self::{
2021
error_dialog::*,
2122
key::*,
@@ -29,8 +30,9 @@ use self::{
2930
shortcuts_window::*,
3031
};
3132

33+
#[derive(Default)]
3234
pub struct ConfiguratorAppInner {
33-
phony_board_names: OnceCell<Vec<String>>,
35+
phony_board_names: DerefCell<Vec<String>>,
3436
}
3537

3638
impl ObjectSubclass for ConfiguratorAppInner {
@@ -46,9 +48,7 @@ impl ObjectSubclass for ConfiguratorAppInner {
4648
glib::object_subclass!();
4749

4850
fn new() -> Self {
49-
Self {
50-
phony_board_names: OnceCell::new(),
51-
}
51+
Self::default()
5252
}
5353
}
5454

@@ -76,7 +76,7 @@ impl ApplicationImpl for ConfiguratorAppInner {
7676
vec![]
7777
};
7878

79-
let _ = self.phony_board_names.set(board_names);
79+
self.phony_board_names.set(board_names);
8080
-1
8181
}
8282

@@ -105,7 +105,7 @@ impl ApplicationImpl for ConfiguratorAppInner {
105105
eprintln!("Focusing current window");
106106
window.present();
107107
} else {
108-
let phony_board_names = self.phony_board_names.get().unwrap();
108+
let phony_board_names = &*self.phony_board_names;
109109
let window = MainWindow::new(phony_board_names.clone());
110110
app.add_window(&window);
111111
}

src/keyboard_color_button.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,13 @@ use glib::clone;
33
use glib::subclass;
44
use gtk::prelude::*;
55
use gtk::subclass::prelude::*;
6-
use once_cell::unsync::OnceCell;
76
use std::{cell::{Cell, RefCell}, iter};
87

98
use crate::{
109
choose_color,
1110
ColorCircle,
1211
DaemonBoard,
12+
DerefCell,
1313
Rgb,
1414
};
1515

@@ -29,7 +29,7 @@ pub struct KeyboardColorButtonInner {
2929
edit_button: TemplateChild<gtk::Button>,
3030
#[template_child]
3131
popover: TemplateChild<gtk::Popover>,
32-
board: OnceCell<DaemonBoard>,
32+
board: DerefCell<DaemonBoard>,
3333
rgb: Cell<Rgb>,
3434
}
3535

@@ -135,7 +135,7 @@ impl KeyboardColorButton {
135135
Rgb::new(0, 0, 0)
136136
}
137137
});
138-
let _ = keyboard_color_button.inner().board.set(board);
138+
keyboard_color_button.inner().board.set(board);
139139

140140
// TODO: Signal handler for color change?
141141

@@ -252,7 +252,7 @@ impl KeyboardColorButton {
252252
}
253253

254254
fn board(&self) -> &DaemonBoard {
255-
self.inner().board.get().unwrap()
255+
&self.inner().board
256256
}
257257

258258
fn set_rgb(&self, rgb: Rgb) {

0 commit comments

Comments
 (0)