Commit 2ce8f403343a6465c576be54065d10bb6bf07cc6

Authored by Perry Werneck
1 parent 7f2f69c0
Exists in master and in 1 other branch develop

Refactoring host settings dialog.

src/dialogs/settings/host.c
@@ -38,6 +38,7 @@ @@ -38,6 +38,7 @@
38 #include <lib3270/log.h> 38 #include <lib3270/log.h>
39 #include <lib3270/toggle.h> 39 #include <lib3270/toggle.h>
40 #include <lib3270/properties.h> 40 #include <lib3270/properties.h>
  41 + #include <v3270/settings/url.h>
41 42
42 /*--[ Globals ]--------------------------------------------------------------------------------------*/ 43 /*--[ Globals ]--------------------------------------------------------------------------------------*/
43 44
@@ -52,21 +53,21 @@ @@ -52,21 +53,21 @@
52 { 53 {
53 { 54 {
54 .left = 2, 55 .left = 2,
55 - .top = 2, 56 + .top = 3,
56 .width = 2, 57 .width = 2,
57 .grid = CONNECTION, 58 .grid = CONNECTION,
58 .id = LIB3270_TOGGLE_CONNECT_ON_STARTUP, 59 .id = LIB3270_TOGGLE_CONNECT_ON_STARTUP,
59 }, 60 },
60 { 61 {
61 .left = 4, 62 .left = 4,
62 - .top = 2, 63 + .top = 3,
63 .width = 1, 64 .width = 1,
64 .grid = CONNECTION, 65 .grid = CONNECTION,
65 .id = LIB3270_TOGGLE_RECONNECT, 66 .id = LIB3270_TOGGLE_RECONNECT,
66 }, 67 },
67 { 68 {
68 .left = 5, 69 .left = 5,
69 - .top = 2, 70 + .top = 3,
70 .width = 1, 71 .width = 1,
71 .grid = CONNECTION, 72 .grid = CONNECTION,
72 .id = LIB3270_TOGGLE_KEEP_ALIVE, 73 .id = LIB3270_TOGGLE_KEEP_ALIVE,
@@ -94,8 +95,6 @@ @@ -94,8 +95,6 @@
94 95
95 enum _entry 96 enum _entry
96 { 97 {
97 - ENTRY_HOSTNAME,  
98 - ENTRY_SRVCNAME,  
99 ENTRY_OVERSIZE, 98 ENTRY_OVERSIZE,
100 ENTRY_REMAP_FILE, 99 ENTRY_REMAP_FILE,
101 ENTRY_LU_NAMES, 100 ENTRY_LU_NAMES,
@@ -206,32 +205,6 @@ @@ -206,32 +205,6 @@
206 205
207 static const struct EntryFieldDefinition entryfields[] = { 206 static const struct EntryFieldDefinition entryfields[] = {
208 { 207 {
209 - .left = 0,  
210 - .top = 0,  
211 - .width = 5,  
212 - .height = 1,  
213 - .grid = CONNECTION,  
214 -  
215 - .label = N_( "_Host" ),  
216 - .tooltip = N_("Address or name of the host to connect."),  
217 - .max_length = 0xFF,  
218 - .width_chars = 50,  
219 -  
220 - },  
221 - {  
222 - .left = 0,  
223 - .top = 1,  
224 - .width = 1,  
225 - .height = 1,  
226 - .grid = CONNECTION,  
227 -  
228 - .label = N_( "_Service" ),  
229 - .tooltip = N_("Port or service name."),  
230 - .max_length = 6,  
231 - .width_chars = 7,  
232 - },  
233 -  
234 - {  
235 .top = 1, 208 .top = 1,
236 .left = 3, 209 .left = 3,
237 .width = 2, 210 .width = 2,
@@ -258,9 +231,9 @@ @@ -258,9 +231,9 @@
258 }, 231 },
259 232
260 { 233 {
261 - .left = 2,  
262 - .top = 1,  
263 - .width = 3, 234 + .left = 0,
  235 + .top = 2,
  236 + .width = 5,
264 .height = 1, 237 .height = 1,
265 .grid = CONNECTION, 238 .grid = CONNECTION,
266 239
@@ -279,12 +252,12 @@ @@ -279,12 +252,12 @@
279 struct 252 struct
280 { 253 {
281 GtkEntry * entry[G_N_ELEMENTS(entryfields)]; ///< @brief Entry fields for host & service name. 254 GtkEntry * entry[G_N_ELEMENTS(entryfields)]; ///< @brief Entry fields for host & service name.
282 - GtkComboBox * ssl; ///< @brief SSL Connection?  
283 GtkComboBox * combos[G_N_ELEMENTS(combos)]; ///< @brief Combo-boxes. 255 GtkComboBox * combos[G_N_ELEMENTS(combos)]; ///< @brief Combo-boxes.
284 GtkComboBox * charset; ///< @brief Charset combo box. 256 GtkComboBox * charset; ///< @brief Charset combo box.
285 GtkToggleButton * toggles[G_N_ELEMENTS(toggleList)]; ///< @brief Toggle checks. 257 GtkToggleButton * toggles[G_N_ELEMENTS(toggleList)]; ///< @brief Toggle checks.
286 GtkSpinButton * auto_disconnect; ///< @brief Auto disconnect. 258 GtkSpinButton * auto_disconnect; ///< @brief Auto disconnect.
287 GtkSpinButton * unlock_delay; ///< @brief Unlock delay. 259 GtkSpinButton * unlock_delay; ///< @brief Unlock delay.
  260 + GtkWidget * url; ///< @brief The URL entry widget.
288 261
289 } input; 262 } input;
290 263
@@ -339,19 +312,7 @@ static gboolean oversize_validate(GtkEditable *editable) { @@ -339,19 +312,7 @@ static gboolean oversize_validate(GtkEditable *editable) {
339 static void update_valid(V3270HostSelectWidget *settings, gboolean valid) { 312 static void update_valid(V3270HostSelectWidget *settings, gboolean valid) {
340 313
341 if(valid) { 314 if(valid) {
342 -  
343 - // Check required inputs.  
344 -  
345 - static const int required[] = { ENTRY_HOSTNAME, ENTRY_SRVCNAME };  
346 - size_t ix;  
347 -  
348 - for(ix = 0; ix < G_N_ELEMENTS(required); ix++) {  
349 - const gchar * chars = gtk_editable_get_chars(GTK_EDITABLE(settings->input.entry[required[ix]]),0,-1);  
350 - if(!*chars) {  
351 - valid = FALSE;  
352 - break;  
353 - }  
354 - } 315 + valid = v3270_url_edit_is_valid(settings->input.url);
355 } 316 }
356 317
357 if(valid) { 318 if(valid) {
@@ -362,12 +323,14 @@ static void update_valid(V3270HostSelectWidget *settings, gboolean valid) { @@ -362,12 +323,14 @@ static void update_valid(V3270HostSelectWidget *settings, gboolean valid) {
362 323
363 } 324 }
364 325
  326 +/*
365 static void required_changed(GtkEditable *editable, GtkWidget *settings) { 327 static void required_changed(GtkEditable *editable, GtkWidget *settings) {
366 328
367 const gchar * chars = gtk_editable_get_chars(editable,0,-1); 329 const gchar * chars = gtk_editable_get_chars(editable,0,-1);
368 update_valid(GTK_V3270HostSelectWidget(settings),(*chars ? TRUE : FALSE)); 330 update_valid(GTK_V3270HostSelectWidget(settings),(*chars ? TRUE : FALSE));
369 331
370 } 332 }
  333 +*/
371 334
372 static void oversize_changed(GtkEditable *editable, GtkWidget *settings) { 335 static void oversize_changed(GtkEditable *editable, GtkWidget *settings) {
373 update_valid(GTK_V3270HostSelectWidget(settings), oversize_validate(editable)); 336 update_valid(GTK_V3270HostSelectWidget(settings), oversize_validate(editable));
@@ -454,18 +417,10 @@ static void V3270HostSelectWidget_init(V3270HostSelectWidget *widget) @@ -454,18 +417,10 @@ static void V3270HostSelectWidget_init(V3270HostSelectWidget *widget)
454 { 417 {
455 GtkWidget *grids[GRID_COUNT]; 418 GtkWidget *grids[GRID_COUNT];
456 419
457 - {  
458 - size_t grid;  
459 -  
460 - for(grid = 0; grid < G_N_ELEMENTS(grids); grid++)  
461 - grids[grid] = gtk_grid_new();  
462 -  
463 - } 420 + grids[CONNECTION] = v3270_url_edit_new();
  421 + grids[EMULATION] = gtk_grid_new();
464 422
465 // Connection properties 423 // Connection properties
466 - gtk_grid_set_row_spacing(GTK_GRID(grids[CONNECTION]),6);  
467 - gtk_grid_set_column_spacing(GTK_GRID(grids[CONNECTION]),12);  
468 -  
469 gtk_grid_attach( 424 gtk_grid_attach(
470 GTK_GRID(widget), 425 GTK_GRID(widget),
471 v3270_dialog_section_new(_("Connection"),_("Network connection settings"),grids[CONNECTION]), 426 v3270_dialog_section_new(_("Connection"),_("Network connection settings"),grids[CONNECTION]),
@@ -486,10 +441,6 @@ static void V3270HostSelectWidget_init(V3270HostSelectWidget *widget) @@ -486,10 +441,6 @@ static void V3270HostSelectWidget_init(V3270HostSelectWidget *widget)
486 { 441 {
487 v3270_settings_create_entry_fields(entryfields, G_N_ELEMENTS(entryfields), grids, widget->input.entry); 442 v3270_settings_create_entry_fields(entryfields, G_N_ELEMENTS(entryfields), grids, widget->input.entry);
488 443
489 - // Custom settings  
490 - // gtk_entry_set_placeholder_text(widget->input.entry[ENTRY_SRVCNAME],"telnet");  
491 -  
492 - gtk_widget_set_hexpand(GTK_WIDGET(widget->input.entry[ENTRY_HOSTNAME]),TRUE);  
493 gtk_widget_set_hexpand(GTK_WIDGET(widget->input.entry[ENTRY_REMAP_FILE]),TRUE); 444 gtk_widget_set_hexpand(GTK_WIDGET(widget->input.entry[ENTRY_REMAP_FILE]),TRUE);
494 445
495 gtk_entry_set_icon_from_icon_name(widget->input.entry[ENTRY_REMAP_FILE],GTK_ENTRY_ICON_SECONDARY,"document-open"); 446 gtk_entry_set_icon_from_icon_name(widget->input.entry[ENTRY_REMAP_FILE],GTK_ENTRY_ICON_SECONDARY,"document-open");
@@ -500,8 +451,6 @@ static void V3270HostSelectWidget_init(V3270HostSelectWidget *widget) @@ -500,8 +451,6 @@ static void V3270HostSelectWidget_init(V3270HostSelectWidget *widget)
500 g_signal_connect(G_OBJECT(widget->input.entry[ENTRY_REMAP_FILE]),"changed",G_CALLBACK(remap_file_changed),widget); 451 g_signal_connect(G_OBJECT(widget->input.entry[ENTRY_REMAP_FILE]),"changed",G_CALLBACK(remap_file_changed),widget);
501 452
502 g_signal_connect(G_OBJECT(widget->input.entry[ENTRY_OVERSIZE]),"changed",G_CALLBACK(oversize_changed),widget); 453 g_signal_connect(G_OBJECT(widget->input.entry[ENTRY_OVERSIZE]),"changed",G_CALLBACK(oversize_changed),widget);
503 - g_signal_connect(G_OBJECT(widget->input.entry[ENTRY_HOSTNAME]),"changed",G_CALLBACK(required_changed),widget);  
504 - g_signal_connect(G_OBJECT(widget->input.entry[ENTRY_SRVCNAME]),"changed",G_CALLBACK(required_changed),widget);  
505 454
506 } 455 }
507 456
@@ -516,8 +465,8 @@ static void V3270HostSelectWidget_init(V3270HostSelectWidget *widget) @@ -516,8 +465,8 @@ static void V3270HostSelectWidget_init(V3270HostSelectWidget *widget)
516 465
517 gtk_spin_button_set_increments(widget->input.auto_disconnect,1,1); 466 gtk_spin_button_set_increments(widget->input.auto_disconnect,1,1);
518 467
519 - gtk_grid_attach(GTK_GRID(grids[CONNECTION]),label,0,2,1,1);  
520 - gtk_grid_attach(GTK_GRID(grids[CONNECTION]),GTK_WIDGET(widget->input.auto_disconnect),1,2,1,1); 468 + gtk_grid_attach(GTK_GRID(grids[CONNECTION]),label,0,3,1,1);
  469 + gtk_grid_attach(GTK_GRID(grids[CONNECTION]),GTK_WIDGET(widget->input.auto_disconnect),1,3,1,1);
521 g_signal_connect(G_OBJECT(widget->input.auto_disconnect),"output",G_CALLBACK(spin_format),widget); 470 g_signal_connect(G_OBJECT(widget->input.auto_disconnect),"output",G_CALLBACK(spin_format),widget);
522 } 471 }
523 472
@@ -540,43 +489,6 @@ static void V3270HostSelectWidget_init(V3270HostSelectWidget *widget) @@ -540,43 +489,6 @@ static void V3270HostSelectWidget_init(V3270HostSelectWidget *widget)
540 489
541 } 490 }
542 491
543 - // SSL input  
544 - {  
545 - GtkWidget *label = gtk_label_new_with_mnemonic(_( "_Security" ));  
546 - gtk_widget_set_halign(label,GTK_ALIGN_END);  
547 - gtk_grid_attach(GTK_GRID(grids[CONNECTION]),label,0,3,1,1);  
548 -  
549 - GtkTreeModel * model = (GtkTreeModel *) gtk_list_store_new(1,G_TYPE_STRING);  
550 -  
551 - widget->input.ssl = GTK_COMBO_BOX(gtk_combo_box_new_with_model(model));  
552 -  
553 - GtkCellRenderer * text_renderer = gtk_cell_renderer_text_new();  
554 - gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(widget->input.ssl), text_renderer, TRUE);  
555 - gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(widget->input.ssl), text_renderer, "text", 0, NULL);  
556 -  
557 - static const gchar * levels[] =  
558 - {  
559 - N_("Unsecure"),  
560 - N_("SSL/TLS")  
561 - };  
562 -  
563 - size_t level;  
564 - for(level = 0; level < G_N_ELEMENTS(levels); level++)  
565 - {  
566 - GtkTreeIter iter;  
567 - gtk_list_store_append((GtkListStore *) model, &iter);  
568 - gtk_list_store_set((GtkListStore *) model, &iter, 0, levels[level], -1);  
569 - };  
570 -  
571 - /*  
572 - widget->input.ssl = GTK_TOGGLE_BUTTON(gtk_check_button_new_with_mnemonic(_( "_Secure connection." )));  
573 - gtk_widget_set_tooltip_text(GTK_WIDGET(widget->input.ssl),_( "Check for SSL secure connection." ));  
574 - gtk_widget_set_halign(GTK_WIDGET(widget->input.ssl),GTK_ALIGN_START);  
575 - */  
576 -  
577 - gtk_grid_attach(GTK_GRID(grids[CONNECTION]),GTK_WIDGET(widget->input.ssl),1,3,2,1);  
578 - }  
579 -  
580 // Toggle checkboxes 492 // Toggle checkboxes
581 v3270_settings_create_toggle_buttons(toggleList, G_N_ELEMENTS(toggleList), grids, widget->input.toggles); 493 v3270_settings_create_toggle_buttons(toggleList, G_N_ELEMENTS(toggleList), grids, widget->input.toggles);
582 494
@@ -725,20 +637,7 @@ static void apply(GtkWidget *w, GtkWidget *terminal) @@ -725,20 +637,7 @@ static void apply(GtkWidget *w, GtkWidget *terminal)
725 H3270 *hSession = v3270_get_session(terminal); 637 H3270 *hSession = v3270_get_session(terminal);
726 638
727 // Apply URL 639 // Apply URL
728 - {  
729 - g_autofree gchar * url =  
730 - g_strconcat(  
731 - (gtk_combo_box_get_active(widget->input.ssl) > 0 ? "tn3270s://" : "tn3270://"),  
732 - gtk_entry_get_text(widget->input.entry[ENTRY_HOSTNAME]),  
733 - ":",  
734 - gtk_entry_get_text(widget->input.entry[ENTRY_SRVCNAME]),  
735 - NULL  
736 - );  
737 -  
738 - debug("URL=[%s]",url);  
739 - lib3270_set_url(hSession,url);  
740 -  
741 - } 640 + lib3270_set_url(hSession,v3270_url_edit_get_url(widget->input.url));
742 641
743 // Apply LU names 642 // Apply LU names
744 v3270_set_lunames(terminal,gtk_entry_get_text(widget->input.entry[ENTRY_LU_NAMES])); 643 v3270_set_lunames(terminal,gtk_entry_get_text(widget->input.entry[ENTRY_LU_NAMES]));
@@ -801,42 +700,7 @@ static void load(GtkWidget *w, GtkWidget *terminal) @@ -801,42 +700,7 @@ static void load(GtkWidget *w, GtkWidget *terminal)
801 H3270 *hSession = v3270_get_session(terminal); 700 H3270 *hSession = v3270_get_session(terminal);
802 V3270HostSelectWidget *widget = GTK_V3270HostSelectWidget(w); 701 V3270HostSelectWidget *widget = GTK_V3270HostSelectWidget(w);
803 702
804 - const gchar * u = lib3270_get_url(hSession);  
805 -  
806 - if(u)  
807 - {  
808 -  
809 - g_autofree gchar * url = g_strdup(u);  
810 -  
811 - gtk_combo_box_set_active(widget->input.ssl,(g_str_has_prefix(u,"tn3270s") ? 1 : 0));  
812 -// gtk_toggle_button_set_active(widget->input.ssl,g_str_has_prefix(u,"tn3270s"));  
813 -  
814 - gchar *hostname = strstr(url,"://");  
815 - if(!hostname)  
816 - {  
817 - g_message("Invalid URL: \"%s\" (no scheme)",url);  
818 - }  
819 - else  
820 - {  
821 - hostname += 3;  
822 -  
823 - gchar *srvcname = strchr(hostname,':');  
824 -  
825 - if(srvcname)  
826 - {  
827 - *(srvcname++) = 0;  
828 - }  
829 - else  
830 - {  
831 - srvcname = "23";  
832 - }  
833 -  
834 - gtk_entry_set_text(widget->input.entry[ENTRY_HOSTNAME],hostname);  
835 - gtk_entry_set_text(widget->input.entry[ENTRY_SRVCNAME],srvcname);  
836 -  
837 - }  
838 -  
839 - } 703 + v3270_url_edit_set_url(widget->input.url,lib3270_get_url(hSession));
840 704
841 // Load LU names 705 // Load LU names
842 g_autofree gchar * lunames = v3270_get_lunames(terminal); 706 g_autofree gchar * lunames = v3270_get_lunames(terminal);
src/dialogs/settings/url.c
@@ -122,7 +122,7 @@ @@ -122,7 +122,7 @@
122 gtk_entry_set_width_chars(GTK_ENTRY(widget->entry.host),50); 122 gtk_entry_set_width_chars(GTK_ENTRY(widget->entry.host),50);
123 gtk_entry_set_placeholder_text(GTK_ENTRY(widget->entry.host),_("The tn3270 host name")); 123 gtk_entry_set_placeholder_text(GTK_ENTRY(widget->entry.host),_("The tn3270 host name"));
124 gtk_widget_set_tooltip_text(widget->entry.host,g_dgettext(GETTEXT_PACKAGE,labels[0].tooltip)); 124 gtk_widget_set_tooltip_text(widget->entry.host,g_dgettext(GETTEXT_PACKAGE,labels[0].tooltip));
125 - gtk_grid_attach(GTK_GRID(widget),widget->entry.host,1,0,4,1); 125 + gtk_grid_attach(GTK_GRID(widget),widget->entry.host,1,0,5,1);
126 } 126 }
127 127
128 // Create the service/port field. 128 // Create the service/port field.
@@ -160,7 +160,7 @@ @@ -160,7 +160,7 @@
160 }; 160 };
161 161
162 gtk_widget_set_tooltip_text(widget->entry.ssl,g_dgettext(GETTEXT_PACKAGE,labels[2].tooltip)); 162 gtk_widget_set_tooltip_text(widget->entry.ssl,g_dgettext(GETTEXT_PACKAGE,labels[2].tooltip));
163 - gtk_grid_attach(GTK_GRID(widget),widget->entry.ssl,3,1,2,1); 163 + gtk_grid_attach(GTK_GRID(widget),widget->entry.ssl,3,1,3,1);
164 } 164 }
165 165
166 // Create labels. 166 // Create labels.
@@ -256,3 +256,14 @@ @@ -256,3 +256,14 @@
256 return edit->url; 256 return edit->url;
257 } 257 }
258 258
  259 + gboolean v3270_url_edit_is_valid(GtkWidget *widget) {
  260 + g_return_val_if_fail(GTK_IS_V3270URLEdit(widget),FALSE);
  261 +
  262 + V3270URLEdit *edit = GTK_V3270URLEdit(widget);
  263 +
  264 + const gchar *host = gtk_entry_get_text(GTK_ENTRY(edit->entry.host));
  265 + if(!*host)
  266 + return FALSE;
  267 +
  268 + return TRUE;
  269 + }
src/include/v3270/settings/url.h
@@ -52,6 +52,7 @@ @@ -52,6 +52,7 @@
52 GtkWidget * v3270_url_edit_new(); 52 GtkWidget * v3270_url_edit_new();
53 void v3270_url_edit_set_url(GtkWidget *widget, const gchar *url); 53 void v3270_url_edit_set_url(GtkWidget *widget, const gchar *url);
54 const gchar * v3270_url_edit_get_url(GtkWidget *widget); 54 const gchar * v3270_url_edit_get_url(GtkWidget *widget);
  55 + gboolean v3270_url_edit_is_valid(GtkWidget *widget);
55 56
56 G_END_DECLS 57 G_END_DECLS
57 58
src/testprogram/toolbar.c
@@ -34,7 +34,6 @@ @@ -34,7 +34,6 @@
34 #include <v3270/colorscheme.h> 34 #include <v3270/colorscheme.h>
35 #include <v3270/dialogs.h> 35 #include <v3270/dialogs.h>
36 #include <v3270/settings.h> 36 #include <v3270/settings.h>
37 - #include <v3270/settings/url.h>  
38 #include <v3270/selection.h> 37 #include <v3270/selection.h>
39 #include <v3270/trace.h> 38 #include <v3270/trace.h>
40 #include <lib3270/log.h> 39 #include <lib3270/log.h>
@@ -71,13 +70,6 @@ @@ -71,13 +70,6 @@
71 70
72 static void preferences_clicked(GtkButton G_GNUC_UNUSED(*button), GtkWidget *terminal) 71 static void preferences_clicked(GtkButton G_GNUC_UNUSED(*button), GtkWidget *terminal)
73 { 72 {
74 - GtkWidget * dialog = gtk_window_new(GTK_WINDOW_TOPLEVEL);  
75 -  
76 - gtk_container_add(GTK_CONTAINER(dialog),v3270_url_edit_new());  
77 - gtk_widget_show_all(dialog);  
78 -  
79 -  
80 - /*  
81 size_t ix; 73 size_t ix;
82 GtkWidget * dialog = v3270_settings_dialog_new(); 74 GtkWidget * dialog = v3270_settings_dialog_new();
83 75
@@ -103,7 +95,6 @@ @@ -103,7 +95,6 @@
103 g_signal_connect(dialog,"response",G_CALLBACK(v3270_setttings_dialog_response),NULL); 95 g_signal_connect(dialog,"response",G_CALLBACK(v3270_setttings_dialog_response),NULL);
104 96
105 gtk_widget_show_all(dialog); 97 gtk_widget_show_all(dialog);
106 - */  
107 98
108 } 99 }
109 100