From 9495ff665dff01a838304671232be40a3d5dca89 Mon Sep 17 00:00:00 2001 From: Juergen Spitzmueller Date: Wed, 26 Dec 2018 17:11:24 +0100 Subject: [PATCH] Make "paste recent" accessible from toolbar via button menu --- lib/ui/stdtoolbars.inc | 2 +- src/frontends/qt4/GuiToolbar.cpp | 31 ++++++++++++++++++++++++++++++- src/frontends/qt4/GuiToolbar.h | 1 + 3 files changed, 32 insertions(+), 2 deletions(-) diff --git a/lib/ui/stdtoolbars.inc b/lib/ui/stdtoolbars.inc index 412d5647f8..4d862d8387 100644 --- a/lib/ui/stdtoolbars.inc +++ b/lib/ui/stdtoolbars.inc @@ -79,7 +79,7 @@ ToolbarSet Item "Redo" "redo" Item "Cut" "cut" Item "Copy" "copy" - Item "Paste" "paste" + DynamicMenu "paste" "Paste" Item "Find and replace" "dialog-show findreplace" Item "Find and replace (advanced)" "dialog-toggle findreplaceadv" Item "Navigate back" "bookmark-goto 0" diff --git a/src/frontends/qt4/GuiToolbar.cpp b/src/frontends/qt4/GuiToolbar.cpp index ea2683b371..8966bcfdeb 100644 --- a/src/frontends/qt4/GuiToolbar.cpp +++ b/src/frontends/qt4/GuiToolbar.cpp @@ -22,6 +22,7 @@ #include "BufferParams.h" #include "BufferView.h" #include "Cursor.h" +#include "CutAndPaste.h" #include "FuncRequest.h" #include "FuncStatus.h" #include "GuiApplication.h" @@ -43,6 +44,7 @@ #include "support/convert.h" #include "support/debug.h" +#include "support/docstring_list.h" #include "support/gettext.h" #include "support/lstrings.h" @@ -321,7 +323,8 @@ bool DynamicMenuButton::isMenuType(string const & s) { return s == "dynamic-custom-insets" || s == "dynamic-char-styles" - || s == "dynamic-freefonts"; + || s == "dynamic-freefonts" + || s == "paste"; } @@ -385,6 +388,32 @@ void DynamicMenuButton::updateTriggered() } setPopupMode(QToolButton::DelayedPopup); setEnabled(lyx::getStatus(FuncRequest(LFUN_TEXTSTYLE_APPLY)).enabled()); + } else if (menutype == "paste") { + m->clear(); + docstring_list const sel = cap::availableSelections(&bv->buffer()); + + docstring_list::const_iterator cit = sel.begin(); + docstring_list::const_iterator end = sel.end(); + + Action * default_act = nullptr; + for (unsigned int index = 0; cit != end; ++cit, ++index) { + docstring const s = *cit; + FuncRequest func(LFUN_PASTE, convert(index), + FuncRequest::TOOLBAR); + docstring const lb = char_type('&') + convert(index) + + from_ascii(". ") + s ; + Action * act = new Action(func, QIcon(), toqstr(lb), toqstr(s), this); + m->addAction(act); + // The most recent one is the default + if (index == 0) + default_act = act; + } + Action * default_action = new Action(FuncRequest(LFUN_PASTE), + getIcon(FuncRequest(LFUN_PASTE), false), + qt_("Paste"), qt_("Paste"), this); + QToolButton::setDefaultAction(default_action); + setPopupMode(QToolButton::DelayedPopup); + setEnabled(lyx::getStatus(FuncRequest(LFUN_PASTE)).enabled()); } } diff --git a/src/frontends/qt4/GuiToolbar.h b/src/frontends/qt4/GuiToolbar.h index da09bbfbbf..8d82f538e3 100644 --- a/src/frontends/qt4/GuiToolbar.h +++ b/src/frontends/qt4/GuiToolbar.h @@ -87,6 +87,7 @@ protected Q_SLOTS: /// dynamic-custom-insets /// dynamic-char-styles /// dynamic-freefonts +/// paste /// To add a new one of these, you must add a routine, like /// loadFlexInsets, that will populate the menu, and call it from /// updateTriggered. Make sure to add the new type to isMenuType().