Loading rework

pull/82/head
parent 9522752917
commit 23f3949765
No known key found for this signature in database
GPG Key ID: FF1D842BF4DDE92B

@ -147,7 +147,13 @@ void on_config_custom_load(GtkWidget *,main_window *widgets){
gtk_widget_set_margin_bottom(terminal_box,5);
gtk_widget_set_margin_start(terminal_box,5);
gtk_widget_set_margin_end(terminal_box,5);
gtk_widget_show_all(window);
gtk_widget_show(window);
gtk_widget_show(header);
gtk_widget_show(terminal);
gtk_widget_show(status_box);
gtk_widget_show(box);
gtk_widget_show(terminal_box);
gtk_widget_show(scroll);
vte_terminal_set_scrollback_lines(VTE_TERMINAL(terminal),-1);
@ -307,49 +313,29 @@ char *yon_package_string_set(char *target){
return final;
}
void *yon_tab_set_installed(kernels_tab *tab){
void yon_tab_set_installed(kernels_tab *tab){
g_mutex_lock(&main_config.update_mutex);
main_config.update_active++;
g_mutex_unlock(&main_config.update_mutex);
char *target_module = yon_package_string_set(tab->module);
char *target_package = yon_package_string_set(tab->package);
char *check_install_command = NULL;
if (yon_char_is_empty(target_module)){
tab->module_installed=-1;
} else {
check_install_command = get_package_is_installed_command(target_module); //if module installed
if (!system(yon_debug_output("%s\n",check_install_command))){
tab->module_installed=1;
} else tab->module_installed=0;
free(check_install_command);
check_install_command = get_package_is_updated_command(target_module); //if module has updates
if (!system(yon_debug_output("%s\n",check_install_command))){
tab->module_updated = 0;
} else tab->module_updated = 1;
free(check_install_command);
tab->module_installed = yon_packages_check_installed(target_module);
tab->module_updated = !yon_packages_check_updates(target_module);
}
if (yon_char_is_empty(target_package)){
tab->package_installed=-1;
} else {
check_install_command = get_package_is_installed_command(target_package); //if package installed
if (!system(yon_debug_output("%s\n",check_install_command))){
tab->package_installed=1;
} else tab->package_installed=0;
free(check_install_command);
check_install_command = get_package_is_updated_command(target_package); //if package has updates
if (!system(yon_debug_output("%s\n",check_install_command))){
tab->package_updated = 0;
} else tab->package_updated = 1;
free(check_install_command);
tab->package_installed=yon_packages_check_installed(target_package);
tab->package_updated = !yon_packages_check_updates(target_package);
}
if (tab->package_installed==-1&&tab->module_installed==-1){
gtk_widget_destroy(tab->main_box);
tab->main_box=NULL;
}
gdk_threads_add_idle((GSourceFunc)yon_tab_create_tags,tab);
return NULL;
}
void *yon_interface_update(main_window *widgets){
@ -358,11 +344,15 @@ void *yon_interface_update(main_window *widgets){
lock=main_config.update_active;
g_mutex_unlock(&main_config.update_mutex);
if (!lock){
gtk_widget_show(widgets->LoadingSpinner);
gtk_spinner_start(GTK_SPINNER(widgets->LoadingSpinner));
gtk_widget_hide(widgets->MainOverlayBox);
yon_ubl_status_box_render(LOADING_LABEL,BACKGROUND_IMAGE_INFO_TYPE);
{
GList *list = gtk_container_get_children(GTK_CONTAINER(widgets->KernelsPackageBox));
if (g_list_length(list)>0){
for (guint i=0;i<g_list_length(list);i++){
while (gtk_events_pending()) gtk_main_iteration();
gtk_widget_destroy(g_list_nth_data(list,i));
}
g_list_free(list);
@ -372,6 +362,7 @@ void *yon_interface_update(main_window *widgets){
GList *list = gtk_container_get_children(GTK_CONTAINER(widgets->AdditionsPackageBox));
if (g_list_length(list)>0){
for (guint i=0;i<g_list_length(list);i++){
while (gtk_events_pending()) gtk_main_iteration();
gtk_widget_destroy(g_list_nth_data(list,i));
}
g_list_free(list);
@ -380,8 +371,8 @@ void *yon_interface_update(main_window *widgets){
int kernels_size;
config_str kernels = yon_resource_open_file(kernels_path, &kernels_size);
yon_packages_init();
for (int i=1;i<kernels_size;i++){
while (gtk_events_pending()) gtk_main_iteration();
int parsed_size;
config_str parsed = yon_char_parse(kernels[i],&parsed_size,";");
if (!yon_packages_check_exist(parsed[1])&&!yon_packages_check_exist(parsed[2])){
@ -389,7 +380,7 @@ void *yon_interface_update(main_window *widgets){
continue;
}
kernels_tab *tab = yon_tab_row_new(GTK_LIST_BOX(widgets->KernelsPackageBox),kernels[i],widgets);
g_thread_new("tags_install_tread",(GThreadFunc)yon_tab_set_installed,tab);
yon_tab_set_installed(tab);
{
GList *list = gtk_container_get_children(GTK_CONTAINER(tab->run_tags_box));
for (guint i=0;i<g_list_length(list);i++){
@ -401,6 +392,7 @@ void *yon_interface_update(main_window *widgets){
yon_char_parsed_free(kernels,kernels_size);
kernels = yon_resource_open_file(kernels_addon_path, &kernels_size);
for (int i=1;i<kernels_size;i++){
while (gtk_events_pending()) gtk_main_iteration();
int parsed_size;
config_str parsed = yon_char_parse(kernels[i],&parsed_size,";");
if (!yon_packages_check_exist(parsed[1])&&!yon_packages_check_exist(parsed[2])){
@ -408,9 +400,8 @@ void *yon_interface_update(main_window *widgets){
continue;
}
additions_kernels_tab *tab = yon_additions_tab_row_new(GTK_LIST_BOX(widgets->AdditionsPackageBox),kernels[i],widgets);
GThread *thr = g_thread_new("tags_install_tread",(GThreadFunc)yon_tab_set_installed,tab);
yon_tab_set_installed((kernels_tab*)tab);
if (i+1==kernels_size) {
g_thread_join(thr);
char *status_text = NULL;
switch (main_config.action){
case ACTION_LOAD:
@ -426,11 +417,14 @@ void *yon_interface_update(main_window *widgets){
status_text = OPERATION_ERROR_LABEL;
break;
}
yon_ubl_status_box_render(status_text,BACKGROUND_IMAGE_SUCCESS_TYPE);
}
gtk_widget_set_can_focus(gtk_widget_get_parent(tab->main_box),0);
}
yon_packages_finish();
gtk_widget_hide(widgets->LoadingSpinner);
gtk_widget_show(widgets->MainOverlayBox);
gtk_spinner_stop(GTK_SPINNER(widgets->LoadingSpinner));
}
return NULL;
}
@ -501,7 +495,8 @@ int yon_tag_add(GtkBox *target,char *tag_label, char *tag_style, char *icon_name
gtk_box_pack_start(GTK_BOX(box),icon,0,0,0);
}
gtk_box_pack_start(GTK_BOX(box),label,1,1,0);
gtk_widget_show_all(box);
gtk_widget_show(label);
gtk_widget_show(box);
gtk_box_pack_start(target,box,0,0,0);
return 1;
}
@ -513,6 +508,7 @@ gboolean on_command_execute_success(GtkWidget *,gint status,main_window *widgets
g_mutex_lock(&main_config.progress_mutex);
main_config.progress_active=0;
g_mutex_unlock(&main_config.progress_mutex);
gtk_widget_set_sensitive(widgets->CancelButton,0);
if (!status){
on_update_clicked(NULL,widgets);
main_config.action=ACTION_TERMINAL_EXECUTE_SUCCESS;
@ -605,6 +601,7 @@ void *yon_command_execute_async(char *command,main_window *widgets){
gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(widgets->InstallationProgress),0);
vte_terminal_reset(VTE_TERMINAL(widgets->InstallTerminal),0,1);
yon_terminal_integrated_start_shell(widgets->InstallTerminal,yon_debug_output("%s\n",command),NULL,NULL);
gtk_widget_set_sensitive(widgets->CancelButton,1);
// g_signal_connect_after(G_OBJECT(widgets->InstallTerminal),"child-exited",G_CALLBACK(on_command_execute_success),widgets);
// yon_terminal_integrated_start(widgets->InstallTerminal,yon_debug_output("%s\n",command));
glong columns = vte_terminal_get_column_count(VTE_TERMINAL(widgets->InstallTerminal));
@ -1363,6 +1360,8 @@ void config_init(){
main_config.local_load_success_localised = LOCAL_LOAD_SUCCESS_LABEL;
main_config.global_load_success_localised = GLOBAL_LOAD_SUCCESS_LABEL;
textdomain(LocaleName);
yon_packages_init();
}
void on_update_clicked(GtkWidget *self, main_window *widgets){
@ -1568,6 +1567,9 @@ void yon_main_window_complete(main_window *widgets){
widgets->TerminalRevealer = yon_gtk_builder_get_widget(builder, "TerminalRevealer");
widgets->TerminalPaned = yon_gtk_builder_get_widget(builder, "TerminalPaned");
widgets->TerminalScroll = yon_gtk_builder_get_widget(builder, "TerminalScroll");
widgets->MainOverlay = yon_gtk_builder_get_widget(builder, "MainOverlay");
widgets->MainOverlayBox = yon_gtk_builder_get_widget(builder, "MainOverlayBox");
widgets->LoadingSpinner = yon_gtk_builder_get_widget(builder, "LoadingSpinner");
widgets->KernelsList = GTK_LIST_STORE(gtk_builder_get_object(builder,"KernelsList"));
widgets->AdditionsList = GTK_LIST_STORE(gtk_builder_get_object(builder,"AdditionsList"));
widgets->KernelsPackageBox = yon_gtk_builder_get_widget(builder,"KernelsPackageBox");
@ -1593,6 +1595,7 @@ void yon_main_window_complete(main_window *widgets){
g_signal_connect(G_OBJECT(widgets->LoadGlobalMenuItem),"activate",G_CALLBACK(on_config_global_load),widgets);
g_signal_connect(G_OBJECT(widgets->LoadLocalMenuItem),"activate",G_CALLBACK(on_config_local_load),widgets);
g_signal_connect(G_OBJECT(widgets->LoadCustomMenuItem),"activate",G_CALLBACK(on_config_custom_load),widgets);
gtk_overlay_add_overlay(GTK_OVERLAY(widgets->MainOverlay),widgets->LoadingSpinner);
// yon_gtk_scrolled_window_set_horizontal_at_desired_size(widgets->Window,GTK_SCROLLED_WINDOW(gtk_widget_get_parent(gtk_widget_get_parent(widgets->KernelsPackageBox))));
// yon_gtk_scrolled_window_set_horizontal_at_desired_size(widgets->Window,GTK_SCROLLED_WINDOW(gtk_widget_get_parent(gtk_widget_get_parent(widgets->AdditionsPackageBox))));

@ -133,6 +133,10 @@ typedef struct {
GtkWidget *MoreButton;
GtkWidget *TerminalPaned;
GtkWidget *TerminalScroll;
GtkWidget *MainOverlay;
GtkWidget *MainOverlayBox;
GtkWidget *LoadingSpinner;
} main_window;
@ -240,7 +244,7 @@ void on_save_done(main_window *widgets, config_str output, int size);
char *yon_package_string_set(char *target);
gboolean yon_tab_create_tags(kernels_tab *tab);
void *yon_tab_set_installed(kernels_tab *tab);
void yon_tab_set_installed(kernels_tab *tab);
void *yon_interface_update(main_window *widgets);

@ -44,6 +44,15 @@
<column type="gchararray"/>
</columns>
</object>
<object class="GtkSpinner" id="LoadingSpinner">
<property name="width-request">64</property>
<property name="height-request">64</property>
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="halign">center</property>
<property name="valign">center</property>
<property name="active">True</property>
</object>
<object class="GtkSizeGroup" id="RunSizeGroup"/>
<object class="GtkSizeGroup" id="StatusSizeGroup"/>
<object class="GtkSizeGroup" id="TagsSizeGroup"/>
@ -187,233 +196,253 @@
</packing>
</child>
<child>
<object class="GtkBox">
<object class="GtkOverlay" id="MainOverlay">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<property name="spacing">5</property>
<child>
<object class="GtkNotebook" id="MainNotebook">
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkBox">
<object class="GtkBox" id="MainOverlayBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-left">5</property>
<property name="margin-right">5</property>
<property name="margin-start">5</property>
<property name="margin-end">5</property>
<property name="margin-top">5</property>
<property name="margin-bottom">5</property>
<property name="orientation">vertical</property>
<property name="spacing">5</property>
<child>
<object class="GtkScrolledWindow">
<object class="GtkNotebook" id="MainNotebook">
<property name="visible">True</property>
<property name="can-focus">True</property>
<child>
<object class="GtkViewport">
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-left">5</property>
<property name="margin-right">5</property>
<property name="margin-start">5</property>
<property name="margin-end">5</property>
<property name="margin-top">5</property>
<property name="margin-bottom">5</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkListBox" id="KernelsPackageBox">
<object class="GtkScrolledWindow">
<property name="visible">True</property>
<property name="can-focus">True</property>
<child>
<object class="GtkViewport">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-right">5</property>
<property name="margin-end">5</property>
<child>
<object class="GtkListBox" id="KernelsPackageBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="activate-on-single-click">False</property>
<style>
<class name="listfix"/>
</style>
</object>
</child>
</object>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
<child type="tab">
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Kernels</property>
</object>
<packing>
<property name="tab-fill">False</property>
</packing>
</child>
<child>
<object class="GtkScrolledWindow">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="margin-left">5</property>
<property name="margin-right">5</property>
<property name="margin-start">5</property>
<property name="margin-end">5</property>
<property name="margin-top">5</property>
<property name="margin-bottom">5</property>
<child>
<object class="GtkViewport">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="activate-on-single-click">False</property>
<style>
<class name="listfix"/>
</style>
<property name="margin-right">5</property>
<property name="margin-end">5</property>
<child>
<object class="GtkListBox" id="AdditionsPackageBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<style>
<class name="listfix"/>
</style>
</object>
</child>
</object>
</child>
</object>
<packing>
<property name="position">1</property>
</packing>
</child>
<child type="tab">
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Additions</property>
</object>
<packing>
<property name="position">1</property>
<property name="tab-fill">False</property>
</packing>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
<property name="position">0</property>
</packing>
</child>
</object>
</child>
<child type="tab">
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Kernels</property>
</object>
<packing>
<property name="tab-fill">False</property>
</packing>
</child>
<child>
<object class="GtkScrolledWindow">
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="margin-left">5</property>
<property name="margin-right">5</property>
<property name="margin-start">5</property>
<property name="margin-end">5</property>
<property name="margin-top">5</property>
<property name="margin-bottom">5</property>
<child>
<object class="GtkViewport">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-right">5</property>
<property name="margin-end">5</property>
<object class="GtkPaned" id="TerminalPaned">
<property name="can-focus">True</property>
<property name="orientation">vertical</property>
<property name="position">250</property>
<property name="position-set">True</property>
<property name="wide-handle">True</property>
<child>
<object class="GtkListBox" id="AdditionsPackageBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<style>
<class name="listfix"/>
</style>
</object>
<placeholder/>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
<packing>
<property name="position">1</property>
</packing>
</child>
<child type="tab">
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label" translatable="yes">Additions</property>
</object>
<packing>
<property name="position">1</property>
<property name="tab-fill">False</property>
</packing>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkPaned" id="TerminalPaned">
<property name="can-focus">True</property>
<property name="orientation">vertical</property>
<property name="position">250</property>
<property name="wide-handle">True</property>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkRevealer" id="MainRevealer">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="valign">end</property>
<property name="transition-type">slide-up</property>
<property name="reveal-child">True</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<property name="spacing">5</property>
<child>
<object class="GtkFrame">
<object class="GtkRevealer" id="MainRevealer">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="label-xalign">0</property>
<property name="shadow-type">in</property>
<property name="valign">end</property>
<property name="transition-type">slide-up</property>
<property name="reveal-child">True</property>
<child>
<object class="GtkAlignment">
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="top-padding">5</property>
<property name="bottom-padding">5</property>
<property name="left-padding">5</property>
<property name="right-padding">5</property>
<property name="orientation">vertical</property>
<property name="spacing">5</property>
<child>
<object class="GtkBox">
<object class="GtkFrame">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="spacing">5</property>
<property name="label-xalign">0</property>
<property name="shadow-type">in</property>
<child>
<object class="GtkProgressBar" id="InstallationProgress">
<object class="GtkAlignment">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="valign">center</property>
<property name="top-padding">5</property>
<property name="bottom-padding">5</property>
<property name="left-padding">5</property>
<property name="right-padding">5</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="spacing">5</property>
<child>
<object class="GtkProgressBar" id="InstallationProgress">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="valign">center</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkButton" id="CancelButton">
<property name="label" translatable="yes">Cancel</property>
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkButton" id="MoreButton">
<property name="label" translatable="yes">More</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
</object>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkButton" id="CancelButton">
<property name="label" translatable="yes">Cancel</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkButton" id="MoreButton">
<property name="label" translatable="yes">More</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
<child type="label_item">
<placeholder/>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<style>
<class name="workingbg"/>
</style>
</object>
</child>
<child type="label_item">
<placeholder/>
</child>
<style>
<class name="workingbg"/>
</style>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
<property name="position">2</property>
</packing>
</child>
<style>
<class name="workingbg"/>
</style>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<style>
<class name="workingbg"/>
</style>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
<property name="index">-1</property>
</packing>
</child>
</object>

Loading…
Cancel
Save