static NautilusIconInfo * nautilus_canvas_view_container_get_icon_images (NautilusCanvasContainer *container, NautilusCanvasIconData *data, int size, gboolean for_drag_accept) { NautilusCanvasView *canvas_view; NautilusFile *file; NautilusFileIconFlags flags; NautilusIconInfo *icon_info; gint scale; file = (NautilusFile *) data; g_assert (NAUTILUS_IS_FILE (file)); canvas_view = get_canvas_view (container); g_return_val_if_fail (canvas_view != NULL, NULL); flags = NAUTILUS_FILE_ICON_FLAGS_USE_EMBLEMS | NAUTILUS_FILE_ICON_FLAGS_USE_THUMBNAILS; if (for_drag_accept) { flags |= NAUTILUS_FILE_ICON_FLAGS_FOR_DRAG_ACCEPT; } scale = gtk_widget_get_scale_factor (GTK_WIDGET (canvas_view)); icon_info = nautilus_file_get_icon (file, size, scale, flags); return icon_info; }
static void nautilus_canvas_view_container_unfreeze_updates (NautilusCanvasContainer *container) { NautilusCanvasView *canvas_view; canvas_view = get_canvas_view (container); g_return_if_fail (canvas_view != NULL); nautilus_view_unfreeze_updates (NAUTILUS_VIEW (canvas_view)); }
static int nautilus_canvas_view_container_compare_icons (NautilusCanvasContainer *container, NautilusCanvasIconData *icon_a, NautilusCanvasIconData *icon_b) { NautilusCanvasView *canvas_view; canvas_view = get_canvas_view (container); g_return_val_if_fail (canvas_view != NULL, 0); /* Type unsafe comparisons for performance */ return nautilus_canvas_view_compare_files (canvas_view, (NautilusFile *)icon_a, (NautilusFile *)icon_b); }
static int nautilus_canvas_view_container_compare_icons (NautilusCanvasContainer *container, NautilusCanvasIconData *icon_a, NautilusCanvasIconData *icon_b) { NautilusCanvasView *canvas_view; canvas_view = get_canvas_view (container); g_return_val_if_fail (canvas_view != NULL, 0); if (NAUTILUS_CANVAS_VIEW_CONTAINER (container)->sort_for_desktop) { return fm_desktop_canvas_container_icons_compare (container, icon_a, icon_b); } /* Type unsafe comparisons for performance */ return nautilus_canvas_view_compare_files (canvas_view, (NautilusFile *)icon_a, (NautilusFile *)icon_b); }
static NautilusIconInfo * nautilus_canvas_view_container_get_icon_images (NautilusCanvasContainer *container, NautilusCanvasIconData *data, int size, char **embedded_text, gboolean for_drag_accept, gboolean need_large_embeddded_text, gboolean *embedded_text_needs_loading, gboolean *has_window_open) { NautilusCanvasView *canvas_view; NautilusFile *file; gboolean use_embedding; NautilusFileIconFlags flags; NautilusIconInfo *icon_info; GdkPixbuf *pixbuf; GIcon *emblemed_icon; GEmblem *emblem; GList *emblem_icons, *l; file = (NautilusFile *) data; g_assert (NAUTILUS_IS_FILE (file)); canvas_view = get_canvas_view (container); g_return_val_if_fail (canvas_view != NULL, NULL); use_embedding = FALSE; if (embedded_text) { *embedded_text = nautilus_file_peek_top_left_text (file, need_large_embeddded_text, embedded_text_needs_loading); use_embedding = *embedded_text != NULL; } *has_window_open = nautilus_file_has_open_window (file); flags = NAUTILUS_FILE_ICON_FLAGS_USE_MOUNT_ICON_AS_EMBLEM | NAUTILUS_FILE_ICON_FLAGS_USE_THUMBNAILS; if (use_embedding) { flags |= NAUTILUS_FILE_ICON_FLAGS_EMBEDDING_TEXT; } if (for_drag_accept) { flags |= NAUTILUS_FILE_ICON_FLAGS_FOR_DRAG_ACCEPT; } icon_info = nautilus_file_get_icon (file, size, flags); emblem_icons = nautilus_file_get_emblem_icons (file); /* apply emblems */ if (emblem_icons != NULL) { l = emblem_icons; emblem = g_emblem_new (l->data); pixbuf = nautilus_icon_info_get_pixbuf (icon_info); emblemed_icon = g_emblemed_icon_new (G_ICON (pixbuf), emblem); g_object_unref (emblem); for (l = l->next; l != NULL; l = l->next) { emblem = g_emblem_new (l->data); g_emblemed_icon_add_emblem (G_EMBLEMED_ICON (emblemed_icon), emblem); g_object_unref (emblem); } g_clear_object (&icon_info); icon_info = nautilus_icon_info_lookup (emblemed_icon, size); g_object_unref (pixbuf); g_object_unref (emblemed_icon); } if (emblem_icons != NULL) { g_list_free_full (emblem_icons, g_object_unref); } return icon_info; }
/* This callback returns the text, both the editable part, and the * part below that is not editable. */ static void nautilus_canvas_view_container_get_icon_text (NautilusCanvasContainer *container, NautilusCanvasIconData *data, char **editable_text, char **additional_text, gboolean include_invisible) { GQuark *attributes; char *text_array[4]; int i, j, num_attributes; NautilusCanvasView *canvas_view; NautilusFile *file; gboolean use_additional; file = NAUTILUS_FILE (data); g_assert (NAUTILUS_IS_FILE (file)); g_assert (editable_text != NULL); canvas_view = get_canvas_view (container); g_return_if_fail (canvas_view != NULL); use_additional = (additional_text != NULL); /* In the smallest zoom mode, no text is drawn. */ if (nautilus_canvas_container_get_zoom_level (container) == NAUTILUS_ZOOM_LEVEL_SMALLEST && !include_invisible) { *editable_text = NULL; } else { /* Strip the suffix for nautilus object xml files. */ *editable_text = nautilus_file_get_display_name (file); } if (!use_additional) { return; } if (NAUTILUS_IS_DESKTOP_ICON_FILE (file) || nautilus_file_is_nautilus_link (file)) { /* Don't show the normal extra information for desktop icons, * or desktop files, it doesn't make sense. */ *additional_text = NULL; return; } /* Find out what attributes go below each icon. */ attributes = nautilus_canvas_view_container_get_icon_text_attribute_names (container, &num_attributes); /* Get the attributes. */ j = 0; for (i = 0; i < num_attributes; ++i) { char *text; if (attributes[i] == attribute_none_q) { continue; } text = nautilus_file_get_string_attribute_q (file, attributes[i]); if (text == NULL) { continue; } text_array[j++] = text; } text_array[j] = NULL; /* Return them. */ if (j == 0) { *additional_text = NULL; } else if (j == 1) { /* Only one item, avoid the strdup + free */ *additional_text = text_array[0]; } else { *additional_text = g_strjoinv ("\n", text_array); for (i = 0; i < j; i++) { g_free (text_array[i]); } } }