]> www.fi.muni.cz Git - evince.git/blobdiff - shell/ev-sidebar-thumbnails.c
make page size calculation consistent and set it to (int)( width * scale +
[evince.git] / shell / ev-sidebar-thumbnails.c
index e9ff445328b330581fce026620a67748786772cb..61d3cb838c2eb6e2673c0c64b427e386f8323fc4 100644 (file)
@@ -28,7 +28,9 @@
 
 #include <string.h>
 #include <gtk/gtk.h>
+#include <glib/gi18n.h>
 
+#include "ev-sidebar-page.h"
 #include "ev-sidebar-thumbnails.h"
 #include "ev-document-thumbnails.h"
 #include "ev-document-misc.h"
@@ -58,13 +60,24 @@ enum {
        NUM_COLUMNS
 };
 
-G_DEFINE_TYPE (EvSidebarThumbnails, ev_sidebar_thumbnails, GTK_TYPE_VBOX);
+static void     ev_sidebar_thumbnails_clear_model              (EvSidebarThumbnails *sidebar);
+static gboolean ev_sidebar_thumbnails_support_document         (EvSidebarPage   *sidebar_page,
+                                                                EvDocument *document);
+static void     ev_sidebar_thumbnails_page_iface_init          (EvSidebarPageIface *iface);
+static void    ev_sidebar_thumbnails_set_document              (EvSidebarPage  *sidebar_page,
+                                                                EvDocument          *document);
+static const gchar* ev_sidebar_thumbnails_get_label            (EvSidebarPage *sidebar_page);
+
+G_DEFINE_TYPE_EXTENDED (EvSidebarThumbnails, 
+                        ev_sidebar_thumbnails, 
+                        GTK_TYPE_VBOX,
+                        0, 
+                        G_IMPLEMENT_INTERFACE (EV_TYPE_SIDEBAR_PAGE, 
+                                              ev_sidebar_thumbnails_page_iface_init))
 
 #define EV_SIDEBAR_THUMBNAILS_GET_PRIVATE(object) \
        (G_TYPE_INSTANCE_GET_PRIVATE ((object), EV_TYPE_SIDEBAR_THUMBNAILS, EvSidebarThumbnailsPrivate));
 
-static void 
-ev_sidebar_thumbnails_clear_model (EvSidebarThumbnails *sidebar);
 
 static void
 ev_sidebar_thumbnails_dispose (GObject *object)
@@ -90,6 +103,16 @@ ev_sidebar_thumbnails_class_init (EvSidebarThumbnailsClass *ev_sidebar_thumbnail
        g_type_class_add_private (g_object_class, sizeof (EvSidebarThumbnailsPrivate));
 }
 
+GtkWidget *
+ev_sidebar_thumbnails_new (void)
+{
+       GtkWidget *ev_sidebar_thumbnails;
+
+       ev_sidebar_thumbnails = g_object_new (EV_TYPE_SIDEBAR_THUMBNAILS, NULL);
+
+       return ev_sidebar_thumbnails;
+}
+
 static void
 adjustment_changed_cb (GtkAdjustment       *adjustment,
                       EvSidebarThumbnails *ev_sidebar_thumbnails)
@@ -140,6 +163,12 @@ ev_sidebar_tree_selection_changed (GtkTreeSelection *selection,
        ev_page_cache_set_current_page (page_cache, page);
 }
 
+GtkWidget *
+ev_sidebar_thumbnails_get_treeview (EvSidebarThumbnails *sidebar)
+{
+       return sidebar->priv->tree_view;
+}
+
 static void
 ev_sidebar_thumbnails_init (EvSidebarThumbnails *ev_sidebar_thumbnails)
 {
@@ -186,31 +215,17 @@ ev_sidebar_thumbnails_init (EvSidebarThumbnails *ev_sidebar_thumbnails)
        gtk_widget_show_all (swindow);
 }
 
-GtkWidget *
-ev_sidebar_thumbnails_new (void)
-{
-       GtkWidget *ev_sidebar_thumbnails;
-
-       ev_sidebar_thumbnails = g_object_new (EV_TYPE_SIDEBAR_THUMBNAILS, NULL);
-
-       return ev_sidebar_thumbnails;
-}
-
 static void
 page_changed_cb (EvPageCache         *page_cache,
                 int                  page,
                 EvSidebarThumbnails *sidebar)
 {
+       GtkTreeView *tree_view = GTK_TREE_VIEW (sidebar->priv->tree_view);
        GtkTreePath *path;
-       GtkTreeSelection *selection;
 
        path = gtk_tree_path_new_from_indices (page, -1);
-       selection = gtk_tree_view_get_selection
-                       (GTK_TREE_VIEW (sidebar->priv->tree_view));
-
-       gtk_tree_selection_select_path (selection, path);
-       gtk_tree_view_scroll_to_cell (GTK_TREE_VIEW (sidebar->priv->tree_view),
-                                     path, NULL, FALSE, 0.0, 0.0);
+       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);
        gtk_tree_path_free (path);
 }
 
@@ -230,10 +245,11 @@ thumbnail_job_completed_callback (EvJobThumbnail      *job,
                            -1);
 }
 
-void
-ev_sidebar_thumbnails_set_document (EvSidebarThumbnails *sidebar_thumbnails,
+static void
+ev_sidebar_thumbnails_set_document (EvSidebarPage      *sidebar_page,
                                    EvDocument          *document)
 {
+       EvSidebarThumbnails *sidebar_thumbnails = EV_SIDEBAR_THUMBNAILS (sidebar_page);
        GdkPixbuf *loading_icon;
        gint i, n_pages;
        GtkTreeIter iter;
@@ -253,10 +269,10 @@ ev_sidebar_thumbnails_set_document (EvSidebarThumbnails *sidebar_thumbnails,
 
        /* We get the dimensions of the first doc so that we can make a blank
         * icon.  */
-       g_mutex_lock (EV_DOC_MUTEX);
+       ev_document_doc_mutex_lock ();
        ev_document_thumbnails_get_dimensions (EV_DOCUMENT_THUMBNAILS (priv->document),
-                                              1, THUMBNAIL_WIDTH, &width, &height);
-       g_mutex_unlock (EV_DOC_MUTEX);
+                                              0, THUMBNAIL_WIDTH, &width, &height);
+       ev_document_doc_mutex_unlock ();
 
        loading_icon = ev_document_misc_get_thumbnail_frame (width, height, NULL);
 
@@ -324,4 +340,25 @@ ev_sidebar_thumbnails_clear_model (EvSidebarThumbnails *sidebar_thumbnails)
     gtk_list_store_clear (priv->list_store);
 }
 
+static gboolean
+ev_sidebar_thumbnails_support_document (EvSidebarPage   *sidebar_page,
+                                       EvDocument *document)
+{
+       return (EV_IS_DOCUMENT_THUMBNAILS (document) &&
+                   (ev_document_get_n_pages (document) > 1));
+}
+
+static const gchar*
+ev_sidebar_thumbnails_get_label (EvSidebarPage *sidebar_page)
+{
+    return _("Thumbnails");
+}
+
+static void
+ev_sidebar_thumbnails_page_iface_init (EvSidebarPageIface *iface)
+{
+       iface->support_document = ev_sidebar_thumbnails_support_document;
+       iface->set_document = ev_sidebar_thumbnails_set_document;
+       iface->get_label = ev_sidebar_thumbnails_get_label;
+}