nautilus r14677 - in trunk: . libnautilus-private src



Author: alexl
Date: Wed Oct  1 12:47:51 2008
New Revision: 14677
URL: http://svn.gnome.org/viewvc/nautilus?rev=14677&view=rev

Log:
2008-10-01  Alexander Larsson  <alexl redhat com>

        * configure.in:
	Remove direct deps on bonobo, bonobo-activation, orbit2, startup-notification
	Add dependency on libunique
	
        * src/Makefile.am:
        * src/nautilus-shell-interface.idl:
        * src/nautilus-shell.[ch]:
	Remove NautilusShell
	
        * src/nautilus-application.[ch]:
	Make NautilusApplication a normal GObject
	Remove NautilusShell use.
	Implement unique application functionallity using libunique
	Remove manual startup notification handling (mostly handled by libunique)
	
        * src/nautilus-main.c:
	Remove bonobo initialization
	Remove manual startup notification handling
	Move command line arg to uri parsing here
	Remove weird idle handling now that we don't use bonobo anymore

        * libnautilus-private/nautilus-undo-manager.c:
        * libnautilus-private/nautilus-undo-manager.h:
        * libnautilus-private/nautilus-undo.c:
        * src/nautilus-window-private.h:
	Remove all leftover spurious use of bonobo
	
        * src/nautilus-window-slot.h:
        * src/nautilus-desktop-window.c:
        * src/nautilus-location-dialog.c:
        * src/nautilus-window-bookmarks.c:
	Add required includes of gi18n.h
	



Removed:
   trunk/src/nautilus-shell-interface.idl
   trunk/src/nautilus-shell.c
   trunk/src/nautilus-shell.h
Modified:
   trunk/ChangeLog
   trunk/configure.in
   trunk/libnautilus-private/nautilus-undo-manager.c
   trunk/libnautilus-private/nautilus-undo-manager.h
   trunk/libnautilus-private/nautilus-undo.c
   trunk/src/Makefile.am
   trunk/src/nautilus-application.c
   trunk/src/nautilus-application.h
   trunk/src/nautilus-desktop-window.c
   trunk/src/nautilus-location-dialog.c
   trunk/src/nautilus-main.c
   trunk/src/nautilus-window-bookmarks.c
   trunk/src/nautilus-window-private.h
   trunk/src/nautilus-window-slot.h

Modified: trunk/configure.in
==============================================================================
--- trunk/configure.in	(original)
+++ trunk/configure.in	Wed Oct  1 12:47:51 2008
@@ -2,19 +2,15 @@
 
 dnl ===========================================================================
 
-m4_define(bonobo_activation_minver,    2.1.0)
-m4_define(bonobo_minver,               2.1.0)
 m4_define(eel_minver,                  2.24.0)
 m4_define(glib_minver,                 2.17.5)
 m4_define(gnome_desktop_minver,        2.9.91)
 m4_define(gnome_minver,                2.14.0)
 m4_define(gnome_ui_minver,             2.6.0)
-m4_define(orbit_minver,                2.4.0)
 m4_define(pango_minver,                1.1.2)
 m4_define(gtk_minver,                  2.13.0)
 m4_define(rsvg_minver,                 2.0.1)
 m4_define(xml_minver,                  2.4.7)
-m4_define(startup_notification_minver, 0.8)
 m4_define(exif_minver,                 0.5.12)
 m4_define(beagle_minver,               0.2.4)
 m4_define(tracker_minver,              0.0.1)
@@ -39,19 +35,15 @@
 AM_MAINTAINER_MODE
 AC_SUBST([ACLOCAL_AMFLAGS], ["\${ACLOCAL_FLAGS}"])
 
-AC_SUBST(BONOBO_ACTIVATION_REQUIRED, [bonobo_activation_minver])
-AC_SUBST(BONOBO_REQUIRED, [bonobo_minver])
 AC_SUBST(EEL_REQUIRED, [eel_minver])
 AC_SUBST(GLIB_REQUIRED, [glib_minver])
 AC_SUBST(GNOME_DESKTOP_REQUIRED, [gnome_desktop_minver])
 AC_SUBST(GNOME_REQUIRED, [gnome_minver])
 AC_SUBST(GNOME_UI_REQUIRED, [gnome_ui_minver])
-AC_SUBST(ORBIT_REQUIRED, [orbit_minver])
 AC_SUBST(PANGO_REQUIRED, [pango_minver])
 AC_SUBST(GTK_REQUIRED, [gtk_minver])
 AC_SUBST(RSVG_REQUIRED, [rsvg_minver])
 AC_SUBST(XML_REQUIRED, [xml_minver])
-AC_SUBST(STARTUP_NOTIFICATION_REQUIRED, [startup_notification_minver])
 
 dnl We need to decrement current by one in the calculation of the age because
 dnl the library was started with version "1:0:0" instead of "0:0:0"
@@ -69,37 +61,19 @@
 AM_PROG_LIBTOOL
 AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
 
-if $PKG_CONFIG --atleast-version startup_notification_minver libstartup-notification-1.0; then
-  echo "Building with libstartup-notification"
-  AC_DEFINE(HAVE_STARTUP_NOTIFICATION, 1,
-            [define to enable startup notification support])
-  with_startup_notification=yes
-  STARTUP_NOTIFICATION_PACKAGE=libstartup-notification-1.0
-  EXTRA_CORE_MODULES="$EXTRA_CORE_MODULES libstartup-notification-1.0"
-else
-  echo "***** WARNING: Building without libstartup-notification"
-  with_startup_notification=no
-  STARTUP_NOTIFICATION_PACKAGE=
-fi
-
-AC_SUBST(STARTUP_NOTIFICATION_PACKAGE)
-
 PKG_CHECK_MODULES(ALL, [
-	bonobo-activation-2.0	>= bonobo_activation_minver
 	eel-2.0			>= eel_minver
 	glib-2.0		>= glib_minver
 	gnome-desktop-2.0	>= gnome_desktop_minver
 	gio-unix-2.0		
 	gio-2.0		
-	ORBit-2.0		>= orbit_minver
 	pango			>= pango_minver
 	gtk+-2.0		>= gtk_minver
-	libbonobo-2.0		>= bonobo_minver
 	libgnome-2.0		>= gnome_minver
 	libgnomeui-2.0		>= gnome_ui_minver
 	librsvg-2.0		>= rsvg_minver
 	libxml-2.0		>= xml_minver
-	$STARTUP_NOTIFICATION_PACKAGE
+	unique-1.0
 ])
 dnl ==========================================================================
 
@@ -142,11 +116,6 @@
 
 dnl ==========================================================================
 
-ORBIT_IDL="`$PKG_CONFIG --variable=orbit_idl ORBit-2.0`"
-AC_SUBST(ORBIT_IDL)
-
-dnl ==========================================================================
-
 AC_CHECK_HEADERS(sys/mount.h sys/vfs.h sys/param.h)
 			      
 dnl ==========================================================================
