David Zeuthen 37216c5
===================================================================
David Zeuthen 37216c5
RCS file: /cvs/gnome/nautilus/libnautilus-private/nautilus-directory-background.c,v
David Zeuthen 37216c5
retrieving revision 1.95
David Zeuthen 37216c5
diff -u -p -r1.95 nautilus-directory-background.c
David Zeuthen 37216c5
--- libnautilus-private/nautilus-directory-background.c	31 Jan 2005 19:35:24 -0000	1.95
David Zeuthen 37216c5
+++ libnautilus-private/nautilus-directory-background.c	15 Mar 2005 11:38:55 -0000
David Zeuthen 37216c5
@@ -35,8 +35,6 @@
David Zeuthen 37216c5
 #include "nautilus-metadata.h"
David Zeuthen 37216c5
 #include "nautilus-file-attributes.h"
David Zeuthen 37216c5
 #include <eel/eel-string.h>
David Zeuthen 37216c5
-#include <X11/Xatom.h>
David Zeuthen 37216c5
-#include <gdk/gdkx.h>
David Zeuthen 37216c5
 #include <gtk/gtkmain.h>
David Zeuthen 37216c5
 #include <gtk/gtksignal.h>
David Zeuthen 37216c5
 #include <libgnome/gnome-config.h>
David Zeuthen 37216c5
@@ -55,59 +53,11 @@ static void saved_settings_changed_callb
David Zeuthen 37216c5
                                          
David Zeuthen 37216c5
 static void nautilus_file_background_receive_gconf_changes (EelBackground *background);
David Zeuthen 37216c5
 
David Zeuthen 37216c5
-static void nautilus_file_update_root_pixmaps (EelBackground *background);
David Zeuthen 37216c5
-
David Zeuthen 37216c5
 static void nautilus_file_background_write_desktop_settings (char *color,
David Zeuthen 37216c5
 							     char *image,
David Zeuthen 37216c5
 							     EelBackgroundImagePlacement placement);
David Zeuthen 37216c5
 static void nautilus_file_background_theme_changed (gpointer user_data);
David Zeuthen 37216c5
 
David Zeuthen 37216c5
-static void
David Zeuthen 37216c5
-screen_size_changed (GdkScreen *screen, NautilusIconContainer *icon_container)
David Zeuthen 37216c5
-{
David Zeuthen 37216c5
-        EelBackground *background;
David Zeuthen 37216c5
-        
David Zeuthen 37216c5
-        background = eel_get_widget_background (GTK_WIDGET (icon_container));
David Zeuthen 37216c5
-
David Zeuthen 37216c5
-	nautilus_file_update_root_pixmaps (background);        
David Zeuthen 37216c5
-}
David Zeuthen 37216c5
-
David Zeuthen 37216c5
-static void
David Zeuthen 37216c5
-remove_connection (NautilusIconContainer *icon_container, GdkScreen *screen)
David Zeuthen 37216c5
-{
David Zeuthen 37216c5
-        g_signal_handlers_disconnect_by_func
David Zeuthen 37216c5
-                (screen,
David Zeuthen 37216c5
-                 G_CALLBACK (screen_size_changed),
David Zeuthen 37216c5
-                 icon_container);
David Zeuthen 37216c5
-}
David Zeuthen 37216c5
-
David Zeuthen 37216c5
-static void
David Zeuthen 37216c5
-desktop_background_realized (NautilusIconContainer *icon_container, void *disconnect_signal)
David Zeuthen 37216c5
-{
David Zeuthen 37216c5
-	EelBackground *background;
David Zeuthen 37216c5
-
David Zeuthen 37216c5
-        if (GPOINTER_TO_INT (disconnect_signal)) {
David Zeuthen 37216c5
-                g_signal_handlers_disconnect_by_func
David Zeuthen 37216c5
-                        (icon_container,
David Zeuthen 37216c5
-                         G_CALLBACK (desktop_background_realized),
David Zeuthen 37216c5
-                         disconnect_signal);
David Zeuthen 37216c5
-	}
David Zeuthen 37216c5
-
David Zeuthen 37216c5
-	background = eel_get_widget_background (GTK_WIDGET (icon_container));
David Zeuthen 37216c5
-                                          
David Zeuthen 37216c5
-	g_object_set_data (G_OBJECT (background), "icon_container", (gpointer) icon_container);
David Zeuthen 37216c5
-
David Zeuthen 37216c5
-	g_object_set_data (G_OBJECT (background), "screen",
David Zeuthen 37216c5
-			   gtk_widget_get_screen (GTK_WIDGET (icon_container)));
David Zeuthen 37216c5
-
David Zeuthen 37216c5
-	nautilus_file_update_root_pixmaps (background);
David Zeuthen 37216c5
-
David Zeuthen 37216c5
-        g_signal_connect (gtk_widget_get_screen (GTK_WIDGET (icon_container)), "size_changed",
David Zeuthen 37216c5
-                          G_CALLBACK (screen_size_changed), icon_container);
David Zeuthen 37216c5
-        g_signal_connect (icon_container, "unrealize", G_CALLBACK (remove_connection), 
David Zeuthen 37216c5
-                          gtk_widget_get_screen (GTK_WIDGET (icon_container)));
David Zeuthen 37216c5
-}
David Zeuthen 37216c5
-
David Zeuthen 37216c5
 void
