G_FILE_ATTRIBUTE_STANDARD_EDIT_NAME
G_FILE_ATTRIBUTE_STANDARD_COPY_NAME
G_FILE_ATTRIBUTE_STANDARD_ICON
+G_FILE_ATTRIBUTE_STANDARD_SYMBOLIC_ICON
G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE
G_FILE_ATTRIBUTE_STANDARD_FAST_CONTENT_TYPE
G_FILE_ATTRIBUTE_STANDARD_SIZE
g_file_info_get_display_name
g_file_info_get_edit_name
g_file_info_get_icon
+g_file_info_get_symbolic_icon
g_file_info_get_content_type
g_file_info_get_size
g_file_info_get_modification_time
g_file_info_set_display_name
g_file_info_set_edit_name
g_file_info_set_icon
+g_file_info_set_symbolic_icon
g_file_info_set_content_type
g_file_info_set_size
g_file_info_set_modification_time
#define G_FILE_ATTRIBUTE_ID_STANDARD_SYMLINK_TARGET (1048576 + 16)
#define G_FILE_ATTRIBUTE_ID_STANDARD_TARGET_URI (1048576 + 17)
#define G_FILE_ATTRIBUTE_ID_STANDARD_SORT_ORDER (1048576 + 18)
+#define G_FILE_ATTRIBUTE_ID_STANDARD_SYMBOLIC_ICON (1048576 + 19)
#define G_FILE_ATTRIBUTE_ID_ETAG_VALUE (2097152 + 1)
#define G_FILE_ATTRIBUTE_ID_ID_FILE (3145728 + 1)
#define G_FILE_ATTRIBUTE_ID_ID_FILESYSTEM (3145728 + 2)
REGISTER_ATTRIBUTE (STANDARD_SYMLINK_TARGET);
REGISTER_ATTRIBUTE (STANDARD_TARGET_URI);
REGISTER_ATTRIBUTE (STANDARD_SORT_ORDER);
+ REGISTER_ATTRIBUTE (STANDARD_SYMBOLIC_ICON);
REGISTER_ATTRIBUTE (ETAG_VALUE);
REGISTER_ATTRIBUTE (ID_FILE);
REGISTER_ATTRIBUTE (ID_FILESYSTEM);
}
/**
+ * g_file_info_get_symbolic_icon:
+ * @info: a #GFileInfo.
+ *
+ * Gets the symbolic icon for a file.
+ *
+ * Returns: (transfer none): #GIcon for the given @info.
+ *
+ * Since: 2.34
+ **/
+GIcon *
+g_file_info_get_symbolic_icon (GFileInfo *info)
+{
+ static guint32 attr = 0;
+ GFileAttributeValue *value;
+ GObject *obj;
+
+ g_return_val_if_fail (G_IS_FILE_INFO (info), NULL);
+
+ if (attr == 0)
+ attr = lookup_attribute (G_FILE_ATTRIBUTE_STANDARD_SYMBOLIC_ICON);
+
+ value = g_file_info_find_value (info, attr);
+ obj = _g_file_attribute_value_get_object (value);
+ if (G_IS_ICON (obj))
+ return G_ICON (obj);
+ return NULL;
+}
+
+/**
* g_file_info_get_content_type:
* @info: a #GFileInfo.
*
}
/**
+ * g_file_info_set_symbolic_icon:
+ * @info: a #GFileInfo.
+ * @icon: a #GIcon.
+ *
+ * Sets the symbolic icon for a given #GFileInfo.
+ * See %G_FILE_ATTRIBUTE_STANDARD_SYMBOLIC_ICON.
+ *
+ * Since: 2.34
+ **/
+void
+g_file_info_set_symbolic_icon (GFileInfo *info,
+ GIcon *icon)
+{
+ static guint32 attr = 0;
+ GFileAttributeValue *value;
+
+ g_return_if_fail (G_IS_FILE_INFO (info));
+ g_return_if_fail (G_IS_ICON (icon));
+
+ if (attr == 0)
+ attr = lookup_attribute (G_FILE_ATTRIBUTE_STANDARD_SYMBOLIC_ICON);
+
+ value = g_file_info_create_value (info, attr);
+ if (value)
+ _g_file_attribute_value_set_object (value, G_OBJECT (icon));
+}
+
+/**
* g_file_info_set_content_type:
* @info: a #GFileInfo.
* @content_type: a content type. See <link linkend="gio-GContentType">GContentType</link>.
#define G_FILE_ATTRIBUTE_STANDARD_ICON "standard::icon" /* object (GIcon) */
/**
+ * G_FILE_ATTRIBUTE_STANDARD_SYMBOLIC_ICON:
+ *
+ * A key in the "standard" namespace for getting the symbolic icon for the file.
+ * Corresponding #GFileAttributeType is %G_FILE_ATTRIBUTE_TYPE_OBJECT.
+ * The value for this key should contain a #GIcon.
+ *
+ * Since: 2.34
+ **/
+#define G_FILE_ATTRIBUTE_STANDARD_SYMBOLIC_ICON "standard::symbolic-icon" /* object (GIcon) */
+
+/**
* G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE:
*
* A key in the "standard" namespace for getting the content type of the file.
const char * g_file_info_get_display_name (GFileInfo *info);
const char * g_file_info_get_edit_name (GFileInfo *info);
GIcon * g_file_info_get_icon (GFileInfo *info);
+GIcon * g_file_info_get_symbolic_icon (GFileInfo *info);
const char * g_file_info_get_content_type (GFileInfo *info);
goffset g_file_info_get_size (GFileInfo *info);
void g_file_info_get_modification_time (GFileInfo *info,
const char *edit_name);
void g_file_info_set_icon (GFileInfo *info,
GIcon *icon);
+void g_file_info_set_symbolic_icon (GFileInfo *info,
+ GIcon *icon);
void g_file_info_set_content_type (GFileInfo *info,
const char *content_type);
void g_file_info_set_size (GFileInfo *info,
g_file_info_get_display_name
g_file_info_get_edit_name
g_file_info_get_icon
+g_file_info_get_symbolic_icon
g_file_info_get_content_type
g_file_info_get_size
g_file_info_get_modification_time
g_file_info_set_display_name
g_file_info_set_edit_name
g_file_info_set_icon
+g_file_info_set_symbolic_icon
g_file_info_set_content_type
g_file_info_set_size
g_file_info_set_modification_time
}
}
+static const char *
+get_icon_name (const char *path,
+ gboolean use_symbolic,
+ gboolean *with_fallbacks_out)
+{
+ const char *name = NULL;
+ gboolean with_fallbacks = TRUE;
+
+ if (strcmp (path, g_get_home_dir ()) == 0)
+ {
+ name = use_symbolic ? "user-home-symbolic" : "user-home";
+ with_fallbacks = FALSE;
+ }
+ else if (strcmp (path, g_get_user_special_dir (G_USER_DIRECTORY_DESKTOP)) == 0)
+ {
+ name = use_symbolic ? "user-desktop-symbolic" : "user-desktop";
+ with_fallbacks = FALSE;
+ }
+ else if (g_strcmp0 (path, g_get_user_special_dir (G_USER_DIRECTORY_DOCUMENTS)) == 0)
+ {
+ name = use_symbolic ? "folder-documents-symbolic" : "folder-documents";
+ }
+ else if (g_strcmp0 (path, g_get_user_special_dir (G_USER_DIRECTORY_DOWNLOAD)) == 0)
+ {
+ name = use_symbolic ? "folder-download-symbolic" : "folder-download";
+ }
+ else if (g_strcmp0 (path, g_get_user_special_dir (G_USER_DIRECTORY_MUSIC)) == 0)
+ {
+ name = use_symbolic ? "folder-music-symbolic" : "folder-music";
+ }
+ else if (g_strcmp0 (path, g_get_user_special_dir (G_USER_DIRECTORY_PICTURES)) == 0)
+ {
+ name = use_symbolic ? "folder-pictures-symbolic" : "folder-pictures";
+ }
+ else if (g_strcmp0 (path, g_get_user_special_dir (G_USER_DIRECTORY_PUBLIC_SHARE)) == 0)
+ {
+ name = use_symbolic ? "folder-publicshare-symbolic" : "folder-publicshare";
+ }
+ else if (g_strcmp0 (path, g_get_user_special_dir (G_USER_DIRECTORY_TEMPLATES)) == 0)
+ {
+ name = use_symbolic ? "folder-templates-symbolic" : "folder-templates";
+ }
+ else if (g_strcmp0 (path, g_get_user_special_dir (G_USER_DIRECTORY_VIDEOS)) == 0)
+ {
+ name = use_symbolic ? "folder-videos-symbolic" : "folder-videos";
+ }
+ else
+ {
+ name = NULL;
+ }
+
+ if (with_fallbacks_out != NULL)
+ *with_fallbacks_out = with_fallbacks;
+
+ return name;
+}
+
GFileInfo *
_g_local_file_info_get (const char *basename,
const char *path,
if (_g_file_attribute_matcher_matches_id (attribute_matcher,
G_FILE_ATTRIBUTE_ID_STANDARD_CONTENT_TYPE) ||
_g_file_attribute_matcher_matches_id (attribute_matcher,
- G_FILE_ATTRIBUTE_ID_STANDARD_ICON))
+ G_FILE_ATTRIBUTE_ID_STANDARD_ICON) ||
+ _g_file_attribute_matcher_matches_id (attribute_matcher,
+ G_FILE_ATTRIBUTE_ID_STANDARD_SYMBOLIC_ICON))
{
char *content_type = get_content_type (basename, path, stat_ok ? &statbuf : NULL, is_symlink, symlink_broken, flags, FALSE);
if (content_type)
{
+ gboolean use_symbolics = FALSE;
+
g_file_info_set_content_type (info, content_type);
- if (_g_file_attribute_matcher_matches_id (attribute_matcher,
- G_FILE_ATTRIBUTE_ID_STANDARD_ICON))
+ use_symbolics = _g_file_attribute_matcher_matches_id (attribute_matcher,
+ G_FILE_ATTRIBUTE_ID_STANDARD_SYMBOLIC_ICON);
+ if (use_symbolics ||
+ _g_file_attribute_matcher_matches_id (attribute_matcher,
+ G_FILE_ATTRIBUTE_ID_STANDARD_ICON))
{
GIcon *icon;
+ gboolean with_fallbacks = TRUE;
+ const char *icon_name = get_icon_name (path, use_symbolics, &with_fallbacks);
- if (strcmp (path, g_get_home_dir ()) == 0)
- icon = g_themed_icon_new ("user-home");
- else if (strcmp (path, g_get_user_special_dir (G_USER_DIRECTORY_DESKTOP)) == 0)
- icon = g_themed_icon_new ("user-desktop");
- else if (g_strcmp0 (path, g_get_user_special_dir (G_USER_DIRECTORY_DOCUMENTS)) == 0)
- icon = g_themed_icon_new_with_default_fallbacks ("folder-documents");
- else if (g_strcmp0 (path, g_get_user_special_dir (G_USER_DIRECTORY_DOWNLOAD)) == 0)
- icon = g_themed_icon_new_with_default_fallbacks ("folder-download");
- else if (g_strcmp0 (path, g_get_user_special_dir (G_USER_DIRECTORY_MUSIC)) == 0)
- icon = g_themed_icon_new_with_default_fallbacks ("folder-music");
- else if (g_strcmp0 (path, g_get_user_special_dir (G_USER_DIRECTORY_PICTURES)) == 0)
- icon = g_themed_icon_new_with_default_fallbacks ("folder-pictures");
- else if (g_strcmp0 (path, g_get_user_special_dir (G_USER_DIRECTORY_PUBLIC_SHARE)) == 0)
- icon = g_themed_icon_new_with_default_fallbacks ("folder-publicshare");
- else if (g_strcmp0 (path, g_get_user_special_dir (G_USER_DIRECTORY_TEMPLATES)) == 0)
- icon = g_themed_icon_new_with_default_fallbacks ("folder-templates");
- else if (g_strcmp0 (path, g_get_user_special_dir (G_USER_DIRECTORY_VIDEOS)) == 0)
- icon = g_themed_icon_new_with_default_fallbacks ("folder-videos");
+ if (icon_name != NULL)
+ {
+ if (with_fallbacks)
+ icon = g_themed_icon_new_with_default_fallbacks (icon_name);
+ else
+ icon = g_themed_icon_new (icon_name);
+ }
else
{
icon = g_content_type_get_icon (content_type);