diff options
author | J-P Nurmi <jpnurmi@digia.com> | 2014-03-28 15:03:01 +0100 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2014-04-01 05:26:50 +0200 |
commit | cc08fc7bfd1a5cf2da52d49b8b4989b33d3597cc (patch) | |
tree | 815e1145b6636635bbe5a7c2fd2c900a7f6739ea /src/widgets | |
parent | f4f23bd5b047353a1a6f56810917e0c0f27de219 (diff) |
Item views: respect focus policy when closing an editor
Task-number: QTBUG-31411
Change-Id: Ib0a72755c35a553653ea014672d59979a550b7ae
Reviewed-by: Thorbjørn Lund Martsum <tmartsum@gmail.com>
Diffstat (limited to 'src/widgets')
-rw-r--r-- | src/widgets/itemviews/qabstractitemview.cpp | 10 | ||||
-rw-r--r-- | src/widgets/itemviews/qitemdelegate.cpp | 5 | ||||
-rw-r--r-- | src/widgets/itemviews/qstyleditemdelegate.cpp | 5 |
3 files changed, 9 insertions, 11 deletions
diff --git a/src/widgets/itemviews/qabstractitemview.cpp b/src/widgets/itemviews/qabstractitemview.cpp index 771753b7da..77e683643e 100644 --- a/src/widgets/itemviews/qabstractitemview.cpp +++ b/src/widgets/itemviews/qabstractitemview.cpp @@ -2753,10 +2753,14 @@ void QAbstractItemView::closeEditor(QWidget *editor, QAbstractItemDelegate::EndE editor->removeEventFilter(d->delegateForIndex(index)); d->removeEditor(editor); } - if (hadFocus) - setFocus(); // this will send a focusLost event to the editor - else + if (hadFocus) { + if (focusPolicy() != Qt::NoFocus) + setFocus(); // this will send a focusLost event to the editor + else + editor->clearFocus(); + } else { d->checkPersistentEditorFocus(); + } QPointer<QWidget> ed = editor; QApplication::sendPostedEvents(editor, 0); diff --git a/src/widgets/itemviews/qitemdelegate.cpp b/src/widgets/itemviews/qitemdelegate.cpp index 0b654a7485..6a1fe22395 100644 --- a/src/widgets/itemviews/qitemdelegate.cpp +++ b/src/widgets/itemviews/qitemdelegate.cpp @@ -1210,13 +1210,10 @@ bool QItemDelegate::eventFilter(QObject *object, QEvent *event) case Qt::Key_Escape: // don't commit data emit closeEditor(editor, QAbstractItemDelegate::RevertModelCache); - break; + return true; default: return false; } - if (editor->parentWidget()) - editor->parentWidget()->setFocus(); - return true; } else if (event->type() == QEvent::FocusOut || (event->type() == QEvent::Hide && editor->isWindow())) { //the Hide event will take care of he editors that are in fact complete dialogs if (!editor->isActiveWindow() || (QApplication::focusWidget() != editor)) { diff --git a/src/widgets/itemviews/qstyleditemdelegate.cpp b/src/widgets/itemviews/qstyleditemdelegate.cpp index c2aa630918..da5aeb3290 100644 --- a/src/widgets/itemviews/qstyleditemdelegate.cpp +++ b/src/widgets/itemviews/qstyleditemdelegate.cpp @@ -678,13 +678,10 @@ bool QStyledItemDelegate::eventFilter(QObject *object, QEvent *event) case Qt::Key_Escape: // don't commit data emit closeEditor(editor, QAbstractItemDelegate::RevertModelCache); - break; + return true; default: return false; } - if (editor->parentWidget()) - editor->parentWidget()->setFocus(); - return true; } else if (event->type() == QEvent::FocusOut || (event->type() == QEvent::Hide && editor->isWindow())) { //the Hide event will take care of he editors that are in fact complete dialogs if (!editor->isActiveWindow() || (QApplication::focusWidget() != editor)) { |