diff options
author | alonso <alonso@FreeBSD.org> | 2015-03-12 07:11:47 +0800 |
---|---|---|
committer | alonso <alonso@FreeBSD.org> | 2015-03-12 07:11:47 +0800 |
commit | 7f08c01b39f7988dfc689593993896d621c448f2 (patch) | |
tree | 910a5b73adcde0c6d7935ee875c9b3fb36fecc94 /x11 | |
parent | 49763a0df41c227cc1a99ec21d6fd1771b89dfc7 (diff) | |
download | freebsd-ports-graphics-7f08c01b39f7988dfc689593993896d621c448f2.tar.gz freebsd-ports-graphics-7f08c01b39f7988dfc689593993896d621c448f2.tar.zst freebsd-ports-graphics-7f08c01b39f7988dfc689593993896d621c448f2.zip |
Update KDE SC to 4.14.3
The kde@ team presents KDE SC 4.14.3, the last planed release
of the KDE SC 4 series.
In addition to the updates provided by the KDE SC developers, this
update also addresses numerous FreeBSD and PORTS specific
issues, found and solved by the kde@ team and area51 testers,
most notorously Tobias C. Berner <tcberner@gmail.com>
PR: 197751
PR: 197871
PR: 184996
Reviewed by: rakuco (mentor)
Differential: https://reviews.freebsd.org/D1950
Diffstat (limited to 'x11')
-rw-r--r-- | x11/kde4-baseapps/Makefile | 1 | ||||
-rw-r--r-- | x11/kde4-baseapps/distinfo | 4 | ||||
-rw-r--r-- | x11/kde4-runtime/Makefile | 6 | ||||
-rw-r--r-- | x11/kde4-runtime/distinfo | 4 | ||||
-rw-r--r-- | x11/kde4-runtime/files/patch-kioslave__bookmarks__kio_bookmarks.cpp | 25 | ||||
-rw-r--r-- | x11/kde4-runtime/files/patch-kioslave__sftp__kio_sftp.cpp | 11 | ||||
-rw-r--r-- | x11/kde4-workspace/Makefile | 4 | ||||
-rw-r--r-- | x11/kde4-workspace/distinfo | 4 | ||||
-rw-r--r-- | x11/kde4-workspace/files/patch-CVE-2014-8651 | 113 | ||||
-rw-r--r-- | x11/kde4-workspace/files/patch-kinfocenter | 375 | ||||
-rw-r--r-- | x11/kde4-workspace/files/patch-kinfocenter__Modules__base__CMakeLists.txt | 10 | ||||
-rw-r--r-- | x11/kde4-workspace/files/patch-usbview | 493 | ||||
-rw-r--r-- | x11/kdelibs4/Makefile | 1 | ||||
-rw-r--r-- | x11/kdelibs4/distinfo | 4 | ||||
-rw-r--r-- | x11/kdelibs4/files/patch-git_0df92439 | 355 | ||||
-rw-r--r-- | x11/kgamma/distinfo | 4 | ||||
-rw-r--r-- | x11/konsole/distinfo | 4 |
17 files changed, 882 insertions, 536 deletions
diff --git a/x11/kde4-baseapps/Makefile b/x11/kde4-baseapps/Makefile index e8a6155eecb..78238bd1801 100644 --- a/x11/kde4-baseapps/Makefile +++ b/x11/kde4-baseapps/Makefile @@ -2,7 +2,6 @@ PORTNAME= kde-baseapps PORTVERSION= ${KDE4_VERSION} -PORTREVISION= 1 CATEGORIES= x11 kde MASTER_SITES= KDE/${KDE4_BRANCH}/${PORTVERSION}/src DIST_SUBDIR= KDE/${PORTVERSION} diff --git a/x11/kde4-baseapps/distinfo b/x11/kde4-baseapps/distinfo index 5017588bd7a..8907780918a 100644 --- a/x11/kde4-baseapps/distinfo +++ b/x11/kde4-baseapps/distinfo @@ -1,2 +1,2 @@ -SHA256 (KDE/4.14.2/kde-baseapps-4.14.2.tar.xz) = dfe3728522be0d10b1b79f54fe06b26be89b62cc88025d394c5750a31a26defe -SIZE (KDE/4.14.2/kde-baseapps-4.14.2.tar.xz) = 2548072 +SHA256 (KDE/4.14.3/kde-baseapps-4.14.3.tar.xz) = 125baf42a7ab8c255b5829d12837f54c1791498f79593a9b09a9e55344ade6db +SIZE (KDE/4.14.3/kde-baseapps-4.14.3.tar.xz) = 2548152 diff --git a/x11/kde4-runtime/Makefile b/x11/kde4-runtime/Makefile index 1cdfbef31d1..0642ea14066 100644 --- a/x11/kde4-runtime/Makefile +++ b/x11/kde4-runtime/Makefile @@ -2,7 +2,6 @@ PORTNAME= kde-runtime PORTVERSION= ${KDE4_VERSION} -PORTREVISION= 3 CATEGORIES= x11 kde MASTER_SITES= KDE/${KDE4_BRANCH}/${PORTVERSION}/src DIST_SUBDIR= KDE/${PORTVERSION} @@ -36,10 +35,7 @@ SHEBANG_FILES= khelpcenter/searchhandlers/*.pl \ khelpcenter/searchhandlers/*.pl.cmake \ kioslave/info/kde-info2html -OPTIONS_DEFINE= NEPOMUK PULSEAUDIO ZEITGEIST - -NEPOMUK_DESC= Nepomuk semantic desktop via Virtuoso -NEPOMUK_RUN_DEPENDS= virtuoso-t:${PORTSDIR}/databases/virtuoso +OPTIONS_DEFINE= PULSEAUDIO ZEITGEIST PULSEAUDIO_DESC=Audio configuration via PulseAudio PULSEAUDIO_LIB_DEPENDS= libpulse.so:${PORTSDIR}/audio/pulseaudio \ diff --git a/x11/kde4-runtime/distinfo b/x11/kde4-runtime/distinfo index d96abd1dc82..7c8ccbcb16f 100644 --- a/x11/kde4-runtime/distinfo +++ b/x11/kde4-runtime/distinfo @@ -1,2 +1,2 @@ -SHA256 (KDE/4.14.2/kde-runtime-4.14.2.tar.xz) = 22bcced462b785b8e50b666101ecbec04a0135656842ef5718530da621342fec -SIZE (KDE/4.14.2/kde-runtime-4.14.2.tar.xz) = 7867216 +SHA256 (KDE/4.14.3/kde-runtime-4.14.3.tar.xz) = 78a74e519b4e897ffcee14be98eebd7b672ad2bb6e71a4aa2fe77682b5bc8605 +SIZE (KDE/4.14.3/kde-runtime-4.14.3.tar.xz) = 7867308 diff --git a/x11/kde4-runtime/files/patch-kioslave__bookmarks__kio_bookmarks.cpp b/x11/kde4-runtime/files/patch-kioslave__bookmarks__kio_bookmarks.cpp deleted file mode 100644 index 7fb7b14a613..00000000000 --- a/x11/kde4-runtime/files/patch-kioslave__bookmarks__kio_bookmarks.cpp +++ /dev/null @@ -1,25 +0,0 @@ -commit d68703900edc8416fbcd2550cd336cbbb76decb9 -Author: Martin Sandsmark <martin.sandsmark@kde.org> -Date: Thu Nov 13 13:29:01 2014 +0100 - - Sanitize path - ---- kioslave/bookmarks/kio_bookmarks.cpp -+++ kioslave/bookmarks/kio_bookmarks.cpp -@@ -22,6 +22,7 @@ - #include <stdlib.h> - - #include <qregexp.h> -+#include <qtextdocument.h> - - #include <kapplication.h> - #include <kcmdlineargs.h> -@@ -197,7 +198,7 @@ void BookmarksProtocol::get( const KUrl& url ) - echoImage(regexp.cap(1), regexp.cap(2), url.queryItem("size")); - } else { - echoHead(); -- echo("<p class=\"message\">" + i18n("Wrong request: %1",path) + "</p>"); -+ echo("<p class=\"message\">" + i18n("Bad request: %1", Qt::escape(Qt::escape(url.prettyUrl()))) + "</p>"); - } - finished(); - } diff --git a/x11/kde4-runtime/files/patch-kioslave__sftp__kio_sftp.cpp b/x11/kde4-runtime/files/patch-kioslave__sftp__kio_sftp.cpp deleted file mode 100644 index abf5f8c4a36..00000000000 --- a/x11/kde4-runtime/files/patch-kioslave__sftp__kio_sftp.cpp +++ /dev/null @@ -1,11 +0,0 @@ ---- kioslave/sftp/kio_sftp.cpp.orig 2014-10-27 22:00:05.195340477 +0100 -+++ kioslave/sftp/kio_sftp.cpp 2014-10-27 22:00:14.755340379 +0100 -@@ -528,7 +528,7 @@ - return false; - } - -- int timeout_sec = 30, timeout_usec = 0; -+ long int timeout_sec = 30, timeout_usec = 0; - - kDebug(KIO_SFTP_DB) << "Creating the SSH session and setting options"; - diff --git a/x11/kde4-workspace/Makefile b/x11/kde4-workspace/Makefile index 560270d6566..2f08f6d6471 100644 --- a/x11/kde4-workspace/Makefile +++ b/x11/kde4-workspace/Makefile @@ -2,7 +2,6 @@ PORTNAME= kde-workspace PORTVERSION= ${KDE4_WORKSPACE_VERSION} -PORTREVISION= 2 CATEGORIES= x11 kde MASTER_SITES= KDE/${KDE4_BRANCH}/${KDE4_VERSION}/src DIST_SUBDIR= KDE/${PORTVERSION} @@ -70,7 +69,7 @@ OPTIONS_DEFINE= GLES GPS KACTIVITY UPOWER WALLPAPERS OPTIONS_GROUP= PHONON PLASMA OPTIONS_GROUP_PHONON= GSTREAMER VLC OPTIONS_GROUP_PLASMA= PYTHON RUBY -OPTIONS_DEFAULT= GLES GPS GSTREAMER KACTIVITY UPOWER WALLPAPERS +OPTIONS_DEFAULT= GLES GPS KACTIVITY UPOWER VLC WALLPAPERS OPTIONS_SUB= yes # GPS GLES GLES_DESC= OpenGL ES 2.0 support in kwin and kinfocenter @@ -83,7 +82,6 @@ GPS_CMAKE_ON= -DWITH_libgps:BOOL=ON GPS_CMAKE_OFF= -DWITH_libgps:BOOL=OFF GSTREAMER_DESC= Multimedia via Phonon-GStreamer -GSTREAMER_USE= GSTREAMER=core GSTREAMER_USE= QT4=phonon-gst_run KACTIVITY_DESC= Activity Manager daemon diff --git a/x11/kde4-workspace/distinfo b/x11/kde4-workspace/distinfo index 699b3a7cf1f..aa1f5169108 100644 --- a/x11/kde4-workspace/distinfo +++ b/x11/kde4-workspace/distinfo @@ -1,2 +1,2 @@ -SHA256 (KDE/4.11.13/kde-workspace-4.11.13.tar.xz) = 80b916d49713e75250b2bd3358d0c0b062ba80b671311866ee1955e2f91a2201 -SIZE (KDE/4.11.13/kde-workspace-4.11.13.tar.xz) = 13536880 +SHA256 (KDE/4.11.14/kde-workspace-4.11.14.tar.xz) = cf20a562f3abf848ab0e122d6af1971dcc6383b91565f6da21f46f1011386e01 +SIZE (KDE/4.11.14/kde-workspace-4.11.14.tar.xz) = 13529808 diff --git a/x11/kde4-workspace/files/patch-CVE-2014-8651 b/x11/kde4-workspace/files/patch-CVE-2014-8651 deleted file mode 100644 index 288b8afb99f..00000000000 --- a/x11/kde4-workspace/files/patch-CVE-2014-8651 +++ /dev/null @@ -1,113 +0,0 @@ -commit eebcb17746d9fa86ea8c5a7344709ef6750781cf -Author: David Edmundson <kde@davidedmundson.co.uk> -Date: Tue Nov 4 13:57:59 2014 +0100 - - Do not pass ntpUtility as an argument to datetime helper - - Passing the name of a binary to run to a polkit helper is a security - risk as it allows any arbitrary process to be executed. - - This patch moves the detection of ntp utility location into the helper - function. - - REVIEW: 120977 - ---- kcontrol/dateandtime/dtime.cpp -+++ kcontrol/dateandtime/dtime.cpp -@@ -142,27 +142,15 @@ void Dtime::serverTimeCheck() { - //kclock->setEnabled(enabled); - } - --void Dtime::findNTPutility(){ -- QByteArray envpath = qgetenv("PATH"); -- if (!envpath.isEmpty() && envpath[0] == ':') { -- envpath = envpath.mid(1); -- } -- -- QString path = "/sbin:/usr/sbin:"; -- if (!envpath.isEmpty()) { -- path += QString::fromLocal8Bit(envpath); -- } else { -- path += QLatin1String("/bin:/usr/bin"); -- } -- -- foreach(const QString &possible_ntputility, QStringList() << "ntpdate" << "rdate" ) { -- if( !((ntpUtility = KStandardDirs::findExe(possible_ntputility, path)).isEmpty()) ) { -- kDebug() << "ntpUtility = " << ntpUtility; -- return; -+void Dtime::findNTPutility() -+{ -+ const QString exePath = QLatin1String("/usr/sbin:/usr/bin:/sbin:/bin"); -+ foreach(const QString &possible_ntputility, QStringList() << "ntpdate" << "rdate" ) { -+ ntpUtility = KStandardDirs::findExe(possible_ntputility, exePath); -+ if (!ntpUtility.isEmpty()) { -+ return; -+ } - } -- } -- -- kDebug() << "ntpUtility not found!"; - } - - void Dtime::set_time() -@@ -238,7 +226,6 @@ void Dtime::save( QVariantMap& helperargs ) - helperargs["ntp"] = true; - helperargs["ntpServers"] = list; - helperargs["ntpEnabled"] = setDateTimeAuto->isChecked(); -- helperargs["ntpUtility"] = ntpUtility; - - if(setDateTimeAuto->isChecked() && !ntpUtility.isEmpty()){ - // NTP Time setting - done in helper ---- kcontrol/dateandtime/helper.cpp -+++ kcontrol/dateandtime/helper.cpp -@@ -52,8 +52,18 @@ - // clears it. So we have to use a reasonable default. - static const QString exePath = QLatin1String("/usr/sbin:/usr/bin:/sbin:/bin"); - --int ClockHelper::ntp( const QStringList& ntpServers, bool ntpEnabled, -- const QString& ntpUtility ) -+static QString findNtpUtility() -+{ -+ foreach(const QString &possible_ntputility, QStringList() << "ntpdate" << "rdate" ) { -+ const QString ntpUtility = KStandardDirs::findExe(possible_ntputility, exePath); -+ if (!ntpUtility.isEmpty()) { -+ return ntpUtility; -+ } -+ } -+ return QString(); -+} -+ -+int ClockHelper::ntp( const QStringList& ntpServers, bool ntpEnabled ) - { - int ret = 0; - -@@ -69,6 +79,8 @@ int ClockHelper::ntp( const QStringList& ntpServers, bool ntpEnabled, - config.writeEntry("servers", ntpServers ); - config.writeEntry("enabled", ntpEnabled ); - -+ QString ntpUtility(findNtpUtility()); -+ - if ( ntpEnabled && !ntpUtility.isEmpty() ) { - // NTP Time setting - QString timeServer = ntpServers.first(); -@@ -227,7 +239,7 @@ ActionReply ClockHelper::save(const QVariantMap &args) - int ret = 0; // error code - // The order here is important - if( _ntp ) -- ret |= ntp( args.value("ntpServers").toStringList(), args.value("ntpEnabled").toBool(), args.value("ntpUtility").toString() ); -+ ret |= ntp( args.value("ntpServers").toStringList(), args.value("ntpEnabled").toBool()); - if( _date ) - ret |= date( args.value("newdate").toString(), args.value("olddate").toString() ); - if( _tz ) ---- kcontrol/dateandtime/helper.h -+++ kcontrol/dateandtime/helper.h -@@ -42,8 +42,7 @@ class ClockHelper : public QObject - ActionReply save(const QVariantMap &map); - - private: -- int ntp(const QStringList& ntpServers, bool ntpEnabled, -- const QString& ntpUtility); -+ int ntp(const QStringList& ntpServers, bool ntpEnabled); - int date(const QString& newdate, const QString& olddate); - int tz(const QString& selectedzone); - int tzreset(); diff --git a/x11/kde4-workspace/files/patch-kinfocenter b/x11/kde4-workspace/files/patch-kinfocenter new file mode 100644 index 00000000000..0c88b1f1864 --- /dev/null +++ b/x11/kde4-workspace/files/patch-kinfocenter @@ -0,0 +1,375 @@ + Clean up info_fbsd.cpp. + Use libpci for pci access if possible - on FreeBSD it requires root + privileges (rw access to /dev/pci), therefore leave old method + as a fallback. + Improve GetInfo_ReadfromPipe function to use Qt types, pass program name + and its parameters as separate arguments. + +--- /dev/null ++++ cmake/modules/FindBSDDevinfo.cmake +@@ -0,0 +1,15 @@ ++# Find FreeBSD devinfo library ++# Once done this will define ++# ++# BSDDEVINFO_FOUND - system has devinfo ++# BSDDEVINFO_INCLUDE_DIR - devinfo include directory ++# BSDDEVINFO_LIBRARY - devinfo library ++ ++find_path(BSDDEVINFO_INCLUDE_DIR devinfo.h) ++ ++find_library(BSDDEVINFO_LIBRARY NAMES devinfo) ++ ++include(FindPackageHandleStandardArgs) ++find_package_handle_standard_args(BSDDEVINFO DEFAULT_MSG BSDDEVINFO_LIBRARY BSDDEVINFO_INCLUDE_DIR) ++ ++mark_as_advanced(BSDDEVINFO_INCLUDE_DIR BSDDEVINFO_LIBRARY) +--- kinfocenter/Modules/base/CMakeLists.txt ++++ kinfocenter/Modules/base/CMakeLists.txt +@@ -1,6 +1,7 @@ + # TODO: HAVE_LIBDEVINFO_H (for Solaris 7 and later) + # to be set if both -ldevinfo and libdevinfo.h exist + +-check_include_files(devinfo.h HAVE_DEVINFO_H) # info_fbsd.cpp ++macro_optional_find_package(BSDDevinfo) # info_fbsd.cpp ++macro_bool_to_01(BSDDEVINFO_FOUND HAVE_DEVINFO_H) + + configure_file (../base/config-infocenter.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-infocenter.h ) +--- kinfocenter/Modules/base/info_fbsd.cpp.orig 2014-11-06 22:36:58.000000000 +0000 ++++ kinfocenter/Modules/base/info_fbsd.cpp 2015-02-20 22:40:53.380666149 +0000 +@@ -15,8 +15,6 @@ + */ + + #include "config-infocenter.h" // HAVE_DEVINFO_H +-#include <sys/types.h> +-#include <sys/sysctl.h> + + #ifdef HAVE_DEVINFO_H + extern "C" { +@@ -24,13 +22,16 @@ + } + #endif + +-#include <string.h> ++#ifdef HAVE_PCIUTILS ++#include "kpci.h" ++#endif + +-#include <QMap> + #include <QFileInfo> +- ++#include <QStringList> + #include <QTextStream> + ++#include <KGlobalSettings> ++ + void ProcessChildren(QString name); + + #ifdef HAVE_DEVINFO_H +@@ -44,13 +45,12 @@ + + bool GetInfo_IRQ(QTreeWidget* tree) { + #ifdef HAVE_DEVINFO_H +- /* systat lists the interrupts assigned to devices as well as how many were +- generated. Parsing its output however is about as fun as a sandpaper +- enema. The best idea would probably be to rip out the guts of systat. +- Too bad it's not very well commented */ +- /* Oh neat, current now has a neat little utility called devinfo */ + if (devinfo_init()) +- return false; ++ return false; ++ ++ QStringList headers; ++ headers << i18n("IRQ") << i18n("Used By"); ++ tree->setHeaderLabels(headers); + devinfo_foreach_rman(print_irq, tree); + return true; + #else +@@ -60,9 +60,13 @@ + + bool GetInfo_DMA(QTreeWidget* tree) { + #ifdef HAVE_DEVINFO_H +- /* Oh neat, current now has a neat little utility called devinfo */ + if (devinfo_init()) +- return false; ++ return false; ++ ++ QStringList headers; ++ headers << i18n("DMA-Channel") << i18n("Used By"); ++ tree->setHeaderLabels(headers); ++ + devinfo_foreach_rman(print_dma, tree); + return true; + #else +@@ -72,9 +76,12 @@ + + bool GetInfo_IO_Ports(QTreeWidget* tree) { + #ifdef HAVE_DEVINFO_H +- /* Oh neat, current now has a neat little utility called devinfo */ + if (devinfo_init()) +- return false; ++ return false; ++ ++ QStringList headers; ++ headers << i18n("I/O-Range") << i18n("Used By"); ++ tree->setHeaderLabels(headers); + devinfo_foreach_rman(print_ioports, tree); + return true; + #else +@@ -83,50 +90,28 @@ + } + + bool GetInfo_SCSI(QTreeWidget* tree) { +- FILE *pipe; +- QTextStream *t; +- QString s; +- + if (!QFileInfo(QLatin1String("/sbin/camcontrol")).exists()) { +- s = i18n("SCSI subsystem could not be queried: /sbin/camcontrol could not be found"); + QStringList list; +- list << s; ++ list << i18n("SCSI subsystem could not be queried: /sbin/camcontrol could not be found"); + new QTreeWidgetItem(tree, list); +- } else if ((pipe = popen("/sbin/camcontrol devlist 2>&1", "r")) == NULL) { +- s = i18n("SCSI subsystem could not be queried: /sbin/camcontrol could not be executed"); +- QStringList list; +- list << s; +- new QTreeWidgetItem(tree, list); +- } else { +- +- /* This prints out a list of all the scsi devies, perhaps eventually we could +- parse it as opposed to schlepping it into a listbox */ +- +- t = new QTextStream(pipe, QIODevice::ReadOnly); +- +- while (true) { +- s = t->readLine(); +- if (s.isEmpty() ) +- break; +- QStringList list; +- list << s; +- new QTreeWidgetItem(tree, list); +- } +- +- delete t; +- pclose(pipe); + } ++ if (GetInfo_ReadfromPipe(tree, "/sbin/camcontrol", QStringList() << "devlist", true)) ++ return true; + +- if (!tree->topLevelItemCount()) +- return false; +- +- return true; ++ return false; + } + + bool GetInfo_PCI(QTreeWidget* tree) { +- FILE *pipe; +- QString s, cmd; +- QTreeWidgetItem *olditem= NULL; ++#ifdef HAVE_PCIUTILS ++// libpci exits immediately if /dev/pci can't be open in rw mode ++ QFile pcidev("/dev/pci"); ++ if (pcidev.open(QIODevice::ReadWrite)) { ++ pcidev.close(); ++ if ( GetInfo_PCIUtils(tree)) { ++ return true; ++ } ++ } ++#endif //HAVE_PCIUTILS + + const QStringList headers(i18nc("@title:column Column name for PCI information", "Information")); + tree->setHeaderLabels(headers); +@@ -136,40 +121,11 @@ + list << i18n("Could not find any programs with which to query your system's PCI information"); + new QTreeWidgetItem(tree, list); + return true; +- } else { +- cmd = "/usr/sbin/pciconf -l -v 2>&1"; +- } +- +- // TODO: GetInfo_ReadfromPipe should be improved so that we could pass the program name and its +- // arguments to it and remove most of the code below. +- if ((pipe = popen(cmd.toLatin1(), "r")) == NULL) { +- QStringList list; +- list << i18n("PCI subsystem could not be queried: %1 could not be executed", cmd); +- olditem = new QTreeWidgetItem(olditem, list); +- } else { +- /* This prints out a list of all the pci devies, perhaps eventually we could +- parse it as opposed to schlepping it into a listbox */ +- QTextStream outputStream(pipe, QIODevice::ReadOnly); +- +- while (!outputStream.atEnd()) { +- s = outputStream.readLine(); +- if (s.isEmpty() ) +- break; +- const QStringList list(s); +- new QTreeWidgetItem(tree, list); +- } +- +- pclose(pipe); + } +- +- if (!tree->topLevelItemCount()) { +- QString str = i18n("The PCI subsystem could not be queried, this may need root privileges."); +- olditem = new QTreeWidgetItem(tree, olditem); +- olditem->setText(0, str); ++ if (GetInfo_ReadfromPipe(tree, "/usr/sbin/pciconf", QStringList() << "-l" << "-v", true)) + return true; +- } + +- return true; ++ return false; + } + + bool GetInfo_XServer_and_Video(QTreeWidget* tree) { +@@ -179,12 +135,7 @@ + #ifdef HAVE_DEVINFO_H + + int print_irq(struct devinfo_rman *rman, void *arg) { +- QTreeWidget* tree = (QTreeWidget *)arg; + if (strcmp(rman->dm_desc, "Interrupt request lines")==0) { +- +- QStringList list; +- list << rman->dm_desc; +- new QTreeWidgetItem(tree, list); + devinfo_foreach_rman_resource(rman, print_resource, arg); + } + return 0; +@@ -192,11 +143,7 @@ + + int print_dma(struct devinfo_rman *rman, void *arg) + { +- QTreeWidget* tree = (QTreeWidget *)arg; + if (strcmp(rman->dm_desc, "DMA request lines")==0) { +- QStringList list; +- list << rman->dm_desc; +- new QTreeWidgetItem(tree, list); + devinfo_foreach_rman_resource(rman, print_resource, arg); + } + return(0); +@@ -230,29 +177,25 @@ + int hexmode; + + QTreeWidget* tree = (QTreeWidget*) arg; ++ tree->setFont(KGlobalSettings::fixedFont()); ++ QStringList list; + +- QString s, tmp; ++ QString s; ++ QTextStream result(&s); + + rman = devinfo_handle_to_rman(res->dr_rman); + hexmode = (rman->dm_size > 100) || (rman->dm_size == 0); +- tmp.sprintf(hexmode ? "0x%lx" : "%lu", res->dr_start); +- s += tmp; +- if (res->dr_size > 1) { +- tmp.sprintf(hexmode ? "-0x%lx" : "-%lu", +- res->dr_start + res->dr_size - 1); +- s += tmp; +- } ++ if (hexmode) ++ result << showbase << hex; ++ result << res->dr_start; ++ if (res->dr_size > 1) ++ result << "-" << res->dr_start + res->dr_size - 1; ++ list << s; + + dev = devinfo_handle_to_device(res->dr_device); +- if ((dev != NULL) && (dev->dd_name[0] != 0)) { +- tmp.sprintf(" (%s)", dev->dd_name); +- } else { +- tmp.sprintf(" ----"); +- } +- s += tmp; ++ if ((dev != NULL) && (dev->dd_name[0] != 0)) ++ list << QString(dev->dd_name); + +- QStringList list; +- list << s; + new QTreeWidgetItem(tree, list); + + return 0; +--- kinfocenter/Modules/info/CMakeLists.txt ++++ kinfocenter/Modules/info/CMakeLists.txt +@@ -13,6 +13,9 @@ set(kcm_info_PART_SRCS main.cpp info.cpp ../base/os_current.cpp ) + kde4_add_plugin(kcm_info ${kcm_info_PART_SRCS}) + + target_link_libraries(kcm_info ${KDE4_KDEUI_LIBS} ${QT_QTGUI_LIBRARY} ${X11_X11_LIB}) ++if(BSDDEVINFO_FOUND) ++ target_link_libraries(kcm_info ${BSDDEVINFO_LIBRARY}) ++endif(BSDDEVINFO_FOUND) + + install(TARGETS kcm_info DESTINATION ${PLUGIN_INSTALL_DIR} ) + +--- kinfocenter/Modules/base/info_hpux.cpp ++++ kinfocenter/Modules/base/info_hpux.cpp +@@ -30,6 +30,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. + #include <stdlib.h> + #include <QFile> + #include <QFontMetrics> ++#include <QStringList> + #include <QTextStream> + + # define INFO_PCI "" // Please, who know it ???? +@@ -178,14 +179,14 @@ bool GetInfo_PCI(QTreeWidget* tree) { + } + + bool GetInfo_IO_Ports(QListView *lBox) { +- if (GetInfo_ReadfromPipe(lBox, INFO_IOPORTS_1, false)) ++ if (GetInfo_ReadfromPipe(lBox, INFO_IOPORTS_1, QStringList(), false)) + return true; + else +- return GetInfo_ReadfromPipe(lBox, INFO_IOPORTS_2, false); ++ return GetInfo_ReadfromPipe(lBox, INFO_IOPORTS_2, QStringList(), false); + } + + bool GetInfo_SCSI(QListView *lBox) { +- return GetInfo_ReadfromPipe(lBox, INFO_DEVICES, false); ++ return GetInfo_ReadfromPipe(lBox, INFO_DEVICES, QStringList(), false); + } + /* Parts taken from fsusage.c from the Midnight Commander (mc) + +--- kinfocenter/Modules/base/info_linux.cpp ++++ kinfocenter/Modules/base/info_linux.cpp +@@ -33,6 +33,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. + #include <QRegExp> + #include <QFile> + #include <QHeaderView> ++#include <QStringList> + + #include <klocale.h> + #include <kiconloader.h> +@@ -140,9 +141,12 @@ bool GetInfo_PCI(QTreeWidget* tree) { + tree->setSortingEnabled(false); + + /* try to get the output of the lspci package first */ +- if ((num = GetInfo_ReadfromPipe(tree, "lspci -v", true)) || (num = GetInfo_ReadfromPipe(tree, "/sbin/lspci -v", true)) || (num = GetInfo_ReadfromPipe(tree, "/usr/sbin/lspci -v", true)) || (num = GetInfo_ReadfromPipe(tree, "/usr/local/sbin/lspci -v", true)) || (num = GetInfo_ReadfromPipe(tree, +- "/usr/bin/lspci -v", true))) +- return num; ++ QStringList lspci; ++ lspci << "lspci" << "/sbin/lspci" << "/usr/sbin/lspci" << "/usr/local/sbin/lspci" << "/usr/bin/lspci"; ++ QString p; ++ foreach(p, lspci) ++ if (num = GetInfo_ReadfromPipe(tree, p, QStringList() << "-v", true)) ++ return num; + + /* if lspci failed, read the contents of /proc/pci */ + return GetInfo_ReadfromFile(tree, INFO_PCI, 0); +--- kinfocenter/Modules/base/os_base.h ++++ kinfocenter/Modules/base/os_base.h +@@ -320,12 +320,12 @@ static bool GetInfo_XServer_Generic(QTreeWidget *lBox) { + } + + /* Helper-function to read output from an external program */ +-static int GetInfo_ReadfromPipe(QTreeWidget* tree, const char *FileName, bool WithEmptyLines = true) { ++static int GetInfo_ReadfromPipe(QTreeWidget* tree, const QString &program, const QStringList &arguments, bool WithEmptyLines = true) { + QProcess proc; + QTreeWidgetItem* olditem= NULL; + QString s; + +- proc.start(FileName, QIODevice::ReadOnly); ++ proc.start(program, arguments, QIODevice::ReadOnly); + if (!proc.waitForFinished()) { + // Process hanged or did not start + return 0; diff --git a/x11/kde4-workspace/files/patch-kinfocenter__Modules__base__CMakeLists.txt b/x11/kde4-workspace/files/patch-kinfocenter__Modules__base__CMakeLists.txt deleted file mode 100644 index b8c999de736..00000000000 --- a/x11/kde4-workspace/files/patch-kinfocenter__Modules__base__CMakeLists.txt +++ /dev/null @@ -1,10 +0,0 @@ ---- ./kinfocenter/Modules/base/CMakeLists.txt.orig 2011-05-20 22:32:07.000000000 +0200 -+++ ./kinfocenter/Modules/base/CMakeLists.txt 2011-08-09 20:48:13.345451554 +0200 -@@ -1,6 +1,6 @@ - # TODO: HAVE_LIBDEVINFO_H (for Solaris 7 and later) - # to be set if both -ldevinfo and libdevinfo.h exist - --check_include_files(devinfo.h HAVE_DEVINFO_H) # info_fbsd.cpp -+check_include_files("sys/types.h;devinfo.h" HAVE_DEVINFO_H) # info_fbsd.cpp - - configure_file (../base/config-infocenter.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-infocenter.h ) diff --git a/x11/kde4-workspace/files/patch-usbview b/x11/kde4-workspace/files/patch-usbview new file mode 100644 index 00000000000..b6da2e814a3 --- /dev/null +++ b/x11/kde4-workspace/files/patch-usbview @@ -0,0 +1,493 @@ + Use libusb-1 to query info about usb devices on all platforms, leave old + method as a fallback for Linux only. + Remove *BSD specific code, it doesn't work on FreeBSD 8.x and greater. + Old code probably works on NetBSD, but let it use libusb-1 as well. + Use DeviceNotifier instead of polling. + +--- /dev/null ++++ cmake/modules/FindLibUSB1.cmake +@@ -0,0 +1,21 @@ ++# - Try to find libusb v1.0 library ++# Once done this defines ++# ++# LIBUSB1_FOUND - system has libusb ++# LIBUSB1_INCLUDE_DIR - libusb include directory ++# LIBUSB1_LIBRARY - libusb library ++ ++find_package(PkgConfig) ++pkg_check_modules(PC_LIBUSB1 QUIET libusb-1.0) ++ ++find_path(LIBUSB1_INCLUDE_DIR libusb.h ++ HINTS ${PC_LIBUSB1_INCLUDEDIR} ${PC_LIBUSB1_INCLUDE_DIRS}) ++ ++# On FreeBSD libusb provides both v0.1 and v1.0 API ++find_library(LIBUSB1_LIBRARY NAMES usb-1.0 usb ++ HINTS ${PC_LIBUSB1_LIBDIR} ${PC_LIBUSB_LIBRARY_DIRS}) ++ ++include(FindPackageHandleStandardArgs) ++find_package_handle_standard_args(LIBUSB1 DEFAULT_MSG LIBUSB1_LIBRARY LIBUSB1_INCLUDE_DIR) ++ ++mark_as_advanced(LIBUSB1_INCLUDE_DIR LIBUSB1_LIBRARY) +--- kinfocenter/Modules/usbview/CMakeLists.txt ++++ kinfocenter/Modules/usbview/CMakeLists.txt +@@ -1,15 +1,25 @@ ++macro_optional_find_package(LibUSB1) ++macro_bool_to_01(LIBUSB1_FOUND HAVE_LIBUSB1) ++macro_log_feature(LIBUSB1_FOUND "libusb-1" "User level access to USB devices" "http://libusb.sourceforge.net/" FALSE "" "Provides usb info support in KControl.") + +- ++configure_file (config-kcmusb.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-kcmusb.h ) + + ########### next target ############### + ++if (LIBUSB1_FOUND) ++ include_directories( ${LIBUSB1_INCLUDE_DIR} ) ++endif (LIBUSB1_FOUND) ++ + set(kcm_usb_PART_SRCS kcmusb.cpp usbdevices.cpp usbdb.cpp ) + + + kde4_add_plugin(kcm_usb ${kcm_usb_PART_SRCS}) + + +-target_link_libraries(kcm_usb ${KDE4_KDEUI_LIBS} ${QT_QTGUI_LIBRARY}) ++target_link_libraries(kcm_usb ${KDE4_KDEUI_LIBS} ${KDE4_SOLID_LIBS} ${QT_QTGUI_LIBRARY}) ++if (LIBUSB1_FOUND) ++ target_link_libraries(kcm_usb ${LIBUSB1_LIBRARY}) ++endif (LIBUSB1_FOUND) + + install(TARGETS kcm_usb DESTINATION ${PLUGIN_INSTALL_DIR} ) + +--- /dev/null ++++ kinfocenter/Modules/usbview/config-kcmusb.h.cmake +@@ -0,0 +1,2 @@ ++/* Defined if you have libusb */ ++#cmakedefine HAVE_LIBUSB1 1 +--- kinfocenter/Modules/usbview/kcmusb.cpp ++++ kinfocenter/Modules/usbview/kcmusb.cpp +@@ -12,7 +12,6 @@ + #include <QLayout> + #include <QSplitter> + #include <QtGui/QTextEdit> +-#include <QTimer> + #include <QHBoxLayout> + #include <QList> + #include <QTreeWidget> +@@ -20,6 +19,7 @@ + + #include <kaboutdata.h> + #include <kdialog.h> ++#include <solid/devicenotifier.h> + + #include <KPluginFactory> + #include <KPluginLoader> +@@ -63,11 +63,8 @@ USBViewer::USBViewer(QWidget *parent, const QVariantList &) : + _details = new QTextEdit(splitter); + _details->setReadOnly(true); + +- QTimer *refreshTimer = new QTimer(this); +- // 1 sec seems to be a good compromise between latency and polling load. +- refreshTimer->start(1000); +- +- connect(refreshTimer, SIGNAL(timeout()), SLOT(refresh())); ++ connect(Solid::DeviceNotifier::instance(),SIGNAL(deviceAdded(QString)), SLOT(refresh())); ++ connect(Solid::DeviceNotifier::instance(),SIGNAL(deviceRemoved(const QString)), SLOT(refresh())); + connect(_devices, SIGNAL(currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)), this, SLOT(selectionChanged(QTreeWidgetItem*))); + + KAboutData *about = new KAboutData(I18N_NOOP("kcmusb"), 0, ki18n("KDE USB Viewer"), +@@ -113,8 +110,12 @@ static void delete_recursive(QTreeWidgetItem *item, const QMap<int, QTreeWidgetI + void USBViewer::refresh() { + QMap<int, QTreeWidgetItem*> new_items; + ++#if defined(HAVE_LIBUSB1) ++ USBDevice::parse(); ++#else + if (!USBDevice::parse("/proc/bus/usb/devices")) + USBDevice::parseSys("/sys/bus/usb/devices"); ++#endif + + int level = 0; + bool found = true; +--- kinfocenter/Modules/usbview/usbdevices.cpp ++++ kinfocenter/Modules/usbview/usbdevices.cpp +@@ -27,9 +27,9 @@ + + #include <math.h> + +-#if defined(Q_OS_FREEBSD) || defined(Q_OS_NETBSD) +-#include <sys/ioctl.h> +-#include <sys/param.h> ++#include <config-kcmusb.h> ++#if defined(HAVE_LIBUSB1) ++#include <libusb.h> + #endif + + QList<USBDevice*> USBDevice::_devices; +@@ -48,6 +48,7 @@ USBDevice::~USBDevice() { + + } + ++#if !defined(HAVE_LIBUSB1) + static QString catFile(QString fname) { + char buffer[256]; + QString result; +@@ -129,6 +130,7 @@ void USBDevice::parseLine(const QString& line) { + } else if (line.startsWith("P:")) + sscanf(line.toLocal8Bit().data(), "P: Vendor=%x ProdID=%x Rev=%x.%x", &_vendorID, &_prodID, &_revMajor, &_revMinor); + } ++#endif // !defined(HAVE_LIBUSB1) + + USBDevice* USBDevice::find(int bus, int device) { + foreach(USBDevice* usbDevice, _devices) { +@@ -160,6 +162,10 @@ QString USBDevice::dump() { + + r += "<br/><table>"; + ++ r += i18n("<tr><td><i>Bus number</i></td><td>%1</td></tr>", _bus); ++ r += i18n("<tr><td><i>Device address</i></td><td>%1</td></tr>", _device); ++ r += "<tr><td></td></tr>"; ++ + QString c = QString("<td>%1</td>").arg(_class); + QString cname = _db->cls(_class); + if (!cname.isEmpty()) +@@ -175,11 +181,9 @@ QString USBDevice::dump() { + if (!prname.isEmpty()) + pr += "<td>(" + prname +")</td>"; + r += i18n("<tr><td><i>Protocol</i></td>%1</tr>", pr); +-#if !(defined(Q_OS_FREEBSD) || defined(Q_OS_NETBSD)) + r += ki18n("<tr><td><i>USB Version</i></td><td>%1.%2</td></tr>") + .subs(_verMajor,0,16).subs(_verMinor,2,16,QChar::fromLatin1('0')) + .toString(); +-#endif + r += "<tr><td></td></tr>"; + + QString v = QString::number(_vendorID, 16); +@@ -198,22 +202,15 @@ QString USBDevice::dump() { + r += "<tr><td></td></tr>"; + + r += i18n("<tr><td><i>Speed</i></td><td>%1 Mbit/s</td></tr>", _speed); +- r += i18n("<tr><td><i>Channels</i></td><td>%1</td></tr>", _channels); +-#if (defined(Q_OS_FREEBSD) || defined(Q_OS_NETBSD)) && !defined(DISABLE_USBDEVICES_FREEBSD) +- if ( _power ) ++#if defined(HAVE_LIBUSB1) ++ if ( _power != -1 ) + r += i18n("<tr><td><i>Power Consumption</i></td><td>%1 mA</td></tr>", _power); + else +- r += i18n("<tr><td><i>Power Consumption</i></td><td>self powered</td></tr>"); +- r += i18n("<tr><td><i>Attached Devicenodes</i></td><td>%1</td></tr>", _devnodes.at(0)); +- if ( _devnodes.count() > 1 ) { +- QStringList::const_iterator it = _devnodes.constBegin(); +- ++it; +- for (; it != _devnodes.constEnd(); ++it ) +- r += "<tr><td></td><td>" + *it + "</td></tr>"; +- } +-#else ++ r += i18n("<tr><td><i>Power Consumption</i></td><td>unknown</td></tr>"); ++#else // defined(HAVE_LIBUSB1) ++ r += i18n("<tr><td><i>Channels</i></td><td>%1</td></tr>", _channels); ++#endif // defined(HAVE_LIBUSB1) + r += i18n("<tr><td><i>Max. Packet Size</i></td><td>%1</td></tr>", _maxPacketSize); +-#endif + r += "<tr><td></td></tr>"; + + if (_hasBW) { +@@ -228,7 +225,82 @@ QString USBDevice::dump() { + return r; + } + +-#if !(defined(Q_OS_FREEBSD) || defined(Q_OS_NETBSD)) ++#if defined(HAVE_LIBUSB1) ++ ++void USBDevice::dump_usbdev_info(libusb_device *dev) { ++ ++ _bus = libusb_get_bus_number(dev); ++ _device = libusb_get_device_address(dev); ++ ++ switch (libusb_get_device_speed(dev)) { ++ case LIBUSB_SPEED_LOW: _speed = 1.5; break; ++ case LIBUSB_SPEED_FULL: _speed = 12; break; ++ case LIBUSB_SPEED_HIGH: _speed = 480; break; ++ case LIBUSB_SPEED_SUPER: _speed = 5000; break; ++ } ++ ++ struct libusb_config_descriptor *conf; ++ if (libusb_get_active_config_descriptor(dev, &conf) == 0) { ++ _power = conf->MaxPower; ++ libusb_free_config_descriptor(conf); ++ } else { ++ _power = -1; ++ } ++ ++ struct libusb_device_descriptor desc; ++ if (libusb_get_device_descriptor(dev, &desc) == 0) { ++ _verMajor = desc.bcdUSB >> 8; ++ _verMinor = desc.bcdUSB & 0x00FF; ++ _class = desc.bDeviceClass; ++ _sub = desc.bDeviceSubClass; ++ _prot = desc.bDeviceProtocol; ++ _maxPacketSize = desc.bMaxPacketSize0; ++ _configs = desc.bNumConfigurations; ++ _vendorID = desc.idVendor; ++ _prodID = desc.idProduct; ++ _revMajor = desc.bcdDevice >> 8; ++ _revMinor = desc.bcdDevice & 0x00FF; ++ } ++ ++ libusb_device_handle *hdev; ++ uchar buf[256]; ++ if (libusb_open(dev, &hdev) == 0) { ++ if (libusb_get_string_descriptor_ascii(hdev, desc.iManufacturer, buf, sizeof(buf)) > 0) ++ _manufacturer = (char*) buf; ++ if (libusb_get_string_descriptor_ascii(hdev, desc.iProduct, buf, sizeof(buf)) > 0) ++ _product = (char*) buf; ++ if (libusb_get_string_descriptor_ascii(hdev, desc.iSerialNumber, buf, sizeof(buf)) > 0) ++ _serial = (char*) buf; ++ libusb_close(hdev); ++ } ++} ++ ++bool USBDevice::parse() { ++ _devices.clear(); ++ ++ int r = libusb_init(NULL); ++ if (r != 0) ++ return false; ++ ++ libusb_device **devs; ++ ssize_t cnt = libusb_get_device_list(NULL, &devs); ++ if (cnt < 0) ++ return false; ++ ++ libusb_device *dev; ++ int i = 0; ++ while ((dev = devs[i++]) != NULL) { ++ USBDevice* device = new USBDevice(); ++ device->dump_usbdev_info(dev); ++ } ++ libusb_free_device_list(devs, 1); ++ ++ libusb_exit(NULL); ++ return true; ++} ++ ++#else // defined(HAVE_LIBUSB1) ++#if defined(Q_OS_LINUX) + bool USBDevice::parse(const QString &fname) { + _devices.clear(); + +@@ -290,146 +362,19 @@ bool USBDevice::parseSys(const QString &dname) { + return d.count(); + } + +-#else +- +-// Unused by *BSD +-bool USBDevice::parseSys(const QString &fname) +-{ +- Q_UNUSED(fname) +- +- return true; +-} +- +-# if defined(DISABLE_USBDEVICES_FREEBSD) +- +-/* +- * FIXME: The USB subsystem has changed a lot in FreeBSD 8.0 +- * Support for it must be written. +- */ ++#else // defined(Q_OS_LINUX) + +-bool USBDevice::parse(const QString &fname) +-{ ++bool USBDevice::parse(const QString &fname) { + Q_UNUSED(fname) + + return true; + } + +-# else +- +-/* +- * FreeBSD support by Markus Brueffer <markus@brueffer.de> +- * +- * Basic idea and some code fragments were taken from FreeBSD's usbdevs(8), +- * originally developed for NetBSD, so this code should work with no or +- * only little modification on NetBSD. +- */ +- +-void USBDevice::collectData( int fd, int level, usb_device_info &di, int parent) +-{ +- // determine data for this device +- _level = level; +- _parent = parent; +- +- _bus = di.udi_bus; +- _device = di.udi_addr; +- _product = QLatin1String(di.udi_product); +- if ( _device == 1 ) +- _product += ' ' + QString::number( _bus ); +- _manufacturer = QLatin1String(di.udi_vendor); +- _prodID = di.udi_productNo; +- _vendorID = di.udi_vendorNo; +- _class = di.udi_class; +- _sub = di.udi_subclass; +- _prot = di.udi_protocol; +- _power = di.udi_power; +- _channels = di.udi_nports; +- +- // determine the speed +-#if defined(__DragonFly__) || (defined(Q_OS_FREEBSD) && __FreeBSD_version > 490102) || defined(Q_OS_NETBSD) +- switch (di.udi_speed) { +- case USB_SPEED_LOW: _speed = 1.5; break; +- case USB_SPEED_FULL: _speed = 12.0; break; +- case USB_SPEED_HIGH: _speed = 480.0; break; +- } +-#else +- _speed = di.udi_lowspeed ? 1.5 : 12.0; +-#endif +- +- // Get all attached devicenodes +- for ( int i = 0; i < USB_MAX_DEVNAMES; ++i ) +- if ( di.udi_devnames[i][0] ) +- _devnodes << di.udi_devnames[i]; +- +- // For compatibility, split the revision number +- sscanf( di.udi_release, "%x.%x", &_revMajor, &_revMinor ); +- +- // Cycle through the attached devices if there are any +- for ( int p = 0; p < di.udi_nports; ++p ) { +- // Get data for device +- struct usb_device_info di2; +- +- di2.udi_addr = di.udi_ports[p]; +- +- if ( di2.udi_addr >= USB_MAX_DEVICES ) +- continue; +- +- if ( ioctl(fd, USB_DEVICEINFO, &di2) == -1 ) +- continue; +- +- // Only add the device if we didn't detect it, yet +- if (!find( di2.udi_bus, di2.udi_addr ) ) +- { +- USBDevice *device = new USBDevice(); +- device->collectData( fd, level + 1, di2, di.udi_addr ); +- } +- } +-} +- +-bool USBDevice::parse(const QString &fname) +-{ +- Q_UNUSED(fname) +- +- static bool showErrorMessage = true; +- bool error = false; +- _devices.clear(); +- +- QFile controller("/dev/usb0"); +- int i = 1; +- while ( controller.exists() ) +- { +- // If the devicenode exists, continue with further inspection +- if ( controller.open(QIODevice::ReadOnly) ) +- { +- for ( int addr = 1; addr < USB_MAX_DEVICES; ++addr ) +- { +- struct usb_device_info di; +- +- di.udi_addr = addr; +- if ( ioctl(controller.handle(), USB_DEVICEINFO, &di) != -1 ) +- { +- if (!find( di.udi_bus, di.udi_addr ) ) +- { +- USBDevice *device = new USBDevice(); +- device->collectData( controller.handle(), 0, di, 0); +- } +- } +- } +- controller.close(); +-#ifndef Q_OS_NETBSD +- } else { +- error = true; +-#endif +- } +- controller.setFileName( QString::fromLocal8Bit("/dev/usb%1").arg(i++) ); +- } +- +- if ( showErrorMessage && error ) { +- showErrorMessage = false; +- KMessageBox::error( 0, i18n("Could not open one or more USB controller. Make sure, you have read access to all USB controllers that should be listed here.")); +- } ++bool USBDevice::parseSys(const QString &dname) { ++ Q_UNUSED(dname) + + return true; + } + +-# endif // defined(DISABLE_USBDEVICES_FREEBSD) +-#endif // !(defined(Q_OS_FREEBSD) || defined(Q_OS_NETBSD)) ++#endif // defined(Q_OS_LINUX) ++#endif // defined(HAVE_LIBUSB1) +--- kinfocenter/Modules/usbview/usbdevices.h ++++ kinfocenter/Modules/usbview/usbdevices.h +@@ -14,18 +14,9 @@ + #include <QList> + #include <QString> + +-#if defined(__DragonFly__) +-#include <bus/usb/usb.h> +-#include <QStringList> +-#elif defined(Q_OS_FREEBSD) || defined(Q_OS_NETBSD) +-#include <sys/param.h> +-# if defined(__FreeBSD_version) && __FreeBSD_version >= 800100 +-# define DISABLE_USBDEVICES_FREEBSD +-# warning "The USB subsystem has changed in 8.0. Disabling." +-# else +-# include <dev/usb/usb.h> +-# include <QStringList> +-# endif ++#include <config-kcmusb.h> ++#if defined(HAVE_LIBUSB1) ++#include <libusb.h> + #endif + + class USBDB; +@@ -36,10 +27,12 @@ public: + USBDevice(); + + ~USBDevice(); +- ++#if defined(HAVE_LIBUSB1) ++ void dump_usbdev_info(libusb_device *dev); ++#else + void parseLine(const QString &line); + void parseSysDir(int bus, int parent, int level, const QString &line); +- ++#endif + int level() const { + return _level; + } +@@ -60,8 +53,12 @@ public: + return _devices; + } + static USBDevice *find(int bus, int device); ++#if defined(HAVE_LIBUSB1) ++ static bool parse(); ++#else + static bool parse(const QString& fname); + static bool parseSys(const QString& fname); ++#endif + + private: + +@@ -82,10 +79,6 @@ private: + + unsigned int _vendorID, _prodID, _revMajor, _revMinor; + +-#if (defined(Q_OS_FREEBSD) || defined(Q_OS_NETBSD)) && !defined(DISABLE_USBDEVICES_FREEBSD) +- void collectData( int fd, int level, usb_device_info &di, int parent ); +- QStringList _devnodes; +-#endif + }; + + #endif diff --git a/x11/kdelibs4/Makefile b/x11/kdelibs4/Makefile index a480d9a9758..02327477f41 100644 --- a/x11/kdelibs4/Makefile +++ b/x11/kdelibs4/Makefile @@ -3,7 +3,6 @@ PORTNAME= kdelibs PORTVERSION= ${KDE4_VERSION} -PORTREVISION= 5 CATEGORIES= x11 kde MASTER_SITES= KDE/${KDE4_BRANCH}/${PORTVERSION}/src DIST_SUBDIR= KDE/${PORTVERSION} diff --git a/x11/kdelibs4/distinfo b/x11/kdelibs4/distinfo index 3b242de411f..52fb0948d63 100644 --- a/x11/kdelibs4/distinfo +++ b/x11/kdelibs4/distinfo @@ -1,2 +1,2 @@ -SHA256 (KDE/4.14.2/kdelibs-4.14.2.tar.xz) = 39745a77f019cc1280374aa5de02fbf961393d1045059aa811fc374e0afd895b -SIZE (KDE/4.14.2/kdelibs-4.14.2.tar.xz) = 11597872 +SHA256 (KDE/4.14.3/kdelibs-4.14.3.tar.xz) = f8206da1106184ef0bd031b82701c4910b8dade331c4cdaf1cd9c6c5208cfd9e +SIZE (KDE/4.14.3/kdelibs-4.14.3.tar.xz) = 11600500 diff --git a/x11/kdelibs4/files/patch-git_0df92439 b/x11/kdelibs4/files/patch-git_0df92439 deleted file mode 100644 index 9185f4bb609..00000000000 --- a/x11/kdelibs4/files/patch-git_0df92439 +++ /dev/null @@ -1,355 +0,0 @@ -commit 0df92439241a76c6a67efa9485bd95c3c25d63a0 -Author: Christian Mollekopf <chrigi_1@fastmail.fm> -Date: Thu Jan 22 15:04:16 2015 +0100 - - KRecursiveFilterProxyModel: Fixed the model - - The model was not working properly and didn't include all items under - some circumstances. - This patch fixes the following scenarios in particular: - - * The change in sourceDataChanged is required to fix the shortcut condition. - The idea is that if the parent is already part of the model (it must be if acceptRow returns true), - we can directly invoke dataChanged on the parent, resulting in the changed index - getting reevaluated. However, because the recursive filterAcceptsRow version was used - the shortcut was also used when only the current index matches the filter and - the parent index is in fact not yet in the model. In this case we failed to call - dataChanged on the right index and thus the complete branch was never added to the model. - - * The change in refreshAscendantMapping is required to include indexes that were - included by descendants. The intended way how this was supposed to work is that we - traverse the tree upwards and find the last index that is not yet part of the model. - We would then call dataChanged on that index causing it and its descendants to get reevaluated. - However, acceptRow does not reflect wether an index is already in the model or not. - Consider the following model: - - - A - - B - - C - - D - - If C is included in the model by default but D not, and A & B only get included due to C, we have the following model: - - - A - - B - - C - - If we then call refreshAscendantsMapping on D it will not consider B as already being part of the model. - This results in the toplevel index A being considered lastAscendant, and a call to dataChanged on A results in - a reevaluation of A only, which is already in the model. Thus D never gets added to the model. - - Unfortunately there is no way to probe QSortFilterProxyModel for indexes that are - already part of the model. Even the const mapFromSource internally creates a mapping when called, - and thus instead of revealing indexes that are not yet part of the model, it silently - creates a mapping (without issuing the relevant signals!). - - As the only possible workaround we have to issues dataChanged for all ancestors - which is ignored for indexes that are not yet mapped, and results in a rowsInserted - signal for the correct indexes. It also results in superfluous dataChanged signals, - since we don't know when to stop, but at least we have a properly behaving model - this way. - - REVIEW: 120119 - BUG: 338950 - ---- kdeui/itemviews/krecursivefilterproxymodel.cpp -+++ kdeui/itemviews/krecursivefilterproxymodel.cpp -@@ -108,12 +108,9 @@ public: - void sourceRowsRemoved(const QModelIndex &source_parent, int start, int end); - - /** -- Given that @p index does not match the filter, clear mappings in the QSortFilterProxyModel up to and excluding the -- first ascendant that does match, and remake the mappings. -- -- If @p refreshAll is true, this method also refreshes intermediate mappings. This is significant when removing rows. -+ Given that @p index does not match the filter, clear mappings in the QSortFilterProxyModel up to roo, and remake the mappings. - */ -- void refreshAscendantMapping(const QModelIndex &index, bool refreshAll = false); -+ void refreshAscendantMapping(const QModelIndex &index); - - bool ignoreRemove; - bool completeInsert; -@@ -126,7 +123,7 @@ void KRecursiveFilterProxyModelPrivate::sourceDataChanged(const QModelIndex &sou - - QModelIndex source_parent = source_top_left.parent(); - -- if (!source_parent.isValid() || q->filterAcceptsRow(source_parent.row(), source_parent.parent())) -+ if (!source_parent.isValid() || q->acceptRow(source_parent.row(), source_parent.parent())) - { - invokeDataChanged(source_top_left, source_bottom_right); - return; -@@ -146,27 +143,20 @@ void KRecursiveFilterProxyModelPrivate::sourceDataChanged(const QModelIndex &sou - refreshAscendantMapping(source_parent); - } - --void KRecursiveFilterProxyModelPrivate::refreshAscendantMapping(const QModelIndex &index, bool refreshAll) -+void KRecursiveFilterProxyModelPrivate::refreshAscendantMapping(const QModelIndex &index) - { - Q_Q(KRecursiveFilterProxyModel); -- - Q_ASSERT(index.isValid()); -- QModelIndex lastAscendant = index; -- QModelIndex sourceAscendant = index.parent(); -+ -+ QModelIndex sourceAscendant = index; - // We got a matching descendant, so find the right place to insert the row. - // We need to tell the QSortFilterProxyModel that the first child between an existing row in the model - // has changed data so that it will get a mapping. -- while(sourceAscendant.isValid() && !q->acceptRow(sourceAscendant.row(), sourceAscendant.parent())) -+ while(sourceAscendant.isValid()) - { -- if (refreshAll) -- invokeDataChanged(sourceAscendant, sourceAscendant); -- -- lastAscendant = sourceAscendant; -+ invokeDataChanged(sourceAscendant, sourceAscendant); - sourceAscendant = sourceAscendant.parent(); - } -- -- // Inform the model that its data changed so that it creates new mappings and finds the rows which now match the filter. -- invokeDataChanged(lastAscendant, lastAscendant); - } - - void KRecursiveFilterProxyModelPrivate::sourceRowsAboutToBeInserted(const QModelIndex &source_parent, int start, int end) -@@ -261,7 +251,7 @@ void KRecursiveFilterProxyModelPrivate::sourceRowsRemoved(const QModelIndex &sou - // This is needed because QSFPM only invalidates the mapping for the - // index range given to dataChanged, not its children. - if (source_parent.isValid()) -- refreshAscendantMapping(source_parent, true); -+ refreshAscendantMapping(source_parent); - } - - KRecursiveFilterProxyModel::KRecursiveFilterProxyModel(QObject* parent) ---- kdeui/tests/CMakeLists.txt -+++ kdeui/tests/CMakeLists.txt -@@ -82,6 +82,7 @@ KDEUI_PROXYMODEL_TESTS( - kdescendantsproxymodeltest - kselectionproxymodeltest - testmodelqueuedconnections -+ krecursivefilterproxymodeltest - ) - - KDEUI_EXECUTABLE_TESTS( ---- /dev/null -+++ kdeui/tests/krecursivefilterproxymodeltest.cpp -@@ -0,0 +1,220 @@ -+/* -+ Copyright (c) 2014 Christian Mollekopf <mollekopf@kolabsys.com> -+ -+ This library is free software; you can redistribute it and/or modify it -+ under the terms of the GNU Library General Public License as published by -+ the Free Software Foundation; either version 2 of the License, or (at your -+ option) any later version. -+ -+ This library is distributed in the hope that it will be useful, but WITHOUT -+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public -+ License for more details. -+ -+ You should have received a copy of the GNU Library General Public License -+ along with this library; see the file COPYING.LIB. If not, write to the -+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -+ 02110-1301, USA. -+*/ -+ -+ -+#include <qtest_kde.h> -+ -+#include <krecursivefilterproxymodel.h> -+#include <QStandardItemModel> -+ -+class ModelSignalSpy : public QObject { -+ Q_OBJECT -+public: -+ explicit ModelSignalSpy(QAbstractItemModel &model) { -+ connect(&model, SIGNAL(rowsInserted(QModelIndex, int, int)), this, SLOT(onRowsInserted(QModelIndex,int,int))); -+ connect(&model, SIGNAL(rowsRemoved(QModelIndex, int, int)), this, SLOT(onRowsRemoved(QModelIndex,int,int))); -+ connect(&model, SIGNAL(rowsMoved(QModelIndex, int, int, QModelIndex, int)), this, SLOT(onRowsMoved(QModelIndex,int,int, QModelIndex, int))); -+ connect(&model, SIGNAL(dataChanged(QModelIndex,QModelIndex)), this, SLOT(onDataChanged(QModelIndex,QModelIndex))); -+ connect(&model, SIGNAL(layoutChanged()), this, SLOT(onLayoutChanged())); -+ connect(&model, SIGNAL(modelReset()), this, SLOT(onModelReset())); -+ } -+ -+ QStringList mSignals; -+ QModelIndex parent; -+ int start; -+ int end; -+ -+public Q_SLOTS: -+ void onRowsInserted(QModelIndex p, int s, int e) { -+ mSignals << QLatin1String("rowsInserted"); -+ parent = p; -+ start = s; -+ end = e; -+ } -+ void onRowsRemoved(QModelIndex p, int s, int e) { -+ mSignals << QLatin1String("rowsRemoved"); -+ parent = p; -+ start = s; -+ end = e; -+ } -+ void onRowsMoved(QModelIndex,int,int,QModelIndex,int) { -+ mSignals << QLatin1String("rowsMoved"); -+ } -+ void onDataChanged(QModelIndex,QModelIndex) { -+ mSignals << QLatin1String("dataChanged"); -+ } -+ void onLayoutChanged() { -+ mSignals << QLatin1String("layoutChanged"); -+ } -+ void onModelReset() { -+ mSignals << QLatin1String("modelReset"); -+ } -+}; -+ -+class TestModel : public KRecursiveFilterProxyModel -+{ -+ Q_OBJECT -+public: -+ virtual bool acceptRow(int sourceRow, const QModelIndex &sourceParent) const -+ { -+ // qDebug() << sourceModel()->index(sourceRow, 0, sourceParent).data().toString() << sourceModel()->index(sourceRow, 0, sourceParent).data(Qt::UserRole+1).toBool(); -+ return sourceModel()->index(sourceRow, 0, sourceParent).data(Qt::UserRole+1).toBool(); -+ } -+}; -+ -+static QModelIndex getIndex(const char *string, const QAbstractItemModel &model) -+{ -+ QModelIndexList list = model.match(model.index(0, 0), Qt::DisplayRole, QString::fromLatin1(string), 1, Qt::MatchRecursive); -+ if (list.isEmpty()) { -+ return QModelIndex(); -+ } -+ return list.first(); -+} -+ -+class KRecursiveFilterProxyModelTest : public QObject -+{ -+ Q_OBJECT -+private: -+ -+private slots: -+ // Test that we properly react to a data-changed signal in a descendant and include all required rows -+ void testDataChange() -+ { -+ QStandardItemModel model; -+ TestModel proxy; -+ proxy.setSourceModel(&model); -+ -+ QStandardItem *index1 = new QStandardItem("1"); -+ index1->setData(false); -+ model.appendRow(index1); -+ -+ QVERIFY(!getIndex("1", proxy).isValid()); -+ -+ QStandardItem *index1_1_1 = new QStandardItem("1.1.1"); -+ index1_1_1->setData(false); -+ QStandardItem *index1_1 = new QStandardItem("1.1"); -+ index1_1->setData(false); -+ index1_1->appendRow(index1_1_1); -+ index1->appendRow(index1_1); -+ -+ ModelSignalSpy spy(proxy); -+ index1_1_1->setData(true); -+ -+ QVERIFY(getIndex("1", proxy).isValid()); -+ QVERIFY(getIndex("1.1", proxy).isValid()); -+ QVERIFY(getIndex("1.1.1", proxy).isValid()); -+ -+ QCOMPARE(spy.mSignals, QStringList() << QLatin1String("rowsInserted")); -+ } -+ -+ void testInsert() -+ { -+ QStandardItemModel model; -+ TestModel proxy; -+ proxy.setSourceModel(&model); -+ -+ QStandardItem *index1 = new QStandardItem("index1"); -+ index1->setData(false); -+ model.appendRow(index1); -+ -+ QStandardItem *index1_1 = new QStandardItem("index1_1"); -+ index1_1->setData(false); -+ index1->appendRow(index1_1); -+ -+ QStandardItem *index1_1_1 = new QStandardItem("index1_1_1"); -+ index1_1_1->setData(false); -+ index1_1->appendRow(index1_1_1); -+ -+ QVERIFY(!getIndex("index1", proxy).isValid()); -+ QVERIFY(!getIndex("index1_1", proxy).isValid()); -+ QVERIFY(!getIndex("index1_1_1", proxy).isValid()); -+ -+ ModelSignalSpy spy(proxy); -+ { -+ QStandardItem *index1_1_1_1 = new QStandardItem("index1_1_1_1"); -+ index1_1_1_1->setData(true); -+ index1_1_1->appendRow(index1_1_1_1); -+ } -+ -+ QVERIFY(getIndex("index1", proxy).isValid()); -+ QVERIFY(getIndex("index1_1", proxy).isValid()); -+ QVERIFY(getIndex("index1_1_1", proxy).isValid()); -+ QVERIFY(getIndex("index1_1_1_1", proxy).isValid()); -+ QCOMPARE(spy.mSignals, QStringList() << QLatin1String("rowsInserted")); -+ QCOMPARE(spy.parent, QModelIndex()); -+ } -+ -+ -+ // We want to get index1_1_1_1 into the model which is a descendant of index1_1. -+ // index1_1 is already in the model from the neighbor2 branch. We must ensure dataChange is called on index1_1, -+ // so index1_1_1_1 is included in the model. -+ void testNeighborPath() -+ { -+ QStandardItemModel model; -+ TestModel proxy; -+ proxy.setSourceModel(&model); -+ -+ QStandardItem *index1 = new QStandardItem("index1"); -+ index1->setData(false); -+ model.appendRow(index1); -+ -+ QStandardItem *index1_1 = new QStandardItem("index1_1"); -+ index1_1->setData(false); -+ index1->appendRow(index1_1); -+ -+ QStandardItem *index1_1_1 = new QStandardItem("index1_1_1"); -+ index1_1_1->setData(false); -+ index1_1->appendRow(index1_1_1); -+ -+ { -+ QStandardItem *nb1 = new QStandardItem("neighbor"); -+ nb1->setData(false); -+ index1_1->appendRow(nb1); -+ -+ QStandardItem *nb2 = new QStandardItem("neighbor2"); -+ nb2->setData(true); -+ nb1->appendRow(nb2); -+ } -+ -+ //These tests affect the test. It seems without them the mapping is not created in qsortfilterproxymodel, resulting in the item -+ //simply getting added later on. With these the model didn't react to the added index1_1_1_1 as it should. -+ QVERIFY(!getIndex("index1_1_1", proxy).isValid()); -+ QVERIFY(getIndex("index1_1", proxy).isValid()); -+ QVERIFY(getIndex("neighbor", proxy).isValid()); -+ QVERIFY(getIndex("neighbor2", proxy).isValid()); -+ -+ ModelSignalSpy spy(proxy); -+ -+ { -+ QStandardItem *index1_1_1_1 = new QStandardItem("index1_1_1_1"); -+ index1_1_1_1->setData(true); -+ index1_1_1->appendRow(index1_1_1_1); -+ } -+ -+ QVERIFY(getIndex("index1_1_1", proxy).isValid()); -+ QVERIFY(getIndex("index1_1_1_1", proxy).isValid()); -+ //The dataChanged signals are not intentional and caused by refreshAscendantMapping. Unfortunately we can't avoid them. -+ QCOMPARE(spy.mSignals, QStringList() << QLatin1String("rowsInserted") << QLatin1String("dataChanged") << QLatin1String("dataChanged")); -+ } -+ -+}; -+ -+QTEST_KDEMAIN(KRecursiveFilterProxyModelTest, NoGUI) -+ -+#include "krecursivefilterproxymodeltest.moc" diff --git a/x11/kgamma/distinfo b/x11/kgamma/distinfo index 8745f24e597..19c9f8d510b 100644 --- a/x11/kgamma/distinfo +++ b/x11/kgamma/distinfo @@ -1,2 +1,2 @@ -SHA256 (KDE/4.14.2/kgamma-4.14.2.tar.xz) = 0a8ae535d7bf07b2c11aa462866936e2e77858f769a3045608d714152247fabb -SIZE (KDE/4.14.2/kgamma-4.14.2.tar.xz) = 22932 +SHA256 (KDE/4.14.3/kgamma-4.14.3.tar.xz) = 93f78c56b81684152e72b6b1672814505085b372213c77f184f78fac410bf5b2 +SIZE (KDE/4.14.3/kgamma-4.14.3.tar.xz) = 22932 diff --git a/x11/konsole/distinfo b/x11/konsole/distinfo index b2b859e020a..800440a65a1 100644 --- a/x11/konsole/distinfo +++ b/x11/konsole/distinfo @@ -1,2 +1,2 @@ -SHA256 (KDE/4.14.2/konsole-4.14.2.tar.xz) = e6afac385e4746438205e1b02e0001141c36aa0c032d1ef9647588ab51d386e2 -SIZE (KDE/4.14.2/konsole-4.14.2.tar.xz) = 455108 +SHA256 (KDE/4.14.3/konsole-4.14.3.tar.xz) = 2f750e6930309f8a3b939c7cd30415a08d71da27af10893c3341305db803f155 +SIZE (KDE/4.14.3/konsole-4.14.3.tar.xz) = 455216 |