gdk: Ensure GdkFrameClock::flush-events with uncompressed motion
Sometimes, there may be motion events left in the queue, because at the time of handlign these motion events the GDK_FRAME_CLOCK_PHASE_FLUSH_EVENTS phase is not requested. Ensure that, when finding motion events on a window that does not disable motion compression, the events are anyways flushed, so they can be processed early by the window/widget event handlers. Closes: https://gitlab.gnome.org/GNOME/gtk/-/issues/4946
This commit is contained in:
parent
1ad49f238c
commit
5ea961ed93
@ -258,6 +258,7 @@ _gdk_event_queue_handle_motion_compression (GdkDisplay *display)
|
||||
GList *pending_motions = NULL;
|
||||
GdkWindow *pending_motion_window = NULL;
|
||||
GdkDevice *pending_motion_device = NULL;
|
||||
gboolean uncompressed_motion = FALSE;
|
||||
|
||||
/* If the last N events in the event queue are motion notify
|
||||
* events for the same window, drop all but the last */
|
||||
@ -282,10 +283,14 @@ _gdk_event_queue_handle_motion_compression (GdkDisplay *display)
|
||||
pending_motion_device != event->event.motion.device)
|
||||
break;
|
||||
|
||||
if (!event->event.motion.window->event_compression)
|
||||
break;
|
||||
|
||||
pending_motion_window = event->event.motion.window;
|
||||
|
||||
if (!event->event.motion.window->event_compression)
|
||||
{
|
||||
uncompressed_motion = TRUE;
|
||||
break;
|
||||
}
|
||||
|
||||
pending_motion_device = event->event.motion.device;
|
||||
pending_motions = tmp_list;
|
||||
|
||||
@ -301,9 +306,10 @@ _gdk_event_queue_handle_motion_compression (GdkDisplay *display)
|
||||
pending_motions = next;
|
||||
}
|
||||
|
||||
if (pending_motions &&
|
||||
if (uncompressed_motion ||
|
||||
(pending_motions &&
|
||||
pending_motions == display->queued_events &&
|
||||
pending_motions == display->queued_tail)
|
||||
pending_motions == display->queued_tail))
|
||||
{
|
||||
GdkFrameClock *clock = gdk_window_get_frame_clock (pending_motion_window);
|
||||
if (clock) /* might be NULL if window was destroyed */
|
||||
|
Loading…
Reference in New Issue
Block a user