]> www.fi.muni.cz Git - evince.git/commitdiff
Refresh thumbnails when changing orientation. Not fully working yet
authorMarco Pesenti Gritti <mpg@redhat.com>
Sat, 18 Jun 2005 15:51:52 +0000 (15:51 +0000)
committerMarco Pesenti Gritti <marco@src.gnome.org>
Sat, 18 Jun 2005 15:51:52 +0000 (15:51 +0000)
2005-06-18  Marco Pesenti Gritti  <mpg@redhat.com>

        * pdf/ev-poppler.cc:
        * shell/ev-sidebar-thumbnails.c: (clear_range), (add_range),
        (update_visible_range), (adjustment_changed_cb),
        (ev_sidebar_thumbnails_fill_model),
        (ev_sidebar_thumbnails_refresh),
        (ev_sidebar_tree_selection_changed),
        (ev_sidebar_icon_selection_changed),
        (ev_sidebar_thumbnails_use_icon_view),
        (ev_sidebar_thumbnails_set_document):
        * shell/ev-sidebar-thumbnails.h:
        * shell/ev-window.c: (ev_window_cmd_edit_rotate_left),
        (ev_window_cmd_edit_rotate_right), (ev_window_init):

        Refresh thumbnails when changing orientation. Not fully
        working yet becuase of a sidebar bug.

        Set page orientation to poppler page everywhere. This sucks
        really need to fix poppler.

ChangeLog
pdf/ev-poppler.cc
shell/ev-sidebar-thumbnails.c
shell/ev-sidebar-thumbnails.h
shell/ev-window.c

index 07f1de3ada7d8af34d0c2c112b613456615453e4..b493b948286acfd86627f954c6f02fc037ebb9a6 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,24 @@
+2005-06-18  Marco Pesenti Gritti  <mpg@redhat.com>
+
+       * pdf/ev-poppler.cc:
+       * shell/ev-sidebar-thumbnails.c: (clear_range), (add_range),
+       (update_visible_range), (adjustment_changed_cb),
+       (ev_sidebar_thumbnails_fill_model),
+       (ev_sidebar_thumbnails_refresh),
+       (ev_sidebar_tree_selection_changed),
+       (ev_sidebar_icon_selection_changed),
+       (ev_sidebar_thumbnails_use_icon_view),
+       (ev_sidebar_thumbnails_set_document):
+       * shell/ev-sidebar-thumbnails.h:
+       * shell/ev-window.c: (ev_window_cmd_edit_rotate_left),
+       (ev_window_cmd_edit_rotate_right), (ev_window_init):
+
+       Refresh thumbnails when changing orientation. Not fully
+       working yet becuase of a sidebar bug.
+
+       Set page orientation to poppler page everywhere. This sucks
+       really need to fix poppler.
+
 2005-06-18  Marco Pesenti Gritti  <mpg@redhat.com>
 
        * cut-n-paste/recent-files/egg-recent-view-gtk.c:
index 78475da5050673c032fceb849c1b32c76c52484b..8479ad4336fa4fd99fff23666e499b51f797f50e 100644 (file)
@@ -505,6 +505,7 @@ pdf_document_get_text (EvDocument *document, int page, EvRectangle *rect)
        double height;
        
        poppler_page = poppler_document_get_page (pdf_document->document, page);
+       set_page_orientation (pdf_document, poppler_page);
        g_return_val_if_fail (poppler_page != NULL, NULL);
 
        poppler_page_get_size (poppler_page, NULL, &height);
@@ -566,6 +567,7 @@ pdf_document_set_orientation (EvDocument *document, EvOrientation orientation)
        }
 
        pdf_document->orientation = poppler_orientation;
+       pdf_document->orientation_set = TRUE;
 }
 
 static void
