From 704b78d23bf8d707707411608a3453250f2637a1 Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Tue, 6 Nov 2012 16:20:46 +0100 Subject: Replace deprecated GLib symbols (as of GLib 2.34.x) --- plugins/external-editor/external-editor.c | 47 ++++++++++++++++++------------- 1 file changed, 28 insertions(+), 19 deletions(-) (limited to 'plugins/external-editor/external-editor.c') diff --git a/plugins/external-editor/external-editor.c b/plugins/external-editor/external-editor.c index cac0a63ed5..42cdb9f9ff 100644 --- a/plugins/external-editor/external-editor.c +++ b/plugins/external-editor/external-editor.c @@ -53,7 +53,6 @@ static void ee_editor_command_changed (GtkWidget *textbox); static void ee_editor_immediate_launch_changed (GtkWidget *checkbox); -static void async_external_editor (EMsgComposer *composer); static gboolean editor_running (void); static gboolean key_press_cb (GtkWidget *widget, GdkEventKey *event, @@ -249,9 +248,13 @@ numlines (const gchar *text, return lineno; } -void -async_external_editor (EMsgComposer *composer) +static gboolean external_editor_running = FALSE; +static GMutex external_editor_running_lock; + +static gpointer +external_editor_thread (gpointer user_data) { + EMsgComposer *composer = user_data; gchar *filename = NULL; gint status = 0; GSettings *settings; @@ -280,7 +283,8 @@ async_external_editor (EMsgComposer *composer) /* run_error_dialog also calls enable_composer */ g_idle_add ((GSourceFunc) run_error_dialog, data); - return; + + goto finished; } settings = g_settings_new ("org.gnome.evolution.plugin.external-editor"); @@ -339,7 +343,7 @@ async_external_editor (EMsgComposer *composer) g_free (filename); g_free (editor_cmd_line); g_free (editor_cmd); - return; + goto finished; } g_free (editor_cmd_line); g_free (editor_cmd); @@ -351,7 +355,7 @@ async_external_editor (EMsgComposer *composer) #endif d (printf ("\n\nsome problem here with external editor\n\n")); g_idle_add ((GSourceFunc) enable_composer, composer); - return; + goto finished; } else { gchar *buf; @@ -373,6 +377,13 @@ async_external_editor (EMsgComposer *composer) g_free (filename); } } + + finished: + g_mutex_lock (&external_editor_running_lock); + external_editor_running = FALSE; + g_mutex_unlock (&external_editor_running_lock); + + return NULL; } static void launch_editor (GtkAction *action, EMsgComposer *composer) @@ -386,8 +397,13 @@ static void launch_editor (GtkAction *action, EMsgComposer *composer) disable_composer (composer); - editor_thread = g_thread_create ( - (GThreadFunc) async_external_editor, composer, FALSE, NULL); + g_mutex_lock (&external_editor_running_lock); + external_editor_running = TRUE; + g_mutex_unlock (&external_editor_running_lock); + + editor_thread = g_thread_new ( + NULL, external_editor_thread, composer); + g_thread_unref (editor_thread); } static GtkActionEntry entries[] = { @@ -431,21 +447,14 @@ key_press_cb (GtkWidget *widget, return TRUE; } -static void -editor_running_thread_func (GThread *thread, - gpointer running) -{ - if (thread == editor_thread) - *(gboolean*)running = TRUE; -} - -/* Racy? */ static gboolean editor_running (void) { - gboolean running = FALSE; + gboolean running; - g_thread_foreach ((GFunc) editor_running_thread_func, &running); + g_mutex_lock (&external_editor_running_lock); + running = external_editor_running; + g_mutex_unlock (&external_editor_running_lock); return running; } -- cgit