Show Auto-Type select dialog even if window title is empty

* Fixes #11597

Add Tools::asSet
This commit is contained in:
Jonathan White 2025-02-22 07:42:48 -05:00
parent 089d0ca2b7
commit 4034c68e67
No known key found for this signature in database
GPG Key ID: 440FC65F2E0C6E01
2 changed files with 29 additions and 25 deletions

View File

@ -433,22 +433,14 @@ void AutoType::startGlobalAutoType(const QString& search)
*/ */
void AutoType::performGlobalAutoType(const QList<QSharedPointer<Database>>& dbList, const QString& search) void AutoType::performGlobalAutoType(const QList<QSharedPointer<Database>>& dbList, const QString& search)
{ {
if (!m_plugin) { if (!m_plugin || !m_inGlobalAutoTypeDialog.tryLock()) {
return;
}
if (!m_inGlobalAutoTypeDialog.tryLock()) {
return;
}
if (m_windowTitleForGlobal.isEmpty()) {
m_inGlobalAutoTypeDialog.unlock();
return; return;
} }
QList<AutoTypeMatch> matchList; QList<AutoTypeMatch> matchList;
// Generate entry/sequence match list if there is a valid window title
if (!m_windowTitleForGlobal.isEmpty()) {
bool hideExpired = config()->get(Config::AutoTypeHideExpiredEntry).toBool(); bool hideExpired = config()->get(Config::AutoTypeHideExpiredEntry).toBool();
for (const auto& db : dbList) { for (const auto& db : dbList) {
const QList<Entry*> dbEntries = db->rootGroup()->entriesRecursive(); const QList<Entry*> dbEntries = db->rootGroup()->entriesRecursive();
for (auto entry : dbEntries) { for (auto entry : dbEntries) {
@ -460,12 +452,15 @@ void AutoType::performGlobalAutoType(const QList<QSharedPointer<Database>>& dbLi
if (hideExpired && entry->isExpired()) { if (hideExpired && entry->isExpired()) {
continue; continue;
} }
auto sequences = entry->autoTypeSequences(m_windowTitleForGlobal).toSet(); const QSet<QString> sequences = Tools::asSet(entry->autoTypeSequences(m_windowTitleForGlobal));
for (const auto& sequence : sequences) { for (const auto& sequence : sequences) {
matchList << AutoTypeMatch(entry, sequence); matchList << AutoTypeMatch(entry, sequence);
} }
} }
} }
} else {
qWarning() << "Auto-Type: Window title was empty from the operating system";
}
// Show the selection dialog if we always ask, have multiple matches, or no matches // Show the selection dialog if we always ask, have multiple matches, or no matches
if (getMainWindow() if (getMainWindow()

View File

@ -47,6 +47,15 @@ namespace Tools
QProcessEnvironment environment = QProcessEnvironment::systemEnvironment()); QProcessEnvironment environment = QProcessEnvironment::systemEnvironment());
QString cleanFilename(QString filename); QString cleanFilename(QString filename);
template <class T> QSet<T> asSet(const QList<T>& a)
{
#if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0)
return QSet<T>(a.begin(), a.end());
#else
return QSet<T>::fromList(a);
#endif
}
/** /**
* Escapes all characters in regex such that they do not receive any special treatment when used * Escapes all characters in regex such that they do not receive any special treatment when used
* in a regular expression. Essentially, this function escapes any characters not in a-zA-Z0-9. * in a regular expression. Essentially, this function escapes any characters not in a-zA-Z0-9.