nautilus r14247 - in branches/multiview: . src



Author: jaredm
Date: Sun Jun  8 14:12:18 2008
New Revision: 14247
URL: http://svn.gnome.org/viewvc/nautilus?rev=14247&view=rev

Log:
2008-06-08  Jared Moore  <jaredm svn gnome org>

	* src/nautilus-navigation-action.c (should_open_in_new_tab),
	(activate_back_or_forward_menu_item), (proxy_button_press_event_cb),
	(proxy_button_release_event_cb), (connect_proxy), (disconnect_proxy):
	* src/nautilus-navigation-window-menus.c (should_open_in_new_tab),
	(action_back_callback), (action_forward_callback),
	(action_new_tab_callback):
	* src/nautilus-navigation-window.c
	  (path_bar_location_changed_callback),
	  (nautilus_navigation_window_go_back),
	  (nautilus_navigation_window_go_forward):
	* src/nautilus-navigation-window.h:
	* src/nautilus-window-manage-views.c (viewed_file_changed_callback),
	(nautilus_window_slot_go_home),
	(got_file_info_for_view_selection_callback), (create_content_view),
	(nautilus_navigation_window_back_or_forward):
	* src/nautilus-window-menus.c (should_open_in_new_tabs),
	(activate_bookmark_in_menu_item), (action_home_callback),
	(action_go_to_computer_callback), (action_go_to_network_callback),
	(action_go_to_templates_callback), (action_go_to_trash_callback),
	(action_go_to_burn_cd_callback), (action_up_callback),
	(get_event_widget), (proxy_button_press_event_cb),
	(proxy_button_release_event_cb), (disconnect_proxy_cb),
	(connect_proxy_cb):
	* src/nautilus-window-slot.h:
	* src/nautilus-window.c (nautilus_window_go_to),
	(nautilus_window_go_up_signal), (nautilus_window_go_up),
	(nautilus_window_go_home):
	* src/nautilus-window.h:
	Middle click on "Home", "Computer", "Up", "Back", or "Forward" in 
	toolbar, or any entry in "Go" menu or "Bookmarks" menu to open a new 
	tab.




Modified:
   branches/multiview/ChangeLog
   branches/multiview/src/nautilus-navigation-action.c
   branches/multiview/src/nautilus-navigation-window-menus.c
   branches/multiview/src/nautilus-navigation-window.c
   branches/multiview/src/nautilus-navigation-window.h
   branches/multiview/src/nautilus-window-manage-views.c
   branches/multiview/src/nautilus-window-menus.c
   branches/multiview/src/nautilus-window-slot.h
   branches/multiview/src/nautilus-window.c
   branches/multiview/src/nautilus-window.h

Modified: branches/multiview/src/nautilus-navigation-action.c
==============================================================================
--- branches/multiview/src/nautilus-navigation-action.c	(original)
+++ branches/multiview/src/nautilus-navigation-action.c	Sun Jun  8 14:12:18 2008
@@ -87,6 +87,22 @@
 	return type;
 }
 
+static gboolean
+should_open_in_new_tab (void)
+{
+	/* FIXME this is duplicated */
+	GdkEvent *event;
+
+	event = gtk_get_current_event ();
+	if (event->type == GDK_BUTTON_PRESS || event->type == GDK_BUTTON_RELEASE) {
+		return event->button.button == 2;
+	}
+
+	gdk_event_free (event);
+
+	return FALSE;
+}
+
 static void
 activate_back_or_forward_menu_item (GtkMenuItem *menu_item, 
 				    NautilusNavigationWindow *window,
@@ -99,7 +115,7 @@
 
 	index = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (menu_item), "user_data"));
 
-	nautilus_navigation_window_back_or_forward (window, back, index);
+	nautilus_navigation_window_back_or_forward (window, back, index, should_open_in_new_tab ());
 }
 
 static void
@@ -181,6 +197,30 @@
 	}
 }
 
