+static void
+ev_sidebar_thumbnails_init (EvSidebarThumbnails *ev_sidebar_thumbnails)
+{
+ EvSidebarThumbnailsPrivate *priv;
+
+ priv = ev_sidebar_thumbnails->priv = EV_SIDEBAR_THUMBNAILS_GET_PRIVATE (ev_sidebar_thumbnails);
+
+ priv->list_store = gtk_list_store_new (NUM_COLUMNS,
+ G_TYPE_STRING,
+ GDK_TYPE_PIXBUF,
+ G_TYPE_BOOLEAN,
+ EV_TYPE_JOB_THUMBNAIL);
+
+ priv->swindow = gtk_scrolled_window_new (NULL, NULL);
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (priv->swindow),
+ GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
+ gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (priv->swindow),
+ GTK_SHADOW_IN);
+ priv->vadjustment = gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (priv->swindow));
+ g_signal_connect_data (G_OBJECT (priv->vadjustment), "value-changed",
+ G_CALLBACK (adjustment_changed_cb),
+ ev_sidebar_thumbnails, NULL,
+ G_CONNECT_SWAPPED | G_CONNECT_AFTER);
+ g_signal_connect_swapped (G_OBJECT (priv->swindow), "size-allocate",
+ G_CALLBACK (adjustment_changed_cb),
+ ev_sidebar_thumbnails);
+ gtk_box_pack_start (GTK_BOX (ev_sidebar_thumbnails), priv->swindow, TRUE, TRUE, 0);
+
+ /* Put it all together */
+ gtk_widget_show_all (priv->swindow);
+}
+
+static void
+page_changed_cb (EvPageCache *page_cache,
+ int page,
+ EvSidebarThumbnails *sidebar)
+{
+ GtkTreeView *tree_view;
+ GtkTreePath *path;
+
+ path = gtk_tree_path_new_from_indices (page, -1);
+
+ if (sidebar->priv->tree_view) {
+ tree_view = GTK_TREE_VIEW (sidebar->priv->tree_view);
+ gtk_tree_view_set_cursor (tree_view, path, NULL, FALSE);
+ gtk_tree_view_scroll_to_cell (tree_view, path, NULL, FALSE, 0.0, 0.0);
+ } else if (sidebar->priv->icon_view) {
+
+ g_signal_handlers_block_by_func
+ (sidebar->priv->icon_view,
+ G_CALLBACK (ev_sidebar_icon_selection_changed), sidebar);
+
+ gtk_icon_view_select_path (GTK_ICON_VIEW (sidebar->priv->icon_view), path);
+
+ g_signal_handlers_unblock_by_func
+ (sidebar->priv->icon_view,
+ G_CALLBACK (ev_sidebar_icon_selection_changed), sidebar);
+
+ gtk_icon_view_set_cursor (GTK_ICON_VIEW (sidebar->priv->icon_view), path, NULL, FALSE);
+ }
+
+ gtk_tree_path_free (path);
+}
+
+static void
+thumbnail_job_completed_callback (EvJobThumbnail *job,
+ EvSidebarThumbnails *sidebar_thumbnails)
+{
+ EvSidebarThumbnailsPrivate *priv = sidebar_thumbnails->priv;
+ GtkTreeIter *iter;
+
+ iter = (GtkTreeIter *) g_object_get_data (G_OBJECT (job), "tree_iter");
+ gtk_list_store_set (priv->list_store,
+ iter,
+ COLUMN_PIXBUF, job->thumbnail,
+ COLUMN_THUMBNAIL_SET, TRUE,
+ COLUMN_JOB, NULL,
+ -1);
+}
+
+static void
+ev_sidebar_thumbnails_set_document (EvSidebarPage *sidebar_page,