do managed/unmanaged check in map and unmap
This commit is contained in:
		
							
								
								
									
										44
									
								
								dwl.c
									
									
									
									
									
								
							
							
						
						
									
										44
									
								
								dwl.c
									
									
									
									
									
								
							| @@ -186,7 +186,6 @@ static void keypressmod(struct wl_listener *listener, void *data); | |||||||
| static void killclient(const Arg *arg); | static void killclient(const Arg *arg); | ||||||
| static Client *lastfocused(void); | static Client *lastfocused(void); | ||||||
| static void maprequest(struct wl_listener *listener, void *data); | 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 motionabsolute(struct wl_listener *listener, void *data); | ||||||
| static void motionnotify(uint32_t time); | static void motionnotify(uint32_t time); | ||||||
| static void motionrelative(struct wl_listener *listener, void *data); | 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 toggleview(const Arg *arg); | ||||||
| static void updatewindowtype(Client *c); | static void updatewindowtype(Client *c); | ||||||
| static void unmapnotify(struct wl_listener *listener, void *data); | 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 xwaylandready(struct wl_listener *listener, void *data); | ||||||
| static void view(const Arg *arg); | static void view(const Arg *arg); | ||||||
| static Client *xytoclient(double x, double y); | 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); |        Client *c = wl_container_of(listener, c, activate); | ||||||
|  |  | ||||||
|  |        /* Only "managed" windows can be activated */ | ||||||
|        if (c->type == X11Managed) |        if (c->type == X11Managed) | ||||||
|                wlr_xwayland_surface_activate(c->xwayland_surface, 1); |                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->data = calloc(1, sizeof(*c)); | ||||||
| 	c->xwayland_surface = xwayland_surface; | 	c->xwayland_surface = xwayland_surface; | ||||||
| 	c->isx11 = 1; | 	c->isx11 = 1; | ||||||
|  | 	c->type = xwayland_surface->override_redirect ? X11Unmanaged : X11Managed; | ||||||
| 	c->bw = borderpx; | 	c->bw = borderpx; | ||||||
|  |  | ||||||
| 	/* Listen to the various events it can emit */ | 	/* Listen to the various events it can emit */ | ||||||
| 	if (!xwayland_surface->override_redirect) { | 	c->map.notify = maprequest; | ||||||
| 		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; |  | ||||||
| 	} |  | ||||||
| 	wl_signal_add(&xwayland_surface->events.map, &c->map); | 	wl_signal_add(&xwayland_surface->events.map, &c->map); | ||||||
|  | 	c->unmap.notify = unmapnotify; | ||||||
| 	wl_signal_add(&xwayland_surface->events.unmap, &c->unmap); | 	wl_signal_add(&xwayland_surface->events.unmap, &c->unmap); | ||||||
| 	c->activate.notify = activatex11; | 	c->activate.notify = activatex11; | ||||||
| 	wl_signal_add(&xwayland_surface->events.request_activate, &c->activate); | 	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. */ | 	/* Called when the surface is mapped, or ready to display on-screen. */ | ||||||
| 	Client *c = wl_container_of(listener, c, map); | 	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. */ | 	/* Insert this client into client lists. */ | ||||||
| 	wl_list_insert(&clients, &c->link); | 	wl_list_insert(&clients, &c->link); | ||||||
| 	wl_list_insert(&fstack, &c->flink); | 	wl_list_insert(&fstack, &c->flink); | ||||||
| @@ -944,15 +943,6 @@ maprequest(struct wl_listener *listener, void *data) | |||||||
| 	applyrules(c); | 	applyrules(c); | ||||||
| } | } | ||||||
|  |  | ||||||
| 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 | void | ||||||
| motionabsolute(struct wl_listener *listener, void *data) | motionabsolute(struct wl_listener *listener, void *data) | ||||||
| { | { | ||||||
| @@ -1694,20 +1684,14 @@ unmapnotify(struct wl_listener *listener, void *data) | |||||||
| { | { | ||||||
| 	/* Called when the surface is unmapped, and should no longer be shown. */ | 	/* Called when the surface is unmapped, and should no longer be shown. */ | ||||||
| 	Client *c = wl_container_of(listener, c, unmap); | 	Client *c = wl_container_of(listener, c, unmap); | ||||||
| 	setmon(c, NULL, 0); |  | ||||||
| 	wl_list_remove(&c->link); | 	wl_list_remove(&c->link); | ||||||
|  | 	if (c->type == X11Unmanaged) | ||||||
|  | 		return; | ||||||
|  | 	setmon(c, NULL, 0); | ||||||
| 	wl_list_remove(&c->flink); | 	wl_list_remove(&c->flink); | ||||||
| 	wl_list_remove(&c->slink); | 	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 | void | ||||||
| updatewindowtype(Client *c) | updatewindowtype(Client *c) | ||||||
| { | { | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user