[Goodies-commits] r7145 - in gigolo/trunk: . src

Enrico Troeger enrico at xfce.org
Thu Apr 9 14:30:18 CEST 2009


Author: enrico
Date: 2009-04-09 12:30:18 +0000 (Thu, 09 Apr 2009)
New Revision: 7145

Modified:
   gigolo/trunk/ChangeLog
   gigolo/trunk/TODO
   gigolo/trunk/src/backendgvfs.c
   gigolo/trunk/src/backendgvfs.h
   gigolo/trunk/src/bookmarkdialog.c
   gigolo/trunk/src/bookmarkeditdialog.c
   gigolo/trunk/src/browsenetworkpanel.c
   gigolo/trunk/src/common.h
   gigolo/trunk/src/main.c
   gigolo/trunk/src/window.c
   gigolo/trunk/src/window.h
Log:
Rework the whole network browsing code:
Since GVfs doesn't auto-mount smb:// anymore by default, we need to mount it manually if necessary in order to be able to use it.

Modified: gigolo/trunk/ChangeLog
===================================================================
--- gigolo/trunk/ChangeLog	2009-04-08 21:15:10 UTC (rev 7144)
+++ gigolo/trunk/ChangeLog	2009-04-09 12:30:18 UTC (rev 7145)
@@ -1,3 +1,13 @@
+2009-04-09  Enrico Tröger  <enrico(at)xfce(dot)org>
+
+ * src/bookmarkdialog.c, src/window.c, src/window.h, src/backendgvfs.c,
+   src/backendgvfs.h, src/main.c, src/bookmarkeditdialog.c,
+   src/browsenetworkpanel.c, src/common.h:
+   Rework the whole network browsing code:
+   Since GVfs doesn't auto-mount smb:// anymore by default, we need
+   to mount it manually if necessary in order to be able to use it.
+
+
 2009-04-06  Enrico Tröger  <enrico(at)xfce(dot)org>
 
  * src/browsenetworkpanel.c:

Modified: gigolo/trunk/TODO
===================================================================
--- gigolo/trunk/TODO	2009-04-08 21:15:10 UTC (rev 7144)
+++ gigolo/trunk/TODO	2009-04-09 12:30:18 UTC (rev 7145)
@@ -1,2 +1,5 @@
 - better program icon
 - libnotify - to notify about new mounts or disappeared mounts (ftp timeout, etc.)
+- split GigoloApp from GigoloWindow
+- Samba mounts with set credentials can fail
+

Modified: gigolo/trunk/src/backendgvfs.c
===================================================================
--- gigolo/trunk/src/backendgvfs.c	2009-04-08 21:15:10 UTC (rev 7144)
+++ gigolo/trunk/src/backendgvfs.c	2009-04-09 12:30:18 UTC (rev 7145)
@@ -42,11 +42,20 @@
 {
 	MOUNTS_CHANGED,
 	OPERATION_FAILED,
+	BROWSE_NETWORK_FINISHED,
 
 	LAST_SIGNAL
 };
 static guint signals[LAST_SIGNAL];
 
+enum
+{
+    BROWSE_MODE_INVALID,
+    BROWSE_MODE_DOMAINS,
+    BROWSE_MODE_HOSTS,
+    BROWSE_MODE_SHARES,
+};
+
 typedef struct
 {
 	GigoloBackendGVFS *self;
@@ -54,6 +63,18 @@
 	gboolean show_errors;
 } MountInfo;
 
+typedef struct
+{
+	GigoloBackendGVFS *self;
+
+	gint mode;
+	gchar *uri;
+	GtkWindow *parent;
+	GtkTreeStore *store;
+	GtkTreePath *parent_path;
+} BrowseData;
+
+
 struct _GigoloBackendGVFSPrivate
 {
 	GtkListStore *store;
@@ -62,6 +83,7 @@
 static void gigolo_backend_gvfs_finalize  			(GObject *object);
 static void gigolo_backend_gvfs_set_property		(GObject *object, guint prop_id,
 													 const GValue *value, GParamSpec *pspec);
+static void browse_network_real						(BrowseData *bd);
 
 
 G_DEFINE_TYPE(GigoloBackendGVFS, gigolo_backend_gvfs, G_TYPE_OBJECT);
@@ -141,6 +163,14 @@
 										NULL,
 										gigolo_backend_gvfs_cclosure_marshal_VOID__STRING_STRING,
 										G_TYPE_NONE, 2, G_TYPE_STRING, G_TYPE_STRING);
