summaryrefslogtreecommitdiffstats
path: root/swaybar/tray/dbus.c
diff options
context:
space:
mode:
authorLibravatar Calvin Lee <cyrus296@gmail.com>2017-11-15 13:16:21 -0700
committerLibravatar Calvin Lee <cyrus296@gmail.com>2017-12-29 12:11:51 -0700
commit13b81f9fb91ee20a41ccdd955c2539d46ef6b6e1 (patch)
tree675e1fbd1e6500633c01e418a0b055cb3fe8d1db /swaybar/tray/dbus.c
parentAdd `dbus_get_prop_async` utility (diff)
downloadsway-13b81f9fb91ee20a41ccdd955c2539d46ef6b6e1.tar.gz
sway-13b81f9fb91ee20a41ccdd955c2539d46ef6b6e1.tar.zst
sway-13b81f9fb91ee20a41ccdd955c2539d46ef6b6e1.zip
Fix `get_icon`
Property reply functions are now notified if there was an error with the property instead of silent failure. Also issues in `get_item` were resolved.
Diffstat (limited to 'swaybar/tray/dbus.c')
-rw-r--r--swaybar/tray/dbus.c10
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
139struct async_prop_data { 139struct 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
183bail: 186bail:
184 if (reply) { 187 if (reply) {
@@ -199,7 +202,8 @@ bool dbus_message_iter_check_signature(DBusMessageIter *iter, const char *sig) {
199bool dbus_get_prop_async(const char *destination, 202bool 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;