mirror of
https://github.com/Artikash/Textractor.git
synced 2024-12-23 17:04:12 +08:00
use system global hotkey
This commit is contained in:
parent
b236a50a8f
commit
1f19a9e74d
@ -13,6 +13,7 @@
|
|||||||
#include <QFontMetrics>
|
#include <QFontMetrics>
|
||||||
#include <QMouseEvent>
|
#include <QMouseEvent>
|
||||||
#include <QWheelEvent>
|
#include <QWheelEvent>
|
||||||
|
#include <QAbstractNativeEventFilter>
|
||||||
|
|
||||||
extern const char* EXTRA_WINDOW_INFO;
|
extern const char* EXTRA_WINDOW_INFO;
|
||||||
extern const char* SENTENCE_TOO_BIG;
|
extern const char* SENTENCE_TOO_BIG;
|
||||||
@ -36,6 +37,7 @@ extern const char* FONT;
|
|||||||
extern const char* SAVE_SETTINGS;
|
extern const char* SAVE_SETTINGS;
|
||||||
|
|
||||||
constexpr auto DICTIONARY_SAVE_FILE = u8"SavedDictionary.txt";
|
constexpr auto DICTIONARY_SAVE_FILE = u8"SavedDictionary.txt";
|
||||||
|
constexpr int CLICK_THROUGH_HOTKEY = 0xc0d0;
|
||||||
|
|
||||||
QColor colorPrompt(QWidget* parent, QColor default, const QString& title, bool customOpacity = true)
|
QColor colorPrompt(QWidget* parent, QColor default, const QString& title, bool customOpacity = true)
|
||||||
{
|
{
|
||||||
@ -153,7 +155,7 @@ private:
|
|||||||
}* outliner;
|
}* outliner;
|
||||||
};
|
};
|
||||||
|
|
||||||
class ExtraWindow : public PrettyWindow
|
class ExtraWindow : public PrettyWindow, QAbstractNativeEventFilter
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
ExtraWindow() : PrettyWindow("Extra Window")
|
ExtraWindow() : PrettyWindow("Extra Window")
|
||||||
@ -168,7 +170,6 @@ public:
|
|||||||
{ AUTO_RESIZE_WINDOW_HEIGHT, false, &ExtraWindow::SetAutoResizeHeight },
|
{ AUTO_RESIZE_WINDOW_HEIGHT, false, &ExtraWindow::SetAutoResizeHeight },
|
||||||
{ SHOW_ORIGINAL, true, &ExtraWindow::SetShowOriginal },
|
{ SHOW_ORIGINAL, true, &ExtraWindow::SetShowOriginal },
|
||||||
{ DICTIONARY, false, &ExtraWindow::SetUseDictionary },
|
{ DICTIONARY, false, &ExtraWindow::SetUseDictionary },
|
||||||
{ CLICK_THROUGH, false, &ExtraWindow::SetClickThrough },
|
|
||||||
})
|
})
|
||||||
{
|
{
|
||||||
// delay processing anything until Textractor has finished initializing
|
// delay processing anything until Textractor has finished initializing
|
||||||
@ -176,22 +177,21 @@ public:
|
|||||||
auto action = menu.addAction(name, this, slot);
|
auto action = menu.addAction(name, this, slot);
|
||||||
action->setCheckable(true);
|
action->setCheckable(true);
|
||||||
action->setChecked(default);
|
action->setChecked(default);
|
||||||
if (slot == &ExtraWindow::SetClickThrough)
|
|
||||||
{
|
|
||||||
action->setShortcut(QKeySequence(Qt::CTRL + Qt::SHIFT + Qt::Key_T));
|
|
||||||
action->setShortcutContext(Qt::ApplicationShortcut);
|
|
||||||
addAction(action);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
menu.addAction(CLICK_THROUGH, this, &ExtraWindow::ToggleClickThrough);
|
||||||
|
|
||||||
menu.addAction(MAX_SENTENCE_SIZE, this, [this]
|
menu.addAction(MAX_SENTENCE_SIZE, this, [this]
|
||||||
{
|
{
|
||||||
settings.setValue(MAX_SENTENCE_SIZE, maxSentenceSize = QInputDialog::getInt(this, MAX_SENTENCE_SIZE, "", maxSentenceSize, 0, INT_MAX, 1, nullptr, Qt::WindowCloseButtonHint));
|
settings.setValue(MAX_SENTENCE_SIZE, maxSentenceSize = QInputDialog::getInt(this, MAX_SENTENCE_SIZE, "", maxSentenceSize, 0, INT_MAX, 1, nullptr, Qt::WindowCloseButtonHint));
|
||||||
});
|
});
|
||||||
ui.display->installEventFilter(this);
|
ui.display->installEventFilter(this);
|
||||||
ui.display->setMouseTracking(true);
|
ui.display->setMouseTracking(true);
|
||||||
|
qApp->installNativeEventFilter(this);
|
||||||
|
|
||||||
QMetaObject::invokeMethod(this, [this]
|
QMetaObject::invokeMethod(this, [this]
|
||||||
{
|
{
|
||||||
|
RegisterHotKey((HWND)winId(), CLICK_THROUGH_HOTKEY, MOD_SHIFT | MOD_NOREPEAT, 0x58);
|
||||||
show();
|
show();
|
||||||
AddSentence(EXTRA_WINDOW_INFO);
|
AddSentence(EXTRA_WINDOW_INFO);
|
||||||
}, Qt::QueuedConnection);
|
}, Qt::QueuedConnection);
|
||||||
@ -257,9 +257,9 @@ private:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void SetClickThrough(bool clickThrough)
|
void ToggleClickThrough()
|
||||||
{
|
{
|
||||||
if (clickThrough)
|
if (clickThrough = !clickThrough)
|
||||||
{
|
{
|
||||||
setAttribute(Qt::WA_TransparentForMouseEvents, true);
|
setAttribute(Qt::WA_TransparentForMouseEvents, true);
|
||||||
setWindowFlags(windowFlags() | Qt::WindowStaysOnTopHint);
|
setWindowFlags(windowFlags() | Qt::WindowStaysOnTopHint);
|
||||||
@ -329,6 +329,14 @@ private:
|
|||||||
dictionaryWindow.move(ui.display->mapToGlobal(QPoint(x, y - dictionaryWindow.height())));
|
dictionaryWindow.move(ui.display->mapToGlobal(QPoint(x, y - dictionaryWindow.height())));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool nativeEventFilter(const QByteArray&, void* message, LRESULT* result) override
|
||||||
|
{
|
||||||
|
auto msg = (MSG*)message;
|
||||||
|
if (msg->message != WM_HOTKEY || msg->wParam != CLICK_THROUGH_HOTKEY) return false;
|
||||||
|
ToggleClickThrough();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
bool eventFilter(QObject*, QEvent* event) override
|
bool eventFilter(QObject*, QEvent* event) override
|
||||||
{
|
{
|
||||||
if (useDictionary && event->type() == QEvent::MouseMove) ComputeDictionaryPosition(((QMouseEvent*)event)->localPos().toPoint());
|
if (useDictionary && event->type() == QEvent::MouseMove) ComputeDictionaryPosition(((QMouseEvent*)event)->localPos().toPoint());
|
||||||
|
2
text.cpp
2
text.cpp
@ -180,7 +180,7 @@ const char* SHOW_ORIGINAL_INFO = u8R"(Original text will not be shown
|
|||||||
Only works if this extension is used directly after a translation extension)";
|
Only works if this extension is used directly after a translation extension)";
|
||||||
const char* SIZE_LOCK = u8"Size lock";
|
const char* SIZE_LOCK = u8"Size lock";
|
||||||
const char* AUTO_RESIZE_WINDOW_HEIGHT = u8"Auto resize window height";
|
const char* AUTO_RESIZE_WINDOW_HEIGHT = u8"Auto resize window height";
|
||||||
const char* CLICK_THROUGH = u8"Click Through";
|
const char* CLICK_THROUGH = u8"Click through";
|
||||||
const char* OPACITY = u8"Opacity";
|
const char* OPACITY = u8"Opacity";
|
||||||
const char* BG_COLOR = u8"Background color";
|
const char* BG_COLOR = u8"Background color";
|
||||||
const char* TEXT_COLOR = u8"Text color";
|
const char* TEXT_COLOR = u8"Text color";
|
||||||
|
Loading…
x
Reference in New Issue
Block a user