diff options
author | Srinivasa Ragavan <sragavan@src.gnome.org> | 2007-02-12 14:11:14 +0800 |
---|---|---|
committer | Srinivasa Ragavan <sragavan@src.gnome.org> | 2007-02-12 14:11:14 +0800 |
commit | 9862306af9b5019372cbcb6693b5ae1d56297776 (patch) | |
tree | 25b7efb0d1b3478601a172e289f0360df96c0f0a /addressbook/printing | |
parent | 0670e0a9070dac6359d34822f7433e9502fc1d22 (diff) | |
download | gsoc2013-evolution-9862306af9b5019372cbcb6693b5ae1d56297776.tar.gz gsoc2013-evolution-9862306af9b5019372cbcb6693b5ae1d56297776.tar.zst gsoc2013-evolution-9862306af9b5019372cbcb6693b5ae1d56297776.zip |
Print migration updates from Ebby Wiselyn.
svn path=/trunk/; revision=33201
Diffstat (limited to 'addressbook/printing')
-rw-r--r-- | addressbook/printing/e-contact-print.c | 82 |
1 files changed, 54 insertions, 28 deletions
diff --git a/addressbook/printing/e-contact-print.c b/addressbook/printing/e-contact-print.c index 16c219fe1e..51d2171f9f 100644 --- a/addressbook/printing/e-contact-print.c +++ b/addressbook/printing/e-contact-print.c @@ -64,6 +64,7 @@ typedef struct _ContactPrintItem ContactPrintItem; struct _EContactPrintContext { GtkPrintContext *pc; + GtkPrintOperation *print; GnomePrintJob *master; PangoLayout *pl; gdouble x; @@ -78,6 +79,7 @@ struct _EContactPrintContext gboolean uses_book; int type; + gint response_id; EBook *book; EBookQuery *query; @@ -98,6 +100,9 @@ struct _ContactPrintItem static void contact_draw_page (GtkPrintOperation *print, GtkPrintContext *context, gint page_nr, ContactPrintItem *cpi); +static void +print_func (EBookView *book_view, const GList *contacts, EContactPrintContext *ctxt); + static double get_font_height (PangoFontDescription *font) { @@ -360,7 +365,7 @@ e_contact_print_contact (EContact *contact, EContactPrintContext *ctxt) e_contact_pretty_name (field)); xoff += get_font_width(ctxt, ctxt->style->body_font, e_contact_pretty_name (field)); - e_contact_output(ctxt, ctxt->style->body_font, ctxt->x + xoff, ctxt->y, -1, ": "); + e_contact_output(ctxt, ctxt->style->body_font, ctxt->x + xoff, ctxt->y + 5, -1, ": "); xoff += get_font_width(ctxt, ctxt->style->body_font, ": "); e_contact_output(ctxt, @@ -448,13 +453,13 @@ complete_sequence (EBookView *book_view, EBookViewStatus status, EContactPrintCo g_object_unref(ctxt->pc); g_object_unref(ctxt->pl); - if (ctxt->book) + if (ctxt->book) g_object_unref(ctxt->book); - + g_free(ctxt->character); if (ctxt->query) e_book_query_unref (ctxt->query); - g_list_foreach(ctxt->contacts, (GFunc) g_object_unref, NULL); + g_list_foreach(ctxt->contacts, (GFunc) g_object_unref, NULL); g_list_free(ctxt->contacts); pango_font_description_free(ctxt->style->headings_font); pango_font_description_free(ctxt->style->body_font); @@ -462,7 +467,6 @@ complete_sequence (EBookView *book_view, EBookViewStatus status, EContactPrintCo pango_font_description_free(ctxt->style->footer_font); pango_font_description_free(ctxt->letter_heading_font); g_free(ctxt->style); - g_free(ctxt); } static int @@ -504,10 +508,27 @@ book_view_loaded (EBook *book, EBookStatus status, EBookView *book_view, EContac "contacts_added", G_CALLBACK(create_contact), ctxt); - + g_signal_connect(book_view, + "sequence_complete", + G_CALLBACK(print_func), + ctxt); e_book_view_start (book_view); } +static void +print_func (EBookView *book_view, const GList *contacts, EContactPrintContext *ctxt) +{ + GtkPrintSettings *settings; + settings = gtk_print_settings_new (); + /* runs a print dialog, emittings signals */ + if(ctxt->response_id == GTK_RESPONSE_APPLY) + gtk_print_operation_run (ctxt->print, GTK_PRINT_OPERATION_ACTION_PREVIEW, NULL, NULL); + else + gtk_print_operation_run (ctxt->print, GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG, NULL, NULL); + settings = gtk_print_operation_get_print_settings (ctxt->print); + e_print_save_settings (settings); +} + static void e_contact_do_print_contacts (EBook *book, EBookQuery *query, EContactPrintContext *ctxt) { @@ -725,7 +746,6 @@ void e_contact_print_response(GtkWidget *dialog, gint response_id, gpointer data) { GtkPrintSettings *settings; - GtkPrintOperation *print; GtkPrintOperationResult res; GtkPaperSize *paper_size; GtkPageSetup *page_setup; @@ -770,10 +790,10 @@ e_contact_print_response(GtkWidget *dialog, gint response_id, gpointer data) page_setup = gtk_page_setup_new (); paper_size = gtk_paper_size_new ("iso_a4"); /* FIXME paper size hardcoded */ gtk_page_setup_set_paper_size (page_setup, paper_size); - print = gtk_print_operation_new (); - gtk_print_operation_set_default_page_setup (print, page_setup); - gtk_print_operation_set_n_pages (print, 1); - gtk_print_settings_set_print_pages (settings, GTK_PRINT_PAGES_ALL); + ctxt->print = gtk_print_operation_new (); + gtk_print_operation_set_default_page_setup (ctxt->print, page_setup); + gtk_print_operation_set_n_pages (ctxt->print, 1); + gtk_print_settings_set_print_pages (settings, GTK_PRINT_PAGES_ALL); /* style information */ e_contact_build_style(style, settings); @@ -790,6 +810,7 @@ e_contact_print_response(GtkWidget *dialog, gint response_id, gpointer data) get_font_height (ctxt->style->headings_font)*1.5); ctxt->book = book; ctxt->query = query; + ctxt->response_id = response_id; cpi->uses_book = uses_book; cpi->uses_list = uses_list; cpi->settings = settings; @@ -798,20 +819,25 @@ e_contact_print_response(GtkWidget *dialog, gint response_id, gpointer data) cpi->ctxt->contacts = NULL; cpi->contact_list= contact_list; cpi->book = book; - e_contact_do_print_contacts (book, query, ctxt); - - /* runs the print dialog , emitting signals */ - g_signal_connect (print, "draw_page",G_CALLBACK (contact_draw_page), cpi); - if (response_id == GTK_RESPONSE_APPLY) { - res = gtk_print_operation_run (print, GTK_PRINT_OPERATION_ACTION_PREVIEW, NULL, NULL); + gtk_print_operation_set_print_settings (ctxt->print, settings); + g_signal_connect (ctxt->print, "draw_page",G_CALLBACK (contact_draw_page), cpi); + + if (!uses_book) { + if(ctxt->response_id == GTK_RESPONSE_APPLY) + gtk_print_operation_run (ctxt->print, GTK_PRINT_OPERATION_ACTION_PREVIEW, NULL, NULL); + else + gtk_print_operation_run (ctxt->print, GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG, NULL, NULL); + settings = gtk_print_operation_get_print_settings (ctxt->print); + e_print_save_settings (settings); } else - res = gtk_print_operation_run (print, GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG, NULL, NULL); - g_object_unref (settings); - g_object_unref (print); - g_object_unref (paper_size); - g_object_unref (page_setup); - g_object_unref (cpi); + e_contact_do_print_contacts (book, query, ctxt); + + g_object_unref (cpi); + if (!uses_book) { + g_object_unref (ctxt->print); + g_free (ctxt); + } gtk_widget_destroy (dialog); } @@ -823,7 +849,7 @@ e_contact_print_dialog_new(EBook *book, char *query, GList *list) GList *copied_list = NULL; GList *l; - dialog = e_print_get_dialog(_("Print contacts"), GNOME_PRINT_DIALOG_RANGE | GNOME_PRINT_DIALOG_COPIES); + dialog = e_print_get_dialog(_("Print contacts"), 0); if (list != NULL) { copied_list = g_list_copy (list); @@ -849,7 +875,7 @@ e_contact_print_contact_dialog_new(EContact *contact) { GtkWidget *dialog; - dialog = e_print_get_dialog(_("Print contact"), GNOME_PRINT_DIALOG_COPIES); + dialog = e_print_get_dialog(_("Print contact"), 0); contact = e_contact_duplicate(contact); g_object_set_data(G_OBJECT(dialog), "contact", contact); g_object_set_data(G_OBJECT(dialog), "uses_list", GINT_TO_POINTER (FALSE)); @@ -870,13 +896,13 @@ e_contact_print_contact_list_dialog_new(GList *list) GList *l; if (list == NULL) - return NULL; + return NULL; copied_list = g_list_copy (list); for (l = copied_list; l; l = l->next) l->data = e_contact_duplicate (E_CONTACT (l->data)); - dialog = e_print_get_dialog(_("Print contact"), GNOME_PRINT_DIALOG_COPIES); + dialog = e_print_get_dialog(_("Print contact"), 0); g_object_set_data(G_OBJECT(dialog), "contact_list", copied_list); g_object_set_data(G_OBJECT(dialog), "uses_list", GINT_TO_POINTER (TRUE)); @@ -892,7 +918,6 @@ e_contact_print_contact_list_dialog_new(GList *list) static void contact_draw_page (GtkPrintOperation *print, GtkPrintContext *context, gint page_nr, ContactPrintItem *cpi) { - cairo_t *cr; EBookView *view; EBookViewStatus status; @@ -905,6 +930,7 @@ contact_draw_page (GtkPrintOperation *print, GtkPrintContext *context, gint page } else if (cpi->uses_list) { + cpi->ctxt->contacts = cpi->contact_list; complete_sequence(NULL, E_BOOK_VIEW_STATUS_OK, cpi->ctxt); } else { |