[nautilus/refactor: 3/26] Rework architecture of NautilusWindow/NautilusWindowSlotInfo



commit ff5c759b3784db2d0cd71e1cde613dda007c3985
Author: Cosimo Cecchi <cosimoc gnome org>
Date:   Tue Dec 21 18:17:52 2010 +0100

    Rework architecture of NautilusWindow/NautilusWindowSlotInfo
    
    In the past, nautilus was designed keeping in mind the concept that it
    might not just be a file browser, but a sort of platform to embed
    various kind of views in it.
      - libnautilus-private: general lowlevel items, such as the icon
        container, NautilusFile, I/O and so on
      - src: general widgets and UI items
      - src/file-manager: file manager views, agnostic of what's in src/,
        for the sake of being pluggable enough
    
    This is really not applicable anymore, as nautilus won't go in any
    direction other than being a file manager; at the same time, this
    complicates code and architecture quite a lot.
    
    In this commit, as a first step towards a more clean codebase, we remove
    the NautilusWindowInfo and NautilusWindowSlotInfo interfaces, using
    NautilusWindow and NautilusWindowSlot directly.
    
    Note that there should be no actual code changes, only moving of pieces
    around.

 libnautilus-private/Makefile.am                    |    6 -
 libnautilus-private/nautilus-dnd.c                 |    2 -
 libnautilus-private/nautilus-dnd.h                 |    1 -
 libnautilus-private/nautilus-window-info.c         |  287 --------------------
 libnautilus-private/nautilus-window-info.h         |  184 -------------
 libnautilus-private/nautilus-window-slot-info.c    |  157 -----------
 libnautilus-private/nautilus-window-slot-info.h    |  106 -------
 src/Makefile.am                                    |    2 +
 src/file-manager/fm-desktop-icon-view.c            |    5 +-
 src/file-manager/fm-directory-view.c               |  116 ++++----
 src/file-manager/fm-directory-view.h               |   12 +-
 src/file-manager/fm-icon-view.c                    |   21 +-
 src/file-manager/fm-list-view.c                    |   11 +-
 src/nautilus-application.h                         |    7 +-
 src/nautilus-bookmarks-window.c                    |    3 +-
 src/nautilus-connect-server-dialog-main.c          |    1 -
 src/nautilus-connect-server-dialog-nonmain.c       |    6 +-
 src/nautilus-connect-server-dialog.c               |    9 +-
 src/nautilus-connect-server-dialog.h               |    2 +-
 src/nautilus-location-bar.c                        |    4 +-
 src/nautilus-mime-actions.c                        |   53 ++--
 src/nautilus-mime-actions.h                        |    8 +-
 src/nautilus-navigation-window-menus.c             |   20 +-
 src/nautilus-navigation-window-pane.c              |    6 +-
 src/nautilus-navigation-window-slot.c              |    1 -
 src/nautilus-navigation-window.c                   |    8 +-
 src/nautilus-places-sidebar.c                      |   76 +++---
 src/nautilus-places-sidebar.h                      |    6 +-
 src/nautilus-query-editor.h                        |    7 +-
 src/nautilus-spatial-window.c                      |   16 +-
 src/nautilus-trash-bar.c                           |    4 +-
 src/nautilus-tree-sidebar.c                        |   43 ++--
 src/nautilus-tree-sidebar.h                        |    4 +-
 src/nautilus-view-as-action.c                      |    6 +-
 .../nautilus-view-factory.c                        |    2 +-
 .../nautilus-view-factory.h                        |    7 +-
 src/nautilus-window-manage-views.c                 |   18 +-
 src/nautilus-window-manage-views.h                 |    5 -
 src/nautilus-window-menus.c                        |   12 +-
 src/nautilus-window-private.h                      |    2 +
 src/nautilus-window-slot-dnd.c                     |   20 +-
 src/nautilus-window-slot.c                         |  122 +++------
 src/nautilus-window-slot.h                         |    5 +
 src/nautilus-window.c                              |  146 ++++-------
 src/nautilus-window.h                              |   74 ++++-
 45 files changed, 412 insertions(+), 1201 deletions(-)
---
diff --git a/libnautilus-private/Makefile.am b/libnautilus-private/Makefile.am
index 88c628a..fbc4338 100644
--- a/libnautilus-private/Makefile.am
+++ b/libnautilus-private/Makefile.am
@@ -171,14 +171,8 @@ libnautilus_private_la_SOURCES = \
 	nautilus-vfs-directory.h \
 	nautilus-vfs-file.c \
 	nautilus-vfs-file.h \
-	nautilus-view-factory.c \
-	nautilus-view-factory.h \
 	nautilus-view.c \
 	nautilus-view.h \
-	nautilus-window-info.c \
-	nautilus-window-info.h \
-	nautilus-window-slot-info.c \
-	nautilus-window-slot-info.h \
 	$(NULL)
 
 nodist_libnautilus_private_la_SOURCES =\
diff --git a/libnautilus-private/nautilus-dnd.c b/libnautilus-private/nautilus-dnd.c
index 592c438..91e0e47 100644
--- a/libnautilus-private/nautilus-dnd.c
+++ b/libnautilus-private/nautilus-dnd.c
@@ -29,8 +29,6 @@
 
 #include "nautilus-program-choosing.h"
 #include "nautilus-link.h"
-#include "nautilus-window-slot-info.h"
-#include "nautilus-window-info.h"
 #include "nautilus-view.h"
 #include <eel/eel-glib-extensions.h>
 #include <eel/eel-gtk-extensions.h>
diff --git a/libnautilus-private/nautilus-dnd.h b/libnautilus-private/nautilus-dnd.h
index 35e7a9e..0c45b88 100644
--- a/libnautilus-private/nautilus-dnd.h
+++ b/libnautilus-private/nautilus-dnd.h
@@ -28,7 +28,6 @@
 #define NAUTILUS_DND_H
 
 #include <gtk/gtk.h>
-#include <libnautilus-private/nautilus-window-slot-info.h>
 
 /* Drag & Drop target names. */
 #define NAUTILUS_ICON_DND_GNOME_ICON_LIST_TYPE	"x-special/gnome-icon-list"
diff --git a/src/Makefile.am b/src/Makefile.am
index aac8971..d522f60 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -121,6 +121,8 @@ nautilus_SOURCES = \
 	nautilus-trash-bar.h			\
 	nautilus-view-as-action.c		\
 	nautilus-view-as-action.h		\
+	nautilus-view-factory.c 		\
+	nautilus-view-factory.h 		\
 	nautilus-window-bookmarks.c		\
 	nautilus-window-bookmarks.h		\
 	nautilus-window-manage-views.c		\
diff --git a/src/file-manager/fm-desktop-icon-view.c b/src/file-manager/fm-desktop-icon-view.c
index 8d96f3a..6a4fb4e 100644
--- a/src/file-manager/fm-desktop-icon-view.c
+++ b/src/file-manager/fm-desktop-icon-view.c
@@ -25,9 +25,11 @@
 */
 
 #include <config.h>
+
 #include "fm-icon-container.h"
 #include "fm-desktop-icon-view.h"
 #include "fm-actions.h"
+#include "nautilus-view-factory.h"
 
 #include <X11/Xatom.h>
 #include <gtk/gtk.h>
@@ -45,7 +47,6 @@
 #include <libnautilus-private/nautilus-file-utilities.h>
 #include <libnautilus-private/nautilus-ui-utilities.h>
 #include <libnautilus-private/nautilus-global-preferences.h>
-#include <libnautilus-private/nautilus-view-factory.h>
 #include <libnautilus-private/nautilus-link.h>
 #include <libnautilus-private/nautilus-metadata.h>
 #include <libnautilus-private/nautilus-monitor.h>
@@ -849,7 +850,7 @@ real_supports_zooming (FMDirectoryView *view)
 }
 
 static NautilusView *
