]> sjero.net Git - linphone/blobdiff - gtk/main.c
Fix issue with assistant and memory leak
[linphone] / gtk / main.c
index 5d9158713a0c4d60a71b7aad2dfde44a4dd4f310..08461290ad65bea83aee65d602e9dcc08367a30f 100644 (file)
@@ -50,7 +50,6 @@ const char *this_program_ident_string="linphone_ident_string=" LINPHONE_VERSION;
 
 static LinphoneCore *the_core=NULL;
 static GtkWidget *the_ui=NULL;
-GtkWidget *the_wizard=NULL;
 
 static void linphone_gtk_registration_state_changed(LinphoneCore *lc, LinphoneProxyConfig *cfg, LinphoneRegistrationState rs, const char *msg);
 static void linphone_gtk_notify_recv(LinphoneCore *lc, LinphoneFriend * fid);
@@ -257,6 +256,11 @@ GtkWidget *linphone_gtk_get_main_window(){
        return the_ui;
 }
 
+void linphone_gtk_destroy_main_window() {
+       linphone_gtk_destroy_window(the_ui);    
+       the_ui = NULL;
+}
+
 static void linphone_gtk_configure_window(GtkWidget *w, const char *window_name){
        static const char *icon_path=NULL;
        static const char *hiddens=NULL;
@@ -295,6 +299,12 @@ static int get_ui_file(const char *name, char *path, int pathsize){
        return 0;
 }
 
+void linphone_gtk_destroy_window(GtkWidget *widget) {
+       GtkBuilder* builder = g_object_get_data(G_OBJECT(widget), "builder");
+       gtk_widget_destroy(widget);
+       g_object_unref (G_OBJECT (builder));
+}
+
 GtkWidget *linphone_gtk_create_window(const char *window_name){
        GError* error = NULL;
        GtkBuilder* builder = gtk_builder_new ();
@@ -313,7 +323,7 @@ GtkWidget *linphone_gtk_create_window(const char *window_name){
                g_error("Could not retrieve '%s' window from xml file",window_name);
                return NULL;
        }
-       g_object_set_data(G_OBJECT(w),"builder",builder);
+       g_object_set_data(G_OBJECT(w), "builder",builder);
        gtk_builder_connect_signals(builder,w);
        linphone_gtk_configure_window(w,window_name);
        return w;
@@ -1731,21 +1741,16 @@ static void linphone_gtk_check_soundcards(){
        }
 }
 
-#ifdef BUILD_WIZARD
-// Display the account wizard
-void linphone_gtk_display_wizard() {
-       if (the_wizard == NULL || !gtk_widget_get_visible(the_wizard)) { // Only one instance of the wizard at the same time
-               the_wizard = linphone_gtk_create_assistant();
-       }
-}
-#endif
-
 static void linphone_gtk_quit(void){
        static gboolean quit_done=FALSE;
        if (!quit_done){
                quit_done=TRUE;
                linphone_gtk_unmonitor_usb();
                g_source_remove_by_user_data(linphone_gtk_get_core());
+#ifdef BUILD_WIZARD
+               linphone_gtk_close_assistant();
+#endif
+               linphone_gtk_destroy_main_window();
                linphone_gtk_uninit_instance();
                linphone_gtk_destroy_log_window();
                linphone_core_destroy(the_core);
@@ -1897,7 +1902,7 @@ int main(int argc, char *argv[]){
 #ifdef BUILD_WIZARD
        // Veryfing if at least one sip account is configured. If not, show wizard
        if (linphone_core_get_proxy_config_list(linphone_gtk_get_core()) == NULL) {
-               linphone_gtk_display_wizard();
+               linphone_gtk_show_assistant();
        }
 #endif