Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog19
-rw-r--r--backend/ev-document.c13
-rw-r--r--backend/ev-document.h4
-rw-r--r--backend/ev-page-cache.c16
-rw-r--r--backend/ev-page-cache.h3
-rw-r--r--pdf/ev-poppler.cc21
-rw-r--r--shell/ev-sidebar-links.c19
-rw-r--r--shell/ev-sidebar-thumbnails.c13
-rw-r--r--shell/ev-view.c11
-rw-r--r--shell/ev-window.c1
10 files changed, 102 insertions, 18 deletions
diff --git a/ChangeLog b/ChangeLog
index 940e855..181e28d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,22 @@
+Thu Mar 31 13:27:50 2005 Jonathan Blandford <jrb@redhat.com>
+
+ * backend/ev-document.c: (ev_document_get_page_label):
+ * backend/ev-document.h:
+ * backend/ev-page-cache.c: (_ev_page_cache_new),
+ (ev_page_cache_get_page_label):
+ * backend/ev-page-cache.h:
+ * pdf/ev-poppler.cc:
+ * shell/ev-sidebar-links.c: (ev_sidebar_links_construct),
+ (links_page_num_func):
+ * shell/ev-sidebar-thumbnails.c:
+ (ev_sidebar_thumbnails_set_document):
+ * shell/ev-view.c: (status_message_from_link),
+ (ev_view_motion_notify_event):
+ * shell/ev-window.c: (document_supports_sidebar): Add in page
+ label support. It's not perfect yet, but it's the first 'feature'
+ in a while.
+ Also, fix a bogus comment noticed by crispin.
+
Thu Mar 31 01:21:58 2005 Jonathan Blandford <jrb@redhat.com>
* Makefile.am: Remove pixbuf backend for now
diff --git a/backend/ev-document.c b/backend/ev-document.c
index 080af0b..d4d6f20 100644
--- a/backend/ev-document.c
+++ b/backend/ev-document.c
@@ -202,6 +202,19 @@ ev_document_get_page_size (EvDocument *document,
}
char *
+ev_document_get_page_label(EvDocument *document,
+ int page)
+{
+ EvDocumentIface *iface = EV_DOCUMENT_GET_IFACE (document);
+
+ LOG ("ev_document_get_page_label");
+ if (iface->get_page_label == NULL)
+ return NULL;
+
+ return iface->get_page_label (document, page);
+}
+
+char *
ev_document_get_text (EvDocument *document,
GdkRectangle *rect)
{
diff --git a/backend/ev-document.h b/backend/ev-document.h
index 15b2cc9..e5c91b7 100644
--- a/backend/ev-document.h
+++ b/backend/ev-document.h
@@ -79,6 +79,8 @@ struct _EvDocumentIface
int page,
int *width,
int *height);
+ char * (* get_page_label) (EvDocument *document,
+ int page);
char * (* get_text) (EvDocument *document,
GdkRectangle *rect);
EvLink * (* get_link) (EvDocument *document,
@@ -111,6 +113,8 @@ void ev_document_get_page_size (EvDocument *document,
int page,
int *width,
int *height);
+char *ev_document_get_page_label(EvDocument *document,
+ int page);
char *ev_document_get_text (EvDocument *document,
GdkRectangle *rect);
EvLink *ev_document_get_link (EvDocument *document,
diff --git a/backend/ev-page-cache.c b/backend/ev-page-cache.c
index f16ddc5..2042394 100644
--- a/backend/ev-page-cache.c
+++ b/backend/ev-page-cache.c
@@ -16,6 +16,7 @@ struct _EvPageCache
gint current_page;
int n_pages;
char *title;
+ char **page_labels;
gboolean uniform;
gint uniform_width;
@@ -100,6 +101,7 @@ _ev_page_cache_new (EvDocument *document)
page_cache->uniform = TRUE;
page_cache->n_pages = ev_document_get_n_pages (document);
page_cache->title = ev_document_get_title (document);
+ page_cache->page_labels = g_new0 (char *, page_cache->n_pages);
ev_document_set_scale (document, 1.0);
for (i = 0; i < page_cache->n_pages; i++) {
@@ -107,6 +109,7 @@ _ev_page_cache_new (EvDocument *document)
gint page_height = 0;
ev_document_get_page_size (document, i, &page_width, &page_height);
+ page_cache->page_labels[i] = ev_document_get_page_label (document, i);
if (i == 0) {
page_cache->uniform_width = page_width;
@@ -228,6 +231,19 @@ ev_page_cache_get_size (EvPageCache *page_cache,
*height = (*height) * scale;
}
+gchar *
+ev_page_cache_get_page_label (EvPageCache *page_cache,
+ gint page)
+{
+ g_return_val_if_fail (EV_IS_PAGE_CACHE (page_cache), NULL);
+ g_return_val_if_fail (page >= 0 && page < page_cache->n_pages, NULL);
+
+ if (page_cache->page_labels[page] == NULL)
+ return g_strdup_printf ("%d", page + 1);
+
+ return g_strdup (page_cache->page_labels[page]);
+}
+
gboolean
ev_page_cache_next_page (EvPageCache *page_cache)
diff --git a/backend/ev-page-cache.h b/backend/ev-page-cache.h
index 9edf67c..bf5e3d1 100644
--- a/backend/ev-page-cache.h
+++ b/backend/ev-page-cache.h
@@ -39,7 +39,8 @@ void ev_page_cache_get_size (EvPageCache *page_cache,
gfloat scale,
gint *width,
gint *height);
-
+char *ev_page_cache_get_page_label (EvPageCache *page_cache,
+ gint page);
/* Navigation */
gint ev_page_cache_get_current_page (EvPageCache *page_cache);
void ev_page_cache_set_current_page (EvPageCache *page_cache,
diff --git a/pdf/ev-poppler.cc b/pdf/ev-poppler.cc
index 6a51672..1dd27b7 100644
--- a/pdf/ev-poppler.cc
+++ b/pdf/ev-poppler.cc
@@ -261,6 +261,26 @@ pdf_document_get_page_size (EvDocument *document,
width, height);
}
+static char *
+pdf_document_get_page_label (EvDocument *document,
+ int page)
+{
+ PopplerPage *poppler_page = NULL;
+ char *label = NULL;
+
+ if (page == -1)
+ poppler_page = PDF_DOCUMENT (document)->page;
+ else
+ poppler_page = poppler_document_get_page (PDF_DOCUMENT (document)->document,
+ page);
+
+ g_object_get (poppler_page,
+ "label", &label,
+ NULL);
+
+ return label;
+}
+
static GList *
pdf_document_get_links (EvDocument *document)
{
@@ -359,6 +379,7 @@ pdf_document_document_iface_init (EvDocumentIface *iface)
iface->get_page = pdf_document_get_page;
iface->set_scale = pdf_document_set_scale;
iface->get_page_size = pdf_document_get_page_size;
+ iface->get_page_label = pdf_document_get_page_label;
iface->get_links = pdf_document_get_links;
iface->render_pixbuf = pdf_document_render_pixbuf;
};
diff --git a/shell/ev-sidebar-links.c b/shell/ev-sidebar-links.c
index 03ea9e9..a278034 100644
--- a/shell/ev-sidebar-links.c
+++ b/shell/ev-sidebar-links.c
@@ -51,7 +51,7 @@ static void links_page_num_func (GtkTreeViewColumn *tree_column,
GtkCellRenderer *cell,
GtkTreeModel *tree_model,
GtkTreeIter *iter,
- gpointer data);
+ EvSidebarLinks *sidebar_links);
static void update_page_callback (EvPageCache *page_cache,
gint current_page,
EvSidebarLinks *sidebar_links);
@@ -189,7 +189,7 @@ ev_sidebar_links_construct (EvSidebarLinks *ev_sidebar_links)
gtk_tree_view_column_pack_end (GTK_TREE_VIEW_COLUMN (column), renderer, FALSE);
gtk_tree_view_column_set_cell_data_func (GTK_TREE_VIEW_COLUMN (column), renderer,
(GtkTreeCellDataFunc) links_page_num_func,
- NULL, NULL);
+ ev_sidebar_links, NULL);
}
@@ -207,7 +207,7 @@ links_page_num_func (GtkTreeViewColumn *tree_column,
GtkCellRenderer *cell,
GtkTreeModel *tree_model,
GtkTreeIter *iter,
- gpointer data)
+ EvSidebarLinks *sidebar_links)
{
EvLink *link;
@@ -217,12 +217,19 @@ links_page_num_func (GtkTreeViewColumn *tree_column,
if (link != NULL &&
ev_link_get_link_type (link) == EV_LINK_TYPE_PAGE) {
- gchar *markup = g_strdup_printf ("<i>%d</i>", ev_link_get_page (link));
+ 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_string = g_markup_printf_escaped ("<i>%s</i>", page_label);
+
g_object_set (cell,
- "markup", markup,
+ "markup", page_string,
"visible", TRUE,
NULL);
- g_free (markup);
+
+ g_free (page_label);
+ g_free (page_string);
} else {
g_object_set (cell,
"visible", FALSE,
diff --git a/shell/ev-sidebar-thumbnails.c b/shell/ev-sidebar-thumbnails.c
index 7bbaa09..b439e4b 100644
--- a/shell/ev-sidebar-thumbnails.c
+++ b/shell/ev-sidebar-thumbnails.c
@@ -222,7 +222,6 @@ ev_sidebar_thumbnails_set_document (EvSidebarThumbnails *sidebar_thumbnails,
GdkPixbuf *loading_icon;
gint i, n_pages;
GtkTreeIter iter;
- gchar *page;
gint width = THUMBNAIL_WIDTH;
gint height = THUMBNAIL_WIDTH;
EvPageCache *page_cache;
@@ -249,18 +248,22 @@ ev_sidebar_thumbnails_set_document (EvSidebarThumbnails *sidebar_thumbnails,
gtk_list_store_clear (priv->list_store);
for (i = 0; i < n_pages; i++) {
EvJob *job;
+ gchar *page_label;
+ gchar *page_string;
- /* FIXME: Bah. This is still -1 for some reason. Need to track it down.. */
job = ev_job_thumbnail_new (priv->document, i, THUMBNAIL_WIDTH);
- page = g_strdup_printf ("<i>%d</i>", i + 1); /* FIXME: replace with string. */
+ page_label = ev_page_cache_get_page_label (page_cache, i);
+ page_string = g_markup_printf_escaped ("<i>%s</i>", page_label);
+
gtk_list_store_append (priv->list_store, &iter);
gtk_list_store_set (priv->list_store, &iter,
- COLUMN_PAGE_STRING, page,
+ COLUMN_PAGE_STRING, page_string,
COLUMN_PIXBUF, loading_icon,
COLUMN_THUMBNAIL_SET, FALSE,
COLUMN_JOB, job,
-1);
- g_free (page);
+ g_free (page_label);
+ g_free (page_string);
ev_job_queue_add_job (job, EV_JOB_PRIORITY_LOW);
g_object_set_data_full (G_OBJECT (job), "tree_iter",
gtk_tree_iter_copy (&iter),
diff --git a/shell/ev-view.c b/shell/ev-view.c
index 97e0c54..d1bce99 100644
--- a/shell/ev-view.c
+++ b/shell/ev-view.c
@@ -701,11 +701,11 @@ ev_view_button_press_event (GtkWidget *widget,
}
static char *
-status_message_from_link (EvLink *link)
+status_message_from_link (EvView *view, EvLink *link)
{
EvLinkType type;
char *msg = NULL;
- int page;
+ char *page_label;
type = ev_link_get_link_type (link);
@@ -715,8 +715,9 @@ status_message_from_link (EvLink *link)
msg = g_strdup (ev_link_get_title (link));
break;
case EV_LINK_TYPE_PAGE:
- page = ev_link_get_page (link);
- msg = g_strdup_printf (_("Go to page %d"), page);
+ page_label = ev_page_cache_get_page_label (view->page_cache, ev_link_get_page (link));
+ 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));
@@ -874,7 +875,7 @@ ev_view_motion_notify_event (GtkWidget *widget,
if (link) {
char *msg;
- msg = status_message_from_link (link);
+ msg = status_message_from_link (view, link);
ev_view_set_status (view, msg);
ev_view_set_cursor (view, EV_VIEW_CURSOR_LINK);
g_free (msg);
diff --git a/shell/ev-window.c b/shell/ev-window.c
index 8b3044f..9607405 100644
--- a/shell/ev-window.c
+++ b/shell/ev-window.c
@@ -495,7 +495,6 @@ update_total_pages (EvWindow *ev_window)
static gboolean
document_supports_sidebar (EvDocument *document)
{
- /* FIXME: Remove the (TRUE ||) after links are fixed in poppler-glib */
return (EV_IS_DOCUMENT_THUMBNAILS (document) && (EV_IS_DOCUMENT_LINKS (document)));
}