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 | 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 | ... | ... |