--- gtkutil.c	31 Jan 2007 07:25:35 -0000	1.30
+++ gtkutil.c	4 May 2007 00:12:41 -0000
@@ -523,6 +523,14 @@
 	GtkWidget *win;
 
 	win = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+    GdkScreen *screen;
+    GdkColormap *colormap;
+    screen = gtk_widget_get_screen(GTK_WIDGET(win));
+    colormap = gdk_screen_get_rgba_colormap(screen);
+    if(colormap != NULL && gdk_screen_is_composited (screen))
+    {
+        gtk_widget_set_colormap(GTK_WIDGET(win), colormap);
+    }
 	gtkutil_set_icon (win);
 #ifdef WIN32
 	gtk_window_set_wmclass (GTK_WINDOW (win), "XChat", "xchat");
--- xtext.c	11 Dec 2006 02:52:42 -0000	1.121
+++ xtext.c	4 May 2007 00:12:43 -0000
@@ -994,6 +994,15 @@
 	gdk_window_set_user_data (widget->window, widget);
 
 	xtext->depth = gdk_drawable_get_visual (widget->window)->depth;
+    if(xtext->depth == 32)
+    {
+        if(xtext->transparent)
+        {
+            guint8* pixel = &xtext->palette[XTEXT_BG];
+            pixel[3] = 0xdd;
+        }
+        xtext->transparent = FALSE;
+    }
 
 	val.subwindow_mode = GDK_INCLUDE_INFERIORS;
 	val.graphics_exposures = 0;
@@ -4283,6 +4292,28 @@
 
 	if (trans && (xtext->tint_red != 255 || xtext->tint_green != 255 || xtext->tint_blue != 255))
 		shaded = TRUE;
+    /* rgba mode */ 
+    if(xtext->depth == 32)
+    {
+        if(trans)
+        {
+            guint8* pixel = &xtext->palette[XTEXT_BG];
+            pixel[3] = 0xdd;
+        }
+        else
+        {
+            guint8* pixel = &xtext->palette[XTEXT_BG];
+            pixel[3] = 0xff;
+        }
+        xtext_set_fg (xtext, xtext->fgc, XTEXT_FG);
+        xtext_set_bg (xtext, xtext->fgc, XTEXT_BG);
+        xtext_set_fg (xtext, xtext->bgc, XTEXT_BG);
+        /* rgba mode breaks the old transparency mechanism
+         * X11 Bad Match. */
+        trans = FALSE;
+        shaded = FALSE;
+        pixmap = 0;
+    }
 
 #if !defined(USE_XLIB) && !defined(WIN32)
 	shaded = FALSE;
