Commit 528ccfbfcf18a2f1fe2bdb5cfca7626fa2596a2f

Authored by Perry Werneck
1 parent 953d553a
Exists in master and in 1 other branch develop

Disabling "apply" button when host & service name are not set on host

properties widget.
src/dialogs/settings/host.c
... ... @@ -317,28 +317,60 @@ static void V3270HostSelectWidget_class_init(G_GNUC_UNUSED V3270HostSelectWidget
317 317  
318 318 }
319 319  
320   -static void oversize_changed(GtkEditable *editable, GtkWidget *settings)
321   -{
  320 +static gboolean oversize_validate(GtkEditable *editable) {
  321 +
322 322 const gchar * chars = gtk_editable_get_chars(editable,0,-1);
323   - gboolean valid = TRUE;
324   - char junk;
325   - unsigned int ovc = 0, ovr = 0;
326 323  
327   - if(*chars)
328   - {
  324 + if(*chars) {
  325 + char junk;
  326 + unsigned int ovc = 0, ovr = 0;
  327 +
329 328 if(sscanf(chars, "%ux%u%c", &ovc, &ovr, &junk) != 2)
330   - {
331   - valid = FALSE;
332   - debug("Can't parse \"%s\"",chars);
333   - }
334   - else if( (ovc * ovr) > 0x4000)
335   - {
336   - valid = FALSE;
337   - debug("Invalid values on \"%s\"",chars);
338   - }
  329 + return FALSE;
  330 +
  331 + if( (ovc * ovr) > 0x4000)
  332 + return FALSE;
  333 +
339 334 }
340 335  
341   - v3270_settings_set_valid(settings,valid);
  336 + return TRUE;
  337 +}
  338 +
  339 +static void update_valid(V3270HostSelectWidget *settings, gboolean valid) {
  340 +
  341 + 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 + }
  355 + }
  356 +
  357 + if(valid) {
  358 + valid = oversize_validate(GTK_EDITABLE(settings->input.entry[ENTRY_OVERSIZE]));
  359 + }
  360 +
  361 + v3270_settings_set_valid(GTK_WIDGET(settings),valid);
  362 +
  363 +}
  364 +
  365 +static void required_changed(GtkEditable *editable, GtkWidget *settings) {
  366 +
  367 + const gchar * chars = gtk_editable_get_chars(editable,0,-1);
  368 + update_valid(GTK_V3270HostSelectWidget(settings),(*chars ? TRUE : FALSE));
  369 +
  370 +}
  371 +
  372 +static void oversize_changed(GtkEditable *editable, GtkWidget *settings) {
  373 + update_valid(GTK_V3270HostSelectWidget(settings), oversize_validate(editable));
342 374 }
343 375  
344 376 static void remap_file_changed(GtkEditable *editable, V3270HostSelectWidget *settings)
... ... @@ -454,24 +486,6 @@ static void V3270HostSelectWidget_init(V3270HostSelectWidget *widget)
454 486 {
455 487 v3270_settings_create_entry_fields(entryfields, G_N_ELEMENTS(entryfields), grids, widget->input.entry);
456 488  
457   - /*
458   - size_t entry;
459   -
460   - for(entry = 0; entry < G_N_ELEMENTS(entryfields); entry++)
461   - {
462   - widget->input.entry[entry] = GTK_ENTRY(gtk_entry_new());
463   - gtk_entry_set_max_length(widget->input.entry[entry],entryfields[entry].max_length);
464   - gtk_entry_set_width_chars(widget->input.entry[entry],entryfields[entry].width_chars);
465   -
466   - v3270_grid_attach(
467   - GTK_GRID(grids[entryfields[entry].grid]),
468   - (struct v3270_entry_field *) & entryfields[entry],
469   - GTK_WIDGET(widget->input.entry[entry])
470   - );
471   -
472   - }
473   - */
474   -
475 489 // Custom settings
476 490 gtk_entry_set_placeholder_text(widget->input.entry[ENTRY_SRVCNAME],"telnet");
477 491  
... ... @@ -486,6 +500,8 @@ static void V3270HostSelectWidget_init(V3270HostSelectWidget *widget)
486 500 g_signal_connect(G_OBJECT(widget->input.entry[ENTRY_REMAP_FILE]),"changed",G_CALLBACK(remap_file_changed),widget);
487 501  
488 502 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);
489 505  
490 506 }
491 507  
... ... @@ -607,38 +623,6 @@ static void V3270HostSelectWidget_init(V3270HostSelectWidget *widget)
607 623  
608 624 }
609 625  
610   -
611   - /*
612   - // Create combo boxes
613   - {
614   - size_t combo, item;
615   -
616   - for(combo = 0; combo < G_N_ELEMENTS(combos); combo++) {
617   -
618   -
619   - widget->input.combos[combo] = GTK_COMBO_BOX(gtk_combo_box_new_with_model(model));
620   -
621   - if(combos[combo].tooltip)
622   - gtk_widget_set_tooltip_markup(GTK_WIDGET(widget->input.combos[combo]),combos[combo].tooltip);
623   -
624   - gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(widget->input.combos[combo]), text_renderer, TRUE);
625   - gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(widget->input.combos[combo]), text_renderer, "text", 0, NULL);
626   -
627   - for(item = 0; combos[combo].labels[item]; item++)
628   - {
629   - GtkTreeIter iter;
630   - gtk_list_store_append((GtkListStore *) model, &iter);
631   - gtk_list_store_set((GtkListStore *) model, &iter, 0, g_dgettext(GETTEXT_PACKAGE, combos[combo].labels[item]), 1, combos[combo].values[item], -1);
632   - }
633   -
634   - v3270_grid_attach(GTK_GRID(grids[EMULATION]), (struct v3270_entry_field *) & combos[combo], GTK_WIDGET(widget->input.combos[combo]));
635   -
636   - }
637   -
638   - }
639   -
640   - */
641   -
642 626 gtk_widget_show_all(GTK_WIDGET(widget));
643 627  
644 628 }
... ... @@ -908,5 +892,7 @@ static void load(GtkWidget *w, GtkWidget *terminal)
908 892 // Load unlock delay
909 893 gtk_spin_button_set_value(widget->input.unlock_delay, lib3270_get_unlock_delay(hSession));
910 894  
  895 + update_valid(widget,TRUE);
  896 +
911 897 }
912 898  
... ...
src/include/hostselect.h
... ... @@ -45,7 +45,7 @@
45 45  
46 46 G_BEGIN_DECLS
47 47  
48   -/*--[ Progress widget ]------------------------------------------------------------------------------*/
  48 +/*--[ Host selection dialog ]------------------------------------------------------------------------*/
49 49  
50 50 #define GTK_TYPE_V3270HostSelectWidget (V3270HostSelectWidget_get_type ())
51 51 #define GTK_V3270HostSelectWidget(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_V3270HostSelectWidget, V3270HostSelectWidget))
... ...