diff --recursive -u -x '*.o' -x '*.la' -x '*.lo' -x '.*' gtk+-2.4.7/gdk/gdkrgb.c gtk+-2.4.7.argb/gdk/gdkrgb.c
--- gtk+-2.4.7/gdk/gdkrgb.c	2004-04-14 00:57:12.000000000 +0100
+++ gtk+-2.4.7.argb/gdk/gdkrgb.c	2004-08-19 12:44:04.375684208 +0100
@@ -757,6 +757,10 @@
       pixel = (((r >> (16 - image_info->visual->red_prec)) << image_info->visual->red_shift) +
 	       ((g >> (16 - image_info->visual->green_prec)) << image_info->visual->green_shift) +
 	       ((b >> (16 - image_info->visual->blue_prec)) << image_info->visual->blue_shift));
+
+      /* Ensure that colour returned for ARGB Visuals has alpha set correctly */
+      if(image_info->visual->depth == 32)
+	      pixel |= 0xff000000;
     }
   else if (image_info->visual->type == GDK_VISUAL_STATIC_GRAY ||
 	   image_info->visual->type == GDK_VISUAL_GRAYSCALE)
@@ -1983,6 +1987,37 @@
       obuf += bpl;
     }
 }
+	
+static void
+gdk_rgb_convert_8888 (GdkRgbInfo *image_info, GdkImage *image,
+		      gint x0, gint y0, gint width, gint height,
+		      guchar *buf, int rowstride,
+		      gint x_align, gint y_align, GdkRgbCmap *cmap)
+{
+  int x, y;
+  guchar *obuf;
+  gint bpl;
+  guchar *bptr, *bp2;
+  int r, g, b;
+
+  bptr = buf;
+  bpl = image->bpl;
+  obuf = ((guchar *)image->mem) + y0 * bpl + x0 * 4;
+  for (y = 0; y < height; y++)
+    {
+      bp2 = bptr;
+      for (x = 0; x < width; x++)
+	{
+	  r = bp2[0];
+	  g = bp2[1];
+	  b = bp2[2];
+	  ((guint32 *)obuf)[x] = (0xff << 24) | (r << 16) | (g << 8) | b;
+	  bp2 += 3;
+	}
+      bptr += rowstride;
+      obuf += bpl;
+    }
+}
 
 static void
 gdk_rgb_convert_0888_br (GdkRgbInfo *image_info, GdkImage *image,
@@ -2016,6 +2051,37 @@
 }
 
 static void
+gdk_rgb_convert_8888_br (GdkRgbInfo *image_info, GdkImage *image,
+			 gint x0, gint y0, gint width, gint height,
+			 guchar *buf, int rowstride,
+			 gint x_align, gint y_align, GdkRgbCmap *cmap)
+{
+  int x, y;
+  guchar *obuf;
+  gint bpl;
+  guchar *bptr, *bp2;
+  int r, g, b;
+
+  bptr = buf;
+  bpl = image->bpl;
+  obuf = ((guchar *)image->mem) + y0 * bpl + x0 * 4;
+  for (y = 0; y < height; y++)
+    {
+      bp2 = bptr;
+      for (x = 0; x < width; x++)
+	{
+	  r = bp2[0];
+	  g = bp2[1];
+	  b = bp2[2];
+	  ((guint32 *)obuf)[x] = (b << 24) | (g << 16) | (r << 8) | 0xff;
+	  bp2 += 3;
+	}
+      bptr += rowstride;
+      obuf += bpl;
+    }
+}
+
+static void
 gdk_rgb_convert_8880_br (GdkRgbInfo *image_info, GdkImage *image,
 			 gint x0, gint y0, gint width, gint height,
 			 guchar *buf, int rowstride,
@@ -2952,6 +3018,9 @@
   else if (bpp == 32 && depth == 24 && vtype == GDK_VISUAL_TRUE_COLOR &&
 	   (mask_bgr && byte_order == GDK_MSB_FIRST))
     conv = gdk_rgb_convert_8880_br;
+  else if (bpp == 32 && depth == 32 && vtype == GDK_VISUAL_TRUE_COLOR &&
+	   (mask_rgb && byte_order == GDK_MSB_FIRST))
+    conv = gdk_rgb_convert_8888_br;
 #else
   else if (bpp == 32 && depth == 24 && vtype == GDK_VISUAL_TRUE_COLOR &&
 	   (mask_rgb && byte_order == GDK_MSB_FIRST))
@@ -2962,6 +3031,9 @@
   else if (bpp == 32 && depth == 24 && vtype == GDK_VISUAL_TRUE_COLOR &&
 	   (mask_bgr && byte_order == GDK_LSB_FIRST))
     conv = gdk_rgb_convert_8880_br;
+  else if (bpp == 32 && depth == 32 && vtype == GDK_VISUAL_TRUE_COLOR &&
+	   (mask_rgb && byte_order == GDK_LSB_FIRST))
+    conv = gdk_rgb_convert_8888;
 #endif
 
   else if (vtype == GDK_VISUAL_TRUE_COLOR && byte_order == GDK_LSB_FIRST)
