From 19ab78865c22901de9b90b1a444ed87c1d5a6cd4 Mon Sep 17 00:00:00 2001 From: Ulf Hermann Date: Wed, 28 Oct 2015 13:32:53 +0100 Subject: [PATCH] QmlJS: Fix focus handling in QML/JS console We want the line editor to be focused by default when the console is opened either by mouse or by keyboard interaction. Change-Id: Ic366d1ac5f1306c0739c334584568402969895f3 Task-number: QTCREATORBUG-14931 Reviewed-by: hjk --- src/plugins/qmljstools/qmlconsolepane.cpp | 9 +++++++-- src/plugins/qmljstools/qmlconsoleview.cpp | 10 +++++++--- src/plugins/qmljstools/qmlconsoleview.h | 1 + 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/plugins/qmljstools/qmlconsolepane.cpp b/src/plugins/qmljstools/qmlconsolepane.cpp index c5ca97eda93..a8a61dcd73b 100644 --- a/src/plugins/qmljstools/qmlconsolepane.cpp +++ b/src/plugins/qmljstools/qmlconsolepane.cpp @@ -195,12 +195,17 @@ bool QmlConsolePane::canFocus() const bool QmlConsolePane::hasFocus() const { - return m_consoleWidget->window()->focusWidget() == m_consoleWidget; + for (QWidget *widget = m_consoleWidget->window()->focusWidget(); widget != 0; + widget = widget->parentWidget()) { + if (widget == m_consoleWidget) + return true; + } + return false; } void QmlConsolePane::setFocus() { - m_consoleWidget->setFocus(); + m_consoleView->setFocus(); } bool QmlConsolePane::canNext() const diff --git a/src/plugins/qmljstools/qmlconsoleview.cpp b/src/plugins/qmljstools/qmlconsoleview.cpp index 5c0f054a422..31c058d9fb8 100644 --- a/src/plugins/qmljstools/qmlconsoleview.cpp +++ b/src/plugins/qmljstools/qmlconsoleview.cpp @@ -164,9 +164,6 @@ void QmlConsoleView::mousePressEvent(QMouseEvent *event) } if (!handled) Utils::TreeView::mousePressEvent(event); - } else { - selectionModel()->setCurrentIndex(model()->index(model()->rowCount() - 1, 0), - QItemSelectionModel::ClearAndSelect); } } @@ -216,6 +213,13 @@ void QmlConsoleView::contextMenuEvent(QContextMenuEvent *event) } } +void QmlConsoleView::focusInEvent(QFocusEvent *event) +{ + Q_UNUSED(event); + selectionModel()->setCurrentIndex(model()->index(model()->rowCount() - 1, 0), + QItemSelectionModel::ClearAndSelect); +} + void QmlConsoleView::onRowActivated(const QModelIndex &index) { if (!index.isValid()) diff --git a/src/plugins/qmljstools/qmlconsoleview.h b/src/plugins/qmljstools/qmlconsoleview.h index 8b42283b914..0fa85a4b517 100644 --- a/src/plugins/qmljstools/qmlconsoleview.h +++ b/src/plugins/qmljstools/qmlconsoleview.h @@ -51,6 +51,7 @@ protected: void drawBranches(QPainter *painter, const QRect &rect, const QModelIndex &index) const; void contextMenuEvent(QContextMenuEvent *event); + void focusInEvent(QFocusEvent *event); private slots: void onRowActivated(const QModelIndex &index);