Commit c312bb7fb969ee40f2e59b204c494692f1291491

Authored by Perry Werneck
1 parent 8075dae7
Exists in master and in 1 other branch develop

Adding default action for the "click" on the OIA's security state icon.

src/dialogs/security.c
@@ -196,6 +196,7 @@ @@ -196,6 +196,7 @@
196 196
197 LIB3270_EXPORT void v3270_popup_security_dialog(GtkWidget *widget) 197 LIB3270_EXPORT void v3270_popup_security_dialog(GtkWidget *widget)
198 { 198 {
  199 + /*
199 GtkWidget * dialog = gtk_dialog_new_with_buttons( 200 GtkWidget * dialog = gtk_dialog_new_with_buttons(
200 _("About security"), 201 _("About security"),
201 GTK_WINDOW(gtk_widget_get_toplevel(widget)), 202 GTK_WINDOW(gtk_widget_get_toplevel(widget)),
@@ -203,14 +204,44 @@ @@ -203,14 +204,44 @@
203 _( "_Close" ), GTK_RESPONSE_ACCEPT, 204 _( "_Close" ), GTK_RESPONSE_ACCEPT,
204 NULL 205 NULL
205 ); 206 );
  207 + */
206 208
  209 + gboolean use_header = FALSE;
  210 +
  211 +#if GTK_CHECK_VERSION(3,12,0)
  212 +
  213 + g_object_get(gtk_settings_get_default(), "gtk-dialogs-use-header", &use_header, NULL);
  214 +
  215 + GtkWidget * dialog =
  216 + GTK_WIDGET(g_object_new(
  217 + GTK_TYPE_DIALOG,
  218 + "use-header-bar", (use_header ? 1 : 0),
  219 + NULL
  220 + ));
  221 +
  222 +#else
  223 +
  224 + GtkWidget * dialog = GTK_WIDGET(g_object_new(GTK_TYPE_DIALOG, NULL));
  225 +
  226 +#endif // GTK 3.12
  227 +
  228 + if(!use_header) {
  229 + gtk_dialog_add_buttons(
  230 + GTK_DIALOG(dialog),
  231 + _("_Close"), GTK_RESPONSE_CANCEL,
  232 + NULL
  233 + );
  234 + }
  235 +
  236 + gtk_window_set_title(GTK_WINDOW(dialog),_("About security"));
207 gtk_window_set_default_size(GTK_WINDOW(dialog), 800, 500); 237 gtk_window_set_default_size(GTK_WINDOW(dialog), 800, 500);
  238 + gtk_window_set_transient_for(GTK_WINDOW(dialog),GTK_WINDOW(gtk_widget_get_toplevel(widget)));
  239 + gtk_window_set_modal(GTK_WINDOW(dialog),TRUE);
208 240
209 gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))),v3270_security_dialog_new(widget),TRUE,TRUE,2); 241 gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))),v3270_security_dialog_new(widget),TRUE,TRUE,2);
210 gtk_widget_show_all(dialog); 242 gtk_widget_show_all(dialog);
211 243
212 - gtk_dialog_run(GTK_DIALOG(dialog));  
213 - gtk_widget_destroy(GTK_WIDGET(dialog));  
214 - 244 + g_signal_connect(dialog,"close",G_CALLBACK(gtk_widget_destroy),NULL);
  245 + g_signal_connect(dialog,"response",G_CALLBACK(gtk_widget_destroy),NULL);
215 246
216 } 247 }
src/terminal/mouse.c
@@ -194,15 +194,31 @@ gboolean v3270_button_release_event(GtkWidget *widget, GdkEventButton*event) @@ -194,15 +194,31 @@ gboolean v3270_button_release_event(GtkWidget *widget, GdkEventButton*event)
194 if(GTK_V3270(widget)->oia.selected != V3270_OIA_FIELD_INVALID && GTK_V3270(widget)->oia.selected == get_field_from_event(GTK_V3270(widget),event)) 194 if(GTK_V3270(widget)->oia.selected != V3270_OIA_FIELD_INVALID && GTK_V3270(widget)->oia.selected == get_field_from_event(GTK_V3270(widget),event))
195 { 195 {
196 gboolean handled = FALSE; 196 gboolean handled = FALSE;
  197 + gboolean connected = lib3270_is_connected(GTK_V3270(widget)->host) ? TRUE : FALSE;
  198 + V3270_OIA_FIELD field = GTK_V3270(widget)->oia.selected;
197 199
198 g_signal_emit(widget, v3270_widget_signal[V3270_SIGNAL_FIELD], 0, 200 g_signal_emit(widget, v3270_widget_signal[V3270_SIGNAL_FIELD], 0,
199 - lib3270_is_connected(GTK_V3270(widget)->host) ? TRUE : FALSE,  
200 - GTK_V3270(widget)->oia.selected, 201 + connected,
  202 + field,
201 event, 203 event,
202 &handled); 204 &handled);
203 205
204 - if(!handled)  
205 - gdk_display_beep(gdk_display_get_default()); 206 + debug("Field click was %s", handled ? "Handled" : "Not handled");
  207 +
  208 + if(!handled) {
  209 +
  210 + // The signal was not handled, take default action.
  211 + if(connected && field == V3270_OIA_SSL) {
  212 +
  213 + // Show the default ssl status dialog.
  214 + debug("%s: Showing the default SSL status dialog",__FUNCTION__);
  215 + v3270_popup_security_dialog(widget);
  216 +
  217 + } else {
  218 + gdk_display_beep(gdk_display_get_default());
  219 + }
  220 +
  221 + }
206 222
207 } 223 }
208 224
src/testprogram/testprogram.c
@@ -48,6 +48,23 @@ @@ -48,6 +48,23 @@
48 gtk_window_set_title(GTK_WINDOW(window),v3270_get_session_title(terminal)); 48 gtk_window_set_title(GTK_WINDOW(window),v3270_get_session_title(terminal));
49 } 49 }
50 50
  51 + /*
  52 + static gboolean field_clicked(GtkWidget *widget, gboolean connected, V3270_OIA_FIELD field, GdkEventButton *event, GtkWidget *window) {
  53 + debug("%s: %s field=%d event=%p window=%p",__FUNCTION__,connected ? "Connected" : "Disconnected", field, event, window);
  54 +
  55 + if(!connected)
  56 + return FALSE;
  57 +
  58 + if(field == V3270_OIA_SSL) {
  59 + // v3270_popup_security_dialog(widget);
  60 + debug("%s: Show SSL connection info dialog",__FUNCTION__);
  61 + return TRUE;
  62 + }
  63 +
  64 + return FALSE;
  65 + }
  66 + */
  67 +
51 static void activate(GtkApplication* app, G_GNUC_UNUSED gpointer user_data) { 68 static void activate(GtkApplication* app, G_GNUC_UNUSED gpointer user_data) {
52 69
53 GtkWidget * window = gtk_application_window_new(app); 70 GtkWidget * window = gtk_application_window_new(app);
@@ -92,6 +109,7 @@ @@ -92,6 +109,7 @@
92 gtk_widget_show_all(window); 109 gtk_widget_show_all(window);
93 110
94 g_signal_connect(G_OBJECT(terminal),"session_changed",G_CALLBACK(session_changed),window); 111 g_signal_connect(G_OBJECT(terminal),"session_changed",G_CALLBACK(session_changed),window);
  112 + // g_signal_connect(G_OBJECT(terminal),"field_clicked",G_CALLBACK(field_clicked),window);
95 113
96 gtk_widget_grab_focus(terminal); 114 gtk_widget_grab_focus(terminal);
97 115