+	signals[BROWSE_NETWORK_FINISHED] = g_signal_new("browse-network-finished",
+										G_TYPE_FROM_CLASS(klass),
+										(GSignalFlags) 0,
+										0,
+										0,
+										NULL,
+										g_cclosure_marshal_VOID__VOID,
+										G_TYPE_NONE, 0);
 }
 
 
@@ -497,8 +527,9 @@
 }
 
 
-gchar **gigolo_backend_gvfs_get_smb_shares_from_uri(const gchar *uri)
+gchar **gigolo_backend_gvfs_get_smb_shares(const gchar *hostname, const gchar *user, const gchar *domain)
 {
+	gchar *uri;
 	gchar **shares = NULL;
 	GList *l, *shares_list = NULL;
 	GFile *file;
@@ -506,8 +537,17 @@
 	GError *error = NULL;
 	GFileEnumerator *e;
 
-	g_return_val_if_fail(uri != NULL, NULL);
+	g_return_val_if_fail(hostname != NULL, NULL);
 
+	uri = g_strdup_printf("smb://%s%s%s%s%s/",
+		(NZV(domain)) ? domain : "",
+		(NZV(domain)) ? ";" : "",
+		(NZV(user)) ? user : "",
+		(NZV(user) || NZV(domain)) ? "@" : "",
+		hostname);
+
+	/** TODO mount if necessary, merge with browse_network_real */
+
 	verbose("Querying \"%s\" for available shares", uri);
 
 	file = g_file_new_for_uri(uri);
@@ -550,52 +590,60 @@
 	}
 
 	g_object_unref(file);
+	g_free(uri);
 
 	return shares;
 }
 
 
-gchar **gigolo_backend_gvfs_get_smb_shares(const gchar *hostname, const gchar *user, const gchar *domain)
+static gboolean browse_network_ready_cb(gpointer data)
 {
-	gchar **shares = NULL;
-	gchar *uri;
+	g_signal_emit(data, signals[BROWSE_NETWORK_FINISHED], 0);
+	verbose("Browse Network finished");
+	return FALSE;
+}
 
-	g_return_val_if_fail(hostname != NULL, NULL);
 
-	uri = g_strdup_printf("smb://%s%s%s%s%s/",
-		(NZV(domain)) ? domain : "",
-		(NZV(domain)) ? ";" : "",
-		(NZV(user)) ? user : "",
-		(NZV(user) || NZV(domain)) ? "@" : "",
-		hostname);
+static void browse_network_mount_ready_cb(GFile *location, GAsyncResult *res, BrowseData *bd)
+{
+	gboolean success;
+	GError *error = NULL;
 
-	shares = gigolo_backend_gvfs_get_smb_shares_from_uri(uri);
-	g_free(uri);
+	success = g_file_mount_enclosing_volume_finish(location, res, &error);
 
-	return shares;
+	if (error != NULL)
+	{
+		verbose("%s (%s)", G_STRFUNC, error->message);
+		g_error_free(error);
+	}
+	else
+	{
+		browse_network_real(bd);
+	}
 }
 
 
