diff --git a/CHANGELOG.md b/CHANGELOG.md index 6183969dda1..7d4c7ffcc28 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -32,6 +32,7 @@ - Bugfix: Fixed a crash when tab completing while having an invalid plugin loaded. (#5401) - Bugfix: Fixed windows on Windows not saving correctly when snapping them to the edges. (#5478) - Bugfix: Fixed user info card popups adding duplicate line to log files. (#5499) +- Bugfix: Fixed tooltips and input completion popups not working after moving a split. (#5541) - Bugfix: Fixed `/clearmessages` not working with more than one window. (#5489) - Bugfix: Fixed splits staying paused after unfocusing Chatterino in certain configurations. (#5504) - Bugfix: Links with invalid characters in the domain are no longer detected. (#5509) diff --git a/src/widgets/BaseWindow.cpp b/src/widgets/BaseWindow.cpp index 12e87ff73e1..7d24a85d4dd 100644 --- a/src/widgets/BaseWindow.cpp +++ b/src/widgets/BaseWindow.cpp @@ -17,6 +17,7 @@ #include #include #include +#include #include @@ -503,6 +504,24 @@ bool BaseWindow::event(QEvent *event) this->onFocusLost(); } +#if QT_VERSION >= QT_VERSION_CHECK(6, 7, 0) + if (this->flags_.has(DontFocus) || this->flags_.has(Dialog)) + { + // This certain windows (e.g. TooltipWidget, input completion widget, and the search popup) retains their nullptr parent + // NOTE that this currently does not retain their original transient parent (which is the window it was created under) + // For now, we haven't noticed that this creates any issues, and I don't know of a good place to store the previous transient + // parent to restore it. + if (event->type() == QEvent::ParentWindowChange) + { + assert(this->windowHandle() != nullptr); + if (this->windowHandle()->parent() != nullptr) + { + this->windowHandle()->setParent(nullptr); + } + } + } +#endif + return QWidget::event(event); }