diff options
author | Sebastian Keller <sebastian-keller@gmx.de> | 2015-09-07 22:51:09 +0200 |
---|---|---|
committer | Stefano Facchini <stefano.facchini@gmail.com> | 2015-09-10 13:32:12 +0200 |
commit | 5380d41b1ce90973558fc6edcd8dbd85c06318a7 (patch) | |
tree | d6b817150b72469d1d0c0ebb7d3e129e78277cb3 | |
parent | ce1420f8b3e5d92f687e180fab65cc886d9ca72c (diff) | |
download | baobab-5380d41b1ce90973558fc6edcd8dbd85c06318a7.tar.gz |
Ringchart: always use the correct state when getting colors
The ringchart was calling get_background_color on the toplevel context
with a fixed state of NORMAL without saving the context first. If the
toplevel however had additional state flags set, such as BACKDROP, this
could trigger an invalidation and cause a redraw, resulting in a redraw
loop.
Instead of saving/restoring the context, this patch uses the current
state of the context, which is the right thing to do in general anyway
and does not require saving/restoring the context unless the context is
actually modified.
https://bugzilla.gnome.org/show_bug.cgi?id=754703
-rw-r--r-- | src/baobab-ringschart.vala | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/src/baobab-ringschart.vala b/src/baobab-ringschart.vala index c87de29..d489eda 100644 --- a/src/baobab-ringschart.vala +++ b/src/baobab-ringschart.vala @@ -94,6 +94,7 @@ namespace Baobab { } var context = get_style_context (); + var context_state = context.get_state (); context.save (); context.add_class ("subfolder-tip"); context.add_class ("tooltip"); @@ -107,7 +108,7 @@ namespace Baobab { Gdk.Rectangle last_rect = Gdk.Rectangle (); - var padding = context.get_padding (Gtk.StateFlags.NORMAL); + var padding = context.get_padding (context_state); var vpadding = padding.top + padding.bottom; var hpadding = padding.left + padding.right; @@ -194,7 +195,7 @@ namespace Baobab { cr.rectangle (tooltip_rect.x + tooltip_rect.width, tooltip_rect.y, -tooltip_rect.width, tooltip_rect.height); cr.clip (); - var bg_color = context.get_background_color (Gtk.StateFlags.NORMAL); + var bg_color = context.get_background_color (context_state); cr.set_line_width (1); cr.move_to (sector_center_x, sector_center_y); Gdk.cairo_set_source_rgba (cr, bg_color); @@ -235,10 +236,14 @@ namespace Baobab { get_allocation (out allocation); var context = get_style_context (); + var context_state = context.get_state (); context.save (); - var border_color = context.get_border_color (Gtk.StateFlags.NORMAL); - var bg_color = get_toplevel ().get_style_context ().get_background_color (Gtk.StateFlags.NORMAL); + var toplevel_context = get_toplevel ().get_style_context (); + var toplevel_context_state = toplevel_context.get_state (); + + var border_color = context.get_border_color (context_state); + var bg_color = toplevel_context.get_background_color (toplevel_context_state); var center_x = allocation.width / 2; var center_y = allocation.height / 2; @@ -298,7 +303,10 @@ namespace Baobab { Gtk.Allocation allocation; get_allocation (out allocation); - var padding = get_style_context ().get_padding (Gtk.StateFlags.NORMAL); + var context = get_style_context (); + var context_state = context.get_state (); + + var padding = context.get_padding (context_state); var max_radius = int.min (allocation.width / 2, allocation.height / 2) - padding.left; // Assuming that padding is the same for all sides var thickness = max_radius / (max_depth + 1); |