From 6986f1b631d2979ce0af28dc138537eed1a7b26b Mon Sep 17 00:00:00 2001 From: Jasmine Hassan Date: Thu, 18 Oct 2012 20:24:12 +0200 Subject: [list-model] use GEmblemedIcon to render emblems Use GEmblemedIcon instead of other columns to render emblems. http://git.gnome.org/browse/nautilus/commit/?id=a187f8a4cdcc46f56c0cb03c31b9b7c92c747a88&context=6 --- src/file-manager/fm-list-model.c | 149 +++++++++++++-------------------------- 1 file changed, 49 insertions(+), 100 deletions(-) (limited to 'src/file-manager/fm-list-model.c') diff --git a/src/file-manager/fm-list-model.c b/src/file-manager/fm-list-model.c index f7288fe2..b814a313 100644 --- a/src/file-manager/fm-list-model.c +++ b/src/file-manager/fm-list-model.c @@ -166,13 +166,6 @@ fm_list_model_get_column_type (GtkTreeModel *tree_model, int index) case FM_LIST_MODEL_LARGE_ICON_COLUMN: case FM_LIST_MODEL_LARGER_ICON_COLUMN: case FM_LIST_MODEL_LARGEST_ICON_COLUMN: - case FM_LIST_MODEL_SMALLEST_EMBLEM_COLUMN: - case FM_LIST_MODEL_SMALLER_EMBLEM_COLUMN: - case FM_LIST_MODEL_SMALL_EMBLEM_COLUMN: - case FM_LIST_MODEL_STANDARD_EMBLEM_COLUMN: - case FM_LIST_MODEL_LARGE_EMBLEM_COLUMN: - case FM_LIST_MODEL_LARGER_EMBLEM_COLUMN: - case FM_LIST_MODEL_LARGEST_EMBLEM_COLUMN: return GDK_TYPE_PIXBUF; case FM_LIST_MODEL_FILE_NAME_IS_EDITABLE_COLUMN: return G_TYPE_BOOLEAN; @@ -277,10 +270,12 @@ fm_list_model_get_value (GtkTreeModel *tree_model, GtkTreeIter *iter, int column CajaFile *file; char *str; GdkPixbuf *icon, *rendered_icon; + GIcon *gicon, *emblemed_icon, *emblem_icon; + CajaIconInfo *icon_info; + GEmblem *emblem; + GList *emblem_icons, *l; int icon_size; - guint emblem_size; CajaZoomLevel zoom_level; - GList *emblem_pixbufs; CajaFile *parent_file; char *emblems_to_ignore[3]; int i; @@ -344,7 +339,51 @@ fm_list_model_get_value (GtkTreeModel *tree_model, GtkTreeIter *iter, int column } } - icon = caja_file_get_icon_pixbuf (file, icon_size, TRUE, flags); + gicon = caja_file_get_gicon (file, flags); + + /* render emblems with GEmblemedIcon */ + parent_file = caja_file_get_parent (file); + i = 0; + emblems_to_ignore[i++] = CAJA_FILE_EMBLEM_NAME_TRASH; + if (parent_file) { + if (!caja_file_can_write (parent_file)) { + emblems_to_ignore[i++] = CAJA_FILE_EMBLEM_NAME_CANT_WRITE; + } + caja_file_unref (parent_file); + } + emblems_to_ignore[i++] = NULL; + + emblem = NULL; + emblem_icons = caja_file_get_emblem_icons (file, + emblems_to_ignore); + + if (emblem_icons != NULL) { + emblem_icon = emblem_icons->data; + emblem = g_emblem_new (emblem_icon); + emblemed_icon = g_emblemed_icon_new (gicon, emblem); + + g_object_unref (emblem); + + for (l = emblem_icons->next; l != NULL; l = l->next) { + emblem_icon = l->data; + emblem = g_emblem_new (emblem_icon); + g_emblemed_icon_add_emblem + (G_EMBLEMED_ICON (emblemed_icon), emblem); + + g_object_unref (emblem); + } + + eel_g_object_list_free (emblem_icons); + + g_object_unref (gicon); + gicon = emblemed_icon; + } + + icon_info = caja_icon_info_lookup (gicon, icon_size); + icon = caja_icon_info_get_pixbuf_at_size (icon_info, icon_size); + + g_object_unref (icon_info); + g_object_unref (gicon); if (model->details->highlight_files != NULL && g_list_find_custom (model->details->highlight_files, @@ -363,48 +402,6 @@ fm_list_model_get_value (GtkTreeModel *tree_model, GtkTreeIter *iter, int column g_object_unref (icon); } break; - case FM_LIST_MODEL_SMALLEST_EMBLEM_COLUMN: - case FM_LIST_MODEL_SMALLER_EMBLEM_COLUMN: - case FM_LIST_MODEL_SMALL_EMBLEM_COLUMN: - case FM_LIST_MODEL_STANDARD_EMBLEM_COLUMN: - case FM_LIST_MODEL_LARGE_EMBLEM_COLUMN: - case FM_LIST_MODEL_LARGER_EMBLEM_COLUMN: - case FM_LIST_MODEL_LARGEST_EMBLEM_COLUMN: - g_value_init (value, GDK_TYPE_PIXBUF); - - if (file != NULL) - { - parent_file = caja_file_get_parent (file); - i = 0; - emblems_to_ignore[i++] = CAJA_FILE_EMBLEM_NAME_TRASH; - if (parent_file) - { - if (!caja_file_can_write (parent_file)) - { - emblems_to_ignore[i++] = CAJA_FILE_EMBLEM_NAME_CANT_WRITE; - } - caja_file_unref (parent_file); - } - emblems_to_ignore[i++] = NULL; - - zoom_level = fm_list_model_get_zoom_level_from_emblem_column_id (column); - icon_size = caja_get_icon_size_for_zoom_level (zoom_level); - emblem_size = caja_icon_get_emblem_size_for_icon_size (icon_size); - if (emblem_size != 0) - { - emblem_pixbufs = caja_file_get_emblem_pixbufs (file, - emblem_size, - TRUE, - emblems_to_ignore); - if (emblem_pixbufs != NULL) - { - icon = emblem_pixbufs->data; - g_value_set_object (value, icon); - } - eel_gdk_pixbuf_list_free (emblem_pixbufs); - } - } - break; case FM_LIST_MODEL_FILE_NAME_IS_EDITABLE_COLUMN: g_value_init (value, G_TYPE_BOOLEAN); @@ -1555,54 +1552,6 @@ fm_list_model_get_column_id_from_zoom_level (CajaZoomLevel zoom_level) g_return_val_if_reached (FM_LIST_MODEL_STANDARD_ICON_COLUMN); } -CajaZoomLevel -fm_list_model_get_zoom_level_from_emblem_column_id (int column) -{ - switch (column) - { - case FM_LIST_MODEL_SMALLEST_EMBLEM_COLUMN: - return CAJA_ZOOM_LEVEL_SMALLEST; - case FM_LIST_MODEL_SMALLER_EMBLEM_COLUMN: - return CAJA_ZOOM_LEVEL_SMALLER; - case FM_LIST_MODEL_SMALL_EMBLEM_COLUMN: - return CAJA_ZOOM_LEVEL_SMALL; - case FM_LIST_MODEL_STANDARD_EMBLEM_COLUMN: - return CAJA_ZOOM_LEVEL_STANDARD; - case FM_LIST_MODEL_LARGE_EMBLEM_COLUMN: - return CAJA_ZOOM_LEVEL_LARGE; - case FM_LIST_MODEL_LARGER_EMBLEM_COLUMN: - return CAJA_ZOOM_LEVEL_LARGER; - case FM_LIST_MODEL_LARGEST_EMBLEM_COLUMN: - return CAJA_ZOOM_LEVEL_LARGEST; - } - - g_return_val_if_reached (CAJA_ZOOM_LEVEL_STANDARD); -} - -int -fm_list_model_get_emblem_column_id_from_zoom_level (CajaZoomLevel zoom_level) -{ - switch (zoom_level) - { - case CAJA_ZOOM_LEVEL_SMALLEST: - return FM_LIST_MODEL_SMALLEST_EMBLEM_COLUMN; - case CAJA_ZOOM_LEVEL_SMALLER: - return FM_LIST_MODEL_SMALLER_EMBLEM_COLUMN; - case CAJA_ZOOM_LEVEL_SMALL: - return FM_LIST_MODEL_SMALL_EMBLEM_COLUMN; - case CAJA_ZOOM_LEVEL_STANDARD: - return FM_LIST_MODEL_STANDARD_EMBLEM_COLUMN; - case CAJA_ZOOM_LEVEL_LARGE: - return FM_LIST_MODEL_LARGE_EMBLEM_COLUMN; - case CAJA_ZOOM_LEVEL_LARGER: - return FM_LIST_MODEL_LARGER_EMBLEM_COLUMN; - case CAJA_ZOOM_LEVEL_LARGEST: - return FM_LIST_MODEL_LARGEST_EMBLEM_COLUMN; - } - - g_return_val_if_reached (FM_LIST_MODEL_STANDARD_EMBLEM_COLUMN); -} - void fm_list_model_set_drag_view (FMListModel *model, GtkTreeView *view, -- cgit v1.2.1 From 7a42b9b076d6b831c89bd0b9e996368c1c95aef3 Mon Sep 17 00:00:00 2001 From: Jasmine Hassan Date: Thu, 18 Oct 2012 10:30:31 +0200 Subject: [all] use g_list_free() and g_strcmp0 instead of eel functions Was: general: use g_list_free_full() instead of eel functions http://git.gnome.org/browse/nautilus/commit/?id=5e669515fd7f760382e6b7aa1449734a35a2d7f4 . Instead of g_list_free_full(), we use g_list_foreach and g_list_free() to avoid unnecessary glib dependency bump to 2.28 --- src/file-manager/fm-list-model.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) (limited to 'src/file-manager/fm-list-model.c') diff --git a/src/file-manager/fm-list-model.c b/src/file-manager/fm-list-model.c index b814a313..f6ba0168 100644 --- a/src/file-manager/fm-list-model.c +++ b/src/file-manager/fm-list-model.c @@ -29,8 +29,6 @@ #include #include -#include -#include #include #include #include @@ -373,7 +371,8 @@ fm_list_model_get_value (GtkTreeModel *tree_model, GtkTreeIter *iter, int column g_object_unref (emblem); } - eel_g_object_list_free (emblem_icons); + g_list_foreach (emblem_icons, (GFunc) g_object_unref, NULL); + g_list_free(emblem_icons); g_object_unref (gicon); gicon = emblemed_icon; @@ -679,7 +678,8 @@ fm_list_model_get_first_iter_for_file (FMListModel *model, res = TRUE; *iter = *(GtkTreeIter *)list->data; } - eel_g_list_free_deep (list); + g_list_foreach(list, (GFunc) g_free, NULL); + g_list_free(list); return res; } @@ -1806,7 +1806,8 @@ refresh_row (gpointer data, gtk_tree_path_free (path); } - eel_g_list_free_deep (iters); + g_list_foreach(iters, (GFunc) g_free, NULL); + g_list_free(iters); } void -- cgit v1.2.1