mirror of
				https://github.com/swaywm/sway.git
				synced 2025-11-03 09:01:43 -05:00 
			
		
		
		
	Merge pull request #155 from Luminarys/master
Added in workspace back_and_forth
This commit is contained in:
		
						commit
						0ab71f5f0a
					
				
					 3 changed files with 23 additions and 4 deletions
				
			
		| 
						 | 
				
			
			@ -5,6 +5,8 @@
 | 
			
		|||
#include "list.h"
 | 
			
		||||
#include "layout.h"
 | 
			
		||||
 | 
			
		||||
extern char *prev_workspace_name;
 | 
			
		||||
 | 
			
		||||
char *workspace_next_name(void);
 | 
			
		||||
swayc_t *workspace_create(const char*);
 | 
			
		||||
swayc_t *workspace_by_name(const char*);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -800,26 +800,36 @@ static bool cmd_workspace(struct sway_config *config, int argc, char **argv) {
 | 
			
		|||
 | 
			
		||||
	if (argc == 1) {
 | 
			
		||||
		// Handle workspace next/prev
 | 
			
		||||
		if (strcmp(argv[0], "next") == 0) {
 | 
			
		||||
		if (strcasecmp(argv[0], "next") == 0) {
 | 
			
		||||
			workspace_switch(workspace_next());
 | 
			
		||||
			return true;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if (strcmp(argv[0], "prev") == 0) {
 | 
			
		||||
		if (strcasecmp(argv[0], "prev") == 0) {
 | 
			
		||||
			workspace_switch(workspace_prev());
 | 
			
		||||
			return true;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// Handle workspace output_next/prev
 | 
			
		||||
		if (strcmp(argv[0], "next_on_output") == 0) {
 | 
			
		||||
		if (strcasecmp(argv[0], "next_on_output") == 0) {
 | 
			
		||||
			workspace_switch(workspace_output_next());
 | 
			
		||||
			return true;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if (strcmp(argv[0], "prev_on_output") == 0) {
 | 
			
		||||
		if (strcasecmp(argv[0], "prev_on_output") == 0) {
 | 
			
		||||
			workspace_switch(workspace_output_prev());
 | 
			
		||||
			return true;
 | 
			
		||||
		}
 | 
			
		||||
		if (strcasecmp(argv[0], "back_and_forth") == 0) {
 | 
			
		||||
			if (prev_workspace_name) {
 | 
			
		||||
				if (workspace_by_name(prev_workspace_name)) {
 | 
			
		||||
					workspace_switch(workspace_by_name(prev_workspace_name));
 | 
			
		||||
				} else {
 | 
			
		||||
					workspace_switch(workspace_create(prev_workspace_name));
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			return true;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		swayc_t *workspace = workspace_by_name(argv[0]);
 | 
			
		||||
		if (!workspace) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -13,6 +13,8 @@
 | 
			
		|||
#include "focus.h"
 | 
			
		||||
#include "util.h"
 | 
			
		||||
 | 
			
		||||
char *prev_workspace_name;
 | 
			
		||||
 | 
			
		||||
char *workspace_next_name(void) {
 | 
			
		||||
	sway_log(L_DEBUG, "Workspace: Generating new name");
 | 
			
		||||
	int i;
 | 
			
		||||
| 
						 | 
				
			
			@ -180,6 +182,11 @@ void workspace_switch(swayc_t *workspace) {
 | 
			
		|||
	if (!workspace) {
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
	if (!prev_workspace_name || strcmp(prev_workspace_name, swayc_active_workspace()->name) != 0) {
 | 
			
		||||
		prev_workspace_name = malloc(strlen(swayc_active_workspace()->name) + 1);
 | 
			
		||||
		strcpy(prev_workspace_name, swayc_active_workspace()->name);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	sway_log(L_DEBUG, "Switching to workspace %p:%s", workspace, workspace->name);
 | 
			
		||||
	set_focused_container(get_focused_view(workspace));
 | 
			
		||||
	arrange_windows(workspace, -1, -1);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue