Changeset View
Changeset View
Standalone View
Standalone View
layers.cpp
Show First 20 Lines • Show All 307 Lines • ▼ Show 20 Line(s) | 303 | { | |||
---|---|---|---|---|---|
308 | 308 | | |||
309 | StackingUpdatesBlocker blocker(this); | 309 | StackingUpdatesBlocker blocker(this); | ||
310 | 310 | | |||
311 | unconstrained_stacking_order.removeAll(c); | 311 | unconstrained_stacking_order.removeAll(c); | ||
312 | unconstrained_stacking_order.prepend(c); | 312 | unconstrained_stacking_order.prepend(c); | ||
313 | if (!nogroup && c->isTransient()) { | 313 | if (!nogroup && c->isTransient()) { | ||
314 | // lower also all windows in the group, in their reversed stacking order | 314 | // lower also all windows in the group, in their reversed stacking order | ||
315 | ClientList wins; | 315 | ClientList wins; | ||
316 | if (Client *client = dynamic_cast<Client*>(c)) { | 316 | if (auto group = c->group()) { | ||
317 | wins = ensureStackingOrder(client->group()->members()); | 317 | wins = ensureStackingOrder(group->members()); | ||
318 | } | 318 | } | ||
319 | for (int i = wins.size() - 1; | 319 | for (int i = wins.size() - 1; | ||
320 | i >= 0; | 320 | i >= 0; | ||
321 | --i) { | 321 | --i) { | ||
322 | if (wins[ i ] != c) | 322 | if (wins[ i ] != c) | ||
323 | lowerClient(wins[ i ], true); | 323 | lowerClient(wins[ i ], true); | ||
324 | } | 324 | } | ||
325 | } | 325 | } | ||
▲ Show 20 Lines • Show All 341 Lines • ▼ Show 20 Line(s) | |||||
667 | { | 667 | { | ||
668 | // #93832 - don't keep splashscreens above dialogs | 668 | // #93832 - don't keep splashscreens above dialogs | ||
669 | if (transient->isSplash() && mainwindow->isDialog()) | 669 | if (transient->isSplash() && mainwindow->isDialog()) | ||
670 | return false; | 670 | return false; | ||
671 | // This is rather a hack for #76026. Don't keep non-modal dialogs above | 671 | // This is rather a hack for #76026. Don't keep non-modal dialogs above | ||
672 | // the mainwindow, but only if they're group transient (since only such dialogs | 672 | // the mainwindow, but only if they're group transient (since only such dialogs | ||
673 | // have taskbar entry in Kicker). A proper way of doing this (both kwin and kicker) | 673 | // have taskbar entry in Kicker). A proper way of doing this (both kwin and kicker) | ||
674 | // needs to be found. | 674 | // needs to be found. | ||
675 | if (const Client *ct = dynamic_cast<const Client*>(transient)) { | 675 | if (transient->isDialog() && !transient->isModal() && transient->groupTransient()) | ||
676 | if (ct->isDialog() && !ct->isModal() && ct->groupTransient()) | | |||
677 | return false; | 676 | return false; | ||
678 | } | | |||
679 | // #63223 - don't keep transients above docks, because the dock is kept high, | 677 | // #63223 - don't keep transients above docks, because the dock is kept high, | ||
680 | // and e.g. dialogs for them would be too high too | 678 | // and e.g. dialogs for them would be too high too | ||
681 | // ignore this if the transient has a placement hint which indicates it should go above it's parent | 679 | // ignore this if the transient has a placement hint which indicates it should go above it's parent | ||
682 | if (mainwindow->isDock() && !transient->hasTransientPlacementHint()) | 680 | if (mainwindow->isDock() && !transient->hasTransientPlacementHint()) | ||
683 | return false; | 681 | return false; | ||
684 | return true; | 682 | return true; | ||
685 | } | 683 | } | ||
686 | 684 | | |||
▲ Show 20 Lines • Show All 185 Lines • Show Last 20 Lines |