[kde-doc-english] [trojita] src/Gui: GUI: show the URL where a hyperlink points to in the status bar
Jan Kundrát
jkt at flaska.net
Tue Nov 27 19:43:39 UTC 2012
Git commit 7e9360d913a4ca1d5d3f4e7a98441f864bdbfe54 by Jan Kundrát.
Committed on 27/11/2012 at 20:40.
Pushed by jkt into branch 'master'.
GUI: show the URL where a hyperlink points to in the status bar
It is surprisingly hard to do this as a tool tip -- at least my attempts have
failed:
- Calling QWidget::setToolTip on the SImplePartWidget has no visible effect.
- Calling QToolTip::showText() indeed shows a tool tip, but it disappears after
less than a second (and there *was* an if-clause to not set that upon seeing
empty links).
-> Showing that in the status bar is good enough.
fixes #585
M +7 -0 src/Gui/MessageView.cpp
M +2 -0 src/Gui/MessageView.h
M +6 -0 src/Gui/SimplePartWidget.cpp
M +2 -0 src/Gui/SimplePartWidget.h
M +6 -0 src/Gui/Window.cpp
M +1 -0 src/Gui/Window.h
http://commits.kde.org/trojita/7e9360d913a4ca1d5d3f4e7a98441f864bdbfe54
diff --git a/src/Gui/MessageView.cpp b/src/Gui/MessageView.cpp
index f82e1e4..bc7da67 100644
--- a/src/Gui/MessageView.cpp
+++ b/src/Gui/MessageView.cpp
@@ -518,4 +518,11 @@ void MessageView::partContextMenuRequested(const QPoint &point)
}
}
+void MessageView::partLinkHovered(const QString &link, const QString &title, const QString &textContent)
+{
+ Q_UNUSED(title);
+ Q_UNUSED(textContent);
+ emit linkHovered(link);
+}
+
}
diff --git a/src/Gui/MessageView.h b/src/Gui/MessageView.h
index b4aa6f9..80c13a6 100644
--- a/src/Gui/MessageView.h
+++ b/src/Gui/MessageView.h
@@ -83,8 +83,10 @@ private slots:
void handleDataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight);
void headerLinkActivated(QString);
void partContextMenuRequested(const QPoint &point);
+ void partLinkHovered(const QString &link, const QString &title, const QString &textContent);
signals:
void messageChanged();
+ void linkHovered(const QString &url);
private:
bool eventFilter(QObject *object, QEvent *event);
Imap::Message::Envelope envelope() const;
diff --git a/src/Gui/SimplePartWidget.cpp b/src/Gui/SimplePartWidget.cpp
index dbeb7b7..774cd74 100644
--- a/src/Gui/SimplePartWidget.cpp
+++ b/src/Gui/SimplePartWidget.cpp
@@ -137,6 +137,12 @@ QList<QAction *> SimplePartWidget::contextMenuSpecificActions() const
void SimplePartWidget::connectGuiInteractionEvents(QObject *guiInteractionTarget)
{
connect(this, SIGNAL(customContextMenuRequested(QPoint)), guiInteractionTarget, SLOT(partContextMenuRequested(QPoint)));
+
+ // The targets expect the sender() of the signal to be a SimplePartWidget, not a QWebPage,
+ // which means we have to do this indirection
+ connect(page(), SIGNAL(linkHovered(QString,QString,QString)), this, SIGNAL(linkHovered(QString,QString,QString)));
+ connect(this, SIGNAL(linkHovered(QString,QString,QString)),
+ guiInteractionTarget, SLOT(partLinkHovered(QString,QString,QString)));
}
}
diff --git a/src/Gui/SimplePartWidget.h b/src/Gui/SimplePartWidget.h
index a1ce600..793eef6 100644
--- a/src/Gui/SimplePartWidget.h
+++ b/src/Gui/SimplePartWidget.h
@@ -61,6 +61,8 @@ private slots:
void slotTransferError(const QString &errorString);
void slotFileNameRequested(QString *fileName);
void slotMarkupPlainText();
+signals:
+ void linkHovered(const QString &link, const QString &title, const QString &textContent);
private:
QAction *saveAction;
Imap::Network::FileDownloadManager *fileDownloadManager;
diff --git a/src/Gui/Window.cpp b/src/Gui/Window.cpp
index a9a9b41..274826b 100644
--- a/src/Gui/Window.cpp
+++ b/src/Gui/Window.cpp
@@ -419,6 +419,7 @@ void MainWindow::createWidgets()
area->setWidget(msgView);
area->setWidgetResizable(true);
connect(msgView, SIGNAL(messageChanged()), this, SLOT(scrollMessageUp()));
+ connect(msgView, SIGNAL(linkHovered(QString)), this, SLOT(slotShowLinkTarget(QString)));
if (QSettings().value(Common::SettingsNames::appLoadHomepage, QVariant(true)).toBool() &&
!QSettings().value(Common::SettingsNames::imapStartOffline).toBool()) {
msgView->setHomepageUrl(QUrl(QString::fromUtf8("http://welcome.trojita.flaska.net/%1").arg(QCoreApplication::applicationVersion())));
@@ -1208,6 +1209,11 @@ void MainWindow::showConnectionStatus(QObject *parser, Imap::ConnectionState sta
statusBar()->showMessage(message, transient ? DURATION : 0);
}
+void MainWindow::slotShowLinkTarget(const QString &link)
+{
+ statusBar()->showMessage(tr("Link target: %1").arg(link));
+}
+
void MainWindow::slotShowAboutTrojita()
{
QMessageBox::about(this, trUtf8("About Trojitá"),
diff --git a/src/Gui/Window.h b/src/Gui/Window.h
index 3834fb3..2ac1b8d 100644
--- a/src/Gui/Window.h
+++ b/src/Gui/Window.h
@@ -124,6 +124,7 @@ private slots:
void updateMessageFlags(const QModelIndex &index);
void scrollMessageUp();
void showConnectionStatus(QObject *parser, Imap::ConnectionState state);
+ void slotShowLinkTarget(const QString &link);
void slotShowAboutTrojita();
void slotDonateToTrojita();
More information about the kde-doc-english
mailing list