From 94f5bbd000ad74103157fa8c12fea69ff7f3794f Mon Sep 17 00:00:00 2001 From: Iain Holmes Date: Sun, 25 Nov 2007 20:06:12 +0000 Subject: Make the type checking more generic, fix a leak caused by not freeing the atom list svn path=/branches/iains-blingtastic-bucket-o-bling/; revision=3437 --- src/compositor.c | 44 +++++++++++++++++++++++++++++++++++++------- 1 file changed, 37 insertions(+), 7 deletions(-) diff --git a/src/compositor.c b/src/compositor.c index 2bda32ae..87001808 100644 --- a/src/compositor.c +++ b/src/compositor.c @@ -47,6 +47,14 @@ #define USE_IDLE_REPAINT 1 +typedef enum _MetaCompWindowType +{ + META_COMP_WINDOW_NORMAL, + META_COMP_WINDOW_DND, + META_COMP_WINDOW_DESKTOP, + META_COMP_WINDOW_DOCK +} MetaCompWindowType; + struct _MetaCompositor { MetaDisplay *display; @@ -111,7 +119,8 @@ typedef struct _MetaCompWindow gboolean damaged; gboolean shaped; - gboolean dnd; + + MetaCompWindowType type; Damage damage; Picture picture; @@ -699,7 +708,7 @@ window_has_shadow (MetaCompWindow *cw) } /* Don't put shadow around DND icon windows */ - if (cw->dnd) + if (cw->type == META_COMP_WINDOW_DND) return FALSE; if (cw->mode != WINDOW_ARGB) @@ -1379,9 +1388,10 @@ get_window_type (MetaDisplay *display, { MetaCompositor *compositor = display->compositor; int n_atoms; - Atom *atoms; + Atom *atoms, type_atom; int i; + type_atom = None; n_atoms = 0; atoms = NULL; @@ -1391,11 +1401,31 @@ get_window_type (MetaDisplay *display, for (i = 0; i < n_atoms; i++) { - if (atoms[i] == compositor->atom_net_wm_window_type_dnd) - cw->dnd = TRUE; - else - cw->dnd = FALSE; + if (atoms[i] == compositor->atom_net_wm_window_type_dnd || + atoms[i] == display->atom_net_wm_window_type_desktop || + atoms[i] == display->atom_net_wm_window_type_dock || + atoms[i] == display->atom_net_wm_window_type_toolbar || + atoms[i] == display->atom_net_wm_window_type_menu || + atoms[i] == display->atom_net_wm_window_type_dialog || + atoms[i] == display->atom_net_wm_window_type_normal || + atoms[i] == display->atom_net_wm_window_type_utility || + atoms[i] == display->atom_net_wm_window_type_splash) + { + type_atom = atoms[i]; + break; + } } + + meta_XFree (atoms); + + if (type_atom == compositor->atom_net_wm_window_type_dnd) + cw->type = META_COMP_WINDOW_DND; + else if (type_atom == display->atom_net_wm_window_type_desktop) + cw->type = META_COMP_WINDOW_DESKTOP; + else if (type_atom == display->atom_net_wm_window_type_dock) + cw->type = META_COMP_WINDOW_DOCK; + else + cw->type = META_COMP_WINDOW_NORMAL; } /* Must be called with an error trap in place */ -- cgit v1.2.1