# HG changeset patch # User Chong Yidong # Date 1132159128 0 # Node ID 1a573209abf9fdb7fb138ea155a12633e738a74f # Parent bf55d63c7dd61152377728a3cd1d7989480a5154 * 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. diff -r bf55d63c7dd6 -r 1a573209abf9 src/ChangeLog --- 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 - * 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. diff -r bf55d63c7dd6 -r 1a573209abf9 src/gnu.h --- 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) */ diff -r bf55d63c7dd6 -r 1a573209abf9 src/xfns.c --- 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 */ diff -r bf55d63c7dd6 -r 1a573209abf9 src/xterm.c --- 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,