@@ -412,14 +381,12 @@
 LIBNAUTILUS_EXTENSION_LIBS="`$PKG_CONFIG --libs $LIBNAUTILUS_EXTENSION_MODULES`"
 AC_SUBST(LIBNAUTILUS_EXTENSION_LIBS)
 
-dnl core nautilus (must list bonobo-activation and libbonobo because idldir does not respect "requires")
-CORE_MODULES="glib-2.0 eel-2.0 librsvg-2.0 bonobo-activation-2.0 libbonobo-2.0 gnome-desktop-2.0 gio-2.0 gio-unix-2.0 $EXTRA_CORE_MODULES"
+dnl core nautilus
+CORE_MODULES="glib-2.0 eel-2.0 librsvg-2.0 gnome-desktop-2.0 gio-2.0 gio-unix-2.0 unique-1.0 $EXTRA_CORE_MODULES"
 CORE_CFLAGS="`$PKG_CONFIG --cflags $CORE_MODULES` $x_cflags $WARNING_CFLAGS"
 AC_SUBST(CORE_CFLAGS)
 CORE_LIBS="`$PKG_CONFIG --libs $CORE_MODULES` $x_libs"
 AC_SUBST(CORE_LIBS)
-CORE_IDL_INCLUDES="`$PKG_CONFIG --variable=idldir $CORE_MODULES | $srcdir/add-include-prefix`"
-AC_SUBST(CORE_IDL_INCLUDES)
 
 DISABLE_DEPRECATED_CFLAGS="-DG_DISABLE_DEPRECATED"
 
@@ -433,9 +400,6 @@
 dnl	-DGTK_DISABLE_DEPRECATED \
 dnl	-DGNOME_DISABLE_DEPRECATED"
 
-dnl FIXME: put this back once the registration_id stuff is cleared up.
-dnl	-DBONOBO_DISABLE_DEPRECATED
-
 AC_SUBST(DISABLE_DEPRECATED_CFLAGS)
 
 dnl libbackground

Modified: trunk/libnautilus-private/nautilus-undo-manager.c
==============================================================================
--- trunk/libnautilus-private/nautilus-undo-manager.c	(original)
+++ trunk/libnautilus-private/nautilus-undo-manager.c	Wed Oct  1 12:47:51 2008
@@ -29,7 +29,6 @@
 #include <eel/eel-gtk-macros.h>
 #include <eel/eel-gtk-extensions.h>
 #include <gtk/gtk.h>
