Mercurial > hg > octave-nkf
diff libgui/src/octave-dock-widget.cc @ 20192:643de08e524c
save and restore previously active widget in a tabbed stack (bug #42980)
* main-window.cc (focus_changed): store previous widget as predecessor
if new widget is tabbed togehter with the previous one;
* octave-dock-widget.cc (octave_dock_widget): initialize predecessor to 0;
(set_predecessor_widget): new oublic method for setting the predecessor;
(set_focus_predecessor): if predecessor is defined which means that this
wigdet was tabbed with predecessor, set focus to predecessor;
(make_window): call set_focus_predecessor;
(closeEvent): moved here from header file, call set_focus_predecessor
* octave-dock-widget.h: new public function set_predecessor_widget,
closeEvent moved to octave_dock_widget.cc, new private function
set_focus_predecessor (), new variable _predecessor_widget holding the
previously active widget in the tabbed stack
author | Torsten <ttl@justmail.de> |
---|---|
date | Wed, 25 Mar 2015 16:50:12 +0100 |
parents | f7a805f02723 |
children | ac3746f39fab |
line wrap: on
line diff
--- a/libgui/src/octave-dock-widget.cc +++ b/libgui/src/octave-dock-widget.cc @@ -43,6 +43,7 @@ _parent = static_cast<QMainWindow *> (p); // store main window _floating = false; + _predecessor_widget = 0; connect (this, SIGNAL (visibilityChanged (bool)), this, SLOT (handle_visibility_changed (bool))); @@ -155,6 +156,13 @@ } +// set the widget which previously had focus when tabified +void +octave_dock_widget::set_predecessor_widget (octave_dock_widget *prev_widget) +{ + _predecessor_widget = prev_widget; +} + // set the title in the dockwidgets title bar void octave_dock_widget::set_title (const QString& title) @@ -169,6 +177,16 @@ setWindowTitle (title); } +// set focus to previously active widget in tabbed widget stack +void +octave_dock_widget::set_focus_predecessor () +{ + if (_predecessor_widget) // only != 0 if widget was tabbed + _predecessor_widget->focus (); + + _predecessor_widget = 0; +} + // make the widget floating void octave_dock_widget::make_window () @@ -207,8 +225,11 @@ #endif _floating = true; + + set_focus_predecessor (); // set focus previously active widget if tabbed } + // dock the widget void octave_dock_widget::make_widget (bool dock) @@ -455,3 +476,13 @@ update (); } } + + +// close event +void +octave_dock_widget::closeEvent (QCloseEvent *e) +{ + emit active_changed (false); + set_focus_predecessor (); + QDockWidget::closeEvent (e); +}