summaryrefslogtreecommitdiffstats
path: root/swaybar/tray/sni.c
diff options
context:
space:
mode:
Diffstat (limited to 'swaybar/tray/sni.c')
-rw-r--r--swaybar/tray/sni.c30
1 files changed, 21 insertions, 9 deletions
diff --git a/swaybar/tray/sni.c b/swaybar/tray/sni.c
index 200422da..98934e11 100644
--- a/swaybar/tray/sni.c
+++ b/swaybar/tray/sni.c
@@ -41,11 +41,15 @@ void sni_icon_ref_free(struct sni_icon_ref *sni_ref) {
41} 41}
42 42
43/* Gets the pixmap of an icon */ 43/* Gets the pixmap of an icon */
44static void reply_icon(DBusMessageIter *iter /* a(iiay) */, void *_data) { 44static void reply_icon(DBusMessageIter *iter /* a(iiay) */, void *_data, enum property_status status) {
45 if (status != PROP_EXISTS) {
46 return;
47 }
45 struct StatusNotifierItem *item = _data; 48 struct StatusNotifierItem *item = _data;
46 49
47 DBusMessageIter d_struct; /* (iiay) */ 50 DBusMessageIter d_struct; /* (iiay) */
48 DBusMessageIter icon; /* ay */ 51 DBusMessageIter struct_items;
52 DBusMessageIter icon;
49 53
50 if (dbus_message_iter_get_element_count(iter) == 0) { 54 if (dbus_message_iter_get_element_count(iter) == 0) {
51 // Can't recurse if there are no items 55 // Can't recurse if there are no items
@@ -54,16 +58,17 @@ static void reply_icon(DBusMessageIter *iter /* a(iiay) */, void *_data) {
54 } 58 }
55 59
56 dbus_message_iter_recurse(iter, &d_struct); 60 dbus_message_iter_recurse(iter, &d_struct);
61 dbus_message_iter_recurse(&d_struct, &struct_items);
57 62
58 int width; 63 int width;
59 dbus_message_iter_get_basic(&d_struct, &width); 64 dbus_message_iter_get_basic(&struct_items, &width);
60 dbus_message_iter_next(&d_struct); 65 dbus_message_iter_next(&struct_items);
61 66
62 int height; 67 int height;
63 dbus_message_iter_get_basic(&d_struct, &height); 68 dbus_message_iter_get_basic(&struct_items, &height);
64 dbus_message_iter_next(&d_struct); 69 dbus_message_iter_next(&struct_items);
65 70
66 int len = dbus_message_iter_get_element_count(&d_struct); 71 int len = dbus_message_iter_get_element_count(&struct_items);
67 72
68 if (!len) { 73 if (!len) {
69 sway_log(L_ERROR, "No icon data"); 74 sway_log(L_ERROR, "No icon data");
@@ -76,7 +81,7 @@ static void reply_icon(DBusMessageIter *iter /* a(iiay) */, void *_data) {
76 return; 81 return;
77 } 82 }
78 83
79 dbus_message_iter_recurse(&d_struct, &icon); 84 dbus_message_iter_recurse(&struct_items, &icon);
80 85
81 int stride = cairo_format_stride_for_width(CAIRO_FORMAT_ARGB32, width); 86 int stride = cairo_format_stride_for_width(CAIRO_FORMAT_ARGB32, width);
82 // FIXME support a variable stride 87 // FIXME support a variable stride
@@ -131,9 +136,16 @@ static void reply_icon(DBusMessageIter *iter /* a(iiay) */, void *_data) {
131} 136}
132 137
133/* Get an icon by its name */ 138/* Get an icon by its name */
134static void reply_icon_name(DBusMessageIter *iter, void *_data) { 139static void reply_icon_name(DBusMessageIter *iter, void *_data, enum property_status status) {
135 struct StatusNotifierItem *item = _data; 140 struct StatusNotifierItem *item = _data;
136 141
142 if (status != PROP_EXISTS) {
143 dbus_get_prop_async(item->name, item->object_path,
144 (item->kde_special_snowflake ? KDE_IFACE : FD_IFACE),
145 "IconPixmap", "a(iiay)", reply_icon, item);
146 return;
147 }
148
137 char *icon_name; 149 char *icon_name;
138 dbus_message_iter_get_basic(iter, &icon_name); 150 dbus_message_iter_get_basic(iter, &icon_name);
139 151