diff options
author | Calvin Lee <cyrus296@gmail.com> | 2017-06-07 16:45:28 -0700 |
---|---|---|
committer | Calvin Lee <cyrus296@gmail.com> | 2017-06-07 17:49:16 -0700 |
commit | 843ad38b3c427adb0bf319e9613d9813c8d9246c (patch) | |
tree | e02a5b06e2b6923371fd53724791c147c18a1fa4 /sway/ipc-json.c | |
parent | Merge pull request #1232 from johalun/master-freebsd (diff) | |
download | sway-843ad38b3c427adb0bf319e9613d9813c8d9246c.tar.gz sway-843ad38b3c427adb0bf319e9613d9813c8d9246c.tar.zst sway-843ad38b3c427adb0bf319e9613d9813c8d9246c.zip |
Implement Tray Icons
This commit implements the StatusNotifierItem protocol, and enables
swaybar to show tray icons. It also uses `xembedsniproxy` in order to
communicate with xembed applications.
The tray is completely optional, and can be disabled on compile time
with the `enable-tray` option. Or on runtime with the bar config option
`tray_output none`.
Overview of changes:
In swaybar very little is changed outside the tray subfolder except
that all events are now polled in `event_loop.c`, this creates no
functional difference.
Six bar configuration options were added, these are detailed in
sway-bar(5)
The tray subfolder is where all protocol implementation takes place and
is organised as follows:
tray/sni_watcher.c:
This file contains the StatusNotifierWatcher. It keeps track of
items and hosts and reports when they come or go.
tray/tray.c
This file contains the StatusNotifierHost. It keeps track of
sway's version of the items and represents the tray itself.
tray/sni.c
This file contains the StatusNotifierItem struct and all
communication with individual items.
tray/icon.c
This file implements the icon theme protocol. It allows for
finding icons by name, rather than by pixmap.
tray/dbus.c
This file allows for asynchronous DBus communication.
See #986 #343
Diffstat (limited to 'sway/ipc-json.c')
-rw-r--r-- | sway/ipc-json.c | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/sway/ipc-json.c b/sway/ipc-json.c index 512144a4..31de53f0 100644 --- a/sway/ipc-json.c +++ b/sway/ipc-json.c | |||
@@ -327,7 +327,22 @@ json_object *ipc_json_describe_bar_config(struct bar_config *bar) { | |||
327 | 327 | ||
328 | json_object *json = json_object_new_object(); | 328 | json_object *json = json_object_new_object(); |
329 | json_object_object_add(json, "id", json_object_new_string(bar->id)); | 329 | json_object_object_add(json, "id", json_object_new_string(bar->id)); |
330 | json_object_object_add(json, "tray_output", NULL); | 330 | #ifdef ENABLE_TRAY |
331 | if (bar->tray_output) { | ||
332 | json_object_object_add(json, "tray_output", json_object_new_string(bar->tray_output)); | ||
333 | } else { | ||
334 | json_object_object_add(json, "tray_output", NULL); | ||
335 | } | ||
336 | if (bar->icon_theme) { | ||
337 | json_object_object_add(json, "icon_theme", json_object_new_string(bar->icon_theme)); | ||
338 | } else { | ||
339 | json_object_object_add(json, "icon_theme", NULL); | ||
340 | } | ||
341 | json_object_object_add(json, "tray_padding", json_object_new_int(bar->tray_padding)); | ||
342 | json_object_object_add(json, "activate_button", json_object_new_int(bar->activate_button)); | ||
343 | json_object_object_add(json, "context_button", json_object_new_int(bar->context_button)); | ||
344 | json_object_object_add(json, "secondary_button", json_object_new_int(bar->secondary_button)); | ||
345 | #endif | ||
331 | json_object_object_add(json, "mode", json_object_new_string(bar->mode)); | 346 | json_object_object_add(json, "mode", json_object_new_string(bar->mode)); |
332 | json_object_object_add(json, "hidden_state", json_object_new_string(bar->hidden_state)); | 347 | json_object_object_add(json, "hidden_state", json_object_new_string(bar->hidden_state)); |
333 | json_object_object_add(json, "modifier", json_object_new_string(get_modifier_name_by_mask(bar->modifier))); | 348 | json_object_object_add(json, "modifier", json_object_new_string(get_modifier_name_by_mask(bar->modifier))); |