diff --git a/include/maskfld.cpp b/include/maskfld.cpp index 25940b49e..47ff697e3 100755 --- a/include/maskfld.cpp +++ b/include/maskfld.cpp @@ -2254,7 +2254,7 @@ bool TEdit_field::on_hit() bool ok = _handler(*this, is_edit() ? K_TAB : K_SPACE); if (!ok) return FALSE; } - if (_message.objptr(1) && get() == "") do_message(1); + if (_message.objptr(1) && get().empty()) do_message(1); else do_message(0); return TRUE; } @@ -2281,6 +2281,23 @@ bool TEdit_field::default_error_box() const return FALSE; } + +HIDDEN void test_key_complete(const TMask_field& f) +{ + TMask& m = f.mask(); + const byte keys = m.num_keys(); + for (int i = 1; i <= keys; i++) + { + if (f.in_key(i) && m.key_valid(i)) + { + for (int fld = m.get_key_field(i, TRUE); fld != -1; fld = m.get_key_field(i, FALSE)) + m.field(fld).set_dirty(FALSE); + m.stop_run(K_AUTO_ENTER); + break; + } + } +} + bool TEdit_field::on_key(KEY key) { switch(key) @@ -2317,18 +2334,8 @@ bool TEdit_field::on_key(KEY key) if (!ok) return FALSE; if (query && required() && in_key(0)) - { - const byte keys = m.num_keys(); + test_key_complete(*this); - for (int i = 1; i <= keys; i++) - if (in_key(i) && m.key_valid(i)) - { - for (int fld = m.get_key_field(i, TRUE); fld != -1; fld = m.get_key_field(i, FALSE)) - m.field(fld).set_dirty(FALSE); - mask().stop_run(K_AUTO_ENTER); - break; - } - } return TRUE; } break; @@ -2378,21 +2385,23 @@ bool TEdit_field::on_key(KEY key) else beep(); if (k != K_F9) set_focus(); enable_check(TRUE); + if (k == K_ENTER) { -/* - set_dirty(); - if (mask().is_running()) - send_key(K_TAB, 0); - else - on_hit(); -*/ set_dirty(); on_hit(); + if (mask().is_running()) - { - set_focusdirty(FALSE); - send_key(K_TAB, 0); + { + if (mask().query_mode() && required() && in_key(0)) + { + test_key_complete(*this); // Controlla autopremimento + } + else + { + set_focusdirty(FALSE); // Evita doppia esecuzione handlers! + send_key(K_TAB, 0); // Passa al campo successivo + } } return TRUE; }