diff --git a/kwinbindings.cpp b/kwinbindings.cpp
index 0a2c1fc29..06ed2e8ec 100644
--- a/kwinbindings.cpp
+++ b/kwinbindings.cpp
@@ -25,28 +25,35 @@ along with this program. If not, see .
// Some shortcuts have Tarzan-speech like names, they need extra
// normal human descriptions with DEF2() the others can use DEF()
+// new DEF3 allows to pass data to the action, replacing the %1 argument in the name
+
#ifndef NOSLOTS
-# define DEF2( name, descr, key, fnSlot ) \
- a = actionCollection->addAction( name ); \
- a->setText( i18n(descr) ); \
- qobject_cast( a )->setGlobalShortcut(KShortcut(key)); \
- connect(a, SIGNAL(triggered(bool)), SLOT(fnSlot))
-# define DEF( name, key, fnSlot ) \
- a = actionCollection->addAction( name ); \
- a->setText( i18n(name) ); \
- qobject_cast( a )->setGlobalShortcut(KShortcut(key)); \
- connect(a, SIGNAL(triggered(bool)), SLOT(fnSlot))
+#define KWIN_CONNECT(_FNSLOT_) connect(a, SIGNAL(triggered(bool)), SLOT(_FNSLOT_));
#else
-# define DEF2( name, descr, key, fnSlot ) \
- a = actionCollection->addAction( name ); \
- a->setText( i18n(descr) ); \
- qobject_cast( a )->setGlobalShortcut(KShortcut(key));
-# define DEF( name, key, fnSlot ) \
- a = actionCollection->addAction( name ); \
- a->setText( i18n(name) ); \
- qobject_cast( a )->setGlobalShortcut(KShortcut(key));
+#define KWIN_CONNECT(_FNSLOT_) /*noop*/
#endif
+#define DEF2( name, descr, key, fnSlot ) \
+ a = actionCollection->addAction( name ); \
+ a->setText( i18n(descr) ); \
+ qobject_cast( a )->setGlobalShortcut(KShortcut(key)); \
+ KWIN_CONNECT(fnSlot)
+
+#define DEF4( name, descr, key, fnSlot, value ) \
+ DEF2(name, descr, key, fnSlot) \
+ a->setData(value);
+
+#define DEF( name, key, fnSlot ) \
+ DEF2(name, name, key, fnSlot)
+
+#define DEF3( name, key, fnSlot, value ) \
+ a = actionCollection->addAction( QString(name).arg(value) ); \
+ a->setText( i18n(name, value) ); \
+ qobject_cast( a )->setGlobalShortcut(KShortcut(key)); \
+ a->setData(value); \
+ KWIN_CONNECT(fnSlot)
+
+
a = actionCollection->addAction("Program:kwin");
a->setText(i18n("System"));
@@ -143,79 +150,44 @@ a = actionCollection->addAction("Group:Window Desktop");
a->setText(i18n("Window & Desktop"));
DEF2("Window On All Desktops", I18N_NOOP("Keep Window on All Desktops"),
0, slotWindowOnAllDesktops());
-DEF(I18N_NOOP("Window to Desktop 1"), 0, slotWindowToDesktop1());
-DEF(I18N_NOOP("Window to Desktop 2"), 0, slotWindowToDesktop2());
-DEF(I18N_NOOP("Window to Desktop 3"), 0, slotWindowToDesktop3());
-DEF(I18N_NOOP("Window to Desktop 4"), 0, slotWindowToDesktop4());
-DEF(I18N_NOOP("Window to Desktop 5"), 0, slotWindowToDesktop5());
-DEF(I18N_NOOP("Window to Desktop 6"), 0, slotWindowToDesktop6());
-DEF(I18N_NOOP("Window to Desktop 7"), 0, slotWindowToDesktop7());
-DEF(I18N_NOOP("Window to Desktop 8"), 0, slotWindowToDesktop8());
-DEF(I18N_NOOP("Window to Desktop 9"), 0, slotWindowToDesktop9());
-DEF(I18N_NOOP("Window to Desktop 10"), 0, slotWindowToDesktop10());
-DEF(I18N_NOOP("Window to Desktop 11"), 0, slotWindowToDesktop11());
-DEF(I18N_NOOP("Window to Desktop 12"), 0, slotWindowToDesktop12());
-DEF(I18N_NOOP("Window to Desktop 13"), 0, slotWindowToDesktop13());
-DEF(I18N_NOOP("Window to Desktop 14"), 0, slotWindowToDesktop14());
-DEF(I18N_NOOP("Window to Desktop 15"), 0, slotWindowToDesktop15());
-DEF(I18N_NOOP("Window to Desktop 16"), 0, slotWindowToDesktop16());
-DEF(I18N_NOOP("Window to Desktop 17"), 0, slotWindowToDesktop17());
-DEF(I18N_NOOP("Window to Desktop 18"), 0, slotWindowToDesktop18());
-DEF(I18N_NOOP("Window to Desktop 19"), 0, slotWindowToDesktop19());
-DEF(I18N_NOOP("Window to Desktop 20"), 0, slotWindowToDesktop20());
+
+for (int i = 1; i < 21; ++i) {
+ DEF3(I18N_NOOP("Window to Desktop %1"), 0, slotWindowToDesktop(), i);
+}
DEF(I18N_NOOP("Window to Next Desktop"), 0, slotWindowToNextDesktop());
DEF(I18N_NOOP("Window to Previous Desktop"), 0, slotWindowToPreviousDesktop());
DEF(I18N_NOOP("Window One Desktop to the Right"), 0, slotWindowToDesktopRight());
DEF(I18N_NOOP("Window One Desktop to the Left"), 0, slotWindowToDesktopLeft());
DEF(I18N_NOOP("Window One Desktop Up"), 0, slotWindowToDesktopUp());
DEF(I18N_NOOP("Window One Desktop Down"), 0, slotWindowToDesktopDown());
-DEF(I18N_NOOP("Window to Screen 0"), 0, slotWindowToScreen0());
-DEF(I18N_NOOP("Window to Screen 1"), 0, slotWindowToScreen1());
-DEF(I18N_NOOP("Window to Screen 2"), 0, slotWindowToScreen2());
-DEF(I18N_NOOP("Window to Screen 3"), 0, slotWindowToScreen3());
-DEF(I18N_NOOP("Window to Screen 4"), 0, slotWindowToScreen4());
-DEF(I18N_NOOP("Window to Screen 5"), 0, slotWindowToScreen5());
-DEF(I18N_NOOP("Window to Screen 6"), 0, slotWindowToScreen6());
-DEF(I18N_NOOP("Window to Screen 7"), 0, slotWindowToScreen7());
+
+for (int i = 0; i < 8; ++i) {
+ DEF3(I18N_NOOP("Window to Screen %1"), 0, slotWindowToScreen(), i);
+}
DEF(I18N_NOOP("Window to Next Screen"), 0, slotWindowToNextScreen());
DEF(I18N_NOOP("Show Desktop"), 0, slotToggleShowDesktop());
a = actionCollection->addAction("Group:Desktop Switching");
a->setText(i18n("Desktop Switching"));
-DEF(I18N_NOOP("Switch to Desktop 1"), Qt::CTRL + Qt::Key_F1, slotSwitchToDesktop1());
-DEF(I18N_NOOP("Switch to Desktop 2"), Qt::CTRL + Qt::Key_F2, slotSwitchToDesktop2());
-DEF(I18N_NOOP("Switch to Desktop 3"), Qt::CTRL + Qt::Key_F3, slotSwitchToDesktop3());
-DEF(I18N_NOOP("Switch to Desktop 4"), Qt::CTRL + Qt::Key_F4, slotSwitchToDesktop4());
-DEF(I18N_NOOP("Switch to Desktop 5"), 0, slotSwitchToDesktop5());
-DEF(I18N_NOOP("Switch to Desktop 6"), 0, slotSwitchToDesktop6());
-DEF(I18N_NOOP("Switch to Desktop 7"), 0, slotSwitchToDesktop7());
-DEF(I18N_NOOP("Switch to Desktop 8"), 0, slotSwitchToDesktop8());
-DEF(I18N_NOOP("Switch to Desktop 9"), 0, slotSwitchToDesktop9());
-DEF(I18N_NOOP("Switch to Desktop 10"), 0, slotSwitchToDesktop10());
-DEF(I18N_NOOP("Switch to Desktop 11"), 0, slotSwitchToDesktop11());
-DEF(I18N_NOOP("Switch to Desktop 12"), 0, slotSwitchToDesktop12());
-DEF(I18N_NOOP("Switch to Desktop 13"), 0, slotSwitchToDesktop13());
-DEF(I18N_NOOP("Switch to Desktop 14"), 0, slotSwitchToDesktop14());
-DEF(I18N_NOOP("Switch to Desktop 15"), 0, slotSwitchToDesktop15());
-DEF(I18N_NOOP("Switch to Desktop 16"), 0, slotSwitchToDesktop16());
-DEF(I18N_NOOP("Switch to Desktop 17"), 0, slotSwitchToDesktop17());
-DEF(I18N_NOOP("Switch to Desktop 18"), 0, slotSwitchToDesktop18());
-DEF(I18N_NOOP("Switch to Desktop 19"), 0, slotSwitchToDesktop19());
-DEF(I18N_NOOP("Switch to Desktop 20"), 0, slotSwitchToDesktop20());
+DEF3("Switch to Desktop %1", Qt::CTRL + Qt::Key_F1, slotSwitchToDesktop(), 1);
+DEF3("Switch to Desktop %1", Qt::CTRL + Qt::Key_F2, slotSwitchToDesktop(), 2);
+DEF3("Switch to Desktop %1", Qt::CTRL + Qt::Key_F3, slotSwitchToDesktop(), 3);
+DEF3("Switch to Desktop %1", Qt::CTRL + Qt::Key_F4, slotSwitchToDesktop(), 4);
+for (int i = 5; i < 21; ++i) {
+ DEF3(I18N_NOOP("Switch to Desktop %1"), 0, slotSwitchToDesktop(), i);
+}
+
DEF(I18N_NOOP("Switch to Next Desktop"), 0, slotSwitchDesktopNext());
DEF(I18N_NOOP("Switch to Previous Desktop"), 0, slotSwitchDesktopPrevious());
DEF(I18N_NOOP("Switch One Desktop to the Right"), 0, slotSwitchDesktopRight());
DEF(I18N_NOOP("Switch One Desktop to the Left"), 0, slotSwitchDesktopLeft());
DEF(I18N_NOOP("Switch One Desktop Up"), 0, slotSwitchDesktopUp());
DEF(I18N_NOOP("Switch One Desktop Down"), 0, slotSwitchDesktopDown());
-DEF(I18N_NOOP("Switch to Screen 0"), 0, slotSwitchToScreen0());
-DEF(I18N_NOOP("Switch to Screen 1"), 0, slotSwitchToScreen1());
-DEF(I18N_NOOP("Switch to Screen 2"), 0, slotSwitchToScreen2());
-DEF(I18N_NOOP("Switch to Screen 3"), 0, slotSwitchToScreen3());
-DEF(I18N_NOOP("Switch to Screen 4"), 0, slotSwitchToScreen4());
-DEF(I18N_NOOP("Switch to Screen 5"), 0, slotSwitchToScreen5());
-DEF(I18N_NOOP("Switch to Screen 6"), 0, slotSwitchToScreen6());
-DEF(I18N_NOOP("Switch to Screen 7"), 0, slotSwitchToScreen7());
+
+for (int i = 0; i < 8; ++i) {
+ DEF3(I18N_NOOP("Switch to Screen %1"), 0, slotSwitchToScreen(), i);
+}
+
DEF(I18N_NOOP("Switch to Next Screen"), 0, slotSwitchToNextScreen());
a = actionCollection->addAction("Group:Miscellaneous");
diff --git a/useractions.cpp b/useractions.cpp
index 2cf21b86b..d969def14 100644
--- a/useractions.cpp
+++ b/useractions.cpp
@@ -1166,14 +1166,30 @@ void Workspace::slotSwitchDesktopDown()
setCurrentDesktop(desktop);
}
-void Workspace::slotSwitchToDesktop(int i)
+static int senderValue(QObject *sender)
{
- setCurrentDesktop(i);
+ QAction *act = qobject_cast(sender);
+ bool ok = false; int i = -1;
+ if (act)
+ i = act->data().toUInt(&ok);
+ if (ok)
+ return i;
+ return -1;
+}
+
+void Workspace::slotSwitchToDesktop()
+{
+ const int i = senderValue(sender());
+ if (i > 0)
+ setCurrentDesktop(i);
}
-void Workspace::slotWindowToDesktop(int i)
+void Workspace::slotWindowToDesktop()
{
+ const int i = senderValue(sender());
+ if (i < 1)
+ return;
Client* c = active_popup_client ? active_popup_client : active_client;
if (i >= 1 && i <= numberOfDesktops() && c
&& !c->isDesktop()
@@ -1182,18 +1198,23 @@ void Workspace::slotWindowToDesktop(int i)
sendClientToDesktop(c, i, true);
}
-void Workspace::slotSwitchToScreen(int i)
+void Workspace::slotSwitchToScreen()
{
- setCurrentScreen(i);
+ const int i = senderValue(sender());
+ if (i > -1)
+ setCurrentScreen(i);
}
void Workspace::slotSwitchToNextScreen()
{
- slotSwitchToScreen((activeScreen() + 1) % numScreens());
+ setCurrentScreen((activeScreen() + 1) % numScreens());
}
-void Workspace::slotWindowToScreen(int i)
+void Workspace::slotWindowToScreen()
{
+ const int i = senderValue(sender());
+ if (i < 0)
+ return;
Client* c = active_popup_client ? active_popup_client : active_client;
if (i >= 0 && i <= numScreens() && c
&& !c->isDesktop()
diff --git a/workspace.cpp b/workspace.cpp
index ea1ebb631..e53401841 100644
--- a/workspace.cpp
+++ b/workspace.cpp
@@ -1679,6 +1679,8 @@ void Workspace::setNumberOfDesktops(int n)
*/
void Workspace::sendClientToDesktop(Client* c, int desk, bool dont_activate)
{
+ if (desk < 1 || desk > numberOfDesktops())
+ return;
int old_desktop = c->desktop();
bool was_on_desktop = c->isOnDesktop(desk) || c->isOnAllDesktops();
c->setDesktop(desk);
diff --git a/workspace.h b/workspace.h
index 3f6ad49e6..e6aa196f4 100644
--- a/workspace.h
+++ b/workspace.h
@@ -563,180 +563,13 @@ public slots:
void slotSwitchDesktopUp();
void slotSwitchDesktopDown();
- void slotSwitchToDesktop(int);
- void slotSwitchToDesktop1() {
- return slotSwitchToDesktop(1);
- }
- void slotSwitchToDesktop2() {
- return slotSwitchToDesktop(2);
- }
- void slotSwitchToDesktop3() {
- return slotSwitchToDesktop(3);
- }
- void slotSwitchToDesktop4() {
- return slotSwitchToDesktop(4);
- }
- void slotSwitchToDesktop5() {
- return slotSwitchToDesktop(5);
- }
- void slotSwitchToDesktop6() {
- return slotSwitchToDesktop(6);
- }
- void slotSwitchToDesktop7() {
- return slotSwitchToDesktop(7);
- }
- void slotSwitchToDesktop8() {
- return slotSwitchToDesktop(8);
- }
- void slotSwitchToDesktop9() {
- return slotSwitchToDesktop(9);
- }
- void slotSwitchToDesktop10() {
- return slotSwitchToDesktop(10);
- }
- void slotSwitchToDesktop11() {
- return slotSwitchToDesktop(11);
- }
- void slotSwitchToDesktop12() {
- return slotSwitchToDesktop(12);
- }
- void slotSwitchToDesktop13() {
- return slotSwitchToDesktop(13);
- }
- void slotSwitchToDesktop14() {
- return slotSwitchToDesktop(14);
- }
- void slotSwitchToDesktop15() {
- return slotSwitchToDesktop(15);
- }
- void slotSwitchToDesktop16() {
- return slotSwitchToDesktop(16);
- }
- void slotSwitchToDesktop17() {
- return slotSwitchToDesktop(17);
- }
- void slotSwitchToDesktop18() {
- return slotSwitchToDesktop(18);
- }
- void slotSwitchToDesktop19() {
- return slotSwitchToDesktop(19);
- }
- void slotSwitchToDesktop20() {
- return slotSwitchToDesktop(20);
- }
+ void slotSwitchToDesktop();
//void slotSwitchToWindow( int );
- void slotWindowToDesktop(int);
- void slotWindowToDesktop1() {
- return slotWindowToDesktop(1);
- }
- void slotWindowToDesktop2() {
- return slotWindowToDesktop(2);
- }
- void slotWindowToDesktop3() {
- return slotWindowToDesktop(3);
- }
- void slotWindowToDesktop4() {
- return slotWindowToDesktop(4);
- }
- void slotWindowToDesktop5() {
- return slotWindowToDesktop(5);
- }
- void slotWindowToDesktop6() {
- return slotWindowToDesktop(6);
- }
- void slotWindowToDesktop7() {
- return slotWindowToDesktop(7);
- }
- void slotWindowToDesktop8() {
- return slotWindowToDesktop(8);
- }
- void slotWindowToDesktop9() {
- return slotWindowToDesktop(9);
- }
- void slotWindowToDesktop10() {
- return slotWindowToDesktop(10);
- }
- void slotWindowToDesktop11() {
- return slotWindowToDesktop(11);
- }
- void slotWindowToDesktop12() {
- return slotWindowToDesktop(12);
- }
- void slotWindowToDesktop13() {
- return slotWindowToDesktop(13);
- }
- void slotWindowToDesktop14() {
- return slotWindowToDesktop(14);
- }
- void slotWindowToDesktop15() {
- return slotWindowToDesktop(15);
- }
- void slotWindowToDesktop16() {
- return slotWindowToDesktop(16);
- }
- void slotWindowToDesktop17() {
- return slotWindowToDesktop(17);
- }
- void slotWindowToDesktop18() {
- return slotWindowToDesktop(18);
- }
- void slotWindowToDesktop19() {
- return slotWindowToDesktop(19);
- }
- void slotWindowToDesktop20() {
- return slotWindowToDesktop(20);
- }
+ void slotWindowToDesktop();
+
//void slotWindowToListPosition( int );
- void slotSwitchToScreen(int);
- void slotSwitchToScreen0() {
- return slotSwitchToScreen(0);
- }
- void slotSwitchToScreen1() {
- return slotSwitchToScreen(1);
- }
- void slotSwitchToScreen2() {
- return slotSwitchToScreen(2);
- }
- void slotSwitchToScreen3() {
- return slotSwitchToScreen(3);
- }
- void slotSwitchToScreen4() {
- return slotSwitchToScreen(4);
- }
- void slotSwitchToScreen5() {
- return slotSwitchToScreen(5);
- }
- void slotSwitchToScreen6() {
- return slotSwitchToScreen(6);
- }
- void slotSwitchToScreen7() {
- return slotSwitchToScreen(7);
- }
- void slotWindowToScreen(int);
- void slotWindowToScreen0() {
- return slotWindowToScreen(0);
- }
- void slotWindowToScreen1() {
- return slotWindowToScreen(1);
- }
- void slotWindowToScreen2() {
- return slotWindowToScreen(2);
- }
- void slotWindowToScreen3() {
- return slotWindowToScreen(3);
- }
- void slotWindowToScreen4() {
- return slotWindowToScreen(4);
- }
- void slotWindowToScreen5() {
- return slotWindowToScreen(5);
- }
- void slotWindowToScreen6() {
- return slotWindowToScreen(6);
- }
- void slotWindowToScreen7() {
- return slotWindowToScreen(7);
- }
+ void slotSwitchToScreen();
+ void slotWindowToScreen();
void slotSwitchToNextScreen();
void slotWindowToNextScreen();
void slotToggleShowDesktop();