+static gboolean
+proxy_button_press_event_cb (GtkButton *button,
+			     GdkEventButton *event,
+			     gpointer user_data)
+{
+	if (event->button == 2) {
+		gtk_button_pressed (button);
+	}
+
+	return FALSE;
+}
+
+static gboolean
+proxy_button_release_event_cb (GtkButton *button,
+			       GdkEventButton *event,
+			       gpointer user_data)
+{
+	if (event->button == 2) {
+		gtk_button_released (button);
+	}
+
+	return FALSE;
+}
+
 static void
 connect_proxy (GtkAction *action, GtkWidget *proxy)
 {
@@ -188,6 +228,8 @@
 		NautilusNavigationAction *naction = NAUTILUS_NAVIGATION_ACTION (action);
 		GtkMenuToolButton *button = GTK_MENU_TOOL_BUTTON (proxy);
 		GtkWidget *menu;
+		GtkContainer *container;
+		GtkWidget *child;
 
 		/* set an empty menu, so the arrow button becomes sensitive */
 		menu = gtk_menu_new ();
@@ -198,6 +240,13 @@
 		
 		g_signal_connect (proxy, "show-menu",
 				  G_CALLBACK (show_menu_callback), action);
+
+		/* Make sure that middle click works. Note that there is some code duplication
+		 * between here and nautilus-window-menus.c */
+		container = GTK_CONTAINER (gtk_bin_get_child (GTK_BIN (proxy)));
+		child = GTK_WIDGET (gtk_container_get_children (container)->data);
+		g_signal_connect (child, "button-press-event", G_CALLBACK (proxy_button_press_event_cb), NULL);
+		g_signal_connect (child, "button-release-event", G_CALLBACK (proxy_button_release_event_cb), NULL);
 	}
 
 	(* GTK_ACTION_CLASS (parent_class)->connect_proxy) (action, proxy);
@@ -207,7 +256,15 @@
 disconnect_proxy (GtkAction *action, GtkWidget *proxy)
 {
 	if (GTK_IS_MENU_TOOL_BUTTON (proxy)) {
+		GtkContainer *container;
+		GtkWidget *child;
+		
 		g_signal_handlers_disconnect_by_func (proxy, G_CALLBACK (show_menu_callback), action);
+
+		container = GTK_CONTAINER (gtk_bin_get_child (GTK_BIN (proxy)));
+		child = GTK_WIDGET (gtk_container_get_children (container)->data);
+		g_signal_handlers_disconnect_by_func (child, G_CALLBACK (proxy_button_press_event_cb), NULL);
+		g_signal_handlers_disconnect_by_func (child, G_CALLBACK (proxy_button_release_event_cb), NULL);
 	}
 
 	(* GTK_ACTION_CLASS (parent_class)->disconnect_proxy) (action, proxy);

Modified: branches/multiview/src/nautilus-navigation-window-menus.c
==============================================================================
--- branches/multiview/src/nautilus-navigation-window-menus.c	(original)
+++ branches/multiview/src/nautilus-navigation-window-menus.c	Sun Jun  8 14:12:18 2008
@@ -74,18 +74,36 @@
 	nautilus_application_close_all_navigation_windows ();
 }
 
+static gboolean
+should_open_in_new_tab (void)
+{
+	/* FIXME this is duplicated */
+	GdkEvent *event;
+
+	event = gtk_get_current_event ();
+	if (event->type == GDK_BUTTON_PRESS || event->type == GDK_BUTTON_RELEASE) {
+		return event->button.button == 2;
+	}
+
+	gdk_event_free (event);
+
+	return FALSE;
+}
+
 static void
 action_back_callback (GtkAction *action, 
 		      gpointer user_data) 
 {
-	nautilus_navigation_window_go_back (NAUTILUS_NAVIGATION_WINDOW (user_data));
+	nautilus_navigation_window_back_or_forward (NAUTILUS_NAVIGATION_WINDOW (user_data), 
+						    TRUE, 0, should_open_in_new_tab ());
 }
 
 static void
 action_forward_callback (GtkAction *action, 
 			 gpointer user_data) 
 {
-	nautilus_navigation_window_go_forward (NAUTILUS_NAVIGATION_WINDOW (user_data));
+	nautilus_navigation_window_back_or_forward (NAUTILUS_NAVIGATION_WINDOW (user_data), 
+			                            TRUE, 0, should_open_in_new_tab ());
 }
 
 static void