-GigoloHostUri **gigolo_backend_gvfs_browse_network(const gchar *uri)
+static void browse_network_real(BrowseData *bd)
 {
-	GigoloHostUri *h, **hosts = NULL;
-	GList *l, *hosts_list = NULL;
+	GigoloBackendGVFS *backend;
 	GFile *file;
 	GFileInfo *info;
 	GError *error = NULL;
 	GFileEnumerator *e;
+	GtkTreeStore *store;
+	GtkWindow *parent;
+	gint mode;
 
-	/* If a uri is passed, we assume this is an URI pointing to a workgroup like
-	 * "smb://WORKGROUP/", if passed NULL, we use "smb://" to search for workgroups */
-	if (uri == NULL)
-		uri = "smb://";
+	g_return_if_fail(bd != NULL);
 
-	verbose("Querying \"%s\" for available groups/hosts", uri);
+	store = bd->store;
+	mode = bd->mode;
+	parent = bd->parent;
+	backend = bd->self;
 
-	file = g_file_new_for_uri(uri);
+	file = g_file_new_for_uri(bd->uri);
 
 	e = g_file_enumerate_children(file,
-		G_FILE_ATTRIBUTE_MOUNTABLE_CAN_MOUNT ","
 		G_FILE_ATTRIBUTE_STANDARD_TARGET_URI ","
 		G_FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME ","
 		G_FILE_ATTRIBUTE_STANDARD_ICON,
@@ -603,56 +651,113 @@
 
 	if (error != NULL)
 	{
-		verbose("%s: %s", G_STRFUNC, error->message);
-		g_error_free(error);
+		if (g_error_matches(error, G_IO_ERROR, G_IO_ERROR_NOT_MOUNTED))
+		{
+			GMountOperation *op = gigolo_mount_operation_new(bd->parent);
+			/* if the URI wasn't mounted yet, mount it and try again from the mount ready callback */
+			g_file_mount_enclosing_volume(file, G_MOUNT_MOUNT_NONE, op, NULL,
+				(GAsyncReadyCallback) browse_network_mount_ready_cb, bd);
+			g_error_free(error);
+			g_object_unref(file);
+			g_object_unref(op);
+			return;
+		}
+		else
+		{
+			verbose("%s: %s", G_STRFUNC, error->message);
+			g_error_free(error);
+		}
 	}
 	else
 	{
-		guint i, len;
-		const gchar *h_uri;
+		const gchar *uri;
+		GtkTreeIter iter, parent_iter_tmp;
+		GtkTreeIter *parent_iter;
+		gint child_mode;
 
+		verbose("Querying \"%s\" for available groups/hosts", bd->uri);
+
 		while ((info = g_file_enumerator_next_file(e, NULL, NULL)) != NULL)
 		{
-			h_uri = g_file_info_get_attribute_string(info, G_FILE_ATTRIBUTE_STANDARD_TARGET_URI);
-			if (h_uri != NULL && g_str_has_prefix(h_uri, "smb://"))
+			uri = g_file_info_get_attribute_string(info, G_FILE_ATTRIBUTE_STANDARD_TARGET_URI);
+			if (uri != NULL)
 			{
-				h = g_new(GigoloHostUri, 1);
-				h->name = g_strdup(g_file_info_get_display_name(info));
-				h->uri = g_strdup(h_uri);
-				h->icon = g_object_ref(g_file_info_get_icon(info));
-				hosts_list = g_list_append(hosts_list, h);
+				/* set parent item */
+				if (bd->parent_path != NULL)
+				{
+					gtk_tree_model_get_iter(GTK_TREE_MODEL(store), &parent_iter_tmp, bd->parent_path);
+					parent_iter = &parent_iter_tmp;
+				}
+				else
+					parent_iter = NULL;
+
+				/* insert the item into the tree store */
+				gtk_tree_store_append(store, &iter, parent_iter);
+				gtk_tree_store_set(store, &iter,
+					GIGOLO_BROWSE_NETWORK_COL_URI, uri,
+					GIGOLO_BROWSE_NETWORK_COL_NAME, g_file_info_get_display_name(info),
+					GIGOLO_BROWSE_NETWORK_COL_ICON, g_file_info_get_icon(info),
+					GIGOLO_BROWSE_NETWORK_COL_CAN_MOUNT, (mode == BROWSE_MODE_SHARES),
+					-1);
+
+				/* set mode for the next level or stop recursion */
+				switch (mode)
+				{
+					case BROWSE_MODE_DOMAINS:
+						child_mode = BROWSE_MODE_HOSTS;
+						break;
+					case BROWSE_MODE_HOSTS:
+						child_mode = BROWSE_MODE_SHARES;
+						break;
+					default:
+						child_mode = BROWSE_MODE_INVALID;
+				}
+
+				/* setup child data and fire it */
+				if (child_mode != BROWSE_MODE_INVALID)
+				{
+					BrowseData *bd_child = g_new0(BrowseData, 1);
+					bd_child->mode = child_mode;
+					bd_child->uri = g_strdup(uri);
+					bd_child->store = store;
+					bd_child->parent = parent;
+					bd_child->parent_path = gtk_tree_model_get_path(GTK_TREE_MODEL(store), &iter);
+					/* recurse into the next level */
+					browse_network_real(bd_child);
+				}
 			}
 			g_object_unref(info);
 		}
 		g_object_unref(e);
+	}
+	/** TODO this is very suboptimal as a fixed timeout of ~ 2 seconds is by no means good enough
+	 *  as we never know how long the whole operating will take. Find a better way to determine
+	 *  when the operation is finsihed. */
+	/* When the mode of this run was BROWSE_MODE_DOMAINS, this was the top-level call to initially
+	 * start browsing, so in theory when we are here, we are finsihed. This isn't true due to
+	 * possibly necessary mounting above. So, we use a timeout to estimate the finished operation. */
+	if (bd->mode == BROWSE_MODE_DOMAINS)
+		g_timeout_add_seconds(2, browse_network_ready_cb, backend);
 
-		len = g_list_length(hosts_list);
-		if (len > 0)
-		{
-			i = 0;
-		hosts = g_new(GigoloHostUri*, len + 1);
-
-		for (l = hosts_list; l != NULL; l = g_list_next(l))
-		{
-			hosts[i] = (GigoloHostUri*) l->data;
-			i++;
-		}
-		hosts[i] = NULL;
-		}
-		g_list_free(hosts_list);
-	}
 	g_object_unref(file);
-
-	return hosts;
+	g_free(bd->uri);
+	gtk_tree_path_free(bd->parent_path);
+	g_free(bd);
 }
 
 