-fm_desktop_icon_view_create (NautilusWindowSlotInfo *slot)
+fm_desktop_icon_view_create (NautilusWindowSlot *slot)
 {
 	FMIconView *view;
 
diff --git a/src/file-manager/fm-directory-view.c b/src/file-manager/fm-directory-view.c
index 9c6e050..df871cc 100644
--- a/src/file-manager/fm-directory-view.c
+++ b/src/file-manager/fm-directory-view.c
@@ -156,8 +156,8 @@ static int scripts_directory_uri_length;
 
 struct FMDirectoryViewDetails
 {
-	NautilusWindowInfo *window;
-	NautilusWindowSlotInfo *slot;
+	NautilusWindow *window;
+	NautilusWindowSlot *slot;
 	NautilusDirectory *model;
 	NautilusFile *directory_as_file;
 	NautilusFile *location_popup_directory_as_file;
@@ -572,7 +572,7 @@ create_templates_parameters_free (CreateTemplateParameters *parameters)
 	g_free (parameters);
 }			      
 
-NautilusWindowInfo *
+NautilusWindow *
 fm_directory_view_get_nautilus_window (FMDirectoryView  *view)
 {
 	g_assert (view->details->window != NULL);
@@ -580,7 +580,7 @@ fm_directory_view_get_nautilus_window (FMDirectoryView  *view)
 	return view->details->window;
 }
 
-NautilusWindowSlotInfo *
+NautilusWindowSlot *
 fm_directory_view_get_nautilus_window_slot (FMDirectoryView  *view)
 {
 	g_assert (view->details->slot != NULL);
@@ -853,8 +853,8 @@ open_location (FMDirectoryView *directory_view,
 	window = fm_directory_view_get_containing_window (directory_view);
 	DEBUG ("open_location window=%p: %s", window, new_uri);
 	location = g_file_new_for_uri (new_uri);
-	nautilus_window_slot_info_open_location (directory_view->details->slot,
-						 location, mode, flags, NULL);
+	nautilus_window_slot_open_location_full (directory_view->details->slot,
+						 location, mode, flags, NULL, NULL, NULL);
 	g_object_unref (location);
 }
 
@@ -2017,7 +2017,7 @@ real_unmerge_menus (FMDirectoryView *view)
 		return;
 	}
 
-	ui_manager = nautilus_window_info_get_ui_manager (view->details->window);
+	ui_manager = nautilus_window_get_ui_manager (view->details->window);
 
 	nautilus_ui_unmerge_ui (ui_manager,
 				&view->details->dir_merge_id,
@@ -2370,7 +2370,7 @@ fm_directory_view_display_selection_info (FMDirectoryView *view)
 	g_free (folder_item_count_str);
 	g_free (non_folder_str);
 
-	nautilus_window_slot_info_set_status (view->details->slot,
+	nautilus_window_slot_set_status (view->details->slot,
 					      status_string);
 	g_free (status_string);
 }
@@ -2378,7 +2378,7 @@ fm_directory_view_display_selection_info (FMDirectoryView *view)
 void
 fm_directory_view_send_selection_change (FMDirectoryView *view)
 {
-	nautilus_window_info_report_selection_changed (view->details->window);
+	nautilus_window_report_selection_changed (view->details->window);
 
 	view->details->send_selection_change_to_shell = FALSE;
 }
@@ -2439,11 +2439,11 @@ done_loading (FMDirectoryView *view,
 	}
 
 	/* This can be called during destruction, in which case there
-	 * is no NautilusWindowInfo any more.
+	 * is no NautilusWindow any more.
 	 */
 	if (view->details->window != NULL) {
 		if (all_files_seen) {
-			nautilus_window_info_report_load_complete (view->details->window, NAUTILUS_VIEW (view));
+			nautilus_window_report_load_complete (view->details->window, NAUTILUS_VIEW (view));
 		}
 
 		schedule_update_menus (view);
@@ -3582,7 +3582,7 @@ fm_directory_view_get_ui_manager (FMDirectoryView  *view)
 	if (view->details->window == NULL) {
 		return NULL;
 	}
-	return nautilus_window_info_get_ui_manager (view->details->window);	
+	return nautilus_window_get_ui_manager (view->details->window);	
 }
 
 /**
@@ -4376,7 +4376,7 @@ add_application_to_open_with_menu (FMDirectoryView *view,
 				     action);
 	g_object_unref (action);
 	
-	gtk_ui_manager_add_ui (nautilus_window_info_get_ui_manager (view->details->window),
+	gtk_ui_manager_add_ui (nautilus_window_get_ui_manager (view->details->window),
 			       view->details->open_with_merge_id,
 			       menu_placeholder,
 			       action_name,
@@ -4386,12 +4386,12 @@ add_application_to_open_with_menu (FMDirectoryView *view,
 
 	path = g_strdup_printf ("%s/%s", menu_placeholder, action_name);
 	menuitem = gtk_ui_manager_get_widget (
-			nautilus_window_info_get_ui_manager (view->details->window),
+			nautilus_window_get_ui_manager (view->details->window),
 			path);
 	gtk_image_menu_item_set_always_show_image (GTK_IMAGE_MENU_ITEM (menuitem), TRUE);
 	g_free (path);
 
-	gtk_ui_manager_add_ui (nautilus_window_info_get_ui_manager (view->details->window),
+	gtk_ui_manager_add_ui (nautilus_window_get_ui_manager (view->details->window),
 			       view->details->open_with_merge_id,
 			       popup_placeholder,
 			       action_name,
@@ -4401,7 +4401,7 @@ add_application_to_open_with_menu (FMDirectoryView *view,
 
 	path = g_strdup_printf ("%s/%s", popup_placeholder, action_name);
 	menuitem = gtk_ui_manager_get_widget (
-			nautilus_window_info_get_ui_manager (view->details->window),
+			nautilus_window_get_ui_manager (view->details->window),
 			path);
 	gtk_image_menu_item_set_always_show_image (GTK_IMAGE_MENU_ITEM (menuitem), TRUE);
 
@@ -4477,7 +4477,7 @@ reset_open_with_menu (FMDirectoryView *view, GList *selection)
 
 	/* Clear any previous inserted items in the applications and viewers placeholders */
 
-	ui_manager = nautilus_window_info_get_ui_manager (view->details->window);
+	ui_manager = nautilus_window_get_ui_manager (view->details->window);
 	nautilus_ui_unmerge_ui (ui_manager,
 				&view->details->open_with_merge_id,
 				&view->details->open_with_action_group);
@@ -4543,7 +4543,7 @@ reset_open_with_menu (FMDirectoryView *view, GList *selection)
 			popup_path = FM_DIRECTORY_VIEW_POPUP_PATH_APPLICATIONS_PLACEHOLDER;
 		}
 
-		gtk_ui_manager_add_ui (nautilus_window_info_get_ui_manager (view->details->window),
+		gtk_ui_manager_add_ui (nautilus_window_get_ui_manager (view->details->window),
 				       view->details->open_with_merge_id,
 				       menu_path,
 				       "separator",
@@ -4796,7 +4796,7 @@ add_extension_menu_items (FMDirectoryView *view,
 	GtkUIManager *ui_manager;
 	GList *l;
 
-	ui_manager = nautilus_window_info_get_ui_manager (view->details->window);
+	ui_manager = nautilus_window_get_ui_manager (view->details->window);
 	
 	for (l = menu_items; l; l = l->next) {
 		NautilusMenuItem *item;
@@ -4856,7 +4856,7 @@ reset_extension_actions_menu (FMDirectoryView *view, GList *selection)
 	GtkUIManager *ui_manager;
 	
 	/* Clear any previous inserted items in the extension actions placeholder */
-	ui_manager = nautilus_window_info_get_ui_manager (view->details->window);
+	ui_manager = nautilus_window_get_ui_manager (view->details->window);
 
 	nautilus_ui_unmerge_ui (ui_manager,
 				&view->details->extensions_menu_merge_id,
@@ -5032,12 +5032,12 @@ get_strings_for_environment_variables (FMDirectoryView *view, GList *selected_fi
 static FMDirectoryView *
 get_directory_view_of_extra_pane (FMDirectoryView *view)
 {
-	NautilusWindowSlotInfo *slot;
+	NautilusWindowSlot *slot;
 	NautilusView *next_view;
 
-	slot = nautilus_window_info_get_extra_slot (fm_directory_view_get_nautilus_window (view));
+	slot = nautilus_window_get_extra_slot (fm_directory_view_get_nautilus_window (view));
 	if (slot != NULL) {
-		next_view = nautilus_window_slot_info_get_current_view (slot);
+		next_view = nautilus_window_slot_get_current_view (slot);
 
 		if (FM_IS_DIRECTORY_VIEW (next_view)) {
 			return FM_DIRECTORY_VIEW (next_view);
@@ -5211,7 +5211,7 @@ add_script_to_scripts_menus (FMDirectoryView *directory_view,
 						action, NULL);
 	g_object_unref (action);
 
-	ui_manager = nautilus_window_info_get_ui_manager (directory_view->details->window);
+	ui_manager = nautilus_window_get_ui_manager (directory_view->details->window);
 
 	gtk_ui_manager_add_ui (ui_manager,
 			       directory_view->details->scripts_merge_id,
@@ -5256,7 +5256,7 @@ add_submenu_to_directory_menus (FMDirectoryView *directory_view,
 	char *uri;
 	GtkUIManager *ui_manager;
 
-	ui_manager = nautilus_window_info_get_ui_manager (directory_view->details->window);
+	ui_manager = nautilus_window_get_ui_manager (directory_view->details->window);
 	uri = nautilus_file_get_uri (file);
 	name = nautilus_file_get_display_name (file);
 	pixbuf = get_menu_icon_for_file (file);
@@ -5374,7 +5374,7 @@ update_scripts_menu (FMDirectoryView *view)
 	   occur before we finish. */
 	view->details->scripts_invalid = FALSE;
 
-	ui_manager = nautilus_window_info_get_ui_manager (view->details->window);
+	ui_manager = nautilus_window_get_ui_manager (view->details->window);
 	nautilus_ui_unmerge_ui (ui_manager,
 				&view->details->scripts_merge_id,
 				&view->details->scripts_action_group);
@@ -5462,7 +5462,7 @@ add_template_to_templates_menus (FMDirectoryView *directory_view,
 				     action);
 	g_object_unref (action);
 
-	ui_manager = nautilus_window_info_get_ui_manager (directory_view->details->window);
+	ui_manager = nautilus_window_get_ui_manager (directory_view->details->window);
 
 	gtk_ui_manager_add_ui (ui_manager,
 			       directory_view->details->templates_merge_id,
@@ -5637,7 +5637,7 @@ update_templates_menu (FMDirectoryView *view)
 	   occur before we finish. */
 	view->details->templates_invalid = FALSE;
 
-	ui_manager = nautilus_window_info_get_ui_manager (view->details->window);
+	ui_manager = nautilus_window_get_ui_manager (view->details->window);
 	nautilus_ui_unmerge_ui (ui_manager,
 				&view->details->templates_merge_id,
 				&view->details->templates_action_group);
@@ -5712,7 +5712,7 @@ create_popup_menu (FMDirectoryView *view, const char *popup_path)
 {
 	GtkWidget *menu;
 	
-	menu = gtk_ui_manager_get_widget (nautilus_window_info_get_ui_manager (view->details->window),
+	menu = gtk_ui_manager_get_widget (nautilus_window_get_ui_manager (view->details->window),
 					  popup_path);
 	gtk_menu_set_screen (GTK_MENU (menu),
 			     gtk_widget_get_screen (GTK_WIDGET (view)));
@@ -5783,7 +5783,7 @@ copy_or_cut_files (FMDirectoryView *view,
 		}
 	}
 
-	nautilus_window_slot_info_set_status (view->details->slot,
+	nautilus_window_slot_set_status (view->details->slot,
 					      status_string);
 	g_free (status_string);
 }
@@ -5834,13 +5834,13 @@ static void
 move_copy_selection_to_next_pane (FMDirectoryView *view,
 				  int copy_action)
 {
-	NautilusWindowSlotInfo *slot;
+	NautilusWindowSlot *slot;
 	char *dest_location;
 
-	slot = nautilus_window_info_get_extra_slot (fm_directory_view_get_nautilus_window (view));
+	slot = nautilus_window_get_extra_slot (fm_directory_view_get_nautilus_window (view));
 	g_return_if_fail (slot != NULL);
 
-	dest_location = nautilus_window_slot_info_get_current_location (slot);
+	dest_location = nautilus_window_slot_get_current_location (slot);
 	g_return_if_fail (dest_location != NULL);
 
 	move_copy_selection_to_location (view, copy_action, dest_location);
@@ -5859,16 +5859,16 @@ action_copy_to_next_pane_callback (GtkAction *action, gpointer callback_data)
 static void
 action_move_to_next_pane_callback (GtkAction *action, gpointer callback_data)
 {
-	NautilusWindowSlotInfo *slot;
+	NautilusWindowSlot *slot;
 	char *dest_location;
 	FMDirectoryView *view;
 
 	view = FM_DIRECTORY_VIEW (callback_data);
 
-	slot = nautilus_window_info_get_extra_slot (fm_directory_view_get_nautilus_window (view));
+	slot = nautilus_window_get_extra_slot (fm_directory_view_get_nautilus_window (view));
 	g_return_if_fail (slot != NULL);
 
-	dest_location = nautilus_window_slot_info_get_current_location (slot);
+	dest_location = nautilus_window_slot_get_current_location (slot);
 	g_return_if_fail (dest_location != NULL);
 
 	move_copy_selection_to_location (view, GDK_ACTION_MOVE, dest_location);
@@ -5953,7 +5953,7 @@ paste_clipboard_data (FMDirectoryView *view,
 									 copied_files_atom);
 
 	if (item_uris == NULL|| destination_uri == NULL) {
-		nautilus_window_slot_info_set_status (view->details->slot,
+		nautilus_window_slot_set_status (view->details->slot,
 						      _("There is nothing on the clipboard to paste."));
 	} else {
 		fm_directory_view_move_copy_items (item_uris, NULL, destination_uri,
@@ -7005,7 +7005,7 @@ fm_directory_view_init_show_hidden_files (FMDirectoryView *view)
 	}
 
 	show_hidden_changed = FALSE;
-	mode = nautilus_window_info_get_hidden_files_mode (view->details->window);
+	mode = nautilus_window_get_hidden_files_mode (view->details->window);
 
 	if (mode == NAUTILUS_WINDOW_SHOW_HIDDEN_FILES_DEFAULT) {
 		show_hidden_default_setting = g_settings_get_boolean (nautilus_preferences, NAUTILUS_PREFERENCES_SHOW_HIDDEN_FILES);
@@ -7398,7 +7398,7 @@ real_merge_menus (FMDirectoryView *view)
 	const char *ui;
 	char *tooltip;
 
-	ui_manager = nautilus_window_info_get_ui_manager (view->details->window);
+	ui_manager = nautilus_window_get_ui_manager (view->details->window);
 
 	action_group = gtk_action_group_new ("DirViewActions");
 	gtk_action_group_set_translation_domain (action_group, GETTEXT_PACKAGE);
@@ -7545,7 +7545,7 @@ showing_trash_directory (FMDirectoryView *view)
 static gboolean
 should_show_empty_trash (FMDirectoryView *view)
 {
-	return (showing_trash_directory (view) || nautilus_window_info_get_window_type (view->details->window) == NAUTILUS_WINDOW_NAVIGATION);
+	return (showing_trash_directory (view) || nautilus_window_get_window_type (view->details->window) == NAUTILUS_WINDOW_NAVIGATION);
 }
 
 static gboolean
@@ -8280,7 +8280,7 @@ real_update_location_menu (FMDirectoryView *view)
 	show_open_folder_window = FALSE;
 	show_open_in_new_tab = FALSE;
 
-	if (nautilus_window_info_get_window_type (view->details->window) == NAUTILUS_WINDOW_NAVIGATION) {
+	if (nautilus_window_get_window_type (view->details->window) == NAUTILUS_WINDOW_NAVIGATION) {
 		if (g_settings_get_boolean (nautilus_preferences, NAUTILUS_PREFERENCES_ALWAYS_USE_BROWSER)) {
 			label = _("Open in New _Window");
 		} else {
@@ -8564,7 +8564,7 @@ real_update_menus (FMDirectoryView *view)
 		      NULL);
 
 	menuitem = gtk_ui_manager_get_widget (
-			nautilus_window_info_get_ui_manager (view->details->window),
+			nautilus_window_get_ui_manager (view->details->window),
 			FM_DIRECTORY_VIEW_MENU_PATH_OPEN);
 
 	/* Only force displaying the icon if it is an application icon */
@@ -8572,7 +8572,7 @@ real_update_menus (FMDirectoryView *view)
 		GTK_IMAGE_MENU_ITEM (menuitem), app_icon != NULL);
 
 	menuitem = gtk_ui_manager_get_widget (
-			nautilus_window_info_get_ui_manager (view->details->window),
+			nautilus_window_get_ui_manager (view->details->window),
 			FM_DIRECTORY_VIEW_POPUP_PATH_OPEN);
 
 	/* Only force displaying the icon if it is an application icon */
@@ -8592,10 +8592,10 @@ real_update_menus (FMDirectoryView *view)
 
 	show_open_alternate = file_list_all_are_folders (selection) &&
 				selection_count > 0 &&
-				!(nautilus_window_info_get_window_type (view->details->window) == NAUTILUS_WINDOW_DESKTOP &&
+				!(nautilus_window_get_window_type (view->details->window) == NAUTILUS_WINDOW_DESKTOP &&
 					g_settings_get_boolean (nautilus_preferences, NAUTILUS_PREFERENCES_ALWAYS_USE_BROWSER));
 	show_open_folder_window = FALSE;
-	if (nautilus_window_info_get_window_type (view->details->window) == NAUTILUS_WINDOW_NAVIGATION) {
+	if (nautilus_window_get_window_type (view->details->window) == NAUTILUS_WINDOW_NAVIGATION) {
 		if (g_settings_get_boolean (nautilus_preferences, NAUTILUS_PREFERENCES_ALWAYS_USE_BROWSER)) {
 			if (selection_count == 0 || selection_count == 1) {
 				label_with_underscore = g_strdup (_("Open in New _Window"));
@@ -8633,7 +8633,7 @@ real_update_menus (FMDirectoryView *view)
 	gtk_action_set_visible (action, show_open_alternate);
 
 	/* Open in New Tab action */
-	if (nautilus_window_info_get_window_type (view->details->window) == NAUTILUS_WINDOW_NAVIGATION) {
+	if (nautilus_window_get_window_type (view->details->window) == NAUTILUS_WINDOW_NAVIGATION) {
 
 		if (g_settings_get_boolean (nautilus_preferences, NAUTILUS_PREFERENCES_ALWAYS_USE_BROWSER)) {
 			if (selection_count == 0 || selection_count == 1) {
@@ -8669,7 +8669,7 @@ real_update_menus (FMDirectoryView *view)
 	}
 
 	/* next pane actions, only in navigation mode */
-	if (nautilus_window_info_get_window_type (view->details->window) != NAUTILUS_WINDOW_NAVIGATION) {
+	if (nautilus_window_get_window_type (view->details->window) != NAUTILUS_WINDOW_NAVIGATION) {
 		action = gtk_action_group_get_action (view->details->dir_action_group,
 						      FM_ACTION_COPY_TO_NEXT_PANE);
 		gtk_action_set_visible (action, FALSE);
@@ -9301,7 +9301,7 @@ finish_loading (FMDirectoryView *view)
 {
 	NautilusFileAttributes attributes;
 
-	nautilus_window_info_report_load_underway (view->details->window,
+	nautilus_window_report_load_underway (view->details->window,
 						   NAUTILUS_VIEW (view));
 
 	/* Tell interested parties that we've begun loading this directory now.
@@ -9310,7 +9310,7 @@ finish_loading (FMDirectoryView *view)
 	fm_directory_view_begin_loading (view);
 
 	/* Assume we have now all information to show window */
-	nautilus_window_info_view_visible  (view->details->window, NAUTILUS_VIEW (view));
+	nautilus_window_view_visible  (view->details->window, NAUTILUS_VIEW (view));
 
 	if (nautilus_directory_are_all_files_seen (view->details->model)) {
 		/* Unschedule a pending update and schedule a new one with the minimal
@@ -9520,9 +9520,9 @@ fm_directory_view_reset_to_defaults (FMDirectoryView *view)
 	EEL_CALL_METHOD
 		(FM_DIRECTORY_VIEW_CLASS, view,
 		 reset_to_defaults, (view));
-	mode = nautilus_window_info_get_hidden_files_mode (view->details->window);
+	mode = nautilus_window_get_hidden_files_mode (view->details->window);
 	if (mode != NAUTILUS_WINDOW_SHOW_HIDDEN_FILES_DEFAULT) {
-		nautilus_window_info_set_hidden_files_mode (view->details->window,
+		nautilus_window_set_hidden_files_mode (view->details->window,
 							    NAUTILUS_WINDOW_SHOW_HIDDEN_FILES_DEFAULT);
 	}
 }
@@ -9682,7 +9682,7 @@ fm_directory_view_set_initiated_unmount (FMDirectoryView *view,
 					 gboolean initiated_unmount)
 {
 	if (view->details->window != NULL) {
-		nautilus_window_info_set_initiated_unmount(view->details->window,
+		nautilus_window_set_initiated_unmount(view->details->window,
 							   initiated_unmount);
 	}
 }
@@ -10530,8 +10530,8 @@ fm_directory_view_set_property (GObject         *object,
 				GParamSpec      *pspec)
 {
   FMDirectoryView *directory_view;
-  NautilusWindowSlotInfo *slot;
-  NautilusWindowInfo *window;
+  NautilusWindowSlot *slot;
+  NautilusWindow *window;
   
   directory_view = FM_DIRECTORY_VIEW (object);
 
@@ -10539,8 +10539,8 @@ fm_directory_view_set_property (GObject         *object,
   case PROP_WINDOW_SLOT:
 	  g_assert (directory_view->details->slot == NULL);
 
-	  slot = NAUTILUS_WINDOW_SLOT_INFO (g_value_get_object (value));
-          window = nautilus_window_slot_info_get_window (slot);
+	  slot = NAUTILUS_WINDOW_SLOT (g_value_get_object (value));
+          window = nautilus_window_slot_get_window (slot);
 
 	  directory_view->details->slot = slot;
 	  directory_view->details->window = window;
@@ -10628,7 +10628,7 @@ fm_directory_view_parent_set (GtkWidget *widget,
 		g_assert (old_parent == NULL);
 
 		if (view->details->slot == 
-		    nautilus_window_info_get_active_slot (view->details->window)) {
+		    nautilus_window_get_active_slot (view->details->window)) {
 			view->details->active = TRUE;
 
 			fm_directory_view_merge_menus (view);
@@ -10785,7 +10785,7 @@ fm_directory_view_class_init (FMDirectoryViewClass *klass)
 					 g_param_spec_object ("window-slot",
 							      "Window Slot",
 							      "The parent window slot reference",
-							      NAUTILUS_TYPE_WINDOW_SLOT_INFO,
+							      NAUTILUS_TYPE_WINDOW_SLOT,
 							      G_PARAM_WRITABLE |
 							      G_PARAM_CONSTRUCT_ONLY));
 
diff --git a/src/file-manager/fm-directory-view.h b/src/file-manager/fm-directory-view.h
index 07402a0..32d332f 100644
--- a/src/file-manager/fm-directory-view.h
+++ b/src/file-manager/fm-directory-view.h
@@ -29,14 +29,16 @@
 #define FM_DIRECTORY_VIEW_H
 
 #include <gtk/gtk.h>
+#include <gio/gio.h>
+
 #include <libnautilus-private/nautilus-directory.h>
 #include <libnautilus-private/nautilus-file.h>
 #include <libnautilus-private/nautilus-icon-container.h>
 #include <libnautilus-private/nautilus-link.h>
 #include <libnautilus-private/nautilus-view.h>
-#include <libnautilus-private/nautilus-window-info.h>
-#include <libnautilus-private/nautilus-window-slot-info.h>
-#include <gio/gio.h>
+
+#include "nautilus-window.h"
+#include "nautilus-window-slot.h"
 
 typedef struct FMDirectoryView FMDirectoryView;
 typedef struct FMDirectoryViewClass FMDirectoryViewClass;
@@ -338,8 +340,8 @@ struct FMDirectoryViewClass {
 GType               fm_directory_view_get_type                         (void);
 
 /* Functions callable from the user interface and elsewhere. */
-NautilusWindowInfo *fm_directory_view_get_nautilus_window              (FMDirectoryView  *view);
-NautilusWindowSlotInfo *fm_directory_view_get_nautilus_window_slot     (FMDirectoryView  *view);
+NautilusWindow     *fm_directory_view_get_nautilus_window              (FMDirectoryView  *view);
+NautilusWindowSlot *fm_directory_view_get_nautilus_window_slot     (FMDirectoryView  *view);
 char *              fm_directory_view_get_uri                          (FMDirectoryView  *view);
 char *              fm_directory_view_get_backing_uri                  (FMDirectoryView  *view);
 gboolean            fm_directory_view_can_accept_item                  (NautilusFile     *target_item,
diff --git a/src/file-manager/fm-icon-view.c b/src/file-manager/fm-icon-view.c
index 755ed8c..5780756 100644
--- a/src/file-manager/fm-icon-view.c
+++ b/src/file-manager/fm-icon-view.c
@@ -29,6 +29,8 @@
 #include "fm-icon-container.h"
 #include "fm-desktop-icon-view.h"
 #include "fm-error-reporting.h"
+#include "nautilus-view-factory.h"
+
 #include <stdlib.h>
 #include <eel/eel-glib-extensions.h>
 #include <eel/eel-gtk-extensions.h>
@@ -51,7 +53,6 @@
 #include <libnautilus-private/nautilus-icon-dnd.h>
 #include <libnautilus-private/nautilus-link.h>
 #include <libnautilus-private/nautilus-metadata.h>
-#include <libnautilus-private/nautilus-view-factory.h>
 #include <libnautilus-private/nautilus-clipboard.h>
 #include <libnautilus-private/nautilus-desktop-icon-file.h>
 #include <locale.h>
@@ -1906,7 +1907,7 @@ icon_container_activate_alternate_callback (NautilusIconContainer *container,
 	GdkEventButton *button_event;
 	GdkEventKey *key_event;
 	gboolean open_in_tab;
-	NautilusWindowInfo *window_info;
+	NautilusWindow *window;
 	NautilusWindowOpenFlags flags;
 
 	g_assert (FM_IS_ICON_VIEW (icon_view));
@@ -1914,9 +1915,9 @@ icon_container_activate_alternate_callback (NautilusIconContainer *container,
 
 	open_in_tab = FALSE;
 
-	window_info = fm_directory_view_get_nautilus_window (FM_DIRECTORY_VIEW (icon_view));
+	window = fm_directory_view_get_nautilus_window (FM_DIRECTORY_VIEW (icon_view));
 
-	if (nautilus_window_info_get_window_type (window_info) == NAUTILUS_WINDOW_NAVIGATION) {
+	if (nautilus_window_get_window_type (window) == NAUTILUS_WINDOW_NAVIGATION) {
 		event = gtk_get_current_event ();
 		if (event->type == GDK_BUTTON_PRESS ||
 		    event->type == GDK_BUTTON_RELEASE ||
@@ -2202,7 +2203,7 @@ icon_container_preview_callback (NautilusIconContainer *container,
 			file_name = nautilus_file_get_display_name (file);
 			message = g_strdup_printf (_("pointing at \"%s\""), file_name);
 			g_free (file_name);
-			nautilus_window_slot_info_set_status
+			nautilus_window_slot_set_status
 				(fm_directory_view_get_nautilus_window_slot (FM_DIRECTORY_VIEW (icon_view)),
 				 message);
 			g_free (message);
@@ -2749,12 +2750,12 @@ store_layout_timestamp (NautilusIconContainer *container,
 static gboolean
 focus_in_event_callback (GtkWidget *widget, GdkEventFocus *event, gpointer user_data)
 {
-	NautilusWindowSlotInfo *slot_info;
+	NautilusWindowSlot *slot;
 	FMIconView *icon_view = FM_ICON_VIEW (user_data);
 	
 	/* make the corresponding slot (and the pane that contains it) active */
-	slot_info = fm_directory_view_get_nautilus_window_slot (FM_DIRECTORY_VIEW (icon_view));
-	nautilus_window_slot_info_make_hosting_pane_active (slot_info);
+	slot = fm_directory_view_get_nautilus_window_slot (FM_DIRECTORY_VIEW (icon_view));
+	nautilus_window_slot_make_hosting_pane_active (slot);
 
 	return FALSE; 
 }
@@ -3113,7 +3114,7 @@ fm_icon_view_init (FMIconView *icon_view)
 }
 
 static NautilusView *
-fm_icon_view_create (NautilusWindowSlotInfo *slot)
+fm_icon_view_create (NautilusWindowSlot *slot)
 {
 	FMIconView *view;
 
@@ -3125,7 +3126,7 @@ fm_icon_view_create (NautilusWindowSlotInfo *slot)
 }
 
 static NautilusView *
-fm_compact_view_create (NautilusWindowSlotInfo *slot)
+fm_compact_view_create (NautilusWindowSlot *slot)
 {
 	FMIconView *view;
 
diff --git a/src/file-manager/fm-list-view.c b/src/file-manager/fm-list-view.c
index 3a53770..b6539d5 100644
--- a/src/file-manager/fm-list-view.c
+++ b/src/file-manager/fm-list-view.c
@@ -31,6 +31,8 @@
 #include <string.h>
 #include "fm-error-reporting.h"
 #include "fm-list-model.h"
+#include "nautilus-view-factory.h"
+
 #include <string.h>
 #include <eel/eel-vfs-extensions.h>
 #include <eel/eel-gdk-extensions.h>
@@ -55,7 +57,6 @@
 #include <libnautilus-private/nautilus-metadata.h>
 #include <libnautilus-private/nautilus-module.h>
 #include <libnautilus-private/nautilus-tree-view-drag-dest.h>
-#include <libnautilus-private/nautilus-view-factory.h>
 #include <libnautilus-private/nautilus-clipboard.h>
 #include <libnautilus-private/nautilus-cell-renderer-text-ellipsized.h>
 
@@ -1508,12 +1509,12 @@ realize_event_callback (GtkWidget *tree_view,
 static gboolean
 focus_in_event_callback (GtkWidget *widget, GdkEventFocus *event, gpointer user_data)
 {
-	NautilusWindowSlotInfo *slot_info;
+	NautilusWindowSlot *slot;
 	FMListView *list_view = FM_LIST_VIEW (user_data);
 
 	/* make the corresponding slot (and the pane that contains it) active */
-	slot_info = fm_directory_view_get_nautilus_window_slot (FM_DIRECTORY_VIEW (list_view));
-	nautilus_window_slot_info_make_hosting_pane_active (slot_info);
+	slot = fm_directory_view_get_nautilus_window_slot (FM_DIRECTORY_VIEW (list_view));
+	nautilus_window_slot_make_hosting_pane_active (slot);
 
 	return FALSE;
 }
@@ -3163,7 +3164,7 @@ fm_list_view_init (FMListView *list_view)
 }
 
 static NautilusView *
-fm_list_view_create (NautilusWindowSlotInfo *slot)
+fm_list_view_create (NautilusWindowSlot *slot)
 {
 	FMListView *view;
 
diff --git a/src/nautilus-application.h b/src/nautilus-application.h
index ea6cd60..6ee8d89 100644
--- a/src/nautilus-application.h
+++ b/src/nautilus-application.h
@@ -30,6 +30,8 @@
 
 #include <libnautilus-private/nautilus-undo-manager.h>
 
+#include "nautilus-window.h"
+
 #define NAUTILUS_DESKTOP_ICON_VIEW_IID	"OAFIID:Nautilus_File_Manager_Desktop_Icon_View"
 
 #define NAUTILUS_TYPE_APPLICATION nautilus_application_get_type()
@@ -44,11 +46,6 @@
 #define NAUTILUS_APPLICATION_GET_CLASS(obj) \
   (G_TYPE_INSTANCE_GET_CLASS ((obj), NAUTILUS_TYPE_APPLICATION, NautilusApplicationClass))
 
-#ifndef NAUTILUS_WINDOW_DEFINED
-#define NAUTILUS_WINDOW_DEFINED
-typedef struct NautilusWindow NautilusWindow;
-#endif
-
 #ifndef NAUTILUS_SPATIAL_WINDOW_DEFINED
 #define NAUTILUS_SPATIAL_WINDOW_DEFINED
 typedef struct _NautilusSpatialWindow NautilusSpatialWindow;
diff --git a/src/nautilus-bookmarks-window.c b/src/nautilus-bookmarks-window.c
index 246ea43..713fa5c 100644
--- a/src/nautilus-bookmarks-window.c
+++ b/src/nautilus-bookmarks-window.c
@@ -265,7 +265,7 @@ create_bookmarks_window (NautilusBookmarkList *list, GObject *undo_manager_sourc
 	remove_button = (GtkWidget *)gtk_builder_get_object (builder, "bookmark_delete_button");
 	jump_button = (GtkWidget *)gtk_builder_get_object (builder, "bookmark_jump_button");
 
-	application = NAUTILUS_WINDOW (undo_manager_source)->application;
+	application = nautilus_application_dup_singleton ();
 
 	if (NAUTILUS_IS_NAVIGATION_WINDOW (undo_manager_source)) {
 		parent_is_browser_window = TRUE;
@@ -942,6 +942,7 @@ on_window_destroy_event (GtkWidget *widget,
 {
 	g_object_unref (bookmark_list_store);
 	g_object_unref (bookmark_empty_list_store);
+	g_object_unref (application);
 	g_source_remove_by_user_data (widget);
 }
 
diff --git a/src/nautilus-connect-server-dialog-main.c b/src/nautilus-connect-server-dialog-main.c
index 8b518fe..49646f4 100644
--- a/src/nautilus-connect-server-dialog-main.c
+++ b/src/nautilus-connect-server-dialog-main.c
@@ -68,7 +68,6 @@ nautilus_connect_server_dialog_display_location_finish (NautilusConnectServerDia
 
 void
 nautilus_connect_server_dialog_display_location_async (NautilusConnectServerDialog *self,
-						       NautilusApplication *application,
 						       GFile *location,
 						       GAsyncReadyCallback callback,
 						       gpointer user_data)
diff --git a/src/nautilus-connect-server-dialog-nonmain.c b/src/nautilus-connect-server-dialog-nonmain.c
index b6b2ada..0b7374a 100644
--- a/src/nautilus-connect-server-dialog-nonmain.c
+++ b/src/nautilus-connect-server-dialog-nonmain.c
@@ -66,13 +66,13 @@ nautilus_connect_server_dialog_display_location_finish (NautilusConnectServerDia
 
 void
 nautilus_connect_server_dialog_display_location_async (NautilusConnectServerDialog *self,
-						       NautilusApplication *application,
 						       GFile *location,
 						       GAsyncReadyCallback callback,
 						       gpointer user_data)
 {
 	NautilusWindow *window;
 	GtkWidget *widget;
+	NautilusApplication *application;
 
 	widget = GTK_WIDGET (self);
 
@@ -81,6 +81,8 @@ nautilus_connect_server_dialog_display_location_async (NautilusConnectServerDial
 					   callback, user_data,
 					   nautilus_connect_server_dialog_display_location_async);
 
+	application = nautilus_application_dup_singleton ();
+
 	if (g_settings_get_boolean (nautilus_preferences, NAUTILUS_PREFERENCES_ALWAYS_USE_BROWSER)) {
 		window = nautilus_application_create_navigation_window (application,
 									NULL,
@@ -96,4 +98,6 @@ nautilus_connect_server_dialog_display_location_async (NautilusConnectServerDial
 
 	nautilus_window_go_to_full (window, location,
 				    window_go_to_cb, self);
+
+	g_object_unref (application);
 }
diff --git a/src/nautilus-connect-server-dialog.c b/src/nautilus-connect-server-dialog.c
index 9e9674e..95b1c69 100644
--- a/src/nautilus-connect-server-dialog.c
+++ b/src/nautilus-connect-server-dialog.c
@@ -31,7 +31,6 @@
 #include <gio/gio.h>
 #include <gtk/gtk.h>
 
-#include "nautilus-application.h"
 #include "nautilus-bookmark-list.h"
 #include "nautilus-connect-server-operation.h"
 #include "nautilus-window.h"
@@ -45,8 +44,6 @@
  */
 
 struct _NautilusConnectServerDialogDetails {
-	NautilusApplication *application;
-
 	GtkWidget *primary_table;
 	GtkWidget *user_details;
 	GtkWidget *port_spinbutton;
@@ -480,8 +477,7 @@ mount_enclosing_ready_cb (GObject *source,
 
 	if (!error || g_error_matches (error, G_IO_ERROR, G_IO_ERROR_ALREADY_MOUNTED)) {
 		/* volume is mounted, show it */
-		nautilus_connect_server_dialog_display_location_async (dialog,
-								       dialog->details->application, location,
+		nautilus_connect_server_dialog_display_location_async (dialog, location,
 								       display_location_async_cb, NULL);
 	} else {
 		if (dialog->details->should_destroy) {
@@ -498,7 +494,6 @@ mount_enclosing_ready_cb (GObject *source,
 
 static void
 connect_dialog_present_uri_async (NautilusConnectServerDialog *self,
-				  NautilusApplication *application,
 				  GFile *location)
 {
 	GMountOperation *op;
@@ -615,7 +610,6 @@ connect_dialog_connect_to_server (NautilusConnectServerDialog *dialog)
 
 	connect_dialog_set_connecting (dialog);
 	connect_dialog_present_uri_async (dialog,
-					  dialog->details->application,
 					  location);
 
 	g_object_unref (location);
@@ -1174,7 +1168,6 @@ nautilus_connect_server_dialog_new (NautilusWindow *window)
 	if (window) {
 		gtk_window_set_screen (GTK_WINDOW (dialog),
 				       gtk_window_get_screen (GTK_WINDOW (window)));
-		conndlg->details->application = window->application;
 	}
 
 	return dialog;
diff --git a/src/nautilus-connect-server-dialog.h b/src/nautilus-connect-server-dialog.h
index 254896d..bc1deac 100644
--- a/src/nautilus-connect-server-dialog.h
+++ b/src/nautilus-connect-server-dialog.h
@@ -27,6 +27,7 @@
 #include <gio/gio.h>
 #include <gtk/gtk.h>
 
+#include "nautilus-application.h"
 #include "nautilus-window.h"
 
 #define NAUTILUS_TYPE_CONNECT_SERVER_DIALOG\
@@ -58,7 +59,6 @@ GType nautilus_connect_server_dialog_get_type (void);
 GtkWidget* nautilus_connect_server_dialog_new (NautilusWindow *window);
 
 void nautilus_connect_server_dialog_display_location_async (NautilusConnectServerDialog *self,
-							    NautilusApplication *application,
 							    GFile *location,
 							    GAsyncReadyCallback callback,
 							    gpointer user_data);
diff --git a/src/nautilus-location-bar.c b/src/nautilus-location-bar.c
index a06e04b..5a34a34 100644
--- a/src/nautilus-location-bar.c
+++ b/src/nautilus-location-bar.c
@@ -177,7 +177,7 @@ drag_data_received_callback (GtkWidget *widget,
 	if (new_windows_for_extras) {
 		int i;
 
-		application = NAUTILUS_WINDOW (window)->application;
+		application = nautilus_application_dup_singleton ();
 		screen = gtk_window_get_screen (GTK_WINDOW (window));
 
 		for (i = 1; names[i] != NULL; ++i) {
@@ -186,6 +186,8 @@ drag_data_received_callback (GtkWidget *widget,
 			nautilus_window_go_to (new_window, location);
 			g_object_unref (location);
 		}
+
+		g_object_unref (application);
 	}
 
 	g_strfreev (names);
diff --git a/src/nautilus-mime-actions.c b/src/nautilus-mime-actions.c
index bd785f5..102d8d6 100644
--- a/src/nautilus-mime-actions.c
+++ b/src/nautilus-mime-actions.c
@@ -23,8 +23,11 @@
 */
 
 #include <config.h>
+
 #include "nautilus-mime-actions.h"
 
+#include "nautilus-window-slot.h"
+
 #include <eel/eel-glib-extensions.h>
 #include <eel/eel-stock-dialogs.h>
 #include <eel/eel-string.h>
@@ -66,8 +69,8 @@ typedef struct {
 } ApplicationLaunchParameters;
 
 typedef struct {
-	NautilusWindowSlotInfo *slot_info;
-	gpointer window_info;
+	NautilusWindowSlot *slot;
+	gpointer window;
 	GtkWindow *parent_window;
 	GCancellable *cancellable;
 	GList *locations;
@@ -944,8 +947,8 @@ activation_parameters_free (ActivateParameters *parameters)
 		eel_timed_wait_stop (cancel_activate_callback, parameters);
 	}
 	
-	if (parameters->slot_info) {
-		g_object_remove_weak_pointer (G_OBJECT (parameters->slot_info), (gpointer *)&parameters->slot_info);
+	if (parameters->slot) {
+		g_object_remove_weak_pointer (G_OBJECT (parameters->slot), (gpointer *)&parameters->slot);
 	}
 	if (parameters->parent_window) {
 		g_object_remove_weak_pointer (G_OBJECT (parameters->parent_window), (gpointer *)&parameters->parent_window);
@@ -1057,7 +1060,7 @@ confirm_multiple_windows (GtkWindow *parent_window,
 }
 
 typedef struct {
-	NautilusWindowSlotInfo *slot_info;
+	NautilusWindowSlot *slot;
 	GtkWindow *parent_window;
 	NautilusFile *file;
 	GList *files;
@@ -1073,8 +1076,8 @@ typedef struct {
 static void
 activate_parameters_install_free (ActivateParametersInstall *parameters_install)
 {
-	if (parameters_install->slot_info) {
-		g_object_remove_weak_pointer (G_OBJECT (parameters_install->slot_info), (gpointer *)&parameters_install->slot_info);
+	if (parameters_install->slot) {
+		g_object_remove_weak_pointer (G_OBJECT (parameters_install->slot), (gpointer *)&parameters_install->slot);
 	}
 	if (parameters_install->parent_window) {
 		g_object_remove_weak_pointer (G_OBJECT (parameters_install->parent_window), (gpointer *)&parameters_install->parent_window);
@@ -1279,7 +1282,7 @@ search_for_application_dbus_call_notify_cb (GDBusProxy   *proxy,
 
 	/* activate the file again */
 	nautilus_mime_activate_files (parameters_install->parent_window,
-	                              parameters_install->slot_info,
+	                              parameters_install->slot,
 	                              parameters_install->files,
 	                              parameters_install->activation_directory,
 	                              parameters_install->mode,
@@ -1416,8 +1419,8 @@ application_unhandled_uri (ActivateParameters *parameters, char *uri)
 
 	/* copy the parts of parameters we are interested in as the orignal will be unref'd */
 	parameters_install = g_new0 (ActivateParametersInstall, 1);
-	parameters_install->slot_info = parameters->slot_info;
-	g_object_add_weak_pointer (G_OBJECT (parameters_install->slot_info), (gpointer *)&parameters_install->slot_info);
+	parameters_install->slot = parameters->slot;
+	g_object_add_weak_pointer (G_OBJECT (parameters_install->slot), (gpointer *)&parameters_install->slot);
 	if (parameters->parent_window) {
 		parameters_install->parent_window = parameters->parent_window;
 		g_object_add_weak_pointer (G_OBJECT (parameters_install->parent_window), (gpointer *)&parameters_install->parent_window);
@@ -1586,7 +1589,7 @@ activate_desktop_file (ActivateParameters *parameters,
 static void
 activate_files (ActivateParameters *parameters)
 {
-	NautilusWindowInfo *window_info;
+	NautilusWindow *window;
 	NautilusWindowOpenFlags flags;
 	NautilusFile *file;
 	GList *launch_desktop_files;
@@ -1726,7 +1729,7 @@ activate_files (ActivateParameters *parameters)
 		}
 	}
 
-	if (parameters->slot_info != NULL &&
+	if (parameters->slot != NULL &&
 	    (!parameters->user_confirmation ||
 	     confirm_multiple_windows (parameters->parent_window, count,
 				       (flags & NAUTILUS_WINDOW_OPEN_FLAG_NEW_TAB) != 0))) {
@@ -1751,8 +1754,8 @@ activate_files (ActivateParameters *parameters)
 
 			uri = nautilus_file_get_activation_uri (file);
 			f = g_file_new_for_uri (uri);
-			nautilus_window_slot_info_open_location (parameters->slot_info,
-								 f, parameters->mode, flags, NULL);
+			nautilus_window_slot_open_location_full (parameters->slot,
+								 f, parameters->mode, flags, NULL, NULL, NULL);
 			g_object_unref (f);
 			g_free (uri);
 		}
@@ -1819,17 +1822,17 @@ activate_files (ActivateParameters *parameters)
 		}
 	}
 
-	window_info = NULL;
-	if (parameters->slot_info != NULL) {
-		window_info = nautilus_window_slot_info_get_window (parameters->slot_info);
+	window = NULL;
+	if (parameters->slot != NULL) {
+		window = nautilus_window_slot_get_window (parameters->slot);
 	}
 
 	if (open_in_app_parameters != NULL ||
 	    unhandled_open_in_app_uris != NULL) {
 		if ((parameters->flags & NAUTILUS_WINDOW_OPEN_FLAG_CLOSE_BEHIND) != 0 &&
-		    window_info != NULL && 
-		     nautilus_window_info_get_window_type (window_info) == NAUTILUS_WINDOW_SPATIAL) {
-			nautilus_window_info_close (window_info);
+		    window != NULL && 
+		     nautilus_window_get_window_type (window) == NAUTILUS_WINDOW_SPATIAL) {
+			nautilus_window_close (window);
 		}
 	}
 
@@ -2264,7 +2267,7 @@ activation_start_mountables (ActivateParameters *parameters)
  **/
 void
 nautilus_mime_activate_files (GtkWindow *parent_window,
-			      NautilusWindowSlotInfo *slot_info,
+			      NautilusWindowSlot *slot,
 			      GList *files,
 			      const char *launch_directory,
 			      NautilusWindowOpenMode mode,
@@ -2285,8 +2288,8 @@ nautilus_mime_activate_files (GtkWindow *parent_window,
 	DEBUG_FILES (files, "Calling activate_files() with files:");
 
 	parameters = g_new0 (ActivateParameters, 1);
-	parameters->slot_info = slot_info;
-	g_object_add_weak_pointer (G_OBJECT (parameters->slot_info), (gpointer *)&parameters->slot_info);
+	parameters->slot = slot;
+	g_object_add_weak_pointer (G_OBJECT (parameters->slot), (gpointer *)&parameters->slot);
 	if (parent_window) {
 		parameters->parent_window = parent_window;
 		g_object_add_weak_pointer (G_OBJECT (parameters->parent_window), (gpointer *)&parameters->parent_window);
@@ -2349,7 +2352,7 @@ nautilus_mime_activate_files (GtkWindow *parent_window,
 
 void
 nautilus_mime_activate_file (GtkWindow *parent_window,
-			     NautilusWindowSlotInfo *slot_info,
+			     NautilusWindowSlot *slot,
 			     NautilusFile *file,
 			     const char *launch_directory,
 			     NautilusWindowOpenMode mode,
@@ -2360,6 +2363,6 @@ nautilus_mime_activate_file (GtkWindow *parent_window,
 	g_return_if_fail (NAUTILUS_IS_FILE (file));
 
 	files = g_list_prepend (NULL, file);
-	nautilus_mime_activate_files (parent_window, slot_info, files, launch_directory, mode, flags, FALSE);
+	nautilus_mime_activate_files (parent_window, slot, files, launch_directory, mode, flags, FALSE);
 	g_list_free (files);
 }
diff --git a/src/nautilus-mime-actions.h b/src/nautilus-mime-actions.h
index 5fd7839..a3d9c0c 100644
--- a/src/nautilus-mime-actions.h
+++ b/src/nautilus-mime-actions.h
@@ -28,8 +28,8 @@
 #include <gio/gio.h>
 
 #include <libnautilus-private/nautilus-file.h>
-#include <libnautilus-private/nautilus-window-info.h>
-#include <libnautilus-private/nautilus-window-slot-info.h>
+
+#include "nautilus-window.h"
 
 NautilusFileAttributes nautilus_mime_actions_get_required_file_attributes (void);
 
@@ -42,14 +42,14 @@ GList *                nautilus_mime_get_applications_for_files           (GList
 gboolean               nautilus_mime_file_opens_in_view                   (NautilusFile            *file);
 gboolean               nautilus_mime_file_opens_in_external_app           (NautilusFile            *file);
 void                   nautilus_mime_activate_files                       (GtkWindow               *parent_window,
-									   NautilusWindowSlotInfo  *slot_info,
+									   NautilusWindowSlot      *slot,
 									   GList                   *files,
 									   const char              *launch_directory,
 									   NautilusWindowOpenMode   mode,
 									   NautilusWindowOpenFlags  flags,
 									   gboolean                 user_confirmation);
 void                   nautilus_mime_activate_file                        (GtkWindow               *parent_window,
-									   NautilusWindowSlotInfo  *slot_info,
+									   NautilusWindowSlot      *slot_info,
 									   NautilusFile            *file,
 									   const char              *launch_directory,
 									   NautilusWindowOpenMode   mode,
diff --git a/src/nautilus-navigation-window-menus.c b/src/nautilus-navigation-window-menus.c
index 149e9b7..1a6407c 100644
--- a/src/nautilus-navigation-window-menus.c
+++ b/src/nautilus-navigation-window-menus.c
@@ -591,15 +591,19 @@ static void
 action_new_window_callback (GtkAction *action,
 			    gpointer user_data)
 {
-	NautilusWindow *current_window;
-	NautilusWindow *new_window;
+	NautilusApplication *application;
+	NautilusWindow *current_window, *new_window;
 
 	current_window = NAUTILUS_WINDOW (user_data);
+	application = nautilus_application_dup_singleton ();
+
 	new_window = nautilus_application_create_navigation_window (
-				current_window->application,
+				application,
 				NULL,
 				gtk_window_get_screen (GTK_WINDOW (current_window)));
 	nautilus_window_go_home (new_window);
+
+	g_object_unref (application);
 }
 
 static void
@@ -616,15 +620,18 @@ static void
 action_folder_window_callback (GtkAction *action,
 			       gpointer user_data)
 {
+	NautilusApplication *application;
 	NautilusWindow *current_window, *window;
 	NautilusWindowSlot *slot;
 	GFile *current_location;
 
 	current_window = NAUTILUS_WINDOW (user_data);
+	application = nautilus_application_dup_singleton ();
 	slot = current_window->details->active_pane->active_slot;
 	current_location = nautilus_window_slot_get_location (slot);
+
 	window = nautilus_application_get_spatial_window
-		(current_window->application,
+		(application,
 		 current_window,
 		 NULL,
 		 current_location,
@@ -633,9 +640,8 @@ action_folder_window_callback (GtkAction *action,
 
 	nautilus_window_go_to (window, current_location);
 
-	if (current_location != NULL) {
-		g_object_unref (current_location);
-	}
+	g_clear_object (&current_location);
+	g_object_unref (application);
 }
 
 static void
diff --git a/src/nautilus-navigation-window-pane.c b/src/nautilus-navigation-window-pane.c
index d4e7143..49ae70c 100644
--- a/src/nautilus-navigation-window-pane.c
+++ b/src/nautilus-navigation-window-pane.c
@@ -31,8 +31,6 @@
 #include "nautilus-notebook.h"
 
 #include <libnautilus-private/nautilus-global-preferences.h>
-#include <libnautilus-private/nautilus-window-slot-info.h>
-#include <libnautilus-private/nautilus-view-factory.h>
 #include <libnautilus-private/nautilus-entry.h>
 
 static void nautilus_navigation_window_pane_init       (NautilusNavigationWindowPane *pane);
@@ -262,9 +260,9 @@ path_bar_button_released_callback (GtkWidget *widget,
 
 		if (flags != 0) {
 			slot = nautilus_window_get_active_slot (NAUTILUS_WINDOW_PANE (pane)->window);
-			nautilus_window_slot_info_open_location (slot, location,
+			nautilus_window_slot_open_location_full (slot, location,
 								 NAUTILUS_WINDOW_OPEN_ACCORDING_TO_MODE,
-								 flags, NULL);
+								 flags, NULL, NULL, NULL);
 			g_object_unref (location);
 			return TRUE;
 		}
diff --git a/src/nautilus-navigation-window-slot.c b/src/nautilus-navigation-window-slot.c
index d450ae7..f7dbcb2 100644
--- a/src/nautilus-navigation-window-slot.c
+++ b/src/nautilus-navigation-window-slot.c
@@ -27,7 +27,6 @@
 #include "nautilus-window-private.h"
 #include "nautilus-search-bar.h"
 #include "nautilus-navigation-window-pane.h"
-#include <libnautilus-private/nautilus-window-slot-info.h>
 #include <libnautilus-private/nautilus-file.h>
 #include <eel/eel-gtk-macros.h>
 
diff --git a/src/nautilus-navigation-window.c b/src/nautilus-navigation-window.c
index 84441b5..68ad122 100644
--- a/src/nautilus-navigation-window.c
+++ b/src/nautilus-navigation-window.c
@@ -60,7 +60,6 @@
 #include <libnautilus-private/nautilus-icon-info.h>
 #include <libnautilus-private/nautilus-metadata.h>
 #include <libnautilus-private/nautilus-program-choosing.h>
-#include <libnautilus-private/nautilus-view-factory.h>
 #include <libnautilus-private/nautilus-clipboard.h>
 #include <libnautilus-private/nautilus-undo.h>
 #include <libnautilus-private/nautilus-module.h>
@@ -422,9 +421,6 @@ real_sync_title (NautilusWindow *window,
 
 	navigation_window = NAUTILUS_NAVIGATION_WINDOW (window);
 
-	EEL_CALL_PARENT (NAUTILUS_WINDOW_CLASS,
-			 sync_title, (window, slot));
-
 	if (slot == window->details->active_pane->active_slot) {
 		/* if spatial mode is default, we keep "File Browser" in the window title
 		 * to recognize browser windows. Otherwise, we default to the directory name.
@@ -833,9 +829,9 @@ nautilus_navigation_window_set_up_sidebar (NautilusNavigationWindow *window)
 			  window);
 
 	if (g_strcmp0 (window->details->sidebar_id, NAUTILUS_NAVIGATION_WINDOW_SIDEBAR_PLACES) == 0) {
-		sidebar = nautilus_places_sidebar_new (NAUTILUS_WINDOW_INFO (window));
+		sidebar = nautilus_places_sidebar_new (NAUTILUS_WINDOW (window));
 	} else if (g_strcmp0 (window->details->sidebar_id, NAUTILUS_NAVIGATION_WINDOW_SIDEBAR_TREE) == 0) {
-		sidebar = nautilus_tree_sidebar_new (NAUTILUS_WINDOW_INFO (window));
+		sidebar = nautilus_tree_sidebar_new (NAUTILUS_WINDOW (window));
 	} else {
 		g_assert_not_reached ();
 	}
diff --git a/src/nautilus-places-sidebar.c b/src/nautilus-places-sidebar.c
index 30af740..d5cd161 100644
--- a/src/nautilus-places-sidebar.c
+++ b/src/nautilus-places-sidebar.c
@@ -38,8 +38,6 @@
 #include <libnautilus-private/nautilus-file-operations.h>
 #include <libnautilus-private/nautilus-trash-monitor.h>
 #include <libnautilus-private/nautilus-icon-names.h>
-#include <libnautilus-private/nautilus-window-info.h>
-#include <libnautilus-private/nautilus-window-slot-info.h>
 
 #include <eel/eel-debug.h>
 #include <eel/eel-gtk-extensions.h>
@@ -48,9 +46,11 @@
 #include <eel/eel-stock-dialogs.h>
 #include <eel/eel-gdk-pixbuf-extensions.h>
 
+#include "nautilus-application.h"
 #include "nautilus-bookmark-list.h"
 #include "nautilus-places-sidebar.h"
 #include "nautilus-window.h"
+#include "nautilus-window-slot.h"
 
 #define DEBUG_FLAG NAUTILUS_DEBUG_PLACES
 #include <libnautilus-private/nautilus-debug.h>
@@ -68,7 +68,7 @@ typedef struct {
 	char 	           *uri;
 	GtkListStore       *store;
 	GtkTreeModel       *filter_model;
-	NautilusWindowInfo *window;
+	NautilusWindow *window;
 	NautilusBookmarkList *bookmarks;
 	GVolumeMonitor *volume_monitor;
 
@@ -97,7 +97,7 @@ typedef struct {
 
 	/* volume mounting - delayed open process */
 	gboolean mounting;
-	NautilusWindowSlotInfo *go_to_after_mount_slot;
+	NautilusWindowSlot *go_to_after_mount_slot;
 	NautilusWindowOpenFlags go_to_after_mount_flags;
 
 	GtkTreePath *eject_highlight_path;
@@ -431,7 +431,7 @@ update_places (NautilusPlacesSidebar *sidebar)
 	const gchar *path;
 	GIcon *icon;
 	GFile *root;
-	NautilusWindowSlotInfo *slot;
+	NautilusWindowSlot *slot;
 	char *tooltip;
 	GList *network_mounts;
 	NautilusFile *file;
@@ -451,8 +451,8 @@ update_places (NautilusPlacesSidebar *sidebar)
 	sidebar->devices_header_added = FALSE;
 	sidebar->bookmarks_header_added = FALSE;
 
-	slot = nautilus_window_info_get_active_slot (sidebar->window);
-	location = nautilus_window_slot_info_get_current_location (slot);
+	slot = nautilus_window_get_active_slot (sidebar->window);
+	location = nautilus_window_slot_get_current_location (slot);
 
 	volume_monitor = sidebar->volume_monitor;
 
@@ -1001,7 +1001,7 @@ desktop_location_changed_callback (gpointer user_data)
 }
 
 static void
-loading_uri_callback (NautilusWindowInfo *window,
+loading_uri_callback (NautilusWindow *window,
 		      char *location,
 		      NautilusPlacesSidebar *sidebar)
 {
@@ -1739,17 +1739,21 @@ volume_mounted_cb (GVolume *volume,
 
 		if (sidebar->go_to_after_mount_slot != NULL) {
 			if ((sidebar->go_to_after_mount_flags & NAUTILUS_WINDOW_OPEN_FLAG_NEW_WINDOW) == 0) {
-				nautilus_window_slot_info_open_location (sidebar->go_to_after_mount_slot, location,
+				nautilus_window_slot_open_location_full (sidebar->go_to_after_mount_slot, location,
 									 NAUTILUS_WINDOW_OPEN_ACCORDING_TO_MODE,
-									 sidebar->go_to_after_mount_flags, NULL);
+									 sidebar->go_to_after_mount_flags, NULL, NULL, NULL);
 			} else {
-				NautilusWindow *cur, *new;
-				
+				NautilusApplication *app;
+				NautilusWindow *new, *cur;
+
 				cur = NAUTILUS_WINDOW (sidebar->window);
-				new = nautilus_application_create_navigation_window (cur->application,
+				app = nautilus_application_dup_singleton ();
+				new = nautilus_application_create_navigation_window (app,
 										     NULL,
 										     gtk_window_get_screen (GTK_WINDOW (cur)));
 				nautilus_window_go_to (new, location);
+
+				g_object_unref (app);
 			}
 		}
 
@@ -1791,7 +1795,7 @@ open_selected_bookmark (NautilusPlacesSidebar *sidebar,
 			GtkTreePath	      *path,
 			NautilusWindowOpenFlags	      flags)
 {
-	NautilusWindowSlotInfo *slot;
+	NautilusWindowSlot *slot;
 	GtkTreeIter iter;
 	GFile *location;
 	char *uri;
@@ -1812,18 +1816,22 @@ open_selected_bookmark (NautilusPlacesSidebar *sidebar,
 		location = g_file_new_for_uri (uri);
 		/* Navigate to the clicked location */
 		if ((flags & NAUTILUS_WINDOW_OPEN_FLAG_NEW_WINDOW) == 0) {
-			slot = nautilus_window_info_get_active_slot (sidebar->window);
-			nautilus_window_slot_info_open_location (slot, location,
+			slot = nautilus_window_get_active_slot (sidebar->window);
+			nautilus_window_slot_open_location_full (slot, location,
 								 NAUTILUS_WINDOW_OPEN_ACCORDING_TO_MODE,
-								 flags, NULL);
+								 flags, NULL, NULL, NULL);
 		} else {
 			NautilusWindow *cur, *new;
+			NautilusApplication *app;
 			
 			cur = NAUTILUS_WINDOW (sidebar->window);
-			new = nautilus_application_create_navigation_window (cur->application,
+			app = nautilus_application_dup_singleton ();
+			new = nautilus_application_create_navigation_window (app,
 									     NULL,
 									     gtk_window_get_screen (GTK_WINDOW (cur)));
 			nautilus_window_go_to (new, location);
+
+			g_object_unref (app);
 		}
 		g_object_unref (location);
 		g_free (uri);
@@ -1843,7 +1851,7 @@ open_selected_bookmark (NautilusPlacesSidebar *sidebar,
 
 			g_assert (sidebar->go_to_after_mount_slot == NULL);
 
-			slot = nautilus_window_info_get_active_slot (sidebar->window);
+			slot = nautilus_window_get_active_slot (sidebar->window);
 			sidebar->go_to_after_mount_slot = slot;
 			eel_add_weak_pointer (&(sidebar->go_to_after_mount_slot));
 
@@ -1995,7 +2003,7 @@ unmount_done (gpointer data)
 	NautilusWindow *window;
 
 	window = data;
-	nautilus_window_info_set_initiated_unmount (window, FALSE);
+	nautilus_window_set_initiated_unmount (window, FALSE);
 	g_object_unref (window);
 }
 
@@ -2004,7 +2012,7 @@ do_unmount (GMount *mount,
 	    NautilusPlacesSidebar *sidebar)
 {
 	if (mount != NULL) {
-		nautilus_window_info_set_initiated_unmount (sidebar->window, TRUE);
+		nautilus_window_set_initiated_unmount (sidebar->window, TRUE);
 		nautilus_file_operations_unmount_mount_full (NULL, mount, FALSE, TRUE,
 							     unmount_done,
 							     g_object_ref (sidebar->window));
@@ -2049,7 +2057,7 @@ drive_eject_cb (GObject *source_object,
 	char *name;
 
 	window = user_data;
-	nautilus_window_info_set_initiated_unmount (window, FALSE);
+	nautilus_window_set_initiated_unmount (window, FALSE);
 	g_object_unref (window);
 
 	error = NULL;
@@ -2078,7 +2086,7 @@ volume_eject_cb (GObject *source_object,
 	char *name;
 
 	window = user_data;
-	nautilus_window_info_set_initiated_unmount (window, FALSE);
+	nautilus_window_set_initiated_unmount (window, FALSE);
 	g_object_unref (window);
 
 	error = NULL;
@@ -2107,7 +2115,7 @@ mount_eject_cb (GObject *source_object,
 	char *name;
 
 	window = user_data;
-	nautilus_window_info_set_initiated_unmount (window, FALSE);
+	nautilus_window_set_initiated_unmount (window, FALSE);
 	g_object_unref (window);
 
 	error = NULL;
@@ -2135,15 +2143,15 @@ do_eject (GMount *mount,
 
 	mount_op = gtk_mount_operation_new (GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (sidebar))));
 	if (mount != NULL) {
-		nautilus_window_info_set_initiated_unmount (sidebar->window, TRUE);
+		nautilus_window_set_initiated_unmount (sidebar->window, TRUE);
 		g_mount_eject_with_operation (mount, 0, mount_op, NULL, mount_eject_cb,
 					      g_object_ref (sidebar->window));
 	} else if (volume != NULL) {
-		nautilus_window_info_set_initiated_unmount (sidebar->window, TRUE);
+		nautilus_window_set_initiated_unmount (sidebar->window, TRUE);
 		g_volume_eject_with_operation (volume, 0, mount_op, NULL, volume_eject_cb,
 					      g_object_ref (sidebar->window));
 	} else if (drive != NULL) {
-		nautilus_window_info_set_initiated_unmount (sidebar->window, TRUE);
+		nautilus_window_set_initiated_unmount (sidebar->window, TRUE);
 		g_drive_eject_with_operation (drive, 0, mount_op, NULL, drive_eject_cb,
 					      g_object_ref (sidebar->window));
 	}
@@ -2358,7 +2366,7 @@ drive_stop_cb (GObject *source_object,
 	char *name;
 
 	window = user_data;
-	nautilus_window_info_set_initiated_unmount (window, FALSE);
+	nautilus_window_set_initiated_unmount (window, FALSE);
 	g_object_unref (window);
 
 	error = NULL;
@@ -2395,7 +2403,7 @@ stop_shortcut_cb (GtkMenuItem           *item,
 		GMountOperation *mount_op;
 
 		mount_op = gtk_mount_operation_new (GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (sidebar))));
-		nautilus_window_info_set_initiated_unmount (sidebar->window, TRUE);
+		nautilus_window_set_initiated_unmount (sidebar->window, TRUE);
 		g_drive_stop (drive, G_MOUNT_UNMOUNT_NONE, mount_op, NULL, drive_stop_cb,
 			      g_object_ref (sidebar->window));
 		g_object_unref (mount_op);
@@ -3178,16 +3186,16 @@ nautilus_places_sidebar_class_init (NautilusPlacesSidebarClass *class)
 
 static void
 nautilus_places_sidebar_set_parent_window (NautilusPlacesSidebar *sidebar,
-					   NautilusWindowInfo *window)
+					   NautilusWindow *window)
 {
-	NautilusWindowSlotInfo *slot;
+	NautilusWindowSlot *slot;
 
 	sidebar->window = window;
 
-	slot = nautilus_window_info_get_active_slot (window);
+	slot = nautilus_window_get_active_slot (window);
 
 	sidebar->bookmarks = nautilus_bookmark_list_new ();
-	sidebar->uri = nautilus_window_slot_info_get_current_location (slot);
+	sidebar->uri = nautilus_window_slot_get_current_location (slot);
 
 	g_signal_connect_object (sidebar->bookmarks, "contents_changed",
 				 G_CALLBACK (update_places),
@@ -3231,7 +3239,7 @@ nautilus_places_sidebar_style_set (GtkWidget *widget,
 }
 
 GtkWidget *
-nautilus_places_sidebar_new (NautilusWindowInfo *window)
+nautilus_places_sidebar_new (NautilusWindow *window)
 {
 	NautilusPlacesSidebar *sidebar;
 	
diff --git a/src/nautilus-places-sidebar.h b/src/nautilus-places-sidebar.h
index 8487860..470b825 100644
--- a/src/nautilus-places-sidebar.h
+++ b/src/nautilus-places-sidebar.h
@@ -24,8 +24,8 @@
 #ifndef _NAUTILUS_PLACES_SIDEBAR_H
 #define _NAUTILUS_PLACES_SIDEBAR_H
 
-#include <libnautilus-private/nautilus-view.h>
-#include <libnautilus-private/nautilus-window-info.h>
+#include "nautilus-window.h"
+
 #include <gtk/gtk.h>
 
 #define NAUTILUS_PLACES_SIDEBAR_ID    "places"
@@ -44,7 +44,7 @@
 
 
 GType nautilus_places_sidebar_get_type (void);
-GtkWidget * nautilus_places_sidebar_new (NautilusWindowInfo *window);
+GtkWidget * nautilus_places_sidebar_new (NautilusWindow *window);
 
 
 #endif
diff --git a/src/nautilus-query-editor.h b/src/nautilus-query-editor.h
index de06b87..077e505 100644
--- a/src/nautilus-query-editor.h
+++ b/src/nautilus-query-editor.h
@@ -25,9 +25,10 @@
 #define NAUTILUS_QUERY_EDITOR_H
 
 #include <gtk/gtk.h>
+
 #include <libnautilus-private/nautilus-query.h>
-#include <libnautilus-private/nautilus-window-info.h>
-#include <nautilus-search-bar.h>
+
+#include "nautilus-search-bar.h"
 
 #define NAUTILUS_TYPE_QUERY_EDITOR nautilus_query_editor_get_type()
 #define NAUTILUS_QUERY_EDITOR(obj) \
@@ -57,6 +58,8 @@ typedef struct {
 	void (* cancel)   (NautilusQueryEditor *editor);
 } NautilusQueryEditorClass;
 
+#include "nautilus-window-slot.h"
+
 GType      nautilus_query_editor_get_type     	   (void);
 GtkWidget* nautilus_query_editor_new          	   (gboolean start_hidden,
 						    gboolean is_indexed);
diff --git a/src/nautilus-spatial-window.c b/src/nautilus-spatial-window.c
index cccc5a4..766178c 100644
--- a/src/nautilus-spatial-window.c
+++ b/src/nautilus-spatial-window.c
@@ -345,12 +345,9 @@ real_get_icon (NautilusWindow *window,
 }
 
 static void
-sync_window_title (NautilusWindow *window)
+real_sync_title (NautilusWindow *window,
+		 NautilusWindowSlot *slot)
 {
-	NautilusWindowSlot *slot;
-
-	slot = nautilus_window_get_active_slot (window);
-
 	if (slot->title == NULL || slot->title[0] == '\0') {
 		gtk_window_set_title (GTK_WINDOW (window), _("Nautilus"));
 	} else {
@@ -363,15 +360,6 @@ sync_window_title (NautilusWindow *window)
 }
 
 static void
-real_sync_title (NautilusWindow *window,
-		 NautilusWindowSlot *slot)
-{
-	g_assert (slot == nautilus_window_get_active_slot (window));
-
-	sync_window_title (window);
-}
-
-static void
 real_get_min_size (NautilusWindow *window,
 		   guint *min_width, guint *min_height)
 {
diff --git a/src/nautilus-trash-bar.c b/src/nautilus-trash-bar.c
index f86e8af..030e755 100644
--- a/src/nautilus-trash-bar.c
+++ b/src/nautilus-trash-bar.c
@@ -58,7 +58,7 @@ restore_button_clicked_cb (GtkWidget *button,
 {
 	GList *locations, *files, *l;
 
-	locations = nautilus_window_info_get_selection (NAUTILUS_WINDOW_INFO  (bar->priv->window));
+	locations = nautilus_window_get_selection (bar->priv->window);
 	files = NULL;
 
 	for (l = locations; l != NULL; l = l->next) {
@@ -77,7 +77,7 @@ selection_changed_cb (NautilusWindow *window,
 {
 	int count;
 
-	count = nautilus_window_info_get_selection_count (NAUTILUS_WINDOW_INFO (window));
+	count = nautilus_window_get_selection_count (window);
 
 	gtk_widget_set_sensitive (bar->priv->restore_button, (count > 0));
 }
diff --git a/src/nautilus-tree-sidebar.c b/src/nautilus-tree-sidebar.c
index 9a4cc81..f7dbec6 100644
--- a/src/nautilus-tree-sidebar.c
+++ b/src/nautilus-tree-sidebar.c
@@ -35,6 +35,7 @@
 
 #include "nautilus-tree-sidebar-model.h"
 #include "file-manager/fm-properties-window.h"
+#include "nautilus-window-slot.h"
 
 #include <libnautilus-private/nautilus-clipboard.h>
 #include <libnautilus-private/nautilus-clipboard-monitor.h>
@@ -47,8 +48,6 @@
 #include <libnautilus-private/nautilus-program-choosing.h>
 #include <libnautilus-private/nautilus-tree-view-drag-dest.h>
 #include <libnautilus-private/nautilus-module.h>
-#include <libnautilus-private/nautilus-window-info.h>
-#include <libnautilus-private/nautilus-window-slot-info.h>
 
 #include <string.h>
 #include <eel/eel-gtk-extensions.h>
@@ -69,7 +68,7 @@ typedef struct {
 
 
 struct FMTreeViewDetails {
-	NautilusWindowInfo *window;
+	NautilusWindow *window;
 	GtkTreeView *tree_widget;
 	GtkTreeModelSort *sort_model;
 	FMTreeModel *child_model;
@@ -336,7 +335,7 @@ got_activation_uri_callback (NautilusFile *file, gpointer callback_data)
         FMTreeView *view;
 	GdkScreen *screen;
 	GFile *location;
-	NautilusWindowSlotInfo *slot;
+	NautilusWindowSlot *slot;
 	gboolean open_in_same_slot;
 	
         view = FM_TREE_VIEW (callback_data);
@@ -350,7 +349,7 @@ got_activation_uri_callback (NautilusFile *file, gpointer callback_data)
 		 (NAUTILUS_WINDOW_OPEN_FLAG_NEW_WINDOW |
 		  NAUTILUS_WINDOW_OPEN_FLAG_NEW_TAB)) == 0;
 
-	slot = nautilus_window_info_get_active_slot (view->details->window);
+	slot = nautilus_window_get_active_slot (view->details->window);
 
 	uri = nautilus_file_get_activation_uri (file);
 	if (nautilus_file_is_launcher (file)) {
@@ -370,12 +369,12 @@ got_activation_uri_callback (NautilusFile *file, gpointer callback_data)
 			DEBUG ("Tree sidebar, opening location %s", uri);
 
 			location = g_file_new_for_uri (uri);
-			nautilus_window_slot_info_open_location
+			nautilus_window_slot_open_location_full
 				(slot,
 				 location, 
 				 NAUTILUS_WINDOW_OPEN_ACCORDING_TO_MODE,
 				 view->details->activation_flags,
-				 NULL);
+				 NULL, NULL, NULL);
 			g_object_unref (location);
 		} else {
 			DEBUG ("Tree sidebar, launching application for %s", file_uri);
@@ -397,12 +396,12 @@ got_activation_uri_callback (NautilusFile *file, gpointer callback_data)
 			DEBUG ("Tree sidebar, opening location %s", uri);
 
 			location = g_file_new_for_uri (uri);
-			nautilus_window_slot_info_open_location
+			nautilus_window_slot_open_location_full
 				(slot,
 				 location,
 				 NAUTILUS_WINDOW_OPEN_ACCORDING_TO_MODE,
 				 view->details->activation_flags,
-				 NULL);
+				 NULL, NULL, NULL);
 			g_object_unref (location);
 		}
 	}
@@ -911,7 +910,7 @@ copy_or_cut_files (FMTreeView *view,
 	}
 	g_free (name);
 	
-	nautilus_window_info_push_status (view->details->window,
+	nautilus_window_push_status (view->details->window,
 					  status_string);
 	g_free (status_string);
 }
@@ -943,7 +942,7 @@ paste_clipboard_data (FMTreeView *view,
 									 copied_files_atom);
 
 	if (item_uris == NULL|| destination_uri == NULL) {
-		nautilus_window_info_push_status (view->details->window,
+		nautilus_window_push_status (view->details->window,
 						  _("There is nothing on the clipboard to paste."));
 	} else {
 		nautilus_file_operations_copy_move
@@ -1292,7 +1291,7 @@ create_tree (FMTreeView *view)
 	GList *mounts, *l;
 	char *location;
 	GIcon *icon;
-	NautilusWindowSlotInfo *slot;
+	NautilusWindowSlot *slot;
 	
 	view->details->child_model = fm_tree_model_new ();
 	view->details->sort_model = GTK_TREE_MODEL_SORT
@@ -1394,8 +1393,8 @@ create_tree (FMTreeView *view)
 			  "button_press_event", G_CALLBACK (button_pressed_callback),
 			  view);
 
-	slot = nautilus_window_info_get_active_slot (view->details->window);
-	location = nautilus_window_slot_info_get_current_location (slot);
+	slot = nautilus_window_get_active_slot (view->details->window);
+	location = nautilus_window_slot_get_current_location (slot);
 	schedule_select_and_show_location (view, location);
 	g_free (location);
 }
@@ -1409,7 +1408,7 @@ update_filtering_from_preferences (FMTreeView *view)
 		return;
 	}
 
-	mode = nautilus_window_info_get_hidden_files_mode (view->details->window);
+	mode = nautilus_window_get_hidden_files_mode (view->details->window);
 
 	if (mode == NAUTILUS_WINDOW_SHOW_HIDDEN_FILES_DEFAULT) {
 		fm_tree_model_set_show_hidden_files
@@ -1448,7 +1447,7 @@ filtering_changed_callback (gpointer callback_data)
 }
 
 static void
-loading_uri_callback (NautilusWindowInfo *window,
+loading_uri_callback (NautilusWindow *window,
 		      char *location,
 		      gpointer callback_data)
 {
@@ -1584,7 +1583,7 @@ fm_tree_view_class_init (FMTreeViewClass *class)
 	copied_files_atom = gdk_atom_intern ("x-special/gnome-copied-files", FALSE);
 }
 static void 
-hidden_files_mode_changed_callback (NautilusWindowInfo *window,
+hidden_files_mode_changed_callback (NautilusWindow *window,
 				    FMTreeView *view)
 {
 	update_filtering_from_preferences (view);
@@ -1592,18 +1591,18 @@ hidden_files_mode_changed_callback (NautilusWindowInfo *window,
 
 static void
 fm_tree_view_set_parent_window (FMTreeView *sidebar,
-				NautilusWindowInfo *window)
+				NautilusWindow *window)
 {
 	char *location;
-	NautilusWindowSlotInfo *slot;
+	NautilusWindowSlot *slot;
 	
 	sidebar->details->window = window;
 
-	slot = nautilus_window_info_get_active_slot (window);
+	slot = nautilus_window_get_active_slot (window);
 
 	g_signal_connect_object (window, "loading_uri",
 				 G_CALLBACK (loading_uri_callback), sidebar, 0);
-	location = nautilus_window_slot_info_get_current_location (slot);
+	location = nautilus_window_slot_get_current_location (slot);
 	loading_uri_callback (window, location, sidebar);
 	g_free (location);
 
@@ -1613,7 +1612,7 @@ fm_tree_view_set_parent_window (FMTreeView *sidebar,
 }
 
 GtkWidget *
-nautilus_tree_sidebar_new (NautilusWindowInfo *window)
+nautilus_tree_sidebar_new (NautilusWindow *window)
 {
 	FMTreeView *sidebar;
 	
diff --git a/src/nautilus-tree-sidebar.h b/src/nautilus-tree-sidebar.h
index 69e67e1..7d57350 100644
--- a/src/nautilus-tree-sidebar.h
+++ b/src/nautilus-tree-sidebar.h
@@ -31,7 +31,7 @@
 
 #include <gtk/gtk.h>
 
-#include <libnautilus-private/nautilus-window-info.h>
+#include "nautilus-window.h"
 
 #define FM_TYPE_TREE_VIEW fm_tree_view_get_type()
 #define FM_TREE_VIEW(obj) \
@@ -61,6 +61,6 @@ typedef struct {
 
 GType fm_tree_view_get_type (void);
 
-GtkWidget *nautilus_tree_sidebar_new (NautilusWindowInfo *window);
+GtkWidget *nautilus_tree_sidebar_new (NautilusWindow *window);
 
 #endif /* FM_TREE_VIEW_H */
diff --git a/src/nautilus-view-as-action.c b/src/nautilus-view-as-action.c
index e61323c..72ebde1 100644
--- a/src/nautilus-view-as-action.c
+++ b/src/nautilus-view-as-action.c
@@ -26,12 +26,14 @@
 #include <config.h>
 
 #include "nautilus-view-as-action.h"
+
 #include "nautilus-navigation-window.h"
-#include "nautilus-window-private.h"
 #include "nautilus-navigation-window-slot.h"
+#include "nautilus-view-factory.h"
+#include "nautilus-window-private.h"
+
 #include <gtk/gtk.h>
 #include <eel/eel-gtk-extensions.h>
-#include <libnautilus-private/nautilus-view-factory.h>
 
 G_DEFINE_TYPE (NautilusViewAsAction, nautilus_view_as_action, GTK_TYPE_ACTION)
 
diff --git a/libnautilus-private/nautilus-view-factory.c b/src/nautilus-view-factory.c
similarity index 98%
rename from libnautilus-private/nautilus-view-factory.c
rename to src/nautilus-view-factory.c
index d5476c2..eddd63a 100644
--- a/libnautilus-private/nautilus-view-factory.c
+++ b/src/nautilus-view-factory.c
@@ -57,7 +57,7 @@ nautilus_view_factory_lookup (const char *id)
 
 NautilusView *
 nautilus_view_factory_create (const char *id,
-			      NautilusWindowSlotInfo *slot)
+			      NautilusWindowSlot *slot)
 {
 	const NautilusViewInfo *view_info;
 	NautilusView *view;
diff --git a/libnautilus-private/nautilus-view-factory.h b/src/nautilus-view-factory.h
similarity index 94%
rename from libnautilus-private/nautilus-view-factory.h
rename to src/nautilus-view-factory.h
index 8aa527e..20f6b01 100644
--- a/libnautilus-private/nautilus-view-factory.h
+++ b/src/nautilus-view-factory.h
@@ -28,9 +28,10 @@
 #include <string.h>
 
 #include <libnautilus-private/nautilus-view.h>
-#include <libnautilus-private/nautilus-window-slot-info.h>
 #include <gio/gio.h>
 
+#include "nautilus-window-slot.h"
+
 G_BEGIN_DECLS
 
 typedef struct _NautilusViewInfo NautilusViewInfo;
@@ -42,7 +43,7 @@ struct _NautilusViewInfo {
 	char *error_label;                 /* The foo view encountered an error. */
 	char *startup_error_label;         /* The foo view encountered an error while starting up. */
 	char *display_location_label;      /* Display this location with the foo view. */
-	NautilusView * (*create) (NautilusWindowSlotInfo *slot);
+	NautilusView * (*create) (NautilusWindowSlot *slot);
 	/* BONOBOTODO: More args here */
 	gboolean (*supports_uri) (const char *uri,
 				  GFileType file_type,
@@ -53,7 +54,7 @@ struct _NautilusViewInfo {
 void                    nautilus_view_factory_register          (NautilusViewInfo   *view_info);
 const NautilusViewInfo *nautilus_view_factory_lookup            (const char         *id);
 NautilusView *          nautilus_view_factory_create            (const char         *id,
-								 NautilusWindowSlotInfo *slot);
+								 NautilusWindowSlot *slot);
 gboolean                nautilus_view_factory_view_supports_uri (const char         *id,
 								 GFile              *location,
 								 GFileType          file_type,
diff --git a/src/nautilus-window-manage-views.c b/src/nautilus-window-manage-views.c
index 8760353..d9feeb1 100644
--- a/src/nautilus-window-manage-views.c
+++ b/src/nautilus-window-manage-views.c
@@ -37,6 +37,7 @@
 #include "nautilus-window-slot.h"
 #include "nautilus-navigation-window-slot.h"
 #include "nautilus-trash-bar.h"
+#include "nautilus-view-factory.h"
 #include "nautilus-x-content-bar.h"
 #include "nautilus-zoom-control.h"
 #include "nautilus-navigation-window-pane.h"
@@ -60,9 +61,6 @@
 #include <libnautilus-private/nautilus-module.h>
 #include <libnautilus-private/nautilus-monitor.h>
 #include <libnautilus-private/nautilus-search-directory.h>
-#include <libnautilus-private/nautilus-view-factory.h>
-#include <libnautilus-private/nautilus-window-info.h>
-#include <libnautilus-private/nautilus-window-slot-info.h>
 
 #define DEBUG_FLAG NAUTILUS_DEBUG_WINDOW
 #include <libnautilus-private/nautilus-debug.h>
@@ -108,7 +106,7 @@ static void location_has_really_changed               (NautilusWindowSlot
 static void update_for_new_location                   (NautilusWindowSlot         *slot);
 
 void
-nautilus_window_report_selection_changed (NautilusWindowInfo *window)
+nautilus_window_report_selection_changed (NautilusWindow *window)
 {
 	if (window->details->temporarily_ignore_view_signals) {
 		return;
@@ -494,6 +492,7 @@ nautilus_window_slot_open_location_full (NautilusWindowSlot *slot,
 	GList *l;
 	gboolean target_spatial, target_navigation, target_same;
 	gboolean is_desktop;
+	NautilusApplication *app;
 
 	window = slot->pane->window;
 
@@ -554,17 +553,19 @@ nautilus_window_slot_open_location_full (NautilusWindowSlot *slot,
                 return;
         }
 
+	app = nautilus_application_dup_singleton ();
+
 	/* now get/create the window according to the mode */
 	if (target_same) {
 		target_window = window;
 	} else if (target_navigation) {
 		target_window = nautilus_application_create_navigation_window
-			(window->application,
+			(app,
 			 NULL,
 			 gtk_window_get_screen (GTK_WINDOW (window)));
 	} else {
 		target_window = nautilus_application_get_spatial_window
-			(window->application,
+			(app,
 			 window,
 			 NULL,
 			 location,
@@ -572,6 +573,8 @@ nautilus_window_slot_open_location_full (NautilusWindowSlot *slot,
 			 &existing);
 	}
 
+	g_object_unref (app);
+
 	/* if the spatial window is already showing, present it and set the
 	 * new selection, if present.
 	 */
@@ -1280,8 +1283,7 @@ create_content_view (NautilusWindowSlot *slot,
         	g_object_ref (view);
         } else {
                 /* create a new content view */
-		view = nautilus_view_factory_create (view_id,
-						     NAUTILUS_WINDOW_SLOT_INFO (slot));
+		view = nautilus_view_factory_create (view_id, slot);
 
                 eel_accessibility_set_name (view, _("Content View"));
                 eel_accessibility_set_description (view, _("View of the current folder"));
diff --git a/src/nautilus-window-manage-views.h b/src/nautilus-window-manage-views.h
index dd85eda..df9bc9e 100644
--- a/src/nautilus-window-manage-views.h
+++ b/src/nautilus-window-manage-views.h
@@ -36,13 +36,8 @@ void nautilus_window_manage_views_close_slot (NautilusWindowPane *pane,
 
 
 /* NautilusWindowInfo implementation: */
-void nautilus_window_report_load_underway     (NautilusWindow     *window,
-                                               NautilusView       *view);
-void nautilus_window_report_selection_changed (NautilusWindowInfo *window);
 void nautilus_window_report_view_failed       (NautilusWindow     *window,
                                                NautilusView       *view);
-void nautilus_window_report_load_complete     (NautilusWindow     *window,
-                                               NautilusView       *view);
 void nautilus_window_report_location_change   (NautilusWindow     *window);
 void nautilus_window_update_up_button         (NautilusWindow     *window);
 
diff --git a/src/nautilus-window-menus.c b/src/nautilus-window-menus.c
index 046759b..763039a 100644
--- a/src/nautilus-window-menus.c
+++ b/src/nautilus-window-menus.c
@@ -262,8 +262,12 @@ static void
 action_undo_callback (GtkAction *action, 
 		      gpointer user_data) 
 {
-	nautilus_undo_manager_undo
-		(NAUTILUS_WINDOW (user_data)->application->undo_manager);
+	NautilusApplication *app;
+
+	app = nautilus_application_dup_singleton ();
+	nautilus_undo_manager_undo (app->undo_manager);
+
+	g_object_unref (app);
 }
 
 static void
@@ -398,7 +402,7 @@ action_show_hidden_files_callback (GtkAction *action,
 		mode = NAUTILUS_WINDOW_SHOW_HIDDEN_FILES_DISABLE;
 	}
 
-	nautilus_window_info_set_hidden_files_mode (window, mode);
+	nautilus_window_set_hidden_files_mode (window, mode);
 }
 
 static void
@@ -420,7 +424,7 @@ show_hidden_files_preference_callback (gpointer callback_data)
 		g_signal_handlers_unblock_by_func (action, action_show_hidden_files_callback, window);
 
 		/* inform views */
-		nautilus_window_info_set_hidden_files_mode (window, NAUTILUS_WINDOW_SHOW_HIDDEN_FILES_DEFAULT);
+		nautilus_window_set_hidden_files_mode (window, NAUTILUS_WINDOW_SHOW_HIDDEN_FILES_DEFAULT);
 
 	}
 }
diff --git a/src/nautilus-window-private.h b/src/nautilus-window-private.h
index 439553a..d8923b2 100644
--- a/src/nautilus-window-private.h
+++ b/src/nautilus-window-private.h
@@ -87,6 +87,8 @@ struct NautilusWindowDetails
 	 * an unmount operation.
 	 */
 	gboolean initiated_unmount;
+
+        NautilusApplication *application;
 };
 
 struct _NautilusNavigationWindowDetails {
diff --git a/src/nautilus-window-slot-dnd.c b/src/nautilus-window-slot-dnd.c
index 660619b..c735c96 100644
--- a/src/nautilus-window-slot-dnd.c
+++ b/src/nautilus-window-slot-dnd.c
@@ -42,7 +42,7 @@ typedef struct {
   } data;
 
   GFile *target_location;
-  NautilusWindowSlotInfo *target_slot;
+  NautilusWindowSlot *target_slot;
 } NautilusDragSlotProxyInfo;
 
 static gboolean
@@ -54,7 +54,7 @@ slot_proxy_drag_motion (GtkWidget          *widget,
 			gpointer            user_data)
 {
   NautilusDragSlotProxyInfo *drag_info;
-  NautilusWindowSlotInfo *target_slot;
+  NautilusWindowSlot *target_slot;
   GtkWidget *window;
   GdkAtom target;
   int action;
@@ -69,7 +69,7 @@ slot_proxy_drag_motion (GtkWidget          *widget,
   }
 
   window = gtk_widget_get_toplevel (widget);
-  g_assert (NAUTILUS_IS_WINDOW_INFO (window));
+  g_assert (NAUTILUS_IS_WINDOW (window));
 
   if (!drag_info->have_data) {
     target = gtk_drag_dest_find_target (widget, context, NULL);
@@ -88,11 +88,11 @@ slot_proxy_drag_motion (GtkWidget          *widget,
     if (drag_info->target_slot != NULL) {
       target_slot = drag_info->target_slot;
     } else {
-      target_slot = nautilus_window_info_get_active_slot (NAUTILUS_WINDOW_INFO (window));
+      target_slot = nautilus_window_get_active_slot (NAUTILUS_WINDOW (window));
     }
 
     if (target_slot != NULL) {
-      target_uri = nautilus_window_slot_info_get_current_location (target_slot);
+      target_uri = nautilus_window_slot_get_current_location (target_slot);
     }
   }
 
@@ -200,7 +200,7 @@ slot_proxy_handle_drop (GtkWidget                *widget,
 			NautilusDragSlotProxyInfo *drag_info)
 {
   GtkWidget *window;
-  NautilusWindowSlotInfo *target_slot;
+  NautilusWindowSlot *target_slot;
   NautilusView *target_view;
   char *target_uri;
   GList *uri_list;
@@ -213,24 +213,24 @@ slot_proxy_handle_drop (GtkWidget                *widget,
   }
 
   window = gtk_widget_get_toplevel (widget);
-  g_assert (NAUTILUS_IS_WINDOW_INFO (window));
+  g_assert (NAUTILUS_IS_WINDOW (window));
 
   if (drag_info->target_slot != NULL) {
     target_slot = drag_info->target_slot;
   } else {
-    target_slot = nautilus_window_info_get_active_slot (NAUTILUS_WINDOW_INFO (window));
+    target_slot = nautilus_window_get_active_slot (NAUTILUS_WINDOW (window));
   }
 
   target_uri = NULL;
   if (drag_info->target_location != NULL) {
     target_uri = g_file_get_uri (drag_info->target_location);
   } else if (target_slot != NULL) {
-    target_uri = nautilus_window_slot_info_get_current_location (target_slot);
+    target_uri = nautilus_window_slot_get_current_location (target_slot);
   }
 
   target_view = NULL;
   if (target_slot != NULL) {
-    target_view = nautilus_window_slot_info_get_current_view (target_slot);
+    target_view = nautilus_window_slot_get_current_view (target_slot);
   }
 
   if (target_slot != NULL && target_view != NULL) {
diff --git a/src/nautilus-window-slot.c b/src/nautilus-window-slot.c
index d7313c0..5220ef4 100644
--- a/src/nautilus-window-slot.c
+++ b/src/nautilus-window-slot.c
@@ -29,7 +29,6 @@
 #include "nautilus-window-manage-views.h"
 #include <libnautilus-private/nautilus-file.h>
 #include <libnautilus-private/nautilus-file-utilities.h>
-#include <libnautilus-private/nautilus-window-slot-info.h>
 #include <eel/eel-gtk-macros.h>
 #include <eel/eel-string.h>
 
@@ -37,15 +36,17 @@ static void nautilus_window_slot_init       (NautilusWindowSlot *slot);
 static void nautilus_window_slot_class_init (NautilusWindowSlotClass *class);
 static void nautilus_window_slot_dispose    (GObject *object);
 
-static void nautilus_window_slot_info_iface_init (NautilusWindowSlotInfoIface *iface);
-
-G_DEFINE_TYPE_WITH_CODE (NautilusWindowSlot,
-			 nautilus_window_slot,
-			 G_TYPE_OBJECT,
-			 G_IMPLEMENT_INTERFACE (NAUTILUS_TYPE_WINDOW_SLOT_INFO,
-						nautilus_window_slot_info_iface_init))
+G_DEFINE_TYPE (NautilusWindowSlot, nautilus_window_slot, G_TYPE_OBJECT);
 #define parent_class nautilus_window_slot_parent_class
 
+enum {
+	ACTIVE,
+	INACTIVE,
+	LAST_SIGNAL
+};
+
+static guint signals[LAST_SIGNAL] = { 0 };
+
 static void
 query_editor_changed_callback (NautilusSearchBar *bar,
 			       NautilusQuery *query,
@@ -125,23 +126,6 @@ real_active (NautilusWindowSlot *slot)
 }
 
 static void
-nautilus_window_slot_active (NautilusWindowSlot *slot)
-{
-	NautilusWindow *window;
-	NautilusWindowPane *pane;
-
-	g_assert (NAUTILUS_IS_WINDOW_SLOT (slot));
-
-	pane = NAUTILUS_WINDOW_PANE (slot->pane);
-	window = NAUTILUS_WINDOW (slot->pane->window);
-	g_assert (g_list_find (pane->slots, slot) != NULL);
-	g_assert (slot == window->details->active_pane->active_slot);
-
-	EEL_CALL_METHOD (NAUTILUS_WINDOW_SLOT_CLASS, slot,
-			 active, (slot));
-}
-
-static void
 real_inactive (NautilusWindowSlot *slot)
 {
 	NautilusWindow *window;
@@ -151,25 +135,6 @@ real_inactive (NautilusWindowSlot *slot)
 }
 
 static void
-nautilus_window_slot_inactive (NautilusWindowSlot *slot)
-{
-	NautilusWindow *window;
-	NautilusWindowPane *pane;
-
-	g_assert (NAUTILUS_IS_WINDOW_SLOT (slot));
-
-	pane = NAUTILUS_WINDOW_PANE (slot->pane);
-	window = NAUTILUS_WINDOW (pane->window);
-
-	g_assert (g_list_find (pane->slots, slot) != NULL);
-	g_assert (slot == window->details->active_pane->active_slot);
-
-	EEL_CALL_METHOD (NAUTILUS_WINDOW_SLOT_CLASS, slot,
-			 inactive, (slot));
-}
-
-
-static void
 nautilus_window_slot_init (NautilusWindowSlot *slot)
 {
 	GtkWidget *content_box, *eventbox, *extras_vbox, *frame;
@@ -206,22 +171,29 @@ nautilus_window_slot_class_init (NautilusWindowSlotClass *class)
 {
 	class->active = real_active;
 	class->inactive = real_inactive;
-	class->update_query_editor = real_update_query_editor; 
+	class->update_query_editor = real_update_query_editor;
+
+	signals[ACTIVE] =
+		g_signal_new ("active",
+			      G_TYPE_FROM_CLASS (class),
+			      G_SIGNAL_RUN_LAST,
+			      G_STRUCT_OFFSET (NautilusWindowSlotClass, active),
+			      NULL, NULL,
+			      g_cclosure_marshal_VOID__VOID,
+			      G_TYPE_NONE, 0);
+
+	signals[INACTIVE] =
+		g_signal_new ("inactive",
+			      G_TYPE_FROM_CLASS (class),
+			      G_SIGNAL_RUN_LAST,
+			      G_STRUCT_OFFSET (NautilusWindowSlotClass, inactive),
+			      NULL, NULL,
+			      g_cclosure_marshal_VOID__VOID,
+			      G_TYPE_NONE, 0);
 
 	G_OBJECT_CLASS (class)->dispose = nautilus_window_slot_dispose;
 }
 
-static int
-nautilus_window_slot_get_selection_count (NautilusWindowSlot *slot)
-{
-	g_assert (NAUTILUS_IS_WINDOW_SLOT (slot));
-
-	if (slot->content_view != NULL) {
-		return nautilus_view_get_selection_count (slot->content_view);
-	}
-	return 0;
-}
-
 GFile *
 nautilus_window_slot_get_location (NautilusWindowSlot *slot)
 {
@@ -235,7 +207,7 @@ nautilus_window_slot_get_location (NautilusWindowSlot *slot)
 }
 
 char *
-nautilus_window_slot_get_location_uri (NautilusWindowSlotInfo *slot)
+nautilus_window_slot_get_location_uri (NautilusWindowSlot *slot)
 {
 	g_assert (NAUTILUS_IS_WINDOW_SLOT (slot));
 
@@ -245,7 +217,7 @@ nautilus_window_slot_get_location_uri (NautilusWindowSlotInfo *slot)
 	return NULL;
 }
 
-static void
+void
 nautilus_window_slot_make_hosting_pane_active (NautilusWindowSlot *slot)
 {
 	g_assert (NAUTILUS_IS_WINDOW_SLOT (slot));
@@ -275,7 +247,7 @@ nautilus_window_slot_get_title (NautilusWindowSlot *slot)
 	return title;
 }
 
-static NautilusWindow *
+NautilusWindow *
 nautilus_window_slot_get_window (NautilusWindowSlot *slot)
 {
 	g_assert (NAUTILUS_IS_WINDOW_SLOT (slot));
@@ -554,13 +526,9 @@ nautilus_window_slot_add_current_location_to_history_list (NautilusWindowSlot *s
 }
 
 /* returns either the pending or the actual current location - used by side panes. */
-static char *
-real_slot_info_get_current_location (NautilusWindowSlotInfo *info)
+char *
+nautilus_window_slot_get_current_location (NautilusWindowSlot *slot)
 {
-	NautilusWindowSlot *slot;
-
-	slot = NAUTILUS_WINDOW_SLOT (info);
-
 	if (slot->pending_location != NULL) {
 		return g_file_get_uri (slot->pending_location);
 	}
@@ -573,13 +541,9 @@ real_slot_info_get_current_location (NautilusWindowSlotInfo *info)
 	return NULL;
 }
 
-static NautilusView *
-real_slot_info_get_current_view (NautilusWindowSlotInfo *info)
+NautilusView *
+nautilus_window_slot_get_current_view (NautilusWindowSlot *slot)
 {
-	NautilusWindowSlot *slot;
-
-	slot = NAUTILUS_WINDOW_SLOT (info);
-
 	if (slot->content_view != NULL) {
 		return g_object_ref (slot->content_view);
 	} else if (slot->new_content_view) {
@@ -649,19 +613,3 @@ nautilus_window_slot_dispose (GObject *object)
 
 	G_OBJECT_CLASS (parent_class)->dispose (object);
 }
-
-static void
-nautilus_window_slot_info_iface_init (NautilusWindowSlotInfoIface *iface)
-{
-	iface->active = nautilus_window_slot_active;
-	iface->inactive = nautilus_window_slot_inactive;
-	iface->get_window = nautilus_window_slot_get_window;
-	iface->get_selection_count = nautilus_window_slot_get_selection_count;
-	iface->get_current_location = real_slot_info_get_current_location;
-	iface->get_current_view = real_slot_info_get_current_view;
-	iface->set_status = nautilus_window_slot_set_status;
-	iface->get_title = nautilus_window_slot_get_title;
-	iface->open_location = nautilus_window_slot_open_location_full;
-	iface->make_hosting_pane_active = nautilus_window_slot_make_hosting_pane_active; 
-}
-
diff --git a/src/nautilus-window-slot.h b/src/nautilus-window-slot.h
index 1bef567..220c772 100644
--- a/src/nautilus-window-slot.h
+++ b/src/nautilus-window-slot.h
@@ -189,4 +189,9 @@ void    nautilus_window_slot_add_current_location_to_history_list (NautilusWindo
 
 void    nautilus_window_slot_is_in_active_pane (NautilusWindowSlot *slot, gboolean is_active);
 
+NautilusView * nautilus_window_slot_get_current_view     (NautilusWindowSlot *slot);
+char         * nautilus_window_slot_get_current_location (NautilusWindowSlot *slot);
+NautilusWindow * nautilus_window_slot_get_window         (NautilusWindowSlot *slot);
+void           nautilus_window_slot_make_hosting_pane_active (NautilusWindowSlot *slot);
+
 #endif /* NAUTILUS_WINDOW_SLOT_H */
diff --git a/src/nautilus-window.c b/src/nautilus-window.c
index 6170d44..8bfd22d 100644
--- a/src/nautilus-window.c
+++ b/src/nautilus-window.c
@@ -39,6 +39,7 @@
 #include "nautilus-navigation-window-slot.h"
 #include "nautilus-search-bar.h"
 #include "nautilus-src-marshal.h"
+#include "nautilus-view-factory.h"
 #include "nautilus-window-manage-views.h"
 #include "nautilus-window-bookmarks.h"
 #include "nautilus-window-slot.h"
@@ -60,7 +61,6 @@
 #include <libnautilus-private/nautilus-global-preferences.h>
 #include <libnautilus-private/nautilus-metadata.h>
 #include <libnautilus-private/nautilus-program-choosing.h>
-#include <libnautilus-private/nautilus-view-factory.h>
 #include <libnautilus-private/nautilus-clipboard.h>
 #include <libnautilus-private/nautilus-undo.h>
 #include <libnautilus-private/nautilus-search-directory.h>
@@ -90,6 +90,9 @@ enum {
 	PROMPT_FOR_LOCATION,
 	ZOOM_CHANGED,
 	VIEW_AS_CHANGED,
+	LOADING_URI,
+	SELECTION_CHANGED,
+	HIDDEN_FILES_MODE_CHANGED,
 	LAST_SIGNAL
 };
 
@@ -101,15 +104,12 @@ typedef struct  {
 } ActivateViewData;
 
 static void cancel_view_as_callback         (NautilusWindowSlot      *slot);
-static void nautilus_window_info_iface_init (NautilusWindowInfoIface *iface);
 static void action_view_as_callback         (GtkAction               *action,
 					     ActivateViewData        *data);
 
 static GList *history_list;
 
-G_DEFINE_TYPE_WITH_CODE (NautilusWindow, nautilus_window, GTK_TYPE_WINDOW,
-			 G_IMPLEMENT_INTERFACE (NAUTILUS_TYPE_WINDOW_INFO,
-						nautilus_window_info_iface_init));
+G_DEFINE_TYPE (NautilusWindow, nautilus_window, GTK_TYPE_WINDOW);
 
 static const struct {
 	unsigned int keyval;
@@ -187,7 +187,7 @@ nautilus_window_ui_update (NautilusWindow *window)
 	gtk_ui_manager_ensure_update (window->details->ui_manager);
 }
 
-static void
+void
 nautilus_window_push_status (NautilusWindow *window,
 			     const char *text)
 {
@@ -422,21 +422,6 @@ nautilus_window_prompt_for_location (NautilusWindow *window,
                          prompt_for_location, (window, initial));
 }
 
-static char *
-nautilus_window_get_location_uri (NautilusWindow *window)
-{
-	NautilusWindowSlot *slot;
-
-	g_assert (NAUTILUS_IS_WINDOW (window));
-
-	slot = window->details->active_pane->active_slot;
-
-	if (slot->location) {
-		return g_file_get_uri (slot->location);
-	}
-	return NULL;
-}
-
 void
 nautilus_window_zoom_in (NautilusWindow *window)
 {
@@ -523,7 +508,7 @@ nautilus_window_constructed (GObject *self)
 
 	nautilus_window_initialize_bookmarks_menu (window);
 	nautilus_window_set_initial_window_geometry (window);
-	nautilus_undo_manager_attach (window->application->undo_manager, G_OBJECT (window));
+	nautilus_undo_manager_attach (window->details->application->undo_manager, G_OBJECT (window));
 }
 
 static void
@@ -538,7 +523,7 @@ nautilus_window_set_property (GObject *object,
 	
 	switch (arg_id) {
 	case ARG_APP:
-		window->application = NAUTILUS_APPLICATION (g_value_get_object (value));
+		window->details->application = NAUTILUS_APPLICATION (g_value_get_object (value));
 		break;
 	}
 }
@@ -551,7 +536,7 @@ nautilus_window_get_property (GObject *object,
 {
 	switch (arg_id) {
 	case ARG_APP:
-		g_value_set_object (value, NAUTILUS_WINDOW (object)->application);
+		g_value_set_object (value, NAUTILUS_WINDOW (object)->details->application);
 		break;
 	}
 }
@@ -656,7 +641,7 @@ nautilus_window_show_window (NautilusWindow    *window)
 	}
 }
 
-static void
+void
 nautilus_window_view_visible (NautilusWindow *window,
 			      NautilusView *view)
 {
@@ -1360,20 +1345,6 @@ real_get_title (NautilusWindow *window)
 	return nautilus_window_slot_get_title (window->details->active_pane->active_slot);
 }
 
-static void
-real_sync_title (NautilusWindow *window,
-		 NautilusWindowSlot *slot)
-{
-	char *copy;
-
-	if (slot == window->details->active_pane->active_slot) {
-		copy = g_strdup (slot->title);
-		g_signal_emit_by_name (window, "title_changed",
-				       slot->title);
-		g_free (copy);
-	}
-}
-
 void
 nautilus_window_sync_title (NautilusWindow *window,
 			    NautilusWindowSlot *slot)
@@ -1788,14 +1759,7 @@ nautilus_get_history_list (void)
 	return history_list;
 }
 
-static GList *
-nautilus_window_get_history (NautilusWindow *window)
-{
-	return eel_g_object_list_copy (history_list);
-}
-
-
-static NautilusWindowType
+NautilusWindowType
 nautilus_window_get_window_type (NautilusWindow *window)
 {
 	g_assert (NAUTILUS_IS_WINDOW (window));
@@ -1803,7 +1767,7 @@ nautilus_window_get_window_type (NautilusWindow *window)
 	return NAUTILUS_WINDOW_GET_CLASS (window)->window_type;
 }
 
-static int
+int
 nautilus_window_get_selection_count (NautilusWindow *window)
 {
 	NautilusWindowSlot *slot;
@@ -1819,7 +1783,7 @@ nautilus_window_get_selection_count (NautilusWindow *window)
 	return 0;
 }
 
-static GList *
+GList *
 nautilus_window_get_selection (NautilusWindow *window)
 {
 	NautilusWindowSlot *slot;
@@ -1834,14 +1798,14 @@ nautilus_window_get_selection (NautilusWindow *window)
 	return NULL;
 }
 
-static NautilusWindowShowHiddenFilesMode
-nautilus_window_get_hidden_files_mode (NautilusWindowInfo *window)
+NautilusWindowShowHiddenFilesMode
+nautilus_window_get_hidden_files_mode (NautilusWindow *window)
 {
 	return window->details->show_hidden_files_mode;
 }
 
-static void
-nautilus_window_set_hidden_files_mode (NautilusWindowInfo *window,
+void
+nautilus_window_set_hidden_files_mode (NautilusWindow *window,
 				       NautilusWindowShowHiddenFilesMode  mode)
 {
 	window->details->show_hidden_files_mode = mode;
@@ -1849,31 +1813,13 @@ nautilus_window_set_hidden_files_mode (NautilusWindowInfo *window,
 	g_signal_emit_by_name (window, "hidden_files_mode_changed");
 }
 
-static gboolean
-nautilus_window_get_initiated_unmount (NautilusWindowInfo *window)
-{
-	return window->details->initiated_unmount;
-}
-
-static void
-nautilus_window_set_initiated_unmount (NautilusWindowInfo *window,
+void
+nautilus_window_set_initiated_unmount (NautilusWindow *window,
 				       gboolean initiated_unmount)
 {
 	window->details->initiated_unmount = initiated_unmount;
 }
 
-static char *
-nautilus_window_get_cached_title (NautilusWindow *window)
-{
-	NautilusWindowSlot *slot;
-
-	g_assert (NAUTILUS_IS_WINDOW (window));
-
-	slot = window->details->active_pane->active_slot;
-
-	return g_strdup (slot->title);
-}
-
 NautilusWindowSlot *
 nautilus_window_get_active_slot (NautilusWindow *window)
 {
@@ -1928,31 +1874,6 @@ nautilus_window_get_slots (NautilusWindow *window)
 }
 
 static void
-nautilus_window_info_iface_init (NautilusWindowInfoIface *iface)
-{
-	iface->report_load_underway = nautilus_window_report_load_underway;
-	iface->report_load_complete = nautilus_window_report_load_complete;
-	iface->report_selection_changed = nautilus_window_report_selection_changed;
-	iface->report_view_failed = nautilus_window_report_view_failed;
-	iface->view_visible = nautilus_window_view_visible;
-	iface->close_window = nautilus_window_close;
-	iface->push_status = nautilus_window_push_status;
-	iface->get_window_type = nautilus_window_get_window_type;
-	iface->get_title = nautilus_window_get_cached_title;
-	iface->get_history = nautilus_window_get_history;
-	iface->get_current_location = nautilus_window_get_location_uri;
-	iface->get_ui_manager = nautilus_window_get_ui_manager;
-	iface->get_selection_count = nautilus_window_get_selection_count;
-	iface->get_selection = nautilus_window_get_selection;
-	iface->get_hidden_files_mode = nautilus_window_get_hidden_files_mode;
-	iface->set_hidden_files_mode = nautilus_window_set_hidden_files_mode;
-	iface->get_active_slot = nautilus_window_get_active_slot;
-	iface->get_extra_slot = nautilus_window_get_extra_slot;
-	iface->get_initiated_unmount = nautilus_window_get_initiated_unmount;
-	iface->set_initiated_unmount = nautilus_window_set_initiated_unmount;
-}
-
-static void
 nautilus_window_class_init (NautilusWindowClass *class)
 {
 	GtkBindingSet *binding_set;
@@ -1969,7 +1890,6 @@ nautilus_window_class_init (NautilusWindowClass *class)
 	GTK_WIDGET_CLASS (class)->realize = nautilus_window_realize;
 	GTK_WIDGET_CLASS (class)->key_press_event = nautilus_window_key_press_event;
 	class->get_title = real_get_title;
-	class->sync_title = real_sync_title;
 	class->set_allow_up = real_set_allow_up;
 	class->close_slot = real_close_slot;
 
@@ -2024,6 +1944,34 @@ nautilus_window_class_init (NautilusWindowClass *class)
 			      g_cclosure_marshal_VOID__VOID,
 			      G_TYPE_NONE, 0);
 
+	signals[HIDDEN_FILES_MODE_CHANGED] =
+		g_signal_new ("hidden_files_mode_changed",
+			      G_TYPE_FROM_CLASS (class),
+			      G_SIGNAL_RUN_LAST,
+			      0,
+			      NULL, NULL,
+			      g_cclosure_marshal_VOID__VOID,
+			      G_TYPE_NONE, 0);
+
+	signals[LOADING_URI] =
+		g_signal_new ("loading_uri",
+			      G_TYPE_FROM_CLASS (class),
+			      G_SIGNAL_RUN_LAST,
+			      0,
+			      NULL, NULL,
+			      g_cclosure_marshal_VOID__STRING,
+			      G_TYPE_NONE, 1,
+			      G_TYPE_STRING);
+
+	signals[SELECTION_CHANGED] =
+		g_signal_new ("selection_changed",
+			      G_TYPE_FROM_CLASS (class),
+			      G_SIGNAL_RUN_LAST,
+			      0,
+			      NULL, NULL,
+			      g_cclosure_marshal_VOID__VOID,
+			      G_TYPE_NONE, 0);
+
 	binding_set = gtk_binding_set_by_class (class);
 	gtk_binding_entry_add_signal (binding_set, GDK_KEY_BackSpace, 0,
 				      "go_up", 1,
diff --git a/src/nautilus-window.h b/src/nautilus-window.h
index 278aa64..33bca79 100644
--- a/src/nautilus-window.h
+++ b/src/nautilus-window.h
@@ -32,9 +32,8 @@
 #include <gtk/gtk.h>
 #include <eel/eel-glib-extensions.h>
 #include <libnautilus-private/nautilus-bookmark.h>
-#include <libnautilus-private/nautilus-window-info.h>
 #include <libnautilus-private/nautilus-search-directory.h>
-#include "nautilus-application.h"
+#include <libnautilus-private/nautilus-view.h>
 
 #define NAUTILUS_TYPE_WINDOW nautilus_window_get_type()
 #define NAUTILUS_WINDOW(obj) \
@@ -48,33 +47,57 @@
 #define NAUTILUS_WINDOW_GET_CLASS(obj) \
   (G_TYPE_INSTANCE_GET_CLASS ((obj), NAUTILUS_TYPE_WINDOW, NautilusWindowClass))
 
-#ifndef NAUTILUS_WINDOW_DEFINED
-#define NAUTILUS_WINDOW_DEFINED
-typedef struct NautilusWindow NautilusWindow;
-#endif
+typedef enum {
+        NAUTILUS_WINDOW_SHOW_HIDDEN_FILES_DEFAULT,
+        NAUTILUS_WINDOW_SHOW_HIDDEN_FILES_ENABLE,
+        NAUTILUS_WINDOW_SHOW_HIDDEN_FILES_DISABLE
+} NautilusWindowShowHiddenFilesMode;
 
-#ifndef NAUTILUS_WINDOW_SLOT_DEFINED
-#define NAUTILUS_WINDOW_SLOT_DEFINED
-typedef struct NautilusWindowSlot NautilusWindowSlot;
-#endif
 
+typedef enum {
+        NAUTILUS_WINDOW_OPEN_ACCORDING_TO_MODE,
+        NAUTILUS_WINDOW_OPEN_IN_SPATIAL,
+        NAUTILUS_WINDOW_OPEN_IN_NAVIGATION
+} NautilusWindowOpenMode;
+
+typedef enum {
+        /* used in spatial mode */
+        NAUTILUS_WINDOW_OPEN_FLAG_CLOSE_BEHIND = 1<<0,
+        /* used in navigation mode */
+        NAUTILUS_WINDOW_OPEN_FLAG_NEW_WINDOW = 1<<1,
+        NAUTILUS_WINDOW_OPEN_FLAG_NEW_TAB = 1<<2
+} NautilusWindowOpenFlags;
+
+typedef enum {
+        NAUTILUS_WINDOW_SPATIAL,
+        NAUTILUS_WINDOW_NAVIGATION,
+        NAUTILUS_WINDOW_DESKTOP
+} NautilusWindowType;
+
+typedef struct NautilusWindow NautilusWindow;
+typedef struct NautilusWindowSlot NautilusWindowSlot;
 typedef struct _NautilusWindowPane      NautilusWindowPane;
 
 typedef struct NautilusWindowSlotClass NautilusWindowSlotClass;
-typedef enum NautilusWindowOpenSlotFlags NautilusWindowOpenSlotFlags;
 
 GType          nautilus_window_slot_get_type (void);
 
+#include "nautilus-application.h"
+
 typedef enum {
         NAUTILUS_WINDOW_NOT_SHOWN,
         NAUTILUS_WINDOW_POSITION_SET,
         NAUTILUS_WINDOW_SHOULD_SHOW
 } NautilusWindowShowState;
 
-enum NautilusWindowOpenSlotFlags {
+typedef enum {
 	NAUTILUS_WINDOW_OPEN_SLOT_NONE = 0,
 	NAUTILUS_WINDOW_OPEN_SLOT_APPEND = 1
-};
+}  NautilusWindowOpenSlotFlags;
+
+typedef void (* NautilusWindowGoToCallback) (NautilusWindow *window,
+                                             GError *error,
+                                             gpointer user_data);
 
 typedef struct NautilusWindowDetails NautilusWindowDetails;
 
@@ -116,8 +139,6 @@ struct NautilusWindow {
         GtkWindow parent_object;
         
         NautilusWindowDetails *details;
-        
-        NautilusApplication *application;
 };
 
 GType            nautilus_window_get_type             (void);
@@ -157,4 +178,27 @@ void             nautilus_window_allow_stop           (NautilusWindow    *window
                                                        gboolean           allow);
 GtkUIManager *   nautilus_window_get_ui_manager       (NautilusWindow    *window);
 
+
+void                 nautilus_window_report_selection_changed (NautilusWindow *window);
+void                 nautilus_window_report_load_complete     (NautilusWindow *window,
+                                                               NautilusView *view);
+
+NautilusWindowSlot * nautilus_window_get_extra_slot       (NautilusWindow *window);
+NautilusWindowShowHiddenFilesMode
+                     nautilus_window_get_hidden_files_mode (NautilusWindow *window);
+void                 nautilus_window_set_hidden_files_mode (NautilusWindow *window,
+                                                            NautilusWindowShowHiddenFilesMode  mode);
+NautilusWindowType   nautilus_window_get_window_type       (NautilusWindow *window);
+void                 nautilus_window_report_load_underway  (NautilusWindow *window,
+                                                            NautilusView *view);
+void                 nautilus_window_view_visible          (NautilusWindow *window,
+                                                            NautilusView *view);
+void                 nautilus_window_set_initiated_unmount (NautilusWindow *window,
+                                                            gboolean initiated_unmount);
+NautilusWindowSlot * nautilus_window_get_active_slot       (NautilusWindow *window);
+void                 nautilus_window_push_status           (NautilusWindow *window,
+                                                            const char *text);
+int                  nautilus_window_get_selection_count   (NautilusWindow *window);
+GList *              nautilus_window_get_selection         (NautilusWindow *window);
+
 #endif



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