X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;f=shell%2Fev-sidebar-links.c;h=e663fc992e5d2d6bca86fb5f0f1ed5ab9d4454bd;hb=464f9eb8489a4b5882d20b8603d5f2fb38e61ddb;hp=03ea9e97ca980533197757565bee4e891243efbd;hpb=1c0d19bd22598eca159c3febdcdaf4168891cb8f;p=evince.git
diff --git a/shell/ev-sidebar-links.c b/shell/ev-sidebar-links.c
index 03ea9e97..e663fc99 100644
--- a/shell/ev-sidebar-links.c
+++ b/shell/ev-sidebar-links.c
@@ -46,12 +46,17 @@ struct _EvSidebarLinksPrivate {
EvPageCache *page_cache;
};
+enum {
+ PROP_0,
+ PROP_MODEL,
+};
+
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);
@@ -71,6 +76,53 @@ ev_sidebar_links_destroy (GtkObject *object)
ev_sidebar_links_clear_document (ev_sidebar_links);
}
+static void
+ev_sidebar_links_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ EvSidebarLinks *ev_sidebar_links;
+ GtkTreeModel *model;
+
+ ev_sidebar_links = EV_SIDEBAR_LINKS (object);
+
+ switch (prop_id)
+ {
+ case PROP_MODEL:
+ model = ev_sidebar_links->priv->model;
+ ev_sidebar_links->priv->model = GTK_TREE_MODEL (g_value_dup_object (value));
+ if (model)
+ g_object_unref (model);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+static void
+ev_sidebar_links_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec)
+{
+ EvSidebarLinks *ev_sidebar_links;
+
+ ev_sidebar_links = EV_SIDEBAR_LINKS (object);
+
+ switch (prop_id)
+ {
+ case PROP_MODEL:
+ g_value_set_object (value, ev_sidebar_links->priv->model);
+ break;
+ default:
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+ break;
+ }
+}
+
+
static void
ev_sidebar_links_class_init (EvSidebarLinksClass *ev_sidebar_links_class)
{
@@ -80,8 +132,19 @@ ev_sidebar_links_class_init (EvSidebarLinksClass *ev_sidebar_links_class)
g_object_class = G_OBJECT_CLASS (ev_sidebar_links_class);
gtk_object_class = GTK_OBJECT_CLASS (ev_sidebar_links_class);
+ g_object_class->set_property = ev_sidebar_links_set_property;
+ g_object_class->get_property = ev_sidebar_links_get_property;
+
gtk_object_class->destroy = ev_sidebar_links_destroy;
+ g_object_class_install_property (g_object_class,
+ PROP_MODEL,
+ g_param_spec_object ("model",
+ "Model",
+ "Current Model",
+ GTK_TYPE_TREE_MODEL,
+ G_PARAM_READWRITE));
+
g_type_class_add_private (g_object_class, sizeof (EvSidebarLinksPrivate));
}
@@ -126,13 +189,13 @@ 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_BOOLEAN,
G_TYPE_OBJECT);
gtk_list_store_append (GTK_LIST_STORE (retval), &iter);
markup = g_strdup_printf ("%s", _("Loading..."));
gtk_list_store_set (GTK_LIST_STORE (retval), &iter,
EV_DOCUMENT_LINKS_COLUMN_MARKUP, markup,
+ EV_DOCUMENT_LINKS_COLUMN_LINK, NULL,
-1);
g_free (markup);
@@ -189,7 +252,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 +270,7 @@ links_page_num_func (GtkTreeViewColumn *tree_column,
GtkCellRenderer *cell,
GtkTreeModel *tree_model,
GtkTreeIter *iter,
- gpointer data)
+ EvSidebarLinks *sidebar_links)
{
EvLink *link;
@@ -217,12 +280,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 ("%d", 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 ("%s", 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,
@@ -328,6 +398,8 @@ job_finished_cb (EvJobLinks *job,
priv = sidebar_links->priv;
priv->model = g_object_ref (job->model);
+ g_object_notify (G_OBJECT (sidebar_links), "model");
+
gtk_tree_view_set_model (GTK_TREE_VIEW (priv->tree_view), job->model);
g_object_unref (job);