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)
This commit is contained in:
Jean-Marc Lasgouttes 2016-05-12 09:24:55 +02:00 committed by Richard Heck
parent f012b73e78
commit dbd83603b0
2 changed files with 20 additions and 21 deletions

View File

@ -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, bool InsetMathHull::getStatus(Cursor & cur, FuncRequest const & cmd,
FuncStatus & status) const FuncStatus & status) const
{ {
@ -1896,30 +1910,12 @@ bool InsetMathHull::getStatus(Cursor & cur, FuncRequest const & cmd,
status.setOnOff(type_ == ht); status.setOnOff(type_ == ht);
status.setEnabled(isMutable(ht) && isMutable(type_)); status.setEnabled(isMutable(ht) && isMutable(type_));
if (ht != hullSimple && status.enabled()) { if (ht != hullSimple && status.enabled())
Cursor tmpcur = cur; status.setEnabled(allowDisplayMath(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();
}
}
return true; return true;
} }
case LFUN_MATH_DISPLAY: { case LFUN_MATH_DISPLAY: {
bool enable = true; status.setEnabled(display() != Inline || allowDisplayMath(cur));
if (cur.depth() > 1) {
Inset const & in = cur[cur.depth()-2].inset();
if (in.lyxCode() == SCRIPT_CODE)
enable = display() != Inline;
}
status.setEnabled(enable);
status.setOnOff(display() != Inline); status.setOnOff(display() != Inline);
return true; return true;
} }

View File

@ -87,6 +87,9 @@ What's new
- Display the correct column alignment and a better column spacing in AMS - Display the correct column alignment and a better column spacing in AMS
environments (bugs 1861, 9908). 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 - Fix horizontal scrolling feature when inside a collapsable inset
with several paragraphs. with several paragraphs.