diff --git a/form/fld_current.c b/form/fld_current.c index ef9ec00..a3ca9e9 100644 --- a/form/fld_current.c +++ b/form/fld_current.c @@ -53,11 +53,11 @@ set_current_field(FORM *form, FIELD *field) int err = E_OK; T((T_CALLED("set_current_field(%p,%p)"), (void *)form, (void *)field)); - if (form == 0 || field == 0) + if (form == 0) { RETURN(E_BAD_ARGUMENT); } - else if ((form != field->form) || Field_Is_Not_Selectable(field)) + else if (field && ((form != field->form) || Field_Is_Not_Selectable(field))) { RETURN(E_REQUEST_DENIED); } @@ -76,14 +76,14 @@ set_current_field(FORM *form, FIELD *field) { if (form->current != field) { - if (!_nc_Internal_Validation(form)) + if (form->current && !_nc_Internal_Validation(form)) { err = E_INVALID_FIELD; } else { Call_Hook(form, fieldterm); - if (field->page != form->curpage) + if (field && field->page != form->curpage) { Call_Hook(form, formterm); err = _nc_Set_Form_Page(form, (int)field->page, field); diff --git a/form/frm_driver.c b/form/frm_driver.c index f78a45e..406b5d8 100644 --- a/form/frm_driver.c +++ b/form/frm_driver.c @@ -1415,7 +1415,7 @@ _nc_Set_Current_Field(FORM *form, FIELD *newfield) T((T_CALLED("_nc_Set_Current_Field(%p,%p)"), (void *)form, (void *)newfield)); - if (!form || !newfield || !form->current || (newfield->form != form)) + if (!form || newfield && (newfield->form != form)) returnCode(E_BAD_ARGUMENT); if ((form->status & _IN_DRIVER)) @@ -1429,7 +1429,7 @@ _nc_Set_Current_Field(FORM *form, FIELD *newfield) if ((field != newfield) || !(form->status & _POSTED)) { - if ((form->w) && + if (field && (form->w) && (Field_Has_Option(field, O_VISIBLE)) && (field->form->curpage == field->page)) { @@ -1475,6 +1475,10 @@ _nc_Set_Current_Field(FORM *form, FIELD *newfield) form->w = (WINDOW *)0; } + if (!newfield) + { form->current = 0; + returnCode(E_OK); + } field = newfield; if (Has_Invisible_Parts(field))