From c312bb7fb969ee40f2e59b204c494692f1291491 Mon Sep 17 00:00:00 2001 From: Perry Werneck Date: Wed, 20 Nov 2019 17:04:58 -0300 Subject: [PATCH] Adding default action for the "click" on the OIA's security state icon. --- src/dialogs/security.c | 37 ++++++++++++++++++++++++++++++++++--- src/terminal/mouse.c | 24 ++++++++++++++++++++---- src/testprogram/testprogram.c | 18 ++++++++++++++++++ 3 files changed, 72 insertions(+), 7 deletions(-) diff --git a/src/dialogs/security.c b/src/dialogs/security.c index f1e2890..ed7750a 100644 --- a/src/dialogs/security.c +++ b/src/dialogs/security.c @@ -196,6 +196,7 @@ LIB3270_EXPORT void v3270_popup_security_dialog(GtkWidget *widget) { + /* GtkWidget * dialog = gtk_dialog_new_with_buttons( _("About security"), GTK_WINDOW(gtk_widget_get_toplevel(widget)), @@ -203,14 +204,44 @@ _( "_Close" ), GTK_RESPONSE_ACCEPT, NULL ); + */ + gboolean use_header = FALSE; + +#if GTK_CHECK_VERSION(3,12,0) + + g_object_get(gtk_settings_get_default(), "gtk-dialogs-use-header", &use_header, NULL); + + GtkWidget * dialog = + GTK_WIDGET(g_object_new( + GTK_TYPE_DIALOG, + "use-header-bar", (use_header ? 1 : 0), + NULL + )); + +#else + + GtkWidget * dialog = GTK_WIDGET(g_object_new(GTK_TYPE_DIALOG, NULL)); + +#endif // GTK 3.12 + + if(!use_header) { + gtk_dialog_add_buttons( + GTK_DIALOG(dialog), + _("_Close"), GTK_RESPONSE_CANCEL, + NULL + ); + } + + gtk_window_set_title(GTK_WINDOW(dialog),_("About security")); gtk_window_set_default_size(GTK_WINDOW(dialog), 800, 500); + gtk_window_set_transient_for(GTK_WINDOW(dialog),GTK_WINDOW(gtk_widget_get_toplevel(widget))); + gtk_window_set_modal(GTK_WINDOW(dialog),TRUE); gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))),v3270_security_dialog_new(widget),TRUE,TRUE,2); gtk_widget_show_all(dialog); - gtk_dialog_run(GTK_DIALOG(dialog)); - gtk_widget_destroy(GTK_WIDGET(dialog)); - + g_signal_connect(dialog,"close",G_CALLBACK(gtk_widget_destroy),NULL); + g_signal_connect(dialog,"response",G_CALLBACK(gtk_widget_destroy),NULL); } diff --git a/src/terminal/mouse.c b/src/terminal/mouse.c index 72cfd2e..5330a9c 100644 --- a/src/terminal/mouse.c +++ b/src/terminal/mouse.c @@ -194,15 +194,31 @@ gboolean v3270_button_release_event(GtkWidget *widget, GdkEventButton*event) if(GTK_V3270(widget)->oia.selected != V3270_OIA_FIELD_INVALID && GTK_V3270(widget)->oia.selected == get_field_from_event(GTK_V3270(widget),event)) { gboolean handled = FALSE; + gboolean connected = lib3270_is_connected(GTK_V3270(widget)->host) ? TRUE : FALSE; + V3270_OIA_FIELD field = GTK_V3270(widget)->oia.selected; g_signal_emit(widget, v3270_widget_signal[V3270_SIGNAL_FIELD], 0, - lib3270_is_connected(GTK_V3270(widget)->host) ? TRUE : FALSE, - GTK_V3270(widget)->oia.selected, + connected, + field, event, &handled); - if(!handled) - gdk_display_beep(gdk_display_get_default()); + debug("Field click was %s", handled ? "Handled" : "Not handled"); + + if(!handled) { + + // The signal was not handled, take default action. + if(connected && field == V3270_OIA_SSL) { + + // Show the default ssl status dialog. + debug("%s: Showing the default SSL status dialog",__FUNCTION__); + v3270_popup_security_dialog(widget); + + } else { + gdk_display_beep(gdk_display_get_default()); + } + + } } diff --git a/src/testprogram/testprogram.c b/src/testprogram/testprogram.c index 813fc30..442fb1e 100644 --- a/src/testprogram/testprogram.c +++ b/src/testprogram/testprogram.c @@ -48,6 +48,23 @@ gtk_window_set_title(GTK_WINDOW(window),v3270_get_session_title(terminal)); } + /* + static gboolean field_clicked(GtkWidget *widget, gboolean connected, V3270_OIA_FIELD field, GdkEventButton *event, GtkWidget *window) { + debug("%s: %s field=%d event=%p window=%p",__FUNCTION__,connected ? "Connected" : "Disconnected", field, event, window); + + if(!connected) + return FALSE; + + if(field == V3270_OIA_SSL) { + // v3270_popup_security_dialog(widget); + debug("%s: Show SSL connection info dialog",__FUNCTION__); + return TRUE; + } + + return FALSE; + } + */ + static void activate(GtkApplication* app, G_GNUC_UNUSED gpointer user_data) { GtkWidget * window = gtk_application_window_new(app); @@ -92,6 +109,7 @@ gtk_widget_show_all(window); g_signal_connect(G_OBJECT(terminal),"session_changed",G_CALLBACK(session_changed),window); + // g_signal_connect(G_OBJECT(terminal),"field_clicked",G_CALLBACK(field_clicked),window); gtk_widget_grab_focus(terminal); -- libgit2 0.21.2