window: properly ignore all non-printable char codes (ctrl-?, F?, etc.)

This commit is contained in:
Andrzej Rybczak
2012-07-16 01:52:42 +02:00
parent 7b8a286c49
commit 6313139566

View File

@@ -497,14 +497,6 @@ std::string Window::GetString(const std::string &base, size_t length, size_t wid
prefresh(itsWindow, 0, 0, itsStartY, itsStartX, itsStartY+itsHeight-1, itsStartX+itsWidth-1); prefresh(itsWindow, 0, 0, itsStartY, itsStartX, itsStartY+itsHeight-1, itsStartX+itsWidth-1);
ReadKey(input); ReadKey(input);
// these key codes are special and should be ignored
if (input >= KEY_CTRL_A
&& input != KEY_CTRL_H
&& input != KEY_ENTER
&& input != KEY_CTRL_U
&& input <= KEY_CTRL_Z)
continue;
switch (input) switch (input)
{ {
case ERR: case ERR:
@@ -599,9 +591,12 @@ std::string Window::GetString(const std::string &base, size_t length, size_t wid
if (int(mbrtowc(&wc_in, tmp_in.c_str(), MB_CUR_MAX, 0)) < 0) if (int(mbrtowc(&wc_in, tmp_in.c_str(), MB_CUR_MAX, 0)) < 0)
break; break;
if (wcwidth(wc_in) > 1) int wcwidth_res = wcwidth(wc_in);
if (wcwidth_res > 1)
block_scrolling = 1; block_scrolling = 1;
if (wcwidth_res > 0) // is char printable? we want to ignore things like Ctrl-?, Fx etc.
{
if ((real_x-minx)+beginning >= tmp->length()) if ((real_x-minx)+beginning >= tmp->length())
{ {
tmp->push_back(wc_in); tmp->push_back(wc_in);
@@ -624,6 +619,7 @@ std::string Window::GetString(const std::string &base, size_t length, size_t wid
else if (beginning < maxbeginning) else if (beginning < maxbeginning)
beginning++; beginning++;
} }
}
tmp_in.clear(); tmp_in.clear();
} }
} }