From d8f68b892984b198a739497b3076745abadff912 Mon Sep 17 00:00:00 2001 From: Gwenhael Le Moine Date: Mon, 6 May 2024 10:57:10 +0200 Subject: [PATCH] [sway] found new tray-menu patch(es) --- wayland/sway/SlackBuild | 14 +-- ...7aed84415a77b718ca9dc3c0b3ad2c05b02.patch} | 50 +++++----- ...4421354e54332e12f78d029dcaa9919fd161.patch | 99 +++++++++++++++++++ 3 files changed, 131 insertions(+), 32 deletions(-) rename wayland/sway/patches/{6249-tray-menu.patch => a_0fc5d7aed84415a77b718ca9dc3c0b3ad2c05b02.patch} (97%) create mode 100644 wayland/sway/patches/b_03c14421354e54332e12f78d029dcaa9919fd161.patch diff --git a/wayland/sway/SlackBuild b/wayland/sway/SlackBuild index 9ca3ebc4..9cf876cc 100755 --- a/wayland/sway/SlackBuild +++ b/wayland/sway/SlackBuild @@ -3,7 +3,7 @@ # variables GITHUB_REPO=swaywm/sway VERSION=${VERSION:-"latest"} -BUILD=12 +BUILD=13 TAG=gwh OUTPUT=/tmp @@ -56,12 +56,12 @@ PKGNAM=${PRGNAM} ########### # Tray-menu patch -PATCH_6249=${PATCH_6249:-"no"} -if [ "$PATCH_6249" = "yes" ]; then - [ -e "$CWD"/patches/6249-tray-menu.patch ] && mv "$CWD"/patches/6249-tray-menu.patch{,.previous} - wget -c https://patch-diff.githubusercontent.com/raw/swaywm/sway/pull/6249.patch -O "$CWD"/patches/6249-tray-menu.patch - patch -p1 < "$CWD"/patches/6249-tray-menu.patch - PKGVERSION="${PKGVERSION}_p6249" +PATCH=${PATCH:-"no"} +if [ "$PATCH" = "yes" ]; then + for p in "$CWD"/patches/*.patch; do + patch -p1 < "$p" + done + PKGVERSION="${PKGVERSION}_patched" fi ###################### diff --git a/wayland/sway/patches/6249-tray-menu.patch b/wayland/sway/patches/a_0fc5d7aed84415a77b718ca9dc3c0b3ad2c05b02.patch similarity index 97% rename from wayland/sway/patches/6249-tray-menu.patch rename to wayland/sway/patches/a_0fc5d7aed84415a77b718ca9dc3c0b3ad2c05b02.patch index 4d148fff..421d833a 100644 --- a/wayland/sway/patches/6249-tray-menu.patch +++ b/wayland/sway/patches/a_0fc5d7aed84415a77b718ca9dc3c0b3ad2c05b02.patch @@ -1,4 +1,4 @@ -From 2f304ef0532a45d00b2ec2c7fc63adef0aec7607 Mon Sep 17 00:00:00 2001 +From 0fc5d7aed84415a77b718ca9dc3c0b3ad2c05b02 Mon Sep 17 00:00:00 2001 From: Felix Weilbach Date: Sun, 30 May 2021 20:45:01 +0200 Subject: [PATCH] Tray: Implement dbusmenu @@ -24,12 +24,12 @@ Signed-off-by: Felix Weilbach create mode 100644 swaybar/tray/dbusmenu.c diff --git a/include/swaybar/bar.h b/include/swaybar/bar.h -index 3ad0bdf3ce..3c0b49265e 100644 +index 197d219011..d0b3dc8153 100644 --- a/include/swaybar/bar.h +++ b/include/swaybar/bar.h -@@ -31,6 +31,7 @@ struct swaybar { - struct zwlr_layer_shell_v1 *layer_shell; +@@ -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; + struct xdg_wm_base *wm_base; @@ -126,7 +126,7 @@ index d2e80a6d47..853f17cdc1 100644 struct swaybar_tray *create_tray(struct swaybar *bar); diff --git a/swaybar/bar.c b/swaybar/bar.c -index 5e4ebd97c9..177b870b48 100644 +index 021fc3bdb5..9c83db3e54 100644 --- a/swaybar/bar.c +++ b/swaybar/bar.c @@ -29,6 +29,7 @@ @@ -137,16 +137,16 @@ index 5e4ebd97c9..177b870b48 100644 void free_workspaces(struct wl_list *list) { struct swaybar_workspace *ws, *tmp; -@@ -362,6 +363,8 @@ static void handle_global(void *data, struct wl_registry *registry, - } 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); +@@ -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); + } else if (strcmp(interface, xdg_wm_base_interface.name) == 0) { + bar->wm_base = wl_registry_bind(registry, name, &xdg_wm_base_interface, 1); } } -@@ -534,6 +537,7 @@ void bar_teardown(struct swaybar *bar) { +@@ -539,6 +542,7 @@ void bar_teardown(struct swaybar *bar) { #if HAVE_TRAY destroy_tray(bar->tray); #endif @@ -155,7 +155,7 @@ index 5e4ebd97c9..177b870b48 100644 free_outputs(&bar->unused_outputs); free_seats(&bar->seats); diff --git a/swaybar/input.c b/swaybar/input.c -index 8eccf5420b..4ee4915991 100644 +index ada4bc8624..dfac5480f4 100644 --- a/swaybar/input.c +++ b/swaybar/input.c @@ -10,6 +10,10 @@ @@ -169,10 +169,10 @@ index 8eccf5420b..4ee4915991 100644 void free_hotspots(struct wl_list *list) { struct swaybar_hotspot *hotspot, *tmp; wl_list_for_each_safe(hotspot, tmp, list, link) { -@@ -112,10 +116,23 @@ static void wl_pointer_enter(void *data, struct wl_pointer *wl_pointer, - } +@@ -131,10 +135,23 @@ static void wl_pointer_enter(void *data, struct wl_pointer *wl_pointer, + pointer->serial = serial; + update_cursor(seat); } - update_cursor(seat); + +#if HAVE_TRAY + if (dbusmenu_pointer_enter(data, wl_pointer, serial, surface, surface_x, @@ -193,7 +193,7 @@ index 8eccf5420b..4ee4915991 100644 struct swaybar_seat *seat = data; seat->pointer.current = NULL; } -@@ -125,6 +142,11 @@ static void wl_pointer_motion(void *data, struct wl_pointer *wl_pointer, +@@ -144,6 +161,11 @@ 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); @@ -205,7 +205,7 @@ index 8eccf5420b..4ee4915991 100644 } static bool check_bindings(struct swaybar *bar, uint32_t button, -@@ -141,6 +163,7 @@ static bool check_bindings(struct swaybar *bar, uint32_t button, +@@ -160,6 +182,7 @@ static bool check_bindings(struct swaybar *bar, uint32_t button, } static bool process_hotspots(struct swaybar_output *output, @@ -213,7 +213,7 @@ index 8eccf5420b..4ee4915991 100644 double x, double y, uint32_t button, uint32_t state) { bool released = state == WL_POINTER_BUTTON_STATE_RELEASED; struct swaybar_hotspot *hotspot; -@@ -148,7 +171,7 @@ static bool process_hotspots(struct swaybar_output *output, +@@ -167,7 +190,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) { @@ -222,7 +222,7 @@ index 8eccf5420b..4ee4915991 100644 button, released, hotspot->data)) { return true; } -@@ -161,13 +184,19 @@ static bool process_hotspots(struct swaybar_output *output, +@@ -180,13 +203,19 @@ 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; @@ -243,7 +243,7 @@ index 8eccf5420b..4ee4915991 100644 return; } -@@ -221,7 +250,7 @@ static void process_discrete_scroll(struct swaybar_seat *seat, +@@ -240,7 +269,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); @@ -252,7 +252,7 @@ index 8eccf5420b..4ee4915991 100644 // (Currently hotspots don't do anything on release events, so no need to emit one) return; } -@@ -278,6 +307,12 @@ static void wl_pointer_axis(void *data, struct wl_pointer *wl_pointer, +@@ -297,6 +326,12 @@ static void wl_pointer_axis(void *data, struct wl_pointer *wl_pointer, return; } @@ -265,7 +265,7 @@ index 8eccf5420b..4ee4915991 100644 // 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 && -@@ -294,6 +329,12 @@ static void wl_pointer_frame(void *data, struct wl_pointer *wl_pointer) { +@@ -313,6 +348,12 @@ static void wl_pointer_frame(void *data, struct wl_pointer *wl_pointer) { struct swaybar_pointer *pointer = &seat->pointer; struct swaybar_output *output = pointer->current; @@ -278,7 +278,7 @@ index 8eccf5420b..4ee4915991 100644 if (output == NULL) { return; } -@@ -401,7 +442,7 @@ static void wl_touch_up(void *data, struct wl_touch *wl_touch, +@@ -420,7 +461,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 @@ -302,7 +302,7 @@ index e5f1811eb0..fef1ee778f 100644 swaybar_deps = [ diff --git a/swaybar/render.c b/swaybar/render.c -index ccf3656378..2385a2f46d 100644 +index 1113ca44a1..7769063d0f 100644 --- a/swaybar/render.c +++ b/swaybar/render.c @@ -160,6 +160,7 @@ static void render_sharp_line(cairo_t *cairo, uint32_t color, @@ -323,7 +323,7 @@ index ccf3656378..2385a2f46d 100644 return HOTSPOT_PROCESS; diff --git a/swaybar/tray/dbusmenu.c b/swaybar/tray/dbusmenu.c new file mode 100644 -index 0000000000..8821cacaec +index 0000000000..423abc425e --- /dev/null +++ b/swaybar/tray/dbusmenu.c @@ -0,0 +1,1367 @@ @@ -921,7 +921,7 @@ index 0000000000..8821cacaec + 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); + diff --git a/wayland/sway/patches/b_03c14421354e54332e12f78d029dcaa9919fd161.patch b/wayland/sway/patches/b_03c14421354e54332e12f78d029dcaa9919fd161.patch new file mode 100644 index 00000000..f3ca3eb4 --- /dev/null +++ b/wayland/sway/patches/b_03c14421354e54332e12f78d029dcaa9919fd161.patch @@ -0,0 +1,99 @@ +From 03c14421354e54332e12f78d029dcaa9919fd161 Mon Sep 17 00:00:00 2001 +From: Florian Franzen +Date: Sat, 2 Mar 2024 11:19:37 +0000 +Subject: [PATCH] Tray: don't invoke dbus menu when tray is disabled + +--- + swaybar/input.c | 26 +++++++++++++++++--------- + swaybar/tray/tray.c | 2 +- + 2 files changed, 18 insertions(+), 10 deletions(-) + +diff --git a/swaybar/input.c b/swaybar/input.c +index dfac5480f4..54e1d5cde5 100644 +--- a/swaybar/input.c ++++ b/swaybar/input.c +@@ -137,8 +137,9 @@ static void wl_pointer_enter(void *data, struct wl_pointer *wl_pointer, + } + + #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 +@@ -147,12 +148,14 @@ static void wl_pointer_enter(void *data, struct wl_pointer *wl_pointer, + static void wl_pointer_leave(void *data, struct wl_pointer *wl_pointer, + uint32_t serial, struct wl_surface *surface) { + #if HAVE_TRAY +- if (dbusmenu_pointer_leave(data, wl_pointer, serial, surface)) { ++ 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 + +- struct swaybar_seat *seat = data; + seat->pointer.current = NULL; + } + +@@ -162,7 +165,9 @@ static void wl_pointer_motion(void *data, struct wl_pointer *wl_pointer, + 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 +@@ -204,8 +209,9 @@ 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 +@@ -327,7 +333,8 @@ static void wl_pointer_axis(void *data, struct wl_pointer *wl_pointer, + } + + #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 +@@ -349,7 +356,8 @@ static void wl_pointer_frame(void *data, struct wl_pointer *wl_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 +diff --git a/swaybar/tray/tray.c b/swaybar/tray/tray.c +index b0545f4a70..e4a680342b 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; + }