commit cde3f6b84cb965b6258cde2ab19f02a160e0d268
Author: Guillaume Munch <[email protected]>
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();
}