]> git.pld-linux.org Git - packages/qt4.git/commitdiff
rel 4; replace qt-copy patches with kde-qt branch auto/th/qt4-4_5_3-4 auto/ti/qt4-4_5_3-4
authorArkadiusz Miśkiewicz <arekm@maven.pl>
Mon, 12 Oct 2009 07:48:22 +0000 (07:48 +0000)
committercvs2git <feedback@pld-linux.org>
Sun, 24 Jun 2012 12:13:13 +0000 (12:13 +0000)
Changed files:
    0118-qtcopy-define.diff -> 1.2
    0180-window-role.diff -> 1.2
    0195-compositing-properties.diff -> 1.2
    0209-prevent-qt-mixing.diff -> 1.2
    0216-allow-isystem-for-headers.diff -> 1.2
    0225-invalidate-tabbar-geometry-on-refresh.patch -> 1.2
    0253-qmake_correct_path_separators.diff -> 1.2
    0255-qtreeview-selection-columns-hidden.diff -> 1.3
    0269-msvc-webkit-compile.diff -> 1.2
    0280-deserialization-custom-dbus-properties.diff -> 1.2
    0283-do-not-deduce-scrollbar-extent-twice.diff -> 1.2
    0285-qgv-dontshowchildren.diff -> 1.2
    qt4-kde-git.patch -> 1.1
    qt4.spec -> 1.226

14 files changed:
0118-qtcopy-define.diff [deleted file]
0180-window-role.diff [deleted file]
0195-compositing-properties.diff [deleted file]
0209-prevent-qt-mixing.diff [deleted file]
0216-allow-isystem-for-headers.diff [deleted file]
0225-invalidate-tabbar-geometry-on-refresh.patch [deleted file]
0253-qmake_correct_path_separators.diff [deleted file]
0255-qtreeview-selection-columns-hidden.diff [deleted file]
0269-msvc-webkit-compile.diff [deleted file]
0280-deserialization-custom-dbus-properties.diff [deleted file]
0283-do-not-deduce-scrollbar-extent-twice.diff [deleted file]
0285-qgv-dontshowchildren.diff [deleted file]
qt4-kde-git.patch [new file with mode: 0644]
qt4.spec