-#include <bonobo/bonobo-main.h>
 #include "nautilus-undo-private.h"
 
 struct NautilusUndoManagerDetails {

Modified: trunk/libnautilus-private/nautilus-undo-manager.h
==============================================================================
--- trunk/libnautilus-private/nautilus-undo-manager.h	(original)
+++ trunk/libnautilus-private/nautilus-undo-manager.h	Wed Oct  1 12:47:51 2008
@@ -26,7 +26,6 @@
 #ifndef NAUTILUS_UNDO_MANAGER_H
 #define NAUTILUS_UNDO_MANAGER_H
 
-#include <bonobo/bonobo-object.h>
 #include <libnautilus-private/nautilus-undo.h>
 
 #define NAUTILUS_TYPE_UNDO_MANAGER \

Modified: trunk/libnautilus-private/nautilus-undo.c
==============================================================================
--- trunk/libnautilus-private/nautilus-undo.c	(original)
+++ trunk/libnautilus-private/nautilus-undo.c	Wed Oct  1 12:47:51 2008
@@ -141,7 +141,7 @@
 	GtkWindow *transient_parent;
 
 	if (start_object == NULL) {
-		return CORBA_OBJECT_NIL;
+		return NULL;
 	}
 
 	g_return_val_if_fail (G_IS_OBJECT (start_object), NULL);

Modified: trunk/src/Makefile.am
==============================================================================
--- trunk/src/Makefile.am	(original)
+++ trunk/src/Makefile.am	Wed Oct  1 12:47:51 2008
@@ -45,14 +45,7 @@
 schemedir = $(datadir)/applications
 scheme_DATA = network-scheme.desktop
 
-nautilus_shell_interface_idl_sources =		\
-	nautilus-shell-interface-stubs.c	\
-	nautilus-shell-interface-skels.c	\
-	nautilus-shell-interface.h		\
-	nautilus-shell-interface-common.c
-
 nautilus_SOURCES = \
-	$(nautilus_shell_interface_idl_sources)	\
 	ephy-spinner.h				\
 	ephy-spinner.c				\
 	nautilus-actions.h			\
@@ -110,8 +103,6 @@
 	nautilus-search-bar.h			\
 	nautilus-self-check-functions.c 	\
 	nautilus-self-check-functions.h 	\
-	nautilus-shell.c			\
-	nautilus-shell.h			\
 	nautilus-side-pane.c                    \
 	nautilus-side-pane.h			\
 	nautilus-sidebar-title.c		\
@@ -159,19 +150,8 @@
 	nautilus-location-entry.h		\
 	$(NULL)
 
-$(nautilus_shell_interface_idl_sources): nautilus_shell_interface_idl_stamp
-nautilus_shell_interface_idl_stamp: nautilus-shell-interface.idl $(ORBIT_IDL)
-	$(ORBIT_IDL) $(CORE_IDL_INCLUDES) -I$(top_srcdir) $<
-	touch $@
-
-$(nautilus_OBJECTS): nautilus_shell_interface_idl_stamp
-
 TESTS=check-nautilus
 
-serverdir = $(libdir)/bonobo/servers
-server_in_files = Nautilus_shell.server.in
-server_DATA = $(server_in_files:.server.in=.server)
-
 @INTLTOOL_SERVER_RULE@
 
 uidir = $(datadir)/nautilus/ui
@@ -188,8 +168,6 @@
 	$(NULL)
 
 CLEANFILES = \
-	$(nautilus_shell_interface_idl_sources)	\
-	nautilus_shell_interface_idl_stamp	\
 	$(desktop_files)			\
 	$(server_DATA)				\
 	$(NULL)
@@ -199,12 +177,10 @@
 	$(glade_DATA)				\
 	$(ui_DATA)				\
 	check-nautilus				\
-	nautilus-shell-interface.idl		\
 	$(desktop_in_files)			\
 	$(NULL)
 
 BUILT_SOURCES = \
-	$(nautilus_shell_interface_idl_sources) \
 	$(NULL)
 
 dist-hook:

Modified: trunk/src/nautilus-application.c
==============================================================================
--- trunk/src/nautilus-application.c	(original)
+++ trunk/src/nautilus-application.c	Wed Oct  1 12:47:51 2008
@@ -28,7 +28,6 @@
 #include <config.h>
 #include "nautilus-application.h"
 
-
 #include "file-manager/fm-desktop-icon-view.h"
 #include "file-manager/fm-icon-view.h"
 #include "file-manager/fm-list-view.h"
@@ -52,8 +51,6 @@
 #include "nautilus-navigation-window.h"
 #include "nautilus-window-slot.h"
 #include "nautilus-navigation-window-slot.h"
-#include "nautilus-shell-interface.h"
-#include "nautilus-shell.h"
 #include "nautilus-window-bookmarks.h"
 #include "libnautilus-private/nautilus-file-operations.h"
 #include "nautilus-window-private.h"
@@ -62,8 +59,6 @@
 #include <glib/gstdio.h>
 #include <glib/gi18n.h>
 #include <gio/gio.h>
-#include <bonobo/bonobo-main.h>
-#include <bonobo/bonobo-object.h>
 #include <eel/eel-gtk-extensions.h>
 #include <eel/eel-gtk-macros.h>
 #include <eel/eel-stock-dialogs.h>
@@ -81,22 +76,28 @@
 #include <libnautilus-private/nautilus-directory-private.h>
 #include <libnautilus-private/nautilus-signaller.h>
 #include <libnautilus-extension/nautilus-menu-provider.h>
-#include <bonobo-activation/bonobo-activation.h>
 #include <libnautilus-private/nautilus-autorun.h>
 
-#ifdef HAVE_STARTUP_NOTIFICATION
-#define SN_API_NOT_YET_FROZEN Yes_i_know_DO_IT
-#include <libsn/sn-launchee.h>
-#endif
+enum
+{
+  COMMAND_0, /* unused: 0 is an invalid command */
+
+  COMMAND_RESTART,
+  COMMAND_START_DESKTOP,
+  COMMAND_STOP_DESKTOP,
+  COMMAND_OPEN_BROWSER,
+  COMMAND_LOAD_SESSION
+};
 
 /* Needed for the is_kdesktop_present check */
 #include <gdk/gdkx.h>
 #include <X11/Xlib.h>
 
-#define FACTORY_IID	     "OAFIID:Nautilus_Factory"
-#define SEARCH_LIST_VIEW_IID "OAFIID:Nautilus_File_Manager_Search_List_View"
-#define SHELL_IID	     "OAFIID:Nautilus_Shell"
-#define TREE_VIEW_IID         "OAFIID:Nautilus_File_Manager_Tree_View"
+/* Keep window from shrinking down ridiculously small; numbers are somewhat arbitrary */
+#define APPLICATION_WINDOW_MIN_WIDTH	300
+#define APPLICATION_WINDOW_MIN_HEIGHT	100
+
+#define START_STATE_CONFIG "start-state"
 
 /* Keeps track of all the desktop windows. */
 static GList *nautilus_application_desktop_windows;
@@ -127,27 +128,94 @@
 static void     init_session                      (void);
 static gboolean is_kdesktop_present               (void);
 
-BONOBO_CLASS_BOILERPLATE (NautilusApplication, nautilus_application,
-			  BonoboGenericFactory, BONOBO_TYPE_GENERIC_FACTORY)
+G_DEFINE_TYPE (NautilusApplication, nautilus_application, G_TYPE_OBJECT);
+
+static gboolean
+_unique_message_data_set_geometry_and_uris (UniqueMessageData  *message_data,
+					    const char *geometry,
+					    char **uris)
+{
+  GString *list;
+  gint i;
+  gchar *result;
+  gsize length;
+
+  list = g_string_new (NULL);
+  if (geometry != NULL) {
+	  g_string_append (list, geometry);
+  }
+  g_string_append (list, "\r\n");
+  
+  for (i = 0; uris != NULL && uris[i]; i++) {
+	  g_string_append (list, uris[i]);
+	  g_string_append (list, "\r\n");
+  }
+
+  result = g_convert (list->str, list->len,
+                      "ASCII", "UTF-8",
+                      NULL, &length, NULL);
+  g_string_free (list, TRUE);
+  
+  if (result) {
+	  unique_message_data_set (message_data, (guchar *) result, length);
+	  g_free (result);
+	  return TRUE;
+  }
+  
+  return FALSE;
+}
 
-static CORBA_Object
-create_object (PortableServer_Servant servant,
-	       const CORBA_char *iid,
-	       CORBA_Environment *ev)
+static gchar **
+_unique_message_data_get_geometry_and_uris (UniqueMessageData *message_data,
+					    char **geometry)
 {
-	BonoboObject *object;
-	NautilusApplication *application;
+  gchar **result = NULL;
 
-	if (strcmp (iid, SHELL_IID) == 0) {
-		application = NAUTILUS_APPLICATION (bonobo_object_from_servant (servant));
-		object = BONOBO_OBJECT (nautilus_shell_new (application));
-	} else {
-		object = CORBA_OBJECT_NIL;
-	}
+  *geometry = NULL;
+  
+  gchar *text, *newline, *uris;
+  text = unique_message_data_get_text (message_data);
+  if (text) {
+	  newline = strchr (text, '\n');
+	  if (newline) {
+		  *geometry = g_strndup (text, newline-text);
+		  uris = newline+1;
+	  } else {
+		  uris = text;
+	  }
+	  
+	  result = g_uri_list_extract_uris (uris);
+	  g_free (text);
+  }
+  
+  return result;
+}
+
+/* This is a hack, because there is no unique_message_data_get()... */
 
-	return CORBA_Object_duplicate (BONOBO_OBJREF (object), ev);
+typedef struct {
+	guchar *data;
+	gint length;
+	
+	/* etc... */
+}  UniqueMessageDataInternal;
+
+static char *
+_unique_message_data_get_filename (UniqueMessageData *message_data)
+{
+	UniqueMessageDataInternal *internal;
+	internal = (UniqueMessageDataInternal *)message_data;
+	return g_strndup (internal->data, internal->length);
+}
+
+static void
+_unique_message_data_set_filename (UniqueMessageData *message_data,
+				   const char *filename)
+{
+	unique_message_data_set (message_data, filename, strlen (filename));
 }
 
+
 GList *
 nautilus_application_get_window_list (void)
 {
@@ -208,12 +276,18 @@
 }
 
 static void
-nautilus_application_instance_init (NautilusApplication *application)
+nautilus_application_init (NautilusApplication *application)
 {
 	/* Create an undo manager */
 	application->undo_manager = nautilus_undo_manager_new ();
 
-	application->shell = nautilus_shell_new (application);
+	application->unique_app = unique_app_new_with_commands ("org.gnome.Nautilus", NULL,
+								"restart", COMMAND_RESTART,
+								"start_desktop", COMMAND_START_DESKTOP,
+								"stop_desktop", COMMAND_STOP_DESKTOP,
+								"open_browser", COMMAND_OPEN_BROWSER,
+								"load_session", COMMAND_LOAD_SESSION,
+								NULL);
 	
 	/* register views */
 	fm_icon_view_register ();
@@ -239,19 +313,11 @@
 NautilusApplication *
 nautilus_application_new (void)
 {
-	NautilusApplication *application;
-
-	application = g_object_new (NAUTILUS_TYPE_APPLICATION, NULL);
-	
-	bonobo_generic_factory_construct_noreg (BONOBO_GENERIC_FACTORY (application),
-						FACTORY_IID,
-						NULL);
-	
-	return application;
+	return g_object_new (NAUTILUS_TYPE_APPLICATION, NULL);
 }
 
 static void
-nautilus_application_destroy (BonoboObject *object)
+nautilus_application_finalize (GObject *object)
 {
 	NautilusApplication *application;
 
@@ -265,18 +331,15 @@
 		g_object_unref (application->volume_monitor);
 		application->volume_monitor = NULL;
 	}
-	
-	if (application->shell_registered) {
-		bonobo_activation_unregister_active_server (SHELL_IID, BONOBO_OBJREF (application->shell));
-	}
-	bonobo_object_unref (application->shell);
+
+	g_object_unref (application->unique_app);
 
 	if (application->automount_idle_id != 0) {
 		g_source_remove (application->automount_idle_id);
 		application->automount_idle_id = 0;
 	}
 
-	EEL_CALL_PARENT (BONOBO_OBJECT_CLASS, destroy, (object));
+        G_OBJECT_CLASS (nautilus_application_parent_class)->finalize (object);
 }
 
 static gboolean
@@ -348,33 +411,6 @@
 	return ret;
 }
 
