diff options
Diffstat (limited to 'vcl/source/window/dialog.cxx')
-rw-r--r-- | vcl/source/window/dialog.cxx | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/vcl/source/window/dialog.cxx b/vcl/source/window/dialog.cxx index 285b7c21da15..a1d8cf1e6a6c 100644 --- a/vcl/source/window/dialog.cxx +++ b/vcl/source/window/dialog.cxx @@ -43,6 +43,7 @@ #include <vcl/layout.hxx> #include <vcl/svapp.hxx> #include <vcl/event.hxx> +#include <vcl/waitobj.hxx> #include <vcl/wrkwin.hxx> #include <vcl/button.hxx> #include <vcl/mnemonic.hxx> @@ -1532,4 +1533,28 @@ void ModelessDialog::Activate() Dialog::Activate(); } +void TopLevelWindowLocker::incBusy(const vcl::Window* pIgnore) +{ + // lock any toplevel windows from being closed until busy is over + std::vector<VclPtr<vcl::Window>> aTopLevels; + vcl::Window *pTopWin = Application::GetFirstTopLevelWindow(); + while (pTopWin) + { + if (pTopWin != pIgnore) + aTopLevels.push_back(pTopWin); + pTopWin = Application::GetNextTopLevelWindow(pTopWin); + } + for (auto& a : aTopLevels) + a->IncModalCount(); + m_aBusyStack.push(aTopLevels); +} + +void TopLevelWindowLocker::decBusy() +{ + // unlock locked toplevel windows from being closed now busy is over + for (auto& a : m_aBusyStack.top()) + a->DecModalCount(); + m_aBusyStack.pop(); +} + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |