This rectifies a problem where a program reacts to a key press event by
focusing an Entry, which then receives the associated character event.
first_row(0),
visible_rows(1),
text_part(0),
- slider(0)
+ slider(0),
+ got_key_press(false)
{
set_text(t);
}
void Entry::key_press(unsigned key, unsigned)
{
+ got_key_press = true;
if(key==Input::KEY_LEFT)
{
if(edit_pos>0)
void Entry::character(wchar_t ch)
{
- if(ch>=' ')
+ if(got_key_press && ch>=' ')
{
text.insert(edit_pos, StringCodec::encode<StringCodec::Utf8>(StringCodec::ustring(1, ch)));
++edit_pos;
}
}
+void Entry::focus_out()
+{
+ Widget::focus_out();
+ got_key_press = false;
+}
+
void Entry::on_geometry_change()
{
reposition_slider();
unsigned visible_rows;
const Part *text_part;
VSlider *slider;
+ bool got_key_press;
public:
Entry(const std::string & = std::string());
public:
virtual void key_press(unsigned, unsigned);
virtual void character(wchar_t);
+ virtual void focus_out();
private:
virtual void on_geometry_change();
virtual void on_style_change();