From 8c860178df76eaf1e46bd79a15a14034bc3eb2fb Mon Sep 17 00:00:00 2001 From: sewn Date: Mon, 5 Jan 2026 16:52:49 +0300 Subject: [PATCH] bar: 2026-01-05 --- patches/bar/README.md | 2 +- patches/bar/bar.patch | 149 ++++++++++++++++++++++-------------------- 2 files changed, 78 insertions(+), 73 deletions(-) diff --git a/patches/bar/README.md b/patches/bar/README.md index 4955753..5fedeeb 100644 --- a/patches/bar/README.md +++ b/patches/bar/README.md @@ -13,7 +13,7 @@ slstatus -s | dwl * pixman ### Download -- [main 2025-07-29](/dwl/dwl-patches/raw/branch/main/patches/bar/bar.patch) +- [main 2026-01-05](/dwl/dwl-patches/raw/branch/main/patches/bar/bar.patch) - [0.7](/dwl/dwl-patches/raw/branch/main/patches/bar/bar-0.7.patch) - [0.6](/dwl/dwl-patches/raw/branch/main/patches/bar/bar-0.6.patch) diff --git a/patches/bar/bar.patch b/patches/bar/bar.patch index c9527c1..e098118 100644 --- a/patches/bar/bar.patch +++ b/patches/bar/bar.patch @@ -1,15 +1,14 @@ -From 8906a73dbc8996dd1bfff15f5b26aaee6d45fd61 Mon Sep 17 00:00:00 2001 +From d6a2c4e7f0d3108c7a8a1ad6e76a62e854b2f8e1 Mon Sep 17 00:00:00 2001 From: sewn -Date: Tue, 29 Jul 2025 15:21:19 +0300 +Date: Mon, 5 Jan 2026 16:51:14 +0300 Subject: [PATCH] Implement dwm bar clone -Signed-off-by: sewn --- Makefile | 2 +- config.def.h | 33 ++-- - drwl.h | 311 ++++++++++++++++++++++++++++++++++++ - dwl.c | 441 +++++++++++++++++++++++++++++++++++++++++---------- - 4 files changed, 695 insertions(+), 92 deletions(-) + drwl.h | 310 +++++++++++++++++++++++++++++++++++ + dwl.c | 444 +++++++++++++++++++++++++++++++++++++++++---------- + 4 files changed, 697 insertions(+), 92 deletions(-) create mode 100644 drwl.h diff --git a/Makefile b/Makefile @@ -26,7 +25,7 @@ index 578194f..279b1c0 100644 LDLIBS = `$(PKG_CONFIG) --libs $(PKGS)` $(WLR_LIBS) -lm $(LIBS) diff --git a/config.def.h b/config.def.h -index 95c2afa..1b7472d 100644 +index 8a6eda0..7da50d2 100644 --- a/config.def.h +++ b/config.def.h @@ -7,15 +7,21 @@ @@ -57,15 +56,15 @@ index 95c2afa..1b7472d 100644 /* logging */ static int log_level = WLR_ERROR; -@@ -127,6 +133,7 @@ static const Key keys[] = { - /* modifier key function argument */ - { MODKEY, XKB_KEY_p, spawn, {.v = menucmd} }, - { MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_Return, spawn, {.v = termcmd} }, -+ { MODKEY, XKB_KEY_b, togglebar, {0} }, - { MODKEY, XKB_KEY_j, focusstack, {.i = +1} }, - { MODKEY, XKB_KEY_k, focusstack, {.i = -1} }, - { MODKEY, XKB_KEY_i, incnmaster, {.i = +1} }, -@@ -170,7 +177,15 @@ static const Key keys[] = { +@@ -123,6 +129,7 @@ static const Key keys[] = { + /* modifier key function argument */ + { MODKEY, XKB_KEY_p, spawn, {.v = menucmd} }, + { MODKEY|WLR_MODIFIER_SHIFT, XKB_KEY_Return, spawn, {.v = termcmd} }, ++ { MODKEY, XKB_KEY_b, togglebar, {0} }, + { MODKEY, XKB_KEY_j, focusstack, {.i = +1} }, + { MODKEY, XKB_KEY_k, focusstack, {.i = -1} }, + { MODKEY, XKB_KEY_i, incnmaster, {.i = +1} }, +@@ -166,7 +173,15 @@ static const Key keys[] = { }; static const Button buttons[] = { @@ -86,10 +85,10 @@ index 95c2afa..1b7472d 100644 }; diff --git a/drwl.h b/drwl.h new file mode 100644 -index 0000000..90cc35b +index 0000000..21afd21 --- /dev/null +++ b/drwl.h -@@ -0,0 +1,311 @@ +@@ -0,0 +1,310 @@ +/* + * drwl - https://codeberg.org/sewn/drwl + * @@ -173,7 +172,6 @@ index 0000000..90cc35b +static int +drwl_init(void) +{ -+ fcft_set_scaling_filter(FCFT_SCALING_FILTER_LANCZOS3); + return fcft_init(FCFT_LOG_COLORIZE_AUTO, 0, FCFT_LOG_CLASS_ERROR); +} + @@ -402,10 +400,15 @@ index 0000000..90cc35b + fcft_fini(); +} diff --git a/dwl.c b/dwl.c -index 12f441e..bf340d8 100644 +index 44f3ad9..7b2abf5 100644 --- a/dwl.c +++ b/dwl.c -@@ -5,6 +5,7 @@ +@@ -1,10 +1,12 @@ + /* + * See LICENSE file for copyright and license details. + */ ++#include + #include #include #include #include @@ -413,7 +416,7 @@ index 12f441e..bf340d8 100644 #include #include #include -@@ -59,6 +60,7 @@ +@@ -59,6 +61,7 @@ #include #include #include @@ -421,7 +424,7 @@ index 12f441e..bf340d8 100644 #include #include #include -@@ -69,6 +71,7 @@ +@@ -69,6 +72,7 @@ #endif #include "util.h" @@ -429,7 +432,7 @@ index 12f441e..bf340d8 100644 /* macros */ #define MAX(A, B) ((A) > (B) ? (A) : (B)) -@@ -77,14 +80,17 @@ +@@ -77,14 +81,17 @@ #define VISIBLEON(C, M) ((M) && (C)->mon == (M) && ((C)->tags & (M)->tagset[(M)->seltags])) #define LENGTH(X) (sizeof X / sizeof X[0]) #define END(A) ((A) + LENGTH(A)) @@ -448,7 +451,7 @@ index 12f441e..bf340d8 100644 typedef union { int i; -@@ -94,6 +100,7 @@ typedef union { +@@ -94,6 +101,7 @@ typedef union { } Arg; typedef struct { @@ -456,7 +459,7 @@ index 12f441e..bf340d8 100644 unsigned int mod; unsigned int button; void (*func)(const Arg *); -@@ -183,10 +190,19 @@ typedef struct { +@@ -183,10 +191,19 @@ typedef struct { void (*arrange)(Monitor *); } Layout; @@ -476,7 +479,7 @@ index 12f441e..bf340d8 100644 struct wlr_scene_rect *fullscreen_bg; /* See createmon() for info */ struct wl_listener frame; struct wl_listener destroy; -@@ -194,6 +210,11 @@ struct Monitor { +@@ -194,6 +211,11 @@ struct Monitor { struct wl_listener destroy_lock_surface; struct wlr_session_lock_surface_v1 *lock_surface; struct wlr_box m; /* monitor area, layout-relative */ @@ -488,7 +491,7 @@ index 12f441e..bf340d8 100644 struct wlr_box w; /* window area, layout-relative */ struct wl_list layers[4]; /* LayerSurface.link */ const Layout *lt[2]; -@@ -205,6 +226,9 @@ struct Monitor { +@@ -205,6 +227,9 @@ struct Monitor { int nmaster; char ltsymbol[16]; int asleep; @@ -498,7 +501,7 @@ index 12f441e..bf340d8 100644 }; typedef struct { -@@ -247,6 +271,13 @@ static void arrangelayer(Monitor *m, struct wl_list *list, +@@ -247,6 +272,13 @@ static void arrangelayer(Monitor *m, struct wl_list *list, struct wlr_box *usable_area, int exclusive); static void arrangelayers(Monitor *m); static void axisnotify(struct wl_listener *listener, void *data); @@ -512,7 +515,7 @@ index 12f441e..bf340d8 100644 static void buttonpress(struct wl_listener *listener, void *data); static void chvt(const Arg *arg); static void checkidleinhibitor(struct wlr_surface *exclude); -@@ -282,6 +313,8 @@ static void destroypointerconstraint(struct wl_listener *listener, void *data); +@@ -282,6 +314,8 @@ static void destroypointerconstraint(struct wl_listener *listener, void *data); static void destroysessionlock(struct wl_listener *listener, void *data); static void destroykeyboardgroup(struct wl_listener *listener, void *data); static Monitor *dirtomon(enum wlr_direction dir); @@ -521,7 +524,7 @@ index 12f441e..bf340d8 100644 static void focusclient(Client *c, int lift); static void focusmon(const Arg *arg); static void focusstack(const Arg *arg); -@@ -310,7 +343,6 @@ static void outputmgrapplyortest(struct wlr_output_configuration_v1 *config, int +@@ -310,7 +344,6 @@ static void outputmgrapplyortest(struct wlr_output_configuration_v1 *config, int static void outputmgrtest(struct wl_listener *listener, void *data); static void pointerfocus(Client *c, struct wlr_surface *surface, double sx, double sy, uint32_t time); @@ -529,7 +532,7 @@ index 12f441e..bf340d8 100644 static void powermgrsetmode(struct wl_listener *listener, void *data); static void quit(const Arg *arg); static void rendermon(struct wl_listener *listener, void *data); -@@ -331,9 +363,11 @@ static void setsel(struct wl_listener *listener, void *data); +@@ -331,9 +364,11 @@ static void setsel(struct wl_listener *listener, void *data); static void setup(void); static void spawn(const Arg *arg); static void startdrag(struct wl_listener *listener, void *data); @@ -541,7 +544,7 @@ index 12f441e..bf340d8 100644 static void togglefloating(const Arg *arg); static void togglefullscreen(const Arg *arg); static void toggletag(const Arg *arg); -@@ -342,6 +376,7 @@ static void unlocksession(struct wl_listener *listener, void *data); +@@ -342,6 +377,7 @@ static void unlocksession(struct wl_listener *listener, void *data); static void unmaplayersurfacenotify(struct wl_listener *listener, void *data); static void unmapnotify(struct wl_listener *listener, void *data); static void updatemons(struct wl_listener *listener, void *data); @@ -549,7 +552,7 @@ index 12f441e..bf340d8 100644 static void updatetitle(struct wl_listener *listener, void *data); static void urgent(struct wl_listener *listener, void *data); static void view(const Arg *arg); -@@ -406,6 +441,15 @@ static struct wlr_box sgeom; +@@ -406,6 +442,15 @@ static struct wlr_box sgeom; static struct wl_list mons; static Monitor *selmon; @@ -565,7 +568,7 @@ index 12f441e..bf340d8 100644 /* global event handlers */ static struct wl_listener cursor_axis = {.notify = axisnotify}; static struct wl_listener cursor_button = {.notify = buttonpress}; -@@ -521,7 +565,7 @@ arrange(Monitor *m) +@@ -521,7 +566,7 @@ arrange(Monitor *m) wlr_scene_node_set_enabled(&m->fullscreen_bg->node, (c = focustop(m)) && c->isfullscreen); @@ -574,7 +577,7 @@ index 12f441e..bf340d8 100644 /* We move all clients (except fullscreen and unmanaged) to LyrTile while * in floating layout to avoid "real" floating clients be always on top */ -@@ -576,6 +620,11 @@ arrangelayers(Monitor *m) +@@ -576,6 +621,11 @@ arrangelayers(Monitor *m) if (!m->wlr_output->enabled) return; @@ -586,7 +589,7 @@ index 12f441e..bf340d8 100644 /* Arrange exclusive surfaces from top->bottom */ for (i = 3; i >= 0; i--) arrangelayer(m, &m->layers[i], &usable_area, 1); -@@ -618,17 +667,102 @@ axisnotify(struct wl_listener *listener, void *data) +@@ -618,17 +668,102 @@ axisnotify(struct wl_listener *listener, void *data) event->delta_discrete, event->source, event->relative_direction); } @@ -689,7 +692,7 @@ index 12f441e..bf340d8 100644 switch (event->state) { case WL_POINTER_BUTTON_STATE_PRESSED: cursor_mode = CurPressed; -@@ -636,17 +770,34 @@ buttonpress(struct wl_listener *listener, void *data) +@@ -636,17 +771,34 @@ buttonpress(struct wl_listener *listener, void *data) if (locked) break; @@ -728,7 +731,7 @@ index 12f441e..bf340d8 100644 return; } } -@@ -721,6 +872,8 @@ cleanup(void) +@@ -721,6 +873,8 @@ cleanup(void) /* Destroy after the wayland display (when the monitors are already destroyed) to avoid destroying them with an invalid scene output. */ wlr_scene_node_destroy(&scene->tree.node); @@ -737,7 +740,7 @@ index 12f441e..bf340d8 100644 } void -@@ -736,6 +889,12 @@ cleanupmon(struct wl_listener *listener, void *data) +@@ -736,6 +890,12 @@ cleanupmon(struct wl_listener *listener, void *data) wlr_layer_surface_v1_destroy(l->layer_surface); } @@ -750,7 +753,7 @@ index 12f441e..bf340d8 100644 wl_list_remove(&m->destroy.link); wl_list_remove(&m->frame.link); wl_list_remove(&m->link); -@@ -748,6 +907,7 @@ cleanupmon(struct wl_listener *listener, void *data) +@@ -748,6 +908,7 @@ cleanupmon(struct wl_listener *listener, void *data) closemon(m); wlr_scene_node_destroy(&m->fullscreen_bg->node); @@ -758,7 +761,7 @@ index 12f441e..bf340d8 100644 free(m); } -@@ -814,7 +974,7 @@ closemon(Monitor *m) +@@ -814,7 +975,7 @@ closemon(Monitor *m) setmon(c, selmon, c->tags); } focusclient(focustop(selmon), 1); @@ -767,7 +770,7 @@ index 12f441e..bf340d8 100644 } void -@@ -1066,7 +1226,7 @@ createmon(struct wl_listener *listener, void *data) +@@ -1066,7 +1227,7 @@ createmon(struct wl_listener *listener, void *data) m->nmaster = r->nmaster; m->lt[0] = r->lt; m->lt[1] = &layouts[LENGTH(layouts) > 1 && r->lt != &layouts[1]]; @@ -776,7 +779,7 @@ index 12f441e..bf340d8 100644 wlr_output_state_set_scale(&state, r->scale); wlr_output_state_set_transform(&state, r->rr); break; -@@ -1088,8 +1248,15 @@ createmon(struct wl_listener *listener, void *data) +@@ -1088,8 +1249,15 @@ createmon(struct wl_listener *listener, void *data) wlr_output_commit_state(wlr_output, &state); wlr_output_state_finish(&state); @@ -793,7 +796,7 @@ index 12f441e..bf340d8 100644 /* The xdg-protocol specifies: * -@@ -1399,6 +1566,80 @@ dirtomon(enum wlr_direction dir) +@@ -1399,6 +1567,80 @@ dirtomon(enum wlr_direction dir) return selmon; } @@ -874,7 +877,7 @@ index 12f441e..bf340d8 100644 void focusclient(Client *c, int lift) { -@@ -1433,13 +1674,13 @@ focusclient(Client *c, int lift) +@@ -1433,13 +1675,13 @@ focusclient(Client *c, int lift) /* Don't change border color if there is an exclusive focus or we are * handling a drag operation */ if (!exclusive_focus && !seat->drag) @@ -890,7 +893,7 @@ index 12f441e..bf340d8 100644 * and focus it after the overlay is closed. */ if (old_client_type == LayerShell && wlr_scene_node_coords( &old_l->scene->node, &unused_lx, &unused_ly) -@@ -1450,12 +1691,11 @@ focusclient(Client *c, int lift) +@@ -1450,12 +1692,11 @@ focusclient(Client *c, int lift) /* Don't deactivate old client if the new one wants focus, as this causes issues with winecfg * and probably other clients */ } else if (old_c && !client_is_unmanaged(old_c) && (!c || !client_wants_focus(c))) { @@ -905,7 +908,7 @@ index 12f441e..bf340d8 100644 if (!c) { /* With no client, all we have left is to clear focus */ -@@ -1768,7 +2008,7 @@ mapnotify(struct wl_listener *listener, void *data) +@@ -1769,7 +2010,7 @@ mapnotify(struct wl_listener *listener, void *data) for (i = 0; i < 4; i++) { c->border[i] = wlr_scene_rect_create(c->scene, 0, 0, @@ -914,7 +917,7 @@ index 12f441e..bf340d8 100644 c->border[i]->node.data = c; } -@@ -1791,7 +2031,7 @@ mapnotify(struct wl_listener *listener, void *data) +@@ -1792,7 +2033,7 @@ mapnotify(struct wl_listener *listener, void *data) } else { applyrules(c); } @@ -923,7 +926,7 @@ index 12f441e..bf340d8 100644 unset_fullscreen: m = c->mon ? c->mon : xytomon(c->geom.x, c->geom.y); -@@ -2084,44 +2324,6 @@ pointerfocus(Client *c, struct wlr_surface *surface, double sx, double sy, +@@ -2085,44 +2326,6 @@ pointerfocus(Client *c, struct wlr_surface *surface, double sx, double sy, wlr_seat_pointer_notify_motion(seat, time, sx, sy); } @@ -968,7 +971,7 @@ index 12f441e..bf340d8 100644 void powermgrsetmode(struct wl_listener *listener, void *data) { -@@ -2250,22 +2452,14 @@ run(char *startup_cmd) +@@ -2251,22 +2454,14 @@ run(char *startup_cmd) /* Now that the socket exists and the backend is started, run the startup command */ if (startup_cmd) { @@ -992,7 +995,7 @@ index 12f441e..bf340d8 100644 } /* Mark stdout as non-blocking to avoid the startup script -@@ -2275,7 +2469,7 @@ run(char *startup_cmd) +@@ -2276,7 +2471,7 @@ run(char *startup_cmd) if (fd_set_nonblock(STDOUT_FILENO) < 0) close(STDOUT_FILENO); @@ -1001,7 +1004,7 @@ index 12f441e..bf340d8 100644 /* At this point the outputs are initialized, choose initial selmon based on * cursor position, and set default cursor image */ -@@ -2341,7 +2535,7 @@ setfloating(Client *c, int floating) +@@ -2342,7 +2537,7 @@ setfloating(Client *c, int floating) (p && p->isfullscreen) ? LyrFS : c->isfloating ? LyrFloat : LyrTile]); arrange(c->mon); @@ -1010,7 +1013,7 @@ index 12f441e..bf340d8 100644 } void -@@ -2364,7 +2558,7 @@ setfullscreen(Client *c, int fullscreen) +@@ -2365,7 +2560,7 @@ setfullscreen(Client *c, int fullscreen) resize(c, c->prev, 0); } arrange(c->mon); @@ -1019,7 +1022,7 @@ index 12f441e..bf340d8 100644 } void -@@ -2376,9 +2570,9 @@ setlayout(const Arg *arg) +@@ -2377,9 +2572,9 @@ setlayout(const Arg *arg) selmon->sellt ^= 1; if (arg && arg->v) selmon->lt[selmon->sellt] = (Layout *)arg->v; @@ -1031,7 +1034,7 @@ index 12f441e..bf340d8 100644 } /* arg > 1.0 will set mfact absolutely */ -@@ -2451,6 +2645,7 @@ setup(void) +@@ -2452,6 +2647,7 @@ setup(void) for (i = 0; i < (int)LENGTH(sig); i++) sigaction(sig[i], &sa, NULL); @@ -1039,7 +1042,7 @@ index 12f441e..bf340d8 100644 wlr_log_init(log_level, NULL); /* The Wayland display is managed by libwayland. It handles accepting -@@ -2645,6 +2840,11 @@ setup(void) +@@ -2646,6 +2842,11 @@ setup(void) wl_signal_add(&output_mgr->events.apply, &output_mgr_apply); wl_signal_add(&output_mgr->events.test, &output_mgr_test); @@ -1051,15 +1054,16 @@ index 12f441e..bf340d8 100644 /* Make sure XWayland clients don't connect to the parent X server, * e.g when running in the x11 backend or the wayland backend and the * compositor has Xwayland support */ -@@ -2669,6 +2869,7 @@ void +@@ -2670,6 +2871,8 @@ void spawn(const Arg *arg) { if (fork() == 0) { + close(STDIN_FILENO); ++ open("/dev/null", O_RDWR); dup2(STDERR_FILENO, STDOUT_FILENO); setsid(); execvp(((char **)arg->v)[0], (char **)arg->v); -@@ -2687,6 +2888,30 @@ startdrag(struct wl_listener *listener, void *data) +@@ -2688,6 +2891,30 @@ startdrag(struct wl_listener *listener, void *data) LISTEN_STATIC(&drag->icon->events.destroy, destroydragicon); } @@ -1090,7 +1094,7 @@ index 12f441e..bf340d8 100644 void tag(const Arg *arg) { -@@ -2697,7 +2922,7 @@ tag(const Arg *arg) +@@ -2698,7 +2925,7 @@ tag(const Arg *arg) sel->tags = arg->ui & TAGMASK; focusclient(focustop(selmon), 1); arrange(selmon); @@ -1099,7 +1103,7 @@ index 12f441e..bf340d8 100644 } void -@@ -2742,6 +2967,14 @@ tile(Monitor *m) +@@ -2743,6 +2970,15 @@ tile(Monitor *m) } } @@ -1109,12 +1113,13 @@ index 12f441e..bf340d8 100644 + wlr_scene_node_set_enabled(&selmon->scene_buffer->node, + !selmon->scene_buffer->node.enabled); + arrangelayers(selmon); ++ drawbars(); +} + void togglefloating(const Arg *arg) { -@@ -2770,7 +3003,7 @@ toggletag(const Arg *arg) +@@ -2771,7 +3007,7 @@ toggletag(const Arg *arg) sel->tags = newtags; focusclient(focustop(selmon), 1); arrange(selmon); @@ -1123,7 +1128,7 @@ index 12f441e..bf340d8 100644 } void -@@ -2783,7 +3016,7 @@ toggleview(const Arg *arg) +@@ -2784,7 +3020,7 @@ toggleview(const Arg *arg) selmon->tagset[selmon->seltags] = newtagset; focusclient(focustop(selmon), 1); arrange(selmon); @@ -1132,7 +1137,7 @@ index 12f441e..bf340d8 100644 } void -@@ -2831,7 +3064,7 @@ unmapnotify(struct wl_listener *listener, void *data) +@@ -2832,7 +3068,7 @@ unmapnotify(struct wl_listener *listener, void *data) } wlr_scene_node_destroy(&c->scene->node); @@ -1141,7 +1146,7 @@ index 12f441e..bf340d8 100644 motionnotify(0, NULL, 0, 0, 0, 0); } -@@ -2931,6 +3164,13 @@ updatemons(struct wl_listener *listener, void *data) +@@ -2932,6 +3168,13 @@ updatemons(struct wl_listener *listener, void *data) } } @@ -1155,7 +1160,7 @@ index 12f441e..bf340d8 100644 /* FIXME: figure out why the cursor image is at 0,0 after turning all * the monitors on. * Move the cursor image where it used to be. It does not generate a -@@ -2941,12 +3181,45 @@ updatemons(struct wl_listener *listener, void *data) +@@ -2942,12 +3185,45 @@ updatemons(struct wl_listener *listener, void *data) wlr_output_manager_v1_set_configuration(output_mgr, config); } @@ -1202,7 +1207,7 @@ index 12f441e..bf340d8 100644 } void -@@ -2959,10 +3232,10 @@ urgent(struct wl_listener *listener, void *data) +@@ -2960,10 +3236,10 @@ urgent(struct wl_listener *listener, void *data) return; c->isurgent = 1; @@ -1215,7 +1220,7 @@ index 12f441e..bf340d8 100644 } void -@@ -2975,7 +3248,7 @@ view(const Arg *arg) +@@ -2976,7 +3252,7 @@ view(const Arg *arg) selmon->tagset[selmon->seltags] = arg->ui & TAGMASK; focusclient(focustop(selmon), 1); arrange(selmon); @@ -1224,7 +1229,7 @@ index 12f441e..bf340d8 100644 } void -@@ -3016,6 +3289,7 @@ xytonode(double x, double y, struct wlr_surface **psurface, +@@ -3017,6 +3293,7 @@ xytonode(double x, double y, struct wlr_surface **psurface, { struct wlr_scene_node *node, *pnode; struct wlr_surface *surface = NULL; @@ -1232,7 +1237,7 @@ index 12f441e..bf340d8 100644 Client *c = NULL; LayerSurface *l = NULL; int layer; -@@ -3024,9 +3298,12 @@ xytonode(double x, double y, struct wlr_surface **psurface, +@@ -3025,9 +3302,12 @@ xytonode(double x, double y, struct wlr_surface **psurface, if (!(node = wlr_scene_node_at(&layers[layer]->node, x, y, nx, ny))) continue; @@ -1248,7 +1253,7 @@ index 12f441e..bf340d8 100644 /* Walk the tree to find a node that knows the client */ for (pnode = node; pnode && !c; pnode = &pnode->parent->node) c = pnode->data; -@@ -3159,10 +3436,10 @@ sethints(struct wl_listener *listener, void *data) +@@ -3160,10 +3440,10 @@ sethints(struct wl_listener *listener, void *data) return; c->isurgent = xcb_icccm_wm_hints_get_urgency(c->surface.xwayland->hints); @@ -1262,5 +1267,5 @@ index 12f441e..bf340d8 100644 void -- -2.50.0 +2.52.0