[virt-tools-list] [PATCH] Get rid of deprecated functions to customize widget colors

Eduardo Lima (Etrunko) etrunko at redhat.com
Mon Jun 27 21:00:15 UTC 2016


Fixes https://bugs.freedesktop.org/show_bug.cgi?id=94276

Signed-off-by: Eduardo Lima (Etrunko) <etrunko at redhat.com>
---

As a result of commit cc455b7f916110d7cfae6b7af753349e070c9494, setting
custom color for background does not work anymore on my Fedora 23
system. The status label still rendered with white color, but with the
background with default theme color (usually light grey), it has become
hard to read the text from the label.

I talked to Fabiano who told me that everything was working as expected
with his recently upgraded Fedora 24 system. While trying to track and
fix the issue, I noticed that it will only happen if the notebook tabs
are hidden. If tabs are shown, the background color will be properly
set.

I tracked down to Gtk+ some changes to GtkNotebook in recently released
version 3.20, which fixed the rendering of the custom background color,
with tabs hidden, but those could not be easily backported. Even though
it is a change of behavior in virt-viewer, I think it is really a minor
issue, and I decided to not spent too much time on this, so I put a
check for Gtk+ version to decide whether or not set the custom colors.

Some screenshots to illustrate:

Gtk+ > 3.20:
  http://imgur.com/gpuMukA

Gtk+ < 3.20:

  without this patch.: http://imgur.com/RdirSoX
  with this patch....: http://imgur.com/9LJNeNI

---
 src/virt-viewer-notebook.c | 25 ++++++++++++++-----------
 src/virt-viewer-window.c   | 10 ----------
 2 files changed, 14 insertions(+), 21 deletions(-)

diff --git a/src/virt-viewer-notebook.c b/src/virt-viewer-notebook.c
index 420c914..f02779c 100644
--- a/src/virt-viewer-notebook.c
+++ b/src/virt-viewer-notebook.c
@@ -71,25 +71,28 @@ static void
 virt_viewer_notebook_init (VirtViewerNotebook *self)
 {
     VirtViewerNotebookPrivate *priv;
-    GdkRGBA color;
 
     self->priv = GET_PRIVATE(self);
     priv = self->priv;
 
-    priv->status = gtk_label_new("");
+    /* Check for Gtk+ 3.20 to set the custom colors, because with older versions
+     * it the background color will not be set correctly, so we will end up with
+     * the default theme color for background (usually light grey), while the
+     * foreground text color is white.
+     */
+    if (gtk_check_version(3,20,0) == NULL) {
+        GtkStyleContext *style = gtk_widget_get_style_context(GTK_WIDGET(self));
+        GtkCssProvider *css = gtk_css_provider_new();
+        gtk_css_provider_load_from_data(css, "* { background-color: black; color: white; }", -1, NULL);
+        gtk_style_context_add_provider(style, GTK_STYLE_PROVIDER(css), GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
+    }
+
     gtk_notebook_set_show_tabs(GTK_NOTEBOOK(self), FALSE);
     gtk_notebook_set_show_border(GTK_NOTEBOOK(self), FALSE);
+
+    priv->status = gtk_label_new("");
     gtk_widget_show_all(priv->status);
     gtk_notebook_append_page(GTK_NOTEBOOK(self), priv->status, NULL);
-    gdk_rgba_parse(&color, "white");
-    /* FIXME:
-     * This method has been deprecated in 3.16.
-     * For more details on how to deal with this in the future, please, see:
-     * https://developer.gnome.org/gtk3/stable/GtkWidget.html#gtk-widget-override-color
-     * For the bug report about this deprecated function, please, see:
-     * https://bugs.freedesktop.org/show_bug.cgi?id=94276
-     */
-    gtk_widget_override_color(priv->status, GTK_STATE_FLAG_NORMAL, &color);
 }
 
 void
diff --git a/src/virt-viewer-window.c b/src/virt-viewer-window.c
index 1ebb423..c59fff5 100644
--- a/src/virt-viewer-window.c
+++ b/src/virt-viewer-window.c
@@ -297,7 +297,6 @@ virt_viewer_window_init (VirtViewerWindow *self)
 {
     VirtViewerWindowPrivate *priv;
     GtkWidget *vbox;
-    GdkRGBA color;
     GSList *accels;
 
     self->priv = GET_PRIVATE(self);
@@ -340,15 +339,6 @@ virt_viewer_window_init (VirtViewerWindow *self)
     virt_viewer_window_toolbar_setup(self);
 
     gtk_box_pack_end(GTK_BOX(vbox), GTK_WIDGET(priv->notebook), TRUE, TRUE, 0);
-    gdk_rgba_parse(&color, "black");
-    /* FIXME:
-     * This method has been deprecated in 3.16.
-     * For more details on how to deal with this in the future, please, see:
-     * https://developer.gnome.org/gtk3/stable/GtkWidget.html#gtk-widget-override-background-color
-     * For the bug report about this deprecated function, please, see:
-     * https://bugs.freedesktop.org/show_bug.cgi?id=94276
-     */
-    gtk_widget_override_background_color(GTK_WIDGET(priv->notebook), GTK_STATE_FLAG_NORMAL, &color);
 
     priv->window = GTK_WIDGET(gtk_builder_get_object(priv->builder, "viewer"));
     gtk_window_add_accel_group(GTK_WINDOW(priv->window), priv->accel_group);
-- 
2.5.5




More information about the virt-tools-list mailing list