This commit is contained in:
Matthias Clasen 2010-07-05 00:56:12 -04:00
parent f90eb144d4
commit c53c701e53
3 changed files with 369 additions and 346 deletions

View File

@ -104,8 +104,8 @@ get_registry_classes_key (const char *subdir,
} }
gboolean gboolean
g_content_type_equals (const char *type1, g_content_type_equals (const gchar *type1,
const char *type2) const gchar *type2)
{ {
char *progid1, *progid2; char *progid1, *progid2;
gboolean res; gboolean res;
@ -129,8 +129,8 @@ g_content_type_equals (const char *type1,
} }
gboolean gboolean
g_content_type_is_a (const char *type, g_content_type_is_a (const gchar *type,
const char *supertype) const gchar *supertype)
{ {
gboolean res; gboolean res;
char *value_utf8; char *value_utf8;
@ -151,15 +151,15 @@ g_content_type_is_a (const char *type,
} }
gboolean gboolean
g_content_type_is_unknown (const char *type) g_content_type_is_unknown (const gchar *type)
{ {
g_return_val_if_fail (type != NULL, FALSE); g_return_val_if_fail (type != NULL, FALSE);
return strcmp ("*", type) == 0; return strcmp ("*", type) == 0;
} }
char * gchar *
g_content_type_get_description (const char *type) g_content_type_get_description (const gchar *type)
{ {
char *progid; char *progid;
char *description; char *description;
@ -181,8 +181,8 @@ g_content_type_get_description (const char *type)
return g_strdup_printf (_("%s filetype"), type); return g_strdup_printf (_("%s filetype"), type);
} }
char * gchar *
g_content_type_get_mime_type (const char *type) g_content_type_get_mime_type (const gchar *type)
{ {
char *mime; char *mime;
@ -204,7 +204,7 @@ G_LOCK_DEFINE_STATIC (_type_icons);
static GHashTable *_type_icons = NULL; static GHashTable *_type_icons = NULL;
GIcon * GIcon *
g_content_type_get_icon (const char *type) g_content_type_get_icon (const gchar *type)
{ {
GIcon *themed_icon; GIcon *themed_icon;
char *name = NULL; char *name = NULL;
@ -263,7 +263,7 @@ g_content_type_get_icon (const char *type)
} }
gboolean gboolean
g_content_type_can_be_executable (const char *type) g_content_type_can_be_executable (const gchar *type)
{ {
g_return_val_if_fail (type != NULL, FALSE); g_return_val_if_fail (type != NULL, FALSE);
@ -301,8 +301,8 @@ looks_like_text (const guchar *data,
return TRUE; return TRUE;
} }
char * gchar *
g_content_type_from_mime_type (const char *mime_type) g_content_type_from_mime_type (const gchar *mime_type)
{ {
char *key, *content_type; char *key, *content_type;
@ -315,8 +315,8 @@ g_content_type_from_mime_type (const char *mime_type)
return content_type; return content_type;
} }
char * gchar *
g_content_type_guess (const char *filename, g_content_type_guess (const gchar *filename,
const guchar *data, const guchar *data,
gsize data_size, gsize data_size,
gboolean *result_uncertain) gboolean *result_uncertain)
@ -384,7 +384,7 @@ g_content_types_get_registered (void)
return g_list_reverse (types); return g_list_reverse (types);
} }
char ** gchar **
g_content_type_guess_for_tree (GFile *root) g_content_type_guess_for_tree (GFile *root)
{ {
/* FIXME: implement */ /* FIXME: implement */
@ -413,10 +413,10 @@ _g_unix_content_type_get_sniff_len (void)
return size; return size;
} }
char * gchar *
_g_unix_content_type_unalias (const char *type) _g_unix_content_type_unalias (const gchar *type)
{ {
char *res; gchar *res;
G_LOCK (gio_xdgmime); G_LOCK (gio_xdgmime);
res = g_strdup (xdg_mime_unalias_mime_type (type)); res = g_strdup (xdg_mime_unalias_mime_type (type));
@ -425,11 +425,11 @@ _g_unix_content_type_unalias (const char *type)
return res; return res;
} }
char ** gchar **
_g_unix_content_type_get_parents (const char *type) _g_unix_content_type_get_parents (const gchar *type)
{ {
const char *umime; const gchar *umime;
char **parents; gchar **parents;
GPtrArray *array; GPtrArray *array;
int i; int i;
@ -451,22 +451,22 @@ _g_unix_content_type_get_parents (const char *type)
g_ptr_array_add (array, NULL); g_ptr_array_add (array, NULL);
return (char **)g_ptr_array_free (array, FALSE); return (gchar **)g_ptr_array_free (array, FALSE);
} }
/** /**
* g_content_type_equals: * g_content_type_equals:
* @type1: a content type string. * @type1: a content type string
* @type2: a content type string. * @type2: a content type string
* *
* Compares two content types for equality. * Compares two content types for equality.
* *
* Returns: %TRUE if the two strings are identical or equivalent, * Returns: %TRUE if the two strings are identical or equivalent,
* %FALSE otherwise. * %FALSE otherwise.
**/ */
gboolean gboolean
g_content_type_equals (const char *type1, g_content_type_equals (const gchar *type1,
const char *type2) const gchar *type2)
{ {
gboolean res; gboolean res;
@ -482,17 +482,17 @@ g_content_type_equals (const char *type1,
/** /**
* g_content_type_is_a: * g_content_type_is_a:
* @type: a content type string. * @type: a content type string
* @supertype: a string. * @supertype: a content type string
* *
* Determines if @type is a subset of @supertype. * Determines if @type is a subset of @supertype.
* *
* Returns: %TRUE if @type is a kind of @supertype, * Returns: %TRUE if @type is a kind of @supertype,
* %FALSE otherwise. * %FALSE otherwise.
**/ */
gboolean gboolean
g_content_type_is_a (const char *type, g_content_type_is_a (const gchar *type,
const char *supertype) const gchar *supertype)
{ {
gboolean res; gboolean res;
@ -508,16 +508,16 @@ g_content_type_is_a (const char *type,
/** /**
* g_content_type_is_unknown: * g_content_type_is_unknown:
* @type: a content type string. * @type: a content type string
* *
* Checks if the content type is the generic "unknown" type. * Checks if the content type is the generic "unknown" type.
* On unix this is the "application/octet-stream" mimetype, * On UNIX this is the "application/octet-stream" mimetype,
* while on win32 it is "*". * while on win32 it is "*".
* *
* Returns: %TRUE if the type is the unknown type. * Returns: %TRUE if the type is the unknown type.
**/ */
gboolean gboolean
g_content_type_is_unknown (const char *type) g_content_type_is_unknown (const gchar *type)
{ {
g_return_val_if_fail (type != NULL, FALSE); g_return_val_if_fail (type != NULL, FALSE);
@ -582,7 +582,6 @@ mime_info_start_element (GMarkupParseContext *context,
} }
else else
parser->current_type = MIME_TAG_TYPE_OTHER; parser->current_type = MIME_TAG_TYPE_OTHER;
} }
static void static void
@ -683,17 +682,18 @@ load_comment_for_mime (const char *mimetype)
/** /**
* g_content_type_get_description: * g_content_type_get_description:
* @type: a content type string. * @type: a content type string
* *
* Gets the human readable description of the content type. * Gets the human readable description of the content type.
* *
* Returns: a short description of the content type @type. * Returns: a short description of the content type @type. Free the
**/ * returned string with g_free()
char * */
g_content_type_get_description (const char *type) gchar *
g_content_type_get_description (const gchar *type)
{ {
static GHashTable *type_comment_cache = NULL; static GHashTable *type_comment_cache = NULL;
char *comment; gchar *comment;
g_return_val_if_fail (type != NULL, NULL); g_return_val_if_fail (type != NULL, NULL);
@ -723,12 +723,13 @@ g_content_type_get_description (const char *type)
/** /**
* g_content_type_get_mime_type: * g_content_type_get_mime_type:
* @type: a content type string. * @type: a content type string
* *
* Gets the mime-type for the content type. If one is registered * Gets the mime type for the content type, if one is registered.
* *
* Returns: the registered mime-type for the given @type, or NULL if unknown. * Returns: (allow-none): the registered mime type for the given @type,
**/ * or %NULL if unknown.
*/
char * char *
g_content_type_get_mime_type (const char *type) g_content_type_get_mime_type (const char *type)
{ {
@ -739,14 +740,15 @@ g_content_type_get_mime_type (const char *type)
/** /**
* g_content_type_get_icon: * g_content_type_get_icon:
* @type: a content type string. * @type: a content type string
* *
* Gets the icon for a content type. * Gets the icon for a content type.
* *
* Returns: #GIcon corresponding to the content type. * Returns: #GIcon corresponding to the content type. Free the returned
**/ * object with g_object_unref()
*/
GIcon * GIcon *
g_content_type_get_icon (const char *type) g_content_type_get_icon (const gchar *type)
{ {
char *mimetype_icon, *generic_mimetype_icon, *q; char *mimetype_icon, *generic_mimetype_icon, *q;
char *xdg_mimetype_icon, *legacy_mimetype_icon; char *xdg_mimetype_icon, *legacy_mimetype_icon;
@ -804,16 +806,16 @@ g_content_type_get_icon (const char *type)
/** /**
* g_content_type_can_be_executable: * g_content_type_can_be_executable:
* @type: a content type string. * @type: a content type string
* *
* Checks if a content type can be executable. Note that for instance * Checks if a content type can be executable. Note that for instance
* things like text files can be executables (i.e. scripts and batch files). * things like text files can be executables (i.e. scripts and batch files).
* *
* Returns: %TRUE if the file type corresponds to a type that * Returns: %TRUE if the file type corresponds to a type that
* can be executable, %FALSE otherwise. * can be executable, %FALSE otherwise.
**/ */
gboolean gboolean
g_content_type_can_be_executable (const char *type) g_content_type_can_be_executable (const gchar *type)
{ {
g_return_val_if_fail (type != NULL, FALSE); g_return_val_if_fail (type != NULL, FALSE);
@ -844,16 +846,17 @@ looks_like_text (const guchar *data, gsize data_size)
/** /**
* g_content_type_from_mime_type: * g_content_type_from_mime_type:
* @mime_type: a mime type string. * @mime_type: a mime type string
* *
* Tries to find a content type based on the mime type name. * Tries to find a content type based on the mime type name.
* *
* Returns: Newly allocated string with content type or NULL when does not know. * Returns: (allow-none): Newly allocated string with content type
* or %NULL. Free with g_free()
* *
* Since: 2.18 * Since: 2.18
**/ **/
char * gchar *
g_content_type_from_mime_type (const char *mime_type) g_content_type_from_mime_type (const gchar *mime_type)
{ {
char *umime; char *umime;
@ -869,10 +872,11 @@ g_content_type_from_mime_type (const char *mime_type)
/** /**
* g_content_type_guess: * g_content_type_guess:
* @filename: a string, or %NULL * @filename: (allow-none): a string, or %NULL
* @data: a stream of data, or %NULL * @data: (allow-none) (array length=data_size): a stream of data, or %NULL
* @data_size: the size of @data * @data_size: the size of @data
* @result_uncertain: a flag indicating the certainty of the result * @result_uncertain: (allow-none) (out): return location for the certainty
* of the result, or %NULL
* *
* Guesses the content type based on example data. If the function is * Guesses the content type based on example data. If the function is
* uncertain, @result_uncertain will be set to %TRUE. Either @filename * uncertain, @result_uncertain will be set to %TRUE. Either @filename
@ -880,10 +884,10 @@ g_content_type_from_mime_type (const char *mime_type)
* on the other argument. * on the other argument.
* *
* Returns: a string indicating a guessed content type for the * Returns: a string indicating a guessed content type for the
* given data. * given data. Free with g_free()
**/ */
char * gchar *
g_content_type_guess (const char *filename, g_content_type_guess (const gchar *filename,
const guchar *data, const guchar *data,
gsize data_size, gsize data_size,
gboolean *result_uncertain) gboolean *result_uncertain)
@ -966,15 +970,16 @@ g_content_type_guess (const char *filename,
mimetype = g_strdup (sniffed_mimetype); mimetype = g_strdup (sniffed_mimetype);
else else
{ {
/* There are conflicts between the name matches and we have a sniffed /* There are conflicts between the name matches and we
type, use that as a tie breaker. */ * have a sniffed type, use that as a tie breaker.
*/
for (i = 0; i < n_name_mimetypes; i++) for (i = 0; i < n_name_mimetypes; i++)
{ {
if ( xdg_mime_mime_type_subclass (name_mimetypes[i], sniffed_mimetype)) if ( xdg_mime_mime_type_subclass (name_mimetypes[i], sniffed_mimetype))
{ {
/* This nametype match is derived from (or the same as) the sniffed type). /* This nametype match is derived from (or the same as)
This is probably it. */ * the sniffed type). This is probably it.
*/
mimetype = g_strdup (name_mimetypes[i]); mimetype = g_strdup (name_mimetypes[i]);
break; break;
} }
@ -984,7 +989,9 @@ g_content_type_guess (const char *filename,
if (mimetype == NULL) if (mimetype == NULL)
{ {
/* Conflicts, and sniffed type was no help or not there. Guess on the first one */ /* Conflicts, and sniffed type was no help or not there.
* Guess on the first one
*/
mimetype = g_strdup (name_mimetypes[0]); mimetype = g_strdup (name_mimetypes[0]);
if (result_uncertain) if (result_uncertain)
*result_uncertain = TRUE; *result_uncertain = TRUE;
@ -1055,9 +1062,13 @@ enumerate_mimetypes_dir (const char *dir,
* *
* Gets a list of strings containing all the registered content types * Gets a list of strings containing all the registered content types
* known to the system. The list and its data should be freed using * 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) * <programlisting>
* Returns: #GList of the registered content types. * g_list_foreach (list, g_free, NULL);
**/ * g_list_free (list);
* </programlisting>
*
* Returns: #GList of the registered content types
*/
GList * GList *
g_content_types_get_registered (void) g_content_types_get_registered (void)
{ {
@ -1638,14 +1649,15 @@ match_match (TreeMatch *match,
* (for a camera memory card). See the <ulink url="http://www.freedesktop.org/wiki/Specifications/shared-mime-info-spec">shared-mime-info</ulink> * (for a camera memory card). See the <ulink url="http://www.freedesktop.org/wiki/Specifications/shared-mime-info-spec">shared-mime-info</ulink>
* specification for more on x-content types. * specification for more on x-content types.
* *
* This function is useful in the implementation of g_mount_guess_content_type(). * This function is useful in the implementation of
* g_mount_guess_content_type().
* *
* Returns: an %NULL-terminated array of zero or more content types, or %NULL. * Returns: an %NULL-terminated array of zero or more content types,
* Free with g_strfreev() * or %NULL. Free with g_strfreev()
* *
* Since: 2.18 * Since: 2.18
*/ */
char ** gchar **
g_content_type_guess_for_tree (GFile *root) g_content_type_guess_for_tree (GFile *root)
{ {
GPtrArray *types; GPtrArray *types;
@ -1666,7 +1678,7 @@ g_content_type_guess_for_tree (GFile *root)
g_ptr_array_add (types, NULL); g_ptr_array_add (types, NULL);
return (char **)g_ptr_array_free (types, FALSE); return (gchar **)g_ptr_array_free (types, FALSE);
} }
#endif /* Unix version */ #endif /* Unix version */

View File

@ -31,24 +31,24 @@
G_BEGIN_DECLS G_BEGIN_DECLS
gboolean g_content_type_equals (const char *type1, gboolean g_content_type_equals (const gchar *type1,
const char *type2); const gchar *type2);
gboolean g_content_type_is_a (const char *type, gboolean g_content_type_is_a (const gchar *type,
const char *supertype); const gchar *supertype);
gboolean g_content_type_is_unknown (const char *type); gboolean g_content_type_is_unknown (const gchar *type);
char * g_content_type_get_description (const char *type); gchar * g_content_type_get_description (const gchar *type);
char * g_content_type_get_mime_type (const char *type); gchar * g_content_type_get_mime_type (const gchar *type);
GIcon * g_content_type_get_icon (const char *type); GIcon * g_content_type_get_icon (const gchar *type);
gboolean g_content_type_can_be_executable (const char *type); gboolean g_content_type_can_be_executable (const gchar *type);
char * g_content_type_from_mime_type (const char *mime_type); gchar * g_content_type_from_mime_type (const gchar *mime_type);
char * g_content_type_guess (const char *filename, gchar * g_content_type_guess (const gchar *filename,
const guchar *data, const guchar *data,
gsize data_size, gsize data_size,
gboolean *result_uncertain); gboolean *result_uncertain);
char ** g_content_type_guess_for_tree (GFile *root); gchar ** g_content_type_guess_for_tree (GFile *root);
GList * g_content_types_get_registered (void); GList * g_content_types_get_registered (void);

View File

@ -0,0 +1,11 @@
[Desktop Entry]
Type=Application
Name=appinfo-test
Name[de]=appinfo-test-de
X-GNOME-FullName=example
X-GNOME-FullName[de]=Beispiel
Comment=GAppInfo example
Comment[de]=GAppInfo Beispiel
Exec=./appinfo-test --option
TryExec=does-not-exist
Icon=testicon