SETTINGS_DEVICE_UNFILTERED);
output_driver_register (d);
}
+
\f
-int viewer_length = 16;
-int viewer_width = 59;
/* Callback for the "delete" action (clicking the x on the top right
hand corner of the window) */
n_FT
};
-#define N_EXTENTIONS (n_FT - 1)
+#define N_EXTENSIONS (n_FT - 1)
struct file_types ft[n_FT] = {
{N_("Infer file type from extension"), NULL},
if ( x != 0 )
sensitive = TRUE;
- for (i = 1 ; i < N_EXTENTIONS ; ++i)
+ for (i = 1 ; i < N_EXTENSIONS ; ++i)
{
if ( g_str_has_suffix (fn, ft[i].ext))
{
GtkTreeIter iter;
GtkListStore *list = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_STRING);
- for (i = 0 ; i < 6 ; ++i)
+ for (i = 0 ; i < n_FT ; ++i)
{
gtk_list_store_append (list, &iter);
gtk_list_store_set (list, &iter,
if (file_type == FT_AUTO)
{
gint i;
- for (i = 1 ; i < N_EXTENTIONS ; ++i)
+ for (i = 1 ; i < N_EXTENSIONS ; ++i)
{
if ( g_str_has_suffix (filename, ft[i].ext))
{
GtkPrintContext *context,
PsppireOutputWindow *window)
{
- if ( window->print_item < window->n_items )
+ if (window->paginated)
+ {
+ /* Sometimes GTK+ emits this signal again even after pagination is
+ complete. Don't let that screw up printing. */
+ return TRUE;
+ }
+ else if ( window->print_item < window->n_items )
{
xr_driver_output_item (window->print_xrd, window->items[window->print_item++]);
- if (xr_driver_need_new_page (window->print_xrd))
+ while (xr_driver_need_new_page (window->print_xrd))
{
xr_driver_next_page (window->print_xrd, NULL);
window->print_n_pages ++;
else
{
gtk_print_operation_set_n_pages (operation, window->print_n_pages);
- window->print_item = 0;
+
+ /* Re-create the driver to do the real printing. */
+ xr_driver_destroy (window->print_xrd);
create_xr_print_driver (context, window);
+ window->print_item = 0;
+ window->paginated = TRUE;
+
return TRUE;
}
}
window->print_item = 0;
window->print_n_pages = 1;
+ window->paginated = FALSE;
}
static void
PsppireOutputWindow *window)
{
xr_driver_next_page (window->print_xrd, gtk_print_context_get_cairo_context (context));
- while ( window->print_item < window->n_items)
- {
- xr_driver_output_item (window->print_xrd, window->items [window->print_item++]);
- if ( xr_driver_need_new_page (window->print_xrd) )
- break;
- }
+ while (!xr_driver_need_new_page (window->print_xrd)
+ && window->print_item < window->n_items)
+ xr_driver_output_item (window->print_xrd, window->items [window->print_item++]);
}