Button: invoke on_click at the end. (#807)

Some users might destroy `this`, which would result in UAF.

In the future, we should consider alternatives like posting a task to
the main loop, or rely on users for this.

Fixed:https://github.com/ArthurSonzogni/FTXUI/issues/804
This commit is contained in:
Arthur Sonzogni 2024-01-10 22:08:57 +01:00 committed by GitHub
parent 91a162a30e
commit 5112d9139d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -98,10 +98,13 @@ class ButtonBase : public ComponentBase, public ButtonOption {
}
void OnClick() {
on_click();
animation_background_ = 0.5F; // NOLINT
animation_foreground_ = 0.5F; // NOLINT
SetAnimationTarget(1.F); // NOLINT
// TODO(arthursonzogni): Consider posting the task to the main loop, instead
// of invoking it immediately.
on_click(); // May delete this.
}
bool OnEvent(Event event) override {
@ -110,7 +113,7 @@ class ButtonBase : public ComponentBase, public ButtonOption {
}
if (event == Event::Return) {
OnClick();
OnClick(); // May delete this.
return true;
}
return false;
@ -127,7 +130,7 @@ class ButtonBase : public ComponentBase, public ButtonOption {
if (event.mouse().button == Mouse::Left &&
event.mouse().motion == Mouse::Pressed) {
TakeFocus();
OnClick();
OnClick(); // May delete this.
return true;
}