[gtk+/places-sidebar] New 'location-selected' signal



commit 74e1b682713b420e6fbb14ac451614da31c02a11
Author: Federico Mena Quintero <federico gnome org>
Date:   Wed Sep 28 10:44:40 2011 -0500

    New 'location-selected' signal
    
    Instead of directly calling the Nautilus machinery to open locations
    in tabs or windows, we emit a signal which the caller must handle.
    
    Signed-off-by: Federico Mena Quintero <federico gnome org>

 gtk/gtkmarshalers.list |    1 +
 gtk/gtkplacessidebar.c |  107 +++++++++++++++++++++--------------------------
 2 files changed, 49 insertions(+), 59 deletions(-)
---
diff --git a/gtk/gtkmarshalers.list b/gtk/gtkmarshalers.list
index fa60a7c..63fb44e 100644
--- a/gtk/gtkmarshalers.list
+++ b/gtk/gtkmarshalers.list
@@ -81,6 +81,7 @@ VOID:OBJECT,BOOLEAN
 VOID:OBJECT,BOXED,BOXED
 VOID:OBJECT,BOXED,UINT,UINT
 VOID:OBJECT,BOXED,BOOLEAN,BOOLEAN
+VOID:OBJECT,ENUM
 VOID:OBJECT,INT
 VOID:OBJECT,INT,OBJECT
 VOID:OBJECT,INT,INT
diff --git a/gtk/gtkplacessidebar.c b/gtk/gtkplacessidebar.c
index f732a62..75dec19 100644
--- a/gtk/gtkplacessidebar.c
+++ b/gtk/gtkplacessidebar.c
@@ -27,6 +27,7 @@
 #include "config.h"
 
 #include "gdk/gdkkeysyms.h"
+#include "gtkmarshalers.h"
 #include "gtkplacessidebar.h"
 #include "gtkscrolledwindow.h"
 #include "gtktreeview.h"