-static Nautilus_URIList *
-nautilus_make_uri_list_from_shell_strv (const char * const *strv)
-{
-	int length, i;
-	Nautilus_URIList *uri_list;
-	GFile *file;
-	char *translated_uri;
-
-	length = g_strv_length ((char **) strv);
-
-	uri_list = Nautilus_URIList__alloc ();
-	uri_list->_maximum = length;
-	uri_list->_length = length;
-	uri_list->_buffer = CORBA_sequence_Nautilus_URI_allocbuf (length);
-	for (i = 0; i < length; i++) {
-		file = g_file_new_for_commandline_arg (strv[i]);
-		translated_uri = g_file_get_uri (file);
-		g_object_unref (file);
-		uri_list->_buffer[i] = CORBA_string_dup (translated_uri);
-		g_free (translated_uri);
-		translated_uri = NULL;
-	}
-	CORBA_sequence_set_release (uri_list, CORBA_TRUE);
-
-	return uri_list;
-}
-
 static void
 menu_provider_items_updated_handler (NautilusMenuProvider *provider, GtkWidget* parent_window, gpointer data)
 {
@@ -514,21 +550,134 @@
 	g_free (desktop_dir);
 }
 
+static void
+open_window (NautilusApplication *application,
+	     const char *startup_id,
+	     const char *uri, const char *geometry, gboolean browser_window)
+{
+	GFile *location;
+	NautilusWindow *window;
 
-static Bonobo_RegistrationResult
-nautilus_bonobo_activation_register_for_display (const char    *iid,
-						 Bonobo_Unknown ref)
-{
-	const char *display_name;
-	GSList *reg_env ;
-	Bonobo_RegistrationResult result;
-	
-	display_name = gdk_display_get_name (gdk_display_get_default());
-	reg_env = bonobo_activation_registration_env_set (NULL,
-							  "DISPLAY", display_name);
-	result = bonobo_activation_register_active_server (iid, ref, reg_env);
-	bonobo_activation_registration_env_free (reg_env);
-	return result;
+	if (browser_window ||
+	    eel_preferences_get_boolean (NAUTILUS_PREFERENCES_ALWAYS_USE_BROWSER)) {
+		window = nautilus_application_create_navigation_window (application,
+									startup_id,
+									gdk_screen_get_default ());
+		if (uri == NULL) {
+			nautilus_window_go_home (window);
+		} else {
+			location = g_file_new_for_uri (uri);
+			nautilus_window_go_to (window, location);
+			g_object_unref (location);
+		}
+	} else {
+		if (uri == NULL) {
+			location = g_file_new_for_path (g_get_home_dir ());
+		} else {
+			location = g_file_new_for_uri (uri);
+		}
+		
+		window = nautilus_application_present_spatial_window (application,
+								      NULL,
+								      startup_id,
+								      location,
+								      gdk_screen_get_default ());
+		g_object_unref (location);
+	}
+	
+	if (geometry != NULL && !GTK_WIDGET_VISIBLE (window)) {
+		/* never maximize windows opened from shell if a
+		 * custom geometry has been requested.
+		 */
+		gtk_window_unmaximize (GTK_WINDOW (window));
+		eel_gtk_window_set_initial_geometry_from_string (GTK_WINDOW (window),
+								 geometry,
+								 APPLICATION_WINDOW_MIN_WIDTH,
+								 APPLICATION_WINDOW_MIN_HEIGHT,
+								 FALSE);
+	}
+}
+
+static void
+open_windows (NautilusApplication *application,
+	      const char *startup_id,
+	      char **uris,
+	      const char *geometry,
+	      gboolean browser_window)
+{
+	guint i;
+
+	if (uris == NULL || uris[0] == NULL) {
+		/* Open a window pointing at the default location. */
+		open_window (application, startup_id, NULL, geometry, browser_window);
+	} else {
+		/* Open windows at each requested location. */
+		for (i = 0; uris[i] != NULL; i++) {
+			open_window (application, startup_id, uris[i], geometry, browser_window);
+		}
+	}
+}
+
+static UniqueResponse
+message_received_cb (UniqueApp         *unique_app,
+                     UniqueCommand      command,
+                     UniqueMessageData *message,
+                     guint              time_,
+                     gpointer           user_data)
+{
+	NautilusApplication *application;
+	UniqueResponse res;
+	char *filename;
+	char **uris;
+	char *geometry;
+	
+	application =  user_data;
+	res = UNIQUE_RESPONSE_OK;
+	
+	switch (command) {
+	case UNIQUE_CLOSE:
+		res = UNIQUE_RESPONSE_OK;
+		nautilus_main_event_loop_quit (TRUE);
+		
+		break;
+	case COMMAND_RESTART:
+		filename = nautilus_application_save_session_to_file ();
+		if (filename != NULL) {
+			nautilus_main_event_loop_quit (TRUE);
+			g_setenv ("_NAUTILUS_RESTART_SESSION_FILENAME", filename, 1);
+			g_free (filename);
+		} else {
+			g_message ("Could not save session. Not restarting.");
+		}
+		break;
+	case UNIQUE_OPEN:
+	case COMMAND_OPEN_BROWSER:
+		uris = _unique_message_data_get_geometry_and_uris (message, &geometry);
+		open_windows (application,
+			      unique_message_data_get_startup_id (message),
+			      uris,
+			      geometry,
+			      command == COMMAND_OPEN_BROWSER);
+		g_strfreev (uris);
+		g_free (geometry);
+		break;
+	case COMMAND_START_DESKTOP:
+		nautilus_application_open_desktop (application);
+		break;
+	case COMMAND_STOP_DESKTOP:
+		nautilus_application_close_desktop ();
+		break;
+	case COMMAND_LOAD_SESSION:
+		filename = _unique_message_data_get_filename (message);
+		nautilus_application_load_session (application, filename);
+		g_free (filename);
+		break;
+	default:
+		res = UNIQUE_RESPONSE_PASSTHROUGH;
+		break;
+	}
+	
+	return res;
 }
 
 void
@@ -538,23 +687,12 @@
 			      gboolean no_default_window,
 			      gboolean no_desktop,
 			      gboolean browser_window,
-			      const char *startup_id,
 			      const char *geometry,
 			      const char *session_to_load,
-			      const char *urls[])
+			      char **urls)
 {
-	CORBA_Environment ev;
-	Nautilus_Shell shell;
-	Bonobo_RegistrationResult result;
-	const char *message, *detailed_message;
-	GtkDialog *dialog;
-	Nautilus_URIList *url_list;
-	const CORBA_char *corba_startup_id;
-	const CORBA_char *corba_geometry;
-	int num_failures;
-
-	num_failures = 0;
-
+	UniqueMessageData *message;
+	
 	/* Check the user's ~/.nautilus directories and post warnings
 	 * if there are problems.
 	 */
@@ -564,120 +702,18 @@
 
 	initialize_kde_trash_hack ();
 
-	CORBA_exception_init (&ev);
-
-	/* Start up the factory. */
-	while (TRUE) {
-		/* Try to register the file manager view factory. */
-		result = nautilus_bonobo_activation_register_for_display
-			(SHELL_IID, BONOBO_OBJREF (application->shell));
-
-		switch (result) {
-		case Bonobo_ACTIVATION_REG_SUCCESS:
-			/* We are registered and all is right with the world. */
-			application->shell_registered = TRUE;
-			finish_startup (application);
-			message = NULL;
-			detailed_message = NULL;
-			break;
-		case Bonobo_ACTIVATION_REG_ALREADY_ACTIVE:
-			/* Another copy of nautilus already is running and registered. */
-			message = NULL;
-			detailed_message = NULL;
-			break;
-		case Bonobo_ACTIVATION_REG_NOT_LISTED:
-			/* Can't register myself due to trouble locating the
-			 * Nautilus_Shell.server file. This has happened when you
-			 * launch Nautilus with an LD_LIBRARY_PATH that
-			 * doesn't include the directory containing the oaf
-			 * library. It could also happen if the
-			 * Nautilus_Shell.server file was not present for some
-			 * reason. Sometimes killing oafd and gconfd fixes
-			 * this problem but we don't exactly understand why,
-			 * since neither of the above causes explain it.
-			 */
-			message = _("Nautilus cannot be used now. "
-				    "Running the command \"bonobo-slay\""
-				    " from the console may fix the problem. If not,"
-				    " you can try rebooting the computer or"
-				    " installing Nautilus again.");
-			/* FIXME bugzilla.gnome.org 42536: The guesses and stuff here are lame. */
-			detailed_message = _("Nautilus cannot be used now. "
-					     "Running the command \"bonobo-slay\" "
-					     "from the console may fix the problem. If not, "
-					     "you can try rebooting the computer or "
-					     "installing Nautilus again.\n\n"
-					     "Bonobo could not locate the Nautilus_shell.server file. "
-					     "One cause of this seems to be an LD_LIBRARY_PATH "
-					     "that does not include the bonobo-activation library's directory. "
-					     "Another possible cause would be bad install "
-					     "with a missing Nautilus_Shell.server file.\n\n"
-					     "Running \"bonobo-slay\" will kill all "
-					     "Bonobo Activation and GConf processes, which may be needed by "
-					     "other applications.\n\n"
-					     "Sometimes killing bonobo-activation-server and gconfd fixes "
-					     "the problem, but we do not know why.\n\n"
-					     "We have also seen this error when a faulty "
-					     "version of bonobo-activation was installed.");
-			break;
-		default:
-			/* This should never happen. */
-			g_warning ("bad error code from bonobo_activation_active_server_register");
-		case Bonobo_ACTIVATION_REG_ERROR:
-			/* Some misc. error (can never happen with current
-			 * version of bonobo-activation). Show dialog and terminate the
-			 * program.
-			 */
-			/* FIXME bugzilla.gnome.org 42537: Looks like this does happen with the
-			 * current OAF. I guess I read the code wrong. Need to figure out when and make a
-			 * good message.
-			 */
-			message = _("Nautilus cannot be used now, due to an unexpected error.");
-			detailed_message = _("Nautilus cannot be used now, due to an unexpected error "
-					     "from Bonobo when attempting to register the file manager view server.");
-			break;
-		}
-
-		/* Get the shell object. */
-		if (message == NULL) {
-			shell = bonobo_activation_activate_from_id (SHELL_IID, Bonobo_ACTIVATION_FLAG_EXISTING_ONLY, NULL, NULL);
-			if (!CORBA_Object_is_nil (shell, &ev)) {
-				break;
-			}
-
-			/* If we couldn't find ourselves it's a bad problem so
-			 * we better stop looping.
-			 */
-			if (result == Bonobo_ACTIVATION_REG_SUCCESS) {
-				/* FIXME bugzilla.gnome.org 42538: When can this happen? */
-				message = _("Nautilus cannot be used now, due to an unexpected error.");
-				detailed_message = _("Nautilus cannot be used now, due to an unexpected error "
-						     "from Bonobo when attempting to locate the factory. "
-						     "Killing bonobo-activation-server and restarting Nautilus may help fix the problem.");
-			} else {
-				num_failures++;
-				if (num_failures > 20) {
-					message = _("Nautilus cannot be used now, due to an unexpected error.");
-					detailed_message = _("Nautilus cannot be used now, due to an unexpected error "
-							     "from Bonobo when attempting to locate the shell object. "
-							     "Killing bonobo-activation-server and restarting Nautilus may help fix the problem.");
-					
-				}
-			}
-		}
-
-		if (message != NULL) {
-			dialog = eel_show_error_dialog_with_details (message, NULL, detailed_message, NULL);
-			/* We need the main event loop so the user has a chance to see the dialog. */
-			nautilus_main_event_loop_register (GTK_OBJECT (dialog));
-			goto out;
-		}
-	}
-
 	if (kill_shell) {
-		Nautilus_Shell_quit (shell, &ev);
+		if (unique_app_is_running (application->unique_app)) {
+			unique_app_send_message (application->unique_app,
+						 UNIQUE_CLOSE, NULL);
+			
+		}
 	} else if (restart_shell) {
-		Nautilus_Shell_restart (shell, &ev);
+		if (unique_app_is_running (application->unique_app)) {
+			unique_app_send_message (application->unique_app,
+						 COMMAND_RESTART, NULL);
+			
+		}
 	} else {
 		/* If KDE desktop is running, then force no_desktop */
 		if (is_kdesktop_present ()) {
@@ -685,7 +721,17 @@
 		}
 		
 		if (!no_desktop && eel_preferences_get_boolean (NAUTILUS_PREFERENCES_SHOW_DESKTOP)) {
-			Nautilus_Shell_start_desktop (shell, &ev);
+			if (unique_app_is_running (application->unique_app)) {
+				unique_app_send_message (application->unique_app,
+							 COMMAND_START_DESKTOP, NULL);
+			} else {
+				nautilus_application_open_desktop (application);
+			}
+		}
+
+		if (!unique_app_is_running (application->unique_app)) {
+			finish_startup (application);
+			g_signal_connect (application->unique_app, "message-received", G_CALLBACK (message_received_cb), application);			
 		}
 		
 		/* Monitor the preference to show or hide the desktop */
@@ -701,31 +747,46 @@
 							  NULL,
 							  G_OBJECT (application));
 
-		/* CORBA C mapping doesn't allow NULL to be passed
-		   for string parameters */
-		corba_geometry   = (geometry   != NULL) ? geometry   : "";
-		corba_startup_id = (startup_id != NULL) ? startup_id : "";
-
 	  	/* Create the other windows. */
-		if (urls != NULL) {
-			url_list = nautilus_make_uri_list_from_shell_strv (urls);
-			Nautilus_Shell_open_windows (shell, url_list, corba_startup_id, corba_geometry, browser_window, &ev);
-			CORBA_free (url_list);
-		} else if (!no_default_window) {
-			g_assert (session_to_load == NULL);
-			Nautilus_Shell_open_default_window (shell, corba_startup_id, corba_geometry, browser_window, &ev);
+		if (urls != NULL || !no_default_window) {
+			if (urls == NULL) {
+				g_assert (session_to_load == NULL);
+			}
+
+			if (unique_app_is_running (application->unique_app)) {
+				message = unique_message_data_new ();
+				_unique_message_data_set_geometry_and_uris (message, geometry, urls);
+				if (browser_window) {
+					unique_app_send_message (application->unique_app,
+								 COMMAND_OPEN_BROWSER, message);
+				} else {
+					unique_app_send_message (application->unique_app,
+								 UNIQUE_OPEN, message);
+				}
+				unique_message_data_free (message);				
+			} else {
+				open_windows (application, NULL,
+					      urls,
+					      geometry,
+					      browser_window);
+			}
 		}
 
 		if (session_to_load != NULL) {
-			Nautilus_Shell_load_session (shell, session_to_load, &ev);
+			if (unique_app_is_running (application->unique_app)) {
+				message = unique_message_data_new ();
+				_unique_message_data_set_filename (message, session_to_load);
+				unique_app_send_message (application->unique_app,
+							 COMMAND_LOAD_SESSION, message);
+				unique_message_data_free (message);				
+			} else {
+				nautilus_application_load_session (application, session_to_load);
+			}
 		}
 		
 		/* Add ourselves to the session */
 		init_session ();
 	}
-
- out:
-	CORBA_exception_free (&ev);
 }
 
 
