Use meta_core_select_events() for input events

This commit is contained in:
Carlos Garnacho 2011-06-12 21:35:22 +02:00 committed by Jasper St. Pierre
parent c32ee410e9
commit b3ecd268f6
3 changed files with 21 additions and 28 deletions

View File

@ -18,6 +18,7 @@
#include "meta-background-actor-private.h" #include "meta-background-actor-private.h"
#include "window-private.h" /* to check window->hidden */ #include "window-private.h" /* to check window->hidden */
#include "display-private.h" /* for meta_display_lookup_x_window() */ #include "display-private.h" /* for meta_display_lookup_x_window() */
#include "core.h" /* for meta_core_select_events() */
#include "input-events.h" #include "input-events.h"
#include <X11/extensions/shape.h> #include <X11/extensions/shape.h>
#include <X11/extensions/Xcomposite.h> #include <X11/extensions/Xcomposite.h>
@ -156,7 +157,6 @@ get_output_window (MetaScreen *screen)
MetaDisplay *display = meta_screen_get_display (screen); MetaDisplay *display = meta_screen_get_display (screen);
Display *xdisplay = meta_display_get_xdisplay (display); Display *xdisplay = meta_display_get_xdisplay (display);
Window output, xroot; Window output, xroot;
XWindowAttributes attr;
long event_mask; long event_mask;
xroot = meta_screen_get_xroot (screen); xroot = meta_screen_get_xroot (screen);
@ -170,13 +170,7 @@ get_output_window (MetaScreen *screen)
KeyPressMask | KeyReleaseMask; KeyPressMask | KeyReleaseMask;
output = XCompositeGetOverlayWindow (xdisplay, xroot); output = XCompositeGetOverlayWindow (xdisplay, xroot);
meta_core_select_events (xdisplay, output, event_mask, TRUE);
if (XGetWindowAttributes (xdisplay, output, &attr))
{
event_mask |= attr.your_event_mask;
}
XSelectInput (xdisplay, output, event_mask);
return output; return output;
} }
@ -457,7 +451,6 @@ meta_compositor_manage_screen (MetaCompositor *compositor,
Window xroot = meta_screen_get_xroot (screen); Window xroot = meta_screen_get_xroot (screen);
Window xwin; Window xwin;
gint width, height; gint width, height;
XWindowAttributes attr;
long event_mask; long event_mask;
guint n_retries; guint n_retries;
guint max_retries; guint max_retries;
@ -534,12 +527,7 @@ meta_compositor_manage_screen (MetaCompositor *compositor,
KeyPressMask | KeyReleaseMask | KeyPressMask | KeyReleaseMask |
StructureNotifyMask; StructureNotifyMask;
if (XGetWindowAttributes (xdisplay, xwin, &attr)) meta_core_select_events (xdisplay, xwin, event_mask, TRUE);
{
event_mask |= attr.your_event_mask;
}
XSelectInput (xdisplay, xwin, event_mask);
info->window_group = meta_window_group_new (screen); info->window_group = meta_window_group_new (screen);
info->background_actor = meta_background_actor_new_for_screen (screen); info->background_actor = meta_background_actor_new_for_screen (screen);

View File

@ -37,6 +37,7 @@
#include "workspace-private.h" #include "workspace-private.h"
#include "keybindings-private.h" #include "keybindings-private.h"
#include "stack.h" #include "stack.h"
#include "core.h"
#include "xprops.h" #include "xprops.h"
#include <meta/compositor.h> #include <meta/compositor.h>
#include "mutter-enum-types.h" #include "mutter-enum-types.h"
@ -621,7 +622,6 @@ meta_screen_new (MetaDisplay *display,
MetaScreen *screen; MetaScreen *screen;
Window xroot; Window xroot;
Display *xdisplay; Display *xdisplay;
XWindowAttributes attr;
Window new_wm_sn_owner; Window new_wm_sn_owner;
Window current_wm_sn_owner; Window current_wm_sn_owner;
gboolean replace_current_wm; gboolean replace_current_wm;
@ -736,15 +736,15 @@ meta_screen_new (MetaDisplay *display,
/* We need to or with the existing event mask since /* We need to or with the existing event mask since
* gtk+ may be interested in other events. * gtk+ may be interested in other events.
*/ */
XGetWindowAttributes (xdisplay, xroot, &attr); meta_core_select_events (xdisplay, xroot,
XSelectInput (xdisplay, (SubstructureRedirectMask | SubstructureNotifyMask |
xroot, ColormapChangeMask | PropertyChangeMask |
SubstructureRedirectMask | SubstructureNotifyMask | LeaveWindowMask | EnterWindowMask |
ColormapChangeMask | PropertyChangeMask | KeyPressMask | KeyReleaseMask |
LeaveWindowMask | EnterWindowMask | FocusChangeMask | StructureNotifyMask |
KeyPressMask | KeyReleaseMask | ExposureMask),
FocusChangeMask | StructureNotifyMask | TRUE);
ExposureMask | attr.your_event_mask);
if (meta_error_trap_pop_with_return (display) != Success) if (meta_error_trap_pop_with_return (display) != Success)
{ {
meta_warning (_("Screen %d on display \"%s\" already has a window manager\n"), meta_warning (_("Screen %d on display \"%s\" already has a window manager\n"),
@ -930,7 +930,10 @@ meta_screen_free (MetaScreen *screen,
meta_stack_tracker_free (screen->stack_tracker); meta_stack_tracker_free (screen->stack_tracker);
meta_error_trap_push_with_return (screen->display); meta_error_trap_push_with_return (screen->display);
XSelectInput (screen->display->xdisplay, screen->xroot, 0); meta_core_select_events (screen->display->xdisplay,
screen->xroot, NoEventMask,
FALSE);
if (meta_error_trap_pop_with_return (screen->display) != Success) if (meta_error_trap_pop_with_return (screen->display) != Success)
meta_warning (_("Could not release screen %d on display \"%s\"\n"), meta_warning (_("Could not release screen %d on display \"%s\"\n"),
screen->number, screen->display->name); screen->number, screen->display->name);

View File

@ -43,9 +43,9 @@
#include <meta/group.h> #include <meta/group.h>
#include "window-props.h" #include "window-props.h"
#include "constraints.h" #include "constraints.h"
#include "input-events.h"
#include "mutter-enum-types.h" #include "mutter-enum-types.h"
#include "input-events.h" #include "input-events.h"
#include "core.h"
#include <X11/Xatom.h> #include <X11/Xatom.h>
#include <X11/Xlibint.h> /* For display->resource_mask */ #include <X11/Xlibint.h> /* For display->resource_mask */
@ -938,7 +938,9 @@ meta_window_new_with_attrs (MetaDisplay *display,
* the event mask, not replace it. For windows from other clients, * the event mask, not replace it. For windows from other clients,
* attrs->your_event_mask will be empty at this point. * attrs->your_event_mask will be empty at this point.
*/ */
XSelectInput (display->xdisplay, xwindow, attrs->your_event_mask | event_mask); meta_core_select_events (display->xdisplay, xwindow,
attrs->your_event_mask | event_mask,
TRUE);
has_shape = FALSE; has_shape = FALSE;
#ifdef HAVE_SHAPE #ifdef HAVE_SHAPE