diff options
Diffstat (limited to 'include/swaybar')
-rw-r--r-- | include/swaybar/bar.h | 6 | ||||
-rw-r--r-- | include/swaybar/config.h | 11 | ||||
-rw-r--r-- | include/swaybar/event_loop.h | 26 | ||||
-rw-r--r-- | include/swaybar/tray/dbus.h | 18 | ||||
-rw-r--r-- | include/swaybar/tray/icon.h | 16 | ||||
-rw-r--r-- | include/swaybar/tray/sni.h | 81 | ||||
-rw-r--r-- | include/swaybar/tray/sni_watcher.h | 10 | ||||
-rw-r--r-- | include/swaybar/tray/tray.h | 32 |
8 files changed, 200 insertions, 0 deletions
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 */ |