@@ -672,7 +690,7 @@
 
 		new_slot = nautilus_window_open_slot (window, flags);
 		nautilus_window_set_active_slot (window, new_slot);
-		nautilus_window_slot_go_to (new_slot, current_location);
+		nautilus_window_slot_go_to (new_slot, current_location, FALSE);
 		g_object_unref (current_location);
 	}
 }

Modified: branches/multiview/src/nautilus-navigation-window.c
==============================================================================
--- branches/multiview/src/nautilus-navigation-window.c	(original)
+++ branches/multiview/src/nautilus-navigation-window.c	Sun Jun  8 14:12:18 2008
@@ -596,7 +596,7 @@
 	/* check whether we already visited the target location */
 	i = bookmark_list_get_uri_index (slot->back_list, location);
 	if (i >= 0) {
-		nautilus_navigation_window_back_or_forward (window, TRUE, i);
+		nautilus_navigation_window_back_or_forward (window, TRUE, i, FALSE);
 	} else {
 		nautilus_window_go_to (NAUTILUS_WINDOW (window), location);
 	}
@@ -966,13 +966,13 @@
 void
 nautilus_navigation_window_go_back (NautilusNavigationWindow *window)
 {
-	nautilus_navigation_window_back_or_forward (window, TRUE, 0);
+	nautilus_navigation_window_back_or_forward (window, TRUE, 0, FALSE);
 }
 
 void
 nautilus_navigation_window_go_forward (NautilusNavigationWindow *window)
 {
-	nautilus_navigation_window_back_or_forward (window, FALSE, 0);
+	nautilus_navigation_window_back_or_forward (window, FALSE, 0, FALSE);
 }
 
 void

Modified: branches/multiview/src/nautilus-navigation-window.h
==============================================================================
--- branches/multiview/src/nautilus-navigation-window.h	(original)
+++ branches/multiview/src/nautilus-navigation-window.h	Sun Jun  8 14:12:18 2008
@@ -112,7 +112,8 @@
 gboolean nautilus_navigation_window_status_bar_showing   (NautilusNavigationWindow *window);
 void     nautilus_navigation_window_back_or_forward      (NautilusNavigationWindow *window,
                                                           gboolean                  back,
-                                                          guint                     distance);
+                                                          guint                     distance,
+							  gboolean                  new_tab);
 void     nautilus_navigation_window_show_search          (NautilusNavigationWindow *window);
 
 #endif

Modified: branches/multiview/src/nautilus-window-manage-views.c
==============================================================================
--- branches/multiview/src/nautilus-window-manage-views.c	(original)
+++ branches/multiview/src/nautilus-window-manage-views.c	Sun Jun  8 14:12:18 2008
@@ -387,10 +387,10 @@
 						nautilus_path_bar_clear_buttons (NAUTILUS_PATH_BAR (NAUTILUS_NAVIGATION_WINDOW (window)->path_bar));
 					}
 
-					nautilus_window_slot_go_to (slot, go_to_file);
+					nautilus_window_slot_go_to (slot, go_to_file, FALSE);
 					g_object_unref (go_to_file);
 				} else {
-					nautilus_window_slot_go_home (slot);
+					nautilus_window_slot_go_home (slot, FALSE);
 				}
 			} else {
 				nautilus_window_close (window);
@@ -663,14 +663,23 @@
 }
 
 void
