- case LFUN_MOUSE_PRESS: {
- // Right click on a footnote flag opens float menu
- // FIXME: Why should we clear the selection in this case?
- if (cmd.button() == mouse_button::button3)
- cur.clearSelection();
-
- bool do_selection = cmd.button() == mouse_button::button1
- && cmd.argument() == "region-select";
- // Set the cursor
- bool update = bv->mouseSetCursor(cur, do_selection);
-
- // 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 (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");
- bv->buffer().markDirty();
- bv->cursor().finishUndo();
- } else {
- lyx::dispatch(FuncRequest(LFUN_PRIMARY_SELECTION_PASTE, "paragraph"));
+ case LFUN_MOUSE_PRESS:
+ // We are not marking a selection with the keyboard in any case.
+ cur.bv().cursor().mark() = false;
+ switch (cmd.button()) {
+ case mouse_button::button1:
+ // Set the cursor
+ if (!bv->mouseSetCursor(cur, cmd.argument() == "region-select"))
+ cur.updateFlags(Update::SinglePar | Update::FitCursor);
+ break;
+
+ case mouse_button::button2:
+ // Middle mouse pasting.
+ if (!cap::selection()) {
+ // There is no local selection in the current buffer, so try to
+ // paste primary selection instead.
+ lyx::dispatch(FuncRequest(LFUN_PRIMARY_SELECTION_PASTE,
+ "paragraph"));
+ // Nothing else to do.
+ cur.noUpdate();
+ return;