[trojita] src/Gui: GUI: Clipboard copying of e-mail addresses from the header view
Jan Kundrát
null at kde.org
Mon Feb 13 00:08:39 UTC 2017
Git commit 434f677d4909e751ef59d2c8b5e2899b05eae022 by Jan Kundrát.
Committed on 06/02/2017 at 11:29.
Pushed by gerrit into branch 'master'.
GUI: Clipboard copying of e-mail addresses from the header view
Previously, the context menu offered some options for accessing the
QLabel (this class is actually just a pretty QLabel)'s text, for
selecting all of it, and copying stuff.
The most important, IMHO, is to have access to the actual e-mail address
(as requested by the associated bugreport), and to the human readable
text for the sake of completeness.
The code is still a tad inconsistent because the List-Post header for
indicating an active mailing list does not currently use the
OneEnvelopeAddress class. Mailing list addresses will therefore remain
unaffected by this patch; their copy action is still going to copy a
complete mailto: URL.
BUG: 374830
Change-Id: I4e515045d0241e4c1064389aa777f58e72c7c999
M +26 -2 src/Gui/OneEnvelopeAddress.cpp
M +2 -0 src/Gui/OneEnvelopeAddress.h
https://commits.kde.org/trojita/434f677d4909e751ef59d2c8b5e2899b05eae022
diff --git a/src/Gui/OneEnvelopeAddress.cpp b/src/Gui/OneEnvelopeAddress.cpp
index 922b0945..f0445ed4 100644
--- a/src/Gui/OneEnvelopeAddress.cpp
+++ b/src/Gui/OneEnvelopeAddress.cpp
@@ -20,15 +20,22 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include "OneEnvelopeAddress.h"
+
+#include <QClipboard>
+#include <QContextMenuEvent>
#include <QDesktopServices>
-#include <QHeaderView>
#include <QFontMetrics>
+#include <QGuiApplication>
+#include <QHeaderView>
+#include <QMenu>
#include <QUrlQuery>
+#include "Composer/Mailto.h"
#include "Gui/MessageView.h"
+#include "Gui/OneEnvelopeAddress.h"
#include "Gui/Util.h"
#include "Plugins/PluginManager.h"
#include "Plugins/AddressbookPlugin.h"
+#include "UiUtils/IconLoader.h"
namespace Gui {
@@ -127,4 +134,21 @@ void OneEnvelopeAddress::finishOnLinkHovered(const QStringList &matchingDisplayN
setToolTip(m_link + tr("<hr/><b>Address Book:</b><br/>") + identities);
}
+void OneEnvelopeAddress::contextMenuEvent(QContextMenuEvent *e)
+{
+ QScopedPointer<QMenu> menu(new QMenu(this));
+ // NOTE: when QT_VERSION >= QT_VERSION_CHECK(5,6,0), we can get rid of this verbose code and just call menu->addAction(...)
+ auto a = new QAction(UiUtils::loadIcon(QStringLiteral("edit-copy")), tr("Copy e-mail address"), menu.data());
+ connect(a, &QAction::triggered, this, [this](){
+ QGuiApplication::clipboard()->setText(Composer::extractOneMailAddress(m_address.asUrl()));
+ });
+ menu->addAction(a);
+ a = new QAction(tr("Copy text"), this);
+ connect(a, &QAction::triggered, this, [this]() {
+ QGuiApplication::clipboard()->setText(m_address.prettyName(Imap::Message::MailAddress::FORMAT_JUST_NAME));
+ });
+ menu->addAction(a);
+ menu->exec(e->globalPos());
+}
+
}
diff --git a/src/Gui/OneEnvelopeAddress.h b/src/Gui/OneEnvelopeAddress.h
index d8d1833d..3fab287d 100644
--- a/src/Gui/OneEnvelopeAddress.h
+++ b/src/Gui/OneEnvelopeAddress.h
@@ -48,6 +48,8 @@ public:
OneEnvelopeAddress(QWidget *parent, const Imap::Message::MailAddress &address, MessageView *messageView, const Position lastOneInRow);
+ virtual void contextMenuEvent(QContextMenuEvent *e) override;
+
private slots:
void onLinkHovered(const QString &target);
void finishOnLinkHovered(const QStringList &matchingDisplayNames);
More information about the kde-doc-english
mailing list