]> Dogcows Code - chaz/openbox/blobdiff - openbox/dock.c
xinerama support like crazy for struts and everything else too. this probably crashes...
[chaz/openbox] / openbox / dock.c
index 8967b8b11b21df59617022e0bd126b94d4c8379d..c128e4704464fe08608446a4bb4699c1680e81c4 100644 (file)
@@ -28,7 +28,7 @@
 #include "render/theme.h"
 
 #define DOCK_EVENT_MASK (ButtonPressMask | ButtonReleaseMask | \
-                         EnterWindowMask | LeaveWindowMask | FocusChangeMask)
+                         EnterWindowMask | LeaveWindowMask)
 #define DOCKAPP_EVENT_MASK (StructureNotifyMask)
 
 static ObDock *dock;
@@ -57,12 +57,11 @@ void dock_startup(gboolean reconfig)
         GList *it;
 
         XSetWindowBorder(ob_display, dock->frame,
-                         RrColorPixel(ob_rr_theme->
-                                      frame_focused_border_color));
-        XSetWindowBorderWidth(ob_display, dock->frame, ob_rr_theme->fbwidth);
+                         RrColorPixel(ob_rr_theme->osd_border_color));
+        XSetWindowBorderWidth(ob_display, dock->frame, ob_rr_theme->obwidth);
 
         RrAppearanceFree(dock->a_frame);
-        dock->a_frame = RrAppearanceCopy(ob_rr_theme->a_focused_title);
+        dock->a_frame = RrAppearanceCopy(ob_rr_theme->osd_hilite_bg);
 
         stacking_add(DOCK_AS_WINDOW(dock));
 
@@ -90,10 +89,14 @@ void dock_startup(gboolean reconfig)
                                 RrVisual(ob_rr_inst),
                                 CWOverrideRedirect | CWEventMask,
                                 &attrib);
-    dock->a_frame = RrAppearanceCopy(ob_rr_theme->a_focused_title);
+    dock->a_frame = RrAppearanceCopy(ob_rr_theme->osd_hilite_bg);
     XSetWindowBorder(ob_display, dock->frame,
-                     RrColorPixel(ob_rr_theme->frame_focused_border_color));
-    XSetWindowBorderWidth(ob_display, dock->frame, ob_rr_theme->fbwidth);
+                     RrColorPixel(ob_rr_theme->osd_border_color));
+    XSetWindowBorderWidth(ob_display, dock->frame, ob_rr_theme->obwidth);
+
+    /* Setting the window type so xcompmgr can tell what it is */
+    PROP_SET32(dock->frame, net_wm_window_type, atom,
+               prop_atoms.net_wm_window_type_dock);
 
     g_hash_table_insert(window_map, &dock->frame, dock);
     stacking_add(DOCK_AS_WINDOW(dock));
@@ -215,13 +218,13 @@ void dock_remove(ObDockApp *app, gboolean reparent)
 void dock_configure()
 {
     GList *it;
-    gint spot;
+    gint hspot, vspot;
     gint gravity;
-    gint minw, minh;
+    gint l, r, t, b;
     gint strw, strh;
     Rect *a;
 
-    RrMinSize(dock->a_frame, &minw, &minh);
+    RrMargins(dock->a_frame, &l, &t, &r, &b);
 
     dock->w = dock->h = 0;
 
@@ -240,21 +243,25 @@ void dock_configure()
         }
     }
 
-    spot = (config_dock_orient == OB_ORIENTATION_HORZ ? minw : minh) / 2;
+    dock->w += l + r;
+    dock->h += t + b;
+
+    hspot = l;
+    vspot = t;
 
     /* position the apps */
     for (it = dock->dock_apps; it; it = g_list_next(it)) {
         ObDockApp *app = it->data;
         switch (config_dock_orient) {
         case OB_ORIENTATION_HORZ:
-            app->x = spot;
+            app->x = hspot;
             app->y = (dock->h - app->h) / 2;
-            spot += app->w;
+            hspot += app->w;
             break;
         case OB_ORIENTATION_VERT:
             app->x = (dock->w - app->w) / 2;
-            app->y = spot;
-            spot += app->h;
+            app->y = vspot;
+            vspot += app->h;
             break;
         }
 
@@ -262,10 +269,10 @@ void dock_configure()
     }
 
     /* used for calculating offsets */
-    dock->w += ob_rr_theme->fbwidth * 2;
-    dock->h += ob_rr_theme->fbwidth * 2;
+    dock->w += ob_rr_theme->obwidth * 2;
+    dock->h += ob_rr_theme->obwidth * 2;
 
