void x_print (GschemToplevel *w_current) { static GtkPrintSettings *settings = NULL; GtkPageSetup *setup; GtkPrintOperation *print; GtkPrintOperationResult res; GError *err = NULL; int num_pages = 1; /* Create the print operation and set it up */ print = GTK_PRINT_OPERATION (g_object_new (GTK_TYPE_PRINT_OPERATION, "n-pages", num_pages, "use-full-page", FALSE, "unit", GTK_UNIT_POINTS, NULL)); if (settings != NULL) { gtk_print_operation_set_print_settings (print, settings); } setup = x_print_default_page_setup (w_current->toplevel, w_current->toplevel->page_current); gtk_print_operation_set_default_page_setup (print, setup); g_signal_connect (print, "draw_page", G_CALLBACK (draw_page__print_operation), w_current); res = gtk_print_operation_run (print, GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG, GTK_WINDOW (w_current->main_window), &err); if (res == GTK_PRINT_OPERATION_RESULT_ERROR) { /* If printing failed due to an error, show an error dialog */ GtkWidget *error_dialog = gtk_message_dialog_new (GTK_WINDOW (w_current->main_window), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, _("Error printing file:\n%1$s"), err->message); g_signal_connect (error_dialog, "response", G_CALLBACK (gtk_widget_destroy), NULL); gtk_widget_show (error_dialog); g_error_free (err); } else if (res == GTK_PRINT_OPERATION_RESULT_APPLY) { /* We're supposed to store the print settings, so do that */ if (settings != NULL) { g_object_unref (settings); } settings = GTK_PRINT_SETTINGS (g_object_ref (gtk_print_operation_get_print_settings (print))); } /* Clean up */ g_object_unref (print); }
static VALUE pj_initialize(VALUE self, VALUE title, VALUE printer, VALUE settings, VALUE page_setup) { GtkPrintJob *job; job = gtk_print_job_new(RVAL2CSTR(title), GTK_PRINTER(RVAL2GOBJ(printer)), GTK_PRINT_SETTINGS(RVAL2GOBJ(settings)), GTK_PAGE_SETUP(RVAL2GOBJ(page_setup))); G_INITIALIZE(self, job); return Qnil; }
GtkPrintSettings* cast_GtkPrintSettings(GtkWidget* widget) { return GTK_PRINT_SETTINGS(widget); }