tint2conf: Better theme management

This commit is contained in:
o9000
2015-07-12 17:01:44 +02:00
parent 04fe80b498
commit 90805cb526
4 changed files with 127 additions and 17 deletions

View File

@@ -19,6 +19,7 @@
#include "main.h"
#include "strnatcmp.h"
#include "theme_view.h"
// The data columns that we export via the tree model interface
@@ -27,6 +28,11 @@ GtkListStore *g_store;
int g_width_list, g_height_list;
GtkCellRenderer *g_renderer;
gint theme_name_compare(GtkTreeModel *model,
GtkTreeIter *a,
GtkTreeIter *b,
gpointer user_data);
GtkWidget *create_view()
{
GtkTreeViewColumn *col;
@@ -69,21 +75,50 @@ GtkWidget *create_view()
GtkTreeSortable *sortable;
sortable = GTK_TREE_SORTABLE(g_store);
gtk_tree_sortable_set_sort_column_id(sortable, COL_THEME_FILE, GTK_SORT_ASCENDING);
gtk_tree_sortable_set_sort_func(sortable, COL_THEME_FILE, theme_name_compare, NULL, NULL);
return view;
}
gint theme_name_compare(GtkTreeModel *model,
GtkTreeIter *a,
GtkTreeIter *b,
gpointer user_data)
{
gchar *path_a, *path_b;
gtk_tree_model_get(model, a, COL_THEME_FILE, &path_a, -1);
gtk_tree_model_get(model, b, COL_THEME_FILE, &path_b, -1);
gchar *name_a = path_a;
gchar *p;
for (p = name_a; *p; p++) {
if (*p == '/')
name_a = p + 1;
}
gchar *name_b = path_b;
for (p = name_b; *p; p++) {
if (*p == '/')
name_b = p + 1;
}
if (g_str_equal(name_a, name_b))
return 0;
if (g_str_equal(name_a, "tint2rc"))
return -1;
if (g_str_equal(name_b, "tint2rc"))
return 1;
gint result = strnatcasecmp(name_a, name_b);
g_free(path_a);
g_free(path_b);
return result;
}
void custom_list_append(const gchar *name)
void custom_list_append(const gchar *path)
{
GtkTreeIter iter;
gtk_list_store_append(g_store, &iter);
gtk_list_store_set(g_store, &iter, COL_THEME_FILE, name, -1);
gtk_list_store_set(g_store, &iter, COL_THEME_FILE, path, -1);
gchar *b, *n;
b = strrchr(name, '/');
n = g_strdup(b+1);
gtk_list_store_set(g_store, &iter, COL_THEME_NAME, n, -1);
gchar *name = g_strdup(strrchr(path, '/') + 1);
gtk_list_store_set(g_store, &iter, COL_THEME_NAME, name, -1);
}