summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Keller <sebastian-keller@gmx.de>2015-09-07 22:51:09 +0200
committerStefano Facchini <stefano.facchini@gmail.com>2015-09-10 13:32:12 +0200
commit5380d41b1ce90973558fc6edcd8dbd85c06318a7 (patch)
treed6b817150b72469d1d0c0ebb7d3e129e78277cb3
parentce1420f8b3e5d92f687e180fab65cc886d9ca72c (diff)
downloadbaobab-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.vala18
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);