window: properly ignore all non-printable char codes (ctrl-?, F?, etc.)
This commit is contained in:
@@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user