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,14 +40,17 @@ | ||
40 | int rc; | 40 | int rc; |
41 | 41 | ||
42 | if(!(widget && GTK_IS_V3270(widget))) | 42 | if(!(widget && GTK_IS_V3270(widget))) |
43 | - { | ||
44 | return errno = EINVAL; | 43 | return errno = EINVAL; |
45 | - } | ||
46 | 44 | ||
47 | lib3270_trace_event(v3270_get_session(widget),"print action activated (type=%d)",(int) mode); | 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 | // Print operation. | 50 | // Print operation. |
50 | GtkPrintOperation * operation = v3270_print_operation_new(widget, mode); | 51 | GtkPrintOperation * operation = v3270_print_operation_new(widget, mode); |
52 | + if(!operation) | ||
53 | + return errno = EPERM; | ||
51 | 54 | ||
52 | gtk_print_operation_set_show_progress(operation,TRUE); | 55 | gtk_print_operation_set_show_progress(operation,TRUE); |
53 | 56 |
src/dialogs/print/print.c
@@ -42,7 +42,7 @@ | @@ -42,7 +42,7 @@ | ||
42 | { | 42 | { |
43 | V3270PrintOperation * operation = GTK_V3270_PRINT_OPERATION(prt); | 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 | if(result == GTK_PRINT_OPERATION_RESULT_ERROR) | 47 | if(result == GTK_PRINT_OPERATION_RESULT_ERROR) |
48 | { | 48 | { |
@@ -62,7 +62,10 @@ | @@ -62,7 +62,10 @@ | ||
62 | } | 62 | } |
63 | 63 | ||
64 | if(operation->widget) | 64 | if(operation->widget) |
65 | + { | ||
66 | + debug("%s: Emiting signal PRINT_DONE",__FUNCTION__); | ||
65 | g_signal_emit(GTK_WIDGET(operation->widget), v3270_widget_signal[V3270_SIGNAL_PRINT_DONE], 0, prt, (guint) result); | 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,12 +80,18 @@ | ||
77 | debug("%s.operation->font.info.scaled=%p",__FUNCTION__,operation->font.info.scaled); | 80 | debug("%s.operation->font.info.scaled=%p",__FUNCTION__,operation->font.info.scaled); |
78 | g_message("%s.operation->font.info.scaled=%p",__FUNCTION__,operation->font.info.scaled); | 81 | g_message("%s.operation->font.info.scaled=%p",__FUNCTION__,operation->font.info.scaled); |
79 | if(operation->font.info.scaled) | 82 | if(operation->font.info.scaled) |
83 | + { | ||
80 | cairo_scaled_font_destroy(operation->font.info.scaled); | 84 | cairo_scaled_font_destroy(operation->font.info.scaled); |
85 | + operation->font.info.scaled = NULL; | ||
86 | + } | ||
81 | 87 | ||
82 | debug("%s.operation->font.name=%p",__FUNCTION__,operation->font.name); | 88 | debug("%s.operation->font.name=%p",__FUNCTION__,operation->font.name); |
83 | g_message("%s.operation->font.name=%p",__FUNCTION__,operation->font.name); | 89 | g_message("%s.operation->font.name=%p",__FUNCTION__,operation->font.name); |
84 | if(operation->font.name) | 90 | if(operation->font.name) |
91 | + { | ||
85 | g_free(operation->font.name); | 92 | g_free(operation->font.name); |
93 | + operation->font.name = NULL; | ||
94 | + } | ||
86 | 95 | ||
87 | debug("%s.operation->contents.dynamic=%p",__FUNCTION__,operation->font.name); | 96 | debug("%s.operation->contents.dynamic=%p",__FUNCTION__,operation->font.name); |
88 | g_message("%s.operation->contents.dynamic=%p",__FUNCTION__,operation->font.name); | 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,11 +239,20 @@ GtkPrintOperation * v3270_print_operation_new(GtkWidget *widget, LIB3270_CONTENT | ||
230 | { | 239 | { |
231 | g_return_val_if_fail(GTK_IS_V3270(widget),NULL); | 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 | V3270PrintOperation * operation = GTK_V3270_PRINT_OPERATION(g_object_new(GTK_TYPE_V3270_PRINT_OPERATION, NULL)); | 251 | V3270PrintOperation * operation = GTK_V3270_PRINT_OPERATION(g_object_new(GTK_TYPE_V3270_PRINT_OPERATION, NULL)); |
234 | 252 | ||
235 | operation->mode = mode; | 253 | operation->mode = mode; |
236 | operation->widget = GTK_V3270(widget); | 254 | operation->widget = GTK_V3270(widget); |
237 | - operation->session = v3270_get_session(widget); | 255 | + operation->session = hSession; |
238 | 256 | ||
239 | v3270_set_mono_color_table(operation->settings.colors,"#000000","#FFFFFF"); | 257 | v3270_set_mono_color_table(operation->settings.colors,"#000000","#FFFFFF"); |
240 | 258 |