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 0000000000..bfb642dc2d Binary files /dev/null and b/desktop/toolkit/qt/files/data/assistant.png differ diff --git a/desktop/toolkit/qt/files/data/designer.desktop b/desktop/toolkit/qt/files/data/designer.desktop new file mode 100644 index 0000000000..3415a53936 --- /dev/null +++ b/desktop/toolkit/qt/files/data/designer.desktop @@ -0,0 +1,132 @@ +[Desktop Entry] +Encoding=UTF-8 +Exec=/usr/lib/qt4/bin/designer +Name=Qt4 Designer +Name[af]=Qt4 Ontwerper +Name[ar]=مصمم Qt4 +Name[bn]=কিউ-টি ডিসাইনার +Name[br]=Ergrafer Qt4 +Name[ca]=Dissenyador Qt4 +Name[cs]=Qt4 designer +Name[cy]=Dylunydd Qt4 +Name[de]=Qt4-Designer +Name[eo]=Qt4-Desegnilo +Name[es]=Diseñador Qt4 +Name[eu]=Qt4 diseinatzailea +Name[fa]=Qt4 طراح +Name[gl]=Deseñador de Qt4 +Name[hi]=क्यूटी डिज़ाइनर +Name[hr]=Qt4 Dizajner +Name[hsb]=Qt4 designer +Name[is]=Qt4 hönnuðurinn +Name[it]=Designer Qt4 +Name[ja]=Qt4 デザイナー +Name[km]=កម្មវិធី​រចនា Qt4 +Name[ko]=Qt4 디자이너 +Name[lo]=ອອກແບບສ່ວນຕິດຕໍ່ຜູ້ໃຊ້ສຳຫັລບ Qt4 +Name[lv]=Qt4 Dizainers +Name[mk]=Qt4-Дизајнер +Name[mn]=Qt4-Дизайнер +Name[ms]=Pembantu Qt4 +Name[mt]=Diżinjatur Qt4 +Name[nds]=Qt4-Designer +Name[nso]=Mohlami wa Qt4 +Name[oc]=Dessinador Qt4 +Name[pa]=Qt4 ਡਿਜ਼ਾਈਨਰ +Name[rw]=Umuhanzi Qt4 +Name[sl]=Snovalnik Qt4 +Name[ss]=Umhleli weQt4 +Name[sv]=Qt4 designer +Name[ta]=Qt4 வடிவமைப்பாளர் +Name[tg]=Тароҳи Qt4 +Name[th]=ออกแบบส่วนติดต่อผู้ใช้สำหรับ Qt4 +Name[tr]=Qt4 Tasarımcı +Name[tt]=Qt4 Tözüçe +Name[uk]=Дизайнер Qt4 +Name[uz]=Qt43 дизайнер +Name[ven]=Qt4 Mufhati +Name[vi]=Trình thiết kế Qt4 +Name[xh]=Umyili we Qt4 +Name[zh_CN]=Qt4 设计器 +Name[zh_TW]=Qt4 設計師 +Name[zu]=Umakhi we-Qt4 +GenericName=Interface Designer +GenericName[af]=Koppelvlak Ontwerper +GenericName[ar]=مصمم واجهات إستخدام +GenericName[az]=Ara Üz Tərtibçisi +GenericName[bn]=ইন্টারফেস পরিকল্পনা +GenericName[br]=Ergrafer etrefas +GenericName[bs]=Qt4 alat za dizajniranje interfejsa +GenericName[ca]=Dissenyador d'interfícies +GenericName[cs]=Návrhář rozhraní +GenericName[cy]=Dylunydd Rhyngwyneb +GenericName[da]=Grænsefladedesigner +GenericName[de]=Schnittstellendesigner +GenericName[el]=Σχεδιαστής διασυνδέσεων +GenericName[eo]=Interfacdesegnilo +GenericName[es]=Diseñador de interfaces +GenericName[et]=Kasutajaliidese disainer +GenericName[eu]=Interfaze diseinatzailea +GenericName[fa]=طراح واسط +GenericName[fi]=Käyttöliittymäsuunnittelija +GenericName[fo]=Nýtaramótssniðari +GenericName[fr]=Concepteur d'interface +GenericName[fy]=Ynterface-ûntwerper +GenericName[ga]=Dearthóir Comhéadain +GenericName[gl]=Deseñador de Interfaces +GenericName[he]=מעצב ממשקים +GenericName[hi]=इंटरफेस डिज़ाइनर +GenericName[hr]=Dizajner sučelja +GenericName[hu]=Felülettervező +GenericName[id]=Perancang Antarmuka +GenericName[is]=Viðmótshönnun +GenericName[it]=Disegnatore di interfacce +GenericName[ja]=インターフェースデザイナー +GenericName[km]=កម្មវិធី​រចនា​ចំណុច​ប្រទាក់ +GenericName[ko]=인터페이스 디자이너 +GenericName[lo]=ເຄື່ອງມືອອກແບບສ່ວນຕິດຕໍ່ຜູ້ໃຊ້ +GenericName[lt]=Sąsajos kūrimo programa +GenericName[lv]=Saskarnes Dizainers +GenericName[mk]=Дизајнер на интерфејси +GenericName[mn]=Гадаргуун дизайнер +GenericName[ms]=Pereka Antaramuka +GenericName[mt]=Diżinjatur tal-interfaċċji +GenericName[nb]=Utforming av grensesnitt +GenericName[nds]=Koppelsteed-Maker +GenericName[nl]=Interface-ontwerper +GenericName[nn]=Utforming av grensesnitt +GenericName[nso]=Mohlami wa Interface +GenericName[pa]=ਇੰਟਰਫੇਸ਼ ਡਿਜ਼ਾਈਨਰ +GenericName[pl]=Projektant interfejsu +GenericName[pt]=Editor de Interfaces +GenericName[pt_BR]=Interface do Designer +GenericName[ro]=Dezvoltator de interfeţe +GenericName[ru]=Редактор интерфейса приложений Qt4 +GenericName[rw]=Umuhanzi w'Imigaragarire +GenericName[se]=Laktahábmejeaddji +GenericName[sk]=Návrh rozhrania +GenericName[sl]=Snovalnik vmesnikov +GenericName[sr]=Дизајнер интерфејса +GenericName[sr@Latn]=Dizajner interfejsa +GenericName[ss]=Umhleli wesichumanisi +GenericName[sv]=Gränssnittseditor +GenericName[ta]=முகப்புப் வடிவமைப்பாளர் +GenericName[tg]=Тароҳи робита +GenericName[th]=เครื่องมือออกแบบส่วนติดต่อผู้ใช้ +GenericName[tr]=Arayüz tasarım programı +GenericName[tt]=Yözara Tözegeç +GenericName[uk]=Дизайн інтерфейсу +GenericName[uz]=Интерфейс дизайнери +GenericName[ven]=Muvhati wa nga Phanda +GenericName[vi]=Trình thiết kế giao diện +GenericName[wa]=Dessineu d' eterfaces +GenericName[xh]=Umyili Wezojongongano +GenericName[zh_CN]=界面设计器 +GenericName[zh_TW]=界面設計師 +GenericName[zu]=Umakhi Womxhumanisi +X-KDE-StartupNotify=true +MimeType=application/x-designer; +Icon=designer +Terminal=false +Type=Application +Categories=Qt;Development; diff --git a/desktop/toolkit/qt/files/data/designer.png b/desktop/toolkit/qt/files/data/designer.png new file mode 100644 index 0000000000..5ebc4a9729 Binary files /dev/null and b/desktop/toolkit/qt/files/data/designer.png differ 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 0000000000..b8f8263bbe Binary files /dev/null and b/desktop/toolkit/qt/files/data/hi128-app-qt4-logo.png differ diff --git a/desktop/toolkit/qt/files/data/hi48-app-qt4-logo.png b/desktop/toolkit/qt/files/data/hi48-app-qt4-logo.png new file mode 100644 index 0000000000..b8ede18d92 Binary files /dev/null and b/desktop/toolkit/qt/files/data/hi48-app-qt4-logo.png differ 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 0000000000..47c9f17a4f Binary files /dev/null and b/desktop/toolkit/qt/files/data/linguist.png differ diff --git a/desktop/toolkit/qt/files/data/phonon-gstreamer.svg b/desktop/toolkit/qt/files/data/phonon-gstreamer.svg new file mode 100644 index 0000000000..26998462f1 --- /dev/null +++ b/desktop/toolkit/qt/files/data/phonon-gstreamer.svg @@ -0,0 +1,54 @@ + + + + +]> + + + + + + + + + + + + + + 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 0000000000..16b3bc68b6 Binary files /dev/null and b/desktop/toolkit/qt/files/turkish.patch.bz2 differ diff --git a/desktop/toolkit/qt/pspec.xml b/desktop/toolkit/qt/pspec.xml new file mode 100644 index 0000000000..9218907c19 --- /dev/null +++ b/desktop/toolkit/qt/pspec.xml @@ -0,0 +1,496 @@ + + + + + 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 + +