diff -up gnome-volume-manager-2.22.0/src/manager.c.screensaver gnome-volume-manager-2.22.0/src/manager.c
--- gnome-volume-manager-2.22.0/src/manager.c.screensaver 2007-12-07 07:25:28.000000000 -0500
+++ gnome-volume-manager-2.22.0/src/manager.c 2007-12-07 07:30:19.000000000 -0500
@@ -62,6 +62,7 @@
static struct gvm_configuration config;
static DBusConnection *dbus_connection = NULL;
+static DBusConnection *dbus_connection_session = NULL;
static char *gnome_mount = NULL;
static LibHalContext *hal_ctx;
@@ -2122,6 +2123,42 @@ gvm_mount_options (GPtrArray *options, g
return TRUE;
}
+static gboolean
+gvm_is_screensaver_running (gboolean *is_screensaver_running)
+{
+ DBusError error;
+ DBusMessage *msg;
+ DBusMessage *reply;
+ DBusMessageIter iter;
+
+ if (!(msg = dbus_message_new_method_call ("org.gnome.ScreenSaver",
+ "/",
+ "org.gnome.ScreenSaver",
+ "GetActive"))) {
+ dbg ("gvm_is_screensaver_running: could not create dbus message\n");
+ return FALSE;
+ }
+
+ dbus_error_init (&error);
+ if (!(reply = dbus_connection_send_with_reply_and_block (dbus_connection_session, msg, -1, &error))) {
+ dbg ("gvm_is_screensaver_running: %s\n", error.message);
+ dbus_message_unref (msg);
+ dbus_error_free (&error);
+ return FALSE;
+ }
+
+ dbus_message_iter_init (reply, &iter);
+ if (dbus_message_iter_get_arg_type (&iter) != DBUS_TYPE_BOOLEAN) {
+ dbg ("gvm_is_screensaver_running: Return value is not a bool");
+ dbus_message_unref (msg);
+ dbus_message_unref (reply);
+ return FALSE;
+ }
+ dbus_message_iter_get_basic (&iter, is_screensaver_running);
+ dbus_message_unref (reply);
+ dbus_message_unref (msg);
+ return TRUE;
+}
/*
* gvm_device_mount - mount the given device.
@@ -2132,6 +2169,14 @@ static gboolean
gvm_device_mount (const char *udi, gboolean interactive)
{
struct _MountPolicy *policy;
+ gboolean is_screensaver_running;
+
+ if (gvm_is_screensaver_running (&is_screensaver_running)) {
+ if (is_screensaver_running) {
+ dbg ("refusing to mount %s because screensaver is running\n", udi);
+ return FALSE;
+ }
+ }
dbg ("mounting %s...\n", udi);
@@ -3224,9 +3269,17 @@ gvm_dbus_init (void)
dbus_error_free (&error);
return FALSE;
}
+
+ if (!(dbus_connection_session = dbus_bus_get (DBUS_BUS_SESSION, &error))) {
+ dbg ("could not get session bus: %s\n", error.message);
+ dbus_error_free (&error);
+ return FALSE;
+ }
dbus_connection_setup_with_g_main (dbus_connection, NULL);
dbus_connection_set_exit_on_disconnect (dbus_connection, FALSE);
+
+ dbus_connection_setup_with_g_main (dbus_connection_session, NULL);
dbus_connection_add_filter (dbus_connection, gvm_dbus_filter_function, NULL, NULL);