LibCore+LibGUI+WindowServer: Make events bubble up through ancestors

With this patch, CEvents no longer stop at the target object, but will
bubble up the ancestor chain as long as CEvent::is_accepted() is false.

To the set accepted flag, call CEvent::accept().
To clear the accepted flag, call CEvent::ignore().

Events start out in the accepted state, so if you want them to bubble
up, you have to call ignore() on them.

Using this mechanism, we now ignore non-tabbing keydown events in
GWidget, causing them to bubble up through the widget's ancestors. :^)
This commit is contained in:
Andreas Kling 2019-09-20 20:37:31 +02:00
parent 74c4e62659
commit fcc3745b02
Notes: sideshowbarker 2024-07-19 12:02:50 +09:00
9 changed files with 54 additions and 17 deletions

View file

@ -134,8 +134,11 @@ void GAbstractButton::leave_event(CEvent&)
void GAbstractButton::keydown_event(GKeyEvent& event)
{
if (event.key() == KeyCode::Key_Return)
if (event.key() == KeyCode::Key_Return) {
click();
event.accept();
return;
}
GWidget::keydown_event(event);
}