#include "Lsstream.h"
#include "support/LAssert.h"
-#ifdef __GNUG__
-#pragma implementation
-#endif
#include "formula.h"
#include "formulamacro.h"
// << " 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