changeset 20018: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	Tue Mar 24 21:07:51 2015 +0100
+++ b/libgui/src/main-window.cc	Wed Mar 25 16:50:12 2015 +0100
@@ -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	Tue Mar 24 21:07:51 2015 +0100
+++ b/libgui/src/octave-dock-widget.cc	Wed Mar 25 16:50:12 2015 +0100
@@ -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	Tue Mar 24 21:07:51 2015 +0100
+++ b/libgui/src/octave-dock-widget.h	Wed Mar 25 16:50:12 2015 +0100
@@ -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;