#include "Lsstream.h"
#include "support/LAssert.h"
-#ifdef __GNUG__
-#pragma implementation
-#endif
#include "formula.h"
#include "formulamacro.h"
void InsetFormulaBase::toggleInsetCursor(BufferView * bv)
{
if (!mathcursor) {
- lyxerr << "toggleInsetCursor impossible" << endl;
+ lyxerr[Debug::MATHED] << "toggleInsetCursor impossible" << endl;
return;
}
//lyxerr << "toggleInsetCursor: " << isCursorVisible() << endl;
//lyxerr << "lfunMousePress: buttons: " << cmd.button() << endl;
if (!mathcursor || mathcursor->formula() != this) {
- lyxerr << "re-create cursor" << endl;
+ lyxerr[Debug::MATHED] << "re-create cursor" << endl;
releaseMathCursor(bv);
mathcursor = new MathCursor(this, cmd.x == 0);
metrics(bv);
// << " y: '" << cmd.y
// << "' button: " << cmd.button() << endl;
+ // delete empty mathbox (LFUN_BACKSPACE and LFUN_DELETE)
+ bool remove_inset = false;
+
switch (cmd.action) {
case LFUN_MOUSE_PRESS:
return lfunMousePress(cmd);
case LFUN_PRIOR:
case LFUN_BEGINNINGBUFSEL:
case LFUN_BEGINNINGBUF:
- result = FINISHED_UP;
+ result = FINISHED;
updateLocal(bv, false);
break;
case LFUN_NEXT:
case LFUN_ENDBUFSEL:
case LFUN_ENDBUF:
- result = FINISHED_DOWN;
+ result = FINISHED_RIGHT;
updateLocal(bv, false);
break;
case LFUN_DELETE_WORD_BACKWARD:
case LFUN_BACKSPACE:
- bv->lockedInsetStoreUndo(Undo::DELETE);
- mathcursor->backspace();
+ bv->lockedInsetStoreUndo(Undo::EDIT);
+ if (mathcursor->backspace()) {
+ result = DISPATCHED;
+ } else {
+ result = FINISHED;
+ remove_inset = true;
+ }
updateLocal(bv, true);
break;
case LFUN_DELETE_WORD_FORWARD:
case LFUN_DELETE:
- bv->lockedInsetStoreUndo(Undo::DELETE);
- mathcursor->erase();
- bv->updateInset(this, true);
+ bv->lockedInsetStoreUndo(Undo::EDIT);
+ if (mathcursor->erase()) {
+ result = DISPATCHED;
+ } else {
+ result = FINISHED;
+ remove_inset = true;
+ }
+ updateLocal(bv, true);
break;
// case LFUN_GETXY:
} else {
releaseMathCursor(bv);
bv->unlockInset(this);
+ if (remove_inset)
+ bv->owner()->dispatch(FuncRequest(LFUN_DELETE));
}
return result; // original version