=== modified file 'src/widgets/ruler.cpp' --- src/widgets/ruler.cpp 1970-01-01 00:00:00 +0000 +++ src/widgets/ruler.cpp 1970-01-01 00:00:00 +0000 @@ -44,6 +44,8 @@ #define DEFAULT_RULER_FONT_SCALE PANGO_SCALE_X_SMALL #define MINIMUM_INCR 5 +#define DRAW_POS_PRIORITY G_PRIORITY_HIGH_IDLE + using Inkscape::Util::unit_table; enum { @@ -78,6 +80,8 @@ gint ysrc; GList *track_widgets; + + guint idle_id; } SPRulerPrivate; #define SP_RULER_GET_PRIVATE(ruler) \ @@ -146,6 +150,8 @@ static void sp_ruler_draw_ticks (SPRuler *ruler); static void sp_ruler_draw_pos (SPRuler *ruler, cairo_t *cr); +static gint sp_ruler_draw_pos_idle_handler(gpointer data); +static void sp_ruler_add_idle_draw_pos (SPRuler *ruler); static void sp_ruler_make_pixmap (SPRuler *ruler); static PangoLayout * sp_ruler_get_layout (GtkWidget *widget, @@ -885,6 +891,27 @@ } } +static gint +sp_ruler_draw_pos_idle_handler (gpointer data) +{ + SPRuler *ruler = SP_RULER (data); + sp_ruler_draw_pos (ruler, NULL); + + SPRulerPrivate *priv = SP_RULER_GET_PRIVATE (ruler); + priv->idle_id = 0; + + return FALSE; +} + +static void +sp_ruler_add_idle_draw_pos (SPRuler *ruler) +{ + SPRulerPrivate *priv = SP_RULER_GET_PRIVATE (ruler); + if (priv->idle_id == 0) { + priv->idle_id = gdk_threads_add_idle_full(DRAW_POS_PRIORITY, sp_ruler_draw_pos_idle_handler, ruler, NULL); + } +} + /** * sp_ruler_new: * @orientation: the ruler's orientation @@ -1134,7 +1161,7 @@ priv->position = position; g_object_notify (G_OBJECT (ruler), "position"); - sp_ruler_draw_pos (ruler, NULL); + sp_ruler_add_idle_draw_pos (ruler); } }