Mercurial > hg > octave-nkf
changeset 19622:5e93d228ff6b gui-release
fix regression from 476032040df9 (endless loop while looking for active widget)
* main_window.cc (focus_changed): store start widget before looping through
the focus change since previousInFocusChain does not return 0 at the
beginning of the chain; moreover quit looking for active dock after 100 times
author | Torsten <ttl@justmail.de> |
---|---|
date | Wed, 24 Dec 2014 13:58:00 +0100 |
parents | d93293218966 |
children | f90bb1e30de2 |
files | libgui/src/main-window.cc |
diffstat | 1 files changed, 12 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/libgui/src/main-window.cc +++ b/libgui/src/main-window.cc @@ -161,15 +161,24 @@ // catch focus changes and determine the active dock widget void -main_window::focus_changed (QWidget *, QWidget *w_new) +main_window::focus_changed (QWidget *, QWidget *new_widget) { octave_dock_widget* dock = 0; - while (w_new && w_new != _main_tool_bar) + QWidget *w_new = new_widget; // get a copy of new focus widget + QWidget *start = w_new; // Save it as start of our search + int count = 0; // fallback to prevent endless loop + + while (w_new && w_new != _main_tool_bar && count < 100) { dock = qobject_cast <octave_dock_widget *> (w_new); if (dock) - break; // its a QDockWidget + break; // it is a QDockWidget ==> exit loop + w_new = qobject_cast <QWidget *> (w_new->previousInFocusChain ()); + if (w_new == start) + break; // we have arrived where we began ==> exit loop + + count++; } // if new dock has focus, emit signal and store active focus