diff options
Diffstat (limited to 'sway')
| -rw-r--r-- | sway/container.c | 10 | ||||
| -rw-r--r-- | sway/handlers.c | 8 | ||||
| -rw-r--r-- | sway/layout.c | 2 | ||||
| -rw-r--r-- | sway/workspace.c | 110 | 
4 files changed, 70 insertions, 60 deletions
| diff --git a/sway/container.c b/sway/container.c index 1c17e92f..3fa9f490 100644 --- a/sway/container.c +++ b/sway/container.c @@ -69,7 +69,7 @@ swayc_t *new_workspace(swayc_t * output, const char *name) {  	workspace->layout  = L_HORIZ; // TODO:default layout  	workspace->width   = output->width;  	workspace->height  = output->height; -	workspace->name    = strdup(name); +	workspace->name	= strdup(name);  	workspace->visible = true;  	add_child(output, workspace); @@ -82,10 +82,10 @@ swayc_t *new_container(swayc_t *child, enum swayc_layouts layout) {  	sway_log(L_DEBUG, "creating container %p around %p", cont, child);  	cont->layout   = layout; -	cont->width    = child->width; +	cont->width	= child->width;  	cont->height   = child->height; -	cont->x        = child->x; -	cont->y        = child->y; +	cont->x		= child->x; +	cont->y		= child->y;  	cont->visible  = child->visible;  	swayc_t *parent = replace_child(child, cont); @@ -110,7 +110,7 @@ swayc_t *new_view(swayc_t *sibling, wlc_handle handle) {  		handle, title, type, sibling, sibling?sibling->type:0);  	//Setup values  	view->handle  = handle; -	view->name    = strdup(title); +	view->name	= strdup(title);  	view->visible = true;  	//Case of focused workspace, just create as child of it diff --git a/sway/handlers.c b/sway/handlers.c index a85eb681..4b1216bc 100644 --- a/sway/handlers.c +++ b/sway/handlers.c @@ -15,7 +15,7 @@ static struct wlc_origin mouse_origin;  static bool pointer_test(swayc_t *view, void *_origin) {  	const struct wlc_origin *origin = _origin; -    //Determine the output that the view is under +	//Determine the output that the view is under  	swayc_t *parent = view;  	while (parent->type != C_OUTPUT) {  		parent = parent->parent; @@ -192,9 +192,9 @@ static bool handle_pointer_motion(wlc_handle view, uint32_t time, const struct w  	swayc_t *c = find_container(&root_container, pointer_test, (void *)origin);  	swayc_t *focused = get_focused_container(&root_container);  	if (c && c != focused) { -	    sway_log(L_DEBUG, "Mouse pointer at X: %d, Y: %d", origin->x, origin->y); -	    sway_log(L_DEBUG, "Container to focus on is at X: %d, Y: %d, with W: %d, H: %d", c->x, c->y, c->width, c->height); -	    sway_log(L_DEBUG, "Focused container is at X: %d, Y: %d, with W: %d, H: %d", c->x, c->y, c->width, c->height); +		sway_log(L_DEBUG, "Mouse pointer at X: %d, Y: %d", origin->x, origin->y); +		sway_log(L_DEBUG, "Container to focus on is at X: %d, Y: %d, with W: %d, H: %d", c->x, c->y, c->width, c->height); +		sway_log(L_DEBUG, "Focused container is at X: %d, Y: %d, with W: %d, H: %d", c->x, c->y, c->width, c->height);  		sway_log(L_DEBUG, "Switching focus to %p", c);  		unfocus_all(&root_container);  		focus_view(c); diff --git a/sway/layout.c b/sway/layout.c index 4fd6aff9..3fd7f5c1 100644 --- a/sway/layout.c +++ b/sway/layout.c @@ -179,7 +179,7 @@ void arrange_windows(swayc_t *container, int width, int height) {  		}  		break;  	} -    layout_log(&root_container, 0); +	layout_log(&root_container, 0);  }  swayc_t *get_swayc_for_handle(wlc_handle handle, swayc_t *parent) { diff --git a/sway/workspace.c b/sway/workspace.c index 3f4590e2..1f7aeb64 100644 --- a/sway/workspace.c +++ b/sway/workspace.c @@ -94,70 +94,80 @@ swayc_t *workspace_find_by_name(const char* name) {  }  void workspace_switch(swayc_t *workspace) { -	if (workspace != active_workspace && active_workspace) { -		sway_log(L_DEBUG, "workspace: changing from '%s' to '%s'", active_workspace->name, workspace->name); +	swayc_t *parent = workspace; +	while (parent->type != C_OUTPUT) { +		parent = parent->parent; +	} +	// The current workspace of the output our target workspace is in +	swayc_t *c_workspace = parent->focused; +	if (workspace != c_workspace && c_workspace) { +		sway_log(L_DEBUG, "workspace: changing from '%s' to '%s'", c_workspace->name, workspace->name);  		uint32_t mask = 1; -		// set all c_views in the old workspace to the invisible mask -		container_map(active_workspace, set_mask, &mask); -		// and c_views in the new workspace to the visible mask +		// set all c_views in the old workspace to the invisible mask if the workspace +		// is in the same output & c_views in the new workspace to the visible mask + +		container_map(c_workspace, set_mask, &mask);  		mask = 2;  		container_map(workspace, set_mask, &mask); -  		wlc_output_set_mask(wlc_get_focused_output(), 2); + + +		//wlc_output_set_mask(wlc_get_focused_output(), 2);  		unfocus_all(&root_container);  		focus_view(workspace); -		destroy_workspace(active_workspace); + +		destroy_workspace(c_workspace);  	}  	active_workspace = workspace;  }  /* XXX:DEBUG:XXX */  static void container_log(const swayc_t *c) { -    fprintf(stderr, "focus:%c|", -        c == get_focused_container(&root_container) ? 'F' : //Focused -        c == active_workspace ? 'W' : //active workspace -        c == &root_container  ? 'R' : //root -        'X');//not any others -    fprintf(stderr,"(%p)",c); -    fprintf(stderr,"(p:%p)",c->parent); -    fprintf(stderr,"(f:%p)",c->focused); -    fprintf(stderr,"Type:"); -    fprintf(stderr, -        c->type == C_ROOT      ? "Root|" : -        c->type == C_OUTPUT    ? "Output|" : -        c->type == C_WORKSPACE ? "Workspace|" : -        c->type == C_CONTAINER ? "Container|" : -        c->type == C_VIEW      ? "View|" : -                                 "Unknown|"); -    fprintf(stderr,"layout:"); -    fprintf(stderr, -        c->layout == L_NONE     ? "NONE|" : -        c->layout == L_HORIZ    ? "Horiz|": -        c->layout == L_VERT     ? "Vert|": -        c->layout == L_STACKED  ? "Stacked|": -        c->layout == L_FLOATING ? "Floating|": -                                  "Unknown|"); -    fprintf(stderr, "w:%d|h:%d|", c->width, c->height); -    fprintf(stderr, "x:%d|y:%d|", c->x, c->y); -    fprintf(stderr, "vis:%c|", c->visible?'t':'f'); -    fprintf(stderr, "wgt:%d|", c->weight); -    fprintf(stderr, "name:%.16s|", c->name); -    fprintf(stderr, "children:%d\n",c->children?c->children->length:0); +	fprintf(stderr, "focus:%c|", +		c == get_focused_container(&root_container) ? 'F' : //Focused +		c == active_workspace ? 'W' : //active workspace +		c == &root_container  ? 'R' : //root +		'X');//not any others +	fprintf(stderr,"(%p)",c); +	fprintf(stderr,"(p:%p)",c->parent); +	fprintf(stderr,"(f:%p)",c->focused); +	fprintf(stderr,"Type:"); +	fprintf(stderr, +		c->type == C_ROOT	  ? "Root|" : +		c->type == C_OUTPUT	? "Output|" : +		c->type == C_WORKSPACE ? "Workspace|" : +		c->type == C_CONTAINER ? "Container|" : +		c->type == C_VIEW	  ? "View|" : +								 "Unknown|"); +	fprintf(stderr,"layout:"); +	fprintf(stderr, +		c->layout == L_NONE	 ? "NONE|" : +		c->layout == L_HORIZ	? "Horiz|": +		c->layout == L_VERT	 ? "Vert|": +		c->layout == L_STACKED  ? "Stacked|": +		c->layout == L_FLOATING ? "Floating|": +								  "Unknown|"); +	fprintf(stderr, "w:%d|h:%d|", c->width, c->height); +	fprintf(stderr, "x:%d|y:%d|", c->x, c->y); +	fprintf(stderr, "vis:%c|", c->visible?'t':'f'); +	fprintf(stderr, "wgt:%d|", c->weight); +	fprintf(stderr, "name:%.16s|", c->name); +	fprintf(stderr, "children:%d\n",c->children?c->children->length:0);  }  void layout_log(const swayc_t *c, int depth) { -    int i; -    int e = c->children?c->children->length:0; -    for (i = 0; i < depth; ++i) fputc(' ', stderr); -    container_log(c); -    if (e) { -        for (i = 0; i < depth; ++i) fputc(' ', stderr); -        fprintf(stderr,"(\n"); -        for (i = 0; i < e; ++i) { -            layout_log(c->children->items[i], depth + 1); -        } -        for (i = 0; i < depth; ++i) fputc(' ', stderr); -        fprintf(stderr,")\n"); -    } +	int i; +	int e = c->children?c->children->length:0; +	for (i = 0; i < depth; ++i) fputc(' ', stderr); +	container_log(c); +	if (e) { +		for (i = 0; i < depth; ++i) fputc(' ', stderr); +		fprintf(stderr,"(\n"); +		for (i = 0; i < e; ++i) { +			layout_log(c->children->items[i], depth + 1); +		} +		for (i = 0; i < depth; ++i) fputc(' ', stderr); +		fprintf(stderr,")\n"); +	}  }  /* XXX:DEBUG:XXX */ | 
