From 954ff8673c1b9913697ecdeec355f2b0f9e4633a Mon Sep 17 00:00:00 2001 From: Warwick Allison Date: Wed, 10 Mar 2010 14:31:58 +1000 Subject: URL redirects for border image. Task-number: QTBUG-7515 --- .../graphicsitems/qdeclarativeborderimage.cpp | 16 +++++++++++++++- .../graphicsitems/qdeclarativeborderimage_p_p.h | 4 +++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/declarative/graphicsitems/qdeclarativeborderimage.cpp b/src/declarative/graphicsitems/qdeclarativeborderimage.cpp index de16668..a7534b8 100644 --- a/src/declarative/graphicsitems/qdeclarativeborderimage.cpp +++ b/src/declarative/graphicsitems/qdeclarativeborderimage.cpp @@ -191,7 +191,7 @@ void QDeclarativeBorderImage::load() update(); } else { d->status = Loading; - if (d->url.path().endsWith(QLatin1String(".sci"))) { + if (d->url.path().endsWith(QLatin1String("sci"))) { #ifndef QT_NO_LOCALFILE_OPTIMIZED_QML QString lf = toLocalFileOrQrc(d->url); if (!lf.isEmpty()) { @@ -400,9 +400,23 @@ void QDeclarativeBorderImage::requestFinished() update(); } +#define BORDERIMAGE_MAX_REDIRECT 16 + void QDeclarativeBorderImage::sciRequestFinished() { Q_D(QDeclarativeBorderImage); + + d->redirectCount++; + if (d->redirectCount < BORDERIMAGE_MAX_REDIRECT) { + QVariant redirect = d->sciReply->attribute(QNetworkRequest::RedirectionTargetAttribute); + if (redirect.isValid()) { + QUrl url = d->sciReply->url().resolved(redirect.toUrl()); + setSource(url); + return; + } + } + d->redirectCount=0; + if (d->sciReply->error() != QNetworkReply::NoError) { d->status = Error; d->sciReply->deleteLater(); diff --git a/src/declarative/graphicsitems/qdeclarativeborderimage_p_p.h b/src/declarative/graphicsitems/qdeclarativeborderimage_p_p.h index b9cf73a..82b9ebf 100644 --- a/src/declarative/graphicsitems/qdeclarativeborderimage_p_p.h +++ b/src/declarative/graphicsitems/qdeclarativeborderimage_p_p.h @@ -68,7 +68,8 @@ public: : border(0), sciReply(0), sciPendingPixmapCache(false), horizontalTileMode(QDeclarativeBorderImage::Stretch), - verticalTileMode(QDeclarativeBorderImage::Stretch) + verticalTileMode(QDeclarativeBorderImage::Stretch), + redirectCount(0) { } @@ -90,6 +91,7 @@ public: bool sciPendingPixmapCache; QDeclarativeBorderImage::TileMode horizontalTileMode; QDeclarativeBorderImage::TileMode verticalTileMode; + int redirectCount; }; QT_END_NAMESPACE -- cgit v0.12