bool workspace_is_visible(Con *ws);
/** Switches to the given workspace */
-void workspace_show(const char *num);
+void workspace_show(Con *ws);
+void workspace_show_by_name(const char *num);
/**
- * Focuses the next workspace.
+ * Returns the next workspace.
*
*/
-void workspace_next();
+Con* workspace_next();
/**
- * Focuses the previous workspace.
+ * Returns the previous workspace.
*
*/
-void workspace_prev();
+Con* workspace_prev();
#if 0
/**
int count = 0;
TAILQ_FOREACH(current, &owindows, owindows) {
Con *ws = con_get_workspace(current->con);
- workspace_show(ws->name);
+ workspace_show(ws);
LOG("focusing %p / %s\n", current->con, current->con->name);
con_focus(current->con);
count++;
workspace:
TOK_WORKSPACE TOK_NEXT
{
- workspace_next();
+ workspace_show(workspace_next());
tree_render();
}
| TOK_WORKSPACE TOK_PREV
{
- workspace_prev();
+ workspace_show(workspace_prev());
tree_render();
}
| TOK_WORKSPACE STR
{
printf("should switch to workspace %s\n", $2);
- workspace_show($2);
+ workspace_show_by_name($2);
free($2);
tree_render();
* focused. Must do before attaching because workspace_show checks to see
* if focused container is in its area. */
if (workspace_is_visible(workspace)) {
- workspace_show(workspace->name);
+ workspace_show(workspace);
/* Don’t warp if told so (when dragging floating windows with the
* mouse for example) */
/* Descend focus stack in case focus_next is a workspace which can
* occur if we move to the same workspace. Also show current workspace
* to ensure it is focused. */
- workspace_show(con_get_workspace(focus_next)->name);
+ workspace_show(con_get_workspace(focus_next));
con_focus(con_descend_focused(focus_next));
}
if (visible && (previous = TAILQ_NEXT(workspace, focused))) {
LOG("Switching to previously used workspace \"%s\" on output \"%s\"\n",
previous->name, workspace_out->name);
- workspace_show(previous->name);
+ workspace_show(previous);
}
con_detach(workspace);
if (!visible) {
visible = TAILQ_FIRST(&(content->nodes_head));
focused = content;
- workspace_show(visible->name);
+ workspace_show(visible);
}
return;
}
LOG("Initializing first assigned workspace \"%s\" for output \"%s\"\n",
assignment->name, assignment->output);
focused = content;
- workspace_show(assignment->name);
+ workspace_show_by_name(assignment->name);
return;
}
if (!workspace)
return false;
- workspace_show(workspace->name);
+ workspace_show(workspace);
Con *focus = con_descend_direction(workspace, direction);
if (focus) {
con_focus(focus);
* Switches to the given workspace
*
*/
-void workspace_show(const char *num) {
- Con *workspace, *current, *old = NULL;
-
- bool changed_num_workspaces;
- workspace = workspace_get(num, &changed_num_workspaces);
+void workspace_show_changed(Con *workspace, bool changed_num_workspaces) {
+ Con *current, *old = NULL;
/* disable fullscreen for the other workspaces and get the workspace we are
* currently on. */
ipc_send_event("workspace", I3_IPC_EVENT_WORKSPACE, "{\"change\":\"focus\"}");
}
+void workspace_show(Con *workspace) {
+ workspace_show_changed(workspace, false);
+}
+
+void workspace_show_by_name(const char *num) {
+ Con *workspace;
+ bool changed_num_workspaces;
+ workspace = workspace_get(num, &changed_num_workspaces);
+ workspace_show_changed(workspace, changed_num_workspaces);
+}
+
/*
* Focuses the next workspace.
*
*/
-void workspace_next() {
+Con* workspace_next() {
Con *current = con_get_workspace(focused);
Con *next = NULL;
Con *output;
found_current = 1;
} else if (child->num == -1 && (current->num != -1 || found_current)) {
next = child;
- goto workspace_next_show;
+ goto workspace_next_end;
}
}
}
next = child;
}
}
-
-workspace_next_show:
- workspace_show(next->name);
+workspace_next_end:
+ return next;
}
/*
* Focuses the previous workspace.
*
*/
-void workspace_prev() {
+Con* workspace_prev() {
Con *current = con_get_workspace(focused);
Con *prev = NULL;
Con *output;
found_current = 1;
} else if (child->num == -1 && (current->num != -1 || found_current)) {
prev = child;
- goto workspace_prev_show;
+ goto workspace_prev_end;
}
}
}
}
}
-workspace_prev_show:
- workspace_show(prev->name);
+workspace_prev_end:
+ return prev;
}
static bool get_urgency_flag(Con *con) {