David Zeuthen 37216c5
 nautilus_connect_desktop_background_to_file_metadata (NautilusIconContainer *icon_container,
David Zeuthen 37216c5
                                                       NautilusFile *file)
David Zeuthen 37216c5
@@ -115,9 +65,9 @@ nautilus_connect_desktop_background_to_f
David Zeuthen 37216c5
 	EelBackground *background;
David Zeuthen 37216c5
 
David Zeuthen 37216c5
 	background = eel_get_widget_background (GTK_WIDGET (icon_container));
David Zeuthen 37216c5
-        eel_background_set_is_constant_size (background, TRUE);
David Zeuthen 37216c5
 
David Zeuthen 37216c5
-	g_object_set_data (G_OBJECT (background), "is_desktop", (gpointer)1);
David Zeuthen 37216c5
+	eel_background_set_is_constant_size (background, TRUE);
David Zeuthen 37216c5
+	eel_background_set_desktop (background, GTK_WIDGET (icon_container), TRUE);
David Zeuthen 37216c5
 
David Zeuthen 37216c5
 	/* Strictly speaking, we don't need to know about metadata changes, since
David Zeuthen 37216c5
 	 * the desktop setting aren't stored there. But, hooking up to metadata
David Zeuthen 37216c5
@@ -129,22 +79,9 @@ nautilus_connect_desktop_background_to_f
David Zeuthen 37216c5
 	 */
David Zeuthen 37216c5
 	nautilus_connect_background_to_file_metadata (GTK_WIDGET (icon_container), file, NAUTILUS_DND_ACTION_SET_AS_FOLDER_BACKGROUND);
David Zeuthen 37216c5
 
David Zeuthen 37216c5
-	if (GTK_WIDGET_REALIZED (icon_container)) {
David Zeuthen 37216c5
-		desktop_background_realized (icon_container, GINT_TO_POINTER (FALSE));
David Zeuthen 37216c5
-	} else {
David Zeuthen 37216c5
-		g_signal_connect (icon_container, "realize",
David Zeuthen 37216c5
-                                  G_CALLBACK (desktop_background_realized), GINT_TO_POINTER (TRUE));
David Zeuthen 37216c5
-	}
David Zeuthen 37216c5
-
David Zeuthen 37216c5
 	nautilus_file_background_receive_gconf_changes (background); 
David Zeuthen 37216c5
 }
David Zeuthen 37216c5
 
David Zeuthen 37216c5
-static gboolean
David Zeuthen 37216c5
-background_is_desktop (EelBackground *background)
David Zeuthen 37216c5
-{
David Zeuthen 37216c5
-	return g_object_get_data (G_OBJECT (background), "is_desktop") != 0;
David Zeuthen 37216c5
-}
David Zeuthen 37216c5
-
David Zeuthen 37216c5
 static void
David Zeuthen 37216c5
 nautilus_file_background_get_default_settings (char **color,
David Zeuthen 37216c5
                                                char **image,
David Zeuthen 37216c5
@@ -357,15 +294,31 @@ static void
David Zeuthen 37216c5
 desktop_background_destroyed_callback (EelBackground *background, void *georgeWBush)
David Zeuthen 37216c5
 {
David Zeuthen 37216c5
 	guint notification_id;
David Zeuthen 37216c5
+	guint notification_timeout_id;
David Zeuthen 37216c5
 
David Zeuthen 37216c5
         notification_id = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (background), "desktop_gconf_notification"));
David Zeuthen 37216c5
 	eel_gconf_notification_remove (notification_id);
David Zeuthen 37216c5
+
David Zeuthen 37216c5
+	notification_timeout_id = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (background), "desktop_gconf_notification_timeout"));
David Zeuthen 37216c5
+	g_source_remove (notification_timeout_id);
David Zeuthen 37216c5
 }
David Zeuthen 37216c5
 
David Zeuthen 37216c5
 static void
David Zeuthen 37216c5
 desktop_background_gconf_notify_cb (GConfClient *client, guint notification_id, GConfEntry *entry, gpointer data)
David Zeuthen 37216c5
 {
David Zeuthen 37216c5
-	call_settings_changed (EEL_BACKGROUND (data));
David Zeuthen 37216c5
+	EelBackground *background;
David Zeuthen 37216c5
+	guint notification_timeout_id;
David Zeuthen 37216c5
+	
David Zeuthen 37216c5
+	background = EEL_BACKGROUND (data);
David Zeuthen 37216c5
+	/* 
David Zeuthen 37216c5
+	 * Wallpaper capplet changes picture, background color and placement with
David Zeuthen 37216c5
+	 * gconf_change_set API, but unfortunately, this operation is not atomic in
David Zeuthen 37216c5
+	 * GConf as it should be. So we update background after small timeout to
David Zeuthen 37216c5
+	 * let GConf change all values.
David Zeuthen 37216c5
+	 */
David Zeuthen 37216c5
+	notification_timeout_id = g_timeout_add (300, (GSourceFunc) call_settings_changed, background);
David Zeuthen 37216c5
+
David Zeuthen 37216c5
+	g_object_set_data (G_OBJECT (background), "desktop_gconf_notification_timeout", GUINT_TO_POINTER (notification_timeout_id));
David Zeuthen 37216c5
 }
David Zeuthen 37216c5
 
