summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/caja-navigation-window-menus.c9
-rw-r--r--src/caja-window.c36
-rw-r--r--src/caja-window.h1
3 files changed, 40 insertions, 6 deletions
diff --git a/src/caja-navigation-window-menus.c b/src/caja-navigation-window-menus.c
index 3eedc31b..45652ffc 100644
--- a/src/caja-navigation-window-menus.c
+++ b/src/caja-navigation-window-menus.c
@@ -607,15 +607,12 @@ action_new_window_callback (GtkAction *action,
gpointer user_data)
{
CajaWindow *current_window;
- CajaWindow *new_window;
- current_window = CAJA_WINDOW (user_data);
- new_window = caja_application_create_navigation_window (
- current_window->application,
- gtk_window_get_screen (GTK_WINDOW (current_window)));
- caja_window_go_home (new_window);
+ current_window = CAJA_WINDOW (user_data);
+ caja_window_new_window (current_window);
}
+
static void
action_new_tab_callback (GtkAction *action,
gpointer user_data)
diff --git a/src/caja-window.c b/src/caja-window.c
index 9710bb6f..f8570bcb 100644
--- a/src/caja-window.c
+++ b/src/caja-window.c
@@ -308,6 +308,42 @@ caja_window_new_tab (CajaWindow *window)
}
}
+/*Opens a new window when called from an existing window and goes to the same location that's in the existing window.*/
+void
+caja_window_new_window (CajaWindow *window)
+{
+ CajaWindowSlot *current_slot;
+ GFile *location = NULL;
+ g_return_if_fail (CAJA_IS_WINDOW (window));
+
+ /*Get and set the directory location of current window (slot).*/
+ current_slot = window->details->active_pane->active_slot;
+ location = caja_window_slot_get_location (current_slot);
+
+ if (location != NULL)
+ {
+ CajaWindow *new_window;
+ CajaWindowSlot *new_slot;
+ CajaWindowOpenFlags flags;
+ flags = FALSE;
+
+ /*Create a new window*/
+ new_window = caja_application_create_navigation_window (
+ window->application,
+ gtk_window_get_screen (GTK_WINDOW (window)));
+
+ /*Create a slot in the new window.*/
+ new_slot = new_window->details->active_pane->active_slot;
+ g_return_if_fail (CAJA_IS_WINDOW_SLOT (new_slot));
+
+ /*Open a directory at the set location in the new window (slot).*/
+ caja_window_slot_open_location_full (new_slot, location,
+ CAJA_WINDOW_OPEN_ACCORDING_TO_MODE,
+ flags, NULL, NULL, NULL);
+ g_object_unref (location);
+ }
+}
+
void
caja_window_go_up (CajaWindow *window, gboolean close_behind, gboolean new_tab)
{
diff --git a/src/caja-window.h b/src/caja-window.h
index aa5f57e0..1dc29633 100644
--- a/src/caja-window.h
+++ b/src/caja-window.h
@@ -148,6 +148,7 @@ void caja_window_go_to_with_selection (CajaWindow *window,
GList *new_selection);
void caja_window_go_home (CajaWindow *window);
void caja_window_new_tab (CajaWindow *window);
+void caja_window_new_window (CajaWindow *window);
void caja_window_go_up (CajaWindow *window,
gboolean close_behind,
gboolean new_tab);