path: root/libview
diff options
authorraveit65 <[email protected]>2018-03-09 16:14:26 +0100
committerraveit65 <[email protected]>2018-03-19 09:39:06 +0100
commit4bb14f5ff09c47f37a17b8b128c691878b8b1c4c (patch)
tree507991a3c87af16ea5d8ea79ce7a7eafe6e41eb2 /libview
parent1f6278d8158b56707b412281d46e1ec06fe1a4fc (diff)
Save/restore context when getting colors for a different state
Getting colors for a state different from the current state of the corresponding widget without saving the context might trigger an invalidation and a redraw. Because this was happening from the draw function this resulted in a redraw loop and constant high CPU usage. This could be triggered by selecting text or searching. inspired by:
Diffstat (limited to 'libview')
1 files changed, 7 insertions, 0 deletions
diff --git a/libview/ev-view.c b/libview/ev-view.c
index 334540c6..6e02efce 100644
--- a/libview/ev-view.c
+++ b/libview/ev-view.c
@@ -3974,7 +3974,9 @@ get_cursor_color (GtkStyleContext *context,
gdk_color_free (style_color);
} else {
+ gtk_style_context_save (context);
gtk_style_context_get_color (context, GTK_STATE_FLAG_NORMAL, color);
+ gtk_style_context_restore (context);
@@ -5622,7 +5624,9 @@ draw_rubberband (EvView *view,
GdkRGBA color;
context = gtk_widget_get_style_context (GTK_WIDGET (view));
+ gtk_style_context_save (context);
gtk_style_context_get_background_color (context, GTK_STATE_FLAG_SELECTED, &color);
+ gtk_style_context_restore (context);
cairo_save (cr);
@@ -5811,12 +5815,15 @@ _ev_view_get_selection_colors (EvView *view,
state = gtk_widget_has_focus (widget) ? GTK_STATE_FLAG_SELECTED : GTK_STATE_FLAG_ACTIVE;
context = gtk_widget_get_style_context (widget);
+ gtk_style_context_save (context);
if (bg_color)
gtk_style_context_get_background_color (context, state, bg_color);
if (fg_color)
gtk_style_context_get_color (context, state, fg_color);
+ gtk_style_context_restore (context);
static void