@@ -25,6 +25,7 @@ pub struct ConfiguratorAppInner {
25
25
board_dropdown : gtk:: ComboBoxText ,
26
26
count : AtomicUsize ,
27
27
picker : Picker ,
28
+ phony_board_names : OnceCell < Vec < String > > ,
28
29
scrolled_window : gtk:: ScrolledWindow ,
29
30
stack : gtk:: Stack ,
30
31
window : OnceCell < gtk:: ApplicationWindow > ,
@@ -78,6 +79,7 @@ impl ObjectSubclass for ConfiguratorAppInner {
78
79
board_dropdown,
79
80
count : AtomicUsize :: new ( 0 ) ,
80
81
picker,
82
+ phony_board_names : OnceCell :: new ( ) ,
81
83
scrolled_window,
82
84
stack,
83
85
window : OnceCell :: new ( ) ,
@@ -93,10 +95,28 @@ impl ObjectImpl for ConfiguratorAppInner {
93
95
94
96
let app: & ConfiguratorApp = obj. downcast_ref ( ) . unwrap ( ) ;
95
97
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 ) ;
96
99
}
97
100
}
98
101
99
102
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
+
100
120
fn activate ( & self , app : & gio:: Application ) {
101
121
let app: & ConfiguratorApp = app. downcast_ref ( ) . unwrap ( ) ;
102
122
@@ -110,7 +130,7 @@ impl ApplicationImpl for ConfiguratorAppInner {
110
130
..set_title( "Keyboard Layout" ) ;
111
131
..set_position( gtk:: WindowPosition :: Center ) ;
112
132
..set_default_size( 1024 , 768 ) ;
113
- ..add( & app . inner ( ) . scrolled_window) ;
133
+ ..add( & self . scrolled_window) ;
114
134
} ;
115
135
116
136
window. set_focus :: < gtk:: Widget > ( None ) ;
@@ -120,7 +140,7 @@ impl ApplicationImpl for ConfiguratorAppInner {
120
140
eprintln ! ( "Window close" ) ;
121
141
} ) ;
122
142
123
- let _ = app . inner ( ) . window . set ( window) ;
143
+ let _ = self . window . set ( window) ;
124
144
125
145
let daemon = daemon ( ) ;
126
146
let boards = daemon. boards ( ) . expect ( "Failed to load boards" ) ;
@@ -129,16 +149,19 @@ impl ApplicationImpl for ConfiguratorAppInner {
129
149
app. add_keyboard ( daemon. clone ( ) , board, i) ;
130
150
}
131
151
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 ( ) ) ) ;
137
155
let boards = daemon. boards ( ) . unwrap ( ) ;
138
156
139
157
for ( i, board) in boards. iter ( ) . enumerate ( ) {
140
158
app. add_keyboard ( daemon. clone ( ) , board, i) ;
141
159
}
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 ) ;
142
165
}
143
166
}
144
167
}
0 commit comments