David Zeuthen 37216c5
 static void
David Zeuthen 37216c5
@@ -382,190 +335,6 @@ nautilus_file_background_receive_gconf_c
David Zeuthen 37216c5
                           G_CALLBACK (desktop_background_destroyed_callback), NULL);
David Zeuthen 37216c5
 }
David Zeuthen 37216c5
 
David Zeuthen 37216c5
-/* Create a persistent pixmap. We create a separate display
David Zeuthen 37216c5
- * and set the closedown mode on it to RetainPermanent
David Zeuthen 37216c5
- * (copied from gnome-source/control-panels/capplets/background-properties/render-background.c)
David Zeuthen 37216c5
- */
David Zeuthen 37216c5
-static GdkPixmap *
David Zeuthen 37216c5
-make_root_pixmap (GdkScreen *screen, gint width, gint height)
David Zeuthen 37216c5
-{
David Zeuthen 37216c5
-	Display *display;
David Zeuthen 37216c5
-        const char *display_name;
David Zeuthen 37216c5
-	Pixmap result;
David Zeuthen 37216c5
-	GdkPixmap *gdk_pixmap;
David Zeuthen 37216c5
-	int screen_num;
David Zeuthen 37216c5
-
David Zeuthen 37216c5
-	screen_num = gdk_screen_get_number (screen);
David Zeuthen 37216c5
-
David Zeuthen 37216c5
-	gdk_flush ();
David Zeuthen 37216c5
-
David Zeuthen 37216c5
-	display_name = gdk_display_get_name (gdk_screen_get_display (screen));
David Zeuthen 37216c5
-	display = XOpenDisplay (display_name);
David Zeuthen 37216c5
-
David Zeuthen 37216c5
-        if (display == NULL) {
David Zeuthen 37216c5
-                g_warning ("Unable to open display '%s' when setting background pixmap\n",
David Zeuthen 37216c5
-                           (display_name) ? display_name : "NULL");
David Zeuthen 37216c5
-                return NULL;
David Zeuthen 37216c5
-        }
David Zeuthen 37216c5
-
David Zeuthen 37216c5
-	XSetCloseDownMode (display, RetainPermanent);
David Zeuthen 37216c5
-
David Zeuthen 37216c5
-	result = XCreatePixmap (display,
David Zeuthen 37216c5
-				RootWindow (display, screen_num),
David Zeuthen 37216c5
-				width, height,
David Zeuthen 37216c5
-				DefaultDepth (display, screen_num));
David Zeuthen 37216c5
-
David Zeuthen 37216c5
-	XCloseDisplay (display);
David Zeuthen 37216c5
-
David Zeuthen 37216c5
-	gdk_pixmap = gdk_pixmap_foreign_new (result);
David Zeuthen 37216c5
-	gdk_drawable_set_colormap (GDK_DRAWABLE (gdk_pixmap),
David Zeuthen 37216c5
-				   gdk_drawable_get_colormap (gdk_screen_get_root_window (screen)));
David Zeuthen 37216c5
-
David Zeuthen 37216c5
-	return gdk_pixmap;
David Zeuthen 37216c5
-}
David Zeuthen 37216c5
-
David Zeuthen 37216c5
-/* Set the root pixmap, and properties pointing to it. We
David Zeuthen 37216c5
- * do this atomically with XGrabServer to make sure that
David Zeuthen 37216c5
- * we won't leak the pixmap if somebody else it setting
David Zeuthen 37216c5
- * it at the same time. (This assumes that they follow the
David Zeuthen 37216c5
- * same conventions we do
David Zeuthen 37216c5
- * (copied from gnome-source/control-panels/capplets/background-properties/render-background.c)
David Zeuthen 37216c5
- */
David Zeuthen 37216c5
-static void 
David Zeuthen 37216c5
-set_root_pixmap (GdkPixmap *pixmap, GdkScreen *screen)
David Zeuthen 37216c5
-{
David Zeuthen 37216c5
-	int      result;
David Zeuthen 37216c5
-	gint     format;
David Zeuthen 37216c5
-	gulong   nitems;
David Zeuthen 37216c5
-	gulong   bytes_after;
David Zeuthen 37216c5
-	guchar  *data_esetroot;
David Zeuthen 37216c5
-	Pixmap   pixmap_id;
David Zeuthen 37216c5
-	Atom     type;
David Zeuthen 37216c5
-	Display *display;
David Zeuthen 37216c5
-	int      screen_num;
David Zeuthen 37216c5
-
David Zeuthen 37216c5
-	screen_num = gdk_screen_get_number (screen);
David Zeuthen 37216c5
-
David Zeuthen 37216c5
-	data_esetroot = NULL;
David Zeuthen 37216c5
-	display = GDK_DISPLAY_XDISPLAY (gdk_screen_get_display (screen));
David Zeuthen 37216c5
-
David Zeuthen 37216c5
-	XGrabServer (display);
David Zeuthen 37216c5
-
David Zeuthen 37216c5
-	result = XGetWindowProperty (display, RootWindow (display, screen_num),
David Zeuthen 37216c5
-				     gdk_x11_get_xatom_by_name ("ESETROOT_PMAP_ID"),
David Zeuthen 37216c5
-				     0L, 1L, False, XA_PIXMAP,
David Zeuthen 37216c5
-				     &type, &format, &nitems, &bytes_after,
David Zeuthen 37216c5
-				     &data_esetroot);
David Zeuthen 37216c5
-
David Zeuthen 37216c5
-	if (data_esetroot != NULL) {
David Zeuthen 37216c5
-		if (result == Success && type == XA_PIXMAP && format == 32 && nitems == 1) {
David Zeuthen 37216c5
-			gdk_error_trap_push ();
David Zeuthen 37216c5
-			XKillClient (display, *(Pixmap *)data_esetroot);
David Zeuthen 37216c5
-			gdk_flush ();
David Zeuthen 37216c5
-			gdk_error_trap_pop ();
David Zeuthen 37216c5
-		}
David Zeuthen 37216c5
-		XFree (data_esetroot);
David Zeuthen 37216c5
-	}
David Zeuthen 37216c5
-
David Zeuthen 37216c5
-	pixmap_id = GDK_WINDOW_XWINDOW (pixmap);
David Zeuthen 37216c5
-
David Zeuthen 37216c5
-	XChangeProperty (display, RootWindow (display, screen_num),
David Zeuthen 37216c5
-			 gdk_x11_get_xatom_by_name ("ESETROOT_PMAP_ID"), XA_PIXMAP,
David Zeuthen 37216c5
-			 32, PropModeReplace,
David Zeuthen 37216c5
-			 (guchar *) &pixmap_id, 1);
David Zeuthen 37216c5
-	XChangeProperty (display, RootWindow (display, screen_num),
David Zeuthen 37216c5
-			 gdk_x11_get_xatom_by_name ("_XROOTPMAP_ID"), XA_PIXMAP,
David Zeuthen 37216c5
-			 32, PropModeReplace,
David Zeuthen 37216c5
-			 (guchar *) &pixmap_id, 1);
David Zeuthen 37216c5
-
David Zeuthen 37216c5
-	XSetWindowBackgroundPixmap (display, RootWindow (display, screen_num), pixmap_id);
David Zeuthen 37216c5
-	XClearWindow (display, RootWindow (display, screen_num));
David Zeuthen 37216c5
-
David Zeuthen 37216c5
-	XUngrabServer (display);
David Zeuthen 37216c5
-	
David Zeuthen 37216c5
-	XFlush (display);
David Zeuthen 37216c5
-}
David Zeuthen 37216c5
-
David Zeuthen 37216c5
-/* Free the root pixmap */
David Zeuthen 37216c5
-static void
David Zeuthen 37216c5
-image_loading_done_callback (EelBackground *background, gboolean successful_load, void *disconnect_signal)
David Zeuthen 37216c5
-{
David Zeuthen 37216c5
-	int           entire_width;
David Zeuthen 37216c5
-	int           entire_height;
David Zeuthen 37216c5
-	int           pixmap_width;
David Zeuthen 37216c5
-	int           pixmap_height;
David Zeuthen 37216c5
-	GdkGC        *gc;
David Zeuthen 37216c5
-	GdkPixmap    *pixmap;
David Zeuthen 37216c5
-	GdkWindow    *background_window;
David Zeuthen 37216c5
-	GdkScreen    *screen;
David Zeuthen 37216c5
-        GdkColor parsed_color;
David Zeuthen 37216c5
-        char * color_string;
David Zeuthen 37216c5
-
David Zeuthen 37216c5
-        if (GPOINTER_TO_INT (disconnect_signal)) {
David Zeuthen 37216c5
-		g_signal_handlers_disconnect_by_func
David Zeuthen 37216c5
-                        (background,
David Zeuthen 37216c5
-                         G_CALLBACK (image_loading_done_callback),
David Zeuthen 37216c5
-                         disconnect_signal);
David Zeuthen 37216c5
-	}
David Zeuthen 37216c5
-
David Zeuthen 37216c5
-	screen = g_object_get_data (G_OBJECT (background), "screen");
David Zeuthen 37216c5
-	if (screen == NULL) {
David Zeuthen 37216c5
-		return;
David Zeuthen 37216c5
-        }
David Zeuthen 37216c5
-	entire_width = gdk_screen_get_width (screen);
David Zeuthen 37216c5
-	entire_height = gdk_screen_get_height (screen);
David Zeuthen 37216c5
-
David Zeuthen 37216c5
-	if (eel_background_get_suggested_pixmap_size (background, entire_width, entire_height,
David Zeuthen 37216c5
-                                                      &pixmap_width, &pixmap_height)) {
David Zeuthen 37216c5
-                eel_background_pre_draw (background, entire_width, entire_height);
David Zeuthen 37216c5
-                /* image resize may have forced us to reload the image */
David Zeuthen 37216c5
-                if (!eel_background_is_loaded (background)) {
David Zeuthen 37216c5
-                        g_signal_connect (background, "image_loading_done",
David Zeuthen 37216c5
-                                          G_CALLBACK (image_loading_done_callback),
David Zeuthen 37216c5
-                                          GINT_TO_POINTER (TRUE));
David Zeuthen 37216c5
-                        return;
David Zeuthen 37216c5
-                }
David Zeuthen 37216c5
-	} else {
David Zeuthen 37216c5
-                pixmap_width = pixmap_height = 1;
David Zeuthen 37216c5
-
David Zeuthen 37216c5
-		background_window = gdk_screen_get_root_window (screen);
David Zeuthen 37216c5
-		color_string = eel_background_get_color (background);
David Zeuthen 37216c5
-
David Zeuthen 37216c5
-		if (background_window != NULL && color_string != NULL) {
David Zeuthen 37216c5
-			if (eel_gdk_color_parse (color_string, &parsed_color)) {
David Zeuthen 37216c5
-                                gdk_rgb_find_color (gdk_drawable_get_colormap (background_window), &parsed_color);
David Zeuthen 37216c5
-				gdk_window_set_background (background_window, &parsed_color);
David Zeuthen 37216c5
-			}
David Zeuthen 37216c5
-		}
David Zeuthen 37216c5
-		g_free (color_string);
David Zeuthen 37216c5
-	}
David Zeuthen 37216c5
-
David Zeuthen 37216c5
-        pixmap = make_root_pixmap (screen, pixmap_width, pixmap_height);
David Zeuthen 37216c5
-        if (pixmap == NULL) {
David Zeuthen 37216c5
-                return;
David Zeuthen 37216c5
-        }
David Zeuthen 37216c5
-        
David Zeuthen 37216c5
-        gc = gdk_gc_new (pixmap);
David Zeuthen 37216c5
-        eel_background_draw (background, pixmap, gc,
David Zeuthen 37216c5
-                             0, 0, 0, 0,
David Zeuthen 37216c5
-                             pixmap_width, pixmap_height);
David Zeuthen 37216c5
-        g_object_unref (gc);
David Zeuthen 37216c5
-        set_root_pixmap (pixmap, screen);
David Zeuthen 37216c5
-        g_object_unref (pixmap);
David Zeuthen 37216c5
-}
David Zeuthen 37216c5
-
David Zeuthen 37216c5
-static void
David Zeuthen 37216c5
-nautilus_file_update_root_pixmaps (EelBackground *background)
David Zeuthen 37216c5
-{
David Zeuthen 37216c5
-	if (eel_background_is_loaded (background)) {
David Zeuthen 37216c5
-		image_loading_done_callback (background, TRUE, GINT_TO_POINTER (FALSE));
David Zeuthen 37216c5
-	} else {
David Zeuthen 37216c5
-		g_signal_connect (background, "image_loading_done",
David Zeuthen 37216c5
-                                  G_CALLBACK (image_loading_done_callback),
David Zeuthen 37216c5
-                                  GINT_TO_POINTER (TRUE));
David Zeuthen 37216c5
-	}
David Zeuthen 37216c5
-}
David Zeuthen 37216c5
-
David Zeuthen 37216c5
 /* return true if the background is not in the default state */
