From 8460c9a072be7e067443c7933ca676285fd1bee5 Mon Sep 17 00:00:00 2001 From: Abdelrazak Younes Date: Wed, 21 Nov 2007 15:12:47 +0000 Subject: [PATCH] Introducing Application::resetGui() that will reset all dialogs in all lyx windows (including toolbars and menubars). git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@21689 a592a061-630c-0410-9148-cb99ea01b6c8 --- src/LyXFunc.cpp | 2 ++ src/frontends/Application.h | 3 +++ src/frontends/qt4/GuiApplication.cpp | 8 ++++++++ src/frontends/qt4/GuiApplication.h | 1 + src/frontends/qt4/GuiToolbars.cpp | 5 +++++ src/frontends/qt4/GuiView.cpp | 12 ++++++++++++ src/frontends/qt4/GuiView.h | 4 +++- 7 files changed, 34 insertions(+), 1 deletion(-) diff --git a/src/LyXFunc.cpp b/src/LyXFunc.cpp index 32d643ab16..5fcf92825e 100644 --- a/src/LyXFunc.cpp +++ b/src/LyXFunc.cpp @@ -1878,6 +1878,8 @@ void LyXFunc::dispatch(FuncRequest const & cmd) actOnUpdatedPrefs(lyxrc_orig, lyxrc); + theApp()->resetGui(); + /// We force the redraw in any case because there might be /// some screen font changes. /// FIXME: only the current view will be updated. the Gui diff --git a/src/frontends/Application.h b/src/frontends/Application.h index 7c3abdd50e..f85f196e8e 100644 --- a/src/frontends/Application.h +++ b/src/frontends/Application.h @@ -151,6 +151,9 @@ public: /// virtual ~Application() {} + /// + virtual void resetGui() = 0; + /// virtual bool closeAllViews() = 0; /// diff --git a/src/frontends/qt4/GuiApplication.cpp b/src/frontends/qt4/GuiApplication.cpp index 0161891f74..e646929f76 100644 --- a/src/frontends/qt4/GuiApplication.cpp +++ b/src/frontends/qt4/GuiApplication.cpp @@ -213,6 +213,14 @@ GuiApplication::~GuiApplication() } +void GuiApplication::resetGui() +{ + map::iterator it; + for (it = views_.begin(); it != views_.end(); ++it) + it->second->resetDialogs(); +} + + static void updateIds(map const & stdmap, vector & ids) { ids.clear(); diff --git a/src/frontends/qt4/GuiApplication.h b/src/frontends/qt4/GuiApplication.h index 40cec19fd9..435af2d813 100644 --- a/src/frontends/qt4/GuiApplication.h +++ b/src/frontends/qt4/GuiApplication.h @@ -56,6 +56,7 @@ public: /// Method inherited from \c Application class //@{ + virtual void resetGui(); virtual Clipboard & clipboard(); virtual Selection & selection(); virtual FontLoader & fontLoader() { return font_loader_; } diff --git a/src/frontends/qt4/GuiToolbars.cpp b/src/frontends/qt4/GuiToolbars.cpp index a7a6a60346..20fc1fcbd6 100644 --- a/src/frontends/qt4/GuiToolbars.cpp +++ b/src/frontends/qt4/GuiToolbars.cpp @@ -112,6 +112,11 @@ void GuiToolbars::initFlags(ToolbarInfo & tbinfo) void GuiToolbars::init() { + ToolbarsMap::const_iterator it = toolbars_.begin(); + for (; it != toolbars_.end(); ++it) + delete it->second; + toolbars_.clear(); + // extracts the toolbars from the backend ToolbarBackend::Toolbars::iterator cit = toolbarbackend.begin(); ToolbarBackend::Toolbars::iterator end = toolbarbackend.end(); diff --git a/src/frontends/qt4/GuiView.cpp b/src/frontends/qt4/GuiView.cpp index 6b97f33805..027a7fe68d 100644 --- a/src/frontends/qt4/GuiView.cpp +++ b/src/frontends/qt4/GuiView.cpp @@ -1213,6 +1213,18 @@ bool isValidName(string const & name) } // namespace anon +void GuiView::resetDialogs() +{ + // Make sure that no LFUN uses any LyXView. + theLyXFunc().setLyXView(0); + delete d.menubar_; + d.toolbars_->init(); + d.menubar_ = new GuiMenubar(this, menubackend); + if (d.layout_) + d.layout_->updateContents(true); +} + + Dialog * GuiView::find_or_build(string const & name) { if (!isValidName(name)) diff --git a/src/frontends/qt4/GuiView.h b/src/frontends/qt4/GuiView.h index abbd915838..b4e548fbba 100644 --- a/src/frontends/qt4/GuiView.h +++ b/src/frontends/qt4/GuiView.h @@ -58,7 +58,6 @@ public: ~GuiView(); - /// /// int id() const { return id_; } void close(); @@ -181,6 +180,9 @@ public: /// dialogs for this view /// + /// + void resetDialogs(); + /** Check the status of all visible dialogs and disable or reenable * them as appropriate. *