diff --git a/0118-qtcopy-define.diff b/0118-qtcopy-define.diff
deleted file mode 100644 (file)
index e3b86a8..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-qt-bugs@ issue : none
-Trolltech task ID : none
-applied: yes
-author: David Faure <faure@kde.org>
-
-Needed to distinguish qt-copy from released versions of qt, at least while
-we backport API additions to qt-copy.
-
-Index: src/corelib/global/qglobal.h
-===================================================================
---- src/corelib/global/qglobal.h        (revision 536662)
-+++ src/corelib/global/qglobal.h        (working copy)
-@@ -38,6 +38,11 @@
- #include <QtCore/qconfig.h>
- #endif
-
-+/* QT_KDE_QT_COPY is set in qt-copy so that we know when we can use features backported to qt-copy
-+   Keep in mind that it should also work with the right release of Qt, so use something like:
-+      #if defined(QT_KDE_QT_COPY) || QT_VERSION >= 0x040200 */
-+#define QT_KDE_QT_COPY
-+
- /*
-    The operating system, must be one of: (Q_OS_x)
-
diff --git a/0180-window-role.diff b/0180-window-role.diff
deleted file mode 100644 (file)
index 687e11c..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-qt-bugs@ issue : 167704
-Trolltech task ID : 168283 (status: "fixed" for Qt 4.4.0, but effectively refused)
-bugs.kde.org number : none
-applied: no
-author: Lubos Lunak <l.lunak@kde.org>
-
-NOTE: It is suggested to apply patch #0209 as well when this patch is used.
-
-This patch uses object name as a fallback for window role if no window role
-is set explicitly using setWindowRole(). Since Qt3 always used the object
-name as the window role and most Qt3/KDE3 code is ported to call setObjectName(),
-this makes the window role set in many cases (which KWin uses for window identifying).
-
-
---- src/corelib/kernel/qobject.cpp.sav 2008-02-22 09:03:40.000000000 +0100
-+++ src/corelib/kernel/qobject.cpp     2008-02-23 16:15:51.000000000 +0100
-@@ -1016,9 +1016,18 @@ void QObject::setObjectName(const QStrin
- {
-     Q_D(QObject);
-     d->objectName = name;
-+#if defined(Q_WS_X11)
-+    d->checkWindowRole();
-+#endif
- }
-+#if defined(Q_WS_X11)
-+void QObjectPrivate::checkWindowRole()
-+{
-+}
-+#endif
-+
- #ifdef QT3_SUPPORT
- /*! \internal
-     QObject::child is compat but needs to call itself recursively,
---- src/corelib/kernel/qobject_p.h.sav 2008-02-22 09:23:44.000000000 +0100
-+++ src/corelib/kernel/qobject_p.h     2008-02-23 16:16:46.000000000 +0100
-@@ -148,6 +148,9 @@ public:
-     mutable quint32 connectedSignals;
-     QString objectName;
-+#if defined(Q_WS_X11)
-+    virtual void checkWindowRole();
-+#endif
-     // Note: you must hold the signalSlotLock() before accessing the lists below or calling the functions
-     struct Connection
---- src/gui/kernel/qwidget_p.h.sav     2008-02-22 09:04:04.000000000 +0100
-+++ src/gui/kernel/qwidget_p.h 2008-02-23 16:17:07.000000000 +0100
-@@ -324,6 +324,7 @@ public:
- #if defined(Q_WS_X11)
-     void setWindowRole();
-+    virtual void checkWindowRole();
-     void sendStartupMessage(const char *message) const;
-     void setNetWmWindowTypes();
- #endif
---- src/gui/kernel/qwidget_x11.cpp.sav 2008-02-23 15:28:47.000000000 +0100
-+++ src/gui/kernel/qwidget_x11.cpp     2008-02-23 16:31:47.000000000 +0100
-@@ -710,13 +710,17 @@ void QWidgetPrivate::create_sys(WId wind
-         // declare the widget's window role
-+        QByteArray windowRole;
-         if (QTLWExtra *topData = maybeTopData()) {
--            if (!topData->role.isEmpty()) {
--                QByteArray windowRole = topData->role.toUtf8();
--                XChangeProperty(dpy, id,
--                                ATOM(WM_WINDOW_ROLE), XA_STRING, 8, PropModeReplace,
--                                (unsigned char *)windowRole.constData(), windowRole.length());
--            }
-+            if (!topData->role.isEmpty())
-+                windowRole = topData->role.toUtf8();
-+        }
-+        if (windowRole.isEmpty()) // use object name as a fallback
-+            windowRole = objectName.toUtf8();
-+        if (!windowRole.isEmpty()) {
-+            XChangeProperty(dpy, id,
-+                            ATOM(WM_WINDOW_ROLE), XA_STRING, 8, PropModeReplace,
-+                            (unsigned char *)windowRole.constData(), windowRole.length());
-         }
-         // set client leader property
-@@ -2852,6 +2856,17 @@ void QWidgetPrivate::setWindowRole()
-                     (unsigned char *)windowRole.constData(), windowRole.length());
- }
-+void QWidgetPrivate::checkWindowRole()
-+{
-+    Q_Q(QWidget);
-+    if( !q->windowRole().isEmpty() || !q->internalWinId())
-+        return;
-+    QByteArray windowRole = objectName.toUtf8(); // use as a fallback
-+    XChangeProperty(X11->display, q->internalWinId(),
-+                    ATOM(WM_WINDOW_ROLE), XA_STRING, 8, PropModeReplace,
-+                    (unsigned char *)windowRole.constData(), windowRole.length());
-+}
-+
- Q_GLOBAL_STATIC(QX11PaintEngine, qt_widget_paintengine)
- QPaintEngine *QWidget::paintEngine() const
- {
diff --git a/0195-compositing-properties.diff b/0195-compositing-properties.diff
deleted file mode 100644 (file)
index 979df94..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-qt-bugs@ issue : none
-bugs.kde.org number : none
-applied: no
-author: Lubos Lunak <l.lunak@kde.org>
-
-This patch makes override-redirect windows (popup menu, dropdown menu,
-tooltip, combobox, etc.) also have more window properties like WM_CLASS,
-so they can be used when compositing.
-
---- src/gui/kernel/qwidget_x11.cpp
-+++ src/gui/kernel/qwidget_x11.cpp
-@@ -637,6 +637,11 @@ void QWidgetPrivate::create_sys(WId window, bool initializeWindow, bool destroyO
-         Q_ASSERT(id);
-         XChangeWindowAttributes(dpy, id, CWOverrideRedirect | CWSaveUnder,
-                                 &wsa);
-+        XClassHint class_hint;
-+        QByteArray appName = qAppName().toLatin1();
-+        class_hint.res_name = appName.data(); // application name
-+        class_hint.res_class = const_cast<char *>(QX11Info::appClass());   // application class
-+        XSetWMProperties(dpy, id, 0, 0, 0, 0, 0, 0, &class_hint);
-     } else if (topLevel && !desktop) {        // top-level widget
-         if (!X11->wm_client_leader)
-             create_wm_client_leader();
-@@ -685,13 +690,21 @@ void QWidgetPrivate::create_sys(WId window, bool initializeWindow, bool destroyO
-         // set EWMH window types
-         setNetWmWindowTypes();
-+        // when we create a toplevel widget, the frame strut should be dirty
-+        data.fstrut_dirty = 1;
-+
-+    } else {
-+        // non-toplevel widgets don't have a frame, so no need to
-+        // update the strut
-+        data.fstrut_dirty = 0;
-+    }
-+
-+    if (initializeWindow && (popup || (topLevel && !desktop))) { // properties set on all toplevel windows
-         // set _NET_WM_PID
-         long curr_pid = getpid();
-         XChangeProperty(dpy, id, ATOM(_NET_WM_PID), XA_CARDINAL, 32, PropModeReplace,
-                         (unsigned char *) &curr_pid, 1);
--        // when we create a toplevel widget, the frame strut should be dirty
--        data.fstrut_dirty = 1;
-         // declare the widget's window role
-         if (QTLWExtra *topData = maybeTopData()) {
-@@ -707,10 +720,6 @@ void QWidgetPrivate::create_sys(WId window, bool initializeWindow, bool destroyO
-         XChangeProperty(dpy, id, ATOM(WM_CLIENT_LEADER),
-                         XA_WINDOW, 32, PropModeReplace,
-                         (unsigned char *)&X11->wm_client_leader, 1);
--    } else {
--        // non-toplevel widgets don't have a frame, so no need to
--        // update the strut
--        data.fstrut_dirty = 0;
-     }
-     if (initializeWindow && q->internalWinId()) {
diff --git a/0209-prevent-qt-mixing.diff b/0209-prevent-qt-mixing.diff
deleted file mode 100644 (file)
index 4223956..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-qt-bugs@ issue : none
-Trolltech task ID : none
-bugs.kde.org number : none
-applied: yes
-author: Lubos Lunak <l.lunak@kde.org>
-
-This patch changes QObjectPrivateVersion, thus preventing mixing
-parts of upstream Qt and qt-copy. In general it is a bad idea to mix
-e.g. libQtCore from one build and libQtGui from another one, and other
-qt-copy patches could make changes in Qt internal structures that could
-cause problems when mixed with upstream Qt.
-
-This patch does not make qt-copy binary incompatible with upstream Qt.
-It only further enforces using the same sources for the whole Qt build.
-
---- src/corelib/kernel/qobject_p.h.sav 2008-01-29 19:37:26.000000000 +0100
-+++ src/corelib/kernel/qobject_p.h     2008-01-30 14:08:15.000000000 +0100
-@@ -75,7 +75,9 @@ extern QSignalSpyCallbackSet Q_CORE_EXPO
- inline QObjectData::~QObjectData() {}
--enum { QObjectPrivateVersion = QT_VERSION };
-+// add 0x1000000 to mark it as qt-copy version, with possible modifications
-+// in some Q*Private class
-+enum { QObjectPrivateVersion = QT_VERSION + 0x1000000 };
- class Q_CORE_EXPORT QObjectPrivate : public QObjectData
- {
diff --git a/0216-allow-isystem-for-headers.diff b/0216-allow-isystem-for-headers.diff
deleted file mode 100644 (file)
index 994ef9d..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-qt-bugs@ issue : 199610
-Trolltech task ID : 
-bugs.kde.org number : 
-applied: no
-author: Benjamin Reed <rangerrick@befunk.com>
-
-I don't have the exact output anymore (I've since patched Qt's configure) but
-essentially, since I have pcre.h in /opt/kde4-deps/include, it was
-conflicting with Qt's (modified) pcre.h in the WebKit bits, since
--I /opt/kde4-deps/include ends up in CXXFLAGS in the generated makefiles, it
-comes *before* the specific locations in INCPATH on the compile line, and you
-end up with a conflict with the system-installed pcre.h.
-
-Presumably, if your pcre.h is in /usr/include as on most Linux systems, you
-wouldn't notice this issue since /usr/include's already in your include path
-and people likely don't pass -I /usr/include to configure.  I suspect that on
-any platform with a regular, system-installed pcre.h (or clucene headers),
-adding -I /usr/include would exhibit this bug, just as a custom-installed
-pcre/clucene in another root would.
-
-This patch adds support for using -isystem to allow putting an include
-directory at the end of the compiler's header search path.
-
-
-Index: configure
-===================================================================
---- configure  (revision 777050)
-+++ configure  (working copy)
-@@ -811,6 +811,11 @@
-             VAL=`echo $1 | sed 's,-D,,'`
-         fi
-         ;;
-+    -isystem)
-+        VAR="add_isystempath"
-+        shift
-+        VAL="$1"
-+        ;;
-     -I?*|-I)
-         VAR="add_ipath"
-         if [ "$1" = "-I" ]; then
-@@ -1666,6 +1671,9 @@
-     add_ipath)
-         I_FLAGS="$I_FLAGS -I\"${VAL}\""
-         ;;
-+    add_isystempath)
-+        I_FLAGS="$I_FLAGS -isystem \"${VAL}\""
-+        ;;
-     add_lpath)
-         L_FLAGS="$L_FLAGS -L\"${VAL}\""
-         ;;
diff --git a/0225-invalidate-tabbar-geometry-on-refresh.patch b/0225-invalidate-tabbar-geometry-on-refresh.patch
deleted file mode 100644 (file)
index 49daca3..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-qt-bugs@ issue : 208185 
-Trolltech task ID : 208349
-bugs.kde.org number : 159014
-applied: no
-author: Robert Knight <robertknight@gmail.com>
-
-When tabs are inserted or removed in a QTabBar, QTabBarPrivate::refresh()
-is called to update the layout.  If the tabbar widget is hidden, this
-just sets a boolean variable (layoutDirty) and returns, so the parent widget's layout
-is not notified about the possible geometry change.
-
-Prior to Qt 4.4 this was not a problem because the geometry was recalculated
-in QTabBar::sizeHint() if the layoutDirty variable was set.  In Qt 4.4 however the layout
-caches size hint information in QWidgetItemV2.  Since the cache information is not invalidated,
-the layout may end up using out-of-date size hint information to compute the widget size.
-
-If the QTabBar is empty when QTabBar::sizeHint() is called, it will return a size with a height 
-of 0, which will be kept in the cache and so the tab bar will never be shown.  
-
-This patch fixes the problem by calling updateGeometry() whenever the tab bar's layout is refreshed.
-
-Index: src/gui/widgets/qtabbar.cpp
-===================================================================
---- src/gui/widgets/qtabbar.cpp        (revision 796858)
-+++ src/gui/widgets/qtabbar.cpp        (working copy)
-@@ -533,8 +533,8 @@
-         layoutTabs();
-         makeVisible(currentIndex);
-         q->update();
--        q->updateGeometry();
-     }
-+    q->updateGeometry();
- }
- /*!
diff --git a/0253-qmake_correct_path_separators.diff b/0253-qmake_correct_path_separators.diff
deleted file mode 100644 (file)
index 0071461..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-qt-bugs@ issue : none
-Trolltech task ID : 214661
-applied: no
-author: Christian Ehrlicher <ch.ehrlicher@gmx.de>
-
-When using qmake outside qt src tree, it sometimes generates wrong
-paths (wrong path separator)
-
-
---- qmake/property.cpp.orig    2008-05-08 21:16:15.902625000 +0200
-+++ qmake/property.cpp 2008-05-08 21:16:10.481500000 +0200
-@@ -83,29 +83,32 @@
- QString
- QMakeProperty::value(QString v, bool just_check)
- {
-+    QString ret;
-     if(v == "QT_INSTALL_PREFIX")
--        return QLibraryInfo::location(QLibraryInfo::PrefixPath);
-+        ret = QLibraryInfo::location(QLibraryInfo::PrefixPath);
-     else if(v == "QT_INSTALL_DATA")
--        return QLibraryInfo::location(QLibraryInfo::DataPath);
-+        ret = QLibraryInfo::location(QLibraryInfo::DataPath);
-     else if(v == "QT_INSTALL_DOCS")
--        return QLibraryInfo::location(QLibraryInfo::DocumentationPath);
-+        ret = QLibraryInfo::location(QLibraryInfo::DocumentationPath);
-     else if(v == "QT_INSTALL_HEADERS")
--        return QLibraryInfo::location(QLibraryInfo::HeadersPath);
-+        ret = QLibraryInfo::location(QLibraryInfo::HeadersPath);
-     else if(v == "QT_INSTALL_LIBS")
--        return QLibraryInfo::location(QLibraryInfo::LibrariesPath);
-+        ret = QLibraryInfo::location(QLibraryInfo::LibrariesPath);
-     else if(v == "QT_INSTALL_BINS")
--        return QLibraryInfo::location(QLibraryInfo::BinariesPath);
-+        ret = QLibraryInfo::location(QLibraryInfo::BinariesPath);
-     else if(v == "QT_INSTALL_PLUGINS")
--        return QLibraryInfo::location(QLibraryInfo::PluginsPath);
-+        ret = QLibraryInfo::location(QLibraryInfo::PluginsPath);
-     else if(v == "QT_INSTALL_TRANSLATIONS")
--        return QLibraryInfo::location(QLibraryInfo::TranslationsPath);
-+        ret = QLibraryInfo::location(QLibraryInfo::TranslationsPath);
-     else if(v == "QT_INSTALL_CONFIGURATION")
--        return QLibraryInfo::location(QLibraryInfo::SettingsPath);
-+        ret = QLibraryInfo::location(QLibraryInfo::SettingsPath);
-     else if(v == "QT_INSTALL_EXAMPLES")
--        return QLibraryInfo::location(QLibraryInfo::ExamplesPath);
-+        ret = QLibraryInfo::location(QLibraryInfo::ExamplesPath);
-     else if(v == "QT_INSTALL_DEMOS")
--        return QLibraryInfo::location(QLibraryInfo::DemosPath);
--    else if(v == "QMAKE_MKSPECS")
-+        ret = QLibraryInfo::location(QLibraryInfo::DemosPath);
-+    if(!ret.isEmpty())
-+        return QDir::toNativeSeparators(ret);
-+    if(v == "QMAKE_MKSPECS")
-         return qmake_mkspec_paths().join(Option::target_mode == Option::TARG_WIN_MODE ? ";" : ":");
-     else if(v == "QMAKE_VERSION")
-         return qmake_version();
-@@ -118,7 +121,7 @@
-     int slash = v.lastIndexOf('/');
-     QVariant var = settings->value(keyBase(slash == -1) + v);
-     bool ok = var.isValid();
--    QString ret = var.toString();
-+    ret = var.toString();
-     if(!ok) {
-         QString version = qmake_version();
-         if(slash != -1) {
diff --git a/0255-qtreeview-selection-columns-hidden.diff b/0255-qtreeview-selection-columns-hidden.diff
deleted file mode 100644 (file)
index 08677af..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-qt-bugs@ issue : N232819
-Trolltech task ID : 232831
-applied: no
-author: Rafael Fernández López <ereslibre@kde.org>
-
-In a treeview with columns like this:
-
-Column 1 | Column 2 | ... | Column k | ... | Column n
-
-When selecting with rubberband (by clicking on the blank part of the viewport) while Column k is
-hidden, you get double items on the selection model, when asking for selection(). This is becase
-ranges are incorrectly calculated when there are hidden columns. A way to reproduce:
-
-Column 1 | Column 2 | Column 4 (Column 3 is hidden)
- item
- item
- item
-  x <- press button here and move it up to select items (on this same column)
-
-If you do like this:
-
-Column 1 | Column 2 | Column 4 (Column 3 is hidden)
- item
- item
- item
-                         x <- press button here and move it up
-
-you won't be able to reproduce, since you need the hidden column to be between the one you click and
-the last one. The reason is that columnRanges returns two ranges when there is supposed to return 1
-range (even when there are hidden columns).
-
-diff --git a/src/gui/itemviews/qtreeview.cpp b/src/gui/itemviews/qtreeview.cpp
-index d5ca633..b7975be 100644
---- src/gui/itemviews/qtreeview.cpp
-+++ src/gui/itemviews/qtreeview.cpp
-@@ -3494,7 +3494,7 @@
-     current.first = -2; // -1 is not enough because -1+1 = 0
-     current.second = -2;
-     foreach (int logicalColumn, logicalIndexes) {
--        if (current.second + 1 != logicalColumn) {
-+        if (current.second + 1 != logicalColumn && !header->isSectionHidden(current.second + 1)) {
-             if (current.first != -2) {
-                 //let's save the current one
-                 ret += current;
diff --git a/0269-msvc-webkit-compile.diff b/0269-msvc-webkit-compile.diff
deleted file mode 100644 (file)
index 2a105c4..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-Trolltech task ID : N244010
-KDE :
-applied: no
-os: windows/msvc
-author: Christian Ehrlicher <ch.ehrlicher@gmx.de>
-
-Due to the implicit build rules created in 'batch mode' all source files
-inside a directory matching those rules are compiled. This means make also
-wants to compile pcre.c which isn't needed at all (and does not compile).
---> Disabling batch mode for this directory to work around this bug.
-
-
-Index: src/3rdparty/webkit/JavaScriptCore/pcre/pcre.pri
-===================================================================
---- src/3rdparty/webkit/JavaScriptCore/pcre/pcre.pri   (revision 922833)
-+++ src/3rdparty/webkit/JavaScriptCore/pcre/pcre.pri   (working copy)
-@@ -2,6 +2,7 @@
- VPATH += $$PWD
- INCLUDEPATH += $$PWD $$OUTPUT_DIR/JavaScriptCore/tmp
- DEPENDPATH += $$PWD
-+win32-msvc*: CONFIG += no_batch
- isEmpty(GENERATED_SOURCES_DIR):GENERATED_SOURCES_DIR = tmp
diff --git a/0280-deserialization-custom-dbus-properties.diff b/0280-deserialization-custom-dbus-properties.diff
deleted file mode 100644 (file)
index 7de633d..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-qt-bugs@ issue : N240326
-Qt Software task ID : 240608
-bugs.kde.org number : none
-applied: no
-author: George Goldberg <grundleborg@googlemail.com>
-
-This patch fixes deserialization of values with custom types when setting
-properties on dbus adaptors. It is needed, in particular by telepathy/Qt
-programs and libraries. The bug was reported to Nokia on 2009-01-07 along
-with the patch supplied here. The summary of the issue from the Qt
-Software task tracker follows:
-
-When calling the setter for a DBus property, if that property has a custom type
-(e.g. a struct with dbus type (uss)), QtDBus fails to demarshall the
-QDBusArgument before attempting to set the property on the adaptor. The result
-is that it attempts to call adaptor->setProperty() with a QDBusArgument of type
-"uss" instead of with the type of the custom struct.
-
-Index: src/dbus/qdbusinternalfilters.cpp
-===================================================================
---- src/dbus/qdbusinternalfilters.cpp  (revision 960506)
-+++ src/dbus/qdbusinternalfilters.cpp  (working copy)
-@@ -274,9 +274,23 @@
-             QDBusAdaptorConnector::AdaptorMap::ConstIterator it;
-             it = qLowerBound(connector->adaptors.constBegin(), connector->adaptors.constEnd(),
-                              interface_name);
--            if (it != connector->adaptors.end() && interface_name == QLatin1String(it->interface))
-+            if (it != connector->adaptors.end() && interface_name == QLatin1String(it->interface)) {
-+                if (value.userType() == qMetaTypeId<QDBusArgument>()) {
-+                    QDBusArgument valueArg = qvariant_cast<QDBusArgument>(value);
-+                    if (valueArg.currentType() != -1) {
-+                        int mid = it->adaptor->metaObject()->property(it->adaptor->metaObject()->indexOfProperty(property_name)).userType();
-+                        void *null = 0;
-+                        QVariant valueStore(mid, null);
-+                        QDBusMetaType::demarshall(valueArg, mid, valueStore.data());
-+
-+                        if (it->adaptor->setProperty(property_name, valueStore))
-+                            return msg.createReply();
-+                    }
-+                }
-+
-                 if (it->adaptor->setProperty(property_name, value))
-                     return msg.createReply();
-+            }
-         }
-     }
diff --git a/0283-do-not-deduce-scrollbar-extent-twice.diff b/0283-do-not-deduce-scrollbar-extent-twice.diff
deleted file mode 100644 (file)
index 53ec85e..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-qt-bugs@ issue : none
-Qt Software task ID : none
-bugs.kde.org number : none
-applied: no
-author: Aurélien Gâteau <agateau@kde.org>
-
-Do not deduce scrollbar extent twice if scrollbar policy is
-Qt::ScrollBarAlwaysOn.
-
-This patch has been merged in master but won't be in 4.5.
-http://qt.gitorious.org/qt/qt/merge_requests/432
-
---- src/gui/itemviews/qlistview.cpp
-+++ src/gui/itemviews/qlistview.cpp
-@@ -1969,10 +1969,16 @@ void QListViewPrivate::prepareItemsLayout()
-     int frameAroundContents = 0;
-     if (q->style()->styleHint(QStyle::SH_ScrollView_FrameOnlyAroundContents))
-         frameAroundContents = q->style()->pixelMetric(QStyle::PM_DefaultFrameWidth) * 2;
--    int verticalMargin = vbarpolicy==Qt::ScrollBarAlwaysOff ? 0 :
--        q->style()->pixelMetric(QStyle::PM_ScrollBarExtent, 0, q->verticalScrollBar()) + frameAroundContents;
--    int horizontalMargin =  hbarpolicy==Qt::ScrollBarAlwaysOff ? 0 :
--        q->style()->pixelMetric(QStyle::PM_ScrollBarExtent, 0, q->horizontalScrollBar()) + frameAroundContents;
-+
-+    // maximumViewportSize() already takes scrollbar into account if policy is
-+    // Qt::ScrollBarAlwaysOn but scrollbar extent must be deduced if policy
-+    // is Qt::ScrollBarAsNeeded
-+    int verticalMargin = vbarpolicy==Qt::ScrollBarAsNeeded
-+        ? q->style()->pixelMetric(QStyle::PM_ScrollBarExtent, 0, q->verticalScrollBar()) + frameAroundContents
-+        : 0;
-+    int horizontalMargin =  hbarpolicy==Qt::ScrollBarAsNeeded
-+        ? q->style()->pixelMetric(QStyle::PM_ScrollBarExtent, 0, q->horizontalScrollBar()) + frameAroundContents
-+        : 0;
-     layoutBounds.adjust(0, 0, -verticalMargin, -horizontalMargin);
diff --git a/0285-qgv-dontshowchildren.diff b/0285-qgv-dontshowchildren.diff
deleted file mode 100644 (file)
index 52fb798..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-qt-bugs@ issue : unknows
-Qt Software task ID : 197802
-bugs.kde.org number : bugs on the issue not reported yed
-applied: no
-author: Marco Martin <notmart@gmail.com>
-
-This patch makes children items of an hidden qgraphicsitem not be shown if show() is called on them. fixes several issues like the opensocial plasma widget and the Plasma desktop toolbox behaviour.
-
-Index: src/gui/graphicsview/qgraphicsitem.cpp
-===================================================================
---- src/gui/graphicsview/qgraphicsitem.cpp     (revision 958522)
-+++ src/gui/graphicsview/qgraphicsitem.cpp     (working copy)
-@@ -1522,6 +1522,11 @@
-     if (visible == quint32(newVisible))
-         return;
-+    QGraphicsItem *parent(q_ptr->parentItem());
-+    if (parent && newVisible && !parent->d_ptr->visible) {
-+        return;
-+    }
-+
-     // Modify the property.
-     const QVariant newVisibleVariant(q_ptr->itemChange(QGraphicsItem::ItemVisibleChange,
-                                                        quint32(newVisible)));
diff --git a/qt4-kde-git.patch b/qt4-kde-git.patch
new file mode 100644 (file)
index 0000000..c2914ff
--- /dev/null
@@ -0,0 +1,1593 @@
+diff --git a/README.kde-qt b/README.kde-qt
+new file mode 100644
+index 0000000..db3feb6
+--- /dev/null
++++ b/README.kde-qt
+@@ -0,0 +1,201 @@
++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
++one.
++
++1. Configuring Qt
++=================
++
++The recommended compile line is:
++
++--default-config-begin--
++
++  ./configure -qt-gif -debug -fast -no-separate-debug-info \
++     -system-libpng -system-libjpeg -system-zlib \
++     -dbus -webkit -plugin-sql-mysql \
++     -nomake examples -nomake demos -prefix <installdir>
++
++--default-config-end--
++
++It contains "-debug", which greatly improves the use for backtraces (but
++also needs a lot more disk space and makes things slower). To build in
++release mode, replace it with "-release".
++
++It also contains "-no-separate-debug-info", which disables separate .debug
++files. Instead, the debug information will be built into the libraries.
++This option is needed when you install Qt.
++
++If you don't install Qt, it can be useful to disable this option,
++thus having separate debug symbol files. With separate debug files, you can
++just move those debug files to another directory to remove Qt debug symbols.
++Moving the files back will enable Qt debug symbols again.
++This is useful if you rarely need to step into Qt functions during debugging,
++because GDB loads much faster and uses less memory without Qt debug symbols.
++In the rare case you need to step into Qt code, you can temporarily enable
++debug symbols again by moving the debug files back. You can even load the Qt
++debug symbols from within GDB on demand, using the "symbol-file" command.
++
++If you are planning to compile Qt using an Icecream cluster you have to
++pass the option -no-pch (no precompiled headers) to configure to make
++distributed compilation work.
++
++2. Compiling Qt
++===============
++
++To compile Qt on a Unix platform, run:
++
++   export MAKEFLAGS=-j2
++   make
++   make install
++
++If your computer has more than one core or processor, you may consider
++increasing the "2" above. If you've got a compile farm available, you
++should adjust the -j argument to match the number of slots in that
++farm.
++
++3. Modifying & rebuilding Qt
++============================
++
++If you make modifications to the Qt source code, you don't need to
++build everything again. Simply go to the directory containing the
++Makefile closest to the files you changed and run "make" again.
++
++For example, if you've modified src/corelib/io/qiodevice.cpp, do:
++
++   cd src/corelib
++   make
++
++If you make a change that is not temporary, you should create a Git
++commit out of it. However, you shouldn't push those changes to
++kde-qt.git. If you have a fix that benefit others, see the "Creating
++kde-qt.git modifications" section below.
++
++4. Building Qt examples and demos
++=================================
++
++The "-nomake examples -nomake demos" arguments to the configure script
++mean that those two sections will not be configured for building,
++which is unneeded for usage of the library.  If you want to compile
++the examples or demos later, just enter either directory and type:
++
++   qmake
++   make
++
++5. Build Qt tests
++=================
++
++(Official information: http://qt.gitorious.org/qt/pages/QtAutotestsEnvironment)
++
++In order to run Qt tests, you must have a "developer build" of Qt. For
++that, you need to reconfigure Qt and add the "-developer-build"
++option. That option is technically equivalent to the options:
++
++   -debug -prefix $PWD -DQT_BUILD_INTERNAL
++
++To run a test, go to its source dir in tests/auto/testname. Type
++"make" to build it, then run it (either ./tst_testname, or "make install").
++
++6. Building Qt documentation
++============================
++
++To build and install the documentation, run:
++
++   make docs
++   ./config.status
++   make install
++
++It is necessary to do this once only, even if you rebuild Qt later.
++
++7. Using Qt uninstalled
++=======================
++
++To use without having to install it, configure it as follows:
++
++   ./configure <other configure options>  -prefix $PWD
++   make sub-src
++   make sub-tools
++
++Attention: DO NOT run
++
++   make install
++
++If you do, Qt will overwrite your include/ directory with its
++installation.
++
++8. Creating kde-qt.git modifications
++====================================
++
++If you have fixed a bug in Qt or modified it in any way that may
++benefit others, please share your change in the form of a patch. Do
++not commit your changes directly to the main branch because they
++may be lost in a future update if they have not been added to the
++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
++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:
++
++   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.
++
++To create a patch, do the following:
++  a) look at the listing of branches in
++  http://qt.gitorious.org/+kde-developers/qt/kde-qt/commits/HEAD and
++  select the next number.
++
++  b) create a new branch out of a clean, released version of Qt, (for
++  example, 4.5.1), using the number above and a brief description of
++  your fix. For example:
++      git checkout -b patches/0180-window-role v4.5.1
++  You can see the available released versions of Qt with:
++      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).
++
++  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:
++      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)
++
++Don't forget to submit your patch to using the Qt Contribution Model,
++along with the long description of the issue found. See
++http://qt.gitorious.org/qt/pages/QtContributionGuidelines for
++information how. You can submit the branch you've just sent to the
++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
++top directory of your Qt sources:
++
++      find . -name '*.moc' | xargs rm
++
++Sometimes ./configure will refuse to run.  You may need to:
++      rm .qmake.cache
++
++If you think you may have run "make install" on an install-less Qt
++(srcdir == $QTDIR), run:
++
++      rm -rf include
++      bin/syncqt
+diff --git a/bin/syncqt b/bin/syncqt
+index edabeca..e71d480 100755
+--- a/bin/syncqt
++++ b/bin/syncqt
+@@ -363,9 +363,13 @@ sub fixPaths {
+         $match_dir = $tmp;
+         $i = $slash;
+     }
++    my $cnt_ofs = 0;
++    if($match_dir =~ /^[a-zA-Z]:$/) {
++      $cnt_ofs = 1;
++    }
+     if($match_dir) {
+         my $after = substr($dir, length($match_dir));
+-        my $count = ($after =~ tr,/,,);
++        my $count = ($after =~ tr,/,,) - $cnt_ofs;
+         my $dots = "";
+         for(my $i = 0; $i < $count; $i++) {
+             $dots .= "../";
+diff --git a/configure b/configure
+index 4ea1ad0..b28a1fa 100755
+--- a/configure
++++ b/configure
+@@ -960,6 +960,11 @@ while [ "$#" -gt 0 ]; do
+             VAL=`echo $1 | sed 's,-D,,'`
+         fi
+         ;;
++    -isystem)
++        VAR="add_isystempath"
++        shift
++        VAL="$1"
++        ;;
+     -I?*|-I)
+         VAR="add_ipath"
+         if [ "$1" = "-I" ]; then
+@@ -1930,6 +1935,9 @@ while [ "$#" -gt 0 ]; do
+     add_ipath)
+         I_FLAGS="$I_FLAGS -I\"${VAL}\""
+         ;;
++    add_isystempath)
++        I_FLAGS="$I_FLAGS -isystem \"${VAL}\""
++        ;;
+     add_lpath)
+         L_FLAGS="$L_FLAGS -L\"${VAL}\""
+         ;;
+diff --git a/projects.pro b/projects.pro
+index f6c596d..79420d2 100644
+--- a/projects.pro
++++ b/projects.pro
+@@ -131,6 +131,9 @@ unix {
+    DEFAULT_QMAKESPEC ~= s,^.*mkspecs/,,g
+    mkspecs.commands += $(DEL_FILE) $(INSTALL_ROOT)$$mkspecs.path/default; $(SYMLINK) $$DEFAULT_QMAKESPEC $(INSTALL_ROOT)$$mkspecs.path/default
+ }
++win32 {
++   mkspecs.files += $$QT_BUILD_TREE/mkspecs/default
++}
+ INSTALLS += mkspecs
+ false:macx { #mac install location
+diff --git a/qmake/property.cpp b/qmake/property.cpp
+index ea4842a..ac54854 100644
+--- a/qmake/property.cpp
++++ b/qmake/property.cpp
+@@ -81,29 +81,32 @@ QMakeProperty::keyBase(bool version) const
+ QString
+ QMakeProperty::value(QString v, bool just_check)
+ {
++    QString ret;
+     if(v == "QT_INSTALL_PREFIX")
+-        return QLibraryInfo::location(QLibraryInfo::PrefixPath);
++        ret = QLibraryInfo::location(QLibraryInfo::PrefixPath);
+     else if(v == "QT_INSTALL_DATA")
+-        return QLibraryInfo::location(QLibraryInfo::DataPath);
++        ret = QLibraryInfo::location(QLibraryInfo::DataPath);
+     else if(v == "QT_INSTALL_DOCS")
+-        return QLibraryInfo::location(QLibraryInfo::DocumentationPath);
++        ret = QLibraryInfo::location(QLibraryInfo::DocumentationPath);
+     else if(v == "QT_INSTALL_HEADERS")
+-        return QLibraryInfo::location(QLibraryInfo::HeadersPath);
++        ret = QLibraryInfo::location(QLibraryInfo::HeadersPath);
+     else if(v == "QT_INSTALL_LIBS")
+-        return QLibraryInfo::location(QLibraryInfo::LibrariesPath);
++        ret = QLibraryInfo::location(QLibraryInfo::LibrariesPath);
+     else if(v == "QT_INSTALL_BINS")
+-        return QLibraryInfo::location(QLibraryInfo::BinariesPath);
++        ret = QLibraryInfo::location(QLibraryInfo::BinariesPath);
+     else if(v == "QT_INSTALL_PLUGINS")
+-        return QLibraryInfo::location(QLibraryInfo::PluginsPath);
++        ret = QLibraryInfo::location(QLibraryInfo::PluginsPath);
+     else if(v == "QT_INSTALL_TRANSLATIONS")
+-        return QLibraryInfo::location(QLibraryInfo::TranslationsPath);
++        ret = QLibraryInfo::location(QLibraryInfo::TranslationsPath);
+     else if(v == "QT_INSTALL_CONFIGURATION")
+-        return QLibraryInfo::location(QLibraryInfo::SettingsPath);
++        ret = QLibraryInfo::location(QLibraryInfo::SettingsPath);
+     else if(v == "QT_INSTALL_EXAMPLES")
+-        return QLibraryInfo::location(QLibraryInfo::ExamplesPath);
++        ret = QLibraryInfo::location(QLibraryInfo::ExamplesPath);
+     else if(v == "QT_INSTALL_DEMOS")
+-        return QLibraryInfo::location(QLibraryInfo::DemosPath);
+-    else if(v == "QMAKE_MKSPECS")
++        ret = QLibraryInfo::location(QLibraryInfo::DemosPath);
++    if(!ret.isEmpty())
++        return QDir::toNativeSeparators(ret);
++    if(v == "QMAKE_MKSPECS")
+         return qmake_mkspec_paths().join(Option::target_mode == Option::TARG_WIN_MODE ? ";" : ":");
+     else if(v == "QMAKE_VERSION")
+         return qmake_version();
+@@ -116,7 +119,7 @@ QMakeProperty::value(QString v, bool just_check)
+     int slash = v.lastIndexOf('/');
+     QVariant var = settings->value(keyBase(slash == -1) + v);
+     bool ok = var.isValid();
+-    QString ret = var.toString();
++    ret = var.toString();
+     if(!ok) {
+         QString version = qmake_version();
+         if(slash != -1) {
+diff --git a/src/corelib/global/qnamespace.h b/src/corelib/global/qnamespace.h
+index ac2ad34..58d7df0 100644
+--- a/src/corelib/global/qnamespace.h
++++ b/src/corelib/global/qnamespace.h
+@@ -895,12 +895,10 @@ public:
+         Key_Dead_Horn           = 0x01001262,
+         // multimedia/internet keys - ignored by default - see QKeyEvent c'tor
+-
+         Key_Back  = 0x01000061,
+         Key_Forward  = 0x01000062,
+         Key_Stop  = 0x01000063,
+         Key_Refresh  = 0x01000064,
+-
+         Key_VolumeDown = 0x01000070,
+         Key_VolumeMute  = 0x01000071,
+         Key_VolumeUp = 0x01000072,
+@@ -909,7 +907,6 @@ public:
+         Key_BassDown = 0x01000075,
+         Key_TrebleUp = 0x01000076,
+         Key_TrebleDown = 0x01000077,
+-
+         Key_MediaPlay  = 0x01000080,
+         Key_MediaStop  = 0x01000081,
+         Key_MediaPrevious  = 0x01000082,
+@@ -918,13 +915,11 @@ public:
+ #endif
+         Key_MediaNext  = 0x01000083,
+         Key_MediaRecord = 0x01000084,
+-
+         Key_HomePage  = 0x01000090,
+         Key_Favorites  = 0x01000091,
+         Key_Search  = 0x01000092,
+         Key_Standby = 0x01000093,
+         Key_OpenUrl = 0x01000094,
+-
+         Key_LaunchMail  = 0x010000a0,
+         Key_LaunchMedia = 0x010000a1,
+         Key_Launch0  = 0x010000a2,
+@@ -943,6 +938,98 @@ public:
+         Key_LaunchD  = 0x010000af,
+         Key_LaunchE  = 0x010000b0,
+         Key_LaunchF  = 0x010000b1,
++        Key_MonBrightnessUp = 0x010000b2,
++        Key_MonBrightnessDown = 0x010000b3,
++        Key_KeyboardLightOnOff = 0x010000b4,
++        Key_KeyboardBrightnessUp = 0x010000b5,
++        Key_KeyboardBrightnessDown = 0x010000b6,
++        Key_PowerOff = 0x010000b7,
++        Key_WakeUp = 0x010000b8,
++        Key_Eject = 0x010000b9,
++        Key_ScreenSaver = 0x010000ba,
++        Key_WWW = 0x010000bb,
++        Key_Memo = 0x010000bc,
++        Key_LightBulb = 0x010000bd,
++        Key_Shop = 0x010000be,
++        Key_History = 0x010000bf,
++        Key_AddFavorite = 0x010000c0,
++        Key_HotLinks = 0x010000c1,
++        Key_BrightnessAdjust = 0x010000c2,
++        Key_Finance = 0x010000c3,
++        Key_Community = 0x010000c4,
++        Key_AudioRewind = 0x010000c5,
++        Key_BackForward = 0x010000c6,
++        Key_ApplicationLeft = 0x010000c7,
++        Key_ApplicationRight = 0x010000c8,
++        Key_Book = 0x010000c9,
++        Key_CD = 0x010000ca,
++        Key_Calculator = 0x010000cb,
++        Key_ToDoList = 0x010000cc,
++        Key_ClearGrab = 0x010000cd,
++        Key_Close = 0x010000ce,
++        Key_Copy = 0x010000cf,
++        Key_Cut = 0x010000d0,
++        Key_Display = 0x010000d1,
++        Key_DOS = 0x010000d2,
++        Key_Documents = 0x010000d3,
++        Key_Excel = 0x010000d4,
++        Key_Explorer = 0x010000d5,
++        Key_Game = 0x010000d6,
++        Key_Go = 0x010000d7,
++        Key_iTouch = 0x010000d8,
++        Key_LogOff = 0x010000d9,
++        Key_Market = 0x010000da,
++        Key_Meeting = 0x010000db,
++        Key_MenuKB = 0x010000dc,
++        Key_MenuPB = 0x010000dd,
++        Key_MySites = 0x010000de,
++        Key_News = 0x010000df,
++        Key_OfficeHome = 0x010000e0,
++        Key_Option = 0x010000e1,
++        Key_Paste = 0x010000e2,
++        Key_Phone = 0x010000e3,
++        Key_Calendar = 0x010000e4,
++        Key_Reply = 0x010000e5,
++        Key_Reload = 0x010000e6,
++        Key_RotateWindows = 0x010000e7,
++        Key_RotationPB = 0x010000e8,
++        Key_RotationKB = 0x010000e9,
++        Key_Save = 0x010000ea,
++        Key_Send = 0x010000eb,
++        Key_Spell = 0x010000ec,
++        Key_SplitScreen = 0x010000ed,
++        Key_Support = 0x010000ee,
++        Key_TaskPane = 0x010000ef,
++        Key_Terminal = 0x010000f0,
++        Key_Tools = 0x010000f1,
++        Key_Travel = 0x010000f2,
++        Key_Video = 0x010000f3,
++        Key_Word = 0x010000f4,
++        Key_Xfer = 0x010000f5,
++        Key_ZoomIn = 0x010000f6,
++        Key_ZoomOut = 0x010000f7,
++        Key_Away = 0x010000f8,
++        Key_Messenger = 0x010000f9,
++        Key_WebCam = 0x010000fa,
++        Key_MailForward = 0x010000fb,
++        Key_Pictures = 0x010000fc,
++        Key_Music = 0x010000fd,
++        Key_Battery = 0x010000fe,
++        Key_Bluetooth = 0x010000ff,
++        Key_WLAN = 0x01000100,
++        Key_UWB = 0x01000101,
++        Key_AudioForward = 0x01000102,
++        Key_AudioRepeat = 0x01000103,
++        Key_AudioRandomPlay = 0x01000104,
++        Key_Subtitle = 0x01000105,
++        Key_AudioCycleTrack = 0x01000106,
++        Key_Time = 0x01000107,
++        Key_Hibernate = 0x01000108,
++        Key_View = 0x01000109,
++        Key_TopMenu = 0x0100010a,
++        Key_PowerDown = 0x0100010b,
++        Key_Suspend = 0x0100010c,
++        Key_ContrastAdjust = 0x0100010d,
+         Key_MediaLast = 0x0100ffff,
+diff --git a/src/corelib/kernel/qeventdispatcher_glib.cpp b/src/corelib/kernel/qeventdispatcher_glib.cpp
+index 87e9728..7f6dbb6 100644
+--- a/src/corelib/kernel/qeventdispatcher_glib.cpp
++++ b/src/corelib/kernel/qeventdispatcher_glib.cpp
+@@ -127,16 +127,11 @@ struct GTimerSource
+     GSource source;
+     QTimerInfoList timerList;
+     QEventLoop::ProcessEventsFlags processEventsFlags;
++    bool runWithIdlePriority;
+ };
+-static gboolean timerSourcePrepare(GSource *source, gint *timeout)
++static gboolean timerSourcePrepareHelper(GTimerSource *src, gint *timeout)
+ {
+-    gint dummy;
+-    if (!timeout)
+-        timeout = &dummy;
+-
+-    GTimerSource *src = reinterpret_cast<GTimerSource *>(source);
+-
+     timeval tv = { 0l, 0l };
+     if (!(src->processEventsFlags & QEventLoop::X11ExcludeTimers) && src->timerList.timerWait(tv))
+         *timeout = (tv.tv_sec * 1000) + (tv.tv_usec / 1000);
+@@ -146,10 +141,8 @@ static gboolean timerSourcePrepare(GSource *source, gint *timeout)
+     return (*timeout == 0);
+ }
+-static gboolean timerSourceCheck(GSource *source)
++static gboolean timerSourceCheckHelper(GTimerSource *src)
+ {
+-    GTimerSource *src = reinterpret_cast<GTimerSource *>(source);
+-
+     if (src->timerList.isEmpty()
+         || (src->processEventsFlags & QEventLoop::X11ExcludeTimers))
+         return false;
+@@ -160,9 +153,35 @@ static gboolean timerSourceCheck(GSource *source)
+     return true;
+ }
++static gboolean timerSourcePrepare(GSource *source, gint *timeout)
++{
++    gint dummy;
++    if (!timeout)
++        timeout = &dummy;
++
++    GTimerSource *src = reinterpret_cast<GTimerSource *>(source);
++    if (src->runWithIdlePriority) {
++        if (timeout)
++            *timeout = -1;
++        return false;
++    }
++
++    return timerSourcePrepareHelper(src, timeout);
++}
++
++static gboolean timerSourceCheck(GSource *source)
++{
++    GTimerSource *src = reinterpret_cast<GTimerSource *>(source);
++    if (src->runWithIdlePriority)
++        return false;
++    return timerSourceCheckHelper(src);
++}
++
+ static gboolean timerSourceDispatch(GSource *source, GSourceFunc, gpointer)
+ {
+-    (void) reinterpret_cast<GTimerSource *>(source)->timerList.activateTimers();
++    GTimerSource *timerSource = reinterpret_cast<GTimerSource *>(source);
++    timerSource->runWithIdlePriority = true;
++    (void) timerSource->timerList.activateTimers();
+     return true; // ??? don't remove, right again?
+ }
+@@ -175,6 +194,53 @@ static GSourceFuncs timerSourceFuncs = {
+     NULL
+ };
++struct GIdleTimerSource
++{
++    GSource source;
++    GTimerSource *timerSource;
++};
++
++static gboolean idleTimerSourcePrepare(GSource *source, gint *timeout)
++{
++    GIdleTimerSource *idleTimerSource = reinterpret_cast<GIdleTimerSource *>(source);
++    GTimerSource *timerSource = idleTimerSource->timerSource;
++    if (!timerSource->runWithIdlePriority) {
++        // Yield to the normal priority timer source
++        if (timeout)
++            *timeout = -1;
++        return false;
++    }
++
++    return timerSourcePrepareHelper(timerSource, timeout);
++}
++
++static gboolean idleTimerSourceCheck(GSource *source)
++{
++    GIdleTimerSource *idleTimerSource = reinterpret_cast<GIdleTimerSource *>(source);
++    GTimerSource *timerSource = idleTimerSource->timerSource;
++    if (!timerSource->runWithIdlePriority) {
++        // Yield to the normal priority timer source
++        return false;
++    }
++    return timerSourceCheckHelper(timerSource);
++}
++
++static gboolean idleTimerSourceDispatch(GSource *source, GSourceFunc, gpointer)
++{
++    GTimerSource *timerSource = reinterpret_cast<GIdleTimerSource *>(source)->timerSource;
++    (void) timerSourceDispatch(&timerSource->source, 0, 0);
++    return true;
++}
++
++static GSourceFuncs idleTimerSourceFuncs = {
++    idleTimerSourcePrepare,
++    idleTimerSourceCheck,
++    idleTimerSourceDispatch,
++    NULL,
++    NULL,
++    NULL
++};
++
+ struct GPostEventSource
+ {
+     GSource source;
+@@ -235,14 +301,15 @@ QEventDispatcherGlibPrivate::QEventDispatcherGlibPrivate(GMainContext *context)
+         g_main_context_ref(mainContext);
+     } else {
+         QCoreApplication *app = QCoreApplication::instance();
+-      if (app && QThread::currentThread() == app->thread()) {
+-          mainContext = g_main_context_default();
+-          g_main_context_ref(mainContext);
+-      } else {
+-          mainContext = g_main_context_new();
+-      }
++        if (app && QThread::currentThread() == app->thread()) {
++            mainContext = g_main_context_default();
++            g_main_context_ref(mainContext);
++        } else {
++            mainContext = g_main_context_new();
++        }
+     }
++    // setup post event source
+     postEventSource = reinterpret_cast<GPostEventSource *>(g_source_new(&postEventSourceFuncs,
+                                                                         sizeof(GPostEventSource)));
+     postEventSource->serialNumber = 1;
+@@ -257,14 +324,21 @@ QEventDispatcherGlibPrivate::QEventDispatcherGlibPrivate(GMainContext *context)
+     g_source_set_can_recurse(&socketNotifierSource->source, true);
+     g_source_attach(&socketNotifierSource->source, mainContext);
+-    // setup timerSource
++    // setup normal and idle timer sources
+     timerSource = reinterpret_cast<GTimerSource *>(g_source_new(&timerSourceFuncs,
+                                                                 sizeof(GTimerSource)));
+     (void) new (&timerSource->timerList) QTimerInfoList();
+     timerSource->processEventsFlags = QEventLoop::AllEvents;
++    timerSource->runWithIdlePriority = false;
+     g_source_set_can_recurse(&timerSource->source, true);
+-    g_source_set_priority(&timerSource->source, G_PRIORITY_DEFAULT_IDLE);
+     g_source_attach(&timerSource->source, mainContext);
++
++    idleTimerSource = reinterpret_cast<GIdleTimerSource *>(g_source_new(&idleTimerSourceFuncs,
++                                                                        sizeof(GIdleTimerSource)));
++    idleTimerSource->timerSource = timerSource;
++    g_source_set_can_recurse(&idleTimerSource->source, true);
++    g_source_set_priority(&idleTimerSource->source, G_PRIORITY_DEFAULT_IDLE);
++    g_source_attach(&idleTimerSource->source, mainContext);
+ }
+ QEventDispatcherGlib::QEventDispatcherGlib(QObject *parent)
+@@ -272,12 +346,9 @@ QEventDispatcherGlib::QEventDispatcherGlib(QObject *parent)
+ {
+ }
+-QEventDispatcherGlib::QEventDispatcherGlib(GMainContext *mainContext,
+-                                         QObject *parent)
+-    : QAbstractEventDispatcher(*(new QEventDispatcherGlibPrivate(mainContext)),
+-                             parent)
+-{
+-}
++QEventDispatcherGlib::QEventDispatcherGlib(GMainContext *mainContext, QObject *parent)
++    : QAbstractEventDispatcher(*(new QEventDispatcherGlibPrivate(mainContext)), parent)
++{ }
+ QEventDispatcherGlib::~QEventDispatcherGlib()
+ {
+@@ -289,6 +360,9 @@ QEventDispatcherGlib::~QEventDispatcherGlib()
+     g_source_destroy(&d->timerSource->source);
+     g_source_unref(&d->timerSource->source);
+     d->timerSource = 0;
++    g_source_destroy(&d->idleTimerSource->source);
++    g_source_unref(&d->idleTimerSource->source);
++    d->idleTimerSource = 0;
+     // destroy socket notifier source
+     for (int i = 0; i < d->socketNotifierSource->pollfds.count(); ++i) {
+@@ -324,11 +398,16 @@ bool QEventDispatcherGlib::processEvents(QEventLoop::ProcessEventsFlags flags)
+     // tell postEventSourcePrepare() and timerSource about any new flags
+     QEventLoop::ProcessEventsFlags savedFlags = d->timerSource->processEventsFlags;
+     d->timerSource->processEventsFlags = flags;
+-    
++
++    if (!(flags & QEventLoop::EventLoopExec)) {
++        // force timers to be sent at normal priority
++        d->timerSource->runWithIdlePriority = false;
++    }
++
+     bool result = g_main_context_iteration(d->mainContext, canWait);
+     while (!result && canWait)
+         result = g_main_context_iteration(d->mainContext, canWait);
+-    
++
+     d->timerSource->processEventsFlags = savedFlags;
+     if (canWait)
+diff --git a/src/corelib/kernel/qeventdispatcher_glib_p.h b/src/corelib/kernel/qeventdispatcher_glib_p.h
+index eb7fb75..4103aa3 100644
+--- a/src/corelib/kernel/qeventdispatcher_glib_p.h
++++ b/src/corelib/kernel/qeventdispatcher_glib_p.h
+@@ -98,6 +98,7 @@ protected:
+ struct GPostEventSource;
+ struct GSocketNotifierSource;
+ struct GTimerSource;
++struct GIdleTimerSource;
+ class Q_CORE_EXPORT QEventDispatcherGlibPrivate : public QAbstractEventDispatcherPrivate
+ {
+@@ -108,6 +109,7 @@ public:
+     GPostEventSource *postEventSource;
+     GSocketNotifierSource *socketNotifierSource;
+     GTimerSource *timerSource;
++    GIdleTimerSource *idleTimerSource;
+ };
+ QT_END_NAMESPACE
+diff --git a/src/corelib/kernel/qeventdispatcher_unix.cpp b/src/corelib/kernel/qeventdispatcher_unix.cpp
+index 897bb49..903b0eb 100644
+--- a/src/corelib/kernel/qeventdispatcher_unix.cpp
++++ b/src/corelib/kernel/qeventdispatcher_unix.cpp
+@@ -423,10 +423,10 @@ bool QTimerInfoList::timerWait(timeval &tm)
+     // Find first waiting timer not already active
+     QTimerInfo *t = 0;
+     for (QTimerInfoList::const_iterator it = constBegin(); it != constEnd(); ++it) {
+-      if (!(*it)->inTimerEvent) {
+-          t = *it;
+-          break;
+-      }
++        if (!(*it)->inTimerEvent) {
++            t = *it;
++            break;
++        }
+     }
+     if (!t)
+diff --git a/src/corelib/kernel/qobject.cpp b/src/corelib/kernel/qobject.cpp
+index 1ed0332..089ddfc 100644
+--- a/src/corelib/kernel/qobject.cpp
++++ b/src/corelib/kernel/qobject.cpp
+@@ -986,8 +986,16 @@ void QObject::setObjectName(const QString &name)
+ {
+     Q_D(QObject);
+     d->objectName = name;
++#if defined(Q_WS_X11)
++    d->checkWindowRole();
++#endif
+ }
++#if defined(Q_WS_X11)
++void QObjectPrivate::checkWindowRole()
++{
++}
++#endif
+ #ifdef QT3_SUPPORT
+ /*! \internal
+diff --git a/src/corelib/kernel/qobject_p.h b/src/corelib/kernel/qobject_p.h
+index 6ca4dc8..1551472 100644
+--- a/src/corelib/kernel/qobject_p.h
++++ b/src/corelib/kernel/qobject_p.h
+@@ -83,7 +83,9 @@ extern QSignalSpyCallbackSet Q_CORE_EXPORT qt_signal_spy_callback_set;
+ inline QObjectData::~QObjectData() {}
+-enum { QObjectPrivateVersion = QT_VERSION };
++// add 0x1000000 to mark it as qt-copy version, with possible modifications
++// in some Q*Private class
++enum { QObjectPrivateVersion = QT_VERSION + 0x1000000 };
+ class Q_CORE_EXPORT QObjectPrivate : public QObjectData
+ {
+@@ -144,6 +146,9 @@ public:
+     mutable quint32 connectedSignals;
+     QString objectName;
++#if defined(Q_WS_X11)
++    virtual void checkWindowRole();
++#endif
+     // Note: you must hold the signalSlotLock() before accessing the lists below or calling the functions
+     struct Connection
+diff --git a/src/dbus/qdbusinternalfilters.cpp b/src/dbus/qdbusinternalfilters.cpp
+index 828e427..8bbdd7b 100644
+--- a/src/dbus/qdbusinternalfilters.cpp
++++ b/src/dbus/qdbusinternalfilters.cpp
+@@ -274,9 +274,23 @@ QDBusMessage qDBusPropertySet(const QDBusConnectionPrivate::ObjectTreeNode &node
+             QDBusAdaptorConnector::AdaptorMap::ConstIterator it;
+             it = qLowerBound(connector->adaptors.constBegin(), connector->adaptors.constEnd(),
+                              interface_name);
+-            if (it != connector->adaptors.end() && interface_name == QLatin1String(it->interface))
++            if (it != connector->adaptors.end() && interface_name == QLatin1String(it->interface)) {
++                if (value.userType() == qMetaTypeId<QDBusArgument>()) {
++                    QDBusArgument valueArg = qvariant_cast<QDBusArgument>(value);
++                    if (valueArg.currentType() != -1) {
++                        int mid = it->adaptor->metaObject()->property(it->adaptor->metaObject()->indexOfProperty(property_name)).userType();
++                        void *null = 0;
++                        QVariant valueStore(mid, null);
++                        QDBusMetaType::demarshall(valueArg, mid, valueStore.data());
++
++                        if (it->adaptor->setProperty(property_name, valueStore))
++                            return msg.createReply();
++                    }
++                }
++
+                 if (it->adaptor->setProperty(property_name, value))
+                     return msg.createReply();
++            }
+         }
+     }
+diff --git a/src/gui/image/qnativeimage.cpp b/src/gui/image/qnativeimage.cpp
+index 50088df..c1bc794 100644
+--- a/src/gui/image/qnativeimage.cpp
++++ b/src/gui/image/qnativeimage.cpp
+@@ -144,7 +144,7 @@ QImage::Format QNativeImage::systemFormat()
+ #elif defined(Q_WS_X11) && !defined(QT_NO_MITSHM)
+ QNativeImage::QNativeImage(int width, int height, QImage::Format format,bool /* isTextBuffer */, QWidget *widget)
+-    : xshmimg(0), xshmpm(0)
++    : xshmimg(0)
+ {
+     if (!X11->use_mitshm) {
+         image = QImage(width, height, format);
+@@ -195,11 +195,6 @@ QNativeImage::QNativeImage(int width, int height, QImage::Format format,bool /*
+             shmctl(xshminfo.shmid, IPC_RMID, 0);
+         return;
+     }
+-    xshmpm = XShmCreatePixmap(X11->display, DefaultRootWindow(X11->display), xshmimg->data,
+-                              &xshminfo, width, height, dd);
+-    if (!xshmpm) {
+-        qWarning() << "QNativeImage: Unable to create shared Pixmap.";
+-    }
+ }
+@@ -208,10 +203,6 @@ QNativeImage::~QNativeImage()
+     if (!xshmimg)
+         return;
+-    if (xshmpm) {
+-        XFreePixmap(X11->display, xshmpm);
+-        xshmpm = 0;
+-    }
+     XShmDetach(X11->display, &xshminfo);
+     xshmimg->data = 0;
+     XDestroyImage(xshmimg);
+diff --git a/src/gui/image/qnativeimage_p.h b/src/gui/image/qnativeimage_p.h
+index 0f5dc8b..cd3cc3b 100644
+--- a/src/gui/image/qnativeimage_p.h
++++ b/src/gui/image/qnativeimage_p.h
+@@ -90,7 +90,6 @@ public:
+ #elif defined(Q_WS_X11) && !defined(QT_NO_MITSHM)
+     XImage *xshmimg;
+-    Pixmap xshmpm;
+     XShmSegmentInfo xshminfo;
+ #elif defined(Q_WS_MAC)
+diff --git a/src/gui/itemviews/qtreeview.cpp b/src/gui/itemviews/qtreeview.cpp
+index a69ab6a..93f4fd8 100644
+--- a/src/gui/itemviews/qtreeview.cpp
++++ b/src/gui/itemviews/qtreeview.cpp
+@@ -3577,7 +3577,7 @@ QList<QPair<int, int> > QTreeViewPrivate::columnRanges(const QModelIndex &topInd
+     current.first = -2; // -1 is not enough because -1+1 = 0
+     current.second = -2;
+     foreach (int logicalColumn, logicalIndexes) {
+-        if (current.second + 1 != logicalColumn) {
++        if (current.second + 1 != logicalColumn && !header->isSectionHidden(current.second + 1)) {
+             if (current.first != -2) {
+                 //let's save the current one
+                 ret += current;
+diff --git a/src/gui/kernel/qapplication_x11.cpp b/src/gui/kernel/qapplication_x11.cpp
+index 343c71b..45e2b49 100644
+--- a/src/gui/kernel/qapplication_x11.cpp
++++ b/src/gui/kernel/qapplication_x11.cpp
+@@ -1959,7 +1959,7 @@ void qt_init(QApplicationPrivate *priv, int,
+             bool local = displayName.isEmpty() || displayName.lastIndexOf(QLatin1Char(':')) == 0;
+             if (local && (qgetenv("QT_X11_NO_MITSHM").toInt() == 0)) {
+                 Visual *defaultVisual = DefaultVisual(X11->display, DefaultScreen(X11->display));
+-                X11->use_mitshm = mitshm_pixmaps && ((defaultVisual->red_mask == 0xff0000
++                X11->use_mitshm = ((defaultVisual->red_mask == 0xff0000
+                                                       || defaultVisual->red_mask == 0xf800)
+                                                      && (defaultVisual->green_mask == 0xff00
+                                                          || defaultVisual->green_mask == 0x7e0)
+diff --git a/src/gui/kernel/qkeymapper_x11.cpp b/src/gui/kernel/qkeymapper_x11.cpp
+index 8daa881..37d12c2 100644
+--- a/src/gui/kernel/qkeymapper_x11.cpp
++++ b/src/gui/kernel/qkeymapper_x11.cpp
+@@ -714,47 +714,144 @@ extern bool qt_sm_blockUserInput;
+ #define XK_KP_Delete            0xFF9F
+ #endif
+-// the next lines are taken from XFree > 4.0 (X11/XF86keysyms.h), defining some special
++// the next lines are taken on 10/2009 from X.org (X11/XF86keysym.h), defining some special
+ // multimedia keys. They are included here as not every system has them.
+-#define XF86XK_Standby          0x1008FF10
+-#define XF86XK_AudioLowerVolume 0x1008FF11
+-#define XF86XK_AudioMute        0x1008FF12
+-#define XF86XK_AudioRaiseVolume 0x1008FF13
+-#define XF86XK_AudioPlay        0x1008FF14
+-#define XF86XK_AudioStop        0x1008FF15
+-#define XF86XK_AudioPrev        0x1008FF16
+-#define XF86XK_AudioNext        0x1008FF17
+-#define XF86XK_HomePage         0x1008FF18
+-#define XF86XK_Calculator       0x1008FF1D
+-#define XF86XK_Mail             0x1008FF19
+-#define XF86XK_Start            0x1008FF1A
+-#define XF86XK_Search           0x1008FF1B
+-#define XF86XK_AudioRecord      0x1008FF1C
+-#define XF86XK_Back             0x1008FF26
+-#define XF86XK_Forward          0x1008FF27
+-#define XF86XK_Stop             0x1008FF28
+-#define XF86XK_Refresh          0x1008FF29
+-#define XF86XK_Favorites        0x1008FF30
+-#define XF86XK_AudioPause       0x1008FF31
+-#define XF86XK_AudioMedia       0x1008FF32
+-#define XF86XK_MyComputer       0x1008FF33
+-#define XF86XK_OpenURL          0x1008FF38
+-#define XF86XK_Launch0          0x1008FF40
+-#define XF86XK_Launch1          0x1008FF41
+-#define XF86XK_Launch2          0x1008FF42
+-#define XF86XK_Launch3          0x1008FF43
+-#define XF86XK_Launch4          0x1008FF44
+-#define XF86XK_Launch5          0x1008FF45
+-#define XF86XK_Launch6          0x1008FF46
+-#define XF86XK_Launch7          0x1008FF47
+-#define XF86XK_Launch8          0x1008FF48
+-#define XF86XK_Launch9          0x1008FF49
+-#define XF86XK_LaunchA          0x1008FF4A
+-#define XF86XK_LaunchB          0x1008FF4B
+-#define XF86XK_LaunchC          0x1008FF4C
+-#define XF86XK_LaunchD          0x1008FF4D
+-#define XF86XK_LaunchE          0x1008FF4E
+-#define XF86XK_LaunchF          0x1008FF4F
++#define XF86XK_MonBrightnessUp     0x1008FF02
++#define XF86XK_MonBrightnessDown   0x1008FF03
++#define XF86XK_KbdLightOnOff       0x1008FF04
++#define XF86XK_KbdBrightnessUp     0x1008FF05
++#define XF86XK_KbdBrightnessDown   0x1008FF06
++#define XF86XK_Standby             0x1008FF10
++#define XF86XK_AudioLowerVolume          0x1008FF11
++#define XF86XK_AudioMute           0x1008FF12
++#define XF86XK_AudioRaiseVolume    0x1008FF13
++#define XF86XK_AudioPlay           0x1008FF14
++#define XF86XK_AudioStop           0x1008FF15
++#define XF86XK_AudioPrev           0x1008FF16
++#define XF86XK_AudioNext           0x1008FF17
++#define XF86XK_HomePage            0x1008FF18
++#define XF86XK_Mail                0x1008FF19
++#define XF86XK_Start               0x1008FF1A
++#define XF86XK_Search              0x1008FF1B
++#define XF86XK_AudioRecord         0x1008FF1C
++#define XF86XK_Calculator          0x1008FF1D
++#define XF86XK_Memo                0x1008FF1E
++#define XF86XK_ToDoList            0x1008FF1F
++#define XF86XK_Calendar            0x1008FF20
++#define XF86XK_PowerDown           0x1008FF21
++#define XF86XK_ContrastAdjust      0x1008FF22
++#define XF86XK_Back                0x1008FF26
++#define XF86XK_Forward             0x1008FF27
++#define XF86XK_Stop                0x1008FF28
++#define XF86XK_Refresh             0x1008FF29
++#define XF86XK_PowerOff            0x1008FF2A
++#define XF86XK_WakeUp              0x1008FF2B
++#define XF86XK_Eject               0x1008FF2C
++#define XF86XK_ScreenSaver         0x1008FF2D
++#define XF86XK_WWW                 0x1008FF2E
++#define XF86XK_Sleep               0x1008FF2F
++#define XF86XK_Favorites           0x1008FF30
++#define XF86XK_AudioPause          0x1008FF31
++#define XF86XK_AudioMedia          0x1008FF32
++#define XF86XK_MyComputer          0x1008FF33
++#define XF86XK_LightBulb           0x1008FF35
++#define XF86XK_Shop                0x1008FF36
++#define XF86XK_History             0x1008FF37
++#define XF86XK_OpenURL             0x1008FF38
++#define XF86XK_AddFavorite         0x1008FF39
++#define XF86XK_HotLinks            0x1008FF3A
++#define XF86XK_BrightnessAdjust    0x1008FF3B
++#define XF86XK_Finance             0x1008FF3C
++#define XF86XK_Community           0x1008FF3D
++#define XF86XK_AudioRewind         0x1008FF3E
++#define XF86XK_BackForward         0x1008FF3F
++#define XF86XK_Launch0             0x1008FF40
++#define XF86XK_Launch1             0x1008FF41
++#define XF86XK_Launch2             0x1008FF42
++#define XF86XK_Launch3             0x1008FF43
++#define XF86XK_Launch4             0x1008FF44
++#define XF86XK_Launch5             0x1008FF45
++#define XF86XK_Launch6             0x1008FF46
++#define XF86XK_Launch7             0x1008FF47
++#define XF86XK_Launch8             0x1008FF48
++#define XF86XK_Launch9             0x1008FF49
++#define XF86XK_LaunchA             0x1008FF4A
++#define XF86XK_LaunchB             0x1008FF4B
++#define XF86XK_LaunchC             0x1008FF4C
++#define XF86XK_LaunchD             0x1008FF4D
++#define XF86XK_LaunchE             0x1008FF4E
++#define XF86XK_LaunchF             0x1008FF4F
++#define XF86XK_ApplicationLeft     0x1008FF50
++#define XF86XK_ApplicationRight    0x1008FF51
++#define XF86XK_Book                0x1008FF52
++#define XF86XK_CD                  0x1008FF53
++#define XF86XK_Calculater          0x1008FF54
++#define XF86XK_Clear               0x1008FF55
++#define XF86XK_ClearGrab           0x1008FE21
++#define XF86XK_Close               0x1008FF56
++#define XF86XK_Copy                0x1008FF57
++#define XF86XK_Cut                 0x1008FF58
++#define XF86XK_Display             0x1008FF59
++#define XF86XK_DOS                 0x1008FF5A
++#define XF86XK_Documents           0x1008FF5B
++#define XF86XK_Excel               0x1008FF5C
++#define XF86XK_Explorer            0x1008FF5D
++#define XF86XK_Game                0x1008FF5E
++#define XF86XK_Go                  0x1008FF5F
++#define XF86XK_iTouch              0x1008FF60
++#define XF86XK_LogOff              0x1008FF61
++#define XF86XK_Market              0x1008FF62
++#define XF86XK_Meeting             0x1008FF63
++#define XF86XK_MenuKB              0x1008FF65
++#define XF86XK_MenuPB              0x1008FF66
++#define XF86XK_MySites             0x1008FF67
++#define XF86XK_News                0x1008FF69
++#define XF86XK_OfficeHome          0x1008FF6A
++#define XF86XK_Option              0x1008FF6C
++#define XF86XK_Paste               0x1008FF6D
++#define XF86XK_Phone               0x1008FF6E
++#define XF86XK_Reply               0x1008FF72
++#define XF86XK_Reload              0x1008FF73
++#define XF86XK_RotateWindows       0x1008FF74
++#define XF86XK_RotationPB          0x1008FF75
++#define XF86XK_RotationKB          0x1008FF76
++#define XF86XK_Save                0x1008FF77
++#define XF86XK_Send                0x1008FF7B
++#define XF86XK_Spell               0x1008FF7C
++#define XF86XK_SplitScreen         0x1008FF7D
++#define XF86XK_Support             0x1008FF7E
++#define XF86XK_TaskPane            0x1008FF7F
++#define XF86XK_Terminal            0x1008FF80
++#define XF86XK_Tools               0x1008FF81
++#define XF86XK_Travel              0x1008FF82
++#define XF86XK_Video               0x1008FF87
++#define XF86XK_Word                0x1008FF89
++#define XF86XK_Xfer                0x1008FF8A
++#define XF86XK_ZoomIn              0x1008FF8B
++#define XF86XK_ZoomOut             0x1008FF8C
++#define XF86XK_Away                0x1008FF8D
++#define XF86XK_Messenger           0x1008FF8E
++#define XF86XK_WebCam              0x1008FF8F
++#define XF86XK_MailForward         0x1008FF90
++#define XF86XK_Pictures            0x1008FF91
++#define XF86XK_Music               0x1008FF92
++#define XF86XK_Battery             0x1008FF93
++#define XF86XK_Bluetooth           0x1008FF94
++#define XF86XK_WLAN                0x1008FF95
++#define XF86XK_UWB                 0x1008FF96
++#define XF86XK_AudioForward        0x1008FF97
++#define XF86XK_AudioRepeat         0x1008FF98
++#define XF86XK_AudioRandomPlay     0x1008FF99
++#define XF86XK_Subtitle            0x1008FF9A
++#define XF86XK_AudioCycleTrack     0x1008FF9B
++#define XF86XK_Time                0x1008FF9F
++#define XF86XK_Select              0x1008FFA0
++#define XF86XK_View                0x1008FFA1
++#define XF86XK_TopMenu             0x1008FFA2
++#define XF86XK_Suspend             0x1008FFA7
++#define XF86XK_Hibernate           0x1008FFA8
++
++
+ // end of XF86keysyms.h
+ // Special keys used by Qtopia, mapped into the X11 private keypad range.
+@@ -942,10 +1039,8 @@ static const unsigned int KeyTbl[] = {
+     XK_dead_hook,               Qt::Key_Dead_Hook,
+     XK_dead_horn,               Qt::Key_Dead_Horn,
+-    // Special multimedia keys
+-    // currently only tested with MS internet keyboard
+-
+-    // browsing keys
++    // Special keys from X.org - This include multimedia keys,
++      // wireless/bluetooth/uwb keys, special launcher keys, etc.
+     XF86XK_Back,                Qt::Key_Back,
+     XF86XK_Forward,             Qt::Key_Forward,
+     XF86XK_Stop,                Qt::Key_Stop,
+@@ -955,8 +1050,6 @@ static const unsigned int KeyTbl[] = {
+     XF86XK_OpenURL,             Qt::Key_OpenUrl,
+     XF86XK_HomePage,            Qt::Key_HomePage,
+     XF86XK_Search,              Qt::Key_Search,
+-
+-    // media keys
+     XF86XK_AudioLowerVolume,    Qt::Key_VolumeDown,
+     XF86XK_AudioMute,           Qt::Key_VolumeMute,
+     XF86XK_AudioRaiseVolume,    Qt::Key_VolumeUp,
+@@ -965,13 +1058,106 @@ static const unsigned int KeyTbl[] = {
+     XF86XK_AudioPrev,           Qt::Key_MediaPrevious,
+     XF86XK_AudioNext,           Qt::Key_MediaNext,
+     XF86XK_AudioRecord,         Qt::Key_MediaRecord,
+-
+-    // launch keys
+     XF86XK_Mail,                Qt::Key_LaunchMail,
+     XF86XK_MyComputer,          Qt::Key_Launch0,
+-    XF86XK_Calculator,          Qt::Key_Launch1,
++    XF86XK_Calculator,          Qt::Key_Calculator,
++    XF86XK_Memo,                Qt::Key_Memo,
++    XF86XK_ToDoList,            Qt::Key_ToDoList,
++    XF86XK_Calendar,            Qt::Key_Calendar,
++    XF86XK_PowerDown,           Qt::Key_PowerDown,
++    XF86XK_ContrastAdjust,      Qt::Key_ContrastAdjust,
+     XF86XK_Standby,             Qt::Key_Standby,
+-
++    XF86XK_MonBrightnessUp,     Qt::Key_MonBrightnessUp,
++    XF86XK_MonBrightnessDown,   Qt::Key_MonBrightnessDown,
++    XF86XK_KbdLightOnOff,       Qt::Key_KeyboardLightOnOff,
++    XF86XK_KbdBrightnessUp,     Qt::Key_KeyboardBrightnessUp,
++    XF86XK_KbdBrightnessDown,   Qt::Key_KeyboardBrightnessDown,
++    XF86XK_PowerOff,            Qt::Key_PowerOff,
++    XF86XK_WakeUp,              Qt::Key_WakeUp,
++    XF86XK_Eject,               Qt::Key_Eject,
++    XF86XK_ScreenSaver,         Qt::Key_ScreenSaver,
++    XF86XK_WWW,                 Qt::Key_WWW,
++    XF86XK_Sleep,               Qt::Key_Sleep,
++    XF86XK_LightBulb,           Qt::Key_LightBulb,
++    XF86XK_Shop,                Qt::Key_Shop,
++    XF86XK_History,             Qt::Key_History,
++    XF86XK_AddFavorite,         Qt::Key_AddFavorite,
++    XF86XK_HotLinks,            Qt::Key_HotLinks,
++    XF86XK_BrightnessAdjust,    Qt::Key_BrightnessAdjust,
++    XF86XK_Finance,             Qt::Key_Finance,
++    XF86XK_Community,           Qt::Key_Community,
++    XF86XK_AudioRewind,         Qt::Key_AudioRewind,
++    XF86XK_BackForward,         Qt::Key_BackForward,
++    XF86XK_ApplicationLeft,     Qt::Key_ApplicationLeft,
++    XF86XK_ApplicationRight,    Qt::Key_ApplicationRight,
++    XF86XK_Book,                Qt::Key_Book,
++    XF86XK_CD,                  Qt::Key_CD,
++    XF86XK_Calculater,          Qt::Key_Calculator,
++    XF86XK_Clear,               Qt::Key_Clear,
++    XF86XK_ClearGrab,           Qt::Key_ClearGrab,
++    XF86XK_Close,               Qt::Key_Close,
++    XF86XK_Copy,                Qt::Key_Copy,
++    XF86XK_Cut,                 Qt::Key_Cut,
++    XF86XK_Display,             Qt::Key_Display,
++    XF86XK_DOS,                 Qt::Key_DOS,
++    XF86XK_Documents,           Qt::Key_Documents,
++    XF86XK_Excel,               Qt::Key_Excel,
++    XF86XK_Explorer,            Qt::Key_Explorer,
++    XF86XK_Game,                Qt::Key_Game,
++    XF86XK_Go,                  Qt::Key_Go,
++    XF86XK_iTouch,              Qt::Key_iTouch,
++    XF86XK_LogOff,              Qt::Key_LogOff,
++    XF86XK_Market,              Qt::Key_Market,
++    XF86XK_Meeting,             Qt::Key_Meeting,
++    XF86XK_MenuKB,              Qt::Key_MenuKB,
++    XF86XK_MenuPB,              Qt::Key_MenuPB,
++    XF86XK_MySites,             Qt::Key_MySites,
++    XF86XK_News,                Qt::Key_News,
++    XF86XK_OfficeHome,          Qt::Key_OfficeHome,
++    XF86XK_Option,              Qt::Key_Option,
++    XF86XK_Paste,               Qt::Key_Paste,
++    XF86XK_Phone,               Qt::Key_Phone,
++    XF86XK_Reply,               Qt::Key_Reply,
++    XF86XK_Reload,              Qt::Key_Reload,
++    XF86XK_RotateWindows,       Qt::Key_RotateWindows,
++    XF86XK_RotationPB,          Qt::Key_RotationPB,
++    XF86XK_RotationKB,          Qt::Key_RotationKB,
++    XF86XK_Save,                Qt::Key_Save,
++    XF86XK_Send,                Qt::Key_Send,
++    XF86XK_Spell,               Qt::Key_Spell,
++    XF86XK_SplitScreen,         Qt::Key_SplitScreen,
++    XF86XK_Support,             Qt::Key_Support,
++    XF86XK_TaskPane,            Qt::Key_TaskPane,
++    XF86XK_Terminal,            Qt::Key_Terminal,
++    XF86XK_Tools,               Qt::Key_Tools,
++    XF86XK_Travel,              Qt::Key_Travel,
++    XF86XK_Video,               Qt::Key_Video,
++    XF86XK_Word,                Qt::Key_Word,
++    XF86XK_Xfer,                Qt::Key_Xfer,
++    XF86XK_ZoomIn,              Qt::Key_ZoomIn,
++    XF86XK_ZoomOut,             Qt::Key_ZoomOut,
++    XF86XK_Away,                Qt::Key_Away,
++    XF86XK_Messenger,           Qt::Key_Messenger,
++    XF86XK_WebCam,              Qt::Key_WebCam,
++    XF86XK_MailForward,         Qt::Key_MailForward,
++    XF86XK_Pictures,            Qt::Key_Pictures,
++    XF86XK_Music,               Qt::Key_Music,
++    XF86XK_Battery,             Qt::Key_Battery,
++    XF86XK_Bluetooth,           Qt::Key_Bluetooth,
++    XF86XK_WLAN,                Qt::Key_WLAN,
++    XF86XK_UWB,                 Qt::Key_UWB,
++    XF86XK_AudioForward,        Qt::Key_AudioForward,
++    XF86XK_AudioRepeat,         Qt::Key_AudioRepeat,
++    XF86XK_AudioRandomPlay,     Qt::Key_AudioRandomPlay,
++    XF86XK_Subtitle,            Qt::Key_Subtitle,
++    XF86XK_AudioCycleTrack,     Qt::Key_AudioCycleTrack,
++    XF86XK_Time,                Qt::Key_Time,
++    XF86XK_Select,              Qt::Key_Select,
++    XF86XK_View,                Qt::Key_View,
++    XF86XK_TopMenu,             Qt::Key_TopMenu,
++    XF86XK_Bluetooth,           Qt::Key_Bluetooth,
++    XF86XK_Suspend,             Qt::Key_Suspend,
++    XF86XK_Hibernate,           Qt::Key_Hibernate,
+     XF86XK_Launch0,             Qt::Key_Launch2,
+     XF86XK_Launch1,             Qt::Key_Launch3,
+     XF86XK_Launch2,             Qt::Key_Launch4,
+diff --git a/src/gui/kernel/qkeysequence.cpp b/src/gui/kernel/qkeysequence.cpp
+index 03de530..97591a4 100644
+--- a/src/gui/kernel/qkeysequence.cpp
++++ b/src/gui/kernel/qkeysequence.cpp
+@@ -396,47 +396,139 @@ static const struct {
+     { Qt::Key_Menu,         QT_TRANSLATE_NOOP("QShortcut", "Menu") },
+     { Qt::Key_Help,         QT_TRANSLATE_NOOP("QShortcut", "Help") },
+-    // Multimedia keys
+-    { Qt::Key_Back,         QT_TRANSLATE_NOOP("QShortcut", "Back") },
+-    { Qt::Key_Forward,      QT_TRANSLATE_NOOP("QShortcut", "Forward") },
+-    { Qt::Key_Stop,         QT_TRANSLATE_NOOP("QShortcut", "Stop") },
+-    { Qt::Key_Refresh,      QT_TRANSLATE_NOOP("QShortcut", "Refresh") },
+-    { Qt::Key_VolumeDown,   QT_TRANSLATE_NOOP("QShortcut", "Volume Down") },
+-    { Qt::Key_VolumeMute,   QT_TRANSLATE_NOOP("QShortcut", "Volume Mute") },
+-    { Qt::Key_VolumeUp,     QT_TRANSLATE_NOOP("QShortcut", "Volume Up") },
+-    { Qt::Key_BassBoost,    QT_TRANSLATE_NOOP("QShortcut", "Bass Boost") },
+-    { Qt::Key_BassUp,       QT_TRANSLATE_NOOP("QShortcut", "Bass Up") },
+-    { Qt::Key_BassDown,     QT_TRANSLATE_NOOP("QShortcut", "Bass Down") },
+-    { Qt::Key_TrebleUp,     QT_TRANSLATE_NOOP("QShortcut", "Treble Up") },
+-    { Qt::Key_TrebleDown,   QT_TRANSLATE_NOOP("QShortcut", "Treble Down") },
+-    { Qt::Key_MediaPlay,    QT_TRANSLATE_NOOP("QShortcut", "Media Play") },
+-    { Qt::Key_MediaStop,    QT_TRANSLATE_NOOP("QShortcut", "Media Stop") },
+-    { Qt::Key_MediaPrevious,QT_TRANSLATE_NOOP("QShortcut", "Media Previous") },
+-    { Qt::Key_MediaNext,    QT_TRANSLATE_NOOP("QShortcut", "Media Next") },
+-    { Qt::Key_MediaRecord,  QT_TRANSLATE_NOOP("QShortcut", "Media Record") },
+-    { Qt::Key_HomePage,     QT_TRANSLATE_NOOP("QShortcut", "Home Page") },
+-    { Qt::Key_Favorites,    QT_TRANSLATE_NOOP("QShortcut", "Favorites") },
+-    { Qt::Key_Search,       QT_TRANSLATE_NOOP("QShortcut", "Search") },
+-    { Qt::Key_Standby,      QT_TRANSLATE_NOOP("QShortcut", "Standby") },
+-    { Qt::Key_OpenUrl,      QT_TRANSLATE_NOOP("QShortcut", "Open URL") },
+-    { Qt::Key_LaunchMail,   QT_TRANSLATE_NOOP("QShortcut", "Launch Mail") },
+-    { Qt::Key_LaunchMedia,  QT_TRANSLATE_NOOP("QShortcut", "Launch Media") },
+-    { Qt::Key_Launch0,      QT_TRANSLATE_NOOP("QShortcut", "Launch (0)") },
+-    { Qt::Key_Launch1,      QT_TRANSLATE_NOOP("QShortcut", "Launch (1)") },
+-    { Qt::Key_Launch2,      QT_TRANSLATE_NOOP("QShortcut", "Launch (2)") },
+-    { Qt::Key_Launch3,      QT_TRANSLATE_NOOP("QShortcut", "Launch (3)") },
+-    { Qt::Key_Launch4,      QT_TRANSLATE_NOOP("QShortcut", "Launch (4)") },
+-    { Qt::Key_Launch5,      QT_TRANSLATE_NOOP("QShortcut", "Launch (5)") },
+-    { Qt::Key_Launch6,      QT_TRANSLATE_NOOP("QShortcut", "Launch (6)") },
+-    { Qt::Key_Launch7,      QT_TRANSLATE_NOOP("QShortcut", "Launch (7)") },
+-    { Qt::Key_Launch8,      QT_TRANSLATE_NOOP("QShortcut", "Launch (8)") },
+-    { Qt::Key_Launch9,      QT_TRANSLATE_NOOP("QShortcut", "Launch (9)") },
+-    { Qt::Key_LaunchA,      QT_TRANSLATE_NOOP("QShortcut", "Launch (A)") },
+-    { Qt::Key_LaunchB,      QT_TRANSLATE_NOOP("QShortcut", "Launch (B)") },
+-    { Qt::Key_LaunchC,      QT_TRANSLATE_NOOP("QShortcut", "Launch (C)") },
+-    { Qt::Key_LaunchD,      QT_TRANSLATE_NOOP("QShortcut", "Launch (D)") },
+-    { Qt::Key_LaunchE,      QT_TRANSLATE_NOOP("QShortcut", "Launch (E)") },
+-    { Qt::Key_LaunchF,      QT_TRANSLATE_NOOP("QShortcut", "Launch (F)") },
++    // Special keys
++    // Includes multimedia, launcher, lan keys ( bluetooth, wireless )
++    // window navigation
++    { Qt::Key_Back,                       QT_TRANSLATE_NOOP("QShortcut", "Back") },
++    { Qt::Key_Forward,                    QT_TRANSLATE_NOOP("QShortcut", "Forward") },
++    { Qt::Key_Stop,                       QT_TRANSLATE_NOOP("QShortcut", "Stop") },
++    { Qt::Key_Refresh,                    QT_TRANSLATE_NOOP("QShortcut", "Refresh") },
++    { Qt::Key_VolumeDown,                 QT_TRANSLATE_NOOP("QShortcut", "Volume Down") },
++    { Qt::Key_VolumeMute,                 QT_TRANSLATE_NOOP("QShortcut", "Volume Mute") },
++    { Qt::Key_VolumeUp,                   QT_TRANSLATE_NOOP("QShortcut", "Volume Up") },
++    { Qt::Key_BassBoost,                  QT_TRANSLATE_NOOP("QShortcut", "Bass Boost") },
++    { Qt::Key_BassUp,                     QT_TRANSLATE_NOOP("QShortcut", "Bass Up") },
++    { Qt::Key_BassDown,                   QT_TRANSLATE_NOOP("QShortcut", "Bass Down") },
++    { Qt::Key_TrebleUp,                   QT_TRANSLATE_NOOP("QShortcut", "Treble Up") },
++    { Qt::Key_TrebleDown,                 QT_TRANSLATE_NOOP("QShortcut", "Treble Down") },
++    { Qt::Key_MediaPlay,                  QT_TRANSLATE_NOOP("QShortcut", "Media Play") },
++    { Qt::Key_MediaStop,                  QT_TRANSLATE_NOOP("QShortcut", "Media Stop") },
++    { Qt::Key_MediaPrevious,              QT_TRANSLATE_NOOP("QShortcut", "Media Previous") },
++    { Qt::Key_MediaNext,                  QT_TRANSLATE_NOOP("QShortcut", "Media Next") },
++    { Qt::Key_MediaRecord,                QT_TRANSLATE_NOOP("QShortcut", "Media Record") },
++    { Qt::Key_HomePage,                   QT_TRANSLATE_NOOP("QShortcut", "Home Page") },
++    { Qt::Key_Favorites,                  QT_TRANSLATE_NOOP("QShortcut", "Favorites") },
++    { Qt::Key_Search,                     QT_TRANSLATE_NOOP("QShortcut", "Search") },
++    { Qt::Key_Standby,                    QT_TRANSLATE_NOOP("QShortcut", "Standby") },
++    { Qt::Key_OpenUrl,                    QT_TRANSLATE_NOOP("QShortcut", "Open URL") },
++    { Qt::Key_LaunchMail,                 QT_TRANSLATE_NOOP("QShortcut", "Launch Mail") },
++    { Qt::Key_LaunchMedia,                QT_TRANSLATE_NOOP("QShortcut", "Launch Media") },
++    { Qt::Key_Launch0,                    QT_TRANSLATE_NOOP("QShortcut", "Launch (0)") },
++    { Qt::Key_Launch1,                    QT_TRANSLATE_NOOP("QShortcut", "Launch (1)") },
++    { Qt::Key_Launch2,                    QT_TRANSLATE_NOOP("QShortcut", "Launch (2)") },
++    { Qt::Key_Launch3,                    QT_TRANSLATE_NOOP("QShortcut", "Launch (3)") },
++    { Qt::Key_Launch4,                    QT_TRANSLATE_NOOP("QShortcut", "Launch (4)") },
++    { Qt::Key_Launch5,                    QT_TRANSLATE_NOOP("QShortcut", "Launch (5)") },
++    { Qt::Key_Launch6,                    QT_TRANSLATE_NOOP("QShortcut", "Launch (6)") },
++    { Qt::Key_Launch7,                    QT_TRANSLATE_NOOP("QShortcut", "Launch (7)") },
++    { Qt::Key_Launch8,                    QT_TRANSLATE_NOOP("QShortcut", "Launch (8)") },
++    { Qt::Key_Launch9,                    QT_TRANSLATE_NOOP("QShortcut", "Launch (9)") },
++    { Qt::Key_LaunchA,                    QT_TRANSLATE_NOOP("QShortcut", "Launch (A)") },
++    { Qt::Key_LaunchB,                    QT_TRANSLATE_NOOP("QShortcut", "Launch (B)") },
++    { Qt::Key_LaunchC,                    QT_TRANSLATE_NOOP("QShortcut", "Launch (C)") },
++    { Qt::Key_LaunchD,                    QT_TRANSLATE_NOOP("QShortcut", "Launch (D)") },
++    { Qt::Key_LaunchE,                    QT_TRANSLATE_NOOP("QShortcut", "Launch (E)") },
++    { Qt::Key_LaunchF,                    QT_TRANSLATE_NOOP("QShortcut", "Launch (F)") },
++    { Qt::Key_MonBrightnessUp,            QT_TRANSLATE_NOOP("QShortcut", "Monitor Brightness Up") },
++    { Qt::Key_MonBrightnessDown,          QT_TRANSLATE_NOOP("QShortcut", "Monitor Brightness Down") },
++    { Qt::Key_KeyboardLightOnOff,         QT_TRANSLATE_NOOP("QShortcut", "Keyboard Light On/Off") },
++    { Qt::Key_KeyboardBrightnessUp,       QT_TRANSLATE_NOOP("QShortcut", "Keyboard Brightness Up") },
++    { Qt::Key_KeyboardBrightnessDown,     QT_TRANSLATE_NOOP("QShortcut", "Keyboard Brightness Down") },
++    { Qt::Key_PowerOff,                   QT_TRANSLATE_NOOP("QShortcut", "Power Off") },
++    { Qt::Key_WakeUp,                     QT_TRANSLATE_NOOP("QShortcut", "Wake Up") },
++    { Qt::Key_Eject,                      QT_TRANSLATE_NOOP("QShortcut", "Eject") },
++    { Qt::Key_ScreenSaver,                QT_TRANSLATE_NOOP("QShortcut", "Screensaver") },
++    { Qt::Key_WWW,                        QT_TRANSLATE_NOOP("QShortcut", "WWW") },
++    { Qt::Key_Sleep,                      QT_TRANSLATE_NOOP("QShortcut", "Sleep") },
++    { Qt::Key_LightBulb,                  QT_TRANSLATE_NOOP("QShortcut", "LightBulb") },
++    { Qt::Key_Shop,                       QT_TRANSLATE_NOOP("QShortcut", "Shop") },
++    { Qt::Key_History,                    QT_TRANSLATE_NOOP("QShortcut", "History") },
++    { Qt::Key_AddFavorite,                QT_TRANSLATE_NOOP("QShortcut", "Add Favorite") },
++    { Qt::Key_HotLinks,                   QT_TRANSLATE_NOOP("QShortcut", "Hot Links") },
++    { Qt::Key_BrightnessAdjust,           QT_TRANSLATE_NOOP("QShortcut", "Adjust Brightness") },
++    { Qt::Key_Finance,                    QT_TRANSLATE_NOOP("QShortcut", "Finance") },
++    { Qt::Key_Community,                  QT_TRANSLATE_NOOP("QShortcut", "Community") },
++    { Qt::Key_AudioRewind,                QT_TRANSLATE_NOOP("QShortcut", "Audio Rewind") },
++    { Qt::Key_BackForward,                QT_TRANSLATE_NOOP("QShortcut", "Back Forward") },
++    { Qt::Key_ApplicationLeft,            QT_TRANSLATE_NOOP("QShortcut", "Application Left") },
++    { Qt::Key_ApplicationRight,           QT_TRANSLATE_NOOP("QShortcut", "Application Right") },
++    { Qt::Key_Book,                       QT_TRANSLATE_NOOP("QShortcut", "Book") },
++    { Qt::Key_CD,                         QT_TRANSLATE_NOOP("QShortcut", "CD") },
++    { Qt::Key_Calculator,                 QT_TRANSLATE_NOOP("QShortcut", "Calculator") },
++    { Qt::Key_Clear,                      QT_TRANSLATE_NOOP("QShortcut", "Clear") },
++    { Qt::Key_ClearGrab,                  QT_TRANSLATE_NOOP("QShortcut", "Clear Grab") },
++    { Qt::Key_Close,                      QT_TRANSLATE_NOOP("QShortcut", "Close") },
++    { Qt::Key_Copy,                       QT_TRANSLATE_NOOP("QShortcut", "Copy") },
++    { Qt::Key_Cut,                        QT_TRANSLATE_NOOP("QShortcut", "Cut") },
++    { Qt::Key_Display,                    QT_TRANSLATE_NOOP("QShortcut", "Display") },
++    { Qt::Key_DOS,                        QT_TRANSLATE_NOOP("QShortcut", "DOS") },
++    { Qt::Key_Documents,                  QT_TRANSLATE_NOOP("QShortcut", "Documents") },
++    { Qt::Key_Excel,                      QT_TRANSLATE_NOOP("QShortcut", "Spreadsheet") },
++    { Qt::Key_Explorer,                   QT_TRANSLATE_NOOP("QShortcut", "Browser") },
++    { Qt::Key_Game,                       QT_TRANSLATE_NOOP("QShortcut", "Game") },
++    { Qt::Key_Go,                         QT_TRANSLATE_NOOP("QShortcut", "Go") },
++    { Qt::Key_iTouch,                     QT_TRANSLATE_NOOP("QShortcut", "iTouch") },
++    { Qt::Key_LogOff,                     QT_TRANSLATE_NOOP("QShortcut", "Logoff") },
++    { Qt::Key_Market,                     QT_TRANSLATE_NOOP("QShortcut", "Market") },
++    { Qt::Key_Meeting,                    QT_TRANSLATE_NOOP("QShortcut", "Meeting") },
++    { Qt::Key_MenuKB,                     QT_TRANSLATE_NOOP("QShortcut", "Keyboard Menu") },
++    { Qt::Key_MenuPB,                     QT_TRANSLATE_NOOP("QShortcut", "Menu PB") },
++    { Qt::Key_MySites,                    QT_TRANSLATE_NOOP("QShortcut", "My Sites") },
++    { Qt::Key_News,                       QT_TRANSLATE_NOOP("QShortcut", "News") },
++    { Qt::Key_OfficeHome,                 QT_TRANSLATE_NOOP("QShortcut", "Home Office") },
++    { Qt::Key_Option,                     QT_TRANSLATE_NOOP("QShortcut", "Option") },
++    { Qt::Key_Paste,                      QT_TRANSLATE_NOOP("QShortcut", "Paste") },
++    { Qt::Key_Phone,                      QT_TRANSLATE_NOOP("QShortcut", "Phone") },
++    { Qt::Key_Reply,                      QT_TRANSLATE_NOOP("QShortcut", "Reply") },
++    { Qt::Key_Reload,                     QT_TRANSLATE_NOOP("QShortcut", "Reload") },
++    { Qt::Key_RotateWindows,              QT_TRANSLATE_NOOP("QShortcut", "Rotate Windows") },
++    { Qt::Key_RotationPB,                 QT_TRANSLATE_NOOP("QShortcut", "Rotation PB") },
++    { Qt::Key_RotationKB,                 QT_TRANSLATE_NOOP("QShortcut", "Rotation KB") },
++    { Qt::Key_Save,                       QT_TRANSLATE_NOOP("QShortcut", "Save") },
++    { Qt::Key_Send,                       QT_TRANSLATE_NOOP("QShortcut", "Send") },
++    { Qt::Key_Spell,                      QT_TRANSLATE_NOOP("QShortcut", "Spellchecker") },
++    { Qt::Key_SplitScreen,                QT_TRANSLATE_NOOP("QShortcut", "Split Screen") },
++    { Qt::Key_Support,                    QT_TRANSLATE_NOOP("QShortcut", "Support") },
++    { Qt::Key_TaskPane,                   QT_TRANSLATE_NOOP("QShortcut", "Task Panel") },
++    { Qt::Key_Terminal,                   QT_TRANSLATE_NOOP("QShortcut", "Terminal") },
++    { Qt::Key_Tools,                      QT_TRANSLATE_NOOP("QShortcut", "Tools") },
++    { Qt::Key_Travel,                     QT_TRANSLATE_NOOP("QShortcut", "Travel") },
++    { Qt::Key_Video,                      QT_TRANSLATE_NOOP("QShortcut", "Video") },
++    { Qt::Key_Word,                       QT_TRANSLATE_NOOP("QShortcut", "Word Processor") },
++    { Qt::Key_Xfer,                       QT_TRANSLATE_NOOP("QShortcut", "XFer") },
++    { Qt::Key_ZoomIn,                     QT_TRANSLATE_NOOP("QShortcut", "Zoom In") },
++    { Qt::Key_ZoomOut,                    QT_TRANSLATE_NOOP("QShortcut", "Zoom Out") },
++    { Qt::Key_Away,                       QT_TRANSLATE_NOOP("QShortcut", "Away") },
++    { Qt::Key_Messenger,                  QT_TRANSLATE_NOOP("QShortcut", "Messenger") },
++    { Qt::Key_WebCam,                     QT_TRANSLATE_NOOP("QShortcut", "WebCam") },
++    { Qt::Key_MailForward,                QT_TRANSLATE_NOOP("QShortcut", "Mail Forward") },
++    { Qt::Key_Pictures,                   QT_TRANSLATE_NOOP("QShortcut", "Pictures") },
++    { Qt::Key_Music,                      QT_TRANSLATE_NOOP("QShortcut", "Music") },
++    { Qt::Key_Battery,                    QT_TRANSLATE_NOOP("QShortcut", "Battery") },
++    { Qt::Key_Bluetooth,                  QT_TRANSLATE_NOOP("QShortcut", "Bluetooth") },
++    { Qt::Key_WLAN,                       QT_TRANSLATE_NOOP("QShortcut", "Wireless") },
++    { Qt::Key_UWB,                        QT_TRANSLATE_NOOP("QShortcut", "Ultra Wide Band") },
++    { Qt::Key_AudioForward,               QT_TRANSLATE_NOOP("QShortcut", "Audio Forward") },
++    { Qt::Key_AudioRepeat,                QT_TRANSLATE_NOOP("QShortcut", "Audio Repeat") },
++    { Qt::Key_AudioRandomPlay,            QT_TRANSLATE_NOOP("QShortcut", "Audio Random Play") },
++    { Qt::Key_Subtitle,                   QT_TRANSLATE_NOOP("QShortcut", "Subtitle") },
++    { Qt::Key_AudioCycleTrack,            QT_TRANSLATE_NOOP("QShortcut", "Audio Cycle Track") },
++    { Qt::Key_Time,                       QT_TRANSLATE_NOOP("QShortcut", "Time") },
++    { Qt::Key_Select,                     QT_TRANSLATE_NOOP("QShortcut", "Select") },
++    { Qt::Key_View,                       QT_TRANSLATE_NOOP("QShortcut", "View") },
++    { Qt::Key_TopMenu,                    QT_TRANSLATE_NOOP("QShortcut", "Top Menu") },
++    { Qt::Key_Suspend,                    QT_TRANSLATE_NOOP("QShortcut", "Suspend") },
++    { Qt::Key_Hibernate,                  QT_TRANSLATE_NOOP("QShortcut", "Hibernate") },
+     // --------------------------------------------------------------
+     // More consistent namings
+@@ -991,10 +1083,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
+@@ -1086,7 +1178,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;
+ }
+@@ -1111,13 +1203,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);
+     }
+@@ -1132,7 +1224,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 145d7bb..db943fc 100644
+--- a/src/gui/kernel/qwidget_p.h
++++ b/src/gui/kernel/qwidget_p.h
+@@ -360,6 +360,7 @@ public:
+ #if defined(Q_WS_X11)
+     void setWindowRole();
++    virtual void checkWindowRole();
+     void sendStartupMessage(const char *message) const;
+     void setNetWmWindowTypes();
+     void x11UpdateIsOpaque();
+diff --git a/src/gui/kernel/qwidget_x11.cpp b/src/gui/kernel/qwidget_x11.cpp
+index 4cc255d..927d739 100644
+--- a/src/gui/kernel/qwidget_x11.cpp
++++ b/src/gui/kernel/qwidget_x11.cpp
+@@ -719,6 +719,11 @@ void QWidgetPrivate::create_sys(WId window, bool initializeWindow, bool destroyO
+         Q_ASSERT(id);
+         XChangeWindowAttributes(dpy, id, CWOverrideRedirect | CWSaveUnder,
+                                 &wsa);
++        XClassHint class_hint;
++        QByteArray appName = qAppName().toLatin1();
++        class_hint.res_name = appName.data(); // application name
++        class_hint.res_class = const_cast<char *>(QX11Info::appClass());   // application class
++        XSetWMProperties(dpy, id, 0, 0, 0, 0, 0, 0, &class_hint);
+     } else if (topLevel && !desktop) {        // top-level widget
+         if (!X11->wm_client_leader)
+             create_wm_client_leader();
+@@ -769,32 +774,40 @@ void QWidgetPrivate::create_sys(WId window, bool initializeWindow, bool destroyO
+         // set EWMH window types
+         setNetWmWindowTypes();
++        // when we create a toplevel widget, the frame strut should be dirty
++        data.fstrut_dirty = 1;
++
++    } else {
++        // non-toplevel widgets don't have a frame, so no need to
++        // update the strut
++        data.fstrut_dirty = 0;
++    }
++
++    if (initializeWindow && (popup || (topLevel && !desktop))) { // properties set on all toplevel windows
+         // set _NET_WM_PID
+         long curr_pid = getpid();
+         XChangeProperty(dpy, id, ATOM(_NET_WM_PID), XA_CARDINAL, 32, PropModeReplace,
+                         (unsigned char *) &curr_pid, 1);
+-        // when we create a toplevel widget, the frame strut should be dirty
+-        data.fstrut_dirty = 1;
+         // declare the widget's window role
++        QByteArray windowRole;
+         if (QTLWExtra *topData = maybeTopData()) {
+-            if (!topData->role.isEmpty()) {
+-                QByteArray windowRole = topData->role.toUtf8();
+-                XChangeProperty(dpy, id,
+-                                ATOM(WM_WINDOW_ROLE), XA_STRING, 8, PropModeReplace,
+-                                (unsigned char *)windowRole.constData(), windowRole.length());
+-            }
++            if (!topData->role.isEmpty())
++                windowRole = topData->role.toUtf8();
++        }
++        if (windowRole.isEmpty()) // use object name as a fallback
++            windowRole = objectName.toUtf8();
++        if (!windowRole.isEmpty()) {
++            XChangeProperty(dpy, id,
++                            ATOM(WM_WINDOW_ROLE), XA_STRING, 8, PropModeReplace,
++                            (unsigned char *)windowRole.constData(), windowRole.length());
+         }
+         // set client leader property
+         XChangeProperty(dpy, id, ATOM(WM_CLIENT_LEADER),
+                         XA_WINDOW, 32, PropModeReplace,
+                         (unsigned char *)&X11->wm_client_leader, 1);
+-    } else {
+-        // non-toplevel widgets don't have a frame, so no need to
+-        // update the strut
+-        data.fstrut_dirty = 0;
+     }
+     if (initializeWindow && q->internalWinId()) {
+@@ -2765,6 +2778,17 @@ void QWidgetPrivate::setWindowRole()
+                     (unsigned char *)windowRole.constData(), windowRole.length());
+ }
++void QWidgetPrivate::checkWindowRole()
++{
++    Q_Q(QWidget);
++    if( !q->windowRole().isEmpty() || !q->internalWinId())
++        return;
++    QByteArray windowRole = objectName.toUtf8(); // use as a fallback
++    XChangeProperty(X11->display, q->internalWinId(),
++                    ATOM(WM_WINDOW_ROLE), XA_STRING, 8, PropModeReplace,
++                    (unsigned char *)windowRole.constData(), windowRole.length());
++}
++
+ Q_GLOBAL_STATIC(QX11PaintEngine, qt_widget_paintengine)
+ QPaintEngine *QWidget::paintEngine() const
+ {
+diff --git a/src/gui/painting/qwindowsurface_raster.cpp b/src/gui/painting/qwindowsurface_raster.cpp
+index e077d0d..424e525 100644
+--- a/src/gui/painting/qwindowsurface_raster.cpp
++++ b/src/gui/painting/qwindowsurface_raster.cpp
+@@ -220,9 +220,16 @@ void QRasterWindowSurface::flush(QWidget *widget, const QRegion &rgn, const QPoi
+     QRect br = rgn.boundingRect().translated(offset);
+ #ifndef QT_NO_MITSHM
+-    if (d_ptr->image->xshmpm) {
+-        XCopyArea(X11->display, d_ptr->image->xshmpm, widget->handle(), d_ptr->gc,
+-                  br.x(), br.y(), br.width(), br.height(), wbr.x(), wbr.y());
++    if (d_ptr->image->xshmimg && (br.width() * br.height() > 65536)) {
++        const QImage &src = d->image->image;
++        br = br.intersected(src.rect());
++        // Hack to make sure we satisify the PutImage() constraints in the X server,
++        // since the doShmPutImage() route currently forces a migration to system ram.
++        wbr.setX(wbr.x() - br.x());
++        br.setX(0);
++        br.setWidth(src.width());
++        XShmPutImage(X11->display, widget->handle(), d_ptr->gc, d_ptr->image->xshmimg,
++                     br.x(), br.y(), wbr.x(), wbr.y(), br.width(), br.height(), False);
+         XSync(X11->display, False);
+     } else
+ #endif
+diff --git a/src/gui/widgets/qmenu.cpp b/src/gui/widgets/qmenu.cpp
+index 7793b80..5e5c7cf 100644
+--- a/src/gui/widgets/qmenu.cpp
++++ b/src/gui/widgets/qmenu.cpp
+@@ -280,7 +280,7 @@ void QMenuPrivate::calcActionRects(QMap<QAction*, QRect> &actionRects, QList<QAc
+         if (!sz.isEmpty()) {
+-            max_column_width = qMax(max_column_width, sz.width());
++            max_column_width = qMax(q->minimumWidth(), qMax(max_column_width, sz.width()));
+             //wrapping
+             if (!scroll &&
+                y+sz.height()+vmargin > dh - (q->style()->pixelMetric(QStyle::PM_MenuDesktopFrameWidth, 0, q) * 2)) {
+diff --git a/src/gui/widgets/qtabbar.cpp b/src/gui/widgets/qtabbar.cpp
+index 8a87b75..0fbc116 100644
+--- a/src/gui/widgets/qtabbar.cpp
++++ b/src/gui/widgets/qtabbar.cpp
+@@ -675,8 +675,8 @@ void QTabBarPrivate::refresh()
+         layoutTabs();
+         makeVisible(currentIndex);
+         q->update();
+-        q->updateGeometry();
+     }
++    q->updateGeometry();
+ }
+ /*!
+diff --git a/src/tools/moc/main.cpp b/src/tools/moc/main.cpp
+index d1cb82c..54537e5 100644
+--- a/src/tools/moc/main.cpp
++++ b/src/tools/moc/main.cpp
+@@ -94,7 +94,13 @@ static QByteArray combinePath(const char *infile, const char *outfile)
+         inSplitted.prepend(QLatin1String(".."));
+     }
+     inSplitted.append(inFileInfo.fileName());
++#ifdef Q_WS_WIN
++    const QString rel = inSplitted.join(QLatin1String("/"));
++    const QString abs = inFileInfo.absoluteFilePath();
++    return QFile::encodeName(rel.length() < abs.length() ? rel : abs);
++#else
+     return QFile::encodeName(inSplitted.join(QLatin1String("/")));
++#endif
+ }
index 75bc214c85eb7d227d28b0ad42955a97d0dafd0e..074c0eb3f94c12c2113bd6b5c18fcc54374d014a 100644 (file)
--- a/qt4.spec
+++ b/qt4.spec
@@ -76,7 +76,7 @@ Summary(pl.UTF-8):    Biblioteka Qt do tworzenia GUI
 Summary(pt_BR.UTF-8):  Estrutura para rodar aplicações GUI Qt
 Name:          qt4
 Version:       4.5.3
-Release:       3
+Release:       4
 License:       LGPL v2.1 or GPL v3.0
 Group:         X11/Libraries
 Source0:       http://download.qtsoftware.com/qt/source/qt-x11-opensource-src-%{version}.tar.gz
@@ -86,18 +86,10 @@ Source3:    %{name}-designer.desktop
 Source4:       %{name}-assistant.desktop
 Source5:       %{name}-linguist.desktop
 
-Patch100:      0118-qtcopy-define.diff
-Patch101:      0180-window-role.diff
-Patch102:      0195-compositing-properties.diff
-Patch103:      0209-prevent-qt-mixing.diff
-Patch104:      0216-allow-isystem-for-headers.diff
-Patch105:      0225-invalidate-tabbar-geometry-on-refresh.patch
-Patch108:      0280-deserialization-custom-dbus-properties.diff
-Patch109:      0253-qmake_correct_path_separators.diff
-Patch110:      0255-qtreeview-selection-columns-hidden.diff
-Patch111:      0269-msvc-webkit-compile.diff
-Patch115:      0283-do-not-deduce-scrollbar-extent-twice.diff
-Patch116:      0285-qgv-dontshowchildren.diff
+# git clone git://gitorious.org/+kde-developers/qt/kde-qt.git
+# git checkout -b 4.5.3-patched origin/4.5.3-patched
+# git diff v4.5.3..4.5.3-patched > qt4-kde-git.patch
+Patch100:      %{name}-kde-git.patch
 
 Patch0:                %{name}-tools.patch
 Patch1:                %{name}-qt_copy.patch
@@ -1318,18 +1310,7 @@ Programas exemplo para o Qt versão.
 %prep
 %setup -q -n qt-x11-opensource-src-%{version}
 
-%patch100 -p0
-%patch101 -p0
-%patch102 -p0
-%patch103 -p0
-%patch104 -p0
-%patch105 -p0
-%patch108 -p0
-%patch109 -p0
-%patch110 -p0
-%patch111 -p0
-%patch115 -p0
-%patch116 -p0
+%patch100 -p1
 
 %patch0 -p1
 %patch1 -p0
This page took 0.135246 seconds and 4 git commands to generate.