Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/shell
diff options
context:
space:
mode:
authorMarco Pesenti Gritti <marco@gnome.org>2005-01-13 17:49:01 (GMT)
committer Marco Pesenti Gritti <marco@src.gnome.org>2005-01-13 17:49:01 (GMT)
commite0ca7880392b3d064e55406f270e2f68779e3cdc (patch)
tree684585ef2bc8531c2471490ffb5b130b7cc34f23 /shell
parentddc0ad5b3bd75a640ba362cdccde7449654bae61 (diff)
Add support for document links
2005-01-13 Marco Pesenti Gritti <marco@gnome.org> * 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
Diffstat (limited to 'shell')
-rw-r--r--shell/ev-application.c27
-rw-r--r--shell/ev-application.h6
-rw-r--r--shell/ev-sidebar-links.c7
-rw-r--r--shell/ev-view.c40
4 files changed, 36 insertions, 44 deletions
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 <gtk/gtkstock.h>
#include <gtk/gtkwidget.h>
#include <gtk/gtkmain.h>
-#include <libgnomevfs/gnome-vfs-utils.h>
-
-#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 <glib-object.h>
#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 <gtk/gtkselection.h>
#include <gtk/gtkclipboard.h>
#include <gdk/gdkkeysyms.h>
+#include <libgnomevfs/gnome-vfs-utils.h>
#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