win32: Handle implicit grabs
This commit is contained in:
@ -1689,6 +1689,12 @@ ensure_stacking_on_activate_app (MSG *msg,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define GDK_ANY_BUTTON_MASK (GDK_BUTTON1_MASK | \
|
||||||
|
GDK_BUTTON2_MASK | \
|
||||||
|
GDK_BUTTON3_MASK | \
|
||||||
|
GDK_BUTTON4_MASK | \
|
||||||
|
GDK_BUTTON5_MASK)
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
gdk_event_translate (MSG *msg,
|
gdk_event_translate (MSG *msg,
|
||||||
gint *ret_valp)
|
gint *ret_valp)
|
||||||
@ -2101,7 +2107,11 @@ gdk_event_translate (MSG *msg,
|
|||||||
if (GDK_WINDOW_DESTROYED (window))
|
if (GDK_WINDOW_DESTROYED (window))
|
||||||
break;
|
break;
|
||||||
|
|
||||||
/* TODO_CSW? Emulate X11's automatic active grab */
|
if (pointer_grab == NULL)
|
||||||
|
{
|
||||||
|
SetCapture (GDK_WINDOW_HWND (window));
|
||||||
|
}
|
||||||
|
|
||||||
generate_button_event (GDK_BUTTON_PRESS, button,
|
generate_button_event (GDK_BUTTON_PRESS, button,
|
||||||
window, msg);
|
window, msg);
|
||||||
|
|
||||||
@ -2141,6 +2151,15 @@ gdk_event_translate (MSG *msg,
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
if (pointer_grab != NULL && pointer_grab->implicit)
|
||||||
|
{
|
||||||
|
gint state = build_pointer_event_state (msg);
|
||||||
|
|
||||||
|
/* We keep the implicit grab until no buttons at all are held down */
|
||||||
|
if ((state & GDK_ANY_BUTTON_MASK & ~(GDK_BUTTON1_MASK << (button - 1))) == 0)
|
||||||
|
ReleaseCapture ();
|
||||||
|
}
|
||||||
|
|
||||||
generate_button_event (GDK_BUTTON_RELEASE, button,
|
generate_button_event (GDK_BUTTON_RELEASE, button,
|
||||||
window, msg);
|
window, msg);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user