From b3e9c819537cf292d9b1c4d19c5ce7adde00158e Mon Sep 17 00:00:00 2001 From: Nate Graham Date: Tue, 20 Oct 2020 14:15:46 -0600 Subject: [PATCH] [focuschain/task switcher] Add hidden option to govern repositioning minimized windows Since some people apparently liked the old behavior of moving minimized windows to the end of the focus chain, let's let them have it if they set a hidden config option: `MoveMinimizedWindowsToEndOfTabBoxFocusChain=true` in the `[TabBox]` group of the kwinrc file. We can add a UI for it later if needed. BUG: 427840 FIXED-IN: 5.21 --- abstract_client.cpp | 6 +++++- focuschain.cpp | 16 ++++++++++------ kwin.kcfg | 3 +++ options.cpp | 11 +++++++++++ options.h | 6 ++++++ 5 files changed, 35 insertions(+), 7 deletions(-) diff --git a/abstract_client.cpp b/abstract_client.cpp index e44da4725..01f3081f8 100644 --- a/abstract_client.cpp +++ b/abstract_client.cpp @@ -703,7 +703,11 @@ void AbstractClient::minimize(bool avoid_animation) doMinimize(); updateWindowRules(Rules::Minimize); - FocusChain::self()->update(this, FocusChain::MakeFirstMinimized); + + if (options->moveMinimizedWindowsToEndOfTabBoxFocusChain()) { + FocusChain::self()->update(this, FocusChain::MakeFirstMinimized); + } + // TODO: merge signal with s_minimized addWorkspaceRepaint(visibleRect()); emit clientMinimized(this, !avoid_animation); diff --git a/focuschain.cpp b/focuschain.cpp index a68e6d3c6..347df3066 100644 --- a/focuschain.cpp +++ b/focuschain.cpp @@ -227,14 +227,18 @@ AbstractClient *FocusChain::nextForDesktop(AbstractClient *reference, uint deskt void FocusChain::makeFirstInChain(AbstractClient *client, Chain &chain) { chain.removeAll(client); - if (client->isMinimized()) { // add it before the first minimized ... - for (int i = chain.count()-1; i >= 0; --i) { - if (chain.at(i)->isMinimized()) { - chain.insert(i+1, client); - return; + if (options->moveMinimizedWindowsToEndOfTabBoxFocusChain()) { + if (client->isMinimized()) { // add it before the first minimized ... + for (int i = chain.count()-1; i >= 0; --i) { + if (chain.at(i)->isMinimized()) { + chain.insert(i+1, client); + return; + } } + chain.prepend(client); // ... or at end of chain + } else { + chain.append(client); } - chain.prepend(client); // ... or at end of chain } else { chain.append(client); } diff --git a/kwin.kcfg b/kwin.kcfg index 0b59606e3..2b06efe52 100644 --- a/kwin.kcfg +++ b/kwin.kcfg @@ -295,6 +295,9 @@ thumbnails + + false + diff --git a/options.cpp b/options.cpp index 4bce7ee39..8014f8b78 100644 --- a/options.cpp +++ b/options.cpp @@ -111,6 +111,7 @@ Options::Options(QObject *parent) , m_glPreferBufferSwap(Options::defaultGlPreferBufferSwap()) , m_glPlatformInterface(Options::defaultGlPlatformInterface()) , m_windowsBlockCompositing(true) + , m_MoveMinimizedWindowsToEndOfTabBoxFocusChain(false) , OpTitlebarDblClick(Options::defaultOperationTitlebarDblClick()) , CmdActiveTitlebar1(Options::defaultCommandActiveTitlebar1()) , CmdActiveTitlebar2(Options::defaultCommandActiveTitlebar2()) @@ -679,6 +680,15 @@ void Options::setWindowsBlockCompositing(bool value) emit windowsBlockCompositingChanged(); } +void Options::setMoveMinimizedWindowsToEndOfTabBoxFocusChain(bool value) +{ + if (m_MoveMinimizedWindowsToEndOfTabBoxFocusChain == value) { + return; + } + m_MoveMinimizedWindowsToEndOfTabBoxFocusChain = value; + +} + void Options::setGlPreferBufferSwap(char glPreferBufferSwap) { if (glPreferBufferSwap == 'a') { @@ -849,6 +859,7 @@ void Options::syncFromKcfgc() setElectricBorderTiling(m_settings->electricBorderTiling()); setElectricBorderCornerRatio(m_settings->electricBorderCornerRatio()); setWindowsBlockCompositing(m_settings->windowsBlockCompositing()); + setMoveMinimizedWindowsToEndOfTabBoxFocusChain(m_settings->moveMinimizedWindowsToEndOfTabBoxFocusChain()); } diff --git a/options.h b/options.h index 6d72017d3..0834f314e 100644 --- a/options.h +++ b/options.h @@ -590,6 +590,10 @@ public: return m_windowsBlockCompositing; } + bool moveMinimizedWindowsToEndOfTabBoxFocusChain() const { + return m_MoveMinimizedWindowsToEndOfTabBoxFocusChain; + } + QStringList modifierOnlyDBusShortcut(Qt::KeyboardModifier mod) const; // setters @@ -651,6 +655,7 @@ public: void setGlPreferBufferSwap(char glPreferBufferSwap); void setGlPlatformInterface(OpenGLPlatformInterface interface); void setWindowsBlockCompositing(bool set); + void setMoveMinimizedWindowsToEndOfTabBoxFocusChain(bool set); // default values static WindowOperation defaultOperationTitlebarDblClick() { @@ -881,6 +886,7 @@ private: GlSwapStrategy m_glPreferBufferSwap; OpenGLPlatformInterface m_glPlatformInterface; bool m_windowsBlockCompositing; + bool m_MoveMinimizedWindowsToEndOfTabBoxFocusChain; WindowOperation OpTitlebarDblClick; WindowOperation opMaxButtonRightClick = defaultOperationMaxButtonRightClick(); -- GitLab