Regain focus after native file dialogs have been closed.

For some reason this happens on Mac OS X.
We work around it by calling activateWindow().

Closes #39
This commit is contained in:
Felix Geyer 2012-07-23 23:58:46 +02:00
parent c0e91e4f16
commit 5786d0c279
3 changed files with 13 additions and 5 deletions

View File

@ -45,7 +45,6 @@ const int DatabaseTabWidget::LastDatabasesCount = 5;
DatabaseTabWidget::DatabaseTabWidget(QWidget* parent) DatabaseTabWidget::DatabaseTabWidget(QWidget* parent)
: QTabWidget(parent) : QTabWidget(parent)
, m_window(parent->window())
{ {
DragTabBar* tabBar = new DragTabBar(this); DragTabBar* tabBar = new DragTabBar(this);
tabBar->setDrawBase(false); tabBar->setDrawBase(false);
@ -94,7 +93,7 @@ void DatabaseTabWidget::newDatabase()
void DatabaseTabWidget::openDatabase() void DatabaseTabWidget::openDatabase()
{ {
QString filter = QString("%1 (*.kdbx);;%2 (*)").arg(tr("KeePass 2 Database"), tr("All files")); QString filter = QString("%1 (*.kdbx);;%2 (*)").arg(tr("KeePass 2 Database"), tr("All files"));
QString fileName = fileDialog()->getOpenFileName(m_window, tr("Open database"), QString(), QString fileName = fileDialog()->getOpenFileName(this, tr("Open database"), QString(),
filter); filter);
if (!fileName.isEmpty()) { if (!fileName.isEmpty()) {
openDatabase(fileName); openDatabase(fileName);
@ -287,7 +286,7 @@ void DatabaseTabWidget::saveDatabaseAs(Database* db)
if (dbStruct.saveToFilename) { if (dbStruct.saveToFilename) {
oldFileName = dbStruct.filePath; oldFileName = dbStruct.filePath;
} }
QString fileName = fileDialog()->getSaveFileName(m_window, tr("Save database as"), QString fileName = fileDialog()->getSaveFileName(this, tr("Save database as"),
oldFileName, tr("KeePass 2 Database").append(" (*.kdbx)")); oldFileName, tr("KeePass 2 Database").append(" (*.kdbx)"));
if (!fileName.isEmpty()) { if (!fileName.isEmpty()) {
bool result = false; bool result = false;

View File

@ -48,7 +48,7 @@ class DatabaseTabWidget : public QTabWidget
Q_OBJECT Q_OBJECT
public: public:
explicit DatabaseTabWidget(QWidget* parent); explicit DatabaseTabWidget(QWidget* parent = Q_NULLPTR);
~DatabaseTabWidget(); ~DatabaseTabWidget();
void openDatabase(const QString& fileName, const QString& pw = QString(), void openDatabase(const QString& fileName, const QString& pw = QString(),
const QString& keyFile = QString()); const QString& keyFile = QString());
@ -107,7 +107,6 @@ private:
void updateLastDatabases(const QString& filename); void updateLastDatabases(const QString& filename);
void connectDatabase(Database* newDb, Database* oldDb = Q_NULLPTR); void connectDatabase(Database* newDb, Database* oldDb = Q_NULLPTR);
QWidget* const m_window;
KeePass2Writer m_writer; KeePass2Writer m_writer;
QHash<Database*, DatabaseManagerStruct> m_dbList; QHash<Database*, DatabaseManagerStruct> m_dbList;
}; };

View File

@ -38,6 +38,11 @@ QString FileDialog::getOpenFileName(QWidget* parent, const QString& caption, QSt
QString result = QFileDialog::getOpenFileName(parent, caption, dir, filter, QString result = QFileDialog::getOpenFileName(parent, caption, dir, filter,
selectedFilter, options); selectedFilter, options);
// on Mac OS X the focus is lost after closing the native dialog
if (parent) {
parent->activateWindow();
}
if (!result.isEmpty()) { if (!result.isEmpty()) {
config()->set("LastDir", QFileInfo(result).absolutePath()); config()->set("LastDir", QFileInfo(result).absolutePath());
} }
@ -63,6 +68,11 @@ QString FileDialog::getSaveFileName(QWidget* parent, const QString& caption, QSt
QString result = QFileDialog::getSaveFileName(parent, caption, dir, filter, QString result = QFileDialog::getSaveFileName(parent, caption, dir, filter,
selectedFilter, options); selectedFilter, options);
// on Mac OS X the focus is lost after closing the native dialog
if (parent) {
parent->activateWindow();
}
if (!result.isEmpty()) { if (!result.isEmpty()) {
config()->set("LastDir", QFileInfo(result).absolutePath()); config()->set("LastDir", QFileInfo(result).absolutePath());
} }