"Bo Peng" <[EMAIL PROTECTED]> writes:
>> Jose, can you wait a bit for the fix of this one? Should be a one
>> liner somewhere.
>
> I submitted a quick fix (r19199). It can be reverted if JMarc has some
> better idea.

Here is the fix I would propose. It ensures that the cursor is set
through BufferView::mouseSetCursor, so that the selection is always
tracked correctly. The patch is a little longer because I used the
occasion to slightly cleanup the code (I do not think the two-parts
handling of mouse2 is really useful).

The change in CutAndPaste is unrelated but makes sense: the other
pasting operations do not select the pasted text...

Bo, Juergen, José?

JMarc

Index: src/CutAndPaste.cpp
===================================================================
--- src/CutAndPaste.cpp	(révision 19249)
+++ src/CutAndPaste.cpp	(copie de travail)
@@ -791,7 +791,6 @@ void pasteSelection(Cursor & cur, ErrorL
 	recordUndo(cur);
 	pasteParagraphList(cur, selectionBuffer[0].first,
 			   selectionBuffer[0].second, errorList);
-	cur.setSelection();
 }
 
 
Index: src/Text3.cpp
===================================================================
--- src/Text3.cpp	(révision 19249)
+++ src/Text3.cpp	(copie de travail)
@@ -1015,43 +1015,34 @@ void Text::dispatch(Cursor & cur, FuncRe
 
 	// Single-click on work area
 	case LFUN_MOUSE_PRESS: {
-		cap::saveSelection(bv->cursor());
 		// Right click on a footnote flag opens float menu
 		if (cmd.button() == mouse_button::button3)
 			cur.clearSelection();
 
-		// Middle button press pastes if we have a selection
-		// We do this here as if the selection was inside an inset
-		// 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;
-		}
+		// Set the cursor
+		bool update = bv->mouseSetCursor(cur);
 
 		// Insert primary selection with middle mouse
 		// if there is a local selection in the current buffer,
 		// insert this
 		if (cmd.button() == mouse_button::button2) {
-			if (paste_internally) {
-				cap::pasteSelection(cur, bv->buffer()->errorList("Paste"));
+			if (cap::selection()) {
+				// 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");
-				cur.clearSelection(); // bug 393
 				bv->buffer()->markDirty();
 				finishUndo();
 			} else {
-				bv->mouseSetCursor(cur);
 				lyx::dispatch(FuncRequest(LFUN_PRIMARY_SELECTION_PASTE, "paragraph"));
 			}
 		}
 
-		// we have to update after dePM triggered
-		bool update = bv->mouseSetCursor(cur);
-
+		// we have to update after dEPM triggered
 		if (!update && cmd.button() == mouse_button::button1) {
 			needsUpdate = false;
 			cur.noUpdate();

Reply via email to