From: Chong Yidong Date: Wed, 16 Nov 2005 16:38:48 +0000 (+0000) Subject: * xfns.c (xg_set_icon_from_xpm_data): New function. X-Git-Tag: emacs-pretest-22.0.90~5846 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=9f7b984baef1351ccd203ddfcad11fa574931a1c;p=emacs.git * 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 --git a/src/ChangeLog b/src/ChangeLog index d366093114b..513d9d0ff92 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -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 --git a/src/gnu.h b/src/gnu.h index 2f3bb4c7e51..dbf47317493 100644 --- a/src/gnu.h +++ b/src/gnu.h @@ -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 @@ static char * gnu_bits[] = { " 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 @@ static unsigned char gnu_bits[] = { 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 --git a/src/xfns.c b/src/xfns.c index a1aee42b85b..c3eb173b4f9 100644 --- a/src/xfns.c +++ b/src/xfns.c @@ -818,6 +818,27 @@ xg_set_icon (f, file) 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 --git a/src/xterm.c b/src/xterm.c index 8359cec0112..113a942de5f 100644 --- a/src/xterm.c +++ b/src/xterm.c @@ -7362,15 +7362,30 @@ x_bitmap_icon (f, file) /* 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,