David Zeuthen 37216c5
 gboolean
David Zeuthen 37216c5
 nautilus_file_background_is_set (EelBackground *background)
David Zeuthen 37216c5
@@ -603,7 +372,7 @@ background_changed_callback (EelBackgrou
David Zeuthen 37216c5
 	color = eel_background_get_color (background);
David Zeuthen 37216c5
 	image = eel_background_get_image_uri (background);
David Zeuthen 37216c5
 
David Zeuthen 37216c5
-	if (background_is_desktop (background)) {
David Zeuthen 37216c5
+	if (eel_background_is_desktop (background)) {
David Zeuthen 37216c5
 		nautilus_file_background_write_desktop_settings (color, image, eel_background_get_image_placement (background));
David Zeuthen 37216c5
 	} else {
David Zeuthen 37216c5
 	        /* Block the other handler while we are writing metadata so it doesn't
David Zeuthen 37216c5
@@ -657,10 +426,6 @@ background_changed_callback (EelBackgrou
David Zeuthen 37216c5
 
David Zeuthen 37216c5
 	g_free (color);
David Zeuthen 37216c5
 	g_free (image);
David Zeuthen 37216c5
-	
David Zeuthen 37216c5
-	if (background_is_desktop (background)) {
David Zeuthen 37216c5
-		nautilus_file_update_root_pixmaps (background);
David Zeuthen 37216c5
-	}
David Zeuthen 37216c5
 }
David Zeuthen 37216c5
 
David Zeuthen 37216c5
 static gboolean
David Zeuthen 37216c5
@@ -677,7 +442,7 @@ initialize_background_from_settings (Nau
David Zeuthen 37216c5
         g_assert (g_object_get_data (G_OBJECT (background), "eel_background_file")
David Zeuthen 37216c5
                   == file);
David Zeuthen 37216c5
 
David Zeuthen 37216c5
-	if (background_is_desktop (background)) {
David Zeuthen 37216c5
+	if (eel_background_is_desktop (background)) {
David Zeuthen 37216c5
 		nautilus_file_background_read_desktop_settings (&color, &image, &placement);
David Zeuthen 37216c5
 	} else {
David Zeuthen 37216c5
 		color = nautilus_file_get_metadata (file,
David Zeuthen 37216c5
@@ -715,7 +480,7 @@ initialize_background_from_settings (Nau
David Zeuthen 37216c5
 
David Zeuthen 37216c5
         old_image = eel_background_get_image_uri (background);
David Zeuthen 37216c5
         if (eel_strcmp (image, old_image) != 0) {
David Zeuthen 37216c5
-                if (background_is_desktop(background)) {
David Zeuthen 37216c5
+                if (eel_background_is_desktop(background)) {
David Zeuthen 37216c5
                         eel_background_set_image_uri_sync (background, image);
David Zeuthen 37216c5
                 }
David Zeuthen 37216c5
                 else {
David Zeuthen 37216c5
@@ -750,10 +515,6 @@ saved_settings_changed_callback (Nautilu
David Zeuthen 37216c5
 {
David Zeuthen 37216c5
         gboolean changed;
David Zeuthen 37216c5
 	changed = initialize_background_from_settings (file, background);
David Zeuthen 37216c5
-	
David Zeuthen 37216c5
-	if (changed && background_is_desktop (background)) {
David Zeuthen 37216c5
-		nautilus_file_update_root_pixmaps (background);
David Zeuthen 37216c5
-	}
David Zeuthen 37216c5
 }
David Zeuthen 37216c5
 
David Zeuthen 37216c5
 /* handle the theme changing */
David Zeuthen 37216c5
@@ -778,7 +539,7 @@ background_reset_callback (EelBackground
David Zeuthen 37216c5
         char *color;
David Zeuthen 37216c5
         char *image;
David Zeuthen 37216c5
 
David Zeuthen 37216c5
-	if (background_is_desktop (background)) {
David Zeuthen 37216c5
+	if (eel_background_is_desktop (background)) {
David Zeuthen 37216c5
 		nautilus_file_background_write_desktop_default_settings ();
David Zeuthen 37216c5
 	} else {
David Zeuthen 37216c5
 	        /* Block the other handler while we are writing metadata so it doesn't
David Zeuthen 37216c5
Index: nautilus-icon-dnd.c
David Zeuthen 37216c5
===================================================================
David Zeuthen 37216c5
RCS file: /cvs/gnome/nautilus/libnautilus-private/nautilus-icon-dnd.c,v
David Zeuthen 37216c5
retrieving revision 1.141
David Zeuthen 37216c5
diff -u -p -r1.141 nautilus-icon-dnd.c
David Zeuthen 37216c5
--- libnautilus-private/nautilus-icon-dnd.c	13 Jan 2005 13:27:51 -0000	1.141
David Zeuthen 37216c5
+++ libnautilus-private/nautilus-icon-dnd.c	15 Mar 2005 11:38:55 -0000
David Zeuthen 37216c5
@@ -536,7 +534,7 @@ get_background_drag_action (NautilusIcon
David Zeuthen 37216c5
 
David Zeuthen 37216c5
 	if (action == GDK_ACTION_ASK) {
David Zeuthen 37216c5
 		valid_actions = NAUTILUS_DND_ACTION_SET_AS_FOLDER_BACKGROUND;
David Zeuthen 37216c5
-		if (g_object_get_data (G_OBJECT (eel_get_widget_background (GTK_WIDGET (container))), "is_desktop") == 0) {
David Zeuthen 37216c5
+		if (!eel_background_is_desktop (eel_get_widget_background (GTK_WIDGET (container)))) {
David Zeuthen 37216c5
 			valid_actions |= NAUTILUS_DND_ACTION_SET_AS_GLOBAL_BACKGROUND;
David Zeuthen 37216c5
 		}
David Zeuthen 37216c5
 
David Zeuthen 37216c5
Index: libnautilus-private/nautilus-window-info.c
David Zeuthen 37216c5
===================================================================
David Zeuthen 37216c5
RCS file: /cvs/gnome/nautilus/libnautilus-private/nautilus-window-info.c,v
David Zeuthen 37216c5
retrieving revision 1.2
David Zeuthen 37216c5
diff -u -p -r1.2 nautilus-window-info.c
David Zeuthen 37216c5
--- libnautilus-private/nautilus-window-info.c	22 Nov 2004 15:24:36 -0000	1.2
David Zeuthen 37216c5
+++ libnautilus-private/nautilus-window-info.c	18 Mar 2005 23:28:15 -0000
David Zeuthen 37216c5
@@ -168,6 +168,14 @@ nautilus_window_info_open_location (Naut
David Zeuthen 37216c5
 }
David Zeuthen 37216c5
 
David Zeuthen 37216c5
 void
David Zeuthen 37216c5
+nautilus_window_info_show_window (NautilusWindowInfo      *window)
David Zeuthen 37216c5
+{
David Zeuthen 37216c5
+	g_return_if_fail (NAUTILUS_IS_WINDOW_INFO (window));
David Zeuthen 37216c5
+
David Zeuthen 37216c5
+	(* NAUTILUS_WINDOW_INFO_GET_IFACE (window)->show_window) (window);
David Zeuthen 37216c5
+}
David Zeuthen 37216c5
+
David Zeuthen 37216c5
+void
David Zeuthen 37216c5
 nautilus_window_info_close (NautilusWindowInfo      *window)
David Zeuthen 37216c5
 {
David Zeuthen 37216c5
 	g_return_if_fail (NAUTILUS_IS_WINDOW_INFO (window));
David Zeuthen 37216c5
Index: libnautilus-private/nautilus-window-info.h
David Zeuthen 37216c5
===================================================================
David Zeuthen 37216c5
RCS file: /cvs/gnome/nautilus/libnautilus-private/nautilus-window-info.h,v
David Zeuthen 37216c5
retrieving revision 1.2
David Zeuthen 37216c5
diff -u -p -r1.2 nautilus-window-info.h
David Zeuthen 37216c5
--- libnautilus-private/nautilus-window-info.h	22 Nov 2004 15:24:36 -0000	1.2
David Zeuthen 37216c5
+++ libnautilus-private/nautilus-window-info.h	18 Mar 2005 23:28:15 -0000
David Zeuthen 37216c5
@@ -127,6 +127,7 @@ struct _NautilusWindowInfoIface 
David Zeuthen 37216c5
 				       NautilusWindowOpenMode mode,
David Zeuthen 37216c5
 				       NautilusWindowOpenFlags flags,
David Zeuthen 37216c5
 				       GList *selection);
David Zeuthen 37216c5
+	void   (* show_window)        (NautilusWindowInfo *window);
David Zeuthen 37216c5
 	void   (* close_window)       (NautilusWindowInfo *window);
David Zeuthen 37216c5
 	GtkUIManager *     (* get_ui_manager)   (NautilusWindowInfo *window);
David Zeuthen 37216c5
 };
David Zeuthen 37216c5
@@ -144,6 +145,7 @@ void                              nautil
David Zeuthen 37216c5
 										 NautilusWindowOpenMode             mode,
David Zeuthen 37216c5
 										 NautilusWindowOpenFlags            flags,
David Zeuthen 37216c5
 										 GList                             *selection);
David Zeuthen 37216c5
+void                              nautilus_window_info_show_window              (NautilusWindowInfo                *window);
David Zeuthen 37216c5
 void                              nautilus_window_info_close                    (NautilusWindowInfo                *window);
David Zeuthen 37216c5
 void                              nautilus_window_info_set_status               (NautilusWindowInfo                *window,
David Zeuthen 37216c5
 										 const char                        *status);
David Zeuthen 37216c5
Index: src/nautilus-window-manage-views.c
David Zeuthen 37216c5
===================================================================
David Zeuthen 37216c5
RCS file: /cvs/gnome/nautilus/src/nautilus-window-manage-views.c,v
David Zeuthen 37216c5
retrieving revision 1.347
David Zeuthen 37216c5
diff -u -p -r1.347 nautilus-window-manage-views.c
David Zeuthen 37216c5
--- src/nautilus-window-manage-views.c	14 Feb 2005 10:59:23 -0000	1.347
David Zeuthen 37216c5
+++ src/nautilus-window-manage-views.c	18 Mar 2005 23:28:15 -0000
David Zeuthen 37216c5
@@ -1106,11 +1106,6 @@ location_has_really_changed (NautilusWin
David Zeuthen 37216c5
 
David Zeuthen 37216c5
         free_location_change (window);
David Zeuthen 37216c5
 
David Zeuthen 37216c5
-        nautilus_window_update_title (window);
David Zeuthen 37216c5
-	nautilus_window_update_icon (window);
David Zeuthen 37216c5
-
David Zeuthen 37216c5
-	gtk_widget_show (GTK_WIDGET (window));
David Zeuthen 37216c5
-
David Zeuthen 37216c5
 	if (location_copy != NULL) {
David Zeuthen 37216c5
 		g_signal_emit_by_name (window, "loading_uri",
David Zeuthen 37216c5
 				       location_copy);
David Zeuthen 37216c5
Index: src/nautilus-window.c
David Zeuthen 37216c5
===================================================================
David Zeuthen 37216c5
RCS file: /cvs/gnome/nautilus/src/nautilus-window.c,v
David Zeuthen 37216c5
retrieving revision 1.443
David Zeuthen 37216c5
diff -u -p -r1.443 nautilus-window.c
David Zeuthen 37216c5
--- src/nautilus-window.c	22 Feb 2005 08:46:38 -0000	1.443
David Zeuthen 37216c5
+++ src/nautilus-window.c	18 Mar 2005 23:28:16 -0000
David Zeuthen 37216c5
@@ -559,6 +559,26 @@ nautilus_window_finalize (GObject *objec
David Zeuthen 37216c5
 }
David Zeuthen 37216c5
 
David Zeuthen 37216c5
 void
David Zeuthen 37216c5
+nautilus_window_show_window (NautilusWindow *window)
David Zeuthen 37216c5
+{
David Zeuthen 37216c5
+	g_return_if_fail (NAUTILUS_IS_WINDOW (window));
David Zeuthen 37216c5
+
David Zeuthen 37216c5
+	EEL_CALL_METHOD (NAUTILUS_WINDOW_CLASS, window,
David Zeuthen 37216c5
+			 show_window, (window));
David Zeuthen 37216c5
+
David Zeuthen 37216c5
+	nautilus_window_update_title (window);
David Zeuthen 37216c5
+	nautilus_window_update_icon (window);
David Zeuthen 37216c5
+
David Zeuthen 37216c5
+	gtk_widget_show (GTK_WIDGET (window));
David Zeuthen 37216c5
+
David Zeuthen 37216c5
+	if (window->details->viewed_file) {
David Zeuthen 37216c5
+		if (NAUTILUS_IS_SPATIAL_WINDOW (window)) {
David Zeuthen 37216c5
+			nautilus_file_set_has_open_window (window->details->viewed_file, TRUE);
David Zeuthen 37216c5
+		}
David Zeuthen 37216c5
+	}
David Zeuthen 37216c5
+}
David Zeuthen 37216c5
+
David Zeuthen 37216c5
+void
David Zeuthen 37216c5
 nautilus_window_close (NautilusWindow *window)
David Zeuthen 37216c5
 {
David Zeuthen 37216c5
 	g_return_if_fail (NAUTILUS_IS_WINDOW (window));
David Zeuthen 37216c5
@@ -1186,9 +1206,6 @@ nautilus_window_set_viewed_file (Nautilu
David Zeuthen 37216c5
 	}
David Zeuthen 37216c5
 
David Zeuthen 37216c5
 	if (file != NULL) {
David Zeuthen 37216c5
-		if (NAUTILUS_IS_SPATIAL_WINDOW (window)) {
David Zeuthen 37216c5
-			nautilus_file_set_has_open_window (file, TRUE);
David Zeuthen 37216c5
-		}
David Zeuthen 37216c5
 		attributes = NAUTILUS_FILE_ATTRIBUTE_DISPLAY_NAME | NAUTILUS_FILE_ATTRIBUTE_SLOW_MIME_TYPE;
David Zeuthen 37216c5
 		nautilus_file_monitor_add (file, window, attributes);
David Zeuthen 37216c5
 	}
David Zeuthen 37216c5
@@ -1407,6 +1424,7 @@ nautilus_window_info_iface_init (Nautilu
David Zeuthen 37216c5
 	iface->report_selection_changed = nautilus_window_report_selection_changed;
David Zeuthen 37216c5
 	iface->report_view_failed = nautilus_window_report_view_failed;
David Zeuthen 37216c5
 	iface->open_location = nautilus_window_open_location_full;
David Zeuthen 37216c5
+	iface->show_window = nautilus_window_show_window;
David Zeuthen 37216c5
 	iface->close_window = nautilus_window_close;
David Zeuthen 37216c5
 	iface->set_status = nautilus_window_set_status;
David Zeuthen 37216c5
 	iface->get_window_type = nautilus_window_get_window_type;
David Zeuthen 37216c5
Index: src/nautilus-window.h
David Zeuthen 37216c5
===================================================================
David Zeuthen 37216c5
RCS file: /cvs/gnome/nautilus/src/nautilus-window.h,v
David Zeuthen 37216c5
retrieving revision 1.117
David Zeuthen 37216c5
diff -u -p -r1.117 nautilus-window.h
David Zeuthen 37216c5
--- src/nautilus-window.h	22 Nov 2004 15:24:37 -0000	1.117
David Zeuthen 37216c5
+++ src/nautilus-window.h	18 Mar 2005 23:28:16 -0000
David Zeuthen 37216c5
@@ -74,6 +74,7 @@ typedef struct {
David Zeuthen 37216c5
                                         gboolean active);
David Zeuthen 37216c5
         void   (* prompt_for_location) (NautilusWindow *window);
David Zeuthen 37216c5
         void   (* get_default_size) (NautilusWindow *window, guint *default_width, guint *default_height);
David Zeuthen 37216c5
+        void   (* show_window)  (NautilusWindow *window);
David Zeuthen 37216c5
         void   (* close) (NautilusWindow *window);
David Zeuthen 37216c5
 
David Zeuthen 37216c5
         /* Signals used only for keybindings */
David Zeuthen 37216c5
@@ -110,6 +111,7 @@ struct NautilusWindow {
David Zeuthen 37216c5
 };
David Zeuthen 37216c5
 
David Zeuthen 37216c5
 GType            nautilus_window_get_type             (void);
David Zeuthen 37216c5
+void             nautilus_window_show_window          (NautilusWindow    *window);
David Zeuthen 37216c5
 void             nautilus_window_close                (NautilusWindow    *window);
David Zeuthen 37216c5
 char *           nautilus_window_get_location         (NautilusWindow    *window);
David Zeuthen 37216c5
 void             nautilus_window_go_to                (NautilusWindow    *window,
David Zeuthen 37216c5
Index: src/file-manager/fm-directory-view.c
David Zeuthen 37216c5
===================================================================
David Zeuthen 37216c5
RCS file: /cvs/gnome/nautilus/src/file-manager/fm-directory-view.c,v
David Zeuthen 37216c5
retrieving revision 1.662
David Zeuthen 37216c5
diff -u -p -r1.662 fm-directory-view.c
David Zeuthen 37216c5
--- src/file-manager/fm-directory-view.c	12 Mar 2005 11:45:12 -0000	1.662
David Zeuthen 37216c5
+++ src/file-manager/fm-directory-view.c	18 Mar 2005 23:28:16 -0000
David Zeuthen 37216c5
@@ -7069,6 +7069,9 @@ finish_loading (FMDirectoryView *view)
David Zeuthen 37216c5
 	 * Subclasses use this to know that the new metadata is now available.
David Zeuthen 37216c5
 	 */
David Zeuthen 37216c5
 	fm_directory_view_begin_loading (view);
David Zeuthen 37216c5
+	
David Zeuthen 37216c5
+	/* Assume we have now all information to show window */
David Zeuthen 37216c5
+	nautilus_window_info_show_window  (view->details->window);
David Zeuthen 37216c5
 
David Zeuthen 37216c5
 	if (nautilus_directory_are_all_files_seen (view->details->model)) {
David Zeuthen 37216c5
 		schedule_idle_display_of_pending_files (view);