From 822e125492b2a7c1f94e734f9c8753e37ee33a8d Mon Sep 17 00:00:00 2001 From: Tomas Frydrych Date: Fri, 9 Jan 2009 16:28:12 +0000 Subject: [PATCH] Make sure we preserve pre-existing event mask on stage and overlay windows. --- src/compositor/mutter/compositor-mutter.c | 47 +++++++++++++++-------- 1 file changed, 31 insertions(+), 16 deletions(-) diff --git a/src/compositor/mutter/compositor-mutter.c b/src/compositor/mutter/compositor-mutter.c index e5acd928c..5dafd2f0a 100644 --- a/src/compositor/mutter/compositor-mutter.c +++ b/src/compositor/mutter/compositor-mutter.c @@ -1548,18 +1548,26 @@ get_output_window (MetaScreen *screen) MetaDisplay *display = meta_screen_get_display (screen); Display *xdisplay = meta_display_get_xdisplay (display); Window output, xroot; + XWindowAttributes attr; + long event_mask; xroot = meta_screen_get_xroot (screen); + event_mask = FocusChangeMask | + ExposureMask | + PointerMotionMask | + PropertyChangeMask | + ButtonPressMask | ButtonReleaseMask | + KeyPressMask | KeyReleaseMask; + output = XCompositeGetOverlayWindow (xdisplay, xroot); - XSelectInput (xdisplay, - output, - FocusChangeMask | - ExposureMask | - PointerMotionMask | - PropertyChangeMask | - ButtonPressMask | ButtonReleaseMask | - KeyPressMask | KeyReleaseMask); + + if (XGetWindowAttributes (xdisplay, output, &attr)) + { + event_mask |= attr.your_event_mask; + } + + XSelectInput (xdisplay, output, event_mask); return output; } @@ -1620,6 +1628,8 @@ clutter_cmp_manage_screen (MetaCompositor *compositor, Window xroot = meta_screen_get_xroot (screen); Window xwin; gint width, height; + XWindowAttributes attr; + long event_mask; /* Check if the screen is already managed */ if (meta_screen_get_compositor_data (screen)) @@ -1661,14 +1671,19 @@ clutter_cmp_manage_screen (MetaCompositor *compositor, XReparentWindow (xdisplay, xwin, info->output, 0, 0); - XSelectInput (xdisplay, - xwin, - FocusChangeMask | - ExposureMask | - PointerMotionMask | - PropertyChangeMask | - ButtonPressMask | ButtonReleaseMask | - KeyPressMask | KeyReleaseMask); + event_mask = FocusChangeMask | + ExposureMask | + PointerMotionMask | + PropertyChangeMask | + ButtonPressMask | ButtonReleaseMask | + KeyPressMask | KeyReleaseMask; + + if (XGetWindowAttributes (xdisplay, xwin, &attr)) + { + event_mask |= attr.your_event_mask; + } + + XSelectInput (xdisplay, xwin, event_mask); info->window_group = clutter_group_new (); info->overlay_group = clutter_group_new ();