diff options
author | Guido Cella <guido@guidocella.xyz> | 2020-12-20 15:34:36 +0100 |
---|---|---|
committer | Guido Cella <guido@guidocella.xyz> | 2020-12-20 15:46:31 +0100 |
commit | 39946e07f2b2ac09cfa622668585f2223fc277d4 (patch) | |
tree | 0b7723c252245bbdfd3cc5bd7d0c528b7617b321 /dwl.c | |
parent | f80f08848b8b7e08ed2f20c7f0a8675a3b4df394 (diff) |
fix keyboard focus with overlays
Don't let internal calls to motionnotify(0) meant to update the pointer
focus from maplayersurfacenotify and destroylayersurfacenotify also
shift the keyboard focus to the surface under the cursor with
sloppyfocus.
Diffstat (limited to 'dwl.c')
-rw-r--r-- | dwl.c | 15 |
1 files changed, 8 insertions, 7 deletions
@@ -1412,12 +1412,6 @@ motionabsolute(struct wl_listener *listener, void *data) void motionnotify(uint32_t time) { - struct timespec now; - if (!time) { - clock_gettime(CLOCK_MONOTONIC, &now); - time = now.tv_sec * 1000 + now.tv_nsec / 1000000; - } - wlr_idle_notify_activity(idle, seat); /* Update selmon (even while dragging a window) */ @@ -1608,6 +1602,13 @@ pointerfocus(Client *c, struct wlr_surface *surface, double sx, double sy, return; } + bool internal_call = !time; + if (!time) { + struct timespec now; + clock_gettime(CLOCK_MONOTONIC, &now); + time = now.tv_sec * 1000 + now.tv_nsec / 1000000; + } + /* If surface is already focused, only notify of motion */ if (surface == seat->pointer_state.focused_surface) { wlr_seat_pointer_notify_motion(seat, time, sx, sy); @@ -1626,7 +1627,7 @@ pointerfocus(Client *c, struct wlr_surface *surface, double sx, double sy, return; #endif - if (sloppyfocus) + if (sloppyfocus && !internal_call) focusclient(c, false); } |