X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;f=backend%2Fev-link.c;h=7e26a580dae9ac43d784fa1c1badfc939d4de612;hb=a6e6d94bd65dd562a9e802b7a27aa71f8e4ad160;hp=e01aa1994faac78f5c6dc2c833547844842f702b;hpb=0a2a397faf5fe1fb1ac869b4db10b11ef07d1f3b;p=evince.git diff --git a/backend/ev-link.c b/backend/ev-link.c index e01aa199..7e26a580 100644 --- a/backend/ev-link.c +++ b/backend/ev-link.c @@ -32,6 +32,16 @@ enum { PROP_URI }; + +struct _EvLink { + GObject base_instance; + EvLinkPrivate *priv; +}; + +struct _EvLinkClass { + GObjectClass base_class; +}; + struct _EvLinkPrivate { char *title; char *uri; @@ -75,13 +85,14 @@ void 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"); } @@ -304,3 +315,50 @@ ev_link_new_external (const char *title, const char *uri) "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; +} +