From b4bb15aff4099c0ad1deb9205a12fabedfd380cd Mon Sep 17 00:00:00 2001 From: Daniel Micay Date: Tue, 25 Sep 2012 02:28:49 -0400 Subject: [PATCH] restore true transparency support however, it still doesn't play well with url hints or dynamic config reloading --- termite.cc | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/termite.cc b/termite.cc index cc475bd..a35d2c9 100644 --- a/termite.cc +++ b/termite.cc @@ -893,15 +893,26 @@ static void load_config(GtkWindow *window, VteTerminal *vte, config_info *info, g_free(cfgstr); } - if (get_config_double(config, "options", "transparency", &cfgdouble) && cfgdouble) { + if (get_config_double(config, "options", "transparency", &cfgdouble)) { vte_terminal_set_background_saturation(vte, cfgdouble); get_config_boolean(config, "options", "pseudo_transparency", &cfgbool); vte_terminal_set_background_transparent(vte, cfgbool); - if (!cfgbool) { + + GdkScreen *screen = gtk_widget_get_screen(GTK_WIDGET(window)); + GdkVisual *visual; + + if (!cfgbool && (visual = gdk_screen_get_rgba_visual(screen))) { vte_terminal_set_opacity(vte, (guint16)(0xffff * (1 - cfgdouble))); } else { + visual = gdk_screen_get_system_visual(screen); vte_terminal_set_opacity(vte, 0); } + if (visual != gtk_widget_get_visual(GTK_WIDGET(window))) { + gtk_widget_set_visual(GTK_WIDGET(window), visual); + + // TODO: need to make dynamic changes to the visual work + // the obvious way is simply to hide the window and then restore shown widgets + } } const long palette_size = 255; @@ -1001,15 +1012,6 @@ int main(int argc, char **argv) { GtkWidget *vte_widget = vte_terminal_new(); VteTerminal *vte = VTE_TERMINAL(vte_widget); -#if 0 - GdkScreen *screen = gtk_widget_get_screen(window); - GdkVisual *visual = gdk_screen_get_rgba_visual(screen); - if (!visual) { - visual = gdk_screen_get_system_visual(screen); - } - gtk_widget_set_visual(window, visual); -#endif - if (role) { gtk_window_set_role(GTK_WINDOW(window), role); g_free(role);