From 4fd1fb4d9bc0ef2e3a18d7c60f99deb1d0c466a8 Mon Sep 17 00:00:00 2001 From: Richard Hult Date: Sat, 16 Jun 2007 15:43:23 +0000 Subject: [PATCH] Break out into a separate function. 2007-06-16 Richard Hult * gdk/quartz/gdkevents-quartz.c (gdk_event_translate) (break_all_grabs): Break out into a separate function. svn path=/trunk/; revision=18160 --- ChangeLog | 5 ++++ gdk/quartz/gdkevents-quartz.c | 44 +++++++++++++++++++++-------------- 2 files changed, 31 insertions(+), 18 deletions(-) diff --git a/ChangeLog b/ChangeLog index 7af406dec4..e8cc13742d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2007-06-16 Richard Hult + + * gdk/quartz/gdkevents-quartz.c (gdk_event_translate) + (break_all_grabs): Break out into a separate function. + 2007-06-16 Richard Hult * gdk/quartz/GdkQuartzWindow.c: (isInMove): Implement, to be used diff --git a/gdk/quartz/gdkevents-quartz.c b/gdk/quartz/gdkevents-quartz.c index 536b0c65ec..6b4e673969 100644 --- a/gdk/quartz/gdkevents-quartz.c +++ b/gdk/quartz/gdkevents-quartz.c @@ -253,6 +253,31 @@ gdk_pointer_grab (GdkWindow *window, confine_to, cursor, FALSE); } +/* This is used to break any grabs in the case where we have to due to + * the grab emulation. Instead of enforcing the desktop wide grab, we + * break it when the app loses focus for example. + */ +static void +break_all_grabs (void) +{ + if (_gdk_quartz_keyboard_grab_window) + { + generate_grab_broken_event (_gdk_quartz_keyboard_grab_window, + TRUE, FALSE, + NULL); + g_object_unref (_gdk_quartz_keyboard_grab_window); + _gdk_quartz_keyboard_grab_window = NULL; + } + + if (_gdk_quartz_pointer_grab_window) + { + generate_grab_broken_event (_gdk_quartz_pointer_grab_window, + FALSE, pointer_grab_implicit, + NULL); + pointer_ungrab_internal (FALSE); + } +} + static void fixup_event (GdkEvent *event) { @@ -1481,24 +1506,7 @@ gdk_event_translate (NSEvent *nsevent) if ([nsevent type] == NSAppKitDefined) { if ([nsevent subtype] == NSApplicationDeactivatedEventType) - { - if (_gdk_quartz_keyboard_grab_window) - { - generate_grab_broken_event (_gdk_quartz_keyboard_grab_window, - TRUE, FALSE, - NULL); - g_object_unref (_gdk_quartz_keyboard_grab_window); - _gdk_quartz_keyboard_grab_window = NULL; - } - - if (_gdk_quartz_pointer_grab_window) - { - generate_grab_broken_event (_gdk_quartz_pointer_grab_window, - FALSE, pointer_grab_implicit, - NULL); - pointer_ungrab_internal (FALSE); - } - } + break_all_grabs (); } window = find_window_for_ns_event (nsevent, &x, &y);