-    a = screen_physical_area();
+    a = screen_physical_area_all_monitors();
 
     /* calculate position */
     if (config_dock_floating) {
@@ -350,51 +357,51 @@ void dock_configure()
             case OB_DIRECTION_NORTHWEST:
                 switch (config_dock_orient) {
                 case OB_ORIENTATION_HORZ:
-                    dock->y -= dock->h - ob_rr_theme->fbwidth;
+                    dock->y -= dock->h - ob_rr_theme->obwidth;
                     break;
                 case OB_ORIENTATION_VERT:
-                    dock->x -= dock->w - ob_rr_theme->fbwidth;
+                    dock->x -= dock->w - ob_rr_theme->obwidth;
                     break;
                 }
                 break;
             case OB_DIRECTION_NORTH:
-                dock->y -= dock->h - ob_rr_theme->fbwidth;
+                dock->y -= dock->h - ob_rr_theme->obwidth;
                 break;
             case OB_DIRECTION_NORTHEAST:
                 switch (config_dock_orient) {
                 case OB_ORIENTATION_HORZ:
-                    dock->y -= dock->h - ob_rr_theme->fbwidth;
+                    dock->y -= dock->h - ob_rr_theme->obwidth;
                     break;
                 case OB_ORIENTATION_VERT:
-                    dock->x += dock->w - ob_rr_theme->fbwidth;
+                    dock->x += dock->w - ob_rr_theme->obwidth;
                     break;
                 }
                 break;
             case OB_DIRECTION_WEST:
-                dock->x -= dock->w - ob_rr_theme->fbwidth;
+                dock->x -= dock->w - ob_rr_theme->obwidth;
                 break;
             case OB_DIRECTION_EAST:
-                dock->x += dock->w - ob_rr_theme->fbwidth;
+                dock->x += dock->w - ob_rr_theme->obwidth;
                 break;
             case OB_DIRECTION_SOUTHWEST:
                 switch (config_dock_orient) {
                 case OB_ORIENTATION_HORZ:
-                    dock->y += dock->h - ob_rr_theme->fbwidth;
+                    dock->y += dock->h - ob_rr_theme->obwidth;
                     break;
                 case OB_ORIENTATION_VERT:
-                    dock->x -= dock->w - ob_rr_theme->fbwidth;
+                    dock->x -= dock->w - ob_rr_theme->obwidth;
                     break;
                 } break;
             case OB_DIRECTION_SOUTH:
-                dock->y += dock->h - ob_rr_theme->fbwidth;
+                dock->y += dock->h - ob_rr_theme->obwidth;
                 break;
             case OB_DIRECTION_SOUTHEAST:
                 switch (config_dock_orient) {
                 case OB_ORIENTATION_HORZ:
-                    dock->y += dock->h - ob_rr_theme->fbwidth;
+                    dock->y += dock->h - ob_rr_theme->obwidth;
                     break;
                 case OB_ORIENTATION_VERT:
-                    dock->x += dock->w - ob_rr_theme->fbwidth;
+                    dock->x += dock->w - ob_rr_theme->obwidth;
                     break;
                 }
                 break;
@@ -403,8 +410,8 @@ void dock_configure()
     }
 
     if (!config_dock_floating && config_dock_hide) {
-        strw = ob_rr_theme->fbwidth;
-        strh = ob_rr_theme->fbwidth;
+        strw = ob_rr_theme->obwidth;
+        strh = ob_rr_theme->obwidth;
     } else {
         strw = dock->w;
         strh = dock->h;
@@ -414,7 +421,7 @@ void dock_configure()
     if (!dock->dock_apps) {
         STRUT_PARTIAL_SET(dock_strut, 0, 0, 0, 0,
                           0, 0, 0, 0, 0, 0, 0, 0);
-    } else if (config_dock_floating || config_dock_nostrut || config_dock_hide)
+    } else if (config_dock_floating || config_dock_nostrut)
     {
         STRUT_PARTIAL_SET(dock_strut, 0, 0, 0, 0,
                           0, 0, 0, 0, 0, 0, 0, 0);
@@ -436,8 +443,8 @@ void dock_configure()
             break;
         case OB_DIRECTION_NORTH:
             STRUT_PARTIAL_SET(dock_strut, 0, strh, 0, 0,
-                              dock->x, dock->x + dock->w - 1,
-                              0, 0, 0, 0, 0, 0);
+                              0, 0, dock->x, dock->x + dock->w - 1,
+                              0, 0, 0, 0);
             break;
         case OB_DIRECTION_NORTHEAST:
             switch (config_dock_orient) {
@@ -499,12 +506,9 @@ void dock_configure()
         }
     }
 
-    dock->w += minw;
-    dock->h += minh;
-
     /* not used for actually sizing shit */
-    dock->w -= ob_rr_theme->fbwidth * 2;
-    dock->h -= ob_rr_theme->fbwidth * 2;
+    dock->w -= ob_rr_theme->obwidth * 2;
+    dock->h -= ob_rr_theme->obwidth * 2;
 
     if (dock->dock_apps) {
         g_assert(dock->w > 0);
@@ -519,10 +523,12 @@ void dock_configure()
         XUnmapWindow(ob_display, dock->frame);
 
     /* but they are useful outside of this function! */
-    dock->w += ob_rr_theme->fbwidth * 2;
-    dock->h += ob_rr_theme->fbwidth * 2;
+    dock->w += ob_rr_theme->obwidth * 2;
+    dock->h += ob_rr_theme->obwidth * 2;
 
     screen_update_areas();
+
+    g_free(a);
 }
 
 void dock_app_configure(ObDockApp *app, gint w, gint h)
@@ -631,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);
+}
This page took 0.030275 seconds and 4 git commands to generate.