implement urgency hints for xwayland clients

This commit is contained in:
Leonardo Hernández Hernández 2022-05-17 14:38:18 -05:00
parent 5de68ba713
commit 8870ba0bb8
No known key found for this signature in database
GPG key ID: E538897EE11B9624

14
dwl.c
View file

@ -112,6 +112,7 @@ typedef struct {
#ifdef XWAYLAND #ifdef XWAYLAND
struct wl_listener activate; struct wl_listener activate;
struct wl_listener configure; struct wl_listener configure;
struct wl_listener set_hints;
#endif #endif
int bw; int bw;
unsigned int tags; unsigned int tags;
@ -358,6 +359,7 @@ static void activatex11(struct wl_listener *listener, void *data);
static void configurex11(struct wl_listener *listener, void *data); static void configurex11(struct wl_listener *listener, void *data);
static void createnotifyx11(struct wl_listener *listener, void *data); static void createnotifyx11(struct wl_listener *listener, void *data);
static Atom getatom(xcb_connection_t *xc, const char *name); static Atom getatom(xcb_connection_t *xc, const char *name);
static void sethints(struct wl_listener *listener, void *data);
static void xwaylandready(struct wl_listener *listener, void *data); static void xwaylandready(struct wl_listener *listener, void *data);
static struct wl_listener new_xwayland_surface = {.notify = createnotifyx11}; static struct wl_listener new_xwayland_surface = {.notify = createnotifyx11};
static struct wl_listener xwayland_ready = {.notify = xwaylandready}; static struct wl_listener xwayland_ready = {.notify = xwaylandready};
@ -1046,6 +1048,7 @@ destroynotify(struct wl_listener *listener, void *data)
#ifdef XWAYLAND #ifdef XWAYLAND
if (c->type != XDGShell) { if (c->type != XDGShell) {
wl_list_remove(&c->configure.link); wl_list_remove(&c->configure.link);
wl_list_remove(&c->set_hints.link);
wl_list_remove(&c->activate.link); wl_list_remove(&c->activate.link);
} else } else
#endif #endif
@ -2460,6 +2463,7 @@ createnotifyx11(struct wl_listener *listener, void *data)
LISTEN(&xwayland_surface->events.request_activate, &c->activate, activatex11); LISTEN(&xwayland_surface->events.request_activate, &c->activate, activatex11);
LISTEN(&xwayland_surface->events.request_configure, &c->configure, LISTEN(&xwayland_surface->events.request_configure, &c->configure,
configurex11); configurex11);
LISTEN(&xwayland_surface->events.set_hints, &c->set_hints, sethints);
LISTEN(&xwayland_surface->events.set_title, &c->set_title, updatetitle); LISTEN(&xwayland_surface->events.set_title, &c->set_title, updatetitle);
LISTEN(&xwayland_surface->events.destroy, &c->destroy, destroynotify); LISTEN(&xwayland_surface->events.destroy, &c->destroy, destroynotify);
LISTEN(&xwayland_surface->events.request_fullscreen, &c->fullscreen, LISTEN(&xwayland_surface->events.request_fullscreen, &c->fullscreen,
@ -2479,6 +2483,16 @@ getatom(xcb_connection_t *xc, const char *name)
return atom; return atom;
} }
void
sethints(struct wl_listener *listener, void *data)
{
Client *c = wl_container_of(listener, c, set_hints);
if (c != selclient()) {
c->isurgent = c->surface.xwayland->hints_urgency;
printstatus();
}
}
void void
xwaylandready(struct wl_listener *listener, void *data) xwaylandready(struct wl_listener *listener, void *data)
{ {