Я создал подкласс FL_Value_Input
таким образом, чтобы я мог задать виджету цвет при его изменении, но пользователь еще не нажал клавишу ввода.
Глупость заключается в том, что функция handle(int e)
никогда не вызывается, если событие является событием FL_KEYDOWN
, другие события (такие как FL_KEYUP
, FL_DRAG
, FL_FOCUS
и т. д.) распространяются нормально.
Виджет является частью иерархии виджетов... Может быть, один из его родителей в этой иерархии поглощает это конкретное событие FL_KEYDOWN
?
РЕДАКТИРОВАТЬ: по-видимому, виджет также не имеет фокуса (проверено путем сравнения this
с Fl::focus()
), что странно, поскольку я ввожу его.
Любая помощь будет оценена по достоинству.
Fx_Value_Input::Fx_Value_Input(int x, int y, int w, int h, const char* l)
: Fl_Value_Input(x, y, w, h, l)
{}
int Fx_Value_Input::handle(int e)
{
int r = Fl_Value_Input::handle(e);
if (e == FL_KEYBOARD)
{
if ((Fl::event_key() != FL_Enter && Fl::event_key() != FL_KP_Enter ) )
color(Fx::get_modified_color());
else if ((Fl::event_key() == FL_Enter || Fl::event_key() == FL_KP_Enter) && color() == Fx::get_modified_color())
color(FL_WHITE);
redraw();
}
return r;
}