Index: src/poppler_viewer.c =================================================================== RCS file: /pack/anoncvs/sylpheedclaws/plugins/pdf_viewer/src/Attic/poppler_viewer.c,v retrieving revision 1.1.2.10 diff -u -p -r1.1.2.10 poppler_viewer.c --- src/poppler_viewer.c 2007/03/02 07:50:22 1.1.2.10 +++ src/poppler_viewer.c 2007/03/02 14:19:35 @@ -101,8 +101,6 @@ struct _PopplerViewer gchar *filename; gchar *fsname; gchar *doc_info_text; - gint cur_page_int; - gint num_pages_int; gint rotate; double zoom; double width; @@ -131,21 +129,19 @@ static GtkWidget *poppler_get_widget(Mim static void poppler_prev_page_cb(GtkButton *button, PopplerViewer *viewer) { - if (viewer->cur_page_int > 1) - poppler_pdf_view_update((MimeViewer *)viewer, FALSE, viewer->cur_page_int - 1); + poppler_pdf_view_update((MimeViewer *)viewer, FALSE, gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(viewer->cur_page)) - 1); } static void poppler_next_page_cb(GtkButton *button, PopplerViewer *viewer) { - if (viewer->cur_page_int < viewer->num_pages_int) - poppler_pdf_view_update((MimeViewer *)viewer, FALSE, viewer->cur_page_int + 1); + poppler_pdf_view_update((MimeViewer *)viewer, FALSE, gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(viewer->cur_page)) + 1); } static void poppler_zoom_in_cb(GtkButton *button, PopplerViewer *viewer) { if (viewer->zoom < 4) { viewer->zoom += ZOOM_FACTOR; - poppler_pdf_view_update((MimeViewer *)viewer, FALSE, viewer->cur_page_int); + poppler_pdf_view_update((MimeViewer *)viewer, FALSE, gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(viewer->cur_page))); } } @@ -153,7 +149,7 @@ static void poppler_zoom_out_cb(GtkButto { if (viewer->zoom > 0.3) { viewer->zoom -= ZOOM_FACTOR; - poppler_pdf_view_update((MimeViewer *)viewer, FALSE, viewer->cur_page_int); + poppler_pdf_view_update((MimeViewer *)viewer, FALSE, gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(viewer->cur_page))); } } @@ -171,7 +167,7 @@ static void poppler_zoom_fit_cb(GtkButto viewer->zoom = yratio; else viewer->zoom = xratio; - poppler_pdf_view_update((MimeViewer *)viewer, FALSE, viewer->cur_page_int); + poppler_pdf_view_update((MimeViewer *)viewer, FALSE, gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(viewer->cur_page))); } static void poppler_zoom_width_cb(GtkButton *button, PopplerViewer *viewer) @@ -182,7 +178,7 @@ static void poppler_zoom_width_cb(GtkBut debug_print("width: %d\n", allocation->width); xratio = allocation->width / viewer->width; viewer->zoom = xratio; - poppler_pdf_view_update((MimeViewer *)viewer, FALSE, viewer->cur_page_int); + poppler_pdf_view_update((MimeViewer *)viewer, FALSE, gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(viewer->cur_page))); } static void poppler_rotate_right_cb(GtkButton *button, PopplerViewer *viewer) @@ -191,7 +187,7 @@ static void poppler_rotate_right_cb(GtkB viewer->rotate = 0; viewer->rotate += (gint) ROTATION; - poppler_pdf_view_update((MimeViewer *)viewer, FALSE, viewer->cur_page_int); + poppler_pdf_view_update((MimeViewer *)viewer, FALSE, gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(viewer->cur_page))); } static void poppler_rotate_left_cb(GtkButton *button, PopplerViewer *viewer) @@ -200,7 +196,7 @@ static void poppler_rotate_left_cb(GtkBu viewer->rotate = 360; viewer->rotate = abs(viewer->rotate - (gint) ROTATION); - poppler_pdf_view_update((MimeViewer *)viewer, FALSE, viewer->cur_page_int); + poppler_pdf_view_update((MimeViewer *)viewer, FALSE, gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(viewer->cur_page))); } static const char * poppler_get_document_info_mode(PopplerPageMode mode) @@ -413,12 +409,9 @@ static void poppler_document_info_cb(Gtk static gboolean entry_current_page_cb(GtkEntry *entry, GdkEventKey *event, PopplerViewer *viewer) { - char *endptr; - if(event != NULL && event->keyval == GDK_Return) { - if(strtol(gtk_entry_get_text(GTK_ENTRY(viewer->cur_page)), &endptr, 10)) { - viewer->cur_page_int = strtol(gtk_entry_get_text(GTK_ENTRY(viewer->cur_page)), &endptr, 10); - poppler_pdf_view_update((MimeViewer *)viewer, FALSE, viewer->cur_page_int); + if((gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(viewer->cur_page)))) { + poppler_pdf_view_update((MimeViewer *)viewer, FALSE, gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(viewer->cur_page))); } } return FALSE; @@ -529,9 +522,7 @@ static void poppler_pdf_view_update(Mime PopplerViewer *viewer = (PopplerViewer *) _viewer; GError *error; GdkPixbuf *pb; - viewer->cur_page_int = page_num; - gchar *page_str = g_strdup_printf("%d", page_num); - gtk_label_set_text(GTK_LABEL(viewer->doc_label), ""); + gchar *tmpfile = NULL; error = NULL; if (reload_file) { @@ -617,47 +608,57 @@ static void poppler_pdf_view_update(Mime return; } - if (reload_file) { - viewer->num_pages_int = poppler_document_get_n_pages( viewer->pdf_doc); - gtk_label_set_text(GTK_LABEL(viewer->num_pages), g_strdup_printf("/ %d",viewer->num_pages_int)); - } - viewer->pdf_page = poppler_document_get_page_by_label (viewer->pdf_doc, page_str); - g_free(page_str); - if (viewer->pdf_page == NULL) { + if(page_num > 0 && page_num <= poppler_document_get_n_pages(viewer->pdf_doc)) { + gchar *page_str = g_strdup_printf("%d", page_num); + gtk_spin_button_set_value(GTK_SPIN_BUTTON(viewer->cur_page), (gdouble) page_num); + + if (reload_file) { + gint n; + n = poppler_document_get_n_pages(viewer->pdf_doc); + gtk_spin_button_set_range(GTK_SPIN_BUTTON(viewer->cur_page), 1, n); + gtk_label_set_text(GTK_LABEL(viewer->num_pages), g_strdup_printf("/ %d", n)); + } + + viewer->pdf_page = poppler_document_get_page_by_label (viewer->pdf_doc, page_str); + g_free(page_str); + + if (viewer->pdf_page == NULL) { g_warning ("Page not found\n"); return; - } + } - gtk_entry_set_text(GTK_ENTRY(viewer->cur_page), g_strdup_printf("%d",page_num)); - if(viewer->rotate == 90 || viewer->rotate == 270) { - poppler_page_get_size(viewer->pdf_page, &viewer->height, &viewer->width); - } - else { - poppler_page_get_size(viewer->pdf_page, &viewer->width, &viewer->height); - } + //gtk_entry_set_text(GTK_ENTRY(viewer->cur_page), g_strdup_printf("%d",page_num)); - pb = gdk_pixbuf_new (GDK_COLORSPACE_RGB, - FALSE, 8, - (int)(viewer->width * viewer->zoom), - (int)(viewer->height * viewer->zoom)); - - poppler_page_render_to_pixbuf (viewer->pdf_page, - 0, - 0, - (int)(viewer->width * viewer->zoom), - (int)(viewer->height * viewer->zoom), - viewer->zoom, - viewer->rotate, - pb); - - gtk_image_set_from_pixbuf(GTK_IMAGE(viewer->pdf_view), pb); - g_object_unref(G_OBJECT(pb)); - g_object_unref(G_OBJECT(viewer->pdf_page)); - - gtk_label_set_text(GTK_LABEL(viewer->doc_label), - g_strdup_printf(_("%s document"),(poppler_mimepart_get_type(viewer->to_load) == TYPE_PDF) ? "PDF":"Postscript")); - poppler_show_controls(viewer, TRUE); - + if(viewer->rotate == 90 || viewer->rotate == 270) { + poppler_page_get_size(viewer->pdf_page, &viewer->height, &viewer->width); + } + else { + poppler_page_get_size(viewer->pdf_page, &viewer->width, &viewer->height); + } + + pb = gdk_pixbuf_new (GDK_COLORSPACE_RGB, + FALSE, 8, + (int)(viewer->width * viewer->zoom), + (int)(viewer->height * viewer->zoom)); + + poppler_page_render_to_pixbuf (viewer->pdf_page, + 0, + 0, + (int)(viewer->width * viewer->zoom), + (int)(viewer->height * viewer->zoom), + viewer->zoom, + viewer->rotate, + pb); + + gtk_image_set_from_pixbuf(GTK_IMAGE(viewer->pdf_view), pb); + g_object_unref(G_OBJECT(pb)); + g_object_unref(G_OBJECT(viewer->pdf_page)); + + gtk_label_set_text(GTK_LABEL(viewer->doc_label), + g_strdup_printf(_("%s document"),(poppler_mimepart_get_type(viewer->to_load) == TYPE_PDF) ? "PDF":"Postscript")); + + poppler_show_controls(viewer, TRUE); + } } static gint poppler_show_mimepart_real(MimeViewer *_viewer) { @@ -767,15 +768,15 @@ static gboolean poppler_scroll_page(Mime return FALSE; if (!gtkutils_scroll_page(viewer->pdf_view, vadj, up)) { - if (!up && viewer->cur_page_int < viewer->num_pages_int) { - poppler_pdf_view_update(_viewer, FALSE, viewer->cur_page_int + 1); + if (!up) { + poppler_pdf_view_update(_viewer, FALSE, gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(viewer->cur_page) + 1)); vadj = gtk_scrolled_window_get_vadjustment( GTK_SCROLLED_WINDOW(viewer->scrollwin)); vadj->value = 0.0; g_signal_emit_by_name(G_OBJECT(vadj), "value-changed", 0); return TRUE; - } else if (up && viewer->cur_page_int > 1) { - poppler_pdf_view_update(_viewer, FALSE, viewer->cur_page_int - 1); + } else if (up) { + poppler_pdf_view_update(_viewer, FALSE, gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(viewer->cur_page) - 1)); vadj = gtk_scrolled_window_get_vadjustment( GTK_SCROLLED_WINDOW(viewer->scrollwin)); vadj->value = vadj->upper - vadj->page_size; @@ -831,11 +832,12 @@ static MimeViewer *poppler_viewer_create viewer->doc_label = gtk_label_new(""); viewer->vsep = gtk_vseparator_new(); viewer->vsep1 = gtk_vseparator_new(); - viewer->cur_page = gtk_entry_new(); + viewer->cur_page = gtk_spin_button_new_with_range(0,0,1); + gtk_spin_button_set_numeric(GTK_SPIN_BUTTON(viewer->cur_page), TRUE); viewer->button_bar_tips = gtk_tooltips_new(); - gtk_entry_set_max_length(GTK_ENTRY(viewer->cur_page), 7); - gtk_widget_set_size_request(viewer->cur_page, 50, -1); + //gtk_entry_set_max_length(GTK_ENTRY(viewer->cur_page), 7); + //gtk_widget_set_size_request(viewer->cur_page, 50, -1); viewer->prev = gtk_button_new(); gtk_widget_set_size_request(viewer->prev, -1, -1); @@ -1095,7 +1097,7 @@ gint plugin_init(gchar **error) msg = g_strdup_printf(_("This plugin enables the viewing of PDF and PostScript " "attachments using the Poppler %s Lib.\n\n" "PDF Viewer is Copyright (C) 2007\n" - "by Salvatore De Paolis " + "by Salvatore De Paolis " ),poppler_get_version()); bindtextdomain(TEXTDOMAIN, LOCALEDIR);