---
 gtktempmap.c | 27 ++++++++++++++++++++++++++-
 1 file changed, 26 insertions(+), 1 deletion(-)

diff --git a/gtktempmap.c b/gtktempmap.c
index 2161e98f..05905d98 100644
--- a/gtktempmap.c
+++ b/gtktempmap.c
@@ -182,17 +182,42 @@ static void
 UpdateStyle(GtkWidget * pw, const float r)
 {
 
-    GtkStyle *ps = gtk_style_copy(gtk_widget_get_style(pw));
     double *gbval;
 
     gbval = g_malloc(sizeof(*gbval));
     *gbval = 1.0 - (double)r;
     g_object_set_data_full(G_OBJECT(pw), "gbval", gbval, g_free);
 
+#if GTK_CHECK_VERSION(3,0,0)
+{
+    GtkCssProvider *provider = gtk_css_provider_new();
+    GtkStyleContext *context = gtk_widget_get_style_context(pw);
+    int gb = (int)((1.0f - r) * 255.0f);
+    gchar *css;
+
+    gb = CLAMP(gb, 0, 255);
+
+    css = g_strdup_printf("* { background-color: #ff%02x%02x; }",
+                          gb, gb);
+
+    gtk_css_provider_load_from_data(provider, css, -1, NULL);
+    gtk_style_context_add_provider(context,
+                                   GTK_STYLE_PROVIDER(provider),
+                                   GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
+
+    g_free(css);
+    g_object_unref(provider);
+}
+#else
+{
+    GtkStyle *ps = gtk_style_copy(gtk_widget_get_style(pw));
     ps->bg[GTK_STATE_NORMAL].red = 0xFFFF;
     ps->bg[GTK_STATE_NORMAL].blue = ps->bg[GTK_STATE_NORMAL].green = (guint16) 
((1.0f - r) * 0xFFFF);
 
     gtk_widget_set_style(pw, ps);
+    g_object_unref(ps);
+}
+#endif
 
 }
 
-- 
2.51.0


Reply via email to