Expose more default window management shortcuts

Summary:
KWin's window management powers are not as discoverable as they could be--particularly tiling, which by default has no visible UI and no keyboard shortcuts. Resolving this issue is highly relevant to {T6831}.

This patch re-assigns the {key Meta arrowkeys} shortcuts that are currently used for `move zoomed area` (which are pretty esoteric, infrequently-used actions), adding {key ctrl} to their shortcuts. This allows us to use their valuable {key Meta arrowkeys} for more useful and commonly-used window management actions:
- {key Meta Left}: quick tile window to the left
- {key Meta Right}: quick tile window to the right
- {key Meta Up}: quick-tile window to the top
- {key Meta Down}: quick-tile the window to the bottom

The patch also sets some default shortctuts for minimize and maximize:
- {key Meta PageDown}: minimize window
- {key Meta PageUp}: maximize/de-maximize the window

Test Plan:
Do a clean build
`make test` (no new test failures)
Reboot
Create and log into a new user account

- {key meta up} tiles the active window to the top
- {key meta down} tiles the active window to the bottom
- {key meta left} tiles the active window to the left
- {key meta right} tiles the active window to the right
- {key meta PageDown} minimizes the active window
- {key meta PageUp} maximizes and de-maximizes the active window
- {key meta ctrl up} moves the zoomed area up
- {key meta ctrl down} moves the zoomed area down
- {key meta ctrl left} moves the zoomed area to the left
- {key meta ctrl right} moves the zoomed area to the right

Reviewers: #kwin, #plasma, romangg

Reviewed By: #kwin, #plasma, romangg

Subscribers: mart, romangg, broulik, jnoack, kwin

Tags: #kwin

Differential Revision: https://phabricator.kde.org/D11377
This commit is contained in:
Nathaniel Graham 2018-03-15 22:37:48 -06:00
parent 4a3104bf27
commit f1f97bb395
3 changed files with 26 additions and 26 deletions

View file

@ -82,33 +82,33 @@ ZoomEffect::ZoomEffect()
a = new QAction(this);
a->setObjectName(QStringLiteral("MoveZoomLeft"));
a->setText(i18n("Move Zoomed Area to Left"));
KGlobalAccel::self()->setDefaultShortcut(a, QList<QKeySequence>() << Qt::META + Qt::Key_Left);
KGlobalAccel::self()->setShortcut(a, QList<QKeySequence>() << Qt::META + Qt::Key_Left);
effects->registerGlobalShortcut(Qt::META + Qt::Key_Left, a);
KGlobalAccel::self()->setDefaultShortcut(a, QList<QKeySequence>() << Qt::META + Qt::CTRL + Qt::Key_Left);
KGlobalAccel::self()->setShortcut(a, QList<QKeySequence>() << Qt::META + Qt::CTRL + Qt::Key_Left);
effects->registerGlobalShortcut(Qt::META + Qt::CTRL + Qt::Key_Left, a);
connect(a, SIGNAL(triggered(bool)), this, SLOT(moveZoomLeft()));
a = new QAction(this);
a->setObjectName(QStringLiteral("MoveZoomRight"));
a->setText(i18n("Move Zoomed Area to Right"));
KGlobalAccel::self()->setDefaultShortcut(a, QList<QKeySequence>() << Qt::META + Qt::Key_Right);
KGlobalAccel::self()->setShortcut(a, QList<QKeySequence>() << Qt::META + Qt::Key_Right);
effects->registerGlobalShortcut(Qt::META + Qt::Key_Right, a);
KGlobalAccel::self()->setDefaultShortcut(a, QList<QKeySequence>() << Qt::META + Qt::CTRL + Qt::Key_Right);
KGlobalAccel::self()->setShortcut(a, QList<QKeySequence>() << Qt::META + Qt::CTRL + Qt::Key_Right);
effects->registerGlobalShortcut(Qt::META + Qt::CTRL + Qt::Key_Right, a);
connect(a, SIGNAL(triggered(bool)), this, SLOT(moveZoomRight()));
a = new QAction(this);
a->setObjectName(QStringLiteral("MoveZoomUp"));
a->setText(i18n("Move Zoomed Area Upwards"));
KGlobalAccel::self()->setDefaultShortcut(a, QList<QKeySequence>() << Qt::META + Qt::Key_Up);
KGlobalAccel::self()->setShortcut(a, QList<QKeySequence>() << Qt::META + Qt::Key_Up);
effects->registerGlobalShortcut(Qt::META + Qt::Key_Up, a);
KGlobalAccel::self()->setDefaultShortcut(a, QList<QKeySequence>() << Qt::META + Qt::CTRL + Qt::Key_Up);
KGlobalAccel::self()->setShortcut(a, QList<QKeySequence>() << Qt::META + Qt::CTRL + Qt::Key_Up);
effects->registerGlobalShortcut(Qt::META + Qt::CTRL + Qt::Key_Up, a);
connect(a, SIGNAL(triggered(bool)), this, SLOT(moveZoomUp()));
a = new QAction(this);
a->setObjectName(QStringLiteral("MoveZoomDown"));
a->setText(i18n("Move Zoomed Area Downwards"));
KGlobalAccel::self()->setDefaultShortcut(a, QList<QKeySequence>() << Qt::META + Qt::Key_Down);
KGlobalAccel::self()->setShortcut(a, QList<QKeySequence>() << Qt::META + Qt::Key_Down);
effects->registerGlobalShortcut(Qt::META + Qt::Key_Down, a);
KGlobalAccel::self()->setDefaultShortcut(a, QList<QKeySequence>() << Qt::META + Qt::CTRL + Qt::Key_Down);
KGlobalAccel::self()->setShortcut(a, QList<QKeySequence>() << Qt::META + Qt::CTRL + Qt::Key_Down);
effects->registerGlobalShortcut(Qt::META + Qt::CTRL + Qt::Key_Down, a);
connect(a, SIGNAL(triggered(bool)), this, SLOT(moveZoomDown()));
// TODO: these two actions don't belong into the effect. They need to be moved into KWin core

