[metacity] don't allow override-redirect windows to be META_WINDOW_NORMAL



commit 7a6d51bd90c884bb61ae6db5fcd80efdd47edc62
Author: Owen W. Taylor <otaylor fishsoup net>
Date:   Thu Aug 6 12:08:45 2009 -0400

    don't allow override-redirect windows to be META_WINDOW_NORMAL
    
    Many override-redirect windows (including the Metacity UI windows!)
    will have NET_WM_WINDOW_TYPE_NORMAL set on them because of shared
    code paths with normal windows in toolkits.
    
    Some current Compositor plugins (default plugin and gnome-shell)
    check type == NORMAL to determine if to run effects. While fixing
    such plugins to also check if the window is override-redirect is
    posisble, it seems cleanest to simply not allow any of the decorated
    window types to be set on an override-redirect window and to force
    these types to META_WINDOW_OVERRIDE_OTHER. This will prevent other
    similar problems from showing up in the future.
    
    http://bugzilla.gnome.org/show_bug.cgi?id=590971

 src/core/window.c |   41 +++++++++++++++++++++++++++++++++++++++--
 1 files changed, 39 insertions(+), 2 deletions(-)
---
diff --git a/src/core/window.c b/src/core/window.c
index 80ee3cc..706272a 100644
--- a/src/core/window.c
+++ b/src/core/window.c
@@ -6413,8 +6413,6 @@ recalc_window_type (MetaWindow *window)
         window->type = META_WINDOW_COMBO;
       else if (window->type_atom  == window->display->atom__NET_WM_WINDOW_TYPE_DND)
         window->type = META_WINDOW_DND;
-      else if (window->override_redirect)
-        window->type = META_WINDOW_OVERRIDE_OTHER;
       else
         {
           char *atom_name;
@@ -6446,6 +6444,45 @@ recalc_window_type (MetaWindow *window)
       window->wm_state_modal)
     window->type = META_WINDOW_MODAL_DIALOG;
 
+  /* We don't want to allow override-redirect windows to have
+   * decorated-window types since that's just confusing.
+   */
+  if (window->override_redirect)
+    {
+      switch (window->type)
+        {
+        /* Decorated types */
+        case META_WINDOW_NORMAL:
+        case META_WINDOW_DIALOG:
+        case META_WINDOW_MODAL_DIALOG:
+        case META_WINDOW_MENU:
+        case META_WINDOW_UTILITY:
+          window->type = META_WINDOW_OVERRIDE_OTHER;
+          break;
+
+        /* Undecorated types, normally not override-redirect */
+        case META_WINDOW_DESKTOP:
+        case META_WINDOW_DOCK:
+        case META_WINDOW_TOOLBAR:
+        case META_WINDOW_SPLASHSCREEN:
+
+        /* Undecorated types, normally override-redirect types */
+        case META_WINDOW_DROPDOWN_MENU:
+        case META_WINDOW_POPUP_MENU:
+        case META_WINDOW_TOOLTIP:
+        case META_WINDOW_NOTIFICATION:
+        case META_WINDOW_COMBO:
+        case META_WINDOW_DND:
+
+        /* To complete enum */
+        case META_WINDOW_OVERRIDE_OTHER:
+          break;
+
+        default:
+          break;
+        }
+    }
+
   meta_verbose ("Calculated type %u for %s, old type %u\n",
                 window->type, window->desc, old_type);
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]