]> sjero.net Git - linphone/commitdiff
fix bugs on macosx, at exit
authorSimon Morlat <simon.morlat@linphone.org>
Sat, 3 Sep 2011 14:36:06 +0000 (16:36 +0200)
committerSimon Morlat <simon.morlat@linphone.org>
Sat, 3 Sep 2011 14:36:06 +0000 (16:36 +0200)
gtk/main.c
mediastreamer2

index 95ce91d5b83dd558791e8a4a78b323a0da505d5d..08a37ea7388065203a9e3f509712a93d6f8ad433 100644 (file)
@@ -65,7 +65,6 @@ static gboolean iconified=FALSE;
 static gchar *workingdir=NULL;
 static char *progpath=NULL;
 gchar *linphone_logfile=NULL;
-static gboolean app_terminated=FALSE;
 
 static GOptionEntry linphone_options[]={
        {
@@ -1383,11 +1382,25 @@ static void linphone_gtk_check_soundcards(){
        }
 }
 
+static void linphone_gtk_quit(void){
+       gdk_threads_leave();
+        linphone_gtk_destroy_log_window();
+        linphone_core_destroy(the_core);
+        linphone_gtk_log_uninit();
+}
+
 #ifdef HAVE_GTK_OSX
+/*
+This is not the correct way to implement block termination.
+The good way would be to call gtk_main_quit(), and return TRUE.
+Unfortunately this does not work, because if we return TRUE the NSApplication sometimes calls the CFRunLoop recursively, which prevents gtk_main() to exit.
+As a result the program cannot exit at all.
+As a workaround we do all the cleanup (unregistration and config save) within the handler.
+*/
 static gboolean on_block_termination(void){
        gtk_main_quit();
-       g_message("Block termination returning %i",!app_terminated);
-       return !app_terminated;
+       linphone_gtk_quit();
+       return FALSE;
 }
 #endif
 
@@ -1514,11 +1527,7 @@ int main(int argc, char *argv[]){
                linphone_gtk_check_for_new_version();
 
        gtk_main();
-       gdk_threads_leave();
-       linphone_gtk_destroy_log_window();
-       linphone_core_destroy(the_core);
-       linphone_gtk_log_uninit();
-       app_terminated=TRUE;
+       linphone_gtk_quit();
 #ifndef HAVE_GTK_OSX
        /*workaround a bug on win32 that makes status icon still present in the systray even after program exit.*/
        gtk_status_icon_set_visible(icon,FALSE);
index 7c091db48e2ac5b785ced3964a386ec51f695a60..433c12a9e32a9f0d9e510a85b978ea65dd9bb408 160000 (submodule)
@@ -1 +1 @@
-Subproject commit 7c091db48e2ac5b785ced3964a386ec51f695a60
+Subproject commit 433c12a9e32a9f0d9e510a85b978ea65dd9bb408