]> git.sur5r.net Git - i3/i3/blobdiff - src/workspace.c
Implement special value 'current' for output. (#2483)
[i3/i3] / src / workspace.c
index e6a156cd2f8c96ad145cc85b2f13ce06cda89167..0da0a3780520583c2416a36357964775d16480ae 100644 (file)
@@ -525,7 +525,7 @@ Con *workspace_next(void) {
                     continue;
                 if (!first)
                     first = child;
-                if (!first_opposite && child->num != -1)
+                if (!first_opposite || (child->num != -1 && child->num < first_opposite->num))
                     first_opposite = child;
                 if (child == current) {
                     found_current = true;
@@ -590,7 +590,7 @@ Con *workspace_prev(void) {
                         continue;
                     if (!last)
                         last = child;
-                    if (!first_opposite && child->num != -1)
+                    if (!first_opposite || (child->num != -1 && child->num > first_opposite->num))
                         first_opposite = child;
                     if (child == current) {
                         found_current = true;
@@ -911,17 +911,12 @@ Con *workspace_encapsulate(Con *ws) {
 bool workspace_move_to_output(Con *ws, const char *name) {
     LOG("Trying to move workspace %p / %s to output \"%s\".\n", ws, ws->name, name);
 
-    Con *current_output_con = con_get_output(ws);
-    if (!current_output_con) {
-        ELOG("Could not get the output container for workspace %p / %s.\n", ws, ws->name);
-        return false;
-    }
-
-    Output *current_output = get_output_by_name(current_output_con->name);
-    if (!current_output) {
+    Output *current_output = get_output_for_con(ws);
+    if (current_output == NULL) {
         ELOG("Cannot get current output. This is a bug in i3.\n");
         return false;
     }
+
     Output *output = get_output_from_string(current_output, name);
     if (!output) {
         ELOG("Could not get output from string \"%s\"\n", name);