]> www.fi.muni.cz Git - evince.git/blobdiff - backend/ev-link.c
Make frontends depend on just libev. Rework and group CFLAGS/LIBS
[evince.git] / backend / ev-link.c
index e01aa1994faac78f5c6dc2c833547844842f702b..ee54b2858800fc5d1248b65a1775465cb8826438 100644 (file)
@@ -32,6 +32,16 @@ enum {
        PROP_URI
 };
 
        PROP_URI
 };
 
+
+struct _EvLink {
+       GObject base_instance;
+       EvLinkPrivate *priv;
+};
+
+struct _EvLinkClass {
+       GObjectClass base_class;
+};
+
 struct _EvLinkPrivate {
        char *title;
        char *uri;
 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));
 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);
        }
 
        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");
 }
 
        g_object_notify (G_OBJECT (self), "title");
 }
@@ -270,7 +281,7 @@ ev_link_class_init (EvLinkClass *ev_window_class)
                                         g_param_spec_int ("page",
                                                           "Link Page",
                                                           "The link page",
                                         g_param_spec_int ("page",
                                                           "Link Page",
                                                           "The link page",
-                                                           0,
+                                                           -1,
                                                            G_MAXINT,
                                                            0,
                                                            G_PARAM_READWRITE));
                                                            G_MAXINT,
                                                            0,
                                                            G_PARAM_READWRITE));
@@ -304,3 +315,51 @@ ev_link_new_external (const char *title, const char *uri)
                                      "type", EV_LINK_TYPE_EXTERNAL_URI,
                                      NULL));
 }
                                      "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;
+}
+