diff --git a/ChangeLog b/ChangeLog index 285dbecc6..55de22f16 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,17 @@ +2008-08-14 Patrick Niklaus + + Icons for windows are taken from the desktop theme, not from + the Metacity theme or from the fallback icon that Metacity + provided. Closes #524343. + + * src/ui/ui.c: Use GtkIconTheme to load the default window icon. + Assumes the existence of an icon called "window", otherwise + falls back to "gtk-missing-image". Fixes #524343. + * src/ui/preview-widget: See above. + * src/include/common.h: Add META_DEFAULT_ICON_NAME. + * src/Makefile.am: Remove default_icon.png from inlinepixbufs.h. + * src/default_icon.png: Removed. + 2008-08-14 Akira TAGOH * doc/man/metacity-message.1: new manual page. diff --git a/src/Makefile.am b/src/Makefile.am index 5f45a6fd7..eafb5aed6 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -180,9 +180,8 @@ else install-data-local: endif -IMAGES=default_icon.png stock_maximize.png stock_minimize.png stock_delete.png -VARIABLES=default_icon_data $(srcdir)/default_icon.png \ - stock_maximize_data $(srcdir)/stock_maximize.png \ +IMAGES=stock_maximize.png stock_minimize.png stock_delete.png +VARIABLES=stock_maximize_data $(srcdir)/stock_maximize.png \ stock_minimize_data $(srcdir)/stock_minimize.png \ stock_delete_data $(srcdir)/stock_delete.png diff --git a/src/include/common.h b/src/include/common.h index cdd814dbf..9d6a98c5f 100644 --- a/src/include/common.h +++ b/src/include/common.h @@ -278,6 +278,8 @@ struct _MetaButtonLayout #define META_MINI_ICON_WIDTH 16 #define META_MINI_ICON_HEIGHT 16 +#define META_DEFAULT_ICON_NAME "window" + #define META_PRIORITY_PREFS_NOTIFY (G_PRIORITY_DEFAULT_IDLE + 10) #define META_PRIORITY_WORK_AREA_HINT (G_PRIORITY_DEFAULT_IDLE + 15) diff --git a/src/ui/preview-widget.c b/src/ui/preview-widget.c index 4d2f9a2e4..23504f9bf 100644 --- a/src/ui/preview-widget.c +++ b/src/ui/preview-widget.c @@ -25,6 +25,7 @@ #define _XOPEN_SOURCE 600 /* for the maths routines over floats */ #include +#include #include "preview-widget.h" static void meta_preview_class_init (MetaPreviewClass *klass); @@ -411,8 +412,6 @@ meta_preview_set_button_layout (MetaPreview *preview, gtk_widget_queue_draw (GTK_WIDGET (preview)); } -#include "inlinepixbufs.h" - GdkPixbuf* meta_preview_get_icon (void) { @@ -420,20 +419,27 @@ meta_preview_get_icon (void) if (default_icon == NULL) { - GdkPixbuf *base; + GtkIconTheme *theme; + gboolean icon_exists; - base = gdk_pixbuf_new_from_inline (-1, default_icon_data, - FALSE, - NULL); + theme = gtk_icon_theme_get_default (); - g_assert (base); + icon_exists = gtk_icon_theme_has_icon (theme, META_DEFAULT_ICON_NAME); - default_icon = gdk_pixbuf_scale_simple (base, - META_ICON_WIDTH, - META_ICON_HEIGHT, - GDK_INTERP_BILINEAR); + if (icon_exists) + default_icon = gtk_icon_theme_load_icon (theme, + META_DEFAULT_ICON_NAME, + META_ICON_WIDTH, + 0, + NULL); + else + default_icon = gtk_icon_theme_load_icon (theme, + "gtk-missing-image", + META_ICON_WIDTH, + 0, + NULL); - g_object_unref (G_OBJECT (base)); + g_assert (default_icon); } return default_icon; @@ -446,20 +452,27 @@ meta_preview_get_mini_icon (void) if (default_icon == NULL) { - GdkPixbuf *base; + GtkIconTheme *theme; + gboolean icon_exists; - base = gdk_pixbuf_new_from_inline (-1, default_icon_data, - FALSE, - NULL); + theme = gtk_icon_theme_get_default (); - g_assert (base); + icon_exists = gtk_icon_theme_has_icon (theme, META_DEFAULT_ICON_NAME); - default_icon = gdk_pixbuf_scale_simple (base, - META_MINI_ICON_WIDTH, - META_MINI_ICON_HEIGHT, - GDK_INTERP_BILINEAR); + if (icon_exists) + default_icon = gtk_icon_theme_load_icon (theme, + META_DEFAULT_ICON_NAME, + META_MINI_ICON_WIDTH, + 0, + NULL); + else + default_icon = gtk_icon_theme_load_icon (theme, + "gtk-missing-image", + META_MINI_ICON_WIDTH, + 0, + NULL); - g_object_unref (G_OBJECT (base)); + g_assert (default_icon); } return default_icon; diff --git a/src/ui/ui.c b/src/ui/ui.c index 37901184c..ca0affcc0 100644 --- a/src/ui/ui.c +++ b/src/ui/ui.c @@ -574,20 +574,27 @@ meta_ui_get_default_window_icon (MetaUI *ui) if (default_icon == NULL) { - GdkPixbuf *base; + GtkIconTheme *theme; + gboolean icon_exists; - base = gdk_pixbuf_new_from_inline (-1, default_icon_data, - FALSE, - NULL); + theme = gtk_icon_theme_get_default (); - g_assert (base); + icon_exists = gtk_icon_theme_has_icon (theme, META_DEFAULT_ICON_NAME); - default_icon = gdk_pixbuf_scale_simple (base, - META_ICON_WIDTH, - META_ICON_HEIGHT, - GDK_INTERP_BILINEAR); + if (icon_exists) + default_icon = gtk_icon_theme_load_icon (theme, + META_DEFAULT_ICON_NAME, + META_ICON_WIDTH, + 0, + NULL); + else + default_icon = gtk_icon_theme_load_icon (theme, + "gtk-missing-image", + META_ICON_WIDTH, + 0, + NULL); - g_object_unref (G_OBJECT (base)); + g_assert (default_icon); } g_object_ref (G_OBJECT (default_icon)); @@ -602,20 +609,27 @@ meta_ui_get_default_mini_icon (MetaUI *ui) if (default_icon == NULL) { - GdkPixbuf *base; + GtkIconTheme *theme; + gboolean icon_exists; - base = gdk_pixbuf_new_from_inline (-1, default_icon_data, - FALSE, - NULL); + theme = gtk_icon_theme_get_default (); - g_assert (base); + icon_exists = gtk_icon_theme_has_icon (theme, META_DEFAULT_ICON_NAME); - default_icon = gdk_pixbuf_scale_simple (base, - META_MINI_ICON_WIDTH, - META_MINI_ICON_HEIGHT, - GDK_INTERP_BILINEAR); + if (icon_exists) + default_icon = gtk_icon_theme_load_icon (theme, + META_DEFAULT_ICON_NAME, + META_MINI_ICON_WIDTH, + 0, + NULL); + else + default_icon = gtk_icon_theme_load_icon (theme, + "gtk-missing-image", + META_MINI_ICON_WIDTH, + 0, + NULL); - g_object_unref (G_OBJECT (base)); + g_assert (default_icon); } g_object_ref (G_OBJECT (default_icon));