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

Reply via email to