]> Dogcows Code - chaz/openbox/blobdiff - openbox/action.c
add the left/right/top/bottom direction arrows and use them for resizing those ways
[chaz/openbox] / openbox / action.c
index 1740d1b131fddd29d14bab4ab1feb9561288ca7f..41e174d98e65c7b939d17137ef7d23a0752356f5 100644 (file)
@@ -524,32 +524,48 @@ static guint translate_row_col(guint r, guint c)
     case Orientation_Horz:
         switch (screen_desktop_layout.start_corner) {
         case Corner_TopLeft:
-            return r * screen_desktop_layout.columns + c;
+            return r % screen_desktop_layout.rows *
+                screen_desktop_layout.columns +
+                c % screen_desktop_layout.columns;
         case Corner_BottomLeft:
-            return (screen_desktop_layout.rows - 1 - r) *
-                screen_desktop_layout.columns + c;
+            return (screen_desktop_layout.rows - 1 -
+                    r % screen_desktop_layout.rows) *
+                screen_desktop_layout.columns +
+                c % screen_desktop_layout.columns;
         case Corner_TopRight:
-            return r * screen_desktop_layout.columns +
-                (screen_desktop_layout.columns - 1 - c);
+            return r % screen_desktop_layout.rows *
+                screen_desktop_layout.columns +
+                (screen_desktop_layout.columns - 1 -
+                 c % screen_desktop_layout.columns);
         case Corner_BottomRight:
-            return (screen_desktop_layout.rows - 1 - r) *
+            return (screen_desktop_layout.rows - 1 -
+                    r % screen_desktop_layout.rows) *
                 screen_desktop_layout.columns +
-                (screen_desktop_layout.columns - 1 - c);
+                (screen_desktop_layout.columns - 1 -
+                 c % screen_desktop_layout.columns);
         }
     case Orientation_Vert:
         switch (screen_desktop_layout.start_corner) {
         case Corner_TopLeft:
-            return c * screen_desktop_layout.rows + r;
+            return c % screen_desktop_layout.columns *
+                screen_desktop_layout.rows +
+                r % screen_desktop_layout.rows;
         case Corner_BottomLeft:
-            return c * screen_desktop_layout.rows +
-                (screen_desktop_layout.rows - 1 - r);
+            return c % screen_desktop_layout.columns *
+                screen_desktop_layout.rows +
+                (screen_desktop_layout.rows - 1 -
+                 r % screen_desktop_layout.rows);
         case Corner_TopRight:
-            return (screen_desktop_layout.columns - 1 - c) *
-                screen_desktop_layout.rows + r;
+            return (screen_desktop_layout.columns - 1 -
+                    c % screen_desktop_layout.columns) *
+                screen_desktop_layout.rows +
+                r % screen_desktop_layout.rows;
         case Corner_BottomRight:
-            return (screen_desktop_layout.columns - 1 - c) *
+            return (screen_desktop_layout.columns - 1 -
+                    c % screen_desktop_layout.columns) *
                 screen_desktop_layout.rows +
-                (screen_desktop_layout.rows - 1 - r);
+                (screen_desktop_layout.rows - 1 -
+                 r % screen_desktop_layout.rows);
         }
     }
     g_assert_not_reached();
@@ -562,13 +578,13 @@ void action_next_desktop_column(union ActionData *data)
 
     cur_row_col(&r, &c);
     ++c;
+    if (c >= screen_desktop_layout.columns)
+        c = 0;
     d = translate_row_col(r, c);
     if (d >= screen_num_desktops) {
         if (!data->nextprevdesktop.wrap) return;
-        c = 0;
-    }
-    if (d >= screen_num_desktops)
         ++c;
+    }
     d = translate_row_col(r, c);
     if (d < screen_num_desktops)
         screen_set_desktop(d);
@@ -580,13 +596,13 @@ void action_previous_desktop_column(union ActionData *data)
 
     cur_row_col(&r, &c);
     --c;
+    if (c >= screen_desktop_layout.columns)
+        c = screen_desktop_layout.columns - 1;
     d = translate_row_col(r, c);
     if (d >= screen_num_desktops) {
         if (!data->nextprevdesktop.wrap) return;
-        c = screen_desktop_layout.columns - 1;
-    }
-    if (d >= screen_num_desktops)
         --c;
+    }
     d = translate_row_col(r, c);
     if (d < screen_num_desktops)
         screen_set_desktop(d);
@@ -598,13 +614,13 @@ void action_next_desktop_row(union ActionData *data)
 
     cur_row_col(&r, &c);
     ++r;
+    if (r >= screen_desktop_layout.rows)
+        r = 0;
     d = translate_row_col(r, c);
     if (d >= screen_num_desktops) {
         if (!data->nextprevdesktop.wrap) return;
-        r = 0;
-    }
-    if (d >= screen_num_desktops)
         ++r;
+    }
     d = translate_row_col(r, c);
     if (d < screen_num_desktops)
         screen_set_desktop(d);
@@ -616,13 +632,13 @@ void action_previous_desktop_row(union ActionData *data)
 
     cur_row_col(&r, &c);
     --r;
+    if (r >= screen_desktop_layout.rows)
+        r = screen_desktop_layout.rows - 1;
     d = translate_row_col(r, c);
     if (d >= screen_num_desktops) {
         if (!data->nextprevdesktop.wrap) return;
-        c = screen_desktop_layout.rows - 1;
-    }
-    if (d >= screen_num_desktops)
         --r;
+    }
     d = translate_row_col(r, c);
     if (d < screen_num_desktops)
         screen_set_desktop(d);
This page took 0.022249 seconds and 4 git commands to generate.