commit cde3f6b84cb965b6258cde2ab19f02a160e0d268
Author: Guillaume Munch <g...@lyx.org>
Date:   Sat Dec 31 15:16:15 2016 +0100

    TocWidget: Remove possibly dangling BufferView pointer
---
 src/frontends/qt4/TocModel.cpp  |   17 +++++++----------
 src/frontends/qt4/TocModel.h    |    5 ++---
 src/frontends/qt4/TocWidget.cpp |    6 +++++-
 3 files changed, 14 insertions(+), 14 deletions(-)

diff --git a/src/frontends/qt4/TocModel.cpp b/src/frontends/qt4/TocModel.cpp
index 96711e6..e40d99c 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 f7d54e8..0c3c6b0 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<QString, TocModel *> models_;
        ///
        TocTypeModel * names_;
diff --git a/src/frontends/qt4/TocWidget.cpp b/src/frontends/qt4/TocWidget.cpp
index 8bf753a..b96a7c6 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();
 }

Reply via email to