diff --git a/source/ubinstall-gtk.c b/source/ubinstall-gtk.c index 71a7d60..e9e4a9a 100644 --- a/source/ubinstall-gtk.c +++ b/source/ubinstall-gtk.c @@ -171,7 +171,7 @@ void config_init(){ main_config.slider_thread=0; main_config.config_save_thread=NULL; main_config.install_thread=NULL; - main_config.progress_thread=NULL; + main_config.progress_thread=0; main_config.install_complete=0; } @@ -285,15 +285,15 @@ void *yon_installation_start(main_window *widgets){ } -void *yon_installation_progress_update(void *data); -void *yon_installation_progress_update(void *data){ +gboolean yon_installation_progress_update(void *data); +gboolean yon_installation_progress_update(void *data){ main_window *widgets = (main_window*)data; FILE *file = NULL; char *current = g_malloc0(4096); clock_t last_time = 0; clock_t current_time; - while (main_config.install_thread){ while (1){ + while (gtk_events_pending()) gtk_main_iteration(); current_time = clock(); if ((double)(current_time - last_time) / CLOCKS_PER_SEC >= 0.5){ if (!file) @@ -308,7 +308,7 @@ void *yon_installation_progress_update(void *data){ free(yon_char_divide(current_copy,0)); free(yon_char_divide(percentage,0)); if (strcmp(percentage,"#pb")){ - double fraction = atof(percentage); + double fraction = atof(percentage); gtk_label_set_text(GTK_LABEL(widgets->InstallationLabel),current_copy); gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(widgets->InstallationProgress),fraction/100); } else { @@ -331,8 +331,9 @@ void *yon_installation_progress_update(void *data){ fclose(file); file=NULL; - } - return NULL; + if (main_config.install_thread){ + return 1; + } else return 0; } void on_page_changed(GtkWidget *,GtkWidget *,int page, main_window *widgets); @@ -368,7 +369,7 @@ void on_page_changed(GtkWidget *,GtkWidget *,int page, main_window *widgets){ // if (!main_config.install_thread&&!main_config.install_complete) // main_config.install_thread = g_thread_new("InstallThread",(GThreadFunc)yon_installation_start,widgets); if (!main_config.progress_thread) - main_config.progress_thread = g_thread_new("ProgressThread",(GThreadFunc)yon_installation_progress_update,widgets); + main_config.progress_thread = gdk_threads_add_timeout(500,(GSourceFunc)yon_installation_progress_update,widgets); if (!main_config.slider_thread) main_config.slider_thread = g_timeout_add(5000,(GSourceFunc)on_image_slide,widgets); @@ -443,6 +444,13 @@ void on_page_navigation_clicked(GtkWidget *self, main_window *widgets){ return; } char *languages = ""; + GtkTreeIter iter; + GtkTreeModel *model = GTK_TREE_MODEL(widgets->LanguagesFilter); + char *lang_code=NULL; + for_iter(model,&iter){ + gtk_tree_model_get(model,&iter,1,&lang_code,-1); + languages = yon_char_unite(languages,",",lang_code,NULL); + } if (yon_char_is_empty(gtk_entry_get_text(GTK_ENTRY(widgets->AvailableLanguagesEntry)))){ yon_config_remove_by_key(locale_parameter); } else { @@ -450,18 +458,12 @@ void on_page_navigation_clicked(GtkWidget *self, main_window *widgets){ } if (gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->LanguagesCombo))==-1){ yon_config_remove_by_key(lang_parameter); + } else { + char *language = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(widgets->LanguagesCombo)); + yon_config_register(lang_parameter,lang_parameter_command,language); } char *region = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(widgets->RegionCombo)); char *zone = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(widgets->ZoneCombo)); - GtkTreeIter iter; - GtkTreeModel *model = GTK_TREE_MODEL(widgets->LanguagesFilter); - char *lang_code=NULL; - for_iter(model,&iter){ - gtk_tree_model_get(model,&iter,1,&lang_code,-1); - languages = yon_char_unite(languages,",",lang_code,NULL); - } - char *language = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(widgets->LanguagesCombo)); - yon_config_register(lang_parameter,lang_parameter_command,language); yon_config_register(zone_parameter,zone_parameter_command,yon_char_unite(region,"/",zone,NULL)); gtk_notebook_set_current_page(GTK_NOTEBOOK(widgets->Notebook),page+1); @@ -600,45 +602,102 @@ void on_page_navigation_clicked(GtkWidget *self, main_window *widgets){ gtk_notebook_set_current_page(GTK_NOTEBOOK(widgets->Notebook),YON_PAGE_INSTALLATION_BEGIN); }break; case YON_PAGE_USERS:{ //users + if (yon_char_is_empty(gtk_entry_get_text(GTK_ENTRY(widgets->UserNameEntry)))){ - yon_ubl_status_box_spawn(GTK_CONTAINER(widgets->StatusBox),EMPTY_IMPORTANT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); - yon_ubl_status_highlight_incorrect(widgets->UserNameEntry); - return; - } else if (yon_char_is_empty(gtk_entry_get_text(GTK_ENTRY(widgets->LoginEntry)))){ - yon_ubl_status_box_spawn(GTK_CONTAINER(widgets->StatusBox),EMPTY_IMPORTANT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); - yon_ubl_status_highlight_incorrect(widgets->LoginEntry); - return; + yon_config_remove_by_key(user_gecos_parameter); + } else { + char *username = (char*)gtk_entry_get_text(GTK_ENTRY(widgets->UserNameEntry)); + yon_config_register(user_gecos_parameter,user_gecos_parameter_command,username); + } - } else if (gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->PasswordCombo))==1&&yon_char_is_empty(gtk_entry_get_text(GTK_ENTRY(widgets->PasswordEntry)))){ - yon_ubl_status_box_spawn(GTK_CONTAINER(widgets->StatusBox),EMPTY_IMPORTANT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); - yon_ubl_status_highlight_incorrect(widgets->PasswordEntry); - return; + if (yon_char_is_empty(gtk_entry_get_text(GTK_ENTRY(widgets->LoginEntry)))){ + yon_config_remove_by_key(user_name_parameter); + } else { + char *login = (char*)gtk_entry_get_text(GTK_ENTRY(widgets->UserNameEntry)); + yon_config_register(user_name_parameter,user_name_parameter_command,login); - } else if (gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->AdminPasswordCombo))==1&&yon_char_is_empty(gtk_entry_get_text(GTK_ENTRY(widgets->AdminPasswordEntry)))){ - yon_ubl_status_box_spawn(GTK_CONTAINER(widgets->StatusBox),EMPTY_IMPORTANT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); - yon_ubl_status_highlight_incorrect(widgets->AdminPasswordEntry); - return; + } + + if (gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->PasswordCombo))==1){ + if (yon_char_is_empty(gtk_entry_get_text(GTK_ENTRY(widgets->PasswordEntry)))){ + yon_ubl_status_box_spawn(GTK_CONTAINER(widgets->StatusBox),EMPTY_IMPORTANT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); + yon_ubl_status_highlight_incorrect(widgets->PasswordEntry); + return; + } else { + char *password = (char*)gtk_entry_get_text(GTK_ENTRY(widgets->PasswordEntry)); + yon_config_register(user_password_parameter,user_password_parameter_command,password); + + } + } else { + yon_config_register(user_password_parameter,user_password_parameter_command,PASSWORD_DEFAULT); + } + + if (gtk_combo_box_get_active(GTK_COMBO_BOX(widgets->AdminPasswordCombo))==1){ + if (yon_char_is_empty(gtk_entry_get_text(GTK_ENTRY(widgets->AdminPasswordEntry)))){ + yon_ubl_status_box_spawn(GTK_CONTAINER(widgets->StatusBox),EMPTY_IMPORTANT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); + yon_ubl_status_highlight_incorrect(widgets->AdminPasswordEntry); + return; + } else { + char *root_password = (char*)gtk_entry_get_text(GTK_ENTRY(widgets->AdminPasswordEntry)); + yon_config_register(root_password_parameter,root_password_parameter_command,root_password); + + } + } else { + yon_config_register(user_password_parameter,user_password_parameter_command,PASSWORD_DEFAULT); + } - } else if (yon_char_is_empty(gtk_entry_get_text(GTK_ENTRY(widgets->HotnameEntry)))){ + if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widgets->AutoHostnameCheck))){ + yon_config_register(hostname_parameter,hostname_parameter_command,"auto"); + } else { + if (yon_char_is_empty(gtk_entry_get_text(GTK_ENTRY(widgets->HotnameEntry)))){ + yon_config_remove_by_key(hostname_parameter); - yon_ubl_status_box_spawn(GTK_CONTAINER(widgets->StatusBox),EMPTY_IMPORTANT_LABEL,5,BACKGROUND_IMAGE_FAIL_TYPE); - yon_ubl_status_highlight_incorrect(widgets->HotnameEntry); - return; + } else { + char *hostname = (char*)gtk_entry_get_text(GTK_ENTRY(widgets->UserNameEntry)); + yon_config_register(hostname_parameter,hostname_parameter_command,hostname); + + } } - char *username = (char*)gtk_entry_get_text(GTK_ENTRY(widgets->UserNameEntry)); - char *login = (char*)gtk_entry_get_text(GTK_ENTRY(widgets->UserNameEntry)); - char *password = (char*)gtk_entry_get_text(GTK_ENTRY(widgets->UserNameEntry)); - char *root_password = (char*)gtk_entry_get_text(GTK_ENTRY(widgets->UserNameEntry)); - char *hostname = (char*)gtk_entry_get_text(GTK_ENTRY(widgets->UserNameEntry)); + char *autologin = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widgets->AutologinCheck))?"yes":"no"; - yon_config_register(user_name_parameter,user_name_parameter_command,login); - yon_config_register(user_gecos_parameter,user_gecos_parameter_command,username); - yon_config_register(user_password_parameter,user_password_parameter_command,password); - yon_config_register(root_password_parameter,root_password_parameter_command,root_password); yon_config_register(autologin_parameter,autologin_parameter_command,autologin); - yon_config_register(xkbmodel_parameter,xkbmodel_parameter_command,hostname); - yon_config_register(hostname_parameter,hostname_parameter_command,root_password); + + GtkTreeIter iter; + if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(widgets->LayoutsFilter),&iter)){ + char *locales=""; + for_iter (GTK_TREE_MODEL(widgets->LayoutsFilter),&iter){ + char *id; + int status; + gtk_tree_model_get(GTK_TREE_MODEL(widgets->LayoutsFilter),&iter,0,&id,3,&status,-1); + if (status){ + char *temp = yon_char_unite(locales,!yon_char_is_empty(locales)?",":"",id,NULL); + free(locales); + locales=temp; + } + } + if (!yon_char_is_empty(locales)){ + yon_config_register(xkblayout_parameter,xkblayout_parameter_command,locales); + } else { + yon_config_remove_by_key(xkblayout_parameter); + } + } + char *model = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(widgets->KeyboardModelCombo)); + if (!yon_char_is_empty(model)){ + yon_config_register(xkbmodel_parameter,xkbmodel_parameter_command,model); + } else { + yon_config_remove_by_key(xkbmodel_parameter); + } + + char *options = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(widgets->LayoutBindingCombo)); + if (!yon_char_is_empty(options)){ + yon_config_register(xkboptions_parameter,xkboptions_parameter_command,options); + } else { + yon_config_remove_by_key(xkboptions_parameter); + } gtk_notebook_set_current_page(GTK_NOTEBOOK(widgets->Notebook),YON_PAGE_INSTALLATION); + if (gtk_progress_bar_get_fraction(GTK_PROGRESS_BAR(widgets->InstallationProgress))>0.9){ + + } gtk_widget_set_sensitive(widgets->CancelInstallButton,0); gtk_widget_set_sensitive(widgets->NextButton,0); gtk_widget_set_sensitive(widgets->BackButton,0); @@ -843,6 +902,10 @@ void on_same_installation_device_changed(GtkWidget *, main_window *widgets){ } } +void on_gparted_open(){ + yon_launch_app_with_arguments(open_gparted_command,NULL); +} + /**yon_main_window_complete(main_window *widgets) * [EN] * @@ -866,6 +929,7 @@ main_window *yon_main_window_complete(){ widgets->SectionsToggle=yon_gtk_builder_get_widget(builder,"SectionsToggle"); widgets->UsersToggle=yon_gtk_builder_get_widget(builder,"USersToggle"); widgets->SummaryToggle=yon_gtk_builder_get_widget(builder,"SummaryToggle"); + widgets->CompletionToggle=yon_gtk_builder_get_widget(builder,"CompletionToggle"); widgets->InstallationToggle=yon_gtk_builder_get_widget(builder,"InstallationToggle"); widgets->LanguageCombo=yon_gtk_builder_get_widget(builder,"LanguageCombo"); widgets->RegionCombo=yon_gtk_builder_get_widget(builder,"RegionCombo"); @@ -895,6 +959,7 @@ main_window *yon_main_window_complete(){ widgets->AdminPasswordEntry=yon_gtk_builder_get_widget(builder,"AdminPasswordEntry"); widgets->AdminPasswordButton=yon_gtk_builder_get_widget(builder,"AdminPasswordButton"); widgets->HotnameEntry=yon_gtk_builder_get_widget(builder,"HotnameEntry"); + widgets->AutoHostnameCheck=yon_gtk_builder_get_widget(builder,"AutoHostnameCheck"); widgets->CancelInstallButton=yon_gtk_builder_get_widget(builder,"CancelInstallButton"); widgets->BackButton=yon_gtk_builder_get_widget(builder,"BackButton"); widgets->NextButton=yon_gtk_builder_get_widget(builder,"NextButton"); @@ -936,6 +1001,9 @@ main_window *yon_main_window_complete(){ widgets->CommonInstallationFilesystemTypeCombo = yon_gtk_builder_get_widget(builder,"CommonInstallationFilesystemTypeCombo"); widgets->CommonInstallationSectionNameEntry = yon_gtk_builder_get_widget(builder,"CommonInstallationSectionNameEntry"); + widgets->GpartedNearButton = yon_gtk_builder_get_widget(builder,"GpartedNearButton"); + widgets->GpartedSameButton = yon_gtk_builder_get_widget(builder,"GpartedSameButton"); + widgets->StatusBox = yon_gtk_builder_get_widget(builder,"StatusBox"); widgets->AdditionalSoftwareCell = GTK_CELL_RENDERER(gtk_builder_get_object(builder,"AdditionalSoftwareCell")); @@ -946,6 +1014,9 @@ main_window *yon_main_window_complete(){ widgets->AdditionalSoftwareList = GTK_LIST_STORE(gtk_builder_get_object(builder,"AdditionalSoftwareList")); widgets->PartitionsList = GTK_LIST_STORE(gtk_builder_get_object(builder,"PartitionsList")); + g_signal_connect(G_OBJECT(widgets->GpartedSameButton),"clicked",G_CALLBACK(on_gparted_open),NULL); + g_signal_connect(G_OBJECT(widgets->GpartedNearButton),"clicked",G_CALLBACK(on_gparted_open),NULL); + g_signal_connect(G_OBJECT(widgets->Notebook),"switch-page",G_CALLBACK(on_page_changed),widgets); g_signal_connect(G_OBJECT(widgets->MainWindow),"check-resize",G_CALLBACK(on_region_resized),widgets); g_signal_connect(G_OBJECT(widgets->BackButton),"clicked",G_CALLBACK(on_page_navigation_clicked),widgets); @@ -962,6 +1033,7 @@ main_window *yon_main_window_complete(){ g_signal_connect(G_OBJECT(widgets->LocationToggle),"toggled",G_CALLBACK(on_toggle_block),NULL); g_signal_connect(G_OBJECT(widgets->SectionsToggle),"toggled",G_CALLBACK(on_toggle_block),NULL); g_signal_connect(G_OBJECT(widgets->InstallationToggle),"toggled",G_CALLBACK(on_toggle_block),NULL); + g_signal_connect(G_OBJECT(widgets->CompletionToggle),"toggled",G_CALLBACK(on_toggle_block),NULL); g_signal_connect(G_OBJECT(widgets->InstallationNearSysDevicesTree),"cursor-changed",G_CALLBACK(on_near_installation_device_changed),widgets); g_signal_connect(G_OBJECT(widgets->SamePlaceDeviceTree),"cursor-changed",G_CALLBACK(on_near_installation_device_changed),widgets); @@ -973,6 +1045,8 @@ main_window *yon_main_window_complete(){ g_signal_connect(G_OBJECT(widgets->AdditionalSoftwareCell),"toggled",G_CALLBACK(on_additional_software_toggled),widgets); g_signal_connect(G_OBJECT(widgets->ManualLayoutRadio),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button),gtk_widget_get_parent(gtk_widget_get_parent(widgets->AddButton))); + + g_signal_connect(G_OBJECT(widgets->AutoHostnameCheck),"toggled",G_CALLBACK(yon_gtk_widget_set_sensitive_from_toggle_button_inversed),widgets->HotnameEntry); // g_signal_connect(G_OBJECT(widgets->InstallationToggle),"toggled",G_CALLBACK(on_toggle_block),widgets); gtk_tree_model_filter_set_visible_column(GTK_TREE_MODEL_FILTER(widgets->LanguagesFilter),0); diff --git a/source/ubinstall-gtk.h b/source/ubinstall-gtk.h index 224e7a3..ac0801e 100755 --- a/source/ubinstall-gtk.h +++ b/source/ubinstall-gtk.h @@ -103,19 +103,25 @@ NULL #define locale_parameter_command "ubconfig --source global get [autoinstall] AUTOINSTALL[locale]" #define device_format_parameter "AUTOINSTALL[device_format]" #define device_format_parameter_command "ubconfig --source global get [autoinstall] AUTOINSTALL[device_format]" -#define device_label_parameter "AUTOINSTALL[device_label]" -#define device_label_parameter_command "ubconfig --source global get [autoinstall] AUTOINSTALL[device_label]" +#define device_label_parameter "AUTOINSTALL[part_label]" +#define device_label_parameter_command "ubconfig --source global get [autoinstall] AUTOINSTALL[part_label]" #define part_size_parameter "AUTOINSTALL[part_size]" #define part_size_parameter_command "ubconfig --source global get [autoinstall] AUTOINSTALL[part_size]" -#define part_type_parameter "AUTOINSTALL[part_type]" -#define part_type_parameter_command "ubconfig --source global get [autoinstall] AUTOINSTALL[part_type]" +#define part_type_parameter "AUTOINSTALL[part_fs_type]" +#define part_type_parameter_command "ubconfig --source global get [autoinstall] AUTOINSTALL[part_fs_type]" -#define save_config_command(parameters) yon_char_unite("pkexec bash -c 'ubconfig set [autoinstall] ",parameters, ";ubinstall2 --config /etc/ublinux/autoinstall'", NULL) +#define save_config_command(parameters) yon_char_unite("pkexec bash -c 'ubconfig set [autoinstall] ",parameters, "; nice ubinstall2 --config /etc/ublinux/autoinstall'", NULL) + +#define set_user_config_command(parameters) yon_char_unite("pkexec bash -c 'ubconfig --target system set [autoinstall] ",parameters,";nice ubinstall2 --autoconfig'",NULL) + +#define open_gparted_command "pkexec gparted" #define AUTOINSTALL_TYPE_INSTALL_command "ubconfig --source global get autoinstall AUTOINSTALL[install_type]" #define AUTOINSTALL_DEVICE_command "ubconfig --source global get autoinstall AUTOINSTALL[device]" #define AUTOSTART_PARTS_command "ubconfig --source global get autoinstall AUTOINSTALL[part]" +#define PASSWORD_DEFAULT "ublinux" + #define start_fast_install_command "ubinstall2 --autoinstall" #define progress_path "/var/log/ubinstall_progress.log" @@ -165,7 +171,7 @@ typedef struct { int install_mode; GThread *config_save_thread; GThread *install_thread; - GThread *progress_thread; + guint progress_thread; } config; typedef struct { @@ -186,6 +192,7 @@ typedef struct { GtkWidget *SectionsToggle; GtkWidget *UsersToggle; GtkWidget *SummaryToggle; + GtkWidget *CompletionToggle; GtkWidget *InstallationToggle; GtkWidget *LanguageCombo; GtkWidget *RegionCombo; @@ -215,6 +222,7 @@ typedef struct { GtkWidget *AdminPasswordEntry; GtkWidget *AdminPasswordButton; GtkWidget *HotnameEntry; + GtkWidget *AutoHostnameCheck; GtkWidget *CancelInstallButton; GtkWidget *BackButton; GtkWidget *NextButton; @@ -254,6 +262,9 @@ typedef struct { GtkWidget *PackageInstallationProgress; GtkWidget *PackageInstallationLabel; + GtkWidget *GpartedNearButton; + GtkWidget *GpartedSameButton; + GtkCellRenderer *AdditionalSoftwareCell; GtkWidget *CommonInstallationDevicesTree; diff --git a/source/ubl-strings.h b/source/ubl-strings.h index 1cd26d8..58f18e5 100644 --- a/source/ubl-strings.h +++ b/source/ubl-strings.h @@ -47,6 +47,7 @@ #define AUTOMATIC_LOGIN_LABEL _("Automatic login without password prompt") #define ADMIN_PASSWORD_LABEL _("Administrator password (root):") #define COMPUTER_NAME_LABEL _("Computer name:") +#define AUTOMATICALLY_LABEL _("Automatically") #define USER_LABEL _("User") #define COMPLETION_LABEL _("Completion") #define INSTALLATION_COMPLETION_LABEL _("Installation completion") diff --git a/ubinstall-gtk.glade b/ubinstall-gtk.glade index a8fdfef..11c91f5 100644 --- a/ubinstall-gtk.glade +++ b/ubinstall-gtk.glade @@ -311,7 +311,7 @@ agreement - + Completion True True @@ -2179,6 +2179,20 @@ and help you install UBLinux on your computer 0 + + + Automatically + True + True + False + True + + + False + True + 1 + + True @@ -2188,7 +2202,7 @@ and help you install UBLinux on your computer True True - 1 + 2 diff --git a/ubinstall-gtk.pot b/ubinstall-gtk.pot index 5854fae..3cd3fc8 100644 --- a/ubinstall-gtk.pot +++ b/ubinstall-gtk.pot @@ -243,6 +243,10 @@ msgstr "" msgid "Computer name:" msgstr "" +#: source/ubl-strings.h:49 +msgid "Automatically" +msgstr "" + #: source/ubl-strings.h:50 msgid "User" msgstr "" diff --git a/ubinstall-gtk_ru.po b/ubinstall-gtk_ru.po index daa8a09..67906fb 100644 --- a/ubinstall-gtk_ru.po +++ b/ubinstall-gtk_ru.po @@ -254,6 +254,10 @@ msgstr "Пароль администратора (root):" msgid "Computer name:" msgstr "Имя компьютера" +#: source/ubl-strings.h:49 +msgid "Automatically" +msgstr "Автоматически" + #: source/ubl-strings.h:50 msgid "User" msgstr "Пользователь"