From a5b09336aca6b9cf2cd8b3429055ab4d68ed217d Mon Sep 17 00:00:00 2001 From: mae Date: Tue, 1 Sep 2009 15:13:43 +0200 Subject: Fixed crash in combination with splits (some spurious focus in events resulted in currentEditorView() being 0) (cherry picked from commit a922accd11bdd1401de4bd9d5f40e5f435236c5e) --- src/plugins/coreplugin/editormanager/editormanager.cpp | 4 ++-- src/plugins/coreplugin/editormanager/editorview.cpp | 11 ++++++----- src/plugins/coreplugin/editormanager/editorview.h | 2 +- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/src/plugins/coreplugin/editormanager/editormanager.cpp b/src/plugins/coreplugin/editormanager/editormanager.cpp index c769d4b500c..12a31c7e988 100644 --- a/src/plugins/coreplugin/editormanager/editormanager.cpp +++ b/src/plugins/coreplugin/editormanager/editormanager.cpp @@ -1484,8 +1484,8 @@ void EditorManager::updateActions() m_d->m_gotoNextDocHistoryAction->setEnabled(m_d->m_editorModel->rowCount() != 0); m_d->m_gotoPreviousDocHistoryAction->setEnabled(m_d->m_editorModel->rowCount() != 0); EditorView *view = currentEditorView(); - m_d->m_goBackAction->setEnabled(view->canGoBack()); - m_d->m_goForwardAction->setEnabled(view->canGoForward()); + m_d->m_goBackAction->setEnabled(view ? view->canGoBack() : false); + m_d->m_goForwardAction->setEnabled(view ? view->canGoForward() : false); bool hasSplitter = m_d->m_splitter->isSplitter(); m_d->m_removeCurrentSplitAction->setEnabled(hasSplitter); diff --git a/src/plugins/coreplugin/editormanager/editorview.cpp b/src/plugins/coreplugin/editormanager/editorview.cpp index 12649c47542..ea9b2ff1648 100644 --- a/src/plugins/coreplugin/editormanager/editorview.cpp +++ b/src/plugins/coreplugin/editormanager/editorview.cpp @@ -617,7 +617,6 @@ SplitterOrView::SplitterOrView(OpenEditorsModel *model) m_view = new EditorView(model); m_splitter = 0; m_layout->addWidget(m_view); - setFocusPolicy(Qt::ClickFocus); } SplitterOrView::SplitterOrView(Core::IEditor *editor) @@ -629,7 +628,6 @@ SplitterOrView::SplitterOrView(Core::IEditor *editor) m_view->addEditor(editor); m_splitter = 0; m_layout->addWidget(m_view); - setFocusPolicy(Qt::ClickFocus); } SplitterOrView::~SplitterOrView() @@ -642,10 +640,11 @@ SplitterOrView::~SplitterOrView() m_splitter = 0; } - - -void SplitterOrView::focusInEvent(QFocusEvent *) +void SplitterOrView::mousePressEvent(QMouseEvent *e) { + if (e->button() != Qt::LeftButton) + return; + setFocus(Qt::MouseFocusReason); CoreImpl::instance()->editorManager()->setCurrentView(this); } @@ -664,6 +663,7 @@ void SplitterOrView::paintEvent(QPaintEvent *) const int r = 3; painter.drawRoundedRect(rect().adjusted(r, r, -r, -r), r * 2, r * 2); +#if 0 if (hasFocus()) { #ifdef Q_WS_MAC // With QMacStyle, we have to draw our own focus rect, since I didn't find @@ -687,6 +687,7 @@ void SplitterOrView::paintEvent(QPaintEvent *) } #endif } +#endif } SplitterOrView *SplitterOrView::findFirstView() diff --git a/src/plugins/coreplugin/editormanager/editorview.h b/src/plugins/coreplugin/editormanager/editorview.h index cf352671eae..76d5233b1d5 100644 --- a/src/plugins/coreplugin/editormanager/editorview.h +++ b/src/plugins/coreplugin/editormanager/editorview.h @@ -199,8 +199,8 @@ public: void unsplitAll(); protected: - void focusInEvent(QFocusEvent *); void paintEvent(QPaintEvent *); + void mousePressEvent(QMouseEvent *e); private: -- cgit v1.2.3