summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog35
-rw-r--r--configure.in42
-rw-r--r--libnautilus-private/nautilus-undo-manager.c1
-rw-r--r--libnautilus-private/nautilus-undo-manager.h1
-rw-r--r--libnautilus-private/nautilus-undo.c2
-rw-r--r--src/Makefile.am24
-rw-r--r--src/nautilus-application.c620
-rw-r--r--src/nautilus-application.h12
-rw-r--r--src/nautilus-desktop-window.c1
-rw-r--r--src/nautilus-location-dialog.c1
-rw-r--r--src/nautilus-main.c137
-rw-r--r--src/nautilus-shell-interface.idl24
-rw-r--r--src/nautilus-shell.c372
-rw-r--r--src/nautilus-shell.h55
-rw-r--r--src/nautilus-window-bookmarks.c1
-rw-r--r--src/nautilus-window-private.h3
-rw-r--r--src/nautilus-window-slot.h1
17 files changed, 379 insertions, 953 deletions
diff --git a/ChangeLog b/ChangeLog
index 7acc6a427..e1453a65c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,40 @@
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
+
+2008-10-01 Alexander Larsson <alexl@redhat.com>
+
* configure.in:
Bump version to 2.25.1.
Stable version lives on the gnome-2-24 branch.
diff --git a/configure.in b/configure.in
index 7bfe9effd..4f2b88a67 100644
--- a/configure.in
+++ b/configure.in
@@ -2,19 +2,15 @@ AC_PREREQ(2.54)
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_INIT_AUTOMAKE([1.9 tar-ustar])
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 @@ AC_LIBTOOL_WIN32_DLL
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 @@ AC_PATH_PROG(GLIB_GENMARSHAL, glib-genmarshal)
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 @@ AC_SUBST(LIBNAUTILUS_EXTENSION_CFLAGS)
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 -DGDK_PIXBUF_DISABLE_DEPRECATED \
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
diff --git a/libnautilus-private/nautilus-undo-manager.c b/libnautilus-private/nautilus-undo-manager.c
index 2d415256a..ec773d995 100644
--- a/libnautilus-private/nautilus-undo-manager.c
+++ b/libnautilus-private/nautilus-undo-manager.c
@@ -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 {
diff --git a/libnautilus-private/nautilus-undo-manager.h b/libnautilus-private/nautilus-undo-manager.h
index 0e8b9ac38..3bea1a512 100644
--- a/libnautilus-private/nautilus-undo-manager.h
+++ b/libnautilus-private/nautilus-undo-manager.h
@@ -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 \
diff --git a/libnautilus-private/nautilus-undo.c b/libnautilus-private/nautilus-undo.c
index 302abc3ee..1fe7dad3f 100644
--- a/libnautilus-private/nautilus-undo.c
+++ b/libnautilus-private/nautilus-undo.c
@@ -141,7 +141,7 @@ nautilus_undo_get_undo_manager (GObject *start_object)
GtkWindow *transient_parent;
if (start_object == NULL) {
- return CORBA_OBJECT_NIL;
+ return NULL;
}
g_return_val_if_fail (G_IS_OBJECT (start_object), NULL);
diff --git a/src/Makefile.am b/src/Makefile.am
index 86b16562e..92ffed941 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -45,14 +45,7 @@ desktopdir = $(datadir)/gnome/network/
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_SOURCES = \
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_connect_server_SOURCES= \
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 @@ glade_DATA = \
$(NULL)
CLEANFILES = \
- $(nautilus_shell_interface_idl_sources) \
- nautilus_shell_interface_idl_stamp \
$(desktop_files) \
$(server_DATA) \
$(NULL)
@@ -199,12 +177,10 @@ EXTRA_DIST = \
$(glade_DATA) \
$(ui_DATA) \
check-nautilus \
- nautilus-shell-interface.idl \
$(desktop_in_files) \
$(NULL)
BUILT_SOURCES = \
- $(nautilus_shell_interface_idl_sources) \
$(NULL)
dist-hook:
diff --git a/src/nautilus-application.c b/src/nautilus-application.c
index 890a79101..9274d281c 100644
--- a/src/nautilus-application.c
+++ b/src/nautilus-application.c
@@ -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 update_session (gpointer cal
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()... */
+
+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);
+}
- return CORBA_Object_duplicate (BONOBO_OBJREF (object), ev);
+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 @@ automount_all_volumes (NautilusApplication *application)
}
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 @@ nautilus_application_instance_init (NautilusApplication *application)
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 @@ nautilus_application_destroy (BonoboObject *object)
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 @@ check_required_directories (NautilusApplication *application)
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 @@ initialize_kde_trash_hack (void)
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;
+
+ 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;
-static Bonobo_RegistrationResult
-nautilus_bonobo_activation_register_for_display (const char *iid,
- Bonobo_Unknown ref)
+ 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)
{
- const char *display_name;
- GSList *reg_env ;
- Bonobo_RegistrationResult result;
+ NautilusApplication *application;
+ UniqueResponse res;
+ char *filename;
+ char **uris;
+ char *geometry;
- 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;
+ 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 @@ nautilus_application_startup (NautilusApplication *application,
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 @@ nautilus_application_startup (NautilusApplication *application,
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 @@ nautilus_application_startup (NautilusApplication *application,
}
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 @@ nautilus_application_startup (NautilusApplication *application,
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 @@ create_window (NautilusApplication *application,
/* 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 @@ nautilus_application_present_spatial_window (NautilusApplication *application,
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 @@ nautilus_application_present_spatial_window_with_selection (NautilusApplication
}
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 @@ nautilus_application_present_spatial_window_with_selection (NautilusApplication
}
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 @@ nautilus_application_create_navigation_window (NautilusApplication *application,
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 @@ is_kdesktop_present (void)
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;
}
diff --git a/src/nautilus-application.h b/src/nautilus-application.h
index 29e7edd6d..72de3c965 100644
--- a/src/nautilus-application.h
+++ b/src/nautilus-application.h
@@ -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 _NautilusSpatialWindow NautilusSpatialWindow;
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 @@ void nautilus_application_startup (NautilusApplication
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);
diff --git a/src/nautilus-desktop-window.c b/src/nautilus-desktop-window.c
index 6871bde59..181a45693 100644
--- a/src/nautilus-desktop-window.c
+++ b/src/nautilus-desktop-window.c
@@ -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;
diff --git a/src/nautilus-location-dialog.c b/src/nautilus-location-dialog.c
index 6bb809128..f6c50b535 100644
--- a/src/nautilus-location-dialog.c
+++ b/src/nautilus-location-dialog.c
@@ -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;
diff --git a/src/nautilus-main.c b/src/nautilus-main.c
index c78fa648b..ee64c5136 100644
--- a/src/nautilus-main.c
+++ b/src/nautilus-main.c
@@ -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 @@ event_loop_unregister (GtkObject *object)
}
}
-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 @@ nautilus_main_event_loop_quit (gboolean explicit)
}
}
-/* 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 @@ main (int argc, char *argv[])
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 @@ main (int argc, char *argv[])
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 @@ main (int argc, char *argv[])
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 @@ main (int argc, char *argv[])
}
}
- /* 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 @@ main (int argc, char *argv[])
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 @@ main (int argc, char *argv[])
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 @@ main (int argc, char *argv[])
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);
-
- /* 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 ();
+ uris);
+ g_strfreev (uris);
+
+ 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 ();
diff --git a/src/nautilus-shell-interface.idl b/src/nautilus-shell-interface.idl
deleted file mode 100644
index d71cad412..000000000
--- a/src/nautilus-shell-interface.idl
+++ /dev/null
@@ -1,24 +0,0 @@
-/* -*- Mode: IDL; tab-width: 8; indent-tabs-mode: 8; c-basic-offset: 8 -*- */
-
-#ifndef NAUTILUS_SHELL_INTERFACE_IDL
-#define NAUTILUS_SHELL_INTERFACE_IDL
-
-#include <Bonobo.idl>
-
-module Nautilus {
- typedef string URI;
- typedef sequence<URI> URIList;
-
- interface Shell : ::Bonobo::Unknown {
- void open_windows (in URIList uris, in string startup_id, in string geometry, in boolean browser_window);
- void open_default_window (in string startup_id, in string geometry, in boolean browser_window);
- void start_desktop ();
- void stop_desktop ();
- void quit ();
- void restart ();
- void load_session (in string filename);
- };
-
-};
-
-#endif /* NAUTILUS_SHELL_INTERFACE_IDL */
diff --git a/src/nautilus-shell.c b/src/nautilus-shell.c
deleted file mode 100644
index 9c2afdd8b..000000000
--- a/src/nautilus-shell.c
+++ /dev/null
@@ -1,372 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-
-/*
- * Nautilus
- *
- * Copyright (C) 2000 Eazel, Inc.
- *
- * Nautilus is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * Nautilus is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/* nautilus-shell.h: Server side of the Nautilus:Shell CORBA object
- * that represents the shell across processes.
- */
-
-#include <config.h>
-#include "nautilus-shell.h"
-
-#include "nautilus-desktop-window.h"
-#include "nautilus-main.h"
-#include "nautilus-window-private.h"
-#include <eel/eel-glib-extensions.h>
-#include <eel/eel-gtk-extensions.h>
-#include <eel/eel-gtk-macros.h>
-#include <eel/eel-stock-dialogs.h>
-#include <eel/eel-string.h>
-#include <gtk/gtk.h>
-#include <glib/gi18n.h>
-#include <libgnomeui/gnome-stock-icons.h>
-#include <libgnomeui/gnome-uidefs.h>
-#include <libnautilus-private/nautilus-file-utilities.h>
-#include <libnautilus-private/nautilus-global-preferences.h>
-#include <stdlib.h>
-
-/* 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"
-
-struct NautilusShellDetails {
- NautilusApplication *application;
-};
-
-static void finalize (GObject *shell);
-static void corba_open_windows (PortableServer_Servant servant,
- const Nautilus_URIList *list,
- const CORBA_char *startup_id,
- const CORBA_char *geometry,
- CORBA_boolean browser_window,
- CORBA_Environment *ev);
-static void corba_open_default_window (PortableServer_Servant servant,
- const CORBA_char *startup_id,
- const CORBA_char *geometry,
- CORBA_boolean browser_window,
- CORBA_Environment *ev);
-static void corba_load_session (PortableServer_Servant servant,
- const CORBA_char *filename,
- CORBA_Environment *ev);
-static void corba_start_desktop (PortableServer_Servant servant,
- CORBA_Environment *ev);
-static void corba_stop_desktop (PortableServer_Servant servant,
- CORBA_Environment *ev);
-static void corba_quit (PortableServer_Servant servant,
- CORBA_Environment *ev);
-static void corba_restart (PortableServer_Servant servant,
- CORBA_Environment *ev);
-
-BONOBO_CLASS_BOILERPLATE_FULL (NautilusShell, nautilus_shell,
- Nautilus_Shell,
- BonoboObject, BONOBO_OBJECT_TYPE)
-
-static void
-nautilus_shell_class_init (NautilusShellClass *klass)
-{
- G_OBJECT_CLASS (klass)->finalize = finalize;
-
- klass->epv.open_windows = corba_open_windows;
- klass->epv.open_default_window = corba_open_default_window;
- klass->epv.load_session = corba_load_session;
- klass->epv.start_desktop = corba_start_desktop;
- klass->epv.stop_desktop = corba_stop_desktop;
- klass->epv.quit = corba_quit;
- klass->epv.restart = corba_restart;
-}
-
-static void
-nautilus_shell_instance_init (NautilusShell *shell)
-{
- shell->details = g_new0 (NautilusShellDetails, 1);
-}
-
-static void
-finalize (GObject *object)
-{
- NautilusShell *shell;
-
- shell = NAUTILUS_SHELL (object);
- g_free (shell->details);
-
- EEL_CALL_PARENT (G_OBJECT_CLASS, finalize, (object));
-}
-
-NautilusShell *
-nautilus_shell_new (NautilusApplication *application)
-{
- NautilusShell *shell;
-
- shell = NAUTILUS_SHELL (g_object_new (NAUTILUS_TYPE_SHELL, NULL));
- shell->details->application = application;
- return shell;
-}
-
-static void
-open_window (NautilusShell *shell, const char *uri, const char *startup_id,
- const char *geometry, gboolean browser_window)
-{
- GFile *location;
- NautilusWindow *window;
-
- if (browser_window ||
- eel_preferences_get_boolean (NAUTILUS_PREFERENCES_ALWAYS_USE_BROWSER)) {
- window = nautilus_application_create_navigation_window (shell->details->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 (shell->details->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);
- }
-}
-
-typedef struct {
- NautilusShell *shell;
- char *startup_id;
- char *geometry;
- GList *uris;
- gboolean browser_window;
-} OpenWindowData;
-
-static gboolean
-open_windows_at_idle (gpointer _data)
-{
- OpenWindowData *data = _data;
- char *uri;
- GList *l;
-
- if (data->uris == NULL) {
- /* Open a window pointing at the default location. */
- open_window (data->shell, NULL, data->startup_id,
- data->geometry, data->browser_window);
- } else {
- /* Open windows at each requested location. */
- for (l = data->uris; l != NULL; l = l->next) {
- uri = (char *)l->data;
- open_window (data->shell, uri, data->startup_id,
- data->geometry, data->browser_window);
- g_free (uri);
- }
- }
-
- g_free (data->startup_id);
- g_free (data->geometry);
- g_list_free (data->uris);
- g_free (data);
- return FALSE;
-}
-
-static void
-corba_open_windows (PortableServer_Servant servant,
- const Nautilus_URIList *list,
- const CORBA_char *startup_id,
- const CORBA_char *geometry,
- CORBA_boolean browser_window,
- CORBA_Environment *ev)
-{
- OpenWindowData *data;
- guint i;
-
- data = g_new0 (OpenWindowData, 1);
-
- data->shell = NAUTILUS_SHELL (bonobo_object_from_servant (servant));
- data->startup_id = strcmp (startup_id, "") ? g_strdup (startup_id) : NULL;
- data->geometry = strcmp (geometry, "") ? g_strdup (geometry) : NULL;
- data->browser_window = browser_window;
-
- for (i = 0; i < list->_length; i++) {
- g_assert (list->_buffer[i] != NULL);
- data->uris = g_list_prepend (data->uris,
- g_strdup (list->_buffer[i]));
- }
- data->uris = g_list_reverse (data->uris);
-
- g_idle_add (open_windows_at_idle, data);
-
-}
-
-static void
-corba_open_default_window (PortableServer_Servant servant,
- const CORBA_char *startup_id,
- const CORBA_char *geometry,
- CORBA_boolean browser_window,
- CORBA_Environment *ev)
-{
- OpenWindowData *data;
-
- data = g_new0 (OpenWindowData, 1);
-
- data->shell = NAUTILUS_SHELL (bonobo_object_from_servant (servant));
- data->startup_id = strcmp (startup_id, "") ? g_strdup (startup_id) : NULL;
- data->geometry = strcmp (geometry, "") ? g_strdup (geometry) : NULL;
- data->browser_window = browser_window;
-
- g_idle_add (open_windows_at_idle, data);
-}
-
-typedef struct {
- NautilusShell *shell;
- char *filename;
-} LoadSessionData;
-
-static gboolean
-load_session_at_idle (gpointer _data)
-{
- NautilusApplication *application;
- LoadSessionData *data = _data;
-
- application = NAUTILUS_APPLICATION (data->shell->details->application);
- nautilus_application_load_session (application, data->filename);
-
- g_free (data->filename);
- g_free (data);
- return FALSE;
-}
-
-static void
-corba_load_session (PortableServer_Servant servant,
- const CORBA_char *filename,
- CORBA_Environment *ev)
-{
- LoadSessionData *data;
-
- data = g_new0 (LoadSessionData, 1);
- data->shell = NAUTILUS_SHELL (bonobo_object_from_servant (servant));
- data->filename = g_strdup (filename);
-
- g_idle_add (load_session_at_idle, data);
-}
-
-typedef struct {
- NautilusShell *shell;
-} StartDesktopData;
-
-static gboolean
-start_desktop_at_idle (gpointer _data)
-{
- StartDesktopData *data = _data;
- NautilusApplication *application;
-
- application = NAUTILUS_APPLICATION (data->shell->details->application);
- nautilus_application_open_desktop (application);
-
- g_free (data);
- return FALSE;
-}
-
-
-static void
-corba_start_desktop (PortableServer_Servant servant,
- CORBA_Environment *ev)
-{
- StartDesktopData *data;
-
- data = g_new0 (StartDesktopData, 1);
- data->shell = NAUTILUS_SHELL (bonobo_object_from_servant (servant));
-
- g_idle_add (start_desktop_at_idle, data);
-}
-
-static gboolean
-stop_desktop_at_idle (gpointer data)
-{
- nautilus_application_close_desktop ();
- return FALSE;
-}
-
-static void
-corba_stop_desktop (PortableServer_Servant servant,
- CORBA_Environment *ev)
-{
- g_idle_add (stop_desktop_at_idle, NULL);
-}
-
-static gboolean
-quit_at_idle (gpointer data)
-{
- nautilus_main_event_loop_quit (TRUE);
- return FALSE;
-}
-
-
-static void
-corba_quit (PortableServer_Servant servant,
- CORBA_Environment *ev)
-{
- g_idle_add (quit_at_idle, NULL);
-}
-
-static gboolean
-restart_at_idle (gpointer data)
-{
- char *filename;
-
- 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.");
- }
-
-
- return FALSE;
-}
-
-static void
-corba_restart (PortableServer_Servant servant,
- CORBA_Environment *ev)
-{
- g_idle_add (restart_at_idle, NULL);
-}
diff --git a/src/nautilus-shell.h b/src/nautilus-shell.h
deleted file mode 100644
index 50750c162..000000000
--- a/src/nautilus-shell.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-
-/*
- * Nautilus
- *
- * Copyright (C) 2000 Eazel, Inc.
- *
- * Nautilus is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of the
- * License, or (at your option) any later version.
- *
- * Nautilus is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this program; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-/* nautilus-shell.h: Server side of Nautilus:Shell CORBA object that
- * represents the shell across processes.
- */
-
-#ifndef NAUTILUS_SHELL_H
-#define NAUTILUS_SHELL_H
-
-#include "nautilus-application.h"
-#include "nautilus-shell-interface.h"
-
-#define NAUTILUS_TYPE_SHELL (nautilus_shell_get_type ())
-#define NAUTILUS_SHELL(obj) (GTK_CHECK_CAST ((obj), NAUTILUS_TYPE_SHELL, NautilusShell))
-#define NAUTILUS_SHELL_CLASS(klass) (GTK_CHECK_CLASS_CAST ((klass), NAUTILUS_TYPE_SHELL, NautilusShellClass))
-#define NAUTILUS_IS_SHELL(obj) (GTK_CHECK_TYPE ((obj), NAUTILUS_TYPE_SHELL))
-#define NAUTILUS_IS_SHELL_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), NAUTILUS_TYPE_SHELL))
-
-typedef struct NautilusShellDetails NautilusShellDetails;
-
-struct NautilusShell {
- BonoboObject parent_slot;
- NautilusShellDetails *details;
-};
-
-typedef struct {
- BonoboObjectClass parent_slot;
- POA_Nautilus_Shell__epv epv;
-} NautilusShellClass;
-
-GType nautilus_shell_get_type (void);
-NautilusShell *nautilus_shell_new (NautilusApplication *application);
-
-#endif /* NAUTILUS_SHELL_H */
diff --git a/src/nautilus-window-bookmarks.c b/src/nautilus-window-bookmarks.c
index 8252f4384..6e2ee3783 100644
--- a/src/nautilus-window-bookmarks.c
+++ b/src/nautilus-window-bookmarks.c
@@ -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
diff --git a/src/nautilus-window-private.h b/src/nautilus-window-private.h
index e1f54c829..84a5608f4 100644
--- a/src/nautilus-window-private.h
+++ b/src/nautilus-window-private.h
@@ -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. */
diff --git a/src/nautilus-window-slot.h b/src/nautilus-window-slot.h
index 392cac847..bec96928c 100644
--- a/src/nautilus-window-slot.h
+++ b/src/nautilus-window-slot.h
@@ -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))