@@ -1031,6 +1092,11 @@
 	/* Must be called after construction finished */
 	nautilus_window_constructed (window);
 
+	unique_app_watch_window (application->unique_app, GTK_WINDOW (window));
+	if (startup_id) {
+		gtk_window_set_startup_id (GTK_WINDOW (window), startup_id);
+	}
+	
 	g_signal_connect_data (window, "delete_event",
 			       G_CALLBACK (nautilus_window_delete_event_callback), NULL, NULL,
 			       G_CONNECT_AFTER);
@@ -1070,83 +1136,6 @@
 									   screen);
 }
 
-#ifdef HAVE_STARTUP_NOTIFICATION
-
-static void
-sn_error_trap_push (SnDisplay *display,
-                    Display   *xdisplay)
-{
-	gdk_error_trap_push ();
-}
-
-static void
-sn_error_trap_pop (SnDisplay *display,
-                   Display   *xdisplay)
-{
-	gdk_error_trap_pop ();
-}
-
-static void
-end_startup_notification (GtkWidget  *widget, 
-			  const char *startup_id)
-{
-	SnDisplay *sn_display;
-	SnLauncheeContext *context;
-	GdkDisplay *display;
-	GdkScreen  *screen;
-
-	if (startup_id == NULL) {
-		return;
-	}
-  
-	if (!GTK_WIDGET_REALIZED (widget)) {
-		gtk_widget_realize (widget);
-	}
-  
-	context = NULL;
-	sn_display = NULL;
-
-	/* Set up window for launch notification */
-	/* FIXME In principle all transient children of this
-	 * window should get the same startup_id
-	 */
-
-	screen = gtk_widget_get_screen (widget);
-	display = gdk_screen_get_display (screen);
-      
-	sn_display = sn_display_new (gdk_x11_display_get_xdisplay (display),
-				     sn_error_trap_push,
-				     sn_error_trap_pop);
-      
-	context = sn_launchee_context_new (sn_display,
-					   gdk_screen_get_number (screen),
-					   startup_id);
-
-	/* Handle the setup for the window if the startup_id is valid;
-	 * I don't think it can hurt to do this even if it was
-	 * invalid, but why do the extra work...
-	 */
-	if (strncmp (sn_launchee_context_get_startup_id (context), "_TIME", 5) != 0) {
-		sn_launchee_context_setup_window (context,
-						  GDK_WINDOW_XWINDOW (widget->window));
-	}
-
-	/* Now, set the _NET_WM_USER_TIME for the new window to the timestamp
-	 * that caused the window to be launched.
-	 */
-	if (sn_launchee_context_get_id_has_timestamp (context)) {
-		gulong startup_id_timestamp;
-		startup_id_timestamp = sn_launchee_context_get_timestamp (context);
-		gdk_x11_window_set_user_time (widget->window, startup_id_timestamp);
-	}
-  
-	sn_launchee_context_complete (context);
-	sn_launchee_context_unref (context);
-	sn_display_unref (sn_display);
-}
-
-#endif
-
 NautilusWindow *
 nautilus_application_present_spatial_window_with_selection (NautilusApplication *application,
 							    NautilusWindow      *requesting_window,
@@ -1176,11 +1165,6 @@
 		}
 		
 		if (g_file_equal (existing_location, location)) {
-#ifdef HAVE_STARTUP_NOTIFICATION
-			end_startup_notification (GTK_WIDGET (existing_window),
-						  startup_id);
-#endif
-
 			gtk_window_present (GTK_WINDOW (existing_window));
 			if (new_selection &&
 			    slot->content_view != NULL) {
@@ -1197,10 +1181,6 @@
 	}
 
 	window = create_window (application, NAUTILUS_TYPE_SPATIAL_WINDOW, startup_id, screen);
-#ifdef HAVE_STARTUP_NOTIFICATION
-	end_startup_notification (GTK_WIDGET (window),
-				  startup_id);
-#endif
 	if (requesting_window) {
 		/* Center the window over the requesting window by default */
 		int orig_x, orig_y, orig_width, orig_height;
@@ -1267,10 +1247,6 @@
 	g_return_val_if_fail (NAUTILUS_IS_APPLICATION (application), NULL);
 	
 	window = create_window (application, NAUTILUS_TYPE_NAVIGATION_WINDOW, startup_id, screen);
-#ifdef HAVE_STARTUP_NOTIFICATION
-	end_startup_notification (GTK_WIDGET (window),
-				  startup_id);
-#endif
 
 	maximized = eel_preferences_get_boolean
 			(NAUTILUS_PREFERENCES_NAVIGATION_WINDOW_MAXIMIZED);
@@ -2131,6 +2107,8 @@
 static void
 nautilus_application_class_init (NautilusApplicationClass *class)
 {
-	BONOBO_OBJECT_CLASS (class)->destroy = nautilus_application_destroy;
-	BONOBO_GENERIC_FACTORY_CLASS (class)->epv.createObject = create_object;
+        GObjectClass *object_class;
+
+        object_class = G_OBJECT_CLASS (class);
+        object_class->finalize = nautilus_application_finalize;
 }

Modified: trunk/src/nautilus-application.h
==============================================================================
--- trunk/src/nautilus-application.h	(original)
+++ trunk/src/nautilus-application.h	Wed Oct  1 12:47:51 2008
@@ -29,7 +29,7 @@
 
 #include <gdk/gdk.h>
 #include <gio/gio.h>
-#include <bonobo/bonobo-generic-factory.h>
+#include <unique/unique.h>
 #include <libnautilus-private/nautilus-undo-manager.h>
 
 #define NAUTILUS_DESKTOP_ICON_VIEW_IID	"OAFIID:Nautilus_File_Manager_Desktop_Icon_View"
@@ -53,16 +53,15 @@
 typedef struct NautilusShell NautilusShell;
 
 typedef struct {
-	BonoboGenericFactory parent;
+	GObject parent;
+	UniqueApp *unique_app;
 	NautilusUndoManager *undo_manager;
-	NautilusShell *shell;
-	gboolean shell_registered;
 	GVolumeMonitor *volume_monitor;
 	unsigned int automount_idle_id;
 } NautilusApplication;
 
 typedef struct {
-	BonoboGenericFactoryClass parent_class;
+	GObjectClass parent_class;
 } NautilusApplicationClass;
 
 GType                nautilus_application_get_type          (void);
@@ -73,10 +72,9 @@
 							     gboolean             no_default_window,
 							     gboolean             no_desktop,
 							     gboolean             browser_window,
-							     const char          *startup_id,
 							     const char          *default_geometry,
 							     const char          *session_to_load,
-							     const char          *urls[]);
+							     char               **urls);
 GList *              nautilus_application_get_window_list           (void);
 GList *              nautilus_application_get_spatial_window_list    (void);
 unsigned int         nautilus_application_get_n_windows            (void);

