mirror of
				https://github.com/DreamMaoMao/maomaowm.git
				synced 2025-11-03 09:01:47 -05:00 
			
		
		
		
	feat: add dispatch enable_monitor,disable_monitr,toggle_monitor
This commit is contained in:
		
							parent
							
								
									2764b1103a
								
							
						
					
					
						commit
						15354898c8
					
				
					 4 changed files with 58 additions and 7 deletions
				
			
		| 
						 | 
					@ -1031,6 +1031,15 @@ FuncType parse_func_name(char *func_name, Arg *arg, char *arg_value,
 | 
				
			||||||
		(*arg).v = strdup(arg_value);
 | 
							(*arg).v = strdup(arg_value);
 | 
				
			||||||
		(*arg).v2 = strdup(arg_value2);
 | 
							(*arg).v2 = strdup(arg_value2);
 | 
				
			||||||
		(*arg).v3 = strdup(arg_value3);
 | 
							(*arg).v3 = strdup(arg_value3);
 | 
				
			||||||
 | 
						} else if (strcmp(func_name, "disable_monitor") == 0) {
 | 
				
			||||||
 | 
							func = disable_monitor;
 | 
				
			||||||
 | 
							(*arg).v = strdup(arg_value);
 | 
				
			||||||
 | 
						} else if (strcmp(func_name, "enable_monitor") == 0) {
 | 
				
			||||||
 | 
							func = enable_monitor;
 | 
				
			||||||
 | 
							(*arg).v = strdup(arg_value);
 | 
				
			||||||
 | 
						} else if (strcmp(func_name, "toggle_monitor") == 0) {
 | 
				
			||||||
 | 
							func = toggle_monitor;
 | 
				
			||||||
 | 
							(*arg).v = strdup(arg_value);
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		return NULL;
 | 
							return NULL;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -66,4 +66,7 @@ int create_virtual_output(const Arg *arg);
 | 
				
			||||||
int destroy_all_virtual_output(const Arg *arg);
 | 
					int destroy_all_virtual_output(const Arg *arg);
 | 
				
			||||||
int focuslast(const Arg *arg);
 | 
					int focuslast(const Arg *arg);
 | 
				
			||||||
int toggle_trackpad_enable(const Arg *arg);
 | 
					int toggle_trackpad_enable(const Arg *arg);
 | 
				
			||||||
int setoption(const Arg *arg);
 | 
					int setoption(const Arg *arg);
 | 
				
			||||||
 | 
					int disable_monitor(const Arg *arg);
 | 
				
			||||||
 | 
					int enable_monitor(const Arg *arg);
 | 
				
			||||||
 | 
					int toggle_monitor(const Arg *arg);
 | 
				
			||||||
| 
						 | 
					@ -1573,3 +1573,48 @@ int toggleoverview(const Arg *arg) {
 | 
				
			||||||
	refresh_monitors_workspaces_status(selmon);
 | 
						refresh_monitors_workspaces_status(selmon);
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int disable_monitor(const Arg *arg) {
 | 
				
			||||||
 | 
						Monitor *m = NULL;
 | 
				
			||||||
 | 
						struct wlr_output_state state = {0};
 | 
				
			||||||
 | 
						wl_list_for_each(m, &mons, link) {
 | 
				
			||||||
 | 
							if (regex_match(arg->v, m->wlr_output->name)) {
 | 
				
			||||||
 | 
								wlr_output_state_set_enabled(&state, false);
 | 
				
			||||||
 | 
								wlr_output_commit_state(m->wlr_output, &state);
 | 
				
			||||||
 | 
								m->asleep = 1;
 | 
				
			||||||
 | 
								updatemons(NULL, NULL);
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int enable_monitor(const Arg *arg) {
 | 
				
			||||||
 | 
						Monitor *m = NULL;
 | 
				
			||||||
 | 
						struct wlr_output_state state = {0};
 | 
				
			||||||
 | 
						wl_list_for_each(m, &mons, link) {
 | 
				
			||||||
 | 
							if (regex_match(arg->v, m->wlr_output->name)) {
 | 
				
			||||||
 | 
								wlr_output_state_set_enabled(&state, true);
 | 
				
			||||||
 | 
								wlr_output_commit_state(m->wlr_output, &state);
 | 
				
			||||||
 | 
								m->asleep = 0;
 | 
				
			||||||
 | 
								updatemons(NULL, NULL);
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int toggle_monitor(const Arg *arg) {
 | 
				
			||||||
 | 
						Monitor *m = NULL;
 | 
				
			||||||
 | 
						struct wlr_output_state state = {0};
 | 
				
			||||||
 | 
						wl_list_for_each(m, &mons, link) {
 | 
				
			||||||
 | 
							if (regex_match(arg->v, m->wlr_output->name)) {
 | 
				
			||||||
 | 
								wlr_output_state_set_enabled(&state, !m->wlr_output->enabled);
 | 
				
			||||||
 | 
								wlr_output_commit_state(m->wlr_output, &state);
 | 
				
			||||||
 | 
								m->asleep = !m->wlr_output->enabled;
 | 
				
			||||||
 | 
								updatemons(NULL, NULL);
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -436,7 +436,6 @@ struct Monitor {
 | 
				
			||||||
	Client *sel, *prevsel;
 | 
						Client *sel, *prevsel;
 | 
				
			||||||
	int isoverview;
 | 
						int isoverview;
 | 
				
			||||||
	int is_in_hotarea;
 | 
						int is_in_hotarea;
 | 
				
			||||||
	int gamma_lut_changed;
 | 
					 | 
				
			||||||
	int asleep;
 | 
						int asleep;
 | 
				
			||||||
	unsigned int visible_clients;
 | 
						unsigned int visible_clients;
 | 
				
			||||||
	unsigned int visible_tiling_clients;
 | 
						unsigned int visible_tiling_clients;
 | 
				
			||||||
| 
						 | 
					@ -3988,7 +3987,6 @@ void powermgrsetmode(struct wl_listener *listener, void *data) {
 | 
				
			||||||
	if (!m)
 | 
						if (!m)
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	m->gamma_lut_changed = 1; /* Reapply gamma LUT when re-enabling the ouput */
 | 
					 | 
				
			||||||
	wlr_output_state_set_enabled(&state, event->mode);
 | 
						wlr_output_state_set_enabled(&state, event->mode);
 | 
				
			||||||
	wlr_output_commit_state(m->wlr_output, &state);
 | 
						wlr_output_commit_state(m->wlr_output, &state);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -5371,10 +5369,6 @@ void updatemons(struct wl_listener *listener, void *data) {
 | 
				
			||||||
		if ((c = focustop(m)) && c->isfullscreen)
 | 
							if ((c = focustop(m)) && c->isfullscreen)
 | 
				
			||||||
			resize(c, m->m, 0);
 | 
								resize(c, m->m, 0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/* Try to re-set the gamma LUT when updating monitors,
 | 
					 | 
				
			||||||
		 * it's only really needed when enabling a disabled output, but meh.
 | 
					 | 
				
			||||||
		 */
 | 
					 | 
				
			||||||
		m->gamma_lut_changed = 1;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
		config_head->state.x = m->m.x;
 | 
							config_head->state.x = m->m.x;
 | 
				
			||||||
		config_head->state.y = m->m.y;
 | 
							config_head->state.y = m->m.y;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue