[vte] app: Fix crash with -T and make it work



commit 1cda4819a09cb37013c6dfc0bada026cc448afb0
Author: Christian Persch <chpe gnome org>
Date:   Wed Nov 25 20:40:17 2015 +0100

    app: Fix crash with -T and make it work

 src/vteapp.c |   33 +++++++++++++++++++++++----------
 1 files changed, 23 insertions(+), 10 deletions(-)
---
diff --git a/src/vteapp.c b/src/vteapp.c
index ff67f8a..43f87da 100644
--- a/src/vteapp.c
+++ b/src/vteapp.c
@@ -614,7 +614,8 @@ main(int argc, char **argv)
                (char *) "FOO=BAR", (char *) "BOO=BIZ",
 #endif
                NULL};
-        char *transparent = NULL;
+        int transparency_percent = 0;
+        gboolean no_argb_visual = FALSE;
         char *encoding = NULL;
         char *cjk_ambiguous_width = NULL;
        gboolean audible = FALSE,
@@ -677,8 +678,8 @@ main(int argc, char **argv)
                },
                {
                        "transparent", 'T', 0,
-                       G_OPTION_ARG_STRING, &transparent,
-                       "Enable the use of a transparent background", "ALPHA"
+                       G_OPTION_ARG_INT, &transparency_percent,
+                        "Enable the use of a transparent background", "0..100",
                },
                {
                        "double-buffer", '2', G_OPTION_FLAG_REVERSE,
@@ -778,6 +779,12 @@ main(int argc, char **argv)
                        "Reverse foreground/background colors", NULL
                },
                {
+                       "no-argb-visual", 0, 0,
+                       G_OPTION_ARG_NONE, &no_argb_visual,
+                        "Don't use an ARGB visual",
+                       NULL
+               },
+               {
                        "no-geometry-hints", 'G', G_OPTION_FLAG_REVERSE,
                        G_OPTION_ARG_NONE, &use_geometry_hints,
                        "Allow the terminal to be resized to any dimension, not constrained to fit to an 
integer multiple of characters",
@@ -895,10 +902,17 @@ main(int argc, char **argv)
         }
 
        /* Set ARGB visual */
-       screen = gtk_widget_get_screen (window);
-       visual = gdk_screen_get_rgba_visual(screen);
-       if (visual)
-               gtk_widget_set_visual(GTK_WIDGET(window), visual);
+        if (transparency_percent != 0) {
+                if (!no_argb_visual) {
+                        screen = gtk_widget_get_screen (window);
+                        visual = gdk_screen_get_rgba_visual(screen);
+                        if (visual)
+                                gtk_widget_set_visual(GTK_WIDGET(window), visual);
+                }
+
+                /* Without this transparency doesn't work; see bug #729884. */
+                gtk_widget_set_app_paintable(GTK_WIDGET(window), TRUE);
+        }
 
        if (use_scrolled_window) {
                scrolled_window = gtk_scrolled_window_new (NULL, NULL);
@@ -988,9 +1002,8 @@ main(int argc, char **argv)
        vte_terminal_set_scrollback_lines(terminal, lines);
        vte_terminal_set_mouse_autohide(terminal, TRUE);
 
-       if (transparent != NULL) {
-                back.alpha = g_ascii_strtod (transparent, NULL);
-                g_free (transparent);
+       if (transparency_percent != 0) {
+                back.alpha = (double)(100 - CLAMP(transparency_percent, 0, 100)) / 100.;
         }
 
        vte_terminal_set_colors(terminal, &fore, &back, NULL, 0);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]