Hacks to emulate button events

This commit is contained in:
Robin Gareus 2024-10-02 05:14:12 +02:00
parent 8f32862e58
commit 94fb20c066
No known key found for this signature in database
GPG key ID: A090BCE02CF57F04
2 changed files with 52 additions and 0 deletions

View file

@ -10911,6 +10911,28 @@ proxy_button_event (GdkEvent *source_event,
case GDK_TOUCH_BEGIN:
case GDK_TOUCH_UPDATE:
case GDK_TOUCH_END:
#if 0 /* emulate button event */
if (source_event->touch.flags & 0x20000) {
if (type == GDK_TOUCH_UPDATE) {
return FALSE;
}
convert_toplevel_coords_to_window (event_win,
toplevel_x, toplevel_y,
&event->button.x, &event->button.y);
event->button.type = type == GDK_TOUCH_BEGIN ? GDK_BUTTON_PRESS : GDK_BUTTON_RELEASE;
event->button.time = source_event->touch.time;
event->button.x_root = source_event->touch.x_root;
event->button.y_root = source_event->touch.y_root;
event->button.axes = NULL;
event->button.state = 0;
event->button.button = 1;
event->button.device = display->core_pointer;
//if (type == GDK_BUTTON_PRESS) _gdk_event_button_generate (display, event);
return TRUE;
}
#endif
convert_toplevel_coords_to_window (event_win,
toplevel_x, toplevel_y,
&event->touch.x, &event->touch.y);

View file

@ -2250,6 +2250,33 @@ gdk_event_translate (GdkDisplay *display,
window = gdk_window_lookup_for_display (display, xev->event);
g_object_ref (window);
#if 0 // XXX doing this here causes a _gdk_display_pointer_grab, and subsequent touch events are directed there
if (xev->flags & 0x20000) {
/* first touch */
event->button.type = GDK_BUTTON_PRESS;
event->button.window = window;
event->button.time = xev->time;
event->button.x = xev->event_x;
event->button.y = xev->event_y;
event->button.x_root = xev->root_x;
event->button.y_root = xev->root_y;
event->button.axes = NULL;
event->button.state = 0;
event->button.button = 1;
event->button.device = display->core_pointer;
switch (xevent->xcookie.evtype) {
case XI_TouchBegin:
event->touch.type = GDK_BUTTON_PRESS;
break;
case XI_TouchEnd:
event->touch.type = GDK_BUTTON_RELEASE;
break;
default:
return FALSE;
break;
}
} else {
#endif
event->touch.window = window;
event->touch.time = xev->time;
event->touch.x = xev->event_x;
@ -2275,6 +2302,9 @@ gdk_event_translate (GdkDisplay *display,
return FALSE;
break;
}
#if 0
}
#endif
if (!set_screen_from_root (display, event, xev->root)) {
return_val = FALSE;