diff --git a/source/ubinstall-gtk-page-switch.c b/source/ubinstall-gtk-page-switch.c index 2fb7be6..1297fc6 100644 --- a/source/ubinstall-gtk-page-switch.c +++ b/source/ubinstall-gtk-page-switch.c @@ -588,7 +588,8 @@ void yon_page_init(main_window *widgets, enum YON_PAGES page){ g_mutex_lock(&main_config.install_mutex); if (main_config.install_complete){ g_mutex_unlock(&main_config.install_mutex); - g_thread_new("install_thread",(GThreadFunc)on_setup_system_configuration,widgets); + // g_thread_new("install_thread",(GThreadFunc)on_setup_system_configuration,widgets); + on_config_terminal_setup_system_configuration(widgets); } else { g_mutex_unlock(&main_config.install_mutex); } @@ -627,7 +628,7 @@ void on_page_prev_clicked(GtkWidget *, main_window *widgets){ yon_page_update(widgets); } -#include +// #include void on_page_cancel_clicked(GtkWidget *, main_window *widgets){ enum YON_PAGES cur_page = gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->Notebook)); @@ -651,7 +652,11 @@ void on_page_cancel_clicked(GtkWidget *, main_window *widgets){ data->action_text=INTERRUPT_TEXT_LABEL; data->title=WARNING_TITLE_LABEL; if (yon_confirmation_dialog_call(widgets->MainWindow,data)==GTK_RESPONSE_ACCEPT ){ - pthread_cancel(main_config.install_thread); + g_signal_handlers_block_by_func(G_OBJECT(widgets->install_terminal),on_config_install_success,widgets); + gtk_widget_destroy(widgets->install_terminal); + widgets->install_terminal = NULL; + yon_install_terminal_recreate(widgets); + // pthread_cancel(main_config.install_thread); kill(main_config.install_thread,SIGKILL); g_signal_handlers_disconnect_by_func(G_OBJECT(widgets->install_info_monitor),yon_installation_progress_update,widgets); g_file_monitor_cancel(widgets->install_info_monitor); diff --git a/source/ubinstall-gtk-saving.c b/source/ubinstall-gtk-saving.c index c3ea53f..5db64a5 100644 --- a/source/ubinstall-gtk-saving.c +++ b/source/ubinstall-gtk-saving.c @@ -156,21 +156,29 @@ enum INSTALL_TYPE yon_ubl_get_install_mode(){ return INSTALL_ERROR; } -void on_config_install_success(GtkWidget *self, int state, main_window *widgets){ +void on_config_install_success(GtkWidget *, int state, main_window *widgets){ if (state){ gdk_threads_add_idle((GSourceFunc)on_install_error,widgets); g_mutex_lock(&main_config.install_mutex); main_config.install_complete=1; g_mutex_unlock(&main_config.install_mutex); return; - }; + } g_mutex_lock(&main_config.install_mutex); - main_config.install_complete=1; + if (!main_config.install_complete){ + main_config.install_complete = 1; + } g_mutex_unlock(&main_config.install_mutex); if ((!main_config.save_done)&&main_config.save_configured){ - on_setup_system_configuration(widgets); + // on_setup_system_configuration(widgets); + on_config_terminal_setup_system_configuration(widgets); + } else if (main_config.save_done&&main_config.save_configured){ + g_idle_add((GSourceFunc)on_install_success,widgets); + + } else { + main_config.save_done=1; + gtk_widget_hide(widgets->install_terminal_window->Window); } - gtk_widget_destroy(self); } void on_config_terminal_save(main_window *widgets){ @@ -178,14 +186,9 @@ void on_config_terminal_save(main_window *widgets){ if (!main_config.dry_run){ char *command = yon_debug_output("%s\n",save_config_command); yon_debug_output("%s\n","Entered installation"); - GtkWidget *terminal = vte_terminal_new(); - yon_window *window = yon_window_new(); - gtk_box_pack_start(GTK_BOX(window->MainBox),terminal,1,1,0); - gtk_widget_show(window->Window); - gtk_widget_show(terminal); - g_signal_connect(G_OBJECT(terminal),"child-exited",G_CALLBACK(on_config_install_success),widgets); - yon_terminal_integrated_start(terminal,command); - + yon_terminal_integrated_start(widgets->install_terminal,command); + gtk_widget_show(widgets->install_terminal_window->Window); + main_config.install_thread = 1; } else { yon_launch("ubconfig --source system get /"); } @@ -214,7 +217,8 @@ void *on_config_save(void *data){ main_config.install_complete=1; g_mutex_unlock(&main_config.install_mutex); if ((!main_config.save_done)&&main_config.save_configured){ - on_setup_system_configuration(widgets); + // on_setup_system_configuration(widgets); + on_config_terminal_setup_system_configuration(widgets); // on_page_next_clicked(NULL,widgets); } } else { @@ -223,6 +227,25 @@ void *on_config_save(void *data){ return 0; } + +void on_config_terminal_setup_system_configuration(main_window *widgets){ + g_idle_add((GSourceFunc)yon_progress_bar_start,widgets); + if (!main_config.dry_run){ + char *command = yon_debug_output("%s\n",set_user_config_command); + yon_debug_output("%s\n","Entered configuration"); + yon_terminal_integrated_start(widgets->install_terminal,command); + g_mutex_lock(&main_config.install_mutex); + main_config.install_thread=1; + g_mutex_unlock(&main_config.install_mutex); + gtk_widget_show(widgets->install_terminal_window->Window); + + } else { + yon_launch("ubconfig --source system get /"); + yon_launch(ubinstall_dry_run_command); + } + return; +} + void *on_setup_system_configuration(void * data){ yon_debug_output("%s\n","Entered thread"); main_window *widgets = (main_window*)data; diff --git a/source/ubinstall-gtk.c b/source/ubinstall-gtk.c index 576d02d..b4775ac 100644 --- a/source/ubinstall-gtk.c +++ b/source/ubinstall-gtk.c @@ -254,7 +254,11 @@ void on_reboot_accepted(main_window *widgets){ if (yon_confirmation_dialog_call(widgets->MainWindow,data)==GTK_RESPONSE_ACCEPT){ g_mutex_lock(&main_config.install_mutex); if (main_config.install_thread){ - pthread_cancel((pthread_t)main_config.install_thread); + g_signal_handlers_block_by_func(G_OBJECT(widgets->install_terminal),on_config_install_success,widgets); + gtk_widget_destroy(widgets->install_terminal); + widgets->install_terminal = NULL; + yon_install_terminal_recreate(widgets); + // pthread_cancel((pthread_t)main_config.install_thread); g_mutex_unlock(&main_config.install_mutex); } main_config.exit_accepted=1; @@ -267,10 +271,23 @@ void on_reboot_accepted(main_window *widgets){ } } +void yon_install_terminal_recreate(main_window *widgets){ + + widgets->install_terminal = vte_terminal_new(); + + gtk_box_pack_start(GTK_BOX(widgets->install_terminal_window->MainBox),widgets->install_terminal,1,1,0); + gtk_widget_show(widgets->install_terminal); + g_signal_connect(G_OBJECT(widgets->install_terminal),"child-exited",G_CALLBACK(on_config_install_success),widgets); +} + void on_exit_accepted(main_window *widgets){ g_mutex_lock(&main_config.install_mutex); if (main_config.install_thread){ - pthread_cancel((pthread_t)main_config.install_thread); + g_signal_handlers_block_by_func(G_OBJECT(widgets->install_terminal),on_config_install_success,widgets); + gtk_widget_destroy(widgets->install_terminal); + widgets->install_terminal = NULL; + yon_install_terminal_recreate(widgets); + // pthread_cancel((pthread_t)main_config.install_thread); g_mutex_unlock(&main_config.install_mutex); } if (!main_config.configure_mode) @@ -732,6 +749,9 @@ void yon_main_window_create(main_window *widgets){ widgets->NextInstallationSliderImage = yon_gtk_builder_get_widget(builder,"NextInstallationSliderImage"); widgets->PrevInstallationSliderImage = yon_gtk_builder_get_widget(builder,"PrevInstallationSliderImage"); + widgets->install_terminal_window = yon_window_new(); + widgets->install_terminal = vte_terminal_new(); + widgets->network_connections = NULL; widgets->pacmanchosen = g_hash_table_new_full(g_str_hash,g_str_equal,free,NULL); @@ -746,6 +766,12 @@ void yon_main_window_create(main_window *widgets){ g_signal_connect(G_OBJECT(widgets->db_lock_monitor),"changed",G_CALLBACK(yon_db_lock_update),widgets); g_signal_connect(G_OBJECT(widgets->db_lock_monitor),"changed",G_CALLBACK(yon_db_unlock_update),widgets); } + + yon_gtk_widget_block_destruction(widgets->install_terminal_window->Window); + gtk_box_pack_start(GTK_BOX(widgets->install_terminal_window->MainBox),widgets->install_terminal,1,1,0); + gtk_widget_show(widgets->install_terminal); + g_signal_connect(G_OBJECT(widgets->install_terminal),"child-exited",G_CALLBACK(on_config_install_success),widgets); + g_signal_connect(G_OBJECT(widgets->MainWindow),"delete-event",G_CALLBACK(on_yon_exit),widgets); GtkWidget *menu = yon_gtk_builder_get_widget(builder,"menu2"); diff --git a/source/ubinstall-gtk.h b/source/ubinstall-gtk.h index 0112be2..96950fd 100755 --- a/source/ubinstall-gtk.h +++ b/source/ubinstall-gtk.h @@ -856,6 +856,9 @@ typedef struct GFileMonitor *db_lock_monitor; + yon_window *install_terminal_window; + GtkWidget *install_terminal; + } main_window; enum ADVANCED_PART_TYPE @@ -1643,4 +1646,6 @@ void *yon_status_thread_update(main_window *widgets); void yon_db_lock_update(GFileMonitor *,GFile *,GFile *,GFileMonitorEvent ,main_window *widgets); void yon_db_unlock_update(GFileMonitor *,GFile *,GFile *,GFileMonitorEvent ,main_window *widgets); void on_config_install_success(GtkWidget *self, int state, main_window *widgets); -void on_config_terminal_save(main_window *widgets); \ No newline at end of file +void on_config_terminal_save(main_window *widgets); +void yon_install_terminal_recreate(main_window *widgets); +void on_config_terminal_setup_system_configuration(main_window *widgets); \ No newline at end of file