X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Ffrontends%2FDialogs.C;h=5ea2ef5ad3347dea7fa529b244aa8345e074ac29;hb=e7fc677261bd14fdf159e594fcf422e985c72664;hp=82996df58ba1d7a01c9920955bce541773bfb86d;hpb=b518346bbd37c3a9d6c3380855c3a0a3ecd00a66;p=lyx.git diff --git a/src/frontends/Dialogs.C b/src/frontends/Dialogs.C index 82996df58b..5ea2ef5ad3 100644 --- a/src/frontends/Dialogs.C +++ b/src/frontends/Dialogs.C @@ -16,11 +16,12 @@ #include "controllers/Dialog.h" -#include +#include #include using std::string; +using lyx::frontend::Dialog; // Note that static boost signals break some compilers, so this wrapper @@ -43,16 +44,16 @@ private: }; -boost::signal0 & Dialogs::redrawGUI() +boost::signal & Dialogs::redrawGUI() { - static BugfixSignal > thesignal; + static BugfixSignal > thesignal; return thesignal(); } namespace { -BugfixSignal > hideSignal; +BugfixSignal > hideSignal; } @@ -64,17 +65,11 @@ void Dialogs::hide(string const & name, InsetBase* inset) Dialogs::Dialogs(LyXView & lyxview) - : lyxview_(lyxview) + : lyxview_(lyxview), in_show_(false) { // Connect signals redrawGUI().connect(boost::bind(&Dialogs::redraw, this)); hideSignal().connect(boost::bind(&Dialogs::hideSlot, this, _1, _2)); - - // All this is slated to go - init_pimpl(); - // reduce the number of connections needed in - // dialogs by a simple connection here. - hideAllSignal.connect(hideBufferDependentSignal); } @@ -96,24 +91,32 @@ Dialog * Dialogs::find_or_build(string const & name) void Dialogs::show(string const & name, string const & data) { - Dialog * dialog = find_or_build(name); - if (!dialog) + if (in_show_) { return; - - // FIXME! Should check that the dialog is NOT an inset dialog. - dialog->show(data); + } + in_show_ = true; + Dialog * dialog = find_or_build(name); + if (dialog) { + // FIXME! Should check that the dialog is NOT an inset dialog. + dialog->show(data); + } + in_show_ = false; } void Dialogs::show(string const & name, string const & data, InsetBase * inset) { - Dialog * dialog = find_or_build(name); - if (!dialog) + if (in_show_) { return; - - // FIXME! Should check that the dialog IS an inset dialog. - dialog->show(data); - open_insets_[name] = inset; + } + in_show_ = true; + Dialog * dialog = find_or_build(name); + if (dialog) { + // FIXME! Should check that the dialog IS an inset dialog. + dialog->show(data); + open_insets_[name] = inset; + } + in_show_ = false; } @@ -185,7 +188,6 @@ void Dialogs::hideAll() const for(; it != end; ++it) { it->second->hide(); } - hideAllSignal(); } @@ -199,7 +201,6 @@ void Dialogs::hideBufferDependent() const if (dialog->controller().isBufferDependent()) dialog->hide(); } - hideBufferDependentSignal(); } @@ -219,7 +220,6 @@ void Dialogs::updateBufferDependent(bool switched) const dialog->RestoreButton(); } } - updateBufferDependentSignal(switched); } @@ -232,3 +232,16 @@ void Dialogs::redraw() const it->second->redraw(); } } + + +void Dialogs::checkStatus() +{ + std::map::const_iterator it = dialogs_.begin(); + std::map::const_iterator end = dialogs_.end(); + + for(; it != end; ++it) { + Dialog * const dialog = it->second.get(); + if (dialog->isVisible()) + dialog->checkStatus(); + } +}