@@ -191,11 +191,13 @@ const APPEARANCE_NAMESPACE: &str = "org.freedesktop.appearance";
191191const COLOR_SCHEME_KEY : & str = "color-scheme" ;
192192const ACCENT_COLOR_KEY : & str = "accent-color" ;
193193const CONTRAST_KEY : & str = "contrast" ;
194+ const BUTTON_PLACEMENT_KEY : & str = "button-placement" ;
194195
195196struct Settings {
196197 pub color_scheme : ColorScheme ,
197198 pub contrast : Contrast ,
198199 pub accent : Srgba < f64 > ,
200+ button_placement : ( Vec < String > , Vec < String > ) ,
199201}
200202
201203impl Settings {
@@ -214,8 +216,25 @@ impl Settings {
214216 ColorScheme :: PreferLight
215217 } ,
216218 accent : cosmic. accent_color ( ) . into_format ( ) ,
219+ button_placement : {
220+ let mut leading = Vec :: < String > :: new ( ) ;
221+ if cosmic:: config:: show_minimize ( ) {
222+ leading. push ( "minimize" . to_string ( ) ) ;
223+ }
224+ if cosmic:: config:: show_maximize ( ) {
225+ leading. push ( "maximize" . to_string ( ) ) ;
226+ }
227+ leading. push ( "close" . to_string ( ) ) ;
228+ ( Vec :: < String > :: default ( ) , leading)
229+ } ,
217230 }
218231 }
232+ fn button_placement_to_owned_value ( & self ) -> zbus:: fdo:: Result < zvariant:: OwnedValue > {
233+ let ctxt = zvariant:: serialized:: Context :: new_dbus ( zvariant:: LE , 0 ) ;
234+ let variant = zvariant:: to_bytes ( ctxt, & self . button_placement ) . unwrap ( ) ;
235+ let array = zvariant:: Array :: from ( variant. bytes ( ) ) ;
236+ OwnedValue :: try_from ( array) . map_err ( |e| zbus:: fdo:: Error :: Failed ( e. to_string ( ) ) )
237+ }
219238}
220239
221240#[ zbus:: interface( name = "org.freedesktop.impl.portal.Settings" ) ]
@@ -256,6 +275,9 @@ impl Settings {
256275 } ) {
257276 inner. insert ( ACCENT_COLOR_KEY . to_string ( ) , value) ;
258277 }
278+ if let Ok ( value) = self . button_placement_to_owned_value ( ) {
279+ inner. insert ( BUTTON_PLACEMENT_KEY . to_string ( ) , value) ;
280+ }
259281 map. insert ( APPEARANCE_NAMESPACE . to_string ( ) , inner) ;
260282 }
261283 map
@@ -274,6 +296,7 @@ impl Settings {
274296 blue : self . accent . blue ,
275297 } )
276298 . map_err ( |e| zbus:: fdo:: Error :: Failed ( e. to_string ( ) ) ) ,
299+ ( APPEARANCE_NAMESPACE , BUTTON_PLACEMENT_KEY ) => self . button_placement_to_owned_value ( ) ,
277300 _ => Err ( zbus:: fdo:: Error :: Failed (
278301 "Unknown namespace or key" . to_string ( ) ,
279302 ) ) ,
0 commit comments