From 47f4e44aec91cba0d8d2a7b0071b23134335065f Mon Sep 17 00:00:00 2001 From: TingPing Date: Wed, 8 Mar 2017 22:52:58 -0500 Subject: [PATCH] Improve GContentType usage Convert to content type where needed. Should fix various issues on Windows and OS X. https://bugzilla.gnome.org/show_bug.cgi?id=734946 --- gtk/gtkfilefilter.c | 19 +++++++++++++++---- gtk/gtkrecentfilter.c | 17 ++++++++++++++--- gtk/gtkrecentmanager.c | 6 ++++-- gtk/inspector/resource-list.c | 12 ++++++++++-- 4 files changed, 43 insertions(+), 11 deletions(-) diff --git a/gtk/gtkfilefilter.c b/gtk/gtkfilefilter.c index c843cc3828..e86f2d8304 100644 --- a/gtk/gtkfilefilter.c +++ b/gtk/gtkfilefilter.c @@ -669,13 +669,24 @@ gtk_file_filter_filter (GtkFileFilter *filter, if ((filter_info->contains & rule->needed) != rule->needed) continue; - + switch (rule->type) { case FILTER_RULE_MIME_TYPE: - if (filter_info->mime_type != NULL && - g_content_type_is_a (filter_info->mime_type, rule->u.mime_type)) - return TRUE; + if (filter_info->mime_type != NULL) + { + gchar *filter_content_type, *rule_content_type; + gboolean match; + + filter_content_type = g_content_type_from_mime_type (filter_info->mime_type); + rule_content_type = g_content_type_from_mime_type (rule->u.mime_type); + match = g_content_type_is_a (filter_content_type, rule_content_type); + g_free (filter_content_type); + g_free (rule_content_type); + + if (match) + return TRUE; + } break; case FILTER_RULE_PATTERN: if (filter_info->display_name != NULL && diff --git a/gtk/gtkrecentfilter.c b/gtk/gtkrecentfilter.c index bf32dbfacf..4062db59d9 100644 --- a/gtk/gtkrecentfilter.c +++ b/gtk/gtkrecentfilter.c @@ -743,9 +743,20 @@ gtk_recent_filter_filter (GtkRecentFilter *filter, switch (rule->type) { case FILTER_RULE_MIME_TYPE: - if (filter_info->mime_type != NULL && - g_content_type_is_a (filter_info->mime_type, rule->u.mime_type)) - return TRUE; + if (filter_info->mime_type != NULL) + { + gchar *filter_content_type, *rule_content_type; + gboolean match; + + filter_content_type = g_content_type_from_mime_type (filter_info->mime_type); + rule_content_type = g_content_type_from_mime_type (rule->u.mime_type); + match = g_content_type_is_a (filter_content_type, rule_content_type); + g_free (filter_content_type); + g_free (rule_content_type); + + if (match) + return TRUE; + } break; case FILTER_RULE_APPLICATION: if (filter_info->applications) diff --git a/gtk/gtkrecentmanager.c b/gtk/gtkrecentmanager.c index 70077fba45..2feaf1b477 100644 --- a/gtk/gtkrecentmanager.c +++ b/gtk/gtkrecentmanager.c @@ -775,7 +775,7 @@ gtk_recent_manager_add_item_query_info (GObject *source_object, GtkRecentManager *manager = user_data; GtkRecentData recent_data; GFileInfo *file_info; - gchar *uri, *basename; + gchar *uri, *basename, *content_type; uri = g_file_get_uri (file); @@ -801,8 +801,10 @@ gtk_recent_manager_add_item_query_info (GObject *source_object, else { basename = g_file_get_basename (file); - recent_data.mime_type = g_content_type_guess (basename, NULL, 0, NULL); + content_type = g_content_type_guess (basename, NULL, 0, NULL); + recent_data.mime_type = g_content_type_get_mime_type (content_type); g_free (basename); + g_free (content_type); } recent_data.app_name = g_strdup (g_get_application_name ()); diff --git a/gtk/inspector/resource-list.c b/gtk/inspector/resource-list.c index 16e96514af..92082516ed 100644 --- a/gtk/inspector/resource-list.c +++ b/gtk/inspector/resource-list.c @@ -187,6 +187,11 @@ populate_details (GtkInspectorResourceList *rl, else { gchar *text; + gchar *content_image; + gchar *content_text; + + content_image = g_content_type_from_mime_type ("image/*"); + content_text = g_content_type_from_mime_type ("text/*"); data = g_bytes_get_data (bytes, &size); type = g_content_type_guess (name, data, size, NULL); @@ -199,12 +204,12 @@ populate_details (GtkInspectorResourceList *rl, gtk_label_set_text (GTK_LABEL (rl->priv->size_label), text); g_free (text); - if (g_content_type_is_a (type, "text/*")) + if (g_content_type_is_a (type, content_text)) { gtk_text_buffer_set_text (rl->priv->buffer, data, -1); gtk_stack_set_visible_child_name (GTK_STACK (rl->priv->content), "text"); } - else if (g_content_type_is_a (type, "image/*")) + else if (g_content_type_is_a (type, content_image)) { gtk_image_set_from_resource (GTK_IMAGE (rl->priv->image), path); gtk_stack_set_visible_child_name (GTK_STACK (rl->priv->content), "image"); @@ -217,6 +222,9 @@ populate_details (GtkInspectorResourceList *rl, g_free (type); g_bytes_unref (bytes); + + g_free (content_image); + g_free (content_text); } g_free (path);