diff --git a/kcmkwin/kwintabbox/CMakeLists.txt b/kcmkwin/kwintabbox/CMakeLists.txt
index 25c80ea8cf..72a6b72f86 100644
--- a/kcmkwin/kwintabbox/CMakeLists.txt
+++ b/kcmkwin/kwintabbox/CMakeLists.txt
@@ -19,7 +19,7 @@ kde4_add_ui_files( kcm_kwintabbox_PART_SRCS main.ui )
kde4_add_plugin(kcm_kwintabbox ${kcm_kwintabbox_PART_SRCS})
-target_link_libraries(kcm_kwintabbox ${KDE4_KDEUI_LIBS} ${KDE4_KCMUTILS_LIBS} ${KDE4_PLASMA_LIBS} ${X11_LIBRARIES} ${QT_QTDECLARATIVE_LIBRARY} ${KDECLARATIVE_LIBRARIES})
+target_link_libraries(kcm_kwintabbox ${KDE4_KNEWSTUFF3_LIBS} ${KDE4_KDEUI_LIBS} ${KDE4_KCMUTILS_LIBS} ${KDE4_PLASMA_LIBS} ${X11_LIBRARIES} ${QT_QTDECLARATIVE_LIBRARY} ${KDECLARATIVE_LIBRARIES})
install(TARGETS kcm_kwintabbox DESTINATION ${PLUGIN_INSTALL_DIR} )
@@ -28,3 +28,4 @@ install(TARGETS kcm_kwintabbox DESTINATION ${PLUGIN_INSTALL_DIR} )
install( FILES kwintabbox.desktop DESTINATION ${SERVICES_INSTALL_DIR} )
install( FILES qml/main.qml DESTINATION ${DATA_INSTALL_DIR}/kwin/kcm_kwintabbox)
install( FILES thumbnails/konqueror.png thumbnails/kmail.png thumbnails/systemsettings.png thumbnails/dolphin.png DESTINATION ${DATA_INSTALL_DIR}/kwin/kcm_kwintabbox)
+install( FILES kwinswitcher.knsrc DESTINATION ${CONFIG_INSTALL_DIR} )
diff --git a/kcmkwin/kwintabbox/kwinswitcher.knsrc b/kcmkwin/kwintabbox/kwinswitcher.knsrc
new file mode 100644
index 0000000000..dbc1f66f2e
--- /dev/null
+++ b/kcmkwin/kwintabbox/kwinswitcher.knsrc
@@ -0,0 +1,5 @@
+[KNewStuff3]
+Categories=KWin Window Switcher
+StandardResource=tmp
+InstallationCommand=plasmapkg -t windowswitcher -i %f
+UninstallCommand=plasmapkg -t windowswitcher -r %f
diff --git a/kcmkwin/kwintabbox/layoutpreview.cpp b/kcmkwin/kwintabbox/layoutpreview.cpp
index 9ada2ad81c..e00b4fd254 100644
--- a/kcmkwin/kwintabbox/layoutpreview.cpp
+++ b/kcmkwin/kwintabbox/layoutpreview.cpp
@@ -179,7 +179,6 @@ int ExampleClientModel::rowCount(const QModelIndex &parent) const
return m_nameList.size();
}
-
} // namespace KWin
} // namespace TabBox
diff --git a/kcmkwin/kwintabbox/main.cpp b/kcmkwin/kwintabbox/main.cpp
index 719a527b5d..e8daf73c6c 100644
--- a/kcmkwin/kwintabbox/main.cpp
+++ b/kcmkwin/kwintabbox/main.cpp
@@ -37,6 +37,7 @@ along with this program. If not, see .
#include
#include
#include
+#include
// own
#include "tabboxconfig.h"
@@ -103,6 +104,65 @@ KWinTabBoxConfig::KWinTabBoxConfig(QWidget* parent, const QVariantList& args)
m_alternativeTabBoxUi->scCurrentReverse);
#undef ADD_SHORTCUT
+ initLayoutLists();
+ KWinTabBoxConfigForm *ui[2] = { m_primaryTabBoxUi, m_alternativeTabBoxUi };
+ for (int i = 0; i < 2; ++i) {
+ ui[i]->effectConfigButton->setIcon(KIcon("view-preview"));
+ ui[i]->ghns->setIcon(KIcon("get-hot-new-stuff"));
+
+ // TODO: remove once the category has been created.
+ ui[i]->ghns->setVisible(false);
+
+ connect(ui[i]->highlightWindowCheck, SIGNAL(clicked(bool)), SLOT(changed()));
+ connect(ui[i]->showOutlineCheck, SIGNAL(clicked(bool)), SLOT(changed()));
+ connect(ui[i]->showTabBox, SIGNAL(clicked(bool)), SLOT(tabBoxToggled(bool)));
+ connect(ui[i]->effectCombo, SIGNAL(currentIndexChanged(int)), SLOT(changed()));
+ connect(ui[i]->effectCombo, SIGNAL(currentIndexChanged(int)), SLOT(effectSelectionChanged(int)));
+ connect(ui[i]->effectConfigButton, SIGNAL(clicked(bool)), SLOT(configureEffectClicked()));
+
+ connect(ui[i]->switchingModeCombo, SIGNAL(currentIndexChanged(int)), SLOT(changed()));
+ connect(ui[i]->showDesktop, SIGNAL(clicked(bool)), SLOT(changed()));
+
+ connect(ui[i]->filterDesktops, SIGNAL(clicked(bool)), SLOT(changed()));
+ connect(ui[i]->currentDesktop, SIGNAL(clicked(bool)), SLOT(changed()));
+ connect(ui[i]->otherDesktops, SIGNAL(clicked(bool)), SLOT(changed()));
+
+ connect(ui[i]->filterActivities, SIGNAL(clicked(bool)), SLOT(changed()));
+ connect(ui[i]->currentActivity, SIGNAL(clicked(bool)), SLOT(changed()));
+ connect(ui[i]->otherActivities, SIGNAL(clicked(bool)), SLOT(changed()));
+
+ connect(ui[i]->filterScreens, SIGNAL(clicked(bool)), SLOT(changed()));
+ if (QApplication::desktop()->screenCount() < 2) {
+ ui[i]->filterScreens->hide();
+ ui[i]->screenFilter->hide();
+ } else {
+ connect(ui[i]->currentScreen, SIGNAL(clicked(bool)), SLOT(changed()));
+ connect(ui[i]->otherScreens, SIGNAL(clicked(bool)), SLOT(changed()));
+ }
+
+ connect(ui[i]->oneAppWindow, SIGNAL(clicked(bool)), SLOT(changed()));
+ connect(ui[i]->filterMinimization, SIGNAL(clicked(bool)), SLOT(changed()));
+ connect(ui[i]->visibleWindows, SIGNAL(clicked(bool)), SLOT(changed()));
+ connect(ui[i]->hiddenWindows, SIGNAL(clicked(bool)), SLOT(changed()));
+ connect(ui[i]->ghns, SIGNAL(clicked(bool)), SLOT(slotGHNS()));
+ }
+
+ // check focus policy - we don't offer configs for unreasonable focus policies
+ KConfigGroup config(m_config, "Windows");
+ QString policy = config.readEntry("FocusPolicy", "ClickToFocus");
+ if ((policy == "FocusUnderMouse") || (policy == "FocusStrictlyUnderMouse")) {
+ tabWidget->setEnabled(false);
+ infoLabel->show();
+ } else
+ infoLabel->hide();
+}
+
+KWinTabBoxConfig::~KWinTabBoxConfig()
+{
+}
+
+void KWinTabBoxConfig::initLayoutLists()
+{
// search the effect names
// TODO: way to recognize if a effect is not found
KServiceTypeTrader* trader = KServiceTypeTrader::self();
@@ -138,61 +198,22 @@ KWinTabBoxConfig::KWinTabBoxConfig(QWidget* parent, const QVariantList& args)
}
KWinTabBoxConfigForm *ui[2] = { m_primaryTabBoxUi, m_alternativeTabBoxUi };
- for (int i = 0; i < 2; ++i) {
+ for (int i=0; i<2; ++i) {
+ int index = ui[i]->effectCombo->currentIndex();
+ QVariant data = ui[i]->effectCombo->itemData(index);
+ ui[i]->effectCombo->clear();
ui[i]->effectCombo->addItem(coverswitch);
ui[i]->effectCombo->addItem(flipswitch);
for (int j = 0; j < layoutNames.count(); ++j) {
ui[i]->effectCombo->addItem(layoutNames[j], layoutPlugins[j]);
ui[i]->effectCombo->setItemData(ui[i]->effectCombo->count() - 1, layoutPaths[j], Qt::UserRole+1);
}
-
- ui[i]->effectConfigButton->setIcon(KIcon("view-preview"));
-
- connect(ui[i]->highlightWindowCheck, SIGNAL(clicked(bool)), SLOT(changed()));
- connect(ui[i]->showOutlineCheck, SIGNAL(clicked(bool)), SLOT(changed()));
- connect(ui[i]->showTabBox, SIGNAL(clicked(bool)), SLOT(tabBoxToggled(bool)));
- connect(ui[i]->effectCombo, SIGNAL(currentIndexChanged(int)), SLOT(changed()));
- connect(ui[i]->effectCombo, SIGNAL(currentIndexChanged(int)), SLOT(effectSelectionChanged(int)));
- connect(ui[i]->effectConfigButton, SIGNAL(clicked(bool)), SLOT(configureEffectClicked()));
-
- connect(ui[i]->switchingModeCombo, SIGNAL(currentIndexChanged(int)), SLOT(changed()));
- connect(ui[i]->showDesktop, SIGNAL(clicked(bool)), SLOT(changed()));
-
- connect(ui[i]->filterDesktops, SIGNAL(clicked(bool)), SLOT(changed()));
- connect(ui[i]->currentDesktop, SIGNAL(clicked(bool)), SLOT(changed()));
- connect(ui[i]->otherDesktops, SIGNAL(clicked(bool)), SLOT(changed()));
-
- connect(ui[i]->filterActivities, SIGNAL(clicked(bool)), SLOT(changed()));
- connect(ui[i]->currentActivity, SIGNAL(clicked(bool)), SLOT(changed()));
- connect(ui[i]->otherActivities, SIGNAL(clicked(bool)), SLOT(changed()));
-
- connect(ui[i]->filterScreens, SIGNAL(clicked(bool)), SLOT(changed()));
- if (QApplication::desktop()->screenCount() < 2) {
- ui[i]->filterScreens->hide();
- ui[i]->screenFilter->hide();
- } else {
- connect(ui[i]->currentScreen, SIGNAL(clicked(bool)), SLOT(changed()));
- connect(ui[i]->otherScreens, SIGNAL(clicked(bool)), SLOT(changed()));
+ if (data.isValid()) {
+ ui[i]->effectCombo->setCurrentIndex(ui[i]->effectCombo->findData(data));
+ } else if (index != -1) {
+ ui[i]->effectCombo->setCurrentIndex(index);
}
-
- connect(ui[i]->oneAppWindow, SIGNAL(clicked(bool)), SLOT(changed()));
- connect(ui[i]->filterMinimization, SIGNAL(clicked(bool)), SLOT(changed()));
- connect(ui[i]->visibleWindows, SIGNAL(clicked(bool)), SLOT(changed()));
- connect(ui[i]->hiddenWindows, SIGNAL(clicked(bool)), SLOT(changed()));
}
-
- // check focus policy - we don't offer configs for unreasonable focus policies
- KConfigGroup config(m_config, "Windows");
- QString policy = config.readEntry("FocusPolicy", "ClickToFocus");
- if ((policy == "FocusUnderMouse") || (policy == "FocusStrictlyUnderMouse")) {
- tabWidget->setEnabled(false);
- infoLabel->show();
- } else
- infoLabel->hide();
-}
-
-KWinTabBoxConfig::~KWinTabBoxConfig()
-{
}
void KWinTabBoxConfig::load()
@@ -541,4 +562,15 @@ void KWinTabBoxConfig::shortcutChanged(const QKeySequence &seq)
m_actionCollection->writeSettings();
}
+void KWinTabBoxConfig::slotGHNS()
+{
+ QPointer downloadDialog = new KNS3::DownloadDialog("kwinswitcher.knsrc", this);
+ if (downloadDialog->exec() == KDialog::Accepted) {
+ if (!downloadDialog->changedEntries().isEmpty()) {
+ initLayoutLists();
+ }
+ }
+ delete downloadDialog;
+}
+
} // namespace
diff --git a/kcmkwin/kwintabbox/main.h b/kcmkwin/kwintabbox/main.h
index df84af69a5..ff926b4bfb 100644
--- a/kcmkwin/kwintabbox/main.h
+++ b/kcmkwin/kwintabbox/main.h
@@ -66,11 +66,13 @@ private slots:
void configureEffectClicked();
void tabBoxToggled(bool on);
void shortcutChanged(const QKeySequence &seq);
+ void slotGHNS();
private:
void updateUiFromConfig(KWinTabBoxConfigForm* ui, const TabBox::TabBoxConfig& config);
void updateConfigFromUi(const KWinTabBoxConfigForm* ui, TabBox::TabBoxConfig& config);
void loadConfig(const KConfigGroup& config, KWin::TabBox::TabBoxConfig& tabBoxConfig);
void saveConfig(KConfigGroup& config, const KWin::TabBox::TabBoxConfig& tabBoxConfig);
+ void initLayoutLists();
private:
enum Mode {
diff --git a/kcmkwin/kwintabbox/main.ui b/kcmkwin/kwintabbox/main.ui
index 8ae9d848ea..e1393f76c0 100644
--- a/kcmkwin/kwintabbox/main.ui
+++ b/kcmkwin/kwintabbox/main.ui
@@ -562,6 +562,13 @@
+ -
+
+
+ Get New Window Switcher Layout
+
+
+