]> Dogcows Code - chaz/openbox/blobdiff - openbox/dock.c
allow restacking of transients above one another
[chaz/openbox] / openbox / dock.c
index d46f76745cb33076a8c022bd92af17432fd451fb..12985fb7ea7151d194a5b321ea539066f8d56664 100644 (file)
@@ -151,6 +151,8 @@ void dock_configure()
     int spot;
     int gravity;
     int minw, minh;
+    int strw, strh;
+    Rect *a;
 
     RrMinsize(dock->a_frame, &minw, &minh);
 
@@ -190,6 +192,8 @@ void dock_configure()
     dock->w += ob_rr_theme->bwidth * 2;
     dock->h += ob_rr_theme->bwidth * 2;
 
+    a = screen_physical_area();
+
     /* calculate position */
     switch (config_dock_pos) {
     case DockPos_Floating:
@@ -203,38 +207,38 @@ void dock_configure()
         gravity = NorthWestGravity;
         break;
     case DockPos_Top:
-        dock->x = screen_physical_size.width / 2;
+        dock->x = a->width / 2;
         dock->y = 0;
         gravity = NorthGravity;
         break;
     case DockPos_TopRight:
-        dock->x = screen_physical_size.width;
+        dock->x = a->width;
         dock->y = 0;
         gravity = NorthEastGravity;
         break;
     case DockPos_Left:
         dock->x = 0;
-        dock->y = screen_physical_size.height / 2;
+        dock->y = a->height / 2;
         gravity = WestGravity;
         break;
     case DockPos_Right:
-        dock->x = screen_physical_size.width;
-        dock->y = screen_physical_size.height / 2;
+        dock->x = a->width;
+        dock->y = a->height / 2;
         gravity = EastGravity;
         break;
     case DockPos_BottomLeft:
         dock->x = 0;
-        dock->y = screen_physical_size.height;
+        dock->y = a->height;
         gravity = SouthWestGravity;
         break;
     case DockPos_Bottom:
-        dock->x = screen_physical_size.width / 2;
-        dock->y = screen_physical_size.height;
+        dock->x = a->width / 2;
+        dock->y = a->height;
         gravity = SouthGravity;
         break;
     case DockPos_BottomRight:
-        dock->x = screen_physical_size.width;
-        dock->y = screen_physical_size.height;
+        dock->x = a->width;
+        dock->y = a->height;
         gravity = SouthEastGravity;
         break;
     }
@@ -307,6 +311,13 @@ void dock_configure()
         }    
     }
 
+    if (config_dock_pos != DockPos_Floating && config_dock_hide) {
+        strw = strh = ob_rr_theme->bwidth;
+    } else {
+        strw = dock->w;
+        strh =  dock->h;
+    }
+
     /* set the strut */
     switch (config_dock_pos) {
     case DockPos_Floating:
@@ -314,39 +325,39 @@ void dock_configure()
         break;
     case DockPos_TopLeft:
         if (config_dock_horz)
-            STRUT_SET(dock_strut, 0, dock->h, 0, 0);
+            STRUT_SET(dock_strut, 0, strh, 0, 0);
         else
-            STRUT_SET(dock_strut, dock->w, 0, 0, 0);
+            STRUT_SET(dock_strut, strw, 0, 0, 0);
         break;
     case DockPos_Top:
-        STRUT_SET(dock_strut, 0, dock->h, 0, 0);
+        STRUT_SET(dock_strut, 0, strh, 0, 0);
         break;
     case DockPos_TopRight:
         if (config_dock_horz)
-            STRUT_SET(dock_strut, 0, dock->h, 0, 0);
+            STRUT_SET(dock_strut, 0, strh, 0, 0);
         else
-            STRUT_SET(dock_strut, 0, 0, dock->w, 0);
+            STRUT_SET(dock_strut, 0, 0, strw, 0);
         break;
     case DockPos_Left:
-        STRUT_SET(dock_strut, dock->w, 0, 0, 0);
+        STRUT_SET(dock_strut, strw, 0, 0, 0);
         break;
     case DockPos_Right:
-        STRUT_SET(dock_strut, 0, 0, dock->w, 0);
+        STRUT_SET(dock_strut, 0, 0, strw, 0);
         break;
     case DockPos_BottomLeft:
         if (config_dock_horz)
-            STRUT_SET(dock_strut, 0, 0, 0, dock->h);
+            STRUT_SET(dock_strut, 0, 0, 0, strh);
         else
-            STRUT_SET(dock_strut, dock->w, 0, 0, 0);
+            STRUT_SET(dock_strut, strw, 0, 0, 0);
         break;
     case DockPos_Bottom:
-        STRUT_SET(dock_strut, 0, 0, 0, dock->h);
+        STRUT_SET(dock_strut, 0, 0, 0, strh);
         break;
     case DockPos_BottomRight:
         if (config_dock_horz)
-            STRUT_SET(dock_strut, 0, 0, 0, dock->h);
+            STRUT_SET(dock_strut, 0, 0, 0, strh);
         else
-            STRUT_SET(dock_strut, 0, 0, dock->w, 0);
+            STRUT_SET(dock_strut, 0, 0, strw, 0);
         break;
     }
 
@@ -370,7 +381,7 @@ void dock_configure()
     dock->w += ob_rr_theme->bwidth * 2;
     dock->h += ob_rr_theme->bwidth * 2;
 
-    screen_update_struts();
+    screen_update_areas();
 }
 
 void dock_app_configure(DockApp *app, int w, int h)
This page took 0.025033 seconds and 4 git commands to generate.