summaryrefslogtreecommitdiff
path: root/gdk/gdkframeclockidle.c
diff options
context:
space:
mode:
authorOwen W. Taylor <otaylor@fishsoup.net>2012-11-14 13:26:13 -0500
committerOwen W. Taylor <otaylor@fishsoup.net>2013-02-14 17:19:50 -0500
commitdc6dedab4dfdff5d067ba9f8c88d6a48cf0af143 (patch)
tree9b7faf86a3807af7205e03a19ec66f66a52e2806 /gdk/gdkframeclockidle.c
parent15ee04c66f0e0d34106eb12e815b5f8f2a2b3c5f (diff)
downloadgtk+-dc6dedab4dfdff5d067ba9f8c88d6a48cf0af143.tar.gz
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
Diffstat (limited to 'gdk/gdkframeclockidle.c')
-rw-r--r--gdk/gdkframeclockidle.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/gdk/gdkframeclockidle.c b/gdk/gdkframeclockidle.c
index 00d284c039..37a6733620 100644
--- a/gdk/gdkframeclockidle.c
+++ b/gdk/gdkframeclockidle.c
@@ -46,6 +46,8 @@ struct _GdkFrameClockIdlePrivate
GdkFrameClockPhase requested;
GdkFrameClockPhase phase;
+
+ guint in_paint_idle : 1;
};
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 &&
+ !priv->in_paint_idle &&
(priv->requested & ~GDK_FRAME_CLOCK_PHASE_FLUSH_EVENTS) != 0)
{
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;
priv->paint_idle_id = 0;
+ priv->in_paint_idle = TRUE;
skip_to_resume_events =
(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");
}
- 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)
{