-nautilus_window_slot_go_home (NautilusWindowSlot *slot)
+nautilus_window_slot_go_home (NautilusWindowSlot *slot, gboolean new_tab)
 {			      
 	GFile *home;
+	NautilusWindowOpenFlags flags;
 
 	g_return_if_fail (NAUTILUS_IS_WINDOW_SLOT (slot));
 
+	if (new_tab) {
+		flags = NAUTILUS_WINDOW_OPEN_FLAG_NEW_TAB;
+	} else {
+		flags = 0;
+	}
+
 	home = g_file_new_for_path (g_get_home_dir ());
-	nautilus_window_slot_open_location (slot, home, FALSE);
+	nautilus_window_slot_open_location_full (slot, home, 
+						 NAUTILUS_WINDOW_OPEN_ACCORDING_TO_MODE, 
+						 flags, NULL);
 	g_object_unref (home);
 }
 
@@ -1120,13 +1129,13 @@
 
 				if (!nautilus_is_root_directory (location)) {
 					if (!nautilus_is_home_directory (location)) {	
-						nautilus_window_slot_go_home (NAUTILUS_WINDOW (window)->details->active_slot);
+						nautilus_window_slot_go_home (NAUTILUS_WINDOW (window)->details->active_slot, FALSE);
 					} else {
 						GFile *root;
 
 						root = g_file_new_for_path ("/");
 						/* the last fallback is to go to a known place that can't be deleted! */
-						nautilus_window_slot_go_to (NAUTILUS_WINDOW (window)->details->active_slot, location);
+						nautilus_window_slot_go_to (NAUTILUS_WINDOW (window)->details->active_slot, location, FALSE);
 						g_object_unref (root);
 					}
 				} else {
@@ -1246,7 +1255,7 @@
 	} else {
 		/* Something is busted, there was no location to load.
 		   Just load the homedir. */
-		nautilus_window_slot_go_home (slot);
+		nautilus_window_slot_go_home (slot, FALSE);
 		
 	}
 }
@@ -2160,13 +2169,12 @@
 
 void
 nautilus_navigation_window_back_or_forward (NautilusNavigationWindow *window, 
-                                            gboolean back, guint distance)
+                                            gboolean back, guint distance, gboolean new_tab)
 {
 	NautilusWindowSlot *slot;
 	NautilusNavigationWindowSlot *navigation_slot;
 	GList *list;
 	GFile *location;
-        char *scroll_pos;
         guint len;
         NautilusBookmark *bookmark;
 
@@ -2187,16 +2195,27 @@
 
         bookmark = g_list_nth_data (list, distance);
 	location = nautilus_bookmark_get_location (bookmark);
-        scroll_pos = nautilus_bookmark_get_scroll_pos (bookmark);
-	begin_location_change
-		(slot,
-		 location, NULL,
-		 back ? NAUTILUS_LOCATION_CHANGE_BACK : NAUTILUS_LOCATION_CHANGE_FORWARD,
-		 distance,
-                 scroll_pos);
+
+	if (new_tab) {
+		nautilus_window_slot_open_location_full (slot, location,
+							 NAUTILUS_WINDOW_OPEN_ACCORDING_TO_MODE,
+							 NAUTILUS_WINDOW_OPEN_FLAG_NEW_TAB,
+							 NULL);
+	} else {
+        	char *scroll_pos;
+		
+		scroll_pos = nautilus_bookmark_get_scroll_pos (bookmark);
+		begin_location_change
+			(slot,
+			 location, NULL,
+			 back ? NAUTILUS_LOCATION_CHANGE_BACK : NAUTILUS_LOCATION_CHANGE_FORWARD,
+			 distance,
+			 scroll_pos);
+
+		g_free (scroll_pos);
+	}
 
 	g_object_unref (location);
-        g_free (scroll_pos);
 }
 
 /* reload the contents of the window */

Modified: branches/multiview/src/nautilus-window-menus.c
==============================================================================
--- branches/multiview/src/nautilus-window-menus.c	(original)
+++ branches/multiview/src/nautilus-window-menus.c	Sun Jun  8 14:12:18 2008
@@ -115,6 +115,22 @@
 	bookmark_holder_free (callback_data);
 }
 
