1
+ // Copyright 2023 System76 <[email protected] >
2
+ // SPDX-License-Identifier: GPL-3.0-only
3
+
1
4
pub mod shortcuts;
2
5
3
6
use std:: cmp;
@@ -76,6 +79,7 @@ pub enum SourceContext {
76
79
pub type Locale = String ;
77
80
pub type Variant = String ;
78
81
pub type Description = String ;
82
+
79
83
#[ derive( Clone , Debug , PartialEq , Eq ) ]
80
84
pub enum LayoutSource {
81
85
Base ,
@@ -89,6 +93,9 @@ const KB_REPEAT_DELAY_MIN: u32 = 200;
89
93
const KB_REPEAT_RATE_MAX : u32 = 45 ;
90
94
const KB_REPEAT_RATE_MIN : u32 = 5 ;
91
95
96
+ const COSMIC_COMP_CONFIG : & str = "com.system76.CosmicComp" ;
97
+ const COSMIC_COMP_CONFIG_VERSION : u64 = 1 ;
98
+
92
99
pub struct Page {
93
100
entity : page:: Entity ,
94
101
config : cosmic_config:: Config ,
@@ -103,7 +110,8 @@ pub struct Page {
103
110
104
111
impl Default for Page {
105
112
fn default ( ) -> Self {
106
- let config = cosmic_config:: Config :: new ( "com.system76.CosmicComp" , 1 ) . unwrap ( ) ;
113
+ let config =
114
+ cosmic_config:: Config :: new ( COSMIC_COMP_CONFIG , COSMIC_COMP_CONFIG_VERSION ) . unwrap ( ) ;
107
115
108
116
Self {
109
117
entity : page:: Entity :: null ( ) ,
@@ -209,7 +217,7 @@ fn popover_menu(id: DefaultKey) -> cosmic::Element<'static, Message> {
209
217
color : background. component . divider . into ( ) ,
210
218
width : 1.0 ,
211
219
radius : cosmic. corner_radii . radius_s . into ( ) ,
212
- ..Default :: default ( )
220
+ ..Border :: default ( )
213
221
} ,
214
222
shadow : Default :: default ( ) ,
215
223
}
@@ -609,26 +617,20 @@ impl Page {
609
617
}
610
618
611
619
fn update_xkb_config ( & mut self ) {
612
- let mut new_layout = String :: new ( ) ;
613
- let mut new_variant = String :: new ( ) ;
614
-
615
- for id in & self . active_layouts {
616
- if let Some ( ( locale, variant, _description, _source) ) = self . keyboard_layouts . get ( * id) {
617
- new_layout. push_str ( locale) ;
618
- new_layout. push ( ',' ) ;
619
- new_variant. push_str ( variant) ;
620
- new_variant. push ( ',' ) ;
621
- }
622
- }
623
-
624
- let _excess_comma = new_layout. pop ( ) ;
625
- let _excess_comma = new_variant. pop ( ) ;
626
-
627
- self . xkb . layout = new_layout;
628
- self . xkb . variant = new_variant;
620
+ let result = update_xkb_config (
621
+ & self . config ,
622
+ & mut self . xkb ,
623
+ & mut self
624
+ . active_layouts
625
+ . iter ( )
626
+ . filter_map ( |id| self . keyboard_layouts . get ( * id) )
627
+ . map ( |( locale, variant, _description, _source) | {
628
+ ( locale. as_str ( ) , variant. as_str ( ) )
629
+ } ) ,
630
+ ) ;
629
631
630
- if let Err ( err ) = self . config . set ( "xkb_config" , & self . xkb ) {
631
- tracing:: error!( ?err , "Failed to set config 'xkb_config'" ) ;
632
+ if let Err ( why ) = result {
633
+ tracing:: error!( ?why , "Failed to set config 'xkb_config'" ) ;
632
634
}
633
635
}
634
636
}
@@ -792,3 +794,27 @@ fn keyboard_typing_assist() -> Section<crate::pages::Message> {
792
794
. map ( crate :: pages:: Message :: Keyboard )
793
795
} )
794
796
}
797
+
798
+ fn update_xkb_config (
799
+ config : & cosmic_config:: Config ,
800
+ xkb : & mut XkbConfig ,
801
+ active_layouts : & mut dyn Iterator < Item = ( & str , & str ) > ,
802
+ ) -> Result < ( ) , cosmic_config:: Error > {
803
+ let mut new_layout = String :: new ( ) ;
804
+ let mut new_variant = String :: new ( ) ;
805
+
806
+ for ( locale, variant) in active_layouts {
807
+ new_layout. push_str ( locale) ;
808
+ new_layout. push ( ',' ) ;
809
+ new_variant. push_str ( variant) ;
810
+ new_variant. push ( ',' ) ;
811
+ }
812
+
813
+ let _excess_comma = new_layout. pop ( ) ;
814
+ let _excess_comma = new_variant. pop ( ) ;
815
+
816
+ xkb. layout = new_layout;
817
+ xkb. variant = new_variant;
818
+
819
+ config. set ( "xkb_config" , xkb)
820
+ }
0 commit comments