From: Debarshi Ray Date: Mon, 12 May 2014 14:57:18 +0200 Subject: [PATCH 02/17] Restore transparency The transparency settings were removed as a side effect of 2bff4b63ed3ceef6055e35563e9b0b33ad57349d This restores them and you will need a compositing window manager to use it. The background image setting, also known as faux transparency, was not restored. The transparency checkbox lost its mnemonic accelerator because 't' is already taken and using any other letter would make it hard to restore the translations of the string. Some changes by Peter Weber [Kali notes: we include the patch from Fedora: https://src.fedoraproject.org/rpms/gnome-terminal/tree/rawhide This current patch is for 3.42.0.] Origin: other, https://src.fedoraproject.org/rpms/gnome-terminal/blob/d57e059e5015e873e08f58d149efae1dc95ca35c/f/gnome-terminal-cntr-ntfy-autottl-ts.patch --- src/org.gnome.Terminal.gschema.xml | 10 ++++++++ src/preferences.ui | 47 ++++++++++++++++++++++++++++++++++++++ src/profile-editor.cc | 19 +++++++++++++++ src/terminal-schemas.hh | 3 +++ src/terminal-screen.cc | 22 +++++++++++++++++- src/terminal-window.cc | 7 ++++++ 6 files changed, 107 insertions(+), 1 deletion(-) diff --git a/src/org.gnome.Terminal.gschema.xml b/src/org.gnome.Terminal.gschema.xml index 26b96ac..b6c42ec 100644 --- a/src/org.gnome.Terminal.gschema.xml +++ b/src/org.gnome.Terminal.gschema.xml @@ -349,6 +349,16 @@ 'narrow' Whether ambiguous-width characters are narrow or wide when using UTF-8 encoding + + false + Whether to use a transparent background + + + 50 + + Adjust the amount of transparency + A value between 0 and 100, where 0 is opaque and 100 is fully transparent. + diff --git a/src/preferences.ui b/src/preferences.ui index d1aca7b..64f8295 100644 --- a/src/preferences.ui +++ b/src/preferences.ui @@ -95,6 +95,11 @@ 0.05 0.25 + + 100 + 1 + 10 + @@ -1402,6 +1407,48 @@ 1 + + + True + False + horizontal + 12 + + + Transparent background + True + True + False + True + 0 + True + + + False + False + 0 + + + + + True + True + background-transparent-adjustment + False + + + True + True + 1 + + + + + True + True + 2 + + diff --git a/src/profile-editor.cc b/src/profile-editor.cc index a99fb89..3d50524 100644 --- a/src/profile-editor.cc +++ b/src/profile-editor.cc @@ -1492,6 +1492,25 @@ profile_prefs_load (const char *uuid, GSettings *profile) GSettingsBindFlags(G_SETTINGS_BIND_GET | G_SETTINGS_BIND_SET)); gtk_widget_set_visible (w, (vte_get_feature_flags() & VTE_FEATURE_FLAG_SIXEL) != 0); + + profile_prefs_settings_bind (profile, + TERMINAL_PROFILE_USE_TRANSPARENT_BACKGROUND, + gtk_builder_get_object (builder, "use-transparent-background"), + "active", + GSettingsBindFlags(G_SETTINGS_BIND_GET | + G_SETTINGS_BIND_SET)); + profile_prefs_settings_bind (profile, + TERMINAL_PROFILE_USE_TRANSPARENT_BACKGROUND, + gtk_builder_get_object (builder, "background-transparent-scale"), + "sensitive", + GSettingsBindFlags(G_SETTINGS_BIND_GET | + G_SETTINGS_BIND_NO_SENSITIVITY)); + profile_prefs_settings_bind (profile, + TERMINAL_PROFILE_BACKGROUND_TRANSPARENCY_PERCENT, + gtk_builder_get_object (builder, "background-transparent-adjustment"), + "value", + GSettingsBindFlags(G_SETTINGS_BIND_GET | + G_SETTINGS_BIND_SET)); } /* Called once per Preferences window, to destroy stuff that doesn't depend on the profile being edited */ diff --git a/src/terminal-schemas.hh b/src/terminal-schemas.hh index b146ba8..d2917fa 100644 --- a/src/terminal-schemas.hh +++ b/src/terminal-schemas.hh @@ -78,6 +78,9 @@ G_BEGIN_DECLS #define TERMINAL_PROFILE_VISIBLE_NAME_KEY "visible-name" #define TERMINAL_PROFILE_WORD_CHAR_EXCEPTIONS_KEY "word-char-exceptions" +#define TERMINAL_PROFILE_USE_TRANSPARENT_BACKGROUND "use-transparent-background" +#define TERMINAL_PROFILE_BACKGROUND_TRANSPARENCY_PERCENT "background-transparency-percent" + #define TERMINAL_SETTING_CONFIRM_CLOSE_KEY "confirm-close" #define TERMINAL_SETTING_CONTEXT_INFO_KEY "context-info" #define TERMINAL_SETTING_DEFAULT_SHOW_MENUBAR_KEY "default-show-menubar" diff --git a/src/terminal-screen.cc b/src/terminal-screen.cc index b793ee7..eef1a03 100644 --- a/src/terminal-screen.cc +++ b/src/terminal-screen.cc @@ -1055,7 +1055,9 @@ terminal_screen_profile_changed_cb (GSettings *profile, prop_name == I_(TERMINAL_PROFILE_HIGHLIGHT_COLORS_SET_KEY) || prop_name == I_(TERMINAL_PROFILE_HIGHLIGHT_BACKGROUND_COLOR_KEY) || prop_name == I_(TERMINAL_PROFILE_HIGHLIGHT_FOREGROUND_COLOR_KEY) || - prop_name == I_(TERMINAL_PROFILE_PALETTE_KEY)) + prop_name == I_(TERMINAL_PROFILE_PALETTE_KEY) || + prop_name == I_(TERMINAL_PROFILE_USE_TRANSPARENT_BACKGROUND) || + prop_name == I_(TERMINAL_PROFILE_BACKGROUND_TRANSPARENCY_PERCENT)) update_color_scheme (screen); if (!prop_name || prop_name == I_(TERMINAL_PROFILE_AUDIBLE_BELL_KEY)) @@ -1140,6 +1142,8 @@ update_color_scheme (TerminalScreen *screen) GdkRGBA *cursor_bgp = nullptr, *cursor_fgp = nullptr; GdkRGBA *highlight_bgp = nullptr, *highlight_fgp = nullptr; GtkStyleContext *context; + GtkWidget *toplevel; + gboolean transparent; gboolean use_theme_colors; context = gtk_widget_get_style_context (widget); @@ -1183,6 +1187,18 @@ update_color_scheme (TerminalScreen *screen) } colors = terminal_g_settings_get_rgba_palette (priv->profile, TERMINAL_PROFILE_PALETTE_KEY, &n_colors); + + transparent = g_settings_get_boolean (profile, TERMINAL_PROFILE_USE_TRANSPARENT_BACKGROUND); + if (transparent) + { + gint transparency_percent; + + transparency_percent = g_settings_get_int (profile, TERMINAL_PROFILE_BACKGROUND_TRANSPARENCY_PERCENT); + bg.alpha = (100 - transparency_percent) / 100.0; + } + else + bg.alpha = 1.0; + vte_terminal_set_colors (VTE_TERMINAL (screen), &fg, &bg, colors, n_colors); vte_terminal_set_color_bold (VTE_TERMINAL (screen), boldp); @@ -1190,6 +1206,10 @@ update_color_scheme (TerminalScreen *screen) vte_terminal_set_color_cursor_foreground (VTE_TERMINAL (screen), cursor_fgp); vte_terminal_set_color_highlight (VTE_TERMINAL (screen), highlight_bgp); vte_terminal_set_color_highlight_foreground (VTE_TERMINAL (screen), highlight_fgp); + + toplevel = gtk_widget_get_toplevel (GTK_WIDGET (screen)); + if (toplevel != nullptr && gtk_widget_is_toplevel (toplevel)) + gtk_widget_set_app_paintable (toplevel, transparent); } static void diff --git a/src/terminal-window.cc b/src/terminal-window.cc index 76f1800..d739f69 100644 --- a/src/terminal-window.cc +++ b/src/terminal-window.cc @@ -2133,6 +2133,8 @@ terminal_window_init (TerminalWindow *window) }; TerminalWindowPrivate *priv; TerminalApp *app; + GdkScreen *screen; + GdkVisual *visual; GSettings *gtk_debug_settings; GtkWindowGroup *window_group; // GtkAccelGroup *accel_group; @@ -2148,6 +2150,11 @@ terminal_window_init (TerminalWindow *window) gtk_widget_init_template (GTK_WIDGET (window)); + screen = gtk_widget_get_screen (GTK_WIDGET (window)); + visual = gdk_screen_get_rgba_visual (screen); + if (visual != nullptr) + gtk_widget_set_visual (GTK_WIDGET (window), visual); + uuid_generate (u); uuid_unparse (u, uuidstr); priv->uuid = g_strdup (uuidstr);