-gpointer gigolo_backend_gvfs_get_share_icon(void)
+void gigolo_backend_gvfs_browse_network(GigoloBackendGVFS *backend, GtkWindow *parent, GtkTreeStore *store)
 {
-	if (gtk_check_version(2, 14, 0) == NULL)
-	return g_themed_icon_new("folder-remote");
-	else
-		return NULL;
+	BrowseData *bd = g_new0(BrowseData, 1);
+
+	bd->mode = BROWSE_MODE_DOMAINS;
+	bd->parent_path = NULL;
+	bd->parent = parent;
+	bd->store = store;
+	bd->uri = g_strdup("smb://");
+	bd->self = backend;
+
+	browse_network_real(bd);
 }
 
 

Modified: gigolo/trunk/src/backendgvfs.h
===================================================================
--- gigolo/trunk/src/backendgvfs.h	2009-04-08 21:15:10 UTC (rev 7144)
+++ gigolo/trunk/src/backendgvfs.h	2009-04-09 12:30:18 UTC (rev 7145)
@@ -55,6 +55,36 @@
 } GigoloHostUri;
 
 
+enum
+{
+	GIGOLO_BROWSE_NETWORK_COL_NAME,
+	GIGOLO_BROWSE_NETWORK_COL_URI,
+	GIGOLO_BROWSE_NETWORK_COL_ICON,
+	GIGOLO_BROWSE_NETWORK_COL_CAN_MOUNT,
+	GIGOLO_BROWSE_NETWORK_N_COLUMNS
+};
+
+
+enum
+{
+	GIGOLO_WINDOW_COL_IS_MOUNTED,
+	GIGOLO_WINDOW_COL_SCHEME,
+	GIGOLO_WINDOW_COL_NAME,
+	GIGOLO_WINDOW_COL_REF,
+	GIGOLO_WINDOW_COL_REF_TYPE, /* volume or mount, see enum below */
+	GIGOLO_WINDOW_COL_PIXBUF,
+	GIGOLO_WINDOW_COL_ICON_NAME,
+	GIGOLO_WINDOW_COL_TOOLTIP,
+	GIGOLO_WINDOW_N_COLUMNS
+};
+
+enum
+{
+	GIGOLO_WINDOW_REF_TYPE_VOLUME,
+	GIGOLO_WINDOW_REF_TYPE_MOUNT /* mounted volume */
+};
+
+
 GType				gigolo_backend_gvfs_get_type					(void);
 GigoloBackendGVFS*	gigolo_backend_gvfs_new							(GtkListStore *store);
 
