@@ -61,20 +61,65 @@ void FreeDesktopAtSPIMonitor::monitor_thread_func(void *p_userdata) {
6161 }
6262
6363 static const char *iface = " org.a11y.Status" ;
64- static const char *member = " IsEnabled" ;
64+ static const char *member_ac = " IsEnabled" ;
65+ static const char *member_sr = " ScreenReaderEnabled" ;
6566
6667 while (!mon->exit_thread .is_set ()) {
6768 DBusMessage *message = dbus_message_new_method_call (BUS_OBJECT_NAME, BUS_OBJECT_PATH, BUS_INTERFACE_PROPERTIES, " Get" );
6869
6970 dbus_message_append_args (
7071 message,
7172 DBUS_TYPE_STRING, &iface,
72- DBUS_TYPE_STRING, &member ,
73+ DBUS_TYPE_STRING, &member_ac ,
7374 DBUS_TYPE_INVALID);
7475
7576 DBusMessage *reply = dbus_connection_send_with_reply_and_block (bus, message, 50 , &error);
7677 dbus_message_unref (message);
7778
79+ if (!dbus_error_is_set (&error)) {
80+ DBusMessageIter iter, iter_variant, iter_struct;
81+ dbus_bool_t result;
82+ dbus_message_iter_init (reply, &iter);
83+ dbus_message_iter_recurse (&iter, &iter_variant);
84+ switch (dbus_message_iter_get_arg_type (&iter_variant)) {
85+ case DBUS_TYPE_STRUCT: {
86+ dbus_message_iter_recurse (&iter_variant, &iter_struct);
87+ if (dbus_message_iter_get_arg_type (&iter_struct) == DBUS_TYPE_BOOLEAN) {
88+ dbus_message_iter_get_basic (&iter_struct, &result);
89+ if (result) {
90+ mon->ac_enabled .set ();
91+ } else {
92+ mon->ac_enabled .clear ();
93+ }
94+ }
95+ } break ;
96+ case DBUS_TYPE_BOOLEAN: {
97+ dbus_message_iter_get_basic (&iter_variant, &result);
98+ if (result) {
99+ mon->ac_enabled .set ();
100+ } else {
101+ mon->ac_enabled .clear ();
102+ }
103+ } break ;
104+ default :
105+ break ;
106+ }
107+ dbus_message_unref (reply);
108+ } else {
109+ dbus_error_free (&error);
110+ }
111+
112+ message = dbus_message_new_method_call (BUS_OBJECT_NAME, BUS_OBJECT_PATH, BUS_INTERFACE_PROPERTIES, " Get" );
113+
114+ dbus_message_append_args (
115+ message,
116+ DBUS_TYPE_STRING, &iface,
117+ DBUS_TYPE_STRING, &member_sr,
118+ DBUS_TYPE_INVALID);
119+
120+ reply = dbus_connection_send_with_reply_and_block (bus, message, 50 , &error);
121+ dbus_message_unref (message);
122+
78123 if (!dbus_error_is_set (&error)) {
79124 DBusMessageIter iter, iter_variant, iter_struct;
80125 dbus_bool_t result;
0 commit comments