Mercurial > hg > octave-nkf
changeset 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 | 9a8be23d2c05 |
children | 62b73798a84f |
files | libgui/src/main-window.cc libgui/src/octave-dock-widget.cc libgui/src/octave-dock-widget.h |
diffstat | 3 files changed, 39 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/libgui/src/main-window.cc +++ b/libgui/src/main-window.cc @@ -204,6 +204,10 @@ // signal to all dock widgets for updating the style emit active_dock_changed (_active_dock, dock); + QList<QDockWidget *> tabbed = tabifiedDockWidgets (dock); + if (tabbed.contains (_active_dock)) + dock->set_predecessor_widget (_active_dock); + if (edit_dock_widget == dock) emit editor_focus_changed (true); else if (edit_dock_widget == _active_dock)
--- 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); +}
--- a/libgui/src/octave-dock-widget.h +++ b/libgui/src/octave-dock-widget.h @@ -43,7 +43,7 @@ void make_window (void); void make_widget (bool dock=true); void set_title (const QString&); - + void set_predecessor_widget (octave_dock_widget *prev_widget); signals: /** Custom signal that tells whether a user has clicked away @@ -53,11 +53,7 @@ protected: - virtual void closeEvent (QCloseEvent *e) - { - emit active_changed (false); - QDockWidget::closeEvent (e); - } + virtual void closeEvent (QCloseEvent *e); QWidget * focusWidget (); @@ -114,6 +110,7 @@ private: void set_style (bool active); + void set_focus_predecessor (); QMainWindow *_parent; // store the parent since we are reparenting to 0 bool _floating; @@ -126,6 +123,7 @@ QColor _fg_color_active; QString _icon_color; QString _icon_color_active; + octave_dock_widget *_predecessor_widget; #if defined (Q_OS_WIN32) QWidget *_title_widget;