Am Samstag, 9. September 2006 20:07 schrieb Bo Peng:
> > Please test.
>
> I do not know what is going on, but after I apply your patch,
>
> 1. open a new document
> 2. insert displayed math, type in dd, insert label,
>
> the dialog can not get focus. I revert your patch and things go back
> to normal. This is under linux, for 1.4.x.
There was a thinko in the patch. Can you please try this one? It works for
me, but I do not understand why it worked without the patch, since the
culprit was a break instead of a return statement.
Georg
--- src/mathed/math_hullinset.C 2006-09-20 19:50:36.000000000 +0200
+++ src/mathed/math_hullinset.C 2006-09-25 22:08:37.000000000 +0200
@@ -1067,28 +1067,23 @@ void MathHullInset::doDispatch(LCursor &
case LFUN_INSET_INSERT: {
//lyxerr << "arg: " << cmd.argument << endl;
string const name = cmd.getArg(0);
- if (name == "label") {
- InsetCommandParams p;
- InsetCommandMailer::string2params(name, cmd.argument, p);
- string str = p.getContents();
- recordUndoInset(cur);
- row_type const r = (type_ == "multline") ? nrows() - 1 : cur.row();
- str = lyx::support::trim(str);
- if (!str.empty())
- numbered(r, true);
- string old = label(r);
- if (str != old) {
- cur.bv().buffer()->changeRefsIfUnique(old, str);
- label(r, str);
- }
- break;
+ if (name != "label") {
+ MathGridInset::doDispatch(cur, cmd);
+ return;
+ }
+ InsetCommandParams p;
+ InsetCommandMailer::string2params(name, cmd.argument, p);
+ string str = p.getContents();
+ recordUndoInset(cur);
+ row_type const r = (type_ == "multline") ? nrows() - 1 : cur.row();
+ str = lyx::support::trim(str);
+ if (!str.empty())
+ numbered(r, true);
+ string old = label(r);
+ if (str != old) {
+ cur.bv().buffer()->changeRefsIfUnique(old, str);
+ label(r, str);
}
- MathArray ar;
- if (createMathInset_fromDialogStr(cmd.argument, ar)) {
- recordUndo(cur);
- cur.insert(ar);
- } else
- cur.undispatched();
break;
}
@@ -1151,15 +1146,11 @@ bool MathHullInset::getStatus(LCursor &
case LFUN_INSERT_LABEL:
status.enabled(type_ != "simple");
return true;
- case LFUN_INSET_INSERT: {
- // Don't test createMathInset_fromDialogStr(), since
- // getStatus is not called with a valid reference and the
- // dialog would not be applyable.
- string const name = cmd.getArg(0);
- status.enabled(name == "ref" ||
- (name == "label" && type_ != "simple"));
- break;
- }
+ case LFUN_INSET_INSERT:
+ if (cmd.getArg(0) != "label")
+ return MathGridInset::getStatus(cur, cmd, status);
+ status.enabled(type_ != "simple");
+ return true;
case LFUN_TABULAR_FEATURE: {
istringstream is(cmd.argument);
string s;
--- src/mathed/math_nestinset.C 2006-09-20 19:50:36.000000000 +0200
+++ src/mathed/math_nestinset.C 2006-09-25 22:08:38.000000000 +0200
@@ -902,6 +906,16 @@
break;
}
+ case LFUN_INSET_INSERT: {
+ MathArray ar;
+ if (createMathInset_fromDialogStr(cmd.argument, ar)) {
+ recordUndo(cur);
+ cur.insert(ar);
+ } else
+ cur.undispatched();
+ break;
+ }
+
default:
MathDimInset::doDispatch(cur, cmd);
break;
@@ -985,6 +1000,16 @@
case LFUN_INSERT_MATRIX:
flag.enabled(currentMode() == MATH_MODE);
break;
+
+ case LFUN_INSET_INSERT: {
+ // Don't test createMathInset_fromDialogStr(), since
+ // getStatus is not called with a valid reference and the
+ // dialog would not be applyable.
+ string const name = cmd.getArg(0);
+ flag.enabled(name == "ref");
+ break;
+ }
+
default:
ret = false;
break;