+++ /dev/null
-commit 705880f0045ac39140f980d69aec68869213e379
-Author: Alexis Menard <alexis.menard@nokia.com>
-Date: Thu Nov 26 13:47:34 2009 +0100
-
- Fix a crash in KDE/Plasma with QGraphicsView. TopLevel list of items
- was corrupted.
-
- This nasty bug was triggered when the index sort the top level list of
- items. We forgot to set the flag topLevelSequentialOrdering to false
- so when an item was removed from the top level list it was using the
- sibling index which can be not valid anymore since the list is not
- sorted by sequential order. So it let some dangling pointers in the
- list which make processDirtyItemRecursive crash the next paint event.
-
- Reviewed-by:bnilsen
- Reviewed-by:andreas
-
-diff --git a/src/gui/graphicsview/qgraphicsscene_p.h b/src/gui/graphicsview/qgraphicsscene_p.h
-index a1d0496..69e4d5b 100644
---- a/src/gui/graphicsview/qgraphicsscene_p.h
-+++ b/src/gui/graphicsview/qgraphicsscene_p.h
-@@ -78,7 +78,7 @@ class QGraphicsSceneIndex;
- class QGraphicsView;
- class QGraphicsWidget;
-
--class QGraphicsScenePrivate : public QObjectPrivate
-+class Q_AUTOTEST_EXPORT QGraphicsScenePrivate : public QObjectPrivate
- {
- Q_DECLARE_PUBLIC(QGraphicsScene)
- public:
-@@ -265,6 +265,7 @@ public:
- {
- if (needSortTopLevelItems) {
- qSort(topLevelItems.begin(), topLevelItems.end(), qt_notclosestLeaf);
-+ topLevelSequentialOrdering = false;
- needSortTopLevelItems = false;
- }
- }
-
-commit f708b248aec810a1dcad1f13e1c16390244c9834
-Author: Trond Kjernåsen <trond@trolltech.com>
-Date: Fri Dec 18 17:48:10 2009 +0100
-
- Fixed QPixmap::load() to not modify referenced copies.
-
- This is a bad regression from 4.5. QPixmap::load() would modify all
- references to the same QPixmap object.
-
- Task-number: QTBUG-6840
- Reviewed-by: Kim
-
-diff --git a/src/gui/image/qpixmap.cpp b/src/gui/image/qpixmap.cpp
-index 617cfe5..7e4597e 100644
---- a/src/gui/image/qpixmap.cpp
-+++ b/src/gui/image/qpixmap.cpp
-@@ -831,14 +831,13 @@ bool QPixmap::load(const QString &fileName, const char *format, Qt::ImageConvers
- if (QPixmapCache::find(key, *this))
- return true;
-
-- if (!data)
-- data = QPixmapData::create(0, 0, QPixmapData::PixmapType);
--
-- if (data->fromFile(fileName, format, flags)) {
-+ QPixmapData *tmp = QPixmapData::create(0, 0, QPixmapData::PixmapType);
-+ if (tmp->fromFile(fileName, format, flags)) {
-+ data = tmp;
- QPixmapCache::insert(key, *this);
- return true;
- }
--
-+ delete tmp;
- return false;
- }
-
-commit 0fa878c4d2dfc25d4641a6654a9b482230559c3a
-Author: Kim Motoyoshi Kalland <kim.kalland@nokia.com>
-Date: Mon Nov 30 13:13:11 2009 +0100
-
- Fixed square root of negative number in drawTextItem().
-
- Fixed potential bug where you could end up taking the square root of a
- negative number in drawTextItem() in the raster and OpenGL paint
- engines.
-
- Task-number: QTBUG-6327
- Reviewed-by: Trond
-
-diff --git a/src/gui/painting/qpaintengine_raster.cpp b/src/gui/painting/qpaintengine_raster.cpp
-index 3f33319..4a72434 100644
---- a/src/gui/painting/qpaintengine_raster.cpp
-+++ b/src/gui/painting/qpaintengine_raster.cpp
-@@ -3240,7 +3240,8 @@ void QRasterPaintEngine::drawTextItem(const QPointF &p, const QTextItem &textIte
- drawCached = false;
-
- // don't try to cache huge fonts
-- if (ti.fontEngine->fontDef.pixelSize * qSqrt(s->matrix.determinant()) >= 64)
-+ const qreal pixelSize = ti.fontEngine->fontDef.pixelSize;
-+ if (pixelSize * pixelSize * qAbs(s->matrix.determinant()) >= 64 * 64)
- drawCached = false;
-
- // ### Remove the TestFontEngine and Box engine crap, in these
-diff --git a/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp b/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp
-index 07432c6..15702ba 100644
---- a/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp
-+++ b/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp
-@@ -1452,7 +1452,8 @@ void QGL2PaintEngineEx::drawTextItem(const QPointF &p, const QTextItem &textItem
- drawCached = false;
-
- // don't try to cache huge fonts
-- if (ti.fontEngine->fontDef.pixelSize * qSqrt(s->matrix.determinant()) >= 64)
-+ const qreal pixelSize = ti.fontEngine->fontDef.pixelSize;
-+ if (pixelSize * pixelSize * qAbs(s->matrix.determinant()) >= 64 * 64)
- drawCached = false;
-
- QFontEngineGlyphCache::Type glyphType = ti.fontEngine->glyphFormat >= 0
-commit dbaea6fa5a90742d89691685baa44a1a34598f21
-Author: Trond Kjernåsen <trond@trolltech.com>
-Date: Mon Nov 16 10:42:35 2009 +0100
-
- Fixed a crash in QPixmap::fromImage() when passing in a null image.
-
- Task-number: QTBUG-5840
- Reviewed-by: Kim
-
-diff --git a/src/gui/image/qpixmap_x11.cpp b/src/gui/image/qpixmap_x11.cpp
-index 3f297df..7008fbd 100644
---- a/src/gui/image/qpixmap_x11.cpp
-+++ b/src/gui/image/qpixmap_x11.cpp
-@@ -416,6 +416,11 @@ void QX11PixmapData::fromImage(const QImage &img,
- d = img.depth();
- is_null = (w <= 0 || h <= 0);
-
-+ if (is_null) {
-+ w = h = 0;
-+ return;
-+ }
-+
- if (defaultScreen >= 0 && defaultScreen != xinfo.screen()) {
- QX11InfoData* xd = xinfo.getX11Data(true);
- xd->screen = defaultScreen;
-commit 05eacd9ad40f8adb5aaa12a8b90113a73b43f642
-Author: Jouni Hiltunen <jouni.hiltunen@digia.com>
-Date: Tue Nov 3 13:50:49 2009 +0200
-
- Long-press shortcuts for symbols on QWERTY keyboard don't work
-
- Qt key event was not handled properly in the case of long key press.
- With long key press, QCoeFepInputContext::commitCurrentString gets
- called 3 times("q", "", "1"). (Normal key press is causing one call).
-
- This is how aknfep works, so commitCurrentString was modified
- to replace first character if long key press event detected.
- E.g. "q" is replaced with "1".
-
- qlinecontrol modified to keep cursor position correct.
-
- Signed-off-by: axis <qt-info@nokia.com>
-
-diff --git a/src/gui/inputmethod/qcoefepinputcontext_p.h b/src/gui/inputmethod/qcoefepinputcontext_p.h
-index 452aa75..28c1c67 100644
---- a/src/gui/inputmethod/qcoefepinputcontext_p.h
-+++ b/src/gui/inputmethod/qcoefepinputcontext_p.h
-@@ -146,6 +146,8 @@ private:
- int m_inlinePosition;
- MFepInlineTextFormatRetriever *m_formatRetriever;
- MFepPointerEventHandlerDuringInlineEdit *m_pointerHandler;
-+ int m_longPress;
-+ int m_cursorPos;
- };
-
- QT_END_NAMESPACE
-diff --git a/src/gui/inputmethod/qcoefepinputcontext_s60.cpp b/src/gui/inputmethod/qcoefepinputcontext_s60.cpp
-index ea5e29b..ceace4a 100644
---- a/src/gui/inputmethod/qcoefepinputcontext_s60.cpp
-+++ b/src/gui/inputmethod/qcoefepinputcontext_s60.cpp
-@@ -71,7 +71,9 @@ QCoeFepInputContext::QCoeFepInputContext(QObject *parent)
- m_cursorVisibility(1),
- m_inlinePosition(0),
- m_formatRetriever(0),
-- m_pointerHandler(0)
-+ m_pointerHandler(0),
-+ m_longPress(0),
-+ m_cursorPos(0)
- {
- m_fepState->SetObjectProvider(this);
- m_fepState->SetFlags(EAknEditorFlagDefault);
-@@ -488,6 +490,8 @@ void QCoeFepInputContext::StartFepInlineEditL(const TDesC& aInitialInlineText,
-
- m_isEditing = true;
-
-+ m_cursorPos = w->inputMethodQuery(Qt::ImCursorPosition).toInt();
-+
- QList<QInputMethodEvent::Attribute> attributes;
-
- m_cursorVisibility = aCursorVisibility ? 1 : 0;
-@@ -691,15 +695,22 @@ void QCoeFepInputContext::DoCommitFepInlineEditL()
- void QCoeFepInputContext::commitCurrentString(bool triggeredBySymbian)
- {
- if (m_preeditString.size() == 0) {
-+ QWidget *w = focusWidget();
-+ if(triggeredBySymbian && w){
-+ // We must replace the last character only if the input box has already accepted one
-+ if (w->inputMethodQuery(Qt::ImCursorPosition).toInt() != m_cursorPos)
-+ m_longPress = 1;
-+ }
- return;
- }
-
- QList<QInputMethodEvent::Attribute> attributes;
- QInputMethodEvent event(QLatin1String(""), attributes);
-- event.setCommitString(m_preeditString, 0, 0);//m_preeditString.size());
-+ event.setCommitString(m_preeditString, 0-m_longPress, m_longPress);
- m_preeditString.clear();
- sendEvent(event);
-
-+ m_longPress = 0;
- m_isEditing = false;
-
- if (!triggeredBySymbian) {
-diff --git a/src/gui/widgets/qlinecontrol.cpp b/src/gui/widgets/qlinecontrol.cpp
-index 2914164..300a2ea 100644
---- a/src/gui/widgets/qlinecontrol.cpp
-+++ b/src/gui/widgets/qlinecontrol.cpp
-@@ -414,7 +414,7 @@ void QLineControl::processInputMethodEvent(QInputMethodEvent *event)
-
-
- int c = m_cursor; // cursor position after insertion of commit string
-- if (event->replacementStart() <= 0)
-+ if (event->replacementStart() == 0)
- c += event->commitString().length() + qMin(-event->replacementStart(), event->replacementLength());
-
- m_cursor += event->replacementStart();
diff --git a/README.kde-qt b/README.kde-qt
new file mode 100644
-index 0000000..db3feb6
+index 0000000..cbbd970
--- /dev/null
+++ b/README.kde-qt
-@@ -0,0 +1,201 @@
+@@ -0,0 +1,269 @@
+This is a patched version of Qt. It may include changes made by KDE
+and Qt developers that have either not been accepted for inclusion
+into Qt, or have been accepted for a later version of Qt than this
+official Qt release.
+
+The exception to the above rule is that if the fix has been accepted
-+by Qt Software (and so will appear in the very next release of Qt),
-+then it should be simply cherry-picked from the Qt development
++by the Qt developers (and so will appear in the very next release of
++Qt), then it should be simply cherry-picked from the Qt development
+branch. Note that you shouldn't do this for changes that have been
-+accepted into a release which is not the very next.
-+In this case, you should use the following command:
++accepted into a release which is not the very next. In this case, you
++should use the following command:
+
+ git cherry-pick -x SHA1_OF_THE_FIX
+where SHA1_OF_THE_FIX is the SHA-1 of the commit that you want to
+introduce. Then push the change to the server.
+
-+Before creating a patch, it is recommended to contact Qt Software
-+support via qt-bugs@trolltech.com and explain the situation. There may
-+be a solution for the problem already or a new direction that should
-+be accounted for.
++In all other cases, before creating a patch, it is recommended to
++contact the Qt developers via a new task in
++http://bugreports.qt.nokia.com and explain the situation. There may be
++a solution for the problem already or a new direction that should be
++accounted for.
+
+To create a patch, do the following:
+ a) look at the listing of branches in
+ git tag
+
+ c) make your changes to the Qt source code and verify that it
-+ compiles, links and works (please run the respective unit tests).
++ compiles, links and works (please run the respective unit tests from
++ tests/auto in the source tree).
+
+ c) commit your changes to Git, using the "git commit" command. Please
+ see http://qt.gitorious.org/qt/pages/GitIntroductionWithQt and
+ http://qt.gitorious.org/qt/pages/QtCodingStyle for information on
+ how to create commits
-+ Note that you can create multiple commits.
+
-+ e) merge the change to the main branch, for example, 4.5.1-patched:
++ Note that you are allowed to create as many commits as necessary to
++ accomplish a working change that can be easily reviewed.
++
++ e) merge the change to the patch branch, for example, 4.5.1-patched:
+ git checkout 4.5.1-patched
+ git merge patches/0180-window-role
+
-+ f) push the changes you made to your branch and to the main server:
-+ git push git@gitorious.org:qt/kde-qt.git 4.5.1-patched patches/0180-window-role
-+ (Don't forget to list both branch names)
++ f) merge the patch branch to master:
++ git checkout master
++ git merge 4.5.1-patched
++
++ g) push the changes you made to your branch and to the main server:
++ git push git@gitorious.org:qt/kde-qt.git master 4.5.1-patched patches/0180-window-role
++ (Don't forget to list all 3 branch names)
+
+Don't forget to submit your patch to using the Qt Contribution Model,
+along with the long description of the issue found. See
+server.
+
+9. Troubleshooting: Re-configuring and re-compiling
-+==================================================
++===================================================
+
+For those updating the source in a directory where Qt has already
+been compiled, you may need to run the following commands from the
+
+ rm -rf include
+ bin/syncqt
++
++10. Maintenance: updating kde-qt to a newer Qt version
++======================================================
++
++When a new version of Qt is released, do the following to update the
++repository (assuming Qt 4.6.1 is the release you're updating to):
++
++ a) rebase each of the individual patches against this new version.
++ for branch in patches/*; do
++ git checkout -b $branch origin/$branch
++ git rebase v4.6.1
++ resolve conflicts
++ done # Note: pseudo-shell, don't try to run this
++
++ If a given branch is no longer valid (it's been applied to this Qt
++ version), then delete it on the server:
++ git push origin :$branch
++
++ b) create a new "patched" branch locally, starting on the release tag:
++ git checkout -b 4.6.1-patched v4.6.1
++
++ c) merge the patch branches and the README branch, one by one. There
++ should be no conflicts at this stage; if there are, it indicates
++ one patch conflicts with another.
++ git merge patches/0997-patch1
++ git merge patches/0998-patch2
++ git merge patches/0999-patch3
++ # etc.
++ git merge README
++
++ d) overwrite the master branch's contents with the new branch. If the
++ Git merge strategy "theirs" exist (it doesn't as of Git 1.6), use
++ it:
++ git checkout master
++ git merge -s theirs 4.6.1-patched
++
++ If it doesn't exist, do the equivalent by inverting the point of
++ view:
++ git checkout -b tmp 4.6.1-patched
++ git merge -s ours master
++ git checkout master
++ git merge tmp
++ git branch -d tmp
++
++ Also possible using Git plumbing:
++ git checkout master
++ git merge -s ours --no-commit 4.6.1-patched
++ rm .git/index
++ git read-tree 4.6.1-patched
++ git commit
++
++ e) push everything to kde-qt.git, including the new Qt. Note that
++ the individiual patch branches will require force, because they
++ have been rebased (that is, the new branch tip is no longer a
++ direct descendant of the previous tip).
++
++ # Push the individual patch branches with force
++ git push -f origin patches/0997-patch1 patches/0998-patch2 patches/0999-patch3 etc
++ # Push the tag, the new patched branch and master
++ git push v4.6.1 4.6.1-patched master
diff --git a/bin/syncqt b/bin/syncqt
-index a14a82d..ac140eb 100755
+index 620256e..e2998fd 100755
--- a/bin/syncqt
+++ b/bin/syncqt
@@ -366,9 +366,13 @@ sub fixPaths {
for(my $i = 0; $i < $count; $i++) {
$dots .= "../";
diff --git a/configure b/configure
-index 146ba82..7be8f7c 100755
+index 033f415..09cd81f 100755
--- a/configure
+++ b/configure
-@@ -1012,6 +1012,11 @@ while [ "$#" -gt 0 ]; do
+@@ -1029,6 +1029,11 @@ while [ "$#" -gt 0 ]; do
VAL=`echo $1 | sed 's,-D,,'`
fi
;;
-I?*|-I)
VAR="add_ipath"
if [ "$1" = "-I" ]; then
-@@ -2020,6 +2025,9 @@ while [ "$#" -gt 0 ]; do
+@@ -2047,6 +2052,9 @@ while [ "$#" -gt 0 ]; do
add_ipath)
I_FLAGS="$I_FLAGS -I\"${VAL}\""
;;
L_FLAGS="$L_FLAGS -L\"${VAL}\""
;;
diff --git a/projects.pro b/projects.pro
-index aa1eb71..8ae64c2 100644
+index d405a5b..7ad3b58 100644
--- a/projects.pro
+++ b/projects.pro
-@@ -149,6 +149,9 @@ unix {
+@@ -154,6 +154,9 @@ unix {
DEFAULT_QMAKESPEC ~= s,^.*mkspecs/,,g
mkspecs.commands += $(DEL_FILE) $(INSTALL_ROOT)$$mkspecs.path/default; $(SYMLINK) $$DEFAULT_QMAKESPEC $(INSTALL_ROOT)$$mkspecs.path/default
}
QString version = qmake_version();
if(slash != -1) {
diff --git a/src/corelib/kernel/qobject.cpp b/src/corelib/kernel/qobject.cpp
-index 9614e7a..58493a5 100644
+index fc6ac33..dae38b0 100644
--- a/src/corelib/kernel/qobject.cpp
+++ b/src/corelib/kernel/qobject.cpp
-@@ -1136,8 +1136,16 @@ void QObject::setObjectName(const QString &name)
+@@ -1124,8 +1124,16 @@ void QObject::setObjectName(const QString &name)
{
Q_D(QObject);
d->objectName = name;
#ifdef QT3_SUPPORT
/*! \internal
diff --git a/src/corelib/kernel/qobject_p.h b/src/corelib/kernel/qobject_p.h
-index e75f24e..1294fa4 100644
+index 7e7cbf8..5a312d1 100644
--- a/src/corelib/kernel/qobject_p.h
+++ b/src/corelib/kernel/qobject_p.h
@@ -83,7 +83,9 @@ void Q_CORE_EXPORT qt_register_signal_spy_callbacks(const QSignalSpyCallbackSet
static Sender *setCurrentSender(QObject *receiver,
Sender *sender);
-diff --git a/src/gui/kernel/qkeysequence.cpp b/src/gui/kernel/qkeysequence.cpp
-index 528d512..edbe75b 100644
---- a/src/gui/kernel/qkeysequence.cpp
-+++ b/src/gui/kernel/qkeysequence.cpp
-@@ -1139,10 +1139,10 @@ int QKeySequencePrivate::decodeString(const QString &str, QKeySequence::Sequence
-
- QList<QModifKeyName> modifs;
- if (nativeText) {
-- modifs << QModifKeyName(Qt::CTRL, QShortcut::tr("Ctrl").toLower().append(QLatin1Char('+')))
-- << QModifKeyName(Qt::SHIFT, QShortcut::tr("Shift").toLower().append(QLatin1Char('+')))
-- << QModifKeyName(Qt::ALT, QShortcut::tr("Alt").toLower().append(QLatin1Char('+')))
-- << QModifKeyName(Qt::META, QShortcut::tr("Meta").toLower().append(QLatin1Char('+')));
-+ modifs << QModifKeyName(Qt::CTRL, QShortcut::tr("Ctrl", "Ctrl key, used for shortcuts").toLower().append(QLatin1Char('+')))
-+ << QModifKeyName(Qt::SHIFT, QShortcut::tr("Shift", "Shift key, used for shortcuts").toLower().append(QLatin1Char('+')))
-+ << QModifKeyName(Qt::ALT, QShortcut::tr("Alt", "Alt key, used for shortcuts").toLower().append(QLatin1Char('+')))
-+ << QModifKeyName(Qt::META, QShortcut::tr("Meta", "Meta key, used for shortcuts").toLower().append(QLatin1Char('+')));
- }
- modifs += *gmodifs; // Test non-translated ones last
-
-@@ -1232,7 +1232,7 @@ QString QKeySequence::encodeString(int key)
- static inline void addKey(QString &str, const QString &theKey, QKeySequence::SequenceFormat format)
- {
- if (!str.isEmpty())
-- str += (format == QKeySequence::NativeText) ? QShortcut::tr("+")
-+ str += (format == QKeySequence::NativeText) ? QShortcut::tr("+", "Symbol used to concatenate keys in shortcuts")
- : QString::fromLatin1("+");
- str += theKey;
- }
-@@ -1272,13 +1272,13 @@ QString QKeySequencePrivate::encodeString(int key, QKeySequence::SequenceFormat
- {
- // On other systems the order is Meta, Control, Alt, Shift
- if ((key & Qt::META) == Qt::META)
-- s = nativeText ? QShortcut::tr("Meta") : QString::fromLatin1("Meta");
-+ s = nativeText ? QShortcut::tr("Meta", "Meta key, used for shortcuts") : QString::fromLatin1("Meta");
- if ((key & Qt::CTRL) == Qt::CTRL)
-- addKey(s, nativeText ? QShortcut::tr("Ctrl") : QString::fromLatin1("Ctrl"), format);
-+ addKey(s, nativeText ? QShortcut::tr("Ctrl", "Ctrl key, used for shortcuts") : QString::fromLatin1("Ctrl"), format);
- if ((key & Qt::ALT) == Qt::ALT)
-- addKey(s, nativeText ? QShortcut::tr("Alt") : QString::fromLatin1("Alt"), format);
-+ addKey(s, nativeText ? QShortcut::tr("Alt", "Alt key, used for shortcuts") : QString::fromLatin1("Alt"), format);
- if ((key & Qt::SHIFT) == Qt::SHIFT)
-- addKey(s, nativeText ? QShortcut::tr("Shift") : QString::fromLatin1("Shift"), format);
-+ addKey(s, nativeText ? QShortcut::tr("Shift", "Shift key, used for shortcuts") : QString::fromLatin1("Shift"), format);
- }
-
-
-@@ -1293,7 +1293,7 @@ QString QKeySequencePrivate::encodeString(int key, QKeySequence::SequenceFormat
- p += QChar((key-0x10000)%400+0xdc00);
- }
- } else if (key >= Qt::Key_F1 && key <= Qt::Key_F35) {
-- p = nativeText ? QShortcut::tr("F%1").arg(key - Qt::Key_F1 + 1)
-+ p = nativeText ? QShortcut::tr("F%1", "Fx key, used for shortcuts").arg(key - Qt::Key_F1 + 1)
- : QString::fromLatin1("F%1").arg(key - Qt::Key_F1 + 1);
- } else if (key) {
- int i=0;
diff --git a/src/gui/kernel/qwidget_p.h b/src/gui/kernel/qwidget_p.h
-index 7832393..18c331a 100644
+index 98d3001..d3a386b 100644
--- a/src/gui/kernel/qwidget_p.h
+++ b/src/gui/kernel/qwidget_p.h
-@@ -661,6 +661,7 @@ public:
+@@ -691,6 +691,7 @@ public:
static QWidget *keyboardGrabber;
void setWindowRole();
void setNetWmWindowTypes();
void x11UpdateIsOpaque();
diff --git a/src/gui/kernel/qwidget_x11.cpp b/src/gui/kernel/qwidget_x11.cpp
-index 3135ece..5c997a4 100644
+index 87c9885..73600fc 100644
--- a/src/gui/kernel/qwidget_x11.cpp
+++ b/src/gui/kernel/qwidget_x11.cpp
@@ -763,6 +763,11 @@ void QWidgetPrivate::create_sys(WId window, bool initializeWindow, bool destroyO
QPaintEngine *QWidget::paintEngine() const
{
diff --git a/src/gui/widgets/qtabbar.cpp b/src/gui/widgets/qtabbar.cpp
-index 30f6144..36dfe6d 100644
+index 9f03ff6..a9e4974 100644
--- a/src/gui/widgets/qtabbar.cpp
+++ b/src/gui/widgets/qtabbar.cpp
@@ -678,8 +678,8 @@ void QTabBarPrivate::refresh()