Modified: trunk/src/nautilus-desktop-window.c
==============================================================================
--- trunk/src/nautilus-desktop-window.c	(original)
+++ trunk/src/nautilus-desktop-window.c	Wed Oct  1 12:47:51 2008
@@ -36,6 +36,7 @@
 #include <libnautilus-private/nautilus-file-utilities.h>
 #include <libnautilus-private/nautilus-icon-names.h>
 #include <gio/gio.h>
+#include <glib/gi18n.h>
 
 struct NautilusDesktopWindowDetails {
 	int dummy;

Modified: trunk/src/nautilus-location-dialog.c
==============================================================================
--- trunk/src/nautilus-location-dialog.c	(original)
+++ trunk/src/nautilus-location-dialog.c	Wed Oct  1 12:47:51 2008
@@ -31,6 +31,7 @@
 #include <libnautilus-private/nautilus-file-utilities.h>
 #include "nautilus-location-entry.h"
 #include "nautilus-desktop-window.h"
+#include <glib/gi18n.h>
 
 struct _NautilusLocationDialogDetails {
 	GtkWidget *entry;

Modified: trunk/src/nautilus-main.c
==============================================================================
--- trunk/src/nautilus-main.c	(original)
+++ trunk/src/nautilus-main.c	Wed Oct  1 12:47:51 2008
@@ -34,8 +34,6 @@
 #include "nautilus-application.h"
 #include "nautilus-self-check-functions.h"
 #include "nautilus-window.h"
-#include <bonobo-activation/bonobo-activation.h>
-#include <bonobo/bonobo-main.h>
 #include <dlfcn.h>
 #include <signal.h>
 #include <eel/eel-debug.h>
@@ -113,15 +111,6 @@
 	}
 }
 
