* Boston, MA 02111-1307, USA.
*/
-#include <config.h>
+#include "config.h"
#include <string.h>
#include "gtkfilefilter.h"
-#include "gtkobject.h"
+#include "gtkintl.h"
#include "gtkprivate.h"
#include "gtkalias.h"
-#ifdef G_OS_UNIX
-#define XDG_PREFIX _gtk_xdg
-#include "xdgmime/xdgmime.h"
-#endif
-
typedef struct _GtkFileFilterClass GtkFileFilterClass;
typedef struct _FilterRule FilterRule;
} u;
};
-static void gtk_file_filter_class_init (GtkFileFilterClass *class);
static void gtk_file_filter_finalize (GObject *object);
-static GObjectClass *parent_class;
-
-GType
-gtk_file_filter_get_type (void)
-{
- static GType file_filter_type = 0;
- if (!file_filter_type)
- {
- static const GTypeInfo file_filter_info =
- {
- sizeof (GtkFileFilterClass),
- NULL, /* base_init */
- NULL, /* base_finalize */
- (GClassInitFunc) gtk_file_filter_class_init,
- NULL, /* class_finalize */
- NULL, /* class_data */
- sizeof (GtkFileFilter),
- 0, /* n_preallocs */
- NULL /* init */
- };
-
- file_filter_type = g_type_register_static (GTK_TYPE_OBJECT, "GtkFileFilter",
- &file_filter_info, 0);
- }
+G_DEFINE_TYPE (GtkFileFilter, gtk_file_filter, GTK_TYPE_OBJECT)
- return file_filter_type;
+static void
+gtk_file_filter_init (GtkFileFilter *object)
+{
}
static void
{
GObjectClass *gobject_class = G_OBJECT_CLASS (class);
- parent_class = g_type_class_peek_parent (class);
-
gobject_class->finalize = gtk_file_filter_finalize;
}
g_assert_not_reached ();
}
- g_free (rule);
+ g_slice_free (FilterRule, rule);
}
static void
g_slist_foreach (filter->rules, (GFunc)filter_rule_free, NULL);
g_slist_free (filter->rules);
- if (filter->name)
- g_free (filter->name);
+ g_free (filter->name);
- parent_class->finalize (object);
+ G_OBJECT_CLASS (gtk_file_filter_parent_class)->finalize (object);
}
/**
* gtk_file_filter_add_mime_type(), gtk_file_filter_add_pattern(),
* or gtk_file_filter_add_custom(). To create a filter
* that accepts any file, use:
- *
- * <informalexample><programlisting>
- * GtkFileFilter *filter = gtk_file_filter_new (<!-- -->);
+ * |[
+ * GtkFileFilter *filter = gtk_file_filter_new ();
* gtk_file_filter_add_pattern (filter, "*");
- * </programlisting></informalexample>
+ * ]|
*
* Return value: a new #GtkFileFilter
*
/**
* gtk_file_filter_set_name:
* @filter: a #GtkFileFilter
- * @name: the human-readable-name for the filter, or %NULL
+ * @name: (allow-none): the human-readable-name for the filter, or %NULL
* to remove any existing name.
*
* Sets the human-readable name of the filter; this is the string
{
g_return_if_fail (GTK_IS_FILE_FILTER (filter));
- if (filter->name)
- g_free (filter->name);
+ g_free (filter->name);
filter->name = g_strdup (name);
}
g_return_if_fail (GTK_IS_FILE_FILTER (filter));
g_return_if_fail (mime_type != NULL);
- rule = g_new (FilterRule, 1);
+ rule = g_slice_new (FilterRule);
rule->type = FILTER_RULE_MIME_TYPE;
rule->needed = GTK_FILE_FILTER_MIME_TYPE;
rule->u.mime_type = g_strdup (mime_type);
g_return_if_fail (GTK_IS_FILE_FILTER (filter));
g_return_if_fail (pattern != NULL);
- rule = g_new (FilterRule, 1);
+ rule = g_slice_new (FilterRule);
rule->type = FILTER_RULE_PATTERN;
rule->needed = GTK_FILE_FILTER_DISPLAY_NAME;
rule->u.pattern = g_strdup (pattern);
g_return_if_fail (GTK_IS_FILE_FILTER (filter));
- rule = g_new (FilterRule, 1);
+ rule = g_slice_new (FilterRule);
rule->type = FILTER_RULE_PIXBUF_FORMATS;
rule->needed = GTK_FILE_FILTER_MIME_TYPE;
rule->u.pixbuf_formats = gdk_pixbuf_get_formats ();
g_return_if_fail (GTK_IS_FILE_FILTER (filter));
g_return_if_fail (func != NULL);
- rule = g_new (FilterRule, 1);
+ rule = g_slice_new (FilterRule);
rule->type = FILTER_RULE_CUSTOM;
rule->needed = needed;
rule->u.custom.func = func;
switch (rule->type)
{
case FILTER_RULE_MIME_TYPE:
- if (filter_info->mime_type != NULL
-#ifdef G_OS_UNIX
- && xdg_mime_mime_type_subclass (filter_info->mime_type, rule->u.mime_type))
-#else
- && strcmp (rule->u.mime_type, filter_info->mime_type) == 0)
-#endif
+ if (filter_info->mime_type != NULL &&
+ g_content_type_is_a (filter_info->mime_type, rule->u.mime_type))
return TRUE;
break;
case FILTER_RULE_PATTERN:
{
GSList *list;
+ if (!filter_info->mime_type)
+ break;
+
for (list = rule->u.pixbuf_formats; list; list = list->next)
{
int i;