Remove "topmost" boolean trap in Workspace::findDesktop()

CCBUG: 494332
wilder/Plasma/6.3
Vlad Zahorodnii 1 year ago
parent 47a2a2e12a
commit 1d1b1adf80
  1. 6
      src/activation.cpp
  2. 25
      src/layers.cpp
  3. 10
      src/workspace.cpp
  4. 2
      src/workspace.h

@ -493,7 +493,7 @@ bool Workspace::activateNextWindow(Window *window)
Output *output = window ? window->output() : workspace()->activeOutput();
if (!focusCandidate && showingDesktop()) {
focusCandidate = findDesktop(true, desktop, output); // to not break the state
focusCandidate = findDesktop(desktop, output); // to not break the state
}
if (!focusCandidate && options->isNextFocusPrefersMouse()) {
@ -520,7 +520,7 @@ bool Workspace::activateNextWindow(Window *window)
}
if (focusCandidate == nullptr) { // last chance: focus the desktop
focusCandidate = findDesktop(true, desktop, output);
focusCandidate = findDesktop(desktop, output);
}
if (focusCandidate != nullptr) {
@ -541,7 +541,7 @@ void Workspace::switchToOutput(Output *output)
VirtualDesktop *desktop = VirtualDesktopManager::self()->currentDesktop();
Window *get_focus = m_focusChain->getForActivation(desktop, output);
if (get_focus == nullptr) {
get_focus = findDesktop(true, desktop, output);
get_focus = findDesktop(desktop, output);
}
if (get_focus != nullptr && get_focus != mostRecentlyActivatedWindow()) {
requestFocus(get_focus);

@ -256,27 +256,16 @@ Window *Workspace::topWindowOnDesktop(VirtualDesktop *desktop, Output *output, b
return nullptr;
}
Window *Workspace::findDesktop(bool topmost, VirtualDesktop *desktop, Output *output) const
Window *Workspace::findDesktop(VirtualDesktop *desktop, Output *output) const
{
// TODO Q_ASSERT( block_stacking_updates == 0 );
if (topmost) {
for (int i = stacking_order.size() - 1; i >= 0; i--) {
auto window = stacking_order.at(i);
if (window->isDeleted()) {
continue;
}
if (window->isClient() && window->isOnDesktop(desktop) && window->isOnOutput(output) && window->isDesktop() && window->isShown()) {
return window;
}
for (int i = stacking_order.size() - 1; i >= 0; i--) {
auto window = stacking_order.at(i);
if (window->isDeleted()) {
continue;
}
} else { // bottom-most
for (Window *window : std::as_const(stacking_order)) {
if (window->isDeleted()) {
continue;
}
if (window->isClient() && window->isOnDesktop(desktop) && window->isOnOutput(output) && window->isDesktop() && window->isShown()) {
return window;
}
if (window->isClient() && window->isOnDesktop(desktop) && window->isOnOutput(output) && window->isDesktop() && window->isShown()) {
return window;
}
}
return nullptr;

@ -410,7 +410,7 @@ void Workspace::initializeX11()
newActiveWindow = topWindowOnDesktop(VirtualDesktopManager::self()->currentDesktop());
}
if (newActiveWindow == nullptr) {
newActiveWindow = findDesktop(true, VirtualDesktopManager::self()->currentDesktop(), activeOutput());
newActiveWindow = findDesktop(VirtualDesktopManager::self()->currentDesktop(), activeOutput());
}
}
if (newActiveWindow != nullptr) {
@ -730,7 +730,7 @@ void Workspace::addX11Window(X11Window *window)
raiseWindow(window);
// If there's no active window, make this desktop the active one
if (activeWindow() == nullptr && should_get_focus.count() == 0) {
activateWindow(findDesktop(true, VirtualDesktopManager::self()->currentDesktop(), window->output()));
activateWindow(findDesktop(VirtualDesktopManager::self()->currentDesktop(), window->output()));
}
}
window->checkActiveModal();
@ -995,7 +995,7 @@ void Workspace::activateWindowOnDesktop(VirtualDesktop *desktop)
}
if (!window) {
window = findDesktop(true, desktop, activeOutput());
window = findDesktop(desktop, activeOutput());
}
if (window != m_activeWindow) {
@ -1111,7 +1111,7 @@ void Workspace::updateCurrentActivity(const QString &new_activity)
}
if (!window) {
window = findDesktop(true, VirtualDesktopManager::self()->currentDesktop(), activeOutput());
window = findDesktop(VirtualDesktopManager::self()->currentDesktop(), activeOutput());
}
if (window != m_activeWindow) {
@ -1578,7 +1578,7 @@ void Workspace::setShowingDesktop(bool showing, bool animated)
}
if (showing_desktop) {
Window *desktop = findDesktop(true, VirtualDesktopManager::self()->currentDesktop(), activeOutput());
Window *desktop = findDesktop(VirtualDesktopManager::self()->currentDesktop(), activeOutput());
if (desktop) {
requestFocus(desktop);
}

@ -310,7 +310,7 @@ public:
Window *topWindowOnDesktop(VirtualDesktop *desktop, Output *output = nullptr, bool unconstrained = false,
bool only_normal = true) const;
Window *findDesktop(bool topmost, VirtualDesktop *desktop, Output *output) const;
Window *findDesktop(VirtualDesktop *desktop, Output *output) const;
void addWindowToDesktop(Window *window, VirtualDesktop *desktop);
void removeWindowFromDesktop(Window *window, VirtualDesktop *desktop);
void sendWindowToDesktops(Window *window, const QList<VirtualDesktop *> &desktops, bool dont_activate);

Loading…
Cancel
Save