--- terminal/terminal-screen.c.orig	2006-04-24 22:05:50.000000000 +0100
+++ terminal/terminal-screen.c	2006-04-24 22:24:40.000000000 +0100
@@ -867,6 +867,7 @@
       vte_terminal_set_background_image (VTE_TERMINAL (screen->terminal), NULL);
       vte_terminal_set_background_saturation (VTE_TERMINAL (screen->terminal), 1.0);
       vte_terminal_set_background_transparent (VTE_TERMINAL (screen->terminal), FALSE);
+      vte_terminal_set_opacity(VTE_TERMINAL (screen->terminal), 0xffff);
     }
   else if (background_mode == TERMINAL_BACKGROUND_IMAGE)
     {
@@ -878,6 +879,7 @@
                                           screen->terminal->allocation.width,
                                           screen->terminal->allocation.height);
       vte_terminal_set_background_image (VTE_TERMINAL (screen->terminal), image);
+      vte_terminal_set_opacity(VTE_TERMINAL (screen->terminal), 0xffff);
       if (image != NULL)
         g_object_unref (G_OBJECT (image));
       g_object_unref (G_OBJECT (loader));
@@ -887,7 +889,8 @@
       g_object_get (G_OBJECT (screen->preferences), "background-darkness", &background_darkness, NULL);
       vte_terminal_set_background_image (VTE_TERMINAL (screen->terminal), NULL);
       vte_terminal_set_background_saturation (VTE_TERMINAL (screen->terminal), 1.0 - background_darkness);
-      vte_terminal_set_background_transparent (VTE_TERMINAL (screen->terminal), TRUE);
+      vte_terminal_set_background_transparent (VTE_TERMINAL (screen->terminal), FALSE);
+      vte_terminal_set_opacity(VTE_TERMINAL (screen->terminal), background_darkness * 0xffff);
     }
 
   return FALSE;
Index: terminal/terminal-app.c
===================================================================
--- terminal/terminal-app.c	(revision 20337)
+++ terminal/terminal-app.c	(working copy)
@@ -345,6 +345,7 @@
 static GdkScreen*
 terminal_app_find_screen (const gchar *display_name)
 {
+  GdkColormap *colormap;
   const gchar *other_name;
   GdkDisplay  *display = NULL;
   GdkScreen   *screen = NULL;
@@ -406,6 +407,21 @@
       g_object_ref (G_OBJECT (screen));
     }
 
+  /* check if we already checked this screen */
+  if (g_object_get_data (G_OBJECT (screen), "terminal-checked-screen") == NULL)
+    {
+      /* check if we can use ARGB visual for this screen */
+      colormap = gdk_screen_get_rgba_colormap (screen);
+      if (G_LIKELY (colormap != NULL))
+        {
+          /* use ARGB visual for all windows on this screen */
+          gdk_screen_set_default_colormap (screen, colormap);
+        }
+
+      /* mark this screen as handled */
+      g_object_set_data (G_OBJECT (screen), "terminal-checked-screen", GINT_TO_POINTER (1));
+    }
+
   return screen;
 }
 
