]> Dogcows Code - chaz/openbox/blobdiff - openbox/dock.c
fix autohiding
[chaz/openbox] / openbox / dock.c
index df176d66d4ebfff401a337301519994072e8a76e..85dbc360f85aea466945142f25a3c9a649f64da2 100644 (file)
@@ -16,10 +16,16 @@ static ObDock *dock;
 
 StrutPartial dock_strut;
 
-void dock_startup()
+void dock_startup(gboolean reconfig)
 {
     XSetWindowAttributes attrib;
 
+    if (reconfig) {
+        stacking_add(DOCK_AS_WINDOW(dock));
+        dock_configure();
+        return;
+    }
+
     STRUT_PARTIAL_SET(dock_strut, 0, 0, 0, 0,
                       0, 0, 0, 0, 0, 0, 0, 0);
 
@@ -43,11 +49,15 @@ void dock_startup()
 
     g_hash_table_insert(window_map, &dock->frame, dock);
     stacking_add(DOCK_AS_WINDOW(dock));
-    stacking_raise(DOCK_AS_WINDOW(dock));
 }
 
-void dock_shutdown()
+void dock_shutdown(gboolean reconfig)
 {
+    if (reconfig) {
+        stacking_remove(DOCK_AS_WINDOW(dock));
+        return;
+    }
+
     XDestroyWindow(ob_display, dock->frame);
     RrAppearanceFree(dock->a_frame);
     g_hash_table_remove(window_map, &dock->frame);
@@ -344,11 +354,14 @@ void dock_configure()
         strh = ob_rr_theme->bwidth;
     } else {
         strw = dock->w;
-        strh =  dock->h;
+        strh = dock->h;
     }
 
     /* set the strut */
-    if (config_dock_floating) {
+    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) {
         STRUT_PARTIAL_SET(dock_strut, 0, 0, 0, 0,
                           0, 0, 0, 0, 0, 0, 0, 0);
     } else {
@@ -439,7 +452,10 @@ void dock_configure()
     dock->w -= ob_rr_theme->bwidth * 2;
     dock->h -= ob_rr_theme->bwidth * 2;
 
-    if (dock->w > 0 && dock->h > 0) {
+    if (dock->dock_apps) {
+        g_assert(dock->w > 0);
+        g_assert(dock->h > 0);
+
         XMoveResizeWindow(ob_display, dock->frame,
                           dock->x, dock->y, dock->w, dock->h);
 
@@ -534,8 +550,6 @@ static gboolean hide_timeout(gpointer data)
 
 void dock_hide(gboolean hide)
 {
-    if (dock->hidden == hide || !config_dock_hide)
-        return;
     if (!hide) {
         /* show */
         dock->hidden = FALSE;
@@ -543,8 +557,8 @@ void dock_hide(gboolean hide)
 
         /* if was hiding, stop it */
         ob_main_loop_timeout_remove(ob_main_loop, hide_timeout);
-    } else {
-        ob_main_loop_timeout_add(ob_main_loop, config_dock_hide_timeout * 1000,
+    } else if (!dock->hidden && config_dock_hide) {
+        ob_main_loop_timeout_add(ob_main_loop, config_dock_hide_timeout,
                                  hide_timeout, NULL, NULL);
     }
 }
This page took 0.027398 seconds and 4 git commands to generate.