mirror of
https://github.com/keepassxreboot/keepassxc.git
synced 2024-12-27 00:09:53 -05:00
change inAutotype logic, preventing multiple autotype call
This commit is contained in:
parent
ba4ef52e9e
commit
a76c92ed9a
@ -173,12 +173,10 @@ bool AutoType::registerGlobalShortcut(Qt::Key key, Qt::KeyboardModifiers modifie
|
|||||||
m_currentGlobalKey = key;
|
m_currentGlobalKey = key;
|
||||||
m_currentGlobalModifiers = modifiers;
|
m_currentGlobalModifiers = modifiers;
|
||||||
return true;
|
return true;
|
||||||
} else {
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
} else {
|
return false;
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void AutoType::unregisterGlobalShortcut()
|
void AutoType::unregisterGlobalShortcut()
|
||||||
@ -202,9 +200,13 @@ int AutoType::callEventFilter(void* event)
|
|||||||
*/
|
*/
|
||||||
void AutoType::executeAutoTypeActions(const Entry* entry, QWidget* hideWindow, const QString& sequence, WId window)
|
void AutoType::executeAutoTypeActions(const Entry* entry, QWidget* hideWindow, const QString& sequence, WId window)
|
||||||
{
|
{
|
||||||
|
Q_ASSERT(m_inAutoType);
|
||||||
|
if (!m_inAutoType) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// no edit to the sequence beyond this point
|
// no edit to the sequence beyond this point
|
||||||
if (!verifyAutoTypeSyntax(sequence)) {
|
if (!verifyAutoTypeSyntax(sequence)) {
|
||||||
m_inAutoType = false; // TODO: make this automatic
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -212,7 +214,6 @@ void AutoType::executeAutoTypeActions(const Entry* entry, QWidget* hideWindow, c
|
|||||||
ListDeleter<AutoTypeAction*> actionsDeleter(&actions);
|
ListDeleter<AutoTypeAction*> actionsDeleter(&actions);
|
||||||
|
|
||||||
if (!parseActions(sequence, entry, actions)) {
|
if (!parseActions(sequence, entry, actions)) {
|
||||||
m_inAutoType = false; // TODO: make this automatic
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -241,8 +242,6 @@ void AutoType::executeAutoTypeActions(const Entry* entry, QWidget* hideWindow, c
|
|||||||
action->accept(m_executor);
|
action->accept(m_executor);
|
||||||
QCoreApplication::processEvents(QEventLoop::AllEvents, 10);
|
QCoreApplication::processEvents(QEventLoop::AllEvents, 10);
|
||||||
}
|
}
|
||||||
|
|
||||||
m_inAutoType = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -256,13 +255,15 @@ void AutoType::performAutoType(const Entry* entry, QWidget* hideWindow)
|
|||||||
}
|
}
|
||||||
|
|
||||||
QList<QString> sequences = autoTypeSequences(entry);
|
QList<QString> sequences = autoTypeSequences(entry);
|
||||||
if(sequences.isEmpty()) {
|
if (sequences.isEmpty()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_inAutoType = true;
|
m_inAutoType = true;
|
||||||
|
|
||||||
executeAutoTypeActions(entry, hideWindow, sequences.first());
|
executeAutoTypeActions(entry, hideWindow, sequences.first());
|
||||||
|
|
||||||
|
m_inAutoType = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -304,8 +305,8 @@ void AutoType::performGlobalAutoType(const QList<Database*>& dbList)
|
|||||||
message.append(windowTitle);
|
message.append(windowTitle);
|
||||||
MessageBox::information(nullptr, tr("Auto-Type - KeePassXC"), message);
|
MessageBox::information(nullptr, tr("Auto-Type - KeePassXC"), message);
|
||||||
} else if ((matchList.size() == 1) && !config()->get("security/autotypeask").toBool()) {
|
} else if ((matchList.size() == 1) && !config()->get("security/autotypeask").toBool()) {
|
||||||
m_inAutoType = false;
|
|
||||||
executeAutoTypeActions(matchList.first().entry, nullptr, matchList.first().sequence);
|
executeAutoTypeActions(matchList.first().entry, nullptr, matchList.first().sequence);
|
||||||
|
m_inAutoType = false;
|
||||||
} else {
|
} else {
|
||||||
m_windowFromGlobal = m_plugin->activeWindow();
|
m_windowFromGlobal = m_plugin->activeWindow();
|
||||||
AutoTypeSelectDialog* selectDialog = new AutoTypeSelectDialog();
|
AutoTypeSelectDialog* selectDialog = new AutoTypeSelectDialog();
|
||||||
@ -329,9 +330,9 @@ void AutoType::performAutoTypeFromGlobal(AutoTypeMatch match)
|
|||||||
|
|
||||||
m_plugin->raiseWindow(m_windowFromGlobal);
|
m_plugin->raiseWindow(m_windowFromGlobal);
|
||||||
|
|
||||||
m_inAutoType = false;
|
|
||||||
|
|
||||||
executeAutoTypeActions(match.entry, nullptr, match.sequence, m_windowFromGlobal);
|
executeAutoTypeActions(match.entry, nullptr, match.sequence, m_windowFromGlobal);
|
||||||
|
|
||||||
|
m_inAutoType = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -542,6 +543,17 @@ QList<QString> AutoType::autoTypeSequences(const Entry* entry, const QString& wi
|
|||||||
return sequenceList;
|
return sequenceList;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const Group* group = entry->group();
|
||||||
|
do {
|
||||||
|
if (group->autoTypeEnabled() == Group::Disable) {
|
||||||
|
return sequenceList;
|
||||||
|
} else if (group->autoTypeEnabled() == Group::Enable) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
group = group->parentGroup();
|
||||||
|
|
||||||
|
} while (group);
|
||||||
|
|
||||||
if (!windowTitle.isEmpty()) {
|
if (!windowTitle.isEmpty()) {
|
||||||
const QList<AutoTypeAssociations::Association> assocList = entry->autoTypeAssociations()->getAll();
|
const QList<AutoTypeAssociations::Association> assocList = entry->autoTypeAssociations()->getAll();
|
||||||
for (const AutoTypeAssociations::Association& assoc : assocList) {
|
for (const AutoTypeAssociations::Association& assoc : assocList) {
|
||||||
@ -572,17 +584,6 @@ QList<QString> AutoType::autoTypeSequences(const Entry* entry, const QString& wi
|
|||||||
sequenceList.append(entry->effectiveAutoTypeSequence());
|
sequenceList.append(entry->effectiveAutoTypeSequence());
|
||||||
}
|
}
|
||||||
|
|
||||||
const Group* group = entry->group();
|
|
||||||
do {
|
|
||||||
if (group->autoTypeEnabled() == Group::Disable) {
|
|
||||||
return QList<QString>();
|
|
||||||
} else if (group->autoTypeEnabled() == Group::Enable) {
|
|
||||||
return sequenceList;
|
|
||||||
}
|
|
||||||
group = group->parentGroup();
|
|
||||||
|
|
||||||
} while (group);
|
|
||||||
|
|
||||||
return sequenceList;
|
return sequenceList;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -226,18 +226,18 @@ QString Entry::defaultAutoTypeSequence() const
|
|||||||
*/
|
*/
|
||||||
QString Entry::effectiveAutoTypeSequence() const
|
QString Entry::effectiveAutoTypeSequence() const
|
||||||
{
|
{
|
||||||
if (autoTypeEnabled() == false) {
|
if (!autoTypeEnabled()) {
|
||||||
return QString();
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
const Group* parent = group();
|
const Group* parent = group();
|
||||||
if (!parent) {
|
if (!parent) {
|
||||||
return QString();
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
QString sequence = parent->effectiveAutoTypeSequence();
|
QString sequence = parent->effectiveAutoTypeSequence();
|
||||||
if (sequence.isEmpty()) {
|
if (sequence.isEmpty()) {
|
||||||
return QString();
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!m_data.defaultAutoTypeSequence.isEmpty()) {
|
if (!m_data.defaultAutoTypeSequence.isEmpty()) {
|
||||||
|
@ -55,7 +55,7 @@ void AutoTypeMatchModel::setMatchList(const QList<AutoTypeMatch>& matches)
|
|||||||
|
|
||||||
QSet<Database*> databases;
|
QSet<Database*> databases;
|
||||||
|
|
||||||
for (AutoTypeMatch match : asConst(m_matches)) {
|
for (AutoTypeMatch& match : m_matches) {
|
||||||
databases.insert(match.entry->group()->database());
|
databases.insert(match.entry->group()->database());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -81,9 +81,8 @@ int AutoTypeMatchModel::rowCount(const QModelIndex& parent) const
|
|||||||
{
|
{
|
||||||
if (parent.isValid()) {
|
if (parent.isValid()) {
|
||||||
return 0;
|
return 0;
|
||||||
} else {
|
|
||||||
return m_matches.size();
|
|
||||||
}
|
}
|
||||||
|
return m_matches.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
int AutoTypeMatchModel::columnCount(const QModelIndex& parent) const
|
int AutoTypeMatchModel::columnCount(const QModelIndex& parent) const
|
||||||
@ -96,7 +95,7 @@ int AutoTypeMatchModel::columnCount(const QModelIndex& parent) const
|
|||||||
QVariant AutoTypeMatchModel::data(const QModelIndex& index, int role) const
|
QVariant AutoTypeMatchModel::data(const QModelIndex& index, int role) const
|
||||||
{
|
{
|
||||||
if (!index.isValid()) {
|
if (!index.isValid()) {
|
||||||
return QVariant();
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
AutoTypeMatch match = matchFromIndex(index);
|
AutoTypeMatch match = matchFromIndex(index);
|
||||||
@ -138,7 +137,7 @@ QVariant AutoTypeMatchModel::data(const QModelIndex& index, int role) const
|
|||||||
return font;
|
return font;
|
||||||
}
|
}
|
||||||
|
|
||||||
return QVariant();
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
QVariant AutoTypeMatchModel::headerData(int section, Qt::Orientation orientation, int role) const
|
QVariant AutoTypeMatchModel::headerData(int section, Qt::Orientation orientation, int role) const
|
||||||
@ -156,12 +155,12 @@ QVariant AutoTypeMatchModel::headerData(int section, Qt::Orientation orientation
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return QVariant();
|
return {};
|
||||||
}
|
}
|
||||||
|
|
||||||
void AutoTypeMatchModel::entryDataChanged(Entry* entry)
|
void AutoTypeMatchModel::entryDataChanged(Entry* entry)
|
||||||
{
|
{
|
||||||
for (int row = 0; row < m_matches.size(); row++) {
|
for (int row = 0; row < m_matches.size(); ++row) {
|
||||||
AutoTypeMatch match = m_matches[row];
|
AutoTypeMatch match = m_matches[row];
|
||||||
if (match.entry == entry) {
|
if (match.entry == entry) {
|
||||||
emit dataChanged(index(row, 0), index(row, columnCount()-1));
|
emit dataChanged(index(row, 0), index(row, columnCount()-1));
|
||||||
@ -172,13 +171,13 @@ void AutoTypeMatchModel::entryDataChanged(Entry* entry)
|
|||||||
|
|
||||||
void AutoTypeMatchModel::entryAboutToRemove(Entry* entry)
|
void AutoTypeMatchModel::entryAboutToRemove(Entry* entry)
|
||||||
{
|
{
|
||||||
for (int row = 0; row < m_matches.size(); row++) {
|
for (int row = 0; row < m_matches.size(); ++row) {
|
||||||
AutoTypeMatch match = m_matches[row];
|
AutoTypeMatch match = m_matches[row];
|
||||||
if (match.entry == entry) {
|
if (match.entry == entry) {
|
||||||
beginRemoveRows(QModelIndex(), row, row);
|
beginRemoveRows(QModelIndex(), row, row);
|
||||||
m_matches.removeAt(row);
|
m_matches.removeAt(row);
|
||||||
endRemoveRows();
|
endRemoveRows();
|
||||||
row--;
|
--row;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -50,7 +50,7 @@ public:
|
|||||||
|
|
||||||
void setMatchList(const QList<AutoTypeMatch>& matches);
|
void setMatchList(const QList<AutoTypeMatch>& matches);
|
||||||
|
|
||||||
private Q_SLOTS:
|
private slots:
|
||||||
void entryAboutToRemove(Entry* entry);
|
void entryAboutToRemove(Entry* entry);
|
||||||
void entryRemoved();
|
void entryRemoved();
|
||||||
void entryDataChanged(Entry* entry);
|
void entryDataChanged(Entry* entry);
|
||||||
|
@ -61,7 +61,7 @@ void AutoTypeMatchView::setMatchList(const QList<AutoTypeMatch>& matches)
|
|||||||
for (int i = 0; i < m_model->columnCount(); ++i) {
|
for (int i = 0; i < m_model->columnCount(); ++i) {
|
||||||
resizeColumnToContents(i);
|
resizeColumnToContents(i);
|
||||||
if (columnWidth(i) > 250) {
|
if (columnWidth(i) > 250) {
|
||||||
setColumnWidth(i, 250);
|
setColumnWidth(i, 250);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
setFirstMatchActive();
|
setFirstMatchActive();
|
||||||
@ -84,20 +84,13 @@ void AutoTypeMatchView::emitMatchActivated(const QModelIndex& index)
|
|||||||
emit matchActivated(match);
|
emit matchActivated(match);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AutoTypeMatchView::setModel(QAbstractItemModel* model)
|
|
||||||
{
|
|
||||||
Q_UNUSED(model);
|
|
||||||
Q_ASSERT(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
AutoTypeMatch AutoTypeMatchView::currentMatch()
|
AutoTypeMatch AutoTypeMatchView::currentMatch()
|
||||||
{
|
{
|
||||||
QModelIndexList list = selectionModel()->selectedRows();
|
QModelIndexList list = selectionModel()->selectedRows();
|
||||||
if (list.size() == 1) {
|
if (list.size() == 1) {
|
||||||
return m_model->matchFromIndex(m_sortModel->mapToSource(list.first()));
|
return m_model->matchFromIndex(m_sortModel->mapToSource(list.first()));
|
||||||
} else {
|
|
||||||
return AutoTypeMatch();
|
|
||||||
}
|
}
|
||||||
|
return AutoTypeMatch();
|
||||||
}
|
}
|
||||||
|
|
||||||
void AutoTypeMatchView::setCurrentMatch(AutoTypeMatch match)
|
void AutoTypeMatchView::setCurrentMatch(AutoTypeMatch match)
|
||||||
@ -110,7 +103,6 @@ AutoTypeMatch AutoTypeMatchView::matchFromIndex(const QModelIndex& index)
|
|||||||
{
|
{
|
||||||
if (index.isValid()) {
|
if (index.isValid()) {
|
||||||
return m_model->matchFromIndex(m_sortModel->mapToSource(index));
|
return m_model->matchFromIndex(m_sortModel->mapToSource(index));
|
||||||
} else {
|
|
||||||
return AutoTypeMatch();
|
|
||||||
}
|
}
|
||||||
|
return AutoTypeMatch();
|
||||||
}
|
}
|
||||||
|
@ -33,21 +33,20 @@ class AutoTypeMatchView : public QTreeView
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
explicit AutoTypeMatchView(QWidget* parent = nullptr);
|
explicit AutoTypeMatchView(QWidget* parent = nullptr);
|
||||||
void setModel(QAbstractItemModel* model) override;
|
|
||||||
AutoTypeMatch currentMatch();
|
AutoTypeMatch currentMatch();
|
||||||
void setCurrentMatch(AutoTypeMatch match);
|
void setCurrentMatch(AutoTypeMatch match);
|
||||||
AutoTypeMatch matchFromIndex(const QModelIndex& index);
|
AutoTypeMatch matchFromIndex(const QModelIndex& index);
|
||||||
void setMatchList(const QList<AutoTypeMatch>& matches);
|
void setMatchList(const QList<AutoTypeMatch>& matches);
|
||||||
void setFirstMatchActive();
|
void setFirstMatchActive();
|
||||||
|
|
||||||
Q_SIGNALS:
|
signals:
|
||||||
void matchActivated(AutoTypeMatch match);
|
void matchActivated(AutoTypeMatch match);
|
||||||
void matchSelectionChanged();
|
void matchSelectionChanged();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void keyPressEvent(QKeyEvent* event) override;
|
void keyPressEvent(QKeyEvent* event) override;
|
||||||
|
|
||||||
private Q_SLOTS:
|
private slots:
|
||||||
void emitMatchActivated(const QModelIndex& index);
|
void emitMatchActivated(const QModelIndex& index);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -170,7 +170,6 @@ void EditEntryWidget::setupAutoType()
|
|||||||
|
|
||||||
m_autoTypeDefaultSequenceGroup->addButton(m_autoTypeUi->inheritSequenceButton);
|
m_autoTypeDefaultSequenceGroup->addButton(m_autoTypeUi->inheritSequenceButton);
|
||||||
m_autoTypeDefaultSequenceGroup->addButton(m_autoTypeUi->customSequenceButton);
|
m_autoTypeDefaultSequenceGroup->addButton(m_autoTypeUi->customSequenceButton);
|
||||||
//m_autoTypeWindowSequenceGroup->addButton(m_autoTypeUi->customWindowSequenceButton);
|
|
||||||
m_autoTypeAssocModel->setAutoTypeAssociations(m_autoTypeAssoc);
|
m_autoTypeAssocModel->setAutoTypeAssociations(m_autoTypeAssoc);
|
||||||
m_autoTypeUi->assocView->setModel(m_autoTypeAssocModel);
|
m_autoTypeUi->assocView->setModel(m_autoTypeAssocModel);
|
||||||
m_autoTypeUi->assocView->setColumnHidden(1, true);
|
m_autoTypeUi->assocView->setColumnHidden(1, true);
|
||||||
|
@ -310,7 +310,7 @@ void TestAutoType::testAutoTypeEffectiveSequences()
|
|||||||
QString sequenceDisabled("{TEST_DISABLED}");
|
QString sequenceDisabled("{TEST_DISABLED}");
|
||||||
QString sequenceOrphan("{TEST_ORPHAN}");
|
QString sequenceOrphan("{TEST_ORPHAN}");
|
||||||
|
|
||||||
Database* db = new Database();
|
QScopedPointer<Database> db(new Database());
|
||||||
QPointer<Group> rootGroup = db->rootGroup();
|
QPointer<Group> rootGroup = db->rootGroup();
|
||||||
|
|
||||||
// Group with autotype enabled and custom default sequence
|
// Group with autotype enabled and custom default sequence
|
||||||
@ -362,7 +362,7 @@ void TestAutoType::testAutoTypeEffectiveSequences()
|
|||||||
entry5->setAutoTypeEnabled(false);
|
entry5->setAutoTypeEnabled(false);
|
||||||
|
|
||||||
// Entry with no parent
|
// Entry with no parent
|
||||||
QPointer<Entry> entry6 = new Entry();
|
QScopedPointer<Entry> entry6(new Entry());
|
||||||
entry6->setDefaultAutoTypeSequence(sequenceOrphan);
|
entry6->setDefaultAutoTypeSequence(sequenceOrphan);
|
||||||
|
|
||||||
QCOMPARE(entry1->defaultAutoTypeSequence(), QString());
|
QCOMPARE(entry1->defaultAutoTypeSequence(), QString());
|
||||||
@ -377,6 +377,4 @@ void TestAutoType::testAutoTypeEffectiveSequences()
|
|||||||
QCOMPARE(entry5->effectiveAutoTypeSequence(), QString());
|
QCOMPARE(entry5->effectiveAutoTypeSequence(), QString());
|
||||||
QCOMPARE(entry6->defaultAutoTypeSequence(), sequenceOrphan);
|
QCOMPARE(entry6->defaultAutoTypeSequence(), sequenceOrphan);
|
||||||
QCOMPARE(entry6->effectiveAutoTypeSequence(), QString());
|
QCOMPARE(entry6->effectiveAutoTypeSequence(), QString());
|
||||||
|
|
||||||
delete db;
|
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user