summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDrew DeVault <sir@cmpwn.com>2017-06-14 18:53:40 -0400
committerGitHub <noreply@github.com>2017-06-14 18:53:40 -0400
commit298f56353ef155f6a2ccc977c96b2ff5d971e65e (patch)
treedcb3b74f1dde93bce8657b7509662ffd7db667d0
parenta5c07dde6aba87584ddb6c6a2769472a6003623a (diff)
parenteb6e38c86d2deb37cc6f378f8644c4a530fd7448 (diff)
Merge branch 'master' into server-decoration
-rw-r--r--CMake/FindDBus.cmake59
-rw-r--r--CMakeLists.txt18
-rw-r--r--HACKING.md35
-rw-r--r--README.md9
-rw-r--r--common/log.c2
-rw-r--r--common/stringop.c2
-rw-r--r--common/util.c68
-rw-r--r--config.in1
-rw-r--r--include/client/cairo.h2
-rw-r--r--include/sway/commands.h4
-rw-r--r--include/sway/config.h12
-rw-r--r--include/swaybar/bar.h6
-rw-r--r--include/swaybar/config.h11
-rw-r--r--include/swaybar/event_loop.h26
-rw-r--r--include/swaybar/tray/dbus.h18
-rw-r--r--include/swaybar/tray/icon.h16
-rw-r--r--include/swaybar/tray/sni.h81
-rw-r--r--include/swaybar/tray/sni_watcher.h10
-rw-r--r--include/swaybar/tray/tray.h32
-rw-r--r--sway/border.c2
-rw-r--r--sway/commands.c8
-rw-r--r--sway/commands/assign.c3
-rw-r--r--sway/commands/bar/activate_button.c26
-rw-r--r--sway/commands/bar/context_button.c26
-rw-r--r--sway/commands/bar/icon_theme.c25
-rw-r--r--sway/commands/bar/secondary_button.c26
-rw-r--r--sway/commands/bar/tray_output.c26
-rw-r--r--sway/commands/bar/tray_padding.c34
-rw-r--r--sway/commands/bind.c8
-rw-r--r--sway/commands/client.c24
-rw-r--r--sway/commands/layout.c4
-rw-r--r--sway/commands/set.c2
-rw-r--r--sway/config.c15
-rw-r--r--sway/container.c17
-rw-r--r--sway/criteria.c2
-rw-r--r--sway/handlers.c22
-rw-r--r--sway/input.c4
-rw-r--r--sway/ipc-json.c17
-rw-r--r--sway/main.c43
-rw-r--r--sway/security.c2
-rw-r--r--sway/sway-bar.5.txt36
-rw-r--r--sway/sway-input.5.txt2
-rw-r--r--sway/sway.5.txt5
-rw-r--r--swaybar/CMakeLists.txt11
-rw-r--r--swaybar/bar.c87
-rw-r--r--swaybar/config.c12
-rw-r--r--swaybar/event_loop.c143
-rw-r--r--swaybar/ipc.c40
-rw-r--r--swaybar/render.c15
-rw-r--r--swaybar/tray/dbus.c189
-rw-r--r--swaybar/tray/icon.c404
-rw-r--r--swaybar/tray/sni.c471
-rw-r--r--swaybar/tray/sni_watcher.c487
-rw-r--r--swaybar/tray/tray.c393
-rw-r--r--swaygrab/json.c2
-rw-r--r--swaygrab/main.c2
-rw-r--r--wayland/cairo.c19
-rw-r--r--wayland/pango.c1
58 files changed, 2929 insertions, 138 deletions
diff --git a/CMake/FindDBus.cmake b/CMake/FindDBus.cmake
new file mode 100644
index 00000000..4a1a1805
--- /dev/null
+++ b/CMake/FindDBus.cmake
@@ -0,0 +1,59 @@
+# - Try to find DBus
+# Once done, this will define
+#
+# DBUS_FOUND - system has DBus
+# DBUS_INCLUDE_DIRS - the DBus include directories
+# DBUS_LIBRARIES - link these to use DBus
+#
+# Copyright (C) 2012 Raphael Kubo da Costa <rakuco@webkit.org>
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+# 1. Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND ITS CONTRIBUTORS ``AS
+# IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR ITS
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
+# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+FIND_PACKAGE(PkgConfig)
+PKG_CHECK_MODULES(PC_DBUS QUIET dbus-1)
+
+FIND_LIBRARY(DBUS_LIBRARIES
+ NAMES dbus-1
+ HINTS ${PC_DBUS_LIBDIR}
+ ${PC_DBUS_LIBRARY_DIRS}
+)
+
+FIND_PATH(DBUS_INCLUDE_DIR
+ NAMES dbus/dbus.h
+ HINTS ${PC_DBUS_INCLUDEDIR}
+ ${PC_DBUS_INCLUDE_DIRS}
+)
+
+GET_FILENAME_COMPONENT(_DBUS_LIBRARY_DIR ${DBUS_LIBRARIES} PATH)
+FIND_PATH(DBUS_ARCH_INCLUDE_DIR
+ NAMES dbus/dbus-arch-deps.h
+ HINTS ${PC_DBUS_INCLUDEDIR}
+ ${PC_DBUS_INCLUDE_DIRS}
+ ${_DBUS_LIBRARY_DIR}
+ ${DBUS_INCLUDE_DIR}
+ PATH_SUFFIXES include
+)
+
+SET(DBUS_INCLUDE_DIRS ${DBUS_INCLUDE_DIR} ${DBUS_ARCH_INCLUDE_DIR})
+
+INCLUDE(FindPackageHandleStandardArgs)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(DBUS REQUIRED_VARS DBUS_INCLUDE_DIRS DBUS_LIBRARIES)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 9ed45830..c80f6361 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -47,6 +47,7 @@ option(enable-swaybar "Enables the swaybar utility" YES)
option(enable-swaygrab "Enables the swaygrab utility" YES)
option(enable-swaymsg "Enables the swaymsg utility" YES)
option(enable-gdk-pixbuf "Use Pixbuf to support more image formats" YES)
+option(enable-tray "Enables the swaybar tray" YES)
option(zsh-completions "Zsh shell completions" NO)
option(default-wallpaper "Installs the default wallpaper" YES)
option(LD_LIBRARY_PATH "Configure sway's default LD_LIBRARY_PATH")
@@ -64,9 +65,13 @@ find_package(Cairo REQUIRED)
find_package(Pango REQUIRED)
find_package(GdkPixbuf)
find_package(PAM)
+find_package(DBus)
find_package(LibInput REQUIRED)
-find_package(Libcap REQUIRED)
+
+if (CMAKE_SYSTEM_NAME STREQUAL Linux)
+ find_package(Libcap REQUIRED)
+endif (CMAKE_SYSTEM_NAME STREQUAL Linux)
if (CMAKE_SYSTEM_NAME STREQUAL FreeBSD)
find_package(EpollShim REQUIRED)
@@ -87,6 +92,17 @@ else()
message(STATUS "Building without gdk-pixbuf, only png images supported.")
endif()
+if (enable-tray)
+ if (DBUS_FOUND)
+ set(ENABLE_TRAY)
+ add_definitions(-DENABLE_TRAY)
+ else()
+ message(WARNING "Tray required but DBus was not found. Tray will not be included")
+ endif()
+else()
+ message(STATUS "Building without the tray.")
+endif()
+
include_directories(include)
add_subdirectory(protocols)
diff --git a/HACKING.md b/HACKING.md
new file mode 100644
index 00000000..cf18dbb0
--- /dev/null
+++ b/HACKING.md
@@ -0,0 +1,35 @@
+## Logging
+
+Use `sway_log(importance, fmt, ...)` to log. The following importances are
+available:
+
+* `L_DEBUG`: Debug messages, only shows with `sway -d`
+* `L_INFO`: Informational messages
+* `L_ERROR`: Error messages
+
+`sway_log` is a macro that calls `_sway_log` with the current filename and line
+number, which are written into the log with your message.
+
+## Assertions
+
+In the compositor, assertions *must not* be fatal. All error cases must be
+handled as gracefully as possible - crashing the compositor will make the user
+lose all of their work.
+
+Use `sway_assert(condition, fmt, ...)` to perform an assertion. This returns
+`condition`, which you must handle if false. An error will be logged if the
+assertion fails.
+
+Outside of the compositor (swaymsg, swaybar, etc), using `assert.h` is
+permitted.
+
+## Building against a local wlc
+
+1. Build wlc as described [here](https://github.com/Cloudef/wlc#building)
+2. Inside your sway source folder, tell `cmake` to use your local version of wlc:
+
+```bash
+cmake \
+ -DWLC_LIBRARIES=path/to/wlc/target/src/libwlc.so \
+ -DWLC_INCLUDE_DIRS=path/to/wlc/include .
+```
diff --git a/README.md b/README.md
index 548fc6ed..65a943d3 100644
--- a/README.md
+++ b/README.md
@@ -8,7 +8,12 @@ irc.freenode.net).
[![](https://sr.ht/ICd5.png)](https://sr.ht/ICd5.png)
-[More screenshots](https://github.com/SirCmpwn/sway/wiki/Screenshots-of-Sway)
+If you'd like to support Sway development, you can contribute to [my Patreon
+page](https://patreon.com/sircmpwn) or you can contribute to
+[bounties](https://github.com/SirCmpwn/sway/issues/986) for specific features.
+Anyone is welcome to claim a bounty and you can make a bounty for any feature
+you wish, and Patreon is more useful for supporting the overall health and
+maintenance of Sway.
## Release Signatures
@@ -23,8 +28,6 @@ and published [on GitHub](https://github.com/SirCmpwn/sway/releases).
- [i3-gaps feature support](https://github.com/SirCmpwn/sway/issues/307)
- [security features](https://github.com/SirCmpwn/sway/issues/984)
-[Bounties](https://github.com/SirCmpwn/sway/issues/986): sponsor features or get paid to write them
-
## Installation
### From Packages
diff --git a/common/log.c b/common/log.c
index 61937495..af1bdc3f 100644
--- a/common/log.c
+++ b/common/log.c
@@ -1,4 +1,4 @@
-#define _POSIX_C_SOURCE 1
+#define _POSIX_C_SOURCE 199506L
#include <errno.h>
#include <libgen.h>
#include <signal.h>
diff --git a/common/stringop.c b/common/stringop.c
index 99e9636d..4a37543d 100644
--- a/common/stringop.c
+++ b/common/stringop.c
@@ -1,4 +1,4 @@
-#define _XOPEN_SOURCE 500
+#define _XOPEN_SOURCE 700
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
diff --git a/common/util.c b/common/util.c
index a9e6a9c2..d6369853 100644
--- a/common/util.c
+++ b/common/util.c
@@ -1,4 +1,4 @@
-#define _XOPEN_SOURCE 500
+#define _XOPEN_SOURCE 700
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
@@ -124,38 +124,38 @@ uint32_t parse_color(const char *color) {
}
char* resolve_path(const char* path) {
- struct stat sb;
- ssize_t r;
- int i;
- char *current = NULL;
- char *resolved = NULL;
-
- if(!(current = strdup(path))) {
- return NULL;
- }
- for (i = 0; i < 16; ++i) {
- if (lstat(current, &sb) == -1) {
- goto failed;
- }
- if((sb.st_mode & S_IFMT) != S_IFLNK) {
- return current;
- }
- if (!(resolved = malloc(sb.st_size + 1))) {
- goto failed;
- }
- r = readlink(current, resolved, sb.st_size);
- if (r == -1 || r > sb.st_size) {
- goto failed;
- }
- resolved[r] = '\0';
- free(current);
- current = strdup(resolved);
- free(resolved);
- resolved = NULL;
- }
+ struct stat sb;
+ ssize_t r;
+ int i;
+ char *current = NULL;
+ char *resolved = NULL;
+
+ if(!(current = strdup(path))) {
+ return NULL;
+ }
+ for (i = 0; i < 16; ++i) {
+ if (lstat(current, &sb) == -1) {
+ goto failed;
+ }
+ if((sb.st_mode & S_IFMT) != S_IFLNK) {
+ return current;
+ }
+ if (!(resolved = malloc(sb.st_size + 1))) {
+ goto failed;
+ }
+ r = readlink(current, resolved, sb.st_size);
+ if (r == -1 || r > sb.st_size) {
+ goto failed;
+ }
+ resolved[r] = '\0';
+ free(current);
+ current = strdup(resolved);
+ free(resolved);
+ resolved = NULL;
+ }
failed:
- free(resolved);
- free(current);
- return NULL;
-} \ No newline at end of file
+ free(resolved);
+ free(current);
+ return NULL;
+}
diff --git a/config.in b/config.in
index a262fc82..993e2ab6 100644
--- a/config.in
+++ b/config.in
@@ -41,7 +41,6 @@ output * bg __DATADIR__/sway/Sway_Wallpaper_Blue_1920x1080.png fill
# }
#
# You can get the names of your inputs by running: swaymsg -t get_inputs
-# The escape symbol "\" has to be removed.
# Read `man 5 sway-input` for more information about this section.
### Key bindings
diff --git a/include/client/cairo.h b/include/client/cairo.h
index 46c53566..e7ef7c7e 100644
--- a/include/client/cairo.h
+++ b/include/client/cairo.h
@@ -6,6 +6,8 @@
void cairo_set_source_u32(cairo_t *cairo, uint32_t color);
+cairo_surface_t *cairo_image_surface_scale(cairo_surface_t *image, int width, int height);
+
#ifdef WITH_GDK_PIXBUF
#include <gdk-pixbuf/gdk-pixbuf.h>
diff --git a/include/sway/commands.h b/include/sway/commands.h
index 078652e7..f67df10f 100644
--- a/include/sway/commands.h
+++ b/include/sway/commands.h
@@ -157,17 +157,21 @@ sway_cmd cmd_workspace;
sway_cmd cmd_ws_auto_back_and_forth;
sway_cmd cmd_workspace_layout;
+sway_cmd bar_cmd_activate_button;
sway_cmd bar_cmd_binding_mode_indicator;
sway_cmd bar_cmd_bindsym;
sway_cmd bar_cmd_colors;
+sway_cmd bar_cmd_context_button;
sway_cmd bar_cmd_font;
sway_cmd bar_cmd_mode;
sway_cmd bar_cmd_modifier;
sway_cmd bar_cmd_output;
sway_cmd bar_cmd_height;
sway_cmd bar_cmd_hidden_state;
+sway_cmd bar_cmd_icon_theme;
sway_cmd bar_cmd_id;
sway_cmd bar_cmd_position;
+sway_cmd bar_cmd_secondary_button;
sway_cmd bar_cmd_separator_symbol;
sway_cmd bar_cmd_status_command;
sway_cmd bar_cmd_pango_markup;
diff --git a/include/sway/config.h b/include/sway/config.h
index 35f8d5f7..999a471a 100644
--- a/include/sway/config.h
+++ b/include/sway/config.h
@@ -133,7 +133,17 @@ struct bar_config {
char *swaybar_command;
char *font;
int height; // -1 not defined
- int tray_padding;
+
+#ifdef ENABLE_TRAY
+ // Tray
+ char *tray_output;
+ char *icon_theme;
+ uint32_t tray_padding;
+ uint32_t activate_button;
+ uint32_t context_button;
+ uint32_t secondary_button;
+#endif
+
bool workspace_buttons;
bool wrap_scroll;
char *separator_symbol;
diff --git a/include/swaybar/bar.h b/include/swaybar/bar.h
index 697a48c2..010e1f84 100644
--- a/include/swaybar/bar.h
+++ b/include/swaybar/bar.h
@@ -21,6 +21,9 @@ struct output {
struct window *window;
struct registry *registry;
list_t *workspaces;
+#ifdef ENABLE_TRAY
+ list_t *items;
+#endif
char *name;
int idx;
bool focused;
@@ -37,6 +40,9 @@ struct workspace {
/** Global bar state */
extern struct bar swaybar;
+/** True if sway needs to render */
+extern bool dirty;
+
/**
* Setup bar.
*/
diff --git a/include/swaybar/config.h b/include/swaybar/config.h
index 04b12cd4..651f0ee3 100644
--- a/include/swaybar/config.h
+++ b/include/swaybar/config.h
@@ -33,6 +33,17 @@ struct config {
bool all_outputs;
list_t *outputs;
+#ifdef ENABLE_TRAY
+ // Tray
+ char *tray_output;
+ char *icon_theme;
+
+ uint32_t tray_padding;
+ uint32_t activate_button;
+ uint32_t context_button;
+ uint32_t secondary_button;
+#endif
+
int height;
struct {
diff --git a/include/swaybar/event_loop.h b/include/swaybar/event_loop.h
new file mode 100644
index 00000000..a0cde07f
--- /dev/null
+++ b/include/swaybar/event_loop.h
@@ -0,0 +1,26 @@
+#ifndef _SWAYBAR_EVENT_LOOP_H
+#define _SWAYBAR_EVENT_LOOP_H
+
+#include <stdbool.h>
+#include <time.h>
+
+void add_event(int fd, short mask,
+ void(*cb)(int fd, short mask, void *data),
+ void *data);
+
+// Not guaranteed to notify cb immediately
+void add_timer(timer_t timer,
+ void(*cb)(timer_t timer, void *data),
+ void *data);
+
+// Returns false if nothing exists, true otherwise
+bool remove_event(int fd);
+
+// Returns false if nothing exists, true otherwise
+bool remove_timer(timer_t timer);
+
+// Blocks and returns after sending callbacks
+void event_loop_poll();
+
+void init_event_loop();
+#endif /*_SWAYBAR_EVENT_LOOP_H */
diff --git a/include/swaybar/tray/dbus.h b/include/swaybar/tray/dbus.h
new file mode 100644
index 00000000..eb9cfea7
--- /dev/null
+++ b/include/swaybar/tray/dbus.h
@@ -0,0 +1,18 @@
+#ifndef _SWAYBAR_DBUS_H
+#define _SWAYBAR_DBUS_H
+
+#include <stdbool.h>
+#include <dbus/dbus.h>
+extern DBusConnection *conn;
+
+/**
+ * Should be called in main loop to dispatch events
+ */
+void dispatch_dbus();
+
+/**
+ * Initializes async dbus communication
+ */
+int dbus_init();
+
+#endif /* _SWAYBAR_DBUS_H */
diff --git a/include/swaybar/tray/icon.h b/include/swaybar/tray/icon.h
new file mode 100644
index 00000000..1cc6ff9c
--- /dev/null
+++ b/include/swaybar/tray/icon.h
@@ -0,0 +1,16 @@
+#ifndef _SWAYBAR_ICON_H
+#define _SWAYBAR_ICON_H
+
+#include <stdint.h>
+#include <stdbool.h>
+#include <client/cairo.h>
+
+/**
+ * Returns the image found by `name` that is closest to `size`
+ */
+cairo_surface_t *find_icon(const char *name, int size);
+
+/* Struct used internally only */
+struct subdir;
+
+#endif /* _SWAYBAR_ICON_H */
diff --git a/include/swaybar/tray/sni.h b/include/swaybar/tray/sni.h
new file mode 100644
index 00000000..83809b2d
--- /dev/null
+++ b/include/swaybar/tray/sni.h
@@ -0,0 +1,81 @@
+#ifndef _SWAYBAR_SNI_H
+#define _SWAYBAR_SNI_H
+
+#include <stdbool.h>
+#include <client/cairo.h>
+
+struct StatusNotifierItem {
+ /* Name registered to sni watcher */
+ char *name;
+ /* Unique bus name, needed for determining signal origins */
+ char *unique_name;
+ bool kde_special_snowflake;
+
+ cairo_surface_t *image;
+ bool dirty;
+};
+
+/* Each output holds an sni_icon_ref of each item to render */
+struct sni_icon_ref {
+ cairo_surface_t *icon;
+ struct StatusNotifierItem *ref;
+};
+
+struct sni_icon_ref *sni_icon_ref_create(struct StatusNotifierItem *item,
+ int height);
+
+void sni_icon_ref_free(struct sni_icon_ref *sni_ref);
+
+/**
+ * Will return a new item and get its icon. (see warning below)
+ */
+struct StatusNotifierItem *sni_create(const char *name);
+
+/**
+ * `item` must be a struct StatusNotifierItem *
+ * `str` must be a NUL terminated char *
+ *
+ * Returns 0 if `item` has a name of `str`
+ */
+int sni_str_cmp(const void *item, const void *str);
+
+/**
+ * Returns 0 if `item` has a unique name of `str` or if
+ * `item->unique_name == NULL`
+ */
+int sni_uniq_cmp(const void *item, const void *str);
+
+/**
+ * Gets an icon for the given item if found.
+ *
+ * XXX
+ * This function keeps a reference to the item until it gets responses, make
+ * sure that the reference and item are valid during this time.
+ */
+void get_icon(struct StatusNotifierItem *item);
+
+/**
+ * Calls the "activate" method on the given StatusNotifierItem
+ *
+ * x and y should be where the item was clicked
+ */
+void sni_activate(struct StatusNotifierItem *item, uint32_t x, uint32_t y);
+
+/**
+ * Asks the item to draw a context menu at the given x and y coords
+ */
+void sni_context_menu(struct StatusNotifierItem *item, uint32_t x, uint32_t y);
+
+/**
+ * Calls the "secondary activate" method on the given StatusNotifierItem
+ *
+ * x and y should be where the item was clicked
+ */
+void sni_secondary(struct StatusNotifierItem *item, uint32_t x, uint32_t y);
+
+/**
+ * Deconstructs `item`
+ */
+void sni_free(struct StatusNotifierItem *item);
+
+#endif /* _SWAYBAR_SNI_H */
diff --git a/include/swaybar/tray/sni_watcher.h b/include/swaybar/tray/sni_watcher.h
new file mode 100644
index 00000000..25ddfcd2
--- /dev/null
+++ b/include/swaybar/tray/sni_watcher.h
@@ -0,0 +1,10 @@
+#ifndef _SWAYBAR_SNI_WATCHER_H
+#define _SWAYBAR_SNI_WATCHER_H
+
+/**
+ * Starts the sni_watcher, the watcher is practically a black box and should
+ * only be accessed though functions described in its spec
+ */
+int init_sni_watcher();
+
+#endif /* _SWAYBAR_SNI_WATCHER_H */
diff --git a/include/swaybar/tray/tray.h b/include/swaybar/tray/tray.h
new file mode 100644
index 00000000..b718e555
--- /dev/null
+++ b/include/swaybar/tray/tray.h
@@ -0,0 +1,32 @@
+#ifndef _SWAYBAR_TRAY_H
+#define _SWAYBAR_TRAY_H
+
+#include <stdint.h>
+#include <stdbool.h>
+#include "swaybar/tray/dbus.h"
+#include "swaybar/tray/sni.h"
+#include "swaybar/bar.h"
+#include "list.h"
+
+extern struct tray *tray;
+
+struct tray {
+ list_t *items;
+};
+
+/**
+ * Processes a mouse event on the bar
+ */
+void tray_mouse_event(struct output *output, int x, int y,
+ uint32_t button, uint32_t state);
+
+uint32_t tray_render(struct output *output, struct config *config);
+
+void tray_upkeep(struct bar *bar);
+
+/**
+ * Initializes the tray with D-Bus
+ */
+void init_tray();
+
+#endif /* _SWAYBAR_TRAY_H */
diff --git a/sway/border.c b/sway/border.c
index 10ad92c2..df0022ce 100644
--- a/sway/border.c
+++ b/sway/border.c
@@ -1,4 +1,4 @@
-#define _XOPEN_SOURCE 500
+#define _XOPEN_SOURCE 700
#include <wlc/wlc-render.h>
#include <cairo/cairo.h>
#include <pango/pangocairo.h>
diff --git a/sway/commands.c b/sway/commands.c
index 01e5e6b5..f83b5287 100644
--- a/sway/commands.c
+++ b/sway/commands.c
@@ -1,4 +1,4 @@
-#define _XOPEN_SOURCE 500
+#define _XOPEN_SOURCE 700
#include <xkbcommon/xkbcommon.h>
#include <xkbcommon/xkbcommon-names.h>
#include <wlc/wlc.h>
@@ -221,18 +221,22 @@ static struct cmd_handler handlers[] = {
};
static struct cmd_handler bar_handlers[] = {
+ { "activate_button", bar_cmd_activate_button },
{ "binding_mode_indicator", bar_cmd_binding_mode_indicator },
{ "bindsym", bar_cmd_bindsym },
{ "colors", bar_cmd_colors },
+ { "context_button", bar_cmd_context_button },
{ "font", bar_cmd_font },
{ "height", bar_cmd_height },
{ "hidden_state", bar_cmd_hidden_state },
+ { "icon_theme", bar_cmd_icon_theme },
{ "id", bar_cmd_id },
{ "mode", bar_cmd_mode },
{ "modifier", bar_cmd_modifier },
{ "output", bar_cmd_output },
{ "pango_markup", bar_cmd_pango_markup },
{ "position", bar_cmd_position },
+ { "secondary_button", bar_cmd_secondary_button },
{ "separator_symbol", bar_cmd_separator_symbol }