mirror of
https://github.com/keepassxreboot/keepassxc.git
synced 2025-11-27 18:10:31 -05:00
Fix Auto-Type Empty Window Behavior
* Fixes #9282 * Also improve documentation for window title matching behavior
This commit is contained in:
parent
6130a64be5
commit
ebf0676661
4 changed files with 38 additions and 2 deletions
|
|
@ -32,7 +32,9 @@ To configure Auto-Type sequences for your entries, perform the following steps:
|
||||||
|
|
||||||
1. Navigate to the entries list and open the desired entry for editing. Click the _Auto-Type_ item from the left-hand menu bar *(1)*. Press the kbd:[+] button *(2)* to add a new sequence entry. Select the desired window using the drop-down menu, or simply type a window title in the box *(3)*.
|
1. Navigate to the entries list and open the desired entry for editing. Click the _Auto-Type_ item from the left-hand menu bar *(1)*. Press the kbd:[+] button *(2)* to add a new sequence entry. Select the desired window using the drop-down menu, or simply type a window title in the box *(3)*.
|
||||||
+
|
+
|
||||||
TIP: You can use an asterisk (`\*`) to match any value (e.g., when a window title contains a dynamic filename or website name). Set the window title to `*` to match all windows. Leave the window title blank to offer additional default Auto-Type sequences, such as custom attributes.
|
TIP: You can use an asterisk (`\*`) as a wildcard (e.g., when a window title contains a dynamic file or website name). Set the window title to `*` to match all windows. Leave the window title blank to offer additional sequences for every matching window. This is useful for typing individual custom attributes, for example.
|
||||||
|
+
|
||||||
|
TIP: To use a standard regular expression for window title matching, the window title must start and end with two forward slashes (e.g., `//^Secure Login - .*$//`).
|
||||||
+
|
+
|
||||||
.Auto-Type entry sequences
|
.Auto-Type entry sequences
|
||||||
image::autotype_entry_sequences.png[]
|
image::autotype_entry_sequences.png[]
|
||||||
|
|
|
||||||
|
|
@ -334,12 +334,15 @@ QList<QString> Entry::autoTypeSequences(const QString& windowTitle) const
|
||||||
};
|
};
|
||||||
|
|
||||||
QList<QString> sequenceList;
|
QList<QString> sequenceList;
|
||||||
|
QList<QString> emptyWindowSequences;
|
||||||
|
|
||||||
// Add window association matches
|
// Add window association matches
|
||||||
const auto assocList = autoTypeAssociations()->getAll();
|
const auto assocList = autoTypeAssociations()->getAll();
|
||||||
for (const auto& assoc : assocList) {
|
for (const auto& assoc : assocList) {
|
||||||
auto window = resolveMultiplePlaceholders(assoc.window);
|
auto window = resolveMultiplePlaceholders(assoc.window);
|
||||||
if (!assoc.window.isEmpty() && windowMatches(window)) {
|
if (assoc.window.isEmpty()) {
|
||||||
|
emptyWindowSequences << assoc.sequence;
|
||||||
|
} else if (windowMatches(window)) {
|
||||||
if (!assoc.sequence.isEmpty()) {
|
if (!assoc.sequence.isEmpty()) {
|
||||||
sequenceList << assoc.sequence;
|
sequenceList << assoc.sequence;
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -358,6 +361,11 @@ QList<QString> Entry::autoTypeSequences(const QString& windowTitle) const
|
||||||
sequenceList << effectiveAutoTypeSequence();
|
sequenceList << effectiveAutoTypeSequence();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If any associations were made, include the empty window associations
|
||||||
|
if (!sequenceList.isEmpty()) {
|
||||||
|
sequenceList.append(emptyWindowSequences);
|
||||||
|
}
|
||||||
|
|
||||||
return sequenceList;
|
return sequenceList;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -125,6 +125,20 @@ void TestAutoType::init()
|
||||||
m_entry5->setPassword("example5");
|
m_entry5->setPassword("example5");
|
||||||
m_entry5->setTitle("some title");
|
m_entry5->setTitle("some title");
|
||||||
m_entry5->setUrl("http://example.org");
|
m_entry5->setUrl("http://example.org");
|
||||||
|
|
||||||
|
m_entry6 = new Entry();
|
||||||
|
m_entry6->setGroup(m_group);
|
||||||
|
m_entry6->setPassword("example6");
|
||||||
|
m_entry6->setTitle("empty window test");
|
||||||
|
association.window = "";
|
||||||
|
association.sequence = "{S:Empty Window}";
|
||||||
|
m_entry6->autoTypeAssociations()->add(association);
|
||||||
|
association.window = "non-matching window";
|
||||||
|
association.sequence = "should not match";
|
||||||
|
m_entry6->autoTypeAssociations()->add(association);
|
||||||
|
association.window = "*notepad*";
|
||||||
|
association.sequence = "{USERNAME}";
|
||||||
|
m_entry6->autoTypeAssociations()->add(association);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TestAutoType::cleanup()
|
void TestAutoType::cleanup()
|
||||||
|
|
@ -446,3 +460,13 @@ void TestAutoType::testAutoTypeEffectiveSequences()
|
||||||
QCOMPARE(entry6->defaultAutoTypeSequence(), sequenceOrphan);
|
QCOMPARE(entry6->defaultAutoTypeSequence(), sequenceOrphan);
|
||||||
QCOMPARE(entry6->effectiveAutoTypeSequence(), QString());
|
QCOMPARE(entry6->effectiveAutoTypeSequence(), QString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TestAutoType::testAutoTypeEmptyWindowAssociation()
|
||||||
|
{
|
||||||
|
auto assoc = m_entry6->autoTypeSequences("Windows Notepad");
|
||||||
|
QCOMPARE(assoc.size(), 2);
|
||||||
|
QVERIFY(assoc.contains("{S:Empty Window}"));
|
||||||
|
|
||||||
|
assoc = m_entry6->autoTypeSequences("Some Other Window");
|
||||||
|
QVERIFY(assoc.isEmpty());
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -51,6 +51,7 @@ private slots:
|
||||||
void testAutoTypeResults_data();
|
void testAutoTypeResults_data();
|
||||||
void testAutoTypeSyntaxChecks();
|
void testAutoTypeSyntaxChecks();
|
||||||
void testAutoTypeEffectiveSequences();
|
void testAutoTypeEffectiveSequences();
|
||||||
|
void testAutoTypeEmptyWindowAssociation();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
AutoTypePlatformInterface* m_platform;
|
AutoTypePlatformInterface* m_platform;
|
||||||
|
|
@ -64,6 +65,7 @@ private:
|
||||||
Entry* m_entry3;
|
Entry* m_entry3;
|
||||||
Entry* m_entry4;
|
Entry* m_entry4;
|
||||||
Entry* m_entry5;
|
Entry* m_entry5;
|
||||||
|
Entry* m_entry6;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // KEEPASSX_TESTAUTOTYPE_H
|
#endif // KEEPASSX_TESTAUTOTYPE_H
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue