diff --git a/src/frontends/qt4/GuiToolbar.cpp b/src/frontends/qt4/GuiToolbar.cpp index b459c606a5..507e847ad3 100644 --- a/src/frontends/qt4/GuiToolbar.cpp +++ b/src/frontends/qt4/GuiToolbar.cpp @@ -53,7 +53,8 @@ namespace frontend { GuiToolbar::GuiToolbar(ToolbarInfo const & tbinfo, GuiView & owner) : QToolBar(toqstr(tbinfo.gui_name), &owner), visibility_(0), - owner_(owner), command_buffer_(0), tbinfo_(tbinfo), filled_(false) + owner_(owner), command_buffer_(0), tbinfo_(tbinfo), filled_(false), + restored_(false) { setIconSize(owner.iconSize()); connect(&owner, SIGNAL(iconSizeChanged(QSize)), this, @@ -68,6 +69,22 @@ GuiToolbar::GuiToolbar(ToolbarInfo const & tbinfo, GuiView & owner) } +void GuiToolbar::setVisible(bool visible) +{ + // This is a hack to find out which toolbars have been restored by + // MainWindow::restoreState and which toolbars should be initialized + // by us (i.e., new toolbars) + restored_ = true; + QToolBar::setVisible(visible); +} + + +bool GuiToolbar::isRestored() const +{ + return restored_; +} + + void GuiToolbar::fill() { if (filled_) diff --git a/src/frontends/qt4/GuiToolbar.h b/src/frontends/qt4/GuiToolbar.h index f00575cd9d..394b9d8a34 100644 --- a/src/frontends/qt4/GuiToolbar.h +++ b/src/frontends/qt4/GuiToolbar.h @@ -69,6 +69,10 @@ class GuiToolbar : public QToolBar public: /// GuiToolbar(ToolbarInfo const &, GuiView &); + + /// Reimplemented from QToolbar to detect whether the + /// toolbar is restored with MainWindow::restoreState(). + void setVisible(bool visible); /// void setVisibility(int visibility); @@ -86,6 +90,9 @@ public: /// Restore session settings. void restoreSession(); + /// + bool isRestored() const; + /// Refresh the contents of the bar. void update(bool in_math, bool in_table, bool review, bool in_mathmacrotemplate, bool in_ipa); @@ -123,6 +130,8 @@ private: ToolbarInfo const & tbinfo_; /// bool filled_; + /// + bool restored_; }; } // namespace frontend diff --git a/src/frontends/qt4/GuiView.cpp b/src/frontends/qt4/GuiView.cpp index 2b2dc31768..3a91b7d528 100644 --- a/src/frontends/qt4/GuiView.cpp +++ b/src/frontends/qt4/GuiView.cpp @@ -674,6 +674,16 @@ bool GuiView::restoreLayout() if (!restoreState(settings.value("layout").toByteArray(), 0)) initToolbars(); + + // init the toolbars that have not been restored + Toolbars::Infos::iterator cit = guiApp->toolbars().begin(); + Toolbars::Infos::iterator end = guiApp->toolbars().end(); + for (; cit != end; ++cit) { + GuiToolbar * tb = toolbar(cit->name); + if (tb && !tb->isRestored()) + initToolbar(cit->name); + } + updateDialogs(); return true; } @@ -716,42 +726,47 @@ void GuiView::initToolbars() // extracts the toolbars from the backend Toolbars::Infos::iterator cit = guiApp->toolbars().begin(); Toolbars::Infos::iterator end = guiApp->toolbars().end(); - for (; cit != end; ++cit) { - GuiToolbar * tb = toolbar(cit->name); - if (!tb) - continue; - int const visibility = guiApp->toolbars().defaultVisibility(cit->name); - bool newline = !(visibility & Toolbars::SAMEROW); - tb->setVisible(false); - tb->setVisibility(visibility); + for (; cit != end; ++cit) + initToolbar(cit->name); +} - if (visibility & Toolbars::TOP) { - if (newline) - addToolBarBreak(Qt::TopToolBarArea); - addToolBar(Qt::TopToolBarArea, tb); - } - if (visibility & Toolbars::BOTTOM) { - if (newline) - addToolBarBreak(Qt::BottomToolBarArea); - addToolBar(Qt::BottomToolBarArea, tb); - } +void GuiView::initToolbar(string const & name) +{ + GuiToolbar * tb = toolbar(name); + if (!tb) + return; + int const visibility = guiApp->toolbars().defaultVisibility(name); + bool newline = !(visibility & Toolbars::SAMEROW); + tb->setVisible(false); + tb->setVisibility(visibility); - if (visibility & Toolbars::LEFT) { - if (newline) - addToolBarBreak(Qt::LeftToolBarArea); - addToolBar(Qt::LeftToolBarArea, tb); - } - - if (visibility & Toolbars::RIGHT) { - if (newline) - addToolBarBreak(Qt::RightToolBarArea); - addToolBar(Qt::RightToolBarArea, tb); - } - - if (visibility & Toolbars::ON) - tb->setVisible(true); + if (visibility & Toolbars::TOP) { + if (newline) + addToolBarBreak(Qt::TopToolBarArea); + addToolBar(Qt::TopToolBarArea, tb); } + + if (visibility & Toolbars::BOTTOM) { + if (newline) + addToolBarBreak(Qt::BottomToolBarArea); + addToolBar(Qt::BottomToolBarArea, tb); + } + + if (visibility & Toolbars::LEFT) { + if (newline) + addToolBarBreak(Qt::LeftToolBarArea); + addToolBar(Qt::LeftToolBarArea, tb); + } + + if (visibility & Toolbars::RIGHT) { + if (newline) + addToolBarBreak(Qt::RightToolBarArea); + addToolBar(Qt::RightToolBarArea, tb); + } + + if (visibility & Toolbars::ON) + tb->setVisible(true); } diff --git a/src/frontends/qt4/GuiView.h b/src/frontends/qt4/GuiView.h index aa03b84a83..9220538f7e 100644 --- a/src/frontends/qt4/GuiView.h +++ b/src/frontends/qt4/GuiView.h @@ -344,6 +344,8 @@ private: /// void initToolbars(); /// + void initToolbar(std::string const & name); + /// bool lfunUiToggle(std::string const & ui_component); /// void toggleFullScreen();