forked from AuroraMiddleware/gtk
gdk: Avoid poking possibly freed memory
The event may end up freed after delivery, ensure to keep the data we need in order to emit the matching emulated crossed event matching a proximity event. Closes: https://gitlab.gnome.org/GNOME/gtk/issues/2157
This commit is contained in:
parent
d70f85d6b9
commit
bcd384711a
@ -3468,6 +3468,8 @@ static void
|
||||
gdk_wayland_tablet_flush_frame_event (GdkWaylandTabletData *tablet,
|
||||
guint32 time)
|
||||
{
|
||||
GdkEventType event_type;
|
||||
GdkWindow *window;
|
||||
GdkEvent *event;
|
||||
|
||||
event = tablet->pointer_info.frame.event;
|
||||
@ -3476,7 +3478,10 @@ gdk_wayland_tablet_flush_frame_event (GdkWaylandTabletData *tablet,
|
||||
if (!event)
|
||||
return;
|
||||
|
||||
switch (event->type)
|
||||
event_type = event->type;
|
||||
window = g_object_ref (gdk_event_get_window (event));
|
||||
|
||||
switch (event_type)
|
||||
{
|
||||
case GDK_MOTION_NOTIFY:
|
||||
event->motion.time = time;
|
||||
@ -3504,18 +3509,20 @@ gdk_wayland_tablet_flush_frame_event (GdkWaylandTabletData *tablet,
|
||||
return;
|
||||
}
|
||||
|
||||
if (event->type == GDK_PROXIMITY_OUT)
|
||||
emulate_crossing (event->proximity.window, NULL, tablet->master,
|
||||
if (event_type == GDK_PROXIMITY_OUT)
|
||||
emulate_crossing (window, NULL, tablet->master,
|
||||
tablet->current_device, GDK_LEAVE_NOTIFY,
|
||||
GDK_CROSSING_NORMAL, time);
|
||||
|
||||
_gdk_wayland_display_deliver_event (gdk_seat_get_display (tablet->seat),
|
||||
event);
|
||||
|
||||
if (event->type == GDK_PROXIMITY_IN)
|
||||
emulate_crossing (event->proximity.window, NULL, tablet->master,
|
||||
if (event_type == GDK_PROXIMITY_IN)
|
||||
emulate_crossing (window, NULL, tablet->master,
|
||||
tablet->current_device, GDK_ENTER_NOTIFY,
|
||||
GDK_CROSSING_NORMAL, time);
|
||||
|
||||
g_object_unref (window);
|
||||
}
|
||||
|
||||
static GdkEvent *
|
||||
|
Loading…
Reference in New Issue
Block a user