mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-12-13 17:20:55 +00:00
Fix several middle-click pasting problems
* src/BufferView.cpp (workAreaDispatch): be sure to call haveSelection() as we do in LyXFunc::dispatch. * src/Text3.cpp (doDispatch): refactor the handling of LFUN_MOUSE_PRESS. In particular, make sure that the cursor is alsways set through BufferView::mouseSetCursor, so that the selection is correctly saved. * src/CutAndPaste.cpp (pasteSelection): do not set the selection, since paste methods do not do it. git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/branches/BRANCH_1_5_X@19292 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
parent
3c78a6d2a7
commit
eac423830d
@ -63,6 +63,7 @@
|
|||||||
#include "frontends/alert.h"
|
#include "frontends/alert.h"
|
||||||
#include "frontends/FileDialog.h"
|
#include "frontends/FileDialog.h"
|
||||||
#include "frontends/FontMetrics.h"
|
#include "frontends/FontMetrics.h"
|
||||||
|
#include "frontends/Selection.h"
|
||||||
|
|
||||||
#include "graphics/Previews.h"
|
#include "graphics/Previews.h"
|
||||||
|
|
||||||
@ -1225,6 +1226,9 @@ bool BufferView::workAreaDispatch(FuncRequest const & cmd0)
|
|||||||
if (!cur.result().dispatched())
|
if (!cur.result().dispatched())
|
||||||
cur.dispatch(cmd);
|
cur.dispatch(cmd);
|
||||||
|
|
||||||
|
//Do we have a selection?
|
||||||
|
theSelection().haveSelection(cursor().selection());
|
||||||
|
|
||||||
// Redraw if requested and necessary.
|
// Redraw if requested and necessary.
|
||||||
if (cur.result().dispatched() && cur.result().update())
|
if (cur.result().dispatched() && cur.result().update())
|
||||||
return update(cur.result().update());
|
return update(cur.result().update());
|
||||||
|
@ -791,7 +791,6 @@ void pasteSelection(Cursor & cur, ErrorList & errorList)
|
|||||||
recordUndo(cur);
|
recordUndo(cur);
|
||||||
pasteParagraphList(cur, selectionBuffer[0].first,
|
pasteParagraphList(cur, selectionBuffer[0].first,
|
||||||
selectionBuffer[0].second, errorList);
|
selectionBuffer[0].second, errorList);
|
||||||
cur.setSelection();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1015,43 +1015,34 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
|
|||||||
|
|
||||||
// Single-click on work area
|
// Single-click on work area
|
||||||
case LFUN_MOUSE_PRESS: {
|
case LFUN_MOUSE_PRESS: {
|
||||||
cap::saveSelection(bv->cursor());
|
|
||||||
// Right click on a footnote flag opens float menu
|
// Right click on a footnote flag opens float menu
|
||||||
if (cmd.button() == mouse_button::button3)
|
if (cmd.button() == mouse_button::button3)
|
||||||
cur.clearSelection();
|
cur.clearSelection();
|
||||||
|
|
||||||
// Middle button press pastes if we have a selection
|
// Set the cursor
|
||||||
// We do this here as if the selection was inside an inset
|
bool update = bv->mouseSetCursor(cur);
|
||||||
// it could get cleared on the unlocking of the inset so
|
|
||||||
// we have to check this first
|
|
||||||
bool paste_internally = false;
|
|
||||||
if (cmd.button() == mouse_button::button2 && cap::selection()) {
|
|
||||||
// Copy the selection buffer to the clipboard
|
|
||||||
// stack, because we want it to appear in the
|
|
||||||
// "Edit->Paste recent" menu.
|
|
||||||
cap::copySelectionToStack();
|
|
||||||
paste_internally = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Insert primary selection with middle mouse
|
// Insert primary selection with middle mouse
|
||||||
// if there is a local selection in the current buffer,
|
// if there is a local selection in the current buffer,
|
||||||
// insert this
|
// insert this
|
||||||
if (cmd.button() == mouse_button::button2) {
|
if (cmd.button() == mouse_button::button2) {
|
||||||
if (paste_internally) {
|
if (cap::selection()) {
|
||||||
cap::pasteSelection(cur, bv->buffer()->errorList("Paste"));
|
// Copy the selection buffer to the clipboard
|
||||||
|
// stack, because we want it to appear in the
|
||||||
|
// "Edit->Paste recent" menu.
|
||||||
|
cap::copySelectionToStack();
|
||||||
|
|
||||||
|
cap::pasteSelection(bv->cursor(),
|
||||||
|
bv->buffer()->errorList("Paste"));
|
||||||
bv->buffer()->errors("Paste");
|
bv->buffer()->errors("Paste");
|
||||||
cur.clearSelection(); // bug 393
|
|
||||||
bv->buffer()->markDirty();
|
bv->buffer()->markDirty();
|
||||||
finishUndo();
|
finishUndo();
|
||||||
} else {
|
} else {
|
||||||
bv->mouseSetCursor(cur);
|
|
||||||
lyx::dispatch(FuncRequest(LFUN_PRIMARY_SELECTION_PASTE, "paragraph"));
|
lyx::dispatch(FuncRequest(LFUN_PRIMARY_SELECTION_PASTE, "paragraph"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// we have to update after dePM triggered
|
// we have to update after dEPM triggered
|
||||||
bool update = bv->mouseSetCursor(cur);
|
|
||||||
|
|
||||||
if (!update && cmd.button() == mouse_button::button1) {
|
if (!update && cmd.button() == mouse_button::button1) {
|
||||||
needsUpdate = false;
|
needsUpdate = false;
|
||||||
cur.noUpdate();
|
cur.noUpdate();
|
||||||
|
@ -43,6 +43,11 @@ What's new
|
|||||||
|
|
||||||
- Fix bug where using pdfsync marks the document 'changed' (bug 4023).
|
- Fix bug where using pdfsync marks the document 'changed' (bug 4023).
|
||||||
|
|
||||||
|
- Fix pasting a selection from the same LyX document with middle mouse
|
||||||
|
button.
|
||||||
|
|
||||||
|
- Fix pasting of a selection from other applications (X11 only).
|
||||||
|
|
||||||
- Coherent behaviour when inserting over a selection: now the selection
|
- Coherent behaviour when inserting over a selection: now the selection
|
||||||
is always replaced by the insertion (bug 672).
|
is always replaced by the insertion (bug 672).
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user