#include "SpellChecker.h"
#include "TextClass.h"
#include "TextMetrics.h"
-#include "VSpace.h"
#include "WordLangTuple.h"
#include "frontends/Application.h"
#include "support/convert.h"
#include "support/debug.h"
#include "support/gettext.h"
+#include "support/lassert.h"
#include "support/lstrings.h"
#include "support/lyxtime.h"
#include "support/os.h"
using cap::replaceSelection;
using cap::grabAndEraseSelection;
using cap::selClearOrDel;
+using cap::pasteSimpleText;
// globals...
static Font freefont(ignore_font, ignore_language);
inset->edit(cur, true);
// Now put this into inset
Font const f(inherit_font, cur.current_font.language());
- cur.text()->insertStringAsLines(cur, ds, f);
- cur.leaveInset(*inset);
+ if (!ds.empty()) {
+ cur.text()->insertStringAsLines(cur, ds, f);
+ cur.leaveInset(*inset);
+ }
return true;
}
// provide it with two different cursors.
Cursor dummy = cur;
dummy.pos() = dummy.pit() = 0;
- if (cur.bv().checkDepm(dummy, cur))
+ if (cur.bv().checkDepm(dummy, cur)) {
cur.forceBufferUpdate();
+ // DEPM may have requested a screen update
+ cur.screenUpdateFlags(
+ cur.screenUpdate() | dummy.screenUpdate());
+ }
}
}
break;
Cursor dummy = cur;
dummy.pos() = cur.lastpos();
dummy.pit() = cur.lastpit();
- if (cur.bv().checkDepm(dummy, cur))
+ if (cur.bv().checkDepm(dummy, cur)) {
cur.forceBufferUpdate();
+ // DEPM may have requested a screen update
+ cur.screenUpdateFlags(
+ cur.screenUpdate() | dummy.screenUpdate());
+ }
}
}
break;
// provide it with two different cursors.
Cursor dummy = cur;
dummy.pos() = dummy.pit() = 0;
- if (cur.bv().checkDepm(dummy, cur))
+ if (cur.bv().checkDepm(dummy, cur)) {
cur.forceBufferUpdate();
+ // DEPM may have requested a screen update
+ cur.screenUpdateFlags(
+ cur.screenUpdate() | dummy.screenUpdate());
+ }
}
}
break;
Cursor dummy = cur;
dummy.pos() = cur.lastpos();
dummy.pit() = cur.lastpit();
- if (cur.bv().checkDepm(dummy, cur))
+ if (cur.bv().checkDepm(dummy, cur)) {
cur.forceBufferUpdate();
+ // DEPM may have requested a screen update
+ cur.screenUpdateFlags(
+ cur.screenUpdate() | dummy.screenUpdate());
+ }
}
}
break;
}
case LFUN_CLIPBOARD_PASTE:
- cur.clearSelection();
+ cap::replaceSelection(cur);
pasteClipboardText(cur, bv->buffer().errorList("Paste"),
cmd.argument() == "paragraph");
bv->buffer().errors("Paste");
break;
+ case LFUN_CLIPBOARD_PASTE_SIMPLE:
+ cap::replaceSelection(cur);
+ pasteSimpleText(cur, cmd.argument() == "paragraph");
+ break;
+
case LFUN_PRIMARY_SELECTION_PASTE:
+ cap::replaceSelection(cur);
pasteString(cur, theSelection().get(),
cmd.argument() == "paragraph");
break;
// Copy the selection buffer to the clipboard stack,
// because we want it to appear in the "Edit->Paste
// recent" menu.
+ cap::replaceSelection(cur);
cap::copySelectionToStack();
cap::pasteSelection(bv->cursor(), bv->buffer().errorList("Paste"));
bv->buffer().errors("Paste");
case LFUN_INDEX_INSERT:
case LFUN_PREVIEW_INSERT:
case LFUN_SCRIPT_INSERT:
+ case LFUN_IPA_INSERT:
// Open the inset, and move the current selection
// inside it.
doInsertInset(cur, this, cmd, true, true);
case LFUN_FLOAT_INSERT:
case LFUN_FLOAT_WIDE_INSERT:
case LFUN_WRAP_INSERT: {
- // will some text be moved into the inset?
- bool content = cur.selection();
+ // will some content be moved into the inset?
+ bool const content = cur.selection();
+ // does the content consist of multiple paragraphs?
+ bool const singlepar = (cur.selBegin().pit() == cur.selEnd().pit());
doInsertInset(cur, this, cmd, true, true);
cur.posForward();
- // If some text is moved into the inset, doInsertInset
- // puts the cursor outside the inset. To insert the
- // caption we put it back into the inset.
- if (content)
+ // If some single-par content is moved into the inset,
+ // doInsertInset puts the cursor outside the inset.
+ // To insert the caption we put it back into the inset.
+ // FIXME cleanup doInsertInset to avoid such dances!
+ if (content && singlepar)
cur.backwardPos();
ParagraphList & pars = cur.text()->paragraphs();
break;
selectWordWhenUnderCursor(cur, WHOLE_WORD_STRICT);
Font font(ignore_font, lang);
- toggleAndShow(cur, this, font);
+ toggleAndShow(cur, this, font, false);
break;
}
&& cur.buffer()->params().branchlist().empty())
enable = false;
break;
+ case LFUN_IPA_INSERT:
+ code = IPA_CODE;
+ break;
case LFUN_PHANTOM_INSERT:
code = PHANTOM_CODE;
break;
}
case LFUN_CLIPBOARD_PASTE:
+ case LFUN_CLIPBOARD_PASTE_SIMPLE:
enable = !theClipboard().empty();
break;
void Text::pasteString(Cursor & cur, docstring const & clip,
bool asParagraphs)
{
- cur.clearSelection();
if (!clip.empty()) {
cur.recordUndo();
if (asParagraphs)