Commit 8146018343c017ebca23210b98ac6a7d565c1937
1 parent
2eb92892
Exists in
master
and in
1 other branch
Fixing print dialog cleanup.
Showing
2 changed files
with
25 additions
and
4 deletions
Show diff stats
src/dialogs/print/convenience.c
... | ... | @@ -40,14 +40,17 @@ |
40 | 40 | int rc; |
41 | 41 | |
42 | 42 | if(!(widget && GTK_IS_V3270(widget))) |
43 | - { | |
44 | 43 | return errno = EINVAL; |
45 | - } | |
46 | 44 | |
47 | 45 | lib3270_trace_event(v3270_get_session(widget),"print action activated (type=%d)",(int) mode); |
48 | 46 | |
47 | + if(!v3270_is_connected(widget)) | |
48 | + return errno = ENOTCONN; | |
49 | + | |
49 | 50 | // Print operation. |
50 | 51 | GtkPrintOperation * operation = v3270_print_operation_new(widget, mode); |
52 | + if(!operation) | |
53 | + return errno = EPERM; | |
51 | 54 | |
52 | 55 | gtk_print_operation_set_show_progress(operation,TRUE); |
53 | 56 | ... | ... |
src/dialogs/print/print.c
... | ... | @@ -42,7 +42,7 @@ |
42 | 42 | { |
43 | 43 | V3270PrintOperation * operation = GTK_V3270_PRINT_OPERATION(prt); |
44 | 44 | |
45 | - debug("%s",__FUNCTION__); | |
45 | + debug("%s rc=%u",__FUNCTION__,(unsigned int) result); | |
46 | 46 | |
47 | 47 | if(result == GTK_PRINT_OPERATION_RESULT_ERROR) |
48 | 48 | { |
... | ... | @@ -62,7 +62,10 @@ |
62 | 62 | } |
63 | 63 | |
64 | 64 | if(operation->widget) |
65 | + { | |
66 | + debug("%s: Emiting signal PRINT_DONE",__FUNCTION__); | |
65 | 67 | g_signal_emit(GTK_WIDGET(operation->widget), v3270_widget_signal[V3270_SIGNAL_PRINT_DONE], 0, prt, (guint) result); |
68 | + } | |
66 | 69 | |
67 | 70 | } |
68 | 71 | |
... | ... | @@ -77,12 +80,18 @@ |
77 | 80 | debug("%s.operation->font.info.scaled=%p",__FUNCTION__,operation->font.info.scaled); |
78 | 81 | g_message("%s.operation->font.info.scaled=%p",__FUNCTION__,operation->font.info.scaled); |
79 | 82 | if(operation->font.info.scaled) |
83 | + { | |
80 | 84 | cairo_scaled_font_destroy(operation->font.info.scaled); |
85 | + operation->font.info.scaled = NULL; | |
86 | + } | |
81 | 87 | |
82 | 88 | debug("%s.operation->font.name=%p",__FUNCTION__,operation->font.name); |
83 | 89 | g_message("%s.operation->font.name=%p",__FUNCTION__,operation->font.name); |
84 | 90 | if(operation->font.name) |
91 | + { | |
85 | 92 | g_free(operation->font.name); |
93 | + operation->font.name = NULL; | |
94 | + } | |
86 | 95 | |
87 | 96 | debug("%s.operation->contents.dynamic=%p",__FUNCTION__,operation->font.name); |
88 | 97 | g_message("%s.operation->contents.dynamic=%p",__FUNCTION__,operation->font.name); |
... | ... | @@ -230,11 +239,20 @@ GtkPrintOperation * v3270_print_operation_new(GtkWidget *widget, LIB3270_CONTENT |
230 | 239 | { |
231 | 240 | g_return_val_if_fail(GTK_IS_V3270(widget),NULL); |
232 | 241 | |
242 | + H3270 *hSession = v3270_get_session(widget); | |
243 | + | |
244 | + if(!lib3270_is_connected(hSession)) | |
245 | + { | |
246 | + errno = ENOTCONN; | |
247 | + g_warning("Can't print from offline session"); | |
248 | + return NULL; | |
249 | + } | |
250 | + | |
233 | 251 | V3270PrintOperation * operation = GTK_V3270_PRINT_OPERATION(g_object_new(GTK_TYPE_V3270_PRINT_OPERATION, NULL)); |
234 | 252 | |
235 | 253 | operation->mode = mode; |
236 | 254 | operation->widget = GTK_V3270(widget); |
237 | - operation->session = v3270_get_session(widget); | |
255 | + operation->session = hSession; | |
238 | 256 | |
239 | 257 | v3270_set_mono_color_table(operation->settings.colors,"#000000","#FFFFFF"); |
240 | 258 | ... | ... |