+/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
+
/* GIO - GLib Input, Output and Streaming Library
*
* Copyright (C) 2006-2007 Red Hat, Inc.
#include <string.h>
#include <stdio.h>
#include "gcontenttypeprivate.h"
+#include "gthemedicon.h"
#include "glibintl.h"
#include "gioalias.h"
/**
* SECTION:gcontenttype
* @short_description: Platform-specific content typing
- * @include: gio.h
+ * @include: gio/gio.h
*
* A content type is a platform specific string that defines the type
* of a file. On unix it is a mime type, on win32 it is an extension string
_g_unix_content_type_get_parents (const char *type)
{
const char *umime;
- const char **parents;
+ char **parents;
GPtrArray *array;
int i;
G_LOCK (gio_xdgmime);
umime = xdg_mime_unalias_mime_type (type);
+
g_ptr_array_add (array, g_strdup (umime));
- parents = xdg_mime_get_mime_parents (umime);
+ parents = xdg_mime_list_mime_parents (umime);
for (i = 0; parents && parents[i] != NULL; i++)
g_ptr_array_add (array, g_strdup (parents[i]));
+ free (parents);
+
G_UNLOCK (gio_xdgmime);
g_ptr_array_add (array, NULL);
g_return_val_if_fail (type != NULL, NULL);
G_LOCK (gio_xdgmime);
+ type = xdg_mime_unalias_mime_type (type);
+
if (type_comment_cache == NULL)
type_comment_cache = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free);
GIcon *
g_content_type_get_icon (const char *type)
{
+ char *mimetype_icon, *generic_mimetype_icon, *p;
+ char *icon_names[2];
+ GThemedIcon *themed_icon;
+
g_return_val_if_fail (type != NULL, NULL);
-
- /* TODO: Implement */
- return NULL;
+
+ mimetype_icon = g_strdup (type);
+
+ while ((p = strchr (mimetype_icon, '/')) != NULL)
+ *p = '-';
+
+ p = strchr (type, '/');
+ if (p == NULL)
+ p = type + strlen (type);
+
+ generic_mimetype_icon = g_malloc (p - type + strlen ("-x-generic") + 1);
+ memcpy (generic_mimetype_icon, type, p - type);
+ memcpy (generic_mimetype_icon + (p - type), "-x-generic", strlen ("-x-generic"));
+ generic_mimetype_icon[(p - type) + strlen ("-x-generic")] = 0;
+
+ icon_names[0] = mimetype_icon;
+ icon_names[1] = generic_mimetype_icon;
+
+ themed_icon = g_themed_icon_new_from_names (icon_names, 2);
+
+ g_free (mimetype_icon);
+ g_free (generic_mimetype_icon);
+
+ return G_ICON (themed_icon);
}
/**
looks_like_text (const guchar *data, gsize data_size)
{
gsize i;
+ char c;
+
for (i = 0; i < data_size; i++)
{
- if g_ascii_iscntrl (data[i])
+ c = data[i];
+
+ if (g_ascii_iscntrl (c) &&
+ !g_ascii_isspace (c))
return FALSE;
}
return TRUE;
* g_content_types_get_registered:
*
* Gets a list of strings containing all the registered content types
- * known to the system.
- *
+ * known to the system. The list and its data should be freed using
+ * @g_list_foreach(list, g_free, NULL) and @g_list_free(list)
* Returns: #GList of the registered content types.
**/
GList *
int i;
GList *l;
- mimetypes = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
+ mimetypes = g_hash_table_new (g_str_hash, g_str_equal);
enumerate_mimetypes_dir (g_get_user_data_dir (), mimetypes);
dirs = g_get_system_data_dirs ();