@@ -71,7 +72,6 @@ struct _GtkPlacesSidebar {
 
 	/* volume mounting - delayed open process */
 	gboolean mounting;
-	NautilusWindowSlot *go_to_after_mount_slot;
 	GtkPlacesOpenMode go_to_after_mount_open_mode;
 
 	GtkTreePath *eject_highlight_path;
@@ -81,6 +81,10 @@ struct _GtkPlacesSidebar {
 
 struct _GtkPlacesSidebarClass {
 	GtkScrolledWindowClass parent;
+
+	void (* location_selected) (GtkPlacesSidebar *sidebar,
+				    GFile            *location,
+				    GtkPlacesOpenMode open_mode);
 };
 
 enum {
@@ -117,6 +121,13 @@ typedef enum {
 	SECTION_NETWORK,
 } SectionType;
 
+enum {
+	LOCATION_SELECTED,
+	LAST_SIGNAL,
+};
+
+static guint placess_sidebar_signals [LAST_SIGNAL] = { 0 };
+
 static void  open_selected_bookmark                    (GtkPlacesSidebar        *sidebar,
 							GtkTreeModel                 *model,
 							GtkTreeIter                  *iter,
@@ -180,6 +191,13 @@ static GtkTreeModel *nautilus_shortcuts_model_filter_new (GtkPlacesSidebar *side
 
 G_DEFINE_TYPE (GtkPlacesSidebar, gtk_places_sidebar, GTK_TYPE_SCROLLED_WINDOW);
 
+static void
+emit_location_selected (GtkPlacesSidebar *sidebar, GFile *location, GtkPlacesOpenMode open_mode)
+{
+	g_signal_emit (sidebar, places_sidebar_signals[LOCATION_SELECTED], 0,
+		       location, open_mode);
+}
+
 static GdkPixbuf *
 get_eject_icon (GtkPlacesSidebar *sidebar,
 		gboolean highlighted)
@@ -1652,7 +1670,6 @@ volume_mounted_cb (GVolume *volume,
 {
 	GMount *mount;
 	GtkPlacesSidebar *sidebar;
-	GFile *location;
 
 	sidebar = GTK_PLACES_SIDEBAR (user_data);
 
@@ -1660,28 +1677,14 @@ volume_mounted_cb (GVolume *volume,
 
 	mount = g_volume_get_mount (volume);
 	if (mount != NULL) {
-		location = g_mount_get_default_location (mount);
-
-		if (sidebar->go_to_after_mount_slot != NULL) {
-			if ((sidebar->go_to_after_mount_open_mode & NAUTILUS_WINDOW_OPEN_FLAG_NEW_WINDOW) == 0) {
-				nautilus_window_slot_open_location (sidebar->go_to_after_mount_slot, location,
-								    sidebar->go_to_after_mount_open_mode, NULL);
-			} else {
-				NautilusWindow *new, *cur;
+		GFile *location;
 
-				cur = NAUTILUS_WINDOW (sidebar->window);
-				new = nautilus_application_create_window (nautilus_application_get_singleton (),
-									  gtk_window_get_screen (GTK_WINDOW (cur)));
-				nautilus_window_go_to (new, location);
-			}
-		}
+		location = g_mount_get_default_location (mount);
+		emit_location_selected (sidebar, location, sidebar->go_to_after_mount_open_mode);
 
 		g_object_unref (G_OBJECT (location));
 		g_object_unref (G_OBJECT (mount));
 	}
-
-
-	eel_remove_weak_pointer (&(sidebar->go_to_after_mount_slot));
 }
 
 static void
@@ -1714,7 +1717,6 @@ open_selected_bookmark (GtkPlacesSidebar *sidebar,
 			GtkTreeIter	      *iter,
 			GtkPlacesOpenMode      open_mode)
 {
-	NautilusWindowSlot *slot;
 	GFile *location;
 	char *uri;
 
@@ -1728,29 +1730,14 @@ open_selected_bookmark (GtkPlacesSidebar *sidebar,
 		DEBUG ("Activating bookmark %s", uri);
 
 		location = g_file_new_for_uri (uri);
-		/* Navigate to the clicked location */
-#if 0
-		/* FIXME: emit the signal with the open_mode */
-		if ((flags & NAUTILUS_WINDOW_OPEN_FLAG_NEW_WINDOW) == 0) {
-			slot = nautilus_window_get_active_slot (sidebar->window);
-			nautilus_window_slot_open_location (slot, location,
-							    flags, NULL);
-		} else {
-			NautilusWindow *cur, *new;
+		emit_location_selected (sidebar, location, open_mode);
 
-			cur = NAUTILUS_WINDOW (sidebar->window);
-			new = nautilus_application_create_window (nautilus_application_get_singleton (),
-								  gtk_window_get_screen (GTK_WINDOW (cur)));
-			nautilus_window_go_to (new, location);
-		}
-#endif
 		g_object_unref (location);
 		g_free (uri);
 
 	} else {
 		GDrive *drive;
 		GVolume *volume;
-		NautilusWindowSlot *slot;
 
 		gtk_tree_model_get (model, iter,
 				    PLACES_SIDEBAR_COLUMN_DRIVE, &drive,
@@ -1760,12 +1747,6 @@ open_selected_bookmark (GtkPlacesSidebar *sidebar,
 		if (volume != NULL && !sidebar->mounting) {
 			sidebar->mounting = TRUE;
 
-			g_assert (sidebar->go_to_after_mount_slot == NULL);
-
-			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));
-
 			sidebar->go_to_after_mount_open_mode = open_mode;
 
 			nautilus_file_operations_mount_volume_full (NULL, volume,
@@ -1806,24 +1787,24 @@ open_shortcut_from_menu (GtkPlacesSidebar *sidebar,
 }
 
 static void
-open_shortcut_cb (GtkMenuItem		*item,
-		  GtkPlacesSidebar	*sidebar)
+open_shortcut_cb (GtkMenuItem      *item,
+		  GtkPlacesSidebar *sidebar)
 {
-	open_shortcut_from_menu (sidebar, 0);
+	open_shortcut_from_menu (sidebar, GTK_PLACES_OPEN_MODE_NORMAL);
 }
 
 static void
-open_shortcut_in_new_window_cb (GtkMenuItem	      *item,
+open_shortcut_in_new_window_cb (GtkMenuItem      *item,
 				GtkPlacesSidebar *sidebar)
 {
-	open_shortcut_from_menu (sidebar, NAUTILUS_WINDOW_OPEN_FLAG_NEW_WINDOW);
+	open_shortcut_from_menu (sidebar, GTK_PLACES_OPEN_MODE_NEW_WINDOW);
 }
 
 static void
-open_shortcut_in_new_tab_cb (GtkMenuItem	      *item,
-				GtkPlacesSidebar *sidebar)
+open_shortcut_in_new_tab_cb (GtkMenuItem      *item,
+			     GtkPlacesSidebar *sidebar)
 {
-	open_shortcut_from_menu (sidebar, NAUTILUS_WINDOW_OPEN_FLAG_NEW_TAB);
+	open_shortcut_from_menu (sidebar, GTK_PLACES_OPEN_MODE_NEW_TAB);
 }
 
 /* Add bookmark for the selected item */
@@ -2837,7 +2818,7 @@ bookmarks_button_press_event_cb (GtkWidget             *widget,
 				     GTK_PLACES_OPEN_MODE_NEW_WINDOW :
 				     GTK_PLACES_OPEN_MODE_NEW_TAB);
 		} else {
-			open_mode = NAUTILUS_WINDOW_OPEN_FLAG_NEW_WINDOW; /* FIXME: was CLOSE_BEHIND */
+			open_mode = GTK_PLACES_OPEN_MODE_NEW_WINDOW; /* FIXME: was CLOSE_BEHIND; make Nautilus handle this */
 		}
 
 		open_selected_bookmark (sidebar, model, &iter, open_mode);
@@ -3262,8 +3243,6 @@ gtk_places_sidebar_dispose (GObject *object)
 	g_clear_object (&sidebar->bookmarks);
 	g_clear_object (&sidebar->filter_model);
 
-	eel_remove_weak_pointer (&(sidebar->go_to_after_mount_slot));
-
 	g_signal_handlers_disconnect_by_func (nautilus_preferences,
 					      desktop_setting_changed_callback,
 					      sidebar);
@@ -3282,9 +3261,24 @@ gtk_places_sidebar_dispose (GObject *object)
 static void
 gtk_places_sidebar_class_init (GtkPlacesSidebarClass *class)
 {
-	G_OBJECT_CLASS (class)->dispose = gtk_places_sidebar_dispose;
+	GObjectClass *gobject_class;
+
+	gobject_class = (GObjectClass *) places_sidebar_class;
+
+	gobject_class->dispose = gtk_places_sidebar_dispose;
 
 	GTK_WIDGET_CLASS (class)->style_set = gtk_places_sidebar_style_set;
+
+	places_sidebar_signals [LOCATION_SELECTED] =
+		g_signal_new (I_("location-selected"),
+			      G_OBJECT_CLASS_TYPE (gobject_class),
+			      G_SIGNAL_RUN_FIRST,
+			      G_STRUCT_OFFSET (GtkPlacesSidebarClass, location_selected),
+			      NULL, NULL,
+			      _gtk_marshal_VOID__OBJECT_ENUM,
+			      G_TYPE_NONE, 2,
+			      G_TYPE_OBJECT,
+			      G_TYPE_ENUM);
 }
 
 /* FIXME: do the following in a constructor or in ::map() */
@@ -3292,14 +3286,9 @@ static void
 gtk_places_sidebar_set_parent_window (GtkPlacesSidebar *sidebar,
 					   NautilusWindow *window)
 {
-	NautilusWindowSlot *slot;
-
 	sidebar->window = window;
 
-	slot = nautilus_window_get_active_slot (window);
-
 	sidebar->bookmarks = nautilus_bookmark_list_new ();
-	sidebar->uri = nautilus_window_slot_get_current_uri (slot);
 
 	sidebar->bookmarks_changed_id =
 		g_signal_connect_swapped (sidebar->bookmarks, "changed",



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