From c6395548a314e640966a7fd0cbca530018f03018 Mon Sep 17 00:00:00 2001 From: Perry Werneck Date: Mon, 4 Feb 2019 13:15:30 -0200 Subject: [PATCH] Adjustments on print dialog & callback. --- src/dialogs/colorscheme.c | 5 +++-- src/dialogs/print/print.c | 35 ++++++++++++++++++++++++----------- src/include/v3270.h | 9 +++++---- src/testprogram/testprogram.c | 15 +-------------- src/v3270/callbacks.c | 25 ++++++++++++++++++++++++- 5 files changed, 57 insertions(+), 32 deletions(-) diff --git a/src/dialogs/colorscheme.c b/src/dialogs/colorscheme.c index a5ee715..b941998 100644 --- a/src/dialogs/colorscheme.c +++ b/src/dialogs/colorscheme.c @@ -316,6 +316,7 @@ { if(!gdk_rgba_equal(colora+f,colorb+f)) { +/* #ifdef DEBUG g_autofree gchar * cla = gdk_rgba_to_string(colora+f); g_autofree gchar * clb = gdk_rgba_to_string(colorb+f); @@ -328,7 +329,7 @@ clb ); #endif // DEBUG - +*/ return FALSE; } } @@ -378,7 +379,7 @@ gtk_tree_model_get_value(model,&iter,1,&value); clr = g_value_get_pointer(&value); - debug("%p",clr); +// debug("%p",clr); if(clr && compare_colors(clr,colors)) { diff --git a/src/dialogs/print/print.c b/src/dialogs/print/print.c index 3959bbc..52a03cc 100644 --- a/src/dialogs/print/print.c +++ b/src/dialogs/print/print.c @@ -207,29 +207,42 @@ V3270PrintOperation * v3270_print_operation_new(GtkWidget *widget, LIB3270_PRINT /*--[ Convenience ]----------------------------------------------------------------------------------*/ - void v3270_print(GtkWidget *widget, LIB3270_PRINT_MODE mode) + int v3270_print(GtkWidget *widget, LIB3270_PRINT_MODE mode, GError **error) { - g_autoptr(GError) err = NULL; + if(*error) + { + return -1; + } + + lib3270_trace_event(v3270_get_session(widget),"print action activated (type=%d)",(int) mode); + + if(v3270_is_connected(widget)) + { + V3270PrintOperation * operation = v3270_print_operation_new(widget, mode); + gtk_print_operation_run(GTK_PRINT_OPERATION(operation),GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG,GTK_WINDOW(gtk_widget_get_toplevel(widget)),error); + g_object_unref(operation); + return (*error != NULL); + } + + *error = g_error_new(g_quark_from_static_string(PACKAGE_NAME),ENOTCONN,"%s",strerror(ENOTCONN)); - V3270PrintOperation * operation = v3270_print_operation_new(widget, mode); - gtk_print_operation_run(GTK_PRINT_OPERATION(operation),GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG,GTK_WINDOW(gtk_widget_get_toplevel(widget)),&err); - g_object_unref(operation); + return -1; } - void v3270_print_all(GtkWidget *widget) + int v3270_print_all(GtkWidget *widget, GError **error) { - v3270_print(widget,LIB3270_PRINT_ALL); + return v3270_print(widget,LIB3270_PRINT_ALL,error); } - void v3270_print_selected(GtkWidget *widget) + int v3270_print_selected(GtkWidget *widget, GError **error) { - v3270_print(widget,LIB3270_PRINT_SELECTED); + return v3270_print(widget,LIB3270_PRINT_SELECTED,error); } - void v3270_print_copy(GtkWidget *widget) + int v3270_print_copy(GtkWidget *widget, GError **error) { - v3270_print(widget,LIB3270_PRINT_COPY); + return v3270_print(widget,LIB3270_PRINT_COPY,error); } void V3270PrintOperation_set_text_by_mode(V3270PrintOperation * operation, LIB3270_PRINT_MODE mode) diff --git a/src/include/v3270.h b/src/include/v3270.h index e56c5e6..09e06b7 100644 --- a/src/include/v3270.h +++ b/src/include/v3270.h @@ -263,10 +263,11 @@ LIB3270_EXPORT void v3270_select_host(GtkWidget *widget); // Print - LIB3270_EXPORT void v3270_print(GtkWidget *widget, LIB3270_PRINT_MODE mode); - LIB3270_EXPORT void v3270_print_all(GtkWidget *widget); - LIB3270_EXPORT void v3270_print_selected(GtkWidget *widget); - LIB3270_EXPORT void v3270_print_copy(GtkWidget *widget); + LIB3270_EXPORT int v3270_print(GtkWidget *widget, LIB3270_PRINT_MODE mode, GError **error); + + LIB3270_EXPORT int v3270_print_all(GtkWidget *widget, GError **error); + LIB3270_EXPORT int v3270_print_selected(GtkWidget *widget, GError **error); + LIB3270_EXPORT int v3270_print_copy(GtkWidget *widget, GError **error); G_END_DECLS diff --git a/src/testprogram/testprogram.c b/src/testprogram/testprogram.c index 0a15f68..7c10cb2 100644 --- a/src/testprogram/testprogram.c +++ b/src/testprogram/testprogram.c @@ -125,26 +125,13 @@ static void color_scheme_changed(GtkWidget G_GNUC_UNUSED(*widget), const GdkRGBA static void print_clicked(GtkButton G_GNUC_UNUSED(*button), GtkWidget *terminal) { - debug("%s",__FUNCTION__); - v3270_print_all(terminal); + lib3270_print_all(v3270_get_session(terminal)); } static void activate(GtkApplication* app, G_GNUC_UNUSED gpointer user_data) { - /* - const gchar * search[] = { - - g_get_user_config_dir(), - g_get_user_data_dir(), - g_get_home_dir(), - NULL - - }; - */ - GtkWidget * window = gtk_application_window_new(app); GtkWidget * terminal = v3270_new(); -// gchar * filename = NULL; GValue val = G_VALUE_INIT; g_signal_connect(terminal,"field_clicked",G_CALLBACK(field_clicked),window); diff --git a/src/v3270/callbacks.c b/src/v3270/callbacks.c index 3dd465a..8ff0471 100644 --- a/src/v3270/callbacks.c +++ b/src/v3270/callbacks.c @@ -329,7 +329,30 @@ static void message(H3270 *session, LIB3270_NOTIFY id , const char *title, const static int print(H3270 *session, LIB3270_PRINT_MODE mode) { - v3270_print(GTK_WIDGET(lib3270_get_user_data(session)), mode); + GtkWidget *widget = GTK_WIDGET(lib3270_get_user_data(session)); + g_autoptr(GError) error = NULL; + + v3270_print(widget, mode, &error); + + if(error) + { + GtkWidget *dialog = + gtk_message_dialog_new_with_markup( + GTK_WINDOW(gtk_widget_get_toplevel(widget)), + GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT,GTK_MESSAGE_ERROR,GTK_BUTTONS_CLOSE, + _( "Operation has failed" )); + + gtk_window_set_title(GTK_WINDOW(dialog),_("Can't print")); + + gtk_message_dialog_format_secondary_markup(GTK_MESSAGE_DIALOG(dialog),"%s",error->message); + + gtk_dialog_run(GTK_DIALOG(dialog)); + gtk_widget_destroy(dialog); + + return -1; + + } + return 0; } -- libgit2 0.21.2