diff --git a/icons/emblems/com.ublinux.ubinstall-gtk.configuration.svg b/icons/emblems/com.ublinux.ubinstall-gtk.configuration.svg
new file mode 100644
index 0000000..842ceae
--- /dev/null
+++ b/icons/emblems/com.ublinux.ubinstall-gtk.configuration.svg
@@ -0,0 +1,54 @@
+
diff --git a/source/ubinstall-gtk-components.c b/source/ubinstall-gtk-components.c
index 21d7b16..de88cf5 100644
--- a/source/ubinstall-gtk-components.c
+++ b/source/ubinstall-gtk-components.c
@@ -349,8 +349,8 @@ void yon_os_components_init(main_window *widgets){
GList *list = gtk_container_get_children(GTK_CONTAINER(widgets->OSSoftwareListBox));
GList *iter;
for (iter=list;iter;iter=iter->next){
- os_row *row = g_object_get_data(iter->data,"kernel_row");
- free(row);
+ // os_row *row = g_object_get_data(iter->data,"kernel_row");
+ // free(row);
gtk_widget_destroy(GTK_WIDGET(iter->data));
}
if (!gtk_widget_get_parent(widgets->OSSpinner))
@@ -484,6 +484,7 @@ gboolean yon_software_insert(struct row_data *row_input){
config_str parsed = yon_char_parse(main_config.modules[i],&parsed_size,";");
yon_char_parsed_add_or_create_if_exists(final,&final_size,parsed[1]);
yon_char_parsed_free(parsed,parsed_size);
+ while(gtk_events_pending()) gtk_main_iteration();
}
modules_param = yon_char_parsed_to_string(final,final_size,",");
} else if (!yon_char_is_empty(modules_prm)){
@@ -496,6 +497,7 @@ gboolean yon_software_insert(struct row_data *row_input){
yon_char_parsed_add_or_create_if_exists(final,&final_size,parsed[1]);
}
yon_char_parsed_free(parsed,parsed_size);
+ while(gtk_events_pending()) gtk_main_iteration();
}
modules_param = yon_char_parsed_to_string(final,final_size,",");
}
@@ -508,7 +510,6 @@ gboolean yon_software_insert(struct row_data *row_input){
}
void yon_software_init(main_window *widgets){
- on_status_update(NULL,widgets);
if (!main_config.configure_mode){
yon_config_update_by_args(main_config.config_load_path, packages_parameter,NULL);
}
@@ -518,6 +519,7 @@ void yon_software_init(main_window *widgets){
os_row *row = g_object_get_data(iter->data,"kernel_row");
free(row);
gtk_widget_destroy(GTK_WIDGET(iter->data));
+ while(gtk_events_pending()) gtk_main_iteration();
}
int base_size;
config_str base = yon_packages_find(YON_PACKAGES_ALL,"ubm-",(gsize*)&base_size);
@@ -548,6 +550,7 @@ void yon_software_init(main_window *widgets){
row->size = size_str;
row->widgets=widgets;
g_idle_add((GSourceFunc)yon_software_insert,row);
+ while(gtk_events_pending()) gtk_main_iteration();
}
g_idle_add((GSourceFunc)yon_spinner_switch_off,widgets->OSSpinner);
yon_char_parsed_free(base,base_size);
@@ -585,7 +588,6 @@ int yon_pacman_software_save(main_window *widgets){
}
void yon_pacman_init(main_window *widgets){
- on_status_update(NULL,widgets);
if (!main_config.configure_mode){
yon_config_update_by_args(main_config.config_load_path, packages_parameter,NULL);
}
@@ -606,6 +608,7 @@ void yon_pacman_init(main_window *widgets){
gtk_list_store_append(widgets->PacmanSoftwareChosenList,&iter);
gtk_list_store_set(widgets->PacmanSoftwareChosenList,&iter,0,1,1,parsed[i],2,version,3,_(description),4,size_str,6,1,-1);
free(size_str);
+ while(gtk_events_pending()) gtk_main_iteration();
}
yon_char_parsed_free(parsed,size);
@@ -633,6 +636,7 @@ void yon_pacman_init(main_window *widgets){
}
modules_packages = yon_char_parsed_to_string(final,final_size,",");
}
+ while(gtk_events_pending()) gtk_main_iteration();
parsed = yon_char_parse(modules_packages,&size,",");
for (int i=1;iPacmanSoftwareChosenList,&iter);
gtk_list_store_set(widgets->PacmanSoftwareChosenList,&iter,0,1,1,parsed[i],2,version,3,_(description),4,size_str,6,0,-1);
free(size_str);
+ while(gtk_events_pending()) gtk_main_iteration();
}
yon_pacman_software_update_overall_size(widgets);
yon_char_parsed_free(parsed,size);
diff --git a/source/ubinstall-gtk-config-hub.c b/source/ubinstall-gtk-config-hub.c
index a2edd67..83a68e9 100644
--- a/source/ubinstall-gtk-config-hub.c
+++ b/source/ubinstall-gtk-config-hub.c
@@ -236,6 +236,17 @@ void on_configuration_hub_open(GtkFlowBox *,GtkFlowBoxChild *child, main_window
config_hub_icon *cur_icon = g_object_get_data(G_OBJECT(child),"config_hub_icon");
gtk_notebook_set_current_page(GTK_NOTEBOOK(widgets->Notebook),cur_icon->page);
+ switch(cur_icon->page){
+ case YON_PAGE_OS_COMPONENTS:
+ case YON_PAGE_KERNEL:
+ case YON_PAGE_KERNEL_ADDON:
+ case YON_PAGE_PACMAN_SOFTWARE:
+ case YON_PAGE_SOFTWARE:
+ case YON_PAGE_PACKAGES:
+ on_status_button_update(NULL,widgets);
+ break;
+ default: break;
+ };
yon_page_init(widgets,cur_icon->page);
yon_page_update(widgets);
}
diff --git a/source/ubinstall-gtk-install-start.c b/source/ubinstall-gtk-install-start.c
index ee59796..19caa72 100644
--- a/source/ubinstall-gtk-install-start.c
+++ b/source/ubinstall-gtk-install-start.c
@@ -3,6 +3,7 @@
int yon_installation_start(main_window *widgets){
gtk_widget_show(gtk_widget_get_parent(widgets->InstallationProgress));
return !pthread_create(&main_config.install_thread,NULL,on_config_save,widgets);
+ return 1;
}
void yon_quick_install(GtkWidget *self, main_window *widgets){
@@ -10,7 +11,7 @@ void yon_quick_install(GtkWidget *self, main_window *widgets){
main_config.save_configured=1;
gtk_widget_hide(self);
gtk_widget_show(gtk_widget_get_parent(widgets->InstallationProgress));
- // pthread_create(&main_config.install_thread,NULL,on_config_save,widgets);
+ pthread_create(&main_config.install_thread,NULL,on_config_save,widgets);
gtk_notebook_set_current_page(GTK_NOTEBOOK(widgets->Notebook),YON_PAGE_INSTALLATION);
if (!yon_char_is_empty(main_config.config_load_path)){
char *command = quick_install_command(main_config.config_load_path);
diff --git a/source/ubinstall-gtk-kernel.c b/source/ubinstall-gtk-kernel.c
index de1c5dd..87392f9 100644
--- a/source/ubinstall-gtk-kernel.c
+++ b/source/ubinstall-gtk-kernel.c
@@ -113,6 +113,7 @@ void yon_kernel_row_setup_tags(kernel_row *row, char *tags){
tag_type = "tag_green";
};
yon_tag_add(GTK_BOX(row->TagsBox),tag_name,tag_type,NULL);
+ while(gtk_events_pending()) gtk_main_iteration();
}
}
@@ -127,6 +128,7 @@ void yon_kernel_row_setup(kernel_row *row, char *name, char *modules,char *packa
config_str description_wrapped = yon_char_wrap_to_lines(description_full,3,&size);
description_full = yon_char_parsed_to_string(description_wrapped,size,"\n");
yon_char_parsed_free(description_wrapped,size);
+ while(gtk_events_pending()) gtk_main_iteration();
}
int modules_size=0;
config_str modules_parsed = yon_char_parse(modules,&modules_size," ");
@@ -135,6 +137,7 @@ void yon_kernel_row_setup(kernel_row *row, char *name, char *modules,char *packa
char *temp = yon_char_unite("",modules_parsed[i],"",NULL);
free(modules_parsed[i]);
modules_parsed[i] = temp;
+ while(gtk_events_pending()) gtk_main_iteration();
}
char *modules_final = yon_char_parsed_to_string(modules_parsed,modules_size,"\n");
gtk_label_set_markup(GTK_LABEL(row->NameLabel),label_markup);
@@ -168,6 +171,7 @@ void yon_kernel_resize(main_window *widgets){
gtk_widget_get_preferred_width(row->ModulesLabel,&cur_modules_size,NULL);
if (name_sizeKernelNameLabel),name_size,-1);
gtk_widget_set_size_request(GTK_WIDGET(widgets->KernelModulesLabel),modules_size,-1);
@@ -177,6 +181,7 @@ void yon_kernel_resize(main_window *widgets){
gtk_widget_set_size_request(GTK_WIDGET(row->EnableRadio),enable_size,-1);
gtk_widget_set_size_request(row->NameLabel,name_size,-1);
gtk_widget_set_size_request(row->ModulesLabel,modules_size,-1);
+ while(gtk_events_pending()) gtk_main_iteration();
}
g_list_free(list);
}
@@ -208,10 +213,10 @@ void yon_kernel_addon_resize(main_window *widgets){
}
void yon_kernel_init(main_window *widgets){
- on_status_update(NULL,widgets);
if (!main_config.configure_mode){
yon_config_update_by_args(main_config.config_load_path, packages_parameter,KERNEL_BOOT_parameter,NULL);
}
+ while(gtk_events_pending()) gtk_main_iteration();
GList *list = gtk_container_get_children(GTK_CONTAINER(widgets->KernelListBox));
GList *iter;
for (iter = list; iter; iter = iter->next){
@@ -222,6 +227,7 @@ void yon_kernel_init(main_window *widgets){
free(row);
gtk_widget_destroy(GTK_WIDGET(iter->data));
}
+ while(gtk_events_pending()) gtk_main_iteration();
}
g_list_free(list);
@@ -234,6 +240,7 @@ void yon_kernel_init(main_window *widgets){
modules_parsed = yon_char_parse(modules,&modules_size,",");
}
+ while(gtk_events_pending()) gtk_main_iteration();
int size;
config_str kernels = yon_resource_open_file(kernel_list_path,&size);
gtk_size_group_add_widget(widgets->KernelSizeGroup,widgets->KernelTagsLabel);
@@ -256,6 +263,7 @@ void yon_kernel_init(main_window *widgets){
yon_kernel_row_setup(row,name,modules,package,tags,description);
+ while(gtk_events_pending()) gtk_main_iteration();
if (yon_char_parsed_check_exist(modules_parsed,modules_size,parsed[1])>-1){
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(row->InstallCheck),1);
} else {
@@ -269,6 +277,7 @@ void yon_kernel_init(main_window *widgets){
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(row->EnableRadio),1);
}
yon_char_parsed_free(parsed,parsed_size);
+ while(gtk_events_pending()) gtk_main_iteration();
}
yon_kernel_resize(widgets);
@@ -419,11 +428,11 @@ void yon_kernel_addon_row_setup(kernel_addon_row *row, char *name, char *modules
}
void yon_kernel_addon_init(main_window *widgets){
- on_status_update(NULL,widgets);
yon_config_remove_by_args(packages_parameter,NULL);
char *command = yon_config_parameter_prepare_command(packages_parameter_command,main_config.config_load_path,NULL,NULL);
yon_config_load_config(YON_CONFIG_CUSTOM,command,NULL);
free(command);
+ while(gtk_events_pending()) gtk_main_iteration();
GList *list = gtk_container_get_children(GTK_CONTAINER(widgets->KernelAddonListBox));
GList *iter;
for (iter = list; iter; iter = iter->next){
@@ -434,6 +443,7 @@ void yon_kernel_addon_init(main_window *widgets){
free(row);
gtk_widget_destroy(GTK_WIDGET(iter->data));
}
+ while(gtk_events_pending()) gtk_main_iteration();
}
g_list_free(list);
@@ -478,6 +488,7 @@ void yon_kernel_addon_init(main_window *widgets){
gtk_widget_set_sensitive(row->InstallCheck,0);
}
yon_char_parsed_free(parsed,parsed_size);
+ while(gtk_events_pending()) gtk_main_iteration();
}
yon_kernel_addon_resize(widgets);
diff --git a/source/ubinstall-gtk-log.c b/source/ubinstall-gtk-log.c
index dd183c4..d0f6dbb 100644
--- a/source/ubinstall-gtk-log.c
+++ b/source/ubinstall-gtk-log.c
@@ -96,7 +96,11 @@ void on_process_log_view(GtkWidget *,main_window *widgets){
yon_gtk_window_setup(GTK_WINDOW(window->Window),NULL,INSTALL_LOG_LABEL,icon_path,"log_viewer");
window->command = yon_char_new(short_log_path);
GFile *file = g_file_new_for_path(window->command);
- window->monitor = g_file_monitor_file(file,G_FILE_MONITOR_NONE,NULL,NULL);
+ GError *err = NULL;
+ window->monitor = g_file_monitor_file(file,G_FILE_MONITOR_NONE,NULL,&err);
+ if (err){
+ printf("%s\n",err->message);
+ }
g_signal_connect(G_OBJECT(window->monitor),"changed",G_CALLBACK(yon_read_log),window);
g_object_unref(file);
yon_read_log(NULL,NULL,NULL,G_FILE_MONITOR_EVENT_CHANGED,window);
@@ -149,7 +153,6 @@ void yon_installation_progress_update(GFileMonitor *,GFile *,GFile *,GFileMonito
double fraction = atof(parsed[3]) / 100;
gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(widgets->PackageInstallationProgress), fraction);
gtk_label_set_text(GTK_LABEL(widgets->PackageInstallationLabel), yon_char_parsed_to_string(parsed, size, " "));
- // yon_char_parsed_free(parsed,size);
}
if (!yon_char_is_empty(current_copy)) free(current_copy);
}
@@ -162,9 +165,14 @@ void yon_installation_progress_update(GFileMonitor *,GFile *,GFile *,GFileMonito
gboolean yon_progress_bar_start(main_window *widgets){
GFile *file_desc = g_file_new_for_path(progress_path);
- widgets->install_info_monitor = g_file_monitor_file(file_desc,G_FILE_MONITOR_NONE,NULL,NULL);
+ GError *err = NULL;
+ widgets->install_info_monitor = g_file_monitor_file(file_desc,G_FILE_MONITOR_NONE,NULL,&err);
+ if (err){
+ printf("%s\n",err->message);
+ yon_ubl_status_box_spawn(GTK_CONTAINER(widgets->StatusBox),err->message,5,BACKGROUND_IMAGE_FAIL_TYPE);
+ return G_SOURCE_REMOVE;
+ }
g_signal_connect(G_OBJECT(widgets->install_info_monitor),"changed",G_CALLBACK(yon_installation_progress_update),widgets);
- // g_thread_new("progress",(GThreadFunc)yon_progress_thread_test,widgets);
g_object_unref(file_desc);
if (access(progress_path,F_OK)){
FILE *file = fopen(progress_path,"w");
diff --git a/source/ubinstall-gtk-packages.c b/source/ubinstall-gtk-packages.c
index 850c855..e12b92d 100644
--- a/source/ubinstall-gtk-packages.c
+++ b/source/ubinstall-gtk-packages.c
@@ -117,6 +117,7 @@ void yon_packages_tab_init(main_window *widgets){
yon_config_load_config(YON_CONFIG_CUSTOM,command,NULL);
free(command);
}
+ while(gtk_events_pending()) gtk_main_iteration();
gtk_tree_store_clear(widgets->PackagesList);
char *modules = config(modules_parameter);
if (modules&&!strcmp(modules,"auto")){
@@ -142,6 +143,7 @@ void yon_packages_tab_init(main_window *widgets){
}
modules = yon_char_parsed_to_string(final,final_size,",");
}
+ while(gtk_events_pending()) gtk_main_iteration();
int size;
char *config_packages = config(packages_parameter);
@@ -163,6 +165,7 @@ void yon_packages_tab_init(main_window *widgets){
}
yon_char_parsed_add_or_create_if_exists(final,&final_size,modules_parsed[j]);
}
+ while(gtk_events_pending()) gtk_main_iteration();
yon_char_parsed_free(modules_parsed,modules_parsed_size);
char *modules_string = yon_char_parsed_to_string(final,final_size,"\t");
if (empty && !yon_char_check_elements(modules,modules_string,",")) continue;
@@ -218,6 +221,7 @@ void yon_packages_tab_init(main_window *widgets){
free(full_string);
}
}
+ while(gtk_events_pending()) gtk_main_iteration();
}
yon_packages_remove_empty_groups(widgets);
if (!yon_char_is_empty(modules)) free(modules);
diff --git a/source/ubinstall-gtk-page-switch.c b/source/ubinstall-gtk-page-switch.c
index 9f815eb..e0d4fbe 100644
--- a/source/ubinstall-gtk-page-switch.c
+++ b/source/ubinstall-gtk-page-switch.c
@@ -8,16 +8,26 @@ enum YON_PAGES yon_page_get_next(main_window *widgets, enum YON_PAGES page){
case YON_PAGE_WELCOME: return YON_PAGE_LICENCE; break;
case YON_PAGE_LICENCE: return YON_PAGE_SECTIONS; break;
case YON_PAGE_SECTIONS: return yon_sections_get_next_page(widgets); break;
- case YON_PAGE_OS_COMPONENTS: return main_config.configure_mode?YON_PAGE_CONFIG_HUB: strcmp(config(AUTOINSTALL_TYPE_INSTALL),"system_only") ? YON_PAGE_INSTALLATION_BEGIN : YON_PAGE_RECOVERY_BEGIN; break;
+ case YON_PAGE_OS_COMPONENTS: {
+ char *install_mode = config(AUTOINSTALL_TYPE_INSTALL);
+ if (main_config.configure_mode&&strcmp(install_mode,"system_only")&&strcmp(install_mode,"grub_install")&&strcmp(install_mode,"grub_update")){
+ return YON_PAGE_CONFIG_HUB;
+ } else if (strcmp(install_mode,"system_only")){
+ return YON_PAGE_INSTALLATION_BEGIN;
+ } else {
+ return YON_PAGE_RECOVERY_BEGIN;
+ }
+ }
case YON_PAGE_INSTALLATION_BEGIN: return YON_PAGE_CONFIG_HUB; break;
case YON_PAGE_SOFTWARE: return YON_PAGE_CONFIG_HUB; break;
case YON_PAGE_CONFIG_HUB: {
+ char *install_mode = config(AUTOINSTALL_TYPE_INSTALL);
if (main_config.configure_mode){
return YON_PAGE_CONFIGURE_END;
- } else if (strcmp(config(AUTOINSTALL_TYPE_INSTALL),"data_only")){
+ } else if (strcmp(install_mode,"data_only")){
return YON_PAGE_INSTALLATION;
} else {
- return YON_PAGE_RECOVERY_PROCESS;
+ return YON_PAGE_RECOVERY_BEGIN;
}
} break;
case YON_PAGE_KERNEL: return YON_PAGE_CONFIG_HUB; break;
@@ -37,11 +47,11 @@ enum YON_PAGES yon_page_get_next(main_window *widgets, enum YON_PAGES page){
case YON_PAGE_INSTALL_SAME_PARTITION: return YON_PAGE_OS_COMPONENTS; break;
case YON_PAGE_INSTALL_ADVANCED: return YON_PAGE_OS_COMPONENTS; break;
case YON_PAGE_INSTALL_RECOVERY: return yon_recovery_get_next(widgets); break;
- case YON_PAGE_RECOVERY_GRUB_INSTALL: return main_config.configure_mode?YON_PAGE_CONFIGURE_END:YON_PAGE_RECOVERY_BEGIN; break;
- case YON_PAGE_RECOVERY_GRUB_UPDATE: return main_config.configure_mode?YON_PAGE_CONFIGURE_END:YON_PAGE_RECOVERY_BEGIN; break;
- case YON_PAGE_RECOVERY_OS_ONLY: return main_config.configure_mode?YON_PAGE_CONFIGURE_END:YON_PAGE_OS_COMPONENTS; break;
- case YON_PAGE_RECOVERY_USRDATA_ONLY: return main_config.configure_mode?YON_PAGE_CONFIGURE_END:YON_PAGE_RECOVERY_BEGIN; break;
- case YON_PAGE_RECOVERY_BEGIN: main_config.save_configured = 1; return strcmp(config(AUTOINSTALL_TYPE_INSTALL),"data_only") ? YON_PAGE_RECOVERY_PROCESS: YON_PAGE_CONFIG_HUB; break;
+ case YON_PAGE_RECOVERY_GRUB_INSTALL: return YON_PAGE_CONFIG_HUB; break;
+ case YON_PAGE_RECOVERY_GRUB_UPDATE: return YON_PAGE_CONFIG_HUB; break;
+ case YON_PAGE_RECOVERY_OS_ONLY: return YON_PAGE_OS_COMPONENTS; break;
+ case YON_PAGE_RECOVERY_USRDATA_ONLY: return YON_PAGE_CONFIG_HUB; break;
+ case YON_PAGE_RECOVERY_BEGIN: main_config.save_configured = 1; return YON_PAGE_RECOVERY_PROCESS; break;
case YON_PAGE_RECOVERY_PROCESS: return YON_PAGE_RECOVERY_COMPLETION; break;
case YON_PAGE_INSTALLATION: return YON_PAGE_COMPLETION; break;
case YON_PAGE_CONFIGURE_SAVE:
@@ -419,6 +429,28 @@ void yon_switch_page_render(main_window *widgets){
g_list_free(list);
}
+void yon_container_start_loading(GtkWidget *target){
+ GtkWidget *parent = gtk_widget_get_parent(target);
+ g_object_ref(target);
+ gtk_container_remove(GTK_CONTAINER(parent),target);
+ GtkWidget *overlay = gtk_overlay_new();
+ g_object_set_data(G_OBJECT(parent),"loader_overlay",overlay);
+ g_object_set_data(G_OBJECT(target),"parent",parent);
+ gtk_overlay_add_overlay(GTK_OVERLAY(overlay),target);
+ gtk_widget_show(overlay);
+}
+
+void yon_container_stop_loading(GtkWidget *target){
+ g_object_ref(target);
+ GtkWidget *parent = g_object_get_data(G_OBJECT(target),"loader_overlay");
+ GtkWidget *overlay = g_object_get_data(G_OBJECT(parent),"loader_overlay");
+ gtk_container_remove(GTK_CONTAINER(overlay),target);
+ gtk_container_add(GTK_CONTAINER(parent),target);
+ gtk_widget_destroy(overlay);
+ gtk_widget_show(overlay);
+ g_object_set_data(G_OBJECT(parent),"loader_overlay",NULL);
+ g_object_set_data(G_OBJECT(target),"parent",NULL);
+}
void yon_configuration_mode_check(main_window *widgets){
enum YON_PAGES page = gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->Notebook));
@@ -470,18 +502,23 @@ void yon_page_init(main_window *widgets, enum YON_PAGES page){
yon_configuration_hub_init(widgets);
break;
case YON_PAGE_OS_COMPONENTS:
+ // on_status_update(NULL,widgets);
yon_os_components_init(widgets);
break;
case YON_PAGE_KERNEL:
+ // on_status_update(NULL,widgets);
yon_kernel_init(widgets);
break;
case YON_PAGE_KERNEL_ADDON:
+ // on_status_update(NULL,widgets);
yon_kernel_addon_init(widgets);
break;
case YON_PAGE_SOFTWARE:
+ // on_status_update(NULL,widgets);
yon_software_init(widgets);
break;
case YON_PAGE_PACMAN_SOFTWARE:
+ // on_status_update(NULL,widgets);
yon_pacman_init(widgets);
break;
case YON_PAGE_REGION:
@@ -509,6 +546,7 @@ void yon_page_init(main_window *widgets, enum YON_PAGES page){
yon_network_init(widgets);
break;
case YON_PAGE_PACKAGES:
+ // on_status_update(NULL,widgets);
yon_packages_tab_init(widgets);
break;
case YON_PAGE_INSTALL_ADVANCED:
@@ -564,6 +602,16 @@ void on_page_next_clicked(GtkWidget *, main_window *widgets){
page = yon_page_get_next(widgets,page);
if ((int)page!=-1){
gtk_notebook_set_current_page(GTK_NOTEBOOK(widgets->Notebook),page);
+ switch(page){
+ case YON_PAGE_KERNEL:
+ case YON_PAGE_KERNEL_ADDON:
+ case YON_PAGE_PACMAN_SOFTWARE:
+ case YON_PAGE_SOFTWARE:
+ case YON_PAGE_PACKAGES:
+ on_status_button_update(NULL,widgets);
+ break;
+ default: break;
+ };
yon_page_init(widgets,page);
}
yon_page_update(widgets);
@@ -578,7 +626,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));
diff --git a/source/ubinstall-gtk-saving.c b/source/ubinstall-gtk-saving.c
index 98b126c..f5f0efd 100644
--- a/source/ubinstall-gtk-saving.c
+++ b/source/ubinstall-gtk-saving.c
@@ -156,6 +156,29 @@ enum INSTALL_TYPE yon_ubl_get_install_mode(){
return INSTALL_ERROR;
}
+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);
+ 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);
+ } else if (main_config.save_done&&main_config.save_configured){
+ g_idle_add((GSourceFunc)on_install_success,widgets);
+
+ } else {
+ main_config.save_done=1;
+ }
+}
+
void *on_config_save(void *data){
main_window *widgets = (main_window*)data;
@@ -178,7 +201,6 @@ void *on_config_save(void *data){
g_mutex_unlock(&main_config.install_mutex);
if ((!main_config.save_done)&&main_config.save_configured){
on_setup_system_configuration(widgets);
- // on_page_next_clicked(NULL,widgets);
}
} else {
yon_launch("ubconfig --source system get /");
@@ -190,97 +212,16 @@ void *on_setup_system_configuration(void * data){
yon_debug_output("%s\n","Entered thread");
main_window *widgets = (main_window*)data;
if (widgets){};
- int size;
- config_str all_parameters = yon_config_get_selection_by_key(&size,
- root_password_parameter,
- autologin_parameter,
- xkbmodel_parameter,
- xkblayout_parameter,
- xkbvariant_parameter,
- xkboptions_parameter,
- hostname_parameter,
- zone_parameter,
- lang_parameter,
- locale_parameter,
- SERVICES_ENABLE_parameter,
- GRUB_DEFAULT_parameter,
- GRUB_TIMEOUT_parameter,
- AUTOLOGINUSER_parameter,
- GRUB_SUPERUSERS_parameter,
- DOMAIN_parameter,
- DOMAIN_admanger_parameter,
- NTPSERVERS_parameter,
- packages_parameter,
- KERNEL_BOOT_parameter,
- packages_parameter,
- NULL);
- int user_size=0;
- config_str users = yon_config_get_all_by_key(USERADD_parameter_search,&user_size);
- if (user_size){
- int final_size;
- config_str final = yon_char_parsed_merge(all_parameters,size,users,user_size,&final_size);
- // yon_char_parsed_free(users,user_size);
- if (size) yon_char_parsed_free(all_parameters,size);
- all_parameters = final;
- size = final_size;
- }
- users = yon_config_get_all_by_key(GRUB_PASSWORD_parameter_search,&user_size);
- if (users){
- int final_size;
- config_str final = yon_char_parsed_merge(all_parameters,size,users,user_size,&final_size);
- // yon_char_parsed_free(users,user_size);
- if (size) yon_char_parsed_free(all_parameters,size);
- all_parameters = final;
- size = final_size;
- }
- int network_size;
- config_str networks = yon_config_get_all_by_key(NETWORK_parameter_search,&network_size);
- if (network_size){
- int final_size;
- config_str final = yon_char_parsed_merge(all_parameters,size,networks,network_size,&final_size);
- // yon_char_parsed_free(networks,network_size);
- if (size) yon_char_parsed_free(all_parameters,size);
- all_parameters = final;
- size = final_size;
- }
-
- if (all_parameters){
- for (int i=0;iMainWindow),"pacman -Sy",SUCCESS_LABEL,FAIL_LABEL);
-// yon_terminal_integrated_start_shell(widgets->InstallTerminal,yon_debug_output("%s\n",pacman_update_command),NULL,NULL);
-// g_signal_connect(G_OBJECT(widgets->InstallTerminal),"child-exited",G_CALLBACK(on_db_update_done),widgets);
-// gtk_button_clicked(GTK_BUTTON(widgets->MoreButton));
-// gtk_notebook_set_current_page(GTK_NOTEBOOK(widgets->MenusTab),1);
-// }
-
-void on_status_update(GtkWidget *,main_window *widgets){
- // on_database_update(NULL,widgets);
- yon_window *window = yon_window_new();
- GtkWidget *terminal = vte_terminal_new();
- yon_gtk_window_setup(GTK_WINDOW(window->Window),GTK_WINDOW(widgets->MainWindow),DB_UPDATE_LABEL,icon_path,NULL);
- gtk_widget_show(terminal);
- gtk_box_pack_start(GTK_BOX(window->MainBox),terminal,1,1,0);
- yon_terminal_integrated_start_shell(terminal,"pacman -Sy",NULL,NULL);
- gtk_widget_show(window->Window);
- // yon_terminal_window_launch(GTK_WINDOW(widgets->MainWindow),"pacman -Sy",SUCCESS_LABEL,FAIL_LABEL);
+void yon_update_page(main_window *widgets){
+ enum YON_PAGES page = gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->Notebook));
yon_packages_update();
+ while(gtk_events_pending()) gtk_main_iteration();
+ yon_page_init(widgets,page);
+ g_signal_handlers_unblock_by_func(G_OBJECT(widgets->db_lock_monitor),G_CALLBACK(yon_db_unlock_update),widgets);
+ on_status_update(NULL,widgets);
+}
+void *yon_db_update(main_window *widgets){
+ yon_launch("pacsync --updated");
+ g_idle_add_once((GSourceOnceFunc)yon_update_page,widgets);
+ pthread_exit(NULL);
+}
+
+void on_status_button_update(GtkWidget *, main_window *widgets){
+ g_signal_handlers_block_by_func(G_OBJECT(widgets->db_lock_monitor),G_CALLBACK(yon_db_unlock_update),widgets);
+ pthread_t tid=0;
+ pthread_create(&tid,NULL,(void*(*)(void*))yon_db_update,widgets);
+
+}
+
+void yon_status_thread_update_inactive(main_window *widgets){
+ gtk_image_set_from_icon_name(GTK_IMAGE(widgets->KernelPacmanStatusImage),inactive_icon_path,GTK_ICON_SIZE_BUTTON);
+ gtk_image_set_from_icon_name(GTK_IMAGE(widgets->KernelAddonPacmanStatusImage),inactive_icon_path,GTK_ICON_SIZE_BUTTON);
+ gtk_image_set_from_icon_name(GTK_IMAGE(widgets->PacmanSoftwareStatusImage),inactive_icon_path,GTK_ICON_SIZE_BUTTON);
+ gtk_image_set_from_icon_name(GTK_IMAGE(widgets->AdditionalComponentsStatusImage),inactive_icon_path,GTK_ICON_SIZE_BUTTON);
+ gtk_image_set_from_icon_name(GTK_IMAGE(widgets->PackagesStatusImage),inactive_icon_path,GTK_ICON_SIZE_BUTTON);
+ gtk_label_set_text(GTK_LABEL(widgets->KernelPacmanStatusLabel),UNACCESSED_LABEL);
+ gtk_label_set_text(GTK_LABEL(widgets->PacmanSoftwareStatusLabel),UNACCESSED_LABEL);
+ gtk_label_set_text(GTK_LABEL(widgets->KernelAddonPacmanStatusLabel),UNACCESSED_LABEL);
+ gtk_label_set_text(GTK_LABEL(widgets->AdditionalComponentsStatusLabel),UNACCESSED_LABEL);
+ gtk_label_set_text(GTK_LABEL(widgets->PackagesStatusLabel),UNACCESSED_LABEL);
+}
+
+void yon_status_thread_update_active(main_window *widgets){
+ gtk_image_set_from_icon_name(GTK_IMAGE(widgets->KernelPacmanStatusImage),active_icon_path,GTK_ICON_SIZE_BUTTON);
+ gtk_image_set_from_icon_name(GTK_IMAGE(widgets->KernelAddonPacmanStatusImage),active_icon_path,GTK_ICON_SIZE_BUTTON);
+ gtk_image_set_from_icon_name(GTK_IMAGE(widgets->PacmanSoftwareStatusImage),active_icon_path,GTK_ICON_SIZE_BUTTON);
+ gtk_image_set_from_icon_name(GTK_IMAGE(widgets->AdditionalComponentsStatusImage),active_icon_path,GTK_ICON_SIZE_BUTTON);
+ gtk_image_set_from_icon_name(GTK_IMAGE(widgets->PackagesStatusImage),active_icon_path,GTK_ICON_SIZE_BUTTON);
+ gtk_label_set_text(GTK_LABEL(widgets->KernelPacmanStatusLabel),ACCESSED_LABEL);
+ gtk_label_set_text(GTK_LABEL(widgets->PacmanSoftwareStatusLabel),ACCESSED_LABEL);
+ gtk_label_set_text(GTK_LABEL(widgets->KernelAddonPacmanStatusLabel),ACCESSED_LABEL);
+ gtk_label_set_text(GTK_LABEL(widgets->AdditionalComponentsStatusLabel),ACCESSED_LABEL);
+ gtk_label_set_text(GTK_LABEL(widgets->PackagesStatusLabel),ACCESSED_LABEL);
+}
+void *yon_status_thread_update(main_window *widgets){
if (system(yon_check_database_command)){
- gtk_image_set_from_icon_name(GTK_IMAGE(widgets->KernelPacmanStatusImage),inactive_icon_path,GTK_ICON_SIZE_BUTTON);
- gtk_image_set_from_icon_name(GTK_IMAGE(widgets->KernelAddonPacmanStatusImage),inactive_icon_path,GTK_ICON_SIZE_BUTTON);
- gtk_image_set_from_icon_name(GTK_IMAGE(widgets->PacmanSoftwareStatusImage),inactive_icon_path,GTK_ICON_SIZE_BUTTON);
- gtk_image_set_from_icon_name(GTK_IMAGE(widgets->AdditionalComponentsStatusImage),inactive_icon_path,GTK_ICON_SIZE_BUTTON);
- gtk_image_set_from_icon_name(GTK_IMAGE(widgets->PackagesStatusImage),inactive_icon_path,GTK_ICON_SIZE_BUTTON);
- gtk_label_set_text(GTK_LABEL(widgets->KernelPacmanStatusLabel),UNACCESSED_LABEL);
- gtk_label_set_text(GTK_LABEL(widgets->PacmanSoftwareStatusLabel),UNACCESSED_LABEL);
- gtk_label_set_text(GTK_LABEL(widgets->KernelAddonPacmanStatusLabel),UNACCESSED_LABEL);
- gtk_label_set_text(GTK_LABEL(widgets->AdditionalComponentsStatusLabel),UNACCESSED_LABEL);
- gtk_label_set_text(GTK_LABEL(widgets->PackagesStatusLabel),UNACCESSED_LABEL);
+ g_idle_add_once((GSourceOnceFunc)yon_status_thread_update_inactive,widgets);
} else {
- gtk_image_set_from_icon_name(GTK_IMAGE(widgets->KernelPacmanStatusImage),active_icon_path,GTK_ICON_SIZE_BUTTON);
- gtk_image_set_from_icon_name(GTK_IMAGE(widgets->KernelAddonPacmanStatusImage),active_icon_path,GTK_ICON_SIZE_BUTTON);
- gtk_image_set_from_icon_name(GTK_IMAGE(widgets->PacmanSoftwareStatusImage),active_icon_path,GTK_ICON_SIZE_BUTTON);
- gtk_image_set_from_icon_name(GTK_IMAGE(widgets->AdditionalComponentsStatusImage),active_icon_path,GTK_ICON_SIZE_BUTTON);
- gtk_image_set_from_icon_name(GTK_IMAGE(widgets->PackagesStatusImage),active_icon_path,GTK_ICON_SIZE_BUTTON);
- gtk_label_set_text(GTK_LABEL(widgets->KernelPacmanStatusLabel),ACCESSED_LABEL);
- gtk_label_set_text(GTK_LABEL(widgets->PacmanSoftwareStatusLabel),ACCESSED_LABEL);
- gtk_label_set_text(GTK_LABEL(widgets->KernelAddonPacmanStatusLabel),ACCESSED_LABEL);
- gtk_label_set_text(GTK_LABEL(widgets->AdditionalComponentsStatusLabel),ACCESSED_LABEL);
- gtk_label_set_text(GTK_LABEL(widgets->PackagesStatusLabel),ACCESSED_LABEL);
+ g_idle_add_once((GSourceOnceFunc)yon_status_thread_update_active,widgets);
}
- enum YON_PAGES page = gtk_notebook_get_current_page(GTK_NOTEBOOK(widgets->Notebook));
- page = yon_page_get_next(widgets,page);
- yon_page_init(widgets,page);
+ pthread_exit(NULL);
+}
+
+void on_status_update(GtkWidget *,main_window *widgets){
+ pthread_t tid=0;
+ pthread_create(&tid,NULL,(void*(*)(void*))yon_status_thread_update,widgets);
}
@@ -376,6 +388,24 @@ void yon_scroll_block_for_builder(GtkBuilder *builder){
g_slist_free(list);
}
+void yon_db_lock_update(GFileMonitor *,GFile *,GFile *,GFileMonitorEvent ,main_window *widgets){
+ if (!access(pacman_lock_path,F_OK)){
+ gtk_widget_set_sensitive(widgets->KernelPacmanStatusButton,0);
+ gtk_widget_set_sensitive(widgets->PacmanSoftwareStatusButton,0);
+ gtk_widget_set_sensitive(widgets->KernelAddonPacmanStatusButton,0);
+ gtk_widget_set_sensitive(widgets->AdditionalComponentsStatusButton,0);
+ }
+}
+
+void yon_db_unlock_update(GFileMonitor *,GFile *,GFile *,GFileMonitorEvent ,main_window *widgets){
+ if (access(pacman_lock_path,F_OK)){
+ gtk_widget_set_sensitive(widgets->KernelPacmanStatusButton,1);
+ gtk_widget_set_sensitive(widgets->PacmanSoftwareStatusButton,1);
+ gtk_widget_set_sensitive(widgets->KernelAddonPacmanStatusButton,1);
+ gtk_widget_set_sensitive(widgets->AdditionalComponentsStatusButton,1);
+ }
+}
+
void yon_main_window_create(main_window *widgets){
__attribute__((unused)) char *locale = setlocale(LC_ALL, "en_US.UTF-8");
GtkBuilder *builder = gtk_builder_new_from_resource(glade_path);
@@ -702,11 +732,22 @@ 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->network_connections = NULL;
widgets->pacmanchosen = g_hash_table_new_full(g_str_hash,g_str_equal,free,NULL);
main_config.status_box = widgets->StatusBox;
+
+ GError *err = NULL;
+ GFile *file_desc = g_file_new_for_path(pacman_lock_dir_path);
+ widgets->db_lock_monitor = g_file_monitor_directory(file_desc,G_FILE_MONITOR_NONE,NULL,&err);
+ if (err){
+ printf("%s\n",err->message);
+ }
+ 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);
}
+
g_signal_connect(G_OBJECT(widgets->MainWindow),"delete-event",G_CALLBACK(on_yon_exit),widgets);
GtkWidget *menu = yon_gtk_builder_get_widget(builder,"menu2");
@@ -723,11 +764,11 @@ void yon_main_window_create(main_window *widgets){
g_signal_connect(G_OBJECT(widgets->LoadLocalConfigurationMenuItem),"activate",G_CALLBACK(on_config_local_load),widgets);
g_signal_connect(G_OBJECT(widgets->LoadExternalConfigurationMenuItem),"activate",G_CALLBACK(on_config_custom_load),widgets);
- g_signal_connect(G_OBJECT(widgets->PackagesStatusButton),"clicked",G_CALLBACK(on_status_update),widgets);
- g_signal_connect(G_OBJECT(widgets->AdditionalComponentsStatusButton),"clicked",G_CALLBACK(on_status_update),widgets);
- g_signal_connect(G_OBJECT(widgets->KernelPacmanStatusButton),"clicked",G_CALLBACK(on_status_update),widgets);
- g_signal_connect(G_OBJECT(widgets->KernelAddonPacmanStatusButton),"clicked",G_CALLBACK(on_status_update),widgets);
- g_signal_connect(G_OBJECT(widgets->PacmanSoftwareStatusButton),"clicked",G_CALLBACK(on_status_update),widgets);
+ g_signal_connect(G_OBJECT(widgets->PackagesStatusButton),"clicked",G_CALLBACK(on_status_button_update),widgets);
+ g_signal_connect(G_OBJECT(widgets->AdditionalComponentsStatusButton),"clicked",G_CALLBACK(on_status_button_update),widgets);
+ g_signal_connect(G_OBJECT(widgets->KernelPacmanStatusButton),"clicked",G_CALLBACK(on_status_button_update),widgets);
+ g_signal_connect(G_OBJECT(widgets->KernelAddonPacmanStatusButton),"clicked",G_CALLBACK(on_status_button_update),widgets);
+ g_signal_connect(G_OBJECT(widgets->PacmanSoftwareStatusButton),"clicked",G_CALLBACK(on_status_button_update),widgets);
g_signal_connect(G_OBJECT(widgets->ReadFullLogButton),"clicked",G_CALLBACK(on_process_log_view),widgets);
g_signal_connect(G_OBJECT(widgets->ReadShortLogButton),"clicked",G_CALLBACK(on_summary_log_view),widgets);
diff --git a/source/ubinstall-gtk.h b/source/ubinstall-gtk.h
index 1cf8735..f279cfc 100755
--- a/source/ubinstall-gtk.h
+++ b/source/ubinstall-gtk.h
@@ -13,6 +13,7 @@
#include
#include
#include
+// #define VTE_INCLUDE
#ifdef WEBKIT_INCLUDE
#include
#endif
@@ -95,6 +96,9 @@
#define arrow_left_icon_path "com.ublinux.ubinstall-gtk.arrow-left-symbolic"
#define arrow_right_icon_path "com.ublinux.ubinstall-gtk.arrow-right-symbolic"
+#define pacman_lock_path "/var/lib/pacman/db.lck"
+#define pacman_lock_dir_path "/var/lib/pacman/"
+
#define slide_repeat_path "/com/ublinux/images/slide-1.png", \
"/com/ublinux/images/slide-2.png", \
"/com/ublinux/images/slide-3.png", \
@@ -153,7 +157,7 @@ layout && /description:/ {\
#define yon_check_database_command "pacman -Syy >/dev/null"
#define internet_tomezone_check_command "curl -s ipinfo.io/timezone"
-#define ubinstall_dry_run_command "ubinstall --dry-run"
+#define ubinstall_dry_run_command "/usr/bin/bash -c \"ubinstall --dry-run"
#define os_name_get_command "sed -En 's/^PRETTY_NAME=[\"]*([^\"]+)[\"]*/\\1/p' /etc/os-release"
#define get_keyboard_layout_change_command "grep \"grp:\" /usr/share/X11/xkb/rules/base.lst | awk '{$1=$1; sub(/^!.*$/, \"\"); if ($1 ~ /^grp:/) {opt=$1; $1=\"\"; print opt \"|\" substr($0,2)}}'"
@@ -292,7 +296,7 @@ layout && /description:/ {\
#define get_localisation_command "ubconfig -ea --source global get [autoinstall] AUTOINSTALL[installer_locale] -- get [autoinstall] AUTOINSTALL['ubconfig set [locale] LANG'] -- get [locale] LANG"
-#define save_config_command yon_char_unite("nice ubinstall autoinstall",main_config.debug_mode?" --debug":""," --noautoconfig --noinstall_extra", NULL)
+#define save_config_command yon_char_unite("/usr/bin/bash -c \"nice ubinstall autoinstall",main_config.debug_mode?" --debug":""," --noautoconfig --noinstall_extra\"", NULL)
#define quick_install_command(path) yon_char_unite("nice ubinstall autoinstall",main_config.debug_mode?" --debug":""," --config='",path,"' --noautoconfig --noinstall_extra", NULL)
#define set_user_config_command yon_char_unite("nice ubinstall autoconfig",main_config.debug_mode?" --debug":""," install_extra", NULL)
@@ -304,8 +308,6 @@ layout && /description:/ {\
#define PASSWORD_DEFAULT "ublinux"
-#define start_fast_install_command "ubinstall --autoinstall"
-
#define progress_path "/var/log/ubinstall_progress.log"
#define password_limits_path "/etc/security/pwquiality.conf"
@@ -314,9 +316,9 @@ layout && /description:/ {\
#define full_log_path "/var/log/ubinstall.log"
-#define get_devices_command "ubinstall show --lsdevices"
-#define get_parts_for_device_command "ubinstall show --lsparts"
-#define get_modules_command "ubinstall show --lsmodules"
+#define get_devices_command "/usr/bin/bash -c \"ubinstall show --lsdevices\""
+#define get_parts_for_device_command "/usr/bin/bash -c \"ubinstall show --lsparts\""
+#define get_modules_command "/usr/bin/bash -c \"ubinstall show --lsmodules\""
#define ubconfig_file_create_pkexec(target) yon_char_unite("pkexec ubconfig --target \"",target,"\" create",NULL)
#define config_get_command(target) yon_char_unite("ubconfig -ea --conarg --source ", target, " get [autoinstall] AUTOINSTALL[*] ADDADM -- get [locale] LANG", NULL)
@@ -852,6 +854,8 @@ typedef struct
GtkWidget *root_button;
GtkWidget *debug_button;
+ GFileMonitor *db_lock_monitor;
+
} main_window;
enum ADVANCED_PART_TYPE
@@ -1627,4 +1631,15 @@ gboolean on_os_components_info(GtkWidget *, GdkEventButton *, os_row *row);
void on_software_info(GtkWidget*, main_window *widgets);
void yon_packages_remove_empty_groups(main_window *widgets);
void yon_config_mode_start(main_window *widgets);
-void on_bootloader_selected(GtkTreeView *,main_window *widgets);
\ No newline at end of file
+void on_bootloader_selected(GtkTreeView *,main_window *widgets);
+void yon_update_page(main_window *widgets);
+void *yon_db_update(main_window *widgets);
+void on_status_button_update(GtkWidget *, main_window *widgets);
+void yon_container_start_loading(GtkWidget *target);
+void yon_container_stop_loading(GtkWidget *target);
+void yon_status_thread_update_inactive(main_window *widgets);
+void yon_status_thread_update_active(main_window *widgets);
+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);
\ No newline at end of file
diff --git a/ubinstall-gtk-kernel-row.glade b/ubinstall-gtk-kernel-row.glade
index feb2178..0145396 100644
--- a/ubinstall-gtk-kernel-row.glade
+++ b/ubinstall-gtk-kernel-row.glade
@@ -134,6 +134,7 @@
True
False
5
+ False
0
0
diff --git a/ubinstall-gtk.glade b/ubinstall-gtk.glade
index fe4b481..d1ea92e 100644
--- a/ubinstall-gtk.glade
+++ b/ubinstall-gtk.glade
@@ -5914,22 +5914,22 @@ Select a different installation sources.
- Unit
+ Service
- 1
+ 2