mirror of
				https://codeberg.org/dwl/dwl-patches.git
				synced 2025-10-31 03:54:19 +00:00 
			
		
		
		
	 9c5d5d85f3
			
		
	
	
		9c5d5d85f3
		
			
		
	
	
	
	
		
			
			Eliminated wiki. Individual patches have a README.md explanation in their own subdirectory. Simplified submission of new patches and maintenance of existing patches. Instructions page (README.md autodisplayed) is now at https://codeberg.org/dwl/dwl-patches/
		
			
				
	
	
		
			83 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			83 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| From e42ca1c539437d3098d80983cfe2ad6f938d7a08 Mon Sep 17 00:00:00 2001
 | |
| From: Eldar Yusupov <eyusupov@gmail.com>
 | |
| Date: Sun, 17 Mar 2024 19:12:29 +0300
 | |
| Subject: [PATCH] Restore correct montior for client when it is reattached
 | |
| 
 | |
| ---
 | |
|  dwl.c | 24 ++++++++++++++++++++++--
 | |
|  1 file changed, 22 insertions(+), 2 deletions(-)
 | |
| 
 | |
| diff --git a/dwl.c b/dwl.c
 | |
| index bf763df..d8d8139 100644
 | |
| --- a/dwl.c
 | |
| +++ b/dwl.c
 | |
| @@ -107,6 +107,7 @@ typedef struct {
 | |
|  	unsigned int type; /* XDGShell or X11* */
 | |
|  	struct wlr_box geom; /* layout-relative, includes border */
 | |
|  	Monitor *mon;
 | |
| +	char *output;
 | |
|  	struct wlr_scene_tree *scene;
 | |
|  	struct wlr_scene_rect *border[4]; /* top, bottom, left, right */
 | |
|  	struct wlr_scene_tree *scene_surface;
 | |
| @@ -869,6 +870,7 @@ createmon(struct wl_listener *listener, void *data)
 | |
|  	size_t i;
 | |
|  	struct wlr_output_state state;
 | |
|  	Monitor *m;
 | |
| +	Client *c;
 | |
|  
 | |
|  	if (!wlr_output_init_render(wlr_output, alloc, drw))
 | |
|  		return;
 | |
| @@ -938,6 +940,13 @@ createmon(struct wl_listener *listener, void *data)
 | |
|  		wlr_output_layout_add_auto(output_layout, wlr_output);
 | |
|  	else
 | |
|  		wlr_output_layout_add(output_layout, wlr_output, m->m.x, m->m.y);
 | |
| +
 | |
| +	wl_list_for_each(c, &clients, link) {
 | |
| +		if (strcmp(wlr_output->name, c->output) == 0) {
 | |
| +			c->mon = m;
 | |
| +		}
 | |
| +	}
 | |
| +	updatemons(NULL, NULL);
 | |
|  }
 | |
|  
 | |
|  void
 | |
| @@ -1186,6 +1195,7 @@ destroynotify(struct wl_listener *listener, void *data)
 | |
|  		wl_list_remove(&c->map.link);
 | |
|  		wl_list_remove(&c->unmap.link);
 | |
|  	}
 | |
| +	free(c->output);
 | |
|  	free(c);
 | |
|  }
 | |
|  
 | |
| @@ -1618,6 +1628,10 @@ mapnotify(struct wl_listener *listener, void *data)
 | |
|  	} else {
 | |
|  		applyrules(c);
 | |
|  	}
 | |
| +	c->output = strdup(c->mon->wlr_output->name);
 | |
| +	if (c->output == NULL) {
 | |
| +		die("oom");
 | |
| +	}
 | |
|  	printstatus();
 | |
|  
 | |
|  unset_fullscreen:
 | |
| @@ -2565,8 +2579,14 @@ void
 | |
|  tagmon(const Arg *arg)
 | |
|  {
 | |
|  	Client *sel = focustop(selmon);
 | |
| -	if (sel)
 | |
| -		setmon(sel, dirtomon(arg->i), 0);
 | |
| +	if (!sel)
 | |
| +		return;
 | |
| +	setmon(sel, dirtomon(arg->i), 0);
 | |
| +	free(sel->output);
 | |
| +	sel->output = strdup(sel->mon->wlr_output->name);
 | |
| +	if (sel->output == NULL) {
 | |
| +		die("oom");
 | |
| +	}
 | |
|  }
 | |
|  
 | |
|  void
 | |
| -- 
 | |
| 2.44.0
 | |
| 
 |