Diff
Modified: trunk/Source/WebKit/qt/ChangeLog (118761 => 118762)
--- trunk/Source/WebKit/qt/ChangeLog 2012-05-29 12:25:07 UTC (rev 118761)
+++ trunk/Source/WebKit/qt/ChangeLog 2012-05-29 13:17:23 UTC (rev 118762)
@@ -1,3 +1,22 @@
+2012-05-29 Tor Arne Vestbø <[email protected]>
+
+ [Qt] Sync up favicon-implementation with WebView url changes in r118158
+
+ https://bugs.webkit.org/show_bug.cgi?id=87133
+
+ We now base64-encode the page url in the image-provider url, so that any
+ normalization done by QUrl will not mess up the page-url. The logic of
+ creating and parsing the provider-url has been moved into the image
+ provider, to keep it in one place.
+
+ We were also releasing icons (even ones we hadn't retained), which we can't
+ do since we don't know when the icon url is no longer in use.
+
+ Reviewed-by Simon Hausmann.
+
+ * declarative/plugin.cpp:
+ * declarative/public.pri:
+
2012-05-25 Jesus Sanchez-Palencia <[email protected]>
WebKitTestRunner needs to support layoutTestController.setJavaScriptProfilingEnabled
Modified: trunk/Source/WebKit/qt/declarative/plugin.cpp (118761 => 118762)
--- trunk/Source/WebKit/qt/declarative/plugin.cpp 2012-05-29 12:25:07 UTC (rev 118761)
+++ trunk/Source/WebKit/qt/declarative/plugin.cpp 2012-05-29 13:17:23 UTC (rev 118762)
@@ -17,6 +17,8 @@
Boston, MA 02110-1301, USA.
*/
+#include "config.h"
+
#include "qglobal.h"
#if defined(HAVE_QQUICK1)
Modified: trunk/Source/WebKit/qt/declarative/public.pri (118761 => 118762)
--- trunk/Source/WebKit/qt/declarative/public.pri 2012-05-29 12:25:07 UTC (rev 118761)
+++ trunk/Source/WebKit/qt/declarative/public.pri 2012-05-29 13:17:23 UTC (rev 118762)
@@ -34,6 +34,8 @@
HEADERS += qdeclarativewebview_p.h
}
+WEBKIT += wtf
+
DESTDIR = $${ROOT_BUILD_DIR}/imports/$${TARGET.module_name}
CONFIG += rpath
Modified: trunk/Source/WebKit2/ChangeLog (118761 => 118762)
--- trunk/Source/WebKit2/ChangeLog 2012-05-29 12:25:07 UTC (rev 118761)
+++ trunk/Source/WebKit2/ChangeLog 2012-05-29 13:17:23 UTC (rev 118762)
@@ -1,3 +1,43 @@
+2012-05-29 Tor Arne Vestbø <[email protected]>
+
+ [Qt] Sync up favicon-implementation with WebView url changes in r118158
+
+ https://bugs.webkit.org/show_bug.cgi?id=87133
+
+ We now base64-encode the page url in the image-provider url, so that any
+ normalization done by QUrl will not mess up the page-url. The logic of
+ creating and parsing the provider-url has been moved into the image
+ provider, to keep it in one place.
+
+ We were also releasing icons (even ones we hadn't retained), which we can't
+ do since we don't know when the icon url is no longer in use.
+
+ Reviewed-by Simon Hausmann.
+
+ * UIProcess/API/qt/qquickwebview.cpp:
+ (QQuickWebViewPrivate::initialize):
+ (QQuickWebViewPrivate::loadProgressDidChange):
+ (QQuickWebViewPrivate::_q_onUrlChanged):
+ (QQuickWebViewPrivate::_q_onIconChangedForPageURL):
+ (QQuickWebViewPrivate::updateIcon):
+ (QQuickWebView::icon):
+ * UIProcess/API/qt/qquickwebview_p.h:
+ * UIProcess/API/qt/qquickwebview_p_p.h:
+ (QQuickWebViewPrivate):
+ * UIProcess/API/qt/qwebiconimageprovider.cpp:
+ (QWebIconImageProvider::iconURLForPageURLInContext):
+ (QWebIconImageProvider::requestImage):
+ * UIProcess/API/qt/qwebiconimageprovider_p.h:
+ (WebKit):
+ * UIProcess/API/qt/tests/qmltests/WebView/tst_favIconLoad.qml:
+ * UIProcess/qt/QtWebIconDatabaseClient.cpp:
+ (WebKit::QtWebIconDatabaseClient::didChangeIconForPageURL):
+ (WebKit::QtWebIconDatabaseClient::iconForPageURL):
+ (WebKit):
+ (WebKit::QtWebIconDatabaseClient::iconImageForPageURL):
+ * UIProcess/qt/QtWebIconDatabaseClient.h:
+ (QtWebIconDatabaseClient):
+
2012-05-29 Kenneth Rohde Christiansen <[email protected]>
[Qt][WK2] Fix failing qmltests::FitToView::test_basic()
Modified: trunk/Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp (118761 => 118762)
--- trunk/Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp 2012-05-29 12:25:07 UTC (rev 118761)
+++ trunk/Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp 2012-05-29 13:17:23 UTC (rev 118762)
@@ -44,6 +44,7 @@
#include "qquickwebpage_p_p.h"
#include "qquickwebview_p_p.h"
#include "qwebdownloaditem_p_p.h"
+#include "qwebiconimageprovider_p.h"
#include "qwebkittest_p.h"
#include "qwebloadrequest_p.h"
#include "qwebnavigationhistory_p.h"
@@ -56,6 +57,7 @@
#include <QDateTime>
#include <QtCore/QFile>
#include <QtQml/QJSValue>
+#include <QtQuick/QQuickView>
#include <WKOpenPanelResultListener.h>
#include <WKSerializedScriptValue.h>
#include <WebCore/IntPoint.h>
@@ -305,7 +307,7 @@
navigationHistory = adoptPtr(QWebNavigationHistoryPrivate::createHistory(toAPI(webPageProxy.get())));
QtWebIconDatabaseClient* iconDatabase = context->iconDatabase();
- QObject::connect(iconDatabase, SIGNAL(iconChangedForPageURL(QUrl, QUrl)), q_ptr, SLOT(_q_onIconChangedForPageURL(QUrl, QUrl)));
+ QObject::connect(iconDatabase, SIGNAL(iconChangedForPageURL(QString)), q_ptr, SLOT(_q_onIconChangedForPageURL(QString)));
// Any page setting should preferrable be set before creating the page.
webPageProxy->pageGroup()->preferences()->setAcceleratedCompositingEnabled(true);
@@ -375,9 +377,6 @@
{
Q_Q(QQuickWebView);
- if (!loadProgress)
- setIcon(QUrl());
-
m_loadProgress = loadProgress;
emit q->loadProgressChanged();
@@ -420,16 +419,6 @@
q->page()->update();
}
-void QQuickWebViewPrivate::_q_onIconChangedForPageURL(const QUrl& pageURL, const QUrl& iconURL)
-{
- Q_Q(QQuickWebView);
-
- if (q->url() != pageURL)
- return;
-
- setIcon(iconURL);
-}
-
void QQuickWebViewPrivate::processDidCrash()
{
Q_Q(QQuickWebView);
@@ -483,8 +472,38 @@
void QQuickWebViewPrivate::_q_onUrlChanged()
{
+ updateIcon();
+}
+
+void QQuickWebViewPrivate::_q_onIconChangedForPageURL(const QString& pageUrl)
+{
+ if (pageUrl != QString(m_currentUrl))
+ return;
+
+ updateIcon();
+}
+
+/* Called either when the url changes, or when the icon for the current page changes */
+void QQuickWebViewPrivate::updateIcon()
+{
Q_Q(QQuickWebView);
- context->iconDatabase()->requestIconForPageURL(q->url());
+
+ QQuickView* view = qobject_cast<QQuickView*>(q->canvas());
+ if (!view)
+ return;
+
+ QWebIconImageProvider* provider = static_cast<QWebIconImageProvider*>(
+ view->engine()->imageProvider(QWebIconImageProvider::identifier()));
+ if (!provider)
+ return;
+
+ WTF::String iconUrl = provider->iconURLForPageURLInContext(m_currentUrl, context.get());
+
+ if (iconUrl == m_iconUrl)
+ return;
+
+ m_iconUrl = iconUrl;
+ emit q->iconChanged();
}
void QQuickWebViewPrivate::_q_onReceivedResponseFromDownload(QWebDownloadItem* downloadItem)
@@ -644,31 +663,6 @@
attached->setView(q);
}
-void QQuickWebViewPrivate::setIcon(const QUrl& iconURL)
-{
- Q_Q(QQuickWebView);
- if (m_iconURL == iconURL)
- return;
-
- if (!webPageProxy->mainFrame())
- return;
-
- String oldPageURL = QUrl::fromPercentEncoding(m_iconURL.encodedFragment());
- String newPageURL = webPageProxy->mainFrame()->url();
-
- if (oldPageURL != newPageURL) {
- QtWebIconDatabaseClient* iconDatabase = context->iconDatabase();
- if (!oldPageURL.isEmpty())
- iconDatabase->releaseIconForPageURL(oldPageURL);
-
- if (!newPageURL.isEmpty())
- iconDatabase->retainIconForPageURL(newPageURL);
- }
-
- m_iconURL = iconURL;
- emit q->iconChanged();
-}
-
bool QQuickWebViewPrivate::navigatorQtObjectEnabled() const
{
return m_navigatorQtObjectEnabled;
@@ -1561,7 +1555,7 @@
QUrl QQuickWebView::icon() const
{
Q_D(const QQuickWebView);
- return d->m_iconURL;
+ return QUrl(d->m_iconUrl);
}
/*!
Modified: trunk/Source/WebKit2/UIProcess/API/qt/qquickwebview_p.h (118761 => 118762)
--- trunk/Source/WebKit2/UIProcess/API/qt/qquickwebview_p.h 2012-05-29 12:25:07 UTC (rev 118761)
+++ trunk/Source/WebKit2/UIProcess/API/qt/qquickwebview_p.h 2012-05-29 13:17:23 UTC (rev 118762)
@@ -212,7 +212,7 @@
Q_PRIVATE_SLOT(d_func(), void _q_onVisibleChanged());
Q_PRIVATE_SLOT(d_func(), void _q_onUrlChanged());
Q_PRIVATE_SLOT(d_func(), void _q_onReceivedResponseFromDownload(QWebDownloadItem*));
- Q_PRIVATE_SLOT(d_func(), void _q_onIconChangedForPageURL(const QUrl&, const QUrl&));
+ Q_PRIVATE_SLOT(d_func(), void _q_onIconChangedForPageURL(const QString&));
// Hides QObject::d_ptr allowing us to use the convenience macros.
QScopedPointer<QQuickWebViewPrivate> d_ptr;
QQuickWebViewExperimental* m_experimental;
Modified: trunk/Source/WebKit2/UIProcess/API/qt/qquickwebview_p_p.h (118761 => 118762)
--- trunk/Source/WebKit2/UIProcess/API/qt/qquickwebview_p_p.h 2012-05-29 12:25:07 UTC (rev 118761)
+++ trunk/Source/WebKit2/UIProcess/API/qt/qquickwebview_p_p.h 2012-05-29 13:17:23 UTC (rev 118762)
@@ -103,7 +103,7 @@
void _q_onVisibleChanged();
void _q_onUrlChanged();
void _q_onReceivedResponseFromDownload(QWebDownloadItem*);
- void _q_onIconChangedForPageURL(const QUrl& pageURL, const QUrl& iconURLString);
+ void _q_onIconChangedForPageURL(const QString&);
void chooseFiles(WKOpenPanelResultListenerRef, const QStringList& selectedFileNames, WebKit::QtWebPageUIClient::FileChooserType);
quint64 exceededDatabaseQuota(const QString& databaseName, const QString& displayName, WKSecurityOriginRef securityOrigin, quint64 currentQuota, quint64 currentOriginUsage, quint64 currentDatabaseUsage, quint64 expectedUsage);
@@ -118,7 +118,6 @@
void setRenderToOffscreenBuffer(bool enable) { m_renderToOffscreenBuffer = enable; }
void setTransparentBackground(bool);
void addAttachedPropertyTo(QObject*);
- void setIcon(const QUrl&);
bool navigatorQtObjectEnabled() const;
bool renderToOffscreenBuffer() const { return m_renderToOffscreenBuffer; }
@@ -133,6 +132,8 @@
void setDialogActive(bool active) { m_dialogActive = active; }
+ void updateIcon();
+
// PageClient.
WebCore::IntSize viewSize() const;
void didReceiveMessageFromNavigatorQtObject(const String& message);
@@ -200,7 +201,7 @@
bool m_renderToOffscreenBuffer;
bool m_dialogActive;
bool m_allowAnyHTTPSCertificateForLocalHost;
- QUrl m_iconURL;
+ WTF::String m_iconUrl;
int m_loadProgress;
WTF::String m_currentUrl;
};
Modified: trunk/Source/WebKit2/UIProcess/API/qt/qwebiconimageprovider.cpp (118761 => 118762)
--- trunk/Source/WebKit2/UIProcess/API/qt/qwebiconimageprovider.cpp 2012-05-29 12:25:07 UTC (rev 118761)
+++ trunk/Source/WebKit2/UIProcess/API/qt/qwebiconimageprovider.cpp 2012-05-29 13:17:23 UTC (rev 118762)
@@ -24,6 +24,7 @@
#include "QtWebIconDatabaseClient.h"
#include <QtCore/QUrl>
#include <QtGui/QImage>
+#include <wtf/text/StringHash.h>
#include <wtf/text/WTFString.h>
using namespace WebKit;
@@ -37,24 +38,52 @@
{
}
+WTF::String QWebIconImageProvider::iconURLForPageURLInContext(const WTF::String &pageURL, QtWebContext* context)
+{
+ QtWebIconDatabaseClient* iconDatabase = context->iconDatabase();
+ WTF::String iconURL = iconDatabase->iconForPageURL(pageURL);
+
+ if (iconURL.isEmpty())
+ return String();
+
+ QUrl url;
+ url.setScheme(QStringLiteral("image"));
+ url.setHost(QWebIconImageProvider::identifier());
+
+ QString path;
+ path.append(QLatin1Char('/'));
+ path.append(QString::number(context->contextID()));
+ path.append(QLatin1Char('/'));
+ path.append(QString::number(WTF::StringHash::hash(iconURL)));
+ url.setPath(path);
+
+ // FIXME: Use QUrl::DecodedMode when landed in Qt
+ url.setFragment(QString::fromLatin1(QByteArray(QString(pageURL).toUtf8()).toBase64()));
+
+ // FIXME: We can't know when the icon url is no longer in use,
+ // so we never release these icons. At some point we might want
+ // to introduce expiry of icons to elevate this issue.
+ iconDatabase->retainIconForPageURL(pageURL);
+
+ return url.toString(QUrl::FullyEncoded);
+}
+
QImage QWebIconImageProvider::requestImage(const QString& id, QSize* size, const QSize& requestedSize)
{
- QString decodedIconUrl = id;
- decodedIconUrl.remove(0, decodedIconUrl.indexOf('#') + 1);
- String pageURL = QString::fromUtf8(QUrl(decodedIconUrl).toEncoded());
-
// The string identifier has the leading image://webicon/ already stripped, so we just
// need to truncate from the first slash to get the context id.
- QString contextIDAsString = id;
- contextIDAsString.truncate(contextIDAsString.indexOf(QLatin1Char('/')));
+ QString contextIDString = id.left(id.indexOf(QLatin1Char('/')));
bool ok = false;
- uint64_t contextId = contextIDAsString.toUInt(&ok);
+ uint64_t contextId = contextIDString.toUInt(&ok);
if (!ok)
return QImage();
+
QtWebContext* context = QtWebContext::contextByID(contextId);
if (!context)
return QImage();
+ QString pageURL = QString::fromUtf8(QByteArray::fromBase64(id.midRef(id.indexOf('#') + 1).toLatin1()));
+
QtWebIconDatabaseClient* iconDatabase = context->iconDatabase();
QImage icon = requestedSize.isValid() ? iconDatabase->iconImageForPageURL(pageURL, requestedSize) : iconDatabase->iconImageForPageURL(pageURL);
ASSERT(!icon.isNull());
Modified: trunk/Source/WebKit2/UIProcess/API/qt/qwebiconimageprovider_p.h (118761 => 118762)
--- trunk/Source/WebKit2/UIProcess/API/qt/qwebiconimageprovider_p.h 2012-05-29 12:25:07 UTC (rev 118761)
+++ trunk/Source/WebKit2/UIProcess/API/qt/qwebiconimageprovider_p.h 2012-05-29 13:17:23 UTC (rev 118762)
@@ -21,13 +21,23 @@
#define qwebiconimageprovider_p_h
#include "qwebkitglobal.h"
+#include <QString>
#include <QtQuick/QQuickImageProvider>
+#include <wtf/text/WTFString.h>
+namespace WebKit {
+ class QtWebContext;
+}
+
class QWEBKIT_EXPORT QWebIconImageProvider : public QQuickImageProvider {
public:
QWebIconImageProvider();
~QWebIconImageProvider();
- QImage requestImage(const QString& id, QSize* size, const QSize& requestedSize);
+
+ static QString identifier() { return QStringLiteral("webicon"); }
+
+ WTF::String iconURLForPageURLInContext(const WTF::String& pageURL, WebKit::QtWebContext* context);
+ virtual QImage requestImage(const QString& id, QSize* size, const QSize& requestedSize);
};
#endif
Modified: trunk/Source/WebKit2/UIProcess/API/qt/tests/qmltests/WebView/tst_favIconLoad.qml (118761 => 118762)
--- trunk/Source/WebKit2/UIProcess/API/qt/tests/qmltests/WebView/tst_favIconLoad.qml 2012-05-29 12:25:07 UTC (rev 118761)
+++ trunk/Source/WebKit2/UIProcess/API/qt/tests/qmltests/WebView/tst_favIconLoad.qml 2012-05-29 13:17:23 UTC (rev 118762)
@@ -20,6 +20,7 @@
TestCase {
id: test
name: "WebViewLoadFavIcon"
+ when: windowShown
function init() {
if (webView.icon != '') {
@@ -36,7 +37,6 @@
var url = ""
webView.url = ""
verify(webView.waitForLoadSucceeded())
- expectFail("", "https://bugs.webkit.org/show_bug.cgi?id=87133")
compare(spy.count, 1)
compare(favicon.width, 48)
compare(favicon.height, 48)
@@ -47,7 +47,6 @@
var url = "" should work with#whitespace!")
webView.url = ""
verify(webView.waitForLoadSucceeded())
- expectFail("", "https://bugs.webkit.org/show_bug.cgi?id=87133")
compare(spy.count, 1)
compare(favicon.width, 16)
compare(favicon.height, 16)
Modified: trunk/Source/WebKit2/UIProcess/qt/QtWebIconDatabaseClient.cpp (118761 => 118762)
--- trunk/Source/WebKit2/UIProcess/qt/QtWebIconDatabaseClient.cpp 2012-05-29 12:25:07 UTC (rev 118761)
+++ trunk/Source/WebKit2/UIProcess/qt/QtWebIconDatabaseClient.cpp 2012-05-29 13:17:23 UTC (rev 118762)
@@ -62,14 +62,30 @@
WKIconDatabaseSetIconDatabaseClient(toAPI(m_iconDatabase.get()), 0);
}
-void QtWebIconDatabaseClient::didChangeIconForPageURL(WKIconDatabaseRef iconDatabase, WKURLRef pageURL, const void* clientInfo)
+void QtWebIconDatabaseClient::didChangeIconForPageURL(WKIconDatabaseRef, WKURLRef pageURL, const void* clientInfo)
{
- QUrl qUrl = WKURLCopyQUrl(pageURL);
- toQtWebIconDatabaseClient(clientInfo)->requestIconForPageURL(qUrl);
+ emit toQtWebIconDatabaseClient(clientInfo)->iconChangedForPageURL(toImpl(pageURL)->string());
}
-QImage QtWebIconDatabaseClient::iconImageForPageURL(const String& pageURL, const QSize& iconSize)
+WTF::String QtWebIconDatabaseClient::iconForPageURL(const WTF::String& pageURL)
{
+ String iconURL;
+ m_iconDatabase->synchronousIconURLForPageURL(pageURL, iconURL);
+
+ if (iconURL.isEmpty())
+ return String();
+
+ // Verify that the image data is actually available before reporting back
+ // a url, since clients assume that the url can be used directly.
+ WebCore::Image* iconImage = m_iconDatabase->imageForPageURL(pageURL);
+ if (!iconImage || iconImage->isNull())
+ return String();
+
+ return iconURL;
+}
+
+QImage QtWebIconDatabaseClient::iconImageForPageURL(const WTF::String& pageURL, const QSize& iconSize)
+{
MutexLocker locker(m_imageLock);
WebCore::IntSize size(iconSize.width(), iconSize.height());
@@ -84,33 +100,6 @@
return nativeImage->toImage();
}
-unsigned QtWebIconDatabaseClient::iconURLHashForPageURL(const String& pageURL)
-{
- String iconURL;
- m_iconDatabase->synchronousIconURLForPageURL(pageURL, iconURL);
- return StringHash::hash(iconURL);
-}
-
-void QtWebIconDatabaseClient::requestIconForPageURL(const QUrl& pageURL)
-{
- String pageURLString = WebCore::KURL(pageURL).string();
- if (iconImageForPageURL(pageURLString).isNull())
- return;
-
- unsigned iconID = iconURLHashForPageURL(pageURLString);
- QUrl url;
- url.setScheme(QStringLiteral("image"));
- url.setHost(QStringLiteral("webicon"));
- QString path;
- path.append(QLatin1Char('/'));
- path.append(QString::number(m_contextId));
- path.append(QLatin1Char('/'));
- path.append(QString::number(iconID));
- url.setPath(path);
- url.setEncodedFragment(pageURL.toEncoded());
- emit iconChangedForPageURL(pageURL, url);
-}
-
void QtWebIconDatabaseClient::retainIconForPageURL(const String& pageURL)
{
m_iconDatabase->retainIconForPageURL(pageURL);
Modified: trunk/Source/WebKit2/UIProcess/qt/QtWebIconDatabaseClient.h (118761 => 118762)
--- trunk/Source/WebKit2/UIProcess/qt/QtWebIconDatabaseClient.h 2012-05-29 12:25:07 UTC (rev 118761)
+++ trunk/Source/WebKit2/UIProcess/qt/QtWebIconDatabaseClient.h 2012-05-29 13:17:23 UTC (rev 118762)
@@ -49,18 +49,16 @@
QtWebIconDatabaseClient(QtWebContext*);
~QtWebIconDatabaseClient();
+ WTF::String iconForPageURL(const WTF::String& pageURL);
QImage iconImageForPageURL(const WTF::String& pageURL, const QSize& iconSize = QSize(32, 32));
+
void retainIconForPageURL(const WTF::String&);
void releaseIconForPageURL(const WTF::String&);
-public Q_SLOTS:
- void requestIconForPageURL(const QUrl&);
-
public:
- Q_SIGNAL void iconChangedForPageURL(const QUrl& pageURL, const QUrl& iconURL);
+ Q_SIGNAL void iconChangedForPageURL(const QString& pageURL);
private:
- unsigned iconURLHashForPageURL(const WTF::String&);
static void didChangeIconForPageURL(WKIconDatabaseRef, WKURLRef pageURL, const void* clientInfo);
uint64_t m_contextId;
RefPtr<WebKit::WebIconDatabase> m_iconDatabase;
Modified: trunk/Tools/ChangeLog (118761 => 118762)
--- trunk/Tools/ChangeLog 2012-05-29 12:25:07 UTC (rev 118761)
+++ trunk/Tools/ChangeLog 2012-05-29 13:17:23 UTC (rev 118762)
@@ -1,3 +1,22 @@
+2012-05-29 Tor Arne Vestbø <[email protected]>
+
+ [Qt] Sync up favicon-implementation with WebView url changes in r118158
+
+ https://bugs.webkit.org/show_bug.cgi?id=87133
+
+ We now base64-encode the page url in the image-provider url, so that any
+ normalization done by QUrl will not mess up the page-url. The logic of
+ creating and parsing the provider-url has been moved into the image
+ provider, to keep it in one place.
+
+ We were also releasing icons (even ones we hadn't retained), which we can't
+ do since we don't know when the icon url is no longer in use.
+
+ Reviewed-by Simon Hausmann.
+
+ * MiniBrowser/qt/icons/favicon.png:
+ * MiniBrowser/qt/qml/BrowserWindow.qml:
+
2012-05-29 Mikhail Pozdnyakov <[email protected]>
[EFL] Refactoring. Get rid of unnecessary singleCharacterString() function
Modified: trunk/Tools/MiniBrowser/qt/icons/favicon.png (118761 => 118762)
--- trunk/Tools/MiniBrowser/qt/icons/favicon.png 2012-05-29 12:25:07 UTC (rev 118761)
+++ trunk/Tools/MiniBrowser/qt/icons/favicon.png 2012-05-29 13:17:23 UTC (rev 118762)
@@ -1,10 +1,11 @@
\x89PNG
-IHDR \xF3\xFFa sRGB \xAE\xCE\xE9 5IDAT8O\xC1\xCDOg \xC0\xE1\xDF\xFB\xCE;3;\xB0\xBB\x8B\x82a-,آЀ\x9A4M\x8C1\xFC
-\xBD\xD3\xF4\xE6\xC54=\xF4(\xA7\x9E{\xD5CϽ\x9B\xDA\xDA\xC6xkRS\x91Va\x81\x85\x95ewYvw\xBE\xE7\x9D>\x8F \xF8b}\xFD\xB1;\xEB>4\x93, Fv\xCE$\xA5\xEA%\xC6.\xAD\xD3c\xB4R\x98\xA6\xCDI\xA3y\xD2m\x9D=}\xFE\xE2\xC5c\xE3\xD17_o;\xADo\xF33\xD3$Ba\x8D9F\xA5j\x99\xF2T\x99\x8F?Y\xE1\xFA\x8De&+\x94e\x81eP\xAEVG\x8Dƭg\xBF\xFD"\x94!\xE4w\xF9\xE9"Q\xEAS\x9E\xA9\x91zC\xF2n\x81\x99\xDA<\x8B\xF5:\x96\xB2(
-X\xB6\x8DE\x84i\x82\x9F\xC5\x8B.Q\xEA?4\xA6\xA4ܨ.-1^,!\x85\x8DmY\xDD
-ss\xCCL\xCD \xA5B\x92\x9Cm#\xD0\xD8}\x83N%\xA14\x91"\x97G\xAA1\xC6\xDD
-\x86Д\x8AE\xE2T\x93\x861\xCDmZ\xDDs,g\x9CB~\x82re\x8A\xF9\x8F\xAE\x8DR"\xAFO\xBE\xBC\x802\xC3Q\x80A՝\xA2\xD7\xEE\xF0\xEE`\x9F\x9D\xC6Zgi\xC6\xCD\xD5O\xB9w\xE7ǭO\xFF?Έ\xB4C\xDC\xDCFIS\x90\x86)\xAFv6I\xFB\xB3\xF5k\xB8\xE5+LLH\x8EN\x80\x84\xBD\xBD]\xFE\xFA\xF3.<\x8FJ)\x8762B\x82,\xA1\x8C\x9CC(4\x93\x93\xD7\xEA\xAC.\xDF`\xFB\xED.\xAF\xFF}\xC9x\xC1!\xF1\xCF\xE3\xF3\xDB\xCBt:]Z\xDDRj~L\x90j\xA4mf䢄|\xCE\x9D>\x8Bs5\x946PA\x8A$Òs\xB35\xD6\xEF\xDE%\xF2\xFA\x888Ò \xFDă\xFB\xF7\xB3_}If\xFC\xBD\xB9\xC9\xCA\xF2uʓl\xDB&M\x92$BA\xC6\xF4r\xB6I\xE0y\xFC\xFC\xEB3\xDEno\xA3z\xBDq\x9AQ\xCA\xE7z#\x82 \xCB2\x94\x92ĉf\xE7\xFD;\xBA\xDDs\x82 \x9A4\x8C\xB8\xB9\xBAJGd\xA9\x811[\x9B\xDFh~8\xA6Xȳ\xDF<\xC0Tn\xD9%\xE7\xD8l\xBD\xDEb8\x91y;1He\xD2\xEEwh\x9E\x9C1\xE8\xF5P\x91>\xA7wf\xF1\xF2\xBFW$I\xC6i\xB7\x87\xDBja\xDB\xA9\x86K\x97\xA7\xB1\x95I0\x8CH\xA4\xC62\xE0\xF4\xAC\xCD\xC0\xBF@\xEB\xA5\xCC
-\xB9BӴ\xB7\xC7hv:ę\xA6\xDFp\xD4j"\x84 2S\x91D\x9A\xAE7\xA0\xDF\xEB\xF7\x94\xED2\xC6Օ\xDB"\xD0\xAB\x97\xA7A\xA7\xBC?\xD8'\xC9\xE0\xB4\xDDa\xE8\x87\\x87$:\xA3X,\xE2NN\xB0wx\x88?
-\xB9"K\x93O\x8Cƛ\xAD\xE7kk\x9F\xCD,\xD5k\xB7\xEAu:\x9D6\x83\xFE\x91\xC3$\xD6 i\x83a\xC8I\xE7\x9C8\xE5\xF9TQO\xBE\xFF\xE9\xC7\xFE.\x85Z^\xE9- IEND\xAEB`\x82
\ No newline at end of file
+IHDR \xF3\xFFa pHYs \x9A\x9C \xE0IDAT8\x8D\xA5\x93\xCBk\\xC6\xF7\xCE}\xCCͽ3\xF753\xA9tJ^\x85D\x82A\xACA\xA2\xC5EBK\xFDܸ\xAFB6\x91\x82\xE0? \xB8Q
+\xBAjQ\x83\x94\xD42\xA6\xA1\xB1M\xE2\x90Hfl2\x9Df\x9CW2\x99;\xF7\xE5B\xADK\xFD\xE0l\x87\x8F\xEFw8G\x88\xE3\x98\xFF#\xE9ߍW^{gFQ\xDF\xEC\xF9'\xF3ZR\x9B\xF0<o\xD3H\xEA7\x85\xFE\xE0\xF3k\xD7>\xB8\xFB\xCFy\xE1\xAFsss\xF2\x83֩KųS\x97\x9F\x9B\x9F\x9B{f\x9C'\xA3$\x91\xD2O{lm\xEF\xB2\xFE\xC3\xDD\xF2\xEE\xBD\xFBK\xAB\xB2\*\x95\xFC\xC7췋G\xC7g\xAF̾\xFEj\xFE\xED\xF3g\xB1\xE1O:-\xA9\xF2\xC0O1i\x9Ck
+\xB4+\xD5m)>\xE7\xA5\xE9\xE3\xF8\xA9ţ\xFCL\xDE\xCDXZ\x82(\x8A \xE3?\xEA\xE6V\x8B\xED\x83>wƴݙ|W/.
+\xCE\xF9\xE9aO9s!Ȏ\xBB-\x81Fק\xE7E|q\xBB\xCE\xFC\x84\xC5\xC7+\xFB\_o\x841݁O/T\x9D\xD3E\xA9ݸ lH \xB1\x9B;'\xE6\xF3\xE8\xB6ƭ\x9D.\x95FC\x93\xF8h\xE5\x80TR\xC6L˄!\xA8^\x82#9A;%l\xBA\xE7\x86 ӜJ9yS#\xBC\xFBe\x85j3\xE4\xD9\xD3;\x8D\x80ɂE\xC1\xD5\xB55r\xA6\x86\xEB:\xA8\xB9\xEC\xD4A6촄c*X)
+E\x96\xD9j\xC4\xEC\xB4|\xDEz!\xCF\xC1\xA7\xB7|s\xFF7EDC\xFE\xFB\xF4$\x9B\x96\xCANz\xCB\xD4I%5$EAEޘ\xD6\xB8\xF4|\x86\x97'Ӽ\xFF\xF5\xAFD\x83:\xB2\xBF9DPEuD\xF40\xD3:\x8Ee\xE2\xB86ٌA6cPn \x88\xA2\x80\xA1&\xCB%\xB1S\x96\xE4\x93քաA|\\xBF*\xF6wuUŶ\xECL7'\xE2\xE4\xA0Ԇ(\x89㐯\xCA1)ME<i\xEE\xAA\xFD\xE3\xABC\x83\xEA\xF57\xFA\x87\x95\xC5~\xBDZ\x93!\xA6 \x96
+\x8EO\xBBqr\xAF\x95\xA3\x90\xFE\xA3\x83Z|\xBC\xBFX\xFA콍\xA1Afa\xA9P\xAD\xFA\xE5\xF2\x9D\x95彵k\x87\xFB5^Y\x8E\x98\x90zT\x9A\xBE-ש\xAC\xADն[\xBE\xBD\xDE(g\x96
+\xC3%
+\x9E\xDC \xE5\x93\xE0\x97\xEAэN\xE7\xC6am/\xF3b6g\x8F\xA7l=\xB7\x8BAT߫\xFC\xBC\xBB\xF3\xE8\xFB\x87\xCD`=\xE2@\xF0\xB4\xCEc\xCF\xF4_\xF5;J\xCD-\xF2J\xBA IEND\xAEB`\x82
\ No newline at end of file
Modified: trunk/Tools/MiniBrowser/qt/qml/BrowserWindow.qml (118761 => 118762)
--- trunk/Tools/MiniBrowser/qt/qml/BrowserWindow.qml 2012-05-29 12:25:07 UTC (rev 118761)
+++ trunk/Tools/MiniBrowser/qt/qml/BrowserWindow.qml 2012-05-29 13:17:23 UTC (rev 118762)
@@ -269,7 +269,7 @@
height: 16
anchors {
left: parent.left
- leftMargin: 4
+ leftMargin: 6
verticalCenter: parent.verticalCenter
}
}