diff --git a/source/libublsettings-gtk3.c b/source/libublsettings-gtk3.c index fe7d4fb..17b00fa 100644 --- a/source/libublsettings-gtk3.c +++ b/source/libublsettings-gtk3.c @@ -18,12 +18,7 @@ static void child_ready(VteTerminal *terminal, GPid pid, GError *error, gpointer void yon_terminal_integrated_launch(GtkWidget *place_to_show, char* command, void *endwork_function, void* endwork_function_argument){ GtkWidget *terminal = vte_terminal_new(); - int size; - config_str parsed = NULL; - yon_char_parsed_add_or_create_if_exists(parsed,&size,"/usr/bin/bash"); - yon_char_parsed_add_or_create_if_exists(parsed,&size,"-c"); - yon_char_parsed_add_or_create_if_exists(parsed,&size,yon_char_unite("\"",command,"\"",NULL)); - yon_char_parsed_add_or_create_if_exists(parsed,&size,NULL); + config_str parsed = g_strsplit(command, " ", -1); vte_terminal_spawn_async(VTE_TERMINAL(terminal),VTE_PTY_NO_HELPER,NULL,parsed,NULL,G_SPAWN_SEARCH_PATH,NULL,NULL,NULL,2000,NULL,NULL,NULL); vte_terminal_set_size(VTE_TERMINAL(terminal),10,15); if(endwork_function) @@ -35,11 +30,8 @@ void yon_terminal_integrated_launch(GtkWidget *place_to_show, char* command, voi } void yon_terminal_integrated_start(GtkWidget *terminal, char* command){ - int size; gchar *envv[] = { NULL }; - config_str parsed = yon_char_parse(command,&size," "); - yon_char_parsed_add_or_create_if_exists(parsed,&size,"\0"); - yon_char_parsed_add_or_create_if_exists(parsed,&size,NULL); + config_str parsed = g_strsplit(command, " ", -1); vte_terminal_spawn_async(VTE_TERMINAL(terminal),VTE_PTY_NO_HELPER,"/bin",parsed,envv,G_SPAWN_SEARCH_PATH,NULL,NULL,NULL,20,NULL,NULL,NULL); vte_terminal_set_size(VTE_TERMINAL(terminal),10,15); vte_terminal_set_scrollback_lines(VTE_TERMINAL(terminal), -1); @@ -1094,4 +1086,82 @@ rmb_menu_window *yon_rmb_menu_setup(GtkWidget *target_widget, int (show_function // char *current_text = gtk_entry_get_text(entry); // } + +// GtkTreeStore section + +dictionary *yon_gtk_tree_store_get_children(GtkTreeStore *tree, GtkTreeIter *parent,int column){ + g_return_val_if_fail(GTK_IS_TREE_STORE(tree),NULL); + dictionary *children = NULL; + GtkTreeIter iter; + if(gtk_tree_model_iter_has_child){ + gtk_tree_model_iter_children(GTK_TREE_MODEL(tree),&iter,parent); + int valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(tree),&iter); + for (;valid;valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(tree),&iter)){ + void *result = NULL; + gtk_tree_model_get(GTK_TREE_MODEL(tree),&iter,column,&result,-1); + dictionary *child_children = yon_gtk_tree_store_get_children(tree,&iter,column); + yon_dictionary_add_or_create_if_exists_with_data(children,result,child_children); + } + return children; + } + return NULL; +} + +void yon_gtk_tree_store_fill_children(GtkTreeStore *tree, GtkTreeIter *parent, dictionary *data, int column){ + GtkTreeIter iter; + dictionary *dict=NULL; + for_dictionaries(dict,data){ + gtk_tree_store_append(tree,&iter,parent); + gtk_tree_store_set(tree,&iter,column,data->key,-1); + if (data->data){ + yon_gtk_tree_store_fill_children(tree,&iter,data->data,column); + } + } +} + +#include + +void yon_gtk_tree_store_copy_recursive(GtkTreeModel *sourceModel, GtkTreeIter *sourceIter, GtkTreeStore *destination, GtkTreeIter *parentIter) { + GtkTreeIter destIter; + + gtk_tree_store_append(destination, &destIter, parentIter); + + gint nColumns = gtk_tree_model_get_n_columns(sourceModel); + for (gint col = 0; col < nColumns; col++) { + GValue value = G_VALUE_INIT; + + gtk_tree_model_get_value(sourceModel, sourceIter, col, &value); + + gtk_tree_store_set_value(destination, &destIter, col, &value); + + g_value_unset(&value); + } + + if (gtk_tree_model_iter_has_child(sourceModel, sourceIter)) { + GtkTreeIter childIter; + gboolean validChild = gtk_tree_model_iter_children(sourceModel, &childIter, sourceIter); + while (validChild) { + yon_gtk_tree_store_copy_recursive(sourceModel, &childIter, destination, &destIter); + validChild = gtk_tree_model_iter_next(sourceModel, &childIter); + } + } +} + +void yon_gtk_tree_store_copy_full(GtkTreeStore *source, GtkTreeStore *destination) { + GtkTreeModel *sourceModel = GTK_TREE_MODEL(source); + GtkTreeIter iter; + gboolean valid; + + valid = gtk_tree_model_get_iter_first(sourceModel, &iter); + + while (valid) { + yon_gtk_tree_store_copy_recursive(sourceModel, &iter, destination, NULL); + + valid = gtk_tree_model_iter_next(sourceModel, &iter); + } +} + + + + #endif \ No newline at end of file diff --git a/source/libublsettings-gtk3.h b/source/libublsettings-gtk3.h index 1499c7c..448f428 100644 --- a/source/libublsettings-gtk3.h +++ b/source/libublsettings-gtk3.h @@ -44,6 +44,8 @@ void yon_terminal_integrated_start_shell(GtkWidget *terminal, char* command, voi #endif +#define for_iter(model,iter) for(int valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(model),iter);valid;valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(model),iter)) + /**yon_gtk_widget_set_scroll_window_for_scroll(GtkWidget *target, GtkScrollbar *scroll) * [EN] * @@ -453,4 +455,12 @@ typedef struct { } rmb_menu_window; rmb_menu_window *yon_rmb_menu_setup(GtkWidget *target_widget, int (*show_function)(void*), void *show_data, const char *button_label, const char *icon_name, GCallback function, gpointer data,...); -#endif \ No newline at end of file +#endif + +// GtkTreeStore section + +dictionary *yon_gtk_tree_store_get_children(GtkTreeStore *tree, GtkTreeIter *parent,int column); + +void yon_gtk_tree_store_fill_children(GtkTreeStore *tree, GtkTreeIter *parent, dictionary *data, int column); + +void yon_gtk_tree_store_copy_full(GtkTreeStore *source, GtkTreeStore *destination); \ No newline at end of file