Change shortcut editor
Remove global shortcuts when blocking actions to not trigger it when editing
This commit is contained in:
parent
75bfd798c8
commit
26c034e75a
@ -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 \
|
||||
|
71
src/service/keysequenceedit.cpp
Normal file
71
src/service/keysequenceedit.cpp
Normal 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 ¤t,
|
||||
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
|
25
src/service/keysequenceedit.h
Normal file
25
src/service/keysequenceedit.h
Normal 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 ¤t, bool updateFallback);
|
||||
QKeySequence current_;
|
||||
QKeySequence fallback_;
|
||||
};
|
||||
|
||||
} // namespace service
|
@ -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>
|
||||
|
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user