diff -uprN mate-window-manager-1.6.2-orig/src/Makefile.am mate-window-manager-1.6.2/src/Makefile.am --- mate-window-manager-1.6.2-orig/src/Makefile.am 2013-06-09 00:38:35.000000000 +0200 +++ mate-window-manager-1.6.2/src/Makefile.am 2013-09-27 21:21:10.617271967 +0200 @@ -185,14 +185,27 @@ xml_in_files = \ 50-marco-global-key.xml.in xml_DATA = $(xml_in_files:.xml.in=.xml) -BUILT_SOURCES = +@INTLTOOL_SCHEMAS_RULE@ + +IMAGES=stock_maximize.png stock_minimize.png stock_delete.png window.png mini-window.png +VARIABLES=stock_maximize_data $(srcdir)/stock_maximize.png \ + stock_minimize_data $(srcdir)/stock_minimize.png \ + stock_delete_data $(srcdir)/stock_delete.png \ + mini_window_data $(srcdir)/mini-window.png \ + window_data $(srcdir)/window.png + +BUILT_SOURCES = inlinepixbufs.h CLEANFILES = \ + inlinepixbufs.h \ marco.desktop \ marco-wm.desktop \ 50-marco-desktop-key.xml \ 50-marco-global-key.xml \ 50-marco-window-key.xml +inlinepixbufs.h: $(IMAGES) + $(AM_V_GEN)$(GDK_PIXBUF_CSOURCE) --raw --build-list $(VARIABLES) >$(srcdir)/inlinepixbufs.h + pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = libmarco-private.pc diff -uprN mate-window-manager-1.6.2-orig/src/ui/ui.c mate-window-manager-1.6.2/src/ui/ui.c --- mate-window-manager-1.6.2-orig/src/ui/ui.c 2013-06-09 00:38:35.000000000 +0200 +++ mate-window-manager-1.6.2/src/ui/ui.c 2013-09-27 21:47:23.789571527 +0200 @@ -28,9 +28,12 @@ #include "core.h" #include "theme.h" +#include "inlinepixbufs.h" + #include #include +static void meta_stock_icons_init (void); static void meta_ui_accelerator_parse(const char* accel, guint* keysym, guint* keycode, GdkModifierType* keymask); struct _MetaUI { @@ -51,6 +54,7 @@ void meta_ui_init(int* argc, char*** arg if (!gtk_init_check (argc, argv)) { meta_fatal ("Unable to open X display %s\n", XDisplayName (NULL)); + meta_stock_icons_init (); } } @@ -547,6 +551,7 @@ meta_image_window_set (MetaImageWindow * int x, int y) { + GdkWindow *window; cairo_t *cr; /* We use a back pixmap to avoid having to handle exposes, because @@ -568,7 +573,8 @@ meta_image_window_set (MetaImageWindow * cairo_paint (cr); cairo_destroy (cr); - gdk_window_set_back_pixmap (iw->window->window, + window = gtk_widget_get_window (iw->window); + gdk_window_set_back_pixmap (window, iw->pixmap, FALSE); @@ -732,11 +738,9 @@ meta_ui_get_default_window_icon (MetaUI 0, NULL); else - default_icon = gtk_icon_theme_load_icon (theme, - "gtk-missing-image", - META_ICON_WIDTH, - 0, - NULL); + default_icon = gdk_pixbuf_new_from_inline (-1, window_data, + FALSE, + NULL); g_assert (default_icon); } @@ -767,11 +771,9 @@ meta_ui_get_default_mini_icon (MetaUI *u 0, NULL); else - default_icon = gtk_icon_theme_load_icon (theme, - "gtk-missing-image", - META_MINI_ICON_WIDTH, - 0, - NULL); + default_icon = gdk_pixbuf_new_from_inline (-1, window_data, + FALSE, + NULL); g_assert (default_icon); } @@ -1058,6 +1060,41 @@ typedef struct { const guint8* icon_data; } MetaStockIcon; +static void +meta_stock_icons_init (void) +{ + GtkIconFactory *factory; + int i; + + MetaStockIcon items[] = + { + { MARCO_STOCK_DELETE, stock_delete_data }, + { MARCO_STOCK_MINIMIZE, stock_minimize_data }, + { MARCO_STOCK_MAXIMIZE, stock_maximize_data } + }; + + factory = gtk_icon_factory_new (); + gtk_icon_factory_add_default (factory); + + for (i = 0; i < (gint) G_N_ELEMENTS (items); i++) + { + GtkIconSet *icon_set; + GdkPixbuf *pixbuf; + + pixbuf = gdk_pixbuf_new_from_inline (-1, items[i].icon_data, + FALSE, + NULL); + + icon_set = gtk_icon_set_new_from_pixbuf (pixbuf); + gtk_icon_factory_add (factory, items[i].stock_id, icon_set); + gtk_icon_set_unref (icon_set); + + g_object_unref (G_OBJECT (pixbuf)); + } + + g_object_unref (G_OBJECT (factory)); +} + int meta_ui_get_drag_threshold(MetaUI* ui) { int threshold = 8;