13#include "kwintabboxsettings.h"
20using namespace TabBox;
25 , m_shortcuts(shortcutsConfig)
30 ui->effectConfigButton->setIcon(QIcon::fromTheme(QStringLiteral(
"view-preview")));
32 if (QApplication::screens().count() < 2) {
33 ui->filterScreens->hide();
34 ui->screenFilter->hide();
41 connect(ui->kcfg_ShowTabBox, &QAbstractButton::clicked,
this, &KWinTabBoxConfigForm::tabBoxToggled);
43 connect(ui->filterScreens, &QAbstractButton::clicked,
this, &KWinTabBoxConfigForm::onFilterScreen);
44 connect(ui->currentScreen, &QAbstractButton::clicked,
this, &KWinTabBoxConfigForm::onFilterScreen);
45 connect(ui->otherScreens, &QAbstractButton::clicked,
this, &KWinTabBoxConfigForm::onFilterScreen);
47 connect(ui->filterDesktops, &QAbstractButton::clicked,
this, &KWinTabBoxConfigForm::onFilterDesktop);
48 connect(ui->currentDesktop, &QAbstractButton::clicked,
this, &KWinTabBoxConfigForm::onFilterDesktop);
49 connect(ui->otherDesktops, &QAbstractButton::clicked,
this, &KWinTabBoxConfigForm::onFilterDesktop);
51 connect(ui->filterActivities, &QAbstractButton::clicked,
this, &KWinTabBoxConfigForm::onFilterActivites);
52 connect(ui->currentActivity, &QAbstractButton::clicked,
this, &KWinTabBoxConfigForm::onFilterActivites);
53 connect(ui->otherActivities, &QAbstractButton::clicked,
this, &KWinTabBoxConfigForm::onFilterActivites);
55 connect(ui->filterMinimization, &QAbstractButton::clicked,
this, &KWinTabBoxConfigForm::onFilterMinimization);
56 connect(ui->visibleWindows, &QAbstractButton::clicked,
this, &KWinTabBoxConfigForm::onFilterMinimization);
57 connect(ui->hiddenWindows, &QAbstractButton::clicked,
this, &KWinTabBoxConfigForm::onFilterMinimization);
59 connect(ui->oneAppWindow, &QAbstractButton::clicked,
this, &KWinTabBoxConfigForm::onApplicationMode);
60 connect(ui->orderMinimized, &QAbstractButton::clicked,
this, &KWinTabBoxConfigForm::onOrderMinimizedMode);
61 connect(ui->showDesktop, &QAbstractButton::clicked,
this, &KWinTabBoxConfigForm::onShowDesktopMode);
63 connect(ui->switchingModeCombo, &QComboBox::activated,
this, &KWinTabBoxConfigForm::onSwitchingMode);
64 connect(ui->effectCombo, &QComboBox::activated,
this, &KWinTabBoxConfigForm::onEffectCombo);
66 auto initShortcutWidget = [
this](KKeySequenceWidget *widget,
const char *name) {
68 widget->setProperty(
"shortcutAction", name);
69 connect(widget, &KKeySequenceWidget::keySequenceChanged,
this, &KWinTabBoxConfigForm::onShortcutChanged);
73 initShortcutWidget(ui->scAll,
"Walk Through Windows");
74 initShortcutWidget(ui->scAllReverse,
"Walk Through Windows (Reverse)");
75 initShortcutWidget(ui->scCurrent,
"Walk Through Windows of Current Application");
76 initShortcutWidget(ui->scCurrentReverse,
"Walk Through Windows of Current Application (Reverse)");
78 initShortcutWidget(ui->scAll,
"Walk Through Windows Alternative");
79 initShortcutWidget(ui->scAllReverse,
"Walk Through Windows Alternative (Reverse)");
80 initShortcutWidget(ui->scCurrent,
"Walk Through Windows of Current Application Alternative");
81 initShortcutWidget(ui->scCurrentReverse,
"Walk Through Windows of Current Application Alternative (Reverse)");
99 return ui->kcfg_HighlightWindows->isChecked();
102bool KWinTabBoxConfigForm::showTabBox()
const
104 return ui->kcfg_ShowTabBox->isChecked();
107int KWinTabBoxConfigForm::filterScreen()
const
109 if (ui->filterScreens->isChecked()) {
116int KWinTabBoxConfigForm::filterDesktop()
const
118 if (ui->filterDesktops->isChecked()) {
125int KWinTabBoxConfigForm::filterActivities()
const
127 if (ui->filterActivities->isChecked()) {
134int KWinTabBoxConfigForm::filterMinimization()
const
136 if (ui->filterMinimization->isChecked()) {
143int KWinTabBoxConfigForm::applicationMode()
const
148int KWinTabBoxConfigForm::orderMinimizedMode()
const
153int KWinTabBoxConfigForm::showDesktopMode()
const
158int KWinTabBoxConfigForm::switchingMode()
const
160 return ui->switchingModeCombo->currentIndex();
163QString KWinTabBoxConfigForm::layoutName()
const
165 return ui->effectCombo->currentData().toString();
213 ui->switchingModeCombo->setCurrentIndex(mode);
216void KWinTabBoxConfigForm::setLayoutName(
const QString &layoutName)
218 const int index = ui->effectCombo->findData(layoutName);
220 ui->effectCombo->setCurrentIndex(index);
227 const QString layout = m_config->layoutName();
228 ui->effectCombo->setModel(model);
229 setLayoutName(layout);
234 return ui->effectCombo->currentData(role);
237void KWinTabBoxConfigForm::tabBoxToggled(
bool on)
241 on = !on || ui->effectCombo->currentData(
AddonEffect).toBool();
242 ui->kcfg_HighlightWindows->setEnabled(on && m_isHighlightWindowsEnabled);
245void KWinTabBoxConfigForm::onFilterScreen()
247 m_config->setMultiScreenMode(filterScreen());
251void KWinTabBoxConfigForm::onFilterDesktop()
253 m_config->setDesktopMode(filterDesktop());
257void KWinTabBoxConfigForm::onFilterActivites()
259 m_config->setActivitiesMode(filterActivities());
263void KWinTabBoxConfigForm::onFilterMinimization()
265 m_config->setMinimizedMode(filterMinimization());
269void KWin::KWinTabBoxConfigForm::onApplicationMode()
271 m_config->setApplicationsMode(applicationMode());
272 Q_EMIT configChanged();
275void KWinTabBoxConfigForm::onOrderMinimizedMode()
277 m_config->setOrderMinimizedMode(orderMinimizedMode());
281void KWinTabBoxConfigForm::onShowDesktopMode()
283 m_config->setShowDesktopMode(showDesktopMode());
287void KWinTabBoxConfigForm::onSwitchingMode()
289 m_config->setSwitchingMode(switchingMode());
293void KWinTabBoxConfigForm::onEffectCombo()
295 const bool isAddonEffect = ui->effectCombo->currentData(
AddonEffect).toBool();
296 ui->effectConfigButton->setIcon(QIcon::fromTheme(isAddonEffect ?
"view-preview" :
"configure"));
297 if (!ui->kcfg_ShowTabBox->isChecked()) {
300 ui->kcfg_HighlightWindows->setEnabled(isAddonEffect && m_isHighlightWindowsEnabled);
302 m_config->setLayoutName(layoutName());
306void KWinTabBoxConfigForm::onShortcutChanged(
const QKeySequence &seq)
308 const QString actionName = sender()->property(
"shortcutAction").toString();
324 setLayoutName(m_config->layoutName());
326 for (
const auto &widget : {ui->scAll, ui->scAllReverse, ui->scCurrent, ui->scCurrentReverse}) {
327 const QString actionName = widget->property(
"shortcutAction").toString();
328 widget->setKeySequence(m_shortcuts->
shortcut(actionName));
331 updateDefaultIndicators();
334void KWinTabBoxConfigForm::setEnabledUi()
336 m_isHighlightWindowsEnabled = !m_config->isHighlightWindowsImmutable();
337 ui->kcfg_HighlightWindows->setEnabled(!m_config->isHighlightWindowsImmutable());
339 ui->filterScreens->setEnabled(!m_config->isMultiScreenModeImmutable());
340 ui->currentScreen->setEnabled(!m_config->isMultiScreenModeImmutable());
341 ui->otherScreens->setEnabled(!m_config->isMultiScreenModeImmutable());
343 ui->filterDesktops->setEnabled(!m_config->isDesktopModeImmutable());
344 ui->currentDesktop->setEnabled(!m_config->isDesktopModeImmutable());
345 ui->otherDesktops->setEnabled(!m_config->isDesktopModeImmutable());
347 ui->filterActivities->setEnabled(!m_config->isActivitiesModeImmutable());
348 ui->currentActivity->setEnabled(!m_config->isActivitiesModeImmutable());
349 ui->otherActivities->setEnabled(!m_config->isActivitiesModeImmutable());
351 ui->filterMinimization->setEnabled(!m_config->isMinimizedModeImmutable());
352 ui->visibleWindows->setEnabled(!m_config->isMinimizedModeImmutable());
353 ui->hiddenWindows->setEnabled(!m_config->isMinimizedModeImmutable());
355 ui->oneAppWindow->setEnabled(!m_config->isApplicationsModeImmutable());
356 ui->orderMinimized->setEnabled(!m_config->isOrderMinimizedModeImmutable());
357 ui->showDesktop->setEnabled(!m_config->isShowDesktopModeImmutable());
358 ui->switchingModeCombo->setEnabled(!m_config->isSwitchingModeImmutable());
359 ui->effectCombo->setEnabled(!m_config->isLayoutNameImmutable());
364 m_showDefaultIndicator = show;
365 updateDefaultIndicators();
368void KWinTabBoxConfigForm::updateDefaultIndicators()
370 applyDefaultIndicator({ui->filterScreens, ui->currentScreen, ui->otherScreens},
371 m_config->multiScreenMode() == m_config->defaultMultiScreenModeValue());
372 applyDefaultIndicator({ui->filterDesktops, ui->currentDesktop, ui->otherDesktops},
373 m_config->desktopMode() == m_config->defaultDesktopModeValue());
374 applyDefaultIndicator({ui->filterActivities, ui->currentActivity, ui->otherActivities},
375 m_config->activitiesMode() == m_config->defaultActivitiesModeValue());
376 applyDefaultIndicator({ui->filterMinimization, ui->visibleWindows, ui->hiddenWindows},
377 m_config->minimizedMode() == m_config->defaultMinimizedModeValue());
378 applyDefaultIndicator({ui->oneAppWindow}, m_config->applicationsMode() == m_config->defaultApplicationsModeValue());
379 applyDefaultIndicator({ui->orderMinimized}, m_config->orderMinimizedMode() == m_config->defaultOrderMinimizedModeValue());
380 applyDefaultIndicator({ui->showDesktop}, m_config->showDesktopMode() == m_config->defaultShowDesktopModeValue());
381 applyDefaultIndicator({ui->switchingModeCombo}, m_config->switchingMode() == m_config->defaultSwitchingModeValue());
382 applyDefaultIndicator({ui->effectCombo}, m_config->layoutName() == m_config->defaultLayoutNameValue());
384 for (
const auto &widget : {ui->scAll, ui->scAllReverse, ui->scCurrent, ui->scCurrentReverse}) {
385 const QString actionName = widget->property(
"shortcutAction").toString();
386 applyDefaultIndicator({widget}, m_shortcuts->
isDefault(actionName));
390void KWinTabBoxConfigForm::applyDefaultIndicator(QList<QWidget *> widgets,
bool isDefault)
392 for (
auto widget : widgets) {
393 widget->setProperty(
"_kde_highlight_neutral", m_showDefaultIndicator && !isDefault);
400#include "moc_kwintabboxconfigform.cpp"
QKeySequence shortcut(const QString &name) const
void setShortcut(const QString &name, const QKeySequence &seq)
bool isDefault(const QString &name) const
KActionCollection * actionCollection() const
@ AllActivitiesClients
Windows from all Activities are included.
@ OnlyCurrentActivityClients
Only Windows on current activity are included.
@ ExcludeCurrentActivityClients
Exclude Windows on current activity.
@ OnlyMinimizedClients
Only minimized Windows are included.
@ IgnoreMinimizedStatus
Windows are included no matter they are minimized or not.
@ ExcludeMinimizedClients
Exclude minimized Windows.
@ OneWindowPerApplication
Only one Window for each application is included.
@ AllWindowsAllApplications
Windows from all applications are included.
@ AllDesktopsClients
Windows from all desktops are included.
@ OnlyCurrentDesktopClients
Only Windows on current desktop are included.
@ ExcludeCurrentDesktopClients
Exclude Windows on current desktop.
@ GroupByMinimized
Windows are grouped by whether they are minimized or not.
@ NoGroupByMinimized
Windows are not grouped by whether they are minimized.
@ ShowDesktopClient
A Window representing the desktop is included.
@ DoNotShowDesktopClient
A Window representing the desktop is not included.
@ OnlyCurrentScreenClients
Only Windows on current screen are included.
@ ExcludeCurrentScreenClients
Exclude Windows from the current screen.
@ IgnoreMultiScreen
Windows are included independently of the screen they are on.