diff libgui/src/variable-editor.cc @ 25220:07bddddc5856 stable

Restore Variable Editor focusWidget lost in dock/undock transition (bug #53410) * variable-editor.cc (variable_editor::variable_editor): Initialize new member variable m_variable_focus_widget to nullptr. (variable_editor::focusInEvent): If the m_main window's focusWidget() is nullptr, check if the recorded m_variable_focus_widget is still valid within the m_main container. If so, use it as a valid pointer and restore its focus. (variable_editor::focusOutEvent): Record m_main's focusWidget() just prior to transition to/from docked state. * variable-editor.h (variable_editor:octave_dock_widget): A class member variable m_variable_focus_widget to keep track of focusWidget().
author Daniel J Sebald <daniel.sebald@ieee.org>
date Tue, 10 Apr 2018 23:22:03 -0500
parents 8cff7eceee87
children 65f201566857
line wrap: on
line diff
--- a/libgui/src/variable-editor.cc	Wed Apr 11 15:13:10 2018 -0400
+++ b/libgui/src/variable-editor.cc	Tue Apr 10 23:22:03 2018 -0500
@@ -990,7 +990,8 @@
       m_sel_font (),
       m_table_colors (),
       m_current_focus_vname (""),
-      m_hovered_focus_vname ("")
+      m_hovered_focus_vname (""),
+      m_variable_focus_widget (nullptr)
   {
     setObjectName ("VariableEditor");
     set_title (tr ("Variable Editor"));
@@ -1038,10 +1039,20 @@
   {
     octave_dock_widget::focusInEvent (ev);
 
-    // set focus to the current variable
+    // set focus to the current variable or most recent if still valid
     QWidget *fw = m_main->focusWidget ();
     if (fw != nullptr)
       fw->setFocus ();
+    else if (m_main->isAncestorOf (m_variable_focus_widget))
+      m_variable_focus_widget->setFocus ();
+  }
+
+  void variable_editor::focusOutEvent (QFocusEvent *ev)
+  {
+    // focusWidget() appears lost in transition to/from main window
+    m_variable_focus_widget = m_main->focusWidget ();
+
+    octave_dock_widget::focusOutEvent (ev);
   }
 
   // Add an action to a menu or the widget itself.