+static gboolean
+should_open_in_new_tab (void)
+{
+	/* FIXME this is duplicated */
+	GdkEvent *event;
+
+	event = gtk_get_current_event ();
+	if (event->type == GDK_BUTTON_PRESS || event->type == GDK_BUTTON_RELEASE) {
+		return event->button.button == 2;
+	}
+
+	gdk_event_free (event);
+
+	return FALSE;
+}
+
 static void
 activate_bookmark_in_menu_item (GtkAction *action, gpointer user_data)
 {
@@ -127,7 +143,9 @@
 		holder->failed_callback (holder->window, holder->bookmark);
 	} else {
 	        location = nautilus_bookmark_get_location (holder->bookmark);
-	        nautilus_window_go_to (holder->window, location);
+	        nautilus_window_slot_go_to (holder->window->details->active_slot, 
+					    location, 
+					    should_open_in_new_tab ());
 	        g_object_unref (location);
         }
 }
@@ -272,7 +290,8 @@
 action_home_callback (GtkAction *action, 
 		      gpointer user_data) 
 {
-	nautilus_window_go_home (NAUTILUS_WINDOW (user_data));
+	nautilus_window_slot_go_home (NAUTILUS_WINDOW (user_data)->details->active_slot, 
+				      should_open_in_new_tab ());
 }
 
 static void
@@ -281,8 +300,9 @@
 {
 	GFile *computer;
 	computer = g_file_new_for_uri (COMPUTER_URI);
-	nautilus_window_go_to (NAUTILUS_WINDOW (user_data),
-			       computer);
+	nautilus_window_slot_go_to (NAUTILUS_WINDOW (user_data)->details->active_slot,
+				    computer,
+				    should_open_in_new_tab ());
 	g_object_unref (computer);
 }
 
@@ -292,8 +312,9 @@
 {
 	GFile *network;
 	network = g_file_new_for_uri (NETWORK_URI);
-	nautilus_window_go_to (NAUTILUS_WINDOW (user_data),
-			       network);
+	nautilus_window_slot_go_to (NAUTILUS_WINDOW (user_data)->details->active_slot,
+				    network,
+				    should_open_in_new_tab ());
 	g_object_unref (network);
 }
 
@@ -307,8 +328,9 @@
 	path = nautilus_get_templates_directory ();
 	location = g_file_new_for_path (path);
 	g_free (path);
-	nautilus_window_go_to (NAUTILUS_WINDOW (user_data),
-			       location);
+	nautilus_window_slot_go_to (NAUTILUS_WINDOW (user_data)->details->active_slot,
+				    location,
+				    should_open_in_new_tab ());
 	g_object_unref (location);
 }
 
@@ -318,8 +340,9 @@
 {
 	GFile *trash;
 	trash = g_file_new_for_uri ("trash:///");
-	nautilus_window_go_to (NAUTILUS_WINDOW (user_data),
-			       trash);
+	nautilus_window_slot_go_to (NAUTILUS_WINDOW (user_data)->details->active_slot,
+				    trash,
+				    should_open_in_new_tab ());
 	g_object_unref (trash);
 }
 
@@ -329,8 +352,9 @@
 {
 	GFile *burn;
 	burn = g_file_new_for_uri (BURN_CD_URI);
-	nautilus_window_go_to (NAUTILUS_WINDOW (user_data),
-			       burn);
+	nautilus_window_slot_go_to (NAUTILUS_WINDOW (user_data)->details->active_slot,
+				    burn,
+				    should_open_in_new_tab ());
 	g_object_unref (burn);
 	
 }
@@ -534,7 +558,7 @@
 action_up_callback (GtkAction *action, 
 		     gpointer user_data) 
 {
-	nautilus_window_go_up (NAUTILUS_WINDOW (user_data), FALSE);
+	nautilus_window_go_up (NAUTILUS_WINDOW (user_data), FALSE, should_open_in_new_tab ());
 }
 
 static void
@@ -601,18 +625,89 @@
 			   window->details->help_message_cid);
 }
 
