X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fmathed%2FInsetMathScript.cpp;h=2f66b0f06e2a842331942ae3e47d49851aea5593;hb=38c2cde0d8695ac5287bae218c4a33a2acf18ef8;hp=8c6416a8c658bd89c08456cc287c3fb80f72409e;hpb=503c7c1688bee80a2c5dc472aaf97fb2aa0391e0;p=lyx.git diff --git a/src/mathed/InsetMathScript.cpp b/src/mathed/InsetMathScript.cpp index 8c6416a8c6..2f66b0f06e 100644 --- a/src/mathed/InsetMathScript.cpp +++ b/src/mathed/InsetMathScript.cpp @@ -365,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 { @@ -375,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; @@ -735,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") @@ -758,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; }