Share implementation for adding shortcut (keyboard/pointer/axis)
Using templated function instead of copy and pasted code.
This commit is contained in:
parent
19c5a06fe9
commit
c5def47bf5
2 changed files with 21 additions and 32 deletions
|
@ -58,10 +58,11 @@ GlobalShortcut::~GlobalShortcut()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
InternalGlobalShortcut::InternalGlobalShortcut(const QKeySequence &shortcut, QAction *action)
|
InternalGlobalShortcut::InternalGlobalShortcut(Qt::KeyboardModifiers modifiers, const QKeySequence &shortcut, QAction *action)
|
||||||
: GlobalShortcut(shortcut)
|
: GlobalShortcut(shortcut)
|
||||||
, m_action(action)
|
, m_action(action)
|
||||||
{
|
{
|
||||||
|
Q_UNUSED(modifiers)
|
||||||
}
|
}
|
||||||
|
|
||||||
InternalGlobalShortcut::InternalGlobalShortcut(Qt::KeyboardModifiers pointerButtonModifiers, Qt::MouseButtons pointerButtons, QAction *action)
|
InternalGlobalShortcut::InternalGlobalShortcut(Qt::KeyboardModifiers pointerButtonModifiers, Qt::MouseButtons pointerButtons, QAction *action)
|
||||||
|
@ -133,6 +134,21 @@ void GlobalShortcutsManager::objectDeleted(QObject *object)
|
||||||
handleDestroyedAction(object, m_axisShortcuts);
|
handleDestroyedAction(object, m_axisShortcuts);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <typename T, typename R>
|
||||||
|
void addShortcut(T &shortcuts, QAction *action, Qt::KeyboardModifiers modifiers, R value)
|
||||||
|
{
|
||||||
|
GlobalShortcut *cut = new InternalGlobalShortcut(modifiers, value, action);
|
||||||
|
auto it = shortcuts.find(modifiers);
|
||||||
|
if (it != shortcuts.end()) {
|
||||||
|
// TODO: check if shortcut already exists
|
||||||
|
(*it).insert(value, cut);
|
||||||
|
} else {
|
||||||
|
QHash<R, GlobalShortcut*> s;
|
||||||
|
s.insert(value, cut);
|
||||||
|
shortcuts.insert(modifiers, s);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void GlobalShortcutsManager::registerShortcut(QAction *action, const QKeySequence &shortcut)
|
void GlobalShortcutsManager::registerShortcut(QAction *action, const QKeySequence &shortcut)
|
||||||
{
|
{
|
||||||
QKeySequence s = getShortcutForAction(KWIN_NAME, action->objectName(), shortcut);
|
QKeySequence s = getShortcutForAction(KWIN_NAME, action->objectName(), shortcut);
|
||||||
|
@ -158,46 +174,19 @@ void GlobalShortcutsManager::registerShortcut(QAction *action, const QKeySequenc
|
||||||
if (!KKeyServer::keyQtToSymX(keys, &keysym)) {
|
if (!KKeyServer::keyQtToSymX(keys, &keysym)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
GlobalShortcut *cut = new InternalGlobalShortcut(s, action);
|
addShortcut(m_shortcuts, action, mods, static_cast<uint32_t>(keysym));
|
||||||
auto it = m_shortcuts.find(mods);
|
|
||||||
if (it != m_shortcuts.end()) {
|
|
||||||
// TODO: check if key already exists?
|
|
||||||
(*it).insert(keysym, cut);
|
|
||||||
} else {
|
|
||||||
QHash<uint32_t, GlobalShortcut*> shortcuts;
|
|
||||||
shortcuts.insert(keysym, cut);
|
|
||||||
m_shortcuts.insert(mods, shortcuts);
|
|
||||||
}
|
|
||||||
connect(action, &QAction::destroyed, this, &GlobalShortcutsManager::objectDeleted);
|
connect(action, &QAction::destroyed, this, &GlobalShortcutsManager::objectDeleted);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GlobalShortcutsManager::registerPointerShortcut(QAction *action, Qt::KeyboardModifiers modifiers, Qt::MouseButtons pointerButtons)
|
void GlobalShortcutsManager::registerPointerShortcut(QAction *action, Qt::KeyboardModifiers modifiers, Qt::MouseButtons pointerButtons)
|
||||||
{
|
{
|
||||||
GlobalShortcut *cut = new InternalGlobalShortcut(modifiers, pointerButtons, action);
|
addShortcut(m_pointerShortcuts, action, modifiers, pointerButtons);
|
||||||
auto it = m_pointerShortcuts.find(modifiers);
|
|
||||||
if (it != m_pointerShortcuts.end()) {
|
|
||||||
// TODO: check if shortcut already exists
|
|
||||||
(*it).insert(pointerButtons, cut);
|
|
||||||
} else {
|
|
||||||
QHash<Qt::MouseButtons, GlobalShortcut*> shortcuts;
|
|
||||||
shortcuts.insert(pointerButtons, cut);
|
|
||||||
m_pointerShortcuts.insert(modifiers, shortcuts);
|
|
||||||
}
|
|
||||||
connect(action, &QAction::destroyed, this, &GlobalShortcutsManager::objectDeleted);
|
connect(action, &QAction::destroyed, this, &GlobalShortcutsManager::objectDeleted);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GlobalShortcutsManager::registerAxisShortcut(QAction *action, Qt::KeyboardModifiers modifiers, PointerAxisDirection axis)
|
void GlobalShortcutsManager::registerAxisShortcut(QAction *action, Qt::KeyboardModifiers modifiers, PointerAxisDirection axis)
|
||||||
{
|
{
|
||||||
GlobalShortcut *cut = new InternalGlobalShortcut(modifiers, axis, action);
|
addShortcut(m_axisShortcuts, action, modifiers, axis);
|
||||||
auto it = m_axisShortcuts.find(modifiers);
|
|
||||||
if (it != m_axisShortcuts.end()) {
|
|
||||||
// TODO: check if shortcut already exists
|
|
||||||
(*it).insert(axis, cut);
|
|
||||||
} else {
|
|
||||||
QHash<PointerAxisDirection, GlobalShortcut*> shortcuts;
|
|
||||||
shortcuts.insert(axis, cut);
|
|
||||||
m_axisShortcuts.insert(modifiers, shortcuts);
|
|
||||||
}
|
|
||||||
connect(action, &QAction::destroyed, this, &GlobalShortcutsManager::objectDeleted);
|
connect(action, &QAction::destroyed, this, &GlobalShortcutsManager::objectDeleted);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -131,7 +131,7 @@ private:
|
||||||
class InternalGlobalShortcut : public GlobalShortcut
|
class InternalGlobalShortcut : public GlobalShortcut
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
InternalGlobalShortcut(const QKeySequence &shortcut, QAction *action);
|
InternalGlobalShortcut(Qt::KeyboardModifiers modifiers, const QKeySequence &shortcut, QAction *action);
|
||||||
InternalGlobalShortcut(Qt::KeyboardModifiers pointerButtonModifiers, Qt::MouseButtons pointerButtons, QAction *action);
|
InternalGlobalShortcut(Qt::KeyboardModifiers pointerButtonModifiers, Qt::MouseButtons pointerButtons, QAction *action);
|
||||||
InternalGlobalShortcut(Qt::KeyboardModifiers axisModifiers, PointerAxisDirection axis, QAction *action);
|
InternalGlobalShortcut(Qt::KeyboardModifiers axisModifiers, PointerAxisDirection axis, QAction *action);
|
||||||
virtual ~InternalGlobalShortcut();
|
virtual ~InternalGlobalShortcut();
|
||||||
|
|
Loading…
Reference in a new issue