+static GtkWidget *
+get_event_widget (GtkWidget *proxy)
+{
+	GtkWidget *widget;
+
+	/**
+	 * Finding the interesting widget requires internal knowledge of
+	 * the widgets in question. This can't be helped, but by keeping
+	 * the sneaky code in one place, it can easily be updated.
+	 */
+	if (GTK_IS_MENU_ITEM (proxy)) {
+		/* Menu items already forward middle clicks */
+		widget = NULL;
+	} else if (GTK_IS_MENU_TOOL_BUTTON (proxy)) {
+		/**
+		 * The menu tool button's button is the first child
+		 * of the child hbox.
+		 */
+		GtkContainer *container =
+			GTK_CONTAINER (gtk_bin_get_child (GTK_BIN (proxy)));
+		widget = GTK_WIDGET (gtk_container_get_children (container)->data);
+	} else if (GTK_IS_TOOL_BUTTON (proxy)) {
+		/* The tool button's button is the direct child */
+		widget = gtk_bin_get_child (GTK_BIN (proxy));
+	} else if (GTK_IS_BUTTON (proxy)) {
+		widget = proxy;
+	} else {
+		/* Don't touch anything we don't know about */
+		widget = NULL;
+	}
+
+	return widget;
+}
+
+static gboolean
+proxy_button_press_event_cb (GtkButton *button,
+			     GdkEventButton *event,
+			     gpointer user_data)
+{
+	if (event->button == 2) {
+		gtk_button_pressed (button);
+	}
+
+	return FALSE;
+}
+
+static gboolean
+proxy_button_release_event_cb (GtkButton *button,
+			       GdkEventButton *event,
+			       gpointer user_data)
+{
+	if (event->button == 2) {
+		gtk_button_released (button);
+	}
+
+	return FALSE;
+}
+
 static void
 disconnect_proxy_cb (GtkUIManager *manager,
 		     GtkAction *action,
 		     GtkWidget *proxy,
 		     NautilusWindow *window)
 {
+	GtkWidget *widget;
+
 	if (GTK_IS_MENU_ITEM (proxy)) {
 		g_signal_handlers_disconnect_by_func
 			(proxy, G_CALLBACK (menu_item_select_cb), window);
 		g_signal_handlers_disconnect_by_func
 			(proxy, G_CALLBACK (menu_item_deselect_cb), window);
 	}
+
+	widget = get_event_widget (proxy);
+	if (widget) {
+		g_signal_handlers_disconnect_by_func (widget,
+						      G_CALLBACK (proxy_button_press_event_cb),
+						      action);
+		g_signal_handlers_disconnect_by_func (widget,
+						      G_CALLBACK (proxy_button_release_event_cb),
+						      action);
+	}
+
 }
 
 static void
@@ -648,6 +743,15 @@
 		}
 	}
 	
