Commit 596b82c155c361de72a92e6b7631fa285cbb9f6a

Authored by Perry Werneck
2 parents 409a16f0 5f8647ab
Exists in master and in 1 other branch develop

Merge branch 'master' into fix_print_segfault

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/selection/text.c
@@ -53,6 +53,7 @@ gchar * v3270_get_selection_as_text(v3270 * terminal, const GList *selection, co @@ -53,6 +53,7 @@ gchar * v3270_get_selection_as_text(v3270 * terminal, const GList *selection, co
53 src++; 53 src++;
54 54
55 } 55 }
  56 + g_string_append_c(string,'\n');
56 } 57 }
57 58
58 selection = g_list_next(selection); 59 selection = g_list_next(selection);
@@ -60,6 +61,13 @@ gchar * v3270_get_selection_as_text(v3270 * terminal, const GList *selection, co @@ -60,6 +61,13 @@ gchar * v3270_get_selection_as_text(v3270 * terminal, const GList *selection, co
60 61
61 g_autofree char * text = g_string_free(string,FALSE); 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 return g_convert(text, -1, (encoding ? encoding : "UTF-8"), lib3270_get_display_charset(terminal->host), NULL, NULL, NULL); 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,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 // Can't convert, use fallbacks 149 // Can't convert, use fallbacks
167 return g_convert_with_fallback( 150 return g_convert_with_fallback(
168 text, 151 text,
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