diff options
| author | Leonardo Hernández Hernández <leohdz172@protonmail.com> | 2022-12-02 10:39:06 -0600 | 
|---|---|---|
| committer | Leonardo Hernández Hernández <leohdz172@protonmail.com> | 2022-12-02 10:39:06 -0600 | 
| commit | 1b39bbf3162ef5ab7c49252c29b5bcb242ebde9c (patch) | |
| tree | 3829b6c13ffe351df86553560fd151ad144af4f0 /dwl.c | |
| parent | ea1b2dda635fec8ac18ab3e6578eadd2a0f7202d (diff) | |
| parent | 4c6050331e4e9e03a43afb365263e3c48b50b294 (diff) | |
Merge remote-tracking branch 'upstream/main' into wlroots-next
Diffstat (limited to '')
| -rw-r--r-- | dwl.c | 30 | 
1 files changed, 17 insertions, 13 deletions
| @@ -390,8 +390,8 @@ applybounds(Client *c, struct wlr_box *bbox)  		struct wlr_box min = {0}, max = {0};  		client_get_size_hints(c, &max, &min);  		/* try to set size hints */ -		c->geom.width = MAX(min.width + (2 * c->bw), c->geom.width); -		c->geom.height = MAX(min.height + (2 * c->bw), c->geom.height); +		c->geom.width = MAX(min.width + (2 * (int)c->bw), c->geom.width); +		c->geom.height = MAX(min.height + (2 * (int)c->bw), c->geom.height);  		/* Some clients set them max size to INT_MAX, which does not violates  		 * the protocol but its innecesary, they can set them max size to zero. */  		if (max.width > 0 && !(2 * c->bw > INT_MAX - max.width)) /* Checks for overflow */ @@ -598,11 +598,11 @@ void  checkidleinhibitor(struct wlr_surface *exclude)  {  	int inhibited = 0; -	struct wlr_scene_tree *tree;  	struct wlr_idle_inhibitor_v1 *inhibitor;  	wl_list_for_each(inhibitor, &idle_inhibit_mgr->inhibitors, link) { -		if (exclude != inhibitor->surface && (tree = inhibitor->surface->data) -				&& tree->node.enabled) { +		struct wlr_scene_tree *tree = inhibitor->surface->data; +		if (bypass_surface_visibility || (exclude != inhibitor->surface +				&& tree->node.enabled)) {  			inhibited = 1;  			break;  		} @@ -1332,7 +1332,8 @@ void  mapnotify(struct wl_listener *listener, void *data)  {  	/* Called when the surface is mapped, or ready to display on-screen. */ -	Client *p, *c = wl_container_of(listener, c, map); +	Client *p, *w, *c = wl_container_of(listener, c, map); +	Monitor *m;  	int i;  	/* Create scene tree for this client and its border */ @@ -1360,7 +1361,7 @@ mapnotify(struct wl_listener *listener, void *data)  			focusclient(c, 1);  			exclusive_focus = c;  		} -		return; +		goto unset_fullscreen;  	}  #endif @@ -1384,7 +1385,8 @@ mapnotify(struct wl_listener *listener, void *data)  	 * we always consider floating, clients that have parent and thus  	 * we set the same tags and monitor than its parent, if not  	 * try to apply rules for them */ -	if ((p = client_get_parent(c))) { +	 /* TODO: https://github.com/djpohly/dwl/pull/334#issuecomment-1330166324 */ +	if (c->type == XDGShell && (p = client_get_parent(c))) {  		c->isfloating = 1;  		wlr_scene_node_reparent(&c->scene->node, layers[LyrFloat]);  		setmon(c, p->mon, p->tags); @@ -1394,6 +1396,12 @@ mapnotify(struct wl_listener *listener, void *data)  	printstatus();  	c->mon->un_map = 1; + +unset_fullscreen: +	m = c->mon ? c->mon : xytomon(c->geom.x, c->geom.y); +	wl_list_for_each(w, &clients, link) +		if (w != c && w->isfullscreen && VISIBLEON(w, m)) +			setfullscreen(w, 0);  }  void @@ -1512,7 +1520,7 @@ moveresize(const Arg *arg)  	if (cursor_mode != CurNormal && cursor_mode != CurPressed)  		return;  	xytonode(cursor->x, cursor->y, NULL, &grabc, NULL, NULL, NULL); -	if (!grabc || client_is_unmanaged(grabc)) +	if (!grabc || client_is_unmanaged(grabc) || grabc->isfullscreen)  		return;  	/* Float the window and tell motionnotify to grab it */ @@ -2510,10 +2518,6 @@ createnotifyx11(struct wl_listener *listener, void *data)  {  	struct wlr_xwayland_surface *xsurface = data;  	Client *c; -	/* TODO: why we unset fullscreen when a xwayland client is created? */ -	wl_list_for_each(c, &clients, link) -		if (c->isfullscreen && VISIBLEON(c, c->mon)) -			setfullscreen(c, 0);  	/* Allocate a Client for this surface */  	c = xsurface->data = ecalloc(1, sizeof(*c)); | 