+	widget = get_event_widget (proxy);
+	if (widget) {
+		g_signal_connect (widget, "button-press-event",
+				  G_CALLBACK (proxy_button_press_event_cb),
+				  action);
+		g_signal_connect (widget, "button-release-event",
+				  G_CALLBACK (proxy_button_release_event_cb),
+				  action);
+	}
 }
 
 static const GtkActionEntry main_entries[] = {

Modified: branches/multiview/src/nautilus-window-slot.h
==============================================================================
--- branches/multiview/src/nautilus-window-slot.h	(original)
+++ branches/multiview/src/nautilus-window-slot.h	Sun Jun  8 14:12:18 2008
@@ -117,13 +117,16 @@
 void    nautilus_window_slot_close			   (NautilusWindowSlot *slot);
 void    nautilus_window_slot_reload			   (NautilusWindowSlot *slot);
 
-#define nautilus_window_slot_go_to(slot,location) \
-	nautilus_window_slot_open_location(slot, location, FALSE)
+#define nautilus_window_slot_go_to(slot,location, new_tab) \
+	nautilus_window_slot_open_location_full(slot, location, NAUTILUS_WINDOW_OPEN_ACCORDING_TO_MODE, \
+						(new_tab ? NAUTILUS_WINDOW_OPEN_FLAG_NEW_TAB : 0), \
+						NULL)
 
 #define nautilus_window_slot_go_to_with_selection(slot,location,new_selection) \
 	nautilus_window_slot_open_location_with_selection(slot, location, new_selection, FALSE)
 
-void    nautilus_window_slot_go_home			   (NautilusWindowSlot *slot);
+void    nautilus_window_slot_go_home			   (NautilusWindowSlot *slot,
+							    gboolean            new_tab);
 void    nautilus_window_slot_go_up			   (NautilusWindowSlot *slot,
 							    gboolean           close_behind);
 

Modified: branches/multiview/src/nautilus-window.c
==============================================================================
--- branches/multiview/src/nautilus-window.c	(original)
+++ branches/multiview/src/nautilus-window.c	Sun Jun  8 14:12:18 2008
@@ -242,10 +242,9 @@
 {
 	g_return_if_fail (NAUTILUS_IS_WINDOW (window));
 
-	nautilus_window_slot_go_to (window->details->active_slot, location);
+	nautilus_window_slot_go_to (window->details->active_slot, location, FALSE);
 }
 
-
 void
 nautilus_window_go_to_with_selection (NautilusWindow *window, GFile *location, GList *new_selection)
 {
@@ -257,16 +256,17 @@
 static gboolean
 nautilus_window_go_up_signal (NautilusWindow *window, gboolean close_behind)
 {
-	nautilus_window_go_up (window, close_behind);
+	nautilus_window_go_up (window, close_behind, FALSE);
 	return TRUE;
 }
 
 void
-nautilus_window_go_up (NautilusWindow *window, gboolean close_behind)
+nautilus_window_go_up (NautilusWindow *window, gboolean close_behind, gboolean new_tab)
 {
 	NautilusWindowSlot *slot;
 	GFile *parent;
 	GList *selection;
+	NautilusWindowOpenFlags flags;
 
 	g_assert (NAUTILUS_IS_WINDOW (window));
 
@@ -284,7 +284,18 @@
 	
 	selection = g_list_prepend (NULL, g_object_ref (slot->location));
 	
-	nautilus_window_slot_open_location_with_selection (slot, parent, selection, close_behind);
+	flags = 0;
+	if (close_behind) {
+		flags |= NAUTILUS_WINDOW_OPEN_FLAG_CLOSE_BEHIND;
+	}
+	if (new_tab) {
+		flags |= NAUTILUS_WINDOW_OPEN_FLAG_NEW_TAB;
+	}
+
+	nautilus_window_slot_open_location_full (slot, parent, 
+						 NAUTILUS_WINDOW_OPEN_ACCORDING_TO_MODE,
+						 flags,
+						 selection);
 	
 	g_object_unref (parent);
 	
@@ -409,7 +420,7 @@
 {
 	g_return_if_fail (NAUTILUS_IS_WINDOW (window));
 
-	nautilus_window_slot_go_home (window->details->active_slot);
+	nautilus_window_slot_go_home (window->details->active_slot, FALSE);
 }
 
 void

Modified: branches/multiview/src/nautilus-window.h
==============================================================================
--- branches/multiview/src/nautilus-window.h	(original)
+++ branches/multiview/src/nautilus-window.h	Sun Jun  8 14:12:18 2008
@@ -139,13 +139,14 @@
 							  NautilusView      *view);
 
 void             nautilus_window_go_to                (NautilusWindow    *window,
-                                                       GFile            *location);
+                                                       GFile             *location);
 void             nautilus_window_go_to_with_selection (NautilusWindow    *window,
                                                        GFile             *location,
                                                        GList             *new_selection);
 void             nautilus_window_go_home              (NautilusWindow    *window);
 void             nautilus_window_go_up                (NautilusWindow    *window,
-                                                       gboolean           close_behind);
+                                                       gboolean           close_behind,
+						       gboolean           new_tab);
 void             nautilus_window_prompt_for_location  (NautilusWindow    *window,
                                                        const char        *initial);
 void		 nautilus_window_set_search_mode      (NautilusWindow    *window,



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