summaryrefslogtreecommitdiff
path: root/walls_model.c
diff options
context:
space:
mode:
authorJon Bergli Heier <snakebite@jvnv.net>2009-12-22 23:08:43 +0100
committerJon Bergli Heier <snakebite@jvnv.net>2009-12-22 23:08:43 +0100
commit925fcf201ae850da169516a4c2a9102f1e3a0df4 (patch)
treed7b2e0851a8ab4131f9bd8e4f47460b425b61ba4 /walls_model.c
parentd7427af59c06fe1186b97998df4f0f158e0ef818 (diff)
Viewing images in the image box now works.
Images are resized to fit in the image box on the right hand side. No further resizing is currently done unless the image is reloaded.
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;
+}