[geany/geany] f94891: Don't get properties of a non-current style state to please GTK 3.20

Colomban Wendling git-noreply at xxxxx
Mon May 2 22:31:38 UTC 2016


Branch:      refs/heads/master
Author:      Colomban Wendling <ban at herbesfolles.org>
Committer:   Colomban Wendling <ban at herbesfolles.org>
Date:        Mon, 02 May 2016 22:31:38 UTC
Commit:      f948916ad07d08bdb4ede16b7ea733ff3d12ea55
             https://github.com/geany/geany/commit/f948916ad07d08bdb4ede16b7ea733ff3d12ea55

Log Message:
-----------
Don't get properties of a non-current style state to please GTK 3.20

GTK 3.20 doesn't like getting a style property for a non-current state,
unless the call is wrapped in a save()/restore() pair.

So, fix the code to either use the current state or temporarily save
the context.

gb.c now uses different states, but it shouldn't really matter given
how they are used, and even gives a native behavior when the window
loses focus, as it now properly reacts to BACKDROP state.


Modified Paths:
--------------
    src/build.c
    src/document.c
    src/gb.c

Modified: src/build.c
8 lines changed, 7 insertions(+), 1 deletions(-)
===================================================================
@@ -1805,7 +1805,13 @@ static RowWidgets *build_add_dialog_row(GeanyDocument *doc, GtkTable *table, gui
 	label = gtk_label_new(text);
 	g_free(text);
 #if GTK_CHECK_VERSION(3,0,0)
-	gtk_style_context_get_color(gtk_widget_get_style_context(label), GTK_STATE_FLAG_INSENSITIVE, &insensitive_color);
+{
+	GtkStyleContext *ctx = gtk_widget_get_style_context(label);
+
+	gtk_style_context_save(ctx);
+	gtk_style_context_get_color(ctx, GTK_STATE_FLAG_INSENSITIVE, &insensitive_color);
+	gtk_style_context_restore(ctx);
+}
 #else
 	insensitive_color = gtk_widget_get_style(label)->text[GTK_STATE_INSENSITIVE];
 #endif


Modified: src/document.c
2 lines changed, 1 insertions(+), 1 deletions(-)
===================================================================
@@ -3269,7 +3269,7 @@ const GdkColor *document_get_status_color(GeanyDocument *doc)
 		gtk_widget_path_iter_set_name(path, -1, document_status_styles[status].name);
 		gtk_style_context_set_screen(ctx, gtk_widget_get_screen(GTK_WIDGET(doc->editor->sci)));
 		gtk_style_context_set_path(ctx, path);
-		gtk_style_context_get_color(ctx, GTK_STATE_FLAG_NORMAL, &color);
+		gtk_style_context_get_color(ctx, gtk_style_context_get_state(ctx), &color);
 		document_status_styles[status].color.red   = 0xffff * color.red;
 		document_status_styles[status].color.green = 0xffff * color.green;
 		document_status_styles[status].color.blue  = 0xffff * color.blue;


Modified: src/gb.c
7 lines changed, 4 insertions(+), 3 deletions(-)
===================================================================
@@ -99,10 +99,11 @@ static gboolean geany_pong_area_draw(GtkWidget *area, cairo_t *cr, GeanyPong *se
 	/* we use the window style context because the area one has a transparent
 	 * background and we want something to paint for the overlay */
 	GtkStyleContext *ctx = gtk_widget_get_style_context(GTK_WIDGET(self));
+	GtkStateFlags state = gtk_style_context_get_state(ctx);
 	GdkRGBA fg, bg;
 
-	gtk_style_context_get_color(ctx, GTK_STATE_FLAG_ACTIVE, &fg);
-	gtk_style_context_get_background_color(ctx, GTK_STATE_FLAG_BACKDROP, &bg);
+	gtk_style_context_get_color(ctx, state, &fg);
+	gtk_style_context_get_background_color(ctx, state, &bg);
 #else
 	GtkStyle *style = gtk_widget_get_style(area);
 	GdkColor fg = style->fg[GTK_STATE_NORMAL];
@@ -144,7 +145,7 @@ static gboolean geany_pong_area_draw(GtkWidget *area, cairo_t *cr, GeanyPong *se
 		layout = pango_cairo_create_layout(cr);
 #if GTK_CHECK_VERSION(3, 0, 0)
 		PangoFontDescription *font = NULL;
-		gtk_style_context_get(ctx, GTK_STATE_FLAG_NORMAL, GTK_STYLE_PROPERTY_FONT, &font, NULL);
+		gtk_style_context_get(ctx, state, GTK_STYLE_PROPERTY_FONT, &font, NULL);
 		if (font)
 		{
 			pango_layout_set_font_description(layout, font);



--------------
This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).


More information about the Commits mailing list