[nautilus] connect-operation: add NautilusConnectServerOperation



commit c1bebe3a29bc2dc3b01ad2277a9802d9d0bc25cd
Author: Cosimo Cecchi <cosimoc gnome org>
Date:   Tue Aug 31 02:56:24 2010 +0200

    connect-operation: add NautilusConnectServerOperation
    
    This is a GtkMountOperation subclass to handle password/username/domain
    requests directly from inside of the 'Connect to Server' dialog.

 src/Makefile.am                         |    8 +-
 src/nautilus-connect-server-operation.c |  140 +++++++++++++++++++++++++++++++
 src/nautilus-connect-server-operation.h |   63 ++++++++++++++
 3 files changed, 208 insertions(+), 3 deletions(-)
---
diff --git a/src/Makefile.am b/src/Makefile.am
index 6838bb0..9669bef 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -66,7 +66,9 @@ nautilus_SOURCES = \
 	nautilus-bookmarks-window.h		\
 	nautilus-connect-server-dialog.c	\
 	nautilus-connect-server-dialog.h	\
-	nautilus-connect-server-dialog-nonmain.c	\
+	nautilus-connect-server-dialog-nonmain.c \
+	nautilus-connect-server-operation.c	\
+	nautilus-connect-server-operation.h	\
 	nautilus-desktop-window.c		\
 	nautilus-desktop-window.h		\
 	nautilus-file-management-properties.c	\
@@ -175,8 +177,8 @@ nautilus_connect_server_SOURCES= \
 	nautilus-connect-server-dialog.c	\
 	nautilus-connect-server-dialog.h	\
 	nautilus-connect-server-dialog-main.c	\
-	nautilus-location-entry.c		\
-	nautilus-location-entry.h		\
+	nautilus-connect-server-operation.c     \
+	nautilus-connect-server-operation.h     \
 	$(NULL)
 
 nautilus_convert_metadata_SOURCES= \
