[gcr] gcr: Make the mock prompter's response handling more extensible



commit 2cd55348bedf2779076471fa972f8d26e8e0ffce
Author: Stef Walter <stefw gnome org>
Date:   Fri Sep 21 09:17:12 2012 +0200

    gcr: Make the mock prompter's response handling more extensible
    
     * So that we can handle closing of prompts in later commits
     * Also makes it more predictable as to which context the response
       is sent from.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=678611

 gcr/gcr-mock-prompter.c |   43 ++++++++++++++++++++++++-------------------
 1 files changed, 24 insertions(+), 19 deletions(-)
---
diff --git a/gcr/gcr-mock-prompter.c b/gcr/gcr-mock-prompter.c
index 3e14403..1ef31e0 100644
--- a/gcr/gcr-mock-prompter.c
+++ b/gcr/gcr-mock-prompter.c
@@ -396,10 +396,10 @@ _gcr_mock_prompt_class_init (GcrMockPromptClass *klass)
 }
 
 static gboolean
-on_timeout_complete_response (gpointer data)
+on_timeout_complete (gpointer data)
 {
 	GSimpleAsyncResult *res = data;
-	g_simple_async_result_complete_in_idle (res);
+	g_simple_async_result_complete (res);
 	return FALSE;
 }
 
@@ -410,8 +410,10 @@ gcr_mock_prompt_confirm_async (GcrPrompt *prompt,
                                gpointer user_data)
 {
 	GcrMockPrompt *self = GCR_MOCK_PROMPT (prompt);
+	GSourceFunc complete_func = on_timeout_complete;
 	GSimpleAsyncResult *res;
 	MockResponse *response;
+	GSource *source;
 	guint delay_msec;
 
 	g_mutex_lock (running->mutex);
@@ -435,17 +437,17 @@ gcr_mock_prompt_confirm_async (GcrPrompt *prompt,
 		g_simple_async_result_set_op_res_gboolean (res, response->proceed);
 	}
 
-	mock_response_free (response);
+	if (delay_msec > 0)
+		source = g_timeout_source_new (delay_msec);
+	else
+		source = g_idle_source_new ();
 
-	if (delay_msec > 0) {
-		g_assert (!self->delay_source);
-		self->delay_source = g_timeout_add_full (G_PRIORITY_DEFAULT, delay_msec,
-		                                         on_timeout_complete_response,
-		                                         g_object_ref (res), g_object_unref);
-	} else {
-		on_timeout_complete_response (res);
-	}
+	g_assert (!self->delay_source);
+	g_source_set_callback (source, complete_func, g_object_ref (res), g_object_unref);
+	self->delay_source = g_source_attach (source, g_main_context_get_thread_default ());
+	g_source_unref (source);
 
+	mock_response_free (response);
 	g_object_unref (res);
 }
 
@@ -484,8 +486,10 @@ gcr_mock_prompt_password_async (GcrPrompt *prompt,
                                 gpointer user_data)
 {
 	GcrMockPrompt *self = GCR_MOCK_PROMPT (prompt);
+	GSourceFunc complete_func = on_timeout_complete;
 	GSimpleAsyncResult *res;
 	MockResponse *response;
+	GSource *source;
 	guint delay_msec;
 
 	g_mutex_lock (running->mutex);
@@ -517,14 +521,15 @@ gcr_mock_prompt_password_async (GcrPrompt *prompt,
 
 	mock_response_free (response);
 
-	if (delay_msec > 0) {
-		g_assert (!self->delay_source);
-		self->delay_source = g_timeout_add_full (G_PRIORITY_DEFAULT, delay_msec,
-		                                         on_timeout_complete_response,
-		                                         g_object_ref (res), g_object_unref);
-	} else {
-		on_timeout_complete_response (res);
-	}
+	if (delay_msec > 0)
+		source = g_timeout_source_new (delay_msec);
+	else
+		source = g_idle_source_new ();
+
+	g_assert (!self->delay_source);
+	g_source_set_callback (source, complete_func, g_object_ref (res), g_object_unref);
+	self->delay_source = g_source_attach (source, g_main_context_get_thread_default ());
+	g_source_unref (source);
 
 	g_object_unref (res);
 }



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