From 2cd55348bedf2779076471fa972f8d26e8e0ffce Mon Sep 17 00:00:00 2001 From: Stef Walter Date: Fri, 21 Sep 2012 09:17:12 +0200 Subject: [PATCH] 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 file 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); } -- 2.7.4