diff --git a/source/ubinstall-gtk-components.c b/source/ubinstall-gtk-components.c index 6d044b0..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)) 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-page-switch.c b/source/ubinstall-gtk-page-switch.c index 2f4a721..aa5e0d6 100644 --- a/source/ubinstall-gtk-page-switch.c +++ b/source/ubinstall-gtk-page-switch.c @@ -492,23 +492,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); + // on_status_update(NULL,widgets); yon_os_components_init(widgets); break; case YON_PAGE_KERNEL: - on_status_update(NULL,widgets); + // on_status_update(NULL,widgets); yon_kernel_init(widgets); break; case YON_PAGE_KERNEL_ADDON: - on_status_update(NULL,widgets); + // on_status_update(NULL,widgets); yon_kernel_addon_init(widgets); break; case YON_PAGE_SOFTWARE: - on_status_update(NULL,widgets); + // on_status_update(NULL,widgets); yon_software_init(widgets); break; case YON_PAGE_PACMAN_SOFTWARE: - on_status_update(NULL,widgets); + // on_status_update(NULL,widgets); yon_pacman_init(widgets); break; case YON_PAGE_REGION: @@ -536,7 +536,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); + // on_status_update(NULL,widgets); yon_packages_tab_init(widgets); break; case YON_PAGE_INSTALL_ADVANCED: @@ -592,6 +592,17 @@ 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_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,page); } yon_page_update(widgets); diff --git a/source/ubinstall-gtk.c b/source/ubinstall-gtk.c index da767e7..576d02d 100644 --- a/source/ubinstall-gtk.c +++ b/source/ubinstall-gtk.c @@ -320,10 +320,8 @@ void yon_update_page(main_window *widgets){ yon_packages_update(); while(gtk_events_pending()) gtk_main_iteration(); yon_page_init(widgets,page); - 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); + 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){ @@ -333,39 +331,36 @@ void *yon_db_update(main_window *widgets){ } void on_status_button_update(GtkWidget *, main_window *widgets){ - 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); + 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); + 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); + 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)){ @@ -393,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); @@ -723,6 +736,15 @@ void yon_main_window_create(main_window *widgets){ 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"); @@ -745,11 +767,6 @@ void yon_main_window_create(main_window *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->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->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 9ac5f09..25b6c83 100755 --- a/source/ubinstall-gtk.h +++ b/source/ubinstall-gtk.h @@ -95,6 +95,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", \ @@ -852,6 +855,8 @@ typedef struct GtkWidget *root_button; GtkWidget *debug_button; + GFileMonitor *db_lock_monitor; + } main_window; enum ADVANCED_PART_TYPE @@ -1635,4 +1640,6 @@ 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); \ No newline at end of file +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); \ No newline at end of file