From ea5c84dd35a4350a5a37de3d6e46942f096961c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Gr=C3=A4=C3=9Flin?= Date: Wed, 9 May 2012 18:43:32 +0200 Subject: [PATCH] GHNS support for Window Switcher Layouts Next to the preview/configure button a GHNS button is included as a simple button with icon only to not break the layout. Currently the button is not shown as the category on kde-look has not yet been created yet. CCBUG: 297636 REVIEW: 104894 --- kcmkwin/kwintabbox/CMakeLists.txt | 3 +- kcmkwin/kwintabbox/kwinswitcher.knsrc | 5 + kcmkwin/kwintabbox/layoutpreview.cpp | 1 - kcmkwin/kwintabbox/main.cpp | 126 ++++++++++++++++---------- kcmkwin/kwintabbox/main.h | 2 + kcmkwin/kwintabbox/main.ui | 7 ++ 6 files changed, 95 insertions(+), 49 deletions(-) create mode 100644 kcmkwin/kwintabbox/kwinswitcher.knsrc 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 + + +