-static gboolean
-initial_event_loop_needed (gpointer data)
-{
-	if (!is_event_loop_needed ()) {
-		eel_gtk_main_quit_all ();
-	}
-	return FALSE;
-}
-
 void
 nautilus_main_event_loop_register (GtkObject *object)
 {
@@ -149,59 +138,6 @@
 	}
 }
 
-/* Copied from libnautilus/nautilus-program-choosing.c; In this case,
- * though, it's really needed because we have no real alternative when
- * no DESKTOP_STARTUP_ID (with its accompanying timestamp) is
- * provided...
- */
-static Time
-slowly_and_stupidly_obtain_timestamp (Display *xdisplay)
-{
-	Window xwindow;
-	XEvent event;
-	
-	{
-		XSetWindowAttributes attrs;
-		Atom atom_name;
-		Atom atom_type;
-		char* name;
-		
-		attrs.override_redirect = True;
-		attrs.event_mask = PropertyChangeMask | StructureNotifyMask;
-		
-		xwindow =
-			XCreateWindow (xdisplay,
-				       RootWindow (xdisplay, 0),
-				       -100, -100, 1, 1,
-				       0,
-				       CopyFromParent,
-				       CopyFromParent,
-				       (Visual *)CopyFromParent,
-				       CWOverrideRedirect | CWEventMask,
-				       &attrs);
-		
-		atom_name = XInternAtom (xdisplay, "WM_NAME", TRUE);
-		g_assert (atom_name != None);
-		atom_type = XInternAtom (xdisplay, "STRING", TRUE);
-		g_assert (atom_type != None);
-		
-		name = "Fake Window";
-		XChangeProperty (xdisplay, 
-				 xwindow, atom_name,
-				 atom_type,
-				 8, PropModeReplace, name, strlen (name));
-	}
-	
-	XWindowEvent (xdisplay,
-		      xwindow,
-		      PropertyChangeMask,
-		      &event);
-	
-	XDestroyWindow(xdisplay, xwindow);
-	
-	return event.xproperty.time;
-}
-
 static void
 dump_debug_log (void)
 {
@@ -372,8 +308,7 @@
 	gboolean no_desktop;
 	gboolean autostart_mode;
 	gboolean has_sm_argv;
-	const char *startup_id, *autostart_id;
-	char *startup_id_copy;
+	const char *autostart_id;
 	char *session_to_load;
 	gchar *geometry;
 	const gchar **remaining;
@@ -383,6 +318,11 @@
 	NautilusApplication *application;
 	char **argv_copy;
 	GnomeProgram *program;
+	GFile *file;
+	char *uri;
+	char **uris;
+	GPtrArray *uris_array;
+	int i;
 	
 	const GOptionEntry options[] = {
 #ifndef NAUTILUS_OMIT_SELF_CHECK
@@ -425,14 +365,6 @@
 	bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
 	textdomain (GETTEXT_PACKAGE);
 
-	startup_id = g_getenv ("DESKTOP_STARTUP_ID");
-	startup_id_copy = NULL;
-	if (startup_id != NULL && *startup_id != '\0') {
-		/* Clear the DESKTOP_STARTUP_ID, but make sure to copy it first */
-		startup_id_copy = g_strdup (startup_id);
-		g_unsetenv ("DESKTOP_STARTUP_ID");
-	}
-
 	autostart_mode = FALSE;
 
 	autostart_id = g_getenv ("DESKTOP_AUTOSTART_ID");
@@ -448,9 +380,6 @@
 		}
 	}
 
