]> Dogcows Code - chaz/openbox/blobdiff - openbox/dock.c
rename 'xinerama' stuff to 'monitors' to be more generic and descriptive.
[chaz/openbox] / openbox / dock.c
index 3dda174dbee21e2aeb0feb9e8af97d2dfc433c8e..12985fb7ea7151d194a5b321ea539066f8d56664 100644 (file)
@@ -150,8 +150,13 @@ void dock_configure()
     GList *it;
     int spot;
     int gravity;
+    int minw, minh;
+    int strw, strh;
+    Rect *a;
 
-    dock->w = dock->h = spot = 0;
+    RrMinsize(dock->a_frame, &minw, &minh);
+
+    dock->w = dock->h = 0;
 
     /* get the size */
     for (it = dock->dock_apps; it; it = it->next) {
@@ -165,6 +170,8 @@ void dock_configure()
         }
     }
 
+    spot = (config_dock_horz ? minw : minh) / 2;
+
     /* position the apps */
     for (it = dock->dock_apps; it; it = it->next) {
         struct DockApp *app = it->data;
@@ -185,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:
@@ -198,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;
     }
@@ -302,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:
@@ -309,42 +325,45 @@ 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;
     }
 
+    dock->w += minw;
+    dock->h += minh;
+
     /* not used for actually sizing shit */
     dock->w -= ob_rr_theme->bwidth * 2;
     dock->h -= ob_rr_theme->bwidth * 2;
@@ -362,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.028485 seconds and 4 git commands to generate.