@@ -72,20 +102,18 @@
 
 gchar*				gigolo_backend_gvfs_get_volume_identifier		(gpointer volume);
 
-gchar**				gigolo_backend_gvfs_get_smb_shares_from_uri		(const gchar *uri);
-
 gchar**				gigolo_backend_gvfs_get_smb_shares				(const gchar *hostname,
 																	 const gchar *user,
 																	 const gchar *domain);
 
-GigoloHostUri**		gigolo_backend_gvfs_browse_network				(const gchar *uri);
+void				gigolo_backend_gvfs_browse_network				(GigoloBackendGVFS *backend,
+																	 GtkWindow *parent,
+																	 GtkTreeStore *store);
 
 const gchar *const* gigolo_backend_gvfs_get_supported_uri_schemes	(void);
 
 gboolean			gigolo_backend_gvfs_is_scheme_supported			(const gchar *scheme);
 
-gpointer			gigolo_backend_gvfs_get_share_icon				(void);
-
 G_END_DECLS
 
 #endif /* __BACKENDGVFS_H__ */

Modified: gigolo/trunk/src/bookmarkdialog.c
===================================================================
--- gigolo/trunk/src/bookmarkdialog.c	2009-04-08 21:15:10 UTC (rev 7144)
+++ gigolo/trunk/src/bookmarkdialog.c	2009-04-09 12:30:18 UTC (rev 7145)
@@ -25,6 +25,7 @@
 
 #include "settings.h"
 #include "bookmark.h"
+#include "backendgvfs.h"
 #include "window.h"
 #include "compat.h"
 #include "common.h"

Modified: gigolo/trunk/src/bookmarkeditdialog.c
===================================================================
--- gigolo/trunk/src/bookmarkeditdialog.c	2009-04-08 21:15:10 UTC (rev 7144)
+++ gigolo/trunk/src/bookmarkeditdialog.c	2009-04-09 12:30:18 UTC (rev 7145)
@@ -30,8 +30,8 @@
 #include "compat.h"
 #include "settings.h"
 #include "bookmark.h"
+#include "backendgvfs.h"
 #include "window.h"
-#include "backendgvfs.h"
 #include "bookmarkeditdialog.h"
 
 

Modified: gigolo/trunk/src/browsenetworkpanel.c
===================================================================
--- gigolo/trunk/src/browsenetworkpanel.c	2009-04-08 21:15:10 UTC (rev 7144)
+++ gigolo/trunk/src/browsenetworkpanel.c	2009-04-09 12:30:18 UTC (rev 7145)
@@ -58,17 +58,10 @@
 
 enum
 {
-	COLUMN_NAME,
-	COLUMN_URI,
-	COLUMN_ICON,
-	COLUMN_CAN_MOUNT,
-	N_COLUMNS,
 	ACTION_BOOKMARK,
 	ACTION_CONNECT
 };
 
-
-
 static void tree_selection_changed_cb(GtkTreeSelection *selection, GigoloBrowseNetworkPanel *panel);
 
 
@@ -108,14 +101,15 @@
 	if (gtk_tree_selection_get_selected(selection, &model, &iter) &&
 		! gtk_tree_model_iter_has_child(model, &iter))
 	{
-		gchar *uri, *share, *full_uri;
+		gchar *uri, *share;
 		GigoloBookmark *bm;
 
-		gtk_tree_model_get(model, &iter, COLUMN_NAME, &share, COLUMN_URI, &uri, -1);
+		gtk_tree_model_get(model, &iter,
+			GIGOLO_BROWSE_NETWORK_COL_NAME, &share,
+			GIGOLO_BROWSE_NETWORK_COL_URI, &uri,
+			-1);
 
-		full_uri = g_strconcat(uri, share, NULL);
-
-		bm = gigolo_bookmark_new_from_uri(share, full_uri);
+		bm = gigolo_bookmark_new_from_uri(share, uri);
 		if (gigolo_bookmark_is_valid(bm))
 		{
 			GtkWidget *edit_dialog;
@@ -146,7 +140,6 @@
 
 		g_object_unref(bm);
 		g_free(uri);
-		g_free(full_uri);
 		g_free(share);
 	}
 }
@@ -164,107 +157,29 @@
 }
 
 
