Merge branch 'wip/chergert/gdk-macos-fixes' into 'master'
macos: fix button release events outside of window during grabs See merge request GNOME/gtk!2692
This commit is contained in:
@@ -126,8 +126,6 @@
|
||||
GdkDisplay *display = gdk_surface_get_display (GDK_SURFACE (gdk_surface));
|
||||
double time = ((double)[event timestamp]) * 1000.0;
|
||||
|
||||
_gdk_macos_display_break_all_grabs (GDK_MACOS_DISPLAY (display), time);
|
||||
|
||||
inManualMove = NO;
|
||||
inManualResize = NO;
|
||||
inMove = NO;
|
||||
@@ -140,6 +138,8 @@
|
||||
*/
|
||||
_gdk_macos_display_send_button_event ([self gdkDisplay], event);
|
||||
|
||||
_gdk_macos_display_break_all_grabs (GDK_MACOS_DISPLAY (display), time);
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
@@ -209,11 +209,6 @@ fill_button_event (GdkMacosDisplay *display,
|
||||
g_assert (GDK_IS_MACOS_DISPLAY (display));
|
||||
g_assert (GDK_IS_MACOS_SURFACE (surface));
|
||||
|
||||
/* Ignore button events outside the window coords */
|
||||
if (x < 0 || x > GDK_SURFACE (surface)->width ||
|
||||
y < 0 || y > GDK_SURFACE (surface)->height)
|
||||
return NULL;
|
||||
|
||||
seat = gdk_display_get_default_seat (GDK_DISPLAY (display));
|
||||
state = get_keyboard_modifiers_from_ns_event (nsevent) |
|
||||
_gdk_macos_display_get_current_mouse_modifiers (display);
|
||||
@@ -238,6 +233,14 @@ fill_button_event (GdkMacosDisplay *display,
|
||||
g_assert_not_reached ();
|
||||
}
|
||||
|
||||
/* Ignore button press events outside the window coords but
|
||||
* allow for button release which can happen during grabs.
|
||||
*/
|
||||
if (type == GDK_BUTTON_PRESS &&
|
||||
(x < 0 || x > GDK_SURFACE (surface)->width ||
|
||||
y < 0 || y > GDK_SURFACE (surface)->height))
|
||||
return NULL;
|
||||
|
||||
return gdk_button_event_new (type,
|
||||
GDK_SURFACE (surface),
|
||||
gdk_seat_get_pointer (seat),
|
||||
@@ -1120,10 +1123,21 @@ _gdk_macos_display_translate (GdkMacosDisplay *self,
|
||||
break;
|
||||
|
||||
case NSEventTypeMouseExited:
|
||||
[[NSCursor arrowCursor] set];
|
||||
/* fallthrough */
|
||||
case NSEventTypeMouseEntered:
|
||||
ret = synthesize_crossing_event (self, surface, nsevent, x, y);
|
||||
{
|
||||
GdkSeat *seat = gdk_display_get_default_seat (GDK_DISPLAY (self));
|
||||
GdkDevice *pointer = gdk_seat_get_pointer (seat);
|
||||
GdkDeviceGrabInfo *grab = _gdk_display_get_last_device_grab (GDK_DISPLAY (self), pointer);
|
||||
|
||||
if (grab == NULL)
|
||||
{
|
||||
if (event_type == NSEventTypeMouseExited)
|
||||
[[NSCursor arrowCursor] set];
|
||||
|
||||
ret = synthesize_crossing_event (self, surface, nsevent, x, y);
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case NSEventTypeKeyDown:
|
||||
|
||||
Reference in New Issue
Block a user