]> git.lyx.org Git - features.git/commitdiff
Fix the infinite loop when automatically closing the view after a on_lastWorkAreaRemo...
authorVincent van Ravesteijn <vfr@lyx.org>
Sun, 12 Jul 2009 20:42:14 +0000 (20:42 +0000)
committerVincent van Ravesteijn <vfr@lyx.org>
Sun, 12 Jul 2009 20:42:14 +0000 (20:42 +0000)
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

index c22fb322c5278b4c8715d04f0abc8ee1e5f4920f..184ad31390cbd8c597495b93e602acc9c0c2f56a 100644 (file)
@@ -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);