PROP_URI
};
+
+struct _EvLink {
+ GObject base_instance;
+ EvLinkPrivate *priv;
+};
+
+struct _EvLinkClass {
+ GObjectClass base_class;
+};
+
struct _EvLinkPrivate {
char *title;
char *uri;
int page;
};
-static GObjectClass *parent_class = NULL;
-
G_DEFINE_TYPE (EvLink, ev_link, G_TYPE_OBJECT)
#define EV_LINK_GET_PRIVATE(object) \
ev_link_set_title (EvLink* self, const char *title)
{
g_assert (EV_IS_LINK (self));
- g_assert (title != NULL);
if (self->priv->title != NULL) {
g_free (self->priv->title);
}
-
- self->priv->title = g_strdup (title);
+ if (title)
+ self->priv->title = g_strdup (title);
+ else
+ self->priv->title = NULL;
g_object_notify (G_OBJECT (self), "title");
}
priv->title = NULL;
}
- G_OBJECT_CLASS (parent_class)->dispose (object);
+ G_OBJECT_CLASS (ev_link_parent_class)->dispose (object);
}
static void
{
GObjectClass *g_object_class;
- parent_class = g_type_class_peek_parent (ev_window_class);
-
g_object_class = G_OBJECT_CLASS (ev_window_class);
g_object_class->dispose = ev_window_dispose;
g_object_class->set_property = ev_link_set_property;
g_param_spec_int ("page",
"Link Page",
"The link page",
- 0,
+ -1,
G_MAXINT,
0,
G_PARAM_READWRITE));
"type", EV_LINK_TYPE_EXTERNAL_URI,
NULL));
}
+
+
+
+static void
+ev_link_mapping_free_foreach (EvLinkMapping *mapping)
+{
+ g_object_unref (G_OBJECT (mapping->link));
+ g_free (mapping);
+}
+
+void
+ev_link_mapping_free (GList *link_mapping)
+{
+ if (link_mapping == NULL)
+ return;
+
+ g_list_foreach (link_mapping, (GFunc) (ev_link_mapping_free_foreach), NULL);
+ g_list_free (link_mapping);
+}
+
+
+EvLink *
+ev_link_mapping_find (GList *link_mapping,
+ gdouble x,
+ gdouble y)
+{
+ GList *list;
+ EvLink *link = NULL;
+ int i;
+
+ i = 0;
+
+ for (list = link_mapping; list; list = list->next) {
+ EvLinkMapping *mapping = list->data;
+
+ i++;
+ if ((x >= mapping->x1) &&
+ (y >= mapping->y1) &&
+ (x <= mapping->x2) &&
+ (y <= mapping->y2)) {
+ link = mapping->link;
+ break;
+ }
+ }
+
+ return link;
+}
+