Add support for multiple autotype sequences for a single entry#1390
Add support for multiple autotype sequences for a single entry#1390TheZ3ro merged 9 commits intorelease/2.3.0from
Conversation
|
Ready for review 🏁 |
1c3bf07 to
354727c
Compare
| { | ||
| if (m_executor) { | ||
| delete m_executor; | ||
| m_executor = nullptr; |
There was a problem hiding this comment.
Change m_executor to a QPointer and remove nullptr assignments.
There was a problem hiding this comment.
AutoTypeExecutor doesn't inherit from QObject so you can't use QPointer here
There was a problem hiding this comment.
Any strong objections against changing that?
There was a problem hiding this comment.
Seems that this triggers some error with the linker
I would prefer changing this in a follow up PR
There was a problem hiding this comment.
Shouldn't cause linker errors.
src/autotype/AutoType.cpp
Outdated
| m_currentGlobalKey = key; | ||
| m_currentGlobalModifiers = modifiers; | ||
| return true; | ||
| } else { |
src/autotype/AutoType.cpp
Outdated
| } else { | ||
| return false; | ||
| } | ||
| } else { |
src/autotype/AutoType.cpp
Outdated
| } | ||
|
|
||
| QList<QString> sequences = autoTypeSequences(entry); | ||
| if(sequences.isEmpty()) { |
src/autotype/AutoType.cpp
Outdated
| entryList << entry; | ||
| sequenceHash.insert(entry, sequence); | ||
| const QList<QString> sequences = autoTypeSequences(entry, windowTitle); | ||
| for (QString sequence : sequences) { |
There was a problem hiding this comment.
It's a QList<QString>, adding & trigger this compiler error error: binding ‘const QString’ to reference of type ‘QString&’ discards qualifiers
There was a problem hiding this comment.
Yeah, well. const QString& it is then. ;-)
src/gui/entry/AutoTypeMatchView.h
Outdated
| protected: | ||
| void keyPressEvent(QKeyEvent* event) override; | ||
|
|
||
| private Q_SLOTS: |
src/gui/entry/EditEntryWidget.cpp
Outdated
| m_autoTypeDefaultSequenceGroup->addButton(m_autoTypeUi->customSequenceButton); | ||
| m_autoTypeWindowSequenceGroup->addButton(m_autoTypeUi->defaultWindowSequenceButton); | ||
| m_autoTypeWindowSequenceGroup->addButton(m_autoTypeUi->customWindowSequenceButton); | ||
| //m_autoTypeWindowSequenceGroup->addButton(m_autoTypeUi->customWindowSequenceButton); |
tests/TestAutoType.cpp
Outdated
| QString sequenceDisabled("{TEST_DISABLED}"); | ||
| QString sequenceOrphan("{TEST_ORPHAN}"); | ||
|
|
||
| Database* db = new Database(); |
src/autotype/AutoType.cpp
Outdated
| return; | ||
| Q_ASSERT(m_inAutoType); | ||
|
|
||
| m_inAutoType = false; |
There was a problem hiding this comment.
This should be a QMutex, which is tried with tryLock().
src/autotype/AutoType.cpp
Outdated
| return; | ||
| } | ||
|
|
||
| m_inAutoType = true; |
There was a problem hiding this comment.
When changed to a QMutex, use a QMutexLocker here.
d9f4ca8 to
0f42bfb
Compare
|
@TheZ3ro It duplicates the entry item if I click 'Cancel' and call the auto-type dialog again: For some reason it doesn't happen on some entries. EDIT: It seems to be happening on entries with another cloned entry in the recycle bin, even though the entry title is different. |
|
@weslly I can't reproduce it on GNU/Linux. Cloned a bunch of entry, deleted some of them, still no duplicate when clicking on "Cancel". |
|
@TheZ3ro I tried with a new database with only one entry and without the |
|
@weslly Ok, I've sort it out. If you have the MatchTitle and MatchURL option enabled, in some cases you will end up with 2 or even 3 repeated sequence since:
Using a QSet is a viable option, duplicated sequences won't be inserted |
0f42bfb to
a9b9575
Compare
|
@TheZ3ro the duplicate sequence bug is fixed now but I noticed the window no longer activates after selecting the entry on macOS (it does work on linux though). Probably I'll try to find what's causing this. |
|
@TheZ3ro actually the window activates after selecting the auto-type entry, but only if I click it with the mouse. If I just press enter to get the 1st item it closes the window without performing the sequence. |
|
|
||
| connect(m_view, SIGNAL(activated(QModelIndex)), SLOT(emitEntryActivated(QModelIndex))); | ||
| connect(m_view, SIGNAL(clicked(QModelIndex)), SLOT(emitEntryActivated(QModelIndex))); | ||
| connect(m_view, SIGNAL(activated(QModelIndex)), SLOT(emitMatchActivated(QModelIndex))); |
There was a problem hiding this comment.
This signal is being completely ignored on macOS. This may be the reason, but I have no idea why it worked before:
https://stackoverflow.com/questions/31650780/when-does-a-qtreeview-emit-the-activated-signal-on-mac
| @@ -82,20 +83,20 @@ void AutoTypeSelectDialog::done(int r) | |||
| QDialog::done(r); | |||
| } | |||
|
|
|||
There was a problem hiding this comment.
Strangely enought, this is already implemented in the EntryView class
keepassxc/src/gui/entry/EntryView.cpp
Line 115 in c4b9d54
The EntryView (on Mac) it's emitting the activated signal and the autotypeSelectDialog is connected to it. I don't see why it's not working 🤔
Edit: got it, preparing the fix
There was a problem hiding this comment.
Edit: Now I've figure out why it worked before. Now the signal it's called emitMatchActivated and the EntryView is emitting the emitEntryActivated one :D
@TheZ3ro nice!
a9b9575 to
aa54c7b
Compare
|
@weslly opted for a different fix, can you test it out? |
|
@TheZ3ro just tested, working fine now :) |
- Add support for KDBX 4.0, Argon2 and ChaCha20 [#148, #1179, #1230, #1494] - Add SSH Agent feature [#1098, #1450, #1463] - Add preview panel with details of the selected entry [#879, #1338] - Add more and configurable columns to entry table and allow copying of values by double click [#1305] - Add KeePassXC-Browser API as a replacement for KeePassHTTP [#608] - Deprecate KeePassHTTP [#1392] - Add support for Steam one-time passwords [#1206] - Add support for multiple Auto-Type sequences for a single entry [#1390] - Adjust YubiKey HMAC-SHA1 challenge-response key generation for KDBX 4.0 [#1060] - Replace qHttp with cURL for website icon downloads [#1460] - Remove lock file [#1231] - Add option to create backup file before saving [#1385] - Ask to save a generated password before closing the entry password generator [#1499] - Resolve placeholders recursively [#1078] - Add Auto-Type button to the toolbar [#1056] - Improve window focus handling for Auto-Type dialogs [#1204, #1490] - Auto-Type dialog and password generator can now be exited with ESC [#1252, #1412] - Add optional dark tray icon [#1154] - Add new "Unsafe saving" option to work around saving problems with file sync services [#1385] - Add IBus support to AppImage and additional image formats to Windows builds [#1534, #1537] - Add diceware password generator to CLI [#1406] - Add --key-file option to CLI [#816, #824] - Add DBus interface for opening and closing KeePassXC databases [#283] - Add KDBX compression options to database settings [#1419] - Discourage use of old fixed-length key files in favor of arbitrary files [#1326, #1327] - Correct reference resolution in entry fields [#1486] - Fix window state and recent databases not being remembered on exit [#1453] - Correct history item generation when configuring TOTP for an entry [#1446] - Correct multiple TOTP bugs [#1414] - Automatic saving after every change is now a default [#279] - Allow creation of new entries during search [#1398] - Correct menu issues on macOS [#1335] - Allow compilation on OpenBSD [#1328] - Improve entry attachments view [#1139, #1298] - Fix auto lock for Gnome and Xfce [#910, #1249] - Don't remember key files in file dialogs when the setting is disabled [#1188] - Improve database merging and conflict resolution [#807, #1165] - Fix macOS pasteboard issues [#1202] - Improve startup times on some platforms [#1205] - Hide the notes field by default [#1124] - Toggle main window by clicking tray icon with the middle mouse button [#992] - Fix custom icons not copied over when databases are merged [#1008] - Allow use of DEL key to delete entries [#914] - Correct intermittent crash due to stale history items [#1527] - Sanitize newline characters in title, username and URL fields [#1502] - Reopen previously opened databases in correct order [#774] - Use system's zxcvbn library if available [#701] - Implement various i18n improvements [#690, #875, #1436]



Description
This PR:
Motivation and context
Fixes #559
How has this been tested?
Manually and with make tests
Screenshots (if appropriate):
Types of changes
Checklist:
-DWITH_ASAN=ON. [REQUIRED]