From b5dff65ff9af8d73a339ff9b20eb405ae3523493 Mon Sep 17 00:00:00 2001 From: alihanozturk Date: Tue, 1 Sep 2015 21:03:13 +0300 Subject: [PATCH 01/13] kdepim-runtime:add --- desktop/kde/base/kdepim-runtime/actions.py | 16 ++ ...epim-runtime-4.4.93-show_akonadi_kcm.patch | 15 ++ desktop/kde/base/kdepim-runtime/pspec.xml | 224 ++++++++++++++++++ .../kde/base/kdepim-runtime/translations.xml | 8 + 4 files changed, 263 insertions(+) create mode 100644 desktop/kde/base/kdepim-runtime/actions.py create mode 100644 desktop/kde/base/kdepim-runtime/files/kdepim-runtime-4.4.93-show_akonadi_kcm.patch create mode 100644 desktop/kde/base/kdepim-runtime/pspec.xml create mode 100644 desktop/kde/base/kdepim-runtime/translations.xml diff --git a/desktop/kde/base/kdepim-runtime/actions.py b/desktop/kde/base/kdepim-runtime/actions.py new file mode 100644 index 0000000000..d105d0518e --- /dev/null +++ b/desktop/kde/base/kdepim-runtime/actions.py @@ -0,0 +1,16 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# +# Licensed under the GNU General Public License, version 3. +# See the file http://www.gnu.org/licenses/gpl.txt + +from pisi.actionsapi import kde4 + +def setup(): + kde4.configure() + +def build(): + kde4.make() + +def install(): + kde4.install() diff --git a/desktop/kde/base/kdepim-runtime/files/kdepim-runtime-4.4.93-show_akonadi_kcm.patch b/desktop/kde/base/kdepim-runtime/files/kdepim-runtime-4.4.93-show_akonadi_kcm.patch new file mode 100644 index 0000000000..ca1b9fdeff --- /dev/null +++ b/desktop/kde/base/kdepim-runtime/files/kdepim-runtime-4.4.93-show_akonadi_kcm.patch @@ -0,0 +1,15 @@ +diff -up kdepim-runtime-4.4.93/kcm/kcm_akonadi.desktop.show-akonadi-kcm kdepim-runtime-4.4.93/kcm/kcm_akonadi.desktop +--- kdepim-runtime-4.4.93/kcm/kcm_akonadi.desktop.show-akonadi-kcm 2010-08-31 08:04:08.000000000 -0500 ++++ kdepim-runtime-4.4.93/kcm/kcm_akonadi.desktop 2010-09-08 08:52:40.689479608 -0500 +@@ -8,9 +8,10 @@ X-KDE-ModuleType=Library + X-KDE-Library=kcm_akonadi + X-KDE-FactoryName=kcm_akonadi + X-KDE-HasReadOnlyMode=false +-X-KDE-ParentApp= ++X-KDE-ParentApp=kcontrol + X-KDE-ParentComponents= + X-KDE-CfgDlgHierarchy= ++X-KDE-System-Settings-Parent-Category=workspace-appearance-and-behavior + + Name=Akonadi Configuration + Name[ar]=ضبط اكوندا diff --git a/desktop/kde/base/kdepim-runtime/pspec.xml b/desktop/kde/base/kdepim-runtime/pspec.xml new file mode 100644 index 0000000000..ab110158cd --- /dev/null +++ b/desktop/kde/base/kdepim-runtime/pspec.xml @@ -0,0 +1,224 @@ + + + + + kdepim-runtime + http://community.kde.org/KDE_PIM + + PisiLinux Community + admins@pisilinux.org + + LGPLv2 + kontact + library + app:gui + KDE4 PIM Runtime Environment + kdepim-runtime contains KDE4 PIM (Personal Information Management) runtime environment like akonadi agents. + mirrors://kde/stable/4.14.3/src/kdepim-runtime-4.14.3.tar.xz + + boost-devel + akonadi-devel + soprano-devel + libdmtx-devel + libkolab-devel + qrencode-devel + libkgapi-devel + libkfbapi-devel + shared-desktop-ontologies + kdelibs-devel + kdepimlibs-devel + kactivities-devel + shared-mime-info + + + kdepim-runtime-4.4.93-show_akonadi_kcm.patch + + + + + kdepim-runtime + + akonadi-facebook + + + qt + akonadi + libkgapi + libkolab + libqjson + libkfbapi + kdelibs + kdepimlibs + shared-mime-info + + + /usr/lib + /usr/bin + /usr/share/mime + /usr/share/kde4 + /usr/share/icons + /usr/share/dbus-1 + /usr/share/akonadi + /usr/share/ontology + /usr/share/autostart + /usr/share/applications + + + + + + 2014-11-13 + 4.14.3 + Version bump. + Yusuf Aydemir + yusuf.aydemir@pisilinux.org + + + 2014-10-15 + 4.14.2 + Version bump. + Yusuf Aydemir + yusuf.aydemir@pisilinux.org + + + 2014-09-20 + 4.14.1 + Version bump. + Yusuf Aydemir + yusuf.aydemir@pisilinux.org + + + 2014-08-21 + 4.14.0 + Version bump. + Yusuf Aydemir + yusuf.aydemir@pisilinux.org + + + 2014-06-13 + 4.13.2 + Version bump. + Yusuf Aydemir + yusuf.aydemir@pisilinux.org + + + 2014-05-13 + 4.13.1 + Version bump. + Yusuf Aydemir + yusuf.aydemir@pisilinux.org + + + 2014-05-03 + 4.13.0 + Version bump. + PisiLinux Community + admins@pisilinux.org + + + 2014-04-05 + 4.12.4 + Version bump. + PisiLinux Community + admins@pisilinux.org + + + 2014-03-04 + 4.12.3 + Version bump. + Yusuf Aydemir + yusuf.aydemir@pisilinux.org + + + 2014-02-06 + 4.12.2 + Version bump. + Yusuf Aydemir + yusuf.aydemir@pisilinux.org + + + 2014-01-13 + 4.11.5 + Version bump. + Yusuf Aydemir + yusuf.aydemir@pisilinux.org + + + 2013-12-03 + 4.11.4 + Version bump. + Yusuf Aydemir + yusuf.aydemir@pisilinux.org + + + 2013-11-05 + 4.11.3 + Version bump. + Yusuf Aydemir + yusuf.aydemir@pisilinux.org + + + 2013-10-02 + 4.11.2 + Version bump. + Yusuf Aydemir + yusuf.aydemir@pisilinux.org + + + 2013-09-07 + 4.11.1 + Version bump. + Yusuf Aydemir + yusuf.aydemir@pisilinux.org + + + 2013-07-02 + 4.10.5 + Version bump. + Yusuf Aydemir + yusuf.aydemir@pisilinux.org + + + 2013-06-10 + 4.10.4 + Version bump. + Yusuf Aydemir + yusuf.aydemir@pisilinux.org + + + 2013-05-06 + 4.10.3 + Version bump. + Yusuf Aydemir + yusuf.aydemir@pisilinux.org + + + 2013-04-03 + 4.10.2 + Version bump + Yusuf Aydemir + yusuf.aydemir@pisilinux.org + + + 2013-03-06 + 4.10.1 + Version bump + Yusuf Aydemir + yusuf.aydemir@pisilinux.org + + + 2013-02-15 + 4.10.0 + Version bump + Yusuf Aydemir + yusuf.aydemir@pisilinux.org + + + 2013-01-19 + 4.9.98 + First release + Yusuf Aydemir + yusuf.aydemir@pisilinux.org + + + diff --git a/desktop/kde/base/kdepim-runtime/translations.xml b/desktop/kde/base/kdepim-runtime/translations.xml new file mode 100644 index 0000000000..0f9335d505 --- /dev/null +++ b/desktop/kde/base/kdepim-runtime/translations.xml @@ -0,0 +1,8 @@ + + + + kdepim-runtime + KDE4 PIM (Kişisel Bilgi Yönetimi) çalışma zamanı ortamı + kdepim-runtime, kdelibs kullanarak yazılmış olan Akonadi ajanları da dahil olmak üzere KDE4 PIM (Personal Information Management - Kişisel Bilgi Yönetimi) çalışma zamanı ortamını içerir. + + From 45514f493cb9744d43e326dba232e71ec016e3e6 Mon Sep 17 00:00:00 2001 From: alihanozturk Date: Tue, 1 Sep 2015 21:09:05 +0300 Subject: [PATCH 02/13] soprano:ad d --- programming/misc/soprano/actions.py | 23 +++ ...ound-for-datasourcenamenotfound-error.diff | 52 ++++++ programming/misc/soprano/pspec.xml | 160 ++++++++++++++++++ programming/misc/soprano/translations.xml | 28 +++ 4 files changed, 263 insertions(+) create mode 100644 programming/misc/soprano/actions.py create mode 100644 programming/misc/soprano/files/locale-workaround-for-datasourcenamenotfound-error.diff create mode 100644 programming/misc/soprano/pspec.xml create mode 100644 programming/misc/soprano/translations.xml diff --git a/programming/misc/soprano/actions.py b/programming/misc/soprano/actions.py new file mode 100644 index 0000000000..3c91927794 --- /dev/null +++ b/programming/misc/soprano/actions.py @@ -0,0 +1,23 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# +# Licensed under the GNU General Public License, version 3. +# See the file http://www.gnu.org/licenses/gpl.txt + +from pisi.actionsapi import shelltools +from pisi.actionsapi import cmaketools +from pisi.actionsapi import pisitools +from pisi.actionsapi import get + +shelltools.export("JAVA_HOME","/usr/lib/jvm/java-7-openjdk") + +def setup(): + cmaketools.configure("-DCMAKE_SKIP_RPATH=OFF") + +def build(): + cmaketools.make() + +def install(): + cmaketools.rawInstall("DESTDIR=%s" % get.installDIR()) + + pisitools.dodoc("AUTHORS", "ChangeLog", "COPYING", "README") diff --git a/programming/misc/soprano/files/locale-workaround-for-datasourcenamenotfound-error.diff b/programming/misc/soprano/files/locale-workaround-for-datasourcenamenotfound-error.diff new file mode 100644 index 0000000000..1ecc81d7a3 --- /dev/null +++ b/programming/misc/soprano/files/locale-workaround-for-datasourcenamenotfound-error.diff @@ -0,0 +1,52 @@ +Index: soprano-2.6.0/backends/virtuoso/odbcconnectionpool.cpp +=================================================================== +--- soprano-2.6.0.orig/backends/virtuoso/odbcconnectionpool.cpp ++++ soprano-2.6.0/backends/virtuoso/odbcconnectionpool.cpp +@@ -32,13 +32,18 @@ + #include + + #include ++#include + + + Soprano::ODBC::Connection* Soprano::ODBC::ConnectionPoolPrivate::createConnection() + { ++ char *tmpLocale = setlocale(LC_CTYPE, ""); ++ setlocale(LC_CTYPE, "C"); ++ + Environment* env = Environment::createEnvironment(); + if ( !env ) { + setError( "Unable to create ODBC environment." ); ++ setlocale(LC_CTYPE, tmpLocale); + return 0; + } + +@@ -48,6 +53,7 @@ Soprano::ODBC::Connection* Soprano::ODBC + if ( SQLAllocConnect( env->henv(), &hdbc ) != SQL_SUCCESS ) { + setError( "Failed to allocate SQL handle" ); + delete env; ++ setlocale(LC_CTYPE, tmpLocale); + return 0; + } + +@@ -72,6 +78,7 @@ Soprano::ODBC::Connection* Soprano::ODBC + setError( Virtuoso::convertSqlError( SQL_HANDLE_DBC, hdbc ) ); + SQLFreeHandle( SQL_HANDLE_DBC, hdbc ); + delete env; ++ setlocale(LC_CTYPE, tmpLocale); + return 0; + } + +@@ -87,10 +94,12 @@ Soprano::ODBC::Connection* Soprano::ODBC + if ( conn->executeCommand( command ) != Error::ErrorNone ) { + setError( conn->lastError() ); + delete conn; ++ setlocale(LC_CTYPE, tmpLocale); + return 0; + } + } + ++ setlocale(LC_CTYPE, tmpLocale); + return conn; + } + diff --git a/programming/misc/soprano/pspec.xml b/programming/misc/soprano/pspec.xml new file mode 100644 index 0000000000..841606d737 --- /dev/null +++ b/programming/misc/soprano/pspec.xml @@ -0,0 +1,160 @@ + + + + + soprano + http://soprano.sourceforge.net + + Yusuf Aydemir + yusuf.aydemir@pisilinux.org + + GPLv2 + library + Qt wrapper API to different RDF storage solutions + soprano is a library which provides a highly usable object-oriented C++/Qt4 framework for RDF data. It uses different RDF storage solutions as backends through a simple plugin system. + mirrors://sourceforge/soprano/Soprano/2.9.4/soprano-2.9.4.tar.bz2 + + qt-devel + redland-devel + clucene-devel + raptor2-devel + + jdk7-openjdk + libiodbc-devel + + + + locale-workaround-for-datasourcenamenotfound-error.diff + + + + + soprano + + qt + clucene + raptor2 + + + /usr/bin + /usr/lib + /usr/share/dbus-1/interfaces + /usr/share/soprano/plugins + /usr/share/soprano/rules + /usr/kde/4/share/apps + /usr/share/doc + + + + + soprano-plugin-sesame2 + Sesame2 backend for Soprano + + qt + + jre7-openjdk-headless + soprano + + + /usr/lib/soprano/libsoprano_sesame2* + /usr/share/soprano/plugins/sesame2* + /usr/share/soprano/sesame2* + + + + + soprano-plugin-virtuoso + Virtuoso backend for Soprano + + qt + virtuoso + libiodbc + soprano + + + /usr/lib/soprano/libsoprano_virtuoso* + /usr/share/soprano/plugins/virtuoso* + + + + + soprano-plugin-redland + Redland backend for Soprano + + qt + redland + soprano + + + /usr/lib/soprano/libsoprano_redland* + /usr/share/soprano/plugins/redland* + + + + + soprano-devel + Development files for soprano + + soprano + qt-devel + + + /usr/include + /usr/library/pkgconfig + /usr/share/soprano/cmake + /usr/lib/pkgconfig + + + + + + 2014-05-24 + 2.9.4 + Rebuild. + Yusuf Aydemir + yusuf.aydemir@pisilinux.org + + + 2014-03-03 + 2.9.4 + Rebuild for openjdk + PisiLinux Community + admins@pisilinux.org + + + 2013-10-26 + 2.9.4 + Version bump. + Yusuf Aydemir + yusuf.aydemir@pisilinux.org + + + 2013-07-17 + 2.9.3 + Move pc files to devel pack, release bump. + Yusuf Aydemir + yusuf.aydemir@pisilinux.org + + + 2013-07-17 + 2.9.3 + Version bump. + Yusuf Aydemir + yusuf.aydemir@pisilinux.org + + + 2013-07-10 + 2.9.2 + Version bump. + Yusuf Aydemir + yusuf.aydemir@pisilinux.org + + + 2013-01-08 + 2.9.0 + First release + Idris Kalp + yaralikurt15@hotmail.com + + + diff --git a/programming/misc/soprano/translations.xml b/programming/misc/soprano/translations.xml new file mode 100644 index 0000000000..9335d2568d --- /dev/null +++ b/programming/misc/soprano/translations.xml @@ -0,0 +1,28 @@ + + + + soprano + Çeşitli RDF saklama çözümleri için bir Qt sarmalayıcı programlama arayüzü + soprano RDF verisi için çok kullanışlı, nesne yönelimli C++/Qt4 çatısı sağlayan bir kitaplıktır. Basit bir eklenti sistemi sayesinde farklı RDF depolama çözümlerinin arka uç olarak kullanabilir. + + + + soprano-plugin-sesame2 + Soprano için Sesame2 motoru + + + + soprano-plugin-virtuoso + Soprano için Virtuoso motoru + + + + soprano-plugin-redland + Soprano için Redland motoru + + + + soprano-devel + soprano için geliştirme dosyaları + + From f5e4c7f6483e7ea4b24782350debde05bc9bf842 Mon Sep 17 00:00:00 2001 From: alihanozturk Date: Tue, 1 Sep 2015 21:11:28 +0300 Subject: [PATCH 03/13] qt:add --- desktop/toolkit/qt/actions.py | 180 ++ desktop/toolkit/qt/files/CVE-2014-0190.patch | 32 + .../toolkit/qt/files/data/assistant.desktop | 136 ++ desktop/toolkit/qt/files/data/assistant.png | Bin 0 -> 15052 bytes .../toolkit/qt/files/data/designer.desktop | 132 ++ desktop/toolkit/qt/files/data/designer.png | Bin 0 -> 2302 bytes .../qt/files/data/hi128-app-qt4-logo.png | Bin 0 -> 16119 bytes .../qt/files/data/hi48-app-qt4-logo.png | Bin 0 -> 3307 bytes .../toolkit/qt/files/data/linguist.desktop | 128 ++ desktop/toolkit/qt/files/data/linguist.png | Bin 0 -> 14785 bytes .../qt/files/data/phonon-gstreamer.svg | 54 + .../toolkit/qt/files/data/qdbusviewer.desktop | 11 + .../toolkit/qt/files/data/qtconfig.desktop | 9 + desktop/toolkit/qt/files/data/qtdemo.desktop | 10 + .../qt/files/fedora/qt-cupsEnumDests.patch | 238 +++ ...everywhere-opensource-src-4.6.2-cups.patch | 84 + ...e-src-4.6.3-glib_eventloop_nullcheck.patch | 69 + ...ere-opensource-src-4.8.0-QTBUG-22037.patch | 41 + ...ource-src-4.8.0-tp-multilib-optflags.patch | 36 + ...ource-src-4.8.1-qt3support_debuginfo.patch | 10 + ...where-opensource-src-4.8.3-no_Werror.patch | 12 + ...8.4-qmake_pkgconfig_requires_private.patch | 16 + ...ere-opensource-src-4.8.5-QTBUG-14467.patch | 24 + ...ere-opensource-src-4.8.5-QTBUG-21900.patch | 84 + ...ere-opensource-src-4.8.5-QTBUG-35459.patch | 12 + ...here-opensource-src-4.8.5-QTBUG-4862.patch | 29 + ...re-opensource-src-4.8.5-mysql_config.patch | 19 + ....5-qgtkstyle_disable_gtk_theme_check.patch | 22 + ...-opensource-src-4.8.5-qt_plugin_path.patch | 19 + ...rce-src-4.8.5-tds_no_strict_aliasing.patch | 12 + ...re-opensource-src-4.8.5-uic_multilib.patch | 28 + ...ensource-src-4.8.5-webcore_debuginfo.patch | 16 + ...ere-opensource-src-4.8.6-QTBUG-34614.patch | 95 ++ ...ere-opensource-src-4.8.6-QTBUG-37380.patch | 64 + ...ere-opensource-src-4.8.6-QTBUG-38585.patch | 13 + ...rce-src-4.5.0-fix-qatomic-inline-asm.patch | 50 + ...source-src-4.5.1-enable_ft_lcdfilter.patch | 12 + desktop/toolkit/qt/files/mkspecs.patch | 54 + ...001-Don-t-crash-on-broken-GIF-images.patch | 42 + .../qt/files/opensuse/0180-window-role.diff | 96 ++ .../0188-fix-moc-parser-same-name-header.diff | 37 + .../0191-listview-alternate-row-colors.diff | 24 + .../opensuse/0195-compositing-properties.diff | 60 + ...nvalidate-tabbar-geometry-on-refresh.patch | 35 + .../qt/files/opensuse/QSystemTrayicon.diff | 1486 +++++++++++++++++ .../qt/files/opensuse/build-qvfb-tool.diff | 13 + ...ix-moc-from-choking-on-boost-headers.patch | 12 + .../fix_assistant_segfault_QTBUG-25324.patch | 14 + .../opensuse/handle-tga-files-properly.diff | 56 + .../files/opensuse/libqt4-libtool-nodate.diff | 13 + .../qt/files/opensuse/no-moc-date.diff | 26 + .../qt/files/opensuse/qatomic-generic.patch | 21 + .../qdbusconnection-no-warning-output.patch | 15 + .../qt/files/opensuse/qfatal-noreturn.diff | 12 + .../qlocale_icu-no-warning-output.patch | 61 + .../qt/files/opensuse/qt-debug-timer.diff | 26 + .../qt/files/opensuse/qt-never-strip.diff | 30 + .../files/opensuse/use-freetype-default.diff | 40 + desktop/toolkit/qt/files/turkish.patch.bz2 | Bin 0 -> 35990 bytes desktop/toolkit/qt/pspec.xml | 496 ++++++ desktop/toolkit/qt/translations.xml | 35 + 61 files changed, 4401 insertions(+) create mode 100644 desktop/toolkit/qt/actions.py create mode 100644 desktop/toolkit/qt/files/CVE-2014-0190.patch create mode 100644 desktop/toolkit/qt/files/data/assistant.desktop create mode 100644 desktop/toolkit/qt/files/data/assistant.png create mode 100644 desktop/toolkit/qt/files/data/designer.desktop create mode 100644 desktop/toolkit/qt/files/data/designer.png create mode 100644 desktop/toolkit/qt/files/data/hi128-app-qt4-logo.png create mode 100644 desktop/toolkit/qt/files/data/hi48-app-qt4-logo.png create mode 100644 desktop/toolkit/qt/files/data/linguist.desktop create mode 100644 desktop/toolkit/qt/files/data/linguist.png create mode 100644 desktop/toolkit/qt/files/data/phonon-gstreamer.svg create mode 100755 desktop/toolkit/qt/files/data/qdbusviewer.desktop create mode 100755 desktop/toolkit/qt/files/data/qtconfig.desktop create mode 100644 desktop/toolkit/qt/files/data/qtdemo.desktop create mode 100644 desktop/toolkit/qt/files/fedora/qt-cupsEnumDests.patch create mode 100644 desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.6.2-cups.patch create mode 100644 desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.6.3-glib_eventloop_nullcheck.patch create mode 100644 desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.0-QTBUG-22037.patch create mode 100644 desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.0-tp-multilib-optflags.patch create mode 100644 desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.1-qt3support_debuginfo.patch create mode 100644 desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.3-no_Werror.patch create mode 100644 desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.4-qmake_pkgconfig_requires_private.patch create mode 100644 desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.5-QTBUG-14467.patch create mode 100644 desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.5-QTBUG-21900.patch create mode 100644 desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.5-QTBUG-35459.patch create mode 100644 desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.5-QTBUG-4862.patch create mode 100644 desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.5-mysql_config.patch create mode 100644 desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.5-qgtkstyle_disable_gtk_theme_check.patch create mode 100644 desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.5-qt_plugin_path.patch create mode 100644 desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.5-tds_no_strict_aliasing.patch create mode 100644 desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.5-uic_multilib.patch create mode 100644 desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.5-webcore_debuginfo.patch create mode 100644 desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.6-QTBUG-34614.patch create mode 100644 desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.6-QTBUG-37380.patch create mode 100644 desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.6-QTBUG-38585.patch create mode 100644 desktop/toolkit/qt/files/fedora/qt-x11-opensource-src-4.5.0-fix-qatomic-inline-asm.patch create mode 100644 desktop/toolkit/qt/files/fedora/qt-x11-opensource-src-4.5.1-enable_ft_lcdfilter.patch create mode 100644 desktop/toolkit/qt/files/mkspecs.patch create mode 100644 desktop/toolkit/qt/files/opensuse/0001-Don-t-crash-on-broken-GIF-images.patch create mode 100644 desktop/toolkit/qt/files/opensuse/0180-window-role.diff create mode 100644 desktop/toolkit/qt/files/opensuse/0188-fix-moc-parser-same-name-header.diff create mode 100644 desktop/toolkit/qt/files/opensuse/0191-listview-alternate-row-colors.diff create mode 100644 desktop/toolkit/qt/files/opensuse/0195-compositing-properties.diff create mode 100644 desktop/toolkit/qt/files/opensuse/0225-invalidate-tabbar-geometry-on-refresh.patch create mode 100644 desktop/toolkit/qt/files/opensuse/QSystemTrayicon.diff create mode 100644 desktop/toolkit/qt/files/opensuse/build-qvfb-tool.diff create mode 100644 desktop/toolkit/qt/files/opensuse/fix-moc-from-choking-on-boost-headers.patch create mode 100644 desktop/toolkit/qt/files/opensuse/fix_assistant_segfault_QTBUG-25324.patch create mode 100644 desktop/toolkit/qt/files/opensuse/handle-tga-files-properly.diff create mode 100644 desktop/toolkit/qt/files/opensuse/libqt4-libtool-nodate.diff create mode 100644 desktop/toolkit/qt/files/opensuse/no-moc-date.diff create mode 100644 desktop/toolkit/qt/files/opensuse/qatomic-generic.patch create mode 100644 desktop/toolkit/qt/files/opensuse/qdbusconnection-no-warning-output.patch create mode 100644 desktop/toolkit/qt/files/opensuse/qfatal-noreturn.diff create mode 100644 desktop/toolkit/qt/files/opensuse/qlocale_icu-no-warning-output.patch create mode 100644 desktop/toolkit/qt/files/opensuse/qt-debug-timer.diff create mode 100644 desktop/toolkit/qt/files/opensuse/qt-never-strip.diff create mode 100644 desktop/toolkit/qt/files/opensuse/use-freetype-default.diff create mode 100644 desktop/toolkit/qt/files/turkish.patch.bz2 create mode 100644 desktop/toolkit/qt/pspec.xml create mode 100644 desktop/toolkit/qt/translations.xml diff --git a/desktop/toolkit/qt/actions.py b/desktop/toolkit/qt/actions.py new file mode 100644 index 0000000000..f7726b60db --- /dev/null +++ b/desktop/toolkit/qt/actions.py @@ -0,0 +1,180 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# +# Licensed under the GNU General Public License, version 3. +# See the file http://www.gnu.org/licenses/gpl.txt + +from pisi.actionsapi import shelltools +from pisi.actionsapi import autotools +from pisi.actionsapi import pisitools +from pisi.actionsapi import qt4 +from pisi.actionsapi import get + +import os + +WorkDir = "qt-everywhere-opensource-src-%s" % get.srcVERSION().replace('_','-').replace('pre1', 'tp') + +qtbase = qt4.prefix +absoluteWorkDir = "%s/%s" % (get.workDIR(), WorkDir) +bindirQt4="/usr/lib/qt4/bin" + +def setup(): + pisitools.flags.add("-I/usr/include/gtk-2.0/gdk") + #make sure we don't use them + checkdeletepath="%s/qtbase/src/3rdparty" % absoluteWorkDir + for dir in ('libjpeg', 'freetype', 'libpng', 'zlib', "libtiff"): + if os.path.exists(checkdeletepath+dir): + shelltools.unlinkDir(checkdeletepath+dir) + + filteredCFLAGS = get.CFLAGS().replace("-g3", "-g") + filteredCXXFLAGS = get.CXXFLAGS().replace("-g3", "-g") + + vars = {"PISILINUX_CC" : get.CC() + (" -m32" if get.buildTYPE() == "emul32" else ""), + "PISILINUX_CXX": get.CXX() + (" -m32" if get.buildTYPE() == "emul32" else ""), + "PISILINUX_CFLAGS": filteredCFLAGS + (" -m32" if get.buildTYPE() == "emul32" else ""), + "PISILINUX_LDFLAGS": get.LDFLAGS() + (" -m32" if get.buildTYPE() == "emul32" else "")} + + for k, v in vars.items(): + pisitools.dosed("mkspecs/common/g++-base.conf", k, v) + pisitools.dosed("mkspecs/common/g++-unix.conf", k, v) + + shelltools.export("CFLAGS", filteredCFLAGS) + shelltools.export("CXXFLAGS", filteredCXXFLAGS) + #check that dosed commands without releated patches + pisitools.dosed("mkspecs/common/gcc-base-unix.conf", "\-Wl,\-rpath,") + pisitools.dosed("mkspecs/common/gcc-base.conf", "\-O2", filteredCFLAGS) + pisitools.dosed("mkspecs/common/gcc-base.conf", "^(QMAKE_LFLAGS\s+\+=)", r"\1 %s" % get.LDFLAGS()) + + if not get.buildTYPE() == "emul32": + #-no-pch makes build ccache-friendly + options = "-no-pch \ + -v \ + -stl \ + -fast \ + -qdbus \ + -qvfb \ + -glib \ + -no-sql-sqlite2 \ + -system-sqlite \ + -system-zlib \ + -system-libpng \ + -system-libjpeg \ + -system-libtiff \ + -system-libmng \ + -plugin-sql-sqlite \ + -plugin-sql-odbc \ + -plugin-sql-psql \ + -plugin-sql-ibase \ + -I/usr/include/firebird/ \ + -I/usr/include/postgresql/server/ \ + -release \ + -no-separate-debug-info \ + -phonon \ + -no-phonon-backend \ + -webkit \ + -no-rpath \ + -openssl-linked \ + -dbus-linked \ + -xmlpatterns \ + -opensource \ + -reduce-relocations \ + -prefix %s \ + -bindir %s \ + -libdir %s \ + -docdir %s \ + -examplesdir %s \ + -demosdir %s\ + -plugindir %s \ + -translationdir %s \ + -sysconfdir %s \ + -datadir %s \ + -importdir %s \ + -headerdir %s \ + -confirm-license " % (qt4.prefix, bindirQt4, qt4.libdir, qt4.docdir, qt4.examplesdir, qt4.demosdir, qt4.plugindir, qt4.translationdir, +qt4.sysconfdir, +qt4.datadir, qt4.importdir, qt4.includedir) + else: + pisitools.dosed("mkspecs/linux-g++-64/qmake.conf", "-m64", "-m32") + shelltools.export("LDFLAGS", "-m32 %s" % get.LDFLAGS()) + options = "-no-pch \ + -v \ + -prefix /usr \ + -libdir /usr/lib32 \ + -plugindir /usr/lib32/qt/plugins \ + -importdir /usr/lib32/qt/imports \ + -datadir /usr/share/qt \ + -translationdir /usr/share/qt/translations \ + -sysconfdir /etc \ + -system-sqlite \ + -no-phonon \ + -no-phonon-backend \ + -webkit \ + -graphicssystem raster \ + -openssl-linked \ + -nomake demos \ + -nomake examples \ + -nomake docs \ + -nomake tools \ + -optimized-qmake \ + -no-rpath \ + -dbus-linked \ + -reduce-relocations \ + -no-openvg \ + -confirm-license \ + -opensource " + + autotools.rawConfigure(options) + +def build(): + shelltools.export("LD_LIBRARY_PATH", "%s/lib:%s" % (get.curDIR(), get.ENV("LD_LIBRARY_PATH"))) + autotools.make() + +def install(): + if get.buildTYPE() == "emul32": + qt4.install("INSTALL_ROOT=%s32" % get.installDIR()) + shelltools.move("%s32/usr/lib32" % get.installDIR(), "%s/usr" % get.installDIR()) + return + + qt4.install() + pisitools.dodir(qt4.bindir) + + #Remove phonon, we use KDE's phonon but we have to build Qt with Phonon support for webkit and some other stuff + pisitools.remove("%s/libphonon*" % qt4.libdir) + pisitools.removeDir("%s/phonon" % qt4.includedir) + if shelltools.isDirectory("%s/%s/phonon_backend" % (get.installDIR(), qt4.plugindir)): + pisitools.removeDir("%s/phonon_backend" % qt4.plugindir) + pisitools.remove("%s/pkgconfig/phonon*" % qt4.libdir) + # Phonon 4.5 provides libphononwidgets.so file + pisitools.remove("%s/designer/libphononwidgets.so" % qt4.plugindir) + + #Remove lost /usr/tests directory + pisitools.removeDir("usr/tests") + + # Turkish translations + shelltools.export("LD_LIBRARY_PATH", "%s%s" % (get.installDIR(), qt4.libdir)) + shelltools.system("%s%s/lrelease l10n-tr/*.ts" % (get.installDIR(), bindirQt4)) + pisitools.insinto(qt4.translationdir, "l10n-tr/*.qm") + + # Fix all occurances of WorkDir in pc files + pisitools.dosed("%s%s/pkgconfig/*.pc" % (get.installDIR(), qt4.libdir), "%s/qt-x11-opensource-src-%s" % (get.workDIR(), get.srcVERSION()), qt4.prefix) + + #I hope qtchooser will manage this issue + for bin in shelltools.ls("%s/usr/lib/qt4/bin" % get.installDIR()): + pisitools.dosym("/usr/lib/qt4/bin/%s" % bin, "/usr/bin/%s-qt4" % bin) + + mkspecPath = "%s/mkspecs" % qtbase + + for root, dirs, files in os.walk("%s%s" % (get.installDIR(), qtbase)): + # Remove unnecessary spec files.. + if root.endswith(mkspecPath): + for dir in dirs: + if not dir.startswith("linux") and dir not in ["common","qws","features","default"]: + pisitools.removeDir(os.path.join(mkspecPath,dir)) + for name in files: + if name.endswith(".prl"): + pisitools.dosed(os.path.join(root, name), "^QMAKE_PRL_BUILD_DIR.*", "") + + # Remove useless image directory, images of HTML docs are in doc/html/images + pisitools.removeDir("%s/src" % qt4.docdir) + + pisitools.dodoc("changes-*", "LGPL_EXCEPTION.txt", "LICENSE.*", "README") diff --git a/desktop/toolkit/qt/files/CVE-2014-0190.patch b/desktop/toolkit/qt/files/CVE-2014-0190.patch new file mode 100644 index 0000000000..da0b69d163 --- /dev/null +++ b/desktop/toolkit/qt/files/CVE-2014-0190.patch @@ -0,0 +1,32 @@ +Don't crash on broken GIF images + +Broken GIF images could set invalid width and height +values inside the image, leading to Qt creating a null +QImage for it. In that case we need to abort decoding +the image and return an error. + +Initial patch by Rich Moore. + +Backport of Id82a4036f478bd6e49c402d6598f57e7e5bb5e1e from Qt 5 + +Task-number: QTBUG-38367 +Change-Id: I0680740018aaa8356d267b7af3f01fac3697312a +Security-advisory: CVE-2014-0190 + +diff -up qt-everywhere-opensource-src-4.8.6/src/gui/image/qgifhandler.cpp.QTBUG-38367 qt-everywhere-opensource-src-4.8.6/src/gui/image/qgifhandler.cpp +--- qt-everywhere-opensource-src-4.8.6/src/gui/image/qgifhandler.cpp.QTBUG-38367 2014-04-10 13:37:12.000000000 -0500 ++++ qt-everywhere-opensource-src-4.8.6/src/gui/image/qgifhandler.cpp 2014-04-24 15:58:54.515862458 -0500 +@@ -359,6 +359,13 @@ int QGIFFormat::decode(QImage *image, co + memset(bits, 0, image->byteCount()); + } + ++ // Check if the previous attempt to create the image failed. If it ++ // did then the image is broken and we should give up. ++ if (image->isNull()) { ++ state = Error; ++ return -1; ++ } ++ + disposePrevious(image); + disposed = false; + diff --git a/desktop/toolkit/qt/files/data/assistant.desktop b/desktop/toolkit/qt/files/data/assistant.desktop new file mode 100644 index 0000000000..55a65a8d3a --- /dev/null +++ b/desktop/toolkit/qt/files/data/assistant.desktop @@ -0,0 +1,136 @@ +[Desktop Entry] +Encoding=UTF-8 +Exec=/usr/lib/qt4/bin/assistant +Name=Qt4 Assistant +Name[af]=Qt4 Assistent +Name[ar]=معاون Qt4 +Name[az]=Qt4 Yardımçısı +Name[bn]=কিউ-টি সহায়ক +Name[br]=Skoazeller Qt4 +Name[bs]=Qt4 Asistent +Name[ca]=Assistent Qt4 +Name[cs]=Qt4 asistent +Name[cy]=Cymhorthwr Qt4 +Name[de]=Qt4-Assistent +Name[el]=Βοηθός Qt4 +Name[eo]=Qt4-Asistilo +Name[es]=Asistente Qt4 +Name[eu]=Qt4 laguntzailea +Name[fa]=دستیار Qt4 +Name[fo]=Qt4-hjálpari +Name[fy]=Qt4-assistent +Name[hi]=क्यूटी सहायक +Name[hr]=Qt4 Asistent +Name[hsb]=Qt4 Asistent +Name[ja]=Qt4 アシスタント +Name[km]=អ្នក​ជំនួយការ Qt4 +Name[ko]=Qt4 도우미 +Name[lo]=ຄຳແນະນຳການໃ້ຊ້Qt4 +Name[lv]=Qt4 Asistents +Name[mk]=Qt4-Асистент +Name[mn]=Qt4-туслагч +Name[ms]=Pembantu Qt4 +Name[nds]=Qt4-Hölper +Name[nl]=Qt4 Assistent +Name[nso]=Mothusi wa Qt4 +Name[pa]=Qt4 ਸਹਾਇਕ +Name[pt]=Assistente do Qt4 +Name[pt_BR]=Assistente Qt4 +Name[ro]=Asistent Qt4 +Name[ru]=Помощник Qt4 +Name[rw]=Umufasha Qt4 +Name[sl]=Pomočnik za Qt4 +Name[ss]=Lisekela leQt4 +Name[ta]=Qt4 துணைவன் +Name[tg]=Дастёри Qt4 +Name[th]=คำแนะนำการใช้ Qt4 +Name[tr]=Qt4 Asistanı +Name[uk]=Qt4-асистент +Name[uz]=Qt43 ёрдамчи +Name[ven]=Qt4 Muthusi +Name[vi]=Trợ giúp Qt4 +Name[wa]=Macrea Qt4 +Name[xh]=Qt4 Umncedi +Name[zh_CN]=Qt4 助手 +Name[zh_TW]=Qt4 助理 +Name[zu]=Umsizi we-Qt4 +GenericName=Document Browser +GenericName[af]=Dokument Blaaier +GenericName[ar]=متصفح المستندات +GenericName[az]=Sənəd Səyyahı +GenericName[bg]=Преглед на документи +GenericName[bn]=নথী ব্রাউজার +GenericName[br]=Furcher Teulioù +GenericName[bs]=Preglednik QT dokumenata +GenericName[ca]=Navegador de documents +GenericName[cs]=Prohlížeč dokumentace +GenericName[cy]=Porydd Dogfen +GenericName[da]=Dokumentfremviser +GenericName[de]=Dokumentbrowser +GenericName[el]=Προβολέας εγγράφων +GenericName[eo]=Dokumentorigardilo +GenericName[es]=Navegador de documentos +GenericName[et]=Dokumentatsiooni brauser +GenericName[eu]=Dokumentu arakatzailea +GenericName[fa]=مرورگر سند +GenericName[fi]=Asiakirjaselain +GenericName[fo]=Skjalakagari +GenericName[fr]=Explorateur de documentation Qt4 +GenericName[fy]=Dokumintblêder +GenericName[ga]=Brabhsálaí Cáipéise +GenericName[gl]=Navegador de Documentos +GenericName[he]=דפדפן מסמכים +GenericName[hi]=दस्तावेज़ ब्राउज़रज़र +GenericName[hr]=Preglednik dokumenata +GenericName[hu]=Dokumentumböngésző +GenericName[id]=Peselancar Document +GenericName[is]=Skjalavafri +GenericName[it]=Visualizzatore di documenti +GenericName[ja]=ドキュメントブラウザ +GenericName[km]=កម្មវិធី​រុករក​ឯកសារ +GenericName[ko]=문서 탐색기 +GenericName[lo]=ເຄື່ອງມືເລືອກເບິ່ງແຟ້ມເອກະສານ +GenericName[lt]=Dokumentų naršyklė +GenericName[lv]=Dokumentu Pārlūks +GenericName[mk]=Прелистувач на документи +GenericName[mn]=Баримтын хөтөч +GenericName[ms]=Pelungsur Dokumen +GenericName[mt]=Browser ta' Dokumenti +GenericName[nb]=Dokumentleser +GenericName[nds]=Dokmentkieker +GenericName[nl]=Documentbrowser +GenericName[nn]=Dokumentlesar +GenericName[nso]=Seinyakisi sa Tokomane +GenericName[pa]=ਦਸਤਾਵੇਜ਼ ਝਲਕਾਰਾ +GenericName[pl]=Przeglądarka dokumentów +GenericName[pt]=Navegador de Documentos +GenericName[pt_BR]=Navegador de Documentos +GenericName[ro]=Navigator de documente +GenericName[ru]=Программа просмотра документов +GenericName[rw]=Mucukumbuzi w'Inyandiko +GenericName[se]=Dokumeantalogan +GenericName[sk]=Prehliadač dokumentácie +GenericName[sl]=Pregledovalnik dokumentov +GenericName[sr]=Прегледач докумената +GenericName[sr@Latn]=Pregledač dokumenata +GenericName[ss]=Ibrawuza yelidokhumente +GenericName[sv]=Dokumentbläddrare +GenericName[ta]=ஆவண உலாவி +GenericName[tg]=Тафсири ҳуҷҷат +GenericName[th]=เครื่องมือเลือกดูแฟ้มเอกสาร +GenericName[tr]=Belge Tarayıcısı +GenericName[tt]=İstälek Küzätüçe +GenericName[uk]=Навігатор документів +GenericName[uz]=Ҳужжат браузери +GenericName[ven]=Buronza ya manwalwa +GenericName[vi]=Trình duyệt tài liệu +GenericName[wa]=Foyteu di documints +GenericName[xh]=Umkhangeli Wencwadi Zoxwebhu +GenericName[zh_CN]=文档浏览器 +GenericName[zh_TW]=文件閱讀器 +GenericName[zu]=Umcingi Woshicilelo +X-KDE-StartupNotify=true +Icon=assistant +Terminal=false +Type=Application +Categories=Qt;Development; diff --git a/desktop/toolkit/qt/files/data/assistant.png b/desktop/toolkit/qt/files/data/assistant.png new file mode 100644 index 0000000000000000000000000000000000000000..bfb642dc2d1718109dd71b4cd5b1ba38d916450b GIT binary patch literal 15052 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 Y1ppbD4msK+4FCWD07*qoM6N<$f=8TF?EnA( literal 0 HcmV?d00001 diff --git a/desktop/toolkit/qt/files/data/hi128-app-qt4-logo.png b/desktop/toolkit/qt/files/data/hi128-app-qt4-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..b8f8263bbe8af00a6f368dfd092b28bdd3c1c20c GIT binary patch literal 16119 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 literal 0 HcmV?d00001 diff --git a/desktop/toolkit/qt/files/data/linguist.desktop b/desktop/toolkit/qt/files/data/linguist.desktop new file mode 100644 index 0000000000..223d18a749 --- /dev/null +++ b/desktop/toolkit/qt/files/data/linguist.desktop @@ -0,0 +1,128 @@ +[Desktop Entry] +Encoding=UTF-8 +Exec=/usr/lib/qt4/bin/linguist +Name=Qt4 Linguist +Name[ar]=لغوي Qt4 +Name[bn]=কিউ-টি লিঙ্গুইস্ট +Name[ca]=Lingüista Qt4 +Name[cy]=Ieithydd Qt4 +Name[de]=Qt4-Linguist +Name[eo]=Qt4-Lingvisto +Name[es]=Lingüista Qt4 +Name[fa]=Qt4 زبان‌شناس +Name[fi]=Qt4 Linquist +Name[fy]=Qt4 Linquist +Name[gl]=Lingüista Qt4 +Name[hi]=क्यूटी लिंग्विस्ट +Name[hr]=Qt4 Lingvist +Name[km]=ភាសាវិទូ Qt4 +Name[ko]=Qt4 언어학자 +Name[lo]=ແປພາສາຂອງ Qt4 +Name[lv]=Qt4 Lingvists +Name[mk]=Qt4-Јазичар +Name[mn]=Qt4-Хэл зүй +Name[ms]=Jurubahasa Qt4 +Name[mt]=Lingwist Qt4 +Name[nb]=Qt4-Linguist +Name[nds]=Qt4-Linguist +Name[nl]=Qt4 Linquist +Name[nso]=Sekaleleme sa Qt4 +Name[pa]=Qt4 ਲੈਂਗੂਇਸਟ +Name[pl]=Lingwista Qt4 +Name[ru]=Qt4 Лингвист +Name[rw]=Byindimi Qt4 +Name[sl]=Jezikoslovec Qt4 +Name[sv]=Qt4 linguist +Name[ta]=Qt4 மொழியறிஞர் +Name[tg]=Забони Qt4 +Name[th]=แปลภาษาของ Qt4 +Name[tr]=Qt4 Dilci +Name[tt]=Qt4 Telbelgeç +Name[uk]=Qt4-лінгвіст +Name[uz]=Qt4 лингвист +Name[ven]=Qt4 Radzinyambo +Name[vi]=Ngôn ngữ Qt4 +Name[xh]=Usolwimi we Qt4 +Name[zh_CN]=Qt4 语言家 +Name[zh_TW]=Qt4 語言學家 +Name[zu]=Owozolimi we-Qt4 +GenericName=Translation Tool +GenericName[af]=Vertaling Program +GenericName[ar]=أداة للترجمة +GenericName[az]=Tərcümə Vasitəsi +GenericName[bn]=অনুবাদ টুল +GenericName[br]=Ostilh troidigezh +GenericName[bs]=Alat za prevođenje +GenericName[ca]=Eina de traducció +GenericName[cs]=Překladatelský nástroj +GenericName[cy]=Erfyn Cyfieithu +GenericName[da]=Oversættelsesværktøj +GenericName[de]=Übersetzungsprogramm +GenericName[el]=Εργαλείο μεταφράσεων +GenericName[eo]=Tradukilo por Qt4-programoj +GenericName[es]=Herramienta de traducción +GenericName[et]=Tõlkimise rakendus +GenericName[eu]=Itzulpenerako tresnak +GenericName[fa]=ابزار ترجمه +GenericName[fi]=Käännöstyökalu +GenericName[fo]=Umsetingaramboð +GenericName[fr]=Outil de traduction +GenericName[fy]=Fertaalprogramma +GenericName[ga]=Uirlis Aistriúcháin +GenericName[gl]=Ferramenta de Tradución +GenericName[he]=כלי תרגום +GenericName[hi]=अनुवाद औज़ार +GenericName[hr]=Alat za prevođenje +GenericName[hsb]=Grat za přełožowanje +GenericName[hu]=Fordítássegítő +GenericName[id]=Kakas Penerjemah +GenericName[is]=Þýðingartól +GenericName[it]=Strumento per le traduzioni +GenericName[ja]=翻訳ツール +GenericName[km]=កម្មវិធី​បកប្រែ +GenericName[ko]=번역 도구 +GenericName[lo]=ເຄື່ອງມືແປພາສາ +GenericName[lt]=Vertimo įrankis +GenericName[lv]=Tulkošanas Rīks +GenericName[mk]=Алатка за преведување +GenericName[mn]=Орчуулгын програм +GenericName[ms]=Perkakasan Penterjemahan +GenericName[mt]=Għodda tat-traduzzjoni +GenericName[nb]=Oversettelsesverktøy +GenericName[nds]=Warktüüch för't Översetten +GenericName[nl]=Vertaalprogramma +GenericName[nn]=Omsetjingsverktøy +GenericName[nso]=Sebereka sa Thlathollo +GenericName[pa]=ਅਨੁਵਾਦ ਸੰਦ +GenericName[pl]=Narzędzie dla tłumaczy +GenericName[pt]=Ferramenta de Tradução +GenericName[pt_BR]=Ferramenta de Tradução +GenericName[ro]=Utilitar de traducere +GenericName[ru]=Переводчик для Qt4 +GenericName[se]=Jorgalanreaidu +GenericName[sk]=Prekladací nástroj +GenericName[sl]=Orodje za prevajanje +GenericName[sr]=Алат за превођење +GenericName[sr@Latn]=Alat za prevođenje +GenericName[ss]=Lithulusi lekuhumusha +GenericName[sv]=Översättningsverktyg +GenericName[ta]=மொழிபெயர்ப்புக் கருவி +GenericName[tg]=Тарҷумагар барои QT +GenericName[th]=เครื่องมือแปลภาษา +GenericName[tr]=Çeviri Aracı +GenericName[tt]=Tärcemäläw Qoralı +GenericName[uk]=Засіб для перекладів +GenericName[uz]=Таржима қилиш воситаси +GenericName[ven]=Zwishumiswa zwau Dologa +GenericName[vi]=Công cụ dịch +GenericName[wa]=Usteye di ratournaedje +GenericName[xh]=Isixhobo Soguqulelo lomsebenzi kolunye ulwimi +GenericName[zh_CN]=翻译工具 +GenericName[zh_TW]=翻譯工具 +GenericName[zu]=Ithuluzi Lokuguqulela +X-KDE-StartupNotify=true +MimeType=application/x-linguist; +Terminal=false +Type=Application +Icon=linguist +Categories=Qt;Development; diff --git a/desktop/toolkit/qt/files/data/linguist.png b/desktop/toolkit/qt/files/data/linguist.png new file mode 100644 index 0000000000000000000000000000000000000000..47c9f17a4f91ed41a17a794a31479f090ed64fb3 GIT binary patch literal 14785 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 + + + +]> + + + + + + + + + + + + + + diff --git a/desktop/toolkit/qt/files/data/qdbusviewer.desktop b/desktop/toolkit/qt/files/data/qdbusviewer.desktop new file mode 100755 index 0000000000..d1b05715d0 --- /dev/null +++ b/desktop/toolkit/qt/files/data/qdbusviewer.desktop @@ -0,0 +1,11 @@ +#!/usr/bin/env xdg-open +[Desktop Entry] +Name=Qt4 QDbusViewer +GenericName=D-Bus Debugger +Comment=Debug D-Bus applications +Exec=/usr/lib/qt4/bin/qdbusviewer +Icon=qdbusviewer +Terminal=false +Type=Application +Categories=Qt;Development;Debugger; + diff --git a/desktop/toolkit/qt/files/data/qtconfig.desktop b/desktop/toolkit/qt/files/data/qtconfig.desktop new file mode 100755 index 0000000000..3f461f8e22 --- /dev/null +++ b/desktop/toolkit/qt/files/data/qtconfig.desktop @@ -0,0 +1,9 @@ +#!/usr/bin/env xdg-open +[Desktop Entry] +Name=Qt4 Config +Comment=Configure Qt4 behavior, styles, fonts +Exec=/usr/lib/qt4/bin/qtconfig +Icon=qt4-logo +Terminal=false +Type=Application +Categories=Qt;Settings; diff --git a/desktop/toolkit/qt/files/data/qtdemo.desktop b/desktop/toolkit/qt/files/data/qtdemo.desktop new file mode 100644 index 0000000000..1f0b5baa0e --- /dev/null +++ b/desktop/toolkit/qt/files/data/qtdemo.desktop @@ -0,0 +1,10 @@ +[Desktop Entry] +Name=Qt4 Demo +Comment=Show Qt4 demos and programming examples +Comment[tr]=Qt4 demolarını ve programlama örneklerini göster +Exec=/usr/lib/qt4/bin/qtdemo +Icon=qt4-logo +Terminal=false +Encoding=UTF-8 +Type=Application +Categories=Qt;Development; diff --git a/desktop/toolkit/qt/files/fedora/qt-cupsEnumDests.patch b/desktop/toolkit/qt/files/fedora/qt-cupsEnumDests.patch new file mode 100644 index 0000000000..7d59f22e8d --- /dev/null +++ b/desktop/toolkit/qt/files/fedora/qt-cupsEnumDests.patch @@ -0,0 +1,238 @@ +diff -up qt-everywhere-opensource-src-4.8.4/src/gui/painting/qcups.cpp.cupsEnumDests qt-everywhere-opensource-src-4.8.4/src/gui/painting/qcups.cpp +--- qt-everywhere-opensource-src-4.8.4/src/gui/painting/qcups.cpp.cupsEnumDests 2012-11-23 10:09:53.000000000 +0000 ++++ qt-everywhere-opensource-src-4.8.4/src/gui/painting/qcups.cpp 2013-07-03 15:30:06.232936976 +0100 +@@ -50,9 +50,19 @@ + + QT_BEGIN_NAMESPACE + ++typedef int (*CupsEnumDests)(unsigned flags, int msec, int *cancel, ++ cups_ptype_t type, cups_ptype_t mask, ++ cups_dest_cb_t cb, void *user_data); ++typedef http_t * (*CupsConnectDest)(cups_dest_t *dest, unsigned flags, ++ int msec, int *cancel, ++ char *resource, size_t resourcesize, ++ cups_dest_cb_t cb, void *user_data); ++typedef int (*CupsCopyDest)(cups_dest_t *dest, int num_dests, ++ cups_dest_t **dests); + typedef int (*CupsGetDests)(cups_dest_t **dests); + typedef void (*CupsFreeDests)(int num_dests, cups_dest_t *dests); + typedef const char* (*CupsGetPPD)(const char *printer); ++typedef const char* (*CupsGetPPD2)(http_t *http, const char *printer); + typedef int (*CupsMarkOptions)(ppd_file_t *ppd, int num_options, cups_option_t *options); + typedef ppd_file_t* (*PPDOpenFile)(const char *filename); + typedef void (*PPDMarkDefaults)(ppd_file_t *ppd); +@@ -66,12 +76,24 @@ typedef const char* (*CupsLangEncoding)( + typedef int (*CupsAddOption)(const char *name, const char *value, int num_options, cups_option_t **options); + typedef int (*CupsTempFd)(char *name, int len); + typedef int (*CupsPrintFile)(const char * name, const char * filename, const char * title, int num_options, cups_option_t * options); ++typedef int (*CupsPrintFile2)(http_t *http, const char *name, const char *filename, const char *title, int num_options, cups_option_t *options); ++ ++typedef struct ++{ ++ cups_dest_t *printers; ++ int num_printers; ++} EnumDestsContext; + + static bool cupsLoaded = false; + static int qt_cups_num_printers = 0; ++static cups_dest_t *qt_cups_printers = 0; ++static CupsEnumDests _cupsEnumDests = 0; ++static CupsConnectDest _cupsConnectDest = 0; ++static CupsCopyDest _cupsCopyDest = 0; + static CupsGetDests _cupsGetDests = 0; + static CupsFreeDests _cupsFreeDests = 0; + static CupsGetPPD _cupsGetPPD = 0; ++static CupsGetPPD2 _cupsGetPPD2 = 0; + static PPDOpenFile _ppdOpenFile = 0; + static PPDMarkDefaults _ppdMarkDefaults = 0; + static PPDClose _ppdClose = 0; +@@ -84,14 +106,35 @@ static CupsLangEncoding _cupsLangEncodin + static CupsAddOption _cupsAddOption = 0; + static CupsTempFd _cupsTempFd = 0; + static CupsPrintFile _cupsPrintFile = 0; ++static CupsPrintFile2 _cupsPrintFile2 = 0; ++ ++static int enum_dest_cb (void *user_data, unsigned flags, cups_dest_t *dest) ++{ ++ EnumDestsContext *context = (EnumDestsContext *) user_data; ++ ++ if ((flags & (CUPS_DEST_FLAGS_UNCONNECTED | ++ CUPS_DEST_FLAGS_REMOVED | ++ CUPS_DEST_FLAGS_ERROR | ++ CUPS_DEST_FLAGS_RESOLVING | ++ CUPS_DEST_FLAGS_CONNECTING | ++ CUPS_DEST_FLAGS_CANCELED)) == 0) ++ context->num_printers = _cupsCopyDest (dest, context->num_printers, ++ &context->printers); ++ ++ return 1; ++} + + static void resolveCups() + { + QLibrary cupsLib(QLatin1String("cups"), 2); + if(cupsLib.load()) { ++ _cupsEnumDests = (CupsEnumDests) cupsLib.resolve("cupsEnumDests"); ++ _cupsConnectDest = (CupsConnectDest) cupsLib.resolve("cupsConnectDest"); ++ _cupsCopyDest = (CupsCopyDest) cupsLib.resolve("cupsCopyDest"); + _cupsGetDests = (CupsGetDests) cupsLib.resolve("cupsGetDests"); + _cupsFreeDests = (CupsFreeDests) cupsLib.resolve("cupsFreeDests"); + _cupsGetPPD = (CupsGetPPD) cupsLib.resolve("cupsGetPPD"); ++ _cupsGetPPD2 = (CupsGetPPD2) cupsLib.resolve("cupsGetPPD2"); + _cupsLangGet = (CupsLangGet) cupsLib.resolve("cupsLangGet"); + _cupsLangEncoding = (CupsLangEncoding) cupsLib.resolve("cupsLangEncoding"); + _ppdOpenFile = (PPDOpenFile) cupsLib.resolve("ppdOpenFile"); +@@ -104,14 +147,27 @@ static void resolveCups() + _cupsAddOption = (CupsAddOption) cupsLib.resolve("cupsAddOption"); + _cupsTempFd = (CupsTempFd) cupsLib.resolve("cupsTempFd"); + _cupsPrintFile = (CupsPrintFile) cupsLib.resolve("cupsPrintFile"); ++ _cupsPrintFile2 = (CupsPrintFile2) cupsLib.resolve("cupsPrintFile2"); + +- if (_cupsGetDests && _cupsFreeDests) { +- cups_dest_t *printers; ++ if (_cupsEnumDests && _cupsCopyDest && ++ _cupsConnectDest && _cupsGetPPD2 && ++ _cupsPrintFile2) { ++ EnumDestsContext context; ++ context.printers = 0; ++ context.num_printers = 0; ++ _cupsEnumDests(0, -1, 0, 0, 0, ++ enum_dest_cb, &context); ++ ++ qt_cups_printers = context.printers; ++ qt_cups_num_printers = context.num_printers; ++ } else if (_cupsGetDests && _cupsFreeDests) { ++ cups_dest_t *printers; + int num_printers = _cupsGetDests(&printers); +- if (num_printers) +- _cupsFreeDests(num_printers, printers); +- qt_cups_num_printers = num_printers; +- } ++ ++ if (num_printers) ++ _cupsFreeDests(num_printers, printers); ++ qt_cups_num_printers = num_printers; ++ } + } + cupsLoaded = true; + } +@@ -134,7 +190,15 @@ QCUPSSupport::QCUPSSupport() + return; + + // Update the available printer count +- qt_cups_num_printers = prnCount = _cupsGetDests(&printers); ++ if (qt_cups_printers && _cupsCopyDest) { ++ int i; ++ for (i = 0; i < qt_cups_num_printers; ++i) { ++ prnCount = _cupsCopyDest (&qt_cups_printers[i], ++ prnCount, ++ &printers); ++ } ++ } else ++ qt_cups_num_printers = prnCount = _cupsGetDests(&printers); + + for (int i = 0; i < prnCount; ++i) { + if (printers[i].is_default) { +@@ -188,7 +252,19 @@ const ppd_file_t* QCUPSSupport::setCurre + currPPD = 0; + page_sizes = 0; + +- const char *ppdFile = _cupsGetPPD(printers[index].name); ++ const char *ppdFile = 0; ++ if (_cupsConnectDest && _cupsGetPPD2) { ++ char resource[HTTP_MAX_URI]; ++ http_t *http = _cupsConnectDest (&printers[index], 0, -1, 0, ++ resource, sizeof (resource), ++ 0, 0); ++ if (http) { ++ char *name = strrchr (resource, '/'); ++ if (name) ++ ppdFile = _cupsGetPPD2 (http, ++name); ++ } ++ } else ++ ppdFile = _cupsGetPPD(printers[index].name); + + if (!ppdFile) + return 0; +@@ -343,7 +419,29 @@ bool QCUPSSupport::printerHasPPD(const c + { + if (!isAvailable()) + return false; +- const char *ppdFile = _cupsGetPPD(printerName); ++ ++ const char *ppdFile = 0; ++ if (_cupsConnectDest && _cupsGetPPD2) { ++ int i; ++ for (i = 0; i < prnCount; ++i) ++ if (!strcmp (printers[i].name, printerName)) ++ break; ++ ++ if (i == prnCount) ++ return false; ++ ++ char resource[HTTP_MAX_URI]; ++ http_t *http = _cupsConnectDest (&printers[i], 0, -1, 0, ++ resource, sizeof (resource), ++ 0, 0); ++ if (http) { ++ char *name = strrchr (resource, '/'); ++ if (name) ++ ppdFile = _cupsGetPPD2 (http, ++name); ++ } ++ } else ++ ppdFile = _cupsGetPPD(printerName); ++ + if (ppdFile) + unlink(ppdFile); + return (ppdFile != 0); +@@ -394,6 +492,26 @@ QPair QCUPSSupport::tempFd + int QCUPSSupport::printFile(const char * printerName, const char * filename, const char * title, + int num_options, cups_option_t * options) + { ++ if (_cupsConnectDest && _cupsPrintFile2) { ++ int i; ++ for (i = 0; i < prnCount; ++i) ++ if (!strcmp (printers[i].name, printerName)) ++ break; ++ ++ if (i != prnCount) { ++ char resource[HTTP_MAX_URI]; ++ http_t *http = _cupsConnectDest (&printers[i], 0, -1, 0, ++ resource, sizeof (resource), ++ 0, 0); ++ if (http) { ++ char *name = strrchr (resource, '/'); ++ if (name) ++ return _cupsPrintFile2 (http, ++name, filename, title, ++ num_options, options); ++ } ++ } ++ } ++ + return _cupsPrintFile(printerName, filename, title, num_options, options); + } + +diff -up qt-everywhere-opensource-src-4.8.4/src/gui/painting/qcups_p.h.cupsEnumDests qt-everywhere-opensource-src-4.8.4/src/gui/painting/qcups_p.h +--- qt-everywhere-opensource-src-4.8.4/src/gui/painting/qcups_p.h.cupsEnumDests 2012-11-23 10:09:53.000000000 +0000 ++++ qt-everywhere-opensource-src-4.8.4/src/gui/painting/qcups_p.h 2013-07-03 15:27:24.733343017 +0100 +@@ -92,7 +92,7 @@ public: + + QStringList options() const; + +- static bool printerHasPPD(const char *printerName); ++ bool printerHasPPD(const char *printerName); + + QString unicodeString(const char *s); + +diff -up qt-everywhere-opensource-src-4.8.4/src/gui/painting/qprinter.cpp.cupsEnumDests qt-everywhere-opensource-src-4.8.4/src/gui/painting/qprinter.cpp +--- qt-everywhere-opensource-src-4.8.4/src/gui/painting/qprinter.cpp.cupsEnumDests 2013-07-03 15:27:24.531342277 +0100 ++++ qt-everywhere-opensource-src-4.8.4/src/gui/painting/qprinter.cpp 2013-07-03 15:27:24.733343017 +0100 +@@ -844,7 +844,7 @@ void QPrinter::setPrinterName(const QStr + if(d->use_default_engine + && d->outputFormat == QPrinter::NativeFormat) { + if (QCUPSSupport::cupsVersion() >= 10200 +- && QCUPSSupport::printerHasPPD(name.toLocal8Bit().constData())) ++ && QCUPSSupport().printerHasPPD(name.toLocal8Bit().constData())) + setOutputFormat(QPrinter::PdfFormat); + else + setOutputFormat(QPrinter::PostScriptFormat); diff --git a/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.6.2-cups.patch b/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.6.2-cups.patch new file mode 100644 index 0000000000..e0305e11b8 --- /dev/null +++ b/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.6.2-cups.patch @@ -0,0 +1,84 @@ +diff -ur qt-everywhere-opensource-src-4.6.2/src/gui/dialogs/qprintdialog_unix.cpp qt-everywhere-opensource-src-4.6.2-cups/src/gui/dialogs/qprintdialog_unix.cpp +--- qt-everywhere-opensource-src-4.6.2/src/gui/dialogs/qprintdialog_unix.cpp 2010-02-11 16:55:22.000000000 +0100 ++++ qt-everywhere-opensource-src-4.6.2-cups/src/gui/dialogs/qprintdialog_unix.cpp 2010-02-28 04:34:16.000000000 +0100 +@@ -569,6 +569,32 @@ + void QPrintDialogPrivate::selectPrinter(QCUPSSupport *cups) + { + options.duplex->setEnabled(cups && cups->ppdOption("Duplex")); ++ ++ if (cups) { ++ const ppd_option_t* duplex = cups->ppdOption("Duplex"); ++ if (duplex) { ++ // copy default ppd duplex to qt dialog ++ if (qstrcmp(duplex->defchoice, "DuplexTumble") == 0) ++ options.duplexShort->setChecked(true); ++ else if (qstrcmp(duplex->defchoice, "DuplexNoTumble") == 0) ++ options.duplexLong->setChecked(true); ++ else ++ options.noDuplex->setChecked(true); ++ } ++ ++ if (cups->currentPPD()) { ++ // set default color ++ if (cups->currentPPD()->color_device) ++ options.color->setChecked(true); ++ else ++ options.grayscale->setChecked(true); ++ } ++ ++ // set collation ++ const ppd_option_t *collate = cups->ppdOption("Collate"); ++ if (collate) ++ options.collate->setChecked(qstrcmp(collate->defchoice, "True")==0); ++ } + } + #endif + +diff -ur qt-everywhere-opensource-src-4.6.2/src/gui/painting/qprinter.cpp qt-everywhere-opensource-src-4.6.2-cups/src/gui/painting/qprinter.cpp +--- qt-everywhere-opensource-src-4.6.2/src/gui/painting/qprinter.cpp 2010-02-11 16:55:22.000000000 +0100 ++++ qt-everywhere-opensource-src-4.6.2-cups/src/gui/painting/qprinter.cpp 2010-02-28 04:55:15.000000000 +0100 +@@ -627,6 +627,44 @@ + && d_ptr->paintEngine->type() != QPaintEngine::MacPrinter) { + setOutputFormat(QPrinter::PdfFormat); + } ++ ++#if !defined(QT_NO_CUPS) && !defined(QT_NO_LIBRARY) ++ // fill in defaults from ppd file ++ QCUPSSupport cups; ++ ++ int printernum = -1; ++ for (int i = 0; i < cups.availablePrintersCount(); i++) { ++ if (printerName().toLocal8Bit() == cups.availablePrinters()[i].name) ++ printernum = i; ++ } ++ if (printernum >= 0) { ++ cups.setCurrentPrinter(printernum); ++ ++ const ppd_option_t* duplex = cups.ppdOption("Duplex"); ++ if (duplex) { ++ // copy default ppd duplex to qt dialog ++ if (qstrcmp(duplex->defchoice, "DuplexTumble") == 0) ++ setDuplex(DuplexShortSide); ++ else if (qstrcmp(duplex->defchoice, "DuplexNoTumble") == 0) ++ setDuplex(DuplexLongSide); ++ else ++ setDuplex(DuplexNone); ++ } ++ ++ if (cups.currentPPD()) { ++ // set default color ++ if (cups.currentPPD()->color_device) ++ setColorMode(Color); ++ else ++ setColorMode(GrayScale); ++ } ++ ++ // set collation ++ const ppd_option_t *collate = cups.ppdOption("Collate"); ++ if (collate) ++ setCollateCopies(qstrcmp(collate->defchoice, "True")==0); ++ } ++#endif + } + + /*! diff --git a/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.6.3-glib_eventloop_nullcheck.patch b/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.6.3-glib_eventloop_nullcheck.patch new file mode 100644 index 0000000000..d4e5924dff --- /dev/null +++ b/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.6.3-glib_eventloop_nullcheck.patch @@ -0,0 +1,69 @@ +diff -ur qt-everywhere-opensource-src-4.6.3/src/gui/kernel/qguieventdispatcher_glib.cpp qt-everywhere-opensource-src-4.6.3-glib_eventloop_nullcheck/src/gui/kernel/qguieventdispatcher_glib.cpp +--- qt-everywhere-opensource-src-4.6.3/src/gui/kernel/qguieventdispatcher_glib.cpp 2010-06-02 04:03:15.000000000 +0200 ++++ qt-everywhere-opensource-src-4.6.3-glib_eventloop_nullcheck/src/gui/kernel/qguieventdispatcher_glib.cpp 2010-12-08 22:22:38.000000000 +0100 +@@ -76,7 +76,7 @@ + GX11EventSource *source = reinterpret_cast(s); + return (XEventsQueued(X11->display, QueuedAfterFlush) + || (!(source->flags & QEventLoop::ExcludeUserInputEvents) +- && !source->d->queuedUserInputEvents.isEmpty())); ++ && source->d && !source->d->queuedUserInputEvents.isEmpty())); + } + + static gboolean x11EventSourceCheck(GSource *s) +@@ -84,7 +84,7 @@ + GX11EventSource *source = reinterpret_cast(s); + return (XEventsQueued(X11->display, QueuedAfterFlush) + || (!(source->flags & QEventLoop::ExcludeUserInputEvents) +- && !source->d->queuedUserInputEvents.isEmpty())); ++ && source->d && !source->d->queuedUserInputEvents.isEmpty())); + } + + static gboolean x11EventSourceDispatch(GSource *s, GSourceFunc callback, gpointer user_data) +@@ -95,7 +95,7 @@ + do { + XEvent event; + if (!(source->flags & QEventLoop::ExcludeUserInputEvents) +- && !source->d->queuedUserInputEvents.isEmpty()) { ++ && source->d && !source->d->queuedUserInputEvents.isEmpty()) { + // process a pending user input event + event = source->d->queuedUserInputEvents.takeFirst(); + } else if (XEventsQueued(X11->display, QueuedAlready)) { +@@ -112,7 +112,8 @@ + case XKeyRelease: + case EnterNotify: + case LeaveNotify: +- source->d->queuedUserInputEvents.append(event); ++ if (source->d) ++ source->d->queuedUserInputEvents.append(event); + continue; + + case ClientMessage: +@@ -127,7 +128,8 @@ + break; + } + } +- source->d->queuedUserInputEvents.append(event); ++ if (source->d) ++ source->d->queuedUserInputEvents.append(event); + continue; + + default: +@@ -140,7 +142,7 @@ + } + + // send through event filter +- if (source->q->filterEvent(&event)) ++ if (source->q && source->q->filterEvent(&event)) + continue; + + if (qApp->x11ProcessEvent(&event) == 1) +@@ -152,7 +154,8 @@ + + out: + +- source->d->runTimersOnceWithNormalPriority(); ++ if (source->d) ++ source->d->runTimersOnceWithNormalPriority(); + + if (callback) + callback(user_data); diff --git a/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.0-QTBUG-22037.patch b/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.0-QTBUG-22037.patch new file mode 100644 index 0000000000..4279ce2e77 --- /dev/null +++ b/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.0-QTBUG-22037.patch @@ -0,0 +1,41 @@ +diff -up qt-everywhere-opensource-src-4.8.0/src/corelib/tools/qlist.h.QTBUG-22037 qt-everywhere-opensource-src-4.8.0/src/corelib/tools/qlist.h +--- qt-everywhere-opensource-src-4.8.0/src/corelib/tools/qlist.h.QTBUG-22037 2011-10-03 22:44:32.000000000 -0500 ++++ qt-everywhere-opensource-src-4.8.0/src/corelib/tools/qlist.h 2011-10-15 14:25:52.238694974 -0500 +@@ -769,26 +769,18 @@ Q_OUTOFLINE_TEMPLATE void QList::clea + template + Q_OUTOFLINE_TEMPLATE int QList::removeAll(const T &_t) + { +- int index = indexOf(_t); +- if (index == -1) +- return 0; +- ++ detachShared(); + const T t = _t; +- detach(); +- +- Node *i = reinterpret_cast(p.at(index)); +- Node *e = reinterpret_cast(p.end()); +- Node *n = i; +- node_destruct(i); +- while (++i != e) { +- if (i->t() == t) +- node_destruct(i); +- else +- *n++ = *i; +- } +- +- int removedCount = e - n; +- d->end -= removedCount; ++ int removedCount=0, i=0; ++ Node *n; ++ while (i < p.size()) ++ if ((n = reinterpret_cast(p.at(i)))->t() == t) { ++ node_destruct(n); ++ p.remove(i); ++ ++removedCount; ++ } else { ++ ++i; ++ } + return removedCount; + } + diff --git a/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.0-tp-multilib-optflags.patch b/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.0-tp-multilib-optflags.patch new file mode 100644 index 0000000000..5c8b5a1dda --- /dev/null +++ b/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.0-tp-multilib-optflags.patch @@ -0,0 +1,36 @@ +diff -up qt-everywhere-opensource-src-4.8.0-tp/mkspecs/linux-g++-32/qmake.conf.multilib qt-everywhere-opensource-src-4.8.0-tp/mkspecs/linux-g++-32/qmake.conf +--- qt-everywhere-opensource-src-4.8.0-tp/mkspecs/linux-g++-32/qmake.conf.multilib 2011-05-23 12:26:21.000000000 +0200 ++++ qt-everywhere-opensource-src-4.8.0-tp/mkspecs/linux-g++-32/qmake.conf 2011-05-25 13:39:38.789054074 +0200 +@@ -12,6 +12,8 @@ QMAKE_INCREMENTAL_STYLE = sublib + QMAKE_CFLAGS = -m32 + QMAKE_LFLAGS = -m32 + ++QMAKE_CFLAGS_RELEASE += -O2 ++ + include(../common/linux.conf) + include(../common/gcc-base-unix.conf) + include(../common/g++-unix.conf) +diff -up qt-everywhere-opensource-src-4.8.0-tp/mkspecs/linux-g++-64/qmake.conf.multilib qt-everywhere-opensource-src-4.8.0-tp/mkspecs/linux-g++-64/qmake.conf +--- qt-everywhere-opensource-src-4.8.0-tp/mkspecs/linux-g++-64/qmake.conf.multilib 2011-05-23 12:26:21.000000000 +0200 ++++ qt-everywhere-opensource-src-4.8.0-tp/mkspecs/linux-g++-64/qmake.conf 2011-05-25 13:39:47.460747770 +0200 +@@ -15,6 +15,8 @@ QMAKE_INCREMENTAL_STYLE = sublib + QMAKE_CFLAGS = -m64 + QMAKE_LFLAGS = -m64 + ++QMAKE_CFLAGS_RELEASE += -O2 ++ + include(../common/linux.conf) + include(../common/gcc-base-unix.conf) + include(../common/g++-unix.conf) +diff -up qt-everywhere-opensource-src-4.8.0-tp/mkspecs/linux-g++/qmake.conf.multilib qt-everywhere-opensource-src-4.8.0-tp/mkspecs/linux-g++/qmake.conf +--- qt-everywhere-opensource-src-4.8.0-tp/mkspecs/linux-g++/qmake.conf.multilib 2011-05-23 12:26:21.000000000 +0200 ++++ qt-everywhere-opensource-src-4.8.0-tp/mkspecs/linux-g++/qmake.conf 2011-05-25 13:39:26.630088814 +0200 +@@ -9,6 +9,8 @@ CONFIG += qt warn_on release increment + QT += core gui + QMAKE_INCREMENTAL_STYLE = sublib + ++QMAKE_CFLAGS_RELEASE += -O2 ++ + include(../common/linux.conf) + include(../common/gcc-base-unix.conf) + include(../common/g++-unix.conf) diff --git a/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.1-qt3support_debuginfo.patch b/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.1-qt3support_debuginfo.patch new file mode 100644 index 0000000000..7458314672 --- /dev/null +++ b/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.1-qt3support_debuginfo.patch @@ -0,0 +1,10 @@ +diff -up qt-everywhere-opensource-src-4.8.1/src/qt3support/qt3support.pro.debuginfo qt-everywhere-opensource-src-4.8.1/src/qt3support/qt3support.pro +--- qt-everywhere-opensource-src-4.8.1/src/qt3support/qt3support.pro.debuginfo 2012-03-14 09:01:17.000000000 -0500 ++++ qt-everywhere-opensource-src-4.8.1/src/qt3support/qt3support.pro 2012-05-11 11:55:37.780070386 -0500 +@@ -34,6 +34,3 @@ MOCDIR = .moc + + *-g++*: QMAKE_CXXFLAGS += -fno-strict-aliasing + +-CONFIG -= separate_debug_info +-CONFIG += no_debug_info +- diff --git a/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.3-no_Werror.patch b/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.3-no_Werror.patch new file mode 100644 index 0000000000..86dcc288d5 --- /dev/null +++ b/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.3-no_Werror.patch @@ -0,0 +1,12 @@ +diff -up qt-everywhere-opensource-src-4.8.3/src/3rdparty/webkit/Source/WebKit.pri.no_Werror qt-everywhere-opensource-src-4.8.3/src/3rdparty/webkit/Source/WebKit.pri +--- qt-everywhere-opensource-src-4.8.3/src/3rdparty/webkit/Source/WebKit.pri.no_Werror 2012-09-06 02:33:50.000000000 -0500 ++++ qt-everywhere-opensource-src-4.8.3/src/3rdparty/webkit/Source/WebKit.pri 2012-09-11 09:03:19.152159783 -0500 +@@ -102,7 +102,7 @@ CONFIG -= warn_on + + # Treat warnings as errors on x86/Linux/GCC + linux-g++* { +- !CONFIG(standalone_package):if(isEqual(QT_ARCH,x86_64)|isEqual(QT_ARCH,i386)): QMAKE_CXXFLAGS += -Werror ++ #!CONFIG(standalone_package):if(isEqual(QT_ARCH,x86_64)|isEqual(QT_ARCH,i386)): QMAKE_CXXFLAGS += -Werror + + greaterThan(QT_GCC_MAJOR_VERSION, 3):greaterThan(QT_GCC_MINOR_VERSION, 5) { + if (!contains(QMAKE_CXXFLAGS, -std=c++0x) && !contains(QMAKE_CXXFLAGS, -std=gnu++0x)) { diff --git a/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.4-qmake_pkgconfig_requires_private.patch b/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.4-qmake_pkgconfig_requires_private.patch new file mode 100644 index 0000000000..0494c81f06 --- /dev/null +++ b/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.4-qmake_pkgconfig_requires_private.patch @@ -0,0 +1,16 @@ +diff -up qt-everywhere-opensource-src-4.8.4/qmake/generators/makefile.cpp.qmake_pkgconfig_requires_private qt-everywhere-opensource-src-4.8.4/qmake/generators/makefile.cpp +--- qt-everywhere-opensource-src-4.8.4/qmake/generators/makefile.cpp.qmake_pkgconfig_requires_private 2012-11-23 04:11:21.000000000 -0600 ++++ qt-everywhere-opensource-src-4.8.4/qmake/generators/makefile.cpp 2013-02-11 07:36:36.192779528 -0600 +@@ -3293,6 +3293,12 @@ MakefileGenerator::writePkgConfigFile() + t << "Requires: " << requires << endl; + } + ++ // requires.private ++ const QString requires_private = project->values("QMAKE_PKGCONFIG_REQUIRES_PRIVATE").join(" "); ++ if (!requires_private.isEmpty()) { ++ t << "Requires.private: " << requires_private << endl; ++ } ++ + t << endl; + } + diff --git a/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.5-QTBUG-14467.patch b/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.5-QTBUG-14467.patch new file mode 100644 index 0000000000..81d74ff4d5 --- /dev/null +++ b/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.5-QTBUG-14467.patch @@ -0,0 +1,24 @@ +diff -up qt-everywhere-opensource-src-4.8.5/mkspecs/features/qt_functions.prf.QTBUG-14467 qt-everywhere-opensource-src-4.8.5/mkspecs/features/qt_functions.prf +--- qt-everywhere-opensource-src-4.8.5/mkspecs/features/qt_functions.prf.QTBUG-14467 2013-05-30 16:19:17.000000000 -0500 ++++ qt-everywhere-opensource-src-4.8.5/mkspecs/features/qt_functions.prf 2013-06-09 11:53:45.709773603 -0500 +@@ -72,7 +72,7 @@ defineTest(qtAddLibrary) { + } + isEmpty(LINKAGE) { + if(!debug_and_release|build_pass):CONFIG(debug, debug|release) { +- win32:LINKAGE = -l$${LIB_NAME}$${QT_LIBINFIX}d ++ win32:LINKAGE = -l$${LIB_NAME}d$${QT_LIBINFIX} + mac:LINKAGE = -l$${LIB_NAME}$${QT_LIBINFIX}_debug + } + isEmpty(LINKAGE):LINKAGE = -l$${LIB_NAME}$${QT_LIBINFIX} +diff -up qt-everywhere-opensource-src-4.8.5/mkspecs/features/win32/windows.prf.QTBUG-14467 qt-everywhere-opensource-src-4.8.5/mkspecs/features/win32/windows.prf +--- qt-everywhere-opensource-src-4.8.5/mkspecs/features/win32/windows.prf.QTBUG-14467 2013-05-30 16:19:17.000000000 -0500 ++++ qt-everywhere-opensource-src-4.8.5/mkspecs/features/win32/windows.prf 2013-06-09 11:53:45.710773593 -0500 +@@ -6,7 +6,7 @@ contains(TEMPLATE, ".*app"){ + + qt:for(entryLib, $$list($$unique(QMAKE_LIBS_QT_ENTRY))) { + isEqual(entryLib, -lqtmain): { +- CONFIG(debug, debug|release): QMAKE_LIBS += $${entryLib}$${QT_LIBINFIX}d ++ CONFIG(debug, debug|release): QMAKE_LIBS += $${entryLib}d$${QT_LIBINFIX} + else: QMAKE_LIBS += $${entryLib}$${QT_LIBINFIX} + } else { + QMAKE_LIBS += $${entryLib} diff --git a/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.5-QTBUG-21900.patch b/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.5-QTBUG-21900.patch new file mode 100644 index 0000000000..018872f6d4 --- /dev/null +++ b/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.5-QTBUG-21900.patch @@ -0,0 +1,84 @@ +diff -up qt-everywhere-opensource-src-4.8.5/src/gui/kernel/qapplication_x11.cpp.QTBUG-21900 qt-everywhere-opensource-src-4.8.5/src/gui/kernel/qapplication_x11.cpp +--- qt-everywhere-opensource-src-4.8.5/src/gui/kernel/qapplication_x11.cpp.QTBUG-21900 2013-05-30 16:18:05.000000000 -0500 ++++ qt-everywhere-opensource-src-4.8.5/src/gui/kernel/qapplication_x11.cpp 2013-06-09 11:53:45.891771748 -0500 +@@ -818,6 +818,27 @@ static Bool qt_sync_request_scanner(Disp + #endif + #endif // QT_NO_XSYNC + ++struct qt_configure_event_data ++{ ++ WId window; ++ WId parent; ++}; ++ ++static Bool qt_configure_event_scanner(Display*, XEvent *event, XPointer arg) ++{ ++ qt_configure_event_data *data = ++ reinterpret_cast(arg); ++ if (event->type == ConfigureNotify && ++ event->xconfigure.window == data->window) { ++ return true; ++ } else if (event->type == ReparentNotify && ++ event->xreparent.window == data->window) { ++ data->parent = event->xreparent.parent; ++ } ++ ++ return false; ++} ++ + static void qt_x11_create_intern_atoms() + { + const char *names[QX11Data::NAtoms]; +@@ -5302,8 +5323,11 @@ bool QETWidget::translateConfigEvent(con + if (d->extra->compress_events) { + // ConfigureNotify compression for faster opaque resizing + XEvent otherEvent; +- while (XCheckTypedWindowEvent(X11->display, internalWinId(), ConfigureNotify, +- &otherEvent)) { ++ qt_configure_event_data configureData; ++ configureData.window = internalWinId(); ++ configureData.parent = d->topData()->parentWinId; ++ while (XCheckIfEvent(X11->display, &otherEvent, ++ &qt_configure_event_scanner, (XPointer)&configureData)) { + if (qt_x11EventFilter(&otherEvent)) + continue; + +@@ -5316,13 +5340,19 @@ bool QETWidget::translateConfigEvent(con + newSize.setWidth(otherEvent.xconfigure.width); + newSize.setHeight(otherEvent.xconfigure.height); + ++ trust = isVisible() ++ && (configureData.parent == XNone || ++ configureData.parent == QX11Info::appRootWindow()); ++ + if (otherEvent.xconfigure.send_event || trust) { + newCPos.rx() = otherEvent.xconfigure.x + + otherEvent.xconfigure.border_width; + newCPos.ry() = otherEvent.xconfigure.y + + otherEvent.xconfigure.border_width; + isCPos = true; +- } ++ } else { ++ isCPos = false; ++ } + } + #ifndef QT_NO_XSYNC + qt_sync_request_event_data sync_event; +@@ -5335,9 +5365,14 @@ bool QETWidget::translateConfigEvent(con + } + + if (!isCPos) { +- // we didn't get an updated position of the toplevel. +- // either we haven't moved or there is a bug in the window manager. +- // anyway, let's query the position to be certain. ++ // If the last configure event didn't have a trustable position, ++ // it's necessary to query, see ICCCM 4.24: ++ // ++ // Any real ConfigureNotify event on a top-level window implies ++ // that the window’s position on the root may have changed, even ++ // though the event reports that the window’s position in its ++ // parent is unchanged because the window may have been reparented. ++ + int x, y; + Window child; + XTranslateCoordinates(X11->display, internalWinId(), diff --git a/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.5-QTBUG-35459.patch b/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.5-QTBUG-35459.patch new file mode 100644 index 0000000000..dede8324d5 --- /dev/null +++ b/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.5-QTBUG-35459.patch @@ -0,0 +1,12 @@ +diff -ur qt-everywhere-opensource-src-4.8.5-CVE-2013-4549/src/xml/sax/qxml.cpp qt-everywhere-opensource-src-4.8.5-QTBUG-35459/src/xml/sax/qxml.cpp +--- qt-everywhere-opensource-src-4.8.5-CVE-2013-4549/src/xml/sax/qxml.cpp 2013-12-05 19:23:33.000000000 +0100 ++++ qt-everywhere-opensource-src-4.8.5-QTBUG-35459/src/xml/sax/qxml.cpp 2014-01-13 20:13:59.000000000 +0100 +@@ -428,7 +428,7 @@ + // for the DTD currently being parsed. + static const int dtdRecursionLimit = 2; + // The maximum amount of characters an entity value may contain, after expansion. +- static const int entityCharacterLimit = 1024; ++ static const int entityCharacterLimit = 65536; + + const QString &string(); + void stringClear(); diff --git a/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.5-QTBUG-4862.patch b/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.5-QTBUG-4862.patch new file mode 100644 index 0000000000..ee1d19136a --- /dev/null +++ b/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.5-QTBUG-4862.patch @@ -0,0 +1,29 @@ +diff -up qt-everywhere-opensource-src-4.8.5/src/corelib/io/qfilesystemengine_unix.cpp.QTBUG-4862 qt-everywhere-opensource-src-4.8.5/src/corelib/io/qfilesystemengine_unix.cpp +--- qt-everywhere-opensource-src-4.8.5/src/corelib/io/qfilesystemengine_unix.cpp.QTBUG-4862 2013-06-09 12:02:50.323221694 -0500 ++++ qt-everywhere-opensource-src-4.8.5/src/corelib/io/qfilesystemengine_unix.cpp 2013-06-09 12:38:53.140804742 -0500 +@@ -624,6 +624,25 @@ QString QFileSystemEngine::homePath() + { + QString home = QFile::decodeName(qgetenv("HOME")); + if (home.isEmpty()) ++ { ++#if !defined(QT_NO_THREAD) && defined(_POSIX_THREAD_SAFE_FUNCTIONS) && !defined(Q_OS_OPENBSD) ++ int size_max = sysconf(_SC_GETPW_R_SIZE_MAX); ++ if (size_max == -1) ++ size_max = 1024; ++ QVarLengthArray buf(size_max); ++#endif ++ struct passwd *pw = 0; ++ uid_t user_id = getuid(); ++ pw = getpwuid(user_id); ++#if !defined(QT_NO_THREAD) && defined(_POSIX_THREAD_SAFE_FUNCTIONS) && !defined(Q_OS_OPENBSD) ++ struct passwd entry; ++ getpwuid_r(user_id, &entry, buf.data(), buf.size(), &pw); ++#else ++ pw = getpwuid(user_id); ++#endif ++ home = QFile::decodeName(QByteArray(pw->pw_dir)); ++ } ++ if (home.isEmpty()) + home = rootPath(); + return QDir::cleanPath(home); + } diff --git a/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.5-mysql_config.patch b/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.5-mysql_config.patch new file mode 100644 index 0000000000..fc0ee7670b --- /dev/null +++ b/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.5-mysql_config.patch @@ -0,0 +1,19 @@ +diff -up qt-everywhere-opensource-src-4.8.5/configure.mysql_config qt-everywhere-opensource-src-4.8.5/configure +--- qt-everywhere-opensource-src-4.8.5/configure.mysql_config 2013-06-07 00:16:41.000000000 -0500 ++++ qt-everywhere-opensource-src-4.8.5/configure 2014-03-07 10:09:27.412071146 -0600 +@@ -5480,8 +5480,15 @@ for _SQLDR in $CFG_SQL_AVAILABLE; do + [ -z "$CFG_MYSQL_CONFIG" ] && CFG_MYSQL_CONFIG=`"$WHICH" mysql_config` + if [ -x "$CFG_MYSQL_CONFIG" ]; then + QT_CFLAGS_MYSQL=`$CFG_MYSQL_CONFIG --include 2>/dev/null` ++ $CFG_MYSQL_CONFIG --variable=pkglibdir &>/dev/null && \ ++ QT_MYSQL_PKGLIBDIR=`$CFG_MYSQL_CONFIG --variable=pkglibdir 2>/dev/null` ++ if [ -n "$QT_MYSQL_PKGLIBDIR" ]; then ++ QT_LFLAGS_MYSQL_R="-L$QT_MYSQL_PKGLIBDIR -lmysqlclient_r" ++ QT_LFLAGS_MYSQL="-L$QT_MYSQL_PKGLIBDIR -lmysqlclient" ++ else + QT_LFLAGS_MYSQL_R=`$CFG_MYSQL_CONFIG --libs_r 2>/dev/null` + QT_LFLAGS_MYSQL=`$CFG_MYSQL_CONFIG --libs 2>/dev/null` ++ fi + QT_MYSQL_VERSION=`$CFG_MYSQL_CONFIG --version 2>/dev/null` + QT_MYSQL_VERSION_MAJOR=`echo $QT_MYSQL_VERSION | cut -d . -f 1` + fi diff --git a/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.5-qgtkstyle_disable_gtk_theme_check.patch b/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.5-qgtkstyle_disable_gtk_theme_check.patch new file mode 100644 index 0000000000..9a9f773537 --- /dev/null +++ b/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.5-qgtkstyle_disable_gtk_theme_check.patch @@ -0,0 +1,22 @@ +diff -up qt-everywhere-opensource-src-4.8.5/src/gui/styles/qgtkstyle_p.cpp.qgtkstyle_disable_gtk_theme_check qt-everywhere-opensource-src-4.8.5/src/gui/styles/qgtkstyle_p.cpp +--- qt-everywhere-opensource-src-4.8.5/src/gui/styles/qgtkstyle_p.cpp.qgtkstyle_disable_gtk_theme_check 2013-06-09 16:28:22.938840346 -0500 ++++ qt-everywhere-opensource-src-4.8.5/src/gui/styles/qgtkstyle_p.cpp 2013-06-09 17:03:01.781125479 -0500 +@@ -503,18 +503,6 @@ void QGtkStylePrivate::initGtkWidgets() + return; + } + +- static QString themeName; +- if (!gtkWidgetMap()->contains("GtkWindow") && themeName.isEmpty()) { +- themeName = getThemeName(); +- +- if (themeName == QLS("Qt") || themeName == QLS("Qt4")) { +- // Due to namespace conflicts with Qt3 and obvious recursion with Qt4, +- // we cannot support the GTK_Qt Gtk engine +- qWarning("QGtkStyle cannot be used together with the GTK_Qt engine."); +- return; +- } +- } +- + if (QGtkStylePrivate::gtk_init) { + // Gtk will set the Qt error handler so we have to reset it afterwards + x11ErrorHandler qt_x_errhandler = XSetErrorHandler(0); diff --git a/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.5-qt_plugin_path.patch b/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.5-qt_plugin_path.patch new file mode 100644 index 0000000000..6a87783e3a --- /dev/null +++ b/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.5-qt_plugin_path.patch @@ -0,0 +1,19 @@ +diff -up qt-everywhere-opensource-src-4.8.5/src/corelib/kernel/qcoreapplication.cpp.qt_plugin_path qt-everywhere-opensource-src-4.8.5/src/corelib/kernel/qcoreapplication.cpp +--- qt-everywhere-opensource-src-4.8.5/src/corelib/kernel/qcoreapplication.cpp.qt_plugin_path 2013-06-07 00:16:52.000000000 -0500 ++++ qt-everywhere-opensource-src-4.8.5/src/corelib/kernel/qcoreapplication.cpp 2013-06-21 07:14:10.045039936 -0500 +@@ -2511,6 +2511,15 @@ QStringList QCoreApplication::libraryPat + if (!app_libpaths->contains(installPathPlugins)) + app_libpaths->append(installPathPlugins); + } ++ ++ // hack in support for kde4 plugin paths -- Rex ++ QString kde4PathPlugins = QLibraryInfo::location(QLibraryInfo::LibrariesPath) + QLatin1String("/kde4/plugins"); ++ if (QFile::exists(kde4PathPlugins)) { ++ // Make sure we convert from backslashes to slashes. ++ //kde4PathPlugins = QDir(kde4PathPlugins).canonicalPath(); ++ if (!app_libpaths->contains(kde4PathPlugins)) ++ app_libpaths->append(kde4PathPlugins); ++ } + #endif + + // If QCoreApplication is not yet instantiated, diff --git a/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.5-tds_no_strict_aliasing.patch b/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.5-tds_no_strict_aliasing.patch new file mode 100644 index 0000000000..2deeb51bbf --- /dev/null +++ b/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.5-tds_no_strict_aliasing.patch @@ -0,0 +1,12 @@ +diff -up qt-everywhere-opensource-src-4.8.5/src/sql/drivers/tds/qsql_tds.pri.tds_no_strict_aliasing qt-everywhere-opensource-src-4.8.5/src/sql/drivers/tds/qsql_tds.pri +--- qt-everywhere-opensource-src-4.8.5/src/sql/drivers/tds/qsql_tds.pri.tds_no_strict_aliasing 2013-06-09 11:57:49.198291245 -0500 ++++ qt-everywhere-opensource-src-4.8.5/src/sql/drivers/tds/qsql_tds.pri 2013-06-09 12:01:24.120100371 -0500 +@@ -1,6 +1,8 @@ + HEADERS += $$PWD/qsql_tds.h + SOURCES += $$PWD/qsql_tds.cpp + ++*-g++*: QMAKE_CXXFLAGS += -fno-strict-aliasing ++ + unix|win32-g++*: { + LIBS += $$QT_LFLAGS_TDS + !contains(LIBS, .*sybdb.*):LIBS += -lsybdb diff --git a/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.5-uic_multilib.patch b/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.5-uic_multilib.patch new file mode 100644 index 0000000000..d04d1be5af --- /dev/null +++ b/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.5-uic_multilib.patch @@ -0,0 +1,28 @@ +diff -up qt-everywhere-opensource-src-4.8.5/src/tools/moc/moc.cpp.uic_multilib qt-everywhere-opensource-src-4.8.5/src/tools/moc/moc.cpp +diff -up qt-everywhere-opensource-src-4.8.5/src/tools/uic3/embed.cpp.uic_multilib qt-everywhere-opensource-src-4.8.5/src/tools/uic3/embed.cpp +--- qt-everywhere-opensource-src-4.8.5/src/tools/uic3/embed.cpp.uic_multilib 2013-05-30 16:18:04.000000000 -0500 ++++ qt-everywhere-opensource-src-4.8.5/src/tools/uic3/embed.cpp 2013-06-09 11:50:25.597813974 -0500 +@@ -152,8 +152,7 @@ void Ui3Reader::embed(const char *projec + for ( it = images.begin(); it != images.end(); ++it ) + out << "** " << *it << "\n"; + out << "**\n"; +- out << "** Created: " << QDateTime::currentDateTime().toString() << "\n"; +- out << "** by: The User Interface Compiler for Qt version " << QT_VERSION_STR << "\n"; ++ out << "** Created: by: The User Interface Compiler for Qt version " << QT_VERSION_STR << "\n"; + out << "**\n"; + out << "** WARNING! All changes made in this file will be lost!\n"; + out << "****************************************************************************/\n"; +diff -up qt-everywhere-opensource-src-4.8.5/src/tools/uic3/uic.cpp.uic_multilib qt-everywhere-opensource-src-4.8.5/src/tools/uic3/uic.cpp +--- qt-everywhere-opensource-src-4.8.5/src/tools/uic3/uic.cpp.uic_multilib 2013-05-30 16:18:04.000000000 -0500 ++++ qt-everywhere-opensource-src-4.8.5/src/tools/uic3/uic.cpp 2013-06-09 11:51:28.310174526 -0500 +@@ -146,8 +146,7 @@ void Uic::writeCopyrightHeader(DomUI *ui + out << "/********************************************************************************\n"; + out << "** Form generated from reading UI file '" << QFileInfo(opt.inputFile).fileName() << "'\n"; + out << "**\n"; +- out << "** Created: " << QDateTime::currentDateTime().toString() << "\n"; +- out << "** " << QString::fromLatin1("by: Qt User Interface Compiler version %1\n").arg(QLatin1String(QT_VERSION_STR)); ++ out << "** Created by: " << QString::fromLatin1("Qt User Interface Compiler version %1\n").arg(QLatin1String(QT_VERSION_STR)); + out << "**\n"; + out << "** WARNING! All changes made in this file will be lost when recompiling UI file!\n"; + out << "********************************************************************************/\n\n"; +diff -up qt-everywhere-opensource-src-4.8.5/src/tools/uic/uic.cpp.uic_multilib qt-everywhere-opensource-src-4.8.5/src/tools/uic/uic.cpp diff --git a/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.5-webcore_debuginfo.patch b/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.5-webcore_debuginfo.patch new file mode 100644 index 0000000000..1ea8af2b0e --- /dev/null +++ b/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.5-webcore_debuginfo.patch @@ -0,0 +1,16 @@ +diff -up qt-everywhere-opensource-src-4.8.5/src/3rdparty/webkit/Source/WebCore/WebCore.pri.webkit_debuginfo qt-everywhere-opensource-src-4.8.5/src/3rdparty/webkit/Source/WebCore/WebCore.pri +--- qt-everywhere-opensource-src-4.8.5/src/3rdparty/webkit/Source/WebCore/WebCore.pri.webkit_debuginfo 2013-06-07 00:16:55.000000000 -0500 ++++ qt-everywhere-opensource-src-4.8.5/src/3rdparty/webkit/Source/WebCore/WebCore.pri 2013-07-11 14:04:19.937056249 -0500 +@@ -5,6 +5,12 @@ include(features.pri) + + # Uncomment this to enable Texture Mapper. + # CONFIG += texmap ++# ++equals(QT_ARCH, s390)|equals(QT_ARCH, arm)|equals(QT_ARCH, mips)|equals(QT_ARCH, i386)|equals(QT_ARCH, i686)|equals(QT_ARCH, x86_64)|equals(QT_ARCH, powerpc64)|equals(QT_ARCH, powerpc) { ++ message("WebCore workaround for QtWebkit: do not build with -g, but with -g1") ++ QMAKE_CXXFLAGS_RELEASE -= -g ++ QMAKE_CXXFLAGS_RELEASE += -g1 ++} + + QT *= network + diff --git a/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.6-QTBUG-34614.patch b/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.6-QTBUG-34614.patch new file mode 100644 index 0000000000..8b0468bb66 --- /dev/null +++ b/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.6-QTBUG-34614.patch @@ -0,0 +1,95 @@ +--- src/corelib/kernel/qeventdispatcher_glib.cpp.sav 2014-03-28 15:26:37.000000000 +0100 ++++ qt-everywhere-opensource-src-4.8.6/src/corelib/kernel/qeventdispatcher_glib.cpp 2014-04-24 09:44:09.358659204 +0200 +@@ -255,22 +255,30 @@ struct GPostEventSource + GSource source; + QAtomicInt serialNumber; + int lastSerialNumber; ++ QEventLoop::ProcessEventsFlags processEventsFlags; + QEventDispatcherGlibPrivate *d; + }; + + static gboolean postEventSourcePrepare(GSource *s, gint *timeout) + { ++ GPostEventSource *source = reinterpret_cast(s); + QThreadData *data = QThreadData::current(); + if (!data) + return false; + ++ QEventLoop::ProcessEventsFlags excludeAllFlags ++ = QEventLoop::ExcludeUserInputEvents ++ | QEventLoop::ExcludeSocketNotifiers ++ | QEventLoop::X11ExcludeTimers; ++ if ((source->processEventsFlags & excludeAllFlags) == excludeAllFlags) ++ return false; ++ + gint dummy; + if (!timeout) + timeout = &dummy; + const bool canWait = data->canWaitLocked(); + *timeout = canWait ? -1 : 0; + +- GPostEventSource *source = reinterpret_cast(s); + return (!canWait + || (source->serialNumber != source->lastSerialNumber)); + } +@@ -284,8 +292,14 @@ static gboolean postEventSourceDispatch( + { + GPostEventSource *source = reinterpret_cast(s); + source->lastSerialNumber = source->serialNumber; +- QCoreApplication::sendPostedEvents(); +- source->d->runTimersOnceWithNormalPriority(); ++ QEventLoop::ProcessEventsFlags excludeAllFlags ++ = QEventLoop::ExcludeUserInputEvents ++ | QEventLoop::ExcludeSocketNotifiers ++ | QEventLoop::X11ExcludeTimers; ++ if ((source->processEventsFlags & excludeAllFlags) != excludeAllFlags) { ++ QCoreApplication::sendPostedEvents(); ++ source->d->runTimersOnceWithNormalPriority(); ++ } + return true; // i dunno, george... + } + +@@ -329,6 +343,7 @@ QEventDispatcherGlibPrivate::QEventDispa + postEventSource = reinterpret_cast(g_source_new(&postEventSourceFuncs, + sizeof(GPostEventSource))); + postEventSource->serialNumber = 1; ++ postEventSource->processEventsFlags = QEventLoop::AllEvents; + postEventSource->d = this; + g_source_set_can_recurse(&postEventSource->source, true); + g_source_attach(&postEventSource->source, mainContext); +@@ -423,6 +438,7 @@ bool QEventDispatcherGlib::processEvents + + // tell postEventSourcePrepare() and timerSource about any new flags + QEventLoop::ProcessEventsFlags savedFlags = d->timerSource->processEventsFlags; ++ d->postEventSource->processEventsFlags = flags; + d->timerSource->processEventsFlags = flags; + d->socketNotifierSource->processEventsFlags = flags; + +@@ -435,6 +451,7 @@ bool QEventDispatcherGlib::processEvents + while (!result && canWait) + result = g_main_context_iteration(d->mainContext, canWait); + ++ d->postEventSource->processEventsFlags = savedFlags; + d->timerSource->processEventsFlags = savedFlags; + d->socketNotifierSource->processEventsFlags = savedFlags; + +--- src/corelib/kernel/qeventdispatcher_unix.cpp.sav 2013-06-07 07:16:52.000000000 +0200 ++++ qt-everywhere-opensource-src-4.8.6/src/corelib/kernel/qeventdispatcher_unix.cpp 2014-04-24 09:43:06.927589535 +0200 +@@ -905,7 +905,15 @@ bool QEventDispatcherUNIX::processEvents + + // we are awake, broadcast it + emit awake(); +- QCoreApplicationPrivate::sendPostedEvents(0, 0, d->threadData); ++ ++ QEventLoop::ProcessEventsFlags excludeAllFlags ++ = QEventLoop::ExcludeUserInputEvents ++ | QEventLoop::ExcludeSocketNotifiers ++ | QEventLoop::X11ExcludeTimers; ++ if ((flags & excludeAllFlags) == excludeAllFlags) ++ return false; ++ if(( flags & excludeAllFlags ) != excludeAllFlags ) ++ QCoreApplicationPrivate::sendPostedEvents(0, 0, d->threadData); + + int nevents = 0; + const bool canWait = (d->threadData->canWaitLocked() + diff --git a/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.6-QTBUG-37380.patch b/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.6-QTBUG-37380.patch new file mode 100644 index 0000000000..296a5ada69 --- /dev/null +++ b/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.6-QTBUG-37380.patch @@ -0,0 +1,64 @@ +Author: Jan-Marek Glogowski +Date: Thu Mar 06 18:44:43 2014 +0100 + + Honor QEventLoop::ExcludeSocketNotifiers in glib event loop. + + Implements QEventLoop::ExcludeSocketNotifiers in the same way + QEventLoop::X11ExcludeTimers is already implemented for the glib + event loop. + +--- qt4-x11-4.8.1.orig/src/corelib/kernel/qeventdispatcher_glib.cpp ++++ qt4-x11-4.8.1/src/corelib/kernel/qeventdispatcher_glib.cpp +@@ -65,6 +65,7 @@ struct GPollFDWithQSocketNotifier + struct GSocketNotifierSource + { + GSource source; ++ QEventLoop::ProcessEventsFlags processEventsFlags; + QList pollfds; + }; + +@@ -80,6 +81,9 @@ static gboolean socketNotifierSourceChec + GSocketNotifierSource *src = reinterpret_cast(source); + + bool pending = false; ++ if (src->processEventsFlags & QEventLoop::ExcludeSocketNotifiers) ++ return pending; ++ + for (int i = 0; !pending && i < src->pollfds.count(); ++i) { + GPollFDWithQSocketNotifier *p = src->pollfds.at(i); + +@@ -103,6 +107,9 @@ static gboolean socketNotifierSourceDisp + QEvent event(QEvent::SockAct); + + GSocketNotifierSource *src = reinterpret_cast(source); ++ if (src->processEventsFlags & QEventLoop::ExcludeSocketNotifiers) ++ return true; ++ + for (int i = 0; i < src->pollfds.count(); ++i) { + GPollFDWithQSocketNotifier *p = src->pollfds.at(i); + +@@ -330,6 +337,7 @@ QEventDispatcherGlibPrivate::QEventDispa + reinterpret_cast(g_source_new(&socketNotifierSourceFuncs, + sizeof(GSocketNotifierSource))); + (void) new (&socketNotifierSource->pollfds) QList(); ++ socketNotifierSource->processEventsFlags = QEventLoop::AllEvents; + g_source_set_can_recurse(&socketNotifierSource->source, true); + g_source_attach(&socketNotifierSource->source, mainContext); + +@@ -415,6 +423,7 @@ bool QEventDispatcherGlib::processEvents + // tell postEventSourcePrepare() and timerSource about any new flags + QEventLoop::ProcessEventsFlags savedFlags = d->timerSource->processEventsFlags; + d->timerSource->processEventsFlags = flags; ++ d->socketNotifierSource->processEventsFlags = flags; + + if (!(flags & QEventLoop::EventLoopExec)) { + // force timers to be sent at normal priority +@@ -426,6 +435,7 @@ bool QEventDispatcherGlib::processEvents + result = g_main_context_iteration(d->mainContext, canWait); + + d->timerSource->processEventsFlags = savedFlags; ++ d->socketNotifierSource->processEventsFlags = savedFlags; + + if (canWait) + emit awake(); + diff --git a/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.6-QTBUG-38585.patch b/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.6-QTBUG-38585.patch new file mode 100644 index 0000000000..6aee4fee73 --- /dev/null +++ b/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.6-QTBUG-38585.patch @@ -0,0 +1,13 @@ +--- src/gui/kernel/qclipboard_x11.cpp.sav 2014-04-25 09:52:03.855693228 +0200 ++++ qt-everywhere-opensource-src-4.8.6/src/gui/kernel/qclipboard_x11.cpp 2014-04-25 09:51:58.038693777 +0200 +@@ -548,7 +548,8 @@ bool QX11Data::clipboardWaitForEvent(Win + return false; + + XSync(X11->display, false); +- usleep(50000); ++ if (!XPending(X11->display)) ++ usleep(5000); + + now.start(); + + diff --git a/desktop/toolkit/qt/files/fedora/qt-x11-opensource-src-4.5.0-fix-qatomic-inline-asm.patch b/desktop/toolkit/qt/files/fedora/qt-x11-opensource-src-4.5.0-fix-qatomic-inline-asm.patch new file mode 100644 index 0000000000..e5ab4bad96 --- /dev/null +++ b/desktop/toolkit/qt/files/fedora/qt-x11-opensource-src-4.5.0-fix-qatomic-inline-asm.patch @@ -0,0 +1,50 @@ +diff -ur qt-x11-opensource-src-4.5.0/src/corelib/arch/qatomic_i386.h qt-x11-opensource-src-4.5.0-fix-qatomic-inline-asm/src/corelib/arch/qatomic_i386.h +--- qt-x11-opensource-src-4.5.0/src/corelib/arch/qatomic_i386.h 2009-02-25 22:09:21.000000000 +0100 ++++ qt-x11-opensource-src-4.5.0-fix-qatomic-inline-asm/src/corelib/arch/qatomic_i386.h 2009-04-01 17:54:21.000000000 +0200 +@@ -115,8 +115,8 @@ + asm volatile("lock\n" + "incl %0\n" + "setne %1" +- : "=m" (_q_value), "=qm" (ret) +- : "m" (_q_value) ++ : "+m" (_q_value), "=qm" (ret) ++ : + : "memory"); + return ret != 0; + } +@@ -127,8 +127,8 @@ + asm volatile("lock\n" + "decl %0\n" + "setne %1" +- : "=m" (_q_value), "=qm" (ret) +- : "m" (_q_value) ++ : "+m" (_q_value), "=qm" (ret) ++ : + : "memory"); + return ret != 0; + } +diff -ur qt-x11-opensource-src-4.5.0/src/corelib/arch/qatomic_x86_64.h qt-x11-opensource-src-4.5.0-fix-qatomic-inline-asm/src/corelib/arch/qatomic_x86_64.h +--- qt-x11-opensource-src-4.5.0/src/corelib/arch/qatomic_x86_64.h 2009-02-25 22:09:21.000000000 +0100 ++++ qt-x11-opensource-src-4.5.0-fix-qatomic-inline-asm/src/corelib/arch/qatomic_x86_64.h 2009-04-01 17:54:32.000000000 +0200 +@@ -116,8 +116,8 @@ + asm volatile("lock\n" + "incl %0\n" + "setne %1" +- : "=m" (_q_value), "=qm" (ret) +- : "m" (_q_value) ++ : "+m" (_q_value), "=qm" (ret) ++ : + : "memory"); + return ret != 0; + } +@@ -128,8 +128,8 @@ + asm volatile("lock\n" + "decl %0\n" + "setne %1" +- : "=m" (_q_value), "=qm" (ret) +- : "m" (_q_value) ++ : "+m" (_q_value), "=qm" (ret) ++ : + : "memory"); + return ret != 0; + } diff --git a/desktop/toolkit/qt/files/fedora/qt-x11-opensource-src-4.5.1-enable_ft_lcdfilter.patch b/desktop/toolkit/qt/files/fedora/qt-x11-opensource-src-4.5.1-enable_ft_lcdfilter.patch new file mode 100644 index 0000000000..4ab3ea4b11 --- /dev/null +++ b/desktop/toolkit/qt/files/fedora/qt-x11-opensource-src-4.5.1-enable_ft_lcdfilter.patch @@ -0,0 +1,12 @@ +diff -up qt-x11-opensource-src-4.5.1/src/gui/text/qfontengine_ft.cpp.enable_ft_lcdfilter qt-x11-opensource-src-4.5.1/src/gui/text/qfontengine_ft.cpp +--- qt-x11-opensource-src-4.5.1/src/gui/text/qfontengine_ft.cpp.enable_ft_lcdfilter 2009-04-21 18:57:41.000000000 -0500 ++++ qt-x11-opensource-src-4.5.1/src/gui/text/qfontengine_ft.cpp 2009-04-24 11:17:49.562695405 -0500 +@@ -72,7 +72,7 @@ + #include FT_CONFIG_OPTIONS_H + #endif + +-#if defined(FT_LCD_FILTER_H) && defined(FT_CONFIG_OPTION_SUBPIXEL_RENDERING) ++#if defined(FT_LCD_FILTER_H) + #define QT_USE_FREETYPE_LCDFILTER + #endif + diff --git a/desktop/toolkit/qt/files/mkspecs.patch b/desktop/toolkit/qt/files/mkspecs.patch new file mode 100644 index 0000000000..2cd05f90e5 --- /dev/null +++ b/desktop/toolkit/qt/files/mkspecs.patch @@ -0,0 +1,54 @@ +diff -Naur mkspecs/common.orig/g++-base.conf mkspecs/common/g++-base.conf +--- mkspecs/common.orig/g++-base.conf 2012-03-14 16:01:12.000000000 +0200 ++++ mkspecs/common/g++-base.conf 2012-04-05 14:53:05.670347102 +0300 +@@ -8,17 +8,23 @@ + # you can use the manual test in tests/manual/mkspecs. + # + +-QMAKE_CC = gcc ++QMAKE_CC = PISILINUX_CC + + QMAKE_LINK_C = $$QMAKE_CC + QMAKE_LINK_C_SHLIB = $$QMAKE_CC + +-QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -g ++QMAKE_CFLAGS_RELEASE += PISILINUX_CFLAGS ++QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += PISILINUX_CFLAGS -g + +-QMAKE_CXX = g++ ++QMAKE_CXX = PISILINUX_CXX + +-QMAKE_LINK = $$QMAKE_CXX +-QMAKE_LINK_SHLIB = $$QMAKE_CXX ++ ++QMAKE_LINK = PISILINUX_CXX ++QMAKE_LINK_SHLIB = PISILINUX_CXX ++QMAKE_LINK_C = PISILINUX_CC ++QMAKE_LINK_C_SHLIB = PISILINUX_CC ++ ++QMAKE_LFLAGS_RELEASE += PISILINUX_LDFLAGS + + QMAKE_CXXFLAGS_RELEASE_WITH_DEBUGINFO += $$QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO + +diff -Naur mkspecs/common.orig/g++-unix.conf mkspecs/common/g++-unix.conf +--- mkspecs/common.orig/g++-unix.conf 2012-03-14 16:01:12.000000000 +0200 ++++ mkspecs/common/g++-unix.conf 2012-04-05 14:49:41.723399705 +0300 +@@ -10,5 +10,5 @@ + + include(g++-base.conf) + +-QMAKE_LFLAGS_RELEASE += -Wl,-O1 ++QMAKE_LFLAGS_RELEASE += PISILINUX_LDFLAGS + QMAKE_LFLAGS_NOUNDEF += -Wl,--no-undefined +diff -Naur mkspecs/common.orig/linux.conf mkspecs/common/linux.conf +--- mkspecs/common.orig/linux.conf 2012-03-14 16:01:12.000000000 +0200 ++++ mkspecs/common/linux.conf 2012-04-05 14:54:23.487037709 +0300 +@@ -57,7 +57,7 @@ + QMAKE_MOVE = mv -f + QMAKE_DEL_FILE = rm -f + QMAKE_DEL_DIR = rmdir +-QMAKE_STRIP = strip ++QMAKE_STRIP = + QMAKE_STRIPFLAGS_LIB += --strip-unneeded + QMAKE_CHK_DIR_EXISTS = test -d + QMAKE_MKDIR = mkdir -p diff --git a/desktop/toolkit/qt/files/opensuse/0001-Don-t-crash-on-broken-GIF-images.patch b/desktop/toolkit/qt/files/opensuse/0001-Don-t-crash-on-broken-GIF-images.patch new file mode 100644 index 0000000000..011918935e --- /dev/null +++ b/desktop/toolkit/qt/files/opensuse/0001-Don-t-crash-on-broken-GIF-images.patch @@ -0,0 +1,42 @@ +From 19d31c5b036a46365584d7d97e87f7fe16150623 Mon Sep 17 00:00:00 2001 +From: Lars Knoll +Date: Thu, 24 Apr 2014 15:33:27 +0200 +Subject: [PATCH] Don't crash on broken GIF images + +Broken GIF images could set invalid width and height +values inside the image, leading to Qt creating a null +QImage for it. In that case we need to abort decoding +the image and return an error. + +Initial patch by Rich Moore. + +Backport of Id82a4036f478bd6e49c402d6598f57e7e5bb5e1e from Qt 5 + +Task-number: QTBUG-38367 +Change-Id: I0680740018aaa8356d267b7af3f01fac3697312a +Security-advisory: CVE-2014-0190 +--- + src/gui/image/qgifhandler.cpp | 7 +++++++ + 1 file changed, 7 insertions(+) + +diff --git a/src/gui/image/qgifhandler.cpp b/src/gui/image/qgifhandler.cpp +index 3324f04..5199dd3 100644 +--- a/src/gui/image/qgifhandler.cpp ++++ b/src/gui/image/qgifhandler.cpp +@@ -359,6 +359,13 @@ int QGIFFormat::decode(QImage *image, const uchar *buffer, int length, + memset(bits, 0, image->byteCount()); + } + ++ // Check if the previous attempt to create the image failed. If it ++ // did then the image is broken and we should give up. ++ if (image->isNull()) { ++ state = Error; ++ return -1; ++ } ++ + disposePrevious(image); + disposed = false; + +-- +1.9.0 + diff --git a/desktop/toolkit/qt/files/opensuse/0180-window-role.diff b/desktop/toolkit/qt/files/opensuse/0180-window-role.diff new file mode 100644 index 0000000000..661c3ba5b2 --- /dev/null +++ b/desktop/toolkit/qt/files/opensuse/0180-window-role.diff @@ -0,0 +1,96 @@ +Index: src/corelib/kernel/qobject.cpp +=================================================================== +--- src/corelib/kernel/qobject.cpp.orig ++++ src/corelib/kernel/qobject.cpp +@@ -1102,10 +1102,19 @@ void QObject::setObjectName(const QStrin + + d->objectName = name; + ++#if defined(Q_WS_X11) ++ d->checkWindowRole(); ++#endif ++ + if (objectNameChanged) + d->declarativeData->objectNameChanged(d->declarativeData, this); + } + ++#if defined(Q_WS_X11) ++void QObjectPrivate::checkWindowRole() ++{ ++} ++#endif + + #ifdef QT3_SUPPORT + /*! \internal +Index: src/corelib/kernel/qobject_p.h +=================================================================== +--- src/corelib/kernel/qobject_p.h.orig ++++ src/corelib/kernel/qobject_p.h +@@ -162,6 +162,9 @@ public: + #ifdef QT3_SUPPORT + void sendPendingChildInsertedEvents(); + #endif ++#if defined(Q_WS_X11) ++ virtual void checkWindowRole(); ++#endif + + static inline Sender *setCurrentSender(QObject *receiver, + Sender *sender); +Index: src/gui/kernel/qwidget_p.h +=================================================================== +--- src/gui/kernel/qwidget_p.h.orig ++++ src/gui/kernel/qwidget_p.h +@@ -784,6 +784,7 @@ public: + static QWidget *keyboardGrabber; + + void setWindowRole(); ++ virtual void checkWindowRole(); + void sendStartupMessage(const char *message) const; + void setNetWmWindowTypes(); + void x11UpdateIsOpaque(); +Index: src/gui/kernel/qwidget_x11.cpp +=================================================================== +--- src/gui/kernel/qwidget_x11.cpp.orig ++++ src/gui/kernel/qwidget_x11.cpp +@@ -849,13 +849,17 @@ void QWidgetPrivate::create_sys(WId wind + + + // declare the widget's window role ++ QByteArray windowRole; + if (QTLWExtra *topData = maybeTopData()) { +- if (!topData->role.isEmpty()) { +- QByteArray windowRole = topData->role.toUtf8(); +- XChangeProperty(dpy, id, +- ATOM(WM_WINDOW_ROLE), XA_STRING, 8, PropModeReplace, +- (unsigned char *)windowRole.constData(), windowRole.length()); +- } ++ if (!topData->role.isEmpty()) ++ windowRole = topData->role.toUtf8(); ++ } ++ if (windowRole.isEmpty()) // use object name as a fallback ++ windowRole = objectName.toUtf8(); ++ if (!windowRole.isEmpty()) { ++ XChangeProperty(dpy, id, ++ ATOM(WM_WINDOW_ROLE), XA_STRING, 8, PropModeReplace, ++ (unsigned char *)windowRole.constData(), windowRole.length()); + } + + // set client leader property +@@ -3015,6 +3019,17 @@ void QWidgetPrivate::setWindowRole() + XChangeProperty(X11->display, q->internalWinId(), + ATOM(WM_WINDOW_ROLE), XA_STRING, 8, PropModeReplace, + (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) diff --git a/desktop/toolkit/qt/files/opensuse/0188-fix-moc-parser-same-name-header.diff b/desktop/toolkit/qt/files/opensuse/0188-fix-moc-parser-same-name-header.diff new file mode 100644 index 0000000000..660dfdf0ad --- /dev/null +++ b/desktop/toolkit/qt/files/opensuse/0188-fix-moc-parser-same-name-header.diff @@ -0,0 +1,37 @@ +qt-bugs@ issue : none +Trolltech task ID : none +applied: yes +author: Helio Chissini de Castro +os: unix + +In situations where included header have same name as their parent dir, i.e. +include/QtMyModule/QtMyModule and #include on code. moc will fail if parent dir was +added in front of includepath. +moc -Iinclude -Iinclude/QtMyModule fails +moc -Iinclude/QtMyModule works +This patch move dir test to proper place, as entry is validated only if is a real file, not a dir. +Detected by qca2 plugins code that uses QtCrypto/QtCrypto +Thanks to Thiago to find proper syntax + +Index: src/tools/moc/preprocessor.cpp +=================================================================== +--- src/tools/moc/preprocessor.cpp.orig ++++ src/tools/moc/preprocessor.cpp +@@ -799,7 +799,7 @@ void Preprocessor::preprocess(const QByt + QFileInfo fi; + if (local) + fi.setFile(QFileInfo(QString::fromLocal8Bit(filename)).dir(), QString::fromLocal8Bit(include)); +- for (int j = 0; j < Preprocessor::includes.size() && !fi.exists(); ++j) { ++ for (int j = 0; j < Preprocessor::includes.size() && ( !fi.exists() || fi.isDir() ); ++j) { + const IncludePath &p = Preprocessor::includes.at(j); + if (p.isFrameworkPath) { + const int slashPos = include.indexOf('/'); +@@ -819,7 +819,7 @@ void Preprocessor::preprocess(const QByt + } + } + +- if (!fi.exists() || fi.isDir()) ++ if ( !fi.exists() ) + continue; + include = fi.canonicalFilePath().toLocal8Bit(); + diff --git a/desktop/toolkit/qt/files/opensuse/0191-listview-alternate-row-colors.diff b/desktop/toolkit/qt/files/opensuse/0191-listview-alternate-row-colors.diff new file mode 100644 index 0000000000..480464cee2 --- /dev/null +++ b/desktop/toolkit/qt/files/opensuse/0191-listview-alternate-row-colors.diff @@ -0,0 +1,24 @@ +qt-bugs@ issue : 178507 +Trolltech task ID : 179170 +applied: no +author: Matthew Woehlke + +This patch fixes incorrect setting of the palette color group in +QListView that resulted in alternate rows being drawn with the Active +AlternateBase color even for inactive widgets (while the rest of the +widget is drawn correctly). Please let me know if QListView is not +the only culprit. (QTreeView was fixed by TT already.) + +Index: src/gui/itemviews/qlistview.cpp +=================================================================== +--- src/gui/itemviews/qlistview.cpp.orig ++++ src/gui/itemviews/qlistview.cpp +@@ -997,7 +997,7 @@ void QListView::paintEvent(QPaintEvent * + option.state &= ~QStyle::State_Enabled; + cg = QPalette::Disabled; + } else { +- cg = QPalette::Normal; ++ cg = window()->isActiveWindow() ? QPalette::Active : QPalette::Inactive; + } + option.palette.setCurrentColorGroup(cg); + } diff --git a/desktop/toolkit/qt/files/opensuse/0195-compositing-properties.diff b/desktop/toolkit/qt/files/opensuse/0195-compositing-properties.diff new file mode 100644 index 0000000000..53789264c5 --- /dev/null +++ b/desktop/toolkit/qt/files/opensuse/0195-compositing-properties.diff @@ -0,0 +1,60 @@ +qt-bugs@ issue : none +bugs.kde.org number : none +applied: no +author: Lubos Lunak + +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. + +Index: src/gui/kernel/qwidget_x11.cpp +=================================================================== +--- src/gui/kernel/qwidget_x11.cpp.orig ++++ src/gui/kernel/qwidget_x11.cpp +@@ -773,6 +773,11 @@ void QWidgetPrivate::create_sys(WId wind + 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(); +@@ -827,13 +832,21 @@ void QWidgetPrivate::create_sys(WId wind + // 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()) { +@@ -849,10 +862,6 @@ void QWidgetPrivate::create_sys(WId wind + XChangeProperty(dpy, id, ATOM(WM_CLIENT_LEADER), + XA_WINDOW, 32, PropModeReplace, + (unsigned char *)&X11->wm_client_leader, 1); +- } else { +- // non-toplevel widgets don't have a frame, so no need to +- // update the strut +- data.fstrut_dirty = 0; + } + + if (initializeWindow && q->internalWinId()) { diff --git a/desktop/toolkit/qt/files/opensuse/0225-invalidate-tabbar-geometry-on-refresh.patch b/desktop/toolkit/qt/files/opensuse/0225-invalidate-tabbar-geometry-on-refresh.patch new file mode 100644 index 0000000000..d79c6f0897 --- /dev/null +++ b/desktop/toolkit/qt/files/opensuse/0225-invalidate-tabbar-geometry-on-refresh.patch @@ -0,0 +1,35 @@ +qt-bugs@ issue : None +Trolltech task ID : None +bugs.kde.org number : 159014 +applied: no +author: Robert Knight + +When tabs are inserted or removed in a QTabBar, QTabBarPrivate::refresh() +is called to update the layout. If the tabbar widget is hidden, this +just sets a boolean variable (layoutDirty) and returns, so the parent widget's layout +is not notified about the possible geometry change. + +Prior to Qt 4.4 this was not a problem because the geometry was recalculated +in QTabBar::sizeHint() if the layoutDirty variable was set. In Qt 4.4 however the layout +caches size hint information in QWidgetItemV2. Since the cache information is not invalidated, +the layout may end up using out-of-date size hint information to compute the widget size. + +If the QTabBar is empty when QTabBar::sizeHint() is called, it will return a size with a height +of 0, which will be kept in the cache and so the tab bar will never be shown. + +This patch fixes the problem by calling updateGeometry() whenever the tab bar's layout is refreshed. + +Index: src/gui/widgets/qtabbar.cpp +=================================================================== +--- src/gui/widgets/qtabbar.cpp.orig ++++ src/gui/widgets/qtabbar.cpp +@@ -723,8 +723,8 @@ void QTabBarPrivate::refresh() + layoutTabs(); + makeVisible(currentIndex); + q->update(); +- q->updateGeometry(); + } ++ q->updateGeometry(); + } + + /*! diff --git a/desktop/toolkit/qt/files/opensuse/QSystemTrayicon.diff b/desktop/toolkit/qt/files/opensuse/QSystemTrayicon.diff new file mode 100644 index 0000000000..2be68adba4 --- /dev/null +++ b/desktop/toolkit/qt/files/opensuse/QSystemTrayicon.diff @@ -0,0 +1,1486 @@ +Description: Introduce a plugin system for QSystemTrayIcon. + Designed to be used with sni-qt (https://launchpad.net/sni-qt) +Author: agateau@kde.org +Forwarded: no + +Introduce a plugin system for QSystemTrayIcon. Designed to be used with sni-qt +(https://launchpad.net/sni-qt) +--- + examples/desktop/systray/window.cpp | 40 ++ + examples/desktop/systray/window.h | 6 + src/gui/util/qabstractsystemtrayiconsys.cpp | 65 +++ + src/gui/util/qabstractsystemtrayiconsys_p.h | 106 ++++++ + src/gui/util/qsystemtrayicon.cpp | 6 + src/gui/util/qsystemtrayicon_p.h | 85 ++--- + src/gui/util/qsystemtrayicon_x11.cpp | 356 ++++----------------- + src/gui/util/qxembedsystemtrayicon_x11.cpp | 469 ++++++++++++++++++++++++++++ + src/gui/util/qxembedsystemtrayicon_x11_p.h | 104 ++++++ + src/gui/util/util.pri | 7 + 10 files changed, 916 insertions(+), 328 deletions(-) + +Index: qt-everywhere-opensource-src-4.8.6/examples/desktop/systray/window.cpp +=================================================================== +--- qt-everywhere-opensource-src-4.8.6.orig/examples/desktop/systray/window.cpp ++++ qt-everywhere-opensource-src-4.8.6/examples/desktop/systray/window.cpp +@@ -158,15 +158,23 @@ void Window::createIconGroupBox() + iconComboBox->addItem(QIcon(":/images/bad.svg"), tr("Bad")); + iconComboBox->addItem(QIcon(":/images/heart.svg"), tr("Heart")); + iconComboBox->addItem(QIcon(":/images/trash.svg"), tr("Trash")); ++ iconComboBox->addItem(QIcon::fromTheme("system-file-manager"), tr("File Manager")); + + showIconCheckBox = new QCheckBox(tr("Show icon")); + showIconCheckBox->setChecked(true); + ++#if defined(Q_WS_X11) ++ jitToolTipCheckBox = new QCheckBox(tr("Just In Time Tooltip")); ++#endif ++ + QHBoxLayout *iconLayout = new QHBoxLayout; + iconLayout->addWidget(iconLabel); + iconLayout->addWidget(iconComboBox); + iconLayout->addStretch(); + iconLayout->addWidget(showIconCheckBox); ++#if defined(Q_WS_X11) ++ iconLayout->addWidget(jitToolTipCheckBox); ++#endif + iconGroupBox->setLayout(iconLayout); + } + +@@ -254,5 +262,37 @@ void Window::createTrayIcon() + trayIconMenu->addAction(quitAction); + + trayIcon = new QSystemTrayIcon(this); ++ QByteArray category = qgetenv("SNI_CATEGORY"); ++ if (!category.isEmpty()) { ++ trayIcon->setProperty("_qt_sni_category", QString::fromLocal8Bit(category)); ++ } + trayIcon->setContextMenu(trayIconMenu); ++ ++#if defined(Q_WS_X11) ++ trayIcon->installEventFilter(this); ++#endif ++} ++ ++#if defined(Q_WS_X11) ++bool Window::eventFilter(QObject *, QEvent *event) ++{ ++ switch(event->type()) { ++ case QEvent::ToolTip: ++ if (jitToolTipCheckBox->isChecked()) { ++ QString timeString = QTime::currentTime().toString(); ++ trayIcon->setToolTip(tr("Current Time: %1").arg(timeString)); ++ } ++ break; ++ case QEvent::Wheel: { ++ QWheelEvent *wheelEvent = static_cast(event); ++ int delta = wheelEvent->delta() > 0 ? 1 : -1; ++ int index = (iconComboBox->currentIndex() + delta) % iconComboBox->count(); ++ iconComboBox->setCurrentIndex(index); ++ break; ++ } ++ default: ++ break; ++ } ++ return false; + } ++#endif +Index: qt-everywhere-opensource-src-4.8.6/examples/desktop/systray/window.h +=================================================================== +--- qt-everywhere-opensource-src-4.8.6.orig/examples/desktop/systray/window.h ++++ qt-everywhere-opensource-src-4.8.6/examples/desktop/systray/window.h +@@ -69,6 +69,9 @@ public: + + protected: + void closeEvent(QCloseEvent *event); ++#if defined(Q_WS_X11) ++ bool eventFilter(QObject *object, QEvent *event); ++#endif + + private slots: + void setIcon(int index); +@@ -86,6 +89,9 @@ private: + QLabel *iconLabel; + QComboBox *iconComboBox; + QCheckBox *showIconCheckBox; ++#if defined(Q_WS_X11) ++ QCheckBox *jitToolTipCheckBox; ++#endif + + QGroupBox *messageGroupBox; + QLabel *typeLabel; +Index: qt-everywhere-opensource-src-4.8.6/src/gui/util/qabstractsystemtrayiconsys.cpp +=================================================================== +--- /dev/null ++++ qt-everywhere-opensource-src-4.8.6/src/gui/util/qabstractsystemtrayiconsys.cpp +@@ -0,0 +1,65 @@ ++/**************************************************************************** ++** ++** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ++** All rights reserved. ++** Contact: Nokia Corporation (qt-info@nokia.com) ++** ++** This file is part of the QtGui module of the Qt Toolkit. ++** ++** $QT_BEGIN_LICENSE:LGPL$ ++** GNU Lesser General Public License Usage ++** This file may be used under the terms of the GNU Lesser General Public ++** License version 2.1 as published by the Free Software Foundation and ++** appearing in the file LICENSE.LGPL included in the packaging of this ++** file. Please review the following information to ensure the GNU Lesser ++** General Public License version 2.1 requirements will be met: ++** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ++** ++** In addition, as a special exception, Nokia gives you certain additional ++** rights. These rights are described in the Nokia Qt LGPL Exception ++** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ++** ++** GNU General Public License Usage ++** Alternatively, this file may be used under the terms of the GNU General ++** Public License version 3.0 as published by the Free Software Foundation ++** and appearing in the file LICENSE.GPL included in the packaging of this ++** file. Please review the following information to ensure the GNU General ++** Public License version 3.0 requirements will be met: ++** http://www.gnu.org/copyleft/gpl.html. ++** ++** Other Usage ++** Alternatively, this file may be used in accordance with the terms and ++** conditions contained in a signed written agreement between you and Nokia. ++** ++** ++** ++** ++** ++** $QT_END_LICENSE$ ++** ++****************************************************************************/ ++#ifndef QT_NO_SYSTEMTRAYICON ++ ++#include "qabstractsystemtrayiconsys_p.h" ++ ++ ++QSystemTrayIconSysFactoryInterface::QSystemTrayIconSysFactoryInterface() ++{ ++} ++ ++///////////////////////////////////////////////// ++QAbstractSystemTrayIconSys::QAbstractSystemTrayIconSys(QSystemTrayIcon *icon) ++: trayIcon(icon) ++{ ++} ++ ++QAbstractSystemTrayIconSys::~QAbstractSystemTrayIconSys() ++{ ++} ++ ++void QAbstractSystemTrayIconSys::sendActivated(QSystemTrayIcon::ActivationReason reason) ++{ ++ qtsystray_sendActivated(trayIcon, reason); ++} ++ ++#endif +Index: qt-everywhere-opensource-src-4.8.6/src/gui/util/qabstractsystemtrayiconsys_p.h +=================================================================== +--- /dev/null ++++ qt-everywhere-opensource-src-4.8.6/src/gui/util/qabstractsystemtrayiconsys_p.h +@@ -0,0 +1,106 @@ ++/**************************************************************************** ++** ++** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ++** All rights reserved. ++** Contact: Nokia Corporation (qt-info@nokia.com) ++** ++** This file is part of the QtGui module of the Qt Toolkit. ++** ++** $QT_BEGIN_LICENSE:LGPL$ ++** GNU Lesser General Public License Usage ++** This file may be used under the terms of the GNU Lesser General Public ++** License version 2.1 as published by the Free Software Foundation and ++** appearing in the file LICENSE.LGPL included in the packaging of this ++** file. Please review the following information to ensure the GNU Lesser ++** General Public License version 2.1 requirements will be met: ++** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ++** ++** In addition, as a special exception, Nokia gives you certain additional ++** rights. These rights are described in the Nokia Qt LGPL Exception ++** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ++** ++** GNU General Public License Usage ++** Alternatively, this file may be used under the terms of the GNU General ++** Public License version 3.0 as published by the Free Software Foundation ++** and appearing in the file LICENSE.GPL included in the packaging of this ++** file. Please review the following information to ensure the GNU General ++** Public License version 3.0 requirements will be met: ++** http://www.gnu.org/copyleft/gpl.html. ++** ++** Other Usage ++** Alternatively, this file may be used in accordance with the terms and ++** conditions contained in a signed written agreement between you and Nokia. ++** ++** ++** ++** ++** ++** $QT_END_LICENSE$ ++** ++****************************************************************************/ ++ ++#ifndef QABSTRACTSYSTEMTRAYICONSYS_P_H ++#define QABSTRACTSYSTEMTRAYICONSYS_P_H ++ ++// ++// W A R N I N G ++// ------------- ++// ++// This file is not part of the Qt API. It exists for the convenience ++// of a number of Qt sources files. This header file may change from ++// version to version without notice, or even be removed. ++// ++// We mean it. ++// ++ ++#ifndef QT_NO_SYSTEMTRAYICON ++ ++#include ++#include ++ ++class QAbstractSystemTrayIconSys; ++ ++class Q_GUI_EXPORT QSystemTrayIconSysFactoryInterface : public QObject, public QFactoryInterface ++{ ++ Q_OBJECT ++public: ++ QSystemTrayIconSysFactoryInterface(); ++ virtual QAbstractSystemTrayIconSys * create(QSystemTrayIcon *) = 0; ++ virtual bool isAvailable() const = 0; ++ ++ // \reimp ++ virtual QStringList keys() const { return QStringList() << QLatin1String("default"); } ++ ++Q_SIGNALS: ++ void availableChanged(bool); ++}; ++ ++#define QSystemTrayIconSysFactoryInterface_iid "com.nokia.qt.QSystemTrayIconSysFactoryInterface" ++Q_DECLARE_INTERFACE(QSystemTrayIconSysFactoryInterface, QSystemTrayIconSysFactoryInterface_iid) ++ ++class QRect; ++ ++class Q_GUI_EXPORT QAbstractSystemTrayIconSys ++{ ++public: ++ QAbstractSystemTrayIconSys(QSystemTrayIcon *icon); ++ virtual ~QAbstractSystemTrayIconSys(); ++ ++ virtual QRect geometry() const = 0; ++ virtual void updateVisibility() = 0; ++ virtual void updateIcon() = 0; ++ virtual void updateToolTip() = 0; ++ virtual void updateMenu() = 0; ++ virtual void showMessage(const QString &title, const QString &message, ++ QSystemTrayIcon::MessageIcon icon, int msecs) = 0; ++ ++ void sendActivated(QSystemTrayIcon::ActivationReason); ++ ++protected: ++ QSystemTrayIcon *trayIcon; ++}; ++ ++#endif // QT_NO_SYSTEMTRAYICON ++ ++#endif // QABSTRACTSYSTEMTRAYICONSYS_P_H ++ +Index: qt-everywhere-opensource-src-4.8.6/src/gui/util/qsystemtrayicon.cpp +=================================================================== +--- qt-everywhere-opensource-src-4.8.6.orig/src/gui/util/qsystemtrayicon.cpp ++++ qt-everywhere-opensource-src-4.8.6/src/gui/util/qsystemtrayicon.cpp +@@ -287,12 +287,6 @@ bool QSystemTrayIcon::isVisible() const + */ + bool QSystemTrayIcon::event(QEvent *e) + { +-#if defined(Q_WS_X11) +- if (e->type() == QEvent::ToolTip) { +- Q_D(QSystemTrayIcon); +- return d->sys->deliverToolTipEvent(e); +- } +-#endif + return QObject::event(e); + } + +Index: qt-everywhere-opensource-src-4.8.6/src/gui/util/qsystemtrayicon_p.h +=================================================================== +--- qt-everywhere-opensource-src-4.8.6.orig/src/gui/util/qsystemtrayicon_p.h ++++ qt-everywhere-opensource-src-4.8.6/src/gui/util/qsystemtrayicon_p.h +@@ -62,10 +62,17 @@ + #include "QtGui/qpixmap.h" + #include "QtCore/qstring.h" + #include "QtCore/qpointer.h" ++#if defined(Q_WS_X11) ++#include "QtCore/qset.h" ++#endif + + QT_BEGIN_NAMESPACE + ++#if defined(Q_WS_X11) ++class QAbstractSystemTrayIconSys; ++#else + class QSystemTrayIconSys; ++#endif + class QToolButton; + class QLabel; + +@@ -75,6 +82,9 @@ class QSystemTrayIconPrivate : public QO + + public: + QSystemTrayIconPrivate() : sys(0), visible(false) { } ++ #if defined(Q_WS_X11) ++ ~QSystemTrayIconPrivate(); ++ #endif + + void install_sys(); + void remove_sys(); +@@ -90,7 +100,11 @@ public: + QPointer menu; + QIcon icon; + QString toolTip; ++ #if defined(Q_WS_X11) ++ QAbstractSystemTrayIconSys *sys; ++ #else + QSystemTrayIconSys *sys; ++ #endif + bool visible; + }; + +@@ -123,60 +137,37 @@ private: + }; + + #if defined(Q_WS_X11) +-QT_BEGIN_INCLUDE_NAMESPACE +-#include +-#include +-#include +-#include +-QT_END_INCLUDE_NAMESPACE ++class QSystemTrayIconSysFactoryInterface; + +-class QSystemTrayIconSys : public QWidget ++/** ++ * This class acts as a composite QSystemTrayIconSysFactory: It can create ++ * instances of QAbstractSystemTrayIconSys* using either a plugin or the ++ * builtin factory and will cause QSystemTrayIconPrivate to recreate their ++ * 'sys' instances if the plugin availability changes. ++ */ ++class QSystemTrayIconSysFactory : public QObject + { +- friend class QSystemTrayIconPrivate; +- ++ Q_OBJECT + public: +- QSystemTrayIconSys(QSystemTrayIcon *q); +- ~QSystemTrayIconSys(); +- enum { +- SYSTEM_TRAY_REQUEST_DOCK = 0, +- SYSTEM_TRAY_BEGIN_MESSAGE = 1, +- SYSTEM_TRAY_CANCEL_MESSAGE =2 +- }; +- +- void addToTray(); +- void updateIcon(); +- XVisualInfo* getSysTrayVisualInfo(); +- +- // QObject::event is public but QWidget's ::event() re-implementation +- // is protected ;( +- inline bool deliverToolTipEvent(QEvent *e) +- { return QWidget::event(e); } +- +- static Window sysTrayWindow; +- static QList trayIcons; +- static QCoreApplication::EventFilter oldEventFilter; +- static bool sysTrayTracker(void *message, long *result); +- static Window locateSystemTray(); +- static Atom sysTraySelection; +- static XVisualInfo sysTrayVisual; ++ QSystemTrayIconSysFactory(); ++ void registerSystemTrayIconPrivate(QSystemTrayIconPrivate *iconPrivate); ++ void unregisterSystemTrayIconPrivate(QSystemTrayIconPrivate *iconPrivate); + +-protected: +- void paintEvent(QPaintEvent *pe); +- void resizeEvent(QResizeEvent *re); +- bool x11Event(XEvent *event); +- void mousePressEvent(QMouseEvent *event); +- void mouseDoubleClickEvent(QMouseEvent *event); +-#ifndef QT_NO_WHEELEVENT +- void wheelEvent(QWheelEvent *event); +-#endif +- bool event(QEvent *e); ++ QAbstractSystemTrayIconSys *create(QSystemTrayIcon *) const; ++ ++ bool isAvailable() const; ++ ++private Q_SLOTS: ++ void refreshTrayIconPrivates(); + + private: +- QPixmap background; +- QSystemTrayIcon *q; +- Colormap colormap; ++ QSystemTrayIconSysFactoryInterface *factory() const; ++ void loadPluginFactory(); ++ ++ QSystemTrayIconSysFactoryInterface *pluginFactory; ++ QSet trayIconPrivates; + }; +-#endif // Q_WS_X11 ++#endif + + QT_END_NAMESPACE + +Index: qt-everywhere-opensource-src-4.8.6/src/gui/util/qsystemtrayicon_x11.cpp +=================================================================== +--- qt-everywhere-opensource-src-4.8.6.orig/src/gui/util/qsystemtrayicon_x11.cpp ++++ qt-everywhere-opensource-src-4.8.6/src/gui/util/qsystemtrayicon_x11.cpp +@@ -38,311 +38,122 @@ + ** $QT_END_LICENSE$ + ** + ****************************************************************************/ ++#ifndef QT_NO_SYSTEMTRAYICON ++ ++#include + +-#include "private/qt_x11_p.h" +-#include "qlabel.h" +-#include "qx11info_x11.h" +-#include "qpainter.h" +-#include "qpixmap.h" +-#include "qbitmap.h" +-#include "qevent.h" +-#include "qapplication.h" +-#include "qlist.h" +-#include "qmenu.h" +-#include "qtimer.h" + #include "qsystemtrayicon_p.h" +-#include "qpaintengine.h" ++#include "qabstractsystemtrayiconsys_p.h" ++#include "qcoreapplication.h" ++#include "qxembedsystemtrayicon_x11_p.h" + +-#ifndef QT_NO_SYSTEMTRAYICON + QT_BEGIN_NAMESPACE + +-Window QSystemTrayIconSys::sysTrayWindow = XNone; +-QList QSystemTrayIconSys::trayIcons; +-QCoreApplication::EventFilter QSystemTrayIconSys::oldEventFilter = 0; +-Atom QSystemTrayIconSys::sysTraySelection = XNone; +-XVisualInfo QSystemTrayIconSys::sysTrayVisual = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +- +-// Locate the system tray +-Window QSystemTrayIconSys::locateSystemTray() +-{ +- Display *display = QX11Info::display(); +- if (sysTraySelection == XNone) { +- int screen = QX11Info::appScreen(); +- QString net_sys_tray = QString::fromLatin1("_NET_SYSTEM_TRAY_S%1").arg(screen); +- sysTraySelection = XInternAtom(display, net_sys_tray.toLatin1(), False); +- } +- +- return XGetSelectionOwner(QX11Info::display(), sysTraySelection); +-} ++Q_GLOBAL_STATIC(QSystemTrayIconSysFactory, qt_guiSystemTrayIconSysFactory) + +-XVisualInfo* QSystemTrayIconSys::getSysTrayVisualInfo() ++QSystemTrayIconSysFactory::QSystemTrayIconSysFactory() ++: pluginFactory(0) + { +- Display *display = QX11Info::display(); +- +- if (!sysTrayVisual.visual) { +- Window win = locateSystemTray(); +- if (win != XNone) { +- Atom actual_type; +- int actual_format; +- ulong nitems, bytes_remaining; +- uchar *data = 0; +- int result = XGetWindowProperty(display, win, ATOM(_NET_SYSTEM_TRAY_VISUAL), 0, 1, +- False, XA_VISUALID, &actual_type, +- &actual_format, &nitems, &bytes_remaining, &data); +- VisualID vid = 0; +- if (result == Success && data && actual_type == XA_VISUALID && actual_format == 32 && +- nitems == 1 && bytes_remaining == 0) +- vid = *(VisualID*)data; +- if (data) +- XFree(data); +- if (vid == 0) +- return 0; +- +- uint mask = VisualIDMask; +- XVisualInfo *vi, rvi; +- int count; +- rvi.visualid = vid; +- vi = XGetVisualInfo(display, mask, &rvi, &count); +- if (vi) { +- sysTrayVisual = vi[0]; +- XFree((char*)vi); +- } +- if (sysTrayVisual.depth != 32) +- memset(&sysTrayVisual, 0, sizeof(sysTrayVisual)); +- } +- } +- +- return sysTrayVisual.visual ? &sysTrayVisual : 0; + } + +-bool QSystemTrayIconSys::sysTrayTracker(void *message, long *result) ++void QSystemTrayIconSysFactory::loadPluginFactory() + { +- bool retval = false; +- if (QSystemTrayIconSys::oldEventFilter) +- retval = QSystemTrayIconSys::oldEventFilter(message, result); +- +- if (trayIcons.isEmpty()) +- return retval; +- +- Display *display = QX11Info::display(); +- XEvent *ev = (XEvent *)message; +- if (ev->type == DestroyNotify && ev->xany.window == sysTrayWindow) { +- sysTrayWindow = locateSystemTray(); +- memset(&sysTrayVisual, 0, sizeof(sysTrayVisual)); +- for (int i = 0; i < trayIcons.count(); i++) { +- if (sysTrayWindow == XNone) { +- QBalloonTip::hideBalloon(); +- trayIcons[i]->hide(); // still no luck +- trayIcons[i]->destroy(); +- trayIcons[i]->create(); +- } else +- trayIcons[i]->addToTray(); // add it to the new tray +- } +- retval = true; +- } else if (ev->type == ClientMessage && sysTrayWindow == XNone) { +- static Atom manager_atom = XInternAtom(display, "MANAGER", False); +- XClientMessageEvent *cm = (XClientMessageEvent *)message; +- if ((cm->message_type == manager_atom) && ((Atom)cm->data.l[1] == sysTraySelection)) { +- sysTrayWindow = cm->data.l[2]; +- memset(&sysTrayVisual, 0, sizeof(sysTrayVisual)); +- XSelectInput(display, sysTrayWindow, StructureNotifyMask); +- for (int i = 0; i < trayIcons.count(); i++) { +- trayIcons[i]->addToTray(); +- } +- retval = true; +- } +- } else if (ev->type == PropertyNotify && ev->xproperty.atom == ATOM(_NET_SYSTEM_TRAY_VISUAL) && +- ev->xproperty.window == sysTrayWindow) { +- memset(&sysTrayVisual, 0, sizeof(sysTrayVisual)); +- for (int i = 0; i < trayIcons.count(); i++) { +- trayIcons[i]->addToTray(); +- } +- } +- +- return retval; +-} +- +-QSystemTrayIconSys::QSystemTrayIconSys(QSystemTrayIcon *q) +- : QWidget(0, Qt::FramelessWindowHint | Qt::X11BypassWindowManagerHint), +- q(q), colormap(0) +-{ +- setAttribute(Qt::WA_AlwaysShowToolTips); +- setAttribute(Qt::WA_QuitOnClose, false); +- setAttribute(Qt::WA_NoSystemBackground, true); +- setAttribute(Qt::WA_PaintOnScreen); +- +- static bool eventFilterAdded = false; +- Display *display = QX11Info::display(); +- if (!eventFilterAdded) { +- oldEventFilter = qApp->setEventFilter(sysTrayTracker); +- eventFilterAdded = true; +- Window root = QX11Info::appRootWindow(); +- XWindowAttributes attr; +- XGetWindowAttributes(display, root, &attr); +- if ((attr.your_event_mask & StructureNotifyMask) != StructureNotifyMask) { +- (void) QApplication::desktop(); // lame trick to ensure our event mask is not overridden +- XSelectInput(display, root, attr.your_event_mask | StructureNotifyMask); // for MANAGER selection +- } ++ if (pluginFactory) { ++ return; + } +- if (trayIcons.isEmpty()) { +- sysTrayWindow = locateSystemTray(); +- if (sysTrayWindow != XNone) +- XSelectInput(display, sysTrayWindow, StructureNotifyMask); // track tray events ++#ifndef QT_NO_LIBRARY ++ QFactoryLoader loader(QSystemTrayIconSysFactoryInterface_iid, QLatin1String("/systemtrayicon")); ++ pluginFactory = qobject_cast(loader.instance(QLatin1String("default"))); ++ if (pluginFactory) { ++ // Set parent to ensure factory destructor is called when application ++ // is closed ++ pluginFactory->setParent(QCoreApplication::instance()); ++ connect(pluginFactory, SIGNAL(availableChanged(bool)), SLOT(refreshTrayIconPrivates())); + } +- trayIcons.append(this); +- setMouseTracking(true); +-#ifndef QT_NO_TOOLTIP +- setToolTip(q->toolTip()); +-#endif +- if (sysTrayWindow != XNone) +- addToTray(); ++#endif // QT_NO_LIBRARY + } + +-QSystemTrayIconSys::~QSystemTrayIconSys() ++QSystemTrayIconSysFactoryInterface *QSystemTrayIconSysFactory::factory() const + { +- trayIcons.removeAt(trayIcons.indexOf(this)); +- Display *display = QX11Info::display(); +- if (trayIcons.isEmpty()) { +- if (sysTrayWindow == XNone) +- return; +- if (display) +- XSelectInput(display, sysTrayWindow, 0); // stop tracking the tray +- sysTrayWindow = XNone; ++ if (!pluginFactory) { ++ const_cast(this)->loadPluginFactory(); + } +- if (colormap) +- XFreeColormap(display, colormap); ++ if (pluginFactory && pluginFactory->isAvailable()) { ++ return pluginFactory; ++ } ++ static QXEmbedSystemTrayIconSysFactory def; ++ return def.isAvailable() ? &def : 0; + } + +-void QSystemTrayIconSys::addToTray() ++void QSystemTrayIconSysFactory::refreshTrayIconPrivates() + { +- Q_ASSERT(sysTrayWindow != XNone); +- Display *display = QX11Info::display(); +- +- XVisualInfo *vi = getSysTrayVisualInfo(); +- if (vi && vi->visual) { +- Window root = RootWindow(display, vi->screen); +- Window p = root; +- if (QWidget *pw = parentWidget()) +- p = pw->effectiveWinId(); +- colormap = XCreateColormap(display, root, vi->visual, AllocNone); +- XSetWindowAttributes wsa; +- wsa.background_pixmap = 0; +- wsa.colormap = colormap; +- wsa.background_pixel = 0; +- wsa.border_pixel = 0; +- Window wid = XCreateWindow(display, p, -1, -1, 1, 1, +- 0, vi->depth, InputOutput, vi->visual, +- CWBackPixmap|CWBackPixel|CWBorderPixel|CWColormap, &wsa); +- create(wid); +- } else { +- XSetWindowBackgroundPixmap(display, winId(), ParentRelative); +- } +- +- // GNOME, NET WM Specification +- static Atom netwm_tray_atom = XInternAtom(display, "_NET_SYSTEM_TRAY_OPCODE", False); +- long l[5] = { CurrentTime, SYSTEM_TRAY_REQUEST_DOCK, static_cast(winId()), 0, 0 }; +- XEvent ev; +- memset(&ev, 0, sizeof(ev)); +- ev.xclient.type = ClientMessage; +- ev.xclient.window = sysTrayWindow; +- ev.xclient.message_type = netwm_tray_atom; +- ev.xclient.format = 32; +- memcpy((char *)&ev.xclient.data, (const char *) l, sizeof(l)); +- XSendEvent(display, sysTrayWindow, False, 0, &ev); +- setMinimumSize(22, 22); // required at least on GNOME +-} +- +-void QSystemTrayIconSys::updateIcon() +-{ +- update(); +-} +- +-void QSystemTrayIconSys::resizeEvent(QResizeEvent *re) +-{ +- QWidget::resizeEvent(re); +- updateIcon(); +-} +- +-void QSystemTrayIconSys::paintEvent(QPaintEvent*) +-{ +- QPainter p(this); +- if (!getSysTrayVisualInfo()) { +- const QRegion oldSystemClip = p.paintEngine()->systemClip(); +- const QRect clearedRect = oldSystemClip.boundingRect(); +- XClearArea(QX11Info::display(), winId(), clearedRect.x(), clearedRect.y(), +- clearedRect.width(), clearedRect.height(), False); +- QPaintEngine *pe = p.paintEngine(); +- pe->setSystemClip(clearedRect); +- q->icon().paint(&p, rect()); +- pe->setSystemClip(oldSystemClip); +- } else { +- p.setCompositionMode(QPainter::CompositionMode_Source); +- p.fillRect(rect(), Qt::transparent); +- p.setCompositionMode(QPainter::CompositionMode_SourceOver); +- q->icon().paint(&p, rect()); ++ Q_FOREACH(QSystemTrayIconPrivate *trayIconPrivate, trayIconPrivates) { ++ if (trayIconPrivate->sys) { ++ delete trayIconPrivate->sys; ++ trayIconPrivate->sys = 0; ++ } ++ // When visible is true, sys is usually not 0 but it can be 0 if the ++ // call to install_sys() failed. ++ if (trayIconPrivate->visible) { ++ trayIconPrivate->install_sys(); ++ } + } + } + +-void QSystemTrayIconSys::mousePressEvent(QMouseEvent *ev) ++void QSystemTrayIconSysFactory::registerSystemTrayIconPrivate(QSystemTrayIconPrivate* trayIconPrivate) + { +- QPoint globalPos = ev->globalPos(); +- if (ev->button() == Qt::RightButton && q->contextMenu()) +- q->contextMenu()->popup(globalPos); +- +- if (QBalloonTip::isBalloonVisible()) { +- emit q->messageClicked(); +- QBalloonTip::hideBalloon(); +- } +- +- if (ev->button() == Qt::LeftButton) +- emit q->activated(QSystemTrayIcon::Trigger); +- else if (ev->button() == Qt::RightButton) +- emit q->activated(QSystemTrayIcon::Context); +- else if (ev->button() == Qt::MidButton) +- emit q->activated(QSystemTrayIcon::MiddleClick); ++ trayIconPrivates.insert(trayIconPrivate); + } + +-void QSystemTrayIconSys::mouseDoubleClickEvent(QMouseEvent *ev) ++void QSystemTrayIconSysFactory::unregisterSystemTrayIconPrivate(QSystemTrayIconPrivate* trayIconPrivate) + { +- if (ev->button() == Qt::LeftButton) +- emit q->activated(QSystemTrayIcon::DoubleClick); ++ trayIconPrivates.remove(trayIconPrivate); + } + +-#ifndef QT_NO_WHEELEVENT +-void QSystemTrayIconSys::wheelEvent(QWheelEvent *e) ++QAbstractSystemTrayIconSys *QSystemTrayIconSysFactory::create(QSystemTrayIcon *trayIcon) const + { +- QApplication::sendEvent(q, e); ++ QSystemTrayIconSysFactoryInterface *f = factory(); ++ if (!f) { ++ qWarning("No systemtrayicon available"); ++ return 0; ++ } ++ return f->create(trayIcon); + } +-#endif + +-bool QSystemTrayIconSys::event(QEvent *e) ++bool QSystemTrayIconSysFactory::isAvailable() const + { +- if (e->type() == QEvent::ToolTip) { +- return QApplication::sendEvent(q, e); +- } +- return QWidget::event(e); ++ return factory(); + } + +-bool QSystemTrayIconSys::x11Event(XEvent *event) ++//////////////////////////////////////////////// ++QSystemTrayIconPrivate::~QSystemTrayIconPrivate() + { +- if (event->type == ReparentNotify) +- show(); +- return QWidget::x11Event(event); ++ qt_guiSystemTrayIconSysFactory()->unregisterSystemTrayIconPrivate(this); ++ delete sys; + } + +-//////////////////////////////////////////////////////////////////////////// + void QSystemTrayIconPrivate::install_sys() + { + Q_Q(QSystemTrayIcon); +- if (!sys) +- sys = new QSystemTrayIconSys(q); ++ if (!sys) { ++ // Register ourself even if create() fails: our "sys" will get created ++ // later by refreshTrayIconPrivates() if a systemtray becomes ++ // available. This situation can happen for applications which are ++ // started at login time, while the desktop itself is starting up. ++ qt_guiSystemTrayIconSysFactory()->registerSystemTrayIconPrivate(this); ++ sys = qt_guiSystemTrayIconSysFactory()->create(q); ++ if (!sys) { ++ return; ++ } ++ } ++ sys->updateVisibility(); + } + + QRect QSystemTrayIconPrivate::geometry_sys() const + { +- if (!sys) +- return QRect(); +- return QRect(sys->mapToGlobal(QPoint(0, 0)), sys->size()); ++ if (!sys || !visible) ++ return QRect(); ++ return sys->geometry(); + } + + void QSystemTrayIconPrivate::remove_sys() +@@ -350,35 +161,35 @@ void QSystemTrayIconPrivate::remove_sys( + if (!sys) + return; + QBalloonTip::hideBalloon(); +- sys->hide(); // this should do the trick, but... +- delete sys; // wm may resize system tray only for DestroyEvents +- sys = 0; ++ sys->updateVisibility(); + } + + void QSystemTrayIconPrivate::updateIcon_sys() + { +- if (!sys) ++ if (!sys || !visible) + return; + sys->updateIcon(); + } + + void QSystemTrayIconPrivate::updateMenu_sys() + { +- ++ if (!sys || !visible) ++ return; ++ sys->updateMenu(); + } + + void QSystemTrayIconPrivate::updateToolTip_sys() + { +- if (!sys) ++ if (!sys || !visible) + return; + #ifndef QT_NO_TOOLTIP +- sys->setToolTip(toolTip); ++ sys->updateToolTip(); + #endif + } + + bool QSystemTrayIconPrivate::isSystemTrayAvailable_sys() + { +- return QSystemTrayIconSys::locateSystemTray() != XNone; ++ return qt_guiSystemTrayIconSysFactory()->isAvailable(); + } + + bool QSystemTrayIconPrivate::supportsMessages_sys() +@@ -389,12 +200,9 @@ bool QSystemTrayIconPrivate::supportsMes + void QSystemTrayIconPrivate::showMessage_sys(const QString &message, const QString &title, + QSystemTrayIcon::MessageIcon icon, int msecs) + { +- if (!sys) ++ if (!sys || !visible) + return; +- QPoint g = sys->mapToGlobal(QPoint(0, 0)); +- QBalloonTip::showBalloon(icon, message, title, sys->q, +- QPoint(g.x() + sys->width()/2, g.y() + sys->height()/2), +- msecs); ++ sys->showMessage(message, title, icon, msecs); + } + + QT_END_NAMESPACE +Index: qt-everywhere-opensource-src-4.8.6/src/gui/util/qxembedsystemtrayicon_x11.cpp +=================================================================== +--- /dev/null ++++ qt-everywhere-opensource-src-4.8.6/src/gui/util/qxembedsystemtrayicon_x11.cpp +@@ -0,0 +1,469 @@ ++/**************************************************************************** ++** ++** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ++** All rights reserved. ++** Contact: Nokia Corporation (qt-info@nokia.com) ++** ++** This file is part of the QtGui module of the Qt Toolkit. ++** ++** $QT_BEGIN_LICENSE:LGPL$ ++** GNU Lesser General Public License Usage ++** This file may be used under the terms of the GNU Lesser General Public ++** License version 2.1 as published by the Free Software Foundation and ++** appearing in the file LICENSE.LGPL included in the packaging of this ++** file. Please review the following information to ensure the GNU Lesser ++** General Public License version 2.1 requirements will be met: ++** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ++** ++** In addition, as a special exception, Nokia gives you certain additional ++** rights. These rights are described in the Nokia Qt LGPL Exception ++** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ++** ++** GNU General Public License Usage ++** Alternatively, this file may be used under the terms of the GNU General ++** Public License version 3.0 as published by the Free Software Foundation ++** and appearing in the file LICENSE.GPL included in the packaging of this ++** file. Please review the following information to ensure the GNU General ++** Public License version 3.0 requirements will be met: ++** http://www.gnu.org/copyleft/gpl.html. ++** ++** Other Usage ++** Alternatively, this file may be used in accordance with the terms and ++** conditions contained in a signed written agreement between you and Nokia. ++** ++** ++** ++** ++** ++** $QT_END_LICENSE$ ++** ++****************************************************************************/ ++#include "qxembedsystemtrayicon_x11_p.h" ++ ++#ifndef QT_NO_SYSTEMTRAYICON ++ ++#include "private/qt_x11_p.h" ++#include "qapplication.h" ++#include "qevent.h" ++#include "qlist.h" ++#include "qmenu.h" ++#include "qpainter.h" ++#include "qpaintengine.h" ++#include "qsystemtrayicon_p.h" ++#include "qx11info_x11.h" ++ ++QT_BEGIN_INCLUDE_NAMESPACE ++#include ++#include ++#include ++#include ++QT_END_INCLUDE_NAMESPACE ++ ++QT_BEGIN_NAMESPACE ++ ++class QSystemTrayIconWidget : public QWidget ++{ ++public: ++ QSystemTrayIconWidget(QSystemTrayIcon *q, QXEmbedSystemTrayIconSys *s); ++ ~QSystemTrayIconWidget(); ++ ++ static Window locateSystemTray(); ++ ++protected: ++ void paintEvent(QPaintEvent *pe); ++ void resizeEvent(QResizeEvent *re); ++ bool x11Event(XEvent *event); ++ void mousePressEvent(QMouseEvent *event); ++ void mouseDoubleClickEvent(QMouseEvent *event); ++#ifndef QT_NO_WHEELEVENT ++ void wheelEvent(QWheelEvent *event); ++#endif ++ bool event(QEvent *e); ++ ++private: ++ enum { ++ SYSTEM_TRAY_REQUEST_DOCK = 0, ++ SYSTEM_TRAY_BEGIN_MESSAGE = 1, ++ SYSTEM_TRAY_CANCEL_MESSAGE =2 ++ }; ++ ++ void addToTray(); ++ static XVisualInfo* getSysTrayVisualInfo(); ++ ++ static Window sysTrayWindow; ++ static QList trayIcons; ++ static QCoreApplication::EventFilter oldEventFilter; ++ static bool sysTrayTracker(void *message, long *result); ++ static Atom sysTraySelection; ++ static XVisualInfo sysTrayVisual; ++ ++ QSystemTrayIcon *q; ++ QXEmbedSystemTrayIconSys *sys; ++ Colormap colormap; ++}; ++ ++Window QSystemTrayIconWidget::sysTrayWindow = XNone; ++QList QSystemTrayIconWidget::trayIcons; ++QCoreApplication::EventFilter QSystemTrayIconWidget::oldEventFilter = 0; ++Atom QSystemTrayIconWidget::sysTraySelection = XNone; ++XVisualInfo QSystemTrayIconWidget::sysTrayVisual = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; ++ ++QSystemTrayIconWidget::QSystemTrayIconWidget(QSystemTrayIcon* q, QXEmbedSystemTrayIconSys* sys) ++: QWidget(0, Qt::FramelessWindowHint | Qt::X11BypassWindowManagerHint) ++, q(q) ++, sys(sys) ++, colormap(0) ++{ ++ setAttribute(Qt::WA_AlwaysShowToolTips); ++ setAttribute(Qt::WA_QuitOnClose, false); ++ setAttribute(Qt::WA_NoSystemBackground, true); ++ setAttribute(Qt::WA_PaintOnScreen); ++ setMouseTracking(true); ++#ifndef QT_NO_TOOLTIP ++ setToolTip(q->toolTip()); ++#endif ++ ++ static bool eventFilterAdded = false; ++ Display *display = QX11Info::display(); ++ if (!eventFilterAdded) { ++ oldEventFilter = qApp->setEventFilter(sysTrayTracker); ++ eventFilterAdded = true; ++ Window root = QX11Info::appRootWindow(); ++ XWindowAttributes attr; ++ XGetWindowAttributes(display, root, &attr); ++ if ((attr.your_event_mask & StructureNotifyMask) != StructureNotifyMask) { ++ (void) QApplication::desktop(); // lame trick to ensure our event mask is not overridden ++ XSelectInput(display, root, attr.your_event_mask | StructureNotifyMask); // for MANAGER selection ++ } ++ } ++ if (trayIcons.isEmpty()) { ++ sysTrayWindow = locateSystemTray(); ++ if (sysTrayWindow != XNone) ++ XSelectInput(display, sysTrayWindow, StructureNotifyMask); // track tray events ++ } ++ trayIcons.append(this); ++ if (sysTrayWindow != XNone) ++ addToTray(); ++} ++ ++QSystemTrayIconWidget::~QSystemTrayIconWidget() ++{ ++ trayIcons.removeAt(trayIcons.indexOf(this)); ++ Display *display = QX11Info::display(); ++ if (trayIcons.isEmpty()) { ++ if (sysTrayWindow == XNone) ++ return; ++ if (display) ++ XSelectInput(display, sysTrayWindow, 0); // stop tracking the tray ++ sysTrayWindow = XNone; ++ } ++ if (colormap) ++ XFreeColormap(display, colormap); ++} ++ ++void QSystemTrayIconWidget::resizeEvent(QResizeEvent *re) ++{ ++ QWidget::resizeEvent(re); ++ update(); ++} ++ ++void QSystemTrayIconWidget::paintEvent(QPaintEvent*) ++{ ++ QPainter p(this); ++ if (!getSysTrayVisualInfo()) { ++ const QRegion oldSystemClip = p.paintEngine()->systemClip(); ++ const QRect clearedRect = oldSystemClip.boundingRect(); ++ XClearArea(QX11Info::display(), winId(), clearedRect.x(), clearedRect.y(), ++ clearedRect.width(), clearedRect.height(), False); ++ QPaintEngine *pe = p.paintEngine(); ++ pe->setSystemClip(clearedRect); ++ q->icon().paint(&p, rect()); ++ pe->setSystemClip(oldSystemClip); ++ } else { ++ p.setCompositionMode(QPainter::CompositionMode_Source); ++ p.fillRect(rect(), Qt::transparent); ++ p.setCompositionMode(QPainter::CompositionMode_SourceOver); ++ q->icon().paint(&p, rect()); ++ } ++} ++ ++void QSystemTrayIconWidget::mousePressEvent(QMouseEvent *ev) ++{ ++ QPoint globalPos = ev->globalPos(); ++ if (ev->button() == Qt::RightButton && q->contextMenu()) ++ q->contextMenu()->popup(globalPos); ++ ++ if (QBalloonTip::isBalloonVisible()) { ++ QMetaObject::invokeMethod(q, "messageClicked"); ++ QBalloonTip::hideBalloon(); ++ } ++ ++ if (ev->button() == Qt::LeftButton) ++ qtsystray_sendActivated(q, QSystemTrayIcon::Trigger); ++ else if (ev->button() == Qt::RightButton) ++ qtsystray_sendActivated(q, QSystemTrayIcon::Context); ++ else if (ev->button() == Qt::MidButton) ++ qtsystray_sendActivated(q, QSystemTrayIcon::MiddleClick); ++} ++ ++void QSystemTrayIconWidget::mouseDoubleClickEvent(QMouseEvent *ev) ++{ ++ if (ev->button() == Qt::LeftButton) ++ qtsystray_sendActivated(q, QSystemTrayIcon::DoubleClick); ++} ++ ++#ifndef QT_NO_WHEELEVENT ++void QSystemTrayIconWidget::wheelEvent(QWheelEvent *e) ++{ ++ sys->sendWheelEventToTrayIcon(e->delta(), e->orientation()); ++} ++#endif ++ ++bool QSystemTrayIconWidget::event(QEvent *e) ++{ ++ if (e->type() == QEvent::ToolTip) { ++ sys->sendToolTipEventToTrayIcon(); ++ } ++ return QWidget::event(e); ++} ++ ++bool QSystemTrayIconWidget::x11Event(XEvent *event) ++{ ++ if (event->type == ReparentNotify) ++ show(); ++ return QWidget::x11Event(event); ++} ++ ++// Locate the system tray ++Window QSystemTrayIconWidget::locateSystemTray() ++{ ++ Display *display = QX11Info::display(); ++ if (sysTraySelection == XNone) { ++ int screen = QX11Info::appScreen(); ++ QString net_sys_tray = QString::fromLatin1("_NET_SYSTEM_TRAY_S%1").arg(screen); ++ sysTraySelection = XInternAtom(display, net_sys_tray.toLatin1(), False); ++ } ++ ++ return XGetSelectionOwner(QX11Info::display(), sysTraySelection); ++} ++ ++XVisualInfo* QSystemTrayIconWidget::getSysTrayVisualInfo() ++{ ++ Display *display = QX11Info::display(); ++ ++ if (!sysTrayVisual.visual) { ++ Window win = locateSystemTray(); ++ if (win != XNone) { ++ Atom actual_type; ++ int actual_format; ++ ulong nitems, bytes_remaining; ++ uchar *data = 0; ++ int result = XGetWindowProperty(display, win, ATOM(_NET_SYSTEM_TRAY_VISUAL), 0, 1, ++ False, XA_VISUALID, &actual_type, ++ &actual_format, &nitems, &bytes_remaining, &data); ++ VisualID vid = 0; ++ if (result == Success && data && actual_type == XA_VISUALID && actual_format == 32 && ++ nitems == 1 && bytes_remaining == 0) ++ vid = *(VisualID*)data; ++ if (data) ++ XFree(data); ++ if (vid == 0) ++ return 0; ++ ++ uint mask = VisualIDMask; ++ XVisualInfo *vi, rvi; ++ int count; ++ rvi.visualid = vid; ++ vi = XGetVisualInfo(display, mask, &rvi, &count); ++ if (vi) { ++ sysTrayVisual = vi[0]; ++ XFree((char*)vi); ++ } ++ if (sysTrayVisual.depth != 32) ++ memset(&sysTrayVisual, 0, sizeof(sysTrayVisual)); ++ } ++ } ++ ++ return sysTrayVisual.visual ? &sysTrayVisual : 0; ++} ++ ++bool QSystemTrayIconWidget::sysTrayTracker(void *message, long *result) ++{ ++ bool retval = false; ++ if (QSystemTrayIconWidget::oldEventFilter) ++ retval = QSystemTrayIconWidget::oldEventFilter(message, result); ++ ++ if (trayIcons.isEmpty()) ++ return retval; ++ ++ Display *display = QX11Info::display(); ++ XEvent *ev = (XEvent *)message; ++ if (ev->type == DestroyNotify && ev->xany.window == sysTrayWindow) { ++ sysTrayWindow = locateSystemTray(); ++ memset(&sysTrayVisual, 0, sizeof(sysTrayVisual)); ++ for (int i = 0; i < trayIcons.count(); i++) { ++ if (sysTrayWindow == XNone) { ++ QBalloonTip::hideBalloon(); ++ trayIcons[i]->hide(); // still no luck ++ trayIcons[i]->destroy(); ++ trayIcons[i]->create(); ++ } else ++ trayIcons[i]->addToTray(); // add it to the new tray ++ } ++ retval = true; ++ } else if (ev->type == ClientMessage && sysTrayWindow == XNone) { ++ static Atom manager_atom = XInternAtom(display, "MANAGER", False); ++ XClientMessageEvent *cm = (XClientMessageEvent *)message; ++ if ((cm->message_type == manager_atom) && ((Atom)cm->data.l[1] == sysTraySelection)) { ++ sysTrayWindow = cm->data.l[2]; ++ memset(&sysTrayVisual, 0, sizeof(sysTrayVisual)); ++ XSelectInput(display, sysTrayWindow, StructureNotifyMask); ++ for (int i = 0; i < trayIcons.count(); i++) { ++ trayIcons[i]->addToTray(); ++ } ++ retval = true; ++ } ++ } else if (ev->type == PropertyNotify && ev->xproperty.atom == ATOM(_NET_SYSTEM_TRAY_VISUAL) && ++ ev->xproperty.window == sysTrayWindow) { ++ memset(&sysTrayVisual, 0, sizeof(sysTrayVisual)); ++ for (int i = 0; i < trayIcons.count(); i++) { ++ trayIcons[i]->addToTray(); ++ } ++ } ++ ++ return retval; ++} ++ ++void QSystemTrayIconWidget::addToTray() ++{ ++ Q_ASSERT(sysTrayWindow != XNone); ++ Display *display = QX11Info::display(); ++ ++ XVisualInfo *vi = getSysTrayVisualInfo(); ++ if (vi && vi->visual) { ++ Window root = RootWindow(display, vi->screen); ++ Window p = root; ++ if (QWidget *pw = parentWidget()) ++ p = pw->effectiveWinId(); ++ colormap = XCreateColormap(display, root, vi->visual, AllocNone); ++ XSetWindowAttributes wsa; ++ wsa.background_pixmap = 0; ++ wsa.colormap = colormap; ++ wsa.background_pixel = 0; ++ wsa.border_pixel = 0; ++ Window wid = XCreateWindow(display, p, -1, -1, 1, 1, ++ 0, vi->depth, InputOutput, vi->visual, ++ CWBackPixmap|CWBackPixel|CWBorderPixel|CWColormap, &wsa); ++ create(wid); ++ } else { ++ XSetWindowBackgroundPixmap(display, winId(), ParentRelative); ++ } ++ ++ // GNOME, NET WM Specification ++ static Atom netwm_tray_atom = XInternAtom(display, "_NET_SYSTEM_TRAY_OPCODE", False); ++ long l[5] = { CurrentTime, SYSTEM_TRAY_REQUEST_DOCK, static_cast(winId()), 0, 0 }; ++ XEvent ev; ++ memset(&ev, 0, sizeof(ev)); ++ ev.xclient.type = ClientMessage; ++ ev.xclient.window = sysTrayWindow; ++ ev.xclient.message_type = netwm_tray_atom; ++ ev.xclient.format = 32; ++ memcpy((char *)&ev.xclient.data, (const char *) l, sizeof(l)); ++ XSendEvent(display, sysTrayWindow, False, 0, &ev); ++ setMinimumSize(22, 22); // required at least on GNOME ++} ++ ++//////////////////////////////////////////////////////////////////////////// ++QXEmbedSystemTrayIconSys::QXEmbedSystemTrayIconSys(QSystemTrayIcon *q) ++: QAbstractSystemTrayIconSys(q) ++, widget(0) ++{ ++} ++ ++QXEmbedSystemTrayIconSys::~QXEmbedSystemTrayIconSys() ++{ ++ delete widget; ++} ++ ++QRect QXEmbedSystemTrayIconSys::geometry() const ++{ ++ if (!widget) ++ return QRect(); ++ return QRect(widget->mapToGlobal(QPoint(0, 0)), widget->size()); ++} ++ ++void QXEmbedSystemTrayIconSys::updateIcon() ++{ ++ if (!widget) ++ return; ++ widget->update(); ++} ++ ++void QXEmbedSystemTrayIconSys::updateToolTip() ++{ ++ if (!widget) ++ return; ++ widget->setToolTip(trayIcon->toolTip()); ++} ++ ++void QXEmbedSystemTrayIconSys::showMessage(const QString &message, const QString &title, ++ QSystemTrayIcon::MessageIcon icon, int msecs) ++{ ++ if (!widget) ++ return; ++ QPoint point = geometry().center(); ++ QBalloonTip::showBalloon(icon, message, title, trayIcon, point, msecs); ++} ++ ++void QXEmbedSystemTrayIconSys::updateVisibility() ++{ ++ bool visible = trayIcon->isVisible(); ++ if (visible && !widget) ++ widget = new QSystemTrayIconWidget(trayIcon, this); ++ else if (!visible && widget) { ++ delete widget; ++ widget = 0; ++ } ++} ++ ++void QXEmbedSystemTrayIconSys::sendToolTipEventToTrayIcon() ++{ ++#ifndef QT_NO_TOOLTIP ++ // Pass the event through QSystemTrayIcon so that it gets a chance to ++ // update the tooltip, then asks widget to show the tooltip ++ Q_ASSERT(widget); ++ QPoint globalPos = QCursor::pos(); ++ QPoint pos = widget->mapFromGlobal(globalPos); ++ QHelpEvent event(QEvent::ToolTip, pos, globalPos); ++ QApplication::sendEvent(trayIcon, &event); ++#endif ++} ++ ++void QXEmbedSystemTrayIconSys::sendWheelEventToTrayIcon(int delta, Qt::Orientation orientation) ++{ ++#ifndef QT_NO_WHEELEVENT ++ Q_ASSERT(widget); ++ QPoint globalPos = QCursor::pos(); ++ QPoint pos = widget->mapFromGlobal(globalPos); ++ QWheelEvent event(pos, globalPos, delta, Qt::NoButton, Qt::NoModifier, orientation); ++ QApplication::sendEvent(trayIcon, &event); ++#endif ++} ++ ++void QXEmbedSystemTrayIconSys::updateMenu() ++{ ++} ++ ++///////////////////////////////////////////////////////////// ++QAbstractSystemTrayIconSys * QXEmbedSystemTrayIconSysFactory::create(QSystemTrayIcon *icon) ++{ ++ return new QXEmbedSystemTrayIconSys(icon); ++} ++ ++bool QXEmbedSystemTrayIconSysFactory::isAvailable() const ++{ ++ return QSystemTrayIconWidget::locateSystemTray() != XNone; ++} ++ ++QT_END_NAMESPACE ++#endif //QT_NO_SYSTEMTRAYICON +Index: qt-everywhere-opensource-src-4.8.6/src/gui/util/qxembedsystemtrayicon_x11_p.h +=================================================================== +--- /dev/null ++++ qt-everywhere-opensource-src-4.8.6/src/gui/util/qxembedsystemtrayicon_x11_p.h +@@ -0,0 +1,104 @@ ++/**************************************************************************** ++** ++** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). ++** All rights reserved. ++** Contact: Nokia Corporation (qt-info@nokia.com) ++** ++** This file is part of the QtGui module of the Qt Toolkit. ++** ++** $QT_BEGIN_LICENSE:LGPL$ ++** GNU Lesser General Public License Usage ++** This file may be used under the terms of the GNU Lesser General Public ++** License version 2.1 as published by the Free Software Foundation and ++** appearing in the file LICENSE.LGPL included in the packaging of this ++** file. Please review the following information to ensure the GNU Lesser ++** General Public License version 2.1 requirements will be met: ++** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ++** ++** In addition, as a special exception, Nokia gives you certain additional ++** rights. These rights are described in the Nokia Qt LGPL Exception ++** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ++** ++** GNU General Public License Usage ++** Alternatively, this file may be used under the terms of the GNU General ++** Public License version 3.0 as published by the Free Software Foundation ++** and appearing in the file LICENSE.GPL included in the packaging of this ++** file. Please review the following information to ensure the GNU General ++** Public License version 3.0 requirements will be met: ++** http://www.gnu.org/copyleft/gpl.html. ++** ++** Other Usage ++** Alternatively, this file may be used in accordance with the terms and ++** conditions contained in a signed written agreement between you and Nokia. ++** ++** ++** ++** ++** ++** $QT_END_LICENSE$ ++** ++****************************************************************************/ ++ ++#ifndef QXEMBEDSYSTEMTRAYICON_X11_P_H ++#define QXEMBEDSYSTEMTRAYICON_X11_P_H ++ ++// ++// W A R N I N G ++// ------------- ++// ++// This file is not part of the Qt API. It exists for the convenience ++// of a number of Qt sources files. This header file may change from ++// version to version without notice, or even be removed. ++// ++// We mean it. ++// ++ ++#ifndef QT_NO_SYSTEMTRAYICON ++ ++#include "qabstractsystemtrayiconsys_p.h" ++ ++QT_BEGIN_NAMESPACE ++ ++class QSystemTrayIconWidget; ++ ++class QXEmbedSystemTrayIconSys : public QAbstractSystemTrayIconSys ++{ ++public: ++ QXEmbedSystemTrayIconSys(QSystemTrayIcon *); ++ ~QXEmbedSystemTrayIconSys(); ++ ++ QRect geometry() const; ++ ++ void updateVisibility(); ++ ++ void updateIcon(); ++ ++ void updateToolTip(); ++ ++ void updateMenu(); ++ ++ void showMessage(const QString &message, const QString &title, ++ QSystemTrayIcon::MessageIcon icon, int msecs); ++ ++private: ++ friend class QSystemTrayIconWidget; ++ QSystemTrayIconWidget *widget; ++ ++ void sendToolTipEventToTrayIcon(); ++ ++ void sendWheelEventToTrayIcon(int delta, Qt::Orientation orientation); ++}; ++ ++struct QXEmbedSystemTrayIconSysFactory : public QSystemTrayIconSysFactoryInterface ++{ ++ QAbstractSystemTrayIconSys * create(QSystemTrayIcon *trayIcon); ++ bool isAvailable() const; ++}; ++ ++ ++QT_END_NAMESPACE ++ ++#endif // QT_NO_SYSTEMTRAYICON ++ ++#endif // QXEMBEDSYSTEMTRAYICON_X11_P_H ++ +Index: qt-everywhere-opensource-src-4.8.6/src/gui/util/util.pri +=================================================================== +--- qt-everywhere-opensource-src-4.8.6.orig/src/gui/util/util.pri ++++ qt-everywhere-opensource-src-4.8.6/src/gui/util/util.pri +@@ -29,8 +29,13 @@ wince* { + } + + unix:x11 { ++ HEADERS += \ ++ util/qabstractsystemtrayiconsys_p.h \ ++ util/qxembedsystemtrayicon_x11_p.h + SOURCES += \ +- util/qsystemtrayicon_x11.cpp ++ util/qabstractsystemtrayiconsys.cpp \ ++ util/qsystemtrayicon_x11.cpp \ ++ util/qxembedsystemtrayicon_x11.cpp + } + + embedded|qpa { diff --git a/desktop/toolkit/qt/files/opensuse/build-qvfb-tool.diff b/desktop/toolkit/qt/files/opensuse/build-qvfb-tool.diff new file mode 100644 index 0000000000..085811baf8 --- /dev/null +++ b/desktop/toolkit/qt/files/opensuse/build-qvfb-tool.diff @@ -0,0 +1,13 @@ +Index: tools/tools.pro +=================================================================== +--- tools/tools.pro.orig ++++ tools/tools.pro +@@ -37,6 +37,8 @@ mac { + + embedded:SUBDIRS += kmap2qmap + ++SUBDIRS += qvfb ++ + contains(QT_CONFIG, dbus):SUBDIRS += qdbus + # We don't need these command line utilities on embedded platforms. + !wince*:!symbian:contains(QT_CONFIG, xmlpatterns): SUBDIRS += xmlpatterns xmlpatternsvalidator diff --git a/desktop/toolkit/qt/files/opensuse/fix-moc-from-choking-on-boost-headers.patch b/desktop/toolkit/qt/files/opensuse/fix-moc-from-choking-on-boost-headers.patch new file mode 100644 index 0000000000..ed0f5e83e9 --- /dev/null +++ b/desktop/toolkit/qt/files/opensuse/fix-moc-from-choking-on-boost-headers.patch @@ -0,0 +1,12 @@ +--- qt-snapshot/src/tools/moc/main.cpp 2013-03-16 19:09:31.954011186 +0100 ++++ qt-snapshot/src/tools/moc/main.cpp 2013-05-28 22:38:39.781681541 +0200 +@@ -190,6 +190,8 @@ int runMoc(int _argc, char **_argv) + + // Workaround a bug while parsing the boost/type_traits/has_operator.hpp header. See QTBUG-22829 + pp.macros["BOOST_TT_HAS_OPERATOR_HPP_INCLUDED"]; ++ pp.macros["BOOST_LEXICAL_CAST_INCLUDED"]; ++ pp.macros["BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION"]; + + QByteArray filename; + QByteArray output; + diff --git a/desktop/toolkit/qt/files/opensuse/fix_assistant_segfault_QTBUG-25324.patch b/desktop/toolkit/qt/files/opensuse/fix_assistant_segfault_QTBUG-25324.patch new file mode 100644 index 0000000000..75bbdb7cf2 --- /dev/null +++ b/desktop/toolkit/qt/files/opensuse/fix_assistant_segfault_QTBUG-25324.patch @@ -0,0 +1,14 @@ +Index: qt-everywhere-opensource-src-4.8.3/tools/assistant/tools/assistant/mainwindow.cpp +=================================================================== +--- qt-everywhere-opensource-src-4.8.3.orig/tools/assistant/tools/assistant/mainwindow.cpp ++++ qt-everywhere-opensource-src-4.8.3/tools/assistant/tools/assistant/mainwindow.cpp +@@ -945,8 +945,7 @@ void MainWindow::updateApplicationFont() + if (helpEngine.usesAppFont()) + font = helpEngine.appFont(); + +- const QWidgetList &widgets = qApp->allWidgets(); +- foreach (QWidget* widget, widgets) ++ foreach (QWidget* widget, QApplication::allWidgets()) + widget->setFont(font); + } + diff --git a/desktop/toolkit/qt/files/opensuse/handle-tga-files-properly.diff b/desktop/toolkit/qt/files/opensuse/handle-tga-files-properly.diff new file mode 100644 index 0000000000..6fbe0cb7a1 --- /dev/null +++ b/desktop/toolkit/qt/files/opensuse/handle-tga-files-properly.diff @@ -0,0 +1,56 @@ +Index: src/plugins/imageformats/tga/qtgafile.cpp +=================================================================== +--- src/plugins/imageformats/tga/qtgafile.cpp.orig ++++ src/plugins/imageformats/tga/qtgafile.cpp +@@ -41,6 +41,7 @@ + + #include "qtgafile.h" + ++#include + #include + #include + #include +@@ -266,3 +267,16 @@ QImage QTgaFile::readImage() + // TODO: add processing of TGA extension information - ie TGA 2.0 files + return im; + } ++/** ++ * Checks if device contains a valid tga image, *without* changing device ++ * position. ++ */ ++bool QTgaFile::canRead(QIODevice *device) ++{ ++ QByteArray header = device->peek(HeaderSize); ++ if (header.size() < HeaderSize) ++ return false; ++ QBuffer buffer(&header); ++ QTgaFile tga(&buffer); ++ return tga.isValid(); ++} +Index: src/plugins/imageformats/tga/qtgafile.h +=================================================================== +--- src/plugins/imageformats/tga/qtgafile.h.orig ++++ src/plugins/imageformats/tga/qtgafile.h +@@ -93,6 +93,8 @@ public: + inline QSize size() const; + inline Compression compression() const; + ++ static bool canRead(QIODevice *device); ++ + private: + static inline quint16 littleEndianInt(const unsigned char *d); + +Index: src/plugins/imageformats/tga/qtgahandler.cpp +=================================================================== +--- src/plugins/imageformats/tga/qtgahandler.cpp.orig ++++ src/plugins/imageformats/tga/qtgahandler.cpp +@@ -77,8 +77,7 @@ bool QTgaHandler::canRead(QIODevice *dev + qWarning("QTgaHandler::canRead() called with no device"); + return false; + } +- QTgaFile tga(device); +- return tga.isValid(); ++ return QTgaFile::canRead(device); + } + + bool QTgaHandler::read(QImage *image) diff --git a/desktop/toolkit/qt/files/opensuse/libqt4-libtool-nodate.diff b/desktop/toolkit/qt/files/opensuse/libqt4-libtool-nodate.diff new file mode 100644 index 0000000000..f2b43991a0 --- /dev/null +++ b/desktop/toolkit/qt/files/opensuse/libqt4-libtool-nodate.diff @@ -0,0 +1,13 @@ +Index: qmake/generators/unix/unixmake2.cpp +=================================================================== +--- qmake/generators/unix/unixmake2.cpp.orig ++++ qmake/generators/unix/unixmake2.cpp +@@ -1301,7 +1301,7 @@ UnixMakefileGenerator::writeLibtoolFile( + QTextStream t(&ft); + t << "# " << lname << " - a libtool library file\n"; + t << "# Generated by qmake/libtool (" << qmake_version() << ") (Qt " +- << QT_VERSION_STR << ") on: " << QDateTime::currentDateTime().toString(); ++ << QT_VERSION_STR << ")"; + t << "\n"; + + t << "# The name that we can dlopen(3).\n" diff --git a/desktop/toolkit/qt/files/opensuse/no-moc-date.diff b/desktop/toolkit/qt/files/opensuse/no-moc-date.diff new file mode 100644 index 0000000000..fdc6b264bc --- /dev/null +++ b/desktop/toolkit/qt/files/opensuse/no-moc-date.diff @@ -0,0 +1,26 @@ +--- tools/qdbus/qdbusxml2cpp/qdbusxml2cpp.cpp.orig ++++ tools/qdbus/qdbusxml2cpp/qdbusxml2cpp.cpp +@@ -549,9 +549,11 @@ static void writeProxy(const QString &fi + } else { + includeGuard = QLatin1String("QDBUSXML2CPP_PROXY"); + } ++#if 0 + includeGuard = QString(QLatin1String("%1_%2")) + .arg(includeGuard) + .arg(QDateTime::currentDateTime().toTime_t()); ++#endif + hs << "#ifndef " << includeGuard << endl + << "#define " << includeGuard << endl + << endl; +@@ -855,9 +857,11 @@ static void writeAdaptor(const QString & + } else { + includeGuard = QLatin1String("QDBUSXML2CPP_ADAPTOR"); + } ++#if 0 + includeGuard = QString(QLatin1String("%1_%2")) + .arg(includeGuard) + .arg(QDateTime::currentDateTime().toTime_t()); ++#endif + hs << "#ifndef " << includeGuard << endl + << "#define " << includeGuard << endl + << endl; diff --git a/desktop/toolkit/qt/files/opensuse/qatomic-generic.patch b/desktop/toolkit/qt/files/opensuse/qatomic-generic.patch new file mode 100644 index 0000000000..1f2347fd38 --- /dev/null +++ b/desktop/toolkit/qt/files/opensuse/qatomic-generic.patch @@ -0,0 +1,21 @@ +Index: qt-everywhere-opensource-src-4.8.4/src/corelib/arch/qatomic_generic.h +=================================================================== +--- qt-everywhere-opensource-src-4.8.4.orig/src/corelib/arch/qatomic_generic.h ++++ qt-everywhere-opensource-src-4.8.4/src/corelib/arch/qatomic_generic.h +@@ -109,6 +109,16 @@ Q_CORE_EXPORT bool QBasicAtomicPointer_t + Q_CORE_EXPORT void *QBasicAtomicPointer_fetchAndStoreOrdered(void * volatile *, void *); + Q_CORE_EXPORT void *QBasicAtomicPointer_fetchAndAddOrdered(void * volatile *, qptrdiff); + ++inline bool QBasicAtomicPointer_testAndSetOrdered(void * volatile *_q_value, const void *expected_value, const void *newValue) ++{ ++ return QBasicAtomicPointer_testAndSetOrdered(_q_value, const_cast(expected_value), const_cast(newValue)); ++} ++ ++inline void *QBasicAtomicPointer_fetchAndStoreOrdered(void * volatile *_q_value, const void *newValue) ++{ ++ return QBasicAtomicPointer_fetchAndStoreOrdered(_q_value, const_cast(newValue)); ++} ++ + // Reference counting + + inline bool QBasicAtomicInt::ref() diff --git a/desktop/toolkit/qt/files/opensuse/qdbusconnection-no-warning-output.patch b/desktop/toolkit/qt/files/opensuse/qdbusconnection-no-warning-output.patch new file mode 100644 index 0000000000..eed366fd5b --- /dev/null +++ b/desktop/toolkit/qt/files/opensuse/qdbusconnection-no-warning-output.patch @@ -0,0 +1,15 @@ +Index: src/dbus/qdbusconnection.cpp +=================================================================== +--- src/dbus/qdbusconnection.cpp.orig ++++ src/dbus/qdbusconnection.cpp +@@ -1110,8 +1110,10 @@ public: + // make sure this connection is running on the main thread + QCoreApplication *instance = QCoreApplication::instance(); + if (!instance) { ++#ifndef QT_NO_DEBUG + qWarning("QDBusConnection: %s D-Bus connection created before QCoreApplication. Application may misbehave.", + type == SessionBus ? "session" : type == SystemBus ? "system" : "generic"); ++#endif + } else if (QDBusConnectionPrivate::d(*this)) { + QDBusConnectionPrivate::d(*this)->moveToThread(instance->thread()); + } diff --git a/desktop/toolkit/qt/files/opensuse/qfatal-noreturn.diff b/desktop/toolkit/qt/files/opensuse/qfatal-noreturn.diff new file mode 100644 index 0000000000..2fafb87e42 --- /dev/null +++ b/desktop/toolkit/qt/files/opensuse/qfatal-noreturn.diff @@ -0,0 +1,12 @@ +Index: src/corelib/global/qglobal.h +=================================================================== +--- src/corelib/global/qglobal.h.orig ++++ src/corelib/global/qglobal.h +@@ -1772,6 +1772,7 @@ Q_CORE_EXPORT void qCritical(const char + Q_CORE_EXPORT void qFatal(const char *, ...) /* print fatal message and exit */ + #if defined(Q_CC_GNU) && !defined(__INSURE__) + __attribute__ ((format (printf, 1, 2))) ++ __attribute__ ((noreturn)) + #endif + ; + diff --git a/desktop/toolkit/qt/files/opensuse/qlocale_icu-no-warning-output.patch b/desktop/toolkit/qt/files/opensuse/qlocale_icu-no-warning-output.patch new file mode 100644 index 0000000000..f54715e786 --- /dev/null +++ b/desktop/toolkit/qt/files/opensuse/qlocale_icu-no-warning-output.patch @@ -0,0 +1,61 @@ +From b924fb26f14b38c5a92d7271b2eba73080cfb337 Mon Sep 17 00:00:00 2001 +From: Hrvoje Senjan +Date: Tue, 30 Jul 2013 01:02:38 +0200 +Subject: [PATCH 1/1] qlocale_icu-no-warning-output.patch + +Since openSUSE now has it's own icu so versioning, and +we can't predict what will happen in future, qWarnings +about icu libraries and symbols are now only emmited in +debug builds. This will be usefull regardless of icu versioning. + +--- + src/corelib/tools/qlocale_icu.cpp | 8 ++++++++ + 1 file changed, 8 insertions(+) + +diff --git a/src/corelib/tools/qlocale_icu.cpp b/src/corelib/tools/qlocale_icu.cpp +index c3e2907..ce09677 100644 +--- a/src/corelib/tools/qlocale_icu.cpp ++++ b/src/corelib/tools/qlocale_icu.cpp +@@ -84,7 +84,9 @@ bool qt_initIcu(const QString &localeString) + QLibrary lib(QLatin1String("icui18n"), QLatin1String(U_ICU_VERSION_SHORT)); + lib.setLoadHints(QLibrary::ImprovedSearchHeuristics); + if (!lib.load()) { ++#ifndef QT_NO_DEBUG + qWarning() << "Unable to load library icui18n" << lib.errorString(); ++#endif + status = ErrorLoading; + return false; + } +@@ -105,7 +107,9 @@ bool qt_initIcu(const QString &localeString) + ptr_ucol_close = 0; + ptr_ucol_strcoll = 0; + ++#ifndef QT_NO_DEBUG + qWarning("Unable to find symbols in icui18n"); ++#endif + status = ErrorLoading; + return false; + } +@@ -114,7 +118,9 @@ bool qt_initIcu(const QString &localeString) + QLibrary ucLib(QLatin1String("icuuc"), QLatin1String(U_ICU_VERSION_SHORT)); + ucLib.setLoadHints(QLibrary::ImprovedSearchHeuristics); + if (!ucLib.load()) { ++#ifndef QT_NO_DEBUG + qWarning() << "Unable to load library icuuc" << ucLib.errorString(); ++#endif + status = ErrorLoading; + return false; + } +@@ -131,7 +137,9 @@ bool qt_initIcu(const QString &localeString) + ptr_u_strToUpper = 0; + ptr_u_strToLower = 0; + ++#ifndef QT_NO_DEBUG + qWarning("Unable to find symbols in icuuc"); ++#endif + status = ErrorLoading; + return false; + } +-- +1.8.3.1 + diff --git a/desktop/toolkit/qt/files/opensuse/qt-debug-timer.diff b/desktop/toolkit/qt/files/opensuse/qt-debug-timer.diff new file mode 100644 index 0000000000..585ba294c6 --- /dev/null +++ b/desktop/toolkit/qt/files/opensuse/qt-debug-timer.diff @@ -0,0 +1,26 @@ +Index: src/corelib/kernel/qeventdispatcher_unix.cpp +=================================================================== +--- src/corelib/kernel/qeventdispatcher_unix.cpp.orig ++++ src/corelib/kernel/qeventdispatcher_unix.cpp +@@ -592,6 +592,21 @@ int QTimerInfoList::activateTimers() + + if (!firstTimerInfo) { + firstTimerInfo = currentTimerInfo; ++ QObject* o = firstTimerInfo->obj; ++ static int debug_timer = -1; ++ if (debug_timer < 0) ++ debug_timer = getenv("QT_DEBUG_TIMER") ? 1 : 0; ++ if (debug_timer > 0) { ++ QString objPath = o->objectName(); ++ if(objPath.isEmpty()) objPath = QLatin1String("<") + o->parent()->metaObject()->className() + QLatin1String(">"); ++ for (; o->parent(); o = o->parent()) ++ if (!o->parent()->objectName().isEmpty()) ++ objPath.prepend(o->parent()->objectName() + "/"); ++ else ++ objPath.prepend(QLatin1String("<") + o->parent()->metaObject()->className() + QLatin1String(">/")); ++ qDebug("activating %d ms timer for %s", firstTimerInfo->interval.tv_sec * 1000 ++ + firstTimerInfo->interval.tv_usec / 1000, qPrintable(objPath)); ++ } + } else if (firstTimerInfo == currentTimerInfo) { + // avoid sending the same timer multiple times + break; diff --git a/desktop/toolkit/qt/files/opensuse/qt-never-strip.diff b/desktop/toolkit/qt/files/opensuse/qt-never-strip.diff new file mode 100644 index 0000000000..81e9c67e18 --- /dev/null +++ b/desktop/toolkit/qt/files/opensuse/qt-never-strip.diff @@ -0,0 +1,30 @@ +Index: configure +=================================================================== +--- configure.orig ++++ configure +@@ -65,7 +65,6 @@ OPT_CMDLINE=`echo $@ | sed "s,-v ,,g; s, + + # initialize global variables + QMAKE_SWITCHES= +-QMAKE_VARS= + QMAKE_CONFIG= + QTCONFIG_CONFIG= + QT_CONFIG= +@@ -1625,7 +1624,7 @@ while [ "$#" -gt 0 ]; do + QMakeVar add QMAKE_CFLAGS -pg + QMakeVar add QMAKE_CXXFLAGS -pg + QMakeVar add QMAKE_LFLAGS -pg +- QMAKE_VARS="$QMAKE_VARS CONFIG+=nostrip" ++ QMakeVar add CONFIG nostrip + else + UNKNOWN_OPT=yes + fi +@@ -3359,6 +3358,8 @@ if [ "$OPT_VERBOSE" = "yes" ]; then + fi + fi + ++QMakeVar add CONFIG nostrip ++ + #------------------------------------------------------------------------------- + # tests that don't need qmake (must be run before displaying help) + #------------------------------------------------------------------------------- diff --git a/desktop/toolkit/qt/files/opensuse/use-freetype-default.diff b/desktop/toolkit/qt/files/opensuse/use-freetype-default.diff new file mode 100644 index 0000000000..e7b94a80b2 --- /dev/null +++ b/desktop/toolkit/qt/files/opensuse/use-freetype-default.diff @@ -0,0 +1,40 @@ +Index: src/gui/text/qfontengine_x11.cpp +=================================================================== +--- src/gui/text/qfontengine_x11.cpp.orig ++++ src/gui/text/qfontengine_x11.cpp +@@ -967,6 +967,26 @@ Q_GUI_EXPORT void qt_x11ft_convert_patte + *antialias = b; + } + ++#include ++#include FT_FREETYPE_H ++#include FT_LCD_FILTER_H ++ ++static bool subpixel_rendering_available() ++{ ++ static int implemented = -1; ++ ++ if (implemented >= 0) ++ return implemented; ++ ++ extern FT_Library qt_getFreetype(); ++ FT_Library lib = qt_getFreetype(); ++ ++ if (FT_Err_Unimplemented_Feature == ++ FT_Library_SetLcdFilter(lib, FT_LCD_FILTER_DEFAULT )) ++ return (implemented = false); ++ ++ return (implemented = true); ++} + + QFontEngineX11FT::QFontEngineX11FT(FcPattern *pattern, const QFontDef &fd, int screen) + : QFontEngineFT(fd) +@@ -984,7 +1004,7 @@ QFontEngineX11FT::QFontEngineX11FT(FcPat + canUploadGlyphsToServer = QApplication::testAttribute(Qt::AA_X11InitThreads) || (qApp->thread() == QThread::currentThread()); + + subpixelType = Subpixel_None; +- if (antialias) { ++ if (subpixel_rendering_available() && antialias) { + int subpixel = X11->display ? X11->screens[screen].subpixel : FC_RGBA_UNKNOWN; + if (subpixel == FC_RGBA_UNKNOWN) + (void) FcPatternGetInteger(pattern, FC_RGBA, 0, &subpixel); diff --git a/desktop/toolkit/qt/files/turkish.patch.bz2 b/desktop/toolkit/qt/files/turkish.patch.bz2 new file mode 100644 index 0000000000000000000000000000000000000000..16b3bc68b64b398323790725e122f5b069ee4db2 GIT binary patch literal 35990 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 a*{~zFnVjMU=IDp~Mck226eKv@M + + + + qt + http://qt.nokia.com + + PisiLinux Community + admins@pisilinux.org + + LGPLv2.1 + GPLv3 + library +

Qt toolkit version 4 + Qt is a cross platform GUI toolkit. + http://download.qt-project.org/official_releases/qt/4.8/4.8.6/qt-everywhere-opensource-src-4.8.6.tar.gz + + mariadb-lib + cups-devel + mesa-devel + gtk2-devel + tiff-devel + libSM-devel + libICE-devel + libmng-devel + libXext-devel + alsa-lib-devel + firebird-devel + unixODBC-devel + libXrandr-devel + gstreamer-devel + fontconfig-devel + libXrender-devel + postgresql-server + libjpeg-turbo-devel + firebird-superserver + gst-plugins-base-devel + qtchooser + + + + fedora/qt-everywhere-opensource-src-4.8.0-tp-multilib-optflags.patch + fedora/qt-everywhere-opensource-src-4.8.5-uic_multilib.patch + fedora/qt-everywhere-opensource-src-4.8.5-webcore_debuginfo.patch + fedora/qt-cupsEnumDests.patch + fedora/qt-x11-opensource-src-4.5.1-enable_ft_lcdfilter.patch + fedora/qt-everywhere-opensource-src-4.6.3-glib_eventloop_nullcheck.patch + fedora/qt-everywhere-opensource-src-4.8.1-qt3support_debuginfo.patch + fedora/qt-everywhere-opensource-src-4.8.5-qt_plugin_path.patch + fedora/qt-everywhere-opensource-src-4.8.4-qmake_pkgconfig_requires_private.patch + fedora/qt-x11-opensource-src-4.5.0-fix-qatomic-inline-asm.patch + fedora/qt-everywhere-opensource-src-4.8.5-mysql_config.patch + fedora/qt-everywhere-opensource-src-4.6.2-cups.patch + fedora/qt-everywhere-opensource-src-4.8.5-QTBUG-14467.patch + fedora/qt-everywhere-opensource-src-4.8.3-no_Werror.patch + fedora/qt-everywhere-opensource-src-4.8.0-QTBUG-22037.patch + fedora/qt-everywhere-opensource-src-4.8.5-QTBUG-21900.patch + fedora/qt-everywhere-opensource-src-4.8.5-tds_no_strict_aliasing.patch + fedora/qt-everywhere-opensource-src-4.8.5-QTBUG-4862.patch + fedora/qt-everywhere-opensource-src-4.8.5-QTBUG-35459.patch + fedora/qt-everywhere-opensource-src-4.8.5-qgtkstyle_disable_gtk_theme_check.patch + + fedora/qt-everywhere-opensource-src-4.8.6-QTBUG-34614.patch + fedora/qt-everywhere-opensource-src-4.8.6-QTBUG-37380.patch + fedora/qt-everywhere-opensource-src-4.8.6-QTBUG-38585.patch + + opensuse/qt-never-strip.diff + opensuse/use-freetype-default.diff + opensuse/0191-listview-alternate-row-colors.diff + opensuse/0188-fix-moc-parser-same-name-header.diff + opensuse/0195-compositing-properties.diff + opensuse/0180-window-role.diff + opensuse/0225-invalidate-tabbar-geometry-on-refresh.patch + opensuse/qt-debug-timer.diff + opensuse/qfatal-noreturn.diff + opensuse/no-moc-date.diff + opensuse/libqt4-libtool-nodate.diff + opensuse/build-qvfb-tool.diff + opensuse/handle-tga-files-properly.diff + opensuse/qdbusconnection-no-warning-output.patch + opensuse/fix_assistant_segfault_QTBUG-25324.patch + opensuse/qatomic-generic.patch + opensuse/QSystemTrayicon.diff + opensuse/fix-moc-from-choking-on-boost-headers.patch + opensuse/qlocale_icu-no-warning-output.patch + opensuse/0001-Don-t-crash-on-broken-GIF-images.patch + + CVE-2014-0190.patch + + turkish.patch.bz2 + + mkspecs.patch + + + + + qt + + mesa + tiff + libICE + libSM + libmng + libXext + alsa-lib + gstreamer + fontconfig + libXrender + libjpeg-turbo + qtchooser + + + /etc + /usr/lib/qt4/bin + /usr/bin/qdbus* + /usr/bin/qtconfig + /usr/lib + /usr/share/applications + /usr/lib/qt4/imports + /usr/lib/qt4/templates + /usr/share/qt4/translations/*_tr.* + + + data/qdbusviewer.desktop + data/qtconfig.desktop + + + + + qt-32bit + emul32 + 32-bit shared libraries for qt + emul32 + + mesa-32bit + tiff-32bit + dbus-32bit + zlib-32bit + glib2-32bit + libSM-32bit + libpng-32bit + libmng-32bit + libICE-32bit + libX11-32bit + sqlite-32bit + openssl-32bit + libXext-32bit + freetype-32bit + alsa-lib-32bit + libXrender-32bit + fontconfig-32bit + libjpeg-turbo-32bit + + + uClibc + mesa-32bit + tiff-32bit + dbus-32bit + zlib-32bit + libSM-32bit + glib2-32bit + libX11-32bit + libpng-32bit + libmng-32bit + libICE-32bit + sqlite-32bit + openssl-32bit + libXext-32bit + freetype-32bit + alsa-lib-32bit + libXrender-32bit + fontconfig-32bit + libjpeg-turbo-32bit + qt + + + /usr/lib32 + + + + + qt-webkit + + qt + gstreamer + libXrender + gst-plugins-base + + + /usr/lib/*WebKit* + + + + + qt-webkit-32bit + emul32 + 32-bit shared libraries for qt-webkit + emul32 + + glib2-32bit + libX11-32bit + sqlite-32bit + gstreamer-32bit + libXrender-32bit + gst-plugins-base-32bit + + + qt-webkit + qt-32bit + glib2-32bit + libX11-32bit + sqlite-32bit + gstreamer-32bit + libXrender-32bit + gst-plugins-base-32bit + + + /usr/lib32/*WebKit* + + + + + qt-webkit-devel + Development files for Qt Webkit + + qt-devel + + + /usr/include/Qt/*WebKit* + /usr/include/Qt/*webkit* + /usr/include/QtWebKit + /usr/lib/pkgconfig/*WebKit* + + + + + qt-devel + Development files for Qt + + qt + + mesa-devel + + + + /usr/bin + /usr/include + /usr/share/qt4/mkspecs + /usr/lib/pkgconfig + /usr/lib32/pkgconfig + /usr/share/qt4/q3porting.xml + + + + + qt-l10n + locale + Translation files for Qt library and tools. Supported languages are: da, de, fr, ja, pl, ru, zh_CN, zh_TW + + /usr/share/qt4/translations + + + + + qt-designer + designer + + qt + qt-webkit + + + /usr/bin/designer + /usr/lib/qt4/plugins/designer + /usr/share/applications/designer.desktop + /usr/share/pixmaps/designer.png + + + data/designer.desktop + data/designer.png + + + + + qt-linguist + linguist + + qt + + + /usr/bin/linguist + /usr/share/qt4/phrasebooks + /usr/share/applications/linguist.desktop + /usr/share/pixmaps/linguist.png + + + data/linguist.desktop + data/linguist.png + + + + + qt-docs + assistant + Development documents of Qt and Qt Assistant tool + + qt + qt-webkit + + + /usr/bin/assistant + /usr/share/applications/assistant.desktop + /usr/share/pixmaps/assistant.png + /usr/share/icons + /usr/share/doc + /usr/share/doc/qt4/qch + + + data/assistant.desktop + data/assistant.png + data/hi128-app-qt4-logo.png + data/hi48-app-qt4-logo.png + + + + + qt-docs-html + Development documents of Qt in HTML format + + /usr/share/doc/qt4/html + + + + + qt-demos + qt4-logo + + qt + qt-webkit + mesa + phonon + + + /usr/bin/qtdemo + /usr/lib/qt4/demos + /usr/lib/qt4/examples + /usr/lib/qt4/plugins/designer/libarthurplugin.so + /usr/share/applications/qtdemo.desktop + /usr/tests/qt4 + + + data/qtdemo.desktop + + + + + qt-sql-mysql + + qt + mariadb-lib + + + /usr/lib/qt4/plugins/sqldrivers/libqsqlmysql.so + + + + + qt-sql-postgresql + + qt + postgresql-lib + + + /usr/lib/qt4/plugins/sqldrivers/libqsqlpsql.so + + + + + qt-sql-sqlite + + qt + sqlite + + + /usr/lib/qt4/plugins/sqldrivers/libqsqlite.so + + + + + qt-sql-odbc + + qt + unixODBC + + + /usr/lib/qt4/plugins/sqldrivers/libqsqlodbc.so + + + + + qt-sql-ibase + + qt + firebird-client + + + /usr/lib/qt4/plugins/sqldrivers/libqsqlibase.so + + + + + + 2015-04-09 + 4.8.6 + Rebuild for qt5 + Ayhan Yalçınsoy + ayhanyalcinsoy@pisilinux.org + + + 2014-05-20 + 4.8.6 + Version bump, fix CVE. + Serdar Soytetir + kaptan@pisilinux.org + + + 2014-04-10 + 4.8.5 + Rebuild. + Serdar Soytetir + kaptan@pisilinux.org + + + 2014-02-21 + 4.8.5 + Rebuild for Mariadb. + Serdar Soytetir + kaptan@pisilinux.org + + + 2014-02-01 + 4.8.5 + Rebuild for new libmng. + Serdar Soytetir + kaptan@pisilinux.org + + + 2013-12-14 + 4.8.5 + Re-cleanup qt, fix systemtray issues. + Serdar Soytetir + kaptan@pisilinux.org + + + 2013-12-11 + 4.8.5 + Cleanup some patches, rebuild. + Serdar Soytetir + kaptan@pisilinux.org + + + 2013-08-05 + 4.8.5 + Patched. + Osman Erkan + osman.erkan@pisilinux.org + + + 2013-07-03 + 4.8.5 + Version bump. + Marcin Bojara + marcin@pisilinux.org + + + 2013-03-11 + 4.8.4 + Patch cleanup, add some enhancements. + Serdar Soytetir + kaptan@pisilinux.org + + + 2013-02-15 + 4.8.4 + Add emul32 + Marcin Bojara + marcin@pisilinux.org + + + 2012-12-08 + 4.8.4 + First release + Yusuf Aydemir + yusuf.aydemir@pisilinux.org + + + diff --git a/desktop/toolkit/qt/translations.xml b/desktop/toolkit/qt/translations.xml new file mode 100644 index 0000000000..fc38bd2536 --- /dev/null +++ b/desktop/toolkit/qt/translations.xml @@ -0,0 +1,35 @@ + + + + qt + Qt araç takımı, sürüm 4 + Qt bir çok platformda çalışabilen ve grafiksel kullanıcı arayüzü (GUI) oluşturmaya yarayan bir araç takımıdır. + Qt est une boîte à outils graphique multi-plateforme. + Qt es un toolkit para GUI multiplataforma. + + + + qt-devel + Qt için geliştirme dosyaları + + + + qt-webkit-devel + Qt Webkit için geliştirme dosyaları + + + + qt-l10n + Qt kitaplık ve araçları için dil dosyaları. Desteklenen diller: da, de, fr, ja, pl, ru, zh_CN, zh_TW + + + + qt-docs + Qt için geliştirme belgeleri ve Qt Assistant aracı + + + + qt-docs-html + Qt için HTML biçiminde geliştirme belgeleri + + From 55258c9a0dc2e37e1d97ec9f723284ee431f5a9d Mon Sep 17 00:00:00 2001 From: alihanozturk Date: Tue, 1 Sep 2015 21:12:50 +0300 Subject: [PATCH 04/13] qtchooser:add --- desktop/toolkit/qtchooser/actions.py | 20 ++++++++ desktop/toolkit/qtchooser/files/4.conf | 2 + desktop/toolkit/qtchooser/files/5.conf | 2 + desktop/toolkit/qtchooser/pspec.xml | 53 ++++++++++++++++++++++ desktop/toolkit/qtchooser/translations.xml | 8 ++++ 5 files changed, 85 insertions(+) create mode 100644 desktop/toolkit/qtchooser/actions.py create mode 100644 desktop/toolkit/qtchooser/files/4.conf create mode 100644 desktop/toolkit/qtchooser/files/5.conf create mode 100644 desktop/toolkit/qtchooser/pspec.xml create mode 100644 desktop/toolkit/qtchooser/translations.xml diff --git a/desktop/toolkit/qtchooser/actions.py b/desktop/toolkit/qtchooser/actions.py new file mode 100644 index 0000000000..01df7431ec --- /dev/null +++ b/desktop/toolkit/qtchooser/actions.py @@ -0,0 +1,20 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# +# Licensed under the GNU General Public License, version 3. +# See the file http://www.gnu.org/licenses/gpl.txt + +from pisi.actionsapi import autotools +from pisi.actionsapi import pisitools +from pisi.actionsapi import get + +def build(): + autotools.make() + +def install(): + autotools.install() + + pisitools.dodir("/etc/xdg/qtchooser") + pisitools.dosym("qt4.conf", "/etc/xdg/qtchooser/default.conf") + + pisitools.dodoc("LICENSE.LGPL", "LGPL_EXCEPTION.txt") diff --git a/desktop/toolkit/qtchooser/files/4.conf b/desktop/toolkit/qtchooser/files/4.conf new file mode 100644 index 0000000000..96e344eba9 --- /dev/null +++ b/desktop/toolkit/qtchooser/files/4.conf @@ -0,0 +1,2 @@ +/usr/lib/qt4/bin +/usr/lib diff --git a/desktop/toolkit/qtchooser/files/5.conf b/desktop/toolkit/qtchooser/files/5.conf new file mode 100644 index 0000000000..edaadebd82 --- /dev/null +++ b/desktop/toolkit/qtchooser/files/5.conf @@ -0,0 +1,2 @@ +/usr/lib/qt5/bin +/usr/lib diff --git a/desktop/toolkit/qtchooser/pspec.xml b/desktop/toolkit/qtchooser/pspec.xml new file mode 100644 index 0000000000..8210220c15 --- /dev/null +++ b/desktop/toolkit/qtchooser/pspec.xml @@ -0,0 +1,53 @@ + + + + + qtchooser + http://qt.gitorious.org/qt/qtchooser + + Yusuf Aydemir + yusuf.aydemir@pisilinux.org + + GPLv1 + library + Wrap the other Qt tools by searching for different instances of Qt on the system + Wrap the other Qt tools by searching for different instances of Qt on the system + http://source.pisilinux.org/1.0/qt-qtchooser-48.tar.gz + + + + qtchooser + + /usr/bin + /etc + /usr/lib + /usr/include + /usr/share + /usr/share/locale + /usr/share/man + /usr/share/info + /usr/share/doc + + + 4.conf + 5.conf + + + + + + 2015-02-15 + 48 + Version bump + Ayhan Yalçınsoy + ayhanyalcinsoy@pisilinux.org + + + 2014-05-26 + 41 + First release + Yusuf Aydemir + yusuf.aydemir@pisilinux.org + + + diff --git a/desktop/toolkit/qtchooser/translations.xml b/desktop/toolkit/qtchooser/translations.xml new file mode 100644 index 0000000000..bffe2d9bb9 --- /dev/null +++ b/desktop/toolkit/qtchooser/translations.xml @@ -0,0 +1,8 @@ + + + + qtchooser + Wrap the other Qt tools by searching for different instances of Qt on the system + Wrap the other Qt tools by searching for different instances of Qt on the system + + From 6336a9a8192cda61381307c8bf8087886f0cafb2 Mon Sep 17 00:00:00 2001 From: alihanozturk Date: Tue, 1 Sep 2015 21:18:27 +0300 Subject: [PATCH 05/13] qtchooser:add dep --- desktop/toolkit/qtchooser/pspec.xml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/desktop/toolkit/qtchooser/pspec.xml b/desktop/toolkit/qtchooser/pspec.xml index 8210220c15..95861c54f0 100644 --- a/desktop/toolkit/qtchooser/pspec.xml +++ b/desktop/toolkit/qtchooser/pspec.xml @@ -17,6 +17,9 @@ qtchooser + + libgcc + /usr/bin /etc From 7d761a583df731659aa8d582bea888dacd898e0d Mon Sep 17 00:00:00 2001 From: alihanozturk Date: Tue, 1 Sep 2015 21:34:04 +0300 Subject: [PATCH 06/13] qt:add options --- desktop/toolkit/qt/actions.py | 1 + 1 file changed, 1 insertion(+) diff --git a/desktop/toolkit/qt/actions.py b/desktop/toolkit/qt/actions.py index f7726b60db..c8a30d69c2 100644 --- a/desktop/toolkit/qt/actions.py +++ b/desktop/toolkit/qt/actions.py @@ -55,6 +55,7 @@ def setup(): -qvfb \ -glib \ -no-sql-sqlite2 \ + -disable-sqlite \ -system-sqlite \ -system-zlib \ -system-libpng \ From 4f34ba7ba9008e92e25b2ac865b1ab6643ebb8ba Mon Sep 17 00:00:00 2001 From: alihanozturk Date: Tue, 1 Sep 2015 21:43:50 +0300 Subject: [PATCH 07/13] qt:options ad --- desktop/toolkit/qt/actions.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/desktop/toolkit/qt/actions.py b/desktop/toolkit/qt/actions.py index c8a30d69c2..7218e7ad02 100644 --- a/desktop/toolkit/qt/actions.py +++ b/desktop/toolkit/qt/actions.py @@ -55,7 +55,7 @@ def setup(): -qvfb \ -glib \ -no-sql-sqlite2 \ - -disable-sqlite \ + -no-sql-sqlite \ -system-sqlite \ -system-zlib \ -system-libpng \ From ec0e3e5952df19e1ff801204f0f10b2037cac236 Mon Sep 17 00:00:00 2001 From: alihanozturk Date: Tue, 1 Sep 2015 21:50:32 +0300 Subject: [PATCH 08/13] qt:delete --- desktop/toolkit/qt/actions.py | 181 -- desktop/toolkit/qt/files/CVE-2014-0190.patch | 32 - .../toolkit/qt/files/data/assistant.desktop | 136 -- desktop/toolkit/qt/files/data/assistant.png | Bin 15052 -> 0 bytes .../toolkit/qt/files/data/designer.desktop | 132 -- desktop/toolkit/qt/files/data/designer.png | Bin 2302 -> 0 bytes .../qt/files/data/hi128-app-qt4-logo.png | Bin 16119 -> 0 bytes .../qt/files/data/hi48-app-qt4-logo.png | Bin 3307 -> 0 bytes .../toolkit/qt/files/data/linguist.desktop | 128 -- desktop/toolkit/qt/files/data/linguist.png | Bin 14785 -> 0 bytes .../qt/files/data/phonon-gstreamer.svg | 54 - .../toolkit/qt/files/data/qdbusviewer.desktop | 11 - .../toolkit/qt/files/data/qtconfig.desktop | 9 - desktop/toolkit/qt/files/data/qtdemo.desktop | 10 - .../qt/files/fedora/qt-cupsEnumDests.patch | 238 --- ...everywhere-opensource-src-4.6.2-cups.patch | 84 - ...e-src-4.6.3-glib_eventloop_nullcheck.patch | 69 - ...ere-opensource-src-4.8.0-QTBUG-22037.patch | 41 - ...ource-src-4.8.0-tp-multilib-optflags.patch | 36 - ...ource-src-4.8.1-qt3support_debuginfo.patch | 10 - ...where-opensource-src-4.8.3-no_Werror.patch | 12 - ...8.4-qmake_pkgconfig_requires_private.patch | 16 - ...ere-opensource-src-4.8.5-QTBUG-14467.patch | 24 - ...ere-opensource-src-4.8.5-QTBUG-21900.patch | 84 - ...ere-opensource-src-4.8.5-QTBUG-35459.patch | 12 - ...here-opensource-src-4.8.5-QTBUG-4862.patch | 29 - ...re-opensource-src-4.8.5-mysql_config.patch | 19 - ....5-qgtkstyle_disable_gtk_theme_check.patch | 22 - ...-opensource-src-4.8.5-qt_plugin_path.patch | 19 - ...rce-src-4.8.5-tds_no_strict_aliasing.patch | 12 - ...re-opensource-src-4.8.5-uic_multilib.patch | 28 - ...ensource-src-4.8.5-webcore_debuginfo.patch | 16 - ...ere-opensource-src-4.8.6-QTBUG-34614.patch | 95 -- ...ere-opensource-src-4.8.6-QTBUG-37380.patch | 64 - ...ere-opensource-src-4.8.6-QTBUG-38585.patch | 13 - ...rce-src-4.5.0-fix-qatomic-inline-asm.patch | 50 - ...source-src-4.5.1-enable_ft_lcdfilter.patch | 12 - desktop/toolkit/qt/files/mkspecs.patch | 54 - ...001-Don-t-crash-on-broken-GIF-images.patch | 42 - .../qt/files/opensuse/0180-window-role.diff | 96 -- .../0188-fix-moc-parser-same-name-header.diff | 37 - .../0191-listview-alternate-row-colors.diff | 24 - .../opensuse/0195-compositing-properties.diff | 60 - ...nvalidate-tabbar-geometry-on-refresh.patch | 35 - .../qt/files/opensuse/QSystemTrayicon.diff | 1486 ----------------- .../qt/files/opensuse/build-qvfb-tool.diff | 13 - ...ix-moc-from-choking-on-boost-headers.patch | 12 - .../fix_assistant_segfault_QTBUG-25324.patch | 14 - .../opensuse/handle-tga-files-properly.diff | 56 - .../files/opensuse/libqt4-libtool-nodate.diff | 13 - .../qt/files/opensuse/no-moc-date.diff | 26 - .../qt/files/opensuse/qatomic-generic.patch | 21 - .../qdbusconnection-no-warning-output.patch | 15 - .../qt/files/opensuse/qfatal-noreturn.diff | 12 - .../qlocale_icu-no-warning-output.patch | 61 - .../qt/files/opensuse/qt-debug-timer.diff | 26 - .../qt/files/opensuse/qt-never-strip.diff | 30 - .../files/opensuse/use-freetype-default.diff | 40 - desktop/toolkit/qt/files/turkish.patch.bz2 | Bin 35990 -> 0 bytes desktop/toolkit/qt/pspec.xml | 496 ------ desktop/toolkit/qt/translations.xml | 35 - 61 files changed, 4402 deletions(-) delete mode 100644 desktop/toolkit/qt/actions.py delete mode 100644 desktop/toolkit/qt/files/CVE-2014-0190.patch delete mode 100644 desktop/toolkit/qt/files/data/assistant.desktop delete mode 100644 desktop/toolkit/qt/files/data/assistant.png delete mode 100644 desktop/toolkit/qt/files/data/designer.desktop delete mode 100644 desktop/toolkit/qt/files/data/designer.png delete mode 100644 desktop/toolkit/qt/files/data/hi128-app-qt4-logo.png delete mode 100644 desktop/toolkit/qt/files/data/hi48-app-qt4-logo.png delete mode 100644 desktop/toolkit/qt/files/data/linguist.desktop delete mode 100644 desktop/toolkit/qt/files/data/linguist.png delete mode 100644 desktop/toolkit/qt/files/data/phonon-gstreamer.svg delete mode 100755 desktop/toolkit/qt/files/data/qdbusviewer.desktop delete mode 100755 desktop/toolkit/qt/files/data/qtconfig.desktop delete mode 100644 desktop/toolkit/qt/files/data/qtdemo.desktop delete mode 100644 desktop/toolkit/qt/files/fedora/qt-cupsEnumDests.patch delete mode 100644 desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.6.2-cups.patch delete mode 100644 desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.6.3-glib_eventloop_nullcheck.patch delete mode 100644 desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.0-QTBUG-22037.patch delete mode 100644 desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.0-tp-multilib-optflags.patch delete mode 100644 desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.1-qt3support_debuginfo.patch delete mode 100644 desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.3-no_Werror.patch delete mode 100644 desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.4-qmake_pkgconfig_requires_private.patch delete mode 100644 desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.5-QTBUG-14467.patch delete mode 100644 desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.5-QTBUG-21900.patch delete mode 100644 desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.5-QTBUG-35459.patch delete mode 100644 desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.5-QTBUG-4862.patch delete mode 100644 desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.5-mysql_config.patch delete mode 100644 desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.5-qgtkstyle_disable_gtk_theme_check.patch delete mode 100644 desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.5-qt_plugin_path.patch delete mode 100644 desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.5-tds_no_strict_aliasing.patch delete mode 100644 desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.5-uic_multilib.patch delete mode 100644 desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.5-webcore_debuginfo.patch delete mode 100644 desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.6-QTBUG-34614.patch delete mode 100644 desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.6-QTBUG-37380.patch delete mode 100644 desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.6-QTBUG-38585.patch delete mode 100644 desktop/toolkit/qt/files/fedora/qt-x11-opensource-src-4.5.0-fix-qatomic-inline-asm.patch delete mode 100644 desktop/toolkit/qt/files/fedora/qt-x11-opensource-src-4.5.1-enable_ft_lcdfilter.patch delete mode 100644 desktop/toolkit/qt/files/mkspecs.patch delete mode 100644 desktop/toolkit/qt/files/opensuse/0001-Don-t-crash-on-broken-GIF-images.patch delete mode 100644 desktop/toolkit/qt/files/opensuse/0180-window-role.diff delete mode 100644 desktop/toolkit/qt/files/opensuse/0188-fix-moc-parser-same-name-header.diff delete mode 100644 desktop/toolkit/qt/files/opensuse/0191-listview-alternate-row-colors.diff delete mode 100644 desktop/toolkit/qt/files/opensuse/0195-compositing-properties.diff delete mode 100644 desktop/toolkit/qt/files/opensuse/0225-invalidate-tabbar-geometry-on-refresh.patch delete mode 100644 desktop/toolkit/qt/files/opensuse/QSystemTrayicon.diff delete mode 100644 desktop/toolkit/qt/files/opensuse/build-qvfb-tool.diff delete mode 100644 desktop/toolkit/qt/files/opensuse/fix-moc-from-choking-on-boost-headers.patch delete mode 100644 desktop/toolkit/qt/files/opensuse/fix_assistant_segfault_QTBUG-25324.patch delete mode 100644 desktop/toolkit/qt/files/opensuse/handle-tga-files-properly.diff delete mode 100644 desktop/toolkit/qt/files/opensuse/libqt4-libtool-nodate.diff delete mode 100644 desktop/toolkit/qt/files/opensuse/no-moc-date.diff delete mode 100644 desktop/toolkit/qt/files/opensuse/qatomic-generic.patch delete mode 100644 desktop/toolkit/qt/files/opensuse/qdbusconnection-no-warning-output.patch delete mode 100644 desktop/toolkit/qt/files/opensuse/qfatal-noreturn.diff delete mode 100644 desktop/toolkit/qt/files/opensuse/qlocale_icu-no-warning-output.patch delete mode 100644 desktop/toolkit/qt/files/opensuse/qt-debug-timer.diff delete mode 100644 desktop/toolkit/qt/files/opensuse/qt-never-strip.diff delete mode 100644 desktop/toolkit/qt/files/opensuse/use-freetype-default.diff delete mode 100644 desktop/toolkit/qt/files/turkish.patch.bz2 delete mode 100644 desktop/toolkit/qt/pspec.xml delete mode 100644 desktop/toolkit/qt/translations.xml diff --git a/desktop/toolkit/qt/actions.py b/desktop/toolkit/qt/actions.py deleted file mode 100644 index 7218e7ad02..0000000000 --- a/desktop/toolkit/qt/actions.py +++ /dev/null @@ -1,181 +0,0 @@ -#!/usr/bin/python -# -*- coding: utf-8 -*- -# -# Licensed under the GNU General Public License, version 3. -# See the file http://www.gnu.org/licenses/gpl.txt - -from pisi.actionsapi import shelltools -from pisi.actionsapi import autotools -from pisi.actionsapi import pisitools -from pisi.actionsapi import qt4 -from pisi.actionsapi import get - -import os - -WorkDir = "qt-everywhere-opensource-src-%s" % get.srcVERSION().replace('_','-').replace('pre1', 'tp') - -qtbase = qt4.prefix -absoluteWorkDir = "%s/%s" % (get.workDIR(), WorkDir) -bindirQt4="/usr/lib/qt4/bin" - -def setup(): - pisitools.flags.add("-I/usr/include/gtk-2.0/gdk") - #make sure we don't use them - checkdeletepath="%s/qtbase/src/3rdparty" % absoluteWorkDir - for dir in ('libjpeg', 'freetype', 'libpng', 'zlib', "libtiff"): - if os.path.exists(checkdeletepath+dir): - shelltools.unlinkDir(checkdeletepath+dir) - - filteredCFLAGS = get.CFLAGS().replace("-g3", "-g") - filteredCXXFLAGS = get.CXXFLAGS().replace("-g3", "-g") - - vars = {"PISILINUX_CC" : get.CC() + (" -m32" if get.buildTYPE() == "emul32" else ""), - "PISILINUX_CXX": get.CXX() + (" -m32" if get.buildTYPE() == "emul32" else ""), - "PISILINUX_CFLAGS": filteredCFLAGS + (" -m32" if get.buildTYPE() == "emul32" else ""), - "PISILINUX_LDFLAGS": get.LDFLAGS() + (" -m32" if get.buildTYPE() == "emul32" else "")} - - for k, v in vars.items(): - pisitools.dosed("mkspecs/common/g++-base.conf", k, v) - pisitools.dosed("mkspecs/common/g++-unix.conf", k, v) - - shelltools.export("CFLAGS", filteredCFLAGS) - shelltools.export("CXXFLAGS", filteredCXXFLAGS) - #check that dosed commands without releated patches - pisitools.dosed("mkspecs/common/gcc-base-unix.conf", "\-Wl,\-rpath,") - pisitools.dosed("mkspecs/common/gcc-base.conf", "\-O2", filteredCFLAGS) - pisitools.dosed("mkspecs/common/gcc-base.conf", "^(QMAKE_LFLAGS\s+\+=)", r"\1 %s" % get.LDFLAGS()) - - if not get.buildTYPE() == "emul32": - #-no-pch makes build ccache-friendly - options = "-no-pch \ - -v \ - -stl \ - -fast \ - -qdbus \ - -qvfb \ - -glib \ - -no-sql-sqlite2 \ - -no-sql-sqlite \ - -system-sqlite \ - -system-zlib \ - -system-libpng \ - -system-libjpeg \ - -system-libtiff \ - -system-libmng \ - -plugin-sql-sqlite \ - -plugin-sql-odbc \ - -plugin-sql-psql \ - -plugin-sql-ibase \ - -I/usr/include/firebird/ \ - -I/usr/include/postgresql/server/ \ - -release \ - -no-separate-debug-info \ - -phonon \ - -no-phonon-backend \ - -webkit \ - -no-rpath \ - -openssl-linked \ - -dbus-linked \ - -xmlpatterns \ - -opensource \ - -reduce-relocations \ - -prefix %s \ - -bindir %s \ - -libdir %s \ - -docdir %s \ - -examplesdir %s \ - -demosdir %s\ - -plugindir %s \ - -translationdir %s \ - -sysconfdir %s \ - -datadir %s \ - -importdir %s \ - -headerdir %s \ - -confirm-license " % (qt4.prefix, bindirQt4, qt4.libdir, qt4.docdir, qt4.examplesdir, qt4.demosdir, qt4.plugindir, qt4.translationdir, -qt4.sysconfdir, -qt4.datadir, qt4.importdir, qt4.includedir) - else: - pisitools.dosed("mkspecs/linux-g++-64/qmake.conf", "-m64", "-m32") - shelltools.export("LDFLAGS", "-m32 %s" % get.LDFLAGS()) - options = "-no-pch \ - -v \ - -prefix /usr \ - -libdir /usr/lib32 \ - -plugindir /usr/lib32/qt/plugins \ - -importdir /usr/lib32/qt/imports \ - -datadir /usr/share/qt \ - -translationdir /usr/share/qt/translations \ - -sysconfdir /etc \ - -system-sqlite \ - -no-phonon \ - -no-phonon-backend \ - -webkit \ - -graphicssystem raster \ - -openssl-linked \ - -nomake demos \ - -nomake examples \ - -nomake docs \ - -nomake tools \ - -optimized-qmake \ - -no-rpath \ - -dbus-linked \ - -reduce-relocations \ - -no-openvg \ - -confirm-license \ - -opensource " - - autotools.rawConfigure(options) - -def build(): - shelltools.export("LD_LIBRARY_PATH", "%s/lib:%s" % (get.curDIR(), get.ENV("LD_LIBRARY_PATH"))) - autotools.make() - -def install(): - if get.buildTYPE() == "emul32": - qt4.install("INSTALL_ROOT=%s32" % get.installDIR()) - shelltools.move("%s32/usr/lib32" % get.installDIR(), "%s/usr" % get.installDIR()) - return - - qt4.install() - pisitools.dodir(qt4.bindir) - - #Remove phonon, we use KDE's phonon but we have to build Qt with Phonon support for webkit and some other stuff - pisitools.remove("%s/libphonon*" % qt4.libdir) - pisitools.removeDir("%s/phonon" % qt4.includedir) - if shelltools.isDirectory("%s/%s/phonon_backend" % (get.installDIR(), qt4.plugindir)): - pisitools.removeDir("%s/phonon_backend" % qt4.plugindir) - pisitools.remove("%s/pkgconfig/phonon*" % qt4.libdir) - # Phonon 4.5 provides libphononwidgets.so file - pisitools.remove("%s/designer/libphononwidgets.so" % qt4.plugindir) - - #Remove lost /usr/tests directory - pisitools.removeDir("usr/tests") - - # Turkish translations - shelltools.export("LD_LIBRARY_PATH", "%s%s" % (get.installDIR(), qt4.libdir)) - shelltools.system("%s%s/lrelease l10n-tr/*.ts" % (get.installDIR(), bindirQt4)) - pisitools.insinto(qt4.translationdir, "l10n-tr/*.qm") - - # Fix all occurances of WorkDir in pc files - pisitools.dosed("%s%s/pkgconfig/*.pc" % (get.installDIR(), qt4.libdir), "%s/qt-x11-opensource-src-%s" % (get.workDIR(), get.srcVERSION()), qt4.prefix) - - #I hope qtchooser will manage this issue - for bin in shelltools.ls("%s/usr/lib/qt4/bin" % get.installDIR()): - pisitools.dosym("/usr/lib/qt4/bin/%s" % bin, "/usr/bin/%s-qt4" % bin) - - mkspecPath = "%s/mkspecs" % qtbase - - for root, dirs, files in os.walk("%s%s" % (get.installDIR(), qtbase)): - # Remove unnecessary spec files.. - if root.endswith(mkspecPath): - for dir in dirs: - if not dir.startswith("linux") and dir not in ["common","qws","features","default"]: - pisitools.removeDir(os.path.join(mkspecPath,dir)) - for name in files: - if name.endswith(".prl"): - pisitools.dosed(os.path.join(root, name), "^QMAKE_PRL_BUILD_DIR.*", "") - - # Remove useless image directory, images of HTML docs are in doc/html/images - pisitools.removeDir("%s/src" % qt4.docdir) - - pisitools.dodoc("changes-*", "LGPL_EXCEPTION.txt", "LICENSE.*", "README") diff --git a/desktop/toolkit/qt/files/CVE-2014-0190.patch b/desktop/toolkit/qt/files/CVE-2014-0190.patch deleted file mode 100644 index da0b69d163..0000000000 --- a/desktop/toolkit/qt/files/CVE-2014-0190.patch +++ /dev/null @@ -1,32 +0,0 @@ -Don't crash on broken GIF images - -Broken GIF images could set invalid width and height -values inside the image, leading to Qt creating a null -QImage for it. In that case we need to abort decoding -the image and return an error. - -Initial patch by Rich Moore. - -Backport of Id82a4036f478bd6e49c402d6598f57e7e5bb5e1e from Qt 5 - -Task-number: QTBUG-38367 -Change-Id: I0680740018aaa8356d267b7af3f01fac3697312a -Security-advisory: CVE-2014-0190 - -diff -up qt-everywhere-opensource-src-4.8.6/src/gui/image/qgifhandler.cpp.QTBUG-38367 qt-everywhere-opensource-src-4.8.6/src/gui/image/qgifhandler.cpp ---- qt-everywhere-opensource-src-4.8.6/src/gui/image/qgifhandler.cpp.QTBUG-38367 2014-04-10 13:37:12.000000000 -0500 -+++ qt-everywhere-opensource-src-4.8.6/src/gui/image/qgifhandler.cpp 2014-04-24 15:58:54.515862458 -0500 -@@ -359,6 +359,13 @@ int QGIFFormat::decode(QImage *image, co - memset(bits, 0, image->byteCount()); - } - -+ // Check if the previous attempt to create the image failed. If it -+ // did then the image is broken and we should give up. -+ if (image->isNull()) { -+ state = Error; -+ return -1; -+ } -+ - disposePrevious(image); - disposed = false; - diff --git a/desktop/toolkit/qt/files/data/assistant.desktop b/desktop/toolkit/qt/files/data/assistant.desktop deleted file mode 100644 index 55a65a8d3a..0000000000 --- a/desktop/toolkit/qt/files/data/assistant.desktop +++ /dev/null @@ -1,136 +0,0 @@ -[Desktop Entry] -Encoding=UTF-8 -Exec=/usr/lib/qt4/bin/assistant -Name=Qt4 Assistant -Name[af]=Qt4 Assistent -Name[ar]=معاون Qt4 -Name[az]=Qt4 Yardımçısı -Name[bn]=কিউ-টি সহায়ক -Name[br]=Skoazeller Qt4 -Name[bs]=Qt4 Asistent -Name[ca]=Assistent Qt4 -Name[cs]=Qt4 asistent -Name[cy]=Cymhorthwr Qt4 -Name[de]=Qt4-Assistent -Name[el]=Βοηθός Qt4 -Name[eo]=Qt4-Asistilo -Name[es]=Asistente Qt4 -Name[eu]=Qt4 laguntzailea -Name[fa]=دستیار Qt4 -Name[fo]=Qt4-hjálpari -Name[fy]=Qt4-assistent -Name[hi]=क्यूटी सहायक -Name[hr]=Qt4 Asistent -Name[hsb]=Qt4 Asistent -Name[ja]=Qt4 アシスタント -Name[km]=អ្នក​ជំនួយការ Qt4 -Name[ko]=Qt4 도우미 -Name[lo]=ຄຳແນະນຳການໃ້ຊ້Qt4 -Name[lv]=Qt4 Asistents -Name[mk]=Qt4-Асистент -Name[mn]=Qt4-туслагч -Name[ms]=Pembantu Qt4 -Name[nds]=Qt4-Hölper -Name[nl]=Qt4 Assistent -Name[nso]=Mothusi wa Qt4 -Name[pa]=Qt4 ਸਹਾਇਕ -Name[pt]=Assistente do Qt4 -Name[pt_BR]=Assistente Qt4 -Name[ro]=Asistent Qt4 -Name[ru]=Помощник Qt4 -Name[rw]=Umufasha Qt4 -Name[sl]=Pomočnik za Qt4 -Name[ss]=Lisekela leQt4 -Name[ta]=Qt4 துணைவன் -Name[tg]=Дастёри Qt4 -Name[th]=คำแนะนำการใช้ Qt4 -Name[tr]=Qt4 Asistanı -Name[uk]=Qt4-асистент -Name[uz]=Qt43 ёрдамчи -Name[ven]=Qt4 Muthusi -Name[vi]=Trợ giúp Qt4 -Name[wa]=Macrea Qt4 -Name[xh]=Qt4 Umncedi -Name[zh_CN]=Qt4 助手 -Name[zh_TW]=Qt4 助理 -Name[zu]=Umsizi we-Qt4 -GenericName=Document Browser -GenericName[af]=Dokument Blaaier -GenericName[ar]=متصفح المستندات -GenericName[az]=Sənəd Səyyahı -GenericName[bg]=Преглед на документи -GenericName[bn]=নথী ব্রাউজার -GenericName[br]=Furcher Teulioù -GenericName[bs]=Preglednik QT dokumenata -GenericName[ca]=Navegador de documents -GenericName[cs]=Prohlížeč dokumentace -GenericName[cy]=Porydd Dogfen -GenericName[da]=Dokumentfremviser -GenericName[de]=Dokumentbrowser -GenericName[el]=Προβολέας εγγράφων -GenericName[eo]=Dokumentorigardilo -GenericName[es]=Navegador de documentos -GenericName[et]=Dokumentatsiooni brauser -GenericName[eu]=Dokumentu arakatzailea -GenericName[fa]=مرورگر سند -GenericName[fi]=Asiakirjaselain -GenericName[fo]=Skjalakagari -GenericName[fr]=Explorateur de documentation Qt4 -GenericName[fy]=Dokumintblêder -GenericName[ga]=Brabhsálaí Cáipéise -GenericName[gl]=Navegador de Documentos -GenericName[he]=דפדפן מסמכים -GenericName[hi]=दस्तावेज़ ब्राउज़रज़र -GenericName[hr]=Preglednik dokumenata -GenericName[hu]=Dokumentumböngésző -GenericName[id]=Peselancar Document -GenericName[is]=Skjalavafri -GenericName[it]=Visualizzatore di documenti -GenericName[ja]=ドキュメントブラウザ -GenericName[km]=កម្មវិធី​រុករក​ឯកសារ -GenericName[ko]=문서 탐색기 -GenericName[lo]=ເຄື່ອງມືເລືອກເບິ່ງແຟ້ມເອກະສານ -GenericName[lt]=Dokumentų naršyklė -GenericName[lv]=Dokumentu Pārlūks -GenericName[mk]=Прелистувач на документи -GenericName[mn]=Баримтын хөтөч -GenericName[ms]=Pelungsur Dokumen -GenericName[mt]=Browser ta' Dokumenti -GenericName[nb]=Dokumentleser -GenericName[nds]=Dokmentkieker -GenericName[nl]=Documentbrowser -GenericName[nn]=Dokumentlesar -GenericName[nso]=Seinyakisi sa Tokomane -GenericName[pa]=ਦਸਤਾਵੇਜ਼ ਝਲਕਾਰਾ -GenericName[pl]=Przeglądarka dokumentów -GenericName[pt]=Navegador de Documentos -GenericName[pt_BR]=Navegador de Documentos -GenericName[ro]=Navigator de documente -GenericName[ru]=Программа просмотра документов -GenericName[rw]=Mucukumbuzi w'Inyandiko -GenericName[se]=Dokumeantalogan -GenericName[sk]=Prehliadač dokumentácie -GenericName[sl]=Pregledovalnik dokumentov -GenericName[sr]=Прегледач докумената -GenericName[sr@Latn]=Pregledač dokumenata -GenericName[ss]=Ibrawuza yelidokhumente -GenericName[sv]=Dokumentbläddrare -GenericName[ta]=ஆவண உலாவி -GenericName[tg]=Тафсири ҳуҷҷат -GenericName[th]=เครื่องมือเลือกดูแฟ้มเอกสาร -GenericName[tr]=Belge Tarayıcısı -GenericName[tt]=İstälek Küzätüçe -GenericName[uk]=Навігатор документів -GenericName[uz]=Ҳужжат браузери -GenericName[ven]=Buronza ya manwalwa -GenericName[vi]=Trình duyệt tài liệu -GenericName[wa]=Foyteu di documints -GenericName[xh]=Umkhangeli Wencwadi Zoxwebhu -GenericName[zh_CN]=文档浏览器 -GenericName[zh_TW]=文件閱讀器 -GenericName[zu]=Umcingi Woshicilelo -X-KDE-StartupNotify=true -Icon=assistant -Terminal=false -Type=Application -Categories=Qt;Development; diff --git a/desktop/toolkit/qt/files/data/assistant.png b/desktop/toolkit/qt/files/data/assistant.png deleted file mode 100644 index bfb642dc2d1718109dd71b4cd5b1ba38d916450b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15052 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 Y1ppbD4msK+4FCWD07*qoM6N<$f=8TF?EnA( diff --git a/desktop/toolkit/qt/files/data/hi128-app-qt4-logo.png b/desktop/toolkit/qt/files/data/hi128-app-qt4-logo.png deleted file mode 100644 index b8f8263bbe8af00a6f368dfd092b28bdd3c1c20c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16119 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 - - - -]> - - - - - - - - - - - - - - diff --git a/desktop/toolkit/qt/files/data/qdbusviewer.desktop b/desktop/toolkit/qt/files/data/qdbusviewer.desktop deleted file mode 100755 index d1b05715d0..0000000000 --- a/desktop/toolkit/qt/files/data/qdbusviewer.desktop +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env xdg-open -[Desktop Entry] -Name=Qt4 QDbusViewer -GenericName=D-Bus Debugger -Comment=Debug D-Bus applications -Exec=/usr/lib/qt4/bin/qdbusviewer -Icon=qdbusviewer -Terminal=false -Type=Application -Categories=Qt;Development;Debugger; - diff --git a/desktop/toolkit/qt/files/data/qtconfig.desktop b/desktop/toolkit/qt/files/data/qtconfig.desktop deleted file mode 100755 index 3f461f8e22..0000000000 --- a/desktop/toolkit/qt/files/data/qtconfig.desktop +++ /dev/null @@ -1,9 +0,0 @@ -#!/usr/bin/env xdg-open -[Desktop Entry] -Name=Qt4 Config -Comment=Configure Qt4 behavior, styles, fonts -Exec=/usr/lib/qt4/bin/qtconfig -Icon=qt4-logo -Terminal=false -Type=Application -Categories=Qt;Settings; diff --git a/desktop/toolkit/qt/files/data/qtdemo.desktop b/desktop/toolkit/qt/files/data/qtdemo.desktop deleted file mode 100644 index 1f0b5baa0e..0000000000 --- a/desktop/toolkit/qt/files/data/qtdemo.desktop +++ /dev/null @@ -1,10 +0,0 @@ -[Desktop Entry] -Name=Qt4 Demo -Comment=Show Qt4 demos and programming examples -Comment[tr]=Qt4 demolarını ve programlama örneklerini göster -Exec=/usr/lib/qt4/bin/qtdemo -Icon=qt4-logo -Terminal=false -Encoding=UTF-8 -Type=Application -Categories=Qt;Development; diff --git a/desktop/toolkit/qt/files/fedora/qt-cupsEnumDests.patch b/desktop/toolkit/qt/files/fedora/qt-cupsEnumDests.patch deleted file mode 100644 index 7d59f22e8d..0000000000 --- a/desktop/toolkit/qt/files/fedora/qt-cupsEnumDests.patch +++ /dev/null @@ -1,238 +0,0 @@ -diff -up qt-everywhere-opensource-src-4.8.4/src/gui/painting/qcups.cpp.cupsEnumDests qt-everywhere-opensource-src-4.8.4/src/gui/painting/qcups.cpp ---- qt-everywhere-opensource-src-4.8.4/src/gui/painting/qcups.cpp.cupsEnumDests 2012-11-23 10:09:53.000000000 +0000 -+++ qt-everywhere-opensource-src-4.8.4/src/gui/painting/qcups.cpp 2013-07-03 15:30:06.232936976 +0100 -@@ -50,9 +50,19 @@ - - QT_BEGIN_NAMESPACE - -+typedef int (*CupsEnumDests)(unsigned flags, int msec, int *cancel, -+ cups_ptype_t type, cups_ptype_t mask, -+ cups_dest_cb_t cb, void *user_data); -+typedef http_t * (*CupsConnectDest)(cups_dest_t *dest, unsigned flags, -+ int msec, int *cancel, -+ char *resource, size_t resourcesize, -+ cups_dest_cb_t cb, void *user_data); -+typedef int (*CupsCopyDest)(cups_dest_t *dest, int num_dests, -+ cups_dest_t **dests); - typedef int (*CupsGetDests)(cups_dest_t **dests); - typedef void (*CupsFreeDests)(int num_dests, cups_dest_t *dests); - typedef const char* (*CupsGetPPD)(const char *printer); -+typedef const char* (*CupsGetPPD2)(http_t *http, const char *printer); - typedef int (*CupsMarkOptions)(ppd_file_t *ppd, int num_options, cups_option_t *options); - typedef ppd_file_t* (*PPDOpenFile)(const char *filename); - typedef void (*PPDMarkDefaults)(ppd_file_t *ppd); -@@ -66,12 +76,24 @@ typedef const char* (*CupsLangEncoding)( - typedef int (*CupsAddOption)(const char *name, const char *value, int num_options, cups_option_t **options); - typedef int (*CupsTempFd)(char *name, int len); - typedef int (*CupsPrintFile)(const char * name, const char * filename, const char * title, int num_options, cups_option_t * options); -+typedef int (*CupsPrintFile2)(http_t *http, const char *name, const char *filename, const char *title, int num_options, cups_option_t *options); -+ -+typedef struct -+{ -+ cups_dest_t *printers; -+ int num_printers; -+} EnumDestsContext; - - static bool cupsLoaded = false; - static int qt_cups_num_printers = 0; -+static cups_dest_t *qt_cups_printers = 0; -+static CupsEnumDests _cupsEnumDests = 0; -+static CupsConnectDest _cupsConnectDest = 0; -+static CupsCopyDest _cupsCopyDest = 0; - static CupsGetDests _cupsGetDests = 0; - static CupsFreeDests _cupsFreeDests = 0; - static CupsGetPPD _cupsGetPPD = 0; -+static CupsGetPPD2 _cupsGetPPD2 = 0; - static PPDOpenFile _ppdOpenFile = 0; - static PPDMarkDefaults _ppdMarkDefaults = 0; - static PPDClose _ppdClose = 0; -@@ -84,14 +106,35 @@ static CupsLangEncoding _cupsLangEncodin - static CupsAddOption _cupsAddOption = 0; - static CupsTempFd _cupsTempFd = 0; - static CupsPrintFile _cupsPrintFile = 0; -+static CupsPrintFile2 _cupsPrintFile2 = 0; -+ -+static int enum_dest_cb (void *user_data, unsigned flags, cups_dest_t *dest) -+{ -+ EnumDestsContext *context = (EnumDestsContext *) user_data; -+ -+ if ((flags & (CUPS_DEST_FLAGS_UNCONNECTED | -+ CUPS_DEST_FLAGS_REMOVED | -+ CUPS_DEST_FLAGS_ERROR | -+ CUPS_DEST_FLAGS_RESOLVING | -+ CUPS_DEST_FLAGS_CONNECTING | -+ CUPS_DEST_FLAGS_CANCELED)) == 0) -+ context->num_printers = _cupsCopyDest (dest, context->num_printers, -+ &context->printers); -+ -+ return 1; -+} - - static void resolveCups() - { - QLibrary cupsLib(QLatin1String("cups"), 2); - if(cupsLib.load()) { -+ _cupsEnumDests = (CupsEnumDests) cupsLib.resolve("cupsEnumDests"); -+ _cupsConnectDest = (CupsConnectDest) cupsLib.resolve("cupsConnectDest"); -+ _cupsCopyDest = (CupsCopyDest) cupsLib.resolve("cupsCopyDest"); - _cupsGetDests = (CupsGetDests) cupsLib.resolve("cupsGetDests"); - _cupsFreeDests = (CupsFreeDests) cupsLib.resolve("cupsFreeDests"); - _cupsGetPPD = (CupsGetPPD) cupsLib.resolve("cupsGetPPD"); -+ _cupsGetPPD2 = (CupsGetPPD2) cupsLib.resolve("cupsGetPPD2"); - _cupsLangGet = (CupsLangGet) cupsLib.resolve("cupsLangGet"); - _cupsLangEncoding = (CupsLangEncoding) cupsLib.resolve("cupsLangEncoding"); - _ppdOpenFile = (PPDOpenFile) cupsLib.resolve("ppdOpenFile"); -@@ -104,14 +147,27 @@ static void resolveCups() - _cupsAddOption = (CupsAddOption) cupsLib.resolve("cupsAddOption"); - _cupsTempFd = (CupsTempFd) cupsLib.resolve("cupsTempFd"); - _cupsPrintFile = (CupsPrintFile) cupsLib.resolve("cupsPrintFile"); -+ _cupsPrintFile2 = (CupsPrintFile2) cupsLib.resolve("cupsPrintFile2"); - -- if (_cupsGetDests && _cupsFreeDests) { -- cups_dest_t *printers; -+ if (_cupsEnumDests && _cupsCopyDest && -+ _cupsConnectDest && _cupsGetPPD2 && -+ _cupsPrintFile2) { -+ EnumDestsContext context; -+ context.printers = 0; -+ context.num_printers = 0; -+ _cupsEnumDests(0, -1, 0, 0, 0, -+ enum_dest_cb, &context); -+ -+ qt_cups_printers = context.printers; -+ qt_cups_num_printers = context.num_printers; -+ } else if (_cupsGetDests && _cupsFreeDests) { -+ cups_dest_t *printers; - int num_printers = _cupsGetDests(&printers); -- if (num_printers) -- _cupsFreeDests(num_printers, printers); -- qt_cups_num_printers = num_printers; -- } -+ -+ if (num_printers) -+ _cupsFreeDests(num_printers, printers); -+ qt_cups_num_printers = num_printers; -+ } - } - cupsLoaded = true; - } -@@ -134,7 +190,15 @@ QCUPSSupport::QCUPSSupport() - return; - - // Update the available printer count -- qt_cups_num_printers = prnCount = _cupsGetDests(&printers); -+ if (qt_cups_printers && _cupsCopyDest) { -+ int i; -+ for (i = 0; i < qt_cups_num_printers; ++i) { -+ prnCount = _cupsCopyDest (&qt_cups_printers[i], -+ prnCount, -+ &printers); -+ } -+ } else -+ qt_cups_num_printers = prnCount = _cupsGetDests(&printers); - - for (int i = 0; i < prnCount; ++i) { - if (printers[i].is_default) { -@@ -188,7 +252,19 @@ const ppd_file_t* QCUPSSupport::setCurre - currPPD = 0; - page_sizes = 0; - -- const char *ppdFile = _cupsGetPPD(printers[index].name); -+ const char *ppdFile = 0; -+ if (_cupsConnectDest && _cupsGetPPD2) { -+ char resource[HTTP_MAX_URI]; -+ http_t *http = _cupsConnectDest (&printers[index], 0, -1, 0, -+ resource, sizeof (resource), -+ 0, 0); -+ if (http) { -+ char *name = strrchr (resource, '/'); -+ if (name) -+ ppdFile = _cupsGetPPD2 (http, ++name); -+ } -+ } else -+ ppdFile = _cupsGetPPD(printers[index].name); - - if (!ppdFile) - return 0; -@@ -343,7 +419,29 @@ bool QCUPSSupport::printerHasPPD(const c - { - if (!isAvailable()) - return false; -- const char *ppdFile = _cupsGetPPD(printerName); -+ -+ const char *ppdFile = 0; -+ if (_cupsConnectDest && _cupsGetPPD2) { -+ int i; -+ for (i = 0; i < prnCount; ++i) -+ if (!strcmp (printers[i].name, printerName)) -+ break; -+ -+ if (i == prnCount) -+ return false; -+ -+ char resource[HTTP_MAX_URI]; -+ http_t *http = _cupsConnectDest (&printers[i], 0, -1, 0, -+ resource, sizeof (resource), -+ 0, 0); -+ if (http) { -+ char *name = strrchr (resource, '/'); -+ if (name) -+ ppdFile = _cupsGetPPD2 (http, ++name); -+ } -+ } else -+ ppdFile = _cupsGetPPD(printerName); -+ - if (ppdFile) - unlink(ppdFile); - return (ppdFile != 0); -@@ -394,6 +492,26 @@ QPair QCUPSSupport::tempFd - int QCUPSSupport::printFile(const char * printerName, const char * filename, const char * title, - int num_options, cups_option_t * options) - { -+ if (_cupsConnectDest && _cupsPrintFile2) { -+ int i; -+ for (i = 0; i < prnCount; ++i) -+ if (!strcmp (printers[i].name, printerName)) -+ break; -+ -+ if (i != prnCount) { -+ char resource[HTTP_MAX_URI]; -+ http_t *http = _cupsConnectDest (&printers[i], 0, -1, 0, -+ resource, sizeof (resource), -+ 0, 0); -+ if (http) { -+ char *name = strrchr (resource, '/'); -+ if (name) -+ return _cupsPrintFile2 (http, ++name, filename, title, -+ num_options, options); -+ } -+ } -+ } -+ - return _cupsPrintFile(printerName, filename, title, num_options, options); - } - -diff -up qt-everywhere-opensource-src-4.8.4/src/gui/painting/qcups_p.h.cupsEnumDests qt-everywhere-opensource-src-4.8.4/src/gui/painting/qcups_p.h ---- qt-everywhere-opensource-src-4.8.4/src/gui/painting/qcups_p.h.cupsEnumDests 2012-11-23 10:09:53.000000000 +0000 -+++ qt-everywhere-opensource-src-4.8.4/src/gui/painting/qcups_p.h 2013-07-03 15:27:24.733343017 +0100 -@@ -92,7 +92,7 @@ public: - - QStringList options() const; - -- static bool printerHasPPD(const char *printerName); -+ bool printerHasPPD(const char *printerName); - - QString unicodeString(const char *s); - -diff -up qt-everywhere-opensource-src-4.8.4/src/gui/painting/qprinter.cpp.cupsEnumDests qt-everywhere-opensource-src-4.8.4/src/gui/painting/qprinter.cpp ---- qt-everywhere-opensource-src-4.8.4/src/gui/painting/qprinter.cpp.cupsEnumDests 2013-07-03 15:27:24.531342277 +0100 -+++ qt-everywhere-opensource-src-4.8.4/src/gui/painting/qprinter.cpp 2013-07-03 15:27:24.733343017 +0100 -@@ -844,7 +844,7 @@ void QPrinter::setPrinterName(const QStr - if(d->use_default_engine - && d->outputFormat == QPrinter::NativeFormat) { - if (QCUPSSupport::cupsVersion() >= 10200 -- && QCUPSSupport::printerHasPPD(name.toLocal8Bit().constData())) -+ && QCUPSSupport().printerHasPPD(name.toLocal8Bit().constData())) - setOutputFormat(QPrinter::PdfFormat); - else - setOutputFormat(QPrinter::PostScriptFormat); diff --git a/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.6.2-cups.patch b/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.6.2-cups.patch deleted file mode 100644 index e0305e11b8..0000000000 --- a/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.6.2-cups.patch +++ /dev/null @@ -1,84 +0,0 @@ -diff -ur qt-everywhere-opensource-src-4.6.2/src/gui/dialogs/qprintdialog_unix.cpp qt-everywhere-opensource-src-4.6.2-cups/src/gui/dialogs/qprintdialog_unix.cpp ---- qt-everywhere-opensource-src-4.6.2/src/gui/dialogs/qprintdialog_unix.cpp 2010-02-11 16:55:22.000000000 +0100 -+++ qt-everywhere-opensource-src-4.6.2-cups/src/gui/dialogs/qprintdialog_unix.cpp 2010-02-28 04:34:16.000000000 +0100 -@@ -569,6 +569,32 @@ - void QPrintDialogPrivate::selectPrinter(QCUPSSupport *cups) - { - options.duplex->setEnabled(cups && cups->ppdOption("Duplex")); -+ -+ if (cups) { -+ const ppd_option_t* duplex = cups->ppdOption("Duplex"); -+ if (duplex) { -+ // copy default ppd duplex to qt dialog -+ if (qstrcmp(duplex->defchoice, "DuplexTumble") == 0) -+ options.duplexShort->setChecked(true); -+ else if (qstrcmp(duplex->defchoice, "DuplexNoTumble") == 0) -+ options.duplexLong->setChecked(true); -+ else -+ options.noDuplex->setChecked(true); -+ } -+ -+ if (cups->currentPPD()) { -+ // set default color -+ if (cups->currentPPD()->color_device) -+ options.color->setChecked(true); -+ else -+ options.grayscale->setChecked(true); -+ } -+ -+ // set collation -+ const ppd_option_t *collate = cups->ppdOption("Collate"); -+ if (collate) -+ options.collate->setChecked(qstrcmp(collate->defchoice, "True")==0); -+ } - } - #endif - -diff -ur qt-everywhere-opensource-src-4.6.2/src/gui/painting/qprinter.cpp qt-everywhere-opensource-src-4.6.2-cups/src/gui/painting/qprinter.cpp ---- qt-everywhere-opensource-src-4.6.2/src/gui/painting/qprinter.cpp 2010-02-11 16:55:22.000000000 +0100 -+++ qt-everywhere-opensource-src-4.6.2-cups/src/gui/painting/qprinter.cpp 2010-02-28 04:55:15.000000000 +0100 -@@ -627,6 +627,44 @@ - && d_ptr->paintEngine->type() != QPaintEngine::MacPrinter) { - setOutputFormat(QPrinter::PdfFormat); - } -+ -+#if !defined(QT_NO_CUPS) && !defined(QT_NO_LIBRARY) -+ // fill in defaults from ppd file -+ QCUPSSupport cups; -+ -+ int printernum = -1; -+ for (int i = 0; i < cups.availablePrintersCount(); i++) { -+ if (printerName().toLocal8Bit() == cups.availablePrinters()[i].name) -+ printernum = i; -+ } -+ if (printernum >= 0) { -+ cups.setCurrentPrinter(printernum); -+ -+ const ppd_option_t* duplex = cups.ppdOption("Duplex"); -+ if (duplex) { -+ // copy default ppd duplex to qt dialog -+ if (qstrcmp(duplex->defchoice, "DuplexTumble") == 0) -+ setDuplex(DuplexShortSide); -+ else if (qstrcmp(duplex->defchoice, "DuplexNoTumble") == 0) -+ setDuplex(DuplexLongSide); -+ else -+ setDuplex(DuplexNone); -+ } -+ -+ if (cups.currentPPD()) { -+ // set default color -+ if (cups.currentPPD()->color_device) -+ setColorMode(Color); -+ else -+ setColorMode(GrayScale); -+ } -+ -+ // set collation -+ const ppd_option_t *collate = cups.ppdOption("Collate"); -+ if (collate) -+ setCollateCopies(qstrcmp(collate->defchoice, "True")==0); -+ } -+#endif - } - - /*! diff --git a/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.6.3-glib_eventloop_nullcheck.patch b/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.6.3-glib_eventloop_nullcheck.patch deleted file mode 100644 index d4e5924dff..0000000000 --- a/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.6.3-glib_eventloop_nullcheck.patch +++ /dev/null @@ -1,69 +0,0 @@ -diff -ur qt-everywhere-opensource-src-4.6.3/src/gui/kernel/qguieventdispatcher_glib.cpp qt-everywhere-opensource-src-4.6.3-glib_eventloop_nullcheck/src/gui/kernel/qguieventdispatcher_glib.cpp ---- qt-everywhere-opensource-src-4.6.3/src/gui/kernel/qguieventdispatcher_glib.cpp 2010-06-02 04:03:15.000000000 +0200 -+++ qt-everywhere-opensource-src-4.6.3-glib_eventloop_nullcheck/src/gui/kernel/qguieventdispatcher_glib.cpp 2010-12-08 22:22:38.000000000 +0100 -@@ -76,7 +76,7 @@ - GX11EventSource *source = reinterpret_cast(s); - return (XEventsQueued(X11->display, QueuedAfterFlush) - || (!(source->flags & QEventLoop::ExcludeUserInputEvents) -- && !source->d->queuedUserInputEvents.isEmpty())); -+ && source->d && !source->d->queuedUserInputEvents.isEmpty())); - } - - static gboolean x11EventSourceCheck(GSource *s) -@@ -84,7 +84,7 @@ - GX11EventSource *source = reinterpret_cast(s); - return (XEventsQueued(X11->display, QueuedAfterFlush) - || (!(source->flags & QEventLoop::ExcludeUserInputEvents) -- && !source->d->queuedUserInputEvents.isEmpty())); -+ && source->d && !source->d->queuedUserInputEvents.isEmpty())); - } - - static gboolean x11EventSourceDispatch(GSource *s, GSourceFunc callback, gpointer user_data) -@@ -95,7 +95,7 @@ - do { - XEvent event; - if (!(source->flags & QEventLoop::ExcludeUserInputEvents) -- && !source->d->queuedUserInputEvents.isEmpty()) { -+ && source->d && !source->d->queuedUserInputEvents.isEmpty()) { - // process a pending user input event - event = source->d->queuedUserInputEvents.takeFirst(); - } else if (XEventsQueued(X11->display, QueuedAlready)) { -@@ -112,7 +112,8 @@ - case XKeyRelease: - case EnterNotify: - case LeaveNotify: -- source->d->queuedUserInputEvents.append(event); -+ if (source->d) -+ source->d->queuedUserInputEvents.append(event); - continue; - - case ClientMessage: -@@ -127,7 +128,8 @@ - break; - } - } -- source->d->queuedUserInputEvents.append(event); -+ if (source->d) -+ source->d->queuedUserInputEvents.append(event); - continue; - - default: -@@ -140,7 +142,7 @@ - } - - // send through event filter -- if (source->q->filterEvent(&event)) -+ if (source->q && source->q->filterEvent(&event)) - continue; - - if (qApp->x11ProcessEvent(&event) == 1) -@@ -152,7 +154,8 @@ - - out: - -- source->d->runTimersOnceWithNormalPriority(); -+ if (source->d) -+ source->d->runTimersOnceWithNormalPriority(); - - if (callback) - callback(user_data); diff --git a/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.0-QTBUG-22037.patch b/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.0-QTBUG-22037.patch deleted file mode 100644 index 4279ce2e77..0000000000 --- a/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.0-QTBUG-22037.patch +++ /dev/null @@ -1,41 +0,0 @@ -diff -up qt-everywhere-opensource-src-4.8.0/src/corelib/tools/qlist.h.QTBUG-22037 qt-everywhere-opensource-src-4.8.0/src/corelib/tools/qlist.h ---- qt-everywhere-opensource-src-4.8.0/src/corelib/tools/qlist.h.QTBUG-22037 2011-10-03 22:44:32.000000000 -0500 -+++ qt-everywhere-opensource-src-4.8.0/src/corelib/tools/qlist.h 2011-10-15 14:25:52.238694974 -0500 -@@ -769,26 +769,18 @@ Q_OUTOFLINE_TEMPLATE void QList::clea - template - Q_OUTOFLINE_TEMPLATE int QList::removeAll(const T &_t) - { -- int index = indexOf(_t); -- if (index == -1) -- return 0; -- -+ detachShared(); - const T t = _t; -- detach(); -- -- Node *i = reinterpret_cast(p.at(index)); -- Node *e = reinterpret_cast(p.end()); -- Node *n = i; -- node_destruct(i); -- while (++i != e) { -- if (i->t() == t) -- node_destruct(i); -- else -- *n++ = *i; -- } -- -- int removedCount = e - n; -- d->end -= removedCount; -+ int removedCount=0, i=0; -+ Node *n; -+ while (i < p.size()) -+ if ((n = reinterpret_cast(p.at(i)))->t() == t) { -+ node_destruct(n); -+ p.remove(i); -+ ++removedCount; -+ } else { -+ ++i; -+ } - return removedCount; - } - diff --git a/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.0-tp-multilib-optflags.patch b/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.0-tp-multilib-optflags.patch deleted file mode 100644 index 5c8b5a1dda..0000000000 --- a/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.0-tp-multilib-optflags.patch +++ /dev/null @@ -1,36 +0,0 @@ -diff -up qt-everywhere-opensource-src-4.8.0-tp/mkspecs/linux-g++-32/qmake.conf.multilib qt-everywhere-opensource-src-4.8.0-tp/mkspecs/linux-g++-32/qmake.conf ---- qt-everywhere-opensource-src-4.8.0-tp/mkspecs/linux-g++-32/qmake.conf.multilib 2011-05-23 12:26:21.000000000 +0200 -+++ qt-everywhere-opensource-src-4.8.0-tp/mkspecs/linux-g++-32/qmake.conf 2011-05-25 13:39:38.789054074 +0200 -@@ -12,6 +12,8 @@ QMAKE_INCREMENTAL_STYLE = sublib - QMAKE_CFLAGS = -m32 - QMAKE_LFLAGS = -m32 - -+QMAKE_CFLAGS_RELEASE += -O2 -+ - include(../common/linux.conf) - include(../common/gcc-base-unix.conf) - include(../common/g++-unix.conf) -diff -up qt-everywhere-opensource-src-4.8.0-tp/mkspecs/linux-g++-64/qmake.conf.multilib qt-everywhere-opensource-src-4.8.0-tp/mkspecs/linux-g++-64/qmake.conf ---- qt-everywhere-opensource-src-4.8.0-tp/mkspecs/linux-g++-64/qmake.conf.multilib 2011-05-23 12:26:21.000000000 +0200 -+++ qt-everywhere-opensource-src-4.8.0-tp/mkspecs/linux-g++-64/qmake.conf 2011-05-25 13:39:47.460747770 +0200 -@@ -15,6 +15,8 @@ QMAKE_INCREMENTAL_STYLE = sublib - QMAKE_CFLAGS = -m64 - QMAKE_LFLAGS = -m64 - -+QMAKE_CFLAGS_RELEASE += -O2 -+ - include(../common/linux.conf) - include(../common/gcc-base-unix.conf) - include(../common/g++-unix.conf) -diff -up qt-everywhere-opensource-src-4.8.0-tp/mkspecs/linux-g++/qmake.conf.multilib qt-everywhere-opensource-src-4.8.0-tp/mkspecs/linux-g++/qmake.conf ---- qt-everywhere-opensource-src-4.8.0-tp/mkspecs/linux-g++/qmake.conf.multilib 2011-05-23 12:26:21.000000000 +0200 -+++ qt-everywhere-opensource-src-4.8.0-tp/mkspecs/linux-g++/qmake.conf 2011-05-25 13:39:26.630088814 +0200 -@@ -9,6 +9,8 @@ CONFIG += qt warn_on release increment - QT += core gui - QMAKE_INCREMENTAL_STYLE = sublib - -+QMAKE_CFLAGS_RELEASE += -O2 -+ - include(../common/linux.conf) - include(../common/gcc-base-unix.conf) - include(../common/g++-unix.conf) diff --git a/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.1-qt3support_debuginfo.patch b/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.1-qt3support_debuginfo.patch deleted file mode 100644 index 7458314672..0000000000 --- a/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.1-qt3support_debuginfo.patch +++ /dev/null @@ -1,10 +0,0 @@ -diff -up qt-everywhere-opensource-src-4.8.1/src/qt3support/qt3support.pro.debuginfo qt-everywhere-opensource-src-4.8.1/src/qt3support/qt3support.pro ---- qt-everywhere-opensource-src-4.8.1/src/qt3support/qt3support.pro.debuginfo 2012-03-14 09:01:17.000000000 -0500 -+++ qt-everywhere-opensource-src-4.8.1/src/qt3support/qt3support.pro 2012-05-11 11:55:37.780070386 -0500 -@@ -34,6 +34,3 @@ MOCDIR = .moc - - *-g++*: QMAKE_CXXFLAGS += -fno-strict-aliasing - --CONFIG -= separate_debug_info --CONFIG += no_debug_info -- diff --git a/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.3-no_Werror.patch b/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.3-no_Werror.patch deleted file mode 100644 index 86dcc288d5..0000000000 --- a/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.3-no_Werror.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff -up qt-everywhere-opensource-src-4.8.3/src/3rdparty/webkit/Source/WebKit.pri.no_Werror qt-everywhere-opensource-src-4.8.3/src/3rdparty/webkit/Source/WebKit.pri ---- qt-everywhere-opensource-src-4.8.3/src/3rdparty/webkit/Source/WebKit.pri.no_Werror 2012-09-06 02:33:50.000000000 -0500 -+++ qt-everywhere-opensource-src-4.8.3/src/3rdparty/webkit/Source/WebKit.pri 2012-09-11 09:03:19.152159783 -0500 -@@ -102,7 +102,7 @@ CONFIG -= warn_on - - # Treat warnings as errors on x86/Linux/GCC - linux-g++* { -- !CONFIG(standalone_package):if(isEqual(QT_ARCH,x86_64)|isEqual(QT_ARCH,i386)): QMAKE_CXXFLAGS += -Werror -+ #!CONFIG(standalone_package):if(isEqual(QT_ARCH,x86_64)|isEqual(QT_ARCH,i386)): QMAKE_CXXFLAGS += -Werror - - greaterThan(QT_GCC_MAJOR_VERSION, 3):greaterThan(QT_GCC_MINOR_VERSION, 5) { - if (!contains(QMAKE_CXXFLAGS, -std=c++0x) && !contains(QMAKE_CXXFLAGS, -std=gnu++0x)) { diff --git a/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.4-qmake_pkgconfig_requires_private.patch b/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.4-qmake_pkgconfig_requires_private.patch deleted file mode 100644 index 0494c81f06..0000000000 --- a/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.4-qmake_pkgconfig_requires_private.patch +++ /dev/null @@ -1,16 +0,0 @@ -diff -up qt-everywhere-opensource-src-4.8.4/qmake/generators/makefile.cpp.qmake_pkgconfig_requires_private qt-everywhere-opensource-src-4.8.4/qmake/generators/makefile.cpp ---- qt-everywhere-opensource-src-4.8.4/qmake/generators/makefile.cpp.qmake_pkgconfig_requires_private 2012-11-23 04:11:21.000000000 -0600 -+++ qt-everywhere-opensource-src-4.8.4/qmake/generators/makefile.cpp 2013-02-11 07:36:36.192779528 -0600 -@@ -3293,6 +3293,12 @@ MakefileGenerator::writePkgConfigFile() - t << "Requires: " << requires << endl; - } - -+ // requires.private -+ const QString requires_private = project->values("QMAKE_PKGCONFIG_REQUIRES_PRIVATE").join(" "); -+ if (!requires_private.isEmpty()) { -+ t << "Requires.private: " << requires_private << endl; -+ } -+ - t << endl; - } - diff --git a/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.5-QTBUG-14467.patch b/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.5-QTBUG-14467.patch deleted file mode 100644 index 81d74ff4d5..0000000000 --- a/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.5-QTBUG-14467.patch +++ /dev/null @@ -1,24 +0,0 @@ -diff -up qt-everywhere-opensource-src-4.8.5/mkspecs/features/qt_functions.prf.QTBUG-14467 qt-everywhere-opensource-src-4.8.5/mkspecs/features/qt_functions.prf ---- qt-everywhere-opensource-src-4.8.5/mkspecs/features/qt_functions.prf.QTBUG-14467 2013-05-30 16:19:17.000000000 -0500 -+++ qt-everywhere-opensource-src-4.8.5/mkspecs/features/qt_functions.prf 2013-06-09 11:53:45.709773603 -0500 -@@ -72,7 +72,7 @@ defineTest(qtAddLibrary) { - } - isEmpty(LINKAGE) { - if(!debug_and_release|build_pass):CONFIG(debug, debug|release) { -- win32:LINKAGE = -l$${LIB_NAME}$${QT_LIBINFIX}d -+ win32:LINKAGE = -l$${LIB_NAME}d$${QT_LIBINFIX} - mac:LINKAGE = -l$${LIB_NAME}$${QT_LIBINFIX}_debug - } - isEmpty(LINKAGE):LINKAGE = -l$${LIB_NAME}$${QT_LIBINFIX} -diff -up qt-everywhere-opensource-src-4.8.5/mkspecs/features/win32/windows.prf.QTBUG-14467 qt-everywhere-opensource-src-4.8.5/mkspecs/features/win32/windows.prf ---- qt-everywhere-opensource-src-4.8.5/mkspecs/features/win32/windows.prf.QTBUG-14467 2013-05-30 16:19:17.000000000 -0500 -+++ qt-everywhere-opensource-src-4.8.5/mkspecs/features/win32/windows.prf 2013-06-09 11:53:45.710773593 -0500 -@@ -6,7 +6,7 @@ contains(TEMPLATE, ".*app"){ - - qt:for(entryLib, $$list($$unique(QMAKE_LIBS_QT_ENTRY))) { - isEqual(entryLib, -lqtmain): { -- CONFIG(debug, debug|release): QMAKE_LIBS += $${entryLib}$${QT_LIBINFIX}d -+ CONFIG(debug, debug|release): QMAKE_LIBS += $${entryLib}d$${QT_LIBINFIX} - else: QMAKE_LIBS += $${entryLib}$${QT_LIBINFIX} - } else { - QMAKE_LIBS += $${entryLib} diff --git a/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.5-QTBUG-21900.patch b/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.5-QTBUG-21900.patch deleted file mode 100644 index 018872f6d4..0000000000 --- a/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.5-QTBUG-21900.patch +++ /dev/null @@ -1,84 +0,0 @@ -diff -up qt-everywhere-opensource-src-4.8.5/src/gui/kernel/qapplication_x11.cpp.QTBUG-21900 qt-everywhere-opensource-src-4.8.5/src/gui/kernel/qapplication_x11.cpp ---- qt-everywhere-opensource-src-4.8.5/src/gui/kernel/qapplication_x11.cpp.QTBUG-21900 2013-05-30 16:18:05.000000000 -0500 -+++ qt-everywhere-opensource-src-4.8.5/src/gui/kernel/qapplication_x11.cpp 2013-06-09 11:53:45.891771748 -0500 -@@ -818,6 +818,27 @@ static Bool qt_sync_request_scanner(Disp - #endif - #endif // QT_NO_XSYNC - -+struct qt_configure_event_data -+{ -+ WId window; -+ WId parent; -+}; -+ -+static Bool qt_configure_event_scanner(Display*, XEvent *event, XPointer arg) -+{ -+ qt_configure_event_data *data = -+ reinterpret_cast(arg); -+ if (event->type == ConfigureNotify && -+ event->xconfigure.window == data->window) { -+ return true; -+ } else if (event->type == ReparentNotify && -+ event->xreparent.window == data->window) { -+ data->parent = event->xreparent.parent; -+ } -+ -+ return false; -+} -+ - static void qt_x11_create_intern_atoms() - { - const char *names[QX11Data::NAtoms]; -@@ -5302,8 +5323,11 @@ bool QETWidget::translateConfigEvent(con - if (d->extra->compress_events) { - // ConfigureNotify compression for faster opaque resizing - XEvent otherEvent; -- while (XCheckTypedWindowEvent(X11->display, internalWinId(), ConfigureNotify, -- &otherEvent)) { -+ qt_configure_event_data configureData; -+ configureData.window = internalWinId(); -+ configureData.parent = d->topData()->parentWinId; -+ while (XCheckIfEvent(X11->display, &otherEvent, -+ &qt_configure_event_scanner, (XPointer)&configureData)) { - if (qt_x11EventFilter(&otherEvent)) - continue; - -@@ -5316,13 +5340,19 @@ bool QETWidget::translateConfigEvent(con - newSize.setWidth(otherEvent.xconfigure.width); - newSize.setHeight(otherEvent.xconfigure.height); - -+ trust = isVisible() -+ && (configureData.parent == XNone || -+ configureData.parent == QX11Info::appRootWindow()); -+ - if (otherEvent.xconfigure.send_event || trust) { - newCPos.rx() = otherEvent.xconfigure.x + - otherEvent.xconfigure.border_width; - newCPos.ry() = otherEvent.xconfigure.y + - otherEvent.xconfigure.border_width; - isCPos = true; -- } -+ } else { -+ isCPos = false; -+ } - } - #ifndef QT_NO_XSYNC - qt_sync_request_event_data sync_event; -@@ -5335,9 +5365,14 @@ bool QETWidget::translateConfigEvent(con - } - - if (!isCPos) { -- // we didn't get an updated position of the toplevel. -- // either we haven't moved or there is a bug in the window manager. -- // anyway, let's query the position to be certain. -+ // If the last configure event didn't have a trustable position, -+ // it's necessary to query, see ICCCM 4.24: -+ // -+ // Any real ConfigureNotify event on a top-level window implies -+ // that the window’s position on the root may have changed, even -+ // though the event reports that the window’s position in its -+ // parent is unchanged because the window may have been reparented. -+ - int x, y; - Window child; - XTranslateCoordinates(X11->display, internalWinId(), diff --git a/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.5-QTBUG-35459.patch b/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.5-QTBUG-35459.patch deleted file mode 100644 index dede8324d5..0000000000 --- a/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.5-QTBUG-35459.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff -ur qt-everywhere-opensource-src-4.8.5-CVE-2013-4549/src/xml/sax/qxml.cpp qt-everywhere-opensource-src-4.8.5-QTBUG-35459/src/xml/sax/qxml.cpp ---- qt-everywhere-opensource-src-4.8.5-CVE-2013-4549/src/xml/sax/qxml.cpp 2013-12-05 19:23:33.000000000 +0100 -+++ qt-everywhere-opensource-src-4.8.5-QTBUG-35459/src/xml/sax/qxml.cpp 2014-01-13 20:13:59.000000000 +0100 -@@ -428,7 +428,7 @@ - // for the DTD currently being parsed. - static const int dtdRecursionLimit = 2; - // The maximum amount of characters an entity value may contain, after expansion. -- static const int entityCharacterLimit = 1024; -+ static const int entityCharacterLimit = 65536; - - const QString &string(); - void stringClear(); diff --git a/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.5-QTBUG-4862.patch b/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.5-QTBUG-4862.patch deleted file mode 100644 index ee1d19136a..0000000000 --- a/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.5-QTBUG-4862.patch +++ /dev/null @@ -1,29 +0,0 @@ -diff -up qt-everywhere-opensource-src-4.8.5/src/corelib/io/qfilesystemengine_unix.cpp.QTBUG-4862 qt-everywhere-opensource-src-4.8.5/src/corelib/io/qfilesystemengine_unix.cpp ---- qt-everywhere-opensource-src-4.8.5/src/corelib/io/qfilesystemengine_unix.cpp.QTBUG-4862 2013-06-09 12:02:50.323221694 -0500 -+++ qt-everywhere-opensource-src-4.8.5/src/corelib/io/qfilesystemengine_unix.cpp 2013-06-09 12:38:53.140804742 -0500 -@@ -624,6 +624,25 @@ QString QFileSystemEngine::homePath() - { - QString home = QFile::decodeName(qgetenv("HOME")); - if (home.isEmpty()) -+ { -+#if !defined(QT_NO_THREAD) && defined(_POSIX_THREAD_SAFE_FUNCTIONS) && !defined(Q_OS_OPENBSD) -+ int size_max = sysconf(_SC_GETPW_R_SIZE_MAX); -+ if (size_max == -1) -+ size_max = 1024; -+ QVarLengthArray buf(size_max); -+#endif -+ struct passwd *pw = 0; -+ uid_t user_id = getuid(); -+ pw = getpwuid(user_id); -+#if !defined(QT_NO_THREAD) && defined(_POSIX_THREAD_SAFE_FUNCTIONS) && !defined(Q_OS_OPENBSD) -+ struct passwd entry; -+ getpwuid_r(user_id, &entry, buf.data(), buf.size(), &pw); -+#else -+ pw = getpwuid(user_id); -+#endif -+ home = QFile::decodeName(QByteArray(pw->pw_dir)); -+ } -+ if (home.isEmpty()) - home = rootPath(); - return QDir::cleanPath(home); - } diff --git a/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.5-mysql_config.patch b/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.5-mysql_config.patch deleted file mode 100644 index fc0ee7670b..0000000000 --- a/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.5-mysql_config.patch +++ /dev/null @@ -1,19 +0,0 @@ -diff -up qt-everywhere-opensource-src-4.8.5/configure.mysql_config qt-everywhere-opensource-src-4.8.5/configure ---- qt-everywhere-opensource-src-4.8.5/configure.mysql_config 2013-06-07 00:16:41.000000000 -0500 -+++ qt-everywhere-opensource-src-4.8.5/configure 2014-03-07 10:09:27.412071146 -0600 -@@ -5480,8 +5480,15 @@ for _SQLDR in $CFG_SQL_AVAILABLE; do - [ -z "$CFG_MYSQL_CONFIG" ] && CFG_MYSQL_CONFIG=`"$WHICH" mysql_config` - if [ -x "$CFG_MYSQL_CONFIG" ]; then - QT_CFLAGS_MYSQL=`$CFG_MYSQL_CONFIG --include 2>/dev/null` -+ $CFG_MYSQL_CONFIG --variable=pkglibdir &>/dev/null && \ -+ QT_MYSQL_PKGLIBDIR=`$CFG_MYSQL_CONFIG --variable=pkglibdir 2>/dev/null` -+ if [ -n "$QT_MYSQL_PKGLIBDIR" ]; then -+ QT_LFLAGS_MYSQL_R="-L$QT_MYSQL_PKGLIBDIR -lmysqlclient_r" -+ QT_LFLAGS_MYSQL="-L$QT_MYSQL_PKGLIBDIR -lmysqlclient" -+ else - QT_LFLAGS_MYSQL_R=`$CFG_MYSQL_CONFIG --libs_r 2>/dev/null` - QT_LFLAGS_MYSQL=`$CFG_MYSQL_CONFIG --libs 2>/dev/null` -+ fi - QT_MYSQL_VERSION=`$CFG_MYSQL_CONFIG --version 2>/dev/null` - QT_MYSQL_VERSION_MAJOR=`echo $QT_MYSQL_VERSION | cut -d . -f 1` - fi diff --git a/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.5-qgtkstyle_disable_gtk_theme_check.patch b/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.5-qgtkstyle_disable_gtk_theme_check.patch deleted file mode 100644 index 9a9f773537..0000000000 --- a/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.5-qgtkstyle_disable_gtk_theme_check.patch +++ /dev/null @@ -1,22 +0,0 @@ -diff -up qt-everywhere-opensource-src-4.8.5/src/gui/styles/qgtkstyle_p.cpp.qgtkstyle_disable_gtk_theme_check qt-everywhere-opensource-src-4.8.5/src/gui/styles/qgtkstyle_p.cpp ---- qt-everywhere-opensource-src-4.8.5/src/gui/styles/qgtkstyle_p.cpp.qgtkstyle_disable_gtk_theme_check 2013-06-09 16:28:22.938840346 -0500 -+++ qt-everywhere-opensource-src-4.8.5/src/gui/styles/qgtkstyle_p.cpp 2013-06-09 17:03:01.781125479 -0500 -@@ -503,18 +503,6 @@ void QGtkStylePrivate::initGtkWidgets() - return; - } - -- static QString themeName; -- if (!gtkWidgetMap()->contains("GtkWindow") && themeName.isEmpty()) { -- themeName = getThemeName(); -- -- if (themeName == QLS("Qt") || themeName == QLS("Qt4")) { -- // Due to namespace conflicts with Qt3 and obvious recursion with Qt4, -- // we cannot support the GTK_Qt Gtk engine -- qWarning("QGtkStyle cannot be used together with the GTK_Qt engine."); -- return; -- } -- } -- - if (QGtkStylePrivate::gtk_init) { - // Gtk will set the Qt error handler so we have to reset it afterwards - x11ErrorHandler qt_x_errhandler = XSetErrorHandler(0); diff --git a/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.5-qt_plugin_path.patch b/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.5-qt_plugin_path.patch deleted file mode 100644 index 6a87783e3a..0000000000 --- a/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.5-qt_plugin_path.patch +++ /dev/null @@ -1,19 +0,0 @@ -diff -up qt-everywhere-opensource-src-4.8.5/src/corelib/kernel/qcoreapplication.cpp.qt_plugin_path qt-everywhere-opensource-src-4.8.5/src/corelib/kernel/qcoreapplication.cpp ---- qt-everywhere-opensource-src-4.8.5/src/corelib/kernel/qcoreapplication.cpp.qt_plugin_path 2013-06-07 00:16:52.000000000 -0500 -+++ qt-everywhere-opensource-src-4.8.5/src/corelib/kernel/qcoreapplication.cpp 2013-06-21 07:14:10.045039936 -0500 -@@ -2511,6 +2511,15 @@ QStringList QCoreApplication::libraryPat - if (!app_libpaths->contains(installPathPlugins)) - app_libpaths->append(installPathPlugins); - } -+ -+ // hack in support for kde4 plugin paths -- Rex -+ QString kde4PathPlugins = QLibraryInfo::location(QLibraryInfo::LibrariesPath) + QLatin1String("/kde4/plugins"); -+ if (QFile::exists(kde4PathPlugins)) { -+ // Make sure we convert from backslashes to slashes. -+ //kde4PathPlugins = QDir(kde4PathPlugins).canonicalPath(); -+ if (!app_libpaths->contains(kde4PathPlugins)) -+ app_libpaths->append(kde4PathPlugins); -+ } - #endif - - // If QCoreApplication is not yet instantiated, diff --git a/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.5-tds_no_strict_aliasing.patch b/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.5-tds_no_strict_aliasing.patch deleted file mode 100644 index 2deeb51bbf..0000000000 --- a/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.5-tds_no_strict_aliasing.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff -up qt-everywhere-opensource-src-4.8.5/src/sql/drivers/tds/qsql_tds.pri.tds_no_strict_aliasing qt-everywhere-opensource-src-4.8.5/src/sql/drivers/tds/qsql_tds.pri ---- qt-everywhere-opensource-src-4.8.5/src/sql/drivers/tds/qsql_tds.pri.tds_no_strict_aliasing 2013-06-09 11:57:49.198291245 -0500 -+++ qt-everywhere-opensource-src-4.8.5/src/sql/drivers/tds/qsql_tds.pri 2013-06-09 12:01:24.120100371 -0500 -@@ -1,6 +1,8 @@ - HEADERS += $$PWD/qsql_tds.h - SOURCES += $$PWD/qsql_tds.cpp - -+*-g++*: QMAKE_CXXFLAGS += -fno-strict-aliasing -+ - unix|win32-g++*: { - LIBS += $$QT_LFLAGS_TDS - !contains(LIBS, .*sybdb.*):LIBS += -lsybdb diff --git a/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.5-uic_multilib.patch b/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.5-uic_multilib.patch deleted file mode 100644 index d04d1be5af..0000000000 --- a/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.5-uic_multilib.patch +++ /dev/null @@ -1,28 +0,0 @@ -diff -up qt-everywhere-opensource-src-4.8.5/src/tools/moc/moc.cpp.uic_multilib qt-everywhere-opensource-src-4.8.5/src/tools/moc/moc.cpp -diff -up qt-everywhere-opensource-src-4.8.5/src/tools/uic3/embed.cpp.uic_multilib qt-everywhere-opensource-src-4.8.5/src/tools/uic3/embed.cpp ---- qt-everywhere-opensource-src-4.8.5/src/tools/uic3/embed.cpp.uic_multilib 2013-05-30 16:18:04.000000000 -0500 -+++ qt-everywhere-opensource-src-4.8.5/src/tools/uic3/embed.cpp 2013-06-09 11:50:25.597813974 -0500 -@@ -152,8 +152,7 @@ void Ui3Reader::embed(const char *projec - for ( it = images.begin(); it != images.end(); ++it ) - out << "** " << *it << "\n"; - out << "**\n"; -- out << "** Created: " << QDateTime::currentDateTime().toString() << "\n"; -- out << "** by: The User Interface Compiler for Qt version " << QT_VERSION_STR << "\n"; -+ out << "** Created: by: The User Interface Compiler for Qt version " << QT_VERSION_STR << "\n"; - out << "**\n"; - out << "** WARNING! All changes made in this file will be lost!\n"; - out << "****************************************************************************/\n"; -diff -up qt-everywhere-opensource-src-4.8.5/src/tools/uic3/uic.cpp.uic_multilib qt-everywhere-opensource-src-4.8.5/src/tools/uic3/uic.cpp ---- qt-everywhere-opensource-src-4.8.5/src/tools/uic3/uic.cpp.uic_multilib 2013-05-30 16:18:04.000000000 -0500 -+++ qt-everywhere-opensource-src-4.8.5/src/tools/uic3/uic.cpp 2013-06-09 11:51:28.310174526 -0500 -@@ -146,8 +146,7 @@ void Uic::writeCopyrightHeader(DomUI *ui - out << "/********************************************************************************\n"; - out << "** Form generated from reading UI file '" << QFileInfo(opt.inputFile).fileName() << "'\n"; - out << "**\n"; -- out << "** Created: " << QDateTime::currentDateTime().toString() << "\n"; -- out << "** " << QString::fromLatin1("by: Qt User Interface Compiler version %1\n").arg(QLatin1String(QT_VERSION_STR)); -+ out << "** Created by: " << QString::fromLatin1("Qt User Interface Compiler version %1\n").arg(QLatin1String(QT_VERSION_STR)); - out << "**\n"; - out << "** WARNING! All changes made in this file will be lost when recompiling UI file!\n"; - out << "********************************************************************************/\n\n"; -diff -up qt-everywhere-opensource-src-4.8.5/src/tools/uic/uic.cpp.uic_multilib qt-everywhere-opensource-src-4.8.5/src/tools/uic/uic.cpp diff --git a/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.5-webcore_debuginfo.patch b/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.5-webcore_debuginfo.patch deleted file mode 100644 index 1ea8af2b0e..0000000000 --- a/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.5-webcore_debuginfo.patch +++ /dev/null @@ -1,16 +0,0 @@ -diff -up qt-everywhere-opensource-src-4.8.5/src/3rdparty/webkit/Source/WebCore/WebCore.pri.webkit_debuginfo qt-everywhere-opensource-src-4.8.5/src/3rdparty/webkit/Source/WebCore/WebCore.pri ---- qt-everywhere-opensource-src-4.8.5/src/3rdparty/webkit/Source/WebCore/WebCore.pri.webkit_debuginfo 2013-06-07 00:16:55.000000000 -0500 -+++ qt-everywhere-opensource-src-4.8.5/src/3rdparty/webkit/Source/WebCore/WebCore.pri 2013-07-11 14:04:19.937056249 -0500 -@@ -5,6 +5,12 @@ include(features.pri) - - # Uncomment this to enable Texture Mapper. - # CONFIG += texmap -+# -+equals(QT_ARCH, s390)|equals(QT_ARCH, arm)|equals(QT_ARCH, mips)|equals(QT_ARCH, i386)|equals(QT_ARCH, i686)|equals(QT_ARCH, x86_64)|equals(QT_ARCH, powerpc64)|equals(QT_ARCH, powerpc) { -+ message("WebCore workaround for QtWebkit: do not build with -g, but with -g1") -+ QMAKE_CXXFLAGS_RELEASE -= -g -+ QMAKE_CXXFLAGS_RELEASE += -g1 -+} - - QT *= network - diff --git a/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.6-QTBUG-34614.patch b/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.6-QTBUG-34614.patch deleted file mode 100644 index 8b0468bb66..0000000000 --- a/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.6-QTBUG-34614.patch +++ /dev/null @@ -1,95 +0,0 @@ ---- src/corelib/kernel/qeventdispatcher_glib.cpp.sav 2014-03-28 15:26:37.000000000 +0100 -+++ qt-everywhere-opensource-src-4.8.6/src/corelib/kernel/qeventdispatcher_glib.cpp 2014-04-24 09:44:09.358659204 +0200 -@@ -255,22 +255,30 @@ struct GPostEventSource - GSource source; - QAtomicInt serialNumber; - int lastSerialNumber; -+ QEventLoop::ProcessEventsFlags processEventsFlags; - QEventDispatcherGlibPrivate *d; - }; - - static gboolean postEventSourcePrepare(GSource *s, gint *timeout) - { -+ GPostEventSource *source = reinterpret_cast(s); - QThreadData *data = QThreadData::current(); - if (!data) - return false; - -+ QEventLoop::ProcessEventsFlags excludeAllFlags -+ = QEventLoop::ExcludeUserInputEvents -+ | QEventLoop::ExcludeSocketNotifiers -+ | QEventLoop::X11ExcludeTimers; -+ if ((source->processEventsFlags & excludeAllFlags) == excludeAllFlags) -+ return false; -+ - gint dummy; - if (!timeout) - timeout = &dummy; - const bool canWait = data->canWaitLocked(); - *timeout = canWait ? -1 : 0; - -- GPostEventSource *source = reinterpret_cast(s); - return (!canWait - || (source->serialNumber != source->lastSerialNumber)); - } -@@ -284,8 +292,14 @@ static gboolean postEventSourceDispatch( - { - GPostEventSource *source = reinterpret_cast(s); - source->lastSerialNumber = source->serialNumber; -- QCoreApplication::sendPostedEvents(); -- source->d->runTimersOnceWithNormalPriority(); -+ QEventLoop::ProcessEventsFlags excludeAllFlags -+ = QEventLoop::ExcludeUserInputEvents -+ | QEventLoop::ExcludeSocketNotifiers -+ | QEventLoop::X11ExcludeTimers; -+ if ((source->processEventsFlags & excludeAllFlags) != excludeAllFlags) { -+ QCoreApplication::sendPostedEvents(); -+ source->d->runTimersOnceWithNormalPriority(); -+ } - return true; // i dunno, george... - } - -@@ -329,6 +343,7 @@ QEventDispatcherGlibPrivate::QEventDispa - postEventSource = reinterpret_cast(g_source_new(&postEventSourceFuncs, - sizeof(GPostEventSource))); - postEventSource->serialNumber = 1; -+ postEventSource->processEventsFlags = QEventLoop::AllEvents; - postEventSource->d = this; - g_source_set_can_recurse(&postEventSource->source, true); - g_source_attach(&postEventSource->source, mainContext); -@@ -423,6 +438,7 @@ bool QEventDispatcherGlib::processEvents - - // tell postEventSourcePrepare() and timerSource about any new flags - QEventLoop::ProcessEventsFlags savedFlags = d->timerSource->processEventsFlags; -+ d->postEventSource->processEventsFlags = flags; - d->timerSource->processEventsFlags = flags; - d->socketNotifierSource->processEventsFlags = flags; - -@@ -435,6 +451,7 @@ bool QEventDispatcherGlib::processEvents - while (!result && canWait) - result = g_main_context_iteration(d->mainContext, canWait); - -+ d->postEventSource->processEventsFlags = savedFlags; - d->timerSource->processEventsFlags = savedFlags; - d->socketNotifierSource->processEventsFlags = savedFlags; - ---- src/corelib/kernel/qeventdispatcher_unix.cpp.sav 2013-06-07 07:16:52.000000000 +0200 -+++ qt-everywhere-opensource-src-4.8.6/src/corelib/kernel/qeventdispatcher_unix.cpp 2014-04-24 09:43:06.927589535 +0200 -@@ -905,7 +905,15 @@ bool QEventDispatcherUNIX::processEvents - - // we are awake, broadcast it - emit awake(); -- QCoreApplicationPrivate::sendPostedEvents(0, 0, d->threadData); -+ -+ QEventLoop::ProcessEventsFlags excludeAllFlags -+ = QEventLoop::ExcludeUserInputEvents -+ | QEventLoop::ExcludeSocketNotifiers -+ | QEventLoop::X11ExcludeTimers; -+ if ((flags & excludeAllFlags) == excludeAllFlags) -+ return false; -+ if(( flags & excludeAllFlags ) != excludeAllFlags ) -+ QCoreApplicationPrivate::sendPostedEvents(0, 0, d->threadData); - - int nevents = 0; - const bool canWait = (d->threadData->canWaitLocked() - diff --git a/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.6-QTBUG-37380.patch b/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.6-QTBUG-37380.patch deleted file mode 100644 index 296a5ada69..0000000000 --- a/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.6-QTBUG-37380.patch +++ /dev/null @@ -1,64 +0,0 @@ -Author: Jan-Marek Glogowski -Date: Thu Mar 06 18:44:43 2014 +0100 - - Honor QEventLoop::ExcludeSocketNotifiers in glib event loop. - - Implements QEventLoop::ExcludeSocketNotifiers in the same way - QEventLoop::X11ExcludeTimers is already implemented for the glib - event loop. - ---- qt4-x11-4.8.1.orig/src/corelib/kernel/qeventdispatcher_glib.cpp -+++ qt4-x11-4.8.1/src/corelib/kernel/qeventdispatcher_glib.cpp -@@ -65,6 +65,7 @@ struct GPollFDWithQSocketNotifier - struct GSocketNotifierSource - { - GSource source; -+ QEventLoop::ProcessEventsFlags processEventsFlags; - QList pollfds; - }; - -@@ -80,6 +81,9 @@ static gboolean socketNotifierSourceChec - GSocketNotifierSource *src = reinterpret_cast(source); - - bool pending = false; -+ if (src->processEventsFlags & QEventLoop::ExcludeSocketNotifiers) -+ return pending; -+ - for (int i = 0; !pending && i < src->pollfds.count(); ++i) { - GPollFDWithQSocketNotifier *p = src->pollfds.at(i); - -@@ -103,6 +107,9 @@ static gboolean socketNotifierSourceDisp - QEvent event(QEvent::SockAct); - - GSocketNotifierSource *src = reinterpret_cast(source); -+ if (src->processEventsFlags & QEventLoop::ExcludeSocketNotifiers) -+ return true; -+ - for (int i = 0; i < src->pollfds.count(); ++i) { - GPollFDWithQSocketNotifier *p = src->pollfds.at(i); - -@@ -330,6 +337,7 @@ QEventDispatcherGlibPrivate::QEventDispa - reinterpret_cast(g_source_new(&socketNotifierSourceFuncs, - sizeof(GSocketNotifierSource))); - (void) new (&socketNotifierSource->pollfds) QList(); -+ socketNotifierSource->processEventsFlags = QEventLoop::AllEvents; - g_source_set_can_recurse(&socketNotifierSource->source, true); - g_source_attach(&socketNotifierSource->source, mainContext); - -@@ -415,6 +423,7 @@ bool QEventDispatcherGlib::processEvents - // tell postEventSourcePrepare() and timerSource about any new flags - QEventLoop::ProcessEventsFlags savedFlags = d->timerSource->processEventsFlags; - d->timerSource->processEventsFlags = flags; -+ d->socketNotifierSource->processEventsFlags = flags; - - if (!(flags & QEventLoop::EventLoopExec)) { - // force timers to be sent at normal priority -@@ -426,6 +435,7 @@ bool QEventDispatcherGlib::processEvents - result = g_main_context_iteration(d->mainContext, canWait); - - d->timerSource->processEventsFlags = savedFlags; -+ d->socketNotifierSource->processEventsFlags = savedFlags; - - if (canWait) - emit awake(); - diff --git a/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.6-QTBUG-38585.patch b/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.6-QTBUG-38585.patch deleted file mode 100644 index 6aee4fee73..0000000000 --- a/desktop/toolkit/qt/files/fedora/qt-everywhere-opensource-src-4.8.6-QTBUG-38585.patch +++ /dev/null @@ -1,13 +0,0 @@ ---- src/gui/kernel/qclipboard_x11.cpp.sav 2014-04-25 09:52:03.855693228 +0200 -+++ qt-everywhere-opensource-src-4.8.6/src/gui/kernel/qclipboard_x11.cpp 2014-04-25 09:51:58.038693777 +0200 -@@ -548,7 +548,8 @@ bool QX11Data::clipboardWaitForEvent(Win - return false; - - XSync(X11->display, false); -- usleep(50000); -+ if (!XPending(X11->display)) -+ usleep(5000); - - now.start(); - - diff --git a/desktop/toolkit/qt/files/fedora/qt-x11-opensource-src-4.5.0-fix-qatomic-inline-asm.patch b/desktop/toolkit/qt/files/fedora/qt-x11-opensource-src-4.5.0-fix-qatomic-inline-asm.patch deleted file mode 100644 index e5ab4bad96..0000000000 --- a/desktop/toolkit/qt/files/fedora/qt-x11-opensource-src-4.5.0-fix-qatomic-inline-asm.patch +++ /dev/null @@ -1,50 +0,0 @@ -diff -ur qt-x11-opensource-src-4.5.0/src/corelib/arch/qatomic_i386.h qt-x11-opensource-src-4.5.0-fix-qatomic-inline-asm/src/corelib/arch/qatomic_i386.h ---- qt-x11-opensource-src-4.5.0/src/corelib/arch/qatomic_i386.h 2009-02-25 22:09:21.000000000 +0100 -+++ qt-x11-opensource-src-4.5.0-fix-qatomic-inline-asm/src/corelib/arch/qatomic_i386.h 2009-04-01 17:54:21.000000000 +0200 -@@ -115,8 +115,8 @@ - asm volatile("lock\n" - "incl %0\n" - "setne %1" -- : "=m" (_q_value), "=qm" (ret) -- : "m" (_q_value) -+ : "+m" (_q_value), "=qm" (ret) -+ : - : "memory"); - return ret != 0; - } -@@ -127,8 +127,8 @@ - asm volatile("lock\n" - "decl %0\n" - "setne %1" -- : "=m" (_q_value), "=qm" (ret) -- : "m" (_q_value) -+ : "+m" (_q_value), "=qm" (ret) -+ : - : "memory"); - return ret != 0; - } -diff -ur qt-x11-opensource-src-4.5.0/src/corelib/arch/qatomic_x86_64.h qt-x11-opensource-src-4.5.0-fix-qatomic-inline-asm/src/corelib/arch/qatomic_x86_64.h ---- qt-x11-opensource-src-4.5.0/src/corelib/arch/qatomic_x86_64.h 2009-02-25 22:09:21.000000000 +0100 -+++ qt-x11-opensource-src-4.5.0-fix-qatomic-inline-asm/src/corelib/arch/qatomic_x86_64.h 2009-04-01 17:54:32.000000000 +0200 -@@ -116,8 +116,8 @@ - asm volatile("lock\n" - "incl %0\n" - "setne %1" -- : "=m" (_q_value), "=qm" (ret) -- : "m" (_q_value) -+ : "+m" (_q_value), "=qm" (ret) -+ : - : "memory"); - return ret != 0; - } -@@ -128,8 +128,8 @@ - asm volatile("lock\n" - "decl %0\n" - "setne %1" -- : "=m" (_q_value), "=qm" (ret) -- : "m" (_q_value) -+ : "+m" (_q_value), "=qm" (ret) -+ : - : "memory"); - return ret != 0; - } diff --git a/desktop/toolkit/qt/files/fedora/qt-x11-opensource-src-4.5.1-enable_ft_lcdfilter.patch b/desktop/toolkit/qt/files/fedora/qt-x11-opensource-src-4.5.1-enable_ft_lcdfilter.patch deleted file mode 100644 index 4ab3ea4b11..0000000000 --- a/desktop/toolkit/qt/files/fedora/qt-x11-opensource-src-4.5.1-enable_ft_lcdfilter.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff -up qt-x11-opensource-src-4.5.1/src/gui/text/qfontengine_ft.cpp.enable_ft_lcdfilter qt-x11-opensource-src-4.5.1/src/gui/text/qfontengine_ft.cpp ---- qt-x11-opensource-src-4.5.1/src/gui/text/qfontengine_ft.cpp.enable_ft_lcdfilter 2009-04-21 18:57:41.000000000 -0500 -+++ qt-x11-opensource-src-4.5.1/src/gui/text/qfontengine_ft.cpp 2009-04-24 11:17:49.562695405 -0500 -@@ -72,7 +72,7 @@ - #include FT_CONFIG_OPTIONS_H - #endif - --#if defined(FT_LCD_FILTER_H) && defined(FT_CONFIG_OPTION_SUBPIXEL_RENDERING) -+#if defined(FT_LCD_FILTER_H) - #define QT_USE_FREETYPE_LCDFILTER - #endif - diff --git a/desktop/toolkit/qt/files/mkspecs.patch b/desktop/toolkit/qt/files/mkspecs.patch deleted file mode 100644 index 2cd05f90e5..0000000000 --- a/desktop/toolkit/qt/files/mkspecs.patch +++ /dev/null @@ -1,54 +0,0 @@ -diff -Naur mkspecs/common.orig/g++-base.conf mkspecs/common/g++-base.conf ---- mkspecs/common.orig/g++-base.conf 2012-03-14 16:01:12.000000000 +0200 -+++ mkspecs/common/g++-base.conf 2012-04-05 14:53:05.670347102 +0300 -@@ -8,17 +8,23 @@ - # you can use the manual test in tests/manual/mkspecs. - # - --QMAKE_CC = gcc -+QMAKE_CC = PISILINUX_CC - - QMAKE_LINK_C = $$QMAKE_CC - QMAKE_LINK_C_SHLIB = $$QMAKE_CC - --QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -g -+QMAKE_CFLAGS_RELEASE += PISILINUX_CFLAGS -+QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += PISILINUX_CFLAGS -g - --QMAKE_CXX = g++ -+QMAKE_CXX = PISILINUX_CXX - --QMAKE_LINK = $$QMAKE_CXX --QMAKE_LINK_SHLIB = $$QMAKE_CXX -+ -+QMAKE_LINK = PISILINUX_CXX -+QMAKE_LINK_SHLIB = PISILINUX_CXX -+QMAKE_LINK_C = PISILINUX_CC -+QMAKE_LINK_C_SHLIB = PISILINUX_CC -+ -+QMAKE_LFLAGS_RELEASE += PISILINUX_LDFLAGS - - QMAKE_CXXFLAGS_RELEASE_WITH_DEBUGINFO += $$QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO - -diff -Naur mkspecs/common.orig/g++-unix.conf mkspecs/common/g++-unix.conf ---- mkspecs/common.orig/g++-unix.conf 2012-03-14 16:01:12.000000000 +0200 -+++ mkspecs/common/g++-unix.conf 2012-04-05 14:49:41.723399705 +0300 -@@ -10,5 +10,5 @@ - - include(g++-base.conf) - --QMAKE_LFLAGS_RELEASE += -Wl,-O1 -+QMAKE_LFLAGS_RELEASE += PISILINUX_LDFLAGS - QMAKE_LFLAGS_NOUNDEF += -Wl,--no-undefined -diff -Naur mkspecs/common.orig/linux.conf mkspecs/common/linux.conf ---- mkspecs/common.orig/linux.conf 2012-03-14 16:01:12.000000000 +0200 -+++ mkspecs/common/linux.conf 2012-04-05 14:54:23.487037709 +0300 -@@ -57,7 +57,7 @@ - QMAKE_MOVE = mv -f - QMAKE_DEL_FILE = rm -f - QMAKE_DEL_DIR = rmdir --QMAKE_STRIP = strip -+QMAKE_STRIP = - QMAKE_STRIPFLAGS_LIB += --strip-unneeded - QMAKE_CHK_DIR_EXISTS = test -d - QMAKE_MKDIR = mkdir -p diff --git a/desktop/toolkit/qt/files/opensuse/0001-Don-t-crash-on-broken-GIF-images.patch b/desktop/toolkit/qt/files/opensuse/0001-Don-t-crash-on-broken-GIF-images.patch deleted file mode 100644 index 011918935e..0000000000 --- a/desktop/toolkit/qt/files/opensuse/0001-Don-t-crash-on-broken-GIF-images.patch +++ /dev/null @@ -1,42 +0,0 @@ -From 19d31c5b036a46365584d7d97e87f7fe16150623 Mon Sep 17 00:00:00 2001 -From: Lars Knoll -Date: Thu, 24 Apr 2014 15:33:27 +0200 -Subject: [PATCH] Don't crash on broken GIF images - -Broken GIF images could set invalid width and height -values inside the image, leading to Qt creating a null -QImage for it. In that case we need to abort decoding -the image and return an error. - -Initial patch by Rich Moore. - -Backport of Id82a4036f478bd6e49c402d6598f57e7e5bb5e1e from Qt 5 - -Task-number: QTBUG-38367 -Change-Id: I0680740018aaa8356d267b7af3f01fac3697312a -Security-advisory: CVE-2014-0190 ---- - src/gui/image/qgifhandler.cpp | 7 +++++++ - 1 file changed, 7 insertions(+) - -diff --git a/src/gui/image/qgifhandler.cpp b/src/gui/image/qgifhandler.cpp -index 3324f04..5199dd3 100644 ---- a/src/gui/image/qgifhandler.cpp -+++ b/src/gui/image/qgifhandler.cpp -@@ -359,6 +359,13 @@ int QGIFFormat::decode(QImage *image, const uchar *buffer, int length, - memset(bits, 0, image->byteCount()); - } - -+ // Check if the previous attempt to create the image failed. If it -+ // did then the image is broken and we should give up. -+ if (image->isNull()) { -+ state = Error; -+ return -1; -+ } -+ - disposePrevious(image); - disposed = false; - --- -1.9.0 - diff --git a/desktop/toolkit/qt/files/opensuse/0180-window-role.diff b/desktop/toolkit/qt/files/opensuse/0180-window-role.diff deleted file mode 100644 index 661c3ba5b2..0000000000 --- a/desktop/toolkit/qt/files/opensuse/0180-window-role.diff +++ /dev/null @@ -1,96 +0,0 @@ -Index: src/corelib/kernel/qobject.cpp -=================================================================== ---- src/corelib/kernel/qobject.cpp.orig -+++ src/corelib/kernel/qobject.cpp -@@ -1102,10 +1102,19 @@ void QObject::setObjectName(const QStrin - - d->objectName = name; - -+#if defined(Q_WS_X11) -+ d->checkWindowRole(); -+#endif -+ - if (objectNameChanged) - d->declarativeData->objectNameChanged(d->declarativeData, this); - } - -+#if defined(Q_WS_X11) -+void QObjectPrivate::checkWindowRole() -+{ -+} -+#endif - - #ifdef QT3_SUPPORT - /*! \internal -Index: src/corelib/kernel/qobject_p.h -=================================================================== ---- src/corelib/kernel/qobject_p.h.orig -+++ src/corelib/kernel/qobject_p.h -@@ -162,6 +162,9 @@ public: - #ifdef QT3_SUPPORT - void sendPendingChildInsertedEvents(); - #endif -+#if defined(Q_WS_X11) -+ virtual void checkWindowRole(); -+#endif - - static inline Sender *setCurrentSender(QObject *receiver, - Sender *sender); -Index: src/gui/kernel/qwidget_p.h -=================================================================== ---- src/gui/kernel/qwidget_p.h.orig -+++ src/gui/kernel/qwidget_p.h -@@ -784,6 +784,7 @@ public: - static QWidget *keyboardGrabber; - - void setWindowRole(); -+ virtual void checkWindowRole(); - void sendStartupMessage(const char *message) const; - void setNetWmWindowTypes(); - void x11UpdateIsOpaque(); -Index: src/gui/kernel/qwidget_x11.cpp -=================================================================== ---- src/gui/kernel/qwidget_x11.cpp.orig -+++ src/gui/kernel/qwidget_x11.cpp -@@ -849,13 +849,17 @@ void QWidgetPrivate::create_sys(WId wind - - - // declare the widget's window role -+ QByteArray windowRole; - if (QTLWExtra *topData = maybeTopData()) { -- if (!topData->role.isEmpty()) { -- QByteArray windowRole = topData->role.toUtf8(); -- XChangeProperty(dpy, id, -- ATOM(WM_WINDOW_ROLE), XA_STRING, 8, PropModeReplace, -- (unsigned char *)windowRole.constData(), windowRole.length()); -- } -+ if (!topData->role.isEmpty()) -+ windowRole = topData->role.toUtf8(); -+ } -+ if (windowRole.isEmpty()) // use object name as a fallback -+ windowRole = objectName.toUtf8(); -+ if (!windowRole.isEmpty()) { -+ XChangeProperty(dpy, id, -+ ATOM(WM_WINDOW_ROLE), XA_STRING, 8, PropModeReplace, -+ (unsigned char *)windowRole.constData(), windowRole.length()); - } - - // set client leader property -@@ -3015,6 +3019,17 @@ void QWidgetPrivate::setWindowRole() - XChangeProperty(X11->display, q->internalWinId(), - ATOM(WM_WINDOW_ROLE), XA_STRING, 8, PropModeReplace, - (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) diff --git a/desktop/toolkit/qt/files/opensuse/0188-fix-moc-parser-same-name-header.diff b/desktop/toolkit/qt/files/opensuse/0188-fix-moc-parser-same-name-header.diff deleted file mode 100644 index 660dfdf0ad..0000000000 --- a/desktop/toolkit/qt/files/opensuse/0188-fix-moc-parser-same-name-header.diff +++ /dev/null @@ -1,37 +0,0 @@ -qt-bugs@ issue : none -Trolltech task ID : none -applied: yes -author: Helio Chissini de Castro -os: unix - -In situations where included header have same name as their parent dir, i.e. -include/QtMyModule/QtMyModule and #include on code. moc will fail if parent dir was -added in front of includepath. -moc -Iinclude -Iinclude/QtMyModule fails -moc -Iinclude/QtMyModule works -This patch move dir test to proper place, as entry is validated only if is a real file, not a dir. -Detected by qca2 plugins code that uses QtCrypto/QtCrypto -Thanks to Thiago to find proper syntax - -Index: src/tools/moc/preprocessor.cpp -=================================================================== ---- src/tools/moc/preprocessor.cpp.orig -+++ src/tools/moc/preprocessor.cpp -@@ -799,7 +799,7 @@ void Preprocessor::preprocess(const QByt - QFileInfo fi; - if (local) - fi.setFile(QFileInfo(QString::fromLocal8Bit(filename)).dir(), QString::fromLocal8Bit(include)); -- for (int j = 0; j < Preprocessor::includes.size() && !fi.exists(); ++j) { -+ for (int j = 0; j < Preprocessor::includes.size() && ( !fi.exists() || fi.isDir() ); ++j) { - const IncludePath &p = Preprocessor::includes.at(j); - if (p.isFrameworkPath) { - const int slashPos = include.indexOf('/'); -@@ -819,7 +819,7 @@ void Preprocessor::preprocess(const QByt - } - } - -- if (!fi.exists() || fi.isDir()) -+ if ( !fi.exists() ) - continue; - include = fi.canonicalFilePath().toLocal8Bit(); - diff --git a/desktop/toolkit/qt/files/opensuse/0191-listview-alternate-row-colors.diff b/desktop/toolkit/qt/files/opensuse/0191-listview-alternate-row-colors.diff deleted file mode 100644 index 480464cee2..0000000000 --- a/desktop/toolkit/qt/files/opensuse/0191-listview-alternate-row-colors.diff +++ /dev/null @@ -1,24 +0,0 @@ -qt-bugs@ issue : 178507 -Trolltech task ID : 179170 -applied: no -author: Matthew Woehlke - -This patch fixes incorrect setting of the palette color group in -QListView that resulted in alternate rows being drawn with the Active -AlternateBase color even for inactive widgets (while the rest of the -widget is drawn correctly). Please let me know if QListView is not -the only culprit. (QTreeView was fixed by TT already.) - -Index: src/gui/itemviews/qlistview.cpp -=================================================================== ---- src/gui/itemviews/qlistview.cpp.orig -+++ src/gui/itemviews/qlistview.cpp -@@ -997,7 +997,7 @@ void QListView::paintEvent(QPaintEvent * - option.state &= ~QStyle::State_Enabled; - cg = QPalette::Disabled; - } else { -- cg = QPalette::Normal; -+ cg = window()->isActiveWindow() ? QPalette::Active : QPalette::Inactive; - } - option.palette.setCurrentColorGroup(cg); - } diff --git a/desktop/toolkit/qt/files/opensuse/0195-compositing-properties.diff b/desktop/toolkit/qt/files/opensuse/0195-compositing-properties.diff deleted file mode 100644 index 53789264c5..0000000000 --- a/desktop/toolkit/qt/files/opensuse/0195-compositing-properties.diff +++ /dev/null @@ -1,60 +0,0 @@ -qt-bugs@ issue : none -bugs.kde.org number : none -applied: no -author: Lubos Lunak - -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. - -Index: src/gui/kernel/qwidget_x11.cpp -=================================================================== ---- src/gui/kernel/qwidget_x11.cpp.orig -+++ src/gui/kernel/qwidget_x11.cpp -@@ -773,6 +773,11 @@ void QWidgetPrivate::create_sys(WId wind - 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(); -@@ -827,13 +832,21 @@ void QWidgetPrivate::create_sys(WId wind - // 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()) { -@@ -849,10 +862,6 @@ void QWidgetPrivate::create_sys(WId wind - XChangeProperty(dpy, id, ATOM(WM_CLIENT_LEADER), - XA_WINDOW, 32, PropModeReplace, - (unsigned char *)&X11->wm_client_leader, 1); -- } else { -- // non-toplevel widgets don't have a frame, so no need to -- // update the strut -- data.fstrut_dirty = 0; - } - - if (initializeWindow && q->internalWinId()) { diff --git a/desktop/toolkit/qt/files/opensuse/0225-invalidate-tabbar-geometry-on-refresh.patch b/desktop/toolkit/qt/files/opensuse/0225-invalidate-tabbar-geometry-on-refresh.patch deleted file mode 100644 index d79c6f0897..0000000000 --- a/desktop/toolkit/qt/files/opensuse/0225-invalidate-tabbar-geometry-on-refresh.patch +++ /dev/null @@ -1,35 +0,0 @@ -qt-bugs@ issue : None -Trolltech task ID : None -bugs.kde.org number : 159014 -applied: no -author: Robert Knight - -When tabs are inserted or removed in a QTabBar, QTabBarPrivate::refresh() -is called to update the layout. If the tabbar widget is hidden, this -just sets a boolean variable (layoutDirty) and returns, so the parent widget's layout -is not notified about the possible geometry change. - -Prior to Qt 4.4 this was not a problem because the geometry was recalculated -in QTabBar::sizeHint() if the layoutDirty variable was set. In Qt 4.4 however the layout -caches size hint information in QWidgetItemV2. Since the cache information is not invalidated, -the layout may end up using out-of-date size hint information to compute the widget size. - -If the QTabBar is empty when QTabBar::sizeHint() is called, it will return a size with a height -of 0, which will be kept in the cache and so the tab bar will never be shown. - -This patch fixes the problem by calling updateGeometry() whenever the tab bar's layout is refreshed. - -Index: src/gui/widgets/qtabbar.cpp -=================================================================== ---- src/gui/widgets/qtabbar.cpp.orig -+++ src/gui/widgets/qtabbar.cpp -@@ -723,8 +723,8 @@ void QTabBarPrivate::refresh() - layoutTabs(); - makeVisible(currentIndex); - q->update(); -- q->updateGeometry(); - } -+ q->updateGeometry(); - } - - /*! diff --git a/desktop/toolkit/qt/files/opensuse/QSystemTrayicon.diff b/desktop/toolkit/qt/files/opensuse/QSystemTrayicon.diff deleted file mode 100644 index 2be68adba4..0000000000 --- a/desktop/toolkit/qt/files/opensuse/QSystemTrayicon.diff +++ /dev/null @@ -1,1486 +0,0 @@ -Description: Introduce a plugin system for QSystemTrayIcon. - Designed to be used with sni-qt (https://launchpad.net/sni-qt) -Author: agateau@kde.org -Forwarded: no - -Introduce a plugin system for QSystemTrayIcon. Designed to be used with sni-qt -(https://launchpad.net/sni-qt) ---- - examples/desktop/systray/window.cpp | 40 ++ - examples/desktop/systray/window.h | 6 - src/gui/util/qabstractsystemtrayiconsys.cpp | 65 +++ - src/gui/util/qabstractsystemtrayiconsys_p.h | 106 ++++++ - src/gui/util/qsystemtrayicon.cpp | 6 - src/gui/util/qsystemtrayicon_p.h | 85 ++--- - src/gui/util/qsystemtrayicon_x11.cpp | 356 ++++----------------- - src/gui/util/qxembedsystemtrayicon_x11.cpp | 469 ++++++++++++++++++++++++++++ - src/gui/util/qxembedsystemtrayicon_x11_p.h | 104 ++++++ - src/gui/util/util.pri | 7 - 10 files changed, 916 insertions(+), 328 deletions(-) - -Index: qt-everywhere-opensource-src-4.8.6/examples/desktop/systray/window.cpp -=================================================================== ---- qt-everywhere-opensource-src-4.8.6.orig/examples/desktop/systray/window.cpp -+++ qt-everywhere-opensource-src-4.8.6/examples/desktop/systray/window.cpp -@@ -158,15 +158,23 @@ void Window::createIconGroupBox() - iconComboBox->addItem(QIcon(":/images/bad.svg"), tr("Bad")); - iconComboBox->addItem(QIcon(":/images/heart.svg"), tr("Heart")); - iconComboBox->addItem(QIcon(":/images/trash.svg"), tr("Trash")); -+ iconComboBox->addItem(QIcon::fromTheme("system-file-manager"), tr("File Manager")); - - showIconCheckBox = new QCheckBox(tr("Show icon")); - showIconCheckBox->setChecked(true); - -+#if defined(Q_WS_X11) -+ jitToolTipCheckBox = new QCheckBox(tr("Just In Time Tooltip")); -+#endif -+ - QHBoxLayout *iconLayout = new QHBoxLayout; - iconLayout->addWidget(iconLabel); - iconLayout->addWidget(iconComboBox); - iconLayout->addStretch(); - iconLayout->addWidget(showIconCheckBox); -+#if defined(Q_WS_X11) -+ iconLayout->addWidget(jitToolTipCheckBox); -+#endif - iconGroupBox->setLayout(iconLayout); - } - -@@ -254,5 +262,37 @@ void Window::createTrayIcon() - trayIconMenu->addAction(quitAction); - - trayIcon = new QSystemTrayIcon(this); -+ QByteArray category = qgetenv("SNI_CATEGORY"); -+ if (!category.isEmpty()) { -+ trayIcon->setProperty("_qt_sni_category", QString::fromLocal8Bit(category)); -+ } - trayIcon->setContextMenu(trayIconMenu); -+ -+#if defined(Q_WS_X11) -+ trayIcon->installEventFilter(this); -+#endif -+} -+ -+#if defined(Q_WS_X11) -+bool Window::eventFilter(QObject *, QEvent *event) -+{ -+ switch(event->type()) { -+ case QEvent::ToolTip: -+ if (jitToolTipCheckBox->isChecked()) { -+ QString timeString = QTime::currentTime().toString(); -+ trayIcon->setToolTip(tr("Current Time: %1").arg(timeString)); -+ } -+ break; -+ case QEvent::Wheel: { -+ QWheelEvent *wheelEvent = static_cast(event); -+ int delta = wheelEvent->delta() > 0 ? 1 : -1; -+ int index = (iconComboBox->currentIndex() + delta) % iconComboBox->count(); -+ iconComboBox->setCurrentIndex(index); -+ break; -+ } -+ default: -+ break; -+ } -+ return false; - } -+#endif -Index: qt-everywhere-opensource-src-4.8.6/examples/desktop/systray/window.h -=================================================================== ---- qt-everywhere-opensource-src-4.8.6.orig/examples/desktop/systray/window.h -+++ qt-everywhere-opensource-src-4.8.6/examples/desktop/systray/window.h -@@ -69,6 +69,9 @@ public: - - protected: - void closeEvent(QCloseEvent *event); -+#if defined(Q_WS_X11) -+ bool eventFilter(QObject *object, QEvent *event); -+#endif - - private slots: - void setIcon(int index); -@@ -86,6 +89,9 @@ private: - QLabel *iconLabel; - QComboBox *iconComboBox; - QCheckBox *showIconCheckBox; -+#if defined(Q_WS_X11) -+ QCheckBox *jitToolTipCheckBox; -+#endif - - QGroupBox *messageGroupBox; - QLabel *typeLabel; -Index: qt-everywhere-opensource-src-4.8.6/src/gui/util/qabstractsystemtrayiconsys.cpp -=================================================================== ---- /dev/null -+++ qt-everywhere-opensource-src-4.8.6/src/gui/util/qabstractsystemtrayiconsys.cpp -@@ -0,0 +1,65 @@ -+/**************************************************************************** -+** -+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). -+** All rights reserved. -+** Contact: Nokia Corporation (qt-info@nokia.com) -+** -+** This file is part of the QtGui module of the Qt Toolkit. -+** -+** $QT_BEGIN_LICENSE:LGPL$ -+** GNU Lesser General Public License Usage -+** This file may be used under the terms of the GNU Lesser General Public -+** License version 2.1 as published by the Free Software Foundation and -+** appearing in the file LICENSE.LGPL included in the packaging of this -+** file. Please review the following information to ensure the GNU Lesser -+** General Public License version 2.1 requirements will be met: -+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -+** -+** In addition, as a special exception, Nokia gives you certain additional -+** rights. These rights are described in the Nokia Qt LGPL Exception -+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -+** -+** GNU General Public License Usage -+** Alternatively, this file may be used under the terms of the GNU General -+** Public License version 3.0 as published by the Free Software Foundation -+** and appearing in the file LICENSE.GPL included in the packaging of this -+** file. Please review the following information to ensure the GNU General -+** Public License version 3.0 requirements will be met: -+** http://www.gnu.org/copyleft/gpl.html. -+** -+** Other Usage -+** Alternatively, this file may be used in accordance with the terms and -+** conditions contained in a signed written agreement between you and Nokia. -+** -+** -+** -+** -+** -+** $QT_END_LICENSE$ -+** -+****************************************************************************/ -+#ifndef QT_NO_SYSTEMTRAYICON -+ -+#include "qabstractsystemtrayiconsys_p.h" -+ -+ -+QSystemTrayIconSysFactoryInterface::QSystemTrayIconSysFactoryInterface() -+{ -+} -+ -+///////////////////////////////////////////////// -+QAbstractSystemTrayIconSys::QAbstractSystemTrayIconSys(QSystemTrayIcon *icon) -+: trayIcon(icon) -+{ -+} -+ -+QAbstractSystemTrayIconSys::~QAbstractSystemTrayIconSys() -+{ -+} -+ -+void QAbstractSystemTrayIconSys::sendActivated(QSystemTrayIcon::ActivationReason reason) -+{ -+ qtsystray_sendActivated(trayIcon, reason); -+} -+ -+#endif -Index: qt-everywhere-opensource-src-4.8.6/src/gui/util/qabstractsystemtrayiconsys_p.h -=================================================================== ---- /dev/null -+++ qt-everywhere-opensource-src-4.8.6/src/gui/util/qabstractsystemtrayiconsys_p.h -@@ -0,0 +1,106 @@ -+/**************************************************************************** -+** -+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). -+** All rights reserved. -+** Contact: Nokia Corporation (qt-info@nokia.com) -+** -+** This file is part of the QtGui module of the Qt Toolkit. -+** -+** $QT_BEGIN_LICENSE:LGPL$ -+** GNU Lesser General Public License Usage -+** This file may be used under the terms of the GNU Lesser General Public -+** License version 2.1 as published by the Free Software Foundation and -+** appearing in the file LICENSE.LGPL included in the packaging of this -+** file. Please review the following information to ensure the GNU Lesser -+** General Public License version 2.1 requirements will be met: -+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -+** -+** In addition, as a special exception, Nokia gives you certain additional -+** rights. These rights are described in the Nokia Qt LGPL Exception -+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -+** -+** GNU General Public License Usage -+** Alternatively, this file may be used under the terms of the GNU General -+** Public License version 3.0 as published by the Free Software Foundation -+** and appearing in the file LICENSE.GPL included in the packaging of this -+** file. Please review the following information to ensure the GNU General -+** Public License version 3.0 requirements will be met: -+** http://www.gnu.org/copyleft/gpl.html. -+** -+** Other Usage -+** Alternatively, this file may be used in accordance with the terms and -+** conditions contained in a signed written agreement between you and Nokia. -+** -+** -+** -+** -+** -+** $QT_END_LICENSE$ -+** -+****************************************************************************/ -+ -+#ifndef QABSTRACTSYSTEMTRAYICONSYS_P_H -+#define QABSTRACTSYSTEMTRAYICONSYS_P_H -+ -+// -+// W A R N I N G -+// ------------- -+// -+// This file is not part of the Qt API. It exists for the convenience -+// of a number of Qt sources files. This header file may change from -+// version to version without notice, or even be removed. -+// -+// We mean it. -+// -+ -+#ifndef QT_NO_SYSTEMTRAYICON -+ -+#include -+#include -+ -+class QAbstractSystemTrayIconSys; -+ -+class Q_GUI_EXPORT QSystemTrayIconSysFactoryInterface : public QObject, public QFactoryInterface -+{ -+ Q_OBJECT -+public: -+ QSystemTrayIconSysFactoryInterface(); -+ virtual QAbstractSystemTrayIconSys * create(QSystemTrayIcon *) = 0; -+ virtual bool isAvailable() const = 0; -+ -+ // \reimp -+ virtual QStringList keys() const { return QStringList() << QLatin1String("default"); } -+ -+Q_SIGNALS: -+ void availableChanged(bool); -+}; -+ -+#define QSystemTrayIconSysFactoryInterface_iid "com.nokia.qt.QSystemTrayIconSysFactoryInterface" -+Q_DECLARE_INTERFACE(QSystemTrayIconSysFactoryInterface, QSystemTrayIconSysFactoryInterface_iid) -+ -+class QRect; -+ -+class Q_GUI_EXPORT QAbstractSystemTrayIconSys -+{ -+public: -+ QAbstractSystemTrayIconSys(QSystemTrayIcon *icon); -+ virtual ~QAbstractSystemTrayIconSys(); -+ -+ virtual QRect geometry() const = 0; -+ virtual void updateVisibility() = 0; -+ virtual void updateIcon() = 0; -+ virtual void updateToolTip() = 0; -+ virtual void updateMenu() = 0; -+ virtual void showMessage(const QString &title, const QString &message, -+ QSystemTrayIcon::MessageIcon icon, int msecs) = 0; -+ -+ void sendActivated(QSystemTrayIcon::ActivationReason); -+ -+protected: -+ QSystemTrayIcon *trayIcon; -+}; -+ -+#endif // QT_NO_SYSTEMTRAYICON -+ -+#endif // QABSTRACTSYSTEMTRAYICONSYS_P_H -+ -Index: qt-everywhere-opensource-src-4.8.6/src/gui/util/qsystemtrayicon.cpp -=================================================================== ---- qt-everywhere-opensource-src-4.8.6.orig/src/gui/util/qsystemtrayicon.cpp -+++ qt-everywhere-opensource-src-4.8.6/src/gui/util/qsystemtrayicon.cpp -@@ -287,12 +287,6 @@ bool QSystemTrayIcon::isVisible() const - */ - bool QSystemTrayIcon::event(QEvent *e) - { --#if defined(Q_WS_X11) -- if (e->type() == QEvent::ToolTip) { -- Q_D(QSystemTrayIcon); -- return d->sys->deliverToolTipEvent(e); -- } --#endif - return QObject::event(e); - } - -Index: qt-everywhere-opensource-src-4.8.6/src/gui/util/qsystemtrayicon_p.h -=================================================================== ---- qt-everywhere-opensource-src-4.8.6.orig/src/gui/util/qsystemtrayicon_p.h -+++ qt-everywhere-opensource-src-4.8.6/src/gui/util/qsystemtrayicon_p.h -@@ -62,10 +62,17 @@ - #include "QtGui/qpixmap.h" - #include "QtCore/qstring.h" - #include "QtCore/qpointer.h" -+#if defined(Q_WS_X11) -+#include "QtCore/qset.h" -+#endif - - QT_BEGIN_NAMESPACE - -+#if defined(Q_WS_X11) -+class QAbstractSystemTrayIconSys; -+#else - class QSystemTrayIconSys; -+#endif - class QToolButton; - class QLabel; - -@@ -75,6 +82,9 @@ class QSystemTrayIconPrivate : public QO - - public: - QSystemTrayIconPrivate() : sys(0), visible(false) { } -+ #if defined(Q_WS_X11) -+ ~QSystemTrayIconPrivate(); -+ #endif - - void install_sys(); - void remove_sys(); -@@ -90,7 +100,11 @@ public: - QPointer menu; - QIcon icon; - QString toolTip; -+ #if defined(Q_WS_X11) -+ QAbstractSystemTrayIconSys *sys; -+ #else - QSystemTrayIconSys *sys; -+ #endif - bool visible; - }; - -@@ -123,60 +137,37 @@ private: - }; - - #if defined(Q_WS_X11) --QT_BEGIN_INCLUDE_NAMESPACE --#include --#include --#include --#include --QT_END_INCLUDE_NAMESPACE -+class QSystemTrayIconSysFactoryInterface; - --class QSystemTrayIconSys : public QWidget -+/** -+ * This class acts as a composite QSystemTrayIconSysFactory: It can create -+ * instances of QAbstractSystemTrayIconSys* using either a plugin or the -+ * builtin factory and will cause QSystemTrayIconPrivate to recreate their -+ * 'sys' instances if the plugin availability changes. -+ */ -+class QSystemTrayIconSysFactory : public QObject - { -- friend class QSystemTrayIconPrivate; -- -+ Q_OBJECT - public: -- QSystemTrayIconSys(QSystemTrayIcon *q); -- ~QSystemTrayIconSys(); -- enum { -- SYSTEM_TRAY_REQUEST_DOCK = 0, -- SYSTEM_TRAY_BEGIN_MESSAGE = 1, -- SYSTEM_TRAY_CANCEL_MESSAGE =2 -- }; -- -- void addToTray(); -- void updateIcon(); -- XVisualInfo* getSysTrayVisualInfo(); -- -- // QObject::event is public but QWidget's ::event() re-implementation -- // is protected ;( -- inline bool deliverToolTipEvent(QEvent *e) -- { return QWidget::event(e); } -- -- static Window sysTrayWindow; -- static QList trayIcons; -- static QCoreApplication::EventFilter oldEventFilter; -- static bool sysTrayTracker(void *message, long *result); -- static Window locateSystemTray(); -- static Atom sysTraySelection; -- static XVisualInfo sysTrayVisual; -+ QSystemTrayIconSysFactory(); -+ void registerSystemTrayIconPrivate(QSystemTrayIconPrivate *iconPrivate); -+ void unregisterSystemTrayIconPrivate(QSystemTrayIconPrivate *iconPrivate); - --protected: -- void paintEvent(QPaintEvent *pe); -- void resizeEvent(QResizeEvent *re); -- bool x11Event(XEvent *event); -- void mousePressEvent(QMouseEvent *event); -- void mouseDoubleClickEvent(QMouseEvent *event); --#ifndef QT_NO_WHEELEVENT -- void wheelEvent(QWheelEvent *event); --#endif -- bool event(QEvent *e); -+ QAbstractSystemTrayIconSys *create(QSystemTrayIcon *) const; -+ -+ bool isAvailable() const; -+ -+private Q_SLOTS: -+ void refreshTrayIconPrivates(); - - private: -- QPixmap background; -- QSystemTrayIcon *q; -- Colormap colormap; -+ QSystemTrayIconSysFactoryInterface *factory() const; -+ void loadPluginFactory(); -+ -+ QSystemTrayIconSysFactoryInterface *pluginFactory; -+ QSet trayIconPrivates; - }; --#endif // Q_WS_X11 -+#endif - - QT_END_NAMESPACE - -Index: qt-everywhere-opensource-src-4.8.6/src/gui/util/qsystemtrayicon_x11.cpp -=================================================================== ---- qt-everywhere-opensource-src-4.8.6.orig/src/gui/util/qsystemtrayicon_x11.cpp -+++ qt-everywhere-opensource-src-4.8.6/src/gui/util/qsystemtrayicon_x11.cpp -@@ -38,311 +38,122 @@ - ** $QT_END_LICENSE$ - ** - ****************************************************************************/ -+#ifndef QT_NO_SYSTEMTRAYICON -+ -+#include - --#include "private/qt_x11_p.h" --#include "qlabel.h" --#include "qx11info_x11.h" --#include "qpainter.h" --#include "qpixmap.h" --#include "qbitmap.h" --#include "qevent.h" --#include "qapplication.h" --#include "qlist.h" --#include "qmenu.h" --#include "qtimer.h" - #include "qsystemtrayicon_p.h" --#include "qpaintengine.h" -+#include "qabstractsystemtrayiconsys_p.h" -+#include "qcoreapplication.h" -+#include "qxembedsystemtrayicon_x11_p.h" - --#ifndef QT_NO_SYSTEMTRAYICON - QT_BEGIN_NAMESPACE - --Window QSystemTrayIconSys::sysTrayWindow = XNone; --QList QSystemTrayIconSys::trayIcons; --QCoreApplication::EventFilter QSystemTrayIconSys::oldEventFilter = 0; --Atom QSystemTrayIconSys::sysTraySelection = XNone; --XVisualInfo QSystemTrayIconSys::sysTrayVisual = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; -- --// Locate the system tray --Window QSystemTrayIconSys::locateSystemTray() --{ -- Display *display = QX11Info::display(); -- if (sysTraySelection == XNone) { -- int screen = QX11Info::appScreen(); -- QString net_sys_tray = QString::fromLatin1("_NET_SYSTEM_TRAY_S%1").arg(screen); -- sysTraySelection = XInternAtom(display, net_sys_tray.toLatin1(), False); -- } -- -- return XGetSelectionOwner(QX11Info::display(), sysTraySelection); --} -+Q_GLOBAL_STATIC(QSystemTrayIconSysFactory, qt_guiSystemTrayIconSysFactory) - --XVisualInfo* QSystemTrayIconSys::getSysTrayVisualInfo() -+QSystemTrayIconSysFactory::QSystemTrayIconSysFactory() -+: pluginFactory(0) - { -- Display *display = QX11Info::display(); -- -- if (!sysTrayVisual.visual) { -- Window win = locateSystemTray(); -- if (win != XNone) { -- Atom actual_type; -- int actual_format; -- ulong nitems, bytes_remaining; -- uchar *data = 0; -- int result = XGetWindowProperty(display, win, ATOM(_NET_SYSTEM_TRAY_VISUAL), 0, 1, -- False, XA_VISUALID, &actual_type, -- &actual_format, &nitems, &bytes_remaining, &data); -- VisualID vid = 0; -- if (result == Success && data && actual_type == XA_VISUALID && actual_format == 32 && -- nitems == 1 && bytes_remaining == 0) -- vid = *(VisualID*)data; -- if (data) -- XFree(data); -- if (vid == 0) -- return 0; -- -- uint mask = VisualIDMask; -- XVisualInfo *vi, rvi; -- int count; -- rvi.visualid = vid; -- vi = XGetVisualInfo(display, mask, &rvi, &count); -- if (vi) { -- sysTrayVisual = vi[0]; -- XFree((char*)vi); -- } -- if (sysTrayVisual.depth != 32) -- memset(&sysTrayVisual, 0, sizeof(sysTrayVisual)); -- } -- } -- -- return sysTrayVisual.visual ? &sysTrayVisual : 0; - } - --bool QSystemTrayIconSys::sysTrayTracker(void *message, long *result) -+void QSystemTrayIconSysFactory::loadPluginFactory() - { -- bool retval = false; -- if (QSystemTrayIconSys::oldEventFilter) -- retval = QSystemTrayIconSys::oldEventFilter(message, result); -- -- if (trayIcons.isEmpty()) -- return retval; -- -- Display *display = QX11Info::display(); -- XEvent *ev = (XEvent *)message; -- if (ev->type == DestroyNotify && ev->xany.window == sysTrayWindow) { -- sysTrayWindow = locateSystemTray(); -- memset(&sysTrayVisual, 0, sizeof(sysTrayVisual)); -- for (int i = 0; i < trayIcons.count(); i++) { -- if (sysTrayWindow == XNone) { -- QBalloonTip::hideBalloon(); -- trayIcons[i]->hide(); // still no luck -- trayIcons[i]->destroy(); -- trayIcons[i]->create(); -- } else -- trayIcons[i]->addToTray(); // add it to the new tray -- } -- retval = true; -- } else if (ev->type == ClientMessage && sysTrayWindow == XNone) { -- static Atom manager_atom = XInternAtom(display, "MANAGER", False); -- XClientMessageEvent *cm = (XClientMessageEvent *)message; -- if ((cm->message_type == manager_atom) && ((Atom)cm->data.l[1] == sysTraySelection)) { -- sysTrayWindow = cm->data.l[2]; -- memset(&sysTrayVisual, 0, sizeof(sysTrayVisual)); -- XSelectInput(display, sysTrayWindow, StructureNotifyMask); -- for (int i = 0; i < trayIcons.count(); i++) { -- trayIcons[i]->addToTray(); -- } -- retval = true; -- } -- } else if (ev->type == PropertyNotify && ev->xproperty.atom == ATOM(_NET_SYSTEM_TRAY_VISUAL) && -- ev->xproperty.window == sysTrayWindow) { -- memset(&sysTrayVisual, 0, sizeof(sysTrayVisual)); -- for (int i = 0; i < trayIcons.count(); i++) { -- trayIcons[i]->addToTray(); -- } -- } -- -- return retval; --} -- --QSystemTrayIconSys::QSystemTrayIconSys(QSystemTrayIcon *q) -- : QWidget(0, Qt::FramelessWindowHint | Qt::X11BypassWindowManagerHint), -- q(q), colormap(0) --{ -- setAttribute(Qt::WA_AlwaysShowToolTips); -- setAttribute(Qt::WA_QuitOnClose, false); -- setAttribute(Qt::WA_NoSystemBackground, true); -- setAttribute(Qt::WA_PaintOnScreen); -- -- static bool eventFilterAdded = false; -- Display *display = QX11Info::display(); -- if (!eventFilterAdded) { -- oldEventFilter = qApp->setEventFilter(sysTrayTracker); -- eventFilterAdded = true; -- Window root = QX11Info::appRootWindow(); -- XWindowAttributes attr; -- XGetWindowAttributes(display, root, &attr); -- if ((attr.your_event_mask & StructureNotifyMask) != StructureNotifyMask) { -- (void) QApplication::desktop(); // lame trick to ensure our event mask is not overridden -- XSelectInput(display, root, attr.your_event_mask | StructureNotifyMask); // for MANAGER selection -- } -+ if (pluginFactory) { -+ return; - } -- if (trayIcons.isEmpty()) { -- sysTrayWindow = locateSystemTray(); -- if (sysTrayWindow != XNone) -- XSelectInput(display, sysTrayWindow, StructureNotifyMask); // track tray events -+#ifndef QT_NO_LIBRARY -+ QFactoryLoader loader(QSystemTrayIconSysFactoryInterface_iid, QLatin1String("/systemtrayicon")); -+ pluginFactory = qobject_cast(loader.instance(QLatin1String("default"))); -+ if (pluginFactory) { -+ // Set parent to ensure factory destructor is called when application -+ // is closed -+ pluginFactory->setParent(QCoreApplication::instance()); -+ connect(pluginFactory, SIGNAL(availableChanged(bool)), SLOT(refreshTrayIconPrivates())); - } -- trayIcons.append(this); -- setMouseTracking(true); --#ifndef QT_NO_TOOLTIP -- setToolTip(q->toolTip()); --#endif -- if (sysTrayWindow != XNone) -- addToTray(); -+#endif // QT_NO_LIBRARY - } - --QSystemTrayIconSys::~QSystemTrayIconSys() -+QSystemTrayIconSysFactoryInterface *QSystemTrayIconSysFactory::factory() const - { -- trayIcons.removeAt(trayIcons.indexOf(this)); -- Display *display = QX11Info::display(); -- if (trayIcons.isEmpty()) { -- if (sysTrayWindow == XNone) -- return; -- if (display) -- XSelectInput(display, sysTrayWindow, 0); // stop tracking the tray -- sysTrayWindow = XNone; -+ if (!pluginFactory) { -+ const_cast(this)->loadPluginFactory(); - } -- if (colormap) -- XFreeColormap(display, colormap); -+ if (pluginFactory && pluginFactory->isAvailable()) { -+ return pluginFactory; -+ } -+ static QXEmbedSystemTrayIconSysFactory def; -+ return def.isAvailable() ? &def : 0; - } - --void QSystemTrayIconSys::addToTray() -+void QSystemTrayIconSysFactory::refreshTrayIconPrivates() - { -- Q_ASSERT(sysTrayWindow != XNone); -- Display *display = QX11Info::display(); -- -- XVisualInfo *vi = getSysTrayVisualInfo(); -- if (vi && vi->visual) { -- Window root = RootWindow(display, vi->screen); -- Window p = root; -- if (QWidget *pw = parentWidget()) -- p = pw->effectiveWinId(); -- colormap = XCreateColormap(display, root, vi->visual, AllocNone); -- XSetWindowAttributes wsa; -- wsa.background_pixmap = 0; -- wsa.colormap = colormap; -- wsa.background_pixel = 0; -- wsa.border_pixel = 0; -- Window wid = XCreateWindow(display, p, -1, -1, 1, 1, -- 0, vi->depth, InputOutput, vi->visual, -- CWBackPixmap|CWBackPixel|CWBorderPixel|CWColormap, &wsa); -- create(wid); -- } else { -- XSetWindowBackgroundPixmap(display, winId(), ParentRelative); -- } -- -- // GNOME, NET WM Specification -- static Atom netwm_tray_atom = XInternAtom(display, "_NET_SYSTEM_TRAY_OPCODE", False); -- long l[5] = { CurrentTime, SYSTEM_TRAY_REQUEST_DOCK, static_cast(winId()), 0, 0 }; -- XEvent ev; -- memset(&ev, 0, sizeof(ev)); -- ev.xclient.type = ClientMessage; -- ev.xclient.window = sysTrayWindow; -- ev.xclient.message_type = netwm_tray_atom; -- ev.xclient.format = 32; -- memcpy((char *)&ev.xclient.data, (const char *) l, sizeof(l)); -- XSendEvent(display, sysTrayWindow, False, 0, &ev); -- setMinimumSize(22, 22); // required at least on GNOME --} -- --void QSystemTrayIconSys::updateIcon() --{ -- update(); --} -- --void QSystemTrayIconSys::resizeEvent(QResizeEvent *re) --{ -- QWidget::resizeEvent(re); -- updateIcon(); --} -- --void QSystemTrayIconSys::paintEvent(QPaintEvent*) --{ -- QPainter p(this); -- if (!getSysTrayVisualInfo()) { -- const QRegion oldSystemClip = p.paintEngine()->systemClip(); -- const QRect clearedRect = oldSystemClip.boundingRect(); -- XClearArea(QX11Info::display(), winId(), clearedRect.x(), clearedRect.y(), -- clearedRect.width(), clearedRect.height(), False); -- QPaintEngine *pe = p.paintEngine(); -- pe->setSystemClip(clearedRect); -- q->icon().paint(&p, rect()); -- pe->setSystemClip(oldSystemClip); -- } else { -- p.setCompositionMode(QPainter::CompositionMode_Source); -- p.fillRect(rect(), Qt::transparent); -- p.setCompositionMode(QPainter::CompositionMode_SourceOver); -- q->icon().paint(&p, rect()); -+ Q_FOREACH(QSystemTrayIconPrivate *trayIconPrivate, trayIconPrivates) { -+ if (trayIconPrivate->sys) { -+ delete trayIconPrivate->sys; -+ trayIconPrivate->sys = 0; -+ } -+ // When visible is true, sys is usually not 0 but it can be 0 if the -+ // call to install_sys() failed. -+ if (trayIconPrivate->visible) { -+ trayIconPrivate->install_sys(); -+ } - } - } - --void QSystemTrayIconSys::mousePressEvent(QMouseEvent *ev) -+void QSystemTrayIconSysFactory::registerSystemTrayIconPrivate(QSystemTrayIconPrivate* trayIconPrivate) - { -- QPoint globalPos = ev->globalPos(); -- if (ev->button() == Qt::RightButton && q->contextMenu()) -- q->contextMenu()->popup(globalPos); -- -- if (QBalloonTip::isBalloonVisible()) { -- emit q->messageClicked(); -- QBalloonTip::hideBalloon(); -- } -- -- if (ev->button() == Qt::LeftButton) -- emit q->activated(QSystemTrayIcon::Trigger); -- else if (ev->button() == Qt::RightButton) -- emit q->activated(QSystemTrayIcon::Context); -- else if (ev->button() == Qt::MidButton) -- emit q->activated(QSystemTrayIcon::MiddleClick); -+ trayIconPrivates.insert(trayIconPrivate); - } - --void QSystemTrayIconSys::mouseDoubleClickEvent(QMouseEvent *ev) -+void QSystemTrayIconSysFactory::unregisterSystemTrayIconPrivate(QSystemTrayIconPrivate* trayIconPrivate) - { -- if (ev->button() == Qt::LeftButton) -- emit q->activated(QSystemTrayIcon::DoubleClick); -+ trayIconPrivates.remove(trayIconPrivate); - } - --#ifndef QT_NO_WHEELEVENT --void QSystemTrayIconSys::wheelEvent(QWheelEvent *e) -+QAbstractSystemTrayIconSys *QSystemTrayIconSysFactory::create(QSystemTrayIcon *trayIcon) const - { -- QApplication::sendEvent(q, e); -+ QSystemTrayIconSysFactoryInterface *f = factory(); -+ if (!f) { -+ qWarning("No systemtrayicon available"); -+ return 0; -+ } -+ return f->create(trayIcon); - } --#endif - --bool QSystemTrayIconSys::event(QEvent *e) -+bool QSystemTrayIconSysFactory::isAvailable() const - { -- if (e->type() == QEvent::ToolTip) { -- return QApplication::sendEvent(q, e); -- } -- return QWidget::event(e); -+ return factory(); - } - --bool QSystemTrayIconSys::x11Event(XEvent *event) -+//////////////////////////////////////////////// -+QSystemTrayIconPrivate::~QSystemTrayIconPrivate() - { -- if (event->type == ReparentNotify) -- show(); -- return QWidget::x11Event(event); -+ qt_guiSystemTrayIconSysFactory()->unregisterSystemTrayIconPrivate(this); -+ delete sys; - } - --//////////////////////////////////////////////////////////////////////////// - void QSystemTrayIconPrivate::install_sys() - { - Q_Q(QSystemTrayIcon); -- if (!sys) -- sys = new QSystemTrayIconSys(q); -+ if (!sys) { -+ // Register ourself even if create() fails: our "sys" will get created -+ // later by refreshTrayIconPrivates() if a systemtray becomes -+ // available. This situation can happen for applications which are -+ // started at login time, while the desktop itself is starting up. -+ qt_guiSystemTrayIconSysFactory()->registerSystemTrayIconPrivate(this); -+ sys = qt_guiSystemTrayIconSysFactory()->create(q); -+ if (!sys) { -+ return; -+ } -+ } -+ sys->updateVisibility(); - } - - QRect QSystemTrayIconPrivate::geometry_sys() const - { -- if (!sys) -- return QRect(); -- return QRect(sys->mapToGlobal(QPoint(0, 0)), sys->size()); -+ if (!sys || !visible) -+ return QRect(); -+ return sys->geometry(); - } - - void QSystemTrayIconPrivate::remove_sys() -@@ -350,35 +161,35 @@ void QSystemTrayIconPrivate::remove_sys( - if (!sys) - return; - QBalloonTip::hideBalloon(); -- sys->hide(); // this should do the trick, but... -- delete sys; // wm may resize system tray only for DestroyEvents -- sys = 0; -+ sys->updateVisibility(); - } - - void QSystemTrayIconPrivate::updateIcon_sys() - { -- if (!sys) -+ if (!sys || !visible) - return; - sys->updateIcon(); - } - - void QSystemTrayIconPrivate::updateMenu_sys() - { -- -+ if (!sys || !visible) -+ return; -+ sys->updateMenu(); - } - - void QSystemTrayIconPrivate::updateToolTip_sys() - { -- if (!sys) -+ if (!sys || !visible) - return; - #ifndef QT_NO_TOOLTIP -- sys->setToolTip(toolTip); -+ sys->updateToolTip(); - #endif - } - - bool QSystemTrayIconPrivate::isSystemTrayAvailable_sys() - { -- return QSystemTrayIconSys::locateSystemTray() != XNone; -+ return qt_guiSystemTrayIconSysFactory()->isAvailable(); - } - - bool QSystemTrayIconPrivate::supportsMessages_sys() -@@ -389,12 +200,9 @@ bool QSystemTrayIconPrivate::supportsMes - void QSystemTrayIconPrivate::showMessage_sys(const QString &message, const QString &title, - QSystemTrayIcon::MessageIcon icon, int msecs) - { -- if (!sys) -+ if (!sys || !visible) - return; -- QPoint g = sys->mapToGlobal(QPoint(0, 0)); -- QBalloonTip::showBalloon(icon, message, title, sys->q, -- QPoint(g.x() + sys->width()/2, g.y() + sys->height()/2), -- msecs); -+ sys->showMessage(message, title, icon, msecs); - } - - QT_END_NAMESPACE -Index: qt-everywhere-opensource-src-4.8.6/src/gui/util/qxembedsystemtrayicon_x11.cpp -=================================================================== ---- /dev/null -+++ qt-everywhere-opensource-src-4.8.6/src/gui/util/qxembedsystemtrayicon_x11.cpp -@@ -0,0 +1,469 @@ -+/**************************************************************************** -+** -+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). -+** All rights reserved. -+** Contact: Nokia Corporation (qt-info@nokia.com) -+** -+** This file is part of the QtGui module of the Qt Toolkit. -+** -+** $QT_BEGIN_LICENSE:LGPL$ -+** GNU Lesser General Public License Usage -+** This file may be used under the terms of the GNU Lesser General Public -+** License version 2.1 as published by the Free Software Foundation and -+** appearing in the file LICENSE.LGPL included in the packaging of this -+** file. Please review the following information to ensure the GNU Lesser -+** General Public License version 2.1 requirements will be met: -+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -+** -+** In addition, as a special exception, Nokia gives you certain additional -+** rights. These rights are described in the Nokia Qt LGPL Exception -+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -+** -+** GNU General Public License Usage -+** Alternatively, this file may be used under the terms of the GNU General -+** Public License version 3.0 as published by the Free Software Foundation -+** and appearing in the file LICENSE.GPL included in the packaging of this -+** file. Please review the following information to ensure the GNU General -+** Public License version 3.0 requirements will be met: -+** http://www.gnu.org/copyleft/gpl.html. -+** -+** Other Usage -+** Alternatively, this file may be used in accordance with the terms and -+** conditions contained in a signed written agreement between you and Nokia. -+** -+** -+** -+** -+** -+** $QT_END_LICENSE$ -+** -+****************************************************************************/ -+#include "qxembedsystemtrayicon_x11_p.h" -+ -+#ifndef QT_NO_SYSTEMTRAYICON -+ -+#include "private/qt_x11_p.h" -+#include "qapplication.h" -+#include "qevent.h" -+#include "qlist.h" -+#include "qmenu.h" -+#include "qpainter.h" -+#include "qpaintengine.h" -+#include "qsystemtrayicon_p.h" -+#include "qx11info_x11.h" -+ -+QT_BEGIN_INCLUDE_NAMESPACE -+#include -+#include -+#include -+#include -+QT_END_INCLUDE_NAMESPACE -+ -+QT_BEGIN_NAMESPACE -+ -+class QSystemTrayIconWidget : public QWidget -+{ -+public: -+ QSystemTrayIconWidget(QSystemTrayIcon *q, QXEmbedSystemTrayIconSys *s); -+ ~QSystemTrayIconWidget(); -+ -+ static Window locateSystemTray(); -+ -+protected: -+ void paintEvent(QPaintEvent *pe); -+ void resizeEvent(QResizeEvent *re); -+ bool x11Event(XEvent *event); -+ void mousePressEvent(QMouseEvent *event); -+ void mouseDoubleClickEvent(QMouseEvent *event); -+#ifndef QT_NO_WHEELEVENT -+ void wheelEvent(QWheelEvent *event); -+#endif -+ bool event(QEvent *e); -+ -+private: -+ enum { -+ SYSTEM_TRAY_REQUEST_DOCK = 0, -+ SYSTEM_TRAY_BEGIN_MESSAGE = 1, -+ SYSTEM_TRAY_CANCEL_MESSAGE =2 -+ }; -+ -+ void addToTray(); -+ static XVisualInfo* getSysTrayVisualInfo(); -+ -+ static Window sysTrayWindow; -+ static QList trayIcons; -+ static QCoreApplication::EventFilter oldEventFilter; -+ static bool sysTrayTracker(void *message, long *result); -+ static Atom sysTraySelection; -+ static XVisualInfo sysTrayVisual; -+ -+ QSystemTrayIcon *q; -+ QXEmbedSystemTrayIconSys *sys; -+ Colormap colormap; -+}; -+ -+Window QSystemTrayIconWidget::sysTrayWindow = XNone; -+QList QSystemTrayIconWidget::trayIcons; -+QCoreApplication::EventFilter QSystemTrayIconWidget::oldEventFilter = 0; -+Atom QSystemTrayIconWidget::sysTraySelection = XNone; -+XVisualInfo QSystemTrayIconWidget::sysTrayVisual = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; -+ -+QSystemTrayIconWidget::QSystemTrayIconWidget(QSystemTrayIcon* q, QXEmbedSystemTrayIconSys* sys) -+: QWidget(0, Qt::FramelessWindowHint | Qt::X11BypassWindowManagerHint) -+, q(q) -+, sys(sys) -+, colormap(0) -+{ -+ setAttribute(Qt::WA_AlwaysShowToolTips); -+ setAttribute(Qt::WA_QuitOnClose, false); -+ setAttribute(Qt::WA_NoSystemBackground, true); -+ setAttribute(Qt::WA_PaintOnScreen); -+ setMouseTracking(true); -+#ifndef QT_NO_TOOLTIP -+ setToolTip(q->toolTip()); -+#endif -+ -+ static bool eventFilterAdded = false; -+ Display *display = QX11Info::display(); -+ if (!eventFilterAdded) { -+ oldEventFilter = qApp->setEventFilter(sysTrayTracker); -+ eventFilterAdded = true; -+ Window root = QX11Info::appRootWindow(); -+ XWindowAttributes attr; -+ XGetWindowAttributes(display, root, &attr); -+ if ((attr.your_event_mask & StructureNotifyMask) != StructureNotifyMask) { -+ (void) QApplication::desktop(); // lame trick to ensure our event mask is not overridden -+ XSelectInput(display, root, attr.your_event_mask | StructureNotifyMask); // for MANAGER selection -+ } -+ } -+ if (trayIcons.isEmpty()) { -+ sysTrayWindow = locateSystemTray(); -+ if (sysTrayWindow != XNone) -+ XSelectInput(display, sysTrayWindow, StructureNotifyMask); // track tray events -+ } -+ trayIcons.append(this); -+ if (sysTrayWindow != XNone) -+ addToTray(); -+} -+ -+QSystemTrayIconWidget::~QSystemTrayIconWidget() -+{ -+ trayIcons.removeAt(trayIcons.indexOf(this)); -+ Display *display = QX11Info::display(); -+ if (trayIcons.isEmpty()) { -+ if (sysTrayWindow == XNone) -+ return; -+ if (display) -+ XSelectInput(display, sysTrayWindow, 0); // stop tracking the tray -+ sysTrayWindow = XNone; -+ } -+ if (colormap) -+ XFreeColormap(display, colormap); -+} -+ -+void QSystemTrayIconWidget::resizeEvent(QResizeEvent *re) -+{ -+ QWidget::resizeEvent(re); -+ update(); -+} -+ -+void QSystemTrayIconWidget::paintEvent(QPaintEvent*) -+{ -+ QPainter p(this); -+ if (!getSysTrayVisualInfo()) { -+ const QRegion oldSystemClip = p.paintEngine()->systemClip(); -+ const QRect clearedRect = oldSystemClip.boundingRect(); -+ XClearArea(QX11Info::display(), winId(), clearedRect.x(), clearedRect.y(), -+ clearedRect.width(), clearedRect.height(), False); -+ QPaintEngine *pe = p.paintEngine(); -+ pe->setSystemClip(clearedRect); -+ q->icon().paint(&p, rect()); -+ pe->setSystemClip(oldSystemClip); -+ } else { -+ p.setCompositionMode(QPainter::CompositionMode_Source); -+ p.fillRect(rect(), Qt::transparent); -+ p.setCompositionMode(QPainter::CompositionMode_SourceOver); -+ q->icon().paint(&p, rect()); -+ } -+} -+ -+void QSystemTrayIconWidget::mousePressEvent(QMouseEvent *ev) -+{ -+ QPoint globalPos = ev->globalPos(); -+ if (ev->button() == Qt::RightButton && q->contextMenu()) -+ q->contextMenu()->popup(globalPos); -+ -+ if (QBalloonTip::isBalloonVisible()) { -+ QMetaObject::invokeMethod(q, "messageClicked"); -+ QBalloonTip::hideBalloon(); -+ } -+ -+ if (ev->button() == Qt::LeftButton) -+ qtsystray_sendActivated(q, QSystemTrayIcon::Trigger); -+ else if (ev->button() == Qt::RightButton) -+ qtsystray_sendActivated(q, QSystemTrayIcon::Context); -+ else if (ev->button() == Qt::MidButton) -+ qtsystray_sendActivated(q, QSystemTrayIcon::MiddleClick); -+} -+ -+void QSystemTrayIconWidget::mouseDoubleClickEvent(QMouseEvent *ev) -+{ -+ if (ev->button() == Qt::LeftButton) -+ qtsystray_sendActivated(q, QSystemTrayIcon::DoubleClick); -+} -+ -+#ifndef QT_NO_WHEELEVENT -+void QSystemTrayIconWidget::wheelEvent(QWheelEvent *e) -+{ -+ sys->sendWheelEventToTrayIcon(e->delta(), e->orientation()); -+} -+#endif -+ -+bool QSystemTrayIconWidget::event(QEvent *e) -+{ -+ if (e->type() == QEvent::ToolTip) { -+ sys->sendToolTipEventToTrayIcon(); -+ } -+ return QWidget::event(e); -+} -+ -+bool QSystemTrayIconWidget::x11Event(XEvent *event) -+{ -+ if (event->type == ReparentNotify) -+ show(); -+ return QWidget::x11Event(event); -+} -+ -+// Locate the system tray -+Window QSystemTrayIconWidget::locateSystemTray() -+{ -+ Display *display = QX11Info::display(); -+ if (sysTraySelection == XNone) { -+ int screen = QX11Info::appScreen(); -+ QString net_sys_tray = QString::fromLatin1("_NET_SYSTEM_TRAY_S%1").arg(screen); -+ sysTraySelection = XInternAtom(display, net_sys_tray.toLatin1(), False); -+ } -+ -+ return XGetSelectionOwner(QX11Info::display(), sysTraySelection); -+} -+ -+XVisualInfo* QSystemTrayIconWidget::getSysTrayVisualInfo() -+{ -+ Display *display = QX11Info::display(); -+ -+ if (!sysTrayVisual.visual) { -+ Window win = locateSystemTray(); -+ if (win != XNone) { -+ Atom actual_type; -+ int actual_format; -+ ulong nitems, bytes_remaining; -+ uchar *data = 0; -+ int result = XGetWindowProperty(display, win, ATOM(_NET_SYSTEM_TRAY_VISUAL), 0, 1, -+ False, XA_VISUALID, &actual_type, -+ &actual_format, &nitems, &bytes_remaining, &data); -+ VisualID vid = 0; -+ if (result == Success && data && actual_type == XA_VISUALID && actual_format == 32 && -+ nitems == 1 && bytes_remaining == 0) -+ vid = *(VisualID*)data; -+ if (data) -+ XFree(data); -+ if (vid == 0) -+ return 0; -+ -+ uint mask = VisualIDMask; -+ XVisualInfo *vi, rvi; -+ int count; -+ rvi.visualid = vid; -+ vi = XGetVisualInfo(display, mask, &rvi, &count); -+ if (vi) { -+ sysTrayVisual = vi[0]; -+ XFree((char*)vi); -+ } -+ if (sysTrayVisual.depth != 32) -+ memset(&sysTrayVisual, 0, sizeof(sysTrayVisual)); -+ } -+ } -+ -+ return sysTrayVisual.visual ? &sysTrayVisual : 0; -+} -+ -+bool QSystemTrayIconWidget::sysTrayTracker(void *message, long *result) -+{ -+ bool retval = false; -+ if (QSystemTrayIconWidget::oldEventFilter) -+ retval = QSystemTrayIconWidget::oldEventFilter(message, result); -+ -+ if (trayIcons.isEmpty()) -+ return retval; -+ -+ Display *display = QX11Info::display(); -+ XEvent *ev = (XEvent *)message; -+ if (ev->type == DestroyNotify && ev->xany.window == sysTrayWindow) { -+ sysTrayWindow = locateSystemTray(); -+ memset(&sysTrayVisual, 0, sizeof(sysTrayVisual)); -+ for (int i = 0; i < trayIcons.count(); i++) { -+ if (sysTrayWindow == XNone) { -+ QBalloonTip::hideBalloon(); -+ trayIcons[i]->hide(); // still no luck -+ trayIcons[i]->destroy(); -+ trayIcons[i]->create(); -+ } else -+ trayIcons[i]->addToTray(); // add it to the new tray -+ } -+ retval = true; -+ } else if (ev->type == ClientMessage && sysTrayWindow == XNone) { -+ static Atom manager_atom = XInternAtom(display, "MANAGER", False); -+ XClientMessageEvent *cm = (XClientMessageEvent *)message; -+ if ((cm->message_type == manager_atom) && ((Atom)cm->data.l[1] == sysTraySelection)) { -+ sysTrayWindow = cm->data.l[2]; -+ memset(&sysTrayVisual, 0, sizeof(sysTrayVisual)); -+ XSelectInput(display, sysTrayWindow, StructureNotifyMask); -+ for (int i = 0; i < trayIcons.count(); i++) { -+ trayIcons[i]->addToTray(); -+ } -+ retval = true; -+ } -+ } else if (ev->type == PropertyNotify && ev->xproperty.atom == ATOM(_NET_SYSTEM_TRAY_VISUAL) && -+ ev->xproperty.window == sysTrayWindow) { -+ memset(&sysTrayVisual, 0, sizeof(sysTrayVisual)); -+ for (int i = 0; i < trayIcons.count(); i++) { -+ trayIcons[i]->addToTray(); -+ } -+ } -+ -+ return retval; -+} -+ -+void QSystemTrayIconWidget::addToTray() -+{ -+ Q_ASSERT(sysTrayWindow != XNone); -+ Display *display = QX11Info::display(); -+ -+ XVisualInfo *vi = getSysTrayVisualInfo(); -+ if (vi && vi->visual) { -+ Window root = RootWindow(display, vi->screen); -+ Window p = root; -+ if (QWidget *pw = parentWidget()) -+ p = pw->effectiveWinId(); -+ colormap = XCreateColormap(display, root, vi->visual, AllocNone); -+ XSetWindowAttributes wsa; -+ wsa.background_pixmap = 0; -+ wsa.colormap = colormap; -+ wsa.background_pixel = 0; -+ wsa.border_pixel = 0; -+ Window wid = XCreateWindow(display, p, -1, -1, 1, 1, -+ 0, vi->depth, InputOutput, vi->visual, -+ CWBackPixmap|CWBackPixel|CWBorderPixel|CWColormap, &wsa); -+ create(wid); -+ } else { -+ XSetWindowBackgroundPixmap(display, winId(), ParentRelative); -+ } -+ -+ // GNOME, NET WM Specification -+ static Atom netwm_tray_atom = XInternAtom(display, "_NET_SYSTEM_TRAY_OPCODE", False); -+ long l[5] = { CurrentTime, SYSTEM_TRAY_REQUEST_DOCK, static_cast(winId()), 0, 0 }; -+ XEvent ev; -+ memset(&ev, 0, sizeof(ev)); -+ ev.xclient.type = ClientMessage; -+ ev.xclient.window = sysTrayWindow; -+ ev.xclient.message_type = netwm_tray_atom; -+ ev.xclient.format = 32; -+ memcpy((char *)&ev.xclient.data, (const char *) l, sizeof(l)); -+ XSendEvent(display, sysTrayWindow, False, 0, &ev); -+ setMinimumSize(22, 22); // required at least on GNOME -+} -+ -+//////////////////////////////////////////////////////////////////////////// -+QXEmbedSystemTrayIconSys::QXEmbedSystemTrayIconSys(QSystemTrayIcon *q) -+: QAbstractSystemTrayIconSys(q) -+, widget(0) -+{ -+} -+ -+QXEmbedSystemTrayIconSys::~QXEmbedSystemTrayIconSys() -+{ -+ delete widget; -+} -+ -+QRect QXEmbedSystemTrayIconSys::geometry() const -+{ -+ if (!widget) -+ return QRect(); -+ return QRect(widget->mapToGlobal(QPoint(0, 0)), widget->size()); -+} -+ -+void QXEmbedSystemTrayIconSys::updateIcon() -+{ -+ if (!widget) -+ return; -+ widget->update(); -+} -+ -+void QXEmbedSystemTrayIconSys::updateToolTip() -+{ -+ if (!widget) -+ return; -+ widget->setToolTip(trayIcon->toolTip()); -+} -+ -+void QXEmbedSystemTrayIconSys::showMessage(const QString &message, const QString &title, -+ QSystemTrayIcon::MessageIcon icon, int msecs) -+{ -+ if (!widget) -+ return; -+ QPoint point = geometry().center(); -+ QBalloonTip::showBalloon(icon, message, title, trayIcon, point, msecs); -+} -+ -+void QXEmbedSystemTrayIconSys::updateVisibility() -+{ -+ bool visible = trayIcon->isVisible(); -+ if (visible && !widget) -+ widget = new QSystemTrayIconWidget(trayIcon, this); -+ else if (!visible && widget) { -+ delete widget; -+ widget = 0; -+ } -+} -+ -+void QXEmbedSystemTrayIconSys::sendToolTipEventToTrayIcon() -+{ -+#ifndef QT_NO_TOOLTIP -+ // Pass the event through QSystemTrayIcon so that it gets a chance to -+ // update the tooltip, then asks widget to show the tooltip -+ Q_ASSERT(widget); -+ QPoint globalPos = QCursor::pos(); -+ QPoint pos = widget->mapFromGlobal(globalPos); -+ QHelpEvent event(QEvent::ToolTip, pos, globalPos); -+ QApplication::sendEvent(trayIcon, &event); -+#endif -+} -+ -+void QXEmbedSystemTrayIconSys::sendWheelEventToTrayIcon(int delta, Qt::Orientation orientation) -+{ -+#ifndef QT_NO_WHEELEVENT -+ Q_ASSERT(widget); -+ QPoint globalPos = QCursor::pos(); -+ QPoint pos = widget->mapFromGlobal(globalPos); -+ QWheelEvent event(pos, globalPos, delta, Qt::NoButton, Qt::NoModifier, orientation); -+ QApplication::sendEvent(trayIcon, &event); -+#endif -+} -+ -+void QXEmbedSystemTrayIconSys::updateMenu() -+{ -+} -+ -+///////////////////////////////////////////////////////////// -+QAbstractSystemTrayIconSys * QXEmbedSystemTrayIconSysFactory::create(QSystemTrayIcon *icon) -+{ -+ return new QXEmbedSystemTrayIconSys(icon); -+} -+ -+bool QXEmbedSystemTrayIconSysFactory::isAvailable() const -+{ -+ return QSystemTrayIconWidget::locateSystemTray() != XNone; -+} -+ -+QT_END_NAMESPACE -+#endif //QT_NO_SYSTEMTRAYICON -Index: qt-everywhere-opensource-src-4.8.6/src/gui/util/qxembedsystemtrayicon_x11_p.h -=================================================================== ---- /dev/null -+++ qt-everywhere-opensource-src-4.8.6/src/gui/util/qxembedsystemtrayicon_x11_p.h -@@ -0,0 +1,104 @@ -+/**************************************************************************** -+** -+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). -+** All rights reserved. -+** Contact: Nokia Corporation (qt-info@nokia.com) -+** -+** This file is part of the QtGui module of the Qt Toolkit. -+** -+** $QT_BEGIN_LICENSE:LGPL$ -+** GNU Lesser General Public License Usage -+** This file may be used under the terms of the GNU Lesser General Public -+** License version 2.1 as published by the Free Software Foundation and -+** appearing in the file LICENSE.LGPL included in the packaging of this -+** file. Please review the following information to ensure the GNU Lesser -+** General Public License version 2.1 requirements will be met: -+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -+** -+** In addition, as a special exception, Nokia gives you certain additional -+** rights. These rights are described in the Nokia Qt LGPL Exception -+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -+** -+** GNU General Public License Usage -+** Alternatively, this file may be used under the terms of the GNU General -+** Public License version 3.0 as published by the Free Software Foundation -+** and appearing in the file LICENSE.GPL included in the packaging of this -+** file. Please review the following information to ensure the GNU General -+** Public License version 3.0 requirements will be met: -+** http://www.gnu.org/copyleft/gpl.html. -+** -+** Other Usage -+** Alternatively, this file may be used in accordance with the terms and -+** conditions contained in a signed written agreement between you and Nokia. -+** -+** -+** -+** -+** -+** $QT_END_LICENSE$ -+** -+****************************************************************************/ -+ -+#ifndef QXEMBEDSYSTEMTRAYICON_X11_P_H -+#define QXEMBEDSYSTEMTRAYICON_X11_P_H -+ -+// -+// W A R N I N G -+// ------------- -+// -+// This file is not part of the Qt API. It exists for the convenience -+// of a number of Qt sources files. This header file may change from -+// version to version without notice, or even be removed. -+// -+// We mean it. -+// -+ -+#ifndef QT_NO_SYSTEMTRAYICON -+ -+#include "qabstractsystemtrayiconsys_p.h" -+ -+QT_BEGIN_NAMESPACE -+ -+class QSystemTrayIconWidget; -+ -+class QXEmbedSystemTrayIconSys : public QAbstractSystemTrayIconSys -+{ -+public: -+ QXEmbedSystemTrayIconSys(QSystemTrayIcon *); -+ ~QXEmbedSystemTrayIconSys(); -+ -+ QRect geometry() const; -+ -+ void updateVisibility(); -+ -+ void updateIcon(); -+ -+ void updateToolTip(); -+ -+ void updateMenu(); -+ -+ void showMessage(const QString &message, const QString &title, -+ QSystemTrayIcon::MessageIcon icon, int msecs); -+ -+private: -+ friend class QSystemTrayIconWidget; -+ QSystemTrayIconWidget *widget; -+ -+ void sendToolTipEventToTrayIcon(); -+ -+ void sendWheelEventToTrayIcon(int delta, Qt::Orientation orientation); -+}; -+ -+struct QXEmbedSystemTrayIconSysFactory : public QSystemTrayIconSysFactoryInterface -+{ -+ QAbstractSystemTrayIconSys * create(QSystemTrayIcon *trayIcon); -+ bool isAvailable() const; -+}; -+ -+ -+QT_END_NAMESPACE -+ -+#endif // QT_NO_SYSTEMTRAYICON -+ -+#endif // QXEMBEDSYSTEMTRAYICON_X11_P_H -+ -Index: qt-everywhere-opensource-src-4.8.6/src/gui/util/util.pri -=================================================================== ---- qt-everywhere-opensource-src-4.8.6.orig/src/gui/util/util.pri -+++ qt-everywhere-opensource-src-4.8.6/src/gui/util/util.pri -@@ -29,8 +29,13 @@ wince* { - } - - unix:x11 { -+ HEADERS += \ -+ util/qabstractsystemtrayiconsys_p.h \ -+ util/qxembedsystemtrayicon_x11_p.h - SOURCES += \ -- util/qsystemtrayicon_x11.cpp -+ util/qabstractsystemtrayiconsys.cpp \ -+ util/qsystemtrayicon_x11.cpp \ -+ util/qxembedsystemtrayicon_x11.cpp - } - - embedded|qpa { diff --git a/desktop/toolkit/qt/files/opensuse/build-qvfb-tool.diff b/desktop/toolkit/qt/files/opensuse/build-qvfb-tool.diff deleted file mode 100644 index 085811baf8..0000000000 --- a/desktop/toolkit/qt/files/opensuse/build-qvfb-tool.diff +++ /dev/null @@ -1,13 +0,0 @@ -Index: tools/tools.pro -=================================================================== ---- tools/tools.pro.orig -+++ tools/tools.pro -@@ -37,6 +37,8 @@ mac { - - embedded:SUBDIRS += kmap2qmap - -+SUBDIRS += qvfb -+ - contains(QT_CONFIG, dbus):SUBDIRS += qdbus - # We don't need these command line utilities on embedded platforms. - !wince*:!symbian:contains(QT_CONFIG, xmlpatterns): SUBDIRS += xmlpatterns xmlpatternsvalidator diff --git a/desktop/toolkit/qt/files/opensuse/fix-moc-from-choking-on-boost-headers.patch b/desktop/toolkit/qt/files/opensuse/fix-moc-from-choking-on-boost-headers.patch deleted file mode 100644 index ed0f5e83e9..0000000000 --- a/desktop/toolkit/qt/files/opensuse/fix-moc-from-choking-on-boost-headers.patch +++ /dev/null @@ -1,12 +0,0 @@ ---- qt-snapshot/src/tools/moc/main.cpp 2013-03-16 19:09:31.954011186 +0100 -+++ qt-snapshot/src/tools/moc/main.cpp 2013-05-28 22:38:39.781681541 +0200 -@@ -190,6 +190,8 @@ int runMoc(int _argc, char **_argv) - - // Workaround a bug while parsing the boost/type_traits/has_operator.hpp header. See QTBUG-22829 - pp.macros["BOOST_TT_HAS_OPERATOR_HPP_INCLUDED"]; -+ pp.macros["BOOST_LEXICAL_CAST_INCLUDED"]; -+ pp.macros["BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION"]; - - QByteArray filename; - QByteArray output; - diff --git a/desktop/toolkit/qt/files/opensuse/fix_assistant_segfault_QTBUG-25324.patch b/desktop/toolkit/qt/files/opensuse/fix_assistant_segfault_QTBUG-25324.patch deleted file mode 100644 index 75bbdb7cf2..0000000000 --- a/desktop/toolkit/qt/files/opensuse/fix_assistant_segfault_QTBUG-25324.patch +++ /dev/null @@ -1,14 +0,0 @@ -Index: qt-everywhere-opensource-src-4.8.3/tools/assistant/tools/assistant/mainwindow.cpp -=================================================================== ---- qt-everywhere-opensource-src-4.8.3.orig/tools/assistant/tools/assistant/mainwindow.cpp -+++ qt-everywhere-opensource-src-4.8.3/tools/assistant/tools/assistant/mainwindow.cpp -@@ -945,8 +945,7 @@ void MainWindow::updateApplicationFont() - if (helpEngine.usesAppFont()) - font = helpEngine.appFont(); - -- const QWidgetList &widgets = qApp->allWidgets(); -- foreach (QWidget* widget, widgets) -+ foreach (QWidget* widget, QApplication::allWidgets()) - widget->setFont(font); - } - diff --git a/desktop/toolkit/qt/files/opensuse/handle-tga-files-properly.diff b/desktop/toolkit/qt/files/opensuse/handle-tga-files-properly.diff deleted file mode 100644 index 6fbe0cb7a1..0000000000 --- a/desktop/toolkit/qt/files/opensuse/handle-tga-files-properly.diff +++ /dev/null @@ -1,56 +0,0 @@ -Index: src/plugins/imageformats/tga/qtgafile.cpp -=================================================================== ---- src/plugins/imageformats/tga/qtgafile.cpp.orig -+++ src/plugins/imageformats/tga/qtgafile.cpp -@@ -41,6 +41,7 @@ - - #include "qtgafile.h" - -+#include - #include - #include - #include -@@ -266,3 +267,16 @@ QImage QTgaFile::readImage() - // TODO: add processing of TGA extension information - ie TGA 2.0 files - return im; - } -+/** -+ * Checks if device contains a valid tga image, *without* changing device -+ * position. -+ */ -+bool QTgaFile::canRead(QIODevice *device) -+{ -+ QByteArray header = device->peek(HeaderSize); -+ if (header.size() < HeaderSize) -+ return false; -+ QBuffer buffer(&header); -+ QTgaFile tga(&buffer); -+ return tga.isValid(); -+} -Index: src/plugins/imageformats/tga/qtgafile.h -=================================================================== ---- src/plugins/imageformats/tga/qtgafile.h.orig -+++ src/plugins/imageformats/tga/qtgafile.h -@@ -93,6 +93,8 @@ public: - inline QSize size() const; - inline Compression compression() const; - -+ static bool canRead(QIODevice *device); -+ - private: - static inline quint16 littleEndianInt(const unsigned char *d); - -Index: src/plugins/imageformats/tga/qtgahandler.cpp -=================================================================== ---- src/plugins/imageformats/tga/qtgahandler.cpp.orig -+++ src/plugins/imageformats/tga/qtgahandler.cpp -@@ -77,8 +77,7 @@ bool QTgaHandler::canRead(QIODevice *dev - qWarning("QTgaHandler::canRead() called with no device"); - return false; - } -- QTgaFile tga(device); -- return tga.isValid(); -+ return QTgaFile::canRead(device); - } - - bool QTgaHandler::read(QImage *image) diff --git a/desktop/toolkit/qt/files/opensuse/libqt4-libtool-nodate.diff b/desktop/toolkit/qt/files/opensuse/libqt4-libtool-nodate.diff deleted file mode 100644 index f2b43991a0..0000000000 --- a/desktop/toolkit/qt/files/opensuse/libqt4-libtool-nodate.diff +++ /dev/null @@ -1,13 +0,0 @@ -Index: qmake/generators/unix/unixmake2.cpp -=================================================================== ---- qmake/generators/unix/unixmake2.cpp.orig -+++ qmake/generators/unix/unixmake2.cpp -@@ -1301,7 +1301,7 @@ UnixMakefileGenerator::writeLibtoolFile( - QTextStream t(&ft); - t << "# " << lname << " - a libtool library file\n"; - t << "# Generated by qmake/libtool (" << qmake_version() << ") (Qt " -- << QT_VERSION_STR << ") on: " << QDateTime::currentDateTime().toString(); -+ << QT_VERSION_STR << ")"; - t << "\n"; - - t << "# The name that we can dlopen(3).\n" diff --git a/desktop/toolkit/qt/files/opensuse/no-moc-date.diff b/desktop/toolkit/qt/files/opensuse/no-moc-date.diff deleted file mode 100644 index fdc6b264bc..0000000000 --- a/desktop/toolkit/qt/files/opensuse/no-moc-date.diff +++ /dev/null @@ -1,26 +0,0 @@ ---- tools/qdbus/qdbusxml2cpp/qdbusxml2cpp.cpp.orig -+++ tools/qdbus/qdbusxml2cpp/qdbusxml2cpp.cpp -@@ -549,9 +549,11 @@ static void writeProxy(const QString &fi - } else { - includeGuard = QLatin1String("QDBUSXML2CPP_PROXY"); - } -+#if 0 - includeGuard = QString(QLatin1String("%1_%2")) - .arg(includeGuard) - .arg(QDateTime::currentDateTime().toTime_t()); -+#endif - hs << "#ifndef " << includeGuard << endl - << "#define " << includeGuard << endl - << endl; -@@ -855,9 +857,11 @@ static void writeAdaptor(const QString & - } else { - includeGuard = QLatin1String("QDBUSXML2CPP_ADAPTOR"); - } -+#if 0 - includeGuard = QString(QLatin1String("%1_%2")) - .arg(includeGuard) - .arg(QDateTime::currentDateTime().toTime_t()); -+#endif - hs << "#ifndef " << includeGuard << endl - << "#define " << includeGuard << endl - << endl; diff --git a/desktop/toolkit/qt/files/opensuse/qatomic-generic.patch b/desktop/toolkit/qt/files/opensuse/qatomic-generic.patch deleted file mode 100644 index 1f2347fd38..0000000000 --- a/desktop/toolkit/qt/files/opensuse/qatomic-generic.patch +++ /dev/null @@ -1,21 +0,0 @@ -Index: qt-everywhere-opensource-src-4.8.4/src/corelib/arch/qatomic_generic.h -=================================================================== ---- qt-everywhere-opensource-src-4.8.4.orig/src/corelib/arch/qatomic_generic.h -+++ qt-everywhere-opensource-src-4.8.4/src/corelib/arch/qatomic_generic.h -@@ -109,6 +109,16 @@ Q_CORE_EXPORT bool QBasicAtomicPointer_t - Q_CORE_EXPORT void *QBasicAtomicPointer_fetchAndStoreOrdered(void * volatile *, void *); - Q_CORE_EXPORT void *QBasicAtomicPointer_fetchAndAddOrdered(void * volatile *, qptrdiff); - -+inline bool QBasicAtomicPointer_testAndSetOrdered(void * volatile *_q_value, const void *expected_value, const void *newValue) -+{ -+ return QBasicAtomicPointer_testAndSetOrdered(_q_value, const_cast(expected_value), const_cast(newValue)); -+} -+ -+inline void *QBasicAtomicPointer_fetchAndStoreOrdered(void * volatile *_q_value, const void *newValue) -+{ -+ return QBasicAtomicPointer_fetchAndStoreOrdered(_q_value, const_cast(newValue)); -+} -+ - // Reference counting - - inline bool QBasicAtomicInt::ref() diff --git a/desktop/toolkit/qt/files/opensuse/qdbusconnection-no-warning-output.patch b/desktop/toolkit/qt/files/opensuse/qdbusconnection-no-warning-output.patch deleted file mode 100644 index eed366fd5b..0000000000 --- a/desktop/toolkit/qt/files/opensuse/qdbusconnection-no-warning-output.patch +++ /dev/null @@ -1,15 +0,0 @@ -Index: src/dbus/qdbusconnection.cpp -=================================================================== ---- src/dbus/qdbusconnection.cpp.orig -+++ src/dbus/qdbusconnection.cpp -@@ -1110,8 +1110,10 @@ public: - // make sure this connection is running on the main thread - QCoreApplication *instance = QCoreApplication::instance(); - if (!instance) { -+#ifndef QT_NO_DEBUG - qWarning("QDBusConnection: %s D-Bus connection created before QCoreApplication. Application may misbehave.", - type == SessionBus ? "session" : type == SystemBus ? "system" : "generic"); -+#endif - } else if (QDBusConnectionPrivate::d(*this)) { - QDBusConnectionPrivate::d(*this)->moveToThread(instance->thread()); - } diff --git a/desktop/toolkit/qt/files/opensuse/qfatal-noreturn.diff b/desktop/toolkit/qt/files/opensuse/qfatal-noreturn.diff deleted file mode 100644 index 2fafb87e42..0000000000 --- a/desktop/toolkit/qt/files/opensuse/qfatal-noreturn.diff +++ /dev/null @@ -1,12 +0,0 @@ -Index: src/corelib/global/qglobal.h -=================================================================== ---- src/corelib/global/qglobal.h.orig -+++ src/corelib/global/qglobal.h -@@ -1772,6 +1772,7 @@ Q_CORE_EXPORT void qCritical(const char - Q_CORE_EXPORT void qFatal(const char *, ...) /* print fatal message and exit */ - #if defined(Q_CC_GNU) && !defined(__INSURE__) - __attribute__ ((format (printf, 1, 2))) -+ __attribute__ ((noreturn)) - #endif - ; - diff --git a/desktop/toolkit/qt/files/opensuse/qlocale_icu-no-warning-output.patch b/desktop/toolkit/qt/files/opensuse/qlocale_icu-no-warning-output.patch deleted file mode 100644 index f54715e786..0000000000 --- a/desktop/toolkit/qt/files/opensuse/qlocale_icu-no-warning-output.patch +++ /dev/null @@ -1,61 +0,0 @@ -From b924fb26f14b38c5a92d7271b2eba73080cfb337 Mon Sep 17 00:00:00 2001 -From: Hrvoje Senjan -Date: Tue, 30 Jul 2013 01:02:38 +0200 -Subject: [PATCH 1/1] qlocale_icu-no-warning-output.patch - -Since openSUSE now has it's own icu so versioning, and -we can't predict what will happen in future, qWarnings -about icu libraries and symbols are now only emmited in -debug builds. This will be usefull regardless of icu versioning. - ---- - src/corelib/tools/qlocale_icu.cpp | 8 ++++++++ - 1 file changed, 8 insertions(+) - -diff --git a/src/corelib/tools/qlocale_icu.cpp b/src/corelib/tools/qlocale_icu.cpp -index c3e2907..ce09677 100644 ---- a/src/corelib/tools/qlocale_icu.cpp -+++ b/src/corelib/tools/qlocale_icu.cpp -@@ -84,7 +84,9 @@ bool qt_initIcu(const QString &localeString) - QLibrary lib(QLatin1String("icui18n"), QLatin1String(U_ICU_VERSION_SHORT)); - lib.setLoadHints(QLibrary::ImprovedSearchHeuristics); - if (!lib.load()) { -+#ifndef QT_NO_DEBUG - qWarning() << "Unable to load library icui18n" << lib.errorString(); -+#endif - status = ErrorLoading; - return false; - } -@@ -105,7 +107,9 @@ bool qt_initIcu(const QString &localeString) - ptr_ucol_close = 0; - ptr_ucol_strcoll = 0; - -+#ifndef QT_NO_DEBUG - qWarning("Unable to find symbols in icui18n"); -+#endif - status = ErrorLoading; - return false; - } -@@ -114,7 +118,9 @@ bool qt_initIcu(const QString &localeString) - QLibrary ucLib(QLatin1String("icuuc"), QLatin1String(U_ICU_VERSION_SHORT)); - ucLib.setLoadHints(QLibrary::ImprovedSearchHeuristics); - if (!ucLib.load()) { -+#ifndef QT_NO_DEBUG - qWarning() << "Unable to load library icuuc" << ucLib.errorString(); -+#endif - status = ErrorLoading; - return false; - } -@@ -131,7 +137,9 @@ bool qt_initIcu(const QString &localeString) - ptr_u_strToUpper = 0; - ptr_u_strToLower = 0; - -+#ifndef QT_NO_DEBUG - qWarning("Unable to find symbols in icuuc"); -+#endif - status = ErrorLoading; - return false; - } --- -1.8.3.1 - diff --git a/desktop/toolkit/qt/files/opensuse/qt-debug-timer.diff b/desktop/toolkit/qt/files/opensuse/qt-debug-timer.diff deleted file mode 100644 index 585ba294c6..0000000000 --- a/desktop/toolkit/qt/files/opensuse/qt-debug-timer.diff +++ /dev/null @@ -1,26 +0,0 @@ -Index: src/corelib/kernel/qeventdispatcher_unix.cpp -=================================================================== ---- src/corelib/kernel/qeventdispatcher_unix.cpp.orig -+++ src/corelib/kernel/qeventdispatcher_unix.cpp -@@ -592,6 +592,21 @@ int QTimerInfoList::activateTimers() - - if (!firstTimerInfo) { - firstTimerInfo = currentTimerInfo; -+ QObject* o = firstTimerInfo->obj; -+ static int debug_timer = -1; -+ if (debug_timer < 0) -+ debug_timer = getenv("QT_DEBUG_TIMER") ? 1 : 0; -+ if (debug_timer > 0) { -+ QString objPath = o->objectName(); -+ if(objPath.isEmpty()) objPath = QLatin1String("<") + o->parent()->metaObject()->className() + QLatin1String(">"); -+ for (; o->parent(); o = o->parent()) -+ if (!o->parent()->objectName().isEmpty()) -+ objPath.prepend(o->parent()->objectName() + "/"); -+ else -+ objPath.prepend(QLatin1String("<") + o->parent()->metaObject()->className() + QLatin1String(">/")); -+ qDebug("activating %d ms timer for %s", firstTimerInfo->interval.tv_sec * 1000 -+ + firstTimerInfo->interval.tv_usec / 1000, qPrintable(objPath)); -+ } - } else if (firstTimerInfo == currentTimerInfo) { - // avoid sending the same timer multiple times - break; diff --git a/desktop/toolkit/qt/files/opensuse/qt-never-strip.diff b/desktop/toolkit/qt/files/opensuse/qt-never-strip.diff deleted file mode 100644 index 81e9c67e18..0000000000 --- a/desktop/toolkit/qt/files/opensuse/qt-never-strip.diff +++ /dev/null @@ -1,30 +0,0 @@ -Index: configure -=================================================================== ---- configure.orig -+++ configure -@@ -65,7 +65,6 @@ OPT_CMDLINE=`echo $@ | sed "s,-v ,,g; s, - - # initialize global variables - QMAKE_SWITCHES= --QMAKE_VARS= - QMAKE_CONFIG= - QTCONFIG_CONFIG= - QT_CONFIG= -@@ -1625,7 +1624,7 @@ while [ "$#" -gt 0 ]; do - QMakeVar add QMAKE_CFLAGS -pg - QMakeVar add QMAKE_CXXFLAGS -pg - QMakeVar add QMAKE_LFLAGS -pg -- QMAKE_VARS="$QMAKE_VARS CONFIG+=nostrip" -+ QMakeVar add CONFIG nostrip - else - UNKNOWN_OPT=yes - fi -@@ -3359,6 +3358,8 @@ if [ "$OPT_VERBOSE" = "yes" ]; then - fi - fi - -+QMakeVar add CONFIG nostrip -+ - #------------------------------------------------------------------------------- - # tests that don't need qmake (must be run before displaying help) - #------------------------------------------------------------------------------- diff --git a/desktop/toolkit/qt/files/opensuse/use-freetype-default.diff b/desktop/toolkit/qt/files/opensuse/use-freetype-default.diff deleted file mode 100644 index e7b94a80b2..0000000000 --- a/desktop/toolkit/qt/files/opensuse/use-freetype-default.diff +++ /dev/null @@ -1,40 +0,0 @@ -Index: src/gui/text/qfontengine_x11.cpp -=================================================================== ---- src/gui/text/qfontengine_x11.cpp.orig -+++ src/gui/text/qfontengine_x11.cpp -@@ -967,6 +967,26 @@ Q_GUI_EXPORT void qt_x11ft_convert_patte - *antialias = b; - } - -+#include -+#include FT_FREETYPE_H -+#include FT_LCD_FILTER_H -+ -+static bool subpixel_rendering_available() -+{ -+ static int implemented = -1; -+ -+ if (implemented >= 0) -+ return implemented; -+ -+ extern FT_Library qt_getFreetype(); -+ FT_Library lib = qt_getFreetype(); -+ -+ if (FT_Err_Unimplemented_Feature == -+ FT_Library_SetLcdFilter(lib, FT_LCD_FILTER_DEFAULT )) -+ return (implemented = false); -+ -+ return (implemented = true); -+} - - QFontEngineX11FT::QFontEngineX11FT(FcPattern *pattern, const QFontDef &fd, int screen) - : QFontEngineFT(fd) -@@ -984,7 +1004,7 @@ QFontEngineX11FT::QFontEngineX11FT(FcPat - canUploadGlyphsToServer = QApplication::testAttribute(Qt::AA_X11InitThreads) || (qApp->thread() == QThread::currentThread()); - - subpixelType = Subpixel_None; -- if (antialias) { -+ if (subpixel_rendering_available() && antialias) { - int subpixel = X11->display ? X11->screens[screen].subpixel : FC_RGBA_UNKNOWN; - if (subpixel == FC_RGBA_UNKNOWN) - (void) FcPatternGetInteger(pattern, FC_RGBA, 0, &subpixel); diff --git a/desktop/toolkit/qt/files/turkish.patch.bz2 b/desktop/toolkit/qt/files/turkish.patch.bz2 deleted file mode 100644 index 16b3bc68b64b398323790725e122f5b069ee4db2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35990 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 a*{~zFnVjMU=IDp~Mck226eKv@M - - - - qt - http://qt.nokia.com - - PisiLinux Community - admins@pisilinux.org - - LGPLv2.1 - GPLv3 - library -

Qt toolkit version 4 - Qt is a cross platform GUI toolkit. - http://download.qt-project.org/official_releases/qt/4.8/4.8.6/qt-everywhere-opensource-src-4.8.6.tar.gz - - mariadb-lib - cups-devel - mesa-devel - gtk2-devel - tiff-devel - libSM-devel - libICE-devel - libmng-devel - libXext-devel - alsa-lib-devel - firebird-devel - unixODBC-devel - libXrandr-devel - gstreamer-devel - fontconfig-devel - libXrender-devel - postgresql-server - libjpeg-turbo-devel - firebird-superserver - gst-plugins-base-devel - qtchooser - - - - fedora/qt-everywhere-opensource-src-4.8.0-tp-multilib-optflags.patch - fedora/qt-everywhere-opensource-src-4.8.5-uic_multilib.patch - fedora/qt-everywhere-opensource-src-4.8.5-webcore_debuginfo.patch - fedora/qt-cupsEnumDests.patch - fedora/qt-x11-opensource-src-4.5.1-enable_ft_lcdfilter.patch - fedora/qt-everywhere-opensource-src-4.6.3-glib_eventloop_nullcheck.patch - fedora/qt-everywhere-opensource-src-4.8.1-qt3support_debuginfo.patch - fedora/qt-everywhere-opensource-src-4.8.5-qt_plugin_path.patch - fedora/qt-everywhere-opensource-src-4.8.4-qmake_pkgconfig_requires_private.patch - fedora/qt-x11-opensource-src-4.5.0-fix-qatomic-inline-asm.patch - fedora/qt-everywhere-opensource-src-4.8.5-mysql_config.patch - fedora/qt-everywhere-opensource-src-4.6.2-cups.patch - fedora/qt-everywhere-opensource-src-4.8.5-QTBUG-14467.patch - fedora/qt-everywhere-opensource-src-4.8.3-no_Werror.patch - fedora/qt-everywhere-opensource-src-4.8.0-QTBUG-22037.patch - fedora/qt-everywhere-opensource-src-4.8.5-QTBUG-21900.patch - fedora/qt-everywhere-opensource-src-4.8.5-tds_no_strict_aliasing.patch - fedora/qt-everywhere-opensource-src-4.8.5-QTBUG-4862.patch - fedora/qt-everywhere-opensource-src-4.8.5-QTBUG-35459.patch - fedora/qt-everywhere-opensource-src-4.8.5-qgtkstyle_disable_gtk_theme_check.patch - - fedora/qt-everywhere-opensource-src-4.8.6-QTBUG-34614.patch - fedora/qt-everywhere-opensource-src-4.8.6-QTBUG-37380.patch - fedora/qt-everywhere-opensource-src-4.8.6-QTBUG-38585.patch - - opensuse/qt-never-strip.diff - opensuse/use-freetype-default.diff - opensuse/0191-listview-alternate-row-colors.diff - opensuse/0188-fix-moc-parser-same-name-header.diff - opensuse/0195-compositing-properties.diff - opensuse/0180-window-role.diff - opensuse/0225-invalidate-tabbar-geometry-on-refresh.patch - opensuse/qt-debug-timer.diff - opensuse/qfatal-noreturn.diff - opensuse/no-moc-date.diff - opensuse/libqt4-libtool-nodate.diff - opensuse/build-qvfb-tool.diff - opensuse/handle-tga-files-properly.diff - opensuse/qdbusconnection-no-warning-output.patch - opensuse/fix_assistant_segfault_QTBUG-25324.patch - opensuse/qatomic-generic.patch - opensuse/QSystemTrayicon.diff - opensuse/fix-moc-from-choking-on-boost-headers.patch - opensuse/qlocale_icu-no-warning-output.patch - opensuse/0001-Don-t-crash-on-broken-GIF-images.patch - - CVE-2014-0190.patch - - turkish.patch.bz2 - - mkspecs.patch - - - - - qt - - mesa - tiff - libICE - libSM - libmng - libXext - alsa-lib - gstreamer - fontconfig - libXrender - libjpeg-turbo - qtchooser - - - /etc - /usr/lib/qt4/bin - /usr/bin/qdbus* - /usr/bin/qtconfig - /usr/lib - /usr/share/applications - /usr/lib/qt4/imports - /usr/lib/qt4/templates - /usr/share/qt4/translations/*_tr.* - - - data/qdbusviewer.desktop - data/qtconfig.desktop - - - - - qt-32bit - emul32 - 32-bit shared libraries for qt - emul32 - - mesa-32bit - tiff-32bit - dbus-32bit - zlib-32bit - glib2-32bit - libSM-32bit - libpng-32bit - libmng-32bit - libICE-32bit - libX11-32bit - sqlite-32bit - openssl-32bit - libXext-32bit - freetype-32bit - alsa-lib-32bit - libXrender-32bit - fontconfig-32bit - libjpeg-turbo-32bit - - - uClibc - mesa-32bit - tiff-32bit - dbus-32bit - zlib-32bit - libSM-32bit - glib2-32bit - libX11-32bit - libpng-32bit - libmng-32bit - libICE-32bit - sqlite-32bit - openssl-32bit - libXext-32bit - freetype-32bit - alsa-lib-32bit - libXrender-32bit - fontconfig-32bit - libjpeg-turbo-32bit - qt - - - /usr/lib32 - - - - - qt-webkit - - qt - gstreamer - libXrender - gst-plugins-base - - - /usr/lib/*WebKit* - - - - - qt-webkit-32bit - emul32 - 32-bit shared libraries for qt-webkit - emul32 - - glib2-32bit - libX11-32bit - sqlite-32bit - gstreamer-32bit - libXrender-32bit - gst-plugins-base-32bit - - - qt-webkit - qt-32bit - glib2-32bit - libX11-32bit - sqlite-32bit - gstreamer-32bit - libXrender-32bit - gst-plugins-base-32bit - - - /usr/lib32/*WebKit* - - - - - qt-webkit-devel - Development files for Qt Webkit - - qt-devel - - - /usr/include/Qt/*WebKit* - /usr/include/Qt/*webkit* - /usr/include/QtWebKit - /usr/lib/pkgconfig/*WebKit* - - - - - qt-devel - Development files for Qt - - qt - - mesa-devel - - - - /usr/bin - /usr/include - /usr/share/qt4/mkspecs - /usr/lib/pkgconfig - /usr/lib32/pkgconfig - /usr/share/qt4/q3porting.xml - - - - - qt-l10n - locale - Translation files for Qt library and tools. Supported languages are: da, de, fr, ja, pl, ru, zh_CN, zh_TW - - /usr/share/qt4/translations - - - - - qt-designer - designer - - qt - qt-webkit - - - /usr/bin/designer - /usr/lib/qt4/plugins/designer - /usr/share/applications/designer.desktop - /usr/share/pixmaps/designer.png - - - data/designer.desktop - data/designer.png - - - - - qt-linguist - linguist - - qt - - - /usr/bin/linguist - /usr/share/qt4/phrasebooks - /usr/share/applications/linguist.desktop - /usr/share/pixmaps/linguist.png - - - data/linguist.desktop - data/linguist.png - - - - - qt-docs - assistant - Development documents of Qt and Qt Assistant tool - - qt - qt-webkit - - - /usr/bin/assistant - /usr/share/applications/assistant.desktop - /usr/share/pixmaps/assistant.png - /usr/share/icons - /usr/share/doc - /usr/share/doc/qt4/qch - - - data/assistant.desktop - data/assistant.png - data/hi128-app-qt4-logo.png - data/hi48-app-qt4-logo.png - - - - - qt-docs-html - Development documents of Qt in HTML format - - /usr/share/doc/qt4/html - - - - - qt-demos - qt4-logo - - qt - qt-webkit - mesa - phonon - - - /usr/bin/qtdemo - /usr/lib/qt4/demos - /usr/lib/qt4/examples - /usr/lib/qt4/plugins/designer/libarthurplugin.so - /usr/share/applications/qtdemo.desktop - /usr/tests/qt4 - - - data/qtdemo.desktop - - - - - qt-sql-mysql - - qt - mariadb-lib - - - /usr/lib/qt4/plugins/sqldrivers/libqsqlmysql.so - - - - - qt-sql-postgresql - - qt - postgresql-lib - - - /usr/lib/qt4/plugins/sqldrivers/libqsqlpsql.so - - - - - qt-sql-sqlite - - qt - sqlite - - - /usr/lib/qt4/plugins/sqldrivers/libqsqlite.so - - - - - qt-sql-odbc - - qt - unixODBC - - - /usr/lib/qt4/plugins/sqldrivers/libqsqlodbc.so - - - - - qt-sql-ibase - - qt - firebird-client - - - /usr/lib/qt4/plugins/sqldrivers/libqsqlibase.so - - - - - - 2015-04-09 - 4.8.6 - Rebuild for qt5 - Ayhan Yalçınsoy - ayhanyalcinsoy@pisilinux.org - - - 2014-05-20 - 4.8.6 - Version bump, fix CVE. - Serdar Soytetir - kaptan@pisilinux.org - - - 2014-04-10 - 4.8.5 - Rebuild. - Serdar Soytetir - kaptan@pisilinux.org - - - 2014-02-21 - 4.8.5 - Rebuild for Mariadb. - Serdar Soytetir - kaptan@pisilinux.org - - - 2014-02-01 - 4.8.5 - Rebuild for new libmng. - Serdar Soytetir - kaptan@pisilinux.org - - - 2013-12-14 - 4.8.5 - Re-cleanup qt, fix systemtray issues. - Serdar Soytetir - kaptan@pisilinux.org - - - 2013-12-11 - 4.8.5 - Cleanup some patches, rebuild. - Serdar Soytetir - kaptan@pisilinux.org - - - 2013-08-05 - 4.8.5 - Patched. - Osman Erkan - osman.erkan@pisilinux.org - - - 2013-07-03 - 4.8.5 - Version bump. - Marcin Bojara - marcin@pisilinux.org - - - 2013-03-11 - 4.8.4 - Patch cleanup, add some enhancements. - Serdar Soytetir - kaptan@pisilinux.org - - - 2013-02-15 - 4.8.4 - Add emul32 - Marcin Bojara - marcin@pisilinux.org - - - 2012-12-08 - 4.8.4 - First release - Yusuf Aydemir - yusuf.aydemir@pisilinux.org - - - diff --git a/desktop/toolkit/qt/translations.xml b/desktop/toolkit/qt/translations.xml deleted file mode 100644 index fc38bd2536..0000000000 --- a/desktop/toolkit/qt/translations.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - - qt - Qt araç takımı, sürüm 4 - Qt bir çok platformda çalışabilen ve grafiksel kullanıcı arayüzü (GUI) oluşturmaya yarayan bir araç takımıdır. - Qt est une boîte à outils graphique multi-plateforme. - Qt es un toolkit para GUI multiplataforma. - - - - qt-devel - Qt için geliştirme dosyaları - - - - qt-webkit-devel - Qt Webkit için geliştirme dosyaları - - - - qt-l10n - Qt kitaplık ve araçları için dil dosyaları. Desteklenen diller: da, de, fr, ja, pl, ru, zh_CN, zh_TW - - - - qt-docs - Qt için geliştirme belgeleri ve Qt Assistant aracı - - - - qt-docs-html - Qt için HTML biçiminde geliştirme belgeleri - - From 85520a1c4d1ab505c9f5e618237a367ef93854ee Mon Sep 17 00:00:00 2001 From: alihanozturk Date: Tue, 1 Sep 2015 22:04:01 +0300 Subject: [PATCH 09/13] qtchooser: delete --- desktop/toolkit/qtchooser/actions.py | 20 -------- desktop/toolkit/qtchooser/files/4.conf | 2 - desktop/toolkit/qtchooser/files/5.conf | 2 - desktop/toolkit/qtchooser/pspec.xml | 56 ---------------------- desktop/toolkit/qtchooser/translations.xml | 8 ---- 5 files changed, 88 deletions(-) delete mode 100644 desktop/toolkit/qtchooser/actions.py delete mode 100644 desktop/toolkit/qtchooser/files/4.conf delete mode 100644 desktop/toolkit/qtchooser/files/5.conf delete mode 100644 desktop/toolkit/qtchooser/pspec.xml delete mode 100644 desktop/toolkit/qtchooser/translations.xml diff --git a/desktop/toolkit/qtchooser/actions.py b/desktop/toolkit/qtchooser/actions.py deleted file mode 100644 index 01df7431ec..0000000000 --- a/desktop/toolkit/qtchooser/actions.py +++ /dev/null @@ -1,20 +0,0 @@ -#!/usr/bin/python -# -*- coding: utf-8 -*- -# -# Licensed under the GNU General Public License, version 3. -# See the file http://www.gnu.org/licenses/gpl.txt - -from pisi.actionsapi import autotools -from pisi.actionsapi import pisitools -from pisi.actionsapi import get - -def build(): - autotools.make() - -def install(): - autotools.install() - - pisitools.dodir("/etc/xdg/qtchooser") - pisitools.dosym("qt4.conf", "/etc/xdg/qtchooser/default.conf") - - pisitools.dodoc("LICENSE.LGPL", "LGPL_EXCEPTION.txt") diff --git a/desktop/toolkit/qtchooser/files/4.conf b/desktop/toolkit/qtchooser/files/4.conf deleted file mode 100644 index 96e344eba9..0000000000 --- a/desktop/toolkit/qtchooser/files/4.conf +++ /dev/null @@ -1,2 +0,0 @@ -/usr/lib/qt4/bin -/usr/lib diff --git a/desktop/toolkit/qtchooser/files/5.conf b/desktop/toolkit/qtchooser/files/5.conf deleted file mode 100644 index edaadebd82..0000000000 --- a/desktop/toolkit/qtchooser/files/5.conf +++ /dev/null @@ -1,2 +0,0 @@ -/usr/lib/qt5/bin -/usr/lib diff --git a/desktop/toolkit/qtchooser/pspec.xml b/desktop/toolkit/qtchooser/pspec.xml deleted file mode 100644 index 95861c54f0..0000000000 --- a/desktop/toolkit/qtchooser/pspec.xml +++ /dev/null @@ -1,56 +0,0 @@ - - - - - qtchooser - http://qt.gitorious.org/qt/qtchooser - - Yusuf Aydemir - yusuf.aydemir@pisilinux.org - - GPLv1 - library - Wrap the other Qt tools by searching for different instances of Qt on the system - Wrap the other Qt tools by searching for different instances of Qt on the system - http://source.pisilinux.org/1.0/qt-qtchooser-48.tar.gz - - - - qtchooser - - libgcc - - - /usr/bin - /etc - /usr/lib - /usr/include - /usr/share - /usr/share/locale - /usr/share/man - /usr/share/info - /usr/share/doc - - - 4.conf - 5.conf - - - - - - 2015-02-15 - 48 - Version bump - Ayhan Yalçınsoy - ayhanyalcinsoy@pisilinux.org - - - 2014-05-26 - 41 - First release - Yusuf Aydemir - yusuf.aydemir@pisilinux.org - - - diff --git a/desktop/toolkit/qtchooser/translations.xml b/desktop/toolkit/qtchooser/translations.xml deleted file mode 100644 index bffe2d9bb9..0000000000 --- a/desktop/toolkit/qtchooser/translations.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - qtchooser - Wrap the other Qt tools by searching for different instances of Qt on the system - Wrap the other Qt tools by searching for different instances of Qt on the system - - From 9197a96e7294429e6d59f8eca62a920e311d92b3 Mon Sep 17 00:00:00 2001 From: alihanozturk Date: Tue, 1 Sep 2015 22:14:09 +0300 Subject: [PATCH 10/13] kdepim-runtime:delete --- desktop/kde/base/kdepim-runtime/actions.py | 16 -- ...epim-runtime-4.4.93-show_akonadi_kcm.patch | 15 -- desktop/kde/base/kdepim-runtime/pspec.xml | 224 ------------------ .../kde/base/kdepim-runtime/translations.xml | 8 - 4 files changed, 263 deletions(-) delete mode 100644 desktop/kde/base/kdepim-runtime/actions.py delete mode 100644 desktop/kde/base/kdepim-runtime/files/kdepim-runtime-4.4.93-show_akonadi_kcm.patch delete mode 100644 desktop/kde/base/kdepim-runtime/pspec.xml delete mode 100644 desktop/kde/base/kdepim-runtime/translations.xml diff --git a/desktop/kde/base/kdepim-runtime/actions.py b/desktop/kde/base/kdepim-runtime/actions.py deleted file mode 100644 index d105d0518e..0000000000 --- a/desktop/kde/base/kdepim-runtime/actions.py +++ /dev/null @@ -1,16 +0,0 @@ -#!/usr/bin/python -# -*- coding: utf-8 -*- -# -# Licensed under the GNU General Public License, version 3. -# See the file http://www.gnu.org/licenses/gpl.txt - -from pisi.actionsapi import kde4 - -def setup(): - kde4.configure() - -def build(): - kde4.make() - -def install(): - kde4.install() diff --git a/desktop/kde/base/kdepim-runtime/files/kdepim-runtime-4.4.93-show_akonadi_kcm.patch b/desktop/kde/base/kdepim-runtime/files/kdepim-runtime-4.4.93-show_akonadi_kcm.patch deleted file mode 100644 index ca1b9fdeff..0000000000 --- a/desktop/kde/base/kdepim-runtime/files/kdepim-runtime-4.4.93-show_akonadi_kcm.patch +++ /dev/null @@ -1,15 +0,0 @@ -diff -up kdepim-runtime-4.4.93/kcm/kcm_akonadi.desktop.show-akonadi-kcm kdepim-runtime-4.4.93/kcm/kcm_akonadi.desktop ---- kdepim-runtime-4.4.93/kcm/kcm_akonadi.desktop.show-akonadi-kcm 2010-08-31 08:04:08.000000000 -0500 -+++ kdepim-runtime-4.4.93/kcm/kcm_akonadi.desktop 2010-09-08 08:52:40.689479608 -0500 -@@ -8,9 +8,10 @@ X-KDE-ModuleType=Library - X-KDE-Library=kcm_akonadi - X-KDE-FactoryName=kcm_akonadi - X-KDE-HasReadOnlyMode=false --X-KDE-ParentApp= -+X-KDE-ParentApp=kcontrol - X-KDE-ParentComponents= - X-KDE-CfgDlgHierarchy= -+X-KDE-System-Settings-Parent-Category=workspace-appearance-and-behavior - - Name=Akonadi Configuration - Name[ar]=ضبط اكوندا diff --git a/desktop/kde/base/kdepim-runtime/pspec.xml b/desktop/kde/base/kdepim-runtime/pspec.xml deleted file mode 100644 index ab110158cd..0000000000 --- a/desktop/kde/base/kdepim-runtime/pspec.xml +++ /dev/null @@ -1,224 +0,0 @@ - - - - - kdepim-runtime - http://community.kde.org/KDE_PIM - - PisiLinux Community - admins@pisilinux.org - - LGPLv2 - kontact - library - app:gui - KDE4 PIM Runtime Environment - kdepim-runtime contains KDE4 PIM (Personal Information Management) runtime environment like akonadi agents. - mirrors://kde/stable/4.14.3/src/kdepim-runtime-4.14.3.tar.xz - - boost-devel - akonadi-devel - soprano-devel - libdmtx-devel - libkolab-devel - qrencode-devel - libkgapi-devel - libkfbapi-devel - shared-desktop-ontologies - kdelibs-devel - kdepimlibs-devel - kactivities-devel - shared-mime-info - - - kdepim-runtime-4.4.93-show_akonadi_kcm.patch - - - - - kdepim-runtime - - akonadi-facebook - - - qt - akonadi - libkgapi - libkolab - libqjson - libkfbapi - kdelibs - kdepimlibs - shared-mime-info - - - /usr/lib - /usr/bin - /usr/share/mime - /usr/share/kde4 - /usr/share/icons - /usr/share/dbus-1 - /usr/share/akonadi - /usr/share/ontology - /usr/share/autostart - /usr/share/applications - - - - - - 2014-11-13 - 4.14.3 - Version bump. - Yusuf Aydemir - yusuf.aydemir@pisilinux.org - - - 2014-10-15 - 4.14.2 - Version bump. - Yusuf Aydemir - yusuf.aydemir@pisilinux.org - - - 2014-09-20 - 4.14.1 - Version bump. - Yusuf Aydemir - yusuf.aydemir@pisilinux.org - - - 2014-08-21 - 4.14.0 - Version bump. - Yusuf Aydemir - yusuf.aydemir@pisilinux.org - - - 2014-06-13 - 4.13.2 - Version bump. - Yusuf Aydemir - yusuf.aydemir@pisilinux.org - - - 2014-05-13 - 4.13.1 - Version bump. - Yusuf Aydemir - yusuf.aydemir@pisilinux.org - - - 2014-05-03 - 4.13.0 - Version bump. - PisiLinux Community - admins@pisilinux.org - - - 2014-04-05 - 4.12.4 - Version bump. - PisiLinux Community - admins@pisilinux.org - - - 2014-03-04 - 4.12.3 - Version bump. - Yusuf Aydemir - yusuf.aydemir@pisilinux.org - - - 2014-02-06 - 4.12.2 - Version bump. - Yusuf Aydemir - yusuf.aydemir@pisilinux.org - - - 2014-01-13 - 4.11.5 - Version bump. - Yusuf Aydemir - yusuf.aydemir@pisilinux.org - - - 2013-12-03 - 4.11.4 - Version bump. - Yusuf Aydemir - yusuf.aydemir@pisilinux.org - - - 2013-11-05 - 4.11.3 - Version bump. - Yusuf Aydemir - yusuf.aydemir@pisilinux.org - - - 2013-10-02 - 4.11.2 - Version bump. - Yusuf Aydemir - yusuf.aydemir@pisilinux.org - - - 2013-09-07 - 4.11.1 - Version bump. - Yusuf Aydemir - yusuf.aydemir@pisilinux.org - - - 2013-07-02 - 4.10.5 - Version bump. - Yusuf Aydemir - yusuf.aydemir@pisilinux.org - - - 2013-06-10 - 4.10.4 - Version bump. - Yusuf Aydemir - yusuf.aydemir@pisilinux.org - - - 2013-05-06 - 4.10.3 - Version bump. - Yusuf Aydemir - yusuf.aydemir@pisilinux.org - - - 2013-04-03 - 4.10.2 - Version bump - Yusuf Aydemir - yusuf.aydemir@pisilinux.org - - - 2013-03-06 - 4.10.1 - Version bump - Yusuf Aydemir - yusuf.aydemir@pisilinux.org - - - 2013-02-15 - 4.10.0 - Version bump - Yusuf Aydemir - yusuf.aydemir@pisilinux.org - - - 2013-01-19 - 4.9.98 - First release - Yusuf Aydemir - yusuf.aydemir@pisilinux.org - - - diff --git a/desktop/kde/base/kdepim-runtime/translations.xml b/desktop/kde/base/kdepim-runtime/translations.xml deleted file mode 100644 index 0f9335d505..0000000000 --- a/desktop/kde/base/kdepim-runtime/translations.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - kdepim-runtime - KDE4 PIM (Kişisel Bilgi Yönetimi) çalışma zamanı ortamı - kdepim-runtime, kdelibs kullanarak yazılmış olan Akonadi ajanları da dahil olmak üzere KDE4 PIM (Personal Information Management - Kişisel Bilgi Yönetimi) çalışma zamanı ortamını içerir. - - From 98f4a80f6d2b449b2713cae15e7fdb960bfcfb32 Mon Sep 17 00:00:00 2001 From: alihanozturk Date: Thu, 3 Sep 2015 21:03:42 +0300 Subject: [PATCH 11/13] kdepim-runtime:add build dep --- desktop/kde/application/kdepim-runtime/pspec.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/desktop/kde/application/kdepim-runtime/pspec.xml b/desktop/kde/application/kdepim-runtime/pspec.xml index 44fc92399e..9e407f023e 100644 --- a/desktop/kde/application/kdepim-runtime/pspec.xml +++ b/desktop/kde/application/kdepim-runtime/pspec.xml @@ -20,6 +20,7 @@ boost-devel shared-mime-info akonadi-devel + akonadi-calendar-devel akonadi-search-devel kcmutils-devel kdelibs4-support-devel From a6494e2a3b3ef7ddf2516c4a1a2464cf760fe8cd Mon Sep 17 00:00:00 2001 From: alihanozturk Date: Tue, 8 Sep 2015 13:48:29 +0300 Subject: [PATCH 12/13] libkgapi:build dep add --- desktop/kde/application/libkgapi/pspec.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/desktop/kde/application/libkgapi/pspec.xml b/desktop/kde/application/libkgapi/pspec.xml index d8f1b35389..f9e8bd2777 100755 --- a/desktop/kde/application/libkgapi/pspec.xml +++ b/desktop/kde/application/libkgapi/pspec.xml @@ -17,7 +17,8 @@ qt5-base-devel extra-cmake-modules - kdoctools-devel + kdoctools-devel + qt5-linguist From 5ffcaa4ad9616482ca1f716fa802dcc99b08681d Mon Sep 17 00:00:00 2001 From: alihanozturk Date: Tue, 8 Sep 2015 14:22:51 +0300 Subject: [PATCH 13/13] soprano:delete --- programming/misc/soprano/actions.py | 23 --- ...ound-for-datasourcenamenotfound-error.diff | 52 ------ programming/misc/soprano/pspec.xml | 160 ------------------ programming/misc/soprano/translations.xml | 28 --- 4 files changed, 263 deletions(-) delete mode 100644 programming/misc/soprano/actions.py delete mode 100644 programming/misc/soprano/files/locale-workaround-for-datasourcenamenotfound-error.diff delete mode 100644 programming/misc/soprano/pspec.xml delete mode 100644 programming/misc/soprano/translations.xml diff --git a/programming/misc/soprano/actions.py b/programming/misc/soprano/actions.py deleted file mode 100644 index 3c91927794..0000000000 --- a/programming/misc/soprano/actions.py +++ /dev/null @@ -1,23 +0,0 @@ -#!/usr/bin/python -# -*- coding: utf-8 -*- -# -# Licensed under the GNU General Public License, version 3. -# See the file http://www.gnu.org/licenses/gpl.txt - -from pisi.actionsapi import shelltools -from pisi.actionsapi import cmaketools -from pisi.actionsapi import pisitools -from pisi.actionsapi import get - -shelltools.export("JAVA_HOME","/usr/lib/jvm/java-7-openjdk") - -def setup(): - cmaketools.configure("-DCMAKE_SKIP_RPATH=OFF") - -def build(): - cmaketools.make() - -def install(): - cmaketools.rawInstall("DESTDIR=%s" % get.installDIR()) - - pisitools.dodoc("AUTHORS", "ChangeLog", "COPYING", "README") diff --git a/programming/misc/soprano/files/locale-workaround-for-datasourcenamenotfound-error.diff b/programming/misc/soprano/files/locale-workaround-for-datasourcenamenotfound-error.diff deleted file mode 100644 index 1ecc81d7a3..0000000000 --- a/programming/misc/soprano/files/locale-workaround-for-datasourcenamenotfound-error.diff +++ /dev/null @@ -1,52 +0,0 @@ -Index: soprano-2.6.0/backends/virtuoso/odbcconnectionpool.cpp -=================================================================== ---- soprano-2.6.0.orig/backends/virtuoso/odbcconnectionpool.cpp -+++ soprano-2.6.0/backends/virtuoso/odbcconnectionpool.cpp -@@ -32,13 +32,18 @@ - #include - - #include -+#include - - - Soprano::ODBC::Connection* Soprano::ODBC::ConnectionPoolPrivate::createConnection() - { -+ char *tmpLocale = setlocale(LC_CTYPE, ""); -+ setlocale(LC_CTYPE, "C"); -+ - Environment* env = Environment::createEnvironment(); - if ( !env ) { - setError( "Unable to create ODBC environment." ); -+ setlocale(LC_CTYPE, tmpLocale); - return 0; - } - -@@ -48,6 +53,7 @@ Soprano::ODBC::Connection* Soprano::ODBC - if ( SQLAllocConnect( env->henv(), &hdbc ) != SQL_SUCCESS ) { - setError( "Failed to allocate SQL handle" ); - delete env; -+ setlocale(LC_CTYPE, tmpLocale); - return 0; - } - -@@ -72,6 +78,7 @@ Soprano::ODBC::Connection* Soprano::ODBC - setError( Virtuoso::convertSqlError( SQL_HANDLE_DBC, hdbc ) ); - SQLFreeHandle( SQL_HANDLE_DBC, hdbc ); - delete env; -+ setlocale(LC_CTYPE, tmpLocale); - return 0; - } - -@@ -87,10 +94,12 @@ Soprano::ODBC::Connection* Soprano::ODBC - if ( conn->executeCommand( command ) != Error::ErrorNone ) { - setError( conn->lastError() ); - delete conn; -+ setlocale(LC_CTYPE, tmpLocale); - return 0; - } - } - -+ setlocale(LC_CTYPE, tmpLocale); - return conn; - } - diff --git a/programming/misc/soprano/pspec.xml b/programming/misc/soprano/pspec.xml deleted file mode 100644 index 841606d737..0000000000 --- a/programming/misc/soprano/pspec.xml +++ /dev/null @@ -1,160 +0,0 @@ - - - - - soprano - http://soprano.sourceforge.net - - Yusuf Aydemir - yusuf.aydemir@pisilinux.org - - GPLv2 - library - Qt wrapper API to different RDF storage solutions - soprano is a library which provides a highly usable object-oriented C++/Qt4 framework for RDF data. It uses different RDF storage solutions as backends through a simple plugin system. - mirrors://sourceforge/soprano/Soprano/2.9.4/soprano-2.9.4.tar.bz2 - - qt-devel - redland-devel - clucene-devel - raptor2-devel - - jdk7-openjdk - libiodbc-devel - - - - locale-workaround-for-datasourcenamenotfound-error.diff - - - - - soprano - - qt - clucene - raptor2 - - - /usr/bin - /usr/lib - /usr/share/dbus-1/interfaces - /usr/share/soprano/plugins - /usr/share/soprano/rules - /usr/kde/4/share/apps - /usr/share/doc - - - - - soprano-plugin-sesame2 - Sesame2 backend for Soprano - - qt - - jre7-openjdk-headless - soprano - - - /usr/lib/soprano/libsoprano_sesame2* - /usr/share/soprano/plugins/sesame2* - /usr/share/soprano/sesame2* - - - - - soprano-plugin-virtuoso - Virtuoso backend for Soprano - - qt - virtuoso - libiodbc - soprano - - - /usr/lib/soprano/libsoprano_virtuoso* - /usr/share/soprano/plugins/virtuoso* - - - - - soprano-plugin-redland - Redland backend for Soprano - - qt - redland - soprano - - - /usr/lib/soprano/libsoprano_redland* - /usr/share/soprano/plugins/redland* - - - - - soprano-devel - Development files for soprano - - soprano - qt-devel - - - /usr/include - /usr/library/pkgconfig - /usr/share/soprano/cmake - /usr/lib/pkgconfig - - - - - - 2014-05-24 - 2.9.4 - Rebuild. - Yusuf Aydemir - yusuf.aydemir@pisilinux.org - - - 2014-03-03 - 2.9.4 - Rebuild for openjdk - PisiLinux Community - admins@pisilinux.org - - - 2013-10-26 - 2.9.4 - Version bump. - Yusuf Aydemir - yusuf.aydemir@pisilinux.org - - - 2013-07-17 - 2.9.3 - Move pc files to devel pack, release bump. - Yusuf Aydemir - yusuf.aydemir@pisilinux.org - - - 2013-07-17 - 2.9.3 - Version bump. - Yusuf Aydemir - yusuf.aydemir@pisilinux.org - - - 2013-07-10 - 2.9.2 - Version bump. - Yusuf Aydemir - yusuf.aydemir@pisilinux.org - - - 2013-01-08 - 2.9.0 - First release - Idris Kalp - yaralikurt15@hotmail.com - - - diff --git a/programming/misc/soprano/translations.xml b/programming/misc/soprano/translations.xml deleted file mode 100644 index 9335d2568d..0000000000 --- a/programming/misc/soprano/translations.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - soprano - Çeşitli RDF saklama çözümleri için bir Qt sarmalayıcı programlama arayüzü - soprano RDF verisi için çok kullanışlı, nesne yönelimli C++/Qt4 çatısı sağlayan bir kitaplıktır. Basit bir eklenti sistemi sayesinde farklı RDF depolama çözümlerinin arka uç olarak kullanabilir. - - - - soprano-plugin-sesame2 - Soprano için Sesame2 motoru - - - - soprano-plugin-virtuoso - Soprano için Virtuoso motoru - - - - soprano-plugin-redland - Soprano için Redland motoru - - - - soprano-devel - soprano için geliştirme dosyaları - -

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 diff --git a/desktop/toolkit/qt/files/data/linguist.desktop b/desktop/toolkit/qt/files/data/linguist.desktop deleted file mode 100644 index 223d18a749..0000000000 --- a/desktop/toolkit/qt/files/data/linguist.desktop +++ /dev/null @@ -1,128 +0,0 @@ -[Desktop Entry] -Encoding=UTF-8 -Exec=/usr/lib/qt4/bin/linguist -Name=Qt4 Linguist -Name[ar]=لغوي Qt4 -Name[bn]=কিউ-টি লিঙ্গুইস্ট -Name[ca]=Lingüista Qt4 -Name[cy]=Ieithydd Qt4 -Name[de]=Qt4-Linguist -Name[eo]=Qt4-Lingvisto -Name[es]=Lingüista Qt4 -Name[fa]=Qt4 زبان‌شناس -Name[fi]=Qt4 Linquist -Name[fy]=Qt4 Linquist -Name[gl]=Lingüista Qt4 -Name[hi]=क्यूटी लिंग्विस्ट -Name[hr]=Qt4 Lingvist -Name[km]=ភាសាវិទូ Qt4 -Name[ko]=Qt4 언어학자 -Name[lo]=ແປພາສາຂອງ Qt4 -Name[lv]=Qt4 Lingvists -Name[mk]=Qt4-Јазичар -Name[mn]=Qt4-Хэл зүй -Name[ms]=Jurubahasa Qt4 -Name[mt]=Lingwist Qt4 -Name[nb]=Qt4-Linguist -Name[nds]=Qt4-Linguist -Name[nl]=Qt4 Linquist -Name[nso]=Sekaleleme sa Qt4 -Name[pa]=Qt4 ਲੈਂਗੂਇਸਟ -Name[pl]=Lingwista Qt4 -Name[ru]=Qt4 Лингвист -Name[rw]=Byindimi Qt4 -Name[sl]=Jezikoslovec Qt4 -Name[sv]=Qt4 linguist -Name[ta]=Qt4 மொழியறிஞர் -Name[tg]=Забони Qt4 -Name[th]=แปลภาษาของ Qt4 -Name[tr]=Qt4 Dilci -Name[tt]=Qt4 Telbelgeç -Name[uk]=Qt4-лінгвіст -Name[uz]=Qt4 лингвист -Name[ven]=Qt4 Radzinyambo -Name[vi]=Ngôn ngữ Qt4 -Name[xh]=Usolwimi we Qt4 -Name[zh_CN]=Qt4 语言家 -Name[zh_TW]=Qt4 語言學家 -Name[zu]=Owozolimi we-Qt4 -GenericName=Translation Tool -GenericName[af]=Vertaling Program -GenericName[ar]=أداة للترجمة -GenericName[az]=Tərcümə Vasitəsi -GenericName[bn]=অনুবাদ টুল -GenericName[br]=Ostilh troidigezh -GenericName[bs]=Alat za prevođenje -GenericName[ca]=Eina de traducció -GenericName[cs]=Překladatelský nástroj -GenericName[cy]=Erfyn Cyfieithu -GenericName[da]=Oversættelsesværktøj -GenericName[de]=Übersetzungsprogramm -GenericName[el]=Εργαλείο μεταφράσεων -GenericName[eo]=Tradukilo por Qt4-programoj -GenericName[es]=Herramienta de traducción -GenericName[et]=Tõlkimise rakendus -GenericName[eu]=Itzulpenerako tresnak -GenericName[fa]=ابزار ترجمه -GenericName[fi]=Käännöstyökalu -GenericName[fo]=Umsetingaramboð -GenericName[fr]=Outil de traduction -GenericName[fy]=Fertaalprogramma -GenericName[ga]=Uirlis Aistriúcháin -GenericName[gl]=Ferramenta de Tradución -GenericName[he]=כלי תרגום -GenericName[hi]=अनुवाद औज़ार -GenericName[hr]=Alat za prevođenje -GenericName[hsb]=Grat za přełožowanje -GenericName[hu]=Fordítássegítő -GenericName[id]=Kakas Penerjemah -GenericName[is]=Þýðingartól -GenericName[it]=Strumento per le traduzioni -GenericName[ja]=翻訳ツール -GenericName[km]=កម្មវិធី​បកប្រែ -GenericName[ko]=번역 도구 -GenericName[lo]=ເຄື່ອງມືແປພາສາ -GenericName[lt]=Vertimo įrankis -GenericName[lv]=Tulkošanas Rīks -GenericName[mk]=Алатка за преведување -GenericName[mn]=Орчуулгын програм -GenericName[ms]=Perkakasan Penterjemahan -GenericName[mt]=Għodda tat-traduzzjoni -GenericName[nb]=Oversettelsesverktøy -GenericName[nds]=Warktüüch för't Översetten -GenericName[nl]=Vertaalprogramma -GenericName[nn]=Omsetjingsverktøy -GenericName[nso]=Sebereka sa Thlathollo -GenericName[pa]=ਅਨੁਵਾਦ ਸੰਦ -GenericName[pl]=Narzędzie dla tłumaczy -GenericName[pt]=Ferramenta de Tradução -GenericName[pt_BR]=Ferramenta de Tradução -GenericName[ro]=Utilitar de traducere -GenericName[ru]=Переводчик для Qt4 -GenericName[se]=Jorgalanreaidu -GenericName[sk]=Prekladací nástroj -GenericName[sl]=Orodje za prevajanje -GenericName[sr]=Алат за превођење -GenericName[sr@Latn]=Alat za prevođenje -GenericName[ss]=Lithulusi lekuhumusha -GenericName[sv]=Översättningsverktyg -GenericName[ta]=மொழிபெயர்ப்புக் கருவி -GenericName[tg]=Тарҷумагар барои QT -GenericName[th]=เครื่องมือแปลภาษา -GenericName[tr]=Çeviri Aracı -GenericName[tt]=Tärcemäläw Qoralı -GenericName[uk]=Засіб для перекладів -GenericName[uz]=Таржима қилиш воситаси -GenericName[ven]=Zwishumiswa zwau Dologa -GenericName[vi]=Công cụ dịch -GenericName[wa]=Usteye di ratournaedje -GenericName[xh]=Isixhobo Soguqulelo lomsebenzi kolunye ulwimi -GenericName[zh_CN]=翻译工具 -GenericName[zh_TW]=翻譯工具 -GenericName[zu]=Ithuluzi Lokuguqulela -X-KDE-StartupNotify=true -MimeType=application/x-linguist; -Terminal=false -Type=Application -Icon=linguist -Categories=Qt;Development; diff --git a/desktop/toolkit/qt/files/data/linguist.png b/desktop/toolkit/qt/files/data/linguist.png deleted file mode 100644 index 47c9f17a4f91ed41a17a794a31479f090ed64fb3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14785 zcmV;yIX=dTP)yY`yyPSTyFvk^!_76`jQK!g!RKt&zE`QgGVzAxkG2r{_wj<}7E zucGtfsH5OEjJ$#}jw}iqmJtxycL