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 196  
197 197 LIB3270_EXPORT void v3270_popup_security_dialog(GtkWidget *widget)
198 198 {
  199 + /*
199 200 GtkWidget * dialog = gtk_dialog_new_with_buttons(
200 201 _("About security"),
201 202 GTK_WINDOW(gtk_widget_get_toplevel(widget)),
... ... @@ -203,14 +204,44 @@
203 204 _( "_Close" ), GTK_RESPONSE_ACCEPT,
204 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 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 241 gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))),v3270_security_dialog_new(widget),TRUE,TRUE,2);
210 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 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 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 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 203 event,
202 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 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 68 static void activate(GtkApplication* app, G_GNUC_UNUSED gpointer user_data) {
52 69  
53 70 GtkWidget * window = gtk_application_window_new(app);
... ... @@ -92,6 +109,7 @@
92 109 gtk_widget_show_all(window);
93 110  
94 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 114 gtk_widget_grab_focus(terminal);
97 115  
... ...