From 315584d8195b62cb236f81ff7e0635c831122488 Mon Sep 17 00:00:00 2001 From: David Capello Date: Wed, 7 Dec 2016 11:12:19 -0300 Subject: [PATCH] Close toolbar popup when the document is closed --- src/app/ui/toolbar.cpp | 26 +++++++++++++++++++++----- src/app/ui/toolbar.h | 2 ++ src/ui/widget.cpp | 9 +++++++++ src/ui/widget.h | 1 + 4 files changed, 33 insertions(+), 5 deletions(-) diff --git a/src/app/ui/toolbar.cpp b/src/app/ui/toolbar.cpp index 43ef8b3ec..f2e26a84e 100644 --- a/src/app/ui/toolbar.cpp +++ b/src/app/ui/toolbar.cpp @@ -352,6 +352,17 @@ void ToolBar::onPaint(ui::PaintEvent& ev) } } +void ToolBar::onVisible(bool visible) +{ + Widget::onVisible(visible); + if (!visible) { + if (m_popupWindow) { + closePopupWindow(); + closeTipWindow(); + } + } +} + int ToolBar::getToolGroupIndex(ToolGroup* group) { ToolBox* toolbox = App::instance()->toolBox(); @@ -377,11 +388,7 @@ void ToolBar::openPopupWindow(int group_index, ToolGroup* tool_group) m_closeConn.disconnect(); onClosePopup(); - - // Close the current popup window - m_popupWindow->closeWindow(NULL); - delete m_popupWindow; - m_popupWindow = NULL; + closePopupWindow(); } // Close tip window @@ -435,6 +442,15 @@ void ToolBar::openPopupWindow(int group_index, ToolGroup* tool_group) toolstrip->setBounds(rc); } +void ToolBar::closePopupWindow() +{ + if (m_popupWindow) { + m_popupWindow->closeWindow(nullptr); + delete m_popupWindow; + m_popupWindow = nullptr; + } +} + Rect ToolBar::getToolGroupBounds(int group_index) { ToolBox* toolbox = App::instance()->toolBox(); diff --git a/src/app/ui/toolbar.h b/src/app/ui/toolbar.h index cd7eb843a..0ff11760a 100644 --- a/src/app/ui/toolbar.h +++ b/src/app/ui/toolbar.h @@ -51,10 +51,12 @@ namespace app { bool onProcessMessage(ui::Message* msg) override; void onSizeHint(ui::SizeHintEvent& ev) override; void onPaint(ui::PaintEvent& ev) override; + void onVisible(bool visible) override; private: int getToolGroupIndex(tools::ToolGroup* group); void openPopupWindow(int group_index, tools::ToolGroup* group); + void closePopupWindow(); gfx::Rect getToolGroupBounds(int group_index); gfx::Point getToolPositionInGroup(int group_index, tools::Tool* tool); void openTipWindow(int group_index, tools::Tool* tool); diff --git a/src/ui/widget.cpp b/src/ui/widget.cpp index f73a1150d..c51fb8c16 100644 --- a/src/ui/widget.cpp +++ b/src/ui/widget.cpp @@ -192,12 +192,16 @@ void Widget::setVisible(bool state) if (hasFlags(HIDDEN)) { disableFlags(HIDDEN); invalidate(); + + onVisible(true); } } else { if (!hasFlags(HIDDEN)) { manager()->freeWidget(this); // Free from manager enableFlags(HIDDEN); + + onVisible(false); } } } @@ -1443,6 +1447,11 @@ void Widget::onSetDecorativeWidgetBounds() } } +void Widget::onVisible(bool visible) +{ + // Do nothing +} + void Widget::onEnable(bool enabled) { // Do nothing diff --git a/src/ui/widget.h b/src/ui/widget.h index 8a34de578..53f34146f 100644 --- a/src/ui/widget.h +++ b/src/ui/widget.h @@ -372,6 +372,7 @@ namespace ui { virtual void onBroadcastMouseMessage(WidgetsList& targets); virtual void onInitTheme(InitThemeEvent& ev); virtual void onSetDecorativeWidgetBounds(); + virtual void onVisible(bool visible); virtual void onEnable(bool enabled); virtual void onSelect(bool selected); virtual void onSetText();