forked from mirror/dwl
do not focus clients if a layer surface is focused
This commit is contained in:
parent
deb48ff48b
commit
e082292606
1 changed files with 9 additions and 2 deletions
11
dwl.c
11
dwl.c
|
@ -299,6 +299,7 @@ static void zoom(const Arg *arg);
|
||||||
/* variables */
|
/* variables */
|
||||||
static const char broken[] = "broken";
|
static const char broken[] = "broken";
|
||||||
static pid_t child_pid = -1;
|
static pid_t child_pid = -1;
|
||||||
|
static struct wlr_surface *exclusive_focus;
|
||||||
static struct wl_display *dpy;
|
static struct wl_display *dpy;
|
||||||
static struct wlr_backend *backend;
|
static struct wlr_backend *backend;
|
||||||
static struct wlr_scene *scene;
|
static struct wlr_scene *scene;
|
||||||
|
@ -610,11 +611,12 @@ arrangelayers(Monitor *m)
|
||||||
layersurface->layer_surface->mapped) {
|
layersurface->layer_surface->mapped) {
|
||||||
/* Deactivate the focused client. */
|
/* Deactivate the focused client. */
|
||||||
focusclient(NULL, 0);
|
focusclient(NULL, 0);
|
||||||
|
exclusive_focus = layersurface->layer_surface->surface;
|
||||||
if (kb)
|
if (kb)
|
||||||
wlr_seat_keyboard_notify_enter(seat, layersurface->layer_surface->surface,
|
wlr_seat_keyboard_notify_enter(seat, exclusive_focus,
|
||||||
kb->keycodes, kb->num_keycodes, &kb->modifiers);
|
kb->keycodes, kb->num_keycodes, &kb->modifiers);
|
||||||
else
|
else
|
||||||
wlr_seat_keyboard_notify_enter(seat, layersurface->layer_surface->surface, NULL, 0, NULL);
|
wlr_seat_keyboard_notify_enter(seat, exclusive_focus, NULL, 0, NULL);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1125,6 +1127,9 @@ focusclient(Client *c, int lift)
|
||||||
struct wlr_surface *old = seat->keyboard_state.focused_surface;
|
struct wlr_surface *old = seat->keyboard_state.focused_surface;
|
||||||
struct wlr_keyboard *kb;
|
struct wlr_keyboard *kb;
|
||||||
int i;
|
int i;
|
||||||
|
/* Do not focus clients if a layer surface is focused */
|
||||||
|
if (exclusive_focus)
|
||||||
|
return;
|
||||||
|
|
||||||
/* Raise client in stacking order if requested */
|
/* Raise client in stacking order if requested */
|
||||||
if (c && lift)
|
if (c && lift)
|
||||||
|
@ -2261,6 +2266,8 @@ unmaplayersurfacenotify(struct wl_listener *listener, void *data)
|
||||||
|
|
||||||
layersurface->layer_surface->mapped = (layersurface->mapped = 0);
|
layersurface->layer_surface->mapped = (layersurface->mapped = 0);
|
||||||
wlr_scene_node_set_enabled(layersurface->scene, 0);
|
wlr_scene_node_set_enabled(layersurface->scene, 0);
|
||||||
|
if (layersurface->layer_surface->surface == exclusive_focus)
|
||||||
|
exclusive_focus = NULL;
|
||||||
if (layersurface->layer_surface->surface ==
|
if (layersurface->layer_surface->surface ==
|
||||||
seat->keyboard_state.focused_surface)
|
seat->keyboard_state.focused_surface)
|
||||||
focusclient(selclient(), 1);
|
focusclient(selclient(), 1);
|
||||||
|
|
Loading…
Reference in a new issue