From bc9eb3e71fa0d8d0dcbf0b9896812ca16bb4dea7 Mon Sep 17 00:00:00 2001 From: Ivan Yarcev Date: Thu, 21 Aug 2025 16:54:11 +0600 Subject: [PATCH] Reposiroties sorting --- .../ubl-settings-repomanager-storage-window.c | 36 +++++++++++++++---- source/ubl-settings-repomanager.c | 2 +- source/ubl-settings-repomanager.h | 3 +- 3 files changed, 33 insertions(+), 8 deletions(-) diff --git a/source/ubl-settings-repomanager-storage-window.c b/source/ubl-settings-repomanager-storage-window.c index dd46259..5918b8d 100644 --- a/source/ubl-settings-repomanager-storage-window.c +++ b/source/ubl-settings-repomanager-storage-window.c @@ -184,11 +184,13 @@ void yon_storage_config_update(storage_config_window *window){ const char *active = gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->StoragePathCombo)); if (active){ storage_struct *storage = g_hash_table_lookup(window->storages_copy,active); - GList *repos = g_hash_table_get_values(storage->repos); + int size; + config_str repo_keys = (config_str)g_hash_table_get_keys_as_array(storage->repos,&size); + qsort(repo_keys,size,sizeof(char*),yon_char_parsed_compare); + for (int i = 0;irepos,repo_keys[i]); if (repos){ - GList *iter; - for (iter = repos;iter;iter=iter->next){ - repo_struct *cur_repo = (repo_struct*)iter->data; + repo_struct *cur_repo = repos; storage_repo_block *cur_block = NULL; cur_block = yon_storage_repo_block_new(); g_object_set_data(G_OBJECT(cur_block->SignatureCombo),"repo_storage",cur_repo); @@ -229,14 +231,35 @@ void yon_storage_remove(char *key, storage_struct *storage,void*){ yon_storage_sturct_free_full(storage); } +int yon_char_parsed_compare(const void *a, const void *b){ + const config_str str_a = (const config_str)a; + const config_str str_b = (const config_str)b; + + return strcmp(*str_a,*str_b); +} + + void on_storage_accept(GtkWidget *self, dictionary *dict){ main_window *widgets = yon_dictionary_get_data(dict->first,main_window*); storage_config_window *window = yon_dictionary_get_data(dict->first->next,storage_config_window*); gtk_widget_destroy(window->MainWindow); - g_hash_table_foreach_remove(window->storages_copy,(GHRFunc)yon_storage_remove,NULL); + int size; + config_str keys = (config_str)g_hash_table_get_keys_as_array(window->storages_copy,&size); + for (int i=0;istorages_copy,keys[i]),NULL); + } + g_hash_table_remove_all(window->storages_copy); + // g_hash_table_foreach_remove(window->storages_copy,(GHRFunc)yon_storage_remove,NULL); g_hash_table_unref(window->storages_copy); free(window); - yon_interface_update(widgets); + yon_interface_update(widgets); } void on_storage_changed(GtkWidget *self, storage_config_window *window){ @@ -281,6 +304,7 @@ storage_config_window *yon_storage_config_window_new(){ repo_struct *repo = (repo_struct*)iter2->data; yon_char_parsed_add_or_create_if_exists(paths,&repos_size,repo->path); } + qsort(paths,repos_size,sizeof(char*),yon_char_parsed_compare); yon_config_register(storage->path,STORAGE_command,yon_char_parsed_to_string(paths,repos_size,",")); } g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL); diff --git a/source/ubl-settings-repomanager.c b/source/ubl-settings-repomanager.c index f6f4d0f..79ddb33 100644 --- a/source/ubl-settings-repomanager.c +++ b/source/ubl-settings-repomanager.c @@ -444,10 +444,10 @@ int main(int argc, char *argv[]){ yon_ubl_setup_arguments(argc,argv,&unfound,&size,NULL); gtk_init(&argc,&argv); template_main_window *widgets = yon_ubl_window_setup(); - yon_window_remove_exit_config_check(widgets); gtk_widget_hide(gtk_menu_get_attach_widget(GTK_MENU(gtk_widget_get_parent(widgets->SaveMenuItem)))); gtk_widget_hide(gtk_menu_get_attach_widget(GTK_MENU(gtk_widget_get_parent(widgets->LoadGlobalMenuItem)))); widgets = (template_main_window*)yon_main_window_complete((main_window*)widgets); + yon_window_remove_exit_config_check(widgets); char *path = yon_char_unite(yon_ubl_user_get_home_directory(),"/.config/",LocaleName,"/",LocaleName,".conf",NULL); yon_window_config_load(path); // yon_config_load_update((main_window*)widgets); diff --git a/source/ubl-settings-repomanager.h b/source/ubl-settings-repomanager.h index 01b286c..5289534 100644 --- a/source/ubl-settings-repomanager.h +++ b/source/ubl-settings-repomanager.h @@ -418,4 +418,5 @@ void on_remove_window_tree_changed(GtkWidget *self, repo_add_window *window); void on_move_window_tree_changed(GtkWidget *self, repo_add_window *window); void on_move_check_fill(GtkWidget *self, repo_add_window *window); void yon_repo_creation_set_sensitive_from_combo_box(GtkComboBox *toggle, GtkWidget *target); -int yon_sort_func(GtkTreeModel *model, GtkTreeIter *a, GtkTreeIter *b, gpointer user_data); \ No newline at end of file +int yon_sort_func(GtkTreeModel *model, GtkTreeIter *a, GtkTreeIter *b, gpointer user_data); +int yon_char_parsed_compare(const void *a, const void *b); \ No newline at end of file