commit fb5780d203267c40e5ea60c0a6a7542bdfb1b64e
Author: Jean-Marc Lasgouttes <[email protected]>
Date:   Thu May 12 09:24:55 2016 +0200

    Fix getStatus for math-mutate and math-display
    
    Those two functions used two different hackish and buggy
    implementation to know when the function is disabled. Replace that by
    asking the containing inset whether it accepts inserting display math
    inset.
    
    Fixes bug #10033.
    (cherry picked from commit de5630a1562054cb969b106e35f84bfe1e99002a)
---
 src/mathed/InsetMathHull.cpp |   38 +++++++++++++++++---------------------
 status.22x                   |    3 +++
 2 files changed, 20 insertions(+), 21 deletions(-)

diff --git a/src/mathed/InsetMathHull.cpp b/src/mathed/InsetMathHull.cpp
index efdeb8b..48792a8 100644
--- a/src/mathed/InsetMathHull.cpp
+++ b/src/mathed/InsetMathHull.cpp
@@ -1870,6 +1870,20 @@ void InsetMathHull::doDispatch(Cursor & cur, FuncRequest 
& cmd)
 }
 
 
+namespace {
+
+bool allowDisplayMath(Cursor cur)
+{
+       LATTEST(cur.depth() > 1);
+       cur.pop();
+       FuncStatus status;
+       FuncRequest cmd(LFUN_MATH_DISPLAY);
+       return cur.getStatus(cmd, status) && status.enabled();
+}
+
+}
+
+
 bool InsetMathHull::getStatus(Cursor & cur, FuncRequest const & cmd,
                FuncStatus & status) const
 {
@@ -1896,30 +1910,12 @@ bool InsetMathHull::getStatus(Cursor & cur, FuncRequest 
const & cmd,
                status.setOnOff(type_ == ht);
                status.setEnabled(isMutable(ht) && isMutable(type_));
 
-               if (ht != hullSimple && status.enabled()) {
-                       Cursor tmpcur = cur;
-                       while (!tmpcur.empty()) {
-                               InsetCode code = tmpcur.inset().lyxCode();
-                               if (code == BOX_CODE) {
-                                       return true;
-                               } else if (code == TABULAR_CODE) {
-                                       FuncRequest tmpcmd(LFUN_MATH_DISPLAY);
-                                       if (tmpcur.getStatus(tmpcmd, status) && 
!status.enabled())
-                                               return true;
-                               }
-                               tmpcur.pop_back();
-                       }
-               }
+               if (ht != hullSimple && status.enabled())
+                       status.setEnabled(allowDisplayMath(cur));
                return true;
        }
        case LFUN_MATH_DISPLAY: {
-               bool enable = true;
-               if (cur.depth() > 1) {
-                       Inset const & in = cur[cur.depth()-2].inset();
-                       if (in.lyxCode() == SCRIPT_CODE)
-                               enable = display() != Inline;
-               }
-               status.setEnabled(enable);
+               status.setEnabled(display() != Inline || allowDisplayMath(cur));
                status.setOnOff(display() != Inline);
                return true;
        }
diff --git a/status.22x b/status.22x
index 2607521..87f15fa 100644
--- a/status.22x
+++ b/status.22x
@@ -60,6 +60,9 @@ What's new
 - Display the correct column alignment and a better column spacing in AMS
   environments (bugs 1861, 9908).
 
+- Disable properly toggling math diplay in places where it is not
+  possible (bug 10033).
+
 - Fix horizontal scrolling feature when inside a collapsable inset
   with several paragraphs.
 

Reply via email to