forked from AuroraMiddleware/gtk
frameclock: Run paint idle from flush idle
Don't return to the main loop, instead force a run of the paint idle. The paint idle will know to skip all the phases that aren't requested. This is critically important becuase gdksurface.c assumes the FLUSH_EVENTS and RESUME_EVENTS phases are matched, and we cannot guarantee that if we return to the main loop and let various reentrant code change the frame clock state. This would lead to bugs with events being paused and never unpaused again or even crashes. Fixes #4941
This commit is contained in:
parent
7536513ef8
commit
988e20cd53
@ -373,6 +373,9 @@ gdk_frame_clock_flush_idle (void *data)
|
||||
else
|
||||
priv->phase = GDK_FRAME_CLOCK_PHASE_NONE;
|
||||
|
||||
g_clear_handle_id (&priv->paint_idle_id, g_source_remove);
|
||||
gdk_frame_clock_paint_idle (data);
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user