@@ -433,6 +433,37 @@ static int handle_set_modes(sd_bus_message *msg, void *data,
433
433
return sd_bus_reply_method_return (msg , "" );
434
434
}
435
435
436
+ static int get_modes (sd_bus * bus , const char * path ,
437
+ const char * interface , const char * property ,
438
+ sd_bus_message * reply , void * data ,
439
+ sd_bus_error * ret_error ) {
440
+ struct mako_state * state = data ;
441
+
442
+ int ret = sd_bus_message_open_container (reply , 'a' , "s" );
443
+ if (ret < 0 ) {
444
+ return ret ;
445
+ }
446
+
447
+ const char * * mode_ptr ;
448
+ wl_array_for_each (mode_ptr , & state -> current_modes ) {
449
+ ret = sd_bus_message_append_basic (reply , 's' , * mode_ptr );
450
+ if (ret < 0 ) {
451
+ return ret ;
452
+ }
453
+ }
454
+
455
+ ret = sd_bus_message_close_container (reply );
456
+ if (ret < 0 ) {
457
+ return ret ;
458
+ }
459
+
460
+ return 0 ;
461
+ }
462
+
463
+ void emit_modes_changed (struct mako_state * state ) {
464
+ sd_bus_emit_properties_changed (state -> bus , service_path , service_interface , "Modes" , NULL );
465
+ }
466
+
436
467
static const sd_bus_vtable service_vtable [] = {
437
468
SD_BUS_VTABLE_START (0 ),
438
469
SD_BUS_METHOD ("DismissAllNotifications" , "" , "" , handle_dismiss_all_notifications , SD_BUS_VTABLE_UNPRIVILEGED ),
@@ -447,6 +478,7 @@ static const sd_bus_vtable service_vtable[] = {
447
478
SD_BUS_METHOD ("SetMode" , "s" , "" , handle_set_mode , SD_BUS_VTABLE_UNPRIVILEGED ),
448
479
SD_BUS_METHOD ("ListModes" , "" , "as" , handle_list_modes , SD_BUS_VTABLE_UNPRIVILEGED ),
449
480
SD_BUS_METHOD ("SetModes" , "as" , "" , handle_set_modes , SD_BUS_VTABLE_UNPRIVILEGED ),
481
+ SD_BUS_PROPERTY ("Modes" , "as" , get_modes , 0 , SD_BUS_VTABLE_PROPERTY_EMITS_INVALIDATION ),
450
482
SD_BUS_VTABLE_END
451
483
};
452
484
0 commit comments