GFile *server_list_file;
GFileMonitor *server_list_monitor;
+ GFileMonitor *network_monitor;
GCancellable *cancellable;
priv->destroyed = 1;
g_signal_handlers_disconnect_by_func (priv->volume_monitor, update_places, widget);
+ g_signal_handlers_disconnect_by_func (priv->network_monitor, update_places, widget);
g_cancellable_cancel (priv->cancellable);
g_cancellable_cancel (priv->networks_fetching_cancellable);
g_clear_object (&priv->server_list_file);
g_clear_object (&priv->server_list_monitor);
g_clear_object (&priv->volume_monitor);
+ g_clear_object (&priv->network_monitor);
g_clear_object (&priv->cancellable);
g_clear_object (&priv->networks_fetching_cancellable);
g_clear_object (&priv->path_size_group);
}
}
+static void
+monitor_network (GtkPlacesView *self)
+{
+ GtkPlacesViewPrivate *priv;
+ GFile *network_file;
+ GError *error;
+
+ priv = gtk_places_view_get_instance_private (self);
+
+ if (priv->network_monitor)
+ return;
+
+ error = NULL;
+ network_file = g_file_new_for_uri ("network:///");
+ priv->network_monitor = g_file_monitor (network_file,
+ G_FILE_MONITOR_NONE,
+ NULL,
+ &error);
+
+ g_clear_object (&network_file);
+
+ if (error)
+ {
+ g_warning ("Error monitoring network: %s", error->message);
+ g_clear_error (&error);
+ return;
+ }
+
+ g_signal_connect_swapped (priv->network_monitor,
+ "changed",
+ G_CALLBACK (update_places),
+ self);
+}
+
static void
populate_networks (GtkPlacesView *view,
GFileEnumerator *enumerator,
if (!priv->destroyed)
{
update_network_state (view);
+ monitor_network (view);
update_loading (view);
}
}