]> www.fi.muni.cz Git - evince.git/blob - libdocument/ev-link-action.c
Include config.h. Bug #504721.
[evince.git] / libdocument / ev-link-action.c
1 /* this file is part of evince, a gnome document viewer
2  *
3  *  Copyright (C) 2006 Carlos Garcia Campos <carlosgc@gnome.org>
4  *  Copyright (C) 2005 Red Hat, Inc.
5  *
6  * Evince is free software; you can redistribute it and/or modify it
7  * under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * Evince is distributed in the hope that it will be useful, but
12  * WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
19  */
20
21 #include <config.h>
22 #include "ev-link-action.h"
23
24 enum {
25         PROP_0,
26         PROP_TYPE,
27         PROP_DEST,
28         PROP_URI,
29         PROP_FILENAME,
30         PROP_PARAMS,
31         PROP_NAME
32 };
33
34 struct _EvLinkAction {
35         GObject base_instance;
36
37         EvLinkActionPrivate *priv;
38 };
39
40 struct _EvLinkActionClass {
41         GObjectClass base_class;
42 };
43
44 struct _EvLinkActionPrivate {
45         EvLinkActionType  type;
46         EvLinkDest       *dest;
47         gchar            *uri;
48         gchar            *filename;
49         gchar            *params;
50         gchar            *name;
51 };
52
53 G_DEFINE_TYPE (EvLinkAction, ev_link_action, G_TYPE_OBJECT)
54
55 #define EV_LINK_ACTION_GET_PRIVATE(object) \
56         (G_TYPE_INSTANCE_GET_PRIVATE ((object), EV_TYPE_LINK_ACTION, EvLinkActionPrivate))
57
58 GType
59 ev_link_action_type_get_type (void)
60 {
61         static GType type = 0;
62
63         if (G_UNLIKELY (type == 0)) {
64                 static const GEnumValue values[] = {
65                         { EV_LINK_ACTION_TYPE_GOTO_DEST, "EV_LINK_ACTION_TYPE_GOTO_DEST", "goto-dest" },
66                         { EV_LINK_ACTION_TYPE_GOTO_REMOTE, "EV_LINK_ACTION_TYPE_GOTO_REMOTE", "goto-remote" },
67                         { EV_LINK_ACTION_TYPE_LAUNCH, "EV_LINK_ACTION_TYPE_LAUNCH", "launch" },
68                         { EV_LINK_ACTION_TYPE_EXTERNAL_URI, "EV_LINK_ACTION_TYPE_EXTERNAL_URI", "external-uri"},
69                         { EV_LINK_ACTION_TYPE_NAMED, "EV_LINK_ACTION_TYPE_NAMED", "named"},
70                         { 0, NULL, NULL }
71                 };
72
73                 type = g_enum_register_static ("EvLinkActionType", values);
74         }
75
76         return type;
77 }
78
79 EvLinkActionType
80 ev_link_action_get_action_type (EvLinkAction *self)
81 {
82         g_return_val_if_fail (EV_IS_LINK_ACTION (self), 0);
83
84         return self->priv->type;
85 }
86
87 EvLinkDest *
88 ev_link_action_get_dest (EvLinkAction *self)
89 {
90         g_return_val_if_fail (EV_IS_LINK_ACTION (self), NULL);
91
92         return self->priv->dest;
93 }
94
95 const gchar *
96 ev_link_action_get_uri (EvLinkAction *self)
97 {
98         g_return_val_if_fail (EV_IS_LINK_ACTION (self), NULL);
99
100         return self->priv->uri;
101 }
102
103 const gchar *
104 ev_link_action_get_filename (EvLinkAction *self)
105 {
106         g_return_val_if_fail (EV_IS_LINK_ACTION (self), NULL);
107
108         return self->priv->filename;
109 }
110
111 const gchar *
112 ev_link_action_get_params (EvLinkAction *self)
113 {
114         g_return_val_if_fail (EV_IS_LINK_ACTION (self), NULL);
115
116         return self->priv->params;
117 }
118
119 const gchar *
120 ev_link_action_get_name (EvLinkAction *self)
121 {
122         g_return_val_if_fail (EV_IS_LINK_ACTION (self), NULL);
123
124         return self->priv->name;
125 }
126
127 static void
128 ev_link_action_get_property (GObject    *object,
129                              guint       prop_id,
130                              GValue     *value,
131                              GParamSpec *param_spec)
132 {
133         EvLinkAction *self;
134
135         self = EV_LINK_ACTION (object);
136
137         switch (prop_id) {
138                 case PROP_TYPE:
139                         g_value_set_enum (value, self->priv->type);
140                         break;
141                 case PROP_DEST:
142                         g_value_set_pointer (value, self->priv->dest);
143                         break;
144                 case PROP_URI:
145                         g_value_set_string (value, self->priv->uri);
146                         break;
147                 case PROP_FILENAME:
148                         g_value_set_string (value, self->priv->filename);
149                         break;
150                 case PROP_PARAMS:
151                         g_value_set_string (value, self->priv->params);
152                         break;
153                 case PROP_NAME:
154                         g_value_set_string (value, self->priv->name);
155                         break;
156                 default:
157                         G_OBJECT_WARN_INVALID_PROPERTY_ID (object,
158                                                            prop_id,
159                                                            param_spec);
160                         break;
161         }
162 }
163
164 static void
165 ev_link_action_set_property (GObject      *object,
166                              guint         prop_id,
167                              const GValue *value,
168                              GParamSpec   *param_spec)
169 {
170         EvLinkAction *self = EV_LINK_ACTION (object);
171
172         switch (prop_id) {
173                 case PROP_TYPE:
174                         self->priv->type = g_value_get_enum (value);
175                         break;
176                 case PROP_DEST:
177                         self->priv->dest = g_value_get_pointer (value);
178                         break;
179                 case PROP_URI:
180                         g_free (self->priv->uri);
181                         self->priv->uri = g_value_dup_string (value);
182                         break;
183                 case PROP_FILENAME:
184                         g_free (self->priv->filename);
185                         self->priv->filename = g_value_dup_string (value);
186                         break;
187                 case PROP_PARAMS:
188                         g_free (self->priv->params);
189                         self->priv->params = g_value_dup_string (value);
190                         break;
191                 case PROP_NAME:
192                         g_free (self->priv->name);
193                         self->priv->name = g_value_dup_string (value);
194                         break;
195                 default:
196                         G_OBJECT_WARN_INVALID_PROPERTY_ID (object,
197                                                            prop_id,
198                                                            param_spec);
199                         break;
200         }
201 }
202
203 static void
204 ev_link_action_finalize (GObject *object)
205 {
206         EvLinkActionPrivate *priv;
207
208         priv = EV_LINK_ACTION (object)->priv;
209
210         if (priv->dest) {
211                 g_object_unref (priv->dest);
212                 priv->dest = NULL;
213         }
214
215         if (priv->uri) {
216                 g_free (priv->uri);
217                 priv->uri = NULL;
218         }
219
220         if (priv->filename) {
221                 g_free (priv->filename);
222                 priv->filename = NULL;
223         }
224
225         if (priv->params) {
226                 g_free (priv->params);
227                 priv->params = NULL;
228         }
229
230         if (priv->name) {
231                 g_free (priv->name);
232                 priv->name = NULL;
233         }
234
235         G_OBJECT_CLASS (ev_link_action_parent_class)->finalize (object);
236 }
237
238 static void
239 ev_link_action_init (EvLinkAction *ev_link_action)
240 {
241         ev_link_action->priv = EV_LINK_ACTION_GET_PRIVATE (ev_link_action);
242
243         ev_link_action->priv->dest = NULL;
244         ev_link_action->priv->uri = NULL;
245         ev_link_action->priv->filename = NULL;
246         ev_link_action->priv->params = NULL;
247         ev_link_action->priv->name = NULL;
248 }
249
250 static void
251 ev_link_action_class_init (EvLinkActionClass *ev_link_action_class)
252 {
253         GObjectClass *g_object_class;
254
255         g_object_class = G_OBJECT_CLASS (ev_link_action_class);
256
257         g_object_class->set_property = ev_link_action_set_property;
258         g_object_class->get_property = ev_link_action_get_property;
259
260         g_object_class->finalize = ev_link_action_finalize;
261
262         g_type_class_add_private (g_object_class, sizeof (EvLinkActionPrivate));
263
264         g_object_class_install_property (g_object_class,
265                                          PROP_TYPE,
266                                          g_param_spec_enum  ("type",
267                                                              "Action Type",
268                                                              "The link action type",
269                                                              EV_TYPE_LINK_ACTION_TYPE,
270                                                              EV_LINK_ACTION_TYPE_GOTO_DEST,
271                                                              G_PARAM_READWRITE |
272                                                              G_PARAM_CONSTRUCT_ONLY));
273         g_object_class_install_property (g_object_class,
274                                          PROP_DEST,
275                                          g_param_spec_pointer ("dest",
276                                                                "Action destination",
277                                                                "The link action destination",
278                                                                G_PARAM_READWRITE |
279                                                                G_PARAM_CONSTRUCT_ONLY));
280         g_object_class_install_property (g_object_class,
281                                          PROP_URI,
282                                          g_param_spec_string ("uri",
283                                                               "Link Action URI",
284                                                               "The link action URI",
285                                                               NULL,
286                                                               G_PARAM_READWRITE |
287                                                               G_PARAM_CONSTRUCT_ONLY));
288         g_object_class_install_property (g_object_class,
289                                          PROP_FILENAME,
290                                          g_param_spec_string ("filename",
291                                                               "Filename",
292                                                               "The link action filename",
293                                                               NULL,
294                                                               G_PARAM_READWRITE |
295                                                               G_PARAM_CONSTRUCT_ONLY));
296         g_object_class_install_property (g_object_class,
297                                          PROP_PARAMS,
298                                          g_param_spec_string ("params",
299                                                               "Params",
300                                                               "The link action params",
301                                                               NULL,
302                                                               G_PARAM_READWRITE |
303                                                               G_PARAM_CONSTRUCT_ONLY));
304         g_object_class_install_property (g_object_class,
305                                          PROP_NAME,
306                                          g_param_spec_string ("name",
307                                                               "Name",
308                                                               "The link action name",
309                                                               NULL,
310                                                               G_PARAM_READWRITE |
311                                                               G_PARAM_CONSTRUCT_ONLY));
312 }
313
314 EvLinkAction *
315 ev_link_action_new_dest (EvLinkDest *dest)
316 {
317         return EV_LINK_ACTION (g_object_new (EV_TYPE_LINK_ACTION,
318                                              "dest", dest,
319                                              "type", EV_LINK_ACTION_TYPE_GOTO_DEST,
320                                              NULL));
321 }
322
323 EvLinkAction *
324 ev_link_action_new_remote (EvLinkDest  *dest,
325                            const gchar *filename)
326 {
327         return EV_LINK_ACTION (g_object_new (EV_TYPE_LINK_ACTION,
328                                              "dest", dest,
329                                              "filename", filename,
330                                              "type", EV_LINK_ACTION_TYPE_GOTO_REMOTE,
331                                              NULL));
332 }
333
334 EvLinkAction *
335 ev_link_action_new_external_uri (const gchar *uri)
336 {
337         return EV_LINK_ACTION (g_object_new (EV_TYPE_LINK_ACTION,
338                                              "uri", uri,
339                                              "type", EV_LINK_ACTION_TYPE_EXTERNAL_URI,
340                                              NULL));
341 }
342
343 EvLinkAction *
344 ev_link_action_new_launch (const gchar *filename,
345                            const gchar *params)
346 {
347         return EV_LINK_ACTION (g_object_new (EV_TYPE_LINK_ACTION,
348                                              "filename", filename,
349                                              "params", params,
350                                              "type", EV_LINK_ACTION_TYPE_LAUNCH,
351                                              NULL));
352 }
353
354 EvLinkAction *
355 ev_link_action_new_named (const gchar *name)
356 {
357         return EV_LINK_ACTION (g_object_new (EV_TYPE_LINK_ACTION,
358                                              "name", name,
359                                              "type", EV_LINK_ACTION_TYPE_NAMED,
360                                              NULL));
361 }