summaryrefslogtreecommitdiff
path: root/src/caja-connect-server-operation.c
diff options
context:
space:
mode:
authorJasmine Hassan <[email protected]>2012-10-27 05:46:00 +0200
committerJasmine Hassan <[email protected]>2012-11-16 09:45:51 +0200
commiteade711fe26dc22391a60bc33f423817c39d9f43 (patch)
treefca90fc96e6ffe8db9b7bd9c025eb28a3777f5e7 /src/caja-connect-server-operation.c
parent71c4af286ce5fab422537202081103aded078692 (diff)
downloadcaja-eade711fe26dc22391a60bc33f423817c39d9f43.tar.bz2
caja-eade711fe26dc22391a60bc33f423817c39d9f43.tar.xz
[connect-operation] add CajaConnectServerOperation
This is a GtkMountOperation subclass to handle password/username/domain requests directly from inside of the 'Connect to Server' dialog. http://git.gnome.org/browse/nautilus/commit/?id=c1bebe3a29bc2dc3b01ad2277a9802d9d0bc25cd
Diffstat (limited to 'src/caja-connect-server-operation.c')
-rw-r--r--src/caja-connect-server-operation.c140
1 files changed, 140 insertions, 0 deletions
diff --git a/src/caja-connect-server-operation.c b/src/caja-connect-server-operation.c
new file mode 100644
index 00000000..51b69b84
--- /dev/null
+++ b/src/caja-connect-server-operation.c
@@ -0,0 +1,140 @@
+/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
+/*
+ * Caja
+ *
+ * Copyright (C) 2010 Cosimo Cecchi <[email protected]>
+ *
+ * Caja is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * Caja is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program; see the file COPYING. If not,
+ * write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ *
+ * Author: Cosimo Cecchi <[email protected]>
+ */
+
+#include <config.h>
+
+#include "caja-connect-server-operation.h"
+
+#include "caja-connect-server-dialog.h"
+
+G_DEFINE_TYPE (CajaConnectServerOperation,
+ caja_connect_server_operation, GTK_TYPE_MOUNT_OPERATION);
+
+enum {
+ PROP_DIALOG = 1,
+ NUM_PROPERTIES
+};
+
+struct _CajaConnectServerOperationDetails {
+ CajaConnectServerDialog *dialog;
+};
+
+static void
+fill_details_async_cb (GObject *source,
+ GAsyncResult *result,
+ gpointer user_data)
+{
+ CajaConnectServerDialog *dialog;
+ CajaConnectServerOperation *self;
+ gboolean res;
+
+ self = user_data;
+ dialog = CAJA_CONNECT_SERVER_DIALOG (source);
+
+ res = caja_connect_server_dialog_fill_details_finish (dialog, result);
+
+ if (!res) {
+ g_mount_operation_reply (G_MOUNT_OPERATION (self), G_MOUNT_OPERATION_ABORTED);
+ } else {
+ g_mount_operation_reply (G_MOUNT_OPERATION (self), G_MOUNT_OPERATION_HANDLED);
+ }
+}
+
+static void
+caja_connect_server_operation_ask_password (GMountOperation *op,
+ const gchar *message,
+ const gchar *default_user,
+ const gchar *default_domain,
+ GAskPasswordFlags flags)
+{
+ CajaConnectServerOperation *self;
+
+ self = CAJA_CONNECT_SERVER_OPERATION (op);
+
+ caja_connect_server_dialog_fill_details_async (self->details->dialog,
+ G_MOUNT_OPERATION (self),
+ default_user,
+ default_domain,
+ flags,
+ fill_details_async_cb,
+ self);
+}
+
+static void
+caja_connect_server_operation_set_property (GObject *object,
+ guint property_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ CajaConnectServerOperation *self;
+
+ self = CAJA_CONNECT_SERVER_OPERATION (object);
+
+ switch (property_id) {
+ case PROP_DIALOG:
+ self->details->dialog = g_value_get_object (value);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+ break;
+ }
+}
+
+static void
+caja_connect_server_operation_class_init (CajaConnectServerOperationClass *klass)
+{
+ GMountOperationClass *mount_op_class;
+ GObjectClass *object_class;
+ GParamSpec *pspec;
+
+ object_class = G_OBJECT_CLASS (klass);
+ object_class->set_property = caja_connect_server_operation_set_property;
+
+ mount_op_class = G_MOUNT_OPERATION_CLASS (klass);
+ mount_op_class->ask_password = caja_connect_server_operation_ask_password;
+
+ pspec = g_param_spec_object ("dialog", "The connect dialog",
+ "The connect to server dialog",
+ CAJA_TYPE_CONNECT_SERVER_DIALOG,
+ G_PARAM_CONSTRUCT_ONLY | G_PARAM_WRITABLE | G_PARAM_STATIC_STRINGS);
+ g_object_class_install_property (object_class, PROP_DIALOG, pspec);
+
+ g_type_class_add_private (klass, sizeof (CajaConnectServerOperationDetails));
+}
+
+static void
+caja_connect_server_operation_init (CajaConnectServerOperation *self)
+{
+ self->details = G_TYPE_INSTANCE_GET_PRIVATE (self,
+ CAJA_TYPE_CONNECT_SERVER_OPERATION,
+ CajaConnectServerOperationDetails);
+}
+
+GMountOperation *
+caja_connect_server_operation_new (CajaConnectServerDialog *dialog)
+{
+ return g_object_new (CAJA_TYPE_CONNECT_SERVER_OPERATION,
+ "dialog", dialog,
+ NULL);
+}