Implement multitouch grab
This commit is contained in:
parent
594d295dcd
commit
b852eec228
@ -153,6 +153,11 @@ gdk_display_dispose (GObject *object)
|
|||||||
display->queued_events = NULL;
|
display->queued_events = NULL;
|
||||||
display->queued_tail = NULL;
|
display->queued_tail = NULL;
|
||||||
|
|
||||||
|
if (display->touch_grabs)
|
||||||
|
{
|
||||||
|
g_hash_table_destroy (display->touch_grabs);
|
||||||
|
}
|
||||||
|
|
||||||
_gdk_displays = g_slist_remove (_gdk_displays, object);
|
_gdk_displays = g_slist_remove (_gdk_displays, object);
|
||||||
|
|
||||||
if (gdk_display_get_default() == display)
|
if (gdk_display_get_default() == display)
|
||||||
|
@ -10848,6 +10848,30 @@ proxy_button_event (GdkEvent *source_event,
|
|||||||
type, state,
|
type, state,
|
||||||
NULL, serial);
|
NULL, serial);
|
||||||
|
|
||||||
|
/* multitouch grab */
|
||||||
|
if (type == GDK_TOUCH_BEGIN && !source_event->any.send_event)
|
||||||
|
{
|
||||||
|
GdkEventTouch* tev = (GdkEventTouch*) source_event;
|
||||||
|
if (!display->touch_grabs) {
|
||||||
|
display->touch_grabs = g_hash_table_new (g_direct_hash, NULL);
|
||||||
|
}
|
||||||
|
event_win = _gdk_window_find_descendant_at (toplevel_window, toplevel_x, toplevel_y, NULL, NULL);
|
||||||
|
g_hash_table_insert (display->touch_grabs, GUINT_TO_POINTER (tev->sequence), event_win);
|
||||||
|
}
|
||||||
|
else if (type == GDK_TOUCH_END && display->touch_grabs)
|
||||||
|
{
|
||||||
|
GdkEventTouch* tev = (GdkEventTouch*) source_event;
|
||||||
|
g_hash_table_remove (display->touch_grabs, GUINT_TO_POINTER (tev->sequence));
|
||||||
|
}
|
||||||
|
else if (type == GDK_TOUCH_UPDATE && display->touch_grabs)
|
||||||
|
{
|
||||||
|
GdkEventTouch* tev = (GdkEventTouch*) source_event;
|
||||||
|
void* w = g_hash_table_lookup (display->touch_grabs, GUINT_TO_POINTER (tev->sequence));
|
||||||
|
if (w) {
|
||||||
|
event_win = GDK_WINDOW (w);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (event_win == NULL || display->ignore_core_events)
|
if (event_win == NULL || display->ignore_core_events)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
|
@ -101,6 +101,8 @@ struct _GdkDisplay
|
|||||||
GdkKeyboardGrabInfo GSEAL (keyboard_grab);
|
GdkKeyboardGrabInfo GSEAL (keyboard_grab);
|
||||||
GdkPointerWindowInfo GSEAL (pointer_info);
|
GdkPointerWindowInfo GSEAL (pointer_info);
|
||||||
|
|
||||||
|
GHashTable *GSEAL (touch_grabs);
|
||||||
|
|
||||||
/* Last reported event time from server */
|
/* Last reported event time from server */
|
||||||
guint32 GSEAL (last_event_time);
|
guint32 GSEAL (last_event_time);
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user