1
mirror of https://invent.kde.org/network/falkon.git synced 2024-12-24 12:46:35 +01:00

[LocationBar][StatusBar] show precent decoded version of non-latin link and draw RTL path correctly.

- also fixed a compile issue
This commit is contained in:
S. Razi Alavizadeh 2013-07-05 02:51:07 +04:30
parent 973cb65349
commit 5d48edc7a3
4 changed files with 20 additions and 15 deletions

View File

@ -108,11 +108,19 @@ void LocationCompleterDelegate::paint(QPainter* painter, const QStyleOptionViewI
// Draw link
const int infoYPos = titleRect.bottom() + opt.fontMetrics.leading() + 2;
QRect linkRect(titleRect.x(), infoYPos, titleRect.width(), opt.fontMetrics.height());
const QByteArray &linkArray = index.data(Qt::DisplayRole).toByteArray();
// Let's assume that more than 500 characters won't fit in line on any display...
// Fixes performance when trying to get elidedText for a really long
// (length() > 1000000) urls - data: urls can get that long
const QString &linkUrl = index.data(Qt::DisplayRole).toString().left(500);
QString link(opt.fontMetrics.elidedText(linkUrl, Qt::ElideRight, linkRect.width()));
QString link;
if (!linkArray.startsWith("data") && !linkArray.startsWith("javascript")) {
link = QString::fromUtf8(QByteArray::fromPercentEncoding(linkArray)).left(500);
}
else {
link = QString::fromLatin1(linkArray.left(500));
}
link = opt.fontMetrics.elidedText(link, Qt::ElideRight, linkRect.width());
painter->setFont(opt.font);
TabPosition pos = index.data(LocationCompleterModel::TabPositionRole).value<TabPosition>();
if (m_drawSwitchToTab && pos.windowIndex != -1) {
@ -256,11 +264,6 @@ void LocationCompleterDelegate::drawHighlightedTextLine(const QRect &rect, const
}
}
// RTL Support
#define LRE QChar(0x202A)
#define RLE QChar(0x202B)
#define PDF QChar(0x202C)
void LocationCompleterDelegate::drawTextLine(const QRect &rect, QString text, QPainter* painter,
const QStyle* style, const QStyleOptionViewItemV4 &option,
const QPalette::ColorRole &role) const
@ -270,8 +273,9 @@ void LocationCompleterDelegate::drawTextLine(const QRect &rect, QString text, QP
Qt::LayoutDirection textDirection = text.isRightToLeft() ? Qt::RightToLeft : Qt::LeftToRight;
Qt::Alignment alignment = textDirection == direction ? Qt::AlignLeft : Qt::AlignRight;
text.isRightToLeft() ? text.prepend(RLE) : text.prepend(LRE);
text.append(PDF);
// Insert unicode control characters: prepend RLE or LRE and append (RLM or LRM)+PDF
text.isRightToLeft() ? text.prepend(QChar(0x202B)).append(0x200F) : text.prepend(QChar(0x202A)).append(0x200E);
text.append(QChar(0x202C));
style->drawItemText(painter, rect, Qt::TextSingleLine | alignment, option.palette, true, text, role);
}

View File

@ -756,6 +756,11 @@ void LocationBar::paintEvent(QPaintEvent* event)
currentRect.setX(currentRect.x() + hostWidth);
currentRect.setWidth(textRect.width() - currentRect.x() + textRect.x());
p.setPen(lightPen);
if (currentText.isRightToLeft()) {
// Insert unicode control characters: prepend LRE then append LRM+PDF
currentText.prepend(QChar(0x202A)).append(QChar(0x200E)).append(QChar(0x202C));
}
}
}

View File

@ -24,14 +24,12 @@
#include "qz_namespace.h"
#include <openssl/evp.h>
#include <QObject>
#include <QHash>
#include <QList>
class QT_QUPZILLA_EXPORT AesInterface : public QObject
{
Q_OBJECT
public:
static const int VERSION;
@ -43,9 +41,7 @@ public:
QByteArray encrypt(const QByteArray &plainData, const QByteArray &password);
QByteArray decrypt(const QByteArray &cipherData, const QByteArray &password);
static void encryptSomeData(const QByteArray &pass = QByteArray());
static QByteArray passwordToHash(const QString &masterPassword);
static QByteArray createRandomData(int length);
private:

View File

@ -198,7 +198,7 @@ void TabbedWebView::linkHovered(const QString &link, const QString &title, const
p_QupZilla->statusBarMessage()->clearMessage();
}
else {
p_QupZilla->statusBarMessage()->showMessage(link);
p_QupZilla->statusBarMessage()->showMessage(QString::fromUtf8(QByteArray::fromPercentEncoding(link.toUtf8())));
}
}
}