View file

@ -86,29 +86,29 @@ ZoomEffectConfig::ZoomEffectConfig(QWidget* parent, const QVariantList& args) :
a->setIcon(QIcon::fromTheme(QStringLiteral("go-previous")));
a->setText(i18n("Move Left"));
a->setProperty("isConfigurationAction", true);
KGlobalAccel::self()->setDefaultShortcut(a, QList<QKeySequence>() << Qt::META + Qt::Key_Left);
KGlobalAccel::self()->setShortcut(a, QList<QKeySequence>() << Qt::META + Qt::Key_Left);
KGlobalAccel::self()->setDefaultShortcut(a, QList<QKeySequence>() << Qt::META + Qt::CTRL + Qt::Key_Left);
KGlobalAccel::self()->setShortcut(a, QList<QKeySequence>() << Qt::META + Qt::CTRL + Qt::Key_Left);
a = actionCollection->addAction(QStringLiteral("MoveZoomRight"));
a->setIcon(QIcon::fromTheme(QStringLiteral("go-next")));
a->setText(i18n("Move Right"));
a->setProperty("isConfigurationAction", true);
KGlobalAccel::self()->setDefaultShortcut(a, QList<QKeySequence>() << Qt::META + Qt::Key_Right);
KGlobalAccel::self()->setShortcut(a, QList<QKeySequence>() << Qt::META + Qt::Key_Right);
KGlobalAccel::self()->setDefaultShortcut(a, QList<QKeySequence>() << Qt::META + Qt::CTRL + Qt::Key_Right);
KGlobalAccel::self()->setShortcut(a, QList<QKeySequence>() << Qt::META + Qt::CTRL + Qt::Key_Right);
a = actionCollection->addAction(QStringLiteral("MoveZoomUp"));
a->setIcon(QIcon::fromTheme(QStringLiteral("go-up")));
a->setText(i18n("Move Up"));
a->setProperty("isConfigurationAction", true);
KGlobalAccel::self()->setDefaultShortcut(a, QList<QKeySequence>() << Qt::META + Qt::Key_Up);
KGlobalAccel::self()->setShortcut(a, QList<QKeySequence>() << Qt::META + Qt::Key_Up);
KGlobalAccel::self()->setDefaultShortcut(a, QList<QKeySequence>() << Qt::META + Qt::CTRL + Qt::Key_Up);
KGlobalAccel::self()->setShortcut(a, QList<QKeySequence>() << Qt::META + Qt::CTRL + Qt::Key_Up);
a = actionCollection->addAction(QStringLiteral("MoveZoomDown"));
a->setIcon(QIcon::fromTheme(QStringLiteral("go-down")));
a->setText(i18n("Move Down"));
a->setProperty("isConfigurationAction", true);
KGlobalAccel::self()->setDefaultShortcut(a, QList<QKeySequence>() << Qt::META + Qt::Key_Down);
KGlobalAccel::self()->setShortcut(a, QList<QKeySequence>() << Qt::META + Qt::Key_Down);
KGlobalAccel::self()->setDefaultShortcut(a, QList<QKeySequence>() << Qt::META + Qt::CTRL + Qt::Key_Down);
KGlobalAccel::self()->setShortcut(a, QList<QKeySequence>() << Qt::META + Qt::CTRL + Qt::Key_Down);
a = actionCollection->addAction(QStringLiteral("MoveMouseToFocus"));
a->setIcon(QIcon::fromTheme(QStringLiteral("view-restore")));