diff --git a/src/nautilus-connect-server-operation.c b/src/nautilus-connect-server-operation.c
new file mode 100644
index 0000000..19e2ac7
--- /dev/null
+++ b/src/nautilus-connect-server-operation.c
@@ -0,0 +1,140 @@
+/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
+/*
+ * Nautilus
+ *
+ * Copyright (C) 2010 Cosimo Cecchi <cosimoc gnome org>
+ *
+ * Nautilus 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.
+ *
+ * Nautilus 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 <cosimoc gnome org>
+ */
+
+#include <config.h>
+
+#include "nautilus-connect-server-operation.h"
+
+#include "nautilus-connect-server-dialog.h"
+
+G_DEFINE_TYPE (NautilusConnectServerOperation,
+	       nautilus_connect_server_operation, GTK_TYPE_MOUNT_OPERATION);
+
+enum {
+	PROP_DIALOG = 1,
+	NUM_PROPERTIES
+};
+
+struct _NautilusConnectServerOperationDetails {
+	NautilusConnectServerDialog *dialog;
+};
+
+static void
+fill_details_async_cb (GObject *source,
+		       GAsyncResult *result,
+		       gpointer user_data)
+{
+	NautilusConnectServerDialog *dialog;
+	NautilusConnectServerOperation *self;
+	gboolean res;
+
+	self = user_data;
+	dialog = NAUTILUS_CONNECT_SERVER_DIALOG (source);
+
+	res = nautilus_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
+nautilus_connect_server_operation_ask_password (GMountOperation *op,
+						const gchar *message,
+						const gchar *default_user,
+						const gchar *default_domain,
+						GAskPasswordFlags flags)
+{
+	NautilusConnectServerOperation *self;
+
+	self = NAUTILUS_CONNECT_SERVER_OPERATION (op);
+
+	nautilus_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
+nautilus_connect_server_operation_set_property (GObject *object,
+						guint property_id,
+						const GValue *value,
+						GParamSpec *pspec)
+{
+	NautilusConnectServerOperation *self;
+
+	self = NAUTILUS_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
+nautilus_connect_server_operation_class_init (NautilusConnectServerOperationClass *klass)
+{
+	GMountOperationClass *mount_op_class;
+	GObjectClass *object_class;
+	GParamSpec *pspec;
+
+	object_class = G_OBJECT_CLASS (klass);
+	object_class->set_property = nautilus_connect_server_operation_set_property;
+
+	mount_op_class = G_MOUNT_OPERATION_CLASS (klass);
+	mount_op_class->ask_password = nautilus_connect_server_operation_ask_password;
+
+	pspec = g_param_spec_object ("dialog", "The connect dialog",
+				     "The connect to server dialog",
+				     NAUTILUS_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 (NautilusConnectServerOperationDetails));
+}
+
+static void
+nautilus_connect_server_operation_init (NautilusConnectServerOperation *self)
+{
+	self->details = G_TYPE_INSTANCE_GET_PRIVATE (self,
+						     NAUTILUS_TYPE_CONNECT_SERVER_OPERATION,
+						     NautilusConnectServerOperationDetails);
+}
+
+GMountOperation *
+nautilus_connect_server_operation_new (NautilusConnectServerDialog *dialog)
+{
+	return g_object_new (NAUTILUS_TYPE_CONNECT_SERVER_OPERATION,
+			     "dialog", dialog,
+			     NULL);
+}
diff --git a/src/nautilus-connect-server-operation.h b/src/nautilus-connect-server-operation.h
new file mode 100644
index 0000000..a0d07b0
--- /dev/null
+++ b/src/nautilus-connect-server-operation.h
@@ -0,0 +1,63 @@
+/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
+/*
+ * Nautilus
+ *
+ * Copyright (C) 2010 Cosimo Cecchi <cosimoc gnome org>
+ *
+ * Nautilus 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.
+ *
+ * Nautilus 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 <cosimoc gnome org>
+ */
+
+#ifndef __NAUTILUS_CONNECT_SERVER_OPERATION_H__
+#define __NAUTILUS_CONNECT_SERVER_OPERATION_H__
+
+#include <gio/gio.h>
+#include <gtk/gtk.h>
+
+#include "nautilus-connect-server-dialog.h"
+
+#define NAUTILUS_TYPE_CONNECT_SERVER_OPERATION\
+	(nautilus_connect_server_operation_get_type ())
+#define NAUTILUS_CONNECT_SERVER_OPERATION(obj)\
+  (G_TYPE_CHECK_INSTANCE_CAST ((obj),\
+			       NAUTILUS_TYPE_CONNECT_SERVER_OPERATION,\
+			       NautilusConnectServerOperation))
+#define NAUTILUS_CONNECT_SERVER_OPERATION_CLASS(klass)\
+  (G_TYPE_CHECK_CLASS_CAST ((klass), NAUTILUS_TYPE_CONNECT_SERVER_OPERATION,\
+			    NautilusConnectServerOperationClass))
+#define NAUTILUS_IS_CONNECT_SERVER_OPERATION(obj)\
+  (G_TYPE_INSTANCE_CHECK_TYPE ((obj), NAUTILUS_TYPE_CONNECT_SERVER_OPERATION)
+
+typedef struct _NautilusConnectServerOperationDetails
+  NautilusConnectServerOperationDetails;
+
+typedef struct {
+	GtkMountOperation parent;
+	NautilusConnectServerOperationDetails *details;
+} NautilusConnectServerOperation;
+
+typedef struct {
+	GtkMountOperationClass parent_class;
+} NautilusConnectServerOperationClass;
+
+GType nautilus_connect_server_operation_get_type (void);
+
+GMountOperation *
+nautilus_connect_server_operation_new (NautilusConnectServerDialog *dialog);
+
+
+#endif /* __NAUTILUS_CONNECT_SERVER_OPERATION_H__ */



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]