diff options
Diffstat (limited to 'swaybar/tray/dbus.c')
-rw-r--r-- | swaybar/tray/dbus.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/swaybar/tray/dbus.c b/swaybar/tray/dbus.c index 4439fb83..08abf65c 100644 --- a/swaybar/tray/dbus.c +++ b/swaybar/tray/dbus.c | |||
@@ -138,7 +138,7 @@ static void dispatch_status(DBusConnection *connection, DBusDispatchStatus new_s | |||
138 | 138 | ||
139 | struct async_prop_data { | 139 | struct async_prop_data { |
140 | char const *sig; | 140 | char const *sig; |
141 | void(*callback)(DBusMessageIter *, void *); | 141 | void(*callback)(DBusMessageIter *, void *, enum property_status); |
142 | void *usr_data; | 142 | void *usr_data; |
143 | }; | 143 | }; |
144 | 144 | ||
@@ -160,6 +160,7 @@ static void get_prop_callback(DBusPendingCall *pending, void *_data) { | |||
160 | DBUS_TYPE_INVALID); | 160 | DBUS_TYPE_INVALID); |
161 | 161 | ||
162 | sway_log(L_INFO, "Failure to get property: %s", msg); | 162 | sway_log(L_INFO, "Failure to get property: %s", msg); |
163 | data->callback(NULL, data->usr_data, PROP_ERROR); | ||
163 | goto bail; | 164 | goto bail; |
164 | } | 165 | } |
165 | 166 | ||
@@ -169,16 +170,18 @@ static void get_prop_callback(DBusPendingCall *pending, void *_data) { | |||
169 | dbus_message_iter_init(reply, &iter); | 170 | dbus_message_iter_init(reply, &iter); |
170 | if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_VARIANT) { | 171 | if (dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_VARIANT) { |
171 | sway_log(L_ERROR, "Property relpy type incorrect"); | 172 | sway_log(L_ERROR, "Property relpy type incorrect"); |
173 | data->callback(NULL, data->usr_data, PROP_BAD_DATA); | ||
172 | goto bail; | 174 | goto bail; |
173 | } | 175 | } |
174 | dbus_message_iter_recurse(&iter, &variant); | 176 | dbus_message_iter_recurse(&iter, &variant); |
175 | 177 | ||
176 | if (!dbus_message_iter_check_signature(&variant, data->sig)) { | 178 | if (!dbus_message_iter_check_signature(&variant, data->sig)) { |
177 | sway_log(L_INFO, "Property returned has incorrect signatue."); | 179 | sway_log(L_INFO, "Property returned has incorrect signatue."); |
180 | data->callback(&variant, data->usr_data, PROP_WRONG_SIG); | ||
178 | goto bail; | 181 | goto bail; |
179 | } | 182 | } |
180 | 183 | ||
181 | data->callback(&variant, data->usr_data); | 184 | data->callback(&variant, data->usr_data, PROP_EXISTS); |
182 | 185 | ||
183 | bail: | 186 | bail: |
184 | if (reply) { | 187 | if (reply) { |
@@ -199,7 +202,8 @@ bool dbus_message_iter_check_signature(DBusMessageIter *iter, const char *sig) { | |||
199 | bool dbus_get_prop_async(const char *destination, | 202 | bool dbus_get_prop_async(const char *destination, |
200 | const char *path, const char *iface, | 203 | const char *path, const char *iface, |
201 | const char *prop, const char *expected_signature, | 204 | const char *prop, const char *expected_signature, |
202 | void(*callback)(DBusMessageIter *, void *), void *usr_data) { | 205 | void(*callback)(DBusMessageIter *, void *, enum property_status), |
206 | void *usr_data) { | ||
203 | struct async_prop_data *data = malloc(sizeof(struct async_prop_data)); | 207 | struct async_prop_data *data = malloc(sizeof(struct async_prop_data)); |
204 | if (!data) { | 208 | if (!data) { |
205 | return false; | 209 | return false; |