// FIXME: We use the update flag to indicates wether a singlePar or a
// full screen update is needed. We reset it here but shall we restore it
// at the end?
- cur.noUpdate();
+ cur.noScreenUpdate();
LASSERT(cur.text() == this, /**/);
CursorSlice oldTopSlice = cur.top();
recUndo(cur, pit, pit + 1);
cur.finishUndo();
pars_.swap(pit, pit + 1);
- cur.buffer()->updateBuffer();
needsUpdate = true;
+ cur.forceBufferUpdate();
++cur.pit();
break;
}
recUndo(cur, pit - 1, pit);
cur.finishUndo();
pars_.swap(pit, pit - 1);
- cur.buffer()->updateBuffer();
--cur.pit();
needsUpdate = true;
+ cur.forceBufferUpdate();
break;
}
par.params().startOfAppendix(start);
// we can set the refreshing parameters now
- cur.buffer()->updateBuffer();
+ cur.forceBufferUpdate();
break;
}
needsUpdate |= cursorTop(cur);
else
cur.undispatched();
- cur.updateFlags(Update::FitCursor);
+ cur.screenUpdateFlags(Update::FitCursor);
break;
case LFUN_BUFFER_END:
needsUpdate |= cursorBottom(cur);
else
cur.undispatched();
- cur.updateFlags(Update::FitCursor);
+ cur.screenUpdateFlags(Update::FitCursor);
break;
case LFUN_INSET_BEGIN:
needsUpdate |= cursorTop(cur);
else
cur.undispatched();
- cur.updateFlags(Update::FitCursor);
+ cur.screenUpdateFlags(Update::FitCursor);
break;
case LFUN_INSET_END:
needsUpdate |= cursorBottom(cur);
else
cur.undispatched();
- cur.updateFlags(Update::FitCursor);
+ cur.screenUpdateFlags(Update::FitCursor);
break;
case LFUN_INSET_SELECT_ALL:
needsUpdate |= cursorBottom(cur);
} else
cur.undispatched();
- cur.updateFlags(Update::FitCursor);
+ cur.screenUpdateFlags(Update::FitCursor);
break;
case LFUN_CHAR_FORWARD:
// provide it with two different cursors.
Cursor dummy = cur;
dummy.pos() = dummy.pit() = 0;
- cur.bv().checkDepm(dummy, cur);
+ if (cur.bv().checkDepm(dummy, cur))
+ cur.forceBufferUpdate();;
}
}
break;
Cursor dummy = cur;
dummy.pos() = cur.lastpos();
dummy.pit() = cur.lastpit();
- cur.bv().checkDepm(dummy, cur);
+ if (cur.bv().checkDepm(dummy, cur))
+ cur.forceBufferUpdate();
}
}
break;
singleParUpdate = false;
}
moveCursor(cur, false);
+ cur.forceBufferUpdate();
break;
case LFUN_CHAR_DELETE_BACKWARD:
cutSelection(cur, true, false);
singleParUpdate = false;
}
+ cur.forceBufferUpdate();
break;
case LFUN_BREAK_PARAGRAPH:
}
case LFUN_INSET_DISSOLVE: {
- if (dissolveInset(cur))
+ if (dissolveInset(cur)) {
needsUpdate = true;
+ cur.forceBufferUpdate();
+ }
break;
}
case mouse_button::button1:
// Set the cursor
if (!bv->mouseSetCursor(cur, cmd.argument() == "region-select"))
- cur.updateFlags(Update::SinglePar | Update::FitCursor);
+ cur.screenUpdateFlags(Update::SinglePar | Update::FitCursor);
if (bvcur.wordSelection())
selectWord(bvcur, WHOLE_WORD);
break;
lyx::dispatch(
FuncRequest(LFUN_COMMAND_ALTERNATIVES,
"selection-paste ; primary-selection-paste paragraph"));
- cur.noUpdate();
+ cur.noScreenUpdate();
break;
case mouse_button::button3: {
// selection, a context menu will popup.
if (bvcur.selection() && cur >= bvcur.selectionBegin()
&& cur < bvcur.selectionEnd()) {
- cur.noUpdate();
+ cur.noScreenUpdate();
return;
}
if (!bv->mouseSetCursor(cur, false))
- cur.updateFlags(Update::SinglePar | Update::FitCursor);
+ cur.screenUpdateFlags(Update::SinglePar | Update::FitCursor);
break;
}
case LFUN_MOUSE_MOTION: {
// Mouse motion with right or middle mouse do nothing for now.
if (cmd.button() != mouse_button::button1) {
- cur.noUpdate();
+ cur.noScreenUpdate();
return;
}
// ignore motions deeper nested than the real anchor
bvcur.setSelection(true);
if (cur.top() == old) {
// We didn't move one iota, so no need to update the screen.
- cur.updateFlags(Update::SinglePar | Update::FitCursor);
- //cur.noUpdate();
+ cur.screenUpdateFlags(Update::SinglePar | Update::FitCursor);
+ //cur.noScreenUpdate();
return;
}
break;
cur.bv().cursor().setSelection();
// We might have removed an empty but drawn selection
// (probably a margin)
- cur.updateFlags(Update::SinglePar | Update::FitCursor);
+ cur.screenUpdateFlags(Update::SinglePar | Update::FitCursor);
} else
- cur.noUpdate();
+ cur.noScreenUpdate();
// FIXME: We could try to handle drag and drop of selection here.
return;
case mouse_button::button2:
// Middle mouse pasting is handled at mouse press time,
// see LFUN_MOUSE_PRESS.
- cur.noUpdate();
+ cur.noScreenUpdate();
return;
case mouse_button::button3:
// Cursor was set at LFUN_MOUSE_PRESS time.
// FIXME: If there is a selection we could try to handle a special
// drag & drop context menu.
- cur.noUpdate();
+ cur.noScreenUpdate();
return;
case mouse_button::none:
case LFUN_ERT_INSERT:
case LFUN_LISTING_INSERT:
case LFUN_MARGINALNOTE_INSERT:
- case LFUN_OPTIONAL_INSERT:
+ case LFUN_ARGUMENT_INSERT:
case LFUN_INDEX_INSERT:
case LFUN_PREVIEW_INSERT:
// Open the inset, and move the current selection
cur.posForward();
// Some insets are numbered, others are shown in the outline pane so
// let's update the labels and the toc backend.
- bv->buffer().updateBuffer();
+ cur.forceBufferUpdate();
break;
case LFUN_TABULAR_INSERT:
// date metrics.
FuncRequest cmd_caption(LFUN_CAPTION_INSERT);
doInsertInset(cur, cur.text(), cmd_caption, true, false);
- bv->buffer().updateBuffer();
- cur.updateFlags(Update::Force);
+ cur.forceBufferUpdate();
+ cur.screenUpdateFlags(Update::Force);
// FIXME: When leaving the Float (or Wrap) inset we should
// delete any empty paragraph left above or below the
// caption.
break;
}
+ case LFUN_SPELLING_REMOVE: {
+ docstring word = from_utf8(cmd.getArg(0));
+ Language * lang;
+ if (word.empty()) {
+ word = cur.selectionAsString(false);
+ // FIXME
+ if (word.size() > 100 || word.empty()) {
+ // Get word or selection
+ selectWordWhenUnderCursor(cur, WHOLE_WORD);
+ word = cur.selectionAsString(false);
+ }
+ lang = const_cast<Language *>(cur.getFont().language());
+ } else
+ lang = const_cast<Language *>(languages.getLanguage(cmd.getArg(1)));
+ WordLangTuple wl(word, lang);
+ theSpellChecker()->remove(wl);
+ break;
+ }
+
case LFUN_PARAGRAPH_PARAMS_APPLY: {
// Given data, an encoding of the ParagraphParameters
// generated in the Paragraph dialog, this function sets
case LFUN_OUTLINE_UP:
outline(OutlineUp, cur);
setCursor(cur, cur.pit(), 0);
- cur.buffer()->updateBuffer();
+ cur.forceBufferUpdate();
needsUpdate = true;
break;
case LFUN_OUTLINE_DOWN:
outline(OutlineDown, cur);
setCursor(cur, cur.pit(), 0);
- cur.buffer()->updateBuffer();
+ cur.forceBufferUpdate();
needsUpdate = true;
break;
case LFUN_OUTLINE_IN:
outline(OutlineIn, cur);
- cur.buffer()->updateBuffer();
+ cur.forceBufferUpdate();
needsUpdate = true;
break;
case LFUN_OUTLINE_OUT:
outline(OutlineOut, cur);
- cur.buffer()->updateBuffer();
+ cur.forceBufferUpdate();
needsUpdate = true;
break;
// Inserting characters does not change par height in general. So, try
// to update _only_ this paragraph. BufferView will detect if a full
// metrics update is needed anyway.
- cur.updateFlags(Update::SinglePar | Update::FitCursor);
+ cur.screenUpdateFlags(Update::SinglePar | Update::FitCursor);
return;
}
// FIXME: it would be better if we could just do this
//
//if (cur.result().update() != Update::FitCursor)
- // cur.noUpdate();
+ // cur.noScreenUpdate();
//
// But some LFUNs do not set Update::FitCursor when needed, so we
// do it for all. This is not very harmfull as FitCursor will provoke
// a full redraw only if needed but still, a proper review of all LFUN
// should be done and this needsUpdate boolean can then be removed.
- cur.updateFlags(Update::FitCursor);
+ cur.screenUpdateFlags(Update::FitCursor);
else
- cur.updateFlags(Update::Force | Update::FitCursor);
+ cur.screenUpdateFlags(Update::Force | Update::FitCursor);
}
case LFUN_INFO_INSERT:
code = INFO_CODE;
break;
- case LFUN_OPTIONAL_INSERT: {
- code = OPTARG_CODE;
+ case LFUN_ARGUMENT_INSERT: {
+ code = ARG_CODE;
Layout const & lay = cur.paragraph().layout();
int const numargs = lay.reqargs + lay.optargs;
- enable = cur.paragraph().insetList().count(OPTARG_CODE) < numargs;
+ enable = cur.paragraph().insetList().count(ARG_CODE) < numargs;
break;
}
case LFUN_INDEX_INSERT:
case LFUN_SPELLING_ADD:
case LFUN_SPELLING_IGNORE:
+ case LFUN_SPELLING_REMOVE:
enable = theSpellChecker();
break;