mirror of
https://github.com/telegramdesktop/tdesktop
synced 2025-02-22 08:16:56 +00:00
Don't start animations from QEvent::Enter.
The enter/leave events may be sent from ~QWidget() and if we start animating something with grabbing of widgets it crashes sometimes.
This commit is contained in:
parent
03775e0cc5
commit
2eb64e051b
@ -68,6 +68,7 @@ private:
|
||||
const Fn<void(bool)> _menuOverCallback;
|
||||
base::unique_qptr<Ui::DropdownMenu> _menu;
|
||||
bool _temporarilyHidden = false;
|
||||
bool _overButton = false;
|
||||
|
||||
};
|
||||
|
||||
@ -120,9 +121,17 @@ WithDropdownController::WithDropdownController(
|
||||
, _menuOverCallback(std::move(menuOverCallback)) {
|
||||
button->events(
|
||||
) | rpl::filter([=](not_null<QEvent*> e) {
|
||||
return (e->type() == QEvent::Enter);
|
||||
}) | rpl::start_with_next([=] {
|
||||
showMenu();
|
||||
return (e->type() == QEvent::Enter)
|
||||
|| (e->type() == QEvent::Leave);
|
||||
}) | rpl::start_with_next([=](not_null<QEvent*> e) {
|
||||
_overButton = (e->type() == QEvent::Enter);
|
||||
if (_overButton) {
|
||||
InvokeQueued(button, [=] {
|
||||
if (_overButton) {
|
||||
showMenu();
|
||||
}
|
||||
});
|
||||
}
|
||||
}, button->lifetime());
|
||||
}
|
||||
|
||||
@ -740,7 +749,9 @@ void Widget::markOver(bool over) {
|
||||
if (over) {
|
||||
_over = true;
|
||||
_wontBeOver = false;
|
||||
updateControlsWrapVisibility();
|
||||
InvokeQueued(this, [=] {
|
||||
updateControlsWrapVisibility();
|
||||
});
|
||||
} else {
|
||||
_wontBeOver = true;
|
||||
InvokeQueued(this, [=] {
|
||||
|
Loading…
Reference in New Issue
Block a user