-static void gigolo_browse_network_panel_refresh(GigoloBrowseNetworkPanel *panel)
+static void browse_network_finished_cb(G_GNUC_UNUSED GigoloBackendGVFS *bnd, GigoloBrowseNetworkPanel *panel)
 {
 	GigoloBrowseNetworkPanelPrivate *priv = GIGOLO_BROWSE_NETWORK_PANEL_GET_PRIVATE(panel);
-	GigoloHostUri **groups;
-	GigoloHostUri **hosts;
-	guint g, i, j;
-	GtkTreeIter iter_group, iter_host, iter_share;
-	gchar **shares;
-	gpointer icon_share = NULL;
 
-	gtk_widget_set_sensitive(priv->button_refresh, FALSE);
-	gtk_tree_store_clear(priv->store);
+	gtk_tree_view_expand_all(GTK_TREE_VIEW(priv->tree));
 
-	/* TODO make this async? */
+	gtk_widget_set_sensitive(priv->button_refresh, TRUE);
 
-	/* Iterate over workgroups */
-	groups = gigolo_backend_gvfs_browse_network(NULL);
-	if (groups != NULL)
-	{
-		icon_share = gigolo_backend_gvfs_get_share_icon();
-		for (g = 0; groups[g] != NULL; g++)
-		{
-			gtk_tree_store_append(priv->store, &iter_group, NULL);
-			gtk_tree_store_set(priv->store, &iter_group,
-				COLUMN_URI, groups[g]->uri,
-				COLUMN_NAME, groups[g]->name,
-				COLUMN_ICON, groups[g]->icon,
-				COLUMN_CAN_MOUNT, FALSE,
-				-1);
+	tree_selection_changed_cb(NULL, panel);
 
-			/* Iterate over hosts */
-			hosts = gigolo_backend_gvfs_browse_network(groups[g]->uri);
-			if (hosts != NULL)
-			{
-				for (i = 0; hosts[i] != NULL; i++)
-				{
-					gtk_tree_store_append(priv->store, &iter_host, &iter_group);
-					gtk_tree_store_set(priv->store, &iter_host,
-						COLUMN_URI, hosts[i]->uri,
-						COLUMN_NAME, hosts[i]->name,
-						COLUMN_ICON, hosts[i]->icon,
-						COLUMN_CAN_MOUNT, FALSE,
-						-1);
+	gdk_window_set_cursor(gigolo_widget_get_window(GTK_WIDGET(panel)), NULL);
+}
 
-					/* Iterate over shares */
-					shares = gigolo_backend_gvfs_get_smb_shares_from_uri(hosts[i]->uri);
-					if (shares != NULL)
-					{
-						for (j = 0; shares[j] != NULL; j++)
-						{
-							gtk_tree_store_append(priv->store, &iter_share, &iter_host);
-							gtk_tree_store_set(priv->store, &iter_share,
-								COLUMN_NAME, shares[j],
-								COLUMN_URI, hosts[i]->uri,
-								COLUMN_ICON, icon_share,
-								COLUMN_CAN_MOUNT, TRUE,
-								-1);
-						}
-						g_strfreev(shares);
-					}
-					else
-						verbose("No Shares found for %s", hosts[i]->name);
 
-					g_object_unref(hosts[i]->icon);
-					g_free(hosts[i]->uri);
-					g_free(hosts[i]->name);
-					g_free(hosts[i]);
-				}
-				g_free(hosts);
-			}
-			else
-				verbose("No Hosts found for %s", groups[g]->name);
+static void gigolo_browse_network_panel_refresh(GigoloBrowseNetworkPanel *panel)
+{
+	GigoloBrowseNetworkPanelPrivate *priv = GIGOLO_BROWSE_NETWORK_PANEL_GET_PRIVATE(panel);
 
-			g_object_unref(groups[g]->icon);
-			g_free(groups[g]->uri);
-			g_free(groups[g]->name);
-			g_free(groups[g]);
-		}
-		g_free(groups);
-		if (icon_share !=  NULL)
-			g_object_unref(icon_share);
-	}
-	else
-		verbose("No Workgroups found");
+	gtk_widget_set_sensitive(priv->button_refresh, FALSE);
+	gtk_tree_store_clear(priv->store);
 
-	if (gtk_tree_model_iter_n_children(GTK_TREE_MODEL(priv->store), NULL) == 0)
-	{
-		GtkTreeIter iter;
-		gtk_tree_store_append(priv->store, &iter, NULL);
-		gtk_tree_store_set(priv->store, &iter,
-			COLUMN_NAME, _("No Workgroups found"),
-			COLUMN_CAN_MOUNT, FALSE,
-			-1);
-	}
-
-	gtk_tree_view_expand_all(GTK_TREE_VIEW(priv->tree));
-
-	gdk_window_set_cursor(gigolo_widget_get_window(GTK_WIDGET(panel)), NULL);
-	gtk_widget_set_sensitive(priv->button_refresh, TRUE);
-
-	tree_selection_changed_cb(NULL, panel);
+	gigolo_backend_gvfs_browse_network(gigolo_window_get_backend(priv->parent),
+		GTK_WINDOW(priv->parent), priv->store);
 }
 
 
