mirror of
				https://github.com/swaywm/sway.git
				synced 2025-11-03 09:01:43 -05:00 
			
		
		
		
	Merge pull request #501 from mikkeloscar/ws-on-output
Fix assigning workspaces to outputs
This commit is contained in:
		
						commit
						ef5d896946
					
				
					 4 changed files with 27 additions and 5 deletions
				
			
		| 
						 | 
				
			
			@ -7,7 +7,7 @@
 | 
			
		|||
 | 
			
		||||
extern char *prev_workspace_name;
 | 
			
		||||
 | 
			
		||||
char *workspace_next_name(void);
 | 
			
		||||
char *workspace_next_name(const char *output_name);
 | 
			
		||||
swayc_t *workspace_create(const char*);
 | 
			
		||||
swayc_t *workspace_by_name(const char*);
 | 
			
		||||
swayc_t *workspace_by_number(const char*);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -143,7 +143,7 @@ swayc_t *new_output(wlc_handle handle) {
 | 
			
		|||
		}
 | 
			
		||||
	}
 | 
			
		||||
	if (!ws_name) {
 | 
			
		||||
		ws_name = workspace_next_name();
 | 
			
		||||
		ws_name = workspace_next_name(output->name);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// create and initilize default workspace
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -364,7 +364,7 @@ void move_workspace_to(swayc_t* workspace, swayc_t* destination) {
 | 
			
		|||
 | 
			
		||||
	// make sure source output has a workspace
 | 
			
		||||
	if (src_op->children->length == 0) {
 | 
			
		||||
		char *ws_name = workspace_next_name();
 | 
			
		||||
		char *ws_name = workspace_next_name(src_op->name);
 | 
			
		||||
		swayc_t *ws = new_workspace(src_op, ws_name);
 | 
			
		||||
		ws->is_focused = true;
 | 
			
		||||
		free(ws_name);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -25,8 +25,22 @@ struct workspace_by_number_data {
 | 
			
		|||
	const char *name;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
char *workspace_next_name(void) {
 | 
			
		||||
	sway_log(L_DEBUG, "Workspace: Generating new name");
 | 
			
		||||
static bool workspace_valid_on_output(const char *output_name, const char *ws_name) {
 | 
			
		||||
	int i;
 | 
			
		||||
	for (i = 0; i < config->workspace_outputs->length; ++i) {
 | 
			
		||||
		struct workspace_output *wso = config->workspace_outputs->items[i];
 | 
			
		||||
		if (strcasecmp(wso->workspace, ws_name) == 0) {
 | 
			
		||||
			if (strcasecmp(wso->output, output_name) != 0) {
 | 
			
		||||
				return false;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
char *workspace_next_name(const char *output_name) {
 | 
			
		||||
	sway_log(L_DEBUG, "Workspace: Generating new workspace name for output %s", output_name);
 | 
			
		||||
	int i;
 | 
			
		||||
	int l = 1;
 | 
			
		||||
	// Scan all workspace bindings to find the next available workspace name,
 | 
			
		||||
| 
						 | 
				
			
			@ -73,6 +87,14 @@ char *workspace_next_name(void) {
 | 
			
		|||
				free(_target);
 | 
			
		||||
				continue;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			// make sure that the workspace can appear on the given
 | 
			
		||||
			// output
 | 
			
		||||
			if (!workspace_valid_on_output(output_name, _target)) {
 | 
			
		||||
				free(_target);
 | 
			
		||||
				continue;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			if (binding->order < order) {
 | 
			
		||||
				order = binding->order;
 | 
			
		||||
				target = _target;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue