-
-
Notifications
You must be signed in to change notification settings - Fork 1.5k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add support for multiple autotype sequences for a single entry #1390
Conversation
Ready for review 🏁 |
1c3bf07
to
354727c
Compare
{ | ||
if (m_executor) { | ||
delete m_executor; | ||
m_executor = nullptr; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Change m_executor to a QPointer and remove nullptr assignments.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
AutoTypeExecutor doesn't inherit from QObject so you can't use QPointer here
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Any strong objections against changing that?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Shouldn't cause linker errors.
src/autotype/AutoType.cpp
Outdated
m_currentGlobalKey = key; | ||
m_currentGlobalModifiers = modifiers; | ||
return true; | ||
} else { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Drop redundant else.
src/autotype/AutoType.cpp
Outdated
return true; | ||
} else { | ||
return false; | ||
} | ||
} else { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ditto.
src/autotype/AutoType.cpp
Outdated
} | ||
|
||
QList<QString> sequences = autoTypeSequences(entry); | ||
if(sequences.isEmpty()) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Space after if.
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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
QString&
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yeah, well. const QString&
it is then. ;-)
src/gui/entry/AutoTypeMatchView.h
Outdated
protected: | ||
void keyPressEvent(QKeyEvent* event) override; | ||
|
||
private Q_SLOTS: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
slots
src/gui/entry/EditEntryWidget.cpp
Outdated
@@ -170,8 +170,7 @@ void EditEntryWidget::setupAutoType() | |||
|
|||
m_autoTypeDefaultSequenceGroup->addButton(m_autoTypeUi->inheritSequenceButton); | |||
m_autoTypeDefaultSequenceGroup->addButton(m_autoTypeUi->customSequenceButton); | |||
m_autoTypeWindowSequenceGroup->addButton(m_autoTypeUi->defaultWindowSequenceButton); | |||
m_autoTypeWindowSequenceGroup->addButton(m_autoTypeUi->customWindowSequenceButton); | |||
//m_autoTypeWindowSequenceGroup->addButton(m_autoTypeUi->customWindowSequenceButton); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Remove
tests/TestAutoType.cpp
Outdated
QString sequenceDisabled("{TEST_DISABLED}"); | ||
QString sequenceOrphan("{TEST_ORPHAN}"); | ||
|
||
Database* db = new Database(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
QScopedPointer
src/autotype/AutoType.cpp
Outdated
return; | ||
Q_ASSERT(m_inAutoType); | ||
|
||
m_inAutoType = false; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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. |
@@ -56,21 +58,20 @@ AutoTypeSelectDialog::AutoTypeSelectDialog(QWidget* parent) | |||
QLabel* descriptionLabel = new QLabel(tr("Select entry to Auto-Type:"), this); | |||
layout->addWidget(descriptionLabel); | |||
|
|||
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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Strangely enought, this is already implemented in the EntryView class
keepassxc/src/gui/entry/EntryView.cpp
Line 115 in c4b9d54
void EntryView::keyPressEvent(QKeyEvent* event) |
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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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]