summaryrefslogtreecommitdiff
path: root/walls_model.c
diff options
context:
space:
mode:
Diffstat (limited to 'walls_model.c')
-rw-r--r--walls_model.c50
1 files changed, 43 insertions, 7 deletions
diff --git a/walls_model.c b/walls_model.c
index f7f9bb0..c2e7ef6 100644
--- a/walls_model.c
+++ b/walls_model.c
@@ -154,7 +154,7 @@ inline static void fill_dir(WallsModelRecord *record) {
dir = &g_array_index(array, struct directory_t, i);
temp.type = WALLS_MODEL_TYPE_DIR;
- temp.dir.name = g_path_get_basename(dir->name);
+ temp.dir.name = g_strdup(dir->name);
temp.dir.dirid = dir->dirid;
temp.parent = record;
temp.children = NULL;
@@ -175,7 +175,7 @@ inline static void fill_dir(WallsModelRecord *record) {
wall = &g_array_index(array, struct wallpaper_t, i);
temp.type = WALLS_MODEL_TYPE_WALL;
- temp.wall.filepath = g_path_get_basename(wall->filepath);
+ temp.wall.filepath = g_strdup(wall->filepath);
temp.wall.id = wall->id;
temp.wall.size = wall->size;
temp.wall.width = wall->width;
@@ -260,11 +260,11 @@ static void walls_model_get_value(GtkTreeModel *tree_model, GtkTreeIter *iter, g
WallsModelRecord *record;
WallsModel *walls_model;
- g_return_if_fail(MODEL_IS_WALLS(walls_model));
+ g_return_if_fail(MODEL_IS_WALLS(tree_model));
g_return_if_fail(iter != NULL);
- g_return_if_fail(column < WALLS_MODEL(walls_model)->n_columns);
+ g_return_if_fail(column < WALLS_MODEL(tree_model)->n_columns);
- g_value_init(value, WALLS_MODEL(walls_model)->column_types[column]);
+ g_value_init(value, WALLS_MODEL(tree_model)->column_types[column]);
walls_model = WALLS_MODEL(tree_model);
@@ -277,7 +277,10 @@ static void walls_model_get_value(GtkTreeModel *tree_model, GtkTreeIter *iter, g
if(record->type == WALLS_MODEL_TYPE_DIR) {
if(column == WALLS_MODEL_COL_NAME) {
- g_value_set_string(value, record->dir.name);
+ if(record->parent == NULL)
+ g_value_set_string(value, record->dir.name);
+ else
+ g_value_set_string_take_ownership(value, g_path_get_basename(record->dir.name));
} else {
g_value_set_string(value, "");
}
@@ -286,7 +289,7 @@ static void walls_model_get_value(GtkTreeModel *tree_model, GtkTreeIter *iter, g
switch(column) {
case WALLS_MODEL_COL_NAME:
- g_value_set_string(value, record->wall.filepath);
+ g_value_set_string_take_ownership(value, g_path_get_basename(record->wall.filepath));
break;
case WALLS_MODEL_COL_SIZE:
g_value_set_string_take_ownership(value, g_strdup_printf("%d", record->wall.size));
@@ -477,3 +480,36 @@ WallsModel *walls_model_new() {
return new_walls_model;
}
+
+static void walls_model_get_record(GtkTreeModel *tree_model, GtkTreeIter *iter, void **data) {
+ WallsModel *walls_model;
+ WallsModelRecord *record;
+
+ g_assert(MODEL_IS_WALLS(tree_model));
+ g_assert(iter != NULL);
+
+ walls_model = WALLS_MODEL(tree_model);
+ record = (WallsModelRecord*)iter->user_data;
+ *data = (void*)(&record->dir);
+}
+
+void walls_model_get_dir_record(GtkTreeModel *tree_model, GtkTreeIter *iter, struct directory_t **dir) {
+ walls_model_get_record(tree_model, iter, (void**)dir);
+}
+
+void walls_model_get_wall_record(GtkTreeModel *tree_model, GtkTreeIter *iter, struct wallpaper_t **wall) {
+ walls_model_get_record(tree_model, iter, (void**)wall);
+}
+
+guint walls_model_get_record_type(GtkTreeModel *tree_model, GtkTreeIter *iter) {
+ WallsModel *walls_model;
+ WallsModelRecord *record;
+
+ g_assert(MODEL_IS_WALLS(tree_model));
+ g_assert(iter != NULL);
+
+ walls_model = WALLS_MODEL(tree_model);
+ record = (WallsModelRecord*)iter->user_data;
+
+ return record->type;
+}