diff --git a/include/workspace.h b/include/workspace.h index aebf1365..7eee9d3d 100644 --- a/include/workspace.h +++ b/include/workspace.h @@ -47,19 +47,20 @@ void workspace_set_name(Workspace *ws, const char *name); 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 /** diff --git a/src/cmdparse.y b/src/cmdparse.y index 04e8b3ca..252f6dff 100644 --- a/src/cmdparse.y +++ b/src/cmdparse.y @@ -440,7 +440,7 @@ focus: 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++; @@ -561,18 +561,18 @@ optional_kill_mode: 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(); diff --git a/src/con.c b/src/con.c index 8fbedd3d..805d33b8 100644 --- a/src/con.c +++ b/src/con.c @@ -632,7 +632,7 @@ void con_move_to_workspace(Con *con, Con *workspace, bool fix_coordinates, bool * 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) */ @@ -668,7 +668,7 @@ void con_move_to_workspace(Con *con, Con *workspace, bool fix_coordinates, bool /* 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)); } diff --git a/src/randr.c b/src/randr.c index 2b8757e5..f5f5d198 100644 --- a/src/randr.c +++ b/src/randr.c @@ -363,7 +363,7 @@ void init_ws_for_output(Output *output, Con *content) { 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); @@ -390,7 +390,7 @@ void init_ws_for_output(Output *output, Con *content) { if (!visible) { visible = TAILQ_FIRST(&(content->nodes_head)); focused = content; - workspace_show(visible->name); + workspace_show(visible); } return; } @@ -403,7 +403,7 @@ void init_ws_for_output(Output *output, Con *content) { 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; } diff --git a/src/tree.c b/src/tree.c index 4baba58e..8c73b6ab 100644 --- a/src/tree.c +++ b/src/tree.c @@ -420,7 +420,7 @@ static bool _tree_next(Con *con, char way, orientation_t orientation, bool wrap) if (!workspace) return false; - workspace_show(workspace->name); + workspace_show(workspace); Con *focus = con_descend_direction(workspace, direction); if (focus) { con_focus(focus); diff --git a/src/workspace.c b/src/workspace.c index 32564459..a89029c4 100644 --- a/src/workspace.c +++ b/src/workspace.c @@ -180,11 +180,8 @@ static void workspace_reassign_sticky(Con *con) { * 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. */ @@ -238,11 +235,22 @@ void workspace_show(const char *num) { 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; @@ -277,7 +285,7 @@ void workspace_next() { found_current = 1; } else if (child->num == -1 && (current->num != -1 || found_current)) { next = child; - goto workspace_next_show; + goto workspace_next_end; } } } @@ -292,16 +300,15 @@ void workspace_next() { 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; @@ -336,7 +343,7 @@ void workspace_prev() { found_current = 1; } else if (child->num == -1 && (current->num != -1 || found_current)) { prev = child; - goto workspace_prev_show; + goto workspace_prev_end; } } } @@ -352,8 +359,8 @@ void workspace_prev() { } } -workspace_prev_show: - workspace_show(prev->name); +workspace_prev_end: + return prev; } static bool get_urgency_flag(Con *con) {