glib r6282 - trunk/gio



Author: alexl
Date: Wed Jan  9 14:43:41 2008
New Revision: 6282
URL: http://svn.gnome.org/viewvc/glib?rev=6282&view=rev

Log:
2008-01-09  Alexander Larsson  <alexl redhat com>

        * gio-marshal.list:
        * gmountoperation.[ch]:
	Change the API a bit so that unhandled methods
	get reported via the reply, rather than by
	the signal emission return value. This is because
	some handlers can't know this immediately without
	doing I/O, and this is an async operation that
	should not block.



Modified:
   trunk/gio/ChangeLog
   trunk/gio/gio-marshal.list
   trunk/gio/gmountoperation.c
   trunk/gio/gmountoperation.h

Modified: trunk/gio/gio-marshal.list
==============================================================================
--- trunk/gio/gio-marshal.list	(original)
+++ trunk/gio/gio-marshal.list	Wed Jan  9 14:43:41 2008
@@ -1,4 +1,4 @@
-BOOLEAN:STRING,STRING,STRING,FLAGS
-BOOLEAN:STRING,BOXED
+VOID:STRING,STRING,STRING,FLAGS
+VOID:STRING,BOXED
 VOID:BOOLEAN,POINTER
 VOID:OBJECT,OBJECT,ENUM

Modified: trunk/gio/gmountoperation.c
==============================================================================
--- trunk/gio/gmountoperation.c	(original)
+++ trunk/gio/gmountoperation.c	Wed Jan  9 14:43:41 2008
@@ -193,37 +193,36 @@
 }
 
 static gboolean
-boolean_handled_accumulator (GSignalInvocationHint *ihint,
-			     GValue                *return_accu,
-			     const GValue          *handler_return,
-			     gpointer               dummy)
+reply_non_handled_in_idle (gpointer data)
 {
-  gboolean continue_emission;
-  gboolean signal_handled;
-  
-  signal_handled = g_value_get_boolean (handler_return);
-  g_value_set_boolean (return_accu, signal_handled);
-  continue_emission = !signal_handled;
-  
-  return continue_emission;
+  GMountOperation *op = data;
+
+  g_mount_operation_reply (op, G_MOUNT_OPERATION_UNHANDLED);
+  return FALSE;
 }
 
-static gboolean
+static void
 ask_password (GMountOperation *op,
 	      const char      *message,
 	      const char      *default_user,
 	      const char      *default_domain,
 	      GAskPasswordFlags flags)
 {
-  return FALSE;
+  g_idle_add_full (G_PRIORITY_DEFAULT_IDLE,
+		   reply_non_handled_in_idle,
+		   g_object_ref (op),
+		   g_object_unref);
 }
   
-static gboolean
+static void
 ask_question (GMountOperation *op,
 	      const char      *message,
 	      const char      *choices[])
 {
-  return FALSE;
+  g_idle_add_full (G_PRIORITY_DEFAULT_IDLE,
+		   reply_non_handled_in_idle,
+		   g_object_ref (op),
+		   g_object_unref);
 }
 
 static void
@@ -256,9 +255,9 @@
 		  G_TYPE_FROM_CLASS (object_class),
 		  G_SIGNAL_RUN_LAST,
 		  G_STRUCT_OFFSET (GMountOperationClass, ask_password),
-		  boolean_handled_accumulator, NULL,
-		  _gio_marshal_BOOLEAN__STRING_STRING_STRING_FLAGS,
-		  G_TYPE_BOOLEAN, 4,
+		  NULL, NULL,
+		  _gio_marshal_VOID__STRING_STRING_STRING_FLAGS,
+		  G_TYPE_NONE, 4,
 		  G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_ASK_PASSWORD_FLAGS);
 		  
   /**
@@ -275,9 +274,9 @@
 		  G_TYPE_FROM_CLASS (object_class),
 		  G_SIGNAL_RUN_LAST,
 		  G_STRUCT_OFFSET (GMountOperationClass, ask_question),
-		  boolean_handled_accumulator, NULL,
-		  _gio_marshal_BOOLEAN__STRING_BOXED,
-		  G_TYPE_BOOLEAN, 2,
+		  NULL, NULL,
+		  _gio_marshal_VOID__STRING_BOXED,
+		  G_TYPE_NONE, 2,
 		  G_TYPE_STRING, G_TYPE_STRV);
 		  
   /**
@@ -293,9 +292,9 @@
 		  G_SIGNAL_RUN_LAST,
 		  G_STRUCT_OFFSET (GMountOperationClass, reply),
 		  NULL, NULL,
-		  g_cclosure_marshal_VOID__BOOLEAN,
+		  g_cclosure_marshal_VOID__ENUM,
 		  G_TYPE_NONE, 1,
-		  G_TYPE_BOOLEAN);
+		  G_TYPE_MOUNT_OPERATION_RESULT);
 
   /**
    * GMountOperation:username:
@@ -628,10 +627,10 @@
  **/
 void
 g_mount_operation_reply (GMountOperation *op,
-			 gboolean         abort)
+			 GMountOperationResult result)
 {
   g_return_if_fail (G_IS_MOUNT_OPERATION (op));
-  g_signal_emit (op, signals[REPLY], 0, abort);
+  g_signal_emit (op, signals[REPLY], 0, result);
 }
 
 #define __G_MOUNT_OPERATION_C__

Modified: trunk/gio/gmountoperation.h
==============================================================================
--- trunk/gio/gmountoperation.h	(original)
+++ trunk/gio/gmountoperation.h	Wed Jan  9 14:43:41 2008
@@ -92,24 +92,39 @@
   G_PASSWORD_SAVE_PERMANENTLY
 } GPasswordSave;
 
+/**
+ * GMountOperationResult:
+ * @G_MOUNT_OPERATION_HANDLED: The request was fulfilled and the user specified data is now availible
+ * @G_MOUNT_OPERATION_ABORTED: The user requested the mount operation to be aborted
+ * @G_MOUNT_OPERATION_UNHANDLED: The request was unhandled (i.e. not implemented)
+ * 
+ * #GMountOperationResult is returned as a result when a request for information
+ * is send by the mounting operation.
+ **/ 
+typedef enum {
+  G_MOUNT_OPERATION_HANDLED,
+  G_MOUNT_OPERATION_ABORTED,
+  G_MOUNT_OPERATION_UNHANDLED
+} GMountOperationResult;
+
 struct _GMountOperationClass
 {
   GObjectClass parent_class;
 
   /* signals: */
 
-  gboolean (* ask_password) (GMountOperation *op,
-			     const char      *message,
-			     const char      *default_user,
-			     const char      *default_domain,
-			     GAskPasswordFlags flags);
-
-  gboolean (* ask_question) (GMountOperation *op,
-			     const char      *message,
-			     const char      *choices[]);
+  void (* ask_password) (GMountOperation *op,
+			 const char      *message,
+			 const char      *default_user,
+			 const char      *default_domain,
+			 GAskPasswordFlags flags);
+
+  void (* ask_question) (GMountOperation *op,
+			 const char      *message,
+			 const char      *choices[]);
   
-  void     (* reply)        (GMountOperation *op,
-			     gboolean         abort);
+  void (* reply)        (GMountOperation *op,
+			 GMountOperationResult result);
   
   /*< private >*/
   /* Padding for future expansion */
@@ -150,7 +165,7 @@
 void          g_mount_operation_set_choice        (GMountOperation *op,
 						   int              choice);
 void          g_mount_operation_reply             (GMountOperation *op,
-						   gboolean         abort);
+						   GMountOperationResult result);
 
 G_END_DECLS
 



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