Skip to content

Commit b15651d

Browse files
ids1024jackpot51
authored andcommitted
feat: Command line argument for keyboards to fake
1 parent 272806d commit b15651d

File tree

1 file changed

+30
-7
lines changed

1 file changed

+30
-7
lines changed

src/application/mod.rs

Lines changed: 30 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ pub struct ConfiguratorAppInner {
2525
board_dropdown: gtk::ComboBoxText,
2626
count: AtomicUsize,
2727
picker: Picker,
28+
phony_board_names: OnceCell<Vec<String>>,
2829
scrolled_window: gtk::ScrolledWindow,
2930
stack: gtk::Stack,
3031
window: OnceCell<gtk::ApplicationWindow>,
@@ -78,6 +79,7 @@ impl ObjectSubclass for ConfiguratorAppInner {
7879
board_dropdown,
7980
count: AtomicUsize::new(0),
8081
picker,
82+
phony_board_names: OnceCell::new(),
8183
scrolled_window,
8284
stack,
8385
window: OnceCell::new(),
@@ -93,10 +95,28 @@ impl ObjectImpl for ConfiguratorAppInner {
9395

9496
let app: &ConfiguratorApp = obj.downcast_ref().unwrap();
9597
app.set_application_id(Some("com.system76.keyboard-layout"));
98+
app.add_main_option("fake-keyboard", glib::Char::new('k').unwrap(), glib::OptionFlags::NONE, glib::OptionArg::String, "", None);
9699
}
97100
}
98101

99102
impl ApplicationImpl for ConfiguratorAppInner {
103+
fn handle_local_options(&self, _app: &gio::Application, opts: &glib::VariantDict) -> i32 {
104+
let board_names = if let Some(opt) = opts.lookup_value("fake-keyboard", None) {
105+
let value: String = opt.get().unwrap();
106+
107+
if &value == "all" {
108+
layout::layouts().iter().map(|s| s.to_string()).collect()
109+
} else {
110+
value.split(',').map(str::to_string).collect()
111+
}
112+
} else {
113+
vec![]
114+
};
115+
116+
let _ = self.phony_board_names.set(board_names);
117+
-1
118+
}
119+
100120
fn activate(&self, app: &gio::Application) {
101121
let app: &ConfiguratorApp = app.downcast_ref().unwrap();
102122

@@ -110,7 +130,7 @@ impl ApplicationImpl for ConfiguratorAppInner {
110130
..set_title("Keyboard Layout");
111131
..set_position(gtk::WindowPosition::Center);
112132
..set_default_size(1024, 768);
113-
..add(&app.inner().scrolled_window);
133+
..add(&self.scrolled_window);
114134
};
115135

116136
window.set_focus::<gtk::Widget>(None);
@@ -120,7 +140,7 @@ impl ApplicationImpl for ConfiguratorAppInner {
120140
eprintln!("Window close");
121141
});
122142

123-
let _ = app.inner().window.set(window);
143+
let _ = self.window.set(window);
124144

125145
let daemon = daemon();
126146
let boards = daemon.boards().expect("Failed to load boards");
@@ -129,16 +149,19 @@ impl ApplicationImpl for ConfiguratorAppInner {
129149
app.add_keyboard(daemon.clone(), board, i);
130150
}
131151

132-
if app.inner().count.load(Ordering::Relaxed) == 0 {
133-
eprintln!("Failed to locate any keyboards, showing demo");
134-
135-
let board_names = layout::layouts().iter().map(|s| s.to_string()).collect();
136-
let daemon = Rc::new(DaemonDummy::new(board_names));
152+
let phony_board_names = self.phony_board_names.get().unwrap();
153+
if !phony_board_names.is_empty() {
154+
let daemon = Rc::new(DaemonDummy::new(phony_board_names.clone()));
137155
let boards = daemon.boards().unwrap();
138156

139157
for (i, board) in boards.iter().enumerate() {
140158
app.add_keyboard(daemon.clone(), board, i);
141159
}
160+
} else if self.count.load(Ordering::Relaxed) == 0 {
161+
eprintln!("Failed to locate any keyboards, showing demo");
162+
163+
let daemon = Rc::new(DaemonDummy::new(vec!["system76/launch_alpha_2".to_string()]));
164+
app.add_keyboard(daemon, "system76/launch_alpha_2", 0);
142165
}
143166
}
144167
}

0 commit comments

Comments
 (0)