forked from quickshell/quickshell
core/proxywindow: remove blank frame when destroying window
Removes the blank frame caused by removing the content item from the window. Fixes an issue with hyprland's window exit animations.
This commit is contained in:
parent
2c0e46cedb
commit
0dd19d4a18
2 changed files with 9 additions and 7 deletions
|
@ -44,7 +44,7 @@ ProxyWindowBase::ProxyWindowBase(QObject* parent)
|
|||
// clang-format on
|
||||
}
|
||||
|
||||
ProxyWindowBase::~ProxyWindowBase() { this->deleteWindow(); }
|
||||
ProxyWindowBase::~ProxyWindowBase() { this->deleteWindow(true); }
|
||||
|
||||
void ProxyWindowBase::onReload(QObject* oldInstance) {
|
||||
this->window = this->retrieveWindow(oldInstance);
|
||||
|
@ -90,9 +90,9 @@ void ProxyWindowBase::createWindow() {
|
|||
emit this->windowConnected();
|
||||
}
|
||||
|
||||
void ProxyWindowBase::deleteWindow() {
|
||||
void ProxyWindowBase::deleteWindow(bool keepItemOwnership) {
|
||||
if (this->window != nullptr) emit this->windowDestroyed();
|
||||
if (auto* window = this->disownWindow()) {
|
||||
if (auto* window = this->disownWindow(keepItemOwnership)) {
|
||||
if (auto* generation = EngineGeneration::findObjectGeneration(this)) {
|
||||
generation->deregisterIncubationController(window->incubationController());
|
||||
}
|
||||
|
@ -101,12 +101,14 @@ void ProxyWindowBase::deleteWindow() {
|
|||
}
|
||||
}
|
||||
|
||||
QQuickWindow* ProxyWindowBase::disownWindow() {
|
||||
QQuickWindow* ProxyWindowBase::disownWindow(bool keepItemOwnership) {
|
||||
if (this->window == nullptr) return nullptr;
|
||||
|
||||
QObject::disconnect(this->window, nullptr, this, nullptr);
|
||||
|
||||
this->mContentItem->setParentItem(nullptr);
|
||||
if (!keepItemOwnership) {
|
||||
this->mContentItem->setParentItem(nullptr);
|
||||
}
|
||||
|
||||
auto* window = this->window;
|
||||
this->window = nullptr;
|
||||
|
|
|
@ -57,10 +57,10 @@ public:
|
|||
|
||||
void onReload(QObject* oldInstance) override;
|
||||
void createWindow();
|
||||
void deleteWindow();
|
||||
void deleteWindow(bool keepItemOwnership = false);
|
||||
|
||||
// Disown the backing window and delete all its children.
|
||||
virtual QQuickWindow* disownWindow();
|
||||
virtual QQuickWindow* disownWindow(bool keepItemOwnership = false);
|
||||
|
||||
virtual QQuickWindow* retrieveWindow(QObject* oldInstance);
|
||||
virtual QQuickWindow* createQQuickWindow();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue