Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog10
-rw-r--r--backend/ev-document-links.h1
-rw-r--r--pdf/ev-poppler.cc13
-rw-r--r--shell/ev-sidebar-links.c47
4 files changed, 53 insertions, 18 deletions
diff --git a/ChangeLog b/ChangeLog
index 794db77..d160999 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,15 @@
2005-06-15 Marco Pesenti Gritti <mpg@redhat.com>
+ * backend/ev-document-links.h:
+ * pdf/ev-poppler.cc:
+ * shell/ev-sidebar-links.c: (create_loading_model),
+ (expand_open_links), (job_finished_callback):
+
+ Expand links when specified by the document.
+ Depend on a poppler api (defined out for now)
+
+2005-06-15 Marco Pesenti Gritti <mpg@redhat.com>
+
* shell/ev-properties.c: (ev_properties_dispose),
(ev_properties_class_init), (dialog_destroy_cb),
(ev_properties_init), (job_fonts_finished_cb), (setup_fonts_view),
diff --git a/backend/ev-document-links.h b/backend/ev-document-links.h
index 6105a70..1f94596 100644
--- a/backend/ev-document-links.h
+++ b/backend/ev-document-links.h
@@ -47,6 +47,7 @@ typedef struct _EvDocumentLinksIface EvDocumentLinksIface;
enum {
EV_DOCUMENT_LINKS_COLUMN_MARKUP,
EV_DOCUMENT_LINKS_COLUMN_LINK,
+ EV_DOCUMENT_LINKS_COLUMN_EXPAND,
EV_DOCUMENT_LINKS_COLUMN_NUM_COLUMNS
};
diff --git a/pdf/ev-poppler.cc b/pdf/ev-poppler.cc
index 9989d82..aebe7ce 100644
--- a/pdf/ev-poppler.cc
+++ b/pdf/ev-poppler.cc
@@ -658,8 +658,14 @@ build_tree (PdfDocument *pdf_document,
PopplerIndexIter *child;
PopplerAction *action;
EvLink *link;
+ gboolean expand;
action = poppler_index_iter_get_action (iter);
+#ifdef POPPLER_LINK_IS_OPEN
+ expand = poppler_index_iter_is_open (iter);
+#else
+ expand = TRUE;
+#endif
if (action) {
gtk_tree_store_append (GTK_TREE_STORE (model), &tree_iter, parent);
link = ev_link_from_action (action);
@@ -668,6 +674,7 @@ build_tree (PdfDocument *pdf_document,
gtk_tree_store_set (GTK_TREE_STORE (model), &tree_iter,
EV_DOCUMENT_LINKS_COLUMN_MARKUP, ev_link_get_title (link),
EV_DOCUMENT_LINKS_COLUMN_LINK, link,
+ EV_DOCUMENT_LINKS_COLUMN_EXPAND, expand,
-1);
child = poppler_index_iter_get_child (iter);
if (child)
@@ -688,16 +695,16 @@ pdf_document_links_get_links_model (EvDocumentLinks *document_links)
g_return_val_if_fail (PDF_IS_DOCUMENT (document_links), NULL);
iter = poppler_index_iter_new (pdf_document->document);
- /* Create the model iff we have items*/
+ /* Create the model if we have items*/
if (iter != NULL) {
model = (GtkTreeModel *) gtk_tree_store_new (EV_DOCUMENT_LINKS_COLUMN_NUM_COLUMNS,
G_TYPE_STRING,
- G_TYPE_POINTER);
+ G_TYPE_POINTER,
+ G_TYPE_BOOLEAN);
build_tree (pdf_document, model, NULL, iter);
poppler_index_iter_free (iter);
}
-
return model;
}
diff --git a/shell/ev-sidebar-links.c b/shell/ev-sidebar-links.c
index ced98c8..4571911 100644
--- a/shell/ev-sidebar-links.c
+++ b/shell/ev-sidebar-links.c
@@ -220,12 +220,14 @@ create_loading_model (void)
/* Creates a fake model to indicate that we're loading */
retval = (GtkTreeModel *)gtk_list_store_new (EV_DOCUMENT_LINKS_COLUMN_NUM_COLUMNS,
G_TYPE_STRING,
- G_TYPE_OBJECT);
+ G_TYPE_OBJECT,
+ G_TYPE_BOOLEAN);
gtk_list_store_append (GTK_LIST_STORE (retval), &iter);
markup = g_strdup_printf ("<span size=\"larger\" style=\"italic\">%s</span>", _("Loading..."));
gtk_list_store_set (GTK_LIST_STORE (retval), &iter,
EV_DOCUMENT_LINKS_COLUMN_MARKUP, markup,
+ EV_DOCUMENT_LINKS_COLUMN_EXPAND, FALSE,
EV_DOCUMENT_LINKS_COLUMN_LINK, NULL,
-1);
g_free (markup);
@@ -515,16 +517,39 @@ row_activated_callback (GtkTreeView *treeview,
return;
}
-
+
+static void
+expand_open_links (GtkTreeView *tree_view, GtkTreeModel *model, GtkTreeIter *parent)
+{
+ GtkTreeIter iter;
+ EvLink *link;
+ gboolean expand;
+
+ if (gtk_tree_model_iter_children (model, &iter, parent)) {
+ do {
+ gtk_tree_model_get (model, &iter,
+ EV_DOCUMENT_LINKS_COLUMN_LINK, &link,
+ EV_DOCUMENT_LINKS_COLUMN_EXPAND, &expand,
+ -1);
+ if (expand) {
+ GtkTreePath *path;
+
+ path = gtk_tree_model_get_path (model, &iter);
+ gtk_tree_view_expand_row (tree_view, path, FALSE);
+ gtk_tree_path_free (path);
+ }
+
+ expand_open_links (tree_view, model, &iter);
+ } while (gtk_tree_model_iter_next (model, &iter));
+ }
+}
+
static void
job_finished_callback (EvJobLinks *job,
EvSidebarLinks *sidebar_links)
{
EvSidebarLinksPrivate *priv;
GtkTreeSelection *selection;
- GtkTreeIter iter;
- GtkTreePath *path;
- gboolean result;
priv = sidebar_links->priv;
@@ -535,16 +560,8 @@ job_finished_callback (EvJobLinks *job,
g_object_unref (job);
priv->job = NULL;
- /* Expand one level of the tree */
- path = gtk_tree_path_new_first ();
- for (result = gtk_tree_model_get_iter_first (priv->model, &iter);
- result;
- result = gtk_tree_model_iter_next (priv->model, &iter)) {
- gtk_tree_view_expand_row (GTK_TREE_VIEW (priv->tree_view), path, FALSE);
- gtk_tree_path_next (path);
- }
- gtk_tree_path_free (path);
-
+ expand_open_links (GTK_TREE_VIEW (priv->tree_view), priv->model, NULL);
+
selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (priv->tree_view));
gtk_tree_selection_set_mode (selection, GTK_SELECTION_SINGLE);
priv->selection_id = g_signal_connect (selection, "changed",