mirror of
https://github.com/keepassxreboot/keepassxc.git
synced 2024-12-30 09:46:30 -05:00
Make sure the remapping keycode is reset to NoSymbol.
Previously the dtor of AutoTypePlatformX11 wasn't called.
This commit is contained in:
parent
23f338b0c3
commit
2a416d1f1d
@ -57,11 +57,16 @@ AutoType::AutoType(QObject* parent, bool test)
|
|||||||
if (!pluginPath.isEmpty()) {
|
if (!pluginPath.isEmpty()) {
|
||||||
loadPlugin(pluginPath);
|
loadPlugin(pluginPath);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
connect(qApp, SIGNAL(aboutToQuit()), SLOT(unloadPlugin()));
|
||||||
}
|
}
|
||||||
|
|
||||||
AutoType::~AutoType()
|
AutoType::~AutoType()
|
||||||
{
|
{
|
||||||
|
if (m_executor) {
|
||||||
delete m_executor;
|
delete m_executor;
|
||||||
|
m_executor = Q_NULLPTR;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void AutoType::loadPlugin(const QString& pluginPath)
|
void AutoType::loadPlugin(const QString& pluginPath)
|
||||||
@ -215,6 +220,19 @@ void AutoType::resetInAutoType()
|
|||||||
m_inAutoType = false;
|
m_inAutoType = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AutoType::unloadPlugin()
|
||||||
|
{
|
||||||
|
if (m_executor) {
|
||||||
|
delete m_executor;
|
||||||
|
m_executor = Q_NULLPTR;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_plugin) {
|
||||||
|
m_plugin->unload();
|
||||||
|
m_plugin = Q_NULLPTR;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
bool AutoType::registerGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers)
|
bool AutoType::registerGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers)
|
||||||
{
|
{
|
||||||
Q_ASSERT(key);
|
Q_ASSERT(key);
|
||||||
|
@ -59,6 +59,7 @@ Q_SIGNALS:
|
|||||||
private Q_SLOTS:
|
private Q_SLOTS:
|
||||||
void performAutoTypeFromGlobal(Entry* entry, const QString& sequence);
|
void performAutoTypeFromGlobal(Entry* entry, const QString& sequence);
|
||||||
void resetInAutoType();
|
void resetInAutoType();
|
||||||
|
void unloadPlugin();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
explicit AutoType(QObject* parent = Q_NULLPTR, bool test = false);
|
explicit AutoType(QObject* parent = Q_NULLPTR, bool test = false);
|
||||||
|
@ -33,6 +33,7 @@ public:
|
|||||||
virtual void unregisterGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers) = 0;
|
virtual void unregisterGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifiers) = 0;
|
||||||
virtual int platformEventFilter(void* event) = 0;
|
virtual int platformEventFilter(void* event) = 0;
|
||||||
virtual int initialTimeout() = 0;
|
virtual int initialTimeout() = 0;
|
||||||
|
virtual void unload() {}
|
||||||
|
|
||||||
virtual AutoTypeExecutor* createExecutor() = 0;
|
virtual AutoTypeExecutor* createExecutor() = 0;
|
||||||
|
|
||||||
|
@ -49,16 +49,26 @@ AutoTypePlatformX11::AutoTypePlatformX11()
|
|||||||
m_specialCharacterKeycode = 0;
|
m_specialCharacterKeycode = 0;
|
||||||
m_modifierMask = ControlMask | ShiftMask | Mod1Mask | Mod4Mask;
|
m_modifierMask = ControlMask | ShiftMask | Mod1Mask | Mod4Mask;
|
||||||
|
|
||||||
|
m_loaded = true;
|
||||||
|
|
||||||
updateKeymap();
|
updateKeymap();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
void AutoTypePlatformX11::unload()
|
||||||
* Restore the KeyboardMapping to its original state.
|
{
|
||||||
*/
|
// Restore the KeyboardMapping to its original state.
|
||||||
AutoTypePlatformX11::~AutoTypePlatformX11() {
|
|
||||||
AddKeysym(NoSymbol);
|
AddKeysym(NoSymbol);
|
||||||
|
|
||||||
|
if (m_keysymTable) {
|
||||||
|
XFree(m_keysymTable);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (m_xkb) {
|
||||||
|
XkbFreeKeyboard(m_xkb, XkbAllComponentsMask, True);
|
||||||
|
}
|
||||||
|
|
||||||
|
m_loaded = false;
|
||||||
|
}
|
||||||
|
|
||||||
QStringList AutoTypePlatformX11::windowTitles()
|
QStringList AutoTypePlatformX11::windowTitles()
|
||||||
{
|
{
|
||||||
@ -168,13 +178,14 @@ int AutoTypePlatformX11::platformEventFilter(void* event)
|
|||||||
&& m_currentGlobalKey
|
&& m_currentGlobalKey
|
||||||
&& xevent->xkey.keycode == m_currentGlobalKeycode
|
&& xevent->xkey.keycode == m_currentGlobalKeycode
|
||||||
&& (xevent->xkey.state & m_modifierMask) == m_currentGlobalNativeModifiers
|
&& (xevent->xkey.state & m_modifierMask) == m_currentGlobalNativeModifiers
|
||||||
&& !QApplication::focusWidget()) {
|
&& !QApplication::focusWidget()
|
||||||
|
&& m_loaded) {
|
||||||
if (xevent->type == KeyPress) {
|
if (xevent->type == KeyPress) {
|
||||||
Q_EMIT globalShortcutTriggered();
|
Q_EMIT globalShortcutTriggered();
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
if (xevent->type == MappingNotify) {
|
if (xevent->type == MappingNotify && m_loaded) {
|
||||||
XRefreshKeyboardMapping(reinterpret_cast<XMappingEvent*>(xevent));
|
XRefreshKeyboardMapping(reinterpret_cast<XMappingEvent*>(xevent));
|
||||||
updateKeymap();
|
updateKeymap();
|
||||||
}
|
}
|
||||||
|
@ -42,7 +42,7 @@ class AutoTypePlatformX11 : public QObject, public AutoTypePlatformInterface
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
AutoTypePlatformX11();
|
AutoTypePlatformX11();
|
||||||
~AutoTypePlatformX11();
|
void unload() Q_DECL_OVERRIDE;
|
||||||
QStringList windowTitles();
|
QStringList windowTitles();
|
||||||
WId activeWindow();
|
WId activeWindow();
|
||||||
QString activeWindowTitle();
|
QString activeWindowTitle();
|
||||||
@ -109,6 +109,7 @@ private:
|
|||||||
/* dedicated 'special character' keycode */
|
/* dedicated 'special character' keycode */
|
||||||
int m_specialCharacterKeycode;
|
int m_specialCharacterKeycode;
|
||||||
KeyCode m_modifier_keycode[N_MOD_INDICES];
|
KeyCode m_modifier_keycode[N_MOD_INDICES];
|
||||||
|
bool m_loaded;
|
||||||
};
|
};
|
||||||
|
|
||||||
class AutoTypeExecturorX11 : public AutoTypeExecutor
|
class AutoTypeExecturorX11 : public AutoTypeExecutor
|
||||||
|
Loading…
Reference in New Issue
Block a user