diff options
author | Arnaud Rebillout <arnaud@preev.io> | 2017-06-13 15:03:02 +0700 |
---|---|---|
committer | Tristan Van Berkom <tristan.vanberkom@codethink.co.uk> | 2017-10-18 14:15:12 +0900 |
commit | 1734289c750cf5c3f780bec474e80f8f1427ebe4 (patch) | |
tree | a3fcef7161899ae706eee7cc9445fe7463bc4618 | |
parent | 59c3785e1b0e204c85483ffc00b38a63ab1599c7 (diff) | |
download | glade-1734289c750cf5c3f780bec474e80f8f1427ebe4.tar.gz |
Fix use of GTK+ style context in GladeDesignLayout.
It seems like modifying the style context in the 'draw' handler is not
recommended, and we need to save/restore the context.
Otherwise, for some widgets (GtkButton, GtkComboBox), the
GladeDesignLayout gets trapped in draw-damage loop.
See 0c076cc8828cd80f1f156a08569199675bf35165 for reference.
-rw-r--r-- | gladeui/glade-design-layout.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/gladeui/glade-design-layout.c b/gladeui/glade-design-layout.c index b5970ce0..17e9a600 100644 --- a/gladeui/glade-design-layout.c +++ b/gladeui/glade-design-layout.c @@ -1033,13 +1033,13 @@ draw_frame (GtkWidget *widget, cairo_t *cr, gboolean selected, if (priv->widget_name) { GdkRectangle *rect = &priv->south_east; - + gtk_style_context_save (context); gtk_style_context_add_class (context, "handle"); gtk_render_background (context, cr, rect->x, rect->y, rect->width, rect->height); gtk_render_frame (context, cr, rect->x, rect->y, rect->width, rect->height); gtk_render_layout (context, cr, rect->x + OUTLINE_WIDTH, rect->y + OUTLINE_WIDTH, priv->widget_name); - gtk_style_context_remove_class (context, "handle"); + gtk_style_context_restore (context); } } @@ -1084,6 +1084,7 @@ draw_selection (cairo_t *cr, if (alloc.x < 0 || alloc.y < 0) return; context = gtk_widget_get_style_context (parent); + gtk_style_context_save (context); gtk_style_context_add_class (context, "selection"); r = color->red; g = color->green; b = color->blue; gtk_widget_translate_coordinates (widget, parent, 0, 0, &x, &y); @@ -1122,7 +1123,7 @@ draw_selection (cairo_t *cr, /* Draw Selection box */ gtk_render_frame (context, cr, x - left, y - top, w + left + right, h + top + bottom); - gtk_style_context_remove_class (context, "selection"); + gtk_style_context_restore (context); } #define DIMENSION_OFFSET 9 |