diff options
| author | Devin J. Pohly <djpohly@gmail.com> | 2020-07-25 11:55:18 -0400 | 
|---|---|---|
| committer | Devin J. Pohly <djpohly@gmail.com> | 2020-07-25 11:55:18 -0400 | 
| commit | 3e29ef1c7ecade8d6bc8f0dea59c431a2ad06c8e (patch) | |
| tree | 57b22ffd62cc0dfac551d400765cddb12ce58e8d /dwl.c | |
| parent | f2d025d4e9b6f9a83346cb4a9788ac45f3243536 (diff) | |
do managed/unmanaged check in map and unmap
Diffstat (limited to 'dwl.c')
| -rw-r--r-- | dwl.c | 44 | 
1 files changed, 14 insertions, 30 deletions
| @@ -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; | 
