aboutsummaryrefslogtreecommitdiff
path: root/dwl.c
diff options
context:
space:
mode:
authorDevin J. Pohly <djpohly@gmail.com>2020-07-25 11:55:18 -0400
committerDevin J. Pohly <djpohly@gmail.com>2020-07-25 11:55:18 -0400
commit3e29ef1c7ecade8d6bc8f0dea59c431a2ad06c8e (patch)
tree57b22ffd62cc0dfac551d400765cddb12ce58e8d /dwl.c
parentf2d025d4e9b6f9a83346cb4a9788ac45f3243536 (diff)
do managed/unmanaged check in map and unmap
Diffstat (limited to 'dwl.c')
-rw-r--r--dwl.c44
1 files changed, 14 insertions, 30 deletions
diff --git a/dwl.c b/dwl.c
index 5e2923c..194d861 100644
--- a/dwl.c
+++ b/dwl.c
@@ -186,7 +186,6 @@ static void keypressmod(struct wl_listener *listener, void *data);
static void killclient(const Arg *arg);
static Client *lastfocused(void);
static void maprequest(struct wl_listener *listener, void *data);
-static void maprequestindependent(struct wl_listener *listener, void *data);
static void motionabsolute(struct wl_listener *listener, void *data);
static void motionnotify(uint32_t time);
static void motionrelative(struct wl_listener *listener, void *data);
@@ -218,7 +217,6 @@ static void toggletag(const Arg *arg);
static void toggleview(const Arg *arg);
static void updatewindowtype(Client *c);
static void unmapnotify(struct wl_listener *listener, void *data);
-static void unmapnotifyindependent(struct wl_listener *listener, void *data);
static void xwaylandready(struct wl_listener *listener, void *data);
static void view(const Arg *arg);
static Client *xytoclient(double x, double y);
@@ -281,6 +279,7 @@ activatex11(struct wl_listener *listener, void *data)
{
Client *c = wl_container_of(listener, c, activate);
+ /* Only "managed" windows can be activated */
if (c->type == X11Managed)
wlr_xwayland_surface_activate(c->xwayland_surface, 1);
}
@@ -572,20 +571,13 @@ createnotifyx11(struct wl_listener *listener, void *data)
c = xwayland_surface->data = calloc(1, sizeof(*c));
c->xwayland_surface = xwayland_surface;
c->isx11 = 1;
+ c->type = xwayland_surface->override_redirect ? X11Unmanaged : X11Managed;
c->bw = borderpx;
/* Listen to the various events it can emit */
- if (!xwayland_surface->override_redirect) {
- c->type = X11Managed;
- c->map.notify = maprequest;
- c->unmap.notify = unmapnotify;
- /* Only "managed" windows can be activated */
- } else {
- c->type = X11Unmanaged;
- c->map.notify = maprequestindependent;
- c->unmap.notify = unmapnotifyindependent;
- }
+ c->map.notify = maprequest;
wl_signal_add(&xwayland_surface->events.map, &c->map);
+ c->unmap.notify = unmapnotify;
wl_signal_add(&xwayland_surface->events.unmap, &c->unmap);
c->activate.notify = activatex11;
wl_signal_add(&xwayland_surface->events.request_activate, &c->activate);
@@ -924,6 +916,13 @@ maprequest(struct wl_listener *listener, void *data)
{
/* Called when the surface is mapped, or ready to display on-screen. */
Client *c = wl_container_of(listener, c, map);
+
+ if (c->type == X11Unmanaged) {
+ /* Insert this independent into independents lists. */
+ wl_list_insert(&independents, &c->link);
+ return;
+ }
+
/* Insert this client into client lists. */
wl_list_insert(&clients, &c->link);
wl_list_insert(&fstack, &c->flink);
@@ -945,15 +944,6 @@ maprequest(struct wl_listener *listener, void *data)
}
void
-maprequestindependent(struct wl_listener *listener, void *data)
-{
- /* Called when the surface is mapped, or ready to display on-screen. */
- Client *c = wl_container_of(listener, c, map);
- /* Insert this independent into independents lists. */
- wl_list_insert(&independents, &c->link);
-}
-
-void
motionabsolute(struct wl_listener *listener, void *data)
{
/* This event is forwarded by the cursor when a pointer emits an _absolute_
@@ -1694,21 +1684,15 @@ unmapnotify(struct wl_listener *listener, void *data)
{
/* Called when the surface is unmapped, and should no longer be shown. */
Client *c = wl_container_of(listener, c, unmap);
- setmon(c, NULL, 0);
wl_list_remove(&c->link);
+ if (c->type == X11Unmanaged)
+ return;
+ setmon(c, NULL, 0);
wl_list_remove(&c->flink);
wl_list_remove(&c->slink);
}
void
-unmapnotifyindependent(struct wl_listener *listener, void *data)
-{
- /* Called when the surface is unmapped, and should no longer be shown. */
- Client *c = wl_container_of(listener, c, unmap);
- wl_list_remove(&c->link);
-}
-
-void
updatewindowtype(Client *c)
{
size_t i;