#include <config.h>
#include <lyxrc.h>
-#ifdef __GNUG__
-#pragma implementation
-#endif
#include "support/lstrings.h"
#include "support/LAssert.h"
}
-void MathCursor::backspace()
+bool MathCursor::backspace()
{
autocorrect_ = false;
if (selection_) {
selDel();
- return;
+ return true;
}
if (pos() == 0) {
+ if (par()->ncols() == 1 &&
+ par()->nrows() == 1 &&
+ depth() == 1 &&
+ size() == 0)
+ return false;
pullArg();
- return;
+ return true;
}
if (inMacroMode()) {
MathUnknownInset * p = activeMacro();
if (p->name().size() > 1) {
p->setName(p->name().substr(0, p->name().size() - 1));
- return;
+ return true;
}
}
--pos();
plainErase();
+ return true;
}
-void MathCursor::erase()
+bool MathCursor::erase()
{
autocorrect_ = false;
if (inMacroMode())
- return;
+ return true;
if (selection_) {
selDel();
- return;
+ return true;
}
// delete empty cells if possible
if (array().empty())
if (par()->idxDelete(idx()))
- return;
+ return true;
// old behaviour when in last position of cell
if (pos() == size()) {
- par()->idxGlue(idx());
- return;
+ if (par()->ncols() == 1 && par()->nrows() == 1 && depth() == 1 && size() == 0)
+ return false;
+ else{
+ par()->idxGlue(idx());
+ return true;
+ }
}
plainErase();
+ return true;
}
os << " ";
}
if (hasPrevAtom())
- if (prevAtom()->asSymbolInset() || prevAtom()->asScriptInset())
- prevAtom()->infoize(os);
+ prevAtom()->infoize2(os);
os << " ";
return STRCONV(os.str());
}
}
-MathInset::result_type MathCursor::dispatch(FuncRequest const & cmd)
-{
+dispatch_result MathCursor::dispatch(FuncRequest const & cmd)
+{
+ // mouse clicks are somewhat special
+ // check
+ switch (cmd.action) {
+ case LFUN_MOUSE_PRESS:
+ case LFUN_MOUSE_MOTION:
+ case LFUN_MOUSE_RELEASE:
+ case LFUN_MOUSE_DOUBLE: {
+ MathCursorPos & pos = Cursor_.back();
+ dispatch_result res = UNDISPATCHED;
+ int x = 0, y = 0;
+ getPos(x, y);
+ if (x < cmd.x && hasPrevAtom()) {
+ res = prevAtom().nucleus()->dispatch(cmd, pos.idx_, pos.pos_);
+ if (res != UNDISPATCHED)
+ return res;
+ }
+ if (x > cmd.x && hasNextAtom()) {
+ res = nextAtom().nucleus()->dispatch(cmd, pos.idx_, pos.pos_);
+ if (res != UNDISPATCHED)
+ return res;
+ }
+ }
+ default:
+ break;
+ }
+
for (int i = Cursor_.size() - 1; i >= 0; --i) {
MathCursorPos & pos = Cursor_[i];
- MathInset::result_type
- res = pos.par_->dispatch(cmd, pos.idx_, pos.pos_);
- if (res != MathInset::UNDISPATCHED) {
- if (res == MathInset::DISPATCHED_POP) {
+ dispatch_result res = pos.par_->dispatch(cmd, pos.idx_, pos.pos_);
+ if (res != UNDISPATCHED) {
+ if (res == DISPATCHED_POP) {
Cursor_.shrink(i + 1);
selClear();
}
return res;
}
}
- return MathInset::UNDISPATCHED;
+ return UNDISPATCHED;
}