[gnome-settings-daemon/mount-plugin: 12/13] Show the devices panel when a volume is mounted
- From: Ross Burton <rburton src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-settings-daemon/mount-plugin: 12/13] Show the devices panel when a volume is mounted
- Date: Thu, 1 Apr 2010 21:45:51 +0000 (UTC)
commit 5d9ad385f4f62aefe785191db34e6c8c6517f26e
Author: Ross Burton <ross linux intel com>
Date: Wed Mar 24 16:21:18 2010 +0000
Show the devices panel when a volume is mounted
plugins/mount/gsd-mount-manager.c | 74 ++++++++++++++++++++++++++----------
1 files changed, 53 insertions(+), 21 deletions(-)
---
diff --git a/plugins/mount/gsd-mount-manager.c b/plugins/mount/gsd-mount-manager.c
index 6fca1e8..257ea11 100644
--- a/plugins/mount/gsd-mount-manager.c
+++ b/plugins/mount/gsd-mount-manager.c
@@ -25,12 +25,15 @@
#include <gio/gio.h>
#include <gtk/gtk.h>
+#include <dbus/dbus-glib.h>
+
#include "gsd-mount-manager.h"
#define GSD_MOUNT_MANAGER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GSD_TYPE_MOUNT_MANAGER, GsdMountManagerPrivate))
struct GsdMountManagerPrivate
{
+ DBusGConnection *session_bus;
GVolumeMonitor *monitor;
gboolean coldplugging;
};
@@ -50,6 +53,38 @@ drive_connected_cb (GVolumeMonitor *monitor,
#endif
static void
+mount_added_cb (GVolumeMonitor *monitor,
+ GMount *mount,
+ GsdMountManager *manager)
+{
+ GFile *file;
+ char *uri;
+ DBusGProxy *proxy;
+
+ if (manager->priv->coldplugging)
+ return;
+
+ file = g_mount_get_root (mount);
+ uri = g_file_get_uri (file);
+ g_debug ("%s mounted, showing devices panel", uri);
+ g_free (uri);
+ g_object_unref (file);
+
+
+ if (manager->priv->session_bus) {
+ proxy = dbus_g_proxy_new_for_name (manager->priv->session_bus,
+ "org.moblin.UX.Shell.Toolbar",
+ "/org/moblin/UX/Shell/Toolbar",
+ "org.moblin.UX.Shell.Toolbar");
+
+ dbus_g_proxy_call_no_reply (proxy, "ShowPanel",
+ G_TYPE_STRING, "devices", G_TYPE_INVALID);
+
+ g_object_unref (proxy);
+ }
+}
+
+static void
volume_mounted_cb (GObject *source_object, GAsyncResult *result, gpointer user_data)
{
GsdMountManager *manager = GSD_MOUNT_MANAGER (user_data);
@@ -113,26 +148,6 @@ volume_added_cb (GVolumeMonitor *monitor,
}
static void
-mount_added_cb (GVolumeMonitor *monitor,
- GMount *mount,
- GsdMountManager *manager)
-{
- GFile *file;
- char *uri;
-
- file = g_mount_get_root (mount);
- uri = g_file_get_uri (file);
-
- g_debug ("%s mounted, starting file manager", uri);
-
- /* TODO: some sort of dialog */
- /* gtk_show_uri (NULL, uri, GDK_CURRENT_TIME, NULL); */
-
- g_free (uri);
- g_object_unref (file);
-}
-
-static void
mount_existing_volumes (GsdMountManager *manager)
{
/* TODO: iterate over drives to hook up eject */
@@ -164,12 +179,22 @@ mount_existing_volumes (GsdMountManager *manager)
gboolean
gsd_mount_manager_start (GsdMountManager *manager,
- GError **error)
+ GError **error)
{
+ GError *derror = NULL;
+
g_debug ("Starting mount manager");
+ manager->priv->session_bus = dbus_g_bus_get (DBUS_BUS_SESSION, &derror);
+ if (manager->priv->session_bus == NULL) {
+ g_printerr ("Cannot connect to DBus: %s\n", derror->message);
+ g_error_free (derror);
+ }
+
manager->priv->monitor = g_volume_monitor_get ();
+ manager->priv->coldplugging = FALSE;
+
#if 0
g_signal_connect_object (manager->priv->monitor, "drive-connected",
G_CALLBACK (drive_connected_cb), manager, 0);
@@ -190,6 +215,13 @@ void
gsd_mount_manager_stop (GsdMountManager *manager)
{
g_debug ("Stopping mount manager");
+
+ /* TODO: disconnect signals */
+
+ g_object_unref (manager->priv->monitor);
+ manager->priv->monitor = NULL;
+
+ manager->priv->session_bus = NULL;
}
static void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]