diff --git a/README.kde-qt b/README.kde-qt
new file mode 100644
-index 0000000..db3feb6
+index 0000000..512f034
--- /dev/null
+++ b/README.kde-qt
-@@ -0,0 +1,201 @@
+@@ -0,0 +1,270 @@
+This is a patched version of Qt. It may include changes made by KDE
+and Qt developers that have either not been accepted for inclusion
+into Qt, or have been accepted for a later version of Qt than this
+official Qt release.
+
+The exception to the above rule is that if the fix has been accepted
-+by Qt Software (and so will appear in the very next release of Qt),
-+then it should be simply cherry-picked from the Qt development
++by the Qt developers (and so will appear in the very next release of
++Qt), then it should be simply cherry-picked from the Qt development
+branch. Note that you shouldn't do this for changes that have been
-+accepted into a release which is not the very next.
-+In this case, you should use the following command:
++accepted into a release which is not the very next. In this case, you
++should use the following command:
+
+ git cherry-pick -x SHA1_OF_THE_FIX
+where SHA1_OF_THE_FIX is the SHA-1 of the commit that you want to
+introduce. Then push the change to the server.
+
-+Before creating a patch, it is recommended to contact Qt Software
-+support via qt-bugs@trolltech.com and explain the situation. There may
-+be a solution for the problem already or a new direction that should
-+be accounted for.
++In all other cases, before creating a patch, it is recommended to
++contact the Qt developers via a new task in
++http://bugreports.qt.nokia.com and explain the situation. There may be
++a solution for the problem already or a new direction that should be
++accounted for.
+
+To create a patch, do the following:
+ a) look at the listing of branches in
+ git tag
+
+ c) make your changes to the Qt source code and verify that it
-+ compiles, links and works (please run the respective unit tests).
++ compiles, links and works (please run the respective unit tests from
++ tests/auto in the source tree).
+
+ c) commit your changes to Git, using the "git commit" command. Please
+ see http://qt.gitorious.org/qt/pages/GitIntroductionWithQt and
+ http://qt.gitorious.org/qt/pages/QtCodingStyle for information on
+ how to create commits
-+ Note that you can create multiple commits.
+
-+ e) merge the change to the main branch, for example, 4.5.1-patched:
++ Note that you are allowed to create as many commits as necessary to
++ accomplish a working change that can be easily reviewed.
++
++ e) merge the change to the patch branch, for example, 4.5.1-patched:
+ git checkout 4.5.1-patched
+ git merge patches/0180-window-role
+
-+ f) push the changes you made to your branch and to the main server:
-+ git push git@gitorious.org:qt/kde-qt.git 4.5.1-patched patches/0180-window-role
-+ (Don't forget to list both branch names)
++ f) merge the patch branch to master:
++ git checkout master
++ git merge 4.5.1-patched
++
++ g) push the changes you made to your branch and to the main server:
++ git push git@gitorious.org:qt/kde-qt.git master 4.5.1-patched patches/0180-window-role
++ (Don't forget to list all 3 branch names)
+
+Don't forget to submit your patch to using the Qt Contribution Model,
+along with the long description of the issue found. See
+server.
+
+9. Troubleshooting: Re-configuring and re-compiling
-+==================================================
++===================================================
+
+For those updating the source in a directory where Qt has already
+been compiled, you may need to run the following commands from the
+
+Sometimes ./configure will refuse to run. You may need to:
+ rm .qmake.cache
++ rm src/corelib/global/qconfig.*
+
+If you think you may have run "make install" on an install-less Qt
+(srcdir == $QTDIR), run:
+
+ rm -rf include
+ bin/syncqt
++
++10. Maintenance: updating kde-qt to a newer Qt version
++======================================================
++
++When a new version of Qt is released, do the following to update the
++repository (assuming Qt 4.6.1 is the release you're updating to):
++
++ a) rebase each of the individual patches against this new version.
++ for branch in patches/*; do
++ git checkout -b $branch origin/$branch
++ git rebase v4.6.1
++ resolve conflicts
++ done # Note: pseudo-shell, don't try to run this
++
++ If a given branch is no longer valid (it's been applied to this Qt
++ version), then delete it on the server:
++ git push origin :$branch
++
++ b) create a new "patched" branch locally, starting on the release tag:
++ git checkout -b 4.6.1-patched v4.6.1
++
++ c) merge the patch branches and the README branch, one by one. There
++ should be no conflicts at this stage; if there are, it indicates
++ one patch conflicts with another.
++ git merge patches/0997-patch1
++ git merge patches/0998-patch2
++ git merge patches/0999-patch3
++ # etc.
++ git merge README
++
++ d) overwrite the master branch's contents with the new branch. If the
++ Git merge strategy "theirs" exist (it doesn't as of Git 1.6), use
++ it:
++ git checkout master
++ git merge -s theirs 4.6.1-patched
++
++ If it doesn't exist, do the equivalent by inverting the point of
++ view:
++ git checkout -b tmp 4.6.1-patched
++ git merge -s ours master
++ git checkout master
++ git merge tmp
++ git branch -d tmp
++
++ Also possible using Git plumbing:
++ git checkout master
++ git merge -s ours --no-commit 4.6.1-patched
++ rm .git/index
++ git read-tree 4.6.1-patched
++ git commit
++
++ e) push everything to kde-qt.git, including the new Qt. Note that
++ the individiual patch branches will require force, because they
++ have been rebased (that is, the new branch tip is no longer a
++ direct descendant of the previous tip).
++
++ # Push the individual patch branches with force
++ git push -f origin patches/0997-patch1 patches/0998-patch2 patches/0999-patch3 etc
++ # Push the tag, the new patched branch and master
++ git push v4.6.1 4.6.1-patched master
diff --git a/bin/syncqt b/bin/syncqt
-index edabeca..e71d480 100755
+index c73d119..9e10576 100755
--- a/bin/syncqt
+++ b/bin/syncqt
-@@ -363,9 +363,13 @@ sub fixPaths {
+@@ -382,9 +382,13 @@ sub fixPaths {
$match_dir = $tmp;
$i = $slash;
}
for(my $i = 0; $i < $count; $i++) {
$dots .= "../";
diff --git a/configure b/configure
-index 4ea1ad0..b28a1fa 100755
+index 0d9df16..b88fc3e 100755
--- a/configure
+++ b/configure
-@@ -960,6 +960,11 @@ while [ "$#" -gt 0 ]; do
- VAL=`echo $1 | sed 's,-D,,'`
+@@ -1058,6 +1058,11 @@ while [ "$#" -gt 0 ]; do
+ VAL=$1
fi
;;
+ -isystem)
-I?*|-I)
VAR="add_ipath"
if [ "$1" = "-I" ]; then
-@@ -1930,6 +1935,9 @@ while [ "$#" -gt 0 ]; do
+@@ -2182,6 +2187,9 @@ while [ "$#" -gt 0 ]; do
add_ipath)
I_FLAGS="$I_FLAGS -I\"${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
+index 8bfc353..22a847a 100644
--- a/qmake/property.cpp
+++ b/qmake/property.cpp
-@@ -81,29 +81,32 @@ QMakeProperty::keyBase(bool version) const
+@@ -81,31 +81,34 @@ QMakeProperty::keyBase(bool version) const
QString
QMakeProperty::value(QString v, bool just_check)
{
else if(v == "QT_INSTALL_PLUGINS")
- return QLibraryInfo::location(QLibraryInfo::PluginsPath);
+ ret = QLibraryInfo::location(QLibraryInfo::PluginsPath);
+ else if(v == "QT_INSTALL_IMPORTS")
+- return QLibraryInfo::location(QLibraryInfo::ImportsPath);
++ ret = QLibraryInfo::location(QLibraryInfo::ImportsPath);
else if(v == "QT_INSTALL_TRANSLATIONS")
- return QLibraryInfo::location(QLibraryInfo::TranslationsPath);
+ ret = QLibraryInfo::location(QLibraryInfo::TranslationsPath);
+ if(!ret.isEmpty())
+ return QDir::toNativeSeparators(ret);
+ if(v == "QMAKE_MKSPECS")
- return qmake_mkspec_paths().join(Option::target_mode == Option::TARG_WIN_MODE ? ";" : ":");
+ return qmake_mkspec_paths().join(Option::dirlist_sep);
else if(v == "QMAKE_VERSION")
return qmake_version();
-@@ -116,7 +119,7 @@ QMakeProperty::value(QString v, bool just_check)
+@@ -118,7 +121,7 @@ QMakeProperty::value(QString v, bool just_check)
int slash = v.lastIndexOf('/');
QVariant var = settings->value(keyBase(slash == -1) + v);
bool ok = var.isValid();
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
+index 2e2a0f4..239de2d 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;
+@@ -1101,8 +1101,18 @@
+
+ if (objectNameChanged)
+ d->declarativeData->objectNameChanged(d->declarativeData, this);
++
+#if defined(Q_WS_X11)
+ d->checkWindowRole();
+#endif
++
}
+#if defined(Q_WS_X11)
#ifdef QT3_SUPPORT
/*! \internal
diff --git a/src/corelib/kernel/qobject_p.h b/src/corelib/kernel/qobject_p.h
-index 6ca4dc8..1551472 100644
+index 2574b74..9f57417 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;
+@@ -82,7 +82,9 @@ void Q_CORE_EXPORT qt_register_signal_spy_callbacks(const QSignalSpyCallbackSet
- inline QObjectData::~QObjectData() {}
+ extern QSignalSpyCallbackSet Q_CORE_EXPORT qt_signal_spy_callback_set;
-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
+ class Q_CORE_EXPORT QAbstractDeclarativeData
{
-@@ -144,6 +146,9 @@ public:
- mutable quint32 connectedSignals;
-
- QString objectName;
+@@ -155,6 +157,9 @@ public:
+ #ifdef QT3_SUPPORT
+ void sendPendingChildInsertedEvents();
+ #endif
+#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;
+ static inline Sender *setCurrentSender(QObject *receiver,
+ Sender *sender);
diff --git a/src/gui/kernel/qwidget_p.h b/src/gui/kernel/qwidget_p.h
-index 145d7bb..db943fc 100644
+index 9662a9e..3160911 100644
--- a/src/gui/kernel/qwidget_p.h
+++ b/src/gui/kernel/qwidget_p.h
-@@ -360,6 +360,7 @@ public:
+@@ -757,6 +757,7 @@ public:
+ static QWidget *keyboardGrabber;
- #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
+index 09abb7b..5f43fee 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
+@@ -762,6 +762,11 @@ void QWidgetPrivate::create_sys(WId window, bool initializeWindow, bool destroyO
Q_ASSERT(id);
XChangeWindowAttributes(dpy, id, CWOverrideRedirect | CWSaveUnder,
&wsa);
} 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
+@@ -815,32 +820,40 @@ void QWidgetPrivate::create_sys(WId window, bool initializeWindow, bool destroyO
// set EWMH window types
setNetWmWindowTypes();
}
if (initializeWindow && q->internalWinId()) {
-@@ -2765,6 +2778,17 @@ void QWidgetPrivate::setWindowRole()
+@@ -2943,6 +2956,17 @@ void QWidgetPrivate::setWindowRole()
(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
+index 954478d..7c9099d 100644
--- a/src/gui/widgets/qtabbar.cpp
+++ b/src/gui/widgets/qtabbar.cpp
-@@ -675,8 +675,8 @@ void QTabBarPrivate::refresh()
+@@ -723,8 +723,8 @@ void QTabBarPrivate::refresh()
layoutTabs();
makeVisible(currentIndex);
q->update();
/*!
diff --git a/src/tools/moc/main.cpp b/src/tools/moc/main.cpp
-index d1cb82c..54537e5 100644
+index 81cdd93..f8b9a50 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)