Get implicit grabs working
This commit is contained in:
committed by
Alexander Larsson
parent
3d72fe16c0
commit
79d9a8f960
@ -1365,6 +1365,50 @@ _gdk_quartz_events_get_current_event_mask (void)
|
|||||||
return current_event_mask;
|
return current_event_mask;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define GDK_ANY_BUTTON_MASK (GDK_BUTTON1_MASK | \
|
||||||
|
GDK_BUTTON2_MASK | \
|
||||||
|
GDK_BUTTON3_MASK | \
|
||||||
|
GDK_BUTTON4_MASK | \
|
||||||
|
GDK_BUTTON5_MASK)
|
||||||
|
|
||||||
|
static void
|
||||||
|
button_event_check_implicit_grab (GdkWindow *window,
|
||||||
|
GdkEvent *event,
|
||||||
|
NSEvent *nsevent)
|
||||||
|
{
|
||||||
|
GdkDisplay *display = gdk_drawable_get_display (window);
|
||||||
|
|
||||||
|
/* track implicit grabs for button presses */
|
||||||
|
switch (event->type)
|
||||||
|
{
|
||||||
|
case GDK_BUTTON_PRESS:
|
||||||
|
if (!display->pointer_grab.window)
|
||||||
|
{
|
||||||
|
_gdk_display_set_has_pointer_grab (display,
|
||||||
|
window,
|
||||||
|
window,
|
||||||
|
FALSE,
|
||||||
|
gdk_window_get_events (window),
|
||||||
|
0, /* serial */
|
||||||
|
event->button.time,
|
||||||
|
TRUE);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GDK_BUTTON_RELEASE:
|
||||||
|
if (display->pointer_grab.window &&
|
||||||
|
display->pointer_grab.implicit &&
|
||||||
|
(current_button_state & GDK_ANY_BUTTON_MASK & ~(GDK_BUTTON1_MASK << (event->button.button - 1))) == 0)
|
||||||
|
{
|
||||||
|
_gdk_display_unset_has_pointer_grab (display, TRUE, TRUE,
|
||||||
|
event->button.time);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
g_assert_not_reached ();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
gdk_event_translate (GdkEvent *event,
|
gdk_event_translate (GdkEvent *event,
|
||||||
NSEvent *nsevent)
|
NSEvent *nsevent)
|
||||||
@ -1501,33 +1545,15 @@ gdk_event_translate (GdkEvent *event,
|
|||||||
case NSLeftMouseDown:
|
case NSLeftMouseDown:
|
||||||
case NSRightMouseDown:
|
case NSRightMouseDown:
|
||||||
case NSOtherMouseDown:
|
case NSOtherMouseDown:
|
||||||
{
|
|
||||||
GdkEventMask event_mask;
|
|
||||||
|
|
||||||
/* Emulate implicit grab, when the window has both PRESS and RELEASE
|
|
||||||
* in its mask, like X.
|
|
||||||
*/
|
|
||||||
event_mask = (GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK);
|
|
||||||
if (0 && !_gdk_quartz_pointer_grab_window && /* FIXME: add back for grabs? */
|
|
||||||
(GDK_WINDOW_OBJECT (window)->event_mask & event_mask) == event_mask)
|
|
||||||
{
|
|
||||||
pointer_grab_internal (window, FALSE,
|
|
||||||
GDK_WINDOW_OBJECT (window)->event_mask,
|
|
||||||
NULL, NULL, TRUE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fill_button_event (window, event, nsevent, x, y, x_root, y_root);
|
fill_button_event (window, event, nsevent, x, y, x_root, y_root);
|
||||||
|
button_event_check_implicit_grab (window, event, nsevent);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case NSLeftMouseUp:
|
case NSLeftMouseUp:
|
||||||
case NSRightMouseUp:
|
case NSRightMouseUp:
|
||||||
case NSOtherMouseUp:
|
case NSOtherMouseUp:
|
||||||
fill_button_event (window, event, nsevent, x, y, x_root, y_root);
|
fill_button_event (window, event, nsevent, x, y, x_root, y_root);
|
||||||
|
button_event_check_implicit_grab (window, event, nsevent);
|
||||||
/* Ungrab implicit grab */
|
|
||||||
if (0 && _gdk_quartz_pointer_grab_window && pointer_grab_implicit) /* FIXME: add back? */
|
|
||||||
pointer_ungrab_internal (TRUE);
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case NSLeftMouseDragged:
|
case NSLeftMouseDragged:
|
||||||
|
|||||||
Reference in New Issue
Block a user