Add closed window checks in restacking requests
If a closed window is restacked, it will be reintroduced to the stack and it will be left dangling, which will eventually result in a crash.
This commit is contained in:
parent
07a6b500c8
commit
b42919e875
1 changed files with 20 additions and 0 deletions
|
@ -293,6 +293,10 @@ void Workspace::lowerWindow(Window *window, bool nogroup)
|
||||||
if (!window) {
|
if (!window) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (window->isDeleted()) {
|
||||||
|
qCWarning(KWIN_CORE) << "Workspace::lowerWindow: closed window" << window << "cannot be restacked";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
window->cancelAutoRaise();
|
window->cancelAutoRaise();
|
||||||
|
|
||||||
|
@ -319,6 +323,10 @@ void Workspace::lowerWindowWithinApplication(Window *window)
|
||||||
if (!window) {
|
if (!window) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (window->isDeleted()) {
|
||||||
|
qCWarning(KWIN_CORE) << "Workspace::lowerWindowWithinApplication: closed window" << window << "cannot be restacked";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
window->cancelAutoRaise();
|
window->cancelAutoRaise();
|
||||||
|
|
||||||
|
@ -349,6 +357,10 @@ void Workspace::raiseWindow(Window *window, bool nogroup)
|
||||||
if (!window) {
|
if (!window) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (window->isDeleted()) {
|
||||||
|
qCWarning(KWIN_CORE) << "Workspace::raiseWindow: closed window" << window << "cannot be restacked";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
window->cancelAutoRaise();
|
window->cancelAutoRaise();
|
||||||
|
|
||||||
|
@ -374,6 +386,10 @@ void Workspace::raiseWindowWithinApplication(Window *window)
|
||||||
if (!window) {
|
if (!window) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (window->isDeleted()) {
|
||||||
|
qCWarning(KWIN_CORE) << "Workspace::raiseWindowWithinApplication: closed window" << window << "cannot be restacked";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
window->cancelAutoRaise();
|
window->cancelAutoRaise();
|
||||||
|
|
||||||
|
@ -427,6 +443,10 @@ void Workspace::lowerWindowRequest(Window *window)
|
||||||
|
|
||||||
void Workspace::restack(Window *window, Window *under, bool force)
|
void Workspace::restack(Window *window, Window *under, bool force)
|
||||||
{
|
{
|
||||||
|
if (window->isDeleted()) {
|
||||||
|
qCWarning(KWIN_CORE) << "Workspace::restack: closed window" << window << "cannot be restacked";
|
||||||
|
return;
|
||||||
|
}
|
||||||
Q_ASSERT(unconstrained_stacking_order.contains(under));
|
Q_ASSERT(unconstrained_stacking_order.contains(under));
|
||||||
if (!force && !Window::belongToSameApplication(under, window)) {
|
if (!force && !Window::belongToSameApplication(under, window)) {
|
||||||
// put in the stacking order below _all_ windows belonging to the active application
|
// put in the stacking order below _all_ windows belonging to the active application
|
||||||
|
|
Loading…
Reference in a new issue