View file

@ -55,13 +55,13 @@ DEF(I18N_NOOP("Window Operations Menu"),
DEF2("Window Close", I18N_NOOP("Close Window"),
Qt::ALT + Qt::Key_F4, slotWindowClose);
DEF2("Window Maximize", I18N_NOOP("Maximize Window"),
0, slotWindowMaximize);
Qt::META + Qt::Key_PageUp, slotWindowMaximize);
DEF2("Window Maximize Vertical", I18N_NOOP("Maximize Window Vertically"),
0, slotWindowMaximizeVertical);
DEF2("Window Maximize Horizontal", I18N_NOOP("Maximize Window Horizontally"),
0, slotWindowMaximizeHorizontal);
DEF2("Window Minimize", I18N_NOOP("Minimize Window"),
0, slotWindowMinimize);
Qt::META + Qt::Key_PageDown, slotWindowMinimize);
DEF2("Window Shade", I18N_NOOP("Shade Window"),
0, slotWindowShade);
DEF2("Window Move", I18N_NOOP("Move Window"),
@ -103,13 +103,13 @@ DEF2("Window Shrink Horizontal", I18N_NOOP("Pack Shrink Window Horizontally"),
DEF2("Window Shrink Vertical", I18N_NOOP("Pack Shrink Window Vertically"),
0, slotWindowShrinkVertical);
DEF4("Window Quick Tile Left", I18N_NOOP("Quick Tile Window to the Left"),
0, std::bind(&Workspace::quickTileWindow, this, QuickTileFlag::Left));
Qt::META + Qt::Key_Left, std::bind(&Workspace::quickTileWindow, this, QuickTileFlag::Left));
DEF4("Window Quick Tile Right", I18N_NOOP("Quick Tile Window to the Right"),
0, std::bind(&Workspace::quickTileWindow, this, QuickTileFlag::Right));
Qt::META + Qt::Key_Right, std::bind(&Workspace::quickTileWindow, this, QuickTileFlag::Right));
DEF4("Window Quick Tile Top", I18N_NOOP("Quick Tile Window to the Top"),
0, std::bind(&Workspace::quickTileWindow, this, QuickTileFlag::Top));
Qt::META + Qt::Key_Up, std::bind(&Workspace::quickTileWindow, this, QuickTileFlag::Top));
DEF4("Window Quick Tile Bottom", I18N_NOOP("Quick Tile Window to the Bottom"),
0, std::bind(&Workspace::quickTileWindow, this, QuickTileFlag::Bottom));
Qt::META + Qt::Key_Down, std::bind(&Workspace::quickTileWindow, this, QuickTileFlag::Bottom));
DEF4("Window Quick Tile Top Left", I18N_NOOP("Quick Tile Window to the Top Left"),
0, std::bind(&Workspace::quickTileWindow, this, QuickTileFlag::Top | QuickTileFlag::Left));
DEF4("Window Quick Tile Bottom Left", I18N_NOOP("Quick Tile Window to the Bottom Left"),