diff options
| author | Jan Djärv | 2007-09-02 16:47:29 +0000 |
|---|---|---|
| committer | Jan Djärv | 2007-09-02 16:47:29 +0000 |
| commit | 2154c9647a473689a392875d8bfa307a5694ff38 (patch) | |
| tree | d57b28d32e119cf2cdcb442b29615c85e2a000cb /src | |
| parent | 49adb60f0e25483c367686236498fb3ad7634eaf (diff) | |
| download | emacs-2154c9647a473689a392875d8bfa307a5694ff38.tar.gz emacs-2154c9647a473689a392875d8bfa307a5694ff38.zip | |
(update_frame_tool_bar): Handle stock name as a named icon
if it starts with "n:".
Diffstat (limited to 'src')
| -rw-r--r-- | src/ChangeLog | 5 | ||||
| -rw-r--r-- | src/gtkutil.c | 57 |
2 files changed, 58 insertions, 4 deletions
diff --git a/src/ChangeLog b/src/ChangeLog index e7fe56fbafa..959a1bdbfca 100644 --- a/src/ChangeLog +++ b/src/ChangeLog | |||
| @@ -1,3 +1,8 @@ | |||
| 1 | 2007-09-02 Jan Dj,Ad(Brv <jan.h.d@swipnet.se> | ||
| 2 | |||
| 3 | * gtkutil.c (update_frame_tool_bar): Handle stock name as a named icon | ||
| 4 | if it starts with "n:". | ||
| 5 | |||
| 1 | 2007-08-31 Jan Dj,Ad(Brv <jan.h.d@swipnet.se> | 6 | 2007-08-31 Jan Dj,Ad(Brv <jan.h.d@swipnet.se> |
| 2 | 7 | ||
| 3 | * gtkutil.c (update_frame_tool_bar): Initialize wbutton to NULL. | 8 | * gtkutil.c (update_frame_tool_bar): Initialize wbutton to NULL. |
diff --git a/src/gtkutil.c b/src/gtkutil.c index 5333f550751..36873f23e6d 100644 --- a/src/gtkutil.c +++ b/src/gtkutil.c | |||
| @@ -3346,6 +3346,10 @@ xg_set_toolkit_scroll_bar_thumb (bar, portion, position, whole) | |||
| 3346 | the GtkImage with a new image. */ | 3346 | the GtkImage with a new image. */ |
| 3347 | #define XG_TOOL_BAR_STOCK_NAME "emacs-tool-bar-stock-name" | 3347 | #define XG_TOOL_BAR_STOCK_NAME "emacs-tool-bar-stock-name" |
| 3348 | 3348 | ||
| 3349 | /* As above, but this is used for named theme widgets, as opposed to | ||
| 3350 | stock items. */ | ||
| 3351 | #define XG_TOOL_BAR_ICON_NAME "emacs-tool-bar-icon-name" | ||
| 3352 | |||
| 3349 | /* Callback function invoked when a tool bar item is pressed. | 3353 | /* Callback function invoked when a tool bar item is pressed. |
| 3350 | W is the button widget in the tool bar that got pressed, | 3354 | W is the button widget in the tool bar that got pressed, |
| 3351 | CLIENT_DATA is an integer that is the index of the button in the | 3355 | CLIENT_DATA is an integer that is the index of the button in the |
| @@ -3809,6 +3813,7 @@ update_frame_tool_bar (f) | |||
| 3809 | Lisp_Object stock; | 3813 | Lisp_Object stock; |
| 3810 | GtkStockItem stock_item; | 3814 | GtkStockItem stock_item; |
| 3811 | char *stock_name = NULL; | 3815 | char *stock_name = NULL; |
| 3816 | char *icon_name = NULL; | ||
| 3812 | Lisp_Object rtl; | 3817 | Lisp_Object rtl; |
| 3813 | GtkWidget *wbutton = NULL; | 3818 | GtkWidget *wbutton = NULL; |
| 3814 | GtkWidget *weventbox; | 3819 | GtkWidget *weventbox; |
| @@ -3834,13 +3839,33 @@ update_frame_tool_bar (f) | |||
| 3834 | if (EQ (Qt, Ffboundp (func))) | 3839 | if (EQ (Qt, Ffboundp (func))) |
| 3835 | stock = call1 (func, file_for_image (image)); | 3840 | stock = call1 (func, file_for_image (image)); |
| 3836 | 3841 | ||
| 3837 | if (! NILP (stock) && STRINGP (stock) | 3842 | if (! NILP (stock) && STRINGP (stock)) |
| 3838 | && gtk_stock_lookup (SSDATA (stock), &stock_item)) | ||
| 3839 | { | 3843 | { |
| 3840 | stock_name = SSDATA (stock); | 3844 | stock_name = SSDATA (stock); |
| 3841 | icon_size = gtk_toolbar_get_icon_size (wtoolbar); | 3845 | if (stock_name[0] == 'n' && stock_name[1] == ':') |
| 3846 | { | ||
| 3847 | GdkScreen *screen = gtk_widget_get_screen (GTK_WIDGET (wtoolbar)); | ||
| 3848 | GtkIconTheme *icon_theme = gtk_icon_theme_get_for_screen (screen); | ||
| 3849 | |||
| 3850 | icon_name = stock_name + 2; | ||
| 3851 | stock_name = NULL; | ||
| 3852 | stock = Qnil; | ||
| 3853 | |||
| 3854 | if (! gtk_icon_theme_has_icon (icon_theme, icon_name)) | ||
| 3855 | icon_name = NULL; | ||
| 3856 | else | ||
| 3857 | icon_size = gtk_toolbar_get_icon_size (wtoolbar); | ||
| 3858 | } | ||
| 3859 | else if (gtk_stock_lookup (SSDATA (stock), &stock_item)) | ||
| 3860 | icon_size = gtk_toolbar_get_icon_size (wtoolbar); | ||
| 3861 | else | ||
| 3862 | { | ||
| 3863 | stock = Qnil; | ||
| 3864 | stock_name = NULL; | ||
| 3865 | } | ||
| 3842 | } | 3866 | } |
| 3843 | else | 3867 | |
| 3868 | if (stock_name == NULL && icon_name == NULL) | ||
| 3844 | { | 3869 | { |
| 3845 | /* No stock image, or stock item not known. Try regular image. */ | 3870 | /* No stock image, or stock item not known. Try regular image. */ |
| 3846 | 3871 | ||
| @@ -3905,6 +3930,13 @@ update_frame_tool_bar (f) | |||
| 3905 | (gpointer) xstrdup (stock_name), | 3930 | (gpointer) xstrdup (stock_name), |
| 3906 | (GDestroyNotify) xfree); | 3931 | (GDestroyNotify) xfree); |
| 3907 | } | 3932 | } |
| 3933 | else if (icon_name) | ||
| 3934 | { | ||
| 3935 | w = gtk_image_new_from_icon_name (icon_name, icon_size); | ||
| 3936 | g_object_set_data_full (G_OBJECT (w), XG_TOOL_BAR_ICON_NAME, | ||
| 3937 | (gpointer) xstrdup (icon_name), | ||
| 3938 | (GDestroyNotify) xfree); | ||
| 3939 | } | ||
| 3908 | else | 3940 | else |
| 3909 | { | 3941 | { |
| 3910 | w = xg_get_image_for_pixmap (f, img, x->widget, NULL); | 3942 | w = xg_get_image_for_pixmap (f, img, x->widget, NULL); |
| @@ -3980,6 +4012,8 @@ update_frame_tool_bar (f) | |||
| 3980 | XG_TOOL_BAR_IMAGE_DATA); | 4012 | XG_TOOL_BAR_IMAGE_DATA); |
| 3981 | gpointer old_stock_name = g_object_get_data (G_OBJECT (wimage), | 4013 | gpointer old_stock_name = g_object_get_data (G_OBJECT (wimage), |
| 3982 | XG_TOOL_BAR_STOCK_NAME); | 4014 | XG_TOOL_BAR_STOCK_NAME); |
| 4015 | gpointer old_icon_name = g_object_get_data (G_OBJECT (wimage), | ||
| 4016 | XG_TOOL_BAR_ICON_NAME); | ||
| 3983 | if (stock_name && | 4017 | if (stock_name && |
| 3984 | (! old_stock_name || strcmp (old_stock_name, stock_name) != 0)) | 4018 | (! old_stock_name || strcmp (old_stock_name, stock_name) != 0)) |
| 3985 | { | 4019 | { |
| @@ -3990,6 +4024,20 @@ update_frame_tool_bar (f) | |||
| 3990 | (GDestroyNotify) xfree); | 4024 | (GDestroyNotify) xfree); |
| 3991 | g_object_set_data (G_OBJECT (wimage), XG_TOOL_BAR_IMAGE_DATA, | 4025 | g_object_set_data (G_OBJECT (wimage), XG_TOOL_BAR_IMAGE_DATA, |
| 3992 | NULL); | 4026 | NULL); |
| 4027 | g_object_set_data (G_OBJECT (wimage), XG_TOOL_BAR_ICON_NAME, NULL); | ||
| 4028 | } | ||
| 4029 | else if (icon_name && | ||
| 4030 | (! old_icon_name || strcmp (old_icon_name, icon_name) != 0)) | ||
| 4031 | { | ||
| 4032 | gtk_image_set_from_icon_name (GTK_IMAGE (wimage), | ||
| 4033 | icon_name, icon_size); | ||
| 4034 | g_object_set_data_full (G_OBJECT (wimage), XG_TOOL_BAR_ICON_NAME, | ||
| 4035 | (gpointer) xstrdup (icon_name), | ||
| 4036 | (GDestroyNotify) xfree); | ||
| 4037 | g_object_set_data (G_OBJECT (wimage), XG_TOOL_BAR_IMAGE_DATA, | ||
| 4038 | NULL); | ||
| 4039 | g_object_set_data (G_OBJECT (wimage), XG_TOOL_BAR_STOCK_NAME, | ||
| 4040 | NULL); | ||
| 3993 | } | 4041 | } |
| 3994 | else if (img && old_img != img->pixmap) | 4042 | else if (img && old_img != img->pixmap) |
| 3995 | { | 4043 | { |
| @@ -3999,6 +4047,7 @@ update_frame_tool_bar (f) | |||
| 3999 | 4047 | ||
| 4000 | g_object_set_data (G_OBJECT (wimage), XG_TOOL_BAR_STOCK_NAME, | 4048 | g_object_set_data (G_OBJECT (wimage), XG_TOOL_BAR_STOCK_NAME, |
| 4001 | NULL); | 4049 | NULL); |
| 4050 | g_object_set_data (G_OBJECT (wimage), XG_TOOL_BAR_ICON_NAME, NULL); | ||
| 4002 | } | 4051 | } |
| 4003 | 4052 | ||
| 4004 | gtk_misc_set_padding (GTK_MISC (wimage), hmargin, vmargin); | 4053 | gtk_misc_set_padding (GTK_MISC (wimage), hmargin, vmargin); |