diff --git a/0001-This-patch-uses-object-name-as-a-fallback-for-window.patch b/0001-This-patch-uses-object-name-as-a-fallback-for-window.patch new file mode 100644 index 0000000..1850cce --- /dev/null +++ b/0001-This-patch-uses-object-name-as-a-fallback-for-window.patch @@ -0,0 +1,117 @@ +From b48e2091871516496cf0b133249fbf5326a55831 Mon Sep 17 00:00:00 2001 +From: Lubos Lunak +Date: Sat, 23 Feb 2008 16:44:52 +0100 +Subject: [PATCH 01/13] 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). + +NOTE: It is suggested to apply patch #0209 as well when this patch is used. + +qt-bugs@ issue : 167704 +Trolltech task ID : 168283 (status: "fixed" for Qt 4.4.0, but effectively refused) +--- + src/corelib/kernel/qobject.cpp | 8 ++++++++ + src/corelib/kernel/qobject_p.h | 3 +++ + src/gui/kernel/qwidget_p.h | 1 + + src/gui/kernel/qwidget_x11.cpp | 27 +++++++++++++++++++++------ + 4 files changed, 33 insertions(+), 6 deletions(-) + +diff --git a/src/corelib/kernel/qobject.cpp b/src/corelib/kernel/qobject.cpp +index 6487194..ef0369e 100644 +--- a/src/corelib/kernel/qobject.cpp ++++ b/src/corelib/kernel/qobject.cpp +@@ -993,8 +993,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 0bcccba..6ab9e10 100644 +--- a/src/corelib/kernel/qobject_p.h ++++ b/src/corelib/kernel/qobject_p.h +@@ -144,6 +144,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/gui/kernel/qwidget_p.h b/src/gui/kernel/qwidget_p.h +index 774e390..176d6fa 100644 +--- a/src/gui/kernel/qwidget_p.h ++++ b/src/gui/kernel/qwidget_p.h +@@ -358,6 +358,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 79ee8c9..b56849c 100644 +--- a/src/gui/kernel/qwidget_x11.cpp ++++ b/src/gui/kernel/qwidget_x11.cpp +@@ -778,13 +778,17 @@ void QWidgetPrivate::create_sys(WId window, bool initializeWindow, bool destroyO + 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 +@@ -2768,6 +2772,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 + { +-- +1.6.5.1 + diff --git a/0002-This-patch-makes-override-redirect-windows-popup-men.patch b/0002-This-patch-makes-override-redirect-windows-popup-men.patch new file mode 100644 index 0000000..bb2588d --- /dev/null +++ b/0002-This-patch-makes-override-redirect-windows-popup-men.patch @@ -0,0 +1,67 @@ +From 339e220e29ff39b86705438b4be6f90e5618d27b Mon Sep 17 00:00:00 2001 +From: Lubos Lunak +Date: Tue, 2 Oct 2007 16:08:32 +0200 +Subject: [PATCH 02/13] 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. + +qt-bugs@ issue : none +bugs.kde.org number : none +--- + src/gui/kernel/qwidget_x11.cpp | 21 +++++++++++++++------ + 1 files changed, 15 insertions(+), 6 deletions(-) + +diff --git a/src/gui/kernel/qwidget_x11.cpp b/src/gui/kernel/qwidget_x11.cpp +index 79ee8c9..a74a849 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(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,13 +774,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()) { +@@ -791,10 +804,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()) { +-- +1.6.5.1 + diff --git a/0003-This-patch-changes-QObjectPrivateVersion-thus-preven.patch b/0003-This-patch-changes-QObjectPrivateVersion-thus-preven.patch new file mode 100644 index 0000000..f6b55e0 --- /dev/null +++ b/0003-This-patch-changes-QObjectPrivateVersion-thus-preven.patch @@ -0,0 +1,37 @@ +From 68eaa07de69e873b89d4aba341c6ed1ca81f6819 Mon Sep 17 00:00:00 2001 +From: Lubos Lunak +Date: Wed, 30 Jan 2008 14:24:01 +0100 +Subject: [PATCH 03/13] 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. + +qt-bugs@ issue : none +Trolltech task ID : none +bugs.kde.org number : none +--- + src/corelib/kernel/qobject_p.h | 4 +++- + 1 files changed, 3 insertions(+), 1 deletions(-) + +diff --git a/src/corelib/kernel/qobject_p.h b/src/corelib/kernel/qobject_p.h +index 0bcccba..88192fd 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 + { +-- +1.6.5.1 + diff --git a/0004-This-patch-adds-support-for-using-isystem-to-allow-p.patch b/0004-This-patch-adds-support-for-using-isystem-to-allow-p.patch new file mode 100644 index 0000000..4005734 --- /dev/null +++ b/0004-This-patch-adds-support-for-using-isystem-to-allow-p.patch @@ -0,0 +1,56 @@ +From 86fc0d43cdcf3232ae0e4e6f4f28cf8f1a45ede5 Mon Sep 17 00:00:00 2001 +From: Benjamin Reed +Date: Tue, 19 Feb 2008 17:37:37 +0100 +Subject: [PATCH 04/13] This patch adds support for using -isystem to allow putting an include + directory at the end of the compiler's header search path. + +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. + +qt-bugs@ issue : 199610 +Trolltech task ID : +bugs.kde.org number : +--- + configure | 8 ++++++++ + 1 files changed, 8 insertions(+), 0 deletions(-) + +diff --git a/configure b/configure +index 2c108ad..610a201 100755 +--- a/configure ++++ b/configure +@@ -927,6 +927,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 +@@ -1890,6 +1895,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}\"" + ;; +-- +1.6.5.1 + diff --git a/0005-When-tabs-are-inserted-or-removed-in-a-QTabBar.patch b/0005-When-tabs-are-inserted-or-removed-in-a-QTabBar.patch new file mode 100644 index 0000000..0386a47 --- /dev/null +++ b/0005-When-tabs-are-inserted-or-removed-in-a-QTabBar.patch @@ -0,0 +1,47 @@ +From 733d1afd03908d695aa8a6518f453b9ff0e5b8a2 Mon Sep 17 00:00:00 2001 +From: Robert Knight +Date: Sun, 20 Apr 2008 16:28:31 +0200 +Subject: [PATCH 05/13] 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. + +qt-bugs@ issue : 208185 +Trolltech task ID : 208349 +bugs.kde.org number : 159014 +--- + src/gui/widgets/qtabbar.cpp | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/src/gui/widgets/qtabbar.cpp b/src/gui/widgets/qtabbar.cpp +index 419d456..41107a0 100644 +--- a/src/gui/widgets/qtabbar.cpp ++++ b/src/gui/widgets/qtabbar.cpp +@@ -678,8 +678,8 @@ void QTabBarPrivate::refresh() + layoutTabs(); + makeVisible(currentIndex); + q->update(); +- q->updateGeometry(); + } ++ q->updateGeometry(); + } + + /*! +-- +1.6.5.1 + diff --git a/0006-Fix-configure.exe-to-do-an-out-of-source-build-on-wi.patch b/0006-Fix-configure.exe-to-do-an-out-of-source-build-on-wi.patch new file mode 100644 index 0000000..4999964 --- /dev/null +++ b/0006-Fix-configure.exe-to-do-an-out-of-source-build-on-wi.patch @@ -0,0 +1,67 @@ +From 8e28e0603a900e1b18ebfd14c4f87b16dabf4cf6 Mon Sep 17 00:00:00 2001 +From: Christian Ehrlicher +Date: Fri, 19 Sep 2008 17:41:26 +0200 +Subject: [PATCH 06/13] Fix configure.exe to do an out-of-source build on windows + +qt-bugs@ issue : N227213 +Trolltech task ID : none yet +--- + bin/syncqt | 6 +++++- + projects.pro | 3 +++ + src/tools/moc/main.cpp | 6 ++++++ + 3 files changed, 14 insertions(+), 1 deletions(-) + +diff --git a/bin/syncqt b/bin/syncqt +index 7a9f1d3..b5a8e1c 100755 +--- a/bin/syncqt ++++ b/bin/syncqt +@@ -365,9 +365,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/projects.pro b/projects.pro +index 2596c0a..3ba0688 100644 +--- a/projects.pro ++++ b/projects.pro +@@ -127,6 +127,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/src/tools/moc/main.cpp b/src/tools/moc/main.cpp +index d519b09..7979836 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 + } + + +-- +1.6.5.1 + diff --git a/0007-When-using-qmake-outside-qt-src-tree-it-sometimes-ge.patch b/0007-When-using-qmake-outside-qt-src-tree-it-sometimes-ge.patch new file mode 100644 index 0000000..e3b4370 --- /dev/null +++ b/0007-When-using-qmake-outside-qt-src-tree-it-sometimes-ge.patch @@ -0,0 +1,73 @@ +From 0afcf33127c6ccbe5dfaae4f4c5e02f28dc10ae1 Mon Sep 17 00:00:00 2001 +From: Christian Ehrlicher +Date: Thu, 8 May 2008 21:25:49 +0200 +Subject: [PATCH 07/13] When using qmake outside qt src tree, it sometimes generates wrong + paths (wrong path separator) + +qt-bugs@ issue : none +Trolltech task ID : 214661 +--- + qmake/property.cpp | 29 ++++++++++++++++------------- + 1 files changed, 16 insertions(+), 13 deletions(-) + +diff --git a/qmake/property.cpp b/qmake/property.cpp +index 8ba89f9..dd78349 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) { +-- +1.6.5.1 + diff --git a/0008-This-patch-makes-the-raster-graphics-system-use-shar.patch b/0008-This-patch-makes-the-raster-graphics-system-use-shar.patch new file mode 100644 index 0000000..a506a04 --- /dev/null +++ b/0008-This-patch-makes-the-raster-graphics-system-use-shar.patch @@ -0,0 +1,93 @@ +From 8731ab999b849dac4716e3d29f5f55ed8e56438e Mon Sep 17 00:00:00 2001 +From: Thiago Macieira +Date: Thu, 25 Jun 2009 13:50:29 +0200 +Subject: [PATCH 08/13] This patch makes the raster graphics system use shared images instead + of shared pixmaps. + +Shared memory pixmaps are deprecated since they are slower than shared +images with modern graphics hardware. They are also not supported by EXA +drivers and can be disabled in the latest version of the NVidia driver. + +qt-bugs@ issue : none +Qt Software task ID : none +bugs.kde.org number : none +--- + src/gui/image/qnativeimage.cpp | 10 ---------- + src/gui/image/qnativeimage_p.h | 1 - + src/gui/painting/qwindowsurface_raster.cpp | 13 ++++++++++--- + 3 files changed, 10 insertions(+), 14 deletions(-) + +diff --git a/src/gui/image/qnativeimage.cpp b/src/gui/image/qnativeimage.cpp +index 3745708..3c21fce 100644 +--- a/src/gui/image/qnativeimage.cpp ++++ b/src/gui/image/qnativeimage.cpp +@@ -147,7 +147,6 @@ QNativeImage::QNativeImage(int width, int height, QImage::Format format,bool /* + { + if (!X11->use_mitshm) { + xshmimg = 0; +- xshmpm = 0; + image = QImage(width, height, format); + return; + } +@@ -191,11 +190,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."; +- } + } + + +@@ -204,10 +198,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 07d5dfe..ba01854 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/painting/qwindowsurface_raster.cpp b/src/gui/painting/qwindowsurface_raster.cpp +index d6fb03b..09963d9 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 +-- +1.6.5.1 + diff --git a/0009-Restore-a-section-of-the-file-that-got-removed-due-t.patch b/0009-Restore-a-section-of-the-file-that-got-removed-due-t.patch new file mode 100644 index 0000000..8e6396e --- /dev/null +++ b/0009-Restore-a-section-of-the-file-that-got-removed-due-t.patch @@ -0,0 +1,30 @@ +From bb8255da422470c5012b6b1c4c24eb2afb6804dc Mon Sep 17 00:00:00 2001 +From: Thiago Macieira +Date: Fri, 26 Jun 2009 11:41:45 +0200 +Subject: [PATCH 09/13] Restore a section of the file that got removed due to conflict resolution. + +Thanks to Kevin Kofler for pointing this out +--- + src/gui/kernel/qapplication_x11.cpp | 6 +++--- + 1 files changed, 3 insertions(+), 3 deletions(-) + +diff --git a/src/gui/kernel/qapplication_x11.cpp b/src/gui/kernel/qapplication_x11.cpp +index 33aec9e..53f020b 100644 +--- a/src/gui/kernel/qapplication_x11.cpp ++++ b/src/gui/kernel/qapplication_x11.cpp +@@ -1955,9 +1955,9 @@ 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 +- && defaultVisual->green_mask == 0xff00 +- && defaultVisual->blue_mask == 0xff); ++ X11->use_mitshm = defaultVisual->red_mask == 0xff0000 ++ && defaultVisual->green_mask == 0xff00 ++ && defaultVisual->blue_mask == 0xff; + } + } + #endif // QT_NO_MITSHM +-- +1.6.5.1 + diff --git a/0010-Fix-error-line-not-to-have-a-as-it-s-not-correct.patch b/0010-Fix-error-line-not-to-have-a-as-it-s-not-correct.patch new file mode 100644 index 0000000..026deeb --- /dev/null +++ b/0010-Fix-error-line-not-to-have-a-as-it-s-not-correct.patch @@ -0,0 +1,23 @@ +From 4b5ae1db24fa1b96f00ef62bd2e1063a8a313e5c Mon Sep 17 00:00:00 2001 +From: Albert Astals Cid +Date: Sat, 27 Jun 2009 14:19:23 +0200 +Subject: [PATCH 10/13] Fix #error line not to have a ' as it's not correct + +--- + src/3rdparty/webkit/WebCore/DerivedSources.cpp | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/src/3rdparty/webkit/WebCore/DerivedSources.cpp b/src/3rdparty/webkit/WebCore/DerivedSources.cpp +index f698913..aaf8983 100644 +--- a/src/3rdparty/webkit/WebCore/DerivedSources.cpp ++++ b/src/3rdparty/webkit/WebCore/DerivedSources.cpp +@@ -334,5 +334,5 @@ + // want StaticConstructors.h to "pollute" all the source files we #include here + // accidentally, so we'll throw an error whenever any file includes it. + #ifdef StaticConstructors_h +-#error Don't include any file in DerivedSources.cpp that includes StaticConstructors.h ++#error Do not include any file in DerivedSources.cpp that includes StaticConstructors.h + #endif +-- +1.6.5.1 + diff --git a/0011-Fill-gap-of-X.org-XFree-multimedia-special-launcher-.patch b/0011-Fill-gap-of-X.org-XFree-multimedia-special-launcher-.patch new file mode 100644 index 0000000..2e089e7 --- /dev/null +++ b/0011-Fill-gap-of-X.org-XFree-multimedia-special-launcher-.patch @@ -0,0 +1,660 @@ +From 1a94cd7b132497f70a2b97ec2b58f6e2b1c5076a Mon Sep 17 00:00:00 2001 +From: Helio Chissini de Castro +Date: Fri, 10 Jul 2009 16:00:13 -0300 +Subject: [PATCH 11/13] Fill gap of X.org/XFree multimedia/special/launcher keys + Qt up to 4.5.x is missing whole setup of multimedia keys already defined by X + +--- + src/corelib/global/qnamespace.h | 97 ++++++++++++- + src/gui/kernel/qkeymapper_x11.cpp | 286 ++++++++++++++++++++++++++++++------- + src/gui/kernel/qkeysequence.cpp | 174 +++++++++++++++++------ + 3 files changed, 461 insertions(+), 96 deletions(-) + +diff --git a/src/corelib/global/qnamespace.h b/src/corelib/global/qnamespace.h +index 3edbca7..ddf27a8 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/gui/kernel/qkeymapper_x11.cpp b/src/gui/kernel/qkeymapper_x11.cpp +index 98ed61c..f55b491 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 894f663..665c058 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 +-- +1.6.5.1 + diff --git a/0012-Add-context-to-tr-calls-in-QShortcut.patch b/0012-Add-context-to-tr-calls-in-QShortcut.patch new file mode 100644 index 0000000..2b552d3 --- /dev/null +++ b/0012-Add-context-to-tr-calls-in-QShortcut.patch @@ -0,0 +1,70 @@ +From 9eb3560cfd5cd0bc9c7bf79f2c27657ee07b8f95 Mon Sep 17 00:00:00 2001 +From: Albert Astals Cid +Date: Sat, 8 Aug 2009 14:40:25 +0200 +Subject: [PATCH 12/13] Add context to tr calls in QShortcut + +Some languages have special rules for using "+" to concatenate strings and +for example it needs to be Ctrl + Shift instead of Ctrl+Shift, adding +context to these strings helps creating a more correct translation +--- + src/gui/kernel/qkeysequence.cpp | 20 ++++++++++---------- + 1 files changed, 10 insertions(+), 10 deletions(-) + +diff --git a/src/gui/kernel/qkeysequence.cpp b/src/gui/kernel/qkeysequence.cpp +index 894f663..c17f253 100644 +--- a/src/gui/kernel/qkeysequence.cpp ++++ b/src/gui/kernel/qkeysequence.cpp +@@ -991,10 +991,10 @@ int QKeySequencePrivate::decodeString(const QString &str, QKeySequence::Sequence + + QList 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 +1086,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 +1111,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 +1132,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; +-- +1.6.5.1 + diff --git a/0013-Fix-QNativeImage-constructor.patch b/0013-Fix-QNativeImage-constructor.patch new file mode 100644 index 0000000..7d449bb --- /dev/null +++ b/0013-Fix-QNativeImage-constructor.patch @@ -0,0 +1,26 @@ +From bfc22f6e7cafd99a60f970dfb9f4a159774ebc03 Mon Sep 17 00:00:00 2001 +From: Dario Freddi +Date: Mon, 28 Sep 2009 15:58:12 +0200 +Subject: [PATCH 13/13] Fix QNativeImage constructor + +Signed-off-by: Dario Freddi +--- + src/gui/image/qnativeimage.cpp | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/src/gui/image/qnativeimage.cpp b/src/gui/image/qnativeimage.cpp +index 1c1b8f3..3390693 100644 +--- a/src/gui/image/qnativeimage.cpp ++++ b/src/gui/image/qnativeimage.cpp +@@ -148,7 +148,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); +-- +1.6.5.1 + diff --git a/0274-shm-native-image-fix.patch b/0274-shm-native-image-fix.patch new file mode 100644 index 0000000..03247a4 --- /dev/null +++ b/0274-shm-native-image-fix.patch @@ -0,0 +1,88 @@ +diff -up qt-x11-opensource-src-4.5.3/src/gui/image/qnativeimage.cpp.me qt-x11-opensource-src-4.5.3/src/gui/image/qnativeimage.cpp +--- qt-x11-opensource-src-4.5.3/src/gui/image/qnativeimage.cpp.me 2009-10-02 18:26:02.000000000 +0200 ++++ qt-x11-opensource-src-4.5.3/src/gui/image/qnativeimage.cpp 2009-10-02 18:27:13.000000000 +0200 +@@ -144,7 +144,7 @@ QImage::Format QNativeImage::systemForma + #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, in + 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 -up qt-x11-opensource-src-4.5.3/src/gui/image/qnativeimage_p.h.me qt-x11-opensource-src-4.5.3/src/gui/image/qnativeimage_p.h +--- qt-x11-opensource-src-4.5.3/src/gui/image/qnativeimage_p.h.me 2009-10-02 18:33:38.000000000 +0200 ++++ qt-x11-opensource-src-4.5.3/src/gui/image/qnativeimage_p.h 2009-10-02 18:34:01.000000000 +0200 +@@ -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 -up qt-x11-opensource-src-4.5.3/src/gui/kernel/qapplication_x11.cpp.me qt-x11-opensource-src-4.5.3/src/gui/kernel/qapplication_x11.cpp +--- qt-x11-opensource-src-4.5.3/src/gui/kernel/qapplication_x11.cpp.me 2009-10-02 18:27:55.000000000 +0200 ++++ qt-x11-opensource-src-4.5.3/src/gui/kernel/qapplication_x11.cpp 2009-10-02 18:33:30.000000000 +0200 +@@ -1959,12 +1959,9 @@ void qt_init(QApplicationPrivate *priv, + 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 +- || defaultVisual->red_mask == 0xf800) +- && (defaultVisual->green_mask == 0xff00 +- || defaultVisual->green_mask == 0x7e0) +- && (defaultVisual->blue_mask == 0xff +- || defaultVisual->blue_mask == 0x1f)); ++ X11->use_mitshm = (defaultVisual->red_mask == 0xff0000 || defaultVisual->red_mask == 0xf800) ++ && (defaultVisual->green_mask == 0xff00 || defaultVisual->green_mask == 0x7e0) ++ && (defaultVisual->blue_mask == 0xff || defaultVisual->blue_mask == 0x1f); + } + } + #endif // QT_NO_MITSHM +diff -up qt-x11-opensource-src-4.5.3/src/gui/painting/qwindowsurface_raster.cpp.me qt-x11-opensource-src-4.5.3/src/gui/painting/qwindowsurface_raster.cpp +--- qt-x11-opensource-src-4.5.3/src/gui/painting/qwindowsurface_raster.cpp.me 2009-10-02 18:34:18.000000000 +0200 ++++ qt-x11-opensource-src-4.5.3/src/gui/painting/qwindowsurface_raster.cpp 2009-10-02 18:35:54.000000000 +0200 +@@ -220,9 +220,16 @@ void QRasterWindowSurface::flush(QWidget + + 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/kde-qt-patches.sh b/kde-qt-patches.sh index be80d38..8107add 100644 --- a/kde-qt-patches.sh +++ b/kde-qt-patches.sh @@ -1,5 +1,5 @@ # quick-n-dirty method to fetch patches from -patched git branch # unfortunately, requires an already checked-out copy of the git repo -# when switching branches, use 'git fetch', 'git checkout' -git format-patch --output-directory kde-qt-patches v4.6.0-beta..v4.6-stable-patched +# when switching branches, use something like: git checkout --track -b remotes/origin/4.6.0-beta1-patched +git format-patch --output-directory kde-qt-patches v4.6.0-beta1..origin/4.6.0-beta1-patched diff --git a/qt.spec b/qt.spec index 9a58e9a..0c316b6 100644 --- a/qt.spec +++ b/qt.spec @@ -4,17 +4,17 @@ # -no-pch disables precompiled headers, make ccache-friendly %define no_pch -no-pch -%define _default_patch_fuzz 2 +%define _default_patch_fuzz 3 %define pre beta1 # enable kde-qt integration/patches (currently a no-op) -#define kde_qt 1 +%define kde_qt 1 Summary: Qt toolkit Name: qt Epoch: 1 Version: 4.6.0 -Release: 0.2.%{pre}%{?dist} +Release: 0.3.%{pre}%{?dist} # See LGPL_EXCEPTIONS.txt, LICENSE.GPL3, respectively, for exception details License: LGPLv2 with exceptions or GPLv3 with exceptions @@ -65,7 +65,21 @@ Patch54: qt-x11-opensource-src-4.5.1-mysql_config.patch # security patches # kde-qt git patches - +Patch201: 0001-This-patch-uses-object-name-as-a-fallback-for-window.patch +Patch202: 0002-This-patch-makes-override-redirect-windows-popup-men.patch +Patch203: 0003-This-patch-changes-QObjectPrivateVersion-thus-preven.patch +Patch204: 0004-This-patch-adds-support-for-using-isystem-to-allow-p.patch +Patch205: 0005-When-tabs-are-inserted-or-removed-in-a-QTabBar.patch +Patch206: 0006-Fix-configure.exe-to-do-an-out-of-source-build-on-wi.patch +Patch207: 0007-When-using-qmake-outside-qt-src-tree-it-sometimes-ge.patch +Patch208: 0008-This-patch-makes-the-raster-graphics-system-use-shar.patch +Patch209: 0009-Restore-a-section-of-the-file-that-got-removed-due-t.patch +## older, but actually applies, version of patches 208, 209, 213 (double check) +Patch274: 0274-shm-native-image-fix.patch +Patch210: 0010-Fix-error-line-not-to-have-a-as-it-s-not-correct.patch +Patch211: 0011-Fill-gap-of-X.org-XFree-multimedia-special-launcher-.patch +Patch212: 0012-Add-context-to-tr-calls-in-QShortcut.patch +Patch213: 0013-Fix-QNativeImage-constructor.patch Source10: http://gstreamer.freedesktop.org/data/images/artwork/gstreamer-logo.svg Source11: hi16-phonon-gstreamer.png @@ -102,9 +116,9 @@ Source31: hi48-app-qt4-logo.png # if -phonon-backend, include in packaging (else it's omitted) %define phonon_backend_packaged 1 %endif -%define phonon_version 4.3.1 +%define phonon_version 4.3.50 %define phonon_version_major 4.3 -%define phonon_release 100 +%define phonon_release 1 %define webkit -webkit %define gtkstyle -gtkstyle %define nas -no-nas-sound @@ -385,6 +399,22 @@ Qt libraries used for drawing widgets and OpenGL items. # security fixes # kde-qt branch +%patch201 -p1 -b .kde-qt-0001 +%patch202 -p1 -b .kde-qt-0002 +%patch203 -p1 -b .kde-qt-0003 +%patch204 -p1 -b .kde-qt-0004 +%patch205 -p1 -b .kde-qt-0005 +%patch206 -p1 -b .kde-qt-0006 +%patch207 -p1 -b .kde-qt-0007 +## needs manual love +#patch208 -p1 -b .kde-qt-0008 +#patch209 -p1 -b .kde-qt-0009 +%patch274 -p1 -b .qt-copy-0274 +## already applied? +#patch210 -p1 -b .kde-qt-0010 +%patch211 -p1 -b .kde-qt-0011 +%patch212 -p1 -b .kde-qt-0012 +#patch213 -p1 -b .kde-qt-0013 # drop -fexceptions from $RPM_OPT_FLAGS RPM_OPT_FLAGS=`echo $RPM_OPT_FLAGS | sed 's|-fexceptions||g'` @@ -750,9 +780,6 @@ fi %files %defattr(-,root,root,-) %doc README LGPL_EXCEPTION.txt LICENSE.LGPL LICENSE.GPL3 -%if 0%{?kde_qt:1} -%doc README.kde-qt -%endif %if "%{_qt4_libdir}" != "%{_libdir}" /etc/ld.so.conf.d/* %dir %{_qt4_libdir} @@ -965,6 +992,9 @@ fi %changelog +* Mon Oct 26 2009 Rex Dieter - 4.6.0-0.3.beta1 +- kde-qt patches (as of 20091026) + * Fri Oct 16 2009 Than Ngo - 4.6.0-0.2.beta1 - subpackage sqlite plugin, add Require on qt-sqlite in qt-x11 for assistant