http://bugzilla.lyx.org/show_bug.cgi?id=4117
Index: Cursor.cpp
===================================================================
--- Cursor.cpp  (revision 19634)
+++ Cursor.cpp  (working copy)
@@ -1482,12 +1482,14 @@
 }
 
 
-void Cursor::fixIfBroken()
+bool Cursor::fixIfBroken()
 {
        if (DocIterator::fixIfBroken()) {
                        clearSelection();
                        resetAnchor();
+                       return true;
        }
+       return false;
 }
 
 
Index: Cursor.h
===================================================================
--- Cursor.h    (revision 19634)
+++ Cursor.h    (working copy)
@@ -179,8 +179,9 @@
         * Not using noUpdate() should never be wrong.
         */
        void noUpdate();
-       /// fix cursor in circumstances that should never happen
-       void fixIfBroken();
+       /// fix cursor in circumstances that should never happen.
+       /// \retval true if a fix occured.
+       bool fixIfBroken();
 
        /// output
        friend std::ostream & operator<<(std::ostream & os, Cursor const & cur);
Index: mathed/InsetMathNest.cpp
===================================================================
--- mathed/InsetMathNest.cpp    (revision 19634)
+++ mathed/InsetMathNest.cpp    (working copy)
@@ -568,8 +568,16 @@
                        // notify left insets and give them chance to set 
update flags
                        lyx::notifyCursorLeaves(cur.beforeDispatchCursor(), 
cur);
                        cur.fixIfBroken();
-               }       else
-                       cur.undispatched();
+                       break;
+               }
+               
+               if (cur.fixIfBroken())
+                       // FIXME: Something bad happened. We pass the corrected 
Cursor
+                       // instead of letting things go worse.
+                       break;
+
+               // We did not manage to move the cursor.
+               cur.undispatched();
                break;
        }
 

Reply via email to