From 1bce8f15af13fd2ee9a090bea4ade0e016a406c9 Mon Sep 17 00:00:00 2001 From: Vincent van Ravesteijn Date: Sun, 12 Jul 2009 20:42:14 +0000 Subject: [PATCH] Fix the infinite loop when automatically closing the view after a on_lastWorkAreaRemoved() signal was received. In this case, all workareas are closed, but the tabworkarea still exists. git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@30521 a592a061-630c-0410-9148-cb99ea01b6c8 --- src/frontends/qt4/GuiView.cpp | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/frontends/qt4/GuiView.cpp b/src/frontends/qt4/GuiView.cpp index c22fb322c5..184ad31390 100644 --- a/src/frontends/qt4/GuiView.cpp +++ b/src/frontends/qt4/GuiView.cpp @@ -538,12 +538,21 @@ void GuiView::closeEvent(QCloseEvent * close_event) GuiWorkArea * active_wa = currentMainWorkArea(); setCurrentWorkArea(active_wa); + // We might be in a situation that there is still a tabWorkArea, but + // there are no tabs anymore. This can happen when we get here after a + // TabWorkArea::lastWorkAreaRemoved() signal. Therefore we count how + // many TabWorkArea's have no documents anymore. + int empty_twa = 0; + // We have to call count() each time, because it can happen that // more than one splitter will disappear in one iteration (bug 5998). - for (; d.splitter_->count(); ) { - TabWorkArea * twa = d.tabWorkArea(0); + for (; d.splitter_->count() > empty_twa; ) { + TabWorkArea * twa = d.tabWorkArea(empty_twa); int twa_count = twa->count(); + if (twa->count() == 0) + ++empty_twa; + for (; twa_count; --twa_count) { twa->setCurrentIndex(twa_count-1); -- 2.39.2