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);
+}