make sure the screen_support_win does not end up getting managed as an "unmanaged...
authorDana Jansens <danakj@orodu.net>
Sat, 26 Jun 2010 22:19:37 +0000 (00:19 +0200)
committerDana Jansens <danakj@orodu.net>
Sat, 26 Jun 2010 23:37:59 +0000 (01:37 +0200)
openbox/screen.c
openbox/stacking.c

index 8326a72e410a41a81fa6802066cd142a734b88b0..9d5451aee25195994863dd2c8b9b3f38e19b56c7 100644 (file)
                         ButtonPressMask | ButtonReleaseMask | \
                         SubstructureNotifyMask)
 
+#define SSW_X -100
+#define SSW_Y -100
+#define SSW_W 1
+#define SSW_H 1
+#define SSW_B 0
+
 static gboolean screen_validate_layout(ObDesktopLayout *l);
 static gboolean replace_wm(void);
 static void     screen_tell_ksplash(void);
@@ -171,14 +177,12 @@ gboolean screen_annex(void)
     pid_t pid;
     gint i, num_support;
     gulong *supported;
-    const Rect r = {-100, -100, 1, 1};
-    const gint b = 0;
 
     /* create the netwm support window */
     attrib.override_redirect = TRUE;
     attrib.event_mask = PropertyChangeMask;
     screen_support_win = XCreateWindow(obt_display, obt_root(ob_screen),
-                                       r.x, r.y, r.width, r.height, b, 0,
+                                       SSW_X, SSW_Y, SSW_W, SSW_H, SSW_B, 0,
                                        InputOnly, CopyFromParent,
                                        CWEventMask | CWOverrideRedirect,
                                        &attrib);
@@ -201,10 +205,6 @@ gboolean screen_annex(void)
         return FALSE;
     }
 
-    screen_support_obwin = window_internal_new(screen_support_win, &r, b, 0);
-    screen_support_obwin->layer = OB_STACKING_LAYER_TOPMOST;
-    stacking_set_topmost(INTERNAL_AS_WINDOW(screen_support_obwin));
-
     screen_set_root_cursor();
 
     /* set the OPENBOX_PID hint */
@@ -369,6 +369,16 @@ void screen_startup(gboolean reconfig)
     gchar **names = NULL;
     guint32 d;
     gboolean namesexist = FALSE;
+    const Rect r = {SSW_X, SSW_Y, SSW_W, SSW_H};
+
+    if (!reconfig) {
+        screen_support_obwin = window_internal_new(screen_support_win,
+                                                   &r, SSW_B, 0);
+        screen_support_obwin->layer = OB_STACKING_LAYER_TOPMOST;
+        stacking_set_topmost(INTERNAL_AS_WINDOW(screen_support_obwin));
+        window_add(&screen_support_win,
+                   INTERNAL_AS_WINDOW(screen_support_obwin));
+    }
 
     desktop_popup = pager_popup_new();
     desktop_popup_perm = FALSE;
@@ -484,6 +494,7 @@ void screen_shutdown(gboolean reconfig)
 
     XDestroyWindow(obt_display, screen_support_win);
     stacking_remove(INTERNAL_AS_WINDOW(screen_support_obwin));
+    window_remove(screen_support_win);
     window_free(INTERNAL_AS_WINDOW(screen_support_obwin));
 
     g_strfreev(screen_desktop_names);
index 8b478f23b98e94b79354e8525694c853c5dbb871..a8dac99885f2cffead4f718c43f736b98b204955 100644 (file)
@@ -511,6 +511,7 @@ void stacking_add(ObWindow *win)
 
     if (WINDOW_IS_UNMANAGED(win)) {
         ObUNode *n = g_slice_new(ObUNode);
+        g_assert(window_top(win) != screen_support_win);
         n->um = WINDOW_AS_UNMANAGED(win);
         n->belowme = stacking_list;
         stacking_ulist = g_list_prepend(stacking_ulist, n);