@@ -649,6 +651,10 @@ pdf_document_fonts_fill_model (EvDocumentFonts *document_fonts,
                        const char *name;
                
                        name = poppler_fonts_iter_get_name (iter);
+                       if (name == NULL) {
+                               name = _("No name");
+                       }
+
                        gtk_list_store_append (GTK_LIST_STORE (model), &list_iter);
                        gtk_list_store_set (GTK_LIST_STORE (model), &list_iter,
                                            EV_DOCUMENT_FONTS_COLUMN_NAME, name,
@@ -779,7 +785,7 @@ make_thumbnail_for_size (PdfDocument *pdf_document,
        gdouble unscaled_width, unscaled_height;
 
        poppler_page = poppler_document_get_page (pdf_document->document, page);
-
+       set_page_orientation (pdf_document, poppler_page);
        g_return_val_if_fail (poppler_page != NULL, NULL);
 
        pdf_document_thumbnails_get_dimensions (EV_DOCUMENT_THUMBNAILS (pdf_document), page, size, &width, &height);
@@ -819,6 +825,7 @@ pdf_document_thumbnails_get_thumbnail (EvDocumentThumbnails *document_thumbnails
        pdf_document = PDF_DOCUMENT (document_thumbnails);
 
        poppler_page = poppler_document_get_page (pdf_document->document, page);
+       set_page_orientation (pdf_document, poppler_page);
        g_return_val_if_fail (poppler_page != NULL, NULL);
 
        pixbuf = poppler_page_get_thumbnail (poppler_page);
@@ -851,6 +858,7 @@ pdf_document_thumbnails_get_dimensions (EvDocumentThumbnails *document_thumbnail
        
        pdf_document = PDF_DOCUMENT (document_thumbnails);
        poppler_page = poppler_document_get_page (pdf_document->document, page);
+       set_page_orientation (pdf_document, poppler_page);
 
        g_return_if_fail (width != NULL);
        g_return_if_fail (height != NULL);
@@ -891,6 +899,7 @@ pdf_document_search_idle_callback (void *data)
 
        page = poppler_document_get_page (search->document->document,
                                          search->search_page);
+       set_page_orientation (pdf_document, page);
 
        ev_document_doc_mutex_lock ();
        matches = poppler_page_find_text (page, search->text);
@@ -1027,6 +1036,7 @@ pdf_document_find_get_result (EvDocumentFind *document_find,
                return FALSE;
 
        poppler_page = poppler_document_get_page (pdf_document->document, page);
+       set_page_orientation (pdf_document, poppler_page);
        poppler_page_get_size (poppler_page, NULL, &height);
        rectangle->x1 = r->x1;
        rectangle->y1 = height - r->y2;
@@ -1113,6 +1123,7 @@ pdf_document_ps_exporter_do_page (EvPSExporter *exporter, int page)
        g_return_if_fail (pdf_document->ps_file != NULL);
 
        poppler_page = poppler_document_get_page (pdf_document->document, page);
+       set_page_orientation (pdf_document, poppler_page);
        poppler_page_render_to_ps (poppler_page, pdf_document->ps_file);
 }
 
index d86d392aaf20430d04a0361c0cf214fbeb8fdc97..93f4150483b0859266ee5dc5e3196d3a9fb71464 100644 (file)
@@ -53,6 +53,7 @@ struct _EvSidebarThumbnailsPrivate {
        GtkListStore *list_store;
        GdkPixbuf *loading_icon;
        EvDocument *document;
+       EvPageCache *page_cache;
 
        gint n_pages, pages_done;
 
@@ -162,13 +163,11 @@ clear_range (EvSidebarThumbnails *sidebar_thumbnails,
             gint                 start_page,
             gint                 end_page)
 {
-       EvSidebarThumbnailsPrivate *priv;
+       EvSidebarThumbnailsPrivate *priv = sidebar_thumbnails->priv;
        GtkTreePath *path;
        GtkTreeIter iter;
        gboolean result;
 
-       priv = sidebar_thumbnails->priv = EV_SIDEBAR_THUMBNAILS_GET_PRIVATE (sidebar_thumbnails);
-
        g_assert (start_page <= end_page);
 
        path = gtk_tree_path_new_from_indices (start_page, -1);
@@ -202,14 +201,12 @@ add_range (EvSidebarThumbnails *sidebar_thumbnails,
           gint                 start_page,
           gint                 end_page)
 {
-       EvSidebarThumbnailsPrivate *priv;
+       EvSidebarThumbnailsPrivate *priv = sidebar_thumbnails->priv;
        GtkTreePath *path;
        GtkTreeIter iter;
        gboolean result;
        gint page = start_page;
 
-       priv = sidebar_thumbnails->priv = EV_SIDEBAR_THUMBNAILS_GET_PRIVATE (sidebar_thumbnails);
-
        g_assert (start_page <= end_page);
 
        path = gtk_tree_path_new_from_indices (start_page, -1);
@@ -251,11 +248,9 @@ update_visible_range (EvSidebarThumbnails *sidebar_thumbnails,
                      gint                 start_page,
                      gint                 end_page)
 {
-       EvSidebarThumbnailsPrivate *priv;
+       EvSidebarThumbnailsPrivate *priv = sidebar_thumbnails->priv;
        int old_start_page, old_end_page;
 
-       priv = sidebar_thumbnails->priv = EV_SIDEBAR_THUMBNAILS_GET_PRIVATE (sidebar_thumbnails);
-
        old_start_page = priv->start_page;
        old_end_page = priv->end_page;
 
@@ -279,14 +274,12 @@ update_visible_range (EvSidebarThumbnails *sidebar_thumbnails,
 static void
 adjustment_changed_cb (EvSidebarThumbnails *sidebar_thumbnails)
 {
-       EvSidebarThumbnailsPrivate *priv;
+       EvSidebarThumbnailsPrivate *priv = sidebar_thumbnails->priv;
        GtkTreePath *path = NULL;
        GtkTreePath *path2 = NULL;
        gint wy1;
        gint wy2;
 
-       priv = sidebar_thumbnails->priv = EV_SIDEBAR_THUMBNAILS_GET_PRIVATE (sidebar_thumbnails);
-
        if (priv->tree_view) {
                if (! GTK_WIDGET_REALIZED (priv->tree_view))
                        return;
@@ -328,18 +321,48 @@ adjustment_changed_cb (EvSidebarThumbnails *sidebar_thumbnails)
        gtk_tree_path_free (path2);
 }
 
+static void
+ev_sidebar_thumbnails_fill_model (EvSidebarThumbnails *sidebar_thumbnails)
+{
+       EvSidebarThumbnailsPrivate *priv = sidebar_thumbnails->priv;
+       GtkTreeIter iter;
+       int i;
+
+       for (i = 0; i < sidebar_thumbnails->priv->n_pages; i++) {
+               gchar *page_label;
+               gchar *page_string;
+
+               page_label = ev_page_cache_get_page_label (priv->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_string,
+                                   COLUMN_PIXBUF, priv->loading_icon,
+                                   COLUMN_THUMBNAIL_SET, FALSE,
+                                   -1);
+               g_free (page_label);
+               g_free (page_string);
+       }
+}
+
+void
+ev_sidebar_thumbnails_refresh (EvSidebarThumbnails *sidebar_thumbnails)
+{
+       ev_sidebar_thumbnails_clear_model (sidebar_thumbnails);
+       ev_sidebar_thumbnails_fill_model (sidebar_thumbnails);
+       adjustment_changed_cb (sidebar_thumbnails);
+}
+
 static void
 ev_sidebar_tree_selection_changed (GtkTreeSelection *selection,
                                   EvSidebarThumbnails *ev_sidebar_thumbnails)
 {
-       EvSidebarThumbnailsPrivate *priv;
-       EvPageCache *page_cache;
+       EvSidebarThumbnailsPrivate *priv = ev_sidebar_thumbnails->priv;
        GtkTreePath *path;
        GtkTreeIter iter;
        int page;
 
-       priv = ev_sidebar_thumbnails->priv = EV_SIDEBAR_THUMBNAILS_GET_PRIVATE (ev_sidebar_thumbnails);
-
        if (!gtk_tree_selection_get_selected (selection, NULL, &iter))
                return;
 
@@ -348,22 +371,18 @@ ev_sidebar_tree_selection_changed (GtkTreeSelection *selection,
        page = gtk_tree_path_get_indices (path)[0];
        gtk_tree_path_free (path);
 
-       page_cache = ev_page_cache_get (priv->document);
-       ev_page_cache_set_current_page (page_cache, page);
+       ev_page_cache_set_current_page (priv->page_cache, page);
 }
 
 static void
 ev_sidebar_icon_selection_changed (GtkIconView         *icon_view,
                                   EvSidebarThumbnails *ev_sidebar_thumbnails)
 {
-       EvSidebarThumbnailsPrivate *priv;
-       EvPageCache *page_cache;
+       EvSidebarThumbnailsPrivate *priv = ev_sidebar_thumbnails->priv;
        GtkTreePath *path;
        GList *selected;
        int page;
 
-       priv = ev_sidebar_thumbnails->priv = EV_SIDEBAR_THUMBNAILS_GET_PRIVATE (ev_sidebar_thumbnails);
-
        selected = gtk_icon_view_get_selected_items (icon_view);
        if (selected == NULL)
                return;
@@ -377,8 +396,7 @@ ev_sidebar_icon_selection_changed (GtkIconView         *icon_view,
        gtk_tree_path_free (path);
        g_list_free (selected);
 
-       page_cache = ev_page_cache_get (priv->document);
-       ev_page_cache_set_current_page (page_cache, page);
+       ev_page_cache_set_current_page (priv->page_cache, page);
 }
 
 static void
@@ -431,11 +449,8 @@ static gboolean
 ev_sidebar_thumbnails_use_icon_view (EvSidebarThumbnails *sidebar_thumbnails)
 {
 #ifdef HAVE_GTK_ICON_VIEW_GET_VISIBLE_RANGE
-       EvPageCache *page_cache;
-
-       page_cache = ev_page_cache_get (sidebar_thumbnails->priv->document);
-
-       if (ev_page_cache_get_n_pages (page_cache) > MAX_ICON_VIEW_PAGE_COUNT)
+       EvSidebarThumbnailsPrivate *priv = sidebar_thumbnails->priv;
+       if (ev_page_cache_get_n_pages (priv->page_cache) > MAX_ICON_VIEW_PAGE_COUNT)
                return FALSE;
        return TRUE;
 #else
@@ -521,21 +536,16 @@ ev_sidebar_thumbnails_set_document (EvSidebarPage *sidebar_page,
                                    EvDocument          *document)
 {
        EvSidebarThumbnails *sidebar_thumbnails = EV_SIDEBAR_THUMBNAILS (sidebar_page);
-       gint i, n_pages;
-       GtkTreeIter iter;
        gint width = THUMBNAIL_WIDTH;
        gint height = THUMBNAIL_WIDTH;
-       EvPageCache *page_cache;
 
        EvSidebarThumbnailsPrivate *priv = sidebar_thumbnails->priv;
 
        g_return_if_fail (EV_IS_DOCUMENT_THUMBNAILS (document));
 
-       page_cache = ev_page_cache_get (document);
-       n_pages = ev_page_cache_get_n_pages (page_cache);
-
+       priv->page_cache = ev_page_cache_get (document);
        priv->document = document;
-       priv->n_pages = n_pages;
+       priv->n_pages = ev_page_cache_get_n_pages (priv->page_cache);
 
        /* We get the dimensions of the first doc so that we can make a blank
         * icon.  */
@@ -549,23 +559,7 @@ ev_sidebar_thumbnails_set_document (EvSidebarPage  *sidebar_page,
        priv->loading_icon = ev_document_misc_get_thumbnail_frame (width, height, NULL);
 
        ev_sidebar_thumbnails_clear_model (sidebar_thumbnails);
-       for (i = 0; i < n_pages; i++) {
-               gchar *page_label;
-               gchar *page_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_string,
-                                   COLUMN_PIXBUF, priv->loading_icon,
-                                   COLUMN_THUMBNAIL_SET, FALSE,
-                                   -1);
-               g_free (page_label);
-               g_free (page_string);
-       }
-
+       ev_sidebar_thumbnails_fill_model (sidebar_thumbnails);
 
        /* Create the view widget, and remove the old one, if needed */
        if (ev_sidebar_thumbnails_use_icon_view (sidebar_thumbnails)) {
@@ -591,7 +585,7 @@ ev_sidebar_thumbnails_set_document (EvSidebarPage   *sidebar_page,
        }
 
        /* Connect to the signal and trigger a fake callback */
-       g_signal_connect (page_cache, "page-changed", G_CALLBACK (page_changed_cb), sidebar_thumbnails);
+       g_signal_connect (priv->page_cache, "page-changed", G_CALLBACK (page_changed_cb), sidebar_thumbnails);
        adjustment_changed_cb (sidebar_thumbnails);
 }
 
index d3171b0cb6a26fe932d1ba11a13f8a9f0c387c94..6e93a8f098f3c0c0c2222bf6f9138808917f6bdc 100644 (file)
@@ -53,6 +53,7 @@ struct _EvSidebarThumbnailsClass {
 
 GType      ev_sidebar_thumbnails_get_type     (void);
 GtkWidget *ev_sidebar_thumbnails_new          (void);
+void       ev_sidebar_thumbnails_refresh      (EvSidebarThumbnails *sidebar_thumbnails);
 
 G_END_DECLS
 
index 4e8db2f0e8deeb849fcea143767b6c49a281e78e..b9eb24e430c256aaf86ded5c93a24e458747af98 100644 (file)
@@ -101,6 +101,7 @@ struct _EvWindowPrivate {
        GtkWidget *page_view;
        GtkWidget *password_view;
        GtkWidget *statusbar;
+       GtkWidget *sidebar_thumbs;
 
        /* Dialogs */
        EvProperties *properties;
@@ -1802,12 +1803,14 @@ static void
 ev_window_cmd_edit_rotate_left (GtkAction *action, EvWindow *ev_window)
 {
        ev_view_rotate_left (EV_VIEW (ev_window->priv->view));
+       ev_sidebar_thumbnails_refresh (EV_SIDEBAR_THUMBNAILS (ev_window->priv->sidebar_thumbs));
 }
 
 static void
 ev_window_cmd_edit_rotate_right (GtkAction *action, EvWindow *ev_window)
 {
        ev_view_rotate_right (EV_VIEW (ev_window->priv->view));
+       ev_sidebar_thumbnails_refresh (EV_SIDEBAR_THUMBNAILS (ev_window->priv->sidebar_thumbs));
 }
 
 static void
@@ -3045,6 +3048,7 @@ ev_window_init (EvWindow *ev_window)
                             sidebar_widget);
 
        sidebar_widget = ev_sidebar_thumbnails_new ();
+       ev_window->priv->sidebar_thumbs = sidebar_widget;
        g_signal_connect (sidebar_widget,
                          "notify::main-widget",
                          G_CALLBACK (sidebar_page_main_widget_update_cb),