static void remmina_main_expand_group_traverse(RemminaMain *remminamain, GtkTreeIter *iter) { GtkTreeModel *tree; gboolean ret; gchar *group, *filename; GtkTreeIter child; GtkTreePath *path; tree = remminamain->priv->file_model_sort; ret = TRUE; while (ret) { gtk_tree_model_get(tree, iter, GROUP_COLUMN, &group, FILENAME_COLUMN, &filename, -1); if (filename == NULL) { if (remmina_string_array_find(remminamain->priv->expanded_group, group) >= 0) { path = gtk_tree_model_get_path(tree, iter); gtk_tree_view_expand_row(GTK_TREE_VIEW(remminamain->priv->file_list), path, FALSE); gtk_tree_path_free(path); } if (gtk_tree_model_iter_children(tree, &child, iter)) { remmina_main_expand_group_traverse(remminamain, &child); } } g_free(group); g_free(filename); ret = gtk_tree_model_iter_next(tree, iter); } }
void remmina_string_array_remove(RemminaStringArray* array, const gchar *str) { gint i; i = remmina_string_array_find(array, str); if (i >= 0) { remmina_string_array_remove_index(array, i); } }
void remmina_string_array_intersect(RemminaStringArray* array, const gchar *dest_strs) { RemminaStringArray *dest_array; gint i, j; dest_array = remmina_string_array_new_from_string(dest_strs); i = 0; while (i < array->len) { j = remmina_string_array_find(dest_array, remmina_string_array_index(array, i)); if (j < 0) { remmina_string_array_remove_index(array, i); continue; } i++; } remmina_string_array_free(dest_array); }
gchar* remmina_file_manager_get_groups(void) { gchar dirname[MAX_PATH_LEN]; gchar filename[MAX_PATH_LEN]; GDir* dir; const gchar* name; RemminaFile* remminafile; RemminaStringArray* array; const gchar* group; gchar* groups; array = remmina_string_array_new(); g_snprintf(dirname, MAX_PATH_LEN, "%s/.remmina", g_get_home_dir()); dir = g_dir_open(dirname, 0, NULL); if (dir == NULL) return 0; while ((name = g_dir_read_name(dir)) != NULL) { if (!g_str_has_suffix(name, ".remmina")) continue; g_snprintf(filename, MAX_PATH_LEN, "%s/%s", dirname, name); remminafile = remmina_file_load(filename); group = remmina_file_get_string(remminafile, "group"); if (group && remmina_string_array_find(array, group) < 0) { remmina_string_array_add(array, group); } remmina_file_free(remminafile); } g_dir_close(dir); remmina_string_array_sort(array); groups = remmina_string_array_to_string(array); remmina_string_array_free(array); return groups; }