Commit f4743ff85ad29d6665ee5ea9c6458dc9333aa17c

Authored by Perry Werneck
1 parent 5ecd10c2

Updating print dialog.

src/pw3270/linux/print.c
@@ -87,8 +87,8 @@ @@ -87,8 +87,8 @@
87 87
88 } 88 }
89 89
90 -void setup_print_dialog(GtkPrintOperation * operation)  
91 -{ 90 + void setup_print_dialog(GtkPrintOperation * operation)
  91 + {
92 GtkPrintSettings * settings = gtk_print_settings_new(); 92 GtkPrintSettings * settings = gtk_print_settings_new();
93 GtkPageSetup * setup = gtk_page_setup_new(); 93 GtkPageSetup * setup = gtk_page_setup_new();
94 GtkPaperSize * papersize = NULL; 94 GtkPaperSize * papersize = NULL;
@@ -138,5 +138,5 @@ void setup_print_dialog(GtkPrintOperation * operation) @@ -138,5 +138,5 @@ void setup_print_dialog(GtkPrintOperation * operation)
138 gtk_page_setup_set_paper_size_and_default_margins(setup,papersize); 138 gtk_page_setup_set_paper_size_and_default_margins(setup,papersize);
139 gtk_print_operation_set_default_page_setup(operation,setup); 139 gtk_print_operation_set_default_page_setup(operation,setup);
140 140
141 -} 141 + }
142 142
src/pw3270/print.c
@@ -40,42 +40,6 @@ @@ -40,42 +40,6 @@
40 40
41 /*--[ Implement ]------------------------------------------------------------------------------------*/ 41 /*--[ Implement ]------------------------------------------------------------------------------------*/
42 42
43 -#ifdef _WIN32  
44 -  
45 -#define save_string(h,k,v) save_settings(k,v,h)  
46 -#define save_double(h,k,v) registry_set_double(h,k,v)  
47 -  
48 -static void save_settings(const gchar *key, const gchar *value, HKEY hKey)  
49 -{  
50 - RegSetValueEx(hKey,key,0,REG_SZ,(const BYTE *) value,strlen(value)+1);  
51 -}  
52 -  
53 -/*  
54 - * From: http://git.gnome.org/browse/gtk+/tree/gtk/gtkpagesetup.c  
55 - * something like this should really be in gobject!  
56 - *  
57 - * I Agree!! (Perry Werneck)  
58 - *  
59 - */  
60 -static gchar * enum_to_string(GType type, guint enum_value)  
61 -{  
62 - GEnumClass *enum_class;  
63 - GEnumValue *value;  
64 - gchar *retval = NULL;  
65 -  
66 - enum_class = g_type_class_ref (type);  
67 -  
68 - value = g_enum_get_value(enum_class, enum_value);  
69 - if (value)  
70 - retval = g_strdup (value->value_nick);  
71 -  
72 - g_type_class_unref (enum_class);  
73 -  
74 - return retval;  
75 -}  
76 -  
77 -#endif // _WIN32  
78 -  
79 static void show_print_error(GtkWidget *widget, GError *err) 43 static void show_print_error(GtkWidget *widget, GError *err)
80 { 44 {
81 GtkWidget *dialog = gtk_message_dialog_new_with_markup( GTK_WINDOW(gtk_widget_get_toplevel(widget)), 45 GtkWidget *dialog = gtk_message_dialog_new_with_markup( GTK_WINDOW(gtk_widget_get_toplevel(widget)),
@@ -188,262 +152,6 @@ static gchar * enum_to_string(GType type, guint enum_value) @@ -188,262 +152,6 @@ static gchar * enum_to_string(GType type, guint enum_value)
188 } 152 }
189 */ 153 */
190 154
191 -#ifdef _WIN32  
192 - void update_settings(const gchar *key, const gchar *val, gpointer *settings)  
193 - {  
194 - trace("%s: %s=\"%s\"",__FUNCTION__,key,val);  
195 - gtk_print_settings_set(GTK_PRINT_SETTINGS(settings), key, val);  
196 - }  
197 -  
198 - // From https://git.gnome.org/browse/gtk+/tree/gtk/gtkprintutils.h  
199 - #define MM_PER_INCH 25.4  
200 - #define POINTS_PER_INCH 72  
201 -  
202 - // From https://git.gnome.org/browse/gtk+/tree/gtk/gtkprintutils.c  
203 - static gdouble _gtk_print_convert_from_mm (gdouble len, GtkUnit unit)  
204 - {  
205 - switch (unit)  
206 - {  
207 - case GTK_UNIT_MM:  
208 - return len;  
209 - case GTK_UNIT_INCH:  
210 - return len / MM_PER_INCH;  
211 -  
212 - default:  
213 - g_warning ("Unsupported unit");  
214 -  
215 - /* Fall through */  
216 - case GTK_UNIT_POINTS:  
217 - return len / (MM_PER_INCH / POINTS_PER_INCH);  
218 - break;  
219 - }  
220 - }  
221 -  
222 -#endif // _WIN32  
223 -  
224 -#if GTK_CHECK_VERSION(3,0,0) && !defined(WIN32)  
225 -/*  
226 -*/  
227 -#endif // !WIN32  
228 -  
229 -/*  
230 - static GtkPrintOperation * begin_print_operation(GObject *obj, GtkWidget *widget, PRINT_INFO **info)  
231 - {  
232 - GtkPrintOperation * print = gtk_print_operation_new();  
233 - GtkPrintSettings * settings = gtk_print_settings_new();  
234 - GtkPageSetup * setup = gtk_page_setup_new();  
235 - GtkPaperSize * papersize = NULL;  
236 -  
237 - *info = g_new0(PRINT_INFO,1);  
238 - (*info)->session = v3270_get_session(widget);  
239 - (*info)->cols = 80;  
240 - (*info)->widget = widget;  
241 -  
242 - // Basic setup  
243 - gtk_print_operation_set_allow_async(print,get_boolean_from_config("print","allow_async",TRUE));  
244 -  
245 - if(obj)  
246 - {  
247 - const gchar * attr = (const gchar *) g_object_get_data(obj,"jobname");  
248 - if(attr)  
249 - gtk_print_operation_set_job_name(print,attr);  
250 - }  
251 -  
252 - gtk_print_operation_set_custom_tab_label(print, _( "Options" ) );  
253 - gtk_print_operation_set_show_progress(print,TRUE);  
254 -  
255 - // Common signals  
256 - g_signal_connect(print,"done",G_CALLBACK(done),*info);  
257 -  
258 -#if GTK_CHECK_VERSION(3,0,0) && !defined(WIN32)  
259 - g_signal_connect(print,"create-custom-widget",G_CALLBACK(create_custom_widget), *info);  
260 - g_signal_connect(print,"custom-widget-apply",G_CALLBACK(custom_widget_apply), *info);  
261 -#else  
262 - {  
263 - g_autofree gchar *color_scheme = get_string_from_config("print","colors","");  
264 -  
265 - if(color_scheme && *color_scheme)  
266 - v3270_set_color_table((*info)->color,color_scheme);  
267 - else  
268 - v3270_set_mono_color_table((*info)->color,"black","white");  
269 -  
270 - }  
271 -#endif // !_WIN32  
272 -  
273 - // Load page and print settings  
274 - {  
275 -#ifdef ENABLE_WINDOWS_REGISTRY  
276 -  
277 - HKEY registry;  
278 -  
279 - if(get_registry_handle("print",&registry,KEY_READ))  
280 - {  
281 - HKEY hKey;  
282 - DWORD disp;  
283 - gchar * attr = g_object_get_data(obj,"papersize");  
284 -  
285 - registry_foreach(registry,"settings",update_settings,(gpointer) settings);  
286 -  
287 - if(RegCreateKeyEx(registry,"pagesetup",0,NULL,REG_OPTION_NON_VOLATILE,KEY_READ,NULL,&hKey,&disp) == ERROR_SUCCESS)  
288 - {  
289 - gdouble val;  
290 -  
291 - #define load_double(h,k,s) if(registry_get_double(h,k,&val)) s(setup, val,GTK_UNIT_MM);  
292 -  
293 - load_double(hKey, "MarginTop", gtk_page_setup_set_top_margin );  
294 - load_double(hKey, "MarginBottom", gtk_page_setup_set_bottom_margin );  
295 - load_double(hKey, "MarginLeft", gtk_page_setup_set_left_margin );  
296 - load_double(hKey, "MarginRight", gtk_page_setup_set_right_margin );  
297 -  
298 - RegCloseKey(hKey);  
299 - }  
300 -  
301 - if(attr)  
302 - {  
303 - // Paper is defined in xml, use it  
304 - papersize = gtk_paper_size_new(attr);  
305 - }  
306 - else if(RegCreateKeyEx(registry,"paper",0,NULL,REG_OPTION_NON_VOLATILE,KEY_READ,NULL,&hKey,&disp) == ERROR_SUCCESS)  
307 - {  
308 - // Use saved paper size  
309 - // Reference: https://git.gnome.org/browse/gtk+/tree/gtk/gtkpapersize.c  
310 - struct _papersettings  
311 - {  
312 - const gchar * name;  
313 - gchar * value;  
314 - } papersettings[] =  
315 - {  
316 - { "PPDName", NULL },  
317 - { "Name", NULL },  
318 - { "DisplayName", NULL }  
319 - };  
320 -  
321 - int f;  
322 - gdouble width, height;  
323 -  
324 - // Read paper settings  
325 - registry_get_double(hKey, "Width", &width);  
326 - registry_get_double(hKey, "Height", &height);  
327 -  
328 - for(f=0;f<G_N_ELEMENTS(papersettings);f++)  
329 - {  
330 - BYTE data[4097];  
331 - unsigned long datatype;  
332 - unsigned long datalen = 4096;  
333 -  
334 - if(RegQueryValueExA(hKey,papersettings[f].name,NULL,&datatype,data,&datalen) == ERROR_SUCCESS)  
335 - {  
336 - data[datalen+1] = 0;  
337 - trace("paper[%s]=\"%s\"",papersettings[f].name,data);  
338 - papersettings[f].value = g_strdup((gchar *) data);  
339 - }  
340 - }  
341 -  
342 - #define ppd_name papersettings[0].value  
343 - #define name papersettings[1].value  
344 - #define display_name papersettings[2].value  
345 -  
346 - if(!display_name)  
347 - display_name = g_strdup(name);  
348 -  
349 - if(ppd_name)  
350 - {  
351 - papersize = gtk_paper_size_new_from_ppd( ppd_name,  
352 - display_name,  
353 - _gtk_print_convert_from_mm(width,GTK_UNIT_POINTS),  
354 - _gtk_print_convert_from_mm(height,GTK_UNIT_POINTS));  
355 - }  
356 - else if(name)  
357 - {  
358 - papersize = gtk_paper_size_new_custom(name, display_name,width, height, GTK_UNIT_MM);  
359 - }  
360 - else  
361 - {  
362 - g_warning("Invalid paper size settings, using defaults");  
363 - papersize = gtk_paper_size_new(NULL);  
364 - }  
365 -  
366 - // Release memory  
367 - #undef ppd_name  
368 - #undef display_name  
369 - #undef name  
370 -  
371 - for(f=0;f<G_N_ELEMENTS(papersettings);f++)  
372 - {  
373 - if(papersettings[f].value)  
374 - g_free(papersettings[f].value);  
375 - }  
376 -  
377 - RegCloseKey(hKey);  
378 -  
379 - }  
380 - else  
381 - {  
382 - // Create default  
383 - papersize = gtk_paper_size_new(NULL);  
384 - }  
385 -  
386 -  
387 - RegCloseKey(registry);  
388 - }  
389 -  
390 -#else  
391 - GKeyFile * conf = get_application_keyfile();  
392 - GError * err = NULL;  
393 - gchar * attr = g_object_get_data(obj,"papersize");  
394 -  
395 - if(!gtk_print_settings_load_key_file(settings,conf,"print_settings",&err))  
396 - {  
397 - g_warning("Error getting print settings: %s",err->message);  
398 - g_error_free(err);  
399 - err = NULL;  
400 - }  
401 -  
402 - if(!gtk_page_setup_load_key_file(setup,conf,"page_setup",&err))  
403 - {  
404 - g_warning("Error getting page setup: %s",err->message);  
405 - g_error_free(err);  
406 - err = NULL;  
407 - }  
408 -  
409 - if(attr)  
410 - {  
411 - // Paper is defined in xml, use it  
412 - papersize = gtk_paper_size_new(attr);  
413 - }  
414 - else if(g_key_file_has_group(conf,"paper_size"))  
415 - {  
416 - // Use saved paper size  
417 - GError *err = NULL;  
418 -  
419 - papersize = gtk_paper_size_new_from_key_file(conf,"paper_size",&err);  
420 - if(err)  
421 - {  
422 - g_warning("Error loading paper size: %s",err->message);  
423 - g_error_free(err);  
424 - }  
425 -  
426 - trace("Papersize: %p",papersize);  
427 - }  
428 - else  
429 - {  
430 - // Create default  
431 - papersize = gtk_paper_size_new(NULL);  
432 - }  
433 -  
434 -#endif  
435 - }  
436 -  
437 - // Finish settings  
438 - gtk_print_operation_set_print_settings(print,settings);  
439 - gtk_page_setup_set_paper_size_and_default_margins(setup,papersize);  
440 - gtk_print_operation_set_default_page_setup(print,setup);  
441 -  
442 - trace("%s ends",__FUNCTION__);  
443 - return print;  
444 - }  
445 - */  
446 -  
447 void print_all_action(GtkAction *action, GtkWidget *widget) 155 void print_all_action(GtkAction *action, GtkWidget *widget)
448 { 156 {
449 pw3270_print(widget,G_OBJECT(action),GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG, LIB3270_CONTENT_ALL); 157 pw3270_print(widget,G_OBJECT(action),GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG, LIB3270_CONTENT_ALL);
@@ -513,80 +221,8 @@ static gchar * enum_to_string(GType type, guint enum_value) @@ -513,80 +221,8 @@ static gchar * enum_to_string(GType type, guint enum_value)
513 221
514 } 222 }
515 223
516 - /*  
517 - LIB3270_EXPORT int pw3270_print(GtkWidget *widget, GObject *action, GtkPrintOperationAction oper, LIB3270_CONTENT_OPTION src) 224 + void print_settings_action(GtkAction *action, GtkWidget *terminal)
518 { 225 {
519 - PRINT_INFO * info = NULL;  
520 - GtkPrintOperation * print;  
521 - gchar * text;  
522 - GError * err = NULL;  
523 -  
524 - #ifdef X3270_TRACE  
525 - if(action)  
526 - lib3270_trace_event(v3270_get_session(widget),"Action %s activated on widget %p\n",gtk_action_get_name(GTK_ACTION(action)),widget);  
527 - #endif  
528 -  
529 - g_return_val_if_fail(GTK_IS_V3270(widget),EINVAL);  
530 -  
531 - print = begin_print_operation(action,widget,&info);  
532 - if(!print)  
533 - return -1;  
534 -  
535 - lib3270_get_screen_size(info->session,&info->rows,&info->cols);  
536 -  
537 - info->src = src;  
538 -  
539 - g_signal_connect(print,"begin_print",G_CALLBACK(begin_print),info);  
540 -  
541 - switch(src)  
542 - {  
543 - case LIB3270_CONTENT_ALL:  
544 - case LIB3270_CONTENT_SELECTED:  
545 - g_signal_connect(print,"draw_page",G_CALLBACK(draw_screen),info);  
546 - break;  
547 -  
548 - case LIB3270_CONTENT_COPY:  
549 -  
550 - text = v3270_get_copy(widget);  
551 -  
552 - if(text)  
553 - {  
554 - int r;  
555 -  
556 - info->text = g_strsplit(text,"\n",-1);  
557 - info->rows = g_strv_length(info->text);  
558 -  
559 - for(r=0;r < info->rows;r++)  
560 - {  
561 - size_t sz = strlen(info->text[r]);  
562 - if(sz > info->cols)  
563 - info->cols = sz;  
564 - }  
565 - g_free(text);  
566 - }  
567 - g_signal_connect(print,"draw_page",G_CALLBACK(draw_text),info);  
568 - break;  
569 -  
570 -  
571 - }  
572 -  
573 - // Run Print dialog  
574 - gtk_print_operation_run(print,oper,GTK_WINDOW(gtk_widget_get_toplevel(widget)),&err);  
575 -  
576 - if(err)  
577 - {  
578 - show_print_error(widget,err);  
579 - g_error_free(err);  
580 - }  
581 -  
582 - g_object_unref(print);  
583 -  
584 - return 0;  
585 - }  
586 - */  
587 -  
588 -void print_settings_action(GtkAction *action, GtkWidget *terminal)  
589 -{  
590 const gchar * title = g_object_get_data(G_OBJECT(action),"title"); 226 const gchar * title = g_object_get_data(G_OBJECT(action),"title");
591 GtkWidget * widget; 227 GtkWidget * widget;
592 GtkWidget * dialog = gtk_dialog_new_with_buttons ( gettext(title ? title : N_( "Print settings") ), 228 GtkWidget * dialog = gtk_dialog_new_with_buttons ( gettext(title ? title : N_( "Print settings") ),
@@ -640,4 +276,4 @@ void print_settings_action(GtkAction *action, GtkWidget *terminal) @@ -640,4 +276,4 @@ void print_settings_action(GtkAction *action, GtkWidget *terminal)
640 276
641 gtk_widget_destroy(dialog); 277 gtk_widget_destroy(dialog);
642 278
643 -} 279 + }
src/pw3270/windows/print.c
@@ -27,18 +27,198 @@ @@ -27,18 +27,198 @@
27 * 27 *
28 */ 28 */
29 29
30 - #include "private.h" 30 + #include "../private.h"
31 #include <v3270.h> 31 #include <v3270.h>
32 #include <v3270/print.h> 32 #include <v3270/print.h>
33 #include <lib3270/selection.h> 33 #include <lib3270/selection.h>
34 #include <lib3270/trace.h> 34 #include <lib3270/trace.h>
35 35
  36 + #define FONT_CONFIG "font-family"
  37 + #define DEFAULT_FONT "Courier New"
36 38
37 /*--[ Implement ]------------------------------------------------------------------------------------*/ 39 /*--[ Implement ]------------------------------------------------------------------------------------*/
38 40
  41 +#define save_string(h,k,v) save_settings(k,v,h)
  42 +#define save_double(h,k,v) registry_set_double(h,k,v)
39 43
40 -void setup_print_dialog(GtkPrintOperation * operation) 44 +static void save_settings(const gchar *key, const gchar *value, HKEY hKey)
41 { 45 {
  46 + RegSetValueEx(hKey,key,0,REG_SZ,(const BYTE *) value,strlen(value)+1);
  47 +}
  48 +
  49 +/*
  50 + * From: http://git.gnome.org/browse/gtk+/tree/gtk/gtkpagesetup.c
  51 + * something like this should really be in gobject!
  52 + *
  53 + * I Agree!! (Perry Werneck)
  54 + *
  55 + */
  56 +static gchar * enum_to_string(GType type, guint enum_value)
  57 +{
  58 + GEnumClass *enum_class;
  59 + GEnumValue *value;
  60 + gchar *retval = NULL;
  61 +
  62 + enum_class = g_type_class_ref (type);
  63 +
  64 + value = g_enum_get_value(enum_class, enum_value);
  65 + if (value)
  66 + retval = g_strdup (value->value_nick);
  67 +
  68 + g_type_class_unref (enum_class);
42 69
  70 + return retval;
43 } 71 }
44 72
  73 + void update_settings(const gchar *key, const gchar *val, gpointer *settings)
  74 + {
  75 + trace("%s: %s=\"%s\"",__FUNCTION__,key,val);
  76 + gtk_print_settings_set(GTK_PRINT_SETTINGS(settings), key, val);
  77 + }
  78 +
  79 + // From https://git.gnome.org/browse/gtk+/tree/gtk/gtkprintutils.h
  80 + #define MM_PER_INCH 25.4
  81 + #define POINTS_PER_INCH 72
  82 +
  83 + // From https://git.gnome.org/browse/gtk+/tree/gtk/gtkprintutils.c
  84 + static gdouble _gtk_print_convert_from_mm (gdouble len, GtkUnit unit)
  85 + {
  86 + switch (unit)
  87 + {
  88 + case GTK_UNIT_MM:
  89 + return len;
  90 + case GTK_UNIT_INCH:
  91 + return len / MM_PER_INCH;
  92 +
  93 + default:
  94 + g_warning ("Unsupported unit");
  95 +
  96 + /* Fall through */
  97 + case GTK_UNIT_POINTS:
  98 + return len / (MM_PER_INCH / POINTS_PER_INCH);
  99 + break;
  100 + }
  101 + }
  102 +
  103 + void setup_print_dialog(GtkPrintOperation * operation)
  104 + {
  105 + GtkPrintSettings * settings = gtk_print_settings_new();
  106 + GtkPageSetup * setup = gtk_page_setup_new();
  107 + GtkPaperSize * papersize = NULL;
  108 +
  109 +#ifdef ENABLE_WINDOWS_REGISTRY
  110 +
  111 + HKEY registry;
  112 +
  113 + if(get_registry_handle("print",&registry,KEY_READ))
  114 + {
  115 + HKEY hKey;
  116 + DWORD disp;
  117 +
  118 + registry_foreach(registry,"settings",update_settings,(gpointer) settings);
  119 +
  120 + if(RegCreateKeyEx(registry,"pagesetup",0,NULL,REG_OPTION_NON_VOLATILE,KEY_READ,NULL,&hKey,&disp) == ERROR_SUCCESS)
  121 + {
  122 + gdouble val;
  123 +
  124 + #define load_double(h,k,s) if(registry_get_double(h,k,&val)) s(setup, val,GTK_UNIT_MM);
  125 +
  126 + load_double(hKey, "MarginTop", gtk_page_setup_set_top_margin );
  127 + load_double(hKey, "MarginBottom", gtk_page_setup_set_bottom_margin );
  128 + load_double(hKey, "MarginLeft", gtk_page_setup_set_left_margin );
  129 + load_double(hKey, "MarginRight", gtk_page_setup_set_right_margin );
  130 +
  131 + RegCloseKey(hKey);
  132 + }
  133 +
  134 + if(RegCreateKeyEx(registry,"paper",0,NULL,REG_OPTION_NON_VOLATILE,KEY_READ,NULL,&hKey,&disp) == ERROR_SUCCESS)
  135 + {
  136 + // Use saved paper size
  137 + // Reference: https://git.gnome.org/browse/gtk+/tree/gtk/gtkpapersize.c
  138 + struct _papersettings
  139 + {
  140 + const gchar * name;
  141 + gchar * value;
  142 + } papersettings[] =
  143 + {
  144 + { "PPDName", NULL },
  145 + { "Name", NULL },
  146 + { "DisplayName", NULL }
  147 + };
  148 +
  149 + int f;
  150 + gdouble width, height;
  151 +
  152 + // Read paper settings
  153 + registry_get_double(hKey, "Width", &width);
  154 + registry_get_double(hKey, "Height", &height);
  155 +
  156 + for(f=0;f<G_N_ELEMENTS(papersettings);f++)
  157 + {
  158 + BYTE data[4097];
  159 + unsigned long datatype;
  160 + unsigned long datalen = 4096;
  161 +
  162 + if(RegQueryValueExA(hKey,papersettings[f].name,NULL,&datatype,data,&datalen) == ERROR_SUCCESS)
  163 + {
  164 + data[datalen+1] = 0;
  165 + trace("paper[%s]=\"%s\"",papersettings[f].name,data);
  166 + papersettings[f].value = g_strdup((gchar *) data);
  167 + }
  168 + }
  169 +
  170 + #define ppd_name papersettings[0].value
  171 + #define name papersettings[1].value
  172 + #define display_name papersettings[2].value
  173 +
  174 + if(!display_name)
  175 + display_name = g_strdup(name);
  176 +
  177 + if(ppd_name)
  178 + {
  179 + papersize = gtk_paper_size_new_from_ppd( ppd_name,
  180 + display_name,
  181 + _gtk_print_convert_from_mm(width,GTK_UNIT_POINTS),
  182 + _gtk_print_convert_from_mm(height,GTK_UNIT_POINTS));
  183 + }
  184 + else if(name)
  185 + {
  186 + papersize = gtk_paper_size_new_custom(name, display_name,width, height, GTK_UNIT_MM);
  187 + }
  188 + else
  189 + {
  190 + g_warning("Invalid paper size settings, using defaults");
  191 + papersize = gtk_paper_size_new(NULL);
  192 + }
  193 +
  194 + // Release memory
  195 + #undef ppd_name
  196 + #undef display_name
  197 + #undef name
  198 +
  199 + for(f=0;f<G_N_ELEMENTS(papersettings);f++)
  200 + {
  201 + if(papersettings[f].value)
  202 + g_free(papersettings[f].value);
  203 + }
  204 +
  205 + RegCloseKey(hKey);
  206 +
  207 + }
  208 + else
  209 + {
  210 + // Create default
  211 + papersize = gtk_paper_size_new(NULL);
  212 + }
  213 +
  214 + RegCloseKey(registry);
  215 +
  216 + }
  217 +#endif // ENABLE_WINDOWS_REGISTRY
  218 +
  219 + gtk_print_operation_set_print_settings(print,settings);
  220 + gtk_page_setup_set_paper_size_and_default_margins(setup,papersize);
  221 + gtk_print_operation_set_default_page_setup(print,setup);
  222 +
  223 + }
  224 +