forked from mirror/dwl
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.
This commit is contained in:
parent
f80f08848b
commit
39946e07f2
1 changed files with 8 additions and 7 deletions
15
dwl.c
15
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);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue