diff options
author | Drew DeVault <sir@cmpwn.com> | 2017-06-14 18:53:40 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-06-14 18:53:40 -0400 |
commit | 298f56353ef155f6a2ccc977c96b2ff5d971e65e (patch) | |
tree | dcb3b74f1dde93bce8657b7509662ffd7db667d0 /include/swaybar/tray | |
parent | Implement KDE's server-side decoration protocol (diff) | |
parent | Merge pull request #1234 from 4e554c4c/tray (diff) | |
download | sway-298f56353ef155f6a2ccc977c96b2ff5d971e65e.tar.gz sway-298f56353ef155f6a2ccc977c96b2ff5d971e65e.tar.zst sway-298f56353ef155f6a2ccc977c96b2ff5d971e65e.zip |
Merge branch 'master' into server-decoration
Diffstat (limited to 'include/swaybar/tray')
-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 |
5 files changed, 157 insertions, 0 deletions
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 @@ | |||
1 | #ifndef _SWAYBAR_DBUS_H | ||
2 | #define _SWAYBAR_DBUS_H | ||
3 | |||
4 | #include <stdbool.h> | ||
5 | #include <dbus/dbus.h> | ||
6 | extern DBusConnection *conn; | ||
7 | |||
8 | /** | ||
9 | * Should be called in main loop to dispatch events | ||
10 | */ | ||
11 | void dispatch_dbus(); | ||
12 | |||
13 | /** | ||
14 | * Initializes async dbus communication | ||
15 | */ | ||
16 | int dbus_init(); | ||
17 | |||
18 | #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 @@ | |||
1 | #ifndef _SWAYBAR_ICON_H | ||
2 | #define _SWAYBAR_ICON_H | ||
3 | |||
4 | #include <stdint.h> | ||
5 | #include <stdbool.h> | ||
6 | #include <client/cairo.h> | ||
7 | |||
8 | /** | ||
9 | * Returns the image found by `name` that is closest to `size` | ||
10 | */ | ||
11 | cairo_surface_t *find_icon(const char *name, int size); | ||
12 | |||
13 | /* Struct used internally only */ | ||
14 | struct subdir; | ||
15 | |||
16 | #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 @@ | |||
1 | #ifndef _SWAYBAR_SNI_H | ||
2 | #define _SWAYBAR_SNI_H | ||
3 | |||
4 | #include <stdbool.h> | ||
5 | #include <client/cairo.h> | ||
6 | |||
7 | struct StatusNotifierItem { | ||
8 | /* Name registered to sni watcher */ | ||
9 | char *name; | ||
10 | /* Unique bus name, needed for determining signal origins */ | ||
11 | char *unique_name; | ||
12 | bool kde_special_snowflake; | ||
13 | |||
14 | cairo_surface_t *image; | ||
15 | bool dirty; | ||
16 | }; | ||
17 | |||
18 | /* Each output holds an sni_icon_ref of each item to render */ | ||
19 | struct sni_icon_ref { | ||
20 | cairo_surface_t *icon; | ||
21 | struct StatusNotifierItem *ref; | ||
22 | }; | ||
23 | |||
24 | struct sni_icon_ref *sni_icon_ref_create(struct StatusNotifierItem *item, | ||
25 | int height); | ||
26 | |||
27 | void sni_icon_ref_free(struct sni_icon_ref *sni_ref); | ||
28 | |||
29 | /** | ||
30 | * Will return a new item and get its icon. (see warning below) | ||
31 | */ | ||
32 | struct StatusNotifierItem *sni_create(const char *name); | ||
33 | |||
34 | /** | ||
35 | * `item` must be a struct StatusNotifierItem * | ||
36 | * `str` must be a NUL terminated char * | ||
37 | * | ||
38 | * Returns 0 if `item` has a name of `str` | ||
39 | */ | ||
40 | int sni_str_cmp(const void *item, const void *str); | ||
41 | |||
42 | /** | ||
43 | * Returns 0 if `item` has a unique name of `str` or if | ||
44 | * `item->unique_name == NULL` | ||
45 | */ | ||
46 | int sni_uniq_cmp(const void *item, const void *str); | ||
47 | |||
48 | /** | ||
49 | * Gets an icon for the given item if found. | ||
50 | * | ||
51 | * XXX | ||
52 | * This function keeps a reference to the item until it gets responses, make | ||
53 | * sure that the reference and item are valid during this time. | ||
54 | */ | ||
55 | void get_icon(struct StatusNotifierItem *item); | ||
56 | |||
57 | /** | ||
58 | * Calls the "activate" method on the given StatusNotifierItem | ||
59 | * | ||
60 | * x and y should be where the item was clicked | ||
61 | */ | ||
62 | void sni_activate(struct StatusNotifierItem *item, uint32_t x, uint32_t y); | ||
63 | |||
64 | /** | ||
65 | * Asks the item to draw a context menu at the given x and y coords | ||
66 | */ | ||
67 | void sni_context_menu(struct StatusNotifierItem *item, uint32_t x, uint32_t y); | ||
68 | |||
69 | /** | ||
70 | * Calls the "secondary activate" method on the given StatusNotifierItem | ||
71 | * | ||
72 | * x and y should be where the item was clicked | ||
73 | */ | ||
74 | void sni_secondary(struct StatusNotifierItem *item, uint32_t x, uint32_t y); | ||
75 | |||
76 | /** | ||
77 | * Deconstructs `item` | ||
78 | */ | ||
79 | void sni_free(struct StatusNotifierItem *item); | ||
80 | |||
81 | #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 @@ | |||
1 | #ifndef _SWAYBAR_SNI_WATCHER_H | ||
2 | #define _SWAYBAR_SNI_WATCHER_H | ||
3 | |||
4 | /** | ||
5 | * Starts the sni_watcher, the watcher is practically a black box and should | ||
6 | * only be accessed though functions described in its spec | ||
7 | */ | ||
8 | int init_sni_watcher(); | ||
9 | |||
10 | #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 @@ | |||
1 | #ifndef _SWAYBAR_TRAY_H | ||
2 | #define _SWAYBAR_TRAY_H | ||
3 | |||
4 | #include <stdint.h> | ||
5 | #include <stdbool.h> | ||
6 | #include "swaybar/tray/dbus.h" | ||
7 | #include "swaybar/tray/sni.h" | ||
8 | #include "swaybar/bar.h" | ||
9 | #include "list.h" | ||
10 | |||
11 | extern struct tray *tray; | ||
12 | |||
13 | struct tray { | ||
14 | list_t *items; | ||
15 | }; | ||
16 | |||
17 | /** | ||
18 | * Processes a mouse event on the bar | ||
19 | */ | ||
20 | void tray_mouse_event(struct output *output, int x, int y, | ||
21 | uint32_t button, uint32_t state); | ||
22 | |||
23 | uint32_t tray_render(struct output *output, struct config *config); | ||
24 | |||
25 | void tray_upkeep(struct bar *bar); | ||
26 | |||
27 | /** | ||
28 | * Initializes the tray with D-Bus | ||
29 | */ | ||
30 | void init_tray(); | ||
31 | |||
32 | #endif /* _SWAYBAR_TRAY_H */ | ||