From d36a37a4a2e2fa889cf12d596258f9ba4dfcc5ed Mon Sep 17 00:00:00 2001 From: Daniel Albers Date: Thu, 8 Oct 2009 20:30:11 +0200 Subject: [PATCH] fix webpreview for urls with url-encoded chars MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Also switches argument of WebPreviewItem() and friends from QString to QUrl to make sure the caller takes care of the appropriate string conversion. Test case: http://de.wikipedia.org/wiki/München http://de.wikipedia.org/wiki/M%C3%BCnchen --- src/qtui/chatitem.cpp | 7 ++++--- src/qtui/chatscene.cpp | 4 ++-- src/qtui/chatscene.h | 4 ++-- src/qtui/webpreviewitem.cpp | 2 +- src/qtui/webpreviewitem.h | 2 +- 5 files changed, 10 insertions(+), 9 deletions(-) diff --git a/src/qtui/chatitem.cpp b/src/qtui/chatitem.cpp index e255d002..e3ab1abb 100644 --- a/src/qtui/chatitem.cpp +++ b/src/qtui/chatitem.cpp @@ -636,9 +636,10 @@ void ContentsChatItem::showWebPreview(const Clickable &click) { QPointF topLeft = scenePos() + QPointF(x, y); QRectF urlRect = QRectF(topLeft.x(), topLeft.y(), width, height); - QString url = data(ChatLineModel::DisplayRole).toString().mid(click.start(), click.length()); - if(!url.contains("://")) - url = "http://" + url; + QString urlstr = data(ChatLineModel::DisplayRole).toString().mid(click.start(), click.length()); + if(!urlstr.contains("://")) + urlstr= "http://" + urlstr; + QUrl url = QUrl::fromEncoded(urlstr.toUtf8(), QUrl::TolerantMode); chatScene()->loadWebPreview(this, url, urlRect); #endif } diff --git a/src/qtui/chatscene.cpp b/src/qtui/chatscene.cpp index 411cdb85..86a461bb 100644 --- a/src/qtui/chatscene.cpp +++ b/src/qtui/chatscene.cpp @@ -882,7 +882,7 @@ bool ChatScene::event(QEvent *e) { // Webkit Only stuff // ======================================== #ifdef HAVE_WEBKIT -void ChatScene::loadWebPreview(ChatItem *parentItem, const QString &url, const QRectF &urlRect) { +void ChatScene::loadWebPreview(ChatItem *parentItem, const QUrl &url, const QRectF &urlRect) { if(!_showWebPreview) return; @@ -967,7 +967,7 @@ void ChatScene::webPreviewNextStep() { webPreview.previewItem = 0; } webPreview.parentItem = 0; - webPreview.url = QString(); + webPreview.url = QUrl(); webPreview.urlRect = QRectF(); webPreview.previewState = WebPreview::NoPreview; } diff --git a/src/qtui/chatscene.h b/src/qtui/chatscene.h index 6595ea4f..7bf5be3a 100644 --- a/src/qtui/chatscene.h +++ b/src/qtui/chatscene.h @@ -122,7 +122,7 @@ public: void requestBacklog(); #ifdef HAVE_WEBKIT - void loadWebPreview(ChatItem *parentItem, const QString &url, const QRectF &urlRect); + void loadWebPreview(ChatItem *parentItem, const QUrl &url, const QRectF &urlRect); void clearWebPreview(ChatItem *parentItem = 0); #endif @@ -203,7 +203,7 @@ private: }; ChatItem *parentItem; QGraphicsItem *previewItem; - QString url; + QUrl url; QRectF urlRect; PreviewState previewState; QTimer timer; diff --git a/src/qtui/webpreviewitem.cpp b/src/qtui/webpreviewitem.cpp index 8f49032b..45c080cd 100644 --- a/src/qtui/webpreviewitem.cpp +++ b/src/qtui/webpreviewitem.cpp @@ -26,7 +26,7 @@ #include #include -WebPreviewItem::WebPreviewItem(const QString &url) +WebPreviewItem::WebPreviewItem(const QUrl &url) : QGraphicsItem(0), // needs to be a top level item as we otherwise cannot guarantee that it's on top of other chatlines _boundingRect(0, 0, 400, 300) { diff --git a/src/qtui/webpreviewitem.h b/src/qtui/webpreviewitem.h index 6708125f..c5bcbb66 100644 --- a/src/qtui/webpreviewitem.h +++ b/src/qtui/webpreviewitem.h @@ -27,7 +27,7 @@ class WebPreviewItem : public QGraphicsItem { public: - WebPreviewItem(const QString &url); + WebPreviewItem(const QUrl &url); virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0); virtual inline QRectF boundingRect() const { return _boundingRect; } -- 2.20.1