Mercurial > octave
changeset 26902:cb5c1ea2062c
Fix regression with toolbar and status bar visibility (bug #55795)
* Figure.[h,cc] (Figure::showFigureToolBar): Rename to showFigureStatusBar and
only handle status bar visibility here.
(Figure::Figure): Set position first according to the figure properties.
Initialize m_statusBar, set it invisible and then call showFigureStatusBar if
needed.
(Figure::update): Handle ID_MENUBAR and ID_TOOLBAR the same way.
(UpdateBoundingBoxData): Remove unnecessary struct data type.
* __add_default_menu__.m: Add listener on figure "toolbar" property to make
it visible when necessary.
author | Pantxo Diribarne <pantxo.diribarne@gmail.com> |
---|---|
date | Tue, 12 Mar 2019 09:21:54 +0100 |
parents | f422fc45b52f |
children | 73b141d5a888 |
files | libgui/graphics/Figure.cc libgui/graphics/Figure.h scripts/plot/util/private/__add_default_menu__.m |
diffstat | 3 files changed, 47 insertions(+), 56 deletions(-) [+] |
line wrap: on
line diff
--- a/libgui/graphics/Figure.cc Wed Mar 13 11:38:31 2019 -0400 +++ b/libgui/graphics/Figure.cc Tue Mar 12 09:21:54 2019 +0100 @@ -97,10 +97,11 @@ figure::properties& fp = properties<figure> (); - // Register for the signal that indicates when a window has moved - // to a different screen - connect (win, SIGNAL (figureWindowShown ()), - this, SLOT (figureWindowShown ())); + // Adjust figure position + m_innerRect = boundingBoxToRect (fp.get_boundingbox (true)); + m_outerRect = boundingBoxToRect (fp.get_boundingbox (false)); + + set_geometry (m_innerRect); // Menubar m_menuBar = new MenuBar (win); @@ -109,16 +110,11 @@ // Status bar m_statusBar = win->statusBar (); - int boffset = 0; + m_statusBar->setVisible (false); if (fp.toolbar_is ("figure") || (fp.toolbar_is ("auto") && fp.menubar_is ("figure"))) - boffset += m_statusBar->sizeHint ().height (); - - m_innerRect = boundingBoxToRect (fp.get_boundingbox (true)); - m_outerRect = boundingBoxToRect (fp.get_boundingbox (false)); - - set_geometry (m_innerRect.adjusted (0, 0, 0, boffset)); + showFigureStatusBar (true); // Enable mouse tracking unconditionally enableMouseTracking (); @@ -146,6 +142,11 @@ connect (this, SIGNAL (asyncUpdate (void)), this, SLOT (updateContainer (void))); + // Register for the signal that indicates when a window has moved + // to a different screen + connect (win, SIGNAL (figureWindowShown ()), + this, SLOT (figureWindowShown ())); + win->addReceiver (this); m_container->addReceiver (this); } @@ -383,18 +384,14 @@ } break; + case figure::properties::ID_MENUBAR: case figure::properties::ID_TOOLBAR: if (fp.toolbar_is ("none")) - showFigureToolBar (false); + showFigureStatusBar (false); else if (fp.toolbar_is ("figure")) - showFigureToolBar (true); + showFigureStatusBar (true); else // "auto" - showFigureToolBar (fp.menubar_is ("figure")); - break; - - case figure::properties::ID_MENUBAR: - if (fp.toolbar_is ("auto")) - showFigureToolBar (fp.menubar_is ("figure")); + showFigureStatusBar (fp.menubar_is ("figure")); break; case figure::properties::ID_KEYPRESSFCN: @@ -442,23 +439,21 @@ } void - Figure::showFigureToolBar (bool visible) + Figure::showFigureStatusBar (bool visible) { - if (m_figureToolBar - && (! m_figureToolBar->isHidden ()) != visible) + if (m_statusBar + && (! m_statusBar->isHidden ()) != visible) { - int dy1 = m_figureToolBar->sizeHint ().height (); - int dy2 = m_statusBar->sizeHint ().height (); + int dy = m_statusBar->sizeHint ().height (); QRect r = qWidget<QWidget> ()->geometry (); if (! visible) - r.adjust (0, dy1, 0, -dy2); + r.adjust (0, 0, 0, -dy); else - r.adjust (0, -dy1, 0, dy2); + r.adjust (0, 0, 0, dy); m_blockUpdates = true; set_geometry (r); - m_figureToolBar->setVisible (visible); m_statusBar->setVisible (visible); m_blockUpdates = false; @@ -501,14 +496,6 @@ return qWidget<QMainWindow> ()->menuBar (); } - struct UpdateBoundingBoxData - { - Matrix m_bbox; - bool m_internal; - graphics_handle m_handle; - Figure *m_figure; - }; - void Figure::updateBoundingBox (bool internal, int flags) { @@ -709,7 +696,6 @@ { QSize sz = bar->sizeHint (); QRect r = win->geometry (); - //qDebug () << "Figure::addCustomToolBar:" << r; r.adjust (0, -sz.height (), 0, 0); @@ -719,7 +705,6 @@ win->addToolBar (bar); m_blockUpdates = false; - //qDebug () << "Figure::addCustomToolBar:" << win->geometry (); updateBoundingBox (false); } }
--- a/libgui/graphics/Figure.h Wed Mar 13 11:38:31 2019 -0400 +++ b/libgui/graphics/Figure.h Tue Mar 12 09:21:54 2019 +0100 @@ -97,7 +97,7 @@ void beingDeleted (void); private: - void showFigureToolBar (bool visible); + void showFigureStatusBar (bool visible); void addCustomToolBar (QToolBar *bar, bool visible, bool isdefault); void showCustomToolBar (QToolBar *bar, bool visible); void set_geometry (QRect r);
--- a/scripts/plot/util/private/__add_default_menu__.m Wed Mar 13 11:38:31 2019 -0400 +++ b/scripts/plot/util/private/__add_default_menu__.m Tue Mar 12 09:21:54 2019 +0100 @@ -137,9 +137,6 @@ "offcallback", {@mouse_tools_cb, ht, "text"}); endif - ## Add/Restore figure listeners - toggle_visibility_cb (hf, [], hmenu); - addlistener (hf, "menubar", {@toggle_visibility_cb, hmenu}); if (! exist ("ht", "var")) ht = get (htb, "children")(end:-1:1); @@ -147,17 +144,26 @@ ht(! istoggletool) = []; endif + ## Add/Restore figure listeners + toggle_visibility_cb (hf, [], hmenu, htb); + addlistener (hf, "menubar", {@toggle_visibility_cb, hmenu, htb}); + addlistener (hf, "toolbar", {@toggle_visibility_cb, hmenu, htb}); addlistener (hf, "__mouse_mode__", {@mouse_tools_cb, ht, "mode"}); addlistener (hf, "__zoom_mode__", {@mouse_tools_cb, ht, "mode"}); endfunction -function toggle_visibility_cb (hf, ~, hmenu) - if (strcmp (get (hf, "menubar"), "none")) - set (hmenu, "visible", "off") - else - set (hmenu, "visible", "on") +function toggle_visibility_cb (hf, ~, hmenu, htb) + menu_state = ifelse (strcmp (get (hf, "menubar"), "figure"), "on", "off"); + toolbar_state = "on"; + if (strcmp (get (hf, "toolbar"), "auto")) + toolbar_state = menu_state; + elseif (strcmp (get (hf, "toolbar"), "none")) + toolbar_state = "off"; endif + + set (hmenu, "visible", menu_state); + set (htb, "visible", toolbar_state); endfunction function open_cb (h, e) @@ -231,13 +237,13 @@ set (hf, "__pan_mode__", struct ("Enable", "off", "Motion", "both", "FigureHandle", hf), - "__rotate_mode__", struct ("Enable", "off", - "RotateStyle", "box", - "FigureHandle", hf), - "__zoom_mode__", struct ("Enable", "off", - "Motion", "both", - "Direction", "in", - "FigureHandle", hf)); + "__rotate_mode__", struct ("Enable", "off", + "RotateStyle", "box", + "FigureHandle", hf), + "__zoom_mode__", struct ("Enable", "off", + "Motion", "both", + "Direction", "in", + "FigureHandle", hf)); endfunction function guimode_cb (h, e) @@ -319,7 +325,7 @@ set (hf, "__mouse_mode__" , "zoom"); endif val.Enable = state; - set (hf, prop, val) + set (hf, prop, val); case {"pan", "rotate"} prop = ["__", typ, "_mode__"]; @@ -354,7 +360,7 @@ if (strcmp (get (hax, "visible"), "on")) set (hax, "visible", "off"); else - set (hax, "visible", "on") + set (hax, "visible", "on"); endif endif endfunction @@ -365,7 +371,7 @@ if (strcmp (get (hax, "xgrid"), "on") && strcmp (get (hax, "ygrid"), "on")) grid (hax, "off"); else - grid (hax, "on") + grid (hax, "on"); endif endif endfunction