Commit 596b82c155c361de72a92e6b7631fa285cbb9f6a
Exists in
master
and in
1 other branch
Merge branch 'master' into fix_print_segfault
Showing
4 changed files
with
80 additions
and
32 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/selection/text.c
| ... | ... | @@ -53,6 +53,7 @@ gchar * v3270_get_selection_as_text(v3270 * terminal, const GList *selection, co |
| 53 | 53 | src++; |
| 54 | 54 | |
| 55 | 55 | } |
| 56 | + g_string_append_c(string,'\n'); | |
| 56 | 57 | } |
| 57 | 58 | |
| 58 | 59 | selection = g_list_next(selection); |
| ... | ... | @@ -60,6 +61,13 @@ gchar * v3270_get_selection_as_text(v3270 * terminal, const GList *selection, co |
| 60 | 61 | |
| 61 | 62 | g_autofree char * text = g_string_free(string,FALSE); |
| 62 | 63 | |
| 64 | + // Remove ending CR. | |
| 65 | + { | |
| 66 | + size_t length = strlen(text); | |
| 67 | + if(length > 1 && text[length-1] == '\n') // The '\n' isn't really necessary but... | |
| 68 | + text[length-1] = 0; | |
| 69 | + } | |
| 70 | + | |
| 63 | 71 | return g_convert(text, -1, (encoding ? encoding : "UTF-8"), lib3270_get_display_charset(terminal->host), NULL, NULL, NULL); |
| 64 | 72 | |
| 65 | 73 | } |
| ... | ... | @@ -138,31 +146,6 @@ gchar * v3270_convert_to_3270_charset(GtkWidget *widget, const gchar *text, cons |
| 138 | 146 | |
| 139 | 147 | } |
| 140 | 148 | |
| 141 | - /* | |
| 142 | - // Still failing, convert line by line | |
| 143 | - { | |
| 144 | - size_t f; | |
| 145 | - gchar **ln = g_strsplit(text,"\n",-1); | |
| 146 | - | |
| 147 | - for(f=0;ln[f];f++) | |
| 148 | - { | |
| 149 | - GError *error = NULL; | |
| 150 | - gchar *str = g_convert(ln[f], -1, charset, encoding, NULL, NULL, error); | |
| 151 | - | |
| 152 | - if(!str) | |
| 153 | - { | |
| 154 | - g_strfreev(ln); | |
| 155 | - return NULL; | |
| 156 | - } | |
| 157 | - | |
| 158 | - g_free(str); | |
| 159 | - | |
| 160 | - } | |
| 161 | - g_strfreev(ln); | |
| 162 | - | |
| 163 | - } | |
| 164 | - */ | |
| 165 | - | |
| 166 | 149 | // Can't convert, use fallbacks |
| 167 | 150 | return g_convert_with_fallback( |
| 168 | 151 | text, | ... | ... |
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 | ... | ... |