mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-12-26 13:41:07 +00:00
GdkFrameClockIdle: don't start the tiemout/idle when in a frame
Don't start the idle if we're in the middle of painting a frame - this will prevent us from getting the timing right when starting the idle after the frame. https://bugzilla.gnome.org/show_bug.cgi?id=685460
This commit is contained in:
parent
15ee04c66f
commit
dc6dedab4d
@ -46,6 +46,8 @@ struct _GdkFrameClockIdlePrivate
|
|||||||
|
|
||||||
GdkFrameClockPhase requested;
|
GdkFrameClockPhase requested;
|
||||||
GdkFrameClockPhase phase;
|
GdkFrameClockPhase phase;
|
||||||
|
|
||||||
|
guint in_paint_idle : 1;
|
||||||
};
|
};
|
||||||
|
|
||||||
static gboolean gdk_frame_clock_flush_idle (void *data);
|
static gboolean gdk_frame_clock_flush_idle (void *data);
|
||||||
@ -170,6 +172,7 @@ maybe_start_idle (GdkFrameClockIdle *clock_idle)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (priv->paint_idle_id == 0 &&
|
if (priv->paint_idle_id == 0 &&
|
||||||
|
!priv->in_paint_idle &&
|
||||||
(priv->requested & ~GDK_FRAME_CLOCK_PHASE_FLUSH_EVENTS) != 0)
|
(priv->requested & ~GDK_FRAME_CLOCK_PHASE_FLUSH_EVENTS) != 0)
|
||||||
{
|
{
|
||||||
priv->paint_idle_id = gdk_threads_add_timeout_full (GDK_PRIORITY_REDRAW,
|
priv->paint_idle_id = gdk_threads_add_timeout_full (GDK_PRIORITY_REDRAW,
|
||||||
@ -217,6 +220,7 @@ gdk_frame_clock_paint_idle (void *data)
|
|||||||
gboolean skip_to_resume_events;
|
gboolean skip_to_resume_events;
|
||||||
|
|
||||||
priv->paint_idle_id = 0;
|
priv->paint_idle_id = 0;
|
||||||
|
priv->in_paint_idle = TRUE;
|
||||||
|
|
||||||
skip_to_resume_events =
|
skip_to_resume_events =
|
||||||
(priv->requested & ~(GDK_FRAME_CLOCK_PHASE_FLUSH_EVENTS | GDK_FRAME_CLOCK_PHASE_RESUME_EVENTS)) == 0;
|
(priv->requested & ~(GDK_FRAME_CLOCK_PHASE_FLUSH_EVENTS | GDK_FRAME_CLOCK_PHASE_RESUME_EVENTS)) == 0;
|
||||||
@ -299,7 +303,10 @@ gdk_frame_clock_paint_idle (void *data)
|
|||||||
g_signal_emit_by_name (G_OBJECT (clock), "resume-events");
|
g_signal_emit_by_name (G_OBJECT (clock), "resume-events");
|
||||||
}
|
}
|
||||||
|
|
||||||
priv->phase = GDK_FRAME_CLOCK_PHASE_NONE;
|
if (priv->freeze_count == 0)
|
||||||
|
priv->phase = GDK_FRAME_CLOCK_PHASE_NONE;
|
||||||
|
|
||||||
|
priv->in_paint_idle = FALSE;
|
||||||
|
|
||||||
if (priv->freeze_count == 0 && priv->requested != 0)
|
if (priv->freeze_count == 0 && priv->requested != 0)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user