[gtk+] Respect grab event mask for crossing events
- From: Alexander Larsson <alexl src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [gtk+] Respect grab event mask for crossing events
- Date: Tue, 15 Sep 2009 12:41:55 +0000 (UTC)
commit 0ecd87fb78dfc6ef299971472f675402f737c19c
Author: Alexander Larsson <alexl redhat com>
Date: Tue Sep 15 14:39:04 2009 +0200
Respect grab event mask for crossing events
In the case of a non-owner_events grab, use grab->event_mask rather
than the window even mask to decide whether to deliver the event
or not.
gdk/gdkwindow.c | 20 +++++++++++++-------
1 files changed, 13 insertions(+), 7 deletions(-)
---
diff --git a/gdk/gdkwindow.c b/gdk/gdkwindow.c
index 4194993..500bf65 100644
--- a/gdk/gdkwindow.c
+++ b/gdk/gdkwindow.c
@@ -9234,21 +9234,27 @@ send_crossing_event (GdkDisplay *display,
gulong serial)
{
GdkEvent *event;
- guint32 event_mask;
+ guint32 window_event_mask, type_event_mask;
GdkPointerGrabInfo *grab;
GdkWindowImplIface *impl_iface;
grab = _gdk_display_has_pointer_grab (display, serial);
if (grab != NULL &&
- !grab->owner_events &&
- (GdkWindow *)window != grab->window)
- return;
+ !grab->owner_events)
+ {
+ /* !owner_event => only report events wrt grab window, ignore rest */
+ if ((GdkWindow *)window != grab->window)
+ return;
+ window_event_mask = grab->event_mask;
+ }
+ else
+ window_event_mask = window->event_mask;
if (type == GDK_LEAVE_NOTIFY)
- event_mask = GDK_LEAVE_NOTIFY_MASK;
+ type_event_mask = GDK_LEAVE_NOTIFY_MASK;
else
- event_mask = GDK_ENTER_NOTIFY_MASK;
+ type_event_mask = GDK_ENTER_NOTIFY_MASK;
if (window->extension_events != 0)
{
@@ -9257,7 +9263,7 @@ send_crossing_event (GdkDisplay *display,
type == GDK_ENTER_NOTIFY);
}
- if (window->event_mask & event_mask)
+ if (window_event_mask & type_event_mask)
{
event = _gdk_make_event ((GdkWindow *)window, type, event_in_queue, TRUE);
event->crossing.time = time_;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]