]> git.lyx.org Git - lyx.git/blobdiff - src/mathed/InsetMathScript.cpp
Fixup 097da3a9: fix horizontal navigatiion in InsetMathRoot
[lyx.git] / src / mathed / InsetMathScript.cpp
index 57f3b87f88299414f9b4649f75d7c0d46107153f..2f66b0f06e2a842331942ae3e47d49851aea5593 100644 (file)
@@ -72,22 +72,6 @@ InsetMathScript * InsetMathScript::asScriptInset()
 }
 
 
-bool InsetMathScript::idxFirst(Cursor & cur) const
-{
-       cur.idx() = 0;
-       cur.pos() = 0;
-       return true;
-}
-
-
-bool InsetMathScript::idxLast(Cursor & cur) const
-{
-       cur.idx() = 0;
-       cur.pos() = nuc().size();
-       return true;
-}
-
-
 MathData const & InsetMathScript::down() const
 {
        if (nargs() == 3)
@@ -381,6 +365,20 @@ void InsetMathScript::drawT(TextPainter & pain, int x, int y) const
 }
 
 
+// FIXME: See InsetMathSymbol::takesLimits, which seems to attempt the
+// same in a hardcoded way. takeLimits use is currently commented out in
+// InsetMathScript::metrics. It seems that the mathop test is general
+// enough, but only time will tell.
+bool InsetMathScript::allowsLimits() const
+{
+       if (nuc().empty())
+               return false;
+       // Only makes sense for insets of mathop class
+       if (nuc().back()->mathClass() != MC_OP)
+               return false;
+       return true;
+}
+
 
 bool InsetMathScript::hasLimits() const
 {
@@ -391,8 +389,9 @@ bool InsetMathScript::hasLimits() const
                return false;
 
        // we can only display limits if the nucleus wants some
-       if (nuc().empty())
+       if (!allowsLimits())
                return false;
+       // FIXME: this is some hardcoding done in InsetMathSymbol::metrics.
        if (!nuc().back()->isScriptable())
                return false;
 
@@ -751,6 +750,9 @@ void InsetMathScript::doDispatch(Cursor & cur, FuncRequest & cmd)
        //LYXERR("InsetMathScript: request: " << cmd);
 
        if (cmd.action() == LFUN_MATH_LIMITS) {
+               // only when nucleus allows this
+               if (!allowsLimits())
+                       return;
                cur.recordUndoInset();
                if (!cmd.argument().empty()) {
                        if (cmd.argument() == "limits")
@@ -774,15 +776,19 @@ bool InsetMathScript::getStatus(Cursor & cur, FuncRequest const & cmd,
                                FuncStatus & flag) const
 {
        if (cmd.action() == LFUN_MATH_LIMITS) {
-               if (!cmd.argument().empty()) {
-                       if (cmd.argument() == "limits")
-                               flag.setOnOff(limits_ == 1);
-                       else if (cmd.argument() == "nolimits")
-                               flag.setOnOff(limits_ == -1);
-                       else
-                               flag.setOnOff(limits_ == 0);
-               }
-               flag.setEnabled(true);
+               // only when nucleus allows this
+               if (allowsLimits()) {
+                       if (!cmd.argument().empty()) {
+                               if (cmd.argument() == "limits")
+                                       flag.setOnOff(limits_ == 1);
+                               else if (cmd.argument() == "nolimits")
+                                       flag.setOnOff(limits_ == -1);
+                               else
+                                       flag.setOnOff(limits_ == 0);
+                       }
+                       flag.setEnabled(true);
+               } else
+                       flag.setEnabled(false);
                return true;
        }