From 63f09d1f23399fefa8f128b6d3144cc891ba73ed Mon Sep 17 00:00:00 2001 From: Shugyousha Date: Sun, 14 Jun 2020 11:05:21 +0200 Subject: Don't pass NULL surfaces to wlr focus functions (#8) Turns out that this will hit asserts that will abort dwl. --- dwl.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/dwl.c b/dwl.c index dfbafce..c1be5d1 100644 --- a/dwl.c +++ b/dwl.c @@ -595,9 +595,11 @@ focusclient(Client *c, struct wlr_surface *surface, int lift) * If the focused surface has changed, tell the seat to have the * keyboard enter the new surface. wlroots will keep track of this and * automatically send key events to the appropriate clients. If surface - * is NULL, this will clear focus. + * is NULL, we clear the focus instead. */ - if (surface != psurface) { + if (!surface) { + wlr_seat_pointer_notify_clear_focus(seat); + } else if (surface != psurface) { kb = wlr_seat_get_keyboard(seat); wlr_seat_keyboard_notify_enter(seat, surface, kb->keycodes, kb->num_keycodes, &kb->modifiers); @@ -897,11 +899,17 @@ pointerfocus(Client *c, struct wlr_surface *surface, double sx, double sy, wlr_seat_pointer_notify_motion(seat, time, sx, sy); return; } + /* If surface is NULL, clear pointer focus, otherwise let the client * know that the mouse cursor has entered one of its surfaces. */ + if (!surface) { + wlr_seat_pointer_notify_clear_focus(seat); + return; + } + wlr_seat_pointer_notify_enter(seat, surface, sx, sy); /* If keyboard focus follows mouse, enforce that */ - if (sloppyfocus && surface) + if (sloppyfocus) focusclient(c, surface, 0); } -- cgit v1.2.3