Commit 2ce8f403343a6465c576be54065d10bb6bf07cc6
1 parent
7f2f69c0
Exists in
master
and in
1 other branch
Refactoring host settings dialog.
Showing
4 changed files
with
31 additions
and
164 deletions
Show diff stats
src/dialogs/settings/host.c
... | ... | @@ -38,6 +38,7 @@ |
38 | 38 | #include <lib3270/log.h> |
39 | 39 | #include <lib3270/toggle.h> |
40 | 40 | #include <lib3270/properties.h> |
41 | + #include <v3270/settings/url.h> | |
41 | 42 | |
42 | 43 | /*--[ Globals ]--------------------------------------------------------------------------------------*/ |
43 | 44 | |
... | ... | @@ -52,21 +53,21 @@ |
52 | 53 | { |
53 | 54 | { |
54 | 55 | .left = 2, |
55 | - .top = 2, | |
56 | + .top = 3, | |
56 | 57 | .width = 2, |
57 | 58 | .grid = CONNECTION, |
58 | 59 | .id = LIB3270_TOGGLE_CONNECT_ON_STARTUP, |
59 | 60 | }, |
60 | 61 | { |
61 | 62 | .left = 4, |
62 | - .top = 2, | |
63 | + .top = 3, | |
63 | 64 | .width = 1, |
64 | 65 | .grid = CONNECTION, |
65 | 66 | .id = LIB3270_TOGGLE_RECONNECT, |
66 | 67 | }, |
67 | 68 | { |
68 | 69 | .left = 5, |
69 | - .top = 2, | |
70 | + .top = 3, | |
70 | 71 | .width = 1, |
71 | 72 | .grid = CONNECTION, |
72 | 73 | .id = LIB3270_TOGGLE_KEEP_ALIVE, |
... | ... | @@ -94,8 +95,6 @@ |
94 | 95 | |
95 | 96 | enum _entry |
96 | 97 | { |
97 | - ENTRY_HOSTNAME, | |
98 | - ENTRY_SRVCNAME, | |
99 | 98 | ENTRY_OVERSIZE, |
100 | 99 | ENTRY_REMAP_FILE, |
101 | 100 | ENTRY_LU_NAMES, |
... | ... | @@ -206,32 +205,6 @@ |
206 | 205 | |
207 | 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 | 208 | .top = 1, |
236 | 209 | .left = 3, |
237 | 210 | .width = 2, |
... | ... | @@ -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 | 237 | .height = 1, |
265 | 238 | .grid = CONNECTION, |
266 | 239 | |
... | ... | @@ -279,12 +252,12 @@ |
279 | 252 | struct |
280 | 253 | { |
281 | 254 | GtkEntry * entry[G_N_ELEMENTS(entryfields)]; ///< @brief Entry fields for host & service name. |
282 | - GtkComboBox * ssl; ///< @brief SSL Connection? | |
283 | 255 | GtkComboBox * combos[G_N_ELEMENTS(combos)]; ///< @brief Combo-boxes. |
284 | 256 | GtkComboBox * charset; ///< @brief Charset combo box. |
285 | 257 | GtkToggleButton * toggles[G_N_ELEMENTS(toggleList)]; ///< @brief Toggle checks. |
286 | 258 | GtkSpinButton * auto_disconnect; ///< @brief Auto disconnect. |
287 | 259 | GtkSpinButton * unlock_delay; ///< @brief Unlock delay. |
260 | + GtkWidget * url; ///< @brief The URL entry widget. | |
288 | 261 | |
289 | 262 | } input; |
290 | 263 | |
... | ... | @@ -339,19 +312,7 @@ static gboolean oversize_validate(GtkEditable *editable) { |
339 | 312 | static void update_valid(V3270HostSelectWidget *settings, gboolean valid) { |
340 | 313 | |
341 | 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 | 318 | if(valid) { |
... | ... | @@ -362,12 +323,14 @@ static void update_valid(V3270HostSelectWidget *settings, gboolean valid) { |
362 | 323 | |
363 | 324 | } |
364 | 325 | |
326 | +/* | |
365 | 327 | static void required_changed(GtkEditable *editable, GtkWidget *settings) { |
366 | 328 | |
367 | 329 | const gchar * chars = gtk_editable_get_chars(editable,0,-1); |
368 | 330 | update_valid(GTK_V3270HostSelectWidget(settings),(*chars ? TRUE : FALSE)); |
369 | 331 | |
370 | 332 | } |
333 | +*/ | |
371 | 334 | |
372 | 335 | static void oversize_changed(GtkEditable *editable, GtkWidget *settings) { |
373 | 336 | update_valid(GTK_V3270HostSelectWidget(settings), oversize_validate(editable)); |
... | ... | @@ -454,18 +417,10 @@ static void V3270HostSelectWidget_init(V3270HostSelectWidget *widget) |
454 | 417 | { |
455 | 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 | 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 | 424 | gtk_grid_attach( |
470 | 425 | GTK_GRID(widget), |
471 | 426 | v3270_dialog_section_new(_("Connection"),_("Network connection settings"),grids[CONNECTION]), |
... | ... | @@ -486,10 +441,6 @@ static void V3270HostSelectWidget_init(V3270HostSelectWidget *widget) |
486 | 441 | { |
487 | 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 | 444 | gtk_widget_set_hexpand(GTK_WIDGET(widget->input.entry[ENTRY_REMAP_FILE]),TRUE); |
494 | 445 | |
495 | 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 | 451 | g_signal_connect(G_OBJECT(widget->input.entry[ENTRY_REMAP_FILE]),"changed",G_CALLBACK(remap_file_changed),widget); |
501 | 452 | |
502 | 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 | 465 | |
517 | 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 | 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 | 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 | 492 | // Toggle checkboxes |
581 | 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 | 637 | H3270 *hSession = v3270_get_session(terminal); |
726 | 638 | |
727 | 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 | 642 | // Apply LU names |
744 | 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 | 700 | H3270 *hSession = v3270_get_session(terminal); |
802 | 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 | 705 | // Load LU names |
842 | 706 | g_autofree gchar * lunames = v3270_get_lunames(terminal); | ... | ... |
src/dialogs/settings/url.c
... | ... | @@ -122,7 +122,7 @@ |
122 | 122 | gtk_entry_set_width_chars(GTK_ENTRY(widget->entry.host),50); |
123 | 123 | gtk_entry_set_placeholder_text(GTK_ENTRY(widget->entry.host),_("The tn3270 host name")); |
124 | 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 | 128 | // Create the service/port field. |
... | ... | @@ -160,7 +160,7 @@ |
160 | 160 | }; |
161 | 161 | |
162 | 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 | 166 | // Create labels. |
... | ... | @@ -256,3 +256,14 @@ |
256 | 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
src/testprogram/toolbar.c
... | ... | @@ -34,7 +34,6 @@ |
34 | 34 | #include <v3270/colorscheme.h> |
35 | 35 | #include <v3270/dialogs.h> |
36 | 36 | #include <v3270/settings.h> |
37 | - #include <v3270/settings/url.h> | |
38 | 37 | #include <v3270/selection.h> |
39 | 38 | #include <v3270/trace.h> |
40 | 39 | #include <lib3270/log.h> |
... | ... | @@ -71,13 +70,6 @@ |
71 | 70 | |
72 | 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 | 73 | size_t ix; |
82 | 74 | GtkWidget * dialog = v3270_settings_dialog_new(); |
83 | 75 | |
... | ... | @@ -103,7 +95,6 @@ |
103 | 95 | g_signal_connect(dialog,"response",G_CALLBACK(v3270_setttings_dialog_response),NULL); |
104 | 96 | |
105 | 97 | gtk_widget_show_all(dialog); |
106 | - */ | |
107 | 98 | |
108 | 99 | } |
109 | 100 | ... | ... |