changeset 66931:1a573209abf9

* xfns.c (xg_set_icon_from_xpm_data): New function. * gnu.h (gnu_xpm_bits): Renamed from gnu_bits. (gnu_xbm_bits): Renamed from gnu_bits (xbm version). * xterm.c (x_bitmap_icon): Use the xpm if available.
author Chong Yidong <cyd@stupidchicken.com>
date Wed, 16 Nov 2005 16:38:48 +0000
parents bf55d63c7dd6
children 29c20df6248f
files src/ChangeLog src/gnu.h src/xfns.c src/xterm.c
diffstat 4 files changed, 53 insertions(+), 14 deletions(-) [+]
line wrap: on
line diff
--- a/src/ChangeLog	Wed Nov 16 16:07:47 2005 +0000
+++ b/src/ChangeLog	Wed Nov 16 16:38:48 2005 +0000
@@ -1,6 +1,9 @@
 2005-11-16  Chong Yidong  <cyd@stupidchicken.com>
 
-	* gnu.h (gnu_bits): Xpm version of the new Emacs icon.
+	* xfns.c (xg_set_icon_from_xpm_data): New function.
+
+	* gnu.h (gnu_xpm_bits): Renamed from gnu_bits.
+	(gnu_xbm_bits): Renamed from gnu_bits (xbm version).
 
 	* xterm.c (x_bitmap_icon): Use the xpm if available.
 
--- a/src/gnu.h	Wed Nov 16 16:07:47 2005 +0000
+++ b/src/gnu.h	Wed Nov 16 16:38:48 2005 +0000
@@ -1,5 +1,5 @@
 #if defined (HAVE_XPM) && defined (HAVE_X_WINDOWS)
-static char * gnu_bits[] = {
+static char * gnu_xpm_bits[] = {
 "32 32 173 2",
 "  	c None",
 ". 	c #67627D",
@@ -206,10 +206,11 @@
 "        P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.        ",
 "                                                                ",
 "                                                                "};
-#else
-#define gnu_width 50
-#define gnu_height 50
-static unsigned char gnu_bits[] = {
+#endif /* defined (HAVE_XPM) && defined (HAVE_X_WINDOWS) */
+
+#define gnu_xbm_width 50
+#define gnu_xbm_height 50
+static unsigned char gnu_xbm_bits[] = {
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x01, 0x00, 0x00,
@@ -240,7 +241,6 @@
    0xf8, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa0, 0x02, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00};
-#endif
 
 /* arch-tag: b57020c7-c937-4d77-8ca6-3875178d9828
    (do not change this comment) */
--- a/src/xfns.c	Wed Nov 16 16:07:47 2005 +0000
+++ b/src/xfns.c	Wed Nov 16 16:38:48 2005 +0000
@@ -818,6 +818,27 @@
   UNGCPRO;
   return result;
 }
+
+int
+xg_set_icon_from_xpm_data (f, data)
+    FRAME_PTR f;
+    char **data;
+{
+  int result = 0;
+  GError *err = NULL;
+  GdkPixbuf *pixbuf = gdk_pixbuf_new_from_xpm_data (data);
+
+  if (!pixbuf)
+    {
+      g_error_free (err);
+      return 0;
+    }
+
+  gtk_window_set_icon (GTK_WINDOW (FRAME_GTK_OUTER_WIDGET (f)),
+		       pixbuf);
+  g_object_unref (pixbuf);
+  return 1;
+}
 #endif /* USE_GTK */
 
 
--- a/src/xterm.c	Wed Nov 16 16:07:47 2005 +0000
+++ b/src/xterm.c	Wed Nov 16 16:38:48 2005 +0000
@@ -7362,15 +7362,30 @@
       /* Create the GNU bitmap and mask if necessary.  */
       if (FRAME_X_DISPLAY_INFO (f)->icon_bitmap_id < 0)
 	{
+	  int rc = -1;
+
 #if defined (HAVE_XPM) && defined (HAVE_X_WINDOWS)
-	  FRAME_X_DISPLAY_INFO (f)->icon_bitmap_id
-	    = x_create_bitmap_from_xpm_data (f, gnu_bits);
+#ifdef USE_GTK
+	  if (xg_set_icon_from_xpm_data (f, gnu_xpm_bits))
+	    return 0;
 #else
-	  FRAME_X_DISPLAY_INFO (f)->icon_bitmap_id
-	    = x_create_bitmap_from_data (f, gnu_bits,
-					 gnu_width, gnu_height);
-#endif /*  (HAVE_XPM) && defined (HAVE_X_WINDOWS) */
-	  x_create_bitmap_mask (f, FRAME_X_DISPLAY_INFO (f)->icon_bitmap_id);
+	  rc = x_create_bitmap_from_xpm_data (f, gnu_xpm_bits);
+	  if (rc != -1)
+	    FRAME_X_DISPLAY_INFO (f)->icon_bitmap_id = rc;
+#endif /* USE_GTK */
+#endif /* defined (HAVE_XPM) && defined (HAVE_X_WINDOWS) */
+
+	  /* If all else fails, use the (black and white) xbm image. */
+	  if (rc == -1)
+	    {
+	      rc = x_create_bitmap_from_data (f, gnu_xbm_bits,
+					      gnu_xbm_width, gnu_xbm_height);
+	      if (rc == -1)
+		return 1;
+
+	      FRAME_X_DISPLAY_INFO (f)->icon_bitmap_id = rc;
+	      x_create_bitmap_mask (f, FRAME_X_DISPLAY_INFO (f)->icon_bitmap_id);
+	    }
 	}
 
       /* The first time we create the GNU bitmap and mask,