diff options
Diffstat (limited to 'walls_model.c')
-rw-r--r-- | walls_model.c | 50 |
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; +} |