]> www.fi.muni.cz Git - evince.git/blobdiff - backend/ev-link.c
use the new tiff2ps interfaces
[evince.git] / backend / ev-link.c
index 14ef3a244f2322e661ddcbfd35ca5dffa4cba42f..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;
@@ -39,8 +49,6 @@ struct _EvLinkPrivate {
        int page;
 };
 
        int page;
 };
 
-static GObjectClass *parent_class = NULL;
-
 G_DEFINE_TYPE (EvLink, ev_link, G_TYPE_OBJECT)
 
 #define EV_LINK_GET_PRIVATE(object) \
 G_DEFINE_TYPE (EvLink, ev_link, G_TYPE_OBJECT)
 
 #define EV_LINK_GET_PRIVATE(object) \
@@ -77,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");
 }
@@ -219,7 +228,7 @@ ev_window_dispose (GObject *object)
                priv->title = NULL;
        }
 
                priv->title = NULL;
        }
 
-       G_OBJECT_CLASS (parent_class)->dispose (object);
+       G_OBJECT_CLASS (ev_link_parent_class)->dispose (object);
 }
 
 static void
 }
 
 static void
@@ -235,8 +244,6 @@ ev_link_class_init (EvLinkClass *ev_window_class)
 {
        GObjectClass *g_object_class;
 
 {
        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_object_class = G_OBJECT_CLASS (ev_window_class);
        g_object_class->dispose = ev_window_dispose;
        g_object_class->set_property = ev_link_set_property;
@@ -274,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));
@@ -308,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;
+}
+