From e0ca7880392b3d064e55406f270e2f68779e3cdc Mon Sep 17 00:00:00 2001 From: Marco Pesenti Gritti Date: Thu, 13 Jan 2005 17:49:01 +0000 Subject: Add support for document links 2005-01-13 Marco Pesenti Gritti * backend/ev-document.c: (ev_document_get_link): * backend/ev-document.h: * pdf/xpdf/pdf-document.cc: * shell/ev-application.c: (ev_application_open): * shell/ev-application.h: * shell/ev-sidebar-links.c: (selection_changed_cb): * shell/ev-view.c: (ev_view_button_release_event), (go_to_link), (ev_view_go_to_link): Add support for document links --- (limited to 'shell') diff --git a/shell/ev-application.c b/shell/ev-application.c index 05f86ce..6664c6a 100644 --- a/shell/ev-application.c +++ b/shell/ev-application.c @@ -29,9 +29,6 @@ #include #include #include -#include - -#include "ev-window.h" struct _EvApplicationPrivate { GList *windows; @@ -169,30 +166,6 @@ ev_application_open (EvApplication *application, GError *err) gtk_widget_destroy (GTK_WIDGET (chooser)); } -void -ev_application_open_link (EvApplication *application, - EvWindow *window, - EvLink *link, - GError *error) -{ - EvLinkType type; - const char *uri; - - type = ev_link_get_link_type (link); - - switch (type) { - case EV_LINK_TYPE_TITLE: - break; - case EV_LINK_TYPE_PAGE: - ev_window_open_link (window, link); - break; - case EV_LINK_TYPE_EXTERNAL_URI: - uri = ev_link_get_uri (link); - gnome_vfs_url_show (uri); - break; - } -} - static void ev_application_class_init (EvApplicationClass *ev_application_class) { diff --git a/shell/ev-application.h b/shell/ev-application.h index a22e7dc..7f30a92 100644 --- a/shell/ev-application.h +++ b/shell/ev-application.h @@ -27,8 +27,6 @@ #include #include "ev-window.h" -#include "ev-document.h" -#include "ev-link.h" G_BEGIN_DECLS @@ -59,10 +57,6 @@ EvApplication *ev_application_get_instance (void); void ev_application_open (EvApplication *application, GError *err); EvWindow *ev_application_new_window (EvApplication *application); -void ev_application_open_link (EvApplication *application, - EvWindow *window, - EvLink *link, - GError *err); G_END_DECLS diff --git a/shell/ev-sidebar-links.c b/shell/ev-sidebar-links.c index 4db11b6..03d445e 100644 --- a/shell/ev-sidebar-links.c +++ b/shell/ev-sidebar-links.c @@ -29,7 +29,7 @@ #include "ev-sidebar-links.h" #include "ev-document-links.h" -#include "ev-application.h" +#include "ev-window.h" /* Amount of time we devote to each iteration of the idle, in microseconds */ #define IDLE_WORK_LENGTH 5000 @@ -105,7 +105,6 @@ selection_changed_cb (GtkTreeSelection *selection, if (gtk_tree_selection_get_selected (selection, &model, &iter)) { EvLink *link; - EvApplication *app; GtkWidget *window; GValue value = {0, }; @@ -118,9 +117,7 @@ selection_changed_cb (GtkTreeSelection *selection, window = gtk_widget_get_ancestor (GTK_WIDGET (ev_sidebar_links), EV_TYPE_WINDOW); if (window) { - app = ev_application_get_instance (); - ev_application_open_link (app, EV_WINDOW (window), - link, NULL); + ev_window_open_link (EV_WINDOW (window), link); } } } diff --git a/shell/ev-view.c b/shell/ev-view.c index 4750b4d..9d1bef3 100644 --- a/shell/ev-view.c +++ b/shell/ev-view.c @@ -24,6 +24,7 @@ #include #include #include +#include #include "ev-marshal.h" #include "ev-view.h" @@ -547,7 +548,19 @@ ev_view_button_release_event (GtkWidget *widget, { EvView *view = EV_VIEW (widget); - ev_view_update_primary_selection (view); + if (view->has_selection) { + ev_view_update_primary_selection (view); + } else { + EvLink *link; + + link = ev_document_get_link (view->document, + event->x, + event->y); + if (link) { + ev_view_go_to_link (view, link); + g_object_unref (link); + } + } return FALSE; } @@ -927,21 +940,36 @@ static void go_to_link (EvView *view, EvLink *link) { EvLinkType type; + const char *uri; int page; type = ev_link_get_link_type (link); - - if (type == EV_LINK_TYPE_PAGE) { - page = ev_link_get_page (link); - set_document_page (view, page); + + switch (type) { + case EV_LINK_TYPE_TITLE: + break; + case EV_LINK_TYPE_PAGE: + page = ev_link_get_page (link); + set_document_page (view, page); + break; + case EV_LINK_TYPE_EXTERNAL_URI: + uri = ev_link_get_uri (link); + gnome_vfs_url_show (uri); + break; } } void ev_view_go_to_link (EvView *view, EvLink *link) { + EvLinkType type; + go_to_link (view, link); - ev_history_add_link (view->history, link); + + type = ev_link_get_link_type (link); + if (type == EV_LINK_TYPE_PAGE) { + ev_history_add_link (view->history, link); + } } static void -- cgit v0.9.1