core/popupwindow: wait for polish to reposition

This commit is contained in:
outfoxxed 2025-05-29 16:15:25 -07:00
parent b67f92bc13
commit adcef7fc30
Signed by: outfoxxed
GPG key ID: 4C88A185FB89301E
2 changed files with 17 additions and 2 deletions

View file

@ -126,7 +126,20 @@ qint32 ProxyPopupWindow::relativeY() const {
PopupAnchor* ProxyPopupWindow::anchor() { return &this->mAnchor; }
void ProxyPopupWindow::reposition() {
if (this->window != nullptr) {
PopupPositioner::instance()->reposition(&this->mAnchor, this->window);
// not gated on pendingReposition as a polish might not be triggered in edge cases
if (this->window) {
this->pendingReposition = true;
this->schedulePolish();
}
}
void ProxyPopupWindow::onPolished() {
this->ProxyWindowBase::onPolished();
if (this->pendingReposition) {
this->pendingReposition = false;
if (this->window) {
PopupPositioner::instance()->reposition(&this->mAnchor, this->window);
}
}
}

View file

@ -87,6 +87,7 @@ public:
void completeWindow() override;
void postCompleteWindow() override;
void onPolished() override;
void setScreen(QuickshellScreenInfo* screen) override;
void setVisible(bool visible) override;
@ -119,4 +120,5 @@ private:
PopupAnchor mAnchor {this};
bool wantsVisible = false;
bool pendingReposition = false;
};