summaryrefslogtreecommitdiffstats
path: root/Source/QtDialog/QCMakeCacheView.cxx
diff options
context:
space:
mode:
authorClinton Stimpson <clinton@elemtech.com>2008-04-02 19:28:17 (GMT)
committerClinton Stimpson <clinton@elemtech.com>2008-04-02 19:28:17 (GMT)
commit1e61bb1f4c19f6ed474abe4ab8415ac2a60e6b22 (patch)
tree0d50a0682fa62c4c76f1948e24de3501048665d2 /Source/QtDialog/QCMakeCacheView.cxx
parent76ed89cedebe4b47dcbc8f29442b2f9061a15f8e (diff)
downloadCMake-1e61bb1f4c19f6ed474abe4ab8415ac2a60e6b22.zip
CMake-1e61bb1f4c19f6ed474abe4ab8415ac2a60e6b22.tar.gz
CMake-1e61bb1f4c19f6ed474abe4ab8415ac2a60e6b22.tar.bz2
BUG: Keep editor alive when file dialog comes up to pick another file or path.
The editor going away prematurely Seems to only happen on Mac OS X.
Diffstat (limited to 'Source/QtDialog/QCMakeCacheView.cxx')
-rw-r--r--Source/QtDialog/QCMakeCacheView.cxx34
1 files changed, 31 insertions, 3 deletions
diff --git a/Source/QtDialog/QCMakeCacheView.cxx b/Source/QtDialog/QCMakeCacheView.cxx
index 74492bf..8a8f819 100644
--- a/Source/QtDialog/QCMakeCacheView.cxx
+++ b/Source/QtDialog/QCMakeCacheView.cxx
@@ -372,10 +372,15 @@ bool QCMakeCacheModel::insertRows(int row, int num, const QModelIndex&)
}
QCMakeCacheModelDelegate::QCMakeCacheModelDelegate(QObject* p)
- : QItemDelegate(p)
+ : QItemDelegate(p), FileDialogFlag(false)
{
}
+void QCMakeCacheModelDelegate::setFileDialogFlag(bool f)
+{
+ this->FileDialogFlag = f;
+}
+
QWidget* QCMakeCacheModelDelegate::createEditor(QWidget* p,
const QStyleOptionViewItem&, const QModelIndex& idx) const
{
@@ -388,13 +393,21 @@ QWidget* QCMakeCacheModelDelegate::createEditor(QWidget* p,
}
else if(type == QCMakeCacheProperty::PATH)
{
- return new QCMakeCachePathEditor(p,
+ QCMakeCachePathEditor* editor =
+ new QCMakeCachePathEditor(p,
var.data(Qt::DisplayRole).toString());
+ QObject::connect(editor, SIGNAL(fileDialogExists(bool)), this,
+ SLOT(setFileDialogFlag(bool)));
+ return editor;
}
else if(type == QCMakeCacheProperty::FILEPATH)
{
- return new QCMakeCacheFilePathEditor(p,
+ QCMakeCacheFilePathEditor* editor =
+ new QCMakeCacheFilePathEditor(p,
var.data(Qt::DisplayRole).toString());
+ QObject::connect(editor, SIGNAL(fileDialogExists(bool)), this,
+ SLOT(setFileDialogFlag(bool)));
+ return editor;
}
return new QLineEdit(p);
@@ -443,6 +456,17 @@ bool QCMakeCacheModelDelegate::editorEvent(QEvent* e, QAbstractItemModel* model,
return model->setData(index, state, Qt::CheckStateRole);
}
+bool QCMakeCacheModelDelegate::eventFilter(QObject* object, QEvent* event)
+{
+ // workaround for what looks like a bug in Qt on Mac OS X
+ if(event->type() == QEvent::FocusOut && this->FileDialogFlag)
+ {
+ return false;
+ }
+ return QItemDelegate::eventFilter(object, event);
+}
+
+
QCMakeCacheFileEditor::QCMakeCacheFileEditor(QWidget* p, const QString& var)
: QLineEdit(p), Variable(var)
{
@@ -492,7 +516,9 @@ void QCMakeCacheFilePathEditor::chooseFile()
title = tr("Select File for %1");
title = title.arg(this->Variable);
}
+ this->fileDialogExists(true);
path = QFileDialog::getOpenFileName(this, title, info.absolutePath());
+ this->fileDialogExists(false);
if(!path.isEmpty())
{
@@ -514,7 +540,9 @@ void QCMakeCachePathEditor::chooseFile()
title = tr("Select Path for %1");
title = title.arg(this->Variable);
}
+ this->fileDialogExists(true);
path = QFileDialog::getExistingDirectory(this, title, this->text());
+ this->fileDialogExists(false);
if(!path.isEmpty())
{
this->setText(QDir::fromNativeSeparators(path));