From d5b4afa7b63bb5e0d6afb3491e5fd62e7bf2e890 Mon Sep 17 00:00:00 2001
From: Gareth Stockwell <gareth.stockwell@accenture.com>
Date: Tue, 20 Oct 2009 17:50:11 +0100
Subject: When creating a Symbian WId for a visible widget, make the control
 visible after activating the window.

This change was required in order to be able to run the test case
for the below task; however, it is more generally required.  Without
it, the contents of the descendents of this widget will not be
visible, until they are explicitly hidden and then re-shown.

Task-number: QTBUG-4787
Reviewed-by: axis
---
 src/gui/kernel/qwidget_s60.cpp | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/src/gui/kernel/qwidget_s60.cpp b/src/gui/kernel/qwidget_s60.cpp
index abf5ba5..2cc3d3f 100644
--- a/src/gui/kernel/qwidget_s60.cpp
+++ b/src/gui/kernel/qwidget_s60.cpp
@@ -434,8 +434,10 @@ void QWidgetPrivate::create_sys(WId window, bool /* initializeWindow */, bool de
         drawableWindow->PointerFilter(EPointerFilterEnterExit
             | EPointerFilterMove | EPointerFilterDrag, 0);
 
-        if (q->isVisible() && q->testAttribute(Qt::WA_Mapped))
+        if (q->isVisible() && q->testAttribute(Qt::WA_Mapped)) {
             activateSymbianWindow(control.data());
+            control->MakeVisible(true);
+        }
 
         // We wait until the control is fully constructed before calling setWinId, because
         // this generates a WinIdChanged event.
-- 
cgit v0.12


From ffb1006aaf1ee03ff28864d0165ddf0fddb759d7 Mon Sep 17 00:00:00 2001
From: Gareth Stockwell <gareth.stockwell@accenture.com>
Date: Wed, 21 Oct 2009 15:41:21 +0100
Subject: Video screen region is updated in response to ancestors of video
 widget being moved.

Because QWidget::moveEvent is only called when a widget moves relative
to its parent, a widget's absolute screen position may change without it
receiving a moveEvent (for example, as a result of its parent being
moved).

The MMF video playback API on Symbian v9.4 requires, in addition to a
window handle, an absolute screen rectangle.  Changes in the video
widget's absolute screen position therefore need to be propagated
into the MMF.

This change introduces a new object, AncestorMoveMonitor, which
installs an event filter on the QCoreApplication instance.  A
VideoOutput object registers with the AncestorMoveMonitor, which
listens on its behalf for MoveEvents and ParentChangeEvents directed
at any of the ancestors of the VideoOutput.  MoveEvents trigger a
callback to the VideoOutput instance, which then notifies the MMF of
the new screen rectangle.  ParentChangeEvents cause the
AncestorMoveMonitor to update the ancestor list associated with the
target VideoOutput instance.

The video position now tracks that of the associated widget, but there
are two problems which require further investigation:

1. The video window lags behind.  This may be an unavoidable
consequence of the fact that setting a new screen rectangle causes the
MMF to tear down its DSA session and start a new one; this is known to
block the window server and take some time to complete.

2. Artifacts are visible around the edges of the moving video widget.

Task-number: QTBUG-4787
Reviewed-by: Frans Englich
---
 src/3rdparty/phonon/mmf/ancestormovemonitor.cpp | 175 ++++++++++++++++++++++++
 src/3rdparty/phonon/mmf/ancestormovemonitor.h   |  95 +++++++++++++
 src/3rdparty/phonon/mmf/backend.cpp             |   7 +-
 src/3rdparty/phonon/mmf/backend.h               |   7 +
 src/3rdparty/phonon/mmf/videooutput.cpp         |  30 +++-
 src/3rdparty/phonon/mmf/videooutput.h           |  15 +-
 src/3rdparty/phonon/mmf/videowidget.cpp         |   5 +-
 src/3rdparty/phonon/mmf/videowidget.h           |   3 +-
 src/plugins/phonon/mmf/plugin/plugin.pro        |   2 +
 9 files changed, 328 insertions(+), 11 deletions(-)
 create mode 100644 src/3rdparty/phonon/mmf/ancestormovemonitor.cpp
 create mode 100644 src/3rdparty/phonon/mmf/ancestormovemonitor.h

diff --git a/src/3rdparty/phonon/mmf/ancestormovemonitor.cpp b/src/3rdparty/phonon/mmf/ancestormovemonitor.cpp
new file mode 100644
index 0000000..876499c
--- /dev/null
+++ b/src/3rdparty/phonon/mmf/ancestormovemonitor.cpp
@@ -0,0 +1,175 @@
+/*  This file is part of the KDE project.
+
+Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+
+This library is free software: you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation, either version 2.1 or 3 of the License.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with this library.  If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+#include "ancestormovemonitor.h"
+#include "utils.h"
+#include "videooutput.h"
+
+#include <QCoreApplication>
+
+QT_BEGIN_NAMESPACE
+
+using namespace Phonon::MMF;
+
+/*! \class MMF::AncestorMoveMonitor
+  \internal
+  \brief Class which installs a global event filter, and listens for move
+  events which may affect the absolute position of widgets registered with
+  the monitor
+  See QTBUG-4956
+*/
+
+//-----------------------------------------------------------------------------
+// Constructor / destructor
+//-----------------------------------------------------------------------------
+
+AncestorMoveMonitor::AncestorMoveMonitor(QObject *parent)
+    :   QObject(parent)
+{
+    QCoreApplication::instance()->installEventFilter(this);
+}
+
+AncestorMoveMonitor::~AncestorMoveMonitor()
+{
+    QCoreApplication::instance()->removeEventFilter(this);
+}
+
+
+//-----------------------------------------------------------------------------
+// Public functions
+//-----------------------------------------------------------------------------
+
+void AncestorMoveMonitor::registerTarget(VideoOutput *target)
+{
+    TRACE_CONTEXT(AncestorMoveMonitor::registerTarget, EVideoInternal);
+    TRACE_ENTRY("target 0x%08x", target);
+
+    // First un-register the target, in case this is being called as a result
+    // of re-parenting.  This is not the most efficient way to update the
+    // target hash, but since this is not likely to be a frequent operation,
+    // simplicity is preferred over outright speed.  In any case, re-parenting
+    // of the video widget leads to re-creation of native windows, which is
+    // likely to take far more processing than any implementation of this
+    // function.
+    unRegisterTarget(target);
+
+    QWidget *ancestor = target->parentWidget();
+    while(ancestor) {
+        const Hash::iterator it = m_hash.find(ancestor);
+        if(m_hash.end() == it) {
+            TargetList targetList;
+            targetList.append(target);
+            m_hash.insert(ancestor, targetList);
+        } else {
+            TargetList& targetList = it.value();
+            Q_ASSERT(targetList.indexOf(target) == -1);
+            targetList.append(target);
+        }
+        ancestor = ancestor->parentWidget();
+    }
+
+    dump();
+
+    TRACE_EXIT_0();
+}
+
+void AncestorMoveMonitor::unRegisterTarget(VideoOutput *target)
+{
+    TRACE_CONTEXT(AncestorMoveMonitor::unRegisterTarget, EVideoInternal);
+    TRACE_ENTRY("target 0x%08x", target);
+
+    Hash::iterator it = m_hash.begin();
+    while(it != m_hash.end()) {
+        TargetList& targetList = it.value();
+        const int index = targetList.indexOf(target);
+        if(index != -1)
+            targetList.removeAt(index);
+        if(targetList.count())
+            ++it;
+        else
+            it = m_hash.erase(it);
+    }
+
+    dump();
+
+    TRACE_EXIT_0();
+}
+
+bool AncestorMoveMonitor::eventFilter(QObject *watched, QEvent *event)
+{
+    TRACE_CONTEXT(AncestorMoveMonitor::eventFilter, EVideoInternal);
+
+    if(event->type() == QEvent::Move || event->type() == QEvent::ParentChange) {
+
+        TRACE_ENTRY("watched 0x%08x event.type %d", watched, event->type());
+
+        const Hash::const_iterator it = m_hash.find(watched);
+        if(it != m_hash.end()) {
+            const TargetList& targetList = it.value();
+            VideoOutput* target = 0;
+            foreach(target, targetList) {
+                switch (event->type()) {
+
+                case QEvent::Move:
+                    // Notify the target that its ancestor has moved
+                    target->ancestorMoved();
+                    break;
+
+                case QEvent::ParentChange:
+                    // Update ancestor list for the target
+                    registerTarget(target);
+                    break;
+
+                default:
+                    Q_ASSERT(false);
+                }
+            }
+        }
+
+        TRACE_EXIT_0();
+    }
+
+    // The event is never consumed by this filter
+    return false;
+}
+
+//-----------------------------------------------------------------------------
+// Private functions
+//-----------------------------------------------------------------------------
+
+void AncestorMoveMonitor::dump()
+{
+#ifndef QT_NO_DEBUG
+    TRACE_CONTEXT(AncestorMoveMonitor::dump, EVideoInternal);
+    for(Hash::const_iterator it = m_hash.begin();
+        it != m_hash.end(); ++it) {
+        const QObject *ancestor = it.key();
+        TRACE("ancestor 0x%08x", ancestor);
+        const TargetList& targetList = it.value();
+        VideoOutput* target = 0;
+        foreach(target, targetList) {
+            TRACE("    target 0x%08x", target);
+        }
+    }
+#endif
+}
+
+
+
+QT_END_NAMESPACE
+
diff --git a/src/3rdparty/phonon/mmf/ancestormovemonitor.h b/src/3rdparty/phonon/mmf/ancestormovemonitor.h
new file mode 100644
index 0000000..0e681aa
--- /dev/null
+++ b/src/3rdparty/phonon/mmf/ancestormovemonitor.h
@@ -0,0 +1,95 @@
+/*  This file is part of the KDE project.
+
+Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+
+This library is free software: you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation, either version 2.1 or 3 of the License.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with this library.  If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+#ifndef PHONON_MMF_ANCESTORMOVEMONITOR_H
+#define PHONON_MMF_ANCESTORMOVEMONITOR_H
+
+#include <QObject>
+#include <QHash>
+#include <QList>
+
+QT_BEGIN_NAMESPACE
+
+namespace Phonon
+{
+namespace MMF
+{
+class VideoOutput;
+
+class AncestorMoveMonitor : public QObject
+{
+    Q_OBJECT
+
+public:
+    explicit AncestorMoveMonitor(QObject *parent);
+    ~AncestorMoveMonitor();
+
+    /**
+     * Register target widget for notification.
+     *
+     * The widget receives an ancestorMoveEvent callback when a move event
+     * is delivered to any of its ancestors:
+     *
+     * If the target is already registered, this function causes its
+     * ancestor list to be updated - therefore it should be called when
+     * the target receives a ParentChange event.
+     */
+    void registerTarget(VideoOutput *target);
+
+    /**
+     * Remove target from the monitor.
+     *
+     * The target will no longer receive notification when move events are
+     * delivered to its ancestors.
+     */
+    void unRegisterTarget(VideoOutput *target);
+
+protected:
+    /**
+     * Function which receives events from the global event filter.
+     */
+    bool eventFilter(QObject *watched, QEvent *event);
+
+    void dump();
+
+private:
+    /**
+     * List of registered target widgets which descend from a given
+     * ancestor.
+     *
+     * Note that the members of the list should be non-redundant; this
+     * invariant is checked in debug builds.  Semantically, the value is
+     * therefore a set, however we use QList rather than QSet for
+     * efficiency of iteration.
+     */
+    typedef QList<VideoOutput *> TargetList;
+
+    /**
+     * Map from widget on which the move event occurs, to widgets which
+     * descend from it and therefore need to be notified.
+     */
+    typedef QHash<QObject *, TargetList> Hash;
+    Hash m_hash;
+
+};
+}
+}
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/3rdparty/phonon/mmf/backend.cpp b/src/3rdparty/phonon/mmf/backend.cpp
index f542ec9..cac27e3 100644
--- a/src/3rdparty/phonon/mmf/backend.cpp
+++ b/src/3rdparty/phonon/mmf/backend.cpp
@@ -24,6 +24,7 @@ along with this library.  If not, see <http://www.gnu.org/licenses/>.
 #include <apmstd.h> // for TDataType
 
 #include "abstractaudioeffect.h"
+#include "ancestormovemonitor.h"
 #include "audiooutput.h"
 #include "audioplayer.h"
 #include "backend.h"
@@ -45,7 +46,9 @@ using namespace Phonon::MMF;
   \internal
 */
 
-Backend::Backend(QObject *parent)   : QObject(parent)
+Backend::Backend(QObject *parent)
+    : QObject(parent)
+    , m_ancestorMoveMonitor(new AncestorMoveMonitor(this))
 {
     TRACE_CONTEXT(Backend::Backend, EBackend);
     TRACE_ENTRY_0();
@@ -87,7 +90,7 @@ QObject *Backend::createObject(BackendInterface::Class c, QObject *parent, const
         return EffectFactory::createAudioEffect(effect, parent);
     }
     case VideoWidgetClass:
-        result = new VideoWidget(qobject_cast<QWidget *>(parent));
+        result = new VideoWidget(m_ancestorMoveMonitor.data(), qobject_cast<QWidget *>(parent));
         break;
 
     default:
diff --git a/src/3rdparty/phonon/mmf/backend.h b/src/3rdparty/phonon/mmf/backend.h
index 1886ae6..9e3d3b3 100644
--- a/src/3rdparty/phonon/mmf/backend.h
+++ b/src/3rdparty/phonon/mmf/backend.h
@@ -19,8 +19,11 @@ along with this library.  If not, see <http://www.gnu.org/licenses/>.
 #ifndef PHONON_MMF_BACKEND_H
 #define PHONON_MMF_BACKEND_H
 
+#include "ancestormovemonitor.h"
+
 #include <Phonon/MediaSource>
 #include <Phonon/BackendInterface>
+#include <QScopedPointer>
 
 QT_BEGIN_NAMESPACE
 
@@ -47,6 +50,10 @@ public:
 
 Q_SIGNALS:
     void objectDescriptionChanged(ObjectDescriptionType);
+
+private:
+    QScopedPointer<AncestorMoveMonitor> m_ancestorMoveMonitor;
+
 };
 }
 }
diff --git a/src/3rdparty/phonon/mmf/videooutput.cpp b/src/3rdparty/phonon/mmf/videooutput.cpp
index f0393a7..5288b4d 100644
--- a/src/3rdparty/phonon/mmf/videooutput.cpp
+++ b/src/3rdparty/phonon/mmf/videooutput.cpp
@@ -16,6 +16,7 @@ along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
 */
 
+#include "ancestormovemonitor.h"
 #include "utils.h"
 #include "videooutput.h"
 #include "videooutputobserver.h"
@@ -44,8 +45,10 @@ using namespace Phonon::MMF;
 // Constructor / destructor
 //-----------------------------------------------------------------------------
 
-MMF::VideoOutput::VideoOutput(QWidget* parent)
+MMF::VideoOutput::VideoOutput
+    (AncestorMoveMonitor* ancestorMoveMonitor, QWidget* parent)
         :   QWidget(parent)
+        ,   m_ancestorMoveMonitor(ancestorMoveMonitor)
         ,   m_observer(0)
 {
     TRACE_CONTEXT(VideoOutput::VideoOutput, EVideoInternal);
@@ -63,6 +66,8 @@ MMF::VideoOutput::VideoOutput(QWidget* parent)
     // to be invisible when running on the target device.
     qt_widget_private(this)->extraData()->disableBlit = true;
 
+    registerForAncestorMoved();
+
     dump();
 
     TRACE_EXIT_0();
@@ -73,6 +78,8 @@ MMF::VideoOutput::~VideoOutput()
     TRACE_CONTEXT(VideoOutput::~VideoOutput, EVideoInternal);
     TRACE_ENTRY_0();
 
+    m_ancestorMoveMonitor->unRegisterTarget(this);
+
     TRACE_EXIT_0();
 }
 
@@ -97,6 +104,15 @@ void MMF::VideoOutput::setObserver(VideoOutputObserver* observer)
     m_observer = observer;
 }
 
+void MMF::VideoOutput::ancestorMoved()
+{
+    TRACE_CONTEXT(VideoOutput::ancestorMoved, EVideoInternal);
+    TRACE_ENTRY_0();
+
+    videoOutputRegionChanged();
+
+    TRACE_EXIT_0();
+}
 
 //-----------------------------------------------------------------------------
 // QWidget
@@ -154,8 +170,11 @@ bool MMF::VideoOutput::event(QEvent* event)
         TRACE_0("WinIdChange");
         videoOutputRegionChanged();
         return true;
-    }
-    else
+    } else if (event->type() == QEvent::ParentChange) {
+        // Tell ancestor move monitor to update ancestor list for this widget
+        registerForAncestorMoved();
+        return true;
+    } else
         return QWidget::event(event);
 }
 
@@ -171,6 +190,11 @@ void MMF::VideoOutput::videoOutputRegionChanged()
         m_observer->videoOutputRegionChanged();
 }
 
+void MMF::VideoOutput::registerForAncestorMoved()
+{
+    m_ancestorMoveMonitor->registerTarget(this);
+}
+
 void MMF::VideoOutput::dump() const
 {
 #ifndef QT_NO_DEBUG
diff --git a/src/3rdparty/phonon/mmf/videooutput.h b/src/3rdparty/phonon/mmf/videooutput.h
index 7bc0b52..db4d127 100644
--- a/src/3rdparty/phonon/mmf/videooutput.h
+++ b/src/3rdparty/phonon/mmf/videooutput.h
@@ -30,6 +30,7 @@ namespace Phonon
 {
 namespace MMF
 {
+class AncestorMoveMonitor;
 class VideoOutputObserver;
 
 class VideoOutput       :   public QWidget
@@ -37,12 +38,14 @@ class VideoOutput       :   public QWidget
     Q_OBJECT
 
 public:
-    explicit VideoOutput(QWidget* parent);
+    VideoOutput(AncestorMoveMonitor* ancestorMoveMonitor, QWidget* parent);
     ~VideoOutput();
 
     void setFrameSize(const QSize& size);
     void setObserver(VideoOutputObserver* observer);
 
+    void ancestorMoved();
+
 protected:
     // Override QWidget functions
     QSize sizeHint() const;
@@ -55,11 +58,17 @@ private:
     void dump() const;
     void videoOutputRegionChanged();
 
+    void registerForAncestorMoved();
+
 private:
-    QSize m_frameSize;
+    // Not owned
+    AncestorMoveMonitor*    m_ancestorMoveMonitor;
 
     // Not owned
-    VideoOutputObserver* m_observer;
+    VideoOutputObserver*    m_observer;
+
+    QSize                   m_frameSize;
+
 };
 }
 }
diff --git a/src/3rdparty/phonon/mmf/videowidget.cpp b/src/3rdparty/phonon/mmf/videowidget.cpp
index 8a5c9ff..7d7abf1 100644
--- a/src/3rdparty/phonon/mmf/videowidget.cpp
+++ b/src/3rdparty/phonon/mmf/videowidget.cpp
@@ -49,9 +49,10 @@ static const qreal DefaultSaturation = 1.0;
 // Constructor / destructor
 //-----------------------------------------------------------------------------
 
-MMF::VideoWidget::VideoWidget(QWidget* parent)
+MMF::VideoWidget::VideoWidget
+    (AncestorMoveMonitor* ancestorMoveMonitor, QWidget* parent)
         :   MediaNode(parent)
-        ,   m_widget(new VideoOutput(parent))
+        ,   m_widget(new VideoOutput(ancestorMoveMonitor, parent))
         ,   m_aspectRatio(DefaultAspectRatio)
         ,   m_brightness(DefaultBrightness)
         ,   m_scaleMode(DefaultScaleMode)
diff --git a/src/3rdparty/phonon/mmf/videowidget.h b/src/3rdparty/phonon/mmf/videowidget.h
index 970f749..318dfae 100644
--- a/src/3rdparty/phonon/mmf/videowidget.h
+++ b/src/3rdparty/phonon/mmf/videowidget.h
@@ -31,6 +31,7 @@ namespace Phonon
 {
 namespace MMF
 {
+class AncestorMoveMonitor;
 class VideoOutput;
 
 class VideoWidget       :   public MediaNode
@@ -40,7 +41,7 @@ class VideoWidget       :   public MediaNode
     Q_INTERFACES(Phonon::VideoWidgetInterface)
 
 public:
-    VideoWidget(QWidget* parent);
+    VideoWidget(AncestorMoveMonitor* ancestorMoveMonitor, QWidget* parent);
     ~VideoWidget();
 
     // VideoWidgetInterface
diff --git a/src/plugins/phonon/mmf/plugin/plugin.pro b/src/plugins/phonon/mmf/plugin/plugin.pro
index eb7fd27..793c307 100644
--- a/src/plugins/phonon/mmf/plugin/plugin.pro
+++ b/src/plugins/phonon/mmf/plugin/plugin.pro
@@ -26,6 +26,7 @@ HEADERS +=                                           \
            $$PHONON_MMF_DIR/abstractaudioeffect.h    \
            $$PHONON_MMF_DIR/abstractmediaplayer.h    \
            $$PHONON_MMF_DIR/abstractplayer.h         \
+           $$PHONON_MMF_DIR/ancestormovemonitor.h    \
            $$PHONON_MMF_DIR/audiooutput.h            \
            $$PHONON_MMF_DIR/audioequalizer.h         \
            $$PHONON_MMF_DIR/audioplayer.h            \
@@ -47,6 +48,7 @@ SOURCES +=                                           \
            $$PHONON_MMF_DIR/abstractaudioeffect.cpp  \
            $$PHONON_MMF_DIR/abstractmediaplayer.cpp  \
            $$PHONON_MMF_DIR/abstractplayer.cpp       \
+           $$PHONON_MMF_DIR/ancestormovemonitor.cpp  \
            $$PHONON_MMF_DIR/audiooutput.cpp          \
            $$PHONON_MMF_DIR/audioequalizer.cpp       \
            $$PHONON_MMF_DIR/audioplayer.cpp          \
-- 
cgit v0.12


From 7177618fd8ae91e553573263d5dd78a99c64e118 Mon Sep 17 00:00:00 2001
From: Frans Englich <frans.englich@nokia.com>
Date: Wed, 21 Oct 2009 11:27:22 +0200
Subject: Listen to hasVideoChanged() signal instead, such that we're more
 robust.

This covers cases where the backend knows about video capability in a
state other than the LoadingState. Patch by Adookkattil Saleem, slightly
modified.

Reviewed-by: Gareth Stockwell
---
 demos/qmediaplayer/mediaplayer.h | 1 +
 1 file changed, 1 insertion(+)

diff --git a/demos/qmediaplayer/mediaplayer.h b/demos/qmediaplayer/mediaplayer.h
index 83f14e8..f3af7cc 100644
--- a/demos/qmediaplayer/mediaplayer.h
+++ b/demos/qmediaplayer/mediaplayer.h
@@ -109,6 +109,7 @@ private slots:
     void bufferStatus(int percent);
     void openUrl();
     void configureEffect();
+    void hasVideoChanged(bool);
 
 private:
     QIcon playIcon;
-- 
cgit v0.12


From df0f099b7ae0ffbea46411276a239d152f36a7e2 Mon Sep 17 00:00:00 2001
From: Gareth Stockwell <gareth.stockwell@accenture.com>
Date: Tue, 20 Oct 2009 17:50:11 +0100
Subject: When creating a Symbian WId for a visible widget, make the control
 visible after activating the window.

This change was required in order to be able to run the test case
for the below task; however, it is more generally required.  Without
it, the contents of the descendents of this widget will not be
visible, until they are explicitly hidden and then re-shown.

Task-number: QTBUG-4787
Reviewed-by: axis
---
 src/gui/kernel/qwidget_s60.cpp | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/src/gui/kernel/qwidget_s60.cpp b/src/gui/kernel/qwidget_s60.cpp
index cb615fe..3e332a3 100644
--- a/src/gui/kernel/qwidget_s60.cpp
+++ b/src/gui/kernel/qwidget_s60.cpp
@@ -434,8 +434,10 @@ void QWidgetPrivate::create_sys(WId window, bool /* initializeWindow */, bool de
         drawableWindow->PointerFilter(EPointerFilterEnterExit
             | EPointerFilterMove | EPointerFilterDrag, 0);
 
-        if (q->isVisible() && q->testAttribute(Qt::WA_Mapped))
+        if (q->isVisible() && q->testAttribute(Qt::WA_Mapped)) {
             activateSymbianWindow(control.data());
+            control->MakeVisible(true);
+        }
 
         // We wait until the control is fully constructed before calling setWinId, because
         // this generates a WinIdChanged event.
-- 
cgit v0.12


From d54bc7379de145995534058dd2f6b400c9ab160e Mon Sep 17 00:00:00 2001
From: Gareth Stockwell <gareth.stockwell@accenture.com>
Date: Wed, 21 Oct 2009 15:41:21 +0100
Subject: Video screen region is updated in response to ancestors of video
 widget being moved.

Because QWidget::moveEvent is only called when a widget moves relative
to its parent, a widget's absolute screen position may change without it
receiving a moveEvent (for example, as a result of its parent being
moved).

The MMF video playback API on Symbian v9.4 requires, in addition to a
window handle, an absolute screen rectangle.  Changes in the video
widget's absolute screen position therefore need to be propagated
into the MMF.

This change introduces a new object, AncestorMoveMonitor, which
installs an event filter on the QCoreApplication instance.  A
VideoOutput object registers with the AncestorMoveMonitor, which
listens on its behalf for MoveEvents and ParentChangeEvents directed
at any of the ancestors of the VideoOutput.  MoveEvents trigger a
callback to the VideoOutput instance, which then notifies the MMF of
the new screen rectangle.  ParentChangeEvents cause the
AncestorMoveMonitor to update the ancestor list associated with the
target VideoOutput instance.

The video position now tracks that of the associated widget, but there
are two problems which require further investigation:

1. The video window lags behind.  This may be an unavoidable
consequence of the fact that setting a new screen rectangle causes the
MMF to tear down its DSA session and start a new one; this is known to
block the window server and take some time to complete.

2. Artifacts are visible around the edges of the moving video widget.

Task-number: QTBUG-4787
Reviewed-by: Frans Englich
---
 src/3rdparty/phonon/mmf/ancestormovemonitor.cpp | 175 ++++++++++++++++++++++++
 src/3rdparty/phonon/mmf/ancestormovemonitor.h   |  95 +++++++++++++
 src/3rdparty/phonon/mmf/backend.cpp             |   7 +-
 src/3rdparty/phonon/mmf/backend.h               |   7 +
 src/3rdparty/phonon/mmf/videooutput.cpp         |  30 +++-
 src/3rdparty/phonon/mmf/videooutput.h           |  15 +-
 src/3rdparty/phonon/mmf/videowidget.cpp         |   5 +-
 src/3rdparty/phonon/mmf/videowidget.h           |   3 +-
 src/plugins/phonon/mmf/plugin/plugin.pro        |   2 +
 9 files changed, 328 insertions(+), 11 deletions(-)
 create mode 100644 src/3rdparty/phonon/mmf/ancestormovemonitor.cpp
 create mode 100644 src/3rdparty/phonon/mmf/ancestormovemonitor.h

diff --git a/src/3rdparty/phonon/mmf/ancestormovemonitor.cpp b/src/3rdparty/phonon/mmf/ancestormovemonitor.cpp
new file mode 100644
index 0000000..876499c
--- /dev/null
+++ b/src/3rdparty/phonon/mmf/ancestormovemonitor.cpp
@@ -0,0 +1,175 @@
+/*  This file is part of the KDE project.
+
+Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+
+This library is free software: you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation, either version 2.1 or 3 of the License.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with this library.  If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+#include "ancestormovemonitor.h"
+#include "utils.h"
+#include "videooutput.h"
+
+#include <QCoreApplication>
+
+QT_BEGIN_NAMESPACE
+
+using namespace Phonon::MMF;
+
+/*! \class MMF::AncestorMoveMonitor
+  \internal
+  \brief Class which installs a global event filter, and listens for move
+  events which may affect the absolute position of widgets registered with
+  the monitor
+  See QTBUG-4956
+*/
+
+//-----------------------------------------------------------------------------
+// Constructor / destructor
+//-----------------------------------------------------------------------------
+
+AncestorMoveMonitor::AncestorMoveMonitor(QObject *parent)
+    :   QObject(parent)
+{
+    QCoreApplication::instance()->installEventFilter(this);
+}
+
+AncestorMoveMonitor::~AncestorMoveMonitor()
+{
+    QCoreApplication::instance()->removeEventFilter(this);
+}
+
+
+//-----------------------------------------------------------------------------
+// Public functions
+//-----------------------------------------------------------------------------
+
+void AncestorMoveMonitor::registerTarget(VideoOutput *target)
+{
+    TRACE_CONTEXT(AncestorMoveMonitor::registerTarget, EVideoInternal);
+    TRACE_ENTRY("target 0x%08x", target);
+
+    // First un-register the target, in case this is being called as a result
+    // of re-parenting.  This is not the most efficient way to update the
+    // target hash, but since this is not likely to be a frequent operation,
+    // simplicity is preferred over outright speed.  In any case, re-parenting
+    // of the video widget leads to re-creation of native windows, which is
+    // likely to take far more processing than any implementation of this
+    // function.
+    unRegisterTarget(target);
+
+    QWidget *ancestor = target->parentWidget();
+    while(ancestor) {
+        const Hash::iterator it = m_hash.find(ancestor);
+        if(m_hash.end() == it) {
+            TargetList targetList;
+            targetList.append(target);
+            m_hash.insert(ancestor, targetList);
+        } else {
+            TargetList& targetList = it.value();
+            Q_ASSERT(targetList.indexOf(target) == -1);
+            targetList.append(target);
+        }
+        ancestor = ancestor->parentWidget();
+    }
+
+    dump();
+
+    TRACE_EXIT_0();
+}
+
+void AncestorMoveMonitor::unRegisterTarget(VideoOutput *target)
+{
+    TRACE_CONTEXT(AncestorMoveMonitor::unRegisterTarget, EVideoInternal);
+    TRACE_ENTRY("target 0x%08x", target);
+
+    Hash::iterator it = m_hash.begin();
+    while(it != m_hash.end()) {
+        TargetList& targetList = it.value();
+        const int index = targetList.indexOf(target);
+        if(index != -1)
+            targetList.removeAt(index);
+        if(targetList.count())
+            ++it;
+        else
+            it = m_hash.erase(it);
+    }
+
+    dump();
+
+    TRACE_EXIT_0();
+}
+
+bool AncestorMoveMonitor::eventFilter(QObject *watched, QEvent *event)
+{
+    TRACE_CONTEXT(AncestorMoveMonitor::eventFilter, EVideoInternal);
+
+    if(event->type() == QEvent::Move || event->type() == QEvent::ParentChange) {
+
+        TRACE_ENTRY("watched 0x%08x event.type %d", watched, event->type());
+
+        const Hash::const_iterator it = m_hash.find(watched);
+        if(it != m_hash.end()) {
+            const TargetList& targetList = it.value();
+            VideoOutput* target = 0;
+            foreach(target, targetList) {
+                switch (event->type()) {
+
+                case QEvent::Move:
+                    // Notify the target that its ancestor has moved
+                    target->ancestorMoved();
+                    break;
+
+                case QEvent::ParentChange:
+                    // Update ancestor list for the target
+                    registerTarget(target);
+                    break;
+
+                default:
+                    Q_ASSERT(false);
+                }
+            }
+        }
+
+        TRACE_EXIT_0();
+    }
+
+    // The event is never consumed by this filter
+    return false;
+}
+
+//-----------------------------------------------------------------------------
+// Private functions
+//-----------------------------------------------------------------------------
+
+void AncestorMoveMonitor::dump()
+{
+#ifndef QT_NO_DEBUG
+    TRACE_CONTEXT(AncestorMoveMonitor::dump, EVideoInternal);
+    for(Hash::const_iterator it = m_hash.begin();
+        it != m_hash.end(); ++it) {
+        const QObject *ancestor = it.key();
+        TRACE("ancestor 0x%08x", ancestor);
+        const TargetList& targetList = it.value();
+        VideoOutput* target = 0;
+        foreach(target, targetList) {
+            TRACE("    target 0x%08x", target);
+        }
+    }
+#endif
+}
+
+
+
+QT_END_NAMESPACE
+
diff --git a/src/3rdparty/phonon/mmf/ancestormovemonitor.h b/src/3rdparty/phonon/mmf/ancestormovemonitor.h
new file mode 100644
index 0000000..0e681aa
--- /dev/null
+++ b/src/3rdparty/phonon/mmf/ancestormovemonitor.h
@@ -0,0 +1,95 @@
+/*  This file is part of the KDE project.
+
+Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+
+This library is free software: you can redistribute it and/or modify
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation, either version 2.1 or 3 of the License.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License
+along with this library.  If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+#ifndef PHONON_MMF_ANCESTORMOVEMONITOR_H
+#define PHONON_MMF_ANCESTORMOVEMONITOR_H
+
+#include <QObject>
+#include <QHash>
+#include <QList>
+
+QT_BEGIN_NAMESPACE
+
+namespace Phonon
+{
+namespace MMF
+{
+class VideoOutput;
+
+class AncestorMoveMonitor : public QObject
+{
+    Q_OBJECT
+
+public:
+    explicit AncestorMoveMonitor(QObject *parent);
+    ~AncestorMoveMonitor();
+
+    /**
+     * Register target widget for notification.
+     *
+     * The widget receives an ancestorMoveEvent callback when a move event
+     * is delivered to any of its ancestors:
+     *
+     * If the target is already registered, this function causes its
+     * ancestor list to be updated - therefore it should be called when
+     * the target receives a ParentChange event.
+     */
+    void registerTarget(VideoOutput *target);
+
+    /**
+     * Remove target from the monitor.
+     *
+     * The target will no longer receive notification when move events are
+     * delivered to its ancestors.
+     */
+    void unRegisterTarget(VideoOutput *target);
+
+protected:
+    /**
+     * Function which receives events from the global event filter.
+     */
+    bool eventFilter(QObject *watched, QEvent *event);
+
+    void dump();
+
+private:
+    /**
+     * List of registered target widgets which descend from a given
+     * ancestor.
+     *
+     * Note that the members of the list should be non-redundant; this
+     * invariant is checked in debug builds.  Semantically, the value is
+     * therefore a set, however we use QList rather than QSet for
+     * efficiency of iteration.
+     */
+    typedef QList<VideoOutput *> TargetList;
+
+    /**
+     * Map from widget on which the move event occurs, to widgets which
+     * descend from it and therefore need to be notified.
+     */
+    typedef QHash<QObject *, TargetList> Hash;
+    Hash m_hash;
+
+};
+}
+}
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/3rdparty/phonon/mmf/backend.cpp b/src/3rdparty/phonon/mmf/backend.cpp
index f542ec9..cac27e3 100644
--- a/src/3rdparty/phonon/mmf/backend.cpp
+++ b/src/3rdparty/phonon/mmf/backend.cpp
@@ -24,6 +24,7 @@ along with this library.  If not, see <http://www.gnu.org/licenses/>.
 #include <apmstd.h> // for TDataType
 
 #include "abstractaudioeffect.h"
+#include "ancestormovemonitor.h"
 #include "audiooutput.h"
 #include "audioplayer.h"
 #include "backend.h"
@@ -45,7 +46,9 @@ using namespace Phonon::MMF;
   \internal
 */
 
-Backend::Backend(QObject *parent)   : QObject(parent)
+Backend::Backend(QObject *parent)
+    : QObject(parent)
+    , m_ancestorMoveMonitor(new AncestorMoveMonitor(this))
 {
     TRACE_CONTEXT(Backend::Backend, EBackend);
     TRACE_ENTRY_0();
@@ -87,7 +90,7 @@ QObject *Backend::createObject(BackendInterface::Class c, QObject *parent, const
         return EffectFactory::createAudioEffect(effect, parent);
     }
     case VideoWidgetClass:
-        result = new VideoWidget(qobject_cast<QWidget *>(parent));
+        result = new VideoWidget(m_ancestorMoveMonitor.data(), qobject_cast<QWidget *>(parent));
         break;
 
     default:
diff --git a/src/3rdparty/phonon/mmf/backend.h b/src/3rdparty/phonon/mmf/backend.h
index 1886ae6..9e3d3b3 100644
--- a/src/3rdparty/phonon/mmf/backend.h
+++ b/src/3rdparty/phonon/mmf/backend.h
@@ -19,8 +19,11 @@ along with this library.  If not, see <http://www.gnu.org/licenses/>.
 #ifndef PHONON_MMF_BACKEND_H
 #define PHONON_MMF_BACKEND_H
 
+#include "ancestormovemonitor.h"
+
 #include <Phonon/MediaSource>
 #include <Phonon/BackendInterface>
+#include <QScopedPointer>
 
 QT_BEGIN_NAMESPACE
 
@@ -47,6 +50,10 @@ public:
 
 Q_SIGNALS:
     void objectDescriptionChanged(ObjectDescriptionType);
+
+private:
+    QScopedPointer<AncestorMoveMonitor> m_ancestorMoveMonitor;
+
 };
 }
 }
diff --git a/src/3rdparty/phonon/mmf/videooutput.cpp b/src/3rdparty/phonon/mmf/videooutput.cpp
index f0393a7..5288b4d 100644
--- a/src/3rdparty/phonon/mmf/videooutput.cpp
+++ b/src/3rdparty/phonon/mmf/videooutput.cpp
@@ -16,6 +16,7 @@ along with this library.  If not, see <http://www.gnu.org/licenses/>.
 
 */
 
+#include "ancestormovemonitor.h"
 #include "utils.h"
 #include "videooutput.h"
 #include "videooutputobserver.h"
@@ -44,8 +45,10 @@ using namespace Phonon::MMF;
 // Constructor / destructor
 //-----------------------------------------------------------------------------
 
-MMF::VideoOutput::VideoOutput(QWidget* parent)
+MMF::VideoOutput::VideoOutput
+    (AncestorMoveMonitor* ancestorMoveMonitor, QWidget* parent)
         :   QWidget(parent)
+        ,   m_ancestorMoveMonitor(ancestorMoveMonitor)
         ,   m_observer(0)
 {
     TRACE_CONTEXT(VideoOutput::VideoOutput, EVideoInternal);
@@ -63,6 +66,8 @@ MMF::VideoOutput::VideoOutput(QWidget* parent)
     // to be invisible when running on the target device.
     qt_widget_private(this)->extraData()->disableBlit = true;
 
+    registerForAncestorMoved();
+
     dump();
 
     TRACE_EXIT_0();
@@ -73,6 +78,8 @@ MMF::VideoOutput::~VideoOutput()
     TRACE_CONTEXT(VideoOutput::~VideoOutput, EVideoInternal);
     TRACE_ENTRY_0();
 
+    m_ancestorMoveMonitor->unRegisterTarget(this);
+
     TRACE_EXIT_0();
 }
 
@@ -97,6 +104,15 @@ void MMF::VideoOutput::setObserver(VideoOutputObserver* observer)
     m_observer = observer;
 }
 
+void MMF::VideoOutput::ancestorMoved()
+{
+    TRACE_CONTEXT(VideoOutput::ancestorMoved, EVideoInternal);
+    TRACE_ENTRY_0();
+
+    videoOutputRegionChanged();
+
+    TRACE_EXIT_0();
+}
 
 //-----------------------------------------------------------------------------
 // QWidget
@@ -154,8 +170,11 @@ bool MMF::VideoOutput::event(QEvent* event)
         TRACE_0("WinIdChange");
         videoOutputRegionChanged();
         return true;
-    }
-    else
+    } else if (event->type() == QEvent::ParentChange) {
+        // Tell ancestor move monitor to update ancestor list for this widget
+        registerForAncestorMoved();
+        return true;
+    } else
         return QWidget::event(event);
 }
 
@@ -171,6 +190,11 @@ void MMF::VideoOutput::videoOutputRegionChanged()
         m_observer->videoOutputRegionChanged();
 }
 
+void MMF::VideoOutput::registerForAncestorMoved()
+{
+    m_ancestorMoveMonitor->registerTarget(this);
+}
+
 void MMF::VideoOutput::dump() const
 {
 #ifndef QT_NO_DEBUG
diff --git a/src/3rdparty/phonon/mmf/videooutput.h b/src/3rdparty/phonon/mmf/videooutput.h
index 7bc0b52..db4d127 100644
--- a/src/3rdparty/phonon/mmf/videooutput.h
+++ b/src/3rdparty/phonon/mmf/videooutput.h
@@ -30,6 +30,7 @@ namespace Phonon
 {
 namespace MMF
 {
+class AncestorMoveMonitor;
 class VideoOutputObserver;
 
 class VideoOutput       :   public QWidget
@@ -37,12 +38,14 @@ class VideoOutput       :   public QWidget
     Q_OBJECT
 
 public:
-    explicit VideoOutput(QWidget* parent);
+    VideoOutput(AncestorMoveMonitor* ancestorMoveMonitor, QWidget* parent);
     ~VideoOutput();
 
     void setFrameSize(const QSize& size);
     void setObserver(VideoOutputObserver* observer);
 
+    void ancestorMoved();
+
 protected:
     // Override QWidget functions
     QSize sizeHint() const;
@@ -55,11 +58,17 @@ private:
     void dump() const;
     void videoOutputRegionChanged();
 
+    void registerForAncestorMoved();
+
 private:
-    QSize m_frameSize;
+    // Not owned
+    AncestorMoveMonitor*    m_ancestorMoveMonitor;
 
     // Not owned
-    VideoOutputObserver* m_observer;
+    VideoOutputObserver*    m_observer;
+
+    QSize                   m_frameSize;
+
 };
 }
 }
diff --git a/src/3rdparty/phonon/mmf/videowidget.cpp b/src/3rdparty/phonon/mmf/videowidget.cpp
index 8a5c9ff..7d7abf1 100644
--- a/src/3rdparty/phonon/mmf/videowidget.cpp
+++ b/src/3rdparty/phonon/mmf/videowidget.cpp
@@ -49,9 +49,10 @@ static const qreal DefaultSaturation = 1.0;
 // Constructor / destructor
 //-----------------------------------------------------------------------------
 
-MMF::VideoWidget::VideoWidget(QWidget* parent)
+MMF::VideoWidget::VideoWidget
+    (AncestorMoveMonitor* ancestorMoveMonitor, QWidget* parent)
         :   MediaNode(parent)
-        ,   m_widget(new VideoOutput(parent))
+        ,   m_widget(new VideoOutput(ancestorMoveMonitor, parent))
         ,   m_aspectRatio(DefaultAspectRatio)
         ,   m_brightness(DefaultBrightness)
         ,   m_scaleMode(DefaultScaleMode)
diff --git a/src/3rdparty/phonon/mmf/videowidget.h b/src/3rdparty/phonon/mmf/videowidget.h
index 970f749..318dfae 100644
--- a/src/3rdparty/phonon/mmf/videowidget.h
+++ b/src/3rdparty/phonon/mmf/videowidget.h
@@ -31,6 +31,7 @@ namespace Phonon
 {
 namespace MMF
 {
+class AncestorMoveMonitor;
 class VideoOutput;
 
 class VideoWidget       :   public MediaNode
@@ -40,7 +41,7 @@ class VideoWidget       :   public MediaNode
     Q_INTERFACES(Phonon::VideoWidgetInterface)
 
 public:
-    VideoWidget(QWidget* parent);
+    VideoWidget(AncestorMoveMonitor* ancestorMoveMonitor, QWidget* parent);
     ~VideoWidget();
 
     // VideoWidgetInterface
diff --git a/src/plugins/phonon/mmf/plugin/plugin.pro b/src/plugins/phonon/mmf/plugin/plugin.pro
index eb7fd27..793c307 100644
--- a/src/plugins/phonon/mmf/plugin/plugin.pro
+++ b/src/plugins/phonon/mmf/plugin/plugin.pro
@@ -26,6 +26,7 @@ HEADERS +=                                           \
            $$PHONON_MMF_DIR/abstractaudioeffect.h    \
            $$PHONON_MMF_DIR/abstractmediaplayer.h    \
            $$PHONON_MMF_DIR/abstractplayer.h         \
+           $$PHONON_MMF_DIR/ancestormovemonitor.h    \
            $$PHONON_MMF_DIR/audiooutput.h            \
            $$PHONON_MMF_DIR/audioequalizer.h         \
            $$PHONON_MMF_DIR/audioplayer.h            \
@@ -47,6 +48,7 @@ SOURCES +=                                           \
            $$PHONON_MMF_DIR/abstractaudioeffect.cpp  \
            $$PHONON_MMF_DIR/abstractmediaplayer.cpp  \
            $$PHONON_MMF_DIR/abstractplayer.cpp       \
+           $$PHONON_MMF_DIR/ancestormovemonitor.cpp  \
            $$PHONON_MMF_DIR/audiooutput.cpp          \
            $$PHONON_MMF_DIR/audioequalizer.cpp       \
            $$PHONON_MMF_DIR/audioplayer.cpp          \
-- 
cgit v0.12


From 1c6bd7f61d2cbe0b8c0fa451f5f9a7efdfaf04c7 Mon Sep 17 00:00:00 2001
From: Janne Anttila <janne.anttila@digia.com>
Date: Fri, 23 Oct 2009 14:16:38 +0300
Subject: Fixed softkey autotest build after 5370e5ff.

Reviewed-by: axis
---
 tests/auto/qsoftkeymanager/tst_qsoftkeymanager.cpp | 25 ++++++++++++++++------
 1 file changed, 18 insertions(+), 7 deletions(-)

diff --git a/tests/auto/qsoftkeymanager/tst_qsoftkeymanager.cpp b/tests/auto/qsoftkeymanager/tst_qsoftkeymanager.cpp
index 6efa85b..87e0533 100644
--- a/tests/auto/qsoftkeymanager/tst_qsoftkeymanager.cpp
+++ b/tests/auto/qsoftkeymanager/tst_qsoftkeymanager.cpp
@@ -47,6 +47,10 @@
 #include "qdialogbuttonbox.h"
 #include "private/qsoftkeymanager_p.h"
 
+#ifdef Q_OS_SYMBIAN
+#include "qsymbianevent.h"
+#endif
+
 #ifdef Q_WS_S60
 static const int s60CommandStart = 6000;
 #endif
@@ -69,6 +73,13 @@ private slots:
     void updateSoftKeysCompressed();
     void handleCommand();
     void checkSoftkeyEnableStates();
+
+private: // utils
+    inline void simulateSymbianCommand(int command)
+    {
+        QSymbianEvent event1(QSymbianEvent::CommandEvent, command);
+        qApp->symbianProcessEvent(&event1);
+    };
 };
 
 class EventListener : public QObject
@@ -167,8 +178,8 @@ void tst_QSoftKeyManager::handleCommand()
 //    QTest::keyPress(&w, Qt::Key_Context1);
 //    QTest::keyPress(&w, Qt::Key_Context2);
 
-    qApp->symbianHandleCommand(6000);
-    qApp->symbianHandleCommand(6001);
+    simulateSymbianCommand(6000);
+    simulateSymbianCommand(6001);
 
     QApplication::processEvents();
 
@@ -200,9 +211,9 @@ void tst_QSoftKeyManager::checkSoftkeyEnableStates()
     //disabled button gets none.
     for (int i = 0; i < 10; i++) {
         //simulate "Restore Defaults" softkey press
-        qApp->symbianHandleCommand(s60CommandStart);
+        simulateSymbianCommand(s60CommandStart);
         //simulate "help" softkey press
-        qApp->symbianHandleCommand(s60CommandStart + 1);
+        simulateSymbianCommand(s60CommandStart + 1);
     }
     QApplication::processEvents();
     QCOMPARE(spy0.count(), 10);
@@ -212,16 +223,16 @@ void tst_QSoftKeyManager::checkSoftkeyEnableStates()
 
     for (int i = 0; i < 10; i++) {
         //simulate "Restore Defaults" softkey press
-        qApp->symbianHandleCommand(s60CommandStart);
+        simulateSymbianCommand(s60CommandStart);
         //simulate "help" softkey press
-        qApp->symbianHandleCommand(s60CommandStart + 1);
+        simulateSymbianCommand(s60CommandStart + 1);
         //switch enabled button to disabled and vice versa
         pBHelp->setEnabled(!pBHelp->isEnabled());
         pBDefaults->setEnabled(!pBDefaults->isEnabled());
     }
     QApplication::processEvents();
     QCOMPARE(spy0.count(), 5);
-    QCOMPARE(spy1.count(), 5);    
+    QCOMPARE(spy1.count(), 5);
 }
 
 QTEST_MAIN(tst_QSoftKeyManager)
-- 
cgit v0.12


From 58efa8aa5e845af2e3db840a8a654bd55fb98fb0 Mon Sep 17 00:00:00 2001
From: Frans Englich <frans.englich@nokia.com>
Date: Fri, 23 Oct 2009 11:52:05 +0200
Subject: Improve error handling.

Errors reported via:

* the DummyPlayer didn't work due to it not doing the usual state
  transitions/emission
* MediaObject::setSource() due to errors being emitted
  before connections being set up.
* A general state bug.

Task-number: QTBUG-4752
Reviewed-by: Gareth Stockwell
---
 src/3rdparty/phonon/mmf/abstractmediaplayer.cpp | 36 +++++++++----------------
 src/3rdparty/phonon/mmf/abstractmediaplayer.h   |  4 ---
 src/3rdparty/phonon/mmf/abstractplayer.cpp      | 32 +++++++++++++++++++---
 src/3rdparty/phonon/mmf/abstractplayer.h        |  9 +++++--
 src/3rdparty/phonon/mmf/dummyplayer.cpp         |  9 -------
 src/3rdparty/phonon/mmf/dummyplayer.h           |  4 ---
 src/3rdparty/phonon/mmf/mediaobject.cpp         | 14 ++++++----
 7 files changed, 57 insertions(+), 51 deletions(-)

diff --git a/src/3rdparty/phonon/mmf/abstractmediaplayer.cpp b/src/3rdparty/phonon/mmf/abstractmediaplayer.cpp
index af2c31e..998e861 100644
--- a/src/3rdparty/phonon/mmf/abstractmediaplayer.cpp
+++ b/src/3rdparty/phonon/mmf/abstractmediaplayer.cpp
@@ -359,26 +359,27 @@ qint64 MMF::AbstractMediaPlayer::toMilliSeconds(const TTimeIntervalMicroSeconds
     return in.Int64() / 1000;
 }
 
+//-----------------------------------------------------------------------------
+// Slots
+//-----------------------------------------------------------------------------
+
+void MMF::AbstractMediaPlayer::tick()
+{
+    // For the MWC compiler, we need to qualify the base class.
+    emit MMF::AbstractPlayer::tick(currentTime());
+}
+
 void MMF::AbstractMediaPlayer::changeState(PrivateState newState)
 {
-    TRACE_CONTEXT(AbstractPlayer::changeState, EAudioInternal);
-    TRACE_ENTRY("state %d newState %d", privateState(), newState);
+    TRACE_CONTEXT(AbstractMediaPlayer::changeState, EAudioInternal);
 
     // TODO: add some invariants to check that the transition is valid
+    AbstractPlayer::changeState(newState);
 
     const Phonon::State oldPhononState = phononState(privateState());
     const Phonon::State newPhononState = phononState(newState);
-    if (oldPhononState != newPhononState) {
-        TRACE("emit stateChanged(%d, %d)", newPhononState, oldPhononState);
-        emit stateChanged(newPhononState, oldPhononState);
-    }
-
-    setState(newState);
 
-    if (
-        LoadingState == oldPhononState
-        and StoppedState == newPhononState
-    ) {
+    if (LoadingState == oldPhononState && StoppedState == newPhononState) {
         // Ensure initial volume is set on MMF API before starting playback
         doVolumeChanged();
 
@@ -391,17 +392,6 @@ void MMF::AbstractMediaPlayer::changeState(PrivateState newState)
         }
     }
 
-    TRACE_EXIT_0();
-}
-
-//-----------------------------------------------------------------------------
-// Slots
-//-----------------------------------------------------------------------------
-
-void MMF::AbstractMediaPlayer::tick()
-{
-    // For the MWC compiler, we need to qualify the base class.
-    emit MMF::AbstractPlayer::tick(currentTime());
 }
 
 QT_END_NAMESPACE
diff --git a/src/3rdparty/phonon/mmf/abstractmediaplayer.h b/src/3rdparty/phonon/mmf/abstractmediaplayer.h
index 698b899..1ea236b 100644
--- a/src/3rdparty/phonon/mmf/abstractmediaplayer.h
+++ b/src/3rdparty/phonon/mmf/abstractmediaplayer.h
@@ -71,10 +71,6 @@ protected:
     virtual int setDeviceVolume(int mmfVolume) = 0;
     virtual int openFile(RFile& file) = 0;
     virtual void close() = 0;
-
-    /**
-     * Changes state and emits stateChanged()
-     */
     virtual void changeState(PrivateState newState);
 
 protected:
diff --git a/src/3rdparty/phonon/mmf/abstractplayer.cpp b/src/3rdparty/phonon/mmf/abstractplayer.cpp
index e3c0ecb..de2722d 100644
--- a/src/3rdparty/phonon/mmf/abstractplayer.cpp
+++ b/src/3rdparty/phonon/mmf/abstractplayer.cpp
@@ -118,12 +118,14 @@ void MMF::AbstractPlayer::videoOutputChanged()
     // Default behaviour is empty - overridden by VideoPlayer
 }
 
-void MMF::AbstractPlayer::setError(Phonon::ErrorType error)
+void MMF::AbstractPlayer::setError(Phonon::ErrorType error,
+                                   const QString &errorMessage)
 {
     TRACE_CONTEXT(AbstractPlayer::setError, EAudioInternal);
     TRACE_ENTRY("state %d error %d", m_state, error);
 
     m_error = error;
+    m_errorString = errorMessage;
     changeState(ErrorState);
 
     TRACE_EXIT_0();
@@ -138,9 +140,7 @@ Phonon::ErrorType MMF::AbstractPlayer::errorType() const
 
 QString MMF::AbstractPlayer::errorString() const
 {
-    // TODO: put in proper error strings
-    QString result;
-    return result;
+    return m_errorString;
 }
 
 Phonon::State MMF::AbstractPlayer::phononState() const
@@ -173,5 +173,29 @@ void MMF::AbstractPlayer::setState(PrivateState newState)
     m_state = newState;
 }
 
+void MMF::AbstractPlayer::changeState(PrivateState newState)
+{
+    TRACE_CONTEXT(AbstractPlayer::changeState, EAudioInternal);
+    TRACE_ENTRY("state %d newState %d", privateState(), newState);
+
+    // TODO: add some invariants to check that the transition is valid
+
+    const Phonon::State oldPhononState = phononState(privateState());
+
+    // We need to change the state before we emit stateChanged(), because
+    // some user code, for instance the mediaplayer, switch on MediaObject's
+    // state.
+    setState(newState);
+
+    const Phonon::State newPhononState = phononState(newState);
+
+    if (oldPhononState != newPhononState) {
+        TRACE("emit stateChanged(%d, %d)", newPhononState, oldPhononState);
+        emit stateChanged(newPhononState, oldPhononState);
+    }
+
+    TRACE_EXIT_0();
+}
+
 QT_END_NAMESPACE
 
diff --git a/src/3rdparty/phonon/mmf/abstractplayer.h b/src/3rdparty/phonon/mmf/abstractplayer.h
index 08558cf..1c4ea02 100644
--- a/src/3rdparty/phonon/mmf/abstractplayer.h
+++ b/src/3rdparty/phonon/mmf/abstractplayer.h
@@ -93,7 +93,8 @@ public:
     /**
      * Records error and changes state to ErrorState
      */
-    void setError(Phonon::ErrorType error);
+    void setError(Phonon::ErrorType error,
+                  const QString &errorMessage = QString());
 
     Phonon::State state() const;
 Q_SIGNALS:
@@ -132,7 +133,10 @@ protected:
 
     PrivateState privateState() const;
 
-    virtual void changeState(PrivateState newState) = 0;
+    /**
+     * Changes state and emits stateChanged()
+     */
+    virtual void changeState(PrivateState newState);
 
     /**
      * Modifies m_state directly. Typically you want to call changeState(),
@@ -152,6 +156,7 @@ protected:
 private:
     PrivateState                m_state;
     Phonon::ErrorType           m_error;
+    QString                     m_errorString;
     qint32                      m_tickInterval;
     qint32                      m_transitionTime;
     qint32                      m_prefinishMark;
diff --git a/src/3rdparty/phonon/mmf/dummyplayer.cpp b/src/3rdparty/phonon/mmf/dummyplayer.cpp
index bd21d20..e6f3855 100644
--- a/src/3rdparty/phonon/mmf/dummyplayer.cpp
+++ b/src/3rdparty/phonon/mmf/dummyplayer.cpp
@@ -87,11 +87,6 @@ qint64 MMF::DummyPlayer::currentTime() const
     return 0;
 }
 
-QString MMF::DummyPlayer::errorString() const
-{
-    return QString();
-}
-
 Phonon::ErrorType MMF::DummyPlayer::errorType() const
 {
     return Phonon::NoError;
@@ -127,9 +122,5 @@ void MMF::DummyPlayer::doSetTickInterval(qint32)
 
 }
 
-void MMF::DummyPlayer::changeState(PrivateState)
-{
-}
-
 QT_END_NAMESPACE
 
diff --git a/src/3rdparty/phonon/mmf/dummyplayer.h b/src/3rdparty/phonon/mmf/dummyplayer.h
index 9ff9f78..c6270c9 100644
--- a/src/3rdparty/phonon/mmf/dummyplayer.h
+++ b/src/3rdparty/phonon/mmf/dummyplayer.h
@@ -54,7 +54,6 @@ public:
     virtual bool isSeekable() const;
     virtual qint64 currentTime() const;
     virtual Phonon::State state() const;
-    virtual QString errorString() const;
     virtual Phonon::ErrorType errorType() const;
     virtual qint64 totalTime() const;
     virtual MediaSource source() const;
@@ -64,9 +63,6 @@ public:
 
     // AbstractPlayer
     virtual void doSetTickInterval(qint32 interval);
-
-protected:
-    virtual void changeState(PrivateState newState);
 };
 }
 }
diff --git a/src/3rdparty/phonon/mmf/mediaobject.cpp b/src/3rdparty/phonon/mmf/mediaobject.cpp
index 29ac2df..74aaa58 100644
--- a/src/3rdparty/phonon/mmf/mediaobject.cpp
+++ b/src/3rdparty/phonon/mmf/mediaobject.cpp
@@ -239,6 +239,7 @@ void MMF::MediaObject::createPlayer(const MediaSource &source)
     const bool oldPlayerSeekable = oldPlayer->isSeekable();
 
     Phonon::ErrorType error = NoError;
+    QString errorMessage;
 
     // Determine media type
     switch (source.type()) {
@@ -253,7 +254,7 @@ void MMF::MediaObject::createPlayer(const MediaSource &source)
                 mediaType = fileMediaType(url.toLocalFile());
             }
             else {
-                TRACE_0("Network streaming not supported yet");
+                errorMessage = QLatin1String("Network streaming not supported yet");
                 error = NormalError;
             }
         }
@@ -286,7 +287,8 @@ void MMF::MediaObject::createPlayer(const MediaSource &source)
             newPlayer = new DummyPlayer();
         }
 
-        newPlayer->setError(NormalError);
+        error = NormalError;
+        errorMessage = tr("Media type could not be determined");
         break;
 
     case MediaTypeAudio:
@@ -321,9 +323,11 @@ void MMF::MediaObject::createPlayer(const MediaSource &source)
     connect(m_player.data(), SIGNAL(finished()), SIGNAL(finished()));
     connect(m_player.data(), SIGNAL(tick(qint64)), SIGNAL(tick(qint64)));
 
-    if (error != NoError ) {
-        newPlayer = new DummyPlayer();
-        newPlayer->setError(error);
+    // We need to call setError() after doing the connects, otherwise the
+    // error won't be received.
+    if (error != NoError) {
+        Q_ASSERT(m_player);
+        m_player->setError(error, errorMessage);
     }
 
     TRACE_EXIT_0();
-- 
cgit v0.12


From 7ee0143a417678f7108838230c5ada3bbd62c6cc Mon Sep 17 00:00:00 2001
From: Frans Englich <frans.englich@nokia.com>
Date: Fri, 23 Oct 2009 16:56:58 +0200
Subject: Fix build caused by merge error.

---
 demos/qmediaplayer/mediaplayer.h | 1 -
 1 file changed, 1 deletion(-)

diff --git a/demos/qmediaplayer/mediaplayer.h b/demos/qmediaplayer/mediaplayer.h
index f3af7cc..08db0e5 100644
--- a/demos/qmediaplayer/mediaplayer.h
+++ b/demos/qmediaplayer/mediaplayer.h
@@ -93,7 +93,6 @@ public slots:
     void playPause();
     void scaleChanged(QAction *);
     void aspectChanged(QAction *);
-    void hasVideoChanged(bool);
 
 private slots:
     void setAspect(int);
-- 
cgit v0.12


From 17a254a1b231393ada1f80f29d989ee71ff8fff4 Mon Sep 17 00:00:00 2001
From: Thierry Bastian <thierry.bastian@nokia.com>
Date: Fri, 30 Oct 2009 14:30:59 +0100
Subject: QTreeView navigation now inverts left and right in RTL

Task-number: QTBUG-5007
Reviewed-by: ogoffart
---
 src/gui/itemviews/qtreeview.cpp | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/src/gui/itemviews/qtreeview.cpp b/src/gui/itemviews/qtreeview.cpp
index 3856293..a3cbc0d 100644
--- a/src/gui/itemviews/qtreeview.cpp
+++ b/src/gui/itemviews/qtreeview.cpp
@@ -2113,6 +2113,12 @@ QModelIndex QTreeView::moveCursor(CursorAction cursorAction, Qt::KeyboardModifie
     if (vi < 0)
         vi = qMax(0, d->viewIndex(current));
 
+    if (isRightToLeft()) {
+        if (cursorAction == MoveRight)
+            cursorAction = MoveLeft;
+        else if (cursorAction == MoveLeft)
+            cursorAction = MoveRight;
+    }
     switch (cursorAction) {
     case MoveNext:
     case MoveDown:
-- 
cgit v0.12


From 6584d601f9569ce7bfc704cb604472d324dfd253 Mon Sep 17 00:00:00 2001
From: David Faure <faure@kde.org>
Date: Fri, 30 Oct 2009 14:48:24 +0100
Subject: One signal/slot connection is enough, when exporting N signals to
 DBus

When exporting an object to DBus, and the object has N signals, this code
was connecting the QDBusConnectionPrivate multiple times to the destroyed
signal of the object.

Merge-request: 1961
Reviewed-by: Olivier Goffart <ogoffart@trolltech.com>
---
 src/dbus/qdbusintegrator.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/dbus/qdbusintegrator.cpp b/src/dbus/qdbusintegrator.cpp
index fb2dd77..686b56f 100644
--- a/src/dbus/qdbusintegrator.cpp
+++ b/src/dbus/qdbusintegrator.cpp
@@ -1937,7 +1937,7 @@ void QDBusConnectionPrivate::connectSignal(const QString &key, const SignalHook
 {
     signalHooks.insertMulti(key, hook);
     connect(hook.obj, SIGNAL(destroyed(QObject*)), SLOT(objectDestroyed(QObject*)),
-            Qt::DirectConnection);
+            Qt::ConnectionType(Qt::DirectConnection | Qt::UniqueConnection));
 
     MatchRefCountHash::iterator it = matchRefCounts.find(hook.matchRule);
 
-- 
cgit v0.12


From a3dbe4c00062ad78c924162841cc2d83709b1ea4 Mon Sep 17 00:00:00 2001
From: Thierry Bastian <thierry.bastian@nokia.com>
Date: Fri, 30 Oct 2009 15:07:47 +0100
Subject: Animations in mainwindow could sometimes misplace the tabbar

We used to not start an animation of the current geometry was already
set. The problem is that starting this animation might stop another
animation. This has to happen. Otherwise subsequent calls to animate
a widget might or might not be executed.

Reviewed-by: ogoffart
---
 src/gui/widgets/qwidgetanimator.cpp | 7 -------
 src/gui/widgets/qwidgetanimator_p.h | 1 -
 2 files changed, 8 deletions(-)

diff --git a/src/gui/widgets/qwidgetanimator.cpp b/src/gui/widgets/qwidgetanimator.cpp
index f440961..4a7ae00 100644
--- a/src/gui/widgets/qwidgetanimator.cpp
+++ b/src/gui/widgets/qwidgetanimator.cpp
@@ -88,8 +88,6 @@ void QWidgetAnimator::animate(QWidget *widget, const QRect &_final_geometry, boo
     const QRect final_geometry = _final_geometry.isValid() || widget->isWindow() ? _final_geometry :
         QRect(QPoint(-500 - widget->width(), -500 - widget->height()), widget->size());
 
-    if (r == final_geometry)
-        return; //the widget is already where it should be
 #ifndef QT_NO_ANIMATION
     AnimationMap::const_iterator it = m_animation_map.constFind(widget);
     if (it != m_animation_map.constEnd() && (*it)->endValue().toRect() == final_geometry)
@@ -114,9 +112,4 @@ bool QWidgetAnimator::animating() const
     return !m_animation_map.isEmpty();
 }
 
-bool QWidgetAnimator::animating(QWidget *widget) const
-{
-    return m_animation_map.contains(widget);
-}
-
 QT_END_NAMESPACE
diff --git a/src/gui/widgets/qwidgetanimator_p.h b/src/gui/widgets/qwidgetanimator_p.h
index 68d9344..095380f 100644
--- a/src/gui/widgets/qwidgetanimator_p.h
+++ b/src/gui/widgets/qwidgetanimator_p.h
@@ -70,7 +70,6 @@ public:
     QWidgetAnimator(QMainWindowLayout *layout);
     void animate(QWidget *widget, const QRect &final_geometry, bool animate);
     bool animating() const;
-    bool animating(QWidget *widget) const;
 
     void abort(QWidget *widget);
 
-- 
cgit v0.12


From e1a08048f29174c01e289a4f608aaa283819c5d5 Mon Sep 17 00:00:00 2001
From: Olivier Goffart <ogoffart@trolltech.com>
Date: Mon, 2 Nov 2009 10:51:47 +0100
Subject: QStyleSheetStyle: fixes QPushButton { text-alignement:top }

The vertial alignement was correctly set later in the function but
Qt::AlignVCenter was always set, conflicting with the flags from
textAlignment

Reviewed-by: Gabriel
Task-number: QTBUG-5110
Task-number: 240367
---
 src/gui/styles/qstylesheetstyle.cpp | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/src/gui/styles/qstylesheetstyle.cpp b/src/gui/styles/qstylesheetstyle.cpp
index 2d90aa1..2ae9f6a 100644
--- a/src/gui/styles/qstylesheetstyle.cpp
+++ b/src/gui/styles/qstylesheetstyle.cpp
@@ -3370,7 +3370,9 @@ void QStyleSheetStyle::drawControl(ControlElement ce, const QStyleOption *opt, Q
             if (rule.hasPosition() && rule.position()->textAlignment != 0) {
                 Qt::Alignment textAlignment = rule.position()->textAlignment;
                 QRect textRect = button->rect;
-                uint tf = Qt::AlignVCenter | Qt::TextShowMnemonic;
+                uint tf = Qt::TextShowMnemonic;
+                const uint verticalAlignMask = Qt::AlignVCenter | Qt::AlignTop | Qt::AlignLeft;
+                tf |= (textAlignment & verticalAlignMask) ? (textAlignment & verticalAlignMask) : Qt::AlignVCenter;
                 if (!styleHint(SH_UnderlineShortcut, button, w))
                     tf |= Qt::TextHideMnemonic;
                 if (!button->icon.isNull()) {
-- 
cgit v0.12


From be651bb65e952743f4bc31a970750be501bcf978 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jan-Arve=20S=C3=A6ther?= <jan-arve.saether@nokia.com>
Date: Mon, 2 Nov 2009 11:31:01 +0100
Subject: Enable the RightToLeft (mirrored) test for basic layout tests.

---
 tests/auto/qgraphicsanchorlayout1/tst_qgraphicsanchorlayout1.cpp | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/tests/auto/qgraphicsanchorlayout1/tst_qgraphicsanchorlayout1.cpp b/tests/auto/qgraphicsanchorlayout1/tst_qgraphicsanchorlayout1.cpp
index 1c7a159..1a19162 100644
--- a/tests/auto/qgraphicsanchorlayout1/tst_qgraphicsanchorlayout1.cpp
+++ b/tests/auto/qgraphicsanchorlayout1/tst_qgraphicsanchorlayout1.cpp
@@ -1715,8 +1715,6 @@ void tst_QGraphicsAnchorLayout1::testBasicLayout()
         QCOMPARE(widgets[item.index]->geometry(), item.rect);
     }
 
-    // ###: not supported yet
-/*
     // Test mirrored mode
     widget->setLayoutDirection(Qt::RightToLeft);
     layout->activate();
@@ -1731,7 +1729,7 @@ void tst_QGraphicsAnchorLayout1::testBasicLayout()
         QCOMPARE(widgets[item.index]->geometry(), mirroredRect);
         delete widgets[item.index];
     }
-*/
+
     delete widget;
 }
 
-- 
cgit v0.12


From bdcde683bc863d0c574b1e4d64b5a16ba0130596 Mon Sep 17 00:00:00 2001
From: Thierry Bastian <thierry.bastian@nokia.com>
Date: Mon, 2 Nov 2009 14:04:21 +0100
Subject: Make animation timer slightly more accurate with default interval of
 15

On windows this will make it much more accurate

Reviewed-by: ogoffart
---
 src/corelib/animation/qabstractanimation.cpp | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/corelib/animation/qabstractanimation.cpp b/src/corelib/animation/qabstractanimation.cpp
index a4c7e29..7fa3ae3 100644
--- a/src/corelib/animation/qabstractanimation.cpp
+++ b/src/corelib/animation/qabstractanimation.cpp
@@ -156,7 +156,8 @@
 
 #ifndef QT_NO_ANIMATION
 
-#define DEFAULT_TIMER_INTERVAL 16
+//with 15 ms we get more accuracy on windows (it uses the multimedia timer)
+#define DEFAULT_TIMER_INTERVAL 15
 #define STARTSTOP_TIMER_DELAY 0
 
 QT_BEGIN_NAMESPACE
-- 
cgit v0.12


From e6da35f6055d3ae7acf38d89456d3047f055a9cd Mon Sep 17 00:00:00 2001
From: Olivier Goffart <ogoffart@trolltech.com>
Date: Mon, 2 Nov 2009 14:07:15 +0100
Subject: QStyleSheetStyle: ItemViews: Fixes drawing of items and branches.

I am not sure why the code was there, but after some testing, it is better
to remove it:

 - While painting the branch, we should not look at the ::item pseudo class
   at all.
 - Items specific stuff is drawn in PE_PanelItemViewItem, not PE_PanelItemViewRow
 - Selection is handled his way by the native style. background-color is not for
   selection and should not depends on SH_ItemView_ShowDecorationSelected

Reviewed-by: Thierry
Task-number: QTBUG-5228
Task-number: 258382
Task-number: QTBUG-4338
---
 src/gui/styles/qstylesheetstyle.cpp                |  30 +---
 .../uiloader/baseline/css_itemview_task258382.ui   | 179 +++++++++++++++++++++
 2 files changed, 180 insertions(+), 29 deletions(-)
 create mode 100644 tests/auto/uiloader/baseline/css_itemview_task258382.ui

diff --git a/src/gui/styles/qstylesheetstyle.cpp b/src/gui/styles/qstylesheetstyle.cpp
index 32f259b..a224218 100644
--- a/src/gui/styles/qstylesheetstyle.cpp
+++ b/src/gui/styles/qstylesheetstyle.cpp
@@ -4277,23 +4277,7 @@ void QStyleSheetStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *op
                     p->fillRect(v2->rect, v2->palette.alternateBase());
                 subRule.drawRule(p, opt->rect);
             } else {
-                QStyleOptionViewItemV2 v2Copy(*v2);
-                if (v2->showDecorationSelected) {
-                    QRenderRule subRule2 = renderRule(w, opt, PseudoElement_ViewItem);
-                    if (v2->state & QStyle::State_Selected) {
-                        subRule2.configurePalette(&v2Copy.palette, QPalette::NoRole, QPalette::Highlight);
-                    } else if (v2->features & QStyleOptionViewItemV2::Alternate) {
-                        subRule2.configurePalette(&v2Copy.palette, QPalette::NoRole, QPalette::AlternateBase);
-                    } else if (subRule2.hasBackground()) {
-                        p->fillRect(v2->rect, subRule2.background()->brush);
-                    }
-                } else if (v2->features & QStyleOptionViewItemV2::Alternate) {
-                    quint64 pc = v2->state & QStyle::State_Enabled ? PseudoClass_Enabled : PseudoClass_Disabled;
-                    pc |= PseudoClass_Alternate;
-                    QRenderRule subRule2 = renderRule(w, PseudoElement_ViewItem, pc);
-                    subRule2.configurePalette(&v2Copy.palette, QPalette::NoRole, QPalette::AlternateBase);
-                }
-                baseStyle()->drawPrimitive(pe, &v2Copy, p, w);
+                baseStyle()->drawPrimitive(pe, v2, p, w);
             }
         }
         return;
@@ -4358,18 +4342,6 @@ void QStyleSheetStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *op
         break;
 
     case PE_PanelItemViewItem:
-        if (!styleHint(SH_ItemView_ShowDecorationSelected, opt, w)) {
-            rect = subElementRect(QStyle::SE_ItemViewItemText,  opt, w)
-                   | subElementRect(QStyle::SE_ItemViewItemDecoration, opt, w)
-                   | subElementRect(QStyle::SE_ItemViewItemCheckIndicator, opt, w);
-        }
-        pseudoElement = PseudoElement_ViewItem;
-        break;
-
-    case PE_PanelItemViewRow:
-        ParentStyle::drawPrimitive(pe, opt, p, w);
-        if (!styleHint(SH_ItemView_ShowDecorationSelected, opt, w))
-            return;
         pseudoElement = PseudoElement_ViewItem;
         break;
 
diff --git a/tests/auto/uiloader/baseline/css_itemview_task258382.ui b/tests/auto/uiloader/baseline/css_itemview_task258382.ui
new file mode 100644
index 0000000..11c56b4
--- /dev/null
+++ b/tests/auto/uiloader/baseline/css_itemview_task258382.ui
@@ -0,0 +1,179 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>Form</class>
+ <widget class="QWidget" name="Form">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>437</width>
+    <height>352</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Form</string>
+  </property>
+  <property name="styleSheet">
+   <string notr="true">::item { border: 1px solid black;  background-color: purple; }
+::item {margin-left: 20px; }
+
+QAbstractItemView { selection-background-color: red;
+show-decoration- selected: 0;
+ }
+
+::item:selected {  background-color: yellow; }</string>
+  </property>
+  <layout class="QGridLayout" name="gridLayout">
+   <item row="0" column="0">
+    <widget class="QTreeWidget" name="treeWidget">
+     <column>
+      <property name="text">
+       <string>1</string>
+      </property>
+     </column>
+     <column>
+      <property name="text">
+       <string>New Column</string>
+      </property>
+     </column>
+     <item>
+      <property name="text">
+       <string>New Item</string>
+      </property>
+     </item>
+     <item>
+      <property name="text">
+       <string>New Item</string>
+      </property>
+     </item>
+     <item>
+      <property name="text">
+       <string>New Item</string>
+      </property>
+      <item>
+       <property name="text">
+        <string>New Subitem</string>
+       </property>
+       <item>
+        <property name="text">
+         <string>New Subitem</string>
+        </property>
+       </item>
+       <item>
+        <property name="text">
+         <string>New Item</string>
+        </property>
+       </item>
+       <item>
+        <property name="text">
+         <string>New Item</string>
+        </property>
+       </item>
+      </item>
+     </item>
+    </widget>
+   </item>
+   <item row="1" column="0">
+    <widget class="QTableWidget" name="tableWidget">
+     <row>
+      <property name="text">
+       <string>New Row</string>
+      </property>
+     </row>
+     <row>
+      <property name="text">
+       <string>New Row</string>
+      </property>
+     </row>
+     <row>
+      <property name="text">
+       <string>New Row</string>
+      </property>
+     </row>
+     <row>
+      <property name="text">
+       <string>New Row</string>
+      </property>
+     </row>
+     <row>
+      <property name="text">
+       <string>New Row</string>
+      </property>
+     </row>
+     <column>
+      <property name="text">
+       <string>New Column</string>
+      </property>
+     </column>
+     <column>
+      <property name="text">
+       <string>New Column</string>
+      </property>
+     </column>
+     <column>
+      <property name="text">
+       <string>New Column</string>
+      </property>
+     </column>
+     <column>
+      <property name="text">
+       <string>New Column</string>
+      </property>
+     </column>
+     <item row="0" column="0">
+      <property name="text">
+       <string>mljkh mh mjl</string>
+      </property>
+     </item>
+     <item row="0" column="1">
+      <property name="text">
+       <string>h jlh mjklh </string>
+      </property>
+     </item>
+     <item row="0" column="2">
+      <property name="text">
+       <string>mjklh mlhj mjlh m</string>
+      </property>
+     </item>
+     <item row="1" column="3">
+      <property name="text">
+       <string>mlhj lmhj </string>
+      </property>
+     </item>
+     <item row="2" column="0">
+      <property name="text">
+       <string>mlkj l</string>
+      </property>
+     </item>
+     <item row="2" column="1">
+      <property name="text">
+       <string>mlkj </string>
+      </property>
+     </item>
+     <item row="2" column="2">
+      <property name="text">
+       <string>mlkj lmkj </string>
+      </property>
+     </item>
+     <item row="2" column="3">
+      <property name="text">
+       <string>mlkhj mlh</string>
+      </property>
+     </item>
+     <item row="3" column="1">
+      <property name="text">
+       <string>mlkj lmkj </string>
+      </property>
+     </item>
+     <item row="4" column="0">
+      <property name="text">
+       <string>mlkj lmkj </string>
+      </property>
+     </item>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
-- 
cgit v0.12


From 8d01f436451071a917c147a96a979ccdaee106f9 Mon Sep 17 00:00:00 2001
From: Olivier Goffart <ogoffart@trolltech.com>
Date: Mon, 2 Nov 2009 14:49:33 +0100
Subject: QCSSParser: Fixes the way spaces are handled in font family.

We cannot simplify spaces because a font may have several spaces in
its name.
If we only add spaces when needed when merging tokens, we don't need
to simplyfy the string later

The CSS tokenizer will already make sure that spaces are removed if
there is no quotes (btw, the CSS specification says that there must
be quotes if there is spaces, but we tollerate if there is no quotes)

Reviewed-by: Jocelyn Turcotte
Task-number: QTBUG-4344
Task-number: 258586
---
 src/gui/text/qcssparser.cpp                                    |  7 +++++--
 tests/auto/qcssparser/tst_qcssparser.cpp                       |  3 +++
 tests/auto/qtextdocumentfragment/tst_qtextdocumentfragment.cpp | 10 ++++++++++
 3 files changed, 18 insertions(+), 2 deletions(-)

diff --git a/src/gui/text/qcssparser.cpp b/src/gui/text/qcssparser.cpp
index 6db86bd..93b9fc6 100644
--- a/src/gui/text/qcssparser.cpp
+++ b/src/gui/text/qcssparser.cpp
@@ -1129,19 +1129,22 @@ static bool setFontWeightFromValue(const Value &value, QFont *font)
 static bool setFontFamilyFromValues(const QVector<Value> &values, QFont *font, int start = 0)
 {
     QString family;
+    bool shouldAddSpace = false;
     for (int i = start; i < values.count(); ++i) {
         const Value &v = values.at(i);
         if (v.type == Value::TermOperatorComma) {
             family += QLatin1Char(',');
+            shouldAddSpace = false;
             continue;
         }
         const QString str = v.variant.toString();
         if (str.isEmpty())
             break;
+        if (shouldAddSpace)
+            family += QLatin1Char(' ');
         family += str;
-        family += QLatin1Char(' ');
+        shouldAddSpace = true;
     }
-    family = family.simplified();
     if (family.isEmpty())
         return false;
     font->setFamily(family);
diff --git a/tests/auto/qcssparser/tst_qcssparser.cpp b/tests/auto/qcssparser/tst_qcssparser.cpp
index 150f131..3580252 100644
--- a/tests/auto/qcssparser/tst_qcssparser.cpp
+++ b/tests/auto/qcssparser/tst_qcssparser.cpp
@@ -1556,8 +1556,11 @@ void tst_QCssParser::extractFontFamily_data()
     QTest::newRow("shorthand") << "font: 12pt Times New Roman" << QString("Times New Roman");
     QTest::newRow("shorthand multiple quote") << "font: 12pt invalid, \"Times New Roman\" " << QString("Times New Roman");
     QTest::newRow("shorthand multiple") << "font: 12pt invalid, Times New Roman " << QString("Times New Roman");
+    QTest::newRow("invalid spaces") << "font-family: invalid spaces, Times New Roman " << QString("Times New Roman");
+    QTest::newRow("invalid spaces quotes") << "font-family: 'invalid spaces', 'Times New Roman' " << QString("Times New Roman");
 }
 
+
 void tst_QCssParser::extractFontFamily()
 {
     QFETCH(QString, css);
diff --git a/tests/auto/qtextdocumentfragment/tst_qtextdocumentfragment.cpp b/tests/auto/qtextdocumentfragment/tst_qtextdocumentfragment.cpp
index 8c4d8fd..4dc732c 100644
--- a/tests/auto/qtextdocumentfragment/tst_qtextdocumentfragment.cpp
+++ b/tests/auto/qtextdocumentfragment/tst_qtextdocumentfragment.cpp
@@ -2197,6 +2197,16 @@ void tst_QTextDocumentFragment::html_quotedFontFamily()
 
     setHtml("<div style='font-family: \"Foo Bar\";'>Test</div>");
     QCOMPARE(doc->begin().begin().fragment().charFormat().fontFamily(), QString("Foo Bar"));
+
+    setHtml("<div style='font-family: \"Foo  Bar\";'>Test</div>");
+    QCOMPARE(doc->begin().begin().fragment().charFormat().fontFamily(), QString("Foo  Bar"));
+
+    setHtml("<div style='font-family: Foo\n  Bar;'>Test</div>");
+    QCOMPARE(doc->begin().begin().fragment().charFormat().fontFamily(), QString("Foo Bar"));
+
+    setHtml("<div style='font-family: Foo\n  Bar, serif, \"bar foo\";'>Test</div>");
+    QCOMPARE(doc->begin().begin().fragment().charFormat().fontFamily(), QString("Foo Bar,serif,bar foo"));
+
 }
 
 void tst_QTextDocumentFragment::defaultFont()
-- 
cgit v0.12


From 8abe466caa1b38f4cc1f95fba83d5e61e611e931 Mon Sep 17 00:00:00 2001
From: Thierry Bastian <thierry.bastian@nokia.com>
Date: Mon, 2 Nov 2009 15:45:49 +0100
Subject: Make the combobox emit activated when it loses focus

Task-number: QTBUG-1071
Reviewed-by: ogoffart
---
 src/gui/widgets/qcombobox.cpp          | 37 ++++++++++++++++++++++++++--------
 src/gui/widgets/qcombobox.h            |  1 +
 src/gui/widgets/qcombobox_p.h          |  2 ++
 tests/auto/qcombobox/tst_qcombobox.cpp | 31 ++++++++++++++++++++++++++++
 4 files changed, 63 insertions(+), 8 deletions(-)

diff --git a/src/gui/widgets/qcombobox.cpp b/src/gui/widgets/qcombobox.cpp
index 1879db4..bd1d8ba 100644
--- a/src/gui/widgets/qcombobox.cpp
+++ b/src/gui/widgets/qcombobox.cpp
@@ -1111,6 +1111,32 @@ void QComboBoxPrivate::updateLineEditGeometry()
     lineEdit->setGeometry(editRect);
 }
 
+Qt::MatchFlags QComboBoxPrivate::matchFlags() const
+{
+    // Base how duplicates are determined on the autocompletion case sensitivity
+    Qt::MatchFlags flags = Qt::MatchFixedString;
+#ifndef QT_NO_COMPLETER
+    if (!lineEdit->completer() || lineEdit->completer()->caseSensitivity() == Qt::CaseSensitive)
+#endif
+        flags |= Qt::MatchCaseSensitive;
+    return flags;
+}
+
+
+void QComboBoxPrivate::_q_editingFinished()
+{
+    Q_Q(QComboBox);
+    if (lineEdit && !lineEdit->text().isEmpty()) {
+        //here we just check if the current item was entered
+        const int index = q_func()->findText(lineEdit->text(), matchFlags());
+        if (index != -1 && itemText(currentIndex) != lineEdit->text()) {
+            q->setCurrentIndex(index);
+            emitActivated(currentIndex);
+        }
+    }
+
+}
+
 void QComboBoxPrivate::_q_returnPressed()
 {
     Q_Q(QComboBox);
@@ -1123,13 +1149,7 @@ void QComboBoxPrivate::_q_returnPressed()
         // check for duplicates (if not enabled) and quit
         int index = -1;
         if (!duplicatesEnabled) {
-            // Base how duplicates are determined on the autocompletion case sensitivity
-            Qt::MatchFlags flags = Qt::MatchFixedString;
-#ifndef QT_NO_COMPLETER
-            if (!lineEdit->completer() || lineEdit->completer()->caseSensitivity() == Qt::CaseSensitive)
-#endif
-                flags |= Qt::MatchCaseSensitive;
-            index = q->findText(text, flags);
+            index = q->findText(text, matchFlags());
             if (index != -1) {
                 q->setCurrentIndex(index);
                 emitActivated(currentIndex);
@@ -1664,6 +1684,7 @@ void QComboBox::setLineEdit(QLineEdit *edit)
     if (d->lineEdit->parent() != this)
         d->lineEdit->setParent(this);
     connect(d->lineEdit, SIGNAL(returnPressed()), this, SLOT(_q_returnPressed()));
+    connect(d->lineEdit, SIGNAL(editingFinished()), this, SLOT(_q_editingFinished()));
     connect(d->lineEdit, SIGNAL(textChanged(QString)), this, SIGNAL(editTextChanged(QString)));
 #ifdef QT3_SUPPORT
     connect(d->lineEdit, SIGNAL(textChanged(QString)), this, SIGNAL(textChanged(QString)));
@@ -1960,7 +1981,7 @@ void QComboBoxPrivate::setCurrentIndex(const QModelIndex &mi)
     if (lineEdit) {
         QString newText = q->itemText(currentIndex.row());
         if (lineEdit->text() != newText)
-            lineEdit->setText(q->itemText(currentIndex.row()));
+            lineEdit->setText(newText);
         updateLineEditGeometry();
     }
     if (indexChanged) {
diff --git a/src/gui/widgets/qcombobox.h b/src/gui/widgets/qcombobox.h
index 4089a09..485e562 100644
--- a/src/gui/widgets/qcombobox.h
+++ b/src/gui/widgets/qcombobox.h
@@ -305,6 +305,7 @@ private:
     Q_PRIVATE_SLOT(d_func(), void _q_itemSelected(const QModelIndex &item))
     Q_PRIVATE_SLOT(d_func(), void _q_emitHighlighted(const QModelIndex &))
     Q_PRIVATE_SLOT(d_func(), void _q_emitCurrentIndexChanged(const QModelIndex &index))
+    Q_PRIVATE_SLOT(d_func(), void _q_editingFinished())
     Q_PRIVATE_SLOT(d_func(), void _q_returnPressed())
     Q_PRIVATE_SLOT(d_func(), void _q_resetButton())
     Q_PRIVATE_SLOT(d_func(), void _q_dataChanged(const QModelIndex &, const QModelIndex &))
diff --git a/src/gui/widgets/qcombobox_p.h b/src/gui/widgets/qcombobox_p.h
index fe42c47..f6ba57c 100644
--- a/src/gui/widgets/qcombobox_p.h
+++ b/src/gui/widgets/qcombobox_p.h
@@ -342,6 +342,8 @@ public:
     void init();
     QComboBoxPrivateContainer* viewContainer();
     void updateLineEditGeometry();
+    Qt::MatchFlags matchFlags() const;
+    void _q_editingFinished();
     void _q_returnPressed();
     void _q_complete();
     void _q_itemSelected(const QModelIndex &item);
diff --git a/tests/auto/qcombobox/tst_qcombobox.cpp b/tests/auto/qcombobox/tst_qcombobox.cpp
index 51a7ff8..06c632d 100644
--- a/tests/auto/qcombobox/tst_qcombobox.cpp
+++ b/tests/auto/qcombobox/tst_qcombobox.cpp
@@ -57,6 +57,7 @@
 #include <qtreewidget.h>
 #include <qtablewidget.h>
 #include <qscrollbar.h>
+#include <qboxlayout.h>
 #ifdef Q_WS_MAC
 #include <qmacstyle_mac.h>
 #elif defined Q_WS_X11
@@ -154,6 +155,7 @@ private slots:
     void removeItem();
     void resetModel();
     void keyBoardNavigationWithMouse();
+    void task_QTBUG_1071_changingFocusEmitsActivated();
 
 protected slots:
     void onEditTextChanged( const QString &newString );
@@ -813,21 +815,25 @@ void tst_QComboBox::autoCompletionCaseSensitivity()
 
     // case insensitive
     testWidget->clearEditText();
+    QSignalSpy spyReturn(testWidget, SIGNAL(activated(int)));
     testWidget->setAutoCompletionCaseSensitivity(Qt::CaseInsensitive);
     QVERIFY(testWidget->autoCompletionCaseSensitivity() == Qt::CaseInsensitive);
 
     QTest::keyClick(testWidget->lineEdit(), Qt::Key_A);
     qApp->processEvents();
     QCOMPARE(testWidget->currentText(), QString("aww"));
+    QCOMPARE(spyReturn.count(), 0);
 
     QTest::keyClick(testWidget->lineEdit(), Qt::Key_B);
     qApp->processEvents();
     // autocompletions preserve userkey-case from 4.2
     QCOMPARE(testWidget->currentText(), QString("abCDEF"));
+    QCOMPARE(spyReturn.count(), 0);
 
     QTest::keyClick(testWidget->lineEdit(), Qt::Key_Enter);
     qApp->processEvents();
     QCOMPARE(testWidget->currentText(), QString("aBCDEF")); // case restored to item's case
+    QCOMPARE(spyReturn.count(), 1);
 
     testWidget->clearEditText();
     QTest::keyClick(testWidget->lineEdit(), 'c');
@@ -2500,6 +2506,31 @@ void tst_QComboBox::keyBoardNavigationWithMouse()
     QTRY_COMPARE(combo.currentText(), QString::number(final));
 }
 
+void tst_QComboBox::task_QTBUG_1071_changingFocusEmitsActivated()
+{
+    QWidget w;
+    QVBoxLayout layout(&w);
+    QComboBox cb;
+    cb.setEditable(true);
+    QSignalSpy spy(&cb, SIGNAL(activated(int)));
+    cb.addItem("0");
+    cb.addItem("1");
+    cb.addItem("2");
+    QLineEdit edit;
+    layout.add(&cb);
+    layout.add(&edit);
+
+    w.show();
+    QTest::qWaitForWindowShown(&w);
+    cb.clearEditText();
+    cb.setFocus();
+    QApplication::processEvents();
+    QTest::keyClick(0, '1');
+    QCOMPARE(spy.count(), 0);
+    edit.setFocus();
+    QTRY_VERIFY(edit.hasFocus());
+    QCOMPARE(spy.count(), 1);
+}
 
 QTEST_MAIN(tst_QComboBox)
 #include "tst_qcombobox.moc"
-- 
cgit v0.12


From 11dea4a8b227801c110f791f350632bf6f0c958d Mon Sep 17 00:00:00 2001
From: Gabriel de Dietrich <gabriel.dietrich-de@nokia.com>
Date: Mon, 2 Nov 2009 15:25:19 +0100
Subject: Fixed spacing display in QListView with wrapped text.

The spacing was not being substracted from the viewport width when calculating
the available space for items. Auto-test included.

Reviewed-by: Olivier
Task-number: QTBUG-2678
---
 src/gui/itemviews/qlistview.cpp        | 10 +++++-----
 tests/auto/qlistview/tst_qlistview.cpp | 15 +++++++++++++++
 2 files changed, 20 insertions(+), 5 deletions(-)

diff --git a/src/gui/itemviews/qlistview.cpp b/src/gui/itemviews/qlistview.cpp
index d680af8..15db9a6 100644
--- a/src/gui/itemviews/qlistview.cpp
+++ b/src/gui/itemviews/qlistview.cpp
@@ -357,7 +357,7 @@ QListView::LayoutMode QListView::layoutMode() const
 
 /*!
     \property QListView::spacing
-    \brief the space between items in the layout
+    \brief the space around the items in the layout
 
     This property is the size of the empty space that is padded around
     an item in the layout.
@@ -972,9 +972,9 @@ void QListView::paintEvent(QPaintEvent *e)
         option.rect = visualRect(*it);
 
         if (flow() == TopToBottom)
-            option.rect.setWidth(qMin(viewport()->size().width(), option.rect.width()));
+            option.rect.setWidth(qMin(viewport()->size().width() - 2 * d->spacing(), option.rect.width()));
         else
-            option.rect.setHeight(qMin(viewport()->size().height(), option.rect.height()));
+            option.rect.setHeight(qMin(viewport()->size().height() - 2 * d->spacing(), option.rect.height()));
 
         option.state = state;
         if (selections && selections->isSelected(*it))
@@ -1837,14 +1837,14 @@ void QCommonListViewBase::updateHorizontalScrollBar(const QSize &step)
 {
     horizontalScrollBar()->setSingleStep(step.width() + spacing());
     horizontalScrollBar()->setPageStep(viewport()->width());
-    horizontalScrollBar()->setRange(0, contentsSize.width() - viewport()->width());
+    horizontalScrollBar()->setRange(0, contentsSize.width() - viewport()->width() - 2 * spacing());
 }
 
 void QCommonListViewBase::updateVerticalScrollBar(const QSize &step)
 {
     verticalScrollBar()->setSingleStep(step.height() + spacing());
     verticalScrollBar()->setPageStep(viewport()->height());
-    verticalScrollBar()->setRange(0, contentsSize.height() - viewport()->height());
+    verticalScrollBar()->setRange(0, contentsSize.height() - viewport()->height() - 2 * spacing());
 }
 
 void QCommonListViewBase::scrollContentsBy(int dx, int dy, bool /*scrollElasticBand*/)
diff --git a/tests/auto/qlistview/tst_qlistview.cpp b/tests/auto/qlistview/tst_qlistview.cpp
index a5ff153..246f092 100644
--- a/tests/auto/qlistview/tst_qlistview.cpp
+++ b/tests/auto/qlistview/tst_qlistview.cpp
@@ -121,6 +121,7 @@ private slots:
     void taskQTBUG_2233_scrollHiddenItems();
     void taskQTBUG_633_changeModelData();
     void taskQTBUG_435_deselectOnViewportClick();
+    void taskQTBUG_2678_spacingAndWrappedText();
 };
 
 // Testing get/set functions
@@ -1876,5 +1877,19 @@ void tst_QListView::taskQTBUG_435_deselectOnViewportClick()
     QVERIFY(!view.selectionModel()->hasSelection());
 }
 
+void tst_QListView::taskQTBUG_2678_spacingAndWrappedText()
+{
+    static const QString lorem("Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.");
+    QStringListModel model(QStringList() << lorem << lorem << "foo" << lorem << "bar" << lorem << lorem);
+    QListView w;
+    w.setModel(&model);
+    w.setViewMode(QListView::ListMode);
+    w.setWordWrap(true);
+    w.setSpacing(10);
+    w.show();
+    QTest::qWaitForWindowShown(&w);
+    QCOMPARE(w.horizontalScrollBar()->minimum(), w.horizontalScrollBar()->maximum());
+}
+
 QTEST_MAIN(tst_QListView)
 #include "tst_qlistview.moc"
-- 
cgit v0.12


From e7a10b00be3e4aa197900ecf424e6d44b07248ae Mon Sep 17 00:00:00 2001
From: J-P Nurmi <jpnurmi@gmail.com>
Date: Tue, 20 Oct 2009 18:03:10 +0300
Subject: Fixed QGraphicsScene::clear() not to crash if related top level items
 happen to delete each others.

Merge-Request: 1863
Reviewed-by: Andreas
Reviewed-by: Olivier
---
 src/gui/graphicsview/qgraphicsscene.cpp          |  5 +++--
 tests/auto/qgraphicsscene/tst_qgraphicsscene.cpp | 20 ++++++++++++++++++++
 2 files changed, 23 insertions(+), 2 deletions(-)

diff --git a/src/gui/graphicsview/qgraphicsscene.cpp b/src/gui/graphicsview/qgraphicsscene.cpp
index a62e486..a4965e4 100644
--- a/src/gui/graphicsview/qgraphicsscene.cpp
+++ b/src/gui/graphicsview/qgraphicsscene.cpp
@@ -2292,8 +2292,9 @@ void QGraphicsScene::clear()
     // NB! We have to clear the index before deleting items; otherwise the
     // index might try to access dangling item pointers.
     d->index->clear();
-    const QList<QGraphicsItem *> items = d->topLevelItems;
-    qDeleteAll(items);
+    // NB! QGraphicsScenePrivate::unregisterTopLevelItem() removes items
+    while (!d->topLevelItems.isEmpty())
+        delete d->topLevelItems.first();
     Q_ASSERT(d->topLevelItems.isEmpty());
     d->lastItemCount = 0;
     d->allItemsIgnoreHoverEvents = true;
diff --git a/tests/auto/qgraphicsscene/tst_qgraphicsscene.cpp b/tests/auto/qgraphicsscene/tst_qgraphicsscene.cpp
index 0589994..4f76ddd 100644
--- a/tests/auto/qgraphicsscene/tst_qgraphicsscene.cpp
+++ b/tests/auto/qgraphicsscene/tst_qgraphicsscene.cpp
@@ -1453,6 +1453,13 @@ void tst_QGraphicsScene::focusItemLostFocus()
     item->clearFocus();
 }
 
+class ClearTestItem : public QGraphicsRectItem
+{
+public:
+    ~ClearTestItem() { qDeleteAll(items); }
+    QList<QGraphicsItem *> items;
+};
+
 void tst_QGraphicsScene::clear()
 {
     QGraphicsScene scene;
@@ -1463,6 +1470,19 @@ void tst_QGraphicsScene::clear()
     scene.clear();
     QVERIFY(scene.items().isEmpty());
     QCOMPARE(scene.sceneRect(), QRectF(0, 0, 100, 100));
+
+    ClearTestItem *firstItem = new ClearTestItem;
+    QGraphicsItem *secondItem = new QGraphicsRectItem;
+    firstItem->items += secondItem;
+
+    scene.setItemIndexMethod(QGraphicsScene::NoIndex);
+    scene.addItem(firstItem);
+    scene.addItem(secondItem);
+    QCOMPARE(scene.items().at(0), firstItem);
+    QCOMPARE(scene.items().at(1), secondItem);
+    // must not crash even if firstItem deletes secondItem
+    scene.clear();
+    QVERIFY(scene.items().isEmpty());
 }
 
 void tst_QGraphicsScene::setFocusItem()
-- 
cgit v0.12


From 553d7f7416eca57b63992a453ceb3b333749c11a Mon Sep 17 00:00:00 2001
From: J-P Nurmi <jpnurmi@gmail.com>
Date: Wed, 28 Oct 2009 16:15:06 +0200
Subject: Introduced QGraphicsItem::ItemSendsScenePositionChanges and
 QGraphicsItem::ItemScenePositionHasChanged

Merge-Request: 1945
Reviewed-By: Andreas
---
 src/gui/graphicsview/qgraphicsitem.cpp         | 63 ++++++++++++++++++++--
 src/gui/graphicsview/qgraphicsitem.h           |  6 ++-
 src/gui/graphicsview/qgraphicsitem_p.h         |  7 ++-
 src/gui/graphicsview/qgraphicsscene.cpp        | 56 +++++++++++++++++++
 src/gui/graphicsview/qgraphicsscene.h          |  1 +
 src/gui/graphicsview/qgraphicsscene_p.h        |  7 +++
 tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp | 74 ++++++++++++++++++++++++++
 7 files changed, 206 insertions(+), 8 deletions(-)

diff --git a/src/gui/graphicsview/qgraphicsitem.cpp b/src/gui/graphicsview/qgraphicsitem.cpp
index 4665916..93b9ba9 100644
--- a/src/gui/graphicsview/qgraphicsitem.cpp
+++ b/src/gui/graphicsview/qgraphicsitem.cpp
@@ -386,6 +386,12 @@
     introduced in Qt 4.6.
 
     \omitvalue ItemIsFocusScope Internal only (for now).
+
+    \value ItemSendsScenePositionChanges The item enables itemChange()
+    notifications for ItemScenePositionHasChanged. For performance reasons,
+    these notifications are disabled by default. You must enable this flag
+    to receive notifications for scene position changes. This flag was
+    introduced in Qt 4.6.
 */
 
 /*!
@@ -562,6 +568,14 @@
     \value ItemOpacityHasChanged The item's opacity has changed. The value
     argument is the new opacity (i.e., a double). Do not call setOpacity() as
     this notification is delivered. The return value is ignored.
+
+    \value ItemScenePositionHasChanged The item's scene position has changed.
+    This notification is sent if the ItemSendsScenePositionChanges flag is
+    enabled, and after the item's scene position has changed (i.e., the
+    position or transformation of the item itself or the position or
+    transformation of any ancestor has changed). The value argument is the
+    new scene position (the same as scenePos()), and QGraphicsItem ignores
+    the return value for this notification (i.e., a read-only notification).
 */
 
 /*!
@@ -990,6 +1004,10 @@ void QGraphicsItemPrivate::setParentItemHelper(QGraphicsItem *newParent)
     if (scene) {
         // Deliver the change to the index
         scene->d_func()->index->itemChange(q, QGraphicsItem::ItemParentChange, newParentVariant);
+
+        // Disable scene pos notifications for old ancestors
+        if (scenePosDescendants || (flags & QGraphicsItem::ItemSendsScenePositionChanges))
+            scene->d_func()->setScenePosItemEnabled(q, false);
     }
 
     if (subFocusItem && parent) {
@@ -1084,10 +1102,15 @@ void QGraphicsItemPrivate::setParentItemHelper(QGraphicsItem *newParent)
 
         parent->d_ptr->addChild(q);
         parent->itemChange(QGraphicsItem::ItemChildAddedChange, thisPointerVariant);
-        if (!implicitUpdate && scene) {
-            scene->d_func()->markDirty(q_ptr, QRect(),
-                                       /*invalidateChildren=*/false,
-                                       /*maybeDirtyClipPath=*/true);
+        if (scene) {
+            if (!implicitUpdate)
+                scene->d_func()->markDirty(q_ptr, QRect(),
+                                           /*invalidateChildren=*/false,
+                                           /*maybeDirtyClipPath=*/true);
+
+            // Re-enable scene pos notifications for new ancestors
+            if (scenePosDescendants || (flags & QGraphicsItem::ItemSendsScenePositionChanges))
+                scene->d_func()->setScenePosItemEnabled(q, true);
         }
 
         // Inherit ancestor flags from the new parent.
@@ -1746,6 +1769,12 @@ void QGraphicsItem::setFlags(GraphicsItemFlags flags)
     }
 
     if (d_ptr->scene) {
+        if ((flags & ItemSendsScenePositionChanges) != (oldFlags & ItemSendsScenePositionChanges)) {
+            if (flags & ItemSendsScenePositionChanges)
+                d_ptr->scene->d_func()->registerScenePosItem(this);
+            else
+                d_ptr->scene->d_func()->unregisterScenePosItem(this);
+        }
         d_ptr->scene->d_func()->markDirty(this, QRectF(),
                                           /*invalidateChildren=*/true,
                                           /*maybeDirtyClipPath*/true);
@@ -3412,6 +3441,7 @@ void QGraphicsItem::setPos(const QPointF &pos)
 
     // Send post-notification.
     itemChange(QGraphicsItem::ItemPositionHasChanged, newPosVariant);
+    d_ptr->sendScenePosChange();
 }
 
 /*!
@@ -4022,6 +4052,7 @@ void QGraphicsItem::setTransform(const QTransform &matrix, bool combine)
 
     // Send post-notification.
     itemChange(ItemTransformHasChanged, newTransformVariant);
+    d_ptr->sendScenePosChange();
 }
 
 /*!
@@ -4246,6 +4277,24 @@ void QGraphicsItemPrivate::ensureSequentialSiblingIndex()
 }
 
 /*!
+    \internal
+*/
+inline void QGraphicsItemPrivate::sendScenePosChange()
+{
+    Q_Q(QGraphicsItem);
+    if (scene) {
+        if (flags & QGraphicsItem::ItemSendsScenePositionChanges)
+            q->itemChange(QGraphicsItem::ItemScenePositionHasChanged, q->scenePos());
+        if (scenePosDescendants) {
+            foreach (QGraphicsItem *item, scene->d_func()->scenePosItems) {
+                if (q->isAncestorOf(item))
+                    item->itemChange(QGraphicsItem::ItemScenePositionHasChanged, item->scenePos());
+            }
+        }
+    }
+}
+
+/*!
     \since 4.6
 
     Stacks this item before \a sibling, which must be a sibling item (i.e., the
@@ -10925,6 +10974,9 @@ QDebug operator<<(QDebug debug, QGraphicsItem::GraphicsItemChange change)
     case QGraphicsItem::ItemOpacityHasChanged:
         str = "ItemOpacityHasChanged";
         break;
+    case QGraphicsItem::ItemScenePositionHasChanged:
+        str = "ItemScenePositionHasChanged";
+        break;
     }
     debug << str;
     return debug;
@@ -10982,6 +11034,9 @@ QDebug operator<<(QDebug debug, QGraphicsItem::GraphicsItemFlag flag)
     case QGraphicsItem::ItemIsFocusScope:
         str = "ItemIsFocusScope";
         break;
+    case QGraphicsItem::ItemSendsScenePositionChanges:
+        str = "ItemSendsScenePositionChanges";
+        break;
     }
     debug << str;
     return debug;
diff --git a/src/gui/graphicsview/qgraphicsitem.h b/src/gui/graphicsview/qgraphicsitem.h
index f3fe99c..6e1c632 100644
--- a/src/gui/graphicsview/qgraphicsitem.h
+++ b/src/gui/graphicsview/qgraphicsitem.h
@@ -105,7 +105,8 @@ public:
         ItemAcceptsInputMethod = 0x1000,
         ItemNegativeZStacksBehindParent = 0x2000,
         ItemIsPanel = 0x4000,
-        ItemIsFocusScope = 0x8000 // internal
+        ItemIsFocusScope = 0x8000, // internal
+        ItemSendsScenePositionChanges = 0x10000
         // NB! Don't forget to increase the d_ptr->flags bit field by 1 when adding a new flag.
     };
     Q_DECLARE_FLAGS(GraphicsItemFlags, GraphicsItemFlag)
@@ -137,7 +138,8 @@ public:
         ItemZValueChange,
         ItemZValueHasChanged,
         ItemOpacityChange,
-        ItemOpacityHasChanged
+        ItemOpacityHasChanged,
+        ItemScenePositionHasChanged
     };
 
     enum CacheMode {
diff --git a/src/gui/graphicsview/qgraphicsitem_p.h b/src/gui/graphicsview/qgraphicsitem_p.h
index ca56c18..92d45f6 100644
--- a/src/gui/graphicsview/qgraphicsitem_p.h
+++ b/src/gui/graphicsview/qgraphicsitem_p.h
@@ -179,6 +179,7 @@ public:
         holesInSiblingIndex(0),
         sequentialOrdering(1),
         updateDueToGraphicsEffect(0),
+        scenePosDescendants(0),
         globalStackingOrder(-1),
         q_ptr(0)
     {
@@ -429,6 +430,7 @@ public:
     inline void ensureSortedChildren();
     static inline bool insertionOrder(QGraphicsItem *a, QGraphicsItem *b);
     void ensureSequentialSiblingIndex();
+    inline void sendScenePosChange();
 
     QPainterPath cachedClipPath;
     QRectF childrenBoundingRect;
@@ -483,7 +485,7 @@ public:
 
     // Packed 32 bits
     quint32 fullUpdatePending : 1;
-    quint32 flags : 16;
+    quint32 flags : 17;
     quint32 dirtyChildrenBoundingRect : 1;
     quint32 paintedViewBoundingRectsNeedRepaint : 1;
     quint32 dirtySceneTransform : 1;
@@ -498,14 +500,15 @@ public:
     quint32 sceneTransformTranslateOnly : 1;
     quint32 notifyBoundingRectChanged : 1;
     quint32 notifyInvalidated : 1;
-    quint32 mouseSetsFocus : 1;
 
     // New 32 bits
+    quint32 mouseSetsFocus : 1;
     quint32 explicitActivate : 1;
     quint32 wantsActive : 1;
     quint32 holesInSiblingIndex : 1;
     quint32 sequentialOrdering : 1;
     quint32 updateDueToGraphicsEffect : 1;
+    quint32 scenePosDescendants : 1;
 
     // Optional stacking order
     int globalStackingOrder;
diff --git a/src/gui/graphicsview/qgraphicsscene.cpp b/src/gui/graphicsview/qgraphicsscene.cpp
index a4965e4..b992398 100644
--- a/src/gui/graphicsview/qgraphicsscene.cpp
+++ b/src/gui/graphicsview/qgraphicsscene.cpp
@@ -294,6 +294,7 @@ QGraphicsScenePrivate::QGraphicsScenePrivate()
       needSortTopLevelItems(true),
       holesInTopLevelSiblingIndex(false),
       topLevelSequentialOrdering(true),
+      scenePosDescendantsUpdatePending(false),
       stickyFocus(false),
       hasFocus(false),
       focusItem(0),
@@ -488,6 +489,55 @@ void QGraphicsScenePrivate::_q_processDirtyItems()
 
 /*!
     \internal
+*/
+void QGraphicsScenePrivate::setScenePosItemEnabled(QGraphicsItem *item, bool enabled)
+{
+    QGraphicsItem *p = item->d_ptr->parent;
+    while (p) {
+        p->d_ptr->scenePosDescendants = enabled;
+        p = p->d_ptr->parent;
+    }
+    if (!enabled && !scenePosDescendantsUpdatePending) {
+        scenePosDescendantsUpdatePending = true;
+        QMetaObject::invokeMethod(q_func(), "_q_updateScenePosDescendants", Qt::QueuedConnection);
+    }
+}
+
+/*!
+    \internal
+*/
+void QGraphicsScenePrivate::registerScenePosItem(QGraphicsItem *item)
+{
+    scenePosItems.insert(item);
+    setScenePosItemEnabled(item, true);
+}
+
+/*!
+    \internal
+*/
+void QGraphicsScenePrivate::unregisterScenePosItem(QGraphicsItem *item)
+{
+    scenePosItems.remove(item);
+    setScenePosItemEnabled(item, false);
+}
+
+/*!
+    \internal
+*/
+void QGraphicsScenePrivate::_q_updateScenePosDescendants()
+{
+    foreach (QGraphicsItem *item, scenePosItems) {
+        QGraphicsItem *p = item->d_ptr->parent;
+        while (p) {
+            p->d_ptr->scenePosDescendants = 1;
+            p = p->d_ptr->parent;
+        }
+    }
+    scenePosDescendantsUpdatePending = false;
+}
+
+/*!
+    \internal
 
     Schedules an item for removal. This function leaves some stale indexes
     around in the BSP tree if called from the item's destructor; these will
@@ -523,6 +573,9 @@ void QGraphicsScenePrivate::removeItemHelper(QGraphicsItem *item)
         widget->d_func()->fixFocusChainBeforeReparenting(0, 0);
     }
 
+    if (item->flags() & QGraphicsItem::ItemSendsScenePositionChanges)
+        unregisterScenePosItem(item);
+
     item->d_func()->scene = 0;
 
     //We need to remove all children first because they might use their parent
@@ -2540,6 +2593,9 @@ void QGraphicsScene::addItem(QGraphicsItem *item)
         }
     }
 
+    if (item->flags() & QGraphicsItem::ItemSendsScenePositionChanges)
+        d->registerScenePosItem(item);
+
     // Ensure that newly added items that have subfocus set, gain
     // focus automatically if there isn't a focus item already.
     if (!d->focusItem && item != d->lastFocusItem && item->focusItem() == item)
diff --git a/src/gui/graphicsview/qgraphicsscene.h b/src/gui/graphicsview/qgraphicsscene.h
index d6d48d7..a47574e 100644
--- a/src/gui/graphicsview/qgraphicsscene.h
+++ b/src/gui/graphicsview/qgraphicsscene.h
@@ -299,6 +299,7 @@ private:
     Q_PRIVATE_SLOT(d_func(), void _q_emitUpdated())
     Q_PRIVATE_SLOT(d_func(), void _q_polishItems())
     Q_PRIVATE_SLOT(d_func(), void _q_processDirtyItems())
+    Q_PRIVATE_SLOT(d_func(), void _q_updateScenePosDescendants())
     friend class QGraphicsItem;
     friend class QGraphicsItemPrivate;
     friend class QGraphicsView;
diff --git a/src/gui/graphicsview/qgraphicsscene_p.h b/src/gui/graphicsview/qgraphicsscene_p.h
index cd20fd0..6d46db5 100644
--- a/src/gui/graphicsview/qgraphicsscene_p.h
+++ b/src/gui/graphicsview/qgraphicsscene_p.h
@@ -122,6 +122,13 @@ public:
 
     void _q_processDirtyItems();
 
+    QSet<QGraphicsItem *> scenePosItems;
+    bool scenePosDescendantsUpdatePending;
+    void setScenePosItemEnabled(QGraphicsItem *item, bool enabled);
+    void registerScenePosItem(QGraphicsItem *item);
+    void unregisterScenePosItem(QGraphicsItem *item);
+    void _q_updateScenePosDescendants();
+
     void removeItemHelper(QGraphicsItem *item);
 
     QBrush backgroundBrush;
diff --git a/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp b/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp
index 684ad4f..1081fd5 100644
--- a/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp
+++ b/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp
@@ -401,6 +401,7 @@ private slots:
     void modality_clickFocus();
     void modality_keyEvents();
     void itemIsInFront();
+    void scenePosChange();
 
     // task specific tests below me
     void task141694_textItemEnsureVisible();
@@ -4229,6 +4230,8 @@ protected:
             break;
         case QGraphicsItem::ItemOpacityHasChanged:
             break;
+        case QGraphicsItem::ItemScenePositionHasChanged:
+            break;
         }
         return itemChangeReturnValue.isValid() ? itemChangeReturnValue : value;
     }
@@ -9691,5 +9694,76 @@ void tst_QGraphicsItem::itemIsInFront()
     QCOMPARE(qt_closestItemFirst(rect1child1_2, rect2child1), false);
 }
 
+class ScenePosChangeTester : public ItemChangeTester
+{
+public:
+    ScenePosChangeTester()
+    { }
+    ScenePosChangeTester(QGraphicsItem *parent) : ItemChangeTester(parent)
+    { }
+};
+
+void tst_QGraphicsItem::scenePosChange()
+{
+    ScenePosChangeTester* root = new ScenePosChangeTester;
+    ScenePosChangeTester* child1 = new ScenePosChangeTester(root);
+    ScenePosChangeTester* grandChild1 = new ScenePosChangeTester(child1);
+    ScenePosChangeTester* child2 = new ScenePosChangeTester(root);
+    ScenePosChangeTester* grandChild2 = new ScenePosChangeTester(child2);
+
+    child1->setFlag(QGraphicsItem::ItemSendsScenePositionChanges, true);
+    grandChild2->setFlag(QGraphicsItem::ItemSendsScenePositionChanges, true);
+
+    QGraphicsScene scene;
+    scene.addItem(root);
+
+    // ignore uninteresting changes
+    child1->clear();
+    child2->clear();
+    grandChild1->clear();
+    grandChild2->clear();
+
+    // move whole tree
+    root->moveBy(1.0, 1.0);
+    QCOMPARE(child1->changes.count(QGraphicsItem::ItemScenePositionHasChanged), 1);
+    QCOMPARE(grandChild1->changes.count(QGraphicsItem::ItemScenePositionHasChanged), 0);
+    QCOMPARE(child2->changes.count(QGraphicsItem::ItemScenePositionHasChanged), 0);
+    QCOMPARE(grandChild2->changes.count(QGraphicsItem::ItemScenePositionHasChanged), 1);
+
+    // move subtree
+    child2->moveBy(1.0, 1.0);
+    QCOMPARE(child1->changes.count(QGraphicsItem::ItemScenePositionHasChanged), 1);
+    QCOMPARE(grandChild1->changes.count(QGraphicsItem::ItemScenePositionHasChanged), 0);
+    QCOMPARE(child2->changes.count(QGraphicsItem::ItemScenePositionHasChanged), 0);
+    QCOMPARE(grandChild2->changes.count(QGraphicsItem::ItemScenePositionHasChanged), 2);
+
+    // reparent
+    grandChild2->setParentItem(child1);
+    child1->moveBy(1.0, 1.0);
+    QCOMPARE(child1->changes.count(QGraphicsItem::ItemScenePositionHasChanged), 2);
+    QCOMPARE(grandChild1->changes.count(QGraphicsItem::ItemScenePositionHasChanged), 0);
+    QCOMPARE(child2->changes.count(QGraphicsItem::ItemScenePositionHasChanged), 0);
+    QCOMPARE(grandChild2->changes.count(QGraphicsItem::ItemScenePositionHasChanged), 3);
+
+    // change flags
+    grandChild1->setFlag(QGraphicsItem::ItemSendsScenePositionChanges, true);
+    grandChild2->setFlag(QGraphicsItem::ItemSendsScenePositionChanges, false);
+    QCoreApplication::processEvents(); // QGraphicsScenePrivate::_q_updateScenePosDescendants()
+    child1->moveBy(1.0, 1.0);
+    QCOMPARE(child1->changes.count(QGraphicsItem::ItemScenePositionHasChanged), 3);
+    QCOMPARE(grandChild1->changes.count(QGraphicsItem::ItemScenePositionHasChanged), 1);
+    QCOMPARE(child2->changes.count(QGraphicsItem::ItemScenePositionHasChanged), 0);
+    QCOMPARE(grandChild2->changes.count(QGraphicsItem::ItemScenePositionHasChanged), 3);
+
+    // remove
+    scene.removeItem(grandChild1);
+    delete grandChild2; grandChild2 = 0;
+    QCoreApplication::processEvents(); // QGraphicsScenePrivate::_q_updateScenePosDescendants()
+    root->moveBy(1.0, 1.0);
+    QCOMPARE(child1->changes.count(QGraphicsItem::ItemScenePositionHasChanged), 4);
+    QCOMPARE(grandChild1->changes.count(QGraphicsItem::ItemScenePositionHasChanged), 1);
+    QCOMPARE(child2->changes.count(QGraphicsItem::ItemScenePositionHasChanged), 0);
+}
+
 QTEST_MAIN(tst_QGraphicsItem)
 #include "tst_qgraphicsitem.moc"
-- 
cgit v0.12


From a3b84f683e0baae34dc37c85a40dcae3e5306419 Mon Sep 17 00:00:00 2001
From: Olivier Goffart <ogoffart@trolltech.com>
Date: Tue, 3 Nov 2009 11:24:02 +0100
Subject: QStyleSheetStyle: CE_PushButton Do not call the parent style if we
 have nothing to draw

This fixes the focus rect that appears on buttons with GtkStyle if a
stylesheet is used.

Task-number: QTBUG-4488
Reviewed-by: Gabriel
---
 src/gui/styles/qstylesheetstyle.cpp | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/src/gui/styles/qstylesheetstyle.cpp b/src/gui/styles/qstylesheetstyle.cpp
index a224218..dfe5209 100644
--- a/src/gui/styles/qstylesheetstyle.cpp
+++ b/src/gui/styles/qstylesheetstyle.cpp
@@ -3325,9 +3325,14 @@ void QStyleSheetStyle::drawControl(ControlElement ce, const QStyleOption *opt, Q
         break;
 
     case CE_PushButton:
-        ParentStyle::drawControl(ce, opt, p, w);
-        return;
-
+        if (const QStyleOptionButton *btn = qstyleoption_cast<const QStyleOptionButton *>(opt)) {
+            if (rule.hasDrawable() || rule.hasBox() || rule.hasPosition() || rule.hasPalette() ||
+                    ((btn->features & QStyleOptionButton::HasMenu) && hasStyleRule(w, PseudoElement_PushButtonMenuIndicator))) {
+                ParentStyle::drawControl(ce, opt, p, w);
+                return;
+            }
+        }
+        break;
     case CE_PushButtonBevel:
         if (const QStyleOptionButton *btn = qstyleoption_cast<const QStyleOptionButton *>(opt)) {
             QStyleOptionButton btnOpt(*btn);
-- 
cgit v0.12


From 0ae2258c6cf89349e795b6af95455e29d2a1fa70 Mon Sep 17 00:00:00 2001
From: Gareth Stockwell <ext-gareth.stockwell@nokia.com>
Date: Fri, 30 Oct 2009 17:28:51 +0000
Subject: Fix for unresponsive sliders after orientation switch or full-screen
 video playback

During the switch to full-screen video playback, the following happens:

1. Double-tapping to enable full-screen results in a call to
QSymbianControl::HandleLongTapL
2. This modifies the global variable QApplication::mouse_buttons,
OR'ing in Qt::RightButton
3. QWidgetPrivate::create_sys, called as a result of the call to
setWindowFlags made by Phonon::VideoWIdget::setFullScreen, schedules a
delayed deletion of the same control as in step (1) above
4. The control gets deleted before it receives a HandlePointerEventL
for the long tap release, which would have removed Qt::RightButton
from the mouse_button bitmask
5. In subsequent calls to QSlider::mousePressEvent, the test
(ev->buttons() ^ ev->button()) is false, which results in the event
being ignored.

Ideally, we would fix this by propagating the m_previousEventLongPress
flag from the deleted QSymbianControl to the newly created one.
However, this does not work because the new control does not receive
the HandlePointerEventL callback for the long press release.

We therefore fix the bug by checking for m_previousEventLondPress
in the QSymbianControl destructor; if it is set, we clear the
Qt::RightButton bit from the QApplication::mouse_buttons mask.

Note that QTBUG-5309 (Cannot interact with sliders after orientation
switch during audio playback) is still seen after applying this patch.

Task-number: QTBUG-5242, QTBUG-5308
Reviewed-by: axis
---
 src/gui/kernel/qapplication_s60.cpp | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/src/gui/kernel/qapplication_s60.cpp b/src/gui/kernel/qapplication_s60.cpp
index 689429e..e2106ea 100644
--- a/src/gui/kernel/qapplication_s60.cpp
+++ b/src/gui/kernel/qapplication_s60.cpp
@@ -357,6 +357,9 @@ QSymbianControl::~QSymbianControl()
         setFocusSafely(false);
     S60->appUi()->RemoveFromStack(this);
     delete m_longTapDetector;
+
+    if(m_previousEventLongTap)
+        QApplicationPrivate::mouse_buttons = QApplicationPrivate::mouse_buttons & ~Qt::RightButton;
 }
 
 void QSymbianControl::setWidget(QWidget *w)
-- 
cgit v0.12


From 0c7190fa5b6fd5d401854f689676eee8d8591b75 Mon Sep 17 00:00:00 2001
From: Gareth Stockwell <ext-gareth.stockwell@nokia.com>
Date: Mon, 2 Nov 2009 14:08:48 +0000
Subject: Fixed state bug in Phonon MMF backend

This fixes a bug introduced by 58efa8aa, which meant that, when a new
clip was opened:

1. Playback did not start automatically
2. The current volume setting in the app UI was not applied to the
MMF client API

Task-number: QTBUG-4999
Reviewed-by: trustme
---
 src/3rdparty/phonon/mmf/abstractmediaplayer.cpp | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/3rdparty/phonon/mmf/abstractmediaplayer.cpp b/src/3rdparty/phonon/mmf/abstractmediaplayer.cpp
index 998e861..b8c6fb0 100644
--- a/src/3rdparty/phonon/mmf/abstractmediaplayer.cpp
+++ b/src/3rdparty/phonon/mmf/abstractmediaplayer.cpp
@@ -373,12 +373,12 @@ void MMF::AbstractMediaPlayer::changeState(PrivateState newState)
 {
     TRACE_CONTEXT(AbstractMediaPlayer::changeState, EAudioInternal);
 
-    // TODO: add some invariants to check that the transition is valid
-    AbstractPlayer::changeState(newState);
-
     const Phonon::State oldPhononState = phononState(privateState());
     const Phonon::State newPhononState = phononState(newState);
 
+    // TODO: add some invariants to check that the transition is valid
+    AbstractPlayer::changeState(newState);
+
     if (LoadingState == oldPhononState && StoppedState == newPhononState) {
         // Ensure initial volume is set on MMF API before starting playback
         doVolumeChanged();
-- 
cgit v0.12


From 8ffbb2e7bd2ba0b92aef8d7212ddd47bdcc4411e Mon Sep 17 00:00:00 2001
From: Gareth Stockwell <ext-gareth.stockwell@nokia.com>
Date: Tue, 3 Nov 2009 07:43:11 +0000
Subject: Fixed volume calculation in Phonon MMF backend

Task-number: QTBUG-4777
Reviewed-by: trustme
---
 src/3rdparty/phonon/mmf/abstractmediaplayer.cpp | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/3rdparty/phonon/mmf/abstractmediaplayer.cpp b/src/3rdparty/phonon/mmf/abstractmediaplayer.cpp
index b8c6fb0..b443194 100644
--- a/src/3rdparty/phonon/mmf/abstractmediaplayer.cpp
+++ b/src/3rdparty/phonon/mmf/abstractmediaplayer.cpp
@@ -318,7 +318,8 @@ void MMF::AbstractMediaPlayer::doVolumeChanged()
     case PausedState:
     case PlayingState:
     case BufferingState: {
-        const int err = setDeviceVolume(m_volume * m_mmfMaxVolume);
+        const qreal volume = (m_volume * m_mmfMaxVolume) + 0.5;
+        const int err = setDeviceVolume(volume);
 
         if (KErrNone != err) {
             setError(NormalError);
-- 
cgit v0.12


From 6a89291da7e1322ad81c4939cc9d69db01957a4c Mon Sep 17 00:00:00 2001
From: Gareth Stockwell <ext-gareth.stockwell@nokia.com>
Date: Mon, 2 Nov 2009 13:58:52 +0000
Subject: Fix for defect introduced by dd48c27f

This change causes some applications to crash due to a null
pointer dereference in QSoftKeyManagerPrivate::updateSoftKeys_sys.

f3854db6 fixes the crash, but introduces incorrect behaviour: the
softkey labels are not updated.  To see this:

1. Launch qmediaplayer
2. Open a video clip
3. Video clip starts playing but softkeys still have labels "Open"
and "Cancel"

Reviewed-by: Janne Anttila
---
 src/gui/kernel/qsoftkeymanager.cpp | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/src/gui/kernel/qsoftkeymanager.cpp b/src/gui/kernel/qsoftkeymanager.cpp
index fac936f..8612e64 100644
--- a/src/gui/kernel/qsoftkeymanager.cpp
+++ b/src/gui/kernel/qsoftkeymanager.cpp
@@ -237,7 +237,10 @@ void QSoftKeyManagerPrivate::updateSoftKeys_sys(const QList<QAction*> &softkeys)
         }
     }
 
-    Qt::WindowType sourceWindowType = QSoftKeyManagerPrivate::softKeySource->window()->windowType();
+    const Qt::WindowType sourceWindowType = QSoftKeyManagerPrivate::softKeySource
+        ?   QSoftKeyManagerPrivate::softKeySource->window()->windowType()
+        :   Qt::Widget;
+
     if (needsExitButton && sourceWindowType != Qt::Dialog && sourceWindowType != Qt::Popup)
         QT_TRAP_THROWING(nativeContainer->SetCommandL(2, EAknSoftkeyExit, qt_QString2TPtrC(QSoftKeyManager::tr("Exit"))));
 
-- 
cgit v0.12


From f080d232ef072976b28ca4b448dcb210b5941b2e Mon Sep 17 00:00:00 2001
From: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
Date: Mon, 2 Nov 2009 22:30:09 +0100
Subject: fix canReadLine() erroneously returning true

the indexOf() call did not consider actualReadBufferSize and thus
scanned uninitialized memory for newlines.

Reviewed-by: phartman
---
 src/corelib/tools/qringbuffer_p.h       | 27 +++++++++++++++++++++++++++
 src/network/socket/qlocalsocket_win.cpp |  3 ++-
 2 files changed, 29 insertions(+), 1 deletion(-)

diff --git a/src/corelib/tools/qringbuffer_p.h b/src/corelib/tools/qringbuffer_p.h
index c44346c..7c766cb 100644
--- a/src/corelib/tools/qringbuffer_p.h
+++ b/src/corelib/tools/qringbuffer_p.h
@@ -287,6 +287,33 @@ public:
         return -1;
     }
 
+    inline int indexOf(char c, int maxLength) const {
+        int index = 0;
+        int remain = qMin(size(), maxLength);
+        for (int i = 0; remain && i < buffers.size(); ++i) {
+            int start = 0;
+            int end = buffers.at(i).size();
+
+            if (i == 0)
+                start = head;
+            if (i == tailBuffer)
+                end = tail;
+            if (remain < end - start) {
+                end = start + remain;
+                remain = 0;
+            } else {
+                remain -= end - start;
+            }
+            const char *ptr = buffers.at(i).data() + start;
+            for (int j = start; j < end; ++j) {
+                if (*ptr++ == c)
+                    return index;
+                ++index;
+            }
+        }
+        return -1;
+    }
+
     inline int read(char *data, int maxLength) {
         int bytesToRead = qMin(size(), maxLength);
         int readSoFar = 0;
diff --git a/src/network/socket/qlocalsocket_win.cpp b/src/network/socket/qlocalsocket_win.cpp
index 8a745ab..d812d88 100644
--- a/src/network/socket/qlocalsocket_win.cpp
+++ b/src/network/socket/qlocalsocket_win.cpp
@@ -363,7 +363,8 @@ bool QLocalSocket::canReadLine() const
     Q_D(const QLocalSocket);
     if (state() != ConnectedState)
         return false;
-    return (d->readBuffer.indexOf('\n') != -1 || QIODevice::canReadLine());
+    return (QIODevice::canReadLine()
+            || d->readBuffer.indexOf('\n', d->actualReadBufferSize) != -1);
 }
 
 void QLocalSocket::close()
-- 
cgit v0.12


From 9bd330756bc8e0fac9919da0b1068096ee91cb24 Mon Sep 17 00:00:00 2001
From: Gabriel de Dietrich <gabriel.dietrich-de@nokia.com>
Date: Tue, 3 Nov 2009 15:09:09 +0100
Subject: Pressing return in a QWizard would erase the active password entry.

When echo mode was set to PasswordEchoOnEdit in a QLineEdit, and its text
selected, pressing the return key would erase the text and start editing it
instead of validating the password. Auto-test included.

Reviewed-by: Olivier
Task-number: QTBUG-4401
---
 src/gui/widgets/qlinecontrol.cpp       | 23 ++++++++++++-----------
 tests/auto/qlineedit/tst_qlineedit.cpp | 16 ++++++++++++++++
 2 files changed, 28 insertions(+), 11 deletions(-)

diff --git a/src/gui/widgets/qlinecontrol.cpp b/src/gui/widgets/qlinecontrol.cpp
index 7f9ff82..26b9c95 100644
--- a/src/gui/widgets/qlinecontrol.cpp
+++ b/src/gui/widgets/qlinecontrol.cpp
@@ -1509,6 +1509,18 @@ void QLineControl::processKeyEvent(QKeyEvent* event)
     }
 #endif // QT_NO_COMPLETER
 
+    if (event->key() == Qt::Key_Enter || event->key() == Qt::Key_Return) {
+        if (hasAcceptableInput() || fixup()) {
+            emit accepted();
+            emit editingFinished();
+        }
+        if (inlineCompletionAccepted)
+            event->accept();
+        else
+            event->ignore();
+        return;
+    }
+
     if (echoMode() == QLineEdit::PasswordEchoOnEdit
         && !passwordEchoEditing()
         && !isReadOnly()
@@ -1529,17 +1541,6 @@ void QLineControl::processKeyEvent(QKeyEvent* event)
         clear();
     }
 
-    if (event->key() == Qt::Key_Enter || event->key() == Qt::Key_Return) {
-        if (hasAcceptableInput() || fixup()) {
-            emit accepted();
-            emit editingFinished();
-        }
-        if (inlineCompletionAccepted)
-            event->accept();
-        else
-            event->ignore();
-        return;
-    }
     bool unknown = false;
 
     if (false) {
diff --git a/tests/auto/qlineedit/tst_qlineedit.cpp b/tests/auto/qlineedit/tst_qlineedit.cpp
index c676959..b4dfbba 100644
--- a/tests/auto/qlineedit/tst_qlineedit.cpp
+++ b/tests/auto/qlineedit/tst_qlineedit.cpp
@@ -260,6 +260,7 @@ private slots:
     void task233101_cursorPosAfterInputMethod();
     void task241436_passwordEchoOnEditRestoreEchoMode();
     void task248948_redoRemovedSelection();
+    void taskQTBUG_4401_enterKeyClearsPassword();
 
 protected slots:
 #ifdef QT3_SUPPORT
@@ -3532,5 +3533,20 @@ void tst_QLineEdit::task248948_redoRemovedSelection()
     QCOMPARE(testWidget->text(), QLatin1String("ab"));
 }
 
+void tst_QLineEdit::taskQTBUG_4401_enterKeyClearsPassword()
+{
+    QString password("Wanna guess?");
+
+    testWidget->setText(password);
+    testWidget->setEchoMode(QLineEdit::PasswordEchoOnEdit);
+    testWidget->setFocus();
+    testWidget->selectAll();
+    QApplication::setActiveWindow(testWidget);
+    QTRY_VERIFY(testWidget->hasFocus());
+
+    QTest::keyPress(testWidget, Qt::Key_Enter);
+    QTRY_COMPARE(testWidget->text(), password);
+}
+
 QTEST_MAIN(tst_QLineEdit)
 #include "tst_qlineedit.moc"
-- 
cgit v0.12


From d436493da1e01ac460f42ea0f58be00d8c6fdaea Mon Sep 17 00:00:00 2001
From: Gareth Stockwell <ext-gareth.stockwell@nokia.com>
Date: Tue, 3 Nov 2009 13:44:13 +0000
Subject: Revert "Fixed a crash in the QApplication autotest."

This reverts commit f3854db64bcaa0f26faf5ff1414d3b9ccfc00e35.

It is replaced by 6a89291d.

Reviewed-by: Janne Anttila
---
 src/gui/kernel/qsoftkeymanager.cpp | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/src/gui/kernel/qsoftkeymanager.cpp b/src/gui/kernel/qsoftkeymanager.cpp
index 26f0a39..a914220 100644
--- a/src/gui/kernel/qsoftkeymanager.cpp
+++ b/src/gui/kernel/qsoftkeymanager.cpp
@@ -197,8 +197,7 @@ bool QSoftKeyManager::event(QEvent *e)
         } while (source);
 
         QSoftKeyManagerPrivate::softKeySource = source;
-        if (source)
-            QSoftKeyManagerPrivate::updateSoftKeys_sys(softKeys);
+        QSoftKeyManagerPrivate::updateSoftKeys_sys(softKeys);
         return true;
     }
     return false;
-- 
cgit v0.12


From 1a03f7a1163b8aea69b54066f25f6b935352b6d8 Mon Sep 17 00:00:00 2001
From: Gareth Stockwell <ext-gareth.stockwell@nokia.com>
Date: Tue, 3 Nov 2009 15:41:08 +0000
Subject: Fixed crash opening audio clip when video clip currently open

Task-number: QTBUG-5302
Reviewed-by: trustme
---
 src/3rdparty/phonon/mmf/mmf_videoplayer.cpp | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/src/3rdparty/phonon/mmf/mmf_videoplayer.cpp b/src/3rdparty/phonon/mmf/mmf_videoplayer.cpp
index d1d2337..fe469cf 100644
--- a/src/3rdparty/phonon/mmf/mmf_videoplayer.cpp
+++ b/src/3rdparty/phonon/mmf/mmf_videoplayer.cpp
@@ -110,6 +110,9 @@ MMF::VideoPlayer::~VideoPlayer()
     TRACE_CONTEXT(VideoPlayer::~VideoPlayer, EVideoApi);
     TRACE_ENTRY_0();
 
+    if (m_videoOutput)
+        m_videoOutput->setObserver(0);
+
     TRACE_EXIT_0();
 }
 
-- 
cgit v0.12


From 70a568a7c24772a12a14370b8bde5a3620a2bcfd Mon Sep 17 00:00:00 2001
From: Shane Kearns <shane.kearns@sosco.com>
Date: Tue, 3 Nov 2009 23:16:49 +0100
Subject: Fix compile error for Symbian WINSCW emulator

Reviewed-by: Iain
---
 src/corelib/tools/qvector.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/corelib/tools/qvector.h b/src/corelib/tools/qvector.h
index 7402d77..930b006 100644
--- a/src/corelib/tools/qvector.h
+++ b/src/corelib/tools/qvector.h
@@ -92,7 +92,7 @@ struct QVectorTypedData : private QVectorData
   // as this would break strict aliasing rules. (in the case of shared_null)
     T array[1];
 
-    static inline void free(QVectorTypedData *x, int alignment) { QVectorData::free(x, alignment); }
+    static inline void free(QVectorTypedData<T> *x, int alignment) { QVectorData::free(static_cast<QVectorData *>(x), alignment); }
 };
 
 class QRegion;
-- 
cgit v0.12


From d03b2cd7e65aa097c555297473c3ee038bed0f71 Mon Sep 17 00:00:00 2001
From: Shane Kearns <shane.kearns@sosco.com>
Date: Tue, 3 Nov 2009 23:23:54 +0100
Subject: def files update

New def file for XML patterns
Some changes in GUI effects API

Reviewed-by: Trust Me
---
 src/s60installs/bwins/QtCoreu.def        |  25 ++-
 src/s60installs/bwins/QtGuiu.def         | 192 ++++++++++++---------
 src/s60installs/bwins/QtScriptu.def      |  15 ++
 src/s60installs/bwins/QtXmlPatternsu.def | 280 +++++++++++++++++++++++++++++++
 src/s60installs/eabi/QtCoreu.def         |  25 ++-
 src/s60installs/eabi/QtGuiu.def          | 157 +++++++++--------
 src/s60installs/eabi/QtScriptu.def       |  17 ++
 src/s60installs/eabi/QtXmlPatternsu.def  | 253 ++++++++++++++++++++++++++++
 8 files changed, 817 insertions(+), 147 deletions(-)
 create mode 100644 src/s60installs/bwins/QtXmlPatternsu.def
 create mode 100644 src/s60installs/eabi/QtXmlPatternsu.def

diff --git a/src/s60installs/bwins/QtCoreu.def b/src/s60installs/bwins/QtCoreu.def
index cbaf523..9d3db41 100644
--- a/src/s60installs/bwins/QtCoreu.def
+++ b/src/s60installs/bwins/QtCoreu.def
@@ -3968,7 +3968,7 @@ EXPORTS
 	?constEnd@QByteArray@@QBEPBDXZ @ 3967 NONAME ; char const * QByteArray::constEnd(void) const
 	?setOvershoot@QEasingCurve@@QAEXM@Z @ 3968 NONAME ; void QEasingCurve::setOvershoot(float)
 	??6@YAAAVQDataStream@@AAV0@ABVQRectF@@@Z @ 3969 NONAME ; class QDataStream & operator<<(class QDataStream &, class QRectF const &)
-	?detach_helper@QHashData@@QAEPAU1@P6AXPAUNode@1@PAX@ZP6AX0@ZH@Z @ 3970 NONAME ; struct QHashData * QHashData::detach_helper(void (*)(struct QHashData::Node *, void *), void (*)(struct QHashData::Node *), int)
+	?detach_helper@QHashData@@QAEPAU1@P6AXPAUNode@1@PAX@ZP6AX0@ZH@Z @ 3970 NONAME ABSENT ; struct QHashData * QHashData::detach_helper(void (*)(struct QHashData::Node *, void *), void (*)(struct QHashData::Node *), int)
 	??0QSystemLocale@@AAE@_N@Z @ 3971 NONAME ; QSystemLocale::QSystemLocale(bool)
 	?data@QHBufC@@QBEPBVHBufC16@@XZ @ 3972 NONAME ; class HBufC16 const * QHBufC::data(void) const
 	?setFileName@QFile@@QAEXABVQString@@@Z @ 3973 NONAME ; void QFile::setFileName(class QString const &)
@@ -4357,4 +4357,27 @@ EXPORTS
 	??6@YA?AVQDebug@@V0@V?$QFlags@W4OpenModeFlag@QIODevice@@@@@Z @ 4356 NONAME ; class QDebug operator<<(class QDebug, class QFlags<enum QIODevice::OpenModeFlag>)
 	?staticMetaObject@QHistoryState@@2UQMetaObject@@B @ 4357 NONAME ; struct QMetaObject const QHistoryState::staticMetaObject
 	?unlock@QSharedMemory@@QAE_NXZ @ 4358 NONAME ; bool QSharedMemory::unlock(void)
+	?allocate@QContiguousCacheData@@SAPAU1@HH@Z @ 4359 NONAME ; struct QContiguousCacheData * QContiguousCacheData::allocate(int, int)
+	?allocate@QVectorData@@SAPAU1@HH@Z @ 4360 NONAME ; struct QVectorData * QVectorData::allocate(int, int)
+	?allocateNode@QHashData@@QAEPAXH@Z @ 4361 NONAME ; void * QHashData::allocateNode(int)
+	?buildDate@QLibraryInfo@@SA?AVQDate@@XZ @ 4362 NONAME ; class QDate QLibraryInfo::buildDate(void)
+	?createData@QMapData@@SAPAU1@H@Z @ 4363 NONAME ; struct QMapData * QMapData::createData(int)
+	?dequeueExternalEvent@QStateMachinePrivate@@QAEPAVQEvent@@XZ @ 4364 NONAME ; class QEvent * QStateMachinePrivate::dequeueExternalEvent(void)
+	?dequeueInternalEvent@QStateMachinePrivate@@QAEPAVQEvent@@XZ @ 4365 NONAME ; class QEvent * QStateMachinePrivate::dequeueInternalEvent(void)
+	?detach_helper2@QHashData@@QAEPAU1@P6AXPAUNode@1@PAX@ZP6AX0@ZHH@Z @ 4366 NONAME ; struct QHashData * QHashData::detach_helper2(void (*)(struct QHashData::Node *, void *), void (*)(struct QHashData::Node *), int, int)
+	?free@QContiguousCacheData@@SAXPAU1@@Z @ 4367 NONAME ; void QContiguousCacheData::free(struct QContiguousCacheData *)
+	?free@QVectorData@@SAXPAU1@H@Z @ 4368 NONAME ; void QVectorData::free(struct QVectorData *, int)
+	?isExternalEventQueueEmpty@QStateMachinePrivate@@QAE_NXZ @ 4369 NONAME ; bool QStateMachinePrivate::isExternalEventQueueEmpty(void)
+	?isInternalEventQueueEmpty@QStateMachinePrivate@@QAE_NXZ @ 4370 NONAME ; bool QStateMachinePrivate::isInternalEventQueueEmpty(void)
+	?node_create@QMapData@@QAEPAUNode@1@QAPAU21@HH@Z @ 4371 NONAME ; struct QMapData::Node * QMapData::node_create(struct QMapData::Node * * const, int, int)
+	?postExternalEvent@QStateMachinePrivate@@QAEXPAVQEvent@@@Z @ 4372 NONAME ; void QStateMachinePrivate::postExternalEvent(class QEvent *)
+	?postInternalEvent@QStateMachinePrivate@@QAEXPAVQEvent@@@Z @ 4373 NONAME ; void QStateMachinePrivate::postInternalEvent(class QEvent *)
+	?qFreeAligned@@YAXPAX@Z @ 4374 NONAME ; void qFreeAligned(void *)
+	?qMallocAligned@@YAPAXII@Z @ 4375 NONAME ; void * qMallocAligned(unsigned int, unsigned int)
+	?qReallocAligned@@YAPAXPAXIII@Z @ 4376 NONAME ; void * qReallocAligned(void *, unsigned int, unsigned int, unsigned int)
+	?reallocate@QVectorData@@SAPAU1@PAU1@HHH@Z @ 4377 NONAME ; struct QVectorData * QVectorData::reallocate(struct QVectorData *, int, int, int)
+	?toFinalState@QStateMachinePrivate@@SAPAVQFinalState@@PAVQAbstractState@@@Z @ 4378 NONAME ; class QFinalState * QStateMachinePrivate::toFinalState(class QAbstractState *)
+	?toHistoryState@QStateMachinePrivate@@SAPAVQHistoryState@@PAVQAbstractState@@@Z @ 4379 NONAME ; class QHistoryState * QStateMachinePrivate::toHistoryState(class QAbstractState *)
+	?toStandardState@QStateMachinePrivate@@SAPAVQState@@PAVQAbstractState@@@Z @ 4380 NONAME ; class QState * QStateMachinePrivate::toStandardState(class QAbstractState *)
+	?toStandardState@QStateMachinePrivate@@SAPBVQState@@PBVQAbstractState@@@Z @ 4381 NONAME ; class QState const * QStateMachinePrivate::toStandardState(class QAbstractState const *)
 
diff --git a/src/s60installs/bwins/QtGuiu.def b/src/s60installs/bwins/QtGuiu.def
index 56ba18f..89b6d48 100644
--- a/src/s60installs/bwins/QtGuiu.def
+++ b/src/s60installs/bwins/QtGuiu.def
@@ -6,7 +6,7 @@ EXPORTS
 	?checkedAction@QActionGroup@@QBEPAVQAction@@XZ @ 5 NONAME ; class QAction * QActionGroup::checkedAction(void) const
 	?minimumSizeHint@QComboBox@@UBE?AVQSize@@XZ @ 6 NONAME ; class QSize QComboBox::minimumSizeHint(void) const
 	?setIcon@QStandardItem@@QAEXABVQIcon@@@Z @ 7 NONAME ; void QStandardItem::setIcon(class QIcon const &)
-	?d_func@QGraphicsBloomEffect@@AAEPAVQGraphicsBloomEffectPrivate@@XZ @ 8 NONAME ; class QGraphicsBloomEffectPrivate * QGraphicsBloomEffect::d_func(void)
+	?d_func@QGraphicsBloomEffect@@AAEPAVQGraphicsBloomEffectPrivate@@XZ @ 8 NONAME ABSENT ; class QGraphicsBloomEffectPrivate * QGraphicsBloomEffect::d_func(void)
 	?normalize@QVector2D@@QAEXXZ @ 9 NONAME ; void QVector2D::normalize(void)
 	?name@QColor@@QBE?AVQString@@XZ @ 10 NONAME ; class QString QColor::name(void) const
 	?openPersistentEditor@QListWidget@@QAEXPAVQListWidgetItem@@@Z @ 11 NONAME ; void QListWidget::openPersistentEditor(class QListWidgetItem *)
@@ -96,7 +96,7 @@ EXPORTS
 	??0QIcon@@QAE@PAVQIconEngineV2@@@Z @ 95 NONAME ; QIcon::QIcon(class QIconEngineV2 *)
 	?qt_metacall@QFileSystemModel@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 96 NONAME ; int QFileSystemModel::qt_metacall(enum QMetaObject::Call, int, void * *)
 	?getStaticMetaObject@QGraphicsDropShadowEffect@@SAABUQMetaObject@@XZ @ 97 NONAME ; struct QMetaObject const & QGraphicsDropShadowEffect::getStaticMetaObject(void)
-	?staticMetaObject@QGraphicsPixelizeEffect@@2UQMetaObject@@B @ 98 NONAME ; struct QMetaObject const QGraphicsPixelizeEffect::staticMetaObject
+	?staticMetaObject@QGraphicsPixelizeEffect@@2UQMetaObject@@B @ 98 NONAME ABSENT ; struct QMetaObject const QGraphicsPixelizeEffect::staticMetaObject
 	?eraseRect@QPainter@@QAEXHHHH@Z @ 99 NONAME ; void QPainter::eraseRect(int, int, int, int)
 	?gotFocus@QFocusEvent@@QBE_NXZ @ 100 NONAME ; bool QFocusEvent::gotFocus(void) const
 	?setLayout@QWidget@@QAEXPAVQLayout@@@Z @ 101 NONAME ; void QWidget::setLayout(class QLayout *)
@@ -130,7 +130,7 @@ EXPORTS
 	??_EQShortcutEvent@@UAE@I@Z @ 129 NONAME ; QShortcutEvent::~QShortcutEvent(unsigned int)
 	?tr@QTextBrowser@@SA?AVQString@@PBD0H@Z @ 130 NONAME ; class QString QTextBrowser::tr(char const *, char const *, int)
 	?setIconProvider@QFileSystemModel@@QAEXPAVQFileIconProvider@@@Z @ 131 NONAME ; void QFileSystemModel::setIconProvider(class QFileIconProvider *)
-	?setStrength@QGraphicsBloomEffect@@QAEXM@Z @ 132 NONAME ; void QGraphicsBloomEffect::setStrength(float)
+	?setStrength@QGraphicsBloomEffect@@QAEXM@Z @ 132 NONAME ABSENT ; void QGraphicsBloomEffect::setStrength(float)
 	?map@QMatrix4x4@@QBE?AVQVector4D@@ABV2@@Z @ 133 NONAME ; class QVector4D QMatrix4x4::map(class QVector4D const &) const
 	?clearSpans@QTableView@@QAEXXZ @ 134 NONAME ; void QTableView::clearSpans(void)
 	?tr@QPanGesture@@SA?AVQString@@PBD0@Z @ 135 NONAME ; class QString QPanGesture::tr(char const *, char const *)
@@ -155,7 +155,7 @@ EXPORTS
 	?redoText@QUndoStack@@QBE?AVQString@@XZ @ 154 NONAME ; class QString QUndoStack::redoText(void) const
 	?dropEvent@QTableWidget@@MAEXPAVQDropEvent@@@Z @ 155 NONAME ; void QTableWidget::dropEvent(class QDropEvent *)
 	?setPalette@QToolTip@@SAXABVQPalette@@@Z @ 156 NONAME ; void QToolTip::setPalette(class QPalette const &)
-	?tr@QGraphicsPixelizeEffect@@SA?AVQString@@PBD0@Z @ 157 NONAME ; class QString QGraphicsPixelizeEffect::tr(char const *, char const *)
+	?tr@QGraphicsPixelizeEffect@@SA?AVQString@@PBD0@Z @ 157 NONAME ABSENT ; class QString QGraphicsPixelizeEffect::tr(char const *, char const *)
 	?read@QImageReader@@QAE?AVQImage@@XZ @ 158 NONAME ; class QImage QImageReader::read(void)
 	?tr@QPinchGesture@@SA?AVQString@@PBD0@Z @ 159 NONAME ; class QString QPinchGesture::tr(char const *, char const *)
 	?setRadius@QRadialGradient@@QAEXM@Z @ 160 NONAME ; void QRadialGradient::setRadius(float)
@@ -408,7 +408,7 @@ EXPORTS
 	??1QMovie@@UAE@XZ @ 407 NONAME ; QMovie::~QMovie(void)
 	?setDrawBase@QTabBar@@QAEX_N@Z @ 408 NONAME ; void QTabBar::setDrawBase(bool)
 	?findNextPrevAnchor@QTextControl@@QAE_NABVQTextCursor@@_NAAV2@@Z @ 409 NONAME ; bool QTextControl::findNextPrevAnchor(class QTextCursor const &, bool, class QTextCursor &)
-	?qt_metacast@QGraphicsGrayscaleEffect@@UAEPAXPBD@Z @ 410 NONAME ; void * QGraphicsGrayscaleEffect::qt_metacast(char const *)
+	?qt_metacast@QGraphicsGrayscaleEffect@@UAEPAXPBD@Z @ 410 NONAME ABSENT ; void * QGraphicsGrayscaleEffect::qt_metacast(char const *)
 	?paintEvent@QToolButton@@MAEXPAVQPaintEvent@@@Z @ 411 NONAME ; void QToolButton::paintEvent(class QPaintEvent *)
 	?createHeuristicMask@QImage@@QBE?AV1@_N@Z @ 412 NONAME ; class QImage QImage::createHeuristicMask(bool) const
 	?supportsAnimation@QImageReader@@QBE_NXZ @ 413 NONAME ; bool QImageReader::supportsAnimation(void) const
@@ -542,7 +542,7 @@ EXPORTS
 	?dotsPerMeterX@QImage@@QBEHXZ @ 541 NONAME ; int QImage::dotsPerMeterX(void) const
 	??0QStyleOptionComboBox@@QAE@ABV0@@Z @ 542 NONAME ; QStyleOptionComboBox::QStyleOptionComboBox(class QStyleOptionComboBox const &)
 	?setBackground@QWorkspace@@QAEXABVQBrush@@@Z @ 543 NONAME ; void QWorkspace::setBackground(class QBrush const &)
-	?pixelSizeChanged@QGraphicsPixelizeEffect@@IAEXH@Z @ 544 NONAME ; void QGraphicsPixelizeEffect::pixelSizeChanged(int)
+	?pixelSizeChanged@QGraphicsPixelizeEffect@@IAEXH@Z @ 544 NONAME ABSENT ; void QGraphicsPixelizeEffect::pixelSizeChanged(int)
 	?cursorForPosition@QTextEdit@@QBE?AVQTextCursor@@ABVQPoint@@@Z @ 545 NONAME ; class QTextCursor QTextEdit::cursorForPosition(class QPoint const &) const
 	??0QQuaternion@@QAE@XZ @ 546 NONAME ; QQuaternion::QQuaternion(void)
 	?modificationChanged@QPlainTextEdit@@IAEX_N@Z @ 547 NONAME ; void QPlainTextEdit::modificationChanged(bool)
@@ -960,7 +960,7 @@ EXPORTS
 	?qt_metacall@QUndoView@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 959 NONAME ; int QUndoView::qt_metacall(enum QMetaObject::Call, int, void * *)
 	?overlinePos@QFontMetrics@@QBEHXZ @ 960 NONAME ; int QFontMetrics::overlinePos(void) const
 	?modifiers@QKeyEvent@@QBE?AV?$QFlags@W4KeyboardModifier@Qt@@@@XZ @ 961 NONAME ; class QFlags<enum Qt::KeyboardModifier> QKeyEvent::modifiers(void) const
-	?blurRadius@QPixmapDropShadowFilter@@QBEHXZ @ 962 NONAME ; int QPixmapDropShadowFilter::blurRadius(void) const
+	?blurRadius@QPixmapDropShadowFilter@@QBEHXZ @ 962 NONAME ABSENT ; int QPixmapDropShadowFilter::blurRadius(void) const
 	?trUtf8@QButtonGroup@@SA?AVQString@@PBD0@Z @ 963 NONAME ; class QString QButtonGroup::trUtf8(char const *, char const *)
 	?staticMetaObject@QWidget@@2UQMetaObject@@B @ 964 NONAME ; struct QMetaObject const QWidget::staticMetaObject
 	?mapToScene@QGraphicsView@@QBE?AVQPointF@@ABVQPoint@@@Z @ 965 NONAME ; class QPointF QGraphicsView::mapToScene(class QPoint const &) const
@@ -1049,7 +1049,7 @@ EXPORTS
 	?item@QTableWidget@@QBEPAVQTableWidgetItem@@HH@Z @ 1048 NONAME ; class QTableWidgetItem * QTableWidget::item(int, int) const
 	??0QRegion@@QAE@ABV0@@Z @ 1049 NONAME ; QRegion::QRegion(class QRegion const &)
 	?doLayout@QItemDelegate@@IBEXABVQStyleOptionViewItem@@PAVQRect@@11_N@Z @ 1050 NONAME ; void QItemDelegate::doLayout(class QStyleOptionViewItem const &, class QRect *, class QRect *, class QRect *, bool) const
-	?brightnessChanged@QGraphicsBloomEffect@@IAEXH@Z @ 1051 NONAME ; void QGraphicsBloomEffect::brightnessChanged(int)
+	?brightnessChanged@QGraphicsBloomEffect@@IAEXH@Z @ 1051 NONAME ABSENT ; void QGraphicsBloomEffect::brightnessChanged(int)
 	?type@QGraphicsProxyWidget@@UBEHXZ @ 1052 NONAME ; int QGraphicsProxyWidget::type(void) const
 	?numBytes@QImage@@QBEHXZ @ 1053 NONAME ; int QImage::numBytes(void) const
 	?clear@QMenuBar@@QAEXXZ @ 1054 NONAME ; void QMenuBar::clear(void)
@@ -1450,7 +1450,7 @@ EXPORTS
 	?focusProxy@QWidget@@QBEPAV1@XZ @ 1449 NONAME ; class QWidget * QWidget::focusProxy(void) const
 	?closestLegalPosition@QSplitterHandle@@IAEHH@Z @ 1450 NONAME ; int QSplitterHandle::closestLegalPosition(int)
 	?setExtension@QGraphicsEllipseItem@@MAEXW4Extension@QGraphicsItem@@ABVQVariant@@@Z @ 1451 NONAME ; void QGraphicsEllipseItem::setExtension(enum QGraphicsItem::Extension, class QVariant const &)
-	?tr@QGraphicsBloomEffect@@SA?AVQString@@PBD0H@Z @ 1452 NONAME ; class QString QGraphicsBloomEffect::tr(char const *, char const *, int)
+	?tr@QGraphicsBloomEffect@@SA?AVQString@@PBD0H@Z @ 1452 NONAME ABSENT ; class QString QGraphicsBloomEffect::tr(char const *, char const *, int)
 	?docHandle@QTextObject@@QBEPAVQTextDocumentPrivate@@XZ @ 1453 NONAME ; class QTextDocumentPrivate * QTextObject::docHandle(void) const
 	??0QTextControl@@QAE@ABVQString@@PAVQObject@@@Z @ 1454 NONAME ; QTextControl::QTextControl(class QString const &, class QObject *)
 	?blockBoundingRect@QPlainTextDocumentLayout@@UBE?AVQRectF@@ABVQTextBlock@@@Z @ 1455 NONAME ; class QRectF QPlainTextDocumentLayout::blockBoundingRect(class QTextBlock const &) const
@@ -1640,7 +1640,7 @@ EXPORTS
 	?angleChanged@QGraphicsRotation@@IAEXXZ @ 1639 NONAME ; void QGraphicsRotation::angleChanged(void)
 	?horizontalOffset@QTableView@@MBEHXZ @ 1640 NONAME ; int QTableView::horizontalOffset(void) const
 	?subWindowActivated@QMdiArea@@IAEXPAVQMdiSubWindow@@@Z @ 1641 NONAME ; void QMdiArea::subWindowActivated(class QMdiSubWindow *)
-	??0QGraphicsGrayscaleEffect@@QAE@PAVQObject@@@Z @ 1642 NONAME ; QGraphicsGrayscaleEffect::QGraphicsGrayscaleEffect(class QObject *)
+	??0QGraphicsGrayscaleEffect@@QAE@PAVQObject@@@Z @ 1642 NONAME ABSENT ; QGraphicsGrayscaleEffect::QGraphicsGrayscaleEffect(class QObject *)
 	?tr@QItemDelegate@@SA?AVQString@@PBD0H@Z @ 1643 NONAME ; class QString QItemDelegate::tr(char const *, char const *, int)
 	?isObscuredBy@QGraphicsPolygonItem@@UBE_NPBVQGraphicsItem@@@Z @ 1644 NONAME ; bool QGraphicsPolygonItem::isObscuredBy(class QGraphicsItem const *) const
 	?anchorClicked@QTextBrowser@@IAEXABVQUrl@@@Z @ 1645 NONAME ; void QTextBrowser::anchorClicked(class QUrl const &)
@@ -1648,7 +1648,7 @@ EXPORTS
 	?enterEvent@QMenu@@MAEXPAVQEvent@@@Z @ 1647 NONAME ; void QMenu::enterEvent(class QEvent *)
 	?ensureInputCapabilitiesChanged@QCoeFepInputContext@@AAEXXZ @ 1648 NONAME ; void QCoeFepInputContext::ensureInputCapabilitiesChanged(void)
 	?tr@QSwipeGesture@@SA?AVQString@@PBD0@Z @ 1649 NONAME ; class QString QSwipeGesture::tr(char const *, char const *)
-	?d_func@QGraphicsPixelizeEffect@@AAEPAVQGraphicsPixelizeEffectPrivate@@XZ @ 1650 NONAME ; class QGraphicsPixelizeEffectPrivate * QGraphicsPixelizeEffect::d_func(void)
+	?d_func@QGraphicsPixelizeEffect@@AAEPAVQGraphicsPixelizeEffectPrivate@@XZ @ 1650 NONAME ABSENT ; class QGraphicsPixelizeEffectPrivate * QGraphicsPixelizeEffect::d_func(void)
 	?completer@QComboBox@@QBEPAVQCompleter@@XZ @ 1651 NONAME ; class QCompleter * QComboBox::completer(void) const
 	?testOption@QMdiSubWindow@@QBE_NW4SubWindowOption@1@@Z @ 1652 NONAME ; bool QMdiSubWindow::testOption(enum QMdiSubWindow::SubWindowOption) const
 	?mapRectToScene@QGraphicsItem@@QBE?AVQRectF@@ABV2@@Z @ 1653 NONAME ; class QRectF QGraphicsItem::mapRectToScene(class QRectF const &) const
@@ -2133,7 +2133,7 @@ EXPORTS
 	?translate@QPainter@@QAEXABVQPoint@@@Z @ 2132 NONAME ; void QPainter::translate(class QPoint const &)
 	?tr@QStackedLayout@@SA?AVQString@@PBD0@Z @ 2133 NONAME ; class QString QStackedLayout::tr(char const *, char const *)
 	?dragLeaveEvent@QWidget@@MAEXPAVQDragLeaveEvent@@@Z @ 2134 NONAME ; void QWidget::dragLeaveEvent(class QDragLeaveEvent *)
-	?trUtf8@QGraphicsGrayscaleEffect@@SA?AVQString@@PBD0@Z @ 2135 NONAME ; class QString QGraphicsGrayscaleEffect::trUtf8(char const *, char const *)
+	?trUtf8@QGraphicsGrayscaleEffect@@SA?AVQString@@PBD0@Z @ 2135 NONAME ABSENT ; class QString QGraphicsGrayscaleEffect::trUtf8(char const *, char const *)
 	?format@QTextObject@@QBE?AVQTextFormat@@XZ @ 2136 NONAME ; class QTextFormat QTextObject::format(void) const
 	?addAction@QActionGroup@@QAEPAVQAction@@ABVQIcon@@ABVQString@@@Z @ 2137 NONAME ; class QAction * QActionGroup::addAction(class QIcon const &, class QString const &)
 	?update@QGraphicsEffect@@QAEXXZ @ 2138 NONAME ; void QGraphicsEffect::update(void)
@@ -2602,7 +2602,7 @@ EXPORTS
 	?d_func@QToolButton@@AAEPAVQToolButtonPrivate@@XZ @ 2601 NONAME ; class QToolButtonPrivate * QToolButton::d_func(void)
 	?opaqueArea@QGraphicsEllipseItem@@UBE?AVQPainterPath@@XZ @ 2602 NONAME ; class QPainterPath QGraphicsEllipseItem::opaqueArea(void) const
 	?hitTestComplexControl@QCommonStyle@@UBE?AW4SubControl@QStyle@@W4ComplexControl@3@PBVQStyleOptionComplex@@ABVQPoint@@PBVQWidget@@@Z @ 2603 NONAME ; enum QStyle::SubControl QCommonStyle::hitTestComplexControl(enum QStyle::ComplexControl, class QStyleOptionComplex const *, class QPoint const &, class QWidget const *) const
-	??0QGraphicsBloomEffect@@QAE@PAVQObject@@@Z @ 2604 NONAME ; QGraphicsBloomEffect::QGraphicsBloomEffect(class QObject *)
+	??0QGraphicsBloomEffect@@QAE@PAVQObject@@@Z @ 2604 NONAME ABSENT ; QGraphicsBloomEffect::QGraphicsBloomEffect(class QObject *)
 	?alternateBase@QPalette@@QBEABVQBrush@@XZ @ 2605 NONAME ; class QBrush const & QPalette::alternateBase(void) const
 	?qt_metacast@QColumnView@@UAEPAXPBD@Z @ 2606 NONAME ; void * QColumnView::qt_metacast(char const *)
 	??_0QQuaternion@@QAEAAV0@M@Z @ 2607 NONAME ; class QQuaternion & QQuaternion::operator/=(float)
@@ -2615,7 +2615,7 @@ EXPORTS
 	?options@QFileDialog@@QBE?AV?$QFlags@W4Option@QFileDialog@@@@XZ @ 2614 NONAME ; class QFlags<enum QFileDialog::Option> QFileDialog::options(void) const
 	?dataChanged@QHeaderView@@MAEXABVQModelIndex@@0@Z @ 2615 NONAME ; void QHeaderView::dataChanged(class QModelIndex const &, class QModelIndex const &)
 	?hideText@QWhatsThis@@SAXXZ @ 2616 NONAME ; void QWhatsThis::hideText(void)
-	?getStaticMetaObject@QGraphicsGrayscaleEffect@@SAABUQMetaObject@@XZ @ 2617 NONAME ; struct QMetaObject const & QGraphicsGrayscaleEffect::getStaticMetaObject(void)
+	?getStaticMetaObject@QGraphicsGrayscaleEffect@@SAABUQMetaObject@@XZ @ 2617 NONAME ABSENT ; struct QMetaObject const & QGraphicsGrayscaleEffect::getStaticMetaObject(void)
 	?construct@QApplicationPrivate@@QAEXXZ @ 2618 NONAME ; void QApplicationPrivate::construct(void)
 	?mouseReleaseEvent@QSizeGrip@@MAEXPAVQMouseEvent@@@Z @ 2619 NONAME ; void QSizeGrip::mouseReleaseEvent(class QMouseEvent *)
 	?currentIndex@QTabBar@@QBEHXZ @ 2620 NONAME ; int QTabBar::currentIndex(void) const
@@ -2664,7 +2664,7 @@ EXPORTS
 	?cleanIndex@QUndoStack@@QBEHXZ @ 2663 NONAME ; int QUndoStack::cleanIndex(void) const
 	?index@QFileSystemModel@@UBE?AVQModelIndex@@HHABV2@@Z @ 2664 NONAME ; class QModelIndex QFileSystemModel::index(int, int, class QModelIndex const &) const
 	??1QStyleOptionFrameV3@@QAE@XZ @ 2665 NONAME ; QStyleOptionFrameV3::~QStyleOptionFrameV3(void)
-	??1QGraphicsBloomEffect@@UAE@XZ @ 2666 NONAME ; QGraphicsBloomEffect::~QGraphicsBloomEffect(void)
+	??1QGraphicsBloomEffect@@UAE@XZ @ 2666 NONAME ABSENT ; QGraphicsBloomEffect::~QGraphicsBloomEffect(void)
 	??1QAbstractTextDocumentLayout@@UAE@XZ @ 2667 NONAME ; QAbstractTextDocumentLayout::~QAbstractTextDocumentLayout(void)
 	?scaled@QPixmap@@QBE?AV1@HHW4AspectRatioMode@Qt@@W4TransformationMode@3@@Z @ 2668 NONAME ; class QPixmap QPixmap::scaled(int, int, enum Qt::AspectRatioMode, enum Qt::TransformationMode) const
 	??_EQGraphicsTransform@@UAE@I@Z @ 2669 NONAME ; QGraphicsTransform::~QGraphicsTransform(unsigned int)
@@ -2682,7 +2682,7 @@ EXPORTS
 	?isBlockFormat@QTextFormat@@QBE_NXZ @ 2681 NONAME ; bool QTextFormat::isBlockFormat(void) const
 	??0QColormap@@QAE@ABV0@@Z @ 2682 NONAME ; QColormap::QColormap(class QColormap const &)
 	?rightPadding@QTextTableCellFormat@@QBEMXZ @ 2683 NONAME ; float QTextTableCellFormat::rightPadding(void) const
-	?staticMetaObject@QGraphicsBloomEffect@@2UQMetaObject@@B @ 2684 NONAME ; struct QMetaObject const QGraphicsBloomEffect::staticMetaObject
+	?staticMetaObject@QGraphicsBloomEffect@@2UQMetaObject@@B @ 2684 NONAME ABSENT ; struct QMetaObject const QGraphicsBloomEffect::staticMetaObject
 	?leading@QFontMetricsF@@QBEMXZ @ 2685 NONAME ; float QFontMetricsF::leading(void) const
 	?beginNativePainting@QPainter@@QAEXXZ @ 2686 NONAME ; void QPainter::beginNativePainting(void)
 	?addChildWidget@QLayout@@IAEXPAVQWidget@@@Z @ 2687 NONAME ; void QLayout::addChildWidget(class QWidget *)
@@ -2733,7 +2733,7 @@ EXPORTS
 	?data_ptr@QPicture@@QAEAAV?$QExplicitlySharedDataPointer@VQPicturePrivate@@@@XZ @ 2732 NONAME ; class QExplicitlySharedDataPointer<class QPicturePrivate> & QPicture::data_ptr(void)
 	?closeAllWindows@QApplication@@SAXXZ @ 2733 NONAME ; void QApplication::closeAllWindows(void)
 	?setMimeData@QDrag@@QAEXPAVQMimeData@@@Z @ 2734 NONAME ; void QDrag::setMimeData(class QMimeData *)
-	?trUtf8@QGraphicsGrayscaleEffect@@SA?AVQString@@PBD0H@Z @ 2735 NONAME ; class QString QGraphicsGrayscaleEffect::trUtf8(char const *, char const *, int)
+	?trUtf8@QGraphicsGrayscaleEffect@@SA?AVQString@@PBD0H@Z @ 2735 NONAME ABSENT ; class QString QGraphicsGrayscaleEffect::trUtf8(char const *, char const *, int)
 	?trUtf8@QStringListModel@@SA?AVQString@@PBD0H@Z @ 2736 NONAME ; class QString QStringListModel::trUtf8(char const *, char const *, int)
 	?trUtf8@QEventDispatcherS60@@SA?AVQString@@PBD0@Z @ 2737 NONAME ; class QString QEventDispatcherS60::trUtf8(char const *, char const *)
 	??0QMdiSubWindow@@QAE@PAVQWidget@@V?$QFlags@W4WindowType@Qt@@@@@Z @ 2738 NONAME ; QMdiSubWindow::QMdiSubWindow(class QWidget *, class QFlags<enum Qt::WindowType>)
@@ -2801,7 +2801,7 @@ EXPORTS
 	??4QTextFormatCollection@@QAEAAV0@ABV0@@Z @ 2800 NONAME ; class QTextFormatCollection & QTextFormatCollection::operator=(class QTextFormatCollection const &)
 	?setDecMode@QLCDNumber@@QAEXXZ @ 2801 NONAME ; void QLCDNumber::setDecMode(void)
 	?setSelected@QTreeWidgetItem@@QAEX_N@Z @ 2802 NONAME ; void QTreeWidgetItem::setSelected(bool)
-	??_EQGraphicsGrayscaleEffect@@UAE@I@Z @ 2803 NONAME ; QGraphicsGrayscaleEffect::~QGraphicsGrayscaleEffect(unsigned int)
+	??_EQGraphicsGrayscaleEffect@@UAE@I@Z @ 2803 NONAME ABSENT ; QGraphicsGrayscaleEffect::~QGraphicsGrayscaleEffect(unsigned int)
 	?setTransformations@QGraphicsItem@@QAEXABV?$QList@PAVQGraphicsTransform@@@@@Z @ 2804 NONAME ; void QGraphicsItem::setTransformations(class QList<class QGraphicsTransform *> const &)
 	?associatedWidgets@QAction@@QBE?AV?$QList@PAVQWidget@@@@XZ @ 2805 NONAME ; class QList<class QWidget *> QAction::associatedWidgets(void) const
 	??0QTransform@@QAE@W4Initialization@Qt@@@Z @ 2806 NONAME ; QTransform::QTransform(enum Qt::Initialization)
@@ -2943,7 +2943,7 @@ EXPORTS
 	??1QTextDocumentFragment@@QAE@XZ @ 2942 NONAME ; QTextDocumentFragment::~QTextDocumentFragment(void)
 	?setInsertPolicy@QComboBox@@QAEXW4InsertPolicy@1@@Z @ 2943 NONAME ; void QComboBox::setInsertPolicy(enum QComboBox::InsertPolicy)
 	?setHorizontalSpacing@QGridLayout@@QAEXH@Z @ 2944 NONAME ; void QGridLayout::setHorizontalSpacing(int)
-	?setPixelSize@QGraphicsPixelizeEffect@@QAEXH@Z @ 2945 NONAME ; void QGraphicsPixelizeEffect::setPixelSize(int)
+	?setPixelSize@QGraphicsPixelizeEffect@@QAEXH@Z @ 2945 NONAME ABSENT ; void QGraphicsPixelizeEffect::setPixelSize(int)
 	?tr@QImageIOPlugin@@SA?AVQString@@PBD0@Z @ 2946 NONAME ; class QString QImageIOPlugin::tr(char const *, char const *)
 	?setStyle@QApplication@@SAPAVQStyle@@ABVQString@@@Z @ 2947 NONAME ; class QStyle * QApplication::setStyle(class QString const &)
 	??0QDrag@@QAE@PAVQWidget@@@Z @ 2948 NONAME ; QDrag::QDrag(class QWidget *)
@@ -2978,7 +2978,7 @@ EXPORTS
 	?onTransition@QKeyEventTransition@@MAEXPAVQEvent@@@Z @ 2977 NONAME ; void QKeyEventTransition::onTransition(class QEvent *)
 	?size@QImageReader@@QBE?AVQSize@@XZ @ 2978 NONAME ; class QSize QImageReader::size(void) const
 	?unite@QRegion@@QBE?AV1@ABVQRect@@@Z @ 2979 NONAME ; class QRegion QRegion::unite(class QRect const &) const
-	?strength@QGraphicsBloomEffect@@QBEMXZ @ 2980 NONAME ; float QGraphicsBloomEffect::strength(void) const
+	?strength@QGraphicsBloomEffect@@QBEMXZ @ 2980 NONAME ABSENT ; float QGraphicsBloomEffect::strength(void) const
 	?registerEditor@QItemEditorFactory@@QAEXW4Type@QVariant@@PAVQItemEditorCreatorBase@@@Z @ 2981 NONAME ; void QItemEditorFactory::registerEditor(enum QVariant::Type, class QItemEditorCreatorBase *)
 	?count@QListWidget@@QBEHXZ @ 2982 NONAME ; int QListWidget::count(void) const
 	?loadFromData@QPixmap@@QAE_NPBEIPBDV?$QFlags@W4ImageConversionFlag@Qt@@@@@Z @ 2983 NONAME ; bool QPixmap::loadFromData(unsigned char const *, unsigned int, char const *, class QFlags<enum Qt::ImageConversionFlag>)
@@ -3099,7 +3099,7 @@ EXPORTS
 	?nextCheckState@QToolButton@@MAEXXZ @ 3098 NONAME ; void QToolButton::nextCheckState(void)
 	?polish@QCommonStyle@@UAEXPAVQApplication@@@Z @ 3099 NONAME ; void QCommonStyle::polish(class QApplication *)
 	?lengthVectorProperty@QTextFormat@@QBE?AV?$QVector@VQTextLength@@@@H@Z @ 3100 NONAME ; class QVector<class QTextLength> QTextFormat::lengthVectorProperty(int) const
-	?getStaticMetaObject@QGraphicsBloomEffect@@SAABUQMetaObject@@XZ @ 3101 NONAME ; struct QMetaObject const & QGraphicsBloomEffect::getStaticMetaObject(void)
+	?getStaticMetaObject@QGraphicsBloomEffect@@SAABUQMetaObject@@XZ @ 3101 NONAME ABSENT ; struct QMetaObject const & QGraphicsBloomEffect::getStaticMetaObject(void)
 	?setMinimumDateTime@QDateTimeEdit@@QAEXABVQDateTime@@@Z @ 3102 NONAME ; void QDateTimeEdit::setMinimumDateTime(class QDateTime const &)
 	??1QResizeEvent@@UAE@XZ @ 3103 NONAME ; QResizeEvent::~QResizeEvent(void)
 	?boundingRectFor@QPixmapConvolutionFilter@@UBE?AVQRectF@@ABV2@@Z @ 3104 NONAME ; class QRectF QPixmapConvolutionFilter::boundingRectFor(class QRectF const &) const
@@ -3115,7 +3115,7 @@ EXPORTS
 	?activateSymbianWindow@QWidgetPrivate@@QAEXPAVCCoeControl@@@Z @ 3114 NONAME ; void QWidgetPrivate::activateSymbianWindow(class CCoeControl *)
 	?loadFromData@QImage@@QAE_NPBEHPBD@Z @ 3115 NONAME ; bool QImage::loadFromData(unsigned char const *, int, char const *)
 	?addItem@QGridLayout@@QAEXPAVQLayoutItem@@HHHHV?$QFlags@W4AlignmentFlag@Qt@@@@@Z @ 3116 NONAME ; void QGridLayout::addItem(class QLayoutItem *, int, int, int, int, class QFlags<enum Qt::AlignmentFlag>)
-	?d_func@QGraphicsPixelizeEffect@@ABEPBVQGraphicsPixelizeEffectPrivate@@XZ @ 3117 NONAME ; class QGraphicsPixelizeEffectPrivate const * QGraphicsPixelizeEffect::d_func(void) const
+	?d_func@QGraphicsPixelizeEffect@@ABEPBVQGraphicsPixelizeEffectPrivate@@XZ @ 3117 NONAME ABSENT ; class QGraphicsPixelizeEffectPrivate const * QGraphicsPixelizeEffect::d_func(void) const
 	??D@YA?AVQLine@@ABV0@ABVQTransform@@@Z @ 3118 NONAME ; class QLine operator*(class QLine const &, class QTransform const &)
 	?boundingRectFor@QPixmapDropShadowFilter@@UBE?AVQRectF@@ABV2@@Z @ 3119 NONAME ; class QRectF QPixmapDropShadowFilter::boundingRectFor(class QRectF const &) const
 	?del@QLineEdit@@QAEXXZ @ 3120 NONAME ; void QLineEdit::del(void)
@@ -3151,7 +3151,7 @@ EXPORTS
 	?device@QImageIOHandler@@QBEPAVQIODevice@@XZ @ 3150 NONAME ; class QIODevice * QImageIOHandler::device(void) const
 	?setCurrentIndex@QStackedLayout@@QAEXH@Z @ 3151 NONAME ; void QStackedLayout::setCurrentIndex(int)
 	?d_func@QWindowsStyle@@AAEPAVQWindowsStylePrivate@@XZ @ 3152 NONAME ; class QWindowsStylePrivate * QWindowsStyle::d_func(void)
-	?tr@QGraphicsGrayscaleEffect@@SA?AVQString@@PBD0H@Z @ 3153 NONAME ; class QString QGraphicsGrayscaleEffect::tr(char const *, char const *, int)
+	?tr@QGraphicsGrayscaleEffect@@SA?AVQString@@PBD0H@Z @ 3153 NONAME ABSENT ; class QString QGraphicsGrayscaleEffect::tr(char const *, char const *, int)
 	?sidebarUrls@QFileDialog@@QBE?AV?$QList@VQUrl@@@@XZ @ 3154 NONAME ; class QList<class QUrl> QFileDialog::sidebarUrls(void) const
 	??1QPictureFormatInterface@@UAE@XZ @ 3155 NONAME ; QPictureFormatInterface::~QPictureFormatInterface(void)
 	?setLineCount@QTextBlock@@QAEXH@Z @ 3156 NONAME ; void QTextBlock::setLineCount(int)
@@ -3365,7 +3365,7 @@ EXPORTS
 	?setObjectFormat@QTextFormatCollection@@QAEXHABVQTextFormat@@@Z @ 3364 NONAME ; void QTextFormatCollection::setObjectFormat(int, class QTextFormat const &)
 	?setExtension@QGraphicsSimpleTextItem@@MAEXW4Extension@QGraphicsItem@@ABVQVariant@@@Z @ 3365 NONAME ; void QGraphicsSimpleTextItem::setExtension(enum QGraphicsItem::Extension, class QVariant const &)
 	?palette@QGraphicsWidget@@QBE?AVQPalette@@XZ @ 3366 NONAME ; class QPalette QGraphicsWidget::palette(void) const
-	?pixmap@QGraphicsEffectSource@@QBE?AVQPixmap@@W4CoordinateSystem@Qt@@PAVQPoint@@@Z @ 3367 NONAME ; class QPixmap QGraphicsEffectSource::pixmap(enum Qt::CoordinateSystem, class QPoint *) const
+	?pixmap@QGraphicsEffectSource@@QBE?AVQPixmap@@W4CoordinateSystem@Qt@@PAVQPoint@@@Z @ 3367 NONAME ABSENT ; class QPixmap QGraphicsEffectSource::pixmap(enum Qt::CoordinateSystem, class QPoint *) const
 	?setColor@QPen@@QAEXABVQColor@@@Z @ 3368 NONAME ; void QPen::setColor(class QColor const &)
 	?pen@QPaintEngineState@@QBE?AVQPen@@XZ @ 3369 NONAME ; class QPen QPaintEngineState::pen(void) const
 	?fileName@QSound@@QBE?AVQString@@XZ @ 3370 NONAME ; class QString QSound::fileName(void) const
@@ -3385,7 +3385,7 @@ EXPORTS
 	?qt_metacall@QStyle@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 3384 NONAME ; int QStyle::qt_metacall(enum QMetaObject::Call, int, void * *)
 	??1QApplication@@UAE@XZ @ 3385 NONAME ; QApplication::~QApplication(void)
 	?setBaseSize@QWidget@@QAEXABVQSize@@@Z @ 3386 NONAME ; void QWidget::setBaseSize(class QSize const &)
-	?trUtf8@QGraphicsBloomEffect@@SA?AVQString@@PBD0@Z @ 3387 NONAME ; class QString QGraphicsBloomEffect::trUtf8(char const *, char const *)
+	?trUtf8@QGraphicsBloomEffect@@SA?AVQString@@PBD0@Z @ 3387 NONAME ABSENT ; class QString QGraphicsBloomEffect::trUtf8(char const *, char const *)
 	?setWindowFilePath_helper@QWidgetPrivate@@QAEXABVQString@@@Z @ 3388 NONAME ; void QWidgetPrivate::setWindowFilePath_helper(class QString const &)
 	?setSourceModel@QSortFilterProxyModel@@UAEXPAVQAbstractItemModel@@@Z @ 3389 NONAME ; void QSortFilterProxyModel::setSourceModel(class QAbstractItemModel *)
 	?removeStack@QUndoGroup@@QAEXPAVQUndoStack@@@Z @ 3390 NONAME ; void QUndoGroup::removeStack(class QUndoStack *)
@@ -3438,7 +3438,7 @@ EXPORTS
 	?MopSupplyObject@QCoeFepInputContext@@UAE?AVPtr@TTypeUid@@V3@@Z @ 3437 NONAME ; class TTypeUid::Ptr QCoeFepInputContext::MopSupplyObject(class TTypeUid)
 	?styleName@QGuiPlatformPlugin@@UAE?AVQString@@XZ @ 3438 NONAME ; class QString QGuiPlatformPlugin::styleName(void)
 	?rowsInserted@QAbstractItemView@@MAEXABVQModelIndex@@HH@Z @ 3439 NONAME ; void QAbstractItemView::rowsInserted(class QModelIndex const &, int, int)
-	?setBlurHint@QGraphicsBloomEffect@@QAEXW4RenderHint@Qt@@@Z @ 3440 NONAME ; void QGraphicsBloomEffect::setBlurHint(enum Qt::RenderHint)
+	?setBlurHint@QGraphicsBloomEffect@@QAEXW4RenderHint@Qt@@@Z @ 3440 NONAME ABSENT ; void QGraphicsBloomEffect::setBlurHint(enum Qt::RenderHint)
 	?gradient@QBrush@@QBEPBVQGradient@@XZ @ 3441 NONAME ; class QGradient const * QBrush::gradient(void) const
 	?hasFocus@QWidget@@QBE_NXZ @ 3442 NONAME ; bool QWidget::hasFocus(void) const
 	??0Symbol@QCss@@QAE@XZ @ 3443 NONAME ; QCss::Symbol::Symbol(void)
@@ -3464,7 +3464,7 @@ EXPORTS
 	?header@QTreeView@@QBEPAVQHeaderView@@XZ @ 3463 NONAME ; class QHeaderView * QTreeView::header(void) const
 	?scrollToAnchor@QTextEdit@@QAEXABVQString@@@Z @ 3464 NONAME ; void QTextEdit::scrollToAnchor(class QString const &)
 	??_EQGraphicsSystem@@UAE@I@Z @ 3465 NONAME ; QGraphicsSystem::~QGraphicsSystem(unsigned int)
-	?metaObject@QGraphicsPixelizeEffect@@UBEPBUQMetaObject@@XZ @ 3466 NONAME ; struct QMetaObject const * QGraphicsPixelizeEffect::metaObject(void) const
+	?metaObject@QGraphicsPixelizeEffect@@UBEPBUQMetaObject@@XZ @ 3466 NONAME ABSENT ; struct QMetaObject const * QGraphicsPixelizeEffect::metaObject(void) const
 	?setWrapping@QDial@@QAEX_N@Z @ 3467 NONAME ; void QDial::setWrapping(bool)
 	?setActive@QGraphicsItem@@QAEX_N@Z @ 3468 NONAME ; void QGraphicsItem::setActive(bool)
 	?wordWrap@QLabel@@QBE_NXZ @ 3469 NONAME ; bool QLabel::wordWrap(void) const
@@ -3915,7 +3915,7 @@ EXPORTS
 	?setConvolutionKernel@QPixmapConvolutionFilter@@QAEXPBMHH@Z @ 3914 NONAME ; void QPixmapConvolutionFilter::setConvolutionKernel(float const *, int, int)
 	?animate_menu@QApplicationPrivate@@2_NA @ 3915 NONAME ; bool QApplicationPrivate::animate_menu
 	?eventTest@QMouseEventTransition@@MAE_NPAVQEvent@@@Z @ 3916 NONAME ; bool QMouseEventTransition::eventTest(class QEvent *)
-	??1QGraphicsPixelizeEffect@@UAE@XZ @ 3917 NONAME ; QGraphicsPixelizeEffect::~QGraphicsPixelizeEffect(void)
+	??1QGraphicsPixelizeEffect@@UAE@XZ @ 3917 NONAME ABSENT ; QGraphicsPixelizeEffect::~QGraphicsPixelizeEffect(void)
 	?staticMetaObject@QTabWidget@@2UQMetaObject@@B @ 3918 NONAME ; struct QMetaObject const QTabWidget::staticMetaObject
 	?id@QUndoCommand@@UBEHXZ @ 3919 NONAME ; int QUndoCommand::id(void) const
 	?contextMenuEvent@QLabel@@MAEXPAVQContextMenuEvent@@@Z @ 3920 NONAME ; void QLabel::contextMenuEvent(class QContextMenuEvent *)
@@ -3989,7 +3989,7 @@ EXPORTS
 	?cursorRect@QTextControl@@QBE?AVQRectF@@ABVQTextCursor@@@Z @ 3988 NONAME ; class QRectF QTextControl::cursorRect(class QTextCursor const &) const
 	?drawItems@QGraphicsView@@MAEXPAVQPainter@@HQAPAVQGraphicsItem@@QBVQStyleOptionGraphicsItem@@@Z @ 3989 NONAME ; void QGraphicsView::drawItems(class QPainter *, int, class QGraphicsItem * * const, class QStyleOptionGraphicsItem const * const)
 	?activateChildLayoutsRecursively@QWidgetPrivate@@QAEXXZ @ 3990 NONAME ; void QWidgetPrivate::activateChildLayoutsRecursively(void)
-	?tr@QGraphicsBloomEffect@@SA?AVQString@@PBD0@Z @ 3991 NONAME ; class QString QGraphicsBloomEffect::tr(char const *, char const *)
+	?tr@QGraphicsBloomEffect@@SA?AVQString@@PBD0@Z @ 3991 NONAME ABSENT ; class QString QGraphicsBloomEffect::tr(char const *, char const *)
 	?mimeData@QClipboard@@QBEPBVQMimeData@@W4Mode@1@@Z @ 3992 NONAME ; class QMimeData const * QClipboard::mimeData(enum QClipboard::Mode) const
 	?createWinId@QWidget@@QAEXXZ @ 3993 NONAME ; void QWidget::createWinId(void)
 	?closeActiveSubWindow@QMdiArea@@QAEXXZ @ 3994 NONAME ; void QMdiArea::closeActiveSubWindow(void)
@@ -4098,7 +4098,7 @@ EXPORTS
 	?columnWidths@QColumnView@@QBE?AV?$QList@H@@XZ @ 4097 NONAME ; class QList<int> QColumnView::columnWidths(void) const
 	?scale@QPainter@@QAEXMM@Z @ 4098 NONAME ; void QPainter::scale(float, float)
 	?setShortcut@QAction@@QAEXABVQKeySequence@@@Z @ 4099 NONAME ; void QAction::setShortcut(class QKeySequence const &)
-	?draw@QGraphicsBloomEffect@@MAEXPAVQPainter@@PAVQGraphicsEffectSource@@@Z @ 4100 NONAME ; void QGraphicsBloomEffect::draw(class QPainter *, class QGraphicsEffectSource *)
+	?draw@QGraphicsBloomEffect@@MAEXPAVQPainter@@PAVQGraphicsEffectSource@@@Z @ 4100 NONAME ABSENT ; void QGraphicsBloomEffect::draw(class QPainter *, class QGraphicsEffectSource *)
 	?setGeometry@QWidget@@QAEXABVQRect@@@Z @ 4101 NONAME ; void QWidget::setGeometry(class QRect const &)
 	?clear@QMenu@@QAEXXZ @ 4102 NONAME ; void QMenu::clear(void)
 	?mouseDoubleClickEvent@QAbstractScrollArea@@MAEXPAVQMouseEvent@@@Z @ 4103 NONAME ; void QAbstractScrollArea::mouseDoubleClickEvent(class QMouseEvent *)
@@ -4109,7 +4109,7 @@ EXPORTS
 	?dragEnterEvent@QGraphicsScene@@MAEXPAVQGraphicsSceneDragDropEvent@@@Z @ 4108 NONAME ; void QGraphicsScene::dragEnterEvent(class QGraphicsSceneDragDropEvent *)
 	?draw@QTextLine@@QBEXPAVQPainter@@ABVQPointF@@PBUFormatRange@QTextLayout@@@Z @ 4109 NONAME ; void QTextLine::draw(class QPainter *, class QPointF const &, struct QTextLayout::FormatRange const *) const
 	?type@QSymbianEvent@@QBE?AW4Type@1@XZ @ 4110 NONAME ; enum QSymbianEvent::Type QSymbianEvent::type(void) const
-	?boundingRectFor@QGraphicsBloomEffect@@UBE?AVQRectF@@ABV2@@Z @ 4111 NONAME ; class QRectF QGraphicsBloomEffect::boundingRectFor(class QRectF const &) const
+	?boundingRectFor@QGraphicsBloomEffect@@UBE?AVQRectF@@ABV2@@Z @ 4111 NONAME ABSENT ; class QRectF QGraphicsBloomEffect::boundingRectFor(class QRectF const &) const
 	?setDockOptions@QMainWindow@@QAEXV?$QFlags@W4DockOption@QMainWindow@@@@@Z @ 4112 NONAME ; void QMainWindow::setDockOptions(class QFlags<enum QMainWindow::DockOption>)
 	?canUndoChanged@QUndoGroup@@IAEX_N@Z @ 4113 NONAME ; void QUndoGroup::canUndoChanged(bool)
 	?d_func@QMdiArea@@AAEPAVQMdiAreaPrivate@@XZ @ 4114 NONAME ; class QMdiAreaPrivate * QMdiArea::d_func(void)
@@ -4159,7 +4159,7 @@ EXPORTS
 	?isUndoRedoEnabled@QPlainTextEdit@@QBE_NXZ @ 4158 NONAME ; bool QPlainTextEdit::isUndoRedoEnabled(void) const
 	?clicked@QGroupBox@@IAEX_N@Z @ 4159 NONAME ; void QGroupBox::clicked(bool)
 	?setKeyboardSingleStep@QMdiSubWindow@@QAEXH@Z @ 4160 NONAME ; void QMdiSubWindow::setKeyboardSingleStep(int)
-	?brightness@QGraphicsBloomEffect@@QBEHXZ @ 4161 NONAME ; int QGraphicsBloomEffect::brightness(void) const
+	?brightness@QGraphicsBloomEffect@@QBEHXZ @ 4161 NONAME ABSENT ; int QGraphicsBloomEffect::brightness(void) const
 	??_EQDragMoveEvent@@UAE@I@Z @ 4162 NONAME ; QDragMoveEvent::~QDragMoveEvent(unsigned int)
 	?isItemSelected@QListWidget@@QBE_NPBVQListWidgetItem@@@Z @ 4163 NONAME ; bool QListWidget::isItemSelected(class QListWidgetItem const *) const
 	?d_func@QGraphicsBlurEffect@@ABEPBVQGraphicsBlurEffectPrivate@@XZ @ 4164 NONAME ; class QGraphicsBlurEffectPrivate const * QGraphicsBlurEffect::d_func(void) const
@@ -4297,7 +4297,7 @@ EXPORTS
 	?isAreaAllowed@QToolBar@@QBE_NW4ToolBarArea@Qt@@@Z @ 4296 NONAME ; bool QToolBar::isAreaAllowed(enum Qt::ToolBarArea) const
 	?fontWeight@QTextCharFormat@@QBEHXZ @ 4297 NONAME ; int QTextCharFormat::fontWeight(void) const
 	?staticMetaObject@QTextList@@2UQMetaObject@@B @ 4298 NONAME ; struct QMetaObject const QTextList::staticMetaObject
-	?setBlurRadius@QPixmapDropShadowFilter@@QAEXH@Z @ 4299 NONAME ; void QPixmapDropShadowFilter::setBlurRadius(int)
+	?setBlurRadius@QPixmapDropShadowFilter@@QAEXH@Z @ 4299 NONAME ABSENT ; void QPixmapDropShadowFilter::setBlurRadius(int)
 	?GetEditorContentForFep@QCoeFepInputContext@@UBEXAAVTDes16@@HH@Z @ 4300 NONAME ; void QCoeFepInputContext::GetEditorContentForFep(class TDes16 &, int, int) const
 	?trUtf8@QGraphicsWidget@@SA?AVQString@@PBD0H@Z @ 4301 NONAME ; class QString QGraphicsWidget::trUtf8(char const *, char const *, int)
 	?extraItemCache@QGraphicsItemPrivate@@QBEPAVQGraphicsItemCache@@XZ @ 4302 NONAME ; class QGraphicsItemCache * QGraphicsItemPrivate::extraItemCache(void) const
@@ -4663,7 +4663,7 @@ EXPORTS
 	?event@QAbstractSlider@@MAE_NPAVQEvent@@@Z @ 4662 NONAME ; bool QAbstractSlider::event(class QEvent *)
 	??_EQS60Style@@UAE@I@Z @ 4663 NONAME ; QS60Style::~QS60Style(unsigned int)
 	?setModal@QDialog@@QAEX_N@Z @ 4664 NONAME ; void QDialog::setModal(bool)
-	??_EQGraphicsBloomEffect@@UAE@I@Z @ 4665 NONAME ; QGraphicsBloomEffect::~QGraphicsBloomEffect(unsigned int)
+	??_EQGraphicsBloomEffect@@UAE@I@Z @ 4665 NONAME ABSENT ; QGraphicsBloomEffect::~QGraphicsBloomEffect(unsigned int)
 	?tr@QDoubleSpinBox@@SA?AVQString@@PBD0@Z @ 4666 NONAME ; class QString QDoubleSpinBox::tr(char const *, char const *)
 	?isNavigationBarVisible@QCalendarWidget@@QBE_NXZ @ 4667 NONAME ; bool QCalendarWidget::isNavigationBarVisible(void) const
 	??0QStatusBar@@QAE@PAVQWidget@@@Z @ 4668 NONAME ; QStatusBar::QStatusBar(class QWidget *)
@@ -4674,7 +4674,7 @@ EXPORTS
 	?heightForWidth@QBoxLayout@@UBEHH@Z @ 4673 NONAME ; int QBoxLayout::heightForWidth(int) const
 	?specialValueText@QAbstractSpinBox@@QBE?AVQString@@XZ @ 4674 NONAME ; class QString QAbstractSpinBox::specialValueText(void) const
 	?showEvent@QGraphicsView@@MAEXPAVQShowEvent@@@Z @ 4675 NONAME ; void QGraphicsView::showEvent(class QShowEvent *)
-	?blurRadiusChanged@QGraphicsBloomEffect@@IAEXH@Z @ 4676 NONAME ; void QGraphicsBloomEffect::blurRadiusChanged(int)
+	?blurRadiusChanged@QGraphicsBloomEffect@@IAEXH@Z @ 4676 NONAME ABSENT ; void QGraphicsBloomEffect::blurRadiusChanged(int)
 	?setAutoCompletionCaseSensitivity@QComboBox@@QAEXW4CaseSensitivity@Qt@@@Z @ 4677 NONAME ; void QComboBox::setAutoCompletionCaseSensitivity(enum Qt::CaseSensitivity)
 	?itemDoubleClicked@QTreeWidget@@IAEXPAVQTreeWidgetItem@@H@Z @ 4678 NONAME ; void QTreeWidget::itemDoubleClicked(class QTreeWidgetItem *, int)
 	?setFontItalic@QTextEdit@@QAEX_N@Z @ 4679 NONAME ; void QTextEdit::setFontItalic(bool)
@@ -4741,7 +4741,7 @@ EXPORTS
 	?type@QGraphicsItem@@UBEHXZ @ 4740 NONAME ; int QGraphicsItem::type(void) const
 	?modifiers@QInputEvent@@QBE?AV?$QFlags@W4KeyboardModifier@Qt@@@@XZ @ 4741 NONAME ; class QFlags<enum Qt::KeyboardModifier> QInputEvent::modifiers(void) const
 	?transformed@QBitmap@@QBE?AV1@ABVQTransform@@@Z @ 4742 NONAME ; class QBitmap QBitmap::transformed(class QTransform const &) const
-	?tr@QGraphicsGrayscaleEffect@@SA?AVQString@@PBD0@Z @ 4743 NONAME ; class QString QGraphicsGrayscaleEffect::tr(char const *, char const *)
+	?tr@QGraphicsGrayscaleEffect@@SA?AVQString@@PBD0@Z @ 4743 NONAME ABSENT ; class QString QGraphicsGrayscaleEffect::tr(char const *, char const *)
 	?setBlurHint@QGraphicsBlurEffect@@QAEXW4RenderHint@Qt@@@Z @ 4744 NONAME ; void QGraphicsBlurEffect::setBlurHint(enum Qt::RenderHint)
 	?event@QDockWidget@@MAE_NPAVQEvent@@@Z @ 4745 NONAME ; bool QDockWidget::event(class QEvent *)
 	??_EQStyle@@UAE@I@Z @ 4746 NONAME ; QStyle::~QStyle(unsigned int)
@@ -4835,7 +4835,7 @@ EXPORTS
 	?setStandardButtons@QMessageBox@@QAEXV?$QFlags@W4StandardButton@QMessageBox@@@@@Z @ 4834 NONAME ; void QMessageBox::setStandardButtons(class QFlags<enum QMessageBox::StandardButton>)
 	??0QTextTableCell@@QAE@ABV0@@Z @ 4835 NONAME ; QTextTableCell::QTextTableCell(class QTextTableCell const &)
 	?createStandardContextMenu@QTextControl@@QAEPAVQMenu@@ABVQPointF@@PAVQWidget@@@Z @ 4836 NONAME ; class QMenu * QTextControl::createStandardContextMenu(class QPointF const &, class QWidget *)
-	?metaObject@QGraphicsGrayscaleEffect@@UBEPBUQMetaObject@@XZ @ 4837 NONAME ; struct QMetaObject const * QGraphicsGrayscaleEffect::metaObject(void) const
+	?metaObject@QGraphicsGrayscaleEffect@@UBEPBUQMetaObject@@XZ @ 4837 NONAME ABSENT ; struct QMetaObject const * QGraphicsGrayscaleEffect::metaObject(void) const
 	??9QFont@@QBE_NABV0@@Z @ 4838 NONAME ; bool QFont::operator!=(class QFont const &) const
 	?yearShown@QCalendarWidget@@QBEHXZ @ 4839 NONAME ; int QCalendarWidget::yearShown(void) const
 	?setRowSpacing@QGraphicsGridLayout@@QAEXHM@Z @ 4840 NONAME ; void QGraphicsGridLayout::setRowSpacing(int, float)
@@ -5072,7 +5072,7 @@ EXPORTS
 	?removeToolBar@QMainWindow@@QAEXPAVQToolBar@@@Z @ 5071 NONAME ; void QMainWindow::removeToolBar(class QToolBar *)
 	??0QGraphicsItemAnimation@@QAE@PAVQObject@@@Z @ 5072 NONAME ; QGraphicsItemAnimation::QGraphicsItemAnimation(class QObject *)
 	?addStrut@QBoxLayout@@QAEXH@Z @ 5073 NONAME ; void QBoxLayout::addStrut(int)
-	??1QGraphicsGrayscaleEffect@@UAE@XZ @ 5074 NONAME ; QGraphicsGrayscaleEffect::~QGraphicsGrayscaleEffect(void)
+	??1QGraphicsGrayscaleEffect@@UAE@XZ @ 5074 NONAME ABSENT ; QGraphicsGrayscaleEffect::~QGraphicsGrayscaleEffect(void)
 	?setSelection@QListView@@MAEXABVQRect@@V?$QFlags@W4SelectionFlag@QItemSelectionModel@@@@@Z @ 5075 NONAME ; void QListView::setSelection(class QRect const &, class QFlags<enum QItemSelectionModel::SelectionFlag>)
 	?staticMetaObject@QAbstractSpinBox@@2UQMetaObject@@B @ 5076 NONAME ; struct QMetaObject const QAbstractSpinBox::staticMetaObject
 	?trUtf8@QAbstractItemDelegate@@SA?AVQString@@PBD0@Z @ 5077 NONAME ; class QString QAbstractItemDelegate::trUtf8(char const *, char const *)
@@ -5189,7 +5189,7 @@ EXPORTS
 	?toCmyk@QColor@@QBE?AV1@XZ @ 5188 NONAME ; class QColor QColor::toCmyk(void) const
 	?maximum@QProgressBar@@QBEHXZ @ 5189 NONAME ; int QProgressBar::maximum(void) const
 	?geometry@QGraphicsLayoutItem@@QBE?AVQRectF@@XZ @ 5190 NONAME ; class QRectF QGraphicsLayoutItem::geometry(void) const
-	?blurRadiusChanged@QGraphicsBlurEffect@@IAEXH@Z @ 5191 NONAME ; void QGraphicsBlurEffect::blurRadiusChanged(int)
+	?blurRadiusChanged@QGraphicsBlurEffect@@IAEXH@Z @ 5191 NONAME ABSENT ; void QGraphicsBlurEffect::blurRadiusChanged(int)
 	?qt_metacall@QFontDialog@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 5192 NONAME ; int QFontDialog::qt_metacall(enum QMetaObject::Call, int, void * *)
 	?layoutSpacing@QStyle@@QBEHW4ControlType@QSizePolicy@@0W4Orientation@Qt@@PBVQStyleOption@@PBVQWidget@@@Z @ 5193 NONAME ; int QStyle::layoutSpacing(enum QSizePolicy::ControlType, enum QSizePolicy::ControlType, enum Qt::Orientation, class QStyleOption const *, class QWidget const *) const
 	?invalidate@QFormLayout@@UAEXXZ @ 5194 NONAME ; void QFormLayout::invalidate(void)
@@ -5286,7 +5286,7 @@ EXPORTS
 	?setFontOverline@QTextCharFormat@@QAEX_N@Z @ 5285 NONAME ; void QTextCharFormat::setFontOverline(bool)
 	?selectedIndexes@QAbstractItemView@@MBE?AV?$QList@VQModelIndex@@@@XZ @ 5286 NONAME ; class QList<class QModelIndex> QAbstractItemView::selectedIndexes(void) const
 	?addPixmap@QIcon@@QAEXABVQPixmap@@W4Mode@1@W4State@1@@Z @ 5287 NONAME ; void QIcon::addPixmap(class QPixmap const &, enum QIcon::Mode, enum QIcon::State)
-	?blurRadius@QGraphicsBloomEffect@@QBEHXZ @ 5288 NONAME ; int QGraphicsBloomEffect::blurRadius(void) const
+	?blurRadius@QGraphicsBloomEffect@@QBEHXZ @ 5288 NONAME ABSENT ; int QGraphicsBloomEffect::blurRadius(void) const
 	?setSortLocaleAware@QSortFilterProxyModel@@QAEX_N@Z @ 5289 NONAME ; void QSortFilterProxyModel::setSortLocaleAware(bool)
 	?blockCountChanged@QTextControl@@IAEXH@Z @ 5290 NONAME ; void QTextControl::blockCountChanged(int)
 	?mousePressEvent@QSplashScreen@@MAEXPAVQMouseEvent@@@Z @ 5291 NONAME ; void QSplashScreen::mousePressEvent(class QMouseEvent *)
@@ -5482,7 +5482,7 @@ EXPORTS
 	?itemData@QComboBox@@QBE?AVQVariant@@HH@Z @ 5481 NONAME ; class QVariant QComboBox::itemData(int, int) const
 	?RestoreMenuL@QS60MainAppUi@@UAEXPAVCCoeControl@@HW4TMenuType@MEikMenuObserver@@@Z @ 5482 NONAME ; void QS60MainAppUi::RestoreMenuL(class CCoeControl *, int, enum MEikMenuObserver::TMenuType)
 	?depth@QImage@@QBEHXZ @ 5483 NONAME ; int QImage::depth(void) const
-	?setStrength@QGraphicsGrayscaleEffect@@QAEXM@Z @ 5484 NONAME ; void QGraphicsGrayscaleEffect::setStrength(float)
+	?setStrength@QGraphicsGrayscaleEffect@@QAEXM@Z @ 5484 NONAME ABSENT ; void QGraphicsGrayscaleEffect::setStrength(float)
 	?setPasswordCharacter@QLineControl@@QAEXABVQChar@@@Z @ 5485 NONAME ; void QLineControl::setPasswordCharacter(class QChar const &)
 	?tr@QMdiSubWindow@@SA?AVQString@@PBD0H@Z @ 5486 NONAME ; class QString QMdiSubWindow::tr(char const *, char const *, int)
 	?currentIndex@QDataWidgetMapper@@QBEHXZ @ 5487 NONAME ; int QDataWidgetMapper::currentIndex(void) const
@@ -5591,7 +5591,7 @@ EXPORTS
 	??0QDockWidgetLayout@@QAE@PAVQWidget@@@Z @ 5590 NONAME ; QDockWidgetLayout::QDockWidgetLayout(class QWidget *)
 	?glyphMargin@QTextureGlyphCache@@UBEHXZ @ 5591 NONAME ; int QTextureGlyphCache::glyphMargin(void) const
 	?isInvisible@QGraphicsItemPrivate@@QBE_NXZ @ 5592 NONAME ; bool QGraphicsItemPrivate::isInvisible(void) const
-	?unregisterGestureRecognizer@QApplication@@QAEXW4GestureType@Qt@@@Z @ 5593 NONAME ; void QApplication::unregisterGestureRecognizer(enum Qt::GestureType)
+	?unregisterGestureRecognizer@QApplication@@QAEXW4GestureType@Qt@@@Z @ 5593 NONAME ABSENT ; void QApplication::unregisterGestureRecognizer(enum Qt::GestureType)
 	?removeChild@QGraphicsItemPrivate@@QAEXPAVQGraphicsItem@@@Z @ 5594 NONAME ; void QGraphicsItemPrivate::removeChild(class QGraphicsItem *)
 	?appendRow@QStandardItemModel@@QAEXABV?$QList@PAVQStandardItem@@@@@Z @ 5595 NONAME ; void QStandardItemModel::appendRow(class QList<class QStandardItem *> const &)
 	?event@QTableWidget@@MAE_NPAVQEvent@@@Z @ 5596 NONAME ; bool QTableWidget::event(class QEvent *)
@@ -6170,7 +6170,7 @@ EXPORTS
 	?setCurrentSection@QDateTimeEdit@@QAEXW4Section@1@@Z @ 6169 NONAME ; void QDateTimeEdit::setCurrentSection(enum QDateTimeEdit::Section)
 	?tr@QMenuBar@@SA?AVQString@@PBD0@Z @ 6170 NONAME ; class QString QMenuBar::tr(char const *, char const *)
 	?setRootIsDecorated@QTreeView@@QAEX_N@Z @ 6171 NONAME ; void QTreeView::setRootIsDecorated(bool)
-	?qt_metacall@QGraphicsGrayscaleEffect@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 6172 NONAME ; int QGraphicsGrayscaleEffect::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?qt_metacall@QGraphicsGrayscaleEffect@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 6172 NONAME ABSENT ; int QGraphicsGrayscaleEffect::qt_metacall(enum QMetaObject::Call, int, void * *)
 	?worldMatrixEnabled@QPainter@@QBE_NXZ @ 6173 NONAME ; bool QPainter::worldMatrixEnabled(void) const
 	??0iterator@QTextBlock@@AAE@PBVQTextDocumentPrivate@@HHH@Z @ 6174 NONAME ; QTextBlock::iterator::iterator(class QTextDocumentPrivate const *, int, int, int)
 	?isValid@QTextTableCell@@QBE_NXZ @ 6175 NONAME ; bool QTextTableCell::isValid(void) const
@@ -6406,7 +6406,7 @@ EXPORTS
 	?widgetForAction@QToolBar@@QBEPAVQWidget@@PAVQAction@@@Z @ 6405 NONAME ; class QWidget * QToolBar::widgetForAction(class QAction *) const
 	?setPos@QGraphicsSceneMouseEvent@@QAEXABVQPointF@@@Z @ 6406 NONAME ; void QGraphicsSceneMouseEvent::setPos(class QPointF const &)
 	?setSelection@QLineEdit@@QAEXHH@Z @ 6407 NONAME ; void QLineEdit::setSelection(int, int)
-	?d_func@QGraphicsBloomEffect@@ABEPBVQGraphicsBloomEffectPrivate@@XZ @ 6408 NONAME ; class QGraphicsBloomEffectPrivate const * QGraphicsBloomEffect::d_func(void) const
+	?d_func@QGraphicsBloomEffect@@ABEPBVQGraphicsBloomEffectPrivate@@XZ @ 6408 NONAME ABSENT ; class QGraphicsBloomEffectPrivate const * QGraphicsBloomEffect::d_func(void) const
 	??1QSortFilterProxyModel@@UAE@XZ @ 6409 NONAME ; QSortFilterProxyModel::~QSortFilterProxyModel(void)
 	??1QTextBrowser@@UAE@XZ @ 6410 NONAME ; QTextBrowser::~QTextBrowser(void)
 	?maximumViewportSize@QAbstractScrollArea@@QBE?AVQSize@@XZ @ 6411 NONAME ; class QSize QAbstractScrollArea::maximumViewportSize(void) const
@@ -6576,7 +6576,7 @@ EXPORTS
 	?activateNextSubWindow@QMdiArea@@QAEXXZ @ 6575 NONAME ; void QMdiArea::activateNextSubWindow(void)
 	?controlType@QSizePolicy@@QBE?AW4ControlType@1@XZ @ 6576 NONAME ; enum QSizePolicy::ControlType QSizePolicy::controlType(void) const
 	?rect@QTextLine@@QBE?AVQRectF@@XZ @ 6577 NONAME ; class QRectF QTextLine::rect(void) const
-	?qt_metacall@QGraphicsPixelizeEffect@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 6578 NONAME ; int QGraphicsPixelizeEffect::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?qt_metacall@QGraphicsPixelizeEffect@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 6578 NONAME ABSENT ; int QGraphicsPixelizeEffect::qt_metacall(enum QMetaObject::Call, int, void * *)
 	?question@QMessageBox@@SA?AW4StandardButton@1@PAVQWidget@@ABVQString@@1V?$QFlags@W4StandardButton@QMessageBox@@@@W421@@Z @ 6579 NONAME ; enum QMessageBox::StandardButton QMessageBox::question(class QWidget *, class QString const &, class QString const &, class QFlags<enum QMessageBox::StandardButton>, enum QMessageBox::StandardButton)
 	?symbianResourceChange@QApplicationPrivate@@QAEHH@Z @ 6580 NONAME ; int QApplicationPrivate::symbianResourceChange(int)
 	??6@YA?AVQDebug@@V0@ABVQPainterPath@@@Z @ 6581 NONAME ; class QDebug operator<<(class QDebug, class QPainterPath const &)
@@ -6687,7 +6687,7 @@ EXPORTS
 	?sizeHint@QStyledItemDelegate@@UBE?AVQSize@@ABVQStyleOptionViewItem@@ABVQModelIndex@@@Z @ 6686 NONAME ; class QSize QStyledItemDelegate::sizeHint(class QStyleOptionViewItem const &, class QModelIndex const &) const
 	?setNameFilters@QFileSystemModel@@QAEXABVQStringList@@@Z @ 6687 NONAME ; void QFileSystemModel::setNameFilters(class QStringList const &)
 	?installSceneEventFilter@QGraphicsItem@@QAEXPAV1@@Z @ 6688 NONAME ; void QGraphicsItem::installSceneEventFilter(class QGraphicsItem *)
-	?blurRadius@QGraphicsBlurEffect@@QBEHXZ @ 6689 NONAME ; int QGraphicsBlurEffect::blurRadius(void) const
+	?blurRadius@QGraphicsBlurEffect@@QBEHXZ @ 6689 NONAME ABSENT ; int QGraphicsBlurEffect::blurRadius(void) const
 	?opaqueArea@QAbstractGraphicsShapeItem@@UBE?AVQPainterPath@@XZ @ 6690 NONAME ; class QPainterPath QAbstractGraphicsShapeItem::opaqueArea(void) const
 	?eventFilter@QSizeGrip@@MAE_NPAVQObject@@PAVQEvent@@@Z @ 6691 NONAME ; bool QSizeGrip::eventFilter(class QObject *, class QEvent *)
 	?resizeEvent@QComboBox@@MAEXPAVQResizeEvent@@@Z @ 6692 NONAME ; void QComboBox::resizeEvent(class QResizeEvent *)
@@ -6787,7 +6787,7 @@ EXPORTS
 	?metaObject@QWidgetAction@@UBEPBUQMetaObject@@XZ @ 6786 NONAME ; struct QMetaObject const * QWidgetAction::metaObject(void) const
 	??1QInputEvent@@UAE@XZ @ 6787 NONAME ; QInputEvent::~QInputEvent(void)
 	?freeMemory@QTextEngine@@QAEXXZ @ 6788 NONAME ; void QTextEngine::freeMemory(void)
-	?setRadius@QPixmapBlurFilter@@QAEXH@Z @ 6789 NONAME ; void QPixmapBlurFilter::setRadius(int)
+	?setRadius@QPixmapBlurFilter@@QAEXH@Z @ 6789 NONAME ABSENT ; void QPixmapBlurFilter::setRadius(int)
 	?metaObject@QDialogButtonBox@@UBEPBUQMetaObject@@XZ @ 6790 NONAME ; struct QMetaObject const * QDialogButtonBox::metaObject(void) const
 	?qt_metacall@QWidgetAction@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 6791 NONAME ; int QWidgetAction::qt_metacall(enum QMetaObject::Call, int, void * *)
 	?addSubWindow@QMdiArea@@QAEPAVQMdiSubWindow@@PAVQWidget@@V?$QFlags@W4WindowType@Qt@@@@@Z @ 6792 NONAME ; class QMdiSubWindow * QMdiArea::addSubWindow(class QWidget *, class QFlags<enum Qt::WindowType>)
@@ -7081,7 +7081,7 @@ EXPORTS
 	?setAcceptRichText@QTextControl@@QAEX_N@Z @ 7080 NONAME ; void QTextControl::setAcceptRichText(bool)
 	??0QGraphicsPixmapItem@@QAE@PAVQGraphicsItem@@PAVQGraphicsScene@@@Z @ 7081 NONAME ; QGraphicsPixmapItem::QGraphicsPixmapItem(class QGraphicsItem *, class QGraphicsScene *)
 	??1TouchPoint@QTouchEvent@@QAE@XZ @ 7082 NONAME ; QTouchEvent::TouchPoint::~TouchPoint(void)
-	??_EQGraphicsPixelizeEffect@@UAE@I@Z @ 7083 NONAME ; QGraphicsPixelizeEffect::~QGraphicsPixelizeEffect(unsigned int)
+	??_EQGraphicsPixelizeEffect@@UAE@I@Z @ 7083 NONAME ABSENT ; QGraphicsPixelizeEffect::~QGraphicsPixelizeEffect(unsigned int)
 	?createTLSysExtra@QWidgetPrivate@@QAEXXZ @ 7084 NONAME ; void QWidgetPrivate::createTLSysExtra(void)
 	?dropEvent@QGraphicsTextItem@@MAEXPAVQGraphicsSceneDragDropEvent@@@Z @ 7085 NONAME ; void QGraphicsTextItem::dropEvent(class QGraphicsSceneDragDropEvent *)
 	?insertChildren@QTreeWidgetItem@@QAEXHABV?$QList@PAVQTreeWidgetItem@@@@@Z @ 7086 NONAME ; void QTreeWidgetItem::insertChildren(int, class QList<class QTreeWidgetItem *> const &)
@@ -7107,7 +7107,7 @@ EXPORTS
 	?qt_metacast@QIntValidator@@UAEPAXPBD@Z @ 7106 NONAME ; void * QIntValidator::qt_metacast(char const *)
 	??K@YA?AVQTransform@@ABV0@M@Z @ 7107 NONAME ; class QTransform operator/(class QTransform const &, float)
 	?invalidateChildrenSceneTransform@QGraphicsItemPrivate@@QAEXXZ @ 7108 NONAME ; void QGraphicsItemPrivate::invalidateChildrenSceneTransform(void)
-	?trUtf8@QGraphicsBloomEffect@@SA?AVQString@@PBD0H@Z @ 7109 NONAME ; class QString QGraphicsBloomEffect::trUtf8(char const *, char const *, int)
+	?trUtf8@QGraphicsBloomEffect@@SA?AVQString@@PBD0H@Z @ 7109 NONAME ABSENT ; class QString QGraphicsBloomEffect::trUtf8(char const *, char const *, int)
 	?metaObject@QTextFrame@@UBEPBUQMetaObject@@XZ @ 7110 NONAME ; struct QMetaObject const * QTextFrame::metaObject(void) const
 	?hasFormatCached@QTextFormatCollection@@QBE_NABVQTextFormat@@@Z @ 7111 NONAME ; bool QTextFormatCollection::hasFormatCached(class QTextFormat const &) const
 	?eventFilter@QMenuBar@@MAE_NPAVQObject@@PAVQEvent@@@Z @ 7112 NONAME ; bool QMenuBar::eventFilter(class QObject *, class QEvent *)
@@ -7319,7 +7319,7 @@ EXPORTS
 	?rowStretch@QGridLayout@@QBEHH@Z @ 7318 NONAME ; int QGridLayout::rowStretch(int) const
 	?metaObject@QGraphicsTransform@@UBEPBUQMetaObject@@XZ @ 7319 NONAME ; struct QMetaObject const * QGraphicsTransform::metaObject(void) const
 	?tr@QTableView@@SA?AVQString@@PBD0H@Z @ 7320 NONAME ; class QString QTableView::tr(char const *, char const *, int)
-	?getStaticMetaObject@QGraphicsPixelizeEffect@@SAABUQMetaObject@@XZ @ 7321 NONAME ; struct QMetaObject const & QGraphicsPixelizeEffect::getStaticMetaObject(void)
+	?getStaticMetaObject@QGraphicsPixelizeEffect@@SAABUQMetaObject@@XZ @ 7321 NONAME ABSENT ; struct QMetaObject const & QGraphicsPixelizeEffect::getStaticMetaObject(void)
 	?isSelected@QTreeWidgetItem@@QBE_NXZ @ 7322 NONAME ; bool QTreeWidgetItem::isSelected(void) const
 	?setUrlHandler@QDesktopServices@@SAXABVQString@@PAVQObject@@PBD@Z @ 7323 NONAME ; void QDesktopServices::setUrlHandler(class QString const &, class QObject *, char const *)
 	?tr@QMdiArea@@SA?AVQString@@PBD0H@Z @ 7324 NONAME ; class QString QMdiArea::tr(char const *, char const *, int)
@@ -7557,7 +7557,7 @@ EXPORTS
 	?setOrientation@QSplitterHandle@@QAEXW4Orientation@Qt@@@Z @ 7556 NONAME ; void QSplitterHandle::setOrientation(enum Qt::Orientation)
 	?setTabText@QTabBar@@QAEXHABVQString@@@Z @ 7557 NONAME ; void QTabBar::setTabText(int, class QString const &)
 	?storageLocation@QDesktopServices@@SA?AVQString@@W4StandardLocation@1@@Z @ 7558 NONAME ; class QString QDesktopServices::storageLocation(enum QDesktopServices::StandardLocation)
-	?staticMetaObject@QGraphicsGrayscaleEffect@@2UQMetaObject@@B @ 7559 NONAME ; struct QMetaObject const QGraphicsGrayscaleEffect::staticMetaObject
+	?staticMetaObject@QGraphicsGrayscaleEffect@@2UQMetaObject@@B @ 7559 NONAME ABSENT ; struct QMetaObject const QGraphicsGrayscaleEffect::staticMetaObject
 	?setFontWordSpacing@QTextCharFormat@@QAEXM@Z @ 7560 NONAME ; void QTextCharFormat::setFontWordSpacing(float)
 	??_EQShowEvent@@UAE@I@Z @ 7561 NONAME ; QShowEvent::~QShowEvent(unsigned int)
 	?tr@QFileSystemModel@@SA?AVQString@@PBD0@Z @ 7562 NONAME ; class QString QFileSystemModel::tr(char const *, char const *)
@@ -7569,7 +7569,7 @@ EXPORTS
 	?trUtf8@QStandardItemModel@@SA?AVQString@@PBD0H@Z @ 7568 NONAME ; class QString QStandardItemModel::trUtf8(char const *, char const *, int)
 	?setResizeMode@QListView@@QAEXW4ResizeMode@1@@Z @ 7569 NONAME ; void QListView::setResizeMode(enum QListView::ResizeMode)
 	??_EQTableWidgetItem@@UAE@I@Z @ 7570 NONAME ; QTableWidgetItem::~QTableWidgetItem(unsigned int)
-	?qt_metacast@QGraphicsBloomEffect@@UAEPAXPBD@Z @ 7571 NONAME ; void * QGraphicsBloomEffect::qt_metacast(char const *)
+	?qt_metacast@QGraphicsBloomEffect@@UAEPAXPBD@Z @ 7571 NONAME ABSENT ; void * QGraphicsBloomEffect::qt_metacast(char const *)
 	?mapFromParent@QGraphicsItem@@QBE?AVQPolygonF@@MMMM@Z @ 7572 NONAME ; class QPolygonF QGraphicsItem::mapFromParent(float, float, float, float) const
 	?tabRect@QTabBar@@QBE?AVQRect@@H@Z @ 7573 NONAME ; class QRect QTabBar::tabRect(int) const
 	?sizeHint@QAbstractSpinBox@@UBE?AVQSize@@XZ @ 7574 NONAME ; class QSize QAbstractSpinBox::sizeHint(void) const
@@ -8052,7 +8052,7 @@ EXPORTS
 	?setFlat@QPushButton@@QAEX_N@Z @ 8051 NONAME ; void QPushButton::setFlat(bool)
 	?columnAlignment@QGraphicsGridLayout@@QBE?AV?$QFlags@W4AlignmentFlag@Qt@@@@H@Z @ 8052 NONAME ; class QFlags<enum Qt::AlignmentFlag> QGraphicsGridLayout::columnAlignment(int) const
 	?d_func@QSound@@AAEPAVQSoundPrivate@@XZ @ 8053 NONAME ; class QSoundPrivate * QSound::d_func(void)
-	?strengthChanged@QGraphicsBloomEffect@@IAEXM@Z @ 8054 NONAME ; void QGraphicsBloomEffect::strengthChanged(float)
+	?strengthChanged@QGraphicsBloomEffect@@IAEXM@Z @ 8054 NONAME ABSENT ; void QGraphicsBloomEffect::strengthChanged(float)
 	??_0QVector3D@@QAEAAV0@M@Z @ 8055 NONAME ; class QVector3D & QVector3D::operator/=(float)
 	?currentFrame@iterator@QTextFrame@@QBEPAV2@XZ @ 8056 NONAME ; class QTextFrame * QTextFrame::iterator::currentFrame(void) const
 	??_EQSplitterHandle@@UAE@I@Z @ 8057 NONAME ; QSplitterHandle::~QSplitterHandle(unsigned int)
@@ -8104,7 +8104,7 @@ EXPORTS
 	?drawPixmap@QPainter@@QAEXHHABVQPixmap@@HHHH@Z @ 8103 NONAME ; void QPainter::drawPixmap(int, int, class QPixmap const &, int, int, int, int)
 	?toolTipBase@QPalette@@QBEABVQBrush@@XZ @ 8104 NONAME ; class QBrush const & QPalette::toolTipBase(void) const
 	?fileInfo@QDirModel@@QBE?AVQFileInfo@@ABVQModelIndex@@@Z @ 8105 NONAME ; class QFileInfo QDirModel::fileInfo(class QModelIndex const &) const
-	?blurHintChanged@QGraphicsBloomEffect@@IAEXW4RenderHint@Qt@@@Z @ 8106 NONAME ; void QGraphicsBloomEffect::blurHintChanged(enum Qt::RenderHint)
+	?blurHintChanged@QGraphicsBloomEffect@@IAEXW4RenderHint@Qt@@@Z @ 8106 NONAME ABSENT ; void QGraphicsBloomEffect::blurHintChanged(enum Qt::RenderHint)
 	?putPoints@QPolygon@@QAEXHHABV1@H@Z @ 8107 NONAME ; void QPolygon::putPoints(int, int, class QPolygon const &, int)
 	??1QDragMoveEvent@@UAE@XZ @ 8108 NONAME ; QDragMoveEvent::~QDragMoveEvent(void)
 	?intProperty@QTextFormat@@QBEHH@Z @ 8109 NONAME ; int QTextFormat::intProperty(int) const
@@ -8299,7 +8299,7 @@ EXPORTS
 	?setPixelSize@QFont@@QAEXH@Z @ 8298 NONAME ; void QFont::setPixelSize(int)
 	?setBottomMargin@QTextFrameFormat@@QAEXM@Z @ 8299 NONAME ; void QTextFrameFormat::setBottomMargin(float)
 	?minimumDate@QCalendarWidget@@QBE?AVQDate@@XZ @ 8300 NONAME ; class QDate QCalendarWidget::minimumDate(void) const
-	?setBlurRadius@QGraphicsDropShadowEffect@@QAEXH@Z @ 8301 NONAME ; void QGraphicsDropShadowEffect::setBlurRadius(int)
+	?setBlurRadius@QGraphicsDropShadowEffect@@QAEXH@Z @ 8301 NONAME ABSENT ; void QGraphicsDropShadowEffect::setBlurRadius(int)
 	?setMask@QPixmapData@@UAEXABVQBitmap@@@Z @ 8302 NONAME ; void QPixmapData::setMask(class QBitmap const &)
 	?drawPie@QPainter@@QAEXABVQRectF@@HH@Z @ 8303 NONAME ; void QPainter::drawPie(class QRectF const &, int, int)
 	?supportsExtension@QGraphicsPolygonItem@@MBE_NW4Extension@QGraphicsItem@@@Z @ 8304 NONAME ; bool QGraphicsPolygonItem::supportsExtension(enum QGraphicsItem::Extension) const
@@ -8539,7 +8539,7 @@ EXPORTS
 	?resolveSymlinks@QFileDialog@@QBE_NXZ @ 8538 NONAME ; bool QFileDialog::resolveSymlinks(void) const
 	?d_func@QGraphicsTransform@@ABEPBVQGraphicsTransformPrivate@@XZ @ 8539 NONAME ; class QGraphicsTransformPrivate const * QGraphicsTransform::d_func(void) const
 	?verticalStretch@QSizePolicy@@QBEHXZ @ 8540 NONAME ; int QSizePolicy::verticalStretch(void) const
-	?pixelSize@QGraphicsPixelizeEffect@@QBEHXZ @ 8541 NONAME ; int QGraphicsPixelizeEffect::pixelSize(void) const
+	?pixelSize@QGraphicsPixelizeEffect@@QBEHXZ @ 8541 NONAME ABSENT ; int QGraphicsPixelizeEffect::pixelSize(void) const
 	?time@QDateTimeEdit@@QBE?AVQTime@@XZ @ 8542 NONAME ; class QTime QDateTimeEdit::time(void) const
 	?buttonDownScenePos@QGraphicsSceneMouseEvent@@QBE?AVQPointF@@W4MouseButton@Qt@@@Z @ 8543 NONAME ; class QPointF QGraphicsSceneMouseEvent::buttonDownScenePos(enum Qt::MouseButton) const
 	?map@QMatrix@@QBEXMMPAM0@Z @ 8544 NONAME ; void QMatrix::map(float, float, float *, float *) const
@@ -8753,7 +8753,7 @@ EXPORTS
 	?standardFormat@QInputContext@@QBE?AVQTextFormat@@W4StandardFormat@1@@Z @ 8752 NONAME ; class QTextFormat QInputContext::standardFormat(enum QInputContext::StandardFormat) const
 	??_EQStandardItemModel@@UAE@I@Z @ 8753 NONAME ; QStandardItemModel::~QStandardItemModel(unsigned int)
 	?d_func@QPainterPathStroker@@AAEPAVQPainterPathStrokerPrivate@@XZ @ 8754 NONAME ; class QPainterPathStrokerPrivate * QPainterPathStroker::d_func(void)
-	?trUtf8@QGraphicsPixelizeEffect@@SA?AVQString@@PBD0H@Z @ 8755 NONAME ; class QString QGraphicsPixelizeEffect::trUtf8(char const *, char const *, int)
+	?trUtf8@QGraphicsPixelizeEffect@@SA?AVQString@@PBD0H@Z @ 8755 NONAME ABSENT ; class QString QGraphicsPixelizeEffect::trUtf8(char const *, char const *, int)
 	?takeLayout@QWidget@@AAEPAVQLayout@@XZ @ 8756 NONAME ; class QLayout * QWidget::takeLayout(void)
 	?offset@QPanGesture@@QBE?AVQPointF@@XZ @ 8757 NONAME ; class QPointF QPanGesture::offset(void) const
 	?tightBoundingRect@QFontMetrics@@QBE?AVQRect@@ABVQString@@@Z @ 8758 NONAME ; class QRect QFontMetrics::tightBoundingRect(class QString const &) const
@@ -8917,7 +8917,7 @@ EXPORTS
 	?offset@QWindowSurface@@UBE?AVQPoint@@PBVQWidget@@@Z @ 8916 NONAME ; class QPoint QWindowSurface::offset(class QWidget const *) const
 	?d_func@QFileIconProvider@@ABEPBVQFileIconProviderPrivate@@XZ @ 8917 NONAME ; class QFileIconProviderPrivate const * QFileIconProvider::d_func(void) const
 	??0QDateTimeEdit@@QAE@ABVQDateTime@@PAVQWidget@@@Z @ 8918 NONAME ; QDateTimeEdit::QDateTimeEdit(class QDateTime const &, class QWidget *)
-	?d_func@QGraphicsGrayscaleEffect@@ABEPBVQGraphicsGrayscaleEffectPrivate@@XZ @ 8919 NONAME ; class QGraphicsGrayscaleEffectPrivate const * QGraphicsGrayscaleEffect::d_func(void) const
+	?d_func@QGraphicsGrayscaleEffect@@ABEPBVQGraphicsGrayscaleEffectPrivate@@XZ @ 8919 NONAME ABSENT ; class QGraphicsGrayscaleEffectPrivate const * QGraphicsGrayscaleEffect::d_func(void) const
 	?testOption@QColorDialog@@QBE_NW4ColorDialogOption@1@@Z @ 8920 NONAME ; bool QColorDialog::testOption(enum QColorDialog::ColorDialogOption) const
 	?setWSGeometry@QWidgetPrivate@@QAEX_NABVQRect@@@Z @ 8921 NONAME ; void QWidgetPrivate::setWSGeometry(bool, class QRect const &)
 	?inputMethodEvent@QPlainTextEdit@@MAEXPAVQInputMethodEvent@@@Z @ 8922 NONAME ; void QPlainTextEdit::inputMethodEvent(class QInputMethodEvent *)
@@ -8963,7 +8963,7 @@ EXPORTS
 	?event@QStatusBar@@MAE_NPAVQEvent@@@Z @ 8962 NONAME ; bool QStatusBar::event(class QEvent *)
 	?anchorAt@QTextControl@@QBE?AVQString@@ABVQPointF@@@Z @ 8963 NONAME ; class QString QTextControl::anchorAt(class QPointF const &) const
 	?restart@QWizard@@QAEXXZ @ 8964 NONAME ; void QWizard::restart(void)
-	?hasCacheHint@QVectorPath@@QBE_NXZ @ 8965 NONAME ; bool QVectorPath::hasCacheHint(void) const
+	?hasCacheHint@QVectorPath@@QBE_NXZ @ 8965 NONAME ABSENT ; bool QVectorPath::hasCacheHint(void) const
 	?setUnifiedTitleAndToolBarOnMac@QMainWindow@@QAEX_N@Z @ 8966 NONAME ; void QMainWindow::setUnifiedTitleAndToolBarOnMac(bool)
 	?setGeometry@QGridLayout@@UAEXABVQRect@@@Z @ 8967 NONAME ; void QGridLayout::setGeometry(class QRect const &)
 	?qDrawPixmaps@@YAXPAVQPainter@@PBUData@QDrawPixmaps@@HABVQPixmap@@V?$QFlags@W4DrawingHint@QDrawPixmaps@@@@@Z @ 8968 NONAME ; void qDrawPixmaps(class QPainter *, struct QDrawPixmaps::Data const *, int, class QPixmap const &, class QFlags<enum QDrawPixmaps::DrawingHint>)
@@ -8987,7 +8987,7 @@ EXPORTS
 	?d_func@QGraphicsLinearLayout@@AAEPAVQGraphicsLinearLayoutPrivate@@XZ @ 8986 NONAME ; class QGraphicsLinearLayoutPrivate * QGraphicsLinearLayout::d_func(void)
 	?staticMetaObject@QTextControl@@2UQMetaObject@@B @ 8987 NONAME ; struct QMetaObject const QTextControl::staticMetaObject
 	??_EQClipboardEvent@@UAE@I@Z @ 8988 NONAME ; QClipboardEvent::~QClipboardEvent(unsigned int)
-	?draw@QGraphicsGrayscaleEffect@@MAEXPAVQPainter@@PAVQGraphicsEffectSource@@@Z @ 8989 NONAME ; void QGraphicsGrayscaleEffect::draw(class QPainter *, class QGraphicsEffectSource *)
+	?draw@QGraphicsGrayscaleEffect@@MAEXPAVQPainter@@PAVQGraphicsEffectSource@@@Z @ 8989 NONAME ABSENT ; void QGraphicsGrayscaleEffect::draw(class QPainter *, class QGraphicsEffectSource *)
 	?tr@QGraphicsScene@@SA?AVQString@@PBD0H@Z @ 8990 NONAME ; class QString QGraphicsScene::tr(char const *, char const *, int)
 	?handle@QCursor@@QBEKXZ @ 8991 NONAME ; unsigned long QCursor::handle(void) const
 	?qt_metacast@QRadioButton@@UAEPAXPBD@Z @ 8992 NONAME ; void * QRadioButton::qt_metacast(char const *)
@@ -9068,7 +9068,7 @@ EXPORTS
 	?indexFromItem@QStandardItemModel@@QBE?AVQModelIndex@@PBVQStandardItem@@@Z @ 9067 NONAME ; class QModelIndex QStandardItemModel::indexFromItem(class QStandardItem const *) const
 	?scene@QGraphicsItem@@QBEPAVQGraphicsScene@@XZ @ 9068 NONAME ; class QGraphicsScene * QGraphicsItem::scene(void) const
 	??0QListWidget@@QAE@PAVQWidget@@@Z @ 9069 NONAME ; QListWidget::QListWidget(class QWidget *)
-	?qt_metacall@QGraphicsBloomEffect@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 9070 NONAME ; int QGraphicsBloomEffect::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?qt_metacall@QGraphicsBloomEffect@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 9070 NONAME ABSENT ; int QGraphicsBloomEffect::qt_metacall(enum QMetaObject::Call, int, void * *)
 	?qt_metacast@QShortcut@@UAEPAXPBD@Z @ 9071 NONAME ; void * QShortcut::qt_metacast(char const *)
 	??0QTextLayout@@AAE@PAVQTextEngine@@@Z @ 9072 NONAME ; QTextLayout::QTextLayout(class QTextEngine *)
 	?hasProperty@QTextFormat@@QBE_NH@Z @ 9073 NONAME ; bool QTextFormat::hasProperty(int) const
@@ -9495,7 +9495,7 @@ EXPORTS
 	?visualIndex@QTreeView@@ABEHABVQModelIndex@@@Z @ 9494 NONAME ; int QTreeView::visualIndex(class QModelIndex const &) const
 	?tr@QVBoxLayout@@SA?AVQString@@PBD0@Z @ 9495 NONAME ; class QString QVBoxLayout::tr(char const *, char const *)
 	??0QCheckBox@@QAE@ABVQString@@PAVQWidget@@@Z @ 9496 NONAME ; QCheckBox::QCheckBox(class QString const &, class QWidget *)
-	?d_func@QGraphicsGrayscaleEffect@@AAEPAVQGraphicsGrayscaleEffectPrivate@@XZ @ 9497 NONAME ; class QGraphicsGrayscaleEffectPrivate * QGraphicsGrayscaleEffect::d_func(void)
+	?d_func@QGraphicsGrayscaleEffect@@AAEPAVQGraphicsGrayscaleEffectPrivate@@XZ @ 9497 NONAME ABSENT ; class QGraphicsGrayscaleEffectPrivate * QGraphicsGrayscaleEffect::d_func(void)
 	?trUtf8@QAction@@SA?AVQString@@PBD0H@Z @ 9498 NONAME ; class QString QAction::trUtf8(char const *, char const *, int)
 	?staticMetaObject@QGraphicsOpacityEffect@@2UQMetaObject@@B @ 9499 NONAME ; struct QMetaObject const QGraphicsOpacityEffect::staticMetaObject
 	?items@QGraphicsScene@@QBE?AV?$QList@PAVQGraphicsItem@@@@MMMMW4ItemSelectionMode@Qt@@W4SortOrder@4@ABVQTransform@@@Z @ 9500 NONAME ; class QList<class QGraphicsItem *> QGraphicsScene::items(float, float, float, float, enum Qt::ItemSelectionMode, enum Qt::SortOrder, class QTransform const &) const
@@ -9549,7 +9549,7 @@ EXPORTS
 	?done@QDialog@@UAEXH@Z @ 9548 NONAME ; void QDialog::done(int)
 	?widgetAt@QApplication@@SAPAVQWidget@@HH@Z @ 9549 NONAME ; class QWidget * QApplication::widgetAt(int, int)
 	??_EQTextFrameLayoutData@@UAE@I@Z @ 9550 NONAME ; QTextFrameLayoutData::~QTextFrameLayoutData(unsigned int)
-	??0QGraphicsPixelizeEffect@@QAE@PAVQObject@@@Z @ 9551 NONAME ; QGraphicsPixelizeEffect::QGraphicsPixelizeEffect(class QObject *)
+	??0QGraphicsPixelizeEffect@@QAE@PAVQObject@@@Z @ 9551 NONAME ABSENT ; QGraphicsPixelizeEffect::QGraphicsPixelizeEffect(class QObject *)
 	?frameChanged@QMovie@@IAEXH@Z @ 9552 NONAME ; void QMovie::frameChanged(int)
 	?geometry@QWidgetItem@@UBE?AVQRect@@XZ @ 9553 NONAME ; class QRect QWidgetItem::geometry(void) const
 	??0QTextFrame@@IAE@AAVQTextFramePrivate@@PAVQTextDocument@@@Z @ 9554 NONAME ; QTextFrame::QTextFrame(class QTextFramePrivate &, class QTextDocument *)
@@ -9732,7 +9732,7 @@ EXPORTS
 	?setItemDelegate@QDataWidgetMapper@@QAEXPAVQAbstractItemDelegate@@@Z @ 9731 NONAME ; void QDataWidgetMapper::setItemDelegate(class QAbstractItemDelegate *)
 	?timerEvent@QAbstractSlider@@MAEXPAVQTimerEvent@@@Z @ 9732 NONAME ; void QAbstractSlider::timerEvent(class QTimerEvent *)
 	?helpRequested@QWizard@@IAEXXZ @ 9733 NONAME ; void QWizard::helpRequested(void)
-	?registerGestureRecognizer@QApplication@@QAE?AW4GestureType@Qt@@PAVQGestureRecognizer@@@Z @ 9734 NONAME ; enum Qt::GestureType QApplication::registerGestureRecognizer(class QGestureRecognizer *)
+	?registerGestureRecognizer@QApplication@@QAE?AW4GestureType@Qt@@PAVQGestureRecognizer@@@Z @ 9734 NONAME ABSENT ; enum Qt::GestureType QApplication::registerGestureRecognizer(class QGestureRecognizer *)
 	??0QTableWidgetItem@@QAE@ABVQIcon@@ABVQString@@H@Z @ 9735 NONAME ; QTableWidgetItem::QTableWidgetItem(class QIcon const &, class QString const &, int)
 	?validatePage@QWizardPage@@UAE_NXZ @ 9736 NONAME ; bool QWizardPage::validatePage(void)
 	?itemCollapsed@QTreeWidget@@IAEXPAVQTreeWidgetItem@@@Z @ 9737 NONAME ; void QTreeWidget::itemCollapsed(class QTreeWidgetItem *)
@@ -9740,7 +9740,7 @@ EXPORTS
 	?contains@QGraphicsPixmapItem@@UBE_NABVQPointF@@@Z @ 9739 NONAME ; bool QGraphicsPixmapItem::contains(class QPointF const &) const
 	??1QTextTableFormat@@QAE@XZ @ 9740 NONAME ; QTextTableFormat::~QTextTableFormat(void)
 	?qt_metacall@QGraphicsScene@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 9741 NONAME ; int QGraphicsScene::qt_metacall(enum QMetaObject::Call, int, void * *)
-	?strength@QGraphicsGrayscaleEffect@@QBEMXZ @ 9742 NONAME ; float QGraphicsGrayscaleEffect::strength(void) const
+	?strength@QGraphicsGrayscaleEffect@@QBEMXZ @ 9742 NONAME ABSENT ; float QGraphicsGrayscaleEffect::strength(void) const
 	??1QStyleOptionDockWidget@@QAE@XZ @ 9743 NONAME ; QStyleOptionDockWidget::~QStyleOptionDockWidget(void)
 	?horizontalScrollBarPolicy@QAbstractScrollArea@@QBE?AW4ScrollBarPolicy@Qt@@XZ @ 9744 NONAME ; enum Qt::ScrollBarPolicy QAbstractScrollArea::horizontalScrollBarPolicy(void) const
 	?contextMenuEvent@QScrollBar@@MAEXPAVQContextMenuEvent@@@Z @ 9745 NONAME ; void QScrollBar::contextMenuEvent(class QContextMenuEvent *)
@@ -9771,7 +9771,7 @@ EXPORTS
 	?setPrefix@QDoubleSpinBox@@QAEXABVQString@@@Z @ 9770 NONAME ; void QDoubleSpinBox::setPrefix(class QString const &)
 	?metaObject@QRadioButton@@UBEPBUQMetaObject@@XZ @ 9771 NONAME ; struct QMetaObject const * QRadioButton::metaObject(void) const
 	??1QTabWidget@@UAE@XZ @ 9772 NONAME ; QTabWidget::~QTabWidget(void)
-	?setBrightness@QGraphicsBloomEffect@@QAEXH@Z @ 9773 NONAME ; void QGraphicsBloomEffect::setBrightness(int)
+	?setBrightness@QGraphicsBloomEffect@@QAEXH@Z @ 9773 NONAME ABSENT ; void QGraphicsBloomEffect::setBrightness(int)
 	?detach@QRegion@@AAEXXZ @ 9774 NONAME ; void QRegion::detach(void)
 	?d_func@QPixmapColorizeFilter@@ABEPBVQPixmapColorizeFilterPrivate@@XZ @ 9775 NONAME ; class QPixmapColorizeFilterPrivate const * QPixmapColorizeFilter::d_func(void) const
 	?currentIndex@QTabWidget@@QBEHXZ @ 9776 NONAME ; int QTabWidget::currentIndex(void) const
@@ -9800,7 +9800,7 @@ EXPORTS
 	?staticMetaObject@QLCDNumber@@2UQMetaObject@@B @ 9799 NONAME ; struct QMetaObject const QLCDNumber::staticMetaObject
 	?items@QListWidget@@IBE?AV?$QList@PAVQListWidgetItem@@@@PBVQMimeData@@@Z @ 9800 NONAME ; class QList<class QListWidgetItem *> QListWidget::items(class QMimeData const *) const
 	?qt_metacast@QAbstractItemDelegate@@UAEPAXPBD@Z @ 9801 NONAME ; void * QAbstractItemDelegate::qt_metacast(char const *)
-	?radius@QPixmapBlurFilter@@QBEHXZ @ 9802 NONAME ; int QPixmapBlurFilter::radius(void) const
+	?radius@QPixmapBlurFilter@@QBEHXZ @ 9802 NONAME ABSENT ; int QPixmapBlurFilter::radius(void) const
 	?clearSubFocus@QGraphicsItemPrivate@@QAEXPAVQGraphicsItem@@@Z @ 9803 NONAME ; void QGraphicsItemPrivate::clearSubFocus(class QGraphicsItem *)
 	??_EQPlainTextDocumentLayout@@UAE@I@Z @ 9804 NONAME ; QPlainTextDocumentLayout::~QPlainTextDocumentLayout(unsigned int)
 	?nodeNameEquals@StyleSelector@QCss@@UBE_NTNodePtr@12@ABVQString@@@Z @ 9805 NONAME ; bool QCss::StyleSelector::nodeNameEquals(union QCss::StyleSelector::NodePtr, class QString const &) const
@@ -9869,7 +9869,7 @@ EXPORTS
 	?clear@QAbstractSpinBox@@UAEXXZ @ 9868 NONAME ; void QAbstractSpinBox::clear(void)
 	?flags@QSortFilterProxyModel@@UBE?AV?$QFlags@W4ItemFlag@Qt@@@@ABVQModelIndex@@@Z @ 9869 NONAME ; class QFlags<enum Qt::ItemFlag> QSortFilterProxyModel::flags(class QModelIndex const &) const
 	?setAcceptedMouseButtons@QGraphicsItem@@QAEXV?$QFlags@W4MouseButton@Qt@@@@@Z @ 9870 NONAME ; void QGraphicsItem::setAcceptedMouseButtons(class QFlags<enum Qt::MouseButton>)
-	?qt_metacast@QGraphicsPixelizeEffect@@UAEPAXPBD@Z @ 9871 NONAME ; void * QGraphicsPixelizeEffect::qt_metacast(char const *)
+	?qt_metacast@QGraphicsPixelizeEffect@@UAEPAXPBD@Z @ 9871 NONAME ABSENT ; void * QGraphicsPixelizeEffect::qt_metacast(char const *)
 	?loopCount@QImageIOHandler@@UBEHXZ @ 9872 NONAME ; int QImageIOHandler::loopCount(void) const
 	?items@QGraphicsScene@@QBE?AV?$QList@PAVQGraphicsItem@@@@ABVQPointF@@@Z @ 9873 NONAME ; class QList<class QGraphicsItem *> QGraphicsScene::items(class QPointF const &) const
 	?rowCount@QGraphicsGridLayout@@QBEHXZ @ 9874 NONAME ; int QGraphicsGridLayout::rowCount(void) const
@@ -9877,7 +9877,7 @@ EXPORTS
 	?radius@QRadialGradient@@QBEMXZ @ 9876 NONAME ; float QRadialGradient::radius(void) const
 	?itemFromIndex@QListWidget@@IBEPAVQListWidgetItem@@ABVQModelIndex@@@Z @ 9877 NONAME ; class QListWidgetItem * QListWidget::itemFromIndex(class QModelIndex const &) const
 	?tr@QPlainTextEdit@@SA?AVQString@@PBD0@Z @ 9878 NONAME ; class QString QPlainTextEdit::tr(char const *, char const *)
-	?blurRadius@QGraphicsDropShadowEffect@@QBEHXZ @ 9879 NONAME ; int QGraphicsDropShadowEffect::blurRadius(void) const
+	?blurRadius@QGraphicsDropShadowEffect@@QBEHXZ @ 9879 NONAME ABSENT ; int QGraphicsDropShadowEffect::blurRadius(void) const
 	?focusPolicy@QWidget@@QBE?AW4FocusPolicy@Qt@@XZ @ 9880 NONAME ; enum Qt::FocusPolicy QWidget::focusPolicy(void) const
 	?write@QIconEngineV2@@UBE_NAAVQDataStream@@@Z @ 9881 NONAME ; bool QIconEngineV2::write(class QDataStream &) const
 	?mouseHandler@QInputContext@@UAEXHPAVQMouseEvent@@@Z @ 9882 NONAME ; void QInputContext::mouseHandler(int, class QMouseEvent *)
@@ -10434,7 +10434,7 @@ EXPORTS
 	??0QPainterPath@@QAE@ABVQPointF@@@Z @ 10433 NONAME ; QPainterPath::QPainterPath(class QPointF const &)
 	?wizardStyle@QWizard@@QBE?AW4WizardStyle@1@XZ @ 10434 NONAME ; enum QWizard::WizardStyle QWizard::wizardStyle(void) const
 	?setStyle@QGraphicsScene@@QAEXPAVQStyle@@@Z @ 10435 NONAME ; void QGraphicsScene::setStyle(class QStyle *)
-	?getOpaqueRegion@QWidgetPrivate@@QBE?AVQRegion@@XZ @ 10436 NONAME ; class QRegion QWidgetPrivate::getOpaqueRegion(void) const
+	?getOpaqueRegion@QWidgetPrivate@@QBE?AVQRegion@@XZ @ 10436 NONAME ABSENT ; class QRegion QWidgetPrivate::getOpaqueRegion(void) const
 	?triggered@QMenuBar@@IAEXPAVQAction@@@Z @ 10437 NONAME ; void QMenuBar::triggered(class QAction *)
 	??0QStyleOptionButton@@QAE@XZ @ 10438 NONAME ; QStyleOptionButton::QStyleOptionButton(void)
 	?height@QImage@@QBEHXZ @ 10439 NONAME ; int QImage::height(void) const
@@ -10464,7 +10464,7 @@ EXPORTS
 	??1QGraphicsPolygonItem@@UAE@XZ @ 10463 NONAME ; QGraphicsPolygonItem::~QGraphicsPolygonItem(void)
 	?showEvent@QMdiArea@@MAEXPAVQShowEvent@@@Z @ 10464 NONAME ; void QMdiArea::showEvent(class QShowEvent *)
 	?startPos@TouchPoint@QTouchEvent@@QBE?AVQPointF@@XZ @ 10465 NONAME ; class QPointF QTouchEvent::TouchPoint::startPos(void) const
-	?metaObject@QGraphicsBloomEffect@@UBEPBUQMetaObject@@XZ @ 10466 NONAME ; struct QMetaObject const * QGraphicsBloomEffect::metaObject(void) const
+	?metaObject@QGraphicsBloomEffect@@UBEPBUQMetaObject@@XZ @ 10466 NONAME ABSENT ; struct QMetaObject const * QGraphicsBloomEffect::metaObject(void) const
 	?clicked@QDialogButtonBox@@IAEXPAVQAbstractButton@@@Z @ 10467 NONAME ; void QDialogButtonBox::clicked(class QAbstractButton *)
 	?tr@QSplitterHandle@@SA?AVQString@@PBD0@Z @ 10468 NONAME ; class QString QSplitterHandle::tr(char const *, char const *)
 	?setWindowIcon_sys@QWidgetPrivate@@QAEX_N@Z @ 10469 NONAME ; void QWidgetPrivate::setWindowIcon_sys(bool)
@@ -10521,7 +10521,7 @@ EXPORTS
 	?itemAt@QGraphicsScene@@QBEPAVQGraphicsItem@@ABVQPointF@@ABVQTransform@@@Z @ 10520 NONAME ; class QGraphicsItem * QGraphicsScene::itemAt(class QPointF const &, class QTransform const &) const
 	?paintEvent@QCheckBox@@MAEXPAVQPaintEvent@@@Z @ 10521 NONAME ; void QCheckBox::paintEvent(class QPaintEvent *)
 	?timerEvent@QTextEdit@@MAEXPAVQTimerEvent@@@Z @ 10522 NONAME ; void QTextEdit::timerEvent(class QTimerEvent *)
-	?blurHint@QGraphicsBloomEffect@@QBE?AW4RenderHint@Qt@@XZ @ 10523 NONAME ; enum Qt::RenderHint QGraphicsBloomEffect::blurHint(void) const
+	?blurHint@QGraphicsBloomEffect@@QBE?AW4RenderHint@Qt@@XZ @ 10523 NONAME ABSENT ; enum Qt::RenderHint QGraphicsBloomEffect::blurHint(void) const
 	?setInterpolationMode@QGradient@@QAEXW4InterpolationMode@1@@Z @ 10524 NONAME ; void QGradient::setInterpolationMode(enum QGradient::InterpolationMode)
 	?eraseRect@QPainter@@QAEXABVQRect@@@Z @ 10525 NONAME ; void QPainter::eraseRect(class QRect const &)
 	?tr@QDesktopWidget@@SA?AVQString@@PBD0H@Z @ 10526 NONAME ; class QString QDesktopWidget::tr(char const *, char const *, int)
@@ -10538,7 +10538,7 @@ EXPORTS
 	?setOffset@QGraphicsDropShadowEffect@@QAEXABVQPointF@@@Z @ 10537 NONAME ; void QGraphicsDropShadowEffect::setOffset(class QPointF const &)
 	?hideEvent@QAbstractSpinBox@@MAEXPAVQHideEvent@@@Z @ 10538 NONAME ; void QAbstractSpinBox::hideEvent(class QHideEvent *)
 	?setData@QTableWidgetItem@@UAEXHABVQVariant@@@Z @ 10539 NONAME ; void QTableWidgetItem::setData(int, class QVariant const &)
-	?setBlurRadius@QGraphicsBloomEffect@@QAEXH@Z @ 10540 NONAME ; void QGraphicsBloomEffect::setBlurRadius(int)
+	?setBlurRadius@QGraphicsBloomEffect@@QAEXH@Z @ 10540 NONAME ABSENT ; void QGraphicsBloomEffect::setBlurRadius(int)
 	?qt_metacast@QAbstractProxyModel@@UAEPAXPBD@Z @ 10541 NONAME ; void * QAbstractProxyModel::qt_metacast(char const *)
 	?setModelColumn@QListView@@QAEXH@Z @ 10542 NONAME ; void QListView::setModelColumn(int)
 	?addDockWidget@QMainWindow@@QAEXW4DockWidgetArea@Qt@@PAVQDockWidget@@W4Orientation@3@@Z @ 10543 NONAME ; void QMainWindow::addDockWidget(enum Qt::DockWidgetArea, class QDockWidget *, enum Qt::Orientation)
@@ -10707,7 +10707,7 @@ EXPORTS
 	?dragMoveEvent@QWidget@@MAEXPAVQDragMoveEvent@@@Z @ 10706 NONAME ; void QWidget::dragMoveEvent(class QDragMoveEvent *)
 	?started@QMovie@@IAEXXZ @ 10707 NONAME ; void QMovie::started(void)
 	??_EQImageIOPlugin@@UAE@I@Z @ 10708 NONAME ; QImageIOPlugin::~QImageIOPlugin(unsigned int)
-	?blurRadiusChanged@QGraphicsDropShadowEffect@@IAEXH@Z @ 10709 NONAME ; void QGraphicsDropShadowEffect::blurRadiusChanged(int)
+	?blurRadiusChanged@QGraphicsDropShadowEffect@@IAEXH@Z @ 10709 NONAME ABSENT ; void QGraphicsDropShadowEffect::blurRadiusChanged(int)
 	?contains@QPainterPath@@QBE_NABVQPointF@@@Z @ 10710 NONAME ; bool QPainterPath::contains(class QPointF const &) const
 	?historyUrl@QTextBrowser@@QBE?AVQUrl@@H@Z @ 10711 NONAME ; class QUrl QTextBrowser::historyUrl(int) const
 	?setLastCenterPoint@QPinchGesture@@QAEXABVQPointF@@@Z @ 10712 NONAME ; void QPinchGesture::setLastCenterPoint(class QPointF const &)
@@ -11401,7 +11401,7 @@ EXPORTS
 	?staticMetaObject@QToolBar@@2UQMetaObject@@B @ 11400 NONAME ; struct QMetaObject const QToolBar::staticMetaObject
 	?setPosition@QTextLine@@QAEXABVQPointF@@@Z @ 11401 NONAME ; void QTextLine::setPosition(class QPointF const &)
 	?topLevelWidget@QGraphicsItem@@QBEPAVQGraphicsWidget@@XZ @ 11402 NONAME ; class QGraphicsWidget * QGraphicsItem::topLevelWidget(void) const
-	?setBlurRadius@QGraphicsBlurEffect@@QAEXH@Z @ 11403 NONAME ; void QGraphicsBlurEffect::setBlurRadius(int)
+	?setBlurRadius@QGraphicsBlurEffect@@QAEXH@Z @ 11403 NONAME ABSENT ; void QGraphicsBlurEffect::setBlurRadius(int)
 	?fromRgba@QColor@@SA?AV1@I@Z @ 11404 NONAME ; class QColor QColor::fromRgba(unsigned int)
 	?isValid@QTextFormat@@QBE_NXZ @ 11405 NONAME ; bool QTextFormat::isValid(void) const
 	??0QMatrix4x4@@AAE@H@Z @ 11406 NONAME ; QMatrix4x4::QMatrix4x4(int)
@@ -11455,7 +11455,7 @@ EXPORTS
 	?tr@QTabWidget@@SA?AVQString@@PBD0@Z @ 11454 NONAME ; class QString QTabWidget::tr(char const *, char const *)
 	?addToPolygonMixed@QBezier@@QBEXPAVQPolygonF@@@Z @ 11455 NONAME ; void QBezier::addToPolygonMixed(class QPolygonF *) const
 	?command@QUndoStack@@QBEPBVQUndoCommand@@H@Z @ 11456 NONAME ; class QUndoCommand const * QUndoStack::command(int) const
-	?tr@QGraphicsPixelizeEffect@@SA?AVQString@@PBD0H@Z @ 11457 NONAME ; class QString QGraphicsPixelizeEffect::tr(char const *, char const *, int)
+	?tr@QGraphicsPixelizeEffect@@SA?AVQString@@PBD0H@Z @ 11457 NONAME ABSENT ; class QString QGraphicsPixelizeEffect::tr(char const *, char const *, int)
 	?data@QStandardItem@@UBE?AVQVariant@@H@Z @ 11458 NONAME ; class QVariant QStandardItem::data(int) const
 	?focusItem@QGraphicsScene@@QBEPAVQGraphicsItem@@XZ @ 11459 NONAME ; class QGraphicsItem * QGraphicsScene::focusItem(void) const
 	?delta@QWheelEvent@@QBEHXZ @ 11460 NONAME ; int QWheelEvent::delta(void) const
@@ -11851,7 +11851,7 @@ EXPORTS
 	?insertToolBarBreak@QMainWindow@@QAEXPAVQToolBar@@@Z @ 11850 NONAME ; void QMainWindow::insertToolBarBreak(class QToolBar *)
 	?d_func@QTextDocument@@ABEPBVQTextDocumentPrivate@@XZ @ 11851 NONAME ; class QTextDocumentPrivate const * QTextDocument::d_func(void) const
 	?setBlurHint@QPixmapBlurFilter@@QAEXW4RenderHint@Qt@@@Z @ 11852 NONAME ; void QPixmapBlurFilter::setBlurHint(enum Qt::RenderHint)
-	?trUtf8@QGraphicsPixelizeEffect@@SA?AVQString@@PBD0@Z @ 11853 NONAME ; class QString QGraphicsPixelizeEffect::trUtf8(char const *, char const *)
+	?trUtf8@QGraphicsPixelizeEffect@@SA?AVQString@@PBD0@Z @ 11853 NONAME ABSENT ; class QString QGraphicsPixelizeEffect::trUtf8(char const *, char const *)
 	?adjustSize@QGraphicsTextItem@@QAEXXZ @ 11854 NONAME ; void QGraphicsTextItem::adjustSize(void)
 	??0QTextDocumentFragment@@QAE@PBVQTextDocument@@@Z @ 11855 NONAME ; QTextDocumentFragment::QTextDocumentFragment(class QTextDocument const *)
 	?lastResortFamily@QFont@@QBE?AVQString@@XZ @ 11856 NONAME ; class QString QFont::lastResortFamily(void) const
@@ -11876,7 +11876,7 @@ EXPORTS
 	?resolveSymlinks@QFileSystemModel@@QBE_NXZ @ 11875 NONAME ; bool QFileSystemModel::resolveSymlinks(void) const
 	?itemFromIndex@QTableWidget@@IBEPAVQTableWidgetItem@@ABVQModelIndex@@@Z @ 11876 NONAME ; class QTableWidgetItem * QTableWidget::itemFromIndex(class QModelIndex const &) const
 	?commitData@QApplication@@UAEXAAVQSessionManager@@@Z @ 11877 NONAME ; void QApplication::commitData(class QSessionManager &)
-	?draw@QGraphicsPixelizeEffect@@MAEXPAVQPainter@@PAVQGraphicsEffectSource@@@Z @ 11878 NONAME ; void QGraphicsPixelizeEffect::draw(class QPainter *, class QGraphicsEffectSource *)
+	?draw@QGraphicsPixelizeEffect@@MAEXPAVQPainter@@PAVQGraphicsEffectSource@@@Z @ 11878 NONAME ABSENT ; void QGraphicsPixelizeEffect::draw(class QPainter *, class QGraphicsEffectSource *)
 	?updateState@QPaintEngineEx@@UAEXABVQPaintEngineState@@@Z @ 11879 NONAME ; void QPaintEngineEx::updateState(class QPaintEngineState const &)
 	?qt_metacall@QTextFrame@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 11880 NONAME ; int QTextFrame::qt_metacall(enum QMetaObject::Call, int, void * *)
 	?getStaticMetaObject@QImageIOPlugin@@SAABUQMetaObject@@XZ @ 11881 NONAME ; struct QMetaObject const & QImageIOPlugin::getStaticMetaObject(void)
@@ -11885,7 +11885,7 @@ EXPORTS
 	??1QGraphicsEffectSource@@UAE@XZ @ 11884 NONAME ; QGraphicsEffectSource::~QGraphicsEffectSource(void)
 	?mapRectToScene@QGraphicsItem@@QBE?AVQRectF@@MMMM@Z @ 11885 NONAME ; class QRectF QGraphicsItem::mapRectToScene(float, float, float, float) const
 	??1QToolBarChangeEvent@@UAE@XZ @ 11886 NONAME ; QToolBarChangeEvent::~QToolBarChangeEvent(void)
-	?strengthChanged@QGraphicsGrayscaleEffect@@IAEXM@Z @ 11887 NONAME ; void QGraphicsGrayscaleEffect::strengthChanged(float)
+	?strengthChanged@QGraphicsGrayscaleEffect@@IAEXM@Z @ 11887 NONAME ABSENT ; void QGraphicsGrayscaleEffect::strengthChanged(float)
 	?sizeHintChanged@QAbstractItemDelegate@@IAEXABVQModelIndex@@@Z @ 11888 NONAME ; void QAbstractItemDelegate::sizeHintChanged(class QModelIndex const &)
 	?setModel@QColumnView@@UAEXPAVQAbstractItemModel@@@Z @ 11889 NONAME ; void QColumnView::setModel(class QAbstractItemModel *)
 	?dy@QMatrix@@QBEMXZ @ 11890 NONAME ; float QMatrix::dy(void) const
@@ -12548,4 +12548,38 @@ EXPORTS
 	?projectedRotate@QMatrix4x4@@AAEAAV1@MMMM@Z @ 12547 NONAME ; class QMatrix4x4 & QMatrix4x4::projectedRotate(float, float, float, float)
 	?setLeadingIncluded@QTextLine@@QAEX_N@Z @ 12548 NONAME ; void QTextLine::setLeadingIncluded(bool)
 	?toTransform@QMatrix4x4@@QBE?AVQTransform@@XZ @ 12549 NONAME ; class QTransform QMatrix4x4::toTransform(void) const
+	??0QStyleOptionTabWidgetFrameV2@@IAE@H@Z @ 12550 NONAME ; QStyleOptionTabWidgetFrameV2::QStyleOptionTabWidgetFrameV2(int)
+	??0QStyleOptionTabWidgetFrameV2@@QAE@ABV0@@Z @ 12551 NONAME ; QStyleOptionTabWidgetFrameV2::QStyleOptionTabWidgetFrameV2(class QStyleOptionTabWidgetFrameV2 const &)
+	??0QStyleOptionTabWidgetFrameV2@@QAE@ABVQStyleOptionTabWidgetFrame@@@Z @ 12552 NONAME ; QStyleOptionTabWidgetFrameV2::QStyleOptionTabWidgetFrameV2(class QStyleOptionTabWidgetFrame const &)
+	??0QStyleOptionTabWidgetFrameV2@@QAE@XZ @ 12553 NONAME ; QStyleOptionTabWidgetFrameV2::QStyleOptionTabWidgetFrameV2(void)
+	??1QStyleOptionTabWidgetFrameV2@@QAE@XZ @ 12554 NONAME ; QStyleOptionTabWidgetFrameV2::~QStyleOptionTabWidgetFrameV2(void)
+	??4QStyleOptionTabWidgetFrameV2@@QAEAAV0@ABVQStyleOptionTabWidgetFrame@@@Z @ 12555 NONAME ; class QStyleOptionTabWidgetFrameV2 & QStyleOptionTabWidgetFrameV2::operator=(class QStyleOptionTabWidgetFrame const &)
+	?accept@QGestureEvent@@QAEXW4GestureType@Qt@@@Z @ 12556 NONAME ; void QGestureEvent::accept(enum Qt::GestureType)
+	?addCacheData@QVectorPath@@QAEPAUCacheEntry@1@PAVQPaintEngineEx@@PAXP6AX1@Z@Z @ 12557 NONAME ; struct QVectorPath::CacheEntry * QVectorPath::addCacheData(class QPaintEngineEx *, void *, void (*)(void *))
+	?availableRedoSteps@QTextDocument@@QBEHXZ @ 12558 NONAME ; int QTextDocument::availableRedoSteps(void) const
+	?availableUndoSteps@QTextDocument@@QBEHXZ @ 12559 NONAME ; int QTextDocument::availableUndoSteps(void) const
+	?blurRadius@QGraphicsBlurEffect@@QBEMXZ @ 12560 NONAME ; float QGraphicsBlurEffect::blurRadius(void) const
+	?blurRadius@QGraphicsDropShadowEffect@@QBEMXZ @ 12561 NONAME ; float QGraphicsDropShadowEffect::blurRadius(void) const
+	?blurRadius@QPixmapDropShadowFilter@@QBEMXZ @ 12562 NONAME ; float QPixmapDropShadowFilter::blurRadius(void) const
+	?blurRadiusChanged@QGraphicsBlurEffect@@IAEXM@Z @ 12563 NONAME ; void QGraphicsBlurEffect::blurRadiusChanged(float)
+	?blurRadiusChanged@QGraphicsDropShadowEffect@@IAEXM@Z @ 12564 NONAME ; void QGraphicsDropShadowEffect::blurRadiusChanged(float)
+	?gestureCancelPolicy@QGesture@@QBE?AW4GestureCancelPolicy@1@XZ @ 12565 NONAME ; enum QGesture::GestureCancelPolicy QGesture::gestureCancelPolicy(void) const
+	?ignore@QGestureEvent@@QAEXW4GestureType@Qt@@@Z @ 12566 NONAME ; void QGestureEvent::ignore(enum Qt::GestureType)
+	?isAccepted@QGestureEvent@@QBE_NW4GestureType@Qt@@@Z @ 12567 NONAME ; bool QGestureEvent::isAccepted(enum Qt::GestureType) const
+	?isCacheable@QVectorPath@@QBE_NXZ @ 12568 NONAME ; bool QVectorPath::isCacheable(void) const
+	?isConvex@QVectorPath@@QBE_NXZ @ 12569 NONAME ; bool QVectorPath::isConvex(void) const
+	?isCurved@QVectorPath@@QBE_NXZ @ 12570 NONAME ; bool QVectorPath::isCurved(void) const
+	?lookupCacheData@QVectorPath@@QBEPAUCacheEntry@1@PAVQPaintEngineEx@@@Z @ 12571 NONAME ; struct QVectorPath::CacheEntry * QVectorPath::lookupCacheData(class QPaintEngineEx *) const
+	?pixmap@QGraphicsEffectSource@@QBE?AVQPixmap@@W4CoordinateSystem@Qt@@PAVQPoint@@W4PixmapPadMode@1@@Z @ 12572 NONAME ; class QPixmap QGraphicsEffectSource::pixmap(enum Qt::CoordinateSystem, class QPoint *, enum QGraphicsEffectSource::PixmapPadMode) const
+	?radius@QPixmapBlurFilter@@QBEMXZ @ 12573 NONAME ; float QPixmapBlurFilter::radius(void) const
+	?registerGestureRecognizer@QApplication@@SA?AW4GestureType@Qt@@PAVQGestureRecognizer@@@Z @ 12574 NONAME ; enum Qt::GestureType QApplication::registerGestureRecognizer(class QGestureRecognizer *)
+	?setAccepted@QGestureEvent@@QAEXW4GestureType@Qt@@_N@Z @ 12575 NONAME ; void QGestureEvent::setAccepted(enum Qt::GestureType, bool)
+	?setBlurRadius@QGraphicsBlurEffect@@QAEXM@Z @ 12576 NONAME ; void QGraphicsBlurEffect::setBlurRadius(float)
+	?setBlurRadius@QGraphicsDropShadowEffect@@QAEXM@Z @ 12577 NONAME ; void QGraphicsDropShadowEffect::setBlurRadius(float)
+	?setBlurRadius@QPixmapDropShadowFilter@@QAEXM@Z @ 12578 NONAME ; void QPixmapDropShadowFilter::setBlurRadius(float)
+	?setGestureCancelPolicy@QGesture@@QAEXW4GestureCancelPolicy@1@@Z @ 12579 NONAME ; void QGesture::setGestureCancelPolicy(enum QGesture::GestureCancelPolicy)
+	?setRadius@QPixmapBlurFilter@@QAEXM@Z @ 12580 NONAME ; void QPixmapBlurFilter::setRadius(float)
+	?topLevelChanged@QToolBar@@IAEX_N@Z @ 12581 NONAME ; void QToolBar::topLevelChanged(bool)
+	?ungrabGesture@QWidget@@QAEXW4GestureType@Qt@@@Z @ 12582 NONAME ; void QWidget::ungrabGesture(enum Qt::GestureType)
+	?unregisterGestureRecognizer@QApplication@@SAXW4GestureType@Qt@@@Z @ 12583 NONAME ; void QApplication::unregisterGestureRecognizer(enum Qt::GestureType)
 
diff --git a/src/s60installs/bwins/QtScriptu.def b/src/s60installs/bwins/QtScriptu.def
index 95b047e..b3efd69 100644
--- a/src/s60installs/bwins/QtScriptu.def
+++ b/src/s60installs/bwins/QtScriptu.def
@@ -328,4 +328,19 @@ EXPORTS
 	?functionMetaIndex@QScriptContextInfo@@QBEHXZ @ 327 NONAME ; int QScriptContextInfo::functionMetaIndex(void) const
 	?columnNumber@QScriptContextInfo@@QBEHXZ @ 328 NONAME ; int QScriptContextInfo::columnNumber(void) const
 	??0QScriptValue@@QAE@_N@Z @ 329 NONAME ; QScriptValue::QScriptValue(bool)
+	??0QScriptProgram@@QAE@ABV0@@Z @ 330 NONAME ; QScriptProgram::QScriptProgram(class QScriptProgram const &)
+	??0QScriptProgram@@QAE@ABVQString@@V1@H@Z @ 331 NONAME ; QScriptProgram::QScriptProgram(class QString const &, class QString, int)
+	??0QScriptProgram@@QAE@XZ @ 332 NONAME ; QScriptProgram::QScriptProgram(void)
+	??1QScriptProgram@@QAE@XZ @ 333 NONAME ; QScriptProgram::~QScriptProgram(void)
+	??4QScriptProgram@@QAEAAV0@ABV0@@Z @ 334 NONAME ; class QScriptProgram & QScriptProgram::operator=(class QScriptProgram const &)
+	??8QScriptProgram@@QBE_NABV0@@Z @ 335 NONAME ; bool QScriptProgram::operator==(class QScriptProgram const &) const
+	??9QScriptProgram@@QBE_NABV0@@Z @ 336 NONAME ; bool QScriptProgram::operator!=(class QScriptProgram const &) const
+	?d_func@QScriptProgram@@AAEPAVQScriptProgramPrivate@@XZ @ 337 NONAME ; class QScriptProgramPrivate * QScriptProgram::d_func(void)
+	?d_func@QScriptProgram@@ABEPBVQScriptProgramPrivate@@XZ @ 338 NONAME ; class QScriptProgramPrivate const * QScriptProgram::d_func(void) const
+	?evaluate@QScriptEngine@@QAE?AVQScriptValue@@ABVQScriptProgram@@@Z @ 339 NONAME ; class QScriptValue QScriptEngine::evaluate(class QScriptProgram const &)
+	?fileName@QScriptProgram@@QBE?AVQString@@XZ @ 340 NONAME ; class QString QScriptProgram::fileName(void) const
+	?firstLineNumber@QScriptProgram@@QBEHXZ @ 341 NONAME ; int QScriptProgram::firstLineNumber(void) const
+	?isNull@QScriptProgram@@QBE_NXZ @ 342 NONAME ; bool QScriptProgram::isNull(void) const
+	?sourceCode@QScriptProgram@@QBE?AVQString@@XZ @ 343 NONAME ; class QString QScriptProgram::sourceCode(void) const
+	?toArrayIndex@QScriptString@@QBEIPA_N@Z @ 344 NONAME ; unsigned int QScriptString::toArrayIndex(bool *) const
 
diff --git a/src/s60installs/bwins/QtXmlPatternsu.def b/src/s60installs/bwins/QtXmlPatternsu.def
new file mode 100644
index 0000000..57a75d4
--- /dev/null
+++ b/src/s60installs/bwins/QtXmlPatternsu.def
@@ -0,0 +1,280 @@
+EXPORTS
+	??0QAbstractMessageHandler@@QAE@PAVQObject@@@Z @ 1 NONAME ; QAbstractMessageHandler::QAbstractMessageHandler(class QObject *)
+	??0QAbstractUriResolver@@QAE@PAVQObject@@@Z @ 2 NONAME ; QAbstractUriResolver::QAbstractUriResolver(class QObject *)
+	??0QAbstractXmlNodeModel@@IAE@PAVQAbstractXmlNodeModelPrivate@@@Z @ 3 NONAME ; QAbstractXmlNodeModel::QAbstractXmlNodeModel(class QAbstractXmlNodeModelPrivate *)
+	??0QAbstractXmlNodeModel@@QAE@XZ @ 4 NONAME ; QAbstractXmlNodeModel::QAbstractXmlNodeModel(void)
+	??0QAbstractXmlReceiver@@IAE@PAVQAbstractXmlReceiverPrivate@@@Z @ 5 NONAME ; QAbstractXmlReceiver::QAbstractXmlReceiver(class QAbstractXmlReceiverPrivate *)
+	??0QAbstractXmlReceiver@@QAE@XZ @ 6 NONAME ; QAbstractXmlReceiver::QAbstractXmlReceiver(void)
+	??0QSimpleXmlNodeModel@@QAE@ABVQXmlNamePool@@@Z @ 7 NONAME ; QSimpleXmlNodeModel::QSimpleXmlNodeModel(class QXmlNamePool const &)
+	??0QSourceLocation@@QAE@ABV0@@Z @ 8 NONAME ; QSourceLocation::QSourceLocation(class QSourceLocation const &)
+	??0QSourceLocation@@QAE@ABVQUrl@@HH@Z @ 9 NONAME ; QSourceLocation::QSourceLocation(class QUrl const &, int, int)
+	??0QSourceLocation@@QAE@XZ @ 10 NONAME ; QSourceLocation::QSourceLocation(void)
+	??0QXmlFormatter@@QAE@ABVQXmlQuery@@PAVQIODevice@@@Z @ 11 NONAME ; QXmlFormatter::QXmlFormatter(class QXmlQuery const &, class QIODevice *)
+	??0QXmlItem@@AAE@ABVItem@QPatternist@@@Z @ 12 NONAME ; QXmlItem::QXmlItem(class QPatternist::Item const &)
+	??0QXmlItem@@QAE@ABV0@@Z @ 13 NONAME ; QXmlItem::QXmlItem(class QXmlItem const &)
+	??0QXmlItem@@QAE@ABVQVariant@@@Z @ 14 NONAME ; QXmlItem::QXmlItem(class QVariant const &)
+	??0QXmlItem@@QAE@ABVQXmlNodeModelIndex@@@Z @ 15 NONAME ; QXmlItem::QXmlItem(class QXmlNodeModelIndex const &)
+	??0QXmlItem@@QAE@XZ @ 16 NONAME ; QXmlItem::QXmlItem(void)
+	??0QXmlName@@AAE@H@Z @ 17 NONAME ; QXmlName::QXmlName(int)
+	??0QXmlName@@QAE@AAVQXmlNamePool@@ABVQString@@11@Z @ 18 NONAME ; QXmlName::QXmlName(class QXmlNamePool &, class QString const &, class QString const &, class QString const &)
+	??0QXmlName@@QAE@ABV0@@Z @ 19 NONAME ; QXmlName::QXmlName(class QXmlName const &)
+	??0QXmlName@@QAE@FFF@Z @ 20 NONAME ; QXmlName::QXmlName(short, short, short)
+	??0QXmlName@@QAE@XZ @ 21 NONAME ; QXmlName::QXmlName(void)
+	??0QXmlNamePool@@AAE@PAVNamePool@QPatternist@@@Z @ 22 NONAME ; QXmlNamePool::QXmlNamePool(class QPatternist::NamePool *)
+	??0QXmlNamePool@@QAE@ABV0@@Z @ 23 NONAME ; QXmlNamePool::QXmlNamePool(class QXmlNamePool const &)
+	??0QXmlNamePool@@QAE@XZ @ 24 NONAME ; QXmlNamePool::QXmlNamePool(void)
+	??0QXmlNodeModelIndex@@AAE@ABVNodeIndexStorage@QPatternist@@@Z @ 25 NONAME ; QXmlNodeModelIndex::QXmlNodeModelIndex(class QPatternist::NodeIndexStorage const &)
+	??0QXmlNodeModelIndex@@QAE@ABV0@@Z @ 26 NONAME ; QXmlNodeModelIndex::QXmlNodeModelIndex(class QXmlNodeModelIndex const &)
+	??0QXmlNodeModelIndex@@QAE@XZ @ 27 NONAME ; QXmlNodeModelIndex::QXmlNodeModelIndex(void)
+	??0QXmlQuery@@QAE@ABV0@@Z @ 28 NONAME ; QXmlQuery::QXmlQuery(class QXmlQuery const &)
+	??0QXmlQuery@@QAE@ABVQXmlNamePool@@@Z @ 29 NONAME ; QXmlQuery::QXmlQuery(class QXmlNamePool const &)
+	??0QXmlQuery@@QAE@W4QueryLanguage@0@ABVQXmlNamePool@@@Z @ 30 NONAME ; QXmlQuery::QXmlQuery(enum QXmlQuery::QueryLanguage, class QXmlNamePool const &)
+	??0QXmlQuery@@QAE@XZ @ 31 NONAME ; QXmlQuery::QXmlQuery(void)
+	??0QXmlResultItems@@QAE@XZ @ 32 NONAME ; QXmlResultItems::QXmlResultItems(void)
+	??0QXmlSchema@@QAE@ABV0@@Z @ 33 NONAME ; QXmlSchema::QXmlSchema(class QXmlSchema const &)
+	??0QXmlSchema@@QAE@XZ @ 34 NONAME ; QXmlSchema::QXmlSchema(void)
+	??0QXmlSchemaValidator@@QAE@ABVQXmlSchema@@@Z @ 35 NONAME ; QXmlSchemaValidator::QXmlSchemaValidator(class QXmlSchema const &)
+	??0QXmlSchemaValidator@@QAE@XZ @ 36 NONAME ; QXmlSchemaValidator::QXmlSchemaValidator(void)
+	??0QXmlSerializer@@IAE@PAVQAbstractXmlReceiverPrivate@@@Z @ 37 NONAME ; QXmlSerializer::QXmlSerializer(class QAbstractXmlReceiverPrivate *)
+	??0QXmlSerializer@@QAE@ABVQXmlQuery@@PAVQIODevice@@@Z @ 38 NONAME ; QXmlSerializer::QXmlSerializer(class QXmlQuery const &, class QIODevice *)
+	??1QAbstractMessageHandler@@UAE@XZ @ 39 NONAME ; QAbstractMessageHandler::~QAbstractMessageHandler(void)
+	??1QAbstractUriResolver@@UAE@XZ @ 40 NONAME ; QAbstractUriResolver::~QAbstractUriResolver(void)
+	??1QAbstractXmlNodeModel@@UAE@XZ @ 41 NONAME ; QAbstractXmlNodeModel::~QAbstractXmlNodeModel(void)
+	??1QAbstractXmlReceiver@@UAE@XZ @ 42 NONAME ; QAbstractXmlReceiver::~QAbstractXmlReceiver(void)
+	??1QSimpleXmlNodeModel@@UAE@XZ @ 43 NONAME ; QSimpleXmlNodeModel::~QSimpleXmlNodeModel(void)
+	??1QSourceLocation@@QAE@XZ @ 44 NONAME ; QSourceLocation::~QSourceLocation(void)
+	??1QXmlFormatter@@UAE@XZ @ 45 NONAME ; QXmlFormatter::~QXmlFormatter(void)
+	??1QXmlItem@@QAE@XZ @ 46 NONAME ; QXmlItem::~QXmlItem(void)
+	??1QXmlNamePool@@QAE@XZ @ 47 NONAME ; QXmlNamePool::~QXmlNamePool(void)
+	??1QXmlQuery@@QAE@XZ @ 48 NONAME ; QXmlQuery::~QXmlQuery(void)
+	??1QXmlResultItems@@UAE@XZ @ 49 NONAME ; QXmlResultItems::~QXmlResultItems(void)
+	??1QXmlSchema@@QAE@XZ @ 50 NONAME ; QXmlSchema::~QXmlSchema(void)
+	??1QXmlSchemaValidator@@QAE@XZ @ 51 NONAME ; QXmlSchemaValidator::~QXmlSchemaValidator(void)
+	??1QXmlSerializer@@UAE@XZ @ 52 NONAME ; QXmlSerializer::~QXmlSerializer(void)
+	??4QSourceLocation@@QAEAAV0@ABV0@@Z @ 53 NONAME ; class QSourceLocation & QSourceLocation::operator=(class QSourceLocation const &)
+	??4QXmlItem@@QAEAAV0@ABV0@@Z @ 54 NONAME ; class QXmlItem & QXmlItem::operator=(class QXmlItem const &)
+	??4QXmlName@@QAEAAV0@ABV0@@Z @ 55 NONAME ; class QXmlName & QXmlName::operator=(class QXmlName const &)
+	??4QXmlNamePool@@QAEAAV0@ABV0@@Z @ 56 NONAME ; class QXmlNamePool & QXmlNamePool::operator=(class QXmlNamePool const &)
+	??4QXmlQuery@@QAEAAV0@ABV0@@Z @ 57 NONAME ; class QXmlQuery & QXmlQuery::operator=(class QXmlQuery const &)
+	??4QXmlSchema@@QAEAAV0@ABV0@@Z @ 58 NONAME ; class QXmlSchema & QXmlSchema::operator=(class QXmlSchema const &)
+	??6@YA?AVQDebug@@V0@ABVQSourceLocation@@@Z @ 59 NONAME ; class QDebug operator<<(class QDebug, class QSourceLocation const &)
+	??8QSourceLocation@@QBE_NABV0@@Z @ 60 NONAME ; bool QSourceLocation::operator==(class QSourceLocation const &) const
+	??8QXmlName@@QBE_NABV0@@Z @ 61 NONAME ; bool QXmlName::operator==(class QXmlName const &) const
+	??8QXmlNodeModelIndex@@QBE_NABV0@@Z @ 62 NONAME ; bool QXmlNodeModelIndex::operator==(class QXmlNodeModelIndex const &) const
+	??9QSourceLocation@@QBE_NABV0@@Z @ 63 NONAME ; bool QSourceLocation::operator!=(class QSourceLocation const &) const
+	??9QXmlName@@QBE_NABV0@@Z @ 64 NONAME ; bool QXmlName::operator!=(class QXmlName const &) const
+	??9QXmlNodeModelIndex@@QBE_NABV0@@Z @ 65 NONAME ; bool QXmlNodeModelIndex::operator!=(class QXmlNodeModelIndex const &) const
+	??_EQAbstractMessageHandler@@UAE@I@Z @ 66 NONAME ; QAbstractMessageHandler::~QAbstractMessageHandler(unsigned int)
+	??_EQAbstractUriResolver@@UAE@I@Z @ 67 NONAME ; QAbstractUriResolver::~QAbstractUriResolver(unsigned int)
+	??_EQAbstractXmlNodeModel@@UAE@I@Z @ 68 NONAME ; QAbstractXmlNodeModel::~QAbstractXmlNodeModel(unsigned int)
+	??_EQAbstractXmlReceiver@@UAE@I@Z @ 69 NONAME ; QAbstractXmlReceiver::~QAbstractXmlReceiver(unsigned int)
+	??_EQSimpleXmlNodeModel@@UAE@I@Z @ 70 NONAME ; QSimpleXmlNodeModel::~QSimpleXmlNodeModel(unsigned int)
+	??_EQXmlFormatter@@UAE@I@Z @ 71 NONAME ; QXmlFormatter::~QXmlFormatter(unsigned int)
+	??_EQXmlResultItems@@UAE@I@Z @ 72 NONAME ; QXmlResultItems::~QXmlResultItems(unsigned int)
+	??_EQXmlSerializer@@UAE@I@Z @ 73 NONAME ; QXmlSerializer::~QXmlSerializer(unsigned int)
+	?additionalData@QXmlNodeModelIndex@@QBE_JXZ @ 74 NONAME ; long long QXmlNodeModelIndex::additionalData(void) const
+	?atDocumentRoot@QXmlSerializer@@ABE_NXZ @ 75 NONAME ; bool QXmlSerializer::atDocumentRoot(void) const
+	?atomicValue@QXmlFormatter@@UAEXABVQVariant@@@Z @ 76 NONAME ; void QXmlFormatter::atomicValue(class QVariant const &)
+	?atomicValue@QXmlSerializer@@UAEXABVQVariant@@@Z @ 77 NONAME ; void QXmlSerializer::atomicValue(class QVariant const &)
+	?attribute@QXmlFormatter@@UAEXABVQXmlName@@ABVQStringRef@@@Z @ 78 NONAME ; void QXmlFormatter::attribute(class QXmlName const &, class QStringRef const &)
+	?attribute@QXmlSerializer@@UAEXABVQXmlName@@ABVQStringRef@@@Z @ 79 NONAME ; void QXmlSerializer::attribute(class QXmlName const &, class QStringRef const &)
+	?baseUri@QSimpleXmlNodeModel@@UBE?AVQUrl@@ABVQXmlNodeModelIndex@@@Z @ 80 NONAME ; class QUrl QSimpleXmlNodeModel::baseUri(class QXmlNodeModelIndex const &) const
+	?baseUri@QXmlNodeModelIndex@@QBE?AVQUrl@@XZ @ 81 NONAME ; class QUrl QXmlNodeModelIndex::baseUri(void) const
+	?bindVariable@QXmlQuery@@QAEXABVQString@@ABV1@@Z @ 82 NONAME ; void QXmlQuery::bindVariable(class QString const &, class QXmlQuery const &)
+	?bindVariable@QXmlQuery@@QAEXABVQString@@ABVQXmlItem@@@Z @ 83 NONAME ; void QXmlQuery::bindVariable(class QString const &, class QXmlItem const &)
+	?bindVariable@QXmlQuery@@QAEXABVQString@@PAVQIODevice@@@Z @ 84 NONAME ; void QXmlQuery::bindVariable(class QString const &, class QIODevice *)
+	?bindVariable@QXmlQuery@@QAEXABVQXmlName@@ABV1@@Z @ 85 NONAME ; void QXmlQuery::bindVariable(class QXmlName const &, class QXmlQuery const &)
+	?bindVariable@QXmlQuery@@QAEXABVQXmlName@@ABVQXmlItem@@@Z @ 86 NONAME ; void QXmlQuery::bindVariable(class QXmlName const &, class QXmlItem const &)
+	?bindVariable@QXmlQuery@@QAEXABVQXmlName@@PAVQIODevice@@@Z @ 87 NONAME ; void QXmlQuery::bindVariable(class QXmlName const &, class QIODevice *)
+	?characters@QXmlFormatter@@UAEXABVQStringRef@@@Z @ 88 NONAME ; void QXmlFormatter::characters(class QStringRef const &)
+	?characters@QXmlSerializer@@UAEXABVQStringRef@@@Z @ 89 NONAME ; void QXmlSerializer::characters(class QStringRef const &)
+	?code@QXmlName@@QBE_JXZ @ 90 NONAME ; long long QXmlName::code(void) const
+	?codec@QXmlSerializer@@QBEPBVQTextCodec@@XZ @ 91 NONAME ; class QTextCodec const * QXmlSerializer::codec(void) const
+	?column@QSourceLocation@@QBE_JXZ @ 92 NONAME ; long long QSourceLocation::column(void) const
+	?comment@QXmlFormatter@@UAEXABVQString@@@Z @ 93 NONAME ; void QXmlFormatter::comment(class QString const &)
+	?comment@QXmlSerializer@@UAEXABVQString@@@Z @ 94 NONAME ; void QXmlSerializer::comment(class QString const &)
+	?compareOrder@QXmlNodeModelIndex@@QBE?AW4DocumentOrder@1@ABV1@@Z @ 95 NONAME ; enum QXmlNodeModelIndex::DocumentOrder QXmlNodeModelIndex::compareOrder(class QXmlNodeModelIndex const &) const
+	?copyNodeTo@QAbstractXmlNodeModel@@UBEXABVQXmlNodeModelIndex@@PAVQAbstractXmlReceiver@@ABV?$QFlags@W4NodeCopySetting@QAbstractXmlNodeModel@@@@@Z @ 96 NONAME ; void QAbstractXmlNodeModel::copyNodeTo(class QXmlNodeModelIndex const &, class QAbstractXmlReceiver *, class QFlags<enum QAbstractXmlNodeModel::NodeCopySetting> const &) const
+	?create@QXmlNodeModelIndex@@CA?AV1@_JPBVQAbstractXmlNodeModel@@0@Z @ 97 NONAME ; class QXmlNodeModelIndex QXmlNodeModelIndex::create(long long, class QAbstractXmlNodeModel const *, long long)
+	?create@QXmlNodeModelIndex@@CA?AV1@_JPBVQAbstractXmlNodeModel@@@Z @ 98 NONAME ; class QXmlNodeModelIndex QXmlNodeModelIndex::create(long long, class QAbstractXmlNodeModel const *)
+	?createIndex@QAbstractXmlNodeModel@@IBE?AVQXmlNodeModelIndex@@PAX_J@Z @ 99 NONAME ; class QXmlNodeModelIndex QAbstractXmlNodeModel::createIndex(void *, long long) const
+	?createIndex@QAbstractXmlNodeModel@@IBE?AVQXmlNodeModelIndex@@_J0@Z @ 100 NONAME ; class QXmlNodeModelIndex QAbstractXmlNodeModel::createIndex(long long, long long) const
+	?createIndex@QAbstractXmlNodeModel@@IBE?AVQXmlNodeModelIndex@@_J@Z @ 101 NONAME ; class QXmlNodeModelIndex QAbstractXmlNodeModel::createIndex(long long) const
+	?current@QXmlResultItems@@QBE?AVQXmlItem@@XZ @ 102 NONAME ; class QXmlItem QXmlResultItems::current(void) const
+	?d_func@QAbstractMessageHandler@@AAEPAVQAbstractMessageHandlerPrivate@@XZ @ 103 NONAME ; class QAbstractMessageHandlerPrivate * QAbstractMessageHandler::d_func(void)
+	?d_func@QAbstractMessageHandler@@ABEPBVQAbstractMessageHandlerPrivate@@XZ @ 104 NONAME ; class QAbstractMessageHandlerPrivate const * QAbstractMessageHandler::d_func(void) const
+	?d_func@QAbstractUriResolver@@AAEPAVQAbstractUriResolverPrivate@@XZ @ 105 NONAME ; class QAbstractUriResolverPrivate * QAbstractUriResolver::d_func(void)
+	?d_func@QAbstractUriResolver@@ABEPBVQAbstractUriResolverPrivate@@XZ @ 106 NONAME ; class QAbstractUriResolverPrivate const * QAbstractUriResolver::d_func(void) const
+	?d_func@QSimpleXmlNodeModel@@AAEPAVQSimpleXmlNodeModelPrivate@@XZ @ 107 NONAME ; class QSimpleXmlNodeModelPrivate * QSimpleXmlNodeModel::d_func(void)
+	?d_func@QSimpleXmlNodeModel@@ABEPBVQSimpleXmlNodeModelPrivate@@XZ @ 108 NONAME ; class QSimpleXmlNodeModelPrivate const * QSimpleXmlNodeModel::d_func(void) const
+	?d_func@QXmlFormatter@@AAEPAVQXmlFormatterPrivate@@XZ @ 109 NONAME ; class QXmlFormatterPrivate * QXmlFormatter::d_func(void)
+	?d_func@QXmlFormatter@@ABEPBVQXmlFormatterPrivate@@XZ @ 110 NONAME ; class QXmlFormatterPrivate const * QXmlFormatter::d_func(void) const
+	?d_func@QXmlResultItems@@AAEPAVQXmlResultItemsPrivate@@XZ @ 111 NONAME ; class QXmlResultItemsPrivate * QXmlResultItems::d_func(void)
+	?d_func@QXmlResultItems@@ABEPBVQXmlResultItemsPrivate@@XZ @ 112 NONAME ; class QXmlResultItemsPrivate const * QXmlResultItems::d_func(void) const
+	?d_func@QXmlSerializer@@AAEPAVQXmlSerializerPrivate@@XZ @ 113 NONAME ; class QXmlSerializerPrivate * QXmlSerializer::d_func(void)
+	?d_func@QXmlSerializer@@ABEPBVQXmlSerializerPrivate@@XZ @ 114 NONAME ; class QXmlSerializerPrivate const * QXmlSerializer::d_func(void) const
+	?data@QXmlNodeModelIndex@@QBE_JXZ @ 115 NONAME ; long long QXmlNodeModelIndex::data(void) const
+	?documentUri@QXmlNodeModelIndex@@QBE?AVQUrl@@XZ @ 116 NONAME ; class QUrl QXmlNodeModelIndex::documentUri(void) const
+	?documentUri@QXmlSchema@@QBE?AVQUrl@@XZ @ 117 NONAME ; class QUrl QXmlSchema::documentUri(void) const
+	?elementById@QSimpleXmlNodeModel@@UBE?AVQXmlNodeModelIndex@@ABVQXmlName@@@Z @ 118 NONAME ; class QXmlNodeModelIndex QSimpleXmlNodeModel::elementById(class QXmlName const &) const
+	?endDocument@QXmlFormatter@@UAEXXZ @ 119 NONAME ; void QXmlFormatter::endDocument(void)
+	?endDocument@QXmlSerializer@@UAEXXZ @ 120 NONAME ; void QXmlSerializer::endDocument(void)
+	?endElement@QXmlFormatter@@UAEXXZ @ 121 NONAME ; void QXmlFormatter::endElement(void)
+	?endElement@QXmlSerializer@@UAEXXZ @ 122 NONAME ; void QXmlSerializer::endElement(void)
+	?endOfSequence@QXmlFormatter@@UAEXXZ @ 123 NONAME ; void QXmlFormatter::endOfSequence(void)
+	?endOfSequence@QXmlSerializer@@UAEXXZ @ 124 NONAME ; void QXmlSerializer::endOfSequence(void)
+	?evaluateTo@QXmlQuery@@QBEXPAVQXmlResultItems@@@Z @ 125 NONAME ; void QXmlQuery::evaluateTo(class QXmlResultItems *) const
+	?evaluateTo@QXmlQuery@@QBE_NPAVQAbstractXmlReceiver@@@Z @ 126 NONAME ; bool QXmlQuery::evaluateTo(class QAbstractXmlReceiver *) const
+	?evaluateTo@QXmlQuery@@QBE_NPAVQIODevice@@@Z @ 127 NONAME ; bool QXmlQuery::evaluateTo(class QIODevice *) const
+	?evaluateTo@QXmlQuery@@QBE_NPAVQString@@@Z @ 128 NONAME ; bool QXmlQuery::evaluateTo(class QString *) const
+	?evaluateTo@QXmlQuery@@QBE_NPAVQStringList@@@Z @ 129 NONAME ; bool QXmlQuery::evaluateTo(class QStringList *) const
+	?fromClarkName@QXmlName@@SA?AV1@ABVQString@@ABVQXmlNamePool@@@Z @ 130 NONAME ; class QXmlName QXmlName::fromClarkName(class QString const &, class QXmlNamePool const &)
+	?getStaticMetaObject@QAbstractMessageHandler@@SAABUQMetaObject@@XZ @ 131 NONAME ; struct QMetaObject const & QAbstractMessageHandler::getStaticMetaObject(void)
+	?getStaticMetaObject@QAbstractUriResolver@@SAABUQMetaObject@@XZ @ 132 NONAME ; struct QMetaObject const & QAbstractUriResolver::getStaticMetaObject(void)
+	?hasError@QXmlResultItems@@QBE_NXZ @ 133 NONAME ; bool QXmlResultItems::hasError(void) const
+	?hasNamespace@QXmlName@@QBE_NXZ @ 134 NONAME ; bool QXmlName::hasNamespace(void) const
+	?hasPrefix@QXmlName@@QBE_NXZ @ 135 NONAME ; bool QXmlName::hasPrefix(void) const
+	?indentationDepth@QXmlFormatter@@QBEHXZ @ 136 NONAME ; int QXmlFormatter::indentationDepth(void) const
+	?initialTemplateName@QXmlQuery@@QBE?AVQXmlName@@XZ @ 137 NONAME ; class QXmlName QXmlQuery::initialTemplateName(void) const
+	?internalIsAtomicValue@QXmlItem@@ABE_NXZ @ 138 NONAME ; bool QXmlItem::internalIsAtomicValue(void) const
+	?internalPointer@QXmlNodeModelIndex@@QBEPAXXZ @ 139 NONAME ; void * QXmlNodeModelIndex::internalPointer(void) const
+	?is@QXmlNodeModelIndex@@QBE_NABV1@@Z @ 140 NONAME ; bool QXmlNodeModelIndex::is(class QXmlNodeModelIndex const &) const
+	?isAtomicValue@QXmlItem@@QBE_NXZ @ 141 NONAME ; bool QXmlItem::isAtomicValue(void) const
+	?isBindingInScope@QXmlSerializer@@ABE_NVQXmlName@@@Z @ 142 NONAME ; bool QXmlSerializer::isBindingInScope(class QXmlName) const
+	?isDeepEqual@QAbstractXmlNodeModel@@UBE_NABVQXmlNodeModelIndex@@0@Z @ 143 NONAME ; bool QAbstractXmlNodeModel::isDeepEqual(class QXmlNodeModelIndex const &, class QXmlNodeModelIndex const &) const
+	?isDeepEqual@QXmlNodeModelIndex@@QBE_NABV1@@Z @ 144 NONAME ; bool QXmlNodeModelIndex::isDeepEqual(class QXmlNodeModelIndex const &) const
+	?isIgnorableInDeepEqual@QAbstractXmlNodeModel@@CA_NABVQXmlNodeModelIndex@@@Z @ 145 NONAME ; bool QAbstractXmlNodeModel::isIgnorableInDeepEqual(class QXmlNodeModelIndex const &)
+	?isLexicallyEqual@QXmlName@@QBE_NABV1@@Z @ 146 NONAME ; bool QXmlName::isLexicallyEqual(class QXmlName const &) const
+	?isNCName@QXmlName@@SA_NABVQString@@@Z @ 147 NONAME ; bool QXmlName::isNCName(class QString const &)
+	?isNode@QXmlItem@@QBE_NXZ @ 148 NONAME ; bool QXmlItem::isNode(void) const
+	?isNull@QSourceLocation@@QBE_NXZ @ 149 NONAME ; bool QSourceLocation::isNull(void) const
+	?isNull@QXmlItem@@QBE_NXZ @ 150 NONAME ; bool QXmlItem::isNull(void) const
+	?isNull@QXmlName@@QBE_NXZ @ 151 NONAME ; bool QXmlName::isNull(void) const
+	?isNull@QXmlNodeModelIndex@@QBE_NXZ @ 152 NONAME ; bool QXmlNodeModelIndex::isNull(void) const
+	?isValid@QXmlQuery@@QBE_NXZ @ 153 NONAME ; bool QXmlQuery::isValid(void) const
+	?isValid@QXmlSchema@@QBE_NXZ @ 154 NONAME ; bool QXmlSchema::isValid(void) const
+	?item@QAbstractXmlReceiver@@UAEXABVItem@QPatternist@@@Z @ 155 NONAME ; void QAbstractXmlReceiver::item(class QPatternist::Item const &)
+	?item@QXmlFormatter@@UAEXABVItem@QPatternist@@@Z @ 156 NONAME ; void QXmlFormatter::item(class QPatternist::Item const &)
+	?item@QXmlSerializer@@UAEXABVItem@QPatternist@@@Z @ 157 NONAME ; void QXmlSerializer::item(class QPatternist::Item const &)
+	?iterate@QAbstractXmlNodeModel@@UBE?AV?$QExplicitlySharedDataPointer@V?$QAbstractXmlForwardIterator@VQXmlNodeModelIndex@@@@@@ABVQXmlNodeModelIndex@@W4Axis@3@@Z @ 158 NONAME ; class QExplicitlySharedDataPointer<class QAbstractXmlForwardIterator<class QXmlNodeModelIndex> > QAbstractXmlNodeModel::iterate(class QXmlNodeModelIndex const &, enum QXmlNodeModelIndex::Axis) const
+	?iterate@QXmlNodeModelIndex@@QBE?AV?$QExplicitlySharedDataPointer@V?$QAbstractXmlForwardIterator@VQXmlNodeModelIndex@@@@@@W4Axis@1@@Z @ 159 NONAME ; class QExplicitlySharedDataPointer<class QAbstractXmlForwardIterator<class QXmlNodeModelIndex> > QXmlNodeModelIndex::iterate(enum QXmlNodeModelIndex::Axis) const
+	?kind@QXmlNodeModelIndex@@QBE?AW4NodeKind@1@XZ @ 160 NONAME ; enum QXmlNodeModelIndex::NodeKind QXmlNodeModelIndex::kind(void) const
+	?line@QSourceLocation@@QBE_JXZ @ 161 NONAME ; long long QSourceLocation::line(void) const
+	?load@QXmlSchema@@QAE_NABVQByteArray@@ABVQUrl@@@Z @ 162 NONAME ; bool QXmlSchema::load(class QByteArray const &, class QUrl const &)
+	?load@QXmlSchema@@QAE_NABVQUrl@@@Z @ 163 NONAME ; bool QXmlSchema::load(class QUrl const &)
+	?load@QXmlSchema@@QAE_NPAVQIODevice@@ABVQUrl@@@Z @ 164 NONAME ; bool QXmlSchema::load(class QIODevice *, class QUrl const &)
+	?localName@QXmlName@@QBE?AVQString@@ABVQXmlNamePool@@@Z @ 165 NONAME ; class QString QXmlName::localName(class QXmlNamePool const &) const
+	?localName@QXmlName@@QBEFXZ @ 166 NONAME ; short QXmlName::localName(void) const
+	?mapToSequence@QAbstractXmlNodeModel@@ABE?AV?$QExplicitlySharedDataPointer@V?$QAbstractXmlForwardIterator@VQXmlNodeModelIndex@@@@@@ABVQXmlNodeModelIndex@@ABV?$QExplicitlySharedDataPointer@VDynamicContext@QPatternist@@@@@Z @ 167 NONAME ; class QExplicitlySharedDataPointer<class QAbstractXmlForwardIterator<class QXmlNodeModelIndex> > QAbstractXmlNodeModel::mapToSequence(class QXmlNodeModelIndex const &, class QExplicitlySharedDataPointer<class QPatternist::DynamicContext> const &) const
+	?message@QAbstractMessageHandler@@QAEXW4QtMsgType@@ABVQString@@ABVQUrl@@ABVQSourceLocation@@@Z @ 168 NONAME ; void QAbstractMessageHandler::message(enum QtMsgType, class QString const &, class QUrl const &, class QSourceLocation const &)
+	?messageHandler@QXmlQuery@@QBEPAVQAbstractMessageHandler@@XZ @ 169 NONAME ; class QAbstractMessageHandler * QXmlQuery::messageHandler(void) const
+	?messageHandler@QXmlSchema@@QBEPAVQAbstractMessageHandler@@XZ @ 170 NONAME ; class QAbstractMessageHandler * QXmlSchema::messageHandler(void) const
+	?messageHandler@QXmlSchemaValidator@@QBEPAVQAbstractMessageHandler@@XZ @ 171 NONAME ; class QAbstractMessageHandler * QXmlSchemaValidator::messageHandler(void) const
+	?metaObject@QAbstractMessageHandler@@UBEPBUQMetaObject@@XZ @ 172 NONAME ; struct QMetaObject const * QAbstractMessageHandler::metaObject(void) const
+	?metaObject@QAbstractUriResolver@@UBEPBUQMetaObject@@XZ @ 173 NONAME ; struct QMetaObject const * QAbstractUriResolver::metaObject(void) const
+	?model@QXmlNodeModelIndex@@QBEPBVQAbstractXmlNodeModel@@XZ @ 174 NONAME ; class QAbstractXmlNodeModel const * QXmlNodeModelIndex::model(void) const
+	?name@QXmlNodeModelIndex@@QBE?AVQXmlName@@XZ @ 175 NONAME ; class QXmlName QXmlNodeModelIndex::name(void) const
+	?namePool@QSimpleXmlNodeModel@@QBEAAVQXmlNamePool@@XZ @ 176 NONAME ; class QXmlNamePool & QSimpleXmlNodeModel::namePool(void) const
+	?namePool@QXmlQuery@@QBE?AVQXmlNamePool@@XZ @ 177 NONAME ; class QXmlNamePool QXmlQuery::namePool(void) const
+	?namePool@QXmlSchema@@QBE?AVQXmlNamePool@@XZ @ 178 NONAME ; class QXmlNamePool QXmlSchema::namePool(void) const
+	?namePool@QXmlSchemaValidator@@QBE?AVQXmlNamePool@@XZ @ 179 NONAME ; class QXmlNamePool QXmlSchemaValidator::namePool(void) const
+	?namespaceBinding@QXmlSerializer@@UAEXABVQXmlName@@@Z @ 180 NONAME ; void QXmlSerializer::namespaceBinding(class QXmlName const &)
+	?namespaceBindings@QSimpleXmlNodeModel@@UBE?AV?$QVector@VQXmlName@@@@ABVQXmlNodeModelIndex@@@Z @ 181 NONAME ; class QVector<class QXmlName> QSimpleXmlNodeModel::namespaceBindings(class QXmlNodeModelIndex const &) const
+	?namespaceBindings@QXmlNodeModelIndex@@QBE?AV?$QVector@VQXmlName@@@@XZ @ 182 NONAME ; class QVector<class QXmlName> QXmlNodeModelIndex::namespaceBindings(void) const
+	?namespaceForPrefix@QAbstractXmlNodeModel@@UBEFABVQXmlNodeModelIndex@@F@Z @ 183 NONAME ; short QAbstractXmlNodeModel::namespaceForPrefix(class QXmlNodeModelIndex const &, short) const
+	?namespaceForPrefix@QXmlNodeModelIndex@@QBEFF@Z @ 184 NONAME ; short QXmlNodeModelIndex::namespaceForPrefix(short) const
+	?namespaceURI@QXmlName@@QBEFXZ @ 185 NONAME ; short QXmlName::namespaceURI(void) const
+	?namespaceUri@QXmlName@@QBE?AVQString@@ABVQXmlNamePool@@@Z @ 186 NONAME ; class QString QXmlName::namespaceUri(class QXmlNamePool const &) const
+	?networkAccessManager@QXmlQuery@@QBEPAVQNetworkAccessManager@@XZ @ 187 NONAME ; class QNetworkAccessManager * QXmlQuery::networkAccessManager(void) const
+	?networkAccessManager@QXmlSchema@@QBEPAVQNetworkAccessManager@@XZ @ 188 NONAME ; class QNetworkAccessManager * QXmlSchema::networkAccessManager(void) const
+	?networkAccessManager@QXmlSchemaValidator@@QBEPAVQNetworkAccessManager@@XZ @ 189 NONAME ; class QNetworkAccessManager * QXmlSchemaValidator::networkAccessManager(void) const
+	?next@QXmlResultItems@@QAE?AVQXmlItem@@XZ @ 190 NONAME ; class QXmlItem QXmlResultItems::next(void)
+	?nodesByIdref@QSimpleXmlNodeModel@@UBE?AV?$QVector@VQXmlNodeModelIndex@@@@ABVQXmlName@@@Z @ 191 NONAME ; class QVector<class QXmlNodeModelIndex> QSimpleXmlNodeModel::nodesByIdref(class QXmlName const &) const
+	?outputDevice@QXmlSerializer@@QBEPAVQIODevice@@XZ @ 192 NONAME ; class QIODevice * QXmlSerializer::outputDevice(void) const
+	?prefix@QXmlName@@QBE?AVQString@@ABVQXmlNamePool@@@Z @ 193 NONAME ; class QString QXmlName::prefix(class QXmlNamePool const &) const
+	?prefix@QXmlName@@QBEFXZ @ 194 NONAME ; short QXmlName::prefix(void) const
+	?processingInstruction@QXmlFormatter@@UAEXABVQXmlName@@ABVQString@@@Z @ 195 NONAME ; void QXmlFormatter::processingInstruction(class QXmlName const &, class QString const &)
+	?processingInstruction@QXmlSerializer@@UAEXABVQXmlName@@ABVQString@@@Z @ 196 NONAME ; void QXmlSerializer::processingInstruction(class QXmlName const &, class QString const &)
+	?qHash@@YAIABVQSourceLocation@@@Z @ 197 NONAME ; unsigned int qHash(class QSourceLocation const &)
+	?qHash@@YAIABVQXmlName@@@Z @ 198 NONAME ; unsigned int qHash(class QXmlName const &)
+	?qHash@@YAIABVQXmlNodeModelIndex@@@Z @ 199 NONAME ; unsigned int qHash(class QXmlNodeModelIndex const &)
+	?qt_metacall@QAbstractMessageHandler@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 200 NONAME ; int QAbstractMessageHandler::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?qt_metacall@QAbstractUriResolver@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 201 NONAME ; int QAbstractUriResolver::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?qt_metacast@QAbstractMessageHandler@@UAEPAXPBD@Z @ 202 NONAME ; void * QAbstractMessageHandler::qt_metacast(char const *)
+	?qt_metacast@QAbstractUriResolver@@UAEPAXPBD@Z @ 203 NONAME ; void * QAbstractUriResolver::qt_metacast(char const *)
+	?queryLanguage@QXmlQuery@@QBE?AW4QueryLanguage@1@XZ @ 204 NONAME ; enum QXmlQuery::QueryLanguage QXmlQuery::queryLanguage(void) const
+	?reset@QXmlNodeModelIndex@@QAEXXZ @ 205 NONAME ; void QXmlNodeModelIndex::reset(void)
+	?root@QXmlNodeModelIndex@@QBE?AV1@XZ @ 206 NONAME ; class QXmlNodeModelIndex QXmlNodeModelIndex::root(void) const
+	?schema@QXmlSchemaValidator@@QBE?AVQXmlSchema@@XZ @ 207 NONAME ; class QXmlSchema QXmlSchemaValidator::schema(void) const
+	?sendAsNode@QAbstractXmlReceiver@@IAEXABVItem@QPatternist@@@Z @ 208 NONAME ; void QAbstractXmlReceiver::sendAsNode(class QPatternist::Item const &)
+	?sendNamespaces@QAbstractXmlNodeModel@@UBEXABVQXmlNodeModelIndex@@PAVQAbstractXmlReceiver@@@Z @ 209 NONAME ; void QAbstractXmlNodeModel::sendNamespaces(class QXmlNodeModelIndex const &, class QAbstractXmlReceiver *) const
+	?sendNamespaces@QXmlNodeModelIndex@@QBEXPAVQAbstractXmlReceiver@@@Z @ 210 NONAME ; void QXmlNodeModelIndex::sendNamespaces(class QAbstractXmlReceiver *) const
+	?sequencedTypedValue@QAbstractXmlNodeModel@@UBE?AV?$QExplicitlySharedDataPointer@V?$QAbstractXmlForwardIterator@VItem@QPatternist@@@@@@ABVQXmlNodeModelIndex@@@Z @ 211 NONAME ; class QExplicitlySharedDataPointer<class QAbstractXmlForwardIterator<class QPatternist::Item> > QAbstractXmlNodeModel::sequencedTypedValue(class QXmlNodeModelIndex const &) const
+	?sequencedTypedValue@QXmlNodeModelIndex@@QBE?AV?$QExplicitlySharedDataPointer@V?$QAbstractXmlForwardIterator@VItem@QPatternist@@@@@@XZ @ 212 NONAME ; class QExplicitlySharedDataPointer<class QAbstractXmlForwardIterator<class QPatternist::Item> > QXmlNodeModelIndex::sequencedTypedValue(void) const
+	?setCodec@QXmlSerializer@@QAEXPBVQTextCodec@@@Z @ 213 NONAME ; void QXmlSerializer::setCodec(class QTextCodec const *)
+	?setColumn@QSourceLocation@@QAEX_J@Z @ 214 NONAME ; void QSourceLocation::setColumn(long long)
+	?setFocus@QXmlQuery@@QAEXABVQXmlItem@@@Z @ 215 NONAME ; void QXmlQuery::setFocus(class QXmlItem const &)
+	?setFocus@QXmlQuery@@QAE_NABVQString@@@Z @ 216 NONAME ; bool QXmlQuery::setFocus(class QString const &)
+	?setFocus@QXmlQuery@@QAE_NABVQUrl@@@Z @ 217 NONAME ; bool QXmlQuery::setFocus(class QUrl const &)
+	?setFocus@QXmlQuery@@QAE_NPAVQIODevice@@@Z @ 218 NONAME ; bool QXmlQuery::setFocus(class QIODevice *)
+	?setIndentationDepth@QXmlFormatter@@QAEXH@Z @ 219 NONAME ; void QXmlFormatter::setIndentationDepth(int)
+	?setInitialTemplateName@QXmlQuery@@QAEXABVQString@@@Z @ 220 NONAME ; void QXmlQuery::setInitialTemplateName(class QString const &)
+	?setInitialTemplateName@QXmlQuery@@QAEXABVQXmlName@@@Z @ 221 NONAME ; void QXmlQuery::setInitialTemplateName(class QXmlName const &)
+	?setLine@QSourceLocation@@QAEX_J@Z @ 222 NONAME ; void QSourceLocation::setLine(long long)
+	?setLocalName@QXmlName@@QAEXF@Z @ 223 NONAME ; void QXmlName::setLocalName(short)
+	?setMessageHandler@QXmlQuery@@QAEXPAVQAbstractMessageHandler@@@Z @ 224 NONAME ; void QXmlQuery::setMessageHandler(class QAbstractMessageHandler *)
+	?setMessageHandler@QXmlSchema@@QAEXPAVQAbstractMessageHandler@@@Z @ 225 NONAME ; void QXmlSchema::setMessageHandler(class QAbstractMessageHandler *)
+	?setMessageHandler@QXmlSchemaValidator@@QAEXPAVQAbstractMessageHandler@@@Z @ 226 NONAME ; void QXmlSchemaValidator::setMessageHandler(class QAbstractMessageHandler *)
+	?setNamespaceURI@QXmlName@@QAEXF@Z @ 227 NONAME ; void QXmlName::setNamespaceURI(short)
+	?setNetworkAccessManager@QXmlQuery@@QAEXPAVQNetworkAccessManager@@@Z @ 228 NONAME ; void QXmlQuery::setNetworkAccessManager(class QNetworkAccessManager *)
+	?setNetworkAccessManager@QXmlSchema@@QAEXPAVQNetworkAccessManager@@@Z @ 229 NONAME ; void QXmlSchema::setNetworkAccessManager(class QNetworkAccessManager *)
+	?setNetworkAccessManager@QXmlSchemaValidator@@QAEXPAVQNetworkAccessManager@@@Z @ 230 NONAME ; void QXmlSchemaValidator::setNetworkAccessManager(class QNetworkAccessManager *)
+	?setPrefix@QXmlName@@QAEXF@Z @ 231 NONAME ; void QXmlName::setPrefix(short)
+	?setQuery@QXmlQuery@@QAEXABVQString@@ABVQUrl@@@Z @ 232 NONAME ; void QXmlQuery::setQuery(class QString const &, class QUrl const &)
+	?setQuery@QXmlQuery@@QAEXABVQUrl@@0@Z @ 233 NONAME ; void QXmlQuery::setQuery(class QUrl const &, class QUrl const &)
+	?setQuery@QXmlQuery@@QAEXPAVQIODevice@@ABVQUrl@@@Z @ 234 NONAME ; void QXmlQuery::setQuery(class QIODevice *, class QUrl const &)
+	?setSchema@QXmlSchemaValidator@@QAEXABVQXmlSchema@@@Z @ 235 NONAME ; void QXmlSchemaValidator::setSchema(class QXmlSchema const &)
+	?setUri@QSourceLocation@@QAEXABVQUrl@@@Z @ 236 NONAME ; void QSourceLocation::setUri(class QUrl const &)
+	?setUriResolver@QXmlQuery@@QAEXPBVQAbstractUriResolver@@@Z @ 237 NONAME ; void QXmlQuery::setUriResolver(class QAbstractUriResolver const *)
+	?setUriResolver@QXmlSchema@@QAEXPBVQAbstractUriResolver@@@Z @ 238 NONAME ; void QXmlSchema::setUriResolver(class QAbstractUriResolver const *)
+	?setUriResolver@QXmlSchemaValidator@@QAEXPBVQAbstractUriResolver@@@Z @ 239 NONAME ; void QXmlSchemaValidator::setUriResolver(class QAbstractUriResolver const *)
+	?sourceLocation@QAbstractXmlNodeModel@@QBE?AVQSourceLocation@@ABVQXmlNodeModelIndex@@@Z @ 240 NONAME ; class QSourceLocation QAbstractXmlNodeModel::sourceLocation(class QXmlNodeModelIndex const &) const
+	?startContent@QXmlSerializer@@AAEXXZ @ 241 NONAME ; void QXmlSerializer::startContent(void)
+	?startDocument@QXmlFormatter@@UAEXXZ @ 242 NONAME ; void QXmlFormatter::startDocument(void)
+	?startDocument@QXmlSerializer@@UAEXXZ @ 243 NONAME ; void QXmlSerializer::startDocument(void)
+	?startElement@QXmlFormatter@@UAEXABVQXmlName@@@Z @ 244 NONAME ; void QXmlFormatter::startElement(class QXmlName const &)
+	?startElement@QXmlSerializer@@UAEXABVQXmlName@@@Z @ 245 NONAME ; void QXmlSerializer::startElement(class QXmlName const &)
+	?startFormattingContent@QXmlFormatter@@AAEXXZ @ 246 NONAME ; void QXmlFormatter::startFormattingContent(void)
+	?startOfSequence@QXmlFormatter@@UAEXXZ @ 247 NONAME ; void QXmlFormatter::startOfSequence(void)
+	?startOfSequence@QXmlSerializer@@UAEXXZ @ 248 NONAME ; void QXmlSerializer::startOfSequence(void)
+	?stringValue@QSimpleXmlNodeModel@@UBE?AVQString@@ABVQXmlNodeModelIndex@@@Z @ 249 NONAME ; class QString QSimpleXmlNodeModel::stringValue(class QXmlNodeModelIndex const &) const
+	?stringValue@QXmlNodeModelIndex@@QBE?AVQString@@XZ @ 250 NONAME ; class QString QXmlNodeModelIndex::stringValue(void) const
+	?toAtomicValue@QXmlItem@@QBE?AVQVariant@@XZ @ 251 NONAME ; class QVariant QXmlItem::toAtomicValue(void) const
+	?toClarkName@QXmlName@@QBE?AVQString@@ABVQXmlNamePool@@@Z @ 252 NONAME ; class QString QXmlName::toClarkName(class QXmlNamePool const &) const
+	?toNodeModelIndex@QXmlItem@@QBE?AVQXmlNodeModelIndex@@XZ @ 253 NONAME ; class QXmlNodeModelIndex QXmlItem::toNodeModelIndex(void) const
+	?tr@QAbstractMessageHandler@@SA?AVQString@@PBD0@Z @ 254 NONAME ; class QString QAbstractMessageHandler::tr(char const *, char const *)
+	?tr@QAbstractMessageHandler@@SA?AVQString@@PBD0H@Z @ 255 NONAME ; class QString QAbstractMessageHandler::tr(char const *, char const *, int)
+	?tr@QAbstractUriResolver@@SA?AVQString@@PBD0@Z @ 256 NONAME ; class QString QAbstractUriResolver::tr(char const *, char const *)
+	?tr@QAbstractUriResolver@@SA?AVQString@@PBD0H@Z @ 257 NONAME ; class QString QAbstractUriResolver::tr(char const *, char const *, int)
+	?trUtf8@QAbstractMessageHandler@@SA?AVQString@@PBD0@Z @ 258 NONAME ; class QString QAbstractMessageHandler::trUtf8(char const *, char const *)
+	?trUtf8@QAbstractMessageHandler@@SA?AVQString@@PBD0H@Z @ 259 NONAME ; class QString QAbstractMessageHandler::trUtf8(char const *, char const *, int)
+	?trUtf8@QAbstractUriResolver@@SA?AVQString@@PBD0@Z @ 260 NONAME ; class QString QAbstractUriResolver::trUtf8(char const *, char const *)
+	?trUtf8@QAbstractUriResolver@@SA?AVQString@@PBD0H@Z @ 261 NONAME ; class QString QAbstractUriResolver::trUtf8(char const *, char const *, int)
+	?type@QAbstractXmlNodeModel@@UBE?AV?$QExplicitlySharedDataPointer@VItemType@QPatternist@@@@ABVQXmlNodeModelIndex@@@Z @ 262 NONAME ; class QExplicitlySharedDataPointer<class QPatternist::ItemType> QAbstractXmlNodeModel::type(class QXmlNodeModelIndex const &) const
+	?type@QXmlNodeModelIndex@@QBE?AV?$QExplicitlySharedDataPointer@VItemType@QPatternist@@@@XZ @ 263 NONAME ; class QExplicitlySharedDataPointer<class QPatternist::ItemType> QXmlNodeModelIndex::type(void) const
+	?uri@QSourceLocation@@QBE?AVQUrl@@XZ @ 264 NONAME ; class QUrl QSourceLocation::uri(void) const
+	?uriResolver@QXmlQuery@@QBEPBVQAbstractUriResolver@@XZ @ 265 NONAME ; class QAbstractUriResolver const * QXmlQuery::uriResolver(void) const
+	?uriResolver@QXmlSchema@@QBEPBVQAbstractUriResolver@@XZ @ 266 NONAME ; class QAbstractUriResolver const * QXmlSchema::uriResolver(void) const
+	?uriResolver@QXmlSchemaValidator@@QBEPBVQAbstractUriResolver@@XZ @ 267 NONAME ; class QAbstractUriResolver const * QXmlSchemaValidator::uriResolver(void) const
+	?validate@QXmlSchemaValidator@@QBE_NABVQByteArray@@ABVQUrl@@@Z @ 268 NONAME ; bool QXmlSchemaValidator::validate(class QByteArray const &, class QUrl const &) const
+	?validate@QXmlSchemaValidator@@QBE_NABVQUrl@@@Z @ 269 NONAME ; bool QXmlSchemaValidator::validate(class QUrl const &) const
+	?validate@QXmlSchemaValidator@@QBE_NPAVQIODevice@@ABVQUrl@@@Z @ 270 NONAME ; bool QXmlSchemaValidator::validate(class QIODevice *, class QUrl const &) const
+	?whitespaceOnly@QAbstractXmlReceiver@@UAEXABVQStringRef@@@Z @ 271 NONAME ; void QAbstractXmlReceiver::whitespaceOnly(class QStringRef const &)
+	?write@QXmlSerializer@@AAEXABVQString@@@Z @ 272 NONAME ; void QXmlSerializer::write(class QString const &)
+	?write@QXmlSerializer@@AAEXABVQXmlName@@@Z @ 273 NONAME ; void QXmlSerializer::write(class QXmlName const &)
+	?write@QXmlSerializer@@AAEXPBD@Z @ 274 NONAME ; void QXmlSerializer::write(char const *)
+	?writeEscaped@QXmlSerializer@@AAEXABVQString@@@Z @ 275 NONAME ; void QXmlSerializer::writeEscaped(class QString const &)
+	?writeEscapedAttribute@QXmlSerializer@@AAEXABVQString@@@Z @ 276 NONAME ; void QXmlSerializer::writeEscapedAttribute(class QString const &)
+	?staticMetaObject@QAbstractMessageHandler@@2UQMetaObject@@B @ 277 NONAME ; struct QMetaObject const QAbstractMessageHandler::staticMetaObject
+	?staticMetaObject@QAbstractUriResolver@@2UQMetaObject@@B @ 278 NONAME ; struct QMetaObject const QAbstractUriResolver::staticMetaObject
+
diff --git a/src/s60installs/eabi/QtCoreu.def b/src/s60installs/eabi/QtCoreu.def
index 2ecc48f..487d989 100644
--- a/src/s60installs/eabi/QtCoreu.def
+++ b/src/s60installs/eabi/QtCoreu.def
@@ -2136,7 +2136,7 @@ EXPORTS
 	_ZN9QHashData11shared_nullE @ 2135 NONAME DATA 32
 	_ZN9QHashData12allocateNodeEv @ 2136 NONAME
 	_ZN9QHashData12previousNodeEPNS_4NodeE @ 2137 NONAME
-	_ZN9QHashData13detach_helperEPFvPNS_4NodeEPvEPFvS1_Ei @ 2138 NONAME
+	_ZN9QHashData13detach_helperEPFvPNS_4NodeEPvEPFvS1_Ei @ 2138 NONAME ABSENT
 	_ZN9QHashData13detach_helperEPFvPNS_4NodeEPvEi @ 2139 NONAME
 	_ZN9QHashData14destroyAndFreeEv @ 2140 NONAME
 	_ZN9QHashData6rehashEi @ 2141 NONAME
@@ -3577,4 +3577,27 @@ EXPORTS
 	uncompress @ 3576 NONAME
 	zError @ 3577 NONAME
 	zlibVersion @ 3578 NONAME
+	_Z12qFreeAlignedPv @ 3579 NONAME
+	_Z14qMallocAlignedjj @ 3580 NONAME
+	_Z15qReallocAlignedPvjjj @ 3581 NONAME
+	_ZN11QVectorData10reallocateEPS_iii @ 3582 NONAME
+	_ZN11QVectorData4freeEPS_i @ 3583 NONAME
+	_ZN11QVectorData8allocateEii @ 3584 NONAME
+	_ZN12QLibraryInfo9buildDateEv @ 3585 NONAME
+	_ZN20QContiguousCacheData4freeEPS_ @ 3586 NONAME
+	_ZN20QContiguousCacheData8allocateEii @ 3587 NONAME
+	_ZN20QStateMachinePrivate12toFinalStateEP14QAbstractState @ 3588 NONAME
+	_ZN20QStateMachinePrivate14toHistoryStateEP14QAbstractState @ 3589 NONAME
+	_ZN20QStateMachinePrivate15toStandardStateEP14QAbstractState @ 3590 NONAME
+	_ZN20QStateMachinePrivate15toStandardStateEPK14QAbstractState @ 3591 NONAME
+	_ZN20QStateMachinePrivate17postExternalEventEP6QEvent @ 3592 NONAME
+	_ZN20QStateMachinePrivate17postInternalEventEP6QEvent @ 3593 NONAME
+	_ZN20QStateMachinePrivate20dequeueExternalEventEv @ 3594 NONAME
+	_ZN20QStateMachinePrivate20dequeueInternalEventEv @ 3595 NONAME
+	_ZN20QStateMachinePrivate25isExternalEventQueueEmptyEv @ 3596 NONAME
+	_ZN20QStateMachinePrivate25isInternalEventQueueEmptyEv @ 3597 NONAME
+	_ZN8QMapData10createDataEi @ 3598 NONAME
+	_ZN8QMapData11node_createEPPNS_4NodeEii @ 3599 NONAME
+	_ZN9QHashData12allocateNodeEi @ 3600 NONAME
+	_ZN9QHashData14detach_helper2EPFvPNS_4NodeEPvEPFvS1_Eii @ 3601 NONAME
 
diff --git a/src/s60installs/eabi/QtGuiu.def b/src/s60installs/eabi/QtGuiu.def
index 2d1c42f..bf1908a 100644
--- a/src/s60installs/eabi/QtGuiu.def
+++ b/src/s60installs/eabi/QtGuiu.def
@@ -4060,7 +4060,7 @@ EXPORTS
 	_ZN17QPixmapBlurFilter11setBlurHintEN2Qt10RenderHintE @ 4059 NONAME
 	_ZN17QPixmapBlurFilter16staticMetaObjectE @ 4060 NONAME DATA 16
 	_ZN17QPixmapBlurFilter19getStaticMetaObjectEv @ 4061 NONAME
-	_ZN17QPixmapBlurFilter9setRadiusEi @ 4062 NONAME
+	_ZN17QPixmapBlurFilter9setRadiusEi @ 4062 NONAME ABSENT
 	_ZN17QPixmapBlurFilterC1EP7QObject @ 4063 NONAME
 	_ZN17QPixmapBlurFilterC2EP7QObject @ 4064 NONAME
 	_ZN17QPixmapBlurFilterD0Ev @ 4065 NONAME
@@ -4412,10 +4412,10 @@ EXPORTS
 	_ZN19QGraphicsBlurEffect11qt_metacallEN11QMetaObject4CallEiPPv @ 4411 NONAME
 	_ZN19QGraphicsBlurEffect11qt_metacastEPKc @ 4412 NONAME
 	_ZN19QGraphicsBlurEffect11setBlurHintEN2Qt10RenderHintE @ 4413 NONAME
-	_ZN19QGraphicsBlurEffect13setBlurRadiusEi @ 4414 NONAME
+	_ZN19QGraphicsBlurEffect13setBlurRadiusEi @ 4414 NONAME ABSENT
 	_ZN19QGraphicsBlurEffect15blurHintChangedEN2Qt10RenderHintE @ 4415 NONAME
 	_ZN19QGraphicsBlurEffect16staticMetaObjectE @ 4416 NONAME DATA 16
-	_ZN19QGraphicsBlurEffect17blurRadiusChangedEi @ 4417 NONAME
+	_ZN19QGraphicsBlurEffect17blurRadiusChangedEi @ 4417 NONAME ABSENT
 	_ZN19QGraphicsBlurEffect19getStaticMetaObjectEv @ 4418 NONAME
 	_ZN19QGraphicsBlurEffect4drawEP8QPainterP21QGraphicsEffectSource @ 4419 NONAME
 	_ZN19QGraphicsBlurEffectC1EP7QObject @ 4420 NONAME
@@ -4625,24 +4625,24 @@ EXPORTS
 	_ZN19QToolBarChangeEventD0Ev @ 4624 NONAME
 	_ZN19QToolBarChangeEventD1Ev @ 4625 NONAME
 	_ZN19QToolBarChangeEventD2Ev @ 4626 NONAME
-	_ZN20QGraphicsBloomEffect11qt_metacallEN11QMetaObject4CallEiPPv @ 4627 NONAME
-	_ZN20QGraphicsBloomEffect11qt_metacastEPKc @ 4628 NONAME
-	_ZN20QGraphicsBloomEffect11setBlurHintEN2Qt10RenderHintE @ 4629 NONAME
-	_ZN20QGraphicsBloomEffect11setStrengthEf @ 4630 NONAME
-	_ZN20QGraphicsBloomEffect13setBlurRadiusEi @ 4631 NONAME
-	_ZN20QGraphicsBloomEffect13setBrightnessEi @ 4632 NONAME
-	_ZN20QGraphicsBloomEffect15blurHintChangedEN2Qt10RenderHintE @ 4633 NONAME
-	_ZN20QGraphicsBloomEffect15strengthChangedEf @ 4634 NONAME
-	_ZN20QGraphicsBloomEffect16staticMetaObjectE @ 4635 NONAME DATA 16
-	_ZN20QGraphicsBloomEffect17blurRadiusChangedEi @ 4636 NONAME
-	_ZN20QGraphicsBloomEffect17brightnessChangedEi @ 4637 NONAME
-	_ZN20QGraphicsBloomEffect19getStaticMetaObjectEv @ 4638 NONAME
-	_ZN20QGraphicsBloomEffect4drawEP8QPainterP21QGraphicsEffectSource @ 4639 NONAME
-	_ZN20QGraphicsBloomEffectC1EP7QObject @ 4640 NONAME
-	_ZN20QGraphicsBloomEffectC2EP7QObject @ 4641 NONAME
-	_ZN20QGraphicsBloomEffectD0Ev @ 4642 NONAME
-	_ZN20QGraphicsBloomEffectD1Ev @ 4643 NONAME
-	_ZN20QGraphicsBloomEffectD2Ev @ 4644 NONAME
+	_ZN20QGraphicsBloomEffect11qt_metacallEN11QMetaObject4CallEiPPv @ 4627 NONAME ABSENT
+	_ZN20QGraphicsBloomEffect11qt_metacastEPKc @ 4628 NONAME ABSENT
+	_ZN20QGraphicsBloomEffect11setBlurHintEN2Qt10RenderHintE @ 4629 NONAME ABSENT
+	_ZN20QGraphicsBloomEffect11setStrengthEf @ 4630 NONAME ABSENT
+	_ZN20QGraphicsBloomEffect13setBlurRadiusEi @ 4631 NONAME ABSENT
+	_ZN20QGraphicsBloomEffect13setBrightnessEi @ 4632 NONAME ABSENT
+	_ZN20QGraphicsBloomEffect15blurHintChangedEN2Qt10RenderHintE @ 4633 NONAME ABSENT
+	_ZN20QGraphicsBloomEffect15strengthChangedEf @ 4634 NONAME ABSENT
+	_ZN20QGraphicsBloomEffect16staticMetaObjectE @ 4635 NONAME DATA 16 ABSENT
+	_ZN20QGraphicsBloomEffect17blurRadiusChangedEi @ 4636 NONAME ABSENT
+	_ZN20QGraphicsBloomEffect17brightnessChangedEi @ 4637 NONAME ABSENT
+	_ZN20QGraphicsBloomEffect19getStaticMetaObjectEv @ 4638 NONAME ABSENT
+	_ZN20QGraphicsBloomEffect4drawEP8QPainterP21QGraphicsEffectSource @ 4639 NONAME ABSENT
+	_ZN20QGraphicsBloomEffectC1EP7QObject @ 4640 NONAME ABSENT
+	_ZN20QGraphicsBloomEffectC2EP7QObject @ 4641 NONAME ABSENT
+	_ZN20QGraphicsBloomEffectD0Ev @ 4642 NONAME ABSENT
+	_ZN20QGraphicsBloomEffectD1Ev @ 4643 NONAME ABSENT
+	_ZN20QGraphicsBloomEffectD2Ev @ 4644 NONAME ABSENT
 	_ZN20QGraphicsEllipseItem12setExtensionEN13QGraphicsItem9ExtensionERK8QVariant @ 4645 NONAME
 	_ZN20QGraphicsEllipseItem12setSpanAngleEi @ 4646 NONAME
 	_ZN20QGraphicsEllipseItem13setStartAngleEi @ 4647 NONAME
@@ -5082,18 +5082,18 @@ EXPORTS
 	_ZN23QGraphicsColorizeEffectD0Ev @ 5081 NONAME
 	_ZN23QGraphicsColorizeEffectD1Ev @ 5082 NONAME
 	_ZN23QGraphicsColorizeEffectD2Ev @ 5083 NONAME
-	_ZN23QGraphicsPixelizeEffect11qt_metacallEN11QMetaObject4CallEiPPv @ 5084 NONAME
-	_ZN23QGraphicsPixelizeEffect11qt_metacastEPKc @ 5085 NONAME
-	_ZN23QGraphicsPixelizeEffect12setPixelSizeEi @ 5086 NONAME
-	_ZN23QGraphicsPixelizeEffect16pixelSizeChangedEi @ 5087 NONAME
-	_ZN23QGraphicsPixelizeEffect16staticMetaObjectE @ 5088 NONAME DATA 16
-	_ZN23QGraphicsPixelizeEffect19getStaticMetaObjectEv @ 5089 NONAME
-	_ZN23QGraphicsPixelizeEffect4drawEP8QPainterP21QGraphicsEffectSource @ 5090 NONAME
-	_ZN23QGraphicsPixelizeEffectC1EP7QObject @ 5091 NONAME
-	_ZN23QGraphicsPixelizeEffectC2EP7QObject @ 5092 NONAME
-	_ZN23QGraphicsPixelizeEffectD0Ev @ 5093 NONAME
-	_ZN23QGraphicsPixelizeEffectD1Ev @ 5094 NONAME
-	_ZN23QGraphicsPixelizeEffectD2Ev @ 5095 NONAME
+	_ZN23QGraphicsPixelizeEffect11qt_metacallEN11QMetaObject4CallEiPPv @ 5084 NONAME ABSENT
+	_ZN23QGraphicsPixelizeEffect11qt_metacastEPKc @ 5085 NONAME ABSENT
+	_ZN23QGraphicsPixelizeEffect12setPixelSizeEi @ 5086 NONAME ABSENT
+	_ZN23QGraphicsPixelizeEffect16pixelSizeChangedEi @ 5087 NONAME ABSENT
+	_ZN23QGraphicsPixelizeEffect16staticMetaObjectE @ 5088 NONAME DATA 16 ABSENT
+	_ZN23QGraphicsPixelizeEffect19getStaticMetaObjectEv @ 5089 NONAME ABSENT
+	_ZN23QGraphicsPixelizeEffect4drawEP8QPainterP21QGraphicsEffectSource @ 5090 NONAME ABSENT
+	_ZN23QGraphicsPixelizeEffectC1EP7QObject @ 5091 NONAME ABSENT
+	_ZN23QGraphicsPixelizeEffectC2EP7QObject @ 5092 NONAME ABSENT
+	_ZN23QGraphicsPixelizeEffectD0Ev @ 5093 NONAME ABSENT
+	_ZN23QGraphicsPixelizeEffectD1Ev @ 5094 NONAME ABSENT
+	_ZN23QGraphicsPixelizeEffectD2Ev @ 5095 NONAME ABSENT
 	_ZN23QGraphicsSceneHelpEvent11setScenePosERK7QPointF @ 5096 NONAME
 	_ZN23QGraphicsSceneHelpEvent12setScreenPosERK6QPoint @ 5097 NONAME
 	_ZN23QGraphicsSceneHelpEventC1EN6QEvent4TypeE @ 5098 NONAME
@@ -5127,7 +5127,7 @@ EXPORTS
 	_ZN23QPaintBufferSignalProxy8instanceEv @ 5126 NONAME
 	_ZN23QPixmapDropShadowFilter11qt_metacallEN11QMetaObject4CallEiPPv @ 5127 NONAME
 	_ZN23QPixmapDropShadowFilter11qt_metacastEPKc @ 5128 NONAME
-	_ZN23QPixmapDropShadowFilter13setBlurRadiusEi @ 5129 NONAME
+	_ZN23QPixmapDropShadowFilter13setBlurRadiusEi @ 5129 NONAME ABSENT
 	_ZN23QPixmapDropShadowFilter16staticMetaObjectE @ 5130 NONAME DATA 16
 	_ZN23QPixmapDropShadowFilter19getStaticMetaObjectEv @ 5131 NONAME
 	_ZN23QPixmapDropShadowFilter8setColorERK6QColor @ 5132 NONAME
@@ -5161,18 +5161,18 @@ EXPORTS
 	_ZN23QWindowStateChangeEventD0Ev @ 5160 NONAME
 	_ZN23QWindowStateChangeEventD1Ev @ 5161 NONAME
 	_ZN23QWindowStateChangeEventD2Ev @ 5162 NONAME
-	_ZN24QGraphicsGrayscaleEffect11qt_metacallEN11QMetaObject4CallEiPPv @ 5163 NONAME
-	_ZN24QGraphicsGrayscaleEffect11qt_metacastEPKc @ 5164 NONAME
-	_ZN24QGraphicsGrayscaleEffect11setStrengthEf @ 5165 NONAME
-	_ZN24QGraphicsGrayscaleEffect15strengthChangedEf @ 5166 NONAME
-	_ZN24QGraphicsGrayscaleEffect16staticMetaObjectE @ 5167 NONAME DATA 16
-	_ZN24QGraphicsGrayscaleEffect19getStaticMetaObjectEv @ 5168 NONAME
-	_ZN24QGraphicsGrayscaleEffect4drawEP8QPainterP21QGraphicsEffectSource @ 5169 NONAME
-	_ZN24QGraphicsGrayscaleEffectC1EP7QObject @ 5170 NONAME
-	_ZN24QGraphicsGrayscaleEffectC2EP7QObject @ 5171 NONAME
-	_ZN24QGraphicsGrayscaleEffectD0Ev @ 5172 NONAME
-	_ZN24QGraphicsGrayscaleEffectD1Ev @ 5173 NONAME
-	_ZN24QGraphicsGrayscaleEffectD2Ev @ 5174 NONAME
+	_ZN24QGraphicsGrayscaleEffect11qt_metacallEN11QMetaObject4CallEiPPv @ 5163 NONAME ABSENT
+	_ZN24QGraphicsGrayscaleEffect11qt_metacastEPKc @ 5164 NONAME ABSENT
+	_ZN24QGraphicsGrayscaleEffect11setStrengthEf @ 5165 NONAME ABSENT
+	_ZN24QGraphicsGrayscaleEffect15strengthChangedEf @ 5166 NONAME ABSENT
+	_ZN24QGraphicsGrayscaleEffect16staticMetaObjectE @ 5167 NONAME DATA 16 ABSENT
+	_ZN24QGraphicsGrayscaleEffect19getStaticMetaObjectEv @ 5168 NONAME ABSENT
+	_ZN24QGraphicsGrayscaleEffect4drawEP8QPainterP21QGraphicsEffectSource @ 5169 NONAME ABSENT
+	_ZN24QGraphicsGrayscaleEffectC1EP7QObject @ 5170 NONAME ABSENT
+	_ZN24QGraphicsGrayscaleEffectC2EP7QObject @ 5171 NONAME ABSENT
+	_ZN24QGraphicsGrayscaleEffectD0Ev @ 5172 NONAME ABSENT
+	_ZN24QGraphicsGrayscaleEffectD1Ev @ 5173 NONAME ABSENT
+	_ZN24QGraphicsGrayscaleEffectD2Ev @ 5174 NONAME ABSENT
 	_ZN24QGraphicsSceneHoverEvent10setLastPosERK7QPointF @ 5175 NONAME
 	_ZN24QGraphicsSceneHoverEvent11setScenePosERK7QPointF @ 5176 NONAME
 	_ZN24QGraphicsSceneHoverEvent12setModifiersE6QFlagsIN2Qt16KeyboardModifierEE @ 5177 NONAME
@@ -5276,9 +5276,9 @@ EXPORTS
 	_ZN25QGraphicsDropShadowEffect11qt_metacastEPKc @ 5275 NONAME
 	_ZN25QGraphicsDropShadowEffect12colorChangedERK6QColor @ 5276 NONAME
 	_ZN25QGraphicsDropShadowEffect13offsetChangedERK7QPointF @ 5277 NONAME
-	_ZN25QGraphicsDropShadowEffect13setBlurRadiusEi @ 5278 NONAME
+	_ZN25QGraphicsDropShadowEffect13setBlurRadiusEi @ 5278 NONAME ABSENT
 	_ZN25QGraphicsDropShadowEffect16staticMetaObjectE @ 5279 NONAME DATA 16
-	_ZN25QGraphicsDropShadowEffect17blurRadiusChangedEi @ 5280 NONAME
+	_ZN25QGraphicsDropShadowEffect17blurRadiusChangedEi @ 5280 NONAME ABSENT
 	_ZN25QGraphicsDropShadowEffect19getStaticMetaObjectEv @ 5281 NONAME
 	_ZN25QGraphicsDropShadowEffect4drawEP8QPainterP21QGraphicsEffectSource @ 5282 NONAME
 	_ZN25QGraphicsDropShadowEffect8setColorERK6QColor @ 5283 NONAME
@@ -8817,7 +8817,7 @@ EXPORTS
 	_ZNK14QWidgetPrivate13isAboutToShowEv @ 8816 NONAME
 	_ZNK14QWidgetPrivate13paintOnScreenEv @ 8817 NONAME
 	_ZNK14QWidgetPrivate14childAt_helperERK6QPointb @ 8818 NONAME
-	_ZNK14QWidgetPrivate15getOpaqueRegionEv @ 8819 NONAME
+	_ZNK14QWidgetPrivate15getOpaqueRegionEv @ 8819 NONAME ABSENT
 	_ZNK14QWidgetPrivate15paintBackgroundEP8QPainterRK7QRegioni @ 8820 NONAME
 	_ZNK14QWidgetPrivate17getOpaqueChildrenEv @ 8821 NONAME
 	_ZNK14QWidgetPrivate17naturalWidgetFontEj @ 8822 NONAME
@@ -9366,12 +9366,12 @@ EXPORTS
 	_ZNK19QTextDocumentWriter6deviceEv @ 9365 NONAME
 	_ZNK19QTextDocumentWriter6formatEv @ 9366 NONAME
 	_ZNK19QTextDocumentWriter8fileNameEv @ 9367 NONAME
-	_ZNK20QGraphicsBloomEffect10blurRadiusEv @ 9368 NONAME
-	_ZNK20QGraphicsBloomEffect10brightnessEv @ 9369 NONAME
-	_ZNK20QGraphicsBloomEffect10metaObjectEv @ 9370 NONAME
-	_ZNK20QGraphicsBloomEffect15boundingRectForERK6QRectF @ 9371 NONAME
-	_ZNK20QGraphicsBloomEffect8blurHintEv @ 9372 NONAME
-	_ZNK20QGraphicsBloomEffect8strengthEv @ 9373 NONAME
+	_ZNK20QGraphicsBloomEffect10blurRadiusEv @ 9368 NONAME ABSENT
+	_ZNK20QGraphicsBloomEffect10brightnessEv @ 9369 NONAME ABSENT
+	_ZNK20QGraphicsBloomEffect10metaObjectEv @ 9370 NONAME ABSENT
+	_ZNK20QGraphicsBloomEffect15boundingRectForERK6QRectF @ 9371 NONAME ABSENT
+	_ZNK20QGraphicsBloomEffect8blurHintEv @ 9372 NONAME ABSENT
+	_ZNK20QGraphicsBloomEffect8strengthEv @ 9373 NONAME ABSENT
 	_ZNK20QGraphicsEllipseItem10opaqueAreaEv @ 9374 NONAME
 	_ZNK20QGraphicsEllipseItem10startAngleEv @ 9375 NONAME
 	_ZNK20QGraphicsEllipseItem12boundingRectEv @ 9376 NONAME
@@ -9429,7 +9429,7 @@ EXPORTS
 	_ZNK21QGraphicsEffectSource11styleOptionEv @ 9428 NONAME
 	_ZNK21QGraphicsEffectSource12boundingRectEN2Qt16CoordinateSystemE @ 9429 NONAME
 	_ZNK21QGraphicsEffectSource12graphicsItemEv @ 9430 NONAME
-	_ZNK21QGraphicsEffectSource6pixmapEN2Qt16CoordinateSystemEP6QPoint @ 9431 NONAME
+	_ZNK21QGraphicsEffectSource6pixmapEN2Qt16CoordinateSystemEP6QPoint @ 9431 NONAME ABSENT
 	_ZNK21QGraphicsEffectSource6widgetEv @ 9432 NONAME
 	_ZNK21QGraphicsEffectSource8isPixmapEv @ 9433 NONAME
 	_ZNK21QGraphicsLinearLayout11itemSpacingEi @ 9434 NONAME
@@ -9514,8 +9514,8 @@ EXPORTS
 	_ZNK23QGraphicsColorizeEffect10metaObjectEv @ 9513 NONAME
 	_ZNK23QGraphicsColorizeEffect5colorEv @ 9514 NONAME
 	_ZNK23QGraphicsColorizeEffect8strengthEv @ 9515 NONAME
-	_ZNK23QGraphicsPixelizeEffect10metaObjectEv @ 9516 NONAME
-	_ZNK23QGraphicsPixelizeEffect9pixelSizeEv @ 9517 NONAME
+	_ZNK23QGraphicsPixelizeEffect10metaObjectEv @ 9516 NONAME ABSENT
+	_ZNK23QGraphicsPixelizeEffect9pixelSizeEv @ 9517 NONAME ABSENT
 	_ZNK23QGraphicsSceneHelpEvent8scenePosEv @ 9518 NONAME
 	_ZNK23QGraphicsSceneHelpEvent9screenPosEv @ 9519 NONAME
 	_ZNK23QGraphicsSceneMoveEvent6newPosEv @ 9520 NONAME
@@ -9539,8 +9539,8 @@ EXPORTS
 	_ZNK23QPixmapDropShadowFilter6offsetEv @ 9538 NONAME
 	_ZNK23QTreeWidgetItemIterator12matchesFlagsEPK15QTreeWidgetItem @ 9539 NONAME
 	_ZNK23QWindowStateChangeEvent10isOverrideEv @ 9540 NONAME
-	_ZNK24QGraphicsGrayscaleEffect10metaObjectEv @ 9541 NONAME
-	_ZNK24QGraphicsGrayscaleEffect8strengthEv @ 9542 NONAME
+	_ZNK24QGraphicsGrayscaleEffect10metaObjectEv @ 9541 NONAME ABSENT
+	_ZNK24QGraphicsGrayscaleEffect8strengthEv @ 9542 NONAME ABSENT
 	_ZNK24QGraphicsSceneHoverEvent12lastScenePosEv @ 9543 NONAME
 	_ZNK24QGraphicsSceneHoverEvent13lastScreenPosEv @ 9544 NONAME
 	_ZNK24QGraphicsSceneHoverEvent3posEv @ 9545 NONAME
@@ -10788,7 +10788,7 @@ EXPORTS
 	_ZTI19QS60MainApplication @ 10787 NONAME
 	_ZTI19QStyledItemDelegate @ 10788 NONAME
 	_ZTI19QToolBarChangeEvent @ 10789 NONAME
-	_ZTI20QGraphicsBloomEffect @ 10790 NONAME
+	_ZTI20QGraphicsBloomEffect @ 10790 NONAME ABSENT
 	_ZTI20QGraphicsEllipseItem @ 10791 NONAME
 	_ZTI20QGraphicsItemPrivate @ 10792 NONAME
 	_ZTI20QGraphicsPolygonItem @ 10793 NONAME
@@ -10815,7 +10815,7 @@ EXPORTS
 	_ZTI22QStyleFactoryInterface @ 10814 NONAME
 	_ZTI22QWhatsThisClickedEvent @ 10815 NONAME
 	_ZTI23QGraphicsColorizeEffect @ 10816 NONAME
-	_ZTI23QGraphicsPixelizeEffect @ 10817 NONAME
+	_ZTI23QGraphicsPixelizeEffect @ 10817 NONAME ABSENT
 	_ZTI23QGraphicsSceneHelpEvent @ 10818 NONAME
 	_ZTI23QGraphicsSceneMoveEvent @ 10819 NONAME
 	_ZTI23QGraphicsSimpleTextItem @ 10820 NONAME
@@ -10823,7 +10823,7 @@ EXPORTS
 	_ZTI23QPictureFormatInterface @ 10822 NONAME
 	_ZTI23QPixmapDropShadowFilter @ 10823 NONAME
 	_ZTI23QWindowStateChangeEvent @ 10824 NONAME
-	_ZTI24QGraphicsGrayscaleEffect @ 10825 NONAME
+	_ZTI24QGraphicsGrayscaleEffect @ 10825 NONAME ABSENT
 	_ZTI24QGraphicsSceneHoverEvent @ 10826 NONAME
 	_ZTI24QGraphicsSceneMouseEvent @ 10827 NONAME
 	_ZTI24QGraphicsSceneWheelEvent @ 10828 NONAME
@@ -11070,7 +11070,7 @@ EXPORTS
 	_ZTV19QS60MainApplication @ 11069 NONAME
 	_ZTV19QStyledItemDelegate @ 11070 NONAME
 	_ZTV19QToolBarChangeEvent @ 11071 NONAME
-	_ZTV20QGraphicsBloomEffect @ 11072 NONAME
+	_ZTV20QGraphicsBloomEffect @ 11072 NONAME ABSENT
 	_ZTV20QGraphicsEllipseItem @ 11073 NONAME
 	_ZTV20QGraphicsItemPrivate @ 11074 NONAME
 	_ZTV20QGraphicsPolygonItem @ 11075 NONAME
@@ -11095,14 +11095,14 @@ EXPORTS
 	_ZTV22QPaintEngineExReplayer @ 11094 NONAME
 	_ZTV22QWhatsThisClickedEvent @ 11095 NONAME
 	_ZTV23QGraphicsColorizeEffect @ 11096 NONAME
-	_ZTV23QGraphicsPixelizeEffect @ 11097 NONAME
+	_ZTV23QGraphicsPixelizeEffect @ 11097 NONAME ABSENT
 	_ZTV23QGraphicsSceneHelpEvent @ 11098 NONAME
 	_ZTV23QGraphicsSceneMoveEvent @ 11099 NONAME
 	_ZTV23QGraphicsSimpleTextItem @ 11100 NONAME
 	_ZTV23QPaintBufferSignalProxy @ 11101 NONAME
 	_ZTV23QPixmapDropShadowFilter @ 11102 NONAME
 	_ZTV23QWindowStateChangeEvent @ 11103 NONAME
-	_ZTV24QGraphicsGrayscaleEffect @ 11104 NONAME
+	_ZTV24QGraphicsGrayscaleEffect @ 11104 NONAME ABSENT
 	_ZTV24QGraphicsSceneHoverEvent @ 11105 NONAME
 	_ZTV24QGraphicsSceneMouseEvent @ 11106 NONAME
 	_ZTV24QGraphicsSceneWheelEvent @ 11107 NONAME
@@ -11635,4 +11635,29 @@ EXPORTS
 	_ZNK11QTextEngine10fontEngineERK11QScriptItemP6QFixedS4_S4_ @ 11634 NONAME
 	_ZNK9QTextLine15leadingIncludedEv @ 11635 NONAME
 	_ZNK9QTextLine7leadingEv @ 11636 NONAME
+	_ZN11QVectorPath12addCacheDataEP14QPaintEngineExPvPFvS2_E @ 11637 NONAME
+	_ZN13QGestureEvent11setAcceptedEN2Qt11GestureTypeEb @ 11638 NONAME
+	_ZN13QGestureEvent6acceptEN2Qt11GestureTypeE @ 11639 NONAME
+	_ZN13QGestureEvent6ignoreEN2Qt11GestureTypeE @ 11640 NONAME
+	_ZN17QPixmapBlurFilter9setRadiusEf @ 11641 NONAME
+	_ZN19QGraphicsBlurEffect13setBlurRadiusEf @ 11642 NONAME
+	_ZN19QGraphicsBlurEffect17blurRadiusChangedEf @ 11643 NONAME
+	_ZN23QPixmapDropShadowFilter13setBlurRadiusEf @ 11644 NONAME
+	_ZN25QGraphicsDropShadowEffect13setBlurRadiusEf @ 11645 NONAME
+	_ZN25QGraphicsDropShadowEffect17blurRadiusChangedEf @ 11646 NONAME
+	_ZN28QStyleOptionTabWidgetFrameV2C1ERK26QStyleOptionTabWidgetFrame @ 11647 NONAME
+	_ZN28QStyleOptionTabWidgetFrameV2C1Ei @ 11648 NONAME
+	_ZN28QStyleOptionTabWidgetFrameV2C1Ev @ 11649 NONAME
+	_ZN28QStyleOptionTabWidgetFrameV2C2ERK26QStyleOptionTabWidgetFrame @ 11650 NONAME
+	_ZN28QStyleOptionTabWidgetFrameV2C2Ei @ 11651 NONAME
+	_ZN28QStyleOptionTabWidgetFrameV2C2Ev @ 11652 NONAME
+	_ZN28QStyleOptionTabWidgetFrameV2aSERK26QStyleOptionTabWidgetFrame @ 11653 NONAME
+	_ZN7QWidget13ungrabGestureEN2Qt11GestureTypeE @ 11654 NONAME
+	_ZN8QGesture22setGestureCancelPolicyENS_19GestureCancelPolicyE @ 11655 NONAME
+	_ZN8QToolBar15topLevelChangedEb @ 11656 NONAME
+	_ZNK13QGestureEvent10isAcceptedEN2Qt11GestureTypeE @ 11657 NONAME
+	_ZNK13QTextDocument18availableRedoStepsEv @ 11658 NONAME
+	_ZNK13QTextDocument18availableUndoStepsEv @ 11659 NONAME
+	_ZNK21QGraphicsEffectSource6pixmapEN2Qt16CoordinateSystemEP6QPointNS_13PixmapPadModeE @ 11660 NONAME
+	_ZNK8QGesture19gestureCancelPolicyEv @ 11661 NONAME
 
diff --git a/src/s60installs/eabi/QtScriptu.def b/src/s60installs/eabi/QtScriptu.def
index 1592664..1e81977 100644
--- a/src/s60installs/eabi/QtScriptu.def
+++ b/src/s60installs/eabi/QtScriptu.def
@@ -342,4 +342,21 @@ EXPORTS
 	_ZlsR11QDataStreamRK18QScriptContextInfo @ 341 NONAME
 	_ZrsR11QDataStreamR18QScriptContextInfo @ 342 NONAME
 	_Z5qHashRK13QScriptString @ 343 NONAME
+	_ZN13QScriptEngine8evaluateERK14QScriptProgram @ 344 NONAME
+	_ZN14QScriptProgramC1ERK7QStringS0_i @ 345 NONAME
+	_ZN14QScriptProgramC1ERKS_ @ 346 NONAME
+	_ZN14QScriptProgramC1Ev @ 347 NONAME
+	_ZN14QScriptProgramC2ERK7QStringS0_i @ 348 NONAME
+	_ZN14QScriptProgramC2ERKS_ @ 349 NONAME
+	_ZN14QScriptProgramC2Ev @ 350 NONAME
+	_ZN14QScriptProgramD1Ev @ 351 NONAME
+	_ZN14QScriptProgramD2Ev @ 352 NONAME
+	_ZN14QScriptProgramaSERKS_ @ 353 NONAME
+	_ZNK13QScriptString12toArrayIndexEPb @ 354 NONAME
+	_ZNK14QScriptProgram10sourceCodeEv @ 355 NONAME
+	_ZNK14QScriptProgram15firstLineNumberEv @ 356 NONAME
+	_ZNK14QScriptProgram6isNullEv @ 357 NONAME
+	_ZNK14QScriptProgram8fileNameEv @ 358 NONAME
+	_ZNK14QScriptProgrameqERKS_ @ 359 NONAME
+	_ZNK14QScriptProgramneERKS_ @ 360 NONAME
 
diff --git a/src/s60installs/eabi/QtXmlPatternsu.def b/src/s60installs/eabi/QtXmlPatternsu.def
new file mode 100644
index 0000000..5168c39
--- /dev/null
+++ b/src/s60installs/eabi/QtXmlPatternsu.def
@@ -0,0 +1,253 @@
+EXPORTS
+	_Z5qHashRK15QSourceLocation @ 1 NONAME
+	_Z5qHashRK18QXmlNodeModelIndex @ 2 NONAME
+	_Z5qHashRK8QXmlName @ 3 NONAME
+	_ZN10QXmlSchema14setUriResolverEPK20QAbstractUriResolver @ 4 NONAME
+	_ZN10QXmlSchema17setMessageHandlerEP23QAbstractMessageHandler @ 5 NONAME
+	_ZN10QXmlSchema23setNetworkAccessManagerEP21QNetworkAccessManager @ 6 NONAME
+	_ZN10QXmlSchema4loadEP9QIODeviceRK4QUrl @ 7 NONAME
+	_ZN10QXmlSchema4loadERK10QByteArrayRK4QUrl @ 8 NONAME
+	_ZN10QXmlSchema4loadERK4QUrl @ 9 NONAME
+	_ZN10QXmlSchemaC1ERKS_ @ 10 NONAME
+	_ZN10QXmlSchemaC1Ev @ 11 NONAME
+	_ZN10QXmlSchemaC2ERKS_ @ 12 NONAME
+	_ZN10QXmlSchemaC2Ev @ 13 NONAME
+	_ZN10QXmlSchemaD1Ev @ 14 NONAME
+	_ZN10QXmlSchemaD2Ev @ 15 NONAME
+	_ZN12QXmlNamePoolC1EPN11QPatternist8NamePoolE @ 16 NONAME
+	_ZN12QXmlNamePoolC1ERKS_ @ 17 NONAME
+	_ZN12QXmlNamePoolC1Ev @ 18 NONAME
+	_ZN12QXmlNamePoolC2EPN11QPatternist8NamePoolE @ 19 NONAME
+	_ZN12QXmlNamePoolC2ERKS_ @ 20 NONAME
+	_ZN12QXmlNamePoolC2Ev @ 21 NONAME
+	_ZN12QXmlNamePoolD1Ev @ 22 NONAME
+	_ZN12QXmlNamePoolD2Ev @ 23 NONAME
+	_ZN12QXmlNamePoolaSERKS_ @ 24 NONAME
+	_ZN13QXmlFormatter10charactersERK10QStringRef @ 25 NONAME
+	_ZN13QXmlFormatter10endElementEv @ 26 NONAME
+	_ZN13QXmlFormatter11atomicValueERK8QVariant @ 27 NONAME
+	_ZN13QXmlFormatter11endDocumentEv @ 28 NONAME
+	_ZN13QXmlFormatter12startElementERK8QXmlName @ 29 NONAME
+	_ZN13QXmlFormatter13endOfSequenceEv @ 30 NONAME
+	_ZN13QXmlFormatter13startDocumentEv @ 31 NONAME
+	_ZN13QXmlFormatter15startOfSequenceEv @ 32 NONAME
+	_ZN13QXmlFormatter19setIndentationDepthEi @ 33 NONAME
+	_ZN13QXmlFormatter21processingInstructionERK8QXmlNameRK7QString @ 34 NONAME
+	_ZN13QXmlFormatter4itemERKN11QPatternist4ItemE @ 35 NONAME
+	_ZN13QXmlFormatter7commentERK7QString @ 36 NONAME
+	_ZN13QXmlFormatter9attributeERK8QXmlNameRK10QStringRef @ 37 NONAME
+	_ZN13QXmlFormatterC1ERK9QXmlQueryP9QIODevice @ 38 NONAME
+	_ZN13QXmlFormatterC2ERK9QXmlQueryP9QIODevice @ 39 NONAME
+	_ZN14QXmlSerializer10charactersERK10QStringRef @ 40 NONAME
+	_ZN14QXmlSerializer10endElementEv @ 41 NONAME
+	_ZN14QXmlSerializer11atomicValueERK8QVariant @ 42 NONAME
+	_ZN14QXmlSerializer11endDocumentEv @ 43 NONAME
+	_ZN14QXmlSerializer12startElementERK8QXmlName @ 44 NONAME
+	_ZN14QXmlSerializer12writeEscapedERK7QString @ 45 NONAME
+	_ZN14QXmlSerializer13endOfSequenceEv @ 46 NONAME
+	_ZN14QXmlSerializer13startDocumentEv @ 47 NONAME
+	_ZN14QXmlSerializer15startOfSequenceEv @ 48 NONAME
+	_ZN14QXmlSerializer16namespaceBindingERK8QXmlName @ 49 NONAME
+	_ZN14QXmlSerializer21processingInstructionERK8QXmlNameRK7QString @ 50 NONAME
+	_ZN14QXmlSerializer4itemERKN11QPatternist4ItemE @ 51 NONAME
+	_ZN14QXmlSerializer7commentERK7QString @ 52 NONAME
+	_ZN14QXmlSerializer8setCodecEPK10QTextCodec @ 53 NONAME
+	_ZN14QXmlSerializer9attributeERK8QXmlNameRK10QStringRef @ 54 NONAME
+	_ZN14QXmlSerializerC1EP27QAbstractXmlReceiverPrivate @ 55 NONAME
+	_ZN14QXmlSerializerC1ERK9QXmlQueryP9QIODevice @ 56 NONAME
+	_ZN14QXmlSerializerC2EP27QAbstractXmlReceiverPrivate @ 57 NONAME
+	_ZN14QXmlSerializerC2ERK9QXmlQueryP9QIODevice @ 58 NONAME
+	_ZN15QSourceLocation6setUriERK4QUrl @ 59 NONAME
+	_ZN15QSourceLocation7setLineEx @ 60 NONAME
+	_ZN15QSourceLocation9setColumnEx @ 61 NONAME
+	_ZN15QSourceLocationC1ERK4QUrlii @ 62 NONAME
+	_ZN15QSourceLocationC1ERKS_ @ 63 NONAME
+	_ZN15QSourceLocationC1Ev @ 64 NONAME
+	_ZN15QSourceLocationC2ERK4QUrlii @ 65 NONAME
+	_ZN15QSourceLocationC2ERKS_ @ 66 NONAME
+	_ZN15QSourceLocationC2Ev @ 67 NONAME
+	_ZN15QSourceLocationD1Ev @ 68 NONAME
+	_ZN15QSourceLocationD2Ev @ 69 NONAME
+	_ZN15QSourceLocationaSERKS_ @ 70 NONAME
+	_ZN15QXmlResultItems4nextEv @ 71 NONAME
+	_ZN15QXmlResultItemsC1Ev @ 72 NONAME
+	_ZN15QXmlResultItemsC2Ev @ 73 NONAME
+	_ZN15QXmlResultItemsD0Ev @ 74 NONAME
+	_ZN15QXmlResultItemsD1Ev @ 75 NONAME
+	_ZN15QXmlResultItemsD2Ev @ 76 NONAME
+	_ZN19QSimpleXmlNodeModelC2ERK12QXmlNamePool @ 77 NONAME
+	_ZN19QSimpleXmlNodeModelD0Ev @ 78 NONAME
+	_ZN19QSimpleXmlNodeModelD1Ev @ 79 NONAME
+	_ZN19QSimpleXmlNodeModelD2Ev @ 80 NONAME
+	_ZN19QXmlSchemaValidator14setUriResolverEPK20QAbstractUriResolver @ 81 NONAME
+	_ZN19QXmlSchemaValidator17setMessageHandlerEP23QAbstractMessageHandler @ 82 NONAME
+	_ZN19QXmlSchemaValidator23setNetworkAccessManagerEP21QNetworkAccessManager @ 83 NONAME
+	_ZN19QXmlSchemaValidator9setSchemaERK10QXmlSchema @ 84 NONAME
+	_ZN19QXmlSchemaValidatorC1ERK10QXmlSchema @ 85 NONAME
+	_ZN19QXmlSchemaValidatorC1Ev @ 86 NONAME
+	_ZN19QXmlSchemaValidatorC2ERK10QXmlSchema @ 87 NONAME
+	_ZN19QXmlSchemaValidatorC2Ev @ 88 NONAME
+	_ZN19QXmlSchemaValidatorD1Ev @ 89 NONAME
+	_ZN19QXmlSchemaValidatorD2Ev @ 90 NONAME
+	_ZN20QAbstractUriResolver11qt_metacallEN11QMetaObject4CallEiPPv @ 91 NONAME
+	_ZN20QAbstractUriResolver11qt_metacastEPKc @ 92 NONAME
+	_ZN20QAbstractUriResolver16staticMetaObjectE @ 93 NONAME DATA 16
+	_ZN20QAbstractUriResolver19getStaticMetaObjectEv @ 94 NONAME
+	_ZN20QAbstractUriResolverC2EP7QObject @ 95 NONAME
+	_ZN20QAbstractUriResolverD0Ev @ 96 NONAME
+	_ZN20QAbstractUriResolverD1Ev @ 97 NONAME
+	_ZN20QAbstractUriResolverD2Ev @ 98 NONAME
+	_ZN20QAbstractXmlReceiver10sendAsNodeERKN11QPatternist4ItemE @ 99 NONAME
+	_ZN20QAbstractXmlReceiver14whitespaceOnlyERK10QStringRef @ 100 NONAME
+	_ZN20QAbstractXmlReceiver4itemERKN11QPatternist4ItemE @ 101 NONAME
+	_ZN20QAbstractXmlReceiverC2EP27QAbstractXmlReceiverPrivate @ 102 NONAME
+	_ZN20QAbstractXmlReceiverC2Ev @ 103 NONAME
+	_ZN20QAbstractXmlReceiverD0Ev @ 104 NONAME
+	_ZN20QAbstractXmlReceiverD1Ev @ 105 NONAME
+	_ZN20QAbstractXmlReceiverD2Ev @ 106 NONAME
+	_ZN21QAbstractXmlNodeModelC2EP28QAbstractXmlNodeModelPrivate @ 107 NONAME
+	_ZN21QAbstractXmlNodeModelC2Ev @ 108 NONAME
+	_ZN21QAbstractXmlNodeModelD0Ev @ 109 NONAME
+	_ZN21QAbstractXmlNodeModelD1Ev @ 110 NONAME
+	_ZN21QAbstractXmlNodeModelD2Ev @ 111 NONAME
+	_ZN23QAbstractMessageHandler11qt_metacallEN11QMetaObject4CallEiPPv @ 112 NONAME
+	_ZN23QAbstractMessageHandler11qt_metacastEPKc @ 113 NONAME
+	_ZN23QAbstractMessageHandler16staticMetaObjectE @ 114 NONAME DATA 16
+	_ZN23QAbstractMessageHandler19getStaticMetaObjectEv @ 115 NONAME
+	_ZN23QAbstractMessageHandler7messageE9QtMsgTypeRK7QStringRK4QUrlRK15QSourceLocation @ 116 NONAME
+	_ZN23QAbstractMessageHandlerC2EP7QObject @ 117 NONAME
+	_ZN23QAbstractMessageHandlerD0Ev @ 118 NONAME
+	_ZN23QAbstractMessageHandlerD1Ev @ 119 NONAME
+	_ZN23QAbstractMessageHandlerD2Ev @ 120 NONAME
+	_ZN8QXmlItemC1ERK18QXmlNodeModelIndex @ 121 NONAME
+	_ZN8QXmlItemC1ERK8QVariant @ 122 NONAME
+	_ZN8QXmlItemC1ERKS_ @ 123 NONAME
+	_ZN8QXmlItemC1Ev @ 124 NONAME
+	_ZN8QXmlItemC2ERK18QXmlNodeModelIndex @ 125 NONAME
+	_ZN8QXmlItemC2ERK8QVariant @ 126 NONAME
+	_ZN8QXmlItemC2ERKS_ @ 127 NONAME
+	_ZN8QXmlItemC2Ev @ 128 NONAME
+	_ZN8QXmlItemD1Ev @ 129 NONAME
+	_ZN8QXmlItemD2Ev @ 130 NONAME
+	_ZN8QXmlItemaSERKS_ @ 131 NONAME
+	_ZN8QXmlName13fromClarkNameERK7QStringRK12QXmlNamePool @ 132 NONAME
+	_ZN8QXmlName8isNCNameERK7QString @ 133 NONAME
+	_ZN8QXmlNameC1ER12QXmlNamePoolRK7QStringS4_S4_ @ 134 NONAME
+	_ZN8QXmlNameC1Ev @ 135 NONAME
+	_ZN8QXmlNameC2ER12QXmlNamePoolRK7QStringS4_S4_ @ 136 NONAME
+	_ZN8QXmlNameC2Ev @ 137 NONAME
+	_ZN8QXmlNameaSERKS_ @ 138 NONAME
+	_ZN9QXmlQuery12bindVariableERK7QStringP9QIODevice @ 139 NONAME
+	_ZN9QXmlQuery12bindVariableERK7QStringRK8QXmlItem @ 140 NONAME
+	_ZN9QXmlQuery12bindVariableERK7QStringRKS_ @ 141 NONAME
+	_ZN9QXmlQuery12bindVariableERK8QXmlNameP9QIODevice @ 142 NONAME
+	_ZN9QXmlQuery12bindVariableERK8QXmlNameRK8QXmlItem @ 143 NONAME
+	_ZN9QXmlQuery12bindVariableERK8QXmlNameRKS_ @ 144 NONAME
+	_ZN9QXmlQuery14setUriResolverEPK20QAbstractUriResolver @ 145 NONAME
+	_ZN9QXmlQuery17setMessageHandlerEP23QAbstractMessageHandler @ 146 NONAME
+	_ZN9QXmlQuery22setInitialTemplateNameERK7QString @ 147 NONAME
+	_ZN9QXmlQuery22setInitialTemplateNameERK8QXmlName @ 148 NONAME
+	_ZN9QXmlQuery23setNetworkAccessManagerEP21QNetworkAccessManager @ 149 NONAME
+	_ZN9QXmlQuery8setFocusEP9QIODevice @ 150 NONAME
+	_ZN9QXmlQuery8setFocusERK4QUrl @ 151 NONAME
+	_ZN9QXmlQuery8setFocusERK7QString @ 152 NONAME
+	_ZN9QXmlQuery8setFocusERK8QXmlItem @ 153 NONAME
+	_ZN9QXmlQuery8setQueryEP9QIODeviceRK4QUrl @ 154 NONAME
+	_ZN9QXmlQuery8setQueryERK4QUrlS2_ @ 155 NONAME
+	_ZN9QXmlQuery8setQueryERK7QStringRK4QUrl @ 156 NONAME
+	_ZN9QXmlQueryC1ENS_13QueryLanguageERK12QXmlNamePool @ 157 NONAME
+	_ZN9QXmlQueryC1ERK12QXmlNamePool @ 158 NONAME
+	_ZN9QXmlQueryC1ERKS_ @ 159 NONAME
+	_ZN9QXmlQueryC1Ev @ 160 NONAME
+	_ZN9QXmlQueryC2ENS_13QueryLanguageERK12QXmlNamePool @ 161 NONAME
+	_ZN9QXmlQueryC2ERK12QXmlNamePool @ 162 NONAME
+	_ZN9QXmlQueryC2ERKS_ @ 163 NONAME
+	_ZN9QXmlQueryC2Ev @ 164 NONAME
+	_ZN9QXmlQueryD1Ev @ 165 NONAME
+	_ZN9QXmlQueryD2Ev @ 166 NONAME
+	_ZN9QXmlQueryaSERKS_ @ 167 NONAME
+	_ZNK10QXmlSchema11documentUriEv @ 168 NONAME
+	_ZNK10QXmlSchema11uriResolverEv @ 169 NONAME
+	_ZNK10QXmlSchema14messageHandlerEv @ 170 NONAME
+	_ZNK10QXmlSchema20networkAccessManagerEv @ 171 NONAME
+	_ZNK10QXmlSchema7isValidEv @ 172 NONAME
+	_ZNK10QXmlSchema8namePoolEv @ 173 NONAME
+	_ZNK13QXmlFormatter16indentationDepthEv @ 174 NONAME
+	_ZNK14QXmlSerializer12outputDeviceEv @ 175 NONAME
+	_ZNK14QXmlSerializer5codecEv @ 176 NONAME
+	_ZNK15QSourceLocation3uriEv @ 177 NONAME
+	_ZNK15QSourceLocation4lineEv @ 178 NONAME
+	_ZNK15QSourceLocation6columnEv @ 179 NONAME
+	_ZNK15QSourceLocation6isNullEv @ 180 NONAME
+	_ZNK15QSourceLocationeqERKS_ @ 181 NONAME
+	_ZNK15QSourceLocationneERKS_ @ 182 NONAME
+	_ZNK15QXmlResultItems7currentEv @ 183 NONAME
+	_ZNK15QXmlResultItems8hasErrorEv @ 184 NONAME
+	_ZNK18QXmlNodeModelIndexeqERKS_ @ 185 NONAME
+	_ZNK18QXmlNodeModelIndexneERKS_ @ 186 NONAME
+	_ZNK19QSimpleXmlNodeModel11elementByIdERK8QXmlName @ 187 NONAME
+	_ZNK19QSimpleXmlNodeModel11stringValueERK18QXmlNodeModelIndex @ 188 NONAME
+	_ZNK19QSimpleXmlNodeModel12nodesByIdrefERK8QXmlName @ 189 NONAME
+	_ZNK19QSimpleXmlNodeModel17namespaceBindingsERK18QXmlNodeModelIndex @ 190 NONAME
+	_ZNK19QSimpleXmlNodeModel7baseUriERK18QXmlNodeModelIndex @ 191 NONAME
+	_ZNK19QSimpleXmlNodeModel8namePoolEv @ 192 NONAME
+	_ZNK19QXmlSchemaValidator11uriResolverEv @ 193 NONAME
+	_ZNK19QXmlSchemaValidator14messageHandlerEv @ 194 NONAME
+	_ZNK19QXmlSchemaValidator20networkAccessManagerEv @ 195 NONAME
+	_ZNK19QXmlSchemaValidator6schemaEv @ 196 NONAME
+	_ZNK19QXmlSchemaValidator8namePoolEv @ 197 NONAME
+	_ZNK19QXmlSchemaValidator8validateEP9QIODeviceRK4QUrl @ 198 NONAME
+	_ZNK19QXmlSchemaValidator8validateERK10QByteArrayRK4QUrl @ 199 NONAME
+	_ZNK19QXmlSchemaValidator8validateERK4QUrl @ 200 NONAME
+	_ZNK20QAbstractUriResolver10metaObjectEv @ 201 NONAME
+	_ZNK21QAbstractXmlNodeModel10copyNodeToERK18QXmlNodeModelIndexP20QAbstractXmlReceiverRK6QFlagsINS_15NodeCopySettingEE @ 202 NONAME
+	_ZNK21QAbstractXmlNodeModel11isDeepEqualERK18QXmlNodeModelIndexS2_ @ 203 NONAME
+	_ZNK21QAbstractXmlNodeModel14sendNamespacesERK18QXmlNodeModelIndexP20QAbstractXmlReceiver @ 204 NONAME
+	_ZNK21QAbstractXmlNodeModel14sourceLocationERK18QXmlNodeModelIndex @ 205 NONAME
+	_ZNK21QAbstractXmlNodeModel18namespaceForPrefixERK18QXmlNodeModelIndexs @ 206 NONAME
+	_ZNK21QAbstractXmlNodeModel19sequencedTypedValueERK18QXmlNodeModelIndex @ 207 NONAME
+	_ZNK21QAbstractXmlNodeModel4typeERK18QXmlNodeModelIndex @ 208 NONAME
+	_ZNK21QAbstractXmlNodeModel7iterateERK18QXmlNodeModelIndexNS0_4AxisE @ 209 NONAME
+	_ZNK23QAbstractMessageHandler10metaObjectEv @ 210 NONAME
+	_ZNK8QXmlItem13isAtomicValueEv @ 211 NONAME
+	_ZNK8QXmlItem13toAtomicValueEv @ 212 NONAME
+	_ZNK8QXmlItem16toNodeModelIndexEv @ 213 NONAME
+	_ZNK8QXmlItem6isNodeEv @ 214 NONAME
+	_ZNK8QXmlItem6isNullEv @ 215 NONAME
+	_ZNK8QXmlName11toClarkNameERK12QXmlNamePool @ 216 NONAME
+	_ZNK8QXmlName12namespaceUriERK12QXmlNamePool @ 217 NONAME
+	_ZNK8QXmlName6isNullEv @ 218 NONAME
+	_ZNK8QXmlName6prefixERK12QXmlNamePool @ 219 NONAME
+	_ZNK8QXmlName9localNameERK12QXmlNamePool @ 220 NONAME
+	_ZNK8QXmlNameeqERKS_ @ 221 NONAME
+	_ZNK8QXmlNameneERKS_ @ 222 NONAME
+	_ZNK9QXmlQuery10evaluateToEP11QStringList @ 223 NONAME
+	_ZNK9QXmlQuery10evaluateToEP15QXmlResultItems @ 224 NONAME
+	_ZNK9QXmlQuery10evaluateToEP20QAbstractXmlReceiver @ 225 NONAME
+	_ZNK9QXmlQuery10evaluateToEP7QString @ 226 NONAME
+	_ZNK9QXmlQuery10evaluateToEP9QIODevice @ 227 NONAME
+	_ZNK9QXmlQuery11uriResolverEv @ 228 NONAME
+	_ZNK9QXmlQuery13queryLanguageEv @ 229 NONAME
+	_ZNK9QXmlQuery14messageHandlerEv @ 230 NONAME
+	_ZNK9QXmlQuery19initialTemplateNameEv @ 231 NONAME
+	_ZNK9QXmlQuery20networkAccessManagerEv @ 232 NONAME
+	_ZNK9QXmlQuery7isValidEv @ 233 NONAME
+	_ZNK9QXmlQuery8namePoolEv @ 234 NONAME
+	_ZTI13QXmlFormatter @ 235 NONAME
+	_ZTI14QXmlSerializer @ 236 NONAME
+	_ZTI15QXmlResultItems @ 237 NONAME
+	_ZTI19QSimpleXmlNodeModel @ 238 NONAME
+	_ZTI20QAbstractUriResolver @ 239 NONAME
+	_ZTI20QAbstractXmlReceiver @ 240 NONAME
+	_ZTI21QAbstractXmlNodeModel @ 241 NONAME
+	_ZTI23QAbstractMessageHandler @ 242 NONAME
+	_ZTV13QXmlFormatter @ 243 NONAME
+	_ZTV14QXmlSerializer @ 244 NONAME
+	_ZTV15QXmlResultItems @ 245 NONAME
+	_ZTV19QSimpleXmlNodeModel @ 246 NONAME
+	_ZTV20QAbstractUriResolver @ 247 NONAME
+	_ZTV20QAbstractXmlReceiver @ 248 NONAME
+	_ZTV21QAbstractXmlNodeModel @ 249 NONAME
+	_ZTV23QAbstractMessageHandler @ 250 NONAME
+	_Zls6QDebugRK15QSourceLocation @ 251 NONAME
+
-- 
cgit v0.12


From bd0fe34b7ae7ece37f013c193c28cce4fe8ba9ec Mon Sep 17 00:00:00 2001
From: Gareth Stockwell <ext-gareth.stockwell@nokia.com>
Date: Wed, 4 Nov 2009 07:45:27 +0000
Subject: Removed some logging from MMF Phonon backend

Reviewed-by: trustme
---
 src/3rdparty/phonon/mmf/ancestormovemonitor.cpp | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/3rdparty/phonon/mmf/ancestormovemonitor.cpp b/src/3rdparty/phonon/mmf/ancestormovemonitor.cpp
index 876499c..0447d57 100644
--- a/src/3rdparty/phonon/mmf/ancestormovemonitor.cpp
+++ b/src/3rdparty/phonon/mmf/ancestormovemonitor.cpp
@@ -116,7 +116,7 @@ bool AncestorMoveMonitor::eventFilter(QObject *watched, QEvent *event)
 
     if(event->type() == QEvent::Move || event->type() == QEvent::ParentChange) {
 
-        TRACE_ENTRY("watched 0x%08x event.type %d", watched, event->type());
+        //TRACE_ENTRY("watched 0x%08x event.type %d", watched, event->type());
 
         const Hash::const_iterator it = m_hash.find(watched);
         if(it != m_hash.end()) {
@@ -141,7 +141,7 @@ bool AncestorMoveMonitor::eventFilter(QObject *watched, QEvent *event)
             }
         }
 
-        TRACE_EXIT_0();
+        //TRACE_EXIT_0();
     }
 
     // The event is never consumed by this filter
-- 
cgit v0.12


From 950cd9b3c1ae6a1b462d596a62aea92f9c231afb Mon Sep 17 00:00:00 2001
From: Olivier Goffart <ogoffart@trolltech.com>
Date: Wed, 4 Nov 2009 09:43:55 +0100
Subject: Stabilize tests

---
 tests/auto/qlistview/tst_qlistview.cpp | 12 ++++++------
 tests/auto/qtreeview/tst_qtreeview.cpp |  4 ++--
 2 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/tests/auto/qlistview/tst_qlistview.cpp b/tests/auto/qlistview/tst_qlistview.cpp
index 246f092..1c8fecf 100644
--- a/tests/auto/qlistview/tst_qlistview.cpp
+++ b/tests/auto/qlistview/tst_qlistview.cpp
@@ -1788,13 +1788,13 @@ void tst_QListView::task262152_setModelColumnNavigate()
 
     view.show();
     QTest::qWaitForWindowShown(&view);
-    QTest::qWait(100);
+    QTest::qWait(120);
     QTest::keyClick(&view, Qt::Key_Down);
-    QTest::qWait(100);
-    QCOMPARE(view.currentIndex(), model.index(1,1));
+    QTest::qWait(30);
+    QTRY_COMPARE(view.currentIndex(), model.index(1,1));
     QTest::keyClick(&view, Qt::Key_Down);
-    QTest::qWait(100);
-    QCOMPARE(view.currentIndex(), model.index(2,1));
+    QTest::qWait(30);
+    QTRY_COMPARE(view.currentIndex(), model.index(2,1));
 
 }
 
@@ -1862,7 +1862,7 @@ void tst_QListView::taskQTBUG_435_deselectOnViewportClick()
     view.setSelectionMode(QAbstractItemView::ExtendedSelection);
     view.selectAll();
     QCOMPARE(view.selectionModel()->selectedIndexes().count(), model.rowCount());
-    
+
 
     QPoint p = view.visualRect(model.index(model.rowCount() - 1)).center() + QPoint(0, 20);
     //first the left button
diff --git a/tests/auto/qtreeview/tst_qtreeview.cpp b/tests/auto/qtreeview/tst_qtreeview.cpp
index 90e6c5c..58f059b 100644
--- a/tests/auto/qtreeview/tst_qtreeview.cpp
+++ b/tests/auto/qtreeview/tst_qtreeview.cpp
@@ -3669,11 +3669,11 @@ void tst_QTreeView::doubleClickedWithSpans()
 
     //end the previous edition
     QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, p);
-    QTest::qWait(100);
+    QTest::qWait(150);
     QTest::mousePress(view.viewport(), Qt::LeftButton, 0, p);
     QTest::mouseDClick(view.viewport(), Qt::LeftButton, 0, p);
     QTest::mouseRelease(view.viewport(), Qt::LeftButton, 0, p);
-    QCOMPARE(spy.count(), 2);
+    QTRY_COMPARE(spy.count(), 2);
 }
 
 QTEST_MAIN(tst_QTreeView)
-- 
cgit v0.12


From d319fccebfd5f2e7175945275ffc3e73240d766c Mon Sep 17 00:00:00 2001
From: Gareth Stockwell <ext-gareth.stockwell@nokia.com>
Date: Wed, 4 Nov 2009 09:45:59 +0000
Subject: Call PositionChanged from QSymbianControl::SizeChanged

This is necessitated by the fact that CCoeControl::SetExtent calls
SizeChanged, but does not call PositionChanged.  This causes a bug
in the handling of orientation changes.  When the screen orientation
changes, QSymbianControl::HandleResourceChange(KInternalStatusPaneChange)
is called on the top-level widget.  This results in a call to
SetExtent.  Because PositionChanged was not being called, the outcome
was that the size of the widget's data.crect variable was updated, but
not its position.  This meant that mouse events sent to this widget
or any of its children were incorrectly handled:

1. QSymbianControl::HandlePointerEventL works out which widget should
receive the event. This uses CCoeControl::PositionRelativeToScreen,
and therefore calculates the correct widget.

2. In constructing the QMouseEvent object, QWidget::mapFromGlobal is
used to translate the event position into the receiving widget's
co-ordinate system. This uses data.crect.topLeft(), therefore giving
the wrong value, resulting in the widget's event handler discarding
the event.

Task-number: QTBUG-4697
Reviewed-by: axis
---
 src/gui/kernel/qapplication_s60.cpp | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/src/gui/kernel/qapplication_s60.cpp b/src/gui/kernel/qapplication_s60.cpp
index 2b24011..e65a40e 100644
--- a/src/gui/kernel/qapplication_s60.cpp
+++ b/src/gui/kernel/qapplication_s60.cpp
@@ -869,6 +869,11 @@ void QSymbianControl::SizeChanged()
                 tlwExtra->inTopLevelResize = false;
         }
     }
+
+    // CCoeControl::SetExtent calls SizeChanged, but does not call
+    // PositionChanged, so we call it here to ensure that the widget's
+    // position is updated.
+    PositionChanged();
 }
 
 void QSymbianControl::PositionChanged()
-- 
cgit v0.12


From 2747f200ce27599af74f01cb629ec8930bae7b44 Mon Sep 17 00:00:00 2001
From: Andreas Aardal Hanssen <andreas.aardal.hanssen@nokia.com>
Date: Wed, 4 Nov 2009 11:18:40 +0100
Subject: Provide hook that's called when items' stacking order is changed.

This is required by the QtDeclarative module. As an isolated change,
this is just a noop. It takes effect when somebody reimpements the
private virtual function.

Reviewed-by: Alan Alpert
---
 src/gui/graphicsview/qgraphicsitem.cpp | 16 ++++++++++++++++
 src/gui/graphicsview/qgraphicsitem_p.h |  1 +
 2 files changed, 17 insertions(+)

diff --git a/src/gui/graphicsview/qgraphicsitem.cpp b/src/gui/graphicsview/qgraphicsitem.cpp
index e69a295..e014763 100644
--- a/src/gui/graphicsview/qgraphicsitem.cpp
+++ b/src/gui/graphicsview/qgraphicsitem.cpp
@@ -4345,6 +4345,12 @@ void QGraphicsItem::stackBefore(const QGraphicsItem *sibling)
                 ++index;
         }
         d_ptr->siblingIndex = siblingIndex;
+        for (int i = 0; i < siblings->size(); ++i) {
+            int &index = siblings->at(i)->d_ptr->siblingIndex;
+            if (i != siblingIndex && index >= siblingIndex && index <= myIndex)
+                siblings->at(i)->d_ptr->siblingOrderChange();
+        }
+        d_ptr->siblingOrderChange();
     }
 }
 
@@ -5342,6 +5348,16 @@ void QGraphicsItemPrivate::subFocusItemChange()
 /*!
     \internal
 
+    Subclasses can reimplement this function to be notified when its
+    siblingIndex order is changed.
+*/
+void QGraphicsItemPrivate::siblingOrderChange()
+{
+}
+
+/*!
+    \internal
+
     Tells us if it is a proxy widget
 */
 bool QGraphicsItemPrivate::isProxyWidget() const
diff --git a/src/gui/graphicsview/qgraphicsitem_p.h b/src/gui/graphicsview/qgraphicsitem_p.h
index 92d45f6..977fa96 100644
--- a/src/gui/graphicsview/qgraphicsitem_p.h
+++ b/src/gui/graphicsview/qgraphicsitem_p.h
@@ -431,6 +431,7 @@ public:
     static inline bool insertionOrder(QGraphicsItem *a, QGraphicsItem *b);
     void ensureSequentialSiblingIndex();
     inline void sendScenePosChange();
+    virtual void siblingOrderChange();
 
     QPainterPath cachedClipPath;
     QRectF childrenBoundingRect;
-- 
cgit v0.12


From 968eabf3ff6b686867d964f2a3437a228be0ea6b Mon Sep 17 00:00:00 2001
From: Miikka Heikkinen <miikka.heikkinen@digia.com>
Date: Wed, 4 Nov 2009 11:57:56 +0200
Subject: Added UIDs to projects lacking them

Also added symbianpkgrules.pri include to some examples

Reviewed-by: Janne Koskinen
---
 examples/painting/svggenerator/svggenerator.pro          | 5 ++++-
 examples/xmlpatterns/filetree/filetree.pro               | 5 ++++-
 examples/xmlpatterns/qobjectxmlmodel/qobjectxmlmodel.pro | 5 +++++
 examples/xmlpatterns/recipes/recipes.pro                 | 5 ++++-
 examples/xmlpatterns/schema/schema.pro                   | 5 +++++
 examples/xmlpatterns/trafficinfo/trafficinfo.pro         | 5 +++++
 src/plugins/graphicssystems/openvg/openvg.pro            | 2 ++
 tools/xmlpatterns/xmlpatterns.pro                        | 3 +++
 tools/xmlpatternsvalidator/xmlpatternsvalidator.pro      | 2 ++
 9 files changed, 34 insertions(+), 3 deletions(-)

diff --git a/examples/painting/svggenerator/svggenerator.pro b/examples/painting/svggenerator/svggenerator.pro
index 1134619..e0e4895 100644
--- a/examples/painting/svggenerator/svggenerator.pro
+++ b/examples/painting/svggenerator/svggenerator.pro
@@ -14,4 +14,7 @@ sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS svggenerator.pro
 sources.path = $$[QT_INSTALL_EXAMPLES]/painting/svggenerator
 INSTALLS += target sources
 
-symbian:TARGET.UID3 = 0xA000CF68
\ No newline at end of file
+symbian {
+    TARGET.UID3 = 0xA000CF68
+    include($$QT_SOURCE_TREE/examples/symbianpkgrules.pri)
+}
diff --git a/examples/xmlpatterns/filetree/filetree.pro b/examples/xmlpatterns/filetree/filetree.pro
index 0238c23..1683491 100644
--- a/examples/xmlpatterns/filetree/filetree.pro
+++ b/examples/xmlpatterns/filetree/filetree.pro
@@ -12,4 +12,7 @@ sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS *.pro *.xq *.html
 sources.path = $$[QT_INSTALL_EXAMPLES]/xmlpatterns/filetree
 INSTALLS += target sources
 
-symbian: include($$QT_SOURCE_TREE/examples/symbianpkgrules.pri)
+symbian {
+    TARGET.UID3 = 0xA000D7C4
+    include($$QT_SOURCE_TREE/examples/symbianpkgrules.pri)
+}
diff --git a/examples/xmlpatterns/qobjectxmlmodel/qobjectxmlmodel.pro b/examples/xmlpatterns/qobjectxmlmodel/qobjectxmlmodel.pro
index 39f0106..5a63b2b 100644
--- a/examples/xmlpatterns/qobjectxmlmodel/qobjectxmlmodel.pro
+++ b/examples/xmlpatterns/qobjectxmlmodel/qobjectxmlmodel.pro
@@ -11,3 +11,8 @@ target.path = $$[QT_INSTALL_EXAMPLES]/xmlpatterns/qobjectxmlmodel
 sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS *.pro *.xq *.html
 sources.path = $$[QT_INSTALL_EXAMPLES]/xmlpatterns/qobjectxmlmodel
 INSTALLS += target sources
+
+symbian {
+    TARGET.UID3 = 0xA000D7C8
+    include($$QT_SOURCE_TREE/examples/symbianpkgrules.pri)
+}
diff --git a/examples/xmlpatterns/recipes/recipes.pro b/examples/xmlpatterns/recipes/recipes.pro
index f02a018..67d6d73 100644
--- a/examples/xmlpatterns/recipes/recipes.pro
+++ b/examples/xmlpatterns/recipes/recipes.pro
@@ -10,4 +10,7 @@ sources.files = $$SOURCES $$HEADERS $$RESOURCES *.pro *.xq *.html forms files
 sources.path = $$[QT_INSTALL_EXAMPLES]/xmlpatterns/recipes
 INSTALLS += target sources
 
-symbian: include($$QT_SOURCE_TREE/examples/symbianpkgrules.pri)
+symbian {
+    TARGET.UID3 = 0xA000D7C5
+    include($$QT_SOURCE_TREE/examples/symbianpkgrules.pri)
+}
diff --git a/examples/xmlpatterns/schema/schema.pro b/examples/xmlpatterns/schema/schema.pro
index af32e0a..4d3520c 100644
--- a/examples/xmlpatterns/schema/schema.pro
+++ b/examples/xmlpatterns/schema/schema.pro
@@ -9,3 +9,8 @@ target.path = $$[QT_INSTALL_EXAMPLES]/xmlpatterns/schema
 sources.files = $$SOURCES $$HEADERS $$RESOURCES *.pro *.xq *.html files
 sources.path = $$[QT_INSTALL_EXAMPLES]/xmlpatterns/schema
 INSTALLS += target sources
+
+symbian {
+    TARGET.UID3 = 0xA000D7C6
+    include($$QT_SOURCE_TREE/examples/symbianpkgrules.pri)
+}
diff --git a/examples/xmlpatterns/trafficinfo/trafficinfo.pro b/examples/xmlpatterns/trafficinfo/trafficinfo.pro
index 52bcc19..99825d0 100644
--- a/examples/xmlpatterns/trafficinfo/trafficinfo.pro
+++ b/examples/xmlpatterns/trafficinfo/trafficinfo.pro
@@ -7,3 +7,8 @@ target.path = $$[QT_INSTALL_EXAMPLES]/xmlpatterns/trafficinfo
 sources.files = $$SOURCES $$HEADERS $$RESOURCES *.pro
 sources.path = $$[QT_INSTALL_EXAMPLES]/xmlpatterns/trafficinfo
 INSTALLS += target sources
+
+symbian {
+    TARGET.UID3 = 0xA000D7C7
+    include($$QT_SOURCE_TREE/examples/symbianpkgrules.pri)
+}
diff --git a/src/plugins/graphicssystems/openvg/openvg.pro b/src/plugins/graphicssystems/openvg/openvg.pro
index d36570c..781cdc4 100644
--- a/src/plugins/graphicssystems/openvg/openvg.pro
+++ b/src/plugins/graphicssystems/openvg/openvg.pro
@@ -10,3 +10,5 @@ HEADERS = qgraphicssystem_vg_p.h
 
 target.path += $$[QT_INSTALL_PLUGINS]/graphicssystems
 INSTALLS += target
+
+symbian: TARGET.UID3 = 0x2001E62C
diff --git a/tools/xmlpatterns/xmlpatterns.pro b/tools/xmlpatterns/xmlpatterns.pro
index 1c5ab2c..47f5a48 100644
--- a/tools/xmlpatterns/xmlpatterns.pro
+++ b/tools/xmlpatterns/xmlpatterns.pro
@@ -27,3 +27,6 @@ HEADERS = main.h                            \
           qapplicationargumentparser.cpp    \
           qcoloringmessagehandler_p.h       \
           qcoloroutput_p.h
+
+symbian: TARGET.UID3 = 0xA000D7C9
+
diff --git a/tools/xmlpatternsvalidator/xmlpatternsvalidator.pro b/tools/xmlpatternsvalidator/xmlpatternsvalidator.pro
index 8491129..17fc465 100644
--- a/tools/xmlpatternsvalidator/xmlpatternsvalidator.pro
+++ b/tools/xmlpatternsvalidator/xmlpatternsvalidator.pro
@@ -15,3 +15,5 @@ CONFIG -= app_bundle
 
 SOURCES = main.cpp
 HEADERS = main.h
+
+symbian: TARGET.UID3 = 0xA000D7CA
-- 
cgit v0.12


From f4f6012d181cf60fd04fc5bf69b21786977f0de0 Mon Sep 17 00:00:00 2001
From: Gareth Stockwell <ext-gareth.stockwell@nokia.com>
Date: Wed, 4 Nov 2009 10:38:41 +0000
Subject: Implemented metadata handling in Phonon MMF backend

Task-number: QTBUG-4662
Reviewed-by: Frans Englich
---
 src/3rdparty/phonon/mmf/abstractmediaplayer.cpp | 21 +++++++++++++++++++++
 src/3rdparty/phonon/mmf/abstractmediaplayer.h   |  6 ++++++
 src/3rdparty/phonon/mmf/abstractplayer.h        |  3 ++-
 src/3rdparty/phonon/mmf/audioplayer.cpp         | 21 ++++++++++++++++++++-
 src/3rdparty/phonon/mmf/audioplayer.h           |  4 ++++
 src/3rdparty/phonon/mmf/mediaobject.cpp         |  1 +
 src/3rdparty/phonon/mmf/mmf_videoplayer.cpp     | 13 +++++++++++++
 src/3rdparty/phonon/mmf/mmf_videoplayer.h       |  4 ++++
 src/plugins/phonon/mmf/plugin/plugin.pro        | 11 ++++++-----
 9 files changed, 77 insertions(+), 7 deletions(-)

diff --git a/src/3rdparty/phonon/mmf/abstractmediaplayer.cpp b/src/3rdparty/phonon/mmf/abstractmediaplayer.cpp
index b443194..f2efaa0 100644
--- a/src/3rdparty/phonon/mmf/abstractmediaplayer.cpp
+++ b/src/3rdparty/phonon/mmf/abstractmediaplayer.cpp
@@ -392,7 +392,28 @@ void MMF::AbstractMediaPlayer::changeState(PrivateState newState)
             play();
         }
     }
+}
+
+void MMF::AbstractMediaPlayer::updateMetaData()
+{
+    TRACE_CONTEXT(AbstractMediaPlayer::updateMetaData, EAudioInternal);
+    TRACE_ENTRY_0();
+
+    m_metaData.clear();
+
+    const int numberOfEntries = numberOfMetaDataEntries();
+    for(int i=0; i<numberOfEntries; ++i) {
+        const QPair<QString, QString> entry = metaDataEntry(i);
 
+        // Note that we capitalize the key, as required by the Ogg Vorbis
+        // metadata standard to which Phonon adheres:
+        // http://xiph.org/vorbis/doc/v-comment.html
+        m_metaData.insert(entry.first.toUpper(), entry.second);
+    }
+
+    emit metaDataChanged(m_metaData);
+
+    TRACE_EXIT_0();
 }
 
 QT_END_NAMESPACE
diff --git a/src/3rdparty/phonon/mmf/abstractmediaplayer.h b/src/3rdparty/phonon/mmf/abstractmediaplayer.h
index 1ea236b..cff7bab 100644
--- a/src/3rdparty/phonon/mmf/abstractmediaplayer.h
+++ b/src/3rdparty/phonon/mmf/abstractmediaplayer.h
@@ -73,6 +73,10 @@ protected:
     virtual void close() = 0;
     virtual void changeState(PrivateState newState);
 
+    void updateMetaData();
+    virtual int numberOfMetaDataEntries() const = 0;
+    virtual QPair<QString, QString> metaDataEntry(int index) const = 0;
+
 protected:
     bool tickTimerRunning() const;
     void startTickTimer();
@@ -105,6 +109,8 @@ private:
     MediaSource                 m_source;
     MediaSource                 m_nextSource;
 
+    QMultiMap<QString, QString> m_metaData;
+
 };
 }
 }
diff --git a/src/3rdparty/phonon/mmf/abstractplayer.h b/src/3rdparty/phonon/mmf/abstractplayer.h
index 1c4ea02..66496cc 100644
--- a/src/3rdparty/phonon/mmf/abstractplayer.h
+++ b/src/3rdparty/phonon/mmf/abstractplayer.h
@@ -97,13 +97,14 @@ public:
                   const QString &errorMessage = QString());
 
     Phonon::State state() const;
+
 Q_SIGNALS:
     void totalTimeChanged(qint64 length);
     void finished();
     void tick(qint64 time);
     void stateChanged(Phonon::State oldState,
                       Phonon::State newState);
-
+    void metaDataChanged(const QMultiMap<QString, QString>& metaData);
 
 protected:
     /**
diff --git a/src/3rdparty/phonon/mmf/audioplayer.cpp b/src/3rdparty/phonon/mmf/audioplayer.cpp
index 1d259a8..8fccfe6 100644
--- a/src/3rdparty/phonon/mmf/audioplayer.cpp
+++ b/src/3rdparty/phonon/mmf/audioplayer.cpp
@@ -182,8 +182,8 @@ void MMF::AudioPlayer::MapcInitComplete(TInt aError,
 
     if (KErrNone == aError) {
         maxVolumeChanged(m_player->MaxVolume());
-
         emit totalTimeChanged(totalTime());
+        updateMetaData();
         changeState(StoppedState);
     } else {
         // TODO: set different error states according to value of aError?
@@ -251,5 +251,24 @@ void MMF::AudioPlayer::MaloLoadingComplete()
 #endif // QT_PHONON_MMF_AUDIO_DRM
 
 
+//-----------------------------------------------------------------------------
+// Private functions
+//-----------------------------------------------------------------------------
+
+int MMF::AudioPlayer::numberOfMetaDataEntries() const
+{
+    int numberOfEntries = 0;
+    m_player->GetNumberOfMetaDataEntries(numberOfEntries); // ignoring return code
+    return numberOfEntries;
+}
+
+QPair<QString, QString> MMF::AudioPlayer::metaDataEntry(int index) const
+{
+    CMMFMetaDataEntry *entry = 0;
+    QT_TRAP_THROWING(entry = m_player->GetMetaDataEntryL(index));
+    return QPair<QString, QString>(qt_TDesC2QString(entry->Name()), qt_TDesC2QString(entry->Value()));
+}
+
+
 QT_END_NAMESPACE
 
diff --git a/src/3rdparty/phonon/mmf/audioplayer.h b/src/3rdparty/phonon/mmf/audioplayer.h
index 60ef436..bc60076 100644
--- a/src/3rdparty/phonon/mmf/audioplayer.h
+++ b/src/3rdparty/phonon/mmf/audioplayer.h
@@ -94,6 +94,10 @@ public:
 private:
     void construct();
 
+    // AbstractMediaPlayer
+    virtual int numberOfMetaDataEntries() const;
+    virtual QPair<QString, QString> metaDataEntry(int index) const;
+
 private:
     /**
      * Using CPlayerType typedef in order to be able to easily switch between
diff --git a/src/3rdparty/phonon/mmf/mediaobject.cpp b/src/3rdparty/phonon/mmf/mediaobject.cpp
index 74aaa58..f004fd7 100644
--- a/src/3rdparty/phonon/mmf/mediaobject.cpp
+++ b/src/3rdparty/phonon/mmf/mediaobject.cpp
@@ -322,6 +322,7 @@ void MMF::MediaObject::createPlayer(const MediaSource &source)
     connect(m_player.data(), SIGNAL(stateChanged(Phonon::State, Phonon::State)), SIGNAL(stateChanged(Phonon::State, Phonon::State)));
     connect(m_player.data(), SIGNAL(finished()), SIGNAL(finished()));
     connect(m_player.data(), SIGNAL(tick(qint64)), SIGNAL(tick(qint64)));
+    connect(m_player.data(), SIGNAL(metaDataChanged(const QMultiMap<QString, QString>&)), SIGNAL(metaDataChanged(const QMultiMap<QString, QString>&)));
 
     // We need to call setError() after doing the connects, otherwise the
     // error won't be received.
diff --git a/src/3rdparty/phonon/mmf/mmf_videoplayer.cpp b/src/3rdparty/phonon/mmf/mmf_videoplayer.cpp
index fe469cf..ba7d005 100644
--- a/src/3rdparty/phonon/mmf/mmf_videoplayer.cpp
+++ b/src/3rdparty/phonon/mmf/mmf_videoplayer.cpp
@@ -490,6 +490,19 @@ bool MMF::VideoPlayer::getNativeWindowSystemHandles()
     TRACE_RETURN("changed %d", changed);
 }
 
+int MMF::VideoPlayer::numberOfMetaDataEntries() const
+{
+    int numberOfEntries = 0;
+    TRAP_IGNORE(numberOfEntries = m_player->NumberOfMetaDataEntriesL());
+    return numberOfEntries;
+}
+
+QPair<QString, QString> MMF::VideoPlayer::metaDataEntry(int index) const
+{
+    CMMFMetaDataEntry *entry = 0;
+    QT_TRAP_THROWING(entry = m_player->MetaDataEntryL(index));
+    return QPair<QString, QString>(qt_TDesC2QString(entry->Name()), qt_TDesC2QString(entry->Value()));
+}
 
 QT_END_NAMESPACE
 
diff --git a/src/3rdparty/phonon/mmf/mmf_videoplayer.h b/src/3rdparty/phonon/mmf/mmf_videoplayer.h
index 8072404..fa4e59b 100644
--- a/src/3rdparty/phonon/mmf/mmf_videoplayer.h
+++ b/src/3rdparty/phonon/mmf/mmf_videoplayer.h
@@ -86,6 +86,10 @@ private:
 
     void updateMmfOutput();
 
+    // AbstractMediaPlayer
+    virtual int numberOfMetaDataEntries() const;
+    virtual QPair<QString, QString> metaDataEntry(int index) const;
+
 private:
     QScopedPointer<CVideoPlayerUtility> m_player;
 
diff --git a/src/plugins/phonon/mmf/plugin/plugin.pro b/src/plugins/phonon/mmf/plugin/plugin.pro
index 793c307..8a7de98 100644
--- a/src/plugins/phonon/mmf/plugin/plugin.pro
+++ b/src/plugins/phonon/mmf/plugin/plugin.pro
@@ -69,11 +69,12 @@ debug {
     LIBS += -lhal
 }
 
-LIBS += -lmediaclientvideo  # For CVideoPlayerUtility
-LIBS += -lcone              # For CCoeEnv
-LIBS += -lws32              # For RWindow
-LIBS += -lefsrv             # For file server
-LIBS += -lapgrfx -lapmime   # For recognizer
+LIBS += -lmediaclientvideo        # For CVideoPlayerUtility
+LIBS += -lcone                    # For CCoeEnv
+LIBS += -lws32                    # For RWindow
+LIBS += -lefsrv                   # For file server
+LIBS += -lapgrfx -lapmime         # For recognizer
+LIBS += -lmmfcontrollerframework  # For CMMFMetaDataEntry
 
 # These are for effects.
 LIBS += -lAudioEqualizerEffect -lBassBoostEffect -lDistanceAttenuationEffect -lDopplerBase -lEffectBase -lEnvironmentalReverbEffect -lListenerDopplerEffect -lListenerLocationEffect -lListenerOrientationEffect -lLocationBase -lLoudnessEffect -lOrientationBase -lSourceDopplerEffect -lSourceLocationEffect -lSourceOrientationEffect -lStereoWideningEffect
-- 
cgit v0.12


From e1a81c96790bee72ee4fbd2b0c4a7b48078c4ec1 Mon Sep 17 00:00:00 2001
From: Olivier Goffart <ogoffart@trolltech.com>
Date: Wed, 4 Nov 2009 11:41:31 +0100
Subject: Fixes StyleSheets: Incorrect display of custom style to QComboBox

Two problem:
 - When QWindowsStyle draw CC_ComboBox, it does not save/restor the
   painter, whilt it does modify the pen and the brush.
 - QStyleSheetStyle CE_ComboBoxLabel did not specify the palette role
   to paint the text with, leaving the one from the palette

Task-number: QTBUG-3974
Reviewed-by: Gabriel
---
 src/gui/styles/qstylesheetstyle.cpp | 2 +-
 src/gui/styles/qwindowsstyle.cpp    | 2 ++
 2 files changed, 3 insertions(+), 1 deletion(-)

diff --git a/src/gui/styles/qstylesheetstyle.cpp b/src/gui/styles/qstylesheetstyle.cpp
index dfe5209..e61658b 100644
--- a/src/gui/styles/qstylesheetstyle.cpp
+++ b/src/gui/styles/qstylesheetstyle.cpp
@@ -3675,7 +3675,7 @@ void QStyleSheetStyle::drawControl(ControlElement ce, const QStyleOption *opt, Q
             }
             if (!cb->currentText.isEmpty() && !cb->editable) {
                 drawItemText(p, editRect.adjusted(0, 0, 0, 0), Qt::AlignLeft | Qt::AlignVCenter, cb->palette,
-                             cb->state & State_Enabled, cb->currentText);
+                             cb->state & State_Enabled, cb->currentText, QPalette::Text);
             }
             p->restore();
             return;
diff --git a/src/gui/styles/qwindowsstyle.cpp b/src/gui/styles/qwindowsstyle.cpp
index 5cf738e..abce4d2 100644
--- a/src/gui/styles/qwindowsstyle.cpp
+++ b/src/gui/styles/qwindowsstyle.cpp
@@ -2994,6 +2994,7 @@ void QWindowsStyle::drawComplexControl(ComplexControl cc, const QStyleOptionComp
 #ifndef QT_NO_COMBOBOX
     case CC_ComboBox:
         if (const QStyleOptionComboBox *cmb = qstyleoption_cast<const QStyleOptionComboBox *>(opt)) {
+            p->save();
             QBrush editBrush = cmb->palette.brush(QPalette::Base);
             if ((cmb->subControls & SC_ComboBoxFrame)) {
                 if (cmb->frame) {
@@ -3063,6 +3064,7 @@ void QWindowsStyle::drawComplexControl(ComplexControl cc, const QStyleOptionComp
                     proxy()->drawPrimitive(PE_FrameFocusRect, &focus, p, widget);
                 }
             }
+            p->restore();
         }
         break;
 #endif // QT_NO_COMBOBOX
-- 
cgit v0.12


From 202dee4e4840ef899edcb638fabc28b281e7a2dd Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jan-Arve=20S=C3=A6ther?= <jan-arve.saether@nokia.com>
Date: Wed, 4 Nov 2009 12:51:12 +0100
Subject: Avoid warning on 64 bit systems

---
 src/corelib/tools/qmap.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/corelib/tools/qmap.h b/src/corelib/tools/qmap.h
index 65c3d2a..0441107 100644
--- a/src/corelib/tools/qmap.h
+++ b/src/corelib/tools/qmap.h
@@ -151,7 +151,7 @@ class QMap
     static inline int payload() { return sizeof(PayloadNode) - sizeof(QMapData::Node *); }
     static inline int alignment() {
 #ifdef Q_ALIGNOF
-        return qMax(sizeof(void*), Q_ALIGNOF(Node));
+        return int(qMax(sizeof(void*), Q_ALIGNOF(Node)));
 #else
         return 0;
 #endif
-- 
cgit v0.12


From a1ccc70d07235ac8f0a76c8d2393afc97f968060 Mon Sep 17 00:00:00 2001
From: Thierry Bastian <thierry.bastian@nokia.com>
Date: Wed, 4 Nov 2009 14:06:07 +0100
Subject: Fix to the unregistration of the animation to the global timer

The unregistration has to happen befaire calling virtual methods
to support changing the state in those functions.

Reviewed-by: ogoffart
---
 src/corelib/animation/qabstractanimation.cpp | 30 ++++++++++------------------
 1 file changed, 11 insertions(+), 19 deletions(-)

diff --git a/src/corelib/animation/qabstractanimation.cpp b/src/corelib/animation/qabstractanimation.cpp
index 7fa3ae3..4f93c1e 100644
--- a/src/corelib/animation/qabstractanimation.cpp
+++ b/src/corelib/animation/qabstractanimation.cpp
@@ -348,29 +348,26 @@ void QAbstractAnimationPrivate::setState(QAbstractAnimation::State newState)
     state = newState;
     QWeakPointer<QAbstractAnimation> guard(q);
 
-    q->updateState(oldState, newState);
-    if (!guard)
-        return;
+    //unregistration of the animation must always happen before calls to
+    //virtual function (updateState) to ensure a correct state of the timer
+    if (oldState == QAbstractAnimation::Running) {
+        if (newState == QAbstractAnimation::Paused && hasRegisteredTimer)
+            QUnifiedTimer::instance()->ensureTimerUpdate();
+        //the animation, is not running any more
+        QUnifiedTimer::instance()->unregisterAnimation(q);
+    }
 
-    //this is to be safe if updateState changes the state
-    if (state == oldState)
+    q->updateState(oldState, newState);
+    if (!guard || newState != state) //this is to be safe if updateState changes the state
         return;
 
     // Notify state change
     emit q->stateChanged(oldState, newState);
-    if (!guard)
+    if (!guard || newState != state) //this is to be safe if updateState changes the state
         return;
 
     switch (state) {
     case QAbstractAnimation::Paused:
-        if (hasRegisteredTimer)
-            // currentTime needs to be updated if pauseTimer is active
-            QUnifiedTimer::instance()->ensureTimerUpdate();
-        if (!guard)
-            return;
-        //here we're sure that we were in running state before and that the
-        //animation is currently registered
-        QUnifiedTimer::instance()->unregisterAnimation(q);
         break;
     case QAbstractAnimation::Running:
         {
@@ -390,15 +387,10 @@ void QAbstractAnimationPrivate::setState(QAbstractAnimation::State newState)
     case QAbstractAnimation::Stopped:
         // Leave running state.
         int dura = q->duration();
-        if (!guard)
-            return;
 
         if (deleteWhenStopped)
             q->deleteLater();
 
-        if (oldState == QAbstractAnimation::Running)
-            QUnifiedTimer::instance()->unregisterAnimation(q);
-
         if (dura == -1 || loopCount < 0
             || (oldDirection == QAbstractAnimation::Forward && (oldCurrentTime * (oldCurrentLoop + 1)) == (dura * loopCount))
             || (oldDirection == QAbstractAnimation::Backward && oldCurrentTime == 0)) {
-- 
cgit v0.12


From ff1bd9c821aa1e314d6ca738204cdd0ae60a8369 Mon Sep 17 00:00:00 2001
From: Olivier Goffart <ogoffart@trolltech.com>
Date: Wed, 4 Nov 2009 14:04:40 +0100
Subject: Fix crash in QMenu when using QWidgetAction

If the QWidgetAction is not the first in a menu, it crashed.
This is because when the QEvent::ActionRemoved is sent, the
event->before() is not set.  We need to find another way to
clean up the widgetItems list.

This basically revert 4b6ab00e6d68c7

Reviewed-by: Thierry
---
 src/gui/widgets/qmenu.cpp                      | 41 +++++++++++---------------
 src/gui/widgets/qmenu_p.h                      |  2 +-
 tests/auto/qwidgetaction/tst_qwidgetaction.cpp |  2 ++
 3 files changed, 21 insertions(+), 24 deletions(-)

diff --git a/src/gui/widgets/qmenu.cpp b/src/gui/widgets/qmenu.cpp
index 1b5d1cd..e78c1b4 100644
--- a/src/gui/widgets/qmenu.cpp
+++ b/src/gui/widgets/qmenu.cpp
@@ -273,7 +273,7 @@ void QMenuPrivate::updateActionRects() const
 
     for (int i = 0; i < actions.count(); ++i) {
         QAction *action = actions.at(i);
-        if (action->isSeparator() || !action->isVisible() || widgetItems.at(i))
+        if (action->isSeparator() || !action->isVisible() || widgetItems.contains(action))
             continue;
         //..and some members
         hasCheckableItems |= action->isCheckable();
@@ -301,7 +301,7 @@ void QMenuPrivate::updateActionRects() const
         const QFontMetrics &fm = opt.fontMetrics;
 
         QSize sz;
-        if (QWidget *w = widgetItems.at(i)) {
+        if (QWidget *w = widgetItems.value(action)) {
           sz = w->sizeHint().expandedTo(w->minimumSize()).expandedTo(w->minimumSizeHint()).boundedTo(w->maximumSize());
         } else {
             //calc what I think the size is..
@@ -370,7 +370,7 @@ void QMenuPrivate::updateActionRects() const
         rect.setWidth(max_column_width); //uniform width
 
         //we need to update the widgets geometry
-        if (QWidget *widget = widgetItems.at(i)) {
+        if (QWidget *widget = widgetItems.value(actions.at(i))) {
             widget->setGeometry(rect);
             widget->setVisible(actions.at(i)->isVisible());
         }
@@ -583,8 +583,7 @@ void QMenuPrivate::setCurrentAction(QAction *action, int popup, SelectionReason
             q->update(actionRect(action));
 
             if (reason == SelectedFromKeyboard) {
-                const int actionIndex = actions.indexOf(action);
-                QWidget *widget = widgetItems.at(actionIndex);
+                QWidget *widget = widgetItems.value(action);
                 if (widget) {
                     if (widget->focusPolicy() != Qt::NoFocus)
                         widget->setFocus(Qt::TabFocusReason);
@@ -800,7 +799,7 @@ void QMenuPrivate::scrollMenu(QAction *action, QMenuScroller::ScrollLocation loc
             current.moveTop(current.top() + delta);
 
             //we need to update the widgets geometry
-            if (QWidget *w = widgetItems.at(i))
+            if (QWidget *w = widgetItems.value(actions.at(i)))
                 w->setGeometry(current);
         }
     }
@@ -1392,11 +1391,12 @@ QMenu::QMenu(QMenuPrivate &dd, QWidget *parent)
 QMenu::~QMenu()
 {
     Q_D(QMenu);
-    for (int i = 0; i < d->widgetItems.count(); ++i) {
-        if (QWidget *widget = d->widgetItems.at(i)) {
-            QWidgetAction *action = static_cast<QWidgetAction *>(d->actions.at(i));
+    QHash<QAction *, QWidget *>::iterator it = d->widgetItems.begin();
+    for (; it != d->widgetItems.end(); ++it) {
+        if (QWidget *widget = it.value()) {
+            QWidgetAction *action = static_cast<QWidgetAction *>(it.key());
             action->releaseWidget(widget);
-            d->widgetItems[i] = 0;
+            *it = 0;
         }
     }
 
@@ -2151,7 +2151,7 @@ void QMenu::paintEvent(QPaintEvent *e)
         QAction *action = d->actions.at(i);
         QRect adjustedActionRect = d->actionRects.at(i);
         if (!e->rect().intersects(adjustedActionRect)
-            || d->widgetItems.at(i))
+            || d->widgetItems.value(action))
            continue;
         //set the clip region to be extra safe (and adjust for the scrollers)
         QRegion adjustedActionReg(adjustedActionRect);
@@ -2862,25 +2862,20 @@ void QMenu::actionEvent(QActionEvent *e)
             connect(e->action(), SIGNAL(triggered()), this, SLOT(_q_actionTriggered()));
             connect(e->action(), SIGNAL(hovered()), this, SLOT(_q_actionHovered()));
         }
-        QWidget *widget = 0;
-        if (QWidgetAction *wa = qobject_cast<QWidgetAction *>(e->action()))
-            widget = wa->requestWidget(this);
-
-        int index = d->actions.indexOf(e->action());
-        Q_ASSERT(index != -1);
-        d->widgetItems.insert(index, widget);
-
+        if (QWidgetAction *wa = qobject_cast<QWidgetAction *>(e->action())) {
+            QWidget *widget = wa->requestWidget(this);
+            if (widget)
+                d->widgetItems.insert(wa, widget);
+        }
     } else if (e->type() == QEvent::ActionRemoved) {
         e->action()->disconnect(this);
         if (e->action() == d->currentAction)
             d->currentAction = 0;
-        int index = d->actions.indexOf(e->before()) + 1;
         if (QWidgetAction *wa = qobject_cast<QWidgetAction *>(e->action())) {
-            if (QWidget *widget = d->widgetItems.at(index))
+            if (QWidget *widget = d->widgetItems.value(wa))
                 wa->releaseWidget(widget);
         }
-        Q_ASSERT(index != -1);
-        d->widgetItems.removeAt(index);
+        d->widgetItems.remove(e->action());
     }
 
 #ifdef Q_WS_MAC
diff --git a/src/gui/widgets/qmenu_p.h b/src/gui/widgets/qmenu_p.h
index 9348f7b..a5bde7c 100644
--- a/src/gui/widgets/qmenu_p.h
+++ b/src/gui/widgets/qmenu_p.h
@@ -190,7 +190,7 @@ public:
     QRect actionRect(QAction *) const;
 
     mutable QVector<QRect> actionRects;
-    mutable QWidgetList widgetItems;
+    mutable QHash<QAction *, QWidget *> widgetItems;
     void updateActionRects() const;
     QRect popupGeometry(const QWidget *widget) const;
     QRect popupGeometry(int screen = -1) const;
diff --git a/tests/auto/qwidgetaction/tst_qwidgetaction.cpp b/tests/auto/qwidgetaction/tst_qwidgetaction.cpp
index 50b3337..d25738f 100644
--- a/tests/auto/qwidgetaction/tst_qwidgetaction.cpp
+++ b/tests/auto/qwidgetaction/tst_qwidgetaction.cpp
@@ -395,7 +395,9 @@ void tst_QWidgetAction::releaseWidgetCrash()
     QMainWindow *w = new QMainWindow;
     QAction *a = new CrashedAction(w);
     QMenu *menu = w->menuBar()->addMenu("Test");
+    menu->addAction("foo");
     menu->addAction(a);
+    menu->addAction("bar");
     delete w;
 }
 
-- 
cgit v0.12


From be6357bfa96cdaffa5797fef99e95cac7121e5b3 Mon Sep 17 00:00:00 2001
From: Janne Anttila <janne.anttila@digia.com>
Date: Wed, 4 Nov 2009 15:21:37 +0200
Subject: Fixed modal dialog fading support in Symbian.

Switched to use S60 API instead of Symbian one, the rationale is given
below as an copy/paste from S60 docs:

"Cross-application fading support

Symbian OS provides some support for fading, but this only covers
fading within an application. The S60 UI can have more than one
application on the screen at once (in fact, since the system parts
of the Status pane are inside EikServer, it always has more than one
application on the screen). The S60 UI introduced the fading and
drawing system to manage the fading state for the whole system.

Application and UI control code for S60 should not attempt to set fade
for a popup window directly. Instead, the popup window should implement
the MAknFadedComponent interface, and should use the TAknPopupFader
support class to set the fade.

The application UI base classes interact with the fading and drawing
system by informing it when the foreground status of the application
changes. They also use it to implement system wide fading."

There is also task QTBUG-5393 to implement fading support in future
without S60 dependency.

Task-number: QTBUG-5181
Reviewed-by: Sami Merila
---
 src/gui/kernel/qapplication_p.h     |  2 +-
 src/gui/kernel/qapplication_s60.cpp |  4 ++--
 src/gui/kernel/qt_s60_p.h           | 23 ++++++++++++++++++++++-
 3 files changed, 25 insertions(+), 4 deletions(-)

diff --git a/src/gui/kernel/qapplication_p.h b/src/gui/kernel/qapplication_p.h
index 0fa7269..ec308c0 100644
--- a/src/gui/kernel/qapplication_p.h
+++ b/src/gui/kernel/qapplication_p.h
@@ -72,7 +72,7 @@
 #include <private/qgraphicssystem_qws_p.h>
 #endif
 #ifdef Q_OS_SYMBIAN
-#include <w32std.h> 
+#include <w32std.h>
 #endif
 
 QT_BEGIN_NAMESPACE
diff --git a/src/gui/kernel/qapplication_s60.cpp b/src/gui/kernel/qapplication_s60.cpp
index 1b0659a..5fe9536 100644
--- a/src/gui/kernel/qapplication_s60.cpp
+++ b/src/gui/kernel/qapplication_s60.cpp
@@ -1255,7 +1255,7 @@ bool QApplicationPrivate::modalState()
 void QApplicationPrivate::enterModal_sys(QWidget *widget)
 {
     if (widget) {
-        widget->effectiveWinId()->DrawableWindow()->FadeBehind(ETrue);
+        static_cast<QSymbianControl *>(widget->effectiveWinId())->FadeBehindPopup(ETrue);
         // Modal partial screen dialogs (like queries) capture pointer events.
         // ### FixMe: Add specialized behaviour for fullscreen modal dialogs
         widget->effectiveWinId()->SetGloballyCapturing(ETrue);
@@ -1270,7 +1270,7 @@ void QApplicationPrivate::enterModal_sys(QWidget *widget)
 void QApplicationPrivate::leaveModal_sys(QWidget *widget)
 {
     if (widget) {
-        widget->effectiveWinId()->DrawableWindow()->FadeBehind(EFalse);
+        static_cast<QSymbianControl *>(widget->effectiveWinId())->FadeBehindPopup(EFalse);
         // ### FixMe: Add specialized behaviour for fullscreen modal dialogs
         widget->effectiveWinId()->SetGloballyCapturing(EFalse);
         widget->effectiveWinId()->SetPointerCapture(EFalse);
diff --git a/src/gui/kernel/qt_s60_p.h b/src/gui/kernel/qt_s60_p.h
index 789d89e..3405bcf 100644
--- a/src/gui/kernel/qt_s60_p.h
+++ b/src/gui/kernel/qt_s60_p.h
@@ -73,6 +73,7 @@
 #include <akntitle.h>               // CAknTitlePane
 #include <akncontext.h>             // CAknContextPane
 #include <eikspane.h>               // CEikStatusPane
+#include <aknpopupfader.h>          // MAknFadedComponent and TAknPopupFader
 #endif
 
 QT_BEGIN_NAMESPACE
@@ -114,7 +115,7 @@ public:
     int supportsPremultipliedAlpha : 1;
     QApplication::QS60MainApplicationFactory s60ApplicationFactory; // typedef'ed pointer type
     static inline void updateScreenSize();
-	static inline RWsSession& wsSession();
+    static inline RWsSession& wsSession();
     static inline RWindowGroup& windowGroup();
     static inline CWsScreenDevice* screenDevice();
     static inline CCoeAppUi* appUi();
@@ -140,7 +141,11 @@ public:
 };
 class QLongTapTimer;
 
+
 class QSymbianControl : public CCoeControl, public QAbstractLongTapObserver
+#ifdef Q_WS_S60
+, public MAknFadedComponent
+#endif
 {
 public:
     DECLARE_TYPE_ID(0x51740000) // Fun fact: the two first values are "Qt" in ASCII.
@@ -165,6 +170,17 @@ public:
 
     void setFocusSafely(bool focus);
 
+#ifdef Q_WS_S60
+    void FadeBehindPopup(bool fade){ popupFader.FadeBehindPopup( this, this, fade); }
+
+protected: // from MAknFadedComponent
+    TInt CountFadedComponents() {return 1;}
+    CCoeControl* FadedComponent(TInt aIndex) {return this;}
+#else
+    #warning No fallback implementation for QSymbianControl::FadeBehindPopup
+    void FadeBehindPopup(bool /*fade*/){ }
+#endif
+
 protected:
     void Draw(const TRect& aRect) const;
     void SizeChanged();
@@ -189,6 +205,11 @@ private:
     bool m_ignoreFocusChanged;
     QLongTapTimer* m_longTapDetector;
     bool m_previousEventLongTap;
+
+#ifdef Q_WS_S60
+    // Fader object used to fade everything except this menu and the CBA.
+    TAknPopupFader popupFader;
+#endif
 };
 
 inline QS60Data::QS60Data()
-- 
cgit v0.12


From 375bbf981fb4fc9a910aa078f6b7caf19c255ae8 Mon Sep 17 00:00:00 2001
From: Kai Koehne <kai.koehne@nokia.com>
Date: Wed, 4 Nov 2009 15:08:30 +0100
Subject: Raise the limit for _not_ using multimedia timers to 20ms

To achieve 60FPS you need a new frame every 16ms -> this just missed
the original threshold of 15ms. This came up in the context of a Snake
game written in qml.

Reviewed-by: Bradley T. Hughes <bradley.hughes@nokia.com>
---
 src/corelib/kernel/qeventdispatcher_win.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/corelib/kernel/qeventdispatcher_win.cpp b/src/corelib/kernel/qeventdispatcher_win.cpp
index d13e1d1..b608d85 100644
--- a/src/corelib/kernel/qeventdispatcher_win.cpp
+++ b/src/corelib/kernel/qeventdispatcher_win.cpp
@@ -550,7 +550,7 @@ void QEventDispatcherWin32Private::registerTimer(WinTimerInfo *t)
     Q_Q(QEventDispatcherWin32);
 
     int ok = 0;
-    if (t->interval > 15 || !t->interval || !qtimeSetEvent) {
+    if (t->interval > 20 || !t->interval || !qtimeSetEvent) {
         ok = 1;
         if (!t->interval)  // optimization for single-shot-zero-timer
             QCoreApplication::postEvent(q, new QZeroTimerEvent(t->timerId));
-- 
cgit v0.12


From 3ac785411d860e48e14f6b2542b666a6d508cff1 Mon Sep 17 00:00:00 2001
From: Thierry Bastian <thierry.bastian@nokia.com>
Date: Wed, 4 Nov 2009 15:40:28 +0100
Subject: Result API review with Jasmin

QAbstractAnimation:
currentTime returns the "complete" current time
currentLoopTime() returns the time inside the current loop
add setPaused(bool) for consistency with QTimeLine
stateChanged: newState passed as first paramater (before oldState)
              for consistency with the reset of Qt

QAnimationGroup:
rename clearAnimations to clear
rename insertAnimationAt to insertAnimation
rename takeAnimationAt to takeAnimation

QSequentialAnimationGroup:
rename insertPauseAt to insertPause
---
 demos/sub-attaq/boat.cpp                           |   2 +-
 src/corelib/animation/qabstractanimation.cpp       |  46 +-
 src/corelib/animation/qabstractanimation.h         |  10 +-
 src/corelib/animation/qanimationgroup.cpp          |  28 +-
 src/corelib/animation/qanimationgroup.h            |   6 +-
 src/corelib/animation/qparallelanimationgroup.cpp  |   6 +-
 src/corelib/animation/qparallelanimationgroup.h    |   2 +-
 src/corelib/animation/qpauseanimation.cpp          |   2 +-
 src/corelib/animation/qpropertyanimation.cpp       |   6 +-
 src/corelib/animation/qpropertyanimation.h         |   2 +-
 .../animation/qsequentialanimationgroup.cpp        |  22 +-
 src/corelib/animation/qsequentialanimationgroup.h  |   4 +-
 src/corelib/animation/qvariantanimation.cpp        |   4 +-
 src/corelib/animation/qvariantanimation.h          |   2 +-
 src/gui/itemviews/qtreeview_p.h                    |   2 +-
 .../tst_qparallelanimationgroup.cpp                | 136 +++---
 .../qpropertyanimation/tst_qpropertyanimation.cpp  |  20 +-
 .../tst_qsequentialanimationgroup.cpp              | 506 ++++++++++-----------
 tests/benchmarks/qanimation/rectanimation.cpp      |   5 -
 tests/benchmarks/qanimation/rectanimation.h        |   1 -
 20 files changed, 416 insertions(+), 396 deletions(-)

diff --git a/demos/sub-attaq/boat.cpp b/demos/sub-attaq/boat.cpp
index cb40329..0ad31b1 100644
--- a/demos/sub-attaq/boat.cpp
+++ b/demos/sub-attaq/boat.cpp
@@ -68,7 +68,7 @@ static QAbstractAnimation *setupDestroyAnimation(Boat *boat)
         QPropertyAnimation *anim = new QPropertyAnimation(step, "opacity");
         anim->setEndValue(1);
         anim->setDuration(100);
-        group->insertAnimationAt(i-1, anim);
+        group->insertAnimation(i-1, anim);
 
         //and then fade-out
         QPropertyAnimation *anim2 = new QPropertyAnimation(step, "opacity");
diff --git a/src/corelib/animation/qabstractanimation.cpp b/src/corelib/animation/qabstractanimation.cpp
index 4f93c1e..0cdc40c 100644
--- a/src/corelib/animation/qabstractanimation.cpp
+++ b/src/corelib/animation/qabstractanimation.cpp
@@ -115,7 +115,7 @@
 */
 
 /*!
-    \fn QAbstractAnimation::stateChanged(QAbstractAnimation::State oldState, QAbstractAnimation::State newState)
+    \fn QAbstractAnimation::stateChanged(QAbstractAnimation::State newState, QAbstractAnimation::State oldState)
 
     QAbstractAnimation emits this signal whenever the state of the animation has
     changed from \a oldState to \a newState. This signal is emitted after the virtual
@@ -357,12 +357,12 @@ void QAbstractAnimationPrivate::setState(QAbstractAnimation::State newState)
         QUnifiedTimer::instance()->unregisterAnimation(q);
     }
 
-    q->updateState(oldState, newState);
+    q->updateState(newState, oldState);
     if (!guard || newState != state) //this is to be safe if updateState changes the state
         return;
 
     // Notify state change
-    emit q->stateChanged(oldState, newState);
+    emit q->stateChanged(newState, oldState);
     if (!guard || newState != state) //this is to be safe if updateState changes the state
         return;
 
@@ -635,6 +635,18 @@ int QAbstractAnimation::totalDuration() const
 }
 
 /*!
+    Returns the current time inside the current loop. It can go from 0 to duration().
+
+    \sa duration(), currentTime
+*/
+
+int QAbstractAnimation::currentLoopTime() const
+{
+    Q_D(const QAbstractAnimation);
+    return d->currentTime;
+}
+
+/*!
     \property QAbstractAnimation::currentTime
     \brief the current time and progress of the animation
 
@@ -643,17 +655,14 @@ int QAbstractAnimation::totalDuration() const
     the animation run, setting the current time automatically as the animation
     progresses.
 
-    The animation's current time starts at 0, and ends at duration(). If the
-    animation's loopCount is larger than 1, the current time will rewind and
-    start at 0 again for the consecutive loops. If the animation has a pause.
-    currentTime will also include the duration of the pause.
+    The animation's current time starts at 0, and ends at totalDuration().
 
-    \sa loopCount
+    \sa loopCount, currentLoopTime
  */
 int QAbstractAnimation::currentTime() const
 {
     Q_D(const QAbstractAnimation);
-    return d->currentTime;
+    return d->totalCurrentTime;
 }
 void QAbstractAnimation::setCurrentTime(int msecs)
 {
@@ -777,6 +786,21 @@ void QAbstractAnimation::resume()
 }
 
 /*!
+    If \a paused is true, the animation is paused.
+    If \a paused is false, the animation is resumed.
+
+    \sa state(), pause(), resume()
+*/
+void QAbstractAnimation::setPaused(bool paused)
+{
+    if (paused)
+        pause();
+    else
+        resume();
+}
+
+
+/*!
     \reimp
 */
 bool QAbstractAnimation::event(QEvent *event)
@@ -799,8 +823,8 @@ bool QAbstractAnimation::event(QEvent *event)
 
     \sa start(), stop(), pause(), resume()
 */
-void QAbstractAnimation::updateState(QAbstractAnimation::State oldState,
-                                     QAbstractAnimation::State newState)
+void QAbstractAnimation::updateState(QAbstractAnimation::State newState,
+                                     QAbstractAnimation::State oldState)
 {
     Q_UNUSED(oldState);
     Q_UNUSED(newState);
diff --git a/src/corelib/animation/qabstractanimation.h b/src/corelib/animation/qabstractanimation.h
index 3d608b6..3c6e12f 100644
--- a/src/corelib/animation/qabstractanimation.h
+++ b/src/corelib/animation/qabstractanimation.h
@@ -95,6 +95,9 @@ public:
     Direction direction() const;
     void setDirection(Direction direction);
 
+    int currentTime() const;
+    int currentLoopTime() const;
+
     int loopCount() const;
     void setLoopCount(int loopCount);
     int currentLoop() const;
@@ -102,11 +105,9 @@ public:
     virtual int duration() const = 0;
     int totalDuration() const;
 
-    int currentTime() const;
-
 Q_SIGNALS:
     void finished();
-    void stateChanged(QAbstractAnimation::State oldState, QAbstractAnimation::State newState);
+    void stateChanged(QAbstractAnimation::State newState, QAbstractAnimation::State oldState);
     void currentLoopChanged(int currentLoop);
     void directionChanged(QAbstractAnimation::Direction);
 
@@ -114,6 +115,7 @@ public Q_SLOTS:
     void start(QAbstractAnimation::DeletionPolicy policy = KeepWhenStopped);
     void pause();
     void resume();
+    void setPaused(bool);
     void stop();
     void setCurrentTime(int msecs);
 
@@ -122,7 +124,7 @@ protected:
     bool event(QEvent *event);
 
     virtual void updateCurrentTime(int currentTime) = 0;
-    virtual void updateState(QAbstractAnimation::State oldState, QAbstractAnimation::State newState);
+    virtual void updateState(QAbstractAnimation::State newState, QAbstractAnimation::State oldState);
     virtual void updateDirection(QAbstractAnimation::Direction direction);
 
 private:
diff --git a/src/corelib/animation/qanimationgroup.cpp b/src/corelib/animation/qanimationgroup.cpp
index 40f5936..64282ea 100644
--- a/src/corelib/animation/qanimationgroup.cpp
+++ b/src/corelib/animation/qanimationgroup.cpp
@@ -70,7 +70,7 @@
     QAnimationGroup provides methods for adding and retrieving
     animations. Besides that, you can remove animations by calling
     remove(), and clear the animation group by calling
-    clearAnimations(). You may keep track of changes in the group's
+    clear(). You may keep track of changes in the group's
     animations by listening to QEvent::ChildAdded and
     QEvent::ChildRemoved events.
 
@@ -151,7 +151,7 @@ int QAnimationGroup::animationCount() const
     Returns the index of \a animation. The returned index can be passed
     to the other functions that take an index as an argument.
 
-    \sa insertAnimationAt(), animationAt(), takeAnimationAt()
+    \sa insertAnimation(), animationAt(), takeAnimation()
 */
 int QAnimationGroup::indexOfAnimation(QAbstractAnimation *animation) const
 {
@@ -160,7 +160,7 @@ int QAnimationGroup::indexOfAnimation(QAbstractAnimation *animation) const
 }
 
 /*!
-    Adds \a animation to this group. This will call insertAnimationAt with
+    Adds \a animation to this group. This will call insertAnimation with
     index equals to animationCount().
 
     \note The group takes ownership of the animation.
@@ -170,7 +170,7 @@ int QAnimationGroup::indexOfAnimation(QAbstractAnimation *animation) const
 void QAnimationGroup::addAnimation(QAbstractAnimation *animation)
 {
     Q_D(QAnimationGroup);
-    insertAnimationAt(d->animations.count(), animation);
+    insertAnimation(d->animations.count(), animation);
 }
 
 /*!
@@ -180,14 +180,14 @@ void QAnimationGroup::addAnimation(QAbstractAnimation *animation)
 
     \note The group takes ownership of the animation.
 
-    \sa takeAnimationAt(), addAnimation(), indexOfAnimation(), removeAnimation()
+    \sa takeAnimation(), addAnimation(), indexOfAnimation(), removeAnimation()
 */
-void QAnimationGroup::insertAnimationAt(int index, QAbstractAnimation *animation)
+void QAnimationGroup::insertAnimation(int index, QAbstractAnimation *animation)
 {
     Q_D(QAnimationGroup);
 
     if (index < 0 || index > d->animations.size()) {
-        qWarning("QAnimationGroup::insertAnimationAt: index is out of bounds");
+        qWarning("QAnimationGroup::insertAnimation: index is out of bounds");
         return;
     }
 
@@ -205,7 +205,7 @@ void QAnimationGroup::insertAnimationAt(int index, QAbstractAnimation *animation
     Removes \a animation from this group. The ownership of \a animation is
     transferred to the caller.
 
-    \sa takeAnimationAt(), insertAnimationAt(), addAnimation()
+    \sa takeAnimation(), insertAnimation(), addAnimation()
 */
 void QAnimationGroup::removeAnimation(QAbstractAnimation *animation)
 {
@@ -221,7 +221,7 @@ void QAnimationGroup::removeAnimation(QAbstractAnimation *animation)
         return;
     }
 
-    takeAnimationAt(index);
+    takeAnimation(index);
 }
 
 /*!
@@ -229,13 +229,13 @@ void QAnimationGroup::removeAnimation(QAbstractAnimation *animation)
 
     \note The ownership of the animation is transferred to the caller.
 
-    \sa removeAnimation(), addAnimation(), insertAnimationAt(), indexOfAnimation()
+    \sa removeAnimation(), addAnimation(), insertAnimation(), indexOfAnimation()
 */
-QAbstractAnimation *QAnimationGroup::takeAnimationAt(int index)
+QAbstractAnimation *QAnimationGroup::takeAnimation(int index)
 {
     Q_D(QAnimationGroup);
     if (index < 0 || index >= d->animations.size()) {
-        qWarning("QAnimationGroup::takeAnimationAt: no animation at index %d", index);
+        qWarning("QAnimationGroup::takeAnimation: no animation at index %d", index);
         return 0;
     }
     QAbstractAnimation *animation = d->animations.at(index);
@@ -254,7 +254,7 @@ QAbstractAnimation *QAnimationGroup::takeAnimationAt(int index)
 
     \sa addAnimation(), removeAnimation()
 */
-void QAnimationGroup::clearAnimations()
+void QAnimationGroup::clear()
 {
     Q_D(QAnimationGroup);
     qDeleteAll(d->animations);
@@ -279,7 +279,7 @@ bool QAnimationGroup::event(QEvent *event)
         // case it might be called from the destructor.
         int index = d->animations.indexOf(a);
         if (index != -1)
-            takeAnimationAt(index);
+            takeAnimation(index);
     }
     return QAbstractAnimation::event(event);
 }
diff --git a/src/corelib/animation/qanimationgroup.h b/src/corelib/animation/qanimationgroup.h
index 86368a3..416ce3f 100644
--- a/src/corelib/animation/qanimationgroup.h
+++ b/src/corelib/animation/qanimationgroup.h
@@ -65,10 +65,10 @@ public:
     int animationCount() const;
     int indexOfAnimation(QAbstractAnimation *animation) const;
     void addAnimation(QAbstractAnimation *animation);
-    void insertAnimationAt(int index, QAbstractAnimation *animation);
+    void insertAnimation(int index, QAbstractAnimation *animation);
     void removeAnimation(QAbstractAnimation *animation);
-    QAbstractAnimation *takeAnimationAt(int index);
-    void clearAnimations();
+    QAbstractAnimation *takeAnimation(int index);
+    void clear();
 
 protected:
     QAnimationGroup(QAnimationGroupPrivate &dd, QObject *parent);
diff --git a/src/corelib/animation/qparallelanimationgroup.cpp b/src/corelib/animation/qparallelanimationgroup.cpp
index 0a04c14..2d37d10 100644
--- a/src/corelib/animation/qparallelanimationgroup.cpp
+++ b/src/corelib/animation/qparallelanimationgroup.cpp
@@ -182,11 +182,11 @@ void QParallelAnimationGroup::updateCurrentTime(int currentTime)
 /*!
     \reimp
 */
-void QParallelAnimationGroup::updateState(QAbstractAnimation::State oldState,
-                                          QAbstractAnimation::State newState)
+void QParallelAnimationGroup::updateState(QAbstractAnimation::State newState,
+                                          QAbstractAnimation::State oldState)
 {
     Q_D(QParallelAnimationGroup);
-    QAnimationGroup::updateState(oldState, newState);
+    QAnimationGroup::updateState(newState, oldState);
 
     switch (newState) {
     case Stopped:
diff --git a/src/corelib/animation/qparallelanimationgroup.h b/src/corelib/animation/qparallelanimationgroup.h
index 1cab91e..18ec885 100644
--- a/src/corelib/animation/qparallelanimationgroup.h
+++ b/src/corelib/animation/qparallelanimationgroup.h
@@ -68,7 +68,7 @@ protected:
     bool event(QEvent *event);
 
     void updateCurrentTime(int currentTime);
-    void updateState(QAbstractAnimation::State oldState, QAbstractAnimation::State newState);
+    void updateState(QAbstractAnimation::State newState, QAbstractAnimation::State oldState);
     void updateDirection(QAbstractAnimation::Direction direction);
 
 private:
diff --git a/src/corelib/animation/qpauseanimation.cpp b/src/corelib/animation/qpauseanimation.cpp
index 21e5b08..1b3b654 100644
--- a/src/corelib/animation/qpauseanimation.cpp
+++ b/src/corelib/animation/qpauseanimation.cpp
@@ -56,7 +56,7 @@
     It is not necessary to construct a QPauseAnimation yourself.
     QSequentialAnimationGroup provides the convenience functions
     \l{QSequentialAnimationGroup::}{addPause()} and
-    \l{QSequentialAnimationGroup::}{insertPauseAt()}. These functions
+    \l{QSequentialAnimationGroup::}{insertPause()}. These functions
     simply take the number of milliseconds the pause should last.
 
     \sa QSequentialAnimationGroup
diff --git a/src/corelib/animation/qpropertyanimation.cpp b/src/corelib/animation/qpropertyanimation.cpp
index 4742e54..3065083 100644
--- a/src/corelib/animation/qpropertyanimation.cpp
+++ b/src/corelib/animation/qpropertyanimation.cpp
@@ -250,8 +250,8 @@ void QPropertyAnimation::updateCurrentValue(const QVariant &value)
     If the startValue is not defined when the state of the animation changes from Stopped to Running,
     the current property value is used as the initial value for the animation.
 */
-void QPropertyAnimation::updateState(QAbstractAnimation::State oldState,
-                                     QAbstractAnimation::State newState)
+void QPropertyAnimation::updateState(QAbstractAnimation::State newState,
+                                     QAbstractAnimation::State oldState)
 {
     Q_D(QPropertyAnimation);
 
@@ -260,7 +260,7 @@ void QPropertyAnimation::updateState(QAbstractAnimation::State oldState,
         return;
     }
 
-    QVariantAnimation::updateState(oldState, newState);
+    QVariantAnimation::updateState(newState, oldState);
 
     QPropertyAnimation *animToStop = 0;
     {
diff --git a/src/corelib/animation/qpropertyanimation.h b/src/corelib/animation/qpropertyanimation.h
index 2e2ca3a..61efed9 100644
--- a/src/corelib/animation/qpropertyanimation.h
+++ b/src/corelib/animation/qpropertyanimation.h
@@ -73,7 +73,7 @@ public:
 protected:
     bool event(QEvent *event);
     void updateCurrentValue(const QVariant &value);
-    void updateState(QAbstractAnimation::State oldState, QAbstractAnimation::State newState);
+    void updateState(QAbstractAnimation::State newState, QAbstractAnimation::State oldState);
 
 private:
     Q_DISABLE_COPY(QPropertyAnimation)
diff --git a/src/corelib/animation/qsequentialanimationgroup.cpp b/src/corelib/animation/qsequentialanimationgroup.cpp
index 5ca560a..861e26e 100644
--- a/src/corelib/animation/qsequentialanimationgroup.cpp
+++ b/src/corelib/animation/qsequentialanimationgroup.cpp
@@ -50,7 +50,7 @@
     another has finished playing. The animations are played in the
     order they are added to the group (using
     \l{QAnimationGroup::}{addAnimation()} or
-    \l{QAnimationGroup::}{insertAnimationAt()}). The animation group
+    \l{QAnimationGroup::}{insertAnimation()}). The animation group
     finishes when its last animation has finished.
 
     At each moment there is at most one animation that is active in
@@ -59,7 +59,7 @@
 
     A sequential animation group can be treated as any other
     animation, i.e., it can be started, stopped, and added to other
-    groups. You can also call addPause() or insertPauseAt() to add a
+    groups. You can also call addPause() or insertPause() to add a
     pause to a sequential animation group.
 
     \code
@@ -269,7 +269,7 @@ QSequentialAnimationGroup::~QSequentialAnimationGroup()
     \l{QAnimationGroup::animationCount()}{animationCount} will be 
     increased by one.
 
-    \sa insertPauseAt(), QAnimationGroup::addAnimation()
+    \sa insertPause(), QAnimationGroup::addAnimation()
 */
 QPauseAnimation *QSequentialAnimationGroup::addPause(int msecs)
 {
@@ -282,19 +282,19 @@ QPauseAnimation *QSequentialAnimationGroup::addPause(int msecs)
     Inserts a pause of \a msecs milliseconds at \a index in this animation
     group.
 
-    \sa addPause(), QAnimationGroup::insertAnimationAt()
+    \sa addPause(), QAnimationGroup::insertAnimation()
 */
-QPauseAnimation *QSequentialAnimationGroup::insertPauseAt(int index, int msecs)
+QPauseAnimation *QSequentialAnimationGroup::insertPause(int index, int msecs)
 {
     Q_D(const QSequentialAnimationGroup);
 
     if (index < 0 || index > d->animations.size()) {
-        qWarning("QSequentialAnimationGroup::insertPauseAt: index is out of bounds");
+        qWarning("QSequentialAnimationGroup::insertPause: index is out of bounds");
         return 0;
     }
 
     QPauseAnimation *pause = new QPauseAnimation(msecs);
-    insertAnimationAt(index, pause);
+    insertAnimation(index, pause);
     return pause;
 }
 
@@ -382,11 +382,11 @@ void QSequentialAnimationGroup::updateCurrentTime(int currentTime)
 /*!
     \reimp
 */
-void QSequentialAnimationGroup::updateState(QAbstractAnimation::State oldState,
-                                            QAbstractAnimation::State newState)
+void QSequentialAnimationGroup::updateState(QAbstractAnimation::State newState,
+                                            QAbstractAnimation::State oldState)
 {
     Q_D(QSequentialAnimationGroup);
-    QAnimationGroup::updateState(oldState, newState);
+    QAnimationGroup::updateState(newState, oldState);
 
     if (!d->currentAnimation)
         return;
@@ -532,7 +532,7 @@ void QSequentialAnimationGroupPrivate::animationInsertedAt(int index)
     currentAnimationIndex = animations.indexOf(currentAnimation);
 
     if (index < currentAnimationIndex || currentLoop != 0) {
-        qWarning("QSequentialGroup::insertAnimationAt only supports to add animations after the current one.");
+        qWarning("QSequentialGroup::insertAnimation only supports to add animations after the current one.");
         return; //we're not affected because it is added after the current one
     }
 }
diff --git a/src/corelib/animation/qsequentialanimationgroup.h b/src/corelib/animation/qsequentialanimationgroup.h
index f30f851..97e7e01 100644
--- a/src/corelib/animation/qsequentialanimationgroup.h
+++ b/src/corelib/animation/qsequentialanimationgroup.h
@@ -65,7 +65,7 @@ public:
     ~QSequentialAnimationGroup();
 
     QPauseAnimation *addPause(int msecs);
-    QPauseAnimation *insertPauseAt(int index, int msecs);
+    QPauseAnimation *insertPause(int index, int msecs);
 
     QAbstractAnimation *currentAnimation() const;
     int duration() const;
@@ -78,7 +78,7 @@ protected:
     bool event(QEvent *event);
 
     void updateCurrentTime(int);
-    void updateState(QAbstractAnimation::State oldState, QAbstractAnimation::State newState);
+    void updateState(QAbstractAnimation::State newState, QAbstractAnimation::State oldState);
     void updateDirection(QAbstractAnimation::Direction direction);
 
 private:
diff --git a/src/corelib/animation/qvariantanimation.cpp b/src/corelib/animation/qvariantanimation.cpp
index de8185b..c735778 100644
--- a/src/corelib/animation/qvariantanimation.cpp
+++ b/src/corelib/animation/qvariantanimation.cpp
@@ -621,8 +621,8 @@ bool QVariantAnimation::event(QEvent *event)
 /*!
     \reimp
 */
-void QVariantAnimation::updateState(QAbstractAnimation::State oldState,
-                                    QAbstractAnimation::State newState)
+void QVariantAnimation::updateState(QAbstractAnimation::State newState,
+                                    QAbstractAnimation::State oldState)
 {
     Q_UNUSED(oldState);
     Q_UNUSED(newState);
diff --git a/src/corelib/animation/qvariantanimation.h b/src/corelib/animation/qvariantanimation.h
index bc57b1c..89d9b34 100644
--- a/src/corelib/animation/qvariantanimation.h
+++ b/src/corelib/animation/qvariantanimation.h
@@ -103,7 +103,7 @@ protected:
     bool event(QEvent *event);
 
     void updateCurrentTime(int);
-    void updateState(QAbstractAnimation::State oldState, QAbstractAnimation::State newState);
+    void updateState(QAbstractAnimation::State newState, QAbstractAnimation::State oldState);
 
     virtual void updateCurrentValue(const QVariant &value) = 0;
     virtual QVariant interpolated(const QVariant &from, const QVariant &to, qreal progress) const;
diff --git a/src/gui/itemviews/qtreeview_p.h b/src/gui/itemviews/qtreeview_p.h
index aad5837..d58dea3 100644
--- a/src/gui/itemviews/qtreeview_p.h
+++ b/src/gui/itemviews/qtreeview_p.h
@@ -105,7 +105,7 @@ public:
         int top() const { return startValue().toInt(); }
         QRect rect() const { QRect rect = viewport->rect(); rect.moveTop(top()); return rect; }
         void updateCurrentValue(const QVariant &) { viewport->update(rect()); }
-        void updateState(State, State state) { if (state == Stopped) before = after = QPixmap(); }
+        void updateState(State state, State) { if (state == Stopped) before = after = QPixmap(); }
     } animatedOperation;
     void prepareAnimatedOperation(int item, QVariantAnimation::Direction d);
     void beginAnimatedOperation();
diff --git a/tests/auto/qparallelanimationgroup/tst_qparallelanimationgroup.cpp b/tests/auto/qparallelanimationgroup/tst_qparallelanimationgroup.cpp
index 8d937e9..a26e0eb 100644
--- a/tests/auto/qparallelanimationgroup/tst_qparallelanimationgroup.cpp
+++ b/tests/auto/qparallelanimationgroup/tst_qparallelanimationgroup.cpp
@@ -119,8 +119,8 @@ class TestAnimation : public QVariantAnimation
     Q_OBJECT
 public:
     virtual void updateCurrentValue(const QVariant &value) { Q_UNUSED(value)};
-    virtual void updateState(QAbstractAnimation::State oldState,
-                             QAbstractAnimation::State newState)
+    virtual void updateState(QAbstractAnimation::State newState,
+                             QAbstractAnimation::State oldState)
     {
         Q_UNUSED(oldState)
         Q_UNUSED(newState)
@@ -135,8 +135,8 @@ public:
     TestAnimation2(int duration, QAbstractAnimation *animation) : QVariantAnimation(animation), m_duration(duration) {}
 
     virtual void updateCurrentValue(const QVariant &value) { Q_UNUSED(value)};
-    virtual void updateState(QAbstractAnimation::State oldState,
-                             QAbstractAnimation::State newState)
+    virtual void updateState(QAbstractAnimation::State newState,
+                             QAbstractAnimation::State oldState)
     {
         Q_UNUSED(oldState)
         Q_UNUSED(newState)
@@ -223,33 +223,33 @@ void tst_QParallelAnimationGroup::setCurrentTime()
     QCOMPARE(notTimeDriven->state(), QAnimationGroup::Stopped);
     QCOMPARE(loopsForever->state(), QAnimationGroup::Stopped);
 
-    QCOMPARE(group.currentTime(), 1);
-    QCOMPARE(a1_p_o1->currentTime(), 1);
-    QCOMPARE(a1_p_o2->currentTime(), 1);
-    QCOMPARE(a1_p_o3->currentTime(), 1);
-    QCOMPARE(notTimeDriven->currentTime(), 1);
-    QCOMPARE(loopsForever->currentTime(), 1);
+    QCOMPARE(group.currentLoopTime(), 1);
+    QCOMPARE(a1_p_o1->currentLoopTime(), 1);
+    QCOMPARE(a1_p_o2->currentLoopTime(), 1);
+    QCOMPARE(a1_p_o3->currentLoopTime(), 1);
+    QCOMPARE(notTimeDriven->currentLoopTime(), 1);
+    QCOMPARE(loopsForever->currentLoopTime(), 1);
 
     // Current time = 250
     group.setCurrentTime(250);
-    QCOMPARE(group.currentTime(), 250);
-    QCOMPARE(a1_p_o1->currentTime(), 250);
-    QCOMPARE(a1_p_o2->currentTime(), 0);
+    QCOMPARE(group.currentLoopTime(), 250);
+    QCOMPARE(a1_p_o1->currentLoopTime(), 250);
+    QCOMPARE(a1_p_o2->currentLoopTime(), 0);
     QCOMPARE(a1_p_o2->currentLoop(), 1);
-    QCOMPARE(a1_p_o3->currentTime(), 250);
-    QCOMPARE(notTimeDriven->currentTime(), 250);
-    QCOMPARE(loopsForever->currentTime(), 0);
+    QCOMPARE(a1_p_o3->currentLoopTime(), 250);
+    QCOMPARE(notTimeDriven->currentLoopTime(), 250);
+    QCOMPARE(loopsForever->currentLoopTime(), 0);
     QCOMPARE(loopsForever->currentLoop(), 1);
 
     // Current time = 251
     group.setCurrentTime(251);
-    QCOMPARE(group.currentTime(), 251);
-    QCOMPARE(a1_p_o1->currentTime(), 250);
-    QCOMPARE(a1_p_o2->currentTime(), 1);
+    QCOMPARE(group.currentLoopTime(), 251);
+    QCOMPARE(a1_p_o1->currentLoopTime(), 250);
+    QCOMPARE(a1_p_o2->currentLoopTime(), 1);
     QCOMPARE(a1_p_o2->currentLoop(), 1);
-    QCOMPARE(a1_p_o3->currentTime(), 250);
-    QCOMPARE(notTimeDriven->currentTime(), 251);
-    QCOMPARE(loopsForever->currentTime(), 1);
+    QCOMPARE(a1_p_o3->currentLoopTime(), 250);
+    QCOMPARE(notTimeDriven->currentLoopTime(), 251);
+    QCOMPARE(loopsForever->currentLoopTime(), 1);
 }
 
 void tst_QParallelAnimationGroup::stateChanged()
@@ -278,18 +278,18 @@ void tst_QParallelAnimationGroup::stateChanged()
     group.start();
     //all the animations should be started
     QCOMPARE(spy1.count(), 1);
-    QCOMPARE(qVariantValue<QAbstractAnimation::State>(spy1.last().at(1)), TestAnimation::Running);
+    QCOMPARE(qVariantValue<QAbstractAnimation::State>(spy1.last().first()), TestAnimation::Running);
     QCOMPARE(spy2.count(), 1);
-    QCOMPARE(qVariantValue<QAbstractAnimation::State>(spy2.last().at(1)), TestAnimation::Running);
+    QCOMPARE(qVariantValue<QAbstractAnimation::State>(spy2.last().first()), TestAnimation::Running);
     QCOMPARE(spy3.count(), 1);
-    QCOMPARE(qVariantValue<QAbstractAnimation::State>(spy3.last().at(1)), TestAnimation::Running);
+    QCOMPARE(qVariantValue<QAbstractAnimation::State>(spy3.last().first()), TestAnimation::Running);
     QCOMPARE(spy4.count(), 1);
-    QCOMPARE(qVariantValue<QAbstractAnimation::State>(spy4.last().at(1)), TestAnimation::Running);
+    QCOMPARE(qVariantValue<QAbstractAnimation::State>(spy4.last().first()), TestAnimation::Running);
 
     group.setCurrentTime(1500); //anim1 should be finished
     QCOMPARE(group.state(), QAnimationGroup::Running);
     QCOMPARE(spy1.count(), 2);
-    QCOMPARE(qVariantValue<QAbstractAnimation::State>(spy1.last().at(1)), TestAnimation::Stopped);
+    QCOMPARE(qVariantValue<QAbstractAnimation::State>(spy1.last().first()), TestAnimation::Stopped);
     QCOMPARE(spy2.count(), 1); //no change
     QCOMPARE(spy3.count(), 1); //no change
     QCOMPARE(spy4.count(), 1); //no change
@@ -298,7 +298,7 @@ void tst_QParallelAnimationGroup::stateChanged()
     QCOMPARE(group.state(), QAnimationGroup::Running);
     QCOMPARE(spy1.count(), 2); //no change
     QCOMPARE(spy2.count(), 2);
-    QCOMPARE(qVariantValue<QAbstractAnimation::State>(spy2.last().at(1)), TestAnimation::Stopped);
+    QCOMPARE(qVariantValue<QAbstractAnimation::State>(spy2.last().first()), TestAnimation::Stopped);
     QCOMPARE(spy3.count(), 1); //no change
     QCOMPARE(spy4.count(), 1); //no change
 
@@ -307,9 +307,9 @@ void tst_QParallelAnimationGroup::stateChanged()
     QCOMPARE(spy1.count(), 2); //no change
     QCOMPARE(spy2.count(), 2); //no change
     QCOMPARE(spy3.count(), 2);
-    QCOMPARE(qVariantValue<QAbstractAnimation::State>(spy3.last().at(1)), TestAnimation::Stopped);
+    QCOMPARE(qVariantValue<QAbstractAnimation::State>(spy3.last().first()), TestAnimation::Stopped);
     QCOMPARE(spy4.count(), 2);
-    QCOMPARE(qVariantValue<QAbstractAnimation::State>(spy4.last().at(1)), TestAnimation::Stopped);
+    QCOMPARE(qVariantValue<QAbstractAnimation::State>(spy4.last().first()), TestAnimation::Stopped);
 
     //cleanup
     spy1.clear();
@@ -326,22 +326,22 @@ void tst_QParallelAnimationGroup::stateChanged()
     QCOMPARE(spy1.count(), 0);
     QCOMPARE(spy2.count(), 0);
     QCOMPARE(spy3.count(), 1);
-    QCOMPARE(qVariantValue<QAbstractAnimation::State>(spy3.last().at(1)), TestAnimation::Running);
+    QCOMPARE(qVariantValue<QAbstractAnimation::State>(spy3.last().first()), TestAnimation::Running);
     QCOMPARE(spy4.count(), 1);
-    QCOMPARE(qVariantValue<QAbstractAnimation::State>(spy4.last().at(1)), TestAnimation::Running);
+    QCOMPARE(qVariantValue<QAbstractAnimation::State>(spy4.last().first()), TestAnimation::Running);
 
     group.setCurrentTime(1500); //anim2 should be started
     QCOMPARE(group.state(), QAnimationGroup::Running);
     QCOMPARE(spy1.count(), 0); //no change
     QCOMPARE(spy2.count(), 1);
-    QCOMPARE(qVariantValue<QAbstractAnimation::State>(spy2.last().at(1)), TestAnimation::Running);
+    QCOMPARE(qVariantValue<QAbstractAnimation::State>(spy2.last().first()), TestAnimation::Running);
     QCOMPARE(spy3.count(), 1); //no change
     QCOMPARE(spy4.count(), 1); //no change
 
     group.setCurrentTime(500); //anim1 is finally also started
     QCOMPARE(group.state(), QAnimationGroup::Running);
     QCOMPARE(spy1.count(), 1);
-    QCOMPARE(qVariantValue<QAbstractAnimation::State>(spy1.last().at(1)), TestAnimation::Running);
+    QCOMPARE(qVariantValue<QAbstractAnimation::State>(spy1.last().first()), TestAnimation::Running);
     QCOMPARE(spy2.count(), 1); //no change
     QCOMPARE(spy3.count(), 1); //no change
     QCOMPARE(spy4.count(), 1); //no change
@@ -349,13 +349,13 @@ void tst_QParallelAnimationGroup::stateChanged()
     group.setCurrentTime(0); //everything should be stopped
     QCOMPARE(group.state(), QAnimationGroup::Stopped);
     QCOMPARE(spy1.count(), 2);
-    QCOMPARE(qVariantValue<QAbstractAnimation::State>(spy1.last().at(1)), TestAnimation::Stopped);
+    QCOMPARE(qVariantValue<QAbstractAnimation::State>(spy1.last().first()), TestAnimation::Stopped);
     QCOMPARE(spy2.count(), 2);
-    QCOMPARE(qVariantValue<QAbstractAnimation::State>(spy2.last().at(1)), TestAnimation::Stopped);
+    QCOMPARE(qVariantValue<QAbstractAnimation::State>(spy2.last().first()), TestAnimation::Stopped);
     QCOMPARE(spy3.count(), 2);
-    QCOMPARE(qVariantValue<QAbstractAnimation::State>(spy3.last().at(1)), TestAnimation::Stopped);
+    QCOMPARE(qVariantValue<QAbstractAnimation::State>(spy3.last().first()), TestAnimation::Stopped);
     QCOMPARE(spy4.count(), 2);
-    QCOMPARE(qVariantValue<QAbstractAnimation::State>(spy4.last().at(1)), TestAnimation::Stopped);
+    QCOMPARE(qVariantValue<QAbstractAnimation::State>(spy4.last().first()), TestAnimation::Stopped);
 }
 
 void tst_QParallelAnimationGroup::clearGroup()
@@ -375,9 +375,9 @@ void tst_QParallelAnimationGroup::clearGroup()
         children[i] = group.animationAt(i);
     }
 
-    group.clearAnimations();
+    group.clear();
     QCOMPARE(group.animationCount(), 0);
-    QCOMPARE(group.currentTime(), 0);
+    QCOMPARE(group.currentLoopTime(), 0);
     for (int i = 0; i < animationCount; ++i)
         QVERIFY(children[i].isNull());
 }
@@ -460,9 +460,9 @@ void tst_QParallelAnimationGroup::updateChildrenWithRunningGroup()
     QCOMPARE(groupStateChangedSpy.count(), 1);
     QCOMPARE(childStateChangedSpy.count(), 1);
 
-    QCOMPARE(qVariantValue<QAbstractAnimation::State>(groupStateChangedSpy.at(0).at(1)),
+    QCOMPARE(qVariantValue<QAbstractAnimation::State>(groupStateChangedSpy.at(0).first()),
              QAnimationGroup::Running);
-    QCOMPARE(qVariantValue<QAbstractAnimation::State>(childStateChangedSpy.at(0).at(1)),
+    QCOMPARE(qVariantValue<QAbstractAnimation::State>(childStateChangedSpy.at(0).first()),
              QAnimationGroup::Running);
 
     // starting directly a running child will not have any effect
@@ -501,13 +501,13 @@ void tst_QParallelAnimationGroup::deleteChildrenWithRunningGroup()
     QCOMPARE(anim1->state(), QAnimationGroup::Running);
 
     QTest::qWait(80);
-    QVERIFY(group.currentTime() > 0);
+    QVERIFY(group.currentLoopTime() > 0);
 
     delete anim1;
     QVERIFY(group.animationCount() == 0);
     QCOMPARE(group.duration(), 0);
     QCOMPARE(group.state(), QAnimationGroup::Stopped);
-    QCOMPARE(group.currentTime(), 0); //that's the invariant
+    QCOMPARE(group.currentLoopTime(), 0); //that's the invariant
 }
 
 void tst_QParallelAnimationGroup::startChildrenWithStoppedGroup()
@@ -622,11 +622,11 @@ void tst_QParallelAnimationGroup::startGroupWithRunningChild()
     anim2.start();
     anim2.pause();
 
-    QCOMPARE(qVariantValue<QAbstractAnimation::State>(stateChangedSpy1.at(0).at(1)),
+    QCOMPARE(qVariantValue<QAbstractAnimation::State>(stateChangedSpy1.at(0).first()),
              QAnimationGroup::Running);
-    QCOMPARE(qVariantValue<QAbstractAnimation::State>(stateChangedSpy2.at(0).at(1)),
+    QCOMPARE(qVariantValue<QAbstractAnimation::State>(stateChangedSpy2.at(0).first()),
              QAnimationGroup::Running);
-    QCOMPARE(qVariantValue<QAbstractAnimation::State>(stateChangedSpy2.at(1).at(1)),
+    QCOMPARE(qVariantValue<QAbstractAnimation::State>(stateChangedSpy2.at(1).first()),
              QAnimationGroup::Paused);
 
     QCOMPARE(group.state(), QAnimationGroup::Stopped);
@@ -636,15 +636,15 @@ void tst_QParallelAnimationGroup::startGroupWithRunningChild()
     group.start();
 
     QCOMPARE(stateChangedSpy1.count(), 3);
-    QCOMPARE(qVariantValue<QAbstractAnimation::State>(stateChangedSpy1.at(1).at(1)),
+    QCOMPARE(qVariantValue<QAbstractAnimation::State>(stateChangedSpy1.at(1).first()),
              QAnimationGroup::Stopped);
-    QCOMPARE(qVariantValue<QAbstractAnimation::State>(stateChangedSpy1.at(2).at(1)),
+    QCOMPARE(qVariantValue<QAbstractAnimation::State>(stateChangedSpy1.at(2).first()),
              QAnimationGroup::Running);
 
     QCOMPARE(stateChangedSpy2.count(), 4);
-    QCOMPARE(qVariantValue<QAbstractAnimation::State>(stateChangedSpy2.at(2).at(1)),
+    QCOMPARE(qVariantValue<QAbstractAnimation::State>(stateChangedSpy2.at(2).first()),
              QAnimationGroup::Stopped);
-    QCOMPARE(qVariantValue<QAbstractAnimation::State>(stateChangedSpy2.at(3).at(1)),
+    QCOMPARE(qVariantValue<QAbstractAnimation::State>(stateChangedSpy2.at(3).first()),
              QAnimationGroup::Running);
 
     QCOMPARE(group.state(), QAnimationGroup::Running);
@@ -687,19 +687,19 @@ void tst_QParallelAnimationGroup::zeroDurationAnimation()
     group.start();
     QCOMPARE(stateChangedSpy1.count(), 2);
     QCOMPARE(finishedSpy1.count(), 1);
-    QCOMPARE(qVariantValue<QAbstractAnimation::State>(stateChangedSpy1.at(0).at(1)),
+    QCOMPARE(qVariantValue<QAbstractAnimation::State>(stateChangedSpy1.at(0).first()),
              QAnimationGroup::Running);
-    QCOMPARE(qVariantValue<QAbstractAnimation::State>(stateChangedSpy1.at(1).at(1)),
+    QCOMPARE(qVariantValue<QAbstractAnimation::State>(stateChangedSpy1.at(1).first()),
              QAnimationGroup::Stopped);
 
     QCOMPARE(stateChangedSpy2.count(), 1);
     QCOMPARE(finishedSpy2.count(), 0);
-    QCOMPARE(qVariantValue<QAbstractAnimation::State>(stateChangedSpy1.at(0).at(1)),
+    QCOMPARE(qVariantValue<QAbstractAnimation::State>(stateChangedSpy1.at(0).first()),
              QAnimationGroup::Running);
 
     QCOMPARE(stateChangedSpy3.count(), 1);
     QCOMPARE(finishedSpy3.count(), 0);
-    QCOMPARE(qVariantValue<QAbstractAnimation::State>(stateChangedSpy3.at(0).at(1)),
+    QCOMPARE(qVariantValue<QAbstractAnimation::State>(stateChangedSpy3.at(0).first()),
              QAnimationGroup::Running);
 
 
@@ -762,9 +762,9 @@ void tst_QParallelAnimationGroup::stopUncontrolledAnimations()
     group.start();
 
     QCOMPARE(stateChangedSpy.count(), 2);
-    QCOMPARE(qVariantValue<QAbstractAnimation::State>(stateChangedSpy.at(0).at(1)),
+    QCOMPARE(qVariantValue<QAbstractAnimation::State>(stateChangedSpy.at(0).first()),
              QAnimationGroup::Running);
-    QCOMPARE(qVariantValue<QAbstractAnimation::State>(stateChangedSpy.at(1).at(1)),
+    QCOMPARE(qVariantValue<QAbstractAnimation::State>(stateChangedSpy.at(1).first()),
              QAnimationGroup::Stopped);
 
     QCOMPARE(group.state(), QAnimationGroup::Running);
@@ -915,9 +915,9 @@ void tst_QParallelAnimationGroup::loopCount()
 
     group.setCurrentTime(currentGroupTime);
 
-    QCOMPARE(anim1.currentTime(), expected1.time);
-    QCOMPARE(anim2.currentTime(), expected2.time);
-    QCOMPARE(anim3.currentTime(), expected3.time);
+    QCOMPARE(anim1.currentLoopTime(), expected1.time);
+    QCOMPARE(anim2.currentLoopTime(), expected2.time);
+    QCOMPARE(anim3.currentLoopTime(), expected3.time);
 
     if (expected1.state >=0)
         QCOMPARE(int(anim1.state()), expected1.state);
@@ -968,22 +968,22 @@ void tst_QParallelAnimationGroup::pauseResume()
     QCOMPARE(anim->state(), QAnimationGroup::Running);
     QCOMPARE(spy.count(), 1);
     spy.clear();
-    const int currentTime = group.currentTime();
-    QCOMPARE(anim->currentTime(), currentTime);
+    const int currentTime = group.currentLoopTime();
+    QCOMPARE(anim->currentLoopTime(), currentTime);
 
     group.pause();
     QCOMPARE(group.state(), QAnimationGroup::Paused);
-    QCOMPARE(group.currentTime(), currentTime);
+    QCOMPARE(group.currentLoopTime(), currentTime);
     QCOMPARE(anim->state(), QAnimationGroup::Paused);
-    QCOMPARE(anim->currentTime(), currentTime);
+    QCOMPARE(anim->currentLoopTime(), currentTime);
     QCOMPARE(spy.count(), 1);
     spy.clear();
 
     group.resume();
     QCOMPARE(group.state(), QAnimationGroup::Running);
-    QCOMPARE(group.currentTime(), currentTime);
+    QCOMPARE(group.currentLoopTime(), currentTime);
     QCOMPARE(anim->state(), QAnimationGroup::Running);
-    QCOMPARE(anim->currentTime(), currentTime);
+    QCOMPARE(anim->currentLoopTime(), currentTime);
     QCOMPARE(spy.count(), 1);
 
     group.stop();
@@ -991,10 +991,10 @@ void tst_QParallelAnimationGroup::pauseResume()
     new TestAnimation2(500, &group);
     group.start();
     QCOMPARE(spy.count(), 1); //the animation should have been started
-    QCOMPARE(qVariantValue<QAbstractAnimation::State>(spy.last().at(1)), TestAnimation::Running);
+    QCOMPARE(qVariantValue<QAbstractAnimation::State>(spy.last().first()), TestAnimation::Running);
     group.setCurrentTime(250); //end of first animation
     QCOMPARE(spy.count(), 2); //the animation should have been stopped
-    QCOMPARE(qVariantValue<QAbstractAnimation::State>(spy.last().at(1)), TestAnimation::Stopped);
+    QCOMPARE(qVariantValue<QAbstractAnimation::State>(spy.last().first()), TestAnimation::Stopped);
     group.pause();
     QCOMPARE(spy.count(), 2); //this shouldn't have changed
     group.resume();
diff --git a/tests/auto/qpropertyanimation/tst_qpropertyanimation.cpp b/tests/auto/qpropertyanimation/tst_qpropertyanimation.cpp
index 56c1ced..f41fff1 100644
--- a/tests/auto/qpropertyanimation/tst_qpropertyanimation.cpp
+++ b/tests/auto/qpropertyanimation/tst_qpropertyanimation.cpp
@@ -225,7 +225,7 @@ void tst_QPropertyAnimation::setCurrentTime()
     animation.setLoopCount(loopCount);
     animation.setCurrentTime(currentTime);
 
-    QCOMPARE(animation.currentTime(), testCurrentTime);
+    QCOMPARE(animation.currentLoopTime(), testCurrentTime);
     QCOMPARE(animation.currentLoop(), testCurrentLoop);
 }
 
@@ -280,7 +280,7 @@ void tst_QPropertyAnimation::statesAndSignals()
     QCOMPARE(anim->state(), QAnimationGroup::Stopped);
     QCOMPARE(runningSpy.count(), 1); //anim must have stopped
     QCOMPARE(finishedSpy.count(), 0);
-    QCOMPARE(anim->currentTime(), 0);
+    QCOMPARE(anim->currentLoopTime(), 0);
     QCOMPARE(anim->currentLoop(), 0);
     QCOMPARE(currentLoopSpy.count(), 2);
     runningSpy.clear();
@@ -291,7 +291,7 @@ void tst_QPropertyAnimation::statesAndSignals()
     QCOMPARE(runningSpy.count(), 2); //started and stopped again
     runningSpy.clear();
     QCOMPARE(finishedSpy.count(), 1);
-    QCOMPARE(anim->currentTime(), 100);
+    QCOMPARE(anim->currentLoopTime(), 100);
     QCOMPARE(anim->currentLoop(), 2);
     QCOMPARE(currentLoopSpy.count(), 4);
 
@@ -312,7 +312,7 @@ void tst_QPropertyAnimation::statesAndSignals()
     QCOMPARE(anim->currentLoop(), 2);
     QCOMPARE(runningSpy.count(), 1); // anim has stopped
     QCOMPARE(finishedSpy.count(), 2);
-    QCOMPARE(anim->currentTime(), 100);
+    QCOMPARE(anim->currentLoopTime(), 100);
 
     delete anim;
 }
@@ -864,16 +864,16 @@ void tst_QPropertyAnimation::zeroDurationStart()
     //let's check the first state change
     const QVariantList firstChange = spy.first();
     //old state
-    QCOMPARE(qVariantValue<QAbstractAnimation::State>(firstChange.first()), QAbstractAnimation::Stopped);
+    QCOMPARE(qVariantValue<QAbstractAnimation::State>(firstChange.last()), QAbstractAnimation::Stopped);
     //new state
-    QCOMPARE(qVariantValue<QAbstractAnimation::State>(firstChange.last()), QAbstractAnimation::Running);
+    QCOMPARE(qVariantValue<QAbstractAnimation::State>(firstChange.first()), QAbstractAnimation::Running);
 
     //let's check the first state change
     const QVariantList secondChange = spy.last();
     //old state
-    QCOMPARE(qVariantValue<QAbstractAnimation::State>(secondChange.first()), QAbstractAnimation::Running);
+    QCOMPARE(qVariantValue<QAbstractAnimation::State>(secondChange.last()), QAbstractAnimation::Running);
     //new state
-    QCOMPARE(qVariantValue<QAbstractAnimation::State>(secondChange.last()), QAbstractAnimation::Stopped);
+    QCOMPARE(qVariantValue<QAbstractAnimation::State>(secondChange.first()), QAbstractAnimation::Stopped);
 }
 
 #define Pause 1
@@ -1171,9 +1171,9 @@ public:
         innerAnim->start();
     }
 
-    void updateState(QAbstractAnimation::State oldState, QAbstractAnimation::State newState)
+    void updateState(QAbstractAnimation::State newState, QAbstractAnimation::State oldState)
     {
-        QPropertyAnimation::updateState(oldState, newState);
+        QPropertyAnimation::updateState(newState, oldState);
         if (newState == QAbstractAnimation::Stopped)
             delete innerAnim;
     }
diff --git a/tests/auto/qsequentialanimationgroup/tst_qsequentialanimationgroup.cpp b/tests/auto/qsequentialanimationgroup/tst_qsequentialanimationgroup.cpp
index f6afc5b..28fccac 100644
--- a/tests/auto/qsequentialanimationgroup/tst_qsequentialanimationgroup.cpp
+++ b/tests/auto/qsequentialanimationgroup/tst_qsequentialanimationgroup.cpp
@@ -87,7 +87,7 @@ private slots:
     void currentAnimation();
     void currentAnimationWithZeroDuration();
     void insertAnimation();
-    void clearAnimations();
+    void clear();
     void pauseResume();
 };
 
@@ -134,8 +134,8 @@ class TestAnimation : public QVariantAnimation
     Q_OBJECT
 public:
     virtual void updateCurrentValue(const QVariant &value) { Q_UNUSED(value)};
-    virtual void updateState(QAbstractAnimation::State oldState,
-                             QAbstractAnimation::State newState)
+    virtual void updateState(QAbstractAnimation::State newState,
+                             QAbstractAnimation::State oldState)
     {
         Q_UNUSED(oldState)
         Q_UNUSED(newState)
@@ -208,119 +208,119 @@ void tst_QSequentialAnimationGroup::setCurrentTime()
     QCOMPARE(sequence2->state(), QAnimationGroup::Stopped);
     QCOMPARE(a1_s_o2->state(), QAnimationGroup::Stopped);
 
-    QCOMPARE(group.currentTime(), 1);
-    QCOMPARE(sequence->currentTime(), 1);
-    QCOMPARE(a1_s_o1->currentTime(), 1);
-    QCOMPARE(a2_s_o1->currentTime(), 0);
-    QCOMPARE(a3_s_o1->currentTime(), 0);
-    QCOMPARE(a1_s_o2->currentTime(), 0);
-    QCOMPARE(a1_s_o3->currentTime(), 0);
+    QCOMPARE(group.currentLoopTime(), 1);
+    QCOMPARE(sequence->currentLoopTime(), 1);
+    QCOMPARE(a1_s_o1->currentLoopTime(), 1);
+    QCOMPARE(a2_s_o1->currentLoopTime(), 0);
+    QCOMPARE(a3_s_o1->currentLoopTime(), 0);
+    QCOMPARE(a1_s_o2->currentLoopTime(), 0);
+    QCOMPARE(a1_s_o3->currentLoopTime(), 0);
 
     // Current time = 250
     group.setCurrentTime(250);
-    QCOMPARE(group.currentTime(), 250);
-    QCOMPARE(sequence->currentTime(), 250);
-    QCOMPARE(a1_s_o1->currentTime(), 250);
-    QCOMPARE(a2_s_o1->currentTime(), 0);
-    QCOMPARE(a3_s_o1->currentTime(), 0);
-    QCOMPARE(a1_s_o2->currentTime(), 0);
-    QCOMPARE(a1_s_o3->currentTime(), 0);
+    QCOMPARE(group.currentLoopTime(), 250);
+    QCOMPARE(sequence->currentLoopTime(), 250);
+    QCOMPARE(a1_s_o1->currentLoopTime(), 250);
+    QCOMPARE(a2_s_o1->currentLoopTime(), 0);
+    QCOMPARE(a3_s_o1->currentLoopTime(), 0);
+    QCOMPARE(a1_s_o2->currentLoopTime(), 0);
+    QCOMPARE(a1_s_o3->currentLoopTime(), 0);
 
     // Current time = 251
     group.setCurrentTime(251);
-    QCOMPARE(group.currentTime(), 251);
-    QCOMPARE(sequence->currentTime(), 251);
-    QCOMPARE(a1_s_o1->currentTime(), 250);
-    QCOMPARE(a2_s_o1->currentTime(), 1);
+    QCOMPARE(group.currentLoopTime(), 251);
+    QCOMPARE(sequence->currentLoopTime(), 251);
+    QCOMPARE(a1_s_o1->currentLoopTime(), 250);
+    QCOMPARE(a2_s_o1->currentLoopTime(), 1);
     QCOMPARE(a2_s_o1->currentLoop(), 0);
-    QCOMPARE(a3_s_o1->currentTime(), 0);
-    QCOMPARE(sequence2->currentTime(), 0);
-    QCOMPARE(a1_s_o2->currentTime(), 0);
-    QCOMPARE(a1_s_o3->currentTime(), 0);
+    QCOMPARE(a3_s_o1->currentLoopTime(), 0);
+    QCOMPARE(sequence2->currentLoopTime(), 0);
+    QCOMPARE(a1_s_o2->currentLoopTime(), 0);
+    QCOMPARE(a1_s_o3->currentLoopTime(), 0);
 
     // Current time = 750
     group.setCurrentTime(750);
-    QCOMPARE(group.currentTime(), 750);
-    QCOMPARE(sequence->currentTime(), 750);
-    QCOMPARE(a1_s_o1->currentTime(), 250);
-    QCOMPARE(a2_s_o1->currentTime(), 0);
+    QCOMPARE(group.currentLoopTime(), 750);
+    QCOMPARE(sequence->currentLoopTime(), 750);
+    QCOMPARE(a1_s_o1->currentLoopTime(), 250);
+    QCOMPARE(a2_s_o1->currentLoopTime(), 0);
     QCOMPARE(a2_s_o1->currentLoop(), 2);
-    QCOMPARE(a3_s_o1->currentTime(), 0);
-    QCOMPARE(sequence2->currentTime(), 0);
-    QCOMPARE(a1_s_o2->currentTime(), 0);
-    QCOMPARE(a1_s_o3->currentTime(), 0);
+    QCOMPARE(a3_s_o1->currentLoopTime(), 0);
+    QCOMPARE(sequence2->currentLoopTime(), 0);
+    QCOMPARE(a1_s_o2->currentLoopTime(), 0);
+    QCOMPARE(a1_s_o3->currentLoopTime(), 0);
 
     // Current time = 1000
     group.setCurrentTime(1000);
-    QCOMPARE(group.currentTime(), 1000);
-    QCOMPARE(sequence->currentTime(), 1000);
-    QCOMPARE(a1_s_o1->currentTime(), 250);
-    QCOMPARE(a2_s_o1->currentTime(), 250);
+    QCOMPARE(group.currentLoopTime(), 1000);
+    QCOMPARE(sequence->currentLoopTime(), 1000);
+    QCOMPARE(a1_s_o1->currentLoopTime(), 250);
+    QCOMPARE(a2_s_o1->currentLoopTime(), 250);
     QCOMPARE(a2_s_o1->currentLoop(), 2);
-    QCOMPARE(a3_s_o1->currentTime(), 0);
-    QCOMPARE(sequence2->currentTime(), 0);
-    QCOMPARE(a1_s_o2->currentTime(), 0);
-    QCOMPARE(a1_s_o3->currentTime(), 0);
+    QCOMPARE(a3_s_o1->currentLoopTime(), 0);
+    QCOMPARE(sequence2->currentLoopTime(), 0);
+    QCOMPARE(a1_s_o2->currentLoopTime(), 0);
+    QCOMPARE(a1_s_o3->currentLoopTime(), 0);
 
     // Current time = 1010
     group.setCurrentTime(1010);
-    QCOMPARE(group.currentTime(), 1010);
-    QCOMPARE(sequence->currentTime(), 1010);
-    QCOMPARE(a1_s_o1->currentTime(), 250);
-    QCOMPARE(a2_s_o1->currentTime(), 250);
+    QCOMPARE(group.currentLoopTime(), 1010);
+    QCOMPARE(sequence->currentLoopTime(), 1010);
+    QCOMPARE(a1_s_o1->currentLoopTime(), 250);
+    QCOMPARE(a2_s_o1->currentLoopTime(), 250);
     QCOMPARE(a2_s_o1->currentLoop(), 2);
-    QCOMPARE(a3_s_o1->currentTime(), 10);
-    QCOMPARE(sequence2->currentTime(), 0);
-    QCOMPARE(a1_s_o2->currentTime(), 0);
-    QCOMPARE(a1_s_o3->currentTime(), 0);
+    QCOMPARE(a3_s_o1->currentLoopTime(), 10);
+    QCOMPARE(sequence2->currentLoopTime(), 0);
+    QCOMPARE(a1_s_o2->currentLoopTime(), 0);
+    QCOMPARE(a1_s_o3->currentLoopTime(), 0);
 
     // Current time = 1250
     group.setCurrentTime(1250);
-    QCOMPARE(group.currentTime(), 1250);
-    QCOMPARE(sequence->currentTime(), 1250);
-    QCOMPARE(a1_s_o1->currentTime(), 250);
-    QCOMPARE(a2_s_o1->currentTime(), 250);
+    QCOMPARE(group.currentLoopTime(), 1250);
+    QCOMPARE(sequence->currentLoopTime(), 1250);
+    QCOMPARE(a1_s_o1->currentLoopTime(), 250);
+    QCOMPARE(a2_s_o1->currentLoopTime(), 250);
     QCOMPARE(a2_s_o1->currentLoop(), 2);
-    QCOMPARE(a3_s_o1->currentTime(), 250);
-    QCOMPARE(sequence2->currentTime(), 0);
-    QCOMPARE(a1_s_o2->currentTime(), 0);
-    QCOMPARE(a1_s_o3->currentTime(), 0);
+    QCOMPARE(a3_s_o1->currentLoopTime(), 250);
+    QCOMPARE(sequence2->currentLoopTime(), 0);
+    QCOMPARE(a1_s_o2->currentLoopTime(), 0);
+    QCOMPARE(a1_s_o3->currentLoopTime(), 0);
 
     // Current time = 1500
     group.setCurrentTime(1500);
-    QCOMPARE(group.currentTime(), 1500);
-    QCOMPARE(sequence->currentTime(), 1250);
-    QCOMPARE(a1_s_o1->currentTime(), 250);
-    QCOMPARE(a2_s_o1->currentTime(), 250);
+    QCOMPARE(group.currentLoopTime(), 1500);
+    QCOMPARE(sequence->currentLoopTime(), 1250);
+    QCOMPARE(a1_s_o1->currentLoopTime(), 250);
+    QCOMPARE(a2_s_o1->currentLoopTime(), 250);
     QCOMPARE(a2_s_o1->currentLoop(), 2);
-    QCOMPARE(a3_s_o1->currentTime(), 250);
-    QCOMPARE(sequence2->currentTime(), 250);
-    QCOMPARE(a1_s_o2->currentTime(), 250);
-    QCOMPARE(a1_s_o3->currentTime(), 0);
+    QCOMPARE(a3_s_o1->currentLoopTime(), 250);
+    QCOMPARE(sequence2->currentLoopTime(), 250);
+    QCOMPARE(a1_s_o2->currentLoopTime(), 250);
+    QCOMPARE(a1_s_o3->currentLoopTime(), 0);
 
     // Current time = 1750
     group.setCurrentTime(1750);
-    QCOMPARE(group.currentTime(), 1750);
-    QCOMPARE(sequence->currentTime(), 1250);
-    QCOMPARE(a1_s_o1->currentTime(), 250);
-    QCOMPARE(a2_s_o1->currentTime(), 250);
+    QCOMPARE(group.currentLoopTime(), 1750);
+    QCOMPARE(sequence->currentLoopTime(), 1250);
+    QCOMPARE(a1_s_o1->currentLoopTime(), 250);
+    QCOMPARE(a2_s_o1->currentLoopTime(), 250);
     QCOMPARE(a2_s_o1->currentLoop(), 2);
-    QCOMPARE(a3_s_o1->currentTime(), 250);
-    QCOMPARE(sequence2->currentTime(), 500);
-    QCOMPARE(a1_s_o2->currentTime(), 250);
-    QCOMPARE(a1_s_o3->currentTime(), 250);
+    QCOMPARE(a3_s_o1->currentLoopTime(), 250);
+    QCOMPARE(sequence2->currentLoopTime(), 500);
+    QCOMPARE(a1_s_o2->currentLoopTime(), 250);
+    QCOMPARE(a1_s_o3->currentLoopTime(), 250);
 
     // Current time = 2000
     group.setCurrentTime(2000);
-    QCOMPARE(group.currentTime(), 1750);
-    QCOMPARE(sequence->currentTime(), 1250);
-    QCOMPARE(a1_s_o1->currentTime(), 250);
-    QCOMPARE(a2_s_o1->currentTime(), 250);
+    QCOMPARE(group.currentLoopTime(), 1750);
+    QCOMPARE(sequence->currentLoopTime(), 1250);
+    QCOMPARE(a1_s_o1->currentLoopTime(), 250);
+    QCOMPARE(a2_s_o1->currentLoopTime(), 250);
     QCOMPARE(a2_s_o1->currentLoop(), 2);
-    QCOMPARE(a3_s_o1->currentTime(), 250);
-    QCOMPARE(sequence2->currentTime(), 500);
-    QCOMPARE(a1_s_o2->currentTime(), 250);
-    QCOMPARE(a1_s_o3->currentTime(), 250);
+    QCOMPARE(a3_s_o1->currentLoopTime(), 250);
+    QCOMPARE(sequence2->currentLoopTime(), 500);
+    QCOMPARE(a1_s_o2->currentLoopTime(), 250);
+    QCOMPARE(a1_s_o3->currentLoopTime(), 250);
 }
 
 void tst_QSequentialAnimationGroup::setCurrentTimeWithUncontrolledAnimation()
@@ -357,40 +357,40 @@ void tst_QSequentialAnimationGroup::setCurrentTimeWithUncontrolledAnimation()
     QCOMPARE(notTimeDriven->state(), QAnimationGroup::Stopped);
     QCOMPARE(loopsForever->state(), QAnimationGroup::Stopped);
 
-    QCOMPARE(group.currentTime(), 1);
-    QCOMPARE(sequence->currentTime(), 1);
-    QCOMPARE(a1_s_o1->currentTime(), 1);
-    QCOMPARE(a1_s_o2->currentTime(), 0);
-    QCOMPARE(notTimeDriven->currentTime(), 0);
-    QCOMPARE(loopsForever->currentTime(), 0);
+    QCOMPARE(group.currentLoopTime(), 1);
+    QCOMPARE(sequence->currentLoopTime(), 1);
+    QCOMPARE(a1_s_o1->currentLoopTime(), 1);
+    QCOMPARE(a1_s_o2->currentLoopTime(), 0);
+    QCOMPARE(notTimeDriven->currentLoopTime(), 0);
+    QCOMPARE(loopsForever->currentLoopTime(), 0);
 
     // Current time = 250
     group.setCurrentTime(250);
-    QCOMPARE(group.currentTime(), 250);
-    QCOMPARE(sequence->currentTime(), 250);
-    QCOMPARE(a1_s_o1->currentTime(), 250);
-    QCOMPARE(a1_s_o2->currentTime(), 0);
-    QCOMPARE(notTimeDriven->currentTime(), 0);
-    QCOMPARE(loopsForever->currentTime(), 0);
+    QCOMPARE(group.currentLoopTime(), 250);
+    QCOMPARE(sequence->currentLoopTime(), 250);
+    QCOMPARE(a1_s_o1->currentLoopTime(), 250);
+    QCOMPARE(a1_s_o2->currentLoopTime(), 0);
+    QCOMPARE(notTimeDriven->currentLoopTime(), 0);
+    QCOMPARE(loopsForever->currentLoopTime(), 0);
 
     // Current time = 500
     group.setCurrentTime(500);
-    QCOMPARE(group.currentTime(), 500);
-    QCOMPARE(sequence->currentTime(), 500);
-    QCOMPARE(a1_s_o1->currentTime(), 250);
-    QCOMPARE(a1_s_o2->currentTime(), 250);
-    QCOMPARE(notTimeDriven->currentTime(), 0);
-    QCOMPARE(loopsForever->currentTime(), 0);
+    QCOMPARE(group.currentLoopTime(), 500);
+    QCOMPARE(sequence->currentLoopTime(), 500);
+    QCOMPARE(a1_s_o1->currentLoopTime(), 250);
+    QCOMPARE(a1_s_o2->currentLoopTime(), 250);
+    QCOMPARE(notTimeDriven->currentLoopTime(), 0);
+    QCOMPARE(loopsForever->currentLoopTime(), 0);
     QCOMPARE(group.currentAnimation(), notTimeDriven);
 
     // Current time = 505
     group.setCurrentTime(505);
-    QCOMPARE(group.currentTime(), 505);
-    QCOMPARE(sequence->currentTime(), 500);
-    QCOMPARE(a1_s_o1->currentTime(), 250);
-    QCOMPARE(a1_s_o2->currentTime(), 250);
-    QCOMPARE(notTimeDriven->currentTime(), 5);
-    QCOMPARE(loopsForever->currentTime(), 0);
+    QCOMPARE(group.currentLoopTime(), 505);
+    QCOMPARE(sequence->currentLoopTime(), 500);
+    QCOMPARE(a1_s_o1->currentLoopTime(), 250);
+    QCOMPARE(a1_s_o2->currentLoopTime(), 250);
+    QCOMPARE(notTimeDriven->currentLoopTime(), 5);
+    QCOMPARE(loopsForever->currentLoopTime(), 0);
     QCOMPARE(group.currentAnimation(), notTimeDriven);
     QCOMPARE(sequence->state(), QAnimationGroup::Stopped);
     QCOMPARE(a1_s_o1->state(), QAnimationGroup::Stopped);
@@ -400,12 +400,12 @@ void tst_QSequentialAnimationGroup::setCurrentTimeWithUncontrolledAnimation()
 
     // Current time = 750 (end of notTimeDriven animation)
     group.setCurrentTime(750);
-    QCOMPARE(group.currentTime(), 750);
-    QCOMPARE(sequence->currentTime(), 500);
-    QCOMPARE(a1_s_o1->currentTime(), 250);
-    QCOMPARE(a1_s_o2->currentTime(), 250);
-    QCOMPARE(notTimeDriven->currentTime(), 250);
-    QCOMPARE(loopsForever->currentTime(), 0);
+    QCOMPARE(group.currentLoopTime(), 750);
+    QCOMPARE(sequence->currentLoopTime(), 500);
+    QCOMPARE(a1_s_o1->currentLoopTime(), 250);
+    QCOMPARE(a1_s_o2->currentLoopTime(), 250);
+    QCOMPARE(notTimeDriven->currentLoopTime(), 250);
+    QCOMPARE(loopsForever->currentLoopTime(), 0);
     QCOMPARE(group.currentAnimation(), loopsForever);
     QCOMPARE(sequence->state(), QAnimationGroup::Stopped);
     QCOMPARE(a1_s_o1->state(), QAnimationGroup::Stopped);
@@ -415,13 +415,13 @@ void tst_QSequentialAnimationGroup::setCurrentTimeWithUncontrolledAnimation()
 
     // Current time = 800 (as notTimeDriven was finished at 750, loopsforever should still run)
     group.setCurrentTime(800);
-    QCOMPARE(group.currentTime(), 800);
+    QCOMPARE(group.currentLoopTime(), 800);
     QCOMPARE(group.currentAnimation(), loopsForever);
-    QCOMPARE(sequence->currentTime(), 500);
-    QCOMPARE(a1_s_o1->currentTime(), 250);
-    QCOMPARE(a1_s_o2->currentTime(), 250);
-    QCOMPARE(notTimeDriven->currentTime(), 250);
-    QCOMPARE(loopsForever->currentTime(), 50);
+    QCOMPARE(sequence->currentLoopTime(), 500);
+    QCOMPARE(a1_s_o1->currentLoopTime(), 250);
+    QCOMPARE(a1_s_o2->currentLoopTime(), 250);
+    QCOMPARE(notTimeDriven->currentLoopTime(), 250);
+    QCOMPARE(loopsForever->currentLoopTime(), 50);
 
     loopsForever->stop(); // this should stop the group
 
@@ -466,26 +466,26 @@ void tst_QSequentialAnimationGroup::seekingForwards()
     QCOMPARE(a1_s_o2->state(), QAnimationGroup::Stopped);
     QCOMPARE(a1_s_o3->state(), QAnimationGroup::Stopped);
 
-    QCOMPARE(group.currentTime(), 1);
-    QCOMPARE(sequence->currentTime(), 1);
-    QCOMPARE(a1_s_o1->currentTime(), 1);
-    QCOMPARE(a2_s_o1->currentTime(), 0);
-    QCOMPARE(a3_s_o1->currentTime(), 0);
-    QCOMPARE(sequence2->currentTime(), 0);
-    QCOMPARE(a1_s_o2->currentTime(), 0);
-    QCOMPARE(a1_s_o3->currentTime(), 0);
+    QCOMPARE(group.currentLoopTime(), 1);
+    QCOMPARE(sequence->currentLoopTime(), 1);
+    QCOMPARE(a1_s_o1->currentLoopTime(), 1);
+    QCOMPARE(a2_s_o1->currentLoopTime(), 0);
+    QCOMPARE(a3_s_o1->currentLoopTime(), 0);
+    QCOMPARE(sequence2->currentLoopTime(), 0);
+    QCOMPARE(a1_s_o2->currentLoopTime(), 0);
+    QCOMPARE(a1_s_o3->currentLoopTime(), 0);
 
     // Current time = 1500
     group.setCurrentTime(1500);
-    QCOMPARE(group.currentTime(), 1500);
-    QCOMPARE(sequence->currentTime(), 1250);
-    QCOMPARE(a1_s_o1->currentTime(), 250);
-    QCOMPARE(a2_s_o1->currentTime(), 250);
+    QCOMPARE(group.currentLoopTime(), 1500);
+    QCOMPARE(sequence->currentLoopTime(), 1250);
+    QCOMPARE(a1_s_o1->currentLoopTime(), 250);
+    QCOMPARE(a2_s_o1->currentLoopTime(), 250);
     QCOMPARE(a2_s_o1->currentLoop(), 2);
-    QCOMPARE(a3_s_o1->currentTime(), 250);
-    QCOMPARE(sequence2->currentTime(), 250);
-    QCOMPARE(a1_s_o2->currentTime(), 250);
-    QCOMPARE(a1_s_o3->currentTime(), 0);
+    QCOMPARE(a3_s_o1->currentLoopTime(), 250);
+    QCOMPARE(sequence2->currentLoopTime(), 250);
+    QCOMPARE(a1_s_o2->currentLoopTime(), 250);
+    QCOMPARE(a1_s_o3->currentLoopTime(), 0);
 
     // this will restart the group
     group.start();
@@ -499,15 +499,15 @@ void tst_QSequentialAnimationGroup::seekingForwards()
 
     // Current time = 1750
     group.setCurrentTime(1750);
-    QCOMPARE(group.currentTime(), 1750);
-    QCOMPARE(sequence->currentTime(), 1250);
-    QCOMPARE(a1_s_o1->currentTime(), 250);
-    QCOMPARE(a2_s_o1->currentTime(), 250);
+    QCOMPARE(group.currentLoopTime(), 1750);
+    QCOMPARE(sequence->currentLoopTime(), 1250);
+    QCOMPARE(a1_s_o1->currentLoopTime(), 250);
+    QCOMPARE(a2_s_o1->currentLoopTime(), 250);
     QCOMPARE(a2_s_o1->currentLoop(), 2);
-    QCOMPARE(a3_s_o1->currentTime(), 250);
-    QCOMPARE(sequence2->currentTime(), 500);
-    QCOMPARE(a1_s_o2->currentTime(), 250);
-    QCOMPARE(a1_s_o3->currentTime(), 250);
+    QCOMPARE(a3_s_o1->currentLoopTime(), 250);
+    QCOMPARE(sequence2->currentLoopTime(), 500);
+    QCOMPARE(a1_s_o2->currentLoopTime(), 250);
+    QCOMPARE(a1_s_o3->currentLoopTime(), 250);
 }
 
 void tst_QSequentialAnimationGroup::seekingBackwards()
@@ -537,15 +537,15 @@ void tst_QSequentialAnimationGroup::seekingBackwards()
 
     // Current time = 1600
     group.setCurrentTime(1600);
-    QCOMPARE(group.currentTime(), 1600);
-    QCOMPARE(sequence->currentTime(), 1250);
-    QCOMPARE(a1_s_o1->currentTime(), 250);
-    QCOMPARE(a2_s_o1->currentTime(), 250);
+    QCOMPARE(group.currentLoopTime(), 1600);
+    QCOMPARE(sequence->currentLoopTime(), 1250);
+    QCOMPARE(a1_s_o1->currentLoopTime(), 250);
+    QCOMPARE(a2_s_o1->currentLoopTime(), 250);
     QCOMPARE(a2_s_o1->currentLoop(), 2);
-    QCOMPARE(a3_s_o1->currentTime(), 250);
-    QCOMPARE(sequence2->currentTime(), 350);
-    QCOMPARE(a1_s_o2->currentTime(), 250);
-    QCOMPARE(a1_s_o3->currentTime(), 100);
+    QCOMPARE(a3_s_o1->currentLoopTime(), 250);
+    QCOMPARE(sequence2->currentLoopTime(), 350);
+    QCOMPARE(a1_s_o2->currentLoopTime(), 250);
+    QCOMPARE(a1_s_o3->currentLoopTime(), 100);
 
     QCOMPARE(group.state(), QAnimationGroup::Running);
     QCOMPARE(sequence->state(), QAnimationGroup::Stopped);
@@ -556,22 +556,22 @@ void tst_QSequentialAnimationGroup::seekingBackwards()
 
     // Seeking backwards, current time = 1
     group.setCurrentTime(1);
-    QCOMPARE(group.currentTime(), 1);
-    QCOMPARE(sequence->currentTime(), 1);
-    QCOMPARE(a1_s_o1->currentTime(), 1);
+    QCOMPARE(group.currentLoopTime(), 1);
+    QCOMPARE(sequence->currentLoopTime(), 1);
+    QCOMPARE(a1_s_o1->currentLoopTime(), 1);
 
     QEXPECT_FAIL("", "rewinding in nested groups is considered as a restart from the children,"
         "hence they don't reset from their current animation", Continue);
-    QCOMPARE(a2_s_o1->currentTime(), 0);
+    QCOMPARE(a2_s_o1->currentLoopTime(), 0);
     QEXPECT_FAIL("", "rewinding in nested groups is considered as a restart from the children,"
         "hence they don't reset from their current animation", Continue);
     QCOMPARE(a2_s_o1->currentLoop(), 0);
     QEXPECT_FAIL("", "rewinding in nested groups is considered as a restart from the children,"
         "hence they don't reset from their current animation", Continue);
-    QCOMPARE(a3_s_o1->currentTime(), 0);
-    QCOMPARE(sequence2->currentTime(), 0);
-    QCOMPARE(a1_s_o2->currentTime(), 0);
-    QCOMPARE(a1_s_o3->currentTime(), 0);
+    QCOMPARE(a3_s_o1->currentLoopTime(), 0);
+    QCOMPARE(sequence2->currentLoopTime(), 0);
+    QCOMPARE(a1_s_o2->currentLoopTime(), 0);
+    QCOMPARE(a1_s_o3->currentLoopTime(), 0);
 
     QCOMPARE(group.state(), QAnimationGroup::Running);
     QCOMPARE(sequence->state(), QAnimationGroup::Running);
@@ -582,15 +582,15 @@ void tst_QSequentialAnimationGroup::seekingBackwards()
 
     // Current time = 2000
     group.setCurrentTime(2000);
-    QCOMPARE(group.currentTime(), 1750);
-    QCOMPARE(sequence->currentTime(), 1250);
-    QCOMPARE(a1_s_o1->currentTime(), 250);
-    QCOMPARE(a2_s_o1->currentTime(), 250);
+    QCOMPARE(group.currentLoopTime(), 1750);
+    QCOMPARE(sequence->currentLoopTime(), 1250);
+    QCOMPARE(a1_s_o1->currentLoopTime(), 250);
+    QCOMPARE(a2_s_o1->currentLoopTime(), 250);
     QCOMPARE(a2_s_o1->currentLoop(), 2);
-    QCOMPARE(a3_s_o1->currentTime(), 250);
-    QCOMPARE(sequence2->currentTime(), 500);
-    QCOMPARE(a1_s_o2->currentTime(), 250);
-    QCOMPARE(a1_s_o3->currentTime(), 250);
+    QCOMPARE(a3_s_o1->currentLoopTime(), 250);
+    QCOMPARE(sequence2->currentLoopTime(), 500);
+    QCOMPARE(a1_s_o2->currentLoopTime(), 250);
+    QCOMPARE(a1_s_o3->currentLoopTime(), 250);
 
     QCOMPARE(group.state(), QAnimationGroup::Stopped);
     QCOMPARE(sequence->state(), QAnimationGroup::Stopped);
@@ -612,7 +612,7 @@ static bool compareStates(const QSignalSpy& spy, const StateList &expectedStates
         }
         QList<QVariant> args = spy.at(i);
         QAbstractAnimation::State st = expectedStates.at(i);
-        QAbstractAnimation::State actual = qVariantValue<QAbstractAnimation::State>(args.value(1));
+        QAbstractAnimation::State actual = qVariantValue<QAbstractAnimation::State>(args.first());
         if (equals && actual != st) {
             equals = false;
             break;
@@ -672,14 +672,14 @@ void tst_QSequentialAnimationGroup::pauseAndResume()
 
     // Current time = 1751
     group.setCurrentTime(1751);
-    QCOMPARE(group.currentTime(), 1751);
-    QCOMPARE(sequence->currentTime(), 751);
+    QCOMPARE(group.currentLoopTime(), 1751);
+    QCOMPARE(sequence->currentLoopTime(), 751);
     QCOMPARE(sequence->currentLoop(), 1);
-    QCOMPARE(a1_s_o1->currentTime(), 250);
-    QCOMPARE(a2_s_o1->currentTime(), 250);
+    QCOMPARE(a1_s_o1->currentLoopTime(), 250);
+    QCOMPARE(a2_s_o1->currentLoopTime(), 250);
     QCOMPARE(a2_s_o1->currentLoop(), 1);
     QCOMPARE(a3_s_o1->currentLoop(), 0);
-    QCOMPARE(a3_s_o1->currentTime(), 1);
+    QCOMPARE(a3_s_o1->currentLoopTime(), 1);
 
     QCOMPARE(group.state(), QAnimationGroup::Paused);
     QCOMPARE(sequence->state(), QAnimationGroup::Paused);
@@ -696,20 +696,20 @@ void tst_QSequentialAnimationGroup::pauseAndResume()
                                               << QAbstractAnimation::Running
                                               << QAbstractAnimation::Stopped)));
 
-    QCOMPARE(qVariantValue<QAbstractAnimation::State>(a1StateChangedSpy.at(0).at(1)),
+    QCOMPARE(qVariantValue<QAbstractAnimation::State>(a1StateChangedSpy.at(0).first()),
              QAnimationGroup::Running);
-    QCOMPARE(qVariantValue<QAbstractAnimation::State>(a1StateChangedSpy.at(1).at(1)),
+    QCOMPARE(qVariantValue<QAbstractAnimation::State>(a1StateChangedSpy.at(1).first()),
              QAnimationGroup::Paused);
-    QCOMPARE(qVariantValue<QAbstractAnimation::State>(a1StateChangedSpy.at(2).at(1)),
+    QCOMPARE(qVariantValue<QAbstractAnimation::State>(a1StateChangedSpy.at(2).first()),
              QAnimationGroup::Stopped);
-    QCOMPARE(qVariantValue<QAbstractAnimation::State>(a1StateChangedSpy.at(3).at(1)),
+    QCOMPARE(qVariantValue<QAbstractAnimation::State>(a1StateChangedSpy.at(3).first()),
              QAnimationGroup::Running);
-    QCOMPARE(qVariantValue<QAbstractAnimation::State>(a1StateChangedSpy.at(4).at(1)),
+    QCOMPARE(qVariantValue<QAbstractAnimation::State>(a1StateChangedSpy.at(4).first()),
              QAnimationGroup::Stopped);
 
-    QCOMPARE(qVariantValue<QAbstractAnimation::State>(seqStateChangedSpy.at(0).at(1)),
+    QCOMPARE(qVariantValue<QAbstractAnimation::State>(seqStateChangedSpy.at(0).first()),
              QAnimationGroup::Running);
-    QCOMPARE(qVariantValue<QAbstractAnimation::State>(seqStateChangedSpy.at(1).at(1)),
+    QCOMPARE(qVariantValue<QAbstractAnimation::State>(seqStateChangedSpy.at(1).first()),
              QAnimationGroup::Paused);
 
     group.resume();
@@ -720,17 +720,17 @@ void tst_QSequentialAnimationGroup::pauseAndResume()
     QCOMPARE(a2_s_o1->state(), QAnimationGroup::Stopped);
     QCOMPARE(a3_s_o1->state(), QAnimationGroup::Running);
 
-    QVERIFY(group.currentTime() >= 1751);
-    QVERIFY(sequence->currentTime() >= 751);
+    QVERIFY(group.currentLoopTime() >= 1751);
+    QVERIFY(sequence->currentLoopTime() >= 751);
     QCOMPARE(sequence->currentLoop(), 1);
-    QCOMPARE(a1_s_o1->currentTime(), 250);
-    QCOMPARE(a2_s_o1->currentTime(), 250);
+    QCOMPARE(a1_s_o1->currentLoopTime(), 250);
+    QCOMPARE(a2_s_o1->currentLoopTime(), 250);
     QCOMPARE(a2_s_o1->currentLoop(), 1);
     QCOMPARE(a3_s_o1->currentLoop(), 0);
-    QVERIFY(a3_s_o1->currentTime() >= 1);
+    QVERIFY(a3_s_o1->currentLoopTime() >= 1);
 
     QCOMPARE(seqStateChangedSpy.count(), 3);    // Running,Paused,Running
-    QCOMPARE(qVariantValue<QAbstractAnimation::State>(seqStateChangedSpy.at(2).at(1)),
+    QCOMPARE(qVariantValue<QAbstractAnimation::State>(seqStateChangedSpy.at(2).first()),
              QAnimationGroup::Running);
 
     group.pause();
@@ -741,23 +741,23 @@ void tst_QSequentialAnimationGroup::pauseAndResume()
     QCOMPARE(a2_s_o1->state(), QAnimationGroup::Stopped);
     QCOMPARE(a3_s_o1->state(), QAnimationGroup::Paused);
 
-    QVERIFY(group.currentTime() >= 1751);
-    QVERIFY(sequence->currentTime() >= 751);
+    QVERIFY(group.currentLoopTime() >= 1751);
+    QVERIFY(sequence->currentLoopTime() >= 751);
     QCOMPARE(sequence->currentLoop(), 1);
-    QCOMPARE(a1_s_o1->currentTime(), 250);
-    QCOMPARE(a2_s_o1->currentTime(), 250);
+    QCOMPARE(a1_s_o1->currentLoopTime(), 250);
+    QCOMPARE(a2_s_o1->currentLoopTime(), 250);
     QCOMPARE(a2_s_o1->currentLoop(), 1);
     QCOMPARE(a3_s_o1->currentLoop(), 0);
-    QVERIFY(a3_s_o1->currentTime() >= 1);
+    QVERIFY(a3_s_o1->currentLoopTime() >= 1);
 
     QCOMPARE(seqStateChangedSpy.count(), 4);    // Running,Paused,Running,Paused
-    QCOMPARE(qVariantValue<QAbstractAnimation::State>(seqStateChangedSpy.at(3).at(1)),
+    QCOMPARE(qVariantValue<QAbstractAnimation::State>(seqStateChangedSpy.at(3).first()),
              QAnimationGroup::Paused);
 
     group.stop();
 
     QCOMPARE(seqStateChangedSpy.count(), 5);    // Running,Paused,Running,Paused,Stopped
-    QCOMPARE(qVariantValue<QAbstractAnimation::State>(seqStateChangedSpy.at(4).at(1)),
+    QCOMPARE(qVariantValue<QAbstractAnimation::State>(seqStateChangedSpy.at(4).first()),
              QAnimationGroup::Stopped);
 }
 
@@ -797,20 +797,20 @@ void tst_QSequentialAnimationGroup::restart()
 
     for (int i = 0; i < 3; i++) {
         QCOMPARE(animsStateChanged[i]->count(), 4);
-        QCOMPARE(qVariantValue<QAbstractAnimation::State>(animsStateChanged[i]->at(0).at(1)),
+        QCOMPARE(qVariantValue<QAbstractAnimation::State>(animsStateChanged[i]->at(0).first()),
                  QAnimationGroup::Running);
-        QCOMPARE(qVariantValue<QAbstractAnimation::State>(animsStateChanged[i]->at(1).at(1)),
+        QCOMPARE(qVariantValue<QAbstractAnimation::State>(animsStateChanged[i]->at(1).first()),
                  QAnimationGroup::Stopped);
-        QCOMPARE(qVariantValue<QAbstractAnimation::State>(animsStateChanged[i]->at(2).at(1)),
+        QCOMPARE(qVariantValue<QAbstractAnimation::State>(animsStateChanged[i]->at(2).first()),
                  QAnimationGroup::Running);
-        QCOMPARE(qVariantValue<QAbstractAnimation::State>(animsStateChanged[i]->at(3).at(1)),
+        QCOMPARE(qVariantValue<QAbstractAnimation::State>(animsStateChanged[i]->at(3).first()),
                  QAnimationGroup::Stopped);
     }
 
     QCOMPARE(seqStateChangedSpy.count(), 2);
-    QCOMPARE(qVariantValue<QAbstractAnimation::State>(seqStateChangedSpy.at(0).at(1)),
+    QCOMPARE(qVariantValue<QAbstractAnimation::State>(seqStateChangedSpy.at(0).first()),
              QAnimationGroup::Running);
-    QCOMPARE(qVariantValue<QAbstractAnimation::State>(seqStateChangedSpy.at(1).at(1)),
+    QCOMPARE(qVariantValue<QAbstractAnimation::State>(seqStateChangedSpy.at(1).first()),
              QAnimationGroup::Stopped);
 
     QCOMPARE(seqCurrentAnimChangedSpy.count(), 6);
@@ -855,15 +855,15 @@ void tst_QSequentialAnimationGroup::looping()
 
     // Current time = 1750
     group.setCurrentTime(1750);
-    QCOMPARE(group.currentTime(), 1750);
-    QCOMPARE(sequence->currentTime(), 750);
+    QCOMPARE(group.currentLoopTime(), 1750);
+    QCOMPARE(sequence->currentLoopTime(), 750);
     QCOMPARE(sequence->currentLoop(), 1);
-    QCOMPARE(a1_s_o1->currentTime(), 250);
-    QCOMPARE(a2_s_o1->currentTime(), 250);
+    QCOMPARE(a1_s_o1->currentLoopTime(), 250);
+    QCOMPARE(a2_s_o1->currentLoopTime(), 250);
     QCOMPARE(a2_s_o1->currentLoop(), 1);
     // this animation is at the beginning because it is the current one inside sequence
     QCOMPARE(a3_s_o1->currentLoop(), 0);
-    QCOMPARE(a3_s_o1->currentTime(), 0);
+    QCOMPARE(a3_s_o1->currentLoopTime(), 0);
     QCOMPARE(sequence->currentAnimation(), a3_s_o1);
 
     QCOMPARE(group.state(), QAnimationGroup::Paused);
@@ -890,16 +890,16 @@ void tst_QSequentialAnimationGroup::looping()
 
     // Looping, current time = duration + 1
     group.setCurrentTime(group.duration() + 1);
-    QCOMPARE(group.currentTime(), 1);
+    QCOMPARE(group.currentLoopTime(), 1);
     QCOMPARE(group.currentLoop(), 1);
-    QCOMPARE(sequence->currentTime(), 1);
+    QCOMPARE(sequence->currentLoopTime(), 1);
     QCOMPARE(sequence->currentLoop(), 0);
-    QCOMPARE(a1_s_o1->currentTime(), 1);
-    QCOMPARE(a2_s_o1->currentTime(), 250);
+    QCOMPARE(a1_s_o1->currentLoopTime(), 1);
+    QCOMPARE(a2_s_o1->currentLoopTime(), 250);
     QCOMPARE(a2_s_o1->currentLoop(), 1);
     // this animation is at the end because it was run on the previous loop
     QCOMPARE(a3_s_o1->currentLoop(), 0);
-    QCOMPARE(a3_s_o1->currentTime(), 250);
+    QCOMPARE(a3_s_o1->currentLoopTime(), 250);
 
     QCOMPARE(group.state(), QAnimationGroup::Paused);
     QCOMPARE(sequence->state(), QAnimationGroup::Paused);
@@ -934,7 +934,7 @@ void tst_QSequentialAnimationGroup::startDelay()
 
     QTest::qWait(500);
 
-    QVERIFY(group.currentTime() == 375);
+    QVERIFY(group.currentLoopTime() == 375);
     QCOMPARE(group.state(), QAnimationGroup::Stopped);
 }
 
@@ -958,9 +958,9 @@ void tst_QSequentialAnimationGroup::clearGroup()
         children[i] = group.animationAt(i);
     }
 
-    group.clearAnimations();
+    group.clear();
     QCOMPARE(group.animationCount(), 0);
-    QCOMPARE(group.currentTime(), 0);
+    QCOMPARE(group.currentLoopTime(), 0);
     for (int i = 0; i < animationCount; ++i)
         QVERIFY(children[i].isNull());
 }
@@ -1130,9 +1130,9 @@ void tst_QSequentialAnimationGroup::updateChildrenWithRunningGroup()
     QCOMPARE(groupStateChangedSpy.count(), 1);
     QCOMPARE(childStateChangedSpy.count(), 1);
 
-    QCOMPARE(qVariantValue<QAbstractAnimation::State>(groupStateChangedSpy.at(0).at(1)),
+    QCOMPARE(qVariantValue<QAbstractAnimation::State>(groupStateChangedSpy.at(0).first()),
              QAnimationGroup::Running);
-    QCOMPARE(qVariantValue<QAbstractAnimation::State>(childStateChangedSpy.at(0).at(1)),
+    QCOMPARE(qVariantValue<QAbstractAnimation::State>(childStateChangedSpy.at(0).first()),
              QAnimationGroup::Running);
 
     // starting directly a running child will not have any effect
@@ -1171,13 +1171,13 @@ void tst_QSequentialAnimationGroup::deleteChildrenWithRunningGroup()
     QCOMPARE(anim1->state(), QAnimationGroup::Running);
 
     QTest::qWait(100);
-    QVERIFY(group.currentTime() > 0);
+    QVERIFY(group.currentLoopTime() > 0);
 
     delete anim1;
     QCOMPARE(group.animationCount(), 0);
     QCOMPARE(group.duration(), 0);
     QCOMPARE(group.state(), QAnimationGroup::Stopped);
-    QCOMPARE(group.currentTime(), 0); //that's the invariant
+    QCOMPARE(group.currentLoopTime(), 0); //that's the invariant
 }
 
 void tst_QSequentialAnimationGroup::startChildrenWithStoppedGroup()
@@ -1320,9 +1320,9 @@ void tst_QSequentialAnimationGroup::startGroupWithRunningChild()
     QCOMPARE(anim2->state(), QAnimationGroup::Running);
 
     QCOMPARE(stateChangedSpy2.count(), 4);
-    QCOMPARE(qVariantValue<QAbstractAnimation::State>(stateChangedSpy2.at(2).at(1)),
+    QCOMPARE(qVariantValue<QAbstractAnimation::State>(stateChangedSpy2.at(2).first()),
              QAnimationGroup::Stopped);
-    QCOMPARE(qVariantValue<QAbstractAnimation::State>(stateChangedSpy2.at(3).at(1)),
+    QCOMPARE(qVariantValue<QAbstractAnimation::State>(stateChangedSpy2.at(3).first()),
              QAnimationGroup::Running);
 
     group.stop();
@@ -1359,9 +1359,9 @@ void tst_QSequentialAnimationGroup::zeroDurationAnimation()
     group.start();
 
     QCOMPARE(stateChangedSpy.count(), 2);
-    QCOMPARE(qVariantValue<QAbstractAnimation::State>(stateChangedSpy.at(0).at(1)),
+    QCOMPARE(qVariantValue<QAbstractAnimation::State>(stateChangedSpy.at(0).first()),
              QAnimationGroup::Running);
-    QCOMPARE(qVariantValue<QAbstractAnimation::State>(stateChangedSpy.at(1).at(1)),
+    QCOMPARE(qVariantValue<QAbstractAnimation::State>(stateChangedSpy.at(1).first()),
              QAnimationGroup::Stopped);
 
     QCOMPARE(anim1->state(), QAnimationGroup::Stopped);
@@ -1426,14 +1426,14 @@ void tst_QSequentialAnimationGroup::finishWithUncontrolledAnimation()
     group.start();
     QCOMPARE(group.state(), QAnimationGroup::Running);
     QCOMPARE(notTimeDriven.state(), QAnimationGroup::Running);
-    QCOMPARE(group.currentTime(), 0);
-    QCOMPARE(notTimeDriven.currentTime(), 0);
+    QCOMPARE(group.currentLoopTime(), 0);
+    QCOMPARE(notTimeDriven.currentLoopTime(), 0);
 
     QTest::qWait(300); //wait for the end of notTimeDriven
     QCOMPARE(notTimeDriven.state(), QAnimationGroup::Stopped);
-    const int actualDuration = notTimeDriven.currentTime();
+    const int actualDuration = notTimeDriven.currentLoopTime();
     QCOMPARE(group.state(), QAnimationGroup::Stopped);
-    QCOMPARE(group.currentTime(), actualDuration);
+    QCOMPARE(group.currentLoopTime(), actualDuration);
     QCOMPARE(spy.count(), 1);
 
     //2nd case:
@@ -1444,7 +1444,7 @@ void tst_QSequentialAnimationGroup::finishWithUncontrolledAnimation()
 
     group.setCurrentTime(300);
     QCOMPARE(group.state(), QAnimationGroup::Stopped);
-    QCOMPARE(notTimeDriven.currentTime(), actualDuration);
+    QCOMPARE(notTimeDriven.currentLoopTime(), actualDuration);
     QCOMPARE(group.currentAnimation(), static_cast<QAbstractAnimation*>(&anim));
 
     //3rd case:
@@ -1453,8 +1453,8 @@ void tst_QSequentialAnimationGroup::finishWithUncontrolledAnimation()
     group.start();
     QCOMPARE(group.state(), QAnimationGroup::Running);
     QCOMPARE(notTimeDriven.state(), QAnimationGroup::Running);
-    QCOMPARE(group.currentTime(), 0);
-    QCOMPARE(notTimeDriven.currentTime(), 0);
+    QCOMPARE(group.currentLoopTime(), 0);
+    QCOMPARE(notTimeDriven.currentLoopTime(), 0);
 
     QCOMPARE(animStateChangedSpy.count(), 0);
 
@@ -1467,12 +1467,12 @@ void tst_QSequentialAnimationGroup::finishWithUncontrolledAnimation()
     QTest::qWait(300); //wait for the end of anim
 
     QCOMPARE(anim.state(), QAnimationGroup::Stopped);
-    QCOMPARE(anim.currentTime(), anim.duration());
+    QCOMPARE(anim.currentLoopTime(), anim.duration());
 
     //we should simply be at the end
     QCOMPARE(spy.count(), 1);
     QCOMPARE(animStateChangedSpy.count(), 2);
-    QCOMPARE(group.currentTime(), notTimeDriven.currentTime() + anim.currentTime());
+    QCOMPARE(group.currentLoopTime(), notTimeDriven.currentLoopTime() + anim.currentLoopTime());
 }
 
 void tst_QSequentialAnimationGroup::addRemoveAnimation()
@@ -1481,48 +1481,48 @@ void tst_QSequentialAnimationGroup::addRemoveAnimation()
     QSequentialAnimationGroup group;
 
     QCOMPARE(group.duration(), 0);
-    QCOMPARE(group.currentTime(), 0);
+    QCOMPARE(group.currentLoopTime(), 0);
     QAbstractAnimation *anim1 = new QPropertyAnimation;
     group.addAnimation(anim1);
     QCOMPARE(group.duration(), 250);
-    QCOMPARE(group.currentTime(), 0);
+    QCOMPARE(group.currentLoopTime(), 0);
     QCOMPARE(group.currentAnimation(), anim1);
 
     //let's append an animation
     QAbstractAnimation *anim2 = new QPropertyAnimation;
     group.addAnimation(anim2);
     QCOMPARE(group.duration(), 500);
-    QCOMPARE(group.currentTime(), 0);
+    QCOMPARE(group.currentLoopTime(), 0);
     QCOMPARE(group.currentAnimation(), anim1);
 
     //let's prepend an animation
     QAbstractAnimation *anim0 = new QPropertyAnimation;
-    group.insertAnimationAt(0, anim0);
+    group.insertAnimation(0, anim0);
     QCOMPARE(group.duration(), 750);
-    QCOMPARE(group.currentTime(), 0);
+    QCOMPARE(group.currentLoopTime(), 0);
     QCOMPARE(group.currentAnimation(), anim0); //anim0 has become the new currentAnimation
 
     group.setCurrentTime(300); //anim0 | anim1 | anim2
-    QCOMPARE(group.currentTime(), 300);
+    QCOMPARE(group.currentLoopTime(), 300);
     QCOMPARE(group.currentAnimation(), anim1);
-    QCOMPARE(anim1->currentTime(), 50);
+    QCOMPARE(anim1->currentLoopTime(), 50);
 
     group.removeAnimation(anim0); //anim1 | anim2
-    QCOMPARE(group.currentTime(), 50);
+    QCOMPARE(group.currentLoopTime(), 50);
     QCOMPARE(group.currentAnimation(), anim1);
-    QCOMPARE(anim1->currentTime(), 50);
+    QCOMPARE(anim1->currentLoopTime(), 50);
 
     group.setCurrentTime(0);
-    group.insertAnimationAt(0, anim0); //anim0 | anim1 | anim2
+    group.insertAnimation(0, anim0); //anim0 | anim1 | anim2
     group.setCurrentTime(300);
-    QCOMPARE(group.currentTime(), 300);
+    QCOMPARE(group.currentLoopTime(), 300);
     QCOMPARE(group.currentAnimation(), anim1);
-    QCOMPARE(anim1->currentTime(), 50);
+    QCOMPARE(anim1->currentLoopTime(), 50);
 
     group.removeAnimation(anim1); //anim0 | anim2
-    QCOMPARE(group.currentTime(), 250);
+    QCOMPARE(group.currentLoopTime(), 250);
     QCOMPARE(group.currentAnimation(), anim2);
-    QCOMPARE(anim0->currentTime(), 250);
+    QCOMPARE(anim0->currentLoopTime(), 250);
 }
 
 void tst_QSequentialAnimationGroup::currentAnimation()
@@ -1595,15 +1595,15 @@ class SequentialAnimationGroup : public QSequentialAnimationGroup
 {
     Q_OBJECT
 public slots:
-    void clearAnimations()
+    void clear()
     {
-        QSequentialAnimationGroup::clearAnimations();
+        QSequentialAnimationGroup::clear();
     }
 
     void refill()
     {
         stop();
-        clearAnimations();
+        clear();
         new DummyPropertyAnimation(this);
         start();
     }
@@ -1611,11 +1611,11 @@ public slots:
 };
 
 
-void tst_QSequentialAnimationGroup::clearAnimations()
+void tst_QSequentialAnimationGroup::clear()
 {
     SequentialAnimationGroup group;
     QPointer<QAbstractAnimation> anim1 = new DummyPropertyAnimation(&group);
-    group.connect(anim1, SIGNAL(finished()), SLOT(clearAnimations()));
+    group.connect(anim1, SIGNAL(finished()), SLOT(clear()));
     new DummyPropertyAnimation(&group);
     QCOMPARE(group.animationCount(), 2);
 
@@ -1623,7 +1623,7 @@ void tst_QSequentialAnimationGroup::clearAnimations()
     QTest::qWait(anim1->duration() + 100);
     QCOMPARE(group.animationCount(), 0);
     QCOMPARE(group.state(), QAbstractAnimation::Stopped);
-    QCOMPARE(group.currentTime(), 0);
+    QCOMPARE(group.currentLoopTime(), 0);
 
     anim1 = new DummyPropertyAnimation(&group);
     group.connect(anim1, SIGNAL(finished()), SLOT(refill()));
@@ -1649,22 +1649,22 @@ void tst_QSequentialAnimationGroup::pauseResume()
     QCOMPARE(anim->state(), QAnimationGroup::Running);
     QCOMPARE(spy.count(), 1);
     spy.clear();
-    const int currentTime = group.currentTime();
-    QCOMPARE(anim->currentTime(), currentTime);
+    const int currentTime = group.currentLoopTime();
+    QCOMPARE(anim->currentLoopTime(), currentTime);
 
     group.pause();
     QCOMPARE(group.state(), QAnimationGroup::Paused);
-    QCOMPARE(group.currentTime(), currentTime);
+    QCOMPARE(group.currentLoopTime(), currentTime);
     QCOMPARE(anim->state(), QAnimationGroup::Paused);
-    QCOMPARE(anim->currentTime(), currentTime);
+    QCOMPARE(anim->currentLoopTime(), currentTime);
     QCOMPARE(spy.count(), 1);
     spy.clear();
 
     group.resume();
     QCOMPARE(group.state(), QAnimationGroup::Running);
-    QCOMPARE(group.currentTime(), currentTime);
+    QCOMPARE(group.currentLoopTime(), currentTime);
     QCOMPARE(anim->state(), QAnimationGroup::Running);
-    QCOMPARE(anim->currentTime(), currentTime);
+    QCOMPARE(anim->currentLoopTime(), currentTime);
     QCOMPARE(spy.count(), 1);
 }
 
diff --git a/tests/benchmarks/qanimation/rectanimation.cpp b/tests/benchmarks/qanimation/rectanimation.cpp
index ab381f4..88eec4d 100644
--- a/tests/benchmarks/qanimation/rectanimation.cpp
+++ b/tests/benchmarks/qanimation/rectanimation.cpp
@@ -92,8 +92,3 @@ void RectAnimation::updateCurrentTime(int currentTime)
     if (m_object)
         m_object->setRect(m_current);
 }
-
-void RectAnimation::updateState(QAbstractAnimation::State state)
-{
-    Q_UNUSED(state);
-}
diff --git a/tests/benchmarks/qanimation/rectanimation.h b/tests/benchmarks/qanimation/rectanimation.h
index ea1f804..38a6f48 100644
--- a/tests/benchmarks/qanimation/rectanimation.h
+++ b/tests/benchmarks/qanimation/rectanimation.h
@@ -59,7 +59,6 @@ public:
     int duration() const;
 
     virtual void updateCurrentTime(int currentTime);
-    virtual void updateState(QAbstractAnimation::State state);
 
 private:
     DummyObject *m_object;
-- 
cgit v0.12


From 90b26c211bca82e252dcd31ffa1ef6834bbb6060 Mon Sep 17 00:00:00 2001
From: Harald Fernengel <harald.fernengel@nokia.com>
Date: Wed, 4 Nov 2009 14:10:47 +0100
Subject: Make QStringBuilder respect codecForCStrings

Now, it's a real drop-in replacement, with no known feature regressions
:)

Reviewed-By: hjk
---
 src/corelib/tools/qstring.h                  |  1 +
 src/corelib/tools/qstringbuilder.cpp         | 24 ++++++++++++
 src/corelib/tools/qstringbuilder.h           | 58 ++++++++++++++++++----------
 tests/auto/qstringbuilder1/stringbuilder.cpp | 26 +++++++++++++
 4 files changed, 88 insertions(+), 21 deletions(-)

diff --git a/src/corelib/tools/qstring.h b/src/corelib/tools/qstring.h
index 6c9a3ca..be95211 100644
--- a/src/corelib/tools/qstring.h
+++ b/src/corelib/tools/qstring.h
@@ -631,6 +631,7 @@ private:
     friend class QCharRef;
     friend class QTextCodec;
     friend class QStringRef;
+    friend class QAbstractConcatenable;
     friend inline bool qStringComparisonHelper(const QString &s1, const char *s2);
     friend inline bool qStringComparisonHelper(const QStringRef &s1, const char *s2);
 public:
diff --git a/src/corelib/tools/qstringbuilder.cpp b/src/corelib/tools/qstringbuilder.cpp
index 0a13218..4a16488 100644
--- a/src/corelib/tools/qstringbuilder.cpp
+++ b/src/corelib/tools/qstringbuilder.cpp
@@ -41,6 +41,8 @@
 
 #include "qstringbuilder.h"
 
+QT_BEGIN_NAMESPACE
+
 /*!
     \class QLatin1Literal
     \internal
@@ -143,3 +145,25 @@
  
     Converts the \c QLatin1Literal into a \c QString object.
 */
+
+/*! \internal */
+void QAbstractConcatenable::convertFromAscii(const char *a, int len, QChar *&out)
+{
+#ifndef QT_NO_TEXTCODEC
+    if (QString::codecForCStrings) {
+        QString tmp = QString::fromAscii(a);
+        memcpy(out, reinterpret_cast<const char *>(tmp.constData()), sizeof(QChar) * tmp.size());
+        out += tmp.length();
+        return;
+    }
+#endif
+    if (len == -1) {
+        while (*a)
+            *out++ = QLatin1Char(*a++);
+    } else {
+        for (int i = 0; i < len - 1; ++i)
+            *out++ = QLatin1Char(a[i]);
+    }
+}
+
+QT_END_NAMESPACE
diff --git a/src/corelib/tools/qstringbuilder.h b/src/corelib/tools/qstringbuilder.h
index efa39b5..798d097 100644
--- a/src/corelib/tools/qstringbuilder.h
+++ b/src/corelib/tools/qstringbuilder.h
@@ -66,7 +66,7 @@ public:
     const char *data() const { return m_data; }
 
     template <int N>
-    QLatin1Literal(const char (&str)[N]) 
+    QLatin1Literal(const char (&str)[N])
         : m_size(N - 1), m_data(str) {}
 
 private:
@@ -74,6 +74,21 @@ private:
     const char *m_data;
 };
 
+struct Q_CORE_EXPORT QAbstractConcatenable
+{
+protected:
+    static void convertFromAscii(const char *a, int len, QChar *&out);
+
+    static inline void convertFromAscii(char a, QChar *&out)
+    {
+#ifndef QT_NO_TEXTCODEC
+        if (QString::codecForCStrings)
+            *out++ = QChar::fromAscii(a);
+        else
+#endif
+            *out++ = QLatin1Char(a);
+    }
+};
 
 template <typename T> struct QConcatenable {};
 
@@ -87,9 +102,12 @@ public:
     {
         QString s(QConcatenable< QStringBuilder<A, B> >::size(*this),
             Qt::Uninitialized);
-        
+
         QChar *d = s.data();
         QConcatenable< QStringBuilder<A, B> >::appendTo(*this, d);
+        // this resize is necessary since we allocate a bit too much
+        // when dealing with variable sized 8-bit encodings
+        s.resize(d - s.data());
         return s;
     }
     QByteArray toLatin1() const { return QString(*this).toLatin1(); }
@@ -99,13 +117,13 @@ public:
 };
 
 
-template <> struct QConcatenable<char>
+template <> struct QConcatenable<char> : private QAbstractConcatenable
 {
     typedef char type;
     static int size(const char) { return 1; }
     static inline void appendTo(const char c, QChar *&out)
     {
-        *out++ = QLatin1Char(c);
+        QAbstractConcatenable::convertFromAscii(c, out);
     }
 };
 
@@ -170,7 +188,7 @@ template <> struct QConcatenable<QString>
     {
         const int n = a.size();
         memcpy(out, reinterpret_cast<const char*>(a.constData()), sizeof(QChar) * n);
-        out += n; 
+        out += n;
     }
 };
 
@@ -182,53 +200,51 @@ template <> struct QConcatenable<QStringRef>
     {
         const int n = a.size();
         memcpy(out, reinterpret_cast<const char*>(a.constData()), sizeof(QChar) * n);
-        out += n; 
+        out += n;
     }
 };
 
 #ifndef QT_NO_CAST_FROM_ASCII
-template <int N> struct QConcatenable<char[N]>
+template <int N> struct QConcatenable<char[N]> : private QAbstractConcatenable
 {
     typedef char type[N];
-    static int size(const char[N]) { return N - 1; }
+    static int size(const char[N])
+    {
+        return N - 1;
+    }
     static inline void appendTo(const char a[N], QChar *&out)
     {
-        for (int i = 0; i < N - 1; ++i)
-            *out++ = QLatin1Char(a[i]);
+        QAbstractConcatenable::convertFromAscii(a, N, out);
     }
 };
 
-template <int N> struct QConcatenable<const char[N]>
+template <int N> struct QConcatenable<const char[N]> : private QAbstractConcatenable
 {
     typedef const char type[N];
     static int size(const char[N]) { return N - 1; }
     static inline void appendTo(const char a[N], QChar *&out)
     {
-        for (int i = 0; i < N - 1; ++i)
-            *out++ = QLatin1Char(a[i]);
+        QAbstractConcatenable::convertFromAscii(a, N, out);
     }
 };
 
-template <> struct QConcatenable<const char *>
+template <> struct QConcatenable<const char *> : private QAbstractConcatenable
 {
     typedef char const *type;
     static int size(const char *a) { return qstrlen(a); }
     static inline void appendTo(const char *a, QChar *&out)
     {
-        while (*a)
-            *out++ = QLatin1Char(*a++);
+        QAbstractConcatenable::convertFromAscii(a, -1, out);
     }
 };
 
-template <> struct QConcatenable<QByteArray>
+template <> struct QConcatenable<QByteArray> : private QAbstractConcatenable
 {
     typedef QByteArray type;
     static int size(const QByteArray &ba) { return qstrnlen(ba.constData(), ba.size()); }
     static inline void appendTo(const QByteArray &ba, QChar *&out)
     {
-        const char *data = ba.constData();
-        while (*data)
-            *out++ = QLatin1Char(*data++);
+        QAbstractConcatenable::convertFromAscii(ba.constData(), -1, out);
     }
 };
 #endif
@@ -237,7 +253,7 @@ template <typename A, typename B>
 struct QConcatenable< QStringBuilder<A, B> >
 {
     typedef QStringBuilder<A, B> type;
-    static int size(const type &p) 
+    static int size(const type &p)
     {
         return QConcatenable<A>::size(p.a) + QConcatenable<B>::size(p.b);
     }
diff --git a/tests/auto/qstringbuilder1/stringbuilder.cpp b/tests/auto/qstringbuilder1/stringbuilder.cpp
index f35d4d2..9dc467e 100644
--- a/tests/auto/qstringbuilder1/stringbuilder.cpp
+++ b/tests/auto/qstringbuilder1/stringbuilder.cpp
@@ -41,8 +41,15 @@
 
 #define LITERAL "some literal"
 
+// "some literal", but replacing all vocals by their umlauted UTF-8 string :)
+#define UTF8_LITERAL "s\xc3\xb6m\xc3\xab l\xc3\xaft\xc3\xabr\xc3\xa4l"
+
 void runScenario()
 {
+    // set codec for C strings to 0, enforcing Latin1
+    QTextCodec::setCodecForCStrings(0);
+    QVERIFY(!QTextCodec::codecForCStrings());
+
     QLatin1Literal l1literal(LITERAL);
     QLatin1String l1string(LITERAL);
     QString string(l1string);
@@ -75,5 +82,24 @@ void runScenario()
     QCOMPARE(r, r2);
     r = string P ba;
     QCOMPARE(r, r2);
+
+    // now test with codec for C strings set
+    QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));
+    QVERIFY(QTextCodec::codecForCStrings());
+    QCOMPARE(QTextCodec::codecForCStrings()->name(), QByteArray("UTF-8"));
+
+    string = QString::fromUtf8(UTF8_LITERAL);
+    r2 = QString::fromUtf8(UTF8_LITERAL UTF8_LITERAL);
+    ba = UTF8_LITERAL;
+
+    r = string P UTF8_LITERAL;
+    QCOMPARE(r.size(), r2.size());
+    QCOMPARE(r, r2);
+    r = UTF8_LITERAL P string;
+    QCOMPARE(r, r2);
+    r = ba P string;
+    QCOMPARE(r, r2);
+    r = string P ba;
+    QCOMPARE(r, r2);
 #endif
 }
-- 
cgit v0.12


From de2e9b75c3e71906322ffae1eaa4219a662266c2 Mon Sep 17 00:00:00 2001
From: kh1 <qt-info@nokia.com>
Date: Wed, 4 Nov 2009 16:44:14 +0100
Subject: Fix Assistant to never access the network.

Task-number: QT-1684
Reviewed-by: ck
---
 tools/assistant/tools/assistant/helpviewer.cpp | 32 ++++++++++++--------------
 1 file changed, 15 insertions(+), 17 deletions(-)

diff --git a/tools/assistant/tools/assistant/helpviewer.cpp b/tools/assistant/tools/assistant/helpviewer.cpp
index 53f3822..c888a5f 100644
--- a/tools/assistant/tools/assistant/helpviewer.cpp
+++ b/tools/assistant/tools/assistant/helpviewer.cpp
@@ -137,24 +137,22 @@ QNetworkReply *HelpNetworkAccessManager::createRequest(Operation op,
     const QNetworkRequest &request, QIODevice *outgoingData)
 {
     const QString& scheme = request.url().scheme();
-    if (scheme == QLatin1String("qthelp") || scheme == QLatin1String("about")) {
-        const QUrl& url = request.url();
-        QString mimeType = url.toString();
-        if (mimeType.endsWith(QLatin1String(".svg"))
-            || mimeType.endsWith(QLatin1String(".svgz"))) {
-           mimeType = QLatin1String("image/svg+xml");
-        }
-        else if (mimeType.endsWith(QLatin1String(".css"))) {
-           mimeType = QLatin1String("text/css");
-        }
-        else if (mimeType.endsWith(QLatin1String(".js"))) {
-           mimeType = QLatin1String("text/javascript");
-        } else {
-            mimeType = QLatin1String("text/html");
-        }
-        return new HelpNetworkReply(request, helpEngine->fileData(url), mimeType);
+    const QUrl& url = request.url();
+    QString mimeType = url.toString();
+    if (mimeType.endsWith(QLatin1String(".svg"))
+        || mimeType.endsWith(QLatin1String(".svgz"))) {
+            mimeType = QLatin1String("image/svg+xml");
     }
-    return QNetworkAccessManager::createRequest(op, request, outgoingData);
+    else if (mimeType.endsWith(QLatin1String(".css"))) {
+        mimeType = QLatin1String("text/css");
+    }
+    else if (mimeType.endsWith(QLatin1String(".js"))) {
+        mimeType = QLatin1String("text/javascript");
+    } else {
+        mimeType = QLatin1String("text/html");
+    }
+
+    return new HelpNetworkReply(request, helpEngine->fileData(url), mimeType);
 }
 
 class HelpPage : public QWebPage
-- 
cgit v0.12


From 5f9187991c25c3bbe812b788251678f0ab1116a3 Mon Sep 17 00:00:00 2001
From: Gabriel de Dietrich <gabriel.dietrich-de@nokia.com>
Date: Wed, 4 Nov 2009 16:09:27 +0100
Subject: Wrong styling of checkable menu items.

When using style sheets, the fallback for the menu item is
QWindowsStyle. However, QWindowsStyle doesn't draw anything when the item is
not checked.

We now mimick what QWindowsStyle would draw in
QStyleSheetStyle::drawControl().

The "static const int windows*" variables in qwindowsstyle.cpp
have been moved into QWindowsStylePrivate to make them accessible to
QStyleSheetStyle.

Reviewed-by: Olivier
Task-number: QTBUG-2218
Task-number: QTBUG-2217
Task-number: QTBUG-3479
---
 src/gui/styles/qstylesheetstyle.cpp | 21 +++++++++++++++++++++
 src/gui/styles/qwindowsstyle.cpp    | 37 ++++++++++++++++---------------------
 src/gui/styles/qwindowsstyle_p.h    | 10 ++++++++++
 3 files changed, 47 insertions(+), 21 deletions(-)

diff --git a/src/gui/styles/qstylesheetstyle.cpp b/src/gui/styles/qstylesheetstyle.cpp
index e61658b..ce73fd8 100644
--- a/src/gui/styles/qstylesheetstyle.cpp
+++ b/src/gui/styles/qstylesheetstyle.cpp
@@ -3606,6 +3606,27 @@ void QStyleSheetStyle::drawControl(ControlElement ce, const QStyleOption *opt, Q
                 }
             } else if (hasStyleRule(w, PseudoElement_MenuCheckMark) || hasStyleRule(w, PseudoElement_MenuRightArrow)) {
                 QWindowsStyle::drawControl(ce, &mi, p, w);
+                if (mi.checkType != QStyleOptionMenuItem::NotCheckable && !mi.checked) {
+                    // We have a style defined, but QWindowsStyle won't draw anything if not checked.
+                    // So we mimick what QWindowsStyle would do.
+                    int checkcol = qMax<int>(mi.maxIconWidth, QWindowsStylePrivate::windowsCheckMarkWidth);
+                    QRect vCheckRect = visualRect(opt->direction, mi.rect, QRect(mi.rect.x(), mi.rect.y(), checkcol, mi.rect.height()));
+                    if (mi.state.testFlag(State_Enabled) && mi.state.testFlag(State_Selected)) {
+                        qDrawShadePanel(p, vCheckRect, mi.palette, true, 1, &mi.palette.brush(QPalette::Button));
+                    } else {
+                        QBrush fill(mi.palette.light().color(), Qt::Dense4Pattern);
+                        qDrawShadePanel(p, vCheckRect, mi.palette, true, 1, &fill);
+                    }
+                    QRenderRule subSubRule = renderRule(w, opt, PseudoElement_MenuCheckMark);
+                    if (subSubRule.hasDrawable()) {
+                        QStyleOptionMenuItem newMi(mi);
+                        newMi.rect = visualRect(opt->direction, mi.rect, QRect(mi.rect.x() + QWindowsStylePrivate::windowsItemFrame,
+                                                                               mi.rect.y() + QWindowsStylePrivate::windowsItemFrame,
+                                                                               checkcol - 2 * QWindowsStylePrivate::windowsItemFrame,
+                                                                               mi.rect.height() - 2 * QWindowsStylePrivate::windowsItemFrame));
+                        drawPrimitive(PE_IndicatorMenuCheckMark, &newMi, p, w);
+                    }
+                }
             } else {
                 if (rule.hasDrawable() && !subRule.hasDrawable() && !(opt->state & QStyle::State_Selected)) {
                     mi.palette.setColor(QPalette::Window, Qt::transparent);
diff --git a/src/gui/styles/qwindowsstyle.cpp b/src/gui/styles/qwindowsstyle.cpp
index abce4d2..f894b82 100644
--- a/src/gui/styles/qwindowsstyle.cpp
+++ b/src/gui/styles/qwindowsstyle.cpp
@@ -115,14 +115,6 @@ QT_BEGIN_INCLUDE_NAMESPACE
 #include <limits.h>
 QT_END_INCLUDE_NAMESPACE
 
-static const int windowsItemFrame        =  2; // menu item frame width
-static const int windowsSepHeight        =  9; // separator item height
-static const int windowsItemHMargin      =  3; // menu item hor text margin
-static const int windowsItemVMargin      =  2; // menu item ver text margin
-static const int windowsArrowHMargin     =  6; // arrow horizontal margin
-static const int windowsRightBorder      = 15; // right border on windows
-static const int windowsCheckMarkWidth   = 12; // checkmarks width on windows
-
 enum QSliderDirection { SlUp, SlDown, SlLeft, SlRight };
 
 /*
@@ -1847,7 +1839,7 @@ void QWindowsStyle::drawControl(ControlElement ce, const QStyleOption *opt, QPai
             bool act = menuitem->state & State_Selected;
 
             // windows always has a check column, regardless whether we have an icon or not
-            int checkcol = qMax(menuitem->maxIconWidth, windowsCheckMarkWidth);
+            int checkcol = qMax<int>(menuitem->maxIconWidth, QWindowsStylePrivate::windowsCheckMarkWidth);
 
             QBrush fill = menuitem->palette.brush(act ? QPalette::Highlight : QPalette::Button);
             p->fillRect(menuitem->rect.adjusted(0, 0, -1, 0), fill);
@@ -1903,8 +1895,10 @@ void QWindowsStyle::drawControl(ControlElement ce, const QStyleOption *opt, QPai
                     newMi.state |= State_Enabled;
                 if (act)
                     newMi.state |= State_On;
-                newMi.rect = visualRect(opt->direction, menuitem->rect, QRect(menuitem->rect.x() + windowsItemFrame, menuitem->rect.y() + windowsItemFrame,
-                                                                              checkcol - 2 * windowsItemFrame, menuitem->rect.height() - 2*windowsItemFrame));
+                newMi.rect = visualRect(opt->direction, menuitem->rect, QRect(menuitem->rect.x() + QWindowsStylePrivate::windowsItemFrame,
+                                                                              menuitem->rect.y() + QWindowsStylePrivate::windowsItemFrame,
+                                                                              checkcol - 2 * QWindowsStylePrivate::windowsItemFrame,
+                                                                              menuitem->rect.height() - 2 * QWindowsStylePrivate::windowsItemFrame));
                 proxy()->drawPrimitive(PE_IndicatorMenuCheckMark, &newMi, p, widget);
             }
             p->setPen(act ? menuitem->palette.highlightedText().color() : menuitem->palette.buttonText().color());
@@ -1915,9 +1909,10 @@ void QWindowsStyle::drawControl(ControlElement ce, const QStyleOption *opt, QPai
                 p->setPen(discol);
             }
 
-            int xm = windowsItemFrame + checkcol + windowsItemHMargin;
+            int xm = QWindowsStylePrivate::windowsItemFrame + checkcol + QWindowsStylePrivate::windowsItemHMargin;
             int xpos = menuitem->rect.x() + xm;
-            QRect textRect(xpos, y + windowsItemVMargin, w - xm - windowsRightBorder - tab + 1, h - 2 * windowsItemVMargin);
+            QRect textRect(xpos, y + QWindowsStylePrivate::windowsItemVMargin,
+                           w - xm - QWindowsStylePrivate::windowsRightBorder - tab + 1, h - 2 * QWindowsStylePrivate::windowsItemVMargin);
             QRect vTextRect = visualRect(opt->direction, menuitem->rect, textRect);
             QString s = menuitem->text;
             if (!s.isEmpty()) {                     // draw text
@@ -1951,10 +1946,10 @@ void QWindowsStyle::drawControl(ControlElement ce, const QStyleOption *opt, QPai
                 p->restore();
             }
             if (menuitem->menuItemType == QStyleOptionMenuItem::SubMenu) {// draw sub menu arrow
-                int dim = (h - 2 * windowsItemFrame) / 2;
+                int dim = (h - 2 * QWindowsStylePrivate::windowsItemFrame) / 2;
                 PrimitiveElement arrow;
                 arrow = (opt->direction == Qt::RightToLeft) ? PE_IndicatorArrowLeft : PE_IndicatorArrowRight;
-                xpos = x + w - windowsArrowHMargin - windowsItemFrame - dim;
+                xpos = x + w - QWindowsStylePrivate::windowsArrowHMargin - QWindowsStylePrivate::windowsItemFrame - dim;
                 QRect  vSubMenuRect = visualRect(opt->direction, menuitem->rect, QRect(xpos, y + h / 2 - dim / 2, dim, dim));
                 QStyleOptionMenuItem newMI = *menuitem;
                 newMI.rect = vSubMenuRect;
@@ -3193,7 +3188,7 @@ QSize QWindowsStyle::sizeFromContents(ContentsType ct, const QStyleOption *opt,
             sz = QCommonStyle::sizeFromContents(ct, opt, csz, widget);
 
             if (mi->menuItemType == QStyleOptionMenuItem::Separator) {
-                sz = QSize(10, windowsSepHeight);
+                sz = QSize(10, QWindowsStylePrivate::windowsSepHeight);
             }
             else if (mi->icon.isNull()) {
                 sz.setHeight(sz.height() - 2);
@@ -3204,14 +3199,14 @@ QSize QWindowsStyle::sizeFromContents(ContentsType ct, const QStyleOption *opt,
                 int iconExtent = proxy()->pixelMetric(PM_SmallIconSize, opt, widget);
                 sz.setHeight(qMax(sz.height(),
                                   mi->icon.actualSize(QSize(iconExtent, iconExtent)).height()
-                                  + 2 * windowsItemFrame));
+                                  + 2 * QWindowsStylePrivate::windowsItemFrame));
             }
             int maxpmw = mi->maxIconWidth;
             int tabSpacing = 20;
             if (mi->text.contains(QLatin1Char('\t')))
                 w += tabSpacing;
             else if (mi->menuItemType == QStyleOptionMenuItem::SubMenu)
-                w += 2 * windowsArrowHMargin;
+                w += 2 * QWindowsStylePrivate::windowsArrowHMargin;
             else if (mi->menuItemType == QStyleOptionMenuItem::DefaultItem) {
                 // adjust the font and add the difference in size.
                 // it would be better if the font could be adjusted in the initStyleOption qmenu func!!
@@ -3222,9 +3217,9 @@ QSize QWindowsStyle::sizeFromContents(ContentsType ct, const QStyleOption *opt,
                 w += fmBold.width(mi->text) - fm.width(mi->text);
             }
 
-            int checkcol = qMax(maxpmw, windowsCheckMarkWidth); // Windows always shows a check column
+            int checkcol = qMax<int>(maxpmw, QWindowsStylePrivate::windowsCheckMarkWidth); // Windows always shows a check column
             w += checkcol;
-            w += windowsRightBorder + 10;
+            w += QWindowsStylePrivate::windowsRightBorder + 10;
             sz.setWidth(w);
         }
         break;
@@ -3232,7 +3227,7 @@ QSize QWindowsStyle::sizeFromContents(ContentsType ct, const QStyleOption *opt,
 #ifndef QT_NO_MENUBAR
     case CT_MenuBarItem:
         if (!sz.isEmpty())
-            sz += QSize(windowsItemHMargin * 4, windowsItemVMargin * 2);
+            sz += QSize(QWindowsStylePrivate::windowsItemHMargin * 4, QWindowsStylePrivate::windowsItemVMargin * 2);
         break;
 #endif
                 // Otherwise, fall through
diff --git a/src/gui/styles/qwindowsstyle_p.h b/src/gui/styles/qwindowsstyle_p.h
index fb84dce..d81c82b 100644
--- a/src/gui/styles/qwindowsstyle_p.h
+++ b/src/gui/styles/qwindowsstyle_p.h
@@ -87,7 +87,17 @@ public:
     QColor activeGradientCaptionColor;
     QColor inactiveCaptionColor;
     QColor inactiveGradientCaptionColor;
+
+    enum {
+        windowsItemFrame        =  2, // menu item frame width
+        windowsSepHeight        =  9, // separator item height
+        windowsItemHMargin      =  3, // menu item hor text margin
+        windowsItemVMargin      =  2, // menu item ver text margin
+        windowsArrowHMargin     =  6, // arrow horizontal margin
+        windowsRightBorder      = 15, // right border on windows
+        windowsCheckMarkWidth   = 12  // checkmarks width on windows
     };
+};
 
 QT_END_NAMESPACE
 
-- 
cgit v0.12


From 7f29368eccc9a06a4b817608887371225b0f2347 Mon Sep 17 00:00:00 2001
From: mae <qt-info@nokia.com>
Date: Wed, 4 Nov 2009 17:06:11 +0100
Subject: QPlainTextEdit redraw issue in QTextControl

There is an optimization in QTextControl, that it only requests
updates for single blocks if only a single block was changed. This
update was requested with the block's bounding rectangle.

In the case of disabled line wrapping in combination with a very long
line, a block change can result in a narrower block bounding rectangle.
This then resulted in pixel on the screen not being redrawn properly.

The fix enlarges the requested update rectangle horizontally.

The bug was discovered during inhouse Qt Creator testing.

Reviewed-by: Oswald Buddenhagen
---
 src/gui/text/qtextcontrol.cpp | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/src/gui/text/qtextcontrol.cpp b/src/gui/text/qtextcontrol.cpp
index 3f6545c..f5579b9 100644
--- a/src/gui/text/qtextcontrol.cpp
+++ b/src/gui/text/qtextcontrol.cpp
@@ -1296,7 +1296,9 @@ QVariant QTextControl::loadResource(int type, const QUrl &name)
 void QTextControlPrivate::_q_updateBlock(const QTextBlock &block)
 {
     Q_Q(QTextControl);
-    emit q->updateRequest(q->blockBoundingRect(block));
+    QRectF br = q->blockBoundingRect(block);
+    br.setRight(qreal(INT_MAX)); // the block might have shrunk
+    emit q->updateRequest(br);
 }
 
 QRectF QTextControlPrivate::rectForPosition(int position) const
-- 
cgit v0.12


From 7a0b728452c099934dbe7860c3614dfdc4373a9c Mon Sep 17 00:00:00 2001
From: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
Date: Tue, 3 Nov 2009 17:09:12 +0100
Subject: namespaces can have parents, too

---
 tools/linguist/lupdate/cpp.cpp | 15 ++++++++++-----
 1 file changed, 10 insertions(+), 5 deletions(-)

diff --git a/tools/linguist/lupdate/cpp.cpp b/tools/linguist/lupdate/cpp.cpp
index 4d89156..02e87a0 100644
--- a/tools/linguist/lupdate/cpp.cpp
+++ b/tools/linguist/lupdate/cpp.cpp
@@ -135,6 +135,11 @@ struct Namespace {
     // Nested classes may be forward-declared inside a definition, and defined in another file.
     // The latter will detach the class' child list, so clones need a backlink to the original
     // definition (either one in case of multiple definitions).
+    // Namespaces can have tr() functions as well, so we need to track parent definitions for
+    // them as well. The complication is that we may have to deal with a forrest instead of
+    // a tree - in that case the parent will be arbitrary. However, it seem likely that
+    // Q_DECLARE_TR_FUNCTIONS would be used either in "class-like" namespaces with a central
+    // header or only locally in a file.
     Namespace *classDef;
 
     QString trQualification;
@@ -1635,7 +1640,7 @@ void CppParser::parseInternal(ConversionData &cd, QSet<QString> &inclusions)
                         break;
                     NamespaceList nsl;
                     if (fullyQualify(namespaces, fullName, false, &nsl, 0))
-                        modifyNamespace(&namespaces, false)->aliases[ns] = nsl;
+                        modifyNamespace(&namespaces)->aliases[ns] = nsl;
                 }
             } else if (yyTok == Tok_LeftBrace) {
                 // Anonymous namespace
@@ -1661,7 +1666,7 @@ void CppParser::parseInternal(ConversionData &cd, QSet<QString> &inclusions)
                 }
                 NamespaceList nsl;
                 if (fullyQualify(namespaces, fullName, false, &nsl, 0))
-                    modifyNamespace(&namespaces, false)->usings << HashStringList(nsl);
+                    modifyNamespace(&namespaces)->usings << HashStringList(nsl);
             } else {
                 QList<HashString> fullName;
                 if (yyTok == Tok_ColonColon)
@@ -1678,7 +1683,7 @@ void CppParser::parseInternal(ConversionData &cd, QSet<QString> &inclusions)
                     break;
                 NamespaceList nsl;
                 if (fullyQualify(namespaces, fullName, false, &nsl, 0))
-                    modifyNamespace(&namespaces, true)->aliases[nsl.last()] = nsl;
+                    modifyNamespace(&namespaces)->aliases[nsl.last()] = nsl;
             }
             break;
         case Tok_tr:
@@ -1875,7 +1880,7 @@ void CppParser::parseInternal(ConversionData &cd, QSet<QString> &inclusions)
             break;
         case Tok_Q_DECLARE_TR_FUNCTIONS:
             if (getMacroArgs()) {
-                Namespace *ns = modifyNamespace(&namespaces, true);
+                Namespace *ns = modifyNamespace(&namespaces);
                 ns->hasTrFunctions = true;
                 ns->trQualification = yyWord;
                 ns->trQualification.detach();
@@ -1883,7 +1888,7 @@ void CppParser::parseInternal(ConversionData &cd, QSet<QString> &inclusions)
             yyTok = getToken();
             break;
         case Tok_Q_OBJECT:
-            modifyNamespace(&namespaces, true)->hasTrFunctions = true;
+            modifyNamespace(&namespaces)->hasTrFunctions = true;
             yyTok = getToken();
             break;
         case Tok_Ident:
-- 
cgit v0.12


From df12ef0e1fa327103b09e9a817d83b8c8d3035d7 Mon Sep 17 00:00:00 2001
From: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
Date: Tue, 3 Nov 2009 17:08:08 +0100
Subject: fix bogus "Class '<foo>' lacks Q_OBJECT macro"

the optimization not to look for parent definitions if we already knew
that there would be none did not consider that we only know that the
leaf node is missing, not any intermediate nodes.
---
 .../lupdate/testdata/good/parsecpp2/main.cpp       | 30 +++++++++++++
 .../lupdate/testdata/good/parsecpp2/main.h         | 51 ++++++++++++++++++++++
 .../testdata/good/parsecpp2/project.ts.result      | 16 +++++++
 tools/linguist/lupdate/cpp.cpp                     |  6 +--
 4 files changed, 100 insertions(+), 3 deletions(-)
 create mode 100644 tests/auto/linguist/lupdate/testdata/good/parsecpp2/main.h

diff --git a/tests/auto/linguist/lupdate/testdata/good/parsecpp2/main.cpp b/tests/auto/linguist/lupdate/testdata/good/parsecpp2/main.cpp
index eaa271a..d720b8f 100644
--- a/tests/auto/linguist/lupdate/testdata/good/parsecpp2/main.cpp
+++ b/tests/auto/linguist/lupdate/testdata/good/parsecpp2/main.cpp
@@ -63,3 +63,33 @@ line c++ comment } (with brace)
 #define This is another // comment in } define \
      something } comment
 } // complain here
+
+
+
+// Nested class in same file
+class TopLevel {
+    Q_OBJECT
+
+    class Nested;
+};
+
+class TopLevel::Nested {
+    void foo();
+};
+
+TopLevel::Nested::foo()
+{
+    TopLevel::tr("TopLevel");
+}
+
+// Nested class in other file
+#include "main.h"
+
+class TopLevel2::Nested {
+    void foo();
+};
+
+TopLevel2::Nested::foo()
+{
+    TopLevel2::tr("TopLevel2");
+}
diff --git a/tests/auto/linguist/lupdate/testdata/good/parsecpp2/main.h b/tests/auto/linguist/lupdate/testdata/good/parsecpp2/main.h
new file mode 100644
index 0000000..54a76ab
--- /dev/null
+++ b/tests/auto/linguist/lupdate/testdata/good/parsecpp2/main.h
@@ -0,0 +1,51 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+// IMPORTANT!!!! If you want to add testdata to this file,
+// always add it to the end in order to not change the linenumbers of translations!!!
+
+class TopLevel2 {
+    Q_OBJECT
+
+    class Nested;
+};
+
+
diff --git a/tests/auto/linguist/lupdate/testdata/good/parsecpp2/project.ts.result b/tests/auto/linguist/lupdate/testdata/good/parsecpp2/project.ts.result
index 07a7469..ef5adb2 100644
--- a/tests/auto/linguist/lupdate/testdata/good/parsecpp2/project.ts.result
+++ b/tests/auto/linguist/lupdate/testdata/good/parsecpp2/project.ts.result
@@ -1,4 +1,20 @@
 <?xml version="1.0" encoding="utf-8"?>
 <!DOCTYPE TS>
 <TS version="2.0">
+<context>
+    <name>TopLevel</name>
+    <message>
+        <location filename="main.cpp" line="82"/>
+        <source>TopLevel</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
+    <name>TopLevel2</name>
+    <message>
+        <location filename="main.cpp" line="94"/>
+        <source>TopLevel2</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
 </TS>
diff --git a/tools/linguist/lupdate/cpp.cpp b/tools/linguist/lupdate/cpp.cpp
index 02e87a0..5ef7099 100644
--- a/tools/linguist/lupdate/cpp.cpp
+++ b/tools/linguist/lupdate/cpp.cpp
@@ -271,7 +271,7 @@ private:
     const Namespace *findNamespace(const NamespaceList &namespaces, int nsCount = -1) const;
     void enterNamespace(NamespaceList *namespaces, const HashString &name);
     void truncateNamespaces(NamespaceList *namespaces, int lenght);
-    Namespace *modifyNamespace(NamespaceList *namespaces, bool tryOrigin = true);
+    Namespace *modifyNamespace(NamespaceList *namespaces, bool haveLast = true);
 
     enum {
         Tok_Eof, Tok_class, Tok_friend, Tok_namespace, Tok_using, Tok_return,
@@ -963,7 +963,7 @@ void CppParser::loadState(const SavedState *state)
     pendingContext = state->pendingContext;
 }
 
-Namespace *CppParser::modifyNamespace(NamespaceList *namespaces, bool tryOrigin)
+Namespace *CppParser::modifyNamespace(NamespaceList *namespaces, bool haveLast)
 {
     Namespace *pns, *ns = &results->rootNamespace;
     for (int i = 1; i < namespaces->count(); ++i) {
@@ -971,7 +971,7 @@ Namespace *CppParser::modifyNamespace(NamespaceList *namespaces, bool tryOrigin)
         if (!(ns = pns->children.value(namespaces->at(i)))) {
             do {
                 ns = new Namespace;
-                if (tryOrigin)
+                if (haveLast || i < namespaces->count() - 1)
                     if (const Namespace *ons = findNamespace(*namespaces, i + 1))
                         ns->classDef = ons->classDef;
                 pns->children.insert(namespaces->at(i), ns);
-- 
cgit v0.12


From 21f0f9157802f011bb02b96fd79057084039ae2b Mon Sep 17 00:00:00 2001
From: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
Date: Wed, 4 Nov 2009 10:48:20 +0100
Subject: introduce delayed resolution of aliases

this has two effects:
- using-declarations which use forward-declared classes work without
  collecting the forward declarations, as the resolution happens at a
  place where the class definition must have been encountered already
- it should be a bit faster
---
 .../lupdate/testdata/good/parsecpp2/main.cpp       | 19 ++++++++
 .../testdata/good/parsecpp2/project.ts.result      |  8 +++
 tools/linguist/lupdate/cpp.cpp                     | 57 ++++++++++++++++------
 3 files changed, 68 insertions(+), 16 deletions(-)

diff --git a/tests/auto/linguist/lupdate/testdata/good/parsecpp2/main.cpp b/tests/auto/linguist/lupdate/testdata/good/parsecpp2/main.cpp
index d720b8f..7ddb68f 100644
--- a/tests/auto/linguist/lupdate/testdata/good/parsecpp2/main.cpp
+++ b/tests/auto/linguist/lupdate/testdata/good/parsecpp2/main.cpp
@@ -93,3 +93,22 @@ TopLevel2::Nested::foo()
 {
     TopLevel2::tr("TopLevel2");
 }
+
+
+
+namespace NameSpace {
+class ToBeUsed;
+}
+
+// using statement before class definition
+using NameSpace::ToBeUsed;
+
+class NameSpace::ToBeUsed {
+    Q_OBJECT
+    void caller();
+};
+
+void ToBeUsed::caller()
+{
+    tr("NameSpace::ToBeUsed");
+}
diff --git a/tests/auto/linguist/lupdate/testdata/good/parsecpp2/project.ts.result b/tests/auto/linguist/lupdate/testdata/good/parsecpp2/project.ts.result
index ef5adb2..6f48e27 100644
--- a/tests/auto/linguist/lupdate/testdata/good/parsecpp2/project.ts.result
+++ b/tests/auto/linguist/lupdate/testdata/good/parsecpp2/project.ts.result
@@ -2,6 +2,14 @@
 <!DOCTYPE TS>
 <TS version="2.0">
 <context>
+    <name>NameSpace::ToBeUsed</name>
+    <message>
+        <location filename="main.cpp" line="113"/>
+        <source>NameSpace::ToBeUsed</source>
+        <translation type="unfinished"></translation>
+    </message>
+</context>
+<context>
     <name>TopLevel</name>
     <message>
         <location filename="main.cpp" line="82"/>
diff --git a/tools/linguist/lupdate/cpp.cpp b/tools/linguist/lupdate/cpp.cpp
index 5ef7099..beaf246 100644
--- a/tools/linguist/lupdate/cpp.cpp
+++ b/tools/linguist/lupdate/cpp.cpp
@@ -261,11 +261,14 @@ private:
     bool qualifyOneCallbackUsing(const Namespace *ns, void *context) const;
     bool qualifyOne(const NamespaceList &namespaces, int nsCnt, const HashString &segment,
                     NamespaceList *resolved) const;
-    bool fullyQualify(const NamespaceList &namespaces, const QList<HashString> &segments,
-                      bool isDeclaration,
+    bool fullyQualify(const NamespaceList &namespaces, int nsCnt,
+                      const QList<HashString> &segments, bool isDeclaration,
                       NamespaceList *resolved, QStringList *unresolved) const;
-    bool fullyQualify(const NamespaceList &namespaces, const QString &segments,
-                      bool isDeclaration,
+    bool fullyQualify(const NamespaceList &namespaces,
+                      const QList<HashString> &segments, bool isDeclaration,
+                      NamespaceList *resolved, QStringList *unresolved) const;
+    bool fullyQualify(const NamespaceList &namespaces,
+                      const QString &segments, bool isDeclaration,
                       NamespaceList *resolved, QStringList *unresolved) const;
     bool findNamespaceCallback(const Namespace *ns, void *context) const;
     const Namespace *findNamespace(const NamespaceList &namespaces, int nsCount = -1) const;
@@ -1057,7 +1060,18 @@ bool CppParser::qualifyOneCallbackOwn(const Namespace *ns, void *context) const
     }
     QHash<HashString, NamespaceList>::ConstIterator nsai = ns->aliases.constFind(data->segment);
     if (nsai != ns->aliases.constEnd()) {
-        *data->resolved = *nsai;
+        const NamespaceList &nsl = *nsai;
+        if (nsl.last().value().isEmpty()) { // Delayed alias resolution
+            NamespaceList &nslIn = *const_cast<NamespaceList *>(&nsl);
+            nslIn.removeLast();
+            NamespaceList nslOut;
+            if (!fullyQualify(data->namespaces, data->nsCount, nslIn, false, &nslOut, 0)) {
+                const_cast<Namespace *>(ns)->aliases.remove(data->segment);
+                return false;
+            }
+            nslIn = nslOut;
+        }
+        *data->resolved = nsl;
         return true;
     }
     return false;
@@ -1086,8 +1100,8 @@ bool CppParser::qualifyOne(const NamespaceList &namespaces, int nsCnt, const Has
     return visitNamespace(namespaces, nsCnt, &CppParser::qualifyOneCallbackUsing, &data);
 }
 
-bool CppParser::fullyQualify(const NamespaceList &namespaces, const QList<HashString> &segments,
-                             bool isDeclaration,
+bool CppParser::fullyQualify(const NamespaceList &namespaces, int nsCnt,
+                             const QList<HashString> &segments, bool isDeclaration,
                              NamespaceList *resolved, QStringList *unresolved) const
 {
     int nsIdx;
@@ -1104,7 +1118,7 @@ bool CppParser::fullyQualify(const NamespaceList &namespaces, const QList<HashSt
         nsIdx = 0;
     } else {
         initSegIdx = 0;
-        nsIdx = namespaces.count() - 1;
+        nsIdx = nsCnt - 1;
     }
 
     do {
@@ -1127,8 +1141,16 @@ bool CppParser::fullyQualify(const NamespaceList &namespaces, const QList<HashSt
     return false;
 }
 
-bool CppParser::fullyQualify(const NamespaceList &namespaces, const QString &quali,
-                             bool isDeclaration,
+bool CppParser::fullyQualify(const NamespaceList &namespaces,
+                             const QList<HashString> &segments, bool isDeclaration,
+                             NamespaceList *resolved, QStringList *unresolved) const
+{
+    return fullyQualify(namespaces, namespaces.count(),
+                        segments, isDeclaration, resolved, unresolved);
+}
+
+bool CppParser::fullyQualify(const NamespaceList &namespaces,
+                             const QString &quali, bool isDeclaration,
                              NamespaceList *resolved, QStringList *unresolved) const
 {
     static QString strColons(QLatin1String("::"));
@@ -1638,9 +1660,8 @@ void CppParser::parseInternal(ConversionData &cd, QSet<QString> &inclusions)
                     }
                     if (fullName.isEmpty())
                         break;
-                    NamespaceList nsl;
-                    if (fullyQualify(namespaces, fullName, false, &nsl, 0))
-                        modifyNamespace(&namespaces)->aliases[ns] = nsl;
+                    fullName.append(HashString(QString())); // Mark as unresolved
+                    modifyNamespace(&namespaces)->aliases[ns] = fullName;
                 }
             } else if (yyTok == Tok_LeftBrace) {
                 // Anonymous namespace
@@ -1681,9 +1702,13 @@ void CppParser::parseInternal(ConversionData &cd, QSet<QString> &inclusions)
                 }
                 if (fullName.isEmpty())
                     break;
-                NamespaceList nsl;
-                if (fullyQualify(namespaces, fullName, false, &nsl, 0))
-                    modifyNamespace(&namespaces)->aliases[nsl.last()] = nsl;
+                // using-declarations cannot rename classes, so the last element of
+                // fullName is already the resolved name we actually want.
+                // As we do no resolution here, we'll collect useless usings of data
+                // members and methods as well. This is no big deal.
+                HashString &ns = fullName.last();
+                fullName.append(HashString(QString())); // Mark as unresolved
+                modifyNamespace(&namespaces)->aliases[ns] = fullName;
             }
             break;
         case Tok_tr:
-- 
cgit v0.12


From 2030779f5c222b96489ad458225931b167687307 Mon Sep 17 00:00:00 2001
From: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
Date: Wed, 4 Nov 2009 10:48:55 +0100
Subject: don't break on unterminated C comments

---
 tools/linguist/lupdate/cpp.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tools/linguist/lupdate/cpp.cpp b/tools/linguist/lupdate/cpp.cpp
index beaf246..fb95a95 100644
--- a/tools/linguist/lupdate/cpp.cpp
+++ b/tools/linguist/lupdate/cpp.cpp
@@ -788,7 +788,7 @@ uint CppParser::getToken()
                         if (yyCh == EOF) {
                             qWarning("%s:%d: Unterminated C++ comment\n",
                                      qPrintable(yyFileName), yyLineNo);
-                            return Tok_Comment;
+                            break;
                         }
                         *ptr++ = yyCh;
 
-- 
cgit v0.12


From e9803f49668361ce4fd96b82d5e54ad6b5896550 Mon Sep 17 00:00:00 2001
From: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
Date: Wed, 4 Nov 2009 11:51:58 +0100
Subject: construct ConversionData earlier

to avoid the insane number of function arguments in a few places
---
 tools/linguist/lrelease/main.cpp | 52 ++++++++++++++++------------------------
 1 file changed, 21 insertions(+), 31 deletions(-)

diff --git a/tools/linguist/lrelease/main.cpp b/tools/linguist/lrelease/main.cpp
index 2867849..db15506 100644
--- a/tools/linguist/lrelease/main.cpp
+++ b/tools/linguist/lrelease/main.cpp
@@ -100,15 +100,14 @@ static bool loadTsFile(Translator &tor, const QString &tsFileName, bool /* verbo
 }
 
 static bool releaseTranslator(Translator &tor, const QString &qmFileName,
-    bool verbose, bool ignoreUnfinished,
-    bool removeIdentical, bool idBased, TranslatorSaveMode mode)
+    ConversionData &cd, bool removeIdentical)
 {
-    Translator::reportDuplicates(tor.resolveDuplicates(), qmFileName, verbose);
+    Translator::reportDuplicates(tor.resolveDuplicates(), qmFileName, cd.isVerbose());
 
-    if (verbose)
+    if (cd.isVerbose())
         printOut(QCoreApplication::tr( "Updating '%1'...\n").arg(qmFileName));
     if (removeIdentical) {
-        if ( verbose )
+        if (cd.isVerbose())
             printOut(QCoreApplication::tr( "Removing translations equal to source text in '%1'...\n").arg(qmFileName));
         tor.stripIdenticalSourceTranslations();
     }
@@ -120,12 +119,7 @@ static bool releaseTranslator(Translator &tor, const QString &qmFileName,
         return false;
     }
 
-    ConversionData cd;
     tor.normalizeTranslations(cd);
-    cd.m_verbose = verbose;
-    cd.m_ignoreUnfinished = ignoreUnfinished;
-    cd.m_idBased = idBased;
-    cd.m_saveMode = mode;
     bool ok = tor.release(&file, cd);
     file.close();
 
@@ -139,11 +133,11 @@ static bool releaseTranslator(Translator &tor, const QString &qmFileName,
     return true;
 }
 
-static bool releaseTsFile(const QString& tsFileName, bool verbose,
-    bool ignoreUnfinished, bool removeIdentical, bool idBased, TranslatorSaveMode mode)
+static bool releaseTsFile(const QString& tsFileName,
+    ConversionData &cd, bool removeIdentical)
 {
     Translator tor;
-    if (!loadTsFile(tor, tsFileName, verbose))
+    if (!loadTsFile(tor, tsFileName, cd.isVerbose()))
         return false;
 
     QString qmFileName = tsFileName;
@@ -155,7 +149,7 @@ static bool releaseTsFile(const QString& tsFileName, bool verbose,
     }
     qmFileName += QLatin1String(".qm");
 
-    return releaseTranslator(tor, qmFileName, verbose, ignoreUnfinished, removeIdentical, idBased, mode);
+    return releaseTranslator(tor, qmFileName, cd, removeIdentical);
 }
 
 int main(int argc, char **argv)
@@ -166,11 +160,8 @@ int main(int argc, char **argv)
     if (translator.load(QLatin1String("lrelease_") + QLocale::system().name()))
         app.installTranslator(&translator);
 
-    bool verbose = true; // the default is true starting with Qt 4.2
-    bool ignoreUnfinished = false;
-    bool idBased = false;
-    // the default mode is SaveEverything starting with Qt 4.2
-    TranslatorSaveMode mode = SaveEverything;
+    ConversionData cd;
+    cd.m_verbose = true; // the default is true starting with Qt 4.2
     bool removeIdentical = false;
     Translator tor;
     QString outputFile;
@@ -178,25 +169,25 @@ int main(int argc, char **argv)
 
     for (int i = 1; i < argc; ++i) {
         if (args[i] == QLatin1String("-compress")) {
-            mode = SaveStripped;
+            cd.m_saveMode = SaveStripped;
             continue;
         } else if (args[i] == QLatin1String("-idbased")) {
-            idBased = true;
+            cd.m_idBased = true;
             continue;
         } else if (args[i] == QLatin1String("-nocompress")) {
-            mode = SaveEverything;
+            cd.m_saveMode = SaveEverything;
             continue;
         } else if (args[i] == QLatin1String("-removeidentical")) {
             removeIdentical = true;
             continue;
         } else if (args[i] == QLatin1String("-nounfinished")) {
-            ignoreUnfinished = true;
+            cd.m_ignoreUnfinished = true;
             continue;
         } else if (args[i] == QLatin1String("-silent")) {
-            verbose = false;
+            cd.m_verbose = false;
             continue;
         } else if (args[i] == QLatin1String("-verbose")) {
-            verbose = true;
+            cd.m_verbose = true;
             continue;
         } else if (args[i] == QLatin1String("-version")) {
             printOut(QCoreApplication::tr( "lrelease version %1\n").arg(QLatin1String(QT_VERSION_STR)) );
@@ -231,7 +222,7 @@ int main(int argc, char **argv)
         if (args[i].endsWith(QLatin1String(".pro"), Qt::CaseInsensitive)
             || args[i].endsWith(QLatin1String(".pri"), Qt::CaseInsensitive)) {
             QHash<QByteArray, QStringList> varMap;
-            bool ok = evaluateProFile(args[i], verbose, &varMap );
+            bool ok = evaluateProFile(args[i], cd.isVerbose(), &varMap);
             if (ok) {
                 QStringList translations = varMap.value("TRANSLATIONS");
                 if (translations.isEmpty()) {
@@ -240,7 +231,7 @@ int main(int argc, char **argv)
                              qPrintable(args[i]));
                 } else {
                     foreach (const QString &trans, translations)
-                        if (!releaseTsFile(trans, verbose, ignoreUnfinished, removeIdentical, idBased, mode))
+                        if (!releaseTsFile(trans, cd, removeIdentical))
                             return 1;
                 }
             } else {
@@ -251,18 +242,17 @@ int main(int argc, char **argv)
             }
         } else {
             if (outputFile.isEmpty()) {
-                if (!releaseTsFile(args[i], verbose, ignoreUnfinished, removeIdentical, idBased, mode))
+                if (!releaseTsFile(args[i], cd, removeIdentical))
                     return 1;
             } else {
-                if (!loadTsFile(tor, args[i], verbose))
+                if (!loadTsFile(tor, args[i], cd.isVerbose()))
                     return 1;
             }
         }
     }
 
     if (!outputFile.isEmpty())
-        return releaseTranslator(tor, outputFile, verbose, ignoreUnfinished,
-                                 removeIdentical, idBased, mode) ? 0 : 1;
+        return releaseTranslator(tor, outputFile, cd, removeIdentical) ? 0 : 1;
 
     return 0;
 }
-- 
cgit v0.12


From ca03a94ed93e4baa71adf9dacb3fddf9590040ef Mon Sep 17 00:00:00 2001
From: axis <qt-info@nokia.com>
Date: Wed, 4 Nov 2009 13:19:42 +0100
Subject: Fixed input panel detection on post-5.0 S60 SDKs.

Task:     QT-2418
RevBy:    Shane Kearns
---
 src/gui/inputmethod/qcoefepinputcontext_p.h     |  1 +
 src/gui/inputmethod/qcoefepinputcontext_s60.cpp | 43 +++++++++++++++++++++++--
 2 files changed, 41 insertions(+), 3 deletions(-)

diff --git a/src/gui/inputmethod/qcoefepinputcontext_p.h b/src/gui/inputmethod/qcoefepinputcontext_p.h
index 1531036..6aef5d4 100644
--- a/src/gui/inputmethod/qcoefepinputcontext_p.h
+++ b/src/gui/inputmethod/qcoefepinputcontext_p.h
@@ -97,6 +97,7 @@ private:
     void applyHints(Qt::InputMethodHints hints);
     void applyFormat(QList<QInputMethodEvent::Attribute> *attributes);
     void queueInputCapabilitiesChanged();
+    bool needsInputPanel();
 
 private Q_SLOTS:
     void ensureInputCapabilitiesChanged();
diff --git a/src/gui/inputmethod/qcoefepinputcontext_s60.cpp b/src/gui/inputmethod/qcoefepinputcontext_s60.cpp
index 3f21bc3..25b2313 100644
--- a/src/gui/inputmethod/qcoefepinputcontext_s60.cpp
+++ b/src/gui/inputmethod/qcoefepinputcontext_s60.cpp
@@ -47,6 +47,7 @@
 #include <private/qcore_symbian_p.h>
 
 #include <fepitfr.h>
+#include <hal.h>
 
 #include <limits.h>
 // You only find these enumerations on SDK 5 onwards, so we need to provide our own
@@ -153,6 +154,44 @@ QString QCoeFepInputContext::language()
     }
 }
 
+bool QCoeFepInputContext::needsInputPanel()
+{
+    switch (QSysInfo::s60Version()) {
+    case QSysInfo::SV_S60_3_1:
+    case QSysInfo::SV_S60_3_2:
+        // There are no touch phones for pre-5.0 SDKs.
+        return false;
+#ifdef Q_CC_NOKIAX86
+    default:
+        // For emulator we assume that we need an input panel, since we can't
+        // separate between phone types.
+        return true;
+#else
+    case QSysInfo::SV_S60_5_0: {
+        // For SDK == 5.0, we need phone specific detection, since the HAL API
+        // is no good on most phones. However, all phones at the time of writing use the
+        // input panel, except N97 in landscape mode, but in this mode it refuses to bring
+        // up the panel anyway, so we don't have to care.
+        return true;
+    }
+    default:
+        // For unknown/newer types, we try to use the HAL API.
+        int keyboardEnabled;
+        int keyboardType;
+        int err[2];
+        err[0] = HAL::Get(HAL::EKeyboard, keyboardType);
+        err[1] = HAL::Get(HAL::EKeyboardState, keyboardEnabled);
+        if (err[0] == KErrNone && err[1] == KErrNone
+                && keyboardType != 0 && keyboardEnabled)
+            // Means that we have some sort of keyboard.
+            return false;
+
+        // Fall back to using the input panel.
+        return true;
+#endif // !Q_CC_NOKIAX86
+    }
+}
+
 bool QCoeFepInputContext::filterEvent(const QEvent *event)
 {
     // The CloseSoftwareInputPanel event is not handled here, because the VK will automatically
@@ -174,10 +213,8 @@ bool QCoeFepInputContext::filterEvent(const QEvent *event)
         }
     }
 
-    // For pre-5.0 SDKs, we don't launch the keyboard.
-    if (QSysInfo::s60Version() != QSysInfo::SV_S60_5_0) {
+    if (!needsInputPanel())
         return false;
-    }
 
     if (event->type() == QEvent::RequestSoftwareInputPanel) {
         // Notify S60 that we want the virtual keyboard to show up.
-- 
cgit v0.12


From e8e40214a29dbec18db5cf1e65aa8bd3f4d7468f Mon Sep 17 00:00:00 2001
From: axis <qt-info@nokia.com>
Date: Wed, 4 Nov 2009 14:39:03 +0100
Subject: Unexported a class that doesn't need to be exported.

RevBy:    Iain
---
 src/gui/inputmethod/qcoefepinputcontext_p.h |   8 +-
 src/s60installs/bwins/QtGuiu.def            |  90 ++++++++++-----------
 src/s60installs/eabi/QtGuiu.def             | 118 ++++++++++++++--------------
 3 files changed, 108 insertions(+), 108 deletions(-)

diff --git a/src/gui/inputmethod/qcoefepinputcontext_p.h b/src/gui/inputmethod/qcoefepinputcontext_p.h
index 6aef5d4..452aa75 100644
--- a/src/gui/inputmethod/qcoefepinputcontext_p.h
+++ b/src/gui/inputmethod/qcoefepinputcontext_p.h
@@ -65,10 +65,10 @@
 
 QT_BEGIN_NAMESPACE
 
-class Q_GUI_EXPORT QCoeFepInputContext : public QInputContext,
-                                         public MCoeFepAwareTextEditor,
-                                         public MCoeFepAwareTextEditor_Extension1,
-                                         public MObjectProvider
+class QCoeFepInputContext : public QInputContext,
+                            public MCoeFepAwareTextEditor,
+                            public MCoeFepAwareTextEditor_Extension1,
+                            public MObjectProvider
 {
     Q_OBJECT
 
diff --git a/src/s60installs/bwins/QtGuiu.def b/src/s60installs/bwins/QtGuiu.def
index 89b6d48..69a95f0 100644
--- a/src/s60installs/bwins/QtGuiu.def
+++ b/src/s60installs/bwins/QtGuiu.def
@@ -297,7 +297,7 @@ EXPORTS
 	?standardPixmap@QWindowsStyle@@UBE?AVQPixmap@@W4StandardPixmap@QStyle@@PBVQStyleOption@@PBVQWidget@@@Z @ 296 NONAME ; class QPixmap QWindowsStyle::standardPixmap(enum QStyle::StandardPixmap, class QStyleOption const *, class QWidget const *) const
 	?setStyleSheet@QApplication@@QAEXABVQString@@@Z @ 297 NONAME ; void QApplication::setStyleSheet(class QString const &)
 	?minLeftBearing@QFontMetrics@@QBEHXZ @ 298 NONAME ; int QFontMetrics::minLeftBearing(void) const
-	?isComposing@QCoeFepInputContext@@UBE_NXZ @ 299 NONAME ; bool QCoeFepInputContext::isComposing(void) const
+	?isComposing@QCoeFepInputContext@@UBE_NXZ @ 299 NONAME ABSENT ; bool QCoeFepInputContext::isComposing(void) const
 	??8iterator@QTextFrame@@QBE_NABV01@@Z @ 300 NONAME ; bool QTextFrame::iterator::operator==(class QTextFrame::iterator const &) const
 	?toolBarArea@QMainWindow@@QBE?AW4ToolBarArea@Qt@@PAVQToolBar@@@Z @ 301 NONAME ; enum Qt::ToolBarArea QMainWindow::toolBarArea(class QToolBar *) const
 	?mode@QColormap@@QBE?AW4Mode@1@XZ @ 302 NONAME ; enum QColormap::Mode QColormap::mode(void) const
@@ -657,7 +657,7 @@ EXPORTS
 	?stack@QUndoView@@QBEPAVQUndoStack@@XZ @ 656 NONAME ; class QUndoStack * QUndoView::stack(void) const
 	?squareToQuad@QTransform@@SA_NABVQPolygonF@@AAV1@@Z @ 657 NONAME ; bool QTransform::squareToQuad(class QPolygonF const &, class QTransform &)
 	?controlPointRect@QPainterPath@@QBE?AVQRectF@@XZ @ 658 NONAME ; class QRectF QPainterPath::controlPointRect(void) const
-	?language@QCoeFepInputContext@@UAE?AVQString@@XZ @ 659 NONAME ; class QString QCoeFepInputContext::language(void)
+	?language@QCoeFepInputContext@@UAE?AVQString@@XZ @ 659 NONAME ABSENT ; class QString QCoeFepInputContext::language(void)
 	?horizontalScrollbarAction@QTableView@@MAEXH@Z @ 660 NONAME ; void QTableView::horizontalScrollbarAction(int)
 	?qt_metacall@QGraphicsView@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 661 NONAME ; int QGraphicsView::qt_metacall(enum QMetaObject::Call, int, void * *)
 	?itemPrototype@QStandardItemModel@@QBEPBVQStandardItem@@XZ @ 662 NONAME ; class QStandardItem const * QStandardItemModel::itemPrototype(void) const
@@ -1646,7 +1646,7 @@ EXPORTS
 	?anchorClicked@QTextBrowser@@IAEXABVQUrl@@@Z @ 1645 NONAME ; void QTextBrowser::anchorClicked(class QUrl const &)
 	?childEvent@QMdiSubWindow@@MAEXPAVQChildEvent@@@Z @ 1646 NONAME ; void QMdiSubWindow::childEvent(class QChildEvent *)
 	?enterEvent@QMenu@@MAEXPAVQEvent@@@Z @ 1647 NONAME ; void QMenu::enterEvent(class QEvent *)
-	?ensureInputCapabilitiesChanged@QCoeFepInputContext@@AAEXXZ @ 1648 NONAME ; void QCoeFepInputContext::ensureInputCapabilitiesChanged(void)
+	?ensureInputCapabilitiesChanged@QCoeFepInputContext@@AAEXXZ @ 1648 NONAME ABSENT ; void QCoeFepInputContext::ensureInputCapabilitiesChanged(void)
 	?tr@QSwipeGesture@@SA?AVQString@@PBD0@Z @ 1649 NONAME ; class QString QSwipeGesture::tr(char const *, char const *)
 	?d_func@QGraphicsPixelizeEffect@@AAEPAVQGraphicsPixelizeEffectPrivate@@XZ @ 1650 NONAME ABSENT ; class QGraphicsPixelizeEffectPrivate * QGraphicsPixelizeEffect::d_func(void)
 	?completer@QComboBox@@QBEPAVQCompleter@@XZ @ 1651 NONAME ; class QCompleter * QComboBox::completer(void) const
@@ -2165,7 +2165,7 @@ EXPORTS
 	?linkHovered@QLabel@@IAEXABVQString@@@Z @ 2164 NONAME ; void QLabel::linkHovered(class QString const &)
 	?isCornerButtonEnabled@QTableView@@QBE_NXZ @ 2165 NONAME ; bool QTableView::isCornerButtonEnabled(void) const
 	?setFilterRegExp@QSortFilterProxyModel@@QAEXABVQRegExp@@@Z @ 2166 NONAME ; void QSortFilterProxyModel::setFilterRegExp(class QRegExp const &)
-	?qt_metacall@QCoeFepInputContext@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 2167 NONAME ; int QCoeFepInputContext::qt_metacall(enum QMetaObject::Call, int, void * *)
+	?qt_metacall@QCoeFepInputContext@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 2167 NONAME ABSENT ; int QCoeFepInputContext::qt_metacall(enum QMetaObject::Call, int, void * *)
 	?combinedMatrix@QPainter@@QBE?AVQMatrix@@XZ @ 2168 NONAME ; class QMatrix QPainter::combinedMatrix(void) const
 	?d_func@QTextEdit@@AAEPAVQTextEditPrivate@@XZ @ 2169 NONAME ; class QTextEditPrivate * QTextEdit::d_func(void)
 	?qDrawBorderPixmap@@YAXPAVQPainter@@ABVQRect@@ABVQMargins@@ABVQPixmap@@12ABUQTileRules@@V?$QFlags@W4DrawingHint@QDrawBorderPixmap@@@@@Z @ 2170 NONAME ; void qDrawBorderPixmap(class QPainter *, class QRect const &, class QMargins const &, class QPixmap const &, class QRect const &, class QMargins const &, struct QTileRules const &, class QFlags<enum QDrawBorderPixmap::DrawingHint>)
@@ -2306,7 +2306,7 @@ EXPORTS
 	?setMenuWidget@QMainWindow@@QAEXPAVQWidget@@@Z @ 2305 NONAME ; void QMainWindow::setMenuWidget(class QWidget *)
 	?setCurrentIndex@QItemSelectionModel@@QAEXABVQModelIndex@@V?$QFlags@W4SelectionFlag@QItemSelectionModel@@@@@Z @ 2306 NONAME ; void QItemSelectionModel::setCurrentIndex(class QModelIndex const &, class QFlags<enum QItemSelectionModel::SelectionFlag>)
 	?grabShortcut@QWidget@@QAEHABVQKeySequence@@W4ShortcutContext@Qt@@@Z @ 2307 NONAME ; int QWidget::grabShortcut(class QKeySequence const &, enum Qt::ShortcutContext)
-	?UpdateFepInlineTextL@QCoeFepInputContext@@UAEXABVTDesC16@@H@Z @ 2308 NONAME ; void QCoeFepInputContext::UpdateFepInlineTextL(class TDesC16 const &, int)
+	?UpdateFepInlineTextL@QCoeFepInputContext@@UAEXABVTDesC16@@H@Z @ 2308 NONAME ABSENT ; void QCoeFepInputContext::UpdateFepInlineTextL(class TDesC16 const &, int)
 	?draw@QPixmapDropShadowFilter@@UBEXPAVQPainter@@ABVQPointF@@ABVQPixmap@@ABVQRectF@@@Z @ 2309 NONAME ; void QPixmapDropShadowFilter::draw(class QPainter *, class QPointF const &, class QPixmap const &, class QRectF const &) const
 	?mouseMoveEvent@QMdiSubWindow@@MAEXPAVQMouseEvent@@@Z @ 2310 NONAME ; void QMdiSubWindow::mouseMoveEvent(class QMouseEvent *)
 	?hoverMoveEvent@QGraphicsItem@@MAEXPAVQGraphicsSceneHoverEvent@@@Z @ 2311 NONAME ; void QGraphicsItem::hoverMoveEvent(class QGraphicsSceneHoverEvent *)
@@ -2537,7 +2537,7 @@ EXPORTS
 	?text@QImage@@QBE?AVQString@@ABV2@@Z @ 2536 NONAME ; class QString QImage::text(class QString const &) const
 	?showMessage@QSplashScreen@@QAEXABVQString@@HABVQColor@@@Z @ 2537 NONAME ; void QSplashScreen::showMessage(class QString const &, int, class QColor const &)
 	?setActiveSubWindow@QMdiArea@@QAEXPAVQMdiSubWindow@@@Z @ 2538 NONAME ; void QMdiArea::setActiveSubWindow(class QMdiSubWindow *)
-	?metaObject@QCoeFepInputContext@@UBEPBUQMetaObject@@XZ @ 2539 NONAME ; struct QMetaObject const * QCoeFepInputContext::metaObject(void) const
+	?metaObject@QCoeFepInputContext@@UBEPBUQMetaObject@@XZ @ 2539 NONAME ABSENT ; struct QMetaObject const * QCoeFepInputContext::metaObject(void) const
 	?showEvent@QGraphicsProxyWidget@@MAEXPAVQShowEvent@@@Z @ 2540 NONAME ; void QGraphicsProxyWidget::showEvent(class QShowEvent *)
 	?bitmap@QCursor@@QBEPBVQBitmap@@XZ @ 2541 NONAME ; class QBitmap const * QCursor::bitmap(void) const
 	?trUtf8@QMenuBar@@SA?AVQString@@PBD0H@Z @ 2542 NONAME ; class QString QMenuBar::trUtf8(char const *, char const *, int)
@@ -3288,7 +3288,7 @@ EXPORTS
 	?notation@QDoubleValidator@@QBE?AW4Notation@1@XZ @ 3287 NONAME ; enum QDoubleValidator::Notation QDoubleValidator::notation(void) const
 	?maximumTime@QDateTimeEdit@@QBE?AVQTime@@XZ @ 3288 NONAME ; class QTime QDateTimeEdit::maximumTime(void) const
 	?drawControl@QS60Style@@UBEXW4ControlElement@QStyle@@PBVQStyleOption@@PAVQPainter@@PBVQWidget@@@Z @ 3289 NONAME ; void QS60Style::drawControl(enum QStyle::ControlElement, class QStyleOption const *, class QPainter *, class QWidget const *) const
-	??_EQCoeFepInputContext@@UAE@I@Z @ 3290 NONAME ; QCoeFepInputContext::~QCoeFepInputContext(unsigned int)
+	??_EQCoeFepInputContext@@UAE@I@Z @ 3290 NONAME ABSENT ; QCoeFepInputContext::~QCoeFepInputContext(unsigned int)
 	?setAttribute@QWidget@@QAEXW4WidgetAttribute@Qt@@_N@Z @ 3291 NONAME ; void QWidget::setAttribute(enum Qt::WidgetAttribute, bool)
 	??1QImageIOPlugin@@UAE@XZ @ 3292 NONAME ; QImageIOPlugin::~QImageIOPlugin(void)
 	??1QTessellator@@UAE@XZ @ 3293 NONAME ; QTessellator::~QTessellator(void)
@@ -3433,9 +3433,9 @@ EXPORTS
 	?setVisible@QWidget@@UAEX_N@Z @ 3432 NONAME ; void QWidget::setVisible(bool)
 	?quitOnLastWindowClosed@QApplicationPrivate@@2_NA @ 3433 NONAME ; bool QApplicationPrivate::quitOnLastWindowClosed
 	?rowsInserted@QColumnView@@MAEXABVQModelIndex@@HH@Z @ 3434 NONAME ; void QColumnView::rowsInserted(class QModelIndex const &, int, int)
-	?qt_metacast@QCoeFepInputContext@@UAEPAXPBD@Z @ 3435 NONAME ; void * QCoeFepInputContext::qt_metacast(char const *)
+	?qt_metacast@QCoeFepInputContext@@UAEPAXPBD@Z @ 3435 NONAME ABSENT ; void * QCoeFepInputContext::qt_metacast(char const *)
 	?map@QMatrix@@QBE?AVQPoint@@ABV2@@Z @ 3436 NONAME ; class QPoint QMatrix::map(class QPoint const &) const
-	?MopSupplyObject@QCoeFepInputContext@@UAE?AVPtr@TTypeUid@@V3@@Z @ 3437 NONAME ; class TTypeUid::Ptr QCoeFepInputContext::MopSupplyObject(class TTypeUid)
+	?MopSupplyObject@QCoeFepInputContext@@UAE?AVPtr@TTypeUid@@V3@@Z @ 3437 NONAME ABSENT ; class TTypeUid::Ptr QCoeFepInputContext::MopSupplyObject(class TTypeUid)
 	?styleName@QGuiPlatformPlugin@@UAE?AVQString@@XZ @ 3438 NONAME ; class QString QGuiPlatformPlugin::styleName(void)
 	?rowsInserted@QAbstractItemView@@MAEXABVQModelIndex@@HH@Z @ 3439 NONAME ; void QAbstractItemView::rowsInserted(class QModelIndex const &, int, int)
 	?setBlurHint@QGraphicsBloomEffect@@QAEXW4RenderHint@Qt@@@Z @ 3440 NONAME ABSENT ; void QGraphicsBloomEffect::setBlurHint(enum Qt::RenderHint)
@@ -3585,7 +3585,7 @@ EXPORTS
 	?setUniformRowHeights@QTreeView@@QAEX_N@Z @ 3584 NONAME ; void QTreeView::setUniformRowHeights(bool)
 	??MQImageTextKeyLang@@QBE_NABV0@@Z @ 3585 NONAME ; bool QImageTextKeyLang::operator<(class QImageTextKeyLang const &) const
 	?paste@QLineEdit@@QAEXXZ @ 3586 NONAME ; void QLineEdit::paste(void)
-	?identifierName@QCoeFepInputContext@@UAE?AVQString@@XZ @ 3587 NONAME ; class QString QCoeFepInputContext::identifierName(void)
+	?identifierName@QCoeFepInputContext@@UAE?AVQString@@XZ @ 3587 NONAME ABSENT ; class QString QCoeFepInputContext::identifierName(void)
 	??_EQMouseEvent@@UAE@I@Z @ 3588 NONAME ; QMouseEvent::~QMouseEvent(unsigned int)
 	?setForegroundBrush@QGraphicsView@@QAEXABVQBrush@@@Z @ 3589 NONAME ; void QGraphicsView::setForegroundBrush(class QBrush const &)
 	?setDocumentMode@QTabWidget@@QAEX_N@Z @ 3590 NONAME ; void QTabWidget::setDocumentMode(bool)
@@ -3809,7 +3809,7 @@ EXPORTS
 	?load@QPixmap@@QAE_NABVQString@@PBDV?$QFlags@W4ImageConversionFlag@Qt@@@@@Z @ 3808 NONAME ; bool QPixmap::load(class QString const &, char const *, class QFlags<enum Qt::ImageConversionFlag>)
 	??0QStyleOptionToolBar@@IAE@H@Z @ 3809 NONAME ; QStyleOptionToolBar::QStyleOptionToolBar(int)
 	?setForegroundRole@QWidget@@QAEXW4ColorRole@QPalette@@@Z @ 3810 NONAME ; void QWidget::setForegroundRole(enum QPalette::ColorRole)
-	?applyHints@QCoeFepInputContext@@AAEXV?$QFlags@W4InputMethodHint@Qt@@@@@Z @ 3811 NONAME ; void QCoeFepInputContext::applyHints(class QFlags<enum Qt::InputMethodHint>)
+	?applyHints@QCoeFepInputContext@@AAEXV?$QFlags@W4InputMethodHint@Qt@@@@@Z @ 3811 NONAME ABSENT ; void QCoeFepInputContext::applyHints(class QFlags<enum Qt::InputMethodHint>)
 	?visualAlignment@QStyle@@SA?AV?$QFlags@W4AlignmentFlag@Qt@@@@W4LayoutDirection@Qt@@V2@@Z @ 3812 NONAME ; class QFlags<enum Qt::AlignmentFlag> QStyle::visualAlignment(enum Qt::LayoutDirection, class QFlags<enum Qt::AlignmentFlag>)
 	?scrollContentsBy@QScrollArea@@MAEXHH@Z @ 3813 NONAME ; void QScrollArea::scrollContentsBy(int, int)
 	?itemsExpandable@QTreeView@@QBE_NXZ @ 3814 NONAME ; bool QTreeView::itemsExpandable(void) const
@@ -4247,7 +4247,7 @@ EXPORTS
 	?qt_metacast@QActionGroup@@UAEPAXPBD@Z @ 4246 NONAME ; void * QActionGroup::qt_metacast(char const *)
 	?inputMethodQuery@QTextEdit@@MBE?AVQVariant@@W4InputMethodQuery@Qt@@@Z @ 4247 NONAME ; class QVariant QTextEdit::inputMethodQuery(enum Qt::InputMethodQuery) const
 	?paint@QGraphicsRectItem@@UAEXPAVQPainter@@PBVQStyleOptionGraphicsItem@@PAVQWidget@@@Z @ 4248 NONAME ; void QGraphicsRectItem::paint(class QPainter *, class QStyleOptionGraphicsItem const *, class QWidget *)
-	?getStaticMetaObject@QCoeFepInputContext@@SAABUQMetaObject@@XZ @ 4249 NONAME ; struct QMetaObject const & QCoeFepInputContext::getStaticMetaObject(void)
+	?getStaticMetaObject@QCoeFepInputContext@@SAABUQMetaObject@@XZ @ 4249 NONAME ABSENT ; struct QMetaObject const & QCoeFepInputContext::getStaticMetaObject(void)
 	?d_func@QStyle@@AAEPAVQStylePrivate@@XZ @ 4250 NONAME ; class QStylePrivate * QStyle::d_func(void)
 	?hasAlphaChannel@QRasterPixmapData@@UBE_NXZ @ 4251 NONAME ; bool QRasterPixmapData::hasAlphaChannel(void) const
 	??1QAbstractScrollArea@@UAE@XZ @ 4252 NONAME ; QAbstractScrollArea::~QAbstractScrollArea(void)
@@ -4298,7 +4298,7 @@ EXPORTS
 	?fontWeight@QTextCharFormat@@QBEHXZ @ 4297 NONAME ; int QTextCharFormat::fontWeight(void) const
 	?staticMetaObject@QTextList@@2UQMetaObject@@B @ 4298 NONAME ; struct QMetaObject const QTextList::staticMetaObject
 	?setBlurRadius@QPixmapDropShadowFilter@@QAEXH@Z @ 4299 NONAME ABSENT ; void QPixmapDropShadowFilter::setBlurRadius(int)
-	?GetEditorContentForFep@QCoeFepInputContext@@UBEXAAVTDes16@@HH@Z @ 4300 NONAME ; void QCoeFepInputContext::GetEditorContentForFep(class TDes16 &, int, int) const
+	?GetEditorContentForFep@QCoeFepInputContext@@UBEXAAVTDes16@@HH@Z @ 4300 NONAME ABSENT ; void QCoeFepInputContext::GetEditorContentForFep(class TDes16 &, int, int) const
 	?trUtf8@QGraphicsWidget@@SA?AVQString@@PBD0H@Z @ 4301 NONAME ; class QString QGraphicsWidget::trUtf8(char const *, char const *, int)
 	?extraItemCache@QGraphicsItemPrivate@@QBEPAVQGraphicsItemCache@@XZ @ 4302 NONAME ; class QGraphicsItemCache * QGraphicsItemPrivate::extraItemCache(void) const
 	?metaObject@QTableWidget@@UBEPBUQMetaObject@@XZ @ 4303 NONAME ; struct QMetaObject const * QTableWidget::metaObject(void) const
@@ -4429,7 +4429,7 @@ EXPORTS
 	?beginNewFrame@QPaintBuffer@@QAEXXZ @ 4428 NONAME ; void QPaintBuffer::beginNewFrame(void)
 	?boundingRect@QPainterPath@@QBE?AVQRectF@@XZ @ 4429 NONAME ; class QRectF QPainterPath::boundingRect(void) const
 	?eventFilter@QCompleter@@MAE_NPAVQObject@@PAVQEvent@@@Z @ 4430 NONAME ; bool QCompleter::eventFilter(class QObject *, class QEvent *)
-	??0QCoeFepInputContext@@QAE@PAVQObject@@@Z @ 4431 NONAME ; QCoeFepInputContext::QCoeFepInputContext(class QObject *)
+	??0QCoeFepInputContext@@QAE@PAVQObject@@@Z @ 4431 NONAME ABSENT ; QCoeFepInputContext::QCoeFepInputContext(class QObject *)
 	?clear@QTextDocument@@UAEXXZ @ 4432 NONAME ; void QTextDocument::clear(void)
 	?tr@QKeyEventTransition@@SA?AVQString@@PBD0@Z @ 4433 NONAME ; class QString QKeyEventTransition::tr(char const *, char const *)
 	?drawPicture@QPainter@@QAEXABVQPoint@@ABVQPicture@@@Z @ 4434 NONAME ; void QPainter::drawPicture(class QPoint const &, class QPicture const &)
@@ -5180,7 +5180,7 @@ EXPORTS
 	?setPoint@QPolygon@@QAEXHHH@Z @ 5179 NONAME ; void QPolygon::setPoint(int, int, int)
 	?getStaticMetaObject@QIconEnginePluginV2@@SAABUQMetaObject@@XZ @ 5180 NONAME ; struct QMetaObject const & QIconEnginePluginV2::getStaticMetaObject(void)
 	?tr@QGraphicsTransform@@SA?AVQString@@PBD0H@Z @ 5181 NONAME ; class QString QGraphicsTransform::tr(char const *, char const *, int)
-	?ReportAknEdStateEvent@QCoeFepInputContext@@AAEXW4EAknEdwinStateEvent@MAknEdStateObserver@@@Z @ 5182 NONAME ; void QCoeFepInputContext::ReportAknEdStateEvent(enum MAknEdStateObserver::EAknEdwinStateEvent)
+	?ReportAknEdStateEvent@QCoeFepInputContext@@AAEXW4EAknEdwinStateEvent@MAknEdStateObserver@@@Z @ 5182 NONAME ABSENT ; void QCoeFepInputContext::ReportAknEdStateEvent(enum MAknEdStateObserver::EAknEdwinStateEvent)
 	?getStaticMetaObject@QUndoStack@@SAABUQMetaObject@@XZ @ 5183 NONAME ; struct QMetaObject const & QUndoStack::getStaticMetaObject(void)
 	?focusInEvent@QDateTimeEdit@@MAEXPAVQFocusEvent@@@Z @ 5184 NONAME ; void QDateTimeEdit::focusInEvent(class QFocusEvent *)
 	?isNull@QIcon@@QBE_NXZ @ 5185 NONAME ; bool QIcon::isNull(void) const
@@ -5505,7 +5505,7 @@ EXPORTS
 	?hasFormats@QTextEngine@@QBE_NXZ @ 5504 NONAME ; bool QTextEngine::hasFormats(void) const
 	?setNumColumns@QTextLine@@QAEXHM@Z @ 5505 NONAME ; void QTextLine::setNumColumns(int, float)
 	?trUtf8@QPixmapConvolutionFilter@@SA?AVQString@@PBD0H@Z @ 5506 NONAME ; class QString QPixmapConvolutionFilter::trUtf8(char const *, char const *, int)
-	?GetScreenCoordinatesForFepL@QCoeFepInputContext@@UBEXAAVTPoint@@AAH1H@Z @ 5507 NONAME ; void QCoeFepInputContext::GetScreenCoordinatesForFepL(class TPoint &, int &, int &, int) const
+	?GetScreenCoordinatesForFepL@QCoeFepInputContext@@UBEXAAVTPoint@@AAH1H@Z @ 5507 NONAME ABSENT ; void QCoeFepInputContext::GetScreenCoordinatesForFepL(class TPoint &, int &, int &, int) const
 	?visualRect@QHeaderView@@MBE?AVQRect@@ABVQModelIndex@@@Z @ 5508 NONAME ; class QRect QHeaderView::visualRect(class QModelIndex const &) const
 	?minimumSize@QStackedLayout@@UBE?AVQSize@@XZ @ 5509 NONAME ; class QSize QStackedLayout::minimumSize(void) const
 	?keyPressEvent@QGraphicsView@@MAEXPAVQKeyEvent@@@Z @ 5510 NONAME ; void QGraphicsView::keyPressEvent(class QKeyEvent *)
@@ -5806,7 +5806,7 @@ EXPORTS
 	?reset@QMatrix@@QAEXXZ @ 5805 NONAME ; void QMatrix::reset(void)
 	?qt_metacast@QTabWidget@@UAEPAXPBD@Z @ 5806 NONAME ; void * QTabWidget::qt_metacast(char const *)
 	?acceptsHoverEvents@QGraphicsItem@@QBE_NXZ @ 5807 NONAME ; bool QGraphicsItem::acceptsHoverEvents(void) const
-	?commitCurrentString@QCoeFepInputContext@@AAEX_N@Z @ 5808 NONAME ; void QCoeFepInputContext::commitCurrentString(bool)
+	?commitCurrentString@QCoeFepInputContext@@AAEX_N@Z @ 5808 NONAME ABSENT ; void QCoeFepInputContext::commitCurrentString(bool)
 	?validate@QIntValidator@@UBE?AW4State@QValidator@@AAVQString@@AAH@Z @ 5809 NONAME ; enum QValidator::State QIntValidator::validate(class QString &, int &) const
 	?itemChange@QGraphicsWidget@@MAE?AVQVariant@@W4GraphicsItemChange@QGraphicsItem@@ABV2@@Z @ 5810 NONAME ; class QVariant QGraphicsWidget::itemChange(enum QGraphicsItem::GraphicsItemChange, class QVariant const &)
 	?windowFrameEvent@QGraphicsWidget@@MAE_NPAVQEvent@@@Z @ 5811 NONAME ; bool QGraphicsWidget::windowFrameEvent(class QEvent *)
@@ -5827,7 +5827,7 @@ EXPORTS
 	??0QStyleOptionSizeGrip@@IAE@H@Z @ 5826 NONAME ; QStyleOptionSizeGrip::QStyleOptionSizeGrip(int)
 	?unsetWindowFrameMargins@QGraphicsWidget@@QAEXXZ @ 5827 NONAME ; void QGraphicsWidget::unsetWindowFrameMargins(void)
 	?inputMask@QLineEdit@@QBE?AVQString@@XZ @ 5828 NONAME ; class QString QLineEdit::inputMask(void) const
-	?inputCapabilities@QCoeFepInputContext@@QAE?AVTCoeInputCapabilities@@XZ @ 5829 NONAME ; class TCoeInputCapabilities QCoeFepInputContext::inputCapabilities(void)
+	?inputCapabilities@QCoeFepInputContext@@QAE?AVTCoeInputCapabilities@@XZ @ 5829 NONAME ABSENT ; class TCoeInputCapabilities QCoeFepInputContext::inputCapabilities(void)
 	?rawValue@QTextLength@@QBEMXZ @ 5830 NONAME ; float QTextLength::rawValue(void) const
 	?horizontalOffset@QListView@@MBEHXZ @ 5831 NONAME ; int QListView::horizontalOffset(void) const
 	?tr@QPixmapBlurFilter@@SA?AVQString@@PBD0H@Z @ 5832 NONAME ; class QString QPixmapBlurFilter::tr(char const *, char const *, int)
@@ -6608,7 +6608,7 @@ EXPORTS
 	?quality@QPictureIO@@QBEHXZ @ 6607 NONAME ; int QPictureIO::quality(void) const
 	?tr@QLineControl@@SA?AVQString@@PBD0@Z @ 6608 NONAME ; class QString QLineControl::tr(char const *, char const *)
 	?selectedFont@QFontDialog@@QBE?AVQFont@@XZ @ 6609 NONAME ; class QFont QFontDialog::selectedFont(void) const
-	??1QCoeFepInputContext@@UAE@XZ @ 6610 NONAME ; QCoeFepInputContext::~QCoeFepInputContext(void)
+	??1QCoeFepInputContext@@UAE@XZ @ 6610 NONAME ABSENT ; QCoeFepInputContext::~QCoeFepInputContext(void)
 	?q_func@QPaintEngineExPrivate@@AAEPAVQPaintEngineEx@@XZ @ 6611 NONAME ; class QPaintEngineEx * QPaintEngineExPrivate::q_func(void)
 	?setMatrixEnabled@QPainter@@QAEX_N@Z @ 6612 NONAME ; void QPainter::setMatrixEnabled(bool)
 	?dateTime@QDateTimeEdit@@QBE?AVQDateTime@@XZ @ 6613 NONAME ; class QDateTime QDateTimeEdit::dateTime(void) const
@@ -6850,7 +6850,7 @@ EXPORTS
 	?changeEvent@QSplitter@@MAEXPAVQEvent@@@Z @ 6849 NONAME ; void QSplitter::changeEvent(class QEvent *)
 	?letterSpacing@QFont@@QBEMXZ @ 6850 NONAME ; float QFont::letterSpacing(void) const
 	?backgroundMode@QPaintEngineState@@QBE?AW4BGMode@Qt@@XZ @ 6851 NONAME ; enum Qt::BGMode QPaintEngineState::backgroundMode(void) const
-	?staticMetaObject@QCoeFepInputContext@@2UQMetaObject@@B @ 6852 NONAME ; struct QMetaObject const QCoeFepInputContext::staticMetaObject
+	?staticMetaObject@QCoeFepInputContext@@2UQMetaObject@@B @ 6852 NONAME ABSENT ; struct QMetaObject const QCoeFepInputContext::staticMetaObject
 	?enterWhatsThisMode@QWhatsThis@@SAXXZ @ 6853 NONAME ; void QWhatsThis::enterWhatsThisMode(void)
 	?textInteractionFlags@QPlainTextEdit@@QBE?AV?$QFlags@W4TextInteractionFlag@Qt@@@@XZ @ 6854 NONAME ; class QFlags<enum Qt::TextInteractionFlag> QPlainTextEdit::textInteractionFlags(void) const
 	?addToolBar@QMainWindow@@QAEXPAVQToolBar@@@Z @ 6855 NONAME ; void QMainWindow::addToolBar(class QToolBar *)
@@ -7402,7 +7402,7 @@ EXPORTS
 	?setAutoRepeat@QShortcut@@QAEX_N@Z @ 7401 NONAME ; void QShortcut::setAutoRepeat(bool)
 	?clearLineData@QTextEngine@@QAEXXZ @ 7402 NONAME ; void QTextEngine::clearLineData(void)
 	?devType@QPixmap@@UBEHXZ @ 7403 NONAME ; int QPixmap::devType(void) const
-	?update@QCoeFepInputContext@@UAEXXZ @ 7404 NONAME ; void QCoeFepInputContext::update(void)
+	?update@QCoeFepInputContext@@UAEXXZ @ 7404 NONAME ABSENT ; void QCoeFepInputContext::update(void)
 	?showSection@QHeaderView@@QAEXH@Z @ 7405 NONAME ; void QHeaderView::showSection(int)
 	?setDirection@QBoxLayout@@QAEXW4Direction@1@@Z @ 7406 NONAME ; void QBoxLayout::setDirection(enum QBoxLayout::Direction)
 	?items@QGraphicsScene@@QBE?AV?$QList@PAVQGraphicsItem@@@@ABVQPolygonF@@W4ItemSelectionMode@Qt@@@Z @ 7407 NONAME ; class QList<class QGraphicsItem *> QGraphicsScene::items(class QPolygonF const &, enum Qt::ItemSelectionMode) const
@@ -7923,8 +7923,8 @@ EXPORTS
 	?resizeContents@QListView@@IAEXHH@Z @ 7922 NONAME ; void QListView::resizeContents(int, int)
 	?setStrength@QPixmapColorizeFilter@@QAEXM@Z @ 7923 NONAME ; void QPixmapColorizeFilter::setStrength(float)
 	??0QStyleOptionTabV3@@QAE@XZ @ 7924 NONAME ; QStyleOptionTabV3::QStyleOptionTabV3(void)
-	?updateHints@QCoeFepInputContext@@AAEX_N@Z @ 7925 NONAME ; void QCoeFepInputContext::updateHints(bool)
-	?StartFepInlineEditL@QCoeFepInputContext@@UAEXABVTDesC16@@HHPBVMFormCustomDraw@@AAVMFepInlineTextFormatRetriever@@AAVMFepPointerEventHandlerDuringInlineEdit@@@Z @ 7926 NONAME ; void QCoeFepInputContext::StartFepInlineEditL(class TDesC16 const &, int, int, class MFormCustomDraw const *, class MFepInlineTextFormatRetriever &, class MFepPointerEventHandlerDuringInlineEdit &)
+	?updateHints@QCoeFepInputContext@@AAEX_N@Z @ 7925 NONAME ABSENT ; void QCoeFepInputContext::updateHints(bool)
+	?StartFepInlineEditL@QCoeFepInputContext@@UAEXABVTDesC16@@HHPBVMFormCustomDraw@@AAVMFepInlineTextFormatRetriever@@AAVMFepPointerEventHandlerDuringInlineEdit@@@Z @ 7926 NONAME ABSENT ; void QCoeFepInputContext::StartFepInlineEditL(class TDesC16 const &, int, int, class MFormCustomDraw const *, class MFepInlineTextFormatRetriever &, class MFepPointerEventHandlerDuringInlineEdit &)
 	?childEvent@QWorkspace@@MAEXPAVQChildEvent@@@Z @ 7927 NONAME ; void QWorkspace::childEvent(class QChildEvent *)
 	?setMovable@QHeaderView@@QAEX_N@Z @ 7928 NONAME ; void QHeaderView::setMovable(bool)
 	?trUtf8@QTextList@@SA?AVQString@@PBD0H@Z @ 7929 NONAME ; class QString QTextList::trUtf8(char const *, char const *, int)
@@ -8218,7 +8218,7 @@ EXPORTS
 	?isRightToLeft@QWidget@@QBE_NXZ @ 8217 NONAME ; bool QWidget::isRightToLeft(void) const
 	?updateNeeded@QLineControl@@IAEXABVQRect@@@Z @ 8218 NONAME ; void QLineControl::updateNeeded(class QRect const &)
 	?trUtf8@QSplitter@@SA?AVQString@@PBD0H@Z @ 8219 NONAME ; class QString QSplitter::trUtf8(char const *, char const *, int)
-	?mouseHandler@QCoeFepInputContext@@UAEXHPAVQMouseEvent@@@Z @ 8220 NONAME ; void QCoeFepInputContext::mouseHandler(int, class QMouseEvent *)
+	?mouseHandler@QCoeFepInputContext@@UAEXHPAVQMouseEvent@@@Z @ 8220 NONAME ABSENT ; void QCoeFepInputContext::mouseHandler(int, class QMouseEvent *)
 	??0QGraphicsPathItem@@QAE@PAVQGraphicsItem@@PAVQGraphicsScene@@@Z @ 8221 NONAME ; QGraphicsPathItem::QGraphicsPathItem(class QGraphicsItem *, class QGraphicsScene *)
 	?d_func@QAbstractSpinBox@@AAEPAVQAbstractSpinBoxPrivate@@XZ @ 8222 NONAME ; class QAbstractSpinBoxPrivate * QAbstractSpinBox::d_func(void)
 	??6@YA?AVQDebug@@V0@PAVQGraphicsObject@@@Z @ 8223 NONAME ; class QDebug operator<<(class QDebug, class QGraphicsObject *)
@@ -8250,7 +8250,7 @@ EXPORTS
 	?stacks@QUndoGroup@@QBE?AV?$QList@PAVQUndoStack@@@@XZ @ 8249 NONAME ; class QList<class QUndoStack *> QUndoGroup::stacks(void) const
 	?naturalTextWidth@QTextLine@@QBEMXZ @ 8250 NONAME ; float QTextLine::naturalTextWidth(void) const
 	?atSpace@QTextEngine@@QBE_NH@Z @ 8251 NONAME ; bool QTextEngine::atSpace(int) const
-	?CancelFepInlineEdit@QCoeFepInputContext@@UAEXXZ @ 8252 NONAME ; void QCoeFepInputContext::CancelFepInlineEdit(void)
+	?CancelFepInlineEdit@QCoeFepInputContext@@UAEXXZ @ 8252 NONAME ABSENT ; void QCoeFepInputContext::CancelFepInlineEdit(void)
 	?syncBackingStore@QWidgetPrivate@@QAEXXZ @ 8253 NONAME ; void QWidgetPrivate::syncBackingStore(void)
 	?setHorizontalPolicy@QSizePolicy@@QAEXW4Policy@1@@Z @ 8254 NONAME ; void QSizePolicy::setHorizontalPolicy(enum QSizePolicy::Policy)
 	?filter@QDirModel@@QBE?AV?$QFlags@W4Filter@QDir@@@@XZ @ 8255 NONAME ; class QFlags<enum QDir::Filter> QDirModel::filter(void) const
@@ -8270,7 +8270,7 @@ EXPORTS
 	?setTransform@QGraphicsItem@@QAEXABVQTransform@@_N@Z @ 8269 NONAME ; void QGraphicsItem::setTransform(class QTransform const &, bool)
 	?expand@QTreeView@@QAEXABVQModelIndex@@@Z @ 8270 NONAME ; void QTreeView::expand(class QModelIndex const &)
 	?setParentItem@QGraphicsItem@@QAEXPAV1@@Z @ 8271 NONAME ; void QGraphicsItem::setParentItem(class QGraphicsItem *)
-	?GetFormatForFep@QCoeFepInputContext@@UBEXAAVTCharFormat@@H@Z @ 8272 NONAME ; void QCoeFepInputContext::GetFormatForFep(class TCharFormat &, int) const
+	?GetFormatForFep@QCoeFepInputContext@@UBEXAAVTCharFormat@@H@Z @ 8272 NONAME ABSENT ; void QCoeFepInputContext::GetFormatForFep(class TCharFormat &, int) const
 	?setSizeConstraint@QLayout@@QAEXW4SizeConstraint@1@@Z @ 8273 NONAME ; void QLayout::setSizeConstraint(enum QLayout::SizeConstraint)
 	??5@YAAAVQDataStream@@AAV0@AAVQPicture@@@Z @ 8274 NONAME ; class QDataStream & operator>>(class QDataStream &, class QPicture &)
 	?atEnd@QTextCursor@@QBE_NXZ @ 8275 NONAME ; bool QTextCursor::atEnd(void) const
@@ -8599,7 +8599,7 @@ EXPORTS
 	?isResize@QWidgetResizeHandler@@ABE_NXZ @ 8598 NONAME ; bool QWidgetResizeHandler::isResize(void) const
 	?setWrapping@QListView@@QAEX_N@Z @ 8599 NONAME ; void QListView::setWrapping(bool)
 	??0QTextTableCellFormat@@IAE@ABVQTextFormat@@@Z @ 8600 NONAME ; QTextTableCellFormat::QTextTableCellFormat(class QTextFormat const &)
-	?queueInputCapabilitiesChanged@QCoeFepInputContext@@AAEXXZ @ 8601 NONAME ; void QCoeFepInputContext::queueInputCapabilitiesChanged(void)
+	?queueInputCapabilitiesChanged@QCoeFepInputContext@@AAEXXZ @ 8601 NONAME ABSENT ; void QCoeFepInputContext::queueInputCapabilitiesChanged(void)
 	??4QPixmap@@QAEAAV0@ABV0@@Z @ 8602 NONAME ; class QPixmap & QPixmap::operator=(class QPixmap const &)
 	??0QTextCursor@@QAE@PAVQTextDocumentPrivate@@H@Z @ 8603 NONAME ; QTextCursor::QTextCursor(class QTextDocumentPrivate *, int)
 	??0QStyleOptionRubberBand@@QAE@XZ @ 8604 NONAME ; QStyleOptionRubberBand::QStyleOptionRubberBand(void)
@@ -9273,7 +9273,7 @@ EXPORTS
 	??1QPixmapFilter@@UAE@XZ @ 9272 NONAME ; QPixmapFilter::~QPixmapFilter(void)
 	?setTabWhatsThis@QTabWidget@@QAEXHABVQString@@@Z @ 9273 NONAME ; void QTabWidget::setTabWhatsThis(int, class QString const &)
 	?setTitleBarWidget@QDockWidget@@QAEXPAVQWidget@@@Z @ 9274 NONAME ; void QDockWidget::setTitleBarWidget(class QWidget *)
-	?DocumentMaximumLengthForFep@QCoeFepInputContext@@UBEHXZ @ 9275 NONAME ; int QCoeFepInputContext::DocumentMaximumLengthForFep(void) const
+	?DocumentMaximumLengthForFep@QCoeFepInputContext@@UBEHXZ @ 9275 NONAME ABSENT ; int QCoeFepInputContext::DocumentMaximumLengthForFep(void) const
 	?decideFormatFromContent@QImageReader@@QBE_NXZ @ 9276 NONAME ; bool QImageReader::decideFormatFromContent(void) const
 	?trUtf8@QPixmapColorizeFilter@@SA?AVQString@@PBD0@Z @ 9277 NONAME ; class QString QPixmapColorizeFilter::trUtf8(char const *, char const *)
 	?removeFromGroup@QGraphicsItemGroup@@QAEXPAVQGraphicsItem@@@Z @ 9278 NONAME ; void QGraphicsItemGroup::removeFromGroup(class QGraphicsItem *)
@@ -9357,7 +9357,7 @@ EXPORTS
 	?toVector2D@QVector3D@@QBE?AVQVector2D@@XZ @ 9356 NONAME ; class QVector2D QVector3D::toVector2D(void) const
 	?stackBefore@QGraphicsItem@@QAEXPBV1@@Z @ 9357 NONAME ; void QGraphicsItem::stackBefore(class QGraphicsItem const *)
 	?sizeHintForColumn@QTreeView@@MBEHH@Z @ 9358 NONAME ; int QTreeView::sizeHintForColumn(int) const
-	?widgetDestroyed@QCoeFepInputContext@@UAEXPAVQWidget@@@Z @ 9359 NONAME ; void QCoeFepInputContext::widgetDestroyed(class QWidget *)
+	?widgetDestroyed@QCoeFepInputContext@@UAEXPAVQWidget@@@Z @ 9359 NONAME ABSENT ; void QCoeFepInputContext::widgetDestroyed(class QWidget *)
 	?staticMetaObject@QPushButton@@2UQMetaObject@@B @ 9360 NONAME ; struct QMetaObject const QPushButton::staticMetaObject
 	?xHeight@QFontEngine@@UBE?AUQFixed@@XZ @ 9361 NONAME ; struct QFixed QFontEngine::xHeight(void) const
 	?setItemIcon@QToolBox@@QAEXHABVQIcon@@@Z @ 9362 NONAME ; void QToolBox::setItemIcon(int, class QIcon const &)
@@ -9606,7 +9606,7 @@ EXPORTS
 	?textDirection@QProgressBar@@QAE?AW4Direction@1@XZ @ 9605 NONAME ; enum QProgressBar::Direction QProgressBar::textDirection(void)
 	?unpolish@QStyle@@UAEXPAVQApplication@@@Z @ 9606 NONAME ; void QStyle::unpolish(class QApplication *)
 	?redo@QPlainTextEdit@@QAEXXZ @ 9607 NONAME ; void QPlainTextEdit::redo(void)
-	?SetInlineEditingCursorVisibilityL@QCoeFepInputContext@@UAEXH@Z @ 9608 NONAME ; void QCoeFepInputContext::SetInlineEditingCursorVisibilityL(int)
+	?SetInlineEditingCursorVisibilityL@QCoeFepInputContext@@UAEXH@Z @ 9608 NONAME ABSENT ; void QCoeFepInputContext::SetInlineEditingCursorVisibilityL(int)
 	??6@YA?AVQDebug@@V0@V?$QFlags@W4StateFlag@QStyle@@@@@Z @ 9609 NONAME ; class QDebug operator<<(class QDebug, class QFlags<enum QStyle::StateFlag>)
 	?test@Parser@QCss@@QAE_NW4TokenType@2@@Z @ 9610 NONAME ; bool QCss::Parser::test(enum QCss::TokenType)
 	?alignment@QTextBlockFormat@@QBE?AV?$QFlags@W4AlignmentFlag@Qt@@@@XZ @ 9611 NONAME ; class QFlags<enum Qt::AlignmentFlag> QTextBlockFormat::alignment(void) const
@@ -9712,7 +9712,7 @@ EXPORTS
 	?d_func@QListWidget@@AAEPAVQListWidgetPrivate@@XZ @ 9711 NONAME ; class QListWidgetPrivate * QListWidget::d_func(void)
 	??1QMessageBox@@UAE@XZ @ 9712 NONAME ; QMessageBox::~QMessageBox(void)
 	?paintOnScreen@QWidgetPrivate@@QBE_NXZ @ 9713 NONAME ; bool QWidgetPrivate::paintOnScreen(void) const
-	?trUtf8@QCoeFepInputContext@@SA?AVQString@@PBD0H@Z @ 9714 NONAME ; class QString QCoeFepInputContext::trUtf8(char const *, char const *, int)
+	?trUtf8@QCoeFepInputContext@@SA?AVQString@@PBD0H@Z @ 9714 NONAME ABSENT ; class QString QCoeFepInputContext::trUtf8(char const *, char const *, int)
 	?setCorrectionMode@QAbstractSpinBox@@QAEXW4CorrectionMode@1@@Z @ 9715 NONAME ; void QAbstractSpinBox::setCorrectionMode(enum QAbstractSpinBox::CorrectionMode)
 	?translate@QPolygon@@QAEXABVQPoint@@@Z @ 9716 NONAME ; void QPolygon::translate(class QPoint const &)
 	??0QTextBrowser@@QAE@PAVQWidget@@@Z @ 9717 NONAME ; QTextBrowser::QTextBrowser(class QWidget *)
@@ -9807,7 +9807,7 @@ EXPORTS
 	?widthF@QPen@@QBEMXZ @ 9806 NONAME ; float QPen::widthF(void) const
 	?mouseMoveEvent@QAbstractItemView@@MAEXPAVQMouseEvent@@@Z @ 9807 NONAME ; void QAbstractItemView::mouseMoveEvent(class QMouseEvent *)
 	?styleHint@QWindowsStyle@@UBEHW4StyleHint@QStyle@@PBVQStyleOption@@PBVQWidget@@PAVQStyleHintReturn@@@Z @ 9808 NONAME ; int QWindowsStyle::styleHint(enum QStyle::StyleHint, class QStyleOption const *, class QWidget const *, class QStyleHintReturn *) const
-	?SetCursorSelectionForFepL@QCoeFepInputContext@@UAEXABVTCursorSelection@@@Z @ 9809 NONAME ; void QCoeFepInputContext::SetCursorSelectionForFepL(class TCursorSelection const &)
+	?SetCursorSelectionForFepL@QCoeFepInputContext@@UAEXABVTCursorSelection@@@Z @ 9809 NONAME ABSENT ; void QCoeFepInputContext::SetCursorSelectionForFepL(class TCursorSelection const &)
 	??1QClipboardEvent@@UAE@XZ @ 9810 NONAME ; QClipboardEvent::~QClipboardEvent(void)
 	?textLanguages@QImage@@QBE?AVQStringList@@XZ @ 9811 NONAME ; class QStringList QImage::textLanguages(void) const
 	?page@QWizard@@QBEPAVQWizardPage@@H@Z @ 9812 NONAME ; class QWizardPage * QWizard::page(int) const
@@ -9958,14 +9958,14 @@ EXPORTS
 	?valuePropertyName@QItemEditorFactory@@UBE?AVQByteArray@@W4Type@QVariant@@@Z @ 9957 NONAME ; class QByteArray QItemEditorFactory::valuePropertyName(enum QVariant::Type) const
 	?focusInEvent@QLabel@@MAEXPAVQFocusEvent@@@Z @ 9958 NONAME ; void QLabel::focusInEvent(class QFocusEvent *)
 	?toString@Value@QCss@@QBE?AVQString@@XZ @ 9959 NONAME ; class QString QCss::Value::toString(void) const
-	?GetCursorSelectionForFep@QCoeFepInputContext@@UBEXAAVTCursorSelection@@@Z @ 9960 NONAME ; void QCoeFepInputContext::GetCursorSelectionForFep(class TCursorSelection &) const
+	?GetCursorSelectionForFep@QCoeFepInputContext@@UBEXAAVTCursorSelection@@@Z @ 9960 NONAME ABSENT ; void QCoeFepInputContext::GetCursorSelectionForFep(class TCursorSelection &) const
 	??0QTransform@@QAE@ABVQMatrix@@@Z @ 9961 NONAME ; QTransform::QTransform(class QMatrix const &)
 	?setViewMode@QFileDialog@@QAEXW4ViewMode@1@@Z @ 9962 NONAME ; void QFileDialog::setViewMode(enum QFileDialog::ViewMode)
 	?setCurrentCharFormat@QTextControl@@QAEXABVQTextCharFormat@@@Z @ 9963 NONAME ; void QTextControl::setCurrentCharFormat(class QTextCharFormat const &)
 	??6@YAAAVQDataStream@@AAV0@ABVQPalette@@@Z @ 9964 NONAME ; class QDataStream & operator<<(class QDataStream &, class QPalette const &)
 	??_EQHelpEvent@@UAE@I@Z @ 9965 NONAME ; QHelpEvent::~QHelpEvent(unsigned int)
 	?verticalScaleAt@QGraphicsItemAnimation@@QBEMM@Z @ 9966 NONAME ; float QGraphicsItemAnimation::verticalScaleAt(float) const
-	?State@QCoeFepInputContext@@UAEPAVCState@MCoeFepAwareTextEditor_Extension1@@VTUid@@@Z @ 9967 NONAME ; class MCoeFepAwareTextEditor_Extension1::CState * QCoeFepInputContext::State(class TUid)
+	?State@QCoeFepInputContext@@UAEPAVCState@MCoeFepAwareTextEditor_Extension1@@VTUid@@@Z @ 9967 NONAME ABSENT ; class MCoeFepAwareTextEditor_Extension1::CState * QCoeFepInputContext::State(class TUid)
 	?q_func@QGraphicsEffectPrivate@@AAEPAVQGraphicsEffect@@XZ @ 9968 NONAME ; class QGraphicsEffect * QGraphicsEffectPrivate::q_func(void)
 	?trUtf8@QRadioButton@@SA?AVQString@@PBD0@Z @ 9969 NONAME ; class QString QRadioButton::trUtf8(char const *, char const *)
 	?setVerticalHeaderFormat@QCalendarWidget@@QAEXW4VerticalHeaderFormat@1@@Z @ 9970 NONAME ; void QCalendarWidget::setVerticalHeaderFormat(enum QCalendarWidget::VerticalHeaderFormat)
@@ -10291,7 +10291,7 @@ EXPORTS
 	?tr@QInputDialog@@SA?AVQString@@PBD0@Z @ 10290 NONAME ; class QString QInputDialog::tr(char const *, char const *)
 	?tabSizeHint@QTabBar@@MBE?AVQSize@@H@Z @ 10291 NONAME ; class QSize QTabBar::tabSizeHint(int) const
 	?tr@QDateEdit@@SA?AVQString@@PBD0@Z @ 10292 NONAME ; class QString QDateEdit::tr(char const *, char const *)
-	?tr@QCoeFepInputContext@@SA?AVQString@@PBD0H@Z @ 10293 NONAME ; class QString QCoeFepInputContext::tr(char const *, char const *, int)
+	?tr@QCoeFepInputContext@@SA?AVQString@@PBD0H@Z @ 10293 NONAME ABSENT ; class QString QCoeFepInputContext::tr(char const *, char const *, int)
 	?origin@QGraphicsScale@@QBE?AVQVector3D@@XZ @ 10294 NONAME ; class QVector3D QGraphicsScale::origin(void) const
 	?subElementRect@QCommonStyle@@UBE?AVQRect@@W4SubElement@QStyle@@PBVQStyleOption@@PBVQWidget@@@Z @ 10295 NONAME ; class QRect QCommonStyle::subElementRect(enum QStyle::SubElement, class QStyleOption const *, class QWidget const *) const
 	?sizeHint@QRadioButton@@UBE?AVQSize@@XZ @ 10296 NONAME ; class QSize QRadioButton::sizeHint(void) const
@@ -10597,7 +10597,7 @@ EXPORTS
 	?menuBar@QLayout@@QBEPAVQWidget@@XZ @ 10596 NONAME ; class QWidget * QLayout::menuBar(void) const
 	?items@QGraphicsScene@@QBE?AV?$QList@PAVQGraphicsItem@@@@ABVQPolygonF@@W4ItemSelectionMode@Qt@@W4SortOrder@5@ABVQTransform@@@Z @ 10597 NONAME ; class QList<class QGraphicsItem *> QGraphicsScene::items(class QPolygonF const &, enum Qt::ItemSelectionMode, enum Qt::SortOrder, class QTransform const &) const
 	?substitutions@QFont@@SA?AVQStringList@@XZ @ 10598 NONAME ; class QStringList QFont::substitutions(void)
-	?DoCommitFepInlineEditL@QCoeFepInputContext@@EAEXXZ @ 10599 NONAME ; void QCoeFepInputContext::DoCommitFepInlineEditL(void)
+	?DoCommitFepInlineEditL@QCoeFepInputContext@@EAEXXZ @ 10599 NONAME ABSENT ; void QCoeFepInputContext::DoCommitFepInlineEditL(void)
 	?rootPath@QFileSystemModel@@QBE?AVQString@@XZ @ 10600 NONAME ; class QString QFileSystemModel::rootPath(void) const
 	?documentSizeChanged@QTextControl@@IAEXABVQSizeF@@@Z @ 10601 NONAME ; void QTextControl::documentSizeChanged(class QSizeF const &)
 	??1QScrollArea@@UAE@XZ @ 10602 NONAME ; QScrollArea::~QScrollArea(void)
@@ -10616,7 +10616,7 @@ EXPORTS
 	?reason@QFocusEvent@@QBE?AW4FocusReason@Qt@@XZ @ 10615 NONAME ; enum Qt::FocusReason QFocusEvent::reason(void) const
 	?undo@QTextControl@@QAEXXZ @ 10616 NONAME ; void QTextControl::undo(void)
 	?fromHsv@QColor@@SA?AV1@HHHH@Z @ 10617 NONAME ; class QColor QColor::fromHsv(int, int, int, int)
-	?reset@QCoeFepInputContext@@UAEXXZ @ 10618 NONAME ; void QCoeFepInputContext::reset(void)
+	?reset@QCoeFepInputContext@@UAEXXZ @ 10618 NONAME ABSENT ; void QCoeFepInputContext::reset(void)
 	?load@QImage@@QAE_NABVQString@@PBD@Z @ 10619 NONAME ; bool QImage::load(class QString const &, char const *)
 	?staticMetaObject@QProxyStyle@@2UQMetaObject@@B @ 10620 NONAME ; struct QMetaObject const QProxyStyle::staticMetaObject
 	?translate@QMatrix4x4@@QAEAAV1@MMM@Z @ 10621 NONAME ; class QMatrix4x4 & QMatrix4x4::translate(float, float, float)
@@ -10690,7 +10690,7 @@ EXPORTS
 	?controlTypes@QLayoutItem@@QBE?AV?$QFlags@W4ControlType@QSizePolicy@@@@XZ @ 10689 NONAME ; class QFlags<enum QSizePolicy::ControlType> QLayoutItem::controlTypes(void) const
 	?options@QWizard@@QBE?AV?$QFlags@W4WizardOption@QWizard@@@@XZ @ 10690 NONAME ; class QFlags<enum QWizard::WizardOption> QWizard::options(void) const
 	?visualRegionForSelection@QTableView@@MBE?AVQRegion@@ABVQItemSelection@@@Z @ 10691 NONAME ; class QRegion QTableView::visualRegionForSelection(class QItemSelection const &) const
-	?applyFormat@QCoeFepInputContext@@AAEXPAV?$QList@VAttribute@QInputMethodEvent@@@@@Z @ 10692 NONAME ; void QCoeFepInputContext::applyFormat(class QList<class QInputMethodEvent::Attribute> *)
+	?applyFormat@QCoeFepInputContext@@AAEXPAV?$QList@VAttribute@QInputMethodEvent@@@@@Z @ 10692 NONAME ABSENT ; void QCoeFepInputContext::applyFormat(class QList<class QInputMethodEvent::Attribute> *)
 	??1QFontMetrics@@QAE@XZ @ 10693 NONAME ; QFontMetrics::~QFontMetrics(void)
 	?setWindowRole@QWidget@@QAEXABVQString@@@Z @ 10694 NONAME ; void QWidget::setWindowRole(class QString const &)
 	??0QTextTable@@QAE@PAVQTextDocument@@@Z @ 10695 NONAME ; QTextTable::QTextTable(class QTextDocument *)
@@ -10867,7 +10867,7 @@ EXPORTS
 	?setNameFilterDisables@QFileSystemModel@@QAEX_N@Z @ 10866 NONAME ; void QFileSystemModel::setNameFilterDisables(bool)
 	?resizeAnchor@QGraphicsView@@QBE?AW4ViewportAnchor@1@XZ @ 10867 NONAME ; enum QGraphicsView::ViewportAnchor QGraphicsView::resizeAnchor(void) const
 	?scale@QMatrix4x4@@QAEAAV1@M@Z @ 10868 NONAME ; class QMatrix4x4 & QMatrix4x4::scale(float)
-	?SetStateTransferingOwnershipL@QCoeFepInputContext@@UAEXPAVCState@MCoeFepAwareTextEditor_Extension1@@VTUid@@@Z @ 10869 NONAME ; void QCoeFepInputContext::SetStateTransferingOwnershipL(class MCoeFepAwareTextEditor_Extension1::CState *, class TUid)
+	?SetStateTransferingOwnershipL@QCoeFepInputContext@@UAEXPAVCState@MCoeFepAwareTextEditor_Extension1@@VTUid@@@Z @ 10869 NONAME ABSENT ; void QCoeFepInputContext::SetStateTransferingOwnershipL(class MCoeFepAwareTextEditor_Extension1::CState *, class TUid)
 	??0QStyle@@QAE@XZ @ 10870 NONAME ; QStyle::QStyle(void)
 	?mouseDoubleClickEvent@QHeaderView@@MAEXPAVQMouseEvent@@@Z @ 10871 NONAME ; void QHeaderView::mouseDoubleClickEvent(class QMouseEvent *)
 	?addPermanentWidget@QStatusBar@@QAEXPAVQWidget@@H@Z @ 10872 NONAME ; void QStatusBar::addPermanentWidget(class QWidget *, int)
@@ -11545,7 +11545,7 @@ EXPORTS
 	?keyReleaseEvent@QWidget@@MAEXPAVQKeyEvent@@@Z @ 11544 NONAME ; void QWidget::keyReleaseEvent(class QKeyEvent *)
 	??0QCursor@@QAE@ABV0@@Z @ 11545 NONAME ; QCursor::QCursor(class QCursor const &)
 	?keyReleaseEvent@QGraphicsScene@@MAEXPAVQKeyEvent@@@Z @ 11546 NONAME ; void QGraphicsScene::keyReleaseEvent(class QKeyEvent *)
-	?tr@QCoeFepInputContext@@SA?AVQString@@PBD0@Z @ 11547 NONAME ; class QString QCoeFepInputContext::tr(char const *, char const *)
+	?tr@QCoeFepInputContext@@SA?AVQString@@PBD0@Z @ 11547 NONAME ABSENT ; class QString QCoeFepInputContext::tr(char const *, char const *)
 	?pos@QContextMenuEvent@@QBEABVQPoint@@XZ @ 11548 NONAME ; class QPoint const & QContextMenuEvent::pos(void) const
 	??5@YAAAVQDataStream@@AAV0@AAVQCursor@@@Z @ 11549 NONAME ; class QDataStream & operator>>(class QDataStream &, class QCursor &)
 	??_EQTextObject@@UAE@I@Z @ 11550 NONAME ; QTextObject::~QTextObject(unsigned int)
@@ -11787,7 +11787,7 @@ EXPORTS
 	?focusOutEvent@QPlainTextEdit@@MAEXPAVQFocusEvent@@@Z @ 11786 NONAME ; void QPlainTextEdit::focusOutEvent(class QFocusEvent *)
 	??_EQItemEditorCreatorBase@@UAE@I@Z @ 11787 NONAME ; QItemEditorCreatorBase::~QItemEditorCreatorBase(unsigned int)
 	?capStyleMode@QStroker@@QBE?AW4LineJoinMode@1@XZ @ 11788 NONAME ; enum QStroker::LineJoinMode QStroker::capStyleMode(void) const
-	?filterEvent@QCoeFepInputContext@@UAE_NPBVQEvent@@@Z @ 11789 NONAME ; bool QCoeFepInputContext::filterEvent(class QEvent const *)
+	?filterEvent@QCoeFepInputContext@@UAE_NPBVQEvent@@@Z @ 11789 NONAME ABSENT ; bool QCoeFepInputContext::filterEvent(class QEvent const *)
 	??HQRegion@@QBE?BV0@ABV0@@Z @ 11790 NONAME ; class QRegion const QRegion::operator+(class QRegion const &) const
 	?revert@QAbstractProxyModel@@UAEXXZ @ 11791 NONAME ; void QAbstractProxyModel::revert(void)
 	??0QPainterState@@QAE@PBV0@@Z @ 11792 NONAME ; QPainterState::QPainterState(class QPainterState const *)
@@ -11880,7 +11880,7 @@ EXPORTS
 	?updateState@QPaintEngineEx@@UAEXABVQPaintEngineState@@@Z @ 11879 NONAME ; void QPaintEngineEx::updateState(class QPaintEngineState const &)
 	?qt_metacall@QTextFrame@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 11880 NONAME ; int QTextFrame::qt_metacall(enum QMetaObject::Call, int, void * *)
 	?getStaticMetaObject@QImageIOPlugin@@SAABUQMetaObject@@XZ @ 11881 NONAME ; struct QMetaObject const & QImageIOPlugin::getStaticMetaObject(void)
-	?trUtf8@QCoeFepInputContext@@SA?AVQString@@PBD0@Z @ 11882 NONAME ; class QString QCoeFepInputContext::trUtf8(char const *, char const *)
+	?trUtf8@QCoeFepInputContext@@SA?AVQString@@PBD0@Z @ 11882 NONAME ABSENT ; class QString QCoeFepInputContext::trUtf8(char const *, char const *)
 	?autoExclusive@QAbstractButton@@QBE_NXZ @ 11883 NONAME ; bool QAbstractButton::autoExclusive(void) const
 	??1QGraphicsEffectSource@@UAE@XZ @ 11884 NONAME ; QGraphicsEffectSource::~QGraphicsEffectSource(void)
 	?mapRectToScene@QGraphicsItem@@QBE?AVQRectF@@MMMM@Z @ 11885 NONAME ; class QRectF QGraphicsItem::mapRectToScene(float, float, float, float) const
@@ -12050,7 +12050,7 @@ EXPORTS
 	?addRoundedRect@QPainterPath@@QAEXMMMMMMW4SizeMode@Qt@@@Z @ 12049 NONAME ; void QPainterPath::addRoundedRect(float, float, float, float, float, float, enum Qt::SizeMode)
 	?lastCursorPosition@QTextTableCell@@QBE?AVQTextCursor@@XZ @ 12050 NONAME ; class QTextCursor QTextTableCell::lastCursorPosition(void) const
 	?toTableCellFormat@QTextFormat@@QBE?AVQTextTableCellFormat@@XZ @ 12051 NONAME ; class QTextTableCellFormat QTextFormat::toTableCellFormat(void) const
-	?setFocusWidget@QCoeFepInputContext@@UAEXPAVQWidget@@@Z @ 12052 NONAME ; void QCoeFepInputContext::setFocusWidget(class QWidget *)
+	?setFocusWidget@QCoeFepInputContext@@UAEXPAVQWidget@@@Z @ 12052 NONAME ABSENT ; void QCoeFepInputContext::setFocusWidget(class QWidget *)
 	?stretch@QBoxLayout@@QBEHH@Z @ 12053 NONAME ; int QBoxLayout::stretch(int) const
 	?setColumnHidden@QTableView@@QAEXH_N@Z @ 12054 NONAME ; void QTableView::setColumnHidden(int, bool)
 	??Eiterator@QTextBlock@@QAE?AV01@H@Z @ 12055 NONAME ; class QTextBlock::iterator QTextBlock::iterator::operator++(int)
@@ -12405,7 +12405,7 @@ EXPORTS
 	??6@YAAAVQDataStream@@AAV0@ABVQTextFormat@@@Z @ 12404 NONAME ; class QDataStream & operator<<(class QDataStream &, class QTextFormat const &)
 	?setBlockCharFormat@QTextCursor@@QAEXABVQTextCharFormat@@@Z @ 12405 NONAME ; void QTextCursor::setBlockCharFormat(class QTextCharFormat const &)
 	??6@YA?AVQDebug@@V0@ABVQRegion@@@Z @ 12406 NONAME ; class QDebug operator<<(class QDebug, class QRegion const &)
-	?Extension1@QCoeFepInputContext@@EAEPAVMCoeFepAwareTextEditor_Extension1@@AAH@Z @ 12407 NONAME ; class MCoeFepAwareTextEditor_Extension1 * QCoeFepInputContext::Extension1(int &)
+	?Extension1@QCoeFepInputContext@@EAEPAVMCoeFepAwareTextEditor_Extension1@@AAH@Z @ 12407 NONAME ABSENT ; class MCoeFepAwareTextEditor_Extension1 * QCoeFepInputContext::Extension1(int &)
 	?tr@QUndoView@@SA?AVQString@@PBD0H@Z @ 12408 NONAME ; class QString QUndoView::tr(char const *, char const *, int)
 	?sortByColumn@QTableView@@QAEXH@Z @ 12409 NONAME ; void QTableView::sortByColumn(int)
 	?supportedDropActions@QStringListModel@@UBE?AV?$QFlags@W4DropAction@Qt@@@@XZ @ 12410 NONAME ; class QFlags<enum Qt::DropAction> QStringListModel::supportedDropActions(void) const
@@ -12540,7 +12540,7 @@ EXPORTS
 	?loadResource@QTextEdit@@UAE?AVQVariant@@HABVQUrl@@@Z @ 12539 NONAME ; class QVariant QTextEdit::loadResource(int, class QUrl const &)
 	??0QStyleOptionDockWidgetV2@@IAE@H@Z @ 12540 NONAME ; QStyleOptionDockWidgetV2::QStyleOptionDockWidgetV2(int)
 	??0QSplitter@@QAE@PAVQWidget@@@Z @ 12541 NONAME ; QSplitter::QSplitter(class QWidget *)
-	?DocumentLengthForFep@QCoeFepInputContext@@UBEHXZ @ 12542 NONAME ; int QCoeFepInputContext::DocumentLengthForFep(void) const
+	?DocumentLengthForFep@QCoeFepInputContext@@UBEHXZ @ 12542 NONAME ABSENT ; int QCoeFepInputContext::DocumentLengthForFep(void) const
 	??0QShowEvent@@QAE@XZ @ 12543 NONAME ; QShowEvent::QShowEvent(void)
 	?fontEngine@QTextEngine@@QBEPAVQFontEngine@@ABUQScriptItem@@PAUQFixed@@11@Z @ 12544 NONAME ; class QFontEngine * QTextEngine::fontEngine(struct QScriptItem const &, struct QFixed *, struct QFixed *, struct QFixed *) const
 	?leading@QTextLine@@QBEMXZ @ 12545 NONAME ; float QTextLine::leading(void) const
diff --git a/src/s60installs/eabi/QtGuiu.def b/src/s60installs/eabi/QtGuiu.def
index bf1908a..5d66fb7 100644
--- a/src/s60installs/eabi/QtGuiu.def
+++ b/src/s60installs/eabi/QtGuiu.def
@@ -4361,40 +4361,40 @@ EXPORTS
 	_ZN19QApplicationPrivateD0Ev @ 4360 NONAME
 	_ZN19QApplicationPrivateD1Ev @ 4361 NONAME
 	_ZN19QApplicationPrivateD2Ev @ 4362 NONAME
-	_ZN19QCoeFepInputContext10Extension1ERi @ 4363 NONAME
-	_ZN19QCoeFepInputContext10applyHintsE6QFlagsIN2Qt15InputMethodHintEE @ 4364 NONAME
-	_ZN19QCoeFepInputContext11applyFormatEP5QListIN17QInputMethodEvent9AttributeEE @ 4365 NONAME
-	_ZN19QCoeFepInputContext11filterEventEPK6QEvent @ 4366 NONAME
-	_ZN19QCoeFepInputContext11qt_metacallEN11QMetaObject4CallEiPPv @ 4367 NONAME
-	_ZN19QCoeFepInputContext11qt_metacastEPKc @ 4368 NONAME
-	_ZN19QCoeFepInputContext11updateHintsEb @ 4369 NONAME
-	_ZN19QCoeFepInputContext12mouseHandlerEiP11QMouseEvent @ 4370 NONAME
-	_ZN19QCoeFepInputContext14setFocusWidgetEP7QWidget @ 4371 NONAME
-	_ZN19QCoeFepInputContext15MopSupplyObjectE8TTypeUid @ 4372 NONAME
-	_ZN19QCoeFepInputContext15widgetDestroyedEP7QWidget @ 4373 NONAME
-	_ZN19QCoeFepInputContext16staticMetaObjectE @ 4374 NONAME DATA 16
-	_ZN19QCoeFepInputContext17inputCapabilitiesEv @ 4375 NONAME
-	_ZN19QCoeFepInputContext19CancelFepInlineEditEv @ 4376 NONAME
-	_ZN19QCoeFepInputContext19StartFepInlineEditLERK7TDesC16iiPK15MFormCustomDrawR29MFepInlineTextFormatRetrieverR39MFepPointerEventHandlerDuringInlineEdit @ 4377 NONAME
-	_ZN19QCoeFepInputContext19commitCurrentStringEb @ 4378 NONAME
-	_ZN19QCoeFepInputContext19getStaticMetaObjectEv @ 4379 NONAME
-	_ZN19QCoeFepInputContext20UpdateFepInlineTextLERK7TDesC16i @ 4380 NONAME
-	_ZN19QCoeFepInputContext21ReportAknEdStateEventEN19MAknEdStateObserver19EAknEdwinStateEventE @ 4381 NONAME
-	_ZN19QCoeFepInputContext22DoCommitFepInlineEditLEv @ 4382 NONAME
-	_ZN19QCoeFepInputContext25SetCursorSelectionForFepLERK16TCursorSelection @ 4383 NONAME
-	_ZN19QCoeFepInputContext29SetStateTransferingOwnershipLEPN33MCoeFepAwareTextEditor_Extension16CStateE4TUid @ 4384 NONAME
-	_ZN19QCoeFepInputContext29queueInputCapabilitiesChangedEv @ 4385 NONAME
-	_ZN19QCoeFepInputContext30ensureInputCapabilitiesChangedEv @ 4386 NONAME
-	_ZN19QCoeFepInputContext33SetInlineEditingCursorVisibilityLEi @ 4387 NONAME
-	_ZN19QCoeFepInputContext5StateE4TUid @ 4388 NONAME
-	_ZN19QCoeFepInputContext5resetEv @ 4389 NONAME
-	_ZN19QCoeFepInputContext6updateEv @ 4390 NONAME
-	_ZN19QCoeFepInputContext8languageEv @ 4391 NONAME
-	_ZN19QCoeFepInputContextC1EP7QObject @ 4392 NONAME
-	_ZN19QCoeFepInputContextC2EP7QObject @ 4393 NONAME
-	_ZN19QCoeFepInputContextD0Ev @ 4394 NONAME
-	_ZN19QCoeFepInputContextD1Ev @ 4395 NONAME
-	_ZN19QCoeFepInputContextD2Ev @ 4396 NONAME
+	_ZN19QCoeFepInputContext10Extension1ERi @ 4363 NONAME ABSENT
+	_ZN19QCoeFepInputContext10applyHintsE6QFlagsIN2Qt15InputMethodHintEE @ 4364 NONAME ABSENT
+	_ZN19QCoeFepInputContext11applyFormatEP5QListIN17QInputMethodEvent9AttributeEE @ 4365 NONAME ABSENT
+	_ZN19QCoeFepInputContext11filterEventEPK6QEvent @ 4366 NONAME ABSENT
+	_ZN19QCoeFepInputContext11qt_metacallEN11QMetaObject4CallEiPPv @ 4367 NONAME ABSENT
+	_ZN19QCoeFepInputContext11qt_metacastEPKc @ 4368 NONAME ABSENT
+	_ZN19QCoeFepInputContext11updateHintsEb @ 4369 NONAME ABSENT
+	_ZN19QCoeFepInputContext12mouseHandlerEiP11QMouseEvent @ 4370 NONAME ABSENT
+	_ZN19QCoeFepInputContext14setFocusWidgetEP7QWidget @ 4371 NONAME ABSENT
+	_ZN19QCoeFepInputContext15MopSupplyObjectE8TTypeUid @ 4372 NONAME ABSENT
+	_ZN19QCoeFepInputContext15widgetDestroyedEP7QWidget @ 4373 NONAME ABSENT
+	_ZN19QCoeFepInputContext16staticMetaObjectE @ 4374 NONAME DATA 16 ABSENT
+	_ZN19QCoeFepInputContext17inputCapabilitiesEv @ 4375 NONAME ABSENT
+	_ZN19QCoeFepInputContext19CancelFepInlineEditEv @ 4376 NONAME ABSENT
+	_ZN19QCoeFepInputContext19StartFepInlineEditLERK7TDesC16iiPK15MFormCustomDrawR29MFepInlineTextFormatRetrieverR39MFepPointerEventHandlerDuringInlineEdit @ 4377 NONAME ABSENT
+	_ZN19QCoeFepInputContext19commitCurrentStringEb @ 4378 NONAME ABSENT
+	_ZN19QCoeFepInputContext19getStaticMetaObjectEv @ 4379 NONAME ABSENT
+	_ZN19QCoeFepInputContext20UpdateFepInlineTextLERK7TDesC16i @ 4380 NONAME ABSENT
+	_ZN19QCoeFepInputContext21ReportAknEdStateEventEN19MAknEdStateObserver19EAknEdwinStateEventE @ 4381 NONAME ABSENT
+	_ZN19QCoeFepInputContext22DoCommitFepInlineEditLEv @ 4382 NONAME ABSENT
+	_ZN19QCoeFepInputContext25SetCursorSelectionForFepLERK16TCursorSelection @ 4383 NONAME ABSENT
+	_ZN19QCoeFepInputContext29SetStateTransferingOwnershipLEPN33MCoeFepAwareTextEditor_Extension16CStateE4TUid @ 4384 NONAME ABSENT
+	_ZN19QCoeFepInputContext29queueInputCapabilitiesChangedEv @ 4385 NONAME ABSENT
+	_ZN19QCoeFepInputContext30ensureInputCapabilitiesChangedEv @ 4386 NONAME ABSENT
+	_ZN19QCoeFepInputContext33SetInlineEditingCursorVisibilityLEi @ 4387 NONAME ABSENT
+	_ZN19QCoeFepInputContext5StateE4TUid @ 4388 NONAME ABSENT
+	_ZN19QCoeFepInputContext5resetEv @ 4389 NONAME ABSENT
+	_ZN19QCoeFepInputContext6updateEv @ 4390 NONAME ABSENT
+	_ZN19QCoeFepInputContext8languageEv @ 4391 NONAME ABSENT
+	_ZN19QCoeFepInputContextC1EP7QObject @ 4392 NONAME ABSENT
+	_ZN19QCoeFepInputContextC2EP7QObject @ 4393 NONAME ABSENT
+	_ZN19QCoeFepInputContextD0Ev @ 4394 NONAME ABSENT
+	_ZN19QCoeFepInputContextD1Ev @ 4395 NONAME ABSENT
+	_ZN19QCoeFepInputContextD2Ev @ 4396 NONAME ABSENT
 	_ZN19QEventDispatcherS6011qt_metacallEN11QMetaObject4CallEiPPv @ 4397 NONAME
 	_ZN19QEventDispatcherS6011qt_metacastEPKc @ 4398 NONAME
 	_ZN19QEventDispatcherS6013processEventsE6QFlagsIN10QEventLoop17ProcessEventsFlagEE @ 4399 NONAME
@@ -9263,13 +9263,13 @@ EXPORTS
 	_ZNK19QAbstractScrollArea8viewportEv @ 9262 NONAME
 	_ZNK19QApplicationPrivate11inPopupModeEv @ 9263 NONAME
 	_ZNK19QApplicationPrivate7appNameEv @ 9264 NONAME
-	_ZNK19QCoeFepInputContext10metaObjectEv @ 9265 NONAME
-	_ZNK19QCoeFepInputContext15GetFormatForFepER11TCharFormati @ 9266 NONAME
-	_ZNK19QCoeFepInputContext20DocumentLengthForFepEv @ 9267 NONAME
-	_ZNK19QCoeFepInputContext22GetEditorContentForFepER6TDes16ii @ 9268 NONAME
-	_ZNK19QCoeFepInputContext24GetCursorSelectionForFepER16TCursorSelection @ 9269 NONAME
-	_ZNK19QCoeFepInputContext27DocumentMaximumLengthForFepEv @ 9270 NONAME
-	_ZNK19QCoeFepInputContext27GetScreenCoordinatesForFepLER6TPointRiS2_i @ 9271 NONAME
+	_ZNK19QCoeFepInputContext10metaObjectEv @ 9265 NONAME ABSENT
+	_ZNK19QCoeFepInputContext15GetFormatForFepER11TCharFormati @ 9266 NONAME ABSENT
+	_ZNK19QCoeFepInputContext20DocumentLengthForFepEv @ 9267 NONAME ABSENT
+	_ZNK19QCoeFepInputContext22GetEditorContentForFepER6TDes16ii @ 9268 NONAME ABSENT
+	_ZNK19QCoeFepInputContext24GetCursorSelectionForFepER16TCursorSelection @ 9269 NONAME ABSENT
+	_ZNK19QCoeFepInputContext27DocumentMaximumLengthForFepEv @ 9270 NONAME ABSENT
+	_ZNK19QCoeFepInputContext27GetScreenCoordinatesForFepLER6TPointRiS2_i @ 9271 NONAME ABSENT
 	_ZNK19QEventDispatcherS6010metaObjectEv @ 9272 NONAME
 	_ZNK19QGraphicsBlurEffect10blurRadiusEv @ 9273 NONAME
 	_ZNK19QGraphicsBlurEffect10metaObjectEv @ 9274 NONAME
@@ -10774,7 +10774,7 @@ EXPORTS
 	_ZTI19QAbstractProxyModel @ 10773 NONAME
 	_ZTI19QAbstractScrollArea @ 10774 NONAME
 	_ZTI19QApplicationPrivate @ 10775 NONAME
-	_ZTI19QCoeFepInputContext @ 10776 NONAME
+	_ZTI19QCoeFepInputContext @ 10776 NONAME ABSENT
 	_ZTI19QEventDispatcherS60 @ 10777 NONAME
 	_ZTI19QGraphicsBlurEffect @ 10778 NONAME
 	_ZTI19QGraphicsGridLayout @ 10779 NONAME
@@ -11056,7 +11056,7 @@ EXPORTS
 	_ZTV19QAbstractProxyModel @ 11055 NONAME
 	_ZTV19QAbstractScrollArea @ 11056 NONAME
 	_ZTV19QApplicationPrivate @ 11057 NONAME
-	_ZTV19QCoeFepInputContext @ 11058 NONAME
+	_ZTV19QCoeFepInputContext @ 11058 NONAME ABSENT
 	_ZTV19QEventDispatcherS60 @ 11059 NONAME
 	_ZTV19QGraphicsBlurEffect @ 11060 NONAME
 	_ZTV19QGraphicsGridLayout @ 11061 NONAME
@@ -11164,8 +11164,8 @@ EXPORTS
 	_ZThn12_N14QDragMoveEventD1Ev @ 11163 NONAME
 	_ZThn12_N15QDragEnterEventD0Ev @ 11164 NONAME
 	_ZThn12_N15QDragEnterEventD1Ev @ 11165 NONAME
-	_ZThn12_N19QCoeFepInputContext29SetStateTransferingOwnershipLEPN33MCoeFepAwareTextEditor_Extension16CStateE4TUid @ 11166 NONAME
-	_ZThn12_N19QCoeFepInputContext5StateE4TUid @ 11167 NONAME
+	_ZThn12_N19QCoeFepInputContext29SetStateTransferingOwnershipLEPN33MCoeFepAwareTextEditor_Extension16CStateE4TUid @ 11166 NONAME ABSENT
+	_ZThn12_N19QCoeFepInputContext5StateE4TUid @ 11167 NONAME ABSENT
 	_ZThn12_NK10QDropEvent11encodedDataEPKc @ 11168 NONAME
 	_ZThn12_NK10QDropEvent6formatEi @ 11169 NONAME
 	_ZThn12_NK10QDropEvent8providesEPKc @ 11170 NONAME
@@ -11173,7 +11173,7 @@ EXPORTS
 	_ZThn16_N15QGraphicsWidget14updateGeometryEv @ 11172 NONAME
 	_ZThn16_N15QGraphicsWidgetD0Ev @ 11173 NONAME
 	_ZThn16_N15QGraphicsWidgetD1Ev @ 11174 NONAME
-	_ZThn16_N19QCoeFepInputContext15MopSupplyObjectE8TTypeUid @ 11175 NONAME
+	_ZThn16_N19QCoeFepInputContext15MopSupplyObjectE8TTypeUid @ 11175 NONAME ABSENT
 	_ZThn16_N20QGraphicsProxyWidget11setGeometryERK6QRectF @ 11176 NONAME
 	_ZThn16_N20QGraphicsProxyWidgetD0Ev @ 11177 NONAME
 	_ZThn16_N20QGraphicsProxyWidgetD1Ev @ 11178 NONAME
@@ -11323,13 +11323,13 @@ EXPORTS
 	_ZThn8_N17QIconEnginePluginD1Ev @ 11322 NONAME
 	_ZThn8_N19QAbstractScrollAreaD0Ev @ 11323 NONAME
 	_ZThn8_N19QAbstractScrollAreaD1Ev @ 11324 NONAME
-	_ZThn8_N19QCoeFepInputContext10Extension1ERi @ 11325 NONAME
-	_ZThn8_N19QCoeFepInputContext19CancelFepInlineEditEv @ 11326 NONAME
-	_ZThn8_N19QCoeFepInputContext19StartFepInlineEditLERK7TDesC16iiPK15MFormCustomDrawR29MFepInlineTextFormatRetrieverR39MFepPointerEventHandlerDuringInlineEdit @ 11327 NONAME
-	_ZThn8_N19QCoeFepInputContext20UpdateFepInlineTextLERK7TDesC16i @ 11328 NONAME
-	_ZThn8_N19QCoeFepInputContext22DoCommitFepInlineEditLEv @ 11329 NONAME
-	_ZThn8_N19QCoeFepInputContext25SetCursorSelectionForFepLERK16TCursorSelection @ 11330 NONAME
-	_ZThn8_N19QCoeFepInputContext33SetInlineEditingCursorVisibilityLEi @ 11331 NONAME
+	_ZThn8_N19QCoeFepInputContext10Extension1ERi @ 11325 NONAME ABSENT
+	_ZThn8_N19QCoeFepInputContext19CancelFepInlineEditEv @ 11326 NONAME ABSENT
+	_ZThn8_N19QCoeFepInputContext19StartFepInlineEditLERK7TDesC16iiPK15MFormCustomDrawR29MFepInlineTextFormatRetrieverR39MFepPointerEventHandlerDuringInlineEdit @ 11327 NONAME ABSENT
+	_ZThn8_N19QCoeFepInputContext20UpdateFepInlineTextLERK7TDesC16i @ 11328 NONAME ABSENT
+	_ZThn8_N19QCoeFepInputContext22DoCommitFepInlineEditLEv @ 11329 NONAME ABSENT
+	_ZThn8_N19QCoeFepInputContext25SetCursorSelectionForFepLERK16TCursorSelection @ 11330 NONAME ABSENT
+	_ZThn8_N19QCoeFepInputContext33SetInlineEditingCursorVisibilityLEi @ 11331 NONAME ABSENT
 	_ZThn8_N19QIconEnginePluginV2D0Ev @ 11332 NONAME
 	_ZThn8_N19QIconEnginePluginV2D1Ev @ 11333 NONAME
 	_ZThn8_N19QInputContextPluginD0Ev @ 11334 NONAME
@@ -11446,12 +11446,12 @@ EXPORTS
 	_ZThn8_NK17QGraphicsTextItem5shapeEv @ 11445 NONAME
 	_ZThn8_NK17QGraphicsTextItem8containsERK7QPointF @ 11446 NONAME
 	_ZThn8_NK17QGraphicsTextItem9extensionERK8QVariant @ 11447 NONAME
-	_ZThn8_NK19QCoeFepInputContext15GetFormatForFepER11TCharFormati @ 11448 NONAME
-	_ZThn8_NK19QCoeFepInputContext20DocumentLengthForFepEv @ 11449 NONAME
-	_ZThn8_NK19QCoeFepInputContext22GetEditorContentForFepER6TDes16ii @ 11450 NONAME
-	_ZThn8_NK19QCoeFepInputContext24GetCursorSelectionForFepER16TCursorSelection @ 11451 NONAME
-	_ZThn8_NK19QCoeFepInputContext27DocumentMaximumLengthForFepEv @ 11452 NONAME
-	_ZThn8_NK19QCoeFepInputContext27GetScreenCoordinatesForFepLER6TPointRiS2_i @ 11453 NONAME
+	_ZThn8_NK19QCoeFepInputContext15GetFormatForFepER11TCharFormati @ 11448 NONAME ABSENT
+	_ZThn8_NK19QCoeFepInputContext20DocumentLengthForFepEv @ 11449 NONAME ABSENT
+	_ZThn8_NK19QCoeFepInputContext22GetEditorContentForFepER6TDes16ii @ 11450 NONAME ABSENT
+	_ZThn8_NK19QCoeFepInputContext24GetCursorSelectionForFepER16TCursorSelection @ 11451 NONAME ABSENT
+	_ZThn8_NK19QCoeFepInputContext27DocumentMaximumLengthForFepEv @ 11452 NONAME ABSENT
+	_ZThn8_NK19QCoeFepInputContext27GetScreenCoordinatesForFepLER6TPointRiS2_i @ 11453 NONAME ABSENT
 	_ZThn8_NK20QGraphicsProxyWidget4typeEv @ 11454 NONAME
 	_ZThn8_NK7QLayout11maximumSizeEv @ 11455 NONAME
 	_ZThn8_NK7QLayout11minimumSizeEv @ 11456 NONAME
-- 
cgit v0.12


From 1f860338b23d783387b3817de0da100840078edf Mon Sep 17 00:00:00 2001
From: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
Date: Wed, 4 Nov 2009 12:15:06 +0100
Subject: reshuffle command line parsing

collect the files into a string list during the initial run instead of
iterating the argument list twice.
---
 tools/linguist/lrelease/main.cpp | 28 ++++++++++++----------------
 1 file changed, 12 insertions(+), 16 deletions(-)

diff --git a/tools/linguist/lrelease/main.cpp b/tools/linguist/lrelease/main.cpp
index db15506..b32b133 100644
--- a/tools/linguist/lrelease/main.cpp
+++ b/tools/linguist/lrelease/main.cpp
@@ -164,8 +164,8 @@ int main(int argc, char **argv)
     cd.m_verbose = true; // the default is true starting with Qt 4.2
     bool removeIdentical = false;
     Translator tor;
+    QStringList inputFiles;
     QString outputFile;
-    int numFiles = 0;
 
     for (int i = 1; i < argc; ++i) {
         if (args[i] == QLatin1String("-compress")) {
@@ -197,38 +197,34 @@ int main(int argc, char **argv)
                 printUsage();
                 return 1;
             }
-            i++;
-            outputFile = args[i];
+            outputFile = args[++i];
         } else if (args[i] == QLatin1String("-help")) {
             printUsage();
             return 0;
-        } else if (args[i][0] == QLatin1Char('-')) {
+        } else if (args[i].startsWith(QLatin1Char('-'))) {
             printUsage();
             return 1;
         } else {
-            numFiles++;
+            inputFiles << args[i];
         }
     }
 
-    if (numFiles == 0) {
+    if (inputFiles.isEmpty()) {
         printUsage();
         return 1;
     }
 
-    for (int i = 1; i < argc; ++i) {
-        if (args[i][0] == QLatin1Char('-') || args[i] == outputFile)
-            continue;
-
-        if (args[i].endsWith(QLatin1String(".pro"), Qt::CaseInsensitive)
-            || args[i].endsWith(QLatin1String(".pri"), Qt::CaseInsensitive)) {
+    foreach (const QString &inputFile, inputFiles) {
+        if (inputFile.endsWith(QLatin1String(".pro"), Qt::CaseInsensitive)
+            || inputFile.endsWith(QLatin1String(".pri"), Qt::CaseInsensitive)) {
             QHash<QByteArray, QStringList> varMap;
-            bool ok = evaluateProFile(args[i], cd.isVerbose(), &varMap);
+            bool ok = evaluateProFile(inputFile, cd.isVerbose(), &varMap);
             if (ok) {
                 QStringList translations = varMap.value("TRANSLATIONS");
                 if (translations.isEmpty()) {
                     qWarning("lrelease warning: Met no 'TRANSLATIONS' entry in"
                              " project file '%s'\n",
-                             qPrintable(args[i]));
+                             qPrintable(inputFile));
                 } else {
                     foreach (const QString &trans, translations)
                         if (!releaseTsFile(trans, cd, removeIdentical))
@@ -242,10 +238,10 @@ int main(int argc, char **argv)
             }
         } else {
             if (outputFile.isEmpty()) {
-                if (!releaseTsFile(args[i], cd, removeIdentical))
+                if (!releaseTsFile(inputFile, cd, removeIdentical))
                     return 1;
             } else {
-                if (!loadTsFile(tor, args[i], cd.isVerbose()))
+                if (!loadTsFile(tor, inputFile, cd.isVerbose()))
                     return 1;
             }
         }
-- 
cgit v0.12


From 9a88c8808f8e084e77ee22f907366250f3a0ad2a Mon Sep 17 00:00:00 2001
From: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
Date: Wed, 4 Nov 2009 12:17:03 +0100
Subject: add -markuntranslated option

maemo *really* want it, so pushing it in now ...
---
 tests/auto/linguist/lrelease/tst_lrelease.cpp | 13 ++++++++++
 tools/linguist/lrelease/main.cpp              |  9 +++++++
 tools/linguist/shared/qm.cpp                  | 35 +++++++++++++++------------
 tools/linguist/shared/translator.h            |  1 +
 4 files changed, 42 insertions(+), 16 deletions(-)

diff --git a/tests/auto/linguist/lrelease/tst_lrelease.cpp b/tests/auto/linguist/lrelease/tst_lrelease.cpp
index 39de8a1..93cb97c 100644
--- a/tests/auto/linguist/lrelease/tst_lrelease.cpp
+++ b/tests/auto/linguist/lrelease/tst_lrelease.cpp
@@ -60,6 +60,7 @@ private slots:
     void mixedcodecs();
     void compressed();
     void idbased();
+    void markuntranslated();
     void dupes();
 
 private:
@@ -210,6 +211,18 @@ void tst_lrelease::idbased()
     QCOMPARE(qtTrId("untranslated_id"), QString::fromAscii("This has no translation."));
 }
 
+void tst_lrelease::markuntranslated()
+{
+    QVERIFY(!QProcess::execute(binDir + "/lrelease -markuntranslated # -idbased testdata/idbased.ts"));
+
+    QTranslator translator;
+    QVERIFY(translator.load("testdata/idbased.qm"));
+    qApp->installTranslator(&translator);
+
+    QCOMPARE(qtTrId("test_id"), QString::fromAscii("This is a test string."));
+    QCOMPARE(qtTrId("untranslated_id"), QString::fromAscii("#This has no translation."));
+}
+
 void tst_lrelease::dupes()
 {
     QProcess proc;
diff --git a/tools/linguist/lrelease/main.cpp b/tools/linguist/lrelease/main.cpp
index b32b133..ecaed27 100644
--- a/tools/linguist/lrelease/main.cpp
+++ b/tools/linguist/lrelease/main.cpp
@@ -79,6 +79,9 @@ static void printUsage()
         "    -removeidentical\n"
         "           If the translated text is the same as\n"
         "           the source text, do not include the message\n"
+        "    -markuntranslated <prefix>\n"
+        "           If a message has no real translation, use the source text\n"
+        "           prefixed with the given string instead\n"
         "    -silent\n"
         "           Do not explain what is being done\n"
         "    -version\n"
@@ -183,6 +186,12 @@ int main(int argc, char **argv)
         } else if (args[i] == QLatin1String("-nounfinished")) {
             cd.m_ignoreUnfinished = true;
             continue;
+        } else if (args[i] == QLatin1String("-markuntranslated")) {
+            if (i == argc - 1) {
+                printUsage();
+                return 1;
+            }
+            cd.m_unTrPrefix = args[++i];
         } else if (args[i] == QLatin1String("-silent")) {
             cd.m_verbose = false;
             continue;
diff --git a/tools/linguist/shared/qm.cpp b/tools/linguist/shared/qm.cpp
index 317a07e..5965aac 100644
--- a/tools/linguist/shared/qm.cpp
+++ b/tools/linguist/shared/qm.cpp
@@ -172,8 +172,8 @@ public:
 
     bool save(QIODevice *iod);
 
-    void insert(const TranslatorMessage &msg, bool forceComment);
-    void insertIdBased(const TranslatorMessage &message);
+    void insert(const TranslatorMessage &msg, const QStringList &tlns, bool forceComment);
+    void insertIdBased(const TranslatorMessage &message, const QStringList &tlns);
 
     void squeeze(TranslatorSaveMode mode);
 
@@ -186,7 +186,8 @@ private:
     // on turn should be the same as passed to the actual tr(...) calls
     QByteArray originalBytes(const QString &str, bool isUtf8) const;
 
-    void insertInternal(const TranslatorMessage &message, bool forceComment, bool isUtf8);
+    void insertInternal(const TranslatorMessage &message, const QStringList &tlns,
+                        bool forceComment, bool isUtf8);
 
     static Prefix commonPrefix(const ByteTranslatorMessage &m1, const ByteTranslatorMessage &m2);
 
@@ -413,12 +414,13 @@ void Releaser::squeeze(TranslatorSaveMode mode)
     }
 }
 
-void Releaser::insertInternal(const TranslatorMessage &message, bool forceComment, bool isUtf8)
+void Releaser::insertInternal(const TranslatorMessage &message, const QStringList &tlns,
+                              bool forceComment, bool isUtf8)
 {
     ByteTranslatorMessage bmsg(originalBytes(message.context(), isUtf8),
                                originalBytes(message.sourceText(), isUtf8),
                                originalBytes(message.comment(), isUtf8),
-                               message.translations());
+                               tlns);
     if (!forceComment) {
         ByteTranslatorMessage bmsg2(
                 bmsg.context(), bmsg.sourceText(), QByteArray(""), bmsg.translations());
@@ -430,20 +432,15 @@ void Releaser::insertInternal(const TranslatorMessage &message, bool forceCommen
     m_messages.insert(bmsg, 0);
 }
 
-void Releaser::insert(const TranslatorMessage &message, bool forceComment)
+void Releaser::insert(const TranslatorMessage &message, const QStringList &tlns, bool forceComment)
 {
-    insertInternal(message, forceComment, message.isUtf8());
+    insertInternal(message, tlns, forceComment, message.isUtf8());
     if (message.isUtf8() && message.isNonUtf8())
-        insertInternal(message, forceComment, false);
+        insertInternal(message, tlns, forceComment, false);
 }
 
-void Releaser::insertIdBased(const TranslatorMessage &message)
+void Releaser::insertIdBased(const TranslatorMessage &message, const QStringList &tlns)
 {
-    QStringList tlns = message.translations();
-    if (message.type() == TranslatorMessage::Unfinished)
-        for (int i = 0; i < tlns.size(); ++i)
-            if (tlns.at(i).isEmpty())
-                tlns[i] = message.sourceText();
     ByteTranslatorMessage bmsg("", originalBytes(message.id(), false), "", tlns);
     m_messages.insert(bmsg, 0);
 }
@@ -725,10 +722,16 @@ static bool saveQM(const Translator &translator, QIODevice &dev, ConversionData
             } else {
                 ++finished;
             }
+            QStringList tlns = msg.translations();
+            if (msg.type() == TranslatorMessage::Unfinished
+                && (cd.m_idBased || !cd.m_unTrPrefix.isEmpty()))
+                for (int j = 0; j < tlns.size(); ++j)
+                    if (tlns.at(j).isEmpty())
+                        tlns[j] = cd.m_unTrPrefix + msg.sourceText();
             if (cd.m_idBased) {
                 if (!msg.context().isEmpty() || !msg.comment().isEmpty())
                     ++droppedData;
-                releaser.insertIdBased(msg);
+                releaser.insertIdBased(msg, tlns);
             } else {
                 // Drop the comment in (context, sourceText, comment),
                 // unless the context is empty,
@@ -739,7 +742,7 @@ static bool saveQM(const Translator &translator, QIODevice &dev, ConversionData
                         msg.comment().isEmpty()
                         || msg.context().isEmpty()
                         || translator.contains(msg.context(), msg.sourceText(), QString());
-                releaser.insert(msg, forceComment);
+                releaser.insert(msg, tlns, forceComment);
             }
         }
     }
diff --git a/tools/linguist/shared/translator.h b/tools/linguist/shared/translator.h
index 1dd6a59..ef81d2a 100644
--- a/tools/linguist/shared/translator.h
+++ b/tools/linguist/shared/translator.h
@@ -86,6 +86,7 @@ public:
     QString m_defaultContext;
     QByteArray m_codecForSource; // CPP, PO & QM specific
     QByteArray m_outputCodec; // PO specific
+    QString m_unTrPrefix; // QM specific
     QString m_sourceFileName;
     QString m_targetFileName;
     QDir m_sourceDir;
-- 
cgit v0.12


From a314ed575a6d32ef2f31e9b5fd12b14f13208d4f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Sami=20Meril=C3=A4?= <sami.merila@nokia.com>
Date: Wed, 4 Nov 2009 18:26:01 +0200
Subject: Make button margins bigger in QS60Style

Currenly QS60Style relies on QCommonStyle to calculate correct button
content size. Unfortunately, common style does not understand frames,
so it is possible that the frame-border of theme graphic gets under
button content. This change makes both QPushButton and QToolButton
bigger.

Task-number: None
Reviewed-by: Alessandro Portale
---
 src/gui/styles/qs60style.cpp | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/src/gui/styles/qs60style.cpp b/src/gui/styles/qs60style.cpp
index 350a8e6..6c56813 100644
--- a/src/gui/styles/qs60style.cpp
+++ b/src/gui/styles/qs60style.cpp
@@ -2292,8 +2292,15 @@ QSize QS60Style::sizeFromContents(ContentsType ct, const QStyleOption *opt,
 {
     QSize sz(csz);
     switch (ct) {
+        case CT_ToolButton:
+            sz = QCommonStyle::sizeFromContents( ct, opt, csz, widget);
+            //FIXME properly - style should calculate the location of border frame-part
+            sz += QSize(2*pixelMetric(PM_ButtonMargin), 2*pixelMetric(PM_ButtonMargin));
+            break;
         case CT_PushButton:
             sz = QCommonStyle::sizeFromContents( ct, opt, csz, widget);
+            //FIXME properly - style should calculate the location of border frame-part
+            sz += QSize(2*pixelMetric(PM_ButtonMargin), 2*pixelMetric(PM_ButtonMargin));
             if (const QAbstractButton *buttonWidget = (qobject_cast<const QAbstractButton *>(widget)))
                 if (buttonWidget->isCheckable())
                     sz += QSize(pixelMetric(PM_IndicatorWidth) + pixelMetric(PM_CheckBoxLabelSpacing), 0);
-- 
cgit v0.12


From 77c281714d9dea1f3bbc47380d5884bff31402c7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Sami=20Meril=C3=A4?= <sami.merila@nokia.com>
Date: Wed, 4 Nov 2009 18:36:52 +0200
Subject: QS60Style: QToolButton indicator will not fit into toolbutton area

QToolButton rect does not include reserved area for menu indicator,
so drawing the indicator makes the rest of the toolbutton area smaller.
Fixed by including the menu indicator area into tool button.

Task-number: QTBUG-5266
Reviewed-by: Alessandro Portale
---
 src/gui/styles/qs60style.cpp | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

diff --git a/src/gui/styles/qs60style.cpp b/src/gui/styles/qs60style.cpp
index 6c56813..c0a1f76 100644
--- a/src/gui/styles/qs60style.cpp
+++ b/src/gui/styles/qs60style.cpp
@@ -2296,6 +2296,9 @@ QSize QS60Style::sizeFromContents(ContentsType ct, const QStyleOption *opt,
             sz = QCommonStyle::sizeFromContents( ct, opt, csz, widget);
             //FIXME properly - style should calculate the location of border frame-part
             sz += QSize(2*pixelMetric(PM_ButtonMargin), 2*pixelMetric(PM_ButtonMargin));
+            if (const QStyleOptionToolButton *toolBtn = qstyleoption_cast<const QStyleOptionToolButton *>(opt))
+                if (toolBtn->subControls & SC_ToolButtonMenu)
+                    sz += QSize(pixelMetric(PM_MenuButtonIndicator),0);
             break;
         case CT_PushButton:
             sz = QCommonStyle::sizeFromContents( ct, opt, csz, widget);
@@ -2579,8 +2582,8 @@ QRect QS60Style::subControlRect(ComplexControl control, const QStyleOptionComple
         break;
     case CC_ToolButton:
         if (const QStyleOptionToolButton *toolButton = qstyleoption_cast<const QStyleOptionToolButton *>(option)) {
-            const int indicatorRect = pixelMetric(PM_MenuButtonIndicator, toolButton, widget) +
-                                      2*pixelMetric(PM_ButtonMargin, toolButton, widget);
+            const int indicatorRect = pixelMetric(PM_MenuButtonIndicator) + 2*pixelMetric(PM_ButtonMargin);
+            const int border = pixelMetric(PM_ButtonMargin) + pixelMetric(PM_DefaultFrameWidth);
             ret = toolButton->rect;
             const bool popup = (toolButton->features & 
                     (QStyleOptionToolButton::MenuButtonPopup | QStyleOptionToolButton::PopupDelay))
@@ -2592,7 +2595,7 @@ QRect QS60Style::subControlRect(ComplexControl control, const QStyleOptionComple
                 break;
             case SC_ToolButtonMenu:
                 if (popup)
-                    ret.adjust(ret.width() - indicatorRect, ret.height() - indicatorRect, 0, 0);
+                    ret.adjust(ret.width() - indicatorRect, border, -pixelMetric(PM_ButtonMargin), -border);
                 break;
             default:
                 break;
@@ -2614,8 +2617,8 @@ QRect QS60Style::subElementRect(SubElement element, const QStyleOption *opt, con
     QRect ret;
     switch (element) {
         case SE_LineEditContents: {
-            // in S60 the input text box doesn't start from line Edit's TL, but
-            // a bit indented.
+                // in S60 the input text box doesn't start from line Edit's TL, but
+                // a bit indented.
                 QRect lineEditRect = opt->rect;
                 const int adjustment = opt->rect.height()>>2;
                 lineEditRect.adjust(adjustment,0,0,0);
-- 
cgit v0.12


From e3500ec7fb8c17c33345142a22eeef8e467564cd Mon Sep 17 00:00:00 2001
From: Gareth Stockwell <ext-gareth.stockwell@nokia.com>
Date: Wed, 4 Nov 2009 18:29:50 +0000
Subject: Fix for link error when building QtSvg

Building QtSvg for Symbian (ARMV5 build) fails due to the following linker
error:
QGraphicsEffectSourcePrivate::invalidateCache(bool) const
(referred from qsvgwidget.o).  This function is called from the
inline destructor of QGraphicsEffectSourcePrivate.  Making this
destructor non-inline fixes the problem.

It is not clear why QtSvg is instantiating this destructor, however, as
neither QGraphicsEffectSourcePrivate nor any of its derived classes are
referred to from QtSvg source.

This problem seems to have been triggered by 85e41590.

Reviewed-by: Shane Kearns
---
 src/gui/effects/qgraphicseffect.cpp | 5 +++++
 src/gui/effects/qgraphicseffect_p.h | 2 +-
 2 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/src/gui/effects/qgraphicseffect.cpp b/src/gui/effects/qgraphicseffect.cpp
index 83f4f79..b170254 100644
--- a/src/gui/effects/qgraphicseffect.cpp
+++ b/src/gui/effects/qgraphicseffect.cpp
@@ -303,6 +303,11 @@ QPixmap QGraphicsEffectSource::pixmap(Qt::CoordinateSystem system, QPoint *offse
     return pm;
 }
 
+QGraphicsEffectSourcePrivate::~QGraphicsEffectSourcePrivate()
+{
+    invalidateCache();
+}
+
 void QGraphicsEffectSourcePrivate::invalidateCache(bool effectRectChanged) const
 {
     if (effectRectChanged && m_cachedMode != QGraphicsEffectSource::ExpandToEffectRectPadMode)
diff --git a/src/gui/effects/qgraphicseffect_p.h b/src/gui/effects/qgraphicseffect_p.h
index 0ff5794..370efdd 100644
--- a/src/gui/effects/qgraphicseffect_p.h
+++ b/src/gui/effects/qgraphicseffect_p.h
@@ -72,7 +72,7 @@ public:
         , m_cachedMode(QGraphicsEffectSource::ExpandToTransparentBorderPadMode)
     {}
 
-    virtual ~QGraphicsEffectSourcePrivate() { invalidateCache(); }
+    virtual ~QGraphicsEffectSourcePrivate();
     virtual void detach() = 0;
     virtual QRectF boundingRect(Qt::CoordinateSystem system) const = 0;
     virtual QRect deviceRect() const = 0;
-- 
cgit v0.12


From eda773316824cbb1aa7bdba402e568340b79b4f3 Mon Sep 17 00:00:00 2001
From: Gareth Stockwell <ext-gareth.stockwell@nokia.com>
Date: Wed, 4 Nov 2009 18:42:33 +0000
Subject: tst_qwidget widgetAt now does not leave widget lowered if test fails

Task-number: QTBUG-5396
Reviewed-by: axis
---
 tests/auto/qwidget/tst_qwidget.cpp | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/tests/auto/qwidget/tst_qwidget.cpp b/tests/auto/qwidget/tst_qwidget.cpp
index 3d801cc..e027dd1 100644
--- a/tests/auto/qwidget/tst_qwidget.cpp
+++ b/tests/auto/qwidget/tst_qwidget.cpp
@@ -3328,9 +3328,10 @@ void tst_QWidget::widgetAt()
     w2->lower();
     qApp->processEvents();
     QTRY_VERIFY((wr = QApplication::widgetAt(100, 100)));
-    QCOMPARE(wr->objectName(), QString("w1"));
-
+    const bool match = (wr->objectName() == QString("w1"));
     w2->raise();
+    QVERIFY(match);
+
     qApp->processEvents();
     QTRY_VERIFY((wr = QApplication::widgetAt(100, 100)));
     QCOMPARE(wr->objectName(), QString("w2"));
-- 
cgit v0.12


From 7940327801724560b9193fef1b5d849412fbd6f3 Mon Sep 17 00:00:00 2001
From: Artur Duque de Souza <artur.souza@openbossa.org>
Date: Wed, 4 Nov 2009 12:56:16 -0300
Subject: Add min/pref/max size properties to QGraphicsWidget

QGraphicsLayouts and specially QGraphicsAnchorLayout makes large
use of min/pref/max sizes. Making it properties allow QtScript
bindings to take advantage of this and eases the use of Anchor
Layout on this cases.

The first use case for this patch was the use that Plasma makes
of it on it's javascript engine.

Signed-off-by: Artur Duque de Souza <artur.souza@openbossa.org>
---
 src/gui/graphicsview/qgraphicswidget.h | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/src/gui/graphicsview/qgraphicswidget.h b/src/gui/graphicsview/qgraphicswidget.h
index 9c71140..38f72f0 100644
--- a/src/gui/graphicsview/qgraphicswidget.h
+++ b/src/gui/graphicsview/qgraphicswidget.h
@@ -74,6 +74,9 @@ class Q_GUI_EXPORT QGraphicsWidget : public QGraphicsObject, public QGraphicsLay
     Q_PROPERTY(QFont font READ font WRITE setFont)
     Q_PROPERTY(Qt::LayoutDirection layoutDirection READ layoutDirection WRITE setLayoutDirection RESET unsetLayoutDirection)
     Q_PROPERTY(QSizeF size READ size WRITE resize)
+    Q_PROPERTY(QSizeF minimumSize READ minimumSize WRITE setMinimumSize)
+    Q_PROPERTY(QSizeF preferredSize READ preferredSize WRITE setPreferredSize)
+    Q_PROPERTY(QSizeF maximumSize READ maximumSize WRITE setMaximumSize)
     Q_PROPERTY(Qt::FocusPolicy focusPolicy READ focusPolicy WRITE setFocusPolicy)
     Q_PROPERTY(Qt::WindowFlags windowFlags READ windowFlags WRITE setWindowFlags)
     Q_PROPERTY(QString windowTitle READ windowTitle WRITE setWindowTitle)
-- 
cgit v0.12


From ff5becbd4dafbabb79c086dc0cc18111d9e82a15 Mon Sep 17 00:00:00 2001
From: Caio Marcelo de Oliveira Filho <caio.oliveira@openbossa.org>
Date: Tue, 27 Oct 2009 16:04:10 -0300
Subject: QGAL: keep references to layout vertices

We used to keep a reference just to the first vertex of the layout
(corresponding to the left/top anchor point) inside the Graph class,
as "root vertex". Since the notion of rootVertex isn't used by the
Graph itself, now this is stored outside the graph, and we also store
the central and last vertices.

This avoids using internalVertex() function to find out the vertices
based on the item (in the case, the 'q'). This will be useful when we
do simplify vertices, since the original layout vertice might not be
the "layout vertice" in the graph.

Signed-off-by: Caio Marcelo de Oliveira Filho <caio.oliveira@openbossa.org>
Reviewed-by: Eduardo M. Fleury <eduardo.fleury@openbossa.org>
---
 src/gui/graphicsview/qgraph_p.h                  | 12 -----
 src/gui/graphicsview/qgraphicsanchorlayout_p.cpp | 61 ++++++++++++++----------
 src/gui/graphicsview/qgraphicsanchorlayout_p.h   |  4 ++
 3 files changed, 39 insertions(+), 38 deletions(-)

diff --git a/src/gui/graphicsview/qgraph_p.h b/src/gui/graphicsview/qgraph_p.h
index f1fa185..b5b3c88 100644
--- a/src/gui/graphicsview/qgraph_p.h
+++ b/src/gui/graphicsview/qgraph_p.h
@@ -201,11 +201,6 @@ public:
         return l;
     }
 
-    void setRootVertex(Vertex *vertex)
-    {
-        userVertex = vertex;
-    }
-
     QSet<Vertex*> vertices() const {
         QSet<Vertex *> setOfVertices;
         for (const_iterator it = constBegin(); it != constEnd(); ++it) {
@@ -256,11 +251,6 @@ public:
     }
 #endif
 
-    Vertex *rootVertex() const
-    {
-        return userVertex;
-    }
-
 protected:
     void createDirectedEdge(Vertex *from, Vertex *to, EdgeData *data)
     {
@@ -286,8 +276,6 @@ protected:
     }
 
 private:
-    Vertex *userVertex;
-
     QHash<Vertex *, QHash<Vertex *, EdgeData *> *> m_graph;
 };
 
diff --git a/src/gui/graphicsview/qgraphicsanchorlayout_p.cpp b/src/gui/graphicsview/qgraphicsanchorlayout_p.cpp
index 41aa8aa..6bffd09 100644
--- a/src/gui/graphicsview/qgraphicsanchorlayout_p.cpp
+++ b/src/gui/graphicsview/qgraphicsanchorlayout_p.cpp
@@ -484,6 +484,10 @@ QGraphicsAnchorLayoutPrivate::QGraphicsAnchorLayoutPrivate()
         spacings[i] = -1;
         graphSimplified[i] = false;
         graphHasConflicts[i] = false;
+
+        layoutFirstVertex[i] = 0;
+        layoutCentralVertex[i] = 0;
+        layoutLastVertex[i] = 0;
     }
 }
 
@@ -663,7 +667,7 @@ bool QGraphicsAnchorLayoutPrivate::simplifyGraph(Orientation orientation)
            orientation == Horizontal ? "Horizontal" : "Vertical");
 #endif
 
-    if (!graph[orientation].rootVertex())
+    if (!layoutFirstVertex[orientation])
         return true;
 
     bool dirty;
@@ -700,7 +704,7 @@ bool QGraphicsAnchorLayoutPrivate::simplifyGraphIteration(QGraphicsAnchorLayoutP
 
     QSet<AnchorVertex *> visited;
     QStack<QPair<AnchorVertex *, AnchorVertex *> > stack;
-    stack.push(qMakePair(static_cast<AnchorVertex *>(0), g.rootVertex()));
+    stack.push(qMakePair(static_cast<AnchorVertex *>(0), layoutFirstVertex[orientation]));
     QVector<AnchorVertex*> candidates;
     bool candidatesForward;
 
@@ -959,9 +963,10 @@ void QGraphicsAnchorLayoutPrivate::createLayoutEdges()
     data->maxSize = QWIDGETSIZE_MAX;
     data->skipInPreferred = 1;
 
-    // Set the Layout Left edge as the root of the horizontal graph.
-    AnchorVertex *v = internalVertex(layout, Qt::AnchorLeft);
-    graph[Horizontal].setRootVertex(v);
+    // Save a reference to layout vertices
+    layoutFirstVertex[Horizontal] = internalVertex(layout, Qt::AnchorLeft);
+    layoutCentralVertex[Horizontal] = 0;
+    layoutLastVertex[Horizontal] = internalVertex(layout, Qt::AnchorRight);
 
     // Vertical
     data = new AnchorData;
@@ -970,9 +975,10 @@ void QGraphicsAnchorLayoutPrivate::createLayoutEdges()
     data->maxSize = QWIDGETSIZE_MAX;
     data->skipInPreferred = 1;
 
-    // Set the Layout Top edge as the root of the vertical graph.
-    v = internalVertex(layout, Qt::AnchorTop);
-    graph[Vertical].setRootVertex(v);
+    // Save a reference to layout vertices
+    layoutFirstVertex[Vertical] = internalVertex(layout, Qt::AnchorTop);
+    layoutCentralVertex[Vertical] = 0;
+    layoutLastVertex[Vertical] = internalVertex(layout, Qt::AnchorBottom);
 }
 
 void QGraphicsAnchorLayoutPrivate::deleteLayoutEdges()
@@ -1019,6 +1025,8 @@ void QGraphicsAnchorLayoutPrivate::createItemEdges(QGraphicsLayoutItem *item)
 void QGraphicsAnchorLayoutPrivate::createCenterAnchors(
     QGraphicsLayoutItem *item, Qt::AnchorPoint centerEdge)
 {
+    Q_Q(QGraphicsAnchorLayout);
+
     Orientation orientation;
     switch (centerEdge) {
     case Qt::AnchorHorizontalCenter:
@@ -1073,12 +1081,19 @@ void QGraphicsAnchorLayoutPrivate::createCenterAnchors(
 
     // Remove old one
     removeAnchor_helper(first, last);
+
+    if (item == q) {
+        layoutCentralVertex[orientation] = internalVertex(q, centerEdge);
+    }
+
 }
 
 void QGraphicsAnchorLayoutPrivate::removeCenterAnchors(
     QGraphicsLayoutItem *item, Qt::AnchorPoint centerEdge,
     bool substitute)
 {
+    Q_Q(QGraphicsAnchorLayout);
+
     Orientation orientation;
     switch (centerEdge) {
     case Qt::AnchorHorizontalCenter:
@@ -1151,6 +1166,10 @@ void QGraphicsAnchorLayoutPrivate::removeCenterAnchors(
         // by this time, the center vertex is deleted and merged into a non-centered internal anchor
         removeAnchor_helper(first, internalVertex(item, lastEdge));
     }
+
+    if (item == q) {
+        layoutCentralVertex[orientation] = 0;
+    }
 }
 
 
@@ -1773,7 +1792,7 @@ void QGraphicsAnchorLayoutPrivate::calculateGraphs(
 
     // For minimum and maximum, use the path between the two layout sides as the
     // objective function.
-    AnchorVertex *v = internalVertex(q, pickEdge(Qt::AnchorRight, orientation));
+    AnchorVertex *v = layoutLastVertex[orientation];
     GraphPath trunkPath = graphPaths[orientation].value(v);
 
     bool feasible = calculateTrunk(orientation, trunkPath, trunkConstraints, trunkVariables);
@@ -1955,7 +1974,7 @@ void QGraphicsAnchorLayoutPrivate::findPaths(Orientation orientation)
 
     QSet<AnchorData *> visited;
 
-    AnchorVertex *root = graph[orientation].rootVertex();
+    AnchorVertex *root = layoutFirstVertex[orientation];
 
     graphPaths[orientation].insert(root, GraphPath());
 
@@ -2077,28 +2096,18 @@ QGraphicsAnchorLayoutPrivate::getGraphParts(Orientation orientation)
 {
     Q_Q(QGraphicsAnchorLayout);
 
-    // Find layout vertices and edges for the current orientation.
-    AnchorVertex *layoutFirstVertex = \
-        internalVertex(q, pickEdge(Qt::AnchorLeft, orientation));
-
-    AnchorVertex *layoutCentralVertex = \
-        internalVertex(q, pickEdge(Qt::AnchorHorizontalCenter, orientation));
-
-    AnchorVertex *layoutLastVertex = \
-        internalVertex(q, pickEdge(Qt::AnchorRight, orientation));
-
-    Q_ASSERT(layoutFirstVertex && layoutLastVertex);
+    Q_ASSERT(layoutFirstVertex[orientation] && layoutLastVertex[orientation]);
 
     AnchorData *edgeL1 = NULL;
     AnchorData *edgeL2 = NULL;
 
     // The layout may have a single anchor between Left and Right or two half anchors
     // passing through the center
-    if (layoutCentralVertex) {
-        edgeL1 = graph[orientation].edgeData(layoutFirstVertex, layoutCentralVertex);
-        edgeL2 = graph[orientation].edgeData(layoutCentralVertex, layoutLastVertex);
+    if (layoutCentralVertex[orientation]) {
+        edgeL1 = graph[orientation].edgeData(layoutFirstVertex[orientation], layoutCentralVertex[orientation]);
+        edgeL2 = graph[orientation].edgeData(layoutCentralVertex[orientation], layoutLastVertex[orientation]);
     } else {
-        edgeL1 = graph[orientation].edgeData(layoutFirstVertex, layoutLastVertex);
+        edgeL1 = graph[orientation].edgeData(layoutFirstVertex[orientation], layoutLastVertex[orientation]);
     }
 
     QLinkedList<QSimplexConstraint *> remainingConstraints;
@@ -2288,7 +2297,7 @@ void QGraphicsAnchorLayoutPrivate::calculateVertexPositions(
     QSet<AnchorVertex *> visited;
 
     // Get root vertex
-    AnchorVertex *root = graph[orientation].rootVertex();
+    AnchorVertex *root = layoutFirstVertex[orientation];
 
     root->distance = 0;
     visited.insert(root);
diff --git a/src/gui/graphicsview/qgraphicsanchorlayout_p.h b/src/gui/graphicsview/qgraphicsanchorlayout_p.h
index 7dd0d65..7d7bdb6 100644
--- a/src/gui/graphicsview/qgraphicsanchorlayout_p.h
+++ b/src/gui/graphicsview/qgraphicsanchorlayout_p.h
@@ -504,6 +504,10 @@ public:
     // Internal graph of anchorage points and anchors, for both orientations
     Graph<AnchorVertex, AnchorData> graph[2];
 
+    AnchorVertex *layoutFirstVertex[2];
+    AnchorVertex *layoutCentralVertex[2];
+    AnchorVertex *layoutLastVertex[2];
+
     // Graph paths and constraints, for both orientations
     QMultiHash<AnchorVertex *, GraphPath> graphPaths[2];
     QList<QSimplexConstraint *> constraints[2];
-- 
cgit v0.12


From d00f3afdd547b3206016b6d97f669b04f48a27d7 Mon Sep 17 00:00:00 2001
From: Caio Marcelo de Oliveira Filho <caio.oliveira@openbossa.org>
Date: Wed, 4 Nov 2009 14:41:58 -0300
Subject: QGAL: escape vertices names in the serialized graph output

Signed-off-by: Caio Marcelo de Oliveira Filho <caio.oliveira@openbossa.org>
Reviewed-by: Eduardo M. Fleury <eduardo.fleury@openbossa.org>
---
 src/gui/graphicsview/qgraph_p.h | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/gui/graphicsview/qgraph_p.h b/src/gui/graphicsview/qgraph_p.h
index b5b3c88..0a2bf27 100644
--- a/src/gui/graphicsview/qgraph_p.h
+++ b/src/gui/graphicsview/qgraph_p.h
@@ -236,7 +236,7 @@ public:
                 EdgeData *data = edgeData(v, v1);
                 bool forward = data->from == v;
                 if (forward) {
-                    edges += QString::fromAscii("%1->%2 [label=\"[%3,%4,%5]\" dir=both color=\"#000000:#a0a0a0\"] \n")
+                    edges += QString::fromAscii("\"%1\"->\"%2\" [label=\"[%3,%4,%5]\" dir=both color=\"#000000:#a0a0a0\"] \n")
                         .arg(v->toString())
                         .arg(v1->toString())
                         .arg(data->minSize)
@@ -245,7 +245,7 @@ public:
                         ;
                 }
             }
-            strVertices += QString::fromAscii("%1 [label=\"%2\"]\n").arg(v->toString()).arg(v->toString());
+            strVertices += QString::fromAscii("\"%1\" [label=\"%2\"]\n").arg(v->toString()).arg(v->toString());
         }
         return QString::fromAscii("%1\n%2\n").arg(strVertices).arg(edges);
     }
-- 
cgit v0.12


From 5c1c3e0366ce6992a514148815ef25b3f1f6f66b Mon Sep 17 00:00:00 2001
From: Caio Marcelo de Oliveira Filho <caio.oliveira@openbossa.org>
Date: Wed, 4 Nov 2009 14:45:32 -0300
Subject: QGAL: add names to the items in some tests

Those are useful when dumping the graph in dot format for debugging.

Signed-off-by: Caio Marcelo de Oliveira Filho <caio.oliveira@openbossa.org>
Reviewed-by: Eduardo M. Fleury <eduardo.fleury@openbossa.org>
---
 tests/auto/qgraphicsanchorlayout/tst_qgraphicsanchorlayout.cpp   | 8 ++++----
 tests/auto/qgraphicsanchorlayout1/tst_qgraphicsanchorlayout1.cpp | 8 ++++++--
 2 files changed, 10 insertions(+), 6 deletions(-)

diff --git a/tests/auto/qgraphicsanchorlayout/tst_qgraphicsanchorlayout.cpp b/tests/auto/qgraphicsanchorlayout/tst_qgraphicsanchorlayout.cpp
index c8a9fac..09e2ee2 100644
--- a/tests/auto/qgraphicsanchorlayout/tst_qgraphicsanchorlayout.cpp
+++ b/tests/auto/qgraphicsanchorlayout/tst_qgraphicsanchorlayout.cpp
@@ -1951,7 +1951,7 @@ void tst_QGraphicsAnchorLayout::simplifiableUnfeasible()
     if (hasSimplification)
         QVERIFY(!usedSimplex(l, Qt::Horizontal));
 
-    // Now we make it valid again
+    // Now we make it valid
     b->setMinimumWidth(100);
 
     l->invalidate();
@@ -1979,9 +1979,9 @@ void tst_QGraphicsAnchorLayout::simplificationVsOrder()
     QSizeF pref(20, 10);
     QSizeF max(50, 10);
 
-    QGraphicsWidget *a = createItem(min, pref, max);
-    QGraphicsWidget *b = createItem(min, pref, max);
-    QGraphicsWidget *c = createItem(min, pref, max);
+    QGraphicsWidget *a = createItem(min, pref, max, "A");
+    QGraphicsWidget *b = createItem(min, pref, max, "B");
+    QGraphicsWidget *c = createItem(min, pref, max, "C");
 
     QGraphicsAnchorLayout *l = new QGraphicsAnchorLayout;
 
diff --git a/tests/auto/qgraphicsanchorlayout1/tst_qgraphicsanchorlayout1.cpp b/tests/auto/qgraphicsanchorlayout1/tst_qgraphicsanchorlayout1.cpp
index 1c7a159..2d6b44b 100644
--- a/tests/auto/qgraphicsanchorlayout1/tst_qgraphicsanchorlayout1.cpp
+++ b/tests/auto/qgraphicsanchorlayout1/tst_qgraphicsanchorlayout1.cpp
@@ -162,10 +162,14 @@ Q_DECLARE_METATYPE(AnchorItemSizeHintList)
 class TestWidget : public QGraphicsWidget
 {
 public:
-    inline TestWidget(QGraphicsItem *parent = 0)
+    inline TestWidget(QGraphicsItem *parent = 0, const QString &name = QString())
         : QGraphicsWidget(parent)
         {
             setContentsMargins( 0,0,0,0 );
+            if (name.isEmpty())
+                setData(0, QString::fromAscii("w%1").arg(int(this)));
+            else
+                setData(0, name);
         }
     ~TestWidget()
         {
@@ -1684,7 +1688,7 @@ void tst_QGraphicsAnchorLayout1::testBasicLayout()
     // Create dummy widgets
     QList<QGraphicsWidget *> widgets;
     for (int i = 0; i < widgetCount; ++i) {
-        TestWidget *w = new TestWidget;
+        TestWidget *w = new TestWidget(0, QString::fromAscii("W%1").arg(i));
         widgets << w;
     }
 
-- 
cgit v0.12


From 41369cd2946956b9a455e4f2014dcc38ffcbad52 Mon Sep 17 00:00:00 2001
From: Caio Marcelo de Oliveira Filho <caio.oliveira@openbossa.org>
Date: Wed, 4 Nov 2009 14:54:49 -0300
Subject: QGAL: extend helper function to always return parallel anchor created

Our helper function addAnchorMaybeParallel() returned 0 to indicate an
unfeasible setup, so we ended up without the pointer to the new parallel
anchor (which was created regardless the feasibility).

While we don't make use of this information right now, vertex
simplification will need to store those new parallel anchors even when
they are not feasible.

Signed-off-by: Caio Marcelo de Oliveira Filho <caio.oliveira@openbossa.org>
Reviewed-by: Eduardo M. Fleury <eduardo.fleury@openbossa.org>
---
 src/gui/graphicsview/qgraphicsanchorlayout_p.cpp | 25 ++++++++++++++++--------
 1 file changed, 17 insertions(+), 8 deletions(-)

diff --git a/src/gui/graphicsview/qgraphicsanchorlayout_p.cpp b/src/gui/graphicsview/qgraphicsanchorlayout_p.cpp
index 6bffd09..f0aeea4 100644
--- a/src/gui/graphicsview/qgraphicsanchorlayout_p.cpp
+++ b/src/gui/graphicsview/qgraphicsanchorlayout_p.cpp
@@ -533,13 +533,14 @@ inline static qreal checkAdd(qreal a, qreal b)
     Adds \a newAnchor to the graph \a g.
 
     Returns the newAnchor itself if it could be added without further changes to the graph. If a
-    new parallel anchor had to be created, then returns the new parallel anchor. In case the
-    addition is unfeasible -- because a parallel setup is not possible, returns 0.
+    new parallel anchor had to be created, then returns the new parallel anchor. If a parallel anchor
+    had to be created and it results in an unfeasible setup, \a feasible is set to false, otherwise
+    true.
 */
 static AnchorData *addAnchorMaybeParallel(Graph<AnchorVertex, AnchorData> *g,
-                                          AnchorData *newAnchor)
+                                          AnchorData *newAnchor, bool *feasible)
 {
-    bool feasible = true;
+    *feasible = true;
 
     // If already exists one anchor where newAnchor is supposed to be, we create a parallel
     // anchor.
@@ -548,12 +549,12 @@ static AnchorData *addAnchorMaybeParallel(Graph<AnchorVertex, AnchorData> *g,
 
         // At this point we can identify that the parallel anchor is not feasible, e.g. one
         // anchor minimum size is bigger than the other anchor maximum size.
-        feasible = parallel->refreshSizeHints_helper(0, false);
+        *feasible = parallel->refreshSizeHints_helper(0, false);
         newAnchor = parallel;
     }
 
     g->createEdge(newAnchor->from, newAnchor->to, newAnchor);
-    return feasible ? newAnchor : 0;
+    return newAnchor;
 }
 
 
@@ -839,13 +840,21 @@ bool QGraphicsAnchorLayoutPrivate::simplifyGraphIteration(QGraphicsAnchorLayoutP
         // Add the sequence to the graph.
         //
 
+        // ### At this point we assume that if some parallel anchor will be created because
+        // of the new sequence, the other anchor will not be a center anchor (since we
+        // not deal with that case yet). This assumption will break once we start simplifying
+        // vertices.
+        AnchorData *possibleParallel = g.edgeData(beforeSequence, afterSequence);
+        Q_ASSERT(!possibleParallel || !possibleParallel->isCenterAnchor);
+
         AnchorData *sequence = createSequence(&g, beforeSequence, candidates, afterSequence);
 
         // If 'beforeSequence' and 'afterSequence' already had an anchor between them, we'll
         // create a parallel anchor between the new sequence and the old anchor.
-        AnchorData *newAnchor = addAnchorMaybeParallel(&g, sequence);
+        bool newFeasible;
+        AnchorData *newAnchor = addAnchorMaybeParallel(&g, sequence, &newFeasible);
 
-        if (!newAnchor) {
+        if (!newFeasible) {
             *feasible = false;
             return false;
         }
-- 
cgit v0.12


From 33faaf6fa1775dc74bb61acde8a48eae2b9f2635 Mon Sep 17 00:00:00 2001
From: "Eduardo M. Fleury" <eduardo.fleury@openbossa.org>
Date: Mon, 19 Oct 2009 16:36:53 -0300
Subject: QGAL: Do not restrict maximum size of layout anchors

This commit improves the way QGAL handles setups where most anchors
or items do not have explicit maximum sizes.

By default the internal layout anchors and others, have maximum size
of QWIDGETSIZE_MAX. It happens though that this value is rather arbitrary
but yet, can restrict the size of other paths in the layout.

For instance, in the setup below, where the maximum sizes of A and B is
not set:
         ________     ________
    |   | item A |   | item B |   |
    o---o--------o---o--------o---o
    |   |________|   |________|   |
    |                             |
    |  (layout structural anchor) |
    o-----------------------------o
    |                             |

the bottom path, of maximum size QWIDGETSIZE_MAX, restricts the lenght
of the path at the top, of maximum size of 2 x QWIDGETSIZE_MAX.

This introduces the need of fair distribution in the path A-B. While
that's not an issue when the path is simplified to a single anchor,
it may lead to unbalanced distributions if such simplification is
not possible. As this case may arise when we have center anchors
in the top path, it may appear in real-world cases.

To work around that, we do not limit the maximum width of the layout
anchor or parallel anchors that may have taken its place. The practical
result in the example above is that the sizeAtMaximum will be set at
2 x QWIDGETSIZE_MAX, with a good distribution of A and B.

On the other hand, this oversized layout is not a problem because the
effectiveSizeHint code enforces the respect of QWIDGETSIZE_MAX. That
means the layout will interpolate only between zero and QWIDGETSIZE_MAX
even though its internal maximum size is twice that value.

Signed-off-by: Eduardo M. Fleury <eduardo.fleury@openbossa.org>
Reviewed-by: Caio Marcelo de Oliveira Filho <caio.oliveira@openbossa.org>
---
 src/gui/graphicsview/qgraphicsanchorlayout_p.cpp   | 56 ++++++++++++++++++----
 .../tst_qgraphicsanchorlayout.cpp                  |  6 +--
 2 files changed, 50 insertions(+), 12 deletions(-)

diff --git a/src/gui/graphicsview/qgraphicsanchorlayout_p.cpp b/src/gui/graphicsview/qgraphicsanchorlayout_p.cpp
index f0aeea4..dbfce74 100644
--- a/src/gui/graphicsview/qgraphicsanchorlayout_p.cpp
+++ b/src/gui/graphicsview/qgraphicsanchorlayout_p.cpp
@@ -342,13 +342,15 @@ void SequentialAnchorData::updateChildrenSizes()
     // ### check whether we are guarantee to get those or we need to warn stuff at this
     // point.
     Q_ASSERT(sizeAtMinimum > minSize || qFuzzyCompare(sizeAtMinimum, minSize));
-    Q_ASSERT(sizeAtMinimum < maxSize || qFuzzyCompare(sizeAtMinimum, maxSize));
     Q_ASSERT(sizeAtPreferred > minSize || qFuzzyCompare(sizeAtPreferred, minSize));
-    Q_ASSERT(sizeAtPreferred < maxSize || qFuzzyCompare(sizeAtPreferred, maxSize));
     Q_ASSERT(sizeAtExpanding > minSize || qFuzzyCompare(sizeAtExpanding, minSize));
-    Q_ASSERT(sizeAtExpanding < maxSize || qFuzzyCompare(sizeAtExpanding, maxSize));
     Q_ASSERT(sizeAtMaximum > minSize || qFuzzyCompare(sizeAtMaximum, minSize));
-    Q_ASSERT(sizeAtMaximum < maxSize || qFuzzyCompare(sizeAtMaximum, maxSize));
+
+    // These may be false if this anchor was in parallel with the layout stucture
+    // Q_ASSERT(sizeAtMinimum < maxSize || qFuzzyCompare(sizeAtMinimum, maxSize));
+    // Q_ASSERT(sizeAtPreferred < maxSize || qFuzzyCompare(sizeAtPreferred, maxSize));
+    // Q_ASSERT(sizeAtExpanding < maxSize || qFuzzyCompare(sizeAtExpanding, maxSize));
+    // Q_ASSERT(sizeAtMaximum < maxSize || qFuzzyCompare(sizeAtMaximum, maxSize));
 
     // Band here refers if the value is in the Minimum To Preferred
     // band (the lower band) or the Preferred To Maximum (the upper band).
@@ -1752,8 +1754,6 @@ QList<AnchorData *> getVariables(QList<QSimplexConstraint *> constraints)
 void QGraphicsAnchorLayoutPrivate::calculateGraphs(
     QGraphicsAnchorLayoutPrivate::Orientation orientation)
 {
-    Q_Q(QGraphicsAnchorLayout);
-
 #if defined(QT_DEBUG) || defined(Q_AUTOTEST_EXPORT)
     lastCalculationUsedSimplex[orientation] = false;
 #endif
@@ -2069,7 +2069,30 @@ void QGraphicsAnchorLayoutPrivate::updateAnchorSizes(Orientation orientation)
 QList<QSimplexConstraint *> QGraphicsAnchorLayoutPrivate::constraintsFromSizeHints(
     const QList<AnchorData *> &anchors)
 {
+    if (anchors.isEmpty())
+        return QList<QSimplexConstraint *>();
+
+    // Look for the layout edge. That can be either the first half in case the
+    // layout is split in two, or the whole layout anchor.
+    Orientation orient = Orientation(anchors.first()->orientation);
+    AnchorData *layoutEdge1 = NULL;
+    AnchorData *layoutEdge2 = NULL;
+    if (layoutCentralVertex[orient]) {
+        layoutEdge1 = graph[orient].edgeData(layoutFirstVertex[orient], layoutCentralVertex[orient]);
+        layoutEdge2 = graph[orient].edgeData(layoutCentralVertex[orient], layoutLastVertex[orient]);
+    } else {
+        layoutEdge1 = graph[orient].edgeData(layoutFirstVertex[orient], layoutLastVertex[orient]);
+        // If maxSize is less then "infinite", that means there are other anchors
+        // grouped together with this one. We can't ignore its maximum value so we
+        // set back the variable to NULL to prevent the continue condition from being
+        // satisfied in the loop below.
+        if (layoutEdge1->maxSize < QWIDGETSIZE_MAX)
+            layoutEdge1 = NULL;
+    }
+
+    // For each variable, create constraints based on size hints
     QList<QSimplexConstraint *> anchorConstraints;
+    bool unboundedProblem = true;
     for (int i = 0; i < anchors.size(); ++i) {
         AnchorData *ad = anchors[i];
 
@@ -2079,6 +2102,7 @@ QList<QSimplexConstraint *> QGraphicsAnchorLayoutPrivate::constraintsFromSizeHin
             c->constant = ad->minSize;
             c->ratio = QSimplexConstraint::Equal;
             anchorConstraints += c;
+            unboundedProblem = false;
         } else {
             QSimplexConstraint *c = new QSimplexConstraint;
             c->variables.insert(ad, 1.0);
@@ -2086,14 +2110,30 @@ QList<QSimplexConstraint *> QGraphicsAnchorLayoutPrivate::constraintsFromSizeHin
             c->ratio = QSimplexConstraint::MoreOrEqual;
             anchorConstraints += c;
 
+            // We avoid adding restrictions to the layout internal anchors. That's
+            // to prevent unnecessary fair distribution from happening due to this
+            // artificial restriction.
+            if ((ad == layoutEdge1) || (ad == layoutEdge2))
+                continue;
+
             c = new QSimplexConstraint;
             c->variables.insert(ad, 1.0);
             c->constant = ad->maxSize;
             c->ratio = QSimplexConstraint::LessOrEqual;
             anchorConstraints += c;
+            unboundedProblem = false;
         }
     }
 
+    // If no upper boundary restriction was added, add one to avoid unbounded problem
+    if (unboundedProblem) {
+        QSimplexConstraint *c = new QSimplexConstraint;
+        c->variables.insert(layoutEdge1, 1.0);
+        c->constant = QWIDGETSIZE_MAX;
+        c->ratio = QSimplexConstraint::LessOrEqual;
+        anchorConstraints += c;
+    }
+
     return anchorConstraints;
 }
 
@@ -2103,8 +2143,6 @@ QList<QSimplexConstraint *> QGraphicsAnchorLayoutPrivate::constraintsFromSizeHin
 QList< QList<QSimplexConstraint *> >
 QGraphicsAnchorLayoutPrivate::getGraphParts(Orientation orientation)
 {
-    Q_Q(QGraphicsAnchorLayout);
-
     Q_ASSERT(layoutFirstVertex[orientation] && layoutLastVertex[orientation]);
 
     AnchorData *edgeL1 = NULL;
@@ -2501,7 +2539,7 @@ bool QGraphicsAnchorLayoutPrivate::solveMinMax(const QList<QSimplexConstraint *>
         // Save sizeAtMaximum results
         for (int i = 0; i < variables.size(); ++i) {
             AnchorData *ad = static_cast<AnchorData *>(variables[i]);
-            Q_ASSERT(ad->result <= ad->maxSize || qFuzzyCompare(ad->result, ad->maxSize));
+            // Q_ASSERT(ad->result <= ad->maxSize || qFuzzyCompare(ad->result, ad->maxSize));
             ad->sizeAtMaximum = ad->result;
         }
     }
diff --git a/tests/auto/qgraphicsanchorlayout/tst_qgraphicsanchorlayout.cpp b/tests/auto/qgraphicsanchorlayout/tst_qgraphicsanchorlayout.cpp
index 09e2ee2..ce1ffad 100644
--- a/tests/auto/qgraphicsanchorlayout/tst_qgraphicsanchorlayout.cpp
+++ b/tests/auto/qgraphicsanchorlayout/tst_qgraphicsanchorlayout.cpp
@@ -1896,15 +1896,15 @@ void tst_QGraphicsAnchorLayout::infiniteMaxSizes()
     QGraphicsWidget p;
     p.setLayout(l);
 
+    QCOMPARE(int(p.effectiveSizeHint(Qt::MaximumSize).width()),
+             QWIDGETSIZE_MAX);
+
     p.resize(200, 10);
     QCOMPARE(a->geometry(), QRectF(0, 0, 50, 10));
     QCOMPARE(b->geometry(), QRectF(50, 0, 50, 10));
     QCOMPARE(c->geometry(), QRectF(100, 0, 50, 10));
     QCOMPARE(d->geometry(), QRectF(150, 0, 50, 10));
 
-    if (!hasSimplification)
-        QEXPECT_FAIL("", "Without simplification there is no fair distribution.", Abort);
-
     p.resize(1000, 10);
     QCOMPARE(a->geometry(), QRectF(0, 0, 450, 10));
     QCOMPARE(b->geometry(), QRectF(450, 0, 50, 10));
-- 
cgit v0.12


From 56c04b7f546babf5bbe64a6d0175f635cb2fd204 Mon Sep 17 00:00:00 2001
From: "Eduardo M. Fleury" <eduardo.fleury@openbossa.org>
Date: Thu, 29 Oct 2009 16:19:59 -0300
Subject: QGAL: Update infiniteSizes test to avoid simplification

The infiniteSizes test is supposed to work w/o simplification,
to ensure that I'm adding a central anchor. With this anchor
we force the problem to go to the simplex solver and expect
it to solve things fine anyway.

Signed-off-by: Eduardo M. Fleury <eduardo.fleury@openbossa.org>
Reviewed-by: Caio Marcelo de Oliveira Filho <caio.oliveira@openbossa.org>
---
 tests/auto/qgraphicsanchorlayout/tst_qgraphicsanchorlayout.cpp | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/tests/auto/qgraphicsanchorlayout/tst_qgraphicsanchorlayout.cpp b/tests/auto/qgraphicsanchorlayout/tst_qgraphicsanchorlayout.cpp
index ce1ffad..00bfe65 100644
--- a/tests/auto/qgraphicsanchorlayout/tst_qgraphicsanchorlayout.cpp
+++ b/tests/auto/qgraphicsanchorlayout/tst_qgraphicsanchorlayout.cpp
@@ -1882,6 +1882,7 @@ void tst_QGraphicsAnchorLayout::infiniteMaxSizes()
     QGraphicsWidget *b = createItem(min, pref, max, "b");
     QGraphicsWidget *c = createItem(min, pref, max, "c");
     QGraphicsWidget *d = createItem(min, pref, max, "d");
+    QGraphicsWidget *e = createItem(min, pref, max, "e");
 
     //<!-- Trunk -->
     setAnchor(l, l, Qt::AnchorLeft, a, Qt::AnchorLeft, 0);
@@ -1889,6 +1890,8 @@ void tst_QGraphicsAnchorLayout::infiniteMaxSizes()
     setAnchor(l, b, Qt::AnchorRight, c, Qt::AnchorLeft, 0);
     setAnchor(l, c, Qt::AnchorRight, d, Qt::AnchorLeft, 0);
     setAnchor(l, d, Qt::AnchorRight, l, Qt::AnchorRight, 0);
+    setAnchor(l, b, Qt::AnchorHorizontalCenter, e, Qt::AnchorLeft, 0);
+    setAnchor(l, e, Qt::AnchorRight, c, Qt::AnchorHorizontalCenter, 0);
 
     a->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
     c->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
-- 
cgit v0.12


From 52d737eb6f4b79cd0c7fc7ee1d041fb19d286a27 Mon Sep 17 00:00:00 2001
From: "Eduardo M. Fleury" <eduardo.fleury@openbossa.org>
Date: Thu, 29 Oct 2009 17:14:09 -0300
Subject: QGAL: Do not create sizeHint constraints for dependent anchors

Some anchors have their sizes linked directly to the size of
others. That is the case for instance with center anchors where
one half must have exactly the same size as the other.

To make that more clear, adding "dependency" info to AnchorData
and setting it accordingly. This is future proof in the sense
that if someday we are allowed to anchor to other items in terms
of percentages, like, anchor to 70% of an items' width, we would
also need this notion.

Knowing that, we no longer need to create size hint constraints for
the slave anchors, only for the master ones. The size of slave anchors
is enforced by the dependency constraint (sizeSlave = X * sizeMaster).

Signed-off-by: Eduardo M. Fleury <eduardo.fleury@openbossa.org>
Reviewed-by: Caio Marcelo de Oliveira Filho <caio.oliveira@openbossa.org>
---
 src/gui/graphicsview/qgraphicsanchorlayout_p.cpp | 25 +++++++++++++++---------
 src/gui/graphicsview/qgraphicsanchorlayout_p.h   | 10 +++++++++-
 2 files changed, 25 insertions(+), 10 deletions(-)

diff --git a/src/gui/graphicsview/qgraphicsanchorlayout_p.cpp b/src/gui/graphicsview/qgraphicsanchorlayout_p.cpp
index dbfce74..ad7d657 100644
--- a/src/gui/graphicsview/qgraphicsanchorlayout_p.cpp
+++ b/src/gui/graphicsview/qgraphicsanchorlayout_p.cpp
@@ -1080,12 +1080,14 @@ void QGraphicsAnchorLayoutPrivate::createCenterAnchors(
     c->variables.insert(data, 1.0);
     addAnchor_helper(item, firstEdge, item, centerEdge, data);
     data->isCenterAnchor = true;
+    data->dependency = AnchorData::Master;
     data->refreshSizeHints(0);
 
     data = new AnchorData;
     c->variables.insert(data, -1.0);
     addAnchor_helper(item, centerEdge, item, lastEdge, data);
     data->isCenterAnchor = true;
+    data->dependency = AnchorData::Slave;
     data->refreshSizeHints(0);
 
     itemCenterConstraints[orientation].append(c);
@@ -2075,19 +2077,18 @@ QList<QSimplexConstraint *> QGraphicsAnchorLayoutPrivate::constraintsFromSizeHin
     // Look for the layout edge. That can be either the first half in case the
     // layout is split in two, or the whole layout anchor.
     Orientation orient = Orientation(anchors.first()->orientation);
-    AnchorData *layoutEdge1 = NULL;
-    AnchorData *layoutEdge2 = NULL;
+    AnchorData *layoutEdge = NULL;
     if (layoutCentralVertex[orient]) {
-        layoutEdge1 = graph[orient].edgeData(layoutFirstVertex[orient], layoutCentralVertex[orient]);
-        layoutEdge2 = graph[orient].edgeData(layoutCentralVertex[orient], layoutLastVertex[orient]);
+        layoutEdge = graph[orient].edgeData(layoutFirstVertex[orient], layoutCentralVertex[orient]);
     } else {
-        layoutEdge1 = graph[orient].edgeData(layoutFirstVertex[orient], layoutLastVertex[orient]);
+        layoutEdge = graph[orient].edgeData(layoutFirstVertex[orient], layoutLastVertex[orient]);
+
         // If maxSize is less then "infinite", that means there are other anchors
         // grouped together with this one. We can't ignore its maximum value so we
         // set back the variable to NULL to prevent the continue condition from being
         // satisfied in the loop below.
-        if (layoutEdge1->maxSize < QWIDGETSIZE_MAX)
-            layoutEdge1 = NULL;
+        if (layoutEdge->maxSize < QWIDGETSIZE_MAX)
+            layoutEdge = NULL;
     }
 
     // For each variable, create constraints based on size hints
@@ -2096,6 +2097,12 @@ QList<QSimplexConstraint *> QGraphicsAnchorLayoutPrivate::constraintsFromSizeHin
     for (int i = 0; i < anchors.size(); ++i) {
         AnchorData *ad = anchors[i];
 
+        // Anchors that have their size directly linked to another one don't need constraints
+        // For exammple, the second half of an item has exactly the same size as the first half
+        // thus constraining the latter is enough.
+        if (ad->dependency == AnchorData::Slave)
+            continue;
+
         if ((ad->minSize == ad->maxSize) || qFuzzyCompare(ad->minSize, ad->maxSize)) {
             QSimplexConstraint *c = new QSimplexConstraint;
             c->variables.insert(ad, 1.0);
@@ -2113,7 +2120,7 @@ QList<QSimplexConstraint *> QGraphicsAnchorLayoutPrivate::constraintsFromSizeHin
             // We avoid adding restrictions to the layout internal anchors. That's
             // to prevent unnecessary fair distribution from happening due to this
             // artificial restriction.
-            if ((ad == layoutEdge1) || (ad == layoutEdge2))
+            if (ad == layoutEdge)
                 continue;
 
             c = new QSimplexConstraint;
@@ -2128,7 +2135,7 @@ QList<QSimplexConstraint *> QGraphicsAnchorLayoutPrivate::constraintsFromSizeHin
     // If no upper boundary restriction was added, add one to avoid unbounded problem
     if (unboundedProblem) {
         QSimplexConstraint *c = new QSimplexConstraint;
-        c->variables.insert(layoutEdge1, 1.0);
+        c->variables.insert(layoutEdge, 1.0);
         c->constant = QWIDGETSIZE_MAX;
         c->ratio = QSimplexConstraint::LessOrEqual;
         anchorConstraints += c;
diff --git a/src/gui/graphicsview/qgraphicsanchorlayout_p.h b/src/gui/graphicsview/qgraphicsanchorlayout_p.h
index 7d7bdb6..2f0237c 100644
--- a/src/gui/graphicsview/qgraphicsanchorlayout_p.h
+++ b/src/gui/graphicsview/qgraphicsanchorlayout_p.h
@@ -150,6 +150,12 @@ struct AnchorData : public QSimplexVariable {
         Parallel
     };
 
+    enum Dependency {
+        Independent = 0,
+        Master,
+        Slave
+    };
+
     AnchorData()
         : QSimplexVariable(), item(0), from(0), to(0),
           minSize(0), prefSize(0), expSize(0), maxSize(0),
@@ -157,7 +163,8 @@ struct AnchorData : public QSimplexVariable {
           sizeAtExpanding(0), sizeAtMaximum(0),
           graphicsAnchor(0), skipInPreferred(0),
           type(Normal), hasSize(true), isLayoutAnchor(false),
-          isCenterAnchor(false), orientation(0) {}
+          isCenterAnchor(false), orientation(0),
+          dependency(Independent) {}
 
     virtual void updateChildrenSizes() {}
     virtual bool refreshSizeHints(const QLayoutStyleInfo *styleInfo);
@@ -212,6 +219,7 @@ struct AnchorData : public QSimplexVariable {
     uint isLayoutAnchor : 1;  // if this anchor is an internal layout anchor
     uint isCenterAnchor : 1;
     uint orientation : 1;
+    uint dependency : 2;      // either Independent, Master or Slave
 };
 
 #ifdef QT_DEBUG
-- 
cgit v0.12


From d4d6901d82476e92f4c318d8d6e9da5d3410920f Mon Sep 17 00:00:00 2001
From: "Eduardo M. Fleury" <eduardo.fleury@openbossa.org>
Date: Tue, 27 Oct 2009 18:34:01 -0300
Subject: QGAL (Test): Disable simplification test when that is off

Prevent failures when the test is run with QT_ANCHORLAYOUT_NO_SIMPLIFICATION

Signed-off-by: Eduardo M. Fleury <eduardo.fleury@openbossa.org>
Reviewed-by: Caio Marcelo de Oliveira Filho <caio.oliveira@openbossa.org>
---
 tests/auto/qgraphicsanchorlayout/tst_qgraphicsanchorlayout.cpp | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/tests/auto/qgraphicsanchorlayout/tst_qgraphicsanchorlayout.cpp b/tests/auto/qgraphicsanchorlayout/tst_qgraphicsanchorlayout.cpp
index 00bfe65..53e27dc 100644
--- a/tests/auto/qgraphicsanchorlayout/tst_qgraphicsanchorlayout.cpp
+++ b/tests/auto/qgraphicsanchorlayout/tst_qgraphicsanchorlayout.cpp
@@ -342,8 +342,10 @@ void tst_QGraphicsAnchorLayout::layoutDirection()
 
     QCOMPARE(checkReverseDirection(p), true);
 
-    QVERIFY(usedSimplex(l, Qt::Horizontal));
-    QVERIFY(!usedSimplex(l, Qt::Vertical));
+    if (hasSimplification) {
+        QVERIFY(usedSimplex(l, Qt::Horizontal));
+        QVERIFY(!usedSimplex(l, Qt::Vertical));
+    }
 
     delete p;
     delete view;
-- 
cgit v0.12


From 6c758ba18ded5ed1ac518777cb59e519142d292c Mon Sep 17 00:00:00 2001
From: "Eduardo M. Fleury" <eduardo.fleury@openbossa.org>
Date: Tue, 27 Oct 2009 17:29:02 -0300
Subject: QGAL: Avoid false assertions due to floating point precision errors

Signed-off-by: Eduardo M. Fleury <eduardo.fleury@openbossa.org>
Reviewed-by: Caio Marcelo de Oliveira Filho <caio.oliveira@openbossa.org>
---
 src/gui/graphicsview/qgraphicsanchorlayout_p.cpp   | 22 ++++++++++++----------
 src/gui/graphicsview/qsimplex_p.cpp                |  2 +-
 src/gui/graphicsview/qsimplex_p.h                  |  2 +-
 .../tst_qgraphicsanchorlayout1.cpp                 | 17 ++++++++++++++++-
 4 files changed, 30 insertions(+), 13 deletions(-)

diff --git a/src/gui/graphicsview/qgraphicsanchorlayout_p.cpp b/src/gui/graphicsview/qgraphicsanchorlayout_p.cpp
index ad7d657..baff206 100644
--- a/src/gui/graphicsview/qgraphicsanchorlayout_p.cpp
+++ b/src/gui/graphicsview/qgraphicsanchorlayout_p.cpp
@@ -341,16 +341,16 @@ void SequentialAnchorData::updateChildrenSizes()
     // ### REMOVE ME
     // ### check whether we are guarantee to get those or we need to warn stuff at this
     // point.
-    Q_ASSERT(sizeAtMinimum > minSize || qFuzzyCompare(sizeAtMinimum, minSize));
-    Q_ASSERT(sizeAtPreferred > minSize || qFuzzyCompare(sizeAtPreferred, minSize));
-    Q_ASSERT(sizeAtExpanding > minSize || qFuzzyCompare(sizeAtExpanding, minSize));
-    Q_ASSERT(sizeAtMaximum > minSize || qFuzzyCompare(sizeAtMaximum, minSize));
+    Q_ASSERT(sizeAtMinimum > minSize || qAbs(sizeAtMinimum - minSize) < 0.00000001);
+    Q_ASSERT(sizeAtPreferred > minSize || qAbs(sizeAtPreferred - minSize) < 0.00000001);
+    Q_ASSERT(sizeAtExpanding > minSize || qAbs(sizeAtExpanding - minSize) < 0.00000001);
+    Q_ASSERT(sizeAtMaximum > minSize || qAbs(sizeAtMaximum - minSize) < 0.00000001);
 
     // These may be false if this anchor was in parallel with the layout stucture
-    // Q_ASSERT(sizeAtMinimum < maxSize || qFuzzyCompare(sizeAtMinimum, maxSize));
-    // Q_ASSERT(sizeAtPreferred < maxSize || qFuzzyCompare(sizeAtPreferred, maxSize));
-    // Q_ASSERT(sizeAtExpanding < maxSize || qFuzzyCompare(sizeAtExpanding, maxSize));
-    // Q_ASSERT(sizeAtMaximum < maxSize || qFuzzyCompare(sizeAtMaximum, maxSize));
+    // Q_ASSERT(sizeAtMinimum < maxSize || qAbs(sizeAtMinimum - maxSize) < 0.00000001);
+    // Q_ASSERT(sizeAtPreferred < maxSize || qAbs(sizeAtPreferred - maxSize) < 0.00000001);
+    // Q_ASSERT(sizeAtExpanding < maxSize || qAbs(sizeAtExpanding - maxSize) < 0.00000001);
+    // Q_ASSERT(sizeAtMaximum < maxSize || qAbs(sizeAtMaximum - maxSize) < 0.00000001);
 
     // Band here refers if the value is in the Minimum To Preferred
     // band (the lower band) or the Preferred To Maximum (the upper band).
@@ -2536,8 +2536,9 @@ bool QGraphicsAnchorLayoutPrivate::solveMinMax(const QList<QSimplexConstraint *>
         QList<AnchorData *> variables = getVariables(constraints);
         for (int i = 0; i < variables.size(); ++i) {
             AnchorData *ad = static_cast<AnchorData *>(variables[i]);
-            Q_ASSERT(ad->result >= ad->minSize || qFuzzyCompare(ad->result, ad->minSize));
             ad->sizeAtMinimum = ad->result;
+            Q_ASSERT(ad->sizeAtMinimum >= ad->minSize ||
+                     qAbs(ad->sizeAtMinimum - ad->minSize) < 0.00000001);
         }
 
         // Calculate maximum values
@@ -2546,8 +2547,9 @@ bool QGraphicsAnchorLayoutPrivate::solveMinMax(const QList<QSimplexConstraint *>
         // Save sizeAtMaximum results
         for (int i = 0; i < variables.size(); ++i) {
             AnchorData *ad = static_cast<AnchorData *>(variables[i]);
-            // Q_ASSERT(ad->result <= ad->maxSize || qFuzzyCompare(ad->result, ad->maxSize));
             ad->sizeAtMaximum = ad->result;
+            // Q_ASSERT(ad->sizeAtMaximum <= ad->maxSize ||
+            //          qAbs(ad->sizeAtMaximum - ad->maxSize) < 0.00000001);
         }
     }
     return feasible;
diff --git a/src/gui/graphicsview/qsimplex_p.cpp b/src/gui/graphicsview/qsimplex_p.cpp
index 86b10b4..cd40f9e 100644
--- a/src/gui/graphicsview/qsimplex_p.cpp
+++ b/src/gui/graphicsview/qsimplex_p.cpp
@@ -288,7 +288,7 @@ bool QSimplex::setConstraints(const QList<QSimplexConstraint *> newConstraints)
     // original problem.
     // Otherwise, we clean up our structures and report there is
     // no feasible solution.
-    if (valueAt(0, columns - 1) != 0.0) {
+    if ((valueAt(0, columns - 1) != 0.0) && (qAbs(valueAt(0, columns - 1)) > 0.00001)) {
         qWarning() << "QSimplex: No feasible solution!";
         clearDataStructures();
         return false;
diff --git a/src/gui/graphicsview/qsimplex_p.h b/src/gui/graphicsview/qsimplex_p.h
index 084ad7f..a5816d1 100644
--- a/src/gui/graphicsview/qsimplex_p.h
+++ b/src/gui/graphicsview/qsimplex_p.h
@@ -107,7 +107,7 @@ struct QSimplexConstraint
 
         Q_ASSERT(constant > 0 || qFuzzyCompare(1, 1 + constant));
 
-        if ((leftHandSide == constant) || qFuzzyCompare(1000 + leftHandSide, 1000 + constant))
+        if ((leftHandSide == constant) || qAbs(leftHandSide - constant) < 0.00000001)
             return true;
 
         switch (ratio) {
diff --git a/tests/auto/qgraphicsanchorlayout1/tst_qgraphicsanchorlayout1.cpp b/tests/auto/qgraphicsanchorlayout1/tst_qgraphicsanchorlayout1.cpp
index 2d6b44b..a7ce9be 100644
--- a/tests/auto/qgraphicsanchorlayout1/tst_qgraphicsanchorlayout1.cpp
+++ b/tests/auto/qgraphicsanchorlayout1/tst_qgraphicsanchorlayout1.cpp
@@ -1668,6 +1668,18 @@ inline QGraphicsLayoutItem *getItem(
     return widgets[index];
 }
 
+static QRectF truncate(QRectF original)
+{
+    QRectF result;
+
+    result.setX(qRound(original.x() * 1000000) / 1000000.0);
+    result.setY(qRound(original.y() * 1000000) / 1000000.0);
+    result.setWidth(qRound(original.width() * 1000000) / 1000000.0);
+    result.setHeight(qRound(original.height() * 1000000) / 1000000.0);
+
+    return result;
+}
+
 void tst_QGraphicsAnchorLayout1::testBasicLayout()
 {
     QFETCH(QSizeF, size);
@@ -1716,7 +1728,10 @@ void tst_QGraphicsAnchorLayout1::testBasicLayout()
     // Validate
     for (int i = 0; i < result.count(); ++i) {
         const BasicLayoutTestResult item = result[i];
-        QCOMPARE(widgets[item.index]->geometry(), item.rect);
+        QRectF expected = truncate(item.rect);
+        QRectF actual = truncate(widgets[item.index]->geometry());
+
+        QCOMPARE(expected, actual);
     }
 
     // ###: not supported yet
-- 
cgit v0.12


From 95ec02845997c2dee796c680186c46ab29e5e9ce Mon Sep 17 00:00:00 2001
From: "Eduardo M. Fleury" <eduardo.fleury@openbossa.org>
Date: Wed, 4 Nov 2009 16:11:58 -0300
Subject: QGAL (test): Test parent widget size besides children sizes

Sometimes a test fails due to a wrong child size and we spend a
lot of time trying to understand why but, in fact the problem is
in the parent size.

This commit adds a test to check whether the parent widget
was properly resized.

Signed-off-by: Eduardo M. Fleury <eduardo.fleury@openbossa.org>
Reviewed-by: Caio Marcelo de Oliveira Filho <caio.oliveira@openbossa.org>
---
 .../qgraphicsanchorlayout1/tst_qgraphicsanchorlayout1.cpp  | 14 ++++++--------
 1 file changed, 6 insertions(+), 8 deletions(-)

diff --git a/tests/auto/qgraphicsanchorlayout1/tst_qgraphicsanchorlayout1.cpp b/tests/auto/qgraphicsanchorlayout1/tst_qgraphicsanchorlayout1.cpp
index a7ce9be..57e5c41 100644
--- a/tests/auto/qgraphicsanchorlayout1/tst_qgraphicsanchorlayout1.cpp
+++ b/tests/auto/qgraphicsanchorlayout1/tst_qgraphicsanchorlayout1.cpp
@@ -1720,10 +1720,8 @@ void tst_QGraphicsAnchorLayout1::testBasicLayout()
     widget->setLayout(layout);
     widget->setContentsMargins(0,0,0,0);
 
-    widget->setMinimumSize(size);
-    widget->setMaximumSize(size);
-
-//    QTest::qWait(500); // layouting is asynchronous..
+    widget->resize(size);
+    QCOMPARE(widget->size(), size);
 
     // Validate
     for (int i = 0; i < result.count(); ++i) {
@@ -2231,8 +2229,8 @@ void tst_QGraphicsAnchorLayout1::testRemoveCenterAnchor()
     widget->setLayout(layout);
     widget->setContentsMargins(0,0,0,0);
 
-    widget->setMinimumSize(size);
-    widget->setMaximumSize(size);
+    widget->resize(size);
+    QCOMPARE(widget->size(), size);
 
     // Validate
     for (int i = 0; i < result.count(); ++i) {
@@ -3072,8 +3070,8 @@ void tst_QGraphicsAnchorLayout1::testComplexCases()
     widget->setLayout(layout);
     widget->setContentsMargins(0,0,0,0);
 
-    widget->setMinimumSize(size);
-    widget->setMaximumSize(size);
+    widget->resize(size);
+    QCOMPARE(widget->size(), size);
 
 //    QTest::qWait(500); // layouting is asynchronous..
 
-- 
cgit v0.12


From 07be7cc5016ba036d6cfe73e610b4f7dd99ecf53 Mon Sep 17 00:00:00 2001
From: "Eduardo M. Fleury" <eduardo.fleury@openbossa.org>
Date: Wed, 4 Nov 2009 11:04:00 -0300
Subject: QGAL: Remove support for QSizePolicy::Expanding

After meeting with Jan-Arve, we are removing the support for
the expanding size hint flag.

The reason for that is that such feature adds too much complexity
to the existing code and makes it harder for us to implement
planned changes, like the support for out-of-order simplification.

As these changes are consireded more important than the support
for the expanding sizeHint, we are dropping expanding support
for now. Once the QGAL is more stable and we have more time
available, we can consider bringing it back.

Signed-off-by: Eduardo M. Fleury <eduardo.fleury@openbossa.org>
Reviewed-by: Caio Marcelo de Oliveira Filho <caio.oliveira@openbossa.org>
---
 src/gui/graphicsview/qgraphicsanchorlayout_p.cpp | 210 ++---------------------
 src/gui/graphicsview/qgraphicsanchorlayout_p.h   |  12 +-
 2 files changed, 20 insertions(+), 202 deletions(-)

diff --git a/src/gui/graphicsview/qgraphicsanchorlayout_p.cpp b/src/gui/graphicsview/qgraphicsanchorlayout_p.cpp
index baff206..7ad994c 100644
--- a/src/gui/graphicsview/qgraphicsanchorlayout_p.cpp
+++ b/src/gui/graphicsview/qgraphicsanchorlayout_p.cpp
@@ -105,7 +105,7 @@ qreal QGraphicsAnchorPrivate::spacing() const
 static void internalSizeHints(QSizePolicy::Policy policy,
                               qreal minSizeHint, qreal prefSizeHint, qreal maxSizeHint,
                               qreal *minSize, qreal *prefSize,
-                              qreal *expSize, qreal *maxSize)
+                              qreal *maxSize)
 {
     // minSize, prefSize and maxSize are initialized
     // with item's preferred Size: this is QSizePolicy::Fixed.
@@ -135,11 +135,6 @@ static void internalSizeHints(QSizePolicy::Policy policy,
         *prefSize = *minSize;
     else
         *prefSize = prefSizeHint;
-
-    if (policy & QSizePolicy::ExpandFlag)
-        *expSize = *maxSize;
-    else
-        *expSize = *prefSize;
 }
 
 bool AnchorData::refreshSizeHints(const QLayoutStyleInfo *styleInfo)
@@ -154,7 +149,6 @@ bool AnchorData::refreshSizeHints(const QLayoutStyleInfo *styleInfo)
         if (isLayoutAnchor) {
             minSize = 0;
             prefSize = 0;
-            expSize = 0;
             maxSize = QWIDGETSIZE_MAX;
             if (isCenterAnchor)
                 maxSize /= 2;
@@ -205,8 +199,8 @@ bool AnchorData::refreshSizeHints(const QLayoutStyleInfo *styleInfo)
         }
         maxSizeHint = QWIDGETSIZE_MAX;
     }
-    internalSizeHints(policy, minSizeHint, prefSizeHint, maxSizeHint, 
-                      &minSize, &prefSize, &expSize, &maxSize);
+    internalSizeHints(policy, minSizeHint, prefSizeHint, maxSizeHint,
+                      &minSize, &prefSize, &maxSize);
 
     // Set the anchor effective sizes to preferred.
     //
@@ -217,7 +211,6 @@ bool AnchorData::refreshSizeHints(const QLayoutStyleInfo *styleInfo)
     // recalculate and override the values we set here.
     sizeAtMinimum = prefSize;
     sizeAtPreferred = prefSize;
-    sizeAtExpanding = prefSize;
     sizeAtMaximum = prefSize;
 
     return true;
@@ -227,7 +220,6 @@ void ParallelAnchorData::updateChildrenSizes()
 {
     firstEdge->sizeAtMinimum = secondEdge->sizeAtMinimum = sizeAtMinimum;
     firstEdge->sizeAtPreferred = secondEdge->sizeAtPreferred = sizeAtPreferred;
-    firstEdge->sizeAtExpanding = secondEdge->sizeAtExpanding = sizeAtExpanding;
     firstEdge->sizeAtMaximum = secondEdge->sizeAtMaximum = sizeAtMaximum;
 
     firstEdge->updateChildrenSizes();
@@ -257,16 +249,12 @@ bool ParallelAnchorData::refreshSizeHints_helper(const QLayoutStyleInfo *styleIn
         return false;
     }
 
-    expSize = qMax(firstEdge->expSize, secondEdge->expSize);
-    expSize = qMin(expSize, maxSize);
-
     prefSize = qMax(firstEdge->prefSize, secondEdge->prefSize);
-    prefSize = qMin(prefSize, expSize);
+    prefSize = qMin(prefSize, maxSize);
 
     // See comment in AnchorData::refreshSizeHints() about sizeAt* values
     sizeAtMinimum = prefSize;
     sizeAtPreferred = prefSize;
-    sizeAtExpanding = prefSize;
     sizeAtMaximum = prefSize;
 
     return true;
@@ -280,8 +268,7 @@ bool ParallelAnchorData::refreshSizeHints_helper(const QLayoutStyleInfo *styleIn
      1 is at Maximum
 */
 static QPair<QGraphicsAnchorLayoutPrivate::Interval, qreal> getFactor(qreal value, qreal min,
-                                                                      qreal pref, qreal exp,
-                                                                      qreal max)
+                                                                      qreal pref, qreal max)
 {
     QGraphicsAnchorLayoutPrivate::Interval interval;
     qreal lower;
@@ -291,13 +278,9 @@ static QPair<QGraphicsAnchorLayoutPrivate::Interval, qreal> getFactor(qreal valu
         interval = QGraphicsAnchorLayoutPrivate::MinToPreferred;
         lower = min;
         upper = pref;
-    } else if (value < exp) {
-        interval = QGraphicsAnchorLayoutPrivate::PreferredToExpanding;
-        lower = pref;
-        upper = exp;
     } else {
-        interval = QGraphicsAnchorLayoutPrivate::ExpandingToMax;
-        lower = exp;
+        interval = QGraphicsAnchorLayoutPrivate::PreferredToMax;
+        lower = pref;
         upper = max;
     }
 
@@ -313,7 +296,7 @@ static QPair<QGraphicsAnchorLayoutPrivate::Interval, qreal> getFactor(qreal valu
 
 static qreal interpolate(const QPair<QGraphicsAnchorLayoutPrivate::Interval, qreal> &factor,
                          qreal min, qreal pref,
-                         qreal exp, qreal max)
+                         qreal max)
 {
     qreal lower;
     qreal upper;
@@ -323,12 +306,8 @@ static qreal interpolate(const QPair<QGraphicsAnchorLayoutPrivate::Interval, qre
         lower = min;
         upper = pref;
         break;
-    case QGraphicsAnchorLayoutPrivate::PreferredToExpanding:
+    case QGraphicsAnchorLayoutPrivate::PreferredToMax:
         lower = pref;
-        upper = exp;
-        break;
-    case QGraphicsAnchorLayoutPrivate::ExpandingToMax:
-        lower = exp;
         upper = max;
         break;
     }
@@ -343,34 +322,29 @@ void SequentialAnchorData::updateChildrenSizes()
     // point.
     Q_ASSERT(sizeAtMinimum > minSize || qAbs(sizeAtMinimum - minSize) < 0.00000001);
     Q_ASSERT(sizeAtPreferred > minSize || qAbs(sizeAtPreferred - minSize) < 0.00000001);
-    Q_ASSERT(sizeAtExpanding > minSize || qAbs(sizeAtExpanding - minSize) < 0.00000001);
     Q_ASSERT(sizeAtMaximum > minSize || qAbs(sizeAtMaximum - minSize) < 0.00000001);
 
     // These may be false if this anchor was in parallel with the layout stucture
     // Q_ASSERT(sizeAtMinimum < maxSize || qAbs(sizeAtMinimum - maxSize) < 0.00000001);
     // Q_ASSERT(sizeAtPreferred < maxSize || qAbs(sizeAtPreferred - maxSize) < 0.00000001);
-    // Q_ASSERT(sizeAtExpanding < maxSize || qAbs(sizeAtExpanding - maxSize) < 0.00000001);
     // Q_ASSERT(sizeAtMaximum < maxSize || qAbs(sizeAtMaximum - maxSize) < 0.00000001);
 
     // Band here refers if the value is in the Minimum To Preferred
     // band (the lower band) or the Preferred To Maximum (the upper band).
 
     const QPair<QGraphicsAnchorLayoutPrivate::Interval, qreal> minFactor =
-        getFactor(sizeAtMinimum, minSize, prefSize, expSize, maxSize);
+        getFactor(sizeAtMinimum, minSize, prefSize, maxSize);
     const QPair<QGraphicsAnchorLayoutPrivate::Interval, qreal> prefFactor =
-        getFactor(sizeAtPreferred, minSize, prefSize, expSize, maxSize);
-    const QPair<QGraphicsAnchorLayoutPrivate::Interval, qreal> expFactor =
-        getFactor(sizeAtExpanding, minSize, prefSize, expSize, maxSize);
+        getFactor(sizeAtPreferred, minSize, prefSize, maxSize);
     const QPair<QGraphicsAnchorLayoutPrivate::Interval, qreal> maxFactor =
-        getFactor(sizeAtMaximum, minSize, prefSize, expSize, maxSize);
+        getFactor(sizeAtMaximum, minSize, prefSize, maxSize);
 
     for (int i = 0; i < m_edges.count(); ++i) {
         AnchorData *e = m_edges.at(i);
 
-        e->sizeAtMinimum = interpolate(minFactor, e->minSize, e->prefSize, e->expSize, e->maxSize);
-        e->sizeAtPreferred = interpolate(prefFactor, e->minSize, e->prefSize, e->expSize, e->maxSize);
-        e->sizeAtExpanding = interpolate(expFactor, e->minSize, e->prefSize, e->expSize, e->maxSize);
-        e->sizeAtMaximum = interpolate(maxFactor, e->minSize, e->prefSize, e->expSize, e->maxSize);
+        e->sizeAtMinimum = interpolate(minFactor, e->minSize, e->prefSize, e->maxSize);
+        e->sizeAtPreferred = interpolate(prefFactor, e->minSize, e->prefSize, e->maxSize);
+        e->sizeAtMaximum = interpolate(maxFactor, e->minSize, e->prefSize, e->maxSize);
 
         e->updateChildrenSizes();
     }
@@ -386,7 +360,6 @@ bool SequentialAnchorData::refreshSizeHints_helper(const QLayoutStyleInfo *style
 {
     minSize = 0;
     prefSize = 0;
-    expSize = 0;
     maxSize = 0;
 
     for (int i = 0; i < m_edges.count(); ++i) {
@@ -398,14 +371,12 @@ bool SequentialAnchorData::refreshSizeHints_helper(const QLayoutStyleInfo *style
 
         minSize += edge->minSize;
         prefSize += edge->prefSize;
-        expSize += edge->expSize;
         maxSize += edge->maxSize;
     }
 
     // See comment in AnchorData::refreshSizeHints() about sizeAt* values
     sizeAtMinimum = prefSize;
     sizeAtPreferred = prefSize;
-    sizeAtExpanding = prefSize;
     sizeAtMaximum = prefSize;
 
     return true;
@@ -480,7 +451,6 @@ QGraphicsAnchorLayoutPrivate::QGraphicsAnchorLayoutPrivate()
         for (int j = 0; j < 3; ++j) {
             sizeHints[i][j] = -1;
         }
-        sizeAtExpanding[i] = -1;
         interpolationProgress[i] = -1;
 
         spacings[i] = -1;
@@ -1866,27 +1836,19 @@ bool QGraphicsAnchorLayoutPrivate::calculateTrunk(Orientation orientation, const
         if (feasible) {
             solvePreferred(allConstraints, variables);
 
-            // Note that we don't include the sizeHintConstraints, since they
-            // have a different logic for solveExpanding().
-            solveExpanding(constraints, variables);
-
-            // Calculate and set the preferred and expanding sizes for the layout,
+            // Calculate and set the preferred size for the layout,
             // from the edge sizes that were calculated above.
             qreal pref(0.0);
-            qreal expanding(0.0);
             foreach (const AnchorData *ad, path.positives) {
                 pref += ad->sizeAtPreferred;
-                expanding += ad->sizeAtExpanding;
             }
             foreach (const AnchorData *ad, path.negatives) {
                 pref -= ad->sizeAtPreferred;
-                expanding -= ad->sizeAtExpanding;
             }
 
             sizeHints[orientation][Qt::MinimumSize] = min;
             sizeHints[orientation][Qt::PreferredSize] = pref;
             sizeHints[orientation][Qt::MaximumSize] = max;
-            sizeAtExpanding[orientation] = expanding;
         }
 
         qDeleteAll(sizeHintConstraints);
@@ -1900,13 +1862,11 @@ bool QGraphicsAnchorLayoutPrivate::calculateTrunk(Orientation orientation, const
         AnchorData *ad = path.positives.toList()[0];
         ad->sizeAtMinimum = ad->minSize;
         ad->sizeAtPreferred = ad->prefSize;
-        ad->sizeAtExpanding = ad->expSize;
         ad->sizeAtMaximum = ad->maxSize;
 
         sizeHints[orientation][Qt::MinimumSize] = ad->sizeAtMinimum;
         sizeHints[orientation][Qt::PreferredSize] = ad->sizeAtPreferred;
         sizeHints[orientation][Qt::MaximumSize] = ad->sizeAtMaximum;
-        sizeAtExpanding[orientation] = ad->sizeAtExpanding;
     }
 
 #if defined(QT_DEBUG) || defined(Q_AUTOTEST_EXPORT)
@@ -1932,7 +1892,6 @@ bool QGraphicsAnchorLayoutPrivate::calculateNonTrunk(const QList<QSimplexConstra
             AnchorData *ad = variables[j];
             Q_ASSERT(ad);
             ad->sizeAtMinimum = ad->sizeAtPreferred;
-            ad->sizeAtExpanding = ad->sizeAtPreferred;
             ad->sizeAtMaximum = ad->sizeAtPreferred;
         }
     }
@@ -2406,7 +2365,6 @@ void QGraphicsAnchorLayoutPrivate::setupEdgesInterpolation(
     result = getFactor(current,
                        sizeHints[orientation][Qt::MinimumSize],
                        sizeHints[orientation][Qt::PreferredSize],
-                       sizeAtExpanding[orientation],
                        sizeHints[orientation][Qt::MaximumSize]);
 
     interpolationInterval[orientation] = result.first;
@@ -2421,7 +2379,6 @@ void QGraphicsAnchorLayoutPrivate::setupEdgesInterpolation(
 
    - minimum size,
    - preferred size,
-   - size when all expanding anchors are expanded,
    - maximum size.
 
    These three key values are calculated in advance using linear
@@ -2441,7 +2398,7 @@ void QGraphicsAnchorLayoutPrivate::interpolateEdge(AnchorVertex *base,
                                         interpolationProgress[orientation]);
 
     qreal edgeDistance = interpolate(factor, edge->sizeAtMinimum, edge->sizeAtPreferred,
-                                     edge->sizeAtExpanding, edge->sizeAtMaximum);
+                                     edge->sizeAtMaximum);
 
     Q_ASSERT(edge->from == base || edge->to == base);
 
@@ -2628,139 +2585,6 @@ bool QGraphicsAnchorLayoutPrivate::solvePreferred(const QList<QSimplexConstraint
 
 /*!
     \internal
-    Calculate the "expanding" keyframe
-
-    This new keyframe sits between the already existing sizeAtPreferred and
-    sizeAtMaximum keyframes. Its goal is to modify the interpolation between
-    the latter as to respect the "expanding" size policy of some anchors.
-
-    Previously all items would be subject to a linear interpolation between
-    sizeAtPreferred and sizeAtMaximum values. This will change now, the
-    expanding anchors will change their size before the others. To calculate
-    this keyframe we use the following logic:
-
-    1) Ask each anchor for their desired expanding size (ad->expSize), this
-    value depends on the anchor expanding property in the following way:
-
-    - Expanding normal anchors want to grow towards their maximum size
-    - Non-expanding normal anchors want to remain at their preferred size.
-    - Sequential anchors wants to grow towards a size that is calculated by:
-        summarizing it's child anchors, where it will use preferred size for non-expanding anchors
-        and maximum size for expanding anchors.
-    - Parallel anchors want to grow towards the smallest maximum size of all the expanding anchors.
-
-    2) Clamp their desired values to the value they assume in the neighbour
-    keyframes (sizeAtPreferred and sizeAtExpanding)
-
-    3) Run simplex with a setup that ensures the following:
-
-      a. Anchors will change their value from their sizeAtPreferred towards
-         their sizeAtMaximum as much as required to ensure that ALL anchors
-         reach their respective "desired" expanding sizes.
-
-      b. No anchors will change their value beyond what is NEEDED to satisfy
-         the requirement above.
-
-    The final result is that, at the "expanding" keyframe expanding anchors
-    will grow and take with them all anchors that are parallel to them.
-    However, non-expanding anchors will remain at their preferred size unless
-    they are forced to grow by a parallel expanding anchor.
-
-    Note: For anchors where the sizeAtPreferred is bigger than sizeAtMaximum,
-          the visual effect when the layout grows from its preferred size is
-          the following: Expanding anchors will keep their size while non
-          expanding ones will shrink. Only after non-expanding anchors have
-          shrinked all the way, the expanding anchors will start to shrink too.
-*/
-void QGraphicsAnchorLayoutPrivate::solveExpanding(const QList<QSimplexConstraint *> &constraints,
-                                                  const QList<AnchorData *> &variables)
-{
-    QList<QSimplexConstraint *> itemConstraints;
-    QSimplexConstraint *objective = new QSimplexConstraint;
-    bool hasExpanding = false;
-
-    // Construct the simplex constraints and objective
-    for (int i = 0; i < variables.size(); ++i) {
-        // For each anchor
-        AnchorData *ad = variables[i];
-
-        // Clamp the desired expanding size
-        qreal upperBoundary = qMax(ad->sizeAtPreferred, ad->sizeAtMaximum);
-        qreal lowerBoundary = qMin(ad->sizeAtPreferred, ad->sizeAtMaximum);
-        qreal boundedExpSize = qBound(lowerBoundary, ad->expSize, upperBoundary);
-
-        // Expanding anchors are those that want to move from their preferred size
-        if (boundedExpSize != ad->sizeAtPreferred)
-            hasExpanding = true;
-
-        // Lock anchor between boundedExpSize and sizeAtMaximum (ensure 3.a)
-        if (boundedExpSize == ad->sizeAtMaximum || qFuzzyCompare(boundedExpSize, ad->sizeAtMaximum)) {
-            // The interval has only one possible value, we can use an "Equal"
-            // constraint and don't need to add this variable to the objective.
-            QSimplexConstraint *itemC = new QSimplexConstraint;
-            itemC->ratio = QSimplexConstraint::Equal;
-            itemC->variables.insert(ad, 1.0);
-            itemC->constant = boundedExpSize;
-            itemConstraints << itemC;
-        } else {
-            // Add MoreOrEqual and LessOrEqual constraints.
-            QSimplexConstraint *itemC = new QSimplexConstraint;
-            itemC->ratio = QSimplexConstraint::MoreOrEqual;
-            itemC->variables.insert(ad, 1.0);
-            itemC->constant = qMin(boundedExpSize, ad->sizeAtMaximum);
-            itemConstraints << itemC;
-
-            itemC = new QSimplexConstraint;
-            itemC->ratio = QSimplexConstraint::LessOrEqual;
-            itemC->variables.insert(ad, 1.0);
-            itemC->constant = qMax(boundedExpSize, ad->sizeAtMaximum);
-            itemConstraints << itemC;
-
-            // Create objective to avoid the anchors from moving away from
-            // the preferred size more than the needed amount. (ensure 3.b)
-            // The objective function is the distance between sizeAtPreferred
-            // and sizeAtExpanding, it will be minimized.
-            if (ad->sizeAtExpanding < ad->sizeAtMaximum) {
-                // Try to shrink this variable towards its sizeAtPreferred value
-                objective->variables.insert(ad, 1.0);
-            } else {
-                // Try to grow this variable towards its sizeAtPreferred value
-                objective->variables.insert(ad, -1.0);
-            }
-        }
-    }
-
-    // Solve
-    if (hasExpanding == false) {
-        // If no anchors are expanding, we don't need to run the simplex
-        // Set all variables to their preferred size
-        for (int i = 0; i < variables.size(); ++i) {
-            variables[i]->sizeAtExpanding = variables[i]->sizeAtPreferred;
-        }
-    } else {
-        // Run simplex
-        QSimplex simplex;
-
-        // Satisfy expanding (3.a)
-        bool feasible = simplex.setConstraints(constraints + itemConstraints);
-        Q_ASSERT(feasible);
-
-        // Reduce damage (3.b)
-        simplex.setObjective(objective);
-        simplex.solveMin();
-
-        // Collect results
-        for (int i = 0; i < variables.size(); ++i) {
-            variables[i]->sizeAtExpanding = variables[i]->result;
-        }
-    }
-
-    delete objective;
-    qDeleteAll(itemConstraints);
-}
-
-/*!
-    \internal
     Returns true if there are no arrangement that satisfies all constraints.
     Otherwise returns false.
 
diff --git a/src/gui/graphicsview/qgraphicsanchorlayout_p.h b/src/gui/graphicsview/qgraphicsanchorlayout_p.h
index 2f0237c..1e11ee2 100644
--- a/src/gui/graphicsview/qgraphicsanchorlayout_p.h
+++ b/src/gui/graphicsview/qgraphicsanchorlayout_p.h
@@ -158,9 +158,9 @@ struct AnchorData : public QSimplexVariable {
 
     AnchorData()
         : QSimplexVariable(), item(0), from(0), to(0),
-          minSize(0), prefSize(0), expSize(0), maxSize(0),
+          minSize(0), prefSize(0), maxSize(0),
           sizeAtMinimum(0), sizeAtPreferred(0),
-          sizeAtExpanding(0), sizeAtMaximum(0),
+          sizeAtMaximum(0),
           graphicsAnchor(0), skipInPreferred(0),
           type(Normal), hasSize(true), isLayoutAnchor(false),
           isCenterAnchor(false), orientation(0),
@@ -201,7 +201,6 @@ struct AnchorData : public QSimplexVariable {
     // size.
     qreal minSize;
     qreal prefSize;
-    qreal expSize;
     qreal maxSize;
 
     // These attributes define which sizes should that anchor be in when the
@@ -209,7 +208,6 @@ struct AnchorData : public QSimplexVariable {
     // calculated by the Simplex solver based on the current layout setup.
     qreal sizeAtMinimum;
     qreal sizeAtPreferred;
-    qreal sizeAtExpanding;
     qreal sizeAtMaximum;
     QGraphicsAnchor *graphicsAnchor;
 
@@ -345,8 +343,7 @@ public:
     // Interval represents which interpolation interval are we operating in.
     enum Interval {
         MinToPreferred = 0,
-        PreferredToExpanding,
-        ExpandingToMax
+        PreferredToMax
     };
 
     // Several structures internal to the layout are duplicated to handle
@@ -487,8 +484,6 @@ public:
                      GraphPath path, qreal *min, qreal *max);
     bool solvePreferred(const QList<QSimplexConstraint *> &constraints,
                         const QList<AnchorData *> &variables);
-    void solveExpanding(const QList<QSimplexConstraint *> &constraints,
-                        const QList<AnchorData *> &variables);
     bool hasConflicts() const;
 
 #ifdef QT_DEBUG
@@ -499,7 +494,6 @@ public:
     qreal spacings[NOrientations];
     // Size hints from simplex engine
     qreal sizeHints[2][3];
-    qreal sizeAtExpanding[2];
 
     // Items
     QVector<QGraphicsLayoutItem *> items;
-- 
cgit v0.12


From 77f81c95635ecac0fc3516b4a4b71f84ffb56bfd Mon Sep 17 00:00:00 2001
From: "Eduardo M. Fleury" <eduardo.fleury@openbossa.org>
Date: Wed, 4 Nov 2009 11:37:53 -0300
Subject: QGAL (test): Remove expanding tests

After the removal of the expanding size hint support.

Signed-off-by: Eduardo M. Fleury <eduardo.fleury@openbossa.org>
Reviewed-by: Caio Marcelo de Oliveira Filho <caio.oliveira@openbossa.org>
---
 .../tst_qgraphicsanchorlayout.cpp                  | 238 +--------------------
 1 file changed, 10 insertions(+), 228 deletions(-)

diff --git a/tests/auto/qgraphicsanchorlayout/tst_qgraphicsanchorlayout.cpp b/tests/auto/qgraphicsanchorlayout/tst_qgraphicsanchorlayout.cpp
index 53e27dc..cc96edb 100644
--- a/tests/auto/qgraphicsanchorlayout/tst_qgraphicsanchorlayout.cpp
+++ b/tests/auto/qgraphicsanchorlayout/tst_qgraphicsanchorlayout.cpp
@@ -79,9 +79,6 @@ private slots:
     void delete_anchor();
     void conflicts();
     void sizePolicy();
-    void expandingSequence();
-    void expandingSequenceFairDistribution();
-    void expandingParallel();
     void floatConflict();
     void infiniteMaxSizes();
     void simplifiableUnfeasible();
@@ -1611,217 +1608,6 @@ void tst_QGraphicsAnchorLayout::conflicts()
     delete p;
 }
 
-void tst_QGraphicsAnchorLayout::expandingSequence()
-{
-    QSizeF min(10, 10);
-    QSizeF pref(50, 10);
-    QSizeF max(100, 10);
-
-    QGraphicsWidget *a = createItem(min, pref, max, "a");
-    QGraphicsWidget *b = createItem(min, pref, max, "b");
-
-    b->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
-
-    QGraphicsAnchorLayout *l = new QGraphicsAnchorLayout;
-    l->setContentsMargins(0, 0, 0, 0);
-
-    // horizontal
-    setAnchor(l, l, Qt::AnchorLeft, a, Qt::AnchorLeft, 0);
-    setAnchor(l, a, Qt::AnchorRight, b, Qt::AnchorLeft, 0);
-    setAnchor(l, b, Qt::AnchorRight, l, Qt::AnchorRight, 0);
-
-    // vertical
-    l->addAnchors(l, a, Qt::Vertical);
-    l->addAnchors(l, b, Qt::Vertical);
-
-    QCOMPARE(l->count(), 2);
-
-    QGraphicsWidget p;
-    p.setLayout(l);
-
-    QSizeF layoutMinimumSize = l->effectiveSizeHint(Qt::MinimumSize);
-    QCOMPARE(layoutMinimumSize.width(), qreal(20));
-
-    QSizeF layoutExpandedSize(pref.width() + max.width(), layoutMinimumSize.height());
-    p.resize(layoutExpandedSize);
-
-    QCOMPARE(a->geometry().size(), pref);
-    QCOMPARE(b->geometry().size(), max);
-
-    QSizeF layoutMaximumSize = l->effectiveSizeHint(Qt::MaximumSize);
-    QCOMPARE(layoutMaximumSize.width(), qreal(200));
-
-    if (hasSimplification) {
-        QVERIFY(!usedSimplex(l, Qt::Horizontal));
-        QVERIFY(!usedSimplex(l, Qt::Vertical));
-    }
-}
-
-void tst_QGraphicsAnchorLayout::expandingSequenceFairDistribution()
-{
-    QSizeF min(10, 10);
-    QSizeF pref(50, 10);
-    QSizeF max(100, 10);
-
-    QGraphicsWidget *a = createItem(min, pref, max, "a");
-    QGraphicsWidget *b = createItem(min, pref, max, "b");
-    QGraphicsWidget *c = createItem(min, pref, max, "c");
-    QGraphicsWidget *d = createItem(min, pref, max, "d");
-
-    b->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
-    d->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
-
-    QGraphicsAnchorLayout *l = new QGraphicsAnchorLayout;
-    l->setContentsMargins(0, 0, 0, 0);
-
-    // horizontal
-    setAnchor(l, l, Qt::AnchorLeft, a, Qt::AnchorLeft, 0);
-    setAnchor(l, a, Qt::AnchorRight, b, Qt::AnchorLeft, 0);
-    setAnchor(l, b, Qt::AnchorRight, c, Qt::AnchorLeft, 0);
-    setAnchor(l, c, Qt::AnchorRight, d, Qt::AnchorLeft, 0);
-    setAnchor(l, d, Qt::AnchorRight, l, Qt::AnchorRight, 0);
-
-    // vertical
-    l->addAnchors(l, a, Qt::Vertical);
-    l->addAnchors(l, b, Qt::Vertical);
-    l->addAnchors(l, c, Qt::Vertical);
-    l->addAnchors(l, d, Qt::Vertical);
-
-    QCOMPARE(l->count(), 4);
-
-    QGraphicsWidget p;
-    p.setLayout(l);
-
-    QSizeF layoutMinimumSize = l->effectiveSizeHint(Qt::MinimumSize);
-    QCOMPARE(layoutMinimumSize.width(), qreal(40));
-
-    QSizeF layoutPartialExpandedSize((2 * pref.width()) + (2 * (pref.width() + 10)),
-                                     layoutMinimumSize.height());
-    p.resize(layoutPartialExpandedSize);
-
-    QCOMPARE(a->geometry().size(), pref);
-    QCOMPARE(b->geometry().size(), pref + QSizeF(10, 0));
-    QCOMPARE(c->geometry().size(), pref);
-    QCOMPARE(d->geometry().size(), pref + QSizeF(10, 0));
-
-    QSizeF layoutExpandedSize((2 * pref.width()) + (2 * max.width()),
-                              layoutMinimumSize.height());
-    p.resize(layoutExpandedSize);
-
-    QCOMPARE(a->geometry().size(), pref);
-    QCOMPARE(b->geometry().size(), max);
-    QCOMPARE(c->geometry().size(), pref);
-    QCOMPARE(d->geometry().size(), max);
-
-    QSizeF layoutMaximumSize = l->effectiveSizeHint(Qt::MaximumSize);
-    QCOMPARE(layoutMaximumSize.width(), qreal(400));
-
-    if (hasSimplification) {
-        QVERIFY(!usedSimplex(l, Qt::Horizontal));
-        QVERIFY(!usedSimplex(l, Qt::Vertical));
-    }
-
-    // Now we change D to have more "room for growth" from its preferred size
-    // to its maximum size. We expect a proportional fair distribution. Note that
-    // this seems to not conform with what QGraphicsLinearLayout does.
-    d->setMaximumSize(QSizeF(150, 10));
-
-    QSizeF newLayoutExpandedSize((2 * pref.width()) + (max.width() + 150),
-                              layoutMinimumSize.height());
-    p.resize(newLayoutExpandedSize);
-
-    QCOMPARE(a->geometry().size(), pref);
-    QCOMPARE(b->geometry().size(), max);
-    QCOMPARE(c->geometry().size(), pref);
-    QCOMPARE(d->geometry().size(), QSizeF(150, 10));
-
-    QSizeF newLayoutPartialExpandedSize((4 * pref.width()) + 75,
-                                        layoutMinimumSize.height());
-    p.resize(newLayoutPartialExpandedSize);
-
-    QCOMPARE(a->geometry().size(), pref);
-    QCOMPARE(b->geometry().size(), pref + QSizeF(25, 0));
-    QCOMPARE(c->geometry().size(), pref);
-    QCOMPARE(d->geometry().size(), pref + QSizeF(50, 0));
-
-    if (hasSimplification) {
-        QVERIFY(!usedSimplex(l, Qt::Horizontal));
-        QVERIFY(!usedSimplex(l, Qt::Vertical));
-    }
-}
-
-void tst_QGraphicsAnchorLayout::expandingParallel()
-{
-    QSizeF min(10, 10);
-    QSizeF pref(50, 10);
-    QSizeF max(100, 10);
-    QSizeF max2(100, 50);
-
-    QGraphicsWidget *a = createItem(min, pref, max, "a");
-    QGraphicsWidget *b = createItem(min, pref, max, "b");
-    QGraphicsWidget *c = createItem(min, pref, max2, "c");
-
-    b->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
-
-    QGraphicsAnchorLayout *l = new QGraphicsAnchorLayout;
-    l->setContentsMargins(0, 0, 0, 0);
-
-    // horizontal
-    setAnchor(l, l, Qt::AnchorLeft, a, Qt::AnchorLeft, 0);
-    setAnchor(l, l, Qt::AnchorLeft, b, Qt::AnchorLeft, 0);
-
-    setAnchor(l, a, Qt::AnchorRight, c, Qt::AnchorLeft, 0);
-    setAnchor(l, b, Qt::AnchorRight, c, Qt::AnchorLeft, 0);
-
-    setAnchor(l, c, Qt::AnchorRight, l, Qt::AnchorRight, 0);
-
-    // vertical
-    l->addAnchors(l, c, Qt::Vertical);
-    setAnchor(l, l, Qt::AnchorTop, a, Qt::AnchorTop, 0);
-    setAnchor(l, a, Qt::AnchorBottom, c, Qt::AnchorVerticalCenter, 0);
-    setAnchor(l, b, Qt::AnchorTop, c, Qt::AnchorVerticalCenter, 0);
-    setAnchor(l, b, Qt::AnchorBottom, l, Qt::AnchorBottom, 0);
-
-    QCOMPARE(l->count(), 3);
-
-    QGraphicsWidget p;
-    p.setLayout(l);
-
-    QSizeF layoutMinimumSize = l->effectiveSizeHint(Qt::MinimumSize);
-    QCOMPARE(layoutMinimumSize.width(), qreal(20));
-
-    QSizeF layoutExpandedSize(pref.width() + max.width(), layoutMinimumSize.height());
-    p.resize(layoutExpandedSize);
-
-    QCOMPARE(a->geometry().size(), max);
-    QCOMPARE(b->geometry().size(), max);
-    QCOMPARE(c->geometry().size(), QSizeF(pref.width(), 20));
-
-    QSizeF layoutMaximumSize = l->effectiveSizeHint(Qt::MaximumSize);
-    QCOMPARE(layoutMaximumSize.width(), qreal(200));
-
-    //
-    // Change the parallel connection to a paralell connection of b with a center...
-    //
-    QGraphicsAnchor *anchor = l->anchor(b, Qt::AnchorRight, c, Qt::AnchorLeft);
-    delete anchor;
-    setAnchor(l, b, Qt::AnchorRight, a, Qt::AnchorHorizontalCenter, 0);
-    a->setMaximumSize(max + QSizeF(100, 0));
-
-    QSizeF newLayoutMinimumSize = l->effectiveSizeHint(Qt::MinimumSize);
-    QCOMPARE(newLayoutMinimumSize.width(), qreal(30));
-
-    QSizeF newLayoutExpandedSize = layoutExpandedSize + QSizeF(100, 0);
-    p.resize(newLayoutExpandedSize);
-
-    QCOMPARE(a->geometry().size(), max + QSizeF(100, 0));
-    QCOMPARE(b->geometry().size(), max);
-    QCOMPARE(c->geometry().size(), QSizeF(pref.width(), 20));
-
-    QSizeF newLayoutMaximumSize = l->effectiveSizeHint(Qt::MaximumSize);
-    QCOMPARE(newLayoutMaximumSize.width(), qreal(300));
-}
-
 void tst_QGraphicsAnchorLayout::floatConflict()
 {
     QGraphicsWidget *a = createItem(QSizeF(80,10), QSizeF(90,10), QSizeF(100,10), "a");
@@ -1895,9 +1681,6 @@ void tst_QGraphicsAnchorLayout::infiniteMaxSizes()
     setAnchor(l, b, Qt::AnchorHorizontalCenter, e, Qt::AnchorLeft, 0);
     setAnchor(l, e, Qt::AnchorRight, c, Qt::AnchorHorizontalCenter, 0);
 
-    a->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
-    c->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
-
     QGraphicsWidget p;
     p.setLayout(l);
 
@@ -1911,17 +1694,16 @@ void tst_QGraphicsAnchorLayout::infiniteMaxSizes()
     QCOMPARE(d->geometry(), QRectF(150, 0, 50, 10));
 
     p.resize(1000, 10);
-    QCOMPARE(a->geometry(), QRectF(0, 0, 450, 10));
-    QCOMPARE(b->geometry(), QRectF(450, 0, 50, 10));
-    QCOMPARE(c->geometry(), QRectF(500, 0, 450, 10));
-    QCOMPARE(d->geometry(), QRectF(950, 0, 50, 10));
-
-    qreal expMaxSize = (QWIDGETSIZE_MAX - 100.0) / 2;
-    p.resize(QWIDGETSIZE_MAX, 10);
-    QCOMPARE(a->geometry(), QRectF(0, 0, expMaxSize, 10));
-    QCOMPARE(b->geometry(), QRectF(expMaxSize, 0, 50, 10));
-    QCOMPARE(c->geometry(), QRectF(expMaxSize + 50, 0, expMaxSize, 10));
-    QCOMPARE(d->geometry(), QRectF(QWIDGETSIZE_MAX - 50, 0, 50, 10));
+    QCOMPARE(a->geometry(), QRectF(0, 0, 250, 10));
+    QCOMPARE(b->geometry(), QRectF(250, 0, 250, 10));
+    QCOMPARE(c->geometry(), QRectF(500, 0, 250, 10));
+    QCOMPARE(d->geometry(), QRectF(750, 0, 250, 10));
+
+    p.resize(40000, 10);
+    QCOMPARE(a->geometry(), QRectF(0, 0, 10000, 10));
+    QCOMPARE(b->geometry(), QRectF(10000, 0, 10000, 10));
+    QCOMPARE(c->geometry(), QRectF(20000, 0, 10000, 10));
+    QCOMPARE(d->geometry(), QRectF(30000, 0, 10000, 10));
 }
 
 void tst_QGraphicsAnchorLayout::simplifiableUnfeasible()
-- 
cgit v0.12


From 5e04d74a9fd339384bd6808ff6edc4c47f99fee0 Mon Sep 17 00:00:00 2001
From: Artur Duque de Souza <artur.souza@openbossa.org>
Date: Thu, 5 Nov 2009 00:57:09 -0300
Subject: Weather Anchor Layout example

This was a design that was not possible before with the other
layouts. To do this, the developer would need to hardcode all the
positions and resize would not work.

Besides the fact that we use "pixmap widgets" no it's not totally
usefull widgets, it shows how anchors can help developers an designers
with to create applications with new layouts.

Signed-off-by: Artur Duque de Souza <artur.souza@openbossa.org>
---
 .../weatheranchorlayout/images/5days.jpg           | Bin 0 -> 5748 bytes
 .../weatheranchorlayout/images/details.jpg         | Bin 0 -> 5323 bytes
 .../weatheranchorlayout/images/place.jpg           | Bin 0 -> 62438 bytes
 .../weatheranchorlayout/images/tabbar.jpg          | Bin 0 -> 849 bytes
 .../weatheranchorlayout/images/title.jpg           | Bin 0 -> 3472 bytes
 .../images/weather-few-clouds.png                  | Bin 0 -> 18976 bytes
 examples/graphicsview/weatheranchorlayout/main.cpp | 274 +++++++++++++++++++++
 .../weatheranchorlayout/weatheranchorlayout.pro    |  16 ++
 .../weatheranchorlayout/weatheranchorlayout.qrc    |  10 +
 9 files changed, 300 insertions(+)
 create mode 100644 examples/graphicsview/weatheranchorlayout/images/5days.jpg
 create mode 100644 examples/graphicsview/weatheranchorlayout/images/details.jpg
 create mode 100644 examples/graphicsview/weatheranchorlayout/images/place.jpg
 create mode 100644 examples/graphicsview/weatheranchorlayout/images/tabbar.jpg
 create mode 100644 examples/graphicsview/weatheranchorlayout/images/title.jpg
 create mode 100644 examples/graphicsview/weatheranchorlayout/images/weather-few-clouds.png
 create mode 100644 examples/graphicsview/weatheranchorlayout/main.cpp
 create mode 100644 examples/graphicsview/weatheranchorlayout/weatheranchorlayout.pro
 create mode 100644 examples/graphicsview/weatheranchorlayout/weatheranchorlayout.qrc

diff --git a/examples/graphicsview/weatheranchorlayout/images/5days.jpg b/examples/graphicsview/weatheranchorlayout/images/5days.jpg
new file mode 100644
index 0000000..fd92ba8
Binary files /dev/null and b/examples/graphicsview/weatheranchorlayout/images/5days.jpg differ
diff --git a/examples/graphicsview/weatheranchorlayout/images/details.jpg b/examples/graphicsview/weatheranchorlayout/images/details.jpg
new file mode 100644
index 0000000..fde0448
Binary files /dev/null and b/examples/graphicsview/weatheranchorlayout/images/details.jpg differ
diff --git a/examples/graphicsview/weatheranchorlayout/images/place.jpg b/examples/graphicsview/weatheranchorlayout/images/place.jpg
new file mode 100644
index 0000000..03e5344
Binary files /dev/null and b/examples/graphicsview/weatheranchorlayout/images/place.jpg differ
diff --git a/examples/graphicsview/weatheranchorlayout/images/tabbar.jpg b/examples/graphicsview/weatheranchorlayout/images/tabbar.jpg
new file mode 100644
index 0000000..7777662
Binary files /dev/null and b/examples/graphicsview/weatheranchorlayout/images/tabbar.jpg differ
diff --git a/examples/graphicsview/weatheranchorlayout/images/title.jpg b/examples/graphicsview/weatheranchorlayout/images/title.jpg
new file mode 100644
index 0000000..fa84c81
Binary files /dev/null and b/examples/graphicsview/weatheranchorlayout/images/title.jpg differ
diff --git a/examples/graphicsview/weatheranchorlayout/images/weather-few-clouds.png b/examples/graphicsview/weatheranchorlayout/images/weather-few-clouds.png
new file mode 100644
index 0000000..eea6ce6
Binary files /dev/null and b/examples/graphicsview/weatheranchorlayout/images/weather-few-clouds.png differ
diff --git a/examples/graphicsview/weatheranchorlayout/main.cpp b/examples/graphicsview/weatheranchorlayout/main.cpp
new file mode 100644
index 0000000..fd5d9c6
--- /dev/null
+++ b/examples/graphicsview/weatheranchorlayout/main.cpp
@@ -0,0 +1,274 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the examples of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QLabel>
+#include <QPainter>
+#include <QPushButton>
+#include <QApplication>
+
+#include <QGraphicsView>
+#include <QGraphicsScene>
+#include <QGraphicsWidget>
+#include <QGraphicsProxyWidget>
+#include <QGraphicsAnchorLayout>
+#include <QGraphicsSceneResizeEvent>
+
+
+class PixmapWidget : public QGraphicsLayoutItem
+{
+
+public:
+    PixmapWidget(const QPixmap &pix) : QGraphicsLayoutItem()
+    {
+        original = new QGraphicsPixmapItem(pix);
+        setGraphicsItem(original);
+        original->show();
+        r = QRectF(QPointF(0, 0), pix.size());
+    }
+
+    ~PixmapWidget()
+    {
+        setGraphicsItem(0);
+        delete original;
+    }
+
+    void setZValue(qreal z)
+    {
+        original->setZValue(z);
+    }
+
+    void setGeometry (const QRectF &rect)
+    {
+        original->scale(rect.width() / r.width(), rect.height() / r.height());
+        original->setPos(rect.x(), rect.y());
+        r = rect;
+    }
+
+protected:
+    QSizeF sizeHint(Qt::SizeHint which, const QSizeF &constraint = QSizeF()) const
+    {
+        Q_UNUSED(constraint);
+        QSizeF sh;
+        switch (which) {
+            case Qt::MinimumSize:
+                sh = QSizeF(0, 0);
+                break;
+            case Qt::PreferredSize:
+                sh = QSizeF(50, 50);
+                break;
+            case Qt::MaximumSize:
+                sh = QSizeF(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX);
+                break;
+        }
+         return sh;
+    }
+
+private:
+    QGraphicsPixmapItem *original;
+    QRectF r;
+};
+
+
+class PlaceWidget : public QGraphicsWidget
+{
+    Q_OBJECT
+
+public:
+    PlaceWidget(const QPixmap &pix) : QGraphicsWidget(), original(pix), scaled(pix)
+    {
+    }
+
+    void paint(QPainter *painter, const QStyleOptionGraphicsItem*, QWidget*)
+    {
+        QPointF reflection = QPointF();
+        reflection.setY(scaled.height() + 2);
+
+        painter->drawPixmap(QPointF(), scaled);
+
+        QPixmap tmp(scaled.size());
+        QPainter p(&tmp);
+
+        // create gradient
+        QPoint p1(scaled.width() / 2, 0);
+        QPoint p2(scaled.width() / 2, scaled.height());
+        QLinearGradient linearGrad(p1, p2);
+        linearGrad.setColorAt(0, QColor(0, 0, 0, 0));
+        linearGrad.setColorAt(0.65, QColor(0, 0, 0, 127));
+        linearGrad.setColorAt(1, QColor(0, 0, 0, 255));
+
+        // apply 'mask'
+        p.setBrush(linearGrad);
+        p.fillRect(0, 0, tmp.width(), tmp.height(), QBrush(linearGrad));
+        p.fillRect(0, 0, tmp.width(), tmp.height(), QBrush(linearGrad));
+
+        // paint the image flipped
+        p.setCompositionMode(QPainter::CompositionMode_DestinationOver);
+        p.drawPixmap(0, 0, QPixmap::fromImage(scaled.toImage().mirrored(false, true)));
+        p.end();
+
+        painter->drawPixmap(reflection, tmp);
+    }
+
+    void resizeEvent(QGraphicsSceneResizeEvent *event)
+    {
+        QSize newSize = event->newSize().toSize();
+        newSize.setHeight(newSize.height() / 2);
+        scaled = original.scaled(newSize);
+    }
+
+    QRectF boundingRect() const
+    {
+        QSize size(scaled.width(), scaled.height() * 2 + 2);
+        return QRectF(QPointF(0, 0), size);
+    }
+
+private:
+    QPixmap original;
+    QPixmap scaled;
+};
+
+
+static QGraphicsProxyWidget *createItem(const QString &name = "Unnamed")
+{
+    QGraphicsProxyWidget *w = new QGraphicsProxyWidget;
+    w->setWidget(new QPushButton(name));
+    w->setData(0, name);
+    w->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
+    return w;
+}
+
+int main(int argc, char **argv)
+{
+    Q_INIT_RESOURCE(weatheranchorlayout);
+
+    QApplication app(argc, argv);
+
+    QGraphicsScene scene;
+    scene.setSceneRect(0, 0, 800, 480);
+
+#ifdef DEBUG_MODE
+        QGraphicsProxyWidget *title = createItem("Title");
+        QGraphicsProxyWidget *place = createItem("Place");
+        QGraphicsProxyWidget *sun = createItem("Sun");
+        QGraphicsProxyWidget *details = createItem("Details");
+        QGraphicsProxyWidget *tabbar = createItem("Tabbar");
+#else
+        // pixmaps widgets
+        PixmapWidget *title = new PixmapWidget(QPixmap(":/images/title.jpg"));
+        PlaceWidget *place = new PlaceWidget(QPixmap(":/images/place.jpg"));
+        PixmapWidget *details = new PixmapWidget(QPixmap(":/images/5days.jpg"));
+        PixmapWidget *sun = new PixmapWidget(QPixmap(":/images/weather-few-clouds.png"));
+        PixmapWidget *tabbar = new PixmapWidget(QPixmap(":/images/tabbar.jpg"));
+#endif
+
+
+    // setup sizes
+    title->setPreferredSize(QSizeF(348, 45));
+    title->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
+
+    place->setPreferredSize(QSizeF(96, 72));
+    place->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
+
+    details->setMinimumSize(QSizeF(200, 112));
+    details->setPreferredSize(QSizeF(200, 112));
+    details->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
+
+    tabbar->setPreferredSize(QSizeF(70, 24));
+    tabbar->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
+
+    sun->setPreferredSize(QSizeF(128, 97));
+    sun->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
+    sun->setZValue(9999);
+
+    // start anchor layout
+    QGraphicsAnchorLayout *l = new QGraphicsAnchorLayout;
+    l->setSpacing(0);
+
+    // setup the main widget
+    QGraphicsWidget *w = new QGraphicsWidget(0, Qt::Window);
+    QPalette p;
+    p.setColor(QPalette::Window, Qt::black);
+    w->setPalette(p);
+    w->setPos(20, 20);
+    w->setLayout(l);
+
+    // vertical anchors
+    QGraphicsAnchor *anchor = l->addAnchor(title, Qt::AnchorTop, l, Qt::AnchorTop);
+    anchor = l->addAnchor(place, Qt::AnchorTop, title, Qt::AnchorBottom);
+    anchor->setSpacing(12);
+    anchor = l->addAnchor(place, Qt::AnchorBottom, l, Qt::AnchorBottom);
+    anchor->setSpacing(12);
+
+    anchor = l->addAnchor(sun, Qt::AnchorTop, title, Qt::AnchorTop);
+    anchor = l->addAnchor(sun, Qt::AnchorBottom, l, Qt::AnchorVerticalCenter);
+
+    anchor = l->addAnchor(tabbar, Qt::AnchorTop, title, Qt::AnchorBottom);
+    anchor->setSpacing(5);
+    anchor = l->addAnchor(details, Qt::AnchorTop, tabbar, Qt::AnchorBottom);
+    anchor->setSpacing(2);
+    anchor = l->addAnchor(details, Qt::AnchorBottom, l, Qt::AnchorBottom);
+    anchor->setSpacing(12);
+
+    // horizontal anchors
+    anchor = l->addAnchor(l, Qt::AnchorLeft, title, Qt::AnchorLeft);
+    anchor = l->addAnchor(title, Qt::AnchorRight, l, Qt::AnchorRight);
+
+    anchor = l->addAnchor(place, Qt::AnchorLeft, l, Qt::AnchorLeft);
+    anchor->setSpacing(15);
+    anchor = l->addAnchor(place, Qt::AnchorRight, details, Qt::AnchorLeft);
+    anchor->setSpacing(35);
+
+    anchor = l->addAnchor(sun, Qt::AnchorLeft, place, Qt::AnchorHorizontalCenter);
+    anchor = l->addAnchor(sun, Qt::AnchorRight, l, Qt::AnchorHorizontalCenter);
+
+    anchor = l->addAnchor(tabbar, Qt::AnchorHorizontalCenter, details, Qt::AnchorHorizontalCenter);
+    anchor = l->addAnchor(details, Qt::AnchorRight, l, Qt::AnchorRight);
+
+    // QGV setup
+    scene.addItem(w);
+    scene.setBackgroundBrush(Qt::white);
+    QGraphicsView *view = new QGraphicsView(&scene);
+    view->show();
+
+    return app.exec();
+}
+
+#include "main.moc"
diff --git a/examples/graphicsview/weatheranchorlayout/weatheranchorlayout.pro b/examples/graphicsview/weatheranchorlayout/weatheranchorlayout.pro
new file mode 100644
index 0000000..8b1803b
--- /dev/null
+++ b/examples/graphicsview/weatheranchorlayout/weatheranchorlayout.pro
@@ -0,0 +1,16 @@
+######################################################################
+# Automatically generated by qmake (2.01a) Tue May 12 15:22:25 2009
+######################################################################
+
+# Input
+SOURCES += main.cpp
+RESOURCES += weatheranchorlayout.qrc
+
+# install
+target.path = $$[QT_INSTALL_EXAMPLES]/graphicsview/weatheranchorlayout
+sources.files = $$SOURCES $$HEADERS $$RESOURCES weatheranchorlayout.pro
+sources.path = $$[QT_INSTALL_EXAMPLES]/graphicsview/weatheranchorlayout
+INSTALLS += target sources
+
+TARGET = weatheranchorlayout_example
+CONFIG += console
diff --git a/examples/graphicsview/weatheranchorlayout/weatheranchorlayout.qrc b/examples/graphicsview/weatheranchorlayout/weatheranchorlayout.qrc
new file mode 100644
index 0000000..e39f8c0
--- /dev/null
+++ b/examples/graphicsview/weatheranchorlayout/weatheranchorlayout.qrc
@@ -0,0 +1,10 @@
+<!DOCTYPE RCC><RCC version="1.0">
+<qresource>
+    <file>images/5days.jpg</file>
+    <file>images/title.jpg</file>
+    <file>images/place.jpg</file>
+    <file>images/tabbar.jpg</file>
+    <file>images/details.jpg</file>
+    <file>images/weather-few-clouds.png</file>
+</qresource>
+</RCC>
-- 
cgit v0.12


From f1a56f4db2f6d6c395ac6e7023b6e9184140d571 Mon Sep 17 00:00:00 2001
From: Miikka Heikkinen <miikka.heikkinen@digia.com>
Date: Thu, 5 Nov 2009 11:40:27 +0200
Subject: Fixed symbian-abld build problems with xmlpatternsxqts

Qmake generators for symbian can't handle .depends for SUBDIRS values,
instead relying on the order of subdirs. Reordered the subdirs
as a hot fix to get test case to build before qmake can be properly
fixed.

Also removed duplicate inclusion of xmlpatterns.pri, which was causing
compile time warnings due to duplicate MACRO statements in mmps.

Reviewed-by: Janne Koskinen
---
 tests/auto/xmlpatternsxqts/test/test.pro       | 2 --
 tests/auto/xmlpatternsxqts/xmlpatternsxqts.pro | 2 +-
 2 files changed, 1 insertion(+), 3 deletions(-)

diff --git a/tests/auto/xmlpatternsxqts/test/test.pro b/tests/auto/xmlpatternsxqts/test/test.pro
index 603ae65..a69838a 100644
--- a/tests/auto/xmlpatternsxqts/test/test.pro
+++ b/tests/auto/xmlpatternsxqts/test/test.pro
@@ -24,5 +24,3 @@ win32 {
     else: DESTDIR = ../release
 }
 TARGET = tst_xmlpatternsxqts
-
-include (../../xmlpatterns.pri)
diff --git a/tests/auto/xmlpatternsxqts/xmlpatternsxqts.pro b/tests/auto/xmlpatternsxqts/xmlpatternsxqts.pro
index a3b13da..39267c8 100644
--- a/tests/auto/xmlpatternsxqts/xmlpatternsxqts.pro
+++ b/tests/auto/xmlpatternsxqts/xmlpatternsxqts.pro
@@ -1,10 +1,10 @@
 TEMPLATE = subdirs
-SUBDIRS = test
 contains(QT_CONFIG,xmlpatterns) {
   SUBDIRS += lib
   !wince*:lib.file = lib/lib.pro
   test.depends = lib
 }
+SUBDIRS += test
 
 # Needed on the win32-g++ setup and on the test machine arsia.
 INCLUDEPATH += $$QT_BUILD_TREE/include/QtXmlPatterns/private \
-- 
cgit v0.12


From e7dc9a35aa7b0e16457526647a8884ff3b4da4fe Mon Sep 17 00:00:00 2001
From: Thierry Bastian <thierry.bastian@nokia.com>
Date: Thu, 5 Nov 2009 11:08:11 +0100
Subject: Fix textControl so that it ignores mouse press events when needed

This fixes the issue in the itemviews that the selection would not
change when clicking on rich text labels.

Task-number: QTBUG-4516
Reviewed-by: ogoffart
---
 src/gui/text/qtextcontrol.cpp            | 24 ++++++++++++++----------
 src/gui/text/qtextcontrol_p_p.h          |  4 ++--
 tests/auto/qtableview/tst_qtableview.cpp | 19 +++++++++++++++++++
 3 files changed, 35 insertions(+), 12 deletions(-)

diff --git a/src/gui/text/qtextcontrol.cpp b/src/gui/text/qtextcontrol.cpp
index 3f6545c..b727c19 100644
--- a/src/gui/text/qtextcontrol.cpp
+++ b/src/gui/text/qtextcontrol.cpp
@@ -911,7 +911,7 @@ void QTextControl::processEvent(QEvent *e, const QMatrix &matrix, QWidget *conte
             break;
         case QEvent::MouseButtonPress: {
             QMouseEvent *ev = static_cast<QMouseEvent *>(e);
-            d->mousePressEvent(ev->button(), matrix.map(ev->pos()), ev->modifiers(),
+            d->mousePressEvent(ev, ev->button(), matrix.map(ev->pos()), ev->modifiers(),
                                ev->buttons(), ev->globalPos());
             break; }
         case QEvent::MouseMove: {
@@ -979,7 +979,7 @@ void QTextControl::processEvent(QEvent *e, const QMatrix &matrix, QWidget *conte
 #ifndef QT_NO_GRAPHICSVIEW
         case QEvent::GraphicsSceneMousePress: {
             QGraphicsSceneMouseEvent *ev = static_cast<QGraphicsSceneMouseEvent *>(e);
-            d->mousePressEvent(ev->button(), matrix.map(ev->pos()), ev->modifiers(), ev->buttons(),
+            d->mousePressEvent(ev, ev->button(), matrix.map(ev->pos()), ev->modifiers(), ev->buttons(),
                                ev->screenPos());
             break; }
         case QEvent::GraphicsSceneMouseMove: {
@@ -1465,7 +1465,7 @@ QRectF QTextControl::selectionRect() const
     return selectionRect(d->cursor);
 }
 
-void QTextControlPrivate::mousePressEvent(Qt::MouseButton button, const QPointF &pos, Qt::KeyboardModifiers modifiers,
+void QTextControlPrivate::mousePressEvent(QEvent *e, Qt::MouseButton button, const QPointF &pos, Qt::KeyboardModifiers modifiers,
                                           Qt::MouseButtons buttons, const QPoint &globalPos)
 {
     Q_Q(QTextControl);
@@ -1479,11 +1479,11 @@ void QTextControlPrivate::mousePressEvent(Qt::MouseButton button, const QPointF
             cursor.clearSelection();
         }
     }
-    if (!(button & Qt::LeftButton))
-        return;
-
-    if (!((interactionFlags & Qt::TextSelectableByMouse) || (interactionFlags & Qt::TextEditable)))
-        return;
+    if (!(button & Qt::LeftButton) ||
+        !((interactionFlags & Qt::TextSelectableByMouse) || (interactionFlags & Qt::TextEditable))) {
+            e->ignore();
+            return;
+    }
 
     cursorIsFocusIndicator = false;
     const QTextCursor oldSelection = cursor;
@@ -1507,8 +1507,10 @@ void QTextControlPrivate::mousePressEvent(Qt::MouseButton button, const QPointF
         trippleClickTimer.stop();
     } else {
         int cursorPos = q->hitTest(pos, Qt::FuzzyHit);
-        if (cursorPos == -1)
+        if (cursorPos == -1) {
+            e->ignore();
             return;
+        }
 
 #if !defined(QT_NO_IM)
         QTextLayout *layout = cursor.block().layout();
@@ -1519,8 +1521,10 @@ void QTextControlPrivate::mousePressEvent(Qt::MouseButton button, const QPointF
                                button, buttons, modifiers);
                 ctx->mouseHandler(cursorPos - cursor.position(), &ev);
             }
-            if (!layout->preeditAreaText().isEmpty())
+            if (!layout->preeditAreaText().isEmpty()) {
+                e->ignore();
                 return;
+            }
         }
 #endif
         if (modifiers == Qt::ShiftModifier) {
diff --git a/src/gui/text/qtextcontrol_p_p.h b/src/gui/text/qtextcontrol_p_p.h
index ca9db9f..66459f6 100644
--- a/src/gui/text/qtextcontrol_p_p.h
+++ b/src/gui/text/qtextcontrol_p_p.h
@@ -131,10 +131,10 @@ public:
     QString anchorForCursor(const QTextCursor &anchor) const;
 
     void keyPressEvent(QKeyEvent *e);
-    void mousePressEvent(Qt::MouseButton button, const QPointF &pos,
+    void mousePressEvent(QEvent *e, Qt::MouseButton button, const QPointF &pos,
                          Qt::KeyboardModifiers modifiers,
                          Qt::MouseButtons buttons,
-                         const QPoint &globalPos = QPoint());
+                         const QPoint &globalPos);
     void mouseMoveEvent(Qt::MouseButtons buttons, const QPointF &pos);
     void mouseReleaseEvent(Qt::MouseButton button, const QPointF &pos);
     void mouseDoubleClickEvent(QEvent *e, Qt::MouseButton button, const QPointF &pos);
diff --git a/tests/auto/qtableview/tst_qtableview.cpp b/tests/auto/qtableview/tst_qtableview.cpp
index 227ca6f..f571e8a 100644
--- a/tests/auto/qtableview/tst_qtableview.cpp
+++ b/tests/auto/qtableview/tst_qtableview.cpp
@@ -197,6 +197,7 @@ private slots:
     void task259308_scrollVerticalHeaderSwappedSections();
     void task191545_dragSelectRows();
     void taskQTBUG_5062_spansInconsistency();
+    void taskQTBUG_4516_clickOnRichTextLabel();
 
     void mouseWheel_data();
     void mouseWheel();
@@ -3885,6 +3886,24 @@ void tst_QTableView::taskQTBUG_5062_spansInconsistency()
     VERIFY_SPANS_CONSISTENCY(&view);
 }
 
+void tst_QTableView::taskQTBUG_4516_clickOnRichTextLabel()
+{
+    QTableView view;
+    QStandardItemModel model(5,5);
+    view.setModel(&model);
+    QLabel label("rich text");
+    label.setTextFormat(Qt::RichText);
+    view.setIndexWidget(model.index(1,1), &label);
+    view.setCurrentIndex(model.index(0,0));
+    QCOMPARE(view.currentIndex(), model.index(0,0));
+
+    QTest::mouseClick(&label, Qt::LeftButton);
+    QCOMPARE(view.currentIndex(), model.index(1,1));
+
+
+}
+
+
 void tst_QTableView::changeHeaderData()
 {
     QTableView view;
-- 
cgit v0.12


From c93ca96552b70a6bd7332aec3504485e82d4d032 Mon Sep 17 00:00:00 2001
From: Olivier Goffart <ogoffart@trolltech.com>
Date: Thu, 5 Nov 2009 10:52:55 +0100
Subject: Stylesheet:  Fix lineedit size with an empty stylesheet with some
 styles

Now passes tst_QStyleSheetStyle::emptyStyleSheet with gtk style

Somehow there were some wrong and uneeded default padding for the QLineEdit
 with some styles

Task-number: QTBUG-5434
Reviewed-by: axis
---
 src/gui/styles/qstylesheetstyle_default.cpp | 43 -----------------------------
 1 file changed, 43 deletions(-)

diff --git a/src/gui/styles/qstylesheetstyle_default.cpp b/src/gui/styles/qstylesheetstyle_default.cpp
index 406633e..f79f8e0 100644
--- a/src/gui/styles/qstylesheetstyle_default.cpp
+++ b/src/gui/styles/qstylesheetstyle_default.cpp
@@ -203,49 +203,6 @@ StyleSheet QStyleSheetStyle::getDefaultStyleSheet() const
         ADD_STYLE_RULE;
     }
 
-    /*QLineEdit[style="QCleanlooksStyle"] {
-        padding-top: 2px;
-        padding-bottom: 2px;
-    }*/
-    if (baseStyle()->inherits("QCleanlooksStyle"))
-    {
-        SET_ELEMENT_NAME(QLatin1String("QLineEdit"));
-        ADD_BASIC_SELECTOR;
-        ADD_SELECTOR;
-
-
-        SET_PROPERTY(QLatin1String("padding-top"), PaddingTop);
-        ADD_VALUE(Value::Identifier, QString::fromLatin1("2px"));
-        ADD_DECLARATION;
-
-        SET_PROPERTY(QLatin1String("padding-bottom"), PaddingBottom);
-        ADD_VALUE(Value::Identifier, QString::fromLatin1("2px"));
-        ADD_DECLARATION;
-
-        ADD_STYLE_RULE;
-    }
-
-    /*QLineEdit[style="QWindowsXPStyle"],
-      QLineEdit[style="QWindowsVistaStyle"],
-      QLineEdit[style="QGtkStyle"] {
-        padding-top: 1px;
-        padding-bottom: 1px;
-    }*/
-    if (baseStyle()->inherits("QWindowsXPStyle") || baseStyle()->inherits("QGtkStyle"))
-    {
-        SET_ELEMENT_NAME(QLatin1String("QLineEdit"));
-
-        SET_PROPERTY(QLatin1String("padding-top"), PaddingTop);
-        ADD_VALUE(Value::Identifier, QString::fromLatin1("1px"));
-        ADD_DECLARATION;
-
-        SET_PROPERTY(QLatin1String("padding-bottom"), PaddingBottom);
-        ADD_VALUE(Value::Identifier, QString::fromLatin1("1px"));
-        ADD_DECLARATION;
-
-        ADD_STYLE_RULE;
-    }
-
     /*QFrame {
         border: native;
     }*/
-- 
cgit v0.12


From ff87ab95b42c87528c4dff16382a5894c6ddd4c3 Mon Sep 17 00:00:00 2001
From: Thierry Bastian <thierry.bastian@nokia.com>
Date: Thu, 5 Nov 2009 11:44:17 +0100
Subject: Fix autotest to match API changes

---
 tests/auto/qanimationgroup/tst_qanimationgroup.cpp | 84 +++++++++++-----------
 1 file changed, 42 insertions(+), 42 deletions(-)

diff --git a/tests/auto/qanimationgroup/tst_qanimationgroup.cpp b/tests/auto/qanimationgroup/tst_qanimationgroup.cpp
index 81c51ed..b4e4a49 100644
--- a/tests/auto/qanimationgroup/tst_qanimationgroup.cpp
+++ b/tests/auto/qanimationgroup/tst_qanimationgroup.cpp
@@ -165,9 +165,9 @@ void tst_QAnimationGroup::emptyGroup()
 
     QCOMPARE(groupStateChangedSpy.count(), 2);
 
-    QCOMPARE(qVariantValue<QAbstractAnimation::State>(groupStateChangedSpy.at(0).at(1)),
+    QCOMPARE(qVariantValue<QAbstractAnimation::State>(groupStateChangedSpy.at(0).first()),
              QAnimationGroup::Running);
-    QCOMPARE(qVariantValue<QAbstractAnimation::State>(groupStateChangedSpy.at(1).at(1)),
+    QCOMPARE(qVariantValue<QAbstractAnimation::State>(groupStateChangedSpy.at(1).first()),
              QAnimationGroup::Stopped);
 
     QCOMPARE(group.state(), QAnimationGroup::Stopped);
@@ -180,9 +180,9 @@ void tst_QAnimationGroup::emptyGroup()
 
     group.start();
 
-    QCOMPARE(qVariantValue<QAbstractAnimation::State>(groupStateChangedSpy.at(2).at(1)),
+    QCOMPARE(qVariantValue<QAbstractAnimation::State>(groupStateChangedSpy.at(2).first()),
              QAnimationGroup::Running);
-    QCOMPARE(qVariantValue<QAbstractAnimation::State>(groupStateChangedSpy.at(3).at(1)),
+    QCOMPARE(qVariantValue<QAbstractAnimation::State>(groupStateChangedSpy.at(3).first()),
              QAnimationGroup::Stopped);
 
     QCOMPARE(group.state(), QAnimationGroup::Stopped);
@@ -259,54 +259,54 @@ void tst_QAnimationGroup::setCurrentTime()
     QCOMPARE(notTimeDriven->state(), QAnimationGroup::Stopped);
     QCOMPARE(loopsForever->state(), QAnimationGroup::Stopped);
 
-    QCOMPARE(group.currentTime(), 1);
-    QCOMPARE(sequence->currentTime(), 1);
-    QCOMPARE(a1_s_o1->currentTime(), 1);
-    QCOMPARE(a2_s_o1->currentTime(), 0);
-    QCOMPARE(a3_s_o1->currentTime(), 0);
-    QCOMPARE(a1_s_o2->currentTime(), 1);
-    QCOMPARE(a1_s_o3->currentTime(), 0);
-    QCOMPARE(a1_p_o1->currentTime(), 1);
-    QCOMPARE(a1_p_o2->currentTime(), 1);
-    QCOMPARE(a1_p_o3->currentTime(), 1);
-    QCOMPARE(notTimeDriven->currentTime(), 1);
-    QCOMPARE(loopsForever->currentTime(), 1);
+    QCOMPARE(group.currentLoopTime(), 1);
+    QCOMPARE(sequence->currentLoopTime(), 1);
+    QCOMPARE(a1_s_o1->currentLoopTime(), 1);
+    QCOMPARE(a2_s_o1->currentLoopTime(), 0);
+    QCOMPARE(a3_s_o1->currentLoopTime(), 0);
+    QCOMPARE(a1_s_o2->currentLoopTime(), 1);
+    QCOMPARE(a1_s_o3->currentLoopTime(), 0);
+    QCOMPARE(a1_p_o1->currentLoopTime(), 1);
+    QCOMPARE(a1_p_o2->currentLoopTime(), 1);
+    QCOMPARE(a1_p_o3->currentLoopTime(), 1);
+    QCOMPARE(notTimeDriven->currentLoopTime(), 1);
+    QCOMPARE(loopsForever->currentLoopTime(), 1);
 
     // Current time = 250
     group.setCurrentTime(250);
-    QCOMPARE(group.currentTime(), 250);
-    QCOMPARE(sequence->currentTime(), 250);
-    QCOMPARE(a1_s_o1->currentTime(), 250);
-    QCOMPARE(a2_s_o1->currentTime(), 0);
-    QCOMPARE(a3_s_o1->currentTime(), 0);
-    QCOMPARE(a1_s_o2->currentTime(), 250);
-    QCOMPARE(a1_s_o3->currentTime(), 0);
-    QCOMPARE(a1_p_o1->currentTime(), 250);
-    QCOMPARE(a1_p_o2->currentTime(), 0);
+    QCOMPARE(group.currentLoopTime(), 250);
+    QCOMPARE(sequence->currentLoopTime(), 250);
+    QCOMPARE(a1_s_o1->currentLoopTime(), 250);
+    QCOMPARE(a2_s_o1->currentLoopTime(), 0);
+    QCOMPARE(a3_s_o1->currentLoopTime(), 0);
+    QCOMPARE(a1_s_o2->currentLoopTime(), 250);
+    QCOMPARE(a1_s_o3->currentLoopTime(), 0);
+    QCOMPARE(a1_p_o1->currentLoopTime(), 250);
+    QCOMPARE(a1_p_o2->currentLoopTime(), 0);
     QCOMPARE(a1_p_o2->currentLoop(), 1);
-    QCOMPARE(a1_p_o3->currentTime(), 250);
-    QCOMPARE(notTimeDriven->currentTime(), 250);
-    QCOMPARE(loopsForever->currentTime(), 0);
+    QCOMPARE(a1_p_o3->currentLoopTime(), 250);
+    QCOMPARE(notTimeDriven->currentLoopTime(), 250);
+    QCOMPARE(loopsForever->currentLoopTime(), 0);
     QCOMPARE(loopsForever->currentLoop(), 1);
     QCOMPARE(sequence->currentAnimation(), a2_s_o1);
 
     // Current time = 251
     group.setCurrentTime(251);
-    QCOMPARE(group.currentTime(), 251);
-    QCOMPARE(sequence->currentTime(), 251);
-    QCOMPARE(a1_s_o1->currentTime(), 250);
-    QCOMPARE(a2_s_o1->currentTime(), 1);
+    QCOMPARE(group.currentLoopTime(), 251);
+    QCOMPARE(sequence->currentLoopTime(), 251);
+    QCOMPARE(a1_s_o1->currentLoopTime(), 250);
+    QCOMPARE(a2_s_o1->currentLoopTime(), 1);
     QCOMPARE(a2_s_o1->currentLoop(), 0);
-    QCOMPARE(a3_s_o1->currentTime(), 0);
-    QCOMPARE(sequence2->currentTime(), 251);
-    QCOMPARE(a1_s_o2->currentTime(), 250);
-    QCOMPARE(a1_s_o3->currentTime(), 1);
-    QCOMPARE(a1_p_o1->currentTime(), 250);
-    QCOMPARE(a1_p_o2->currentTime(), 1);
+    QCOMPARE(a3_s_o1->currentLoopTime(), 0);
+    QCOMPARE(sequence2->currentLoopTime(), 251);
+    QCOMPARE(a1_s_o2->currentLoopTime(), 250);
+    QCOMPARE(a1_s_o3->currentLoopTime(), 1);
+    QCOMPARE(a1_p_o1->currentLoopTime(), 250);
+    QCOMPARE(a1_p_o2->currentLoopTime(), 1);
     QCOMPARE(a1_p_o2->currentLoop(), 1);
-    QCOMPARE(a1_p_o3->currentTime(), 250);
-    QCOMPARE(notTimeDriven->currentTime(), 251);
-    QCOMPARE(loopsForever->currentTime(), 1);
+    QCOMPARE(a1_p_o3->currentLoopTime(), 250);
+    QCOMPARE(notTimeDriven->currentLoopTime(), 251);
+    QCOMPARE(loopsForever->currentLoopTime(), 1);
     QCOMPARE(sequence->currentAnimation(), a2_s_o1);
 }
 
@@ -356,7 +356,7 @@ void tst_QAnimationGroup::addChildTwice()
     parent->addAnimation(subGroup);
     QCOMPARE(parent->animationCount(), 1);
 
-    parent->clearAnimations();
+    parent->clear();
 
     QCOMPARE(parent->animationCount(), 0);
 
-- 
cgit v0.12


From b2c60696dd54656c1a0d588342cc3c7beee70876 Mon Sep 17 00:00:00 2001
From: Thierry Bastian <thierry.bastian@nokia.com>
Date: Thu, 5 Nov 2009 11:48:31 +0100
Subject: Fixed Q3DockArea::setAcceptDockWindow which didn't work at all

Task-number: QTBUG-2026
Reviewed-by: ogoffart
---
 src/qt3support/widgets/q3dockarea.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/qt3support/widgets/q3dockarea.cpp b/src/qt3support/widgets/q3dockarea.cpp
index bb34622..fbe235e 100644
--- a/src/qt3support/widgets/q3dockarea.cpp
+++ b/src/qt3support/widgets/q3dockarea.cpp
@@ -1139,7 +1139,7 @@ void Q3DockArea::setAcceptDockWindow(Q3DockWindow *dw, bool accept)
 {
     if (accept)
         forbiddenWidgets.removeAll(dw);
-    else if (forbiddenWidgets.contains(dw))
+    else if (!forbiddenWidgets.contains(dw))
         forbiddenWidgets.append(dw);
 }
 
-- 
cgit v0.12


From 4bf7f90a27377f439e86d6175e5e3cdebd131be0 Mon Sep 17 00:00:00 2001
From: Andreas Aardal Hanssen <andreas.aardal.hanssen@nokia.com>
Date: Thu, 5 Nov 2009 12:12:22 +0100
Subject: Always set a clip on the painter in QGraphicsView.

This allows items to check painter->clipRegion() to find out what the
imposed clip is, in order to cull elements that don't need to be
painted. This is an alternative approach to getting the same
information from QStyleOptionGraphicsItem::exposedRect. It's better
because it's a pull operation, but it's slightly worse because it
doesn't include the complete system clip, and because QRegion has
integer resolution only (whereas QGraphicsItem's coordinate uses
qreal.

A better approach may be to access QPainter's combined clip region;
this option is open for future versions of Qt.

Original patch by Warwick (which is why he's on reviewed-by), but the
patch was modified to operate in device instead of logical coordinates.

Reviewed-by: jasplin
Reviewed-by: Warwick Allison
---
 src/gui/graphicsview/qgraphicsview.cpp         |  3 ++
 tests/auto/qgraphicsview/tst_qgraphicsview.cpp | 72 ++++++++++++++++++++++++++
 2 files changed, 75 insertions(+)

diff --git a/src/gui/graphicsview/qgraphicsview.cpp b/src/gui/graphicsview/qgraphicsview.cpp
index c88f678..d1dd26f 100644
--- a/src/gui/graphicsview/qgraphicsview.cpp
+++ b/src/gui/graphicsview/qgraphicsview.cpp
@@ -3252,10 +3252,13 @@ void QGraphicsView::paintEvent(QPaintEvent *event)
 
     // Determine the exposed region
     d->exposedRegion = event->region();
+    if (d->exposedRegion.isEmpty())
+        d->exposedRegion = viewport()->rect();
     QRectF exposedSceneRect = mapToScene(d->exposedRegion.boundingRect()).boundingRect();
 
     // Set up the painter
     QPainter painter(viewport());
+    painter.setClipRect(event->rect(), Qt::IntersectClip);
 #ifndef QT_NO_RUBBERBAND
     if (d->rubberBanding && !d->rubberBandRect.isEmpty())
         painter.save();
diff --git a/tests/auto/qgraphicsview/tst_qgraphicsview.cpp b/tests/auto/qgraphicsview/tst_qgraphicsview.cpp
index f07453c..9c6aa39 100644
--- a/tests/auto/qgraphicsview/tst_qgraphicsview.cpp
+++ b/tests/auto/qgraphicsview/tst_qgraphicsview.cpp
@@ -217,6 +217,7 @@ private slots:
     void update();
     void inputMethodSensitivity();
     void inputContextReset();
+    void defaultClipIntersectToView();
 
     // task specific tests below me
     void task172231_untransformableItems();
@@ -3692,6 +3693,77 @@ void tst_QGraphicsView::inputContextReset()
     QCOMPARE(inputContext.resets, 0);
 }
 
+class ViewClipTester : public QGraphicsView
+{
+public:
+    ViewClipTester(QGraphicsScene *scene = 0)
+        : QGraphicsView(scene)
+    { }
+    QRegion clipRegion;
+
+protected:
+    void drawBackground(QPainter *painter, const QRectF &rect)
+    {
+        clipRegion = painter->clipRegion();
+    }
+};
+
+class ItemClipTester : public QGraphicsRectItem
+{
+public:
+    ItemClipTester() : QGraphicsRectItem(0, 0, 20, 20)
+    {
+        setBrush(Qt::blue);
+    }
+    QRegion clipRegion;
+
+    void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0)
+    {
+        clipRegion = painter->clipRegion();
+        QGraphicsRectItem::paint(painter, option, widget);
+    }
+};
+
+void tst_QGraphicsView::defaultClipIntersectToView()
+{
+    QGraphicsScene scene;
+    ItemClipTester *tester = new ItemClipTester;
+    scene.addItem(tester);
+
+    ViewClipTester view(&scene);
+    view.setAlignment(Qt::AlignTop | Qt::AlignLeft);
+    view.setFrameStyle(0);
+    view.resize(200, 200);
+    view.show();
+    QTRY_COMPARE(QApplication::activeWindow(), (QWidget *)&view);
+
+    QRect viewRect(0, 0, 200, 200);
+    QCOMPARE(view.clipRegion, QRegion(viewRect));
+    QCOMPARE(tester->clipRegion, QRegion(viewRect));
+
+    view.viewport()->update(0, 0, 5, 5);
+    view.viewport()->update(10, 10, 5, 5);
+    qApp->processEvents();
+    viewRect = QRect(0, 0, 15, 15);
+    QCOMPARE(view.clipRegion, QRegion(viewRect));
+    QCOMPARE(tester->clipRegion, QRegion(viewRect));
+
+    view.scale(2, 2);
+    qApp->processEvents();
+
+    viewRect.moveTop(-viewRect.height());
+    viewRect = QRect(0, 0, 100, 100);
+    QCOMPARE(view.clipRegion, QRegion(viewRect));
+    QCOMPARE(tester->clipRegion, QRegion(viewRect));
+
+    view.viewport()->update(0, 0, 5, 5);
+    view.viewport()->update(10, 10, 5, 5);
+    qApp->processEvents();
+    viewRect = QRect(0, 0, 8, 8);
+    QCOMPARE(view.clipRegion, QRegion(viewRect));
+    QCOMPARE(tester->clipRegion, QRegion(viewRect));
+}
+
 void tst_QGraphicsView::task253415_reconnectUpdateSceneOnSceneChanged()
 {
     QGraphicsView view;
-- 
cgit v0.12


From 8513a37e7fe236cdb476236f1c8448b64f9aed28 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Sami=20Meril=C3=A4?= <sami.merila@nokia.com>
Date: Thu, 5 Nov 2009 13:17:34 +0200
Subject: QS60Style: Checked menu check indicators are not shown

QS60Style does not draw checked menu indicators at all. This is due
to that it initializes used style option with style option's base class.
Therefore relevant data for menu item indicator is not copied.

Task-number: QTBUG-4717
Reviewed-by: Alessandro Portale
---
 src/gui/styles/qs60style.cpp | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/src/gui/styles/qs60style.cpp b/src/gui/styles/qs60style.cpp
index c0a1f76..845ab3e 100644
--- a/src/gui/styles/qs60style.cpp
+++ b/src/gui/styles/qs60style.cpp
@@ -1676,18 +1676,18 @@ void QS60Style::drawControl(ControlElement element, const QStyleOption *option,
             if (!styleHint(SH_UnderlineShortcut, menuItem, widget))
                 text_flags |= Qt::TextHideMnemonic;
 
-            QRect iconRect =
-                subElementRect(SE_ItemViewItemDecoration, &optionMenuItem, widget);
-            QRect textRect = subElementRect(SE_ItemViewItemText, &optionMenuItem, widget);
-
             if ((option->state & State_Selected) && (option->state & State_Enabled))
                 QS60StylePrivate::drawSkinElement(QS60StylePrivate::SE_ListHighlight, painter, option->rect, flags);
 
+            QRect iconRect = subElementRect(SE_ItemViewItemDecoration, &optionMenuItem, widget);
+            QRect textRect = subElementRect(SE_ItemViewItemText, &optionMenuItem, widget);
+
             //todo: move the vertical spacing stuff into subElementRect
             const int vSpacing = QS60StylePrivate::pixelMetric(QStyle::PM_LayoutVerticalSpacing);
             if (checkable){
+                const int hSpacing = QS60StylePrivate::pixelMetric(QStyle::PM_LayoutHorizontalSpacing);
                 QStyleOptionMenuItem optionCheckBox;
-                optionCheckBox.QStyleOption::operator=(*menuItem);
+                optionCheckBox.QStyleOptionMenuItem::operator=(*menuItem);
                 optionCheckBox.rect.setWidth(pixelMetric(PM_IndicatorWidth));
                 optionCheckBox.rect.setHeight(pixelMetric(PM_IndicatorHeight));
                 const int moveByX = optionCheckBox.rect.width()+vSpacing;
@@ -1696,6 +1696,7 @@ void QS60Style::drawControl(ControlElement element, const QStyleOption *option,
                     iconRect.translate(moveByX, 0);
                     iconRect.setWidth(iconRect.width()+vSpacing);
                     textRect.setWidth(textRect.width()-moveByX-vSpacing);
+                    optionCheckBox.rect.translate(vSpacing/2, hSpacing/2);
                 } else {
                     textRect.setWidth(textRect.width()-moveByX);
                     iconRect.setWidth(iconRect.width()+vSpacing);
-- 
cgit v0.12


From c13ebfd7296ca5e2c60f142b7041dd8f417de6d2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Sami=20Meril=C3=A4?= <sami.merila@nokia.com>
Date: Thu, 5 Nov 2009 13:39:26 +0200
Subject: QProgressBar is drawn stretched in QS60Style

Style draws the ends of scrollbar as too wide, causing the themegraphic
to stratch which looks horrible.

Task-number: QTBUG-5445
Reviewed-by: Alessandro Portale
---
 src/gui/styles/qs60style.cpp | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/src/gui/styles/qs60style.cpp b/src/gui/styles/qs60style.cpp
index 845ab3e..0b126a6 100644
--- a/src/gui/styles/qs60style.cpp
+++ b/src/gui/styles/qs60style.cpp
@@ -831,6 +831,11 @@ QSize QS60StylePrivate::partSize(QS60StyleEnums::SkinParts part, SkinElementFlag
                 pixelMetric(QStyle::PM_SliderControlThickness), Qt::IgnoreAspectRatio);
             break;
 
+        case QS60StyleEnums::SP_QgnGrafBarFrameSideL:
+        case QS60StyleEnums::SP_QgnGrafBarFrameSideR:
+            result.setWidth(pixelMetric(PM_Custom_FrameCornerWidth));
+            break;
+            
         case QS60StyleEnums::SP_QsnCpScrollHandleBottomPressed:
         case QS60StyleEnums::SP_QsnCpScrollHandleTopPressed:
         case QS60StyleEnums::SP_QsnCpScrollHandleMiddlePressed:
-- 
cgit v0.12


From 23390af0bfb8828e0e58819a5ad2249f34e12205 Mon Sep 17 00:00:00 2001
From: Thierry Bastian <thierry.bastian@nokia.com>
Date: Thu, 5 Nov 2009 13:48:28 +0100
Subject: Another fix for the registration of the animations

---
 src/corelib/animation/qabstractanimation.cpp | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/src/corelib/animation/qabstractanimation.cpp b/src/corelib/animation/qabstractanimation.cpp
index 0cdc40c..d46ac92 100644
--- a/src/corelib/animation/qabstractanimation.cpp
+++ b/src/corelib/animation/qabstractanimation.cpp
@@ -348,13 +348,16 @@ void QAbstractAnimationPrivate::setState(QAbstractAnimation::State newState)
     state = newState;
     QWeakPointer<QAbstractAnimation> guard(q);
 
-    //unregistration of the animation must always happen before calls to
+    //(un)registration of the animation must always happen before calls to
     //virtual function (updateState) to ensure a correct state of the timer
+    bool isTopLevel = !group || group->state() == QAbstractAnimation::Stopped;
     if (oldState == QAbstractAnimation::Running) {
         if (newState == QAbstractAnimation::Paused && hasRegisteredTimer)
             QUnifiedTimer::instance()->ensureTimerUpdate();
         //the animation, is not running any more
         QUnifiedTimer::instance()->unregisterAnimation(q);
+    } else {
+        QUnifiedTimer::instance()->registerAnimation(q, isTopLevel);
     }
 
     q->updateState(newState, oldState);
@@ -371,8 +374,6 @@ void QAbstractAnimationPrivate::setState(QAbstractAnimation::State newState)
         break;
     case QAbstractAnimation::Running:
         {
-            bool isTopLevel = !group || group->state() == QAbstractAnimation::Stopped;
-            QUnifiedTimer::instance()->registerAnimation(q, isTopLevel);
 
             // this ensures that the value is updated now that the animation is running
             if (oldState == QAbstractAnimation::Stopped) {
-- 
cgit v0.12


From 0d637ac6a852fb098e1945446536d1b15f5d8660 Mon Sep 17 00:00:00 2001
From: ck <qt-info@nokia.com>
Date: Thu, 5 Nov 2009 13:54:19 +0100
Subject: Assistant: Look for document encoding in XML headers as well.

Task-number:  QTBUG-1770
Reviewed-by: kh1

Conflicts:

	tools/assistant/lib/lib.pro
---
 tools/assistant/lib/lib.pro                        |   3 +-
 tools/assistant/lib/qhelp_global.cpp               | 112 +++++++++++++++++++++
 tools/assistant/lib/qhelp_global.h                 |  58 ++---------
 tools/assistant/lib/qhelpgenerator.cpp             |   2 +-
 .../lib/qhelpsearchindexwriter_clucene.cpp         |   4 +-
 .../lib/qhelpsearchindexwriter_default.cpp         |   2 +-
 6 files changed, 124 insertions(+), 57 deletions(-)
 create mode 100644 tools/assistant/lib/qhelp_global.cpp

diff --git a/tools/assistant/lib/lib.pro b/tools/assistant/lib/lib.pro
index 011dec2..51933de 100644
--- a/tools/assistant/lib/lib.pro
+++ b/tools/assistant/lib/lib.pro
@@ -40,7 +40,8 @@ SOURCES += qhelpenginecore.cpp \
     qhelpsearchindex_default.cpp \
     qhelpsearchindexwriter_default.cpp \
     qhelpsearchindexreader_default.cpp \
-    qhelpsearchindexreader.cpp
+    qhelpsearchindexreader.cpp \
+    qhelp_global.cpp
 
 # access to clucene
 SOURCES += qhelpsearchindexwriter_clucene.cpp \
diff --git a/tools/assistant/lib/qhelp_global.cpp b/tools/assistant/lib/qhelp_global.cpp
new file mode 100644
index 0000000..980de27
--- /dev/null
+++ b/tools/assistant/lib/qhelp_global.cpp
@@ -0,0 +1,112 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Qt Assistant.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights.  These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** If you have questions regarding the use of this file, please contact
+** Nokia at qt-info@nokia.com.
+**
+**
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtCore/QRegExp>
+#include <QtCore/QMutexLocker>
+#include <QtGui/QTextDocument>
+
+#include "qhelp_global.h"
+
+QString QHelpGlobal::uniquifyConnectionName(const QString &name, void *pointer)
+{
+    static int counter = 0;
+    static QMutex mutex;
+
+    QMutexLocker locker(&mutex);
+    if (++counter > 1000)
+        counter = 0;
+
+    return QString::fromLatin1("%1-%2-%3").
+        arg(name).arg(long(pointer)).arg(counter);
+}
+
+QString QHelpGlobal::documentTitle(const QString &content)
+{
+    QString title = QObject::tr("Untitled");
+    if (!content.isEmpty()) {
+        int start = content.indexOf(QLatin1String("<title>"), 0, Qt::CaseInsensitive) + 7;
+        int end = content.indexOf(QLatin1String("</title>"), 0, Qt::CaseInsensitive);
+        if ((end - start) > 0) {
+            title = content.mid(start, end - start);
+            if (Qt::mightBeRichText(title) || title.contains(QLatin1Char('&'))) {
+                QTextDocument doc;
+                doc.setHtml(title);
+                title = doc.toPlainText();
+            }
+        }
+    }
+    return title;
+}
+
+QString QHelpGlobal::codecFromData(const QByteArray &data)
+{
+    QString codec = codecFromXmlData(data);
+    if (codec.isEmpty())
+        codec = codecFromHtmlData(data);
+    return codec.isEmpty() ? QLatin1String("utf-8") : codec;
+}
+
+QString QHelpGlobal::codecFromHtmlData(const QByteArray &data)
+{
+    QString content = QString::fromUtf8(data.constData(), data.size());
+    int start = content.indexOf(QLatin1String("<meta"), 0, Qt::CaseInsensitive);
+    if (start > 0) {
+        int end;
+        QRegExp r(QLatin1String("charset=([^\"\\s]+)"));
+        while (start != -1) {
+            end = content.indexOf(QLatin1Char('>'), start) + 1;
+            const QString &meta = content.mid(start, end - start).toLower();
+            if (r.indexIn(meta) != -1)
+                return r.cap(1);
+            start = content.indexOf(QLatin1String("<meta"), end,
+                                    Qt::CaseInsensitive);
+        }
+    }
+    return QString();
+}
+
+QString QHelpGlobal::codecFromXmlData(const QByteArray &data)
+{
+    QString content = QString::fromUtf8(data.constData(), data.size());
+    const QRegExp encodingExp(QLatin1String("^\\s*<\\?xml version="
+        "\"\\d\\.\\d\" encoding=\"([^\"]+)\"\\?>.*"));
+    return encodingExp.exactMatch(content) ? encodingExp.cap(1) : QString();
+}
diff --git a/tools/assistant/lib/qhelp_global.h b/tools/assistant/lib/qhelp_global.h
index 723d867..4e31d67 100644
--- a/tools/assistant/lib/qhelp_global.h
+++ b/tools/assistant/lib/qhelp_global.h
@@ -45,9 +45,6 @@
 #include <QtCore/qglobal.h>
 #include <QtCore/QString>
 #include <QtCore/QObject>
-#include <QtCore/QRegExp>
-#include <QtCore/QMutexLocker>
-#include <QtGui/QTextDocument>
 
 QT_BEGIN_HEADER
 
@@ -65,56 +62,13 @@ QT_MODULE(Help)
 
 class QHelpGlobal {
 public:
-    static QString uniquifyConnectionName(const QString &name, void *pointer)
-    {
-        static int counter = 0;
-        static QMutex mutex;
+    static QString uniquifyConnectionName(const QString &name, void *pointer);
+    static QString documentTitle(const QString &content);
+    static QString codecFromData(const QByteArray &data);
 
-        QMutexLocker locker(&mutex);
-        if (++counter > 1000)
-            counter = 0;
-        
-        return QString::fromLatin1("%1-%2-%3")
-            .arg(name).arg(long(pointer)).arg(counter);
-    };
-
-    static QString documentTitle(const QString &content)
-    {
-        QString title = QObject::tr("Untitled");
-        if (!content.isEmpty()) {
-            int start = content.indexOf(QLatin1String("<title>"), 0, Qt::CaseInsensitive) + 7;
-            int end = content.indexOf(QLatin1String("</title>"), 0, Qt::CaseInsensitive);
-            if ((end - start) > 0) {
-                title = content.mid(start, end - start);
-                if (Qt::mightBeRichText(title) || title.contains(QLatin1Char('&'))) {
-                    QTextDocument doc;
-                    doc.setHtml(title);
-                    title = doc.toPlainText();
-                }
-            }
-        }
-        return title;
-    };
-
-    static QString charsetFromData(const QByteArray &data)
-    {
-        QString content = QString::fromUtf8(data.constData(), data.size());
-        int start =
-            content.indexOf(QLatin1String("<meta"), 0, Qt::CaseInsensitive);
-        if (start > 0) {
-            int end;
-            QRegExp r(QLatin1String("charset=([^\"\\s]+)"));
-            while (start != -1) {
-                end = content.indexOf(QLatin1Char('>'), start) + 1;
-                const QString &meta = content.mid(start, end - start).toLower();
-                if (r.indexIn(meta) != -1)
-                    return r.cap(1);
-                start = content.indexOf(QLatin1String("<meta"), end,
-                    Qt::CaseInsensitive);
-            }
-        }
-        return QLatin1String("utf-8");
-    }
+private:
+    static QString codecFromHtmlData(const QByteArray &data);
+    static QString codecFromXmlData(const QByteArray &data);
 };
 
 QT_END_NAMESPACE
diff --git a/tools/assistant/lib/qhelpgenerator.cpp b/tools/assistant/lib/qhelpgenerator.cpp
index 0294b30..48d73aa 100644
--- a/tools/assistant/lib/qhelpgenerator.cpp
+++ b/tools/assistant/lib/qhelpgenerator.cpp
@@ -528,7 +528,7 @@ bool QHelpGenerator::insertFiles(const QStringList &files, const QString &rootPa
         QByteArray data = fi.readAll();
         if (fileName.endsWith(QLatin1String(".html"))
             || fileName.endsWith(QLatin1String(".htm"))) {
-                charSet = QHelpGlobal::charsetFromData(data);
+                charSet = QHelpGlobal::codecFromData(data);
                 QTextStream stream(&data);
                 stream.setCodec(QTextCodec::codecForName(charSet.toLatin1().constData()));
                 title = QHelpGlobal::documentTitle(stream.readAll());
diff --git a/tools/assistant/lib/qhelpsearchindexwriter_clucene.cpp b/tools/assistant/lib/qhelpsearchindexwriter_clucene.cpp
index 284cbd3..ab32537 100644
--- a/tools/assistant/lib/qhelpsearchindexwriter_clucene.cpp
+++ b/tools/assistant/lib/qhelpsearchindexwriter_clucene.cpp
@@ -430,8 +430,8 @@ private:
     QString readData(const QByteArray &data)
     {
         QTextStream textStream(data);
-        QByteArray charSet = QHelpGlobal::charsetFromData(data).toLatin1();
-        textStream.setCodec(QTextCodec::codecForName(charSet.constData()));
+        const QByteArray &codec = QHelpGlobal::codecFromData(data).toLatin1();
+        textStream.setCodec(QTextCodec::codecForName(codec.constData()));
 
         QString stream = textStream.readAll();
         if (stream.isNull() || stream.isEmpty())
diff --git a/tools/assistant/lib/qhelpsearchindexwriter_default.cpp b/tools/assistant/lib/qhelpsearchindexwriter_default.cpp
index 36b115e..06deb85 100644
--- a/tools/assistant/lib/qhelpsearchindexwriter_default.cpp
+++ b/tools/assistant/lib/qhelpsearchindexwriter_default.cpp
@@ -274,7 +274,7 @@ void QHelpSearchIndexWriter::run()
                     continue;
 
                 QTextStream s(data);
-                QString en = QHelpGlobal::charsetFromData(data);
+                QString en = QHelpGlobal::codecFromData(data);
                 s.setCodec(QTextCodec::codecForName(en.toLatin1().constData()));
 
                 QString text = s.readAll();
-- 
cgit v0.12


From fc8bada79e686004faf5613202859e79ab49f1ab Mon Sep 17 00:00:00 2001
From: Thierry Bastian <thierry.bastian@nokia.com>
Date: Thu, 5 Nov 2009 14:08:35 +0100
Subject: API review from yesterday made a bug appear for the pause animations

---
 src/corelib/animation/qabstractanimation.cpp | 18 ++++++++++++------
 1 file changed, 12 insertions(+), 6 deletions(-)

diff --git a/src/corelib/animation/qabstractanimation.cpp b/src/corelib/animation/qabstractanimation.cpp
index d46ac92..f967081 100644
--- a/src/corelib/animation/qabstractanimation.cpp
+++ b/src/corelib/animation/qabstractanimation.cpp
@@ -50,7 +50,7 @@
     animations that plug into the rest of the animation framework.
 
     The progress of an animation is given by its current time
-    (currentTime()), which is measured in milliseconds from the start
+    (currentLoopTime()), which is measured in milliseconds from the start
     of the animation (0) to its end (duration()). The value is updated
     automatically while the animation is running. It can also be set
     directly with setCurrentTime().
@@ -214,6 +214,10 @@ void QUnifiedTimer::restartAnimationTimer()
 {
     if (runningLeafAnimations == 0 && !runningPauseAnimations.isEmpty()) {
         int closestTimeToFinish = closestPauseAnimationTimeToFinish();
+        if (closestTimeToFinish < 0) {
+            qDebug() << runningPauseAnimations;
+            qDebug() << closestPauseAnimationTimeToFinish();
+        }
         animationTimer.start(closestTimeToFinish, this);
         isPauseTimerActive = true;
     } else if (!animationTimer.isActive() || isPauseTimerActive) {
@@ -288,9 +292,11 @@ void QUnifiedTimer::registerRunningAnimation(QAbstractAnimation *animation)
     if (QAbstractAnimationPrivate::get(animation)->isGroup)
         return;
 
-    if (QAbstractAnimationPrivate::get(animation)->isPause)
+    if (QAbstractAnimationPrivate::get(animation)->isPause) {
+        if (animation->duration() == -1)
+            qDebug() << "toto";
         runningPauseAnimations << animation;
-    else
+    } else
         runningLeafAnimations++;
 }
 
@@ -314,9 +320,9 @@ int QUnifiedTimer::closestPauseAnimationTimeToFinish()
         int timeToFinish;
 
         if (animation->direction() == QAbstractAnimation::Forward)
-            timeToFinish = animation->duration() - animation->currentTime();
+            timeToFinish = animation->duration() - animation->currentLoopTime();
         else
-            timeToFinish = animation->currentTime();
+            timeToFinish = animation->currentLoopTime();
 
         if (timeToFinish < closestTimeToFinish)
             closestTimeToFinish = timeToFinish;
@@ -737,7 +743,7 @@ void QAbstractAnimation::start(DeletionPolicy policy)
     signal, and state() returns Stopped. The current time is not changed.
 
     If the animation stops by itself after reaching the end (i.e.,
-    currentTime() == duration() and currentLoop() > loopCount() - 1), the
+    currentLoopTime() == duration() and currentLoop() > loopCount() - 1), the
     finished() signal is emitted.
 
     \sa start(), state()
-- 
cgit v0.12


From 393f53184a35f380ddd7cf44a0947c2309c373bc Mon Sep 17 00:00:00 2001
From: Thierry Bastian <thierry.bastian@nokia.com>
Date: Thu, 5 Nov 2009 14:13:34 +0100
Subject: Revert "Make animation timer slightly more accurate with default
 interval of 15"

The new threashold for using the multimedia timer is 20, so we can get back to
16 ms for the interval.

This reverts commit bdcde683bc863d0c574b1e4d64b5a16ba0130596.
---
 src/corelib/animation/qabstractanimation.cpp | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/src/corelib/animation/qabstractanimation.cpp b/src/corelib/animation/qabstractanimation.cpp
index f967081..edc1503 100644
--- a/src/corelib/animation/qabstractanimation.cpp
+++ b/src/corelib/animation/qabstractanimation.cpp
@@ -156,8 +156,7 @@
 
 #ifndef QT_NO_ANIMATION
 
-//with 15 ms we get more accuracy on windows (it uses the multimedia timer)
-#define DEFAULT_TIMER_INTERVAL 15
+#define DEFAULT_TIMER_INTERVAL 16
 #define STARTSTOP_TIMER_DELAY 0
 
 QT_BEGIN_NAMESPACE
-- 
cgit v0.12


From 2e2c2af0c87c101ead3819e5ee74f7dac7eb6e8f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Sami=20Meril=C3=A4?= <sami.merila@nokia.com>
Date: Thu, 5 Nov 2009 15:26:52 +0200
Subject: QS60Style: Harmonize theme graphic with LineEdit and QTextEdit

In S60 the single line and multi line editors have same theme
background. We should share one as well. Now we are using fancy
notepad graphic with QTextEdit, but it makes QTextEdits to look
apart from QLineEdits and in some themes it is styled rather badly
(as it is not a central graphic item in a theme). Therefore it is
better to use one and same graphic for both widgets.

Task-number: QTBUG-5259
Reviewed-by: Alessandro Portale
---
 src/gui/styles/qs60style.cpp     |  2 +-
 src/gui/styles/qs60style_p.h     |  1 -
 src/gui/styles/qs60style_s60.cpp | 14 --------------
 3 files changed, 1 insertion(+), 16 deletions(-)

diff --git a/src/gui/styles/qs60style.cpp b/src/gui/styles/qs60style.cpp
index 0b126a6..e0fcb92 100644
--- a/src/gui/styles/qs60style.cpp
+++ b/src/gui/styles/qs60style.cpp
@@ -281,7 +281,7 @@ void QS60StylePrivate::drawSkinElement(SkinElements element, QPainter *painter,
         drawFrame(SF_ButtonInactive, painter, rect, flags | SF_PointNorth);
         break;
     case SE_Editor:
-        drawFrame(SF_Editor, painter, rect, flags | SF_PointNorth);
+        drawFrame(SF_FrameLineEdit, painter, rect, flags | SF_PointNorth);
         break;
     default:
         break;
diff --git a/src/gui/styles/qs60style_p.h b/src/gui/styles/qs60style_p.h
index 54af757..46547bf 100644
--- a/src/gui/styles/qs60style_p.h
+++ b/src/gui/styles/qs60style_p.h
@@ -361,7 +361,6 @@ public:
         SF_ToolBarButtonPressed,
         SF_PanelBackground,
         SF_ButtonInactive,
-        SF_Editor,
     };
 
     enum SkinElementFlag {
diff --git a/src/gui/styles/qs60style_s60.cpp b/src/gui/styles/qs60style_s60.cpp
index 0cd87bd..c2a207c 100644
--- a/src/gui/styles/qs60style_s60.cpp
+++ b/src/gui/styles/qs60style_s60.cpp
@@ -319,16 +319,6 @@ const partMapEntry QS60StyleModeSpecifics::m_partMap[] = {
     /* SP_QsnFrButtonSideRInactive */    {KAknsIIDQsnFrButtonTbSideR,           ENoDraw,     ES60_3_1 | ES60_3_2, EAknsMajorSkin, 0x21b8},
     /* SP_QsnFrButtonCenterInactive */   {KAknsIIDQsnFrButtonTbCenter,          EDrawIcon,   ES60_3_1 | ES60_3_2, EAknsMajorSkin, 0x21b9},
 
-    /* SP_QsnFrNotepadCornerTl */        {KAknsIIDQsnFrNotepadContCornerTl,     ENoDraw,     ES60_AllReleases,    -1,-1},
-    /* SP_QsnFrNotepadCornerTr */        {KAknsIIDQsnFrNotepadContCornerTr,     ENoDraw,     ES60_AllReleases,    -1,-1},
-    /* SP_QsnFrNotepadCornerBl */        {KAknsIIDQsnFrNotepadCornerBl,         ENoDraw,     ES60_AllReleases,    -1,-1},
-    /* SP_QsnFrNotepadCornerBr */        {KAknsIIDQsnFrNotepadCornerBr,         ENoDraw,     ES60_AllReleases,    -1,-1},
-    /* SP_QsnFrNotepadSideT */           {KAknsIIDQsnFrNotepadContSideT,        ENoDraw,     ES60_AllReleases,    -1,-1},
-    /* SP_QsnFrNotepadSideB */           {KAknsIIDQsnFrNotepadSideB,            ENoDraw,     ES60_AllReleases,    -1,-1},
-    /* SP_QsnFrNotepadSideL */           {KAknsIIDQsnFrNotepadSideL,            ENoDraw,     ES60_AllReleases,    -1,-1},
-    /* SP_QsnFrNotepadSideR */           {KAknsIIDQsnFrNotepadSideR,            ENoDraw,     ES60_AllReleases,    -1,-1},
-    /* SP_QsnFrNotepadCenter */          {KAknsIIDQsnFrNotepadCenter,           EDrawIcon,   ES60_AllReleases,    -1,-1},
-
 };
 
 QPixmap QS60StyleModeSpecifics::skinnedGraphics(
@@ -852,10 +842,6 @@ void QS60StyleModeSpecifics::frameIdAndCenterId(QS60StylePrivate::SkinFrameEleme
             centerId.Set(KAknsIIDNone);
             frameId.Set(KAknsIIDQsnFrSetOpt);
             break;
-        case QS60StylePrivate::SF_Editor:
-            centerId.Set(KAknsIIDQsnFrNotepadCenter);
-            frameId.Set(KAknsIIDQsnFrNotepadCont);
-            break;
         default:
             // center should be correct here
             frameId.iMinor = centerId.iMinor - 9;
-- 
cgit v0.12


From 6d2d9bbff063f082c6010c49523f56dda74fe94e Mon Sep 17 00:00:00 2001
From: ck <qt-info@nokia.com>
Date: Thu, 5 Nov 2009 15:33:35 +0100
Subject: Assistant: Reset default homepage on collection file update.

Reviewed-by: kh1
---
 tools/assistant/tools/assistant/main.cpp | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/tools/assistant/tools/assistant/main.cpp b/tools/assistant/tools/assistant/main.cpp
index 4d7fe10..a721880 100644
--- a/tools/assistant/tools/assistant/main.cpp
+++ b/tools/assistant/tools/assistant/main.cpp
@@ -148,6 +148,8 @@ updateUserCollection(QHelpEngineCore& user, const QHelpEngineCore& caller)
         caller.customValue(QLatin1String("AboutTexts")));
     user.setCustomValue(QLatin1String("AboutImages"),
         caller.customValue(QLatin1String("AboutImages")));
+    user.setCustomValue(QLatin1String("defaultHomepage"),
+        caller.customValue(QLatin1String("defaultHomepage")));
 
     return true;
 }
-- 
cgit v0.12


From 7598ff4a1e0997ffc99995dc652ef2380e7a2b05 Mon Sep 17 00:00:00 2001
From: Friedemann Kleint <Friedemann.Kleint@nokia.com>
Date: Thu, 5 Nov 2009 17:14:34 +0100
Subject: Fix MSVC compiler warning.

Forward declare struct QAbstractConcatenable correctly.
Reviewed-by: hjk <qtc-committer@nokia.com>
---
 src/corelib/tools/qstring.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/corelib/tools/qstring.h b/src/corelib/tools/qstring.h
index be95211..74f93a4 100644
--- a/src/corelib/tools/qstring.h
+++ b/src/corelib/tools/qstring.h
@@ -631,7 +631,7 @@ private:
     friend class QCharRef;
     friend class QTextCodec;
     friend class QStringRef;
-    friend class QAbstractConcatenable;
+    friend struct QAbstractConcatenable;
     friend inline bool qStringComparisonHelper(const QString &s1, const char *s2);
     friend inline bool qStringComparisonHelper(const QStringRef &s1, const char *s2);
 public:
-- 
cgit v0.12


From ded84966823eac0ae0275a2a7676d647d4d856ff Mon Sep 17 00:00:00 2001
From: Iain <qt-info@nokia.com>
Date: Thu, 5 Nov 2009 19:07:02 +0100
Subject: Initial LFLAGS support for qmake on Symbian OS

Reviewed-by: Shane Kearns
---
 mkspecs/common/symbian/symbian.conf  | 21 +++++++++--------
 qmake/generators/symbian/symmake.cpp | 44 ++++++++++++++++++++++++++++++++++--
 2 files changed, 53 insertions(+), 12 deletions(-)

diff --git a/mkspecs/common/symbian/symbian.conf b/mkspecs/common/symbian/symbian.conf
index 1acfefe..79bac42 100644
--- a/mkspecs/common/symbian/symbian.conf
+++ b/mkspecs/common/symbian/symbian.conf
@@ -50,17 +50,18 @@ QMAKE_RUN_CC_IMP	= $(CC) -c $(CFLAGS) $(INCPATH) -o $@ $<
 QMAKE_RUN_CXX		= $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $obj $src
 QMAKE_RUN_CXX_IMP	= $(CXX) -c $(CXXFLAGS) $(INCPATH) -o $@ $<
 
-QMAKE_LINK		= g++
-QMAKE_LFLAGS		= -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc
-QMAKE_LFLAGS_EXCEPTIONS_ON = -mthreads -Wl
+QMAKE_LINK              =
+QMAKE_LFLAGS            =
+QMAKE_LFLAGS.ARMCC      = 
+QMAKE_LFLAGS_EXCEPTIONS_ON =
 QMAKE_LFLAGS_EXCEPTIONS_OFF =
-QMAKE_LFLAGS_RELEASE	= -Wl,-s
-QMAKE_LFLAGS_DEBUG	=
-QMAKE_LFLAGS_CONSOLE	= -Wl,-subsystem,console
-QMAKE_LFLAGS_WINDOWS	= -Wl,-subsystem,windows
-QMAKE_LFLAGS_DLL        = -shared
-QMAKE_LINK_OBJECT_MAX	= 10
-QMAKE_LINK_OBJECT_SCRIPT= object_script
+QMAKE_LFLAGS_RELEASE    =
+QMAKE_LFLAGS_DEBUG      =
+QMAKE_LFLAGS_CONSOLE    =
+QMAKE_LFLAGS_WINDOWS    =
+QMAKE_LFLAGS_DLL        =
+QMAKE_LINK_OBJECT_MAX   =
+QMAKE_LINK_OBJECT_SCRIPT=
 
 QMAKE_LIBS		= -llibc -llibm -leuser -llibdl
 QMAKE_LIBS_CORE         = $$QMAKE_LIBS -llibpthread -lefsrv
diff --git a/qmake/generators/symbian/symmake.cpp b/qmake/generators/symbian/symmake.cpp
index 19af1da..8ec4b3f 100644
--- a/qmake/generators/symbian/symmake.cpp
+++ b/qmake/generators/symbian/symmake.cpp
@@ -74,6 +74,9 @@
 #define MMP_OPTION_CW "OPTION CW"
 #define MMP_OPTION_ARMCC "OPTION ARMCC"
 #define MMP_OPTION_GCCE "OPTION GCCE"
+#define MMP_LINKEROPTION_CW "LINKEROPTION CW"
+#define MMP_LINKEROPTION_ARMCC "LINKEROPTION ARMCC"
+#define MMP_LINKEROPTION_GCCE "LINKEROPTION GCCE"
 
 #define SIS_TARGET "sis"
 #define OK_SIS_TARGET "ok_sis"
@@ -655,8 +658,7 @@ void SymbianMakefileGenerator::initMmpVariables()
 
     // Check MMP_RULES for singleton keywords that are overridden
     QStringList overridableMmpKeywords;
-    overridableMmpKeywords << QLatin1String(MMP_TARGETTYPE) << QLatin1String(MMP_OPTION_CW)
-        << QLatin1String(MMP_OPTION_ARMCC) << QLatin1String(MMP_OPTION_GCCE);
+    overridableMmpKeywords << QLatin1String(MMP_TARGETTYPE);
 
     foreach (QString item, project->values("MMP_RULES")) {
         if (project->values(item).isEmpty()) {
@@ -971,6 +973,7 @@ void SymbianMakefileGenerator::writeMmpFileCapabilityPart(QTextStream& t)
 void SymbianMakefileGenerator::writeMmpFileCompilerOptionPart(QTextStream& t)
 {
     QString cw, armcc, gcce;
+    QString cwlink, armlink, gccelink;
 
     if (0 != project->values("QMAKE_CXXFLAGS.CW").size()) {
         cw.append(project->values("QMAKE_CXXFLAGS.CW").join(" "));
@@ -1020,12 +1023,42 @@ void SymbianMakefileGenerator::writeMmpFileCompilerOptionPart(QTextStream& t)
         gcce.append(" ");
     }
 
+    if (0 != project->values("QMAKE_LFLAGS.CW").size()) {
+        cwlink.append(project->values("QMAKE_LFLAGS.CW").join(" "));
+        cwlink.append(" ");
+    }
+
+    if (0 != project->values("QMAKE_LFLAGS.ARMCC").size()) {
+        armlink.append(project->values("QMAKE_LFLAGS.ARMCC").join(" "));
+        armlink.append(" ");
+    }
+
+    if (0 != project->values("QMAKE_LFLAGS.GCCE").size()) {
+        gccelink.append(project->values("QMAKE_LFLAGS.GCCE").join(" "));
+        gccelink.append(" ");
+    }
+
+    if (0 != project->values("QMAKE_LFLAGS").size()) {
+        cwlink.append(project->values("QMAKE_LFLAGS").join(" "));
+        cwlink.append(" ");
+        armlink.append(project->values("QMAKE_LFLAGS").join(" "));
+        armlink.append(" ");
+        gccelink.append(project->values("QMAKE_LFLAGS").join(" "));
+        gccelink.append(" ");
+    }
+
     if (!cw.isEmpty() && cw[cw.size()-1] == ' ')
         cw.chop(1);
     if (!armcc.isEmpty() && armcc[armcc.size()-1] == ' ')
         armcc.chop(1);
     if (!gcce.isEmpty() && gcce[gcce.size()-1] == ' ')
         gcce.chop(1);
+    if (!cwlink.isEmpty() && cwlink[cwlink.size()-1] == ' ')
+        cwlink.chop(1);
+    if (!armlink.isEmpty() && armlink[armlink.size()-1] == ' ')
+        armlink.chop(1);
+    if (!gccelink.isEmpty() && gccelink[gccelink.size()-1] == ' ')
+        gccelink.chop(1);
 
     if (!cw.isEmpty() && !overriddenMmpKeywords.contains(MMP_OPTION_CW))
         t << MMP_OPTION_CW " " << cw <<  endl;
@@ -1034,6 +1067,13 @@ void SymbianMakefileGenerator::writeMmpFileCompilerOptionPart(QTextStream& t)
     if (!gcce.isEmpty() && !overriddenMmpKeywords.contains(MMP_OPTION_GCCE))
         t << MMP_OPTION_GCCE " " << gcce <<  endl;
 
+    if (!cwlink.isEmpty() && !overriddenMmpKeywords.contains(MMP_LINKEROPTION_CW))
+        t << MMP_LINKEROPTION_CW " " << cwlink <<  endl;
+    if (!armlink.isEmpty() && !overriddenMmpKeywords.contains(MMP_LINKEROPTION_ARMCC))
+        t << MMP_LINKEROPTION_ARMCC " " << armlink <<  endl;
+    if (!gccelink.isEmpty() && !overriddenMmpKeywords.contains(MMP_LINKEROPTION_GCCE))
+        t << MMP_LINKEROPTION_GCCE " " << gccelink <<  endl;
+
     t <<  endl;
 }
 
-- 
cgit v0.12


From d57b8e711c312814a55e7bc245b9b44ea4bd854c Mon Sep 17 00:00:00 2001
From: David Boddie <dboddie@trolltech.com>
Date: Thu, 5 Nov 2009 21:17:34 +0100
Subject: Doc: Trivial fix.

Reviewed-by: Trust Me
---
 doc/src/qt4-intro.qdoc | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/doc/src/qt4-intro.qdoc b/doc/src/qt4-intro.qdoc
index 4943984..4911426 100644
--- a/doc/src/qt4-intro.qdoc
+++ b/doc/src/qt4-intro.qdoc
@@ -664,7 +664,7 @@
 
     See the \l{QtMultimedia Module} documentation for more information.
 
-    \section1 New Classes, Functions, Macros, etc
+    \section1 New Classes, Functions, Macros, etc.
 
     Links to new classes, functions, macros, and other items
     introduced in Qt 4.6.
-- 
cgit v0.12


From a34b73f0c4f86cf1c333a31c25f9c05460bca173 Mon Sep 17 00:00:00 2001
From: hjk <qtc-committer@nokia.com>
Date: Fri, 6 Nov 2009 08:07:20 +0100
Subject: compile fix for QDBusServiceWatcher with namespaced Qt

---
 src/dbus/qdbusservicewatcher.cpp | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/src/dbus/qdbusservicewatcher.cpp b/src/dbus/qdbusservicewatcher.cpp
index 4872732..4356d11 100644
--- a/src/dbus/qdbusservicewatcher.cpp
+++ b/src/dbus/qdbusservicewatcher.cpp
@@ -47,6 +47,8 @@
 
 #include <private/qobject_p.h>
 
+QT_BEGIN_NAMESPACE
+
 Q_GLOBAL_STATIC_WITH_ARGS(QString, busService, (QLatin1String(DBUS_SERVICE_DBUS)))
 Q_GLOBAL_STATIC_WITH_ARGS(QString, busPath, (QLatin1String(DBUS_PATH_DBUS)))
 Q_GLOBAL_STATIC_WITH_ARGS(QString, busInterface, (QLatin1String(DBUS_INTERFACE_DBUS)))
@@ -371,4 +373,6 @@ void QDBusServiceWatcher::setConnection(const QDBusConnection &connection)
     d->setConnection(d->servicesWatched, connection, d->watchMode);
 }
 
+QT_END_NAMESPACE
+
 #include "moc_qdbusservicewatcher.cpp"
-- 
cgit v0.12


From dde02a1b8c61c344c20a92a81d25d4c9b522d349 Mon Sep 17 00:00:00 2001
From: Thierry Bastian <thierry.bastian@nokia.com>
Date: Fri, 6 Nov 2009 09:48:05 +0100
Subject: Animations should only be registered if their new state is running

---
 src/corelib/animation/qabstractanimation.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/corelib/animation/qabstractanimation.cpp b/src/corelib/animation/qabstractanimation.cpp
index edc1503..3b98152 100644
--- a/src/corelib/animation/qabstractanimation.cpp
+++ b/src/corelib/animation/qabstractanimation.cpp
@@ -361,7 +361,7 @@ void QAbstractAnimationPrivate::setState(QAbstractAnimation::State newState)
             QUnifiedTimer::instance()->ensureTimerUpdate();
         //the animation, is not running any more
         QUnifiedTimer::instance()->unregisterAnimation(q);
-    } else {
+    } else if (newState == QAbstractAnimation::Running) {
         QUnifiedTimer::instance()->registerAnimation(q, isTopLevel);
     }
 
-- 
cgit v0.12


From a708f07b593359b6bf5732ec444336956e194cda Mon Sep 17 00:00:00 2001
From: Thierry Bastian <thierry.bastian@nokia.com>
Date: Fri, 6 Nov 2009 09:55:08 +0100
Subject: add slow mode in private API for testing

this was suggested by Michael B
---
 src/corelib/animation/qabstractanimation.cpp | 6 ++++--
 src/corelib/animation/qabstractanimation_p.h | 4 ++++
 2 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/src/corelib/animation/qabstractanimation.cpp b/src/corelib/animation/qabstractanimation.cpp
index 3b98152..93ac840 100644
--- a/src/corelib/animation/qabstractanimation.cpp
+++ b/src/corelib/animation/qabstractanimation.cpp
@@ -165,8 +165,8 @@ Q_GLOBAL_STATIC(QThreadStorage<QUnifiedTimer *>, unifiedTimer)
 
 QUnifiedTimer::QUnifiedTimer() :
     QObject(), lastTick(0), timingInterval(DEFAULT_TIMER_INTERVAL),
-    currentAnimationIdx(0), consistentTiming(false), isPauseTimerActive(false),
-    runningLeafAnimations(0)
+    currentAnimationIdx(0), consistentTiming(false), slowMode(false),
+    isPauseTimerActive(false), runningLeafAnimations(0)
 {
 }
 
@@ -193,6 +193,8 @@ void QUnifiedTimer::updateAnimationsTime()
     // ignore consistentTiming in case the pause timer is active
     const int delta = (consistentTiming && !isPauseTimerActive) ?
                         timingInterval : time.elapsed() - lastTick;
+    if slowMode)
+        delta /= 5;
     lastTick = time.elapsed();
 
     //we make sure we only call update time if the time has actually changed
diff --git a/src/corelib/animation/qabstractanimation_p.h b/src/corelib/animation/qabstractanimation_p.h
index f989bce..720e68d 100644
--- a/src/corelib/animation/qabstractanimation_p.h
+++ b/src/corelib/animation/qabstractanimation_p.h
@@ -138,6 +138,9 @@ public:
     */
     void setConsistentTiming(bool consistent) { consistentTiming = consistent; }
 
+    //this facilitates fine-tuning of complex animations
+    void setSlowModeEnabled(bool enabled) { slowMode = enabled; }
+
     /*
         this is used for updating the currentTime of all animations in case the pause
         timer is active or, otherwise, only of the animation passed as parameter.
@@ -164,6 +167,7 @@ private:
     int timingInterval;
     int currentAnimationIdx;
     bool consistentTiming;
+    bool slowMode;
     // bool to indicate that only pause animations are active
     bool isPauseTimerActive;
 
-- 
cgit v0.12


From cc98c1d3c6fb39bad2ff7f6ebff881a697565305 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jan-Arve=20S=C3=A6ther?= <jan-arve.saether@nokia.com>
Date: Fri, 6 Nov 2009 11:11:24 +0100
Subject: Make sure the pixmap is properly initialized.

Reviewed-by: sroedal
---
 examples/graphicsview/weatheranchorlayout/main.cpp | 1 +
 1 file changed, 1 insertion(+)

diff --git a/examples/graphicsview/weatheranchorlayout/main.cpp b/examples/graphicsview/weatheranchorlayout/main.cpp
index fd5d9c6..9002828 100644
--- a/examples/graphicsview/weatheranchorlayout/main.cpp
+++ b/examples/graphicsview/weatheranchorlayout/main.cpp
@@ -124,6 +124,7 @@ public:
         painter->drawPixmap(QPointF(), scaled);
 
         QPixmap tmp(scaled.size());
+        tmp.fill(Qt::transparent);
         QPainter p(&tmp);
 
         // create gradient
-- 
cgit v0.12


From 9845e93e4f36a2ed6fbb282d00dafe9d7a852a23 Mon Sep 17 00:00:00 2001
From: Thierry Bastian <thierry.bastian@nokia.com>
Date: Fri, 6 Nov 2009 12:34:14 +0100
Subject: Fix build

---
 src/corelib/animation/qabstractanimation.cpp | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/corelib/animation/qabstractanimation.cpp b/src/corelib/animation/qabstractanimation.cpp
index 93ac840..be99b3b 100644
--- a/src/corelib/animation/qabstractanimation.cpp
+++ b/src/corelib/animation/qabstractanimation.cpp
@@ -191,9 +191,9 @@ void QUnifiedTimer::ensureTimerUpdate()
 void QUnifiedTimer::updateAnimationsTime()
 {
     // ignore consistentTiming in case the pause timer is active
-    const int delta = (consistentTiming && !isPauseTimerActive) ?
+    int delta = (consistentTiming && !isPauseTimerActive) ?
                         timingInterval : time.elapsed() - lastTick;
-    if slowMode)
+    if (slowMode)
         delta /= 5;
     lastTick = time.elapsed();
 
-- 
cgit v0.12


From c059c6f2add4a500121c19b0c95d0c57196285ba Mon Sep 17 00:00:00 2001
From: ck <qt-info@nokia.com>
Date: Fri, 6 Nov 2009 11:49:07 +0100
Subject: Assistant: Fix bugs on cached collection file handling.

1. When the dates between the caller-supplied and the cached versions
   of a collection file differed, we used to overwrite the cached
   with the original version. This was obviously wrong - we should
   only overwrite when the cached version is older.
2. We also forgot to set the zoom factor when overwriting.

Task-number: QTBUG-4899
Reviewed-by: kh1
---
 tools/assistant/tools/assistant/main.cpp | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/tools/assistant/tools/assistant/main.cpp b/tools/assistant/tools/assistant/main.cpp
index a721880..12bc5b1 100644
--- a/tools/assistant/tools/assistant/main.cpp
+++ b/tools/assistant/tools/assistant/main.cpp
@@ -115,7 +115,7 @@ updateUserCollection(QHelpEngineCore& user, const QHelpEngineCore& caller)
     const uint userCollectionCreationTime = user.
         customValue(QLatin1String("CreationTime"), 1).toUInt();
 
-    if (callerCollectionCreationTime == userCollectionCreationTime)
+    if (callerCollectionCreationTime <= userCollectionCreationTime)
         return false;
 
     user.setCustomValue(QLatin1String("CreationTime"),
@@ -124,6 +124,12 @@ updateUserCollection(QHelpEngineCore& user, const QHelpEngineCore& caller)
         caller.customValue(QLatin1String("WindowTitle")));
     user.setCustomValue(QLatin1String("LastShownPages"),
         caller.customValue(QLatin1String("LastShownPages")));
+#if !defined(QT_NO_WEBKIT)
+    const QLatin1String zoomKey("LastPagesZoomWebView");
+#else
+    const QLatin1String zoomKey("LastPagesZoomTextBrowser");
+#endif
+    user.setCustomValue(zoomKey, caller.customValue(zoomKey));
     user.setCustomValue(QLatin1String("CurrentFilter"),
         caller.customValue(QLatin1String("CurrentFilter")));
     user.setCustomValue(QLatin1String("CacheDirectory"),
-- 
cgit v0.12


From e70168edd89a0161955866e9acc32bb766d9f147 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jan-Arve=20S=C3=A6ther?= <jan-arve.saether@nokia.com>
Date: Fri, 6 Nov 2009 12:06:15 +0100
Subject: My changes

---
 dist/changes-4.6.0 | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/dist/changes-4.6.0 b/dist/changes-4.6.0
index 7596943..2808113 100644
--- a/dist/changes-4.6.0
+++ b/dist/changes-4.6.0
@@ -62,10 +62,16 @@ QtCore
     * Added the possibility to pass the flag Qt::UniqueConnection to QObject::connect
     * Fixed race conditions that occured when moving object to threads while connecting
 
+ - QPluginLoader
+    * Improved performance of plugin loading by reusing the plugin cache instead of loading
+      it every time.
+
 - QTextStream
     * [221316] Fixed crash on large input.
 
 QtGui
+- QGraphicsAnchorLayout
+    * Support for expanding size policy has been removed. (The Qt 4.6 Beta had support for it).
 
 - QGraphicsItem
     * Fixed bug and improved accuracy of QGraphicsItem::childrenBoundingRect().
@@ -79,6 +85,9 @@ QtGui
     * Introduced QGraphicsItem::stackBefore()
     * Cached items are now always invalidated when update() is called.
 
+- QGraphicsLayout
+    * Introduced QGraphicsLayout::addChildLayoutItem()
+
 - QGraphicsObject
     * New class; inherits QGraphicsItem and adds notification signals and property declarations.
 
@@ -109,6 +118,7 @@ QtGui
 
 - QGraphicsWidget
     * Now inherits from QGraphicsObject instead
+    * Interactive resizing of top level windows now respects height-for-width constraints.
 
  - QTreeView
     * [234930] Be able to use :has-children and :has-sibillings in a stylesheet
@@ -141,6 +151,9 @@ QtGui
  - QStandardItemModel
     * [255652] Fixed crash while using takeRow with a QSortFilterProxyModel
 
+ - QToolTip
+    * Fixed a bug where tooltips were not shown in popups. (Windows only).
+
  - QGraphicsItem
     * Added a new set of properties to set a transformation on a item
 
@@ -213,6 +226,9 @@ QtGui
 
  - [128859] Fixed code generation of QLabel's wordWrap property.
 
+ - lupdate
+  - Fixed a bug in the java source code parser.
+
 ****************************************************************************
 *                               DirectFB                                   *
 ****************************************************************************
-- 
cgit v0.12


From 49c941e5f34a20b05f0f40914a8224e433d5e4e8 Mon Sep 17 00:00:00 2001
From: Thierry Bastian <thierry.bastian@nokia.com>
Date: Fri, 6 Nov 2009 12:14:13 +0100
Subject: Fix Phonon's video renderer on windows with opengl

Now we use opengl 2.

Reviewed-by: Samuel
---
 src/3rdparty/phonon/ds9/videorenderer_soft.cpp | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/src/3rdparty/phonon/ds9/videorenderer_soft.cpp b/src/3rdparty/phonon/ds9/videorenderer_soft.cpp
index 82d6235..f7d42cf 100644
--- a/src/3rdparty/phonon/ds9/videorenderer_soft.cpp
+++ b/src/3rdparty/phonon/ds9/videorenderer_soft.cpp
@@ -661,7 +661,10 @@ namespace Phonon
 
 
 #ifndef QT_NO_OPENGL
-            if (painter.paintEngine() && painter.paintEngine()->type() == QPaintEngine::OpenGL && checkGLPrograms()) {
+            if (painter.paintEngine() && 
+                (painter.paintEngine()->type() == QPaintEngine::OpenGL || painter.paintEngine()->type() == QPaintEngine::OpenGL2)
+                && checkGLPrograms()) {
+
                 //for now we only support YUV (both YV12 and YUY2)
                 updateTexture();
 
@@ -673,6 +676,7 @@ namespace Phonon
                 }
 
                 //let's draw the texture
+                painter.beginNativePainting();
 
                 //Let's pass the other arguments
                 const Program prog = (m_inputPin->connectedType().subtype == MEDIASUBTYPE_YV12) ? YV12toRGB : YUY2toRGB;
@@ -722,6 +726,7 @@ namespace Phonon
                 glDisableClientState(GL_VERTEX_ARRAY);
 
                 glDisable(GL_FRAGMENT_PROGRAM_ARB);
+                painter.endNativePainting();
                 return;
             } else
 #endif
-- 
cgit v0.12


From 461f7037d2ae6b3d97e49ff2729d594c9221309f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jan-Arve=20S=C3=A6ther?= <jan-arve.saether@nokia.com>
Date: Fri, 6 Nov 2009 12:17:55 +0100
Subject: Pro file fixes wrt anchor layout examples.

---
 examples/graphicsview/graphicsview.pro                            | 3 ++-
 examples/graphicsview/weatheranchorlayout/weatheranchorlayout.pro | 4 +---
 2 files changed, 3 insertions(+), 4 deletions(-)

diff --git a/examples/graphicsview/graphicsview.pro b/examples/graphicsview/graphicsview.pro
index a919c74..210ab1f 100644
--- a/examples/graphicsview/graphicsview.pro
+++ b/examples/graphicsview/graphicsview.pro
@@ -9,7 +9,8 @@ SUBDIRS       = \
               diagramscene \
               dragdroprobot \
               flowlayout \
-              anchorlayout
+              anchorlayout \
+              weatheranchorlayout
 
 contains(QT_CONFIG, qt3support):SUBDIRS += portedcanvas portedasteroids
 contains(DEFINES, QT_NO_CURSOR)|contains(DEFINES, QT_NO_DRAGANDDROP): SUBDIRS -= dragdroprobot
diff --git a/examples/graphicsview/weatheranchorlayout/weatheranchorlayout.pro b/examples/graphicsview/weatheranchorlayout/weatheranchorlayout.pro
index 8b1803b..fa2733c 100644
--- a/examples/graphicsview/weatheranchorlayout/weatheranchorlayout.pro
+++ b/examples/graphicsview/weatheranchorlayout/weatheranchorlayout.pro
@@ -8,9 +8,7 @@ RESOURCES += weatheranchorlayout.qrc
 
 # install
 target.path = $$[QT_INSTALL_EXAMPLES]/graphicsview/weatheranchorlayout
-sources.files = $$SOURCES $$HEADERS $$RESOURCES weatheranchorlayout.pro
+sources.files = $$SOURCES $$HEADERS $$RESOURCES weatheranchorlayout.pro images
 sources.path = $$[QT_INSTALL_EXAMPLES]/graphicsview/weatheranchorlayout
 INSTALLS += target sources
 
-TARGET = weatheranchorlayout_example
-CONFIG += console
-- 
cgit v0.12


From 3433bc44168398734cdd53df9b64adf016c8ab3b Mon Sep 17 00:00:00 2001
From: Olivier Goffart <ogoffart@trolltech.com>
Date: Fri, 6 Nov 2009 09:50:32 +0100
Subject: Compile on Mac

Reviewed-by: Thierry
---
 src/gui/widgets/qmenu_mac.mm | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/gui/widgets/qmenu_mac.mm b/src/gui/widgets/qmenu_mac.mm
index b238faf..9510cc6 100644
--- a/src/gui/widgets/qmenu_mac.mm
+++ b/src/gui/widgets/qmenu_mac.mm
@@ -1191,7 +1191,7 @@ QMenuPrivate::QMacMenuPrivate::addAction(QMacMenuAction *action, QMacMenuAction
 #endif
         }
 
-        QWidget *widget = qmenu ? qmenu->widgetItems.value(qmenu->actions.indexOf(action->action)) : 0;
+        QWidget *widget = qmenu ? qmenu->widgetItems.value(action->action) : 0;
         if (widget) {
 #ifndef QT_MAC_USE_COCOA
             ChangeMenuAttributes(action->menu, kMenuAttrDoNotCacheImage, 0);
-- 
cgit v0.12


From f8a0b7b9ea2e077be7167c58d4eac27360d4cee6 Mon Sep 17 00:00:00 2001
From: Olivier Goffart <ogoffart@trolltech.com>
Date: Thu, 5 Nov 2009 13:11:03 +0100
Subject: QGraphicsView: Fixes QGraphicsView::focusItem when scene is not
 active

When scene is not active, returns the item that would get the focus if
the scene became active.

This is more consistant with Qt 4.5 behaviour

Reviewed-by: Andreas
---
 src/gui/graphicsview/qgraphicsitem.cpp           |  2 +-
 src/gui/graphicsview/qgraphicsscene.cpp          | 10 ++++++----
 tests/auto/qgraphicsscene/tst_qgraphicsscene.cpp | 22 ++++++++++++++++++++++
 3 files changed, 29 insertions(+), 5 deletions(-)

diff --git a/src/gui/graphicsview/qgraphicsitem.cpp b/src/gui/graphicsview/qgraphicsitem.cpp
index 949f555..073c31b 100644
--- a/src/gui/graphicsview/qgraphicsitem.cpp
+++ b/src/gui/graphicsview/qgraphicsitem.cpp
@@ -2980,7 +2980,7 @@ bool QGraphicsItem::hasFocus() const
 {
     if (d_ptr->focusProxy)
         return d_ptr->focusProxy->hasFocus();
-    return (d_ptr->scene && d_ptr->scene->focusItem() == this);
+    return isActive() && (d_ptr->scene && d_ptr->scene->focusItem() == this);
 }
 
 /*!
diff --git a/src/gui/graphicsview/qgraphicsscene.cpp b/src/gui/graphicsview/qgraphicsscene.cpp
index 80cd2bc..a59e961 100644
--- a/src/gui/graphicsview/qgraphicsscene.cpp
+++ b/src/gui/graphicsview/qgraphicsscene.cpp
@@ -2883,18 +2883,20 @@ void QGraphicsScene::removeItem(QGraphicsItem *item)
 }
 
 /*!
-    Returns the scene's current focus item, or 0 if no item currently has
-    focus.
+    When the scene is active, this functions returns the scene's current focus
+    item, or 0 if no item currently has focus. When the scene is inactive, this
+    functions returns the item that will gain input focus when the scene becomes
+    active.
 
     The focus item receives keyboard input when the scene receives a
     key event.
 
-    \sa setFocusItem(), QGraphicsItem::hasFocus()
+    \sa setFocusItem(), QGraphicsItem::hasFocus(), isActive()
 */
 QGraphicsItem *QGraphicsScene::focusItem() const
 {
     Q_D(const QGraphicsScene);
-    return d->focusItem;
+    return isActive() ? d->focusItem : d->lastFocusItem;
 }
 
 /*!
diff --git a/tests/auto/qgraphicsscene/tst_qgraphicsscene.cpp b/tests/auto/qgraphicsscene/tst_qgraphicsscene.cpp
index 4f76ddd..c81bd64 100644
--- a/tests/auto/qgraphicsscene/tst_qgraphicsscene.cpp
+++ b/tests/auto/qgraphicsscene/tst_qgraphicsscene.cpp
@@ -225,6 +225,7 @@ private slots:
     void focusItem();
     void focusItemLostFocus();
     void setFocusItem();
+    void setFocusItem_inactive();
     void mouseGrabberItem();
     void hoverEvents_siblings();
     void hoverEvents_parentChild();
@@ -1534,6 +1535,26 @@ void tst_QGraphicsScene::setFocusItem()
     QVERIFY(!item2->hasFocus());
 }
 
+void tst_QGraphicsScene::setFocusItem_inactive()
+{
+    QGraphicsScene scene;
+    QGraphicsItem *item = scene.addText("Qt");
+    QVERIFY(!scene.focusItem());
+    QVERIFY(!scene.hasFocus());
+    scene.setFocusItem(item);
+    QVERIFY(!scene.hasFocus());
+    QVERIFY(!scene.focusItem());
+    item->setFlag(QGraphicsItem::ItemIsFocusable);
+
+    for (int i = 0; i < 3; ++i) {
+        scene.setFocusItem(item);
+        QCOMPARE(scene.focusItem(), item);
+        QVERIFY(!item->hasFocus());
+    }
+
+}
+
+
 void tst_QGraphicsScene::mouseGrabberItem()
 {
     QGraphicsScene scene;
@@ -3130,6 +3151,7 @@ void tst_QGraphicsScene::tabFocus_sceneWithFocusableItems()
     QVERIFY(!view->viewport()->hasFocus());
     QVERIFY(!scene.hasFocus());
     QVERIFY(!item->hasFocus());
+    QCOMPARE(scene.focusItem(), static_cast<QGraphicsItem *>(item));
 
     // Check that the correct item regains focus.
     widget.show();
-- 
cgit v0.12


From d9c226c72105ef221c766cb9f616d10329197880 Mon Sep 17 00:00:00 2001
From: Olivier Goffart <ogoffart@trolltech.com>
Date: Thu, 5 Nov 2009 15:36:15 +0100
Subject: Fix QGraphicsScene::isActive if the view is shown while the window is
 active.

We need to make sure the active state is preserved if graphicsview are
dinamically shown/hide while window is active.  Or if scene is changed
with setScene.

This fixes KRunner focus regressions

Reviewed-by: Andreas
Task-number: QTBUG-5281
---
 src/gui/graphicsview/qgraphicsview.cpp           |  23 +++
 tests/auto/qgraphicsscene/tst_qgraphicsscene.cpp | 178 +++++++++++++++++++++++
 2 files changed, 201 insertions(+)

diff --git a/src/gui/graphicsview/qgraphicsview.cpp b/src/gui/graphicsview/qgraphicsview.cpp
index d1dd26f..87585a2 100644
--- a/src/gui/graphicsview/qgraphicsview.cpp
+++ b/src/gui/graphicsview/qgraphicsview.cpp
@@ -1512,6 +1512,11 @@ void QGraphicsView::setScene(QGraphicsScene *scene)
                    this, SLOT(updateSceneRect(QRectF)));
         d->scene->d_func()->removeView(this);
         d->connectedToScene = false;
+
+        if (isActiveWindow() && isVisible()) {
+            QEvent windowDeactivate(QEvent::WindowDeactivate);
+            QApplication::sendEvent(d->scene, &windowDeactivate);
+        }
     }
 
     // Assign the new scene and update the contents (scrollbars, etc.)).
@@ -1533,6 +1538,11 @@ void QGraphicsView::setScene(QGraphicsScene *scene)
         // enable touch events if any items is interested in them
         if (!d->scene->d_func()->allItemsIgnoreTouchEvents)
             d->viewport->setAttribute(Qt::WA_AcceptTouchEvents);
+
+        if (isActiveWindow() && isVisible()) {
+            QEvent windowActivate(QEvent::WindowActivate);
+            QApplication::sendEvent(d->scene, &windowActivate);
+        }
     } else {
         d->recalculateContentSize();
     }
@@ -2638,6 +2648,19 @@ bool QGraphicsView::viewportEvent(QEvent *event)
             d->scene->d_func()->removePopup(d->scene->d_func()->popupWidgets.first());
         QApplication::sendEvent(d->scene, event);
         break;
+    case QEvent::Show:
+        if (d->scene && isActiveWindow()) {
+            QEvent windowActivate(QEvent::WindowActivate);
+            QApplication::sendEvent(d->scene, &windowActivate);
+        }
+        break;
+    case QEvent::Hide:
+        // spontaneous event will generate a WindowDeactivate.
+        if (!event->spontaneous() && d->scene && isActiveWindow()) {
+            QEvent windowDeactivate(QEvent::WindowDeactivate);
+            QApplication::sendEvent(d->scene, &windowDeactivate);
+        }
+        break;
     case QEvent::Leave:
         // ### This is a temporary fix for until we get proper mouse grab
         // events. activeMouseGrabberItem should be set to 0 if we lose the
diff --git a/tests/auto/qgraphicsscene/tst_qgraphicsscene.cpp b/tests/auto/qgraphicsscene/tst_qgraphicsscene.cpp
index c81bd64..9a561eb 100644
--- a/tests/auto/qgraphicsscene/tst_qgraphicsscene.cpp
+++ b/tests/auto/qgraphicsscene/tst_qgraphicsscene.cpp
@@ -268,6 +268,7 @@ private slots:
     void initialFocus_data();
     void initialFocus();
     void polishItems();
+    void isActive();
 
     // task specific tests below me
     void task139710_bspTreeCrash();
@@ -3159,8 +3160,10 @@ void tst_QGraphicsScene::tabFocus_sceneWithFocusableItems()
     widget.activateWindow();
     QTest::qWaitForWindowShown(&widget);
     QTRY_VERIFY(view->hasFocus());
+    QTRY_VERIFY(scene.isActive());
     QVERIFY(view->viewport()->hasFocus());
     QVERIFY(scene.hasFocus());
+    QCOMPARE(scene.focusItem(), static_cast<QGraphicsItem *>(item));
     QVERIFY(item->hasFocus());
 }
 
@@ -3952,5 +3955,180 @@ void tst_QGraphicsScene::polishItems()
     QMetaObject::invokeMethod(&scene,"_q_polishItems");
 }
 
+void tst_QGraphicsScene::isActive()
+{
+    QGraphicsScene scene1;
+    QVERIFY(!scene1.isActive());
+    QGraphicsScene scene2;
+    QVERIFY(!scene2.isActive());
+
+    {
+        QWidget toplevel1;
+        QHBoxLayout *layout = new QHBoxLayout;
+        toplevel1.setLayout(layout);
+        QGraphicsView *view1 = new QGraphicsView(&scene1);
+        QGraphicsView *view2 = new QGraphicsView(&scene2);
+        layout->addWidget(view1);
+        layout->addWidget(view2);
+
+        QVERIFY(!scene1.isActive());
+        QVERIFY(!scene2.isActive());
+
+        view1->setVisible(false);
+
+        toplevel1.show();
+        QApplication::setActiveWindow(&toplevel1);
+        QTest::qWaitForWindowShown(&toplevel1);
+        QTRY_COMPARE(QApplication::activeWindow(), &toplevel1);
+
+        QVERIFY(!scene1.isActive()); //it is hidden;
+        QVERIFY(scene2.isActive());
+
+        view1->show();
+        QVERIFY(scene1.isActive());
+        QVERIFY(scene2.isActive());
+
+        view2->hide();
+
+        QVERIFY(scene1.isActive());
+        QVERIFY(!scene2.isActive());
+
+        toplevel1.hide();
+        QTest::qWait(12);
+        QTRY_VERIFY(!scene1.isActive());
+        QTRY_VERIFY(!scene2.isActive());
+
+        toplevel1.show();
+        QApplication::setActiveWindow(&toplevel1);
+        QApplication::processEvents();
+        QTRY_COMPARE(QApplication::activeWindow(), &toplevel1);
+
+        QTRY_VERIFY(scene1.isActive());
+        QTRY_VERIFY(!scene2.isActive());
+
+        view2->show();
+        QVERIFY(scene1.isActive());
+        QVERIFY(scene2.isActive());
+    }
+
+    QVERIFY(!scene1.isActive());
+    QVERIFY(!scene2.isActive());
+
+    {
+        QWidget toplevel2;
+        QHBoxLayout *layout = new QHBoxLayout;
+        toplevel2.setLayout(layout);
+        QGraphicsView *view1 = new QGraphicsView(&scene1);
+        QGraphicsView *view2 = new QGraphicsView();
+        layout->addWidget(view1);
+        layout->addWidget(view2);
+
+        QVERIFY(!scene1.isActive());
+        QVERIFY(!scene2.isActive());
+
+        toplevel2.show();
+        QApplication::setActiveWindow(&toplevel2);
+        QTest::qWaitForWindowShown(&toplevel2);
+        QTRY_COMPARE(QApplication::activeWindow(), &toplevel2);
+
+        QVERIFY(scene1.isActive());
+        QVERIFY(!scene2.isActive());
+
+        view2->setScene(&scene2);
+
+        QVERIFY(scene1.isActive());
+        QVERIFY(scene2.isActive());
+
+        view1->setScene(&scene2);
+        QVERIFY(!scene1.isActive());
+        QVERIFY(scene2.isActive());
+
+        view1->hide();
+        QVERIFY(!scene1.isActive());
+        QVERIFY(scene2.isActive());
+
+        view1->setScene(&scene1);
+        QVERIFY(!scene1.isActive());
+        QVERIFY(scene2.isActive());
+
+        view1->show();
+
+        view1->show();
+        QVERIFY(scene1.isActive());
+        QVERIFY(scene2.isActive());
+
+        view2->hide();
+        QVERIFY(scene1.isActive());
+        QVERIFY(!scene2.isActive());
+
+        QGraphicsView topLevelView;
+        topLevelView.show();
+        QApplication::setActiveWindow(&topLevelView);
+        QTest::qWaitForWindowShown(&topLevelView);
+        QTRY_COMPARE(QApplication::activeWindow(), static_cast<QWidget *>(&topLevelView));
+
+        QVERIFY(!scene1.isActive());
+        QVERIFY(!scene2.isActive());
+
+        topLevelView.setScene(&scene1);
+        QVERIFY(scene1.isActive());
+        QVERIFY(!scene2.isActive());
+
+        view2->show();
+        QVERIFY(scene1.isActive());
+        QVERIFY(!scene2.isActive());
+
+        view1->hide();
+        QVERIFY(scene1.isActive());
+        QVERIFY(!scene2.isActive());
+
+        QApplication::setActiveWindow(&toplevel2);
+        QTRY_COMPARE(QApplication::activeWindow(), &toplevel2);
+
+        QVERIFY(!scene1.isActive());
+        QVERIFY(scene2.isActive());
+
+
+    }
+
+    QVERIFY(!scene1.isActive());
+    QVERIFY(!scene2.isActive());
+
+    {
+        QWidget toplevel3;
+        QHBoxLayout *layout = new QHBoxLayout;
+        toplevel3.setLayout(layout);
+        QGraphicsView *view1 = new QGraphicsView(&scene1);
+        QGraphicsView *view2 = new QGraphicsView(&scene2);
+        layout->addWidget(view1);
+
+        QVERIFY(!scene1.isActive());
+        QVERIFY(!scene2.isActive());
+
+        toplevel3.show();
+        QApplication::setActiveWindow(&toplevel3);
+        QTest::qWaitForWindowShown(&toplevel3);
+        QTRY_COMPARE(QApplication::activeWindow(), &toplevel3);
+
+        QVERIFY(scene1.isActive());
+        QVERIFY(!scene2.isActive());
+
+        layout->addWidget(view2);
+        QApplication::processEvents();
+        QVERIFY(scene1.isActive());
+        QVERIFY(scene2.isActive());
+
+        view1->setParent(0);
+        QVERIFY(!scene1.isActive());
+        QVERIFY(scene2.isActive());
+        delete view1;
+    }
+
+    QVERIFY(!scene1.isActive());
+    QVERIFY(!scene2.isActive());
+
+}
+
+
 QTEST_MAIN(tst_QGraphicsScene)
 #include "tst_qgraphicsscene.moc"
-- 
cgit v0.12


From d3b9884b73561ac50bb6aa137a23933a2e4b14d4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=B8rgen=20Lind?= <jorgen.lind@nokia.com>
Date: Thu, 5 Nov 2009 11:39:35 +0100
Subject: Fix QT_NO_TOOLBAR

Reviewed-by: tom
---
 src/gui/statemachine/qguistatemachine.cpp | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/src/gui/statemachine/qguistatemachine.cpp b/src/gui/statemachine/qguistatemachine.cpp
index 1de5ffa..12c0dbe 100644
--- a/src/gui/statemachine/qguistatemachine.cpp
+++ b/src/gui/statemachine/qguistatemachine.cpp
@@ -266,8 +266,10 @@ static QEvent *cloneEvent(QEvent *e)
     case QEvent::WhatsThisClicked:
         return new QWhatsThisClickedEvent(*static_cast<QWhatsThisClickedEvent*>(e));
 
+#ifndef QT_NO_TOOLBAR
     case QEvent::ToolBarChange:
         return new QToolBarChangeEvent(*static_cast<QToolBarChangeEvent*>(e));
+#endif //QT_NO_TOOLBAR
 
     case QEvent::ApplicationActivate:
         return new QEvent(*e);
-- 
cgit v0.12


From 57d34fbffb6e4a6ec650c098315c370342a5c95e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=B8rgen=20Lind?= <jorgen.lind@nokia.com>
Date: Thu, 5 Nov 2009 12:45:05 +0100
Subject: Fix QT_NO_STATUSTIP

Reviewed-by: paul
---
 src/gui/statemachine/qguistatemachine.cpp | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/src/gui/statemachine/qguistatemachine.cpp b/src/gui/statemachine/qguistatemachine.cpp
index 12c0dbe..544a9dc 100644
--- a/src/gui/statemachine/qguistatemachine.cpp
+++ b/src/gui/statemachine/qguistatemachine.cpp
@@ -238,8 +238,10 @@ static QEvent *cloneEvent(QEvent *e)
         return new QHelpEvent(*static_cast<QHelpEvent*>(e));
     case QEvent::WhatsThis:
         return new QHelpEvent(*static_cast<QHelpEvent*>(e));
+#ifndef QT_NO_STATUSTIP
     case QEvent::StatusTip:
         return new QStatusTipEvent(*static_cast<QStatusTipEvent*>(e));
+#endif //QT_NO_STATUSTIP
 #ifndef QT_NO_ACTION
     case QEvent::ActionChanged:
     case QEvent::ActionAdded:
-- 
cgit v0.12


From b042eceda6ab46a7e651a30d68aad632791fdc3d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=B8rgen=20Lind?= <jorgen.lind@nokia.com>
Date: Thu, 5 Nov 2009 13:08:01 +0100
Subject: Fix QT_NO_TABLETEVENT

Reviewed-by: tom
---
 src/gui/statemachine/qguistatemachine.cpp | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/src/gui/statemachine/qguistatemachine.cpp b/src/gui/statemachine/qguistatemachine.cpp
index 544a9dc..68f737a 100644
--- a/src/gui/statemachine/qguistatemachine.cpp
+++ b/src/gui/statemachine/qguistatemachine.cpp
@@ -190,8 +190,10 @@ static QEvent *cloneEvent(QEvent *e)
         return new QInputMethodEvent(*static_cast<QInputMethodEvent*>(e));
     case QEvent::AccessibilityPrepare:
         return new QEvent(*e);
+#ifndef QT_NO_TABLETEVENT
     case QEvent::TabletMove:
         return new QTabletEvent(*static_cast<QTabletEvent*>(e));
+#endif //QT_NO_TABLETEVENT
     case QEvent::LocaleChange:
         return new QEvent(*e);
     case QEvent::LanguageChange:
@@ -200,10 +202,12 @@ static QEvent *cloneEvent(QEvent *e)
         return new QEvent(*e);
     case QEvent::Style:
         return new QEvent(*e);
+#ifndef QT_NO_TABLETEVENT
     case QEvent::TabletPress:
         return new QTabletEvent(*static_cast<QTabletEvent*>(e));
     case QEvent::TabletRelease:
         return new QTabletEvent(*static_cast<QTabletEvent*>(e));
+#endif //QT_NO_TABLETEVENT
     case QEvent::OkRequest:
         return new QEvent(*e);
     case QEvent::HelpRequest:
@@ -401,9 +405,11 @@ static QEvent *cloneEvent(QEvent *e)
     case QEvent::DynamicPropertyChange:
         return new QDynamicPropertyChangeEvent(*static_cast<QDynamicPropertyChangeEvent*>(e));
 
+#ifndef QT_NO_TABLETEVENT
     case QEvent::TabletEnterProximity:
     case QEvent::TabletLeaveProximity:
         return new QTabletEvent(*static_cast<QTabletEvent*>(e));
+#endif //QT_NO_TABLETEVENT
 
     case QEvent::NonClientAreaMouseMove:
     case QEvent::NonClientAreaMouseButtonPress:
-- 
cgit v0.12


From 19d24c867bfb7b95562e8658b0c795dc0296ba80 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=B8rgen=20Lind?= <jorgen.lind@nokia.com>
Date: Thu, 5 Nov 2009 15:39:17 +0100
Subject: Fix QT_NO_GRAPHICSEFFECT

Reviewed-by: paul
---
 src/gui/graphicsview/qgraphicsitem.cpp  | 17 +++++++++++++++++
 src/gui/graphicsview/qgraphicsitem.h    |  2 ++
 src/gui/graphicsview/qgraphicsitem_p.h  |  5 ++++-
 src/gui/graphicsview/qgraphicsscene.cpp |  7 ++++++-
 src/gui/graphicsview/qgraphicsscene_p.h |  4 ++++
 5 files changed, 33 insertions(+), 2 deletions(-)

diff --git a/src/gui/graphicsview/qgraphicsitem.cpp b/src/gui/graphicsview/qgraphicsitem.cpp
index 2fd499d..305fee1 100644
--- a/src/gui/graphicsview/qgraphicsitem.cpp
+++ b/src/gui/graphicsview/qgraphicsitem.cpp
@@ -1336,7 +1336,9 @@ QGraphicsItem::~QGraphicsItem()
         d_ptr->setParentItemHelper(0);
     }
 
+#ifndef QT_NO_GRAPHICSEFFECT
     delete d_ptr->graphicsEffect;
+#endif //QT_NO_GRAPHICSEFFECT
     if (d_ptr->transformData) {
         for(int i = 0; i < d_ptr->transformData->graphicsTransforms.size(); ++i) {
             QGraphicsTransform *t = d_ptr->transformData->graphicsTransforms.at(i);
@@ -2506,7 +2508,9 @@ void QGraphicsItem::setOpacity(qreal opacity)
 
     // Update.
     if (d_ptr->scene) {
+#ifndef QT_NO_GRAPHICSEFFECT
         d_ptr->invalidateGraphicsEffectsRecursively();
+#endif //QT_NO_GRAPHICSEFFECT
         d_ptr->scene->d_func()->markDirty(this, QRectF(),
                                           /*invalidateChildren=*/true,
                                           /*maybeDirtyClipPath=*/false,
@@ -2523,6 +2527,7 @@ void QGraphicsItem::setOpacity(qreal opacity)
 
     \since 4.6
 */
+#ifndef QT_NO_GRAPHICSEFFECT
 QGraphicsEffect *QGraphicsItem::graphicsEffect() const
 {
     return d_ptr->graphicsEffect;
@@ -2569,6 +2574,7 @@ void QGraphicsItem::setGraphicsEffect(QGraphicsEffect *effect)
 
     prepareGeometryChange();
 }
+#endif //QT_NO_GRAPHICSEFFECT
 
 /*!
     \internal
@@ -2582,6 +2588,7 @@ void QGraphicsItem::setGraphicsEffect(QGraphicsEffect *effect)
 */
 QRectF QGraphicsItemPrivate::effectiveBoundingRect() const
 {
+#ifndef QT_NO_GRAPHICSEFFECT
     QGraphicsEffect *effect = graphicsEffect;
     QRectF brect = effect && effect->isEnabled() ? effect->boundingRect() : q_ptr->boundingRect();
     if (ancestorFlags & QGraphicsItemPrivate::AncestorClipsChildren)
@@ -2598,6 +2605,10 @@ QRectF QGraphicsItemPrivate::effectiveBoundingRect() const
     }
 
     return brect;
+#else //QT_NO_GRAPHICSEFFECT
+    return q_ptr->boundingRect();
+#endif //QT_NO_GRAPHICSEFFECT
+
 }
 
 /*!
@@ -4977,6 +4988,7 @@ int QGraphicsItemPrivate::depth() const
 /*!
     \internal
 */
+#ifndef QT_NO_GRAPHICSEFFECT
 void QGraphicsItemPrivate::invalidateGraphicsEffectsRecursively()
 {
     QGraphicsItemPrivate *itemPrivate = this;
@@ -4989,6 +5001,7 @@ void QGraphicsItemPrivate::invalidateGraphicsEffectsRecursively()
         }
     } while ((itemPrivate = itemPrivate->parent ? itemPrivate->parent->d_ptr.data() : 0));
 }
+#endif //QT_NO_GRAPHICSEFFECT
 
 /*!
     \internal
@@ -5324,7 +5337,9 @@ void QGraphicsItem::update(const QRectF &rect)
         return;
 
     // Make sure we notify effects about invalidated source.
+#ifndef QT_NO_GRAPHICSEFFECT
     d_ptr->invalidateGraphicsEffectsRecursively();
+#endif //QT_NO_GRAPHICSEFFECT
 
     if (CacheMode(d_ptr->cacheMode) != NoCache) {
         // Invalidate cache.
@@ -10678,6 +10693,7 @@ int QGraphicsItemGroup::type() const
     return Type;
 }
 
+#ifndef QT_NO_GRAPHICSEFFECT
 QRectF QGraphicsItemEffectSourcePrivate::boundingRect(Qt::CoordinateSystem system) const
 {
     const bool deviceCoordinates = (system == Qt::DeviceCoordinates);
@@ -10817,6 +10833,7 @@ QPixmap QGraphicsItemEffectSourcePrivate::pixmap(Qt::CoordinateSystem system, QP
 
     return pixmap;
 }
+#endif //QT_NO_GRAPHICSEFFECT
 
 #ifndef QT_NO_DEBUG_STREAM
 QDebug operator<<(QDebug debug, QGraphicsItem *item)
diff --git a/src/gui/graphicsview/qgraphicsitem.h b/src/gui/graphicsview/qgraphicsitem.h
index f091e34..84d9eaf 100644
--- a/src/gui/graphicsview/qgraphicsitem.h
+++ b/src/gui/graphicsview/qgraphicsitem.h
@@ -225,9 +225,11 @@ public:
     qreal effectiveOpacity() const;
     void setOpacity(qreal opacity);
 
+#ifndef QT_NO_GRAPHICSEFFECT
     // Effect
     QGraphicsEffect *graphicsEffect() const;
     void setGraphicsEffect(QGraphicsEffect *effect);
+#endif //QT_NO_GRAPHICSEFFECT
 
     Qt::MouseButtons acceptedMouseButtons() const;
     void setAcceptedMouseButtons(Qt::MouseButtons buttons);
diff --git a/src/gui/graphicsview/qgraphicsitem_p.h b/src/gui/graphicsview/qgraphicsitem_p.h
index 51d2ffd..b914c5c 100644
--- a/src/gui/graphicsview/qgraphicsitem_p.h
+++ b/src/gui/graphicsview/qgraphicsitem_p.h
@@ -223,7 +223,9 @@ public:
     bool discardUpdateRequest(bool ignoreClipping = false, bool ignoreVisibleBit = false,
                               bool ignoreDirtyBit = false, bool ignoreOpacity = false) const;
     int depth() const;
+#ifndef QT_NO_GRAPHICSEFFECT
     void invalidateGraphicsEffectsRecursively();
+#endif //QT_NO_GRAPHICSEFFECT
     void invalidateDepthRecursively();
     void resolveDepth();
     void addChild(QGraphicsItem *child);
@@ -577,6 +579,7 @@ struct QGraphicsItemPaintInfo
     quint32 drawItem : 1;
 };
 
+#ifndef QT_NO_GRAPHICSEFFECT
 class QGraphicsItemEffectSourcePrivate : public QGraphicsEffectSourcePrivate
 {
 public:
@@ -632,7 +635,7 @@ public:
     QGraphicsItemPaintInfo *info;
     QTransform lastEffectTransform;
 };
-
+#endif //QT_NO_GRAPHICSEFFECT
 
 /*!
     Returns true if \a item1 is on top of \a item2.
diff --git a/src/gui/graphicsview/qgraphicsscene.cpp b/src/gui/graphicsview/qgraphicsscene.cpp
index dc036f8..c4771c1 100644
--- a/src/gui/graphicsview/qgraphicsscene.cpp
+++ b/src/gui/graphicsview/qgraphicsscene.cpp
@@ -4577,6 +4577,7 @@ void QGraphicsScenePrivate::drawSubtreeRecursive(QGraphicsItem *item, QPainter *
     if (itemHasChildren && itemClipsChildrenToShape)
         ENSURE_TRANSFORM_PTR;
 
+#ifndef QT_NO_GRAPHICSEFFECT
     if (item->d_ptr->graphicsEffect && item->d_ptr->graphicsEffect->isEnabled()) {
         ENSURE_TRANSFORM_PTR;
         QGraphicsItemPaintInfo info(viewTransform, transformPtr, effectTransform, exposedRegion, widget, &styleOptionTmp,
@@ -4599,7 +4600,9 @@ void QGraphicsScenePrivate::drawSubtreeRecursive(QGraphicsItem *item, QPainter *
         item->d_ptr->graphicsEffect->draw(painter, source);
         painter->setWorldTransform(restoreTransform);
         sourced->info = 0;
-    } else {
+    } else
+#endif //QT_NO_GRAPHICSEFFECT
+    {
         draw(item, painter, viewTransform, transformPtr, exposedRegion, widget, opacity,
              effectTransform, wasDirtyParentSceneTransform, drawItem);
     }
@@ -4768,10 +4771,12 @@ void QGraphicsScenePrivate::markDirty(QGraphicsItem *item, const QRectF &rect, b
     QGraphicsItem *p = item->d_ptr->parent;
     while (p) {
         p->d_ptr->dirtyChildren = 1;
+#ifndef QT_NO_GRAPHICSEFFECT
         if (p->d_ptr->graphicsEffect && p->d_ptr->graphicsEffect->isEnabled()) {
             p->d_ptr->dirty = 1;
             p->d_ptr->fullUpdatePending = 1;
         }
+#endif //QT_NO_GRAPHICSEFFECT
         p = p->d_ptr->parent;
     }
 }
diff --git a/src/gui/graphicsview/qgraphicsscene_p.h b/src/gui/graphicsview/qgraphicsscene_p.h
index f8db084..a2a1ee1 100644
--- a/src/gui/graphicsview/qgraphicsscene_p.h
+++ b/src/gui/graphicsview/qgraphicsscene_p.h
@@ -234,6 +234,7 @@ public:
         item->d_ptr->fullUpdatePending = 0;
         item->d_ptr->ignoreVisible = 0;
         item->d_ptr->ignoreOpacity = 0;
+#ifndef QT_NO_GRAPHICSEFFECT
         QGraphicsEffect::ChangeFlags flags;
         if (item->d_ptr->notifyBoundingRectChanged) {
             flags |= QGraphicsEffect::SourceBoundingRectChanged;
@@ -243,12 +244,15 @@ public:
             flags |= QGraphicsEffect::SourceInvalidated;
             item->d_ptr->notifyInvalidated = 0;
         }
+#endif //QT_NO_GRAPHICSEFFECT
         if (recursive) {
             for (int i = 0; i < item->d_ptr->children.size(); ++i)
                 resetDirtyItem(item->d_ptr->children.at(i), recursive);
         }
+#ifndef QT_NO_GRAPHICSEFFECT
         if (flags && item->d_ptr->graphicsEffect)
             item->d_ptr->graphicsEffect->sourceChanged(flags);
+#endif //QT_NO_GRAPHICSEFFECT
     }
 
     inline void ensureSortedTopLevelItems()
-- 
cgit v0.12


From 4bbcfc85eb69f7a04b1ec4264ded855be0df46d7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=B8rgen=20Lind?= <jorgen.lind@nokia.com>
Date: Fri, 6 Nov 2009 10:28:16 +0100
Subject: Fix QT_NO_DATESTRING

Reviewed-by: tom
---
 src/corelib/global/qlibraryinfo.cpp | 2 ++
 src/corelib/global/qlibraryinfo.h   | 2 ++
 2 files changed, 4 insertions(+)

diff --git a/src/corelib/global/qlibraryinfo.cpp b/src/corelib/global/qlibraryinfo.cpp
index 15a06d7..15325ae 100644
--- a/src/corelib/global/qlibraryinfo.cpp
+++ b/src/corelib/global/qlibraryinfo.cpp
@@ -212,11 +212,13 @@ QLibraryInfo::buildKey()
     Returns the installation date for this build of Qt. The install date will
     usually be the last time that Qt sources were configured.
 */
+#ifndef QT_NO_DATESTRING
 QDate
 QLibraryInfo::buildDate()
 {
     return QDate::fromString(QString::fromLatin1(qt_configure_installation + 12), Qt::ISODate);
 }
+#endif //QT_NO_DATESTRING
 
 /*!
   Returns the location specified by \a loc.
diff --git a/src/corelib/global/qlibraryinfo.h b/src/corelib/global/qlibraryinfo.h
index 88e8566..f65051d 100644
--- a/src/corelib/global/qlibraryinfo.h
+++ b/src/corelib/global/qlibraryinfo.h
@@ -60,7 +60,9 @@ public:
     static QString licensedProducts();
 
     static QString buildKey();
+#ifndef QT_NO_DATESTRING
     static QDate buildDate();
+#endif //QT_NO_DATESTRING
 
     enum LibraryLocation
     {
-- 
cgit v0.12


From 628a0d9d54f50a9e75cb8f26e4927231a2130e84 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=B8rgen=20Lind?= <jorgen.lind@nokia.com>
Date: Fri, 6 Nov 2009 10:28:52 +0100
Subject: Fix QT_NO_SHORTCUT

Reviewed-by: Harald Fernengel <harald.fernengel@nokia.com>
---
 src/gui/statemachine/qguistatemachine.cpp        | 2 ++
 src/plugins/accessible/widgets/simplewidgets.cpp | 4 ++--
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/src/gui/statemachine/qguistatemachine.cpp b/src/gui/statemachine/qguistatemachine.cpp
index 68f737a..4db10ca 100644
--- a/src/gui/statemachine/qguistatemachine.cpp
+++ b/src/gui/statemachine/qguistatemachine.cpp
@@ -255,8 +255,10 @@ static QEvent *cloneEvent(QEvent *e)
     case QEvent::FileOpen:
         return new QFileOpenEvent(*static_cast<QFileOpenEvent*>(e));
 
+#ifndef QT_NO_SHORTCUT
     case QEvent::Shortcut:
         return new QShortcutEvent(*static_cast<QShortcutEvent*>(e));
+#endif //QT_NO_SHORTCUT
     case QEvent::ShortcutOverride:
         return new QKeyEvent(*static_cast<QKeyEvent*>(e));
 
diff --git a/src/plugins/accessible/widgets/simplewidgets.cpp b/src/plugins/accessible/widgets/simplewidgets.cpp
index aa51759..e0e20db 100644
--- a/src/plugins/accessible/widgets/simplewidgets.cpp
+++ b/src/plugins/accessible/widgets/simplewidgets.cpp
@@ -256,9 +256,9 @@ QString QAccessibleButton::localizedName(int actionIndex)
 QStringList QAccessibleButton::keyBindings(int actionIndex)
 {
     switch (actionIndex) {
-#ifdef QT_NO_SHORTCUT
+#ifndef QT_NO_SHORTCUT
     case 0:
-        return button()->shortcut().toString();
+        return QStringList() << button()->shortcut().toString();
 #endif
     default:
         return QStringList();
-- 
cgit v0.12


From 7713d95161bf986bb9dbd3e7a9033ce2e29b7213 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=B8rgen=20Lind?= <jorgen.lind@nokia.com>
Date: Fri, 6 Nov 2009 11:43:44 +0100
Subject: Fix QT_NO_MENUBAR

Reviewed-by: tom
---
 src/gui/widgets/qmenu.cpp | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/src/gui/widgets/qmenu.cpp b/src/gui/widgets/qmenu.cpp
index 1b5d1cd..c567955 100644
--- a/src/gui/widgets/qmenu.cpp
+++ b/src/gui/widgets/qmenu.cpp
@@ -1878,9 +1878,11 @@ void QMenu::popup(const QPoint &p, QAction *atAction)
             if(snapToMouse) //position flowing left from the mouse
                 pos.setX(mouse.x()-size.width());
 
+#ifndef QT_NO_MENUBAR
             //if in a menubar, it should be right-aligned
             if (qobject_cast<QMenuBar*>(d->causedPopup.widget))
                 pos.rx() -= size.width();
+#endif //QT_NO_MENUBAR
 
             if (pos.x() < screen.left()+desktopFrame)
                 pos.setX(qMax(p.x(), screen.left()+desktopFrame));
-- 
cgit v0.12


From 3cbf477c7b71771a71fed920800a9938abc3c001 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=B8rgen=20Lind?= <jorgen.lind@nokia.com>
Date: Fri, 6 Nov 2009 11:55:28 +0100
Subject: Fix QT_NO_WHATSTHIS

Reviewed-by: tom
---
 src/gui/statemachine/qguistatemachine.cpp | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/src/gui/statemachine/qguistatemachine.cpp b/src/gui/statemachine/qguistatemachine.cpp
index 4db10ca..2ae13f3 100644
--- a/src/gui/statemachine/qguistatemachine.cpp
+++ b/src/gui/statemachine/qguistatemachine.cpp
@@ -271,8 +271,10 @@ static QEvent *cloneEvent(QEvent *e)
         break;
 #endif
 
+#ifndef QT_NO_WHATSTHIS
     case QEvent::WhatsThisClicked:
         return new QWhatsThisClickedEvent(*static_cast<QWhatsThisClickedEvent*>(e));
+#endif //QT_NO_WHATSTHIS
 
 #ifndef QT_NO_TOOLBAR
     case QEvent::ToolBarChange:
-- 
cgit v0.12


From 55b27267a6a21d15c3a505668aefed824d5cdf4e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=B8rgen=20Lind?= <jorgen.lind@nokia.com>
Date: Fri, 6 Nov 2009 12:43:29 +0100
Subject: Fix QT_NO_WHEELEVENT

Reviewed-by: Trust Me
---
 src/gui/statemachine/qguistatemachine.cpp | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/src/gui/statemachine/qguistatemachine.cpp b/src/gui/statemachine/qguistatemachine.cpp
index 2ae13f3..4f7806f 100644
--- a/src/gui/statemachine/qguistatemachine.cpp
+++ b/src/gui/statemachine/qguistatemachine.cpp
@@ -106,8 +106,10 @@ static QEvent *cloneEvent(QEvent *e)
         return new QEvent(*e);
     case QEvent::HideToParent:
         return new QEvent(*e);
+#ifndef QT_NO_WHEELEVENT
     case QEvent::Wheel:
         return new QWheelEvent(*static_cast<QWheelEvent*>(e));
+#endif //QT_NO_WHEELEVENT
     case QEvent::WindowTitleChange:
         return new QEvent(*e);
     case QEvent::WindowIconChange:
-- 
cgit v0.12


From 1edc42765fa922a4d89a64d5edce2af27b72713b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jan-Arve=20S=C3=A6ther?= <jan-arve.saether@nokia.com>
Date: Fri, 6 Nov 2009 13:20:51 +0100
Subject: Add documentation for the new min/pref/maxSize properties.

---
 src/gui/graphicsview/qgraphicswidget.cpp | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

diff --git a/src/gui/graphicsview/qgraphicswidget.cpp b/src/gui/graphicsview/qgraphicswidget.cpp
index d70a281..6f910c7 100644
--- a/src/gui/graphicsview/qgraphicswidget.cpp
+++ b/src/gui/graphicsview/qgraphicswidget.cpp
@@ -410,6 +410,27 @@ void QGraphicsWidget::setGeometry(const QRectF &rect)
 */
 
 /*!
+    \property QGraphicsWidget::minimumSize
+    \brief the minimum size of the widget
+
+    \sa setMinimumSize(), minimumSize(), preferredSize, maximumSize
+*/
+
+/*!
+    \property QGraphicsWidget::preferredSize
+    \brief the preferred size of the widget
+
+    \sa setPreferredSize(), preferredSize(), minimumSize, maximumSize
+*/
+
+/*!
+    \property QGraphicsWidget::maximumSize
+    \brief the maximum size of the widget
+
+    \sa setMaximumSize(), maximumSize(), minimumSize, preferredSize
+*/
+
+/*!
     Sets the widget's contents margins to \a left, \a top, \a right and \a
     bottom.
 
-- 
cgit v0.12


From 2c0108ee5aa1cd21c9f3aee23e1d9eec71d600e6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jan-Arve=20S=C3=A6ther?= <jan-arve.saether@nokia.com>
Date: Fri, 6 Nov 2009 13:21:54 +0100
Subject: Use 0 instead of NULL.

---
 src/gui/graphicsview/qgraphicsanchorlayout_p.cpp | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/src/gui/graphicsview/qgraphicsanchorlayout_p.cpp b/src/gui/graphicsview/qgraphicsanchorlayout_p.cpp
index 7ad994c..96f8930 100644
--- a/src/gui/graphicsview/qgraphicsanchorlayout_p.cpp
+++ b/src/gui/graphicsview/qgraphicsanchorlayout_p.cpp
@@ -966,8 +966,8 @@ void QGraphicsAnchorLayoutPrivate::deleteLayoutEdges()
 {
     Q_Q(QGraphicsAnchorLayout);
 
-    Q_ASSERT(internalVertex(q, Qt::AnchorHorizontalCenter) == NULL);
-    Q_ASSERT(internalVertex(q, Qt::AnchorVerticalCenter) == NULL);
+    Q_ASSERT(!internalVertex(q, Qt::AnchorHorizontalCenter));
+    Q_ASSERT(!internalVertex(q, Qt::AnchorVerticalCenter));
 
     removeAnchor_helper(internalVertex(q, Qt::AnchorLeft),
                         internalVertex(q, Qt::AnchorRight));
@@ -2036,7 +2036,7 @@ QList<QSimplexConstraint *> QGraphicsAnchorLayoutPrivate::constraintsFromSizeHin
     // Look for the layout edge. That can be either the first half in case the
     // layout is split in two, or the whole layout anchor.
     Orientation orient = Orientation(anchors.first()->orientation);
-    AnchorData *layoutEdge = NULL;
+    AnchorData *layoutEdge = 0;
     if (layoutCentralVertex[orient]) {
         layoutEdge = graph[orient].edgeData(layoutFirstVertex[orient], layoutCentralVertex[orient]);
     } else {
@@ -2047,7 +2047,7 @@ QList<QSimplexConstraint *> QGraphicsAnchorLayoutPrivate::constraintsFromSizeHin
         // set back the variable to NULL to prevent the continue condition from being
         // satisfied in the loop below.
         if (layoutEdge->maxSize < QWIDGETSIZE_MAX)
-            layoutEdge = NULL;
+            layoutEdge = 0;
     }
 
     // For each variable, create constraints based on size hints
@@ -2111,8 +2111,8 @@ QGraphicsAnchorLayoutPrivate::getGraphParts(Orientation orientation)
 {
     Q_ASSERT(layoutFirstVertex[orientation] && layoutLastVertex[orientation]);
 
-    AnchorData *edgeL1 = NULL;
-    AnchorData *edgeL2 = NULL;
+    AnchorData *edgeL1 = 0;
+    AnchorData *edgeL2 = 0;
 
     // The layout may have a single anchor between Left and Right or two half anchors
     // passing through the center
-- 
cgit v0.12


From 6cd1a36774605afaa37d8e3edf870f9133e1cf3e Mon Sep 17 00:00:00 2001
From: Thomas Hartmann <Thomas.Hartmann@nokia.com>
Date: Wed, 4 Nov 2009 13:09:30 +0100
Subject: compilefixes for qfeatures

Reviewed-by: Maurice
---
 src/gui/kernel/qsoftkeymanager.cpp     |  4 ++++
 src/gui/kernel/qwidget_win.cpp         | 14 ++++++++++++--
 src/gui/styles/qwindowsmobilestyle.cpp |  7 ++++++-
 src/gui/styles/qwindowsmobilestyle_p.h |  4 ++++
 4 files changed, 26 insertions(+), 3 deletions(-)

diff --git a/src/gui/kernel/qsoftkeymanager.cpp b/src/gui/kernel/qsoftkeymanager.cpp
index 21795b4..e970d2f 100644
--- a/src/gui/kernel/qsoftkeymanager.cpp
+++ b/src/gui/kernel/qsoftkeymanager.cpp
@@ -137,12 +137,14 @@ QAction *QSoftKeyManager::createAction(StandardSoftKey standardKey, QWidget *act
 */
 QAction *QSoftKeyManager::createKeyedAction(StandardSoftKey standardKey, Qt::Key key, QWidget *actionWidget)
 {
+#ifndef QT_NO_ACTION
     QScopedPointer<QAction> action(createAction(standardKey, actionWidget));
 
     connect(action.data(), SIGNAL(triggered()), QSoftKeyManager::instance(), SLOT(sendKeyEvent()));
     connect(action.data(), SIGNAL(destroyed(QObject*)), QSoftKeyManager::instance(), SLOT(cleanupHash(QObject*)));
     QSoftKeyManager::instance()->d_func()->keyedActions.insert(action.data(), key);
     return action.take();
+#endif //QT_NO_ACTION
 }
 
 void QSoftKeyManager::cleanupHash(QObject* obj)
@@ -175,6 +177,7 @@ void QSoftKeyManager::updateSoftKeys()
 
 bool QSoftKeyManager::event(QEvent *e)
 {
+#ifndef QT_NO_ACTION
     if (e->type() == QEvent::UpdateSoftKeys) {
         QList<QAction*> softKeys;
         QWidget *source = QApplication::focusWidget();
@@ -201,6 +204,7 @@ bool QSoftKeyManager::event(QEvent *e)
             QSoftKeyManagerPrivate::updateSoftKeys_sys(softKeys);
         return true;
     }
+#endif //QT_NO_ACTION
     return false;
 }
 
diff --git a/src/gui/kernel/qwidget_win.cpp b/src/gui/kernel/qwidget_win.cpp
index 22a94b9..2bdaddb 100644
--- a/src/gui/kernel/qwidget_win.cpp
+++ b/src/gui/kernel/qwidget_win.cpp
@@ -677,7 +677,11 @@ QPoint QWidget::mapToGlobal(const QPoint &pos) const
     QWidget *parentWindow = window();
     QWExtra *extra = parentWindow->d_func()->extra;
     if (!isVisible() || parentWindow->isMinimized() || !testAttribute(Qt::WA_WState_Created) || !internalWinId()
-        || (extra && extra->proxyWidget)) {
+        || (extra
+#ifndef QT_NO_GRAPHICSVIEW
+            && extra->proxyWidget
+#endif //QT_NO_GRAPHICSVIEW
+            )) {
         if (extra && extra->topextra && extra->topextra->embedded) {
             QPoint pt = mapTo(parentWindow, pos);
             POINT p = {pt.x(), pt.y()};
@@ -704,7 +708,11 @@ QPoint QWidget::mapFromGlobal(const QPoint &pos) const
     QWidget *parentWindow = window();
     QWExtra *extra = parentWindow->d_func()->extra;
     if (!isVisible() || parentWindow->isMinimized() || !testAttribute(Qt::WA_WState_Created) || !internalWinId()
-        || (extra && extra->proxyWidget)) {
+        || (extra
+#ifndef QT_NO_GRAPHICSVIEW
+            && extra->proxyWidget
+#endif //QT_NO_GRAPHICSVIEW
+            )) {
         if (extra && extra->topextra && extra->topextra->embedded) {
             POINT p = {pos.x(), pos.y()};
             ScreenToClient(parentWindow->effectiveWinId(), &p);
@@ -2042,6 +2050,7 @@ void QWidgetPrivate::winSetupGestures()
     bool needv = false;
     bool singleFingerPanEnabled = false;
 
+#ifndef QT_NO_SCROLLAREA
     if (QAbstractScrollArea *asa = qobject_cast<QAbstractScrollArea*>(q->parent())) {
         QScrollBar *hbar = asa->horizontalScrollBar();
         QScrollBar *vbar = asa->verticalScrollBar();
@@ -2055,6 +2064,7 @@ void QWidgetPrivate::winSetupGestures()
         if (!winid)
             winid = q->winId(); // enforces the native winid on the viewport
     }
+#endif //QT_NO_SCROLLAREA
     if (winid && qAppPriv->SetGestureConfig) {
         GESTURECONFIG gc[1];
         memset(gc, 0, sizeof(gc));
diff --git a/src/gui/styles/qwindowsmobilestyle.cpp b/src/gui/styles/qwindowsmobilestyle.cpp
index 7ed187f..c543006 100644
--- a/src/gui/styles/qwindowsmobilestyle.cpp
+++ b/src/gui/styles/qwindowsmobilestyle.cpp
@@ -4121,6 +4121,7 @@ void QWindowsMobileStylePrivate::setupWindowsMobileStyle65()
 
 void QWindowsMobileStylePrivate::drawTabBarTab(QPainter *painter, const QStyleOptionTab *tab)
 {
+#ifndef QT_NO_TABBAR
 #ifdef Q_WS_WINCE_WM
     if (wm65) {
         tintImagesButton(tab->palette.button().color());
@@ -4207,6 +4208,7 @@ void QWindowsMobileStylePrivate::drawTabBarTab(QPainter *painter, const QStyleOp
         }
     }
     painter->restore();
+#endif //QT_NO_TABBAR
 }
 
 void QWindowsMobileStylePrivate::drawPanelItemViewSelected(QPainter *painter, const QStyleOptionViewItemV4 *option, QRect rect)
@@ -4412,7 +4414,7 @@ void QWindowsMobileStylePrivate::drawScrollbarHandleUp(QPainter *p, QStyleOption
 
 void QWindowsMobileStylePrivate::drawScrollbarHandleDown(QPainter *p, QStyleOptionSlider *opt, bool completeFrame, bool secondScrollBar)
 {
-
+#ifndef QT_NO_SCROLLBAR
 #ifdef Q_WS_WINCE_WM
     if (wm65) {
         tintImagesHigh(opt->palette.highlight().color());
@@ -4469,10 +4471,12 @@ void QWindowsMobileStylePrivate::drawScrollbarHandleDown(QPainter *p, QStyleOpti
             arrowOpt.rect.adjust(1, 0, 1, 0);
         q_func()->proxy()->drawPrimitive(QStyle::PE_IndicatorArrowDown, &arrowOpt, p, 0);
     }
+#endif //QT_NO_SCROLLBAR
 }
 
 void QWindowsMobileStylePrivate::drawScrollbarGroove(QPainter *p,const QStyleOptionSlider *opt)
 {
+#ifndef QT_NO_SCROLLBAR
 #ifdef Q_OS_WINCE_WM
     if (wm65) {
         p->fillRect(opt->rect, QColor(231, 231, 231));
@@ -4498,6 +4502,7 @@ void QWindowsMobileStylePrivate::drawScrollbarGroove(QPainter *p,const QStyleOpt
               fill = opt->palette.light();
             }
             p->fillRect(opt->rect, fill);
+#endif //QT_NO_SCROLLBAR
 }
 
 QWindowsMobileStyle::QWindowsMobileStyle(QWindowsMobileStylePrivate &dd) : QWindowsStyle(dd) {
diff --git a/src/gui/styles/qwindowsmobilestyle_p.h b/src/gui/styles/qwindowsmobilestyle_p.h
index 1e8c7ff..139a4ab 100644
--- a/src/gui/styles/qwindowsmobilestyle_p.h
+++ b/src/gui/styles/qwindowsmobilestyle_p.h
@@ -60,6 +60,10 @@ QT_BEGIN_NAMESPACE
 
 #ifndef QT_NO_STYLE_WINDOWSMOBILE
 
+class QStyleOptionTab;
+class QStyleOptionSlider;
+class QStyleOptionViewItemV4;
+
 class QWindowsMobileStylePrivate : public QWindowsStylePrivate
 {
     Q_DECLARE_PUBLIC(QWindowsMobileStyle)
-- 
cgit v0.12


From a48ab815b5b6f6a20d4c8a2dba41e6dfc6a54073 Mon Sep 17 00:00:00 2001
From: Keith Isdale <keith.isdale@nokia.com>
Date: Fri, 6 Nov 2009 16:16:35 +1000
Subject:     cetest crashes and no helpful debugging provided

    Unguarded use of QList::first() leads to Q_ASSERT() if the list is empty
    Add support for a "-d" option to project file print parser debugging
    Do not make use of QMAKESPEC variables in .qmake.cache instead
       determine the current default if mkspec was not passed to cetest

    Task-number: QTBUG-5490
    Reviewed-by: Lincoln Ramsay
                Joerg Bornemann
---
 tools/qtestlib/wince/cetest/main.cpp | 36 +++++++++++++++++++++++++++++++++---
 1 file changed, 33 insertions(+), 3 deletions(-)

diff --git a/tools/qtestlib/wince/cetest/main.cpp b/tools/qtestlib/wince/cetest/main.cpp
index e00c0e7..763439a 100644
--- a/tools/qtestlib/wince/cetest/main.cpp
+++ b/tools/qtestlib/wince/cetest/main.cpp
@@ -129,6 +129,7 @@ void usage()
         " -conf             : Specify location of qt.conf file\n"
         " -f <file>         : Specify project file\n"
         " -cache <file>     : Specify .qmake.cache file to use\n"
+        " -d                : Increase qmake debugging \n"
         " -timeout <value>  : Specify a timeout value after which the test will be terminated\n"
         "                     -1 specifies waiting forever (default)\n"
         "                      0 specifies starting the process detached\n"
@@ -216,6 +217,8 @@ int main(int argc, char **argv)
                 return -1;
             }
             cacheFile = arguments.at(i);
+        } else if (arguments.at(i).toLower() == QLatin1String("-d")) {
+            Option::debug_level++;
         } else if (arguments.at(i).toLower() == QLatin1String("-timeout")) {
             if (++i == arguments.size()) {
                 cout << "Error: No timeout value specified!" << endl;
@@ -235,13 +238,22 @@ int main(int argc, char **argv)
             return -1;
         }
         debugOutput(QString::fromLatin1("Using Project File:").append(proFile),1);
+    }else {
+        if (!QFileInfo(proFile).exists()) {
+            cout << "Error: Project file does not exist " << qPrintable(proFile) << endl;
+            return -1;
+        }
     }
 
     Option::before_user_vars.append("CONFIG+=build_pass");
 
-    // read target and deployment rules
-    int qmakeArgc = 1;
-    char* qmakeArgv[] = { "qmake.exe" };
+    // read target and deployment rules passing the .pro to use instead of
+    //      relying on qmake guessing the .pro to use
+    int qmakeArgc = 2;
+    QByteArray ba(QFile::encodeName(proFile));
+    char* proFileEncodedName =  ba.data();
+    char* qmakeArgv[2] = { "qmake.exe", proFileEncodedName };
+
     Option::qmake_mode = Option::QMAKE_GENERATE_NOTHING;
     Option::output_dir = qmake_getpwd();
     if (!cacheFile.isEmpty())
@@ -267,6 +279,24 @@ int main(int argc, char **argv)
     else
         TestConfiguration::testDebug = false;
 
+    // determine what is the real mkspec to use if the default mkspec is being used
+    if (Option::mkfile::qmakespec.endsWith("/default"))
+        project.values("QMAKESPEC") = project.values("QMAKESPEC_ORIGINAL");
+    else
+        project.values("QMAKESPEC") = QStringList() << Option::mkfile::qmakespec;
+
+   // ensure that QMAKESPEC is non-empty .. to meet requirements of QList::at()
+   if (project.values("QMAKESPEC").isEmpty()){
+       cout << "Error: QMAKESPEC not set after parsing " << qPrintable(proFile) << endl;
+       return -1;
+   }
+
+   // ensure that QT_CE_C_RUNTIME is non-empty .. to meet requirements of QList::at()
+   if (project.values("QT_CE_C_RUNTIME").isEmpty()){
+       cout << "Error: QT_CE_C_RUNTIME not defined in mkspec/qconfig.pri " << qPrintable(project.values("QMAKESPEC").join(" "));
+       return -1;
+   }
+
     QString destDir = project.values("DESTDIR").join(" ");
     if (!destDir.isEmpty()) {
         if (QDir::isRelativePath(destDir)) {
-- 
cgit v0.12


From e3d3973d761248da23343be47e1be6777e9e84f0 Mon Sep 17 00:00:00 2001
From: Joerg Bornemann <joerg.bornemann@nokia.com>
Date: Fri, 6 Nov 2009 12:06:22 +0100
Subject: fixes button size for Windows mobile style

The old button sizes were just to big. For example the trivialwizard
example had a minimal width that was much too wide for the screen.

Task-number: QTBUG-3613
Reviewed-by: thartman
---
 src/gui/styles/qwindowsmobilestyle.cpp | 14 +++++++++-----
 1 file changed, 9 insertions(+), 5 deletions(-)

diff --git a/src/gui/styles/qwindowsmobilestyle.cpp b/src/gui/styles/qwindowsmobilestyle.cpp
index c543006..86ba947 100644
--- a/src/gui/styles/qwindowsmobilestyle.cpp
+++ b/src/gui/styles/qwindowsmobilestyle.cpp
@@ -6330,16 +6330,20 @@ QSize QWindowsMobileStyle::sizeFromContents(ContentsType type, const QStyleOptio
     switch (type) {
     case CT_PushButton:
        if (const QStyleOptionButton *button = qstyleoption_cast<const QStyleOptionButton *>(option)) {
-            newSize = QWindowsStyle::sizeFromContents(type, option, size, widget);
+            newSize = QCommonStyle::sizeFromContents(type, option, size, widget);
             int w = newSize.width(),
                 h = newSize.height();
             int defwidth = 0;
             if (button->features & QStyleOptionButton::AutoDefaultButton)
                 defwidth = 2 * proxy()->pixelMetric(PM_ButtonDefaultIndicator, button, widget);
-            if (w < 75 + defwidth && button->icon.isNull())
-                w = 75 + defwidth;
-            if (h < 23 + defwidth)
-                h = 23 + defwidth;
+
+            int minwidth = int(QStyleHelper::dpiScaled(55.0f));
+            int minheight = int(QStyleHelper::dpiScaled(19.0f));
+
+            if (w < minwidth + defwidth && button->icon.isNull())
+                w = minwidth + defwidth;
+            if (h < minheight + defwidth)
+                h = minheight + defwidth;
             newSize = QSize(w + 4, h + 4);
         }
         break;
-- 
cgit v0.12


From 85a7c3477742516e1b89d527eccf702ffaca767f Mon Sep 17 00:00:00 2001
From: Joerg Bornemann <joerg.bornemann@nokia.com>
Date: Fri, 6 Nov 2009 12:12:09 +0100
Subject: fix QWizard issues on Windows CE

Was reproducable with the example in
<QTDIR>\examples\dialogs\trivialwizard

You could not push the navigation buttons using the stylus.

Task-number: QTBUG-3613
Reviewed-by: thartman
---
 src/gui/kernel/qwidget_win.cpp | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/src/gui/kernel/qwidget_win.cpp b/src/gui/kernel/qwidget_win.cpp
index 2bdaddb..b7ba273 100644
--- a/src/gui/kernel/qwidget_win.cpp
+++ b/src/gui/kernel/qwidget_win.cpp
@@ -1339,8 +1339,15 @@ void QWidgetPrivate::setGeometry_sys(int x, int y, int w, int h, bool isMove)
     if (isResize && !q->testAttribute(Qt::WA_StaticContents) && q->internalWinId())
         ValidateRgn(q->internalWinId(), 0);
 
+#ifdef Q_WS_WINCE
+    // On Windows CE we can't just fiddle around with the window state.
+    // Too much magic in setWindowState.
+    if (isResize && q->isMaximized())
+        q->setWindowState(q->windowState() & ~Qt::WindowMaximized);
+#else
     if (isResize)
         data.window_state &= ~Qt::WindowMaximized;
+#endif
 
     if (data.window_state & Qt::WindowFullScreen) {
         QTLWExtra *top = topData();
-- 
cgit v0.12


From 6d7d54813f4cfc326fc52d3402653b924677124a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=B8rgen=20Lind?= <jorgen.lind@nokia.com>
Date: Fri, 6 Nov 2009 14:13:42 +0100
Subject: Fix QT_NO_GRAPHICSVIEW

Reviewed-by: paul
---
 src/gui/kernel/qgesturemanager.cpp | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/src/gui/kernel/qgesturemanager.cpp b/src/gui/kernel/qgesturemanager.cpp
index 628892d..a0b94b2 100644
--- a/src/gui/kernel/qgesturemanager.cpp
+++ b/src/gui/kernel/qgesturemanager.cpp
@@ -175,8 +175,10 @@ QGesture *QGestureManager::getState(QObject *object, QGestureRecognizer *recogni
             return 0;
     } else if (QGesture *g = qobject_cast<QGesture *>(object)) {
         return g;
+#ifndef QT_NO_GRAPHICSVIEW
     } else {
         Q_ASSERT(qobject_cast<QGraphicsObject *>(object));
+#endif
     }
 
     QList<QGesture *> states =
-- 
cgit v0.12


From e59c34d93f99530c4b3c69ac7ef6e61d033edef6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jan-Arve=20S=C3=A6ther?= <jan-arve.saether@nokia.com>
Date: Fri, 6 Nov 2009 14:26:11 +0100
Subject: docs: Add a section about known issues for the anchor layout.

---
 src/gui/graphicsview/qgraphicsanchorlayout.cpp | 21 +++++++++++++++++----
 1 file changed, 17 insertions(+), 4 deletions(-)

diff --git a/src/gui/graphicsview/qgraphicsanchorlayout.cpp b/src/gui/graphicsview/qgraphicsanchorlayout.cpp
index 56d70e1..872ec3c 100644
--- a/src/gui/graphicsview/qgraphicsanchorlayout.cpp
+++ b/src/gui/graphicsview/qgraphicsanchorlayout.cpp
@@ -83,10 +83,8 @@
     \clearfloat
     \section1 Size Hints and Size Policies in an Anchor Layout
 
-    QGraphicsAnchorLayout respects each item's size hints and size policies. However it does
-    not currently respect their stretch factors. This might change in the future, so avoid
-    using stretch factors in anchor layouts if you want to avoid any future regressions in
-    behavior.
+    QGraphicsAnchorLayout respects each item's size hints and size policies.
+    Note that there are some properties of QSizePolicy that are \l{Known issues}{not respected}.
 
     \section1 Spacing within an Anchor Layout
 
@@ -101,6 +99,21 @@
 
     If the spacing is negative, the items will overlap to some extent.
 
+
+    \section1 Known issues
+    There are some features that QGraphicsAnchorLayout currently does not support.
+    This might change in the future, so avoid using these features if you want to
+    avoid any future regressions in behaviour:
+    \list
+
+    \o Stretch factors are not respected.
+
+    \o QSizePolicy::ExpandFlag is not respected.
+
+    \o Height for width is not respected.
+
+    \endlist
+
     \sa QGraphicsLinearLayout, QGraphicsGridLayout, QGraphicsLayout
 */
 
-- 
cgit v0.12


From 4ad6343be52b757fd354cd92874bca944d2ede49 Mon Sep 17 00:00:00 2001
From: Harald Fernengel <harald.fernengel@nokia.com>
Date: Fri, 6 Nov 2009 15:15:05 +0100
Subject: Add preliminary QAccessibleImage interface

As requested by the Maemo team.
---
 src/gui/accessible/qaccessible.h                 |  7 ++++-
 src/gui/accessible/qaccessible2.cpp              | 12 ++++++++
 src/gui/accessible/qaccessible2.h                | 13 ++++++++
 src/plugins/accessible/widgets/simplewidgets.cpp | 38 ++++++++++++++++++++++++
 src/plugins/accessible/widgets/simplewidgets.h   |  7 ++++-
 tests/auto/qaccessibility/tst_qaccessibility.cpp | 21 +++++++++++++
 6 files changed, 96 insertions(+), 2 deletions(-)

diff --git a/src/gui/accessible/qaccessible.h b/src/gui/accessible/qaccessible.h
index 8f6d9d9..c493054 100644
--- a/src/gui/accessible/qaccessible.h
+++ b/src/gui/accessible/qaccessible.h
@@ -311,7 +311,8 @@ namespace QAccessible2
         EditableTextInterface,
         ValueInterface,
         TableInterface,
-        ActionInterface
+        ActionInterface,
+        ImageInterface
     };
 }
 
@@ -321,6 +322,7 @@ class QAccessibleEditableTextInterface;
 class QAccessibleValueInterface;
 class QAccessibleTableInterface;
 class QAccessibleActionInterface;
+class QAccessibleImageInterface;
 
 class Q_GUI_EXPORT QAccessibleInterface : public QAccessible
 {
@@ -381,6 +383,9 @@ public:
     inline QAccessibleActionInterface *actionInterface()
     { return reinterpret_cast<QAccessibleActionInterface *>(cast_helper(QAccessible2::ActionInterface)); }
 
+    inline QAccessibleImageInterface *imageInterface()
+    { return reinterpret_cast<QAccessibleImageInterface *>(cast_helper(QAccessible2::ImageInterface)); }
+
 private:
     QAccessible2Interface *cast_helper(QAccessible2::InterfaceType);
 };
diff --git a/src/gui/accessible/qaccessible2.cpp b/src/gui/accessible/qaccessible2.cpp
index 0867368..b878cf1 100644
--- a/src/gui/accessible/qaccessible2.cpp
+++ b/src/gui/accessible/qaccessible2.cpp
@@ -120,6 +120,18 @@ QT_BEGIN_NAMESPACE
     \link http://www.linux-foundation.org/en/Accessibility/IAccessible2 IAccessible2 Specification \endlink
 */
 
+/*!
+    \class QAccessibleImageInterface
+    \ingroup accessibility
+    \internal
+    \preliminary
+
+    \brief The QAccessibleImageInterface class implements support for
+    the IAccessibleImage interface.
+
+    \link http://www.linux-foundation.org/en/Accessibility/IAccessible2 IAccessible2 Specification \endlink
+*/
+
 QAccessibleSimpleEditableTextInterface::QAccessibleSimpleEditableTextInterface(
                 QAccessibleInterface *accessibleInterface)
     : iface(accessibleInterface)
diff --git a/src/gui/accessible/qaccessible2.h b/src/gui/accessible/qaccessible2.h
index 435c640..ba12a7c 100644
--- a/src/gui/accessible/qaccessible2.h
+++ b/src/gui/accessible/qaccessible2.h
@@ -82,6 +82,7 @@ inline QAccessible2Interface *qAccessibleTextCastHelper() { return 0; }
 inline QAccessible2Interface *qAccessibleEditableTextCastHelper() { return 0; }
 inline QAccessible2Interface *qAccessibleTableCastHelper() { return 0; }
 inline QAccessible2Interface *qAccessibleActionCastHelper() { return 0; }
+inline QAccessible2Interface *qAccessibleImageCastHelper() { return 0; }
 
 #define Q_ACCESSIBLE_OBJECT \
     public: \
@@ -98,6 +99,8 @@ inline QAccessible2Interface *qAccessibleActionCastHelper() { return 0; }
             return qAccessibleTableCastHelper(); \
         case QAccessible2::ActionInterface: \
             return qAccessibleActionCastHelper(); \
+        case QAccessible2::ImageInterface: \
+            return qAccessibleImageCastHelper(); \
         } \
         return 0; \
     } \
@@ -224,6 +227,16 @@ public:
     virtual QStringList keyBindings(int actionIndex) = 0;
 };
 
+class Q_GUI_EXPORT QAccessibleImageInterface : public QAccessible2Interface
+{
+public:
+    inline QAccessible2Interface *qAccessibleImageCastHelper() { return this; }
+
+    virtual QString imageDescription() = 0;
+    virtual QSize imageSize() = 0;
+    virtual QRect imagePosition(QAccessible2::CoordinateType coordType) = 0;
+};
+
 #endif // QT_NO_ACCESSIBILITY
 
 QT_END_NAMESPACE
diff --git a/src/plugins/accessible/widgets/simplewidgets.cpp b/src/plugins/accessible/widgets/simplewidgets.cpp
index aa51759..1d801e4 100644
--- a/src/plugins/accessible/widgets/simplewidgets.cpp
+++ b/src/plugins/accessible/widgets/simplewidgets.cpp
@@ -602,6 +602,44 @@ int QAccessibleDisplay::navigate(RelationFlag rel, int entry, QAccessibleInterfa
     return QAccessibleWidgetEx::navigate(rel, entry, target);
 }
 
+/*! \reimp */
+QString QAccessibleDisplay::imageDescription()
+{
+    return widget()->toolTip();
+}
+
+/*! \reimp */
+QSize QAccessibleDisplay::imageSize()
+{
+    QLabel *label = qobject_cast<QLabel *>(widget());
+    if (!label)
+        return QSize();
+    const QPixmap *pixmap = label->pixmap();
+    if (!pixmap)
+        return QSize();
+    return pixmap->size();
+}
+
+/*! \reimp */
+QRect QAccessibleDisplay::imagePosition(QAccessible2::CoordinateType coordType)
+{
+    QLabel *label = qobject_cast<QLabel *>(widget());
+    if (!label)
+        return QRect();
+    const QPixmap *pixmap = label->pixmap();
+    if (!pixmap)
+        return QRect();
+
+    switch (coordType) {
+    case QAccessible2::RelativeToScreen:
+        return QRect(label->mapToGlobal(label->pos()), label->size());
+    case QAccessible2::RelativeToParent:
+        return label->geometry();
+    }
+
+    return QRect();
+}
+
 #ifndef QT_NO_LINEEDIT
 /*!
   \class QAccessibleLineEdit
diff --git a/src/plugins/accessible/widgets/simplewidgets.h b/src/plugins/accessible/widgets/simplewidgets.h
index 0c1cf5e..5182bdd 100644
--- a/src/plugins/accessible/widgets/simplewidgets.h
+++ b/src/plugins/accessible/widgets/simplewidgets.h
@@ -111,7 +111,7 @@ protected:
 };
 #endif // QT_NO_TOOLBUTTON
 
-class QAccessibleDisplay : public QAccessibleWidgetEx
+class QAccessibleDisplay : public QAccessibleWidgetEx, public QAccessibleImageInterface
 {
     Q_ACCESSIBLE_OBJECT
 public:
@@ -122,6 +122,11 @@ public:
 
     Relation relationTo(int child, const QAccessibleInterface *other, int otherChild) const;
     int navigate(RelationFlag, int entry, QAccessibleInterface **target) const;
+
+    // QAccessibleImageInterface
+    QString imageDescription();
+    QSize imageSize();
+    QRect imagePosition(QAccessible2::CoordinateType coordType);
 };
 
 #ifndef QT_NO_LINEEDIT
diff --git a/tests/auto/qaccessibility/tst_qaccessibility.cpp b/tests/auto/qaccessibility/tst_qaccessibility.cpp
index 9f2e4e7..25c2649 100644
--- a/tests/auto/qaccessibility/tst_qaccessibility.cpp
+++ b/tests/auto/qaccessibility/tst_qaccessibility.cpp
@@ -4034,6 +4034,27 @@ void tst_QAccessibility::labelTest()
     delete acc_label;
     delete label;
     QTestAccessibility::clearEvents();
+
+    QPixmap testPixmap(50, 50);
+    testPixmap.fill();
+
+    QLabel imageLabel;
+    imageLabel.setPixmap(testPixmap);
+    imageLabel.setToolTip("Test Description");
+
+    acc_label = QAccessible::queryAccessibleInterface(&imageLabel);
+    QVERIFY(acc_label);
+
+    QAccessibleImageInterface *imageInterface = acc_label->imageInterface();
+    QVERIFY(imageInterface);
+
+    QCOMPARE(imageInterface->imageSize(), testPixmap.size());
+    QCOMPARE(imageInterface->imageDescription(), QString::fromLatin1("Test Description"));
+    QCOMPARE(imageInterface->imagePosition(QAccessible2::RelativeToParent), imageLabel.geometry());
+
+    delete acc_label;
+
+    QTestAccessibility::clearEvents();
 #else
     QSKIP("Test needs accessibility support.", SkipAll);
 #endif
-- 
cgit v0.12


From 89b6de9091adbf0645ffe2aba59cb17cb233c170 Mon Sep 17 00:00:00 2001
From: Harald Fernengel <harald.fernengel@nokia.com>
Date: Fri, 6 Nov 2009 15:30:20 +0100
Subject: make the qapplication constructor test more meaningful

---
 tests/benchmarks/qapplication/main.cpp | 30 +++++++-----------------------
 1 file changed, 7 insertions(+), 23 deletions(-)

diff --git a/tests/benchmarks/qapplication/main.cpp b/tests/benchmarks/qapplication/main.cpp
index a299db2..0ec65a8 100644
--- a/tests/benchmarks/qapplication/main.cpp
+++ b/tests/benchmarks/qapplication/main.cpp
@@ -39,7 +39,6 @@
 **
 ****************************************************************************/
 #include <QApplication>
-#include <QProcess>
 
 #include <qtest.h>
 
@@ -54,34 +53,19 @@ private slots:
 /*
     Test the performance of the QApplication constructor.
 
-    This test creates a new process and thus includes process creation overhead.
-    Callgrind results are meaningless since the child process is not traced.
+    Note: results from the second start on can be misleading,
+    since all global statics are already initialized.
 */
 void tst_qapplication::ctor()
 {
-    QProcess proc;
-    const QString program       = QCoreApplication::applicationFilePath();
-    const QStringList arguments = QStringList() << QLatin1String("--exit-now");
-
+    // simulate reasonable argc, argv
+    int argc = 1;
+    char *argv[] = { "tst_qapplication" };
     QBENCHMARK {
-        proc.start(program, arguments);
-        QVERIFY(proc.waitForStarted());
-        QVERIFY(proc.waitForFinished());
-        QCOMPARE(proc.exitStatus(), QProcess::NormalExit);
-        QCOMPARE(proc.exitCode(), 0);
+        QApplication app(argc, argv);
     }
 }
 
-int main(int argc, char** argv)
-{
-    QApplication app(argc, argv);
-
-    if (argc == 2 && QLatin1String("--exit-now") == QLatin1String(argv[1])) {
-        return 0;
-    }
-
-    tst_qapplication test;
-    return QTest::qExec(&test, argc, argv);
-}
+QTEST_APPLESS_MAIN(tst_qapplication)
 
 #include "main.moc"
-- 
cgit v0.12


From a2c08390e3ea2aefdc9b3284498137e1fd4b8b13 Mon Sep 17 00:00:00 2001
From: Joerg Bornemann <joerg.bornemann@nokia.com>
Date: Fri, 6 Nov 2009 15:50:00 +0100
Subject: my changes for 4.6.0

---
 dist/changes-4.6.0 | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/dist/changes-4.6.0 b/dist/changes-4.6.0
index a42b213..a03ed43 100644
--- a/dist/changes-4.6.0
+++ b/dist/changes-4.6.0
@@ -217,6 +217,10 @@ QtGui
 
  - On Windows CE the link time code geration has been disabled by default to
    be consistent with win32-msvc200x.
+
+ - The default button size has been reduced in the Windows mobile style.
+
+ - [QTBUG-3613] QWizard issues have been fixed on Windows mobile.
    
  - Added QMAKE_LIBS_OPENGL_ES1, QMAKE_LIBS_OPENGL_ES1CL and
    QMAKE_LIBS_OPENGL_ES2 qmake variables for specifying OpenGL ES
@@ -225,7 +229,6 @@ QtGui
  - KDE Integration: Improved the integration into KDE desktop (loading of KDE
    palette, usage of KColorDialog and KFileDialog) using the GuiPlatformPlugin
 
-   
  - Phonon on Windows
    * Now much more reliable when reading a file through a QIODevice.
    * If Video Mixing Renderer 9 is not available, falls back to software 
-- 
cgit v0.12


From d57933fe2c74907c6256aef82374fefd55adee05 Mon Sep 17 00:00:00 2001
From: ck <qt-info@nokia.com>
Date: Fri, 6 Nov 2009 16:21:17 +0100
Subject: Assistant: Fixes related to search configuration.

1. Remove superfluous definition of QT_CLUCENE_SUPPORT
   in assistant.pro. It was not evaluated anywhere.
2. Bugfix for searvh widget when working with non-CLucene search lib.

Reviewed-by: kh1
---
 tools/assistant/tools/assistant/assistant.pro    | 2 --
 tools/assistant/tools/assistant/searchwidget.cpp | 3 ++-
 2 files changed, 2 insertions(+), 3 deletions(-)

diff --git a/tools/assistant/tools/assistant/assistant.pro b/tools/assistant/tools/assistant/assistant.pro
index 1cbd1d3..1a7e874 100644
--- a/tools/assistant/tools/assistant/assistant.pro
+++ b/tools/assistant/tools/assistant/assistant.pro
@@ -4,8 +4,6 @@ TEMPLATE = app
 LANGUAGE = C++
 TARGET = assistant
 
-DEFINES += QT_CLUCENE_SUPPORT
-
 contains(QT_CONFIG, webkit) {
     QT += webkit
 }
diff --git a/tools/assistant/tools/assistant/searchwidget.cpp b/tools/assistant/tools/assistant/searchwidget.cpp
index 48fa8c6..3b456a3 100644
--- a/tools/assistant/tools/assistant/searchwidget.cpp
+++ b/tools/assistant/tools/assistant/searchwidget.cpp
@@ -85,7 +85,8 @@ SearchWidget::SearchWidget(QHelpSearchEngine *engine, QWidget *parent)
         SLOT(searchingFinished(int)));
 
     QTextBrowser* browser = qFindChild<QTextBrowser*>(resultWidget);
-    browser->viewport()->installEventFilter(this);
+    if (browser) // Will be null if lib was configured not to use CLucene.
+        browser->viewport()->installEventFilter(this);
 }
 
 SearchWidget::~SearchWidget()
-- 
cgit v0.12


From 7359baee83f6691c31a0a14ffd6f6cc147ed71fd Mon Sep 17 00:00:00 2001
From: Harald Fernengel <harald.fernengel@nokia.com>
Date: Fri, 6 Nov 2009 16:27:48 +0100
Subject: use pragma push/pop

prevents leaking the pragma out of the header file

Task-number: QT-2267
---
 src/corelib/tools/qbytearraymatcher.h | 8 ++++++--
 src/corelib/tools/qstringmatcher.h    | 6 +++++-
 2 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/src/corelib/tools/qbytearraymatcher.h b/src/corelib/tools/qbytearraymatcher.h
index ef46d34..3d951cf 100644
--- a/src/corelib/tools/qbytearraymatcher.h
+++ b/src/corelib/tools/qbytearraymatcher.h
@@ -79,17 +79,21 @@ private:
     QByteArray q_pattern;
 #ifdef Q_CC_RVCT
 // explicitely allow anonymous unions for RVCT to prevent compiler warnings
-#pragma anon_unions
+#  pragma push
+#  pragma anon_unions
 #endif
     struct Data {
         uchar q_skiptable[256];
         const uchar *p;
         int l;
-    }; 
+    };
     union {
         uint dummy[256];
         Data p;
     };
+#ifdef Q_CC_RVCT
+#  pragma pop
+#endif
 };
 
 QT_END_NAMESPACE
diff --git a/src/corelib/tools/qstringmatcher.h b/src/corelib/tools/qstringmatcher.h
index 0cb1312..8076098 100644
--- a/src/corelib/tools/qstringmatcher.h
+++ b/src/corelib/tools/qstringmatcher.h
@@ -79,7 +79,8 @@ private:
     Qt::CaseSensitivity q_cs;
 #ifdef Q_CC_RVCT
 // explicitely allow anonymous unions for RVCT to prevent compiler warnings
-#pragma anon_unions
+#  pragma push
+#  pragma anon_unions
 #endif
     struct Data {
         uchar q_skiptable[256];
@@ -90,6 +91,9 @@ private:
         uint q_data[256];
         Data p;
     };
+#ifdef Q_CC_RVCT
+#  pragma pop
+#endif
 };
 
 QT_END_NAMESPACE
-- 
cgit v0.12


From a1aea71edada74c613124c0a0bf0bb3dba85e88a Mon Sep 17 00:00:00 2001
From: David Boddie <dboddie@trolltech.com>
Date: Fri, 6 Nov 2009 16:29:16 +0100
Subject: Doc: Moved external references to a separate collection.

Reviewed-by: Trust Me
---
 doc/src/external-resources.qdoc              | 45 +++++++++++++++++++++++
 doc/src/platforms/emb-directfb-EmbLinux.qdoc | 54 ++++++++++++----------------
 2 files changed, 67 insertions(+), 32 deletions(-)

diff --git a/doc/src/external-resources.qdoc b/doc/src/external-resources.qdoc
index ad6731b..8a14095 100644
--- a/doc/src/external-resources.qdoc
+++ b/doc/src/external-resources.qdoc
@@ -367,3 +367,48 @@
     \externalpage http://www.kde.org
     \title KDE
 */
+
+/*!
+    \externalpage http://www.directfb.org/index.php?path=Main%2FDownloads&page=1
+    \title DirectFB - df_window example
+*/
+
+/*!
+    \externalpage http://www.directfb.org/docs/DirectFB_Reference_1_4/IDirectFBPalette.html
+    \title DirectFB - IDirectFBPalette
+*/
+
+/*!
+    \externalpage http://www.cplusplus.com/reference/clibrary/cstring/memcpy/
+    \title C++ Reference - memcpy
+*/
+
+/*!
+    \externalpage http://www.directfb.org/docs/DirectFB_Reference_1_4/IDirectFB_CreateInputEventBuffer.html
+    \title DirectFB - CreateInputEventBuffer
+*/
+
+/*!
+    \externalpage http://www.directfb.org/docs/DirectFB_Reference_1_4/types.html#DFBSurfaceBlittingFlags
+    \title DirectFB - DFBSurfaceBlittingFlags
+*/
+
+/*!
+    \externalpage http://directfb.org/docs/DirectFB_Reference_1_4/IDirectFBImageProvider.html
+    \title DirectFB - IDirectFBImageProvider
+*/
+
+/*!
+    \externalpage http://www.directfb.org/docs/DirectFB_Reference_1_4/IDirectFBSurface.html
+    \title DirectFB - IDirectFBSurface
+*/
+
+/*!
+    \externalpage http://www.directfb.org/docs/DirectFB_Reference_1_4/IDirectFBWindow
+    \title DirectFB - IDirectFBWindow
+*/
+
+/*!
+    \externalpage http://www.directfb.org/docs/DirectFB_Reference_1_4/types.html#DFBSurfaceDescription
+    \title DirectFB - DFBSurfaceDescription
+*/
diff --git a/doc/src/platforms/emb-directfb-EmbLinux.qdoc b/doc/src/platforms/emb-directfb-EmbLinux.qdoc
index b863951..38782be 100644
--- a/doc/src/platforms/emb-directfb-EmbLinux.qdoc
+++ b/doc/src/platforms/emb-directfb-EmbLinux.qdoc
@@ -62,8 +62,7 @@ engine. And in Qt 4.6 these have been further improved.
 \tableofcontents
 
 \section1 Using DirectFB with Qt
-DirectFB is centered around \l
-{http://www.directfb.org/docs/DirectFB_Reference_1_4/IDirectFBSurface.html}{Surfaces}
+DirectFB is centered around \l{DirectFB - IDirectFBSurface}{Surfaces}
 which is the equivalent of a QPaintDevice. In the Qt/DirectFB plugin,
 DirectFB maps onto either a QPixmap or a QWindowSurface which essentially
 means that drawing onto QPixmap or a QWidget can be accelerated and drawing
@@ -94,11 +93,11 @@ location on your host. The safest option is usually to explicitly populate
 these variables in your qmake.conf like this:
 
 \code
-
 QT_CFLAGS_DIRECTFB =
 /opt/toolchain/gcc4.3_mipsel_linux/usr/include/directfb -D_REENTRANT
 QT_LIBS_DIRECTFB = -L/opt/toolchain/gcc4.3_mipsel_linux/usr/lib/-ldirect
 -ldirectfb -lfusion
+\endcode
 
 \note While DirectFB supports a multi-process setup through a
 kernel-extension called Fusion this setup is not well tested with Qt.
@@ -135,14 +134,13 @@ of DirectFB.
 The Qt DirectFB driver currently supports DirectFB versions >= 0.9. Still,
 there are large differences in what each actual implementation handles
 correctly. It is relatively common not to properly support
-\l{http://www.directfb.org/docs/DirectFB_Reference_1_4/IDirectFBWindow}{DirectFB
-windows}, so Qt needs to handle this case with a different code path. In
-addition, certain drivers do not properly support DirectFB's cursor
-handling. This means Qt has to have a code path for rendering the cursor
-itself when this is the case. Some drivers do not let us create \l
-{http://www.directfb.org/docs/DirectFB_Reference_1_4/types.html#DFBSurfaceDescription}{preallocated
-surfaces} which means we have to have a conditional code path for that
-case. 
+\l{DirectFB - IDirectFBWindow}{DirectFB windows}, so Qt needs to handle
+this case with a different code path. In addition, certain drivers do not
+properly support DirectFB's cursor handling. This means Qt has to have a
+code path for rendering the cursor itself when this is the case.
+Some drivers do not let us create
+\l{DirectFB - DFBSurfaceDescription}{preallocated surfaces} which means we
+have to have a conditional code path for that case. 
 
 \section2 Optimize performance using define options
 
@@ -150,19 +148,17 @@ Qt/DirectFB comes with a number of defines that can be either
 uncommented in directfb.pri or added to the QT_DEFINES_DIRECTFB variable in
 your qmake.conf.
 
-\note The defines have been moved from \i
-{src/plugins/gfxdrivers/directfb/directfb.pro} to \i
-{src/gui/embedded/directfb.pri}
+\note The defines have been moved from
+\e{src/plugins/gfxdrivers/directfb/directfb.pro} to
+\e{src/gui/embedded/directfb.pri}
 
 \code
-
 #DIRECTFB_DRAWINGOPERATIONS=DRAW_RECTS|DRAW_LINES|DRAW_IMAGE|DRAW_PIXMAP|
     DRAW_TILED_PIXMAP|STROKE_PATH|DRAW_PATH|DRAW_POINTS|DRAW_ELLIPSE|DRAW_POLYGON|
     DRAW_TEXT|FILL_PATH|FILL_RECT|DRAW_COLORSPANS|DRAW_ROUNDED_RECT
 
  #DEFINES += \"QT_DIRECTFB_WARN_ON_RASTERFALLBACKS=$$DIRECTFB_DRAWINGOPERATIONS\"
  #DEFINES += \"QT_DIRECTFB_DISABLE_RASTERFALLBACKS=$$DIRECTFB_DRAWINGOPERATIONS\"
- 
 \endcode
 
 As demonstrated above, you need to Qt which drawing operations you want to
@@ -180,8 +176,7 @@ Following is a table showing which options you have.
     \row
         \o QT_DIRECTFB_IMAGECACHE
         \o Defining this means that Qt will cache an IDirectFBSurface per
-QImage you draw based on its \l
-{http://doc.trolltech.com/4.5/qimage.html#cacheKey}{cacheKey}.
+QImage you draw based on its \l{QImage::}{cacheKey()}.
 Use this define if your application draws many QImages that
 remain the same. Note that if you in this situation draw an image and then
 change it, by calling bits() or opening a QPainter on it, the cache will
@@ -192,9 +187,7 @@ connect option.
         \o QT_NO_DIRECTFB_WM
         \o If your DirectFB implementation does not support windows, you
 have to define this to make Qt work properly. You can test this by checking
-if the \l {
-http://www.directfb.org/index.php?path=Main%2FDownloads&page=1}{df_window
-example} runs well.
+if the \l{DirectFB - df_window example}{df_window example} runs well.
 This means that all drawing operations onto a QWidget involves
 an extra blitting step since Qt essentially first has to draw into an
 off-screen buffer and then blit this buffer to the back buffer of the
@@ -218,9 +211,7 @@ cursor rather than letting DirectFB do it.
     \row
         \o QT_NO_DIRECTFB_PALETTE
         \o Define this if your DirectFB driver does not support surfaces
-with \l
-{http://www.directfb.org/docs/DirectFB_Reference_1_4/IDirectFBPalette.html}{color
-tables}.
+with \l{DirectFB - IDirectFBPalette}{color tables}.
 The effect of defining this is that Qt will have to convert
 images with \l QImage::Format_Indexed8 format to another format before
 rendering them.
@@ -228,16 +219,15 @@ rendering them.
     \row
         \o QT_NO_DIRECTFB_PREALLOCATED
         \o Define this if your DirectFB driver does not support creating a
-surface with preallocated data. This will make a more frequent use of \l
-{http://www.cplusplus.com/reference/clibrary/cstring/memcpy/}{memcpy()}
+surface with preallocated data. This will make a more frequent use of
+\l{C++ Reference - memcpy}{memcpy()}
 when drawing images. If you define this, you might want to consider
 defining QT_DIRECTFB_IMAGECACHE for better image rendering performance.
 
     \row
         \o QT_NO_DIRECTFB_MOUSE and QT_NO_DIRECTFB_KEYBOARD
         \o Define this if your driver does not provide keyboard/mouse
-events through \l
-{http://www.directfb.org/docs/DirectFB_Reference_1_4/IDirectFB_CreateInputEventBuffer.html}{CreateInputEventBuffer}.
+events through \l{DirectFB - CreateInputEventBuffer}{CreateInputEventBuffer}.
 This means that Qt cannot use DirectFB to receive keyboard/mouse events and
 if you want such events in your application, you will have to provide
 another driver. For more info see \l {Qt for Embedded Linux Pointer
@@ -251,8 +241,8 @@ frames per second.
 
     \row
         \o QT_NO_DIRECTFB_OPAQUE_DETECTION
-        \o When blitting a surface Qt has to decide whether to set the \l
-{http://www.directfb.org/docs/DirectFB_Reference_1_4/types.html#DFBSurfaceBlittingFlags}{DSBLIT_BLEND_ALPHACHANNEL}
+        \o When blitting a surface Qt has to decide whether to set the
+\l{DirectFB - DFBSurfaceBlittingFlags}{DSBLIT_BLEND_ALPHACHANNEL}
 flag. If you load an image from file or network data that has a format that
 includes an alpha channel, the image might still be completely opaque.
 Normally Qt runs through every pixel to check if there really is an alpha
@@ -281,8 +271,8 @@ define this.
 
  \row
     \o QT_DIRECTFB_IMAGEPROVIDER_KEEPALIVE
-    \o Define this to make sure Qt always keeps at least one \l
-{http://directfb.org/docs/DirectFB_Reference_1_4/IDirectFBImageProvider.html}{IDirectFBImageProvider}
+    \o Define this to make sure Qt always keeps at least one
+\l{DirectFB - IDirectFBImageProvider}{IDirectFBImageProvider}
 object alive. This is to avoid considerable overhead when the first
 IDirectFBImageProvider is created, the last IDirectFBImageProvider is
 removed.
-- 
cgit v0.12


From a8a733b0981b3ae396d0ee0bc957ea436ad656e7 Mon Sep 17 00:00:00 2001
From: David Boddie <dboddie@trolltech.com>
Date: Fri, 6 Nov 2009 16:38:14 +0100
Subject: Doc: Fixed a URL to ensure that it can be used in well-formed XML.

Reviewed-by: Trust Me
---
 doc/src/external-resources.qdoc | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/doc/src/external-resources.qdoc b/doc/src/external-resources.qdoc
index 8a14095..4e1f3b7 100644
--- a/doc/src/external-resources.qdoc
+++ b/doc/src/external-resources.qdoc
@@ -369,7 +369,7 @@
 */
 
 /*!
-    \externalpage http://www.directfb.org/index.php?path=Main%2FDownloads&page=1
+    \externalpage http://www.directfb.org/index.php?path=Main%2FDownloads&amp;page=1
     \title DirectFB - df_window example
 */
 
-- 
cgit v0.12


From 46f73ebb2a71e953edde644acd4e378b15dadb35 Mon Sep 17 00:00:00 2001
From: Thierry Bastian <thierry.bastian@nokia.com>
Date: Fri, 6 Nov 2009 16:55:45 +0100
Subject: Fix autotests that expected QTextControl to always eat mouse events

Reviewed-by: ogoffart
---
 tests/auto/qlabel/tst_qlabel.cpp | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/tests/auto/qlabel/tst_qlabel.cpp b/tests/auto/qlabel/tst_qlabel.cpp
index 9eae9c9..9d957a5 100644
--- a/tests/auto/qlabel/tst_qlabel.cpp
+++ b/tests/auto/qlabel/tst_qlabel.cpp
@@ -328,14 +328,14 @@ void tst_QLabel::eventPropagation_data()
     QTest::addColumn<bool>("propagation");
 
     QTest::newRow("plain text1") << QString("plain text") << int(Qt::LinksAccessibleByMouse) << int(Qt::NoFocus) << true;
-    QTest::newRow("plain text2") << QString("plain text") << (int)Qt::TextSelectableByKeyboard << (int)Qt::ClickFocus << false;
+    QTest::newRow("plain text2") << QString("plain text") << (int)Qt::TextSelectableByKeyboard << (int)Qt::ClickFocus << true;
     QTest::newRow("plain text3") << QString("plain text") << (int)Qt::TextSelectableByMouse << (int)Qt::ClickFocus << false;
     QTest::newRow("plain text4") << QString("plain text") << (int)Qt::NoTextInteraction << (int)Qt::NoFocus << true;
-    QTest::newRow("rich text1") << QString("<b>rich text</b>") << (int)Qt::LinksAccessibleByMouse << (int)Qt::NoFocus << false;
-    QTest::newRow("rich text2") << QString("<b>rich text</b>") << (int)Qt::TextSelectableByKeyboard << (int)Qt::ClickFocus << false;
+    QTest::newRow("rich text1") << QString("<b>rich text</b>") << (int)Qt::LinksAccessibleByMouse << (int)Qt::NoFocus << true;
+    QTest::newRow("rich text2") << QString("<b>rich text</b>") << (int)Qt::TextSelectableByKeyboard << (int)Qt::ClickFocus << true;
     QTest::newRow("rich text3") << QString("<b>rich text</b>") << (int)Qt::TextSelectableByMouse << (int)Qt::ClickFocus << false;
     QTest::newRow("rich text4") << QString("<b>rich text</b>") << (int)Qt::NoTextInteraction << (int)Qt::NoFocus << true;
-    QTest::newRow("rich text4") << QString("<b>rich text</b>") << (int)Qt::LinksAccessibleByKeyboard << (int)Qt::StrongFocus << false;
+    QTest::newRow("rich text4") << QString("<b>rich text</b>") << (int)Qt::LinksAccessibleByKeyboard << (int)Qt::StrongFocus << true;
 
     if (!test_box)
         test_box = new Widget;
-- 
cgit v0.12


From cd58bc13a4a37543d76a79b3cee7cd95bde0a14b Mon Sep 17 00:00:00 2001
From: Olivier Goffart <ogoffart@trolltech.com>
Date: Fri, 6 Nov 2009 17:24:43 +0100
Subject: stabilize test

---
 tests/auto/qcombobox/tst_qcombobox.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tests/auto/qcombobox/tst_qcombobox.cpp b/tests/auto/qcombobox/tst_qcombobox.cpp
index 06c632d..18ebddc 100644
--- a/tests/auto/qcombobox/tst_qcombobox.cpp
+++ b/tests/auto/qcombobox/tst_qcombobox.cpp
@@ -2529,7 +2529,7 @@ void tst_QComboBox::task_QTBUG_1071_changingFocusEmitsActivated()
     QCOMPARE(spy.count(), 0);
     edit.setFocus();
     QTRY_VERIFY(edit.hasFocus());
-    QCOMPARE(spy.count(), 1);
+    QTRY_COMPARE(spy.count(), 1);
 }
 
 QTEST_MAIN(tst_QComboBox)
-- 
cgit v0.12


From 8ee95e63a92b07ba89003243b0e93718762a7d88 Mon Sep 17 00:00:00 2001
From: "Eduardo M. Fleury" <eduardo.fleury@openbossa.org>
Date: Wed, 4 Nov 2009 10:49:05 -0300
Subject: QGAL: Support for out-of-order parallel anchors

Now parallel anchors account for the fact they may be composed of
anchors with different directions. We arbitrarily set the direction
of the parallel anchor to be the same direction as the first child.

The methods refreshSizeHints and updateChildren were updated to
support this situation.

Signed-off-by: Eduardo M. Fleury <eduardo.fleury@openbossa.org>
Reviewed-by: Caio Marcelo de Oliveira Filho <caio.oliveira@openbossa.org>
---
 src/gui/graphicsview/qgraphicsanchorlayout_p.cpp | 46 ++++++++++++++++++++----
 src/gui/graphicsview/qgraphicsanchorlayout_p.h   |  9 ++---
 2 files changed, 45 insertions(+), 10 deletions(-)

diff --git a/src/gui/graphicsview/qgraphicsanchorlayout_p.cpp b/src/gui/graphicsview/qgraphicsanchorlayout_p.cpp
index 7ad994c..95922ca 100644
--- a/src/gui/graphicsview/qgraphicsanchorlayout_p.cpp
+++ b/src/gui/graphicsview/qgraphicsanchorlayout_p.cpp
@@ -218,9 +218,20 @@ bool AnchorData::refreshSizeHints(const QLayoutStyleInfo *styleInfo)
 
 void ParallelAnchorData::updateChildrenSizes()
 {
-    firstEdge->sizeAtMinimum = secondEdge->sizeAtMinimum = sizeAtMinimum;
-    firstEdge->sizeAtPreferred = secondEdge->sizeAtPreferred = sizeAtPreferred;
-    firstEdge->sizeAtMaximum = secondEdge->sizeAtMaximum = sizeAtMaximum;
+    firstEdge->sizeAtMinimum = sizeAtMinimum;
+    firstEdge->sizeAtPreferred = sizeAtPreferred;
+    firstEdge->sizeAtMaximum = sizeAtMaximum;
+
+    const bool secondFwd = (secondEdge->from == from);
+    if (secondFwd) {
+        secondEdge->sizeAtMinimum = sizeAtMinimum;
+        secondEdge->sizeAtPreferred = sizeAtPreferred;
+        secondEdge->sizeAtMaximum = sizeAtMaximum;
+    } else {
+        secondEdge->sizeAtMinimum = -sizeAtMinimum;
+        secondEdge->sizeAtPreferred = -sizeAtPreferred;
+        secondEdge->sizeAtMaximum = -sizeAtMaximum;
+    }
 
     firstEdge->updateChildrenSizes();
     secondEdge->updateChildrenSizes();
@@ -239,8 +250,16 @@ bool ParallelAnchorData::refreshSizeHints_helper(const QLayoutStyleInfo *styleIn
         return false;
     }
 
-    minSize = qMax(firstEdge->minSize, secondEdge->minSize);
-    maxSize = qMin(firstEdge->maxSize, secondEdge->maxSize);
+    // Account for parallel anchors where the second edge is backwards.
+    // We rely on the fact that a forward anchor of sizes min, pref, max is equivalent
+    // to a backwards anchor of size (-max, -pref, -min)
+    const bool secondFwd = (secondEdge->from == from);
+    const qreal secondMin = secondFwd ? secondEdge->minSize : -secondEdge->maxSize;
+    const qreal secondPref = secondFwd ? secondEdge->prefSize : -secondEdge->prefSize;
+    const qreal secondMax = secondFwd ? secondEdge->maxSize : -secondEdge->minSize;
+
+    minSize = qMax(firstEdge->minSize, secondMin);
+    maxSize = qMin(firstEdge->maxSize, secondMax);
 
     // This condition means that the maximum size of one anchor being simplified is smaller than
     // the minimum size of the other anchor. The consequence is that there won't be a valid size
@@ -249,7 +268,22 @@ bool ParallelAnchorData::refreshSizeHints_helper(const QLayoutStyleInfo *styleIn
         return false;
     }
 
-    prefSize = qMax(firstEdge->prefSize, secondEdge->prefSize);
+    // The equivalent preferred Size of a parallel anchor is calculated as to
+    // reduce the deviation from the original preferred sizes _and_ to avoid shrinking
+    // items below their preferred sizes, unless strictly needed.
+
+    // ### This logic only holds if all anchors in the layout are "well-behaved" in the
+    // following terms:
+    //
+    // - There are no negative-sized anchors
+    // - All sequential anchors are composed of children in the same direction as the
+    //   sequential anchor itself
+    //
+    // With these assumptions we can grow a child knowing that no hidden items will
+    // have to shrink as the result of that.
+    // If any of these does not hold, we have a situation where the ParallelAnchor
+    // does not have enough information to calculate its equivalent prefSize.
+    prefSize = qMax(firstEdge->prefSize, secondPref);
     prefSize = qMin(prefSize, maxSize);
 
     // See comment in AnchorData::refreshSizeHints() about sizeAt* values
diff --git a/src/gui/graphicsview/qgraphicsanchorlayout_p.h b/src/gui/graphicsview/qgraphicsanchorlayout_p.h
index 1e11ee2..8d77b1a 100644
--- a/src/gui/graphicsview/qgraphicsanchorlayout_p.h
+++ b/src/gui/graphicsview/qgraphicsanchorlayout_p.h
@@ -256,10 +256,11 @@ struct ParallelAnchorData : public AnchorData
         type = AnchorData::Parallel;
         orientation = first->orientation;
 
-        // ### Those asserts force that both child anchors have the same direction,
-        // but can't we simplify a pair of anchors in opposite directions?
-        Q_ASSERT(first->from == second->from);
-        Q_ASSERT(first->to == second->to);
+        // This assert whether the child anchors share their vertices
+        Q_ASSERT(((first->from == second->from) && (first->to == second->to)) ||
+                 ((first->from == second->to) && (first->to == second->from)));
+
+        // We arbitrarily choose the direction of the first child as "our" direction
         from = first->from;
         to = first->to;
 #ifdef QT_DEBUG
-- 
cgit v0.12


From 720e04ac5f572c1ca0a32e1675fbda6e778d3e8c Mon Sep 17 00:00:00 2001
From: "Eduardo M. Fleury" <eduardo.fleury@openbossa.org>
Date: Thu, 5 Nov 2009 19:18:48 -0300
Subject: QGAL: Revamp the edge interpolation code

Simplify the code of interpolateSequentialAnchor to use the distance
values of the sequential anchor itself as base for the children
distances. So the 'base' parameter was removed.

This also allowed out-of-order parallel anchors to be interpolated, and
the 'base' parameter also to be removed from interpolateParallelAnchor.

Signed-off-by: Eduardo M. Fleury <eduardo.fleury@openbossa.org>
Reviewed-by: Caio Marcelo de Oliveira Filho <caio.oliveira@openbossa.org>
---
 src/gui/graphicsview/qgraphicsanchorlayout_p.cpp | 49 ++++++++++++------------
 src/gui/graphicsview/qgraphicsanchorlayout_p.h   |  6 +--
 2 files changed, 26 insertions(+), 29 deletions(-)

diff --git a/src/gui/graphicsview/qgraphicsanchorlayout_p.cpp b/src/gui/graphicsview/qgraphicsanchorlayout_p.cpp
index 95922ca..318ce20 100644
--- a/src/gui/graphicsview/qgraphicsanchorlayout_p.cpp
+++ b/src/gui/graphicsview/qgraphicsanchorlayout_p.cpp
@@ -2443,17 +2443,13 @@ void QGraphicsAnchorLayoutPrivate::interpolateEdge(AnchorVertex *base,
 
     // Process child anchors
     if (edge->type == AnchorData::Sequential)
-        interpolateSequentialEdges(edge->from,
-                                   static_cast<SequentialAnchorData *>(edge),
-                                   orientation);
+        interpolateSequentialEdges(static_cast<SequentialAnchorData *>(edge), orientation);
     else if (edge->type == AnchorData::Parallel)
-        interpolateParallelEdges(edge->from,
-                                 static_cast<ParallelAnchorData *>(edge),
-                                 orientation);
+        interpolateParallelEdges(static_cast<ParallelAnchorData *>(edge), orientation);
 }
 
 void QGraphicsAnchorLayoutPrivate::interpolateParallelEdges(
-    AnchorVertex *base, ParallelAnchorData *data, Orientation orientation)
+    ParallelAnchorData *data, Orientation orientation)
 {
     // In parallels the boundary vertices are already calculate, we
     // just need to look for sequential groups inside, because only
@@ -2461,40 +2457,43 @@ void QGraphicsAnchorLayoutPrivate::interpolateParallelEdges(
 
     // First edge
     if (data->firstEdge->type == AnchorData::Sequential)
-        interpolateSequentialEdges(base,
-                                   static_cast<SequentialAnchorData *>(data->firstEdge),
+        interpolateSequentialEdges(static_cast<SequentialAnchorData *>(data->firstEdge),
                                    orientation);
     else if (data->firstEdge->type == AnchorData::Parallel)
-        interpolateParallelEdges(base,
-                                 static_cast<ParallelAnchorData *>(data->firstEdge),
+        interpolateParallelEdges(static_cast<ParallelAnchorData *>(data->firstEdge),
                                  orientation);
 
     // Second edge
     if (data->secondEdge->type == AnchorData::Sequential)
-        interpolateSequentialEdges(base,
-                                   static_cast<SequentialAnchorData *>(data->secondEdge),
+        interpolateSequentialEdges(static_cast<SequentialAnchorData *>(data->secondEdge),
                                    orientation);
     else if (data->secondEdge->type == AnchorData::Parallel)
-        interpolateParallelEdges(base,
-                                 static_cast<ParallelAnchorData *>(data->secondEdge),
+        interpolateParallelEdges(static_cast<ParallelAnchorData *>(data->secondEdge),
                                  orientation);
 }
 
 void QGraphicsAnchorLayoutPrivate::interpolateSequentialEdges(
-    AnchorVertex *base, SequentialAnchorData *data, Orientation orientation)
+    SequentialAnchorData *data, Orientation orientation)
 {
-    AnchorVertex *prev = base;
+    // This method is supposed to handle any sequential anchor, even out-of-order
+    // ones. However, in the current QGAL implementation we should get only the
+    // well behaved ones.
+    Q_ASSERT(data->m_edges.first()->from == data->from);
+    Q_ASSERT(data->m_edges.last()->to == data->to);
 
-    // ### I'm not sure whether this assumption is safe. If not,
-    // consider that m_edges.last() could be used instead (so
-    // at(0) would be the one to be treated specially).
-    Q_ASSERT(base == data->m_edges.at(0)->to || base == data->m_edges.at(0)->from);
+    // At this point, the two outter vertices already have their distance
+    // calculated.
+    // We use the first as the base to calculate the internal ones
+
+    AnchorVertex *prev = data->from;
 
-    // Skip the last
     for (int i = 0; i < data->m_edges.count() - 1; ++i) {
-        AnchorData *child = data->m_edges.at(i);
-        interpolateEdge(prev, child, orientation);
-        prev = child->to;
+        AnchorData *edge = data->m_edges.at(i);
+        interpolateEdge(prev, edge, orientation);
+
+        // Use the recently calculated vertex as the base for the next one
+        const bool edgeIsForward = (edge->from == prev);
+        prev = edgeIsForward ? edge->to : edge->from;
     }
 
     // Treat the last specially, since we already calculated it's end
diff --git a/src/gui/graphicsview/qgraphicsanchorlayout_p.h b/src/gui/graphicsview/qgraphicsanchorlayout_p.h
index 8d77b1a..d8e62b4 100644
--- a/src/gui/graphicsview/qgraphicsanchorlayout_p.h
+++ b/src/gui/graphicsview/qgraphicsanchorlayout_p.h
@@ -475,10 +475,8 @@ public:
     void calculateVertexPositions(Orientation orientation);
     void setupEdgesInterpolation(Orientation orientation);
     void interpolateEdge(AnchorVertex *base, AnchorData *edge, Orientation orientation);
-    void interpolateSequentialEdges(AnchorVertex *base, SequentialAnchorData *edge,
-                                    Orientation orientation);
-    void interpolateParallelEdges(AnchorVertex *base, ParallelAnchorData *edge,
-                                  Orientation orientation);
+    void interpolateSequentialEdges(SequentialAnchorData *edge, Orientation orientation);
+    void interpolateParallelEdges(ParallelAnchorData *edge, Orientation orientation);
 
     // Linear Programming solver methods
     bool solveMinMax(const QList<QSimplexConstraint *> &constraints,
-- 
cgit v0.12


From f2f7ad1e0a73ef28aee406de358e1308f817bf6d Mon Sep 17 00:00:00 2001
From: "Eduardo M. Fleury" <eduardo.fleury@openbossa.org>
Date: Thu, 5 Nov 2009 14:44:04 -0300
Subject: QGAL (Test): Add test where center anchor is simplified by parallel

We were not handling the case where a parallel anchor is created
to simplify a central anchor. Unfortunately no tests had shown
that case yet.

Signed-off-by: Eduardo M. Fleury <eduardo.fleury@openbossa.org>
Reviewed-by: Caio Marcelo de Oliveira Filho <caio.oliveira@openbossa.org>
---
 .../tst_qgraphicsanchorlayout.cpp                  | 26 ++++++++++++++++++++++
 1 file changed, 26 insertions(+)

diff --git a/tests/auto/qgraphicsanchorlayout/tst_qgraphicsanchorlayout.cpp b/tests/auto/qgraphicsanchorlayout/tst_qgraphicsanchorlayout.cpp
index cc96edb..8b52674 100644
--- a/tests/auto/qgraphicsanchorlayout/tst_qgraphicsanchorlayout.cpp
+++ b/tests/auto/qgraphicsanchorlayout/tst_qgraphicsanchorlayout.cpp
@@ -83,6 +83,7 @@ private slots:
     void infiniteMaxSizes();
     void simplifiableUnfeasible();
     void simplificationVsOrder();
+    void parallelSimplificationOfCenter();
 };
 
 class RectWidget : public QGraphicsWidget
@@ -1801,5 +1802,30 @@ void tst_QGraphicsAnchorLayout::simplificationVsOrder()
     }
 }
 
+void tst_QGraphicsAnchorLayout::parallelSimplificationOfCenter()
+{
+    QSizeF min(10, 10);
+    QSizeF pref(20, 10);
+    QSizeF max(50, 10);
+
+    QGraphicsWidget *a = createItem(min, pref, max, "A");
+    QGraphicsWidget *b = createItem(min, pref, max, "B");
+
+    QGraphicsWidget parent;
+    QGraphicsAnchorLayout *l = new QGraphicsAnchorLayout(&parent);
+    l->setContentsMargins(0, 0, 0, 0);
+
+    l->addAnchor(l, Qt::AnchorLeft, a, Qt::AnchorLeft);
+    l->addAnchor(l, Qt::AnchorRight, a, Qt::AnchorRight);
+
+    l->addAnchor(a, Qt::AnchorHorizontalCenter, b, Qt::AnchorLeft);
+    l->addAnchor(b, Qt::AnchorRight, a, Qt::AnchorRight);
+
+    parent.resize(l->effectiveSizeHint(Qt::PreferredSize));
+
+    QCOMPARE(a->geometry(), QRectF(0, 0, 40, 10));
+    QCOMPARE(b->geometry(), QRectF(20, 0, 20, 10));
+}
+
 QTEST_MAIN(tst_QGraphicsAnchorLayout)
 #include "tst_qgraphicsanchorlayout.moc"
-- 
cgit v0.12


From 92b51d119325adc7cef518c1260c71904fc68c40 Mon Sep 17 00:00:00 2001
From: "Eduardo M. Fleury" <eduardo.fleury@openbossa.org>
Date: Thu, 5 Nov 2009 20:11:37 -0300
Subject: QGAL (Test): Enable remaining tests in 'qgraphicsanchorlayout1'

Some tests were still disabled because were not supported somewhere
in the past.

Signed-off-by: Eduardo M. Fleury <eduardo.fleury@openbossa.org>
Reviewed-by: Caio Marcelo de Oliveira Filho <caio.oliveira@openbossa.org>
---
 .../tst_qgraphicsanchorlayout1.cpp                 | 25 ++++++++--------------
 1 file changed, 9 insertions(+), 16 deletions(-)

diff --git a/tests/auto/qgraphicsanchorlayout1/tst_qgraphicsanchorlayout1.cpp b/tests/auto/qgraphicsanchorlayout1/tst_qgraphicsanchorlayout1.cpp
index 57e5c41..0fbd069 100644
--- a/tests/auto/qgraphicsanchorlayout1/tst_qgraphicsanchorlayout1.cpp
+++ b/tests/auto/qgraphicsanchorlayout1/tst_qgraphicsanchorlayout1.cpp
@@ -423,7 +423,6 @@ void tst_QGraphicsAnchorLayout1::testAddAndRemoveAnchor()
     layout->setAnchor(layout, Qt::AnchorLeft, widget5, Qt::AnchorTop, 10);
     QCOMPARE( layout->count(), 4 );
 
-    // ###: NOT SUPPORTED
     // anchor two edges of a widget (to define width / height)
     QTest::ignoreMessage(QtWarningMsg, "QGraphicsAnchorLayout::addAnchor(): Cannot anchor the item to itself");
     layout->setAnchor(widget5, Qt::AnchorLeft, widget5, Qt::AnchorRight, 10);
@@ -520,8 +519,6 @@ void tst_QGraphicsAnchorLayout1::testIsValid()
     widget->setLayout(layout);
 
     widget->setGeometry(QRectF(0,0,100,100));
-    // ###: this shall change once isValid() is ready
-    // QCOMPARE(layout->isValid(), false);
     QCOMPARE(layout->isValid(), true);
     delete widget;
     }
@@ -698,9 +695,8 @@ void tst_QGraphicsAnchorLayout1::testSpecialCases()
     layout2->setAnchor(widget1, Qt::AnchorRight, layout2, Qt::AnchorRight, 1);
     layout2->setAnchor(widget1, Qt::AnchorBottom, layout2, Qt::AnchorBottom, 1);
 
-    // ###: uncomment when simplification bug is solved
-    //widget->setGeometry(QRectF(0,0,100,100));
-    //QCOMPARE(widget1->geometry(), QRectF(51,2,47,96));
+    widget->setGeometry(QRectF(0,0,100,100));
+    QCOMPARE(widget1->geometry(), QRectF(51,2,47,96));
     delete widget;
     }
 
@@ -900,9 +896,6 @@ void tst_QGraphicsAnchorLayout1::testBasicLayout_data()
             << BasicData(-1, Qt::AnchorLeft, 1, Qt::AnchorRight, 20)
             ;
 
-        // ### SIMPLIFICATION BUG FOR ITEM 1
-        // ### remove this when bug is solved
-
         theResult
             << BasicResult(0, QRectF(10, 10, 180, 80) )
             << BasicResult(1, QRectF(10, 80, 10, 10) )
@@ -1732,8 +1725,6 @@ void tst_QGraphicsAnchorLayout1::testBasicLayout()
         QCOMPARE(expected, actual);
     }
 
-    // ###: not supported yet
-/*
     // Test mirrored mode
     widget->setLayoutDirection(Qt::RightToLeft);
     layout->activate();
@@ -1745,10 +1736,13 @@ void tst_QGraphicsAnchorLayout1::testBasicLayout()
         if (mirroredRect.isValid()){
             mirroredRect.moveLeft(size.width()-item.rect.width()-item.rect.left());
         }
-        QCOMPARE(widgets[item.index]->geometry(), mirroredRect);
+        QRectF expected = truncate(mirroredRect);
+        QRectF actual = truncate(widgets[item.index]->geometry());
+
+        QCOMPARE(expected, actual);
         delete widgets[item.index];
     }
-*/
+
     delete widget;
 }
 
@@ -2447,6 +2441,8 @@ void tst_QGraphicsAnchorLayout1::testDoubleSizePolicy_data()
         QTest::newRow("double size policy: expanding-preferred") << sizePolicy1 << sizePolicy2 << width1 << width2;
     }
 
+    // QGAL handling of ignored flag is different
+    if (0)
     {
         QSizePolicy sizePolicy1( QSizePolicy::Ignored, QSizePolicy::Ignored );
         QSizePolicy sizePolicy2( QSizePolicy::Preferred, QSizePolicy::Preferred );
@@ -2514,9 +2510,6 @@ void tst_QGraphicsAnchorLayout1::testDoubleSizePolicy_data()
 
 void tst_QGraphicsAnchorLayout1::testDoubleSizePolicy()
 {
-    // ### Size policy is not yet supported
-    return;
-
     QFETCH(QSizePolicy, policy1);
     QFETCH(QSizePolicy, policy2);
     QFETCH(qreal, width1);
-- 
cgit v0.12


From 2906522845d3ce9723b978b8b1490dfc9b9008f0 Mon Sep 17 00:00:00 2001
From: Caio Marcelo de Oliveira Filho <caio.oliveira@openbossa.org>
Date: Wed, 4 Nov 2009 19:48:54 -0300
Subject: QGAL: fix leak when restoring anchors

The restore algorithm had a leak, so we did not delete all the sequences
and parallel anchors that were not part of the simplified graph, i.e.
that were nested inside other anchors.

This commit fix the leak and clean the restore function a little bit, so
the recursive function is called even for Normal anchors (which are
dealt accordingly). Note that the before/after information is exactly the
->from/->to information available in the anchor being looked on.

Also added an assertion to document the fact that at this point
(restoring anchor simplification), one of the two anchors inside a parallel
anchor must be a sequence. The algorithm depends on that because you
can't have two anchors with the same start and end points.

Signed-off-by: Caio Marcelo de Oliveira Filho <caio.oliveira@openbossa.org>
Reviewed-by: Eduardo M. Fleury <eduardo.fleury@openbossa.org>
---
 src/gui/graphicsview/qgraphicsanchorlayout_p.cpp | 63 ++++++++++--------------
 1 file changed, 27 insertions(+), 36 deletions(-)

diff --git a/src/gui/graphicsview/qgraphicsanchorlayout_p.cpp b/src/gui/graphicsview/qgraphicsanchorlayout_p.cpp
index 318ce20..ff3fe69 100644
--- a/src/gui/graphicsview/qgraphicsanchorlayout_p.cpp
+++ b/src/gui/graphicsview/qgraphicsanchorlayout_p.cpp
@@ -880,48 +880,40 @@ bool QGraphicsAnchorLayoutPrivate::simplifyGraphIteration(QGraphicsAnchorLayoutP
     return false;
 }
 
-static void restoreSimplifiedAnchor(Graph<AnchorVertex, AnchorData> &g,
-                                    AnchorData *edge,
-                                    AnchorVertex *before,
-                                    AnchorVertex *after)
+static void restoreSimplifiedAnchor(Graph<AnchorVertex, AnchorData> &g, AnchorData *edge)
 {
-    Q_ASSERT(edge->type != AnchorData::Normal);
 #if 0
     static const char *anchortypes[] = {"Normal",
                                         "Sequential",
                                         "Parallel"};
     qDebug("Restoring %s edge.", anchortypes[int(edge->type)]);
 #endif
-    if (edge->type == AnchorData::Sequential) {
-        SequentialAnchorData* seqEdge = static_cast<SequentialAnchorData*>(edge);
-        // restore the sequential anchor
-        AnchorVertex *prev = before;
-        AnchorVertex *last = after;
-        if (edge->from != prev)
-            qSwap(last, prev);
-
-        for (int i = 0; i < seqEdge->m_edges.count(); ++i) {
-            AnchorVertex *v1 = (i < seqEdge->m_children.count()) ? seqEdge->m_children.at(i) : last;
-            AnchorData *data = seqEdge->m_edges.at(i);
-            if (data->type != AnchorData::Normal) {
-                restoreSimplifiedAnchor(g, data, prev, v1);
-            } else {
-                g.createEdge(prev, v1, data);
-            }
-            prev = v1;
+
+    if (edge->type == AnchorData::Normal) {
+        g.createEdge(edge->from, edge->to, edge);
+
+    } else if (edge->type == AnchorData::Sequential) {
+        SequentialAnchorData *sequence = static_cast<SequentialAnchorData *>(edge);
+
+        for (int i = 0; i < sequence->m_edges.count(); ++i) {
+            AnchorData *data = sequence->m_edges.at(i);
+            restoreSimplifiedAnchor(g, data);
         }
+
+        delete sequence;
+
     } else if (edge->type == AnchorData::Parallel) {
-        ParallelAnchorData* parallelEdge = static_cast<ParallelAnchorData*>(edge);
-        AnchorData *parallelEdges[2] = {parallelEdge->firstEdge,
-                                        parallelEdge->secondEdge};
-        for (int i = 0; i < 2; ++i) {
-            AnchorData *data = parallelEdges[i];
-            if (data->type == AnchorData::Normal) {
-                g.createEdge(before, after, data);
-            } else {
-                restoreSimplifiedAnchor(g, data, before, after);
-            }
-        }
+        ParallelAnchorData* parallel = static_cast<ParallelAnchorData*>(edge);
+
+        // ### Because of the way parallel anchors are created in the anchor simplification
+        // algorithm, we know that one of these will be a sequence, so it'll be safe if the other
+        // anchor create an edge between the same vertices as the parallel.
+        Q_ASSERT(parallel->firstEdge->type == AnchorData::Sequential
+                 || parallel->secondEdge->type == AnchorData::Sequential);
+        restoreSimplifiedAnchor(g, parallel->firstEdge);
+        restoreSimplifiedAnchor(g, parallel->secondEdge);
+
+        delete parallel;
     }
 }
 
@@ -944,9 +936,8 @@ void QGraphicsAnchorLayoutPrivate::restoreSimplifiedGraph(Orientation orientatio
         AnchorVertex *v2 = connections.at(i).second;
         AnchorData *edge = g.edgeData(v1, v2);
         if (edge->type != AnchorData::Normal) {
-            AnchorData *oldEdge = g.takeEdge(v1, v2);
-            restoreSimplifiedAnchor(g, edge, v1, v2);
-            delete oldEdge;
+            g.takeEdge(v1, v2);
+            restoreSimplifiedAnchor(g, edge);
         }
     }
 }
-- 
cgit v0.12


From 9d89f0bd155b9eccc89eac6ff30b572795062baa Mon Sep 17 00:00:00 2001
From: Caio Marcelo de Oliveira Filho <caio.oliveira@openbossa.org>
Date: Thu, 5 Nov 2009 15:19:23 -0300
Subject: QGAL: allow parallel anchors simplify center anchors

This commit make possible to parallelize anchors that are center
anchors, i.e. that have extra constraints (stored in
itemCenterConstraints).

This is trivial to support since the parallel anchor will have the same
size as its children, so it can just "take the place" of its children in
the constraints. Restore function was added as well.

To manipulate internal structures, relevant static functions were
promoted to methods.

Signed-off-by: Caio Marcelo de Oliveira Filho <caio.oliveira@openbossa.org>
Reviewed-by: Eduardo M. Fleury <eduardo.fleury@openbossa.org>
---
 src/gui/graphicsview/qgraphicsanchorlayout_p.cpp | 80 ++++++++++++++++++++----
 src/gui/graphicsview/qgraphicsanchorlayout_p.h   | 18 ++++--
 2 files changed, 82 insertions(+), 16 deletions(-)

diff --git a/src/gui/graphicsview/qgraphicsanchorlayout_p.cpp b/src/gui/graphicsview/qgraphicsanchorlayout_p.cpp
index ff3fe69..ef89612 100644
--- a/src/gui/graphicsview/qgraphicsanchorlayout_p.cpp
+++ b/src/gui/graphicsview/qgraphicsanchorlayout_p.cpp
@@ -536,34 +536,67 @@ inline static qreal checkAdd(qreal a, qreal b)
 /*!
     \internal
 
-    Adds \a newAnchor to the graph \a g.
+    Adds \a newAnchor to the graph.
 
     Returns the newAnchor itself if it could be added without further changes to the graph. If a
     new parallel anchor had to be created, then returns the new parallel anchor. If a parallel anchor
     had to be created and it results in an unfeasible setup, \a feasible is set to false, otherwise
     true.
+
+    Note that in the case a new parallel anchor is created, it might also take over some constraints
+    from its children anchors.
 */
-static AnchorData *addAnchorMaybeParallel(Graph<AnchorVertex, AnchorData> *g,
-                                          AnchorData *newAnchor, bool *feasible)
+AnchorData *QGraphicsAnchorLayoutPrivate::addAnchorMaybeParallel(AnchorData *newAnchor, bool *feasible)
 {
+    Orientation orientation = Orientation(newAnchor->orientation);
+    Graph<AnchorVertex, AnchorData> &g = graph[orientation];
     *feasible = true;
 
     // If already exists one anchor where newAnchor is supposed to be, we create a parallel
     // anchor.
-    if (AnchorData *oldAnchor = g->takeEdge(newAnchor->from, newAnchor->to)) {
+    if (AnchorData *oldAnchor = g.takeEdge(newAnchor->from, newAnchor->to)) {
         ParallelAnchorData *parallel = new ParallelAnchorData(oldAnchor, newAnchor);
 
+        // The parallel anchor will "replace" its children anchors in
+        // every center constraint that they appear.
+
+        // ### If the dependent (center) anchors had reference(s) to their constraints, we
+        // could avoid traversing all the itemCenterConstraints.
+        QList<QSimplexConstraint *> &constraints = itemCenterConstraints[orientation];
+
+        AnchorData *children[2] = { oldAnchor, newAnchor };
+        QList<QSimplexConstraint *> *childrenConstraints[2] = { &parallel->m_firstConstraints,
+                                                                &parallel->m_secondConstraints };
+
+        for (int i = 0; i < 2; ++i) {
+            AnchorData *child = children[i];
+            QList<QSimplexConstraint *> *childConstraints = childrenConstraints[i];
+
+            if (!child->isCenterAnchor)
+                continue;
+
+            parallel->isCenterAnchor = true;
+
+            for (int i = 0; i < constraints.count(); ++i) {
+                QSimplexConstraint *c = constraints[i];
+                if (c->variables.contains(child)) {
+                    childConstraints->append(c);
+                    qreal v = c->variables.take(child);
+                    c->variables.insert(parallel, v);
+                }
+            }
+        }
+
         // At this point we can identify that the parallel anchor is not feasible, e.g. one
         // anchor minimum size is bigger than the other anchor maximum size.
         *feasible = parallel->refreshSizeHints_helper(0, false);
         newAnchor = parallel;
     }
 
-    g->createEdge(newAnchor->from, newAnchor->to, newAnchor);
+    g.createEdge(newAnchor->from, newAnchor->to, newAnchor);
     return newAnchor;
 }
 
-
 /*!
     \internal
 
@@ -858,7 +891,7 @@ bool QGraphicsAnchorLayoutPrivate::simplifyGraphIteration(QGraphicsAnchorLayoutP
         // If 'beforeSequence' and 'afterSequence' already had an anchor between them, we'll
         // create a parallel anchor between the new sequence and the old anchor.
         bool newFeasible;
-        AnchorData *newAnchor = addAnchorMaybeParallel(&g, sequence, &newFeasible);
+        AnchorData *newAnchor = addAnchorMaybeParallel(sequence, &newFeasible);
 
         if (!newFeasible) {
             *feasible = false;
@@ -880,7 +913,7 @@ bool QGraphicsAnchorLayoutPrivate::simplifyGraphIteration(QGraphicsAnchorLayoutP
     return false;
 }
 
-static void restoreSimplifiedAnchor(Graph<AnchorVertex, AnchorData> &g, AnchorData *edge)
+void QGraphicsAnchorLayoutPrivate::restoreSimplifiedAnchor(AnchorData *edge)
 {
 #if 0
     static const char *anchortypes[] = {"Normal",
@@ -889,6 +922,8 @@ static void restoreSimplifiedAnchor(Graph<AnchorVertex, AnchorData> &g, AnchorDa
     qDebug("Restoring %s edge.", anchortypes[int(edge->type)]);
 #endif
 
+    Graph<AnchorVertex, AnchorData> &g = graph[edge->orientation];
+
     if (edge->type == AnchorData::Normal) {
         g.createEdge(edge->from, edge->to, edge);
 
@@ -897,26 +932,47 @@ static void restoreSimplifiedAnchor(Graph<AnchorVertex, AnchorData> &g, AnchorDa
 
         for (int i = 0; i < sequence->m_edges.count(); ++i) {
             AnchorData *data = sequence->m_edges.at(i);
-            restoreSimplifiedAnchor(g, data);
+            restoreSimplifiedAnchor(data);
         }
 
         delete sequence;
 
     } else if (edge->type == AnchorData::Parallel) {
         ParallelAnchorData* parallel = static_cast<ParallelAnchorData*>(edge);
+        restoreSimplifiedConstraints(parallel);
 
         // ### Because of the way parallel anchors are created in the anchor simplification
         // algorithm, we know that one of these will be a sequence, so it'll be safe if the other
         // anchor create an edge between the same vertices as the parallel.
         Q_ASSERT(parallel->firstEdge->type == AnchorData::Sequential
                  || parallel->secondEdge->type == AnchorData::Sequential);
-        restoreSimplifiedAnchor(g, parallel->firstEdge);
-        restoreSimplifiedAnchor(g, parallel->secondEdge);
+        restoreSimplifiedAnchor(parallel->firstEdge);
+        restoreSimplifiedAnchor(parallel->secondEdge);
 
         delete parallel;
     }
 }
 
+void QGraphicsAnchorLayoutPrivate::restoreSimplifiedConstraints(ParallelAnchorData *parallel)
+{
+    if (!parallel->isCenterAnchor)
+        return;
+
+    for (int i = 0; i < parallel->m_firstConstraints.count(); ++i) {
+        QSimplexConstraint *c = parallel->m_firstConstraints[i];
+        qreal v = c->variables[parallel];
+        c->variables.remove(parallel);
+        c->variables.insert(parallel->firstEdge, v);
+    }
+
+    for (int i = 0; i < parallel->m_secondConstraints.count(); ++i) {
+        QSimplexConstraint *c = parallel->m_secondConstraints[i];
+        qreal v = c->variables[parallel];
+        c->variables.remove(parallel);
+        c->variables.insert(parallel->secondEdge, v);
+    }
+}
+
 void QGraphicsAnchorLayoutPrivate::restoreSimplifiedGraph(Orientation orientation)
 {
     if (!graphSimplified[orientation])
@@ -937,7 +993,7 @@ void QGraphicsAnchorLayoutPrivate::restoreSimplifiedGraph(Orientation orientatio
         AnchorData *edge = g.edgeData(v1, v2);
         if (edge->type != AnchorData::Normal) {
             g.takeEdge(v1, v2);
-            restoreSimplifiedAnchor(g, edge);
+            restoreSimplifiedAnchor(edge);
         }
     }
 }
diff --git a/src/gui/graphicsview/qgraphicsanchorlayout_p.h b/src/gui/graphicsview/qgraphicsanchorlayout_p.h
index d8e62b4..d7b3cfd 100644
--- a/src/gui/graphicsview/qgraphicsanchorlayout_p.h
+++ b/src/gui/graphicsview/qgraphicsanchorlayout_p.h
@@ -275,6 +275,9 @@ struct ParallelAnchorData : public AnchorData
 
     AnchorData* firstEdge;
     AnchorData* secondEdge;
+
+    QList<QSimplexConstraint *> m_firstConstraints;
+    QList<QSimplexConstraint *> m_secondConstraints;
 };
 
 /*!
@@ -433,20 +436,27 @@ public:
 
     QLayoutStyleInfo &styleInfo() const;
 
-    // Activation methods
-    bool simplifyGraph(Orientation orientation);
-    bool simplifyGraphIteration(Orientation orientation, bool *feasible);
-    void restoreSimplifiedGraph(Orientation orientation);
+    AnchorData *addAnchorMaybeParallel(AnchorData *newAnchor, bool *feasible);
 
+    // Activation
     void calculateGraphs();
     void calculateGraphs(Orientation orientation);
 
+    // Simplification
+    bool simplifyGraph(Orientation orientation);
+    bool simplifyGraphIteration(Orientation orientation, bool *feasible);
+
+    void restoreSimplifiedGraph(Orientation orientation);
+    void restoreSimplifiedAnchor(AnchorData *edge);
+    void restoreSimplifiedConstraints(ParallelAnchorData *parallel);
+
     bool calculateTrunk(Orientation orientation, const GraphPath &trunkPath,
                         const QList<QSimplexConstraint *> &constraints,
                         const QList<AnchorData *> &variables);
     bool calculateNonTrunk(const QList<QSimplexConstraint *> &constraints,
                            const QList<AnchorData *> &variables);
 
+    // Support functions for calculateGraph()
     bool refreshAllSizeHints(Orientation orientation);
     void findPaths(Orientation orientation);
     void constraintsFromPaths(Orientation orientation);
-- 
cgit v0.12


From 5f46db57f3baed15bfca2b4725e400808eabb7e5 Mon Sep 17 00:00:00 2001
From: Caio Marcelo de Oliveira Filho <caio.oliveira@openbossa.org>
Date: Thu, 5 Nov 2009 23:49:43 -0300
Subject: QGAL (Test): redundant anchors shouldn't harm simplification

Adds a simple test to check whether redundant anchors avoid
simplification to happen. In this case, the use of addCornerAnchors
generate redundant anchors.

Signed-off-by: Caio Marcelo de Oliveira Filho <caio.oliveira@openbossa.org>
Reviewed-by: Eduardo M. Fleury <eduardo.fleury@openbossa.org>
---
 .../tst_qgraphicsanchorlayout.cpp                  | 39 ++++++++++++++++++++++
 1 file changed, 39 insertions(+)

diff --git a/tests/auto/qgraphicsanchorlayout/tst_qgraphicsanchorlayout.cpp b/tests/auto/qgraphicsanchorlayout/tst_qgraphicsanchorlayout.cpp
index 8b52674..c7ed309 100644
--- a/tests/auto/qgraphicsanchorlayout/tst_qgraphicsanchorlayout.cpp
+++ b/tests/auto/qgraphicsanchorlayout/tst_qgraphicsanchorlayout.cpp
@@ -84,6 +84,7 @@ private slots:
     void simplifiableUnfeasible();
     void simplificationVsOrder();
     void parallelSimplificationOfCenter();
+    void simplificationVsRedundance();
 };
 
 class RectWidget : public QGraphicsWidget
@@ -1827,5 +1828,43 @@ void tst_QGraphicsAnchorLayout::parallelSimplificationOfCenter()
     QCOMPARE(b->geometry(), QRectF(20, 0, 20, 10));
 }
 
+/*
+    Test whether redundance of anchors (in this case by using addCornerAnchors), will
+    prevent simplification to take place when it should.
+*/
+void tst_QGraphicsAnchorLayout::simplificationVsRedundance()
+{
+    QSizeF min(10, 10);
+    QSizeF pref(20, 10);
+    QSizeF max(50, 30);
+
+    QGraphicsWidget *a = createItem(min, pref, max, "A");
+    QGraphicsWidget *b = createItem(min, pref, max, "B");
+    QGraphicsWidget *c = createItem(min, pref, max, "C");
+
+    QGraphicsAnchorLayout *l = new QGraphicsAnchorLayout;
+
+    l->addCornerAnchors(a, Qt::TopLeftCorner, l, Qt::TopLeftCorner);
+    l->addCornerAnchors(a, Qt::BottomLeftCorner, l, Qt::BottomLeftCorner);
+
+    l->addCornerAnchors(b, Qt::TopLeftCorner, a, Qt::TopRightCorner);
+    l->addCornerAnchors(b, Qt::TopRightCorner, l, Qt::TopRightCorner);
+
+    l->addCornerAnchors(c, Qt::TopLeftCorner, b, Qt::BottomLeftCorner);
+    l->addCornerAnchors(c, Qt::BottomLeftCorner, a, Qt::BottomRightCorner);
+    l->addCornerAnchors(c, Qt::TopRightCorner, b, Qt::BottomRightCorner);
+    l->addCornerAnchors(c, Qt::BottomRightCorner, l, Qt::BottomRightCorner);
+
+    l->effectiveSizeHint(Qt::MinimumSize);
+
+    QCOMPARE(layoutHasConflict(l), false);
+
+    if (!hasSimplification)
+        QEXPECT_FAIL("", "Test depends on simplification.", Abort);
+
+    QCOMPARE(usedSimplex(l, Qt::Horizontal), false);
+    QCOMPARE(usedSimplex(l, Qt::Vertical), false);
+}
+
 QTEST_MAIN(tst_QGraphicsAnchorLayout)
 #include "tst_qgraphicsanchorlayout.moc"
-- 
cgit v0.12


From 28f490b3edb7a47aa27db5ea427d91e082a59f18 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jo=C3=A3o=20Abecasis?= <joao@abecasis.name>
Date: Fri, 6 Nov 2009 14:53:28 +0100
Subject: Improving reliability and information from the large file test

Saw a couple of sporadic failures on Windows platforms. Debug output
should help find what's happening.

Once the fillFileSparsely test fails, there's no point in trying to read
what we failed to write so maximum tested size is reset on a failed
write.

Reviewed-by: Markus Goetz
---
 tests/auto/qfile/largefile/tst_largefile.cpp | 35 ++++++++++++++++++++++++++++
 1 file changed, 35 insertions(+)

diff --git a/tests/auto/qfile/largefile/tst_largefile.cpp b/tests/auto/qfile/largefile/tst_largefile.cpp
index 8ab3275..9105063 100644
--- a/tests/auto/qfile/largefile/tst_largefile.cpp
+++ b/tests/auto/qfile/largefile/tst_largefile.cpp
@@ -339,12 +339,47 @@ void tst_LargeFile::fillFileSparsely()
     QFETCH( QByteArray, block );
     QCOMPARE( block.size(), blockSize );
 
+    static int lastKnownGoodIndex = 0;
+    struct ScopeGuard {
+        ScopeGuard(tst_LargeFile* test)
+            : this_(test)
+            , failed(true)
+        {
+            QFETCH( int, index );
+            index_ = index;
+        }
+
+        ~ScopeGuard()
+        {
+            if (failed) {
+                this_->maxSizeBits = lastKnownGoodIndex;
+                QWARN( qPrintable(
+                    QString("QFile::error %1: '%2'. Maximum size bits reset to %3.")
+                        .arg(this_->largeFile.error())
+                        .arg(this_->largeFile.errorString())
+                        .arg(this_->maxSizeBits)) );
+            } else
+                lastKnownGoodIndex = qMax<int>(index_, lastKnownGoodIndex);
+        }
+
+    private:
+        tst_LargeFile * const this_;
+        int index_;
+
+    public:
+        bool failed;
+    };
+
+    ScopeGuard resetMaxSizeBitsOnFailure(this);
+
     QVERIFY( largeFile.seek(position) );
     QCOMPARE( largeFile.pos(), position );
 
     QCOMPARE( largeFile.write(block), (qint64)blockSize );
     QCOMPARE( largeFile.pos(), position + blockSize );
     QVERIFY( largeFile.flush() );
+
+    resetMaxSizeBitsOnFailure.failed = false;
 }
 
 void tst_LargeFile::fileCreated()
-- 
cgit v0.12


From 2b91557c93354b766c78cbc4ab48bcd58207bf1a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jo=C3=A3o=20Abecasis?= <joao@abecasis.name>
Date: Fri, 6 Nov 2009 19:48:03 +0100
Subject: Fix a signed/unsigned comparison warning

---
 src/corelib/io/qfsfileengine_unix.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/corelib/io/qfsfileengine_unix.cpp b/src/corelib/io/qfsfileengine_unix.cpp
index 7824520..05e6fab 100644
--- a/src/corelib/io/qfsfileengine_unix.cpp
+++ b/src/corelib/io/qfsfileengine_unix.cpp
@@ -1245,7 +1245,7 @@ uchar *QFSFileEnginePrivate::map(qint64 offset, qint64 size, QFile::MemoryMapFla
     }
 
     if (offset < 0 || offset != qint64(QT_OFF_T(offset))
-            || size < 0 || size > (size_t)-1) {
+            || size < 0 || size > qint64(size_t(-1))) {
         q->setError(QFile::UnspecifiedError, qt_error_string(int(EINVAL)));
         return 0;
     }
-- 
cgit v0.12


From d4b0fa0b4fd566a8afa268b29fc5b9b08bd503ee Mon Sep 17 00:00:00 2001
From: Joerg Bornemann <joerg.bornemann@nokia.com>
Date: Fri, 6 Nov 2009 21:13:43 +0100
Subject: changes-4.6.0 updated

---
 dist/changes-4.6.0 | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/dist/changes-4.6.0 b/dist/changes-4.6.0
index a03ed43..a3af04e 100644
--- a/dist/changes-4.6.0
+++ b/dist/changes-4.6.0
@@ -221,6 +221,17 @@ QtGui
  - The default button size has been reduced in the Windows mobile style.
 
  - [QTBUG-3613] QWizard issues have been fixed on Windows mobile.
+
+ - [254673] Restoring minimzed widgets fixed for Windows mobile and
+   Windows CE.
+
+ - [255242] Seeking within large files (bigger than 0x80000000 bytes) fixed
+   on Windows CE.
+
+ - [257352] When configuring Qt for Windows CE, configure points the user to
+   setcepaths, when its done.
+
+ - [259850] Added a makespec template for Windows CE 6.
    
  - Added QMAKE_LIBS_OPENGL_ES1, QMAKE_LIBS_OPENGL_ES1CL and
    QMAKE_LIBS_OPENGL_ES2 qmake variables for specifying OpenGL ES
-- 
cgit v0.12


From 76a0ea27dd4e377ab5d32c7559f4b9700cd5618a Mon Sep 17 00:00:00 2001
From: Artur Duque de Souza <artur.souza@openbossa.org>
Date: Fri, 6 Nov 2009 19:01:09 -0300
Subject: Make sizePolicy a property of QGraphicsWidget too

The widget has sizePolicy as a property and declaring that properly
helps scripting. Just as it was done with min/pref/max sizes.

Signed-off-by: Artur Duque de Souza <artur.souza@openbossa.org>
---
 src/gui/graphicsview/qgraphicswidget.cpp | 6 ++++++
 src/gui/graphicsview/qgraphicswidget.h   | 1 +
 2 files changed, 7 insertions(+)

diff --git a/src/gui/graphicsview/qgraphicswidget.cpp b/src/gui/graphicsview/qgraphicswidget.cpp
index 35a3c13..1496798 100644
--- a/src/gui/graphicsview/qgraphicswidget.cpp
+++ b/src/gui/graphicsview/qgraphicswidget.cpp
@@ -318,6 +318,12 @@ void QGraphicsWidget::resize(const QSizeF &size)
 */
 
 /*!
+    \property QGraphicsWidget::sizePolicy
+    \brief the size policy for the widget
+    \sa sizePolicy(), setSizePolicy(), QWidget::sizePolicy()
+*/
+
+/*!
     \property QGraphicsWidget::geometry
     \brief the geometry of the widget
 
diff --git a/src/gui/graphicsview/qgraphicswidget.h b/src/gui/graphicsview/qgraphicswidget.h
index 38f72f0..15dc878 100644
--- a/src/gui/graphicsview/qgraphicswidget.h
+++ b/src/gui/graphicsview/qgraphicswidget.h
@@ -77,6 +77,7 @@ class Q_GUI_EXPORT QGraphicsWidget : public QGraphicsObject, public QGraphicsLay
     Q_PROPERTY(QSizeF minimumSize READ minimumSize WRITE setMinimumSize)
     Q_PROPERTY(QSizeF preferredSize READ preferredSize WRITE setPreferredSize)
     Q_PROPERTY(QSizeF maximumSize READ maximumSize WRITE setMaximumSize)
+    Q_PROPERTY(QSizePolicy::Policy sizePolicy READ sizePolicy WRITE setSizePolicy)
     Q_PROPERTY(Qt::FocusPolicy focusPolicy READ focusPolicy WRITE setFocusPolicy)
     Q_PROPERTY(Qt::WindowFlags windowFlags READ windowFlags WRITE setWindowFlags)
     Q_PROPERTY(QString windowTitle READ windowTitle WRITE setWindowTitle)
-- 
cgit v0.12


From 81955cdea96a7d95eec8df32923273be4df573b2 Mon Sep 17 00:00:00 2001
From: Caio Marcelo de Oliveira Filho <caio.oliveira@openbossa.org>
Date: Thu, 5 Nov 2009 15:04:45 -0300
Subject: QGAL: vertex simplification

Some vertices are connected by anchors with size 0, which means that
in practice, they represent the same point when positioning items,
i.e. their distance value is the same. In those cases, we can merge the two
anchors in one, that's what vertex simplification do.

The algorithm is walking in the graph, merging vertices in pairs (this could be enhanced to allow groups with arbitrary number of children vertices)

The vertex simplification stage happens before the anchor
simplification, so it'll make less passes. Also, in some situations of
redudant anchors it will allow more anchors to be simplified.

This commit creates a new type of AnchorVertex, add the algorithm
for vertex simplification and restoration, make sure that distribution also
works with simplified vertices.

Consequences:

 - the assert after creating a sequence might not be true anymore, it
   was a structural assumption that vertex simplification may destroy;

 - we assumed that a center anchor could appear only in the beginning
   or end of the candidates, because the "center vertex" always would
   have 3 adjacents. A mix of parallel+center and vertex
   simplification break that assumption.

The commit deal with those consequences.

We still have one limitation: vertex simplification needs to restore
the graph in every invalidation (which might be caused by some child's
updateGeometyry()), since a change in the sizeHint might cause a new
anchor to have size 0 or a 0-sized anchor to have a different size. In
the future we can track the 0 sized anchors and only
restore/re-simplify when the set changes.

Signed-off-by: Caio Marcelo de Oliveira Filho <caio.oliveira@openbossa.org>
Reviewed-by: Eduardo M. Fleury <eduardo.fleury@openbossa.org>
---
 src/gui/graphicsview/qgraphicsanchorlayout_p.cpp | 315 +++++++++++++++++++++--
 src/gui/graphicsview/qgraphicsanchorlayout_p.h   | 137 ++++++----
 2 files changed, 379 insertions(+), 73 deletions(-)

diff --git a/src/gui/graphicsview/qgraphicsanchorlayout_p.cpp b/src/gui/graphicsview/qgraphicsanchorlayout_p.cpp
index ef89612..395c035 100644
--- a/src/gui/graphicsview/qgraphicsanchorlayout_p.cpp
+++ b/src/gui/graphicsview/qgraphicsanchorlayout_p.cpp
@@ -61,6 +61,8 @@ QGraphicsAnchorPrivate::QGraphicsAnchorPrivate(int version)
 
 QGraphicsAnchorPrivate::~QGraphicsAnchorPrivate()
 {
+    // ###
+    layoutPrivate->restoreSimplifiedGraph(QGraphicsAnchorLayoutPrivate::Orientation(data->orientation));
     layoutPrivate->removeAnchor(data->from, data->to);
 }
 
@@ -700,30 +702,185 @@ bool QGraphicsAnchorLayoutPrivate::simplifyGraph(Orientation orientation)
 
     if (graphSimplified[orientation])
         return true;
-    graphSimplified[orientation] = true;
 
 #if 0
     qDebug("Simplifying Graph for %s",
            orientation == Horizontal ? "Horizontal" : "Vertical");
 #endif
 
-    if (!layoutFirstVertex[orientation])
-        return true;
+    // Vertex simplification
+    if (!simplifyVertices(orientation)) {
+        restoreVertices(orientation);
+        return false;
+    }
 
+    // Anchor simplification
     bool dirty;
     bool feasible = true;
     do {
         dirty = simplifyGraphIteration(orientation, &feasible);
     } while (dirty && feasible);
 
-    if (!feasible)
-        graphSimplified[orientation] = false;
+    // Note that if we are not feasible, we fallback and make sure that the graph is fully restored
+    if (!feasible) {
+        graphSimplified[orientation] = true;
+        restoreSimplifiedGraph(orientation);
+        restoreVertices(orientation);
+        return false;
+    }
+
+    graphSimplified[orientation] = true;
+    return true;
+}
+
+static AnchorVertex *replaceVertex_helper(AnchorData *data, AnchorVertex *oldV, AnchorVertex *newV)
+{
+    AnchorVertex *other;
+    if (data->from == oldV) {
+        data->from = newV;
+        other = data->to;
+    } else {
+        data->to = newV;
+        other = data->from;
+    }
+    return other;
+}
+
+bool QGraphicsAnchorLayoutPrivate::replaceVertex(Orientation orientation, AnchorVertex *oldV,
+                                                 AnchorVertex *newV, const QList<AnchorData *> &edges)
+{
+    Graph<AnchorVertex, AnchorData> &g = graph[orientation];
+    bool feasible = true;
+
+    for (int i = 0; i < edges.count(); ++i) {
+        AnchorData *ad = edges[i];
+        AnchorVertex *otherV = replaceVertex_helper(ad, oldV, newV);
+
+#if defined(QT_DEBUG)
+        ad->name = QString::fromAscii("%1 --to--> %2").arg(ad->from->toString()).arg(ad->to->toString());
+#endif
+
+        bool newFeasible;
+        AnchorData *newAnchor = addAnchorMaybeParallel(ad, &newFeasible);
+        feasible &= newFeasible;
+
+        if (newAnchor != ad) {
+            // A parallel was created, we mark that in the list of anchors created by vertex
+            // simplification. This is needed because we want to restore them in a separate step
+            // from the restoration of anchor simplification.
+            anchorsFromSimplifiedVertices[orientation].append(newAnchor);
+        }
+
+        g.takeEdge(oldV, otherV);
+    }
 
     return feasible;
 }
 
 /*!
     \internal
+*/
+bool QGraphicsAnchorLayoutPrivate::simplifyVertices(Orientation orientation)
+{
+    Q_Q(QGraphicsAnchorLayout);
+    Graph<AnchorVertex, AnchorData> &g = graph[orientation];
+
+    // We'll walk through vertices
+    QStack<AnchorVertex *> stack;
+    stack.push(layoutFirstVertex[orientation]);
+    QSet<AnchorVertex *> visited;
+
+    while (!stack.isEmpty()) {
+        AnchorVertex *v = stack.pop();
+        visited.insert(v);
+
+        // Each adjacent of 'v' is a possible vertex to be merged. So we traverse all of
+        // them. Since once a merge is made, we might add new adjacents, and we don't want to
+        // pass two times through one adjacent. The 'index' is used to track our position.
+        QList<AnchorVertex *> adjacents = g.adjacentVertices(v);
+        int index = 0;
+
+        while (index < adjacents.count()) {
+            AnchorVertex *next = adjacents[index];
+            index++;
+
+            AnchorData *data = g.edgeData(v, next);
+            const bool bothLayoutVertices = v->m_item == q && next->m_item == q;
+            const bool zeroSized = !data->minSize && !data->maxSize;
+
+            if (!bothLayoutVertices && zeroSized) {
+
+                // Create a new vertex pair, note that we keep a list of those vertices so we can
+                // easily process them when restoring the graph.
+                AnchorVertexPair *newV = new AnchorVertexPair(v, next, data);
+                simplifiedVertices[orientation].append(newV);
+
+                // Collect the anchors of both vertices, the new vertex pair will take their place
+                // in those anchors
+                const QList<AnchorVertex *> &vAdjacents = g.adjacentVertices(v);
+                const QList<AnchorVertex *> &nextAdjacents = g.adjacentVertices(next);
+
+                for (int i = 0; i < vAdjacents.count(); ++i) {
+                    AnchorVertex *adjacent = vAdjacents[i];
+                    if (adjacent != next) {
+                        AnchorData *ad = g.edgeData(v, adjacent);
+                        newV->m_firstAnchors.append(ad);
+                    }
+                }
+
+                for (int i = 0; i < nextAdjacents.count(); ++i) {
+                    AnchorVertex *adjacent = nextAdjacents[i];
+                    if (adjacent != v) {
+                        AnchorData *ad = g.edgeData(next, adjacent);
+                        newV->m_secondAnchors.append(ad);
+
+                        // We'll also add new vertices to the adjacent list of the new 'v', to be
+                        // created as a vertex pair and replace the current one.
+                        if (!adjacents.contains(adjacent))
+                            adjacents.append(adjacent);
+                    }
+                }
+
+                // ### merge this loop into the ones that calculated m_firstAnchors/m_secondAnchors?
+                // Make newV take the place of v and next
+                bool feasible = replaceVertex(orientation, v, newV, newV->m_firstAnchors);
+                feasible &= replaceVertex(orientation, next, newV, newV->m_secondAnchors);
+
+                // Update the layout vertex information if one of the vertices is a layout vertex.
+                AnchorVertex *layoutVertex = 0;
+                if (v->m_item == q)
+                    layoutVertex = v;
+                else if (next->m_item == q)
+                    layoutVertex = next;
+
+                if (layoutVertex) {
+                    // Layout vertices always have m_item == q...
+                    newV->m_item = q;
+                    changeLayoutVertex(orientation, layoutVertex, newV);
+                }
+
+                g.takeEdge(v, next);
+
+                // If a non-feasibility is found, we leave early and cancel the simplification
+                if (!feasible)
+                    return false;
+
+                v = newV;
+                visited.insert(newV);
+
+            } else if (!visited.contains(next) && !stack.contains(next)) {
+                // If the adjacent is not fit for merge and it wasn't visited by the outermost
+                // loop, we add it to the stack.
+                stack.push(next);
+            }
+        }
+    }
+
+    return true;
+}
+
+/*!
+    \internal
 
     One iteration of the simplification algorithm. Returns true if another iteration is needed.
 
@@ -763,7 +920,8 @@ bool QGraphicsAnchorLayoutPrivate::simplifyGraphIteration(QGraphicsAnchorLayoutP
         // (a) it is a layout vertex, we don't simplify away the layout vertices;
         // (b) it does not have exactly 2 adjacents;
         // (c) it will change the direction of the sequence;
-        // (d) its next adjacent is already visited (a cycle in the graph).
+        // (d) its next adjacent is already visited (a cycle in the graph);
+        // (e) the next anchor is a center anchor.
 
         const QList<AnchorVertex *> &adjacents = g.adjacentVertices(v);
         const bool isLayoutVertex = v->m_item == q;
@@ -786,13 +944,14 @@ bool QGraphicsAnchorLayoutPrivate::simplifyGraphIteration(QGraphicsAnchorLayoutP
                 candidatesForward = (beforeSequence == data->from);
             }
 
-            // This is a tricky part. We peek at the next vertex to find out
+            // This is a tricky part. We peek at the next vertex to find out whether
             //
-            // - whether the edge from this vertex to the next vertex has the same direction;
-            // - whether we already visited the next vertex.
+            // - the edge from this vertex to the next vertex has the same direction;
+            // - we already visited the next vertex;
+            // - the next anchor is a center.
             //
-            // Those are needed to identify (c) and (d). Note that unlike (a) and (b), we preempt
-            // the end of sequence by looking into the next vertex.
+            // Those are needed to identify the remaining end of sequence cases. Note that unlike
+            // (a) and (b), we preempt the end of sequence by looking into the next vertex.
 
             // Peek at the next vertex
             AnchorVertex *after;
@@ -810,8 +969,8 @@ bool QGraphicsAnchorLayoutPrivate::simplifyGraphIteration(QGraphicsAnchorLayoutP
             const bool willChangeDirection = (candidatesForward != (v == data->from));
             const bool cycleFound = visited.contains(after);
 
-            // Now cases (c) and (d)...
-            endOfSequence = willChangeDirection || cycleFound;
+            // Now cases (c), (d) and (e)...
+            endOfSequence = willChangeDirection || cycleFound || data->isCenterAnchor;
 
             if (endOfSequence) {
                 if (!willChangeDirection) {
@@ -879,13 +1038,6 @@ bool QGraphicsAnchorLayoutPrivate::simplifyGraphIteration(QGraphicsAnchorLayoutP
         // Add the sequence to the graph.
         //
 
-        // ### At this point we assume that if some parallel anchor will be created because
-        // of the new sequence, the other anchor will not be a center anchor (since we
-        // not deal with that case yet). This assumption will break once we start simplifying
-        // vertices.
-        AnchorData *possibleParallel = g.edgeData(beforeSequence, afterSequence);
-        Q_ASSERT(!possibleParallel || !possibleParallel->isCenterAnchor);
-
         AnchorData *sequence = createSequence(&g, beforeSequence, candidates, afterSequence);
 
         // If 'beforeSequence' and 'afterSequence' already had an anchor between them, we'll
@@ -938,6 +1090,13 @@ void QGraphicsAnchorLayoutPrivate::restoreSimplifiedAnchor(AnchorData *edge)
         delete sequence;
 
     } else if (edge->type == AnchorData::Parallel) {
+
+        // Skip parallel anchors that were created by vertex simplification, they will be processed
+        // later, when restoring vertex simplification.
+        // ### we could improve this check bit having a bit inside 'edge'
+        if (anchorsFromSimplifiedVertices[edge->orientation].contains(edge))
+            return;
+
         ParallelAnchorData* parallel = static_cast<ParallelAnchorData*>(edge);
         restoreSimplifiedConstraints(parallel);
 
@@ -984,18 +1143,93 @@ void QGraphicsAnchorLayoutPrivate::restoreSimplifiedGraph(Orientation orientatio
            orientation == Horizontal ? "Horizontal" : "Vertical");
 #endif
 
+    // Restore anchor simplification
     Graph<AnchorVertex, AnchorData> &g = graph[orientation];
-
     QList<QPair<AnchorVertex*, AnchorVertex*> > connections = g.connections();
     for (int i = 0; i < connections.count(); ++i) {
         AnchorVertex *v1 = connections.at(i).first;
         AnchorVertex *v2 = connections.at(i).second;
         AnchorData *edge = g.edgeData(v1, v2);
-        if (edge->type != AnchorData::Normal) {
+
+        // We restore only sequential anchors and parallels that were not created by
+        // vertex simplification.
+        if (edge->type == AnchorData::Sequential
+            || (edge->type == AnchorData::Parallel &&
+                !anchorsFromSimplifiedVertices[orientation].contains(edge))) {
+
             g.takeEdge(v1, v2);
             restoreSimplifiedAnchor(edge);
         }
     }
+
+    restoreVertices(orientation);
+}
+
+void QGraphicsAnchorLayoutPrivate::restoreVertices(Orientation orientation)
+{
+    Q_Q(QGraphicsAnchorLayout);
+
+    Graph<AnchorVertex, AnchorData> &g = graph[orientation];
+    QList<AnchorVertexPair *> &toRestore = simplifiedVertices[orientation];
+
+    // We will restore the vertices in the inverse order of creation, this way we ensure that
+    // the vertex being restored was not wrapped by another simplification.
+    for (int i = toRestore.count() - 1; i >= 0; --i) {
+        AnchorVertexPair *pair = toRestore[i];
+        QList<AnchorVertex *> adjacents = g.adjacentVertices(pair);
+
+        // Restore the removed edge, this will also restore both vertices 'first' and 'second' to
+        // the graph structure.
+        AnchorVertex *first = pair->m_first;
+        AnchorVertex *second = pair->m_second;
+        g.createEdge(first, second, pair->m_removedAnchor);
+
+        // Restore the anchors for the first child vertex
+        for (int j = 0; j < pair->m_firstAnchors.count(); ++j) {
+            AnchorData *ad = pair->m_firstAnchors[j];
+            Q_ASSERT(ad->from == pair || ad->to == pair);
+
+            replaceVertex_helper(ad, pair, first);
+            g.createEdge(ad->from, ad->to, ad);
+        }
+
+        // Restore the anchors for the second child vertex
+        for (int j = 0; j < pair->m_secondAnchors.count(); ++j) {
+            AnchorData *ad = pair->m_secondAnchors[j];
+            Q_ASSERT(ad->from == pair || ad->to == pair);
+
+            replaceVertex_helper(ad, pair, second);
+            g.createEdge(ad->from, ad->to, ad);
+        }
+
+        for (int j = 0; j < adjacents.count(); ++j) {
+            g.takeEdge(pair, adjacents[j]);
+        }
+
+        // The pair simplified a layout vertex, so place back the correct vertex in the variable
+        // that track layout vertices
+        if (pair->m_item == q) {
+            AnchorVertex *layoutVertex = first->m_item == q ? first : second;
+            Q_ASSERT(layoutVertex->m_item == q);
+            changeLayoutVertex(orientation, pair, layoutVertex);
+        }
+
+        delete pair;
+    }
+    toRestore.clear();
+
+    // The restoration process for vertex simplification also restored the effect of the
+    // parallel anchors created during vertex simplification, so we just need to restore
+    // the constraints in case of parallels that contain center anchors. For the same
+    // reason as above, order matters here.
+    QList<AnchorData *> &parallelAnchors = anchorsFromSimplifiedVertices[orientation];
+
+    for (int i = parallelAnchors.count() - 1; i >= 0; --i) {
+        ParallelAnchorData *parallel = static_cast<ParallelAnchorData *>(parallelAnchors[i]);
+        restoreSimplifiedConstraints(parallel);
+        delete parallel;
+    }
+    parallelAnchors.clear();
 }
 
 QGraphicsAnchorLayoutPrivate::Orientation
@@ -1149,7 +1383,6 @@ void QGraphicsAnchorLayoutPrivate::createCenterAnchors(
     if (item == q) {
         layoutCentralVertex[orientation] = internalVertex(q, centerEdge);
     }
-
 }
 
 void QGraphicsAnchorLayoutPrivate::removeCenterAnchors(
@@ -1811,6 +2044,15 @@ void QGraphicsAnchorLayoutPrivate::calculateGraphs(
     lastCalculationUsedSimplex[orientation] = false;
 #endif
 
+    // ### This is necessary because now we do vertex simplification, we still don't know
+    // differentiate between invalidate()s that doesn't need resimplification and those which
+    // need. For example, when size hint of an item changes, this may cause an anchor to reach 0 or to
+    // leave 0 and get a size. In both cases we need resimplify.
+    //
+    // ### one possible solution would be tracking all the 0-sized anchors, if this set change, we need
+    // resimplify.
+    restoreSimplifiedGraph(orientation);
+
     // Reset the nominal sizes of each anchor based on the current item sizes.  This function
     // works with both simplified and non-simplified graphs, so it'll work when the
     // simplification is going to be reused.
@@ -2379,6 +2621,21 @@ void QGraphicsAnchorLayoutPrivate::setItemsGeometries(const QRectF &geom)
 }
 
 /*!
+    \internal
+
+    Fill the distance in the vertex and in the sub-vertices if its a combined vertex.
+*/
+static void setVertexDistance(AnchorVertex *v, qreal distance)
+{
+    v->distance = distance;
+    if (v->m_type == AnchorVertex::Pair) {
+        AnchorVertexPair *pair = static_cast<AnchorVertexPair *>(v);
+        setVertexDistance(pair->m_first, distance);
+        setVertexDistance(pair->m_second, distance);
+    }
+}
+
+/*!
   \internal
 
   Calculate the position of each vertex based on the paths to each of
@@ -2393,7 +2650,7 @@ void QGraphicsAnchorLayoutPrivate::calculateVertexPositions(
     // Get root vertex
     AnchorVertex *root = layoutFirstVertex[orientation];
 
-    root->distance = 0;
+    setVertexDistance(root, 0);
     visited.insert(root);
 
     // Add initial edges to the queue
@@ -2483,10 +2740,12 @@ void QGraphicsAnchorLayoutPrivate::interpolateEdge(AnchorVertex *base,
 
     Q_ASSERT(edge->from == base || edge->to == base);
 
-    if (edge->from == base)
-        edge->to->distance = base->distance + edgeDistance;
-    else
-        edge->from->distance = base->distance - edgeDistance;
+    // Calculate the distance for the vertex opposite to the base
+    if (edge->from == base) {
+        setVertexDistance(edge->to, base->distance + edgeDistance);
+    } else {
+        setVertexDistance(edge->from, base->distance - edgeDistance);
+    }
 
     // Process child anchors
     if (edge->type == AnchorData::Sequential)
diff --git a/src/gui/graphicsview/qgraphicsanchorlayout_p.h b/src/gui/graphicsview/qgraphicsanchorlayout_p.h
index d7b3cfd..3a22db0 100644
--- a/src/gui/graphicsview/qgraphicsanchorlayout_p.h
+++ b/src/gui/graphicsview/qgraphicsanchorlayout_p.h
@@ -78,66 +78,30 @@ QT_BEGIN_NAMESPACE
   Represents a vertex (anchorage point) in the internal graph
 */
 struct AnchorVertex {
+    enum Type {
+        Normal = 0,
+        Pair
+    };
+
     AnchorVertex(QGraphicsLayoutItem *item, Qt::AnchorPoint edge)
-        : m_item(item), m_edge(edge) {}
+        : m_item(item), m_edge(edge), m_type(Normal) {}
 
     AnchorVertex()
-        : m_item(0), m_edge(Qt::AnchorPoint(0)) {}
+        : m_item(0), m_edge(Qt::AnchorPoint(0)), m_type(Normal) {}
 
 #ifdef QT_DEBUG
     inline QString toString() const;
 #endif
+
     QGraphicsLayoutItem *m_item;
     Qt::AnchorPoint m_edge;
+    uint m_type : 1;
 
     // Current distance from this vertex to the layout edge (Left or Top)
     // Value is calculated from the current anchors sizes.
     qreal distance;
 };
 
-#ifdef QT_DEBUG
-inline QString AnchorVertex::toString() const
-{
-    if (!this || !m_item) {
-        return QLatin1String("NULL");
-    }
-    QString edge;
-    switch (m_edge) {
-    case Qt::AnchorLeft:
-        edge = QLatin1String("Left");
-        break;
-    case Qt::AnchorHorizontalCenter:
-        edge = QLatin1String("HorizontalCenter");
-        break;
-    case Qt::AnchorRight:
-        edge = QLatin1String("Right");
-        break;
-    case Qt::AnchorTop:
-        edge = QLatin1String("Top");
-        break;
-    case Qt::AnchorVerticalCenter:
-        edge = QLatin1String("VerticalCenter");
-        break;
-    case Qt::AnchorBottom:
-        edge = QLatin1String("Bottom");
-        break;
-    default:
-        edge = QLatin1String("None");
-        break;
-    }
-    QString itemName;
-    if (m_item->isLayout()) {
-        itemName = QLatin1String("layout");
-    } else {
-        if (QGraphicsItem *item = m_item->graphicsItem()) {
-            itemName = item->data(0).toString();
-        }
-    }
-    edge.insert(0, QLatin1String("%1_"));
-    return edge.arg(itemName);
-}
-#endif
-
 /*!
   \internal
 
@@ -280,6 +244,68 @@ struct ParallelAnchorData : public AnchorData
     QList<QSimplexConstraint *> m_secondConstraints;
 };
 
+struct AnchorVertexPair : public AnchorVertex {
+    AnchorVertexPair(AnchorVertex *v1, AnchorVertex *v2, AnchorData *data)
+        : AnchorVertex(), m_first(v1), m_second(v2), m_removedAnchor(data) {
+        m_type = AnchorVertex::Pair;
+    }
+
+    AnchorVertex *m_first;
+    AnchorVertex *m_second;
+
+    AnchorData *m_removedAnchor;
+    QList<AnchorData *> m_firstAnchors;
+    QList<AnchorData *> m_secondAnchors;
+};
+
+#ifdef QT_DEBUG
+inline QString AnchorVertex::toString() const
+{
+    if (!this) {
+        return QLatin1String("NULL");
+    } else if (m_type == Pair) {
+        const AnchorVertexPair *vp = static_cast<const AnchorVertexPair *>(this);
+        return QString::fromAscii("(%1, %2)").arg(vp->m_first->toString()).arg(vp->m_second->toString());
+    } else if (!m_item) {
+        return QString::fromAscii("NULL_%1").arg(int(this));
+    }
+    QString edge;
+    switch (m_edge) {
+    case Qt::AnchorLeft:
+        edge = QLatin1String("Left");
+        break;
+    case Qt::AnchorHorizontalCenter:
+        edge = QLatin1String("HorizontalCenter");
+        break;
+    case Qt::AnchorRight:
+        edge = QLatin1String("Right");
+        break;
+    case Qt::AnchorTop:
+        edge = QLatin1String("Top");
+        break;
+    case Qt::AnchorVerticalCenter:
+        edge = QLatin1String("VerticalCenter");
+        break;
+    case Qt::AnchorBottom:
+        edge = QLatin1String("Bottom");
+        break;
+    default:
+        edge = QLatin1String("None");
+        break;
+    }
+    QString itemName;
+    if (m_item->isLayout()) {
+        itemName = QLatin1String("layout");
+    } else {
+        if (QGraphicsItem *item = m_item->graphicsItem()) {
+            itemName = item->data(0).toString();
+        }
+    }
+    edge.insert(0, QLatin1String("%1_"));
+    return edge.arg(itemName);
+}
+#endif
+
 /*!
   \internal
 
@@ -444,11 +470,17 @@ public:
 
     // Simplification
     bool simplifyGraph(Orientation orientation);
+    bool simplifyVertices(Orientation orientation);
     bool simplifyGraphIteration(Orientation orientation, bool *feasible);
 
+    bool replaceVertex(Orientation orientation, AnchorVertex *oldV,
+                       AnchorVertex *newV, const QList<AnchorData *> &edges);
+
+
     void restoreSimplifiedGraph(Orientation orientation);
     void restoreSimplifiedAnchor(AnchorData *edge);
     void restoreSimplifiedConstraints(ParallelAnchorData *parallel);
+    void restoreVertices(Orientation orientation);
 
     bool calculateTrunk(Orientation orientation, const GraphPath &trunkPath,
                         const QList<QSimplexConstraint *> &constraints,
@@ -476,6 +508,17 @@ public:
         return internalVertex(qMakePair(const_cast<QGraphicsLayoutItem *>(item), edge));
     }
 
+    inline void changeLayoutVertex(Orientation orientation, AnchorVertex *oldV, AnchorVertex *newV)
+    {
+        if (layoutFirstVertex[orientation] == oldV)
+            layoutFirstVertex[orientation] = newV;
+        else if (layoutCentralVertex[orientation] == oldV)
+            layoutCentralVertex[orientation] = newV;
+        else if (layoutLastVertex[orientation] == oldV)
+            layoutLastVertex[orientation] = newV;
+    }
+
+
     AnchorVertex *addInternalVertex(QGraphicsLayoutItem *item, Qt::AnchorPoint edge);
     void removeInternalVertex(QGraphicsLayoutItem *item, Qt::AnchorPoint edge);
 
@@ -519,6 +562,10 @@ public:
     AnchorVertex *layoutCentralVertex[2];
     AnchorVertex *layoutLastVertex[2];
 
+    // Combined anchors in order of creation
+    QList<AnchorVertexPair *> simplifiedVertices[2];
+    QList<AnchorData *> anchorsFromSimplifiedVertices[2];
+
     // Graph paths and constraints, for both orientations
     QMultiHash<AnchorVertex *, GraphPath> graphPaths[2];
     QList<QSimplexConstraint *> constraints[2];
-- 
cgit v0.12


From 20f6d4080af9945b957fe74520373c015fbdacbc Mon Sep 17 00:00:00 2001
From: Caio Marcelo de Oliveira Filho <caio.oliveira@openbossa.org>
Date: Fri, 6 Nov 2009 15:26:36 -0300
Subject: QGAL: avoid passing Orientation for interpolation functions

Not all of the interpolation functions needed the orientation information,
and the one that needs can look at the orientation of the anchor in the
parameter. This simplified a little bit the function calls.

Signed-off-by: Caio Marcelo de Oliveira Filho <caio.oliveira@openbossa.org>
---
 src/gui/graphicsview/qgraphicsanchorlayout_p.cpp | 33 ++++++++++--------------
 src/gui/graphicsview/qgraphicsanchorlayout_p.h   |  6 ++---
 2 files changed, 16 insertions(+), 23 deletions(-)

diff --git a/src/gui/graphicsview/qgraphicsanchorlayout_p.cpp b/src/gui/graphicsview/qgraphicsanchorlayout_p.cpp
index 395c035..f850b0d 100644
--- a/src/gui/graphicsview/qgraphicsanchorlayout_p.cpp
+++ b/src/gui/graphicsview/qgraphicsanchorlayout_p.cpp
@@ -2674,7 +2674,7 @@ void QGraphicsAnchorLayoutPrivate::calculateVertexPositions(
             continue;
 
         visited.insert(pair.second);
-        interpolateEdge(pair.first, edge, orientation);
+        interpolateEdge(pair.first, edge);
 
         QList<AnchorVertex *> adjacents = graph[orientation].adjacentVertices(pair.second);
         for (int i = 0; i < adjacents.count(); ++i) {
@@ -2728,10 +2728,9 @@ void QGraphicsAnchorLayoutPrivate::setupEdgesInterpolation(
    vertices to be initalized, so it calls specialized functions that
    will recurse back to interpolateEdge().
  */
-void QGraphicsAnchorLayoutPrivate::interpolateEdge(AnchorVertex *base,
-                                                   AnchorData *edge,
-                                                   Orientation orientation)
+void QGraphicsAnchorLayoutPrivate::interpolateEdge(AnchorVertex *base, AnchorData *edge)
 {
+    const Orientation orientation = Orientation(edge->orientation);
     const QPair<Interval, qreal> factor(interpolationInterval[orientation],
                                         interpolationProgress[orientation]);
 
@@ -2749,13 +2748,12 @@ void QGraphicsAnchorLayoutPrivate::interpolateEdge(AnchorVertex *base,
 
     // Process child anchors
     if (edge->type == AnchorData::Sequential)
-        interpolateSequentialEdges(static_cast<SequentialAnchorData *>(edge), orientation);
+        interpolateSequentialEdges(static_cast<SequentialAnchorData *>(edge));
     else if (edge->type == AnchorData::Parallel)
-        interpolateParallelEdges(static_cast<ParallelAnchorData *>(edge), orientation);
+        interpolateParallelEdges(static_cast<ParallelAnchorData *>(edge));
 }
 
-void QGraphicsAnchorLayoutPrivate::interpolateParallelEdges(
-    ParallelAnchorData *data, Orientation orientation)
+void QGraphicsAnchorLayoutPrivate::interpolateParallelEdges(ParallelAnchorData *data)
 {
     // In parallels the boundary vertices are already calculate, we
     // just need to look for sequential groups inside, because only
@@ -2763,23 +2761,18 @@ void QGraphicsAnchorLayoutPrivate::interpolateParallelEdges(
 
     // First edge
     if (data->firstEdge->type == AnchorData::Sequential)
-        interpolateSequentialEdges(static_cast<SequentialAnchorData *>(data->firstEdge),
-                                   orientation);
+        interpolateSequentialEdges(static_cast<SequentialAnchorData *>(data->firstEdge));
     else if (data->firstEdge->type == AnchorData::Parallel)
-        interpolateParallelEdges(static_cast<ParallelAnchorData *>(data->firstEdge),
-                                 orientation);
+        interpolateParallelEdges(static_cast<ParallelAnchorData *>(data->firstEdge));
 
     // Second edge
     if (data->secondEdge->type == AnchorData::Sequential)
-        interpolateSequentialEdges(static_cast<SequentialAnchorData *>(data->secondEdge),
-                                   orientation);
+        interpolateSequentialEdges(static_cast<SequentialAnchorData *>(data->secondEdge));
     else if (data->secondEdge->type == AnchorData::Parallel)
-        interpolateParallelEdges(static_cast<ParallelAnchorData *>(data->secondEdge),
-                                 orientation);
+        interpolateParallelEdges(static_cast<ParallelAnchorData *>(data->secondEdge));
 }
 
-void QGraphicsAnchorLayoutPrivate::interpolateSequentialEdges(
-    SequentialAnchorData *data, Orientation orientation)
+void QGraphicsAnchorLayoutPrivate::interpolateSequentialEdges(SequentialAnchorData *data)
 {
     // This method is supposed to handle any sequential anchor, even out-of-order
     // ones. However, in the current QGAL implementation we should get only the
@@ -2795,7 +2788,7 @@ void QGraphicsAnchorLayoutPrivate::interpolateSequentialEdges(
 
     for (int i = 0; i < data->m_edges.count() - 1; ++i) {
         AnchorData *edge = data->m_edges.at(i);
-        interpolateEdge(prev, edge, orientation);
+        interpolateEdge(prev, edge);
 
         // Use the recently calculated vertex as the base for the next one
         const bool edgeIsForward = (edge->from == prev);
@@ -2805,7 +2798,7 @@ void QGraphicsAnchorLayoutPrivate::interpolateSequentialEdges(
     // Treat the last specially, since we already calculated it's end
     // vertex, so it's only interesting if it's a complex one
     if (data->m_edges.last()->type != AnchorData::Normal)
-        interpolateEdge(prev, data->m_edges.last(), orientation);
+        interpolateEdge(prev, data->m_edges.last());
 }
 
 bool QGraphicsAnchorLayoutPrivate::solveMinMax(const QList<QSimplexConstraint *> &constraints,
diff --git a/src/gui/graphicsview/qgraphicsanchorlayout_p.h b/src/gui/graphicsview/qgraphicsanchorlayout_p.h
index 3a22db0..3ef37f9 100644
--- a/src/gui/graphicsview/qgraphicsanchorlayout_p.h
+++ b/src/gui/graphicsview/qgraphicsanchorlayout_p.h
@@ -527,9 +527,9 @@ public:
 
     void calculateVertexPositions(Orientation orientation);
     void setupEdgesInterpolation(Orientation orientation);
-    void interpolateEdge(AnchorVertex *base, AnchorData *edge, Orientation orientation);
-    void interpolateSequentialEdges(SequentialAnchorData *edge, Orientation orientation);
-    void interpolateParallelEdges(ParallelAnchorData *edge, Orientation orientation);
+    void interpolateEdge(AnchorVertex *base, AnchorData *edge);
+    void interpolateSequentialEdges(SequentialAnchorData *edge);
+    void interpolateParallelEdges(ParallelAnchorData *edge);
 
     // Linear Programming solver methods
     bool solveMinMax(const QList<QSimplexConstraint *> &constraints,
-- 
cgit v0.12


From b897c194904fe201f348bf6129314fbd1dda8c95 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jan-Arve=20S=C3=A6ther?= <jan-arve.saether@nokia.com>
Date: Sat, 7 Nov 2009 21:29:49 +0100
Subject: The sizePolicy property of QGraphicsWidget should be of type
 QSizePolicy of course!

---
 src/gui/graphicsview/qgraphicswidget.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/gui/graphicsview/qgraphicswidget.h b/src/gui/graphicsview/qgraphicswidget.h
index 15dc878..05d3a49 100644
--- a/src/gui/graphicsview/qgraphicswidget.h
+++ b/src/gui/graphicsview/qgraphicswidget.h
@@ -77,7 +77,7 @@ class Q_GUI_EXPORT QGraphicsWidget : public QGraphicsObject, public QGraphicsLay
     Q_PROPERTY(QSizeF minimumSize READ minimumSize WRITE setMinimumSize)
     Q_PROPERTY(QSizeF preferredSize READ preferredSize WRITE setPreferredSize)
     Q_PROPERTY(QSizeF maximumSize READ maximumSize WRITE setMaximumSize)
-    Q_PROPERTY(QSizePolicy::Policy sizePolicy READ sizePolicy WRITE setSizePolicy)
+    Q_PROPERTY(QSizePolicy sizePolicy READ sizePolicy WRITE setSizePolicy)
     Q_PROPERTY(Qt::FocusPolicy focusPolicy READ focusPolicy WRITE setFocusPolicy)
     Q_PROPERTY(Qt::WindowFlags windowFlags READ windowFlags WRITE setWindowFlags)
     Q_PROPERTY(QString windowTitle READ windowTitle WRITE setWindowTitle)
-- 
cgit v0.12


From 0000d60b8bf38c9869b5f3ca43828f97af5488c7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jan-Arve=20S=C3=A6ther?= <jan-arve.saether@nokia.com>
Date: Sun, 8 Nov 2009 00:03:28 +0100
Subject: Use at() instead of operator[] for vectors and lists.

Using operator[] can cause a deep copy if the container is not const.
Some of the containers were const, but I changed all of them to use at() since
its more Qt-style.
---
 src/gui/graphicsview/qgraphicsanchorlayout_p.cpp | 48 ++++++++++++------------
 1 file changed, 24 insertions(+), 24 deletions(-)

diff --git a/src/gui/graphicsview/qgraphicsanchorlayout_p.cpp b/src/gui/graphicsview/qgraphicsanchorlayout_p.cpp
index 42972d2..182594e 100644
--- a/src/gui/graphicsview/qgraphicsanchorlayout_p.cpp
+++ b/src/gui/graphicsview/qgraphicsanchorlayout_p.cpp
@@ -801,7 +801,7 @@ bool QGraphicsAnchorLayoutPrivate::simplifyVertices(Orientation orientation)
         int index = 0;
 
         while (index < adjacents.count()) {
-            AnchorVertex *next = adjacents[index];
+            AnchorVertex *next = adjacents.at(index);
             index++;
 
             AnchorData *data = g.edgeData(v, next);
@@ -821,7 +821,7 @@ bool QGraphicsAnchorLayoutPrivate::simplifyVertices(Orientation orientation)
                 const QList<AnchorVertex *> &nextAdjacents = g.adjacentVertices(next);
 
                 for (int i = 0; i < vAdjacents.count(); ++i) {
-                    AnchorVertex *adjacent = vAdjacents[i];
+                    AnchorVertex *adjacent = vAdjacents.at(i);
                     if (adjacent != next) {
                         AnchorData *ad = g.edgeData(v, adjacent);
                         newV->m_firstAnchors.append(ad);
@@ -829,7 +829,7 @@ bool QGraphicsAnchorLayoutPrivate::simplifyVertices(Orientation orientation)
                 }
 
                 for (int i = 0; i < nextAdjacents.count(); ++i) {
-                    AnchorVertex *adjacent = nextAdjacents[i];
+                    AnchorVertex *adjacent = nextAdjacents.at(i);
                     if (adjacent != v) {
                         AnchorData *ad = g.edgeData(next, adjacent);
                         newV->m_secondAnchors.append(ad);
@@ -1118,14 +1118,14 @@ void QGraphicsAnchorLayoutPrivate::restoreSimplifiedConstraints(ParallelAnchorDa
         return;
 
     for (int i = 0; i < parallel->m_firstConstraints.count(); ++i) {
-        QSimplexConstraint *c = parallel->m_firstConstraints[i];
+        QSimplexConstraint *c = parallel->m_firstConstraints.at(i);
         qreal v = c->variables[parallel];
         c->variables.remove(parallel);
         c->variables.insert(parallel->firstEdge, v);
     }
 
     for (int i = 0; i < parallel->m_secondConstraints.count(); ++i) {
-        QSimplexConstraint *c = parallel->m_secondConstraints[i];
+        QSimplexConstraint *c = parallel->m_secondConstraints.at(i);
         qreal v = c->variables[parallel];
         c->variables.remove(parallel);
         c->variables.insert(parallel->secondEdge, v);
@@ -1175,7 +1175,7 @@ void QGraphicsAnchorLayoutPrivate::restoreVertices(Orientation orientation)
     // We will restore the vertices in the inverse order of creation, this way we ensure that
     // the vertex being restored was not wrapped by another simplification.
     for (int i = toRestore.count() - 1; i >= 0; --i) {
-        AnchorVertexPair *pair = toRestore[i];
+        AnchorVertexPair *pair = toRestore.at(i);
         QList<AnchorVertex *> adjacents = g.adjacentVertices(pair);
 
         // Restore the removed edge, this will also restore both vertices 'first' and 'second' to
@@ -1186,7 +1186,7 @@ void QGraphicsAnchorLayoutPrivate::restoreVertices(Orientation orientation)
 
         // Restore the anchors for the first child vertex
         for (int j = 0; j < pair->m_firstAnchors.count(); ++j) {
-            AnchorData *ad = pair->m_firstAnchors[j];
+            AnchorData *ad = pair->m_firstAnchors.at(j);
             Q_ASSERT(ad->from == pair || ad->to == pair);
 
             replaceVertex_helper(ad, pair, first);
@@ -1195,7 +1195,7 @@ void QGraphicsAnchorLayoutPrivate::restoreVertices(Orientation orientation)
 
         // Restore the anchors for the second child vertex
         for (int j = 0; j < pair->m_secondAnchors.count(); ++j) {
-            AnchorData *ad = pair->m_secondAnchors[j];
+            AnchorData *ad = pair->m_secondAnchors.at(j);
             Q_ASSERT(ad->from == pair || ad->to == pair);
 
             replaceVertex_helper(ad, pair, second);
@@ -1203,7 +1203,7 @@ void QGraphicsAnchorLayoutPrivate::restoreVertices(Orientation orientation)
         }
 
         for (int j = 0; j < adjacents.count(); ++j) {
-            g.takeEdge(pair, adjacents[j]);
+            g.takeEdge(pair, adjacents.at(j));
         }
 
         // The pair simplified a layout vertex, so place back the correct vertex in the variable
@@ -1225,7 +1225,7 @@ void QGraphicsAnchorLayoutPrivate::restoreVertices(Orientation orientation)
     QList<AnchorData *> &parallelAnchors = anchorsFromSimplifiedVertices[orientation];
 
     for (int i = parallelAnchors.count() - 1; i >= 0; --i) {
-        ParallelAnchorData *parallel = static_cast<ParallelAnchorData *>(parallelAnchors[i]);
+        ParallelAnchorData *parallel = static_cast<ParallelAnchorData *>(parallelAnchors.at(i));
         restoreSimplifiedConstraints(parallel);
         delete parallel;
     }
@@ -1432,7 +1432,7 @@ void QGraphicsAnchorLayoutPrivate::removeCenterAnchors(
     AnchorData *oldData = g.edgeData(first, center);
     // Remove center constraint
     for (int i = itemCenterConstraints[orientation].count() - 1; i >= 0; --i) {
-        if (itemCenterConstraints[orientation][i]->variables.contains(oldData)) {
+        if (itemCenterConstraints[orientation].at(i)->variables.contains(oldData)) {
             delete itemCenterConstraints[orientation].takeAt(i);
             break;
         }
@@ -1496,7 +1496,7 @@ void QGraphicsAnchorLayoutPrivate::removeCenterConstraints(QGraphicsLayoutItem *
 
     // Look for our anchor in all item center constraints, then remove it
     for (int i = 0; i < itemCenterConstraints[orientation].size(); ++i) {
-        if (itemCenterConstraints[orientation][i]->variables.contains(internalAnchor)) {
+        if (itemCenterConstraints[orientation].at(i)->variables.contains(internalAnchor)) {
             delete itemCenterConstraints[orientation].takeAt(i);
             break;
         }
@@ -2006,7 +2006,7 @@ QList<AnchorData *> getVariables(QList<QSimplexConstraint *> constraints)
 {
     QSet<AnchorData *> variableSet;
     for (int i = 0; i < constraints.count(); ++i) {
-        const QSimplexConstraint *c = constraints[i];
+        const QSimplexConstraint *c = constraints.at(i);
         foreach (QSimplexVariable *var, c->variables.keys()) {
             variableSet += static_cast<AnchorData *>(var);
         }
@@ -2091,7 +2091,7 @@ void QGraphicsAnchorLayoutPrivate::calculateGraphs(
     // Now run the simplex solver to calculate Minimum, Preferred and Maximum sizes
     // of the "trunk" set of constraints and variables.
     // ### does trunk always exist? empty = trunk is the layout left->center->right
-    QList<QSimplexConstraint *> trunkConstraints = parts[0];
+    QList<QSimplexConstraint *> trunkConstraints = parts.at(0);
     QList<AnchorData *> trunkVariables = getVariables(trunkConstraints);
 
     // For minimum and maximum, use the path between the two layout sides as the
@@ -2110,7 +2110,7 @@ void QGraphicsAnchorLayoutPrivate::calculateGraphs(
         if (!feasible)
             break;
 
-        QList<QSimplexConstraint *> partConstraints = parts[i];
+        QList<QSimplexConstraint *> partConstraints = parts.at(i);
         QList<AnchorData *> partVariables = getVariables(partConstraints);
         Q_ASSERT(!partVariables.isEmpty());
         feasible &= calculateNonTrunk(partConstraints, partVariables);
@@ -2212,7 +2212,7 @@ bool QGraphicsAnchorLayoutPrivate::calculateNonTrunk(const QList<QSimplexConstra
         // Propagate size at preferred to other sizes. Semi-floats always will be
         // in their sizeAtPreferred.
         for (int j = 0; j < variables.count(); ++j) {
-            AnchorData *ad = variables[j];
+            AnchorData *ad = variables.at(j);
             Q_ASSERT(ad);
             ad->sizeAtMinimum = ad->sizeAtPreferred;
             ad->sizeAtMaximum = ad->sizeAtPreferred;
@@ -2325,7 +2325,7 @@ void QGraphicsAnchorLayoutPrivate::constraintsFromPaths(Orientation orientation)
         QList<GraphPath> pathsToVertex = graphPaths[orientation].values(vertex);
         for (int i = 1; i < valueCount; ++i) {
             constraints[orientation] += \
-                pathsToVertex[0].constraint(pathsToVertex[i]);
+                pathsToVertex[0].constraint(pathsToVertex.at(i));
         }
     }
 }
@@ -2377,7 +2377,7 @@ QList<QSimplexConstraint *> QGraphicsAnchorLayoutPrivate::constraintsFromSizeHin
     QList<QSimplexConstraint *> anchorConstraints;
     bool unboundedProblem = true;
     for (int i = 0; i < anchors.size(); ++i) {
-        AnchorData *ad = anchors[i];
+        AnchorData *ad = anchors.at(i);
 
         // Anchors that have their size directly linked to another one don't need constraints
         // For exammple, the second half of an item has exactly the same size as the first half
@@ -2448,10 +2448,10 @@ QGraphicsAnchorLayoutPrivate::getGraphParts(Orientation orientation)
 
     QLinkedList<QSimplexConstraint *> remainingConstraints;
     for (int i = 0; i < constraints[orientation].count(); ++i) {
-        remainingConstraints += constraints[orientation][i];
+        remainingConstraints += constraints[orientation].at(i);
     }
     for (int i = 0; i < itemCenterConstraints[orientation].count(); ++i) {
-        remainingConstraints += itemCenterConstraints[orientation][i];
+        remainingConstraints += itemCenterConstraints[orientation].at(i);
     }
 
     QList<QSimplexConstraint *> trunkConstraints;
@@ -2824,7 +2824,7 @@ bool QGraphicsAnchorLayoutPrivate::solveMinMax(const QList<QSimplexConstraint *>
         // Save sizeAtMinimum results
         QList<AnchorData *> variables = getVariables(constraints);
         for (int i = 0; i < variables.size(); ++i) {
-            AnchorData *ad = static_cast<AnchorData *>(variables[i]);
+            AnchorData *ad = static_cast<AnchorData *>(variables.at(i));
             ad->sizeAtMinimum = ad->result;
             Q_ASSERT(ad->sizeAtMinimum >= ad->minSize ||
                      qAbs(ad->sizeAtMinimum - ad->minSize) < 0.00000001);
@@ -2835,7 +2835,7 @@ bool QGraphicsAnchorLayoutPrivate::solveMinMax(const QList<QSimplexConstraint *>
 
         // Save sizeAtMaximum results
         for (int i = 0; i < variables.size(); ++i) {
-            AnchorData *ad = static_cast<AnchorData *>(variables[i]);
+            AnchorData *ad = static_cast<AnchorData *>(variables.at(i));
             ad->sizeAtMaximum = ad->result;
             // Q_ASSERT(ad->sizeAtMaximum <= ad->maxSize ||
             //          qAbs(ad->sizeAtMaximum - ad->maxSize) < 0.00000001);
@@ -2869,7 +2869,7 @@ bool QGraphicsAnchorLayoutPrivate::solvePreferred(const QList<QSimplexConstraint
     //      A + A_shrinker - A_grower = A_pref
     //
     for (int i = 0; i < variables.size(); ++i) {
-        AnchorData *ad = variables[i];
+        AnchorData *ad = variables.at(i);
         if (ad->skipInPreferred)
             continue;
 
@@ -2900,7 +2900,7 @@ bool QGraphicsAnchorLayoutPrivate::solvePreferred(const QList<QSimplexConstraint
 
         // Save sizeAtPreferred results
         for (int i = 0; i < variables.size(); ++i) {
-            AnchorData *ad = variables[i];
+            AnchorData *ad = variables.at(i);
             ad->sizeAtPreferred = ad->result;
         }
 
-- 
cgit v0.12


From d57d5b955cce23ba453fea79c6dd64d12c1c8145 Mon Sep 17 00:00:00 2001
From: Sarah Smith <sarah.j.smith@nokia.com>
Date: Mon, 9 Nov 2009 11:00:14 +1000
Subject: Changes file update for Sarah Smith 4.6 changes.

Describe 4.6 changes by Sarah Smith

Reviewed-by: TrustMe
---
 dist/changes-4.6.0 | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/dist/changes-4.6.0 b/dist/changes-4.6.0
index 5cd74cd..ecda510 100644
--- a/dist/changes-4.6.0
+++ b/dist/changes-4.6.0
@@ -477,3 +477,6 @@ General changes on Mac OS X:
    * QAnimationGroup::takeAnimationAt() has been renames to takeAnimation()
    * QSequentialAnimationGroup::insertPauseAt() has been renames to insertPause()
 
+- Refactoring in OpenGL examples to improve portability and utilize the
+  Animation framework for animation.  The hellogl and overpainting examples
+  now compile on OpenGL/ES 1.1.  Also common code is factored.
-- 
cgit v0.12


From 4ac97bb145c0a4109670f34be0ec0762e30494b1 Mon Sep 17 00:00:00 2001
From: Rhys Weatherley <rhys.weatherley@nokia.com>
Date: Mon, 9 Nov 2009 11:47:16 +1000
Subject: Change file updates for Rhys Weatherley

---
 dist/changes-4.6.0 | 74 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 74 insertions(+)

diff --git a/dist/changes-4.6.0 b/dist/changes-4.6.0
index ecda510..5321ed1 100644
--- a/dist/changes-4.6.0
+++ b/dist/changes-4.6.0
@@ -25,6 +25,17 @@ information about a particular change.
 
  - [MR#1742] Added new multimedia keys to the Qt::Key enum.
 
+ - QMatrix4x4, QGenericMatrix, QVector2D, QVector3D, QVector4D, QQuaternion
+    * New classes to support 3D applications.
+
+ - QGLShaderProgram, QGLShader
+    * New classes for using shader programs written in the GL Shading Language.
+
+ - Boxes demo ported to use new 3D math and shader program classes.
+
+ - OpenVG graphics system added.
+
+ - Add 800x480 screen mode to qvfb configuration dialog.
 
 Third party components
 ----------------------
@@ -57,6 +68,7 @@ QtCore
     * Added QVariant(float) constructor
     * qvariant_cast<QVariant> and qVariantFromValue<QVariant> are now
       identify functions
+    * Added support for math3d types.
 
  - Qt::escape
     * now escape the double quote (&quot;)
@@ -215,6 +227,45 @@ QtGui
     * [254563] Fixed a crash when setting a focus in a widget tree that
       contains invisible widgets
 
+ - QFontEngineQPF
+    * Make alphaMapForGlyph() generate the correct color table for
+      Indexed8 and Mono glyph images.  Fixed the "all glyphs are white
+      boxes" problem in OpenGL1 paint engine.
+
+ - QPaintDevice
+    * New qt_paint_device_metric() function to replace the friend
+      declarations for window surface classes that need to access metric().
+
+QtOpenGL
+
+ - QGLFormat
+    * Increase unit test coverage and fix some long-standing issues.
+    * Improve performance of code that tests QGLFormat options.
+    * operator==() now tests for equality on all fields.
+
+ - QGLColormap
+    * setEntry() was inserting entries instead of replacing them.
+    * Clarified documentation for isEmpty().
+
+ - QGLFramebufferObject
+    * Add support for the ARB_framebuffer_object, OES_framebuffer_object,
+      and OES_packed_depth_stencil extensions.
+    * Unbind the texture after it is initialized.
+    * Don't destroy the texture target on cleanup if one wasn't created.
+
+ - QGLFramebufferObjectFormat
+    * New class for controlling fbo options.
+
+ - Improvements to context sharing and object cleanup logic.
+
+ - QGLContext
+    * Fix RGB565 mode in bindTexture().
+    * Map mipmaps work on OpenGL/ES 2.0 systems in bindTexture().
+    * Improve performance of QGLContext::currentContext().
+
+ - QGLGradientCache
+   * [249919] Clean up the gradient cache in the right context.
+
 ****************************************************************************
 *                      Platform Specific Changes                           *
 ****************************************************************************
@@ -245,6 +296,29 @@ QtGui
    QMAKE_LIBS_OPENGL_ES2 qmake variables for specifying OpenGL ES
    specific libraries.
 
+ - Compilation fixes for OpenGL/ES 1.0 and OpenGL/ES 1.1 Common Lite.
+
+ - EGL and OpenGL/ES
+    * Protect the use of version-specific EGL symbols with #ifdef's.
+    * Make sure an EGL context is current when resolving GL extensions.
+    * Introduce "lazyDoneCurrent" for optimizing context switching in
+      paint engines.
+    * Separate EGLSurface from QEglContext so that the same context can
+      be used with multiple surfaces.
+    * Move common functions from system-specific files to qgl_egl.cpp.
+    * Fix a memory leak of EGLSurface's in QGLContext.
+    * Fix detection of pbuffers on OpenGL/ES systems.
+    * EGL_SAMPLES was being set to the wrong value for multisampled surfaces.
+
+ - PowerVR
+    * Make the code better at detecting MBX vs SGX header files.
+    * Fix 32-bit screen support - some code was still assuming 16-bit.
+    * Stop GL window surfaces double-flushing their contents.
+    * Remove surface holder, which never worked all that well.
+    * Implement screen rotations.
+
+ - Remove obsolete OpenGL/ES screen drivers: hybrid, ahigl.
+
  - KDE Integration: Improved the integration into KDE desktop (loading of KDE
    palette, usage of KColorDialog and KFileDialog) using the GuiPlatformPlugin
 
-- 
cgit v0.12


From b8b7f98b01d9ad03fecac7a0f593ac5734d7af1d Mon Sep 17 00:00:00 2001
From: Keith Isdale <keith.isdale@nokia.com>
Date: Mon, 9 Nov 2009 14:49:45 +1000
Subject: Mistake in the example for QByteArray::lastIndexOf()

Correct typing error "azy" -> "az"
Ensure that the example code returns indicated values.

Task-number: QTBUG-5571
Reviewed-by: Peter Yard
---
 doc/src/snippets/code/src_corelib_tools_qbytearray.cpp | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/doc/src/snippets/code/src_corelib_tools_qbytearray.cpp b/doc/src/snippets/code/src_corelib_tools_qbytearray.cpp
index e87408a..52fbd1a 100644
--- a/doc/src/snippets/code/src_corelib_tools_qbytearray.cpp
+++ b/doc/src/snippets/code/src_corelib_tools_qbytearray.cpp
@@ -234,7 +234,7 @@ ba.indexOf("X");            // returns -1
 
 //! [23]
 QByteArray x("crazy azimuths");
-QByteArray y("azy");
+QByteArray y("az");
 x.lastIndexOf(y);           // returns 6
 x.lastIndexOf(y, 6);        // returns 6
 x.lastIndexOf(y, 5);        // returns 2
-- 
cgit v0.12


From 8437faaadab1d7bf8861e1d6575f4e1bff04b005 Mon Sep 17 00:00:00 2001
From: Warwick Allison <warwick.allison@nokia.com>
Date: Fri, 6 Nov 2009 15:59:55 +1000
Subject: Crash on bug QTBUG-5493

---
 tests/auto/qpainter/tst_qpainter.cpp | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/tests/auto/qpainter/tst_qpainter.cpp b/tests/auto/qpainter/tst_qpainter.cpp
index 4d2c626..02c73c0 100644
--- a/tests/auto/qpainter/tst_qpainter.cpp
+++ b/tests/auto/qpainter/tst_qpainter.cpp
@@ -101,6 +101,8 @@ private slots:
     void saveAndRestore_data();
     void saveAndRestore();
 
+    void drawBorderPixmap();
+
     void drawLine_data();
     void drawLine();
     void drawLine_clipped();
@@ -973,6 +975,18 @@ void tst_QPainter::initFrom()
     delete widget;
 }
 
+void tst_QPainter::drawBorderPixmap()
+{
+    QPixmap src(79,79);
+    src.fill(Qt::transparent);
+
+    QImage pm(200,200,QImage::Format_RGB32);
+    QPainter p(&pm);
+    p.setTransform(QTransform(-1,0,0,-1,173.5,153.5));
+    qDrawBorderPixmap(&p, QRect(0,0,75,105), QMargins(39,39,39,39), src, QRect(0,0,79,79), QMargins(39,39,39,39),
+                       QTileRules(Qt::StretchTile,Qt::StretchTile), 0);
+}
+
 void tst_QPainter::drawLine_data()
 {
     QTest::addColumn<QLine>("line");
-- 
cgit v0.12


From bbbdf511be4afdb08d2a4d7c365a84adde7ae324 Mon Sep 17 00:00:00 2001
From: Warwick Allison <warwick.allison@nokia.com>
Date: Mon, 9 Nov 2009 18:10:23 +1000
Subject: More inDestructor checks. Declarative tripped these (crashes).

Reviewed-by:Aaron Kennedy
---
 src/gui/graphicsview/qgraphicsitem.cpp | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/src/gui/graphicsview/qgraphicsitem.cpp b/src/gui/graphicsview/qgraphicsitem.cpp
index a236b14..723e496 100644
--- a/src/gui/graphicsview/qgraphicsitem.cpp
+++ b/src/gui/graphicsview/qgraphicsitem.cpp
@@ -3349,6 +3349,9 @@ QPointF QGraphicsItem::pos() const
 */
 void QGraphicsItem::setX(qreal x)
 {
+    if (d_ptr->inDestructor)
+        return;
+
     d_ptr->setPosHelper(QPointF(x, d_ptr->pos.y()));
 }
 
@@ -3370,6 +3373,9 @@ void QGraphicsItem::setX(qreal x)
 */
 void QGraphicsItem::setY(qreal y)
 {
+    if (d_ptr->inDestructor)
+        return;
+
     d_ptr->setPosHelper(QPointF(d_ptr->pos.x(), y));
 }
 
@@ -3435,6 +3441,9 @@ void QGraphicsItem::setPos(const QPointF &pos)
     if (d_ptr->pos == pos)
         return;
 
+    if (d_ptr->inDestructor)
+        return;
+
     // Update and repositition.
     if (!(d_ptr->flags & ItemSendsGeometryChanges)) {
         d_ptr->setPosHelper(pos);
-- 
cgit v0.12


From b0ea2ae80f473d1698f518ed6324a8d328e8c67f Mon Sep 17 00:00:00 2001
From: jasplin <qt-info@nokia.com>
Date: Mon, 9 Nov 2009 09:59:33 +0100
Subject: My changes.

---
 dist/changes-4.6.0 | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/dist/changes-4.6.0 b/dist/changes-4.6.0
index 8d1ae19..d301186 100644
--- a/dist/changes-4.6.0
+++ b/dist/changes-4.6.0
@@ -37,6 +37,8 @@ information about a particular change.
 
  - Add 800x480 screen mode to qvfb configuration dialog.
 
+ - Improved support for input methods in graphics view.
+
 Third party components
 ----------------------
 
@@ -114,6 +116,7 @@ QtGui
     * Introduced activation support.
     * Introduced QGraphicsItem::stackBefore()
     * Cached items are now always invalidated when update() is called.
+    * Added input hints.
 
 - QGraphicsLayout
     * Introduced QGraphicsLayout::addChildLayoutItem()
@@ -149,6 +152,7 @@ QtGui
  - QGraphicsWidget
     * Now inherits from QGraphicsObject instead
     * Interactive resizing of top level windows now respects height-for-width constraints.
+    * Reduced memory footprint.
 
  - QHeaderView
     * [208320] Make sure the sort indicator s taken into account for the size hint
@@ -164,6 +168,9 @@ QtGui
  - QColumnView
     * [246999] Fixed view not updating when the model is changed dynamically
 
+ - QLineEdit
+    * [248948] Clear selection when redoing a delete operation.
+
  - QListView
     * [243335] Fixed the visualRect to return correct values when the widget is not yet show
 
@@ -203,6 +210,7 @@ QtGui
 
  - QSpinBox
     * [259226] Fixed setting a stylesheet on a QSpinBox to change the arrow possition
+    * [255051] Fixed sizeHint update bug.
 
  - QStandardItemModel
     * [255652] Fixed crash while using takeRow with a QSortFilterProxyModel
@@ -236,6 +244,10 @@ QtGui
     * New qt_paint_device_metric() function to replace the friend
       declarations for window surface classes that need to access metric().
 
+ - QPushButton
+    * [255581] Fixed sizeHint recalculation bug.
+
+
 QtOpenGL
 
  - QGLFormat
-- 
cgit v0.12


From 8d6870b2b2a1b58d0b0a11d8863e6981c0b62b1c Mon Sep 17 00:00:00 2001
From: Prasanth Ullattil <prasanth.ullattil@nokia.com>
Date: Mon, 9 Nov 2009 11:14:59 +0100
Subject: Updated change log

---
 dist/changes-4.6.0 | 162 ++++++++++++++++++++++++++++++-----------------------
 1 file changed, 91 insertions(+), 71 deletions(-)

diff --git a/dist/changes-4.6.0 b/dist/changes-4.6.0
index d301186..eadc5c9 100644
--- a/dist/changes-4.6.0
+++ b/dist/changes-4.6.0
@@ -247,6 +247,8 @@ QtGui
  - QPushButton
     * [255581] Fixed sizeHint recalculation bug.
 
+ - QApplication
+   * [QTBUG-739] Removed internal widgets from QApplication::topLevelWidgets().
 
 QtOpenGL
 
@@ -285,66 +287,8 @@ QtOpenGL
  - Added community supported Qt ports for QNX and VxWorks. See platform
    notes in the Qt documentation for details.
 
- - Significant external contribution from Milan Burda for planned removal
-   of (non-unicode) Windows 9x/ME support.
-
- - QRegion is no longer a GDI object by default. This means it is no
-   longer subject to gui-thread only nor does it potentially impact
-   the 10.000 GDI object limit per process. By explicitly calling
-   .handle() a GDI object will be created and memory managed by
-   QRegion. The native handle is for reading out only. Any GDI calls
-   made on the HRGN handle will not affect the QRegion.
-
- - [259221] QFileInfo::symLinkTarget() now supports NTFS symbolic links
-   thanks to Konstantin Ritt (merge request 1217).
-
- - The reading code of QLocalSocket on Windows has been rewritten to improve
-   reading performance.
-
- - On Windows CE the link time code geration has been disabled by default to
-   be consistent with win32-msvc200x.
-
- - The default button size has been reduced in the Windows mobile style.
-
- - [QTBUG-3613] QWizard issues have been fixed on Windows mobile.
-
- - [254673] Restoring minimzed widgets fixed for Windows mobile and
-   Windows CE.
-
- - [255242] Seeking within large files (bigger than 0x80000000 bytes) fixed
-   on Windows CE.
-
- - [257352] When configuring Qt for Windows CE, configure points the user to
-   setcepaths, when its done.
-
- - [259850] Added a makespec template for Windows CE 6.
-   
- - Added QMAKE_LIBS_OPENGL_ES1, QMAKE_LIBS_OPENGL_ES1CL and
-   QMAKE_LIBS_OPENGL_ES2 qmake variables for specifying OpenGL ES
-   specific libraries.
-
- - Compilation fixes for OpenGL/ES 1.0 and OpenGL/ES 1.1 Common Lite.
-
- - EGL and OpenGL/ES
-    * Protect the use of version-specific EGL symbols with #ifdef's.
-    * Make sure an EGL context is current when resolving GL extensions.
-    * Introduce "lazyDoneCurrent" for optimizing context switching in
-      paint engines.
-    * Separate EGLSurface from QEglContext so that the same context can
-      be used with multiple surfaces.
-    * Move common functions from system-specific files to qgl_egl.cpp.
-    * Fix a memory leak of EGLSurface's in QGLContext.
-    * Fix detection of pbuffers on OpenGL/ES systems.
-    * EGL_SAMPLES was being set to the wrong value for multisampled surfaces.
-
- - PowerVR
-    * Make the code better at detecting MBX vs SGX header files.
-    * Fix 32-bit screen support - some code was still assuming 16-bit.
-    * Stop GL window surfaces double-flushing their contents.
-    * Remove surface holder, which never worked all that well.
-    * Implement screen rotations.
-
- - Remove obsolete OpenGL/ES screen drivers: hybrid, ahigl.
+Qt for Linux/X11
+----------------
 
  - KDE Integration: Improved the integration into KDE desktop (loading of KDE
    palette, usage of KColorDialog and KFileDialog) using the GuiPlatformPlugin
@@ -352,9 +296,6 @@ QtOpenGL
  - Fixed pasting the clipboard content to non-Qt application on X11 when the
    requested format is image/ppm. Patch by Ritt.K
 
- - On Windows when a file cannot be accessed (stat()ed), we are now restoring
-   the error mode to the original value.
-
  - On X11 Qt now supports the _NET_WM_SYNC protocol.
 
  - On X11 Qt now supports the SAVE_TARGET protocol that allows to keep
@@ -363,14 +304,55 @@ QtOpenGL
  - [QTBUG-4652] On X11 clipboard content can be properly retrieved even when an
    application asks the unsupported target. This fixes copying and pasting data
    when using Synergy.
+ - [MR#797] Fixed a crash when using QX11EmbedContainer/Widget on x86_64.
+ - [MR#1111] Emit workAreaResized when _NET_WORKAREA is changed on X11.
 
- - [QTBUG-4418] Fixed maximizing and restoring a window on Mac.
+Qt for Windows
+--------------
 
- - [MR#797] Fixed a crash when using QX11EmbedContainer/Widget on x86_64.
+ - Significant external contribution from Milan Burda for planned removal
+   of (non-unicode) Windows 9x/ME support.
 
- - [MR#1111] Emit workAreaResized when _NET_WORKAREA is changed on X11.
+ - QRegion is no longer a GDI object by default. This means it is no
+   longer subject to gui-thread only nor does it potentially impact
+   the 10.000 GDI object limit per process. By explicitly calling
+   .handle() a GDI object will be created and memory managed by
+   QRegion. The native handle is for reading out only. Any GDI calls
+   made on the HRGN handle will not affect the QRegion.
+
+ - The reading code of QLocalSocket on Windows has been rewritten to improve
+   reading performance.
+
+ - On Windows when a file cannot be accessed (stat()ed), we are now restoring
+   the error mode to the original value.
+
+ - [259221] QFileInfo::symLinkTarget() now supports NTFS symbolic links
+   thanks to Konstantin Ritt (merge request 1217).
+ - [251554] Fixed openUrl("mailto:") with Thunderbird on Windows.
+ - [254501] QDestopServices now supports cyrillic file names.
+ - Fixed an issue which prevents moving fixed size windows using titlebar.
+ - [258087] Fixed an issue on Vista which returns incorrect file paths when using
+   QFileDialog::getOpenFileNames()
+ - [253763] Fixed a focus issue when using out-of-process ActiveQt controls.
+ - [255912] Mouse move events will not be delivered to a blocked widget.
+ - [225588] Enabled IME reconversion support.
+
+ - Phonon on Windows
+   * Now much more reliable when reading a file through a QIODevice.
+   * If Video Mixing Renderer 9 is not available, falls back to software
+     rendering.
+   * Fixed a flicker issue when switching source with a transition time of 0
+
+Qt for Mac OS X
+---------------
 
  - Add support for GetURL events on Mac OS X
+ - [123740] Fixed an issue with dead keys on Mac (cocoa) on French keyboard layout.
+ - [252088] Drag Leave events will be delivered correctly on Cocoa.
+ - [257661] Cocoa now uses the correct line ending for clipboard plain text.
+ - [258438] Enabled Emacs style keyboard shortcuts.
+ - [258173] Fixed an issue which caused "whatsthis" pointer to flicked on Cocoa.
+ - [QTBUG-4418] Fixed maximizing and restoring a window on Mac.
 
 General changes on Mac OS X:
  - Mac OS X version support: Support for 10.3(Panther) has been dropped, support for
@@ -387,11 +369,49 @@ General changes on Mac OS X:
     - Building for ppc64 is no longer supported by the gcc tool chain.
     - Building for ppc is still supported.
 
- - Phonon on Windows
-   * Now much more reliable when reading a file through a QIODevice.
-   * If Video Mixing Renderer 9 is not available, falls back to software
-     rendering.
-   * Fixed a flicker issue when switching source with a transition time of 0
+Qt for Embedded Linux
+---------------------
+
+- Added QMAKE_LIBS_OPENGL_ES1, QMAKE_LIBS_OPENGL_ES1CL and
+  QMAKE_LIBS_OPENGL_ES2 qmake variables for specifying OpenGL ES
+  specific libraries.
+
+- Compilation fixes for OpenGL/ES 1.0 and OpenGL/ES 1.1 Common Lite.
+
+- EGL and OpenGL/ES
+   * Protect the use of version-specific EGL symbols with #ifdef's.
+   * Make sure an EGL context is current when resolving GL extensions.
+   * Introduce "lazyDoneCurrent" for optimizing context switching in
+     paint engines.
+   * Separate EGLSurface from QEglContext so that the same context can
+     be used with multiple surfaces.
+   * Move common functions from system-specific files to qgl_egl.cpp.
+   * Fix a memory leak of EGLSurface's in QGLContext.
+   * Fix detection of pbuffers on OpenGL/ES systems.
+   * EGL_SAMPLES was being set to the wrong value for multisampled surfaces.
+
+- PowerVR
+   * Make the code better at detecting MBX vs SGX header files.
+   * Fix 32-bit screen support - some code was still assuming 16-bit.
+   * Stop GL window surfaces double-flushing their contents.
+   * Remove surface holder, which never worked all that well.
+   * Implement screen rotations.
+
+- Remove obsolete OpenGL/ES screen drivers: hybrid, ahigl.
+
+Qt for Windows CE
+-----------------
+ - On Windows CE the link time code generation has been disabled by default to
+   be consistent with win32-msvc200x.
+ - The default button size has been reduced in the Windows mobile style.
+ - [QTBUG-3613] QWizard issues have been fixed on Windows mobile.
+ - [254673] Restoring minimized widgets fixed for Windows mobile and
+   Windows CE.
+ - [255242] Seeking within large files (bigger than 0x80000000 bytes) fixed
+   on Windows CE.
+ - [257352] When configuring Qt for Windows CE, configure points the user to
+   setcepaths, when its done.
+ - [259850] Added a makespec template for Windows CE 6.
 
 ****************************************************************************
 *                          Tools                                           *
-- 
cgit v0.12


From fa7f6e542b8381dd3af525507cd6e0a3ee43b813 Mon Sep 17 00:00:00 2001
From: Joerg Bornemann <joerg.bornemann@nokia.com>
Date: Mon, 9 Nov 2009 11:20:06 +0100
Subject: Doc: typo fixed

Reviewed-by: TrustMe
---
 src/gui/kernel/qaction.cpp | 2 +-
 src/gui/kernel/qwidget.cpp | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/gui/kernel/qaction.cpp b/src/gui/kernel/qaction.cpp
index 5f5650f..6f3cbaf 100644
--- a/src/gui/kernel/qaction.cpp
+++ b/src/gui/kernel/qaction.cpp
@@ -286,7 +286,7 @@ void QActionPrivate::setShortcutEnabled(bool enable, QShortcutMap &map)
 
     Actions with a softkey role defined are only visible in the softkey bar when the widget containing
     the action has focus. If no widget currently has focus, the softkey framework will traverse up the
-    widget parent heirarchy looking for a widget containing softkey actions.
+    widget parent hierarchy looking for a widget containing softkey actions.
  */
 
 /*!
diff --git a/src/gui/kernel/qwidget.cpp b/src/gui/kernel/qwidget.cpp
index 271b939..f856b13 100644
--- a/src/gui/kernel/qwidget.cpp
+++ b/src/gui/kernel/qwidget.cpp
@@ -900,7 +900,7 @@ void QWidget::setAutoFillBackground(bool enabled)
     passing a \c QAction with a softkey role set on it. When the widget
     containing the softkey actions has focus, its softkeys should appear in
     the user interface. Softkeys are discovered by traversing the widget
-    heirarchy so it is possible to define a single set of softkeys that are
+    hierarchy so it is possible to define a single set of softkeys that are
     present at all times by calling addAction() for a given top level widget.
 
     On some platforms, this concept overlaps with \c QMenuBar such that if no
-- 
cgit v0.12

