summaryrefslogtreecommitdiff
path: root/sway/commands/bar/tray_padding.c
diff options
context:
space:
mode:
authorCalvin Lee <[email protected]>2017-06-07 16:45:28 -0700
committerCalvin Lee <[email protected]>2017-06-07 17:49:16 -0700
commit843ad38b3c427adb0bf319e9613d9813c8d9246c (patch)
treee02a5b06e2b6923371fd53724791c147c18a1fa4 /sway/commands/bar/tray_padding.c
parentfd47a30e75cccfc3789eafa4bfabd66f4696099b (diff)
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/commands/bar/tray_padding.c')
-rw-r--r--sway/commands/bar/tray_padding.c34
1 files changed, 19 insertions, 15 deletions
diff --git a/sway/commands/bar/tray_padding.c b/sway/commands/bar/tray_padding.c
index 8c559f65..ac0572ce 100644
--- a/sway/commands/bar/tray_padding.c
+++ b/sway/commands/bar/tray_padding.c
@@ -1,30 +1,34 @@
#include <stdlib.h>
-#include <string.h>
#include <strings.h>
#include "sway/commands.h"
#include "log.h"
struct cmd_results *bar_cmd_tray_padding(int argc, char **argv) {
+ const char *cmd_name = "tray_padding";
+#ifndef ENABLE_TRAY
+ return cmd_results_new(CMD_INVALID, cmd_name, "Invalid %s command"
+ "%s called, but sway was compiled without tray support",
+ cmd_name, cmd_name);
+#else
struct cmd_results *error = NULL;
- if ((error = checkarg(argc, "tray_padding", EXPECTED_AT_LEAST, 1))) {
+ if ((error = checkarg(argc, cmd_name, EXPECTED_AT_LEAST, 1))) {
return error;
}
if (!config->current_bar) {
- return cmd_results_new(CMD_FAILURE, "tray_padding", "No bar defined.");
+ return cmd_results_new(CMD_FAILURE, cmd_name, "No bar defined.");
}
- int padding = atoi(argv[0]);
- if (padding < 0) {
- return cmd_results_new(CMD_INVALID, "tray_padding",
- "Invalid padding value %s, minimum is 0", argv[0]);
+ if (argc == 1 || (argc == 2 && strcasecmp("px", argv[1]) == 0)) {
+ char *inv;
+ uint32_t padding = strtoul(argv[0], &inv, 10);
+ if (*inv == '\0' || strcasecmp(inv, "px") == 0) {
+ config->current_bar->tray_padding = padding;
+ sway_log(L_DEBUG, "Enabling tray padding of %d px on bar: %s", padding, config->current_bar->id);
+ return cmd_results_new(CMD_SUCCESS, NULL, NULL);
+ }
}
-
- if (argc > 1 && strcasecmp("px", argv[1]) != 0) {
- return cmd_results_new(CMD_INVALID, "tray_padding",
- "Unknown unit %s", argv[1]);
- }
- config->current_bar->tray_padding = padding;
- sway_log(L_DEBUG, "Enabling tray padding of %d px on bar: %s", padding, config->current_bar->id);
- return cmd_results_new(CMD_SUCCESS, NULL, NULL);
+ return cmd_results_new(CMD_FAILURE, cmd_name,
+ "Expected 'tray_padding <padding>[px]'");
+#endif
}