mirror of
				https://codeberg.org/dwl/dwl.git
				synced 2025-11-03 09:01:45 -05:00 
			
		
		
		
	Don't switch to another disabled monitors
Since wlr_output_enable doesn't have any effect before finishing all the procedure, a little hack allows to make use of focusmon(), which must know the latest in about which output is currently disabled Also improve performance in focusmon() and cleaner code in outputmgrapplyortest()
This commit is contained in:
		
							parent
							
								
									80a685ee51
								
							
						
					
					
						commit
						d9ab75721a
					
				
					 1 changed files with 15 additions and 15 deletions
				
			
		
							
								
								
									
										28
									
								
								dwl.c
									
										
									
									
									
								
							
							
						
						
									
										28
									
								
								dwl.c
									
										
									
									
									
								
							| 
						 | 
					@ -1092,11 +1092,11 @@ void
 | 
				
			||||||
focusmon(const Arg *arg)
 | 
					focusmon(const Arg *arg)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	Client *sel;
 | 
						Client *sel;
 | 
				
			||||||
	do {
 | 
						do
 | 
				
			||||||
		sel = selclient();
 | 
					 | 
				
			||||||
		selmon = dirtomon(arg->i);
 | 
							selmon = dirtomon(arg->i);
 | 
				
			||||||
 | 
						while (!selmon->wlr_output->enabled);
 | 
				
			||||||
 | 
						sel = selclient();
 | 
				
			||||||
	focusclient(sel, focustop(selmon), 1);
 | 
						focusclient(sel, focustop(selmon), 1);
 | 
				
			||||||
	} while (!selmon->wlr_output->enabled);
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void
 | 
					void
 | 
				
			||||||
| 
						 | 
					@ -1466,19 +1466,8 @@ outputmgrapplyortest(struct wlr_output_configuration_v1 *config, bool test)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	wl_list_for_each(config_head, &config->heads, link) {
 | 
						wl_list_for_each(config_head, &config->heads, link) {
 | 
				
			||||||
		struct wlr_output *wlr_output = config_head->state.output;
 | 
							struct wlr_output *wlr_output = config_head->state.output;
 | 
				
			||||||
		Monitor *m;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
		wlr_output_enable(wlr_output, config_head->state.enabled);
 | 
							wlr_output_enable(wlr_output, config_head->state.enabled);
 | 
				
			||||||
		if (!config_head->state.enabled) {
 | 
					 | 
				
			||||||
			wl_list_for_each(m, &mons, link) {
 | 
					 | 
				
			||||||
				if (m->wlr_output->name == wlr_output->name) {
 | 
					 | 
				
			||||||
					// focus the left monitor (relative to the current focus)
 | 
					 | 
				
			||||||
					focusmon(&ar);
 | 
					 | 
				
			||||||
					closemon(m);
 | 
					 | 
				
			||||||
				}
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		if (config_head->state.enabled) {
 | 
							if (config_head->state.enabled) {
 | 
				
			||||||
			if (config_head->state.mode)
 | 
								if (config_head->state.mode)
 | 
				
			||||||
				wlr_output_set_mode(wlr_output, config_head->state.mode);
 | 
									wlr_output_set_mode(wlr_output, config_head->state.mode);
 | 
				
			||||||
| 
						 | 
					@ -1492,6 +1481,17 @@ outputmgrapplyortest(struct wlr_output_configuration_v1 *config, bool test)
 | 
				
			||||||
					config_head->state.x, config_head->state.y);
 | 
										config_head->state.x, config_head->state.y);
 | 
				
			||||||
			wlr_output_set_transform(wlr_output, config_head->state.transform);
 | 
								wlr_output_set_transform(wlr_output, config_head->state.transform);
 | 
				
			||||||
			wlr_output_set_scale(wlr_output, config_head->state.scale);
 | 
								wlr_output_set_scale(wlr_output, config_head->state.scale);
 | 
				
			||||||
 | 
							} else {
 | 
				
			||||||
 | 
								Monitor *m;
 | 
				
			||||||
 | 
								wl_list_for_each(m, &mons, link) {
 | 
				
			||||||
 | 
									if (m->wlr_output->name == wlr_output->name) {
 | 
				
			||||||
 | 
										// focus the left monitor (relative to the current focus)
 | 
				
			||||||
 | 
										m->wlr_output->enabled = !m->wlr_output->enabled;
 | 
				
			||||||
 | 
										focusmon(&ar);
 | 
				
			||||||
 | 
										closemon(m);
 | 
				
			||||||
 | 
										m->wlr_output->enabled = !m->wlr_output->enabled;
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (test) {
 | 
							if (test) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue