Hi! >what GTK+ version do you have? ii libgtk2.0-0 2.18.6-1~bpo50+1 The GTK+ graphical user interface library ii libglib2.0-0 2.22.4-1~bpo50+1 The GLib library of C routines
ii libpoppler3 0.12.0-backported-0 Poppler 0.12.0 for Debian Lenny ii libopenjpeg2 1.3+dfsg-3 JPEG 2000 image compression/decompression li On Tue, Jun 15, 2010 at 12:05 PM, Carlos Garcia Campos <[email protected]>wrote: > Excerpts from Peter Senna Tschudin's message of mar jun 15 16:03:54 +0200 > 2010: > > Dear Carlos, > > > > Looks like that the file libview/ev-print-operation.c is not being > compiled > > during make. Where is the .o file? > > > > See: > > [pe...@lenny-i386-/devel/evince-backports/evince-2.29.92/libview]$ ls > > ev-annotation-window.c libevview_la-ev-annotation-window.lo > > ev-annotation-window.h libevview_la-ev-annotation-window.o > > ev-document-model.c libevview_la-ev-document-model.lo > > ev-document-model.h libevview_la-ev-document-model.o > > ev-jobs.c libevview_la-ev-job-scheduler.lo > > ev-job-scheduler.c libevview_la-ev-job-scheduler.o > > ev-job-scheduler.h libevview_la-ev-jobs.lo > > ev-jobs.h libevview_la-ev-jobs.o > > ev-page-cache.c libevview_la-ev-page-cache.lo > > ev-page-cache.h libevview_la-ev-page-cache.o > > ev-pixbuf-cache.c libevview_la-ev-pixbuf-cache.lo > > ev-pixbuf-cache.h libevview_la-ev-pixbuf-cache.o > > ev-print-operation.c libevview_la-ev-print-operation.lo > > ev-print-operation.h libevview_la-ev-print-operation.o > > ev-stock-icons.c libevview_la-ev-stock-icons.lo > > ev-stock-icons.h libevview_la-ev-stock-icons.o > > ev-timeline.c libevview_la-ev-timeline.lo > > ev-timeline.h libevview_la-ev-timeline.o > > ev-transition-animation.c libevview_la-ev-transition-animation.lo > > ev-transition-animation.h libevview_la-ev-transition-animation.o > > ev-view-accessible.c libevview_la-ev-view-accessible.lo > > ev-view-accessible.h libevview_la-ev-view-accessible.o > > ev-view.c libevview_la-ev-view-cursor.lo > > ev-view-cursor.c libevview_la-ev-view-cursor.o > > ev-view-cursor.h libevview_la-ev-view.lo > > ev-view.h libevview_la-ev-view-marshal.lo > > ev-view-marshal.c libevview_la-ev-view-marshal.o > > ev-view-marshal.h libevview_la-ev-view.o > > ev-view-marshal.list libevview_la-ev-view-presentation.lo > > ev-view-presentation.c libevview_la-ev-view-presentation.o > > ev-view-presentation.h libevview_la-ev-view-type-builtins.lo > > ev-view-private.h libevview_la-ev-view-type-builtins.o > > ev-view-type-builtins.c Makefile > > ev-view-type-builtins.c.template Makefile.am > > ev-view-type-builtins.h Makefile.in > > ev-view-type-builtins.h.template stamp-ev-view-type-builtins.h > > libevview.la > > > > What is missing? > > what GTK+ version do you have? > > > Thanks! > > > > Peter > > > > > > On Tue, Jun 15, 2010 at 10:28 AM, Peter Senna Tschudin < > > [email protected]> wrote: > > > > > Dear Carlos, > > > > > > In the past month I wrote a code to send Alt-p to the print dialog in > order > > > do print. But this is not a 100% effective method and I have followed > your > > > instructons to update Evince. > > > > > > I'm testing evince 2.29.92. Configure with: ./configure --disable-ps > > > --disable-dvi > > > > > > The code I have changed is: > > > #vi libview/ev-print-operation.c > > > :1621 > > > > > > static void > > > ev_print_operation_print_run (EvPrintOperation *op, > > > GtkWindow *parent) > > > { > > > EvPrintOperationPrint *print = EV_PRINT_OPERATION_PRINT (op); > > > > > > gtk_print_operation_run (print->op, > > > GTK_PRINT_OPERATION_ACTION_PRINT, > > > parent, NULL); > > > } > > > > > > But the change has no effect. Evince shows the print dialog when the > second > > > argument is GTK_PRINT_OPERATION_ACTION_PRINT and when it > > > is GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG. > > > > > > What am I doing wrong? > > > > > > Thanks! > > > > > > Peter > > > > > > On Thu, May 20, 2010 at 3:51 AM, Carlos Garcia Campos < > [email protected]>wrote: > > > > > >> Excerpts from Peter Senna Tschudin's message of jue may 20 01:04:54 > +0200 > > >> 2010: > > >> > Dear list members, > > >> > This is my first post. > > >> > > > >> > I'm working on a simple modification of Evince. I want that when > user > > >> choose > > >> > "Print" Evince prints the file directly instead of showing the print > > >> screen. > > >> > > > >> > See part of the source code: > > >> > > > >> > #vi evince-2.22.2/shell/ev-window.c > > >> > > >> evince 2.22 is too old, printing code has changed a lot. Since Evince > > >> 2.28 we use GtkPrintOperation to print pdf files which already > > >> supports printing without showing the print dialog. You only need to > > >> use GTK_PRINT_OPERATION_ACTION_PRINT as second argument of > > >> gtk_print_operation_run(). > > >> > > >> > void > > >> > ev_window_print_range (EvWindow *ev_window, int first_page, int > > >> last_page) > > >> > { > > >> > GtkWidget *dialog; > > >> > EvPageCache *page_cache; > > >> > gint current_page; > > >> > gint document_last_page; > > >> > GtkPrintCapabilities capabilities; > > >> > > > >> > g_return_if_fail (EV_IS_WINDOW (ev_window)); > > >> > g_return_if_fail (ev_window->priv->document != NULL); > > >> > > > >> > if (ev_window->priv->print_dialog) { > > >> > gtk_window_present (GTK_WINDOW > > >> > (ev_window->priv->print_dialog)); > > >> > return; > > >> > } > > >> > > > >> > page_cache = ev_page_cache_get (ev_window->priv->document); > > >> > current_page = ev_page_cache_get_current_page (page_cache); > > >> > document_last_page = ev_page_cache_get_n_pages (page_cache); > > >> > > > >> > if (!ev_window->priv->print_settings) { > > >> > ev_window->priv->print_settings = > > >> gtk_print_settings_copy ( > > >> > ev_application_get_print_settings (EV_APP)); > > >> > ev_window_load_print_settings_from_metadata > (ev_window); > > >> > } > > >> > > > >> > if (first_page != 1 || last_page != document_last_page) { > > >> > GtkPageRange range; > > >> > > > >> > /* Ranges in GtkPrint are 0 - N */ > > >> > range.start = first_page - 1; > > >> > range.end = last_page - 1; > > >> > > > >> > gtk_print_settings_set_print_pages > > >> > (ev_window->priv->print_settings, > > >> > > > >> GTK_PRINT_PAGES_RANGES); > > >> > gtk_print_settings_set_page_ranges > > >> > (ev_window->priv->print_settings, > > >> > &range, 1); > > >> > } > > >> > > > >> > dialog = gtk_print_unix_dialog_new (_("Print"), GTK_WINDOW > > >> > (ev_window)); > > >> > ev_window->priv->print_dialog = dialog; > > >> > > > >> > capabilities = GTK_PRINT_CAPABILITY_PREVIEW | > > >> > ev_file_exporter_get_capabilities (EV_FILE_EXPORTER > > >> > (ev_window->priv->document)); > > >> > gtk_print_unix_dialog_set_manual_capabilities > > >> (GTK_PRINT_UNIX_DIALOG > > >> > (dialog), > > >> > > capabilities); > > >> > > > >> > gtk_print_unix_dialog_set_current_page > (GTK_PRINT_UNIX_DIALOG > > >> > (dialog), > > >> > current_page); > > >> > > > >> > gtk_print_unix_dialog_set_settings (GTK_PRINT_UNIX_DIALOG > > >> (dialog), > > >> > > > >> > ev_window->priv->print_settings); > > >> > if (ev_window->priv->print_page_setup) > > >> > gtk_print_unix_dialog_set_page_setup > > >> (GTK_PRINT_UNIX_DIALOG > > >> > (dialog), > > >> > > > >> > ev_window->priv->print_page_setup); > > >> > > > >> > g_signal_connect (G_OBJECT (dialog), "response", > > >> > G_CALLBACK > > >> (ev_window_print_dialog_response_cb), > > >> > ev_window); > > >> > > > >> > gtk_widget_show (dialog); > > >> > > > >> > // ********************************************** > > >> > // I ADDED THE LINE BELOW > > >> > // ********************************************** > > >> > > > >> > g_signal_emit_by_name (G_OBJECT (dialog), "response", > > >> > GTK_RESPONSE_OK); > > >> > > > >> > } > > >> > > > >> > What am I doing wrong? :-/ > > >> > > > >> > After my change, when "Ctrl-P", Evince outputs: > > >> > > > >> > (evince:28399): GLib-GObject-CRITICAL **: g_object_ref: assertion > > >> > `G_IS_OBJECT (object)' failed > > >> > > > >> > (evince:28399): Gtk-CRITICAL **: gtk_printer_accepts_ps: assertion > > >> > `GTK_IS_PRINTER (printer)' failed > > >> > > > >> > (evince:28399): Gtk-CRITICAL **: gtk_printer_get_backend: assertion > > >> > `GTK_IS_PRINTER (printer)' failed > > >> > > > >> > (evince:28399): GLib-GObject-CRITICAL **: g_object_ref: assertion > > >> > `G_IS_OBJECT (object)' failed > > >> > Segmentation fault > > >> > > > >> > > > >> > But if I change GTK_RESPONSE_OK to GTK_RESPONSE_CANCEL then it works > as > > >> > expected. The print dialog is not shown, and it does not print > because > > >> > the GTK_RESPONSE_CANCEL means the cancel button. > > >> > > > >> > I think that the error is related to the callback > > >> > function ev_window_print_dialog_response_cb. Here goes its untouched > > >> code: > > >> > > > >> > static gboolean > > >> > ev_window_print_dialog_response_cb (GtkDialog *dialog, > > >> > gint response, > > >> > EvWindow *window) > > >> > { > > >> > EvPrintRange *ranges = NULL; > > >> > EvPrintPageSet page_set; > > >> > gint n_ranges = 0; > > >> > gint copies; > > >> > gint pages_per_sheet; > > >> > gboolean collate; > > >> > gboolean reverse; > > >> > gdouble scale; > > >> > gint current_page; > > >> > gdouble width; > > >> > gdouble height; > > >> > GtkPrintPages print_pages; > > >> > const gchar *file_format; > > >> > > > >> > if (response != GTK_RESPONSE_OK && > > >> > response != GTK_RESPONSE_APPLY) { > > >> > gtk_widget_destroy (GTK_WIDGET (dialog)); > > >> > window->priv->print_dialog = NULL; > > >> > > > >> > return FALSE; > > >> > } > > >> > > > >> > window->priv->print_preview = (response == > GTK_RESPONSE_APPLY); > > >> > > > >> > if (window->priv->printer) > > >> > g_object_unref (window->priv->printer); > > >> > if (window->priv->print_settings) > > >> > g_object_unref (window->priv->print_settings); > > >> > if (window->priv->print_page_setup) > > >> > g_object_unref (window->priv->print_page_setup); > > >> > > > >> > window->priv->printer = g_object_ref ( > > >> > gtk_print_unix_dialog_get_selected_printer > > >> > (GTK_PRINT_UNIX_DIALOG (dialog))); > > >> > window->priv->print_settings = g_object_ref ( > > >> > gtk_print_unix_dialog_get_settings > > >> (GTK_PRINT_UNIX_DIALOG > > >> > (dialog))); > > >> > window->priv->print_page_setup = g_object_ref ( > > >> > gtk_print_unix_dialog_get_page_setup > > >> (GTK_PRINT_UNIX_DIALOG > > >> > (dialog))); > > >> > > > >> > file_format = gtk_print_settings_get > > >> (window->priv->print_settings, > > >> > > > >> > GTK_PRINT_SETTINGS_OUTPUT_FILE_FORMAT); > > >> > > > >> > if (!gtk_printer_accepts_ps (window->priv->printer)) { > > >> > GtkWidget *msgdialog; > > >> > msgdialog = gtk_message_dialog_new (GTK_WINDOW > > >> (dialog), > > >> > > GTK_DIALOG_MODAL, > > >> > > GTK_MESSAGE_ERROR, > > >> > GTK_BUTTONS_OK, > > >> > _("Printing is > not > > >> > supported on this printer.")); > > >> > > > >> > gtk_dialog_run (GTK_DIALOG (msgdialog)); > > >> > gtk_widget_destroy (msgdialog); > > >> > > > >> > return FALSE; > > >> > } > > >> > > > >> > ev_window_clear_print_job (window); > > >> > > > >> > current_page = gtk_print_unix_dialog_get_current_page > > >> > (GTK_PRINT_UNIX_DIALOG (dialog)); > > >> > print_pages = gtk_print_settings_get_print_pages > > >> > (window->priv->print_settings); > > >> > > > >> > switch (print_pages) { > > >> > case GTK_PRINT_PAGES_CURRENT: > > >> > ranges = g_new0 (EvPrintRange, 1); > > >> > > > >> > ranges->start = current_page; > > >> > ranges->end = current_page; > > >> > n_ranges = 1; > > >> > > > >> > break; > > >> > case GTK_PRINT_PAGES_RANGES: { > > >> > GtkPageRange *page_range; > > >> > > > >> > page_range = gtk_print_settings_get_page_ranges > > >> > (window->priv->print_settings, > > >> > > > >> &n_ranges); > > >> > if (n_ranges > 0) > > >> > ranges = g_memdup (page_range, n_ranges * > sizeof > > >> > (GtkPageRange)); > > >> > } > > >> > break; > > >> > case GTK_PRINT_PAGES_ALL: { > > >> > gint n_pages; > > >> > > > >> > n_pages = ev_page_cache_get_n_pages > (ev_page_cache_get > > >> > (window->priv->document)); > > >> > > > >> > ranges = g_new0 (EvPrintRange, 1); > > >> > > > >> > ranges->start = 0; > > >> > ranges->end = n_pages - 1; > > >> > n_ranges = 1; > > >> > } > > >> > break; > > >> > } > > >> > > > >> > page_set = (EvPrintPageSet)gtk_print_settings_get_page_set > > >> > (window->priv->print_settings); > > >> > > > >> > scale = gtk_print_settings_get_scale > > >> (window->priv->print_settings) > > >> > * 0.01; > > >> > > > >> > width = gtk_page_setup_get_paper_width > > >> > (window->priv->print_page_setup, > > >> > GTK_UNIT_POINTS); > > >> > height = gtk_page_setup_get_paper_height > > >> > (window->priv->print_page_setup, > > >> > GTK_UNIT_POINTS); > > >> > > > >> > if (scale != 1.0) { > > >> > width *= scale; > > >> > height *= scale; > > >> > } > > >> > > > >> > pages_per_sheet = gtk_print_settings_get_number_up > > >> > (window->priv->print_settings); > > >> > > > >> > copies = gtk_print_settings_get_n_copies > > >> > (window->priv->print_settings); > > >> > collate = gtk_print_settings_get_collate > > >> > (window->priv->print_settings); > > >> > reverse = gtk_print_settings_get_reverse > > >> > (window->priv->print_settings); > > >> > > > >> > window->priv->print_job = ev_job_print_new > > >> (window->priv->document, > > >> > file_format ? > > >> > file_format : "ps", > > >> > width, height, > > >> > ranges, > n_ranges, > > >> > page_set, > > >> > pages_per_sheet, > > >> > copies, collate, > > >> > reverse); > > >> > > > >> > g_signal_connect (window->priv->print_job, "finished", > > >> > G_CALLBACK (ev_window_print_job_cb), > > >> > window); > > >> > /* The priority doesn't matter for this job */ > > >> > ev_job_queue_add_job (window->priv->print_job, > > >> EV_JOB_PRIORITY_LOW); > > >> > > > >> > gtk_widget_destroy (GTK_WIDGET (dialog)); > > >> > window->priv->print_dialog = NULL; > > >> > > > >> > return TRUE; > > >> > } > > >> > > > >> > > > >> > Can you help me? > > >> > > > >> > Thanks, > > >> > > > >> > Peter > > >> > > > >> > > > > > > > > > > > > > > > -- > Carlos Garcia Campos > PGP key: http://pgp.mit.edu:11371/pks/lookup?op=get&search=0x523E6462 > -- Peter Senna Tschudin [email protected] gpg id: 48274C36
_______________________________________________ evince-list mailing list [email protected] http://mail.gnome.org/mailman/listinfo/evince-list
