1 | /* GTK - The GIMP Toolkit |
2 | * gtkrecentmanager.h: a manager for the recently used resources |
3 | * |
4 | * Copyright (C) 2006 Emmanuele Bassi |
5 | * |
6 | * This library is free software; you can redistribute it and/or |
7 | * modify it under the terms of the GNU Library General Public |
8 | * License as published by the Free Software Foundation; either |
9 | * version 2 of the License, or (at your option) any later version. |
10 | * |
11 | * This library is distributed in the hope that it will be useful, |
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
14 | * Library General Public License for more details. |
15 | * |
16 | * You should have received a copy of the GNU Library General Public |
17 | * License along with this library. If not, see <http://www.gnu.org/licenses/>. |
18 | */ |
19 | |
20 | #ifndef __GTK_RECENT_MANAGER_H__ |
21 | #define __GTK_RECENT_MANAGER_H__ |
22 | |
23 | #if !defined (__GTK_H_INSIDE__) && !defined (GTK_COMPILATION) |
24 | #error "Only <gtk/gtk.h> can be included directly." |
25 | #endif |
26 | |
27 | #include <gdk-pixbuf/gdk-pixbuf.h> |
28 | #include <gdk/gdk.h> |
29 | #include <time.h> |
30 | |
31 | G_BEGIN_DECLS |
32 | |
33 | #define GTK_TYPE_RECENT_INFO (gtk_recent_info_get_type ()) |
34 | |
35 | #define GTK_TYPE_RECENT_MANAGER (gtk_recent_manager_get_type ()) |
36 | #define GTK_RECENT_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_RECENT_MANAGER, GtkRecentManager)) |
37 | #define GTK_IS_RECENT_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_RECENT_MANAGER)) |
38 | #define GTK_RECENT_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GTK_TYPE_RECENT_MANAGER, GtkRecentManagerClass)) |
39 | #define GTK_IS_RECENT_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_RECENT_MANAGER)) |
40 | #define GTK_RECENT_MANAGER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_RECENT_MANAGER, GtkRecentManagerClass)) |
41 | |
42 | typedef struct _GtkRecentInfo GtkRecentInfo; |
43 | typedef struct _GtkRecentData GtkRecentData; |
44 | typedef struct _GtkRecentManager GtkRecentManager; |
45 | typedef struct _GtkRecentManagerClass GtkRecentManagerClass; |
46 | typedef struct _GtkRecentManagerPrivate GtkRecentManagerPrivate; |
47 | |
48 | /** |
49 | * GtkRecentData: |
50 | * @display_name: a UTF-8 encoded string, containing the name of the recently |
51 | * used resource to be displayed, or %NULL; |
52 | * @description: a UTF-8 encoded string, containing a short description of |
53 | * the resource, or %NULL; |
54 | * @mime_type: the MIME type of the resource; |
55 | * @app_name: the name of the application that is registering this recently |
56 | * used resource; |
57 | * @app_exec: command line used to launch this resource; may contain the |
58 | * ā\%fā and ā\%uā escape characters which will be expanded |
59 | * to the resource file path and URI respectively when the command line |
60 | * is retrieved; |
61 | * @groups: (array zero-terminated=1): a vector of strings containing |
62 | * groups names; |
63 | * @is_private: whether this resource should be displayed only by the |
64 | * applications that have registered it or not. |
65 | * |
66 | * Meta-data to be passed to gtk_recent_manager_add_full() when |
67 | * registering a recently used resource. |
68 | **/ |
69 | struct _GtkRecentData |
70 | { |
71 | gchar *display_name; |
72 | gchar *description; |
73 | |
74 | gchar *mime_type; |
75 | |
76 | gchar *app_name; |
77 | gchar *app_exec; |
78 | |
79 | gchar **groups; |
80 | |
81 | gboolean is_private; |
82 | }; |
83 | |
84 | /** |
85 | * GtkRecentManager: |
86 | * |
87 | * #GtkRecentManager-struct contains only private data |
88 | * and should be accessed using the provided API. |
89 | * |
90 | * Since: 2.10 |
91 | */ |
92 | struct _GtkRecentManager |
93 | { |
94 | /*< private >*/ |
95 | GObject parent_instance; |
96 | |
97 | GtkRecentManagerPrivate *priv; |
98 | }; |
99 | |
100 | /** |
101 | * GtkRecentManagerClass: |
102 | * |
103 | * #GtkRecentManagerClass contains only private data. |
104 | * |
105 | * Since: 2.10 |
106 | */ |
107 | struct _GtkRecentManagerClass |
108 | { |
109 | /*< private >*/ |
110 | GObjectClass parent_class; |
111 | |
112 | void (*changed) (GtkRecentManager *manager); |
113 | |
114 | /* padding for future expansion */ |
115 | void (*_gtk_recent1) (void); |
116 | void (*_gtk_recent2) (void); |
117 | void (*_gtk_recent3) (void); |
118 | void (*_gtk_recent4) (void); |
119 | }; |
120 | |
121 | /** |
122 | * GtkRecentManagerError: |
123 | * @GTK_RECENT_MANAGER_ERROR_NOT_FOUND: the URI specified does not exists in |
124 | * the recently used resources list. |
125 | * @GTK_RECENT_MANAGER_ERROR_INVALID_URI: the URI specified is not valid. |
126 | * @GTK_RECENT_MANAGER_ERROR_INVALID_ENCODING: the supplied string is not |
127 | * UTF-8 encoded. |
128 | * @GTK_RECENT_MANAGER_ERROR_NOT_REGISTERED: no application has registered |
129 | * the specified item. |
130 | * @GTK_RECENT_MANAGER_ERROR_READ: failure while reading the recently used |
131 | * resources file. |
132 | * @GTK_RECENT_MANAGER_ERROR_WRITE: failure while writing the recently used |
133 | * resources file. |
134 | * @GTK_RECENT_MANAGER_ERROR_UNKNOWN: unspecified error. |
135 | * |
136 | * Error codes for #GtkRecentManager operations |
137 | * |
138 | * Since: 2.10 |
139 | */ |
140 | typedef enum |
141 | { |
142 | GTK_RECENT_MANAGER_ERROR_NOT_FOUND, |
143 | GTK_RECENT_MANAGER_ERROR_INVALID_URI, |
144 | GTK_RECENT_MANAGER_ERROR_INVALID_ENCODING, |
145 | GTK_RECENT_MANAGER_ERROR_NOT_REGISTERED, |
146 | GTK_RECENT_MANAGER_ERROR_READ, |
147 | GTK_RECENT_MANAGER_ERROR_WRITE, |
148 | GTK_RECENT_MANAGER_ERROR_UNKNOWN |
149 | } GtkRecentManagerError; |
150 | |
151 | /** |
152 | * GTK_RECENT_MANAGER_ERROR: |
153 | * |
154 | * The #GError domain for #GtkRecentManager errors. |
155 | * |
156 | * Since: 2.10 |
157 | */ |
158 | #define GTK_RECENT_MANAGER_ERROR (gtk_recent_manager_error_quark ()) |
159 | GDK_AVAILABLE_IN_ALL |
160 | GQuark gtk_recent_manager_error_quark (void); |
161 | |
162 | |
163 | GDK_AVAILABLE_IN_ALL |
164 | GType gtk_recent_manager_get_type (void) G_GNUC_CONST; |
165 | |
166 | GDK_AVAILABLE_IN_ALL |
167 | GtkRecentManager *gtk_recent_manager_new (void); |
168 | GDK_AVAILABLE_IN_ALL |
169 | GtkRecentManager *gtk_recent_manager_get_default (void); |
170 | |
171 | GDK_AVAILABLE_IN_ALL |
172 | gboolean gtk_recent_manager_add_item (GtkRecentManager *manager, |
173 | const gchar *uri); |
174 | GDK_AVAILABLE_IN_ALL |
175 | gboolean gtk_recent_manager_add_full (GtkRecentManager *manager, |
176 | const gchar *uri, |
177 | const GtkRecentData *recent_data); |
178 | GDK_AVAILABLE_IN_ALL |
179 | gboolean gtk_recent_manager_remove_item (GtkRecentManager *manager, |
180 | const gchar *uri, |
181 | GError **error); |
182 | GDK_AVAILABLE_IN_ALL |
183 | GtkRecentInfo * gtk_recent_manager_lookup_item (GtkRecentManager *manager, |
184 | const gchar *uri, |
185 | GError **error); |
186 | GDK_AVAILABLE_IN_ALL |
187 | gboolean gtk_recent_manager_has_item (GtkRecentManager *manager, |
188 | const gchar *uri); |
189 | GDK_AVAILABLE_IN_ALL |
190 | gboolean gtk_recent_manager_move_item (GtkRecentManager *manager, |
191 | const gchar *uri, |
192 | const gchar *new_uri, |
193 | GError **error); |
194 | GDK_AVAILABLE_IN_ALL |
195 | GList * gtk_recent_manager_get_items (GtkRecentManager *manager); |
196 | GDK_AVAILABLE_IN_ALL |
197 | gint gtk_recent_manager_purge_items (GtkRecentManager *manager, |
198 | GError **error); |
199 | |
200 | |
201 | GDK_AVAILABLE_IN_ALL |
202 | GType gtk_recent_info_get_type (void) G_GNUC_CONST; |
203 | |
204 | GDK_AVAILABLE_IN_ALL |
205 | GtkRecentInfo * gtk_recent_info_ref (GtkRecentInfo *info); |
206 | GDK_AVAILABLE_IN_ALL |
207 | void gtk_recent_info_unref (GtkRecentInfo *info); |
208 | |
209 | GDK_AVAILABLE_IN_ALL |
210 | const gchar * gtk_recent_info_get_uri (GtkRecentInfo *info); |
211 | GDK_AVAILABLE_IN_ALL |
212 | const gchar * gtk_recent_info_get_display_name (GtkRecentInfo *info); |
213 | GDK_AVAILABLE_IN_ALL |
214 | const gchar * gtk_recent_info_get_description (GtkRecentInfo *info); |
215 | GDK_AVAILABLE_IN_ALL |
216 | const gchar * gtk_recent_info_get_mime_type (GtkRecentInfo *info); |
217 | GDK_AVAILABLE_IN_ALL |
218 | time_t gtk_recent_info_get_added (GtkRecentInfo *info); |
219 | GDK_AVAILABLE_IN_ALL |
220 | time_t gtk_recent_info_get_modified (GtkRecentInfo *info); |
221 | GDK_AVAILABLE_IN_ALL |
222 | time_t gtk_recent_info_get_visited (GtkRecentInfo *info); |
223 | GDK_AVAILABLE_IN_ALL |
224 | gboolean gtk_recent_info_get_private_hint (GtkRecentInfo *info); |
225 | GDK_AVAILABLE_IN_ALL |
226 | gboolean gtk_recent_info_get_application_info (GtkRecentInfo *info, |
227 | const gchar *app_name, |
228 | const gchar **app_exec, |
229 | guint *count, |
230 | time_t *time_); |
231 | GDK_AVAILABLE_IN_ALL |
232 | GAppInfo * gtk_recent_info_create_app_info (GtkRecentInfo *info, |
233 | const gchar *app_name, |
234 | GError **error); |
235 | GDK_AVAILABLE_IN_ALL |
236 | gchar ** gtk_recent_info_get_applications (GtkRecentInfo *info, |
237 | gsize *length) G_GNUC_MALLOC; |
238 | GDK_AVAILABLE_IN_ALL |
239 | gchar * gtk_recent_info_last_application (GtkRecentInfo *info) G_GNUC_MALLOC; |
240 | GDK_AVAILABLE_IN_ALL |
241 | gboolean gtk_recent_info_has_application (GtkRecentInfo *info, |
242 | const gchar *app_name); |
243 | GDK_AVAILABLE_IN_ALL |
244 | gchar ** gtk_recent_info_get_groups (GtkRecentInfo *info, |
245 | gsize *length) G_GNUC_MALLOC; |
246 | GDK_AVAILABLE_IN_ALL |
247 | gboolean gtk_recent_info_has_group (GtkRecentInfo *info, |
248 | const gchar *group_name); |
249 | GDK_AVAILABLE_IN_ALL |
250 | GdkPixbuf * gtk_recent_info_get_icon (GtkRecentInfo *info, |
251 | gint size); |
252 | GDK_AVAILABLE_IN_ALL |
253 | GIcon * gtk_recent_info_get_gicon (GtkRecentInfo *info); |
254 | GDK_AVAILABLE_IN_ALL |
255 | gchar * gtk_recent_info_get_short_name (GtkRecentInfo *info) G_GNUC_MALLOC; |
256 | GDK_AVAILABLE_IN_ALL |
257 | gchar * gtk_recent_info_get_uri_display (GtkRecentInfo *info) G_GNUC_MALLOC; |
258 | GDK_AVAILABLE_IN_ALL |
259 | gint gtk_recent_info_get_age (GtkRecentInfo *info); |
260 | GDK_AVAILABLE_IN_ALL |
261 | gboolean gtk_recent_info_is_local (GtkRecentInfo *info); |
262 | GDK_AVAILABLE_IN_ALL |
263 | gboolean gtk_recent_info_exists (GtkRecentInfo *info); |
264 | GDK_AVAILABLE_IN_ALL |
265 | gboolean gtk_recent_info_match (GtkRecentInfo *info_a, |
266 | GtkRecentInfo *info_b); |
267 | |
268 | /* private */ |
269 | void _gtk_recent_manager_sync (void); |
270 | |
271 | G_END_DECLS |
272 | |
273 | #endif /* __GTK_RECENT_MANAGER_H__ */ |
274 | |