summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGuido Cella <guido@guidocella.xyz>2020-12-20 15:34:36 +0100
committerGuido Cella <guido@guidocella.xyz>2020-12-20 15:46:31 +0100
commit39946e07f2b2ac09cfa622668585f2223fc277d4 (patch)
tree0b7723c252245bbdfd3cc5bd7d0c528b7617b321
parentf80f08848b8b7e08ed2f20c7f0a8675a3b4df394 (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.
-rw-r--r--dwl.c15
1 files changed, 8 insertions, 7 deletions
diff --git a/dwl.c b/dwl.c
index 7a12817..46ba04a 100644
--- a/dwl.c
+++ b/dwl.c
@@ -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);
}