diff --git a/src/nautilus-bookmark.c b/src/nautilus-bookmark.c index ba56a97e5b2e9c752d56299c81f2d5b0099ed3c5..f016eee37f5331279e1d3e058de3251e86c0d79a 100644 --- a/src/nautilus-bookmark.c +++ b/src/nautilus-bookmark.c @@ -168,36 +168,6 @@ bookmark_file_changed_callback (NautilusFile *file, } } -static void -apply_warning_emblem (GIcon **base, - gboolean symbolic) -{ -#if 0 && EMBLEMS_NEEDS_GTK4_REIMPLEMENTATION - GIcon *emblemed_icon; - g_autoptr (GIcon) warning = NULL; - g_autoptr (GEmblem) emblem = NULL; - - if (symbolic) - { - warning = g_themed_icon_new ("dialog-warning-symbolic"); - } - else - { - warning = g_themed_icon_new ("dialog-warning"); - } - - emblem = g_emblem_new (warning); - emblemed_icon = g_emblemed_icon_new (*base, emblem); - - g_object_unref (*base); - - *base = emblemed_icon; -#else - /* GTK 4 doesn't draw emblemed icons. Use the warning icon itself. */ - g_set_object (base, g_themed_icon_new (symbolic ? "dialog-warning-symbolic" : "dialog-warning")); -#endif -} - gboolean nautilus_bookmark_get_is_builtin (NautilusBookmark *bookmark) { @@ -303,7 +273,13 @@ nautilus_bookmark_set_icon_to_default (NautilusBookmark *bookmark) g_autoptr (GIcon) icon = NULL; g_autoptr (GIcon) symbolic_icon = NULL; - if (g_file_is_native (bookmark->location)) + if (!bookmark->exists) + { + DEBUG ("%s: file does not exist, set warning icon", nautilus_bookmark_get_name (bookmark)); + symbolic_icon = g_themed_icon_new ("dialog-warning-symbolic"); + icon = g_themed_icon_new ("dialog-warning"); + } + else if (g_file_is_native (bookmark->location)) { symbolic_icon = get_native_icon (bookmark, TRUE); icon = get_native_icon (bookmark, FALSE); @@ -314,14 +290,6 @@ nautilus_bookmark_set_icon_to_default (NautilusBookmark *bookmark) icon = g_themed_icon_new (NAUTILUS_ICON_FULLCOLOR_FOLDER_REMOTE); } - if (!bookmark->exists) - { - DEBUG ("%s: file does not exist, add emblem", nautilus_bookmark_get_name (bookmark)); - - apply_warning_emblem (&icon, FALSE); - apply_warning_emblem (&symbolic_icon, TRUE); - } - DEBUG ("%s: setting icon to default", nautilus_bookmark_get_name (bookmark)); g_object_set (bookmark, diff --git a/src/nautilus-file.c b/src/nautilus-file.c index 5bdc0e125f73292b2f7ffe5b1adf9c2c05d6d8b5..a173f63d960adfa9ab0de9065730c03591684bac 100644 --- a/src/nautilus-file.c +++ b/src/nautilus-file.c @@ -3390,7 +3390,6 @@ compare_by_directory_name (NautilusFile *file_1, file_2->details->directory_name_collation_key); } -#if 0 && EMBLEMS_NEEDS_GTK4_REIMPLEMENTATION static GList * prepend_automatic_keywords (NautilusFile *file, GList *names) @@ -3428,7 +3427,6 @@ prepend_automatic_keywords (NautilusFile *file, return names; } -#endif static int compare_by_type (NautilusFile *file_1, @@ -4850,7 +4848,6 @@ nautilus_is_video_file (NautilusFile *file) return FALSE; } -#if 0 && EMBLEMS_NEEDS_GTK4_REIMPLEMENTATION static GList * sort_keyword_list_and_remove_duplicates (GList *keywords) { @@ -4958,7 +4955,7 @@ nautilus_file_get_keywords (NautilusFile *file) metadata_strv = nautilus_file_get_metadata_list (file, NAUTILUS_METADATA_KEY_EMBLEMS); /* Convert array to list */ - for (gint i = 0; metadata_strv[i] != NULL; i++) + for (gint i = 0; metadata_strv != NULL && metadata_strv[i] != NULL; i++) { metadata_keywords = g_list_prepend (metadata_keywords, metadata_strv[i]); } @@ -4978,10 +4975,10 @@ nautilus_file_get_keywords (NautilusFile *file) * in canonical order. * @file: NautilusFile representing the file in question. * - * Returns: A list of emblem names. + * Returns: (transfer full) (element-type GIcon): A list of emblem names. * **/ -static GList * +GList * nautilus_file_get_emblem_icons (NautilusFile *file) { GList *keywords, *l; @@ -5023,7 +5020,6 @@ nautilus_file_get_emblem_icons (NautilusFile *file) return icons; } -#endif static void prepend_icon_name (const char *name, @@ -5032,53 +5028,6 @@ prepend_icon_name (const char *name, g_themed_icon_prepend_name (icon, name); } -static void -apply_emblems_to_icon (NautilusFile *file, - GIcon **icon, - NautilusFileIconFlags flags) -{ -#if 0 && EMBLEMS_NEEDS_GTK4_REIMPLEMENTATION - GIcon *emblemed_icon = NULL; - - g_autolist (GIcon) emblems = NULL; - - emblems = nautilus_file_get_emblem_icons (file); - - for (GList *l = emblems; l != NULL; l = l->next) - { - g_autoptr (GEmblem) emblem = NULL; - - if (g_icon_equal (l->data, *icon)) - { - continue; - } - - emblem = g_emblem_new (l->data); - - if (emblemed_icon == NULL) - { - emblemed_icon = g_emblemed_icon_new (*icon, emblem); - } - else - { - g_emblemed_icon_add_emblem (G_EMBLEMED_ICON (emblemed_icon), emblem); - } - - if (emblemed_icon != NULL && - (flags & NAUTILUS_FILE_ICON_FLAGS_USE_ONE_EMBLEM)) - { - break; - } - } - - if (emblemed_icon != NULL) - { - g_object_unref (*icon); - *icon = emblemed_icon; - } -#endif -} - GIcon * nautilus_file_get_gicon (NautilusFile *file, NautilusFileIconFlags flags) @@ -5117,8 +5066,7 @@ nautilus_file_get_gicon (NautilusFile *file, if (((flags & NAUTILUS_FILE_ICON_FLAGS_FOR_DRAG_ACCEPT) || (flags & NAUTILUS_FILE_ICON_FLAGS_FOR_OPEN_FOLDER) || - (flags & NAUTILUS_FILE_ICON_FLAGS_USE_MOUNT_ICON) || - (flags & NAUTILUS_FILE_ICON_FLAGS_USE_EMBLEMS)) && + (flags & NAUTILUS_FILE_ICON_FLAGS_USE_MOUNT_ICON)) && G_IS_THEMED_ICON (file->details->icon)) { names = g_themed_icon_get_names (G_THEMED_ICON (file->details->icon)); @@ -5179,11 +5127,6 @@ out: icon = g_object_ref (get_default_file_icon ()); } - if (flags & NAUTILUS_FILE_ICON_FLAGS_USE_EMBLEMS) - { - apply_emblems_to_icon (file, &icon, flags); - } - return icon; } @@ -5290,8 +5233,6 @@ nautilus_file_get_thumbnail_icon (NautilusFile *file, if (gicon != NULL) { - apply_emblems_to_icon (file, &gicon, flags); - if (g_icon_equal (gicon, G_ICON (pixbuf))) { icon = nautilus_icon_info_new_for_pixbuf (pixbuf, scale); @@ -5342,11 +5283,6 @@ nautilus_file_get_icon (NautilusFile *file, gicon = get_custom_icon (file); if (gicon != NULL) { - if (flags & NAUTILUS_FILE_ICON_FLAGS_USE_EMBLEMS) - { - apply_emblems_to_icon (file, &gicon, flags); - } - icon = nautilus_icon_info_lookup (gicon, size, scale); g_object_unref (gicon); diff --git a/src/nautilus-file.h b/src/nautilus-file.h index 713ef7349c2de92db11bbf41efe20be37dfe2945..088d57d4be45a277f050fe7813f288edee5f1595 100644 --- a/src/nautilus-file.h +++ b/src/nautilus-file.h @@ -87,9 +87,6 @@ typedef enum { NAUTILUS_FILE_ICON_FLAGS_FORCE_THUMBNAIL_SIZE = (1<<4), /* uses the icon of the mount if present */ NAUTILUS_FILE_ICON_FLAGS_USE_MOUNT_ICON = (1<<5), - /* render emblems */ - NAUTILUS_FILE_ICON_FLAGS_USE_EMBLEMS = (1<<6), - NAUTILUS_FILE_ICON_FLAGS_USE_ONE_EMBLEM = (1<<7) } NautilusFileIconFlags; #define NAUTILUS_THUMBNAIL_MINIMUM_ICON_SIZE 32 @@ -482,6 +479,8 @@ GdkPaintable * nautilus_file_get_icon_paintable (Nautilu int scale, NautilusFileIconFlags flags); +GList * nautilus_file_get_emblem_icons (NautilusFile *file); + /* Whether the file should open inside a view */ gboolean nautilus_file_opens_in_view (NautilusFile *file); /* Thumbnailing handling */ diff --git a/src/nautilus-grid-cell.c b/src/nautilus-grid-cell.c index 28fc43622b2307126b7ffa42e1c7bee85d47b6cd..383d85b036182fdfbf9bda3f096254cdfb281f39 100644 --- a/src/nautilus-grid-cell.c +++ b/src/nautilus-grid-cell.c @@ -16,6 +16,7 @@ struct _NautilusGridCell GtkWidget *fixed_height_box; GtkWidget *icon; + GtkWidget *emblems_box; GtkWidget *label; GtkWidget *first_caption; GtkWidget *second_caption; @@ -24,8 +25,6 @@ struct _NautilusGridCell G_DEFINE_TYPE (NautilusGridCell, nautilus_grid_cell, NAUTILUS_TYPE_VIEW_CELL) -#define EXTRA_WIDTH_FOR_TEXT 36 - static void update_icon (NautilusGridCell *self) { @@ -43,9 +42,7 @@ update_icon (NautilusGridCell *self) file = nautilus_view_item_get_file (item); icon_size = nautilus_view_item_get_icon_size (item); flags = NAUTILUS_FILE_ICON_FLAGS_USE_THUMBNAILS | - NAUTILUS_FILE_ICON_FLAGS_FORCE_THUMBNAIL_SIZE | - NAUTILUS_FILE_ICON_FLAGS_USE_EMBLEMS | - NAUTILUS_FILE_ICON_FLAGS_USE_ONE_EMBLEM; + NAUTILUS_FILE_ICON_FLAGS_FORCE_THUMBNAIL_SIZE; g_object_get (item, "drag-accept", &drag_accept, NULL); if (drag_accept) @@ -59,12 +56,6 @@ update_icon (NautilusGridCell *self) /* Set the same height and width for all icons regardless of aspect ratio. */ gtk_widget_set_size_request (self->fixed_height_box, icon_size, icon_size); - if (icon_size < NAUTILUS_GRID_ICON_SIZE_EXTRA_LARGE) - { - int extra_margins = 0.5 * EXTRA_WIDTH_FOR_TEXT; - gtk_widget_set_margin_start (self->fixed_height_box, extra_margins); - gtk_widget_set_margin_end (self->fixed_height_box, extra_margins); - } style_context = gtk_widget_get_style_context (self->icon); thumbnail_path = nautilus_file_get_thumbnail_path (file); if (thumbnail_path != NULL && @@ -110,6 +101,33 @@ update_captions (NautilusGridCell *self) } } +static void +update_emblems (NautilusGridCell *self) +{ + NautilusViewItem *item; + NautilusFile *file; + GtkWidget *child; + g_autolist (GIcon) emblems = NULL; + + item = nautilus_view_cell_get_item (NAUTILUS_VIEW_CELL (self)); + g_return_if_fail (item != NULL); + file = nautilus_view_item_get_file (item); + + /* Remove old emblems. */ + while ((child = gtk_widget_get_first_child (self->emblems_box)) != NULL) + { + gtk_box_remove (GTK_BOX (self->emblems_box), child); + } + + emblems = nautilus_file_get_emblem_icons (file); + for (GList *l = emblems; l != NULL; l = l->next) + { + gtk_box_append (GTK_BOX (self->emblems_box), + gtk_image_new_from_gicon (l->data)); + } +} + + static void on_file_changed (NautilusGridCell *self) { @@ -121,6 +139,7 @@ on_file_changed (NautilusGridCell *self) file = nautilus_view_item_get_file (item); update_icon (self); + update_emblems (self); gtk_label_set_text (GTK_LABEL (self->label), nautilus_file_get_display_name (file)); @@ -179,6 +198,7 @@ nautilus_grid_cell_class_init (NautilusGridCellClass *klass) gtk_widget_class_bind_template_child (widget_class, NautilusGridCell, fixed_height_box); gtk_widget_class_bind_template_child (widget_class, NautilusGridCell, icon); + gtk_widget_class_bind_template_child (widget_class, NautilusGridCell, emblems_box); gtk_widget_class_bind_template_child (widget_class, NautilusGridCell, label); gtk_widget_class_bind_template_child (widget_class, NautilusGridCell, first_caption); gtk_widget_class_bind_template_child (widget_class, NautilusGridCell, second_caption); diff --git a/src/nautilus-name-cell.c b/src/nautilus-name-cell.c index 55574cb0a7f7b80f0d4c0235a68835b6a238e016..1a0720ea622bd4063e970d81f765b801897bf0ec 100644 --- a/src/nautilus-name-cell.c +++ b/src/nautilus-name-cell.c @@ -19,6 +19,7 @@ struct _NautilusNameCell GtkWidget *fixed_height_box; GtkWidget *icon; GtkWidget *label; + GtkWidget *emblems_box; GtkWidget *snippet; GtkWidget *path; @@ -149,9 +150,7 @@ update_icon (NautilusNameCell *self) file = nautilus_view_item_get_file (item); icon_size = nautilus_view_item_get_icon_size (item); flags = NAUTILUS_FILE_ICON_FLAGS_USE_THUMBNAILS | - NAUTILUS_FILE_ICON_FLAGS_FORCE_THUMBNAIL_SIZE | - NAUTILUS_FILE_ICON_FLAGS_USE_EMBLEMS | - NAUTILUS_FILE_ICON_FLAGS_USE_ONE_EMBLEM; + NAUTILUS_FILE_ICON_FLAGS_FORCE_THUMBNAIL_SIZE; g_object_get (item, "drag-accept", &drag_accept, NULL); if (drag_accept) @@ -192,11 +191,38 @@ update_icon (NautilusNameCell *self) } } +static void +update_emblems (NautilusNameCell *self) +{ + NautilusViewItem *item; + NautilusFile *file; + GtkWidget *child; + g_autolist (GIcon) emblems = NULL; + + item = nautilus_view_cell_get_item (NAUTILUS_VIEW_CELL (self)); + g_return_if_fail (item != NULL); + file = nautilus_view_item_get_file (item); + + /* Remove old emblems. */ + while ((child = gtk_widget_get_first_child (self->emblems_box)) != NULL) + { + gtk_box_remove (GTK_BOX (self->emblems_box), child); + } + + emblems = nautilus_file_get_emblem_icons (file); + for (GList *l = emblems; l != NULL; l = l->next) + { + gtk_box_append (GTK_BOX (self->emblems_box), + gtk_image_new_from_gicon (l->data)); + } +} + static void on_file_changed (NautilusNameCell *self) { update_icon (self); update_labels (self); + update_emblems (self); } static void @@ -291,6 +317,7 @@ nautilus_name_cell_class_init (NautilusNameCellClass *klass) gtk_widget_class_bind_template_child (widget_class, NautilusNameCell, fixed_height_box); gtk_widget_class_bind_template_child (widget_class, NautilusNameCell, icon); gtk_widget_class_bind_template_child (widget_class, NautilusNameCell, label); + gtk_widget_class_bind_template_child (widget_class, NautilusNameCell, emblems_box); gtk_widget_class_bind_template_child (widget_class, NautilusNameCell, snippet); gtk_widget_class_bind_template_child (widget_class, NautilusNameCell, path); } diff --git a/src/resources/ui/nautilus-grid-cell.ui b/src/resources/ui/nautilus-grid-cell.ui index 2a9417aa86f62f83bc8b642ca2abfb318e170413..63ec651c2c2a70e1471224db5ba73dec7c51ad1c 100644 --- a/src/resources/ui/nautilus-grid-cell.ui +++ b/src/resources/ui/nautilus-grid-cell.ui @@ -11,8 +11,9 @@ 6 - vertical + horizontal center + 18 0 @@ -27,6 +28,15 @@ + + + vertical + end + 6 + 2 + 16 + + diff --git a/src/resources/ui/nautilus-name-cell.ui b/src/resources/ui/nautilus-name-cell.ui index 366e6e370f2ab587a41ac48faebf129ffea62b95..4313b92d6768915cf04ada0481913e0779285912 100644 --- a/src/resources/ui/nautilus-name-cell.ui +++ b/src/resources/ui/nautilus-name-cell.ui @@ -52,16 +52,31 @@ - - middle - 1 - -1 - False - word-char - start - - - + + horizontal + fill + True + 6 + + + middle + 1 + -1 + False + word-char + start + + + + + + + + horizontal + start + 6 + +