1
/* this file is part of evince, a gnome document viewer
3
* Copyright (C) 2006 Carlos Garcia Campos <carlosgc@gnome.org>
4
* Copyright (C) 2005 Red Hat, Inc.
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.
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.
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.
21
#include "ev-link-action.h"
33
struct _EvLinkAction {
34
GObject base_instance;
36
EvLinkActionPrivate *priv;
39
struct _EvLinkActionClass {
40
GObjectClass base_class;
43
struct _EvLinkActionPrivate {
44
EvLinkActionType type;
52
G_DEFINE_TYPE (EvLinkAction, ev_link_action, G_TYPE_OBJECT)
54
#define EV_LINK_ACTION_GET_PRIVATE(object) \
55
(G_TYPE_INSTANCE_GET_PRIVATE ((object), EV_TYPE_LINK_ACTION, EvLinkActionPrivate))
58
ev_link_action_type_get_type (void)
60
static GType type = 0;
62
if (G_UNLIKELY (type == 0)) {
63
static const GEnumValue values[] = {
64
{ EV_LINK_ACTION_TYPE_GOTO_DEST, "EV_LINK_ACTION_TYPE_GOTO_DEST", "goto-dest" },
65
{ EV_LINK_ACTION_TYPE_GOTO_REMOTE, "EV_LINK_ACTION_TYPE_GOTO_REMOTE", "goto-remote" },
66
{ EV_LINK_ACTION_TYPE_LAUNCH, "EV_LINK_ACTION_TYPE_LAUNCH", "launch" },
67
{ EV_LINK_ACTION_TYPE_EXTERNAL_URI, "EV_LINK_ACTION_TYPE_EXTERNAL_URI", "external-uri"},
68
{ EV_LINK_ACTION_TYPE_NAMED, "EV_LINK_ACTION_TYPE_NAMED", "named"},
72
type = g_enum_register_static ("EvLinkActionType", values);
79
ev_link_action_get_action_type (EvLinkAction *self)
81
g_return_val_if_fail (EV_IS_LINK_ACTION (self), 0);
83
return self->priv->type;
87
ev_link_action_get_dest (EvLinkAction *self)
89
g_return_val_if_fail (EV_IS_LINK_ACTION (self), NULL);
91
return self->priv->dest;
95
ev_link_action_get_uri (EvLinkAction *self)
97
g_return_val_if_fail (EV_IS_LINK_ACTION (self), NULL);
99
return self->priv->uri;
103
ev_link_action_get_filename (EvLinkAction *self)
105
g_return_val_if_fail (EV_IS_LINK_ACTION (self), NULL);
107
return self->priv->filename;
111
ev_link_action_get_params (EvLinkAction *self)
113
g_return_val_if_fail (EV_IS_LINK_ACTION (self), NULL);
115
return self->priv->params;
119
ev_link_action_get_name (EvLinkAction *self)
121
g_return_val_if_fail (EV_IS_LINK_ACTION (self), NULL);
123
return self->priv->name;
127
ev_link_action_get_property (GObject *object,
130
GParamSpec *param_spec)
134
self = EV_LINK_ACTION (object);
138
g_value_set_enum (value, self->priv->type);
141
g_value_set_pointer (value, self->priv->dest);
144
g_value_set_string (value, self->priv->uri);
147
g_value_set_string (value, self->priv->filename);
150
g_value_set_string (value, self->priv->params);
153
g_value_set_string (value, self->priv->name);
156
G_OBJECT_WARN_INVALID_PROPERTY_ID (object,
164
ev_link_action_set_property (GObject *object,
167
GParamSpec *param_spec)
169
EvLinkAction *self = EV_LINK_ACTION (object);
173
self->priv->type = g_value_get_enum (value);
176
self->priv->dest = g_value_get_pointer (value);
179
g_free (self->priv->uri);
180
self->priv->uri = g_value_dup_string (value);
183
g_free (self->priv->filename);
184
self->priv->filename = g_value_dup_string (value);
187
g_free (self->priv->params);
188
self->priv->params = g_value_dup_string (value);
191
g_free (self->priv->name);
192
self->priv->name = g_value_dup_string (value);
195
G_OBJECT_WARN_INVALID_PROPERTY_ID (object,
203
ev_link_action_finalize (GObject *object)
205
EvLinkActionPrivate *priv;
207
priv = EV_LINK_ACTION (object)->priv;
210
g_object_unref (priv->dest);
219
if (priv->filename) {
220
g_free (priv->filename);
221
priv->filename = NULL;
225
g_free (priv->params);
234
G_OBJECT_CLASS (ev_link_action_parent_class)->finalize (object);
238
ev_link_action_init (EvLinkAction *ev_link_action)
240
ev_link_action->priv = EV_LINK_ACTION_GET_PRIVATE (ev_link_action);
242
ev_link_action->priv->dest = NULL;
243
ev_link_action->priv->uri = NULL;
244
ev_link_action->priv->filename = NULL;
245
ev_link_action->priv->params = NULL;
246
ev_link_action->priv->name = NULL;
250
ev_link_action_class_init (EvLinkActionClass *ev_link_action_class)
252
GObjectClass *g_object_class;
254
g_object_class = G_OBJECT_CLASS (ev_link_action_class);
256
g_object_class->set_property = ev_link_action_set_property;
257
g_object_class->get_property = ev_link_action_get_property;
259
g_object_class->finalize = ev_link_action_finalize;
261
g_type_class_add_private (g_object_class, sizeof (EvLinkActionPrivate));
263
g_object_class_install_property (g_object_class,
265
g_param_spec_enum ("type",
267
"The link action type",
268
EV_TYPE_LINK_ACTION_TYPE,
269
EV_LINK_ACTION_TYPE_GOTO_DEST,
271
G_PARAM_CONSTRUCT_ONLY));
272
g_object_class_install_property (g_object_class,
274
g_param_spec_pointer ("dest",
275
"Action destination",
276
"The link action destination",
278
G_PARAM_CONSTRUCT_ONLY));
279
g_object_class_install_property (g_object_class,
281
g_param_spec_string ("uri",
283
"The link action URI",
286
G_PARAM_CONSTRUCT_ONLY));
287
g_object_class_install_property (g_object_class,
289
g_param_spec_string ("filename",
291
"The link action filename",
294
G_PARAM_CONSTRUCT_ONLY));
295
g_object_class_install_property (g_object_class,
297
g_param_spec_string ("params",
299
"The link action params",
302
G_PARAM_CONSTRUCT_ONLY));
303
g_object_class_install_property (g_object_class,
305
g_param_spec_string ("name",
307
"The link action name",
310
G_PARAM_CONSTRUCT_ONLY));
314
ev_link_action_new_dest (EvLinkDest *dest)
316
return EV_LINK_ACTION (g_object_new (EV_TYPE_LINK_ACTION,
318
"type", EV_LINK_ACTION_TYPE_GOTO_DEST,
323
ev_link_action_new_remote (EvLinkDest *dest,
324
const gchar *filename)
326
return EV_LINK_ACTION (g_object_new (EV_TYPE_LINK_ACTION,
328
"filename", filename,
329
"type", EV_LINK_ACTION_TYPE_GOTO_REMOTE,
334
ev_link_action_new_external_uri (const gchar *uri)
336
return EV_LINK_ACTION (g_object_new (EV_TYPE_LINK_ACTION,
338
"type", EV_LINK_ACTION_TYPE_EXTERNAL_URI,
343
ev_link_action_new_launch (const gchar *filename,
346
return EV_LINK_ACTION (g_object_new (EV_TYPE_LINK_ACTION,
347
"filename", filename,
349
"type", EV_LINK_ACTION_TYPE_LAUNCH,
354
ev_link_action_new_named (const gchar *name)
356
return EV_LINK_ACTION (g_object_new (EV_TYPE_LINK_ACTION,
358
"type", EV_LINK_ACTION_TYPE_NAMED,