From 9b1426271c08a9d7e31f214a287d6f3a1c2bac7b Mon Sep 17 00:00:00 2001 From: Tim Biermann Date: Sat, 2 Mar 2024 13:47:29 +0100 Subject: [PATCH] sway: tray icon menus broke with 1.9, attached latest fix --- sway/.signature | 6 +- sway/6249.patch | 310 ++++++++++++++++++------------------------------ sway/Pkgfile | 2 +- 3 files changed, 121 insertions(+), 197 deletions(-) diff --git a/sway/.signature b/sway/.signature index ba19f86f3..fd90f3110 100644 --- a/sway/.signature +++ b/sway/.signature @@ -1,6 +1,6 @@ untrusted comment: verify with /etc/ports/contrib.pub -RWSagIOpLGJF3/qRl8C0qHZaN2AucueLs4DX1shxgbIYiJP0mKyB6VJRmWvu374YSyuwyzYadPkJ9ibmMVxIrC7EQVgaCHO7RQk= -SHA256 (Pkgfile) = d0aa55dd347380b7c591e1c10be585a235d9f1df2aad09a845b0039496858cce +RWSagIOpLGJF3+NkrNms7PuODBAq09crM5SL12Q8AwljdJmBtmJUtSyspK68KthVhR3Nob3ca/lbLTmE0lQ7LlsMc+byJ/onCAk= +SHA256 (Pkgfile) = da6ba78f3a95c480914b2179941b2619c8b54ee793ff275f1a9fcc0b41c1553b SHA256 (.footprint) = 76cf242dac27363a8a964536eda5e54f00953e79380ee493090ca249bd688920 SHA256 (sway-1.9.tar.gz) = b6e4e8d74af744278201792bcc4447470fcb91e15bbda475c647d475bf8e7b0b -SHA256 (6249.patch) = 80aa3e8f44f91591e88059172518198ab2ae59c694f8f6762dcd6512bb7657dd +SHA256 (6249.patch) = 3686e3c3784a2119f00d237df8a4380a8c8fc28ae2999daac1c855a1e2a9a3d4 diff --git a/sway/6249.patch b/sway/6249.patch index f90fcf21c..49e2f9188 100644 --- a/sway/6249.patch +++ b/sway/6249.patch @@ -1,7 +1,8 @@ -diff -Naur sway-1.9-rc1.orig/include/swaybar/bar.h sway-1.9-rc1/include/swaybar/bar.h ---- sway-1.9-rc1.orig/include/swaybar/bar.h 2024-01-28 19:08:45.574503847 +0100 -+++ sway-1.9-rc1/include/swaybar/bar.h 2024-01-28 19:09:13.007620155 +0100 -@@ -33,6 +33,7 @@ +diff --git a/include/swaybar/bar.h b/include/swaybar/bar.h +index 197d2190..d0b3dc81 100644 +--- a/include/swaybar/bar.h ++++ b/include/swaybar/bar.h +@@ -33,6 +33,7 @@ struct swaybar { struct zxdg_output_manager_v1 *xdg_output_manager; struct wp_cursor_shape_manager_v1 *cursor_shape_manager; struct wl_shm *shm; @@ -9,131 +10,10 @@ diff -Naur sway-1.9-rc1.orig/include/swaybar/bar.h sway-1.9-rc1/include/swaybar/ struct swaybar_config *config; struct status_line *status; -diff -Naur sway-1.9-rc1.orig/include/swaybar/bar.h.orig sway-1.9-rc1/include/swaybar/bar.h.orig ---- sway-1.9-rc1.orig/include/swaybar/bar.h.orig 1970-01-01 01:00:00.000000000 +0100 -+++ sway-1.9-rc1/include/swaybar/bar.h.orig 2024-01-26 15:26:37.000000000 +0100 -@@ -0,0 +1,118 @@ -+#ifndef _SWAYBAR_BAR_H -+#define _SWAYBAR_BAR_H -+#include -+#include "config.h" -+#include "input.h" -+#include "pool-buffer.h" -+#include "cursor-shape-v1-client-protocol.h" -+#include "wlr-layer-shell-unstable-v1-client-protocol.h" -+#include "xdg-output-unstable-v1-client-protocol.h" -+ -+struct swaybar_config; -+struct swaybar_output; -+#if HAVE_TRAY -+struct swaybar_tray; -+#endif -+struct swaybar_workspace; -+struct loop; -+ -+struct swaybar { -+ char *id; -+ char *mode; -+ bool mode_pango_markup; -+ -+ // only relevant when bar is in "hide" mode -+ bool visible_by_modifier; -+ bool visible_by_urgency; -+ bool visible_by_mode; -+ bool visible; -+ -+ struct wl_display *display; -+ struct wl_compositor *compositor; -+ struct zwlr_layer_shell_v1 *layer_shell; -+ struct zxdg_output_manager_v1 *xdg_output_manager; -+ struct wp_cursor_shape_manager_v1 *cursor_shape_manager; -+ struct wl_shm *shm; -+ -+ struct swaybar_config *config; -+ struct status_line *status; -+ -+ struct loop *eventloop; -+ -+ int ipc_event_socketfd; -+ int ipc_socketfd; -+ -+ struct wl_list outputs; // swaybar_output::link -+ struct wl_list unused_outputs; // swaybar_output::link -+ struct wl_list seats; // swaybar_seat::link -+ -+#if HAVE_TRAY -+ struct swaybar_tray *tray; -+#endif -+ -+ bool running; -+}; -+ -+struct swaybar_output { -+ struct wl_list link; // swaybar::outputs -+ struct swaybar *bar; -+ struct wl_output *output; -+ struct zxdg_output_v1 *xdg_output; -+ struct wl_surface *surface; -+ struct zwlr_layer_surface_v1 *layer_surface; -+ uint32_t wl_name; -+ -+ struct wl_list workspaces; // swaybar_workspace::link -+ struct wl_list hotspots; // swaybar_hotspot::link -+ -+ char *name; -+ char *identifier; -+ bool focused; -+ -+ uint32_t width, height; -+ int32_t scale; -+ enum wl_output_subpixel subpixel; -+ struct pool_buffer buffers[2]; -+ struct pool_buffer *current_buffer; -+ bool dirty; -+ bool frame_scheduled; -+ -+ uint32_t output_height, output_width, output_x, output_y; -+}; -+ -+struct swaybar_workspace { -+ struct wl_list link; // swaybar_output::workspaces -+ int num; -+ char *name; -+ char *label; -+ bool focused; -+ bool visible; -+ bool urgent; -+}; -+ -+bool bar_setup(struct swaybar *bar, const char *socket_path); -+void bar_run(struct swaybar *bar); -+void bar_teardown(struct swaybar *bar); -+ -+void set_bar_dirty(struct swaybar *bar); -+ -+/* -+ * Determines whether the bar should be visible and changes it to be so. -+ * If the current visibility of the bar is the different to what it should be, -+ * then it adds or destroys the layer surface as required, -+ * as well as sending the cont or stop signal to the status command. -+ * If the current visibility of the bar is already what it should be, -+ * then this function is a no-op, unless moving_layer is true, which occurs -+ * when the bar changes from "hide" to "dock" mode or vice versa, and the bar -+ * needs to be destroyed and re-added in order to change its layer. -+ * -+ * Returns true if the bar is now visible, otherwise false. -+ */ -+bool determine_bar_visibility(struct swaybar *bar, bool moving_layer); -+void free_workspaces(struct wl_list *list); -+ -+void status_in(int fd, short mask, void *data); -+ -+void destroy_layer_surface(struct swaybar_output *output); -+ -+#endif -diff -Naur sway-1.9-rc1.orig/include/swaybar/input.h sway-1.9-rc1/include/swaybar/input.h ---- sway-1.9-rc1.orig/include/swaybar/input.h 2024-01-28 19:08:45.574503847 +0100 -+++ sway-1.9-rc1/include/swaybar/input.h 2024-01-28 19:09:13.007620155 +0100 +diff --git a/include/swaybar/input.h b/include/swaybar/input.h +index 8ea88a69..81ccaa98 100644 +--- a/include/swaybar/input.h ++++ b/include/swaybar/input.h @@ -15,6 +15,7 @@ struct swaybar; @@ -142,7 +22,7 @@ diff -Naur sway-1.9-rc1.orig/include/swaybar/input.h sway-1.9-rc1/include/swayba struct swaybar_pointer { struct wl_pointer *pointer; -@@ -48,8 +49,8 @@ +@@ -48,8 +49,8 @@ struct swaybar_hotspot { struct wl_list link; // swaybar_output::hotspots int x, y, width, height; enum hotspot_event_handling (*callback)(struct swaybar_output *output, @@ -153,9 +33,11 @@ diff -Naur sway-1.9-rc1.orig/include/swaybar/input.h sway-1.9-rc1/include/swayba void (*destroy)(void *data); void *data; }; -diff -Naur sway-1.9-rc1.orig/include/swaybar/tray/dbusmenu.h sway-1.9-rc1/include/swaybar/tray/dbusmenu.h ---- sway-1.9-rc1.orig/include/swaybar/tray/dbusmenu.h 1970-01-01 01:00:00.000000000 +0100 -+++ sway-1.9-rc1/include/swaybar/tray/dbusmenu.h 2024-01-28 19:09:13.007620155 +0100 +diff --git a/include/swaybar/tray/dbusmenu.h b/include/swaybar/tray/dbusmenu.h +new file mode 100644 +index 00000000..dc90f6e5 +--- /dev/null ++++ b/include/swaybar/tray/dbusmenu.h @@ -0,0 +1,27 @@ +#ifndef _SWAYBAR_TRAY_DBUSMENU_H +#define _SWAYBAR_TRAY_DBUSMENU_H @@ -184,10 +66,11 @@ diff -Naur sway-1.9-rc1.orig/include/swaybar/tray/dbusmenu.h sway-1.9-rc1/includ +bool dbusmenu_pointer_axis(struct swaybar_seat *data, struct wl_pointer *wl_pointer); + +#endif -diff -Naur sway-1.9-rc1.orig/include/swaybar/tray/item.h sway-1.9-rc1/include/swaybar/tray/item.h ---- sway-1.9-rc1.orig/include/swaybar/tray/item.h 2024-01-28 19:08:45.574503847 +0100 -+++ sway-1.9-rc1/include/swaybar/tray/item.h 2024-01-28 19:09:13.007620155 +0100 -@@ -18,6 +18,7 @@ +diff --git a/include/swaybar/tray/item.h b/include/swaybar/tray/item.h +index 73937a0c..9a4a00ff 100644 +--- a/include/swaybar/tray/item.h ++++ b/include/swaybar/tray/item.h +@@ -18,6 +18,7 @@ struct swaybar_pixmap { struct swaybar_sni_slot { struct wl_list link; // swaybar_sni::slots struct swaybar_sni *sni; @@ -195,7 +78,7 @@ diff -Naur sway-1.9-rc1.orig/include/swaybar/tray/item.h sway-1.9-rc1/include/sw const char *prop; const char *type; void *dest; -@@ -48,6 +49,7 @@ +@@ -48,6 +49,7 @@ struct swaybar_sni { char *icon_theme_path; // non-standard KDE property struct wl_list slots; // swaybar_sni_slot::link @@ -203,10 +86,11 @@ diff -Naur sway-1.9-rc1.orig/include/swaybar/tray/item.h sway-1.9-rc1/include/sw }; struct swaybar_sni *create_sni(char *id, struct swaybar_tray *tray); -diff -Naur sway-1.9-rc1.orig/include/swaybar/tray/tray.h sway-1.9-rc1/include/swaybar/tray/tray.h ---- sway-1.9-rc1.orig/include/swaybar/tray/tray.h 2024-01-28 19:08:45.574503847 +0100 -+++ sway-1.9-rc1/include/swaybar/tray/tray.h 2024-01-28 19:09:13.007620155 +0100 -@@ -32,6 +32,9 @@ +diff --git a/include/swaybar/tray/tray.h b/include/swaybar/tray/tray.h +index d2e80a6d..853f17cd 100644 +--- a/include/swaybar/tray/tray.h ++++ b/include/swaybar/tray/tray.h +@@ -32,6 +32,9 @@ struct swaybar_tray { list_t *basedirs; // char * list_t *themes; // struct swaybar_theme * @@ -216,9 +100,10 @@ diff -Naur sway-1.9-rc1.orig/include/swaybar/tray/tray.h sway-1.9-rc1/include/sw }; struct swaybar_tray *create_tray(struct swaybar *bar); -diff -Naur sway-1.9-rc1.orig/swaybar/bar.c sway-1.9-rc1/swaybar/bar.c ---- sway-1.9-rc1.orig/swaybar/bar.c 2024-01-28 19:08:45.578503864 +0100 -+++ sway-1.9-rc1/swaybar/bar.c 2024-01-28 19:13:44.806046172 +0100 +diff --git a/swaybar/bar.c b/swaybar/bar.c +index 021fc3bd..9c83db3e 100644 +--- a/swaybar/bar.c ++++ b/swaybar/bar.c @@ -29,6 +29,7 @@ #include "pool-buffer.h" #include "wlr-layer-shell-unstable-v1-client-protocol.h" @@ -227,16 +112,16 @@ diff -Naur sway-1.9-rc1.orig/swaybar/bar.c sway-1.9-rc1/swaybar/bar.c void free_workspaces(struct wl_list *list) { struct swaybar_workspace *ws, *tmp; -@@ -362,6 +363,8 @@ - } else if (strcmp(interface, zxdg_output_manager_v1_interface.name) == 0) { - bar->xdg_output_manager = wl_registry_bind(registry, name, - &zxdg_output_manager_v1_interface, 2); -+ } else if (strcmp(interface, xdg_wm_base_interface.name) == 0) { -+ bar->wm_base = wl_registry_bind(registry, name, &xdg_wm_base_interface, 1); +@@ -365,6 +366,8 @@ static void handle_global(void *data, struct wl_registry *registry, } else if (strcmp(interface, wp_cursor_shape_manager_v1_interface.name) == 0) { bar->cursor_shape_manager = wl_registry_bind(registry, name, &wp_cursor_shape_manager_v1_interface, 1); -@@ -539,6 +542,7 @@ ++ } else if (strcmp(interface, xdg_wm_base_interface.name) == 0) { ++ bar->wm_base = wl_registry_bind(registry, name, &xdg_wm_base_interface, 1); + } + } + +@@ -539,6 +542,7 @@ void bar_teardown(struct swaybar *bar) { #if HAVE_TRAY destroy_tray(bar->tray); #endif @@ -244,9 +129,10 @@ diff -Naur sway-1.9-rc1.orig/swaybar/bar.c sway-1.9-rc1/swaybar/bar.c free_outputs(&bar->outputs); free_outputs(&bar->unused_outputs); free_seats(&bar->seats); -diff -Naur sway-1.9-rc1.orig/swaybar/input.c sway-1.9-rc1/swaybar/input.c ---- sway-1.9-rc1.orig/swaybar/input.c 2024-01-28 19:08:45.578503864 +0100 -+++ sway-1.9-rc1/swaybar/input.c 2024-01-28 19:12:59.419072660 +0100 +diff --git a/swaybar/input.c b/swaybar/input.c +index ada4bc86..54e1d5cd 100644 +--- a/swaybar/input.c ++++ b/swaybar/input.c @@ -10,6 +10,10 @@ #include "swaybar/input.h" #include "swaybar/ipc.h" @@ -258,32 +144,49 @@ diff -Naur sway-1.9-rc1.orig/swaybar/input.c sway-1.9-rc1/swaybar/input.c void free_hotspots(struct wl_list *list) { struct swaybar_hotspot *hotspot, *tmp; wl_list_for_each_safe(hotspot, tmp, list, link) { -@@ -130,6 +134,12 @@ - } else { +@@ -131,11 +135,27 @@ static void wl_pointer_enter(void *data, struct wl_pointer *wl_pointer, pointer->serial = serial; update_cursor(seat); + } ++ +#if HAVE_TRAY -+ if (dbusmenu_pointer_enter(data, wl_pointer, serial, surface, surface_x, -+ surface_y)) { ++ struct swaybar_config *config = seat->bar->config; ++ if (!config->tray_hidden && dbusmenu_pointer_enter(data, wl_pointer, serial, ++ surface, surface_x, surface_y)) { + return; + } +#endif - } } -@@ -144,6 +154,11 @@ + static void wl_pointer_leave(void *data, struct wl_pointer *wl_pointer, + uint32_t serial, struct wl_surface *surface) { ++#if HAVE_TRAY + struct swaybar_seat *seat = data; ++ struct swaybar_config *config = seat->bar->config; ++ if (!config->tray_hidden && dbusmenu_pointer_leave(data, wl_pointer, serial, ++ surface)) { ++ return; ++ } ++#endif ++ + seat->pointer.current = NULL; + } + +@@ -144,6 +164,13 @@ static void wl_pointer_motion(void *data, struct wl_pointer *wl_pointer, struct swaybar_seat *seat = data; seat->pointer.x = wl_fixed_to_double(surface_x); seat->pointer.y = wl_fixed_to_double(surface_y); +#if HAVE_TRAY -+ if (dbusmenu_pointer_motion(data, wl_pointer, time, surface_x, surface_y)) { ++ struct swaybar_config *config = seat->bar->config; ++ if (!config->tray_hidden && dbusmenu_pointer_motion(data, wl_pointer, time, ++ surface_x, surface_y)) { + return; + } +#endif } static bool check_bindings(struct swaybar *bar, uint32_t button, -@@ -160,6 +175,7 @@ +@@ -160,6 +187,7 @@ static bool check_bindings(struct swaybar *bar, uint32_t button, } static bool process_hotspots(struct swaybar_output *output, @@ -291,7 +194,7 @@ diff -Naur sway-1.9-rc1.orig/swaybar/input.c sway-1.9-rc1/swaybar/input.c double x, double y, uint32_t button, uint32_t state) { bool released = state == WL_POINTER_BUTTON_STATE_RELEASED; struct swaybar_hotspot *hotspot; -@@ -167,7 +183,7 @@ +@@ -167,7 +195,7 @@ static bool process_hotspots(struct swaybar_output *output, if (x >= hotspot->x && y >= hotspot->y && x < hotspot->x + hotspot->width && y < hotspot->y + hotspot->height) { @@ -300,13 +203,14 @@ diff -Naur sway-1.9-rc1.orig/swaybar/input.c sway-1.9-rc1/swaybar/input.c button, released, hotspot->data)) { return true; } -@@ -180,13 +196,19 @@ +@@ -180,13 +208,20 @@ static bool process_hotspots(struct swaybar_output *output, static void wl_pointer_button(void *data, struct wl_pointer *wl_pointer, uint32_t serial, uint32_t time, uint32_t button, uint32_t state) { struct swaybar_seat *seat = data; +#if HAVE_TRAY -+ if (dbusmenu_pointer_button(seat, wl_pointer, serial, time, button, -+ state)) { ++ struct swaybar_config *config = seat->bar->config; ++ if (!config->tray_hidden && dbusmenu_pointer_button(seat, wl_pointer, serial, ++ time, button, state)) { + return; + } +#endif @@ -321,7 +225,7 @@ diff -Naur sway-1.9-rc1.orig/swaybar/input.c sway-1.9-rc1/swaybar/input.c return; } -@@ -240,7 +262,7 @@ +@@ -240,7 +275,7 @@ static void process_discrete_scroll(struct swaybar_seat *seat, struct swaybar_output *output, struct swaybar_pointer *pointer, uint32_t axis, wl_fixed_t value) { uint32_t button = wl_axis_to_button(axis, value); @@ -330,12 +234,13 @@ diff -Naur sway-1.9-rc1.orig/swaybar/input.c sway-1.9-rc1/swaybar/input.c // (Currently hotspots don't do anything on release events, so no need to emit one) return; } -@@ -297,6 +319,12 @@ +@@ -297,6 +332,13 @@ static void wl_pointer_axis(void *data, struct wl_pointer *wl_pointer, return; } +#if HAVE_TRAY -+ if (dbusmenu_pointer_axis(data, wl_pointer)) { ++ struct swaybar_config *config = seat->bar->config; ++ if (!config->tray_hidden && dbusmenu_pointer_axis(data, wl_pointer)) { + return; + } +#endif @@ -343,12 +248,13 @@ diff -Naur sway-1.9-rc1.orig/swaybar/input.c sway-1.9-rc1/swaybar/input.c // If there's a while since the last scroll event, // set 'value' to zero as if to reset the "virtual scroll wheel" if (seat->axis[axis].discrete_steps == 0 && -@@ -313,6 +341,12 @@ +@@ -313,6 +355,13 @@ static void wl_pointer_frame(void *data, struct wl_pointer *wl_pointer) { struct swaybar_pointer *pointer = &seat->pointer; struct swaybar_output *output = pointer->current; +#if HAVE_TRAY -+ if (dbusmenu_pointer_frame(data, wl_pointer)) { ++ struct swaybar_config *config = seat->bar->config; ++ if (!config->tray_hidden && dbusmenu_pointer_frame(data, wl_pointer)) { + return; + } +#endif @@ -356,7 +262,7 @@ diff -Naur sway-1.9-rc1.orig/swaybar/input.c sway-1.9-rc1/swaybar/input.c if (output == NULL) { return; } -@@ -420,7 +454,7 @@ +@@ -420,7 +469,7 @@ static void wl_touch_up(void *data, struct wl_touch *wl_touch, } if (time - slot->time < 500) { // Tap, treat it like a pointer click @@ -365,10 +271,11 @@ diff -Naur sway-1.9-rc1.orig/swaybar/input.c sway-1.9-rc1/swaybar/input.c // (Currently hotspots don't do anything on release events, so no need to emit one) } slot->output = NULL; -diff -Naur sway-1.9-rc1.orig/swaybar/meson.build sway-1.9-rc1/swaybar/meson.build ---- sway-1.9-rc1.orig/swaybar/meson.build 2024-01-28 19:08:45.578503864 +0100 -+++ sway-1.9-rc1/swaybar/meson.build 2024-01-28 19:09:13.007620155 +0100 -@@ -3,7 +3,8 @@ +diff --git a/swaybar/meson.build b/swaybar/meson.build +index e5f1811e..fef1ee77 100644 +--- a/swaybar/meson.build ++++ b/swaybar/meson.build +@@ -3,7 +3,8 @@ tray_files = have_tray ? [ 'tray/icon.c', 'tray/item.c', 'tray/tray.c', @@ -378,10 +285,11 @@ diff -Naur sway-1.9-rc1.orig/swaybar/meson.build sway-1.9-rc1/swaybar/meson.buil ] : [] swaybar_deps = [ -diff -Naur sway-1.9-rc1.orig/swaybar/render.c sway-1.9-rc1/swaybar/render.c ---- sway-1.9-rc1.orig/swaybar/render.c 2024-01-28 19:08:45.578503864 +0100 -+++ sway-1.9-rc1/swaybar/render.c 2024-01-28 19:09:13.007620155 +0100 -@@ -160,6 +160,7 @@ +diff --git a/swaybar/render.c b/swaybar/render.c +index 1113ca44..7769063d 100644 +--- a/swaybar/render.c ++++ b/swaybar/render.c +@@ -160,6 +160,7 @@ static void render_sharp_line(cairo_t *cairo, uint32_t color, static enum hotspot_event_handling block_hotspot_callback( struct swaybar_output *output, struct swaybar_hotspot *hotspot, @@ -389,7 +297,7 @@ diff -Naur sway-1.9-rc1.orig/swaybar/render.c sway-1.9-rc1/swaybar/render.c double x, double y, uint32_t button, bool released, void *data) { struct i3bar_block *block = data; struct status_line *status = output->bar->status; -@@ -599,6 +600,7 @@ +@@ -599,6 +600,7 @@ static uint32_t render_binding_mode_indicator(struct render_context *ctx, static enum hotspot_event_handling workspace_hotspot_callback( struct swaybar_output *output, struct swaybar_hotspot *hotspot, @@ -397,9 +305,11 @@ diff -Naur sway-1.9-rc1.orig/swaybar/render.c sway-1.9-rc1/swaybar/render.c double x, double y, uint32_t button, bool released, void *data) { if (button != BTN_LEFT) { return HOTSPOT_PROCESS; -diff -Naur sway-1.9-rc1.orig/swaybar/tray/dbusmenu.c sway-1.9-rc1/swaybar/tray/dbusmenu.c ---- sway-1.9-rc1.orig/swaybar/tray/dbusmenu.c 1970-01-01 01:00:00.000000000 +0100 -+++ sway-1.9-rc1/swaybar/tray/dbusmenu.c 2024-01-28 19:09:13.008620160 +0100 +diff --git a/swaybar/tray/dbusmenu.c b/swaybar/tray/dbusmenu.c +new file mode 100644 +index 00000000..423abc42 +--- /dev/null ++++ b/swaybar/tray/dbusmenu.c @@ -0,0 +1,1367 @@ +#define _POSIX_C_SOURCE 200809L +#include @@ -995,7 +905,7 @@ diff -Naur sway-1.9-rc1.orig/swaybar/tray/dbusmenu.c sway-1.9-rc1/swaybar/tray/d + cairo_surface_destroy(recorder); + return; + } -+ int surface_x, surface_y, surface_width, surface_height; ++ int surface_x, surface_y, surface_width, surface_height = 0; + draw_menu_items(cairo, menu, &surface_x, &surface_y, &surface_width, + &surface_height, open); + @@ -1768,9 +1678,10 @@ diff -Naur sway-1.9-rc1.orig/swaybar/tray/dbusmenu.c sway-1.9-rc1/swaybar/tray/d + + return false; +} -diff -Naur sway-1.9-rc1.orig/swaybar/tray/item.c sway-1.9-rc1/swaybar/tray/item.c ---- sway-1.9-rc1.orig/swaybar/tray/item.c 2024-01-28 19:08:45.578503864 +0100 -+++ sway-1.9-rc1/swaybar/tray/item.c 2024-01-28 19:09:13.008620160 +0100 +diff --git a/swaybar/tray/item.c b/swaybar/tray/item.c +index 1f18b8bb..d159640f 100644 +--- a/swaybar/tray/item.c ++++ b/swaybar/tray/item.c @@ -8,6 +8,7 @@ #include "swaybar/bar.h" #include "swaybar/config.h" @@ -1779,7 +1690,7 @@ diff -Naur sway-1.9-rc1.orig/swaybar/tray/item.c sway-1.9-rc1/swaybar/tray/item. #include "swaybar/tray/host.h" #include "swaybar/tray/icon.h" #include "swaybar/tray/item.h" -@@ -333,8 +334,9 @@ +@@ -333,8 +334,9 @@ void destroy_sni(struct swaybar_sni *sni) { free(sni); } @@ -1791,7 +1702,7 @@ diff -Naur sway-1.9-rc1.orig/swaybar/tray/item.c sway-1.9-rc1/swaybar/tray/item. const char *method = NULL; struct tray_binding *binding = NULL; wl_list_for_each(binding, &sni->tray->bar->config->tray_bindings, link) { -@@ -365,7 +367,11 @@ +@@ -365,7 +367,11 @@ static void handle_click(struct swaybar_sni *sni, int x, int y, method = "ContextMenu"; } @@ -1804,7 +1715,7 @@ diff -Naur sway-1.9-rc1.orig/swaybar/tray/item.c sway-1.9-rc1/swaybar/tray/item. char dir = method[strlen("Scroll")]; char *orientation = (dir == 'U' || dir == 'D') ? "vertical" : "horizontal"; int sign = (dir == 'U' || dir == 'L') ? -1 : 1; -@@ -385,6 +391,7 @@ +@@ -385,6 +391,7 @@ static int cmp_sni_id(const void *item, const void *cmp_to) { static enum hotspot_event_handling icon_hotspot_callback( struct swaybar_output *output, struct swaybar_hotspot *hotspot, @@ -1812,7 +1723,7 @@ diff -Naur sway-1.9-rc1.orig/swaybar/tray/item.c sway-1.9-rc1/swaybar/tray/item. double x, double y, uint32_t button, bool released, void *data) { sway_log(SWAY_DEBUG, "Clicked on %s", (char *)data); -@@ -406,7 +413,8 @@ +@@ -406,7 +413,8 @@ static enum hotspot_event_handling icon_hotspot_callback( (int) output->output_height - config->gaps.bottom - y); sway_log(SWAY_DEBUG, "Guessing click position at (%d, %d)", global_x, global_y); @@ -1822,3 +1733,16 @@ diff -Naur sway-1.9-rc1.orig/swaybar/tray/item.c sway-1.9-rc1/swaybar/tray/item. return HOTSPOT_IGNORE; } else { sway_log(SWAY_DEBUG, "but it doesn't exist"); +diff --git a/swaybar/tray/tray.c b/swaybar/tray/tray.c +index b0545f4a..e4a68034 100644 +--- a/swaybar/tray/tray.c ++++ b/swaybar/tray/tray.c +@@ -110,7 +110,7 @@ static int cmp_output(const void *item, const void *cmp_to) { + + uint32_t render_tray(cairo_t *cairo, struct swaybar_output *output, double *x) { + struct swaybar_config *config = output->bar->config; +- if (config->tray_outputs) { ++ if (config->tray_outputs && !config->tray_hidden) { + if (list_seq_find(config->tray_outputs, cmp_output, output) == -1) { + return 0; + } diff --git a/sway/Pkgfile b/sway/Pkgfile index e2cd637d5..8fa0aeb57 100644 --- a/sway/Pkgfile +++ b/sway/Pkgfile @@ -6,7 +6,7 @@ name=sway version=1.9 -release=1 +release=2 source=(https://github.com/swaywm/sway/archive/$version/$name-$version.tar.gz 6249.patch)