forked from mirror/dwl
Don't let overlays lose focus
if you open a new window while an overlay is mapped, the overlay should stay focused
This commit is contained in:
parent
8de18f9bb4
commit
ae798c694a
1 changed files with 20 additions and 2 deletions
18
dwl.c
18
dwl.c
|
@ -256,6 +256,7 @@ static void setmfact(const Arg *arg);
|
|||
static void setmon(Client *c, Monitor *m, unsigned int newtags);
|
||||
static void setup(void);
|
||||
static void sigchld(int unused);
|
||||
static bool shouldfocusclients();
|
||||
static void spawn(const Arg *arg);
|
||||
static void tag(const Arg *arg);
|
||||
static void tagmon(const Arg *arg);
|
||||
|
@ -1037,6 +1038,7 @@ focusclient(Client *old, Client *c, int lift)
|
|||
}
|
||||
|
||||
/* Have a client, so focus its top-level wlr_surface */
|
||||
if (shouldfocusclients(c->mon))
|
||||
wlr_seat_keyboard_notify_enter(seat, WLR_SURFACE(c),
|
||||
kb->keycodes, kb->num_keycodes, &kb->modifiers);
|
||||
|
||||
|
@ -1979,6 +1981,22 @@ sigchld(int unused)
|
|||
;
|
||||
}
|
||||
|
||||
bool
|
||||
shouldfocusclients(Monitor *m)
|
||||
{
|
||||
LayerSurface *layersurface;
|
||||
uint32_t layers_above_shell[] = {
|
||||
ZWLR_LAYER_SHELL_V1_LAYER_OVERLAY,
|
||||
ZWLR_LAYER_SHELL_V1_LAYER_TOP,
|
||||
};
|
||||
for (unsigned int i = 0; i < LENGTH(layers_above_shell); ++i)
|
||||
wl_list_for_each(layersurface, &m->layers[layers_above_shell[i]], link)
|
||||
if (layersurface->layer_surface->current.keyboard_interactive &&
|
||||
!layersurface->unmapping)
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
void
|
||||
spawn(const Arg *arg)
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue