extern int bibitemMaxWidth(BufferView *, LyXFont const &);
// the selection possible is needed, that only motion events are
-// used, where the bottom press event was on the drawing area too
+// used, where the bottom press event was on the drawing area too
bool selection_possible = false;
Inset /*const*/ * inset = par.getInset(pos);
- if (!isEditableInset(inset))
+ if (!isEditableInset(inset))
return 0;
// get inset dimensions
);
if (!b.contained(x, y)) {
- lyxerr[Debug::GUI] << "Missed inset at x,y " << x << "," << y
- << " box " << b << endl;
+ lyxerr[Debug::GUI] << "Missed inset at x,y "
+ << x << ',' << y
+ << " box " << b << endl;
return 0;
}
int new_y;
if (cursorrow == bv->text->cursor.row()) {
- // we have a row which is higher than the workarea so we leave the
- // cursor on the start of the row and move only the draw up as soon
- // as we move the cursor or do something while inside the row (it may
- // span several workarea-heights) we'll move to the top again, but this
- // is better than just jump down and only display part of the row.
+ // we have a row which is taller than the workarea. The
+ // simplest solution is to move to the previous row instead.
+ cursorUp(bv, true);
+ return;
+ // This is what we used to do, so we wouldn't skip right past
+ // tall rows, but it's not working right now.
+#if 0
new_y = bv->text->first_y - bv->workHeight();
+#endif
} else {
if (inset_owner) {
new_y = bv->text->cursor.iy()
int new_y;
if (cursorrow == bv->text->cursor.row()) {
- // we have a row which is higher than the workarea so we leave the
- // cursor on the start of the row and move only the draw down as soon
- // as we move the cursor or do something while inside the row (it may
- // span several workarea-heights) we'll move to the top again, but this
- // is better than just jump down and only display part of the row.
+ // we have a row which is taller than the workarea. The
+ // simplest solution is to move to the next row instead.
+ cursorDown(bv, true);
+ return;
+ // This is what we used to do, so we wouldn't skip right past
+ // tall rows, but it's not working right now.
+#if 0
new_y = bv->text->first_y + bv->workHeight();
+#endif
} else {
if (inset_owner) {
new_y = bv->text->cursor.iy()
bv->update(this, c);
}
+namespace {
void specialChar(LyXText * lt, BufferView * bv, InsetSpecialChar::Kind kind)
{
bv->updateInset(new_inset, true);
}
+void doInsertInset(LyXText * lt, FuncRequest const & cmd,
+ bool edit, bool pastesel)
+{
+ Inset * inset = createInset(cmd);
+ BufferView * bv = cmd.view();
+
+ if (inset) {
+ bool gotsel = false;
+ if (lt->selection.set()) {
+ lt->cutSelection(bv, true, false);
+ gotsel = true;
+ }
+ if (bv->insertInset(inset)) {
+ if (edit)
+ inset->edit(bv);
+ if (gotsel && pastesel)
+ bv->owner()->dispatch(FuncRequest(LFUN_PASTESELECTION));
+ }
+ else
+ delete inset;
+ }
+
+}
+
+}
Inset::RESULT LyXText::dispatch(FuncRequest const & cmd)
{
lyxerr[Debug::ACTION] << "LyXFunc::dispatch: action[" << cmd.action
- <<"] arg[" << cmd.argument << "]" << endl;
+ <<"] arg[" << cmd.argument << ']' << endl;
BufferView * bv = cmd.view();
// ensure that we have only one start_of_appendix in this document
Paragraph * tmp = ownerParagraph();
- for (; tmp; tmp = tmp->next())
- tmp->params().startOfAppendix(false);
+ for (; tmp; tmp = tmp->next()) {
+ if (tmp->params().startOfAppendix()) {
+ setUndo(bv, Undo::EDIT, tmp, tmp->next());
+ tmp->params().startOfAppendix(false);
+ break;
+ }
+ }
+ setUndo(bv, Undo::EDIT, par, par->next());
par->params().startOfAppendix(start);
// we can set the refreshing parameters now
case LFUN_WORDSEL: {
update(bv, false);
- LyXCursor cur1;
- LyXCursor cur2;
+ LyXCursor cur1;
+ LyXCursor cur2;
getWord(cur1, cur2, WHOLE_WORD);
setCursor(bv, cur1.par(), cur1.pos());
bv->beforeChange(this);
bool is_rtl = cursor.par()->isRightToLeftPar(bv->buffer()->params);
if (!selection.mark())
bv->beforeChange(this);
- update(bv);
+ update(bv, false);
if (is_rtl)
cursorLeft(bv, false);
if (cursor.pos() < cursor.par()->size()
bool const is_rtl = cursor.par()->isRightToLeftPar(bv->buffer()->params);
if (!selection.mark())
bv->beforeChange(this);
- update(bv);
+ update(bv, false);
LyXCursor const cur = cursor;
if (!is_rtl)
cursorLeft(bv, false);
if (!is)
lyxerr << "SETXY: Could not parse coordinates in '"
<< cmd.argument << std::endl;
- else
+ else
setCursorFromCoordinates(bv, x, y);
break;
}
change_layout = true;
break;
}
+ spar = spar->next();
}
}
if (change_layout) {
// in some other local environment, but I would like to leave this here
// for the moment until I can remove this (Jug 20020418)
if (y_before < bv->text->cursor.y())
- lyxerr << y_before << ":" << bv->text->cursor.y() << endl;
+ lyxerr << y_before << ':'
+ << bv->text->cursor.y() << endl;
#endif
// This is to allow jumping over large insets
if (cursorrow == bv->text->cursor.row()) {
// do nothing if we used the mouse wheel
if (!bv->buffer())
break;
-
+
if (cmd.button() == mouse_button::button4
|| cmd.button() == mouse_button::button5)
break;
#if 0
case LFUN_INSET_LIST:
case LFUN_INSET_THEOREM:
+ case LFUN_INSET_CAPTION:
#endif
case LFUN_INSERT_NOTE:
- case LFUN_INSERT_URL:
- case LFUN_INSET_CAPTION:
case LFUN_INSET_ERT:
- case LFUN_INSET_EXTERNAL:
case LFUN_INSET_FLOAT:
case LFUN_INSET_FOOTNOTE:
case LFUN_INSET_MARGINAL:
case LFUN_INSET_WIDE_FLOAT:
case LFUN_INSET_WRAP:
case LFUN_TABULAR_INSERT:
+ // Open the inset, and move the current selection
+ // inside it.
+ doInsertInset(this, cmd, true, true);
+ break;
+
+ case LFUN_INSERT_URL:
+ case LFUN_INSET_EXTERNAL:
case LFUN_INDEX_INSERT:
- case LFUN_INDEX_PRINT:
+ // Just open the inset
+ doInsertInset(this, cmd, true, false);
+ break;
+
+ case LFUN_INDEX_PRINT:
case LFUN_PARENTINSERT:
case LFUN_TOC_INSERT:
- {
- Inset * inset = createInset(cmd);
- if (inset) {
- bool gotsel = false;
- if (selection.set()) {
- cutSelection(bv, true, false);
- gotsel = true;
- }
- if (bv->insertInset(inset)) {
- inset->edit(bv);
- if (gotsel)
- bv->owner()->dispatch(FuncRequest(LFUN_PASTESELECTION));
- }
- else
- delete inset;
- }
+ // do nothing fancy
+ doInsertInset(this, cmd, false, false);
break;
- }
-
default:
return Inset::UNDISPATCHED;