Git commit d42deaec263c1a0cd00d0391f0b75b48c3471b0d by Jan Kundrát. Committed on 05/02/2017 at 14:37. Pushed by gerrit into branch 'master'.
GUI: Extracting e-mail addresses from a message body Right now, we delegate link copying to WebKit, which means that it will use URLs like "mailto:[email protected]". That is suboptimal from the user's point of view; they typically just "want to have that e-mail address". This patch ensures that we do this fancy thing when the URL is really a simple one -- pointing to exactly one recipient. As a fallback option, all other cases are handled by the existing code which just copies the URL as-is. Please note that this does not fix the issue that the linked bugreport complained about -- the header widget with e-mail addresses is a QLabel, so we will have to do a slightly different dance for that. Change-Id: I930f4eecd291af643c736701849d4c92fc8fc43d CCBUG: 374830 M +18 -3 src/Gui/SimplePartWidget.cpp M +1 -0 src/Gui/SimplePartWidget.h https://commits.kde.org/trojita/d42deaec263c1a0cd00d0391f0b75b48c3471b0d diff --git a/src/Gui/SimplePartWidget.cpp b/src/Gui/SimplePartWidget.cpp index e9f85921..c2d6fd77 100644 --- a/src/Gui/SimplePartWidget.cpp +++ b/src/Gui/SimplePartWidget.cpp @@ -20,6 +20,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <QApplication> +#include <QClipboard> #include <QFileDialog> #include <QFontDatabase> #include <QMenu> @@ -30,6 +31,7 @@ #include "SimplePartWidget.h" #include "Common/MetaTypes.h" #include "Common/Paths.h" +#include "Composer/Mailto.h" #include "Gui/MessageView.h" // so that the compiler knows that it's a QObject #include "Gui/Util.h" #include "Imap/Encoders.h" @@ -85,6 +87,12 @@ SimplePartWidget::SimplePartWidget(QWidget *parent, Imap::Network::MsgPartNetAcc connect(m_findAction, &QAction::triggered, this, &SimplePartWidget::searchDialogRequested); addAction(m_findAction); + m_copyMail = new QAction(UiUtils::loadIcon(QStringLiteral("edit-copy")), tr("Copy e-mail address"), this); + connect(m_copyMail, &QAction::triggered, this, [this](){ + QGuiApplication::clipboard()->setText(m_copyMail->data().toString()); + }); + this->addAction(m_copyMail); + setContextMenuPolicy(Qt::CustomContextMenu); // It is actually OK to construct this widget without any connection to a messageView -- this is often used when @@ -170,10 +178,17 @@ void SimplePartWidget::buildContextMenu(const QPoint &point, QMenu &menu) const a = pageAction(QWebPage::SelectAll); a->setIcon(UiUtils::loadIcon(QStringLiteral("edit-select-all"))); menu.addAction(a); - if (!page()->mainFrame()->hitTestContent(point).linkUrl().isEmpty()) { + auto linkUrl = page()->mainFrame()->hitTestContent(point).linkUrl(); + if (!linkUrl.isEmpty()) { menu.addSeparator(); - a = pageAction(QWebPage::CopyLinkToClipboard); - a->setIcon(UiUtils::loadIcon(QStringLiteral("edit-copy"))); + auto oneMail = Composer::extractOneMailAddress(linkUrl); + if (!oneMail.isEmpty()) { + a = m_copyMail; + a->setData(oneMail); + } else { + a = pageAction(QWebPage::CopyLinkToClipboard); + a->setIcon(UiUtils::loadIcon(QStringLiteral("edit-copy"))); + } menu.addAction(a); } menu.addSeparator(); diff --git a/src/Gui/SimplePartWidget.h b/src/Gui/SimplePartWidget.h index d04370c6..6c7b9a08 100644 --- a/src/Gui/SimplePartWidget.h +++ b/src/Gui/SimplePartWidget.h @@ -78,6 +78,7 @@ private: QAction *m_savePart; QAction *m_saveMessage; QAction *m_findAction; + QAction *m_copyMail; MessageView *m_messageView; Imap::Network::MsgPartNetAccessManager *m_netAccessManager;
