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
This commit is contained in:
parent
da934be354
commit
15376957f7
@ -6481,8 +6481,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;
|
||||
@ -6518,6 +6516,39 @@ 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;
|
||||
}
|
||||
}
|
||||
|
||||
meta_verbose ("Calculated type %u for %s, old type %u\n",
|
||||
window->type, window->desc, old_type);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user