Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/shell
diff options
context:
space:
mode:
authorCarlos Garcia Campos <carlosgc@gnome.org>2006-05-02 19:02:46 (GMT)
committer Carlos Garcia Campos <carlosgc@src.gnome.org>2006-05-02 19:02:46 (GMT)
commit67297a0108ba18a69972c98ee1771c3dad41d55b (patch)
tree37e49b1a02bc066b645591156daceb11065caf36 /shell
parentc9c1e2212e37fb03d5e4ce4192cfe3f8a7515c5c (diff)
Rework links system, it adds support for remote links now and it makes
2006-05-02 Carlos Garcia Campos <carlosgc@gnome.org> * backend/Makefile.am: * backend/ev-document-links.[ch]: * backend/ev-document.[ch]: * backend/ev-link-action.[ch]: * backend/ev-link-dest.[ch]: * backend/ev-link.[ch]: * pdf/ev-poppler.cc: (pdf_document_find_link_dest), (ev_link_dest_from_dest), (ev_link_from_action), (build_tree): * shell/ev-page-action.c: (build_new_tree_cb): * shell/ev-sidebar-links.c: (get_page_from_dest), (print_section_cb), (links_page_num_func), (update_page_callback): * shell/ev-view.[ch]: (ev_view_goto_dest), (ev_view_handle_link), (tip_from_link): * shell/ev-jobs.c: * shell/ev-window.[ch]: (ev_window_open_uri), (sidebar_links_link_activated_cb), (ev_view_popup_cmd_open_link): * shell/ev-application.[ch]: (ev_application_open_window), (ev_application_open_uri): Rework links system, it adds support for remote links now and it makes easier to add new kinds of actions and destinations. Fixes bug #317292
Diffstat (limited to 'shell')
-rw-r--r--shell/ev-application.c46
-rw-r--r--shell/ev-application.h20
-rw-r--r--shell/ev-jobs.c8
-rw-r--r--shell/ev-page-action.c20
-rw-r--r--shell/ev-sidebar-links.c94
-rw-r--r--shell/ev-view.c365
-rw-r--r--shell/ev-view.h4
-rw-r--r--shell/ev-window.c233
-rw-r--r--shell/ev-window.h5
-rw-r--r--shell/main.c2
10 files changed, 519 insertions, 278 deletions
diff --git a/shell/ev-application.c b/shell/ev-application.c
index 8721a0c..de5e3a0 100644
--- a/shell/ev-application.c
+++ b/shell/ev-application.c
@@ -185,7 +185,6 @@ ev_application_open_window (EvApplication *application,
#else
gtk_window_present (GTK_WINDOW (new_window));
#endif
-
return TRUE;
}
@@ -236,16 +235,15 @@ ev_application_get_uri_window (EvApplication *application, const char *uri)
return uri_window;
}
-gboolean
-ev_application_open_uri (EvApplication *application,
- const char *uri,
- const char *page_label,
- guint timestamp,
- GError **error)
+void
+ev_application_open_uri_at_dest (EvApplication *application,
+ const char *uri,
+ EvLinkDest *dest,
+ guint timestamp)
{
EvWindow *new_window;
- g_return_val_if_fail (uri != NULL, FALSE);
+ g_return_if_fail (uri != NULL);
new_window = ev_application_get_uri_window (application, uri);
if (new_window != NULL) {
@@ -254,8 +252,11 @@ ev_application_open_uri (EvApplication *application,
timestamp);
#else
gtk_window_present (GTK_WINDOW (new_window));
-#endif
- return TRUE;
+#endif
+ if (dest)
+ ev_window_goto_dest (new_window, dest);
+
+ return;
}
new_window = ev_application_get_empty_window (application);
@@ -266,7 +267,7 @@ ev_application_open_uri (EvApplication *application,
/* We need to load uri before showing the window, so
we can restore window size without flickering */
- ev_window_open_uri (new_window, uri);
+ ev_window_open_uri (new_window, uri, dest);
gtk_widget_show (GTK_WIDGET (new_window));
@@ -276,9 +277,22 @@ ev_application_open_uri (EvApplication *application,
#else
gtk_window_present (GTK_WINDOW (new_window));
#endif
+}
+
+gboolean
+ev_application_open_uri (EvApplication *application,
+ const char *uri,
+ const char *page_label,
+ guint timestamp,
+ GError **error)
+{
+ ev_application_open_uri_at_dest (application, uri, NULL, timestamp);
+
+ if (page_label && strcmp (page_label, "") != 0) {
+ EvWindow *window;
- if (page_label != NULL) {
- ev_window_open_page_label (new_window, page_label);
+ window = ev_application_get_uri_window (application, uri);
+ ev_window_open_page_label (window, page_label);
}
return TRUE;
@@ -293,9 +307,7 @@ ev_application_open_uri_list (EvApplication *application,
for (l = uri_list; l != NULL; l = l->next) {
ev_application_open_uri (application, (char *)l->data,
- NULL,
- timestamp,
- NULL);
+ NULL, timestamp, NULL);
}
}
@@ -388,7 +400,7 @@ void ev_application_save_toolbars_model (EvApplication *application)
application->toolbars_file, "1.0");
}
-void ev_application_set_chooser_uri (EvApplication *application, gchar *uri)
+void ev_application_set_chooser_uri (EvApplication *application, const gchar *uri)
{
g_free (application->last_chooser_uri);
application->last_chooser_uri = g_strdup (uri);
diff --git a/shell/ev-application.h b/shell/ev-application.h
index bad967d..2202a9a 100644
--- a/shell/ev-application.h
+++ b/shell/ev-application.h
@@ -39,7 +39,7 @@ typedef struct _EvApplicationPrivate EvApplicationPrivate;
#define EV_TYPE_APPLICATION (ev_application_get_type ())
#define EV_APPLICATION(object) (G_TYPE_CHECK_INSTANCE_CAST((object), EV_TYPE_APPLICATION, EvApplication))
-#define EV_APPLICATION_CLASS(klass) (G_TYPE_CHACK_CLASS_CAST((klass), EV_TYPE_APPLICATION, EvApplicationClass))
+#define EV_APPLICATION_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), EV_TYPE_APPLICATION, EvApplicationClass))
#define EV_IS_APPLICATION(object) (G_TYPE_CHECK_INSTANCE_TYPE((object), EV_TYPE_APPLICATION))
#define EV_IS_APPLICATION_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE((klass), EV_TYPE_APPLICATION))
#define EV_APPLICATION_GET_CLASS(object) (G_TYPE_INSTANCE_GET_CLASS((object), EV_TYPE_APPLICATION, EvApplicationClass))
@@ -68,13 +68,17 @@ void ev_application_shutdown (EvApplication *application);
gboolean ev_application_open_window (EvApplication *application,
- guint32 timestamp,
+ guint32 timestamp,
GError **error);
gboolean ev_application_open_uri (EvApplication *application,
- const char *uri,
- const char *page_label,
- guint32 timestamp,
+ const char *uri,
+ const char *page_label,
+ guint timestamp,
GError **error);
+void ev_application_open_uri_at_dest (EvApplication *application,
+ const char *uri,
+ EvLinkDest *dest,
+ guint32 timestamp);
void ev_application_open_uri_list (EvApplication *application,
GSList *uri_list,
guint32 timestamp);
@@ -83,9 +87,9 @@ GList *ev_application_get_windows (EvApplication *application);
EggToolbarsModel *ev_application_get_toolbars_model (EvApplication *application);
void ev_application_save_toolbars_model (EvApplication *application);
EggRecentModel *ev_application_get_recent_model (EvApplication *application);
-void ev_application_set_chooser_uri (EvApplication *application,
- gchar *uri);
-const gchar *ev_application_get_chooser_uri (EvApplication *application);
+void ev_application_set_chooser_uri (EvApplication *application,
+ const gchar *uri);
+const gchar *ev_application_get_chooser_uri (EvApplication *application);
G_END_DECLS
diff --git a/shell/ev-jobs.c b/shell/ev-jobs.c
index 7a37b2b..fff0cf2 100644
--- a/shell/ev-jobs.c
+++ b/shell/ev-jobs.c
@@ -272,9 +272,13 @@ ev_job_render_run (EvJobRender *job)
} else {
job->pixbuf = ev_document_render_pixbuf (EV_JOB (job)->document, job->rc);
if (job->include_links)
- job->link_mapping = ev_document_get_links (EV_JOB (job)->document, job->rc->page);
+ job->link_mapping =
+ ev_document_links_get_links (EV_DOCUMENT_LINKS (EV_JOB (job)->document),
+ job->rc->page);
if (job->include_text && EV_IS_SELECTION (EV_JOB (job)->document))
- job->text_mapping = ev_selection_get_selection_map (EV_SELECTION (EV_JOB (job)->document), job->rc);
+ job->text_mapping =
+ ev_selection_get_selection_map (EV_SELECTION (EV_JOB (job)->document),
+ job->rc);
if (job->include_selection && EV_IS_SELECTION (EV_JOB (job)->document)) {
ev_selection_render_selection (EV_SELECTION (EV_JOB (job)->document),
job->rc,
diff --git a/shell/ev-page-action.c b/shell/ev-page-action.c
index fc81cb7..97abd1a 100644
--- a/shell/ev-page-action.c
+++ b/shell/ev-page-action.c
@@ -293,12 +293,25 @@ build_new_tree_cb (GtkTreeModel *model,
{
GtkTreeModel *filter_model = GTK_TREE_MODEL (data);
EvLink *link;
+ EvLinkAction *action;
+ EvLinkActionType type;
gtk_tree_model_get (model, iter,
EV_DOCUMENT_LINKS_COLUMN_LINK, &link,
-1);
- if (link && ev_link_get_page (link) >= 0) {
+ if (!link)
+ return FALSE;
+
+ action = ev_link_get_action (link);
+ if (!action) {
+ g_object_unref (link);
+ return FALSE;
+ }
+
+ type = ev_link_action_get_action_type (action);
+
+ if (type == EV_LINK_ACTION_TYPE_GOTO_DEST) {
GtkTreeIter filter_iter;
gtk_list_store_append (GTK_LIST_STORE (filter_model), &filter_iter);
@@ -307,8 +320,7 @@ build_new_tree_cb (GtkTreeModel *model,
-1);
}
- if (link)
- g_object_unref (link);
+ g_object_unref (link);
return FALSE;
}
@@ -410,7 +422,7 @@ match_completion (GtkEntryCompletion *completion,
gtk_tree_iter_free (iter);
- if (text && key ) {
+ if (text && key) {
gchar *normalized_text;
gchar *normalized_key;
gchar *case_normalized_text;
diff --git a/shell/ev-sidebar-links.c b/shell/ev-sidebar-links.c
index 386cdd5..5a139aa 100644
--- a/shell/ev-sidebar-links.c
+++ b/shell/ev-sidebar-links.c
@@ -262,6 +262,27 @@ create_loading_model (void)
return retval;
}
+static gint
+get_page_from_link (EvLink *link)
+{
+ EvLinkAction *action;
+ EvLinkDest *dest;
+
+ action = ev_link_get_action (link);
+ if (!action)
+ return -1;
+
+ if (ev_link_action_get_action_type (action) !=
+ EV_LINK_ACTION_TYPE_GOTO_DEST)
+ return -1;
+
+ dest = ev_link_action_get_dest (action);
+ if (dest)
+ return ev_link_dest_get_page (dest);
+
+ return -1;
+}
+
static void
print_section_cb (GtkWidget *menuitem, EvSidebarLinks *sidebar)
{
@@ -275,27 +296,39 @@ print_section_cb (GtkWidget *menuitem, EvSidebarLinks *sidebar)
if (gtk_tree_selection_get_selected (selection, &model, &iter)) {
EvLink *link;
- int first_page, last_page;
+ int first_page, last_page = -1;
gtk_tree_model_get (model, &iter,
EV_DOCUMENT_LINKS_COLUMN_LINK, &link,
-1);
- first_page = ev_link_get_page (link) + 1;
- if (link)
+ if (!link)
+ return;
+
+ first_page = get_page_from_link (link) + 1;
+ if (first_page == -1) {
g_object_unref (link);
+ return;
+ }
+
+ first_page++;
+ g_object_unref (link);
if (gtk_tree_model_iter_next (model, &iter)) {
gtk_tree_model_get (model, &iter,
EV_DOCUMENT_LINKS_COLUMN_LINK, &link,
-1);
- last_page = ev_link_get_page (link);
- if (link)
- g_object_unref (link);
+ if (link) {
+ last_page = get_page_from_link (link);
+ g_object_unref (link);
+ }
} else {
- last_page = ev_page_cache_get_n_pages (sidebar->priv->page_cache);
+ last_page = ev_page_cache_get_n_pages (sidebar->priv->page_cache);
}
+
+ if (last_page == -1)
+ last_page = ev_page_cache_get_n_pages (sidebar->priv->page_cache);
window = gtk_widget_get_toplevel (GTK_WIDGET (sidebar));
if (EV_IS_WINDOW (window)) {
@@ -442,17 +475,27 @@ links_page_num_func (GtkTreeViewColumn *tree_column,
EvSidebarLinks *sidebar_links)
{
EvLink *link;
+ gint page;
gtk_tree_model_get (tree_model, iter,
EV_DOCUMENT_LINKS_COLUMN_LINK, &link,
-1);
-
- if (link != NULL &&
- ev_link_get_page (link) >= 0) {
+
+ if (!link) {
+ g_object_set (cell,
+ "visible", FALSE,
+ NULL);
+ return;
+ }
+
+ page = get_page_from_link (link);
+
+ if (page >= 0) {
gchar *page_label;
gchar *page_string;
- page_label = ev_page_cache_get_page_label (sidebar_links->priv->page_cache, ev_link_get_page (link));
+ page_label = ev_page_cache_get_page_label (sidebar_links->priv->page_cache,
+ page);
page_string = g_markup_printf_escaped ("<i>%s</i>", page_label);
g_object_set (cell,
@@ -468,8 +511,7 @@ links_page_num_func (GtkTreeViewColumn *tree_column,
NULL);
}
- if (link)
- g_object_unref (link);
+ g_object_unref (link);
}
/* Public Functions */
@@ -499,18 +541,23 @@ update_page_callback_foreach (GtkTreeModel *model,
if (link) {
int current_page;
+ int dest_page;
+ dest_page = get_page_from_link (link);
+ g_object_unref (link);
+
current_page = ev_page_cache_get_current_page (sidebar_links->priv->page_cache);
- if (ev_link_get_page (link) == current_page) {
+
+ if (dest_page == current_page) {
GtkTreeSelection *selection;
selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (sidebar_links->priv->tree_view));
+ gtk_tree_view_expand_to_path (GTK_TREE_VIEW (sidebar_links->priv->tree_view),
+ path);
gtk_tree_selection_select_path (selection, path);
- g_object_unref (link);
return TRUE;
}
- g_object_unref (link);
}
return FALSE;
@@ -524,7 +571,7 @@ update_page_callback (EvPageCache *page_cache,
GtkTreeSelection *selection;
GtkTreeModel *model;
GtkTreeIter iter;
-
+
selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (sidebar_links->priv->tree_view));
if (gtk_tree_selection_get_selected (selection, &model, &iter)) {
@@ -534,13 +581,15 @@ update_page_callback (EvPageCache *page_cache,
EV_DOCUMENT_LINKS_COLUMN_LINK, &link,
-1);
if (link) {
- gint current_page;
+ gint current_page;
+ gint dest_page;
+
+ dest_page = get_page_from_link (link);
+ g_object_unref (link);
+
current_page = ev_page_cache_get_current_page (sidebar_links->priv->page_cache);
- if (ev_link_get_page (link) == current_page) {
- g_object_unref (link);
+ if (dest_page == current_page)
return;
- }
- g_object_unref (link);
}
}
@@ -555,6 +604,7 @@ update_page_callback (EvPageCache *page_cache,
gtk_tree_model_foreach (model,
update_page_callback_foreach,
sidebar_links);
+
g_signal_handler_unblock (selection, sidebar_links->priv->selection_id);
g_signal_handler_unblock (sidebar_links->priv->tree_view, sidebar_links->priv->row_activated_id);
diff --git a/shell/ev-view.c b/shell/ev-view.c
index 9925d5a..0380e22 100644
--- a/shell/ev-view.c
+++ b/shell/ev-view.c
@@ -33,6 +33,7 @@
#include "ev-view-private.h"
#include "ev-utils.h"
#include "ev-selection.h"
+#include "ev-document-links.h"
#include "ev-document-find.h"
#include "ev-document-misc.h"
#include "ev-debug.h"
@@ -1075,23 +1076,23 @@ ev_view_get_link_at_location (EvView *view,
}
static void
-goto_fitr_link (EvView *view, EvLink *link)
+goto_fitr_dest (EvView *view, EvLinkDest *dest)
{
EvPoint doc_point;
int page;
double zoom;
- zoom = zoom_for_size_best_fit (ev_link_get_right (link) - ev_link_get_left (link),
- ev_link_get_top (link) - ev_link_get_bottom (link),
+ zoom = zoom_for_size_best_fit (ev_link_dest_get_right (dest) - ev_link_dest_get_left (dest),
+ ev_link_dest_get_top (dest) - ev_link_dest_get_bottom (dest),
ev_view_get_width (view),
ev_view_get_height (view), 0, 0);
ev_view_set_sizing_mode (view, EV_SIZING_FREE);
ev_view_set_zoom (view, zoom, FALSE);
- page = ev_link_get_page (link);
- doc_point.x = ev_link_get_left (link);
- doc_point.y = ev_link_get_top (link);
+ page = ev_link_dest_get_page (dest);
+ doc_point.x = ev_link_dest_get_left (dest);
+ doc_point.y = ev_link_dest_get_top (dest);
view->current_page = page;
view->pending_point = doc_point;
@@ -1101,16 +1102,16 @@ goto_fitr_link (EvView *view, EvLink *link)
}
static void
-goto_fitv_link (EvView *view, EvLink *link)
+goto_fitv_dest (EvView *view, EvLinkDest *dest)
{
EvPoint doc_point;
int doc_width, doc_height, page;
double zoom;
- page = ev_link_get_page (link);
+ page = ev_link_dest_get_page (dest);
ev_page_cache_get_size (view->page_cache, page, 0, 1.0, &doc_width, &doc_height);
- doc_point.x = ev_link_get_left (link);
+ doc_point.x = ev_link_dest_get_left (dest);
doc_point.y = 0;
zoom = zoom_for_size_fit_height (doc_width - doc_point.x , doc_height,
@@ -1128,19 +1129,19 @@ goto_fitv_link (EvView *view, EvLink *link)
}
static void
-goto_fith_link (EvView *view, EvLink *link)
+goto_fith_dest (EvView *view, EvLinkDest *dest)
{
EvPoint doc_point;
int doc_width, doc_height, page;
double zoom;
- page = ev_link_get_page (link);
+ page = ev_link_dest_get_page (dest);
ev_page_cache_get_size (view->page_cache, page, 0, 1.0, &doc_width, &doc_height);
doc_point.x = 0;
- doc_point.y = doc_height - ev_link_get_top (link);
+ doc_point.y = doc_height - ev_link_dest_get_top (dest);
- zoom = zoom_for_size_fit_width (doc_width, ev_link_get_top (link),
+ zoom = zoom_for_size_fit_width (doc_width, ev_link_dest_get_top (dest),
ev_view_get_width (view),
ev_view_get_height (view), 0);
@@ -1155,13 +1156,13 @@ goto_fith_link (EvView *view, EvLink *link)
}
static void
-goto_fit_link (EvView *view, EvLink *link)
+goto_fit_dest (EvView *view, EvLinkDest *dest)
{
double zoom;
int doc_width, doc_height;
int page;
- page = ev_link_get_page (link);
+ page = ev_link_dest_get_page (dest);
ev_page_cache_get_size (view->page_cache, page, 0, 1.0, &doc_width, &doc_height);
zoom = zoom_for_size_best_fit (doc_width, doc_height, ev_view_get_width (view),
@@ -1177,14 +1178,14 @@ goto_fit_link (EvView *view, EvLink *link)
}
static void
-goto_xyz_link (EvView *view, EvLink *link)
+goto_xyz_dest (EvView *view, EvLinkDest *dest)
{
EvPoint doc_point;
int height, page;
double zoom;
- zoom = ev_link_get_zoom (link);
- page = ev_link_get_page (link);
+ zoom = ev_link_dest_get_zoom (dest);
+ page = ev_link_dest_get_page (dest);
ev_page_cache_get_size (view->page_cache, page, 0, 1.0, NULL, &height);
if (zoom != 0) {
@@ -1192,8 +1193,8 @@ goto_xyz_link (EvView *view, EvLink *link)
ev_view_set_zoom (view, zoom, FALSE);
}
- doc_point.x = ev_link_get_left (link);
- doc_point.y = height - ev_link_get_top (link);
+ doc_point.x = ev_link_dest_get_left (dest);
+ doc_point.y = height - ev_link_dest_get_top (dest);
view->current_page = page;
view->pending_point = doc_point;
@@ -1202,70 +1203,176 @@ goto_xyz_link (EvView *view, EvLink *link)
gtk_widget_queue_resize (GTK_WIDGET (view));
}
-void
-ev_view_goto_link (EvView *view, EvLink *link)
+static void
+goto_dest (EvView *view, EvLinkDest *dest)
{
- EvLinkType type;
- int page;
+ EvLinkDestType type;
+ int page, n_pages;
- type = ev_link_get_link_type (link);
+ page = ev_link_dest_get_page (dest);
+ n_pages = ev_page_cache_get_n_pages (view->page_cache);
+
+ if (page < 0 || page >= n_pages)
+ return;
+
+ type = ev_link_dest_get_dest_type (dest);
switch (type) {
- case EV_LINK_TYPE_TITLE:
- break;
- case EV_LINK_TYPE_PAGE:
- page = ev_link_get_page (link);
+ case EV_LINK_DEST_TYPE_PAGE:
ev_page_cache_set_current_page (view->page_cache, page);
break;
- case EV_LINK_TYPE_PAGE_FIT:
- goto_fit_link (view, link);
+ case EV_LINK_DEST_TYPE_FIT:
+ goto_fit_dest (view, dest);
break;
- case EV_LINK_TYPE_PAGE_FITH:
- goto_fith_link (view, link);
+ case EV_LINK_DEST_TYPE_FITH:
+ goto_fith_dest (view, dest);
break;
- case EV_LINK_TYPE_PAGE_FITV:
- goto_fitv_link (view, link);
+ case EV_LINK_DEST_TYPE_FITV:
+ goto_fitv_dest (view, dest);
break;
- case EV_LINK_TYPE_PAGE_FITR:
- goto_fitr_link (view, link);
+ case EV_LINK_DEST_TYPE_FITR:
+ goto_fitr_dest (view, dest);
break;
- case EV_LINK_TYPE_PAGE_XYZ:
- goto_xyz_link (view, link);
+ case EV_LINK_DEST_TYPE_XYZ:
+ goto_xyz_dest (view, dest);
break;
- case EV_LINK_TYPE_EXTERNAL_URI:
- case EV_LINK_TYPE_LAUNCH:
- g_signal_emit (view, signals[SIGNAL_EXTERNAL_LINK], 0, link);
+ default:
+ g_assert_not_reached ();
+ }
+}
+
+void
+ev_view_goto_dest (EvView *view, EvLinkDest *dest)
+{
+ EvLinkDestType type;
+
+ type = ev_link_dest_get_dest_type (dest);
+
+ if (type == EV_LINK_DEST_TYPE_NAMED) {
+ EvLinkDest *dest2;
+ const gchar *named_dest;
+
+ named_dest = ev_link_dest_get_named_dest (dest);
+ dest2 = ev_document_links_find_link_dest (EV_DOCUMENT_LINKS (view->document),
+ named_dest);
+ if (dest2) {
+ goto_dest (view, dest2);
+ g_object_unref (dest2);
+ }
+
+ return;
+ }
+
+ goto_dest (view, dest);
+}
+
+void
+ev_view_handle_link (EvView *view, EvLink *link)
+{
+ EvLinkAction *action = NULL;
+ EvLinkActionType type;
+
+ action = ev_link_get_action (link);
+ if (!action)
+ return;
+
+ type = ev_link_action_get_action_type (action);
+
+ switch (type) {
+ case EV_LINK_ACTION_TYPE_GOTO_DEST: {
+ EvLinkDest *dest;
+
+ dest = ev_link_action_get_dest (action);
+ ev_view_goto_dest (view, dest);
+ }
+ break;
+ case EV_LINK_ACTION_TYPE_GOTO_REMOTE:
+ case EV_LINK_ACTION_TYPE_EXTERNAL_URI:
+ case EV_LINK_ACTION_TYPE_LAUNCH:
+ g_signal_emit (view, signals[SIGNAL_EXTERNAL_LINK], 0, action);
break;
}
}
+static gchar *
+page_label_from_dest (EvView *view, EvLinkDest *dest)
+{
+ EvLinkDestType type;
+ gchar *msg = NULL;
+
+ type = ev_link_dest_get_dest_type (dest);
+
+ switch (type) {
+ case EV_LINK_DEST_TYPE_NAMED: {
+ EvLinkDest *dest2;
+ const gchar *named_dest;
+
+ named_dest = ev_link_dest_get_named_dest (dest);
+ dest2 = ev_document_links_find_link_dest (EV_DOCUMENT_LINKS (view->document),
+ named_dest);
+ if (dest2) {
+ msg = ev_page_cache_get_page_label (view->page_cache,
+ ev_link_dest_get_page (dest2));
+ g_object_unref (dest2);
+ }
+ }
+
+ break;
+ default:
+ msg = ev_page_cache_get_page_label (view->page_cache,
+ ev_link_dest_get_page (dest));
+ }
+
+ return msg;
+}
+
static char *
tip_from_link (EvView *view, EvLink *link)
{
- EvLinkType type;
+ EvLinkAction *action;
+ EvLinkActionType type;
char *msg = NULL;
char *page_label;
+ const char *title;
- type = ev_link_get_link_type (link);
+ action = ev_link_get_action (link);
+ title = ev_link_get_title (link);
+
+ if (!action)
+ return title ? g_strdup (title) : NULL;
+
+ type = ev_link_action_get_action_type (action);
switch (type) {
- case EV_LINK_TYPE_TITLE:
- if (ev_link_get_title (link))
- msg = g_strdup (ev_link_get_title (link));
- break;
- case EV_LINK_TYPE_PAGE:
- case EV_LINK_TYPE_PAGE_XYZ:
- page_label = ev_page_cache_get_page_label (view->page_cache, ev_link_get_page (link));
+ case EV_LINK_ACTION_TYPE_GOTO_DEST:
+ page_label = page_label_from_dest (view,
+ ev_link_action_get_dest (action));
msg = g_strdup_printf (_("Go to page %s"), page_label);
g_free (page_label);
break;
- case EV_LINK_TYPE_EXTERNAL_URI:
- msg = g_strdup (ev_link_get_uri (link));
+ case EV_LINK_ACTION_TYPE_GOTO_REMOTE:
+ if (title) {
+ msg = g_strdup_printf (_("Go to %s on file %s"), title,
+ ev_link_action_get_filename (action));
+ } else {
+ msg = g_strdup_printf (_("Go to file %s"),
+ ev_link_action_get_filename (action));
+ }
+
break;
- default:
+ case EV_LINK_ACTION_TYPE_EXTERNAL_URI:
+ msg = g_strdup (ev_link_action_get_uri (action));
+ break;
+ case EV_LINK_ACTION_TYPE_LAUNCH:
+ msg = g_strdup_printf (_("Launch %s"),
+ ev_link_action_get_filename (action));
+ break;
+ default:
+ if (title)
+ msg = g_strdup (title);
break;
}
-
+
return msg;
}
@@ -1570,14 +1677,14 @@ ev_view_scroll_event (GtkWidget *widget, GdkEventScroll *event)
if (state == 0 && view->presentation) {
switch (event->direction) {
- case GDK_SCROLL_DOWN:
- case GDK_SCROLL_RIGHT:
- ev_view_next_page (view);
- break;
- case GDK_SCROLL_UP:
- case GDK_SCROLL_LEFT:
- ev_view_previous_page (view);
- break;
+ case GDK_SCROLL_DOWN:
+ case GDK_SCROLL_RIGHT:
+ ev_view_next_page (view);
+ break;
+ case GDK_SCROLL_UP:
+ case GDK_SCROLL_LEFT:
+ ev_view_previous_page (view);
+ break;
}
return TRUE;
@@ -1926,15 +2033,15 @@ ev_view_button_release_event (GtkWidget *widget,
view->selection_info.in_drag = FALSE;
} else if (link) {
- ev_view_goto_link (view, link);
+ ev_view_handle_link (view, link);
} else if (view->presentation) {
switch (event->button) {
- case 1:
- ev_view_next_page (view);
- return TRUE;
- case 3:
- ev_view_previous_page (view);
- return TRUE;
+ case 1:
+ ev_view_next_page (view);
+ return TRUE;
+ case 3:
+ ev_view_previous_page (view);
+ return TRUE;
}
}
@@ -2293,31 +2400,30 @@ ev_view_set_property (GObject *object,
{
EvView *view = EV_VIEW (object);
- switch (prop_id)
- {
- case PROP_CONTINUOUS:
- ev_view_set_continuous (view, g_value_get_boolean (value));
- break;
- case PROP_DUAL_PAGE:
- ev_view_set_dual_page (view, g_value_get_boolean (value));
- break;
- case PROP_FULLSCREEN:
- ev_view_set_fullscreen (view, g_value_get_boolean (value));
- break;
- case PROP_PRESENTATION:
- ev_view_set_presentation (view, g_value_get_boolean (value));
- break;
- case PROP_SIZING_MODE:
- ev_view_set_sizing_mode (view, g_value_get_enum (value));
- break;
- case PROP_ZOOM:
- ev_view_set_zoom (view, g_value_get_double (value), FALSE);
- break;
- case PROP_ROTATION:
- ev_view_set_rotation (view, g_value_get_int (value));
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ switch (prop_id) {
+ case PROP_CONTINUOUS:
+ ev_view_set_continuous (view, g_value_get_boolean (value));
+ break;
+ case PROP_DUAL_PAGE:
+ ev_view_set_dual_page (view, g_value_get_boolean (value));
+ break;
+ case PROP_FULLSCREEN:
+ ev_view_set_fullscreen (view, g_value_get_boolean (value));
+ break;
+ case PROP_PRESENTATION:
+ ev_view_set_presentation (view, g_value_get_boolean (value));
+ break;
+ case PROP_SIZING_MODE:
+ ev_view_set_sizing_mode (view, g_value_get_enum (value));
+ break;
+ case PROP_ZOOM:
+ ev_view_set_zoom (view, g_value_get_double (value), FALSE);
+ break;
+ case PROP_ROTATION:
+ ev_view_set_rotation (view, g_value_get_int (value));
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
}
}
@@ -2360,41 +2466,40 @@ ev_view_get_property (GObject *object,
{
EvView *view = EV_VIEW (object);
- switch (prop_id)
- {
- case PROP_STATUS:
- g_value_set_string (value, view->status);
- break;
- case PROP_FIND_STATUS:
- g_value_set_string (value, view->status);
- break;
- case PROP_CONTINUOUS:
- g_value_set_boolean (value, view->continuous);
- break;
- case PROP_DUAL_PAGE:
- g_value_set_boolean (value, view->dual_page);
- break;
- case PROP_FULLSCREEN:
- g_value_set_boolean (value, view->fullscreen);
- break;
- case PROP_PRESENTATION:
- g_value_set_boolean (value, view->presentation);
- break;
- case PROP_SIZING_MODE:
- g_value_set_enum (value, view->sizing_mode);
- break;
- case PROP_ZOOM:
- g_value_set_double (value, view->scale);
- break;
- case PROP_ROTATION:
- g_value_set_int (value, view->rotation);
- break;
- case PROP_HAS_SELECTION:
- g_value_set_boolean (value,
- view->selection_info.selections != NULL);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ switch (prop_id) {
+ case PROP_STATUS:
+ g_value_set_string (value, view->status);
+ break;
+ case PROP_FIND_STATUS:
+ g_value_set_string (value, view->status);
+ break;
+ case PROP_CONTINUOUS:
+ g_value_set_boolean (value, view->continuous);
+ break;
+ case PROP_DUAL_PAGE:
+ g_value_set_boolean (value, view->dual_page);
+ break;
+ case PROP_FULLSCREEN:
+ g_value_set_boolean (value, view->fullscreen);
+ break;
+ case PROP_PRESENTATION:
+ g_value_set_boolean (value, view->presentation);
+ break;
+ case PROP_SIZING_MODE:
+ g_value_set_enum (value, view->sizing_mode);
+ break;
+ case PROP_ZOOM:
+ g_value_set_double (value, view->scale);
+ break;
+ case PROP_ROTATION:
+ g_value_set_int (value, view->rotation);
+ break;
+ case PROP_HAS_SELECTION:
+ g_value_set_boolean (value,
+ view->selection_info.selections != NULL);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
}
}
diff --git a/shell/ev-view.h b/shell/ev-view.h
index 3ad4016..e6dd395 100644
--- a/shell/ev-view.h
+++ b/shell/ev-view.h
@@ -137,8 +137,10 @@ void ev_view_show_cursor (EvView *view);
void ev_view_scroll (EvView *view,
EvScrollType scroll,
gboolean horizontal);
-void ev_view_goto_link (EvView *view,
+void ev_view_handle_link (EvView *view,
EvLink *link);
+void ev_view_goto_dest (EvView *view,
+ EvLinkDest *dest);
gboolean ev_view_next_page (EvView *view);
gboolean ev_view_previous_page (EvView *view);
diff --git a/shell/ev-window.c b/shell/ev-window.c
index 6ca0de6..2fad47b 100644
--- a/shell/ev-window.c
+++ b/shell/ev-window.c
@@ -140,6 +140,7 @@ struct _EvWindowPrivate {
/* Document */
char *uri;
char *local_uri;
+ EvLinkDest *dest;
EvDocument *document;
EvDocument *password_document;
@@ -470,18 +471,17 @@ update_sizing_buttons (EvWindow *window)
NULL);
switch (sizing_mode) {
- case EV_SIZING_BEST_FIT:
- best_fit = TRUE;
- page_width = FALSE;
- break;
- case EV_SIZING_FIT_WIDTH:
- best_fit = FALSE;
- page_width = TRUE;
- break;
-
- default:
- best_fit = page_width = FALSE;
- break;
+ case EV_SIZING_BEST_FIT:
+ best_fit = TRUE;
+ page_width = FALSE;
+ break;
+ case EV_SIZING_FIT_WIDTH:
+ best_fit = FALSE;
+ page_width = TRUE;
+ break;
+ default:
+ best_fit = page_width = FALSE;
+ break;
}
action = gtk_action_group_get_action (action_group, "ViewBestFit");
@@ -749,17 +749,17 @@ setup_view_from_metadata (EvWindow *window)
if (ev_metadata_manager_get (uri, "rotation", &rotation, TRUE)) {
if (g_value_get_int (&rotation)) {
switch (g_value_get_int (&rotation)) {
- case 90:
- ev_view_set_rotation (view, 90);
- break;
- case 180:
- ev_view_set_rotation (view, 180);
- break;
- case 270:
- ev_view_set_rotation (view, 270);
- break;
- default:
- break;
+ case 90:
+ ev_view_set_rotation (view, 90);
+ break;
+ case 180:
+ ev_view_set_rotation (view, 180);
+ break;
+ case 270:
+ ev_view_set_rotation (view, 270);
+ break;
+ default:
+ break;
}
}
}
@@ -955,6 +955,9 @@ ev_window_xfer_job_cb (EvJobXfer *job,
ev_window_setup_document (ev_window);
ev_window_add_recent (ev_window, ev_window->priv->uri);
ev_window_clear_xfer_job (ev_window);
+
+ if (ev_window->priv->dest)
+ ev_window_goto_dest (ev_window, ev_window->priv->dest);
return;
}
@@ -1016,10 +1019,14 @@ ev_window_close_dialogs (EvWindow *ev_window)
}
void
-ev_window_open_uri (EvWindow *ev_window, const char *uri)
+ev_window_open_uri (EvWindow *ev_window, const char *uri, EvLinkDest *dest)
{
g_free (ev_window->priv->uri);
ev_window->priv->uri = NULL;
+
+ if (ev_window->priv->dest)
+ g_object_unref (ev_window->priv->dest);
+ ev_window->priv->dest = dest ? g_object_ref (dest) : NULL;
ev_window_close_dialogs (ev_window);
ev_window_clear_xfer_job (ev_window);
@@ -1034,6 +1041,12 @@ ev_window_open_uri (EvWindow *ev_window, const char *uri)
ev_job_queue_add_job (ev_window->priv->xfer_job, EV_JOB_PRIORITY_HIGH);
}
+void
+ev_window_goto_dest (EvWindow *ev_window, EvLinkDest *dest)
+{
+ ev_view_goto_dest (EV_VIEW (ev_window->priv->view), dest);
+}
+
static void
file_open_dialog_response_cb (GtkWidget *chooser,
gint response_id,
@@ -1931,14 +1944,14 @@ ev_window_set_page_mode (EvWindow *window,
window->priv->page_mode = page_mode;
switch (page_mode) {
- case PAGE_MODE_DOCUMENT:
- child = window->priv->view;
- break;
- case PAGE_MODE_PASSWORD:
- child = window->priv->password_view;
- break;
- default:
- g_assert_not_reached ();
+ case PAGE_MODE_DOCUMENT:
+ child = window->priv->view;
+ break;
+ case PAGE_MODE_PASSWORD:
+ child = window->priv->password_view;
+ break;
+ default:
+ g_assert_not_reached ();
}
real_child = gtk_bin_get_child (GTK_BIN (window->priv->scrolled_window));
@@ -2101,7 +2114,7 @@ ev_window_cmd_view_reload (GtkAction *action, EvWindow *ev_window)
page = ev_page_cache_get_current_page (ev_window->priv->page_cache);
uri = g_strdup (ev_window->priv->uri);
- ev_window_open_uri (ev_window, uri);
+ ev_window_open_uri (ev_window, uri, NULL);
/* In case the number of pages in the document has changed. */
page = CLAMP (page, 0, ev_page_cache_get_n_pages (ev_window->priv->page_cache) - 1);
@@ -2225,30 +2238,30 @@ ev_window_sizing_mode_changed_cb (EvView *view, GParamSpec *pspec,
update_view_size (NULL, ev_window);
switch (sizing_mode) {
- case EV_SIZING_BEST_FIT:
- g_object_set (G_OBJECT (scrolled_window),
- "hscrollbar-policy", GTK_POLICY_NEVER,
- "vscrollbar-policy", GTK_POLICY_AUTOMATIC,
- NULL);
- g_signal_connect (ev_window->priv->view, "zoom_invalid",
- G_CALLBACK (update_view_size),
- ev_window);
- break;
- case EV_SIZING_FIT_WIDTH:
- g_object_set (G_OBJECT (scrolled_window),
- "hscrollbar-policy", GTK_POLICY_NEVER,
- "vscrollbar-policy", GTK_POLICY_AUTOMATIC,
- NULL);
- g_signal_connect (ev_window->priv->view, "zoom_invalid",
- G_CALLBACK (update_view_size),
- ev_window);
- break;
- case EV_SIZING_FREE:
- g_object_set (G_OBJECT (scrolled_window),
- "hscrollbar-policy", GTK_POLICY_AUTOMATIC,
- "vscrollbar-policy", GTK_POLICY_AUTOMATIC,
- NULL);
- break;
+ case EV_SIZING_BEST_FIT:
+ g_object_set (G_OBJECT (scrolled_window),
+ "hscrollbar-policy", GTK_POLICY_NEVER,
+ "vscrollbar-policy", GTK_POLICY_AUTOMATIC,
+ NULL);
+ g_signal_connect (ev_window->priv->view, "zoom_invalid",
+ G_CALLBACK (update_view_size),
+ ev_window);
+ break;
+ case EV_SIZING_FIT_WIDTH:
+ g_object_set (G_OBJECT (scrolled_window),
+ "hscrollbar-policy", GTK_POLICY_NEVER,
+ "vscrollbar-policy", GTK_POLICY_AUTOMATIC,
+ NULL);
+ g_signal_connect (ev_window->priv->view, "zoom_invalid",
+ G_CALLBACK (update_view_size),
+ ev_window);
+ break;
+ case EV_SIZING_FREE:
+ g_object_set (G_OBJECT (scrolled_window),
+ "hscrollbar-policy", GTK_POLICY_AUTOMATIC,
+ "vscrollbar-policy", GTK_POLICY_AUTOMATIC,
+ NULL);
+ break;
}
update_sizing_buttons (ev_window);
@@ -2507,9 +2520,9 @@ ev_window_attachment_bar_toggled_cb (EvAttachmentBar *ev_attachbar,
}
static gboolean
-view_menu_popup_cb (EvView *view,
- EvLink *link,
- EvWindow *ev_window)
+view_menu_popup_cb (EvView *view,
+ EvLink *link,
+ EvWindow *ev_window)
{
GtkWidget *popup;
gboolean show_external = FALSE;
@@ -2521,6 +2534,7 @@ view_menu_popup_cb (EvView *view,
if (ev_window->priv->link)
g_object_unref (ev_window->priv->link);
+
if (link)
ev_window->priv->link = g_object_ref (link);
else
@@ -2528,23 +2542,26 @@ view_menu_popup_cb (EvView *view,
popup = ev_window->priv->view_popup;
- if (ev_window->priv->link)
- switch (ev_link_get_link_type (ev_window->priv->link)) {
- case EV_LINK_TYPE_PAGE:
- case EV_LINK_TYPE_PAGE_FIT:
- case EV_LINK_TYPE_PAGE_FITH:
- case EV_LINK_TYPE_PAGE_FITV:
- case EV_LINK_TYPE_PAGE_FITR:
- case EV_LINK_TYPE_PAGE_XYZ:
+ if (ev_window->priv->link) {
+ EvLinkAction *ev_action;
+
+ ev_action = ev_link_get_action (link);
+ if (!ev_action)
+ return FALSE;
+
+ switch (ev_link_action_get_action_type (ev_action)) {
+ case EV_LINK_ACTION_TYPE_GOTO_DEST:
+ case EV_LINK_ACTION_TYPE_GOTO_REMOTE:
show_internal = TRUE;
break;
- case EV_LINK_TYPE_EXTERNAL_URI:
- case EV_LINK_TYPE_LAUNCH:
+ case EV_LINK_ACTION_TYPE_EXTERNAL_URI:
+ case EV_LINK_ACTION_TYPE_LAUNCH:
show_external = TRUE;
break;
- default:
+ default:
break;
}
+ }
action = gtk_action_group_get_action (ev_window->priv->view_popup_action_group,
"OpenLink");
@@ -2561,7 +2578,7 @@ view_menu_popup_cb (EvView *view,
gtk_menu_popup (GTK_MENU (popup), NULL, NULL,
NULL, NULL,
3, gtk_get_current_event_time ());
- return FALSE;
+ return TRUE;
}
static gboolean
@@ -2804,6 +2821,11 @@ ev_window_dispose (GObject *object)
priv->uri = NULL;
}
+ if (priv->dest) {
+ g_object_unref (priv->dest);
+ priv->dest = NULL;
+ }
+
if (priv->fullscreen_timeout_id) {
g_source_remove (priv->fullscreen_timeout_id);
priv->fullscreen_timeout_id = 0;
@@ -3031,9 +3053,7 @@ drag_data_received_cb (GtkWidget *widget, GdkDragContext *context,
static void
activate_link_cb (EvPageAction *page_action, EvLink *link, EvWindow *window)
{
- g_return_if_fail (EV_IS_WINDOW (window));
-
- ev_view_goto_link (EV_VIEW (window->priv->view), link);
+ ev_view_handle_link (EV_VIEW (window->priv->view), link);
gtk_widget_grab_focus (window->priv->view);
}
@@ -3230,13 +3250,13 @@ window_configure_event_cb (EvWindow *window, GdkEventConfigure *event, gpointer
static void
sidebar_links_link_activated_cb (EvSidebarLinks *sidebar_links, EvLink *link, EvWindow *window)
{
- ev_view_goto_link (EV_VIEW (window->priv->view), link);
+ ev_view_handle_link (EV_VIEW (window->priv->view), link);
}
static void
-launch_link (EvWindow *window, EvLink *link)
+launch_action (EvWindow *window, EvLinkAction *action)
{
- const char *filename = ev_link_get_filename (link);
+ const char *filename = ev_link_action_get_filename (action);
char *uri = NULL;
if (filename && g_path_is_absolute (filename)) {
@@ -3268,12 +3288,12 @@ launch_link (EvWindow *window, EvLink *link)
}
static void
-launch_external_uri (EvWindow *window, EvLink *link)
+launch_external_uri (EvWindow *window, EvLinkAction *action)
{
const char *uri;
char *escaped;
- uri = ev_link_get_uri (link);
+ uri = ev_link_action_get_uri (action);
escaped = gnome_vfs_escape_host_and_path_string (uri);
gnome_vfs_url_show (escaped);
@@ -3281,33 +3301,60 @@ launch_external_uri (EvWindow *window, EvLink *link)
}
static void
-view_external_link_cb (EvView *view, EvLink *link, EvWindow *window)
+open_remote_link (EvWindow *window, EvLinkAction *action)
+{
+ gchar *uri;
+ gchar *dir;
+
+ dir = g_path_get_dirname (window->priv->uri);
+
+ uri = g_build_filename (dir, ev_link_action_get_filename (action),
+ NULL);
+ g_free (dir);
+
+ ev_application_open_uri_at_dest (EV_APP, uri,
+ ev_link_action_get_dest (action),
+ GDK_CURRENT_TIME);
+
+ g_free (uri);
+}
+
+static void
+view_external_link_cb (EvView *view, EvLinkAction *action, EvWindow *window)
{
- switch (ev_link_get_link_type (link)) {
- case EV_LINK_TYPE_EXTERNAL_URI:
- launch_external_uri (window, link);
- break;
- case EV_LINK_TYPE_LAUNCH:
- launch_link (window, link);
- break;
- default:
- g_assert_not_reached ();
+ switch (ev_link_action_get_action_type (action)) {
+ case EV_LINK_ACTION_TYPE_EXTERNAL_URI:
+ launch_external_uri (window, action);
+ break;
+ case EV_LINK_ACTION_TYPE_LAUNCH:
+ launch_action (window, action);
+ break;
+ case EV_LINK_ACTION_TYPE_GOTO_REMOTE:
+ open_remote_link (window, action);
+ break;
+ default:
+ g_assert_not_reached ();
}
}
static void
ev_view_popup_cmd_open_link (GtkAction *action, EvWindow *window)
{
- ev_view_goto_link (EV_VIEW (window->priv->view), window->priv->link);
+ ev_view_handle_link (EV_VIEW (window->priv->view), window->priv->link);
}
static void
ev_view_popup_cmd_copy_link_address (GtkAction *action, EvWindow *window)
{
GtkClipboard *clipboard;
+ EvLinkAction *ev_action;
const gchar *uri;
- uri = ev_link_get_uri (window->priv->link);
+ ev_action = ev_link_get_action (window->priv->link);
+ if (!ev_action)
+ return;
+
+ uri = ev_link_action_get_uri (ev_action);
clipboard = gtk_widget_get_clipboard (GTK_WIDGET (window),
GDK_SELECTION_CLIPBOARD);
@@ -3443,6 +3490,8 @@ ev_window_init (EvWindow *ev_window)
ev_window->priv = EV_WINDOW_GET_PRIVATE (ev_window);
+ ev_window->priv->dest = NULL;
+
ev_window->priv->page_mode = PAGE_MODE_DOCUMENT;
ev_window->priv->title = ev_window_title_new (ev_window);
diff --git a/shell/ev-window.h b/shell/ev-window.h
index fb6234d..2551073 100644
--- a/shell/ev-window.h
+++ b/shell/ev-window.h
@@ -55,7 +55,10 @@ GType ev_window_get_type (void);
GtkWidget *ev_window_new (void);
const char *ev_window_get_uri (EvWindow *ev_window);
void ev_window_open_uri (EvWindow *ev_window,
- const char *uri);
+ const char *uri,
+ EvLinkDest *dest);
+void ev_window_goto_dest (EvWindow *ev_window,
+ EvLinkDest *dest);
void ev_window_open_page_label (EvWindow *ev_window,
const char *label);
gboolean ev_window_is_empty (const EvWindow *ev_window);
diff --git a/shell/main.c b/shell/main.c
index b874b28..3a38986 100644
--- a/shell/main.c
+++ b/shell/main.c
@@ -188,7 +188,7 @@ load_files_remote (const char **files)
char *uri;
uri = gnome_vfs_make_uri_from_shell_arg (files[i]);
- page_label = ev_page_label ? ev_page_label : "";
+ page_label = ev_page_label ? ev_page_label : "";
#if DBUS_VERSION <= 33
call = dbus_g_proxy_begin_call (remote_object, "OpenURI",
DBUS_TYPE_STRING, &uri,