Commit c312bb7fb969ee40f2e59b204c494692f1291491
1 parent
8075dae7
Exists in
master
and in
1 other branch
Adding default action for the "click" on the OIA's security state icon.
Showing
3 changed files
with
72 additions
and
7 deletions
Show diff stats
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 |