@@ -340,7 +255,7 @@
 		{
 			gboolean can_mount;
 
-			gtk_tree_model_get(model, &iter, COLUMN_CAN_MOUNT, &can_mount, -1);
+			gtk_tree_model_get(model, &iter, GIGOLO_BROWSE_NETWORK_COL_CAN_MOUNT, &can_mount, -1);
 			/* double click on parent node expands/collapses it */
 			if (! can_mount)
 			{
@@ -399,9 +314,9 @@
 	{
 		gchar *uri, *share;
 		gtk_tree_model_get(model, &iter,
-			COLUMN_CAN_MOUNT, &set,
-			COLUMN_URI, &uri,
-			COLUMN_NAME, &share,
+			GIGOLO_BROWSE_NETWORK_COL_CAN_MOUNT, &set,
+			GIGOLO_BROWSE_NETWORK_COL_URI, &uri,
+			GIGOLO_BROWSE_NETWORK_COL_NAME, &share,
 			-1);
 
 		if (set)
@@ -434,7 +349,7 @@
 	GigoloBrowseNetworkPanelPrivate *priv = GIGOLO_BROWSE_NETWORK_PANEL_GET_PRIVATE(panel);
 
 	tree = gtk_tree_view_new();
-	store = gtk_tree_store_new(N_COLUMNS,
+	store = gtk_tree_store_new(GIGOLO_BROWSE_NETWORK_N_COLUMNS,
 		G_TYPE_STRING, G_TYPE_STRING, G_TYPE_ICON, G_TYPE_BOOLEAN);
 
     column = gtk_tree_view_column_new();
@@ -443,14 +358,16 @@
 	{
 		icon_renderer = gtk_cell_renderer_pixbuf_new();
 		gtk_tree_view_column_pack_start(column, icon_renderer, FALSE);
-		gtk_tree_view_column_set_attributes(column, icon_renderer, "gicon", COLUMN_ICON, NULL);
+		gtk_tree_view_column_set_attributes(column, icon_renderer,
+			"gicon", GIGOLO_BROWSE_NETWORK_COL_ICON, NULL);
 		g_object_set(icon_renderer, "xalign", 0.0, NULL);
 	}
 
 	text_renderer = gtk_cell_renderer_text_new();
 	gtk_tree_view_set_enable_search(GTK_TREE_VIEW(tree), FALSE);
 	gtk_tree_view_column_pack_start(column, text_renderer, TRUE);
-	gtk_tree_view_column_set_attributes(column, text_renderer, "text", COLUMN_NAME, NULL);
+	gtk_tree_view_column_set_attributes(column, text_renderer,
+		"text", GIGOLO_BROWSE_NETWORK_COL_NAME, NULL);
 
 	gtk_tree_view_append_column(GTK_TREE_VIEW(tree), column);
 	gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(tree), FALSE);
@@ -492,7 +409,7 @@
 }
 
 
-static void realize_cb(GtkWidget *panel, G_GNUC_UNUSED gpointer data)
+static void realize_cb(GigoloBrowseNetworkPanel *panel, G_GNUC_UNUSED gpointer data)
 {
 	g_timeout_add(250, (GSourceFunc) delay_refresh, panel);
 }
@@ -565,12 +482,16 @@
 {
 	GtkWidget *self;
 	GigoloBrowseNetworkPanelPrivate *priv;
+	GigoloBackendGVFS *backend;
 
 	self = g_object_new(GIGOLO_BROWSE_NETWORK_PANEL_TYPE, NULL);
 
 	priv = GIGOLO_BROWSE_NETWORK_PANEL_GET_PRIVATE(self);
 	priv->parent = parent;
 
+	backend = gigolo_window_get_backend(parent);
+	g_signal_connect(backend, "browse-network-finished", G_CALLBACK(browse_network_finished_cb), self);
+
 	return self;
 }
 

Modified: gigolo/trunk/src/common.h
===================================================================
--- gigolo/trunk/src/common.h	2009-04-08 21:15:10 UTC (rev 7144)
+++ gigolo/trunk/src/common.h	2009-04-09 12:30:18 UTC (rev 7145)
@@ -28,25 +28,6 @@
 	((ptr) && (ptr)[0])
 
 
-enum
-{
-	GIGOLO_WINDOW_COL_IS_MOUNTED,
-	GIGOLO_WINDOW_COL_SCHEME,
-	GIGOLO_WINDOW_COL_NAME,
-	GIGOLO_WINDOW_COL_REF,
-	GIGOLO_WINDOW_COL_REF_TYPE, /* volume or mount, see enum below */
-	GIGOLO_WINDOW_COL_PIXBUF,
-	GIGOLO_WINDOW_COL_ICON_NAME,
-	GIGOLO_WINDOW_COL_TOOLTIP,
-	GIGOLO_WINDOW_N_COLUMNS
-};
-
-enum
-{
-	GIGOLO_WINDOW_REF_TYPE_VOLUME,
-	GIGOLO_WINDOW_REF_TYPE_MOUNT /* mounted volume */
-};
-
 #ifdef DEBUG
 void debug(gchar const *format, ...);
 #else

Modified: gigolo/trunk/src/main.c
===================================================================
--- gigolo/trunk/src/main.c	2009-04-08 21:15:10 UTC (rev 7144)
+++ gigolo/trunk/src/main.c	2009-04-09 12:30:18 UTC (rev 7145)
@@ -31,8 +31,8 @@
 #include "common.h"
 #include "settings.h"
 #include "bookmark.h"
+#include "backendgvfs.h"
 #include "window.h"
-#include "backendgvfs.h"
 #include "singleinstance.h"
 
 

Modified: gigolo/trunk/src/window.c
===================================================================
--- gigolo/trunk/src/window.c	2009-04-08 21:15:10 UTC (rev 7144)
+++ gigolo/trunk/src/window.c	2009-04-09 12:30:18 UTC (rev 7145)
@@ -30,12 +30,12 @@
 #include "common.h"
 #include "bookmark.h"
 #include "settings.h"
+#include "backendgvfs.h"
 #include "window.h"
 #include "bookmarkdialog.h"
 #include "bookmarkeditdialog.h"
 #include "menubuttonaction.h"
 #include "preferencesdialog.h"
-#include "backendgvfs.h"
 #include "mountdialog.h"
 #include "browsenetworkpanel.h"
 
@@ -1542,3 +1542,15 @@
 }
 
 
+GigoloBackendGVFS *gigolo_window_get_backend(GigoloWindow *window)
+{
+	GigoloWindowPrivate *priv;
+
+	g_return_val_if_fail(window != NULL, NULL);
+
+	priv = GIGOLO_WINDOW_GET_PRIVATE(window);
+
+	return priv->backend_gvfs;
+}
+
+

Modified: gigolo/trunk/src/window.h
===================================================================
--- gigolo/trunk/src/window.h	2009-04-08 21:15:10 UTC (rev 7144)
+++ gigolo/trunk/src/window.h	2009-04-09 12:30:18 UTC (rev 7145)
@@ -61,6 +61,8 @@
 
 GigoloSettings*	gigolo_window_get_settings			(GigoloWindow *window);
 
+GigoloBackendGVFS*	gigolo_window_get_backend		(GigoloWindow *window);
+
 G_END_DECLS
 
 #endif /* __WINDOW_H__ */




More information about the Goodies-commits mailing list