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 |