diff --git a/unclutter/unclutter.patch b/unclutter/unclutter.patch index 5cd2789..d93f6f7 100644 --- a/unclutter/unclutter.patch +++ b/unclutter/unclutter.patch @@ -1,6 +1,6 @@ -From f11a867df009e3dc786caab519e231967b3fba2a Mon Sep 17 00:00:00 2001 +From 5f0e544c297820f285c997ff108698bcc34c544b Mon Sep 17 00:00:00 2001 From: Guido Cella -Date: Mon, 11 Mar 2024 18:55:02 +0100 +Date: Wed, 27 Mar 2024 18:36:15 +0100 Subject: [PATCH] =?UTF-8?q?hide=20the=20mouse=20cursor=20if=20it=20isn?= =?UTF-8?q?=E2=80=99t=20being=20used?= MIME-Version: 1.0 @@ -9,8 +9,8 @@ Content-Transfer-Encoding: 8bit --- config.def.h | 2 ++ - dwl.c | 45 +++++++++++++++++++++++++++++++++++++++++++-- - 2 files changed, 45 insertions(+), 2 deletions(-) + dwl.c | 48 ++++++++++++++++++++++++++++++++++++++++++++---- + 2 files changed, 46 insertions(+), 4 deletions(-) diff --git a/config.def.h b/config.def.h index 9009517..a85ca27 100644 @@ -26,7 +26,7 @@ index 9009517..a85ca27 100644 #define MODKEY WLR_MODIFIER_ALT diff --git a/dwl.c b/dwl.c -index d508d79..5ec83db 100644 +index 5867b0c..5c7efd9 100644 --- a/dwl.c +++ b/dwl.c @@ -283,6 +283,8 @@ static void focusmon(const Arg *arg); @@ -63,7 +63,7 @@ index d508d79..5ec83db 100644 switch (event->state) { case WLR_BUTTON_PRESSED: -@@ -1388,6 +1394,32 @@ handlesig(int signo) +@@ -1388,6 +1394,31 @@ handlesig(int signo) } } @@ -88,7 +88,6 @@ index d508d79..5ec83db 100644 + return 1; + + wlr_cursor_unset_image(cursor); -+ wlr_seat_pointer_notify_clear_focus(seat); + cursor_hidden = true; + return 1; +} @@ -96,7 +95,7 @@ index d508d79..5ec83db 100644 void incnmaster(const Arg *arg) { -@@ -1718,6 +1750,7 @@ motionnotify(uint32_t time, struct wlr_input_device *device, double dx, double d +@@ -1721,6 +1752,7 @@ motionnotify(uint32_t time, struct wlr_input_device *device, double dx, double d wlr_cursor_move(cursor, device, dx, dy); wlr_idle_notifier_v1_notify_activity(idle_notifier, seat); @@ -104,7 +103,7 @@ index d508d79..5ec83db 100644 /* Update selmon (even while dragging a window) */ if (sloppyfocus) -@@ -1753,7 +1786,7 @@ motionnotify(uint32_t time, struct wlr_input_device *device, double dx, double d +@@ -1756,7 +1788,7 @@ motionnotify(uint32_t time, struct wlr_input_device *device, double dx, double d /* If there's no client surface under the cursor, set the cursor image to a * default. This is what makes the cursor image appear when you move it * off of a client or over its border. */ @@ -113,7 +112,7 @@ index d508d79..5ec83db 100644 wlr_cursor_set_xcursor(cursor, cursor_mgr, "default"); pointerfocus(c, surface, sx, sy, time); -@@ -1897,7 +1930,10 @@ pointerfocus(Client *c, struct wlr_surface *surface, double sx, double sy, +@@ -1900,7 +1932,10 @@ pointerfocus(Client *c, struct wlr_surface *surface, double sx, double sy, /* Let the client know that the mouse cursor has entered one * of its surfaces, and make keyboard focus follow if desired. * wlroots makes this a no-op if surface is already focused */ @@ -125,7 +124,7 @@ index d508d79..5ec83db 100644 wlr_seat_pointer_notify_motion(seat, time, sx, sy); } -@@ -2099,6 +2135,7 @@ run(char *startup_cmd) +@@ -2102,6 +2137,7 @@ run(char *startup_cmd) * monitor when displayed here */ wlr_cursor_warp_closest(cursor, NULL, cursor->x, cursor->y); wlr_cursor_set_xcursor(cursor, cursor_mgr, "default"); @@ -133,7 +132,25 @@ index d508d79..5ec83db 100644 /* Run the Wayland event loop. This does not return until you exit the * compositor. Starting the backend rigged up all of the necessary event -@@ -2431,6 +2468,9 @@ setup(void) +@@ -2125,7 +2161,7 @@ setcursor(struct wl_listener *listener, void *data) + * use the provided surface as the cursor image. It will set the + * hardware cursor on the output that it's currently on and continue to + * do so as the cursor moves between outputs. */ +- if (event->seat_client == seat->pointer_state.focused_client) ++ if (event->seat_client == seat->pointer_state.focused_client && !cursor_hidden) + wlr_cursor_set_surface(cursor, event->surface, + event->hotspot_x, event->hotspot_y); + } +@@ -2139,7 +2175,7 @@ setcursorshape(struct wl_listener *listener, void *data) + /* This can be sent by any client, so we check to make sure this one is + * actually has pointer focus first. If so, we can tell the cursor to + * use the provided cursor shape. */ +- if (event->seat_client == seat->pointer_state.focused_client) ++ if (event->seat_client == seat->pointer_state.focused_client && !cursor_hidden) + wlr_cursor_set_xcursor(cursor, cursor_mgr, + wlr_cursor_shape_v1_name(event->shape)); + } +@@ -2434,6 +2470,9 @@ setup(void) cursor_shape_mgr = wlr_cursor_shape_manager_v1_create(dpy, 1); LISTEN_STATIC(&cursor_shape_mgr->events.request_set_shape, setcursorshape); @@ -143,7 +160,7 @@ index d508d79..5ec83db 100644 /* * Configures a seat, which is a single "seat" at which a user sits and * operates the computer. This conceptually includes up to one keyboard, -@@ -2853,6 +2893,7 @@ virtualpointer(struct wl_listener *listener, void *data) +@@ -2856,6 +2895,7 @@ virtualpointer(struct wl_listener *listener, void *data) wlr_cursor_attach_input_device(cursor, &pointer.base); if (event->suggested_output) wlr_cursor_map_input_to_output(cursor, &pointer.base, event->suggested_output);