gvfs/gvfs-1.2.0-fix-daemon-mount...

114 lines
3.7 KiB
Diff

--- trunk/common/gvfsdaemonprotocol.h 2009/02/27 12:59:47 2257
+++ trunk/common/gvfsdaemonprotocol.h 2009/03/18 21:03:15 2342
@@ -73,6 +73,7 @@
#define G_VFS_DBUS_MOUNT_OPERATION_INTERFACE "org.gtk.vfs.MountOperation"
#define G_VFS_DBUS_MOUNT_OPERATION_OP_ASK_PASSWORD "askPassword"
#define G_VFS_DBUS_MOUNT_OPERATION_OP_ASK_QUESTION "askQuestion"
+#define G_VFS_DBUS_MOUNT_OPERATION_OP_ABORTED "aborted"
/* Implemented by the spawner of a process, the spawned process sends the
spawned message (with noreply) when it has spawned and gotten a dbus id */
--- trunk/common/gmountoperationdbus.c 2008/08/25 13:27:36 1907
+++ trunk/common/gmountoperationdbus.c 2009/03/18 21:03:15 2342
@@ -51,6 +51,8 @@
DBusMessage *message);
static void mount_op_ask_question (GMountOperationDBus *op_dbus,
DBusMessage *message);
+static void mount_op_aborted (GMountOperationDBus *op_dbus,
+ DBusMessage *message);
static void
g_mount_operation_dbus_free (GMountOperationDBus *op_dbus)
@@ -131,6 +133,10 @@
G_VFS_DBUS_MOUNT_OPERATION_INTERFACE,
G_VFS_DBUS_MOUNT_OPERATION_OP_ASK_QUESTION))
mount_op_ask_question (op_dbus, message);
+ else if (dbus_message_is_method_call (message,
+ G_VFS_DBUS_MOUNT_OPERATION_INTERFACE,
+ G_VFS_DBUS_MOUNT_OPERATION_OP_ABORTED))
+ mount_op_aborted (op_dbus, message);
else
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
@@ -322,3 +328,10 @@
dbus_free_string_array (choices);
}
+
+static void
+mount_op_aborted (GMountOperationDBus *op_dbus,
+ DBusMessage *message)
+{
+ g_signal_emit_by_name (op_dbus->op, "aborted");
+}
--- trunk/common/gmountsource.c 2008/09/23 19:16:06 2021
+++ trunk/common/gmountsource.c 2009/03/18 21:03:15 2342
@@ -433,8 +433,8 @@
handled = g_mount_source_ask_password_finish (source,
res,
&aborted,
- &username,
&password,
+ &username,
&domain,
NULL,
&password_save);
@@ -475,6 +475,7 @@
flags,
op_ask_password_reply,
g_object_ref (op));
+ g_signal_stop_emission_by_name (op, "ask_password");
return TRUE;
}
@@ -695,9 +696,41 @@
n_choices,
op_ask_question_reply,
g_object_ref (op));
+ g_signal_stop_emission_by_name (op, "ask_question");
return TRUE;
}
+static gboolean
+op_aborted (GMountOperation *op,
+ GMountSource *source)
+{
+ DBusMessage *message;
+ DBusConnection *connection;
+
+ /* If no dbus id specified, reply that we weren't handled */
+ if (source->dbus_id[0] == 0)
+ goto out;
+
+ connection = dbus_bus_get (DBUS_BUS_SESSION, NULL);
+ if (connection == NULL)
+ goto out;
+
+ message = dbus_message_new_method_call (source->dbus_id,
+ source->obj_path,
+ G_VFS_DBUS_MOUNT_OPERATION_INTERFACE,
+ G_VFS_DBUS_MOUNT_OPERATION_OP_ABORTED);
+
+ if (message)
+ {
+ dbus_connection_send (connection, message, NULL);
+ dbus_message_unref (message);
+ }
+
+ out:
+ return TRUE;
+}
+
+
GMountOperation *
g_mount_source_get_operation (GMountSource *mount_source)
{
@@ -711,6 +744,7 @@
g_signal_connect (op, "ask_password", (GCallback)op_ask_password, mount_source);
g_signal_connect (op, "ask_question", (GCallback)op_ask_question, mount_source);
+ g_signal_connect (op, "aborted", (GCallback)op_aborted, mount_source);
return op;
}