From: Guillaume Munch Date: Sat, 31 Dec 2016 14:16:15 +0000 (+0100) Subject: TocWidget: Remove possibly dangling BufferView pointer X-Git-Tag: 2.3.0alpha1~549 X-Git-Url: https://git.lyx.org/gitweb/?a=commitdiff_plain;h=cde3f6b84cb965b6258cde2ab19f02a160e0d268;p=lyx.git TocWidget: Remove possibly dangling BufferView pointer --- diff --git a/src/frontends/qt4/TocModel.cpp b/src/frontends/qt4/TocModel.cpp index 96711e6173..e40d99c9cb 100644 --- a/src/frontends/qt4/TocModel.cpp +++ b/src/frontends/qt4/TocModel.cpp @@ -248,7 +248,6 @@ int TocModel::modelDepth() const /////////////////////////////////////////////////////////////////////////////// TocModels::TocModels() - : bv_(0) { names_ = new TocTypeModel(this); names_sorted_ = new TocModelSortProxyModel(this); @@ -272,7 +271,7 @@ void TocModels::clear() int TocModels::depth(QString const & type) { const_iterator it = models_.find(type); - if (!bv_ || it == models_.end()) + if (it == models_.end()) return 0; return it.value()->modelDepth(); } @@ -280,8 +279,6 @@ int TocModels::depth(QString const & type) QAbstractItemModel * TocModels::model(QString const & type) { - if (!bv_) - return 0; iterator it = models_.find(type); if (it != models_.end()) return it.value()->model(); @@ -296,12 +293,13 @@ QAbstractItemModel * TocModels::nameModel() } -QModelIndex TocModels::currentIndex(QString const & type) const +QModelIndex TocModels::currentIndex(QString const & type, + DocIterator const & dit) const { const_iterator it = models_.find(type); - if (!bv_ || it == models_.end()) + if (it == models_.end()) return QModelIndex(); - return it.value()->modelIndex(bv_->cursor()); + return it.value()->modelIndex(dit); } @@ -341,9 +339,8 @@ void TocModels::updateItem(QString const & type, DocIterator const & dit) void TocModels::reset(BufferView const * bv) { - bv_ = bv; clear(); - if (!bv_) { + if (!bv) { iterator end = models_.end(); for (iterator it = models_.begin(); it != end; ++it) it.value()->reset(); @@ -354,7 +351,7 @@ void TocModels::reset(BufferView const * bv) names_->blockSignals(true); names_->beginResetModel(); names_->insertColumns(0, 1); - TocList const & tocs = bv_->buffer().masterBuffer()->tocBackend().tocs(); + TocList const & tocs = bv->buffer().masterBuffer()->tocBackend().tocs(); TocList::const_iterator it = tocs.begin(); TocList::const_iterator toc_end = tocs.end(); for (; it != toc_end; ++it) { diff --git a/src/frontends/qt4/TocModel.h b/src/frontends/qt4/TocModel.h index f7d54e822a..0c3c6b09dd 100644 --- a/src/frontends/qt4/TocModel.h +++ b/src/frontends/qt4/TocModel.h @@ -121,7 +121,8 @@ public: /// QAbstractItemModel * nameModel(); /// - QModelIndex currentIndex(QString const & type) const; + QModelIndex currentIndex(QString const & type, + DocIterator const & dit) const; /// void goTo(QString const & type, QModelIndex const & index) const; /// @@ -142,8 +143,6 @@ private: /// void clear(); /// - BufferView const * bv_; - /// QHash models_; /// TocTypeModel * names_; diff --git a/src/frontends/qt4/TocWidget.cpp b/src/frontends/qt4/TocWidget.cpp index 8bf753a973..b96a7c644c 100644 --- a/src/frontends/qt4/TocWidget.cpp +++ b/src/frontends/qt4/TocWidget.cpp @@ -456,7 +456,11 @@ void TocWidget::finishUpdateView() if (!persistent_) setTreeDepth(depth_); persistentCB->setChecked(persistent_); - select(gui_view_.tocModels().currentIndex(current_type_)); + // select the item at current cursor location + if (gui_view_.documentBufferView()) { + DocIterator const & dit = gui_view_.documentBufferView()->cursor(); + select(gui_view_.tocModels().currentIndex(current_type_, dit)); + } } filterContents(); }