From ec7d9f459350fc61ec187334b797bd027d8822da Mon Sep 17 00:00:00 2001 From: Jean-Marc Lasgouttes Date: Wed, 14 Jan 2009 14:24:59 +0000 Subject: [PATCH] Fix bug 4741: Pasting with middle mouse button into read only document works http://bugzilla.lyx.org/show_bug.cgi?id=4741 Create a new LFUN selection-paste (to paste the internal selection), and bind middle mouse button to command-alternatives selection-paste ; primary-selection-paste paragraph git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@28154 a592a061-630c-0410-9148-cb99ea01b6c8 --- src/FuncCode.h | 123 +++++++++++++++++++++++----------------------- src/LyXAction.cpp | 7 +++ src/Text3.cpp | 34 ++++++------- 3 files changed, 86 insertions(+), 78 deletions(-) diff --git a/src/FuncCode.h b/src/FuncCode.h index ebab4cc8fc..48ec01d1fa 100644 --- a/src/FuncCode.h +++ b/src/FuncCode.h @@ -48,372 +48,373 @@ enum FuncCode LFUN_PASTE, LFUN_PRIMARY_SELECTION_PASTE, // 15 + LFUN_SELECTION_PASTE, // JMarc 2008/12/15 LFUN_CUT, LFUN_COPY, LFUN_CLOSE_TAB_GROUP, LFUN_NOTE_NEXT, - LFUN_INSET_TOGGLE, // 20 + LFUN_INSET_TOGGLE, LFUN_HFILL_INSERT, LFUN_TEXTSTYLE_APPLY, LFUN_TEXTSTYLE_UPDATE, LFUN_FONT_EMPH, - LFUN_FONT_BOLD, // 25 + LFUN_FONT_BOLD, LFUN_FONT_BOLDSYMBOL, LFUN_FONT_ROMAN, LFUN_FONT_NOUN, LFUN_FONT_ITAL, - LFUN_FONT_FRAK, // 30 + LFUN_FONT_FRAK, LFUN_CHAR_FORWARD, LFUN_CHAR_BACKWARD, LFUN_UP, LFUN_DOWN, - LFUN_SCREEN_UP, // 35 + LFUN_SCREEN_UP, LFUN_SCREEN_DOWN, LFUN_LINE_BEGIN, LFUN_LINE_END, LFUN_CELL_FORWARD, - LFUN_CELL_BACKWARD, // 40 + LFUN_CELL_BACKWARD, LFUN_WORD_FORWARD, LFUN_WORD_BACKWARD, LFUN_BUFFER_BEGIN, LFUN_BUFFER_END, - LFUN_CHAR_FORWARD_SELECT, // 45 + LFUN_CHAR_FORWARD_SELECT, LFUN_CHAR_BACKWARD_SELECT, LFUN_UP_SELECT, LFUN_DOWN_SELECT, LFUN_SCREEN_UP_SELECT, - LFUN_SCREEN_DOWN_SELECT, // 50 + LFUN_SCREEN_DOWN_SELECT, LFUN_LINE_BEGIN_SELECT, LFUN_LINE_END_SELECT, LFUN_WORD_FORWARD_SELECT, LFUN_WORD_BACKWARD_SELECT, - LFUN_WORD_SELECT, // 55 + LFUN_WORD_SELECT, LFUN_BUFFER_BEGIN_SELECT, LFUN_BUFFER_END_SELECT, LFUN_SPACE_INSERT, // JSpitzm 20030520 LFUN_SPECIALCHAR_INSERT, // JSpitzm, 20071206 - LFUN_MARK_TOGGLE, // 60 + LFUN_MARK_TOGGLE, LFUN_CHAR_DELETE_FORWARD, LFUN_CHAR_DELETE_BACKWARD, LFUN_NEWLINE_INSERT, // renamed: JSpitzm, 20080325 LFUN_BREAK_PARAGRAPH, - LFUN_QUOTE_INSERT, // 65 + LFUN_QUOTE_INSERT, LFUN_ACCENT_CIRCUMFLEX, LFUN_MATH_SUBSCRIPT, LFUN_MATH_SUPERSCRIPT, LFUN_ACCENT_GRAVE, - LFUN_ACCENT_ACUTE, // 70 + LFUN_ACCENT_ACUTE, LFUN_ACCENT_TILDE, LFUN_ACCENT_CEDILLA, LFUN_ACCENT_MACRON, LFUN_ACCENT_UNDERBAR, - LFUN_ACCENT_UNDERDOT, // 75 + LFUN_ACCENT_UNDERDOT, LFUN_ACCENT_CIRCLE, LFUN_ACCENT_TIE, LFUN_ACCENT_BREVE, LFUN_ACCENT_CARON, - LFUN_ACCENT_HUNGARIAN_UMLAUT, // 80 + LFUN_ACCENT_HUNGARIAN_UMLAUT, LFUN_ACCENT_UMLAUT, LFUN_ACCENT_DOT, LFUN_ACCENT_OGONEK, LFUN_SELF_INSERT, - LFUN_GETBUFNAME, // 85 + LFUN_GETBUFNAME, LFUN_SERVER_GET_XY, LFUN_SERVER_SET_XY, LFUN_SPLIT_VIEW, LFUN_LINEATCURSOR, - LFUN_SERVER_GET_LAYOUT, // 90 + LFUN_SERVER_GET_LAYOUT, LFUN_SERVER_GET_FILENAME, LFUN_SERVER_NOTIFY, LFUN_SERVER_GOTO_FILE_ROW, LFUN_NOTE_INSERT, - LFUN_UI_TOGGLE, // 95 + LFUN_UI_TOGGLE, LFUN_KEYMAP_OFF, LFUN_KEYMAP_PRIMARY, LFUN_KEYMAP_SECONDARY, LFUN_KEYMAP_TOGGLE, - LFUN_MATH_INSERT, // 100 + LFUN_MATH_INSERT, LFUN_MATH_MATRIX, LFUN_MATH_LIMITS, LFUN_MATH_DELIM, // Alejandro 180696 LFUN_MATH_DISPLAY, // Alejandro 180696 - LFUN_MATH_MODE, // Alejandro 040696 // 105 + LFUN_MATH_MODE, // Alejandro 040696 LFUN_MATH_NUMBER_TOGGLE, LFUN_MATH_NUMBER_LINE_TOGGLE, LFUN_MATH_SIZE, // Alejandro 150896 LFUN_MATH_MACRO, // ale970510 - LFUN_MATH_EXTERN, // Andre' 20010424 // 110 + LFUN_MATH_EXTERN, // Andre' 20010424 LFUN_MATH_MUTATE, // Andre' 20010523 LFUN_MATH_SPACE, // Andre' 20010725 LFUN_WORD_DELETE_FORWARD, LFUN_WORD_DELETE_BACKWARD, - LFUN_LINE_DELETE, // 115 + LFUN_LINE_DELETE, LFUN_NOTES_MUTATE, LFUN_MARK_OFF, LFUN_MARK_ON, LFUN_LAYOUT, - LFUN_LAYOUT_PARAGRAPH, // 120 + LFUN_LAYOUT_PARAGRAPH, LFUN_DROP_LAYOUTS_CHOICE, // used in bindings as of 20071228 LFUN_FONT_TYPEWRITER, // changed from FONT_CODE 20070920 LFUN_FONT_SANS, LFUN_FONT_DEFAULT, - LFUN_FONT_UNDERLINE, // 125 + LFUN_FONT_UNDERLINE, LFUN_FONT_SIZE, LFUN_FONT_STATE, LFUN_WORD_UPCASE, LFUN_WORD_LOWCASE, - LFUN_WORD_CAPITALIZE, // 130 + LFUN_WORD_CAPITALIZE, LFUN_LABEL_INSERT, LFUN_DEPTH_DECREMENT, LFUN_DEPTH_INCREMENT, LFUN_MENU_OPEN, // used in bindings as of 20060905 - LFUN_CANCEL, // 135 + LFUN_CANCEL, LFUN_META_PREFIX, LFUN_COMMAND_EXECUTE, LFUN_FILE_INSERT, LFUN_FILE_INSERT_PLAINTEXT, // CFO-G 1997-11-19 - LFUN_FILE_INSERT_PLAINTEXT_PARA,// Levon 2001-02-14 // 140 + LFUN_FILE_INSERT_PLAINTEXT_PARA,// Levon 2001-02-14 LFUN_FILE_OPEN, LFUN_PARAGRAPH_UP, // Asger 1996-10-01 LFUN_PARAGRAPH_UP_SELECT, // Asger 1996-10-01 LFUN_PARAGRAPH_DOWN, // Asger 1996-10-01 - LFUN_PARAGRAPH_DOWN_SELECT, // Asger 1996-10-01 // 145 + LFUN_PARAGRAPH_DOWN_SELECT, // Asger 1996-10-01 LFUN_NEXT_INSET_MODIFY, // JSpitzm 20080323 LFUN_BUFFER_NEW_TEMPLATE, // Asger 1997-02-02 LFUN_BUFFER_RELOAD, // Asger 1997-02-02 LFUN_RECONFIGURE, - LFUN_BRANCH_ACTIVATE, // 150 + LFUN_BRANCH_ACTIVATE, LFUN_BRANCH_DEACTIVATE, LFUN_INDEX_PRINT, // Lgb 97-02-27 LFUN_CELL_SPLIT, LFUN_BUFFER_CHILD_OPEN, // Ale 970528 - LFUN_TOC_INSERT, // Lgb 97-05-27 // 155 + LFUN_TOC_INSERT, // Lgb 97-05-27 LFUN_FLOAT_LIST_INSERT, // Lgb 20010503 LFUN_BUFFER_TOGGLE_READ_ONLY, // Lgb 97-05-27 LFUN_VC_REGISTER, // Lgb 97-07-01 LFUN_VC_CHECK_IN, // Lgb 97-07-01 - LFUN_VC_CHECK_OUT, // Lgb 97-07-01 // 160 + LFUN_VC_CHECK_OUT, // Lgb 97-07-01 LFUN_VC_REVERT, // Lgb 97-07-01 LFUN_VC_UNDO_LAST, // Lgb 97-07-01 LFUN_BUFFER_EXPORT, // Lgb 97-07-29 LFUN_LABEL_GOTO, // Ale 970806 - LFUN_CURSOR_FOLLOWS_SCROLLBAR_TOGGLE, // ARRae 971202 // 165 + LFUN_CURSOR_FOLLOWS_SCROLLBAR_TOGGLE, // ARRae 971202 LFUN_BUFFER_CHKTEX, // Asger 971030 LFUN_HYPERLINK_INSERT, // CFO-G 971121 LFUN_WORD_FIND_FORWARD, // Etienne 980216 LFUN_WORD_FIND_BACKWARD, // Etienne 980220 - LFUN_APPENDIX, // ettrich 980505 // 170 + LFUN_APPENDIX, // ettrich 980505 LFUN_BUFFER_IMPORT, // Asger 980724 LFUN_COMMAND_SEQUENCE, // Andre' 991111 LFUN_PREFERENCES_SAVE, LFUN_HELP_OPEN, // Jug 990627 - LFUN_DATE_INSERT, // jdblair 20000131 // 175 + LFUN_DATE_INSERT, // jdblair 20000131 LFUN_LANGUAGE, // Dekel 20000203 LFUN_ERT_INSERT, // Jug 20000218 LFUN_FOOTNOTE_INSERT, // Jug 20000307 LFUN_PARAGRAPH_SPACING, // Lgb 20000411 - LFUN_TABULAR_INSERT, // Jug 20000412 // 180 + LFUN_TABULAR_INSERT, // Jug 20000412 LFUN_LOFVIEW, // Dekel 20000519 LFUN_LOTVIEW, // Dekel 20000519 LFUN_LOAVIEW, // Dekel 20000519 LFUN_SET_COLOR, // SLior 20000611 - LFUN_MARGINALNOTE_INSERT, // Lgb 20000626 // 185 + LFUN_MARGINALNOTE_INSERT, // Lgb 20000626 LFUN_FLOAT_INSERT, // Lgb 20000627 LFUN_FLOAT_WIDE_INSERT, // Lgb 20010531 LFUN_CAPTION_INSERT, // Lgb 20000718; inactive as of 20060905 LFUN_BUFFER_SWITCH, - LFUN_TABULAR_FEATURE, // Jug 20000728 // 190 + LFUN_TABULAR_FEATURE, // Jug 20000728 LFUN_LAYOUT_TABULAR, // Jug 20000731 LFUN_BUFFER_UPDATE, // Dekel 20000805 LFUN_INDEX_INSERT, // Angus 20000803 LFUN_SCREEN_FONT_UPDATE, // ARRae 20000813 - LFUN_PARAGRAPH_GOTO, // Dekel 20000826 // 195 + LFUN_PARAGRAPH_GOTO, // Dekel 20000826 LFUN_REFERENCE_NEXT, // Dekel 20010114 LFUN_BOOKMARK_SAVE, LFUN_BOOKMARK_GOTO, LFUN_SELECT_FILE_SYNC, // Levon 20010214 - LFUN_MESSAGE, // Lgb 20010408; for scripting purposes, output in minibuffer // 200 + LFUN_MESSAGE, // Lgb 20010408; for scripting purposes, output in minibuffer LFUN_CHARS_TRANSPOSE, // Lgb 20010425 LFUN_ESCAPE, // Lgb 20010517 LFUN_THESAURUS_ENTRY, // Levon 20010720 LFUN_OPTIONAL_INSERT, // Martin 12 Aug 2002 - LFUN_MOUSE_PRESS, // André 9 Aug 2002 // 205 + LFUN_MOUSE_PRESS, // André 9 Aug 2002 LFUN_MOUSE_MOTION, // André 9 Aug 2002 LFUN_MOUSE_RELEASE, // André 9 Aug 2002 LFUN_MOUSE_DOUBLE, // André 9 Aug 2002 LFUN_MOUSE_TRIPLE, // André 9 Aug 2002 - LFUN_WRAP_INSERT, // Dekel 7 Apr 2002 // 210 + LFUN_WRAP_INSERT, // Dekel 7 Apr 2002 LFUN_CHANGES_TRACK, // Levon 20021001 (cool date !) LFUN_CHANGES_MERGE, // Levon 20021016 LFUN_CHANGE_ACCEPT, // Levon 20021016 LFUN_CHANGE_REJECT, // Levon 20021016 - LFUN_ALL_CHANGES_ACCEPT, // Levon 20021016 // 215 + LFUN_ALL_CHANGES_ACCEPT, // Levon 20021016 LFUN_ALL_CHANGES_REJECT, // Levon 20021016 LFUN_SCROLL, LFUN_DIALOG_SHOW, LFUN_DIALOG_SHOW_NEW_INSET, - LFUN_DIALOG_UPDATE, // 220 + LFUN_DIALOG_UPDATE, LFUN_DIALOG_HIDE, LFUN_DIALOG_TOGGLE, // JSpitzm 20070430 LFUN_DIALOG_DISCONNECT_INSET, LFUN_INSET_APPLY, - LFUN_INSET_INSERT, // 225 + LFUN_INSET_INSERT, LFUN_INSET_MODIFY, LFUN_INSET_DIALOG_UPDATE, LFUN_INSET_SETTINGS, LFUN_PARAGRAPH_PARAMS_APPLY, - LFUN_PARAGRAPH_UPDATE, // 230 + LFUN_PARAGRAPH_UPDATE, LFUN_INSET_EDIT, // JSpitzm 20080427 LFUN_BRANCH_INSERT, LFUN_BOX_INSERT, LFUN_LINE_INSERT, - LFUN_NEWPAGE_INSERT, // uwestoehr, 20071124 // 235 + LFUN_NEWPAGE_INSERT, // uwestoehr, 20071124 LFUN_REPEAT, LFUN_FINISHED_LEFT, LFUN_FINISHED_RIGHT, LFUN_FLEX_INSERT, - LFUN_WORD_FIND, // 240 + LFUN_WORD_FIND, LFUN_WORD_REPLACE, LFUN_BUFFER_EXPORT_CUSTOM, LFUN_BUFFER_PRINT, LFUN_NEXT_INSET_TOGGLE, - LFUN_ALL_INSETS_TOGGLE, // 245 + LFUN_ALL_INSETS_TOGGLE, LFUN_BUFFER_LANGUAGE, LFUN_TEXTCLASS_APPLY, LFUN_TEXTCLASS_LOAD, LFUN_BUFFER_SAVE_AS_DEFAULT, - LFUN_BUFFER_PARAMS_APPLY, // 250 + LFUN_BUFFER_PARAMS_APPLY, LFUN_LYXRC_APPLY, LFUN_BUFFER_NEXT, LFUN_BUFFER_PREVIOUS, LFUN_STATISTICS, - LFUN_CHANGES_OUTPUT, // jspitzm 20050121 // 255 + LFUN_CHANGES_OUTPUT, // jspitzm 20050121 LFUN_BIBTEX_DATABASE_ADD, LFUN_BIBTEX_DATABASE_DEL, LFUN_CITATION_INSERT, LFUN_OUTLINE_UP, - LFUN_OUTLINE_DOWN, // 260 + LFUN_OUTLINE_DOWN, LFUN_OUTLINE_IN, LFUN_OUTLINE_OUT, LFUN_PARAGRAPH_MOVE_DOWN, LFUN_PARAGRAPH_MOVE_UP, - LFUN_BUFFER_TOGGLE_COMPRESSION, // bpeng 20060427 // 265 + LFUN_BUFFER_TOGGLE_COMPRESSION, // bpeng 20060427 LFUN_MATH_BIGDELIM, LFUN_CLIPBOARD_PASTE, LFUN_INSET_DISSOLVE, // jspitzm 20060807 LFUN_CHANGE_NEXT, - LFUN_WINDOW_NEW, // Abdel 20061021 // 270 + LFUN_WINDOW_NEW, // Abdel 20061021 LFUN_WINDOW_CLOSE, // Abdel 20061023 LFUN_UNICODE_INSERT, // Lgb 20061022 LFUN_BOOKMARK_CLEAR, // bpeng 20061031 LFUN_NOMENCL_INSERT, // Ugras - LFUN_NOMENCL_PRINT, // Ugras // 275 + LFUN_NOMENCL_PRINT, // Ugras LFUN_LISTING_INSERT, // Herbert 20011110, bpeng 20070502 LFUN_TOOLBAR_TOGGLE, // Edwin 20070521 LFUN_BUFFER_WRITE_ALL, // rgh, gpothier 200707XX LFUN_PARAGRAPH_PARAMS, - LFUN_LAYOUT_MODULES_CLEAR, // 280 + LFUN_LAYOUT_MODULES_CLEAR, LFUN_LAYOUT_MODULE_ADD, LFUN_LAYOUT_RELOAD, LFUN_MASTER_BUFFER_VIEW, // Tommaso, 20070920 LFUN_MASTER_BUFFER_UPDATE, // Tommaso, 20070920 - LFUN_INFO_INSERT, // bpeng, 20071007 // 285 + LFUN_INFO_INSERT, // bpeng, 20071007 LFUN_CALL, // broider, 20071002 LFUN_CHAR_LEFT, // dov, 20071022 LFUN_CHAR_LEFT_SELECT, // dov, 20071022 LFUN_CHAR_RIGHT, // dov, 20071022 - LFUN_CHAR_RIGHT_SELECT, // dov, 20071022 // 290 + LFUN_CHAR_RIGHT_SELECT, // dov, 20071022 LFUN_FINISHED_BACKWARD, // dov, 20071022 LFUN_FINISHED_FORWARD, // dov, 20071022 LFUN_WORD_LEFT, // dov, 20071028 LFUN_WORD_LEFT_SELECT, // dov, 20071028 - LFUN_WORD_RIGHT, // dov, 20071028 // 295 + LFUN_WORD_RIGHT, // dov, 20071028 LFUN_WORD_RIGHT_SELECT, // dov, 20071028 LFUN_MATH_MACRO_FOLD, LFUN_MATH_MACRO_UNFOLD, LFUN_MATH_MACRO_ADD_PARAM, - LFUN_MATH_MACRO_REMOVE_PARAM, // 300 + LFUN_MATH_MACRO_REMOVE_PARAM, LFUN_MATH_MACRO_APPEND_GREEDY_PARAM, LFUN_MATH_MACRO_REMOVE_GREEDY_PARAM, LFUN_MATH_MACRO_MAKE_OPTIONAL, LFUN_MATH_MACRO_MAKE_NONOPTIONAL, - LFUN_MATH_MACRO_ADD_OPTIONAL_PARAM, // 305 + LFUN_MATH_MACRO_ADD_OPTIONAL_PARAM, LFUN_MATH_MACRO_REMOVE_OPTIONAL_PARAM, LFUN_MATH_MACRO_ADD_GREEDY_OPTIONAL_PARAM, LFUN_IN_MATHMACROTEMPLATE, LFUN_COMPLETION_POPUP, - LFUN_COMPLETION_INLINE, // 310 + LFUN_COMPLETION_INLINE, LFUN_COMPLETION_COMPLETE, LFUN_SET_GRAPHICS_GROUP, LFUN_COMPLETION_CANCEL, LFUN_COMPLETION_ACCEPT, - LFUN_COMMAND_ALTERNATIVES, // 315 + LFUN_COMMAND_ALTERNATIVES, LFUN_TAB_INSERT, LFUN_TAB_DELETE, LFUN_WORD_FINDADV, // Tommaso, 20081003 LFUN_REGEXP_MODE, // Tommaso, 20081003 - LFUN_COPY_LABEL_AS_REF, // sts, 20081116 // 320 + LFUN_COPY_LABEL_AS_REF, // sts, 20081116 LFUN_VC_COMMAND, LFUN_LASTACTION // end of the table diff --git a/src/LyXAction.cpp b/src/LyXAction.cpp index a84679bcc4..1927f5460c 100644 --- a/src/LyXAction.cpp +++ b/src/LyXAction.cpp @@ -1077,6 +1077,13 @@ void LyXAction::init() * \endvar */ { LFUN_PRIMARY_SELECTION_PASTE, "primary-selection-paste", Noop, Edit }, +/*! + * \var lyx::FuncCode lyx::LFUN_SELECTION_PASTE + * \li Action: Pastes the text in permanent selection. + * \li Syntax: selection-paste + * \endvar + */ + { LFUN_SELECTION_PASTE, "selection-paste", Noop, Edit }, /*! * \var lyx::FuncCode lyx::LFUN_UNDO * \li Action: Undoes the last edit. diff --git a/src/Text3.cpp b/src/Text3.cpp index 24e6b5e19b..08827fe31b 100644 --- a/src/Text3.cpp +++ b/src/Text3.cpp @@ -1158,6 +1158,15 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd) cmd.argument() == "paragraph"); break; + case LFUN_SELECTION_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"); + break; + case LFUN_UNICODE_INSERT: { if (cmd.argument().empty()) break; @@ -1242,23 +1251,10 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd) case mouse_button::button2: // Middle mouse pasting. bv->mouseSetCursor(cur); - 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; - } - // 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")); - cur.updateFlags(Update::Force | Update::FitCursor); - bv->buffer().errors("Paste"); - bv->buffer().markDirty(); - bv->cursor().finishUndo(); + lyx::dispatch( + FuncRequest(LFUN_COMMAND_ALTERNATIVES, + "selection-paste ; primary-selection-paste paragraph")); + cur.noUpdate(); break; case mouse_button::button3: { @@ -2218,6 +2214,10 @@ bool Text::getStatus(Cursor & cur, FuncRequest const & cmd, enable = cur.selection() || !theSelection().empty(); break; + case LFUN_SELECTION_PASTE: + enable = cap::selection(); + break; + case LFUN_PARAGRAPH_MOVE_UP: enable = cur.pit() > 0 && !cur.selection(); break; -- 2.39.2