]> Dogcows Code - chaz/openbox/commitdiff
ignore the dock in placing as a last resort
authorDana Jansens <danakj@orodu.net>
Wed, 13 Jun 2007 02:42:27 +0000 (02:42 +0000)
committerDana Jansens <danakj@orodu.net>
Wed, 13 Jun 2007 02:42:27 +0000 (02:42 +0000)
openbox/dock.c
openbox/dock.h
openbox/place.c

index d8ca062d489a5cf92c0d4677a5fdacf5864410cb..c456ea7598d6c5e528fe8bd09e59a213a5fd7d40 100644 (file)
@@ -637,3 +637,8 @@ void dock_hide(gboolean hide)
         }
     }
 }
+
+void dock_get_area(Rect *a)
+{
+    RECT_SET(*a, dock->x, dock->y, dock->w, dock->h);
+}
index 051747c3f163789553c4beafc7e21098148de12b..48d6af49671223e13e69eed0a7364d2db1e16732 100644 (file)
@@ -82,4 +82,6 @@ void dock_remove(ObDockApp *app, gboolean reparent);
 void dock_app_drag(ObDockApp *app, XMotionEvent *e);
 void dock_app_configure(ObDockApp *app, gint w, gint h);
 
+void dock_get_area(Rect *a);
+
 #endif
index 6bcfe9d8df0d107bdf07424d7ab8f0e93cd3622f..b6ede657f3c4711937a26b5d583be280c5889d75 100644 (file)
 #include "frame.h"
 #include "focus.h"
 #include "config.h"
+#include "dock.h"
 #include "debug.h"
 
+extern ObDock *dock;
+
 static void add_choice(guint *choice, guint mychoice)
 {
     guint i;
@@ -220,14 +223,15 @@ static GSList* area_remove(GSList *list, Rect *a)
 }
 
 enum {
-    IGNORE_FULLSCREEN = 1 << 0,
-    IGNORE_MAXIMIZED  = 1 << 1,
-    IGNORE_MENUTOOL   = 1 << 2,
-    /*IGNORE_SHADED     = 1 << 3,*/
-    IGNORE_NONGROUP   = 1 << 3,
-    IGNORE_BELOW      = 1 << 4,
-    IGNORE_NONFOCUS   = 1 << 5,
-    IGNORE_END        = 1 << 6
+    IGNORE_FULLSCREEN = 1,
+    IGNORE_MAXIMIZED  = 2,
+    IGNORE_MENUTOOL   = 3,
+    /*IGNORE_SHADED     = 3,*/
+    IGNORE_NONGROUP   = 4,
+    IGNORE_BELOW      = 5,
+    /*IGNORE_NONFOCUS   = 1 << 5,*/
+    IGNORE_DOCK       = 6,
+    IGNORE_END        = 7
 };
 
 static gboolean place_nooverlap(ObClient *c, gint *x, gint *y)
@@ -245,7 +249,7 @@ static gboolean place_nooverlap(ObClient *c, gint *x, gint *y)
     maxit = NULL;
 
     /* try ignoring different things to find empty space */
-    for (ignore = 0; ignore < IGNORE_END && !ret; ignore = (ignore << 1) + 1) {
+    for (ignore = 0; ignore < IGNORE_END && !ret; ignore++) {
         guint i;
 
         /* try all monitors in order of preference */
@@ -274,31 +278,38 @@ static gboolean place_nooverlap(ObClient *c, gint *x, gint *y)
                     test->type == OB_CLIENT_TYPE_DESKTOP) continue;
 
 
-                if ((ignore & IGNORE_FULLSCREEN) &&
+                if ((ignore >= IGNORE_FULLSCREEN) &&
                     test->fullscreen) continue;
-                if ((ignore & IGNORE_MAXIMIZED) &&
+                if ((ignore >= IGNORE_MAXIMIZED) &&
                     test->max_horz && test->max_vert) continue;
-                if ((ignore & IGNORE_MENUTOOL) &&
+                if ((ignore >= IGNORE_MENUTOOL) &&
                     (test->type == OB_CLIENT_TYPE_MENU ||
                      test->type == OB_CLIENT_TYPE_TOOLBAR) &&
                     client_has_parent(c)) continue;
                 /*
-                if ((ignore & IGNORE_SHADED) &&
+                if ((ignore >= IGNORE_SHADED) &&
                     test->shaded) continue;
                 */
-                if ((ignore & IGNORE_NONGROUP) &&
+                if ((ignore >= IGNORE_NONGROUP) &&
                     client_has_group_siblings(c) &&
                     test->group != c->group) continue;
-                if ((ignore & IGNORE_BELOW) &&
+                if ((ignore >= IGNORE_BELOW) &&
                     test->layer < c->layer) continue;
-                if ((ignore & IGNORE_NONFOCUS) &&
+                /*
+                if ((ignore >= IGNORE_NONFOCUS) &&
                     focus_client != test) continue;
-
+                */
                 /* don't ignore this window, so remove it from the available
                    area */
                 spaces = area_remove(spaces, &test->frame->area);
             }
 
+            if (ignore < IGNORE_DOCK) {
+                Rect a;
+                dock_get_area(&a);
+                spaces = area_remove(spaces, &a);
+            }
+
             for (sit = spaces; sit; sit = g_slist_next(sit)) {
                 Rect *r = sit->data;
 
This page took 0.032854 seconds and 4 git commands to generate.