Project import: Fix focus issue

If the user presses return in the path chooser, and the directory does
not contain a proper build, then a message box will come up, after which
the focus might not be at the path chooser anymore, which breaks our
(admittedly somewhat brittle) logic. So we now keep an explicit state
that tells us whether the parent widget should be allowed to handle the
return key or not.

Amends 50dc5674d3.

Change-Id: Ia4643b57641fda591292d20e6883e1c8bc281c0f
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
Christian Kandeler
2019-06-26 17:05:14 +02:00
parent f25408c436
commit a111f25126
3 changed files with 10 additions and 5 deletions

View File

@@ -63,10 +63,14 @@ ImportWidget::ImportWidget(QWidget *parent) :
connect(importButton, &QAbstractButton::clicked, this, &ImportWidget::handleImportRequest);
connect(m_pathChooser->lineEdit(), &QLineEdit::returnPressed, this, [this] {
if (m_pathChooser->isValid()) {
m_ownsReturnKey = true;
handleImportRequest();
// The next return should trigger the "Configure" button.
QTimer::singleShot(0, this, QOverload<>::of(&QWidget::setFocus));
QTimer::singleShot(0, this, [this] {
setFocus();
m_ownsReturnKey = false;
});
}
});
@@ -79,9 +83,9 @@ void ImportWidget::setCurrentDirectory(const Utils::FilePath &dir)
m_pathChooser->setFileName(dir);
}
bool ImportWidget::lineEditHasFocus() const
bool ImportWidget::ownsReturnKey() const
{
return m_pathChooser->lineEdit()->hasFocus();
return m_ownsReturnKey;
}
void ImportWidget::handleImportRequest()

View File

@@ -44,7 +44,7 @@ public:
void setCurrentDirectory(const Utils::FilePath &dir);
bool lineEditHasFocus() const;
bool ownsReturnKey() const;
signals:
void importFrom(const Utils::FilePath &dir);
@@ -53,6 +53,7 @@ private:
void handleImportRequest();
Utils::PathChooser *m_pathChooser;
bool m_ownsReturnKey = false;
};
} // namespace Internal

View File

@@ -330,7 +330,7 @@ void TargetSetupPage::setProjectImporter(ProjectImporter *importer)
bool TargetSetupPage::importLineEditHasFocus() const
{
return m_importWidget->lineEditHasFocus();
return m_importWidget->ownsReturnKey();
}
void TargetSetupPage::setNoteText(const QString &text)