From 767ae97b5eac07b9179a7ad1e2a1ee00cbe072c0 Mon Sep 17 00:00:00 2001 From: Perry Werneck Date: Fri, 25 Sep 2020 17:42:14 -0300 Subject: [PATCH] Refactoring error popup. --- src/dialogs/load.c | 17 +++++++---------- src/dialogs/popups.c | 20 ++++++++++++++++++-- src/dialogs/print/convenience.c | 6 ++---- src/dialogs/print/print.c | 4 +--- src/dialogs/save/save.c | 17 ++++++----------- src/dialogs/transfer.c | 4 +--- src/filetransfer/activitylist.c | 4 +--- src/filetransfer/load.c | 17 ++++++----------- src/filetransfer/save.c | 4 +--- src/include/v3270.h | 7 ------- src/include/v3270/dialogs.h | 16 ++++++++++++++-- src/selection/text.c | 3 +-- src/terminal/charset.c | 4 +--- src/terminal/mouse.c | 1 + src/trace/trace.c | 18 ++++++------------ 15 files changed, 66 insertions(+), 76 deletions(-) diff --git a/src/dialogs/load.c b/src/dialogs/load.c index c3dd8d8..48d91f5 100644 --- a/src/dialogs/load.c +++ b/src/dialogs/load.c @@ -315,16 +315,13 @@ static void icon_press(GtkEntry *entry, G_GNUC_UNUSED GtkEntryIconPosition icon_ GError * error = NULL; v3270_load_dialog_apply(widget,&error); - if(error) - { - v3270_popup_gerror( - widget, - error, - NULL, - _("Can't open %s"),gtk_entry_get_text(GTK_ENTRY(V3270_LOAD_DIALOG(widget)->filename)) - ); - g_error_free(error); - } + // The operation has failed? If yes notify user and free error object. + v3270_popup_gerror( + widget, + &error, + NULL, + _("Can't open %s"),gtk_entry_get_text(GTK_ENTRY(V3270_LOAD_DIALOG(widget)->filename)) + ); } debug("%s",__FUNCTION__); diff --git a/src/dialogs/popups.c b/src/dialogs/popups.c index 4822829..d3ea227 100644 --- a/src/dialogs/popups.c +++ b/src/dialogs/popups.c @@ -44,6 +44,9 @@ GtkResponseType v3270_popup_dialog_show(GtkWidget *widget, const LIB3270_POPUP *popup, gboolean wait) { + // https://developer.gnome.org/hig/stable/dialogs.html.en + // https://developer.gnome.org/hig/stable/visual-layout.html.en + g_return_val_if_fail(GTK_IS_WIDGET(widget),GTK_RESPONSE_NONE); // Check if the dialog is enabled @@ -178,6 +181,7 @@ GTK_RESPONSE_CANCEL ); + // https://developer.gnome.org/Buttons/ v3270_dialog_add_class_for_response(dialog,GTK_RESPONSE_APPLY,"destructive-action"); v3270_dialog_add_class_for_response(dialog,GTK_RESPONSE_CANCEL,"suggested-action"); break; @@ -187,6 +191,8 @@ GTK_DIALOG(dialog), GTK_RESPONSE_CANCEL ); + + // https://developer.gnome.org/Buttons/ v3270_dialog_add_class_for_response(dialog,GTK_RESPONSE_CANCEL,"suggested-action"); break; @@ -195,6 +201,8 @@ GTK_DIALOG(dialog), GTK_RESPONSE_APPLY ); + + // https://developer.gnome.org/Buttons/ v3270_dialog_add_class_for_response(dialog,GTK_RESPONSE_APPLY,"suggested-action"); break; @@ -260,7 +268,10 @@ } - void v3270_popup_gerror(GtkWidget *widget, GError *error, const gchar *title, const gchar *fmt, ...) { + gboolean v3270_popup_gerror(GtkWidget *widget, GError **error, const gchar *title, const gchar *fmt, ...) { + + if(!(error && *error)) + return FALSE; // Format message. va_list arg_ptr; @@ -272,10 +283,15 @@ .type = LIB3270_NOTIFY_ERROR, .title = title, .summary = summary, - .body = error->message + .body = (*error)->message }; v3270_popup_dialog_show(widget, &popup, FALSE); + g_error_free(*error); + *error = NULL; + + return TRUE; + } diff --git a/src/dialogs/print/convenience.c b/src/dialogs/print/convenience.c index 49cc3c3..66a7591 100644 --- a/src/dialogs/print/convenience.c +++ b/src/dialogs/print/convenience.c @@ -96,15 +96,13 @@ if(err) { - v3270_error_popup( + v3270_popup_gerror( widget, - NULL, + &err, _("Print operation has failed"), err->message ); - g_error_free(err); - rc = -1; } } diff --git a/src/dialogs/print/print.c b/src/dialogs/print/print.c index 029bb4f..74c6bf5 100644 --- a/src/dialogs/print/print.c +++ b/src/dialogs/print/print.c @@ -52,13 +52,11 @@ v3270_popup_gerror( GTK_WIDGET(operation->widget), - err, + &err, NULL, "%s",_( "Print operation failed" ) ); - g_error_free(err); - } if(operation->widget) diff --git a/src/dialogs/save/save.c b/src/dialogs/save/save.c index ab407bc..ba23e44 100644 --- a/src/dialogs/save/save.c +++ b/src/dialogs/save/save.c @@ -618,17 +618,12 @@ static void icon_press(GtkEntry *entry, G_GNUC_UNUSED GtkEntryIconPosition icon_ GError * error = NULL; v3270_save_dialog_apply(widget,&error); - if(error) - { - v3270_popup_gerror( - widget, - error, - NULL, - _("Can't save %s"),gtk_entry_get_text(GTK_ENTRY(V3270_SAVE_DIALOG(widget)->filename)) - ); - - g_error_free(error); - } + v3270_popup_gerror( + widget, + &error, + NULL, + _("Can't save %s"),gtk_entry_get_text(GTK_ENTRY(V3270_SAVE_DIALOG(widget)->filename)) + ); } diff --git a/src/dialogs/transfer.c b/src/dialogs/transfer.c index 4125a35..6b293a7 100644 --- a/src/dialogs/transfer.c +++ b/src/dialogs/transfer.c @@ -86,13 +86,11 @@ static void save_activity_clicked(GtkWidget *button, GObject *activity) v3270_popup_gerror( button, - error, + &error, NULL, _("Can't save %s"),filename ); - g_error_free(error); - } } diff --git a/src/filetransfer/activitylist.c b/src/filetransfer/activitylist.c index f1d2ecd..a16623b 100644 --- a/src/filetransfer/activitylist.c +++ b/src/filetransfer/activitylist.c @@ -431,13 +431,11 @@ v3270_popup_gerror( widget, - error, + &error, NULL, _("Can't save %s"),list->filename ); - g_error_free(error); - } diff --git a/src/filetransfer/load.c b/src/filetransfer/load.c index 5d478f3..599d495 100644 --- a/src/filetransfer/load.c +++ b/src/filetransfer/load.c @@ -262,18 +262,13 @@ LIB3270_EXPORT void v3270ft_load(GtkWidget *widget,const gchar *filename) { g_list_foreach(GTK_V3270FT(widget)->files,(GFunc) validate_item, error); v3270ft_select_last(widget); - if(error) { + v3270_popup_gerror( + widget, + &error, + NULL, + _("Can't load %s"),filename + ); - v3270_popup_gerror( - widget, - error, - NULL, - _("Can't load %s"),filename - ); - - g_error_free(error); - - } } diff --git a/src/filetransfer/save.c b/src/filetransfer/save.c index c59e49f..f3bdeee 100644 --- a/src/filetransfer/save.c +++ b/src/filetransfer/save.c @@ -112,13 +112,11 @@ static const gchar * getNameByFlag(LIB3270_FT_OPTION opt, LIB3270_FT_OPTION mask v3270_popup_gerror( widget, - error, + &error, NULL, _("Can't save %s"),filename ); - g_error_free(error); - } g_free(text); diff --git a/src/include/v3270.h b/src/include/v3270.h index 5c23c26..a170532 100644 --- a/src/include/v3270.h +++ b/src/include/v3270.h @@ -238,13 +238,6 @@ LIB3270_EXPORT void v3270_set_remap_filename(GtkWidget *widget, const gchar *path); LIB3270_EXPORT const gchar * v3270_get_remap_filename(GtkWidget *widget); - // SSL & Security - LIB3270_EXPORT const gchar * v3270_get_ssl_state_icon_name(GtkWidget *widget); - LIB3270_EXPORT const gchar * v3270_get_ssl_state_message(GtkWidget *widget); - LIB3270_EXPORT const gchar * v3270_get_ssl_state_description(GtkWidget *widget); - LIB3270_EXPORT GtkWidget * v3270_security_dialog_new(GtkWidget *widget); - LIB3270_EXPORT void v3270_popup_security_dialog(GtkWidget *widget); - // Auxiliary widgets LIB3270_EXPORT void v3270_select_host(GtkWidget *widget); diff --git a/src/include/v3270/dialogs.h b/src/include/v3270/dialogs.h index da893b0..06b6099 100644 --- a/src/include/v3270/dialogs.h +++ b/src/include/v3270/dialogs.h @@ -40,7 +40,7 @@ LIB3270_EXPORT GtkWidget * v3270_dialog_section_new(const gchar * title, const gchar *tooltip, GtkWidget *child); - LIB3270_EXPORT void v3270_error_popup(GtkWidget *widget, const gchar *title, const gchar *summary, const gchar *body); + LIB3270_EXPORT void v3270_error_popup(GtkWidget *widget, const gchar *title, const gchar *summary, const gchar *body) G_GNUC_DEPRECATED; LIB3270_EXPORT GtkWidget * v3270_save_dialog_new(GtkWidget *widget, LIB3270_CONTENT_OPTION mode, const gchar *filename); LIB3270_EXPORT void v3270_save_dialog_run(GtkWidget *widget); @@ -48,7 +48,19 @@ LIB3270_EXPORT GtkWidget * v3270_load_dialog_new(GtkWidget *widget, const gchar *filename); LIB3270_EXPORT void v3270_load_dialog_run(GtkWidget *widget); - LIB3270_EXPORT void v3270_popup_gerror(GtkWidget *widget, GError *error, const gchar *title, const gchar *fmt, ...) G_GNUC_PRINTF(4,5); + /// @brief Popup an error message. + /// + /// If the error is set show popup message and "free" the error. + /// + /// @param widget The terminal widget. + /// @param error The GError (it null doesn't show popup). + /// @param title The window title (can be NULL). + /// @param fmt Format for the popup message. + /// @param ... Arguments for fmt. + /// + /// @return TRUE if the popup was sent. + /// + LIB3270_EXPORT gboolean v3270_popup_gerror(GtkWidget *widget, GError **error, const gchar *title, const gchar *fmt, ...) G_GNUC_PRINTF(4,5); LIB3270_EXPORT GtkTreeModel * v3270_font_family_model_new(GtkWidget *widget, const gchar *selected, GtkTreeIter * active); diff --git a/src/selection/text.c b/src/selection/text.c index 7ac7e73..97555b0 100644 --- a/src/selection/text.c +++ b/src/selection/text.c @@ -183,8 +183,7 @@ LIB3270_EXPORT void v3270_input_text(GtkWidget *widget, const gchar *text, const V3270_SIGNAL_PASTENEXT, FALSE ); - v3270_popup_gerror(widget,error,NULL,"%s",_("Can't paste text")); - g_error_free(error); + v3270_popup_gerror(widget,&error,NULL,"%s",_("Can't paste text")); return; } diff --git a/src/terminal/charset.c b/src/terminal/charset.c index 498cee5..fd1993f 100644 --- a/src/terminal/charset.c +++ b/src/terminal/charset.c @@ -317,13 +317,11 @@ { v3270_popup_gerror( widget, - error, + &error, _( "Remap Failed" ), _( "Can't parse %s" ), path ); - g_error_free(error); - } else { unsigned int i; diff --git a/src/terminal/mouse.c b/src/terminal/mouse.c index da7affd..2e1a56e 100644 --- a/src/terminal/mouse.c +++ b/src/terminal/mouse.c @@ -38,6 +38,7 @@ #include #include #include + #include #pragma GCC diagnostic ignored "-Wdeprecated-declarations" diff --git a/src/trace/trace.c b/src/trace/trace.c index bde20ec..26fc77e 100644 --- a/src/trace/trace.c +++ b/src/trace/trace.c @@ -477,18 +477,12 @@ g_free(text); - if(error) - { - v3270_popup_gerror( - widget, - error, - NULL, - _( "Can't save %s" ), filename - ); - - g_error_free(error); - - } + v3270_popup_gerror( + widget, + &error, + NULL, + _( "Can't save %s" ), filename + ); } -- libgit2 0.21.2