Change shortcut editor

Remove global shortcuts when blocking actions to not trigger it when editing
This commit is contained in:
Gres 2021-11-11 11:08:01 +03:00
parent 75bfd798c8
commit 26c034e75a
5 changed files with 118 additions and 5 deletions

View File

@ -53,6 +53,7 @@ HEADERS += \
src/service/debug.h \
src/service/geometryutils.h \
src/service/globalaction.h \
src/service/keysequenceedit.h \
src/service/runatsystemstart.h \
src/service/singleapplication.h \
src/service/updates.h \
@ -90,6 +91,7 @@ SOURCES += \
src/service/debug.cpp \
src/service/geometryutils.cpp \
src/service/globalaction.cpp \
src/service/keysequenceedit.cpp \
src/service/runatsystemstart.cpp \
src/service/singleapplication.cpp \
src/service/updates.cpp \

View File

@ -0,0 +1,71 @@
#include "keysequenceedit.h"
#include <QKeyEvent>
namespace service
{
KeySequenceEdit::KeySequenceEdit(QWidget *parent)
: QLineEdit(parent)
{
setPlaceholderText(tr("Press shortcut"));
setFocusPolicy(Qt::StrongFocus);
setAttribute(Qt::WA_MacShowFocusRect, true);
setAttribute(Qt::WA_InputMethodEnabled, false);
}
const QKeySequence &KeySequenceEdit::keySequence() const
{
return current_;
}
void KeySequenceEdit::setKeySequence(const QKeySequence &newKeySequence)
{
setKeySequence(newKeySequence, true);
}
void KeySequenceEdit::setKeySequence(const QKeySequence &current,
bool updateFallback)
{
current_ = current;
if (updateFallback)
fallback_ = current;
setText(current_.toString(QKeySequence::NativeText));
}
bool KeySequenceEdit::event(QEvent *e)
{
switch (e->type()) {
case QEvent::Shortcut: return true;
case QEvent::ShortcutOverride: e->accept(); return true;
default: break;
}
return QWidget::event(e);
}
void KeySequenceEdit::keyPressEvent(QKeyEvent *event)
{
const auto key = event->key();
if (key == Qt::Key_Control || key == Qt::Key_Meta || key == Qt::Key_Alt ||
key == Qt::Key_Shift || key == Qt::Key_unknown) {
return;
}
if (event->key() == Qt::Key_Escape) {
setKeySequence(fallback_, false);
event->accept();
return;
}
if (event->key() == Qt::Key_Backspace) {
setKeySequence({}, false);
event->accept();
return;
}
QKeySequence seq = event->modifiers() + event->key();
setKeySequence(seq, false);
event->accept();
}
} // namespace service

View File

@ -0,0 +1,25 @@
#pragma once
#include <QLineEdit>
namespace service
{
class KeySequenceEdit : public QLineEdit
{
public:
KeySequenceEdit(QWidget *parent = nullptr);
const QKeySequence &keySequence() const;
void setKeySequence(const QKeySequence &newKeySequence);
bool event(QEvent *event) override;
protected:
void keyPressEvent(QKeyEvent *event) override;
private:
void setKeySequence(const QKeySequence &current, bool updateFallback);
QKeySequence current_;
QKeySequence fallback_;
};
} // namespace service

View File

@ -221,7 +221,7 @@
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="4" column="1">
<widget class="QKeySequenceEdit" name="clipboardEdit"/>
<widget class="service::KeySequenceEdit" name="clipboardEdit"/>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_8">
@ -231,7 +231,7 @@
</widget>
</item>
<item row="2" column="1">
<widget class="QKeySequenceEdit" name="repeatCaptureEdit"/>
<widget class="service::KeySequenceEdit" name="repeatCaptureEdit"/>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_3">
@ -241,7 +241,7 @@
</widget>
</item>
<item row="0" column="1">
<widget class="QKeySequenceEdit" name="captureEdit"/>
<widget class="service::KeySequenceEdit" name="captureEdit"/>
</item>
<item row="4" column="0">
<widget class="QLabel" name="label_7">
@ -251,7 +251,7 @@
</widget>
</item>
<item row="3" column="1">
<widget class="QKeySequenceEdit" name="repeatEdit"/>
<widget class="service::KeySequenceEdit" name="repeatEdit"/>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label">
@ -268,7 +268,7 @@
</widget>
</item>
<item row="1" column="1">
<widget class="QKeySequenceEdit" name="captureLockedEdit"/>
<widget class="service::KeySequenceEdit" name="captureLockedEdit"/>
</item>
</layout>
</widget>
@ -775,6 +775,11 @@
<extends>QTableWidget</extends>
<header>substitutionstable.h</header>
</customwidget>
<customwidget>
<class>service::KeySequenceEdit</class>
<extends>QWidget</extends>
<header>keysequenceedit.h</header>
</customwidget>
</customwidgets>
<tabstops>
<tabstop>captureEdit</tabstop>

View File

@ -59,6 +59,16 @@ void TrayIcon::blockActions(bool block)
{
isActionsBlocked_ = block;
updateActions();
const auto actions =
QVector<QAction *>{captureAction_, repeatCaptureAction_, showLastAction_,
clipboardAction_, captureLockedAction_};
for (const auto i : actions) {
if (block) {
GlobalAction::removeGlobal(i);
} else {
GlobalAction::makeGlobal(i);
}
}
}
void TrayIcon::setTaskActionsEnabled(bool isEnabled)