-	/* we'll do it ourselves due to complicated factory setup */
-	gtk_window_set_auto_startup_notification (FALSE);
-
 	/* Get parameters. */
 	remaining = NULL;
 	geometry = NULL;
@@ -496,24 +425,9 @@
 		no_desktop = FALSE;
 	}
 
-	/* Do this here so that gdk_display is initialized */
-	if (startup_id_copy == NULL) {
-		/* Create a fake one containing a timestamp that we can use */
-		Time timestamp;
-		timestamp = slowly_and_stupidly_obtain_timestamp (gdk_display);
-		startup_id_copy = g_strdup_printf ("_TIME%lu",
-						   timestamp);
-	}
-
         /* Set default icon for all nautilus windows */
 	gtk_window_set_default_icon_name (NAUTILUS_ICON_FOLDER);
 	
-	/* Need to set this to the canonical DISPLAY value, since
-	   thats where we're registering per-display components */
-	bonobo_activation_set_activation_env_value ("DISPLAY",
-						    gdk_display_get_name (gdk_display_get_default()));
-	
-
 	if (perform_self_check && remaining != NULL) {
 		/* translators: %s is an option (e.g. --check) */
 		fprintf (stderr, _("nautilus: %s cannot be used with URIs.\n"),
@@ -559,10 +473,8 @@
 		no_default_window = TRUE;
 	}
 	
-	bonobo_activate (); /* do now since we need it before main loop */
-
 	application = NULL;
- 
+
 	/* Do either the self-check or the real work. */
 	if (perform_self_check) {
 #ifndef NAUTILUS_OMIT_SELF_CHECK
@@ -577,29 +489,44 @@
 		eel_exit_if_self_checks_failed ();
 #endif
 	} else {
+		/* Convert args to URIs */
+		uris = NULL;
+		if (remaining != NULL) {
+			uris_array = g_ptr_array_new ();
+			for (i = 0; remaining[i] != NULL; i++) {
+				file = g_file_new_for_commandline_arg (remaining[i]);
+				if (file != NULL) {
+					uri = g_file_get_uri (file);
+					g_object_unref (file);
+					if (uri) {
+						g_ptr_array_add (uris_array, uri);
+					}
+				}
+			}
+			uris = (char **)g_ptr_array_free (uris_array, FALSE);
+		}
+
+		
 		/* Run the nautilus application. */
 		application = nautilus_application_new ();
 		nautilus_application_startup
 			(application,
 			 kill_shell, restart_shell, no_default_window, no_desktop,
 			 browser_window,
-			 startup_id_copy,
 			 geometry,
 			 session_to_load,
-			 remaining);
-		g_free (startup_id_copy);
+			 uris);
+		g_strfreev (uris);
 
-		/* The application startup does things in an idle, so
-		   we need to check whether the main loop is needed in an idle
-		*/
-		g_idle_add (initial_event_loop_needed, NULL);
-		gtk_main ();
+		if (is_event_loop_needed ()) {
+			gtk_main ();
+		}
 	}
 
 	nautilus_icon_info_clear_caches ();
 	
 	if (application != NULL) {
-		bonobo_object_unref (application);
+		g_object_unref (application);
 	}
 
  	eel_debug_shut_down ();

Modified: trunk/src/nautilus-window-bookmarks.c
==============================================================================
--- trunk/src/nautilus-window-bookmarks.c	(original)
+++ trunk/src/nautilus-window-bookmarks.c	Wed Oct  1 12:47:51 2008
@@ -38,6 +38,7 @@
 #include <eel/eel-stock-dialogs.h>
 #include <eel/eel-vfs-extensions.h>
 #include <eel/eel-gtk-extensions.h>
+#include <glib/gi18n.h>
 
 #define MENU_ITEM_MAX_WIDTH_CHARS 32
 

Modified: trunk/src/nautilus-window-private.h
==============================================================================
--- trunk/src/nautilus-window-private.h	(original)
+++ trunk/src/nautilus-window-private.h	Wed Oct  1 12:47:51 2008
@@ -33,9 +33,6 @@
 #include "nautilus-spatial-window.h"
 #include "nautilus-navigation-window.h"
 
-#include <bonobo/bonobo-ui-component.h>
-#include <bonobo/bonobo-ui-container.h>
-#include <bonobo/bonobo-ui-toolbar-button-item.h>
 #include <libnautilus-private/nautilus-directory.h>
 
 /* FIXME bugzilla.gnome.org 42575: Migrate more fields into here. */

Modified: trunk/src/nautilus-window-slot.h
==============================================================================
--- trunk/src/nautilus-window-slot.h	(original)
+++ trunk/src/nautilus-window-slot.h	Wed Oct  1 12:47:51 2008
@@ -27,6 +27,7 @@
 
 #include "nautilus-window.h"
 #include "nautilus-query-editor.h"
+#include <glib/gi18n.h>
 
 #define NAUTILUS_TYPE_WINDOW_SLOT	 (nautilus_window_slot_get_type())
 #define NAUTILUS_WINDOW_SLOT_CLASS(k)     (G_TYPE_CHECK_CLASS_CAST((k), NAUTILUS_TYPE_WINDOW_SLOT, NautilusWindowSlotClass))



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]