diff --git a/autotests/tabbox/test_tabbox_config.cpp b/autotests/tabbox/test_tabbox_config.cpp index 452dfd8bd9af5477d6bba26e174b87cef8d51b99..a1887fe83275e3c64cbe04571c754641f11d1b5c 100644 --- a/autotests/tabbox/test_tabbox_config.cpp +++ b/autotests/tabbox/test_tabbox_config.cpp @@ -28,6 +28,7 @@ void TestTabBoxConfig::testDefaultCtor() QCOMPARE(config.clientDesktopMode(), TabBoxConfig::defaultDesktopMode()); QCOMPARE(config.clientActivitiesMode(), TabBoxConfig::defaultActivitiesMode()); QCOMPARE(config.clientApplicationsMode(), TabBoxConfig::defaultApplicationsMode()); + QCOMPARE(config.orderMinimizedMode(), TabBoxConfig::defaultOrderMinimizedMode()); QCOMPARE(config.clientMinimizedMode(), TabBoxConfig::defaultMinimizedMode()); QCOMPARE(config.showDesktopMode(), TabBoxConfig::defaultShowDesktopMode()); QCOMPARE(config.clientMultiScreenMode(), TabBoxConfig::defaultMultiScreenMode()); @@ -46,6 +47,7 @@ void TestTabBoxConfig::testAssignmentOperator() config.setClientDesktopMode(TabBoxConfig::AllDesktopsClients); config.setClientActivitiesMode(TabBoxConfig::AllActivitiesClients); config.setClientApplicationsMode(TabBoxConfig::OneWindowPerApplication); + config.setOrderMinimizedMode(TabBoxConfig::GroupByMinimized); config.setClientMinimizedMode(TabBoxConfig::ExcludeMinimizedClients); config.setShowDesktopMode(TabBoxConfig::ShowDesktopClient); config.setClientMultiScreenMode(TabBoxConfig::ExcludeCurrentScreenClients); @@ -61,6 +63,7 @@ void TestTabBoxConfig::testAssignmentOperator() QCOMPARE(config2.clientDesktopMode(), TabBoxConfig::AllDesktopsClients); QCOMPARE(config2.clientActivitiesMode(), TabBoxConfig::AllActivitiesClients); QCOMPARE(config2.clientApplicationsMode(), TabBoxConfig::OneWindowPerApplication); + QCOMPARE(config2.orderMinimizedMode(), TabBoxConfig::GroupByMinimized); QCOMPARE(config2.clientMinimizedMode(), TabBoxConfig::ExcludeMinimizedClients); QCOMPARE(config2.showDesktopMode(), TabBoxConfig::ShowDesktopClient); QCOMPARE(config2.clientMultiScreenMode(), TabBoxConfig::ExcludeCurrentScreenClients); diff --git a/src/kcmkwin/kwintabbox/kwintabboxconfigform.cpp b/src/kcmkwin/kwintabbox/kwintabboxconfigform.cpp index e69f3e32dc6847d7c886211cab609d6f77d939c1..a3fa5a3bfc80ed82d1dbb1ae1eb24e165ae7a67e 100644 --- a/src/kcmkwin/kwintabbox/kwintabboxconfigform.cpp +++ b/src/kcmkwin/kwintabbox/kwintabboxconfigform.cpp @@ -57,6 +57,7 @@ KWinTabBoxConfigForm::KWinTabBoxConfigForm(TabboxType type, QWidget *parent) connect(ui->hiddenWindows, &QAbstractButton::clicked, this, &KWinTabBoxConfigForm::onFilterMinimization); connect(ui->oneAppWindow, &QAbstractButton::clicked, this, &KWinTabBoxConfigForm::onApplicationMode); + connect(ui->orderMinimized, &QAbstractButton::clicked, this, &KWinTabBoxConfigForm::onOrderMinimizedMode); connect(ui->showDesktop, &QAbstractButton::clicked, this, &KWinTabBoxConfigForm::onShowDesktopMode); connect(ui->switchingModeCombo, qOverload(&QComboBox::currentIndexChanged), this, &KWinTabBoxConfigForm::onSwitchingMode); @@ -146,6 +147,11 @@ int KWinTabBoxConfigForm::applicationMode() const return ui->oneAppWindow->isChecked() ? TabBoxConfig::OneWindowPerApplication : TabBoxConfig::AllWindowsAllApplications; } +int KWinTabBoxConfigForm::orderMinimizedMode() const +{ + return ui->orderMinimized->isChecked() ? TabBoxConfig::GroupByMinimized : TabBoxConfig::NoGroupByMinimized; +} + int KWinTabBoxConfigForm::showDesktopMode() const { return ui->showDesktop->isChecked() ? TabBoxConfig::ShowDesktopClient : TabBoxConfig::DoNotShowDesktopClient; @@ -194,6 +200,11 @@ void KWinTabBoxConfigForm::setApplicationMode(TabBox::TabBoxConfig::ClientApplic ui->oneAppWindow->setChecked(mode == TabBoxConfig::OneWindowPerApplication); } +void KWinTabBoxConfigForm::setOrderMinimizedMode(TabBox::TabBoxConfig::OrderMinimizedMode mode) +{ + ui->orderMinimized->setChecked(mode == TabBoxConfig::GroupByMinimized); +} + void KWinTabBoxConfigForm::setShowDesktopMode(TabBox::TabBoxConfig::ShowDesktopMode mode) { ui->showDesktop->setChecked(mode == TabBoxConfig::ShowDesktopClient); @@ -307,6 +318,11 @@ void KWinTabBoxConfigForm::setApplicationModeEnabled(bool enabled) ui->oneAppWindow->setEnabled(enabled); } +void KWinTabBoxConfigForm::setOrderMinimizedModeEnabled(bool enabled) +{ + ui->orderMinimized->setEnabled(enabled); +} + void KWinTabBoxConfigForm::setShowDesktopModeEnabled(bool enabled) { ui->showDesktop->setEnabled(enabled); @@ -355,6 +371,11 @@ void KWinTabBoxConfigForm::setApplicationModeDefaultIndicatorVisible(bool visibl setDefaultIndicatorVisible(ui->oneAppWindow, visible); } +void KWinTabBoxConfigForm::setOrderMinimizedDefaultIndicatorVisible(bool visible) +{ + setDefaultIndicatorVisible(ui->orderMinimized, visible); +} + void KWinTabBoxConfigForm::setShowDesktopModeDefaultIndicatorVisible(bool visible) { setDefaultIndicatorVisible(ui->showDesktop, visible); @@ -403,6 +424,11 @@ void KWin::KWinTabBoxConfigForm::onApplicationMode() Q_EMIT applicationModeChanged(applicationMode()); } +void KWinTabBoxConfigForm::onOrderMinimizedMode() +{ + Q_EMIT orderMinimizedModeChanged(orderMinimizedMode()); +} + void KWinTabBoxConfigForm::onShowDesktopMode() { Q_EMIT showDesktopModeChanged(showDesktopMode()); diff --git a/src/kcmkwin/kwintabbox/kwintabboxconfigform.h b/src/kcmkwin/kwintabbox/kwintabboxconfigform.h index a5f4ec8a91a25e4b3134117bfda1b4d41cc4b70b..5040c96af757b52a299083d1c31f883f0da8213b 100644 --- a/src/kcmkwin/kwintabbox/kwintabboxconfigform.h +++ b/src/kcmkwin/kwintabbox/kwintabboxconfigform.h @@ -52,6 +52,7 @@ public: int filterActivities() const; int filterMinimization() const; int applicationMode() const; + int orderMinimizedMode() const; int showDesktopMode() const; int switchingMode() const; QString layoutName() const; @@ -61,6 +62,7 @@ public: void setFilterActivities(TabBox::TabBoxConfig::ClientActivitiesMode mode); void setFilterMinimization(TabBox::TabBoxConfig::ClientMinimizedMode mode); void setApplicationMode(TabBox::TabBoxConfig::ClientApplicationsMode mode); + void setOrderMinimizedMode(TabBox::TabBoxConfig::OrderMinimizedMode mode); void setShowDesktopMode(TabBox::TabBoxConfig::ShowDesktopMode mode); void setSwitchingModeChanged(TabBox::TabBoxConfig::ClientSwitchingMode mode); void setLayoutName(const QString &layoutName); @@ -78,6 +80,7 @@ public: void setFilterActivitiesEnabled(bool enabled); void setFilterMinimizationEnabled(bool enabled); void setApplicationModeEnabled(bool enabled); + void setOrderMinimizedModeEnabled(bool enabled); void setShowDesktopModeEnabled(bool enabled); void setSwitchingModeEnabled(bool enabled); void setLayoutNameEnabled(bool enabled); @@ -87,6 +90,7 @@ public: void setFilterActivitiesDefaultIndicatorVisible(bool visible); void setFilterMinimizationDefaultIndicatorVisible(bool visible); void setApplicationModeDefaultIndicatorVisible(bool visible); + void setOrderMinimizedDefaultIndicatorVisible(bool visible); void setShowDesktopModeDefaultIndicatorVisible(bool visible); void setSwitchingModeDefaultIndicatorVisible(bool visible); void setLayoutNameDefaultIndicatorVisible(bool visible); @@ -97,6 +101,7 @@ Q_SIGNALS: void filterActivitiesChanged(int value); void filterMinimizationChanged(int value); void applicationModeChanged(int value); + void orderMinimizedModeChanged(int value); void showDesktopModeChanged(int value); void switchingModeChanged(int value); void layoutNameChanged(const QString &layoutName); @@ -109,6 +114,7 @@ private Q_SLOTS: void onFilterActivites(); void onFilterMinimization(); void onApplicationMode(); + void onOrderMinimizedMode(); void onShowDesktopMode(); void onSwitchingMode(); void onEffectCombo(); diff --git a/src/kcmkwin/kwintabbox/kwintabboxsettings.kcfg b/src/kcmkwin/kwintabbox/kwintabboxsettings.kcfg index 01cf73b7544e2f371fc0b44ac8f547fcd149f137..7fe359ce870a9a3ce13b858ddc5dd3c772e71350 100644 --- a/src/kcmkwin/kwintabbox/kwintabboxsettings.kcfg +++ b/src/kcmkwin/kwintabbox/kwintabboxsettings.kcfg @@ -16,6 +16,9 @@ TabBoxConfig::defaultApplicationsMode() + + TabBoxConfig::defaultOrderMinimizedMode() + TabBoxConfig::defaultMinimizedMode() diff --git a/src/kcmkwin/kwintabbox/main.cpp b/src/kcmkwin/kwintabbox/main.cpp index 4249dc38f0d9499711bef45ec5d49c4cc4d89508..4ac69e68cf02d7edefab6da244eec1b778cfbbeb 100644 --- a/src/kcmkwin/kwintabbox/main.cpp +++ b/src/kcmkwin/kwintabbox/main.cpp @@ -195,6 +195,7 @@ void KWinTabBoxConfig::setEnabledUi(KWinTabBoxConfigForm *form, const TabBoxSett form->setFilterActivitiesEnabled(!config->isActivitiesModeImmutable()); form->setFilterMinimizationEnabled(!config->isMinimizedModeImmutable()); form->setApplicationModeEnabled(!config->isApplicationsModeImmutable()); + form->setOrderMinimizedModeEnabled(!config->isOrderMinimizedModeImmutable()); form->setShowDesktopModeEnabled(!config->isShowDesktopModeImmutable()); form->setSwitchingModeEnabled(!config->isSwitchingModeImmutable()); form->setLayoutNameEnabled(!config->isLayoutNameImmutable()); @@ -209,6 +210,7 @@ void KWinTabBoxConfig::createConnections(KWinTabBoxConfigForm *form) connect(form, &KWinTabBoxConfigForm::filterActivitiesChanged, this, &KWinTabBoxConfig::updateUnmanagedState); connect(form, &KWinTabBoxConfigForm::filterMinimizationChanged, this, &KWinTabBoxConfig::updateUnmanagedState); connect(form, &KWinTabBoxConfigForm::applicationModeChanged, this, &KWinTabBoxConfig::updateUnmanagedState); + connect(form, &KWinTabBoxConfigForm::orderMinimizedModeChanged, this, &KWinTabBoxConfig::updateUnmanagedState); connect(form, &KWinTabBoxConfigForm::showDesktopModeChanged, this, &KWinTabBoxConfig::updateUnmanagedState); connect(form, &KWinTabBoxConfigForm::switchingModeChanged, this, &KWinTabBoxConfig::updateUnmanagedState); connect(form, &KWinTabBoxConfigForm::layoutNameChanged, this, &KWinTabBoxConfig::updateUnmanagedState); @@ -246,6 +248,7 @@ bool KWinTabBoxConfig::updateUnmanagedIsNeedSave(const KWinTabBoxConfigForm *for isNeedSave |= form->filterActivities() != config->activitiesMode(); isNeedSave |= form->filterMinimization() != config->minimizedMode(); isNeedSave |= form->applicationMode() != config->applicationsMode(); + isNeedSave |= form->orderMinimizedMode() != config->orderMinimizedMode(); isNeedSave |= form->showDesktopMode() != config->showDesktopMode(); isNeedSave |= form->switchingMode() != config->switchingMode(); isNeedSave |= form->layoutName() != config->layoutName(); @@ -261,6 +264,7 @@ bool KWinTabBoxConfig::updateUnmanagedIsDefault(KWinTabBoxConfigForm *form, cons isDefault &= form->filterActivities() == config->defaultActivitiesModeValue(); isDefault &= form->filterMinimization() == config->defaultMinimizedModeValue(); isDefault &= form->applicationMode() == config->defaultApplicationsModeValue(); + isDefault &= form->orderMinimizedMode() == config->defaultOrderMinimizedModeValue(); isDefault &= form->showDesktopMode() == config->defaultShowDesktopModeValue(); isDefault &= form->switchingMode() == config->defaultSwitchingModeValue(); isDefault &= form->layoutName() == config->defaultLayoutNameValue(); @@ -275,6 +279,7 @@ void KWinTabBoxConfig::updateUiDefaultIndicator(bool visible, KWinTabBoxConfigFo form->setFilterActivitiesDefaultIndicatorVisible(visible && form->filterActivities() != config->defaultActivitiesModeValue()); form->setFilterMinimizationDefaultIndicatorVisible(visible && form->filterMinimization() != config->defaultMinimizedModeValue()); form->setApplicationModeDefaultIndicatorVisible(visible && form->applicationMode() != config->defaultApplicationsModeValue()); + form->setOrderMinimizedDefaultIndicatorVisible(visible && form->orderMinimizedMode() != config->defaultOrderMinimizedModeValue()); form->setShowDesktopModeDefaultIndicatorVisible(visible && form->showDesktopMode() != config->defaultShowDesktopModeValue()); form->setSwitchingModeDefaultIndicatorVisible(visible && form->switchingMode() != config->defaultSwitchingModeValue()); form->setLayoutNameDefaultIndicatorVisible(visible && form->layoutName() != config->defaultLayoutNameValue()); @@ -340,6 +345,7 @@ void KWinTabBoxConfig::updateUiFromConfig(KWinTabBoxConfigForm *form, const KWin form->setFilterActivities(static_cast(config->activitiesMode())); form->setFilterMinimization(static_cast(config->minimizedMode())); form->setApplicationMode(static_cast(config->applicationsMode())); + form->setOrderMinimizedMode(static_cast(config->orderMinimizedMode())); form->setShowDesktopMode(static_cast(config->showDesktopMode())); form->setSwitchingModeChanged(static_cast(config->switchingMode())); form->setLayoutName(config->layoutName()); @@ -352,6 +358,7 @@ void KWinTabBoxConfig::updateConfigFromUi(const KWinTabBoxConfigForm *form, TabB config->setActivitiesMode(form->filterActivities()); config->setMinimizedMode(form->filterMinimization()); config->setApplicationsMode(form->applicationMode()); + config->setOrderMinimizedMode(form->orderMinimizedMode()); config->setShowDesktopMode(form->showDesktopMode()); config->setSwitchingMode(form->switchingMode()); config->setLayoutName(form->layoutName()); @@ -364,6 +371,7 @@ void KWinTabBoxConfig::updateUiFromDefaultConfig(KWinTabBoxConfigForm *form, con form->setFilterActivities(static_cast(config->defaultActivitiesModeValue())); form->setFilterMinimization(static_cast(config->defaultMinimizedModeValue())); form->setApplicationMode(static_cast(config->defaultApplicationsModeValue())); + form->setOrderMinimizedMode(static_cast(config->defaultOrderMinimizedModeValue())); form->setShowDesktopMode(static_cast(config->defaultShowDesktopModeValue())); form->setSwitchingModeChanged(static_cast(config->defaultSwitchingModeValue())); form->setLayoutName(config->defaultLayoutNameValue()); diff --git a/src/kcmkwin/kwintabbox/main.ui b/src/kcmkwin/kwintabbox/main.ui index 84c4a90bbeaf6e4e97bdca0af40d0c989f91ba54..4d3a2dcf8364bef54a353543bdfc5b940fabfb1b 100644 --- a/src/kcmkwin/kwintabbox/main.ui +++ b/src/kcmkwin/kwintabbox/main.ui @@ -72,6 +72,16 @@ + + + + Order minimized windows after unminimized windows + + + false + + + diff --git a/src/tabbox/clientmodel.cpp b/src/tabbox/clientmodel.cpp index 64d3f94e75dc9a134222928842316cc0e32b6ac6..cb9c841c02f00183a7833ad8d93a4ac0389d4224 100644 --- a/src/tabbox/clientmodel.cpp +++ b/src/tabbox/clientmodel.cpp @@ -154,6 +154,62 @@ void ClientModel::createClientList(bool partialReset) createClientList(tabBox->currentDesktop(), partialReset); } +void ClientModel::createFocusChainClientList(int desktop, + const QSharedPointer &start, TabBoxClientList &stickyClients) +{ + auto c = start; + if (!tabBox->isInFocusChain(c.data())) { + QSharedPointer firstClient = tabBox->firstClientFocusChain().toStrongRef(); + if (firstClient) { + c = firstClient; + } + } + auto stop = c; + do { + QSharedPointer add = tabBox->clientToAddToList(c.data(), desktop); + if (!add.isNull()) { + m_clientList += add; + if (add.data()->isFirstInTabBox()) { + stickyClients << add; + } + } + c = tabBox->nextClientFocusChain(c.data()); + } while (c && c != stop); +} + +void ClientModel::createStackingOrderClientList(int desktop, + const QSharedPointer &start, TabBoxClientList &stickyClients) +{ + // TODO: needs improvement + const TabBoxClientList stacking = tabBox->stackingOrder(); + auto c = stacking.first().toStrongRef(); + auto stop = c; + int index = 0; + while (c) { + QSharedPointer add = tabBox->clientToAddToList(c.data(), desktop); + if (!add.isNull()) { + if (start == add.data()) { + m_clientList.removeAll(add); + m_clientList.prepend(add); + } else { + m_clientList += add; + } + if (add.data()->isFirstInTabBox()) { + stickyClients << add; + } + } + if (index >= stacking.size() - 1) { + c = nullptr; + } else { + c = stacking[++index]; + } + + if (c == stop) { + break; + } + } +} + void ClientModel::createClientList(int desktop, bool partialReset) { auto start = tabBox->activeClient().toStrongRef(); @@ -167,62 +223,26 @@ void ClientModel::createClientList(int desktop, bool partialReset) beginResetModel(); m_clientList.clear(); - QList> stickyClients; + TabBoxClientList stickyClients; switch (tabBox->config().clientSwitchingMode()) { case TabBoxConfig::FocusChainSwitching: { - auto c = start; - if (!tabBox->isInFocusChain(c.data())) { - QSharedPointer firstClient = tabBox->firstClientFocusChain().toStrongRef(); - if (firstClient) { - c = firstClient; - } - } - auto stop = c; - do { - QSharedPointer add = tabBox->clientToAddToList(c.data(), desktop); - if (!add.isNull()) { - m_clientList += add; - if (add.data()->isFirstInTabBox()) { - stickyClients << add; - } - } - c = tabBox->nextClientFocusChain(c.data()); - } while (c && c != stop); + createFocusChainClientList(desktop, start, stickyClients); break; } case TabBoxConfig::StackingOrderSwitching: { - // TODO: needs improvement - const TabBoxClientList stacking = tabBox->stackingOrder(); - auto c = stacking.first().toStrongRef(); - auto stop = c; - int index = 0; - while (c) { - QSharedPointer add = tabBox->clientToAddToList(c.data(), desktop); - if (!add.isNull()) { - if (start == add.data()) { - m_clientList.removeAll(add); - m_clientList.prepend(add); - } else { - m_clientList += add; - } - if (add.data()->isFirstInTabBox()) { - stickyClients << add; - } - } - if (index >= stacking.size() - 1) { - c = nullptr; - } else { - c = stacking[++index]; - } - - if (c == stop) { - break; - } - } + createStackingOrderClientList(desktop, start, stickyClients); break; } } + + if (tabBox->config().orderMinimizedMode() == TabBoxConfig::GroupByMinimized) { + // Put all non-minimized included clients first. + std::stable_partition(m_clientList.begin(), m_clientList.end(), [](const auto &client) { + return !client.toStrongRef()->isMinimized(); + }); + } + for (const QWeakPointer &c : qAsConst(stickyClients)) { m_clientList.removeAll(c); m_clientList.prepend(c); diff --git a/src/tabbox/clientmodel.h b/src/tabbox/clientmodel.h index 274b33ef85bd6c780a2499064686b669ca2d2cd0..721f4a65f2fde64f0f97942aeb729b09956a50f0 100644 --- a/src/tabbox/clientmodel.h +++ b/src/tabbox/clientmodel.h @@ -94,6 +94,11 @@ public Q_SLOTS: void activate(int index); private: + void createFocusChainClientList(int desktop, const QSharedPointer &start, + TabBoxClientList &stickyClients); + void createStackingOrderClientList(int desktop, const QSharedPointer &start, + TabBoxClientList &stickyClients); + TabBoxClientList m_clientList; }; diff --git a/src/tabbox/tabbox.cpp b/src/tabbox/tabbox.cpp index 3bdebb707e4239b3a532916fd41d28d4408aeb2f..482a58b3f08078bb7c592ef3d3da62d2b70fc6b8 100644 --- a/src/tabbox/tabbox.cpp +++ b/src/tabbox/tabbox.cpp @@ -465,6 +465,7 @@ TabBox::TabBox(QObject *parent) m_defaultConfig.setClientDesktopMode(TabBoxConfig::OnlyCurrentDesktopClients); m_defaultConfig.setClientActivitiesMode(TabBoxConfig::OnlyCurrentActivityClients); m_defaultConfig.setClientApplicationsMode(TabBoxConfig::AllWindowsAllApplications); + m_defaultConfig.setOrderMinimizedMode(TabBoxConfig::NoGroupByMinimized); m_defaultConfig.setClientMinimizedMode(TabBoxConfig::IgnoreMinimizedStatus); m_defaultConfig.setShowDesktopMode(TabBoxConfig::DoNotShowDesktopClient); m_defaultConfig.setClientMultiScreenMode(TabBoxConfig::IgnoreMultiScreen); @@ -475,6 +476,7 @@ TabBox::TabBox(QObject *parent) m_alternativeConfig.setClientDesktopMode(TabBoxConfig::AllDesktopsClients); m_alternativeConfig.setClientActivitiesMode(TabBoxConfig::OnlyCurrentActivityClients); m_alternativeConfig.setClientApplicationsMode(TabBoxConfig::AllWindowsAllApplications); + m_alternativeConfig.setOrderMinimizedMode(TabBoxConfig::NoGroupByMinimized); m_alternativeConfig.setClientMinimizedMode(TabBoxConfig::IgnoreMinimizedStatus); m_alternativeConfig.setShowDesktopMode(TabBoxConfig::DoNotShowDesktopClient); m_alternativeConfig.setClientMultiScreenMode(TabBoxConfig::IgnoreMultiScreen); @@ -817,6 +819,8 @@ void TabBox::loadConfig(const KConfigGroup &config, TabBoxConfig &tabBoxConfig) config.readEntry("ActivitiesMode", TabBoxConfig::defaultActivitiesMode()))); tabBoxConfig.setClientApplicationsMode(TabBoxConfig::ClientApplicationsMode( config.readEntry("ApplicationsMode", TabBoxConfig::defaultApplicationsMode()))); + tabBoxConfig.setOrderMinimizedMode(TabBoxConfig::OrderMinimizedMode( + config.readEntry("OrderMinimizedMode", TabBoxConfig::defaultOrderMinimizedMode()))); tabBoxConfig.setClientMinimizedMode(TabBoxConfig::ClientMinimizedMode( config.readEntry("MinimizedMode", TabBoxConfig::defaultMinimizedMode()))); tabBoxConfig.setShowDesktopMode(TabBoxConfig::ShowDesktopMode( diff --git a/src/tabbox/tabboxconfig.cpp b/src/tabbox/tabboxconfig.cpp index 297bf693cf0fd23f5f3ad0821c8eb328ddafa2a9..60e5524a0649099dd6a69806e59e2fc22827c961 100644 --- a/src/tabbox/tabboxconfig.cpp +++ b/src/tabbox/tabboxconfig.cpp @@ -23,6 +23,7 @@ public: , clientDesktopMode(TabBoxConfig::defaultDesktopMode()) , clientActivitiesMode(TabBoxConfig::defaultActivitiesMode()) , clientApplicationsMode(TabBoxConfig::defaultApplicationsMode()) + , orderMinimizedMode(TabBoxConfig::defaultOrderMinimizedMode()) , clientMinimizedMode(TabBoxConfig::defaultMinimizedMode()) , showDesktopMode(TabBoxConfig::defaultShowDesktopMode()) , clientMultiScreenMode(TabBoxConfig::defaultMultiScreenMode()) @@ -41,6 +42,7 @@ public: TabBoxConfig::ClientDesktopMode clientDesktopMode; TabBoxConfig::ClientActivitiesMode clientActivitiesMode; TabBoxConfig::ClientApplicationsMode clientApplicationsMode; + TabBoxConfig::OrderMinimizedMode orderMinimizedMode; TabBoxConfig::ClientMinimizedMode clientMinimizedMode; TabBoxConfig::ShowDesktopMode showDesktopMode; TabBoxConfig::ClientMultiScreenMode clientMultiScreenMode; @@ -67,6 +69,7 @@ TabBoxConfig &TabBoxConfig::operator=(const KWin::TabBox::TabBoxConfig &object) d->clientDesktopMode = object.clientDesktopMode(); d->clientActivitiesMode = object.clientActivitiesMode(); d->clientApplicationsMode = object.clientApplicationsMode(); + d->orderMinimizedMode = object.orderMinimizedMode(); d->clientMinimizedMode = object.clientMinimizedMode(); d->showDesktopMode = object.showDesktopMode(); d->clientMultiScreenMode = object.clientMultiScreenMode(); @@ -136,6 +139,16 @@ void TabBoxConfig::setClientApplicationsMode(ClientApplicationsMode applications d->clientApplicationsMode = applicationsMode; } +TabBoxConfig::OrderMinimizedMode TabBoxConfig::orderMinimizedMode() const +{ + return d->orderMinimizedMode; +} + +void TabBoxConfig::setOrderMinimizedMode(OrderMinimizedMode orderMinimizedMode) +{ + d->orderMinimizedMode = orderMinimizedMode; +} + TabBoxConfig::ClientMinimizedMode TabBoxConfig::clientMinimizedMode() const { return d->clientMinimizedMode; diff --git a/src/tabbox/tabboxconfig.h b/src/tabbox/tabboxconfig.h index 5d769a947665877a0fa0119dd10659c0900a88d3..aa84b3036936fa37298c3f0b56c547b7ad312f2f 100644 --- a/src/tabbox/tabboxconfig.h +++ b/src/tabbox/tabboxconfig.h @@ -84,6 +84,14 @@ public: DoNotShowDesktopClient, ///< A TabBoxClient representing the desktop is not included ShowDesktopClient ///< A TabBoxClient representing the desktop is included }; + /** + * OrderMinimizedMode defines whether the TabBoxClients considered part of the + * TabBoxClient List should be grouped by the minimisation status + */ + enum OrderMinimizedMode { + NoGroupByMinimized, ///< TabBoxClients are not grouped by whether they are minimized + GroupByMinimized ///< TabBoxClients are grouped by whether they are minimized or not + }; /** * ClientActivitiesMode defines whether windows from the current activity or from all * activities are included in the TabBoxClient List in the TabBoxClientModel @@ -162,6 +170,13 @@ public: * @see defaultApplicationsMode */ ClientApplicationsMode clientApplicationsMode() const; + /** + * @return The current OrderMinimizedMode + * This option only applies for TabBoxMode ClientTabBox. + * @see setOrderMinimizedMode + * @see defaultOrderMinimizedMode + */ + OrderMinimizedMode orderMinimizedMode() const; /** * @return The current ClientMinimizedMode * This option only applies for TabBoxMode ClientTabBox. @@ -238,6 +253,12 @@ public: * @see clientApplicationsMode */ void setClientApplicationsMode(ClientApplicationsMode applicationsMode); + /** + * @param orderMinimizedMode The new OrderMinimizedMode to be used. + * This option only applies for TabBoxMode ClientTabBox. + * @see orderMinimizedMode + */ + void setOrderMinimizedMode(OrderMinimizedMode orderMinimizedMode); /** * @param minimizedMode The new ClientMinimizedMode to be used. * This option only applies for TabBoxMode ClientTabBox. @@ -287,6 +308,10 @@ public: { return AllWindowsAllApplications; } + static OrderMinimizedMode defaultOrderMinimizedMode() + { + return NoGroupByMinimized; + } static ClientMinimizedMode defaultMinimizedMode() { return IgnoreMinimizedStatus;