Rename closeBufferAll to closeWorkAreaAll (because that's what we do). Add a new closeBufferAll function that closes all WorkArea's and then all hidden buffers. This is easy now, because we've done everything to prevent hidden buffers to be dirty.

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@31125 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Vincent van Ravesteijn 2009-08-18 20:12:34 +00:00
parent 6e4ca1d18f
commit 64d7a33a89
2 changed files with 44 additions and 28 deletions

View File

@ -584,34 +584,6 @@ void GuiView::closeEvent(QCloseEvent * close_event)
}
bool GuiView::closeBufferAll(bool in_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() > empty_twa; ) {
TabWorkArea * twa = d.tabWorkArea(empty_twa);
if (twa->count() == 0)
++empty_twa;
else {
setCurrentWorkArea(twa->currentWorkArea());
if (!closeTabWorkArea(twa, true, active_wa))
return false;
}
}
return true;
}
void GuiView::dragEnterEvent(QDragEnterEvent * event)
{
if (event->mimeData()->hasUrls())
@ -1903,6 +1875,48 @@ bool GuiView::closeBuffer()
}
bool GuiView::closeBufferAll(bool in_close_event)
{
// First close all workareas. This will make
// sure that dirty buffers are saved.
if (!closeWorkAreaAll(in_close_event))
return false;
// Now close the hidden buffers. We prevent hidden
// buffers from being dirty, so we can just close them.
theBufferList().closeAll();
return true;
}
bool GuiView::closeWorkAreaAll(bool in_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() > empty_twa; ) {
TabWorkArea * twa = d.tabWorkArea(empty_twa);
if (twa->count() == 0)
++empty_twa;
else {
setCurrentWorkArea(twa->currentWorkArea());
if (!closeTabWorkArea(twa, true, active_wa))
return false;
}
}
return true;
}
bool GuiView::closeWorkArea(GuiWorkArea * wa, bool close_buffer,
bool in_close_event, bool mark_active)
{

View File

@ -309,6 +309,8 @@ private:
bool saveBufferIfNeeded(Buffer & buf, bool hiding);
///
bool closeBufferAll(bool in_close_event = false);
///
bool closeWorkAreaAll(bool in_close_event = false);
/// is the buffer in this workarea also shown in another tab ?
/// This tab can either be in the same view or in another one.
bool inMultiTabs(GuiWorkArea * wa);