summaryrefslogtreecommitdiff
path: root/gtk/gtkrecentfilter.h
blob: 2c428df8a50adff389c12ce8d8a188b291955617 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
/* GTK - The GIMP Toolkit
 * gtkrecentfilter.h - Filter object for recently used resources
 * Copyright (C) 2006, Emmanuele Bassi
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library. If not, see <http://www.gnu.org/licenses/>.
 */

#ifndef __GTK_RECENT_FILTER_H__
#define __GTK_RECENT_FILTER_H__

#if !defined (__GTK_H_INSIDE__) && !defined (GTK_COMPILATION)
#error "Only <gtk/gtk.h> can be included directly."
#endif

#include <glib-object.h>
#include <gdk/gdk.h>

G_BEGIN_DECLS

#define GTK_TYPE_RECENT_FILTER		(gtk_recent_filter_get_type ())
#define GTK_RECENT_FILTER(obj)		(G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_RECENT_FILTER, GtkRecentFilter))
#define GTK_IS_RECENT_FILTER(obj)	(G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_RECENT_FILTER))

typedef struct _GtkRecentFilter		GtkRecentFilter;
typedef struct _GtkRecentFilterInfo	GtkRecentFilterInfo;

/**
 * GtkRecentFilterFlags:
 * @GTK_RECENT_FILTER_URI: the URI of the file being tested
 * @GTK_RECENT_FILTER_DISPLAY_NAME: the string that will be used to
 *  display the file in the recent chooser
 * @GTK_RECENT_FILTER_MIME_TYPE: the mime type of the file
 * @GTK_RECENT_FILTER_APPLICATION: the list of applications that have
 *  registered the file
 * @GTK_RECENT_FILTER_GROUP: the groups to which the file belongs to
 * @GTK_RECENT_FILTER_AGE: the number of days elapsed since the file
 *  has been registered
 *
 * These flags indicate what parts of a #GtkRecentFilterInfo struct
 * are filled or need to be filled.
 */
typedef enum {
  GTK_RECENT_FILTER_URI          = 1 << 0,
  GTK_RECENT_FILTER_DISPLAY_NAME = 1 << 1,
  GTK_RECENT_FILTER_MIME_TYPE    = 1 << 2,
  GTK_RECENT_FILTER_APPLICATION  = 1 << 3,
  GTK_RECENT_FILTER_GROUP        = 1 << 4,
  GTK_RECENT_FILTER_AGE          = 1 << 5
} GtkRecentFilterFlags;

/**
 * GtkRecentFilterFunc:
 * @filter_info: a #GtkRecentFilterInfo that is filled according
 *  to the @needed flags passed to gtk_recent_filter_add_custom()
 * @user_data: user data passed to gtk_recent_filter_add_custom()
 *
 * The type of function that is used with custom filters,
 * see gtk_recent_filter_add_custom().
 *
 * Returns: %TRUE if the file should be displayed
 */
typedef gboolean (*GtkRecentFilterFunc) (const GtkRecentFilterInfo *filter_info,
					 gpointer                   user_data);


/**
 * GtkRecentFilterInfo:
 * @contains: #GtkRecentFilterFlags to indicate which fields are set.
 * @uri: (nullable): The URI of the file being tested.
 * @display_name: (nullable): The string that will be used to display
 *    the file in the recent chooser.
 * @mime_type: (nullable): MIME type of the file.
 * @applications: (nullable) (array zero-terminated=1): The list of
 *    applications that have registered the file.
 * @groups: (nullable) (array zero-terminated=1): The groups to which
 *    the file belongs to.
 * @age: The number of days elapsed since the file has been
 *    registered.
 *
 * A GtkRecentFilterInfo struct is used
 * to pass information about the tested file to gtk_recent_filter_filter().
 */
struct _GtkRecentFilterInfo
{
  GtkRecentFilterFlags contains;

  const gchar *uri;
  const gchar *display_name;
  const gchar *mime_type;
  const gchar **applications;
  const gchar **groups;

  gint age;
};

GDK_AVAILABLE_IN_ALL
GType                 gtk_recent_filter_get_type (void) G_GNUC_CONST;

GDK_AVAILABLE_IN_ALL
GtkRecentFilter *     gtk_recent_filter_new      (void);
GDK_AVAILABLE_IN_ALL
void                  gtk_recent_filter_set_name (GtkRecentFilter *filter,
						  const gchar     *name);
GDK_AVAILABLE_IN_ALL
const gchar *         gtk_recent_filter_get_name (GtkRecentFilter *filter);

GDK_AVAILABLE_IN_ALL
void gtk_recent_filter_add_mime_type      (GtkRecentFilter      *filter,
					   const gchar          *mime_type);
GDK_AVAILABLE_IN_ALL
void gtk_recent_filter_add_pattern        (GtkRecentFilter      *filter,
					   const gchar          *pattern);
GDK_AVAILABLE_IN_ALL
void gtk_recent_filter_add_pixbuf_formats (GtkRecentFilter      *filter);
GDK_AVAILABLE_IN_ALL
void gtk_recent_filter_add_application    (GtkRecentFilter      *filter,
					   const gchar          *application);
GDK_AVAILABLE_IN_ALL
void gtk_recent_filter_add_group          (GtkRecentFilter      *filter,
					   const gchar          *group);
GDK_AVAILABLE_IN_ALL
void gtk_recent_filter_add_age            (GtkRecentFilter      *filter,
					   gint                  days);
GDK_AVAILABLE_IN_ALL
void gtk_recent_filter_add_custom         (GtkRecentFilter      *filter,
					   GtkRecentFilterFlags  needed,
					   GtkRecentFilterFunc   func,
					   gpointer              data,
					   GDestroyNotify        data_destroy);

GDK_AVAILABLE_IN_ALL
GtkRecentFilterFlags gtk_recent_filter_get_needed (GtkRecentFilter           *filter);
GDK_AVAILABLE_IN_ALL
gboolean             gtk_recent_filter_filter     (GtkRecentFilter           *filter,
						   const GtkRecentFilterInfo *filter_info);

G_END_DECLS

#endif /* ! __GTK_RECENT_FILTER_H__ */